mirror of
https://github.com/isc-projects/bind9.git
synced 2026-03-20 17:42:09 -04:00
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.
(cherry picked from commit fce3c93ea2)
This commit is contained in:
parent
79a9bf6f03
commit
b2ee3fa0bb
2 changed files with 32 additions and 5 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -1141,6 +1141,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,
|
||||
|
|
@ -1201,11 +1220,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
|
||||
|
|
|
|||
Loading…
Reference in a new issue