[PATCH 4/5] conf, docs, schemas: Add support for interface type vds

Martin Kletzander mkletzan at redhat.com
Wed Aug 17 12:50:39 UTC 2022


This represents an interface connected to a VMWare Distributed Switch,
previously obscured as a dummy interface.

Signed-off-by: Martin Kletzander <mkletzan at redhat.com>
---
 docs/formatdomain.rst             | 30 +++++++++++----
 src/ch/ch_monitor.c               |  1 +
 src/conf/domain_conf.c            | 64 +++++++++++++++++++++++++++++++
 src/conf/domain_conf.h            |  7 ++++
 src/conf/netdev_bandwidth_conf.c  |  1 +
 src/conf/schemas/domaincommon.rng | 23 +++++++++++
 src/libxl/libxl_conf.c            |  1 +
 src/libxl/xen_common.c            |  1 +
 src/lxc/lxc_controller.c          |  1 +
 src/lxc/lxc_driver.c              |  3 ++
 src/lxc/lxc_process.c             |  2 +
 src/qemu/qemu_command.c           |  4 ++
 src/qemu/qemu_domain.c            |  1 +
 src/qemu/qemu_hotplug.c           |  3 ++
 src/qemu/qemu_interface.c         |  2 +
 src/qemu/qemu_process.c           |  2 +
 src/qemu/qemu_validate.c          |  1 +
 src/vmx/vmx.c                     |  1 +
 tools/virsh-domain.c              |  1 +
 19 files changed, 141 insertions(+), 8 deletions(-)

diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst
index ed0d9c19593b..3a8aa96fdc0a 100644
--- a/docs/formatdomain.rst
+++ b/docs/formatdomain.rst
@@ -5244,22 +5244,36 @@ Dummy network interface
 ^^^^^^^^^^^^^^^^^^^^^^^
 
 An unconnected network interface sounds pretty pointless, but can show up for
-example with VMWare when libvirt does not have any more information to provide.
-Two such scenarios are currently known:
+example with VMWare without any specified network to be connected to.
+:since:`Since 8.7.0`
 
-1) network interface exists, but is not connected to any existing network
-2) the interface is connected to something known as VMWare Distributed Switch
+::
+
+   ...
+   <devices>
+     <interface type='dummy'>
+       <mac address='52:54:00:22:c9:42'/>
+     </interface>
+   </devices>
+   ...
 
-The difference between these two is not (yet?) discoverable by libvirt, so at
-least the information gathered from the hypervisor is provided in the
-element. :since:`Since 8.7.0`
+VMWare Distributed Switch
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Interface can be connected to VMWare Distributed Switch, but since libvirt
+cannot provide information about that architecture, the information presented
+here is only what can be gathered from the VM configuration.  VMs with this
+interface type can be created, so that editing of the XML works properly,
+however libvirt cannot guarantee that any changes in these parameters will be
+valid in the hypervisor. :since:`Since 8.7.0`
 
 ::
 
    ...
    <devices>
-     <interface type='dummy'>
+     <interface type='vds'>
        <mac address='52:54:00:22:c9:42'/>
+       <source switchid='12345678-1234-1234-1234-123456789abc' portid='6' portgroupid='pg-4321' connectionid='12345'/>
      </interface>
    </devices>
    ...
