mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 05:35:25 +00:00
util: use a single flags arg for virNetDevBandwidthSet(), not multiple bools
Having two bools in the arg list is on the borderline of being confusing to anyone trying to read the code, but we're about to add a 3rd. This patch replaces the two bools with a single flags argument which will instead have one or more bits from virNetDevBandwidthFlags set. Signed-off-by: Laine Stump <laine@redhat.com> Signed-off-by: Michal Privoznik <mprivozn@redhat.com> Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
parent
6490d6ac11
commit
fa50454c05
@ -3570,8 +3570,12 @@ lxcDomainAttachDeviceNetLive(virLXCDriver *driver,
|
||||
actualBandwidth = virDomainNetGetActualBandwidth(net);
|
||||
if (actualBandwidth) {
|
||||
if (virNetDevSupportsBandwidth(actualType)) {
|
||||
if (virNetDevBandwidthSet(net->ifname, actualBandwidth, false,
|
||||
!virDomainNetTypeSharesHostView(net)) < 0)
|
||||
unsigned int flags = 0;
|
||||
|
||||
if (!virDomainNetTypeSharesHostView(net))
|
||||
flags |= VIR_NETDEV_BANDWIDTH_SET_DIR_SWAPPED;
|
||||
|
||||
if (virNetDevBandwidthSet(net->ifname, actualBandwidth, flags) < 0)
|
||||
goto cleanup;
|
||||
} else {
|
||||
VIR_WARN("setting bandwidth on interfaces of "
|
||||
|
@ -609,8 +609,12 @@ virLXCProcessSetupInterfaces(virLXCDriver *driver,
|
||||
actualBandwidth = virDomainNetGetActualBandwidth(net);
|
||||
if (actualBandwidth) {
|
||||
if (virNetDevSupportsBandwidth(type)) {
|
||||
if (virNetDevBandwidthSet(net->ifname, actualBandwidth, false,
|
||||
!virDomainNetTypeSharesHostView(net)) < 0)
|
||||
unsigned int flags = 0;
|
||||
|
||||
if (!virDomainNetTypeSharesHostView(net))
|
||||
flags |= VIR_NETDEV_BANDWIDTH_SET_DIR_SWAPPED;
|
||||
|
||||
if (virNetDevBandwidthSet(net->ifname, actualBandwidth, flags) < 0)
|
||||
goto cleanup;
|
||||
} else {
|
||||
VIR_WARN("setting bandwidth on interfaces of "
|
||||
|
@ -2109,8 +2109,11 @@ networkStartNetworkVirtual(virNetworkDriverState *driver,
|
||||
}
|
||||
}
|
||||
|
||||
if (virNetDevBandwidthSet(def->bridge, def->bandwidth, true, true) < 0)
|
||||
if (virNetDevBandwidthSet(def->bridge, def->bandwidth,
|
||||
VIR_NETDEV_BANDWIDTH_SET_HIERARCHICAL_CLASS
|
||||
| VIR_NETDEV_BANDWIDTH_SET_DIR_SWAPPED) < 0) {
|
||||
goto error;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
@ -2190,8 +2193,11 @@ networkStartNetworkBridge(virNetworkObj *obj)
|
||||
* type BRIDGE, is started. On failure, undo anything you've done,
|
||||
* and return -1. On success return 0.
|
||||
*/
|
||||
if (virNetDevBandwidthSet(def->bridge, def->bandwidth, true, true) < 0)
|
||||
if (virNetDevBandwidthSet(def->bridge, def->bandwidth,
|
||||
VIR_NETDEV_BANDWIDTH_SET_HIERARCHICAL_CLASS
|
||||
| VIR_NETDEV_BANDWIDTH_SET_DIR_SWAPPED) < 0) {
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (networkStartHandleMACTableManagerMode(obj) < 0)
|
||||
goto error;
|
||||
|
@ -8694,8 +8694,13 @@ qemuBuildInterfaceCommandLine(virQEMUDriver *driver,
|
||||
def->uuid,
|
||||
!virDomainNetTypeSharesHostView(net)) < 0)
|
||||
goto cleanup;
|
||||
} else if (virNetDevBandwidthSet(net->ifname, actualBandwidth, false,
|
||||
!virDomainNetTypeSharesHostView(net)) < 0) {
|
||||
} else {
|
||||
unsigned int flags = 0;
|
||||
|
||||
if (!virDomainNetTypeSharesHostView(net))
|
||||
flags |= VIR_NETDEV_BANDWIDTH_SET_DIR_SWAPPED;
|
||||
|
||||
if (virNetDevBandwidthSet(net->ifname, actualBandwidth, flags) < 0)
|
||||
goto cleanup;
|
||||
}
|
||||
} else {
|
||||
|
@ -9938,22 +9938,23 @@ qemuDomainSetInterfaceParameters(virDomainPtr dom,
|
||||
virErrorRestore(&orig_err);
|
||||
goto endjob;
|
||||
}
|
||||
} else if (virNetDevBandwidthSet(net->ifname, newBandwidth, false,
|
||||
!virDomainNetTypeSharesHostView(net)) < 0) {
|
||||
} else {
|
||||
unsigned int bwflags = 0;
|
||||
|
||||
if (!virDomainNetTypeSharesHostView(net))
|
||||
bwflags |= VIR_NETDEV_BANDWIDTH_SET_DIR_SWAPPED;
|
||||
|
||||
if (virNetDevBandwidthSet(net->ifname, newBandwidth, bwflags) < 0) {
|
||||
virErrorPtr orig_err;
|
||||
|
||||
virErrorPreserveLast(&orig_err);
|
||||
ignore_value(virNetDevBandwidthSet(net->ifname,
|
||||
net->bandwidth,
|
||||
false,
|
||||
!virDomainNetTypeSharesHostView(net)));
|
||||
if (net->bandwidth) {
|
||||
ignore_value(virDomainNetBandwidthUpdate(net,
|
||||
net->bandwidth));
|
||||
}
|
||||
ignore_value(virNetDevBandwidthSet(net->ifname, net->bandwidth, bwflags));
|
||||
if (net->bandwidth)
|
||||
ignore_value(virDomainNetBandwidthUpdate(net, net->bandwidth));
|
||||
virErrorRestore(&orig_err);
|
||||
goto endjob;
|
||||
}
|
||||
}
|
||||
|
||||
/* If the old bandwidth was cleared out, restore qdisc. */
|
||||
if (virDomainNetTypeSharesHostView(net)) {
|
||||
|
@ -1331,8 +1331,13 @@ qemuDomainAttachNetDevice(virQEMUDriver *driver,
|
||||
vm->def->uuid,
|
||||
!virDomainNetTypeSharesHostView(net)) < 0)
|
||||
goto cleanup;
|
||||
} else if (virNetDevBandwidthSet(net->ifname, actualBandwidth, false,
|
||||
!virDomainNetTypeSharesHostView(net)) < 0) {
|
||||
} else {
|
||||
int flags = 0;
|
||||
|
||||
if (!virDomainNetTypeSharesHostView(net))
|
||||
flags |= VIR_NETDEV_BANDWIDTH_SET_DIR_SWAPPED;
|
||||
|
||||
if (virNetDevBandwidthSet(net->ifname, actualBandwidth, flags) < 0)
|
||||
goto cleanup;
|
||||
}
|
||||
} else {
|
||||
@ -4181,8 +4186,13 @@ qemuDomainChangeNet(virQEMUDriver *driver,
|
||||
vm->def->uuid,
|
||||
!virDomainNetTypeSharesHostView(newdev)) < 0)
|
||||
goto cleanup;
|
||||
} else if (virNetDevBandwidthSet(newdev->ifname, newb, false,
|
||||
!virDomainNetTypeSharesHostView(newdev)) < 0) {
|
||||
} else {
|
||||
int flags = 0;
|
||||
|
||||
if (!virDomainNetTypeSharesHostView(newdev))
|
||||
flags |= VIR_NETDEV_BANDWIDTH_SET_DIR_SWAPPED;
|
||||
|
||||
if (virNetDevBandwidthSet(newdev->ifname, newb, flags) < 0)
|
||||
goto cleanup;
|
||||
}
|
||||
} else {
|
||||
|
@ -173,30 +173,35 @@ virNetDevBandwidthManipulateFilter(const char *ifname,
|
||||
* virNetDevBandwidthSet:
|
||||
* @ifname: on which interface
|
||||
* @bandwidth: rates to set (may be NULL)
|
||||
* @hierarchical_class: whether to create hierarchical class
|
||||
* @swapped: true if IN/OUT should be set contrariwise
|
||||
* @flags: bits indicating certain optional actions
|
||||
*
|
||||
|
||||
* This function enables QoS on specified interface
|
||||
* and set given traffic limits for both, incoming
|
||||
* and outgoing traffic. Any previous setting get
|
||||
* overwritten. If @hierarchical_class is TRUE, create
|
||||
* hierarchical class. It is used to guarantee minimal
|
||||
* throughput ('floor' attribute in NIC).
|
||||
* and outgoing traffic.
|
||||
*
|
||||
* If @swapped is set, the IN part of @bandwidth is set on
|
||||
* @ifname's TX, and vice versa. If it is not set, IN is set on
|
||||
* RX and OUT on TX. This is because for some types of interfaces
|
||||
* domain and the host live on the same side of the interface (so
|
||||
* domain's RX/TX is host's RX/TX), and for some it's swapped
|
||||
* (domain's RX/TX is hosts's TX/RX).
|
||||
* @flags bits and their meanings:
|
||||
*
|
||||
* VIR_NETDEV_BANDWIDTH_SET_HIERARCHICAL_CLASS
|
||||
* whether to create a hierarchical class
|
||||
* A hiearchical class structure is used to implement a minimal
|
||||
* throughput guarantee ('floor' attribute in NIC).
|
||||
*
|
||||
* VIR_NETDEV_BANDWIDTH_SET_DIR_SWAPPED
|
||||
* set if IN/OUT should be set backwards from what's indicated in
|
||||
* the bandwidth, i.e. the IN part of @bandwidth is set on
|
||||
* @ifname's TX, and the OUT part of @bandwidth is set on
|
||||
* @ifname's RX. This is needed because for some types of
|
||||
* interfaces the domain and the host live on the same side of the
|
||||
* interface (so domain's RX/TX is host's RX/TX), and for some
|
||||
* it's swapped (domain's RX/TX is hosts's TX/RX).
|
||||
*
|
||||
* Return 0 on success, -1 otherwise.
|
||||
*/
|
||||
int
|
||||
virNetDevBandwidthSet(const char *ifname,
|
||||
const virNetDevBandwidth *bandwidth,
|
||||
bool hierarchical_class,
|
||||
bool swapped)
|
||||
unsigned int flags)
|
||||
{
|
||||
int ret = -1;
|
||||
virNetDevBandwidthRate *rx = NULL; /* From domain POV */
|
||||
@ -205,6 +210,7 @@ virNetDevBandwidthSet(const char *ifname,
|
||||
char *average = NULL;
|
||||
char *peak = NULL;
|
||||
char *burst = NULL;
|
||||
bool hierarchical_class = flags & VIR_NETDEV_BANDWIDTH_SET_HIERARCHICAL_CLASS;
|
||||
|
||||
if (!bandwidth) {
|
||||
/* nothing to be enabled */
|
||||
@ -224,7 +230,7 @@ virNetDevBandwidthSet(const char *ifname,
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (swapped) {
|
||||
if (flags & VIR_NETDEV_BANDWIDTH_SET_DIR_SWAPPED) {
|
||||
rx = bandwidth->out;
|
||||
tx = bandwidth->in;
|
||||
} else {
|
||||
|
@ -39,11 +39,16 @@ void virNetDevBandwidthFree(virNetDevBandwidth *def);
|
||||
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(virNetDevBandwidth, virNetDevBandwidthFree);
|
||||
|
||||
typedef enum {
|
||||
VIR_NETDEV_BANDWIDTH_SET_HIERARCHICAL_CLASS = (1 << 0),
|
||||
VIR_NETDEV_BANDWIDTH_SET_DIR_SWAPPED = (1 << 1),
|
||||
} virNetDevBandwidthSetFlags;
|
||||
|
||||
int virNetDevBandwidthSet(const char *ifname,
|
||||
const virNetDevBandwidth *bandwidth,
|
||||
bool hierarchical_class,
|
||||
bool swapped)
|
||||
unsigned int flags)
|
||||
G_GNUC_WARN_UNUSED_RESULT;
|
||||
|
||||
int virNetDevBandwidthClear(const char *ifname);
|
||||
int virNetDevBandwidthCopy(virNetDevBandwidth **dest,
|
||||
const virNetDevBandwidth *src)
|
||||
|
@ -82,8 +82,14 @@ testVirNetDevBandwidthSet(const void *data)
|
||||
if (virNetDevOpenvswitchInterfaceSetQos(iface, band, info->uuid, true) < 0)
|
||||
return -1;
|
||||
} else {
|
||||
unsigned int flags = VIR_NETDEV_BANDWIDTH_SET_DIR_SWAPPED;
|
||||
|
||||
if (info->hierarchical_class)
|
||||
flags |= VIR_NETDEV_BANDWIDTH_SET_HIERARCHICAL_CLASS;
|
||||
|
||||
exp_cmd = info->exp_cmd_tc;
|
||||
if (virNetDevBandwidthSet(iface, band, info->hierarchical_class, true) < 0)
|
||||
|
||||
if (virNetDevBandwidthSet(iface, band, flags) < 0)
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user