From 0c2ebf00a628772c09ec97f970ae34b8076e9976 Mon Sep 17 00:00:00 2001 From: anuradhak Date: Thu, 9 Mar 2017 09:52:59 -0800 Subject: [PATCH] pimd: add new/distinct enumeration for pim register state With the separation of register-state and upstream-join-state we no longer need an enumeration that covers both states. This commit includes the following - 1. Defined new enumeration for reg state (this 1:1 with RFC4601). 2. Dropped JOIN_PENDING enum value from upstream join state. RFC4601 only define two values NOT_JOINED and JOINED for this state. Signed-off-by: Anuradha Karuppiah Reviewed-by: Donald Sharp Ticket: CM-14700 Testing Done: Verified register setup manually and ran pim-smoke --- pimd/pim_cmd.c | 2 +- pimd/pim_mroute.c | 4 ++-- pimd/pim_register.c | 12 +++++------ pimd/pim_upstream.c | 52 +++++++++++++++++++++------------------------ pimd/pim_upstream.h | 12 ++++++++--- 5 files changed, 42 insertions(+), 40 deletions(-) diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c index 4183175f86..0895ce21cf 100644 --- a/pimd/pim_cmd.c +++ b/pimd/pim_cmd.c @@ -1692,7 +1692,7 @@ static void pim_show_upstream(struct vty *vty, u_char uj) pim_time_timer_to_hhmmss (msdp_reg_timer, sizeof (msdp_reg_timer), up->t_msdp_reg_timer); if (pim_if_connected_to_source (up->rpf.source_nexthop.interface, up->sg.src)) - strcpy (state_str, pim_upstream_state2str (up->reg_state)); + pim_reg_state2str (up->reg_state, state_str); else strcpy (state_str, pim_upstream_state2str (up->join_state)); diff --git a/pimd/pim_mroute.c b/pimd/pim_mroute.c index 3f483a25ad..9401475813 100644 --- a/pimd/pim_mroute.c +++ b/pimd/pim_mroute.c @@ -189,7 +189,7 @@ pim_mroute_msg_nocache (int fd, struct interface *ifp, const struct igmpmsg *msg up->channel_oil->cc.pktcnt++; PIM_UPSTREAM_FLAG_SET_FHR(up->flags); pim_channel_add_oif (up->channel_oil, pim_regiface, PIM_OIF_FLAG_PROTO_PIM); - up->reg_state = PIM_UPSTREAM_JOINED; + up->reg_state = PIM_REG_JOIN; return 0; } @@ -453,7 +453,7 @@ pim_mroute_msg_wrvifwhole (int fd, struct interface *ifp, const char *buf) up->channel_oil = oil; up->channel_oil->cc.pktcnt++; pim_channel_add_oif (up->channel_oil, pim_regiface, PIM_OIF_FLAG_PROTO_PIM); - up->reg_state = PIM_UPSTREAM_JOINED; + up->reg_state = PIM_REG_JOIN; pim_upstream_inherited_olist (up); // Send the packet to the RP diff --git a/pimd/pim_register.c b/pimd/pim_register.c index 2d4d296598..99ddd45d7f 100644 --- a/pimd/pim_register.c +++ b/pimd/pim_register.c @@ -124,17 +124,17 @@ pim_register_stop_recv (uint8_t *buf, int buf_size) switch (upstream->reg_state) { - case PIM_UPSTREAM_NOTJOINED: - case PIM_UPSTREAM_PRUNE: + case PIM_REG_NOINFO: + case PIM_REG_PRUNE: return 0; break; - case PIM_UPSTREAM_JOINED: - upstream->reg_state = PIM_UPSTREAM_PRUNE; + case PIM_REG_JOIN: + upstream->reg_state = PIM_REG_PRUNE; pim_channel_del_oif (upstream->channel_oil, pim_regiface, PIM_OIF_FLAG_PROTO_PIM); pim_upstream_start_register_stop_timer (upstream, 0); break; - case PIM_UPSTREAM_JOIN_PENDING: - upstream->reg_state = PIM_UPSTREAM_PRUNE; + case PIM_REG_JOIN_PENDING: + upstream->reg_state = PIM_REG_PRUNE; pim_upstream_start_register_stop_timer (upstream, 0); return 0; break; diff --git a/pimd/pim_upstream.c b/pimd/pim_upstream.c index 68652f67fd..5324d555ec 100644 --- a/pimd/pim_upstream.c +++ b/pimd/pim_upstream.c @@ -485,8 +485,6 @@ pim_upstream_switch(struct pim_upstream *up, up->state_transition = pim_time_monotonic_sec (); } break; - case PIM_UPSTREAM_JOIN_PENDING: - break; case PIM_UPSTREAM_NOTJOINED: case PIM_UPSTREAM_JOINED: up->join_state = new_state; @@ -509,7 +507,7 @@ pim_upstream_switch(struct pim_upstream *up, PIM_UPSTREAM_FLAG_SET_FHR(up->flags); if (!old_fhr && PIM_UPSTREAM_FLAG_TEST_SRC_STREAM(up->flags)) { - up->reg_state = PIM_UPSTREAM_JOINED; + up->reg_state = PIM_REG_JOIN; pim_upstream_keep_alive_timer_start (up, qpim_keep_alive_time); pim_channel_add_oif (up->channel_oil, pim_regiface, PIM_OIF_FLAG_PROTO_PIM); } @@ -603,7 +601,7 @@ pim_upstream_new (struct prefix_sg *sg, up->t_rs_timer = NULL; up->t_msdp_reg_timer = NULL; up->join_state = 0; - up->reg_state = 0; + up->reg_state = PIM_REG_NOINFO; up->state_transition = pim_time_monotonic_sec(); up->channel_oil = NULL; up->sptbit = PIM_UPSTREAM_SPTBIT_FALSE; @@ -959,8 +957,8 @@ static void pim_upstream_fhr_kat_expiry(struct pim_upstream *up) THREAD_OFF(up->t_rs_timer); /* remove regiface from the OIL if it is there*/ pim_channel_del_oif (up->channel_oil, pim_regiface, PIM_OIF_FLAG_PROTO_PIM); - /* move to "not-joined" */ - up->reg_state = PIM_UPSTREAM_NOTJOINED; + /* clear the register state */ + up->reg_state = PIM_REG_NOINFO; PIM_UPSTREAM_FLAG_UNSET_FHR(up->flags); } @@ -974,9 +972,9 @@ static void pim_upstream_fhr_kat_start(struct pim_upstream *up) zlog_debug ("kat started on %s; set fhr reg state to joined", up->sg_str); PIM_UPSTREAM_FLAG_SET_FHR(up->flags); - if (up->reg_state == PIM_UPSTREAM_NOTJOINED) { + if (up->reg_state == PIM_REG_NOINFO) { pim_channel_add_oif (up->channel_oil, pim_regiface, PIM_OIF_FLAG_PROTO_PIM); - up->reg_state = PIM_UPSTREAM_JOINED; + up->reg_state = PIM_REG_JOIN; } } } @@ -1203,9 +1201,6 @@ pim_upstream_state2str (enum pim_upstream_state join_state) case PIM_UPSTREAM_JOINED: return "Joined"; break; - case PIM_UPSTREAM_JOIN_PENDING: - return "JoinPending"; - break; case PIM_UPSTREAM_PRUNE: return "Prune"; break; @@ -1214,24 +1209,24 @@ pim_upstream_state2str (enum pim_upstream_state join_state) } const char * -pim_reg_state2str (enum pim_upstream_state join_state, char *state_str) +pim_reg_state2str (enum pim_reg_state reg_state, char *state_str) { - switch (join_state) + switch (reg_state) { - case PIM_UPSTREAM_NOTJOINED: - strcpy (state_str, "NoInfo"); + case PIM_REG_NOINFO: + strcpy (state_str, "RegNoInfo"); break; - case PIM_UPSTREAM_JOINED: - strcpy (state_str, "Joined"); + case PIM_REG_JOIN: + strcpy (state_str, "RegJoined"); break; - case PIM_UPSTREAM_JOIN_PENDING: - strcpy (state_str, "JoinPending"); + case PIM_REG_JOIN_PENDING: + strcpy (state_str, "RegJoinPend"); break; - case PIM_UPSTREAM_PRUNE: - strcpy (state_str, "Prune"); + case PIM_REG_PRUNE: + strcpy (state_str, "RegPrune"); break; default: - strcpy (state_str, "Unknown"); + strcpy (state_str, "RegUnknown"); } return state_str; } @@ -1249,20 +1244,21 @@ pim_upstream_register_stop_timer (struct thread *t) if (PIM_DEBUG_TRACE) { + char state_str[PIM_REG_STATE_STR_LEN]; zlog_debug ("%s: (S,G)=%s upstream register stop timer %s", __PRETTY_FUNCTION__, up->sg_str, - pim_upstream_state2str(up->reg_state)); + pim_reg_state2str(up->reg_state, state_str)); } switch (up->reg_state) { - case PIM_UPSTREAM_JOIN_PENDING: - up->reg_state = PIM_UPSTREAM_JOINED; + case PIM_REG_JOIN_PENDING: + up->reg_state = PIM_REG_JOIN; pim_channel_add_oif (up->channel_oil, pim_regiface, PIM_OIF_FLAG_PROTO_PIM); break; - case PIM_UPSTREAM_JOINED: + case PIM_REG_JOIN: break; - case PIM_UPSTREAM_PRUNE: + case PIM_REG_PRUNE: pim_ifp = up->rpf.source_nexthop.interface->info; if (!pim_ifp) { @@ -1271,7 +1267,7 @@ pim_upstream_register_stop_timer (struct thread *t) __PRETTY_FUNCTION__, up->rpf.source_nexthop.interface->name); return 0; } - up->reg_state = PIM_UPSTREAM_JOIN_PENDING; + up->reg_state = PIM_REG_JOIN_PENDING; pim_upstream_start_register_stop_timer (up, 1); if (((up->channel_oil->cc.lastused/100) > PIM_KEEPALIVE_PERIOD) && diff --git a/pimd/pim_upstream.h b/pimd/pim_upstream.h index 3f0abc16c2..cd7c16be75 100644 --- a/pimd/pim_upstream.h +++ b/pimd/pim_upstream.h @@ -61,10 +61,16 @@ enum pim_upstream_state { PIM_UPSTREAM_NOTJOINED, PIM_UPSTREAM_JOINED, - PIM_UPSTREAM_JOIN_PENDING, PIM_UPSTREAM_PRUNE, }; +enum pim_reg_state { + PIM_REG_NOINFO, + PIM_REG_JOIN, + PIM_REG_JOIN_PENDING, + PIM_REG_PRUNE, +}; + enum pim_upstream_sptbit { PIM_UPSTREAM_SPTBIT_FALSE, PIM_UPSTREAM_SPTBIT_TRUE @@ -88,7 +94,7 @@ struct pim_upstream { struct list *sources; enum pim_upstream_state join_state; - enum pim_upstream_state reg_state; + enum pim_reg_state reg_state; enum pim_upstream_sptbit sptbit; int ref_count; @@ -165,7 +171,7 @@ void pim_upstream_switch (struct pim_upstream *up, enum pim_upstream_state new_s const char *pim_upstream_state2str (enum pim_upstream_state join_state); #define PIM_REG_STATE_STR_LEN 12 -const char *pim_reg_state2str (enum pim_upstream_state state, char *state_str); +const char *pim_reg_state2str (enum pim_reg_state state, char *state_str); int pim_upstream_inherited_olist_decide (struct pim_upstream *up); int pim_upstream_inherited_olist (struct pim_upstream *up); -- 2.39.5