diff options
author | Donald Sharp <sharpd@cumulusnetwroks.com> | 2016-08-06 12:26:05 +0200 |
---|---|---|
committer | Donald Sharp <sharpd@cumulusnetworks.com> | 2016-12-22 02:26:05 +0100 |
commit | 1148de0adbb606c64ffabdb7cb70030365d51c65 (patch) | |
tree | 288ab5358c516f9f1df8bc4604f2023debed49cd /pimd/pim_neighbor.c | |
parent | pimd: multiple rp commands (diff) | |
download | frr-1148de0adbb606c64ffabdb7cb70030365d51c65.tar.xz frr-1148de0adbb606c64ffabdb7cb70030365d51c65.zip |
pimd: Send hello immediately with receive of new genid
When we receive a new genid from a neighbor, we need
to form the neigbhor relationship before the join/prune
messages are sent to the neighbor.
Additionally we were calling the
pim_upstream_rpf_genid_changed function 2 times
in a row. This function just spun throught the upstream
list and marked all relevant upstreams to be sent
immediately
Ticket:CM-11979
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Diffstat (limited to 'pimd/pim_neighbor.c')
-rw-r--r-- | pimd/pim_neighbor.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/pimd/pim_neighbor.c b/pimd/pim_neighbor.c index 2703b8fcf..4d7938809 100644 --- a/pimd/pim_neighbor.c +++ b/pimd/pim_neighbor.c @@ -411,7 +411,8 @@ struct pim_neighbor *pim_neighbor_add(struct interface *ifp, uint16_t override_interval, uint32_t dr_priority, uint32_t generation_id, - struct list *addr_list) + struct list *addr_list, + int send_hello_now) { struct pim_interface *pim_ifp; struct pim_neighbor *neigh; @@ -450,8 +451,16 @@ struct pim_neighbor *pim_neighbor_add(struct interface *ifp, message with a new GenID is received from an existing neighbor, a new Hello message should be sent on this interface after a randomized delay between 0 and Triggered_Hello_Delay. + + This is a bit silly to do it that way. If I get a new + genid we need to send the hello *now* because we've + lined up a bunch of join/prune messages to go out the + interface. */ - pim_hello_restart_triggered(neigh->interface); + if (send_hello_now) + pim_hello_restart_now (ifp); + else + pim_hello_restart_triggered(neigh->interface); return neigh; } |