From d4798a394a337ad11c306309bb68611251b4e593 Mon Sep 17 00:00:00 2001 From: Damjan Marion Date: Tue, 6 Sep 2016 22:26:03 +0200 Subject: Avoid use of node index 0 by registering null-node In some cases it is convenient to use 0 as an invalid node index so here we make sure that index 0 is not used. Change-Id: I5af6bef6769d56086ceb343423185f22843732bd Signed-off-by: Damjan Marion --- vlib/vlib/node.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/vlib/vlib/node.c b/vlib/vlib/node.c index 4b8e3f74bb9..e18567b4184 100644 --- a/vlib/vlib/node.c +++ b/vlib/vlib/node.c @@ -449,11 +449,40 @@ vlib_register_node (vlib_main_t * vm, vlib_node_registration_t * r) return r->index; } +static uword +null_node_fn (vlib_main_t * vm, + vlib_node_runtime_t * node, vlib_frame_t * frame) +{ + u16 n_vectors = frame->n_vectors; + + vlib_node_increment_counter (vm, node->node_index, 0, n_vectors); + vlib_buffer_free (vm, vlib_frame_args (frame), n_vectors); + vlib_frame_free (vm, node, frame); + + return n_vectors; +} + void vlib_register_all_static_nodes (vlib_main_t * vm) { vlib_node_registration_t *r; + static char *null_node_error_strings[] = { + "blackholed packets", + }; + + static vlib_node_registration_t null_node_reg = { + .function = null_node_fn, + .vector_size = sizeof (u32), + .name = "null-node", + .n_errors = 1, + .error_strings = null_node_error_strings, + }; + + /* make sure that node index 0 is not used by + real node */ + register_node (vm, &null_node_reg); + r = vm->node_main.node_registrations; while (r) { -- cgit 1.2.3-korg