[libvirt] [PATCH] qemu, util fix netlink callback registration for migration

D. Herrendoerfer d.herrendoerfer at herrendoerfer.name
Thu Mar 29 11:15:00 UTC 2012


From: "D. Herrendoerfer" <d.herrendoerfer at herrendoerfer.name>

This patch adds a netlink callback when migrating a VEPA enabled
virtual machine.
It fixes a Bug where a VM would not request a port association when
it was cleared by lldpad.
This patch requires the latest git version of lldpad to work. 

Signed-off-by: D. Herrendoerfer <d.herrendoerfer at herrendoerfer.name>
---
 src/qemu/qemu_migration.c   |    6 ++++++
 src/util/virnetdevmacvlan.c |   14 +++++++++++++-
 src/util/virnetdevmacvlan.h |    8 ++++++++
 3 files changed, 27 insertions(+), 1 deletions(-)

diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
index 77d40c0..7a8a7c4 100644
--- a/src/qemu/qemu_migration.c
+++ b/src/qemu/qemu_migration.c
@@ -2654,6 +2654,12 @@ qemuMigrationVPAssociatePortProfiles(virDomainDefPtr def) {
                                                def->uuid,
                                                VIR_NETDEV_VPORT_PROFILE_OP_MIGRATE_IN_FINISH, false) < 0)
                 goto err_exit;
+
+            if (virNetDevMacVLanVPortProfileRegisterCallback(net->ifname, net->mac,
+                                                             virDomainNetGetActualDirectDev(net), def->uuid,
+                                                             virDomainNetGetActualVirtPortProfile(net),
+                                                             VIR_NETDEV_VPORT_PROFILE_OP_CREATE))
+                goto err_exit;
         }
         last_good_net = i;
     }
diff --git a/src/util/virnetdevmacvlan.c b/src/util/virnetdevmacvlan.c
index 90888b0..b259e00 100644
--- a/src/util/virnetdevmacvlan.c
+++ b/src/util/virnetdevmacvlan.c
@@ -769,7 +769,7 @@ virNetDevMacVLanVPortProfileDestroyCallback(int watch ATTRIBUTE_UNUSED,
     virNetlinkCallbackDataFree((virNetlinkCallbackDataPtr)opaque);
 }
 
-static int
+int
 virNetDevMacVLanVPortProfileRegisterCallback(const char *ifname,
                                              const unsigned char *macaddress,
                                              const char *linkdev,
@@ -1125,4 +1125,16 @@ int virNetDevMacVLanRestartWithVPortProfile(const char *cr_ifname ATTRIBUTE_UNUS
                          _("Cannot create macvlan devices on this platform"));
     return -1;
 }
+
+int virNetDevMacVLanVPortProfileRegisterCallback(const char *ifname ATTRIBUTE_UNUSED,
+                                             const unsigned char *macaddress ATTRIBUTE_UNUSED,
+                                             const char *linkdev ATTRIBUTE_UNUSED,
+                                             const unsigned char *vmuuid ATTRIBUTE_UNUSED,
+                                             virNetDevVPortProfilePtr virtPortProfile ATTRIBUTE_UNUSED,
+                                             enum virNetDevVPortProfileOp vmOp ATTRIBUTE_UNUSED)
+{
+    virReportSystemError(ENOSYS, "%s",
+                         _("Cannot create macvlan devices on this platform"));
+    return -1;
+}
 #endif /* ! WITH_MACVTAP */
diff --git a/src/util/virnetdevmacvlan.h b/src/util/virnetdevmacvlan.h
index 14640cf..2299f1d 100644
--- a/src/util/virnetdevmacvlan.h
+++ b/src/util/virnetdevmacvlan.h
@@ -84,4 +84,12 @@ int virNetDevMacVLanRestartWithVPortProfile(const char *cr_ifname,
     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3)
     ATTRIBUTE_NONNULL(4) ATTRIBUTE_NONNULL(5) ATTRIBUTE_RETURN_CHECK;
 
+int virNetDevMacVLanVPortProfileRegisterCallback(const char *ifname,
+                                             const unsigned char *macaddress ,
+                                             const char *linkdev,
+                                             const unsigned char *vmuuid,
+                                             virNetDevVPortProfilePtr virtPortProfile,
+                                             enum virNetDevVPortProfileOp vmOp)
+ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3)
+ATTRIBUTE_NONNULL(4) ATTRIBUTE_NONNULL(5) ATTRIBUTE_RETURN_CHECK;
 #endif /* __UTIL_MACVTAP_H__ */
-- 
1.7.7.6




More information about the libvir-list mailing list