FD.io VPP  v18.07-34-g55fbdb9
Vector Packet Processing
gre.h File Reference
+ Include dependency graph for gre.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  gre_protocol_info_t
 A GRE payload protocol registration. More...
 
struct  gre_tunnel_key4_t_
 Key for a IPv4 GRE Tunnel. More...
 
struct  gre_tunnel_key6_t_
 Key for a IPv6 GRE Tunnel We use a different type so that the V4 key hash is as small as possible. More...
 
union  gre_tunnel_key_t_
 Union of the two possible key types. More...
 
struct  gre_sn_t
 Used for GRE header seq number generation for ERSPAN encap. More...
 
struct  gre_sn_key_t
 Hash key for GRE header seq number generation for ERSPAN encap. More...
 
struct  gre_tunnel_t
 A representation of a GRE tunnel. More...
 
struct  next_info_t
 
struct  gre_main_t
 GRE related global data. More...
 
struct  vnet_gre_add_del_tunnel_args_t
 

Macros

#define gre_error(n, s)   GRE_ERROR_##n,
 
#define GRE_TUNNEL_TYPE_NAMES
 
#define GTK_FIB_INDEX_SHIFT   12
 
#define GTK_FIB_INDEX_MASK   0xfffff000
 
#define GTK_TYPE_SHIFT   0
 
#define GTK_TYPE_MASK   0x3
 
#define GTK_SESSION_ID_SHIFT   2
 
#define GTK_SESSION_ID_MASK   0xffc
 
#define GTK_SESSION_ID_MAX   (GTK_SESSION_ID_MASK >> GTK_SESSION_ID_SHIFT)
 
#define GRE_OUTPUT_NEXT_LOOKUP   1
 

Typedefs

typedef enum gre_tunnel_type_t_ gre_tunnel_type_t
 The GRE tunnel type. More...
 
typedef struct gre_tunnel_key4_t_ gre_tunnel_key4_t
 Key for a IPv4 GRE Tunnel. More...
 
typedef struct gre_tunnel_key6_t_ gre_tunnel_key6_t
 Key for a IPv6 GRE Tunnel We use a different type so that the V4 key hash is as small as possible. More...
 
typedef union gre_tunnel_key_t_ gre_tunnel_key_t
 Union of the two possible key types. More...
 

Enumerations

enum  gre_error_t { GRE_N_ERROR }
 
enum  gre_tunnel_type_t_ { GRE_TUNNEL_TYPE_L3 = 0, GRE_TUNNEL_TYPE_TEB = 1, GRE_TUNNEL_TYPE_ERSPAN = 2, GRE_TUNNEL_TYPE_N }
 The GRE tunnel type. More...
 

Functions

typedef CLIB_PACKED (struct{ip4_header_t ip4;gre_header_t gre;}) ip4_and_gre_header_t
 IPv4 and GRE header. More...
 
typedef CLIB_PACKED (struct{ip6_header_t ip6;gre_header_t gre;}) ip6_and_gre_header_t
 IPv6 and GRE header. More...
 
static gre_protocol_info_tgre_get_protocol_info (gre_main_t *em, gre_protocol_t protocol)
 
clib_error_tgre_interface_admin_up_down (vnet_main_t *vnm, u32 hw_if_index, u32 flags)
 
void gre_tunnel_stack (adj_index_t ai)
 gre_tunnel_stack More...
 
void gre_update_adj (vnet_main_t *vnm, u32 sw_if_index, adj_index_t ai)
 
void gre_register_input_protocol (vlib_main_t *vm, gre_protocol_t protocol, u32 node_index, gre_tunnel_type_t tunnel_type)
 
int vnet_gre_add_del_tunnel (vnet_gre_add_del_tunnel_args_t *a, u32 *sw_if_indexp)
 
static void gre_mk_key4 (ip4_address_t src, ip4_address_t dst, u32 fib_index, u8 ttype, u16 session_id, gre_tunnel_key4_t *key)
 
