]> git.puffer.fish Git - mirror/frr.git/commitdiff
pimd: Add vrf optional parameter in "show ip pim bsr" cmd
authorSarita Patra <saritap@vmware.com>
Tue, 12 Jul 2022 11:16:17 +0000 (04:16 -0700)
committerSarita Patra <saritap@vmware.com>
Thu, 20 Oct 2022 08:07:48 +0000 (01:07 -0700)
Added common API pim_show_bsr_helper to suppport both PIM and
PIMV6.
pim_show_bsr() is moved to pim_cmd_common.c file.

Signed-off-by: Sarita Patra <saritap@vmware.com>
pimd/pim_cmd.c
pimd/pim_cmd_common.c
pimd/pim_cmd_common.h

index c6f2e8dbde093ac5fd13502599a181caf2a350f9..858d467287def3de28059582e1d2109548faa077 100644 (file)
@@ -1439,77 +1439,6 @@ static void igmp_show_source_retransmission(struct pim_instance *pim,
        }                 /* scan interfaces */
 }
 
-static void pim_show_bsr(struct pim_instance *pim,
-                        struct vty *vty,
-                        bool uj)
-{
-       char uptime[10];
-       char last_bsm_seen[10];
-       time_t now;
-       char bsr_state[20];
-       json_object *json = NULL;
-
-       if (pim_addr_is_any(pim->global_scope.current_bsr)) {
-               pim_time_uptime(uptime, sizeof(uptime),
-                               pim->global_scope.current_bsr_first_ts);
-               pim_time_uptime(last_bsm_seen, sizeof(last_bsm_seen),
-                               pim->global_scope.current_bsr_last_ts);
-       }
-
-       else {
-               now = pim_time_monotonic_sec();
-               pim_time_uptime(uptime, sizeof(uptime),
-                               (now - pim->global_scope.current_bsr_first_ts));
-               pim_time_uptime(last_bsm_seen, sizeof(last_bsm_seen),
-                               now - pim->global_scope.current_bsr_last_ts);
-       }
-
-       switch (pim->global_scope.state) {
-       case NO_INFO:
-               strlcpy(bsr_state, "NO_INFO", sizeof(bsr_state));
-               break;
-       case ACCEPT_ANY:
-               strlcpy(bsr_state, "ACCEPT_ANY", sizeof(bsr_state));
-               break;
-       case ACCEPT_PREFERRED:
-               strlcpy(bsr_state, "ACCEPT_PREFERRED", sizeof(bsr_state));
-               break;
-       default:
-               strlcpy(bsr_state, "", sizeof(bsr_state));
-       }
-
-
-       if (uj) {
-               json = json_object_new_object();
-               json_object_string_addf(json, "bsr", "%pPA",
-                                       &pim->global_scope.current_bsr);
-               json_object_int_add(json, "priority",
-                                   pim->global_scope.current_bsr_prio);
-               json_object_int_add(json, "fragmentTag",
-                                   pim->global_scope.bsm_frag_tag);
-               json_object_string_add(json, "state", bsr_state);
-               json_object_string_add(json, "upTime", uptime);
-               json_object_string_add(json, "lastBsmSeen", last_bsm_seen);
-       }
-
-       else {
-               vty_out(vty, "PIMv2 Bootstrap information\n");
-               vty_out(vty, "Current preferred BSR address: %pPA\n",
-                       &pim->global_scope.current_bsr);
-               vty_out(vty,
-                       "Priority        Fragment-Tag       State           UpTime\n");
-               vty_out(vty, "  %-12d    %-12d    %-13s    %7s\n",
-                       pim->global_scope.current_bsr_prio,
-                       pim->global_scope.bsm_frag_tag,
-                       bsr_state,
-                       uptime);
-               vty_out(vty, "Last BSM seen: %s\n", last_bsm_seen);
-       }
-
-       if (uj)
-               vty_json(vty, json);
-}
-
 static void clear_igmp_interfaces(struct pim_instance *pim)
 {
        struct interface *ifp;
@@ -3586,25 +3515,17 @@ DEFUN (show_ip_pim_group_type,
        return CMD_SUCCESS;
 }
 
-DEFUN (show_ip_pim_bsr,
+DEFPY (show_ip_pim_bsr,
        show_ip_pim_bsr_cmd,
-       "show ip pim bsr [json]",
+       "show ip pim bsr [vrf NAME] [json$json]",
        SHOW_STR
        IP_STR
        PIM_STR
        "boot-strap router information\n"
+       VRF_CMD_HELP_STR
        JSON_STR)
 {
-       int idx = 2;
-       struct vrf *vrf = pim_cmd_lookup_vrf(vty, argv, argc, &idx);
-       bool uj = use_json(argc, argv);
-
-       if (!vrf)
-               return CMD_WARNING;
-
-       pim_show_bsr(vrf->info, vty, uj);
-
-       return CMD_SUCCESS;
+       return pim_show_bsr_helper(vrf, vty, !!json);
 }
 
 DEFUN (ip_ssmpingd,
index 4b17d0bafd71090a4a8ee28cdbec1a6b8ab01e33..38a2cbb95fe5dda608aa4ffaa0bafe75ec88663d 100644 (file)
@@ -5243,3 +5243,92 @@ void clear_pim_interfaces(struct pim_instance *pim)
                        pim_neighbor_delete_all(ifp, "interface cleared");
        }
 }
+
+void pim_show_bsr(struct pim_instance *pim, struct vty *vty, bool uj)
+{
+       char uptime[10];
+       char last_bsm_seen[10];
+       time_t now;
+       char bsr_state[20];
+       json_object *json = NULL;
+
+       if (pim_addr_is_any(pim->global_scope.current_bsr)) {
+               pim_time_uptime(uptime, sizeof(uptime),
+                               pim->global_scope.current_bsr_first_ts);
+               pim_time_uptime(last_bsm_seen, sizeof(last_bsm_seen),
+                               pim->global_scope.current_bsr_last_ts);
+       }
+
+       else {
+               now = pim_time_monotonic_sec();
+               pim_time_uptime(uptime, sizeof(uptime),
+                               (now - pim->global_scope.current_bsr_first_ts));
+               pim_time_uptime(last_bsm_seen, sizeof(last_bsm_seen),
+                               now - pim->global_scope.current_bsr_last_ts);
+       }
+
+       switch (pim->global_scope.state) {
+       case NO_INFO:
+               strlcpy(bsr_state, "NO_INFO", sizeof(bsr_state));
+               break;
+       case ACCEPT_ANY:
+               strlcpy(bsr_state, "ACCEPT_ANY", sizeof(bsr_state));
+               break;
+       case ACCEPT_PREFERRED:
+               strlcpy(bsr_state, "ACCEPT_PREFERRED", sizeof(bsr_state));
+               break;
+       default:
+               strlcpy(bsr_state, "", sizeof(bsr_state));
+       }
+
+
+       if (uj) {
+               json = json_object_new_object();
+               json_object_string_addf(json, "bsr", "%pPA",
+                                       &pim->global_scope.current_bsr);
+               json_object_int_add(json, "priority",
+                                   pim->global_scope.current_bsr_prio);
+               json_object_int_add(json, "fragmentTag",
+                                   pim->global_scope.bsm_frag_tag);
+               json_object_string_add(json, "state", bsr_state);
+               json_object_string_add(json, "upTime", uptime);
+               json_object_string_add(json, "lastBsmSeen", last_bsm_seen);
+       }
+
+       else {
+               vty_out(vty, "PIMv2 Bootstrap information\n");
+               vty_out(vty, "Current preferred BSR address: %pPA\n",
+                       &pim->global_scope.current_bsr);
+               vty_out(vty,
+                       "Priority        Fragment-Tag       State           UpTime\n");
+               vty_out(vty, "  %-12d    %-12d    %-13s    %7s\n",
+                       pim->global_scope.current_bsr_prio,
+                       pim->global_scope.bsm_frag_tag, bsr_state, uptime);
+               vty_out(vty, "Last BSM seen: %s\n", last_bsm_seen);
+       }
+
+       if (uj)
+               vty_json(vty, json);
+}
+
+int pim_show_bsr_helper(const char *vrf, struct vty *vty, bool uj)
+{
+       struct pim_instance *pim;
+       struct vrf *v;
+
+       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;
+       }
+
+       pim_show_bsr(v->info, vty, uj);
+
+       return CMD_SUCCESS;
+}
index 6a72664a5560709146d737b8eee525ec4156979e..5ab2fabd07dfec7a5a2df3acfeaca52315c96cb0 100644 (file)
@@ -190,6 +190,8 @@ void pim_show_interface_traffic(struct pim_instance *pim, struct vty *vty,
 int pim_show_interface_traffic_helper(const char *vrf, const char *if_name,
                                      struct vty *vty, bool uj);
 void clear_pim_interfaces(struct pim_instance *pim);
+void pim_show_bsr(struct pim_instance *pim, struct vty *vty, bool uj);
+int pim_show_bsr_helper(const char *vrf, struct vty *vty, bool uj);
 /*
  * Special Macro to allow us to get the correct pim_instance;
  */