[Olsr-dev] [RFC] [PATCH v1 5/7] gateway: simplify by using the new costs interface

Ferry Huberts (spam-protected)
Tue Nov 13 11:32:59 CET 2012


From: Ferry Huberts <(spam-protected)>

Signed-off-by: Ferry Huberts <(spam-protected)>
---
 src/gateway_default_handler.c | 45 +++++++++++--------------------------------
 1 file changed, 11 insertions(+), 34 deletions(-)

diff --git a/src/gateway_default_handler.c b/src/gateway_default_handler.c
index 558bf12..4bb360d 100644
--- a/src/gateway_default_handler.c
+++ b/src/gateway_default_handler.c
@@ -166,54 +166,31 @@ static void gw_default_choose_gateway(void) {
   uint64_t cost_ipv4 = UINT64_MAX;
   uint64_t cost_ipv6 = UINT64_MAX;
   struct gateway_entry *gw;
-  struct tc_entry *tc;
   bool dual;
 
   if (olsr_cnf->smart_gw_thresh) {
     /* determine the path cost thresholds */
 
-    gw = olsr_get_inet_gateway(false);
-    if (gw) {
-      tc = olsr_lookup_tc_entry(&gw->originator);
-      if (tc) {
-        uint64_t cost = gw_default_weigh_costs(tc->path_cost, gw->uplink, gw->downlink);
-        cost_ipv4_threshold = gw_default_calc_threshold(cost);
-        eval_cost_ipv4_threshold = true;
-      }
+    uint64_t cost = gw_default_getcosts(olsr_get_inet_gateway(false));
+    if (cost != UINT64_MAX) {
+      cost_ipv4_threshold = gw_default_calc_threshold(cost);
+      eval_cost_ipv4_threshold = true;
     }
-    gw = olsr_get_inet_gateway(true);
-    if (gw) {
-      tc = olsr_lookup_tc_entry(&gw->originator);
-      if (tc) {
-        uint64_t cost = gw_default_weigh_costs(tc->path_cost, gw->uplink, gw->downlink);
-        cost_ipv6_threshold = gw_default_calc_threshold(cost);
-        eval_cost_ipv6_threshold = true;
-      }
+
+    cost = gw_default_getcosts(olsr_get_inet_gateway(true));
+    if (cost != UINT64_MAX) {
+      cost_ipv6_threshold = gw_default_calc_threshold(cost);
+      eval_cost_ipv6_threshold = true;
     }
   }
 
   OLSR_FOR_ALL_GATEWAY_ENTRIES(gw) {
-    uint64_t path_cost;
-    tc = olsr_lookup_tc_entry(&gw->originator);
-
-    if (!tc) {
-      /* gateways should not exist without tc entry */
-      continue;
-    }
+    uint64_t path_cost = gw_default_getcosts(gw);
 
-    if (tc->path_cost == ROUTE_COST_BROKEN) {
-      /* do not consider nodes with an infinite ETX */
+    if (path_cost == UINT64_MAX) {
       continue;
     }
 
-    if (!gw->uplink || !gw->downlink) {
-      /* do not consider nodes without bandwidth or with a uni-directional link */
-      continue;
-    }
-
-    /* determine the path cost */
-    path_cost = gw_default_weigh_costs(tc->path_cost, gw->uplink, gw->downlink);
-
     if (!gw_def_finished_ipv4 && gw->ipv4 && gw->ipv4nat == olsr_cnf->smart_gw_allow_nat && path_cost < cost_ipv4
         && (!eval_cost_ipv4_threshold || (path_cost < cost_ipv4_threshold))) {
       inet_ipv4 = gw;
-- 
1.7.11.7





More information about the Olsr-dev mailing list