]> git.meshlink.io Git - meshlink/commitdiff
Move pinginterval pingtimeout and maxtimeout to mesh
authorSaverio Proto <zioproto@gmail.com>
Thu, 24 Apr 2014 13:06:30 +0000 (15:06 +0200)
committerSaverio Proto <zioproto@gmail.com>
Thu, 24 Apr 2014 13:06:30 +0000 (15:06 +0200)
src/conf.c
src/conf.h
src/meshlink_internal.h
src/net.c
src/net_packet.c
src/net_setup.c
src/net_socket.c
src/protocol.c

index 423afa1a9ffe7ad6825a0602b066804d9714a50d..08467e50f983050d848ae3b06b59a7f9b8acd0ef 100644 (file)
@@ -30,9 +30,6 @@
 #include "utils.h"              /* for cp */
 #include "xalloc.h"
 
-int pinginterval = 0;           /* seconds between pings */
-int pingtimeout = 0;            /* seconds to wait for response */
-
 static int config_compare(const config_t *a, const config_t *b) {
        int result;
 
index 27561ef7a75f8f7c3a699b70db3fccddd19af59d..39eb056cb98e7546253b6827d79ec17a6c1a09ab 100644 (file)
@@ -30,9 +30,6 @@ typedef struct config_t {
        int line;
 } config_t;
 
-extern int pinginterval;
-extern int pingtimeout;
-extern int maxtimeout;
 
 extern void init_configuration(struct splay_tree_t **);
 extern void exit_configuration(struct splay_tree_t **);
index 1e4964241a9a36ee02079ee02462a981efd99e6f..00f68e46f75ef959187942390e2000f3373e6026 100644 (file)
@@ -92,6 +92,9 @@ struct meshlink_handle {
        struct ecdsa *invitation_key;
 
        debug_t debug_level;
+       int pinginterval;       /* seconds between pings */
+       int pingtimeout;        /* seconds to wait for response */
+       int maxtimeout;
 };
 
 /// A handle for a MeshLink node.
index 294014231b1b04f0f556c11d826b57f45596414f..a2cc3ed7d84d3b3f0ea6bf9083c9af86925722fa 100644 (file)
--- a/src/net.c
+++ b/src/net.c
@@ -124,11 +124,11 @@ void terminate_connection(connection_t *c, bool report) {
 */
 static void timeout_handler(void *data) {
        for list_each(connection_t, c, mesh->connections) {
-               if(c->last_ping_time + pingtimeout <= now.tv_sec) {
+               if(c->last_ping_time + mesh->pingtimeout <= now.tv_sec) {
                        if(c->status.active) {
                                if(c->status.pinged) {
                                        logger(DEBUG_CONNECTIONS, LOG_INFO, "%s (%s) didn't respond to PING in %ld seconds", c->name, c->hostname, (long)now.tv_sec - c->last_ping_time);
-                               } else if(c->last_ping_time + pinginterval <= now.tv_sec) {
+                               } else if(c->last_ping_time + mesh->pinginterval <= now.tv_sec) {
                                        send_ping(c);
                                        continue;
                                } else {
@@ -144,7 +144,7 @@ static void timeout_handler(void *data) {
                }
        }
 
-       timeout_set(data, &(struct timeval){pingtimeout, rand() % 100000});
+       timeout_set(data, &(struct timeval){mesh->pingtimeout, rand() % 100000});
 }
 
 static void periodic_handler(void *data) {
@@ -332,8 +332,8 @@ void retry(void) {
   this is where it all happens...
 */
 int main_loop(void) {
-       timeout_add(&mesh->pingtimer, timeout_handler, &mesh->pingtimer, &(struct timeval){pingtimeout, rand() % 100000});
-       timeout_add(&mesh->periodictimer, periodic_handler, &mesh->periodictimer, &(struct timeval){pingtimeout, rand() % 100000});
+       timeout_add(&mesh->pingtimer, timeout_handler, &mesh->pingtimer, &(struct timeval){mesh->pingtimeout, rand() % 100000});
+       timeout_add(&mesh->periodictimer, periodic_handler, &mesh->periodictimer, &(struct timeval){mesh->pingtimeout, rand() % 100000});
 
        if(!event_loop()) {
                logger(DEBUG_ALWAYS, LOG_ERR, "Error while waiting for input: %s", strerror(errno));
index d9a73f6f36c06debb1a9842c2da2f625a8469bed..281fd973c7fddba951bb12f1ddb0b1ea996e4427 100644 (file)
@@ -75,7 +75,7 @@ static void send_mtu_probe_handler(void *data) {
        if(n->mtuprobes > 32) {
                if(!n->minmtu) {
                        n->mtuprobes = 31;
-                       timeout = pinginterval;
+                       timeout = mesh->pinginterval;
                        goto end;
                }
 
@@ -102,10 +102,10 @@ static void send_mtu_probe_handler(void *data) {
        }
 
        if(n->mtuprobes == 31) {
-               timeout = pinginterval;
+               timeout = mesh->pinginterval;
                goto end;
        } else if(n->mtuprobes == 32) {
-               timeout = pingtimeout;
+               timeout = mesh->pingtimeout;
        }
 
        for(int i = 0; i < 4 + mesh->localdiscovery; i++) {
index 7bee9d933b39a9ab19554bb1bf0815b1bfd1e555..e168f6acd4d8a7416378ea0d962821ed730d2060 100644 (file)
@@ -176,7 +176,7 @@ char *get_name(void) {
 bool setup_myself_reloadable(void) {
        mesh->localdiscovery = true;
        keylifetime = 3600; // TODO: check if this can be removed as well
-       maxtimeout = 900;
+       mesh->maxtimeout = 900;
        autoconnect = 3;
        mesh->self->options |= OPTION_PMTU_DISCOVERY;
 
@@ -370,8 +370,8 @@ bool setup_network(void) {
        init_edges();
        init_requests();
 
-       pinginterval = 60;
-       pingtimeout = 5;
+       mesh->pinginterval = 60;
+       mesh->pingtimeout = 5;
        maxoutbufsize = 10 * MTU;
 
        if(!setup_myself())
index fbafc22bb86cd34dcc9b2e298fc84a7a4cbdfb50..7f87d9c42056fbc9ddd40b812762e59473d9a45d 100644 (file)
@@ -37,7 +37,6 @@
 #endif
 
 int addressfamily = AF_UNSPEC;
-int maxtimeout = 900;
 int seconds_till_retry = 5;
 int max_connection_burst = 100;
 
@@ -240,8 +239,8 @@ static void retry_outgoing_handler(void *data) {
 void retry_outgoing(outgoing_t *outgoing) {
        outgoing->timeout += 5;
 
-       if(outgoing->timeout > maxtimeout)
-               outgoing->timeout = maxtimeout;
+       if(outgoing->timeout > mesh->maxtimeout)
+               outgoing->timeout = mesh->maxtimeout;
 
        timeout_add(&outgoing->ev, retry_outgoing_handler, outgoing, &(struct timeval){outgoing->timeout, rand() % 100000});
 
index aa434ee46b23cf3aac870ba0778c2e8770a1d386..3e6db47e05c154409dc5107ffd034150e62978f2 100644 (file)
@@ -167,7 +167,7 @@ static void age_past_requests(void *data) {
        int left = 0, deleted = 0;
 
        for splay_each(past_request_t, p, past_request_tree) {
-               if(p->firstseen + pinginterval <= now.tv_sec)
+               if(p->firstseen + mesh->pinginterval <= now.tv_sec)
                        splay_delete_node(past_request_tree, node), deleted++;
                else
                        left++;