pim6d: Implementing "show ipv6 pim secondary" CLI

Adding new show CLI to display pim secondary addresses.

Signed-off-by: Abhishek N R <abnr@vmware.com>
This commit is contained in:
Abhishek N R 2022-02-08 20:32:14 -08:00
parent 1aa8de4687
commit 626dab7f3f
3 changed files with 49 additions and 16 deletions

View File

@ -782,6 +782,35 @@ DEFPY (show_ipv6_pim_rpf_vrf_all,
return CMD_SUCCESS; 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) void pim_cmd_init(void)
{ {
if_cmd_init(pim_interface_config_write); 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_rp_vrf_all_cmd);
install_element(VIEW_NODE, &show_ipv6_pim_rpf_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_rpf_vrf_all_cmd);
install_element(VIEW_NODE, &show_ipv6_pim_secondary_cmd);
} }

View File

@ -4301,7 +4301,7 @@ DEFUN (show_ip_pim_neighbor_vrf_all,
return CMD_SUCCESS; return CMD_SUCCESS;
} }
DEFUN (show_ip_pim_secondary, DEFPY (show_ip_pim_secondary,
show_ip_pim_secondary_cmd, show_ip_pim_secondary_cmd,
"show ip pim [vrf NAME] secondary", "show ip pim [vrf NAME] secondary",
SHOW_STR SHOW_STR
@ -4310,13 +4310,22 @@ DEFUN (show_ip_pim_secondary,
VRF_CMD_HELP_STR VRF_CMD_HELP_STR
"PIM neighbor addresses\n") "PIM neighbor addresses\n")
{ {
int idx = 2; struct pim_instance *pim;
struct vrf *vrf = pim_cmd_lookup_vrf(vty, argv, argc, &idx); struct vrf *v;
if (!vrf) v = vrf_lookup_by_name(vrf ? vrf : VRF_DEFAULT_NAME);
if (!v)
return CMD_WARNING; 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; return CMD_SUCCESS;
} }

View File

@ -888,10 +888,9 @@ void pim_show_neighbors_secondary(struct pim_instance *pim, struct vty *vty)
FOR_ALL_INTERFACES (pim->vrf, ifp) { FOR_ALL_INTERFACES (pim->vrf, ifp) {
struct pim_interface *pim_ifp; struct pim_interface *pim_ifp;
struct in_addr ifaddr; pim_addr ifaddr;
struct listnode *neighnode; struct listnode *neighnode;
struct pim_neighbor *neigh; struct pim_neighbor *neigh;
char buf[PREFIX_STRLEN];
pim_ifp = ifp->info; 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, for (ALL_LIST_ELEMENTS_RO(pim_ifp->pim_neighbor_list, neighnode,
neigh)) { neigh)) {
char neigh_src_str[INET_ADDRSTRLEN];
struct listnode *prefix_node; struct listnode *prefix_node;
struct prefix *p; struct prefix *p;
if (!neigh->prefix_list) if (!neigh->prefix_list)
continue; continue;
pim_inet4_dump("<src?>", neigh->source_addr,
neigh_src_str, sizeof(neigh_src_str));
for (ALL_LIST_ELEMENTS_RO(neigh->prefix_list, for (ALL_LIST_ELEMENTS_RO(neigh->prefix_list,
prefix_node, p)) prefix_node, p))
vty_out(vty, "%-16s %-15s %-15s %-15pFX\n", vty_out(vty,
ifp->name, "%-16s %-15pPAs %-15pPAs %-15pFX\n",
inet_ntop(AF_INET, &ifaddr, buf, ifp->name, &ifaddr, &neigh->source_addr,
sizeof(buf)), p);
neigh_src_str, p);
} }
} }
} }