dangerous to vec_resize it when crashing, mheap itself might have been
corrupted already */
static u8 *syslog_msg = 0;
-static int last_signum = 0;
-static uword last_faulting_address = 0;
+int vlib_last_signum = 0;
+uword vlib_last_faulting_address = 0;
static void
unix_signal_handler (int signum, siginfo_t * si, ucontext_t * uc)
uword fatal = 0;
/* These come in handy when looking at core files from optimized images */
- last_signum = signum;
- last_faulting_address = (uword) si->si_addr;
+ vlib_last_signum = signum;
+ vlib_last_faulting_address = (uword) si->si_addr;
syslog_msg = format (syslog_msg, "received signal %U, PC %U",
format_signal, signum, format_ucontext_pc, uc);
/* have to remove SIGABRT to avoid recursive - os_exit calling abort() */
unsetup_signal_handlers (SIGABRT);
- /* os_exit(1) causes core generation, do not do this for SIGINT */
- if (signum == SIGINT)
+ /* os_exit(1) causes core generation, skip that for SIGINT, SIGHUP */
+ if (signum == SIGINT || signum == SIGHUP)
os_exit (0);
else
os_exit (1);
um->flags |= UNIX_FLAG_NODAEMON;
else if (unformat (input, "nosyslog"))
um->flags |= UNIX_FLAG_NOSYSLOG;
+ else if (unformat (input, "nocolor"))
+ um->flags |= UNIX_FLAG_NOCOLOR;
+ else if (unformat (input, "nobanner"))
+ um->flags |= UNIX_FLAG_NOBANNER;
else if (unformat (input, "cli-prompt %s", &cli_prompt))
vlib_unix_cli_set_prompt (cli_prompt);
else
* when invoking VPP applications from a process monitor which
* pipe stdout/stderr to a dedicated logger service.
*
+ * @cfgcmd{nocolor}
+ * Do not use colors in outputs.
+ * *
+ * @cfgcmd{nobanner}
+ * Do not display startup banner.
+ *
* @cfgcmd{exec, <filename>}
* @par <code>startup-config <filename></code>
* Read startup operational configuration from @c filename.
u8 *
vlib_thread_stack_init (uword thread_index)
{
+ void *stack;
ASSERT (thread_index < vec_len (vlib_thread_stacks));
- vlib_thread_stacks[thread_index] = clib_mem_alloc_aligned
- (VLIB_THREAD_STACK_SIZE, clib_mem_get_page_size ());
+ stack = clib_mem_vm_map_stack (VLIB_THREAD_STACK_SIZE,
+ CLIB_MEM_PAGE_SZ_DEFAULT,
+ "thread stack: thread %u", thread_index);
- /*
- * Disallow writes to the bottom page of the stack, to
- * catch stack overflows.
- */
- if (mprotect (vlib_thread_stacks[thread_index],
- clib_mem_get_page_size (), PROT_READ) < 0)
- clib_unix_warning ("thread stack");
- return vlib_thread_stacks[thread_index];
+ if (stack == CLIB_MEM_VM_MAP_FAILED)
+ clib_panic ("failed to allocate thread %u stack", thread_index);
+
+ vlib_thread_stacks[thread_index] = stack;
+ return stack;
}
int
vlib_unix_main (int argc, char *argv[])
{
- vlib_main_t *vm = &vlib_global_main; /* one and only time for this! */
+ vlib_main_t *vm = vlib_get_first_main (); /* one and only time for this! */
unformat_input_t input;
clib_error_t *e;
int i;
clib_time_init (&vm->clib_time);
+ /* Turn on the event logger at the first possible moment */
+ vm->configured_elog_ring_size = 128 << 10;
+ elog_init (&vm->elog_main, vm->configured_elog_ring_size);
+ elog_enable_disable (&vm->elog_main, 1);
+
unformat_init_command_line (&input, (char **) vm->argv);
if ((e = vlib_plugin_config (vm, &input)))
{