Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1402852 > unrolled thread
| Started by | Haishuang Yan <yanhaishuang@cmss.chinamobile.com> |
|---|---|
| First post | 2016-05-18 12:10 +0200 |
| Last post | 2016-05-20 19:50 +0200 |
| Articles | 2 — 2 participants |
Back to article view | Back to linux.kernel
[PATCH 1/2] ip6_gre: Fix MTU setting for ip6gretap Haishuang Yan <yanhaishuang@cmss.chinamobile.com> - 2016-05-18 12:10 +0200
Re: [PATCH 1/2] ip6_gre: Fix MTU setting for ip6gretap David Miller <davem@davemloft.net> - 2016-05-20 19:50 +0200
| From | Haishuang Yan <yanhaishuang@cmss.chinamobile.com> |
|---|---|
| Date | 2016-05-18 12:10 +0200 |
| Subject | [PATCH 1/2] ip6_gre: Fix MTU setting for ip6gretap |
| Message-ID | <rA6Ap-Fs-15@gated-at.bofh.it> |
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
--- 2001:0:130::1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 1.465/41.316/81.167/39.851 ms
ip link add ip6gretap1 type ip6gretap\
local 2001:0:130::2 remote 2001:0:130::1
ip link show ip6gretap1
11: ip6gretap1@NONE: <BROADCAST,MULTICAST> mtu 1434 ...
link/ether c2:f3:f8:c1:2c:bf brd ff:ff:ff:ff:ff:ff
The MTU value 1434 is right. But if we delete the direct route:
ip -6 route del 2001:0:130::/64
ping6 2001:0:130::1 -c 2
connect: Network is unreachable
ip link add ip6gretap1 type ip6gretap\
local 2001:0:130::2 remote 2001:0:130::1
ip link show ip6gretap1
12: ip6gretap1@NONE: <BROADCAST,MULTICAST> mtu 1448 ...
link/ether 7e:e1:d2:c4:06:5e brd ff:ff:ff:ff:ff:ff
Now, the MTU value 1448 is larger than what was needed.
This patch fix the issue in this situation.
Signed-off-by: Haishuang Yan <yanhaishuang@cmss.chinamobile.com>
---
net/ipv6/ip6_gre.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c
index 4541fa5..8ea5a4d 100644
--- a/net/ipv6/ip6_gre.c
+++ b/net/ipv6/ip6_gre.c
@@ -1029,6 +1029,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;
--
1.8.3.1
[toc] | [next] | [standalone]
| From | David Miller <davem@davemloft.net> |
|---|---|
| Date | 2016-05-20 19:50 +0200 |
| Message-ID | <rAWIH-aw-25@gated-at.bofh.it> |
| In reply to | #1402852 |
From: Haishuang Yan <yanhaishuang@cmss.chinamobile.com> Date: Wed, 18 May 2016 18:05:51 +0800 > 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 > > --- 2001:0:130::1 ping statistics --- > 2 packets transmitted, 2 received, 0% packet loss, time 1001ms > rtt min/avg/max/mdev = 1.465/41.316/81.167/39.851 ms > > ip link add ip6gretap1 type ip6gretap\ > local 2001:0:130::2 remote 2001:0:130::1 > ip link show ip6gretap1 > 11: ip6gretap1@NONE: <BROADCAST,MULTICAST> mtu 1434 ... > link/ether c2:f3:f8:c1:2c:bf brd ff:ff:ff:ff:ff:ff > > The MTU value 1434 is right. But if we delete the direct route: > ip -6 route del 2001:0:130::/64 > ping6 2001:0:130::1 -c 2 > connect: Network is unreachable > ip link add ip6gretap1 type ip6gretap\ > local 2001:0:130::2 remote 2001:0:130::1 > ip link show ip6gretap1 > 12: ip6gretap1@NONE: <BROADCAST,MULTICAST> mtu 1448 ... > link/ether 7e:e1:d2:c4:06:5e brd ff:ff:ff:ff:ff:ff > > Now, the MTU value 1448 is larger than what was needed. > > This patch fix the issue in this situation. > > Signed-off-by: Haishuang Yan <yanhaishuang@cmss.chinamobile.com> It's great that you have provided precise examples of how to reproduce the problem. But you need to explain in your commit message how your fix works. Why does simply checking the device type and subtracting the ethernet header length work here? What is the full context for your fix and why does it work?
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web