]> git.puffer.fish Git - matthieu/frr.git/commitdiff
pim6d: Implementing "show ipv6 pim secondary" CLI
authorAbhishek N R <abnr@vmware.com>
Wed, 9 Feb 2022 04:32:14 +0000 (20:32 -0800)
committerAbhishek N R <abnr@vmware.com>
Tue, 29 Mar 2022 06:53:24 +0000 (23:53 -0700)
Adding new show CLI to display pim secondary addresses.

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

index 7cbd949286e00d95b008ad8e6ada8da3cf7beafe..92ad73da259093f3cdf2b1706c984001778a6575 100644 (file)
@@ -782,6 +782,35 @@ DEFPY (show_ipv6_pim_rpf_vrf_all,
        return CMD_SUCCESS;
 }
 
+DEFPY (show_ipv6_pim_secondary,
+       show_ipv6_pim_secondary_cmd,
+       "show ipv6 pim [vrf NAME] secondary",
+       SHOW_STR
+       IPV6_STR
+       PIM_STR
+       VRF_CMD_HELP_STR
+       "PIM neighbor addresses\n")
+{
+       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_neighbors_secondary(pim, vty);
+
+       return CMD_SUCCESS;
+}
+
 void pim_cmd_init(void)
 {
        if_cmd_init(pim_interface_config_write);
@@ -838,4 +867,5 @@ void pim_cmd_init(void)
        install_element(VIEW_NODE, &show_ipv6_pim_rp_vrf_all_cmd);
        install_element(VIEW_NODE, &show_ipv6_pim_rpf_cmd);
        install_element(VIEW_NODE, &show_ipv6_pim_rpf_vrf_all_cmd);
+       install_element(VIEW_NODE, &show_ipv6_pim_secondary_cmd);
 }
index 866be774040f1de0425dbec754d342c4fe4273fd..1a44646071bb512f9dbd68061b324674ef5c76f5 100644 (file)
@@ -4301,7 +4301,7 @@ DEFUN (show_ip_pim_neighbor_vrf_all,
        return CMD_SUCCESS;
 }
 
-DEFUN (show_ip_pim_secondary,
+DEFPY (show_ip_pim_secondary,
        show_ip_pim_secondary_cmd,
        "show ip pim [vrf NAME] secondary",
        SHOW_STR
@@ -4310,13 +4310,22 @@ DEFUN (show_ip_pim_secondary,
        VRF_CMD_HELP_STR
        "PIM neighbor addresses\n")
 {
-       int idx = 2;
-       struct vrf *vrf = pim_cmd_lookup_vrf(vty, argv, argc, &idx);
+       struct pim_instance *pim;
+       struct vrf *v;
 
-       if (!vrf)
+       v = vrf_lookup_by_name(vrf ? vrf : VRF_DEFAULT_NAME);
+
+       if (!v)
                return CMD_WARNING;
 
-       pim_show_neighbors_secondary(vrf->info, vty);
+       pim = pim_get_pim_instance(v->vrf_id);
+
+       if (!pim) {
+               vty_out(vty, "%% Unable to find pim instance\n");
+               return CMD_WARNING;
+       }
+
+       pim_show_neighbors_secondary(pim, vty);
 
        return CMD_SUCCESS;
 }
index b8c4ef155279cd1462dc760f0bcbdd2706422dc2..4ca314d8cfd8ecdfe08f00b26d6e61ebf3692888 100644 (file)
@@ -888,10 +888,9 @@ void pim_show_neighbors_secondary(struct pim_instance *pim, struct vty *vty)
 
        FOR_ALL_INTERFACES (pim->vrf, ifp) {
                struct pim_interface *pim_ifp;
-               struct in_addr ifaddr;
+               pim_addr ifaddr;
                struct listnode *neighnode;
                struct pim_neighbor *neigh;
-               char buf[PREFIX_STRLEN];
 
                pim_ifp = ifp->info;
 
@@ -905,23 +904,18 @@ void pim_show_neighbors_secondary(struct pim_instance *pim, struct vty *vty)
 
                for (ALL_LIST_ELEMENTS_RO(pim_ifp->pim_neighbor_list, neighnode,
                                          neigh)) {
-                       char neigh_src_str[INET_ADDRSTRLEN];
                        struct listnode *prefix_node;
                        struct prefix *p;
 
                        if (!neigh->prefix_list)
                                continue;
 
-                       pim_inet4_dump("<src?>", neigh->source_addr,
-                                      neigh_src_str, sizeof(neigh_src_str));
-
                        for (ALL_LIST_ELEMENTS_RO(neigh->prefix_list,
                                                  prefix_node, p))
-                               vty_out(vty, "%-16s %-15s %-15s %-15pFX\n",
-                                       ifp->name,
-                                       inet_ntop(AF_INET, &ifaddr, buf,
-                                                 sizeof(buf)),
-                                       neigh_src_str, p);
+                               vty_out(vty,
+                                       "%-16s %-15pPAs %-15pPAs %-15pFX\n",
+                                       ifp->name, &ifaddr, &neigh->source_addr,
+                                       p);
                }
        }
 }