]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
tc/basic: fix json output filter
authorStephen Hemminger <stephen@networkplumber.org>
Thu, 1 Dec 2022 15:30:54 +0000 (07:30 -0800)
committerStephen Hemminger <stephen@networkplumber.org>
Thu, 1 Dec 2022 15:30:54 +0000 (07:30 -0800)
The flowid and handle in basic were not using JSON routines to print.
 To reproduce the issue:

 $ tc qdisc add dev eth1 handle ffff: ingress
 $ tc filter add dev eth1 parent ffff: prio 20 protocol all u32 match ip dport 22 \
     0xffff action police conform-exceed drop/ok rate 100000 burst 15k flowid ffff:1

 $ tc filter add dev eth1 parent ffff: prio 255 protocol all basic action police \
     conform-exceed drop/ok rate 100000 burst 15k flowid ffff:3

Reported-by: Christian Pössinger <christian@poessinger.com>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
tc/f_basic.c

index 9a60758e803ef2ffebd90a0590d94cf5de24b35a..9055370e90b989bf16f94f67a2f696967e9c52df 100644 (file)
@@ -119,19 +119,22 @@ static int basic_print_opt(struct filter_util *qu, FILE *f,
        parse_rtattr_nested(tb, TCA_BASIC_MAX, opt);
 
        if (handle)
-               fprintf(f, "handle 0x%x ", handle);
+               print_hex(PRINT_ANY, "handle",
+                         "handle 0x%x ", handle);
 
        if (tb[TCA_BASIC_CLASSID]) {
+               uint32_t classid = rta_getattr_u32(tb[TCA_BASIC_CLASSID]);
                SPRINT_BUF(b1);
-               fprintf(f, "flowid %s ",
-                       sprint_tc_classid(rta_getattr_u32(tb[TCA_BASIC_CLASSID]), b1));
+
+               print_string(PRINT_ANY, "flowid", "flowid %s ",
+                            sprint_tc_classid(classid, b1));
        }
 
        if (tb[TCA_BASIC_EMATCHES])
                print_ematch(f, tb[TCA_BASIC_EMATCHES]);
 
        if (tb[TCA_BASIC_POLICE]) {
-               fprintf(f, "\n");
+               print_nl();
                tc_print_police(f, tb[TCA_BASIC_POLICE]);
        }