]> git.puffer.fish Git - mirror/frr.git/commitdiff
pim6d: Moving resuable code to common api for "show pim rp-info" command
authorAbhishek N R <abnr@vmware.com>
Thu, 9 Jun 2022 07:49:38 +0000 (00:49 -0700)
committerAbhishek N R <abnr@vmware.com>
Thu, 9 Jun 2022 07:49:38 +0000 (00:49 -0700)
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 f86f3375d5b750e8090591615756a967b73b8d50..1b83d38b91bbb99f1f4a1b7c2400999c32470e24 100644 (file)
@@ -790,40 +790,8 @@ DEFPY (show_ipv6_pim_rp,
        "Multicast Group range\n"
        JSON_STR)
 {
-       struct pim_instance *pim;
-       struct vrf *v;
-       json_object *json_parent = NULL;
-       struct prefix *range = 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 (group_str) {
-               range = prefix_new();
-               prefix_copy(range, group);
-               apply_mask(range);
-       }
-
-       if (json)
-               json_parent = json_object_new_object();
-
-       pim_rp_show_information(pim, range, vty, json_parent);
-
-       if (json)
-               vty_json(vty, json_parent);
-
-       prefix_free(&range);
-
-       return CMD_SUCCESS;
+       return pim_show_rp_helper(vrf, vty, group_str, (struct prefix *)group,
+                                 !!json);
 }
 
 DEFPY (show_ipv6_pim_rp_vrf_all,
@@ -837,36 +805,8 @@ DEFPY (show_ipv6_pim_rp_vrf_all,
        "Multicast Group range\n"
        JSON_STR)
 {
-       struct vrf *vrf;
-       json_object *json_parent = NULL;
-       json_object *json_vrf = NULL;
-       struct prefix *range = NULL;
-
-       if (group_str) {
-               range = prefix_new();
-               prefix_copy(range, group);
-               apply_mask(range);
-       }
-
-       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();
-               pim_rp_show_information(vrf->info, range, vty, json_vrf);
-               if (json)
-                       json_object_object_add(json_parent, vrf->name,
-                                              json_vrf);
-       }
-       if (json)
-               vty_json(vty, json_parent);
-
-       prefix_free(&range);
-
-       return CMD_SUCCESS;
+       return pim_show_rp_vrf_all_helper(vty, group_str,
+                                         (struct prefix *)group, !!json);
 }
 
 DEFPY (show_ipv6_pim_rpf,
index 53ea54e906e0f2ffbc024b969b9e5de2ec03ad14..b67bc23523b20bd0a3624ab855ee8b38d99c9335 100644 (file)
@@ -3254,40 +3254,8 @@ DEFPY (show_ip_pim_rp,
        "Multicast Group range\n"
        JSON_STR)
 {
-       struct pim_instance *pim;
-       struct vrf *v;
-       json_object *json_parent = NULL;
-       struct prefix *range = 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 (group_str) {
-               range = prefix_new();
-               prefix_copy(range, group);
-               apply_mask(range);
-       }
-
-       if (json)
-               json_parent = json_object_new_object();
-
-       pim_rp_show_information(pim, range, vty, json_parent);
-
-       if (json)
-               vty_json(vty, json_parent);
-
-       prefix_free(&range);
-
-       return CMD_SUCCESS;
+       return pim_show_rp_helper(vrf, vty, group_str, (struct prefix *)group,
+                                 !!json);
 }
 
 DEFPY (show_ip_pim_rp_vrf_all,
@@ -3301,36 +3269,8 @@ DEFPY (show_ip_pim_rp_vrf_all,
        "Multicast Group range\n"
        JSON_STR)
 {
-       struct vrf *vrf;
-       json_object *json_parent = NULL;
-       json_object *json_vrf = NULL;
-       struct prefix *range = NULL;
-
-       if (group_str) {
-               range = prefix_new();
-               prefix_copy(range, group);
-               apply_mask(range);
-       }
-
-       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();
-               pim_rp_show_information(vrf->info, range, vty, json_vrf);
-               if (json)
-                       json_object_object_add(json_parent, vrf->name,
-                                              json_vrf);
-       }
-       if (json)
-               vty_json(vty, json_parent);
-
-       prefix_free(&range);
-
-       return CMD_SUCCESS;
+       return pim_show_rp_vrf_all_helper(vty, group_str,
+                                         (struct prefix *)group, !!json);
 }
 
 DEFPY (show_ip_pim_rpf,
index 28077621759b761c0fcf18d55e16cfe77d035b2e..3bc7381e0d03f22c25120c3da3ab8b0479f7b3f0 100644 (file)
@@ -3791,3 +3791,77 @@ int pim_show_rpf_vrf_all_helper(struct vty *vty, bool json)
 
        return CMD_SUCCESS;
 }
+
+int pim_show_rp_helper(const char *vrf, struct vty *vty, const char *group_str,
+                      const struct prefix *group, bool json)
+{
+       struct pim_instance *pim;
+       struct vrf *v;
+       json_object *json_parent = NULL;
+       struct prefix *range = 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 (group_str) {
+               range = prefix_new();
+               prefix_copy(range, group);
+               apply_mask(range);
+       }
+
+       if (json)
+               json_parent = json_object_new_object();
+
+       pim_rp_show_information(pim, range, vty, json_parent);
+
+       if (json)
+               vty_json(vty, json_parent);
+
+       prefix_free(&range);
+
+       return CMD_SUCCESS;
+}
+
+int pim_show_rp_vrf_all_helper(struct vty *vty, const char *group_str,
+                              const struct prefix *group, bool json)
+{
+       struct vrf *vrf;
+       json_object *json_parent = NULL;
+       json_object *json_vrf = NULL;
+       struct prefix *range = NULL;
+
+       if (group_str) {
+               range = prefix_new();
+               prefix_copy(range, group);
+               apply_mask(range);
+       }
+
+       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();
+               pim_rp_show_information(vrf->info, range, vty, json_vrf);
+               if (json)
+                       json_object_object_add(json_parent, vrf->name,
+                                              json_vrf);
+       }
+       if (json)
+               vty_json(vty, json_parent);
+
+       prefix_free(&range);
+
+       return CMD_SUCCESS;
+}
index ce81473eb45dbc8f70a46a968463973857cc4fdd..baea749778ebc1cc71a8e0b2d4b4b43d6cd6adb7 100644 (file)
@@ -133,6 +133,10 @@ int pim_no_debug_pim_packets_cmd(const char *hello, const char *joins,
                                 const char *registers, struct vty *vty);
 int pim_show_rpf_helper(const char *vrf, struct vty *vty, bool json);
 int pim_show_rpf_vrf_all_helper(struct vty *vty, bool json);
+int pim_show_rp_helper(const char *vrf, struct vty *vty, const char *group_str,
+                      const struct prefix *group, bool json);
+int pim_show_rp_vrf_all_helper(struct vty *vty, const char *group_str,
+                              const struct prefix *group, bool json);
 
 /*
  * Special Macro to allow us to get the correct pim_instance;