[libvirt PATCH 08/15] conf: use new common parser/formatter for hostdev driver in network XML

Laine Stump laine at redhat.com
Mon Oct 23 04:54:44 UTC 2023


Now if a new attribute is added to <driver>, we only need to update
the formatting/parsing in one place.

Signed-off-by: Laine Stump <laine at redhat.com>
---
 src/conf/network_conf.c      | 23 ++++-------------------
 src/conf/virnetworkportdef.c | 20 ++++++--------------
 2 files changed, 10 insertions(+), 33 deletions(-)

diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c
index e3ad4c7340..43e7c78e95 100644
--- a/src/conf/network_conf.c
+++ b/src/conf/network_conf.c
@@ -1349,13 +1349,9 @@ virNetworkForwardDefParseXML(const char *networkName,
         def->managed = true;
     }
 
-    if ((driverNode = virXPathNode("./driver", ctxt))) {
-        if (virXMLPropEnum(driverNode, "name",
-                           virDeviceHostdevPCIDriverTypeFromString,
-                           VIR_XML_PROP_NONZERO,
-                           &def->driver.type) < 0) {
+    if ((driverNode = virXPathNode("./driver", ctxt)) &&
+        virDeviceHostdevPCIDriverInfoParseXML(driverNode, &def->driver) < 0) {
             return -1;
-        }
     }
 
     /* bridge and hostdev modes can use a pool of physical interfaces */
@@ -2350,19 +2346,8 @@ virNetworkDefFormatBuf(virBuffer *buf,
         virBufferAsprintf(buf, "%s>\n", shortforward ? "/" : "");
         virBufferAdjustIndent(buf, 2);
 
-        if (def->forward.driver.type) {
-            const char *driverName
-                = virDeviceHostdevPCIDriverTypeToString(def->forward.driver.type);
-            if (!driverName) {
-                virReportError(VIR_ERR_INTERNAL_ERROR,
-                               _("unexpected hostdev driver name type %1$d "),
-                               def->forward.driver.type);
-                return -1;
-            }
-            virBufferAsprintf(&driverAttrBuf, " name='%s'", driverName);
-        }
-
-        virXMLFormatElement(buf, "driver", &driverAttrBuf, NULL);
+       if (virDeviceHostdevPCIDriverInfoFormat(buf, &def->forward.driver) < 0)
+            return -1;
 
         if (def->forward.type == VIR_NETWORK_FORWARD_NAT) {
             if (virNetworkForwardNatDefFormat(buf, &def->forward) < 0)
diff --git a/src/conf/virnetworkportdef.c b/src/conf/virnetworkportdef.c
index 77ef705e18..67911e498e 100644
--- a/src/conf/virnetworkportdef.c
+++ b/src/conf/virnetworkportdef.c
@@ -224,13 +224,10 @@ virNetworkPortDefParseXML(xmlXPathContextPtr ctxt)
                                    &def->plug.hostdevpci.managed) < 0)
             return NULL;
 
-        if ((driverNode = virXPathNode("./plug/driver", ctxt))) {
-            if (virXMLPropEnum(driverNode, "name",
-                               virDeviceHostdevPCIDriverTypeFromString,
-                               VIR_XML_PROP_NONZERO,
-                               &def->plug.hostdevpci.driver.type) < 0) {
-                return NULL;
-            }
+        if ((driverNode = virXPathNode("./plug/driver", ctxt)) &&
+            virDeviceHostdevPCIDriverInfoParseXML(driverNode,
+                                                  &def->plug.hostdevpci.driver) < 0) {
+            return NULL;
         }
 
         if (!(addressNode = virXPathNode("./plug/address", ctxt))) {
@@ -356,13 +353,8 @@ virNetworkPortDefFormatBuf(virBuffer *buf,
             virBufferAddLit(buf, ">\n");
             virBufferAdjustIndent(buf, 2);
 
-            if (def->plug.hostdevpci.driver.type) {
-                virBufferEscapeString(&driverAttrBuf, " name='%s'",
-                                      virDeviceHostdevPCIDriverTypeToString(
-                                          def->plug.hostdevpci.driver.type));
-            }
-
-            virXMLFormatElement(buf, "driver", &driverAttrBuf, NULL);
+            if (virDeviceHostdevPCIDriverInfoFormat(buf, &def->plug.hostdevpci.driver) < 0)
+                return -1;
 
             virPCIDeviceAddressFormat(buf, def->plug.hostdevpci.addr, false);
             virBufferAdjustIndent(buf, -2);
-- 
2.41.0



More information about the libvir-list mailing list