]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
1253. [contrib] queryperf now reports a summary of returned
authorMark Andrews <marka@isc.org>
Mon, 22 Jul 2002 02:47:24 +0000 (02:47 +0000)
committerMark Andrews <marka@isc.org>
Mon, 22 Jul 2002 02:47:24 +0000 (02:47 +0000)
                        rcodes (-c), rcodes are printed in neumonic form (-v).

CHANGES
contrib/queryperf/queryperf.c

diff --git a/CHANGES b/CHANGES
index 25a7fabc262b66eda94332bfc72cf36a58b48342..850f29380e365fa2dac05aed2833af6b150ba2d7 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -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
                        rolling forward the journal.
 
index 8f4e46c0022f3ccf2a4ef5ce7bb1dfc3dce0293b..7f56a61ea51b2f2e17d3c093514fd1c26b1cd33b 100644 (file)
@@ -18,7 +18,7 @@
 /***
  ***   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>
  ***/
@@ -84,6 +84,13 @@ enum directives_enum { V_SERVER, V_PORT, V_MAXQUERIES, V_MAXWAIT };
        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
  */
@@ -122,6 +129,8 @@ unsigned int run_timelimit;                         /* init 0 */
 int serverset = FALSE, portset = FALSE;
 int queriesset = FALSE, timeoutset = FALSE;
 int edns = FALSE, dnssec = FALSE;
+int countrcodes = FALSE;
+int rcodecounts[16] = {0};
 
 int verbose = FALSE;
 
@@ -148,6 +157,8 @@ unsigned int query_status_allocated;                        /* init 0 */
 int query_socket;                                      /* init 0 */
 struct sockaddr_in qaddr;
 
+static char *rcode_strings[] = RCODE_STRINGS;
+
 /*
  * get_uint16:
  *   Get an unsigned short integer from a buffer (in network order)
@@ -169,7 +180,7 @@ void
 show_startup_info(void) {
        printf("\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");
 }
 
@@ -194,6 +205,7 @@ show_usage(void) {
 "  -b set input/output buffer size in kilobytes (default: %d k)\n"
 "  -e enable EDNS 0\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"
 "\n",
                DEF_SERVER_TO_QUERY, DEF_SERVER_PORT,
@@ -411,7 +423,7 @@ parse_args(int argc, char **argv) {
        int c;
        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) {
                case 'q':
                        if (is_uint(optarg, &uint_arg_val) == TRUE) {
@@ -505,6 +517,9 @@ parse_args(int argc, char **argv) {
                        dnssec = TRUE;
                        edns = TRUE;
                        break;
+               case 'c':
+                       countrcodes = TRUE;
+                       break;
                case 'v':
                        verbose = 1;
                        break;
@@ -1196,9 +1211,12 @@ register_response(unsigned short int id, unsigned int rcode) {
                        num_queries_outstanding--;
                        found = TRUE;
                        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);
                        }
+                       if (countrcodes)
+                               rcodecounts[rcode]++;
                }
        }
 
@@ -1355,6 +1373,18 @@ print_statistics(void) {
 
        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 lost:      %6.2lf%%\n", per_lost);