u8 n_add_refs; /**< Number of additional references to this buffer. */
- u8 dont_waste_me[2]; /**< Available space in the (precious)
+ u8 buffer_pool_index; /**< index of buffer pool this buffer belongs. */
+ u8 dont_waste_me[1]; /**< Available space in the (precious)
first 32 octets of buffer metadata
Before allocating any of it, discussion required!
*/
uword buffer_init_function_opaque;
} __attribute__ ((aligned (16))) vlib_buffer_free_list_t;
+typedef uword (vlib_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);
+
typedef struct
{
- u32 (*vlib_buffer_alloc_cb) (struct vlib_main_t * vm, u32 * buffers,
- u32 n_buffers);
- u32 (*vlib_buffer_alloc_from_free_list_cb) (struct vlib_main_t * vm,
- u32 * buffers, u32 n_buffers,
- u32 free_list_index);
- void (*vlib_buffer_free_cb) (struct vlib_main_t * vm, u32 * buffers,
- u32 n_buffers);
- void (*vlib_buffer_free_no_next_cb) (struct vlib_main_t * vm, u32 * buffers,
- u32 n_buffers);
+ vlib_buffer_fill_free_list_cb_t *vlib_buffer_fill_free_list_cb;
+ vlib_buffer_free_cb_t *vlib_buffer_free_cb;
+ vlib_buffer_free_no_next_cb_t *vlib_buffer_free_no_next_cb;
void (*vlib_packet_template_init_cb) (struct vlib_main_t * vm, void *t,
void *packet_data,
uword n_packet_data_bytes,
extern vlib_buffer_callbacks_t *vlib_buffer_callbacks;
+typedef struct
+{
+ CLIB_CACHE_LINE_ALIGN_MARK (cacheline0);
+ uword start;
+ uword size;
+ vlib_physmem_region_index_t physmem_region;
+} vlib_buffer_pool_t;
+
typedef struct
{
CLIB_CACHE_LINE_ALIGN_MARK (cacheline0);
buffer index */
uword buffer_mem_start;
uword buffer_mem_size;
- vlib_physmem_region_index_t physmem_region;
+ vlib_buffer_pool_t *buffer_pools;
/* Buffer free callback, for subversive activities */
u32 (*buffer_free_callback) (struct vlib_main_t * vm,
int callbacks_registered;
} vlib_buffer_main_t;
-void vlib_buffer_add_mem_range (struct vlib_main_t *vm, uword start,
- uword size);
+u8 vlib_buffer_add_physmem_region (struct vlib_main_t *vm,
+ vlib_physmem_region_index_t region);
+
clib_error_t *vlib_buffer_main_init (struct vlib_main_t *vm);
typedef struct