summaryrefslogtreecommitdiffstats
path: root/pimd/pimd.c
diff options
context:
space:
mode:
authorChirag Shah <chirag@cumulusnetworks.com>2017-04-05 22:14:12 +0200
committerChirag Shah <chirag@cumulusnetworks.com>2017-04-06 20:18:07 +0200
commitcba444817883b8b3b22a7ed9958dc9ed77f76230 (patch)
tree9167aeb0623fe581a831324b8ba90de14432397d /pimd/pimd.c
parentMerge pull request #336 from dwalton76/bgpd-allowas-in-removal (diff)
downloadfrr-cba444817883b8b3b22a7ed9958dc9ed77f76230.tar.xz
frr-cba444817883b8b3b22a7ed9958dc9ed77f76230.zip
pimd: Pim Nexthop Tracking support with ECMP
In this patch, PIM nexthop tracking uses locally populated nexthop cached list to determine ECMP based nexthop (w/ ECMP knob enabled), otherwise picks the first nexthop as RPF. Introduced '[no] ip pim ecmp' command to enable/disable PIM ECMP knob. By default, PIM ECMP is disabled. Intorudced '[no] ip pim ecmp rebalance' command to provide existing mcache entry to switch new path based on hash chosen path. Introduced, show command to display pim registered addresses and respective nexthops. Introuduce, show command to find nexthop and out interface for (S,G) or (RP,G). Re-Register an address with nexthop when Interface UP event received, to ensure the PIM nexthop cache is updated (being PIM enabled). During PIM neighbor UP, traverse all RPs and Upstreams nexthop and determine, if any of nexthop's IPv4 address changes/resolves due to neigbor UP event. Testing Done: Run various LHR, RP and FHR related cases to resolve RPF using nexthop cache with ECMP knob disabled, performed interface/PIM neighbor flap events. Executed pim-smoke with knob disabled. Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
Diffstat (limited to 'pimd/pimd.c')
-rw-r--r--pimd/pimd.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/pimd/pimd.c b/pimd/pimd.c
index bdbd251e2..653856665 100644
--- a/pimd/pimd.c
+++ b/pimd/pimd.c
@@ -75,7 +75,9 @@ unsigned int qpim_keep_alive_time = PIM_KEEPALIVE_PERIOD;
signed int qpim_rp_keep_alive_time = 0;
int64_t qpim_nexthop_lookups = 0;
int qpim_packet_process = PIM_DEFAULT_PACKET_PROCESS;
-struct pim_instance *pimg = NULL;
+uint8_t qpim_ecmp_enable = 0;
+uint8_t qpim_ecmp_rebalance_enable = 0;
+struct pim_instance *pimg = NULL;
int32_t qpim_register_suppress_time = PIM_REGISTER_SUPPRESSION_TIME_DEFAULT;
int32_t qpim_register_probe_time = PIM_REGISTER_PROBE_TIME_DEFAULT;