brute force solution for #bug 16
authorMarkus Kittenberger <markus@markit.unassigned-domain>
Sun, 17 Oct 2010 17:29:10 +0000 (19:29 +0200)
committerMarkus Kittenberger <markus@markit.unassigned-domain>
Sun, 17 Oct 2010 17:29:10 +0000 (19:29 +0200)
src/interfaces.c
src/unix/ifnet.c

index abc8a44..999807f 100644 (file)
@@ -124,6 +124,7 @@ olsr_trigger_ifchange(int if_index, struct interface *ifp, enum olsr_ifchg_flag
   struct ifchgf *tmp_ifchgf_list = ifchgf_list;
 
   while (tmp_ifchgf_list != NULL) {
+printf("trigger ifchange");
     tmp_ifchgf_list->function(if_index, ifp, flag);
     tmp_ifchgf_list = tmp_ifchgf_list->next;
   }
index ede40b9..3ce9718 100644 (file)
@@ -268,6 +268,8 @@ chk_if_changed(struct olsr_if *iface)
 
       olsr_trigger_ifchange(ifp->if_index, ifp, IFCHG_IF_UPDATE);
 
+      /*the interface sockets should be recreated (to use new source adress) !?*/
+
       return 1;
     }
     return 0;
@@ -304,7 +306,10 @@ chk_if_changed(struct olsr_if *iface)
 #endif
       memcpy(&ifp->ip_addr, &((struct sockaddr_in *)ARM_NOWARN_ALIGN(&ifr.ifr_addr))->sin_addr.s_addr, olsr_cnf->ipsize);
 
-      if_changes = 1;
+      /* we have to make sure that olsrd uses the new source address */
+        olsr_remove_interface(iface); /* so we remove the interface completely */
+        chk_if_up(iface,3); /* and create it again to get new sockets,..*/
+        return 0;
     }
 
     /* Check netmask */