sgw: remove struct costs_weights and max_cost_etx_max from the costs API
[olsrd.git] / src / gateway_costs.c
index f0b8d3d..82dcb62 100644 (file)
@@ -1,4 +1,5 @@
 #include "gateway_costs.h"
+#include "olsr_cfg.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -8,7 +9,7 @@ extern "C" {
 #define SCALING_SHIFT 23
 #define MAX_SMARTGW_SPEED 320000000
 
-int64_t gw_costs_weigh(bool up, const struct costs_weights weights, uint32_t path_cost, uint32_t max_cost_etx_max, uint32_t exitUk, uint32_t exitDk) {
+int64_t gw_costs_weigh(bool up, uint32_t path_cost, uint32_t exitUk, uint32_t exitDk) {
   int64_t costU;
   int64_t costD;
   int64_t costE;
@@ -18,7 +19,7 @@ int64_t gw_costs_weigh(bool up, const struct costs_weights weights, uint32_t pat
     return INT64_MAX;
   }
 
-  if (!weights.Detx) {
+  if (!olsr_cnf->smart_gw_divider_etx) {
     /* only consider path costs (classic behaviour) (but scale to 64 bit) */
     return ((int64_t) path_cost) << SCALING_SHIFT_CLASSIC;
   }
@@ -28,14 +29,16 @@ int64_t gw_costs_weigh(bool up, const struct costs_weights weights, uint32_t pat
     return INT64_MAX;
   }
 
-  if ((exitUk >= MAX_SMARTGW_SPEED) && (exitDk >= MAX_SMARTGW_SPEED) && (path_cost < max_cost_etx_max)) {
+  if ((exitUk >= MAX_SMARTGW_SPEED) //
+      && (exitDk >= MAX_SMARTGW_SPEED) //
+      && (path_cost < olsr_cnf->smart_gw_path_max_cost_etx_max)) {
     /* maximum bandwidth AND below max_cost_etx_max: only consider path costs */
     return path_cost;
   }
 
-  costU = (((int64_t) (1000 * weights.WexitU))    << SCALING_SHIFT) / exitUk;
-  costD = (((int64_t) (1000 * weights.WexitD))    << SCALING_SHIFT) / exitDk;
-  costE = (((int64_t) (weights.Wetx * path_cost)) << SCALING_SHIFT) / weights.Detx;
+  costU = (((int64_t) (1000      * olsr_cnf->smart_gw_weight_exitlink_up  )) << SCALING_SHIFT) / exitUk;
+  costD = (((int64_t) (1000      * olsr_cnf->smart_gw_weight_exitlink_down)) << SCALING_SHIFT) / exitDk;
+  costE = (((int64_t) (path_cost * olsr_cnf->smart_gw_weight_etx          )) << SCALING_SHIFT) / olsr_cnf->smart_gw_divider_etx;
 
   return (costU + costD + costE);
 }