Added experimental LinkQualityFishEye configuration option, which enables
authorThomas Lopatic <thomas@lopatic.de>
Thu, 17 Nov 2005 01:58:52 +0000 (01:58 +0000)
committerThomas Lopatic <thomas@lopatic.de>
Thu, 17 Nov 2005 01:58:52 +0000 (01:58 +0000)
us to shrink LQ TC intervals without swamping the network with LQ TCs. Look
at create_lq_tc() in lq_packet.c.

src/cfgparser/olsrd_conf.c
src/cfgparser/oparse.y
src/cfgparser/oscan.lex
src/lq_packet.c
src/olsr_cfg.h
src/parser.c

index 1d162ce..0ed4187 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: olsrd_conf.c,v 1.44 2005/11/15 23:46:20 tlopatic Exp $
+ * $Id: olsrd_conf.c,v 1.45 2005/11/17 01:58:52 tlopatic Exp $
  */
 
 
@@ -452,6 +452,7 @@ set_default_cnf(struct olsrd_config *cnf)
     cnf->tc_redundancy = TC_REDUNDANCY;
     cnf->mpr_coverage = MPR_COVERAGE;
     cnf->lq_level = DEF_LQ_LEVEL;
+    cnf->lq_fish = DEF_LQ_FISH;
     cnf->lq_wsize = DEF_LQ_WSIZE;
     cnf->clear_screen = DEF_CLEAR_SCREEN;
 }
index 1a3665c..acc6967 100644 (file)
@@ -38,7 +38,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: oparse.y,v 1.26 2005/02/25 16:03:19 kattemat Exp $
+ * $Id: oparse.y,v 1.27 2005/11/17 01:58:52 tlopatic Exp $
  */
 
 
@@ -148,6 +148,7 @@ static int lq_mult_helper(YYSTYPE ip_addr_arg, YYSTYPE mult_arg)
 %token TOK_TCREDUNDANCY
 %token TOK_MPRCOVERAGE
 %token TOK_LQ_LEVEL
+%token TOK_LQ_FISH
 %token TOK_LQ_WSIZE
 %token TOK_LQ_MULT
 %token TOK_CLEAR_SCREEN
@@ -198,6 +199,7 @@ stmt:       idebug
           | atcredundancy
           | amprcoverage
           | alq_level
+          | alq_fish
           | alq_wsize
           | bclear_screen
           | vcomment
@@ -895,6 +897,14 @@ alq_level: TOK_LQ_LEVEL TOK_INTEGER
 }
 ;
 
+alq_fish: TOK_LQ_FISH TOK_INTEGER
+{
+  if(PARSER_DEBUG) printf("Link quality fish eye %d\n", $2->integer);
+  cnf->lq_fish = $2->integer;
+  free($2);
+}
+;
+
 alq_wsize: TOK_LQ_WSIZE TOK_INTEGER
 {
   if(PARSER_DEBUG) printf("Link quality window size %d\n", $2->integer);
index 016f501..d099bc8 100644 (file)
@@ -38,7 +38,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: oscan.lex,v 1.17 2005/02/20 19:54:18 kattemat Exp $
+ * $Id: oscan.lex,v 1.18 2005/11/17 01:58:52 tlopatic Exp $
  */
 
 
@@ -367,6 +367,11 @@ IPV6ADDR {IP6PAT1}|{IP6PAT2}|{IP6PAT3}|{IP6PAT4}|{IP6PAT5}|{IP6PAT6}|{IP6PAT7}|{
   return TOK_LQ_LEVEL;
 }
 
+"LinkQualityFishEye" {
+  yylval = NULL;
+  return TOK_LQ_FISH;
+}
+
 "LinkQualityWinSize" {
   yylval = NULL;
   return TOK_LQ_WSIZE;
index 7bcc931..01bf39d 100644 (file)
@@ -37,7 +37,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: lq_packet.c,v 1.18 2005/10/23 20:58:14 tlopatic Exp $
+ * $Id: lq_packet.c,v 1.19 2005/11/17 01:58:51 tlopatic Exp $
  */
 
 #include "olsr_protocol.h"
@@ -149,6 +149,8 @@ create_lq_tc(struct lq_tc_message *lq_tc, struct interface *outif)
   int i;
   struct neighbor_entry *walker;
   struct link_entry *link;
+  static int ttl_list[] = { MAX_TTL, 3, 2, 1, 2, 1, 1, 3, 2, 1, 2, 1, 1, 0 };
+  static int ttl_index = 0;
 
   // remember that we have generated an LQ TC message; this is
   // checked in net_output()
@@ -163,7 +165,19 @@ create_lq_tc(struct lq_tc_message *lq_tc, struct interface *outif)
 
   COPY_IP(&lq_tc->comm.orig, &main_addr);
 
-  lq_tc->comm.ttl = MAX_TTL;
+  if (olsr_cnf->lq_fish > 0)
+  {
+    if (ttl_list[ttl_index] == 0)
+      ttl_index = 0;
+
+    lq_tc->comm.ttl = ttl_list[ttl_index++];
+
+    OLSR_PRINTF(3, "Creating LQ TC with TTL %d.\n", lq_tc->comm.ttl);
+  }
+
+  else
+    lq_tc->comm.ttl = MAX_TTL;
+
   lq_tc->comm.hops = 0;
   lq_tc->comm.seqno = get_msg_seqno();
 
index 3239ae5..d4d7269 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: olsr_cfg.h,v 1.25 2005/05/30 13:13:38 kattemat Exp $
+ * $Id: olsr_cfg.h,v 1.26 2005/11/17 01:58:52 tlopatic Exp $
  */
 
 
@@ -54,6 +54,7 @@
 #define DEF_IPC_CONNECTIONS 0
 #define DEF_USE_HYST        OLSR_TRUE
 #define DEF_LQ_LEVEL        0
+#define DEF_LQ_FISH         0
 #define DEF_LQ_WSIZE        10
 #define DEF_CLEAR_SCREEN    OLSR_FALSE
 
@@ -206,6 +207,7 @@ struct olsrd_config
   olsr_bool                clear_screen;
   olsr_u8_t                lq_level;
   olsr_u32_t               lq_wsize;
+  olsr_u8_t                lq_fish;
   struct plugin_entry      *plugins;
   struct hna4_entry        *hna4_entries;
   struct hna6_entry        *hna6_entries;
index 2535001..2390a78 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: parser.c,v 1.27 2005/06/04 15:13:53 kattemat Exp $
+ * $Id: parser.c,v 1.28 2005/11/17 01:58:52 tlopatic Exp $
  */
 
 #include "parser.h"
@@ -241,7 +241,7 @@ parse_packet(struct olsr *olsr, int size, struct interface *in_if, union olsr_ip
       if(olsr_cnf->ip_version == AF_INET)
        {
          /* IPv4 */
-         if (m->v4.ttl <= 0)
+         if (m->v4.ttl <= 0 && olsr_cnf->lq_fish == 0)
            {
              OLSR_PRINTF(2, "Dropping packet type %d from neigh %s with TTL 0\n", 
                          m->v4.olsr_msgtype,
@@ -252,7 +252,7 @@ parse_packet(struct olsr *olsr, int size, struct interface *in_if, union olsr_ip
       else
        {
          /* IPv6 */
-         if (m->v6.ttl <= 0) 
+         if (m->v6.ttl <= 0 && olsr_cnf->lq_fish == 0
            {
              OLSR_PRINTF(2, "Dropping packet type %d from %s with TTL 0\n", 
                          m->v4.olsr_msgtype,