FD.io VPP  v21.10.1-2-g0a485f517
Vector Packet Processing
decap.c File Reference

Functions for decapsulating VXLAN GPE tunnels. More...

+ Include dependency graph for decap.c:

Go to the source code of this file.

Data Structures

struct  vxlan_gpe_rx_trace_t
 Struct for VXLAN GPE decap packet tracing. More...
 

Macros

#define vxlan_gpe_error(n, s)   s,
 

Enumerations

enum  ip_vxlan_bypass_next_t {
  IP_VXLAN_BYPASS_NEXT_DROP, IP_VXLAN_BYPASS_NEXT_VXLAN, IP_VXLAN_BYPASS_N_NEXT, IP_VXLAN_BYPASS_NEXT_DROP,
  IP_VXLAN_BYPASS_NEXT_VXLAN, IP_VXLAN_BYPASS_N_NEXT
}
 

Functions

static u8format_vxlan_gpe_rx_trace (u8 *s, va_list *args)
 Tracing function for VXLAN GPE packet decapsulation. More...
 
static u8format_vxlan_gpe_with_length (u8 *s, va_list *args)
 Tracing function for VXLAN GPE packet decapsulation including length. More...
 
static uword vxlan_gpe_input (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame, u8 is_ip4)
 Common processing for IPv4 and IPv6 VXLAN GPE decap dispatch functions. More...
 
VLIB_NODE_FN() vxlan4_gpe_input_node (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
 Graph processing dispatch function for IPv4 VXLAN GPE. More...
 
void vxlan_gpe_register_decap_protocol (u8 protocol_id, uword next_node_index)
 
void vxlan_gpe_unregister_decap_protocol (u8 protocol_id, uword next_node_index)
 
VLIB_NODE_FN() vxlan6_gpe_input_node (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
 Graph processing dispatch function for IPv6 VXLAN GPE. More...
 
static uword ip_vxlan_gpe_bypass_inline (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame, u32 is_ip4)
 
VLIB_NODE_FN() ip4_vxlan_gpe_bypass_node (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
 
clib_error_tip4_vxlan_gpe_bypass_init (vlib_main_t *vm)
 
VLIB_NODE_FN() ip6_vxlan_gpe_bypass_node (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
 
clib_error_tip6_vxlan_gpe_bypass_init (vlib_main_t *vm)
 

Variables

static char * vxlan_gpe_error_strings []
 VXLAN GPE error strings. More...
 
vlib_node_registration_t vxlan4_gpe_input_node
 (constructor) VLIB_REGISTER_NODE (vxlan4_gpe_input_node) More...
 
vlib_node_registration_t vxlan6_gpe_input_node
 (constructor) VLIB_REGISTER_NODE (vxlan6_gpe_input_node) More...
 
vlib_node_registration_t ip4_vxlan_gpe_bypass_node
 (constructor) VLIB_REGISTER_NODE (ip4_vxlan_gpe_bypass_node) More...
 
vlib_node_registration_t ip6_vxlan_gpe_bypass_node
 (constructor) VLIB_REGISTER_NODE (ip6_vxlan_gpe_bypass_node) More...
 

Detailed Description

Functions for decapsulating VXLAN GPE tunnels.

Definition in file decap.c.

Macro Definition Documentation

◆ vxlan_gpe_error

#define vxlan_gpe_error (   n,
 
)    s,

Enumeration Type Documentation

◆ ip_vxlan_bypass_next_t

Enumerator
IP_VXLAN_BYPASS_NEXT_DROP 
IP_VXLAN_BYPASS_NEXT_VXLAN 
IP_VXLAN_BYPASS_N_NEXT 
IP_VXLAN_BYPASS_NEXT_DROP 
IP_VXLAN_BYPASS_NEXT_VXLAN 
IP_VXLAN_BYPASS_N_NEXT 

Definition at line 775 of file decap.c.

Function Documentation

◆ format_vxlan_gpe_rx_trace()

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

Tracing function for VXLAN GPE packet decapsulation.

Parameters
*s
*args
Returns
*s

Definition at line 48 of file decap.c.

◆ format_vxlan_gpe_with_length()

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

Tracing function for VXLAN GPE packet decapsulation including length.

Parameters
*s
*args
Returns
*s

Definition at line 77 of file decap.c.

◆ ip4_vxlan_gpe_bypass_init()

clib_error_t* ip4_vxlan_gpe_bypass_init ( vlib_main_t vm)

Definition at line 1194 of file decap.c.

◆ ip4_vxlan_gpe_bypass_node()

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

Definition at line 1168 of file decap.c.

+ Here is the call graph for this function:

◆ ip6_vxlan_gpe_bypass_init()

clib_error_t* ip6_vxlan_gpe_bypass_init ( vlib_main_t vm)

Definition at line 1228 of file decap.c.

◆ ip6_vxlan_gpe_bypass_node()

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

Definition at line 1202 of file decap.c.

+ Here is the call graph for this function:

◆ ip_vxlan_gpe_bypass_inline()

static uword ip_vxlan_gpe_bypass_inline ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t frame,
u32  is_ip4 
)
inlinestatic

Definition at line 783 of file decap.c.

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

◆ vxlan4_gpe_input_node()

VLIB_NODE_FN() vxlan4_gpe_input_node ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t from_frame 
)

Graph processing dispatch function for IPv4 VXLAN GPE.

Node Identifier:
vxlan4-gpe-input
Parameters
*vm
*node
*from_frame
Returns
from_frame->n_vectors

Definition at line 678 of file decap.c.

+ Here is the call graph for this function:

◆ vxlan6_gpe_input_node()

VLIB_NODE_FN() vxlan6_gpe_input_node ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t from_frame 
)

