[Olsr-cvs] olsrd-current/src build_msg.c, 1.31, 1.31.2.1 hysteresis.c, 1.16, 1.16.2.1 hysteresis.h, 1.7, 1.7.2.1 link_set.c, 1.62, 1.62.2.1 link_set.h, 1.28, 1.28.2.1 lq_route.c, 1.40, 1.40.2.1 mid_set.c, 1.15, 1.15.2.1 parser.c, 1.29, 1.29.2.1 process_routes.c, 1.27.2.1, 1.27.2.2 routing_table.c, 1.23, 1.23.2.1

Bernd Petrovitsch (spam-protected)
Thu Dec 14 12:25:31 CET 2006


Update of /cvsroot/olsrd/olsrd-current/src
In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv31920/src

Modified Files:
      Tag: olsrd_04
	build_msg.c hysteresis.c hysteresis.h link_set.c link_set.h 
	lq_route.c mid_set.c parser.c process_routes.c routing_table.c 
Log Message:
* applied patches from Sebastian Hagen <(spam-protected)>

Index: lq_route.c
===================================================================
RCS file: /cvsroot/olsrd/olsrd-current/src/lq_route.c,v
retrieving revision 1.40
retrieving revision 1.40.2.1
diff -C2 -d -r1.40 -r1.40.2.1
*** lq_route.c	29 Nov 2005 18:37:58 -0000	1.40
--- lq_route.c	14 Dec 2006 11:25:29 -0000	1.40.2.1
***************
*** 563,568 ****
      {
        // find the interface for the found link
! 
!       inter = if_ifwithaddr(&link->local_iface_addr);
  
        // we may see NULL here if the interface is down, but we have
--- 563,568 ----
      {
        // find the interface for the found link
!       inter = link->if_name ? if_ifwithname(link->if_name) : 
!               if_ifwithaddr(&link->local_iface_addr);
  
        // we may see NULL here if the interface is down, but we have

Index: hysteresis.h
===================================================================
RCS file: /cvsroot/olsrd/olsrd-current/src/hysteresis.h,v
retrieving revision 1.7
retrieving revision 1.7.2.1
diff -C2 -d -r1.7 -r1.7.2.1
*** hysteresis.h	6 Mar 2005 19:33:35 -0000	1.7
--- hysteresis.h	14 Dec 2006 11:25:29 -0000	1.7.2.1
***************
*** 61,65 ****
  
  void
! update_hysteresis_incoming(union olsr_ip_addr *, union olsr_ip_addr *, olsr_u16_t);
  
  #endif
--- 61,65 ----
  
  void
! update_hysteresis_incoming(union olsr_ip_addr *, struct interface *, olsr_u16_t);
  
  #endif

Index: mid_set.c
===================================================================
RCS file: /cvsroot/olsrd/olsrd-current/src/mid_set.c,v
retrieving revision 1.15
retrieving revision 1.15.2.1
diff -C2 -d -r1.15 -r1.15.2.1
*** mid_set.c	29 May 2005 12:47:45 -0000	1.15
--- mid_set.c	14 Dec 2006 11:25:29 -0000	1.15.2.1
***************
*** 52,55 ****
--- 52,56 ----
  struct mid_address reverse_mid_set[HASHSIZE];
  
+ struct mid_entry *mid_lookup_entry_bymain(union olsr_ip_addr *adr);
  
  /**
***************
*** 205,208 ****
--- 206,212 ----
  {
    struct mid_address *adr;
+   struct neighbor_entry *ne_old, *ne_new;
+   struct mid_entry *me_old;
+   int ne_ref_rp_count;
  
    adr = olsr_malloc(sizeof(struct mid_address), "Insert MID alias");
***************
*** 214,217 ****
--- 218,243 ----
    adr->next_alias = NULL;
    
+   // If we have an entry for this alias in neighbortable, we better adjust it's
+   // main address, because otherwise a fatal inconsistency between
+   // neighbortable and link_set will be created by way of this mid entry.
+   ne_old = olsr_lookup_neighbor_table_alias(alias);
+   if (ne_old != NULL) {
+      OLSR_PRINTF(2, "Remote main address change detected. Mangling neighbortable to replace %s with %s.\n", olsr_ip_to_string(alias), olsr_ip_to_string(main_add));
+      olsr_delete_neighbor_table(alias);
+      ne_new = olsr_insert_neighbor_table(main_add);
+      // adjust pointers to neighbortable-entry in link_set
+      ne_ref_rp_count = replace_neighbor_link_set(ne_old, ne_new);
+      if (ne_ref_rp_count > 0)
+         OLSR_PRINTF(2, "Performed %d neighbortable-pointer replacements (%p -> %p) in link_set.\n", ne_ref_rp_count, ne_old, ne_new);
+      
+      me_old = mid_lookup_entry_bymain(alias);
+      if (me_old) {
+         // we knew aliases to the previous main address; better forget about
+         // them now.
+         OLSR_PRINTF(2, "I already have an mid entry mapping addresses to this alias address. Removing existing mid entry to preserve consistency of mid_set.\n");
+         mid_delete_node(me_old);
+      }
+   }
+   
    insert_mid_tuple(main_add, adr, vtime);
    
***************
*** 256,270 ****
  
  
! 
! 
! /*
!  *Find all aliases for an address.
!  *
!  *@param adr the main address to search for
   *
!  *@return a linked list of addresses structs
   */
! struct mid_address *
! mid_lookup_aliases(union olsr_ip_addr *adr)
  {
    struct mid_entry *tmp_list;
--- 282,292 ----
  
  
! /* Find mid entry to an address.
!  * @param adr the main address to search for
   *
!  * @return a linked list of address structs
   */
! struct mid_entry *
! mid_lookup_entry_bymain(union olsr_ip_addr *adr)
  {
    struct mid_entry *tmp_list;
***************
*** 281,285 ****
      {
        if(COMP_IP(&tmp_list->main_addr, adr))
! 	return tmp_list->aliases;
      }
  
--- 303,307 ----
      {
        if(COMP_IP(&tmp_list->main_addr, adr))
! 	return tmp_list;
      }
  
***************
*** 289,292 ****
--- 311,329 ----
  
  
+ /*
+  *Find all aliases for an address.
+  *
+  *@param adr the main address to search for
+  *
+  *@return a linked list of addresses structs
+  */
+ inline struct mid_address *
+ mid_lookup_aliases(union olsr_ip_addr *adr)
+ {
+   struct mid_entry *tmp = mid_lookup_entry_bymain(adr);
+   return tmp ? tmp->aliases : NULL;
+ }
+ 
+ 
  /**
   *Update the timer for an entry

Index: hysteresis.c
===================================================================
RCS file: /cvsroot/olsrd/olsrd-current/src/hysteresis.c,v
retrieving revision 1.16
retrieving revision 1.16.2.1
diff -C2 -d -r1.16 -r1.16.2.1
*** hysteresis.c	27 Feb 2005 10:43:38 -0000	1.16
--- hysteresis.c	14 Dec 2006 11:25:29 -0000	1.16.2.1
***************
*** 163,167 ****
  
  void
! update_hysteresis_incoming(union olsr_ip_addr *remote, union olsr_ip_addr *local, olsr_u16_t seqno)
  {
    struct link_entry *link;
--- 163,167 ----
  
  void
! update_hysteresis_incoming(union olsr_ip_addr *remote, struct interface *local, olsr_u16_t seqno)
  {
    struct link_entry *link;

Index: process_routes.c
===================================================================
RCS file: /cvsroot/olsrd/olsrd-current/src/process_routes.c,v
retrieving revision 1.27.2.1
retrieving revision 1.27.2.2
diff -C2 -d -r1.27.2.1 -r1.27.2.2
*** process_routes.c	1 Nov 2006 09:21:44 -0000	1.27.2.1
--- process_routes.c	14 Dec 2006 11:25:29 -0000	1.27.2.2
***************
*** 117,122 ****
  
  /**
!  *Create a list containing the entries in in_table
!  *that does not exist in from_table
   *
   *@param from_table the table to use
--- 117,122 ----
  
  /**
!  *Create a list containing the entries in from_table
!  *that do not exist in in_table
   *
   *@param from_table the table to use

Index: parser.c
===================================================================
RCS file: /cvsroot/olsrd/olsrd-current/src/parser.c,v
retrieving revision 1.29
retrieving revision 1.29.2.1
diff -C2 -d -r1.29 -r1.29.2.1
*** parser.c	19 Nov 2005 08:49:44 -0000	1.29
--- parser.c	14 Dec 2006 11:25:29 -0000	1.29.2.1
***************
*** 194,198 ****
  	  /* IPv4 */
  	  update_hysteresis_incoming(from_addr, 
! 				     &in_if->ip_addr,
  				     ntohs(olsr->olsr_seqno));
  	}
--- 194,198 ----
  	  /* IPv4 */
  	  update_hysteresis_incoming(from_addr, 
! 				     in_if,
  				     ntohs(olsr->olsr_seqno));
  	}
***************
*** 201,205 ****
  	  /* IPv6 */
  	  update_hysteresis_incoming(from_addr, 
! 				     &in_if->ip_addr, 
  				     ntohs(olsr->olsr_seqno));
  	}
--- 201,205 ----
  	  /* IPv6 */
  	  update_hysteresis_incoming(from_addr, 
! 				     in_if, 
  				     ntohs(olsr->olsr_seqno));
  	}
