Split SmartGatewayNAT into SmartGatewayAllowNAT and SmartGatewayUplinkNAT
authorHenning Rogge <henning.rogge@fkie.fraunhofer.de>
Tue, 26 Jan 2010 12:30:17 +0000 (13:30 +0100)
committerHenning Rogge <henning.rogge@fkie.fraunhofer.de>
Tue, 26 Jan 2010 12:30:17 +0000 (13:30 +0100)
src/cfgparser/cfgfile_gen.c
src/cfgparser/olsrd_conf.c
src/cfgparser/oparse.y
src/cfgparser/oscan.lex
src/gateway.c
src/olsr_cfg.h

index e966c9e..647de7f 100644 (file)
@@ -216,12 +216,15 @@ olsrd_write_cnf(struct olsrd_config *cnf, const char *fname)
   fprintf(fd, "# Smart gateway system\n\n");
   fprintf(fd, "SmartGateway\t%s\n\n", cnf->smart_gw_active ? "yes" : "no");
 
-  fprintf(fd, "# Smart gateway NAT\n\n");
-  fprintf(fd, "SmartGatewayNAT\t%s\n\n", cnf->smart_gw_nat ? "yes" : "no");
+  fprintf(fd, "# Smart gateway allow NAT\n\n");
+  fprintf(fd, "SmartGatewayAllowNAT\t%s\n\n", cnf->smart_gw_allow_nat ? "yes" : "no");
 
   fprintf(fd, "# Smart gateway uplink type\n\n");
   fprintf(fd, "SmartGatewayUplink\t%s\n\n", GW_UPLINK_TXT[cnf->smart_gw_type]);
 
+  fprintf(fd, "# Smart gateway uplink use NAT\n\n");
+  fprintf(fd, "SmartGatewayUplinkNAT\t%s\n\n", cnf->smart_gw_uplink_nat ? "yes" : "no");
+
   fprintf(fd, "# Smart gateway uplink/downlink speed (in kbit/s)\n\n");
   fprintf(fd, "SmartGatewaySpeed\t%d %d\n\n", cnf->smart_gw_uplink, cnf->smart_gw_downlink);
 
index a2e097f..7a6516d 100644 (file)
@@ -583,11 +583,12 @@ set_default_cnf(struct olsrd_config *cnf)
   cnf->use_niit = DEF_USE_NIIT;
   cnf->niit_if_index = 0;
 
-  cnf->smart_gw_active = true;
-  cnf->smart_gw_nat = true;
+  cnf->smart_gw_active = DEF_SMART_GW;
+  cnf->smart_gw_allow_nat = DEF_GW_ALLOW_NAT;
   cnf->smart_gw_type = GW_UPLINK_IPV4;
-  cnf->smart_gw_uplink = 100;
-  cnf->smart_gw_downlink = 1000;
+  cnf->smart_gw_uplink = DEF_UPLINK_SPEED;
+  cnf->smart_gw_uplink_nat = DEF_GW_UPLINK_NAT;
+  cnf->smart_gw_downlink = DEF_DOWNLINK_SPEED;
 #if LINUX_POLICY_ROUTING
   cnf->rtnl_s = 0;
 #endif
@@ -697,16 +698,21 @@ olsrd_print_cnf(struct olsrd_config *cnf)
 
   printf("Smart Gateway    : %s\n", cnf->smart_gw_active ? "yes" : "no");
 
-  printf("Smart Gw. NAT    : %s\n", cnf->smart_gw_nat ? "yes" : "no");
+  printf("SmGw. Allow NAT  : %s\n", cnf->smart_gw_allow_nat ? "yes" : "no");
 
   printf("Smart Gw. Uplink : %s\n", GW_UPLINK_TXT[cnf->smart_gw_type]);
 
+  printf("SmGw. Uplink NAT : %s\n", cnf->smart_gw_uplink_nat ? "yes" : "no");
+
   printf("Smart Gw. speed  : %d kbit/s up, %d kbit/s down\n",
       cnf->smart_gw_uplink, cnf->smart_gw_downlink);
 
-  printf("Smart Gw. prefix : %s\n",
-      olsr_cnf->smart_gw_prefix.prefix_len == 0
-      ? "-" : olsr_ip_prefix_to_string(&cnf->smart_gw_prefix));
+  if (olsr_cnf->smart_gw_prefix.prefix_len == 0) {
+    printf("# Smart Gw. prefix : ::/0\n");
+  }
+  else {
+    printf("Smart Gw. prefix : %s\n", olsr_ip_prefix_to_string(&cnf->smart_gw_prefix));
+  }
 
   /* Interfaces */
   if (in) {
index 2b7f7e6..9acbc77 100644 (file)
@@ -212,8 +212,9 @@ static int add_ipv6_addr(YYSTYPE ipaddr_arg, YYSTYPE prefixlen_arg)
 %token TOK_LOCK_FILE
 %token TOK_USE_NIIT
 %token TOK_SMART_GW
-%token TOK_SMART_GW_NAT
+%token TOK_SMART_GW_ALLOW_NAT
 %token TOK_SMART_GW_UPLINK
+%token TOK_SMART_GW_UPLINK_NAT
 %token TOK_SMART_GW_SPEED
 %token TOK_SMART_GW_PREFIX
 
@@ -282,8 +283,9 @@ stmt:       idebug
           | alock_file
           | suse_niit
           | bsmart_gw
-          | bsmart_gw_nat
-          | ssmart_gw_type
+          | bsmart_gw_allow_nat
+          | ssmart_gw_uplink
+          | bsmart_gw_uplink_nat
           | ismart_gw_speed
           | ismart_gw_prefix
 ;
@@ -1166,15 +1168,15 @@ bsmart_gw: TOK_SMART_GW TOK_BOOLEAN
 }
 ;
 
