[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20180219031818.25797-2-stephen@networkplumber.org>
Date: Sun, 18 Feb 2018 19:18:15 -0800
From: Stephen Hemminger <stephen@...workplumber.org>
To: netdev@...r.kernel.org
Cc: Stephen Hemminger <stephen@...workplumber.org>
Subject: [PATCH iproute2-next 1/4] bridge: implement json pretty print flag
Make bridge work like other iproute2 commands with standard -j and -p
flags.
Signed-off-by: Stephen Hemminger <stephen@...workplumber.org>
---
bridge/br_common.h | 3 ++-
bridge/bridge.c | 9 ++++++---
bridge/fdb.c | 10 ++++++----
bridge/mdb.c | 12 ++++++++++--
bridge/vlan.c | 11 +++++++----
man/man8/bridge.8 | 6 ++++++
6 files changed, 37 insertions(+), 14 deletions(-)
diff --git a/bridge/br_common.h b/bridge/br_common.h
index f07c7d1c9090..32dc46a2415d 100644
--- a/bridge/br_common.h
+++ b/bridge/br_common.h
@@ -24,7 +24,8 @@ extern int do_link(int argc, char **argv);
extern int preferred_family;
extern int show_stats;
extern int show_details;
+extern int show_pretty;
extern int timestamp;
extern int compress_vlans;
-extern int json_output;
+extern int json;
extern struct rtnl_handle rth;
diff --git a/bridge/bridge.c b/bridge/bridge.c
index 48fe1c8b2ef1..3837c3d79290 100644
--- a/bridge/bridge.c
+++ b/bridge/bridge.c
@@ -22,8 +22,9 @@ int preferred_family = AF_UNSPEC;
int oneline;
int show_stats;
int show_details;
+int show_pretty;
int compress_vlans;
-int json_output;
+int json;
int timestamp;
char *batch_file;
int force;
@@ -39,7 +40,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 +176,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) {
+ ++show_pretty;
} else if (matches(opt, "-batch") == 0) {
argc--;
argv++;
diff --git a/bridge/fdb.c b/bridge/fdb.c
index 8b133f9c1c8d..82dff5167e86 100644
--- a/bridge/fdb.c
+++ b/bridge/fdb.c
@@ -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 (show_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);
diff --git a/bridge/mdb.c b/bridge/mdb.c
index 62dc8a0c58c3..0873502e8a24 100644
--- a/bridge/mdb.c
+++ b/bridge/mdb.c
@@ -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 (show_pretty)
+ jsonw_pretty(jw_global, 1);
+
jsonw_start_object(jw_global);
jsonw_name(jw_global, "mdb");
jsonw_start_array(jw_global);
diff --git a/bridge/vlan.c b/bridge/vlan.c
index f42d7e6ba244..e4eab4c2384f 100644
--- a/bridge/vlan.c
+++ b/bridge/vlan.c
@@ -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 (show_pretty)
+ jsonw_pretty(jw_global, 1);
+
jsonw_start_object(jw_global);
} else {
if (show_vlan_tunnel_info)
diff --git a/man/man8/bridge.8 b/man/man8/bridge.8
index d6baa819020a..490ef58da16c 100644
--- a/man/man8/bridge.8
+++ b/man/man8/bridge.8
@@ -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
--
2.16.1
Powered by blists - more mailing lists