Use global "now" in try_udp() and try_mtu().
[tinc] / src / net_packet.c
index a7ddcdf..4719288 100644 (file)
@@ -62,7 +62,8 @@ static void send_udppacket(node_t *, vpn_packet_t *);
 unsigned replaywin = 16;
 bool localdiscovery = true;
 bool udp_discovery = true;
-int udp_discovery_interval = 9;
+int udp_discovery_keepalive_interval = 9;
+int udp_discovery_interval = 2;
 int udp_discovery_timeout = 30;
 
 #define MAX_SEQNO 1073741824
@@ -869,12 +870,12 @@ static void try_udp(node_t* n) {
        if(!udp_discovery)
                return;
 
-       struct timeval now;
-       gettimeofday(&now, NULL);
        struct timeval ping_tx_elapsed;
        timersub(&now, &n->udp_ping_sent, &ping_tx_elapsed);
 
-       if(ping_tx_elapsed.tv_sec >= udp_discovery_interval) {
+       int interval = n->status.udp_confirmed ? udp_discovery_keepalive_interval : udp_discovery_interval;
+
+       if(ping_tx_elapsed.tv_sec >= interval) {
                send_udp_probe_packet(n, MAX(n->minmtu, 16));
                n->udp_ping_sent = now;
 
@@ -965,8 +966,6 @@ static void try_mtu(node_t *n) {
           mtuprobes ==    20: fix MTU, and go to -1
           mtuprobes ==    -1: send one >maxmtu probe every pingtimeout */
 
-       struct timeval now;
-       gettimeofday(&now, NULL);
        struct timeval elapsed;
        timersub(&now, &n->probe_sent_time, &elapsed);
        if(n->mtuprobes >= 0) {
@@ -979,7 +978,6 @@ static void try_mtu(node_t *n) {
 
        try_fix_mtu(n);
 
-       int timeout;
        if(n->mtuprobes < 0) {
                /* After the initial discovery, we only send one >maxmtu probe
                   to detect PMTU increases. */