diff --git a/0001-libxl-add-support-for-BlockResize-API.patch b/0001-libxl-add-support-for-BlockResize-API.patch index 532cc73..8e2124f 100644 --- a/0001-libxl-add-support-for-BlockResize-API.patch +++ b/0001-libxl-add-support-for-BlockResize-API.patch @@ -23,7 +23,7 @@ Index: libvirt-6.4.0/src/libxl/libxl_driver.c =================================================================== --- libvirt-6.4.0.orig/src/libxl/libxl_driver.c +++ libvirt-6.4.0/src/libxl/libxl_driver.c -@@ -5287,6 +5287,96 @@ libxlDomainMemoryStats(virDomainPtr dom, +@@ -5323,6 +5323,96 @@ libxlDomainMemoryStats(virDomainPtr dom, #undef LIBXL_SET_MEMSTAT @@ -120,7 +120,7 @@ Index: libvirt-6.4.0/src/libxl/libxl_driver.c static int libxlDomainGetJobInfo(virDomainPtr dom, virDomainJobInfoPtr info) -@@ -6756,6 +6846,7 @@ static virHypervisorDriver libxlHypervis +@@ -6792,6 +6882,7 @@ static virHypervisorDriver libxlHypervis #endif .nodeGetFreeMemory = libxlNodeGetFreeMemory, /* 0.9.0 */ .nodeGetCellsFreeMemory = libxlNodeGetCellsFreeMemory, /* 1.1.1 */ diff --git a/ec07aad8-libxl-normalize-mac-addr.patch b/ec07aad8-libxl-normalize-mac-addr.patch new file mode 100644 index 0000000..1213287 --- /dev/null +++ b/ec07aad8-libxl-normalize-mac-addr.patch @@ -0,0 +1,117 @@ +commit ec07aad8f8a6ead8e9363c8deec4845edb5bf112 +Author: Jim Fehlig +Date: Wed May 27 17:29:33 2020 -0600 + + libxl: Normalize MAC address in device conf when hotplugging a netdev + + Similar to commits 55ce6564634 and 6c17606b7cc in the qemu driver, make + separate copies of persistent and live device config and normalize the MAC + address between the two. This avoids having different MAC address for the + persistent and live config, ensuring the device has the same address when + the persistent config takes affect after a VM restart. + + Signed-off-by: Jim Fehlig + Reviewed-by: Laine Stump + +Index: libvirt-6.4.0/src/libxl/libxl_driver.c +=================================================================== +--- libvirt-6.4.0.orig/src/libxl/libxl_driver.c ++++ libvirt-6.4.0/src/libxl/libxl_driver.c +@@ -4096,6 +4096,31 @@ libxlDomainUpdateDeviceConfig(virDomainD + } + + ++static void ++libxlDomainAttachDeviceNormalize(const virDomainDeviceDef *devConf, ++ virDomainDeviceDefPtr devLive) ++{ ++ /* ++ * Fixup anything that needs to be identical in the live and ++ * config versions of DeviceDef, but might not be. Do this by ++ * changing the contents of devLive. This is done after all ++ * post-parse tweaks and validation, so be very careful about what ++ * changes are made. ++ */ ++ ++ /* MAC address should be identical in both DeviceDefs, but if it ++ * wasn't specified in the XML, and was instead autogenerated, it ++ * will be different for the two since they are each the result of ++ * a separate parser call. If it *was* specified, it will already ++ * be the same, so copying does no harm. ++ */ ++ ++ if (devConf->type == VIR_DOMAIN_DEVICE_NET) ++ virMacAddrSet(&devLive->data.net->mac, &devConf->data.net->mac); ++ ++} ++ ++ + static int + libxlDomainAttachDeviceFlags(virDomainPtr dom, const char *xml, + unsigned int flags) +@@ -4104,7 +4129,9 @@ libxlDomainAttachDeviceFlags(virDomainPt + libxlDriverConfigPtr cfg = libxlDriverConfigGet(driver); + virDomainObjPtr vm = NULL; + virDomainDefPtr vmdef = NULL; +- virDomainDeviceDefPtr dev = NULL; ++ virDomainDeviceDefPtr devConf = NULL; ++ virDomainDeviceDef devConfSave = { 0 }; ++ virDomainDeviceDefPtr devLive = NULL; + int ret = -1; + + virCheckFlags(VIR_DOMAIN_DEVICE_MODIFY_LIVE | +@@ -4123,28 +4150,36 @@ libxlDomainAttachDeviceFlags(virDomainPt + goto endjob; + + if (flags & VIR_DOMAIN_DEVICE_MODIFY_CONFIG) { +- if (!(dev = virDomainDeviceDefParse(xml, vm->def, +- driver->xmlopt, NULL, +- VIR_DOMAIN_DEF_PARSE_INACTIVE))) ++ if (!(devConf = virDomainDeviceDefParse(xml, vm->def, ++ driver->xmlopt, NULL, ++ VIR_DOMAIN_DEF_PARSE_INACTIVE))) + goto endjob; + + /* Make a copy for updated domain. */ + if (!(vmdef = virDomainObjCopyPersistentDef(vm, driver->xmlopt, NULL))) + goto endjob; + +- if (libxlDomainAttachDeviceConfig(vmdef, dev) < 0) ++ /* ++ * devConf will be NULLed out by ++ * libxlDomainAttachDeviceConfig(), so save it for later use by ++ * libxlDomainAttachDeviceNormalize() ++ */ ++ devConfSave = *devConf; ++ ++ if (libxlDomainAttachDeviceConfig(vmdef, devConf) < 0) + goto endjob; + } + + if (flags & VIR_DOMAIN_DEVICE_MODIFY_LIVE) { +- /* If dev exists it was created to modify the domain config. Free it. */ +- virDomainDeviceDefFree(dev); +- if (!(dev = virDomainDeviceDefParse(xml, vm->def, ++ if (!(devLive = virDomainDeviceDefParse(xml, vm->def, + driver->xmlopt, NULL, + VIR_DOMAIN_DEF_PARSE_INACTIVE))) + goto endjob; + +- if (libxlDomainAttachDeviceLive(driver, vm, dev) < 0) ++ if (flags & VIR_DOMAIN_AFFECT_CONFIG) ++ libxlDomainAttachDeviceNormalize(&devConfSave, devLive); ++ ++ if (libxlDomainAttachDeviceLive(driver, vm, devLive) < 0) + goto endjob; + + /* +@@ -4171,7 +4206,8 @@ libxlDomainAttachDeviceFlags(virDomainPt + + cleanup: + virDomainDefFree(vmdef); +- virDomainDeviceDefFree(dev); ++ virDomainDeviceDefFree(devConf); ++ virDomainDeviceDefFree(devLive); + virDomainObjEndAPI(&vm); + virObjectUnref(cfg); + return ret; diff --git a/libvirt.changes b/libvirt.changes index 6bb0d70..3ec02fe 100644 --- a/libvirt.changes +++ b/libvirt.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Wed Jun 3 16:38:09 UTC 2020 - James Fehlig + +- libxl: Normalize MAC address in device conf on netdev hotplug + ec07aad8-libxl-normalize-mac-addr.patch + bsc#1172052 + ------------------------------------------------------------------- Tue Jun 2 15:16:15 UTC 2020 - James Fehlig diff --git a/libvirt.spec b/libvirt.spec index 53c7399..ee77309 100644 --- a/libvirt.spec +++ b/libvirt.spec @@ -338,6 +338,7 @@ Source6: libvirtd-relocation-server.xml Source99: baselibs.conf Source100: %{name}-rpmlintrc # Upstream patches +Patch0: ec07aad8-libxl-normalize-mac-addr.patch # Patches pending upstream review Patch100: libxl-dom-reset.patch Patch101: network-don-t-use-dhcp-authoritative-on-static-netwo.patch @@ -873,6 +874,7 @@ libvirt plugin for NSS for translating domain names into IP addresses. %prep %setup -q +%patch0 -p1 %patch100 -p1 %patch101 -p1 %patch150 -p1 diff --git a/libxl-dom-reset.patch b/libxl-dom-reset.patch index e4eda01..df3f75a 100644 --- a/libxl-dom-reset.patch +++ b/libxl-dom-reset.patch @@ -74,7 +74,7 @@ Index: libvirt-6.4.0/src/libxl/libxl_driver.c libxlDomainDestroyFlags(virDomainPtr dom, unsigned int flags) { -@@ -6631,6 +6686,7 @@ static virHypervisorDriver libxlHypervis +@@ -6667,6 +6722,7 @@ static virHypervisorDriver libxlHypervis .domainShutdown = libxlDomainShutdown, /* 0.9.0 */ .domainShutdownFlags = libxlDomainShutdownFlags, /* 0.9.10 */ .domainReboot = libxlDomainReboot, /* 0.9.0 */ diff --git a/libxl-set-migration-constraints.patch b/libxl-set-migration-constraints.patch index 892b010..5c7f505 100644 --- a/libxl-set-migration-constraints.patch +++ b/libxl-set-migration-constraints.patch @@ -56,7 +56,7 @@ Index: libvirt-6.4.0/src/libxl/libxl_driver.c =================================================================== --- libvirt-6.4.0.orig/src/libxl/libxl_driver.c +++ libvirt-6.4.0/src/libxl/libxl_driver.c -@@ -6196,6 +6196,9 @@ libxlDomainMigratePerform3Params(virDoma +@@ -6232,6 +6232,9 @@ libxlDomainMigratePerform3Params(virDoma const char *dname = NULL; const char *uri = NULL; int ret = -1; @@ -66,7 +66,7 @@ Index: libvirt-6.4.0/src/libxl/libxl_driver.c #ifdef LIBXL_HAVE_NO_SUSPEND_RESUME virReportUnsupportedError(); -@@ -6212,6 +6215,18 @@ libxlDomainMigratePerform3Params(virDoma +@@ -6248,6 +6251,18 @@ libxlDomainMigratePerform3Params(virDoma virTypedParamsGetString(params, nparams, VIR_MIGRATE_PARAM_DEST_NAME, &dname) < 0 || @@ -85,7 +85,7 @@ Index: libvirt-6.4.0/src/libxl/libxl_driver.c virTypedParamsGetString(params, nparams, VIR_MIGRATE_PARAM_URI, &uri) < 0) -@@ -6226,11 +6241,11 @@ libxlDomainMigratePerform3Params(virDoma +@@ -6262,11 +6277,11 @@ libxlDomainMigratePerform3Params(virDoma if ((flags & (VIR_MIGRATE_TUNNELLED | VIR_MIGRATE_PEER2PEER))) { if (libxlDomainMigrationSrcPerformP2P(driver, vm, dom->conn, dom_xml,