]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
iplink: support JSON in MPLS output
authorStephen Hemminger <stephen@networkplumber.org>
Sat, 10 Dec 2022 03:45:47 +0000 (19:45 -0800)
committerStephen Hemminger <stephen@networkplumber.org>
Sat, 10 Dec 2022 03:45:47 +0000 (19:45 -0800)
The MPLS statistics did not support oneline or JSON
in current code.

Fixes: 837552b445f5 ("iplink: add support for afstats subcommand")
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
ip/iplink.c

index adb9524c3b936893d58769e3e2cd6e88bbfc6c1e..b8a5284febfb79e9080e559e4f86a2afba4f16a4 100644 (file)
@@ -1570,7 +1570,7 @@ void print_mpls_link_stats(FILE *fp, const struct mpls_link_stats *stats,
                print_num(fp, cols[2], stats->rx_errors);
                print_num(fp, cols[3], stats->rx_dropped);
                print_num(fp, cols[4], stats->rx_noroute);
-               fprintf(fp, "\n");
+               print_nl();
 
                fprintf(fp, "%sTX: %*s %*s %*s %*s%s", indent,
                        cols[0] - 4, "bytes", cols[1], "packets",
@@ -1594,9 +1594,11 @@ static void print_mpls_stats(FILE *fp, struct rtattr *attr)
                return;
 
        stats = RTA_DATA(mrtb[MPLS_STATS_LINK]);
-       fprintf(fp, "    mpls:\n");
+       print_string(PRINT_FP, NULL, "    mpls:", NULL);
+       print_nl();
        print_mpls_link_stats(fp, stats, "        ");
-       fprintf(fp, "\n");
+       print_string(PRINT_FP, NULL, "%s", "\n");
+       fflush(fp);
 }
 
 static void print_af_stats_attr(FILE *fp, int ifindex, struct rtattr *attr)
@@ -1612,8 +1614,12 @@ static void print_af_stats_attr(FILE *fp, int ifindex, struct rtattr *attr)
                        continue;
 
                if (!if_printed) {
-                       fprintf(fp, "%u: %s\n", ifindex,
-                               ll_index_to_name(ifindex));
+                       print_uint(PRINT_ANY, "ifindex",
+                                  "%u:", ifindex);
+                       print_color_string(PRINT_ANY, COLOR_IFNAME, 
+                                          "ifname", "%s",
+                                          ll_index_to_name(ifindex));
+                       print_nl();
                        if_printed = true;
                }
 
@@ -1696,6 +1702,8 @@ static int iplink_afstats(int argc, char **argv)
                }
        }
 
+       new_json_obj(json);
+
        if (rtnl_statsdump_req_filter(&rth, AF_UNSPEC, filt_mask,
                                      NULL, NULL) < 0) {
                perror("Cannont send dump request");
@@ -1707,6 +1715,7 @@ static int iplink_afstats(int argc, char **argv)
                return 1;
        }
 
+       delete_json_obj();
        return 0;
 }