]> git.puffer.fish Git - matthieu/frr.git/commitdiff
pimd: Fix handling of *,G on RP to allow prune of S,G to go out
authorDonald Sharp <sharpd@cumulusnetworks.com>
Tue, 24 Jan 2017 21:11:40 +0000 (16:11 -0500)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Mon, 30 Jan 2017 17:54:20 +0000 (12:54 -0500)
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 <sharpd@cumulusnetworks.com>
pimd/pim_ifchannel.c

index 0c0c2c40439e4183ab9b667bb37738ca7aaca9fe..f0e4a3a68ae01ca15483dc0905c96dc396e57c08 100644 (file)
@@ -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);
                    }
                }
            }