Prevent some IPv4 interface code running on IPv6 only systems
authorHenning Rogge <hrogge@googlemail.com>
Sun, 5 Sep 2010 08:08:05 +0000 (10:08 +0200)
committerHenning Rogge <hrogge@googlemail.com>
Sun, 5 Sep 2010 08:08:05 +0000 (10:08 +0200)
src/linux/net.c
src/plugin_util.h

index 5283f3a..c676437 100644 (file)
 static char orig_fwd_state;
 static char orig_global_redirect_state;
 static char orig_global_rp_filter;
-static char orig_tunnel_rp_filter, orig_tunnel6_rp_filter;
+static char orig_tunnel_rp_filter;
+#if 0 // should not be necessary for IPv6 */
+static char orig_tunnel6_rp_filter;
+#endif
 
 /**
  *Bind a socket to a device
@@ -181,14 +184,17 @@ net_os_set_global_ifoptions(void) {
     char procfile[FILENAME_MAX];
 
     /* Generate the procfile name */
-    snprintf(procfile, sizeof(procfile), PROC_IF_SPOOF, TUNNEL_ENDPOINT_IF);
-    if (writeToProc(procfile, &orig_tunnel_rp_filter, '0')) {
-      OLSR_PRINTF(0, "WARNING! Could not disable the IP spoof filter for tunnel!\n"
-          "you should mannually ensure that IP spoof filtering is disabled!\n\n");
+    if (olsr_cnf->ip_version == AF_INET || olsr_cnf->use_niit) {
+      snprintf(procfile, sizeof(procfile), PROC_IF_SPOOF, TUNNEL_ENDPOINT_IF);
+      if (writeToProc(procfile, &orig_tunnel_rp_filter, '0')) {
+        OLSR_PRINTF(0, "WARNING! Could not disable the IP spoof filter for tunnel!\n"
+            "you should mannually ensure that IP spoof filtering is disabled!\n\n");
 
-      olsr_startup_sleep(3);
+        olsr_startup_sleep(3);
+      }
     }
 
+#if 0 // should not be necessary for IPv6
     if (olsr_cnf->ip_version == AF_INET6) {
       snprintf(procfile, sizeof(procfile), PROC_IF_SPOOF, TUNNEL_ENDPOINT_IF6);
       if (writeToProc(procfile, &orig_tunnel6_rp_filter, '0')) {
@@ -198,6 +204,7 @@ net_os_set_global_ifoptions(void) {
         olsr_startup_sleep(3);
       }
     }
+#endif
   }
 
   if (olsr_cnf->ip_version == AF_INET) {
@@ -271,19 +278,21 @@ net_os_restore_ifoptions(void)
     OLSR_PRINTF(1, "Error, could not restore ip_forward settings\n");
   }
 
-  if (olsr_cnf->smart_gw_active) {
+  if (olsr_cnf->smart_gw_active && (olsr_cnf->ip_version == AF_INET || olsr_cnf->use_niit)) {
     /* Generate the procfile name */
     snprintf(procfile, sizeof(procfile), PROC_IF_SPOOF, TUNNEL_ENDPOINT_IF);
     if (writeToProc(procfile, NULL, orig_tunnel_rp_filter)) {
       OLSR_PRINTF(0, "WARNING! Could not restore the IP spoof filter for tunnel!\n");
     }
 
+#if 0 // should not be necessary for IPv6
     if (olsr_cnf->ip_version == AF_INET6) {
       snprintf(procfile, sizeof(procfile), PROC_IF_SPOOF, TUNNEL_ENDPOINT_IF6);
       if (writeToProc(procfile, NULL, orig_tunnel6_rp_filter)) {
         OLSR_PRINTF(0, "WARNING! Could not restore the IP spoof filter for tunnel6!\n");
       }
     }
+#endif
   }
 
   if (olsr_cnf->ip_version == AF_INET) {
index b73ab64..d828842 100644 (file)
 #include "olsrd_plugin.h"
 
 /* Common/utility functions for plugins */
-set_plugin_parameter set_plugin_port;
-set_plugin_parameter set_plugin_ipaddress;
-set_plugin_parameter set_plugin_boolean;
-set_plugin_parameter set_plugin_int;
-set_plugin_parameter set_plugin_string;
+extern set_plugin_parameter set_plugin_port;
+extern set_plugin_parameter set_plugin_ipaddress;
+extern set_plugin_parameter set_plugin_boolean;
+extern set_plugin_parameter set_plugin_int;
+extern set_plugin_parameter set_plugin_string;
 
 #endif