]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: call common NetDef validation for hotplug and device update
authorLaine Stump <laine@redhat.com>
Fri, 13 Sep 2019 01:22:30 +0000 (21:22 -0400)
committerLaine Stump <laine@redhat.com>
Mon, 16 Sep 2019 00:18:13 +0000 (20:18 -0400)
qemuDomainAttachNetDevice() (hotplug) previously had some of the
validation that is in qemuDomainValidateActualNetDef(), but it was
incomplete. qemuDomainChangeNet() had none of that validation, but it
is all appropriate in both cases.

This is the final piece of a previously partial resolution to
https://bugzilla.redhat.com/1502754

Signed-off-by: Laine Stump <laine@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/qemu/qemu_hotplug.c

index 16070f2a5708a697867f2f91d080205f28ec7a4c..cf0d46fee91e91f11299879c263b60b811bb9c21 100644 (file)
@@ -1188,32 +1188,11 @@ qemuDomainAttachNetDevice(virQEMUDriverPtr driver,
             goto cleanup;
     }
 
-    actualType = virDomainNetGetActualType(net);
-
-    /* Currently only TAP/macvtap devices supports multiqueue. */
-    if (net->driver.virtio.queues > 0 &&
-        !(actualType == VIR_DOMAIN_NET_TYPE_NETWORK ||
-          actualType == VIR_DOMAIN_NET_TYPE_BRIDGE ||
-          actualType == VIR_DOMAIN_NET_TYPE_DIRECT ||
-          actualType == VIR_DOMAIN_NET_TYPE_ETHERNET ||
-          actualType == VIR_DOMAIN_NET_TYPE_VHOSTUSER)) {
-        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                       _("Multiqueue network is not supported for: %s"),
-                       virDomainNetTypeToString(actualType));
+    /* final validation now that we have full info on the type */
+    if (qemuDomainValidateActualNetDef(net, priv->qemuCaps) < 0)
         return -1;
-    }
 
-    /* and only TAP devices support nwfilter rules */
-    if (net->filter &&
-        !(actualType == VIR_DOMAIN_NET_TYPE_NETWORK ||
-          actualType == VIR_DOMAIN_NET_TYPE_BRIDGE ||
-          actualType == VIR_DOMAIN_NET_TYPE_ETHERNET)) {
-        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                       _("filterref is not supported for "
-                         "network interfaces of type %s"),
-                       virDomainNetTypeToString(actualType));
-        return -1;
-    }
+    actualType = virDomainNetGetActualType(net);
 
     if (qemuAssignDeviceNetAlias(vm->def, net, -1) < 0)
         goto cleanup;
@@ -3542,6 +3521,7 @@ qemuDomainChangeNet(virQEMUDriverPtr driver,
                     virDomainObjPtr vm,
                     virDomainDeviceDefPtr dev)
 {
+    qemuDomainObjPrivatePtr priv = vm->privateData;
     virDomainNetDefPtr newdev = dev->data.net;
     virDomainNetDefPtr *devslot = NULL;
     virDomainNetDefPtr olddev;
@@ -3749,6 +3729,10 @@ qemuDomainChangeNet(virQEMUDriverPtr driver,
             goto cleanup;
     }
 
+    /* final validation now that we have full info on the type */
+    if (qemuDomainValidateActualNetDef(newdev, priv->qemuCaps) < 0)
+        goto cleanup;
+
     newType = virDomainNetGetActualType(newdev);
 
     if (newType == VIR_DOMAIN_NET_TYPE_HOSTDEV) {