FD.io VPP  v16.12-rc0-308-g931be3a
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_u32(addr)   ( *((u32 *)(addr)) )
 
#define get_u16(addr)   ( *((u16 *)(addr)) )
 
#define STATS_IF_LAYER2_UCAST_INPUT_CNT   0
 
#define STATS_IF_LAYER2_MCAST_INPUT_CNT   1
 
#define STATS_IF_LAYER2_BCAST_INPUT_CNT   2
 
#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...
 
static u8format_l2input_trace (u8 *s, va_list *args)
 
static_always_inline void classify_and_dispatch (vlib_main_t *vm, vlib_node_runtime_t *node, u32 cpu_index, l2input_main_t *msm, vlib_buffer_t *b0, u32 *next0)
 
static uword l2input_node_fn (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, u32 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)
 
u32 set_int_l2_mode (vlib_main_t *vm, vnet_main_t *vnet_main, u32 mode, u32 sw_if_index, u32 bd_index, u32 bvi, 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

#define foreach_l2_init_function
Value:
clib_error_t * feat_bitmap_drop_init(vlib_main_t *vm)
Definition: feat_bitmap.c:152
clib_error_t * l2_input_classify_init(vlib_main_t *vm)
l2 input classsifier feature initialization.
clib_error_t * l2output_init(vlib_main_t *vm)
Definition: l2_output.c:585
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:393
clib_error_t * l2fib_init(vlib_main_t *vm)
Definition: l2_fib.c:698
clib_error_t * l2learn_init(vlib_main_t *vm)
Definition: l2_learn.c:436
clib_error_t * l2bd_init(vlib_main_t *vm)
Definition: l2_bd.c:166
clib_error_t * l2_xcrw_init(vlib_main_t *vm)
Definition: l2_xcrw.c:261
clib_error_t * l2_inacl_init(vlib_main_t *vm)
Definition: l2_input_acl.c:381
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:375
clib_error_t * l2input_init(vlib_main_t *vm)
Definition: l2_input.c:475
clib_error_t * l2_outacl_init(vlib_main_t *vm)
clib_error_t * l2_patch_init(vlib_main_t *vm)
Definition: l2_patch.c:434
clib_error_t * l2flood_init(vlib_main_t *vm)
Definition: l2_flood.c:475

Definition at line 1125 of file l2_input.c.

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

Definition at line 89 of file l2_input.c.

#define get_u16 (   addr)    ( *((u16 *)(addr)) )
#define get_u32 (   addr)    ( *((u32 *)(addr)) )
#define STATS_IF_LAYER2_BCAST_INPUT_CNT   2
#define STATS_IF_LAYER2_MCAST_INPUT_CNT   1
#define STATS_IF_LAYER2_UCAST_INPUT_CNT   0

Enumeration Type Documentation

Enumerator
L2INPUT_N_ERROR 

Definition at line 93 of file l2_input.c.

Enumerator
L2INPUT_NEXT_LEARN 
L2INPUT_NEXT_FWD 
L2INPUT_NEXT_DROP 
L2INPUT_N_NEXT 

Definition at line 107 of file l2_input.c.

Function Documentation

static_always_inline void classify_and_dispatch ( vlib_main_t vm,
vlib_node_runtime_t node,
u32  cpu_index,
l2input_main_t msm,
vlib_buffer_t b0,
u32 next0 
)

Definition at line 117 of file l2_input.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

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

Definition at line 74 of file l2_input.c.

+ Here is the call graph for this function:

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 795 of file l2_input.c.

+ Here is the call graph for this function:

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 897 of file l2_input.c.

+ Here is the call graph for this function:

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 962 of file l2_input.c.

+ Here is the call graph for this function:

clib_error_t* l2_init ( vlib_main_t vm)

Definition at line 1144 of file l2_input.c.

+ Here is the caller graph for this function:

char** l2input_get_feat_names ( void  )

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

Definition at line 57 of file l2_input.c.

+ Here is the caller graph for this function:

clib_error_t* l2input_init ( vlib_main_t vm)

Definition at line 475 of file l2_input.c.

+ Here is the call graph for this function:

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

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

Definition at line 514 of file l2_input.c.

+ Here is the caller graph for this function:

l2_input_config_t* l2input_intf_config ( u32  sw_if_index)

Get a pointer to the config for the given interface.

Definition at line 504 of file l2_input.c.

+ Here is the caller graph for this function:

static uword l2input_node_fn ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t frame 
)
static

Definition at line 290 of file l2_input.c.

+ Here is the call graph for this function:

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

Definition at line 535 of file l2_input.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

u32 set_int_l2_mode ( vlib_main_t vm,
vnet_main_t vnet_main,
u32  mode,
u32  sw_if_index,
u32  bd_index,
u32  bvi,
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 555 of file l2_input.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

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 1011 of file l2_input.c.

+ Here is the call graph for this function:

Variable Documentation

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] [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:795

(constructor) VLIB_CLI_COMMAND (int_l2_bridge_cli)

Definition at line 884 of file l2_input.c.

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:897

(constructor) VLIB_CLI_COMMAND (int_l2_xc_cli)

Definition at line 949 of file l2_input.c.

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:962

(constructor) VLIB_CLI_COMMAND (int_l3_cli)

Definition at line 998 of file l2_input.c.

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

Definition at line 101 of file l2_input.c.

char* l2input_feat_names[]
static
Initial value:
= {
#define _(sym,name)
}

Definition at line 50 of file l2_input.c.

l2input_main_t l2input_main

Definition at line 87 of file l2_input.c.

Initial value:
= {
.function = l2input_node_fn,
.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",
},
}
bad routing header type(not 4)") sr_error (NO_MORE_SEGMENTS
u8 * format_ethernet_header_with_length(u8 *s, va_list *args)
Definition: format.c:115
#define ARRAY_LEN(x)
Definition: clib.h:59
unsigned int u32
Definition: types.h:88
static uword l2input_node_fn(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
Definition: l2_input.c:290
static u8 * format_l2input_trace(u8 *s, va_list *args)
Definition: l2_input.c:74
static char * l2input_error_strings[]
Definition: l2_input.c:101

(constructor) VLIB_REGISTER_NODE (l2input_node)

Definition at line 452 of file l2_input.c.

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:1011

(constructor) VLIB_CLI_COMMAND (show_l2_mode)

Definition at line 1118 of file l2_input.c.