]> git.puffer.fish Git - mirror/frr.git/commitdiff
pimd: Fix join received when in Prune or Prune Pending
authorDonald Sharp <sharpd@cumulusnetworks.com>
Fri, 19 Aug 2016 13:07:19 +0000 (09:07 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Thu, 22 Dec 2016 01:26:07 +0000 (20:26 -0500)
When we are a FHR, and the upstream state is in Prune or Prune Pending
allow the join because we know we want to forward traffic to the RP.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
pimd/pim_ifchannel.c
pimd/pim_macro.c
pimd/pim_upstream.c

index b83f0072b45711c0c19caa49ba8e0fbc232dbcf5..85bd178d9be9a7c9bd086e5d81df3a5fdbf25de9 100644 (file)
@@ -169,6 +169,13 @@ void pim_ifchannel_ifjoin_switch(const char *caller,
 {
   enum pim_ifjoin_state old_state = ch->ifjoin_state;
 
+  if (PIM_DEBUG_PIM_EVENTS)
+    zlog_debug ("PIM_IFCHANNEL: %s is switching from %s to %s",
+               pim_str_sg_dump (&ch->sg),
+               pim_ifchannel_ifjoin_name (ch->ifjoin_state),
+               pim_ifchannel_ifjoin_name (new_state));
+
+
   if (old_state == new_state) {
     if (PIM_DEBUG_PIM_EVENTS) {
       zlog_debug("%s calledby %s: non-transition on state %d (%s)",
@@ -178,8 +185,6 @@ void pim_ifchannel_ifjoin_switch(const char *caller,
     return;
   }
 
-  zassert(old_state != new_state);
-
   ch->ifjoin_state = new_state;
 
   /* Transition to/from NOINFO ? */
index 62decfd5f985f76744b98cc6a46217e1d22c0fdd..4bcb62a90ecb02dd1249141d13183c10a73edc97 100644 (file)
@@ -337,7 +337,7 @@ static int pim_macro_chisin_inherited_olist(const struct pim_ifchannel *ch)
 */
 int pim_macro_chisin_oiflist(const struct pim_ifchannel *ch)
 {
-  if (ch->upstream->join_state != PIM_UPSTREAM_JOINED) {
+  if (ch->upstream->join_state == PIM_UPSTREAM_NOTJOINED) {
     /* oiflist is NULL */
     return 0; /* false */
   }
index abc3f53c5697057dadcfb75b9ed633ba1ee30c8f..4563b6ecb4cc7b1150ab3718d5ef41f33cb46798 100644 (file)
@@ -1029,7 +1029,6 @@ pim_upstream_inherited_olist (struct pim_upstream *up)
   int output_intf = 0;
 
   pim_ifp = up->rpf.source_nexthop.interface->info;
-  zlog_debug ("Channel Oil%s: %p", pim_str_sg_dump (&up->sg), up->channel_oil);
   if (!up->channel_oil)
     up->channel_oil = pim_channel_oil_add (&up->sg, pim_ifp->mroute_vif_index);