From f3fb916de97e3e9d5405d1b8d78500eb51242bcb Mon Sep 17 00:00:00 2001 From: Michal Privoznik Date: Thu, 7 Mar 2013 10:53:21 +0100 Subject: [PATCH] bandwidth: Require network QoS if interface uses 'floor' By current implementation, network inbound is required in order to use 'floor' for guaranteeing minimal throughput. This is so, because we want user to tell us the maximal throughput of the network instead of finding out ourselves (and detect bogus values in case of virtual interfaces). However, we are nowadays requiring this only on documentation level. So if user starts a domain with 'floor' set on one its interfaces, we silently ignore the setting. We should error out instead. --- src/network/bridge_driver.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c index 31c8585ee1..e8b314a891 100644 --- a/src/network/bridge_driver.c +++ b/src/network/bridge_driver.c @@ -4535,12 +4535,23 @@ networkCheckBandwidth(virNetworkObjPtr net, unsigned long long tmp_new_rate = 0; char ifmac[VIR_MAC_STRING_BUFLEN]; - if (!ifaceBand || !ifaceBand->in || !ifaceBand->in->floor || - !netBand || !netBand->in) - return 1; - virMacAddrFormat(&iface->mac, ifmac); + if (ifaceBand && ifaceBand->in && ifaceBand->in->floor && + !(netBand && netBand->in)) { + virReportError(VIR_ERR_OPERATION_UNSUPPORTED, + _("Invalid use of 'floor' on interface with MAC " + "address %s - network '%s' has no inbound QoS set"), + ifmac, net->def->name); + return -1; + } + + if (!ifaceBand || !ifaceBand->in || !ifaceBand->in->floor || + !netBand || !netBand->in) { + /* no QoS required, claim success */ + return 1; + } + tmp_new_rate = netBand->in->average; tmp_floor_sum += ifaceBand->in->floor;