On 10/24/2020 5:12 AM, Jakub Kicinski wrote:
> On Wed, 21 Oct 2020 17:21:55 +0800 we...@ucloud.cn wrote:
>> From: wenxu <we...@ucloud.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.

>> Fixes: cfc7381b3002 ("ip_tunnel: add collect_md mode to IPIP tunnel")
>> Signed-off-by: wenxu <we...@ucloud.cn>
>> ---
>>  net/ipv4/ip_tunnel.c | 3 ---
>>  1 file changed, 3 deletions(-)
>>
>> diff --git a/net/ipv4/ip_tunnel.c b/net/ipv4/ip_tunnel.c
>> index 8b04d1d..ee65c92 100644
>> --- a/net/ipv4/ip_tunnel.c
>> +++ b/net/ipv4/ip_tunnel.c
>> @@ -608,9 +608,6 @@ void ip_md_tunnel_xmit(struct sk_buff *skb, struct 
>> net_device *dev,
>>                      ttl = ip4_dst_hoplimit(&rt->dst);
>>      }
>>  
>> -    if (!df && skb->protocol == htons(ETH_P_IP))
>> -            df = inner_iph->frag_off & htons(IP_DF);
>> -
>>      headroom += LL_RESERVED_SPACE(rt->dst.dev) + rt->dst.header_len;
>>      if (headroom > dev->needed_headroom)
>>              dev->needed_headroom = headroom;
>

Reply via email to