Merge branch 'stable' of http://olsr.org/git/olsrd into stable
authorMarkus Kittenberger <Markus.Kittenberger@gmx.at>
Wed, 16 Dec 2009 23:07:19 +0000 (00:07 +0100)
committerMarkus Kittenberger <Markus.Kittenberger@gmx.at>
Wed, 16 Dec 2009 23:07:19 +0000 (00:07 +0100)
src/mid_set.c
src/mid_set.h

index 761ee4a..eee53b0 100644 (file)
@@ -399,9 +399,11 @@ olsr_update_mid_table(const union olsr_ip_addr *adr, olsr_reltime vtime)
  * @param declared_aliases the list of declared aliases for the MID entry
  * @return nada
  */
-void
-olsr_prune_aliases(const union olsr_ip_addr *m_addr, struct mid_alias *declared_aliases)
+static void
+olsr_prune_aliases(struct mid_message *message)
 {
+  const union olsr_ip_addr *m_addr = &message->mid_origaddr;
+  struct mid_alias * declared_aliases = message->mid_addr;
   struct mid_entry *entry;
   uint32_t hash;
   struct mid_address *registered_aliases;
@@ -434,6 +436,12 @@ olsr_prune_aliases(const union olsr_ip_addr *m_addr, struct mid_alias *declared_
       declared_aliases = declared_aliases->next;
     }
 
+    if (declared_aliases == NULL) {
+      /*do not remove alias if vtime still valid (so we assigned something != NULL to declared_aliases)*/
+      if (!olsr_isTimedOut(current_alias->vtime)) declared_aliases = save_declared_aliases;
+    }
+    else current_alias->vtime=olsr_getTimestamp(message->vtime);
+
     if (declared_aliases == NULL) {
       struct ipaddr_str buf;
       /* Current alias not found in list of declared aliases: free current alias */
@@ -585,7 +593,7 @@ olsr_input_mid(union olsr_message *m, struct interface *in_if __attribute__ ((un
     tmp_adr = tmp_adr->next;
   }
 
-  olsr_prune_aliases(&message.mid_origaddr, message.mid_addr);
+  olsr_prune_aliases(&message);
   olsr_free_mid_packet(&message);
 
   /* Forward the message */
index 37842dd..074b0a0 100644 (file)
@@ -50,6 +50,7 @@ struct mid_address {
   union olsr_ip_addr alias;
   struct mid_entry *main_entry;
   struct mid_address *next_alias;
+  uint32_t vtime;
 
   /* These are for the reverse list */
   struct mid_address *prev;
@@ -81,7 +82,6 @@ union olsr_ip_addr *mid_lookup_main_addr(const union olsr_ip_addr *);
 struct mid_address *mid_lookup_aliases(const union olsr_ip_addr *);
 struct mid_entry *mid_lookup_entry_bymain(const union olsr_ip_addr *);
 void olsr_print_mid_set(void);
-void olsr_prune_aliases(const union olsr_ip_addr *, struct mid_alias *);
 int olsr_update_mid_table(const union olsr_ip_addr *, olsr_reltime);
 void olsr_delete_mid_entry(struct mid_entry *);
 bool olsr_input_mid(union olsr_message *, struct interface *, union olsr_ip_addr *);