On Fri, Nov 22, 2024 at 04:16:37PM -0500, Laine Stump wrote:
> There will soon be two separate users of tc on virtual networks, and
> both will use the "qdisc root handle 1: htb" to add tx filters. One or the
> other could get the first chance to add the qdisc, and then if at a
> later time the other decides to use it, we need to prevent the 2nd
> user from attempting to re-add the qdisc (because that just generates
> an error).
>
> We do this by running "tc qdisc show dev $bridge handle 1:" then
> checking if the output of that command starts with "qdisc htb 1:
> root". If it does then the qdisc is already there. If not then we need
> to add it now.
>
> diff --git a/src/util/virnetdevbandwidth.c b/src/util/virnetdevbandwidth.c
> index 09c10e9a15..ae7214a9d5 100644
> --- a/src/util/virnetdevbandwidth.c
> +++ b/src/util/virnetdevbandwidth.c
> +
> + /* output will be something like: "qdisc htb 1: root refcnt ..."
> + * if the qdisc was already added.
> + */
> + if (!(testResult && STRPREFIX(testResult, "qdisc htb 1: root"))) {
I wonder a little how stable "tc qdisc show" output format has been
over time ? This is a very exact match we're performing. Don't
suppose there's some way to detect this scenario without parsing
human output from 'tc' ?
> + /* didn't find qdisc in output, so we need to add one */
> + g_autoptr(virCommand) addCmd = virCommandNew(TC);
> +
> + virCommandAddArgList(addCmd, "qdisc", "add", "dev", ifname, "root",
> + "handle", "1:", "htb", "default",
> + hierarchical_class ? "2" : "1", NULL);
> +
> + return virCommandRun(addCmd, NULL);
> + }
> +
> + return 0;
> }
With regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|