]> git.proxmox.com Git - mirror_iproute2.git/commitdiff
rdma: Add json and pretty outputs
authorLeon Romanovsky <leonro@mellanox.com>
Sun, 20 Aug 2017 09:58:25 +0000 (12:58 +0300)
committerStephen Hemminger <stephen@networkplumber.org>
Tue, 22 Aug 2017 00:07:44 +0000 (17:07 -0700)
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
rdma/rdma.c
rdma/rdma.h

index 74c09e8b513bf24f621aecf94c5914214fe496a5..f9f4f2a2ad76ddb46113f5788b55bcaa9ae26ad0 100644 (file)
@@ -16,7 +16,7 @@ static void help(char *name)
 {
        pr_out("Usage: %s [ OPTIONS ] OBJECT { COMMAND | help }\n"
               "where  OBJECT := { dev | link | help }\n"
-              "       OPTIONS := { -V[ersion] | -d[etails]}\n", name);
+              "       OPTIONS := { -V[ersion] | -d[etails] | -j[son] | -p[retty]}\n", name);
 }
 
 static int cmd_help(struct rd *rd)
@@ -47,6 +47,16 @@ static int rd_init(struct rd *rd, int argc, char **argv, char *filename)
        rd->argc = argc;
        rd->argv = argv;
        INIT_LIST_HEAD(&rd->dev_map_list);
+
+       if (rd->json_output) {
+               rd->jw = jsonw_new(stdout);
+               if (!rd->jw) {
+                       pr_err("Failed to create JSON writer\n");
+                       return -ENOMEM;
+               }
+               jsonw_pretty(rd->jw, rd->pretty_output);
+       }
+
        rd->buff = malloc(MNL_SOCKET_BUFFER_SIZE);
        if (!rd->buff)
                return -ENOMEM;
@@ -62,6 +72,8 @@ static int rd_init(struct rd *rd, int argc, char **argv, char *filename)
 
 static void rd_free(struct rd *rd)
 {
+       if (rd->json_output)
+               jsonw_destroy(&rd->jw);
        free(rd->buff);
        rd_free_devmap(rd);
 }
@@ -71,10 +83,14 @@ int main(int argc, char **argv)
        static const struct option long_options[] = {
                { "version",            no_argument,            NULL, 'V' },
                { "help",               no_argument,            NULL, 'h' },
+               { "json",               no_argument,            NULL, 'j' },
+               { "pretty",             no_argument,            NULL, 'p' },
                { "details",            no_argument,            NULL, 'd' },
                { NULL, 0, NULL, 0 }
        };
+       bool pretty_output = false;
        bool show_details = false;
+       bool json_output = false;
        char *filename;
        struct rd rd;
        int opt;
@@ -82,16 +98,22 @@ int main(int argc, char **argv)
 
        filename = basename(argv[0]);
 
-       while ((opt = getopt_long(argc, argv, "Vhd",
+       while ((opt = getopt_long(argc, argv, "Vhdpj",
                                  long_options, NULL)) >= 0) {
                switch (opt) {
                case 'V':
                        printf("%s utility, iproute2-ss%s\n",
                               filename, SNAPSHOT);
                        return EXIT_SUCCESS;
+               case 'p':
+                       pretty_output = true;
+                       break;
                case 'd':
                        show_details = true;
                        break;
+               case 'j':
+                       json_output = true;
+                       break;
                case 'h':
                        help(filename);
                        return EXIT_SUCCESS;
@@ -105,11 +127,14 @@ int main(int argc, char **argv)
        argc -= optind;
        argv += optind;
 
+       rd.show_details = show_details;
+       rd.json_output = json_output;
+       rd.pretty_output = pretty_output;
+
        err = rd_init(&rd, argc, argv, filename);
        if (err)
                goto out;
 
-       rd.show_details = show_details;
        err = rd_cmd(&rd);
 out:
        /* Always cleanup */
index 36b047d3defc1ff2c794fce2c6edb6f1807e7f9c..4c564fef207a341faf565fb9c16237d2abb0ff8f 100644 (file)
@@ -21,6 +21,7 @@
 
 #include "list.h"
 #include "utils.h"
+#include "json_writer.h"
 
 #define pr_err(args...) fprintf(stderr, ##args)
 #define pr_out(args...) fprintf(stdout, ##args)
@@ -46,6 +47,9 @@ struct rd {
        struct mnl_socket *nl;
        struct nlmsghdr *nlh;
        char *buff;
+       json_writer_t *jw;
+       bool json_output;
+       bool pretty_output;
 };
 
 struct rd_cmd {