99cbc7
From 1b3ded7e3b24f927a7941178e2bb75d1d8052c3f Mon Sep 17 00:00:00 2001
99cbc7
Message-Id: <1b3ded7e3b24f927a7941178e2bb75d1d8052c3f@dist-git>
99cbc7
From: Laine Stump <laine@redhat.com>
99cbc7
Date: Mon, 16 Sep 2019 09:54:06 -0400
99cbc7
Subject: [PATCH] qemu: call common NetDef validation for hotplug and device
99cbc7
 update
99cbc7
MIME-Version: 1.0
99cbc7
Content-Type: text/plain; charset=UTF-8
99cbc7
Content-Transfer-Encoding: 8bit
99cbc7
99cbc7
qemuDomainAttachNetDevice() (hotplug) previously had some of the
99cbc7
validation that is in qemuDomainValidateActualNetDef(), but it was
99cbc7
incomplete. qemuDomainChangeNet() had none of that validation, but it
99cbc7
is all appropriate in both cases.
99cbc7
99cbc7
This is the final piece of a previously partial resolution to
99cbc7
https://bugzilla.redhat.com/1502754
99cbc7
99cbc7
Signed-off-by: Laine Stump <laine@redhat.com>
99cbc7
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
99cbc7
(cherry picked from commit 70a29b378a397f6f4571c95b9d3cbba711a90859)
99cbc7
99cbc7
Signed-off-by: Laine Stump <laine@redhat.com>
99cbc7
Message-Id: <20190916135406.18523-4-laine@redhat.com>
99cbc7
Reviewed-by: Ján Tomko <jtomko@redhat.com>
99cbc7
---
99cbc7
 src/qemu/qemu_hotplug.c | 32 ++++++++------------------------
99cbc7
 1 file changed, 8 insertions(+), 24 deletions(-)
99cbc7
99cbc7
diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
99cbc7
index ca8b0aaf62..3b888e31b9 100644
99cbc7
--- a/src/qemu/qemu_hotplug.c
99cbc7
+++ b/src/qemu/qemu_hotplug.c
99cbc7
@@ -848,32 +848,11 @@ qemuDomainAttachNetDevice(virQEMUDriverPtr driver,
99cbc7
     if (virDomainNetAllocateActualDevice(vm->def, net) < 0)
99cbc7
         goto cleanup;
99cbc7
 
99cbc7
-    actualType = virDomainNetGetActualType(net);
99cbc7
-
99cbc7
-    /* Currently only TAP/macvtap devices supports multiqueue. */
99cbc7
-    if (net->driver.virtio.queues > 0 &&
99cbc7
-        !(actualType == VIR_DOMAIN_NET_TYPE_NETWORK ||
99cbc7
-          actualType == VIR_DOMAIN_NET_TYPE_BRIDGE ||
99cbc7
-          actualType == VIR_DOMAIN_NET_TYPE_DIRECT ||
99cbc7
-          actualType == VIR_DOMAIN_NET_TYPE_ETHERNET ||
99cbc7
-          actualType == VIR_DOMAIN_NET_TYPE_VHOSTUSER)) {
99cbc7
-        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
99cbc7
-                       _("Multiqueue network is not supported for: %s"),
99cbc7
-                       virDomainNetTypeToString(actualType));
99cbc7
+    /* final validation now that we have full info on the type */
99cbc7
+    if (qemuDomainValidateActualNetDef(net, priv->qemuCaps) < 0)
99cbc7
         return -1;
99cbc7
-    }
99cbc7
 
99cbc7
-    /* and only TAP devices support nwfilter rules */
99cbc7
-    if (net->filter &&
99cbc7
-        !(actualType == VIR_DOMAIN_NET_TYPE_NETWORK ||
99cbc7
-          actualType == VIR_DOMAIN_NET_TYPE_BRIDGE ||
99cbc7
-          actualType == VIR_DOMAIN_NET_TYPE_ETHERNET)) {
99cbc7
-        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
99cbc7
-                       _("filterref is not supported for "
99cbc7
-                         "network interfaces of type %s"),
99cbc7
-                       virDomainNetTypeToString(actualType));
99cbc7
-        return -1;
99cbc7
-    }
99cbc7
+    actualType = virDomainNetGetActualType(net);
99cbc7
 
99cbc7
     if (qemuAssignDeviceNetAlias(vm->def, net, -1) < 0)
99cbc7
         goto cleanup;
99cbc7
@@ -3154,6 +3133,7 @@ qemuDomainChangeNet(virQEMUDriverPtr driver,
99cbc7
                     virDomainObjPtr vm,
99cbc7
                     virDomainDeviceDefPtr dev)
99cbc7
 {
99cbc7
+    qemuDomainObjPrivatePtr priv = vm->privateData;
99cbc7
     virDomainNetDefPtr newdev = dev->data.net;
99cbc7
     virDomainNetDefPtr *devslot = NULL;
99cbc7
     virDomainNetDefPtr olddev;
99cbc7
@@ -3333,6 +3313,10 @@ qemuDomainChangeNet(virQEMUDriverPtr driver,
99cbc7
         goto cleanup;
99cbc7
     }
99cbc7
 
99cbc7
+    /* final validation now that we have full info on the type */
99cbc7
+    if (qemuDomainValidateActualNetDef(newdev, priv->qemuCaps) < 0)
99cbc7
+        goto cleanup;
99cbc7
+
99cbc7
     newType = virDomainNetGetActualType(newdev);
99cbc7
 
99cbc7
     if (newType == VIR_DOMAIN_NET_TYPE_HOSTDEV) {
99cbc7
-- 
99cbc7
2.23.0
99cbc7