cfgparser: add SmartGatewayAlwaysRemoveServerTunnel configuration parameter
authorFerry Huberts <ferry.huberts@pelagic.nl>
Wed, 9 Jan 2013 12:41:12 +0000 (13:41 +0100)
committerFerry Huberts <ferry.huberts@pelagic.nl>
Wed, 9 Jan 2013 12:42:58 +0000 (13:42 +0100)
So that we can have the server tunnel (tunl0) removed on olsrd
shutdown, by setting the parameter to true.

Signed-off-by: Ferry Huberts <ferry.huberts@pelagic.nl>
README-Olsr-Extensions
files/olsrd.conf.default.full
files/olsrd.conf.default.lq
files/olsrd.conf.default.lq-fisheye
lib/jsoninfo/src/olsrd_jsoninfo.c
src/cfgparser/cfgfile_gen.c
src/cfgparser/olsrd_conf.c
src/cfgparser/oparse.y
src/cfgparser/oscan.lex
src/olsr_cfg.h

index 3030a9f..5423e03 100644 (file)
@@ -352,6 +352,9 @@ All other parameters will be ignored if SmartGateway is set to "no"
    local IPv6 address to use the IPv6 gateway without any kind of address
    translation. The maximum prefix length is 64 bits,
    the default is ::/0 (no prefix).
+5- SmartGatewayAlwaysRemoveServerTunnel can be used to signal that the
+   server tunnel must always be removed on shutdown, irrespective of the
+   interface up/down state during startup.
 
 
     5.4) Architecture & Notes
index 3869f13..bdb6894 100644 (file)
 
 # SmartGateway no
 
+# Signals that the server tunnel must always be removed on shutdown,
+# irrespective of the interface up/down state during startup.
+# (default is "no")
+
+# SmartGatewayAlwaysRemoveServerTunnel no
+
 # Determines the maximum number of gateways that can be in use at any given
 # time. This setting is used to mitigate the effects of breaking connections
 # (due to the selection of a new gateway) on a dynamic network.
index 84016c5..cfb24d4 100644 (file)
 
 # SmartGateway no
 
+# Signals that the server tunnel must always be removed on shutdown,
+# irrespective of the interface up/down state during startup.
+# (default is "no")
+
+# SmartGatewayAlwaysRemoveServerTunnel no
+
 # Determines the maximum number of gateways that can be in use at any given
 # time. This setting is used to mitigate the effects of breaking connections
 # (due to the selection of a new gateway) on a dynamic network.
index 0b8ccf1..7e7b8cc 100644 (file)
 
 # SmartGateway no
 
+# Signals that the server tunnel must always be removed on shutdown,
+# irrespective of the interface up/down state during startup.
+# (default is "no")
+
+# SmartGatewayAlwaysRemoveServerTunnel no
+
 # Determines the maximum number of gateways that can be in use at any given
 # time. This setting is used to mitigate the effects of breaking connections
 # (due to the selection of a new gateway) on a dynamic network.
