Subject: Re: [PATCH net-next] ipv6: recreate ipv6 link-local addresses when increasing MTU over IPV6_MIN_MTU

From: Alexander Duyck <[email-masked]>
Date: Mon, 26 Oct 2015 08:52:06 -0700

On 10/26/2015 07:36 AM, Hannes Frederic Sowa wrote:
> Take into consideration that the interface might be disabled for IPv6,
> thus switch event type.
>
> Signed-off-by: Hannes Frederic Sowa <[email-masked]>
> ---
>   net/ipv6/addrconf.c | 7 +++++--
>   1 file changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
> index d0c685c..c2dcebe 100644
> --- a/net/ipv6/addrconf.c
> +++ b/net/ipv6/addrconf.c
> @@ -3149,6 +3149,7 @@ static int addrconf_notify(struct notifier_block *this, unsigned long event,
>   
>   	case NETDEV_UP:
>   	case NETDEV_CHANGE:
> +netdev_change:
>   		if (dev->flags & IFF_SLAVE)
>   			break;
>   
> @@ -3244,8 +3245,10 @@ static int addrconf_notify(struct notifier_block *this, unsigned long event,
>   
>   		if (!idev && dev->mtu >= IPV6_MIN_MTU) {
>   			idev = ipv6_add_dev(dev);
> -			if (!IS_ERR(idev))
> -				break;
> +			if (!IS_ERR(idev)) {
> +				event = NETDEV_UP;
> +				goto netdev_change;
> +			}
>   		}
>   
>   		/*

Seems like this code isn't quite correct.  You are calling ipv6_add_dev 
for slave devices, and if I understand things correctly I don't believe 
that was happening before and may be an unintended side effect.

You might want to instead just make it so that you only do the jump, and 
perhaps change the code in the NETDEV_UP/NETDEV_CHANGE section so that 
you test for NETDEV_CHANGE instead of NETDEV_UP.  That should be enough 
to get the effect you are looking for and I believe there would be no 
change to behaviour other than adding IPv6 link-local addresses when the 
MTU is increased.

Give me a bit and I can submit an alternative that may actually work out 
a bit better I think.

- Alex