Separate the code into virDomainNetDefParseXMLDriver. Some local
variables were renamed and the scope decreased.
Signed-off-by: Peter Krempa <pkrempa(a)redhat.com>
---
src/conf/domain_conf.c | 238 ++++++++++++++++++++++-------------------
1 file changed, 126 insertions(+), 112 deletions(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 0e25d585c8..621b1df6c8 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -8827,6 +8827,130 @@ virDomainNetTeamingInfoParseXML(xmlXPathContextPtr ctxt,
}
+static int
+virDomainNetDefParseXMLDriver(virDomainNetDef *def,
+ xmlXPathContextPtr ctxt)
+{
+ xmlNodePtr driver_node;
+
+ if ((driver_node = virXPathNode("./driver", ctxt)) &&
+ (virDomainVirtioOptionsParseXML(driver_node, &def->virtio) < 0))
+ return -1;
+
+ if (def->type != VIR_DOMAIN_NET_TYPE_HOSTDEV &&
+ virDomainNetIsVirtioModel(def)) {
+ xmlNodePtr hostNode;
+ xmlNodePtr guestNode;
+
+ if (virXMLPropEnum(driver_node, "name",
+ virDomainNetBackendTypeFromString,
+ VIR_XML_PROP_NONZERO,
+ &def->driver.virtio.name) < 0)
+ return -1;
+
+ if (virXMLPropEnum(driver_node, "txmode",
+ virDomainNetVirtioTxModeTypeFromString,
+ VIR_XML_PROP_NONZERO,
+ &def->driver.virtio.txmode) < 0)
+ return -1;
+
+ if (virXMLPropTristateSwitch(driver_node, "ioeventfd",
+ VIR_XML_PROP_NONE,
+ &def->driver.virtio.ioeventfd) < 0)
+ return -1;
+
+ if (virXMLPropTristateSwitch(driver_node, "event_idx",
+ VIR_XML_PROP_NONE,
+ &def->driver.virtio.event_idx) < 0)
+ return -1;
+
+ if (virXMLPropUInt(driver_node, "queues", 10,
+ VIR_XML_PROP_NONE,
+ &def->driver.virtio.queues) < 0)
+ return -1;
+
+ /* There's always at least one TX/RX queue. */
+ if (def->driver.virtio.queues == 1)
+ def->driver.virtio.queues = 0;
+
+ if (virXMLPropUInt(driver_node, "rx_queue_size", 10,
+ VIR_XML_PROP_NONE,
+ &def->driver.virtio.rx_queue_size) < 0)
+ return -1;
+
+ if (virXMLPropUInt(driver_node, "tx_queue_size", 10,
+ VIR_XML_PROP_NONE,
+ &def->driver.virtio.tx_queue_size) < 0)
+ return -1;
+
+ if (virXMLPropTristateSwitch(driver_node, "rss",
+ VIR_XML_PROP_NONE,
+ &def->driver.virtio.rss) < 0)
+ return -1;
+
+ if (virXMLPropTristateSwitch(driver_node, "rss_hash_report",
+ VIR_XML_PROP_NONE,
+ &def->driver.virtio.rss_hash_report) < 0)
+ return -1;
+
+ if ((hostNode = virXPathNode("./driver/host", ctxt))) {
+ if (virXMLPropTristateSwitch(hostNode, "csum", VIR_XML_PROP_NONE,
+ &def->driver.virtio.host.csum) < 0)
+ return -1;
+
+ if (virXMLPropTristateSwitch(hostNode, "gso", VIR_XML_PROP_NONE,
+ &def->driver.virtio.host.gso) < 0)
+ return -1;
+
+ if (virXMLPropTristateSwitch(hostNode, "tso4", VIR_XML_PROP_NONE,
+ &def->driver.virtio.host.tso4) < 0)
+ return -1;
+
+ if (virXMLPropTristateSwitch(hostNode, "tso6", VIR_XML_PROP_NONE,
+ &def->driver.virtio.host.tso6) < 0)
+ return -1;
+
+ if (virXMLPropTristateSwitch(hostNode, "ecn", VIR_XML_PROP_NONE,
+ &def->driver.virtio.host.ecn) < 0)
+ return -1;
+
+ if (virXMLPropTristateSwitch(hostNode, "ufo", VIR_XML_PROP_NONE,
+ &def->driver.virtio.host.ufo) < 0)
+ return -1;
+
+ if (virXMLPropTristateSwitch(hostNode, "mrg_rxbuf",
+ VIR_XML_PROP_NONE,
+ &def->driver.virtio.host.mrg_rxbuf) <
0)
+ return -1;
+ }
+
+ if ((guestNode = virXPathNode("./driver/guest", ctxt))) {
+ if (virXMLPropTristateSwitch(guestNode, "csum", VIR_XML_PROP_NONE,
+ &def->driver.virtio.guest.csum) < 0)
+ return -1;
+
+ if (virXMLPropTristateSwitch(guestNode, "tso4", VIR_XML_PROP_NONE,
+ &def->driver.virtio.guest.tso4) < 0)
+ return -1;
+
+ if (virXMLPropTristateSwitch(guestNode, "tso6", VIR_XML_PROP_NONE,
+ &def->driver.virtio.guest.tso6) < 0)
+ return -1;
+
+ if (virXMLPropTristateSwitch(guestNode, "ecn", VIR_XML_PROP_NONE,
+ &def->driver.virtio.guest.ecn) < 0)
+ return -1;
+
+ if (virXMLPropTristateSwitch(guestNode, "ufo", VIR_XML_PROP_NONE,
+ &def->driver.virtio.guest.ufo) < 0)
+ return -1;
+ }
+ }
+
+ return 0;
+}
+
+
static virDomainNetDef *
virDomainNetDefParseXML(virDomainXMLOption *xmlopt,
xmlNodePtr node,
@@ -8837,7 +8961,6 @@ virDomainNetDefParseXML(virDomainXMLOption *xmlopt,
virDomainHostdevDef *hostdev;
xmlNodePtr source_node = NULL;
xmlNodePtr virtualport_node = NULL;
- xmlNodePtr driver_node = NULL;
xmlNodePtr filterref_node = NULL;
xmlNodePtr actual_node = NULL;
xmlNodePtr vlan_node = NULL;
@@ -9009,10 +9132,6 @@ virDomainNetDefParseXML(virDomainXMLOption *xmlopt,
def->domain_name = virXPathString("string(./backenddomain/@name)",
ctxt);
model = virXPathString("string(./model/@type)", ctxt);
- if ((driver_node = virXPathNode("./driver", ctxt)) &&
- (virDomainVirtioOptionsParseXML(driver_node, &def->virtio) < 0))
- return NULL;
-
if ((filterref_node = virXPathNode("./filterref", ctxt))) {
filter = virXMLPropString(filterref_node, "filter");
filterparams = virNWFilterParseParamAttributes(filterref_node);
@@ -9373,113 +9492,8 @@ virDomainNetDefParseXML(virDomainXMLOption *xmlopt,
g_clear_pointer(&def->ifname, g_free);
}
- if (def->type != VIR_DOMAIN_NET_TYPE_HOSTDEV &&
- virDomainNetIsVirtioModel(def)) {
-
- if (virXMLPropEnum(driver_node, "name",
- virDomainNetBackendTypeFromString,
- VIR_XML_PROP_NONZERO,
- &def->driver.virtio.name) < 0)
- return NULL;
-
- if (virXMLPropEnum(driver_node, "txmode",
- virDomainNetVirtioTxModeTypeFromString,
- VIR_XML_PROP_NONZERO,
- &def->driver.virtio.txmode) < 0)
- return NULL;
-
- if (virXMLPropTristateSwitch(driver_node, "ioeventfd",
- VIR_XML_PROP_NONE,
- &def->driver.virtio.ioeventfd) < 0)
- return NULL;
-
- if (virXMLPropTristateSwitch(driver_node, "event_idx",
- VIR_XML_PROP_NONE,
- &def->driver.virtio.event_idx) < 0)
- return NULL;
-
- if (virXMLPropUInt(driver_node, "queues", 10,
- VIR_XML_PROP_NONE,
- &def->driver.virtio.queues) < 0)
- return NULL;
-
- /* There's always at least one TX/RX queue. */
- if (def->driver.virtio.queues == 1)
- def->driver.virtio.queues = 0;
-
- if (virXMLPropUInt(driver_node, "rx_queue_size", 10,
- VIR_XML_PROP_NONE,
- &def->driver.virtio.rx_queue_size) < 0)
- return NULL;
-
- if (virXMLPropUInt(driver_node, "tx_queue_size", 10,
- VIR_XML_PROP_NONE,
- &def->driver.virtio.tx_queue_size) < 0)
- return NULL;
-
- if (virXMLPropTristateSwitch(driver_node, "rss",
- VIR_XML_PROP_NONE,
- &def->driver.virtio.rss) < 0)
- return NULL;
-
- if (virXMLPropTristateSwitch(driver_node, "rss_hash_report",
- VIR_XML_PROP_NONE,
- &def->driver.virtio.rss_hash_report) < 0)
- return NULL;
-
- if ((tmpNode = virXPathNode("./driver/host", ctxt))) {
- if (virXMLPropTristateSwitch(tmpNode, "csum", VIR_XML_PROP_NONE,
- &def->driver.virtio.host.csum) < 0)
- return NULL;
-
- if (virXMLPropTristateSwitch(tmpNode, "gso", VIR_XML_PROP_NONE,
- &def->driver.virtio.host.gso) < 0)
- return NULL;
-
- if (virXMLPropTristateSwitch(tmpNode, "tso4", VIR_XML_PROP_NONE,
- &def->driver.virtio.host.tso4) < 0)
- return NULL;
-
- if (virXMLPropTristateSwitch(tmpNode, "tso6", VIR_XML_PROP_NONE,
- &def->driver.virtio.host.tso6) < 0)
- return NULL;
-
- if (virXMLPropTristateSwitch(tmpNode, "ecn", VIR_XML_PROP_NONE,
- &def->driver.virtio.host.ecn) < 0)
- return NULL;
-
- if (virXMLPropTristateSwitch(tmpNode, "ufo", VIR_XML_PROP_NONE,
- &def->driver.virtio.host.ufo) < 0)
- return NULL;
-
- if (virXMLPropTristateSwitch(tmpNode, "mrg_rxbuf",
- VIR_XML_PROP_NONE,
- &def->driver.virtio.host.mrg_rxbuf) <
0)
- return NULL;
- }
-
- if ((tmpNode = virXPathNode("./driver/guest", ctxt))) {
- if (virXMLPropTristateSwitch(tmpNode, "csum", VIR_XML_PROP_NONE,
- &def->driver.virtio.guest.csum) < 0)
- return NULL;
-
- if (virXMLPropTristateSwitch(tmpNode, "tso4", VIR_XML_PROP_NONE,
- &def->driver.virtio.guest.tso4) < 0)
- return NULL;
-
- if (virXMLPropTristateSwitch(tmpNode, "tso6", VIR_XML_PROP_NONE,
- &def->driver.virtio.guest.tso6) < 0)
- return NULL;
-
- if (virXMLPropTristateSwitch(tmpNode, "ecn", VIR_XML_PROP_NONE,
- &def->driver.virtio.guest.ecn) < 0)
- return NULL;
-
- if (virXMLPropTristateSwitch(tmpNode, "ufo", VIR_XML_PROP_NONE,
- &def->driver.virtio.guest.ufo) < 0)
- return NULL;
- }
- }
+ if (virDomainNetDefParseXMLDriver(def, ctxt) < 0)
+ return NULL;
if (def->type != VIR_DOMAIN_NET_TYPE_HOSTDEV &&
virDomainNetIsVirtioModel(def)) {
--
2.37.1