FD.io VPP  v18.01-8-g0eacf49
Vector Packet Processing
rewrite.h File Reference
+ Include dependency graph for rewrite.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define vnet_declare_rewrite(total_bytes)
 
#define vnet_rewrite_set_data(rw, data, data_bytes)
 
#define vnet_rewrite_get_data(rw)   vnet_rewrite_get_data_internal (&((rw).rewrite_header), sizeof ((rw).rewrite_data))
 
#define vnet_rewrite_one_header(rw0, p0, most_likely_size)
 
#define vnet_rewrite_two_headers(rw0, rw1, p0, p1, most_likely_size)
 
#define vnet_fixup_one_header(rw0, addr, p0)
 
#define VNET_REWRITE_FOR_SW_INTERFACE_ADDRESS_BROADCAST   ((void *) 0)
 

Typedefs

typedef uword vnet_rewrite_data_t
 
typedef enum vnet_rewrite_flags_t_ vnet_rewrite_flags_t
 Flags associated with the rewrite/adjacency. More...
 

Enumerations

enum  vnet_rewrite_flags_t_ { VNET_REWRITE_HAS_FEATURES = (1 << 0) }
 Flags associated with the rewrite/adjacency. More...
 

Functions

typedef CLIB_PACKED (struct{u32 sw_if_index;u16 next_index;u16 data_bytes;u16 max_l3_packet_bytes;vnet_rewrite_flags_t flags;u8 dst_mcast_offset;u32 dst_mcast_mask;u8 data[0];}) vnet_rewrite_header_t
 
 STATIC_ASSERT (sizeof(vnet_rewrite_header_t)<=16,"Rewrite header too big")
 At 16 bytes of rewrite herader we have enought space left for a IPv6 (40 bytes) + LISP-GPE (8 bytes) in the cache line. More...
 
static void vnet_rewrite_clear_data_internal (vnet_rewrite_header_t *rw, int max_size)
 
static void vnet_rewrite_set_data_internal (vnet_rewrite_header_t *rw, int max_size, void *data, int data_bytes)
 
static void * vnet_rewrite_get_data_internal (vnet_rewrite_header_t *rw, int max_size)
 
static void vnet_rewrite_copy_one (vnet_rewrite_data_t *p0, vnet_rewrite_data_t *rw0, int i)
 
void vnet_rewrite_copy_slow_path (vnet_rewrite_data_t *p0, vnet_rewrite_data_t *rw0, word n_left, uword most_likely_size)
 
typedef CLIB_PACKED (struct{u64 a;u32 b;u16 c;}) eh_copy_t
 
void vnet_rewrite_for_sw_interface (struct vnet_main_t *vnm, vnet_link_t packet_type, u32 sw_if_index, u32 node_index, void *dst_address, vnet_rewrite_header_t *rw, u32 max_rewrite_bytes)
 Deprecated. More...
 
u32 vnet_tx_node_index_for_sw_interface (struct vnet_main_t *vnm, u32 sw_if_index)
 
void vnet_rewrite_init (struct vnet_main_t *vnm, u32 sw_if_index, u32 this_node, u32 next_node, vnet_rewrite_header_t *rw)
 
u8vnet_build_rewrite_for_sw_interface (struct vnet_main_t *vnm, u32 sw_if_index, vnet_link_t packet_type, const void *dst_address)
 
void vnet_update_adjacency_for_sw_interface (struct vnet_main_t *vnm, u32 sw_if_index, u32 ai)
 

Variables

format_function_t format_vnet_rewrite
 
serialize_function_t serialize_vnet_rewrite
 
serialize_function_t unserialize_vnet_rewrite
 

Macro Definition Documentation

#define vnet_declare_rewrite (   total_bytes)
Value:
struct { \
vnet_rewrite_header_t rewrite_header; \
\
u8 rewrite_data[(total_bytes) - sizeof (vnet_rewrite_header_t)]; \
}
unsigned char u8
Definition: types.h:56

Definition at line 112 of file rewrite.h.

#define vnet_fixup_one_header (   rw0,
  addr,
  p0 
)
Value:
_vnet_fixup_one_header (&((rw0).rewrite_header), \
(u8*)(addr), sizeof((*addr)), \
(u8*)(p0))
unsigned char u8
Definition: types.h:56
vhost_vring_addr_t addr
Definition: vhost-user.h:83

Definition at line 308 of file rewrite.h.

#define VNET_REWRITE_FOR_SW_INTERFACE_ADDRESS_BROADCAST   ((void *) 0)

Definition at line 313 of file rewrite.h.

#define vnet_rewrite_get_data (   rw)    vnet_rewrite_get_data_internal (&((rw).rewrite_header), sizeof ((rw).rewrite_data))

