More OS interface cleanup
authorHenning Rogge <hrogge@googlemail.com>
Wed, 20 Oct 2010 17:47:54 +0000 (19:47 +0200)
committerHenning Rogge <hrogge@googlemail.com>
Wed, 20 Oct 2010 17:47:54 +0000 (19:47 +0200)
18 files changed:
src/bsd/apm.c
src/linux/apm.c
src/linux/linux_apm.h [new file with mode: 0644]
src/linux/linux_net.h
src/linux/net.c
src/main.c
src/olsr.c
src/olsr.h
src/olsr_logging.c
src/os_apm.h [moved from src/apm.h with 96% similarity]
src/os_net.h
src/os_system.h [moved from src/os_log.h with 97% similarity]
src/unix/init.c [new file with mode: 0644]
src/unix/log.c
src/unix/unix_log.h [new file with mode: 0644]
src/win32/apm.c
src/win32/log.c
src/win32/net.c

index 059176b..380bf56 100644 (file)
@@ -39,7 +39,7 @@
  *
  */
 
-#include "apm.h"
+#include "os_apm.h"
 #include "defs.h"
 #include <stdio.h>
 #include <string.h>
@@ -51,12 +51,12 @@ apm_init(void)
 }
 
 void
-apm_printinfo(struct olsr_apm_info *ApmInfo __attribute__ ((unused)))
+os_apm_printinfo(struct olsr_apm_info *ApmInfo __attribute__ ((unused)))
 {
 }
 
 int
-apm_read(struct olsr_apm_info *ApmInfo __attribute__ ((unused)))
+os_apm_read(struct olsr_apm_info *ApmInfo __attribute__ ((unused)))
 {
   return -1;
 }
index 0228dee..64ffcd2 100644 (file)
  * Acpi-Power Enlightenment epplet
  */
 
-#include "apm.h"
+#include "os_apm.h"
 #include "defs.h"
 #include "olsr_logging.h"
+#include "linux/linux_apm.h"
 
 #include <stdio.h>
 #include <string.h>
@@ -113,8 +114,8 @@ static int apm_read_acpi(struct olsr_apm_info *);
 
 static int acpi_probe(void);
 
-int
-apm_init(void)
+void
+os_apm_init(void)
 {
   struct olsr_apm_info ainfo;
 
@@ -127,22 +128,18 @@ apm_init(void)
     method = USE_APM;
 
   if (method != -1)
-    apm_printinfo(&ainfo);
-
-  return method;
+    os_apm_printinfo(&ainfo);
 }
 
 void
-apm_printinfo(struct olsr_apm_info *ainfo)
+os_apm_printinfo(struct olsr_apm_info *ainfo __attribute__ ((unused)))
 {
   OLSR_DEBUG(LOG_APM, "APM info:\n\tAC status %d\n\tBattery percentage %d%%\n\tBattery time left %d mins\n\n", ainfo->ac_line_status,
               ainfo->battery_percentage, ainfo->battery_time_left);
-
-  ainfo = NULL;                 /* squelch compiler warnings */
 }
 
 int
-apm_read(struct olsr_apm_info *ainfo)
+os_apm_read(struct olsr_apm_info *ainfo)
 {
   switch (method) {
   case USE_APM:
diff --git a/src/linux/linux_apm.h b/src/linux/linux_apm.h
new file mode 100644 (file)
index 0000000..3ccaf9e
--- /dev/null
@@ -0,0 +1,13 @@
+/*
+ * linux_apm.h
+ *
+ *  Created on: Oct 20, 2010
+ *      Author: rogge
+ */
+
+#ifndef LINUX_APM_H_
+#define LINUX_APM_H_
+
+void os_apm_init(void);
+
+#endif /* LINUX_APM_H_ */
index 61921ce..6ab3d78 100644 (file)
@@ -15,6 +15,8 @@
  * these functions are used by the common unix code, but are not
  * exported to the OLSR core
  */
+void os_init_global_ifoptions(void);
+void os_cleanup_global_ifoptions(void);
 void net_os_restore_ifoption(struct interface *ifs);
 int net_os_set_ifoptions(const char *if_name, struct interface *iface);
 
index 81f5a9c..2ba1703 100644 (file)
@@ -253,7 +253,7 @@ void net_os_restore_ifoption(struct interface *ifs) {
 /**
  *Resets the spoof filter and ICMP redirect settings
  */
-int
+void
 os_cleanup_global_ifoptions(void)
 {
   char procfile[FILENAME_MAX];
@@ -285,7 +285,6 @@ os_cleanup_global_ifoptions(void)
       }
     }
   }
-  return 1;
 }
 
 /**
index b79c3e9..9313df6 100644 (file)
@@ -53,7 +53,7 @@
 #include "scheduler.h"
 #include "parser.h"
 #include "plugin_loader.h"
-#include "apm.h"
+#include "os_apm.h"
 #include "net_olsr.h"
 #include "olsr_cfg_gen.h"
 #include "common/string.h"
@@ -65,6 +65,7 @@
 #include "os_net.h"
 #include "os_kernel_routes.h"
 #include "os_time.h"
+#include "os_system.h"
 
 #if defined linux
 #include <linux/types.h>
@@ -200,8 +201,8 @@ main(int argc, char *argv[])
     olsr_exit(EXIT_FAILURE);
   }
 
-  /* set global interface options */
-  os_init_global_ifoptions();
+  /* setup os specific global options */
+  os_init();
 
 #ifndef WIN32
   /* Check if user is root */
