FD.io VPP  v19.08-24-ge6a5712
Vector Packet Processing
ethernet.h File Reference
+ Include dependency graph for ethernet.h:

Go to the source code of this file.

Data Structures

struct  ethernet_input_frame_t
 
struct  ethernet_max_header_t
 
struct  ethernet_interface
 
struct  ethernet_type_info_t
 
struct  subint_config_t
 
struct  main_intf_t
 
struct  vlan_intf_t
 
struct  vlan_table_t
 
struct  qinq_intf_t
 
struct  qinq_table_t
 
struct  next_by_ethertype_t
 
struct  ethernet_main_t
 

Macros

#define ETH_INPUT_FRAME_F_SINGLE_SW_IF_IDX   (1 << 0)
 
#define ETH_INPUT_FRAME_F_IP4_CKSUM_OK   (1 << 1)
 
#define ETHERNET_MIN_PACKET_BYTES   64
 
#define ETHERNET_MAX_PACKET_BYTES   9216
 
#define ETHERNET_INTERFACE_FLAG_ACCEPT_ALL   (1 << 0)
 
#define ETHERNET_INTERFACE_FLAG_CONFIG_PROMISC(flags)   (((flags) & ~ETHERNET_INTERFACE_FLAG_ACCEPT_ALL) == 0)
 
#define ETHERNET_INTERFACE_FLAG_MTU   (1 << 1)
 
#define ETHERNET_INTERFACE_FLAG_CONFIG_MTU(flags)   ((flags) & ETHERNET_INTERFACE_FLAG_MTU)
 
#define ethernet_error(n, c, s)   ETHERNET_ERROR_##n,
 
#define SUBINT_CONFIG_MATCH_0_TAG   (1<<0)
 
#define SUBINT_CONFIG_MATCH_1_TAG   (1<<1)
 
#define SUBINT_CONFIG_MATCH_2_TAG   (1<<2)
 
#define SUBINT_CONFIG_MATCH_3_TAG   (1<<3)
 
#define SUBINT_CONFIG_VALID   (1<<4)
 
#define SUBINT_CONFIG_L2   (1<<5)
 
#define SUBINT_CONFIG_P2P   (1<<6)
 
#define ethernet_buffer_get_vlan_count(b)
 Returns the number of VLAN headers in the current Ethernet frame in the buffer. More...
 
#define ethernet_buffer_set_vlan_count(b, v)
 Sets the number of VLAN headers in the current Ethernet frame in the buffer. More...
 
#define ethernet_buffer_adjust_vlan_count(b, v)
 Adjusts the vlan count by the delta in 'v'. More...
 
#define ethernet_buffer_adjust_vlan_count_by_bytes(b, v)
 Adjusts the vlan count by the header size byte delta in 'v'. More...
 
#define ethernet_buffer_header_size(b)
 Determine the size of the Ethernet headers of the current frame in the buffer. More...
 

Typedefs

typedef u32ethernet_flag_change_function_t) (vnet_main_t *vnm, struct vnet_hw_interface_t *hi, u32 flags)
 
typedef struct ethernet_interface ethernet_interface_t
 

Enumerations

enum  ethernet_error_t { ETHERNET_N_ERROR }
 

Functions

static_always_inline int ethernet_frame_is_tagged (u16 type)
 
static_always_inline int ethernet_frame_is_any_tagged_x2 (u16 type0, u16 type1)
 
static_always_inline int ethernet_frame_is_any_tagged_x4 (u16 type0, u16 type1, u16 type2, u16 type3)
 
static u32 eth_create_valid_subint_match_flags (u32 num_tags)
 
static ethernet_type_info_tethernet_get_type_info (ethernet_main_t *em, ethernet_type_t type)
 
ethernet_interface_tethernet_get_interface (ethernet_main_t *em, u32 hw_if_index)
 
clib_error_tethernet_register_interface (vnet_main_t *vnm, u32 dev_class_index, u32 dev_instance, const u8 *address, u32 *hw_if_index_return, ethernet_flag_change_function_t flag_change)
 
void ethernet_delete_interface (vnet_main_t *vnm, u32 hw_if_index)
 
void ethernet_register_input_type (vlib_main_t *vm, ethernet_type_t type, u32 node_index)
 
void ethernet_register_l2_input (vlib_main_t *vm, u32 node_index)
 
void ethernet_register_l3_redirect (vlib_main_t *vm, u32 node_index)
 
