]> git.puffer.fish Git - matthieu/frr.git/commitdiff
ospf6d: Json support added for command "show ipv6 ospf6 zebra [json]"
authorgithub login name <ranjany@vmware.com>
Wed, 30 Sep 2020 12:05:36 +0000 (05:05 -0700)
committerYash Ranjan <ranjany@vmware.com>
Tue, 17 Nov 2020 03:44:06 +0000 (19:44 -0800)
Modify code to add JSON format output in show command
"show ipv6 ospf6 zebra" with proper formating

Signed-off-by: Yash Ranjan <ranjany@vmware.com>
doc/user/ospf6d.rst
ospf6d/ospf6_zebra.c

index dd53d8f8b4b3604e3d1f1504494c15bd158b404f..8e528898a8f35e4da561ea9b3460f1bb05bfdc31 100644 (file)
@@ -195,10 +195,11 @@ Showing OSPF6 information
 
    This command shows internal routing table.
 
-.. index:: show ipv6 ospf6 zebra
-.. clicmd:: show ipv6 ospf6 zebra
+.. index:: show ipv6 ospf6 zebra [json]
+.. clicmd:: show ipv6 ospf6 zebra [json]
 
-   Shows state about what is being redistributed between zebra and OSPF6
+   Shows state about what is being redistributed between zebra and OSPF6.
+   JSON output can be obtained by appending "json" at the end.
 
 OSPF6 Configuration Examples
 ============================
index b6c712176a5b4d8eea39d37c718233c56dee2c82..8d3ee1ad023eea1b226d5ea8c8fd5bca51187552 100644 (file)
@@ -40,6 +40,7 @@
 #include "ospf6_zebra.h"
 #include "ospf6d.h"
 #include "ospf6_area.h"
+#include "lib/json.h"
 
 DEFINE_MTYPE_STATIC(OSPF6D, OSPF6_DISTANCE, "OSPF6 distance")
 
@@ -219,31 +220,64 @@ static int ospf6_zebra_read_route(ZAPI_CALLBACK_ARGS)
        return 0;
 }
 
-DEFUN (show_zebra,
-       show_ospf6_zebra_cmd,
-       "show ipv6 ospf6 zebra",
-       SHOW_STR
-       IPV6_STR
-       OSPF6_STR
-       ZEBRA_STR)
+DEFUN(show_zebra,
+      show_ospf6_zebra_cmd,
+      "show ipv6 ospf6 zebra [json]",
+      SHOW_STR
+      IPV6_STR
+      OSPF6_STR
+      ZEBRA_STR
+      JSON_STR)
 {
        int i;
+       bool uj = use_json(argc, argv);
+       json_object *json;
+       json_object *json_zebra;
+       json_object *json_array;
+
        if (zclient == NULL) {
                vty_out(vty, "Not connected to zebra\n");
                return CMD_SUCCESS;
        }
 
-       vty_out(vty, "Zebra Information\n");
-       vty_out(vty, "  fail: %d\n", zclient->fail);
-       vty_out(vty, "  redistribute default: %d\n",
-               vrf_bitmap_check(zclient->default_information[AFI_IP6],
-                                VRF_DEFAULT));
-       vty_out(vty, "  redistribute:");
-       for (i = 0; i < ZEBRA_ROUTE_MAX; i++) {
-               if (vrf_bitmap_check(zclient->redist[AFI_IP6][i], VRF_DEFAULT))
-                       vty_out(vty, " %s", zebra_route_string(i));
+       if (uj) {
+               json = json_object_new_object();
+               json_zebra = json_object_new_object();
+               json_array = json_object_new_array();
+
+               json_object_int_add(json_zebra, "fail", zclient->fail);
+               json_object_int_add(
+                       json_zebra, "redistributeDefault",
+                       vrf_bitmap_check(zclient->default_information[AFI_IP6],
+                                        VRF_DEFAULT));
+               for (i = 0; i < ZEBRA_ROUTE_MAX; i++) {
+                       if (vrf_bitmap_check(zclient->redist[AFI_IP6][i],
+                                            VRF_DEFAULT))
+                               json_object_array_add(
+                                       json_array,
+                                       json_object_new_string(
+                                               zebra_route_string(i)));
+               }
+               json_object_object_add(json_zebra, "redistribute", json_array);
+               json_object_object_add(json, "zebraInformation", json_zebra);
+
+               vty_out(vty, "%s\n",
+                       json_object_to_json_string_ext(
+                               json, JSON_C_TO_STRING_PRETTY));
+       } else {
+               vty_out(vty, "Zebra Infomation\n");
+               vty_out(vty, "  fail: %d\n", zclient->fail);
+               vty_out(vty, "  redistribute default: %d\n",
+                       vrf_bitmap_check(zclient->default_information[AFI_IP6],
+                                        VRF_DEFAULT));
+               vty_out(vty, "  redistribute:");
+               for (i = 0; i < ZEBRA_ROUTE_MAX; i++) {
+                       if (vrf_bitmap_check(zclient->redist[AFI_IP6][i],
+                                            VRF_DEFAULT))
+                               vty_out(vty, " %s", zebra_route_string(i));
+               }
+               vty_out(vty, "\n");
        }
-       vty_out(vty, "\n");
        return CMD_SUCCESS;
 }