This allows virNetDevBandwidthSet to clear only the interface's qdisc for directions where bandwidth is defined (see the next patch) Signed-off-by: Wesley Hershberger <wesley.hershberger@canonical.com> --- src/util/virnetdevbandwidth.c | 52 +++++++++++++++++++++++++++++-------------- src/util/virnetdevbandwidth.h | 2 ++ 2 files changed, 37 insertions(+), 17 deletions(-) diff --git a/src/util/virnetdevbandwidth.c b/src/util/virnetdevbandwidth.c index b141a38b10..8de0b57943 100644 --- a/src/util/virnetdevbandwidth.c +++ b/src/util/virnetdevbandwidth.c @@ -427,6 +427,38 @@ virNetDevBandwidthSet(const char *ifname, return ret; } +int +virNetDevBandwidthClearRoot(const char *ifname) +{ + int ret = 0; + int dummy; /* for ignoring the exit status */ + g_autoptr(virCommand) cmd = NULL; + + cmd = virCommandNew("tc"); + virCommandAddArgList(cmd, "qdisc", "del", "dev", ifname, "root", NULL); + + if (virCommandRun(cmd, &dummy) < 0) + ret = -1; + + return ret; +} + +int +virNetDevBandwidthClearIngress(const char *ifname) +{ + int ret = 0; + int dummy; /* for ignoring the exit status */ + g_autoptr(virCommand) cmd = NULL; + + cmd = virCommandNew("tc"); + virCommandAddArgList(cmd, "qdisc", "del", "dev", ifname, "ingress", NULL); + + if (virCommandRun(cmd, &dummy) < 0) + ret = -1; + + return ret; +} + /** * virNetDevBandwidthClear: * @ifname: on which interface @@ -440,27 +472,13 @@ virNetDevBandwidthSet(const char *ifname, int virNetDevBandwidthClear(const char *ifname) { - int ret = 0; - int dummy; /* for ignoring the exit status */ - g_autoptr(virCommand) rootcmd = NULL; - g_autoptr(virCommand) ingresscmd = NULL; - if (!ifname) return 0; - rootcmd = virCommandNew("tc"); - virCommandAddArgList(rootcmd, "qdisc", "del", "dev", ifname, "root", NULL); + if (virNetDevBandwidthClearRoot(ifname) < 0) + return -1; - if (virCommandRun(rootcmd, &dummy) < 0) - ret = -1; - - ingresscmd = virCommandNew("tc"); - virCommandAddArgList(ingresscmd, "qdisc", "del", "dev", ifname, "ingress", NULL); - - if (virCommandRun(ingresscmd, &dummy) < 0) - ret = -1; - - return ret; + return virNetDevBandwidthClearIngress(ifname); } /* diff --git a/src/util/virnetdevbandwidth.h b/src/util/virnetdevbandwidth.h index 9f271c5283..eaddb4f3d7 100644 --- a/src/util/virnetdevbandwidth.h +++ b/src/util/virnetdevbandwidth.h @@ -50,6 +50,8 @@ int virNetDevBandwidthSet(const char *ifname, unsigned int flags) G_GNUC_WARN_UNUSED_RESULT; +int virNetDevBandwidthClearRoot(const char *ifname); +int virNetDevBandwidthClearIngress(const char *ifname); int virNetDevBandwidthClear(const char *ifname); int virNetDevBandwidthCopy(virNetDevBandwidth **dest, const virNetDevBandwidth *src) -- 2.53.0