diff options
| author | Sai Gomathi N <nsaigomathi@vmware.com> | 2022-06-09 04:22:42 -0700 |
|---|---|---|
| committer | Sai Gomathi N <nsaigomathi@vmware.com> | 2022-06-09 04:22:42 -0700 |
| commit | fe7eaf4065cab165d40a6010d00d5c84273a4cf0 (patch) | |
| tree | 01dafb2d4807e455594c9f83c6c5fd1ebb56e7c1 /pimd/pim_cmd_common.c | |
| parent | cefa37cf41709bc23a1be296b6ed63097ea47350 (diff) | |
pim6d: Moving the common lines of pim_show_nexthop_lookup cli
Moving the common lines of pim_show_nexthop_lookup cli
in pim_cmd.c and pim6_cmd.c to pim_cmd_common.c file
Signed-off-by: Sai Gomathi N <nsaigomathi@vmware.com>
Diffstat (limited to 'pimd/pim_cmd_common.c')
| -rw-r--r-- | pimd/pim_cmd_common.c | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/pimd/pim_cmd_common.c b/pimd/pim_cmd_common.c index 666d7672eb..54abd17d5e 100644 --- a/pimd/pim_cmd_common.c +++ b/pimd/pim_cmd_common.c @@ -55,6 +55,7 @@ #include "pim_static.h" #include "pim_addr.h" #include "pim_static.h" +#include "pim_util.h" /** * Get current node VRF name. @@ -2597,6 +2598,59 @@ static int pim_print_pnc_cache_walkcb(struct hash_bucket *bucket, void *arg) return CMD_SUCCESS; } +int pim_show_nexthop_lookup_cmd_helper(const char *vrf, struct vty *vty, + pim_addr source, pim_addr group) +{ + struct prefix nht_p; + int result = 0; + pim_addr vif_source; + struct prefix grp; + struct pim_nexthop nexthop; + struct vrf *v; + char grp_str[PREFIX_STRLEN]; + + v = vrf_lookup_by_name(vrf ? vrf : VRF_DEFAULT_NAME); + + if (!v) + return CMD_WARNING; + +#if PIM_IPV == 4 + if (pim_is_group_224_4(source)) { + vty_out(vty, + "Invalid argument. Expected Valid Source Address.\n"); + return CMD_WARNING; + } + + if (!pim_is_group_224_4(group)) { + vty_out(vty, + "Invalid argument. Expected Valid Multicast Group Address.\n"); + return CMD_WARNING; + } +#endif + + if (!pim_rp_set_upstream_addr(v->info, &vif_source, source, group)) + return CMD_SUCCESS; + + pim_addr_to_prefix(&nht_p, vif_source); + pim_addr_to_prefix(&grp, group); + memset(&nexthop, 0, sizeof(nexthop)); + + result = pim_ecmp_nexthop_lookup(v->info, &nexthop, &nht_p, &grp, 0); + + if (!result) { + vty_out(vty, + "Nexthop Lookup failed, no usable routes returned.\n"); + return CMD_SUCCESS; + } + + pim_addr_dump("<grp?>", &grp, grp_str, sizeof(grp_str)); + + vty_out(vty, "Group %s --- Nexthop %pPAs Interface %s\n", grp_str, + &nexthop.mrib_nexthop_addr, nexthop.interface->name); + + return CMD_SUCCESS; +} + int pim_show_nexthop_cmd_helper(const char *vrf, struct vty *vty) { struct vrf *v; |