***************
*** 208,212 ****
    if (olsr_cnf->lq_level > 0)
      {
!       olsr_update_packet_loss(from_addr, &in_if->ip_addr,
                                ntohs(olsr->olsr_seqno));
      }
--- 208,212 ----
    if (olsr_cnf->lq_level > 0)
      {
!       olsr_update_packet_loss(from_addr, in_if,
                                ntohs(olsr->olsr_seqno));
      }

Index: build_msg.c
===================================================================
RCS file: /cvsroot/olsrd/olsrd-current/src/build_msg.c,v
retrieving revision 1.31
retrieving revision 1.31.2.1
diff -C2 -d -r1.31 -r1.31.2.1
*** build_msg.c	10 Nov 2005 19:35:12 -0000	1.31
--- build_msg.c	14 Dec 2006 11:25:28 -0000	1.31.2.1
***************
*** 902,906 ****
  
    //printf("Sending MID (%d bytes)...\n", outputsize);
!   net_outbuffer_push(ifp, msg_buffer, curr_size);
  
  
--- 902,907 ----
  
    //printf("Sending MID (%d bytes)...\n", outputsize);
!   if(curr_size > OLSR_MID_IPV4_HDRSIZE)
!     net_outbuffer_push(ifp, msg_buffer, curr_size);
  
  
***************
*** 999,1003 ****
  
    //printf("Sending MID (%d bytes)...\n", outputsize);
