2 * Copyright (c) 2017 Cisco and/or its affiliates.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at:
7 * http://www.apache.org/licenses/LICENSE-2.0
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
16 #ifndef ___LACP_PTX_MACHINE_H__
17 #define ___LACP_PTX_MACHINE_H__
20 #include <lacp/machine.h>
22 #define foreach_lacp_ptx_event \
23 _(0, BEGIN, "begin") \
24 _(1, LONG_TIMEOUT, "long tiemout") \
25 _(2, TIMER_EXPIRED, "timer expired") \
26 _(3, SHORT_TIMEOUT, "short timeout")
30 #define _(a, b, c) LACP_PTX_EVENT_##b = (a),
31 foreach_lacp_ptx_event
35 #define foreach_lacp_ptx_sm_state \
36 _(0, NO_PERIODIC, "no periodic") \
37 _(1, FAST_PERIODIC, "fast periodic") \
38 _(2, SLOW_PERIODIC, "slow periodic") \
39 _(3, PERIODIC_TX, "periodic transmission")
43 #define _(a, b, c) LACP_PTX_STATE_##b = (a),
44 foreach_lacp_ptx_sm_state
46 } lacp_ptx_sm_state_t;
48 extern lacp_machine_t lacp_ptx_machine;
50 int lacp_ptx_action_no_periodic (void *p1, void *p2);
51 int lacp_ptx_action_slow_periodic (void *p1, void *p2);
52 int lacp_ptx_action_fast_periodic (void *p1, void *p2);
53 int lacp_ptx_action_timer_expired (void *p1, void *p2);
54 void lacp_ptx_debug_func (slave_if_t * sif, int event, int state,
55 lacp_fsm_state_t * transition);
57 #define LACP_ACTION_NO_PERIODIC \
58 LACP_ACTION_ROUTINE(lacp_ptx_action_no_periodic)
59 #define LACP_ACTION_SLOW_PERIODIC \
60 LACP_ACTION_ROUTINE(lacp_ptx_action_slow_periodic)
61 #define LACP_ACTION_FAST_PERIODIC \
62 LACP_ACTION_ROUTINE(lacp_ptx_action_fast_periodic)
63 #define LACP_ACTION_TIMER_EXPIRED \
64 LACP_ACTION_ROUTINE(lacp_ptx_action_timer_expired)
67 lacp_start_periodic_timer (vlib_main_t * vm, slave_if_t * sif, u8 expiration)
69 sif->periodic_timer = vlib_time_now (vm) + expiration;
73 lacp_schedule_periodic_timer (vlib_main_t * vm, slave_if_t * sif)
75 // do fast rate if partner is in short timeout or
76 // we are not yet synchronized
77 if ((sif->partner.state & LACP_STATE_LACP_TIMEOUT) ||
78 (((sif->actor.state & (LACP_STATE_SYNCHRONIZATION |
79 LACP_STATE_COLLECTING |
80 LACP_STATE_DISTRIBUTING)) !=
81 (LACP_STATE_SYNCHRONIZATION | LACP_STATE_COLLECTING |
82 LACP_STATE_DISTRIBUTING))
83 && (sif->partner.state & LACP_STATE_AGGREGATION)))
84 lacp_start_periodic_timer (vm, sif, LACP_FAST_PERIODIC_TIMER);
86 lacp_start_periodic_timer (vm, sif, LACP_SLOW_PERIODIC_TIMER);
89 #endif /* __LACP_PTX_MACHINE_H__ */
92 * fd.io coding-style-patch-verification: ON
95 * eval: (c-set-style "gnu")