mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-02-28 17:57:25 +03:00
resolved: don't downgrade feature level if we get RCODE on UDP level
Retrying a transaction via TCP is a good approach for mitigating packet loss. However, it's not a good away way to fix a bad RCODE if we already downgraded to UDP level for it. Hence, don't do this. This is a small tweak only, but shortens the time we spend on downgrading when a specific domain continously returns a bad rcode.
This commit is contained in:
parent
201d99584e
commit
7d581a6576
@ -911,9 +911,13 @@ void dns_transaction_process_reply(DnsTransaction *t, DnsPacket *p) {
|
||||
|
||||
/* Request failed, immediately try again with reduced features */
|
||||
|
||||
if (t->current_feature_level <= DNS_SERVER_FEATURE_LEVEL_WORST) {
|
||||
/* This was already at the lowest possible feature level? If so, we can't downgrade
|
||||
* this transaction anymore, hence let's process the response, and accept the rcode. */
|
||||
if (t->current_feature_level <= DNS_SERVER_FEATURE_LEVEL_UDP) {
|
||||
/* This was already at UDP feature level? If so, it doesn't make sense to downgrade
|
||||
* this transaction anymore, hence let's process the response, and accept the
|
||||
* rcode. Note that we don't retry on TCP, since that's a suitable way to mitigate
|
||||
* packet loss, but is not going to give us better rcodes should we actually have
|
||||
* managed to get them already at UDP level. */
|
||||
|
||||
log_debug("Server returned error: %s", dns_rcode_to_string(DNS_PACKET_RCODE(p)));
|
||||
break;
|
||||
}
|
||||
@ -1136,7 +1140,7 @@ static int dns_transaction_emit_udp(DnsTransaction *t) {
|
||||
return r;
|
||||
|
||||
if (t->current_feature_level < DNS_SERVER_FEATURE_LEVEL_UDP)
|
||||
return -EAGAIN;
|
||||
return -EAGAIN; /* Sorry, can't do UDP, try TCP! */
|
||||
|
||||
if (!dns_server_dnssec_supported(t->server) && dns_type_is_dnssec(t->key->type))
|
||||
return -EOPNOTSUPP;
|
||||
|
Loading…
x
Reference in New Issue
Block a user