u8format_mac_address (u8 *s, va_list *args)
 
u8format_ethernet_address (u8 *s, va_list *args)
 
u8format_ethernet_type (u8 *s, va_list *args)
 
u8format_ethernet_vlan_tci (u8 *s, va_list *va)
 
u8format_ethernet_header (u8 *s, va_list *args)
 
u8format_ethernet_header_with_length (u8 *s, va_list *args)
 
uword unformat_ethernet_address (unformat_input_t *input, va_list *args)
 
uword unformat_mac_address (unformat_input_t *input, va_list *args)
 
uword unformat_ethernet_type_host_byte_order (unformat_input_t *input, va_list *args)
 
uword unformat_ethernet_type_net_byte_order (unformat_input_t *input, va_list *args)
 
uword unformat_ethernet_header (unformat_input_t *input, va_list *args)
 
uword unformat_ethernet_interface (unformat_input_t *input, va_list *args)
 
uword unformat_pg_ethernet_header (unformat_input_t *input, va_list *args)
 
static void ethernet_setup_node (vlib_main_t *vm, u32 node_index)
 
static ethernet_header_tethernet_buffer_get_header (vlib_buffer_t *b)
 
ethernet_main_tethernet_get_main (vlib_main_t *vm)
 
u32 ethernet_set_flags (vnet_main_t *vnm, u32 hw_if_index, u32 flags)
 
void ethernet_sw_interface_set_l2_mode (vnet_main_t *vnm, u32 sw_if_index, u32 l2)
 
void ethernet_sw_interface_set_l2_mode_noport (vnet_main_t *vnm, u32 sw_if_index, u32 l2)
 
void ethernet_set_rx_redirect (vnet_main_t *vnm, vnet_hw_interface_t *hi, u32 enable)
 
clib_error_tnext_by_ethertype_init (next_by_ethertype_t *l3_next)
 
clib_error_tnext_by_ethertype_register (next_by_ethertype_t *l3_next, u32 ethertype, u32 next_index)
 
int vnet_create_loopback_interface (u32 *sw_if_indexp, u8 *mac_address, u8 is_specified, u32 user_instance)
 
int vnet_delete_loopback_interface (u32 sw_if_index)
 
int vnet_delete_sub_interface (u32 sw_if_index)
 
static void eth_vlan_table_lookups (ethernet_main_t *em, vnet_main_t *vnm, u32 port_sw_if_index0, u16 first_ethertype, u16 outer_id, u16 inner_id, vnet_hw_interface_t **hi, main_intf_t **main_intf, vlan_intf_t **vlan_intf, qinq_intf_t **qinq_intf)
 
static u32 eth_identify_subint (vnet_hw_interface_t *hi, u32 match_flags, main_intf_t *main_intf, vlan_intf_t *vlan_intf, qinq_intf_t *qinq_intf, u32 *new_sw_if_index, u8 *error0, u32 *is_l2)
 
static ethernet_main_tvnet_get_ethernet_main (void)
 
void ethernet_update_adjacency (vnet_main_t *vnm, u32 sw_if_index, u32 ai)
 
u8ethernet_build_rewrite (vnet_main_t *vnm, u32 sw_if_index, vnet_link_t link_type, const void *dst_address)
 build a rewrite string to use for sending packets of type 'link_type' to 'dst_address' More...
 
const u8ethernet_ip4_mcast_dst_addr (void)
 
const u8ethernet_ip6_mcast_dst_addr (void)
 
void ethernet_input_init (vlib_main_t *vm, ethernet_main_t *em)
 

Variables

vnet_hw_interface_class_t ethernet_hw_interface_class
 
ethernet_main_t ethernet_main
 
vlib_node_registration_t ethernet_input_node
 (constructor) VLIB_REGISTER_NODE (ethernet_input_node) More...
 

Macro Definition Documentation

#define ETH_INPUT_FRAME_F_IP4_CKSUM_OK   (1 << 1)

Definition at line 55 of file ethernet.h.

#define ETH_INPUT_FRAME_F_SINGLE_SW_IF_IDX   (1 << 0)

Definition at line 52 of file ethernet.h.

#define ethernet_buffer_adjust_vlan_count (   b,
 
)
Value:
( \
)
i64 word
Definition: types.h:111
#define ethernet_buffer_get_vlan_count(b)
Returns the number of VLAN headers in the current Ethernet frame in the buffer.
Definition: ethernet.h:385
#define ethernet_buffer_set_vlan_count(b, v)
Sets the number of VLAN headers in the current Ethernet frame in the buffer.
Definition: ethernet.h:393

