* autocomplete the next level of subcommands */
help_next_level = (vec_len (str) == 0) || isspace (str[vec_len (str) - 1]);
/* *INDENT-OFF* */
- clib_bitmap_foreach(index, match_bitmap, {
+ clib_bitmap_foreach (index, match_bitmap) {
if (help_next_level && is_unique) {
c = get_sub_command (vcm, c, index);
vec_foreach (sc, c->sub_commands) {
}
sc = &c->sub_commands[index];
vec_add1(result, (u8*) sc->name);
- });
+ }
/* *INDENT-ON* */
done:
vec_free (string);
}
+ else if (unformat (input, "vpplog %v", &string))
+ {
+ int i;
+ /*
+ * Delete leading whitespace, so "vpplog { this and that }"
+ * and "vpplog this" line up nicely.
+ */
+ for (i = 0; i < vec_len (string); i++)
+ if (string[i] != ' ')
+ break;
+ if (i > 0)
+ vec_delete (string, i, 0);
+
+ vlib_log_notice (cm->log, "CLI: %v", string);
+ vec_free (string);
+ }
+
else if (unformat (input, "uncomment %U",
unformat_vlib_cli_sub_input, &sub_input))
{
s = va_format (0, fmt, &va);
va_end (va);
+ /* some format functions might return 0
+ * e.g. show int addr */
+ if (NULL == s)
+ return;
+
/* Terminate with \n if not present. */
if (vec_len (s) > 0 && s[vec_len (s) - 1] != '\n')
vec_add1 (s, '\n');
/* *INDENT-OFF* */
foreach_vlib_main (
({
- void *heap = mm->per_cpu_mheaps[index];
-
vlib_cli_output (vm, "%sThread %d %s\n", index ? "\n":"", index,
vlib_worker_threads[index].name);
- vlib_cli_output (vm, " %U\n", format_page_map,
- pointer_to_uword (clib_mem_get_heap_base(heap)),
- clib_mem_get_heap_size (heap));
vlib_cli_output (vm, " %U\n", format_clib_mem_heap,
mm->per_cpu_mheaps[index],
verbose);
}
if (numa_heaps)
{
- void *heap;
-
for (i = 0; i < ARRAY_LEN (mm->per_numa_mheaps); i++)
{
if (mm->per_numa_mheaps[i] == 0)
continue;
}
was_enabled = clib_mem_trace_enable_disable (0);
- heap = mm->per_numa_mheaps[i];
vlib_cli_output (vm, "Numa %d:", i);
- vlib_cli_output (vm, " %U\n", format_page_map,
- pointer_to_uword (clib_mem_get_heap_base (heap)),
- clib_mem_get_heap_size (heap));
vlib_cli_output (vm, " %U\n", format_clib_mem_heap,
mm->per_numa_mheaps[index], verbose);
}
/* Close all known open files */
/* *INDENT-OFF* */
- pool_foreach(f, fm->file_pool,
- ({
+ pool_foreach (f, fm->file_pool)
+ {
if (f->file_descriptor > 2)
close(f->file_descriptor);
- }));
+ }
/* *INDENT-ON* */
/* Exec ourself */
#endif
static clib_error_t *
-elog_trace_command_fn (vlib_main_t * vm,
- unformat_input_t * input, vlib_cli_command_t * cmd)
+event_logger_trace_command_fn (vlib_main_t * vm,
+ unformat_input_t * input,
+ vlib_cli_command_t * cmd)
{
unformat_input_t _line_input, *line_input = &_line_input;
int enable = 1;
*
* @cliexpar
* @clistart
- * elog trace api cli barrier
- * elog trace api cli barrier disable
- * elog trace dispatch
- * elog trace circuit-node ethernet-input
- * elog trace
+ * event-logger trace api cli barrier
+ * event-logger trace api cli barrier disable
+ * event-logger trace dispatch
+ * event-logger trace circuit-node ethernet-input
* @cliend
- * @cliexcmd{elog trace [api][cli][barrier][disable]}
+ * @cliexcmd{event-logger trace [api][cli][barrier][disable]}
?*/
/* *INDENT-OFF* */
-VLIB_CLI_COMMAND (elog_trace_command, static) =
+VLIB_CLI_COMMAND (event_logger_trace_command, static) =
{
- .path = "elog trace",
- .short_help = "elog trace [api][cli][barrier][dispatch]\n"
+ .path = "event-logger trace",
+ .short_help = "event-logger trace [api][cli][barrier][dispatch]\n"
"[circuit-node <name> e.g. ethernet-input][disable]",
- .function = elog_trace_command_fn,
+ .function = event_logger_trace_command_fn,
};
/* *INDENT-ON* */
return error;
cmd = cmd->next_cli_command;
}
+
+ cm->log = vlib_log_register_class_rate_limit (
+ "cli", "log", 0x7FFFFFFF /* aka no rate limit */);
return error;
}