diff --git a/src/ch/ch_monitor.c b/src/ch/ch_monitor.c
index 67ca4a7a0dcd..03f051edf67e 100644
--- a/src/ch/ch_monitor.c
+++ b/src/ch/ch_monitor.c
@@ -302,6 +302,7 @@ virCHMonitorBuildNetJson(virJSONValue *nets,
         case VIR_DOMAIN_NET_TYPE_UDP:
         case VIR_DOMAIN_NET_TYPE_VDPA:
         case VIR_DOMAIN_NET_TYPE_DUMMY:
+        case VIR_DOMAIN_NET_TYPE_VDS:
         case VIR_DOMAIN_NET_TYPE_LAST:
         default:
             virReportEnumRangeError(virDomainNetType, netType);
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 0cfbe22dc099..2fc94b40efe2 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -574,6 +574,7 @@ VIR_ENUM_IMPL(virDomainNet,
               "udp",
               "vdpa",
               "dummy",
+              "vds",
 );
 
 VIR_ENUM_IMPL(virDomainNetModel,
@@ -2497,6 +2498,7 @@ virDomainActualNetDefFree(virDomainActualNetDef *def)
     case VIR_DOMAIN_NET_TYPE_UDP:
     case VIR_DOMAIN_NET_TYPE_VDPA:
     case VIR_DOMAIN_NET_TYPE_DUMMY:
+    case VIR_DOMAIN_NET_TYPE_VDS:
     case VIR_DOMAIN_NET_TYPE_LAST:
         break;
     }
@@ -2621,6 +2623,10 @@ virDomainNetDefFree(virDomainNetDef *def)
         virDomainHostdevDefClear(&def->data.hostdev.def);
         break;
 
+    case VIR_DOMAIN_NET_TYPE_VDS:
+        g_free(def->data.vds.portgroup_id);
+        break;
+
     case VIR_DOMAIN_NET_TYPE_ETHERNET:
     case VIR_DOMAIN_NET_TYPE_USER:
     case VIR_DOMAIN_NET_TYPE_DUMMY:
@@ -8899,6 +8905,8 @@ virDomainNetDefParseXML(virDomainXMLOption *xmlopt,
     g_autofree char *vhost_path = NULL;
     g_autofree char *tap = NULL;
     g_autofree char *vhost = NULL;
+    g_autofree char *switchid = NULL;
+    g_autofree char *connectionid = NULL;
     const char *prefix = xmlopt ? xmlopt->config.netPrefix : NULL;
 
     if (!(def = virDomainNetDefNew(xmlopt)))
@@ -8932,6 +8940,13 @@ virDomainNetDefParseXML(virDomainXMLOption *xmlopt,
                 portid = virXMLPropString(source_node, "portid");
         }
 
+        if (def->type == VIR_DOMAIN_NET_TYPE_VDS) {
+            switchid = virXMLPropString(source_node, "switchid");
+            portid = virXMLPropString(source_node, "portid");
+            portgroup = virXMLPropString(source_node, "portgroupid");
+            connectionid = virXMLPropString(source_node, "connectionid");
+        }
+
         if (def->type == VIR_DOMAIN_NET_TYPE_INTERNAL)
             internal = virXMLPropString(source_node, "name");
 
@@ -9313,6 +9328,36 @@ virDomainNetDefParseXML(virDomainXMLOption *xmlopt,
         }
         break;
 
+    case VIR_DOMAIN_NET_TYPE_VDS:
+        if (!switchid) {
+            virReportError(VIR_ERR_XML_ERROR,
+                           _("Missing source switchid for interface type '%s'"),
+                           virDomainNetTypeToString(def->type));
+            goto error;
+        }
+
+        if (virUUIDParse(switchid, def->data.vds.switch_id) < 0) {
+            virReportError(VIR_ERR_INTERNAL_ERROR,
+                           _("Unable to parse switchid '%s'"), switchid);
+            goto error;
+        }
+
+        if (virStrToLong_ll(portid, NULL, 0, &def->data.vds.port_id) < 0) {
+            virReportError(VIR_ERR_INTERNAL_ERROR,
+                           _("Unable to parse portid '%s'"), portid);
+            goto error;
+        }
+
+        if (virStrToLong_ll(connectionid, NULL, 0, &def->data.vds.connection_id) < 0) {
+            virReportError(VIR_ERR_INTERNAL_ERROR,
+                           _("Unable to parse connectionid '%s'"), connectionid);
+            goto error;
+        }
+
+        def->data.vds.portgroup_id = g_steal_pointer(&portgroup);
+
+        break;
+
     case VIR_DOMAIN_NET_TYPE_ETHERNET:
     case VIR_DOMAIN_NET_TYPE_USER:
     case VIR_DOMAIN_NET_TYPE_DUMMY:
@@ -9495,6 +9540,7 @@ virDomainNetDefParseXML(virDomainXMLOption *xmlopt,
         case VIR_DOMAIN_NET_TYPE_HOSTDEV:
         case VIR_DOMAIN_NET_TYPE_UDP:
         case VIR_DOMAIN_NET_TYPE_DUMMY:
+        case VIR_DOMAIN_NET_TYPE_VDS:
         case VIR_DOMAIN_NET_TYPE_VDPA:
             break;
         case VIR_DOMAIN_NET_TYPE_LAST:
@@ -23683,7 +23729,21 @@ virDomainNetDefFormat(virBuffer *buf,
                                      def->data.vdpa.devicepath);
                sourceLines++;
            }
+           break;
+
+        case VIR_DOMAIN_NET_TYPE_VDS: {
+            char switchidstr[VIR_UUID_STRING_BUFLEN];
+
+            virUUIDFormat(def->data.vds.switch_id, switchidstr);
+            virBufferEscapeString(buf, "<source switchid='%s'", switchidstr);
+            virBufferAsprintf(buf, " portid='%lld'", def->data.vds.port_id);
+            virBufferEscapeString(buf, " portgroupid='%s'", def->data.vds.portgroup_id);
+            virBufferAsprintf(buf, " connectionid='%lld'", def->data.vds.connection_id);
+
+            sourceLines++;
+
             break;
+        }
 
         case VIR_DOMAIN_NET_TYPE_USER:
         case VIR_DOMAIN_NET_TYPE_DUMMY:
@@ -28303,6 +28363,7 @@ virDomainNetGetActualVirtPortProfile(const virDomainNetDef *iface)
         case VIR_DOMAIN_NET_TYPE_UDP:
         case VIR_DOMAIN_NET_TYPE_VDPA:
         case VIR_DOMAIN_NET_TYPE_DUMMY:
+        case VIR_DOMAIN_NET_TYPE_VDS:
         case VIR_DOMAIN_NET_TYPE_LAST:
             break;
         }
@@ -28317,6 +28378,7 @@ virDomainNetGetActualVirtPortProfile(const virDomainNetDef *iface)
     case VIR_DOMAIN_NET_TYPE_UDP:
     case VIR_DOMAIN_NET_TYPE_VDPA:
     case VIR_DOMAIN_NET_TYPE_DUMMY:
+    case VIR_DOMAIN_NET_TYPE_VDS:
     case VIR_DOMAIN_NET_TYPE_LAST:
     default:
         return NULL;
@@ -29314,6 +29376,7 @@ virDomainNetTypeSharesHostView(const virDomainNetDef *net)
     case VIR_DOMAIN_NET_TYPE_UDP:
     case VIR_DOMAIN_NET_TYPE_VDPA:
     case VIR_DOMAIN_NET_TYPE_DUMMY:
+    case VIR_DOMAIN_NET_TYPE_VDS:
     case VIR_DOMAIN_NET_TYPE_LAST:
         break;
     }
