]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
Filter class output by classid
authorDenys Fedoryshchenko <denys@visp.net.lb>
Tue, 26 May 2009 22:20:26 +0000 (15:20 -0700)
committerStephen Hemminger <stephen.hemminger@vyatta.com>
Tue, 26 May 2009 22:20:26 +0000 (15:20 -0700)
Sometimes while dividing bandwidth by classes it is useful to see how some
specific class doing things live.

Which my simple patch it is possible to do
watch -n1 "tc -s -d class show dev eth0.2022 classid 1:1520"
and to get live statistics, how packets queued or dropped, and how much
bandwidth used (if estimator defined) for specific class.

Signed-off-by: Denys Fedoryshchenko <denys@visp.net.lb>
tc/tc_class.c

index 774497aae68da3fb171dd5828fa68f88a4fbf719..9d4eea5c1c8f297c3f553091bbf12d05f21115e7 100644 (file)
@@ -146,6 +146,7 @@ int tc_class_modify(int cmd, unsigned flags, int argc, char **argv)
 
 int filter_ifindex;
 __u32 filter_qdisc;
+__u32 filter_classid;
 
 int print_class(const struct sockaddr_nl *who,
                       struct nlmsghdr *n, void *arg)
@@ -169,6 +170,9 @@ int print_class(const struct sockaddr_nl *who,
        if (filter_qdisc && TC_H_MAJ(t->tcm_handle^filter_qdisc))
                return 0;
 
+       if (filter_classid && t->tcm_handle != filter_classid)
+               return 0;
+
        memset(tb, 0, sizeof(tb));
        parse_rtattr(tb, TCA_MAX, TCA_RTA(t), len);
 
@@ -249,6 +253,12 @@ int tc_class_list(int argc, char **argv)
                                duparg("qdisc", *argv);
                        if (get_qdisc_handle(&filter_qdisc, *argv))
                                invarg(*argv, "invalid qdisc ID");
+               } else if (strcmp(*argv, "classid") == 0) {
+                       NEXT_ARG();
+                       if (filter_classid)
+                               duparg("classid", *argv);
+                       if (get_tc_classid(&filter_classid, *argv))
+                               invarg(*argv, "invalid class ID");
                } else if (strcmp(*argv, "root") == 0) {
                        if (t.tcm_parent) {
                                fprintf(stderr, "Error: \"root\" is duplicate parent ID\n");