From: Peter Krempa Date: Fri, 16 Sep 2022 12:53:32 +0000 (+0200) Subject: virDomainNetDefParseXML: Refactor parsing of data for VIR_DOMAIN_NET_TYPE_HOSTDEV X-Git-Tag: v8.9.0-rc1~156 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=16c332aa608e703c7d3434cd657140e5f9d0d3b1;p=thirdparty%2Flibvirt.git virDomainNetDefParseXML: Refactor parsing of data for VIR_DOMAIN_NET_TYPE_HOSTDEV Signed-off-by: Peter Krempa Reviewed-by: Ján Tomko --- diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 26b1de41ef..016f508e50 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -8988,7 +8988,6 @@ virDomainNetDefParseXML(virDomainXMLOption *xmlopt, unsigned int flags) { g_autoptr(virDomainNetDef) def = NULL; - virDomainHostdevDef *hostdev; xmlNodePtr source_node = NULL; xmlNodePtr virtualport_node = NULL; xmlNodePtr filterref_node = NULL; @@ -9004,7 +9003,6 @@ virDomainNetDefParseXML(virDomainXMLOption *xmlopt, g_autofree char *model = NULL; g_autofree char *filter = NULL; g_autofree char *linkstate = NULL; - g_autofree char *addrtype = NULL; g_autofree char *tap = NULL; const char *prefix = xmlopt ? xmlopt->config.netPrefix : NULL; @@ -9229,7 +9227,27 @@ virDomainNetDefParseXML(virDomainXMLOption *xmlopt, } break; - case VIR_DOMAIN_NET_TYPE_HOSTDEV: + case VIR_DOMAIN_NET_TYPE_HOSTDEV: { + g_autofree char *addrtype = virXPathString("string(./source/address/@type)", ctxt); + + def->data.hostdev.def.parentnet = def; + def->data.hostdev.def.info = &def->info; + def->data.hostdev.def.mode = VIR_DOMAIN_HOSTDEV_MODE_SUBSYS; + + /* if not explicitly stated, source/vendor implies usb device */ + if (!addrtype && virXPathNode("./source/vendor", ctxt)) + addrtype = g_strdup("usb"); + + /* The helper function expects type to already be found and + * passed in as a string, since it is in a different place in + * NetDef vs HostdevDef. */ + if (virDomainHostdevDefParseXMLSubsys(node, ctxt, addrtype, + &def->data.hostdev.def, + flags, xmlopt) < 0) + return NULL; + } + break; + case VIR_DOMAIN_NET_TYPE_USER: case VIR_DOMAIN_NET_TYPE_NULL: case VIR_DOMAIN_NET_TYPE_LAST: @@ -9355,27 +9373,7 @@ virDomainNetDefParseXML(virDomainXMLOption *xmlopt, case VIR_DOMAIN_NET_TYPE_UDP: case VIR_DOMAIN_NET_TYPE_INTERNAL: case VIR_DOMAIN_NET_TYPE_DIRECT: - break; - case VIR_DOMAIN_NET_TYPE_HOSTDEV: - hostdev = &def->data.hostdev.def; - hostdev->parentnet = def; - hostdev->info = &def->info; - /* The helper function expects type to already be found and - * passed in as a string, since it is in a different place in - * NetDef vs HostdevDef. - */ - addrtype = virXPathString("string(./source/address/@type)", ctxt); - /* if not explicitly stated, source/vendor implies usb device */ - if (!addrtype && virXPathNode("./source/vendor", ctxt)) - addrtype = g_strdup("usb"); - hostdev->mode = VIR_DOMAIN_HOSTDEV_MODE_SUBSYS; - if (virDomainHostdevDefParseXMLSubsys(node, ctxt, addrtype, - hostdev, flags, xmlopt) < 0) { - return NULL; - } - break; - case VIR_DOMAIN_NET_TYPE_VDS: case VIR_DOMAIN_NET_TYPE_ETHERNET: case VIR_DOMAIN_NET_TYPE_USER: