ip6_gre: Fix MTU setting for ip6gretap
authorHaishuang Yan <yanhaishuang@cmss.chinamobile.com>
Sat, 21 May 2016 10:17:34 +0000 (18:17 +0800)
committerDavid S. Miller <davem@davemloft.net>
Tue, 24 May 2016 21:33:48 +0000 (14:33 -0700)
When creat an ip6gretap interface with an unreachable route,
the MTU is about 14 bytes larger than what was needed.

If the remote address is reachable:
ping6 2001:0:130::1 -c 2
PING 2001:0:130::1(2001:0:130::1) 56 data bytes
64 bytes from 2001:0:130::1: icmp_seq=1 ttl=64 time=1.46 ms
64 bytes from 2001:0:130::1: icmp_seq=2 ttl=64 time=81.1 ms

Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv6/ip6_gre.c

index af503f518278b21f274afe355acbe6815492d15b..a6fe3397728cc8ae23ca56eed367120f64da357c 100644 (file)
@@ -1027,6 +1027,8 @@ static int ip6gre_tunnel_init_common(struct net_device *dev)
 
        dev->hard_header_len = LL_MAX_HEADER + t_hlen;
        dev->mtu = ETH_DATA_LEN - t_hlen;
+       if (dev->type == ARPHRD_ETHER)
+               dev->mtu -= ETH_HLEN;
        if (!(tunnel->parms.flags & IP6_TNL_F_IGN_ENCAP_LIMIT))
                dev->mtu -= 8;