-bsmart_gw_nat: TOK_SMART_GW_NAT TOK_BOOLEAN
+bsmart_gw_allow_nat: TOK_SMART_GW_ALLOW_NAT TOK_BOOLEAN
 {
-       PARSER_DEBUG_PRINTF("Smart gateway nat: %s\n", $2->boolean ? "yes" : "no");
-       olsr_cnf->smart_gw_nat = $2->boolean;
+       PARSER_DEBUG_PRINTF("Smart gateway allow client nat: %s\n", $2->boolean ? "yes" : "no");
+       olsr_cnf->smart_gw_allow_nat = $2->boolean;
        free($2);
 }
 ;
 
-ssmart_gw_type: TOK_SMART_GW_NAT TOK_STRING
+ssmart_gw_uplink: TOK_SMART_GW_UPLINK TOK_STRING
 {
        PARSER_DEBUG_PRINTF("Smart gateway uplink: %s\n", $2->string);
        if (strcasecmp($2->string, GW_UPLINK_TXT[GW_UPLINK_IPV4]) == 0) {
@@ -1190,7 +1192,6 @@ ssmart_gw_type: TOK_SMART_GW_NAT TOK_STRING
                fprintf(stderr, "Bad gateway uplink type: %s\n", $2->string);
                YYABORT;
        }
-       olsr_cnf->smart_gw_nat = $2->boolean;
        free($2);
 }
 ;
@@ -1205,6 +1206,15 @@ ismart_gw_speed: TOK_SMART_GW_SPEED TOK_INTEGER TOK_INTEGER
 }
 ;
 
+bsmart_gw_uplink_nat: TOK_SMART_GW_UPLINK_NAT TOK_BOOLEAN
+{
+       PARSER_DEBUG_PRINTF("Smart gateway uplink nat: %s\n", $2->boolean ? "yes" : "no");
+       olsr_cnf->smart_gw_uplink_nat = $2->boolean;
+       free($2);
+}
+;
+
+
 ismart_gw_prefix: TOK_SMART_GW_PREFIX TOK_IPV6_ADDR TOK_INTEGER
 {
   PARSER_DEBUG_PRINTF("Smart gateway prefix: %s %u\n", $2->string, $3->integer);
index d42b870..3fe8a1a 100644 (file)
@@ -438,9 +438,9 @@ IPV6ADDR {IPV6PAT1}|{IPV6PAT2}|{IPV6PAT3}|{IPV6PAT4}|{IPV6PAT5}|{IPV6PAT6}|{IPV6
     return TOK_SMART_GW;
 }
 
-"SmartGatewayNAT" {
+"SmartGatewayAllowNAT" {
     yylval = NULL;
-    return TOK_SMART_GW_NAT;
+    return TOK_SMART_GW_ALLOW_NAT;
 }
 
 "SmartGatewayUplink" {
@@ -448,6 +448,11 @@ IPV6ADDR {IPV6PAT1}|{IPV6PAT2}|{IPV6PAT3}|{IPV6PAT4}|{IPV6PAT5}|{IPV6PAT6}|{IPV6
     return TOK_SMART_GW_UPLINK;
 }
  
+"SmartGatewayUplinkNAT" {
+    yylval = NULL;
+    return TOK_SMART_GW_UPLINK_NAT;
+}
 "SmartGatewaySpeed" {
     yylval = NULL;
     return TOK_SMART_GW_SPEED;
index 2576f1a..a28614d 100644 (file)
@@ -163,7 +163,7 @@ void olsr_modifiy_inetgw_netmask(union olsr_ip_addr *mask, int prefixlen) {
   if (olsr_cnf->has_ipv4_gateway) {
     ptr[GW_HNA_FLAGS] |= GW_HNA_FLAG_IPV4;
 
-    if (olsr_cnf->smart_gw_nat) {
+    if (olsr_cnf->smart_gw_uplink_nat) {
       ptr[GW_HNA_FLAGS] |= GW_HNA_FLAG_IPV4_NAT;
     }
   }
index 0927161..d41001f 100644 (file)
 #define DEF_RTTABLE         254
 #define DEF_MIN_TC_VTIME    0.0
 #define DEF_USE_NIIT        true
+#define DEF_SMART_GW        true
+#define DEF_GW_ALLOW_NAT    true
+#define DEF_GW_UPLINK_NAT   true
+#define DEF_UPLINK_SPEED    128
+#define DEF_DOWNLINK_SPEED  1024
 
 /* Bounds */
 
@@ -251,7 +256,7 @@ struct olsrd_config {
   char *lock_file;
   bool use_niit;
 
-  bool smart_gw_active, smart_gw_nat;
+  bool smart_gw_active, smart_gw_allow_nat, smart_gw_uplink_nat;
   enum smart_gw_uplinktype smart_gw_type;
   uint32_t smart_gw_uplink, smart_gw_downlink;
   struct olsr_ip_prefix smart_gw_prefix;