PUD: add uplink interval parameters
authorFerry Huberts <f.huberts@mindef.nl>
Thu, 14 Jul 2011 13:26:46 +0000 (15:26 +0200)
committerFerry Huberts <f.huberts@mindef.nl>
Tue, 18 Oct 2011 10:08:26 +0000 (12:08 +0200)
Signed-off-by: Ferry Huberts <f.huberts@mindef.nl>
lib/pud/doc/olsrd.conf.default.pud
lib/pud/src/configuration.c
lib/pud/src/configuration.h
lib/pud/src/pudOlsrdPlugin.h

index c593dba..c276e82 100644 (file)
@@ -589,6 +589,22 @@ LoadPlugin "./lib/pud/olsrd_pud.so.1.0.0"
     #
     #PlParam     "updateIntervalMoving"         "5"
 
+    # uplinkUpdateIntervalStationary is the interval (in seconds) between
+    #                                position updates sent over the uplink when
+    #                                the node is stationary
+    #
+    # Default: 180
+    #
+    #PlParam     "uplinkUpdateIntervalStationary"  "180"
+
+    # uplinkUpdateIntervalMoving is the interval (in seconds) between position
+    #                            updates sent over the OLSR network when the
+    #                            node is moving
+    #
+    # Default: 15
+    #
+    #PlParam     "uplinkUpdateIntervalMoving"      "15"
+
     # movingSpeedThreshold is the speed from which we consider the node is
     #                      moving
     #
