From: Michal Privoznik Date: Wed, 7 Jan 2015 14:52:21 +0000 (+0100) Subject: qemu, lxc: Warn if setting QoS on unsupported vNIC types X-Git-Tag: v1.2.12-rc1~53 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=04cf99a6b6ce380d4e04c726d1a7d4da40f908eb;p=thirdparty%2Flibvirt.git qemu, lxc: Warn if setting QoS on unsupported vNIC types https://bugzilla.redhat.com/show_bug.cgi?id=1165993 So, there are still plenty of vNIC types that we don't know how to set bandwidth on. Let's warn explicitly in case user has requested it instead of pretending everything was set. Signed-off-by: Michal Privoznik --- diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c index f503fcfb19..07ddce3664 100644 --- a/src/lxc/lxc_driver.c +++ b/src/lxc/lxc_driver.c @@ -4148,6 +4148,7 @@ lxcDomainAttachDeviceNetLive(virConnectPtr conn, virLXCDomainObjPrivatePtr priv = vm->privateData; int ret = -1; int actualType; + virNetDevBandwidthPtr actualBandwidth; char *veth = NULL; if (!priv->initpid) { @@ -4195,11 +4196,18 @@ lxcDomainAttachDeviceNetLive(virConnectPtr conn, _("Network device type is not supported")); goto cleanup; } - /* set network bandwidth */ - if (virNetDevSupportBandwidth(actualType) && - virNetDevBandwidthSet(net->ifname, - virDomainNetGetActualBandwidth(net), false) < 0) - goto cleanup; + /* Set bandwidth or warn if requested and not supported. */ + actualBandwidth = virDomainNetGetActualBandwidth(net); + if (actualBandwidth) { + if (virNetDevSupportBandwidth(actualType)) { + if (virNetDevBandwidthSet(net->ifname, actualBandwidth, false) < 0) + goto cleanup; + } else { + VIR_WARN("setting bandwidth on interfaces of " + "type '%s' is not implemented yet", + virDomainNetTypeToString(actualType)); + } + } if (virNetDevSetNamespace(veth, priv->initpid) < 0) { virDomainAuditNet(vm, NULL, net, "attach", false); diff --git a/src/lxc/lxc_process.c b/src/lxc/lxc_process.c index af08de9cdc..89e9249abe 100644 --- a/src/lxc/lxc_process.c +++ b/src/lxc/lxc_process.c @@ -369,6 +369,7 @@ static int virLXCProcessSetupInterfaces(virConnectPtr conn, for (i = 0; i < def->nnets; i++) { char *veth = NULL; + virNetDevBandwidthPtr actualBandwidth; /* If appropriate, grab a physical device from the configured * network's pool of devices, or resolve bridge device name * to the one defined in the network definition. @@ -422,11 +423,18 @@ static int virLXCProcessSetupInterfaces(virConnectPtr conn, } - /* set network bandwidth */ - if (virNetDevSupportBandwidth(type) && - virNetDevBandwidthSet(net->ifname, - virDomainNetGetActualBandwidth(net), false) < 0) - goto cleanup; + /* Set bandwidth or warn if requested and not supported. */ + actualBandwidth = virDomainNetGetActualBandwidth(net); + if (actualBandwidth) { + if (virNetDevSupportBandwidth(type)) { + if (virNetDevBandwidthSet(net->ifname, actualBandwidth, false) < 0) + goto cleanup; + } else { + VIR_WARN("setting bandwidth on interfaces of " + "type '%s' is not implemented yet", + virDomainNetTypeToString(type)); + } + } (*veths)[(*nveths)-1] = veth; diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 3346e95e1d..3cafbfb600 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -7365,6 +7365,7 @@ qemuBuildInterfaceCommandLine(virCommandPtr cmd, char **tapfdName = NULL; char **vhostfdName = NULL; int actualType = virDomainNetGetActualType(net); + virNetDevBandwidthPtr actualBandwidth; size_t i; if (actualType == VIR_DOMAIN_NET_TYPE_VHOSTUSER) @@ -7415,12 +7416,18 @@ qemuBuildInterfaceCommandLine(virCommandPtr cmd, goto cleanup; } - /* Set Bandwidth */ - if (virNetDevSupportBandwidth(actualType) && - virNetDevBandwidthSet(net->ifname, - virDomainNetGetActualBandwidth(net), - false) < 0) - goto cleanup; + /* Set bandwidth or warn if requested and not supported. */ + actualBandwidth = virDomainNetGetActualBandwidth(net); + if (actualBandwidth) { + if (virNetDevSupportBandwidth(actualType)) { + if (virNetDevBandwidthSet(net->ifname, actualBandwidth, false) < 0) + goto cleanup; + } else { + VIR_WARN("setting bandwidth on interfaces of " + "type '%s' is not implemented yet", + virDomainNetTypeToString(actualType)); + } + } if ((actualType == VIR_DOMAIN_NET_TYPE_NETWORK || actualType == VIR_DOMAIN_NET_TYPE_BRIDGE || diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 1714341a61..bf1f69a1ff 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -838,6 +838,7 @@ int qemuDomainAttachNetDevice(virConnectPtr conn, bool releaseaddr = false; bool iface_connected = false; int actualType; + virNetDevBandwidthPtr actualBandwidth; virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); size_t i; @@ -926,11 +927,18 @@ int qemuDomainAttachNetDevice(virConnectPtr conn, if (qemuInterfaceStartDevice(net) < 0) goto cleanup; - /* Set Bandwidth */ - if (virNetDevSupportBandwidth(actualType) && - virNetDevBandwidthSet(net->ifname, - virDomainNetGetActualBandwidth(net), false) < 0) - goto cleanup; + /* Set bandwidth or warn if requested and not supported. */ + actualBandwidth = virDomainNetGetActualBandwidth(net); + if (actualBandwidth) { + if (virNetDevSupportBandwidth(actualType)) { + if (virNetDevBandwidthSet(net->ifname, actualBandwidth, false) < 0) + goto cleanup; + } else { + VIR_WARN("setting bandwidth on interfaces of " + "type '%s' is not implemented yet", + virDomainNetTypeToString(actualType)); + } + } for (i = 0; i < tapfdSize; i++) { if (virSecurityManagerSetTapFDLabel(driver->securityManager,