Subject: Re: [IPV6] ADDRCONF: Defer dad for global address until dad for linklocal is completed.

From: Toyo Abe <[email-masked]>
Date: Fri, 20 Jun 2008 11:17:27 +0900

Hi,

I'm wondering why the fix inlined below is not included.
I'd tested this fix w/ TAHI test suite. Then, the failed test cases - v6LC.3.1.2 Part B, Part D,
v6LC.3.1.3 Part I, and Part J in IPv6 Stateless Address Autoconfiguration test - were all passed.
If just waiting for verification info, I'm really sorry for the lazy response.

I think this can be merged.

Thank you,
-toyo

YOSHIFUJI Hideaki / 吉藤英明 wrote:
> In article <[email-masked]> (at Tue, 20 May 2008 21:27:56 +0900), Toyo Abe <[email-masked]> says:
> 
>> I was also thinking so. And I tried it at first.
>> But then, many other test scenarios in TAHI test suite went to FAIL. It
>> was because
>> the tester node send RA with prefix option to the host right after it
>> receives DAD NS
>> from the host, which is obviously in autoconfiguration process for
>> linklocal address.
> 
> If so, we should complain about the spec / tests.
> 
>> Since current addrconf code actually accepts RA including prefix option 
>> while DAD for
>> linklocal address is processing, changes of the behaviour looks like a 
>> degradation for me.
>> Hence, I chose to accept RA at that moment and defer sending DAD NS for 
>> global addresses.
> 
> Well I don't think so.
> We should choose simpler way - avoid introducing new "unique" state so far.
> 
> If you really think is worth accepting RA during DAD for link-local
> address, we should cancel all of on-going DADs for global address(es)
> if the RA for link-local address has failed, intead of deferring DAD
> for global address(es).
> 
> ---
> [RFC PATCH] [IPV6] ADDRCONF: Do not generate "global" address unless valid link-local address is available.
> 
> Signed-off-by: YOSHIFUJI Hideaki <[email-masked]>
> ---
> diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
> index e591e09..df99c5e 100644
> --- a/net/ipv6/addrconf.c
> +++ b/net/ipv6/addrconf.c
> @@ -1813,8 +1813,14 @@ void addrconf_prefix_rcv(struct net_device *dev, u8 *opt, int len)
>  
>  		if (pinfo->prefix_len == 64) {
>  			memcpy(&addr, &pinfo->prefix, 8);
> -			if (ipv6_generate_eui64(addr.s6_addr + 8, dev) &&
> -			    ipv6_inherit_eui64(addr.s6_addr + 8, in6_dev)) {
> +			if (ipv6_inherit_eui64(addr.s6_addr + 8, in6_dev)) {
> +				/*
> +				 * If a valid link-local address is not found,
> +				 * let's ignore autonomous flag.
> +				 */
> +				if (net_ratelimit())
> +					printk(KERN_DEBUG "IPv6 addrconf: valid link-local address not found on %s\n",
> +					       in6_dev->dev->name);
>  				in6_dev_put(in6_dev);
>  				return;
>  			}
> 
> --yoshfuji
>