FD.io VPP  v19.01.1-17-ge106252
Vector Packet Processing
l2_flood.c File Reference

Ethernet Flooding. More...

+ Include dependency graph for l2_flood.c:

Go to the source code of this file.

Data Structures

struct  l2flood_main_t
 
struct  l2flood_trace_t
 

Macros

#define foreach_l2flood_error
 

Enumerations

enum  l2flood_error_t { L2FLOOD_N_ERROR }
 
enum  l2flood_next_t { L2FLOOD_NEXT_L2_OUTPUT, L2FLOOD_NEXT_DROP, L2FLOOD_N_NEXT }
 

Functions

static u8format_l2flood_trace (u8 *s, va_list *args)
 
static uword l2flood_node_fn (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
 
clib_error_tl2flood_init (vlib_main_t *vm)
 
void l2flood_register_input_type (vlib_main_t *vm, ethernet_type_t type, u32 node_index)
 Add the L3 input node for this ethertype to the next nodes structure. More...
 
static clib_error_tint_flood (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
 Set subinterface flood enable/disable. More...
 

Variables

l2flood_main_t l2flood_main
 
static vlib_node_registration_t l2flood_node
 (constructor) VLIB_REGISTER_NODE (l2flood_node) More...
 
static char * l2flood_error_strings []
 
static vlib_cli_command_t int_flood_cli
 (constructor) VLIB_CLI_COMMAND (int_flood_cli) More...
 

Detailed Description

Ethernet Flooding.

Flooding uses the packet replication infrastructure to send a copy of the packet to each member interface. Logically the replication infrastructure expects two graph nodes: a prep node that initiates replication and sends the packet to the first destination, and a recycle node that is passed the packet after it has been transmitted.

To decrease the amount of code, l2 flooding implements both functions in the same graph node. This node can tell if is it being called as the "prep" or "recycle" using replication_is_recycled().

Definition in file l2_flood.c.

Macro Definition Documentation

#define foreach_l2flood_error
Value:
_(L2FLOOD, "L2 flood packets") \
_(REPL_FAIL, "L2 replication failures") \
_(NO_MEMBERS, "L2 replication complete") \
_(BVI_BAD_MAC, "BVI L3 mac mismatch") \
_(BVI_ETHERTYPE, "BVI packet with unhandled ethertype")

Definition at line 94 of file l2_flood.c.

Enumeration Type Documentation

Enumerator
L2FLOOD_N_ERROR 

Definition at line 101 of file l2_flood.c.

Enumerator
L2FLOOD_NEXT_L2_OUTPUT 
L2FLOOD_NEXT_DROP 
L2FLOOD_N_NEXT 

Definition at line 115 of file l2_flood.c.

Function Documentation

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

Definition at line 77 of file l2_flood.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

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

Set subinterface flood enable/disable.

The CLI format is: set interface l2 flood <interface> [disable]

Definition at line 432 of file l2_flood.c.

+ Here is the call graph for this function:

clib_error_t* l2flood_init ( vlib_main_t vm)

Definition at line 388 of file l2_flood.c.

+ Here is the call graph for this function:

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

Definition at line 138 of file l2_flood.c.

+ Here is the call graph for this function:

void l2flood_register_input_type ( vlib_main_t vm,
ethernet_type_t  type,
u32  node_index 
)

Add the L3 input node for this ethertype to the next nodes structure.

Definition at line 414 of file l2_flood.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

Variable Documentation

vlib_cli_command_t int_flood_cli
static
Initial value:
= {
.path = "set interface l2 flood",
.short_help = "set interface l2 flood <interface> [disable]",
.function = int_flood,
}
static clib_error_t * int_flood(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
Set subinterface flood enable/disable.
Definition: l2_flood.c:432

(constructor) VLIB_CLI_COMMAND (int_flood_cli)

Definition at line 472 of file l2_flood.c.

char* l2flood_error_strings[]
static
Initial value:
= {
#define _(sym,string)
}
#define foreach_l2flood_error
Definition: l2_flood.c:94

Definition at line 109 of file l2_flood.c.

l2flood_main_t l2flood_main

Definition at line 90 of file l2_flood.c.

static vlib_node_registration_t l2flood_node
static
Initial value:
= {
.function = l2flood_node_fn,
.name = "l2-flood",
.vector_size = sizeof (u32),
.format_trace = format_l2flood_trace,
.error_strings = l2flood_error_strings,
.n_next_nodes = L2FLOOD_N_NEXT,
.next_nodes = {
[L2FLOOD_NEXT_L2_OUTPUT] = "l2-output",
[L2FLOOD_NEXT_DROP] = "error-drop",
},
}
static uword l2flood_node_fn(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
Definition: l2_flood.c:138
static char * l2flood_error_strings[]
Definition: l2_flood.c:109
static u8 * format_l2flood_trace(u8 *s, va_list *args)
Definition: l2_flood.c:77
unsigned int u32
Definition: types.h:88
#define ARRAY_LEN(x)
Definition: clib.h:62

(constructor) VLIB_REGISTER_NODE (l2flood_node)

Definition at line 92 of file l2_flood.c.