summaryrefslogtreecommitdiffstats
path: root/pimd
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@cumulusnetworks.com>2017-12-13 02:29:38 +0100
committerDonald Sharp <sharpd@cumulusnetworks.com>2017-12-13 02:29:38 +0100
commitb456bceb4a4f7cfd8d926d400a27da611bf51e15 (patch)
tree2b03477499b426f5b59f8f262ccb0c6b47da38ed /pimd
parentMerge pull request #1540 from opensourcerouting/isis-spfperf1 (diff)
downloadfrr-b456bceb4a4f7cfd8d926d400a27da611bf51e15.tar.xz
frr-b456bceb4a4f7cfd8d926d400a27da611bf51e15.zip
pimd: Really, Actually send S,G rpt prune upstream
When we receive a S,G rpt prune message for a mroute, really, absolutely, guarantee the send upstream immediately. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Diffstat (limited to 'pimd')
-rw-r--r--pimd/pim_ifchannel.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/pimd/pim_ifchannel.c b/pimd/pim_ifchannel.c
index 5f597b17b..7d3b783ad 100644
--- a/pimd/pim_ifchannel.c
+++ b/pimd/pim_ifchannel.c
@@ -640,6 +640,13 @@ static int on_ifjoin_prune_pending_timer(struct thread *t)
ch = THREAD_ARG(t);
+ if (PIM_DEBUG_TRACE)
+ zlog_debug("%s: IFCHANNEL%s %s Prune Pending Timer Popped",
+ __PRETTY_FUNCTION__,
+ pim_str_sg_dump(&ch->sg),
+ pim_ifchannel_ifjoin_name(ch->ifjoin_state,
+ ch->flags));
+
if (ch->ifjoin_state == PIM_IFJOIN_PRUNE_PENDING) {
ifp = ch->interface;
pim_ifp = ifp->info;
@@ -665,16 +672,19 @@ static int on_ifjoin_prune_pending_timer(struct thread *t)
* message on RP path upon prune timer expiry.
*/
ch->ifjoin_state = PIM_IFJOIN_PRUNE;
- if (ch->upstream)
+ if (ch->upstream) {
+ struct pim_upstream *parent =
+ ch->upstream->parent;
+
pim_upstream_update_join_desired(pim_ifp->pim,
ch->upstream);
+
+ pim_jp_agg_single_upstream_send(&parent->rpf,
+ parent,
+ true);
+ }
}
/* from here ch may have been deleted */
- } else {
- zlog_warn(
- "%s: IFCHANNEL%s Prune Pending Timer Popped while in %s state",
- __PRETTY_FUNCTION__, pim_str_sg_dump(&ch->sg),
- pim_ifchannel_ifjoin_name(ch->ifjoin_state, ch->flags));
}
return 0;