Commit 3fda08e4 authored by Ondřej Zajíček's avatar Ondřej Zajíček

Unix: Change debugging options

The old behavior was that enabling debugging did many nontrivial changes
in BIRD behavior. The patch changes it that these changes are generally
independent. Compiling with --enable-debug now just enables compile-time
debug macros, but do not automatically activate debug mode (-d) nor local
mode (-l). Debug mode with output to file (-D) do not force foreground
mode (-f), therefore there is no need for backgroud option (-b), which is
removed. Also fixes a bug when the default log target in -D mode was
stderr instead of given debug file.
parent 0642fb4d
Pipeline #42905 passed with stages
in 7 minutes and 21 seconds
...@@ -85,15 +85,10 @@ AC_SUBST([srcdir]) ...@@ -85,15 +85,10 @@ AC_SUBST([srcdir])
AS_IF([test -z "${runstatedir}"], [runstatedir='${localstatedir}/run']) AS_IF([test -z "${runstatedir}"], [runstatedir='${localstatedir}/run'])
AC_SUBST([runstatedir]) AC_SUBST([runstatedir])
CONFIG_FILE="\$(sysconfdir)/bird.conf"
if test "$enable_debug" = yes ; then
CONFIG_FILE="bird.conf"
CONTROL_SOCKET="bird.ctl"
else
CONFIG_FILE="\$(sysconfdir)/bird.conf"
CONTROL_SOCKET="\$(runstatedir)/bird.ctl"
fi
AC_SUBST([CONFIG_FILE]) AC_SUBST([CONFIG_FILE])
CONTROL_SOCKET="\$(runstatedir)/bird.ctl"
AC_SUBST([CONTROL_SOCKET]) AC_SUBST([CONTROL_SOCKET])
AC_SEARCH_LIBS([clock_gettime], [rt posix4], AC_SEARCH_LIBS([clock_gettime], [rt posix4],
......
...@@ -149,10 +149,10 @@ BIRD executable by configuring out routing protocols you don't use, and ...@@ -149,10 +149,10 @@ BIRD executable by configuring out routing protocols you don't use, and
use given configuration file instead of <it/prefix/<file>/etc/bird.conf</file>. use given configuration file instead of <it/prefix/<file>/etc/bird.conf</file>.
<tag><label id="argv-debug">-d</tag> <tag><label id="argv-debug">-d</tag>
enable debug messages and run bird in foreground. enable debug messages to stderr, and run bird in foreground.
<tag><label id="argv-log-file">-D <m/filename of debug log/</tag> <tag><label id="argv-debug-file">-D <m/filename of debug log/</tag>
log debugging information to given file instead of stderr. enable debug messages to given file.
<tag><label id="argv-foreground">-f</tag> <tag><label id="argv-foreground">-f</tag>
run bird in foreground. run bird in foreground.
...@@ -483,7 +483,9 @@ include "tablename.conf";; ...@@ -483,7 +483,9 @@ include "tablename.conf";;
<cf/auth/ about authentication failures, <cf/auth/ about authentication failures,
<cf/bug/ for internal BIRD bugs. <cf/bug/ for internal BIRD bugs.
You may specify more than one <cf/log/ line to establish logging to You may specify more than one <cf/log/ line to establish logging to
multiple destinations. Default: log everything to the system log. multiple destinations. Default: log everything to the system log, or
to the debug output if debugging is enabled by <cf/-d//<cf/-D/
command-line option.
<tag><label id="opt-debug-protocols">debug protocols all|off|{ states|routes|filters|interfaces|events|packets [, <m/.../] }</tag> <tag><label id="opt-debug-protocols">debug protocols all|off|{ states|routes|filters|interfaces|events|packets [, <m/.../] }</tag>
Set global defaults of protocol debugging options. See <cf/debug/ in the Set global defaults of protocol debugging options. See <cf/debug/ in the
......
...@@ -170,7 +170,8 @@ log_commit(int class, buffer *buf) ...@@ -170,7 +170,8 @@ log_commit(int class, buffer *buf)
else else
{ {
byte tbuf[TM_DATETIME_BUFFER_SIZE]; byte tbuf[TM_DATETIME_BUFFER_SIZE];
if (!tm_format_real_time(tbuf, sizeof(tbuf), config->tf_log.fmt1, current_real_time())) const char *fmt = config ? config->tf_log.fmt1 : "%F %T.%3f";
if (!tm_format_real_time(tbuf, sizeof(tbuf), fmt, current_real_time()))
strcpy(tbuf, "<error>"); strcpy(tbuf, "<error>");
if (l->limit) if (l->limit)
...@@ -322,36 +323,45 @@ debug(const char *msg, ...) ...@@ -322,36 +323,45 @@ debug(const char *msg, ...)
} }
static list * static list *
default_log_list(int debug, int init, char **syslog_name) default_log_list(int initial, char **syslog_name)
{ {
static list init_log_list; static list log_list;
init_list(&init_log_list); init_list(&log_list);
*syslog_name = NULL; *syslog_name = NULL;
#ifdef HAVE_SYSLOG_H #ifdef HAVE_SYSLOG_H
if (!debug) if (!dbgf)
{ {
static struct log_config lc_syslog = { .mask = ~0 }; static struct log_config lc_syslog = { .mask = ~0 };
add_tail(&init_log_list, &lc_syslog.n); add_tail(&log_list, &lc_syslog.n);
*syslog_name = bird_name; *syslog_name = bird_name;
if (!init)
return &init_log_list;
} }
#endif #endif
static struct log_config lc_stderr = { .mask = ~0, .terminal_flag = 1 }; if (dbgf && (dbgf != stderr))
lc_stderr.fh = stderr; {
add_tail(&init_log_list, &lc_stderr.n); static struct log_config lc_debug = { .mask = ~0 };
return &init_log_list; lc_debug.fh = dbgf;
add_tail(&log_list, &lc_debug.n);
}
if (initial || (dbgf == stderr))
{
static struct log_config lc_stderr = { .mask = ~0, .terminal_flag = 1};
lc_stderr.fh = stderr;
add_tail(&log_list, &lc_stderr.n);
}
return &log_list;
} }
void void
log_switch(int debug, list *logs, char *new_syslog_name) log_switch(int initial, list *logs, char *new_syslog_name)
{ {
struct log_config *l; struct log_config *l;
if (!logs || EMPTY_LIST(*logs)) if (!logs || EMPTY_LIST(*logs))
logs = default_log_list(debug, !logs, &new_syslog_name); logs = default_log_list(initial, &new_syslog_name);
/* Close the logs to avoid pinning them on disk when deleted */ /* Close the logs to avoid pinning them on disk when deleted */
if (current_log_list) if (current_log_list)
......
...@@ -44,12 +44,6 @@ ...@@ -44,12 +44,6 @@
* Debugging * Debugging
*/ */
#ifdef DEBUGGING
static int debug_flag = 1;
#else
static int debug_flag = 0;
#endif
void void
async_dump(void) async_dump(void)
{ {
...@@ -185,7 +179,7 @@ sysdep_preconfig(struct config *c) ...@@ -185,7 +179,7 @@ sysdep_preconfig(struct config *c)
int int
sysdep_commit(struct config *new, struct config *old UNUSED) sysdep_commit(struct config *new, struct config *old UNUSED)
{ {
log_switch(debug_flag, &new->logfiles, new->syslog_name); log_switch(0, &new->logfiles, new->syslog_name);
return 0; return 0;
} }
...@@ -750,21 +744,16 @@ parse_args(int argc, char **argv) ...@@ -750,21 +744,16 @@ parse_args(int argc, char **argv)
while ((c = getopt(argc, argv, opt_list)) >= 0) while ((c = getopt(argc, argv, opt_list)) >= 0)
switch (c) switch (c)
{ {
case 'b':
run_in_foreground = 0;
break;
case 'c': case 'c':
config_name = optarg; config_name = optarg;
config_changed = 1; config_changed = 1;
break; break;
case 'd': case 'd':
debug_flag |= 1; log_init_debug("");
run_in_foreground = 1; run_in_foreground = 1;
break; break;
case 'D': case 'D':
log_init_debug(optarg); log_init_debug(optarg);
debug_flag |= 2;
run_in_foreground = 1;
break; break;
case 'p': case 'p':
parse_and_exit = 1; parse_and_exit = 1;
...@@ -822,9 +811,7 @@ main(int argc, char **argv) ...@@ -822,9 +811,7 @@ main(int argc, char **argv)
#endif #endif
parse_args(argc, argv); parse_args(argc, argv);
if (debug_flag == 1) log_switch(1, NULL, NULL);
log_init_debug("");
log_switch(debug_flag, NULL, NULL);
net_init(); net_init();
resource_init(); resource_init();
......
...@@ -116,7 +116,7 @@ void krt_io_init(void); ...@@ -116,7 +116,7 @@ void krt_io_init(void);
void main_thread_init(void); void main_thread_init(void);
void log_init_debug(char *); /* Initialize debug dump to given file (NULL=stderr, ""=off) */ void log_init_debug(char *); /* Initialize debug dump to given file (NULL=stderr, ""=off) */
void log_switch(int debug, list *l, char *); /* Use l=NULL for initial switch */ void log_switch(int initial, list *l, char *);
struct log_config { struct log_config {
node n; node n;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment