Commit 10966da9 authored by Mark Andrews's avatar Mark Andrews

4402. [func] Collect statistics for RSSAC02v3 traffic-volume,

                        traffic-sizes and rcode-volume reporting. [RT #41475]
parent 393c9780
4402. [func] Collect statistics for RSSAC02v3 traffic-volume,
traffic-sizes and rcode-volume reporting. [RT #41475]
4401. [bug] Fix leaks in contrib DLZ code. [RT #42707]
4400. [doc] Description of masters with TSIG, allow-query and
......
......@@ -1199,8 +1199,20 @@ client_send(ns_client_t *client) {
}
#endif /* HAVE_DNSTAP */
isc_stats_increment(ns_g_server->tcpoutstats,
ISC_MIN((int)respsize / 16, 256));
switch (isc_sockaddr_pf(&client->peeraddr)) {
case AF_INET:
isc_stats_increment(ns_g_server->tcpoutstats4,
ISC_MIN((int)respsize / 16, 256));
break;
case AF_INET6:
isc_stats_increment(ns_g_server->tcpoutstats6,
ISC_MIN((int)respsize / 16, 256));
break;
default:
INSIST(0);
break;
}
} else {
respsize = isc_buffer_usedlength(&buffer);
result = client_sendpkg(client, &buffer);
......@@ -1213,13 +1225,26 @@ client_send(ns_client_t *client) {
}
#endif /* HAVE_DNSTAP */
isc_stats_increment(ns_g_server->udpoutstats,
ISC_MIN((int)respsize / 16, 256));
switch (isc_sockaddr_pf(&client->peeraddr)) {
case AF_INET:
isc_stats_increment(ns_g_server->udpoutstats4,
ISC_MIN((int)respsize / 16, 256));
break;
case AF_INET6:
isc_stats_increment(ns_g_server->udpoutstats6,
ISC_MIN((int)respsize / 16, 256));
break;
default:
INSIST(0);
break;
}
}
/* update statistics (XXXJT: is it okay to access message->xxxkey?) */
isc_stats_increment(ns_g_server->nsstats, dns_nsstatscounter_response);
dns_rcodestats_increment(ns_g_server->rcodestats,
client->message->rcode);
if (opt_included) {
isc_stats_increment(ns_g_server->nsstats,
dns_nsstatscounter_edns0out);
......@@ -2332,11 +2357,33 @@ client_request(isc_task_t *task, isc_event_t *event) {
if (TCP_CLIENT(client)) {
isc_stats_increment(ns_g_server->nsstats,
dns_nsstatscounter_requesttcp);
isc_stats_increment(ns_g_server->tcpinstats,
ISC_MIN((int)reqsize / 16, 18));
switch (isc_sockaddr_pf(&client->peeraddr)) {
case AF_INET:
isc_stats_increment(ns_g_server->tcpinstats4,
ISC_MIN((int)reqsize / 16, 18));
break;
case AF_INET6:
isc_stats_increment(ns_g_server->tcpinstats6,
ISC_MIN((int)reqsize / 16, 18));
break;
default:
INSIST(0);
break;
}
} else {
isc_stats_increment(ns_g_server->udpinstats,
ISC_MIN((int)reqsize / 16, 18));
switch (isc_sockaddr_pf(&client->peeraddr)) {
case AF_INET:
isc_stats_increment(ns_g_server->udpinstats4,
ISC_MIN((int)reqsize / 16, 18));
break;
case AF_INET6:
isc_stats_increment(ns_g_server->udpinstats6,
ISC_MIN((int)reqsize / 16, 18));
break;
default:
INSIST(0);
break;
}
}
/*
......
......@@ -101,10 +101,15 @@ struct ns_server {
isc_stats_t * zonestats; /*% Zone management stats */
isc_stats_t * resolverstats; /*% Resolver stats */
isc_stats_t * sockstats; /*%< Socket stats */
isc_stats_t * udpinstats; /*%< Traffic size: UDP in */
isc_stats_t * udpoutstats; /*%< Traffic size: UDP out */
isc_stats_t * tcpinstats; /*%< Traffic size: TCP in */
isc_stats_t * tcpoutstats; /*%< Traffic size: TCP out */
isc_stats_t * udpinstats4; /*%< Traffic size: UDPv4 in */
isc_stats_t * udpoutstats4; /*%< Traffic size: UDPv4 out */
isc_stats_t * udpinstats6; /*%< Traffic size: UDPv6 in */
isc_stats_t * udpoutstats6; /*%< Traffic size: UDPv6 out */
isc_stats_t * tcpinstats4; /*%< Traffic size: TCPv4 in */
isc_stats_t * tcpoutstats4; /*%< Traffic size: TCPv4 out */
isc_stats_t * tcpinstats6; /*%< Traffic size: TCPv6 in */
isc_stats_t * tcpoutstats6; /*%< Traffic size: TCPv6 out */
dns_stats_t * rcodestats; /*%< Sent Response code stats */
ns_controls_t * controls; /*%< Control channels */
unsigned int dispatchgen;
......
......@@ -7834,13 +7834,18 @@ ns_server_create(isc_mem_t *mctx, ns_server_t **serverp) {
server->nsstats = NULL;
server->rcvquerystats = NULL;
server->opcodestats = NULL;
server->rcodestats = NULL;
server->zonestats = NULL;
server->resolverstats = NULL;
server->sockstats = NULL;
server->udpinstats = NULL;
server->udpoutstats = NULL;
server->tcpinstats = NULL;
server->tcpoutstats = NULL;
server->udpinstats4 = NULL;
server->udpoutstats4 = NULL;
server->udpinstats6 = NULL;
server->udpoutstats6 = NULL;
server->tcpinstats4 = NULL;
server->tcpoutstats4 = NULL;
server->tcpinstats6 = NULL;
server->tcpoutstats6 = NULL;
CHECKFATAL(isc_stats_create(server->mctx, &server->sockstats,
isc_sockstatscounter_max),
"isc_stats_create");
......@@ -7882,6 +7887,9 @@ ns_server_create(isc_mem_t *mctx, ns_server_t **serverp) {
CHECKFATAL(dns_opcodestats_create(ns_g_mctx, &server->opcodestats),
"dns_stats_create (opcode)");
CHECKFATAL(dns_rcodestats_create(ns_g_mctx, &server->rcodestats),
"dns_stats_create (rcode)");
CHECKFATAL(isc_stats_create(ns_g_mctx, &server->zonestats,
dns_zonestatscounter_max),
"dns_stats_create (zone)");
......@@ -7890,21 +7898,37 @@ ns_server_create(isc_mem_t *mctx, ns_server_t **serverp) {
dns_resstatscounter_max),
"dns_stats_create (resolver)");
CHECKFATAL(isc_stats_create(ns_g_mctx, &server->udpinstats,
CHECKFATAL(isc_stats_create(ns_g_mctx, &server->udpinstats4,
dns_sizecounter_in_max),
"dns_stats_create (inbound UDP IPv4 traffic size)");
CHECKFATAL(isc_stats_create(ns_g_mctx, &server->udpoutstats4,
dns_sizecounter_out_max),
"dns_stats_create (outbound UDP IPv4 traffic size)");
CHECKFATAL(isc_stats_create(ns_g_mctx, &server->udpinstats6,
dns_sizecounter_in_max),
"dns_stats_create (inbound UDP IPv6 traffic size)");
CHECKFATAL(isc_stats_create(ns_g_mctx, &server->udpoutstats6,
dns_sizecounter_out_max),
"dns_stats_create (outbound UDP IPv6 traffic size)");
CHECKFATAL(isc_stats_create(ns_g_mctx, &server->tcpinstats4,
dns_sizecounter_in_max),
"dns_stats_create (inbound UDP traffic size)");
"dns_stats_create (inbound TCP IPv4 traffic size)");
CHECKFATAL(isc_stats_create(ns_g_mctx, &server->udpoutstats,
CHECKFATAL(isc_stats_create(ns_g_mctx, &server->tcpoutstats4,
dns_sizecounter_out_max),
"dns_stats_create (outbound UDP traffic size)");
"dns_stats_create (outbound TCP IPv4 traffic size)");
CHECKFATAL(isc_stats_create(ns_g_mctx, &server->tcpinstats,
CHECKFATAL(isc_stats_create(ns_g_mctx, &server->tcpinstats6,
dns_sizecounter_in_max),
"dns_stats_create (inbound TCP traffic size)");
"dns_stats_create (inbound TCP IPv6 traffic size)");
CHECKFATAL(isc_stats_create(ns_g_mctx, &server->tcpoutstats,
CHECKFATAL(isc_stats_create(ns_g_mctx, &server->tcpoutstats6,
dns_sizecounter_out_max),
"dns_stats_create (outbound TCP traffic size)");
"dns_stats_create (outbound TCP IPv6 traffic size)");
server->flushonshutdown = ISC_FALSE;
server->log_queries = ISC_FALSE;
......@@ -7948,13 +7972,18 @@ ns_server_destroy(ns_server_t **serverp) {
isc_stats_detach(&server->nsstats);
dns_stats_detach(&server->rcvquerystats);
dns_stats_detach(&server->opcodestats);
dns_stats_detach(&server->rcodestats);
isc_stats_detach(&server->zonestats);
isc_stats_detach(&server->resolverstats);
isc_stats_detach(&server->sockstats);
isc_stats_detach(&server->udpinstats);
isc_stats_detach(&server->udpoutstats);
isc_stats_detach(&server->tcpinstats);
isc_stats_detach(&server->tcpoutstats);
isc_stats_detach(&server->udpinstats4);
isc_stats_detach(&server->udpoutstats4);
isc_stats_detach(&server->udpinstats6);
isc_stats_detach(&server->udpoutstats6);
isc_stats_detach(&server->tcpinstats4);
isc_stats_detach(&server->tcpoutstats4);
isc_stats_detach(&server->tcpinstats6);
isc_stats_detach(&server->tcpoutstats6);
isc_mem_free(server->mctx, server->statsfile);
isc_mem_free(server->mctx, server->bindkeysfile);
......
......@@ -32,9 +32,10 @@
#include <dns/cache.h>
#include <dns/db.h>
#include <dns/opcode.h>
#include <dns/resolver.h>
#include <dns/rcode.h>
#include <dns/rdataclass.h>
#include <dns/rdatatype.h>
#include <dns/resolver.h>
#include <dns/stats.h>
#include <dns/view.h>
#include <dns/zt.h>
......@@ -1279,8 +1280,8 @@ opcodestat_dump(dns_opcode_t code, isc_uint64_t val, void *arg) {
TRY0(xmlTextWriterWriteAttribute(writer, ISC_XMLCHAR "name",
ISC_XMLCHAR codebuf ));
TRY0(xmlTextWriterWriteFormatString(writer,
"%" ISC_PRINT_QUADFORMAT "u",
val));
"%" ISC_PRINT_QUADFORMAT "u",
val));
TRY0(xmlTextWriterEndElement(writer)); /* counter */
#endif
break;
......@@ -1305,6 +1306,62 @@ opcodestat_dump(dns_opcode_t code, isc_uint64_t val, void *arg) {
#endif
}
static void
rcodestat_dump(dns_rcode_t code, isc_uint64_t val, void *arg) {
FILE *fp;
isc_buffer_t b;
char codebuf[64];
stats_dumparg_t *dumparg = arg;
#ifdef HAVE_LIBXML2
xmlTextWriterPtr writer;
int xmlrc;
#endif
#ifdef HAVE_JSON
json_object *zoneobj, *obj;
#endif
isc_buffer_init(&b, codebuf, sizeof(codebuf) - 1);
dns_rcode_totext(code, &b);
codebuf[isc_buffer_usedlength(&b)] = '\0';
switch (dumparg->type) {
case isc_statsformat_file:
fp = dumparg->arg;
fprintf(fp, "%20" ISC_PRINT_QUADFORMAT "u %s\n", val, codebuf);
break;
case isc_statsformat_xml:
#ifdef HAVE_LIBXML2
writer = dumparg->arg;
TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "counter"));
TRY0(xmlTextWriterWriteAttribute(writer, ISC_XMLCHAR "name",
ISC_XMLCHAR codebuf ));
TRY0(xmlTextWriterWriteFormatString(writer,
"%" ISC_PRINT_QUADFORMAT "u",
val));
TRY0(xmlTextWriterEndElement(writer)); /* counter */
#endif
break;
case isc_statsformat_json:
#ifdef HAVE_JSON
zoneobj = (json_object *) dumparg->arg;
obj = json_object_new_int64(val);
if (obj == NULL)
return;
json_object_object_add(zoneobj, codebuf, obj);
#endif
break;
}
return;
#ifdef HAVE_LIBXML2
error:
isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_SERVER,
ISC_LOG_ERROR, "failed at rcodestat_dump()");
dumparg->result = ISC_R_FAILURE;
return;
#endif
}
#ifdef HAVE_LIBXML2
/*
* Which statistics to include when rendering to XML
......@@ -1480,6 +1537,17 @@ generatexml(ns_server_t *server, isc_uint32_t flags,
TRY0(xmlTextWriterEndElement(writer));
TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "counters"));
TRY0(xmlTextWriterWriteAttribute(writer, ISC_XMLCHAR "type",
ISC_XMLCHAR "rcode"));
dns_rcodestats_dump(server->rcodestats, rcodestat_dump,
&dumparg, ISC_STATSDUMP_VERBOSE);
if (dumparg.result != ISC_R_SUCCESS)
goto error;
TRY0(xmlTextWriterEndElement(writer));
TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "counters"));
TRY0(xmlTextWriterWriteAttribute(writer, ISC_XMLCHAR "type",
ISC_XMLCHAR "qtype"));
......@@ -1555,12 +1623,13 @@ generatexml(ns_server_t *server, isc_uint32_t flags,
if ((flags & STATS_XML_TRAFFIC) != 0) {
TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "traffic"));
TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "ipv4"));
TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "udp"));
TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "counters"));
TRY0(xmlTextWriterWriteAttribute(writer, ISC_XMLCHAR "type",
ISC_XMLCHAR "request-size"));
result = dump_counters(server->udpinstats,
result = dump_counters(server->udpinstats4,
isc_statsformat_xml, writer,
NULL, udpinsizestats_xmldesc,
dns_sizecounter_in_max,
......@@ -1575,7 +1644,7 @@ generatexml(ns_server_t *server, isc_uint32_t flags,
TRY0(xmlTextWriterWriteAttribute(writer, ISC_XMLCHAR "type",
ISC_XMLCHAR "response-size"));
result = dump_counters(server->udpoutstats,
result = dump_counters(server->udpoutstats4,
isc_statsformat_xml, writer,
NULL, udpoutsizestats_xmldesc,
dns_sizecounter_out_max,
......@@ -1592,7 +1661,7 @@ generatexml(ns_server_t *server, isc_uint32_t flags,
TRY0(xmlTextWriterWriteAttribute(writer, ISC_XMLCHAR "type",
ISC_XMLCHAR "request-size"));
result = dump_counters(server->tcpinstats,
result = dump_counters(server->tcpinstats4,
isc_statsformat_xml, writer,
NULL, tcpinsizestats_xmldesc,
dns_sizecounter_in_max,
......@@ -1607,7 +1676,7 @@ generatexml(ns_server_t *server, isc_uint32_t flags,
TRY0(xmlTextWriterWriteAttribute(writer, ISC_XMLCHAR "type",
ISC_XMLCHAR "response-size"));
result = dump_counters(server->tcpoutstats,
result = dump_counters(server->tcpoutstats4,
isc_statsformat_xml, writer,
NULL, tcpoutsizestats_xmldesc,
dns_sizecounter_out_max,
......@@ -1618,10 +1687,76 @@ generatexml(ns_server_t *server, isc_uint32_t flags,
TRY0(xmlTextWriterEndElement(writer)); /* </counters> */
TRY0(xmlTextWriterEndElement(writer)); /* </tcp> */
TRY0(xmlTextWriterEndElement(writer)); /* </ipv4> */
TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "ipv6"));
TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "udp"));
TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "counters"));
TRY0(xmlTextWriterWriteAttribute(writer, ISC_XMLCHAR "type",
ISC_XMLCHAR "request-size"));
result = dump_counters(server->udpinstats6,
isc_statsformat_xml, writer,
NULL, udpinsizestats_xmldesc,
dns_sizecounter_in_max,
udpinsizestats_index,
udpinsizestat_values, 0);
if (result != ISC_R_SUCCESS)
goto error;
TRY0(xmlTextWriterEndElement(writer)); /* </counters> */
TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "counters"));
TRY0(xmlTextWriterWriteAttribute(writer, ISC_XMLCHAR "type",
ISC_XMLCHAR "response-size"));
result = dump_counters(server->udpoutstats6,
isc_statsformat_xml, writer,
NULL, udpoutsizestats_xmldesc,
dns_sizecounter_out_max,
udpoutsizestats_index,
udpoutsizestat_values, 0);
if (result != ISC_R_SUCCESS)
goto error;
TRY0(xmlTextWriterEndElement(writer)); /* </counters> */
TRY0(xmlTextWriterEndElement(writer)); /* </udp> */
TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "tcp"));
TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "counters"));
TRY0(xmlTextWriterWriteAttribute(writer, ISC_XMLCHAR "type",
ISC_XMLCHAR "request-size"));
result = dump_counters(server->tcpinstats6,
isc_statsformat_xml, writer,
NULL, tcpinsizestats_xmldesc,
dns_sizecounter_in_max,
tcpinsizestats_index,
tcpinsizestat_values, 0);
if (result != ISC_R_SUCCESS)
goto error;
TRY0(xmlTextWriterEndElement(writer)); /* </counters> */
TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "counters"));
TRY0(xmlTextWriterWriteAttribute(writer, ISC_XMLCHAR "type",
ISC_XMLCHAR "response-size"));
result = dump_counters(server->tcpoutstats6,
isc_statsformat_xml, writer,
NULL, tcpoutsizestats_xmldesc,
dns_sizecounter_out_max,
tcpoutsizestats_index,
tcpoutsizestat_values, 0);
if (result != ISC_R_SUCCESS)
goto error;
TRY0(xmlTextWriterEndElement(writer)); /* </counters> */
TRY0(xmlTextWriterEndElement(writer)); /* </tcp> */
TRY0(xmlTextWriterEndElement(writer)); /* </ipv6> */
TRY0(xmlTextWriterEndElement(writer)); /* </traffic> */
}
/*
* Render views. For each view we know of, call its
* rendering function.
......@@ -1928,6 +2063,12 @@ render_xml_traffic(const char *url, isc_httpdurl_t *urlinfo,
#define STATS_JSON_TRAFFIC 0x20
#define STATS_JSON_ALL 0xff
#define CHECK(m) do { \
result = (m); \
if (result != ISC_R_SUCCESS) \
goto error; \
} while (0)
#define CHECKMEM(m) do { \
if (m == NULL) { \
result = ISC_R_NOMEMORY;\
......@@ -2061,6 +2202,11 @@ generatejson(ns_server_t *server, size_t *msglen,
dns_view_t *view;
isc_result_t result = ISC_R_SUCCESS;
json_object *bindstats, *viewlist, *counters, *obj;
json_object *traffic = NULL;
json_object *udpreq4 = NULL, *udpresp4 = NULL;
json_object *tcpreq4 = NULL, *tcpresp4 = NULL;
json_object *udpreq6 = NULL, *udpresp6 = NULL;
json_object *tcpreq6 = NULL, *tcpresp6 = NULL;
isc_uint64_t nsstat_values[dns_nsstatscounter_max];
isc_uint64_t resstat_values[dns_resstatscounter_max];
isc_uint64_t adbstat_values[dns_adbstats_max];
......@@ -2134,6 +2280,24 @@ generatejson(ns_server_t *server, size_t *msglen,
else
json_object_put(counters);
/* OPCODE counters */
counters = json_object_new_object();
dumparg.type = isc_statsformat_json;
dumparg.arg = counters;
dns_rcodestats_dump(server->rcodestats, rcodestat_dump,
&dumparg, ISC_STATSDUMP_VERBOSE);
if (dumparg.result != ISC_R_SUCCESS) {
json_object_put(counters);
goto error;
}
if (json_object_get_object(counters)->count != 0)
json_object_object_add(bindstats, "rcodes", counters);
else
json_object_put(counters);
/* QTYPE counters */
counters = json_object_new_object();
......@@ -2419,76 +2583,124 @@ generatejson(ns_server_t *server, size_t *msglen,
}
if ((flags & STATS_JSON_TRAFFIC) != 0) {
json_object *traffic, *udpreq, *udpresp, *tcpreq, *tcpresp;
traffic = json_object_new_object();
CHECKMEM(traffic);
udpreq = json_object_new_object();
CHECKMEM(udpreq);
udpresp = json_object_new_object();
CHECKMEM(udpresp);
tcpreq = json_object_new_object();
CHECKMEM(tcpreq);
tcpresp = json_object_new_object();
CHECKMEM(tcpresp);
result = dump_counters(server->udpinstats,
isc_statsformat_json, udpreq, NULL,
udpinsizestats_xmldesc,
dns_sizecounter_in_max,
udpinsizestats_index,
udpinsizestat_values, 0);
if (result != ISC_R_SUCCESS) {
json_object_put(traffic);
goto error;
}
result = dump_counters(server->udpoutstats,
isc_statsformat_json, udpresp, NULL,
udpoutsizestats_xmldesc,
dns_sizecounter_out_max,
udpoutsizestats_index,
udpoutsizestat_values, 0);
if (result != ISC_R_SUCCESS) {
json_object_put(traffic);
goto error;
}
result = dump_counters(server->tcpinstats,
isc_statsformat_json, tcpreq, NULL,
tcpinsizestats_xmldesc,
dns_sizecounter_in_max,
tcpinsizestats_index,
tcpinsizestat_values, 0);
if (result != ISC_R_SUCCESS) {
json_object_put(traffic);
goto error;
}
result = dump_counters(server->tcpoutstats,
isc_statsformat_json, tcpresp, NULL,
tcpoutsizestats_xmldesc,
dns_sizecounter_out_max,
tcpoutsizestats_index,
tcpoutsizestat_values, 0);
if (result != ISC_R_SUCCESS) {
json_object_put(traffic);
goto error;
}
udpreq4 = json_object_new_object();
CHECKMEM(udpreq4);
udpresp4 = json_object_new_object();
CHECKMEM(udpresp4);
tcpreq4 = json_object_new_object();
CHECKMEM(tcpreq4);
tcpresp4 = json_object_new_object();
CHECKMEM(tcpresp4);
udpreq6 = json_object_new_object();
CHECKMEM(udpreq6);
udpresp6 = json_object_new_object();
CHECKMEM(udpresp6);
tcpreq6 = json_object_new_object();
CHECKMEM(tcpreq6);
tcpresp6 = json_object_new_object();
CHECKMEM(tcpresp6);
CHECK(dump_counters(server->udpinstats4,
isc_statsformat_json, udpreq4, NULL,
udpinsizestats_xmldesc,
dns_sizecounter_in_max,
udpinsizestats_index,
udpinsizestat_values, 0));
CHECK(dump_counters(server->udpoutstats4,
isc_statsformat_json, udpresp4, NULL,
udpoutsizestats_xmldesc,
dns_sizecounter_out_max,
udpoutsizestats_index,
udpoutsizestat_values, 0));
CHECK(dump_counters(server->tcpinstats4,
isc_statsformat_json, tcpreq4, NULL,
tcpinsizestats_xmldesc,
dns_sizecounter_in_max,
tcpinsizestats_index,
tcpinsizestat_values, 0));
CHECK(dump_counters(server->tcpoutstats4,
isc_statsformat_json, tcpresp4, NULL,
tcpoutsizestats_xmldesc,
dns_sizecounter_out_max,
tcpoutsizestats_index,
tcpoutsizestat_values, 0));
CHECK(dump_counters(server->udpinstats6,
isc_statsformat_json, udpreq6, NULL,
udpinsizestats_xmldesc,
dns_sizecounter_in_max,
udpinsizestats_index,
udpinsizestat_values, 0));
CHECK(dump_counters(server->udpoutstats6,
isc_statsformat_json, udpresp6, NULL,
udpoutsizestats_xmldesc,
dns_sizecounter_out_max,
udpoutsizestats_index,
udpoutsizestat_values, 0));
CHECK(dump_counters(server->tcpinstats6,
isc_statsformat_json, tcpreq6, NULL,
tcpinsizestats_xmldesc,
dns_sizecounter_in_max,
tcpinsizestats_index,
tcpinsizestat_values, 0));
CHECK(dump_counters(server->tcpoutstats6,