[libvirt PATCH 06/15] conf: use virDeviceHostdevPCIDriverInfo in network and networkport objects

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


The next step in consolidating parsing/formatting of the <driver>
element of these objects using a common struct and common code. This
eliminates the virNetworkForwardDriverNameType enum which is nearly
identical to virDeviceHostdevPCIDriverType (the only non-identical bit
was just because they'd gotten out of sync over time) and replaces its
uses with a virDeviceHostdevPCIDriverInfo (which is a struct that
contains a virDeviceHostdevPCIDriverType).

Signed-off-by: Laine Stump <laine at redhat.com>
---
 src/conf/domain_conf.c       | 48 +++---------------------------------
 src/conf/network_conf.c      | 21 ++++++----------
 src/conf/network_conf.h      | 17 ++-----------
 src/conf/virnetworkportdef.c | 10 ++++----
 src/conf/virnetworkportdef.h |  4 ++-
 src/network/bridge_driver.c  |  2 +-
 6 files changed, 22 insertions(+), 80 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index e840244a7d..1d083c97ec 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -29836,29 +29836,8 @@ virDomainNetDefActualFromNetworkPort(virDomainNetDef *iface,
         }
         actual->data.hostdev.def.source.subsys.type = VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI;
         actual->data.hostdev.def.source.subsys.u.pci.addr = port->plug.hostdevpci.addr;
-        switch ((virNetworkForwardDriverNameType)port->plug.hostdevpci.driver) {
-        case VIR_NETWORK_FORWARD_DRIVER_NAME_DEFAULT:
-            actual->data.hostdev.def.source.subsys.u.pci.driver.type =
-                VIR_DEVICE_HOSTDEV_PCI_DRIVER_TYPE_DEFAULT;
-            break;
-
-        case VIR_NETWORK_FORWARD_DRIVER_NAME_KVM:
-            actual->data.hostdev.def.source.subsys.u.pci.driver.type =
-                VIR_DEVICE_HOSTDEV_PCI_DRIVER_TYPE_KVM;
-            break;
-
-        case VIR_NETWORK_FORWARD_DRIVER_NAME_VFIO:
-            actual->data.hostdev.def.source.subsys.u.pci.driver.type =
-                VIR_DEVICE_HOSTDEV_PCI_DRIVER_TYPE_VFIO;
-            break;
-
-        case VIR_NETWORK_FORWARD_DRIVER_NAME_LAST:
-        default:
-            virReportEnumRangeError(virNetworkForwardDriverNameType,
-                                    port->plug.hostdevpci.driver);
-            goto error;
-        }
-
+        actual->data.hostdev.def.source.subsys.u.pci.driver.type
+            = port->plug.hostdevpci.driver.type;
         break;
 
     case VIR_NETWORK_PORT_PLUG_TYPE_LAST:
@@ -29959,27 +29938,8 @@ virDomainNetDefActualToNetworkPort(virDomainDef *dom,
         }
         port->plug.hostdevpci.managed = virTristateBoolFromBool(actual->data.hostdev.def.managed);
         port->plug.hostdevpci.addr = actual->data.hostdev.def.source.subsys.u.pci.addr;
-        switch (actual->data.hostdev.def.source.subsys.u.pci.driver.type) {
-        case VIR_DEVICE_HOSTDEV_PCI_DRIVER_TYPE_DEFAULT:
-            port->plug.hostdevpci.driver = VIR_NETWORK_FORWARD_DRIVER_NAME_DEFAULT;
-            break;
-
-        case VIR_DEVICE_HOSTDEV_PCI_DRIVER_TYPE_KVM:
-            port->plug.hostdevpci.driver = VIR_NETWORK_FORWARD_DRIVER_NAME_KVM;
-            break;
-
-        case VIR_DEVICE_HOSTDEV_PCI_DRIVER_TYPE_VFIO:
-            port->plug.hostdevpci.driver = VIR_NETWORK_FORWARD_DRIVER_NAME_VFIO;
-            break;
-
-        case VIR_DEVICE_HOSTDEV_PCI_DRIVER_TYPE_XEN:
-        case VIR_DEVICE_HOSTDEV_PCI_DRIVER_TYPE_LAST:
-        default:
-            virReportEnumRangeError(virDeviceHostdevPCIDriverType,
-                                    actual->data.hostdev.def.source.subsys.u.pci.driver.type);
-            return NULL;
-        }
-
+        port->plug.hostdevpci.driver.type
+            = actual->data.hostdev.def.source.subsys.u.pci.driver.type;
         break;
 
     case VIR_DOMAIN_NET_TYPE_CLIENT:
diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c
index b9601cb307..e3ad4c7340 100644
--- a/src/conf/network_conf.c
+++ b/src/conf/network_conf.c
@@ -56,13 +56,6 @@ VIR_ENUM_IMPL(virNetworkForwardHostdevDevice,
               "none", "pci", "netdev",
 );
 
-VIR_ENUM_IMPL(virNetworkForwardDriverName,
-              VIR_NETWORK_FORWARD_DRIVER_NAME_LAST,
-              "default",
-              "kvm",
-              "vfio",
-);
-
 VIR_ENUM_IMPL(virNetworkTaint,
               VIR_NETWORK_TAINT_LAST,
               "hook-script",
@@ -1358,9 +1351,9 @@ virNetworkForwardDefParseXML(const char *networkName,
 
     if ((driverNode = virXPathNode("./driver", ctxt))) {
         if (virXMLPropEnum(driverNode, "name",
-                           virNetworkForwardDriverNameTypeFromString,
+                           virDeviceHostdevPCIDriverTypeFromString,
                            VIR_XML_PROP_NONZERO,
-                           &def->driverName) < 0) {
+                           &def->driver.type) < 0) {
             return -1;
         }
     }
@@ -2351,19 +2344,19 @@ virNetworkDefFormatBuf(virBuffer *buf,
                          || VIR_SOCKET_ADDR_VALID(&def->forward.addr.end)
                          || def->forward.port.start
                          || def->forward.port.end
-                         || (def->forward.driverName
-                             != VIR_NETWORK_FORWARD_DRIVER_NAME_DEFAULT)
+                         || (def->forward.driver.type
+                             != VIR_DEVICE_HOSTDEV_PCI_DRIVER_TYPE_DEFAULT)
                          || def->forward.natIPv6);
         virBufferAsprintf(buf, "%s>\n", shortforward ? "/" : "");
         virBufferAdjustIndent(buf, 2);
 
-        if (def->forward.driverName) {
+        if (def->forward.driver.type) {
             const char *driverName
-                = virNetworkForwardDriverNameTypeToString(def->forward.driverName);
+                = virDeviceHostdevPCIDriverTypeToString(def->forward.driver.type);
             if (!driverName) {
                 virReportError(VIR_ERR_INTERNAL_ERROR,
                                _("unexpected hostdev driver name type %1$d "),
-                               def->forward.driverName);
+                               def->forward.driver.type);
                 return -1;
             }
             virBufferAsprintf(&driverAttrBuf, " name='%s'", driverName);
diff --git a/src/conf/network_conf.h b/src/conf/network_conf.h
index 497ae765f2..1d7fd3ab6a 100644
--- a/src/conf/network_conf.h
+++ b/src/conf/network_conf.h
@@ -24,6 +24,7 @@
 #define DNS_RECORD_LENGTH_SRV  (512 - 30)  /* Limit minus overhead as mentioned in RFC-2782 */
 
 #include "internal.h"
+#include "virconftypes.h"
 #include "virsocketaddr.h"
 #include "virnetdevbandwidth.h"
 #include "virnetdevvportprofile.h"
@@ -88,20 +89,6 @@ typedef enum {
 
 VIR_ENUM_DECL(virNetworkDHCPLeaseTimeUnit);
 
-/* The backend driver used for devices from the pool. Currently used
- * only for PCI devices (vfio vs. kvm), but could be used for other
- * device types in the future.
- */
-typedef enum {
-    VIR_NETWORK_FORWARD_DRIVER_NAME_DEFAULT, /* kvm now, could change */
-    VIR_NETWORK_FORWARD_DRIVER_NAME_KVM,    /* force legacy kvm style */
-    VIR_NETWORK_FORWARD_DRIVER_NAME_VFIO,   /* force vfio */
-
-    VIR_NETWORK_FORWARD_DRIVER_NAME_LAST
-} virNetworkForwardDriverNameType;
-
-VIR_ENUM_DECL(virNetworkForwardDriverName);
-
 typedef struct _virNetworkDHCPLeaseTimeDef virNetworkDHCPLeaseTimeDef;
 struct _virNetworkDHCPLeaseTimeDef {
     unsigned long long expiry;
@@ -216,7 +203,7 @@ typedef struct _virNetworkForwardDef virNetworkForwardDef;
 struct _virNetworkForwardDef {
     int type;     /* One of virNetworkForwardType constants */
     bool managed;  /* managed attribute for hostdev mode */
-    virNetworkForwardDriverNameType driverName;
+    virDeviceHostdevPCIDriverInfo driver;
 
     /* If there are multiple forward devices (i.e. a pool of
      * interfaces), they will be listed here.
diff --git a/src/conf/virnetworkportdef.c b/src/conf/virnetworkportdef.c
index 402c0051ec..77ef705e18 100644
--- a/src/conf/virnetworkportdef.c
+++ b/src/conf/virnetworkportdef.c
@@ -226,9 +226,9 @@ virNetworkPortDefParseXML(xmlXPathContextPtr ctxt)
 
         if ((driverNode = virXPathNode("./plug/driver", ctxt))) {
             if (virXMLPropEnum(driverNode, "name",
-                               virNetworkForwardDriverNameTypeFromString,
+                               virDeviceHostdevPCIDriverTypeFromString,
                                VIR_XML_PROP_NONZERO,
-                               &def->plug.hostdevpci.driver) < 0) {
+                               &def->plug.hostdevpci.driver.type) < 0) {
                 return NULL;
             }
         }
@@ -356,10 +356,10 @@ virNetworkPortDefFormatBuf(virBuffer *buf,
             virBufferAddLit(buf, ">\n");
             virBufferAdjustIndent(buf, 2);
 
-            if (def->plug.hostdevpci.driver) {
+            if (def->plug.hostdevpci.driver.type) {
                 virBufferEscapeString(&driverAttrBuf, " name='%s'",
-                                      virNetworkForwardDriverNameTypeToString(
-                                          def->plug.hostdevpci.driver));
+                                      virDeviceHostdevPCIDriverTypeToString(
+                                          def->plug.hostdevpci.driver.type));
             }
 
             virXMLFormatElement(buf, "driver", &driverAttrBuf, NULL);
diff --git a/src/conf/virnetworkportdef.h b/src/conf/virnetworkportdef.h
index bfe1dae9ea..9e51ab1a8b 100644
--- a/src/conf/virnetworkportdef.h
+++ b/src/conf/virnetworkportdef.h
@@ -22,6 +22,8 @@
 #pragma once
 
 #include "internal.h"
+#include "virconftypes.h"
+#include "device_conf.h"
 #include "virnetdevvlan.h"
 #include "virnetdevvportprofile.h"
 #include "virnetdevbandwidth.h"
@@ -69,7 +71,7 @@ struct _virNetworkPortDef {
         } direct;
         struct {
             virPCIDeviceAddress addr; /* PCI Address of device */
-            unsigned int driver; /* virNetworkForwardDriverNameType */
+            virDeviceHostdevPCIDriverInfo driver;
             virTristateBool managed;
         } hostdevpci;
     } plug;
diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
index 4be740de2c..a9188c2436 100644
--- a/src/network/bridge_driver.c
+++ b/src/network/bridge_driver.c
@@ -3930,7 +3930,7 @@ networkAllocatePort(virNetworkObj *obj,
             return -1;
         }
         port->plug.hostdevpci.addr = dev->device.pci;
-        port->plug.hostdevpci.driver = netdef->forward.driverName;
+        port->plug.hostdevpci.driver.type = netdef->forward.driver.type;
         port->plug.hostdevpci.managed = virTristateBoolFromBool(netdef->forward.managed);
 
         if (port->virtPortProfile) {
-- 
2.41.0



More information about the libvir-list mailing list