Adjusts the vlan count by the delta in 'v'.

Definition at line 399 of file ethernet.h.

#define ethernet_buffer_adjust_vlan_count_by_bytes (   b,
 
)
Value:
( \
(b)->flags = ((b)->flags & ~VNET_BUFFER_FLAGS_VLAN_BITS) | (( \
((v) << (VNET_BUFFER_F_LOG2_VLAN_1_DEEP - 2)) \
)
u32 flags
Definition: vhost_user.h:141
#define VNET_BUFFER_FLAGS_VLAN_BITS
Definition: buffer.h:89

Adjusts the vlan count by the header size byte delta in 'v'.

Definition at line 405 of file ethernet.h.

#define ethernet_buffer_get_vlan_count (   b)
Value:
( \
((b)->flags & VNET_BUFFER_FLAGS_VLAN_BITS) >> VNET_BUFFER_F_LOG2_VLAN_1_DEEP \
)
u32 flags
Definition: vhost_user.h:141
#define VNET_BUFFER_FLAGS_VLAN_BITS
Definition: buffer.h:89

Returns the number of VLAN headers in the current Ethernet frame in the buffer.

Returns 0, 1, 2 for the known header count. The value 3 indicates the number of headers is not known.

Definition at line 385 of file ethernet.h.

#define ethernet_buffer_header_size (   b)
Value:
( \
)
#define ethernet_buffer_get_vlan_count(b)
Returns the number of VLAN headers in the current Ethernet frame in the buffer.
Definition: ethernet.h:385

Determine the size of the Ethernet headers of the current frame in the buffer.

This uses the VLAN depth flags that are set by ethernet-input. Because these flags are stored in the vlib_buffer_t "flags" field this count is valid regardless of the node so long as it's checked downstream of ethernet-input; That is, the value is not stored in the opaque space.

Definition at line 420 of file ethernet.h.

#define ethernet_buffer_set_vlan_count (   b,
 
)
Value:
( \
(b)->flags = ((b)->flags & ~VNET_BUFFER_FLAGS_VLAN_BITS) | \
(((v) << VNET_BUFFER_F_LOG2_VLAN_1_DEEP) & VNET_BUFFER_FLAGS_VLAN_BITS) \
)
u32 flags
Definition: vhost_user.h:141
#define VNET_BUFFER_FLAGS_VLAN_BITS
Definition: buffer.h:89

Sets the number of VLAN headers in the current Ethernet frame in the buffer.

Values 0, 1, 2 indicate the header count. The value 3 indicates the number of headers is not known.

Definition at line 393 of file ethernet.h.

#define ethernet_error (   n,
  c,
 
)    ETHERNET_ERROR_##n,

Definition at line 178 of file ethernet.h.

#define ETHERNET_INTERFACE_FLAG_ACCEPT_ALL   (1 << 0)

Definition at line 141 of file ethernet.h.

#define ETHERNET_INTERFACE_FLAG_CONFIG_MTU (   flags)    ((flags) & ETHERNET_INTERFACE_FLAG_MTU)

Definition at line 147 of file ethernet.h.

#define ETHERNET_INTERFACE_FLAG_CONFIG_PROMISC (   flags)    (((flags) & ~ETHERNET_INTERFACE_FLAG_ACCEPT_ALL) == 0)

Definition at line 142 of file ethernet.h.

#define ETHERNET_INTERFACE_FLAG_MTU   (1 << 1)

Definition at line 146 of file ethernet.h.

#define ETHERNET_MAX_PACKET_BYTES   9216

Definition at line 133 of file ethernet.h.

#define ETHERNET_MIN_PACKET_BYTES   64

Definition at line 132 of file ethernet.h.

#define SUBINT_CONFIG_L2   (1<<5)

Definition at line 199 of file ethernet.h.

#define SUBINT_CONFIG_MATCH_0_TAG   (1<<0)

Definition at line 194 of file ethernet.h.

#define SUBINT_CONFIG_MATCH_1_TAG   (1<<1)

Definition at line 195 of file ethernet.h.

#define SUBINT_CONFIG_MATCH_2_TAG   (1<<2)

Definition at line 196 of file ethernet.h.

#define SUBINT_CONFIG_MATCH_3_TAG   (1<<3)

Definition at line 197 of file ethernet.h.

