]> git.proxmox.com Git - mirror_frr.git/commitdiff
pimd: Add display of SGRpt state for ifchannel
authorDonald Sharp <sharpd@cumulusnetworks.com>
Fri, 17 Mar 2017 17:46:47 +0000 (13:46 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Fri, 17 Mar 2017 18:48:14 +0000 (14:48 -0400)
When we get a SGrpt Prune embedded in the *,G Join,
Display the created ifchannel as being SGRpt state.

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

index a85de0aabc2cda380b5ae5461461b3e9ad958afc..b2edb94711386123135f4fc6d7ea152151fadb2c 100644 (file)
@@ -1168,7 +1168,8 @@ static void pim_show_join(struct vty *vty, u_char uj)
       json_object_string_add(json_row, "upTime", uptime);
       json_object_string_add(json_row, "expire", expire);
       json_object_string_add(json_row, "prune", prune);
-      json_object_string_add(json_row, "channelJoinName", pim_ifchannel_ifjoin_name(ch->ifjoin_state));
+      json_object_string_add(json_row, "channelJoinName",
+                             pim_ifchannel_ifjoin_name(ch->ifjoin_state, ch->flags));
       if (PIM_IF_FLAG_TEST_S_G_RPT(ch->flags))
         json_object_int_add(json_row, "SGRpt", 1);
 
@@ -1187,7 +1188,7 @@ static void pim_show_join(struct vty *vty, u_char uj)
              inet_ntoa(ifaddr),
              ch_src_str,
              ch_grp_str,
-             pim_ifchannel_ifjoin_name(ch->ifjoin_state),
+             pim_ifchannel_ifjoin_name(ch->ifjoin_state, ch->flags),
              uptime,
              expire,
              prune,
index ee75793024386761e9ccd47099565ccd00584141..6dc1fba3755ece6fed7d0a51f114139fbadf9b2d 100644 (file)
@@ -239,15 +239,15 @@ void pim_ifchannel_ifjoin_switch(const char *caller,
     zlog_debug ("PIM_IFCHANNEL(%s): %s is switching from %s to %s",
                ch->interface->name,
                ch->sg_str,
-               pim_ifchannel_ifjoin_name (ch->ifjoin_state),
-               pim_ifchannel_ifjoin_name (new_state));
+               pim_ifchannel_ifjoin_name (ch->ifjoin_state, ch->flags),
+               pim_ifchannel_ifjoin_name (new_state, 0));
 
 
   if (old_state == new_state) {
     if (PIM_DEBUG_PIM_EVENTS) {
       zlog_debug("%s calledby %s: non-transition on state %d (%s)",
                 __PRETTY_FUNCTION__, caller, new_state,
-                pim_ifchannel_ifjoin_name(new_state));
+                pim_ifchannel_ifjoin_name(new_state, 0));
     }
     return;
   }
@@ -331,15 +331,31 @@ void pim_ifchannel_ifjoin_switch(const char *caller,
   }
 }
 
-const char *pim_ifchannel_ifjoin_name(enum pim_ifjoin_state ifjoin_state)
+const char *pim_ifchannel_ifjoin_name(enum pim_ifjoin_state ifjoin_state,
+                                      int flags)
 {
   switch (ifjoin_state) {
-  case PIM_IFJOIN_NOINFO:            return "NOINFO";
-  case PIM_IFJOIN_JOIN:              return "JOIN";
-  case PIM_IFJOIN_PRUNE:             return "PRUNE";
-  case PIM_IFJOIN_PRUNE_PENDING:     return "PRUNEP";
-  case PIM_IFJOIN_PRUNE_TMP:         return "PRUNET";
-  case PIM_IFJOIN_PRUNE_PENDING_TMP: return "PRUNEPT";
+  case PIM_IFJOIN_NOINFO:
+     if (PIM_IF_FLAG_TEST_S_G_RPT(flags))
+       return "SGRpt";
+     else
+       return "NOINFO";
+     break;
+  case PIM_IFJOIN_JOIN:
+     return "JOIN";
+     break;
+  case PIM_IFJOIN_PRUNE:
+     return "PRUNE";
+     break;
+  case PIM_IFJOIN_PRUNE_PENDING:
+     return "PRUNEP";
+     break;
+  case PIM_IFJOIN_PRUNE_TMP:
+     return "PRUNET";
+     break;
+  case PIM_IFJOIN_PRUNE_PENDING_TMP:
+     return "PRUNEPT";
+     break;
   }
 
   return "ifjoin_bad_state";
@@ -609,7 +625,7 @@ static int on_ifjoin_prune_pending_timer(struct thread *t)
     {
       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));
+               pim_ifchannel_ifjoin_name (ch->ifjoin_state, ch->flags));
     }
 
   return 0;
@@ -1198,7 +1214,7 @@ pim_ifchannel_set_star_g_join_state (struct pim_ifchannel *ch, int eom)
 
   if (PIM_DEBUG_PIM_TRACE)
     zlog_debug ("%s: %s %s eom: %d", __PRETTY_FUNCTION__,
-                pim_ifchannel_ifjoin_name(ch->ifjoin_state),
+                pim_ifchannel_ifjoin_name(ch->ifjoin_state, ch->flags),
                 ch->sg_str, eom);
   if (!ch->sources)
     return;
index c7084034a0a93c84e15ee8f5cd04c4dff5ebbd89..fe9fb9a7f10d6a086cb9544ccb6e475c9fafa862 100644 (file)
@@ -139,7 +139,7 @@ void pim_ifchannel_local_membership_del(struct interface *ifp,
 void pim_ifchannel_ifjoin_switch(const char *caller,
                                 struct pim_ifchannel *ch,
                                 enum pim_ifjoin_state new_state);
-const char *pim_ifchannel_ifjoin_name(enum pim_ifjoin_state ifjoin_state);
+const char *pim_ifchannel_ifjoin_name(enum pim_ifjoin_state ifjoin_state, int flags);
 const char *pim_ifchannel_ifassert_name(enum pim_ifassert_state ifassert_state);
 
 int pim_ifchannel_isin_oiflist(struct pim_ifchannel *ch);
index 759c955412365d8ec3cdbb8eeb6c3253e65f19b4..327e4f07d7fff5207d400c8ab5bb9bd65982d8c4 100644 (file)
@@ -744,11 +744,11 @@ pim_upstream_evaluate_join_desired_interface (struct pim_upstream *up,
 
   if (ch->upstream == up)
     {
-      if (!pim_macro_ch_lost_assert(ch) && pim_macro_chisin_joins_or_include(ch))
-       return 1;
-
       if (PIM_IF_FLAG_TEST_S_G_RPT(ch->flags))
        return 0;
+
+      if (!pim_macro_ch_lost_assert(ch) && pim_macro_chisin_joins_or_include(ch))
+       return 1;
     }
 
   /*