Graph processing dispatch function for IPv6 VXLAN GPE.

Node Identifier:
vxlan6-gpe-input
Parameters
*vm
*node
*from_frame
Returns
from_frame->n_vectors - uword

Definition at line 714 of file decap.c.

+ Here is the call graph for this function:

◆ vxlan_gpe_input()

static uword vxlan_gpe_input ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t from_frame,
u8  is_ip4 
)
inlinestatic

Common processing for IPv4 and IPv6 VXLAN GPE decap dispatch functions.

It is worth noting that other than trivial UDP forwarding (transit), VXLAN GPE tunnels are "terminate local". This means that there is no "TX" interface for this decap case, so that field in the buffer_metadata can be "used for something else". The something else in this case is, for the IPv4/IPv6 inner-packet type case, the FIB index used to look up the inner-packet's adjacency.

 vnet_buffer(b0)->sw_if_index[VLIB_TX] = t0->decap_fib_index;
Parameters
*vm
*node
*from_frame
is_ip4
Returns
from_frame->n_vectors

ip[46] lookup in the configured FIB

Definition at line 106 of file decap.c.

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

◆ vxlan_gpe_register_decap_protocol()

void vxlan_gpe_register_decap_protocol ( u8  protocol_id,
uword  next_node_index 
)

Definition at line 687 of file decap.c.

+ Here is the caller graph for this function:

◆ vxlan_gpe_unregister_decap_protocol()

void vxlan_gpe_unregister_decap_protocol ( u8  protocol_id,
uword  next_node_index 
)

Definition at line 695 of file decap.c.

Variable Documentation

◆ ip4_vxlan_gpe_bypass_node

vlib_node_registration_t ip4_vxlan_gpe_bypass_node
Initial value:
= {
.name = "ip4-vxlan-gpe-bypass",
.vector_size = sizeof (u32),
.n_next_nodes = IP_VXLAN_BYPASS_N_NEXT,
.next_nodes = {
[IP_VXLAN_BYPASS_NEXT_DROP] = "error-drop",
[IP_VXLAN_BYPASS_NEXT_VXLAN] = "vxlan4-gpe-input",
},
.format_buffer = format_ip4_header,
}

(constructor) VLIB_REGISTER_NODE (ip4_vxlan_gpe_bypass_node)

Definition at line 1176 of file decap.c.

◆ ip6_vxlan_gpe_bypass_node

