From db19a4a3c6f72e464bc3ad00e904d8df13887382 Mon Sep 17 00:00:00 2001 From: Luyao Huang Date: Thu, 25 Dec 2014 11:38:00 +0800 Subject: [PATCH] conf: Don't format actual network definition in migratable XML https://bugzilla.redhat.com/show_bug.cgi?id=1177194 When migrate a vm, we will generate a xml via qemuDomainDefFormatLive and pass this xml to target libvirtd. Libvirt will use the current network state in def->data.network.actual to generate the xml, this will make migrate failed when we set a network type guest interface use a macvtap network as a source in a vm then migrate vm to another host(which has the different macvtap network settings: different interface name, bridge name...) Add a flag check in virDomainNetDefFormat, if we set a VIR_DOMAIN_XML_MIGRATABLE flag when call virDomainNetDefFormat, we won't get the current vm interface state. Signed-off-by: Luyao Huang Signed-off-by: Jiri Denemark --- src/conf/domain_conf.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index b9858cd519..d1a483add0 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -17705,17 +17705,22 @@ virDomainNetDefFormat(virBufferPtr buf, virDomainNetDefPtr def, unsigned int flags) { + unsigned int actualType = virDomainNetGetActualType(def); + bool publicActual = false; + const char *typeStr; + virDomainHostdevDefPtr hostdef = NULL; + char macstr[VIR_MAC_STRING_BUFLEN]; + /* publicActual is true if we should report the current state in * def->data.network.actual *instead of* the config (*not* in * addition to) */ - unsigned int actualType = virDomainNetGetActualType(def); - bool publicActual - = (def->type == VIR_DOMAIN_NET_TYPE_NETWORK && def->data.network.actual && - !(flags & (VIR_DOMAIN_XML_INACTIVE | VIR_DOMAIN_XML_INTERNAL_ACTUAL_NET))); - const char *typeStr; - virDomainHostdevDefPtr hostdef = NULL; - char macstr[VIR_MAC_STRING_BUFLEN]; + if (def->type == VIR_DOMAIN_NET_TYPE_NETWORK && + def->data.network.actual && + !(flags & (VIR_DOMAIN_XML_INACTIVE | + VIR_DOMAIN_XML_INTERNAL_ACTUAL_NET | + VIR_DOMAIN_XML_MIGRATABLE))) + publicActual = true; if (publicActual) { if (!(typeStr = virDomainNetTypeToString(actualType))) {