Merging upstream version 2.7.0.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
01b97c50cd
commit
424dd7d6cc
27 changed files with 1877 additions and 102 deletions
|
@ -52,7 +52,8 @@
|
|||
#define DEFAULT_SERVER_NAME "127.0.0.1"
|
||||
#define DEFAULT_SERVER_PORT 53
|
||||
#define DEFAULT_SERVER_DOT_PORT 853
|
||||
#define DEFAULT_SERVER_PORTS "udp/tcp 53 or DoT 853"
|
||||
#define DEFAULT_SERVER_DOH_PORT 443
|
||||
#define DEFAULT_SERVER_PORTS "udp/tcp 53, DoT 853 or DoH 443"
|
||||
#define DEFAULT_LOCAL_PORT 0
|
||||
#define DEFAULT_MAX_OUTSTANDING 100
|
||||
#define DEFAULT_TIMEOUT 5
|
||||
|
@ -407,6 +408,8 @@ setup(int argc, char** argv, config_t* config)
|
|||
const char* edns_option = NULL;
|
||||
const char* tsigkey = NULL;
|
||||
const char* mode = 0;
|
||||
const char* doh_uri = DEFAULT_DOH_URI;
|
||||
const char* doh_method = DEFAULT_DOH_METHOD;
|
||||
|
||||
memset(config, 0, sizeof(*config));
|
||||
config->argc = argc;
|
||||
|
@ -422,7 +425,7 @@ setup(int argc, char** argv, config_t* config)
|
|||
perf_opt_add('f', perf_opt_string, "family",
|
||||
"address family of DNS transport, inet or inet6", "any",
|
||||
&family);
|
||||
perf_opt_add('m', perf_opt_string, "mode", "set transport mode: udp, tcp or dot", "udp", &mode);
|
||||
perf_opt_add('m', perf_opt_string, "mode", "set transport mode: udp, tcp, dot or doh", "udp", &mode);
|
||||
perf_opt_add('s', perf_opt_string, "server_addr",
|
||||
"the server to query", DEFAULT_SERVER_NAME, &server_name);
|
||||
perf_opt_add('p', perf_opt_port, "port",
|
||||
|
@ -480,6 +483,11 @@ setup(int argc, char** argv, config_t* config)
|
|||
perf_opt_add('v', perf_opt_boolean, NULL,
|
||||
"verbose: report each query and additional information to stdout",
|
||||
NULL, &config->verbose);
|
||||
perf_long_opt_add("doh-uri", perf_opt_string, "doh_uri",
|
||||
"the URI to use for DNS-over-HTTPS", DEFAULT_DOH_URI, &doh_uri);
|
||||
perf_long_opt_add("doh-method", perf_opt_string, "doh_method",
|
||||
"the HTTP method to use for DNS-over-HTTPS: GET or POST", DEFAULT_DOH_METHOD, &doh_method);
|
||||
|
||||
bool log_stdout = false;
|
||||
perf_opt_add('W', perf_opt_boolean, NULL, "log warnings and errors to stdout instead of stderr", NULL, &log_stdout);
|
||||
|
||||
|
@ -493,9 +501,27 @@ setup(int argc, char** argv, config_t* config)
|
|||
config->mode = perf_net_parsemode(mode);
|
||||
|
||||
if (!server_port) {
|
||||
server_port = config->mode == sock_dot ? DEFAULT_SERVER_DOT_PORT : DEFAULT_SERVER_PORT;
|
||||
switch (config->mode) {
|
||||
case sock_doh:
|
||||
server_port = DEFAULT_SERVER_DOH_PORT;
|
||||
break;
|
||||
case sock_dot:
|
||||
server_port = DEFAULT_SERVER_DOT_PORT;
|
||||
break;
|
||||
default:
|
||||
server_port = DEFAULT_SERVER_PORT;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (doh_uri) {
|
||||
perf_net_doh_parse_uri(doh_uri);
|
||||
}
|
||||
if (doh_method) {
|
||||
perf_net_doh_parse_method(doh_method);
|
||||
}
|
||||
perf_net_doh_set_max_concurrent_streams(config->max_outstanding);
|
||||
|
||||
if (family != NULL)
|
||||
config->family = perf_net_parsefamily(family);
|
||||
perf_net_parseserver(config->family, server_name, server_port,
|
||||
|
@ -1181,13 +1207,11 @@ threadinfo_init(threadinfo_t* tinfo, const config_t* config,
|
|||
tinfo->socks[i] = perf_net_opensocket(config->mode, &config->server_addr,
|
||||
&config->local_addr,
|
||||
socket_offset++,
|
||||
config->bufsize);
|
||||
config->bufsize,
|
||||
tinfo, perf__net_sent, perf__net_event);
|
||||
if (!tinfo->socks[i]) {
|
||||
perf_log_fatal("perf_net_opensocket(): no socket returned, out of memory?");
|
||||
}
|
||||
tinfo->socks[i]->data = tinfo;
|
||||
tinfo->socks[i]->sent = perf__net_sent;
|
||||
tinfo->socks[i]->event = perf__net_event;
|
||||
}
|
||||
tinfo->current_sock = 0;
|
||||
|
||||
|
@ -1204,14 +1228,16 @@ threadinfo_stop(threadinfo_t* tinfo)
|
|||
}
|
||||
|
||||
static void
|
||||
threadinfo_cleanup(threadinfo_t* tinfo, times_t* times)
|
||||
threadinfo_cleanup(config_t* config, threadinfo_t* tinfo, times_t* times)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
if (interrupted)
|
||||
cancel_queries(tinfo);
|
||||
for (i = 0; i < tinfo->nsocks; i++)
|
||||
for (i = 0; i < tinfo->nsocks; i++) {
|
||||
perf_net_stats_compile(config->mode, tinfo->socks[i]);
|
||||
perf_net_close(tinfo->socks[i]);
|
||||
}
|
||||
if (tinfo->last_recv > times->end_time)
|
||||
times->end_time = tinfo->last_recv;
|
||||
}
|
||||
|
@ -1246,6 +1272,7 @@ int main(int argc, char** argv)
|
|||
switch (config.mode) {
|
||||
case sock_tcp:
|
||||
case sock_dot:
|
||||
case sock_doh:
|
||||
// block SIGPIPE for TCP/DOT mode, if connection is closed it will generate a signal
|
||||
perf_os_blocksignal(SIGPIPE, true);
|
||||
break;
|
||||
|
@ -1296,13 +1323,16 @@ int main(int argc, char** argv)
|
|||
if (config.stats_interval > 0)
|
||||
PERF_JOIN(stats_thread.sender, NULL);
|
||||
|
||||
perf_net_stats_init(config.mode);
|
||||
|
||||
for (i = 0; i < config.threads; i++)
|
||||
threadinfo_cleanup(&threads[i], ×);
|
||||
threadinfo_cleanup(&config, &threads[i], ×);
|
||||
|
||||
print_final_status(&config);
|
||||
|
||||
sum_stats(&config, &total_stats);
|
||||
print_statistics(&config, ×, &total_stats);
|
||||
perf_net_stats_print(config.mode);
|
||||
|
||||
cleanup(&config);
|
||||
#if OPENSSL_VERSION_NUMBER < 0x10100000L
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue