diff --git a/bin/named/statschannel.c b/bin/named/statschannel.c index 4778964e01..4d277d9ed8 100644 --- a/bin/named/statschannel.c +++ b/bin/named/statschannel.c @@ -1253,6 +1253,12 @@ rdtypestat_dump(dns_rdatastatstype_t type, uint64_t val, void *arg) { #endif } +static bool +rdatastatstype_attr(dns_rdatastatstype_t type, unsigned int attr) +{ + return ((DNS_RDATASTATSTYPE_ATTR(type) & attr) != 0); +} + static void rdatasetstats_dump(dns_rdatastatstype_t type, uint64_t val, void *arg) { stats_dumparg_t *dumparg = arg; @@ -1261,6 +1267,7 @@ rdatasetstats_dump(dns_rdatastatstype_t type, uint64_t val, void *arg) { const char *typestr; bool nxrrset = false; bool stale = false; + bool ancient = false; #ifdef HAVE_LIBXML2 void *writer; int xmlrc; @@ -1282,19 +1289,16 @@ rdatasetstats_dump(dns_rdatastatstype_t type, uint64_t val, void *arg) { typestr = typebuf; } - if ((DNS_RDATASTATSTYPE_ATTR(type) & DNS_RDATASTATSTYPE_ATTR_NXRRSET) - != 0) - nxrrset = true; - - if ((DNS_RDATASTATSTYPE_ATTR(type) & DNS_RDATASTATSTYPE_ATTR_STALE) - != 0) - stale = true; + nxrrset = rdatastatstype_attr(type, DNS_RDATASTATSTYPE_ATTR_NXRRSET); + stale = rdatastatstype_attr(type, DNS_RDATASTATSTYPE_ATTR_STALE); + ancient = rdatastatstype_attr(type, DNS_RDATASTATSTYPE_ATTR_ANCIENT); switch (dumparg->type) { case isc_statsformat_file: fp = dumparg->arg; - fprintf(fp, "%20" PRIu64 " %s%s%s\n", val, - stale ? "#" : "", nxrrset ? "!" : "", typestr); + fprintf(fp, "%20" PRIu64 " %s%s%s%s\n", val, + ancient ? "~" : "", stale ? "#" : "", + nxrrset ? "!" : "", typestr); break; case isc_statsformat_xml: #ifdef HAVE_LIBXML2 @@ -1302,7 +1306,8 @@ rdatasetstats_dump(dns_rdatastatstype_t type, uint64_t val, void *arg) { TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "rrset")); TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "name")); - TRY0(xmlTextWriterWriteFormatString(writer, "%s%s%s", + TRY0(xmlTextWriterWriteFormatString(writer, "%s%s%s%s", + ancient ? "~" : "", stale ? "#" : "", nxrrset ? "!" : "", typestr)); TRY0(xmlTextWriterEndElement(writer)); /* name */ @@ -1319,7 +1324,7 @@ rdatasetstats_dump(dns_rdatastatstype_t type, uint64_t val, void *arg) { case isc_statsformat_json: #ifdef HAVE_JSON_C zoneobj = (json_object *) dumparg->arg; - snprintf(buf, sizeof(buf), "%s%s%s", + snprintf(buf, sizeof(buf), "%s%s%s%s", ancient ? "~" : "", stale ? "#" : "", nxrrset ? "!" : "", typestr); obj = json_object_new_int64(val); if (obj == NULL) diff --git a/doc/arm/Bv9ARM-book.xml b/doc/arm/Bv9ARM-book.xml index 733496d797..ab2222d67c 100644 --- a/doc/arm/Bv9ARM-book.xml +++ b/doc/arm/Bv9ARM-book.xml @@ -15233,8 +15233,9 @@ HOST-127.EXAMPLE. MX 0 . type, it means that particular type of RRset is known to be nonexistent (this is also known as "NXRRSET"). If a hash mark (#) is present then - the RRset is marked for garbage collection. - Maintained per view. + the RRset is stale. If a tilde mark (~) is + present, the RRset is marked for garbage + collection. Maintained per view. diff --git a/lib/dns/include/dns/stats.h b/lib/dns/include/dns/stats.h index 52bab5378e..a4ee695db8 100644 --- a/lib/dns/include/dns/stats.h +++ b/lib/dns/include/dns/stats.h @@ -474,16 +474,24 @@ LIBDNS_EXTERNAL_DATA extern const char *dns_statscounter_names[]; * attribute is set, the base type is of no use. * * _STALE - * RRset type counters only. This indicates a record that marked for - * removal. + * RRset type counters only. This indicates a record that is stale + * but may still be served. * * Note: incrementing _STALE will decrement the corresponding non-stale * counter. + * + * _ANCIENT + * RRset type counters only. This indicates a record that is marked for + * removal. + * + * Note: incrementing _ANCIENT will decrement the corresponding + * non-ancient counter. */ #define DNS_RDATASTATSTYPE_ATTR_OTHERTYPE 0x0001 #define DNS_RDATASTATSTYPE_ATTR_NXRRSET 0x0002 #define DNS_RDATASTATSTYPE_ATTR_NXDOMAIN 0x0004 #define DNS_RDATASTATSTYPE_ATTR_STALE 0x0008 +#define DNS_RDATASTATSTYPE_ATTR_ANCIENT 0x0010 /*%< * Conversion macros among dns_rdatatype_t, attributes and isc_statscounter_t.