Make JSON output work with prio Qdiscs.  This will also make
other qdiscs which reuse the print_qopt work, like mqprio or
pfifo_fast.

Note that there is a double space between "priomap" and first
prio number.  Keep this original behaviour.

Signed-off-by: Jakub Kicinski <jakub.kicin...@netronome.com>
---
 tc/q_prio.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/tc/q_prio.c b/tc/q_prio.c
index 358cf06cca0a..8ef7cfa260d5 100644
--- a/tc/q_prio.c
+++ b/tc/q_prio.c
@@ -107,13 +107,17 @@ int prio_print_opt(struct qdisc_util *qu, FILE *f, struct 
rtattr *opt)
                                        sizeof(*qopt)))
                return -1;
 
-       fprintf(f, "bands %u priomap ", qopt->bands);
+       print_uint(PRINT_ANY, "bands", "bands %u ", qopt->bands);
+       open_json_array(PRINT_ANY, "priomap ");
        for (i = 0; i <= TC_PRIO_MAX; i++)
-               fprintf(f, " %d", qopt->priomap[i]);
+               print_uint(PRINT_ANY, NULL, " %d", qopt->priomap[i]);
+       close_json_array(PRINT_ANY, "");
 
        if (tb[TCA_PRIO_MQ])
-               fprintf(f, " multiqueue: %s ",
-                       rta_getattr_u8(tb[TCA_PRIO_MQ]) ? "on" : "off");
+               print_string(PRINT_FP, NULL, " multiqueue: %s ",
+                            rta_getattr_u8(tb[TCA_PRIO_MQ]) ? "on" : "off");
+       print_bool(PRINT_JSON, "multiqueue", NULL,
+                  tb[TCA_PRIO_MQ] && rta_getattr_u8(tb[TCA_PRIO_MQ]));
 
        return 0;
 }
-- 
2.15.1

Reply via email to