FD.io VPP  v19.04.4-rc0-5-ge88582fac
Vector Packet Processing
gre.c File Reference
+ Include dependency graph for gre.c:

Go to the source code of this file.

Data Structures

struct  ip4_and_gre_union_t
 IPv4 and GRE header union. More...
 
struct  ip6_and_gre_union_t
 
struct  gre_tx_trace_t
 

Macros

#define is_v4_packet(_h)   ((*(u8*) _h) & 0xF0) == 0x40
 
#define gre_error(n, s)   s,
 

Enumerations

enum  gre_encap_next_t { GRE_ENCAP_NEXT_L2_MIDCHAIN, GRE_ENCAP_N_NEXT }
 

Functions

u8format_gre_tx_trace (u8 *s, va_list *args)
 
u8format_gre_protocol (u8 *s, va_list *args)
 
u8format_gre_header_with_length (u8 *s, va_list *args)
 
u8format_gre_header (u8 *s, va_list *args)
 
uword unformat_gre_protocol_host_byte_order (unformat_input_t *input, va_list *args)
 
uword unformat_gre_protocol_net_byte_order (unformat_input_t *input, va_list *args)
 
uword unformat_gre_header (unformat_input_t *input, va_list *args)
 
static int gre_proto_from_vnet_link (vnet_link_t link)
 
static u8gre_build_rewrite (vnet_main_t *vnm, u32 sw_if_index, vnet_link_t link_type, const void *dst_address)
 
static void gre4_fixup (vlib_main_t *vm, ip_adjacency_t *adj, vlib_buffer_t *b0, const void *data)
 
static void gre6_fixup (vlib_main_t *vm, ip_adjacency_t *adj, vlib_buffer_t *b0, const void *data)
 
void gre_update_adj (vnet_main_t *vnm, u32 sw_if_index, adj_index_t ai)
 
VLIB_NODE_FN() gre_encap_node (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
 TX function. More...
 
static u8format_gre_tunnel_name (u8 *s, va_list *args)
 
static u8format_gre_device (u8 *s, va_list *args)
 
 VNET_DEVICE_CLASS (gre_device_class)
 
 VNET_HW_INTERFACE_CLASS (gre_hw_interface_class)
 
static void add_protocol (gre_main_t *gm, gre_protocol_t protocol, char *protocol_name)
 
static clib_error_tgre_init (vlib_main_t *vm)
 

Variables

gre_main_t gre_main
 
static char * gre_error_strings []
 
vlib_node_registration_t gre_encap_node
 (constructor) VLIB_REGISTER_NODE (gre_encap_node) More...
 

Macro Definition Documentation

◆ gre_error

#define gre_error (   n,
 
)    s,

◆ is_v4_packet

#define is_v4_packet (   _h)    ((*(u8*) _h) & 0xF0) == 0x40

Definition at line 275 of file gre.c.

Enumeration Type Documentation

◆ gre_encap_next_t

Enumerator
GRE_ENCAP_NEXT_L2_MIDCHAIN 
GRE_ENCAP_N_NEXT 

Definition at line 331 of file gre.c.

Function Documentation

◆ add_protocol()

static void add_protocol ( gre_main_t gm,
gre_protocol_t  protocol,
char *  protocol_name 
)
static

Definition at line 557 of file gre.c.

◆ format_gre_device()

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

Definition at line 524 of file gre.c.

+ Here is the call graph for this function:

◆ format_gre_header()

u8* format_gre_header ( u8 s,
va_list *  args 
)

Definition at line 125 of file gre.c.

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

◆ format_gre_header_with_length()

u8* format_gre_header_with_length ( u8 s,
va_list *  args 
)

Definition at line 94 of file gre.c.

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

◆ format_gre_protocol()

u8* format_gre_protocol ( u8 s,
va_list *  args 
)

Definition at line 79 of file gre.c.

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

◆ format_gre_tunnel_name()

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

Definition at line 510 of file gre.c.

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

◆ format_gre_tx_trace()

