FD.io VPP  v17.01-9-ge7dcee4
Vector Packet Processing
buffer.h File Reference

vlib buffer structure definition and a few select access methods. More...

+ Include dependency graph for buffer.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  vlib_buffer_t
 
struct  vlib_buffer_free_list_t
 
struct  vlib_buffer_main_t
 
struct  vlib_serialize_buffer_main_t
 

Macros

#define VLIB_BUFFER_DATA_SIZE   (2048)
 
#define VLIB_BUFFER_PRE_DATA_SIZE   RTE_PKTMBUF_HEADROOM
 
#define VLIB_BUFFER_IS_TRACED   (1 << 0)
 
#define VLIB_BUFFER_LOG2_NEXT_PRESENT   (1)
 
#define VLIB_BUFFER_NEXT_PRESENT   (1 << VLIB_BUFFER_LOG2_NEXT_PRESENT)
 
#define VLIB_BUFFER_IS_RECYCLED   (1 << 2)
 
#define VLIB_BUFFER_TOTAL_LENGTH_VALID   (1 << 3)
 
#define VLIB_BUFFER_REPL_FAIL   (1 << 4)
 
#define VLIB_BUFFER_RECYCLE   (1 << 5)
 
#define VLIB_BUFFER_FLOW_REPORT   (1 << 6)
 
#define LOG2_VLIB_BUFFER_FLAG_USER(n)   (32 - (n))
 
#define VLIB_BUFFER_FLAG_USER(n)   (1 << LOG2_VLIB_BUFFER_FLAG_USER(n))
 
#define VLIB_BUFFER_HDR_SIZE   (sizeof(vlib_buffer_t) - VLIB_BUFFER_PRE_DATA_SIZE)
 
#define vlib_prefetch_buffer_header(b, type)   CLIB_PREFETCH (b, 64, type)
 Prefetch buffer metadata. More...
 
#define VLIB_BUFFER_DEFAULT_FREE_LIST_INDEX   (0)
 
#define VLIB_BUFFER_DEFAULT_FREE_LIST_BYTES   VLIB_BUFFER_DATA_SIZE
 
#define rte_mbuf_from_vlib_buffer(x)   (((struct rte_mbuf *)x) - 1)
 
#define vlib_buffer_from_rte_mbuf(x)   ((vlib_buffer_t *)(x+1))
 
#define VLIB_BUFFER_TRACE_TRAJECTORY   0
 Compile time buffer trajectory tracing option Turn this on if you run into "bad monkey" contexts, and you want to know exactly which nodes they've visited... More...
 
#define VLIB_BUFFER_TRACE_TRAJECTORY_INIT(b)
 

Typedefs

typedef u64 vlib_copy_unit_t
 
typedef struct vlib_buffer_free_list_t vlib_buffer_free_list_t
 

Functions

static vlib_buffer_tvlib_buffer_next_contiguous (vlib_buffer_t *b, u32 buffer_bytes)
 
static void vlib_buffer_struct_is_sane (vlib_buffer_t *b)
 
static void * vlib_buffer_get_current (vlib_buffer_t *b)
 Get pointer to current data to process. More...
 
static void vlib_buffer_advance (vlib_buffer_t *b, word l)
 Advance current data pointer by the supplied (signed!) amount. More...
 
static void vlib_buffer_reset (vlib_buffer_t *b)
 Reset current header & length to state they were in when packet was received. More...
 
static void * vlib_get_buffer_opaque (vlib_buffer_t *b)
 Get pointer to buffer's opaque data array. More...
 
static void * vlib_get_buffer_opaque2 (vlib_buffer_t *b)
 Get pointer to buffer's opaque2 data array. More...
 
void serialize_open_vlib_buffer (serialize_main_t *m, struct vlib_main_t *vm, vlib_serialize_buffer_main_t *sm)
 
void unserialize_open_vlib_buffer (serialize_main_t *m, struct vlib_main_t *vm, vlib_serialize_buffer_main_t *sm)
 
u32 serialize_close_vlib_buffer (serialize_main_t *m)
 
void unserialize_close_vlib_buffer (serialize_main_t *m)
 
void * vlib_set_buffer_free_callback (struct vlib_main_t *vm, void *fp)
 
static u32 serialize_vlib_buffer_n_bytes (serialize_main_t *m)
 

Detailed Description

vlib buffer structure definition and a few select access methods.

This structure and the buffer allocation mechanism should perhaps live in vnet, but it would take a lot of typing to make it so.

Definition in file buffer.h.

Macro Definition Documentation

#define LOG2_VLIB_BUFFER_FLAG_USER (   n)    (32 - (n))

Definition at line 105 of file buffer.h.

#define rte_mbuf_from_vlib_buffer (   x)    (((struct rte_mbuf *)x) - 1)

Definition at line 389 of file buffer.h.

#define VLIB_BUFFER_DATA_SIZE   (2048)

Definition at line 51 of file buffer.h.

#define VLIB_BUFFER_DEFAULT_FREE_LIST_BYTES   VLIB_BUFFER_DATA_SIZE

Definition at line 311 of file buffer.h.

#define VLIB_BUFFER_DEFAULT_FREE_LIST_INDEX   (0)

Definition at line 310 of file buffer.h.

