]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Change rdatatypestats_ to statsmulti
authorAlessio Podda <alessio@isc.org>
Tue, 9 Sep 2025 09:37:02 +0000 (11:37 +0200)
committerAlessio Podda <alessio@isc.org>
Wed, 24 Sep 2025 15:01:49 +0000 (17:01 +0200)
bin/named/statschannel.c
lib/ns/include/ns/server.h
lib/ns/query.c
lib/ns/server.c

index 97d6ba11e6bed12bc7e1246efe6696d0c1d4c7ea..3f1af22cfd30ae388609ea09a0ab253722ec9554 100644 (file)
@@ -21,6 +21,7 @@
 #include <isc/mem.h>
 #include <isc/once.h>
 #include <isc/stats.h>
+#include <isc/statsmulti.h>
 #include <isc/string.h>
 #include <isc/util.h>
 
@@ -961,6 +962,24 @@ cleanup:
 #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];
@@ -1842,8 +1861,8 @@ generatexml(named_server_t *server, uint32_t flags, int *buflen,
                                                 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 */
@@ -2921,8 +2940,8 @@ generatejson(named_server_t *server, size_t *msglen, const char **msg,
                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;
@@ -3964,8 +3983,8 @@ named_stats_dump(named_server_t *server, FILE *fp) {
                             &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,
index 32f4e1d66bc8b87b541739e401821c111408edf2..cf1bc0161c4f61a78eee64999f60e46ca92f0d09 100644 (file)
@@ -25,6 +25,7 @@
 #include <isc/quota.h>
 #include <isc/random.h>
 #include <isc/sockaddr.h>
+#include <isc/statsmulti.h>
 #include <isc/types.h>
 
 #include <dns/acl.h>
@@ -120,10 +121,10 @@ struct ns_server {
        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;
index 4c781f7d44faa05b8ed48724afa5f03421da20c3..800a756ac62bb9146a66875e3fc722b784082508 100644 (file)
@@ -11687,8 +11687,8 @@ ns_query_start(ns_client_t *client, isc_nmhandle_t *handle) {
        rdataset = ISC_LIST_HEAD(client->query.qname->list);
        INSIST(rdataset != NULL);
        client->query.qtype = qtype = rdataset->type;
-       dns_rdatatypestats_increment(client->manager->sctx->rcvquerystats,
-                                    qtype);
+       isc_statscounter_t counter = (qtype > 0xff) ? 0 : (isc_statscounter_t)qtype;
+       isc_statsmulti_increment(client->manager->sctx->rcvquerystats, counter);
 
        log_tat(client);
 
index e0843905d9f3c14cc3bd846838d17d133d683f0a..9a3665b53dea22e4ceba4dba82168fb06481291e 100644 (file)
@@ -22,6 +22,8 @@
 #include <dns/stats.h>
 #include <dns/tkey.h>
 
+#include <isc/statsmulti.h>
+
 #include <ns/query.h>
 #include <ns/server.h>
 #include <ns/stats.h>
@@ -72,7 +74,7 @@ ns_server_create(isc_mem_t *mctx, ns_matchview_t matchingview,
 
        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);
 
@@ -166,7 +168,7 @@ ns_server_detach(ns_server_t **sctxp) {
                }
 
                if (sctx->rcvquerystats != NULL) {
-                       dns_stats_detach(&sctx->rcvquerystats);
+                       isc_statsmulti_detach(&sctx->rcvquerystats);
                }
                if (sctx->opcodestats != NULL) {
                        dns_stats_detach(&sctx->opcodestats);