Commit f4a8b23d authored by Denys Fedoryshchenko's avatar Denys Fedoryshchenko Committed by Stephen Hemminger

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: default avatarDenys Fedoryshchenko <denys@visp.net.lb>
parent cb2eb999
......@@ -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");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment