* `signature-cache-size`: Number of entries in the signature cache
* `signatures`: Number of DNSSEC signatures created
* `sys-msec`: Number of CPU miliseconds sent in system time
-* `tcp-answers`: Number of answers sent out over TCP
* `tcp-answers-bytes`: Total number of answer bytes sent over TCP (since 4.0.0)
+* `tcp-answers`: Number of answers sent out over TCP
* `tcp-queries`: Number of questions received over TCP
+* `tcp4-answers-bytes`: Total number of answer bytes sent over TCPv4 (since 4.0.0)
* `tcp4-answers`: Number of answers sent out over TCPv4
* `tcp4-queries`: Number of questions received over TCPv4
+* `tcp6-answers-bytes`: Total number of answer bytes sent over TCPv6 (since 4.0.0)
* `tcp6-answers`: Number of answers sent out over TCPv6
* `tcp6-queries`: Number of questions received over TCPv6
* `timedout-questions`: Amount of packets that were dropped because they had to wait too long internally
-* `udp-answers`: Number of answers sent out over UDP
* `udp-answers-bytes`: Total number of answer bytes sent over UDP
-* `udp-queries`: Number of questions received over UDP
+* `udp-answers`: Number of answers sent out over UDP
* `udp-do-queries`: Number of queries received with the DO (DNSSEC OK) bit set
* `udp-in-errors`: Number of packets, received faster than the OS could process them
* `udp-noport-errors`: Number of UDP packets where an ICMP response was received that the remote port was not listening
+* `udp-queries`: Number of questions received over UDP
* `udp-recvbuf-errors`: Number of errors caused in the UDP receive buffer
* `udp-sndbuf-errors`: Number of errors caused in the UDP send buffer
-* `uptime`: Uptime in seconds of the daemon
-* `user-msec`: Number of milliseconds spend in CPU 'user' time
+* `udp4-answers-bytes`: Total number of answer bytes sent over UDPv4 (Since 4.0.0)
* `udp4-answers`: Number of answers sent out over UDPv4
* `udp4-queries`: Number of questions received over UDPv4
+* `udp6-answers-bytes`: Total number of answer bytes sent over UDPv6 (Since 4.0.0)
* `udp6-answers`: Number of answers sent out over UDPv6
* `udp6-queries`: Number of questions received over UDPv6
+* `uptime`: Uptime in seconds of the daemon
+* `user-msec`: Number of milliseconds spend in CPU 'user' time
### Ring buffers
Besides counters, PDNS also maintains the ringbuffers. A ringbuffer records events, each new event gets a place in the buffer until it is full. When full, earlier entries get overwritten, hence the name 'ring'.
S.declare("udp-do-queries","Number of UDP queries received with DO bit");
S.declare("udp-answers","Number of answers sent out over UDP");
S.declare("udp-answers-bytes","Total size of answers sent out over UDP");
+ S.declare("udp4-answers-bytes","Total size of answers sent out over UDPv4");
+ S.declare("udp6-answers-bytes","Total size of answers sent out over UDPv6");
S.declare("udp4-answers","Number of IPv4 answers sent out over UDP");
S.declare("udp4-queries","Number of IPv4 UDP queries received");
S.declare("tcp-queries","Number of TCP queries received");
S.declare("tcp-answers","Number of answers sent out over TCP");
S.declare("tcp-answers-bytes","Total size of answers sent out over TCP");
+ S.declare("tcp4-answers-bytes","Total size of answers sent out over TCPv4");
+ S.declare("tcp6-answers-bytes","Total size of answers sent out over TCPv6");
+
S.declare("tcp4-queries","Number of IPv4 TCP queries received");
S.declare("tcp4-answers","Number of IPv4 answers sent out over TCP");
static AtomicCounter &udpnumanswered4=*S.getPointer("udp4-answers");
static AtomicCounter &udpnumanswered6=*S.getPointer("udp6-answers");
static AtomicCounter &udpbytesanswered=*S.getPointer("udp-answers-bytes");
+ static AtomicCounter &udpbytesanswered4=*S.getPointer("udp4-answers-bytes");
+ static AtomicCounter &udpbytesanswered6=*S.getPointer("udp6-answers-bytes");
static AtomicCounter &tcpnumanswered=*S.getPointer("tcp-answers");
static AtomicCounter &tcpnumanswered4=*S.getPointer("tcp4-answers");
static AtomicCounter &tcpnumanswered6=*S.getPointer("tcp6-answers");
static AtomicCounter &tcpbytesanswered=*S.getPointer("tcp-answers-bytes");
+ static AtomicCounter &tcpbytesanswered4=*S.getPointer("tcp4-answers-bytes");
+ static AtomicCounter &tcpbytesanswered6=*S.getPointer("tcp6-answers-bytes");
if(p.d.aa) {
if (p.d.rcode==RCode::NXDomain)
if (udpOrTCP) { // udp
udpnumanswered++;
udpbytesanswered+=buf.length();
- if(p.d_remote.sin4.sin_family==AF_INET)
+ if(p.d_remote.sin4.sin_family==AF_INET) {
udpnumanswered4++;
- else
+ udpbytesanswered4+=buf.length();
+ } else {
udpnumanswered6++;
+ udpbytesanswered6+=buf.length();
+ }
} else { //tcp
tcpnumanswered++;
tcpbytesanswered+=buf.length();
- if(p.d_remote.sin4.sin_family==AF_INET)
+ if(p.d_remote.sin4.sin_family==AF_INET) {
tcpnumanswered4++;
- else
+ tcpbytesanswered4+=buf.length();
+ } else {
tcpnumanswered6++;
+ tcpbytesanswered6+=buf.length();
+ }
}
submitResponse(p.qtype.getCode(), buf.length(), udpOrTCP);