!   net_outbuffer_push(ifp, msg_buffer, curr_size);
  
    return OLSR_TRUE;
--- 1000,1005 ----
  
    //printf("Sending MID (%d bytes)...\n", outputsize);
!   if(curr_size > OLSR_MID_IPV6_HDRSIZE)
!     net_outbuffer_push(ifp, msg_buffer, curr_size);
  
    return OLSR_TRUE;

Index: routing_table.c
===================================================================
RCS file: /cvsroot/olsrd/olsrd-current/src/routing_table.c,v
retrieving revision 1.23
retrieving revision 1.23.2.1
diff -C2 -d -r1.23 -r1.23.2.1
*** routing_table.c	16 Nov 2005 23:55:54 -0000	1.23
--- routing_table.c	14 Dec 2006 11:25:29 -0000	1.23.2.1
***************
*** 283,287 ****
  		  if(link)
  		    {
! 		      struct interface *iface = if_ifwithaddr(&link->local_iface_addr);
  		      if(iface)
  			{
--- 283,288 ----
  		  if(link)
  		    {
! 		      struct interface *iface = link->if_name ? if_ifwithname(link->if_name) :
! 		                                if_ifwithaddr(&link->local_iface_addr);
  		      if(iface)
  			{
***************
*** 397,401 ****
  		  if(link)
  		    {
! 		      struct interface *iface = if_ifwithaddr(&link->local_iface_addr);
  		      if(iface)
  			{
--- 398,403 ----
  		  if(link)
  		    {
! 		    struct interface *iface = link->if_name ? if_ifwithname(link->if_name) :
! 		                                if_ifwithaddr(&link->local_iface_addr);
  		      if(iface)
  			{

Index: link_set.c
===================================================================
RCS file: /cvsroot/olsrd/olsrd-current/src/link_set.c,v
retrieving revision 1.62
retrieving revision 1.62.2.1
diff -C2 -d -r1.62 -r1.62.2.1
*** link_set.c	17 Nov 2005 04:25:44 -0000	1.62
--- link_set.c	14 Dec 2006 11:25:29 -0000	1.62.2.1
***************
*** 70,74 ****
  
  static struct link_entry *
! add_new_entry(union olsr_ip_addr *, union olsr_ip_addr *, union olsr_ip_addr *, double, double);
  
  static void
--- 70,74 ----
  
  static struct link_entry *
! add_new_entry(union olsr_ip_addr *, union olsr_ip_addr *, union olsr_ip_addr *, double, double, struct interface *);
  
  static void
***************
*** 203,207 ****
        //printf("\tChecking %s->", olsr_ip_to_string(&ifs->ip_addr));
        //printf("%s : ", olsr_ip_to_string(main_addr)); 
!       if((link = lookup_link_entry(main_addr, &ifs->ip_addr)) != NULL)
  	{
  	  //printf("%d\n", lookup_link_status(link));
--- 203,207 ----
        //printf("\tChecking %s->", olsr_ip_to_string(&ifs->ip_addr));
        //printf("%s : ", olsr_ip_to_string(main_addr)); 
!       if((link = lookup_link_entry(main_addr, ifs)) != NULL)
  	{
  	  //printf("%d\n", lookup_link_status(link));
***************
*** 216,220 ****
  	  //printf("\tChecking %s->", olsr_ip_to_string(&ifs->ip_addr));
  	  //printf("%s : ", olsr_ip_to_string(&aliases->address)); 
! 	  if((link = lookup_link_entry(&aliases->alias, &ifs->ip_addr)) != NULL)
  	    {
  	      //printf("%d\n", lookup_link_status(link));
--- 216,220 ----
  	  //printf("\tChecking %s->", olsr_ip_to_string(&ifs->ip_addr));
  	  //printf("%s : ", olsr_ip_to_string(&aliases->address)); 
! 	  if((link = lookup_link_entry(&aliases->alias, ifs)) != NULL)
  	    {
  	      //printf("%d\n", lookup_link_status(link));
***************
*** 272,276 ****
        // find the interface for the link - we select the link with the
        // best local interface metric
!       tmp_if = if_ifwithaddr(&walker->local_iface_addr);
  
        if(!tmp_if)
--- 272,277 ----
        // find the interface for the link - we select the link with the
        // best local interface metric
!       tmp_if = walker->if_name ? if_ifwithname(walker->if_name) :
!               if_ifwithaddr(&walker->local_iface_addr);
  
        if(!tmp_if)
***************
*** 390,410 ****
   *@param vtime the validity time of the entry
   *@param htime the HELLO interval of the remote node
   */
  
  static struct link_entry *
! add_new_entry(union olsr_ip_addr *local, union olsr_ip_addr *remote, union olsr_ip_addr *remote_main, double vtime, double htime)
  {
    struct link_entry *tmp_link_set, *new_link;
    struct neighbor_entry *neighbor;
  
!   tmp_link_set = link_set;
! 
!   while(tmp_link_set)
!     {
!       if(COMP_IP(remote, &tmp_link_set->neighbor_iface_addr) &&
! 	 COMP_IP(local, &tmp_link_set->local_iface_addr))
! 	return tmp_link_set;
!       tmp_link_set = tmp_link_set->next;
!     }
  
    /*
--- 391,404 ----
   *@param vtime the validity time of the entry
   *@param htime the HELLO interval of the remote node
+  *@param local_if the local interface
   */
  
  static struct link_entry *
! add_new_entry(union olsr_ip_addr *local, union olsr_ip_addr *remote, union olsr_ip_addr *remote_main, double vtime, double htime, struct interface *local_if)
  {
    struct link_entry *tmp_link_set, *new_link;
    struct neighbor_entry *neighbor;
  
!   if((tmp_link_set = lookup_link_entry(remote, local_if))) return tmp_link_set;
  
    /*
***************
*** 422,425 ****
--- 416,428 ----
  
    memset(new_link, 0 , sizeof(struct link_entry));
+   
+   /* copy if_name, if it is defined */
+   if (local_if->int_name)
+     {
+       new_link->if_name = olsr_malloc(strlen(local_if->int_name)+1, "target of if_name in new link entry");
+       strcpy(new_link->if_name, local_if->int_name);
+     } else 
+       new_link->if_name = NULL;
+ 
    /*
     * L_local_iface_addr = Address of the interface
***************
*** 560,564 ****
   */
  struct link_entry *
! lookup_link_entry(union olsr_ip_addr *remote, union olsr_ip_addr *local)
  {
    struct link_entry *tmp_link_set;
--- 563,567 ----
   */
  struct link_entry *
! lookup_link_entry(union olsr_ip_addr *remote, struct interface *local)
  {
    struct link_entry *tmp_link_set;
***************
*** 569,573 ****
      {
        if(COMP_IP(remote, &tmp_link_set->neighbor_iface_addr) &&
! 	 COMP_IP(local, &tmp_link_set->local_iface_addr))
  	return tmp_link_set;
        tmp_link_set = tmp_link_set->next;
--- 572,579 ----
      {
        if(COMP_IP(remote, &tmp_link_set->neighbor_iface_addr) &&
! 	 (tmp_link_set->if_name ?
! 	  !strcmp(tmp_link_set->if_name, local->int_name) :
! 	  COMP_IP(&local->ip_addr, &tmp_link_set->local_iface_addr)
! 	 ))
  	return tmp_link_set;
        tmp_link_set = tmp_link_set->next;
***************
*** 605,609 ****
  
    /* Add if not registered */
!   entry = add_new_entry(local, remote, &message->source_addr, message->vtime, message->htime);
  
    /* Update ASYM_time */
--- 611,615 ----
  
    /* Add if not registered */
!   entry = add_new_entry(local, remote, &message->source_addr, message->vtime, message->htime, in_if);
  
    /* Update ASYM_time */
***************
*** 765,769 ****
  	      //olsr_delete_neighbor_if_no_link(&tmp_link_set->neighbor->neighbor_main_addr);
  	      changes_neighborhood = OLSR_TRUE;
! 
  	      free(tmp_link_set);
  	      tmp_link_set = last_link_entry;
--- 771,775 ----
  	      //olsr_delete_neighbor_if_no_link(&tmp_link_set->neighbor->neighbor_main_addr);
  	      changes_neighborhood = OLSR_TRUE;
! 	      free(tmp_link_set->if_name);
  	      free(tmp_link_set);
  	      tmp_link_set = last_link_entry;
***************
*** 781,784 ****
--- 787,791 ----
  	      changes_neighborhood = OLSR_TRUE;
  
+ 	      free(tmp_link_set->if_name);
  	      free(tmp_link_set);
  	      tmp_link_set = link_set;
***************
*** 995,999 ****
  }
  
! void olsr_update_packet_loss(union olsr_ip_addr *rem, union olsr_ip_addr *loc,
                               olsr_u16_t seqno)
  {
--- 1002,1006 ----
  }
  
! void olsr_update_packet_loss(union olsr_ip_addr *rem, struct interface *loc,
                               olsr_u16_t seqno)
  {

Index: link_set.h
===================================================================
RCS file: /cvsroot/olsrd/olsrd-current/src/link_set.h,v
retrieving revision 1.28
retrieving revision 1.28.2.1
diff -C2 -d -r1.28 -r1.28.2.1
*** link_set.h	23 Oct 2005 20:58:14 -0000	1.28
--- link_set.h	14 Dec 2006 11:25:29 -0000	1.28.2.1
***************
*** 56,59 ****
--- 56,60 ----
    union olsr_ip_addr local_iface_addr;
    union olsr_ip_addr neighbor_iface_addr;
+   char *if_name;
    clock_t SYM_time;
    clock_t ASYM_time;
***************
*** 121,125 ****
  
  struct link_entry *
! lookup_link_entry(union olsr_ip_addr *, union olsr_ip_addr *);
  
  struct link_entry *
--- 122,126 ----
  
  struct link_entry *
! lookup_link_entry(union olsr_ip_addr *, struct interface *);
  
  struct link_entry *
***************
*** 140,144 ****
  
  void 
! olsr_update_packet_loss(union olsr_ip_addr *, union olsr_ip_addr *, olsr_u16_t);
  
  void 
--- 141,145 ----
  
  void 
! olsr_update_packet_loss(union olsr_ip_addr *, struct interface *, olsr_u16_t);
  
  void 





More information about the Olsr-cvs mailing list