From: Denys Fedoryshchenko Date: Tue, 26 May 2009 22:20:26 +0000 (-0700) Subject: Filter class output by classid X-Git-Tag: v2.6.31~40 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f4a8b23d39813b5f839b9bd6ba780544fa803428;p=thirdparty%2Fiproute2.git Filter class output by classid 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 --- diff --git a/tc/tc_class.c b/tc/tc_class.c index 774497aae..9d4eea5c1 100644 --- a/tc/tc_class.c +++ b/tc/tc_class.c @@ -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");