FD.io VPP  v18.10-34-gcce845e
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_pool_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_MIN_CHAIN_SEG_SIZE   (128)
 
#define VLIB_BUFFER_CLONE_HEAD_SIZE   (256)
 
#define foreach_vlib_buffer_flag
 Buffer Flags. More...
 
#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)
 
#define VLIB_BUFFER_REGISTER_CALLBACKS(x, ...)
 

Typedefs

typedef u8 vlib_buffer_free_list_index_t
 
typedef struct vlib_buffer_free_list_t vlib_buffer_free_list_t
 
typedef uwordvlib_buffer_fill_free_list_cb_t) (struct vlib_main_t *vm, vlib_buffer_free_list_t *fl, uword min_free_buffers)
 
typedef void( vlib_buffer_free_cb_t) (struct vlib_main_t *vm, u32 *buffers, u32 n_buffers)
 
typedef void( vlib_buffer_free_no_next_cb_t) (struct vlib_main_t *vm, u32 *buffers, u32 n_buffers)
 

Enumerations

enum  { foreach_vlib_buffer_flag }
 
enum  { foreach_vlib_buffer_flag }
 

Functions

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...
 
static_always_inline vlib_buffer_pool_tvlib_buffer_pool_get (u8 buffer_pool_index)
 
u8 vlib_buffer_pool_create (struct vlib_main_t *vm, vlib_physmem_region_index_t region, u16 buffer_size)
 
clib_error_tvlib_buffer_main_init (struct vlib_main_t *vm)
 
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)
 

Variables

vlib_buffer_callbacks_tvlib_buffer_callbacks
 
vlib_buffer_main_t buffer_main
 

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

foreach_vlib_buffer_flag
Value:
_( 0, NON_DEFAULT_FREELIST, "non-default-fl") \
_( 1, IS_TRACED, 0) \
_( 2, NEXT_PRESENT, 0) \
_( 3, TOTAL_LENGTH_VALID, 0) \
_( 4, EXT_HDR_VALID, "ext-hdr-valid")

Buffer Flags.

Definition at line 74 of file buffer.h.

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

Definition at line 99 of file buffer.h.

#define VLIB_BUFFER_CLONE_HEAD_SIZE   (256)

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

#define VLIB_BUFFER_DEFAULT_FREE_LIST_INDEX   (0)

Definition at line 440 of file buffer.h.

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

Definition at line 100 of file buffer.h.

#define VLIB_BUFFER_HDR_SIZE   (sizeof(vlib_buffer_t) - VLIB_BUFFER_PRE_DATA_SIZE)

Definition at line 178 of file buffer.h.

#define VLIB_BUFFER_MIN_CHAIN_SEG_SIZE   (128)

Definition at line 57 of file buffer.h.

#define VLIB_BUFFER_PRE_DATA_SIZE   __PRE_DATA_SIZE

Definition at line 52 of file buffer.h.

#define VLIB_BUFFER_REGISTER_CALLBACKS (   x,
  ... 
)
Value:
__VA_ARGS__ vlib_buffer_callbacks_t __##x##_buffer_callbacks; \
static void __vlib_add_buffer_callbacks_t_##x (void) \
__attribute__((__constructor__)) ; \
static void __vlib_add_buffer_callbacks_t_##x (void) \
{ \
clib_panic ("vlib buffer callbacks already registered"); \
vlib_buffer_callbacks = &__##x##_buffer_callbacks; \
} \
static void __vlib_rm_buffer_callbacks_t_##x (void) \
__attribute__((__destructor__)) ; \
static void __vlib_rm_buffer_callbacks_t_##x (void) \
__VA_ARGS__ vlib_buffer_callbacks_t __##x##_buffer_callbacks
#define clib_panic(format, args...)
Definition: error.h:72
vlib_buffer_callbacks_t * vlib_buffer_callbacks
Definition: buffer.c:49

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

#define VLIB_BUFFER_TRACE_TRAJECTORY_INIT (   b)

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

Typedef Documentation

typedef uword( vlib_buffer_fill_free_list_cb_t) (struct vlib_main_t *vm, vlib_buffer_free_list_t *fl, uword min_free_buffers)

Definition at line 382 of file buffer.h.

typedef void( vlib_buffer_free_cb_t) (struct vlib_main_t *vm, u32 *buffers, u32 n_buffers)

Definition at line 385 of file buffer.h.

Definition at line 62 of file buffer.h.

typedef void( vlib_buffer_free_no_next_cb_t) (struct vlib_main_t *vm, u32 *buffers, u32 n_buffers)

Definition at line 387 of file buffer.h.

Enumeration Type Documentation

anonymous enum
Enumerator
foreach_vlib_buffer_flag 

Definition at line 84 of file buffer.h.

anonymous enum
Enumerator
foreach_vlib_buffer_flag 

Definition at line 91 of file buffer.h.

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:

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:

static u32 serialize_vlib_buffer_n_bytes ( serialize_main_t m)
inlinestatic

Definition at line 520 of file buffer.h.

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:

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:

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 218 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 205 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 280 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 235 of file buffer.h.

+ Here is the caller graph for this function:

clib_error_t* vlib_buffer_main_init ( struct vlib_main_t vm)

Definition at line 983 of file buffer.c.

+ Here is the call graph for this function:

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

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

u8 vlib_buffer_pool_create ( struct vlib_main_t vm,
vlib_physmem_region_index_t  region,
u16  buffer_size 
)

Definition at line 869 of file buffer.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static_always_inline vlib_buffer_pool_t* vlib_buffer_pool_get ( u8  buffer_pool_index)

Definition at line 462 of file buffer.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

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 333 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 305 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 291 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 247 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 190 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 259 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 270 of file buffer.h.

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

Definition at line 561 of file buffer.c.

Variable Documentation

vlib_buffer_main_t buffer_main

Definition at line 52 of file buffer.c.

vlib_buffer_callbacks_t* vlib_buffer_callbacks

Definition at line 49 of file buffer.c.