FD.io VPP
v20.01-48-g3e0dafb74
Vector Packet Processing
|
Ethernet Bridge Learning. More...
Go to the source code of this file.
Data Structures | |
struct | l2learn_trace_t |
Macros | |
#define | foreach_l2learn_error |
Enumerations | |
enum | l2learn_error_t { L2LEARN_N_ERROR } |
enum | l2learn_next_t { L2LEARN_NEXT_L2FWD, L2LEARN_NEXT_DROP, L2LEARN_N_NEXT } |
Functions | |
static u8 * | format_l2learn_trace (u8 *s, va_list *args) |
static_always_inline void | l2learn_process (vlib_node_runtime_t *node, l2learn_main_t *msm, u64 *counter_base, vlib_buffer_t *b0, u32 sw_if_index0, l2fib_entry_key_t *key0, l2fib_entry_key_t *cached_key, u32 *count, l2fib_entry_result_t *result0, u16 *next0, u8 timestamp) |
Perform learning on one packet based on the mac table lookup result. More... | |
static_always_inline uword | l2learn_node_inline (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame, int do_trace) |
VLIB_NODE_FN() | l2learn_node (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame) |
clib_error_t * | l2learn_init (vlib_main_t *vm) |
static clib_error_t * | int_learn (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd) |
Set subinterface learn enable/disable. More... | |
static clib_error_t * | l2learn_config (vlib_main_t *vm, unformat_input_t *input) |
Variables | |
l2learn_main_t | l2learn_main |
vlib_node_registration_t | l2learn_node |
(constructor) VLIB_REGISTER_NODE (l2learn_node) More... | |
static char * | l2learn_error_strings [] |
static vlib_cli_command_t | int_learn_cli |
(constructor) VLIB_CLI_COMMAND (int_learn_cli) More... | |
Ethernet Bridge Learning.
Populate the mac table with entries mapping the packet's source mac + bridge domain ID to the input sw_if_index.
Note that learning and forwarding are separate graph nodes. This means that for a set of packets, all learning is performed first, then all nodes are forwarded. The forwarding is done based on the end-state of the mac table, instead of the state after each packet. Thus the forwarding results could differ in certain cases (mac move tests), but this not expected to cause problems in real-world networks. It is much simpler to separate learning and forwarding into separate nodes.
Definition in file l2_learn.c.
#define foreach_l2learn_error |
Definition at line 79 of file l2_learn.c.
enum l2learn_error_t |
Enumerator | |
---|---|
L2LEARN_N_ERROR |
Definition at line 88 of file l2_learn.c.
enum l2learn_next_t |
Enumerator | |
---|---|
L2LEARN_NEXT_L2FWD | |
L2LEARN_NEXT_DROP | |
L2LEARN_N_NEXT |
Definition at line 102 of file l2_learn.c.
|
static |
Set subinterface learn enable/disable.
The CLI format is: set interface l2 learn <interface> [disable]
Definition at line 486 of file l2_learn.c.
|
static |
clib_error_t* l2learn_init | ( | vlib_main_t * | vm | ) |
VLIB_NODE_FN() l2learn_node | ( | vlib_main_t * | vm, |
vlib_node_runtime_t * | node, | ||
vlib_frame_t * | frame | ||
) |
static_always_inline uword l2learn_node_inline | ( | vlib_main_t * | vm, |
vlib_node_runtime_t * | node, | ||
vlib_frame_t * | frame, | ||
int | do_trace | ||
) |
Definition at line 241 of file l2_learn.c.
static_always_inline void l2learn_process | ( | vlib_node_runtime_t * | node, |
l2learn_main_t * | msm, | ||
u64 * | counter_base, | ||
vlib_buffer_t * | b0, | ||
u32 | sw_if_index0, | ||
l2fib_entry_key_t * | key0, | ||
l2fib_entry_key_t * | cached_key, | ||
u32 * | count, | ||
l2fib_entry_result_t * | result0, | ||
u16 * | next0, | ||
u8 | timestamp | ||
) |
Perform learning on one packet based on the mac table lookup result.
Definition at line 113 of file l2_learn.c.
|
static |
(constructor) VLIB_CLI_COMMAND (int_learn_cli)
Definition at line 526 of file l2_learn.c.
|
static |
Definition at line 96 of file l2_learn.c.
l2learn_main_t l2learn_main |
Definition at line 33 of file l2_learn.c.
vlib_node_registration_t l2learn_node |
(constructor) VLIB_REGISTER_NODE (l2learn_node)
Definition at line 430 of file l2_learn.c.