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 <mprivozn@redhat.com>
This commit is contained in:
Michal Privoznik 2017-10-25 12:42:41 +02:00
parent dc162adb90
commit 98696fd170

View File

@ -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))