summaryrefslogtreecommitdiffstats
path: root/pimd/pim_nht.h
diff options
context:
space:
mode:
authorChirag Shah <chirag@cumulusnetworks.com>2017-04-27 20:01:32 +0200
committerChirag Shah <chirag@cumulusnetworks.com>2017-05-07 02:38:18 +0200
commit815c33c92f10c112dba83f4ed46a6eaaa55edbb4 (patch)
tree8ae71bb5959d41ca12a445e0b01477699e8fb221 /pimd/pim_nht.h
parentMerge pull request #462 from donaldsharp/poll_3.0 (diff)
downloadfrr-815c33c92f10c112dba83f4ed46a6eaaa55edbb4.tar.xz
frr-815c33c92f10c112dba83f4ed46a6eaaa55edbb4.zip
pimd: fix channel_oil and upstream RPF in sync
During PIM Neighbor change/UP event, pim_scan_oil api scans all channel oil to see any rpf impacted. Instead of passing current upstream's RPF it passes current RPF as 0 and does query to rib for nexhtop (without ECMP/Rebalance). This creates inconsist RPF between Upstream and Channel oil. In Channel Oil keep backward pointer to upstream DB and fetch up's RPF and passed to channel_oil scan. Decrement channel_oil ref_count in upstream_del when decrementing up ref_count and it is not the last. Created ECMP based FIB lookup API. Testing Done: Performed following testing on tester setup: 5 x LHR, 4 x MSDP Spines, 6 Sources each sending to 1023 groups from one of the spines. Total send rate 8Mpps. Test that caused problems was to reboot every device at the same time. After fix performed 5 iterations of reboot devices and show no sign of the problem. Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
Diffstat (limited to 'pimd/pim_nht.h')
-rw-r--r--pimd/pim_nht.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/pimd/pim_nht.h b/pimd/pim_nht.h
index b4b2d91e4..0ccc5399c 100644
--- a/pimd/pim_nht.h
+++ b/pimd/pim_nht.h
@@ -65,5 +65,8 @@ int pim_ecmp_nexthop_lookup (struct pim_nexthop *nexthop, struct in_addr addr,
int neighbor_needed);
void pim_sendmsg_zebra_rnh (struct zclient *zclient, struct pim_nexthop_cache *pnc,
int command);
+int pim_update_rp_nh (struct pim_nexthop_cache *pnc);
void pim_resolve_upstream_nh (struct prefix *nht_p);
+int pim_ecmp_fib_lookup_if_vif_index(struct in_addr addr,
+ struct prefix *src, struct prefix *grp);
#endif