FD.io VPP  v17.07-30-g839fa73
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_callbacks_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   __PRE_DATA_SIZE
 
#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 VLIB_BUFFER_EXT_HDR_VALID   (1 << 7)
 
#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 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 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 u8 vlib_buffer_has_space (vlib_buffer_t *b, word l)
 Check if there is enough space in buffer to advance. 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...
 
static u8vlib_buffer_get_tail (vlib_buffer_t *b)
 Get pointer to the end of buffer's data. More...
 
static void * vlib_buffer_put_uninit (vlib_buffer_t *b, u8 size)
 Append uninitialized data to buffer. More...
 
static void * vlib_buffer_push_uninit (vlib_buffer_t *b, u8 size)
 Prepend uninitialized data to buffer. More...
 
static void * vlib_buffer_make_headroom (vlib_buffer_t *b, u8 size)
 Make head room, typically for packet headers. More...
 
static void * vlib_buffer_pull (vlib_buffer_t *b, u8 size)
 Retrieve bytes from buffer head. More...
 
void vlib_buffer_cb_init (struct vlib_main_t *vm)
 
int vlib_buffer_cb_register (struct vlib_main_t *vm, vlib_buffer_callbacks_t *cb)
 
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 96 of file buffer.h.

#define VLIB_BUFFER_DATA_SIZE   (2048)

Definition at line 50 of file buffer.h.

#define VLIB_BUFFER_DEFAULT_FREE_LIST_BYTES   VLIB_BUFFER_DATA_SIZE

Definition at line 403 of file buffer.h.

#define VLIB_BUFFER_DEFAULT_FREE_LIST_INDEX   (0)

Definition at line 402 of file buffer.h.

#define VLIB_BUFFER_EXT_HDR_VALID   (1 << 7)

Definition at line 93 of file buffer.h.

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

Definition at line 97 of file buffer.h.

#define VLIB_BUFFER_FLOW_REPORT   (1 << 6)

Definition at line 92 of file buffer.h.

#define VLIB_BUFFER_HDR_SIZE   (sizeof(vlib_buffer_t) - VLIB_BUFFER_PRE_DATA_SIZE)

Definition at line 155 of file buffer.h.

#define VLIB_BUFFER_IS_RECYCLED   (1 << 2)

Definition at line 88 of file buffer.h.

#define VLIB_BUFFER_IS_TRACED   (1 << 0)

Definition at line 85 of file buffer.h.

#define VLIB_BUFFER_LOG2_NEXT_PRESENT   (1)

Definition at line 86 of file buffer.h.

#define VLIB_BUFFER_NEXT_PRESENT   (1 << VLIB_BUFFER_LOG2_NEXT_PRESENT)

Definition at line 87 of file buffer.h.

#define VLIB_BUFFER_PRE_DATA_SIZE   __PRE_DATA_SIZE

Definition at line 51 of file buffer.h.

#define VLIB_BUFFER_RECYCLE   (1 << 5)

Definition at line 91 of file buffer.h.

#define VLIB_BUFFER_REPL_FAIL   (1 << 4)

Definition at line 90 of file buffer.h.

#define VLIB_BUFFER_TOTAL_LENGTH_VALID   (1 << 3)

Definition at line 89 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 491 of file buffer.h.

#define VLIB_BUFFER_TRACE_TRAJECTORY_INIT (   b)

Definition at line 496 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 164 of file buffer.h.

Typedef Documentation

Function Documentation

u32 serialize_close_vlib_buffer ( serialize_main_t m)

Definition at line 204 of file buffer_serialize.c.

+ Here is the call graph for this function:

+ 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 
)

Definition at line 190 of file buffer_serialize.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static u32 serialize_vlib_buffer_n_bytes ( serialize_main_t m)
inlinestatic

Definition at line 473 of file buffer.h.

+ Here is the caller graph for this function:

void unserialize_close_vlib_buffer ( serialize_main_t m)

Definition at line 229 of file buffer_serialize.c.

+ Here is the call graph for this function:

+ 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 
)

Definition at line 197 of file buffer_serialize.c.

+ Here is the call graph for this function:

+ 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 201 of file buffer.h.

void vlib_buffer_cb_init ( struct vlib_main_t vm)

+ Here is the caller graph for this function:

int vlib_buffer_cb_register ( struct vlib_main_t vm,
vlib_buffer_callbacks_t cb 
)

+ Here is the caller graph for this function:

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 188 of file buffer.h.

static u8* vlib_buffer_get_tail ( vlib_buffer_t b)
inlinestatic

Get pointer to the end of buffer's data.

Parameters
bpointer to the buffer
Returns
pointer to tail of packet's data

Definition at line 260 of file buffer.h.

+ Here is the caller graph for this function:

static u8 vlib_buffer_has_space ( vlib_buffer_t b,
word  l 
)
inlinestatic

Check if there is enough space in buffer to advance.

Parameters
b- (vlib_buffer_t *) pointer to the buffer
l- (word) size to check
Returns
- 0 if there is less space than 'l' in buffer

Definition at line 215 of file buffer.h.

+ Here is the caller graph for this function:

static void* vlib_buffer_make_headroom ( vlib_buffer_t b,
u8  size 
)
inlinestatic

Make head room, typically for packet headers.

Parameters
bpointer to the buffer
sizenumber of head room bytes
Returns
pointer to start of buffer (current data)

Definition at line 300 of file buffer.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

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

Definition at line 167 of file buffer.h.

static void* vlib_buffer_pull ( vlib_buffer_t b,
u8  size 
)
inlinestatic

Retrieve bytes from buffer head.

Parameters
bpointer to the buffer
sizenumber of bytes to pull
Returns
pointer to start of buffer (current data)

Definition at line 313 of file buffer.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void* vlib_buffer_push_uninit ( vlib_buffer_t b,
u8  size 
)
inlinestatic

Prepend uninitialized data to buffer.

Parameters
bpointer to the buffer
sizenumber of uninitialized bytes
Returns
pointer to beginning of uninitialized data

Definition at line 285 of file buffer.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void* vlib_buffer_put_uninit ( vlib_buffer_t b,
u8  size 
)
inlinestatic

Append uninitialized data to buffer.

Parameters
bpointer to the buffer
sizenumber of uninitialized bytes
Returns
pointer to beginning of uninitialized data

Definition at line 271 of file buffer.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

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 227 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 173 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 239 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 250 of file buffer.h.

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