mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
bandwidth: Create rate update function
This will be used whenever a NIC with guaranteed throughput is to be plugged into a bridge. It will adjust the average throughput of non guaranteed NICs (classid 1:2) to meet new requirements.
This commit is contained in:
parent
7cdbacb472
commit
b697411ca0
@ -534,3 +534,52 @@ cleanup:
|
|||||||
virCommandFree(cmd);
|
virCommandFree(cmd);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* virNetDevBandwidthUpdateRate:
|
||||||
|
* @ifname: interface name
|
||||||
|
* @classid: ID of class to update
|
||||||
|
* @new_rate: new rate
|
||||||
|
*
|
||||||
|
* This function updates the 'rate' attribute of HTB class.
|
||||||
|
* It can be used whenever a new interface is plugged to a
|
||||||
|
* bridge to adjust average throughput of non guaranteed
|
||||||
|
* NICs.
|
||||||
|
*
|
||||||
|
* Returns 0 on success, -1 otherwise.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
virNetDevBandwidthUpdateRate(const char *ifname,
|
||||||
|
const char *class_id,
|
||||||
|
virNetDevBandwidthPtr bandwidth,
|
||||||
|
unsigned long long new_rate)
|
||||||
|
{
|
||||||
|
int ret = -1;
|
||||||
|
virCommandPtr cmd = NULL;
|
||||||
|
char *rate = NULL;
|
||||||
|
char *ceil = NULL;
|
||||||
|
|
||||||
|
if (virAsprintf(&rate, "%llukbps", new_rate) < 0 ||
|
||||||
|
virAsprintf(&ceil, "%llukbps", bandwidth->in->peak ?
|
||||||
|
bandwidth->in->peak :
|
||||||
|
bandwidth->in->average) < 0) {
|
||||||
|
virReportOOMError();
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd = virCommandNew(TC);
|
||||||
|
virCommandAddArgList(cmd, "class", "change", "dev", ifname,
|
||||||
|
"classid", class_id, "htb", "rate", rate,
|
||||||
|
"ceil", ceil, NULL);
|
||||||
|
|
||||||
|
if (virCommandRun(cmd, NULL) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
virCommandFree(cmd);
|
||||||
|
VIR_FREE(rate);
|
||||||
|
VIR_FREE(ceil);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
@ -67,4 +67,10 @@ int virNetDevBandwidthUnplug(const char *brname,
|
|||||||
unsigned int id)
|
unsigned int id)
|
||||||
ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
|
ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
|
||||||
|
|
||||||
|
int virNetDevBandwidthUpdateRate(const char *ifname,
|
||||||
|
const char *class_id,
|
||||||
|
virNetDevBandwidthPtr bandwidth,
|
||||||
|
unsigned long long new_rate)
|
||||||
|
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2)
|
||||||
|
ATTRIBUTE_RETURN_CHECK;
|
||||||
#endif /* __VIR_NETDEV_BANDWIDTH_H__ */
|
#endif /* __VIR_NETDEV_BANDWIDTH_H__ */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user