Port from stable: b9aa2d213a7020fd6153c426bc55b77eaf0dd35b
authorHenning Rogge <hrogge@googlemail.com>
Sun, 28 Mar 2010 11:05:08 +0000 (13:05 +0200)
committerHenning Rogge <hrogge@googlemail.com>
Sun, 28 Mar 2010 11:05:08 +0000 (13:05 +0200)
Prevent originator IP from changing during runtime

src/interfaces.c
src/olsr_cfg.c
src/olsr_cfg.h
src/unix/ifnet.c
src/win32/ifnet.c

index a9dc60f..2626e42 100644 (file)
@@ -234,7 +234,6 @@ void
 remove_interface(struct interface **pinterf)
 {
   struct interface *ifp = *pinterf;
-  struct ipaddr_str buf;
 
   if (!ifp) {
     return;
@@ -255,21 +254,6 @@ remove_interface(struct interface **pinterf)
   /* Remove output buffer */
   net_remove_buffer(ifp);
 
-  /* Check main addr */
-  if (!olsr_cnf->fixed_origaddr && olsr_ipcmp(&olsr_cnf->router_id, &ifp->ip_addr) == 0) {
-    if (list_is_empty(&interface_head)) {
-      /* No more interfaces */
-      memset(&olsr_cnf->router_id, 0, olsr_cnf->ipsize);
-      OLSR_INFO(LOG_INTERFACE, "Removed last interface. Cleared main address.\n");
-    } else {
-
-      /* Grab the first interface in the list. */
-      olsr_cnf->router_id = list2interface(interface_head.next)->ip_addr;
-      olsr_ip_to_string(&buf, &olsr_cnf->router_id);
-      OLSR_INFO(LOG_INTERFACE, "New main address: %s\n", buf.buf);
-    }
-  }
-
   /*
    * Deregister functions for periodic message generation
    */
index 30a6f63..b29f4e8 100644 (file)
@@ -962,7 +962,6 @@ parse_cfg_option(const int optint, char *argstr, const int line, struct olsr_con
       sprintf(rmsg, "Failed converting IP address %s for originator address\n", argstr);
       return CFG_ERROR;
     }
-    rcfg->fixed_origaddr = true;
     break;
   case CFG_OLSRPORT:           /* port (i) */
     {
@@ -1551,7 +1550,6 @@ olsr_get_default_cfg(void)
   cfg->willingness_auto = DEF_WILL_AUTO;
   cfg->clear_screen = DEF_CLEAR_SCREEN;
   assert(cfg->del_gws == false);
-  assert(cfg->fixed_origaddr == false);
 
   cfg->tos = DEF_TOS;
   assert(cfg->rtproto == 0);
index a48ccdd..e10cdfe 100644 (file)
@@ -177,7 +177,6 @@ struct olsr_config {
   unsigned char willingness_auto:1;    /* Willingness in auto mode? */
   unsigned char clear_screen:1;        /* Clear screen during debug output? */
   unsigned char del_gws:1;             /* Delete InternetGWs at startup? */
-  unsigned char fixed_origaddr:1;      /* Use a fixed originator addr == Node ID? */
   unsigned char source_ip_mode:1;      /* Run OLSR routing in sourceip mode */
 
   uint16_t tos;                        /* IP Type of Service Byte */
index 25c15c8..267fe93 100644 (file)
@@ -217,12 +217,6 @@ chk_if_changed(struct olsr_if_config *iface)
                  "\tOld: %s\n\tNew: %s\n",
                  ifr.ifr_name, ip6_to_string(&buf, &ifp->int6_addr.sin6_addr), ip6_to_string(&buf, &tmp_saddr6.sin6_addr));
 
-      /* Check main addr */
-      if (!olsr_cnf->fixed_origaddr && ip6cmp(&olsr_cnf->router_id.v6, &tmp_saddr6.sin6_addr) != 0) {
-        /* Update main addr */
-        olsr_cnf->router_id.v6 = tmp_saddr6.sin6_addr;
-      }
-
       /* Update address */
       ifp->int6_addr.sin6_addr = tmp_saddr6.sin6_addr;
       ifp->ip_addr.v6 = tmp_saddr6.sin6_addr;
@@ -249,11 +243,6 @@ chk_if_changed(struct olsr_if_config *iface)
                  ifr.ifr_name, ip4_to_string(&buf, ifp->int_addr.sin_addr), ip4_to_string(&buf, tmp_saddr4->sin_addr));
 
       ifp->int_addr = *(struct sockaddr_in *)(ARM_NOWARN_ALIGN)&ifr.ifr_addr;
-      if (!olsr_cnf->fixed_origaddr && ip4cmp(&olsr_cnf->router_id.v4, &ifp->ip_addr.v4) == 0) {
-        OLSR_INFO(LOG_INTERFACE, "New main address: %s\n", ip4_to_string(&buf, tmp_saddr4->sin_addr));
-        olsr_cnf->router_id.v4 = tmp_saddr4->sin_addr;
-      }
-
       ifp->ip_addr.v4 = tmp_saddr4->sin_addr;
 
       if_changes = 1;
@@ -581,9 +570,9 @@ chk_if_up(struct olsr_if_config *iface)
   ifp->olsr_seqnum = random() & 0xFFFF;
 
   /*
-   * Set main address if this is the only interface
+   * Set main address if it's not set
    */
-  if (!olsr_cnf->fixed_origaddr && olsr_ipcmp(&all_zero, &olsr_cnf->router_id) == 0) {
+  if (olsr_ipcmp(&all_zero, &olsr_cnf->router_id) == 0) {
     olsr_cnf->router_id = ifp->ip_addr;
     OLSR_INFO(LOG_INTERFACE, "New main address: %s\n", olsr_ip_to_string(&buf, &olsr_cnf->router_id));
   }
index 0a1bbf3..ca1a457 100644 (file)
@@ -562,12 +562,6 @@ chk_if_changed(struct olsr_if_config *IntConf)
     AddrIn->sin_port = 0;
     AddrIn->sin_addr = NewVal.v4;
 
-    if (!olsr_cnf->fixed_origaddr && olsr_cnf->router_id.v4.s_addr == OldVal.v4.s_addr) {
-      OLSR_INFO(LOG_NETWORKING, "\tMain address change.\n");
-
-      olsr_cnf->router_id.v4 = NewVal.v4;
-    }
-
     Res = 1;
   }
 
@@ -724,7 +718,7 @@ chk_if_up(struct olsr_if_config *IntConf)
 
   memset(&NullAddr, 0, olsr_cnf->ipsize);
 
-  if (!olsr_cnf->fixed_origaddr && olsr_ipcmp(&NullAddr, &olsr_cnf->router_id) == 0) {
+  if (olsr_ipcmp(&NullAddr, &olsr_cnf->router_id) == 0) {
     olsr_cnf->router_id = New->ip_addr;
     OLSR_INFO(LOG_NETWORKING, "New main address: %s\n", olsr_ip_to_string(&buf, &olsr_cnf->router_id));
   }