FD.io VPP  v20.05.1-6-gf53edbc3b
Vector Packet Processing
l2_input.c File Reference

Interface Input Mode (Layer 2 Cross-Connect or Bridge / Layer 3). More...

+ Include dependency graph for l2_input.c:

Go to the source code of this file.

Data Structures

struct  l2input_trace_t
 

Macros

#define foreach_l2input_error
 
#define get_u16(addr)   ( *((u16 *)(addr)) )
 
#define foreach_l2_init_function
 

Enumerations

enum  l2input_error_t { L2INPUT_N_ERROR }
 
enum  l2input_next_t { L2INPUT_NEXT_LEARN, L2INPUT_NEXT_FWD, L2INPUT_NEXT_DROP, L2INPUT_N_NEXT }
 

Functions

char ** l2input_get_feat_names (void)
 Return an array of strings containing graph node names of each feature. More...
 
u8format_l2_input_features (u8 *s, va_list *args)
 
static u8format_l2input_trace (u8 *s, va_list *args)
 
static_always_inline void classify_and_dispatch (l2input_main_t *msm, vlib_buffer_t *b0, u32 *next0)
 
static_always_inline uword l2input_node_inline (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame, int do_trace)
 
VLIB_NODE_FN() l2input_node (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
 
clib_error_tl2input_init (vlib_main_t *vm)
 
l2_input_config_tl2input_intf_config (u32 sw_if_index)
 Get a pointer to the config for the given interface. More...
 
u32 l2input_intf_bitmap_enable (u32 sw_if_index, l2input_feat_masks_t feature_bitmap, u32 enable)
 Enable (or disable) the feature in the bitmap for the given interface. More...
 
u32 l2input_set_bridge_features (u32 bd_index, u32 feat_mask, u32 feat_value)
 
void l2input_interface_mac_change (u32 sw_if_index, const u8 *old_address, const u8 *new_address)
 
u32 set_int_l2_mode (vlib_main_t *vm, vnet_main_t *vnet_main, u32 mode, u32 sw_if_index, u32 bd_index, l2_bd_port_type_t port_type, u32 shg, u32 xc_sw_if_index)
 Set the subinterface to run in l2 or l3 mode. More...
 
static clib_error_tint_l2_bridge (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
 Set subinterface in bridging mode with a bridge-domain ID. More...
 
static clib_error_tint_l2_xc (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
 Set subinterface in xconnect mode with another interface. More...
 
static clib_error_tint_l3 (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
 Set subinterface in L3 mode. More...
 
static clib_error_tshow_int_mode (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
 Show interface mode. More...
 
clib_error_tl2_init (vlib_main_t *vm)
 

Variables

static char * l2input_feat_names []
 
l2input_main_t l2input_main
 
static char * l2input_error_strings []
 
vlib_node_registration_t l2input_node
 (constructor) VLIB_REGISTER_NODE (l2input_node) More...
 
static vlib_cli_command_t int_l2_bridge_cli
 (constructor) VLIB_CLI_COMMAND (int_l2_bridge_cli) More...
 
static vlib_cli_command_t int_l2_xc_cli
 (constructor) VLIB_CLI_COMMAND (int_l2_xc_cli) More...
 
static vlib_cli_command_t int_l3_cli
 (constructor) VLIB_CLI_COMMAND (int_l3_cli) More...
 
static vlib_cli_command_t show_l2_mode
 (constructor) VLIB_CLI_COMMAND (show_l2_mode) More...
 

Detailed Description

Interface Input Mode (Layer 2 Cross-Connect or Bridge / Layer 3).

This file contains the CLI Commands that modify the input mode of an interface. For interfaces in a Layer 2 cross-connect, all packets received on one interface will be transmitted to the other. For interfaces in a bridge-domain, packets will be forwarded to other interfaces in the same bridge-domain based on destination mac address. For interfaces in Layer 3 mode, the packets will be routed.

Definition in file l2_input.c.

Macro Definition Documentation

◆ foreach_l2_init_function

#define foreach_l2_init_function
Value:
clib_error_t * feat_bitmap_drop_init(vlib_main_t *vm)
Definition: feat_bitmap.c:152
static clib_error_t * l2_patch_init(vlib_main_t *vm)
Definition: l2_patch.c:434
clib_error_t * l2_input_classify_init(vlib_main_t *vm)
l2 input classsifier feature initialization.
clib_error_t * l2_vtr_init(vlib_main_t *vm)
Just a placeholder; ensures file is not eliminated by linker.
Definition: l2_vtr.c:46
clib_error_t * l2fwd_init(vlib_main_t *vm)
Definition: l2_fwd.c:441
clib_error_t * l2fib_init(vlib_main_t *vm)
Definition: l2_fib.c:1268
clib_error_t * l2learn_init(vlib_main_t *vm)
Definition: l2_learn.c:451
static clib_error_t * l2output_init(vlib_main_t *vm)
Definition: l2_output.c:571
clib_error_t * l2bd_init(vlib_main_t *vm)
Definition: l2_bd.c:227
clib_error_t * l2_xcrw_init(vlib_main_t *vm)
Definition: l2_xcrw.c:262
clib_error_t * l2_efp_filter_init(vlib_main_t *vm)
clib_error_t * l2_invtr_init(vlib_main_t *vm)
Definition: l2_input_vtr.c:343
clib_error_t * l2_in_out_acl_init(vlib_main_t *vm)
clib_error_t * l2input_init(vlib_main_t *vm)
Definition: l2_input.c:499
clib_error_t * l2flood_init(vlib_main_t *vm)
Definition: l2_flood.c:388

Definition at line 1199 of file l2_input.c.

◆ foreach_l2input_error

#define foreach_l2input_error
Value:
_(L2INPUT, "L2 input packets") \
_(DROP, "L2 input drops")
DROP
Definition: error.def:41

Definition at line 131 of file l2_input.c.

◆ get_u16

#define get_u16 (   addr)    ( *((u16 *)(addr)) )

Enumeration Type Documentation

◆ l2input_error_t

Enumerator
L2INPUT_N_ERROR 

Definition at line 135 of file l2_input.c.

◆ l2input_next_t

Enumerator
L2INPUT_NEXT_LEARN 
L2INPUT_NEXT_FWD 
L2INPUT_NEXT_DROP 
L2INPUT_N_NEXT 

Definition at line 149 of file l2_input.c.

Function Documentation

◆ classify_and_dispatch()

static_always_inline void classify_and_dispatch ( l2input_main_t msm,
vlib_buffer_t b0,
u32 next0 
)

Definition at line 159 of file l2_input.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ format_l2_input_features()

u8* format_l2_input_features ( u8 s,
va_list *  args 
)

Definition at line 68 of file l2_input.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ format_l2input_trace()

static u8* format_l2input_trace ( u8 s,
va_list *  args 
)
static

Definition at line 112 of file l2_input.c.

+ Here is the call graph for this function:

◆ int_l2_bridge()

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

Set subinterface in bridging mode with a bridge-domain ID.

The CLI format is: set interface l2 bridge <interface> <bd> [bvi] [split-horizon-group]

Definition at line 861 of file l2_input.c.

+ Here is the call graph for this function:

◆ int_l2_xc()

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

Set subinterface in xconnect mode with another interface.

The CLI format is: set interface l2 xconnect <interface> <peer interface>="">

Definition at line 973 of file l2_input.c.

+ Here is the call graph for this function:

◆ int_l3()

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

Set subinterface in L3 mode.

The CLI format is: set interface l3 <interface>

Definition at line 1039 of file l2_input.c.

+ Here is the call graph for this function:

◆ l2_init()

clib_error_t* l2_init ( vlib_main_t vm)

Definition at line 1218 of file l2_input.c.

◆ l2input_get_feat_names()

char** l2input_get_feat_names ( void  )

Return an array of strings containing graph node names of each feature.

Definition at line 62 of file l2_input.c.

+ Here is the caller graph for this function:

◆ l2input_init()

clib_error_t* l2input_init ( vlib_main_t vm)

Definition at line 499 of file l2_input.c.

+ Here is the call graph for this function:

◆ l2input_interface_mac_change()

void l2input_interface_mac_change ( u32  sw_if_index,
const u8 old_address,
const u8 new_address 
)

Definition at line 562 of file l2_input.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ l2input_intf_bitmap_enable()

u32 l2input_intf_bitmap_enable ( u32  sw_if_index,
l2input_feat_masks_t  feature_bitmap,
u32  enable 
)

Enable (or disable) the feature in the bitmap for the given interface.

Definition at line 538 of file l2_input.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ l2input_intf_config()

l2_input_config_t* l2input_intf_config ( u32  sw_if_index)

Get a pointer to the config for the given interface.

Masks for eliminating features that do not apply to a packet.

Definition at line 528 of file l2_input.c.

+ Here is the caller graph for this function:

◆ l2input_node()

VLIB_NODE_FN() l2input_node ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t frame 
)

Definition at line 467 of file l2_input.c.

+ Here is the call graph for this function:

◆ l2input_node_inline()

static_always_inline uword l2input_node_inline ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t frame,
int  do_trace 
)

Definition at line 294 of file l2_input.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ l2input_set_bridge_features()

u32 l2input_set_bridge_features ( u32  bd_index,
u32  feat_mask,
u32  feat_value 
)

Definition at line 552 of file l2_input.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ set_int_l2_mode()

u32 set_int_l2_mode ( vlib_main_t vm,
vnet_main_t vnet_main,
u32  mode,
u32  sw_if_index,
u32  bd_index,
l2_bd_port_type_t  port_type,
u32  shg,
u32  xc_sw_if_index 
)

Set the subinterface to run in l2 or l3 mode.

For L3 mode, just the sw_if_index is specified. For bridged mode, the bd id and bvi flag are also specified. For xconnect mode, the peer sw_if_index is also specified. Return 0 if ok, or non-0 if there was an error.

Definition at line 591 of file l2_input.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ show_int_mode()

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

Show interface mode.

The CLI format is: show mode [<if-name1> <if-name2> ...]

Definition at line 1089 of file l2_input.c.

+ Here is the call graph for this function:

Variable Documentation

◆ int_l2_bridge_cli

vlib_cli_command_t int_l2_bridge_cli
static
Initial value:
= {
.path = "set interface l2 bridge",
.short_help = "set interface l2 bridge <interface> <bridge-domain-id> [bvi|uu-fwd] [shg]",
.function = int_l2_bridge,
}
static clib_error_t * int_l2_bridge(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
Set subinterface in bridging mode with a bridge-domain ID.
Definition: l2_input.c:861

(constructor) VLIB_CLI_COMMAND (int_l2_bridge_cli)

Definition at line 960 of file l2_input.c.

◆ int_l2_xc_cli

vlib_cli_command_t int_l2_xc_cli
static
Initial value:
= {
.path = "set interface l2 xconnect",
.short_help = "set interface l2 xconnect <interface> <peer interface>",
.function = int_l2_xc,
}
static clib_error_t * int_l2_xc(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
Set subinterface in xconnect mode with another interface.
Definition: l2_input.c:973

(constructor) VLIB_CLI_COMMAND (int_l2_xc_cli)

Definition at line 1026 of file l2_input.c.

◆ int_l3_cli

vlib_cli_command_t int_l3_cli
static
Initial value:
= {
.path = "set interface l3",
.short_help = "set interface l3 <interface>",
.function = int_l3,
}
static clib_error_t * int_l3(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
Set subinterface in L3 mode.
Definition: l2_input.c:1039

(constructor) VLIB_CLI_COMMAND (int_l3_cli)

Definition at line 1076 of file l2_input.c.

◆ l2input_error_strings

char* l2input_error_strings[]
static
Initial value:
= {
#define _(sym,string)
}
#define foreach_l2input_error
Definition: l2_input.c:131

Definition at line 143 of file l2_input.c.

◆ l2input_feat_names

char* l2input_feat_names[]
static
Initial value:
= {
#define _(sym,name)
}
#define foreach_l2input_feat
Definition: l2_input.h:102

Definition at line 55 of file l2_input.c.

◆ l2input_main

l2input_main_t l2input_main

Definition at line 128 of file l2_input.c.

◆ l2input_node

Initial value:
= {
.name = "l2-input",
.vector_size = sizeof (u32),
.format_trace = format_l2input_trace,
.error_strings = l2input_error_strings,
.n_next_nodes = L2INPUT_N_NEXT,
.next_nodes = {
[L2INPUT_NEXT_LEARN] = "l2-learn",
[L2INPUT_NEXT_FWD] = "l2-fwd",
[L2INPUT_NEXT_DROP] = "error-drop",
},
}
unsigned int u32
Definition: types.h:88
vl_api_fib_path_type_t type
Definition: fib_types.api:123
u8 * format_ethernet_header_with_length(u8 *s, va_list *args)
Definition: format.c:97
#define ARRAY_LEN(x)
Definition: clib.h:66
static u8 * format_l2input_trace(u8 *s, va_list *args)
Definition: l2_input.c:112
static char * l2input_error_strings[]
Definition: l2_input.c:143

(constructor) VLIB_REGISTER_NODE (l2input_node)

Definition at line 476 of file l2_input.c.

◆ show_l2_mode

vlib_cli_command_t show_l2_mode
static
Initial value:
= {
.path = "show mode",
.short_help = "show mode [<if-name1> <if-name2> ...]",
.function = show_int_mode,
}
static clib_error_t * show_int_mode(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
Show interface mode.
Definition: l2_input.c:1089

(constructor) VLIB_CLI_COMMAND (show_l2_mode)

Definition at line 1192 of file l2_input.c.