More cleanup of OS-specific interface, this times with win32
authorHenning Rogge <hrogge@googlemail.com>
Mon, 11 Oct 2010 15:48:26 +0000 (17:48 +0200)
committerHenning Rogge <hrogge@googlemail.com>
Mon, 11 Oct 2010 15:48:26 +0000 (17:48 +0200)
28 files changed:
Makefile
lib/arprefresh/src/olsrd_arprefresh.c
src/bsd/dummy.c
src/bsd/net.c
src/interfaces.c
src/linux/kernel_routes.c
src/linux/kernel_tunnel.c
src/linux/net.c
src/main.c
src/net_olsr.c
src/olsr.c
src/olsr_cfg.c
src/olsr_logging.c
src/os_kernel_routes.h
src/os_kernel_tunnel.h
src/os_log.h
src/os_net.h
src/parser.c
src/process_routes.c
src/scheduler.c
src/unix/ifnet.c
src/unix/log.c
src/win32/compat.h [new file with mode: 0644]
src/win32/ifnet.c
src/win32/kernel_routes.c
src/win32/log.c
src/win32/misc.c [deleted file]
src/win32/net.c

index 5823f49..985378d 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -85,13 +85,11 @@ src/builddata.c:
 clean:
        -rm -f $(OBJS) $(SRCS:%.c=%.d) $(EXENAME) $(EXENAME).exe src/builddata.c $(TMPFILES)
        -rm -f $(EXENAME).exports
-ifeq ($(OS), win32)
        -rm -f libolsrd.a
        -rm -f gui/win32/Main/olsrd_cfgparser.lib
        -rm -f olsr-setup.exe
        -rm -fr gui/win32/Main/Release
        -rm -fr gui/win32/Shim/Release
-endif
 
 install: install_olsrd
 
index af74256..d15b5fc 100644 (file)
@@ -194,7 +194,7 @@ olsrd_plugin_init(void)
     filter.len = ARRAYSIZE(BPF_code);
     filter.filter = BPF_code;
     if (0 <= (arprefresh_sockfd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IP))) &&
