X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2Fplugins%2Flacp%2Frx_machine.c;h=0d9d703ff42d12669a028d33754a63504d8e4500;hb=f52420d507f0ff810f5146b7153781e313d7bc07;hp=fd65aa3ae8ef8d1c32785975d87d1fd80ff1964f;hpb=dd4889e21cb15df541cf3b2c2d8bb971ce460359;p=vpp.git diff --git a/src/plugins/lacp/rx_machine.c b/src/plugins/lacp/rx_machine.c index fd65aa3ae8e..0d9d703ff42 100644 --- a/src/plugins/lacp/rx_machine.c +++ b/src/plugins/lacp/rx_machine.c @@ -206,11 +206,15 @@ lacp_compare_partner (slave_if_t * sif) } static void -lacp_record_pdu (slave_if_t * sif) +lacp_record_pdu (vlib_main_t * vm, slave_if_t * sif) { lacp_pdu_t *lacpdu = (lacp_pdu_t *) sif->last_rx_pkt; u8 match; + /* Transition PTX out of NO_PERIODIC if needed */ + if (!(sif->partner.state & LACP_STATE_LACP_ACTIVITY) && + (lacpdu->actor.port_info.state & LACP_STATE_LACP_ACTIVITY)) + lacp_ptx_post_short_timeout_event (vm, sif); match = lacp_compare_partner (sif); sif->partner = lacpdu->actor.port_info; sif->actor.state &= ~LACP_STATE_DEFAULTED; @@ -236,8 +240,8 @@ lacp_set_port_moved (vlib_main_t * vm, slave_if_t * sif, u8 val) int lacp_rx_action_initialize (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; + slave_if_t *sif = p2; lacp_set_port_unselected (vm, sif); lacp_record_default (sif); @@ -253,8 +257,8 @@ lacp_rx_action_initialize (void *p1, void *p2) int lacp_rx_action_port_disabled (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; + slave_if_t *sif = p2; sif->partner.state &= ~LACP_STATE_SYNCHRONIZATION; if (sif->port_moved) @@ -278,15 +282,14 @@ lacp_rx_action_port_disabled (void *p1, void *p2) int lacp_rx_action_expired (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; + slave_if_t *sif = p2; u8 timer_expired; lacp_main_t *lm = &lacp_main; sif->partner.state &= ~LACP_STATE_SYNCHRONIZATION; sif->partner.state |= LACP_STATE_LACP_TIMEOUT; - lacp_machine_dispatch (&lacp_ptx_machine, vm, sif, - LACP_PTX_EVENT_SHORT_TIMEOUT, &sif->ptx_state); + lacp_ptx_post_short_timeout_event (vm, sif); if (lacp_timer_is_running (sif->current_while_timer) && lacp_timer_is_expired (lm->vlib_main, sif->current_while_timer)) timer_expired = 1; @@ -307,8 +310,8 @@ lacp_rx_action_expired (void *p1, void *p2) int lacp_rx_action_lacp_disabled (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; + slave_if_t *sif = p2; lacp_set_port_unselected (vm, sif); lacp_record_default (sif); @@ -321,9 +324,10 @@ lacp_rx_action_lacp_disabled (void *p1, void *p2) int lacp_rx_action_defaulted (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; + slave_if_t *sif = p2; + lacp_stop_timer (&sif->current_while_timer); lacp_update_default_selected (vm, sif); lacp_record_default (sif); sif->actor.state &= ~LACP_STATE_EXPIRED; @@ -359,13 +363,13 @@ lacp_port_is_moved (vlib_main_t * vm, slave_if_t * sif) int lacp_rx_action_current (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; + slave_if_t *sif = p2; lacp_main_t *lm = &lacp_main; lacp_update_selected (vm, sif); lacp_update_ntt (vm, sif); - lacp_record_pdu (sif); + lacp_record_pdu (vm, sif); lacp_start_current_while_timer (lm->vlib_main, sif, sif->ttl_in_seconds); sif->actor.state &= ~LACP_STATE_EXPIRED; if (lacp_port_is_moved (vm, sif)) @@ -385,8 +389,7 @@ format_rx_event (u8 * s, va_list * args) {.str = NULL} }; int e = va_arg (*args, int); - lacp_event_struct *event_entry = - (lacp_event_struct *) & lacp_rx_event_array; + lacp_event_struct *event_entry = lacp_rx_event_array; if (e >= (sizeof (lacp_rx_event_array) / sizeof (*event_entry))) s = format (s, "Bad event %d", e); @@ -400,11 +403,25 @@ void lacp_rx_debug_func (slave_if_t * sif, int event, int state, lacp_fsm_state_t * transition) { - clib_warning ("%U-RX: event %U, old state %U, new state %U", - format_vnet_sw_if_index_name, vnet_get_main (), - sif->sw_if_index, format_rx_event, - event, format_rx_sm_state, state, format_rx_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-RX: %U, %U->%U%c", + format_vnet_sw_if_index_name, vnet_get_main (), + sif->sw_if_index, format_rx_event, event, + format_rx_sm_state, state, format_rx_sm_state, + transition->next_state, 0); } void