[PATCH 8/8] qemu-slirp: register helper for migration

Marc-André Lureau marcandre.lureau at redhat.com
Mon Feb 24 15:57:33 UTC 2020


Hi

On Thu, Feb 20, 2020 at 10:04 AM Michal Privoznik <mprivozn at redhat.com> wrote:
>
> On 1/14/20 2:46 PM, marcandre.lureau at redhat.com wrote:
> > From: Marc-André Lureau <marcandre.lureau at redhat.com>
> >
> > When the helper supports DBus, connect it to the bus and set its ID.
> >
> > If the helper supports migration, register its ID to the list of
> > dbus-vmstate ID to migrate, and specify --dbus-incoming when
> > restoring the VM.
> >
> > Signed-off-by: Marc-André Lureau <marcandre.lureau at redhat.com>
> > ---
> >   src/qemu/qemu_slirp.c | 37 +++++++++++++++++++++++++++++++++++++
> >   1 file changed, 37 insertions(+)
> >
> > diff --git a/src/qemu/qemu_slirp.c b/src/qemu/qemu_slirp.c
> > index 8e001f0d10..48fc0a68c2 100644
> > --- a/src/qemu/qemu_slirp.c
> > +++ b/src/qemu/qemu_slirp.c
> > @@ -18,6 +18,7 @@
> >
> >   #include <config.h>
> >
> > +#include "qemu_dbus.h"
> >   #include "qemu_extdevice.h"
> >   #include "qemu_security.h"
> >   #include "qemu_slirp.h"
> > @@ -202,6 +203,16 @@ qemuSlirpGetFD(qemuSlirpPtr slirp)
> >   }
> >
> >
> > +static char *
> > +qemuSlirpGetDBusVMStateId(virDomainNetDefPtr net)
> > +{
> > +    char macstr[VIR_MAC_STRING_BUFLEN] = "";
> > +
> > +    /* can't use alias, because it's not stable across restarts */
> > +    return g_strdup_printf("slirp-%s", virMacAddrFormat(&net->mac, macstr));
> > +}
> > +
> > +
> >   void
> >   qemuSlirpStop(qemuSlirpPtr slirp,
> >                 virDomainObjPtr vm,
> > @@ -209,11 +220,14 @@ qemuSlirpStop(qemuSlirpPtr slirp,
> >                 virDomainNetDefPtr net)
> >   {
> >       g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
> > +    g_autofree char *id = qemuSlirpGetDBusVMStateId(net);
> >       g_autofree char *pidfile = NULL;
> >       virErrorPtr orig_err;
> >       pid_t pid;
> >       int rc;
> >
> > +    qemuDBusVMStateRemove(vm, id);
> > +
> >       if (!(pidfile = qemuSlirpCreatePidFilename(cfg, vm->def, net->info.alias))) {
> >           VIR_WARN("Unable to construct slirp pidfile path");
> >           return;
> > @@ -310,6 +324,29 @@ qemuSlirpStart(qemuSlirpPtr slirp,
> >           }
> >       }
> >
> > +    if (qemuSlirpHasFeature(slirp, QEMU_SLIRP_FEATURE_DBUS_ADDRESS)) {
> > +        g_autofree char *id = qemuSlirpGetDBusVMStateId(net);
> > +        g_autofree char *dbus_addr = qemuDBusGetAddress(driver, vm);
> > +
> > +        if (qemuDBusStart(driver, vm) < 0)
> > +            return -1;
> > +
> > +        virCommandAddArgFormat(cmd, "--dbus-id=%s", id);
> > +
> > +        virCommandAddArgFormat(cmd, "--dbus-address=%s", dbus_addr);
> > +
> > +        if (qemuSlirpHasFeature(slirp, QEMU_SLIRP_FEATURE_MIGRATE)) {
> > +            if (qemuDBusVMStateAdd(vm, id) < 0) {
> > +                virReportError(VIR_ERR_INTERNAL_ERROR,
> > +                               _("Failed to register slirp migration"));
> > +                return -1;
> > +            }
> > +            if (incoming) {
> > +                virCommandAddArg(cmd, "--dbus-incoming");
> > +            }
>
> 'make syntax-check' complains here.


thanks again for the fix!





More information about the libvir-list mailing list