]> xenbits.xensource.com Git - libvirt.git/commitdiff
conf: use new common parser/formatter for hostdev driver in network XML
authorLaine Stump <laine@redhat.com>
Fri, 5 Jan 2024 01:12:51 +0000 (20:12 -0500)
committerLaine Stump <laine@redhat.com>
Mon, 8 Jan 2024 04:57:09 +0000 (23:57 -0500)
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@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
src/conf/network_conf.c
src/conf/virnetworkportdef.c

index d732e90b6d251f709ed60314dd66e130eca7e30d..890c16b3b1d996840922f41a91847fafdf6d2586 100644 (file)
@@ -1349,13 +1349,9 @@ virNetworkForwardDefParseXML(const char *networkName,
         def->managed = true;
     }
 
-    if ((driverNode = virXPathNode("./driver", ctxt))) {
-        if (virXMLPropEnum(driverNode, "name",
-                           virDeviceHostdevPCIDriverNameTypeFromString,
-                           VIR_XML_PROP_NONZERO,
-                           &def->driver.name) < 0) {
+    if ((driverNode = virXPathNode("./driver", ctxt)) &&
+        virDeviceHostdevPCIDriverInfoParseXML(driverNode, &def->driver) < 0) {
             return -1;
-        }
     }
 
     /* bridge and hostdev modes can use a pool of physical interfaces */
@@ -2317,7 +2313,6 @@ virNetworkDefFormatBuf(virBuffer *buf,
     if (def->forward.type != VIR_NETWORK_FORWARD_NONE) {
         const char *dev = NULL;
         const char *mode = virNetworkForwardTypeToString(def->forward.type);
-        g_auto(virBuffer) driverAttrBuf = VIR_BUFFER_INITIALIZER;
 
         if (!def->forward.npfs)
             dev = virNetworkDefForwardIf(def, 0);
@@ -2347,18 +2342,8 @@ virNetworkDefFormatBuf(virBuffer *buf,
         virBufferAsprintf(buf, "%s>\n", shortforward ? "/" : "");
         virBufferAdjustIndent(buf, 2);
 
-        if (def->forward.driver.name) {
-            const char *driverName = virDeviceHostdevPCIDriverNameTypeToString(def->forward.driver.name);
-            if (!driverName) {
-                virReportError(VIR_ERR_INTERNAL_ERROR,
-                               _("unexpected hostdev driver name %1$d "),
-                               def->forward.driver.name);
-                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)
index c7902f01741043bdc4f75b2381862e185cfd874a..49d00b2ea6d7158f3bd45e0f354215457f12974b 100644 (file)
@@ -224,13 +224,10 @@ virNetworkPortDefParseXML(xmlXPathContextPtr ctxt)
                                    &def->plug.hostdevpci.managed) < 0)
             return NULL;
 
-        if ((driverNode = virXPathNode("./plug/driver", ctxt))) {
-            if (virXMLPropEnum(driverNode, "name",
-                               virDeviceHostdevPCIDriverNameTypeFromString,
-                               VIR_XML_PROP_NONZERO,
-                               &def->plug.hostdevpci.driver.name) < 0) {
-                return NULL;
-            }
+        if ((driverNode = virXPathNode("./plug/driver", ctxt)) &&
+            virDeviceHostdevPCIDriverInfoParseXML(driverNode,
+                                                  &def->plug.hostdevpci.driver) < 0) {
+            return NULL;
         }
 
         if (!(addressNode = virXPathNode("./plug/address", ctxt))) {
@@ -321,7 +318,6 @@ virNetworkPortDefFormatBuf(virBuffer *buf,
                           virTristateBoolTypeToString(def->trustGuestRxFilters));
 
     if (def->plugtype != VIR_NETWORK_PORT_PLUG_TYPE_NONE) {
-        g_auto(virBuffer) driverAttrBuf = VIR_BUFFER_INITIALIZER;
 
         virBufferAsprintf(buf, "<plug type='%s'",
                           virNetworkPortPlugTypeToString(def->plugtype));
@@ -356,12 +352,8 @@ virNetworkPortDefFormatBuf(virBuffer *buf,
             virBufferAddLit(buf, ">\n");
             virBufferAdjustIndent(buf, 2);
 
-            if (def->plug.hostdevpci.driver.name) {
-                virBufferEscapeString(&driverAttrBuf, " name='%s'",
-                                      virDeviceHostdevPCIDriverNameTypeToString(def->plug.hostdevpci.driver.name));
-            }
-
-            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);