]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
bind8-compat statistics updates
authorTatuya JINMEI 神明達哉 <jinmei@isc.org>
Wed, 9 Apr 2008 22:48:17 +0000 (22:48 +0000)
committerTatuya JINMEI 神明達哉 <jinmei@isc.org>
Wed, 9 Apr 2008 22:48:17 +0000 (22:48 +0000)
README
bin/named/bind9.xsl
bin/named/statschannel.c
doc/arm/Bv9ARM-book.xml

diff --git a/README b/README
index 7b242762f56982bcf1f854371874750211d0551b..6d915f81f5d95baa5b262f0160baefc4e071284d 100644 (file)
--- a/README
+++ b/README
@@ -54,6 +54,8 @@ BIND 9.5.0
 
        Experimental http server and statistics support for named via xml.
 
+       More detailed statistics counters including those supported in BIND 8.
+
        Faster ACL processing.
 
        Use Doxygen to generate internal documentation.
index c385289541da9932ace1ae56389f32803545b84a..f592e9d98df60c2d7e2c6eb98a0e3215d0b057c1 100644 (file)
@@ -15,7 +15,7 @@
  - PERFORMANCE OF THIS SOFTWARE.
 -->
 
-<!-- $Id: bind9.xsl,v 1.16 2008/04/03 05:55:51 marka Exp $ -->
+<!-- $Id: bind9.xsl,v 1.17 2008/04/09 22:48:17 jinmei Exp $ -->
 
 <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
