Re: [PATCH] net: ip_finish_output_gso: If skb_gso_network_seglen exceeds MTU, allow segmentation for gre tunneled skbs
From: wenxu <hidden>
Date: 2016-08-12 04:36:04
On Wed, 10 Aug 2016 17:35:11 -0700 (PDT) David Miller [off-list ref] wrote:quoted
quoted
commit b8247f095edd ("net: ip_finish_output_gso: If skb_gso_network_seglen exceeds MTU, allow segmentation for local udp tunneled skbs") Given: - tap0 and ovs-gre - ovs-gre stacked on eth0, eth0 having the small mtu After encapsulation these skbs have skb_gso_network_seglen that exceed eth0's ip_skb_dst_mtu. So the finnal each segment would be larger than eth0 mtu. These packets maybe dropped. It has the same problem if tap0 bridge with ipgre or gretap device. So the IPSKB_FRAG_SEGS flags should also be set in gre tunneled skbs. Signed-off-by: wenxu <redacted>I am rather certain that this test is intentionally restricted to UDP tunnel endpoints, because GRE and other tunnel types are PMTU safe. Hannes and Shmulik?It was restricted to UDP tun encaps per Hannes' suggestion, in order to scope the change, as Hannes hinted gre and ipip are pmtu-safe, see [1]. Glancing at ip_tunnel_xmit() --> tnl_update_pmtu(), they do seem to handle PMTU, but - if I understand correctly - only in the !skb_is_gso case. (since 68c3316311 "v4 GRE: Add TCP segmentation offload for GRE") This is probably due the same hidden assumption that 'gso_size' will be suitable for the egress mtu even after encapsulation, which does not hold true in some usecases as described in [2]. Therefore it might be that b8247f095edd needs to be augmented for non-udp tunnels as well. Hannes? [1] http://www.spinics.net/lists/netdev/msg386447.html [2] http://www.spinics.net/lists/netdev/msg385776.html
I think non-udp tunnels should also be set And in b8247f095edd, condition skb_iif also should be removed given: ovs-internal-port bridge with ovs-gre There is the same problem that packets from local.