]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network/qdisc: introduce is_ready() in qdisc vtable
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sat, 6 Aug 2022 03:16:56 +0000 (12:16 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 9 Aug 2022 10:37:49 +0000 (19:37 +0900)
Preparation for next commit.

src/network/tc/qdisc.c
src/network/tc/qdisc.h

index 6aef268d1f98dd7390ed92311b88a2c124fa5880..8f8a7408a587e0a7eb8ff7b26f1babc1f746f97c 100644 (file)
@@ -353,10 +353,17 @@ static bool qdisc_is_ready_to_configure(QDisc *qdisc, Link *link) {
         if (!IN_SET(link->state, LINK_STATE_CONFIGURING, LINK_STATE_CONFIGURED))
                 return false;
 
-        if (IN_SET(qdisc->parent, TC_H_ROOT, TC_H_CLSACT)) /* TC_H_CLSACT == TC_H_INGRESS */
-                return true;
+        /* TC_H_CLSACT == TC_H_INGRESS */
+        if (!IN_SET(qdisc->parent, TC_H_ROOT, TC_H_CLSACT) &&
+            link_find_tclass(link, qdisc->parent, NULL) < 0)
+                return false;
+
+        if (QDISC_VTABLE(qdisc) &&
+            QDISC_VTABLE(qdisc)->is_ready &&
+            QDISC_VTABLE(qdisc)->is_ready(qdisc, link) <= 0)
+                return false;
 
-        return link_find_tclass(link, qdisc->parent, NULL) >= 0;
+        return true;
 }
 
 static int qdisc_process_request(Request *req, Link *link, QDisc *qdisc) {
index adaaf260c471a3161a60a91d22b47d35b6523421..155e2adf24871380d532af02a3f057c7fb913f22 100644 (file)
@@ -56,6 +56,7 @@ typedef struct QDiscVTable {
         int (*init)(QDisc *qdisc);
         int (*fill_message)(Link *link, QDisc *qdisc, sd_netlink_message *m);
         int (*verify)(QDisc *qdisc);
+        int (*is_ready)(QDisc *qdisc, Link *link);
 } QDiscVTable;
 
 extern const QDiscVTable * const qdisc_vtable[_QDISC_KIND_MAX];