[libvirt] [PATCH v2 19/23] qemu-extdevice: prepare, start and stop slirp-helper

Michal Privoznik mprivozn at redhat.com
Fri Sep 6 11:36:31 UTC 2019


On 8/8/19 4:55 PM, marcandre.lureau at redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau at redhat.com>
> 
> If a slirp-helper is associated with a network interface,
> prepare/start/stop the process via qemu-extdevice.
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau at redhat.com>
> ---
>   src/qemu/qemu_extdevice.c | 47 +++++++++++++++++++++++++++++++++------
>   src/qemu/qemu_extdevice.h |  5 +++--
>   src/qemu/qemu_process.c   |  4 ++--
>   3 files changed, 45 insertions(+), 11 deletions(-)
> 
> diff --git a/src/qemu/qemu_extdevice.c b/src/qemu/qemu_extdevice.c
> index 0aa050cb0a..179552a3ae 100644
> --- a/src/qemu/qemu_extdevice.c
> +++ b/src/qemu/qemu_extdevice.c
> @@ -23,6 +23,7 @@
>   #include "qemu_extdevice.h"
>   #include "qemu_domain.h"
>   #include "qemu_tpm.h"
> +#include "qemu_slirp.h"
>   
>   #include "viralloc.h"
>   #include "virlog.h"
> @@ -87,14 +88,24 @@ qemuExtDevicesInitPaths(virQEMUDriverPtr driver,
>    */
>   int
>   qemuExtDevicesPrepareHost(virQEMUDriverPtr driver,
> -                          virDomainDefPtr def)
> +                          virDomainObjPtr vm)
>   {
> -    int ret = 0;
> +    virDomainDefPtr def = vm->def;
> +    size_t i;
>   
> -    if (def->tpm)
> -        ret = qemuExtTPMPrepareHost(driver, def);
> +    if (def->tpm &&
> +        qemuExtTPMPrepareHost(driver, def) < 0)
> +        return -1;
>   
> -    return ret;
> +    for (i = 0; i < def->nnets; i++) {
> +        virDomainNetDefPtr net = def->nets[i];
> +        qemuSlirpPtr slirp = QEMU_DOMAIN_NETWORK_PRIVATE(net)->slirp;
> +
> +        if (slirp && qemuSlirpOpen(slirp, driver, def) < 0)
> +            return -1;
> +    }
> +
> +    return 0;
>   }
>   
>   
> @@ -114,15 +125,26 @@ int
>   qemuExtDevicesStart(virQEMUDriverPtr driver,
>                       virDomainObjPtr vm,
>                       qemuDomainLogContextPtr logCtxt,
> -                    bool incomingMigration)
> +                    qemuProcessIncomingDefPtr incoming)

No need for this change.

>   {
> +    virDomainDefPtr def = vm->def;
>       int ret = 0;
> +    size_t i;
>   
>       if (qemuExtDevicesInitPaths(driver, vm->def) < 0)
>           return -1;
>   
>       if (vm->def->tpm)
> -        ret = qemuExtTPMStart(driver, vm, logCtxt, incomingMigration);
> +        ret = qemuExtTPMStart(driver, vm, logCtxt, incoming != NULL);
> +
> +    for (i = 0; i < def->nnets; i++) {
> +        virDomainNetDefPtr net = def->nets[i];
> +        qemuSlirpPtr slirp = QEMU_DOMAIN_NETWORK_PRIVATE(net)->slirp;
> +
> +        if (slirp &&
> +            qemuSlirpStart(slirp, vm, driver, net, false, incoming) < 0)
> +            return -1;
> +    }
>   
>       return ret;
>   }
> @@ -132,11 +154,22 @@ void
>   qemuExtDevicesStop(virQEMUDriverPtr driver,
>                      virDomainObjPtr vm)
>   {
> +    virDomainDefPtr def = vm->def;
> +    size_t i;
> +
>       if (qemuExtDevicesInitPaths(driver, vm->def) < 0)
>           return;
>   
>       if (vm->def->tpm)
>           qemuExtTPMStop(driver, vm);
> +
> +    for (i = 0; i < def->nnets; i++) {
> +        virDomainNetDefPtr net = def->nets[i];
> +        qemuSlirpPtr slirp = QEMU_DOMAIN_NETWORK_PRIVATE(net)->slirp;
> +
> +        if (slirp)
> +            qemuSlirpStop(slirp, vm, driver, net, false);
> +    }
>   }
>   
>   
> diff --git a/src/qemu/qemu_extdevice.h b/src/qemu/qemu_extdevice.h
> index cdd20c28ef..a526308c51 100644
> --- a/src/qemu/qemu_extdevice.h
> +++ b/src/qemu/qemu_extdevice.h
> @@ -22,6 +22,7 @@
>   
>   #include "qemu_conf.h"
>   #include "qemu_domain.h"
> +#include "qemu_process.h"
>   
>   int qemuExtDeviceLogCommand(virQEMUDriverPtr driver,
>                               virDomainObjPtr vm,
> @@ -31,7 +32,7 @@ int qemuExtDeviceLogCommand(virQEMUDriverPtr driver,
>       ATTRIBUTE_RETURN_CHECK;
>   
>   int qemuExtDevicesPrepareHost(virQEMUDriverPtr driver,
> -                              virDomainDefPtr def)
> +                              virDomainObjPtr vm)
>       ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2)
>       ATTRIBUTE_RETURN_CHECK;
>   
> @@ -42,7 +43,7 @@ void qemuExtDevicesCleanupHost(virQEMUDriverPtr driver,
>   int qemuExtDevicesStart(virQEMUDriverPtr driver,
>                           virDomainObjPtr vm,
>                           qemuDomainLogContextPtr logCtxt,
> -                        bool incomingMigration)
> +                        qemuProcessIncomingDefPtr incoming)

This change is not needed and thus so the include of qemu_process.h is 
needless too.

>       ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3)
>       ATTRIBUTE_RETURN_CHECK;
>   
> diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
> index f8d740979d..d41ee0f25b 100644
> --- a/src/qemu/qemu_process.c
> +++ b/src/qemu/qemu_process.c
> @@ -6602,7 +6602,7 @@ qemuProcessPrepareHost(virQEMUDriverPtr driver,
>           goto cleanup;
>   
>       VIR_DEBUG("Preparing external devices");
> -    if (qemuExtDevicesPrepareHost(driver, vm->def) < 0)
> +    if (qemuExtDevicesPrepareHost(driver, vm) < 0)
>           goto cleanup;
>   
>       if (qemuProcessPrepareSEVGuestInput(vm) < 0)
> @@ -6776,7 +6776,7 @@ qemuProcessLaunch(virConnectPtr conn,
>       if (qemuProcessGenID(vm, flags) < 0)
>           goto cleanup;
>   
> -    if (qemuExtDevicesStart(driver, vm, logCtxt, incoming != NULL) < 0)
> +    if (qemuExtDevicesStart(driver, vm, logCtxt, incoming) < 0)


Just keep this as is.

Reviewed-by: Michal Privoznik <mprivozn at redhat.com>

Michal




More information about the libvir-list mailing list