vrf: fix maximum MTU
[ Upstream commit 9bb392f62447d73cc7dd7562413a2cd9104c82f8 ]
My initial goal was to fix the default MTU, which is set to 65536, ie above
the maximum defined in the driver: 65535 (ETH_MAX_MTU).
In fact, it's seems more consistent, wrt min_mtu, to set the max_mtu to
IP6_MAX_MTU (65535 + sizeof(struct ipv6hdr)) and use it by default.
Let's also, for consistency, set the mtu in vrf_setup(). This function
calls ether_setup(), which set the mtu to 1500. Thus, the whole mtu config
is done in the same function.
Before the patch:
$ ip link add blue type vrf table 1234
$ ip link list blue
9: blue: <NOARP,MASTER> mtu 65536 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether fa:f5:27:70:24:2a brd ff:ff:ff:ff:ff:ff
$ ip link set dev blue mtu 65535
$ ip link set dev blue mtu 65536
Error: mtu greater than device maximum.
Fixes: 5055376a3b
("net: vrf: Fix ping failed when vrf mtu is set to 0")
CC: Miaohe Lin <linmiaohe@huawei.com>
Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
Reviewed-by: David Ahern <dsahern@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
deeeb65c6e
commit
aba26b3838
@@ -1184,9 +1184,6 @@ static int vrf_dev_init(struct net_device *dev)
|
|||||||
|
|
||||||
dev->flags = IFF_MASTER | IFF_NOARP;
|
dev->flags = IFF_MASTER | IFF_NOARP;
|
||||||
|
|
||||||
/* MTU is irrelevant for VRF device; set to 64k similar to lo */
|
|
||||||
dev->mtu = 64 * 1024;
|
|
||||||
|
|
||||||
/* similarly, oper state is irrelevant; set to up to avoid confusion */
|
/* similarly, oper state is irrelevant; set to up to avoid confusion */
|
||||||
dev->operstate = IF_OPER_UP;
|
dev->operstate = IF_OPER_UP;
|
||||||
netdev_lockdep_set_classes(dev);
|
netdev_lockdep_set_classes(dev);
|
||||||
@@ -1620,7 +1617,8 @@ static void vrf_setup(struct net_device *dev)
|
|||||||
* which breaks networking.
|
* which breaks networking.
|
||||||
*/
|
*/
|
||||||
dev->min_mtu = IPV6_MIN_MTU;
|
dev->min_mtu = IPV6_MIN_MTU;
|
||||||
dev->max_mtu = ETH_MAX_MTU;
|
dev->max_mtu = IP6_MAX_MTU;
|
||||||
|
dev->mtu = dev->max_mtu;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int vrf_validate(struct nlattr *tb[], struct nlattr *data[],
|
static int vrf_validate(struct nlattr *tb[], struct nlattr *data[],
|
||||||
|
Reference in New Issue
Block a user