set rp_filter off for tunl0 device
authorMarkus Kittenberger <Markus.Kittenberger@gmx.at>
Sat, 9 Jan 2010 02:38:14 +0000 (03:38 +0100)
committerMarkus Kittenberger <Markus.Kittenberger@gmx.at>
Sat, 9 Jan 2010 02:38:14 +0000 (03:38 +0100)
src/linux/kernel_routes.c
src/main.c
src/olsr_cfg.h

index 8af431d..268f17c 100644 (file)
@@ -174,7 +174,7 @@ static void netlink_process_link(struct nlmsghdr *h)
       olsr_cnf->ipip_if_index = false;
       return;
     }
-    if (ifi->ifi_index==olsr_cnf->ipip_base_if_index) {
+    if (ifi->ifi_index==olsr_cnf->ipip_base_if.if_index) {
       /*we try to take it up again (if its only down it might workout)*/
       if (olsr_dev_up("tunl0",false)) return; //!!?? test this
       /*we disable -> this should stop us announcing being a smart gateway, and can not use tunnels as its unlikely to be able to crete them without tunl0*/
index 049b24c..1f30f84 100644 (file)
@@ -471,11 +471,16 @@ int main(int argc, char *argv[]) {
 
 #if LINUX_POLICY_ROUTING
   /*create smart-gateway-tunnel policy rules*/
+  //!!?? disable smartgateway if not ipv4?, or better: do not start olsr
   if (olsr_cnf->smart_gateway_active) {
     const char* tunlbase = "tunl0";
     //take up tunl0 device or disable smartgateway
     olsr_cnf->smart_gateway_active = olsr_dev_up(tunlbase,false);//!!?? kernel 2.4 may need true to function as gateway, does it harm to do anyway
-    olsr_cnf->ipip_base_if_index = if_nametoindex(tunlbase);
+    /*create an interface structure for the tunlbase to store procnet settings*/
+    /*hmmm integrate it into the olsr_interface list to ensure spoof setting clenaup at end!???*/
+    olsr_cnf->ipip_base_if.if_index = if_nametoindex(tunlbase);
+
+    deactivate_spoof(tunlbase, &olsr_cnf->ipip_base_if, AF_INET );//ipip is an ipv4 tunnel
 
     if (olsr_cnf->smart_gateway_active) {
       struct olsr_if *cfg_if;
@@ -724,6 +729,8 @@ static void olsr_shutdown(int signo __attribute__ ((unused)))
   if (olsr_cnf->rttable_backup_rule>0)
     olsr_netlink_rule(olsr_cnf->ip_version, olsr_cnf->rttable_default, RTM_DELRULE, olsr_cnf->rttable_backup_rule, NULL);
 
+  /*rp_filter*/
+  if (olsr_cnf->ipip_base_if.if_index) printf("resetting of tunl0 rp_filter not implemented");//!!?? no function extits to reset a single interface
 
   /* RtTable backup rule */
   if ((olsr_cnf->rttable < 253) & (olsr_cnf->rttable > 0)) {
index c4d88e5..22a9701 100644 (file)
@@ -256,7 +256,8 @@ struct olsrd_config {
   bool smart_gateway_active;
   uint32_t smart_gateway_uplink;
   uint32_t smart_gateway_downlink;
-  int ipip_if_index, ipip_base_if_index;
+  struct interface ipip_base_if;
+  int ipip_if_index;
   unsigned long int ipip_remote_address;
   const char *ipip_name;