First batch of olsrd logging changes
authorHenning Rogge <rogge@fgan.de>
Fri, 6 Feb 2009 12:18:32 +0000 (13:18 +0100)
committerHenning Rogge <rogge@fgan.de>
Fri, 6 Feb 2009 12:18:32 +0000 (13:18 +0100)
Removed all direct calls to olsr_syslog()
Dont initialize syslog unless the specific syslogger is called
Small modifications to olsr_exit() semantic
No direct creation of a signal to stop olsrd in the main code.

21 files changed:
lib/quagga/src/quagga.c
lib/txtinfo/src/olsrd_txtinfo.c
src/build_msg.c
src/defs.h
src/interfaces.c
src/ipc_frontend.c
src/log.h
src/main.c
src/net_olsr.c
src/olsr.c
src/olsr.h
src/olsr_cfg_data.c
src/olsr_cfg_data.h
src/olsr_logging.c
src/parser.c
src/process_routes.c
src/scheduler.c
src/unix/ifnet.c
src/unix/log.c
src/unix/misc.c
src/win32/log.c

index 0eda6ae..b786e7a 100644 (file)
@@ -72,9 +72,8 @@ static void free_ipv4_route (struct zebra_route *);
 static void *my_realloc (void *buf, size_t s, const char *c) {
   buf = realloc (buf, s);
   if (!buf) {
-    OLSR_PRINTF (1, "(QUAGGA) OUT OF MEMORY: %s\n", strerror(errno));
-    olsr_syslog(OLSR_LOG_ERR, "olsrd: out of memory!: %m\n");
-    olsr_exit(c, EXIT_FAILURE);
+    OLSR_ERROR(LOG_PLUGINS, "(QUAGGA) %s OUT OF MEMORY: %s\n", c, strerror(errno));
+    olsr_exit(EXIT_FAILURE);
   }
   return buf;
 }
