26.02.2016 16:52, Josef Bacik пишет:
> On 02/26/2016 05:22 AM, Andrei Borzenkov wrote:
>> On Wed, Feb 24, 2016 at 10:11 PM, Josef Bacik <jba...@fb.com> wrote:
>>> Sometimes DNS responses come in slower than we poll for them which
>>> can lead us
>>> to process multiple DNS packets which overflows the addresses array. 
>>> So instead
>>> realloc the array each time to make sure we are accounting for any
>>> answers we
>>> currently have in the address array.  We also move the caching of the
>>> addresses
>>> outside of the recv hook so we can be sure to cache all the responses
>>> at once
>>> instead of one packet at a time.  Thanks,
>>>
>>
>> This still does not address the problem that we stop waiting for
>> further packets as soon as we get any response, so we still depend on
>> delivery order to get correct record.
>>
>> What about following
>>
>> - send both A and AAAA query concurrently if requested
>> - keep track of both requests (i.e. have data.id[2] and
>> data.addresses[2])
>> - reset request ID (or otherwise mark it as "received") as soon as we
>> got reply. Note that reply may contain no addresses - NXDOMAIN is
>> prerfectly valid - so condition should not be "got any record of type
>> A or AAAA" as it is now but rather simply "got reply to request with
>> id XX". This also allows us to implement negative caching at some
>> point :)
> 
> So we check the rcode so a NXDOMAIN response will just be discarded, we
> don't have to worry about this case.
> 
>> - return both A and AAAA results separately to grub_net_dns_lookup()
>> - combine them in grub_net_dns_lookup() depending on preference - i.e.
>> put either A or AAAA first in final result.
>>
>> This seems to cover all issues so far - we do not wait too long, we
>> are guaranteed to get both A and AAAA if we request them and we return
>> them in proper order for further processing.
>>
>> Do I miss something?
>>
> 
> So my patch previous to this one changes it so DNS servers we get from
> dhcp are bound to either ipv4 or ipv6, so the only way we get
> PREFER_IPV* is if an admin sets it.

In this case I do not follow why you want to collect multiple answers in
the first place. The only reason for me was to make sure we have both A
and AAAA replies; otherwise every reply packet is supposed to contain
exactly the same content. Following this logic the right thing to do is
to just drop all subsequent duplicated replies.

>  So now the only time we'll get both
> an A _and_ an AAAA record is if we have both types of interfaces on the
> system, so it won't matter which answer is first as we'll be able to
> send traffic to either.

User can set preference using net_add_dns --prefer-ipvX | --only-ipvX.
We should respect it.

>  I just side-stepped the issue by making it so
> that (at least automatically) we aren't asking for both records unless
> we are sure we have an interface to go along with both types of records.

I'll reply to your other patch.

_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to