• A
    ip6_gre: init dev->mtu and dev->hard_header_len correctly · 128bb975
    Alexey Kodanev 提交于
    Commit b05229f4 ("gre6: Cleanup GREv6 transmit path,
    call common GRE functions") moved dev->mtu initialization
    from ip6gre_tunnel_setup() to ip6gre_tunnel_init(), as a
    result, the previously set values, before ndo_init(), are
    reset in the following cases:
    
    * rtnl_create_link() can update dev->mtu from IFLA_MTU
      parameter.
    
    * ip6gre_tnl_link_config() is invoked before ndo_init() in
      netlink and ioctl setup, so ndo_init() can reset MTU
      adjustments with the lower device MTU as well, dev->mtu
      and dev->hard_header_len.
    
      Not applicable for ip6gretap because it has one more call
      to ip6gre_tnl_link_config(tunnel, 1) in ip6gre_tap_init().
    
    Fix the first case by updating dev->mtu with 'tb[IFLA_MTU]'
    parameter if a user sets it manually on a device creation,
    and fix the second one by moving ip6gre_tnl_link_config()
    call after register_netdevice().
    
    Fixes: b05229f4 ("gre6: Cleanup GREv6 transmit path, call common GRE functions")
    Fixes: db2ec95d ("ip6_gre: Fix MTU setting")
    Signed-off-by: NAlexey Kodanev <alexey.kodanev@oracle.com>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    128bb975
ip6_gre.c 39.3 KB