]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Unix: Change debugging options
authorOndrej Zajicek (work) <santiago@crfreenet.org>
Tue, 4 Dec 2018 15:55:25 +0000 (16:55 +0100)
committerOndrej Zajicek (work) <santiago@crfreenet.org>
Tue, 4 Dec 2018 15:55:25 +0000 (16:55 +0100)
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.

configure.ac
doc/bird.sgml
sysdep/unix/log.c
sysdep/unix/main.c
sysdep/unix/unix.h

index 7abf88c81a34b349d67016424343090072eaf2f1..ae2710f54a71a23369d43d433e58aaebb6e66da5 100644 (file)
@@ -85,15 +85,10 @@ AC_SUBST([srcdir])
 AS_IF([test -z "${runstatedir}"], [runstatedir='${localstatedir}/run'])
 AC_SUBST([runstatedir])
 
-
-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
+CONFIG_FILE="\$(sysconfdir)/bird.conf"
 AC_SUBST([CONFIG_FILE])
+
+CONTROL_SOCKET="\$(runstatedir)/bird.ctl"
 AC_SUBST([CONTROL_SOCKET])
 
 AC_SEARCH_LIBS([clock_gettime], [rt posix4],
index 62cf0768d202594311d091732a84aef7c14dd204..386d3e8d4c5df9c58014dccffb0b3449ff44cb87 100644 (file)
@@ -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>.
 
        <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>
-       log debugging information to given file instead of stderr.
+       <tag><label id="argv-debug-file">-D <m/filename of debug log/</tag>
+       enable debug messages to given file.
 
        <tag><label id="argv-foreground">-f</tag>
        run bird in foreground.
@@ -483,7 +483,9 @@ include "tablename.conf";;
        <cf/auth/ about authentication failures,
        <cf/bug/ for internal BIRD bugs.
        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>
        Set global defaults of protocol debugging options. See <cf/debug/ in the
index 9a0fa55079ba146eeb616672aa9e1d3720269c1f..c9064834fa6fe48d70a6c8fad3904d60ca847d98 100644 (file)
@@ -170,7 +170,8 @@ log_commit(int class, buffer *buf)
          else
            {
              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>");
 
              if (l->limit)
@@ -322,36 +323,45 @@ debug(const char *msg, ...)
 }
 
 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;
-  init_list(&init_log_list);
+  static list log_list;
+  init_list(&log_list);
   *syslog_name = NULL;
 
 #ifdef HAVE_SYSLOG_H
-  if (!debug)
+  if (!dbgf)
     {
       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;
-      if (!init)
-       return &init_log_list;
     }
 #endif
 
-  static struct log_config lc_stderr = { .mask = ~0, .terminal_flag = 1 };
-  lc_stderr.fh = stderr;
-  add_tail(&init_log_list, &lc_stderr.n);
-  return &init_log_list;
+  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;
+      add_tail(&log_list, &lc_stderr.n);
+    }
+
+  return &log_list;
 }
 
 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;
 
   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 */
   if (current_log_list)
index d2380501a521013990f5f32a54ec31243e3928b4..c31ccd172070634855616e9e63578b4a39d6b895 100644 (file)
  *     Debugging
  */
 
-#ifdef DEBUGGING
-static int debug_flag = 1;
-#else
-static int debug_flag = 0;
-#endif
-
 void
 async_dump(void)
 {
@@ -185,7 +179,7 @@ sysdep_preconfig(struct config *c)
 int
 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;
 }
 
@@ -750,21 +744,16 @@ parse_args(int argc, char **argv)
   while ((c = getopt(argc, argv, opt_list)) >= 0)
     switch (c)
       {
-      case 'b':
-       run_in_foreground = 0;
-       break;
       case 'c':
        config_name = optarg;
        config_changed = 1;
        break;
       case 'd':
-       debug_flag |= 1;
+       log_init_debug("");
        run_in_foreground = 1;
        break;
       case 'D':
        log_init_debug(optarg);
-       debug_flag |= 2;
-       run_in_foreground = 1;
        break;
       case 'p':
        parse_and_exit = 1;
@@ -822,9 +811,7 @@ main(int argc, char **argv)
 #endif
 
   parse_args(argc, argv);
-  if (debug_flag == 1)
-    log_init_debug("");
-  log_switch(debug_flag, NULL, NULL);
+  log_switch(1, NULL, NULL);
 
   net_init();
   resource_init();
index 1230616704a7f17a1ae4d346b1d5c7de6714d929..0e1e98c0a229288f6f8740fba87d11f78799f84f 100644 (file)
@@ -116,7 +116,7 @@ void krt_io_init(void);
 
 void main_thread_init(void);
 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 {
   node n;