diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 55e7ed9590..4cf3291ddf 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -8434,6 +8434,7 @@ virDomainNetDefParseXML(virDomainXMLOptionPtr xmlopt, xmlNodePtr node, xmlXPathContextPtr ctxt, virHashTablePtr bootHash, + char *prefix, unsigned int flags) { virDomainNetDefPtr def; @@ -8600,7 +8601,8 @@ virDomainNetDefParseXML(virDomainXMLOptionPtr xmlopt, ifname = virXMLPropString(cur, "dev"); if (ifname && (flags & VIR_DOMAIN_DEF_PARSE_INACTIVE) && - STRPREFIX(ifname, VIR_NET_GENERATED_PREFIX)) { + (STRPREFIX(ifname, VIR_NET_GENERATED_PREFIX) || + (prefix && STRPREFIX(ifname, prefix)))) { /* An auto-generated target name, blank it out */ VIR_FREE(ifname); } @@ -12556,6 +12558,7 @@ virDomainDeviceDefParse(const char *xmlStr, xmlNodePtr node; xmlXPathContextPtr ctxt = NULL; virDomainDeviceDefPtr dev = NULL; + char *netprefix; if (!(xml = virXMLParseStringCtxt(xmlStr, _("(device_definition)"), &ctxt))) goto error; @@ -12598,8 +12601,9 @@ virDomainDeviceDefParse(const char *xmlStr, goto error; break; case VIR_DOMAIN_DEVICE_NET: + netprefix = caps->host.netprefix; if (!(dev->data.net = virDomainNetDefParseXML(xmlopt, node, ctxt, - NULL, flags))) + NULL, netprefix, flags))) goto error; break; case VIR_DOMAIN_DEVICE_INPUT: @@ -14747,6 +14751,7 @@ virDomainDefParseXML(xmlDocPtr xml, bool usb_other = false; bool usb_master = false; bool primaryVideo = false; + char *netprefix = NULL; if (flags & VIR_DOMAIN_DEF_PARSE_VALIDATE) { char *schema = virFileFindResource("domain.rng", @@ -15932,11 +15937,13 @@ virDomainDefParseXML(xmlDocPtr xml, goto error; if (n && VIR_ALLOC_N(def->nets, n) < 0) goto error; + netprefix = caps->host.netprefix; for (i = 0; i < n; i++) { virDomainNetDefPtr net = virDomainNetDefParseXML(xmlopt, nodes[i], ctxt, bootHash, + netprefix, flags); if (!net) goto error;