[libvirt PATCH v2 3/6] qemu: fail on attempt to set 'floor' if interface type is not 'network'

Pavel Mores posted 6 patches 5 years, 12 months ago
[libvirt PATCH v2 3/6] qemu: fail on attempt to set 'floor' if interface type is not 'network'
Posted by Pavel Mores 5 years, 12 months ago
QoS 'floor' setting is documented to be only supported for interfaces of
type 'network'.  Fail with an error message on attempt to set 'floor' on
an interface of any other type.

Signed-off-by: Pavel Mores <pmores@redhat.com>
---
 src/qemu/qemu_driver.c | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)

diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 2813f084cd..f686b858cf 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -11672,9 +11672,21 @@ qemuDomainSetInterfaceParameters(virDomainPtr dom,
                    sizeof(*newBandwidth->out));
         }
 
-        if (net->type == VIR_DOMAIN_NET_TYPE_NETWORK &&
-            virDomainNetBandwidthUpdate(net, newBandwidth) < 0)
-            goto endjob;
+        if (net->type == VIR_DOMAIN_NET_TYPE_NETWORK) {
+            if (virDomainNetBandwidthUpdate(net, newBandwidth) < 0)
+                goto endjob;
+        } else {
+            if (virNetDevBandwidthHasFloor(bandwidth)) {
+                char ifmac[VIR_MAC_STRING_BUFLEN];
+
+                virMacAddrFormat(&net->mac, ifmac);
+                virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
+                               _("Invalid use of 'floor' on interface with MAC address %s "
+                               "- 'floor' is only supported for interface type 'network' with forward type 'nat', 'route', 'open' or none"),
+                               ifmac);
+                goto endjob;
+            }
+        }
 
         if (virNetDevBandwidthSet(net->ifname, newBandwidth, false,
                                   !virDomainNetTypeSharesHostView(net)) < 0) {
-- 
2.24.1