diff options
author | Donald Sharp <sharpd@cumulusnetworks.com> | 2017-12-13 02:29:38 +0100 |
---|---|---|
committer | Donald Sharp <sharpd@cumulusnetworks.com> | 2017-12-13 02:29:38 +0100 |
commit | b456bceb4a4f7cfd8d926d400a27da611bf51e15 (patch) | |
tree | 2b03477499b426f5b59f8f262ccb0c6b47da38ed /pimd | |
parent | Merge pull request #1540 from opensourcerouting/isis-spfperf1 (diff) | |
download | frr-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.c | 22 |
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; |