lkml.org 
[lkml]   [2021]   [Jun]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.12 020/178] vrf: fix maximum MTU
    Date
    From: Nicolas Dichtel <nicolas.dichtel@6wind.com>

    [ 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: 5055376a3b44 ("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>
    ---
    drivers/net/vrf.c | 6 ++----
    1 file changed, 2 insertions(+), 4 deletions(-)

    diff --git a/drivers/net/vrf.c b/drivers/net/vrf.c
    index 503e2fd7ce51..28a6c4cfe9b8 100644
    --- a/drivers/net/vrf.c
    +++ b/drivers/net/vrf.c
    @@ -1183,9 +1183,6 @@ static int vrf_dev_init(struct net_device *dev)

    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 */
    dev->operstate = IF_OPER_UP;
    netdev_lockdep_set_classes(dev);
    @@ -1685,7 +1682,8 @@ static void vrf_setup(struct net_device *dev)
    * which breaks networking.
    */
    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[],
    --
    2.30.2


    \
     
     \ /
      Last update: 2021-06-21 18:41    [W:4.179 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site