mirror of
https://github.com/yarrick/iodine.git
synced 2025-04-10 04:21:01 +00:00
add fine-tuning option -J to set delay variance factor
This commit is contained in:
parent
b4f42ec82d
commit
d26ddb9a07
3 changed files with 14 additions and 3 deletions
|
@ -209,7 +209,7 @@ update_server_timeout(int handshake)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* update up/down window timeouts to something reasonable */
|
/* update up/down window timeouts to something reasonable */
|
||||||
this.downstream_timeout_ms = rtt_ms * 2;
|
this.downstream_timeout_ms = rtt_ms * this.downstream_delay_variance / 100;
|
||||||
this.outbuf->timeout = ms_to_timeval(this.downstream_timeout_ms);
|
this.outbuf->timeout = ms_to_timeval(this.downstream_timeout_ms);
|
||||||
|
|
||||||
if (handshake) {
|
if (handshake) {
|
||||||
|
|
|
@ -88,6 +88,7 @@ struct client_instance {
|
||||||
/* Server response timeout in ms and downstream window timeout */
|
/* Server response timeout in ms and downstream window timeout */
|
||||||
time_t server_timeout_ms;
|
time_t server_timeout_ms;
|
||||||
time_t downstream_timeout_ms;
|
time_t downstream_timeout_ms;
|
||||||
|
time_t downstream_delay_variance;
|
||||||
int autodetect_server_timeout;
|
int autodetect_server_timeout;
|
||||||
|
|
||||||
/* Cumulative Round-Trip-Time in ms */
|
/* Cumulative Round-Trip-Time in ms */
|
||||||
|
|
14
src/iodine.c
14
src/iodine.c
|
@ -82,6 +82,7 @@ struct client_instance this;
|
||||||
.next_downstream_ack = -1, \
|
.next_downstream_ack = -1, \
|
||||||
.num_immediate = 1, \
|
.num_immediate = 1, \
|
||||||
.rtt_total_ms = 200, \
|
.rtt_total_ms = 200, \
|
||||||
|
.downstream_delay_variance = 200, \
|
||||||
.remote_forward_addr = {.ss_family = AF_UNSPEC}
|
.remote_forward_addr = {.ss_family = AF_UNSPEC}
|
||||||
|
|
||||||
static struct client_instance preset_default = {
|
static struct client_instance preset_default = {
|
||||||
|
@ -217,7 +218,7 @@ print_usage()
|
||||||
extern char *__progname;
|
extern char *__progname;
|
||||||
|
|
||||||
fprintf(stderr, "Usage: %s [-v] [-h] [-Y preset] [-V sec] [-X port] [-f] [-r] [-u user] [-t chrootdir] [-d device] "
|
fprintf(stderr, "Usage: %s [-v] [-h] [-Y preset] [-V sec] [-X port] [-f] [-r] [-u user] [-t chrootdir] [-d device] "
|
||||||
"[-w downfrags] [-W upfrags] [-i sec -j sec] [-I sec] [-c 0|1] [-C 0|1] [-s ms] "
|
"[-w downfrags] [-W upfrags] [-i sec -j sec] [-I sec] [-J var] [-c 0|1] [-C 0|1] [-s ms] "
|
||||||
"[-P password] [-m maxfragsize] [-M maxlen] [-T type] [-O enc] [-L 0|1] [-R port[,host] ] "
|
"[-P password] [-m maxfragsize] [-M maxlen] [-T type] [-O enc] [-L 0|1] [-R port[,host] ] "
|
||||||
"[-z context] [-F pidfile] topdomain [nameserver1 [nameserver2 [...]]]\n", __progname);
|
"[-z context] [-F pidfile] topdomain [nameserver1 [nameserver2 [...]]]\n", __progname);
|
||||||
}
|
}
|
||||||
|
@ -264,6 +265,7 @@ help()
|
||||||
fprintf(stderr, " -W upstream fragment window size (default: 8 frags)\n");
|
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, " -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 timeout, implies -i4 (default: 2 sec)\n");
|
||||||
|
fprintf(stderr, " -J downstream fragment ACK delay variance factor (default: 2.0)\n");
|
||||||
//fprintf(stderr, " --nodrop disable TCP packet-dropping optimisations\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 downstream compression (default), 0: disable\n");
|
||||||
fprintf(stderr, " -C 1: use upstream compression (default), 0: disable\n\n");
|
fprintf(stderr, " -C 1: use upstream compression (default), 0: disable\n\n");
|
||||||
|
@ -419,7 +421,7 @@ main(int argc, char **argv)
|
||||||
* This is so that all options override preset values regardless of order in command line */
|
* This is so that all options override preset values regardless of order in command line */
|
||||||
int optind_orig = optind, preset_id = -1;
|
int optind_orig = optind, preset_id = -1;
|
||||||
|
|
||||||
static char *iodine_args_short = "46vfDhrY:s:V:c:C:i:j:u:t:d:R:P:w:W:m:M:F:T:O:L:I:";
|
static char *iodine_args_short = "46vfDhrY:s:V:c:C:i:j:J:u:t:d:R:P:w:W:m:M:F:T:O:L:I:";
|
||||||
|
|
||||||
while ((choice = getopt_long(argc, argv, iodine_args_short, iodine_args, NULL))) {
|
while ((choice = getopt_long(argc, argv, iodine_args_short, iodine_args, NULL))) {
|
||||||
/* Check if preset has been found yet so we don't process any other options */
|
/* Check if preset has been found yet so we don't process any other options */
|
||||||
|
@ -573,6 +575,9 @@ main(int argc, char **argv)
|
||||||
this.server_timeout_ms = 4000;
|
this.server_timeout_ms = 4000;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 'J':
|
||||||
|
this.downstream_delay_variance = strtod(optarg, NULL) * 100;
|
||||||
|
break;
|
||||||
case 's':
|
case 's':
|
||||||
this.send_interval_ms = atoi(optarg);
|
this.send_interval_ms = atoi(optarg);
|
||||||
if (this.send_interval_ms < 0)
|
if (this.send_interval_ms < 0)
|
||||||
|
@ -691,6 +696,11 @@ main(int argc, char **argv)
|
||||||
usage();
|
usage();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.downstream_delay_variance < 10) {
|
||||||
|
warnx("Delay variance factor must be more than 0.1 to prevent excessive retransmits.");
|
||||||
|
usage();
|
||||||
|
}
|
||||||
|
|
||||||
if (!this.lazymode && this.max_timeout_ms > 1000) {
|
if (!this.lazymode && this.max_timeout_ms > 1000) {
|
||||||
fprintf(stderr, "Warning: Target interval of >1 second in immediate mode will cause high latency.\n");
|
fprintf(stderr, "Warning: Target interval of >1 second in immediate mode will cause high latency.\n");
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue