}
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;
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);
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)
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;
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);
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;
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))
{.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);
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