diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 917ea004e5a037bad40254c3d4ec32142b8c616e..83432fa5b089edce4c2d8018fec6b2ba5e36edb4 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -9656,18 +9656,22 @@ virDomainActualNetDefParseXML(xmlNodePtr node, } if (actual->type == VIR_DOMAIN_NET_TYPE_DIRECT) { - actual->data.direct.linkdev = virXPathString("string(./source[1]/@dev)", ctxt); + xmlNodePtr sourceNode = virXPathNode("./source[1]", ctxt); - mode = virXPathString("string(./source[1]/@mode)", ctxt); - if (mode) { - int m; - if ((m = virNetDevMacVLanModeTypeFromString(mode)) < 0) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("Unknown mode '%s' in interface element"), - mode); - goto error; + if (sourceNode) { + actual->data.direct.linkdev = virXMLPropString(sourceNode, "dev"); + + mode = virXMLPropString(sourceNode, "mode"); + if (mode) { + int m; + if ((m = virNetDevMacVLanModeTypeFromString(mode)) < 0) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("Unknown mode '%s' in interface element"), + mode); + goto error; + } + actual->data.direct.mode = m; } - actual->data.direct.mode = m; } } else if (actual->type == VIR_DOMAIN_NET_TYPE_HOSTDEV) { virDomainHostdevDefPtr hostdev = &actual->data.hostdev.def; @@ -9703,24 +9707,27 @@ virDomainActualNetDefParseXML(xmlNodePtr node, } if (actual->type == VIR_DOMAIN_NET_TYPE_BRIDGE || actual->type == VIR_DOMAIN_NET_TYPE_NETWORK) { - char *brname = virXPathString("string(./source/@bridge)", ctxt); + xmlNodePtr sourceNode = virXPathNode("./source", ctxt); + if (sourceNode) { + char *brname = virXMLPropString(sourceNode, "bridge"); - if (!brname && actual->type == VIR_DOMAIN_NET_TYPE_BRIDGE) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("Missing element with bridge name in " - "interface's element")); - goto error; - } - actual->data.bridge.brname = brname; - macTableManager = virXPathString("string(./source/@macTableManager)", ctxt); - if (macTableManager && - (actual->data.bridge.macTableManager - = virNetworkBridgeMACTableManagerTypeFromString(macTableManager)) <= 0) { - virReportError(VIR_ERR_XML_ERROR, - _("Invalid macTableManager setting '%s' " - "in domain interface's element"), - macTableManager); - goto error; + if (!brname && actual->type == VIR_DOMAIN_NET_TYPE_BRIDGE) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Missing element with bridge name in " + "interface's element")); + goto error; + } + actual->data.bridge.brname = brname; + macTableManager = virXMLPropString(sourceNode, "macTableManager"); + if (macTableManager && + (actual->data.bridge.macTableManager + = virNetworkBridgeMACTableManagerTypeFromString(macTableManager)) <= 0) { + virReportError(VIR_ERR_XML_ERROR, + _("Invalid macTableManager setting '%s' " + "in domain interface's element"), + macTableManager); + goto error; + } } }