diff options
author | Hoang Le <hoang.h.le@dektech.com.au> | 2018-06-12 09:32:28 +0700 |
---|---|---|
committer | David Ahern <dsahern@gmail.com> | 2018-06-13 20:45:38 -0700 |
commit | 1304f50a5be0ed24c92e959a9067faac10b094d7 (patch) | |
tree | 50ec96bc2d885c5f700ea3a63d1533ca09734884 /tipc | |
parent | ee095a417e353917fe1213f39e4e441036afc6ec (diff) |
tipc: JSON support for showing nametable
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
v3:
Update manual page
Acked-by: Jon Maloy <jon.maloy@ericsson.com>
Signed-off-by: Hoang Le <hoang.h.le@dektech.com.au>
Signed-off-by: David Ahern <dsahern@gmail.com>
Diffstat (limited to 'tipc')
-rw-r--r-- | tipc/nametable.c | 31 | ||||
-rw-r--r-- | tipc/tipc.c | 20 |
2 files changed, 41 insertions, 10 deletions
diff --git a/tipc/nametable.c b/tipc/nametable.c index ae73dfa5..eb4bd0bd 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 600d5e2a..f85ddee0 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; |