-        0 <= set_nonblocking(arprefresh_sockfd) &&
+        0 <= os_socket_set_nonblocking(arprefresh_sockfd) &&
         0 <= setsockopt(arprefresh_sockfd, SOL_SOCKET, SO_ATTACH_FILTER, &filter, sizeof(filter))) {
       /* Register the ARP refresh event */
       olsr_start_timer(2 * MSEC_PER_SEC, 0, NULL, arp_event_timer_info);
index 1d8f1ae..8b421c1 100644 (file)
@@ -15,23 +15,23 @@ int olsr_if_setip(const char *dev __attribute__ ((unused)), union olsr_ip_addr *
 
 
 
-int olsr_os_init_iptunnel(void) {
+int os_iptunnel_init(void) {
   return -1;
 }
 
-void olsr_os_cleanup_iptunnel(void) {
+void os_iptunnel_cleanup(void) {
 }
 
-struct olsr_iptunnel_entry *olsr_os_add_ipip_tunnel(union olsr_ip_addr *target __attribute__ ((unused)),
+struct olsr_iptunnel_entry *os_iptunnel_add_ipip(union olsr_ip_addr *target __attribute__ ((unused)),
     bool transportV4 __attribute__ ((unused))) {
   return NULL;
 }
 
-void olsr_os_del_ipip_tunnel(struct olsr_iptunnel_entry *t __attribute__ ((unused))) {
+void os_iptunnel_del_ipip(struct olsr_iptunnel_entry *t __attribute__ ((unused))) {
   return;
 }
 
-bool olsr_if_isup(const char * dev __attribute__ ((unused))) {
+bool os_is_interface_up(const char * dev __attribute__ ((unused))) {
   return false;
 }
 
index 9240eee..08c628c 100644 (file)
@@ -374,7 +374,7 @@ getsocket(int bufspace, struct interface *ifp __attribute__ ((unused)))
 }
 
 int
-getsocket6(int bufspace, struct interface *ifp __attribute__ ((unused)))
+os_getsocket6(int bufspace, struct interface *ifp __attribute__ ((unused)))
 {
   struct sockaddr_in6 sin;
   int on;
@@ -562,7 +562,7 @@ static u_int16_t ip_id = 0;
 #endif /* SPOOF */
 
 ssize_t
-olsr_sendto(int s, const void *buf, size_t len, int flags __attribute__ ((unused)), const struct sockaddr *to, socklen_t tolen)
+os_sendto(int s, const void *buf, size_t len, int flags __attribute__ ((unused)), const struct sockaddr *to, socklen_t tolen)
 {
 #ifdef SPOOF
   /* IPv4 for now! */
@@ -655,7 +655,7 @@ olsr_sendto(int s, const void *buf, size_t len, int flags __attribute__ ((unused
  */
 
 ssize_t
-olsr_recvfrom(int s, void *buf, size_t len, int flags __attribute__ ((unused)), struct sockaddr *from, socklen_t * fromlen)
+os_recvfrom(int s, void *buf, size_t len, int flags __attribute__ ((unused)), struct sockaddr *from, socklen_t * fromlen)
 {
   struct msghdr mhdr;
   struct iovec iov;
@@ -730,7 +730,7 @@ olsr_recvfrom(int s, void *buf, size_t len, int flags __attribute__ ((unused)),
  */
 
 int
-olsr_select(int nfds, fd_set * readfds, fd_set * writefds, fd_set * exceptfds, struct timeval *timeout)
+os_select(int nfds, fd_set * readfds, fd_set * writefds, fd_set * exceptfds, struct timeval *timeout)
 {
   return select(nfds, readfds, writefds, exceptfds, timeout);
 }
index 46e169e..ed9188b 100644 (file)
@@ -180,8 +180,8 @@ add_interface(struct olsr_if_config *iface) {
 
   ifp = olsr_cookie_malloc(interface_mem_cookie);
 
-  ifp->olsr_socket = getsocket46(olsr_cnf->ip_version, BUFSPACE, ifp, false, olsr_cnf->olsr_port);
-  ifp->send_socket = getsocket46(olsr_cnf->ip_version, 0, ifp, true, olsr_cnf->olsr_port);
+  ifp->olsr_socket = os_getsocket46(olsr_cnf->ip_version, BUFSPACE, ifp, false, olsr_cnf->olsr_port);
+  ifp->send_socket = os_getsocket46(olsr_cnf->ip_version, 0, ifp, true, olsr_cnf->olsr_port);
   if (ifp->olsr_socket < 0 || ifp->send_socket < 0) {
     OLSR_ERROR(LOG_INTERFACE, "Could not initialize socket... exiting!\n\n");
     olsr_exit(EXIT_FAILURE);
@@ -200,8 +200,8 @@ add_interface(struct olsr_if_config *iface) {
   add_olsr_socket(ifp->olsr_socket, &olsr_input, NULL, NULL, SP_PR_READ);
   add_olsr_socket(ifp->send_socket, &olsr_input, NULL, NULL, SP_PR_READ);
 
-  os_set_olsr_socketoptions(ifp->olsr_socket);
-  os_set_olsr_socketoptions(ifp->send_socket);
+  os_socket_set_olsr_options(ifp->olsr_socket);
+  os_socket_set_olsr_options(ifp->send_socket);
 
   /*
    *Initialize packet sequencenumber as a random 16bit value
index 8d49ba4..308fa2a 100644 (file)
@@ -613,7 +613,7 @@ static int olsr_os_process_rt_entry(int af_family, const struct rt_entry *rt, bo
  * @return negative on error
  */
 int
-olsr_kernel_add_route(const struct rt_entry *rt, int ip_version)
+os_route_add_rtentry(const struct rt_entry *rt, int ip_version)
 {
   OLSR_INFO(LOG_ROUTING, "KERN: Adding %s\n", olsr_rtp_to_string(rt->rt_best));
   return olsr_os_process_rt_entry(ip_version, rt, true);
@@ -627,7 +627,7 @@ olsr_kernel_add_route(const struct rt_entry *rt, int ip_version)
  *@return negative on error
  */
 int
-olsr_kernel_del_route(const struct rt_entry *rt, int ip_version)
+os_route_del_rtentry(const struct rt_entry *rt, int ip_version)
 {
   OLSR_INFO(LOG_ROUTING, "KERN: Deleting %s\n", olsr_rt_to_string(rt));
   return olsr_os_process_rt_entry(ip_version, rt, false);
index 23cf7b3..064b8ca 100644 (file)
@@ -75,24 +75,24 @@ static bool store_iptunnel_state;
 static struct olsr_cookie_info *tunnel_cookie;
 static struct avl_tree tunnel_tree;
 
-int olsr_os_init_iptunnel(void) {
+int os_iptunnel_init(void) {
   const char *dev = olsr_cnf->ip_version == AF_INET ? DEV_IPV4_TUNNEL : DEV_IPV6_TUNNEL;
 
   tunnel_cookie = olsr_create_memcookie("iptunnel", sizeof(struct olsr_iptunnel_entry));
   avl_init(&tunnel_tree, avl_comp_default, false, NULL);
 
-  store_iptunnel_state = olsr_if_isup(dev);
+  store_iptunnel_state = os_is_interface_up(dev);
   if (store_iptunnel_state) {
     return 0;
   }
-  if (olsr_if_set_state(dev, true)) {
+  if (os_interface_set_state(dev, true)) {
     return -1;
   }
 
   return olsr_os_ifip(if_nametoindex(dev), &olsr_cnf->main_addr, true);
 }
 
-void olsr_os_cleanup_iptunnel(void) {
+void os_iptunnel_cleanup(void) {
   while (tunnel_tree.count > 0) {
     struct olsr_iptunnel_entry *t;
 
@@ -100,10 +100,10 @@ void olsr_os_cleanup_iptunnel(void) {
     t = avl_first_element(&tunnel_tree, t, node);
     t->usage = 1;
 
-    olsr_os_del_ipip_tunnel(t);
+    os_iptunnel_del_ipip(t);
   }
   if (!store_iptunnel_state) {
-    olsr_if_set_state(olsr_cnf->ip_version == AF_INET ? DEV_IPV4_TUNNEL : DEV_IPV6_TUNNEL, false);
+    os_interface_set_state(olsr_cnf->ip_version == AF_INET ? DEV_IPV4_TUNNEL : DEV_IPV6_TUNNEL, false);
   }
 
   olsr_cleanup_memcookie(tunnel_cookie);
@@ -209,7 +209,7 @@ static void generate_iptunnel_name(union olsr_ip_addr *target, char *name) {
  * @param transportV4 true if IPv4 traffic is used, false for IPv6 traffic
  * @return NULL if an error happened, pointer to olsr_iptunnel_entry otherwise
  */
-struct olsr_iptunnel_entry *olsr_os_add_ipip_tunnel(union olsr_ip_addr *target, bool transportV4 __attribute__ ((unused))) {
+struct olsr_iptunnel_entry *os_iptunnel_add_ipip(union olsr_ip_addr *target, bool transportV4 __attribute__ ((unused))) {
   struct olsr_iptunnel_entry *t;
 
   assert(olsr_cnf->ip_version == AF_INET6 || transportV4);
@@ -239,7 +239,7 @@ struct olsr_iptunnel_entry *olsr_os_add_ipip_tunnel(union olsr_ip_addr *target,
       return NULL;
     }
 
-    if (olsr_if_set_state(name, true)) {
+    if (os_interface_set_state(name, true)) {
       if (olsr_cnf->ip_version == AF_INET) {
         os_ip4_tunnel(name, NULL);
       }
@@ -285,7 +285,7 @@ static void internal_olsr_os_del_ipip_tunnel(struct olsr_iptunnel_entry *t, bool
     }
   }
 
-  olsr_if_set_state(t->if_name, false);
+  os_interface_set_state(t->if_name, false);
   if (olsr_cnf->ip_version == AF_INET) {
     os_ip4_tunnel(t->if_name, NULL);
   }
@@ -301,6 +301,6 @@ static void internal_olsr_os_del_ipip_tunnel(struct olsr_iptunnel_entry *t, bool
   }
 }
 
-void olsr_os_del_ipip_tunnel(struct olsr_iptunnel_entry *t) {
+void os_iptunnel_del_ipip(struct olsr_iptunnel_entry *t) {
   internal_olsr_os_del_ipip_tunnel(t, false);
 }
index 7508329..c3e13ad 100644 (file)
@@ -314,7 +314,7 @@ bind_socket_to_device(int sock, char *dev_name)
  *@return the FD of the socket or -1 on error.
  */
 int
-getsocket4(int bufspace, struct interface *ifp, bool bind_to_unicast, uint16_t port)
+os_getsocket4(int bufspace, struct interface *ifp, bool bind_to_unicast, uint16_t port)
 {
   struct sockaddr_in sin4;
   int on;
@@ -380,7 +380,7 @@ getsocket4(int bufspace, struct interface *ifp, bool bind_to_unicast, uint16_t p
     olsr_exit(EXIT_FAILURE);
   }
 
-  set_nonblocking(sock);
+  os_socket_set_nonblocking(sock);
   return sock;
 }
 
@@ -391,7 +391,7 @@ getsocket4(int bufspace, struct interface *ifp, bool bind_to_unicast, uint16_t p
  *@return the FD of the socket or -1 on error.
  */
 int
-getsocket6(int bufspace, struct interface *ifp, bool bind_to_unicast, uint16_t port)
+os_getsocket6(int bufspace, struct interface *ifp, bool bind_to_unicast, uint16_t port)
 {
   struct sockaddr_in6 sin6;
   int on;
@@ -480,12 +480,12 @@ getsocket6(int bufspace, struct interface *ifp, bool bind_to_unicast, uint16_t p
     olsr_exit(EXIT_FAILURE);
   }
 
-  set_nonblocking(sock);
+  os_socket_set_nonblocking(sock);
   return sock;
 }
 
 void
-os_set_olsr_socketoptions(int sock) {
+os_socket_set_olsr_options(int sock) {
   /* Set TOS */
   int data = IPTOS_PREC(olsr_cnf->tos);
   if (setsockopt(sock, SOL_SOCKET, SO_PRIORITY, (char *)&data, sizeof(data)) < 0) {
@@ -604,7 +604,7 @@ get_ipv6_address(char *ifname, struct sockaddr_in6 *saddr6, int addrtype6)
  * Wrapper for sendto(2)
  */
 ssize_t
-olsr_sendto(int s, const void *buf, size_t len, int flags, const union olsr_sockaddr *sockaddr)
+os_sendto(int s, const void *buf, size_t len, int flags, const union olsr_sockaddr *sockaddr)
 {
   return sendto(s, buf, len, flags, &sockaddr->std, sizeof(*sockaddr));
 }
@@ -614,7 +614,7 @@ olsr_sendto(int s, const void *buf, size_t len, int flags, const union olsr_sock
  */
 
 ssize_t
-olsr_recvfrom(int s, void *buf, size_t len, int flags,
+os_recvfrom(int s, void *buf, size_t len, int flags,
     union olsr_sockaddr *sockaddr, socklen_t *socklen)
 {
   return recvfrom(s, buf, len, flags, &sockaddr->std, socklen);
@@ -625,12 +625,12 @@ olsr_recvfrom(int s, void *buf, size_t len, int flags,
  */
 
 int
-olsr_select(int nfds, fd_set * readfds, fd_set * writefds, fd_set * exceptfds, struct timeval *timeout)
+os_select(int nfds, fd_set * readfds, fd_set * writefds, fd_set * exceptfds, struct timeval *timeout)
 {
   return select(nfds, readfds, writefds, exceptfds, timeout);
 }
 
-bool olsr_if_isup(const char * dev)
+bool os_is_interface_up(const char * dev)
 {
   struct ifreq ifr;
 
@@ -645,7 +645,7 @@ bool olsr_if_isup(const char * dev)
   return (ifr.ifr_flags & IFF_UP) != 0;
 }
 
-int olsr_if_set_state(const char *dev, bool up) {
+int os_interface_set_state(const char *dev, bool up) {
   int oldflags;
   struct ifreq ifr;
 
index b76520a..7bc8fbf 100644 (file)
@@ -75,7 +75,6 @@
 
 #ifdef WIN32
 int __stdcall SignalHandler(unsigned long signo);
-void DisableIcmpRedirects(void);
 #else
 static void signal_shutdown(int);
 #endif
@@ -199,6 +198,10 @@ main(int argc, char *argv[])
   if (olsr_sanity_check_cfg(olsr_cnf) < 0) {
     olsr_exit(EXIT_FAILURE);
   }
+
+  /* set global interface options */
+  os_init_global_ifoptions();
+
 #ifndef WIN32
   /* Check if user is root */
   if (geteuid()) {
@@ -206,8 +209,6 @@ main(int argc, char *argv[])
     exit(EXIT_FAILURE);
   }
 #else
-  DisableIcmpRedirects();
-
   if (WSAStartup(0x0202, &WsaData)) {
     fprintf(stderr, "Could not initialize WinSock.\n");
     olsr_exit(EXIT_FAILURE);
@@ -260,9 +261,6 @@ main(int argc, char *argv[])
   /* Initialize SPF */
   olsr_init_spf();
 
-  /* set global interface options */
-  os_init_global_ifoptions();
-
   /*
    * socket for ioctl calls
    */
@@ -277,7 +275,7 @@ main(int argc, char *argv[])
     OLSR_ERROR(LOG_MAIN, "rtnetlink socket: %s\n", strerror(errno));
     olsr_exit(EXIT_FAILURE);
   }
-  set_nonblocking(olsr_cnf->rtnl_s);
+  os_socket_set_nonblocking(olsr_cnf->rtnl_s);
 
   /* Create rule for RtTable to resolve route insertion problems*/
   if ( ( olsr_cnf->rt_table < 253) & ( olsr_cnf->rt_table > 0 ) ) {
index 2d1573e..dea03a1 100644 (file)
@@ -399,7 +399,7 @@ net_output(struct interface *ifp)
     tmp_ptf->function(ifp->netbuf.buff, &ifp->netbuf.pending);
   }
 
-  if (olsr_sendto(ifp->send_socket, ifp->netbuf.buff, ifp->netbuf.pending,
+  if (os_sendto(ifp->send_socket, ifp->netbuf.buff, ifp->netbuf.pending,
       MSG_DONTROUTE, &ifp->int_multicast) < 0) {
 #if !defined REMOVE_LOG_WARN
     const int save_errno = errno;
index c148bf4..4dbd97d 100644 (file)
@@ -151,7 +151,7 @@ olsr_process_changes(void)
     return;
 
   if (olsr_cnf->log_target_stderr && olsr_cnf->clear_screen && isatty(STDOUT_FILENO)) {
-    clear_console();
+    os_clear_console();
     printf("       *** %s (%s on %s) ***\n", olsrd_version, build_date, build_host);
   }
 
index ac9b02a..6662333 100644 (file)
@@ -49,6 +49,7 @@
 #include "olsr_protocol.h"
 #include "common/string.h"
 #include "olsr_time.h"
+#include "os_net.h"
 
 #include <unistd.h>
 #include <string.h>
index 1cac5db..bdea58a 100644 (file)
@@ -86,6 +86,9 @@ 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++) {
@@ -113,7 +116,6 @@ 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) {
@@ -138,6 +140,8 @@ olsr_log_cleanup(void)
     fflush(log_fileoutput);
     fclose(log_fileoutput);
   }
+
+  os_syslog_cleanup();
 }
 
 /**
@@ -305,6 +309,6 @@ olsr_log_syslog(enum log_severity severity, enum log_source source,
                 int prefixLength __attribute__ ((unused)))
 {
   if (olsr_cnf->log_event[severity][source]) {
-    olsr_print_syslog(severity, "%s\n", &buffer[timeLength]);
+    os_printf_syslog(severity, "%s\n", &buffer[timeLength]);
   }
 }
index 2314989..8ba14cb 100644 (file)
 #include "defs.h"
 #include "routing_table.h"
 
-int olsr_kernel_add_route(const struct rt_entry *, int);
+int os_route_add_rtentry(const struct rt_entry *, int);
 
-int olsr_kernel_del_route(const struct rt_entry *, int);
-
-#endif
+int os_route_del_rtentry(const struct rt_entry *, int);
 
 #if defined linux
  int rtnetlink_register_socket(int);
@@ -62,6 +60,7 @@ int olsr_kernel_del_route(const struct rt_entry *, int);
  int olsr_os_localhost_if(union olsr_ip_addr *ip, bool create);
  int olsr_os_ifip(int ifindex, union olsr_ip_addr *ip, bool create);
 #endif
+#endif
 
 /*
  * Local Variables:
index 15d1525..778c03e 100644 (file)
@@ -32,10 +32,10 @@ struct olsr_iptunnel_entry {
   int usage;
 };
 
-int olsr_os_init_iptunnel(void);
-void olsr_os_cleanup_iptunnel(void);
+int os_iptunnel_init(void);
+void os_iptunnel_cleanup(void);
 
-struct olsr_iptunnel_entry *olsr_os_add_ipip_tunnel(union olsr_ip_addr *target, bool transportV4);
-void olsr_os_del_ipip_tunnel(struct olsr_iptunnel_entry *);
+struct olsr_iptunnel_entry *os_iptunnel_add_ipip(union olsr_ip_addr *target, bool transportV4);
+void os_iptunnel_del_ipip(struct olsr_iptunnel_entry *);
 
 #endif /* KERNEL_TUNNEL_H_ */
index 9fea123..cf86c7f 100644 (file)
 
 #include "defs.h"
 
-void clear_console(void);
+void os_syslog_init(const char *ident);
+void os_syslog_cleanup(void);
 
-void olsr_open_syslog(const char *ident);
-
-void EXPORT(olsr_print_syslog) (int level, const char *format, ...) __attribute__ ((format(printf, 2, 3)));
+void os_clear_console(void);
+void os_printf_syslog (int level, const char *format, ...) __attribute__ ((format(printf, 2, 3)));
 
 
 #endif
index a7868f0..422c9ce 100644 (file)
 #include "interfaces.h"
 
 /* OS dependent functions socket functions */
-ssize_t olsr_sendto(int, const void *, size_t, int, const union olsr_sockaddr *);
-ssize_t olsr_recvfrom(int, void *, size_t, int, union olsr_sockaddr *, socklen_t *);
-int olsr_select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
+ssize_t EXPORT(os_sendto)(int, const void *, size_t, int, const union olsr_sockaddr *);
+ssize_t EXPORT(os_recvfrom)(int, void *, size_t, int, union olsr_sockaddr *, socklen_t *);
+int os_select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
 
-int EXPORT(getsocket4)(int, struct interface *, bool, uint16_t);
-int EXPORT(getsocket6)(int, struct interface *, bool, uint16_t);
+int EXPORT(os_getsocket4)(int, struct interface *, bool, uint16_t);
+int EXPORT(os_getsocket6)(int, struct interface *, bool, uint16_t);
 
-int EXPORT(set_nonblocking) (int fd);
+int EXPORT(os_socket_set_nonblocking) (int fd);
 
 /* OS dependent interface functions */
 void os_init_global_ifoptions(void);
@@ -76,29 +76,28 @@ void os_cleanup_interface(struct interface *);
 
 int chk_if_changed(struct olsr_if_config *);
 
-bool EXPORT(olsr_if_isup)(const char * dev);
-int EXPORT(olsr_if_set_state)(const char *dev, bool up);
+bool EXPORT(os_is_interface_up)(const char * dev);
+int EXPORT(os_interface_set_state)(const char *dev, bool up);
 
 #ifdef WIN32
-void CallSignalHandler(void);
 void ListInterfaces(void);
 #endif
 
-void os_set_olsr_socketoptions(int socket);
+void os_socket_set_olsr_options(int socket);
 
 int get_ipv6_address(char *, struct sockaddr_in6 *, int);
 
 /* helper function for getting a socket */
 static inline int
-getsocket46(int family, int bufferSize, struct interface *interf,
+os_getsocket46(int family, int bufferSize, struct interface *interf,
     bool bind_to_unicast, uint16_t port) {
   assert (family == AF_INET || family == AF_INET6);
 
   if (family == AF_INET) {
-    return getsocket4(bufferSize, interf, bind_to_unicast, port);
+    return os_getsocket4(bufferSize, interf, bind_to_unicast, port);
   }
   else {
-    return getsocket6(bufferSize, interf, bind_to_unicast, port);
+    return os_getsocket6(bufferSize, interf, bind_to_unicast, port);
   }
 }
 #endif
index 6f35dcf..3b28a38 100644 (file)
@@ -352,7 +352,7 @@ olsr_input(int fd, void *data __attribute__ ((unused)), unsigned int flags __att
     }
 
     fromlen = sizeof(from);
-    size = olsr_recvfrom(fd, inbuf, sizeof(inbuf), 0, &from, &fromlen);
+    size = os_recvfrom(fd, inbuf, sizeof(inbuf), 0, &from, &fromlen);
 
     if (size <= 0) {
       if (size < 0 && errno != EWOULDBLOCK) {
index 9b4788d..dad6f1a 100644 (file)
@@ -65,8 +65,8 @@ olsr_init_export_route(void)
   list_init_head(&chg_kernel_list);
   list_init_head(&del_kernel_list);
 
-  olsr_add_route_function = olsr_kernel_add_route;
-  olsr_del_route_function = olsr_kernel_del_route;
+  olsr_add_route_function = os_route_add_rtentry;
+  olsr_del_route_function = os_route_del_rtentry;
 }
 
 /**
index dadbbbc..1187d78 100644 (file)
@@ -320,7 +320,7 @@ poll_sockets(void)
 
   /* Running select on the FD set */
   do {
-    n = olsr_select(hfd, fdsets & SP_PR_READ ? &ibits : NULL, fdsets & SP_PR_WRITE ? &obits : NULL, NULL, &tvp);
+    n = os_select(hfd, fdsets & SP_PR_READ ? &ibits : NULL, fdsets & SP_PR_WRITE ? &obits : NULL, NULL, &tvp);
   } while (n == -1 && errno == EINTR);
 
   if (n == 0) {
@@ -408,7 +408,7 @@ handle_fds(uint32_t next_interval)
     }
 
     do {
-      n = olsr_select(hfd, fdsets & SP_IMM_READ ? &ibits : NULL, fdsets & SP_IMM_WRITE ? &obits : NULL, NULL, &tvp);
+      n = os_select(hfd, fdsets & SP_IMM_READ ? &ibits : NULL, fdsets & SP_IMM_WRITE ? &obits : NULL, NULL, &tvp);
     } while (n == -1 && errno == EINTR);
 
     if (n == 0) {               /* timeout! */
index 597f887..990a921 100644 (file)
@@ -256,11 +256,10 @@ chk_if_changed(struct olsr_if_config *iface)
   return if_changes;
 }
 
-static char basenamestr[32];
-static const char *if_basename(const char *name);
 static const char *
 if_basename(const char *name)
 {
+  static char basenamestr[32];
   const char *p = strchr(name, ':');
   if (NULL == p || p - name >= (int)(ARRAYSIZE(basenamestr) - 1)) {
     return name;
@@ -476,7 +475,7 @@ os_cleanup_interface(struct interface *ifp) {
 }
 
 int
-set_nonblocking(int fd)
+os_socket_set_nonblocking(int fd)
 {
   /* make the fd non-blocking */
   int socket_flags = fcntl(fd, F_GETFL);
index 42d7111..6bec108 100644 (file)
@@ -50,7 +50,7 @@
 #include <stdarg.h>
 
 void
-olsr_open_syslog(const char *ident)
+os_syslog_init(const char *ident)
 {
   openlog(ident, LOG_PID | LOG_ODELAY, LOG_DAEMON);
   setlogmask(LOG_UPTO(LOG_INFO));
@@ -58,9 +58,13 @@ olsr_open_syslog(const char *ident)
   return;
 }
 
+void
+os_syslog_cleanup(void) {
+  closelog();
+}
 
 void
-olsr_print_syslog(int level, const char *format, ...)
+os_printf_syslog(int level, const char *format, ...)
 {
 
   int linux_level;
@@ -93,7 +97,7 @@ olsr_print_syslog(int level, const char *format, ...)
 }
 
 void
-clear_console(void)
+os_clear_console(void)
 {
   static int len = -1;
   static char clear_buff[100];
diff --git a/src/win32/compat.h b/src/win32/compat.h
new file mode 100644 (file)
index 0000000..cca36e8
--- /dev/null
@@ -0,0 +1,13 @@
+/*
+ * win32_ifnet.h
+ *
+ *  Created on: Oct 11, 2010
+ *      Author: rogge
+ */
+
+#ifndef WIN32_IFNET_H_
+#define WIN32_IFNET_H_
+
+char *StrError(unsigned int ErrNo);
+
+#endif /* WIN32_IFNET_H_ */
index d154041..326a404 100644 (file)
@@ -46,8 +46,7 @@
 #include "interfaces.h"
 #include "parser.h"
 #include "defs.h"
-#include "net_os.h"
-#include "ifnet.h"
+#include "os_net.h"
 #include "scheduler.h"
 #include "olsr_time.h"
 #include "lq_packet.h"
@@ -124,23 +123,6 @@ int GetIntInfo(struct InterfaceInfo *Info, char *Name);
 
 #define MAX_INTERFACES 100
 
-int __stdcall SignalHandler(unsigned long Signal);
-
-static unsigned long __stdcall
-SignalHandlerWrapper(void *Dummy __attribute__ ((unused)))
-{
-  SignalHandler(0);
-  return 0;
-}
-
-void
-CallSignalHandler(void)
-{
-  unsigned long ThreadId;              /* Win9x compat */
-
-  CreateThread(NULL, 0, SignalHandlerWrapper, NULL, 0, &ThreadId);
-}
-
 static void
 MiniIndexToIntName(char *String, int MiniIndex)
 {
@@ -434,7 +416,7 @@ ListInterfaces(void)
 }
 
 int
-chk_if_changed(struct olsr_if_config *IntConf)
+chk_if_changed(struct olsr_if_config *olsr_if)
 {
   struct ipaddr_str buf;
   struct interface *Int;
@@ -448,10 +430,10 @@ chk_if_changed(struct olsr_if_config *IntConf)
     return 0;
   }
 
-  Int = IntConf->interf;
+  Int = olsr_if->interf;
 
-  if (GetIntInfo(&Info, IntConf->name) < 0) {
-    remove_interface(&IntConf->interf);
+  if (GetIntInfo(&Info, olsr_if->name) < 0) {
+    remove_interface(olsr_if->interf);
     return 1;
   }
 
@@ -520,12 +502,55 @@ chk_if_changed(struct olsr_if_config *IntConf)
   return Res;
 }
 
-struct interface *
-os_init_interface(struct olsr_if_config *IntConf)
+static int
+join_mcast(struct interface *Nic, int Sock)
+{
+  /* See linux/in6.h */
+  struct ipaddr_str buf;
+  struct ipv6_mreq McastReq;
+
+  McastReq.ipv6mr_multiaddr = Nic->int_multicast.v6.sin6_addr;
+  McastReq.ipv6mr_interface = Nic->if_index;
+
+  OLSR_DEBUG(LOG_NETWORKING, "Interface %s joining multicast %s...", Nic->int_name,
+             olsr_ip_to_string(&buf, (union olsr_ip_addr *)&Nic->int_multicast.v6.sin6_addr));
+  /* Send multicast */
+  if (setsockopt(Sock, IPPROTO_IPV6, IPV6_ADD_MEMBERSHIP, (char *)&McastReq, sizeof(struct ipv6_mreq))
+      < 0) {
+    OLSR_WARN(LOG_NETWORKING, "Join multicast: %s\n", strerror(errno));
+    return -1;
+  }
+
+  /* Old libc fix */
+#ifdef IPV6_JOIN_GROUP
+  /* Join reciever group */
+  if (setsockopt(Sock, IPPROTO_IPV6, IPV6_JOIN_GROUP, (char *)&McastReq, sizeof(struct ipv6_mreq))
+      < 0)
+#else
+  /* Join reciever group */
+  if (setsockopt(Sock, IPPROTO_IPV6, IPV6_ADD_MEMBERSHIP, (char *)&McastReq, sizeof(struct ipv6_mreq))
+      < 0)
+#endif
+  {
+    OLSR_WARN(LOG_NETWORKING, "Join multicast send: %s\n", strerror(errno));
+    return -1;
+  }
+
+
+  if (setsockopt(Sock, IPPROTO_IPV6, IPV6_MULTICAST_IF, (char *)&McastReq.ipv6mr_interface, sizeof(McastReq.ipv6mr_interface))
+      < 0) {
+    OLSR_WARN(LOG_NETWORKING, "Join multicast if: %s\n", strerror(errno));
+    return -1;
+  }
+
+  return 0;
+}
+
+int
+os_init_interface(struct interface *ifp, struct olsr_if_config *IntConf)
 {
   struct ipaddr_str buf;
   struct InterfaceInfo if_info;
-  struct interface *ifp;
   struct sockaddr_in *if_addr;
   size_t name_size;
 
@@ -537,8 +562,6 @@ os_init_interface(struct olsr_if_config *IntConf)
   if (GetIntInfo(&if_info, IntConf->name) < 0)
     return 0;
 
-  ifp = olsr_cookie_malloc(interface_mem_cookie);
-
 #if 0
   ifp->gen_properties = NULL;
 #endif
@@ -575,8 +598,17 @@ os_init_interface(struct olsr_if_config *IntConf)
 
   ifp->if_index = if_info.Index;
 
+  if (olsr_cnf->ip_version == AF_INET6) {
+    join_mcast(ifp, ifp->olsr_socket);
+    join_mcast(ifp, ifp->send_socket);
+  }
+
   OLSR_INFO(LOG_NETWORKING, "\tKernel index: %08x\n", ifp->if_index);
-  return ifp;
+  return 0;
+}
+
+void
+os_cleanup_interface(struct interface *ifp  __attribute__ ((unused))) {
 }
 
 /*
index 8b4d3de..b7520b1 100644 (file)
@@ -42,7 +42,7 @@
 #include <stdio.h>
 #include "net/route.h"
 
-#include "kernel_routes.h"
+#include "os_kernel_routes.h"
 #include "net_olsr.h"
 #include "ipcalc.h"
 #include "routing_table.h"
@@ -62,7 +62,7 @@ char *StrError(unsigned int ErrNo);
  * @return negative on error
  */
 int
-olsr_kernel_add_route(const struct rt_entry *rt, int ip_version)
+os_route_add_rtentry(const struct rt_entry *rt, int ip_version)
 {
   MIB_IPFORWARDROW Row;
   union olsr_ip_addr mask;
@@ -132,7 +132,7 @@ olsr_kernel_add_route(const struct rt_entry *rt, int ip_version)
  * @return negative on error
  */
 int
-olsr_kernel_del_route(const struct rt_entry *rt, int ip_version)
+os_route_del_rtentry(const struct rt_entry *rt, int ip_version)
 {
   MIB_IPFORWARDROW Row;
   union olsr_ip_addr mask;
index 96cf37d..1a2d2c7 100644 (file)
 #include "os_log.h"
 
 void
-olsr_open_syslog(const char *Id __attribute__ ((unused)))
+os_syslog_init(const char *Id __attribute__ ((unused)))
 {
 }
 
 void
-olsr_print_syslog(int Level __attribute__ ((unused)), const char *Format __attribute__ ((unused)),...)
+os_syslog_cleanup(void) {
+}
+
+void
+os_printf_syslog(int Level __attribute__ ((unused)), const char *Format __attribute__ ((unused)),...)
+{
+}
+
+void
+os_clear_console(void)
 {
+#if !defined WINCE
+  HANDLE Hand;
+  CONSOLE_SCREEN_BUFFER_INFO Info;
+  unsigned long Written;
+  static COORD Home = { 0, 0 };
+
+  Hand = GetStdHandle(STD_OUTPUT_HANDLE);
+
+  if (Hand == INVALID_HANDLE_VALUE)
+    return;
+
+  if (!GetConsoleScreenBufferInfo(Hand, &Info))
+    return;
+
+  if (!FillConsoleOutputCharacter(Hand, ' ', Info.dwSize.X * Info.dwSize.Y, Home, &Written))
+    return;
+
+  if (!FillConsoleOutputAttribute(Hand, Info.wAttributes, Info.dwSize.X * Info.dwSize.Y, Home, &Written))
+    return;
+
+  SetConsoleCursorPosition(Hand, Home);
+#endif
 }
 
 /*
diff --git a/src/win32/misc.c b/src/win32/misc.c
deleted file mode 100644 (file)
index b539e26..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-
-/*
- * The olsr.org Optimized Link-State Routing daemon(olsrd)
- * Copyright (c) 2004-2009, the olsr.org team - see HISTORY file
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in
- *   the documentation and/or other materials provided with the
- *   distribution.
- * * Neither the name of olsr.org, olsrd nor the names of its
- *   contributors may be used to endorse or promote products derived
- *   from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * Visit http://www.olsr.org for more information.
- *
- * If you find this software useful feel free to make a donation
- * to the project. For more information see the website or contact
- * the copyright holders.
- *
- */
-
-#include <windows.h>
-#undef interface
-
-#include "misc.h"
-#include "olsr_logging.h"
-
-void
-clear_console(void)
-{
-#if !defined WINCE
-  HANDLE Hand;
-  CONSOLE_SCREEN_BUFFER_INFO Info;
-  unsigned long Written;
-  static COORD Home = { 0, 0 };
-
-  Hand = GetStdHandle(STD_OUTPUT_HANDLE);
-
-  if (Hand == INVALID_HANDLE_VALUE)
-    return;
-
-  if (!GetConsoleScreenBufferInfo(Hand, &Info))
-    return;
-
-  if (!FillConsoleOutputCharacter(Hand, ' ', Info.dwSize.X * Info.dwSize.Y, Home, &Written))
-    return;
-
-  if (!FillConsoleOutputAttribute(Hand, Info.wAttributes, Info.dwSize.X * Info.dwSize.Y, Home, &Written))
-    return;
-
-  SetConsoleCursorPosition(Hand, Home);
-#endif
-}
-
-extern char *StrError(unsigned int ErrNo);
-
-int
-set_nonblocking(int fd)
-{
-  /* make the fd non-blocking */
-  unsigned long flags = 1;
-  if (ioctlsocket(fd, FIONBIO, &flags) != 0) {
-    OLSR_WARN(LOG_NETWORKING, "Cannot set the socket flags: %s", StrError(WSAGetLastError()));
-    return -1;
-  }
-  return 0;
-}
-
-/*
- * Local Variables:
- * c-basic-offset: 2
- * indent-tabs-mode: nil
- * End:
- */
index 19a9c0c..40d2ed3 100644 (file)
 #include <errno.h>
 
 #include "defs.h"
-#include "net_os.h"
+#include "os_net.h"
 #include "net_olsr.h"
 #include "ipcalc.h"
 #include "olsr_logging.h"
-
+#include "win32/compat.h"
 #if defined WINCE
 #define WIDE_STRING(s) L##s
 #else
 void WinSockPError(const char *Str);
 void PError(const char *);
 
-void DisableIcmpRedirects(void);
-int disable_ip_forwarding(int Ver);
+static void DisableIcmpRedirects(void);
 
+int
+os_socket_set_nonblocking(int fd)
+{
+  /* make the fd non-blocking */
+  unsigned long flags = 1;
+  if (ioctlsocket(fd, FIONBIO, &flags) != 0) {
+    OLSR_WARN(LOG_NETWORKING, "Cannot set the socket flags: %s", StrError(WSAGetLastError()));
+    return -1;
+  }
+  return 0;
+}
 
 int
-getsocket4(int bufspace, struct interface *ifp, bool bind_to_unicast, uint16_t port)
+os_getsocket4(int bufspace, struct interface *ifp, bool bind_to_unicast, uint16_t port)
 {
   struct sockaddr_in Addr;
   int On = 1;
@@ -134,7 +144,7 @@ getsocket4(int bufspace, struct interface *ifp, bool bind_to_unicast, uint16_t p
 }
 
 int
-getsocket6(int bufspace, struct interface *ifp, bool bind_to_unicast, uint16_t port)
+os_getsocket6(int bufspace, struct interface *ifp, bool bind_to_unicast, uint16_t port)
 {
   struct sockaddr_in6 Addr6;
   int On = 1;
@@ -184,86 +194,7 @@ getsocket6(int bufspace, struct interface *ifp, bool bind_to_unicast, uint16_t p
 }
 
 void
-os_set_olsr_socketoptions(int sock __attribute__ ((unused))) {
-}
-
-static OVERLAPPED RouterOver;
-
-int
-enable_ip_forwarding(int Ver)
-{
-  HMODULE Lib;
-  unsigned int __stdcall(*EnableRouterFunc) (HANDLE * Hand, OVERLAPPED * Over);
-  HANDLE Hand;
-
-  Ver = Ver;
-
-  Lib = LoadLibrary(WIDE_STRING("iphlpapi.dll"));
-
-  if (Lib == NULL)
-    return 0;
-
-  EnableRouterFunc = (unsigned int __stdcall(*)(HANDLE *, OVERLAPPED *))
-    GetProcAddress(Lib, WIDE_STRING("EnableRouter"));
-
-  if (EnableRouterFunc == NULL)
-    return 0;
-
-  memset(&RouterOver, 0, sizeof(OVERLAPPED));
-
-  RouterOver.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
-
-  if (RouterOver.hEvent == NULL) {
-    OLSR_WARN(LOG_NETWORKING, "CreateEvent()");
-    return -1;
-  }
-
-  if (EnableRouterFunc(&Hand, &RouterOver) != ERROR_IO_PENDING) {
-    OLSR_WARN(LOG_NETWORKING, "EnableRouter()");
-    return -1;
-  }
-
-  OLSR_DEBUG(LOG_NETWORKING, "Routing enabled.\n");
-
-  return 0;
-}
-
-int
-disable_ip_forwarding(int Ver)
-{
-  HMODULE Lib;
-  unsigned int __stdcall(*UnenableRouterFunc) (OVERLAPPED * Over, unsigned int *Count);
-  unsigned int Count;
-
-  Ver = Ver;
-
-  Lib = LoadLibrary(WIDE_STRING("iphlpapi.dll"));
-
-  if (Lib == NULL)
-    return 0;
-
-  UnenableRouterFunc = (unsigned int __stdcall(*)(OVERLAPPED *, unsigned int *))
-    GetProcAddress(Lib, WIDE_STRING("UnenableRouter"));
-
-  if (UnenableRouterFunc == NULL)
-    return 0;
-
-  if (UnenableRouterFunc(&RouterOver, &Count) != NO_ERROR) {
-    OLSR_WARN(LOG_NETWORKING, "UnenableRouter()");
-    return -1;
-  }
-
-  OLSR_DEBUG(LOG_NETWORKING, "Routing disabled, count = %u.\n", Count);
-
-  return 0;
-}
-
-int
-restore_settings(int Ver)
-{
-  disable_ip_forwarding(Ver);
-
-  return 0;
+os_socket_set_olsr_options(int sock __attribute__ ((unused))) {
 }
 
 static int
@@ -296,7 +227,7 @@ SetEnableRedirKey(unsigned long New)
 #endif
 }
 
-void
+static void
 DisableIcmpRedirects(void)
 {
   int Res;
@@ -324,58 +255,86 @@ DisableIcmpRedirects(void)
   exit(0);
 }
 
+static OVERLAPPED RouterOver;
 
-int
-join_mcast(struct interface *Nic, int Sock)
+void os_init_global_ifoptions(void)
 {
-  /* See linux/in6.h */
-  struct ipaddr_str buf;
-  struct ipv6_mreq McastReq;
-
-  McastReq.ipv6mr_multiaddr = Nic->int_multicast.v6.sin6_addr;
-  McastReq.ipv6mr_interface = Nic->if_index;
-
-  OLSR_DEBUG(LOG_NETWORKING, "Interface %s joining multicast %s...", Nic->int_name,
-             olsr_ip_to_string(&buf, (union olsr_ip_addr *)&Nic->int_multicast.v6.sin6_addr));
-  /* Send multicast */
-  if (setsockopt(Sock, IPPROTO_IPV6, IPV6_ADD_MEMBERSHIP, (char *)&McastReq, sizeof(struct ipv6_mreq))
-      < 0) {
-    OLSR_WARN(LOG_NETWORKING, "Join multicast: %s\n", strerror(errno));
-    return -1;
+  HMODULE Lib;
+  unsigned int __stdcall(*EnableRouterFunc) (HANDLE * Hand, OVERLAPPED * Over);
+  HANDLE Hand;
+
+  Lib = LoadLibrary(WIDE_STRING("iphlpapi.dll"));
+
+  if (Lib == NULL)
+    return;
+
+  EnableRouterFunc = (unsigned int __stdcall(*)(HANDLE *, OVERLAPPED *))
+    GetProcAddress(Lib, WIDE_STRING("EnableRouter"));
+
+  if (EnableRouterFunc == NULL)
+    return;
+
+  memset(&RouterOver, 0, sizeof(OVERLAPPED));
+
+  RouterOver.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
+
+  if (RouterOver.hEvent == NULL) {
+    OLSR_WARN(LOG_NETWORKING, "CreateEvent()");
+    return;
   }
 
-  /* Old libc fix */
-#ifdef IPV6_JOIN_GROUP
-  /* Join reciever group */
-  if (setsockopt(Sock, IPPROTO_IPV6, IPV6_JOIN_GROUP, (char *)&McastReq, sizeof(struct ipv6_mreq))
-      < 0)
-#else
-  /* Join reciever group */
-  if (setsockopt(Sock, IPPROTO_IPV6, IPV6_ADD_MEMBERSHIP, (char *)&McastReq, sizeof(struct ipv6_mreq))
-      < 0)
-#endif
-  {
-    OLSR_WARN(LOG_NETWORKING, "Join multicast send: %s\n", strerror(errno));
-    return -1;
+  if (EnableRouterFunc(&Hand, &RouterOver) != ERROR_IO_PENDING) {
+    OLSR_WARN(LOG_NETWORKING, "EnableRouter()");
+    return;
   }
 
+  OLSR_DEBUG(LOG_NETWORKING, "Routing enabled.\n");
+
+  DisableIcmpRedirects();
 
-  if (setsockopt(Sock, IPPROTO_IPV6, IPV6_MULTICAST_IF, (char *)&McastReq.ipv6mr_interface, sizeof(McastReq.ipv6mr_interface))
-      < 0) {
-    OLSR_WARN(LOG_NETWORKING, "Join multicast if: %s\n", strerror(errno));
+  return;
+}
+
+static int
+disable_ip_forwarding(void)
+{
+  HMODULE Lib;
+  unsigned int __stdcall(*UnenableRouterFunc) (OVERLAPPED * Over, unsigned int *Count);
+  unsigned int Count;
+
+  Lib = LoadLibrary(WIDE_STRING("iphlpapi.dll"));
+
+  if (Lib == NULL)
+    return 0;
+
+  UnenableRouterFunc = (unsigned int __stdcall(*)(OVERLAPPED *, unsigned int *))
+    GetProcAddress(Lib, WIDE_STRING("UnenableRouter"));
+
+  if (UnenableRouterFunc == NULL)
+    return 0;
+
+  if (UnenableRouterFunc(&RouterOver, &Count) != NO_ERROR) {
+    OLSR_WARN(LOG_NETWORKING, "UnenableRouter()");
     return -1;
   }
 
+  OLSR_DEBUG(LOG_NETWORKING, "Routing disabled, count = %u.\n", Count);
+
   return 0;
 }
 
+int os_cleanup_global_ifoptions(void) {
+  disable_ip_forwarding();
+
+  return 0;
+}
 
 /**
  * Wrapper for sendto(2)
  */
 
 ssize_t
-olsr_sendto(int s, const void *buf, size_t len, int flags, const union olsr_sockaddr *sock)
+os_sendto(int s, const void *buf, size_t len, int flags, const union olsr_sockaddr *sock)
 {
   return sendto(s, buf, len, flags, &sock->std, sizeof(*sock));
 }
@@ -386,7 +345,7 @@ olsr_sendto(int s, const void *buf, size_t len, int flags, const union olsr_sock
  */
 
 ssize_t
-olsr_recvfrom(int s, void *buf, size_t len, int flags __attribute__ ((unused)), union olsr_sockaddr *sock, socklen_t * fromlen)
+os_recvfrom(int s, void *buf, size_t len, int flags __attribute__ ((unused)), union olsr_sockaddr *sock, socklen_t * fromlen)
 {
   return recvfrom(s, buf, len, 0, &sock->std, fromlen);
 }
@@ -396,7 +355,7 @@ olsr_recvfrom(int s, void *buf, size_t len, int flags __attribute__ ((unused)),
  */
 
 int
-olsr_select(int nfds, fd_set * readfds, fd_set * writefds, fd_set * exceptfds, struct timeval *timeout)
+os_select(int nfds, fd_set * readfds, fd_set * writefds, fd_set * exceptfds, struct timeval *timeout)
 {
   return select(nfds, readfds, writefds, exceptfds, timeout);
 }