35 return format (0,
"[%d], node index out of range 0x%x, error 0x%x",
36 index, node_index, e[0]);
40 return format (0,
"[%d], code %d out of range for node %v",
41 index, code, n->
name);
105 u32 n_left, *buffers;
126 if (b0->
flags & VLIB_BUFFER_IS_TRACED)
131 if (b1->
flags & VLIB_BUFFER_IS_TRACED)
150 if (b0->
flags & VLIB_BUFFER_IS_TRACED)
190 error[0] = b[0]->
error;
191 error[1] = b[1]->
error;
192 error[2] = b[2]->
error;
193 error[3] = b[3]->
error;
201 error[0] = b[0]->
error;
218 error = errors + off;
261 .vector_size =
sizeof (
u32),
272 .vector_size =
sizeof (
u32),
u32 flags
buffer flags: VLIB_BUFFER_FREE_LIST_INDEX_MASK: bits used to store free list index, VLIB_BUFFER_IS_TRACED: trace this buffer.
static u8 * validate_error(vlib_main_t *vm, vlib_error_t *e, u32 index)
static void vlib_buffer_free(vlib_main_t *vm, u32 *buffers, u32 n_buffers)
Free buffers Frees the entire buffer chain for each buffer.
#define VLIB_NODE_FLAG_IS_PUNT
vlib_node_registration_t error_drop_node
(constructor) VLIB_REGISTER_NODE (error_drop_node)
#define VLIB_NODE_FN(node)
#define static_always_inline
#define vlib_prefetch_buffer_with_index(vm, bi, type)
Prefetch buffer metadata by buffer index The first 64 bytes of buffer contains most header informatio...
static u8 * format_error_trace(u8 *s, va_list *va)
#define vlib_prefetch_buffer_header(b, type)
Prefetch buffer metadata.
vlib_error_t error
Error code for buffers to be enqueued to error handler.
static_always_inline uword process_drop_punt(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame, error_disposition_t disposition)
vlib_error_main_t error_main
void vlib_frame_free(vlib_main_t *vm, vlib_node_runtime_t *r, vlib_frame_t *f)
static u32 counter_index(vlib_main_t *vm, vlib_error_t e)
static u32 vlib_error_get_code(vlib_node_main_t *nm, vlib_error_t e)
#define VLIB_REGISTER_NODE(x,...)
char ** error_strings_heap
#define VLIB_NODE_FLAG_FRAME_NO_FREE_AFTER_DISPATCH
static u8 * validate_error_frame(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *f)
vlib_node_registration_t error_punt_node
(constructor) VLIB_REGISTER_NODE (error_punt_node)
static u32 vlib_error_get_node(vlib_node_main_t *nm, vlib_error_t e)
static void * vlib_add_trace(vlib_main_t *vm, vlib_node_runtime_t *r, vlib_buffer_t *b, u32 n_data_bytes)
#define vec_len(v)
Number of elements in vector (rvalue-only, NULL tolerant)
vlib_node_main_t node_main
VLIB buffer representation.
static void * vlib_frame_vector_args(vlib_frame_t *f)
Get pointer to frame vector data.
#define VLIB_NODE_FLAG_IS_DROP
static void vlib_error_elog_count(vlib_main_t *vm, uword counter, uword increment)
static_always_inline uword clib_count_equal_u32(u32 *data, uword max_count)
void(* os_punt_frame)(struct vlib_main_t *vm, struct vlib_node_runtime_t *node, vlib_frame_t *frame)
static vlib_node_t * vlib_get_node(vlib_main_t *vm, u32 i)
Get vlib node by index.
u16 flags
Copy of main node flags.
static_always_inline void vlib_get_buffers(vlib_main_t *vm, u32 *bi, vlib_buffer_t **b, int count)
Translate array of buffer indices into buffer pointers.
#define VLIB_NODE_FLAG_TRACE
static vlib_buffer_t * vlib_get_buffer(vlib_main_t *vm, u32 buffer_index)
Translate buffer index into buffer pointer.
static void trace_errors(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)