};
static void
-lacp_detach_mux_from_aggregator (vlib_main_t * vm, slave_if_t * sif)
+lacp_detach_mux_from_aggregator (vlib_main_t * vm, member_if_t * mif)
{
- sif->actor.state &= ~LACP_STATE_SYNCHRONIZATION;
- sif->ready = 0;
- sif->ready_n = 0;
+ mif->actor.state &= ~LACP_STATE_SYNCHRONIZATION;
+ mif->ready = 0;
+ mif->ready_n = 0;
}
static void
-lacp_attach_mux_to_aggregator (vlib_main_t * vm, slave_if_t * sif)
+lacp_attach_mux_to_aggregator (vlib_main_t * vm, member_if_t * mif)
{
- sif->actor.state |= LACP_STATE_SYNCHRONIZATION;
+ mif->actor.state |= LACP_STATE_SYNCHRONIZATION;
}
int
lacp_mux_action_detached (void *p1, void *p2)
{
- vlib_main_t *vm = (vlib_main_t *) p1;
- slave_if_t *sif = (slave_if_t *) p2;
+ vlib_main_t *vm = p1;
+ member_if_t *mif = p2;
- lacp_detach_mux_from_aggregator (vm, sif);
- sif->actor.state &= ~LACP_STATE_COLLECTING;
- bond_disable_collecting_distributing (vm, sif);
- sif->actor.state &= ~LACP_STATE_DISTRIBUTING;
- sif->ntt = 1;
- lacp_machine_dispatch (&lacp_tx_machine, vm, sif, LACP_TX_EVENT_NTT,
- &sif->tx_state);
+ lacp_detach_mux_from_aggregator (vm, mif);
+ mif->actor.state &= ~LACP_STATE_COLLECTING;
+ bond_disable_collecting_distributing (vm, mif);
+ mif->actor.state &= ~LACP_STATE_DISTRIBUTING;
+ mif->ntt = 1;
+ lacp_start_periodic_timer (vm, mif, 0);
- if (sif->selected == LACP_PORT_SELECTED)
- lacp_machine_dispatch (&lacp_mux_machine, vm, sif,
- LACP_MUX_EVENT_SELECTED, &sif->mux_state);
+ if (mif->selected == LACP_PORT_SELECTED)
+ lacp_machine_dispatch (&lacp_mux_machine, vm, mif,
+ LACP_MUX_EVENT_SELECTED, &mif->mux_state);
- if (sif->selected == LACP_PORT_STANDBY)
- lacp_machine_dispatch (&lacp_mux_machine, vm, sif, LACP_MUX_EVENT_STANDBY,
- &sif->mux_state);
+ if (mif->selected == LACP_PORT_STANDBY)
+ lacp_machine_dispatch (&lacp_mux_machine, vm, mif, LACP_MUX_EVENT_STANDBY,
+ &mif->mux_state);
return 0;
}
int
lacp_mux_action_attached (void *p1, void *p2)
{
- vlib_main_t *vm = (vlib_main_t *) p1;
- slave_if_t *sif = (slave_if_t *) p2;
-
- lacp_attach_mux_to_aggregator (vm, sif);
- sif->actor.state &= ~LACP_STATE_COLLECTING;
- bond_disable_collecting_distributing (vm, sif);
- sif->actor.state &= ~LACP_STATE_DISTRIBUTING;
- sif->ntt = 1;
- lacp_machine_dispatch (&lacp_tx_machine, vm, sif, LACP_TX_EVENT_NTT,
- &sif->tx_state);
-
- if ((sif->selected == LACP_PORT_UNSELECTED) ||
- (sif->selected == LACP_PORT_STANDBY))
- lacp_machine_dispatch (&lacp_mux_machine, vm, sif,
- LACP_MUX_EVENT_UNSELECTED, &sif->mux_state);
-
- if ((sif->selected == LACP_PORT_SELECTED) &&
- (sif->partner.state & LACP_STATE_SYNCHRONIZATION))
- lacp_machine_dispatch (&lacp_mux_machine, vm, sif, LACP_MUX_EVENT_SYNC,
- &sif->mux_state);
+ vlib_main_t *vm = p1;
+ member_if_t *mif = p2;
+
+ lacp_attach_mux_to_aggregator (vm, mif);
+ mif->actor.state &= ~LACP_STATE_COLLECTING;
+ bond_disable_collecting_distributing (vm, mif);
+ mif->actor.state &= ~LACP_STATE_DISTRIBUTING;
+ mif->ntt = 1;
+ lacp_start_periodic_timer (vm, mif, 0);
+
+ if ((mif->selected == LACP_PORT_UNSELECTED) ||
+ (mif->selected == LACP_PORT_STANDBY))
+ lacp_machine_dispatch (&lacp_mux_machine, vm, mif,
+ LACP_MUX_EVENT_UNSELECTED, &mif->mux_state);
+
+ if ((mif->selected == LACP_PORT_SELECTED) &&
+ (mif->partner.state & LACP_STATE_SYNCHRONIZATION))
+ lacp_machine_dispatch (&lacp_mux_machine, vm, mif, LACP_MUX_EVENT_SYNC,
+ &mif->mux_state);
return 0;
}
int
lacp_mux_action_waiting (void *p1, void *p2)
{
- vlib_main_t *vm = (vlib_main_t *) p1;
- slave_if_t *sif = (slave_if_t *) p2;
- lacp_main_t *lm = &lacp_main;
+ vlib_main_t *vm = p1;
+ member_if_t *mif = p2;
- if (!lacp_timer_is_running (sif->wait_while_timer))
- lacp_start_wait_while_timer (lm->vlib_main, sif,
- LACP_AGGREGATE_WAIT_TIME);
+ if (!lacp_timer_is_running (mif->wait_while_timer))
+ lacp_start_wait_while_timer (vm, mif, LACP_AGGREGATE_WAIT_TIME);
- if ((sif->selected == LACP_PORT_SELECTED) && sif->ready)
- lacp_machine_dispatch (&lacp_mux_machine, vm, sif,
- LACP_MUX_EVENT_READY, &sif->mux_state);
+ if ((mif->selected == LACP_PORT_SELECTED) && mif->ready)
+ lacp_machine_dispatch (&lacp_mux_machine, vm, mif,
+ LACP_MUX_EVENT_READY, &mif->mux_state);
- if (sif->selected == LACP_PORT_UNSELECTED)
- lacp_machine_dispatch (&lacp_mux_machine, vm, sif,
- LACP_MUX_EVENT_UNSELECTED, &sif->mux_state);
+ if (mif->selected == LACP_PORT_UNSELECTED)
+ lacp_machine_dispatch (&lacp_mux_machine, vm, mif,
+ LACP_MUX_EVENT_UNSELECTED, &mif->mux_state);
return 0;
}
int
lacp_mux_action_collecting_distributing (void *p1, void *p2)
{
- vlib_main_t *vm = (vlib_main_t *) p1;
- slave_if_t *sif = (slave_if_t *) p2;
+ vlib_main_t *vm = p1;
+ member_if_t *mif = p2;
- sif->actor.state |= LACP_STATE_SYNCHRONIZATION | LACP_STATE_COLLECTING |
+ mif->actor.state |= LACP_STATE_SYNCHRONIZATION | LACP_STATE_COLLECTING |
LACP_STATE_DISTRIBUTING;
- bond_enable_collecting_distributing (vm, sif);
- sif->ntt = 1;
- lacp_machine_dispatch (&lacp_tx_machine, vm, sif, LACP_TX_EVENT_NTT,
- &sif->tx_state);
- if ((sif->selected == LACP_PORT_UNSELECTED) ||
- (sif->selected == LACP_PORT_STANDBY) ||
- !(sif->partner.state & LACP_STATE_SYNCHRONIZATION))
- lacp_machine_dispatch (&lacp_mux_machine, vm, sif,
- LACP_MUX_EVENT_UNSELECTED, &sif->mux_state);
+ bond_enable_collecting_distributing (vm, mif);
+ mif->ntt = 1;
+ lacp_start_periodic_timer (vm, mif, 0);
+ if ((mif->selected == LACP_PORT_UNSELECTED) ||
+ (mif->selected == LACP_PORT_STANDBY) ||
+ !(mif->partner.state & LACP_STATE_SYNCHRONIZATION))
+ lacp_machine_dispatch (&lacp_mux_machine, vm, mif,
+ LACP_MUX_EVENT_UNSELECTED, &mif->mux_state);
return 0;
{.str = NULL}
};
int e = va_arg (*args, int);
- lacp_event_struct *event_entry =
- (lacp_event_struct *) & lacp_mux_event_array;
+ lacp_event_struct *event_entry = lacp_mux_event_array;
if (e >= (sizeof (lacp_mux_event_array) / sizeof (*event_entry)))
s = format (s, "Bad event %d", e);
}
void
-lacp_mux_debug_func (slave_if_t * sif, int event, int state,
+lacp_mux_debug_func (member_if_t * mif, int event, int state,
lacp_fsm_state_t * transition)
{
- clib_warning ("%U-MUX: event %U, old state %U, new state %U",
- format_vnet_sw_if_index_name, vnet_get_main (),
- sif->sw_if_index, format_mux_event,
- event, format_mux_sm_state, state, format_mux_sm_state,
- transition->next_state);
+ vlib_worker_thread_t *w = vlib_worker_threads + os_get_thread_index ();
+ /* *INDENT-OFF* */
+ ELOG_TYPE_DECLARE (e) =
+ {
+ .format = "%s",
+ .format_args = "T4",
+ };
+ /* *INDENT-ON* */
+ struct
+ {
+ u32 event;
+ } *ed = 0;
+
+ ed = ELOG_TRACK_DATA (&vlib_global_main.elog_main, e, w->elog_track);
+ ed->event =
+ elog_string (&vlib_global_main.elog_main, "%U-MUX: %U, %U->%U%c",
+ format_vnet_sw_if_index_name, vnet_get_main (),
+ mif->sw_if_index, format_mux_event, event,
+ format_mux_sm_state, state, format_mux_sm_state,
+ transition->next_state, 0);
}
void
-lacp_init_mux_machine (vlib_main_t * vm, slave_if_t * sif)
+lacp_init_mux_machine (vlib_main_t * vm, member_if_t * mif)
{
- lacp_machine_dispatch (&lacp_mux_machine, vm, sif, LACP_MUX_EVENT_BEGIN,
- &sif->mux_state);
+ lacp_machine_dispatch (&lacp_mux_machine, vm, mif, LACP_MUX_EVENT_BEGIN,
+ &mif->mux_state);
}
/*