]> git.puffer.fish Git - mirror/frr.git/commitdiff
pim6d: Implementing "show ipv6 mroute summary" CLI
authorAbhishek N R <abnr@vmware.com>
Fri, 8 Apr 2022 07:34:02 +0000 (00:34 -0700)
committerAbhishek N R <abnr@vmware.com>
Thu, 28 Apr 2022 09:14:49 +0000 (02:14 -0700)
Adding new show CLI to display ipv6 mroute summary information.

Signed-off-by: Abhishek N R <abnr@vmware.com>
pimd/pim6_cmd.c
pimd/pim_cmd.c
pimd/pim_cmd_common.c
pimd/pim_cmd_common.h

index b0be4390bff2064e67547661171d427da8c7f073..33bf5dd1b7ce49a39294caa1af8b615c9a96c567 100644 (file)
@@ -1840,6 +1840,79 @@ DEFPY (show_ipv6_mroute_count_vrf_all,
        return CMD_SUCCESS;
 }
 
+DEFPY (show_ipv6_mroute_summary,
+       show_ipv6_mroute_summary_cmd,
+       "show ipv6 mroute [vrf NAME] summary [json$json]",
+       SHOW_STR
+       IPV6_STR
+       MROUTE_STR
+       VRF_CMD_HELP_STR
+       "Summary of all mroutes\n"
+       JSON_STR)
+{
+       struct pim_instance *pim;
+       struct vrf *v;
+       json_object *json_parent = NULL;
+
+       v = vrf_lookup_by_name(vrf ? vrf : VRF_DEFAULT_NAME);
+
+       if (!v)
+               return CMD_WARNING;
+
+       pim = pim_get_pim_instance(v->vrf_id);
+
+       if (!pim) {
+               vty_out(vty, "%% Unable to find pim instance\n");
+               return CMD_WARNING;
+       }
+
+       if (json)
+               json_parent = json_object_new_object();
+
+       show_mroute_summary(pim, vty, json_parent);
+
+       if (json)
+               vty_json(vty, json_parent);
+
+       return CMD_SUCCESS;
+}
+
+DEFPY (show_ipv6_mroute_summary_vrf_all,
+       show_ipv6_mroute_summary_vrf_all_cmd,
+       "show ipv6 mroute vrf all summary [json$json]",
+       SHOW_STR
+       IPV6_STR
+       MROUTE_STR
+       VRF_CMD_HELP_STR
+       "Summary of all mroutes\n"
+       JSON_STR)
+{
+       struct vrf *vrf;
+       json_object *json_parent = NULL;
+       json_object *json_vrf = NULL;
+
+       if (json)
+               json_parent = json_object_new_object();
+
+       RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) {
+               if (!json)
+                       vty_out(vty, "VRF: %s\n", vrf->name);
+               else
+                       json_vrf = json_object_new_object();
+
+               show_mroute_summary(vrf->info, vty, json_vrf);
+
+               if (json)
+                       json_object_object_add(json_parent, vrf->name,
+                                              json_vrf);
+       }
+
+       if (json)
+               vty_json(vty, json_parent);
+
+       return CMD_SUCCESS;
+}
+
 void pim_cmd_init(void)
 {
        if_cmd_init(pim_interface_config_write);
@@ -1944,4 +2017,6 @@ void pim_cmd_init(void)
        install_element(VIEW_NODE, &show_ipv6_mroute_vrf_all_cmd);
        install_element(VIEW_NODE, &show_ipv6_mroute_count_cmd);
        install_element(VIEW_NODE, &show_ipv6_mroute_count_vrf_all_cmd);
+       install_element(VIEW_NODE, &show_ipv6_mroute_summary_cmd);
+       install_element(VIEW_NODE, &show_ipv6_mroute_summary_vrf_all_cmd);
 }
index db6945a624c4758e09ed7ec381b159a16676d6ba..d3a0d90e310c0b859615d7f588142b105343be3c 100644 (file)
@@ -3963,9 +3963,9 @@ DEFPY (show_ip_mroute_count_vrf_all,
        return CMD_SUCCESS;
 }
 
-DEFUN (show_ip_mroute_summary,
+DEFPY (show_ip_mroute_summary,
        show_ip_mroute_summary_cmd,
-       "show ip mroute [vrf NAME] summary [json]",
+       "show ip mroute [vrf NAME] summary [json$json]",
        SHOW_STR
        IP_STR
        MROUTE_STR
@@ -3973,27 +3973,36 @@ DEFUN (show_ip_mroute_summary,
        "Summary of all mroutes\n"
        JSON_STR)
 {
-       int idx = 2;
-       bool uj = use_json(argc, argv);
-       struct vrf *vrf = pim_cmd_lookup_vrf(vty, argv, argc, &idx);
-       json_object *json = NULL;
+       struct pim_instance *pim;
+       struct vrf *v;
+       json_object *json_parent = NULL;
 
-       if (uj)
-               json = json_object_new_object();
+       v = vrf_lookup_by_name(vrf ? vrf : VRF_DEFAULT_NAME);
 
-       if (!vrf)
+       if (!v)
                return CMD_WARNING;
 
-       show_mroute_summary(vrf->info, vty, json);
+       pim = pim_get_pim_instance(v->vrf_id);
+
+       if (!pim) {
+               vty_out(vty, "%% Unable to find pim instance\n");
+               return CMD_WARNING;
+       }
+
+       if (json)
+               json_parent = json_object_new_object();
+
+       show_mroute_summary(pim, vty, json_parent);
+
+       if (json)
+               vty_json(vty, json_parent);
 
-       if (uj)
-               vty_json(vty, json);
        return CMD_SUCCESS;
 }
 
-DEFUN (show_ip_mroute_summary_vrf_all,
+DEFPY (show_ip_mroute_summary_vrf_all,
        show_ip_mroute_summary_vrf_all_cmd,
-       "show ip mroute vrf all summary [json]",
+       "show ip mroute vrf all summary [json$json]",
        SHOW_STR
        IP_STR
        MROUTE_STR
@@ -4002,27 +4011,27 @@ DEFUN (show_ip_mroute_summary_vrf_all,
        JSON_STR)
 {
        struct vrf *vrf;
-       bool uj = use_json(argc, argv);
-       json_object *json = NULL;
+       json_object *json_parent = NULL;
        json_object *json_vrf = NULL;
 
-       if (uj)
-               json = json_object_new_object();
+       if (json)
+               json_parent = json_object_new_object();
 
        RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) {
-               if (uj)
-                       json_vrf = json_object_new_object();
-               else
+               if (!json)
                        vty_out(vty, "VRF: %s\n", vrf->name);
+               else
+                       json_vrf = json_object_new_object();
 
                show_mroute_summary(vrf->info, vty, json_vrf);
 
-               if (uj)
-                       json_object_object_add(json, vrf->name, json_vrf);
+               if (json)
+                       json_object_object_add(json_parent, vrf->name,
+                                              json_vrf);
        }
 
-       if (uj)
-               vty_json(vty, json);
+       if (json)
+               vty_json(vty, json_parent);
 
        return CMD_SUCCESS;
 }
index 197b9b8d5e9faf6af855b7ad16d85bf15922032b..d69b94ab1270ee185013e7fbe9b86a9b8a94ddf8 100644 (file)
@@ -3459,9 +3459,8 @@ void show_mroute_count(struct pim_instance *pim, struct vty *vty,
                show_mroute_count_per_channel_oil(&sr->c_oil, json, vty);
 }
 
-#if PIM_IPV == 4
 void show_mroute_summary(struct pim_instance *pim, struct vty *vty,
-                               json_object *json)
+                        json_object *json)
 {
        struct listnode *node;
        struct channel_oil *c_oil;
@@ -3478,12 +3477,12 @@ void show_mroute_summary(struct pim_instance *pim, struct vty *vty,
 
        frr_each (rb_pim_oil, &pim->channel_oil_head, c_oil) {
                if (!c_oil->installed) {
-                       if (c_oil->oil.mfcc_origin.s_addr == INADDR_ANY)
+                       if (pim_addr_is_any(*oil_origin(c_oil)))
                                starg_sw_mroute_cnt++;
                        else
                                sg_sw_mroute_cnt++;
                } else {
-                       if (c_oil->oil.mfcc_origin.s_addr == INADDR_ANY)
+                       if (pim_addr_is_any(*oil_origin(c_oil)))
                                starg_hw_mroute_cnt++;
                        else
                                sg_hw_mroute_cnt++;
@@ -3492,12 +3491,12 @@ void show_mroute_summary(struct pim_instance *pim, struct vty *vty,
 
        for (ALL_LIST_ELEMENTS_RO(pim->static_routes, node, s_route)) {
                if (!s_route->c_oil.installed) {
-                       if (s_route->c_oil.oil.mfcc_origin.s_addr == INADDR_ANY)
+                       if (pim_addr_is_any(*oil_origin(&s_route->c_oil)))
                                starg_sw_mroute_cnt++;
                        else
                                sg_sw_mroute_cnt++;
                } else {
-                       if (s_route->c_oil.oil.mfcc_origin.s_addr == INADDR_ANY)
+                       if (pim_addr_is_any(*oil_origin(&s_route->c_oil)))
                                starg_hw_mroute_cnt++;
                        else
                                sg_hw_mroute_cnt++;
@@ -3512,8 +3511,8 @@ void show_mroute_summary(struct pim_instance *pim, struct vty *vty,
                vty_out(vty, "------\n");
                vty_out(vty, "%-20s %u/%u\n", "Total",
                        (starg_hw_mroute_cnt + sg_hw_mroute_cnt),
-                       (starg_sw_mroute_cnt + starg_hw_mroute_cnt
-                        sg_sw_mroute_cnt + sg_hw_mroute_cnt));
+                       (starg_sw_mroute_cnt + starg_hw_mroute_cnt +
+                        sg_sw_mroute_cnt + sg_hw_mroute_cnt));
        } else {
                /* (*,G) route details */
                json_starg = json_object_new_object();
@@ -3535,9 +3534,8 @@ void show_mroute_summary(struct pim_instance *pim, struct vty *vty,
                json_object_int_add(json, "totalNumOfInstalledMroutes",
                                    starg_hw_mroute_cnt + sg_hw_mroute_cnt);
                json_object_int_add(json, "totalNumOfMroutes",
-                                   starg_sw_mroute_cnt + starg_hw_mroute_cnt
-                                   + sg_sw_mroute_cnt
-                                   + sg_hw_mroute_cnt);
+                                   starg_sw_mroute_cnt + starg_hw_mroute_cnt +
+                                           sg_sw_mroute_cnt +
+                                           sg_hw_mroute_cnt);
        }
 }
-#endif
index 0d2c0c1efb36fa79c9ad779ffb04cde45ece7e89..a9e35bfd9a7dd83d56472c3005b870bee3a8e0d2 100644 (file)
@@ -113,7 +113,7 @@ void show_mroute(struct pim_instance *pim, struct vty *vty, pim_sgaddr *sg,
 void show_mroute_count(struct pim_instance *pim, struct vty *vty,
                       json_object *json);
 void show_mroute_summary(struct pim_instance *pim, struct vty *vty,
-                               json_object *json);
+                        json_object *json);
 
 /*
  * Special Macro to allow us to get the correct pim_instance;