@@ -312,20 +313,7 @@ main(int argc, char *argv[])
    *Set up willingness/APM
    */
   if (olsr_cnf->willingness_auto) {
-    if (apm_init() < 0) {
-      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;
-    } else {
-#if REMOVE_LOG_INFO != 1
-      struct millitxt_buf tbuf;
-#endif
-      olsr_cnf->willingness = olsr_calculate_willingness();
-
-      OLSR_INFO(LOG_MAIN, "Willingness set to %d - next update in %s secs\n",
-          olsr_cnf->willingness, olsr_milli_to_txt(&tbuf, olsr_cnf->will_int));
-    }
+    olsr_calculate_willingness();
   }
 
 #if defined linux
@@ -565,9 +553,6 @@ olsr_shutdown(void)
   }
 #endif
 
-  /* Reset network settings */
-  os_cleanup_global_ifoptions();
-
   /* ioctl socket */
   os_close(olsr_cnf->ioctl_s);
 
@@ -603,6 +588,9 @@ olsr_shutdown(void)
   /* Free cookies and memory pools attached. */
   olsr_cookie_cleanup();
 
+  /* Reset os_specific global options */
+  os_cleanup();
+
   /* Flush config */
   olsr_free_cfg(olsr_cnf);
 }
index 4dbd97d..e8a698c 100644 (file)
 #include "lq_mpr.h"
 #include "olsr_spf.h"
 #include "scheduler.h"
-#include "apm.h"
+#include "os_apm.h"
 #include "neighbor_table.h"
 #include "lq_packet.h"
 #include "common/avl.h"
 #include "net_olsr.h"
 #include "lq_plugin.h"
 #include "olsr_logging.h"
-#include "os_log.h"
+#include "os_system.h"
 
 #include <assert.h>
 #include <stdarg.h>
@@ -367,7 +367,7 @@ olsr_update_willingness(void *foo __attribute__ ((unused)))
   int tmp_will = olsr_cnf->willingness;
 
   /* Re-calculate willingness */
