Added new config options NicChgsPollInt and AutoDetectChanges
authorAndreas Tonnesen <andreto@olsr.org>
Mon, 17 Apr 2006 18:31:09 +0000 (18:31 +0000)
committerAndreas Tonnesen <andreto@olsr.org>
Mon, 17 Apr 2006 18:31:09 +0000 (18:31 +0000)
14 files changed:
files/olsrd.conf.5.gz
files/olsrd.conf.default.lq
files/olsrd.conf.default.lq-fisheye
files/olsrd.conf.default.rfc
files/olsrd.conf.win32.lq
files/olsrd.conf.win32.rfc
src/cfgparser/cfgfile_gen.c
src/cfgparser/olsrd_conf.c
src/cfgparser/oparse.y
src/cfgparser/oscan.lex
src/interfaces.c
src/interfaces.h
src/olsr_cfg.h
src/unix/ifnet.c

index 0b88432..9e13ac3 100644 (file)
Binary files a/files/olsrd.conf.5.gz and b/files/olsrd.conf.5.gz differ
index 34c510a..2116ec6 100644 (file)
@@ -133,6 +133,10 @@ LinkQualityWinSize 10
 
 Pollrate       0.05
 
+# Interval to poll network interfaces for configuration 
+# changes. Defaults to 2.5 seconds
+
+NicChgsPollInt  3.0
 
 # TC redundancy
 # Specifies how much neighbor info should
