sgw: remove struct costs_weights and max_cost_etx_max from the costs API
authorFerry Huberts <ferry.huberts@pelagic.nl>
Sun, 10 Apr 2016 18:38:29 +0000 (20:38 +0200)
committerFerry Huberts <ferry.huberts@pelagic.nl>
Mon, 11 Apr 2016 10:38:29 +0000 (12:38 +0200)
They all come from olsr_cnf, use them directly.

Signed-off-by: Ferry Huberts <ferry.huberts@pelagic.nl>
src/egressFile.c
src/gateway_costs.c
src/gateway_costs.h
src/gateway_default_handler.c

index 8ac8e97..311ef41 100644 (file)
 /** the maximum length of a line that is read from the file */
 #define LINE_LENGTH 256
 
-/** the weights for the cost calculation */
-static struct costs_weights gw_costs_weights_storage;
-static struct costs_weights * gw_costs_weights = NULL;
-
 /** regular expression describing a comment */
 static const char * regexComment = "^([[:space:]]*|[[:space:]#]+.*)$";
 
@@ -296,19 +292,9 @@ struct sgw_egress_if * findEgressInterfaceByIndex(int if_index) {
  * @return true when the costs changed
  */
 bool egressBwCalculateCosts(struct egress_if_bw * bw, bool up) {
-  if (!gw_costs_weights) {
-    gw_costs_weights_storage.WexitU = olsr_cnf->smart_gw_weight_exitlink_up;
-    gw_costs_weights_storage.WexitD = olsr_cnf->smart_gw_weight_exitlink_down;
-    gw_costs_weights_storage.Wetx = olsr_cnf->smart_gw_weight_etx;
-    gw_costs_weights_storage.Detx = olsr_cnf->smart_gw_divider_etx;
-    gw_costs_weights = &gw_costs_weights_storage;
-  }
-
-  {
-    int64_t costsPrevious = bw->costs;
-    bw->costs = gw_costs_weigh(up, gw_costs_weights_storage, bw->path_cost, olsr_cnf->smart_gw_path_max_cost_etx_max, bw->egressUk, bw->egressDk);
-    return (costsPrevious != bw->costs);
-  }
+  int64_t costsPrevious = bw->costs;
+  bw->costs = gw_costs_weigh(up, bw->path_cost, bw->egressUk, bw->egressDk);
+  return (costsPrevious != bw->costs);
 }
 
 /**
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);
 }
index 5cafc90..d68c4e9 100644 (file)
  * signed 64 bits number.
  */
 
-#include "stdint.h"
-#include "stdbool.h"
+#include <stdint.h>
+#include <stdbool.h>
 
 #ifdef __cplusplus
 extern "C" {
 #endif /* __cplusplus */
 
-  /**
-   * Structure to keep weighing factors for the gw_costs_weigh function
-   */
-  struct costs_weights {
-      uint8_t WexitU;
-      uint8_t WexitD;
-      uint8_t Wetx;
-      uint32_t Detx;
-  };
 
   /**
    * Weigh the path costs and the gateway bandwidth.
@@ -82,15 +73,13 @@ extern "C" {
    * the gateway costs are equal to path_cost.
    *
    * @param up true when the relevant interface is up
-   * @param weights the weights for the calculation
    * @param path_cost the (ETX) path cost to the gateway
-   * @param max_cost_etx_max the maximum (ETX) path cost for when path_costs is the maximum
    * to take the calculation shortcut.
    * @param exitUk the gateway exit link uplink bandwidth (in kbps)
    * @param exitDk the gateway exit link downlink bandwidth (in kbps)
    * @return the weighed path cost, INT64_MAX when up is false or when exitUk and/or exitDk are zero
    */
-  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);
 
 #ifdef __cplusplus
 }
index da1fd63..b07075f 100644 (file)
@@ -18,7 +18,6 @@ static uint32_t gw_def_stablecount;
 static bool gw_def_choose_new_ipv4_gw;
 static bool gw_def_choose_new_ipv6_gw;
 static struct timer_entry *gw_def_timer;
-static struct costs_weights gw_costs_weights;
 
 /* forward declarations */
 static void gw_default_init(void);
@@ -206,11 +205,6 @@ static void gw_default_init(void) {
   gw_def_choose_new_ipv4_gw = true;
   gw_def_choose_new_ipv6_gw = true;
   gw_def_timer = NULL;
-
-  gw_costs_weights.WexitU = olsr_cnf->smart_gw_weight_exitlink_up;
-  gw_costs_weights.WexitD = olsr_cnf->smart_gw_weight_exitlink_down;
-  gw_costs_weights.Wetx = olsr_cnf->smart_gw_weight_etx;
-  gw_costs_weights.Detx = olsr_cnf->smart_gw_divider_etx;
 }
 
 /**
@@ -264,7 +258,7 @@ static int64_t gw_default_getcosts(struct gateway_entry *gw) {
   }
 
   /* determine the path cost */
-  return gw_costs_weigh(true, gw_costs_weights, tc->path_cost, olsr_cnf->smart_gw_path_max_cost_etx_max, gw->uplink, gw->downlink);
+  return gw_costs_weigh(true, tc->path_cost, gw->uplink, gw->downlink);
 }
 
 /**