15 #ifndef __included_lacp_node_h__ 16 #define __included_lacp_node_h__ 46 #define LACP_DBG(n, args...) \ 48 lacp_main_t *_lm = &lacp_main; \ 49 if (_lm->debug || n->debug) \ 50 clib_warning (args); \ 53 #define LACP_DBG2(n, e, s, m, t) \ 55 lacp_main_t *_lm = &lacp_main; \ 56 if ((m)->debug && (_lm->debug || (n)->debug)) \ 57 (*m->debug)(n, e, s, t); \ 61 #define foreach_lacp_error \ 62 _ (NONE, "good lacp packets -- consumed") \ 63 _ (CACHE_HIT, "good lacp packets -- cache hit") \ 64 _ (UNSUPPORTED, "unsupported slow protocol packets") \ 65 _ (TOO_SMALL, "bad lacp packets -- packet too small") \ 66 _ (BAD_TLV, "bad lacp packets -- bad TLV length") \ 67 _ (BAD_KEY, "Bad key") \ 68 _ (LOOPBACK_PORT, "loopback port") \ 69 _ (DISABLED, "lacp packets received on disabled interfaces") 73 #define _(sym,str) LACP_ERROR_##sym, 79 #define SECS_IN_A_DAY 86400.0 97 u8 interface_name[64];
102 u8 bond_interface_name[64];
110 u8 partner_system[6];
152 u16 port_number,
u32 group);
170 return (timer != 0.0);
178 return (now >= timer);
185 #define _(b, s, n) {.bit = b, .str = #s, }, 190 int state = va_arg (*args,
int);
193 if (state >= (
sizeof (lacp_rx_sm_state_array) /
sizeof (*state_entry)))
194 s =
format (s,
"Bad state %d", state);
196 s =
format (s,
"%s", state_entry[state].str);
205 #define _(b, s, n) {.bit = b, .str = #s, }, 210 int state = va_arg (*args,
int);
213 if (state >= (
sizeof (lacp_tx_sm_state_array) /
sizeof (*state_entry)))
214 s =
format (s,
"Bad state %d", state);
216 s =
format (s,
"%s", state_entry[state].str);
225 #define _(b, s, n) {.bit = b, .str = #s, }, 230 int state = va_arg (*args,
int);
233 if (state >= (
sizeof (lacp_mux_sm_state_array) /
sizeof (*state_entry)))
234 s =
format (s,
"Bad state %d", state);
236 s =
format (s,
"%s", state_entry[state].str);
245 #define _(b, s, n) {.bit = b, .str = #s, }, 250 int state = va_arg (*args,
int);
253 if (state >= (
sizeof (lacp_ptx_sm_state_array) /
sizeof (*state_entry)))
254 s =
format (s,
"Bad state %d", state);
256 s =
format (s,
"%s", state_entry[state].str);
264 if (val & (1 << bit))
void lacp_init_ptx_machine(vlib_main_t *vm, member_if_t *mif)
void lacp_periodic(vlib_main_t *vm)
void lacp_init_state_machines(vlib_main_t *vm, member_if_t *mif)
static f64 vlib_time_now(vlib_main_t *vm)
int lacp_dump_ifs(lacp_interface_details_t **out_bondids)
u16 partner_system_priority
static u8 * format_rx_sm_state(u8 *s, va_list *args)
static u8 lacp_timer_is_running(f64 timer)
description fragment has unexpected format
static u8 lacp_timer_is_expired(vlib_main_t *vm, f64 timer)
lacp_error_t lacp_input(vlib_main_t *vm, vlib_buffer_t *b0, u32 bi0)
void lacp_send_lacp_pdu(vlib_main_t *vm, member_if_t *mif)
void lacp_init_tx_machine(vlib_main_t *vm, member_if_t *mif)
u16 partner_port_priority
LACP interface details struct.
static void lacp_stop_timer(f64 *timer)
vlib_main_t * vm
X-connect all packets from the HOST to the PHY.
int lacp_selection_logic(vlib_main_t *vm, member_if_t *mif)
void lacp_create_periodic_process(void)
void lacp_init_mux_machine(vlib_main_t *vm, member_if_t *mif)
lacp_packet_template_id_t
static u8 * format_mux_sm_state(u8 *s, va_list *args)
#define foreach_lacp_error
static u8 * format_ptx_sm_state(u8 *s, va_list *args)
u8 * lacp_input_format_trace(u8 *s, va_list *args)
u32 lacp_process_node_index
u16 actor_system_priority
VLIB buffer representation.
static int lacp_bit_test(u8 val, u8 bit)
clib_error_t * lacp_plugin_api_hookup(vlib_main_t *vm)
vl_api_dhcp_client_state_t state
static u8 * format_tx_sm_state(u8 *s, va_list *args)
u16 msg_id_base
API message ID base.
void lacp_init_rx_machine(vlib_main_t *vm, member_if_t *mif)
marker_packet_template_id_t
void lacp_init_neighbor(member_if_t *mif, u8 *hw_address, u16 port_number, u32 group)