static int gre_match_key4 (const gre_tunnel_key4_t *key1, const gre_tunnel_key4_t *key2)
 
static void gre_mk_key6 (const ip6_address_t *src, const ip6_address_t *dst, u32 fib_index, u8 ttype, u16 session_id, gre_tunnel_key6_t *key)
 
static int gre_match_key6 (const gre_tunnel_key6_t *key1, const gre_tunnel_key6_t *key2)
 
static void gre_mk_sn_key (const gre_tunnel_t *gt, gre_sn_key_t *key)
 

Variables

vnet_hw_interface_class_t gre_hw_interface_class
 
gre_main_t gre_main
 
format_function_t format_gre_protocol
 
format_function_t format_gre_header
 
format_function_t format_gre_header_with_length
 
vlib_node_registration_t gre4_input_node
 (constructor) VLIB_REGISTER_NODE (gre4_input_node) More...
 
vlib_node_registration_t gre6_input_node
 (constructor) VLIB_REGISTER_NODE (gre6_input_node) More...
 
vlib_node_registration_t gre_encap_node
 (constructor) VLIB_REGISTER_NODE (gre_encap_node) More...
 
vnet_device_class_t gre_device_class
 
unformat_function_t unformat_gre_protocol_host_byte_order
 
unformat_function_t unformat_gre_protocol_net_byte_order
 
unformat_function_t unformat_gre_header
 
unformat_function_t unformat_pg_gre_header
 

Macro Definition Documentation

#define gre_error (   n,
 
)    GRE_ERROR_##n,

Definition at line 32 of file gre.h.

#define GRE_OUTPUT_NEXT_LOOKUP   1

Definition at line 363 of file gre.h.

