From fce3c93ea2ac63cd06faf817abf3c775fe11a33d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20K=C4=99pie=C5=84?= Date: Thu, 31 Oct 2019 08:48:35 +0100 Subject: [PATCH 1/2] Prevent TCP failures from affecting EDNS stats EDNS mechanisms only apply to DNS over UDP. Thus, errors encountered while sending DNS queries over TCP must not influence EDNS timeout statistics. --- bin/tests/system/legacy/tests.sh | 12 ++++++++++++ lib/dns/resolver.c | 25 ++++++++++++++++++++----- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/bin/tests/system/legacy/tests.sh b/bin/tests/system/legacy/tests.sh index a7319840ddc..ed784d9615d 100755 --- a/bin/tests/system/legacy/tests.sh +++ b/bin/tests/system/legacy/tests.sh @@ -241,6 +241,18 @@ fi if [ $ret != 0 ]; then echo_i "failed"; fi status=`expr $status + $ret` +n=`expr $n + 1` +echo_i "checking that TCP failures do not influence EDNS statistics in the ADB ($n)" +ret=0 +rndc_dumpdb ns1 -adb || ret=1 +timeouts512=`sed -n "s|.*10\.53\.0\.7.*\[edns \([0-9/][0-9/]*\).*|\1|p" ns1/named_dump.db.test$n | awk -F/ '{print $NF}'` +if [ $timeouts512 -ne 0 ]; then + echo_i "512-byte EDNS timeouts according to ADB: $timeouts512, expected: 0" + ret=1 +fi +if [ $ret != 0 ]; then echo_i "failed"; fi +status=`expr $status + $ret` + $PERL $SYSTEMTESTTOP/stop.pl --use-rndc --port ${CONTROLPORT} legacy ns1 copy_setports ns1/named2.conf.in ns1/named.conf $PERL $SYSTEMTESTTOP/start.pl --noclean --restart --port ${PORT} legacy ns1 diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c index 11ef066608f..70bfa2232a7 100644 --- a/lib/dns/resolver.c +++ b/lib/dns/resolver.c @@ -1142,6 +1142,25 @@ resquery_destroy(resquery_t **queryp) { empty_bucket(res); } +/*% + * Update EDNS statistics for a server after not getting a response to a UDP + * query sent to it. + */ +static void +update_edns_stats(resquery_t *query) { + fetchctx_t *fctx = query->fctx; + + if ((query->options & DNS_FETCHOPT_TCP) != 0) { + return; + } + + if ((query->options & DNS_FETCHOPT_NOEDNS0) == 0) { + dns_adb_ednsto(fctx->adb, query->addrinfo, query->udpsize); + } else { + dns_adb_timeout(fctx->adb, query->addrinfo); + } +} + static void fctx_cancelquery(resquery_t **queryp, dns_dispatchevent_t **deventp, isc_time_t *finish, bool no_response, @@ -1202,11 +1221,7 @@ fctx_cancelquery(resquery_t **queryp, dns_dispatchevent_t **deventp, uint32_t value; uint32_t mask; - if ((query->options & DNS_FETCHOPT_NOEDNS0) == 0) - dns_adb_ednsto(fctx->adb, query->addrinfo, - query->udpsize); - else - dns_adb_timeout(fctx->adb, query->addrinfo); + update_edns_stats(query); /* * If "forward first;" is used and a forwarder timed -- GitLab From 36d3c66e4e139430e176da01f58b927fd572d64b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20K=C4=99pie=C5=84?= Date: Thu, 31 Oct 2019 08:48:35 +0100 Subject: [PATCH 2/2] Add CHANGES entry 5310. [bug] TCP failures were affecting EDNS statistics. [GL #1059] --- CHANGES | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGES b/CHANGES index 7f421234148..7452a520e1e 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,5 @@ +5310. [bug] TCP failures were affecting EDNS statistics. [GL #1059] + 5309. [placeholder] 5308. [bug] Don't log DNS_R_UNCHANGED from sync_secure_journal() -- GitLab