[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20230807220936.4164355-2-vladimir.oltean@nxp.com>
Date: Tue, 8 Aug 2023 01:09:36 +0300
From: Vladimir Oltean <vladimir.oltean@....com>
To: netdev@...r.kernel.org
Cc: David Ahern <dsahern@...nel.org>,
Stephen Hemminger <stephen@...workplumber.org>,
Vinicius Costa Gomes <vinicius.gomes@...el.com>
Subject: [PATCH v2 iproute2 2/2] tc/taprio: fix JSON output when TCA_TAPRIO_ATTR_ADMIN_SCHED is present
When the kernel reports that a configuration change is pending
(and that the schedule is still in the administrative state and
not yet operational), we (tc -j -p qdisc show) produce the following
output:
[ {
"kind": "taprio",
"handle": "8001:",
"root": true,
"refcnt": 9,
"options": {
"tc": 8,
"map": [ 0,1,2,3,4,5,6,7,0,0,0,0,0,0,0,0 ],
"queues": [ {
"offset": 0,
"count": 1
},{
"offset": 1,
"count": 1
},{
"offset": 2,
"count": 1
},{
"offset": 3,
"count": 1
},{
"offset": 4,
"count": 1
},{
"offset": 5,
"count": 1
},{
"offset": 6,
"count": 1
},{
"offset": 7,
"count": 1
} ],
"clockid": "TAI",
"base_time": 0,
"cycle_time": 20000000,
"cycle_time_extension": 0,
"schedule": [ {
"index": 0,
"cmd": "S",
"gatemask": "0xff",
"interval": 20000000
} ],{
"base_time": 1691160103110424418,
"cycle_time": 20000000,
"cycle_time_extension": 0,
"schedule": [ {
"index": 0,
"cmd": "S",
"gatemask": "0xff",
"interval": 20000000
} ]
},
"max-sdu": [ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ],
"fp": [ "E","E","E","E","E","E","E","E","E","E","E","E","E","E","E","E" ]
}
} ]
which is invalid json, because the second group of "base_time",
"cycle_time", etc etc is placed in an unlabeled sub-object. If we pipe
it into jq, it complains:
parse error: Objects must consist of key:value pairs at line 53, column 14
Since it represents the administrative schedule, give this unnamed JSON
object the "admin" name. We now print valid JSON which looks like this:
[ {
"kind": "taprio",
"handle": "8001:",
"root": true,
"refcnt": 9,
"options": {
"tc": 8,
"map": [ 0,1,2,3,4,5,6,7,0,0,0,0,0,0,0,0 ],
"queues": [ {
"offset": 0,
"count": 1
},{
"offset": 1,
"count": 1
},{
"offset": 2,
"count": 1
},{
"offset": 3,
"count": 1
},{
"offset": 4,
"count": 1
},{
"offset": 5,
"count": 1
},{
"offset": 6,
"count": 1
},{
"offset": 7,
"count": 1
} ],
"clockid": "TAI",
"base_time": 0,
"cycle_time": 20000000,
"cycle_time_extension": 0,
"schedule": [ {
"index": 0,
"cmd": "S",
"gatemask": "0xff",
"interval": 20000000
} ],
"admin": {
"base_time": 1691160511783528178,
"cycle_time": 20000000,
"cycle_time_extension": 0,
"schedule": [ {
"index": 0,
"cmd": "S",
"gatemask": "0xff",
"interval": 20000000
} ]
},
"max-sdu": [ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ],
"fp": [ "E","E","E","E","E","E","E","E","E","E","E","E","E","E","E","E" ]
}
} ]
Fixes: 602fae856d80 ("taprio: Add support for changing schedules")
Signed-off-by: Vladimir Oltean <vladimir.oltean@....com>
Acked-by: Vinicius Costa Gomes <vinicius.gomes@...el.com>
---
v1->v2: none
tc/q_taprio.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tc/q_taprio.c b/tc/q_taprio.c
index 6250871fb5f2..ef8fc7a05fc2 100644
--- a/tc/q_taprio.c
+++ b/tc/q_taprio.c
@@ -654,7 +654,7 @@ static int taprio_print_opt(struct qdisc_util *qu, FILE *f, struct rtattr *opt)
parse_rtattr_nested(t, TCA_TAPRIO_ATTR_MAX,
tb[TCA_TAPRIO_ATTR_ADMIN_SCHED]);
- open_json_object(NULL);
+ open_json_object("admin");
print_schedule(f, t);
--
2.34.1
Powered by blists - more mailing lists