47 u32 next_buffer_stride,
53 u32 n_left_this_frame, n_buffers_left, * args, n_args_left;
58 n_buffers_left = n_buffers;
59 while (n_buffers_left > 0)
63 n_left_this_frame =
clib_min (n_buffers_left, n_args_left);
64 n_buffers_left -= n_left_this_frame;
65 n_args_left -= n_left_this_frame;
67 while (n_left_this_frame >= 4)
69 u32 bi0, bi1, bi2, bi3;
72 args[0] = bi0 = buffers[0];
73 args[1] = bi1 = buffers[1];
74 args[2] = bi2 = buffers[2];
75 args[3] = bi3 = buffers[3];
82 b0->
error = drop_error;
83 b1->
error = drop_error;
84 b2->
error = drop_error;
85 b3->
error = drop_error;
89 n_left_this_frame -= 4;
92 while (n_left_this_frame >= 1)
97 args[0] = bi0 = buffers[0];
100 b0->
error = drop_error;
104 n_left_this_frame -= 1;
129 [0] =
"misc. errors",
134 .name =
"misc-drop-buffers",
135 .vector_size =
sizeof (
u32),
148 char * error_strings[])
174 n_errors * sizeof (error_strings[0]));
184 n_errors * sizeof (em->
counters[0]));
188 n_errors * sizeof (em->
counters[0]));
194 memset (&t, 0,
sizeof (t));
195 for (i = 0; i < n_errors; i++)
218 if (
unformat (input,
"verbose %d", &verbose))
220 else if (
unformat (input,
"verbose"))
232 em = &this_vlib_main->error_main;
237 for (ni = 0; ni <
vec_len (this_vlib_main->node_main.nodes); ni++)
240 for (code = 0; code < n->
n_errors; code++)
248 if (c == 0 && verbose < 2)
268 for (code = 0; code < n->
n_errors; code++)
286 .path =
"show errors",
287 .short_help =
"Show error counts",
292 .path =
"show node counters",
293 .short_help =
"Show node counters",
306 em = &this_vlib_main->error_main;
315 .path =
"clear errors",
316 .short_help =
"Clear error counters",
321 .path =
"clear node counters",
322 .short_help =
"Clear node counters",
#define vec_validate(V, I)
Make sure vector is long enough for given index (no header, unspecified alignment) ...
void vlib_put_next_frame(vlib_main_t *vm, vlib_node_runtime_t *r, u32 next_index, u32 n_vectors_left)
static clib_error_t * clear_error_counters(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
vlib_node_registration_t misc_drop_buffers_node
(constructor) VLIB_REGISTER_NODE (misc_drop_buffers_node)
sll srl srl sll sra u16x4 i
uword vlib_error_drop_buffers(vlib_main_t *vm, vlib_node_runtime_t *node, u32 *buffers, u32 next_buffer_stride, u32 n_buffers, u32 next_index, u32 drop_error_node, u32 drop_error_code)
#define foreach_vlib_main(body)
always_inline vlib_node_t * vlib_get_node(vlib_main_t *vm, u32 i)
void vlib_register_errors(vlib_main_t *vm, u32 node_index, u32 n_errors, char *error_strings[])
u64 * counters_last_clear
#define vec_elt_at_index(v, i)
Get vector value at index i checking that i is in bounds.
elog_event_type_t * error_elog_event_types
static clib_error_t * show_errors(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
vlib_error_main_t error_main
uword os_get_cpu_number(void)
#define vlib_get_next_frame(vm, node, next_index, vectors, n_vectors_left)
void vlib_cli_output(vlib_main_t *vm, char *fmt,...)
always_inline void * vlib_frame_args(vlib_frame_t *f)
vlib_error_t error
Error code for buffers to be enqueued to error handler.
char ** error_strings_heap
#define vec_free(V)
Free vector's memory (no header).
#define clib_memcpy(a, b, c)
static char * misc_drop_buffers_error_strings[]
#define VLIB_CLI_COMMAND(x,...)
vlib_worker_thread_t * vlib_worker_threads
void heap_dealloc(void *v, uword handle)
always_inline vlib_error_t vlib_error_set(u32 node_index, u32 code)
#define heap_alloc(v, size, handle)
#define vec_len(v)
Number of elements in vector (rvalue-only, NULL tolerant)
vlib_node_main_t node_main
#define VLIB_REGISTER_NODE(x,...)
always_inline vlib_buffer_t * vlib_get_buffer(vlib_main_t *vm, u32 buffer_index)
Translate buffer index into buffer pointer.
static uword misc_drop_buffers(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)