Cleanup for smartgw initialization
authorHenning Rogge <hrogge@googlemail.com>
Tue, 9 Feb 2010 15:42:47 +0000 (16:42 +0100)
committerHenning Rogge <hrogge@googlemail.com>
Tue, 9 Feb 2010 15:42:47 +0000 (16:42 +0100)
src/gateway.c
src/gateway.h
src/kernel_tunnel.h
src/linux/kernel_routes_ioctl.c
src/linux/kernel_routes_nl.c
src/linux/kernel_tunnel.c
src/main.c

index 7794c22..4302fdf 100644 (file)
@@ -12,6 +12,7 @@
 #include "olsr_cfg.h"
 #include "olsr_cookie.h"
 #include "scheduler.h"
+#include "kernel_tunnel.h"
 #include "gateway_default_handler.h"
 #include "gateway.h"
 
@@ -66,7 +67,7 @@ serialize_gw_speed(uint32_t speed) {
 /**
  * Initialize gateway system
  */
-void
+int
 olsr_init_gateways(void) {
   uint8_t *ip;
   gw_mem_cookie = olsr_alloc_cookie("Gateway cookie", OLSR_COOKIE_TYPE_MEMORY);
@@ -96,11 +97,24 @@ olsr_init_gateways(void) {
     }
   }
 
+  if (olsr_os_init_iptunnel()) {
+    return 1;
+  }
   /*
    * initialize default gateway handler,
    * can be overwritten with olsr_set_inetgw_handler
    */
   olsr_gw_default_init();
+  return 0;
+}
+
+/**
+ * Cleanup gateway tunnel system
+ */
+void olsr_cleanup_gateways(void) {
+  // TODO: inet gw tunnel cleanup
+
+  olsr_os_cleanup_iptunnel();
 }
 
 /**
index 1d01e5a..da2e2f8 100644 (file)
@@ -60,7 +60,8 @@ AVLNODE2STRUCT(node2gateway, struct gateway_entry, node);
 
 extern struct avl_tree gateway_tree;
 
-void olsr_init_gateways(void);
+int olsr_init_gateways(void);
+void olsr_cleanup_gateways(void);
 void olsr_trigger_inetgw_startup(void);
 int olsr_trigger_inetgw_selection(bool ipv4, bool ipv6);
 
index fd3f313..125010b 100644 (file)
@@ -13,7 +13,7 @@
 
 #ifdef linux
 
-bool olsr_os_init_iptunnel(void);
+int olsr_os_init_iptunnel(void);
 void olsr_os_cleanup_iptunnel(void);
 
 int olsr_os_add_ipip_tunnel(const char *name, union olsr_ip_addr *target, bool transportV4);
index a38a532..e182920 100644 (file)
@@ -53,6 +53,9 @@
 /*
  * This file contains the old ioctl version of the linux routing code.
  * You will find the current netlink version in kernel_routes_nl.c
+ *
+ * You can deactivate this code (and activating the netlink one)
+ * by adding a -DLINUX_NETLINK_ROUTING to CPPFLAGS in make/Makefile.linux
  */
 #ifndef LINUX_NETLINK_ROUTING
 
index 38e8ef5..e56f035 100644 (file)
@@ -65,6 +65,9 @@
 /*
  * This file contains the rtnetlink version of the linux routing code.
  * You will find the old ioctl version in kernel_routes_ioctl.c
+ *
+ * You can deactivate this code (and activating the ioctl one)
+ * by removing the -DLINUX_NETLINK_ROUTING from make/Makefile.linux
  */
 #ifdef LINUX_NETLINK_ROUTING
 /*
index a03c8ff..a391089 100644 (file)
@@ -65,18 +65,18 @@ static const char DEV_IPV6_TUNNEL[IFNAMSIZ] = "ip6tnl0";
 
 static bool store_iptunnel_state;
 
-bool olsr_os_init_iptunnel(void) {
+int olsr_os_init_iptunnel(void) {
   const char *dev = olsr_cnf->ip_version == AF_INET ? DEV_IPV4_TUNNEL : DEV_IPV6_TUNNEL;
 
   store_iptunnel_state = olsr_if_isup(dev);
   if (store_iptunnel_state) {
-    return true;
+    return 0;
   }
-  return olsr_if_set_state(dev, true) == 0;
+  return olsr_if_set_state(dev, true);
 }
 
 void olsr_os_cleanup_iptunnel(void) {
-  if (store_iptunnel_state) {
+  if (!store_iptunnel_state) {
     olsr_if_set_state(olsr_cnf->ip_version == AF_INET ? DEV_IPV4_TUNNEL : DEV_IPV6_TUNNEL, false);
   }
 }
index 46fa080..4661409 100644 (file)
@@ -406,6 +406,13 @@ int main(int argc, char *argv[]) {
 #endif
 
 #ifdef LINUX_NETLINK_ROUTING
+  /* initialize gateway system */
+  if (olsr_cnf->smart_gw_active) {
+    if (olsr_init_gateways()) {
+      olsr_exit("Cannot initialize gateway tunnels", 1);
+    }
+  }
+
   /* initialize niit if index */
   if (olsr_cnf->use_niit) {
     olsr_init_niit();
@@ -517,7 +524,6 @@ deactivate_spoof("all", &olsr_cnf->ipip_base_if, AF_INET );
 #endif
 
 #ifdef LINUX_NETLINK_ROUTING
-  /*create smart-gateway-tunnel policy rules*/
   //!!?? disable smartgateway if not ipv4?, or better: do not start olsr
 #if 0
   if (olsr_cnf->smart_gw_active) {