Removed the superfluous "rt_policy" setting. Fixed the secondary
authorSven-Ola Tuecke <sven-ola@gmx.de>
Sun, 21 Mar 2010 12:09:35 +0000 (13:09 +0100)
committerSven-Ola Tuecke <sven-ola@gmx.de>
Sun, 21 Mar 2010 12:09:35 +0000 (13:09 +0100)
default route maintaining with "rt_table_default=0". Re-inforced
the "do not fiddle with rules if sme. explicitly sets prio=0".
We need the rules to be set by olsrd only, if the user wants
'SmartGateway=yes' - enforced that with this commit.

files/olsrd.conf.default.full
files/olsrd.conf.default.lq
files/olsrd.conf.default.lq-fisheye
files/olsrd.conf.default.rfc
src/cfgparser/cfgfile_gen.c
src/cfgparser/olsrd_conf.c
src/cfgparser/oparse.y
src/cfgparser/oscan.lex
src/linux/kernel_routes_nl.c
src/main.c
src/olsr_cfg.h

index 6a0e525..d2ebb1d 100644 (file)
 
 # RtProto 0
 
-# RtPolicy activates the usage of routing tables and policy rules for OLSRd
-# routing. It's used to keep host and default route in different tables and
-# to handle more complicated routing setups with SmartGateway
-# (Default is "yes")
-
-# RtPolicy yes
-
 # Specifies the routing Table olsr uses
 # RtTable is for host routes, RtTableDefault for the route to the default
 # internet gateway (2 in case of IPv6+NIIT) and RtTableTunnel is for
index 1ad7ee2..51d5fd2 100644 (file)
 
 # RtProto 0
 
-# RtPolicy activates the usage of routing tables and policy rules for OLSRd
-# routing. It's used to keep host and default route in different tables and
-# to handle more complicated routing setups with SmartGateway
-# (Default is "yes")
-
-# RtPolicy yes
-
 # Activates (in IPv6 mode) the automatic use of NIIT
 # (see README-Olsr-Extensions)
 # (default is "yes")
index ceaf279..d08b83b 100644 (file)
 
 # RtProto 0
 
-# RtPolicy activates the usage of routing tables and policy rules for OLSRd
-# routing. It's used to keep host and default route in different tables and
-# to handle more complicated routing setups with SmartGateway
-# (Default is "yes")
-
-# RtPolicy yes
-
 # Activates (in IPv6 mode) the automatic use of NIIT
 # (see README-Olsr-Extensions)
 # (default is "yes")
index 6a8f201..b1e28ec 100644 (file)
 # these parameters are only working on linux at the moment, but might become
 # useful on BSD in the future
 
-# RtPolicy activates the usage of routing tables and policy rules for OLSRd
-# routing. It's used to keep host and default route in different tables and
-# to handle more complicated routing setups with SmartGateway
-# (Default is "yes")
-
-RtPolicy no
-
 # Activates (in IPv6 mode) the automatic use of NIIT
 # (see README-Olsr-Extensions)
 # (default is "yes")
index e357b3e..c5502e6 100644 (file)
@@ -383,30 +383,17 @@ void olsrd_write_cnf_autobuf(struct autobuf *out, struct olsrd_config *cnf) {
       cnf->rt_proto);
   abuf_puts(out,
     "\n"
-    "# RtPolicy activates the usage of routing tables and policy rules for OLSRd\n"
-    "# routing. It's used to keep host and default route in different tables and\n"
-    "# to handle more complicated routing setups with SmartGateway\n"
-    "# (Default is \"yes\")\n"
-    "\n");
-  abuf_appendf(out, "%sRtPolicy %s\n",
-      cnf->rt_policy == DEF_RTPOLICY ? "# " : "",
-      cnf->rt_policy ? "yes" : "no");
-  abuf_puts(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"
     "# (default is 254/112/113, the first is the \"main\" table in linux)\n"
     "\n");
