return 0;
break;
case PIM_UPSTREAM_JOINED:
+ upstream->join_state = PIM_UPSTREAM_PRUNE;
+ pim_channel_del_oif (upstream->channel_oil, pim_regiface, PIM_OIF_FLAG_PROTO_PIM);
+ pim_upstream_start_register_stop_timer (upstream, 0);
case PIM_UPSTREAM_JOIN_PENDING:
upstream->join_state = PIM_UPSTREAM_PRUNE;
pim_upstream_start_register_stop_timer (upstream, 0);
- pim_channel_del_oif (upstream->channel_oil, pim_regiface, PIM_OIF_FLAG_PROTO_PIM);
return 0;
break;
}
{
enum pim_upstream_state old_state = up->join_state;
- up->join_state = new_state;
- up->state_transition = pim_time_monotonic_sec();
-
if (PIM_DEBUG_PIM_EVENTS) {
zlog_debug("%s: PIM_UPSTREAM_%s: (S,G)=%s",
__PRETTY_FUNCTION__,
pim_str_sg_dump (&up->sg));
}
+ /*
+ * This code still needs work.
+ */
+ switch (up->join_state)
+ {
+ case PIM_UPSTREAM_PRUNE:
+ case PIM_UPSTREAM_JOIN_PENDING:
+ break;
+ case PIM_UPSTREAM_NOTJOINED:
+ case PIM_UPSTREAM_JOINED:
+ up->join_state = new_state;
+ up->state_transition = pim_time_monotonic_sec();
+
+ break;
+ }
+
pim_upstream_update_assert_tracking_desired(up);
if (new_state == PIM_UPSTREAM_JOINED) {
struct pim_upstream *up;
struct pim_rpf *rpg;
struct ip ip_hdr;
-
up = THREAD_ARG (t);
THREAD_TIMER_OFF (up->t_rs_timer);
{
case PIM_UPSTREAM_JOIN_PENDING:
up->join_state = PIM_UPSTREAM_JOINED;
+ pim_channel_add_oif (up->channel_oil, pim_regiface, PIM_OIF_FLAG_PROTO_PIM);
+ break;
+ case PIM_UPSTREAM_JOINED:
break;
case PIM_UPSTREAM_PRUNE:
up->join_state = PIM_UPSTREAM_JOIN_PENDING;