static inline void update_rdatasetstats (dns_stats_t * stats, dns_rdatastatstype_t rrsettype, isc_boolean_t increment) { int counter; dns_rdatatype_t rdtype; if ((DNS_RDATASTATSTYPE_ATTR (rrsettype) & DNS_RDATASTATSTYPE_ATTR_NXDOMAIN) != 0) { counter = rdtypecounter_nxdomain; } else { rdtype = DNS_RDATASTATSTYPE_BASE (rrsettype); if (rdtype == dns_rdatatype_dlv) counter = (int) rdtypecounter_dlv; else if (rdtype > dns_rdatatype_any) counter = (int) rdtypecounter_others; else counter = (int) rdtype; if ((DNS_RDATASTATSTYPE_ATTR (rrsettype) & DNS_RDATASTATSTYPE_ATTR_NXRRSET) != 0) counter += rdtypecounter_max; } if (increment) isc_stats_increment (stats->counters, counter); else isc_stats_decrement (stats->counters, counter); }
static void checkit2(dns_rdatastatstype_t which, isc_uint64_t value, void *arg) { unsigned int attributes; #if debug unsigned int type; #endif UNUSED(which); UNUSED(arg); attributes = DNS_RDATASTATSTYPE_ATTR(which); #if debug type = DNS_RDATASTATSTYPE_BASE(which); fprintf(stderr, "%s%s%s%s/%u, %u\n", attributes & DNS_RDATASTATSTYPE_ATTR_OTHERTYPE ? "O" : " ", attributes & DNS_RDATASTATSTYPE_ATTR_NXRRSET ? "!" : " ", attributes & DNS_RDATASTATSTYPE_ATTR_STALE ? "#" : " ", attributes & DNS_RDATASTATSTYPE_ATTR_NXDOMAIN ? "X" : " ", type, (unsigned)value); #endif if ((attributes & DNS_RDATASTATSTYPE_ATTR_STALE) == 0) ATF_REQUIRE_EQ(value, 0); else ATF_REQUIRE_EQ(value, 1); }
static void rdatasetstats_dump(dns_rdatastatstype_t type, isc_uint64_t val, void *arg) { stats_dumparg_t *dumparg = arg; FILE *fp; char typebuf[64]; const char *typestr; isc_boolean_t nxrrset = ISC_FALSE; #ifdef HAVE_LIBXML2 xmlTextWriterPtr writer; #endif if ((DNS_RDATASTATSTYPE_ATTR(type) & DNS_RDATASTATSTYPE_ATTR_NXDOMAIN) != 0) { typestr = "NXDOMAIN"; } else if ((DNS_RDATASTATSTYPE_ATTR(type) & DNS_RDATASTATSTYPE_ATTR_OTHERTYPE) != 0) { typestr = "Others"; } else { dns_rdatatype_format(DNS_RDATASTATSTYPE_BASE(type), typebuf, sizeof(typebuf)); typestr = typebuf; } if ((DNS_RDATASTATSTYPE_ATTR(type) & DNS_RDATASTATSTYPE_ATTR_NXRRSET) != 0) nxrrset = ISC_TRUE; switch (dumparg->type) { case statsformat_file: fp = dumparg->arg; fprintf(fp, "%20" ISC_PRINT_QUADFORMAT "u %s%s\n", val, nxrrset ? "!" : "", typestr); break; case statsformat_xml: #ifdef HAVE_LIBXML2 writer = dumparg->arg; xmlTextWriterStartElement(writer, ISC_XMLCHAR "rrset"); xmlTextWriterStartElement(writer, ISC_XMLCHAR "name"); xmlTextWriterWriteFormatString(writer, "%s%s", nxrrset ? "!" : "", typestr); xmlTextWriterEndElement(writer); /* name */ xmlTextWriterStartElement(writer, ISC_XMLCHAR "counter"); xmlTextWriterWriteFormatString(writer, "%" ISC_PRINT_QUADFORMAT "u", val); xmlTextWriterEndElement(writer); /* counter */ xmlTextWriterEndElement(writer); /* rrset */ #endif break; } }
static void rdtypestat_dump(dns_rdatastatstype_t type, isc_uint64_t val, void *arg) { char typebuf[64]; const char *typestr; stats_dumparg_t *dumparg = arg; FILE *fp; #ifdef HAVE_LIBXML2 xmlTextWriterPtr writer; int xmlrc; #endif if ((DNS_RDATASTATSTYPE_ATTR(type) & DNS_RDATASTATSTYPE_ATTR_OTHERTYPE) == 0) { dns_rdatatype_format(DNS_RDATASTATSTYPE_BASE(type), typebuf, sizeof(typebuf)); typestr = typebuf; } else typestr = "Others"; switch (dumparg->type) { case statsformat_file: fp = dumparg->arg; fprintf(fp, "%20" ISC_PRINT_QUADFORMAT "u %s\n", val, typestr); break; case statsformat_xml: #ifdef HAVE_LIBXML2 writer = dumparg->arg; TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "rdtype")); TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "name")); TRY0(xmlTextWriterWriteString(writer, ISC_XMLCHAR typestr)); TRY0(xmlTextWriterEndElement(writer)); /* name */ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "counter")); TRY0(xmlTextWriterWriteFormatString(writer, "%" ISC_PRINT_QUADFORMAT "u", val)); TRY0(xmlTextWriterEndElement(writer)); /* counter */ TRY0(xmlTextWriterEndElement(writer)); /* rdtype */ #endif break; } return; #ifdef HAVE_LIBXML2 error: dumparg->result = ISC_R_FAILURE; return; #endif }