[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 10/14] dns: poll card between each dns request
From: |
Andrei Borzenkov |
Subject: |
Re: [PATCH 10/14] dns: poll card between each dns request |
Date: |
Wed, 24 Feb 2016 06:25:55 +0300 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.5.1 |
24.02.2016 01:02, Josef Bacik пишет:
> On 02/15/2016 01:45 AM, Andrei Borzenkov wrote:
>> On Thu, Feb 11, 2016 at 12:21 AM, Josef Bacik <address@hidden> wrote:
>>> If we have dns servers that we prefer to get AAAA records from we'll
>>> send a
>>> packet and immediately check data.naddresses to see if we got a
>>> response. If we
>>> didn't we'll then send a request for an A record, and _then_ we'll
>>> poll the
>>> card. So if the DNS server doesn't respond between us sending the
>>> packet and
>>> checking data.naddresses we'll send a request for the A record and
>>> then poll the
>>> card. Instead we need to make sure we poll after we issue each
>>> request to make
>>> sure we give the server enough time to respond to our initial request.
>>>
>>> Signed-off-by: Josef Bacik <address@hidden>
>>> ---
>>> grub-core/net/dns.c | 2 +-
>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/grub-core/net/dns.c b/grub-core/net/dns.c
>>> index 82a3307..86e609b 100644
>>> --- a/grub-core/net/dns.c
>>> +++ b/grub-core/net/dns.c
>>> @@ -587,12 +587,12 @@ grub_net_dns_lookup (const char *name,
>>> grub_errno = GRUB_ERR_NONE;
>>> err = err2;
>>> }
>>> + grub_net_poll_cards (200, &data.stop);
>>
>> One consideration is that it will increase timeouts in case of
>> non-responsive servers, as now they are processed sequentially.
>>
>> But more importantly, this is still hit and miss - we rely on delivery
>> order which is non-deterministic. We really need to ask for all and
>> filter on receiving side. Two possible implementations are
>>
>> 1. Keep track of IPv4 and IPv6 answers separately; if non-preferred
>> answer is received, continue to wait for preferred one until timeout.
>>
>> 2. Queries for both A and AAAA in the same packet and filter out answers.
>>
>> The 2 looks better. It avoids extra timeouts (at least if we assume
>> that all DNS servers are equally authoritative) because as soon as we
>> get any response we can stop polling.
>>
>> This will also indirectly fix another reported issue as we now can
>> ignore any duplicate packet.
>>
>> Would you consider implementing it?
>
> Got this all implemented, started testing it and it just wasn't working,
> come to find out our dns server (also bind) doesn't support more than
> one question per packet.
Oh! :( Sorry, I really did not expect it, given that multi-query was in
DNS RFC from the very beginning.
> So instead I'm going to keep track of which
> type my DNS servers support and only do those questions. Updating the
> cache is kind of a pain in the ass, I'll probably make it so we just
> update in place the existing cache with the new answers. Thanks,
>
> Josef
>
- [PATCH 08/14] efinet: filter multicast traffic based on addresses, (continued)
- [PATCH 08/14] efinet: filter multicast traffic based on addresses, Josef Bacik, 2016/02/10
- [PATCH 09/14] efinet: clear the txbuffer before modifying the receive filters, Josef Bacik, 2016/02/10
- [PATCH 13/14] bootp: don't add multiple interfaces for the same address, Josef Bacik, 2016/02/10
- [PATCH 11/14] dns: reset data->naddresses for every packet we receive, Josef Bacik, 2016/02/10
- [PATCH 10/14] dns: poll card between each dns request, Josef Bacik, 2016/02/10
- [PATCH 12/14] icmp6: use default interface as the route interface, Josef Bacik, 2016/02/10
- [PATCH 04/14] tcp: add window scaling and RTTM support, Josef Bacik, 2016/02/10
- [PATCH 01/14] Added net_bootp6 command, Josef Bacik, 2016/02/10
- [PATCH 02/14] UEFI IPv6 PXE support, Josef Bacik, 2016/02/10
- [PATCH 05/14] net: don't free uninitialized sockets in dns, Josef Bacik, 2016/02/10
- [PATCH 07/14] efinet: retransmit if our device is busy, Josef Bacik, 2016/02/10
- [PATCH 03/14] Use UEFI MAC device as default configured by net_bootp6, Josef Bacik, 2016/02/10
- [PATCH 14/14] net: add interfaces when we open a card, Josef Bacik, 2016/02/10