提交 04cf99a6 编写于 作者: M Michal Privoznik

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: NMichal Privoznik <mprivozn@redhat.com>
上级 9f974858
......@@ -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)
/* 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);
......
......@@ -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)
/* 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;
......
......@@ -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)
/* 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 ||
......
......@@ -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)
/* 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,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册