]> git.proxmox.com Git - mirror_frr.git/commitdiff
pbrd: json added to `show pbr interface [json]`
authorWesley Coakley <wcoakley@cumulusnetworks.com>
Mon, 18 May 2020 14:05:08 +0000 (10:05 -0400)
committerWesley Coakley <wcoakley@cumulusnetworks.com>
Wed, 27 May 2020 14:28:02 +0000 (10:28 -0400)
Signed-off-by: Wesley Coakley <wcoakley@cumulusnetworks.com>
pbrd/pbr_vty.c

index a52c2d1e30b529ad1d1891d41d92ffeb9b572572..0d89010359de403fd83376c83529833045c80f75 100644 (file)
@@ -27,6 +27,7 @@
 #include "nexthop_group.h"
 #include "nexthop_group_private.h"
 #include "log.h"
+#include "json.h"
 #include "debug.h"
 #include "pbr.h"
 
@@ -638,19 +639,28 @@ DEFPY(show_pbr_nexthop_group,
 
 DEFPY (show_pbr_interface,
        show_pbr_interface_cmd,
-       "show pbr interface [NAME$name]",
+       "show pbr interface [NAME$name] [json$json]",
        SHOW_STR
        PBR_STR
        "PBR Interface\n"
-       "PBR Interface Name\n")
+       "PBR Interface Name\n"
+       JSON_STR)
 {
        struct interface *ifp;
        struct vrf *vrf;
        struct pbr_interface *pbr_ifp;
+       json_object *j = NULL;
+
+       if (json)
+               j = json_object_new_object();
 
        RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name) {
                FOR_ALL_INTERFACES(vrf, ifp) {
                        struct pbr_map *pbrm;
+                       json_object *this_iface = NULL;
+
+                       if (j)
+                               this_iface = json_object_new_object();
 
                        if (!ifp->info)
                                continue;
@@ -664,6 +674,22 @@ DEFPY (show_pbr_interface,
                                continue;
 
                        pbrm = pbrm_find(pbr_ifp->mapname);
+
+                       if (this_iface) {
+                               json_object_string_add(this_iface, "name",
+                                                      ifp->name);
+                               json_object_int_add(this_iface, "index",
+                                                   ifp->ifindex);
+                               json_object_string_add(this_iface, "policy",
+                                                      pbr_ifp->mapname);
+                               json_object_boolean_add(this_iface, "valid",
+                                                       pbrm);
+
+                               json_object_object_add(j, ifp->name,
+                                                      this_iface);
+                               continue;
+                       }
+
                        vty_out(vty, "  %s(%d) with pbr-policy %s", ifp->name,
                                ifp->ifindex, pbr_ifp->mapname);
                        if (!pbrm)
@@ -672,6 +698,13 @@ DEFPY (show_pbr_interface,
                }
        }
 
+       if (j) {
+               vty_out(vty, "%s\n",
+                       json_object_to_json_string_ext(
+                               j, JSON_C_TO_STRING_PRETTY));
+               json_object_free(j);
+       }
+
        return CMD_SUCCESS;
 }