X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fplugins%2Flacp%2Fmux_machine.c;h=974dbd9dac9d75631d18f7410f4cba5dd1544223;hb=4c4223edf;hp=9c7cf7466600d7943568f7158e73cb4e7e05c68a;hpb=dd4889e21cb15df541cf3b2c2d8bb971ce460359;p=vpp.git diff --git a/src/plugins/lacp/mux_machine.c b/src/plugins/lacp/mux_machine.c index 9c7cf746660..974dbd9dac9 100644 --- a/src/plugins/lacp/mux_machine.c +++ b/src/plugins/lacp/mux_machine.c @@ -80,40 +80,39 @@ lacp_machine_t lacp_mux_machine = { }; 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; - lacp_main_t *lm = &lacp_main; + 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_start_periodic_timer (lm->vlib_main, sif, 0); + 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; } @@ -121,47 +120,44 @@ lacp_mux_action_detached (void *p1, void *p2) 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_main_t *lm = &lacp_main; - - 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_start_periodic_timer (lm->vlib_main, sif, 0); - - 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; } @@ -169,20 +165,19 @@ lacp_mux_action_waiting (void *p1, void *p2) 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; - lacp_main_t *lm = &lacp_main; + 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_start_periodic_timer (lm->vlib_main, sif, 0); - 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; @@ -198,8 +193,7 @@ format_mux_event (u8 * s, va_list * args) {.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); @@ -210,21 +204,36 @@ format_mux_event (u8 * s, va_list * args) } 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); } /*