From: Donald Sharp Date: Tue, 24 Jan 2017 21:11:40 +0000 (-0500) Subject: pimd: Fix handling of *,G on RP to allow prune of S,G to go out X-Git-Tag: frr-3.0-branchpoint~60^2~1 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=a118e71d0e01e7923522f13e5ddd0f9e2803ec0a;p=matthieu%2Ffrr.git pimd: Fix handling of *,G on RP to allow prune of S,G to go out When on the RP we received a prune *,G for an established S,G If join_desired is no longer true we need to prune and reset some timers, in addition to removing the inherited interface from the olist. This was not happening because we were just removing the inherited oif from the *,G. Ticket: CM-14561 Signed-off-by: Donald Sharp --- diff --git a/pimd/pim_ifchannel.c b/pimd/pim_ifchannel.c index 0c0c2c4043..f0e4a3a68a 100644 --- a/pimd/pim_ifchannel.c +++ b/pimd/pim_ifchannel.c @@ -274,12 +274,16 @@ void pim_ifchannel_ifjoin_switch(const char *caller, continue; if (!pim_upstream_evaluate_join_desired (child)) - pim_channel_del_oif (c_oil, ch->interface, PIM_OIF_FLAG_PROTO_STAR); + { + pim_channel_del_oif (c_oil, ch->interface, PIM_OIF_FLAG_PROTO_STAR); + pim_upstream_update_join_desired (child); + } /* * If the S,G has no if channel and the c_oil still * has output here then the *,G was supplying the implied * if channel. So remove it. + * I think this is dead code now. is it? */ if (!ch && c_oil->oil.mfcc_ttls[pim_ifp->mroute_vif_index]) pim_channel_del_oif (c_oil, ch->interface, PIM_OIF_FLAG_PROTO_STAR); @@ -297,7 +301,7 @@ void pim_ifchannel_ifjoin_switch(const char *caller, if (pim_upstream_evaluate_join_desired (child)) { pim_channel_add_oif (child->channel_oil, ch->interface, PIM_OIF_FLAG_PROTO_STAR); - pim_upstream_switch (child, PIM_UPSTREAM_JOINED); + pim_upstream_update_join_desired (child); } } }