• Petr Machata's avatar
    ip_tunnel: Emit events for post-register MTU changes · f6cc9c05
    Petr Machata authored
    For tunnels created with IFLA_MTU, MTU of the netdevice is set by
    rtnl_create_link() (called from rtnl_newlink()) before the device is
    registered. However without IFLA_MTU that's not done.
    
    rtnl_newlink() proceeds by calling struct rtnl_link_ops.newlink, which
    via ip_tunnel_newlink() calls register_netdevice(), and that emits
    NETDEV_REGISTER. Thus any listeners that inspect the netdevice get the
    MTU of 0.
    
    After ip_tunnel_newlink() corrects the MTU after registering the
    netdevice, but since there's no event, the listeners don't get to know
    about the MTU until something else happens--such as a NETDEV_UP event.
    That's not ideal.
    
    So instead of setting the MTU directly, go through dev_set_mtu(), which
    takes care of distributing the necessary NETDEV_PRECHANGEMTU and
    NETDEV_CHANGEMTU events.
    
    Fixes: 1da177e4 ("Linux-2.6.12-rc2")
    Signed-off-by: default avatarPetr Machata <petrm@mellanox.com>
    Signed-off-by: default avatarIdo Schimmel <idosch@mellanox.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    f6cc9c05
ip_tunnel.c 28.9 KB