@@ -29576,6 +29639,7 @@ virDomainNetDefActualToNetworkPort(virDomainDef *dom,
     case VIR_DOMAIN_NET_TYPE_VHOSTUSER:
     case VIR_DOMAIN_NET_TYPE_VDPA:
     case VIR_DOMAIN_NET_TYPE_DUMMY:
+    case VIR_DOMAIN_NET_TYPE_VDS:
         virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
                        _("Unexpected network port type %s"),
                        virDomainNetTypeToString(virDomainNetGetActualType(iface)));
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 7b81acf5db3b..a1f6cf7a6fd0 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -940,6 +940,7 @@ typedef enum {
     VIR_DOMAIN_NET_TYPE_UDP,
     VIR_DOMAIN_NET_TYPE_VDPA,
     VIR_DOMAIN_NET_TYPE_DUMMY,
+    VIR_DOMAIN_NET_TYPE_VDS,
 
     VIR_DOMAIN_NET_TYPE_LAST
 } virDomainNetType;
@@ -1133,6 +1134,12 @@ struct _virDomainNetDef {
         struct {
             virDomainHostdevDef def;
         } hostdev;
+        struct {
+            unsigned char switch_id[VIR_UUID_BUFLEN];
+            char *portgroup_id;
+            long long port_id;
+            long long connection_id;
+        } vds;
     } data;
     /* virtPortProfile is used by network/bridge/direct/hostdev */
     virNetDevVPortProfile *virtPortProfile;
