summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@cumulusnetworks.com>2018-07-06 16:15:58 -0400
committerDonald Sharp <sharpd@cumulusnetworks.com>2018-07-07 09:02:07 -0400
commitab9ac14351f53f0072433c29d9af178ed777b503 (patch)
tree9ee5e18c670fb85c176de7ae382bfd082d786276
parent1996712744f009ed6d4281f7686429dab3f75960 (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.c14
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,