FD.io VPP  v19.04.2-12-g66b1689
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

#define vxlan_gpe_error (   n,
 
)    s,

Enumeration Type Documentation

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 787 of file decap.c.

Function Documentation

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.

+ Here is the call graph for this function:

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.

clib_error_t* ip4_vxlan_gpe_bypass_init ( vlib_main_t vm)

Definition at line 1212 of file decap.c.

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

Definition at line 1186 of file decap.c.

+ Here is the call graph for this function:

clib_error_t* ip6_vxlan_gpe_bypass_init ( vlib_main_t vm)

Definition at line 1246 of file decap.c.

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

Definition at line 1220 of file decap.c.

+ Here is the call graph for this function:

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

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

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 690 of file decap.c.

+ Here is the call graph for this function:

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 726 of file decap.c.

+ Here is the call graph for this function:

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:

void vxlan_gpe_register_decap_protocol ( u8  protocol_id,
uword  next_node_index 
)

Definition at line 699 of file decap.c.

+ Here is the caller graph for this function:

void vxlan_gpe_unregister_decap_protocol ( u8  protocol_id,
uword  next_node_index 
)

Definition at line 707 of file decap.c.

Variable Documentation

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,
}
format_function_t format_ip4_header
Definition: format.h:83
unsigned int u32
Definition: types.h:88
u8 * format_ip4_forward_next_trace(u8 *s, va_list *args)
Definition: ip4_forward.c:990

(constructor) VLIB_REGISTER_NODE (ip4_vxlan_gpe_bypass_node)

Definition at line 1194 of file decap.c.

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,
}
unsigned int u32
Definition: types.h:88
format_function_t format_ip6_header
Definition: format.h:97
u8 * format_ip6_forward_next_trace(u8 *s, va_list *args)
Definition: ip6_forward.c:803

(constructor) VLIB_REGISTER_NODE (ip6_vxlan_gpe_bypass_node)

Definition at line 1228 of file decap.c.

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,
}
static char * vxlan_gpe_error_strings[]
VXLAN GPE error strings.
Definition: decap.c:736
unsigned int u32
Definition: types.h:88
#define ARRAY_LEN(x)
Definition: clib.h:62
#define foreach_vxlan_gpe_input_next
next nodes for VXLAN GPE input
Definition: vxlan_gpe.h:171
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
static u8 * format_vxlan_gpe_rx_trace(u8 *s, va_list *args)
Tracing function for VXLAN GPE packet decapsulation.
Definition: decap.c:48

(constructor) VLIB_REGISTER_NODE (vxlan4_gpe_input_node)

Definition at line 744 of file decap.c.

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,
}
static char * vxlan_gpe_error_strings[]
VXLAN GPE error strings.
Definition: decap.c:736
unsigned int u32
Definition: types.h:88
#define ARRAY_LEN(x)
Definition: clib.h:62
#define foreach_vxlan_gpe_input_next
next nodes for VXLAN GPE input
Definition: vxlan_gpe.h:171
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
static u8 * format_vxlan_gpe_rx_trace(u8 *s, va_list *args)
Tracing function for VXLAN GPE packet decapsulation.
Definition: decap.c:48

(constructor) VLIB_REGISTER_NODE (vxlan6_gpe_input_node)

Definition at line 766 of file decap.c.

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

VXLAN GPE error strings.

Definition at line 736 of file decap.c.