#define SUBINT_CONFIG_P2P   (1<<6)

Definition at line 200 of file ethernet.h.

#define SUBINT_CONFIG_VALID   (1<<4)

Definition at line 198 of file ethernet.h.

Typedef Documentation

typedef u32( ethernet_flag_change_function_t) (vnet_main_t *vnm, struct vnet_hw_interface_t *hi, u32 flags)

Definition at line 130 of file ethernet.h.

Enumeration Type Documentation

Enumerator
ETHERNET_N_ERROR 

Definition at line 176 of file ethernet.h.

Function Documentation

static u32 eth_create_valid_subint_match_flags ( u32  num_tags)
inlinestatic

Definition at line 205 of file ethernet.h.

+ Here is the caller graph for this function:

static u32 eth_identify_subint ( vnet_hw_interface_t hi,
u32  match_flags,
main_intf_t main_intf,
vlan_intf_t vlan_intf,
qinq_intf_t qinq_intf,
u32 new_sw_if_index,
u8 error0,
u32 is_l2 
)
inlinestatic

Definition at line 486 of file ethernet.h.

+ Here is the caller graph for this function:

static void eth_vlan_table_lookups ( ethernet_main_t em,
vnet_main_t vnm,
u32  port_sw_if_index0,
u16  first_ethertype,
u16  outer_id,
u16  inner_id,
vnet_hw_interface_t **  hi,
main_intf_t **  main_intf,
vlan_intf_t **  vlan_intf,
qinq_intf_t **  qinq_intf 
)
inlinestatic

Definition at line 447 of file ethernet.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static ethernet_header_t* ethernet_buffer_get_header ( vlib_buffer_t b)
inlinestatic

Definition at line 376 of file ethernet.h.

+ Here is the caller graph for this function:

u8* ethernet_build_rewrite ( vnet_main_t vnm,
u32  sw_if_index,
vnet_link_t  link_type,
const void *  dst_address 
)

build a rewrite string to use for sending packets of type 'link_type' to 'dst_address'

Definition at line 81 of file interface.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void ethernet_delete_interface ( vnet_main_t vnm,
u32  hw_if_index 
)

Definition at line 324 of file interface.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static_always_inline int ethernet_frame_is_any_tagged_x2 ( u16  type0,
u16  type1 
)

Definition at line 92 of file ethernet.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static_always_inline int ethernet_frame_is_any_tagged_x4 ( u16  type0,
u16  type1,
u16  type2,
u16  type3 
)

Definition at line 104 of file ethernet.h.

+ Here is the call graph for this function:

static_always_inline int ethernet_frame_is_tagged ( u16  type)

Definition at line 78 of file ethernet.h.

+ Here is the caller graph for this function:

ethernet_interface_t* ethernet_get_interface ( ethernet_main_t em,
u32  hw_if_index 
)

Definition at line 886 of file interface.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ethernet_main_t* ethernet_get_main ( vlib_main_t vm)

Definition at line 120 of file init.c.

+ Here is the caller graph for this function:

static ethernet_type_info_t* ethernet_get_type_info ( ethernet_main_t em,
ethernet_type_t  type 
)
inlinestatic

Definition at line 305 of file ethernet.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void ethernet_input_init ( vlib_main_t vm,
ethernet_main_t em 
)

Definition at line 2030 of file node.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

const u8* ethernet_ip4_mcast_dst_addr ( void  )

Definition at line 57 of file interface.c.

+ Here is the caller graph for this function:

const u8* ethernet_ip6_mcast_dst_addr ( void  )

Definition at line 67 of file interface.c.

+ Here is the caller graph for this function:

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

Definition at line 2053 of file node.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

clib_error_t* ethernet_register_interface ( vnet_main_t vnm,
u32  dev_class_index,
u32  dev_instance,
const u8 address,
u32 hw_if_index_return,
ethernet_flag_change_function_t  flag_change 
)

Definition at line 278 of file interface.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void ethernet_register_l2_input ( vlib_main_t vm,
u32  node_index 
)

Definition at line 2089 of file node.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void ethernet_register_l3_redirect ( vlib_main_t vm,
u32  node_index 
)

Definition at line 2110 of file node.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

u32 ethernet_set_flags ( vnet_main_t vnm,
u32  hw_if_index,
u32  flags 
)

Definition at line 372 of file interface.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void ethernet_set_rx_redirect ( vnet_main_t vnm,
vnet_hw_interface_t hi,
u32  enable 
)