index 931683d..cf61764 100644 (file)
@@ -1248,6 +1248,106 @@ int setUpdateIntervalMoving(const char *value, void *data __attribute__ ((unused
        return false;
 }
 
+/*
+ * uplinkUpdateIntervalStationary
+ */
+
+/** The uplink stationary interval update plugin parameter (in seconds) */
+static unsigned long long uplinkUpdateIntervalStationary = PUD_UPLINK_UPDATE_INTERVAL_STATIONARY_DEFAULT;
+
+/**
+ @return
+ The uplink stationary interval update plugin parameter (in seconds)
+ */
+unsigned long long getUplinkUpdateIntervalStationary(void) {
+       return uplinkUpdateIntervalStationary;
+}
+
+/**
+ Set uplink stationary interval update plugin parameter
+
+ @param value
+ The uplink stationary interval update plugin parameter (in seconds)
+ @param data
+ Unused
+ @param addon
+ Unused
+
+ @return
+ - true when an error is detected
+ - false otherwise
+ */
+int setUplinkUpdateIntervalStationary(const char *value, void *data __attribute__ ((unused)),
+               set_plugin_parameter_addon addon __attribute__ ((unused))) {
+       static const char * valueName = PUD_UPLINK_UPDATE_INTERVAL_STATIONARY_NAME;
+       unsigned long long uplinkUpdateIntervalStationaryNew;
+
+       assert (value != NULL);
+
+       if (!readULL(valueName, value, &uplinkUpdateIntervalStationaryNew)) {
+               return true;
+       }
+
+       if (uplinkUpdateIntervalStationaryNew < 1) {
+               pudError(false, "Configured %s must be at least 1", valueName);
+               return true;
+       }
+
+       uplinkUpdateIntervalStationary = uplinkUpdateIntervalStationaryNew;
+
+       return false;
+}
+
+/*
+ * uplinkUpdateIntervalMoving
+ */
+
+/** The uplink moving interval update plugin parameter (in seconds) */
+static unsigned long long uplinkUpdateIntervalMoving = PUD_UPLINK_UPDATE_INTERVAL_MOVING_DEFAULT;
+
+/**
+ @return
+ The uplink moving interval update plugin parameter (in seconds)
+ */
+unsigned long long getUplinkUpdateIntervalMoving(void) {
+       return uplinkUpdateIntervalMoving;
+}
+
+/**
+ Set uplink moving interval update plugin parameter
+
+ @param value
+ The uplink moving interval update plugin parameter (in seconds)
+ @param data
+ Unused
+ @param addon
+ Unused
+
+ @return
+ - true when an error is detected
+ - false otherwise
+ */
+int setUplinkUpdateIntervalMoving(const char *value, void *data __attribute__ ((unused)),
+               set_plugin_parameter_addon addon __attribute__ ((unused))) {
+       static const char * valueName = PUD_UPLINK_UPDATE_INTERVAL_MOVING_NAME;
+       unsigned long long uplinkUpdateIntervalMovingNew;
+
+       assert (value != NULL);
+
+       if (!readULL(valueName, value, &uplinkUpdateIntervalMovingNew)) {
+               return true;
+       }
+
+       if (uplinkUpdateIntervalMovingNew < 1) {
+               pudError(false, "Configured %s must be at least 1", valueName);
+               return true;
+       }
+
+       uplinkUpdateIntervalMoving = uplinkUpdateIntervalMovingNew;
+
+       return false;
+}
+
 /*
  * movingSpeedThreshold
  */
@@ -1814,6 +1914,12 @@ unsigned int checkConfig(void) {
                retval = false;
        }
 
+       if (uplinkUpdateIntervalMoving > uplinkUpdateIntervalStationary) {
+               pudError(false,"The uplink update interval for moving situations must not be"
+               " larger than that for stationary situations");
+               retval = false;
+       }
+
        return retval;
 }
 
index 65ce115..03ae923 100644 (file)
@@ -169,6 +169,26 @@ unsigned long long getUpdateIntervalMoving(void);
 int setUpdateIntervalMoving(const char *value, void *data,
                set_plugin_parameter_addon addon);
 
+/** The name of the uplink stationary update interval plugin parameter */
+#define PUD_UPLINK_UPDATE_INTERVAL_STATIONARY_NAME     "uplinkUpdateIntervalStationary"
+
+/** The default value of the uplink stationary update interval plugin parameter */
+#define PUD_UPLINK_UPDATE_INTERVAL_STATIONARY_DEFAULT  180
+
+unsigned long long getUplinkUpdateIntervalStationary(void);
+int setUplinkUpdateIntervalStationary(const char *value, void *data,
+               set_plugin_parameter_addon addon);
+
+/** The name of the uplink moving update interval plugin parameter */
+#define PUD_UPLINK_UPDATE_INTERVAL_MOVING_NAME         "uplinkUpdateIntervalMoving"
+
+/** The default value of the uplink moving update interval plugin parameter */
+#define PUD_UPLINK_UPDATE_INTERVAL_MOVING_DEFAULT              15
+
+unsigned long long getUplinkUpdateIntervalMoving(void);
+int setUplinkUpdateIntervalMoving(const char *value, void *data,
+               set_plugin_parameter_addon addon);
+
 /** The name of the moving speed threshold plugin parameter */
 #define PUD_MOVING_SPEED_THRESHOLD_NAME                        "movingSpeedThreshold"
 
index 4d781de..2ebac83 100644 (file)
@@ -33,6 +33,8 @@ static const struct olsrd_plugin_parameters plugin_parameters[] = {
        {       .name = PUD_OLSR_TTL_NAME, .set_plugin_parameter = &setOlsrTtl, .data = NULL},
        {       .name = PUD_UPDATE_INTERVAL_STATIONARY_NAME, .set_plugin_parameter = &setUpdateIntervalStationary, .data = NULL},
        {       .name = PUD_UPDATE_INTERVAL_MOVING_NAME, .set_plugin_parameter = &setUpdateIntervalMoving, .data = NULL},
+       {       .name = PUD_UPLINK_UPDATE_INTERVAL_STATIONARY_NAME, .set_plugin_parameter = &setUplinkUpdateIntervalStationary, .data = NULL},
+       {       .name = PUD_UPLINK_UPDATE_INTERVAL_MOVING_NAME, .set_plugin_parameter = &setUplinkUpdateIntervalMoving, .data = NULL},
        {       .name = PUD_MOVING_SPEED_THRESHOLD_NAME, .set_plugin_parameter = &setMovingSpeedThreshold, .data = NULL},
        {       .name = PUD_MOVING_DISTANCE_THRESHOLD_NAME, .set_plugin_parameter = &setMovingDistanceThreshold, .data = NULL},
        {       .name = PUD_DOP_MULTIPLIER_NAME, .set_plugin_parameter = &setDopMultiplier, .data = NULL},