X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvlib%2Funix%2Fcli.c;h=6e566d11ffd640ef3df1fc179587702a9d017494;hb=8a023fd7471c8695f9f9c7f39abfb0ac7e2b5c4c;hp=640d5bc69c35a181e6852fc93885ecc57efbc32a;hpb=67e4df144b8fd9ef45a188937441ce11260c8b67;p=vpp.git diff --git a/src/vlib/unix/cli.c b/src/vlib/unix/cli.c index 640d5bc69c3..6e566d11ffd 100644 --- a/src/vlib/unix/cli.c +++ b/src/vlib/unix/cli.c @@ -2557,6 +2557,8 @@ more: format_timeval, 0 /* current bat-time */ , 0 /* current bat-format */ , cli_file_index, cf->current_command); + if (cf->current_command[vec_len (cf->current_command) - 1] != '\n') + lv = format (lv, "\n"); int rv __attribute__ ((unused)) = write (um->log_fd, lv, vec_len (lv)); } @@ -2864,7 +2866,7 @@ unix_cli_file_add (unix_cli_main_t * cm, char *name, int fd) static vlib_node_registration_t r = { .function = unix_cli_process, .type = VLIB_NODE_TYPE_PROCESS, - .process_log2_n_stack_bytes = 16, + .process_log2_n_stack_bytes = 18, }; r.name = name; @@ -3089,9 +3091,11 @@ unix_cli_config (vlib_main_t * vm, unformat_input_t * input) clib_panic ("sigaction"); /* Retrieve the current terminal size */ - ioctl (STDIN_FILENO, TIOCGWINSZ, &ws); - cf->width = ws.ws_col; - cf->height = ws.ws_row; + if (ioctl (STDIN_FILENO, TIOCGWINSZ, &ws) == 0) + { + cf->width = ws.ws_col; + cf->height = ws.ws_row; + } if (cf->width == 0 || cf->height == 0) { @@ -3328,7 +3332,7 @@ unix_cli_exec (vlib_main_t * vm, unformat_free (&sub_input); done: - if (fd > 0) + if (fd >= 0) close (fd); vec_free (file_name); @@ -3847,6 +3851,46 @@ VLIB_CLI_COMMAND (cli_unix_cli_set_terminal_ansi, static) = { }; /* *INDENT-ON* */ + +#define MAX_CLI_WAIT 86400 +/** CLI command to wait seconds. Useful for exec script. */ +static clib_error_t * +unix_wait_cmd (vlib_main_t * vm, + unformat_input_t * input, vlib_cli_command_t * cmd) +{ + unformat_input_t _line_input, *line_input = &_line_input; + f64 sec = 1.0; + + if (!unformat_user (input, unformat_line_input, line_input)) + return 0; + + while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT) + { + if (unformat (line_input, "%f", &sec)) + ; + else + return clib_error_return (0, "unknown parameter: `%U`", + format_unformat_error, input); + } + + if (sec <= 0 || sec > MAX_CLI_WAIT || floor (sec * 1000) / 1000 != sec) + return clib_error_return (0, + " must be a positive value and less than 86400 (one day) with no more than msec precision."); + + vlib_process_wait_for_event_or_clock (vm, sec); + vlib_cli_output (vm, "waited %.3f sec.", sec); + + unformat_free (line_input); + return 0; +} +/* *INDENT-OFF* */ +VLIB_CLI_COMMAND (cli_unix_wait_cmd, static) = { + .path = "wait", + .short_help = "wait ", + .function = unix_wait_cmd, +}; +/* *INDENT-ON* */ + static clib_error_t * unix_cli_init (vlib_main_t * vm) {