@@ -82,9 +81,10 @@ static void *my_realloc (void *buf, size_t s, const char *c) {
 
 void init_zebra (void) {
   zebra_connect();
-  if (!(zebra.status&STATUS_CONNECTED))
-    olsr_exit ("(QUAGGA) AIIIII, could not connect to zebra! is zebra running?",
-              EXIT_FAILURE);
+  if (!(zebra.status&STATUS_CONNECTED)) {
+    OLSR_ERROR(LOG_PLUGINS, "(QUAGGA) AIIIII, could not connect to zebra! is zebra running?");
+    olsr_exit(EXIT_FAILURE);
+  }
 }
 
 
@@ -138,13 +138,17 @@ static void zebra_connect (void) {
   zebra.sock = socket (AF_INET,SOCK_STREAM, 0);
 #else
   struct sockaddr_un i;
-  if (close (zebra.sock) < 0) olsr_exit ("(QUAGGA) Could not close socket!", EXIT_FAILURE);
-
+  if (close (zebra.sock) < 0) {
+    OLSR_ERROR(LOG_PLUGINS, "(QUAGGA) Could not close socket!");
+    olsr_exit(EXIT_FAILURE);
+  }
   zebra.sock = socket (AF_UNIX,SOCK_STREAM, 0);
 #endif
 
-  if (zebra.sock <0 )
-    olsr_exit("(QUAGGA) Could not create socket!", EXIT_FAILURE);
+  if (zebra.sock <0 ) {
+    OLSR_ERROR(LOG_PLUGINS, "(QUAGGA) Could not create socket!");
+    olsr_exit(EXIT_FAILURE);
+  }
 
   memset (&i, 0, sizeof i);
 #ifndef USE_UNIX_DOMAIN_SOCKET
@@ -274,8 +278,10 @@ void zebra_parse (void* foo __attribute__((unused))) {
     do {
       memcpy (&length, f, sizeof length);
       length = ntohs (length);
-      if (!length) // something wired happened
-       olsr_exit ("(QUAGGA) Zero message length??? ", EXIT_FAILURE);
+      if (!length) { // something wired happened
+        OLSR_ERROR(LOG_PLUGINS, "(QUAGGA) Zero message length???");
+        olsr_exit(EXIT_FAILURE);
+      }
       command = f[2];
       switch (command) {
         case ZEBRA_IPV4_ROUTE_ADD:
@@ -424,8 +430,10 @@ static struct zebra_route *zebra_parse_route (unsigned char *opt) {
       pnt += sizeof r->metric;
 //  }
 
-    if (pnt - opt != length) { olsr_exit ("(QUAGGA) length does not match ??? ", EXIT_FAILURE);
-     }
+    if (pnt - opt != length) {
+      OLSR_ERROR(LOG_PLUGINS, "(QUAGGA) length does not match ???");
+      olsr_exit(EXIT_FAILURE);
+    }
 
   return r;
 }
@@ -450,8 +458,10 @@ static unsigned char *zebra_redistribute_packet (unsigned char cmd, unsigned cha
 /* start redistribution FROM zebra */
 int zebra_redistribute (unsigned char type) {
 
-      if (zebra_send_command(zebra_redistribute_packet (ZEBRA_REDISTRIBUTE_ADD, type)) < 0)
-        olsr_exit("(QUAGGA) could not send redistribute add command", EXIT_FAILURE);
+      if (zebra_send_command(zebra_redistribute_packet (ZEBRA_REDISTRIBUTE_ADD, type)) < 0) {
+        OLSR_ERROR(LOG_PLUGINS, "(QUAGGA) could not send redistribute add command");
+        olsr_exit(EXIT_FAILURE);
+      }
 
   if (type > ZEBRA_ROUTE_MAX-1) return -1;
   zebra.redistribute[type] = 1;
@@ -464,8 +474,10 @@ int zebra_redistribute (unsigned char type) {
 /* end redistribution FROM zebra */
 int zebra_disable_redistribute (unsigned char type) {
 
-      if (zebra_send_command(zebra_redistribute_packet (ZEBRA_REDISTRIBUTE_DELETE, type)) < 0)
-        olsr_exit("(QUAGGA) could not send redistribute delete command", EXIT_FAILURE);
+      if (zebra_send_command(zebra_redistribute_packet (ZEBRA_REDISTRIBUTE_DELETE, type)) < 0) {
+        OLSR_ERROR(LOG_PLUGINS, "(QUAGGA) could not send redistribute delete command");
+        olsr_exit(EXIT_FAILURE);
+      }
 
   if (type > ZEBRA_ROUTE_MAX-1) return -1;
   zebra.redistribute[type] = 0;
index 2b0138c..28f6947 100644 (file)
@@ -277,7 +277,7 @@ static void ipc_action(int fd, void *data __attribute__((unused)), unsigned int
 
     conn = malloc(sizeof(*conn));
     if (conn == NULL) {
-        olsr_syslog(OLSR_LOG_ERR, "(TXTINFO) Out of memory!");
+        OLSR_WARN(LOG_PLUGINS, "(TXTINFO) Out of memory!");
         CLOSESOCKET(http_connection);
         return;
     }
@@ -320,7 +320,7 @@ static void ipc_http_read(int fd, struct ipc_conn *conn)
         if (errno == EINTR || errno == EAGAIN) {
             return;
         }
-        olsr_syslog(OLSR_LOG_ERR, "(TXTINFO) read error: %s", strerror(errno));
+        OLSR_WARN(LOG_PLUGINS, "(TXTINFO) read error: %s", strerror(errno));
         kill_connection(fd, conn);
         return;
     }
@@ -362,7 +362,7 @@ static void ipc_http_write(int fd, struct ipc_conn *conn)
         if (errno == EINTR || errno == EAGAIN) {
             return;
         }
-        olsr_syslog(OLSR_LOG_ERR, "(TXTINFO) write error: %s", strerror(errno));
+        OLSR_WARN(LOG_PLUGINS, "(TXTINFO) write error: %s", strerror(errno));
         kill_connection(fd, conn);
         return;
     }
index 4af3a7c..5c849f9 100644 (file)
@@ -147,9 +147,8 @@ check_buffspace(int msgsize, int buffsize, const char *type)
 {
   if(msgsize > buffsize)
     {
-      OLSR_PRINTF(1, "%s build, outputbuffer to small(%d/%d)!\n", type, msgsize, buffsize);
-      olsr_syslog(OLSR_LOG_ERR, "%s build, outputbuffer to small(%d/%d)!\n", type, msgsize, buffsize);
-      olsr_exit(__func__, EXIT_FAILURE);
+      OLSR_ERROR(LOG_PACKET_CREATION, "%s build, outputbuffer to small(%d/%d)!\n", type, msgsize, buffsize);
+      olsr_exit(EXIT_FAILURE);
     }
 }
 
index c558ef6..0bec53b 100644 (file)
@@ -123,6 +123,7 @@ extern FILE *EXPORT(debug_handle);
 #endif
 
 enum app_state {
+  STATE_INIT,
   STATE_RUNNING,
   STATE_SHUTDOWN,
 #ifndef WIN32
index 227160f..2168b47 100644 (file)
@@ -170,8 +170,7 @@ remove_interface(struct interface **pinterf)
     return;
   }
 
-  OLSR_PRINTF(1, "Removing interface %s\n", ifp->int_name);
-  olsr_syslog(OLSR_LOG_INFO, "Removing interface %s\n", ifp->int_name);
+  OLSR_INFO(LOG_NETWORKING, "Removing interface %s\n", ifp->int_name);
 
   olsr_delete_link_entry_by_if(ifp);
 
@@ -197,8 +196,7 @@ remove_interface(struct interface **pinterf)
       /* Grab the first interface in the list. */
       olsr_cnf->router_id = list2interface(interface_head.next)->ip_addr;
       olsr_ip_to_string(&buf, &olsr_cnf->router_id);
-      OLSR_PRINTF(1, "New main address: %s\n", buf.buf);
-      olsr_syslog(OLSR_LOG_INFO, "New main address: %s\n", buf.buf);
+      OLSR_INFO(LOG_NETWORKING, "New main address: %s\n", buf.buf);
     }
   }
 
@@ -229,18 +227,8 @@ remove_interface(struct interface **pinterf)
   unlock_interface(ifp);
 
   if (list_is_empty(&interface_head) && !olsr_cnf->allow_no_interfaces) {
-    OLSR_PRINTF(1, "No more active interfaces - exiting.\n");
-    olsr_syslog(OLSR_LOG_INFO, "No more active interfaces - exiting.\n");
-    olsr_cnf->exit_value = EXIT_FAILURE;
-
-    /*
-     * And exit.
-     */
-#ifndef WIN32
-    kill(getpid(), SIGINT);
-#else
-    CallSignalHandler();
-#endif
+    OLSR_ERROR(LOG_NETWORKING, "No more active interfaces - exiting.\n");
+    olsr_exit(EXIT_FAILURE);
   }
 }
 
index 353ce47..c5cfa7e 100644 (file)
@@ -142,7 +142,7 @@ ipc_init(void)
   ipc_sock = socket(AF_INET, SOCK_STREAM, 0);
   if (ipc_sock == -1) {
     perror("IPC socket");
-    olsr_exit("IPC socket", EXIT_FAILURE);
+    olsr_exit(EXIT_FAILURE);
   }
 
   yes = 1;
@@ -164,7 +164,7 @@ ipc_init(void)
     sleep(10);
     if (bind(ipc_sock, (struct sockaddr *)&sin4, sizeof(sin4)) == -1) {
       perror("IPC bind");
-      olsr_exit("IPC bind", EXIT_FAILURE);
+      olsr_exit(EXIT_FAILURE);
     }
     OLSR_PRINTF(1, "OK\n");
   }
@@ -172,7 +172,7 @@ ipc_init(void)
   /* show that we are willing to listen */
   if (listen(ipc_sock, olsr_cnf->ipc_connections) == -1) {
     perror("IPC listen");
-    olsr_exit("IPC listen", EXIT_FAILURE);
+    olsr_exit(EXIT_FAILURE);
   }
 
   /* Register the socket with the socket parser */
@@ -202,7 +202,7 @@ ipc_accept(int fd, void *data __attribute__((unused)), unsigned int flags __attr
   ipc_conn = accept(fd, (struct sockaddr *)&pin, &addrlen);
   if (ipc_conn == -1) {
     perror("IPC accept");
-    olsr_exit("IPC accept", EXIT_FAILURE);
+    olsr_exit(EXIT_FAILURE);
   } else {
     OLSR_PRINTF(1, "Front end connected\n");
     addr = inet_ntoa(pin.sin_addr);
@@ -211,8 +211,7 @@ ipc_accept(int fd, void *data __attribute__((unused)), unsigned int flags __attr
       ipc_send_all_routes(ipc_conn);
       OLSR_PRINTF(1, "Connection from %s\n",addr);
     } else {
-      OLSR_PRINTF(1, "Front end-connection from foregin host(%s) not allowed!\n", addr);
-      olsr_syslog(OLSR_LOG_ERR, "OLSR: Front end-connection from foregin host(%s) not allowed!\n", addr);
+      OLSR_WARN(LOG_IPC, "Front end-connection from foregin host(%s) not allowed!\n", addr);
       CLOSESOCKET(ipc_conn);
     }
   }
index 318349c..a8ee0b9 100644 (file)
--- a/src/log.h
+++ b/src/log.h
 #define OLSR_LOG_ERR             SEVERITY_ERR
 
 void
-olsr_openlog(const char *ident);
+olsr_open_syslog(const char *ident);
 
 void
-EXPORT(olsr_syslog)(int level, const char *format, ...) __attribute__((format(printf,2,3)));
+EXPORT(olsr_print_syslog)(int level, const char *format, ...) __attribute__((format(printf,2,3)));
 
 
 #endif
index 4755cb3..3226c7b 100644 (file)
@@ -89,7 +89,7 @@ static void signal_reconfigure(int);
 FILE *debug_handle;                    /* Where to send debug(defaults to stdout) */
 struct olsr_config *olsr_cnf;          /* The global configuration */
 
-volatile enum app_state app_state = STATE_RUNNING;
+volatile enum app_state app_state = STATE_INIT;
 
 static char copyright_string[] __attribute__ ((unused)) =
   "The olsr.org Optimized Link-State Routing daemon(olsrd) Copyright (c) 2004, Andreas Tonnesen(andreto@olsr.org) All rights reserved.";
@@ -125,35 +125,13 @@ main(int argc, char *argv[])
   setbuf(stdout, NULL);
   setbuf(stderr, NULL);
 
-#ifndef WIN32
-  /* Check if user is root */
-  if (geteuid()) {
-    fprintf(stderr, "You must be root(uid = 0) to run olsrd!\nExiting\n\n");
-    exit(EXIT_FAILURE);
-  }
-#else
-  DisableIcmpRedirects();
-
-  if (WSAStartup(0x0202, &WsaData)) {
-    fprintf(stderr, "Could not initialize WinSock.\n");
-    olsr_exit(__func__, EXIT_FAILURE);
-  }
-#endif
-
-  /* Open syslog */
-  olsr_openlog("olsrd");
-
-  /* Initialize timers and scheduler part */
-  olsr_init_timers();
-
   printf("\n *** %s ***\n Build date: %s on %s\n http://www.olsr.org\n\n", olsrd_version, build_date, build_host);
 
   /* Using PID as random seed */
   srandom(getpid());
 
   /*
-   * Set configfile name and
-   * check if a configfile name was given as parameter
+   * Set default configfile name
    */
 #ifdef WIN32
 #ifndef WINCE
@@ -195,9 +173,32 @@ main(int argc, char *argv[])
     break;
   } /* switch */
 
+  /* Sanity check configuration */
+  if (olsr_sanity_check_cfg(olsr_cnf) < 0) {
+    olsr_exit(EXIT_FAILURE);
+  }
+
+#ifndef WIN32
+  /* Check if user is root */
+  if (geteuid()) {
+    fprintf(stderr, "You must be root(uid = 0) to run olsrd!\nExiting\n\n");
+    exit(EXIT_FAILURE);
+  }
+#else
+  DisableIcmpRedirects();
+
+  if (WSAStartup(0x0202, &WsaData)) {
+    fprintf(stderr, "Could not initialize WinSock.\n");
+    olsr_exit(__func__, EXIT_FAILURE);
+  }
+#endif
+
   /* initialize logging */
   olsr_log_init();
 
+  /* Initialize timers and scheduler part */
+  olsr_init_timers();
+
   /* Set avl tree comparator */
   if (olsr_cnf->ipsize == 4) {
     avl_comp_default = avl_comp_ipv4;
@@ -219,11 +220,6 @@ main(int argc, char *argv[])
   /* Initialize net */
   init_net();
 
-  /* Sanity check configuration */
-  if (olsr_sanity_check_cfg(olsr_cnf) < 0) {
-    olsr_exit(__func__, EXIT_FAILURE);
-  }
-
 #ifndef WIN32
   /* Disable redirects globally */
   disable_redirects_global(olsr_cnf->ip_version);
@@ -234,14 +230,14 @@ main(int argc, char *argv[])
    */
   olsr_cnf->ioctl_s = socket(olsr_cnf->ip_version, SOCK_DGRAM, 0);
   if (olsr_cnf->ioctl_s < 0) {
-    olsr_syslog(OLSR_LOG_ERR, "ioctl socket: %m");
-    olsr_exit(__func__, 0);
+    OLSR_ERROR(LOG_MAIN, "ioctl socket: %s\n", strerror(errno));
+    olsr_exit(EXIT_FAILURE);
   }
 #if defined linux
   olsr_cnf->rts_linux = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_ROUTE);
   if (olsr_cnf->rts_linux < 0) {
-    olsr_syslog(OLSR_LOG_ERR, "rtnetlink socket: %m");
-    olsr_exit(__func__, 0);
+    OLSR_ERROR(LOG_MAIN, "rtnetlink socket: %s\n", strerror(errno));
+    olsr_exit(EXIT_FAILURE);
   }
   set_nonblocking(olsr_cnf->rts_linux);
 #endif
@@ -279,9 +275,7 @@ main(int argc, char *argv[])
    */
   if (olsr_cnf->willingness_auto) {
     if (apm_init() < 0) {
-      OLSR_PRINTF(1, "Could not read APM info - setting default willingness(%d)\n", WILL_DEFAULT);
-
-      olsr_syslog(OLSR_LOG_ERR, "Could not read APM info - setting default willingness(%d)\n", WILL_DEFAULT);
+      OLSR_INFO(LOG_MAIN, "Could not read APM info - setting default willingness(%d)\n", WILL_DEFAULT);
 
       olsr_cnf->willingness_auto = 0;
       olsr_cnf->willingness = WILL_DEFAULT;
@@ -295,12 +289,11 @@ main(int argc, char *argv[])
   /* Initializing networkinterfaces */
   if (!ifinit()) {
     if (olsr_cnf->allow_no_interfaces) {
-      fprintf(stderr,
-              "No interfaces detected! This might be intentional, but it also might mean that your configuration is fubar.\nI will continue after 5 seconds...\n");
+      OLSR_INFO(LOG_MAIN, "No interfaces detected! This might be intentional, but it also might mean that your configuration is fubar.\nI will continue after 5 seconds...\n");
       sleep(5);
     } else {
-      fprintf(stderr, "No interfaces detected!\nBailing out!\n");
-      olsr_exit(__func__, EXIT_FAILURE);
+      OLSR_ERROR(LOG_MAIN, "No interfaces detected!\nBailing out!\n");
+      olsr_exit(EXIT_FAILURE);
     }
   }
 
@@ -341,7 +334,7 @@ main(int argc, char *argv[])
   OLSR_PRINTF(1, "Main address: %s\n\n", olsr_ip_to_string(&buf, &olsr_cnf->router_id));
 
   /* Start syslog entry */
-  olsr_syslog(OLSR_LOG_INFO, "%s successfully started", olsrd_version);
+  OLSR_INFO(LOG_MAIN, "%s successfully started", olsrd_version);
 
   /*
    *signal-handlers
@@ -374,12 +367,17 @@ main(int argc, char *argv[])
   link_changes = false;
 
   /* Starting scheduler */
+  app_state = STATE_RUNNING;
   olsr_scheduler();
 
   exitcode = olsr_cnf->exit_value;
   switch (app_state) {
+  case STATE_INIT:
+      OLSR_ERROR(LOG_MAIN, "terminating and got \"init\"?");
+      exitcode = EXIT_FAILURE;
+      break;
   case STATE_RUNNING:
-    olsr_syslog(OLSR_LOG_ERR, "terminating and got \"running\"?");
+    OLSR_ERROR(LOG_MAIN, "terminating and got \"running\"?");
     exitcode = EXIT_FAILURE;
     break;
 #ifndef WIN32
@@ -398,13 +396,13 @@ main(int argc, char *argv[])
       printf("Restarting %s\n", argv[0]);
       execv(argv[0], argv);
       /* if we reach this, the exev() failed */
-      olsr_syslog(OLSR_LOG_ERR, "execv() failed: %s", strerror(errno));
+      OLSR_ERROR(LOG_MAIN, "execv() failed: %s", strerror(errno));
       /* and we simply shutdown */
       exitcode = EXIT_FAILURE;
       break;
     case -1:
       /* fork() failes */
-      olsr_syslog(OLSR_LOG_ERR, "fork() failed: %s", strerror(errno));
+      OLSR_ERROR(LOG_MAIN, "fork() failed: %s", strerror(errno));
       /* and we simply shutdown */
       exitcode = EXIT_FAILURE;
       break;
@@ -434,7 +432,7 @@ static void
 signal_reconfigure(int signo)
 {
   const int save_errno = errno;
-  olsr_syslog(OLSR_LOG_INFO, "Received signal %d - requesting reconfiguration", signo);
+  OLSR_INFO(LOG_MAIN, "Received signal %d - requesting reconfiguration", signo);
   app_state = STATE_RECONFIGURE;
   errno = save_errno;
 }
@@ -455,7 +453,7 @@ signal_shutdown(int signo)
 #endif
 {
   const int save_errno = errno;
-  olsr_syslog(OLSR_LOG_INFO, "Received signal %d - requesting shutdown", (int)signo);
+  OLSR_INFO(LOG_MAIN, "Received signal %d - requesting shutdown", (int)signo);
   app_state = STATE_SHUTDOWN;
   errno = save_errno;
 #ifdef WIN32
@@ -533,7 +531,7 @@ olsr_shutdown(void)
   /* Remove IP filters */
   deinit_netfilters();
 
-  olsr_syslog(OLSR_LOG_INFO, "%s stopped", olsrd_version);
+  OLSR_INFO(LOG_MAIN, "%s stopped", olsrd_version);
 
   OLSR_PRINTF(1, "\n <<<< %s - terminating >>>>\n           http://www.olsr.org\n", olsrd_version);
 
index 76f4c6c..8c9712c 100644 (file)
@@ -378,7 +378,8 @@ net_output(struct interface *ifp)
     fprintf(stderr, "Socket: %d interface: %d/%s\n", ifp->olsr_socket, ifp->if_index, ifp->int_name);
     fprintf(stderr, "Outputsize: %d\n", ifp->netbuf.pending);
 #endif
-    olsr_syslog(OLSR_LOG_ERR, "OLSR: sendto IPv%d: %s", olsr_cnf->ip_version == AF_INET ? 4 : 6, strerror(save_errno));
+
+    OLSR_WARN(LOG_NETWORKING, "OLSR: sendto IPv%d: %s", olsr_cnf->ip_version == AF_INET ? 4 : 6, strerror(save_errno));
     retval = -1;
   }
 
index 8dc006a..6b17387 100644 (file)
@@ -377,8 +377,7 @@ olsr_forward_message(union olsr_message *m, struct interface *in_if,
 
              if(net_outbuffer_push(ifn, m, msgsize) != msgsize)
                {
-                 OLSR_PRINTF(1, "Received message to big to be forwarded in %s(%d bytes)!", ifn->int_name, msgsize);
-                 olsr_syslog(OLSR_LOG_ERR, "Received message to big to be forwarded on %s(%d bytes)!", ifn->int_name, msgsize);
+      OLSR_WARN(LOG_NETWORKING, "Received message to big to be forwarded in %s(%d bytes)!", ifn->int_name, msgsize);
                }
            }
        }
@@ -389,8 +388,7 @@ olsr_forward_message(union olsr_message *m, struct interface *in_if,
 
          if(net_outbuffer_push(ifn, m, msgsize) != msgsize)
            {
-             OLSR_PRINTF(1, "Received message to big to be forwarded in %s(%d bytes)!", ifn->int_name, msgsize);
-             olsr_syslog(OLSR_LOG_ERR, "Received message to big to be forwarded on %s(%d bytes)!", ifn->int_name, msgsize);
+             OLSR_WARN(LOG_NETWORKING, "Received message to big to be forwarded in %s(%d bytes)!", ifn->int_name, msgsize);
            }
        }
   } OLSR_FOR_ALL_INTERFACES_END(ifn);
@@ -605,16 +603,17 @@ olsr_status_to_string(uint8_t status)
  *Termination function to be called whenever a error occures
  *that requires the daemon to terminate
  *
- *@param msg the message to write to the syslog and possibly stdout
+ *@param val the exit code for OLSR
  */
 
 void
-olsr_exit(const char *msg, int val)
+olsr_exit(int val)
 {
-  OLSR_PRINTF(1, "OLSR EXIT: %s\n", msg);
-  olsr_syslog(OLSR_LOG_ERR, "olsrd exit: %s\n", msg);
   fflush(stdout);
   olsr_cnf->exit_value = val;
+  if (app_state == STATE_INIT) {
+    exit(val);
+  }
   app_state = STATE_SHUTDOWN;
 }
 
@@ -641,9 +640,8 @@ olsr_malloc(size_t size, const char *id)
 
   if (!ptr) {
       const char * const err_msg = strerror(errno);
-      OLSR_PRINTF(1, "OUT OF MEMORY: %s\n", err_msg);
-      olsr_syslog(OLSR_LOG_ERR, "olsrd: out of memory!: %s\n", err_msg);
-      olsr_exit(id, EXIT_FAILURE);
+      OLSR_ERROR(LOG_MAIN, "Out of memory for id '%s': %s\n", id, err_msg);
+      olsr_exit(EXIT_FAILURE);
   }
 
 #if 0
index 13fe25f..6e5a497 100644 (file)
@@ -88,7 +88,7 @@ const char *
 olsr_status_to_string(uint8_t);
 
 void
-EXPORT(olsr_exit)(const char *, int);
+EXPORT(olsr_exit)(int);
 
 void *
 EXPORT(olsr_malloc)(size_t, const char *);
index e3da9c6..005c4bb 100644 (file)
 const char *LOG_SOURCE_NAMES[] = {
   "all",
   "logging",
+  "ipc",
+  "main",
+  "networking",
+  "packet_creation",
+  "packet_parsing",
+  "routing",
+  "scheduler",
+  "plugins"
 };
 
 const char *LOG_SEVERITY_NAMES[] = {
index 573d548..c4c96d5 100644 (file)
  * defines the source of a logging event
  */
 enum log_source {
-  LOG_ALL,        //!< LOG_ALL
-  LOG_LOGGING,    //!< LOG_LOGGING
+  LOG_ALL,                //!< LOG_ALL
+  LOG_LOGGING,            //!< LOG_LOGGING
+  LOG_IPC,                //!< LOG_IPC
+  LOG_MAIN,               //!< LOG_MAIN
+  LOG_NETWORKING,         //!< LOG_NETWORKING
+  LOG_PACKET_CREATION,    //!< LOG_PACKET_CREATION
+  LOG_PACKET_PARSING,     //!< LOG_PACKET_PARSING
+  LOG_ROUTING,            //!< LOG_ROUTING
+  LOG_SCHEDULER,          //!< LOG_SCHEDULER
+  LOG_PLUGINS,            //!< LOG_PLUGINS
 
   /* this one must be the last of the enums ! */
   LOG_SOURCE_COUNT//!< LOG_SOURCE_COUNT
index db442fd..0d19f58 100644 (file)
@@ -107,6 +107,7 @@ void olsr_log_init(void) {
     }
   }
   if (olsr_cnf->log_target_syslog) {
+    olsr_open_syslog("olsrd");
     olsr_log_addhandler(&olsr_log_syslog, NULL);
   }
   if (olsr_cnf->log_target_stderr) {
@@ -265,6 +266,6 @@ static void olsr_log_syslog (enum log_severity severity, enum log_source source,
     const char *file __attribute__((unused)), int line __attribute__((unused)),
     char *buffer, int prefixLength __attribute__((unused))) {
   if (olsr_cnf->log_event[severity][source]) {
-    olsr_syslog(severity, "%s", buffer);
+    olsr_print_syslog(severity, "%s", buffer);
   }
 }
index c8a0d6b..03a9727 100644 (file)
@@ -255,8 +255,8 @@ static void parse_packet(struct olsr *olsr, int size, struct interface *in_if, u
   }
   if (ntohs(olsr->olsr_packlen) != size) {
     struct ipaddr_str buf;
-    OLSR_PRINTF(1, "Size error detected in received packet.\nRecieved %d, in packet %d\n", size, ntohs(olsr->olsr_packlen));
-    olsr_syslog(OLSR_LOG_ERR, " packet length error in  packet received from %s!", olsr_ip_to_string(&buf, from_addr));
+    OLSR_WARN(LOG_PACKET_PARSING, "Size error detected in received packet from %s.\nRecieved %d, in packet %d\n",
+        olsr_ip_to_string(&buf, from_addr), size, ntohs(olsr->olsr_packlen));
     return;
   }
 
@@ -289,11 +289,8 @@ static void parse_packet(struct olsr *olsr, int size, struct interface *in_if, u
     /* Check size of message */
     if (count < 0) {
       struct ipaddr_str buf;
-      OLSR_PRINTF(1, "packet length error in  packet received from %s!",
+      OLSR_WARN(LOG_PACKET_PARSING, "packet length error in  packet received from %s!",
                   olsr_ip_to_string(&buf, from_addr));
-
-      olsr_syslog(OLSR_LOG_ERR, " packet length error in  packet received from %s!",
-      olsr_ip_to_string(&buf, from_addr));
       break;
     }
 
@@ -365,8 +362,7 @@ olsr_input(int fd, void *data __attribute__((unused)), unsigned int flags __attr
 
     if (cc <= 0) {
       if (cc < 0 && errno != EWOULDBLOCK) {
-        OLSR_PRINTF(1, "error recvfrom: %s", strerror(errno));
-        olsr_syslog(OLSR_LOG_ERR, "error recvfrom: %m");
+        OLSR_WARN(LOG_PACKET_PARSING, "error recvfrom: %s", strerror(errno));
       }
       break;
     }
@@ -401,10 +397,7 @@ olsr_input(int fd, void *data __attribute__((unused)), unsigned int flags __attr
     olsr_in_if = if_ifwithsock(fd);
     if (olsr_in_if == NULL) {
       struct ipaddr_str buf;
-      OLSR_PRINTF(1, "Could not find input interface for message from %s size %d\n",
-                  olsr_ip_to_string(&buf, &from_addr),
-                  cc);
-      olsr_syslog(OLSR_LOG_ERR, "Could not find input interface for message from %s size %d\n",
+      OLSR_WARN(LOG_PACKET_PARSING, "Could not find input interface for message from %s size %d\n",
                   olsr_ip_to_string(&buf, &from_addr),
                   cc);
       return;
@@ -467,8 +460,8 @@ void olsr_input_hostemu(int fd, void *data __attribute__((unused)), unsigned int
   cc = recv(fd, (void *)&pcklen, 2, MSG_PEEK);/* Win needs a cast */
   if (cc != 2) {
     if (cc <= 0) {
-      fprintf(stderr, "Lost olsr_switch connection - exit!\n");
-      olsr_exit(__func__, EXIT_FAILURE);
+      OLSR_ERROR(LOG_NETWORKING, "Lost olsr_switch connection - exit!\n");
+      olsr_exit(EXIT_FAILURE);
     }
     fprintf(stderr, "[hust-emu] error extracting size(%d) %s!\n", cc, strerror(errno));
     return;
@@ -480,8 +473,7 @@ void olsr_input_hostemu(int fd, void *data __attribute__((unused)), unsigned int
   if (cc <= 0) {
     if (cc < 0 && errno != EWOULDBLOCK) {
       const char * const err_msg = strerror(errno);
-      OLSR_PRINTF(1, "error recvfrom: %s", err_msg);
-      olsr_syslog(OLSR_LOG_ERR, "error recvfrom: %s", err_msg);
+      OLSR_WARN(LOG_NETWORKING, "error recvfrom: %s", err_msg);
     }
     return;
   }
@@ -494,10 +486,7 @@ void olsr_input_hostemu(int fd, void *data __attribute__((unused)), unsigned int
   olsr_in_if = if_ifwithsock(fd);
   if (olsr_in_if == NULL) {
     struct ipaddr_str buf;
-    OLSR_PRINTF(1, "Could not find input interface for message from %s size %d\n",
-                olsr_ip_to_string(&buf, &from_addr),
-                cc);
-    olsr_syslog(OLSR_LOG_ERR, "Could not find input interface for message from %s size %d\n",
+    OLSR_WARN(LOG_NETWORKING, "Could not find input interface for message from %s size %d\n",
                 olsr_ip_to_string(&buf, &from_addr),
                 cc);
     return;
index f29ba4c..c8c7bad 100644 (file)
@@ -131,9 +131,8 @@ olsr_del_route(struct rt_entry *rt)
   if(error < 0) {
     const char * const err_msg = strerror(errno);
     const char * const routestr = olsr_rt_to_string(rt);
-    OLSR_PRINTF(1, "KERN: ERROR deleting %s: %s\n", routestr, err_msg);
 
-    olsr_syslog(OLSR_LOG_ERR, "Delete route %s: %s", routestr, err_msg);
+    OLSR_WARN(LOG_ROUTING, "KERN: ERROR deleting %s: %s\n", routestr, err_msg);
   } else {
 
     /* release the interface. */
@@ -163,8 +162,7 @@ exit(9);
   if (0 > olsr_add_route_function(rt, olsr_cnf->ip_version)) {
     const char * const err_msg = strerror(errno);
     const char * const routestr = olsr_rtp_to_string(rt->rt_best);
-    OLSR_PRINTF(1, "KERN: ERROR adding %s: %s\n", routestr, err_msg);
-    olsr_syslog(OLSR_LOG_ERR, "Add route %s: %s", routestr, err_msg);
+    OLSR_WARN(LOG_ROUTING, "KERN: ERROR adding %s: %s\n", routestr, err_msg);
   } else {
     /* route addition has suceeded */
 
index 7595a21..4b698f3 100644 (file)
@@ -103,7 +103,7 @@ add_olsr_socket(int fd, socket_handler_func pf_pr, socket_handler_func pf_imm, v
   struct olsr_socket_entry *new_entry;
 
   if (fd < 0 || (pf_pr == NULL && pf_imm == NULL)) {
-    olsr_syslog(OLSR_LOG_ERR, "%s: Bogus socket entry - not registering...", __func__);
+    OLSR_WARN(LOG_SCHEDULER, "Bogus socket entry - not registering...");
     return;
   }
   OLSR_PRINTF(2, "Adding OLSR socket entry %d\n", fd);
@@ -135,7 +135,7 @@ remove_olsr_socket(int fd, socket_handler_func pf_pr, socket_handler_func pf_imm
   struct olsr_socket_entry *entry;
 
   if (fd < 0 || (pf_pr == NULL && pf_imm == NULL)) {
-    olsr_syslog(OLSR_LOG_ERR, "%s: Bogus socket entry - not processing...", __func__);
+    OLSR_WARN(LOG_SCHEDULER, "Bogus socket entry - not processing...");
     return 0;
   }
   OLSR_PRINTF(1, "Removing OLSR socket entry %d\n", fd);
@@ -241,8 +241,7 @@ poll_sockets(void)
   }
   if (n == -1) {       /* Did something go wrong? */
     const char * const err_msg = strerror(errno);
-    olsr_syslog(OLSR_LOG_ERR, "select: %s", err_msg);
-    OLSR_PRINTF(1, "Error select: %s", err_msg);
+    OLSR_WARN(LOG_SCHEDULER, "select error: %s", err_msg);
     return;
   }
 
@@ -333,7 +332,7 @@ static void handle_fds(const unsigned long next_interval)
       break;
     }
     if (n == -1) { /* Did something go wrong? */
-      olsr_syslog(OLSR_LOG_ERR, "select: %s", strerror(errno));
+      OLSR_WARN(LOG_SCHEDULER, "select error: %s", strerror(errno));
       break;
     }
 
index ab6c01a..83f11e7 100644 (file)
@@ -254,8 +254,7 @@ chk_if_changed(struct olsr_if_config *iface)
 
       ifp->int_addr = *(struct sockaddr_in *)&ifr.ifr_addr;
       if (!olsr_cnf->fixed_origaddr && ip4equal(&olsr_cnf->router_id.v4, &ifp->ip_addr.v4)) {
-        OLSR_PRINTF(1, "New main address: %s\n", ip4_to_string(&buf, tmp_saddr4->sin_addr));
-        olsr_syslog(OLSR_LOG_INFO, "New main address: %s\n", ip4_to_string(&buf, tmp_saddr4->sin_addr));
+        OLSR_INFO(LOG_NETWORKING, "New main address: %s\n", ip4_to_string(&buf, tmp_saddr4->sin_addr));
         olsr_cnf->router_id.v4 = tmp_saddr4->sin_addr;
       }
 
@@ -266,7 +265,7 @@ chk_if_changed(struct olsr_if_config *iface)
 
     /* Check netmask */
     if (ioctl(olsr_cnf->ioctl_s, SIOCGIFNETMASK, &ifr) < 0) {
-      olsr_syslog(OLSR_LOG_ERR, "%s: ioctl (get broadaddr)", ifr.ifr_name);
+      OLSR_WARN(LOG_NETWORKING, "%s: ioctl (get broadaddr) failed", ifr.ifr_name);
       remove_interface(&iface->interf);
       return 0;
     }
@@ -289,8 +288,7 @@ chk_if_changed(struct olsr_if_config *iface)
     if (!iface->cnf->ipv4_broadcast.v4.s_addr) {
       /* Check broadcast address */
       if (ioctl(olsr_cnf->ioctl_s, SIOCGIFBRDADDR, &ifr) < 0) {
-       olsr_syslog(OLSR_LOG_ERR, "%s: ioctl (get broadaddr)", ifr.ifr_name);
-       remove_interface(&iface->interf);
+        OLSR_WARN(LOG_NETWORKING, "%s: ioctl (get broadaddr) failed", ifr.ifr_name);
         return 0;
       }
 
@@ -347,8 +345,7 @@ int add_hemu_if (struct olsr_if_config *iface)
 
   if (!olsr_cnf->fixed_origaddr && olsr_ipequal(&all_zero, &olsr_cnf->router_id)) {
     olsr_cnf->router_id = iface->hemu_ip;
-    OLSR_PRINTF(1, "New main address: %s\n", olsr_ip_to_string(&buf, &olsr_cnf->router_id));
-    olsr_syslog(OLSR_LOG_INFO, "New main address: %s\n", olsr_ip_to_string(&buf, &olsr_cnf->router_id));
+    OLSR_INFO(LOG_NETWORKING, "New main address: %s\n", olsr_ip_to_string(&buf, &olsr_cnf->router_id));
   }
 
   ifp->int_mtu = OLSR_DEFAULT_MTU - (olsr_cnf->ip_version == AF_INET6 ? UDP_IPV6_HDRSIZE : UDP_IPV4_HDRSIZE);
@@ -376,10 +373,8 @@ int add_hemu_if (struct olsr_if_config *iface)
 
     ifp->olsr_socket = gethemusocket(&sin4);
     if (ifp->olsr_socket < 0) {
-      fprintf(stderr, "Could not initialize socket... exiting!\n\n");
-      olsr_syslog(OLSR_LOG_ERR, "Could not initialize socket... exiting!\n\n");
-      olsr_cnf->exit_value = EXIT_FAILURE;
-      kill(getpid(), SIGINT);
+      OLSR_ERROR(LOG_NETWORKING, "Could not initialize socket... exiting!\n\n");
+      olsr_exit(EXIT_FAILURE);
     }
   } else {
     /* IP version 6 */
@@ -598,7 +593,7 @@ chk_if_up(struct olsr_if_config *iface, int debuglvl __attribute__((unused)))
 
     /* Find netmask */
     if (ioctl(olsr_cnf->ioctl_s, SIOCGIFNETMASK, &ifr) < 0) {
-      olsr_syslog(OLSR_LOG_ERR, "%s: ioctl (get netmask)", ifr.ifr_name);
+      OLSR_WARN(LOG_NETWORKING, "%s: ioctl (get netmask) failed", ifr.ifr_name);
       goto cleanup;
     }
     ifp->int_netmask = *(struct sockaddr_in *)&ifr.ifr_netmask;
@@ -610,8 +605,8 @@ chk_if_up(struct olsr_if_config *iface, int debuglvl __attribute__((unused)))
     } else {
       /* Autodetect */
       if (ioctl(olsr_cnf->ioctl_s, SIOCGIFBRDADDR, &ifr) < 0) {
-       olsr_syslog(OLSR_LOG_ERR, "%s: ioctl (get broadaddr)", ifr.ifr_name);
-       goto cleanup;
+        OLSR_WARN(LOG_NETWORKING, "%s: ioctl (get broadaddr) failed", ifr.ifr_name);
+        goto cleanup;
       }
 
       ifp->int_broadaddr = *(struct sockaddr_in *)&ifr.ifr_broadaddr;
@@ -655,7 +650,7 @@ chk_if_up(struct olsr_if_config *iface, int debuglvl __attribute__((unused)))
 
   OLSR_PRINTF(1, "\tMTU - IPhdr: %d\n", ifp->int_mtu);
 
-  olsr_syslog(OLSR_LOG_INFO, "Adding interface %s\n", iface->name);
+  OLSR_INFO(LOG_NETWORKING, "Adding interface %s\n", iface->name);
   OLSR_PRINTF(1, "\tIndex %d\n", ifp->if_index);
 
   if(olsr_cnf->ip_version == AF_INET) {
@@ -689,10 +684,8 @@ chk_if_up(struct olsr_if_config *iface, int debuglvl __attribute__((unused)))
      */
     ifp->olsr_socket = getsocket(BUFSPACE, ifp->int_name);
     if (ifp->olsr_socket < 0) {
-      fprintf(stderr, "Could not initialize socket... exiting!\n\n");
-      olsr_syslog(OLSR_LOG_ERR, "Could not initialize socket... exiting!\n\n");
-      olsr_cnf->exit_value = EXIT_FAILURE;
-      kill(getpid(), SIGINT);
+      OLSR_ERROR(LOG_NETWORKING, "Could not initialize socket... exiting!\n\n");
+      olsr_exit(EXIT_FAILURE);
     }
   } else {
     /* IP version 6 */
@@ -704,10 +697,8 @@ chk_if_up(struct olsr_if_config *iface, int debuglvl __attribute__((unused)))
      */
     ifp->olsr_socket = getsocket6(BUFSPACE, ifp->int_name);
     if (ifp->olsr_socket < 0)  {
-      fprintf(stderr, "Could not initialize socket... exiting!\n\n");
-      olsr_syslog(OLSR_LOG_ERR, "Could not initialize socket... exiting!\n\n");
-      olsr_cnf->exit_value = EXIT_FAILURE;
-      kill(getpid(), SIGINT);
+      OLSR_ERROR(LOG_NETWORKING, "Could not initialize socket... exiting!\n\n");
+      olsr_exit(EXIT_FAILURE);
     }
     join_mcast(ifp, ifp->olsr_socket);
   }
@@ -722,13 +713,11 @@ chk_if_up(struct olsr_if_config *iface, int debuglvl __attribute__((unused)))
     /* Set TOS */
     int data = IPTOS_PREC(olsr_cnf->tos);
     if (setsockopt(ifp->olsr_socket, SOL_SOCKET, SO_PRIORITY, (char*)&data, sizeof(data)) < 0) {
-      perror("setsockopt(SO_PRIORITY)");
-      olsr_syslog(OLSR_LOG_ERR, "OLSRD: setsockopt(SO_PRIORITY) error %m");
+      OLSR_WARN(LOG_NETWORKING, "setsockopt(SO_PRIORITY) error %s", strerror(errno));
     }
     data = IPTOS_TOS(olsr_cnf->tos);
     if (setsockopt(ifp->olsr_socket, SOL_IP, IP_TOS, (char*)&data, sizeof(data)) < 0) {
-      perror("setsockopt(IP_TOS)");
-      olsr_syslog(OLSR_LOG_ERR, "setsockopt(IP_TOS) error %m");
+      OLSR_WARN(LOG_NETWORKING, "setsockopt(IP_TOS) error %s", strerror(errno));
     }
   }
 #endif
@@ -744,8 +733,7 @@ chk_if_up(struct olsr_if_config *iface, int debuglvl __attribute__((unused)))
   if (!olsr_cnf->fixed_origaddr && olsr_ipequal(&all_zero, &olsr_cnf->router_id)) {
     struct ipaddr_str buf;
     olsr_cnf->router_id = ifp->ip_addr;
-    OLSR_PRINTF(1, "New main address: %s\n", olsr_ip_to_string(&buf, &olsr_cnf->router_id));
-    olsr_syslog(OLSR_LOG_INFO, "New main address: %s\n", olsr_ip_to_string(&buf, &olsr_cnf->router_id));
+    OLSR_INFO(LOG_NETWORKING, "New main address: %s\n", olsr_ip_to_string(&buf, &olsr_cnf->router_id));
   }
 
   /*
index bc655a8..48b6181 100644 (file)
@@ -47,7 +47,7 @@
 #include <stdarg.h>
 
 void
-olsr_openlog(const char *ident)
+olsr_open_syslog(const char *ident)
 {
   openlog(ident, LOG_PID | LOG_ODELAY, LOG_DAEMON);
   setlogmask(LOG_UPTO(LOG_INFO));
@@ -57,7 +57,7 @@ olsr_openlog(const char *ident)
 
 
 void
-olsr_syslog(int level, const char *format, ...)
+olsr_print_syslog(int level, const char *format, ...)
 {
 
   int linux_level;
@@ -65,13 +65,16 @@ olsr_syslog(int level, const char *format, ...)
 
   switch(level)
     {
-    case(OLSR_LOG_INFO):
+    case(SEVERITY_DEBUG):
+      linux_level = LOG_DEBUG;
+      break;
+    case(SEVERITY_INFO):
       linux_level = LOG_INFO;
       break;
-    case(OLSR_LOG_WARN):
+    case(SEVERITY_WARN):
       linux_level = LOG_WARNING;
       break;
-    case(OLSR_LOG_ERR):
+    case(SEVERITY_ERR):
       linux_level = LOG_ERR;
       break;
     default:
index 6e1bf42..c468d34 100644 (file)
@@ -74,17 +74,17 @@ void clear_console(void)
 
 int set_nonblocking(int fd)
 {
-    /* make the fd non-blocking */
-    int socket_flags = fcntl(fd, F_GETFL);
-    if (socket_flags < 0) {
-        olsr_syslog(OLSR_LOG_ERR, "Cannot get the socket flags: %s", strerror(errno));
-        return -1;
-    }
-    if (fcntl(fd, F_SETFL, socket_flags|O_NONBLOCK) < 0) {
-        olsr_syslog(OLSR_LOG_ERR, "Cannot set the socket flags: %s", strerror(errno));
-        return -1;
-    }
-    return 0;
+  /* make the fd non-blocking */
+  int socket_flags = fcntl(fd, F_GETFL);
+  if (socket_flags < 0) {
+    OLSR_WARN(LOG_NETWORKING, "Cannot get the socket flags: %s", strerror(errno));
+    return -1;
+  }
+  if (fcntl(fd, F_SETFL, socket_flags|O_NONBLOCK) < 0) {
+    OLSR_WARN(LOG_NETWORKING, "Cannot set the socket flags: %s", strerror(errno));
+    return -1;
+  }
+  return 0;
 }
 
 /*
index b1ce521..8853eb6 100644 (file)
 
 #include "../log.h"
 
-void olsr_openlog(const char *Id __attribute__((unused)))
+void olsr_open_syslog(const char *Id __attribute__((unused)))
 {
 }
 
-void olsr_syslog(int Level __attribute__((unused)), const char *Format __attribute__((unused)), ...)
+void olsr_print_syslog(int Level __attribute__((unused)), const char *Format __attribute__((unused)), ...)
 {
 }