From: Stephen Hemminger <stephen@networkplumber.org>
To: netdev@vger.kernel.org
Cc: Stephen Hemminger <stephen@networkplumber.org>
Subject: [PATCH iproute2-next 1/4] bridge: implement json pretty print flag
Date: Sun, 18 Feb 2018 19:18:15 -0800 [thread overview]
Message-ID: <20180219031818.25797-2-stephen@networkplumber.org> (raw)
In-Reply-To: <20180219031818.25797-1-stephen@networkplumber.org>
Make bridge work like other iproute2 commands with standard -j and -p
flags.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.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
next prev parent reply other threads:[~2018-02-19 3:18 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-19 3:18 [PATCH iproute2-next 0/4] bridge: json and color output Stephen Hemminger
2018-02-19 3:18 ` Stephen Hemminger [this message]
2018-02-19 22:24 ` [PATCH iproute2-next 1/4] bridge: implement json pretty print flag Serhey Popovych
2018-02-20 19:17 ` Stephen Hemminger
2018-02-19 3:18 ` [PATCH iproute2-next 2/4] bridge: colorize output and use JSON print library Stephen Hemminger
2018-02-19 3:18 ` [PATCH iproute2-next 3/4] bridge: add json support for link command Stephen Hemminger
2018-02-19 3:18 ` [PATCH iproute2-next 4/4] bridge: update man page for new color and json changes Stephen Hemminger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180219031818.25797-2-stephen@networkplumber.org \
--to=stephen@networkplumber.org \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.