[libvirt] [PATCH] network: log error when <bandwidth> is requested for hostdev interfaces

Laine Stump laine at laine.org
Wed May 11 16:18:51 UTC 2016


This would previously be silently ignored.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1319044
---
 src/network/bridge_driver.c | 25 +++++++++++++++++++++++++
 src/qemu/qemu_domain.c      | 21 ++++++++++++++++-----
 2 files changed, 41 insertions(+), 5 deletions(-)

diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
index bef8a78..0fd2095 100644
--- a/src/network/bridge_driver.c
+++ b/src/network/bridge_driver.c
@@ -3126,6 +3126,20 @@ networkValidate(virNetworkDriverStatePtr driver,
                        def->name);
         return -1;
     }
+
+    if (def->forward.type == VIR_NETWORK_FORWARD_HOSTDEV) {
+        for (i = 0; i < def->nPortGroups; i++) {
+            if (def->portGroups[i].bandwidth) {
+                virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                               _("unsupported <bandwidth> element "
+                                 "in <portgroup name='%s'> of "
+                                 "network '%s' with forward mode='%s'"),
+                               def->portGroups[i].name, def->name,
+                               virNetworkForwardTypeToString(def->forward.type));
+                return -1;
+            }
+        }
+    }
     return 0;
 }
 
@@ -4305,6 +4319,17 @@ networkAllocateActualDevice(virDomainDefPtr dom,
             goto error;
         }
     }
+    if (virDomainNetGetActualBandwidth(iface)) {
+        /* bandwidth configuration via libvirt is not supported for
+         * hostdev network devices
+         */
+        if (actualType == VIR_DOMAIN_NET_TYPE_HOSTDEV) {
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                           _("bandwidth settings are not supported "
+                             "for hostdev interfaces"));
+            goto error;
+        }
+    }
 
     if (netdef) {
         netdef->connections++;
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index f7356a2..4e32251 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -2119,12 +2119,23 @@ qemuDomainDeviceDefPostParse(virDomainDeviceDefPtr dev,
 
     qemuCaps = virQEMUCapsCacheLookup(driver->qemuCapsCache, def->emulator);
 
-    if (dev->type == VIR_DOMAIN_DEVICE_NET &&
-        dev->data.net->type != VIR_DOMAIN_NET_TYPE_HOSTDEV &&
-        !dev->data.net->model) {
-        if (VIR_STRDUP(dev->data.net->model,
-                       qemuDomainDefaultNetModel(def, qemuCaps)) < 0)
+    if (dev->type == VIR_DOMAIN_DEVICE_NET) {
+        virDomainNetDefPtr net = dev->data.net;
+
+        if (net->type != VIR_DOMAIN_NET_TYPE_HOSTDEV && !net->model &&
+            VIR_STRDUP(net->model, qemuDomainDefaultNetModel(def, qemuCaps)) < 0)
+            goto cleanup;
+
+        if (net->type == VIR_DOMAIN_NET_TYPE_HOSTDEV &&
+            virDomainNetGetActualBandwidth(net)) {
+            /* bandwidth configuration via libvirt is not supported
+             * for hostdev network devices
+             */
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                           _("bandwidth settings are not supported "
+                             "for hostdev interfaces"));
             goto cleanup;
+        }
     }
 
     /* set default disk types and drivers */
-- 
2.5.5




More information about the libvir-list mailing list