diff --git a/lib/.gitignore b/lib/.gitignore index 6176b30f8d2f..5d38469ca20e 100644 --- a/lib/.gitignore +++ b/lib/.gitignore @@ -11,3 +11,4 @@ /grammar_sandbox /clippy /defun_lex.c +vtysh_daemons.h diff --git a/lib/log_vty.c b/lib/log_vty.c index fc298533aef6..1ce25196da5a 100644 --- a/lib/log_vty.c +++ b/lib/log_vty.c @@ -15,6 +15,7 @@ #include "lib/lib_errors.h" #include "lib/printfrr.h" #include "lib/systemd.h" +#include "lib/vtysh_daemons.h" #include "lib/log_vty_clippy.c" @@ -459,6 +460,70 @@ DEFUN (clear_log_cmdline, return CMD_SUCCESS; } +/* Per-daemon log file config */ +DEFUN (config_log_dmn_file, + config_log_dmn_file_cmd, + "log daemon " DAEMONS_LIST " file FILENAME [$levelarg]", + "Logging control\n" + "Specific daemon\n" + DAEMONS_STR + "Logging to file\n" + "Logging filename\n" + LOG_LEVEL_DESC) +{ + int level = log_default_lvl; + int idx = 0; + const char *d_str; + const char *filename; + const char *levelarg = NULL; + + d_str = argv[2]->text; + + /* Ignore if not for this daemon */ + if (!strmatch(d_str, frr_get_progname())) + return CMD_SUCCESS; + + if (argv_find(argv, argc, "file", &idx)) + filename = argv[idx + 1]->arg; + else + return CMD_SUCCESS; + + if (argc > 5) + levelarg = argv[5]->text; + + if (levelarg) { + level = log_level_match(levelarg); + if (level == ZLOG_DISABLED) + return CMD_ERR_NO_MATCH; + } + return set_log_file(&zt_file, vty, filename, level); +} + +/* Per-daemon no log file */ +DEFUN (no_config_log_dmn_file, + no_config_log_dmn_file_cmd, + "no log daemon " DAEMONS_LIST " file [FILENAME [LEVEL]]", + NO_STR + "Logging control\n" + "Specific daemon\n" + DAEMONS_STR + "Cancel logging to file\n" + "Logging file name\n" + "Logging level\n") +{ + const char *d_str; + + d_str = argv[3]->text; + + /* Ignore if not for this daemon */ + if (!strmatch(d_str, frr_get_progname())) + return CMD_SUCCESS; + + zt_file.prio_min = ZLOG_DISABLED; + zlog_file_set_other(&zt_file); + return CMD_SUCCESS; +} + DEFPY (config_log_file, config_log_file_cmd, "log file FILENAME [$levelarg]", @@ -904,6 +969,8 @@ void log_cmd_init(void) install_element(CONFIG_NODE, &config_log_monitor_cmd); install_element(CONFIG_NODE, &no_config_log_monitor_cmd); install_element(CONFIG_NODE, &config_log_file_cmd); + install_element(CONFIG_NODE, &config_log_dmn_file_cmd); + install_element(CONFIG_NODE, &no_config_log_dmn_file_cmd); install_element(CONFIG_NODE, &no_config_log_file_cmd); install_element(CONFIG_NODE, &config_log_syslog_cmd); install_element(CONFIG_NODE, &no_config_log_syslog_cmd); diff --git a/lib/subdir.am b/lib/subdir.am index 4f203c0c842f..6893049c7e56 100644 --- a/lib/subdir.am +++ b/lib/subdir.am @@ -540,12 +540,22 @@ EXTRA_DIST += \ BUILT_SOURCES += \ lib/gitversion.h \ lib/route_types.h \ + lib/vtysh_daemons.h \ # end ## force route_types.h $(lib_clippy_OBJECTS): lib/route_types.h $(lib_libfrr_la_OBJECTS): lib/route_types.h +# force lib_daemons.h +$(lib_libfrr_la_OBJECTS): lib/vtysh_daemons.h + +CLEANFILES += lib/vtysh_daemons.h +lib/vtysh_daemons.h: + @$(MKDIR_P) lib + $(PERL) $(top_srcdir)/vtysh/daemons.pl $(vtysh_daemons) > lib/vtysh_daemons.h + + AM_YFLAGS = -d -Dapi.prefix=@BISON_OPENBRACE@cmd_yy@BISON_CLOSEBRACE@ @BISON_VERBOSE@ lib/command_lex.h: lib/command_lex.c diff --git a/vtysh/.gitignore b/vtysh/.gitignore index 09e90e51d2ed..a6c3d4abc6ca 100644 --- a/vtysh/.gitignore +++ b/vtysh/.gitignore @@ -1,6 +1,5 @@ vtysh vtysh_cmd.c -vtysh_daemons.h # does not exist anymore - remove 2023-10-04 or so extract.pl diff --git a/vtysh/subdir.am b/vtysh/subdir.am index a1b81f598a0e..2eae16d6291c 100644 --- a/vtysh/subdir.am +++ b/vtysh/subdir.am @@ -29,13 +29,3 @@ noinst_HEADERS += \ vtysh_vtysh_LDADD = lib/libfrr.la $(LIBCAP) $(LIBREADLINE) $(LIBS) $(LIBPAM) EXTRA_DIST += vtysh/daemons.pl - -BUILT_SOURCES += vtysh/vtysh_daemons.h - -# force vtysh_daemons.h -$(vtysh_vtysh_OBJECTS): vtysh/vtysh_daemons.h - -CLEANFILES += vtysh/vtysh_daemons.h -vtysh/vtysh_daemons.h: - @$(MKDIR_P) vtysh - $(PERL) $(top_srcdir)/vtysh/daemons.pl $(vtysh_daemons) > vtysh/vtysh_daemons.h diff --git a/vtysh/vtysh.c b/vtysh/vtysh.c index 2888403e625e..d5ac87eb3292 100644 --- a/vtysh/vtysh.c +++ b/vtysh/vtysh.c @@ -31,7 +31,7 @@ #include "network.h" #include "filter.h" #include "vtysh/vtysh.h" -#include "vtysh/vtysh_daemons.h" +#include "lib/vtysh_daemons.h" #include "log.h" #include "vrf.h" #include "libfrr.h"