From 7d480a4650a4843596d25f8041f20e4b6d967d74 Mon Sep 17 00:00:00 2001 From: Laine Stump Date: Wed, 16 Jan 2013 12:46:01 -0500 Subject: [PATCH] network: use bandwidth from portgroup when appropriate The bandwidth plug and unplug functions were assuming that an interface's bandwidth setting was always specified directly in the domain's definition, but that's not necessarily true - it could have been obtained from a definition in the network definition. This patch fixes those functions to use virDomainNetGetActualBandwidth(), which gets the bandwidth pointer from iface->data.network.actual if it exists, otherwise returns iface->bandwidth. --- src/network/bridge_driver.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c index c3cb63da1e..6f3c839baf 100644 --- a/src/network/bridge_driver.c +++ b/src/network/bridge_driver.c @@ -4518,7 +4518,7 @@ networkCheckBandwidth(virNetworkObjPtr net, { int ret = -1; virNetDevBandwidthPtr netBand = net->def->bandwidth; - virNetDevBandwidthPtr ifaceBand = iface->bandwidth; + virNetDevBandwidthPtr ifaceBand = virDomainNetGetActualBandwidth(iface); unsigned long long tmp_floor_sum = net->floor_sum; unsigned long long tmp_new_rate = 0; char ifmac[VIR_MAC_STRING_BUFLEN]; @@ -4597,6 +4597,7 @@ networkPlugBandwidth(virNetworkObjPtr net, unsigned long long new_rate = 0; ssize_t class_id = 0; char ifmac[VIR_MAC_STRING_BUFLEN]; + virNetDevBandwidthPtr ifaceBand = virDomainNetGetActualBandwidth(iface); if ((plug_ret = networkCheckBandwidth(net, iface, &new_rate)) < 0) { /* helper reported error */ @@ -4625,11 +4626,8 @@ networkPlugBandwidth(virNetworkObjPtr net, goto cleanup; } - plug_ret = virNetDevBandwidthPlug(net->def->bridge, - net->def->bandwidth, - &iface->mac, - iface->bandwidth, - class_id); + plug_ret = virNetDevBandwidthPlug(net->def->bridge, net->def->bandwidth, + &iface->mac, ifaceBand, class_id); if (plug_ret < 0) { ignore_value(virNetDevBandwidthUnplug(net->def->bridge, class_id)); goto cleanup; @@ -4638,11 +4636,11 @@ networkPlugBandwidth(virNetworkObjPtr net, /* QoS was set, generate new class ID */ iface->data.network.actual->class_id = class_id; /* update sum of 'floor'-s of attached NICs */ - net->floor_sum += iface->bandwidth->in->floor; + net->floor_sum += ifaceBand->in->floor; /* update status file */ if (virNetworkSaveStatus(NETWORK_STATE_DIR, net) < 0) { ignore_value(virBitmapClearBit(net->class_id, class_id)); - net->floor_sum -= iface->bandwidth->in->floor; + net->floor_sum -= ifaceBand->in->floor; iface->data.network.actual->class_id = 0; ignore_value(virNetDevBandwidthUnplug(net->def->bridge, class_id)); goto cleanup; @@ -4666,6 +4664,7 @@ networkUnplugBandwidth(virNetworkObjPtr net, { int ret = 0; unsigned long long new_rate; + virNetDevBandwidthPtr ifaceBand = virDomainNetGetActualBandwidth(iface); if (iface->data.network.actual && iface->data.network.actual->class_id) { @@ -4680,13 +4679,13 @@ networkUnplugBandwidth(virNetworkObjPtr net, if (ret < 0) goto cleanup; /* update sum of 'floor'-s of attached NICs */ - net->floor_sum -= iface->bandwidth->in->floor; + net->floor_sum -= ifaceBand->in->floor; /* return class ID */ ignore_value(virBitmapClearBit(net->class_id, iface->data.network.actual->class_id)); /* update status file */ if (virNetworkSaveStatus(NETWORK_STATE_DIR, net) < 0) { - net->floor_sum += iface->bandwidth->in->floor; + net->floor_sum += ifaceBand->in->floor; ignore_value(virBitmapSetBit(net->class_id, iface->data.network.actual->class_id)); goto cleanup; -- GitLab