]> git.proxmox.com Git - mirror_iproute2.git/commitdiff
bridge: implement json pretty print flag
authorStephen Hemminger <sthemmin@microsoft.com>
Tue, 20 Feb 2018 19:24:04 +0000 (11:24 -0800)
committerDavid Ahern <dsahern@gmail.com>
Wed, 21 Feb 2018 16:41:28 +0000 (08:41 -0800)
Make bridge work like other iproute2 commands and accept
same json and pretty flags.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Signed-off-by: David Ahern <dsahern@gmail.com>
bridge/br_common.h
bridge/bridge.c
bridge/fdb.c
bridge/mdb.c
bridge/vlan.c
man/man8/bridge.8

index f07c7d1c9090b032ff5e2ae1d0660e1fcd6381aa..b25f61e50e05b3c827d058542adbaf0ec874d0d0 100644 (file)
@@ -26,5 +26,5 @@ extern int show_stats;
 extern int show_details;
 extern int timestamp;
 extern int compress_vlans;
-extern int json_output;
+extern int json;
 extern struct rtnl_handle rth;
index 48fe1c8b2ef10b90857664530a0ab902f2c208e3..4b112e3b8da93e6d6b55261bb6743f42afabf050 100644 (file)
@@ -23,7 +23,7 @@ int oneline;
 int show_stats;
 int show_details;
 int compress_vlans;
-int json_output;
+int json;
 int timestamp;
 char *batch_file;
 int force;
@@ -39,7 +39,7 @@ static void usage(void)
 "where OBJECT := { link | fdb | mdb | vlan | monitor }\n"
 "      OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] |\n"
 "                   -o[neline] | -t[imestamp] | -n[etns] name |\n"
-"                   -c[ompressvlans] -j{son} }\n");
+"                   -c[ompressvlans] -p[retty] -j{son} }\n");
        exit(-1);
 }
 
@@ -175,7 +175,9 @@ main(int argc, char **argv)
                } else if (matches(opt, "-force") == 0) {
                        ++force;
                } else if (matches(opt, "-json") == 0) {
-                       ++json_output;
+                       ++json;
+               } else if (matches(opt, "-pretty") == 0) {
+                       ++pretty;
                } else if (matches(opt, "-batch") == 0) {
                        argc--;
                        argv++;
index 8b133f9c1c8da8f01030681f1cb52b4ce081c0b2..93b5b2e694e32ba6c1a11389525bbb4e677b245a 100644 (file)
@@ -132,10 +132,8 @@ int print_fdb(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg)
        if (filter_vlan && filter_vlan != vid)
                return 0;
 
-       if (jw_global) {
-               jsonw_pretty(jw_global, 1);
+       if (jw_global)
                jsonw_start_object(jw_global);
-       }
 
        if (n->nlmsg_type == RTM_DELNEIGH) {
                if (jw_global)
@@ -388,14 +386,18 @@ static int fdb_show(int argc, char **argv)
                exit(1);
        }
 
-       if (json_output) {
+       if (json) {
                jw_global = jsonw_new(stdout);
                if (!jw_global) {
                        fprintf(stderr, "Error allocation json object\n");
                        exit(1);
                }
+               if (pretty)
+                       jsonw_pretty(jw_global, 1);
+
                jsonw_start_array(jw_global);
        }
+
        if (rtnl_dump_filter(&rth, print_fdb, stdout) < 0) {
                fprintf(stderr, "Dump terminated\n");
                exit(1);
index 62dc8a0c58c3b6956f535c9cb397ecfe75b112f8..da0282fdc91c264478214ef101693b272b4d246d 100644 (file)
@@ -325,7 +325,7 @@ static int mdb_show(int argc, char **argv)
                return -1;
        }
 
-       if (!json_output) {
+       if (!json) {
                /* Normal output */
                if (rtnl_dump_filter(&rth, print_mdb, stdout) < 0) {
                        fprintf(stderr, "Dump terminated\n");
@@ -333,9 +333,17 @@ static int mdb_show(int argc, char **argv)
                }
                return 0;
        }
+
        /* Json output */
        jw_global = jsonw_new(stdout);
-       jsonw_pretty(jw_global, 1);
+       if (!jw_global) {
+               fprintf(stderr, "Error allocation json object\n");
+               exit(1);
+       }
+
+       if (pretty)
+               jsonw_pretty(jw_global, 1);
+
        jsonw_start_object(jw_global);
        jsonw_name(jw_global, "mdb");
        jsonw_start_array(jw_global);
index f42d7e6ba2441a4970b502fdf3bd92b27d574058..7c8b3ad54857b7113a9bf0179ed1f9dde216260e 100644 (file)
@@ -258,7 +258,6 @@ static int filter_vlan_check(__u16 vid, __u16 flags)
 static void print_vlan_port(FILE *fp, int ifi_index)
 {
        if (jw_global) {
-               jsonw_pretty(jw_global, 1);
                jsonw_name(jw_global,
                           ll_index_to_name(ifi_index));
                jsonw_start_array(jw_global);
@@ -578,17 +577,21 @@ static int vlan_show(int argc, char **argv)
        if (!show_stats) {
                if (rtnl_wilddump_req_filter(&rth, PF_BRIDGE, RTM_GETLINK,
                                             (compress_vlans ?
-                                               RTEXT_FILTER_BRVLAN_COMPRESSED :
-                                               RTEXT_FILTER_BRVLAN)) < 0) {
+                                             RTEXT_FILTER_BRVLAN_COMPRESSED :
+                                             RTEXT_FILTER_BRVLAN)) < 0) {
                        perror("Cannont send dump request");
                        exit(1);
                }
-               if (json_output) {
+
+               if (json) {
                        jw_global = jsonw_new(stdout);
                        if (!jw_global) {
                                fprintf(stderr, "Error allocation json object\n");
                                exit(1);
                        }
+                       if (pretty)
+                               jsonw_pretty(jw_global, 1);
+
                        jsonw_start_object(jw_global);
                } else {
                        if (show_vlan_tunnel_info)
index d6baa819020abee01c63ec931d0ff66f4cb477e2..490ef58da16c49574d54ca1862952dde30055aeb 100644 (file)
@@ -22,6 +22,7 @@ bridge \- show / manipulate bridge addresses and devices
 \fB\-s\fR[\fItatistics\fR] |
 \fB\-n\fR[\fIetns\fR] name |
 \fB\-b\fR[\fIatch\fR] filename |
+\fB\-p\fR[\fIretty\fR] |
 \fB\-j\fR[\fIson\fR] }
 
 .ti -8
@@ -171,6 +172,11 @@ return code will be non zero.
 .BR "\-json"
 Display results in JSON format. Currently available for vlan and fdb.
 
+.TP
+.BR "\-pretty"
+When combined with -j generate a pretty JSON output.
+
+
 .SH BRIDGE - COMMAND SYNTAX
 
 .SS