FD.io VPP
v17.07.01-10-g3be13f0
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, u32 *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) |
static uword | l2learn_node_fn (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 | |
static 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 75 of file l2_learn.c.
enum l2learn_error_t |
Enumerator | |
---|---|
L2LEARN_N_ERROR |
Definition at line 84 of file l2_learn.c.
enum l2learn_next_t |
Enumerator | |
---|---|
L2LEARN_NEXT_L2FWD | |
L2LEARN_NEXT_DROP | |
L2LEARN_N_NEXT |
Definition at line 98 of file l2_learn.c.
Definition at line 60 of file l2_learn.c.
|
static |
Set subinterface learn enable/disable.
The CLI format is: set interface l2 learn <interface> [disable]
Definition at line 517 of file l2_learn.c.
|
static |
clib_error_t* l2learn_init | ( | vlib_main_t * | vm | ) |
|
static |
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 222 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, | ||
u32 * | next0, | ||
u8 | timestamp | ||
) |
Perform learning on one packet based on the mac table lookup result.
Definition at line 109 of file l2_learn.c.
|
static |
(constructor) VLIB_CLI_COMMAND (int_learn_cli)
Definition at line 557 of file l2_learn.c.
|
static |
Definition at line 92 of file l2_learn.c.
|
static |
(constructor) VLIB_REGISTER_NODE (l2learn_node)
Definition at line 73 of file l2_learn.c.