Add parameter to set Originator-IP
authorHenning Rogge <hrogge@googlemail.com>
Sat, 6 Feb 2010 13:39:54 +0000 (14:39 +0100)
committerHenning Rogge <hrogge@googlemail.com>
Sat, 6 Feb 2010 13:39:54 +0000 (14:39 +0100)
src/cfgparser/oparse.y
src/cfgparser/oscan.lex
src/olsr_cfg.h

index 2831fd9..f127095 100644 (file)
@@ -218,6 +218,7 @@ static int add_ipv6_addr(YYSTYPE ipaddr_arg, YYSTYPE prefixlen_arg)
 %token TOK_SMART_GW_SPEED
 %token TOK_SMART_GW_PREFIX
 %token TOK_SRC_IP_ROUTES
+%token TOK_MAIN_IP
 
 %token TOK_HOSTLABEL
 %token TOK_NETLABEL
@@ -290,6 +291,7 @@ stmt:       idebug
           | ismart_gw_speed
           | ismart_gw_prefix
           | bsrc_ip_routes
+          | amain_ip
 ;
 
 block:      TOK_HNA4 hna4body
@@ -1250,6 +1252,16 @@ bsrc_ip_routes: TOK_SRC_IP_ROUTES TOK_BOOLEAN
 }
 ;
 
+amain_ip: TOK_MAIN_IP TOK_STRING
+{
+  PARSER_DEBUG_PRINTF("Fixed Main IP: %s\n", $2->string);
+  
+  if (inet_pton(olsr_cnf->ip_version, $2->string, &olsr_cnf->main_addr) != 1) {
+    fprintf(stderr, "Bad main IP: %s\n", $2->string);
+    YYABORT;
+  }
+  free($2);
+}
 
 plblock: TOK_PLUGIN TOK_STRING
 {
index ec90f4e..0f3d5e0 100644 (file)
@@ -467,12 +467,14 @@ IPV6ADDR {IPV6PAT1}|{IPV6PAT2}|{IPV6PAT3}|{IPV6PAT4}|{IPV6PAT5}|{IPV6PAT6}|{IPV6
     yylval = NULL;
     return TOK_SRC_IP_ROUTES;
 }
-
 "Weight" {
     yylval = NULL;
     return TOK_IFWEIGHT;
 }
-
+"MainIp" {
+    yylval = NULL;
+    return TOK_MAIN_IP;
+}
 "Ip4Broadcast" {
     yylval = NULL;
     return TOK_IPV4BROADCAST;
index 0a9a01d..1225d3d 100644 (file)
@@ -260,13 +260,14 @@ struct olsrd_config {
   uint32_t smart_gw_uplink, smart_gw_downlink;
   struct olsr_ip_prefix smart_gw_prefix;
 
+  /* Main address of this node */
+  union olsr_ip_addr main_addr;
   bool use_src_ip_routes;
 
   /* Stuff set by olsrd */
   uint8_t maxplen;                     /* maximum prefix len */
   size_t ipsize;                       /* Size of address */
   bool del_gws;                        /* Delete InternetGWs at startup */
-  union olsr_ip_addr main_addr;        /* Main address of this node */
   float will_int;
   float max_jitter;
   int exit_value;                      /* Global return value for process termination */