summaryrefslogtreecommitdiffstats
path: root/pimd/pim_neighbor.c
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@cumulusnetwroks.com>2016-08-06 12:26:05 +0200
committerDonald Sharp <sharpd@cumulusnetworks.com>2016-12-22 02:26:05 +0100
commit1148de0adbb606c64ffabdb7cb70030365d51c65 (patch)
tree288ab5358c516f9f1df8bc4604f2023debed49cd /pimd/pim_neighbor.c
parentpimd: multiple rp commands (diff)
downloadfrr-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.c13
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;
}