Accepting request 811206 from home:jfehlig:branches:Virtualization

- libxl: Normalize MAC address in device conf on netdev hotplug
  ec07aad8-libxl-normalize-mac-addr.patch
  bsc#1172052

OBS-URL: https://build.opensuse.org/request/show/811206
OBS-URL: https://build.opensuse.org/package/show/Virtualization/libvirt?expand=0&rev=830
This commit is contained in:
James Fehlig 2020-06-03 17:28:21 +00:00 committed by Git OBS Bridge
parent f962f3653a
commit 04185dab96
6 changed files with 132 additions and 6 deletions

View File

@ -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.orig/src/libxl/libxl_driver.c
+++ libvirt-6.4.0/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 #undef LIBXL_SET_MEMSTAT
@ -120,7 +120,7 @@ Index: libvirt-6.4.0/src/libxl/libxl_driver.c
static int static int
libxlDomainGetJobInfo(virDomainPtr dom, libxlDomainGetJobInfo(virDomainPtr dom,
virDomainJobInfoPtr info) virDomainJobInfoPtr info)
@@ -6756,6 +6846,7 @@ static virHypervisorDriver libxlHypervis @@ -6792,6 +6882,7 @@ static virHypervisorDriver libxlHypervis
#endif #endif
.nodeGetFreeMemory = libxlNodeGetFreeMemory, /* 0.9.0 */ .nodeGetFreeMemory = libxlNodeGetFreeMemory, /* 0.9.0 */
.nodeGetCellsFreeMemory = libxlNodeGetCellsFreeMemory, /* 1.1.1 */ .nodeGetCellsFreeMemory = libxlNodeGetCellsFreeMemory, /* 1.1.1 */

View File

@ -0,0 +1,117 @@
commit ec07aad8f8a6ead8e9363c8deec4845edb5bf112
Author: Jim Fehlig <jfehlig@suse.com>
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 <jfehlig@suse.com>
Reviewed-by: Laine Stump <laine@redhat.com>
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;

View File

@ -1,3 +1,10 @@
-------------------------------------------------------------------
Wed Jun 3 16:38:09 UTC 2020 - James Fehlig <jfehlig@suse.com>
- 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 <jfehlig@suse.com> Tue Jun 2 15:16:15 UTC 2020 - James Fehlig <jfehlig@suse.com>

View File

@ -338,6 +338,7 @@ Source6: libvirtd-relocation-server.xml
Source99: baselibs.conf Source99: baselibs.conf
Source100: %{name}-rpmlintrc Source100: %{name}-rpmlintrc
# Upstream patches # Upstream patches
Patch0: ec07aad8-libxl-normalize-mac-addr.patch
# Patches pending upstream review # Patches pending upstream review
Patch100: libxl-dom-reset.patch Patch100: libxl-dom-reset.patch
Patch101: network-don-t-use-dhcp-authoritative-on-static-netwo.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 %prep
%setup -q %setup -q
%patch0 -p1
%patch100 -p1 %patch100 -p1
%patch101 -p1 %patch101 -p1
%patch150 -p1 %patch150 -p1

View File

@ -74,7 +74,7 @@ Index: libvirt-6.4.0/src/libxl/libxl_driver.c
libxlDomainDestroyFlags(virDomainPtr dom, libxlDomainDestroyFlags(virDomainPtr dom,
unsigned int flags) unsigned int flags)
{ {
@@ -6631,6 +6686,7 @@ static virHypervisorDriver libxlHypervis @@ -6667,6 +6722,7 @@ static virHypervisorDriver libxlHypervis
.domainShutdown = libxlDomainShutdown, /* 0.9.0 */ .domainShutdown = libxlDomainShutdown, /* 0.9.0 */
.domainShutdownFlags = libxlDomainShutdownFlags, /* 0.9.10 */ .domainShutdownFlags = libxlDomainShutdownFlags, /* 0.9.10 */
.domainReboot = libxlDomainReboot, /* 0.9.0 */ .domainReboot = libxlDomainReboot, /* 0.9.0 */

View File

@ -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.orig/src/libxl/libxl_driver.c
+++ libvirt-6.4.0/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 *dname = NULL;
const char *uri = NULL; const char *uri = NULL;
int ret = -1; int ret = -1;
@ -66,7 +66,7 @@ Index: libvirt-6.4.0/src/libxl/libxl_driver.c
#ifdef LIBXL_HAVE_NO_SUSPEND_RESUME #ifdef LIBXL_HAVE_NO_SUSPEND_RESUME
virReportUnsupportedError(); virReportUnsupportedError();
@@ -6212,6 +6215,18 @@ libxlDomainMigratePerform3Params(virDoma @@ -6248,6 +6251,18 @@ libxlDomainMigratePerform3Params(virDoma
virTypedParamsGetString(params, nparams, virTypedParamsGetString(params, nparams,
VIR_MIGRATE_PARAM_DEST_NAME, VIR_MIGRATE_PARAM_DEST_NAME,
&dname) < 0 || &dname) < 0 ||
@ -85,7 +85,7 @@ Index: libvirt-6.4.0/src/libxl/libxl_driver.c
virTypedParamsGetString(params, nparams, virTypedParamsGetString(params, nparams,
VIR_MIGRATE_PARAM_URI, VIR_MIGRATE_PARAM_URI,
&uri) < 0) &uri) < 0)
@@ -6226,11 +6241,11 @@ libxlDomainMigratePerform3Params(virDoma @@ -6262,11 +6277,11 @@ libxlDomainMigratePerform3Params(virDoma
if ((flags & (VIR_MIGRATE_TUNNELLED | VIR_MIGRATE_PEER2PEER))) { if ((flags & (VIR_MIGRATE_TUNNELLED | VIR_MIGRATE_PEER2PEER))) {
if (libxlDomainMigrationSrcPerformP2P(driver, vm, dom->conn, dom_xml, if (libxlDomainMigrationSrcPerformP2P(driver, vm, dom->conn, dom_xml,