bonding lacp: replace slave string with member
[vpp.git] / src / plugins / lacp / mux_machine.c
index f33c264..974dbd9 100644 (file)
@@ -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;
+  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;
 }
@@ -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_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;
 }
@@ -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;
+  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;
@@ -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);
 }
 
 /*