vlib_node_registration_t ip6_vxlan_gpe_bypass_node
Initial value:
= {
.name = "ip6-vxlan-gpe-bypass",
.vector_size = sizeof (u32),
.n_next_nodes = IP_VXLAN_BYPASS_N_NEXT,
.next_nodes = {
[IP_VXLAN_BYPASS_NEXT_DROP] = "error-drop",
[IP_VXLAN_BYPASS_NEXT_VXLAN] = "vxlan6-gpe-input",
},
.format_buffer = format_ip6_header,
}

(constructor) VLIB_REGISTER_NODE (ip6_vxlan_gpe_bypass_node)

Definition at line 1210 of file decap.c.

◆ vxlan4_gpe_input_node

vlib_node_registration_t vxlan4_gpe_input_node
Initial value:
= {
.name = "vxlan4-gpe-input",
.vector_size = sizeof (u32),
.error_strings = vxlan_gpe_error_strings,
.n_next_nodes = VXLAN_GPE_INPUT_N_NEXT,
.next_nodes = {
#define _(s,n)
},
.format_buffer = format_vxlan_gpe_with_length,
.format_trace = format_vxlan_gpe_rx_trace,
}

(constructor) VLIB_REGISTER_NODE (vxlan4_gpe_input_node)

Definition at line 732 of file decap.c.

◆ vxlan6_gpe_input_node

vlib_node_registration_t vxlan6_gpe_input_node
Initial value:
= {
.name = "vxlan6-gpe-input",
.vector_size = sizeof (u32),
.error_strings = vxlan_gpe_error_strings,
.n_next_nodes = VXLAN_GPE_INPUT_N_NEXT,
.next_nodes = {
#define _(s,n)
},
.format_buffer = format_vxlan_gpe_with_length,
.format_trace = format_vxlan_gpe_rx_trace,
}

(constructor) VLIB_REGISTER_NODE (vxlan6_gpe_input_node)

Definition at line 754 of file decap.c.

◆ vxlan_gpe_error_strings

char* vxlan_gpe_error_strings[]
static
Initial value:
= {
#define vxlan_gpe_error(n,s)
}

VXLAN GPE error strings.

Definition at line 724 of file decap.c.

format_ip6_header
format_function_t format_ip6_header
Definition: format.h:95
IP_VXLAN_BYPASS_NEXT_DROP
@ IP_VXLAN_BYPASS_NEXT_DROP
Definition: decap.c:449
VLIB_NODE_TYPE_INTERNAL
@ VLIB_NODE_TYPE_INTERNAL
Definition: node.h:72
IP_VXLAN_BYPASS_N_NEXT
@ IP_VXLAN_BYPASS_N_NEXT
Definition: decap.c:451
format_ip4_forward_next_trace
u8 * format_ip4_forward_next_trace(u8 *s, va_list *args)
Definition: ip4_forward.c:1189
format_vxlan_gpe_with_length
static u8 * format_vxlan_gpe_with_length(u8 *s, va_list *args)
Tracing function for VXLAN GPE packet decapsulation including length.
Definition: decap.c:77
ARRAY_LEN
#define ARRAY_LEN(x)
Definition: clib.h:70
VXLAN_GPE_INPUT_N_NEXT
@ VXLAN_GPE_INPUT_N_NEXT
Definition: vxlan_gpe.h:184
IP_VXLAN_BYPASS_NEXT_VXLAN
@ IP_VXLAN_BYPASS_NEXT_VXLAN
Definition: decap.c:450
format_vxlan_gpe_rx_trace
static u8 * format_vxlan_gpe_rx_trace(u8 *s, va_list *args)
Tracing function for VXLAN GPE packet decapsulation.
Definition: decap.c:48
u32
unsigned int u32
Definition: types.h:88
format_ip4_header
format_function_t format_ip4_header
Definition: format.h:81
foreach_vxlan_gpe_input_next
#define foreach_vxlan_gpe_input_next
next nodes for VXLAN GPE input
Definition: vxlan_gpe.h:172
format_ip6_forward_next_trace
u8 * format_ip6_forward_next_trace(u8 *s, va_list *args)
Definition: ip6_forward.c:949
type
vl_api_fib_path_type_t type
Definition: fib_types.api:123
vxlan_gpe_error_strings
static char * vxlan_gpe_error_strings[]
VXLAN GPE error strings.
Definition: decap.c:724