cfgfile: no more magic numbers for RtTable* defaults
authorFerry Huberts <ferry.huberts@pelagic.nl>
Thu, 11 Jul 2013 13:22:12 +0000 (15:22 +0200)
committerFerry Huberts <ferry.huberts@pelagic.nl>
Thu, 11 Jul 2013 13:24:52 +0000 (15:24 +0200)
Signed-off-by: Ferry Huberts <ferry.huberts@pelagic.nl>
src/cfgparser/cfgfile_gen.c
src/cfgparser/olsrd_conf.c
src/olsr_cfg.h

index 3c43c40..f1b68ef 100644 (file)
@@ -388,23 +388,40 @@ void olsrd_write_cnf_autobuf(struct autobuf *out, struct olsrd_config *cnf) {
   abuf_appendf(out, "%sRtProto %u\n",
       cnf->rt_proto == DEF_RTPROTO ? "# " : "",
       cnf->rt_proto);
-  abuf_puts(out,
+  abuf_appendf(out,
     "\n"
     "# Specifies the routing Table olsr uses\n"
     "# RtTable is for host routes, RtTableDefault for the route to the default\n"
     "# internet gateway (2 in case of IPv6+NIIT) and RtTableTunnel is for\n"
     "# routes to the ipip tunnels, valid values are 1 to 254\n"
     "# There is a special parameter \"auto\" (choose default below)\n"
-    "# (with    smartgw: default is 254/223/224)\n"
-    "# (without smartgw: default is 254/254/254, linux main table)\n"
-    "\n");
-  abuf_appendf(out, "RtTable %u\n",
-      cnf->rt_table);
-  abuf_appendf(out, "RtTableDefault %u\n",
-      cnf->rt_table_default);
-  abuf_appendf(out, "RtTableTunnel %u\n",
-      cnf->rt_table_tunnel);
-  abuf_puts(out,
+    "# (with    smartgw: default is %u/%u/%u)\n"
+    "# (without smartgw: default is %u/%u/%u, linux main table)\n"
+    "\n",
+    DEF_SGW_RT_TABLE_NR, DEF_SGW_RT_TABLE_DEFAULT_NR, DEF_SGW_RT_TABLE_TUNNEL_NR,
+    DEF_RT_TABLE_NR, DEF_RT_TABLE_DEFAULT_NR, DEF_RT_TABLE_TUNNEL_NR);
+  if (!cnf->smart_gw_active) {
+    abuf_appendf(out, "%sRtTable        %u\n",
+        cnf->rt_table == DEF_RT_TABLE_NR ? "# " : "",
+        cnf->rt_table);
+    abuf_appendf(out, "%sRtTableDefault %u\n",
+        cnf->rt_table_default == DEF_RT_TABLE_DEFAULT_NR ? "# " : "",
+        cnf->rt_table_default);
+    abuf_appendf(out, "%sRtTableTunnel  %u\n",
+        cnf->rt_table_tunnel == DEF_RT_TABLE_TUNNEL_NR ? "# " : "",
+        cnf->rt_table_tunnel);
+  } else {
+    abuf_appendf(out, "%sRtTable        %u\n",
+        cnf->rt_table == DEF_SGW_RT_TABLE_NR ? "# " : "",
+        cnf->rt_table);
+    abuf_appendf(out, "%sRtTableDefault %u\n",
+        cnf->rt_table_default == DEF_SGW_RT_TABLE_DEFAULT_NR ? "# " : "",
+        cnf->rt_table_default);
+    abuf_appendf(out, "%sRtTableTunnel  %u\n",
+        cnf->rt_table_tunnel == DEF_SGW_RT_TABLE_TUNNEL_NR ? "# " : "",
+        cnf->rt_table_tunnel);
+  }
+  abuf_appendf(out,
     "\n"
     "# Specifies the policy rule priorities for the three routing tables and\n"
     "# a special rule for smartgateway routing (see README-Olsr-Extensions)\n"
@@ -414,17 +431,64 @@ void olsrd_write_cnf_autobuf(struct autobuf *out, struct olsrd_config *cnf) {
     "# less than RtTableTunnelPriority less than RtTableDefaultPriority\n"
     "# There are two special parameters, \"auto\" (choose fitting to SmartGW\n"
     "# mode) and \"none\" (do not set policy rule)\n"
-    "# (with    smartgw: default is none/32776/32786/32796)\n"
-    "# (without smartgw: default is none/none /none /none )\n"
-    "\n");
-  abuf_appendf(out, "RtTablePriority %u\n",
-      cnf->rt_table_pri);
-  abuf_appendf(out, "RtTableDefaultOlsrPriority %u\n",
-      cnf->rt_table_default_pri);
-  abuf_appendf(out, "RtTableTunnelPriority %u\n",
-      cnf->rt_table_tunnel_pri);
-  abuf_appendf(out, "RtTableDefaultPriority %u\n",
-      cnf->rt_table_defaultolsr_pri);
+    "# (with    smartgw: default is %d/%u/%u/%u)\n"
+    "# (without smartgw: default is %d/%d   /%d   /%d   )\n"
+    "\n",
+    DEF_SGW_RT_TABLE_PRI,
+    DEF_SGW_RT_TABLE_PRI_BASE + DEF_SGW_RT_TABLE_DEFAULTOLSR_PRI_ADDER,
+    DEF_SGW_RT_TABLE_PRI_BASE + DEF_SGW_RT_TABLE_DEFAULTOLSR_PRI_ADDER + DEF_SGW_RT_TABLE_TUNNEL_PRI_ADDER,
+    DEF_SGW_RT_TABLE_PRI_BASE + DEF_SGW_RT_TABLE_DEFAULTOLSR_PRI_ADDER + DEF_SGW_RT_TABLE_TUNNEL_PRI_ADDER + DEF_SGW_RT_TABLE_DEFAULT_PRI_ADDER,
+    DEF_RT_TABLE_PRI,
+    DEF_RT_TABLE_DEFAULTOLSR_PRI,
+    DEF_RT_TABLE_TUNNEL_PRI,
+    DEF_RT_TABLE_DEFAULT_PRI);
+  if (!cnf->smart_gw_active) {
+    if (cnf->rt_table_pri == DEF_RT_TABLE_PRI) {
+      abuf_appendf(out, "# RtTablePriority            %d\n",
+          cnf->rt_table_pri);
+    } else {
+      abuf_appendf(out, "RtTablePriority            %u\n",
+          cnf->rt_table_pri);
+    }
+    if (cnf->rt_table_defaultolsr_pri == DEF_RT_TABLE_DEFAULTOLSR_PRI) {
+      abuf_appendf(out, "# RtTableDefaultOlsrPriority %d\n",
+          cnf->rt_table_defaultolsr_pri);
+    } else {
+      abuf_appendf(out, "RtTableDefaultOlsrPriority %u\n",
+          cnf->rt_table_defaultolsr_pri);
+    }
+    if (cnf->rt_table_tunnel_pri == DEF_RT_TABLE_TUNNEL_PRI) {
+      abuf_appendf(out, "# RtTableTunnelPriority      %d\n",
+          cnf->rt_table_tunnel_pri);
+    } else {
+      abuf_appendf(out, "RtTableTunnelPriority      %u\n",
+          cnf->rt_table_tunnel_pri);
+    }
+    if (cnf->rt_table_default_pri == DEF_RT_TABLE_DEFAULT_PRI) {
+      abuf_appendf(out, "# RtTableDefaultPriority     %d\n",
+          cnf->rt_table_default_pri);
+    } else {
+      abuf_appendf(out, "RtTableDefaultPriority     %u\n",
+          cnf->rt_table_default_pri);
+    }
+  } else {
+    if (cnf->rt_table_pri == DEF_SGW_RT_TABLE_PRI) {
+      abuf_appendf(out, "# RtTablePriority            %d\n",
+          cnf->rt_table_pri);
+    } else {
+      abuf_appendf(out, "RtTablePriority            %u\n",
+          cnf->rt_table_pri);
+    }
+    abuf_appendf(out, "%sRtTableDefaultOlsrPriority %u\n",
+        cnf->rt_table_defaultolsr_pri == (DEF_SGW_RT_TABLE_PRI_BASE + DEF_SGW_RT_TABLE_DEFAULTOLSR_PRI_ADDER) ? "# " : "",
+        cnf->rt_table_defaultolsr_pri);
+    abuf_appendf(out, "%sRtTableTunnelPriority      %u\n",
+        cnf->rt_table_tunnel_pri == (DEF_SGW_RT_TABLE_PRI_BASE + DEF_SGW_RT_TABLE_DEFAULTOLSR_PRI_ADDER + DEF_SGW_RT_TABLE_TUNNEL_PRI_ADDER) ? "# " : "",
+        cnf->rt_table_tunnel_pri);
+    abuf_appendf(out, "%sRtTableDefaultPriority     %u\n",
+        cnf->rt_table_default_pri == (DEF_SGW_RT_TABLE_PRI_BASE + DEF_SGW_RT_TABLE_DEFAULTOLSR_PRI_ADDER + DEF_SGW_RT_TABLE_TUNNEL_PRI_ADDER + DEF_SGW_RT_TABLE_DEFAULT_PRI_ADDER) ? "# " : "",
+        cnf->rt_table_default_pri);
+  }
   abuf_appendf(out,
     "\n"
     "# Activates (in IPv6 mode) the automatic use of NIIT\n"
index 584e0f6..c1f6652 100644 (file)
@@ -223,55 +223,55 @@ static int olsrd_sanity_check_rtpolicy(struct olsrd_config *cnf) {
   if (!cnf->smart_gw_active) {
     /* default is "no policy rules" and "everything into the main table" */
     if (cnf->rt_table == DEF_RT_AUTO) {
-      cnf->rt_table = 254;
+      cnf->rt_table = DEF_RT_TABLE_NR;
     }
     if (cnf->rt_table_default == DEF_RT_AUTO) {
-      cnf->rt_table_default = cnf->rt_table;
+      cnf->rt_table_default = DEF_RT_TABLE_DEFAULT_NR;
     }
     if (cnf->rt_table_tunnel != DEF_RT_AUTO) {
       fprintf(stderr, "Warning, setting a table for tunnels without SmartGW does not make sense.\n");
     }
-    cnf->rt_table_tunnel = cnf->rt_table_default;
+    cnf->rt_table_tunnel = DEF_RT_TABLE_TUNNEL_NR;
 
     /* priority rules default is "none" */
     if (cnf->rt_table_pri == DEF_RT_AUTO) {
-      cnf->rt_table_pri = DEF_RT_NONE;
+      cnf->rt_table_pri = DEF_RT_TABLE_PRI;
     }
     if (cnf->rt_table_defaultolsr_pri == DEF_RT_AUTO) {
-      cnf->rt_table_defaultolsr_pri = DEF_RT_NONE;
+      cnf->rt_table_defaultolsr_pri = DEF_RT_TABLE_DEFAULTOLSR_PRI;
     }
     if (cnf->rt_table_tunnel_pri == DEF_RT_AUTO) {
-      cnf->rt_table_tunnel_pri = DEF_RT_NONE;
+      cnf->rt_table_tunnel_pri = DEF_RT_TABLE_TUNNEL_PRI;
     }
     if (cnf->rt_table_default_pri == DEF_RT_AUTO) {
-      cnf->rt_table_default_pri = DEF_RT_NONE;
+      cnf->rt_table_default_pri = DEF_RT_TABLE_DEFAULT_PRI;
     }
   }
   else {
     /* default is "policy rules" and "everything into separate tables (254, 223, 224)" */
     if (cnf->rt_table == DEF_RT_AUTO) {
-      cnf->rt_table = 254;
+      cnf->rt_table = DEF_SGW_RT_TABLE_NR;
     }
     if (cnf->rt_table_default == DEF_RT_AUTO) {
-      cnf->rt_table_default = 223;
+      cnf->rt_table_default = DEF_SGW_RT_TABLE_DEFAULT_NR;
     }
     if (cnf->rt_table_tunnel == DEF_RT_AUTO) {
-      cnf->rt_table_tunnel = 224;
+      cnf->rt_table_tunnel = DEF_SGW_RT_TABLE_TUNNEL_NR;
     }
 
     /* default for "rt_table_pri" is none (main table already has a policy rule */
-    prio = 32766;
+    prio = DEF_SGW_RT_TABLE_PRI_BASE;
     if (cnf->rt_table_pri > 0) {
       prio = cnf->rt_table_pri;
     }
     else if (cnf->rt_table_pri == DEF_RT_AUTO) {
       /* choose default */
-      olsr_cnf->rt_table_pri = DEF_RT_NONE;
+      olsr_cnf->rt_table_pri = DEF_SGW_RT_TABLE_PRI;
       fprintf(stderr, "No policy rule for rt_table_pri\n");
     }
 
     /* default for "rt_table_defaultolsr_pri" is +10 */
-    prio += 10;
+    prio += DEF_SGW_RT_TABLE_DEFAULTOLSR_PRI_ADDER;
     if (cnf->rt_table_defaultolsr_pri > 0) {
       prio = cnf->rt_table_defaultolsr_pri;
     }
@@ -280,7 +280,7 @@ static int olsrd_sanity_check_rtpolicy(struct olsrd_config *cnf) {
       fprintf(stderr, "Choose priority %u for rt_table_defaultolsr_pri\n", prio);
     }
 
-    prio += 10;
+    prio += DEF_SGW_RT_TABLE_TUNNEL_PRI_ADDER;
     if (cnf->rt_table_tunnel_pri > 0) {
       prio = cnf->rt_table_tunnel_pri;
     }
@@ -289,8 +289,11 @@ static int olsrd_sanity_check_rtpolicy(struct olsrd_config *cnf) {
       fprintf(stderr, "Choose priority %u for rt_table_tunnel_pri\n", prio);
     }
 
-    prio += 10;
-    if (cnf->rt_table_default_pri == DEF_RT_AUTO) {
+    prio += DEF_SGW_RT_TABLE_DEFAULT_PRI_ADDER;
+    if (cnf->rt_table_default_pri > 0) {
+      prio = cnf->rt_table_default_pri;
+    }
+    else if (cnf->rt_table_default_pri == DEF_RT_AUTO) {
       olsr_cnf->rt_table_default_pri = prio;
       fprintf(stderr, "Choose priority %u for rt_table_default_pri\n", prio);
     }
index bf409fd..e5fb5ab 100644 (file)
 #define DEF_RTPROTO          0 /* 0 means OS-specific default */
 #define DEF_RT_NONE          -1
 #define DEF_RT_AUTO          0
+
+#define DEF_RT_TABLE_NR                   254
+#define DEF_RT_TABLE_DEFAULT_NR           254
+#define DEF_RT_TABLE_TUNNEL_NR            254
+
+#define DEF_SGW_RT_TABLE_NR               254
+#define DEF_SGW_RT_TABLE_DEFAULT_NR       223
+#define DEF_SGW_RT_TABLE_TUNNEL_NR        224
+
+#define DEF_RT_TABLE_PRI                  DEF_RT_NONE
+#define DEF_RT_TABLE_DEFAULTOLSR_PRI      DEF_RT_NONE
+#define DEF_RT_TABLE_TUNNEL_PRI           DEF_RT_NONE
+#define DEF_RT_TABLE_DEFAULT_PRI          DEF_RT_NONE
+
+#define DEF_SGW_RT_TABLE_PRI                    DEF_RT_NONE
+#define DEF_SGW_RT_TABLE_PRI_BASE               32766
+#define DEF_SGW_RT_TABLE_DEFAULTOLSR_PRI_ADDER  10
+#define DEF_SGW_RT_TABLE_TUNNEL_PRI_ADDER       10
+#define DEF_SGW_RT_TABLE_DEFAULT_PRI_ADDER      10
+
 #define DEF_MIN_TC_VTIME     0.0
 #define DEF_USE_NIIT         true
 #define DEF_SMART_GW         false