]> git.proxmox.com Git - mirror_iproute2.git/commitdiff
tc: jsonify actions core
authorJiri Pirko <jiri@mellanox.com>
Sat, 25 Nov 2017 14:48:32 +0000 (15:48 +0100)
committerStephen Hemminger <stephen@networkplumber.org>
Sun, 26 Nov 2017 20:20:51 +0000 (12:20 -0800)
Add json output to actions core.

Signed-off-by: Jiri Pirko <jiri@mellanox.com>
tc/m_action.c
tc/tc_util.c

index e6d914982ef25407e07640d3dba2a43e27731cb1..0940a393dec46ea097d82904c24fff67f85dc4e7 100644 (file)
@@ -301,17 +301,19 @@ static int tc_print_one_action(FILE *f, struct rtattr *arg)
                return err;
 
        if (show_stats && tb[TCA_ACT_STATS]) {
-               fprintf(f, "\tAction statistics:\n");
+               print_string(PRINT_FP, NULL, "\tAction statistics:\n", NULL);
+               open_json_object("stats");
                print_tcstats2_attr(f, tb[TCA_ACT_STATS], "\t", NULL);
-               fprintf(f, "\n");
+               close_json_object();
+               print_string(PRINT_FP, NULL, "\n", NULL);
        }
        if (tb[TCA_ACT_COOKIE]) {
                int strsz = RTA_PAYLOAD(tb[TCA_ACT_COOKIE]);
                char b1[strsz * 2 + 1];
 
-               fprintf(f, "\tcookie %s\n",
-                       hexstring_n2a(RTA_DATA(tb[TCA_ACT_COOKIE]),
-                                     strsz, b1, sizeof(b1)));
+               print_string(PRINT_ANY, "cookie", "\tcookie %s\n",
+                            hexstring_n2a(RTA_DATA(tb[TCA_ACT_COOKIE]),
+                                          strsz, b1, sizeof(b1)));
        }
 
        return 0;
@@ -362,15 +364,21 @@ tc_print_action(FILE *f, const struct rtattr *arg, unsigned short tot_acts)
        if (tab_flush && NULL != tb[0]  && NULL == tb[1])
                return tc_print_action_flush(f, tb[0]);
 
+       open_json_array(PRINT_JSON, "actions");
        for (i = 0; i < tot_acts; i++) {
                if (tb[i]) {
-                       fprintf(f, "\n\taction order %d: ", i);
+                       open_json_object(NULL);
+                       print_uint(PRINT_ANY, "order",
+                                  "\n\taction order %u: ", i);
                        if (tc_print_one_action(f, tb[i]) < 0) {
-                               fprintf(f, "Error printing action\n");
+                               print_string(PRINT_FP, NULL,
+                                            "Error printing action\n", NULL);
                        }
+                       close_json_object();
                }
 
        }
+       close_json_object();
 
        return 0;
 }
index d276987939f51833fefcd078e03bb55f40bbf689..18879056f30beb9db62eb031b824e984e791c778 100644 (file)
@@ -709,12 +709,17 @@ int parse_action_control_slash(int *argc_p, char ***argv_p,
 void print_action_control(FILE *f, const char *prefix,
                          int action, const char *suffix)
 {
-       fprintf(f, "%s%s", prefix, action_n2a(action));
+       print_string(PRINT_FP, NULL, "%s", prefix);
+       open_json_object("control_action");
+       print_string(PRINT_ANY, "type", "%s", action_n2a(action));
        if (TC_ACT_EXT_CMP(action, TC_ACT_GOTO_CHAIN))
-               fprintf(f, " chain %u", action & TC_ACT_EXT_VAL_MASK);
+               print_uint(PRINT_ANY, "chain", " chain %u",
+                          action & TC_ACT_EXT_VAL_MASK);
        if (TC_ACT_EXT_CMP(action, TC_ACT_JUMP))
-               fprintf(f, " %u", action & TC_ACT_EXT_VAL_MASK);
-       fprintf(f, "%s", suffix);
+               print_uint(PRINT_ANY, "jump", " %u",
+                          action & TC_ACT_EXT_VAL_MASK);
+       close_json_object();
+       print_string(PRINT_FP, NULL, "%s", suffix);
 }
 
 int get_linklayer(unsigned int *val, const char *arg)
@@ -762,12 +767,21 @@ void print_tm(FILE *f, const struct tcf_t *tm)
 {
        int hz = get_user_hz();
 
-       if (tm->install != 0)
-               fprintf(f, " installed %u sec", (unsigned int)(tm->install/hz));
-       if (tm->lastuse != 0)
-               fprintf(f, " used %u sec", (unsigned int)(tm->lastuse/hz));
-       if (tm->expires != 0)
-               fprintf(f, " expires %u sec", (unsigned int)(tm->expires/hz));
+       if (tm->install != 0) {
+               print_uint(PRINT_JSON, "installed", NULL, tm->install);
+               print_uint(PRINT_FP, NULL, " installed %u sec",
+                          (unsigned int)(tm->install/hz));
+       }
+       if (tm->lastuse != 0) {
+               print_uint(PRINT_JSON, "last_used", NULL, tm->lastuse);
+               print_uint(PRINT_FP, NULL, " used %u sec",
+                          (unsigned int)(tm->lastuse/hz));
+       }
+       if (tm->expires != 0) {
+               print_uint(PRINT_JSON, "expires", NULL, tm->expires);
+               print_uint(PRINT_FP, NULL, " expires %u sec",
+                          (unsigned int)(tm->expires/hz));
+       }
 }
 
 void print_tcstats2_attr(FILE *fp, struct rtattr *rta, char *prefix, struct rtattr **xstats)