[PATCH 15/37] virDomainNetDefParseXML: Convert parsing of 'source_node' to a switch() statement

Peter Krempa pkrempa at redhat.com
Mon Sep 19 08:55:00 UTC 2022


Convert the individual 'if' clauses to a swtich statement.

By moving the check that 'source_node' is non-null inside of each case
rather we will be able to move more type specific code into the swithc
statemen when it will be refactored in subsequent patches.

Signed-off-by: Peter Krempa <pkrempa at redhat.com>
---
 src/conf/domain_conf.c | 71 +++++++++++++++++++++++++++++-------------
 1 file changed, 50 insertions(+), 21 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 8b529acef6..d75ce46a7f 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -9017,32 +9017,47 @@ virDomainNetDefParseXML(virDomainXMLOption *xmlopt,
     if ((source_node = virXPathNode("./source", ctxt))) {
         if (virDomainNetIPInfoParseXML(_("interface host IP"), source_node, ctxt, &def->hostIP) < 0)
             return NULL;
+    }

-        if (def->type == VIR_DOMAIN_NET_TYPE_NETWORK) {
+    switch (def->type) {
+    case VIR_DOMAIN_NET_TYPE_NETWORK:
+        if (source_node) {
             network = virXMLPropString(source_node, "network");
             portgroup = virXMLPropString(source_node, "portgroup");
             if (!(flags & VIR_DOMAIN_DEF_PARSE_INACTIVE))
                 portid = virXMLPropString(source_node, "portid");
         }
+        break;

-        if (def->type == VIR_DOMAIN_NET_TYPE_VDS) {
+    case VIR_DOMAIN_NET_TYPE_VDS:
+        if (source_node) {
             switchid = virXMLPropString(source_node, "switchid");
             portid = virXMLPropString(source_node, "portid");
             portgroup = virXMLPropString(source_node, "portgroupid");
             connectionid = virXMLPropString(source_node, "connectionid");
         }
+        break;

-        if (def->type == VIR_DOMAIN_NET_TYPE_INTERNAL)
+    case VIR_DOMAIN_NET_TYPE_INTERNAL:
+        if (source_node) {
             internal = virXMLPropString(source_node, "name");
+        }
+        break;

-        if (def->type == VIR_DOMAIN_NET_TYPE_BRIDGE)
+    case VIR_DOMAIN_NET_TYPE_BRIDGE:
+        if (source_node) {
             bridge = virXMLPropString(source_node, "bridge");
+        }
+        break;

-        if (def->type == VIR_DOMAIN_NET_TYPE_DIRECT) {
+    case VIR_DOMAIN_NET_TYPE_DIRECT:
+        if (source_node) {
             dev = virXMLPropString(source_node, "dev");
             mode = virXMLPropString(source_node, "mode");
         }
+        break;

+    case VIR_DOMAIN_NET_TYPE_ETHERNET:
         /* This clause is only necessary because from 2010 to 2016 it was
          * possible (but never documented) to configure the name of the
          * guest-side interface of an openvz domain with <source dev='blah'/>.
@@ -9051,33 +9066,40 @@ virDomainNetDefParseXML(virDomainXMLOption *xmlopt,
          * need to generate an error. If the openvz driver is ever
          * deprecated, this clause can be removed from here.
          */
-        if (def->type == VIR_DOMAIN_NET_TYPE_ETHERNET &&
-            (dev = virXMLPropString(source_node, "dev"))) {
-            virReportError(VIR_ERR_XML_ERROR,
-                           _("Invalid attempt to set <interface type='ethernet'> "
-                             "device name with <source dev='%s'/>. "
-                             "Use <target dev='%s'/> (for host-side) "
-                             "or <guest dev='%s'/> (for guest-side) instead."),
-                           dev, dev, dev);
-            return NULL;
+        if (source_node) {
+            if ((dev = virXMLPropString(source_node, "dev"))) {
+                virReportError(VIR_ERR_XML_ERROR,
+                               _("Invalid attempt to set <interface type='ethernet'> "
+                                 "device name with <source dev='%s'/>. "
+                                 "Use <target dev='%s'/> (for host-side) "
+                                 "or <guest dev='%s'/> (for guest-side) instead."),
+                               dev, dev, dev);
+                return NULL;
+            }
         }
+        break;

-        if (def->type == VIR_DOMAIN_NET_TYPE_VHOSTUSER) {
+    case VIR_DOMAIN_NET_TYPE_VHOSTUSER:
+        if (source_node) {
             vhostuser_type = virXMLPropString(source_node, "type");
             vhostuser_path = virXMLPropString(source_node, "path");
             vhostuser_mode = virXMLPropString(source_node, "mode");
             if (virDomainChrSourceReconnectDefParseXML(&reconnect, source_node, ctxt) < 0)
                 return NULL;
         }
+        break;

-        if (def->type == VIR_DOMAIN_NET_TYPE_VDPA)
+    case VIR_DOMAIN_NET_TYPE_VDPA:
+        if (source_node) {
             dev = virXMLPropString(source_node, "dev");
+        }
+        break;

-        if (def->type == VIR_DOMAIN_NET_TYPE_SERVER ||
-            def->type == VIR_DOMAIN_NET_TYPE_CLIENT ||
-            def->type == VIR_DOMAIN_NET_TYPE_MCAST ||
-            def->type == VIR_DOMAIN_NET_TYPE_UDP) {
-
+    case VIR_DOMAIN_NET_TYPE_CLIENT:
+    case VIR_DOMAIN_NET_TYPE_SERVER:
+    case VIR_DOMAIN_NET_TYPE_MCAST:
+    case VIR_DOMAIN_NET_TYPE_UDP:
+        if (source_node) {
             address = virXMLPropString(source_node, "address");
             port = virXMLPropString(source_node, "port");
             if (def->type == VIR_DOMAIN_NET_TYPE_UDP) {
@@ -9090,6 +9112,13 @@ virDomainNetDefParseXML(virDomainXMLOption *xmlopt,
                 ctxt->node = tmp_node;
             }
         }
+        break;
+
+    case VIR_DOMAIN_NET_TYPE_HOSTDEV:
+    case VIR_DOMAIN_NET_TYPE_USER:
+    case VIR_DOMAIN_NET_TYPE_NULL:
+    case VIR_DOMAIN_NET_TYPE_LAST:
+        break;
     }

     if ((virtualport_node = virXPathNode("./virtualport", ctxt))) {
-- 
2.37.1



More information about the libvir-list mailing list