Backport of c6a72041bae3 (Fix logic but in forwarding sequence duplicate check)
authorSven-Ola Tuecke <sven-ola@gmx.de>
Sat, 22 Nov 2008 09:52:53 +0000 (10:52 +0100)
committerSven-Ola Tuecke <sven-ola@gmx.de>
Sat, 22 Nov 2008 09:52:53 +0000 (10:52 +0100)
src/duplicate_set.c
src/duplicate_set.h
src/olsr.c
src/parser.c

index b77cac5..dc2ae41 100644 (file)
@@ -99,7 +99,7 @@ olsr_cleanup_duplicate_entry (void __attribute__ ((unused)) * unused)
 }
 
 int
-olsr_message_is_duplicate (void *ip, olsr_u16_t seqnr, olsr_bool forwarding)
+olsr_message_is_duplicate (union olsr_message *m, olsr_bool forwarding)
 {
   struct dup_entry *entry;
   int diff;
@@ -107,6 +107,19 @@ olsr_message_is_duplicate (void *ip, olsr_u16_t seqnr, olsr_bool forwarding)
   clock_t valid_until;
   u_int32_t *array;
   struct ipaddr_str buf;
+  u_int16_t seqnr;
+  void *ip;
+
+  if (olsr_cnf->ip_version == AF_INET)
+    {
+      seqnr = ntohs (m->v4.seqno);
+      ip = &m->v4.originator;
+    }
+  else
+    {
+      seqnr = ntohs (m->v6.seqno);
+      ip = &m->v6.originator;
+    }
 
   // get main address
   mainIp = mid_lookup_main_addr (ip);
index 3a9115f..59f5ae9 100644 (file)
@@ -64,8 +64,7 @@ AVLNODE2STRUCT (duptree2dupentry, struct dup_entry, avl);
 
 void olsr_init_duplicate_set (void);
 struct dup_entry *olsr_create_duplicate_entry (void *ip, olsr_u16_t seqnr);
-int olsr_message_is_duplicate (void *ip, olsr_u16_t seqnr,
-                               olsr_bool forwarding);
+int olsr_message_is_duplicate (union olsr_message *m, olsr_bool forwarding);
 void olsr_print_duplicate_table (void);
 
 #define OLSR_FOR_ALL_DUP_ENTRIES(dup) \
index 60450f6..aa5926d 100644 (file)
@@ -298,8 +298,6 @@ olsr_init_tables (void)
  *it if necessary.
  *
  *@param m the OLSR message recieved
- *@param originator the originator of this message
- *@param seqno the seqno of the message
  *
  *@returns positive if forwarded
  */
@@ -351,21 +349,9 @@ olsr_forward_message (union olsr_message *m, union olsr_ip_addr *from_addr)
     }
 
   /* check if we already forwarded this message */
-  if (AF_INET == olsr_cnf->ip_version)
-    {
-      if (olsr_message_is_duplicate
-          (from_addr, ntohs (m->v4.seqno), OLSR_TRUE))
-        {
-          return 0;             /* it's a duplicate, forget about it */
-        }
-    }
-  else
+  if (olsr_message_is_duplicate (m, OLSR_TRUE))
     {
-      if (olsr_message_is_duplicate
-          (from_addr, ntohs (m->v6.seqno), OLSR_TRUE))
-        {
-          return 0;             /* it's a duplicate, forget about it */
-        }
+      return 0;                 /* it's a duplicate, forget about it */
     }
 
   /* Treat TTL hopcnt */
index 6617ff3..60dd2b7 100644 (file)
@@ -277,7 +277,6 @@ parse_packet (struct olsr *olsr, int size, struct interface *in_if,
   int processed;
   struct parse_function_entry *entry;
   struct packetparser_function_entry *packetparser;
-  olsr_bool isDuplicate;
   int count = size - ((char *) m - (char *) olsr);
 
   if (count < MIN_PACKET_SIZE (olsr_cnf->ip_version))
@@ -429,25 +428,10 @@ parse_packet (struct olsr *olsr, int size, struct interface *in_if,
           continue;
         }
 
-      /* check for message duplicates */
-      isDuplicate = OLSR_FALSE;
-      if (olsr_cnf->ip_version == AF_INET)
-        {
-          /* IPv4 */
-          isDuplicate =
-            olsr_message_is_duplicate (&m->v4.originator, ntohs (m->v4.seqno),
-                                       OLSR_FALSE);
-        }
-      else
-        {
-          /* IPv6 */
-          isDuplicate =
-            olsr_message_is_duplicate (&m->v6.originator, ntohs (m->v6.seqno),
-                                       OLSR_FALSE);
-        }
-
       //printf("MESSAGETYPE: %d\n", m->v4.olsr_msgtype);
-      if (!isDuplicate)
+
+      /* check for message duplicates */
+      if (!olsr_message_is_duplicate (m, OLSR_FALSE))
         {
           processed = 0;
           for (entry = parse_functions; entry != NULL; entry = entry->next)