From 626dab7f3fc54843b34dffe6588dcf2a3b8263f5 Mon Sep 17 00:00:00 2001 From: Abhishek N R Date: Tue, 8 Feb 2022 20:32:14 -0800 Subject: [PATCH] pim6d: Implementing "show ipv6 pim secondary" CLI Adding new show CLI to display pim secondary addresses. Signed-off-by: Abhishek N R --- pimd/pim6_cmd.c | 30 ++++++++++++++++++++++++++++++ pimd/pim_cmd.c | 19 ++++++++++++++----- pimd/pim_cmd_common.c | 16 +++++----------- 3 files changed, 49 insertions(+), 16 deletions(-) diff --git a/pimd/pim6_cmd.c b/pimd/pim6_cmd.c index 7cbd949286..92ad73da25 100644 --- a/pimd/pim6_cmd.c +++ b/pimd/pim6_cmd.c @@ -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); } diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c index 866be77404..1a44646071 100644 --- a/pimd/pim_cmd.c +++ b/pimd/pim_cmd.c @@ -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; } diff --git a/pimd/pim_cmd_common.c b/pimd/pim_cmd_common.c index b8c4ef1552..4ca314d8cf 100644 --- a/pimd/pim_cmd_common.c +++ b/pimd/pim_cmd_common.c @@ -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("", 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); } } } -- 2.39.5