Reverted the "set two default routes in different tables" hack
authorSven-Ola Tuecke <sven-ola@gmx.de>
Sun, 21 Mar 2010 22:04:10 +0000 (23:04 +0100)
committerSven-Ola Tuecke <sven-ola@gmx.de>
Sun, 21 Mar 2010 22:04:10 +0000 (23:04 +0100)
Removed some 'if (0 != prio) because the set_prio() handles this
now. Reverted to old rt_table_default behaviour while setting the
correct number during init

src/cfgparser/olsrd_conf.c
src/linux/kernel_routes_nl.c
src/main.c
src/olsr_cfg.h

index 0ecf28b..2eab4a3 100644 (file)
@@ -413,6 +413,12 @@ olsrd_sanity_check_cnf(struct olsrd_config *cnf)
       return -1;
     }
   }
+  else {
+    if (0 == cnf->rt_table_default) {
+      cnf->rt_table_default = DEF_RTTABLE;
+      fprintf(stderr, "Choose table %u for rt_table_default\n", cnf->rt_table_default);
+    }
+  }
 
   /* filter rt_proto entry */
   if (cnf->rt_proto == 1) {
index 2306390..e2d0e7b 100644 (file)
@@ -269,6 +269,9 @@ int olsr_os_policy_rule(int family, int rttable, uint32_t priority, const char *
   struct olsr_rtreq req;
   int err;
 
+  // Nobody needs these rules
+  if (0 == rttable || rttable >= 253 || 0 == priority) return 0;
+
   memset(&req, 0, sizeof(req));
 
   req.n.nlmsg_len = NLMSG_LENGTH(sizeof(struct rtmsg));
@@ -431,7 +434,7 @@ static int olsr_new_netlink_route(int family, int rttable, int if_index, int met
 
 void olsr_os_niit_6to4_route(const struct olsr_ip_prefix *dst_v6, bool set) {
   if (olsr_new_netlink_route(AF_INET6,
-      ip_prefix_is_mappedv4_inetgw(dst_v6) && olsr_cnf->rt_table_default ? olsr_cnf->rt_table_default : olsr_cnf->rt_table,
+      ip_prefix_is_mappedv4_inetgw(dst_v6) ? olsr_cnf->rt_table_default : olsr_cnf->rt_table,
       olsr_cnf->niit6to4_if_index,
       RT_METRIC_DEFAULT, olsr_cnf->rt_proto, NULL, NULL, dst_v6, set, false)) {
     olsr_syslog(OLSR_LOG_ERR, ". error while %s static niit route to %s",
@@ -441,7 +444,7 @@ void olsr_os_niit_6to4_route(const struct olsr_ip_prefix *dst_v6, bool set) {
 
 void olsr_os_niit_4to6_route(const struct olsr_ip_prefix *dst_v4, bool set) {
   if (olsr_new_netlink_route(AF_INET,
-      ip_prefix_is_v4_inetgw(dst_v4) && olsr_cnf->rt_table_default ? olsr_cnf->rt_table_default : olsr_cnf->rt_table,
+      ip_prefix_is_v4_inetgw(dst_v4) ? olsr_cnf->rt_table_default : olsr_cnf->rt_table,
       olsr_cnf->niit4to6_if_index,
       RT_METRIC_DEFAULT, olsr_cnf->rt_proto, NULL, NULL, dst_v4, set, false)) {
     olsr_syslog(OLSR_LOG_ERR, ". error while %s niit route to %s",
@@ -484,7 +487,7 @@ static int olsr_os_process_rt_entry(int af_family, const struct rt_entry *rt, bo
   }
 
   /* get table */
-  table = is_prefix_inetgw(&rt->rt_dst) && olsr_cnf->rt_table_default
+  table = is_prefix_inetgw(&rt->rt_dst)
       ? olsr_cnf->rt_table_default : olsr_cnf->rt_table;
 
   /* get next hop */
@@ -593,16 +596,6 @@ 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,16 +624,6 @@ 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 b1fa968..a021269 100644 (file)
@@ -520,25 +520,17 @@ int main(int argc, char *argv[]) {
   /* create policy routing priorities if necessary */
   if (olsr_cnf->smart_gw_active) {
     struct interface *ifn;
-    if (olsr_cnf->rt_table_pri) {
-      olsr_os_policy_rule(olsr_cnf->ip_version,
-          olsr_cnf->rt_table, olsr_cnf->rt_table_pri, NULL, true);
-    }
-    if (olsr_cnf->rt_table_tunnel_pri) {
-      olsr_os_policy_rule(olsr_cnf->ip_version,
-          olsr_cnf->rt_table_tunnel, olsr_cnf->rt_table_tunnel_pri, NULL, true);
-    }
-    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_pri, NULL, true);
-    }
+    olsr_os_policy_rule(olsr_cnf->ip_version,
+        olsr_cnf->rt_table, olsr_cnf->rt_table_pri, NULL, true);
+    olsr_os_policy_rule(olsr_cnf->ip_version,
+        olsr_cnf->rt_table_tunnel, olsr_cnf->rt_table_tunnel_pri, NULL, true);
+    olsr_os_policy_rule(olsr_cnf->ip_version,
+        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_defaultolsr_pri, ifn->int_name, true);
-      }
+    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_defaultolsr_pri, ifn->int_name, true);
     }
   }
   /* trigger gateway selection */
@@ -730,7 +722,7 @@ static void olsr_shutdown(int signo __attribute__ ((unused)))
     close(ifn->send_socket);
 
 #ifdef LINUX_NETLINK_ROUTING
-    if (olsr_cnf->smart_gw_active && olsr_cnf->rt_table_defaultolsr_pri) {
+    if (olsr_cnf->smart_gw_active) {
       olsr_os_policy_rule(olsr_cnf->ip_version, olsr_cnf->rt_table_default,
           olsr_cnf->rt_table_defaultolsr_pri, ifn->int_name, false);
     }
@@ -748,18 +740,12 @@ static void olsr_shutdown(int signo __attribute__ ((unused)))
 
 #ifdef LINUX_NETLINK_ROUTING
   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);
-    }
-    if (olsr_cnf->rt_table_tunnel_pri) {
-      olsr_os_policy_rule(olsr_cnf->ip_version,
-          olsr_cnf->rt_table_tunnel, olsr_cnf->rt_table_tunnel_pri, NULL, false);
-    }
-    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_pri, NULL, false);
-    }
+    olsr_os_policy_rule(olsr_cnf->ip_version,
+        olsr_cnf->rt_table, olsr_cnf->rt_table_pri, NULL, false);
+    olsr_os_policy_rule(olsr_cnf->ip_version,
+        olsr_cnf->rt_table_tunnel, olsr_cnf->rt_table_tunnel_pri, NULL, false);
+    olsr_os_policy_rule(olsr_cnf->ip_version,
+        olsr_cnf->rt_table_default, olsr_cnf->rt_table_default_pri, NULL, false);
   }
   close(olsr_cnf->rtnl_s);
   close (olsr_cnf->rt_monitor_socket);
index 6bb743c..887b913 100644 (file)
@@ -77,7 +77,6 @@
 #define DEF_RTTABLE          254
 #define DEF_RTTABLE_DEFAULT  112
 #define DEF_RTTABLE_TUNNEL   113
-#define DEF_RTTABLE          254
 #define DEF_MIN_TC_VTIME     0.0
 #define DEF_USE_NIIT         true
 #define DEF_SMART_GW         false