#define GRE_TUNNEL_TYPE_NAMES
Value:
{ \
[GRE_TUNNEL_TYPE_L3] = "L3", \
[GRE_TUNNEL_TYPE_TEB] = "TEB", \
[GRE_TUNNEL_TYPE_ERSPAN] = "ERSPAN", \
}
Transparent Ethernet Bridging - the tunnel is in L2 mode.
Definition: gre.h:50
ERSPAN type 2 - the tunnel is for port mirror SPAN output.
Definition: gre.h:57
L3 GRE (i.e.
Definition: gre.h:46

Definition at line 62 of file gre.h.

#define GTK_FIB_INDEX_MASK   0xfffff000

Definition at line 138 of file gre.h.

#define GTK_FIB_INDEX_SHIFT   12

Definition at line 137 of file gre.h.

#define GTK_SESSION_ID_MASK   0xffc

Definition at line 142 of file gre.h.

#define GTK_SESSION_ID_MAX   (GTK_SESSION_ID_MASK >> GTK_SESSION_ID_SHIFT)

Definition at line 143 of file gre.h.

#define GTK_SESSION_ID_SHIFT   2

Definition at line 141 of file gre.h.

#define GTK_TYPE_MASK   0x3

Definition at line 140 of file gre.h.

#define GTK_TYPE_SHIFT   0

Definition at line 139 of file gre.h.

Typedef Documentation

Key for a IPv4 GRE Tunnel.

Key for a IPv6 GRE Tunnel We use a different type so that the V4 key hash is as small as possible.

Union of the two possible key types.

The GRE tunnel type.

Enumeration Type Documentation

Enumerator
GRE_N_ERROR 

Definition at line 30 of file gre.h.

The GRE tunnel type.

Enumerator
GRE_TUNNEL_TYPE_L3 

L3 GRE (i.e.

this tunnel is in L3 mode)

GRE_TUNNEL_TYPE_TEB 

Transparent Ethernet Bridging - the tunnel is in L2 mode.

GRE_TUNNEL_TYPE_ERSPAN 

ERSPAN type 2 - the tunnel is for port mirror SPAN output.

Each tunnel is associated with a session ID and expected to be used for encap and output of mirrored packet from a L2 network only. There is no support for receiving ERSPAN packets from a GRE ERSPAN tunnel in VPP.

GRE_TUNNEL_TYPE_N 

Definition at line 41 of file gre.h.

Function Documentation

typedef CLIB_PACKED ( struct{ip4_header_t ip4;gre_header_t gre;}  )

IPv4 and GRE header.

typedef CLIB_PACKED ( struct{ip6_header_t ip6;gre_header_t gre;}  )

IPv6 and GRE header.

static gre_protocol_info_t* gre_get_protocol_info ( gre_main_t em,
gre_protocol_t  protocol 
)
inlinestatic

Definition at line 325 of file gre.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

clib_error_t* gre_interface_admin_up_down ( vnet_main_t vnm,
u32  hw_if_index,
u32  flags 
)

Definition at line 483 of file interface.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static int gre_match_key4 ( const gre_tunnel_key4_t key1,
const gre_tunnel_key4_t key2 
)
inlinestatic

Definition at line 391 of file gre.h.

+ Here is the caller graph for this function:

static int gre_match_key6 ( const gre_tunnel_key6_t key1,
const gre_tunnel_key6_t key2 
)
inlinestatic

Definition at line 410 of file gre.h.

+ Here is the caller graph for this function:

static void gre_mk_key4 ( ip4_address_t  src,
ip4_address_t  dst,
u32  fib_index,
u8  ttype,
u16  session_id,
gre_tunnel_key4_t key 
)
inlinestatic

Definition at line 380 of file gre.h.

+ Here is the caller graph for this function:

static void gre_mk_key6 ( const ip6_address_t src,
const ip6_address_t dst,
u32  fib_index,
u8  ttype,
u16  session_id,
gre_tunnel_key6_t key 
)
inlinestatic

Definition at line 399 of file gre.h.

+ Here is the caller graph for this function:

static void gre_mk_sn_key ( const gre_tunnel_t gt,
gre_sn_key_t key 
)
inlinestatic

Definition at line 421 of file gre.h.

+ Here is the caller graph for this function:

void gre_register_input_protocol ( vlib_main_t vm,
gre_protocol_t  protocol,
u32  node_index,
gre_tunnel_type_t  tunnel_type 
)

Definition at line 624 of file node.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void gre_tunnel_stack ( adj_index_t  ai)

gre_tunnel_stack

'stack' (resolve the recursion for) the tunnel's midchain adjacency

Definition at line 128 of file interface.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

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

Definition at line 300 of file gre.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int vnet_gre_add_del_tunnel ( vnet_gre_add_del_tunnel_args_t a,
u32 sw_if_indexp 
)

Definition at line 460 of file interface.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

Variable Documentation

format_function_t format_gre_header

Definition at line 341 of file gre.h.

format_function_t format_gre_header_with_length

Definition at line 342 of file gre.h.

format_function_t format_gre_protocol

Definition at line 340 of file gre.h.

vlib_node_registration_t gre4_input_node

(constructor) VLIB_REGISTER_NODE (gre4_input_node)

Definition at line 575 of file node.c.

vlib_node_registration_t gre6_input_node

(constructor) VLIB_REGISTER_NODE (gre6_input_node)

Definition at line 596 of file node.c.

vnet_device_class_t gre_device_class
vlib_node_registration_t gre_encap_node

(constructor) VLIB_REGISTER_NODE (gre_encap_node)

Definition at line 511 of file gre.c.

vnet_hw_interface_class_t gre_hw_interface_class
gre_main_t gre_main

Definition at line 22 of file gre.c.

unformat_function_t unformat_gre_header

Definition at line 355 of file gre.h.

unformat_function_t unformat_gre_protocol_host_byte_order

Definition at line 351 of file gre.h.

unformat_function_t unformat_gre_protocol_net_byte_order

Definition at line 352 of file gre.h.

unformat_function_t unformat_pg_gre_header

Definition at line 356 of file gre.h.