@@ -147,7 +147,7 @@ td, th {
        <table>
          <tr class="rowh"><th colspan="10">Server Statistics</th></tr>
           <tr class="rowh">
-           <!-- The ordering of the following items must be consisten
+           <!-- The ordering of the following items must be consistent
            with dns_nsstatscounter_xxx -->
            <th>Requestv4</th>
            <th>Requestv6</th>
@@ -251,7 +251,7 @@ td, th {
        <table>
          <tr class="rowh"><th colspan="10">Zone Maintenance Statistics</th></tr>
           <tr class="rowh">
-           <!-- The ordering of the following items must be consisten
+           <!-- The ordering of the following items must be consistent
            with dns_zonestatscounter_xxx -->
            <th>NotifyOutv4</th>
            <th>NotifyOutv6</th>
@@ -310,7 +310,7 @@ td, th {
              <th colspan="10">Resolver Statistics for View <xsl:value-of select="name"/></th>
            </tr>
            <tr class="rowh">
-           <!-- The ordering of the following items must be consisten
+           <!-- The ordering of the following items must be consistent
            with dns_resstatscounter_xxx -->
              <th>Queryv4</th>
              <th>Queryv6</th>
index 9b326d4cbae1c99df1bc90f6e334bec4cfdc906b..e69b3f7b34d819793af5b0db80d0a5a5e99773a1 100644 (file)
@@ -14,7 +14,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: statschannel.c,v 1.8 2008/04/03 06:09:04 tbox Exp $ */
+/* $Id: statschannel.c,v 1.9 2008/04/09 22:48:17 jinmei Exp $ */
 
 /*! \file */
 
@@ -23,6 +23,7 @@
 #include <isc/buffer.h>
 #include <isc/httpd.h>
 #include <isc/mem.h>
+#include <isc/once.h>
 #include <isc/print.h>
 #include <isc/socket.h>
 #include <isc/task.h>
@@ -68,6 +69,8 @@ stats_dumparg {
        int             ncounters;      /* used for general statistics */
 } stats_dumparg_t;
 
+static isc_once_t once = ISC_ONCE_INIT;
+
 static void
 generalstat_dump(dns_statscounter_t counter, isc_uint64_t val, void *arg) {
        stats_dumparg_t *dumparg = arg;
@@ -539,7 +542,7 @@ destroy_listener(void *arg) {
        REQUIRE(listener != NULL);
        REQUIRE(!ISC_LINK_LINKED(listener, link));
 
-       /* We don't to have acquire the lock here since it's already unlinked */
+       /* We don't have to acquire the lock here since it's already unlinked */
        dns_acl_detach(&listener->acl);
 
        DESTROYLOCK(&listener->lock);
@@ -824,96 +827,190 @@ ns_statschannels_shutdown(ns_server_t *server) {
        }
 }
 
-/* name server statistics */
-static const char *nsstats_desc[] = {
-       "IPv4 requests received",         /* dns_nsstatscounter_requestv4 */
-       "IPv6 requests received",         /* dns_nsstatscounter_requestv6 */
-       "requests with EDNS(0) received", /* dns_nsstatscounter_edns0in */
-       "requests with unsupported EDNS "
-       "version received",             /* dns_nsstatscounter_badednsver */
-       "requests with TSIG received",    /* dns_nsstatscounter_tsigin */
-       "requests with SIG(0) received",  /* dns_nsstatscounter_sig0in */
-       "requests with invalid signature",/* dns_nsstatscounter_invalidsig */
-       "TCP requests received",          /* dns_nsstatscounter_tcp */
-
-       "auth queries rejected",          /* dns_nsstatscounter_authrej */
-       "recursive queries rejected",     /* dns_nsstatscounter_recurserej */
-       "transfer requests rejected",     /* dns_nsstatscounter_xfrrej */
-       "update requests rejected",       /* dns_nsstatscounter_updaterej */
-
-       "responses sent",                 /* dns_nsstatscounter_response */
-       "truncated responses sent",     /* dns_nsstatscounter_truncatedresp */
-       "responses with EDNS(0) sent",    /* dns_nsstatscounter_edns0out */
-       "responses with TSIG sent",       /* dns_nsstatscounter_tsigout */
-       "responses with SIG(0) sent",     /* dns_nsstatscounter_sig0out */
-
-       "queries resulted in successful answer",/* dns_nsstatscounter_success */
-       "queries resulted in "
-       "authoritative answer",         /* dns_nsstatscounter_authans */
-       "queries resulted in non "
-       "authoritative answer",         /* dns_nsstatscounter_nonauthans */
-       "queries resulted in referral answer", /* dns_nsstatscounter_referral */
-       "queries resulted in nxrrset",    /* dns_nsstatscounter_nxrrset */
-       "queries resulted in SERVFAIL",   /* dns_nsstatscounter_servfail */
-       "queries resulted in FORMERR",    /* dns_nsstatscounter_formerr */
-       "queries resulted in NXDOMAIN",   /* dns_nsstatscounter_nxdomain */
-       "queries caused recursion",       /* dns_nsstatscounter_recursion */
-       "duplicate queries received",     /* dns_nsstatscounter_duplicate */
-       "queries dropped",                /* dns_nsstatscounter_dropped */
-       "other query failures",           /* dns_nsstatscounter_failure */
-
-       "requested transfers completed",  /* dns_nsstatscounter_xfrdone */
-
-       "update requests forwarded",    /* dns_nsstatscounter_updatereqfwd */
-       "update responses forwarded",   /* dns_nsstatscounter_updaterespfwd */
-       "update forward failed",        /* dns_nsstatscounter_updatefwdfail */
-       "updates completed",            /* dns_nsstatscounter_updatedone */
-       "updates failed",               /* dns_nsstatscounter_updatefail */
-       "updates rejected due to "
-       "prerequisite failure"          /* dns_nsstatscounter_updatebadprereq */
-};
+/*%
+ * Statistics descriptions.  These could be statistically initialized at
+ * compile time, but we configure them run time in the init_desc() function
+ * below so that they'll be less susceptible to counter name changes.
+ * Note that bind9.xsl must still be updated consistently with the counter
+ * numbering.
+ */
+static const char *nsstats_desc[dns_nsstatscounter_max];
+static const char *resstats_desc[dns_resstatscounter_max];
+static const char *zonestats_desc[dns_zonestatscounter_max];
 
-/* resolver statistics */
-static const char *resstats_desc[] = {
-       "IPv4 queries sent",            /* dns_resstatscounter_queryv4 */
-       "IPv6 queries sent",            /* dns_resstatscounter_queryv6 */
-       "IPv4 responses received",      /* dns_resstatscounter_responsev4 */
-       "IPv6 responses received",      /* dns_resstatscounter_responsev6 */
-       "NXDOMAIN received",            /* dns_resstatscounter_nxdomain */
-       "SERVFAIL received",            /* dns_resstatscounter_servfail */
-       "FORMERR received",             /* dns_resstatscounter_formerr */
-       "other errors received",        /* dns_resstatscounter_othererror */
-       "EDNS(0) query failures",       /* dns_resstatscounter_edns0fail */
-       "mismatch responses received",  /* dns_resstatscounter_mismatch */
-       "truncated responses received", /* dns_resstatscounter_truncated */
-       "lame delegations received",    /* dns_resstatscounter_lame */
-       "query retries",                /* dns_resstatscounter_retry */
-       "IPv4 NS address fetches",      /* dns_resstatscounter_gluefetchv4 */
-       "IPv6 NS address fetches",      /* dns_resstatscounter_gluefetchv6 */
-       "IPv4 NS address fetch failed", /* dns_resstatscounter_gluefetchv4fail */
-       "IPv6 NS address fetch failed", /* dns_resstatscounter_gluefetchv6fail */
-       "DNSSEC validation attempted",  /* dns_resstatscounter_val */
-       "DNSSEC validation failed",     /* dns_resstatscounter_valfail */
-       "DNSSEC validation succeeded",  /* dns_resstatscounter_valsuccess */
-       "DNSSEC NX validation succeeded"/* dns_resstatscounter_valnegsuccess */
-};
+static inline void
+set_desc(int counter, int maxcounter, const char *desc, const char **descs) {
+       REQUIRE(counter < maxcounter);
+       REQUIRE(descs[counter] == NULL);
 
-/* zone statistics */
-static const char *zonestats_desc[] = {
-       "IPv4 notifies sent",           /* dns_zonestatscounter_notifyoutv4 */
-       "IPv6 notifies sent",           /* dns_zonestatscounter_notifyoutv6 */
-       "IPv4 notifies received",       /* dns_zonestatscounter_notifyinv4 */
-       "IPv6 notifies received",       /* dns_zonestatscounter_notifyinv6 */
-       "notifies rejected",            /* dns_zonestatscounter_notifyrej */
-       "IPv4 SOA queries sent",        /* dns_zonestatscounter_soaoutv4 */
-       "IPv6 SOA queries sent",        /* dns_zonestatscounter_soaoutv6 */
-       "IPv4 AXFR requested",          /* dns_zonestatscounter_axfrreqv4 */
-       "IPv6 AXFR requested",          /* dns_zonestatscounter_axfrreqv6 */
-       "IPv4 IXFR requested",          /* dns_zonestatscounter_ixfrreqv4 */
-       "IPv6 IXFR requested",          /* dns_zonestatscounter_ixfrreqv6 */
-       "transfer requests succeeded",  /* dns_zonestatscounter_xfrsuccess */
-       "transfer requests failed"      /* dns_zonestatscounter_xfrfail */
-};
+       descs[counter] = desc;
+}
+
+static void
+init_desc() {
+       int i;
+
+       /* Initialize name server statistics */
+       memset(nsstats_desc, 0,
+              dns_nsstatscounter_max * sizeof(nsstats_desc[0])); 
+       set_desc(dns_nsstatscounter_requestv4, dns_nsstatscounter_max,
+                "IPv4 requests received", nsstats_desc);
+       set_desc(dns_nsstatscounter_requestv6, dns_nsstatscounter_max,
+                "IPv6 requests received", nsstats_desc);
+       set_desc(dns_nsstatscounter_edns0in, dns_nsstatscounter_max,
+                "requests with EDNS(0) received", nsstats_desc);
+       set_desc(dns_nsstatscounter_badednsver, dns_nsstatscounter_max,
+                "requests with unsupported EDNS version received",
+                nsstats_desc);
+       set_desc(dns_nsstatscounter_tsigin, dns_nsstatscounter_max,
+                "requests with TSIG received", nsstats_desc);
+       set_desc(dns_nsstatscounter_sig0in, dns_nsstatscounter_max,
+                "requests with SIG(0) received", nsstats_desc);
+       set_desc(dns_nsstatscounter_invalidsig, dns_nsstatscounter_max,
+                "requests with invalid signature", nsstats_desc);
+       set_desc(dns_nsstatscounter_tcp, dns_nsstatscounter_max,
+                "TCP requests received", nsstats_desc);
+       set_desc(dns_nsstatscounter_authrej, dns_nsstatscounter_max,
+                "auth queries rejected", nsstats_desc);
+       set_desc(dns_nsstatscounter_recurserej, dns_nsstatscounter_max,
+                "recursive queries rejected", nsstats_desc);
+       set_desc(dns_nsstatscounter_xfrrej, dns_nsstatscounter_max,
+                "transfer requests rejected", nsstats_desc);
+       set_desc(dns_nsstatscounter_updaterej, dns_nsstatscounter_max,
+                "update requests rejected", nsstats_desc);
+       set_desc(dns_nsstatscounter_response, dns_nsstatscounter_max,
+                "responses sent", nsstats_desc);
+       set_desc(dns_nsstatscounter_truncatedresp, dns_nsstatscounter_max,
+                "truncated responses sent", nsstats_desc);
+       set_desc(dns_nsstatscounter_edns0out, dns_nsstatscounter_max,
+                "responses with EDNS(0) sent", nsstats_desc);
+       set_desc(dns_nsstatscounter_tsigout, dns_nsstatscounter_max,
+                "responses with TSIG sent", nsstats_desc);
+       set_desc(dns_nsstatscounter_sig0out, dns_nsstatscounter_max,
+                "responses with SIG(0) sent", nsstats_desc);
+       set_desc(dns_nsstatscounter_success, dns_nsstatscounter_max,
+                "queries resulted in successful answer", nsstats_desc);
+       set_desc(dns_nsstatscounter_authans, dns_nsstatscounter_max,
+                "queries resulted in authoritative answer", nsstats_desc);
+       set_desc(dns_nsstatscounter_nonauthans, dns_nsstatscounter_max,
+                "queries resulted in non authoritative answer", nsstats_desc);
+       set_desc(dns_nsstatscounter_referral, dns_nsstatscounter_max,
+                "queries resulted in referral answer", nsstats_desc);
+       set_desc(dns_nsstatscounter_nxrrset, dns_nsstatscounter_max,
+                "queries resulted in nxrrset", nsstats_desc);
+       set_desc(dns_nsstatscounter_servfail, dns_nsstatscounter_max,
+                "queries resulted in SERVFAIL", nsstats_desc);
+       set_desc(dns_nsstatscounter_formerr, dns_nsstatscounter_max,
+                "queries resulted in FORMERR", nsstats_desc);
+       set_desc(dns_nsstatscounter_nxdomain, dns_nsstatscounter_max,
+                "queries resulted in NXDOMAIN", nsstats_desc);
+       set_desc(dns_nsstatscounter_recursion, dns_nsstatscounter_max,
+                "queries caused recursion", nsstats_desc);
+       set_desc(dns_nsstatscounter_duplicate, dns_nsstatscounter_max,
+                "duplicate queries received", nsstats_desc);
+       set_desc(dns_nsstatscounter_dropped, dns_nsstatscounter_max,
+                "queries dropped", nsstats_desc);
+       set_desc(dns_nsstatscounter_failure, dns_nsstatscounter_max,
+                "other query failures", nsstats_desc);
+       set_desc(dns_nsstatscounter_xfrdone, dns_nsstatscounter_max,
+                "requested transfers completed", nsstats_desc);
+       set_desc(dns_nsstatscounter_updatereqfwd, dns_nsstatscounter_max,
+                "update requests forwarded", nsstats_desc);
+       set_desc(dns_nsstatscounter_updaterespfwd, dns_nsstatscounter_max,
+                "update responses forwarded", nsstats_desc);
+       set_desc(dns_nsstatscounter_updatefwdfail, dns_nsstatscounter_max,
+                "update forward failed", nsstats_desc);
+       set_desc(dns_nsstatscounter_updatedone, dns_nsstatscounter_max,
+                "updates completed", nsstats_desc);
+       set_desc(dns_nsstatscounter_updatefail, dns_nsstatscounter_max,
+                "updates failed", nsstats_desc);
+       set_desc(dns_nsstatscounter_updatebadprereq, dns_nsstatscounter_max,
+                "updates rejected due to prerequisite failure", nsstats_desc);
+
+       /* Initialize resolver statistics */
+       memset(resstats_desc, 0,
+              dns_resstatscounter_max * sizeof(resstats_desc[0])); 
+       set_desc(dns_resstatscounter_queryv4, dns_resstatscounter_max,
+                "IPv4 queries sent", resstats_desc);
+       set_desc(dns_resstatscounter_queryv6, dns_resstatscounter_max,
+                "IPv6 queries sent", resstats_desc);
+       set_desc(dns_resstatscounter_responsev4, dns_resstatscounter_max,
+                "IPv4 responses received", resstats_desc);
+       set_desc(dns_resstatscounter_responsev6, dns_resstatscounter_max,
+                "IPv6 responses received", resstats_desc);
+       set_desc(dns_resstatscounter_nxdomain, dns_resstatscounter_max,
+                "NXDOMAIN received", resstats_desc);
+       set_desc(dns_resstatscounter_servfail, dns_resstatscounter_max,
+                "SERVFAIL received", resstats_desc);
+       set_desc(dns_resstatscounter_formerr, dns_resstatscounter_max,
+                "FORMERR received", resstats_desc);
+       set_desc(dns_resstatscounter_othererror, dns_resstatscounter_max,
+                "other errors received", resstats_desc);
+       set_desc(dns_resstatscounter_edns0fail, dns_resstatscounter_max,
+                "EDNS(0) query failures", resstats_desc);
+       set_desc(dns_resstatscounter_mismatch, dns_resstatscounter_max,
+                "mismatch responses received", resstats_desc);
+       set_desc(dns_resstatscounter_truncated, dns_resstatscounter_max,
+                "truncated responses received", resstats_desc);
+       set_desc(dns_resstatscounter_lame, dns_resstatscounter_max,
+                "lame delegations received", resstats_desc);
+       set_desc(dns_resstatscounter_retry, dns_resstatscounter_max,
+                "query retries", resstats_desc);
+       set_desc(dns_resstatscounter_gluefetchv4, dns_resstatscounter_max,
+                "IPv4 NS address fetches", resstats_desc);
+       set_desc(dns_resstatscounter_gluefetchv6, dns_resstatscounter_max,
+                "IPv6 NS address fetches", resstats_desc);
+       set_desc(dns_resstatscounter_gluefetchv4fail, dns_resstatscounter_max,
+                "IPv4 NS address fetch failed", resstats_desc);
+       set_desc(dns_resstatscounter_gluefetchv6fail, dns_resstatscounter_max,
+                "IPv6 NS address fetch failed", resstats_desc);
+       set_desc(dns_resstatscounter_val, dns_resstatscounter_max,
+                "DNSSEC validation attempted", resstats_desc);
+       set_desc(dns_resstatscounter_valsuccess, dns_resstatscounter_max,
+                "DNSSEC validation succeeded", resstats_desc);
+       set_desc(dns_resstatscounter_valnegsuccess, dns_resstatscounter_max,
+                "DNSSEC NX validation succeeded", resstats_desc);
+       set_desc(dns_resstatscounter_valfail, dns_resstatscounter_max,
+                "DNSSEC validation failed", resstats_desc);
+
+       /* Initialize zone statistics */
+       memset(zonestats_desc, 0,
+              dns_zonestatscounter_max * sizeof(zonestats_desc[0])); 
+       set_desc(dns_zonestatscounter_notifyoutv4, dns_zonestatscounter_max,
+                "IPv4 notifies sent", zonestats_desc);
+       set_desc(dns_zonestatscounter_notifyoutv6, dns_zonestatscounter_max,
+                "IPv6 notifies sent", zonestats_desc);
+       set_desc(dns_zonestatscounter_notifyinv4, dns_zonestatscounter_max,
+                "IPv4 notifies received", zonestats_desc);
+       set_desc(dns_zonestatscounter_notifyinv6, dns_zonestatscounter_max,
+                "IPv6 notifies received", zonestats_desc);
+       set_desc(dns_zonestatscounter_notifyrej, dns_zonestatscounter_max,
+                "notifies rejected", zonestats_desc);
+       set_desc(dns_zonestatscounter_soaoutv4, dns_zonestatscounter_max,
+                "IPv4 SOA queries sent", zonestats_desc);
+       set_desc(dns_zonestatscounter_soaoutv6, dns_zonestatscounter_max,
+                "IPv6 SOA queries sent", zonestats_desc);
+       set_desc(dns_zonestatscounter_axfrreqv4, dns_zonestatscounter_max,
+                "IPv4 AXFR requested", zonestats_desc);
+       set_desc(dns_zonestatscounter_axfrreqv6, dns_zonestatscounter_max,
+                "IPv6 AXFR requested", zonestats_desc);
+       set_desc(dns_zonestatscounter_ixfrreqv4, dns_zonestatscounter_max,
+                "IPv4 IXFR requested", zonestats_desc);
+       set_desc(dns_zonestatscounter_ixfrreqv6, dns_zonestatscounter_max,
+                "IPv6 IXFR requested", zonestats_desc);
+       set_desc(dns_zonestatscounter_xfrsuccess, dns_zonestatscounter_max,
+                "transfer requests succeeded", zonestats_desc);
+       set_desc(dns_zonestatscounter_xfrfail, dns_zonestatscounter_max,
+                "transfer requests failed", zonestats_desc);
+
+       /* Sanity check */
+       for (i = 0; i < dns_nsstatscounter_max; i++)
+               INSIST(nsstats_desc[i] != NULL);
+       for (i = 0; i < dns_resstatscounter_max; i++)
+               INSIST(resstats_desc[i] != NULL);
+       for (i = 0; i < dns_zonestatscounter_max; i++)
+               INSIST(zonestats_desc[i] != NULL);
+}
 
 isc_result_t
 ns_stats_dump(ns_server_t *server, FILE *fp) {
@@ -923,6 +1020,8 @@ ns_stats_dump(ns_server_t *server, FILE *fp) {
        dns_zone_t *zone, *next;
        stats_dumparg_t dumparg;
 
+       RUNTIME_CHECK(isc_once_do(&once, init_desc) == ISC_R_SUCCESS);
+
        /* Set common fields */
        dumparg.type = statsformat_file;
        dumparg.arg = fp;
@@ -931,8 +1030,7 @@ ns_stats_dump(ns_server_t *server, FILE *fp) {
        fprintf(fp, "+++ Statistics Dump +++ (%lu)\n", (unsigned long)now);
 
        fprintf(fp, "++ Incoming Requests ++\n");
-       dns_opcodestats_dump(server->opcodestats, opcodestat_dump, &dumparg,
-                            0);
+       dns_opcodestats_dump(server->opcodestats, opcodestat_dump, &dumparg, 0);
 
        fprintf(fp, "++ Incoming Queries ++\n");
        dns_rdatatypestats_dump(server->rcvquerystats, rdtypestat_dump,
index 8c4afc1a236fe99f45d33d34e29ad7e8b279381a..21d95a8eb8624c91c3ef02eb7210819b56b94f48 100644 (file)
@@ -18,7 +18,7 @@
  - PERFORMANCE OF THIS SOFTWARE.
 -->
 
-<!-- File: $Id: Bv9ARM-book.xml,v 1.349 2008/04/03 02:01:08 marka Exp $ -->
+<!-- File: $Id: Bv9ARM-book.xml,v 1.350 2008/04/09 22:48:17 jinmei Exp $ -->
 <book xmlns:xi="http://www.w3.org/2001/XInclude">
   <title>BIND 9 Administrator Reference Manual</title>
 
@@ -7672,162 +7672,6 @@ query-source-v6 address * port *;
            </varlistentry>
           </variablelist>
         </sect3>
-  
-        <sect3 id="statsfile">
-          <title>The Statistics File</title>
-
-          <para>
-            The statistics file generated by <acronym>BIND</acronym> 9
-            is similar, but not identical, to that
-            generated by <acronym>BIND</acronym> 8.
-          </para>
-          <para>
-            The statistics dump begins with a line, like:
-         </para>
-          <para>
-           <command>+++ Statistics Dump +++ (973798949)</command>
-         </para>
-         <para>
-           The number in parentheses is a standard
-            Unix-style timestamp, measured as seconds since January 1, 1970.
-            Following
-            that line are a series of lines containing a counter type, the
-            value of the
-            counter, optionally a zone name, and optionally a view name.
-            The lines without view and zone listed are global statistics for
-            the entire server.
-            Lines with a zone and view name for the given view and zone (the
-            view name is
-            omitted for the default view).
-         </para>
-         <para>
-           The statistics dump ends with the line where the
-            number is identical to the number in the beginning line; for example:
-          </para>
-          <para>
-           <command>--- Statistics Dump --- (973798949)</command>
-          </para>
-          <para>
-            The following statistics counters are maintained:
-          </para>
-          <informaltable colsep="0" rowsep="0">
-            <tgroup cols="2" colsep="0" rowsep="0" tgroupstyle="4Level-table">
-              <colspec colname="1" colnum="1" colsep="0" colwidth="1.150in"/>
-              <colspec colname="2" colnum="2" colsep="0" colwidth="3.350in"/>
-              <tbody>
-                <row rowsep="0">
-                  <entry colname="1">
-                    <para><command>success</command></para>
-                  </entry>
-                  <entry colname="2">
-                    <para>
-                      The number of
-                      successful queries made to the server or zone.  A
-                      successful query
-                      is defined as query which returns a NOERROR response
-                      with at least
-                      one answer RR.
-                    </para>
-                  </entry>
-                </row>
-                <row rowsep="0">
-                  <entry colname="1">
-                    <para><command>referral</command></para>
-                  </entry>
-                  <entry colname="2">
-                    <para>
-                      The number of queries which resulted
-                      in referral responses.
-                    </para>
-                  </entry>
-                </row>
-                <row rowsep="0">
-                  <entry colname="1">
-                    <para><command>nxrrset</command></para>
-                  </entry>
-                  <entry colname="2">
-                    <para>
-                      The number of queries which resulted in
-                      NOERROR responses with no data.
-                    </para>
-                  </entry>
-                </row>
-                <row rowsep="0">
-                  <entry colname="1">
-                    <para><command>nxdomain</command></para>
-                  </entry>
-                  <entry colname="2">
-                    <para>
-                      The number
-                      of queries which resulted in NXDOMAIN responses.
-                    </para>
-                  </entry>
-                </row>
-                <row rowsep="0">
-                  <entry colname="1">
-                    <para><command>failure</command></para>
-                  </entry>
-                  <entry colname="2">
-                    <para>
-                      The number of queries which resulted in a
-                      failure response other than those above.
-                    </para>
-                  </entry>
-                </row>
-                <row rowsep="0">
-                  <entry colname="1">
-                    <para><command>recursion</command></para>
-                  </entry>
-                  <entry colname="2">
-                    <para>
-                      The number of queries which caused the server
-                      to perform recursion in order to find the final answer.
-                    </para>
-                  </entry>
-                </row>
-                <row rowsep="0">
-                  <entry colname="1">
-                    <para><command>duplicate</command></para>
-                  </entry>
-                  <entry colname="2">
-                    <para>
-                      The number of queries which the server attempted to
-                     recurse but discover a existing query with the same
-                     IP address, port, query id, name, type and class
-                     already being processed.
-                    </para>
-                  </entry>
-                </row>
-                <row rowsep="0">
-                  <entry colname="1">
-                    <para><command>dropped</command></para>
-                  </entry>
-                  <entry colname="2">
-                    <para>
-                     The number of queries for which the server
-                     discovered a excessive number of existing
-                     recursive queries for the same name, type and
-                     class and were subsequently dropped.
-                   </para>
-                 </entry>
-               </row>
-              </tbody>
-            </tgroup>
-          </informaltable>
-
-          <para>
-            Each query received by the server will cause exactly one of
-            <command>success</command>,
-            <command>referral</command>,
-            <command>nxrrset</command>,
-            <command>nxdomain</command>, or
-            <command>failure</command>
-            to be incremented, and may additionally cause the
-            <command>recursion</command> counter to be
-            incremented.
-          </para>
-
-        </sect3>
 
         <sect3 id="acache">
           <title>Additional Section Caching</title>
@@ -7946,7 +7790,7 @@ query-source-v6 address * port *;
 
       </sect2>
 
-      <sect2>
+      <sect2 id="statschannels">
         <title><command>statistics-channels</command> Statement Grammar</title>
 
 <programlisting><command>statistics-channels</command> {
@@ -11095,6 +10939,1275 @@ $GENERATE 1-127 $ CNAME $.0</programlisting>
          </para>
        </sect2>
       </sect1>
+
+      <sect1>
+        <title>BIND9 Statistics</title>
+        <para>
+         <acronym>BIND</acronym> 9 maintains lots of statistics
+         information and provides several interfaces for users to
+         get access to the statistics.
+         The available statistics include all statistics counters
+         that were available in <acronym>BIND</acronym> 8 and
+         are meaningful in <acronym>BIND</acronym> 9,
+         and other information that is considered useful.
+        </para>
+
+        <para>
+         The statistics information is categorized into the following
+         sections.
+        </para>
+
+       <informaltable frame="all">
+          <tgroup cols="2">
+            <colspec colname="1" colnum="1" colsep="0" colwidth="3.300in"/>
+            <colspec colname="2" colnum="2" colsep="0" colwidth="2.625in"/>
+            <tbody>
+
+             <row rowsep="0">
+                <entry colname="1">
+                  <para>Incoming Requests</para>
+                </entry>
+                <entry colname="2">
+                  <para>
+                    The number of incoming DNS requests for each OPCODE.
+                  </para>
+                </entry>
+             </row>
+
+             <row rowsep="0">
+                <entry colname="1">
+                  <para>Incoming Queries</para>
+                </entry>
+                <entry colname="2">
+                  <para>
+                   The number of incoming queries for each RR type.
+                  </para>
+                </entry>
+             </row>
+
+             <row rowsep="0">
+                <entry colname="1">
+                  <para>Outgoing Queries</para>
+                </entry>
+                <entry colname="2">
+                  <para>
+                    The number of outgoing queries for each RR
+                    type sent from the internal resolver.
+                   Maintained per view.
+                  </para>
+                </entry>
+             </row>
+
+             <row rowsep="0">
+                <entry colname="1">
+                  <para>Name Server Statistics</para>
+                </entry>
+                <entry colname="2">
+                  <para>
+                    Statistics counters about incoming request processing.
+                  </para>
+                </entry>
+             </row>
+
+             <row rowsep="0">
+                <entry colname="1">
+                  <para>Zone Maintenance Statistics</para>
+                </entry>
+                <entry colname="2">
+                  <para>
+                    Statistics counters regarding zone maintenance
+                    operations such as zone transfers.
+                  </para>
+                </entry>
+             </row>
+
+             <row rowsep="0">
+                <entry colname="1">
+                  <para>Resolver Statistics</para>
+                </entry>
+                <entry colname="2">
+                  <para>
+                    Statistics counters about name resolution
+                    performed in the internal resolver.
+                   Maintained per view.
+                  </para>
+                </entry>
+             </row>
+
+             <row rowsep="0">
+                <entry colname="1">
+                  <para>Cache DB RRsets</para>
+                </entry>
+                <entry colname="2">
+                  <para>
+                    The number of RRsets per RR type (positive
+                    or negative) and nonexistent names stored in the
+                    cache database.
+                   Maintained per view.
+                  </para>
+                </entry>
+             </row>
+
+           </tbody>
+         </tgroup>
+       </informaltable>
+
+       <para>
+         A subset of Name Server Statistics is collected and shown
+         per zone for which the server has the authority when
+         <command>zone-statistics</command> is set to
+         <userinput>yes</userinput>.
+         These statistics counters are shown with their zone and view
+         names.
+         In some cases the view names are omitted for the default view.
+       </para>
+
+       <para>
+         There are currently two user interfaces to get access to the
+         statistics.
+         One is in the plain text format dumped to the file specified
+         by the <command>statistics-file</command> configuration option.
+         The other is remotely accessible via a statistics channel
+         when the <command>statistics-channels</command> statement
+         is specified in the configuration file
+         (see <xref linkend="statschannels"/>.)
+       </para>
+
+        <sect3 id="statsfile">
+          <title>The Statistics File</title>
+          <para>
+            The text format statistics dump begins with a line, like:
+         </para>
+          <para>
+           <command>+++ Statistics Dump +++ (973798949)</command>
+         </para>
+         <para>
+           The number in parentheses is a standard
+            Unix-style timestamp, measured as seconds since January 1, 1970.
+
+            Following
+            that line is a set of statistics information, which is categorized
+            as described above.
+           Each section begins with a line, like:
+         </para>
+
+         <para>
+           <command>++ Name Server Statistics ++</command>
+         </para>
+
+         <para>
+           Each section consists of lines, each containing the statistics
+           counter value followed by its textual description.
+           See below for available counters.
+           For brevity, counters that have a value of 0 are not shown
+           in the statistics file.
+         </para>
+
+         <para>
+           The statistics dump ends with the line where the
+            number is identical to the number in the beginning line; for example:
+          </para>
+          <para>
+           <command>--- Statistics Dump --- (973798949)</command>
+          </para>
+       </sect3>
+
+        <sect2>
+         <title>Statistics Counters</title>
+         <para>
+           The following tables summarize statistics counters that
+           <acronym>BIND</acronym> 9 provides.
+           For each row of the tables, the leftmost column is the
+           abbreviated symbol name of that counter.
+           These symbols are shown in the statistics information
+           accessed via an HTTP statistics channel.
+           The rightmost column gives the description of the counter,
+           which is also shown in the statistics file
+           (but, in this document, possibly with slight modification
+           for better readability).
+           Additional notes may also be provided in this column.
+           When a middle column exists between these two columns,
+           it gives the corresponding counter name of the
+           <acronym>BIND</acronym> 8 statistics, if applicable.
+         </para>
+
+         <sect3>
+            <title>Name Server Statistics Counters</title>
+
+            <informaltable colsep="0" rowsep="0">
+              <tgroup cols="3" colsep="0" rowsep="0" tgroupstyle="4Level-table">
+               <colspec colname="1" colnum="1" colsep="0" colwidth="1.150in"/>
+               <colspec colname="2" colnum="2" colsep="0" colwidth="1.150in"/>
+               <colspec colname="3" colnum="3" colsep="0" colwidth="3.350in"/>
+               <tbody>
+                 <row>
+                   <entry colname="1">
+                      <para>
+                       <emphasis>Symbol</emphasis>
+                      </para>
+                   </entry>
+                   <entry colname="2">
+                      <para>
+                       <emphasis>BIND8 Symbol</emphasis>
+                      </para>
+                   </entry>
+                   <entry colname="3">
+                      <para>
+                       <emphasis>Description</emphasis>
+                      </para>
+                   </entry>
+                 </row>
+
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>Requestv4</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command>RQ</command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       IPv4 requests received.
+                       Note: this also counts non query requests.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>Requestv6</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command>RQ</command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       IPv6 requests received.
+                       Note: this also counts non query requests.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>ReqEdns0</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command></command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       Requests with EDNS(0) received.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>ReqBadEDNSVer</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command></command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       Requests with unsupported EDNS version received.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>ReqTSIG</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command></command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       Requests with TSIG received.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>ReqSIG0</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command></command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       Requests with SIG(0) received.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>ReqBadSIG</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command></command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       Requests with invalid (TSIG or SIG(0)) signature.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>ReqTCP</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command>RTCP</command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       TCP requests received.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>AuthQryRej</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command>RUQ</command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       Authoritative (non recursive) queries rejected.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>RecQryRej</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command>RURQ</command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       Recursive queries rejected.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>XfrRej</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command>RUXFR</command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       Zone transfer requests rejected.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>UpdateRej</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command>RUUpd</command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       Dynamic update requests rejected.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>Response</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command>SAns</command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       Responses sent.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>RespTruncated</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command></command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       Truncated responses sent.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>RespEDNS0</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command></command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       Responses with EDNS(0) sent.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>RespTSIG</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command></command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       Responses with TSIG sent.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>RespSIG0</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command></command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       Responses with SIG(0) sent.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>QrySuccess</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command></command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       Queries resulted in a successful answer.
+                       This means the query which returns a NOERROR response
+                       with at least one answer RR.
+                       This corresponds to the
+                       <command>success</command> counter
+                       of previous versions of
+                       <acronym>BIND</acronym> 9.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>QryAuthAns</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command></command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       Queries resulted in authoritative answer.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>QryNoauthAns</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command>SNaAns</command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       Queries resulted in non authoritative answer.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>QryReferral</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command></command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       Queries resulted in referral answer.
+                       This corresponds to the
+                       <command>referral</command> counter
+                       of previous versions of
+                       <acronym>BIND</acronym> 9.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>QryNxrrset</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command></command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       Queries resulted in NOERROR responses with no data.
+                       This corresponds to the
+                       <command>nxrrset</command> counter
+                       of previous versions of
+                       <acronym>BIND</acronym> 9.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>QrySERVFAIL</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command>SFail</command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       Queries resulted in SERVFAIL.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>QryFORMERR</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command>SFErr</command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       Queries resulted in FORMERR.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>QryNXDOMAIN</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command>SNXD</command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       Queries resulted in NXDOMAIN.
+                       This corresponds to the
+                       <command>nxdomain</command> counter
+                       of previous versions of
+                       <acronym>BIND</acronym> 9.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>QryRecursion</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command>RFwdQ</command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       Queries which caused the server
+                       to perform recursion in order to find the final answer.
+                       This corresponds to the
+                       <command>recursion</command> counter
+                       of previous versions of
+                       <acronym>BIND</acronym> 9.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>QryDuplicate</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command>RDupQ</command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       Queries which the server attempted to
+                       recurse but discovered an existing query with the same
+                       IP address, port, query ID, name, type and class
+                       already being processed.
+                       This corresponds to the
+                       <command>duplicate</command> counter
+                       of previous versions of
+                       <acronym>BIND</acronym> 9.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>QryDropped</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command></command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       Queries for which the server
+                       discovered an excessive number of existing
+                       recursive queries for the same name, type and
+                       class and were subsequently dropped.
+                       This corresponds to the
+                       <command>dropped</command> counter
+                       of previous versions of
+                       <acronym>BIND</acronym> 9.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>QryFailure</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command></command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       Other query failures.
+                       This corresponds to the
+                       <command>failure</command> counter
+                       of previous versions of
+                       <acronym>BIND</acronym> 9.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>XfrReqDone</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command></command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       Requested zone transfers completed.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>UpdateReqFwd</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command></command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       Update requests forwarded.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>UpdateRespFwd</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command></command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       Update responses forwarded.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>UpdateFwdFail</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command></command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       Dynamic update forward failed.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>UpdateDone</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command></command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       Dynamic updates completed.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>UpdateFail</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command></command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       Dynamic updates failed.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>UpdateBadPrereq</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command></command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       Dynamic updates rejected due to prerequisite failure.
+                     </para>
+                   </entry>
+                 </row>
+               </tbody>
+              </tgroup>
+            </informaltable>
+          </sect3>
+
+         <sect3>
+            <title>Zone Maintenance Statistics Counters</title>
+
+            <informaltable colsep="0" rowsep="0">
+              <tgroup cols="2" colsep="0" rowsep="0" tgroupstyle="4Level-table">
+               <colspec colname="1" colnum="1" colsep="0" colwidth="1.150in"/>
+               <colspec colname="2" colnum="2" colsep="0" colwidth="3.350in"/>
+               <tbody>
+                 <row>
+                   <entry colname="1">
+                      <para>
+                       <emphasis>Symbol</emphasis>
+                      </para>
+                   </entry>
+                   <entry colname="2">
+                      <para>
+                       <emphasis>Description</emphasis>
+                      </para>
+                   </entry>
+                 </row>
+
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>NotifyOutv4</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para>
+                       IPv4 notifies sent.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>NotifyOutv6</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para>
+                       IPv6 notifies sent.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>NotifyInv4</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para>
+                       IPv4 notifies received.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>NotifyInv6</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para>
+                       IPv6 notifies received.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>NotifyRej</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para>
+                       Incoming notifies rejected.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>SOAOutv4</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para>
+                       IPv4 SOA queries sent.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>SOAOutv6</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para>
+                       IPv6 SOA queries sent.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>AXFRReqv4</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para>
+                       IPv4 AXFR requested.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>AXFRReqv6</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para>
+                       IPv6 AXFR requested.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>IXFRReqv4</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para>
+                       IPv4 IXFR requested.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>IXFRReqv6</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para>
+                       IPv6 IXFR requested.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>XfrSuccess</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para>
+                       Zone transfer requests succeeded.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>XfrFail</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para>
+                       Zone transfer requests failed.
+                     </para>
+                   </entry>
+                 </row>
+               </tbody>
+              </tgroup>
+            </informaltable>
+         </sect3>
+
+         <sect3>
+            <title>Resolver Statistics Counters</title>
+
+            <informaltable colsep="0" rowsep="0">
+              <tgroup cols="3" colsep="0" rowsep="0" tgroupstyle="4Level-table">
+               <colspec colname="1" colnum="1" colsep="0" colwidth="1.150in"/>
+               <colspec colname="2" colnum="2" colsep="0" colwidth="1.150in"/>
+               <colspec colname="3" colnum="3" colsep="0" colwidth="3.350in"/>
+               <tbody>
+                 <row>
+                   <entry colname="1">
+                      <para>
+                       <emphasis>Symbol</emphasis>
+                      </para>
+                   </entry>
+                   <entry colname="2">
+                      <para>
+                       <emphasis>BIND8 Symbol</emphasis>
+                      </para>
+                   </entry>
+                   <entry colname="3">
+                      <para>
+                       <emphasis>Description</emphasis>
+                      </para>
+                   </entry>
+                 </row>
+
+
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>Queryv4</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command>SFwdQ</command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       IPv4 queries sent.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>Queryv6</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command>SFwdQ</command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       IPv6 queries sent.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>Responsev4</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command>RR</command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       IPv4 responses received.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>Responsev6</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command>RR</command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       IPv6 responses received.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>NXDOMAIN</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command>RNXD</command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       NXDOMAIN received.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>SERVFAIL</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command>RFail</command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       SERVFAIL received.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>FORMERR</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command>RFErr</command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       FORMERR received.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>OtherError</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command>RErr</command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       Other errors received.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>EDNS0Fail</command></para>
+                                                </entry>
+                   <entry colname="2">
+                     <para><command></command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       EDNS(0) query failures.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>Mismatch</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command>RDupR</command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       Mismatch responses received.
+                       When shown via an HTTP statistics channel,
+                       this counter is shown in the
+                       Name Server Statistics section for brevity.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>Truncated</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command></command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       Truncated responses received.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>Lame</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command>RLame</command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       Lame delegations received.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>Retry</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command>SDupQ</command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       Query retries performed.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>GlueFetchv4</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command>SSysQ</command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       IPv4 NS address fetches invoked.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>GlueFetchv6</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command>SSysQ</command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       IPv6 NS address fetches invoked.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>GlueFetchv4Fail</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command></command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       IPv4 NS address fetch failed.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>GlueFetchv6Fail</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command></command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       IPv6 NS address fetch failed.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>ValAttempt</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command></command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       DNSSEC validation attempted.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>ValOk</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command></command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       DNSSEC validation succeeded.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>ValNegOk</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command></command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       DNSSEC validation on negative information succeeded.
+                     </para>
+                   </entry>
+                 </row>
+                 <row rowsep="0">
+                   <entry colname="1">
+                     <para><command>ValFail</command></para>
+                   </entry>
+                   <entry colname="2">
+                     <para><command></command></para>
+                   </entry>
+                   <entry colname="3">
+                     <para>
+                       DNSSEC validation failed.
+                     </para>
+                   </entry>
+                 </row>
+
+               </tbody>
+              </tgroup>
+            </informaltable>
+
+         </sect3>
+
+         <sect3>
+            <title>Compatibility with <emphasis>BIND</emphasis> 8 Counters</title>
+           <para>
+             Most statistics counters that were available
+             in <command>BIND</command> 8 are also supported in
+             <command>BIND</command> 9 as shown in the above tables.
+             Here are notes about other counters that do not appear
+             in these tables.
+           </para>
+
+            <variablelist>
+              <varlistentry>
+               <term><command>RFwdR,SFwdR</command></term>
+               <listitem>
+                 <para>
+                   These counters are not supported
+                   because <command>BIND</command> 9 does not adopt
+                   the notion of <emphasis>forwarding</emphasis>
+                   as <command>BIND</command> 8 did.
+                 </para>
+               </listitem>
+             </varlistentry>
+
+              <varlistentry>
+               <term><command>RAXFR</command></term>
+               <listitem>
+                 <para>
+                   This counter is accessible in the Incoming Queries section.
+                 </para>
+               </listitem>
+             </varlistentry>
+
+              <varlistentry>
+               <term><command>RIQ</command></term>
+               <listitem>
+                 <para>
+                   This counter is accessible in the Incoming Requests section.
+                 </para>
+               </listitem>
+             </varlistentry>
+
+              <varlistentry>
+               <term><command>ROpts</command></term>
+               <listitem>
+                 <para>
+                   This counter is not supported
+                   because <command>BIND</command> 9 does not care
+                   about IP options in the first place.
+                 </para>
+               </listitem>
+             </varlistentry>
+
+              <varlistentry>
+               <term><command>SErr</command></term>
+               <listitem>
+                 <para>
+                   This counter could be implemented, but is not yet
+                   supported.
+                 </para>
+               </listitem>
+             </varlistentry>
+
+           </variablelist>
+         </sect3>
+        </sect2>
+      </sect1>
+
     </chapter>
     <chapter id="Bv9ARM.ch07">
       <title><acronym>BIND</acronym> 9 Security Considerations</title>