All of lore.kernel.org
 help / color / mirror / Atom feed
* [iproute2-next v2 1/2] tipc: JSON support for showing nametable
@ 2018-06-11  2:16 Hoang Le
  2018-06-11  2:17 ` [iproute2-next v2 2/2] tipc: JSON support for tipc link printouts Hoang Le
  2018-06-11 15:05 ` [iproute2-next v2 1/2] tipc: JSON support for showing nametable Stephen Hemminger
  0 siblings, 2 replies; 3+ messages in thread
From: Hoang Le @ 2018-06-11  2:16 UTC (permalink / raw)
  To: netdev, tipc-discussion

Add json output support for nametable show

Example output:
$tipc -j -p nametable show

[ {
        "type": 0,
        "lower": 16781313,
        "upper": 16781313,
        "scope": "zone",
        "port": 0,
        "node": ""
    },{
        "type": 0,
        "lower": 16781416,
        "upper": 16781416,
        "scope": "cluster",
        "port": 0,
        "node": ""
    } ]

v2:
    Replace variable 'json_flag' by 'json' declared in include/utils.h
    Add new parameter '-pretty' to support pretty output

Acked-by: Jon Maloy <jon.maloy@ericsson.com>
Signed-off-by: Hoang Le <hoang.h.le@dektech.com.au>
---
 tipc/nametable.c | 31 ++++++++++++++++++++++---------
 tipc/tipc.c      | 20 +++++++++++++++++++-
 2 files changed, 41 insertions(+), 10 deletions(-)

diff --git a/tipc/nametable.c b/tipc/nametable.c
index ae73dfa5f8b9..eb4bd0bda835 100644
--- a/tipc/nametable.c
+++ b/tipc/nametable.c
@@ -21,6 +21,7 @@
 #include "msg.h"
 #include "nametable.h"
 #include "misc.h"
+#include "utils.h"
 
 #define PORTID_STR_LEN 45 /* Four u32 and five delimiter chars */
 
@@ -46,7 +47,7 @@ static int nametable_show_cb(const struct nlmsghdr *nlh, void *data)
 	if (!publ[TIPC_NLA_NAME_TABLE_PUBL])
 		return MNL_CB_ERROR;
 
-	if (!*iteration)
+	if (!*iteration && !is_json_context())
 		printf("%-10s %-10s %-10s %-8s %-10s %-33s\n",
 		       "Type", "Lower", "Upper", "Scope", "Port",
 		       "Node");
@@ -54,13 +55,20 @@ static int nametable_show_cb(const struct nlmsghdr *nlh, void *data)
 
 	hash2nodestr(mnl_attr_get_u32(publ[TIPC_NLA_PUBL_NODE]), str);
 
-	printf("%-10u %-10u %-10u %-8s %-10u %s\n",
-	       mnl_attr_get_u32(publ[TIPC_NLA_PUBL_TYPE]),
-	       mnl_attr_get_u32(publ[TIPC_NLA_PUBL_LOWER]),
-	       mnl_attr_get_u32(publ[TIPC_NLA_PUBL_UPPER]),
-	       scope[mnl_attr_get_u32(publ[TIPC_NLA_PUBL_SCOPE])],
-	       mnl_attr_get_u32(publ[TIPC_NLA_PUBL_REF]),
-	       str);
+	open_json_object(NULL);
+	print_uint(PRINT_ANY, "type", "%-10u",
+			   mnl_attr_get_u32(publ[TIPC_NLA_PUBL_TYPE]));
+	print_uint(PRINT_ANY, "lower", "%-10u",
+			   mnl_attr_get_u32(publ[TIPC_NLA_PUBL_LOWER]));
+	print_uint(PRINT_ANY, "upper", "%-10u",
+			   mnl_attr_get_u32(publ[TIPC_NLA_PUBL_UPPER]));
+	print_string(PRINT_ANY, "scope", "%-8s",
+			     scope[mnl_attr_get_u32(publ[TIPC_NLA_PUBL_SCOPE])]);
+	print_uint(PRINT_ANY, "port", "%-10u",
+			   mnl_attr_get_u32(publ[TIPC_NLA_PUBL_REF]));
+	print_string(PRINT_ANY, "node", "%s", str);
+	print_string(PRINT_FP, NULL, "\n", "");
+	close_json_object();
 
 	return MNL_CB_OK;
 }
@@ -70,6 +78,7 @@ static int cmd_nametable_show(struct nlmsghdr *nlh, const struct cmd *cmd,
 {
 	int iteration = 0;
 	char buf[MNL_SOCKET_BUFFER_SIZE];
+	int rc = 0;
 
 	if (help_flag) {
 		fprintf(stderr, "Usage: %s nametable show\n", cmdl->argv[0]);
@@ -81,7 +90,11 @@ static int cmd_nametable_show(struct nlmsghdr *nlh, const struct cmd *cmd,
 		return -1;
 	}
 
-	return msg_dumpit(nlh, nametable_show_cb, &iteration);
+	new_json_obj(json);
+	rc = msg_dumpit(nlh, nametable_show_cb, &iteration);
+	delete_json_obj();
+
+	return rc;
 }
 
 void cmd_nametable_help(struct cmdl *cmdl)
diff --git a/tipc/tipc.c b/tipc/tipc.c
index 600d5e2a160f..f85ddee0e278 100644
--- a/tipc/tipc.c
+++ b/tipc/tipc.c
@@ -24,6 +24,8 @@
 #include "cmdl.h"
 
 int help_flag;
+int json;
+int pretty;
 
 static void about(struct cmdl *cmdl)
 {
@@ -33,6 +35,8 @@ static void about(struct cmdl *cmdl)
 		"\n"
 		"Options:\n"
 		" -h, --help \t\tPrint help for last given command\n"
+		" -j, --json \t\tJson format printouts\n"
+		" -p, --pretty \t\tpretty print\n"
 		"\n"
 		"Commands:\n"
 		" bearer                - Show or modify bearers\n"
@@ -53,6 +57,8 @@ int main(int argc, char *argv[])
 	const struct cmd cmd = {"tipc", NULL, about};
 	struct option long_options[] = {
 		{"help", no_argument, 0, 'h'},
+		{"json", no_argument, 0, 'j'},
+		{"pretty", no_argument, 0, 'p'},
 		{0, 0, 0, 0}
 	};
 	const struct cmd cmds[] = {
@@ -69,7 +75,7 @@ int main(int argc, char *argv[])
 	do {
 		int option_index = 0;
 
-		i = getopt_long(argc, argv, "h", long_options, &option_index);
+		i = getopt_long(argc, argv, "hjp", long_options, &option_index);
 
 		switch (i) {
 		case 'h':
@@ -79,6 +85,18 @@ int main(int argc, char *argv[])
 			 */
 			help_flag = 1;
 			break;
+		case 'j':
+			/*
+			 * Enable json format printouts
+			 */
+			json = 1;
+			break;
+		case 'p':
+			/*
+			 * Enable json pretty output
+			 */
+			pretty = 1;
+			break;
 		case -1:
 			/* End of options */
 			break;
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2018-06-11 15:05 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-06-11  2:16 [iproute2-next v2 1/2] tipc: JSON support for showing nametable Hoang Le
2018-06-11  2:17 ` [iproute2-next v2 2/2] tipc: JSON support for tipc link printouts Hoang Le
2018-06-11 15:05 ` [iproute2-next v2 1/2] tipc: JSON support for showing nametable Stephen Hemminger

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.