|
@@ -137,6 +137,8 @@ static DEFINE_SPINLOCK(addrconf_verify_lock);
|
|
|
static void addrconf_join_anycast(struct inet6_ifaddr *ifp);
|
|
|
static void addrconf_leave_anycast(struct inet6_ifaddr *ifp);
|
|
|
|
|
|
+static void addrconf_bonding_change(struct net_device *dev,
|
|
|
+ unsigned long event);
|
|
|
static int addrconf_ifdown(struct net_device *dev, int how);
|
|
|
|
|
|
static void addrconf_dad_start(struct inet6_ifaddr *ifp, u32 flags);
|
|
@@ -2582,6 +2584,10 @@ static int addrconf_notify(struct notifier_block *this, unsigned long event,
|
|
|
return notifier_from_errno(err);
|
|
|
}
|
|
|
break;
|
|
|
+ case NETDEV_BONDING_OLDTYPE:
|
|
|
+ case NETDEV_BONDING_NEWTYPE:
|
|
|
+ addrconf_bonding_change(dev, event);
|
|
|
+ break;
|
|
|
}
|
|
|
|
|
|
return NOTIFY_OK;
|
|
@@ -2595,6 +2601,19 @@ static struct notifier_block ipv6_dev_notf = {
|
|
|
.priority = 0
|
|
|
};
|
|
|
|
|
|
+static void addrconf_bonding_change(struct net_device *dev, unsigned long event)
|
|
|
+{
|
|
|
+ struct inet6_dev *idev;
|
|
|
+ ASSERT_RTNL();
|
|
|
+
|
|
|
+ idev = __in6_dev_get(dev);
|
|
|
+
|
|
|
+ if (event == NETDEV_BONDING_NEWTYPE)
|
|
|
+ ipv6_mc_remap(idev);
|
|
|
+ else if (event == NETDEV_BONDING_OLDTYPE)
|
|
|
+ ipv6_mc_unmap(idev);
|
|
|
+}
|
|
|
+
|
|
|
static int addrconf_ifdown(struct net_device *dev, int how)
|
|
|
{
|
|
|
struct inet6_dev *idev;
|