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

Layer 2 Output Classifier. More...

+ Include dependency graph for l2_output_classify.c:

Go to the source code of this file.

Data Structures

struct  l2_output_classify_trace_t
 
struct  l2_output_classify_runtime_t
 

Macros

#define foreach_l2_output_classify_error
 

Enumerations

enum  l2_output_classify_error_t { L2_OUTPUT_CLASSIFY_N_ERROR }
 

Functions

static u8format_l2_output_classify_trace (u8 *s, va_list *args)
 Packet trace format function. More...
 
static uword l2_output_classify_node_fn (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
 l2 output classifier node. More...
 
 VLIB_NODE_FUNCTION_MULTIARCH (l2_output_classify_node, l2_output_classify_node_fn)
 
clib_error_tl2_output_classify_init (vlib_main_t *vm)
 l2 output classsifier feature initialization. More...
 
clib_error_tl2_output_classify_worker_init (vlib_main_t *vm)
 
 VLIB_WORKER_INIT_FUNCTION (l2_output_classify_worker_init)
 
void vnet_l2_output_classify_enable_disable (u32 sw_if_index, int enable_disable)
 Enable/disable l2 input classification on a specific interface. More...
 
int vnet_l2_output_classify_set_tables (u32 sw_if_index, u32 ip4_table_index, u32 ip6_table_index, u32 other_table_index)
 Set l2 per-protocol, per-interface output classification tables. More...
 
static clib_error_tint_l2_output_classify_command_fn (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
 

Variables

l2_output_classify_main_t l2_output_classify_main
 l2 output classifier main data structure. More...
 
vlib_node_registration_t l2_output_classify_node
 (constructor) VLIB_REGISTER_NODE (l2_output_classify_node) More...
 
static char * l2_output_classify_error_strings []
 
static vlib_cli_command_t int_l2_output_classify_cli
 (constructor) VLIB_CLI_COMMAND (int_l2_output_classify_cli) More...
 

Detailed Description

Macro Definition Documentation

#define foreach_l2_output_classify_error
Value:
_(MISS, "Classify misses") \
_(HIT, "Classify hits") \
_(CHAIN_HIT, "Classify hits after chain walk") \
_(DROP, "L2 Classify Drops")
DROP
Definition: error.def:41

Definition at line 67 of file l2_output_classify.c.

Enumeration Type Documentation

Enumerator
L2_OUTPUT_CLASSIFY_N_ERROR 

Definition at line 73 of file l2_output_classify.c.

Function Documentation

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

Packet trace format function.

Definition at line 49 of file l2_output_classify.c.

+ Here is the call graph for this function:

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

Definition at line 573 of file l2_output_classify.c.

+ Here is the call graph for this function:

clib_error_t* l2_output_classify_init ( vlib_main_t vm)

l2 output classsifier feature initialization.

Definition at line 464 of file l2_output_classify.c.

+ Here is the call graph for this function:

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

l2 output classifier node.

Node Identifier:
l2-output-classify

This is the l2 output classifier dispatch node

Parameters
vmvlib_main_t corresponding to the current thread.
nodevlib_node_runtime_t data for this node.
framevlib_frame_t whose contents should be dispatched.
Graph mechanics: buffer metadata, next index usage

Uses:

  • (l2_output_classify_runtime_t *) rt->classify_table_index_by_sw_if_index Head of the per-interface, perprotocol classifier table chain for a specific interface. ~0 => send pkts to the next feature in the L2 feature chain.
  • vnet_buffer(b)->sw_if_index[VLIB_TX]
    • Indicates the sw_if_index value of the interface that the packet was received on.
  • vnet_buffer (b0)->l2.feature_bitmap
    • Used to steer packets across l2 features enabled on the interface
  • (vnet_classify_entry_t) e0->next_index
    • Used to steer traffic when the classifier hits on a session
  • (vnet_classify_entry_t) e0->advance
    • Signed quantity applied via vlib_buffer_advance when the classifier hits on a session
  • (vnet_classify_table_t) t0->miss_next_index
    • Used to steer traffic when the classifier misses

Sets:

  • vnet_buffer (b0)->l2_classify.table_index
    • Classifier table index of the first classifier table in the classifier table chain
  • vnet_buffer (b0)->l2_classify.hash
    • Bounded-index extensible hash corresponding to the masked fields in the current packet
  • vnet_buffer (b0)->l2.feature_bitmap
    • Used to steer packets across l2 features enabled on the interface
  • vnet_buffer (b0)->l2_classify.opaque_index
    • Copied from the classifier session object upon classifier hit

Counters:

  • L2_OUTPUT_CLASSIFY_ERROR_MISS Classifier misses
  • L2_OUTPUT_CLASSIFY_ERROR_HIT Classifier hits
  • L2_OUTPUT_CLASSIFY_ERROR_CHAIN_HIT Classifier hits in other than the first table

Definition at line 138 of file l2_output_classify.c.

+ Here is the call graph for this function:

clib_error_t* l2_output_classify_worker_init ( vlib_main_t vm)

Definition at line 490 of file l2_output_classify.c.

+ Here is the call graph for this function:

VLIB_NODE_FUNCTION_MULTIARCH ( l2_output_classify_node  ,
l2_output_classify_node_fn   
)
VLIB_WORKER_INIT_FUNCTION ( l2_output_classify_worker_init  )

+ Here is the caller graph for this function:

void vnet_l2_output_classify_enable_disable ( u32  sw_if_index,
int  enable_disable 
)

Enable/disable l2 input classification on a specific interface.

Definition at line 507 of file l2_output_classify.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int vnet_l2_output_classify_set_tables ( u32  sw_if_index,
u32  ip4_table_index,
u32  ip6_table_index,
u32  other_table_index 
)

Set l2 per-protocol, per-interface output classification tables.

Parameters
sw_if_indexinterface handle
ip4_table_indexip4 classification table index, or ~0
ip6_table_indexip6 classification table index, or ~0
other_table_indexnon-ip4, non-ip6 classification table index, or ~0
Returns
0 on success, VNET_API_ERROR_NO_SUCH_TABLE, TABLE2, TABLE3 if the indicated (non-~0) table does not exist.

Definition at line 526 of file l2_output_classify.c.

+ Here is the caller graph for this function:

Variable Documentation

vlib_cli_command_t int_l2_output_classify_cli
static
Initial value:
= {
.path = "set interface l2 output classify",
.short_help =
"set interface l2 output classify intfc <<interface-name>> [ip4-table <n>]\n"
" [ip6-table <n>] [other-table <n>]",
}
static clib_error_t * int_l2_output_classify_command_fn(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)

(constructor) VLIB_CLI_COMMAND (int_l2_output_classify_cli)

Definition at line 639 of file l2_output_classify.c.

char* l2_output_classify_error_strings[]
static
Initial value:
= {
#define _(sym,string)
}
#define foreach_l2_output_classify_error

Definition at line 81 of file l2_output_classify.c.

l2_output_classify_main_t l2_output_classify_main

l2 output classifier main data structure.

Definition at line 63 of file l2_output_classify.c.

vlib_node_registration_t l2_output_classify_node
Initial value:
= {
.name = "l2-output-classify",
.vector_size = sizeof (u32),
.runtime_data_bytes = sizeof (l2_output_classify_runtime_t),
.n_next_nodes = L2_OUTPUT_CLASSIFY_N_NEXT,
.next_nodes = {
[L2_OUTPUT_CLASSIFY_NEXT_DROP] = "error-drop",
},
}
static uword l2_output_classify_node_fn(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
l2 output classifier node.
static char * l2_output_classify_error_strings[]
static u8 * format_l2_output_classify_trace(u8 *s, va_list *args)
Packet trace format function.
#define ARRAY_LEN(x)
Definition: clib.h:59
unsigned int u32
Definition: types.h:88

(constructor) VLIB_REGISTER_NODE (l2_output_classify_node)

Definition at line 65 of file l2_output_classify.c.