From c9e70be162b10230f91affcf0a92953bf89e3143 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Sat, 7 Oct 2023 14:25:50 +0900 Subject: [PATCH] network/tc: re-enumerate traffic control classes when a qdisc created Some kind of qdisc implicitly creates a class for the qdisc, but the created class is not notified by the kernel. So, we need to explicitly enumerate classes after a qdisc is created. --- src/network/tc/qdisc.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/network/tc/qdisc.c b/src/network/tc/qdisc.c index 828fe9ab829..6a4d2043a0a 100644 --- a/src/network/tc/qdisc.c +++ b/src/network/tc/qdisc.c @@ -536,6 +536,14 @@ int manager_rtnl_process_qdisc(sd_netlink *rtnl, sd_netlink_message *message, Ma qdisc = TAKE_PTR(tmp); } + if (!m->enumerating) { + /* Some kind of QDisc (e.g. tbf) also create an implicit class under the qdisc, but + * the kernel may not notify about the class. Hence, we need to enumerate classes. */ + r = link_enumerate_tclass(link, qdisc->handle); + if (r < 0) + log_link_warning_errno(link, r, "Failed to enumerate TClass, ignoring: %m"); + } + break; case RTM_DELQDISC: -- 2.39.5