#include <isc/mem.h>
#include <isc/once.h>
#include <isc/stats.h>
+#include <isc/statsmulti.h>
#include <isc/string.h>
#include <isc/util.h>
#endif /* ifdef HAVE_LIBXML2 */
}
+static void rdtypestat_dump(dns_rdatastatstype_t type, uint64_t val, void *arg);
+
+static void
+rdtypestat_dumpcb(isc_statscounter_t counter, uint64_t value, void *arg) {
+ dns_rdatastatstype_t type;
+ dns_rdatatype_t rdtype = dns_rdatatype_none;
+ unsigned int attributes = 0;
+
+ /* Convert counter back to dns_rdatastatstype_t, based on rdatatype_dumpcb */
+ if ((counter & 0xff) == 0) {
+ attributes |= DNS_RDATASTATSTYPE_ATTR_OTHERTYPE;
+ } else {
+ rdtype = (dns_rdatatype_t)(counter & 0xff);
+ }
+ type = DNS_RDATASTATSTYPE_VALUE((dns_rdatastatstype_t)rdtype, attributes);
+ rdtypestat_dump(type, value, arg);
+}
+
static void
rdtypestat_dump(dns_rdatastatstype_t type, uint64_t val, void *arg) {
char typebuf[64];
ISC_XMLCHAR "qtype"));
dumparg.result = ISC_R_SUCCESS;
- dns_rdatatypestats_dump(server->sctx->rcvquerystats,
- rdtypestat_dump, &dumparg, 0);
+ isc_statsmulti_dump(server->sctx->rcvquerystats,
+ rdtypestat_dumpcb, &dumparg, 0);
CHECK(dumparg.result);
TRY0(xmlTextWriterEndElement(writer)); /* counters */
dumparg.result = ISC_R_SUCCESS;
dumparg.arg = counters;
- dns_rdatatypestats_dump(server->sctx->rcvquerystats,
- rdtypestat_dump, &dumparg, 0);
+ isc_statsmulti_dump(server->sctx->rcvquerystats,
+ rdtypestat_dumpcb, &dumparg, 0);
if (dumparg.result != ISC_R_SUCCESS) {
json_object_put(counters);
goto cleanup;
&dumparg, 0);
fprintf(fp, "++ Incoming Queries ++\n");
- dns_rdatatypestats_dump(server->sctx->rcvquerystats, rdtypestat_dump,
- &dumparg, 0);
+ isc_statsmulti_dump(server->sctx->rcvquerystats, rdtypestat_dumpcb,
+ &dumparg, 0);
fprintf(fp, "++ Outgoing Rcodes ++\n");
dns_rcodestats_dump(server->sctx->rcodestats, rcodestat_dump, &dumparg,
#include <isc/quota.h>
#include <isc/random.h>
#include <isc/sockaddr.h>
+#include <isc/statsmulti.h>
#include <isc/types.h>
#include <dns/acl.h>
ns_matchview_t matchingview;
/*% Stats counters */
- ns_stats_t *nsstats;
- dns_stats_t *rcvquerystats;
- dns_stats_t *opcodestats;
- dns_stats_t *rcodestats;
+ ns_stats_t *nsstats;
+ isc_statsmulti_t *rcvquerystats;
+ dns_stats_t *opcodestats;
+ dns_stats_t *rcodestats;
isc_histomulti_t *udpinstats4;
isc_histomulti_t *udpoutstats4;
#include <dns/stats.h>
#include <dns/tkey.h>
+#include <isc/statsmulti.h>
+
#include <ns/query.h>
#include <ns/server.h>
#include <ns/stats.h>
ns_stats_create(mctx, ns_statscounter_max, &sctx->nsstats);
- dns_rdatatypestats_create(mctx, &sctx->rcvquerystats);
+ isc_statsmulti_create(mctx, &sctx->rcvquerystats, 0x0602 + 1);
dns_opcodestats_create(mctx, &sctx->opcodestats);
}
if (sctx->rcvquerystats != NULL) {
- dns_stats_detach(&sctx->rcvquerystats);
+ isc_statsmulti_detach(&sctx->rcvquerystats);
}
if (sctx->opcodestats != NULL) {
dns_stats_detach(&sctx->opcodestats);