diff --git a/src/conf/netdev_bandwidth_conf.c b/src/conf/netdev_bandwidth_conf.c
index 58d166901a8c..b1ebfea6ddd7 100644
--- a/src/conf/netdev_bandwidth_conf.c
+++ b/src/conf/netdev_bandwidth_conf.c
@@ -296,6 +296,7 @@ bool virNetDevSupportsBandwidth(virDomainNetType type)
     case VIR_DOMAIN_NET_TYPE_HOSTDEV:
     case VIR_DOMAIN_NET_TYPE_VDPA:
     case VIR_DOMAIN_NET_TYPE_DUMMY:
+    case VIR_DOMAIN_NET_TYPE_VDS:
     case VIR_DOMAIN_NET_TYPE_LAST:
         break;
     }
diff --git a/src/conf/schemas/domaincommon.rng b/src/conf/schemas/domaincommon.rng
index 5d530f957b0d..7f6ea1d8887d 100644
--- a/src/conf/schemas/domaincommon.rng
+++ b/src/conf/schemas/domaincommon.rng
@@ -3440,6 +3440,29 @@
           <ref name="interface-options"/>
         </group>
 
+        <group>
+          <attribute name="type">
+            <value>vds</value>
+          </attribute>
+          <interleave>
+            <element name="source">
+              <attribute name="switchid">
+                <ref name="UUID"/>
+              </attribute>
+              <attribute name="portid">
+                <data type="long"/>
+              </attribute>
+              <attribute name="portgroupid">
+                <data type="string"/>
+              </attribute>
+              <attribute name="connectionid">
+                <data type="long"/>
+              </attribute>
+            </element>
+            <ref name="interface-options"/>
+          </interleave>
+        </group>
+
       </choice>
       <optional>
         <attribute name="trustGuestRxFilters">
diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c
index 92e4e0ee605f..ab736713271b 100644
--- a/src/libxl/libxl_conf.c
+++ b/src/libxl/libxl_conf.c
@@ -1392,6 +1392,7 @@ libxlMakeNic(virDomainDef *def,
         case VIR_DOMAIN_NET_TYPE_HOSTDEV:
         case VIR_DOMAIN_NET_TYPE_VDPA:
         case VIR_DOMAIN_NET_TYPE_DUMMY:
+        case VIR_DOMAIN_NET_TYPE_VDS:
         case VIR_DOMAIN_NET_TYPE_LAST:
             virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
                     _("unsupported interface type %s"),
diff --git a/src/libxl/xen_common.c b/src/libxl/xen_common.c
index d90ec674e5f6..10ac8013739f 100644
--- a/src/libxl/xen_common.c
+++ b/src/libxl/xen_common.c
@@ -1678,6 +1678,7 @@ xenFormatNet(virConnectPtr conn,
     case VIR_DOMAIN_NET_TYPE_USER:
     case VIR_DOMAIN_NET_TYPE_VDPA:
     case VIR_DOMAIN_NET_TYPE_DUMMY:
+    case VIR_DOMAIN_NET_TYPE_VDS:
         virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("Unsupported net type '%s'"),
                        virDomainNetTypeToString(net->type));
         return -1;
diff --git a/src/lxc/lxc_controller.c b/src/lxc/lxc_controller.c
index c63f4b14eaf8..9328f242df6a 100644
--- a/src/lxc/lxc_controller.c
+++ b/src/lxc/lxc_controller.c
@@ -423,6 +423,7 @@ static int virLXCControllerGetNICIndexes(virLXCController *ctrl)
         case VIR_DOMAIN_NET_TYPE_HOSTDEV:
         case VIR_DOMAIN_NET_TYPE_VDPA:
         case VIR_DOMAIN_NET_TYPE_DUMMY:
+        case VIR_DOMAIN_NET_TYPE_VDS:
             virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
                            _("Unsupported net type %s"),
                            virDomainNetTypeToString(actualType));
diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c
index 6bd2cdd205d4..8a7135ff4733 100644
--- a/src/lxc/lxc_driver.c
+++ b/src/lxc/lxc_driver.c
@@ -3466,6 +3466,7 @@ lxcDomainAttachDeviceNetLive(virLXCDriver *driver,
     case VIR_DOMAIN_NET_TYPE_UDP:
     case VIR_DOMAIN_NET_TYPE_VDPA:
     case VIR_DOMAIN_NET_TYPE_DUMMY:
+    case VIR_DOMAIN_NET_TYPE_VDS:
         virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
                        _("Network device type is not supported"));
         goto cleanup;
@@ -3522,6 +3523,7 @@ lxcDomainAttachDeviceNetLive(virLXCDriver *driver,
         case VIR_DOMAIN_NET_TYPE_UDP:
         case VIR_DOMAIN_NET_TYPE_VDPA:
         case VIR_DOMAIN_NET_TYPE_DUMMY:
+        case VIR_DOMAIN_NET_TYPE_VDS:
         case VIR_DOMAIN_NET_TYPE_LAST:
         default:
             /* no-op */
@@ -3965,6 +3967,7 @@ lxcDomainDetachDeviceNetLive(virDomainObj *vm,
     case VIR_DOMAIN_NET_TYPE_UDP:
     case VIR_DOMAIN_NET_TYPE_VDPA:
     case VIR_DOMAIN_NET_TYPE_DUMMY:
+    case VIR_DOMAIN_NET_TYPE_VDS:
         virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
                        _("Only bridged veth devices can be detached"));
         goto cleanup;
diff --git a/src/lxc/lxc_process.c b/src/lxc/lxc_process.c
index fab23fa2b11f..6b12bff25cb8 100644
--- a/src/lxc/lxc_process.c
+++ b/src/lxc/lxc_process.c
@@ -597,6 +597,7 @@ virLXCProcessSetupInterfaces(virLXCDriver *driver,
         case VIR_DOMAIN_NET_TYPE_HOSTDEV:
         case VIR_DOMAIN_NET_TYPE_VDPA:
         case VIR_DOMAIN_NET_TYPE_DUMMY:
+        case VIR_DOMAIN_NET_TYPE_VDS:
         case VIR_DOMAIN_NET_TYPE_LAST:
             virReportError(VIR_ERR_INTERNAL_ERROR,
                            _("Unsupported network type %s"),
@@ -1609,6 +1610,7 @@ virLXCProcessReconnectNotifyNets(virDomainDef *def)
         case VIR_DOMAIN_NET_TYPE_UDP:
         case VIR_DOMAIN_NET_TYPE_VDPA:
         case VIR_DOMAIN_NET_TYPE_DUMMY:
+        case VIR_DOMAIN_NET_TYPE_VDS:
         case VIR_DOMAIN_NET_TYPE_LAST:
             break;
         }
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 812176ab992e..1523ca704794 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -3962,6 +3962,7 @@ qemuBuildHostNetProps(virDomainNetDef *net)
     case VIR_DOMAIN_NET_TYPE_HOSTDEV:
         /* Should have been handled earlier via PCI/USB hotplug code. */
     case VIR_DOMAIN_NET_TYPE_DUMMY:
+    case VIR_DOMAIN_NET_TYPE_VDS:
     case VIR_DOMAIN_NET_TYPE_LAST:
         break;
     }
@@ -8182,6 +8183,7 @@ qemuBuildInterfaceConnect(virDomainObj *vm,
     case VIR_DOMAIN_NET_TYPE_INTERNAL:
     case VIR_DOMAIN_NET_TYPE_UDP:
     case VIR_DOMAIN_NET_TYPE_DUMMY:
+    case VIR_DOMAIN_NET_TYPE_VDS:
     case VIR_DOMAIN_NET_TYPE_LAST:
         break;
     }
@@ -8280,6 +8282,7 @@ qemuBuildInterfaceCommandLine(virQEMUDriver *driver,
     case VIR_DOMAIN_NET_TYPE_INTERNAL:
     case VIR_DOMAIN_NET_TYPE_UDP:
     case VIR_DOMAIN_NET_TYPE_DUMMY:
+    case VIR_DOMAIN_NET_TYPE_VDS:
     case VIR_DOMAIN_NET_TYPE_LAST:
         /* nada */
         break;
@@ -8319,6 +8322,7 @@ qemuBuildInterfaceCommandLine(virQEMUDriver *driver,
     case VIR_DOMAIN_NET_TYPE_HOSTDEV:
     case VIR_DOMAIN_NET_TYPE_VDPA:
     case VIR_DOMAIN_NET_TYPE_DUMMY:
+    case VIR_DOMAIN_NET_TYPE_VDS:
     case VIR_DOMAIN_NET_TYPE_LAST:
        /* These types don't use a network device on the host, but
         * instead use some other type of connection to the emulated
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 9d5dd07958ad..45f00e162d63 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -9733,6 +9733,7 @@ qemuDomainNetSupportsMTU(virDomainNetType type)
     case VIR_DOMAIN_NET_TYPE_UDP:
     case VIR_DOMAIN_NET_TYPE_VDPA:
     case VIR_DOMAIN_NET_TYPE_DUMMY:
+    case VIR_DOMAIN_NET_TYPE_VDS:
     case VIR_DOMAIN_NET_TYPE_LAST:
         break;
     }
diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
index 30f146f2f4d9..751fa84013b0 100644
--- a/src/qemu/qemu_hotplug.c
+++ b/src/qemu/qemu_hotplug.c
@@ -1231,6 +1231,7 @@ qemuDomainAttachNetDevice(virQEMUDriver *driver,
     case VIR_DOMAIN_NET_TYPE_INTERNAL:
     case VIR_DOMAIN_NET_TYPE_UDP:
     case VIR_DOMAIN_NET_TYPE_DUMMY:
+    case VIR_DOMAIN_NET_TYPE_VDS:
     case VIR_DOMAIN_NET_TYPE_LAST:
         virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
                        _("hotplug of interface type of %s is not implemented yet"),
@@ -3387,6 +3388,7 @@ qemuDomainChangeNetFilter(virDomainObj *vm,
     case VIR_DOMAIN_NET_TYPE_UDP:
     case VIR_DOMAIN_NET_TYPE_VDPA:
     case VIR_DOMAIN_NET_TYPE_DUMMY:
+    case VIR_DOMAIN_NET_TYPE_VDS:
         virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
                        _("filters not supported on interfaces of type %s"),
                        virDomainNetTypeToString(virDomainNetGetActualType(newdev)));
@@ -3739,6 +3741,7 @@ qemuDomainChangeNet(virQEMUDriver *driver,
         case VIR_DOMAIN_NET_TYPE_HOSTDEV:
         case VIR_DOMAIN_NET_TYPE_VDPA:
         case VIR_DOMAIN_NET_TYPE_DUMMY:
+        case VIR_DOMAIN_NET_TYPE_VDS:
             virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
                            _("unable to change config on '%s' network type"),
                            virDomainNetTypeToString(newdev->type));
diff --git a/src/qemu/qemu_interface.c b/src/qemu/qemu_interface.c
index fa34ecd5130f..3ec92fdd7d36 100644
--- a/src/qemu/qemu_interface.c
+++ b/src/qemu/qemu_interface.c
@@ -119,6 +119,7 @@ qemuInterfaceStartDevice(virDomainNetDef *net)
     case VIR_DOMAIN_NET_TYPE_HOSTDEV:
     case VIR_DOMAIN_NET_TYPE_VDPA:
     case VIR_DOMAIN_NET_TYPE_DUMMY:
+    case VIR_DOMAIN_NET_TYPE_VDS:
     case VIR_DOMAIN_NET_TYPE_LAST:
         /* these types all require no action */
         break;
@@ -206,6 +207,7 @@ qemuInterfaceStopDevice(virDomainNetDef *net)
     case VIR_DOMAIN_NET_TYPE_HOSTDEV:
     case VIR_DOMAIN_NET_TYPE_VDPA:
     case VIR_DOMAIN_NET_TYPE_DUMMY:
+    case VIR_DOMAIN_NET_TYPE_VDS:
     case VIR_DOMAIN_NET_TYPE_LAST:
         /* these types all require no action */
         break;
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index cfcf879f5908..5c8413a6b64c 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -3262,6 +3262,7 @@ qemuProcessNotifyNets(virDomainDef *def)
         case VIR_DOMAIN_NET_TYPE_UDP:
         case VIR_DOMAIN_NET_TYPE_VDPA:
         case VIR_DOMAIN_NET_TYPE_DUMMY:
+        case VIR_DOMAIN_NET_TYPE_VDS:
         case VIR_DOMAIN_NET_TYPE_LAST:
             break;
         }
@@ -8267,6 +8268,7 @@ void qemuProcessStop(virQEMUDriver *driver,
         case VIR_DOMAIN_NET_TYPE_UDP:
         case VIR_DOMAIN_NET_TYPE_VDPA:
         case VIR_DOMAIN_NET_TYPE_DUMMY:
+        case VIR_DOMAIN_NET_TYPE_VDS:
         case VIR_DOMAIN_NET_TYPE_LAST:
             /* No special cleanup procedure for these types. */
             break;
diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c
index 6e457f381412..41765bba3710 100644
--- a/src/qemu/qemu_validate.c
+++ b/src/qemu/qemu_validate.c
@@ -1761,6 +1761,7 @@ qemuValidateNetSupportsCoalesce(virDomainNetType type)
     case VIR_DOMAIN_NET_TYPE_UDP:
     case VIR_DOMAIN_NET_TYPE_VDPA:
     case VIR_DOMAIN_NET_TYPE_DUMMY:
+    case VIR_DOMAIN_NET_TYPE_VDS:
     case VIR_DOMAIN_NET_TYPE_LAST:
         break;
     }
diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c
index 7b705b895ed1..b7b997e83540 100644
--- a/src/vmx/vmx.c
+++ b/src/vmx/vmx.c
@@ -3973,6 +3973,7 @@ virVMXFormatEthernet(virDomainNetDef *def, int controller,
     case VIR_DOMAIN_NET_TYPE_HOSTDEV:
     case VIR_DOMAIN_NET_TYPE_UDP:
     case VIR_DOMAIN_NET_TYPE_VDPA:
+    case VIR_DOMAIN_NET_TYPE_VDS:
         virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("Unsupported net type '%s'"),
                        virDomainNetTypeToString(def->type));
         return -1;
diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
index 451f51d633d8..d2ea4d1c7b44 100644
--- a/tools/virsh-domain.c
+++ b/tools/virsh-domain.c
@@ -1070,6 +1070,7 @@ cmdAttachInterface(vshControl *ctl, const vshCmd *cmd)
     case VIR_DOMAIN_NET_TYPE_VDPA:
     case VIR_DOMAIN_NET_TYPE_INTERNAL:
     case VIR_DOMAIN_NET_TYPE_DUMMY:
+    case VIR_DOMAIN_NET_TYPE_VDS:
     case VIR_DOMAIN_NET_TYPE_LAST:
         vshError(ctl, _("No support for %s in command 'attach-interface'"),
                  type);
-- 
2.37.2



More information about the libvir-list mailing list