2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-08-28 21:17:54 +00:00

1253. [contrib] queryperf now reports a summary of returned

rcodes (-c), rcodes are printed in neumonic form (-v).
This commit is contained in:
Mark Andrews 2002-07-22 02:47:24 +00:00
parent 0b75a2dd3b
commit e2cf0e8ff9
2 changed files with 37 additions and 4 deletions

View File

@ -1,3 +1,6 @@
1253. [contrib] queryperf now reports a summary of returned
rcodes (-c), rcodes are printed in neumonic form (-v).
1252. [func] Report the current serial with periodic commits when 1252. [func] Report the current serial with periodic commits when
rolling forward the journal. rolling forward the journal.

View File

@ -18,7 +18,7 @@
/*** /***
*** DNS Query Performance Testing Tool (queryperf.c) *** DNS Query Performance Testing Tool (queryperf.c)
*** ***
*** Version $Id: queryperf.c,v 1.4 2002/04/30 00:11:55 marka Exp $ *** Version $Id: queryperf.c,v 1.5 2002/07/22 02:47:24 marka Exp $
*** ***
*** Stephen Jacob <sj@nominum.com> *** Stephen Jacob <sj@nominum.com>
***/ ***/
@ -84,6 +84,13 @@ enum directives_enum { V_SERVER, V_PORT, V_MAXQUERIES, V_MAXWAIT };
28, 252, 253, 254, 255, 255 \ 28, 252, 253, 254, 255, 255 \
} }
#define RCODE_STRINGS { \
"NOERROR", "FORMERR", "SERVFAIL", "NXDOMAIN", \
"NOTIMP", "REFUSED", "YXDOMAIN", "YXRRSET", \
"NXRRSET", "NOTAUTH", "NOTZONE", "rcode11", \
"rcode12", "rcode13", "rcode14", "rcode15" \
}
/* /*
* Data type definitions * Data type definitions
*/ */
@ -122,6 +129,8 @@ unsigned int run_timelimit; /* init 0 */
int serverset = FALSE, portset = FALSE; int serverset = FALSE, portset = FALSE;
int queriesset = FALSE, timeoutset = FALSE; int queriesset = FALSE, timeoutset = FALSE;
int edns = FALSE, dnssec = FALSE; int edns = FALSE, dnssec = FALSE;
int countrcodes = FALSE;
int rcodecounts[16] = {0};
int verbose = FALSE; int verbose = FALSE;
@ -148,6 +157,8 @@ unsigned int query_status_allocated; /* init 0 */
int query_socket; /* init 0 */ int query_socket; /* init 0 */
struct sockaddr_in qaddr; struct sockaddr_in qaddr;
static char *rcode_strings[] = RCODE_STRINGS;
/* /*
* get_uint16: * get_uint16:
* Get an unsigned short integer from a buffer (in network order) * Get an unsigned short integer from a buffer (in network order)
@ -169,7 +180,7 @@ void
show_startup_info(void) { show_startup_info(void) {
printf("\n" printf("\n"
"DNS Query Performance Testing Tool\n" "DNS Query Performance Testing Tool\n"
"Version: $Id: queryperf.c,v 1.4 2002/04/30 00:11:55 marka Exp $\n" "Version: $Id: queryperf.c,v 1.5 2002/07/22 02:47:24 marka Exp $\n"
"\n"); "\n");
} }
@ -194,6 +205,7 @@ show_usage(void) {
" -b set input/output buffer size in kilobytes (default: %d k)\n" " -b set input/output buffer size in kilobytes (default: %d k)\n"
" -e enable EDNS 0\n" " -e enable EDNS 0\n"
" -D set the DNSSEC OK bit (implies EDNS)\n" " -D set the DNSSEC OK bit (implies EDNS)\n"
" -c print the number of packets with each rcode\n"
" -v verbose: report the RCODE of each response on stdout\n" " -v verbose: report the RCODE of each response on stdout\n"
"\n", "\n",
DEF_SERVER_TO_QUERY, DEF_SERVER_PORT, DEF_SERVER_TO_QUERY, DEF_SERVER_PORT,
@ -411,7 +423,7 @@ parse_args(int argc, char **argv) {
int c; int c;
unsigned int uint_arg_val; unsigned int uint_arg_val;
while ((c = getopt(argc, argv, "q:t:nd:s:p:1l:b:eDv")) != -1) { while ((c = getopt(argc, argv, "q:t:nd:s:p:1l:b:eDcv")) != -1) {
switch (c) { switch (c) {
case 'q': case 'q':
if (is_uint(optarg, &uint_arg_val) == TRUE) { if (is_uint(optarg, &uint_arg_val) == TRUE) {
@ -505,6 +517,9 @@ parse_args(int argc, char **argv) {
dnssec = TRUE; dnssec = TRUE;
edns = TRUE; edns = TRUE;
break; break;
case 'c':
countrcodes = TRUE;
break;
case 'v': case 'v':
verbose = 1; verbose = 1;
break; break;
@ -1196,9 +1211,12 @@ register_response(unsigned short int id, unsigned int rcode) {
num_queries_outstanding--; num_queries_outstanding--;
found = TRUE; found = TRUE;
if (status[ct].desc) { if (status[ct].desc) {
printf("> %d %s\n", rcode, status[ct].desc); printf("> %s %s\n", rcode_strings[rcode],
status[ct].desc);
free(status[ct].desc); free(status[ct].desc);
} }
if (countrcodes)
rcodecounts[rcode]++;
} }
} }
@ -1355,6 +1373,18 @@ print_statistics(void) {
printf("\n"); printf("\n");
if (countrcodes) {
unsigned int i;
for (i = 0; i < 16; i++) {
if (rcodecounts[i] == 0)
continue;
printf(" Returned %8s: %u queries\n",
rcode_strings[i], rcodecounts[i]);
}
printf("\n");
}
printf(" Percentage completed: %6.2lf%%\n", per_completed); printf(" Percentage completed: %6.2lf%%\n", per_completed);
printf(" Percentage lost: %6.2lf%%\n", per_lost); printf(" Percentage lost: %6.2lf%%\n", per_lost);