mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-05-30 00:19:28 +00:00
lib: Add '--command-log-always` to all daemons startup
Add 'no log commands' cli and at the same time add a --command-log-always to the daemon startup cli. If --command-log-always is specified then all commands are auto-logged and the 'no log commands' form of the command is now ignored. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
This commit is contained in:
parent
9c61cec7e3
commit
2950f5da55
@ -56,7 +56,7 @@ int main(int argc, char **argv)
|
||||
host.name = strdup("test");
|
||||
host.domainname = strdup("testdomainname");
|
||||
|
||||
vty_init(master);
|
||||
vty_init(master, true);
|
||||
memory_init();
|
||||
yang_init();
|
||||
nb_init(master, NULL, 0);
|
||||
|
@ -94,6 +94,7 @@ static void opt_extend(const struct optspec *os)
|
||||
#define OPTION_LOGLEVEL 1004
|
||||
#define OPTION_TCLI 1005
|
||||
#define OPTION_DB_FILE 1006
|
||||
#define OPTION_LOGGING 1007
|
||||
|
||||
static const struct option lo_always[] = {
|
||||
{"help", no_argument, NULL, 'h'},
|
||||
@ -105,6 +106,7 @@ static const struct option lo_always[] = {
|
||||
{"log", required_argument, NULL, OPTION_LOG},
|
||||
{"log-level", required_argument, NULL, OPTION_LOGLEVEL},
|
||||
{"tcli", no_argument, NULL, OPTION_TCLI},
|
||||
{"command-log-always", no_argument, NULL, OPTION_LOGGING},
|
||||
{NULL}};
|
||||
static const struct optspec os_always = {
|
||||
"hvdM:",
|
||||
@ -496,6 +498,9 @@ static int frr_opt(int opt)
|
||||
case OPTION_LOGLEVEL:
|
||||
di->early_loglevel = optarg;
|
||||
break;
|
||||
case OPTION_LOGGING:
|
||||
di->log_always = true;
|
||||
break;
|
||||
default:
|
||||
return 1;
|
||||
}
|
||||
@ -648,7 +653,7 @@ struct thread_master *frr_init(void)
|
||||
else
|
||||
cmd_init(1);
|
||||
|
||||
vty_init(master);
|
||||
vty_init(master, di->log_always);
|
||||
memory_init();
|
||||
|
||||
log_ref_init();
|
||||
|
@ -97,6 +97,8 @@ struct frr_daemon_info {
|
||||
|
||||
const struct frr_yang_module_info **yang_modules;
|
||||
size_t n_yang_modules;
|
||||
|
||||
bool log_always;
|
||||
};
|
||||
|
||||
/* execname is the daemon's executable (and pidfile and configfile) name,
|
||||
|
@ -131,6 +131,8 @@ lib/nexthop_group_clippy.c: $(CLIPPY_DEPS)
|
||||
lib/nexthop_group.lo: lib/nexthop_group_clippy.c
|
||||
lib/northbound_cli_clippy.c: $(CLIPPY_DEPS)
|
||||
lib/northbound_cli.lo: lib/northbound_cli_clippy.c
|
||||
lib/vty_clippy.c: $(CLIPPY_DEPS)
|
||||
lib/vty.lo: lib/vty_clippy.c
|
||||
|
||||
pkginclude_HEADERS += \
|
||||
lib/agg_table.h \
|
||||
|
34
lib/vty.c
34
lib/vty.c
@ -46,6 +46,10 @@
|
||||
#include <arpa/telnet.h>
|
||||
#include <termios.h>
|
||||
|
||||
#ifndef VTYSH_EXTRACT_PL
|
||||
#include "lib/vty_clippy.c"
|
||||
#endif
|
||||
|
||||
DEFINE_MTYPE_STATIC(LIB, VTY, "VTY")
|
||||
DEFINE_MTYPE_STATIC(LIB, VTY_OUT_BUF, "VTY output buffer")
|
||||
DEFINE_MTYPE_STATIC(LIB, VTY_HIST, "VTY history")
|
||||
@ -92,7 +96,8 @@ static int no_password_check = 0;
|
||||
/* Integrated configuration file path */
|
||||
static char integrate_default[] = SYSCONFDIR INTEGRATE_DEFAULT_CONFIG;
|
||||
|
||||
static int do_log_commands = 0;
|
||||
static bool do_log_commands;
|
||||
static bool do_log_commands_perm;
|
||||
|
||||
void vty_frame(struct vty *vty, const char *format, ...)
|
||||
{
|
||||
@ -2975,13 +2980,24 @@ DEFUN_NOSH (show_history,
|
||||
}
|
||||
|
||||
/* vty login. */
|
||||
DEFUN (log_commands,
|
||||
DEFPY (log_commands,
|
||||
log_commands_cmd,
|
||||
"log commands",
|
||||
"[no] log commands",
|
||||
NO_STR
|
||||
"Logging control\n"
|
||||
"Log all commands (can't be unset without restart)\n")
|
||||
"Log all commands\n")
|
||||
{
|
||||
do_log_commands = 1;
|
||||
if (no) {
|
||||
if (do_log_commands_perm) {
|
||||
vty_out(vty,
|
||||
"Daemon started with permanent logging turned on for commands, ignoring\n");
|
||||
return CMD_WARNING;
|
||||
}
|
||||
|
||||
do_log_commands = false;
|
||||
} else
|
||||
do_log_commands = true;
|
||||
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
@ -3101,7 +3117,7 @@ void vty_init_vtysh(void)
|
||||
}
|
||||
|
||||
/* Install vty's own commands like `who' command. */
|
||||
void vty_init(struct thread_master *master_thread)
|
||||
void vty_init(struct thread_master *master_thread, bool do_command_logging)
|
||||
{
|
||||
/* For further configuration read, preserve current directory. */
|
||||
vty_save_cwd();
|
||||
@ -3125,6 +3141,12 @@ void vty_init(struct thread_master *master_thread)
|
||||
install_element(CONFIG_NODE, &no_service_advanced_vty_cmd);
|
||||
install_element(CONFIG_NODE, &show_history_cmd);
|
||||
install_element(CONFIG_NODE, &log_commands_cmd);
|
||||
|
||||
if (do_command_logging) {
|
||||
do_log_commands = true;
|
||||
do_log_commands_perm = true;
|
||||
}
|
||||
|
||||
install_element(ENABLE_NODE, &terminal_monitor_cmd);
|
||||
install_element(ENABLE_NODE, &terminal_no_monitor_cmd);
|
||||
install_element(ENABLE_NODE, &no_terminal_monitor_cmd);
|
||||
|
@ -290,7 +290,7 @@ struct vty_arg {
|
||||
#endif
|
||||
|
||||
/* Prototypes. */
|
||||
extern void vty_init(struct thread_master *);
|
||||
extern void vty_init(struct thread_master *, bool do_command_logging);
|
||||
extern void vty_init_vtysh(void);
|
||||
extern void vty_terminate(void);
|
||||
extern void vty_reset(void);
|
||||
|
@ -153,7 +153,7 @@ int main(int argc, char **argv)
|
||||
|
||||
/* Library inits. */
|
||||
cmd_init(1);
|
||||
vty_init(master);
|
||||
vty_init(master, false);
|
||||
memory_init();
|
||||
yang_init();
|
||||
nb_init(master, NULL, 0);
|
||||
|
@ -82,7 +82,7 @@ int main(int argc, char **argv)
|
||||
cmd_hostname_set("test");
|
||||
cmd_domainname_set("test.domain");
|
||||
|
||||
vty_init(master);
|
||||
vty_init(master, false);
|
||||
memory_init();
|
||||
yang_init();
|
||||
nb_init(master, NULL, 0);
|
||||
|
@ -411,7 +411,7 @@ int main(int argc, char **argv)
|
||||
/* Library inits. */
|
||||
cmd_init(1);
|
||||
cmd_hostname_set("test");
|
||||
vty_init(master);
|
||||
vty_init(master, false);
|
||||
memory_init();
|
||||
yang_init();
|
||||
nb_init(master, modules, array_size(modules));
|
||||
|
Loading…
Reference in New Issue
Block a user