From 1d510f5416f61fba6db1ae6ed541ebbc5c8cdcd7 Mon Sep 17 00:00:00 2001 From: Doke Scott Date: Wed, 5 Apr 2017 15:51:12 -0400 Subject: [PATCH 1/4] Get dns query ids from correct recv buffer, and in an unsigned short. Wait for all recvs to timeout before exiting. --- dnsperf.c | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/dnsperf.c b/dnsperf.c index 5c825bd..683bca3 100644 --- a/dnsperf.c +++ b/dnsperf.c @@ -33,6 +33,7 @@ #include #include +#include /* @@ -415,6 +416,10 @@ int dns_perf_parse_args(int argc, char **argv) g_query_number = 100000000; } + // limit the number of concurrent queries to the total number of queries + if ( g_concurrent_query > g_query_number ) + g_concurrent_query = g_query_number; + return 0; } @@ -667,14 +672,15 @@ int dns_perf_query_send(void *arg) int dns_perf_query_recv(void *arg) { - static u_char input[1024]; int ret; unsigned short id; unsigned short flags; query_t *q = arg; + unsigned char *rbp; + rbp = (unsigned char *) ( q->recv_buf + q->recv_pos ); - ret = recv(q->fd, q->recv_buf + q->recv_pos, sizeof(q->recv_buf) - q->recv_pos, 0); + ret = recv(q->fd, (void *) rbp, sizeof(q->recv_buf) - q->recv_pos, 0); if (ret < 0) { if (errno != EWOULDBLOCK && errno != EAGAIN) { @@ -692,8 +698,8 @@ int dns_perf_query_recv(void *arg) close(q->fd); q->state = F_UNUSED; - id = input[0] * 256 + input[1]; - flags = input[2] * 256 + input[3]; + id = (unsigned short) rbp[0] * 256 + (unsigned short) rbp[1]; + flags = (unsigned short) rbp[2] * 256 + (unsigned short) rbp[3]; dns_perf_query_process_response(q, id, flags & 0xF); } @@ -920,12 +926,14 @@ int dns_perf_setup(int argc, char **argv) int main(int argc, char** argv) { timeval_t now, age; - + int n_reading; dns_perf_show_info(); signal(SIGINT, sig_handler); signal(SIGTERM, sig_handler); + srandom( time( 0 ) ); + if (dns_perf_setup(argc, argv) == -1) { return -1; } @@ -975,6 +983,20 @@ int main(int argc, char** argv) dns_perf_whip_query(); } + do { + query_t *query; + int i; + + dns_perf_eventsys_dispatch(g_timeout); + dns_perf_cancel_timeout_query(); + + for ( n_reading = i = 0; i < g_concurrent_query ; i++) { + query = &g_query_array[i]; + if (query->state == F_READING ) + n_reading++; + } + } while ( n_reading > 0 ); + gettimeofday(&g_query_end, NULL); dns_perf_statistic(); From 70370c2c4117c75e80509e334f6296b43320a5ab Mon Sep 17 00:00:00 2001 From: Doke Scott Date: Sat, 14 Oct 2017 15:34:01 -0400 Subject: [PATCH 2/4] resolve conflicts with new master --- dnsperf.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/dnsperf.c b/dnsperf.c index 683bca3..10e010c 100644 --- a/dnsperf.c +++ b/dnsperf.c @@ -676,11 +676,8 @@ int dns_perf_query_recv(void *arg) unsigned short id; unsigned short flags; query_t *q = arg; - unsigned char *rbp; - rbp = (unsigned char *) ( q->recv_buf + q->recv_pos ); - - ret = recv(q->fd, (void *) rbp, sizeof(q->recv_buf) - q->recv_pos, 0); + ret = recv(q->fd, q->recv_buf + q->recv_pos, sizeof(q->recv_buf) - q->recv_pos, 0); if (ret < 0) { if (errno != EWOULDBLOCK && errno != EAGAIN) { @@ -698,8 +695,11 @@ int dns_perf_query_recv(void *arg) close(q->fd); q->state = F_UNUSED; - id = (unsigned short) rbp[0] * 256 + (unsigned short) rbp[1]; - flags = (unsigned short) rbp[2] * 256 + (unsigned short) rbp[3]; + //id = input[0] * 256 + input[1]; + //flags = input[2] * 256 + input[3]; + + id = q->recv_buf[0] << 8 | q->recv_buf[1]; + flags = q->recv_buf[2] << 8 | q->recv_buf[3]; dns_perf_query_process_response(q, id, flags & 0xF); } From 1848953bf44d8515fa5a6bde64a398d618948abb Mon Sep 17 00:00:00 2001 From: Doke Scott Date: Sat, 14 Oct 2017 15:42:20 -0400 Subject: [PATCH 3/4] resolving conflicts in comments and spacing --- dnsperf.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dnsperf.c b/dnsperf.c index 10e010c..474499e 100644 --- a/dnsperf.c +++ b/dnsperf.c @@ -672,6 +672,7 @@ int dns_perf_query_send(void *arg) int dns_perf_query_recv(void *arg) { + //static u_char input[1024]; int ret; unsigned short id; unsigned short flags; @@ -695,8 +696,8 @@ int dns_perf_query_recv(void *arg) close(q->fd); q->state = F_UNUSED; - //id = input[0] * 256 + input[1]; - //flags = input[2] * 256 + input[3]; + //id = input[0] * 256 + input[1]; + //flags = input[2] * 256 + input[3]; id = q->recv_buf[0] << 8 | q->recv_buf[1]; flags = q->recv_buf[2] << 8 | q->recv_buf[3]; From fd6e47fde8c4a0fcbabcf90e78cffa275e622bd7 Mon Sep 17 00:00:00 2001 From: Doke Scott Date: Sat, 14 Oct 2017 15:47:19 -0400 Subject: [PATCH 4/4] more white space conflicts --- dnsperf.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dnsperf.c b/dnsperf.c index 474499e..af8e0f1 100644 --- a/dnsperf.c +++ b/dnsperf.c @@ -699,8 +699,8 @@ int dns_perf_query_recv(void *arg) //id = input[0] * 256 + input[1]; //flags = input[2] * 256 + input[3]; - id = q->recv_buf[0] << 8 | q->recv_buf[1]; - flags = q->recv_buf[2] << 8 | q->recv_buf[3]; + id = q->recv_buf[0] << 8 | q->recv_buf[1]; + flags = q->recv_buf[2] << 8 | q->recv_buf[3]; dns_perf_query_process_response(q, id, flags & 0xF); }