From a118e71d0e01e7923522f13e5ddd0f9e2803ec0a Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Tue, 24 Jan 2017 16:11:40 -0500 Subject: [PATCH] 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 --- pimd/pim_ifchannel.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) 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); } } } -- 2.39.5