From 88307c31c5156e8e963ac7196ec221f76a965846 Mon Sep 17 00:00:00 2001 From: Maria Matejka Date: Tue, 15 Aug 2023 17:05:58 +0200 Subject: [PATCH] CLI: Dropping the mechanism of echoing log messages This is better done by running tail -f on a logfile. --- nest/cli.c | 109 --------------------------------------------- nest/cli.h | 5 --- nest/config.Y | 22 +-------- sysdep/unix/log.c | 9 ---- sysdep/unix/main.c | 3 -- sysdep/unix/unix.h | 1 - 6 files changed, 1 insertion(+), 148 deletions(-) diff --git a/nest/cli.c b/nest/cli.c index b74edffb..e253a745 100644 --- a/nest/cli.c +++ b/nest/cli.c @@ -160,43 +160,6 @@ cli_printf(cli *c, int code, char *msg, ...) memcpy(cli_alloc_out(c, size), buf, size); } -static void -cli_copy_message(cli *c) -{ - byte *p, *q; - uint cnt = 2; - - if (c->ring_overflow) - { - byte buf[64]; - int n = bsprintf(buf, "<%d messages lost>\n", c->ring_overflow); - c->ring_overflow = 0; - memcpy(cli_alloc_out(c, n), buf, n); - } - p = c->ring_read; - while (*p) - { - cnt++; - p++; - if (p == c->ring_end) - p = c->ring_buf; - ASSERT(p != c->ring_write); - } - c->async_msg_size += cnt; - q = cli_alloc_out(c, cnt); - *q++ = '+'; - p = c->ring_read; - do - { - *q = *p++; - if (p == c->ring_end) - p = c->ring_buf; - } - while (*q++); - c->ring_read = p; - q[-1] = '\n'; -} - static void cli_hello(cli *c) { @@ -283,10 +246,6 @@ cli_event(void *data) cli *c = data; int err; - while (c->ring_read != c->ring_write && - c->async_msg_size < CLI_MAX_ASYNC_QUEUE) - cli_copy_message(c); - if (c->tx_pos) ; else if (c->cont) @@ -335,80 +294,12 @@ cli_kick(cli *c) static list cli_log_hooks; static int cli_log_inited; -void -cli_set_log_echo(cli *c, uint mask, uint size) -{ - if (c->ring_buf) - { - mb_free(c->ring_buf); - c->ring_buf = c->ring_end = c->ring_read = c->ring_write = NULL; - rem_node(&c->n); - } - c->log_mask = mask; - if (mask && size) - { - c->ring_buf = mb_alloc(c->pool, size); - c->ring_end = c->ring_buf + size; - c->ring_read = c->ring_write = c->ring_buf; - add_tail(&cli_log_hooks, &c->n); - c->log_threshold = size / 8; - } - c->ring_overflow = 0; -} - -void -cli_echo(uint class, byte *msg) -{ - unsigned len, free, i, l; - cli *c; - byte *m; - - if (!cli_log_inited || EMPTY_LIST(cli_log_hooks)) - return; - len = strlen(msg) + 1; - WALK_LIST(c, cli_log_hooks) - { - if (!(c->log_mask & (1 << class))) - continue; - if (c->ring_read <= c->ring_write) - free = (c->ring_end - c->ring_buf) - (c->ring_write - c->ring_read + 1); - else - free = c->ring_read - c->ring_write - 1; - if ((len > free) || - (free < c->log_threshold && class < (unsigned) L_INFO[0])) - { - c->ring_overflow++; - continue; - } - if (c->ring_read == c->ring_write) - ev_schedule(c->event); - m = msg; - l = len; - while (l) - { - if (c->ring_read <= c->ring_write) - i = c->ring_end - c->ring_write; - else - i = c->ring_read - c->ring_write; - if (i > l) - i = l; - memcpy(c->ring_write, m, i); - m += i; - l -= i; - c->ring_write += i; - if (c->ring_write == c->ring_end) - c->ring_write = c->ring_buf; - } - } -} - /* Hack for scheduled undo notification */ extern cli *cmd_reconfig_stored_cli; void cli_free(cli *c) { - cli_set_log_echo(c, 0, 0); int defer = 0; if (c->cleanup) defer = c->cleanup(c); diff --git a/nest/cli.h b/nest/cli.h index c5cbd8d7..189d8389 100644 --- a/nest/cli.h +++ b/nest/cli.h @@ -40,9 +40,6 @@ typedef struct cli { int last_reply; int restricted; /* CLI is restricted to read-only commands */ struct linpool *parser_pool; /* Pool used during parsing */ - byte *ring_buf; /* Ring buffer for asynchronous messages */ - byte *ring_end, *ring_read, *ring_write; /* Pointers to the ring buffer */ - uint ring_overflow; /* Counter of ring overflows */ uint log_mask; /* Mask of allowed message levels */ uint log_threshold; /* When free < log_threshold, store only important messages */ uint async_msg_size; /* Total size of async messages queued in tx_buf */ @@ -57,7 +54,6 @@ extern struct cli *this_cli; /* Used during parsing */ void cli_printf(cli *, int, char *, ...); #define cli_msg(x...) cli_printf(this_cli, x) -void cli_set_log_echo(cli *, uint mask, uint size); static inline void cli_separator(cli *c) { if (c->last_reply) cli_printf(c, -c->last_reply, ""); }; @@ -69,7 +65,6 @@ void cli_init(void); void cli_free(cli *); void cli_kick(cli *); void cli_written(cli *); -void cli_echo(uint class, byte *msg); static inline int cli_access_restricted(void) { diff --git a/nest/config.Y b/nest/config.Y index e7347877..2e70461a 100644 --- a/nest/config.Y +++ b/nest/config.Y @@ -143,7 +143,7 @@ CF_ENUM_PX(T_ENUM_AF, AF_, AFI_, IPV4, IPV6) %type optproto %type r_args %type sym_args -%type proto_start echo_mask echo_size debug_mask debug_list debug_flag mrtdump_mask mrtdump_list mrtdump_flag export_mode limit_action net_type tos password_algorithm +%type proto_start debug_mask debug_list debug_flag mrtdump_mask mrtdump_list mrtdump_flag export_mode limit_action net_type tos password_algorithm %type proto_patt proto_patt2 %type channel_start proto_channel %type limit_spec @@ -892,26 +892,6 @@ CF_CLI(DUMP FILTER ALL,,, [[Dump all filters in linearized form]]) CF_CLI(EVAL, term, , [[Evaluate an expression]]) { cmd_eval(f_linearize($2, 1)); } ; -CF_CLI_HELP(ECHO, ..., [[Control echoing of log messages]]) -CF_CLI(ECHO, echo_mask echo_size, (all | off | { debug|trace|info|remote|warning|error|auth [, ...] }) [], [[Control echoing of log messages]]) { - cli_set_log_echo(this_cli, $2, $3); - cli_msg(0, ""); -} ; - -echo_mask: - ALL { $$ = ~0; } - | OFF { $$ = 0; } - | '{' log_mask_list '}' { $$ = $2; } - ; - -echo_size: - /* empty */ { $$ = 4096; } - | NUM { - if ($1 < 256 || $1 > 65536) cf_error("Invalid log buffer size"); - $$ = $1; - } - ; - CF_CLI(DISABLE, proto_patt opttext, ( | \"\" | all) [message], [[Disable protocol]]) { proto_apply_cmd($2, proto_cmd_disable, 1, (uintptr_t) $3); } ; CF_CLI(ENABLE, proto_patt opttext, ( | \"\" | all) [message], [[Enable protocol]]) diff --git a/sysdep/unix/log.c b/sysdep/unix/log.c index d929e80e..5a1241dc 100644 --- a/sysdep/unix/log.c +++ b/sysdep/unix/log.c @@ -46,11 +46,6 @@ static pthread_mutex_t log_mutex; static inline void log_lock(void) { pthread_mutex_lock(&log_mutex); } static inline void log_unlock(void) { pthread_mutex_unlock(&log_mutex); } -static pthread_t main_thread; -void main_thread_init(void) { main_thread = pthread_self(); } -static int main_thread_self(void) { return pthread_equal(pthread_self(), main_thread); } - - #ifdef HAVE_SYSLOG_H #include @@ -195,10 +190,6 @@ log_commit(int class, buffer *buf) } log_unlock(); - /* cli_echo is not thread-safe, so call it just from the main thread */ - if (main_thread_self()) - cli_echo(class, buf->start); - buf->pos = buf->start; } diff --git a/sysdep/unix/main.c b/sysdep/unix/main.c index 0337c755..738efe46 100644 --- a/sysdep/unix/main.c +++ b/sysdep/unix/main.c @@ -951,9 +951,6 @@ main(int argc, char **argv) dup2(0, 2); } - - main_thread_init(); - write_pid_file(); signal_init(); diff --git a/sysdep/unix/unix.h b/sysdep/unix/unix.h index 606b79cd..5262f3bb 100644 --- a/sysdep/unix/unix.h +++ b/sysdep/unix/unix.h @@ -125,7 +125,6 @@ void krt_io_init(void); /* log.c */ -void main_thread_init(void); void log_init_debug(char *); /* Initialize debug dump to given file (NULL=stderr, ""=off) */ void log_switch(int initial, list *l, const char *);