From Sven-Ola Tuecke: 106-fix-seqnocheck
authorHannes Gredler <hannes@gredler.at>
Fri, 21 Dec 2007 11:21:49 +0000 (12:21 +0100)
committerHannes Gredler <hannes@gredler.at>
Fri, 21 Dec 2007 11:21:49 +0000 (12:21 +0100)
src/duplicate_set.c
src/duplicate_set.h
src/tc_set.c

index 4bd2883..6a9240c 100644 (file)
@@ -81,7 +81,7 @@ olsr_init_duplicate_table(void)
  *
  *@return positive on success
  */
-struct dup_entry *
+static struct dup_entry *
 olsr_add_dup_entry(const union olsr_ip_addr *originator, const olsr_u16_t seqno)
 {
   olsr_u32_t hash;
index f9d9afe..60dca28 100644 (file)
@@ -81,9 +81,6 @@ olsr_del_dup_entry(struct dup_entry *);
 void
 olsr_print_duplicate_table(void);
 
-struct dup_entry *
-olsr_add_dup_entry(const union olsr_ip_addr *, const olsr_u16_t);
-
 int
 olsr_update_dup_entry(const union olsr_ip_addr *, const olsr_u16_t, const union olsr_ip_addr *);
 
index f745bec..7916f67 100644 (file)
@@ -44,6 +44,7 @@
 #include "mid_set.h"
 #include "link_set.h"
 #include "olsr.h"
+#include "duplicate_set.h"
 #include "scheduler.h"
 #include "lq_route.h"
 #include "lq_avl.h"
@@ -732,11 +733,22 @@ olsr_input_tc(union olsr_message *msg, struct interface *input_if,
    * Check if we know this guy and if we already know what he has to say.
    */
   tc = olsr_lookup_tc_entry(&originator);
+#if 0
+  /* Sven-Ola: Looks like a bad idea. During olsrd startup, its seqno
+   * is initialized using random(). We have a good chance to wait for
+   * hours until TC messages are forwarded for a node if olsrd is re-
+   * started while there are still tc_entries in RAM.
+   */
   if (tc) {
     if (!SEQNO_GREATER_THAN(msg_seq, tc->msg_seq)) {
       return;
     }
   }
+#else
+  if(!olsr_check_dup_table_proc(&originator, msg_seq)) {
+      goto forward;
+  }
+#endif
 
   /* Check the sender address. */
   if (!olsr_validate_address(&originator)) {
@@ -803,6 +815,9 @@ olsr_input_tc(union olsr_message *msg, struct interface *input_if,
   /*
    * Last, flood the message to our other neighbors.
    */
+
+forward:
+
   olsr_forward_message(msg, &originator, msg_seq, input_if, from_addr);
   return;
 }