-  olsr_cnf->willingness = olsr_calculate_willingness();
+  olsr_calculate_willingness();
 
   if (tmp_will != olsr_cnf->willingness) {
     OLSR_INFO(LOG_MAIN, "Local willingness updated: old %d new %d\n", tmp_will, olsr_cnf->willingness);
@@ -398,31 +398,40 @@ olsr_init_willingness(void)
  *@return a 8bit value from 0-7 representing the willingness
  */
 
-uint8_t
+void
 olsr_calculate_willingness(void)
 {
   struct olsr_apm_info ainfo;
+  struct millitxt_buf tbuf;
 
   /* If fixed willingness */
   if (!olsr_cnf->willingness_auto)
-    return olsr_cnf->willingness;
+    return;
 
-  if (apm_read(&ainfo) < 1)
-    return WILL_DEFAULT;
+  if (os_apm_read(&ainfo) < 1) {
+    olsr_cnf->willingness = WILL_DEFAULT;
+    olsr_cnf->willingness_auto = false;
+    OLSR_WARN(LOG_MAIN, "Cannot read APM info, setting willingness to default value (%d)", olsr_cnf->willingness);
+    return;
+  }
 
-  apm_printinfo(&ainfo);
+  os_apm_printinfo(&ainfo);
 
   /* If AC powered */
-  if (ainfo.ac_line_status == OLSR_AC_POWERED)
-    return 6;
-
+  if (ainfo.ac_line_status == OLSR_AC_POWERED) {
+    olsr_cnf->willingness = 6;
+  }
+  else {
   /* If battery powered
    *
    * juice > 78% will: 3
    * 78% > juice > 26% will: 2
    * 26% > juice will: 1
    */
-  return (ainfo.battery_percentage / 26);
+    olsr_cnf->willingness = (ainfo.battery_percentage / 26);
+  }
+  OLSR_INFO(LOG_MAIN, "Willingness set to %d - next update in %s secs\n",
+      olsr_cnf->willingness, olsr_milli_to_txt(&tbuf, olsr_cnf->will_int));
 }
 
 const char *
index fd74c25..c2c89ae 100644 (file)
@@ -74,7 +74,7 @@ void
 void
   olsr_init_willingness(void);
 
-uint8_t olsr_calculate_willingness(void);
+void olsr_calculate_willingness(void);
 
 const char *olsr_msgtype_to_string(uint8_t);
 
index 984dfb9..27b0fd4 100644 (file)
@@ -48,7 +48,7 @@
 #include "olsr_cfg.h"
 #include "olsr_cfg_data.h"
 #include "olsr_logging.h"
-#include "os_log.h"
+#include "os_system.h"
 #include "os_time.h"
 
 struct log_handler_entry {
@@ -86,9 +86,6 @@ olsr_log_init(void)
   bool printError = false;
   int i, j;
 
-  /* open syslog */
-  os_syslog_init("olsrd");
-
   /* clear global mask */
   for (j = 0; j < LOG_SEVERITY_COUNT; j++) {
     for (i = 0; i < LOG_SOURCE_COUNT; i++) {
@@ -140,8 +137,6 @@ olsr_log_cleanup(void)
     fflush(log_fileoutput);
     fclose(log_fileoutput);
   }
-
-  os_syslog_cleanup();
 }
 
 /**
similarity index 96%
rename from src/apm.h
rename to src/os_apm.h
index 32ef523..a777877 100644 (file)
--- a/src/apm.h
@@ -55,9 +55,7 @@ struct olsr_apm_info {
   int battery_time_left;               /* Time left in minutes */
 };
 
-int apm_init(void);
-
-void apm_printinfo(struct olsr_apm_info *);
+void os_apm_printinfo(struct olsr_apm_info *);
 
 /*
  * This function should return 0 if no powerinfo
@@ -66,7 +64,7 @@ void apm_printinfo(struct olsr_apm_info *);
  * the current power status.
  */
 
-int apm_read(struct olsr_apm_info *);
+int os_apm_read(struct olsr_apm_info *);
 
 #endif /* _APM_H */
 
index a3666a9..fd38751 100644 (file)
@@ -69,9 +69,6 @@ int EXPORT(os_getsocket6)(int, struct interface *, bool, uint16_t);
 int EXPORT(os_socket_set_nonblocking) (int fd);
 
 /* OS dependent interface functions */
-void os_init_global_ifoptions(void);
-int os_cleanup_global_ifoptions(void);
-
 int os_init_interface(struct interface *, struct olsr_if_config *);
 void os_cleanup_interface(struct interface *);
 
similarity index 97%
rename from src/os_log.h
rename to src/os_system.h
index cf86c7f..8523e94 100644 (file)
@@ -50,8 +50,8 @@
 
 #include "defs.h"
 
-void os_syslog_init(const char *ident);
-void os_syslog_cleanup(void);
+void os_init(void);
+void os_cleanup(void);
 
 void os_clear_console(void);
 void os_printf_syslog (int level, const char *format, ...) __attribute__ ((format(printf, 2, 3)));
diff --git a/src/unix/init.c b/src/unix/init.c
new file mode 100644 (file)
index 0000000..51c0bbf
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * init.c
+ *
+ *  Created on: Oct 20, 2010
+ *      Author: rogge
+ */
+
+#include "os_system.h"
+#include "unix/unix_log.h"
+
+#if defined linux
+#include "linux/linux_net.h"
+#include "linux/linux_apm.h"
+#else
+#include "bsd/bsd_net.h"
+#endif
+
+void os_init(void) {
+  os_syslog_init("olsrd");
+  os_init_global_ifoptions();
+  os_apm_init();
+}
+
+void os_cleanup(void) {
+  os_cleanup_global_ifoptions();
+  os_clear_console();
+}
index 6bec108..8f50acc 100644 (file)
@@ -44,7 +44,8 @@
  */
 
 #include "olsr_logging.h"
-#include "os_log.h"
+#include "os_system.h"
+#include "unix/unix_log.h"
 
 #include <syslog.h>
 #include <stdarg.h>
diff --git a/src/unix/unix_log.h b/src/unix/unix_log.h
new file mode 100644 (file)
index 0000000..84d6601
--- /dev/null
@@ -0,0 +1,14 @@
+/*
+ * unix_log.h
+ *
+ *  Created on: Oct 20, 2010
+ *      Author: rogge
+ */
+
+#ifndef UNIX_LOG_H_
+#define UNIX_LOG_H_
+
+void os_syslog_init(const char *ident);
+void os_syslog_cleanup(void);
+
+#endif /* UNIX_LOG_H_ */
index 294b9a3..8a5ec59 100644 (file)
@@ -39,7 +39,7 @@
  *
  */
 
-#include "apm.h"
+#include "os_apm.h"
 #include "defs.h"
 #include "olsr_cfg.h"
 #include "olsr_logging.h"
 #include <windows.h>
 #undef interface
 
-int
-apm_init(void)
-{
-  struct olsr_apm_info ApmInfo;
-
-  OLSR_INFO(LOG_MAIN, "Initializing APM\n");
-
-  if (apm_read(&ApmInfo) < 0)
-    return -1;
-
-  apm_printinfo(&ApmInfo);
-
-  return 0;
-}
-
 void
-apm_printinfo(struct olsr_apm_info *ApmInfo)
+os_apm_printinfo(struct olsr_apm_info *ApmInfo)
 {
   OLSR_INFO(LOG_MAIN, "APM info:\n\tAC status %d\n\tBattery percentage %d%%\n\n",
             ApmInfo->ac_line_status, ApmInfo->battery_percentage);
 }
 
 int
-apm_read(struct olsr_apm_info *ApmInfo)
+os_apm_read(struct olsr_apm_info *ApmInfo)
 {
 #if !defined WINCE
   SYSTEM_POWER_STATUS PowerStat;
index 1a2d2c7..472932a 100644 (file)
  *
  */
 
-#include "os_log.h"
-
-void
-os_syslog_init(const char *Id __attribute__ ((unused)))
-{
-}
-
-void
-os_syslog_cleanup(void) {
-}
+#include "os_system.h"
 
 void
 os_printf_syslog(int Level __attribute__ ((unused)), const char *Format __attribute__ ((unused)),...)
index 582962b..7c9ed91 100644 (file)
@@ -60,6 +60,7 @@
 #include "ipcalc.h"
 #include "olsr_logging.h"
 #include "win32/compat.h"
+#include "os_system.h"
 #if defined WINCE
 #define WIDE_STRING(s) L##s
 #else
@@ -78,8 +79,8 @@ static void DisableIcmpRedirects(void);
  * @return
  */
 int
-os_close(int sock) {
-  return closesocket(sock);
+os_close(int sock) {
+  return os_close(sock);
 }
 
 int
@@ -108,13 +109,13 @@ os_getsocket4(int bufspace, struct interface *ifp, bool bind_to_unicast, uint16_
 
   if (setsockopt(Sock, SOL_SOCKET, SO_BROADCAST, (char *)&On, sizeof(On)) < 0) {
     OLSR_ERROR(LOG_NETWORKING, "Cannot set socket for OLSR PDUs to broadcast mode (%s)\n", strerror(errno));
-    CLOSESOCKET(Sock);
+    os_close(Sock);
     olsr_exit(EXIT_FAILURE);
   }
 
   if (setsockopt(Sock, SOL_SOCKET, SO_REUSEADDR, (char *)&On, sizeof(On)) < 0) {
     OLSR_ERROR(LOG_NETWORKING, "Cannot set socket for OLSR PDUs to broadcast mode (%s)\n", strerror(errno));
-    CLOSESOCKET(Sock);
+    os_close(Sock);
     olsr_exit(EXIT_FAILURE);
   }
 
@@ -141,13 +142,13 @@ os_getsocket4(int bufspace, struct interface *ifp, bool bind_to_unicast, uint16_
 
   if (bind(Sock, (struct sockaddr *)&Addr, sizeof(Addr)) < 0) {
     OLSR_ERROR(LOG_NETWORKING, "Could not bind socket for OLSR PDUs to device (%s)\n", strerror(errno));
-    CLOSESOCKET(Sock);
+    os_close(Sock);
     olsr_exit(EXIT_FAILURE);
   }
 
   if (WSAIoctl(Sock, FIONBIO, &On, sizeof(On), NULL, 0, &Len, NULL, NULL) < 0) {
     OLSR_ERROR(LOG_NETWORKING, "WSAIoctl");
-    CLOSESOCKET(Sock);
+    os_close(Sock);
     olsr_exit(EXIT_FAILURE);
   }
 
@@ -167,13 +168,13 @@ os_getsocket6(int bufspace, struct interface *ifp, bool bind_to_unicast, uint16_
 
   if (setsockopt(Sock, SOL_SOCKET, SO_BROADCAST, (char *)&On, sizeof(On)) < 0) {
     OLSR_ERROR(LOG_NETWORKING, "Cannot set socket for OLSR PDUs to broadcast mode (%s)\n", strerror(errno));
-    CLOSESOCKET(Sock);
+    os_close(Sock);
     olsr_exit(EXIT_FAILURE);
   }
 
   if (setsockopt(Sock, SOL_SOCKET, SO_REUSEADDR, (char *)&On, sizeof(On)) < 0) {
     OLSR_ERROR(LOG_NETWORKING, "Cannot set socket for OLSR PDUs to broadcast mode (%s)\n", strerror(errno));
-    CLOSESOCKET(Sock);
+    os_close(Sock);
     olsr_exit(EXIT_FAILURE);
   }
 
@@ -197,7 +198,7 @@ os_getsocket6(int bufspace, struct interface *ifp, bool bind_to_unicast, uint16_
 
   if (bind(Sock, (struct sockaddr *)&Addr6, sizeof(Addr6)) < 0) {
     OLSR_ERROR(LOG_NETWORKING, "Could not bind socket for OLSR PDUs to device (%s)\n", strerror(errno));
-    CLOSESOCKET(Sock);
+    os_close(Sock);
     olsr_exit(EXIT_FAILURE);
   }
 
@@ -313,7 +314,8 @@ DisableIcmpRedirects(void)
 
 static OVERLAPPED RouterOver;
 
-void os_init_global_ifoptions(void)
+/* enable IP forwarding */
+void os_init(void)
 {
   HMODULE Lib;
   unsigned int __stdcall(*EnableRouterFunc) (HANDLE * Hand, OVERLAPPED * Over);
@@ -351,9 +353,10 @@ void os_init_global_ifoptions(void)
   return;
 }
 
-static int
-disable_ip_forwarding(void)
-{
+/**
+ * disable IP forwarding
+ */
+void os_cleanup(void) {
   HMODULE Lib;
   unsigned int __stdcall(*UnenableRouterFunc) (OVERLAPPED * Over, unsigned int *Count);
   unsigned int Count;
@@ -361,28 +364,20 @@ disable_ip_forwarding(void)
   Lib = LoadLibrary(WIDE_STRING("iphlpapi.dll"));
 
   if (Lib == NULL)
-    return 0;
+    return;
 
   UnenableRouterFunc = (unsigned int __stdcall(*)(OVERLAPPED *, unsigned int *))
     GetProcAddress(Lib, WIDE_STRING("UnenableRouter"));
 
   if (UnenableRouterFunc == NULL)
-    return 0;
+    return;
 
   if (UnenableRouterFunc(&RouterOver, &Count) != NO_ERROR) {
     OLSR_WARN(LOG_NETWORKING, "UnenableRouter()");
-    return -1;
+    return;
   }
 
   OLSR_DEBUG(LOG_NETWORKING, "Routing disabled, count = %u.\n", Count);
-
-  return 0;
-}
-
-int os_cleanup_global_ifoptions(void) {
-  disable_ip_forwarding();
-
-  return 0;
 }
 
 /**