Subject: Re: [PATCH] ipv6: clear RTF_EXPIRES when call ip6_rt_copy

From: Gao feng <[email-masked]>
Date: Tue, 17 Dec 2013 15:46:24 +0800

On 12/17/2013 03:02 PM, Hannes Frederic Sowa wrote:
> On Tue, Dec 17, 2013 at 02:42:01PM +0800, RongQing Li wrote:
>> On 12/17/13, Gao feng <[email-masked]> wrote:
>>> On 12/17/2013 11:32 AM, RongQing Li wrote:
>>>> If the ort->rt6i_flags is RTF_EXPIRES|RTF_ADDRCONF, then rt6_set_from will
>>>> not
>>>> be called, and new created rt will have RTF_EXPIRES, but dst.expires is 0,
>>>> and
>>>> dst.from is NULL
>>>
>>> Ok, but I think you need to add more detail/test purpose of the test case
>>> v6LC.4.1.4
>>> { Reduce PMTU On-link }. just the number of test case is not good for people
>>> to know
>>> what's the real problem.
>>>
>>
>> I have a question, why does we set dst.from only when the ort has flag
>> RTF_ADDRCONF
>> and RTF_DEFAULT?
> 
> Good question. ;)
> 
> I wonder, too. In the past from and expires were a union and either from or
> expires was allowed to be used. In the commit you referred to this union was
> split into seperate fields.
> 
> It somehow worked in the past because routes normally have longer timeouts
> and the routes will get evicted from the route cache eventually. My guess
> is that we can set from unconditionally or copy over the expires value.
> 
> This patch already needed quite a long time to review for me and I am still
> unsure. :/
> 
> Gao, do you still remember why you used RTF_ADDRCONF|RTF_DEFAULT?
> 

It's a mystery， I noticed this problem when I wrote the codes.
http://lists.openwall.net/netdev/2012/03/19/7

I used the flags RTF_ADDRCONF|RTF_DEFAULT because they are exist in
rt6_{get,add,purge}_dflt_router.

The from of new cloned rt should not be set if it's impossible for the ort
to be expired.

but seems we should set from if flags have RTF_ADDRCONF bit. RA package
not only generate the default route.