Acked-by: Jon Maloy <[email protected]>

///jon

> -----Original Message-----
> From: Hoang Le <[email protected]>
> Sent: Wednesday, 06 June, 2018 09:50
> To: [email protected]; Jon Maloy
> <[email protected]>; [email protected]; [email protected]
> Subject: [iproute2-next v2 1/1] 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
> 
> Signed-off-by: Hoang Le <[email protected]>
> ---
>  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


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
tipc-discussion mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tipc-discussion

Reply via email to