mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
virDomainNetDefParseXML: Refactor parsing of <virtualport>
Base whether virtualport is supported for a given interface on a new variable named 'virtualport_flags' which also configures the parser for the virtualports subelement and fill it in the appropriate interface type branches. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
a94375aef0
commit
acc5b92af1
@ -9004,6 +9004,7 @@ virDomainNetDefParseXML(virDomainXMLOption *xmlopt,
|
|||||||
g_autofree char *filter = NULL;
|
g_autofree char *filter = NULL;
|
||||||
g_autofree char *linkstate = NULL;
|
g_autofree char *linkstate = NULL;
|
||||||
g_autofree char *tap = NULL;
|
g_autofree char *tap = NULL;
|
||||||
|
unsigned int virtualport_flags = 0;
|
||||||
const char *prefix = xmlopt ? xmlopt->config.netPrefix : NULL;
|
const char *prefix = xmlopt ? xmlopt->config.netPrefix : NULL;
|
||||||
|
|
||||||
if (!(def = virDomainNetDefNew(xmlopt)))
|
if (!(def = virDomainNetDefNew(xmlopt)))
|
||||||
@ -9053,6 +9054,8 @@ virDomainNetDefParseXML(virDomainXMLOption *xmlopt,
|
|||||||
flags, xmlopt) < 0))
|
flags, xmlopt) < 0))
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtualport_flags = VIR_VPORT_XML_GENERATE_MISSING_DEFAULTS;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VIR_DOMAIN_NET_TYPE_VDS:
|
case VIR_DOMAIN_NET_TYPE_VDS:
|
||||||
@ -9090,6 +9093,10 @@ virDomainNetDefParseXML(virDomainXMLOption *xmlopt,
|
|||||||
|
|
||||||
if (!(def->data.bridge.brname = virXMLPropStringRequired(source_node, "bridge")))
|
if (!(def->data.bridge.brname = virXMLPropStringRequired(source_node, "bridge")))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
virtualport_flags = VIR_VPORT_XML_GENERATE_MISSING_DEFAULTS |
|
||||||
|
VIR_VPORT_XML_REQUIRE_ALL_ATTRIBUTES |
|
||||||
|
VIR_VPORT_XML_REQUIRE_TYPE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VIR_DOMAIN_NET_TYPE_DIRECT:
|
case VIR_DOMAIN_NET_TYPE_DIRECT:
|
||||||
@ -9105,6 +9112,10 @@ virDomainNetDefParseXML(virDomainXMLOption *xmlopt,
|
|||||||
&def->data.direct.mode,
|
&def->data.direct.mode,
|
||||||
VIR_NETDEV_MACVLAN_MODE_VEPA) < 0)
|
VIR_NETDEV_MACVLAN_MODE_VEPA) < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
virtualport_flags = VIR_VPORT_XML_GENERATE_MISSING_DEFAULTS |
|
||||||
|
VIR_VPORT_XML_REQUIRE_ALL_ATTRIBUTES |
|
||||||
|
VIR_VPORT_XML_REQUIRE_TYPE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VIR_DOMAIN_NET_TYPE_ETHERNET:
|
case VIR_DOMAIN_NET_TYPE_ETHERNET:
|
||||||
@ -9245,6 +9256,10 @@ virDomainNetDefParseXML(virDomainXMLOption *xmlopt,
|
|||||||
&def->data.hostdev.def,
|
&def->data.hostdev.def,
|
||||||
flags, xmlopt) < 0)
|
flags, xmlopt) < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
virtualport_flags = VIR_VPORT_XML_GENERATE_MISSING_DEFAULTS |
|
||||||
|
VIR_VPORT_XML_REQUIRE_ALL_ATTRIBUTES |
|
||||||
|
VIR_VPORT_XML_REQUIRE_TYPE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -9255,28 +9270,16 @@ virDomainNetDefParseXML(virDomainXMLOption *xmlopt,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ((virtualport_node = virXPathNode("./virtualport", ctxt))) {
|
if ((virtualport_node = virXPathNode("./virtualport", ctxt))) {
|
||||||
if (def->type == VIR_DOMAIN_NET_TYPE_NETWORK) {
|
if (virtualport_flags == 0) {
|
||||||
if (!(def->virtPortProfile
|
|
||||||
= virNetDevVPortProfileParse(virtualport_node,
|
|
||||||
VIR_VPORT_XML_GENERATE_MISSING_DEFAULTS))) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
} else if (def->type == VIR_DOMAIN_NET_TYPE_BRIDGE ||
|
|
||||||
def->type == VIR_DOMAIN_NET_TYPE_DIRECT ||
|
|
||||||
def->type == VIR_DOMAIN_NET_TYPE_HOSTDEV) {
|
|
||||||
if (!(def->virtPortProfile
|
|
||||||
= virNetDevVPortProfileParse(virtualport_node, VIR_VPORT_XML_GENERATE_MISSING_DEFAULTS|
|
|
||||||
VIR_VPORT_XML_REQUIRE_ALL_ATTRIBUTES|
|
|
||||||
VIR_VPORT_XML_REQUIRE_TYPE))) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||||
_("<virtualport> element unsupported for"
|
_("<virtualport> element unsupported for <interface type='%s'>"),
|
||||||
" <interface type='%s'>"),
|
virDomainNetTypeToString(def->type));
|
||||||
virDomainNetTypeToString(def->type));
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!(def->virtPortProfile = virNetDevVPortProfileParse(virtualport_node,
|
||||||
|
virtualport_flags)))
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
def->ifname = virXPathString("string(./target/@dev)", ctxt);
|
def->ifname = virXPathString("string(./target/@dev)", ctxt);
|
||||||
|
Loading…
Reference in New Issue
Block a user