@@ -205,6 +209,15 @@ MprCoverage        3
 
 Interface "XXX" "YYY"
 {
+    # Olsrd can autodetect changes in NIC
+    # configurations(IP address changes etc.). 
+    # This is Enabled by default and the interval
+    # to poll for changes on is defined by 
+    # NicChgsPollInt.
+    # This polling can be disabled pr. NIC by setting
+    # AutoDetectChanges to no.
+
+    # AutoDetectChanges            yes
 
     # IPv4 broadcast address to use. The
     # one usefull example would be 255.255.255.255
index 2f1f096..1cfc249 100644 (file)
@@ -141,6 +141,10 @@ LinkQualityWinSize 100
 
 Pollrate       0.05
 
+# Interval to poll network interfaces for configuration 
+# changes. Defaults to 2.5 seconds
+
+NicChgsPollInt  3.0
 
 # TC redundancy
 # Specifies how much neighbor info should
@@ -214,6 +218,16 @@ MprCoverage        5
 Interface "XXX" "YYY"
 {
 
+    # Olsrd can autodetect changes in NIC
+    # configurations(IP address changes etc.). 
+    # This is Enabled by default and the interval
+    # to poll for changes on is defined by 
+    # NicChgsPollInt.
+    # This polling can be disabled pr. NIC by setting
+    # AutoDetectChanges to no.
+
+    # AutoDetectChanges            yes
+
     # IPv4 broadcast address to use. The
     # one usefull example would be 255.255.255.255
     # If not defined the broadcastaddress
index 7f97797..3fdbc73 100644 (file)
@@ -128,6 +128,10 @@ HystThrLow 0.30
 
 Pollrate       0.05
 
+# Interval to poll network interfaces for configuration 
+# changes. Defaults to 2.5 seconds
+
+NicChgsPollInt  3.0
 
 # TC redundancy
 # Specifies how much neighbor info should
@@ -200,6 +204,15 @@ Pollrate   0.05
 
 Interface "XXX" "YYY"
 {
+    # Olsrd can autodetect changes in NIC
+    # configurations(IP address changes etc.). 
+    # This is Enabled by default and the interval
+    # to poll for changes on is defined by 
+    # NicChgsPollInt.
+    # This polling can be disabled pr. NIC by setting
+    # AutoDetectChanges to no.
+
+    # AutoDetectChanges            yes
 
     # IPv4 broadcast address to use. The
     # one usefull example would be 255.255.255.255
index 91b7b74..586fd39 100644 (file)
@@ -6,7 +6,7 @@
 # without the GUI. If you use the GUI, then you do not need this\r
 # file. In this case look at Default.olsr instead.\r
 #\r
-# $Id: olsrd.conf.win32.lq,v 1.1 2005/03/31 18:19:54 tlopatic Exp $\r
+# $Id: olsrd.conf.win32.lq,v 1.2 2006/04/17 18:31:08 kattemat Exp $\r
 #\r
 \r
 #\r
@@ -58,6 +58,11 @@ HystThrLow           0.3
 \r
 Pollrate               0.1\r
 \r
+# Interval to poll network interfaces for configuration \r
+# changes. Defaults to 2.5 seconds\r
+\r
+NicChgsPollInt  3.0\r
+\r
 #\r
 # Which neighbours should be advertised via TC messages?\r
 #\r
@@ -116,6 +121,16 @@ Hna4
 \r
 Interface "if99"\r
 {\r
+        # Olsrd can autodetect changes in NIC\r
+        # configurations(IP address changes etc.). \r
+        # This is Enabled by default and the interval\r
+        # to poll for changes on is defined by \r
+        # NicChgsPollInt.\r
+        # This polling can be disabled pr. NIC by setting\r
+        # AutoDetectChanges to no.\r
+\r
+        # AutoDetectChanges            yes\r
+\r
        #\r
        # HELLO interval and validity time in seconds (float)\r
        #\r
index 6e20a94..c86b254 100644 (file)
@@ -6,7 +6,7 @@
 # without the GUI. If you use the GUI, then you do not need this\r
 # file. In this case look at Default.olsr instead.\r
 #\r
-# $Id: olsrd.conf.win32.rfc,v 1.1 2005/03/31 18:19:54 tlopatic Exp $\r
+# $Id: olsrd.conf.win32.rfc,v 1.2 2006/04/17 18:31:08 kattemat Exp $\r
 #\r
 \r
 #\r
@@ -58,6 +58,11 @@ HystThrLow           0.3
 \r
 Pollrate               0.1\r
 \r
+# Interval to poll network interfaces for configuration \r
+# changes. Defaults to 2.5 seconds\r
+\r
+NicChgsPollInt  3.0\r
+\r
 #\r
 # Which neighbours should be advertised via TC messages?\r
 #\r
@@ -116,6 +121,16 @@ Hna4
 \r
 Interface "if99"\r
 {\r
+        # Olsrd can autodetect changes in NIC\r
+        # configurations(IP address changes etc.). \r
+        # This is Enabled by default and the interval\r
+        # to poll for changes on is defined by \r
+        # NicChgsPollInt.\r
+        # This polling can be disabled pr. NIC by setting\r
+        # AutoDetectChanges to no.\r
+\r
+        # AutoDetectChanges            yes\r
+\r
        #\r
        # HELLO interval and validity time in seconds (float)\r
        #\r
index ec65fe0..db1c961 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: cfgfile_gen.c,v 1.2 2005/12/30 02:24:00 tlopatic Exp $
+ * $Id: cfgfile_gen.c,v 1.3 2006/04/17 18:31:09 kattemat Exp $
  */
 
 
@@ -178,6 +178,10 @@ olsrd_write_cnf(struct olsrd_config *cnf, const char *fname)
   fprintf(fd, "# Polling rate in seconds(float).\n# Auto uses default value 0.05 sec\n\n");
   fprintf(fd, "Pollrate\t%0.2f\n", cnf->pollrate);
 
+  /* NIC Changes Pollrate */
+  fprintf(fd, "# Interval to poll network interfaces for configuration\n# changes. Defaults to 2.5 seconds\n");
+  fprintf(fd, "NicChgsPollInt\t%0.2f\n", cnf->nic_chgs_pollrate);
+
   /* TC redundancy */
   fprintf(fd, "# TC redundancy\n# Specifies how much neighbor info should\n# be sent in TC messages\n# Possible values are:\n# 0 - only send MPR selectors\n# 1 - send MPR selectors and MPRs\n# 2 - send all neighbors\n#\n# defaults to 0\n\n");
   fprintf(fd, "TcRedundancy\t%d\n\n", cnf->tc_redundancy);
@@ -254,7 +258,8 @@ olsrd_write_cnf(struct olsrd_config *cnf, const char *fname)
          fprintf(fd, "    Ip6MulticastGlobal\t%s\n\n", (char *)inet_ntop(AF_INET6, &in->cnf->ipv6_multi_glbl.v6, ipv6_buf, sizeof(ipv6_buf)));
          
          
-         
+          fprintf(fd, "    # Olsrd can autodetect changes in\n    # interface configurations. Enabled by default\n    # turn off to save CPU.\n    AutoDetectChanges: %s\n", in->cnf->autodetect_chg ? "yes" : "no");
+
          fprintf(fd, "    # Emission and validity intervals.\n    # If not defined, RFC proposed values will\n    # in most cases be used.\n\n");
          
          
index f215bf3..34d80f5 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.48 2006/03/09 15:05:27 tlopatic Exp $
+ * $Id: olsrd_conf.c,v 1.49 2006/04/17 18:31:09 kattemat Exp $
  */
 
 
@@ -246,6 +246,15 @@ olsrd_sanity_check_cnf(struct olsrd_config *cnf)
       return -1;
     }
 
+  /* NIC Changes Pollrate */
+
+  if(cnf->nic_chgs_pollrate < MIN_NICCHGPOLLRT ||
+     cnf->nic_chgs_pollrate > MAX_NICCHGPOLLRT)
+    {
+      fprintf(stderr, "NIC Changes Pollrate %0.2f is not allowed\n", cnf->nic_chgs_pollrate);
+      return -1;
+    }
+
   /* TC redundancy */
 
   if(//cnf->tc_redundancy < MIN_TC_REDUNDANCY ||
@@ -448,6 +457,7 @@ set_default_cnf(struct olsrd_config *cnf)
     cnf->hysteresis_param.thr_low = HYST_THRESHOLD_LOW;
 
     cnf->pollrate = DEF_POLLRATE;
+    cnf->nic_chgs_pollrate = DEF_NICCHGPOLLRT;
 
     cnf->tc_redundancy = TC_REDUNDANCY;
     cnf->mpr_coverage = MPR_COVERAGE;
@@ -501,6 +511,7 @@ get_default_if_config()
   io->mid_params.validity_time = MID_HOLD_TIME;
   io->hna_params.emission_interval = HNA_INTERVAL;
   io->hna_params.validity_time = HNA_HOLD_TIME;
+  io->autodetect_chg = OLSR_TRUE;
 
   return io;
 
@@ -559,6 +570,8 @@ olsrd_print_cnf(struct olsrd_config *cnf)
 
   printf("Pollrate         : %0.2f\n", cnf->pollrate);
 
+  printf("NIC ChangPollrate: %0.2f\n", cnf->nic_chgs_pollrate);
+
   printf("TC redundancy    : %d\n", cnf->tc_redundancy);
 
   printf("MPR coverage     : %d\n", cnf->mpr_coverage);
@@ -611,7 +624,9 @@ olsrd_print_cnf(struct olsrd_config *cnf)
             printf("\tLinkQualityMult          : %s %0.2f\n",
                    ipv6_buf, mult->val);
           }
-         
+
+          printf("\tAutodetetc changes       : %s\n", in->cnf->autodetect_chg ? "yes" : "no");
+
          in = in->next;
        }
     }
index 8e4c721..3d2488b 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.28 2005/11/17 04:25:44 tlopatic Exp $
+ * $Id: oparse.y,v 1.29 2006/04/17 18:31:09 kattemat Exp $
  */
 
 
@@ -145,6 +145,7 @@ static int lq_mult_helper(YYSTYPE ip_addr_arg, YYSTYPE mult_arg)
 %token TOK_HYSTUPPER
 %token TOK_HYSTLOWER
 %token TOK_POLLRATE
+%token TOK_NICCHGSPOLLRT
 %token TOK_TCREDUNDANCY
 %token TOK_MPRCOVERAGE
 %token TOK_LQ_LEVEL
@@ -173,6 +174,7 @@ static int lq_mult_helper(YYSTYPE ip_addr_arg, YYSTYPE mult_arg)
 %token TOK_MIDVAL
 %token TOK_HNAINT
 %token TOK_HNAVAL
+%token TOK_AUTODETCHG
 
 %token TOK_IP4_ADDR
 %token TOK_IP6_ADDR
@@ -197,6 +199,7 @@ stmt:       idebug
           | fhystupper
           | fhystlower
           | fpollrate
+          | fnicchgspollrt
           | atcredundancy
           | amprcoverage
           | alq_level
@@ -272,6 +275,7 @@ ifstmt:      vcomment
              | isetmidval
              | isethnaint
              | isethnaval
+             | isetautodetchg
              | isetlqmult
 ;
 
@@ -627,6 +631,23 @@ isethnaval: TOK_HNAVAL TOK_FLOAT
   free($2);
 }
 ;
+isetautodetchg: TOK_AUTODETCHG TOK_BOOLEAN
+{
+  int ifcnt = ifs_in_curr_cfg;
+  struct olsr_if *ifs = cnf->interfaces;
+
+  if(PARSER_DEBUG) printf("\tAutodetect changes: %s\n", $2->boolean ? "YES" : "NO");
+  while(ifcnt)
+    {
+      ifs->cnf->autodetect_chg = $2->boolean;
+      
+      ifs = ifs->next;
+      ifcnt--;
+    }
+
+  free($2);
+}
+;
 
 isetlqmult: TOK_LQ_MULT TOK_DEFAULT TOK_FLOAT
 {
@@ -874,6 +895,14 @@ fpollrate: TOK_POLLRATE TOK_FLOAT
 }
 ;
 
+fnicchgspollrt: TOK_NICCHGSPOLLRT TOK_FLOAT
+{
+  if(PARSER_DEBUG) printf("NIC Changes Pollrate %0.2f\n", $2->floating);
+  cnf->nic_chgs_pollrate = $2->floating;
+
+  free($2);
+}
+;
 
 atcredundancy: TOK_TCREDUNDANCY TOK_INTEGER
 {
index 834ae5a..f49d9f8 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.20 2005/11/19 08:49:44 kattemat Exp $
+ * $Id: oscan.lex,v 1.21 2006/04/17 18:31:09 kattemat Exp $
  */
 
 
@@ -276,6 +276,11 @@ IPV6ADDR {IP6PAT1}|{IP6PAT2}|{IP6PAT3}|{IP6PAT4}|{IP6PAT5}|{IP6PAT6}|{IP6PAT7}|{
   return TOK_IPVERSION;
 }
 
+"NicChgsPollInt" {
+  yylval = NULL;
+  return TOK_NICCHGSPOLLRT;
+}
+
 "Hna4" {
   yylval = NULL;
   return TOK_HNA4;
@@ -445,7 +450,10 @@ IPV6ADDR {IP6PAT1}|{IP6PAT2}|{IP6PAT3}|{IP6PAT4}|{IP6PAT5}|{IP6PAT6}|{IP6PAT7}|{
   yylval = NULL;
   return TOK_HNAVAL;
 }
-
+"AutoDetectChanges" {
+  yylval = NULL;
+  return TOK_AUTODETCHG;
+}
 
 
 \n|\r\n {
index ec4e0f7..d08185a 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: interfaces.c,v 1.28 2006/01/07 08:16:20 kattemat Exp $
+ * $Id: interfaces.c,v 1.29 2006/04/17 18:31:09 kattemat Exp $
  */
 
 #include "defs.h"
@@ -115,7 +115,8 @@ ifinit()
       }
   
   /* register network interface update function with scheduler */
-  olsr_register_scheduler_event(&check_interface_updates, NULL, IFCHANGES_POLL_INT, 0, NULL);
+  olsr_register_scheduler_event(&check_interface_updates, NULL, 
+                                olsr_cnf->nic_chgs_pollrate, 0, NULL);
 
   return (ifnet == NULL) ? 0 : 1;
 }
index 0fbc1a4..1413e25 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: interfaces.h,v 1.32 2006/01/07 08:16:20 kattemat Exp $
+ * $Id: interfaces.h,v 1.33 2006/04/17 18:31:09 kattemat Exp $
  */
 
 
@@ -154,10 +154,6 @@ struct interface
 #define IFCHG_IF_REMOVE        2
 #define IFCHG_IF_UPDATE        3
 
-/* The rate to poll for interface changes at */
-#define IFCHANGES_POLL_INT     2.5
-
-
 /* The interface linked-list */
 extern struct interface *ifnet;
 
index eefd46a..08e6404 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.29 2006/01/07 08:16:20 kattemat Exp $
+ * $Id: olsr_cfg.h,v 1.30 2006/04/17 18:31:09 kattemat Exp $
  */
 
 
@@ -47,6 +47,7 @@
 
 /* Default valuse not declared in olsr_protocol.h */
 #define DEF_POLLRATE        0.05
+#define DEF_NICCHGPOLLRT    2.5
 #define DEF_WILL_AUTO       OLSR_TRUE
 #define DEF_ALLOW_NO_INTS   OLSR_TRUE
 #define DEF_TOS             16
@@ -66,6 +67,8 @@
 
 #define MAX_POLLRATE        10.0
 #define MIN_POLLRATE        0.01
+#define MAX_NICCHGPOLLRT    100.0
+#define MIN_NICCHGPOLLRT    1.0
 #define MAX_DEBUGLVL        9
 #define MIN_DEBUGLVL        0
 #define MAX_TOS             16
@@ -120,6 +123,7 @@ struct if_config_options
   struct olsr_msg_params   mid_params;
   struct olsr_msg_params   hna_params;
   struct olsr_lq_mult      *lq_mult;
+  olsr_bool                autodetect_chg;
 };
 
 
@@ -204,6 +208,7 @@ struct olsrd_config
   olsr_bool                use_hysteresis;
   struct hyst_param        hysteresis_param;
   float                    pollrate;
+  float                    nic_chgs_pollrate;
   olsr_u8_t                tc_redundancy;
   olsr_u8_t                mpr_coverage;
   olsr_bool                clear_screen;
index 65d4cde..20d386e 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: ifnet.c,v 1.37 2006/04/14 05:18:31 kattemat Exp $
+ * $Id: ifnet.c,v 1.38 2006/04/17 18:31:09 kattemat Exp $
  */
 
 
@@ -127,10 +127,23 @@ check_interface_updates(void *foo)
       if(olsr_cnf->host_emul) /* XXX: TEMPORARY! */
        continue;
 
+      if(!tmp_if->cnf->autodetect_chg) 
+        {
+#ifdef DEBUG
+          /* Don't check this interface */
+          OLSR_PRINTF(3, "Not checking interface %s\n", tmp_if->name)
+#endif
+          continue;
+        }
+
       if(tmp_if->configured)
-       chk_if_changed(tmp_if);
+        {
+          chk_if_changed(tmp_if);
+        }
       else
-       chk_if_up(tmp_if, 3);
+        {
+          chk_if_up(tmp_if, 3);
+        }
     }
 
   return;