/** nice string for class */ static void pretty_class(char* s, size_t len, int c) { char d[16]; sldns_wire2str_class_buf((uint16_t)c, d, sizeof(d)); snprintf(s, len, "%s", d); }
/** print extended */ static void print_extended(struct ub_stats_info* s) { int i; char nm[16]; /* TYPE */ for(i=0; i<UB_STATS_QTYPE_NUM; i++) { if(inhibit_zero && s->svr.qtype[i] == 0) continue; sldns_wire2str_type_buf((uint16_t)i, nm, sizeof(nm)); PR_UL_SUB("num.query.type", nm, s->svr.qtype[i]); } if(!inhibit_zero || s->svr.qtype_big) { PR_UL("num.query.type.other", s->svr.qtype_big); } /* CLASS */ for(i=0; i<UB_STATS_QCLASS_NUM; i++) { if(inhibit_zero && s->svr.qclass[i] == 0) continue; sldns_wire2str_class_buf((uint16_t)i, nm, sizeof(nm)); PR_UL_SUB("num.query.class", nm, s->svr.qclass[i]); } if(!inhibit_zero || s->svr.qclass_big) { PR_UL("num.query.class.other", s->svr.qclass_big); } /* OPCODE */ for(i=0; i<UB_STATS_OPCODE_NUM; i++) { if(inhibit_zero && s->svr.qopcode[i] == 0) continue; sldns_wire2str_opcode_buf(i, nm, sizeof(nm)); PR_UL_SUB("num.query.opcode", nm, s->svr.qopcode[i]); } /* transport */ PR_UL("num.query.tcp", s->svr.qtcp); PR_UL("num.query.tcpout", s->svr.qtcp_outgoing); PR_UL("num.query.tls", s->svr.qtls); PR_UL("num.query.ipv6", s->svr.qipv6); /* flags */ PR_UL("num.query.flags.QR", s->svr.qbit_QR); PR_UL("num.query.flags.AA", s->svr.qbit_AA); PR_UL("num.query.flags.TC", s->svr.qbit_TC); PR_UL("num.query.flags.RD", s->svr.qbit_RD); PR_UL("num.query.flags.RA", s->svr.qbit_RA); PR_UL("num.query.flags.Z", s->svr.qbit_Z); PR_UL("num.query.flags.AD", s->svr.qbit_AD); PR_UL("num.query.flags.CD", s->svr.qbit_CD); PR_UL("num.query.edns.present", s->svr.qEDNS); PR_UL("num.query.edns.DO", s->svr.qEDNS_DO); /* RCODE */ for(i=0; i<UB_STATS_RCODE_NUM; i++) { /* Always include RCODEs 0-5 */ if(inhibit_zero && i > LDNS_RCODE_REFUSED && s->svr.ans_rcode[i] == 0) continue; sldns_wire2str_rcode_buf(i, nm, sizeof(nm)); PR_UL_SUB("num.answer.rcode", nm, s->svr.ans_rcode[i]); } if(!inhibit_zero || s->svr.ans_rcode_nodata) { PR_UL("num.answer.rcode.nodata", s->svr.ans_rcode_nodata); } /* iteration */ PR_UL("num.query.ratelimited", s->svr.queries_ratelimited); /* validation */ PR_UL("num.answer.secure", s->svr.ans_secure); PR_UL("num.answer.bogus", s->svr.ans_bogus); PR_UL("num.rrset.bogus", s->svr.rrset_bogus); PR_UL("num.query.aggressive.NOERROR", s->svr.num_neg_cache_noerror); PR_UL("num.query.aggressive.NXDOMAIN", s->svr.num_neg_cache_nxdomain); /* threat detection */ PR_UL("unwanted.queries", s->svr.unwanted_queries); PR_UL("unwanted.replies", s->svr.unwanted_replies); /* cache counts */ PR_UL("msg.cache.count", s->svr.msg_cache_count); PR_UL("rrset.cache.count", s->svr.rrset_cache_count); PR_UL("infra.cache.count", s->svr.infra_cache_count); PR_UL("key.cache.count", s->svr.key_cache_count); #ifdef USE_DNSCRYPT PR_UL("dnscrypt_shared_secret.cache.count", s->svr.shared_secret_cache_count); PR_UL("num.query.dnscrypt.shared_secret.cachemiss", s->svr.num_query_dnscrypt_secret_missed_cache); PR_UL("dnscrypt_nonce.cache.count", s->svr.nonce_cache_count); PR_UL("num.query.dnscrypt.replay", s->svr.num_query_dnscrypt_replay); #endif /* USE_DNSCRYPT */ PR_UL("num.query.authzone.up", s->svr.num_query_authzone_up); PR_UL("num.query.authzone.down", s->svr.num_query_authzone_down); #ifdef CLIENT_SUBNET PR_UL("num.query.subnet", s->svr.num_query_subnet); PR_UL("num.query.subnet_cache", s->svr.num_query_subnet_cache); #endif }