u8 * format_gre_tx_trace ( u8 s,
va_list *  args 
)

Definition at line 65 of file gre.c.

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

◆ gre4_fixup()

static void gre4_fixup ( vlib_main_t vm,
ip_adjacency_t adj,
vlib_buffer_t b0,
const void *  data 
)
static

Definition at line 278 of file gre.c.

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

◆ gre6_fixup()

static void gre6_fixup ( vlib_main_t vm,
ip_adjacency_t adj,
vlib_buffer_t b0,
const void *  data 
)
static

Definition at line 292 of file gre.c.

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

◆ gre_build_rewrite()

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

Definition at line 211 of file gre.c.

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

◆ gre_encap_node()

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

TX function.

Only called for L2 payload including TEB or ERSPAN. L3 traffic uses the adj-midchains.

Definition at line 341 of file gre.c.

+ Here is the call graph for this function:

◆ gre_init()

static clib_error_t* gre_init ( vlib_main_t vm)
static

Definition at line 574 of file gre.c.

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

◆ gre_proto_from_vnet_link()

static int gre_proto_from_vnet_link ( vnet_link_t  link)
static

Definition at line 188 of file gre.c.

+ Here is the caller graph for this function:

◆ gre_update_adj()

void gre_update_adj ( vnet_main_t vnm,
u32  sw_if_index,
adj_index_t  ai 
)

Definition at line 307 of file gre.c.

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

◆ unformat_gre_header()

uword unformat_gre_header ( unformat_input_t input,
va_list *  args 
)

Definition at line 164 of file gre.c.

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

◆ unformat_gre_protocol_host_byte_order()

uword unformat_gre_protocol_host_byte_order ( unformat_input_t input,
va_list *  args 
)

Definition at line 133 of file gre.c.

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

◆ unformat_gre_protocol_net_byte_order()

uword unformat_gre_protocol_net_byte_order ( unformat_input_t input,
va_list *  args 
)

Definition at line 153 of file gre.c.

+ Here is the call graph for this function:

◆ VNET_DEVICE_CLASS()

VNET_DEVICE_CLASS ( gre_device_class  )
+ Here is the caller graph for this function:

◆ VNET_HW_INTERFACE_CLASS()

VNET_HW_INTERFACE_CLASS ( gre_hw_interface_class  )
+ Here is the caller graph for this function:

Variable Documentation

◆ gre_encap_node

vlib_node_registration_t gre_encap_node
Initial value:
=
{
.name = "gre-encap",
.vector_size = sizeof (u32),
.format_trace = format_gre_tx_trace,
.n_errors = GRE_N_ERROR,
.error_strings = gre_error_strings,
.n_next_nodes = GRE_ENCAP_N_NEXT,
.next_nodes = {
[GRE_ENCAP_NEXT_L2_MIDCHAIN] = "adj-l2-midchain",
},
}
unsigned int u32
Definition: types.h:88
u8 * format_gre_tx_trace(u8 *s, va_list *args)
Definition: gre.c:65
static char * gre_error_strings[]
Definition: gre.c:486

(constructor) VLIB_REGISTER_NODE (gre_encap_node)

Definition at line 493 of file gre.c.

◆ gre_error_strings

char* gre_error_strings[]
static
Initial value:
= {
#define gre_error(n,s)
gre_error (NONE, "no error")
gre_error (UNKNOWN_PROTOCOL, "unknown protocol")
gre_error (UNSUPPORTED_VERSION, "unsupported version")
gre_error (PKTS_DECAP, "GRE input packets decapsulated")
gre_error (PKTS_ENCAP, "GRE output packets encapsulated")
gre_error (NO_SUCH_TUNNEL, "GRE input packets dropped due to missing tunnel")
}
option version
Definition: memclnt.api:17
#define gre_error(n, s)
u8 protocol
Definition: ipsec.api:96

Definition at line 486 of file gre.c.

◆ gre_main

gre_main_t gre_main

Definition at line 25 of file gre.c.