FD.io VPP  v18.04-17-g3a0d853
Vector Packet Processing
l2_fib.c File Reference

Ethernet MAC Address FIB Table Management. More...

+ Include dependency graph for l2_fib.c:

Go to the source code of this file.

Macros

#define vl_typedefs   /* define message structures */
 
#define vl_endianfun   /* define message structures */
 
#define TIME_MAX   (1.7976931348623157e+308)
 

Functions

static void incr_mac_address (u8 *mac)
 
u8format_vnet_sw_if_index_name_with_NA (u8 *s, va_list *args)
 Format sw_if_index. More...
 
void l2fib_table_dump (u32 bd_index, l2fib_entry_key_t **l2fe_key, l2fib_entry_result_t **l2fe_res)
 
static clib_error_tshow_l2fib (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
 Display the contents of the l2fib. More...
 
void l2fib_clear_table (void)
 
static clib_error_tclear_l2fib (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
 Clear all entries in L2FIB. More...
 
static l2fib_seq_num_t l2fib_cur_seq_num (u32 bd_index, u32 sw_if_index)
 
void l2fib_add_entry (u8 *mac, u32 bd_index, u32 sw_if_index, u8 static_mac, u8 filter_mac, u8 bvi_mac)
 Add an entry to the l2fib. More...
 
static clib_error_tl2fib_add (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
 Add an entry to the L2FIB. More...
 
static clib_error_tl2fib_test_command_fn (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
 
static u32 l2fib_del_entry_by_key (u64 raw_key)
 Delete an entry from the l2fib. More...
 
u32 l2fib_del_entry (u8 *mac, u32 bd_index)
 Delete an entry from the l2fib. More...
 
static clib_error_tl2fib_del (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
 Delete an entry from the L2FIB. More...
 
void l2fib_start_ager_scan (vlib_main_t *vm)
 Kick off ager to scan MACs to age/delete MAC entries. More...
 
void l2fib_flush_int_mac (vlib_main_t *vm, u32 sw_if_index)
 Flush all non static MACs from an interface. More...
 
void l2fib_flush_bd_mac (vlib_main_t *vm, u32 bd_index)
 Flush all non static MACs in a bridge domain. More...
 
void l2fib_flush_all_mac (vlib_main_t *vm)
 Flush all non static MACs - flushes all valid BDs. More...
 
static clib_error_tl2fib_flush_mac_int (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
 Flush MACs, except static ones, associated with an interface The CLI format is: l2fib flush-mac interface <if-name> More...
 
static clib_error_tl2fib_flush_mac_all (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
 Flush all MACs, except static ones The CLI format is: l2fib flush-mac all. More...
 
static clib_error_tl2fib_flush_mac_bd (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
 Flush bridge-domain MACs except static ones. More...
 
clib_error_tl2fib_sw_interface_up_down (vnet_main_t *vnm, u32 sw_if_index, u32 flags)
 
 VNET_SW_INTERFACE_ADMIN_UP_DOWN_FUNCTION (l2fib_sw_interface_up_down)
 
 BVT (clib_bihash)
 
static_always_inline void * allocate_mac_evt_buf (u32 client, u32 client_index)
 
static_always_inline f64 l2fib_scan (vlib_main_t *vm, f64 start_time, u8 event_only)
 
static uword l2fib_mac_age_scanner_process (vlib_main_t *vm, vlib_node_runtime_t *rt, vlib_frame_t *f)
 
clib_error_tl2fib_init (vlib_main_t *vm)
 

Variables

l2fib_main_t l2fib_main
 
static vlib_cli_command_t show_l2fib_cli
 (constructor) VLIB_CLI_COMMAND (show_l2fib_cli) More...
 
static vlib_cli_command_t clear_l2fib_cli
 (constructor) VLIB_CLI_COMMAND (clear_l2fib_cli) More...
 
static vlib_cli_command_t l2fib_add_cli
 (constructor) VLIB_CLI_COMMAND (l2fib_add_cli) More...
 
static vlib_cli_command_t l2fib_test_command
 (constructor) VLIB_CLI_COMMAND (l2fib_test_command) More...
 
static vlib_cli_command_t l2fib_del_cli
 (constructor) VLIB_CLI_COMMAND (l2fib_del_cli) More...
 
static vlib_cli_command_t l2fib_flush_mac_all_cli
 (constructor) VLIB_CLI_COMMAND (l2fib_flush_mac_all_cli) More...
 
static vlib_cli_command_t l2fib_flush_mac_int_cli
 (constructor) VLIB_CLI_COMMAND (l2fib_flush_mac_int_cli) More...
 
static vlib_cli_command_t l2fib_flush_mac_bd_cli
 (constructor) VLIB_CLI_COMMAND (l2fib_flush_mac_bd_cli) More...
 
vlib_node_registration_t l2fib_mac_age_scanner_process_node
 (constructor) VLIB_REGISTER_NODE (l2fib_mac_age_scanner_process_node) More...
 

Detailed Description

Ethernet MAC Address FIB Table Management.

The MAC Address forwarding table for bridge-domains is called the l2fib. Entries are added automatically as part of mac learning, but MAC Addresses entries can also be added manually.

Definition in file l2_fib.c.

Macro Definition Documentation

#define TIME_MAX   (1.7976931348623157e+308)

Definition at line 1126 of file l2_fib.c.

#define vl_endianfun   /* define message structures */

Definition at line 41 of file l2_fib.c.

#define vl_typedefs   /* define message structures */

Definition at line 37 of file l2_fib.c.

Function Documentation

static_always_inline void* allocate_mac_evt_buf ( u32  client,
u32  client_index 
)

Definition at line 938 of file l2_fib.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

BVT ( clib_bihash  )

Definition at line 931 of file l2_fib.c.

+ Here is the caller graph for this function:

static clib_error_t* clear_l2fib ( vlib_main_t vm,
unformat_input_t input,
vlib_cli_command_t cmd 
)
static

Clear all entries in L2FIB.

: Later we may want a way to remove only the non-static entries

Definition at line 313 of file l2_fib.c.

+ Here is the call graph for this function:

u8* format_vnet_sw_if_index_name_with_NA ( u8 s,
va_list *  args 
)

Format sw_if_index.

If the value is ~0, use the text "N/A"

Definition at line 70 of file l2_fib.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void incr_mac_address ( u8 mac)
static

Definition at line 58 of file l2_fib.c.

+ Here is the caller graph for this function:

static clib_error_t* l2fib_add ( vlib_main_t vm,
unformat_input_t input,
vlib_cli_command_t cmd 
)
static

Add an entry to the L2FIB.

The CLI format is: l2fib add <mac> <bd> <intf> [static] [bvi] l2fib add <mac> <bd> filter Note that filter and bvi entries are always static

Definition at line 400 of file l2_fib.c.

+ Here is the call graph for this function:

void l2fib_add_entry ( u8 mac,
u32  bd_index,
u32  sw_if_index,
u8  static_mac,
u8  filter_mac,
u8  bvi_mac 
)

Add an entry to the l2fib.

If the entry already exists then overwrite it

Definition at line 356 of file l2_fib.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void l2fib_clear_table ( void  )

Definition at line 298 of file l2_fib.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static l2fib_seq_num_t l2fib_cur_seq_num ( u32  bd_index,
u32  sw_if_index 
)
inlinestatic

Definition at line 340 of file l2_fib.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static clib_error_t* l2fib_del ( vlib_main_t vm,
unformat_input_t input,
vlib_cli_command_t cmd 
)
static

Delete an entry from the L2FIB.

The CLI format is: l2fib del <mac> <bd-id>

Definition at line 682 of file l2_fib.c.

+ Here is the call graph for this function:

u32 l2fib_del_entry ( u8 mac,
u32  bd_index 
)

Delete an entry from the l2fib.

Return 0 if the entry was deleted, or 1 if it was not found

Definition at line 671 of file l2_fib.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static u32 l2fib_del_entry_by_key ( u64  raw_key)
static

Delete an entry from the l2fib.

Return 0 if the entry was deleted, or 1 if it was not found

Definition at line 642 of file l2_fib.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void l2fib_flush_all_mac ( vlib_main_t vm)

Flush all non static MACs - flushes all valid BDs.

Definition at line 789 of file l2_fib.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void l2fib_flush_bd_mac ( vlib_main_t vm,
u32  bd_index 
)

Flush all non static MACs in a bridge domain.

Definition at line 778 of file l2_fib.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void l2fib_flush_int_mac ( vlib_main_t vm,
u32  sw_if_index 
)

Flush all non static MACs from an interface.

Definition at line 768 of file l2_fib.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static clib_error_t* l2fib_flush_mac_all ( vlib_main_t vm,
unformat_input_t input,
vlib_cli_command_t cmd 
)
static

Flush all MACs, except static ones The CLI format is: l2fib flush-mac all.

Definition at line 832 of file l2_fib.c.

+ Here is the call graph for this function:

static clib_error_t* l2fib_flush_mac_bd ( vlib_main_t vm,
unformat_input_t input,
vlib_cli_command_t cmd 
)
static

Flush bridge-domain MACs except static ones.

The CLI format is: l2fib flush-mac bridge-domain <bd-id>

Definition at line 877 of file l2_fib.c.

+ Here is the call graph for this function:

static clib_error_t* l2fib_flush_mac_int ( vlib_main_t vm,
unformat_input_t input,
vlib_cli_command_t cmd 
)
static

Flush MACs, except static ones, associated with an interface The CLI format is: l2fib flush-mac interface <if-name>

Definition at line 806 of file l2_fib.c.

+ Here is the call graph for this function:

clib_error_t* l2fib_init ( vlib_main_t vm)

Definition at line 1210 of file l2_fib.c.

+ Here is the call graph for this function:

static uword l2fib_mac_age_scanner_process ( vlib_main_t vm,
vlib_node_runtime_t rt,
vlib_frame_t f 
)
static

Definition at line 1129 of file l2_fib.c.

+ Here is the call graph for this function:

static_always_inline f64 l2fib_scan ( vlib_main_t vm,
f64  start_time,
u8  event_only 
)

Definition at line 950 of file l2_fib.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void l2fib_start_ager_scan ( vlib_main_t vm)

Kick off ager to scan MACs to age/delete MAC entries.

Definition at line 745 of file l2_fib.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

clib_error_t* l2fib_sw_interface_up_down ( vnet_main_t vnm,
u32  sw_if_index,
u32  flags 
)

Definition at line 921 of file l2_fib.c.

+ Here is the call graph for this function:

void l2fib_table_dump ( u32  bd_index,
l2fib_entry_key_t **  l2fe_key,
l2fib_entry_result_t **  l2fe_res 
)

Definition at line 86 of file l2_fib.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static clib_error_t* l2fib_test_command_fn ( vlib_main_t vm,
unformat_input_t input,
vlib_cli_command_t cmd 
)
static

Definition at line 509 of file l2_fib.c.

+ Here is the call graph for this function:

static clib_error_t* show_l2fib ( vlib_main_t vm,
unformat_input_t input,
vlib_cli_command_t cmd 
)
static

Display the contents of the l2fib.

Definition at line 126 of file l2_fib.c.

+ Here is the call graph for this function:

VNET_SW_INTERFACE_ADMIN_UP_DOWN_FUNCTION ( l2fib_sw_interface_up_down  )

+ Here is the caller graph for this function:

Variable Documentation

vlib_cli_command_t clear_l2fib_cli
static
Initial value:
= {
.path = "clear l2fib",
.short_help = "clear l2fib",
.function = clear_l2fib,
}
static clib_error_t * clear_l2fib(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
Clear all entries in L2FIB.
Definition: l2_fib.c:313

(constructor) VLIB_CLI_COMMAND (clear_l2fib_cli)

Definition at line 332 of file l2_fib.c.

vlib_cli_command_t l2fib_add_cli
static
Initial value:
= {
.path = "l2fib add",
.short_help = "l2fib add <mac> <bridge-domain-id> filter | <intf> [static | bvi]",
.function = l2fib_add,
}
static clib_error_t * l2fib_add(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
Add an entry to the L2FIB.
Definition: l2_fib.c:400

(constructor) VLIB_CLI_COMMAND (l2fib_add_cli)

Definition at line 500 of file l2_fib.c.

vlib_cli_command_t l2fib_del_cli
static
Initial value:
= {
.path = "l2fib del",
.short_help = "l2fib del <mac> <bridge-domain-id>",
.function = l2fib_del,
}
static clib_error_t * l2fib_del(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
Delete an entry from the L2FIB.
Definition: l2_fib.c:682

(constructor) VLIB_CLI_COMMAND (l2fib_del_cli)

Definition at line 734 of file l2_fib.c.

vlib_cli_command_t l2fib_flush_mac_all_cli
static
Initial value:
= {
.path = "l2fib flush-mac all",
.short_help = "l2fib flush-mac all",
.function = l2fib_flush_mac_all,
}
static clib_error_t * l2fib_flush_mac_all(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
Flush all MACs, except static ones The CLI format is: l2fib flush-mac all.
Definition: l2_fib.c:832

(constructor) VLIB_CLI_COMMAND (l2fib_flush_mac_all_cli)

Definition at line 848 of file l2_fib.c.

vlib_cli_command_t l2fib_flush_mac_bd_cli
static
Initial value:
= {
.path = "l2fib flush-mac bridge-domain",
.short_help = "l2fib flush-mac bridge-domain <bd-id>",
.function = l2fib_flush_mac_bd,
}
static clib_error_t * l2fib_flush_mac_bd(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
Flush bridge-domain MACs except static ones.
Definition: l2_fib.c:877

(constructor) VLIB_CLI_COMMAND (l2fib_flush_mac_bd_cli)

Definition at line 913 of file l2_fib.c.

vlib_cli_command_t l2fib_flush_mac_int_cli
static
Initial value:
= {
.path = "l2fib flush-mac interface",
.short_help = "l2fib flush-mac interface <if-name>",
.function = l2fib_flush_mac_int,
}
static clib_error_t * l2fib_flush_mac_int(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
Flush MACs, except static ones, associated with an interface The CLI format is: l2fib flush-mac inter...
Definition: l2_fib.c:806

(constructor) VLIB_CLI_COMMAND (l2fib_flush_mac_int_cli)

Definition at line 864 of file l2_fib.c.

vlib_node_registration_t l2fib_mac_age_scanner_process_node
Initial value:
= {
.name = "l2fib-mac-age-scanner-process",
}
static uword l2fib_mac_age_scanner_process(vlib_main_t *vm, vlib_node_runtime_t *rt, vlib_frame_t *f)
Definition: l2_fib.c:1129

(constructor) VLIB_REGISTER_NODE (l2fib_mac_age_scanner_process_node)

Definition at line 1202 of file l2_fib.c.

l2fib_main_t l2fib_main

Definition at line 55 of file l2_fib.c.

vlib_cli_command_t l2fib_test_command
static
Initial value:
= {
.path = "test l2fib",
.short_help = "test l2fib [add|del|check] mac <base-addr> count <nn>",
.function = l2fib_test_command_fn,
}
static clib_error_t * l2fib_test_command_fn(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
Definition: l2_fib.c:509

(constructor) VLIB_CLI_COMMAND (l2fib_test_command)

Definition at line 629 of file l2_fib.c.

vlib_cli_command_t show_l2fib_cli
static
Initial value:
= {
.path = "show l2fib",
.short_help = "show l2fib [verbose | learn | bd_id <nn> | bd_index <nn> | raw",
.function = show_l2fib,
}
static clib_error_t * show_l2fib(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
Display the contents of the l2fib.
Definition: l2_fib.c:126

(constructor) VLIB_CLI_COMMAND (show_l2fib_cli)

Definition at line 288 of file l2_fib.c.