diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 3c54f72e3a8611dda8a8c1bea840ce72ea2ef4a5..7e72cfd5ea14a4a571ab1c67f135bd4f7af1a84c 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -7398,6 +7398,8 @@ virDomainGraphicsListenDefParseXML(virDomainGraphicsListenDefPtr def, char *type = virXMLPropString(node, "type"); char *address = virXMLPropString(node, "address"); char *network = virXMLPropString(node, "network"); + char *fromConfig = virXMLPropString(node, "fromConfig"); + int tmp; if (!type) { virReportError(VIR_ERR_XML_ERROR, "%s", @@ -7434,6 +7436,17 @@ virDomainGraphicsListenDefParseXML(virDomainGraphicsListenDefPtr def, network = NULL; } + if (fromConfig && + flags & VIR_DOMAIN_XML_INTERNAL_STATUS) { + if (virStrToLong_i(fromConfig, NULL, 10, &tmp) < 0) { + virReportError(VIR_ERR_XML_ERROR, + _("Invalid fromConfig value: %s"), + fromConfig); + goto error; + } + def->fromConfig = tmp != 0; + } + ret = 0; error: if (ret < 0) @@ -7441,6 +7454,7 @@ error: VIR_FREE(type); VIR_FREE(address); VIR_FREE(network); + VIR_FREE(fromConfig); return ret; } @@ -14926,6 +14940,11 @@ virDomainGraphicsListenDefFormat(virBufferPtr buf, virDomainGraphicsListenDefPtr def, unsigned int flags) { + /* If generating migratable XML, skip listen address + * dragged in from config file */ + if ((flags & VIR_DOMAIN_XML_MIGRATABLE) && def->fromConfig) + return; + virBufferAddLit(buf, " type) { @@ -14947,6 +14966,9 @@ virDomainGraphicsListenDefFormat(virBufferPtr buf, virBufferEscapeString(buf, " network='%s'", def->network); } + if (flags & VIR_DOMAIN_XML_INTERNAL_STATUS) + virBufferAsprintf(buf, " fromConfig='%d'", def->fromConfig); + virBufferAddLit(buf, "/>\n"); } @@ -14973,6 +14995,9 @@ virDomainGraphicsDefFormat(virBufferPtr buf, for (i = 0; i < def->nListens; i++) { if (virDomainGraphicsListenGetType(def, i) == VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS) { + if (flags & VIR_DOMAIN_XML_MIGRATABLE && + def->listens[i].fromConfig) + continue; listenAddr = virDomainGraphicsListenGetAddress(def, i); break; } @@ -15084,6 +15109,9 @@ virDomainGraphicsDefFormat(virBufferPtr buf, if (virDomainGraphicsListenGetType(def, i) == VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE) continue; + if (flags & VIR_DOMAIN_XML_MIGRATABLE && + def->listens[i].fromConfig) + continue; if (!children) { virBufferAddLit(buf, ">\n"); children = 1; diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index a2a9ff507a5873610eef72d9ab36360dbd89f36a..0da85cffc39fcae6888d91b0f3bded0fac368a43 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -1389,6 +1389,7 @@ struct _virDomainGraphicsListenDef { int type; /* enum virDomainGraphicsListenType */ char *address; char *network; + bool fromConfig; /* true if the @address is config file originated */ }; struct _virDomainGraphicsDef { diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index e169f4d002b9077d45e0a0f368bad0263bffadee..0db5e725316db11c37a23ea5ba53f8759802ae11 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -3509,6 +3509,7 @@ int qemuProcessStart(virConnectPtr conn, virReportOOMError(); goto cleanup; } + graphics->listens[0].fromConfig = true; } } }