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.
This commit is contained in:
parent
0642fb4d45
commit
3fda08e405
5 changed files with 37 additions and 43 deletions
11
configure.ac
11
configure.ac
|
@ -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
|
||||||
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";;
|
||||||
<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)
|
||||||
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, ...)
|
||||||
}
|
}
|
||||||
|
|
||||||
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))
|
||||||
|
{
|
||||||
|
static struct log_config lc_debug = { .mask = ~0 };
|
||||||
|
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;
|
lc_stderr.fh = stderr;
|
||||||
add_tail(&init_log_list, &lc_stderr.n);
|
add_tail(&log_list, &lc_stderr.n);
|
||||||
return &init_log_list;
|
}
|
||||||
|
|
||||||
|
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 @@
|
||||||
* 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)
|
||||||
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)
|
||||||
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)
|
||||||
#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);
|
||||||
|
|
||||||
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;
|
||||||
|
|
Loading…
Reference in a new issue