From 0d937847154b13725ae718abf4b9b07d9b924242 Mon Sep 17 00:00:00 2001 From: Masaq- Date: Fri, 9 Jun 2017 03:50:46 +0000 Subject: [PATCH] option (-J0) to autodetect delay variance factor --- src/client.c | 11 ++++++++++- src/client.h | 1 + src/iodine.c | 7 ++++++- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/client.c b/src/client.c index 6730a46..343d2fb 100644 --- a/src/client.c +++ b/src/client.c @@ -285,6 +285,7 @@ got_response(int id, int immediate, int fail) { struct timeval now, rtt; time_t rtt_ms; + static time_t rtt_min_ms = 1; gettimeofday(&now, NULL); QTRACK_DEBUG(4, "Got answer id %d (%s)%s", id, immediate ? "immediate" : "lazy", @@ -322,8 +323,16 @@ got_response(int id, int immediate, int fail) this.rtt_total_ms += rtt_ms; this.num_immediate++; - if (this.autodetect_server_timeout) + if (this.autodetect_server_timeout) { + if (this.autodetect_delay_variance) { + if (rtt_ms > 0 && (rtt_ms < rtt_min_ms || 1 == rtt_min_ms)) { + rtt_min_ms = rtt_ms; + } + this.downstream_delay_variance = (double) (this.rtt_total_ms / + this.num_immediate) / rtt_min_ms; + } update_server_timeout(0); + } } /* Remove query info from buffer to mark it as answered */ diff --git a/src/client.h b/src/client.h index 6d1f013..6a3645e 100644 --- a/src/client.h +++ b/src/client.h @@ -90,6 +90,7 @@ struct client_instance { time_t downstream_timeout_ms; double downstream_delay_variance; int autodetect_server_timeout; + int autodetect_delay_variance; /* Cumulative Round-Trip-Time in ms */ time_t rtt_total_ms; diff --git a/src/iodine.c b/src/iodine.c index ab389d9..0de74a2 100644 --- a/src/iodine.c +++ b/src/iodine.c @@ -83,6 +83,7 @@ struct client_instance this; .num_immediate = 1, \ .rtt_total_ms = 200, \ .downstream_delay_variance = 2.0, \ + .autodetect_delay_variance = 0, \ .remote_forward_addr = {.ss_family = AF_UNSPEC} static struct client_instance preset_default = { @@ -265,7 +266,7 @@ help() fprintf(stderr, " -W upstream fragment window size (default: 8 frags)\n"); fprintf(stderr, " -i server-side request timeout in lazy mode (default: auto)\n"); fprintf(stderr, " -j downstream fragment ACK timeout, implies -i4 (default: 2 sec)\n"); - fprintf(stderr, " -J downstream fragment ACK delay variance factor (default: 2.0)\n"); + fprintf(stderr, " -J downstream fragment ACK delay variance factor (default: 2.0), 0: auto\n"); //fprintf(stderr, " --nodrop disable TCP packet-dropping optimisations\n"); fprintf(stderr, " -c 1: use downstream compression (default), 0: disable\n"); fprintf(stderr, " -C 1: use upstream compression (default), 0: disable\n\n"); @@ -577,6 +578,10 @@ main(int argc, char **argv) break; case 'J': this.downstream_delay_variance = strtod(optarg, NULL); + if (0.0 == this.downstream_delay_variance) { + this.autodetect_delay_variance = 1; + this.downstream_delay_variance = 2.0; + } break; case 's': this.send_interval_ms = atoi(optarg);