mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 17:30:02 +00:00
ipv: Re-enable IP when MTU > 68
Re-enable IP when the MTU gets back to a valid size. This patch just checks if the in_dev is NULL on a NETDEV_CHANGEMTU event and if MTU is valid (bigger than 68), then re-enable in_dev. Also a function that checks valid MTU size was created. Signed-off-by: Breno Leitao <leitao@linux.vnet.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
9d7d74029e
commit
06770843c2
1 changed files with 12 additions and 3 deletions
|
@ -1029,6 +1029,11 @@ static void inetdev_changename(struct net_device *dev, struct in_device *in_dev)
|
|||
}
|
||||
}
|
||||
|
||||
static inline bool inetdev_valid_mtu(unsigned mtu)
|
||||
{
|
||||
return mtu >= 68;
|
||||
}
|
||||
|
||||
/* Called only under RTNL semaphore */
|
||||
|
||||
static int inetdev_event(struct notifier_block *this, unsigned long event,
|
||||
|
@ -1048,6 +1053,10 @@ static int inetdev_event(struct notifier_block *this, unsigned long event,
|
|||
IN_DEV_CONF_SET(in_dev, NOXFRM, 1);
|
||||
IN_DEV_CONF_SET(in_dev, NOPOLICY, 1);
|
||||
}
|
||||
} else if (event == NETDEV_CHANGEMTU) {
|
||||
/* Re-enabling IP */
|
||||
if (inetdev_valid_mtu(dev->mtu))
|
||||
in_dev = inetdev_init(dev);
|
||||
}
|
||||
goto out;
|
||||
}
|
||||
|
@ -1058,7 +1067,7 @@ static int inetdev_event(struct notifier_block *this, unsigned long event,
|
|||
dev->ip_ptr = NULL;
|
||||
break;
|
||||
case NETDEV_UP:
|
||||
if (dev->mtu < 68)
|
||||
if (!inetdev_valid_mtu(dev->mtu))
|
||||
break;
|
||||
if (dev->flags & IFF_LOOPBACK) {
|
||||
struct in_ifaddr *ifa;
|
||||
|
@ -1080,9 +1089,9 @@ static int inetdev_event(struct notifier_block *this, unsigned long event,
|
|||
ip_mc_down(in_dev);
|
||||
break;
|
||||
case NETDEV_CHANGEMTU:
|
||||
if (dev->mtu >= 68)
|
||||
if (inetdev_valid_mtu(dev->mtu))
|
||||
break;
|
||||
/* MTU falled under 68, disable IP */
|
||||
/* disable IP when MTU is not enough */
|
||||
case NETDEV_UNREGISTER:
|
||||
inetdev_destroy(in_dev);
|
||||
break;
|
||||
|
|
Loading…
Reference in a new issue