-  abuf_appendf(out, "%sRtTable %u\n",
-      cnf->rt_policy ? "# " : "",
+  abuf_appendf(out, "RtTable %u\n",
       cnf->rt_table);
-  abuf_appendf(out, "%sRtTableDefault %u\n",
-      cnf->rt_policy ? "# " : "",
+  abuf_appendf(out, "RtTableDefault %u\n",
       cnf->rt_table_default);
-  abuf_appendf(out, "%sRtTableTunnel %u\n",
-      cnf->rt_policy ? "# " : "",
+  abuf_appendf(out, "RtTableTunnel %u\n",
       cnf->rt_table_tunnel);
   abuf_puts(out,
     "\n"
@@ -418,18 +405,14 @@ void olsrd_write_cnf_autobuf(struct autobuf *out, struct olsrd_config *cnf) {
     "# < RtTableTunnelPriority < RtTableDefaultPriority\n"
     "# (default is 32766/32776/32786/32796)\n"
     "\n");
-  abuf_appendf(out, "%sRtTablePriority %u\n",
-      cnf->rt_policy ? "# " : "",
+  abuf_appendf(out, "RtTablePriority %u\n",
       cnf->rt_table_pri);
-  abuf_appendf(out, "%sRtTableDefaultOlsrPriority %u\n",
-      cnf->rt_policy ? "# " : "",
-      cnf->rt_table_default_pri);
-  abuf_appendf(out, "%sRtTableTunnelPriority %u\n",
-      cnf->rt_policy ? "# " : "",
-      cnf->rt_table_tunnel_pri);
-  abuf_appendf(out, "%sRtTableDefaultPriority %u\n",
-      cnf->rt_policy ? "# " : "",
+  abuf_appendf(out, "RtTableDefaultOlsrPriority %u\n",
       cnf->rt_table_defaultolsr_pri);
+  abuf_appendf(out, "RtTableTunnelPriority %u\n",
+      cnf->rt_table_tunnel_pri);
+  abuf_appendf(out, "RtTableDefaultPriority %u\n",
+      cnf->rt_table_default_pri);
   abuf_puts(out,
     "\n"
     "# Activates (in IPv6 mode) the automatic use of NIIT\n"
index 9c03f45..0ecf28b 100644 (file)
@@ -386,37 +386,11 @@ olsrd_sanity_check_cnf(struct olsrd_config *cnf)
 #endif
 
 #ifdef linux
-  /* calculate rt_policy defaults if necessary */
-  if (!cnf->rt_policy) {
-    /* get non policy routing entries */
-    cnf->rt_table = DEF_RTTABLE;
-    cnf->rt_table_default = DEF_RTTABLE;
-    cnf->rt_table_tunnel = DEF_RTTABLE;
-
-    cnf->rt_table_pri = 0;
-    cnf->rt_table_default_pri = 0;
-    cnf->rt_table_defaultolsr_pri = 0;
-    cnf->rt_table_tunnel_pri = 0;
-  }
-  else if (olsr_cnf->smart_gw_active) {
-    /* first fill in missing values */
-    if (cnf->rt_table_pri == 0) {
-      cnf->rt_table_pri = 32766; /* main table */
-      fprintf(stderr, "Choose priority %u for rt_table_pri\n", cnf->rt_table_pri);
+  if (olsr_cnf->smart_gw_active) {
+    if (0 == cnf->rt_table_default) {
+      cnf->rt_table_default = DEF_RTTABLE_DEFAULT;
+      fprintf(stderr, "Choose table %u for rt_table_default\n", cnf->rt_table_default);
     }
-    if (cnf->rt_table_defaultolsr_pri == 0) {
-      cnf->rt_table_defaultolsr_pri = cnf->rt_table_pri + 10;
-      fprintf(stderr, "Choose priority %u for rt_table_defaultolsr_pri\n", cnf->rt_table_defaultolsr_pri);
-    }
-    if (cnf->rt_table_tunnel_pri == 0) {
-      cnf->rt_table_tunnel_pri = cnf->rt_table_defaultolsr_pri + 10;
-      fprintf(stderr, "Choose priority %u for rt_table_tunnel_pri\n", cnf->rt_table_tunnel_pri);
-    }
-    if (cnf->rt_table_default_pri == 0) {
-      cnf->rt_table_default_pri = cnf->rt_table_tunnel_pri + 10;
-      fprintf(stderr, "Choose priority %u for rt_table_default_pri\n", cnf->rt_table_default_pri);
-    }
-
     /* check tables */
     if (cnf->rt_table == cnf->rt_table_default
         || cnf->rt_table == cnf->rt_table_tunnel
@@ -426,15 +400,15 @@ olsrd_sanity_check_cnf(struct olsrd_config *cnf)
     }
 
     /* check priorities */
-    if (cnf->rt_table_pri >= cnf->rt_table_defaultolsr_pri) {
+    if (cnf->rt_table_pri && cnf->rt_table_pri >= cnf->rt_table_defaultolsr_pri) {
       fprintf(stderr, "rttable priority must be lesser than rttable_defaultolsr priority\n");
       return -1;
     }
-    if (cnf->rt_table_defaultolsr_pri >= cnf->rt_table_tunnel_pri) {
+    if (cnf->rt_table_defaultolsr_pri && cnf->rt_table_defaultolsr_pri >= cnf->rt_table_tunnel_pri) {
       fprintf(stderr, "rttable_defaultolsr priority must be lesser than rttable_tunnel priority\n");
       return -1;
     }
-    if (cnf->rt_table_tunnel_pri >= cnf->rt_table_default_pri) {
+    if (cnf->rt_table_tunnel_pri && cnf->rt_table_tunnel_pri >= cnf->rt_table_default_pri) {
       fprintf(stderr, "rttable_tunnel priority must be lesser than rttable_default priority\n");
       return -1;
     }
@@ -629,11 +603,14 @@ set_default_cnf(struct olsrd_config *cnf)
   cnf->allow_no_interfaces = DEF_ALLOW_NO_INTS;
   cnf->tos = DEF_TOS;
   cnf->olsrport = DEF_OLSRPORT;
-  cnf->rt_policy = DEF_RTPOLICY;
   cnf->rt_proto = DEF_RTPROTO;
   cnf->rt_table = DEF_RTTABLE;
-  cnf->rt_table_default = DEF_RTTABLE_DEFAULT;
+  cnf->rt_table_default = 0;
   cnf->rt_table_tunnel = DEF_RTTABLE_TUNNEL;
+  cnf->rt_table_pri = 0x7FFE; /* 32766, main table prio */
+  cnf->rt_table_defaultolsr_pri = 0x7FFE + 10;
+  cnf->rt_table_tunnel_pri = 0x7FFE + 20;
+  cnf->rt_table_default_pri = 0x7FFE + 30;
   cnf->willingness_auto = DEF_WILL_AUTO;
   cnf->willingness = DEF_WILLINGNESS;
   cnf->ipc_connections = DEF_IPC_CONNECTIONS;
index 26b2f6b..19da045 100644 (file)
@@ -264,7 +264,6 @@ stmt:       idebug
           | bnoint
           | atos
           | aolsrport
-          | brtpolicy
           | irtproto
           | irttable
           | irttable_default
@@ -989,13 +988,6 @@ aolsrport: TOK_OLSRPORT TOK_INTEGER
 }
 ;
 
-brtpolicy: TOK_RTPOLICY TOK_BOOLEAN
-{
-  PARSER_DEBUG_PRINTF("RtPolicy: %s\n", $2->boolean ? "true" : "false");
-  olsr_cnf->rt_policy = $2->boolean;
-  free($2);
-}
-
 irtproto: TOK_RTPROTO TOK_INTEGER
 {
   PARSER_DEBUG_PRINTF("RtProto: %d\n", $2->integer);
index 35abe42..0204975 100644 (file)
@@ -309,11 +309,6 @@ IPV6ADDR {IPV6PAT1}|{IPV6PAT2}|{IPV6PAT3}|{IPV6PAT4}|{IPV6PAT5}|{IPV6PAT6}|{IPV6
   return TOK_OLSRPORT;
 }
 
-"RtPolicy" {
-  yylval = NULL;
-  return TOK_RTPOLICY;
-}
-
 "RtProto" {
   yylval = NULL;
   return TOK_RTPROTO;
index 7eddf0d..2306390 100644 (file)
@@ -484,18 +484,8 @@ static int olsr_os_process_rt_entry(int af_family, const struct rt_entry *rt, bo
   }
 
   /* get table */
-  table = olsr_cnf->rt_table;
-  if (is_prefix_inetgw(&rt->rt_dst)) {
-    if (0 == olsr_cnf->rt_table_default) {
-      /*
-       * Users start whining about not having internet with policy
-       * routing activated and no static default route in table 254.
-       * We maintain a fallback defroute in the default=253 table.
-       */
-      if (253 > olsr_cnf->rt_table) table = 253;
-    }
-    else table = olsr_cnf->rt_table_default;
-  }
+  table = is_prefix_inetgw(&rt->rt_dst) && olsr_cnf->rt_table_default
+      ? olsr_cnf->rt_table_default : olsr_cnf->rt_table;
 
   /* get next hop */
   if (rt->rt_best && set) {
@@ -603,6 +593,16 @@ int
 olsr_ioctl_add_route(const struct rt_entry *rt)
 {
   OLSR_PRINTF(2, "KERN: Adding %s\n", olsr_rtp_to_string(rt->rt_best));
+  if (0 == olsr_cnf->rt_table_default && 253 > olsr_cnf->rt_table && 0 == rt->rt_dst.prefix_len) {
+    /*
+     * Users start whining about not having internet with policy
+     * routing activated and no static default route in table 254.
+     * We maintain a fallback defroute in the default=253 table.
+     */
+     olsr_cnf->rt_table_default = 253;
+     olsr_os_process_rt_entry(AF_INET, rt, true);
+     olsr_cnf->rt_table_default = 0;
+  }
   return olsr_os_process_rt_entry(AF_INET, rt, true);
 }
 
@@ -631,6 +631,16 @@ int
 olsr_ioctl_del_route(const struct rt_entry *rt)
 {
   OLSR_PRINTF(2, "KERN: Deleting %s\n", olsr_rt_to_string(rt));
+  if (0 == olsr_cnf->rt_table_default && 253 > olsr_cnf->rt_table && 0 == rt->rt_dst.prefix_len) {
+    /*
+     * Users start whining about not having internet with policy
+     * routing activated and no static default route in table 254.
+     * We maintain a fallback defroute in the default=253 table.
+     */
+     olsr_cnf->rt_table_default = 253;
+     olsr_os_process_rt_entry(AF_INET, rt, false);
+     olsr_cnf->rt_table_default = 0;
+  }
   return olsr_os_process_rt_entry(AF_INET, rt, false);
 }
 
index 73f372c..b1fa968 100644 (file)
@@ -518,7 +518,7 @@ int main(int argc, char *argv[]) {
 
 #ifdef LINUX_NETLINK_ROUTING
   /* create policy routing priorities if necessary */
-  if (olsr_cnf->rt_policy && (olsr_cnf->smart_gw_active || olsr_cnf->use_niit)) {
+  if (olsr_cnf->smart_gw_active) {
     struct interface *ifn;
     if (olsr_cnf->rt_table_pri) {
       olsr_os_policy_rule(olsr_cnf->ip_version,
@@ -530,15 +530,13 @@ int main(int argc, char *argv[]) {
     }
     if (olsr_cnf->rt_table_default_pri) {
       olsr_os_policy_rule(olsr_cnf->ip_version,
-          olsr_cnf->rt_table_default ? olsr_cnf->rt_table_default : olsr_cnf->rt_table,
-          olsr_cnf->rt_table_default_pri, NULL, true);
+          olsr_cnf->rt_table_default, olsr_cnf->rt_table_default_pri, NULL, true);
     }
 
     /* OLSR sockets */
     if (olsr_cnf->rt_table_defaultolsr_pri) {
       for (ifn = ifnet; ifn; ifn = ifn->int_next) {
-        olsr_os_policy_rule(olsr_cnf->ip_version,
-            olsr_cnf->rt_table_default ? olsr_cnf->rt_table_default : olsr_cnf->rt_table,
+        olsr_os_policy_rule(olsr_cnf->ip_version, olsr_cnf->rt_table_default,
             olsr_cnf->rt_table_defaultolsr_pri, ifn->int_name, true);
       }
     }
@@ -732,9 +730,8 @@ static void olsr_shutdown(int signo __attribute__ ((unused)))
     close(ifn->send_socket);
 
 #ifdef LINUX_NETLINK_ROUTING
-    if (olsr_cnf->rt_policy && (olsr_cnf->smart_gw_active || olsr_cnf->use_niit) && olsr_cnf->rt_table_defaultolsr_pri) {
-      olsr_os_policy_rule(olsr_cnf->ip_version,
-          olsr_cnf->rt_table_default ? olsr_cnf->rt_table_default : olsr_cnf->rt_table,
+    if (olsr_cnf->smart_gw_active && olsr_cnf->rt_table_defaultolsr_pri) {
+      olsr_os_policy_rule(olsr_cnf->ip_version, olsr_cnf->rt_table_default,
           olsr_cnf->rt_table_defaultolsr_pri, ifn->int_name, false);
     }
 #endif
@@ -750,7 +747,7 @@ static void olsr_shutdown(int signo __attribute__ ((unused)))
   close(olsr_cnf->ioctl_s);
 
 #ifdef LINUX_NETLINK_ROUTING
-  if (olsr_cnf->rt_policy && (olsr_cnf->smart_gw_active || olsr_cnf->use_niit)) {
+  if (olsr_cnf->smart_gw_active) {
     if (olsr_cnf->rt_table_pri) {
       olsr_os_policy_rule(olsr_cnf->ip_version,
           olsr_cnf->rt_table, olsr_cnf->rt_table_pri, NULL, false);
@@ -761,8 +758,7 @@ static void olsr_shutdown(int signo __attribute__ ((unused)))
     }
     if (olsr_cnf->rt_table_default_pri) {
       olsr_os_policy_rule(olsr_cnf->ip_version,
-          olsr_cnf->rt_table_default ? olsr_cnf->rt_table_default : olsr_cnf->rt_table,
-          olsr_cnf->rt_table_default_pri, NULL, false);
+          olsr_cnf->rt_table_default, olsr_cnf->rt_table_default_pri, NULL, false);
     }
   }
   close(olsr_cnf->rtnl_s);
index 52f8505..6bb743c 100644 (file)
@@ -227,7 +227,6 @@ struct olsrd_config {
   int ip_version;
   bool allow_no_interfaces;
   uint16_t tos;
-  bool rt_policy;
   uint8_t rt_proto;
   uint8_t rt_table, rt_table_default, rt_table_tunnel;
   uint16_t rt_table_pri, rt_table_tunnel_pri;