Definition at line 155 of file rewrite.h.

#define vnet_rewrite_one_header (   rw0,
  p0,
  most_likely_size 
)
Value:
_vnet_rewrite_one_header (&((rw0).rewrite_header), (p0), \
sizeof ((rw0).rewrite_data), \
(most_likely_size))

Definition at line 281 of file rewrite.h.

#define vnet_rewrite_set_data (   rw,
  data,
  data_bytes 
)
Value:
vnet_rewrite_set_data_internal (&((rw).rewrite_header), \
sizeof ((rw).rewrite_data), \
(data), \
(data_bytes))
static void vnet_rewrite_set_data_internal(vnet_rewrite_header_t *rw, int max_size, void *data, int data_bytes)
Definition: rewrite.h:130

Definition at line 142 of file rewrite.h.

#define vnet_rewrite_two_headers (   rw0,
  rw1,
  p0,
  p1,
  most_likely_size 
)
Value:
_vnet_rewrite_two_headers (&((rw0).rewrite_header), &((rw1).rewrite_header), \
(p0), (p1), \
sizeof ((rw0).rewrite_data), \
(most_likely_size))

Definition at line 286 of file rewrite.h.

Typedef Documentation

Definition at line 47 of file rewrite.h.

Flags associated with the rewrite/adjacency.

Enumeration Type Documentation

Flags associated with the rewrite/adjacency.

Enumerator
VNET_REWRITE_HAS_FEATURES 

This adjacency/interface has output features configured.

Definition at line 52 of file rewrite.h.

Function Documentation

typedef CLIB_PACKED ( struct{u32 sw_if_index;u16 next_index;u16 data_bytes;u16 max_l3_packet_bytes;vnet_rewrite_flags_t flags;u8 dst_mcast_offset;u32 dst_mcast_mask;u8 data[0];}  )

+ Here is the caller graph for this function:

typedef CLIB_PACKED ( struct{u64 a;u32 b;u16 c;}  )
STATIC_ASSERT ( sizeof(vnet_rewrite_header_t)<=  16,
"Rewrite header too big"   
)

At 16 bytes of rewrite herader we have enought space left for a IPv6 (40 bytes) + LISP-GPE (8 bytes) in the cache line.

u8* vnet_build_rewrite_for_sw_interface ( struct vnet_main_t vnm,
u32  sw_if_index,
vnet_link_t  packet_type,
const void *  dst_address 
)

Definition at line 202 of file rewrite.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void vnet_rewrite_clear_data_internal ( vnet_rewrite_header_t *  rw,
int  max_size 
)
inlinestatic

Definition at line 120 of file rewrite.h.

+ Here is the caller graph for this function:

static void vnet_rewrite_copy_one ( vnet_rewrite_data_t p0,
vnet_rewrite_data_t rw0,
int  i 
)
inlinestatic

Definition at line 159 of file rewrite.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void vnet_rewrite_copy_slow_path ( vnet_rewrite_data_t p0,
vnet_rewrite_data_t rw0,
word  n_left,
uword  most_likely_size 
)

Definition at line 44 of file rewrite.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void vnet_rewrite_for_sw_interface ( struct vnet_main_t vnm,
vnet_link_t  packet_type,
u32  sw_if_index,
u32  node_index,
void *  dst_address,
vnet_rewrite_header_t *  rw,
u32  max_rewrite_bytes 
)

Deprecated.

Definition at line 114 of file rewrite.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void* vnet_rewrite_get_data_internal ( vnet_rewrite_header_t *  rw,
int  max_size 
)
inlinestatic

Definition at line 149 of file rewrite.h.

+ Here is the caller graph for this function:

void vnet_rewrite_init ( struct vnet_main_t vnm,
u32  sw_if_index,
u32  this_node,
u32  next_node,
vnet_rewrite_header_t *  rw 
)

Definition at line 103 of file rewrite.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void vnet_rewrite_set_data_internal ( vnet_rewrite_header_t *  rw,
int  max_size,
void *  data,
int  data_bytes 
)
inlinestatic

Definition at line 130 of file rewrite.h.

+ Here is the caller graph for this function:

u32 vnet_tx_node_index_for_sw_interface ( struct vnet_main_t vnm,
u32  sw_if_index 
)

Definition at line 96 of file rewrite.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void vnet_update_adjacency_for_sw_interface ( struct vnet_main_t vnm,
u32  sw_if_index,
u32  ai 
)

Definition at line 217 of file rewrite.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

Variable Documentation

format_function_t format_vnet_rewrite

Definition at line 338 of file rewrite.h.

serialize_function_t serialize_vnet_rewrite

Definition at line 340 of file rewrite.h.

serialize_function_t unserialize_vnet_rewrite

Definition at line 340 of file rewrite.h.