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 <han...@stressinduktion.org>
---
  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
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to