sgw: do not write uplink/downlink speed directly
authorFerry Huberts <ferry.huberts@pelagic.nl>
Fri, 8 May 2015 07:55:53 +0000 (09:55 +0200)
committerFerry Huberts <ferry.huberts@pelagic.nl>
Fri, 8 May 2015 12:44:51 +0000 (14:44 +0200)
So that we can keep a boolean on whether the speed is zero, which
is needed in a later patch.

Signed-off-by: Ferry Huberts <ferry.huberts@pelagic.nl>
lib/sgwdynspeed/src/speedFile.c
src/cfgparser/olsrd_conf.c
src/cfgparser/oparse.y
src/gateway.c
src/olsr_cfg.h

index bf3a246..0937da2 100644 (file)
@@ -264,10 +264,10 @@ void readSpeedFile(char * fileName) {
        fp = NULL;
 
        if (uplinkSet) {
        fp = NULL;
 
        if (uplinkSet) {
-               olsr_cnf->smart_gw_uplink = uplink;
+         smartgw_set_uplink(olsr_cnf, uplink);
        }
        if (downlinkSet) {
        }
        if (downlinkSet) {
-               olsr_cnf->smart_gw_downlink = downlink;
+         smartgw_set_downlink(olsr_cnf, downlink);
        }
        if (uplinkSet || downlinkSet) {
          refresh_smartgw_netmask();
        }
        if (uplinkSet || downlinkSet) {
          refresh_smartgw_netmask();
index 30e2829..6365d48 100644 (file)
@@ -46,6 +46,7 @@
 #include "net_olsr.h"
 #include "olsr.h"
 #include "egressTypes.h"
 #include "net_olsr.h"
 #include "olsr.h"
 #include "egressTypes.h"
+#include "gateway.h"
 
 #include <assert.h>
 #include <stdio.h>
 
 #include <assert.h>
 #include <stdio.h>
@@ -999,9 +1000,9 @@ set_default_cnf(struct olsrd_config *cnf, char * configuration_file)
   cnf->smart_gw_weight_etx = DEF_GW_WEIGHT_ETX;
   cnf->smart_gw_divider_etx = DEF_GW_DIVIDER_ETX;
   cnf->smart_gw_type = DEF_GW_TYPE;
   cnf->smart_gw_weight_etx = DEF_GW_WEIGHT_ETX;
   cnf->smart_gw_divider_etx = DEF_GW_DIVIDER_ETX;
   cnf->smart_gw_type = DEF_GW_TYPE;
-  cnf->smart_gw_uplink = DEF_UPLINK_SPEED;
+  smartgw_set_uplink(cnf, DEF_UPLINK_SPEED);
   cnf->smart_gw_uplink_nat = DEF_GW_UPLINK_NAT;
   cnf->smart_gw_uplink_nat = DEF_GW_UPLINK_NAT;
-  cnf->smart_gw_downlink = DEF_DOWNLINK_SPEED;
+  smartgw_set_downlink(cnf, DEF_DOWNLINK_SPEED);
 
   cnf->use_src_ip_routes = DEF_USE_SRCIP_ROUTES;
   cnf->set_ip_forward = true;
 
   cnf->use_src_ip_routes = DEF_USE_SRCIP_ROUTES;
   cnf->set_ip_forward = true;
index 5301598..aa42842 100644 (file)
@@ -48,6 +48,7 @@
 #include "../link_set.h"
 #include "../olsr.h"
 #include "../egressTypes.h"
 #include "../link_set.h"
 #include "../olsr.h"
 #include "../egressTypes.h"
+#include "../gateway.h"
 
 #include <stddef.h>
 #include <stdio.h>
 
 #include <stddef.h>
 #include <stdio.h>
@@ -1579,8 +1580,8 @@ ssmart_gw_uplink: TOK_SMART_GW_UPLINK TOK_STRING
 ismart_gw_speed: TOK_SMART_GW_SPEED TOK_INTEGER TOK_INTEGER
 {
        PARSER_DEBUG_PRINTF("Smart gateway speed: %u uplink/%u downlink kbit/s\n", $2->integer, $3->integer);
 ismart_gw_speed: TOK_SMART_GW_SPEED TOK_INTEGER TOK_INTEGER
 {
        PARSER_DEBUG_PRINTF("Smart gateway speed: %u uplink/%u downlink kbit/s\n", $2->integer, $3->integer);
-       olsr_cnf->smart_gw_uplink = $2->integer;
-       olsr_cnf->smart_gw_downlink = $3->integer;
+       smartgw_set_uplink(olsr_cnf, $2->integer);
+       smartgw_set_downlink(olsr_cnf, $3->integer);
        free($2);
        free($3);
 }
        free($2);
        free($3);
 }
index 2b86d6e..5aa2892 100644 (file)
@@ -1558,11 +1558,11 @@ static bool determineBestEgressLink(enum sgw_multi_change_phase phase) {
 
   if (changed || MSGW_ROUTE_FORCED(phase)) {
     if (!bestEgressLink || !bestEgressLink->upCurrent) {
 
   if (changed || MSGW_ROUTE_FORCED(phase)) {
     if (!bestEgressLink || !bestEgressLink->upCurrent) {
-      olsr_cnf->smart_gw_uplink = 0;
-      olsr_cnf->smart_gw_downlink = 0;
+      smartgw_set_uplink(olsr_cnf, 0);
+      smartgw_set_downlink(olsr_cnf, 0);
     } else {
     } else {
-      olsr_cnf->smart_gw_uplink = bestEgressLink->bwCurrent.egressUk;
-      olsr_cnf->smart_gw_downlink = bestEgressLink->bwCurrent.egressDk;
+      smartgw_set_uplink(olsr_cnf, bestEgressLink->bwCurrent.egressUk);
+      smartgw_set_downlink(olsr_cnf, bestEgressLink->bwCurrent.egressDk);
     }
     refresh_smartgw_netmask();
   }
     }
     refresh_smartgw_netmask();
   }
index 00cda23..8eb9938 100644 (file)
@@ -333,6 +333,7 @@ struct olsrd_config {
   uint32_t smart_gw_divider_etx;
   enum smart_gw_uplinktype smart_gw_type;
   uint32_t smart_gw_uplink, smart_gw_downlink;
   uint32_t smart_gw_divider_etx;
   enum smart_gw_uplinktype smart_gw_type;
   uint32_t smart_gw_uplink, smart_gw_downlink;
+  bool smart_gateway_bandwidth_zero;
   struct olsr_ip_prefix smart_gw_prefix;
 
   /* Main address of this node */
   struct olsr_ip_prefix smart_gw_prefix;
 
   /* Main address of this node */
@@ -429,6 +430,28 @@ extern "C" {
   void win32_olsrd_free(void *ptr);
 #endif /* defined _WIN32 */
 
   void win32_olsrd_free(void *ptr);
 #endif /* defined _WIN32 */
 
+  /*
+   * Smart-Gateway uplink/downlink accessors
+   */
+
+  static inline void set_smart_gateway_bandwidth_zero(struct olsrd_config *cnf) {
+    cnf->smart_gateway_bandwidth_zero = !cnf->smart_gw_uplink || !cnf->smart_gw_downlink;
+  }
+
+  static inline void smartgw_set_uplink(struct olsrd_config *cnf, uint32_t uplink) {
+    cnf->smart_gw_uplink = uplink;
+    set_smart_gateway_bandwidth_zero(cnf);
+  }
+
+  static inline void smartgw_set_downlink(struct olsrd_config *cnf, uint32_t downlink) {
+    cnf->smart_gw_downlink = downlink;
+    set_smart_gateway_bandwidth_zero(cnf);
+  }
+
+  static inline bool smartgw_is_zero_bandwidth(struct olsrd_config *cnf) {
+    return cnf->smart_gateway_bandwidth_zero;
+  }
+
 #if defined __cplusplus
 }
 #endif /* defined __cplusplus */
 #if defined __cplusplus
 }
 #endif /* defined __cplusplus */