From 98696fd170b7ff4ecd4b8499ee1952f11cb26e46 Mon Sep 17 00:00:00 2001 From: Michal Privoznik Date: Wed, 25 Oct 2017 12:42:41 +0200 Subject: [PATCH] qemuDomainSetInterfaceParameters: Explicitly reject unsupported net types For instance, NET_TYPE_MCAST doesn't support setting QoS. Instead of claiming success and doing nothing, we should be explicit about that and report an error. Signed-off-by: Michal Privoznik --- src/qemu/qemu_driver.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 74fdfdb0f0..1dff53441b 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -108,6 +108,7 @@ #include "virnuma.h" #include "dirname.h" #include "network/bridge_driver.h" +#include "netdev_bandwidth_conf.h" #define VIR_FROM_THIS VIR_FROM_QEMU @@ -11107,6 +11108,8 @@ qemuDomainSetInterfaceParameters(virDomainPtr dom, virNetDevBandwidthPtr bandwidth = NULL, newBandwidth = NULL; virQEMUDriverConfigPtr cfg = NULL; bool inboundSpecified = false, outboundSpecified = false; + int actualType; + bool qosSupported = true; virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | VIR_DOMAIN_AFFECT_CONFIG, -1); @@ -11150,6 +11153,24 @@ qemuDomainSetInterfaceParameters(virDomainPtr dom, !(persistentNet = virDomainNetFind(persistentDef, device))) goto endjob; + if (net) { + actualType = virDomainNetGetActualType(net); + qosSupported = virNetDevSupportBandwidth(actualType); + } + + if (qosSupported && persistentNet) { + actualType = virDomainNetGetActualType(persistentNet); + qosSupported = virNetDevSupportBandwidth(actualType); + } + + if (!qosSupported) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("setting bandwidth on interfaces of " + "type '%s' is not implemented yet"), + virDomainNetTypeToString(actualType)); + goto endjob; + } + if ((VIR_ALLOC(bandwidth) < 0) || (VIR_ALLOC(bandwidth->in) < 0) || (VIR_ALLOC(bandwidth->out) < 0)) -- 2.47.2