vlib_main_t *vm = hcm->vlib_main;
hcs_cli_args_t **save_args;
vlib_node_t *n;
- char *name;
uword l;
l = vec_len (hcm->free_http_cli_process_node_indices);
.runtime_data_bytes = sizeof (void *),
};
- name = (char *) format (0, "http-cli-%d", l);
- r.name = name;
- vlib_register_node (vm, &r);
- vec_free (name);
+ vlib_register_node (vm, &r, "http-cli-%d", l);
n = vlib_get_node (vm, r.index);
}
ip_checksum_init(vm);
- u32 node_index = vlib_register_node(vm, &pnat_input_node);
+ u32 node_index =
+ vlib_register_node(vm, &pnat_input_node, "%s", pnat_input_node.name);
node = vlib_node_get_runtime(vm, node_index);
assert(node);
return fn;
}
-static void
-register_node (vlib_main_t * vm, vlib_node_registration_t * r)
+u32
+vlib_register_node (vlib_main_t *vm, vlib_node_registration_t *r, char *fmt,
+ ...)
{
vlib_node_main_t *nm = &vm->node_main;
vlib_node_t *n;
+ va_list va;
u32 size;
int i;
vec_add1 (nm->nodes, n);
- /* Name is always a vector so it can be formatted with %v. */
- if (clib_mem_is_heap_object (vec_header (r->name)))
- n->name = vec_dup ((u8 *) r->name);
- else
- n->name = format (0, "%s", r->name);
+ va_start (va, fmt);
+ n->name = va_format (0, fmt, &va);
+ va_end (va);
if (!nm->node_by_name)
nm->node_by_name = hash_create_vec ( /* size */ 32,
vec_free (n->runtime_data);
}
#undef _
-}
-
-/* Register new packet processing node. */
-u32
-vlib_register_node (vlib_main_t * vm, vlib_node_registration_t * r)
-{
- register_node (vm, r);
return r->index;
}
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);
+ vlib_register_node (vm, &null_node_reg, "null-node");
r = vgm->node_registrations;
while (r)
{
- register_node (vm, r);
+ vlib_register_node (vm, r, "%s", r->name);
r = r->next_registration;
}
}
memset (&r, 0, sizeof (r));
- r.name = (char *) format (0, "%s", name, 0);
r.function = f;
r.process_log2_n_stack_bytes = log2_n_stack_bytes;
r.type = VLIB_NODE_TYPE_PROCESS;
vlib_worker_thread_barrier_sync (vm);
- vlib_register_node (vm, &r);
+ vlib_register_node (vm, &r, "%s", name);
vec_free (r.name);
vlib_worker_thread_node_runtime_update ();
/* Register new packet processing node. Nodes can be registered
dynamically via this call or statically via the VLIB_REGISTER_NODE
macro. */
-u32 vlib_register_node (vlib_main_t * vm, vlib_node_registration_t * r);
+u32 vlib_register_node (vlib_main_t *vm, vlib_node_registration_t *r,
+ char *fmt, ...);
/* Register all node function variants */
void vlib_register_all_node_march_variants (vlib_main_t *vm);
.process_log2_n_stack_bytes = 18,
};
- r.name = name;
-
vlib_worker_thread_barrier_sync (vm);
- vlib_register_node (vm, &r);
+ vlib_register_node (vm, &r, "%v", name);
vec_free (name);
n = vlib_get_node (vm, r.index);
vnet_feature_config_main_t *fcm;
vnet_config_main_t *cm;
u32 hw_index, i;
- char *tx_node_name = NULL, *output_node_name = NULL;
vlib_node_t *if_out_node =
vlib_get_node (vm, vnet_interface_output_node.index);
if (dev_class->tx_function == 0 && dev_class->tx_fn_registrations == 0)
goto no_output_nodes; /* No output/tx nodes to create */
- tx_node_name = (char *) format (0, "%v-tx", hw->name);
- output_node_name = (char *) format (0, "%v-output", hw->name);
-
/* If we have previously deleted interface nodes, re-use them. */
if (vec_len (im->deleted_hw_interface_nodes) > 0)
{
hw->tx_node_index = hn->tx_node_index;
hw->output_node_index = hn->output_node_index;
- vlib_node_rename (vm, hw->tx_node_index, "%v", tx_node_name);
- vlib_node_rename (vm, hw->output_node_index, "%v", output_node_name);
+ vlib_node_rename (vm, hw->tx_node_index, "%v-tx", hw->name);
+ vlib_node_rename (vm, hw->output_node_index, "%v-output", hw->name);
foreach_vlib_main ()
{
r.vector_size = sizeof (u32);
r.flags = VLIB_NODE_FLAG_IS_OUTPUT;
- r.name = tx_node_name;
if (dev_class->tx_fn_registrations)
{
r.function = 0;
else
r.function = dev_class->tx_function;
- hw->tx_node_index = vlib_register_node (vm, &r);
+ hw->tx_node_index = vlib_register_node (vm, &r, "%v-tx", hw->name);
vlib_node_add_named_next_with_slot (vm, hw->tx_node_index,
"error-drop",
VNET_INTERFACE_TX_NEXT_DROP);
r.flags = 0;
- r.name = output_node_name;
r.format_trace = format_vnet_interface_output_trace;
if (if_out_node->node_fn_registrations)
{
r.n_errors = ARRAY_LEN (e);
r.error_strings = e;
}
- hw->output_node_index = vlib_register_node (vm, &r);
+ hw->output_node_index =
+ vlib_register_node (vm, &r, "%v-output", hw->name);
vlib_node_add_named_next_with_slot (vm, hw->output_node_index,
"error-drop",
VNET_INTERFACE_SET_FLAGS_HELPER_IS_CREATE);
vnet_hw_interface_set_flags_helper (vnm, hw_index, /* flags */ 0,
VNET_INTERFACE_SET_FLAGS_HELPER_IS_CREATE);
- vec_free (tx_node_name);
- vec_free (output_node_name);
-
return hw_index;
}
sm->default_data_ttl = 255;
sm->vlib_main = vm;
- vlib_register_node (vm, &srp_ips_process_node);
- vlib_register_node (vm, &srp_input_node);
- vlib_register_node (vm, &srp_control_input_node);
+ vlib_register_node (vm, &srp_ips_process_node, "%s",
+ srp_ips_process_node.name);
+ vlib_register_node (vm, &srp_input_node, "%s", srp_input_node.name);
+ vlib_register_node (vm, &srp_control_input_node, "%s",
+ srp_control_input_node.name);
srp_setup_node (vm, srp_input_node.index);
return 0;