#define VLIB_BUFFER_FLAG_USER (   n)    (1 << LOG2_VLIB_BUFFER_FLAG_USER(n))

Definition at line 106 of file buffer.h.

#define VLIB_BUFFER_FLOW_REPORT   (1 << 6)

Definition at line 102 of file buffer.h.

#define vlib_buffer_from_rte_mbuf (   x)    ((vlib_buffer_t *)(x+1))

Definition at line 390 of file buffer.h.

#define VLIB_BUFFER_HDR_SIZE   (sizeof(vlib_buffer_t) - VLIB_BUFFER_PRE_DATA_SIZE)

Definition at line 161 of file buffer.h.

#define VLIB_BUFFER_IS_RECYCLED   (1 << 2)

Definition at line 98 of file buffer.h.

#define VLIB_BUFFER_IS_TRACED   (1 << 0)

Definition at line 95 of file buffer.h.

#define VLIB_BUFFER_LOG2_NEXT_PRESENT   (1)

Definition at line 96 of file buffer.h.

#define VLIB_BUFFER_NEXT_PRESENT   (1 << VLIB_BUFFER_LOG2_NEXT_PRESENT)

Definition at line 97 of file buffer.h.

#define VLIB_BUFFER_PRE_DATA_SIZE   RTE_PKTMBUF_HEADROOM

Definition at line 52 of file buffer.h.

#define VLIB_BUFFER_RECYCLE   (1 << 5)

Definition at line 101 of file buffer.h.

#define VLIB_BUFFER_REPL_FAIL   (1 << 4)

Definition at line 100 of file buffer.h.

#define VLIB_BUFFER_TOTAL_LENGTH_VALID   (1 << 3)

Definition at line 99 of file buffer.h.

#define VLIB_BUFFER_TRACE_TRAJECTORY   0

Compile time buffer trajectory tracing option Turn this on if you run into "bad monkey" contexts, and you want to know exactly which nodes they've visited...

See vlib/main.c...

Definition at line 401 of file buffer.h.

#define VLIB_BUFFER_TRACE_TRAJECTORY_INIT (   b)

Definition at line 406 of file buffer.h.

#define vlib_prefetch_buffer_header (   b,
  type 
)    CLIB_PREFETCH (b, 64, type)

Prefetch buffer metadata.

The first 64 bytes of buffer contains most header information

Parameters
b- (vlib_buffer_t *) pointer to the buffer
type- LOAD, STORE. In most cases, STORE is the right answer

Definition at line 170 of file buffer.h.

Typedef Documentation

Definition at line 62 of file buffer.h.

Function Documentation

u32 serialize_close_vlib_buffer ( serialize_main_t m)

+ Here is the caller graph for this function:

void serialize_open_vlib_buffer ( serialize_main_t m,
struct vlib_main_t vm,
vlib_serialize_buffer_main_t sm 
)

+ Here is the caller graph for this function:

static u32 serialize_vlib_buffer_n_bytes ( serialize_main_t m)
inlinestatic

Definition at line 378 of file buffer.h.

+ Here is the caller graph for this function:

void unserialize_close_vlib_buffer ( serialize_main_t m)

+ Here is the caller graph for this function:

void unserialize_open_vlib_buffer ( serialize_main_t m,
struct vlib_main_t vm,
vlib_serialize_buffer_main_t sm 
)

+ Here is the caller graph for this function:

static void vlib_buffer_advance ( vlib_buffer_t b,
word  l 
)
inlinestatic

Advance current data pointer by the supplied (signed!) amount.

Parameters
b- (vlib_buffer_t *) pointer to the buffer
l- (word) signed increment

Definition at line 207 of file buffer.h.

static void* vlib_buffer_get_current ( vlib_buffer_t b)
inlinestatic

Get pointer to current data to process.

Parameters
b- (vlib_buffer_t *) pointer to the buffer
Returns
- (void *) (b->data + b->current_data)

Definition at line 194 of file buffer.h.

static vlib_buffer_t* vlib_buffer_next_contiguous ( vlib_buffer_t b,
u32  buffer_bytes 
)
inlinestatic

Definition at line 173 of file buffer.h.

static void vlib_buffer_reset ( vlib_buffer_t b)
inlinestatic

Reset current header & length to state they were in when packet was received.

Parameters
b- (vlib_buffer_t *) pointer to the buffer

Definition at line 221 of file buffer.h.

+ Here is the caller graph for this function:

static void vlib_buffer_struct_is_sane ( vlib_buffer_t b)
inlinestatic

Definition at line 179 of file buffer.h.

static void* vlib_get_buffer_opaque ( vlib_buffer_t b)
inlinestatic

Get pointer to buffer's opaque data array.

Parameters
b- (vlib_buffer_t *) pointer to the buffer
Returns
- (void *) b->opaque

Definition at line 233 of file buffer.h.

static void* vlib_get_buffer_opaque2 ( vlib_buffer_t b)
inlinestatic

Get pointer to buffer's opaque2 data array.

Parameters
b- (vlib_buffer_t *) pointer to the buffer
Returns
- (void *) b->opaque2

Definition at line 244 of file buffer.h.

void* vlib_set_buffer_free_callback ( struct vlib_main_t vm,
void *  fp 
)