Parse the element only when the network type requires it and assign it
directly.
Signed-off-by: Peter Krempa <pkrempa(a)redhat.com>
---
src/conf/domain_conf.c | 45 +++++++++++-------------------------------
1 file changed, 11 insertions(+), 34 deletions(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index a3f604ec7b..c680d2bcc7 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -8990,21 +8990,19 @@ virDomainNetDefParseXML(virDomainXMLOption *xmlopt,
g_autoptr(virDomainNetDef) def = NULL;
xmlNodePtr source_node = NULL;
xmlNodePtr virtualport_node = NULL;
- xmlNodePtr filterref_node = NULL;
xmlNodePtr vlan_node = NULL;
xmlNodePtr bandwidth_node = NULL;
xmlNodePtr mac_node = NULL;
xmlNodePtr target_node = NULL;
- g_autoptr(GHashTable) filterparams = NULL;
VIR_XPATH_NODE_AUTORESTORE(ctxt)
int rv;
g_autofree char *macaddr = NULL;
g_autofree char *dev = NULL;
g_autofree char *model = NULL;
- g_autofree char *filter = NULL;
g_autofree char *linkstate = NULL;
g_autofree char *tap = NULL;
unsigned int virtualport_flags = 0;
+ bool parse_filterref = false;
const char *prefix = xmlopt ? xmlopt->config.netPrefix : NULL;
if (!(def = virDomainNetDefNew(xmlopt)))
@@ -9056,6 +9054,7 @@ virDomainNetDefParseXML(virDomainXMLOption *xmlopt,
}
virtualport_flags = VIR_VPORT_XML_GENERATE_MISSING_DEFAULTS;
+ parse_filterref = true;
break;
case VIR_DOMAIN_NET_TYPE_VDS:
@@ -9097,6 +9096,7 @@ virDomainNetDefParseXML(virDomainXMLOption *xmlopt,
virtualport_flags = VIR_VPORT_XML_GENERATE_MISSING_DEFAULTS |
VIR_VPORT_XML_REQUIRE_ALL_ATTRIBUTES |
VIR_VPORT_XML_REQUIRE_TYPE;
+ parse_filterref = true;
break;
case VIR_DOMAIN_NET_TYPE_DIRECT:
@@ -9138,6 +9138,7 @@ virDomainNetDefParseXML(virDomainXMLOption *xmlopt,
return NULL;
}
}
+ parse_filterref = true;
break;
case VIR_DOMAIN_NET_TYPE_VHOSTUSER: {
@@ -9298,9 +9299,13 @@ virDomainNetDefParseXML(virDomainXMLOption *xmlopt,
def->downscript = virXPathString("string(./downscript/@path)", ctxt);
def->domain_name = virXPathString("string(./backenddomain/@name)",
ctxt);
- if ((filterref_node = virXPathNode("./filterref", ctxt))) {
- filter = virXMLPropString(filterref_node, "filter");
- filterparams = virNWFilterParseParamAttributes(filterref_node);
+ if (parse_filterref) {
+ xmlNodePtr filterref_node = virXPathNode("./filterref", ctxt);
+
+ if (filterref_node) {
+ def->filter = virXMLPropString(filterref_node, "filter");
+ def->filterparams = virNWFilterParseParamAttributes(filterref_node);
+ }
}
if ((bandwidth_node = virXPathNode("./bandwidth", ctxt)) &&
@@ -9387,34 +9392,6 @@ virDomainNetDefParseXML(virDomainXMLOption *xmlopt,
}
}
- if (filter != NULL) {
- switch (def->type) {
- case VIR_DOMAIN_NET_TYPE_ETHERNET:
- case VIR_DOMAIN_NET_TYPE_NETWORK:
- case VIR_DOMAIN_NET_TYPE_BRIDGE:
- def->filter = g_steal_pointer(&filter);
- def->filterparams = g_steal_pointer(&filterparams);
- break;
- case VIR_DOMAIN_NET_TYPE_USER:
- case VIR_DOMAIN_NET_TYPE_VHOSTUSER:
- case VIR_DOMAIN_NET_TYPE_SERVER:
- case VIR_DOMAIN_NET_TYPE_CLIENT:
- case VIR_DOMAIN_NET_TYPE_MCAST:
- case VIR_DOMAIN_NET_TYPE_INTERNAL:
- case VIR_DOMAIN_NET_TYPE_DIRECT:
- case VIR_DOMAIN_NET_TYPE_HOSTDEV:
- case VIR_DOMAIN_NET_TYPE_UDP:
- case VIR_DOMAIN_NET_TYPE_NULL:
- case VIR_DOMAIN_NET_TYPE_VDS:
- case VIR_DOMAIN_NET_TYPE_VDPA:
- break;
- case VIR_DOMAIN_NET_TYPE_LAST:
- default:
- virReportEnumRangeError(virDomainNetType, def->type);
- return NULL;
- }
- }
-
if (virDomainNetTeamingInfoParseXML(ctxt, &def->teaming) < 0)
return NULL;
--
2.37.1