[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20201026135626.23684484@kicinski-fedora-PC1C0HJN.hsd1.ca.comcast.net>
Date: Mon, 26 Oct 2020 13:56:26 -0700
From: Jakub Kicinski <kuba@...nel.org>
To: wenxu <wenxu@...oud.cn>
Cc: netdev@...r.kernel.org, Stefano Brivio <sbrivio@...hat.com>,
David Ahern <dsahern@...nel.org>
Subject: Re: [PATCH net] ip_tunnel: fix over-mtu packet send fail without
TUNNEL_DONT_FRAGMENT flags
On Mon, 26 Oct 2020 16:23:29 +0800 wenxu wrote:
> On 10/24/2020 5:12 AM, Jakub Kicinski wrote:
> > On Wed, 21 Oct 2020 17:21:55 +0800 wenxu@...oud.cn wrote:
> >> From: wenxu <wenxu@...oud.cn>
> >>
> >> The TUNNEL_DONT_FRAGMENT flags specific the tunnel outer ip can do
> >> fragment or not in the md mode. Without the TUNNEL_DONT_FRAGMENT
> >> should always do fragment. So it should not care the frag_off in
> >> inner ip.
> > Can you describe the use case better? My understanding is that we
> > should propagate DF in normally functioning networks, and let PMTU
> > do its job.
>
> Sorry for relying so late. ip_md_tunnel_xmit send packet in the collect_md mode.
>
> For OpenVswitch example, ovs set the gre port with flags df_default=false which will not
>
> set TUNNEL_DONT_FRAGMENT for tun_flags.
>
> And the mtu of virtual machine is 1500 with default. And the tunnel underlay device mtu
>
> is 1500 default too. So if the size of packet send from vm + underlay length > underlay device mtu.
>
> The packet always be dropped if the ip header of packet set flags with DF.
>
> In the collect_md the outer packet can fragment or not should depends on the tun_flags but not inner
>
> ip header like vxlan device did.
Is this another incarnation of 4cb47a8644cc ("tunnels: PMTU discovery
support for directly bridged IP packets")? Sounds like non-UDP tunnels
need the same treatment to make PMTUD work.
RFC2003 seems to clearly forbid ignoring the inner DF:
Identification, Flags, Fragment Offset
These three fields are set as specified in [10]. However, if
the "Don't Fragment" bit is set in the inner IP header, it MUST
be set in the outer IP header; if the "Don't Fragment" bit is
not set in the inner IP header, it MAY be set in the outer IP
header, as described in Section 5.1.
and:
[..] In
particular, use of IP options is allowed, and use of fragmentation is
allowed unless the "Don't Fragment" bit is set in the inner IP
header. This restriction on fragmentation is required so that nodes
employing Path MTU Discovery [7] can obtain the information they
seek.
Powered by blists - more mailing lists