From: Stephen Hemminger Date: Thu, 1 Dec 2022 15:30:54 +0000 (-0800) Subject: tc/basic: fix json output filter X-Git-Tag: v6.1.0~11 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d4b01c0f4187e5c7c902223d96f845b8d21ce03c;p=thirdparty%2Fiproute2.git tc/basic: fix json output filter 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 Signed-off-by: Stephen Hemminger --- diff --git a/tc/f_basic.c b/tc/f_basic.c index 9a60758e8..9055370e9 100644 --- a/tc/f_basic.c +++ b/tc/f_basic.c @@ -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]); }