Definition at line 1939 of file node.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void ethernet_setup_node ( vlib_main_t vm,
u32  node_index 
)
inlinestatic

Definition at line 365 of file ethernet.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void ethernet_sw_interface_set_l2_mode ( vnet_main_t vnm,
u32  sw_if_index,
u32  l2 
)

Definition at line 1750 of file node.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void ethernet_sw_interface_set_l2_mode_noport ( vnet_main_t vnm,
u32  sw_if_index,
u32  l2 
)

Definition at line 1799 of file node.c.

+ Here is the call graph for this function:

void ethernet_update_adjacency ( vnet_main_t vnm,
u32  sw_if_index,
u32  ai 
)

Definition at line 196 of file interface.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

u8* format_ethernet_address ( u8 s,
va_list *  args 
)

Definition at line 44 of file format.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

u8* format_ethernet_header ( u8 s,
va_list *  args 
)

Definition at line 178 of file format.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

u8* format_ethernet_header_with_length ( u8 s,
va_list *  args 
)

Definition at line 97 of file format.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

u8* format_ethernet_type ( u8 s,
va_list *  args 
)

Definition at line 64 of file format.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

u8* format_ethernet_vlan_tci ( u8 s,
va_list *  va 
)

Definition at line 79 of file format.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

u8* format_mac_address ( u8 s,
va_list *  args 
)

Definition at line 58 of file format.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

clib_error_t* next_by_ethertype_init ( next_by_ethertype_t l3_next)

Definition at line 1954 of file node.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

clib_error_t* next_by_ethertype_register ( next_by_ethertype_t l3_next,
u32  ethertype,
u32  next_index 
)

Definition at line 1984 of file node.c.

+ Here is the caller graph for this function:

uword unformat_ethernet_address ( unformat_input_t input,
va_list *  args 
)

Definition at line 233 of file format.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

uword unformat_ethernet_header ( unformat_input_t input,
va_list *  args 
)

Definition at line 290 of file format.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

uword unformat_ethernet_interface ( unformat_input_t input,
va_list *  args 
)

Definition at line 257 of file interface.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

uword unformat_ethernet_type_host_byte_order ( unformat_input_t input,
va_list *  args 
)

Definition at line 249 of file format.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

uword unformat_ethernet_type_net_byte_order ( unformat_input_t input,
va_list *  args 
)

Definition at line 278 of file format.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

uword unformat_mac_address ( unformat_input_t input,
va_list *  args 
)

Definition at line 241 of file format.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

uword unformat_pg_ethernet_header ( unformat_input_t input,
va_list *  args 
)

Definition at line 82 of file pg.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int vnet_create_loopback_interface ( u32 sw_if_indexp,
u8 mac_address,
u8  is_specified,
u32  user_instance 
)

Definition at line 735 of file interface.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int vnet_delete_loopback_interface ( u32  sw_if_index)

Definition at line 896 of file interface.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int vnet_delete_sub_interface ( u32  sw_if_index)

Definition at line 916 of file interface.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static ethernet_main_t* vnet_get_ethernet_main ( void  )
inlinestatic

Definition at line 536 of file ethernet.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

Variable Documentation

vnet_hw_interface_class_t ethernet_hw_interface_class
vlib_node_registration_t ethernet_input_node
Initial value:
= {
.name = "ethernet-input",
.vector_size = sizeof (u32),
.scalar_size = sizeof (ethernet_input_frame_t),
.n_errors = ETHERNET_N_ERROR,
.error_strings = ethernet_error_strings,
.n_next_nodes = ETHERNET_INPUT_N_NEXT,
.next_nodes = {
#define _(s,n)
},
.format_trace = format_ethernet_input_trace,
.unformat_buffer = unformat_ethernet_header,
}
unsigned int u32
Definition: types.h:88
static char * ethernet_error_strings[]
Definition: node.c:1887
u8 * format_ethernet_header_with_length(u8 *s, va_list *args)
Definition: format.c:97
static u8 * format_ethernet_input_trace(u8 *s, va_list *va)
Definition: node.c:71
#define foreach_ethernet_input_next
Definition: node.c:48
uword unformat_ethernet_header(unformat_input_t *input, va_list *args)
Definition: format.c:290

(constructor) VLIB_REGISTER_NODE (ethernet_input_node)

Definition at line 1894 of file node.c.

ethernet_main_t ethernet_main

Definition at line 45 of file init.c.