index ff264ab..70d56e4 100644 (file)
@@ -986,6 +986,7 @@ ipc_print_config(struct autobuf *abuf)
 #ifdef __linux__
   abuf_json_boolean(abuf, "smartGateway", olsr_cnf->smart_gw_active);
   if (olsr_cnf->smart_gw_active) {
+    abuf_json_boolean(abuf, "smartGatewayAlwaysRemoveServerTunnel", olsr_cnf->smart_gw_always_remove_server_tunnel);
     abuf_json_int(abuf, "smartGatewayUseCount", olsr_cnf->smart_gw_use_count);
     abuf_json_string(abuf, "smartGatewayPolicyRoutingScript", olsr_cnf->smart_gw_policyrouting_script);
     {
index 803ce6f..0ccbab4 100644 (file)
@@ -438,6 +438,15 @@ void olsrd_write_cnf_autobuf(struct autobuf *out, struct olsrd_config *cnf) {
       cnf->smart_gw_active ? "yes" : "no");
   abuf_puts(out,
     "\n"
+    "# Signals that the server tunnel must always be removed on shutdown,\n"
+    "# irrespective of the interface up/down state during startup.\n"
+    "# (default is \"no\")\n"
+    "\n");
+  abuf_appendf(out, "%sSmartGatewayAlwaysRemoveServerTunnel %s\n",
+      cnf->smart_gw_always_remove_server_tunnel == DEF_SMART_GW_ALWAYS_REMOVE_SERVER_TUNNEL ? "# " : "",
+      cnf->smart_gw_always_remove_server_tunnel ? "yes" : "no");
+  abuf_puts(out,
+    "\n"
     "# Determines the maximum number of gateways that can be in use at any given\n"
     "# time. This setting is used to mitigate the effects of breaking connections\n"
     "# (due to the selection of a new gateway) on a dynamic network.\n"
index a34c117..8c4adb8 100644 (file)
@@ -887,6 +887,7 @@ set_default_cnf(struct olsrd_config *cnf)
   cnf->niit6to4_if_index = 0;
 
   cnf->smart_gw_active = DEF_SMART_GW;
+  cnf->smart_gw_always_remove_server_tunnel = DEF_SMART_GW_ALWAYS_REMOVE_SERVER_TUNNEL;
   cnf->smart_gw_use_count = DEF_GW_USE_COUNT;
   cnf->smart_gw_policyrouting_script = NULL;
   cnf->smart_gw_egress_interfaces = NULL;
@@ -1021,6 +1022,8 @@ olsrd_print_cnf(struct olsrd_config *cnf)
 
   printf("Smart Gateway    : %s\n", cnf->smart_gw_active ? "yes" : "no");
 
+  printf("SmGw. Del Srv Tun: %s\n", cnf->smart_gw_always_remove_server_tunnel ? "yes" : "no");
+
   printf("SmGw. Use Count  : %u\n", cnf->smart_gw_use_count);
 
   printf("SmGw. Pol. Script: %s\n", cnf->smart_gw_policyrouting_script);
index c396f39..e29c560 100644 (file)
@@ -216,6 +216,7 @@ 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_ALWAYS_REMOVE_SERVER_TUNNEL
 %token TOK_SMART_GW_USE_COUNT
 %token TOK_SMART_GW_POLICYROUTING_SCRIPT
 %token TOK_SMART_GW_EGRESS_IFS
@@ -308,6 +309,7 @@ stmt:       idebug
           | alock_file
           | suse_niit
           | bsmart_gw
+          | bsmart_gw_always_remove_server_tunnel
           | ismart_gw_use_count
           | ssmart_gw_policyrouting_script
           | ismart_gw_mark_offset_egress
@@ -1315,6 +1317,14 @@ bsmart_gw: TOK_SMART_GW TOK_BOOLEAN
 }
 ;
 
+bsmart_gw_always_remove_server_tunnel: TOK_SMART_GW_ALWAYS_REMOVE_SERVER_TUNNEL TOK_BOOLEAN
+{
+       PARSER_DEBUG_PRINTF("Smart gateway always remove server tunnel: %s\n", $2->boolean ? "enabled" : "disabled");
+       olsr_cnf->smart_gw_always_remove_server_tunnel = $2->boolean;
+       free($2);
+}
+;
+
 ismart_gw_use_count: TOK_SMART_GW_USE_COUNT TOK_INTEGER
 {
   PARSER_DEBUG_PRINTF("Smart gateway use count: %d\n", $2->integer);
index 1f88680..fc07b1e 100644 (file)
@@ -466,6 +466,11 @@ IPV6ADDR {IPV6PAT1}|{IPV6PAT2}|{IPV6PAT3}|{IPV6PAT4}|{IPV6PAT5}|{IPV6PAT6}|{IPV6
     return TOK_SMART_GW;
 }
 
+"SmartGatewayAlwaysRemoveServerTunnel" {
+    yylval = NULL;
+    return TOK_SMART_GW_ALWAYS_REMOVE_SERVER_TUNNEL;
+}
+
 "SmartGatewayUseCount" {
     yylval = NULL;
     return TOK_SMART_GW_USE_COUNT;
index c698e37..80660a5 100644 (file)
@@ -81,6 +81,7 @@
 #define DEF_MIN_TC_VTIME     0.0
 #define DEF_USE_NIIT         true
 #define DEF_SMART_GW         false
+#define DEF_SMART_GW_ALWAYS_REMOVE_SERVER_TUNNEL  false
 #define DEF_GW_USE_COUNT     1
 #define DEF_GW_MARK_OFFSET_EGRESS   91
 #define DEF_GW_MARK_OFFSET_TUNNELS 101
@@ -289,7 +290,7 @@ struct olsrd_config {
   char *lock_file;
   bool use_niit;
 
-  bool smart_gw_active, smart_gw_allow_nat, smart_gw_uplink_nat;
+  bool smart_gw_active, smart_gw_always_remove_server_tunnel, smart_gw_allow_nat, smart_gw_uplink_nat;
   uint8_t smart_gw_use_count;
   char *smart_gw_policyrouting_script;
   struct sgw_egress_if * smart_gw_egress_interfaces;