]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
bandwidth: Require network QoS if interface uses 'floor'
authorMichal Privoznik <mprivozn@redhat.com>
Thu, 7 Mar 2013 09:53:21 +0000 (10:53 +0100)
committerMichal Privoznik <mprivozn@redhat.com>
Mon, 11 Mar 2013 09:51:32 +0000 (10:51 +0100)
By current implementation, network inbound is required in order
to use 'floor' for guaranteeing  minimal throughput. This is so,
because we want user to tell us the maximal throughput of the
network instead of finding out ourselves (and detect bogus values
in case of virtual interfaces). However, we are nowadays
requiring this only on documentation level. So if user starts a
domain with 'floor' set on one its interfaces, we silently ignore
the setting. We should error out instead.

src/network/bridge_driver.c

index 31c8585ee1b6138506e79c31f07420d434198d77..e8b314a891917dc00f32b1ff32b7f1e80fa41f49 100644 (file)
@@ -4535,11 +4535,22 @@ networkCheckBandwidth(virNetworkObjPtr net,
     unsigned long long tmp_new_rate = 0;
     char ifmac[VIR_MAC_STRING_BUFLEN];
 
+    virMacAddrFormat(&iface->mac, ifmac);
+
+    if (ifaceBand && ifaceBand->in && ifaceBand->in->floor &&
+        !(netBand && netBand->in)) {
+        virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
+                       _("Invalid use of 'floor' on interface with MAC "
+                         "address %s - network '%s' has no inbound QoS set"),
+                       ifmac, net->def->name);
+        return -1;
+    }
+
     if (!ifaceBand || !ifaceBand->in || !ifaceBand->in->floor ||
-        !netBand || !netBand->in)
+        !netBand || !netBand->in) {
+        /* no QoS required, claim success */
         return 1;
-
-    virMacAddrFormat(&iface->mac, ifmac);
+    }
 
     tmp_new_rate = netBand->in->average;
     tmp_floor_sum += ifaceBand->in->floor;