diff options
| author | Donald Sharp <sharpd@cumulusnetworks.com> | 2018-07-06 16:15:58 -0400 |
|---|---|---|
| committer | Donald Sharp <sharpd@cumulusnetworks.com> | 2018-07-07 09:02:07 -0400 |
| commit | ab9ac14351f53f0072433c29d9af178ed777b503 (patch) | |
| tree | 9ee5e18c670fb85c176de7ae382bfd082d786276 | |
| parent | 1996712744f009ed6d4281f7686429dab3f75960 (diff) | |
pimd: When doing nexthop-lookups don't allocate perm memory
When doing nexthop lookups do not permanently allocate
memory in zebra and pim to track the nexthop specified
on the cli.
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
| -rw-r--r-- | pimd/pim_cmd.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c index ae2daf40aa..341dd9dce8 100644 --- a/pimd/pim_cmd.c +++ b/pimd/pim_cmd.c @@ -4252,7 +4252,7 @@ DEFUN (show_ip_pim_nexthop_lookup, "Source/RP address\n" "Multicast Group address\n") { - struct pim_nexthop_cache pnc; + struct pim_nexthop_cache *pnc = NULL; struct prefix nht_p; int result = 0; struct in_addr src_addr, grp_addr; @@ -4264,6 +4264,7 @@ DEFUN (show_ip_pim_nexthop_lookup, char grp_str[PREFIX_STRLEN]; int idx = 2; struct vrf *vrf = pim_cmd_lookup_vrf(vty, argv, argc, &idx); + struct pim_rpf rpf; if (!vrf) return CMD_WARNING; @@ -4301,7 +4302,6 @@ DEFUN (show_ip_pim_nexthop_lookup, grp_addr)) return CMD_SUCCESS; - memset(&pnc, 0, sizeof(struct pim_nexthop_cache)); nht_p.family = AF_INET; nht_p.prefixlen = IPV4_MAX_BITLEN; nht_p.u.prefix4 = vif_source; @@ -4310,8 +4310,14 @@ DEFUN (show_ip_pim_nexthop_lookup, grp.u.prefix4 = grp_addr; memset(&nexthop, 0, sizeof(nexthop)); - if (pim_find_or_track_nexthop(vrf->info, &nht_p, NULL, NULL, &pnc)) - result = pim_ecmp_nexthop_search(vrf->info, &pnc, &nexthop, + memset(&rpf, 0, sizeof(struct pim_rpf)); + rpf.rpf_addr.family = AF_INET; + rpf.rpf_addr.prefixlen = IPV4_MAX_BITLEN; + rpf.rpf_addr.u.prefix4 = vif_source; + + pnc = pim_nexthop_cache_find(vrf->info, &rpf); + if (pnc) + result = pim_ecmp_nexthop_search(vrf->info, pnc, &nexthop, &nht_p, &grp, 0); else result = pim_ecmp_nexthop_lookup(vrf->info, &nexthop, |
