On Thu, Jul 6, 2017 at 10:43 AM, David Miller <da...@davemloft.net> wrote: > From: Willem de Bruijn <willemdebruijn.ker...@gmail.com> > Date: Wed, 5 Jul 2017 12:27:11 -0400 > >>>> --- a/net/ipv4/udp_offload.c >>>> +++ b/net/ipv4/udp_offload.c >>>> @@ -21,7 +21,7 @@ static struct sk_buff *__skb_udp_tunnel_segment(struct >>>> sk_buff *skb, >>>> __be16 new_protocol, bool is_ipv6) >>> >>> In this file, can now remove all of udp4_ufo_fragment, and >>> udp6_ufo_fragment in net/ipv6. >> >> I had missed that this is used for tunneling with skb_udp_tunnel_segment. >> But the core codepath should no longer be hit once SKB_GSO_UDP >> is removed. > > Are you sure? I'm pretty sure all of the code remaining after my > patch series is needed in order to handle doing TCP GRO through > UDP tunneling encapsulation. > > Although the word "fragment" is in the function name, it's not doing > IP fragmentation. Instead, it is "fragmenting" the batched UDP > encapsulated frame into a series of individual UDP encapsulated ones.
Isn't that case handled in the branch if (skb->encapsulation && (skb_shinfo(skb)->gso_type & (SKB_GSO_UDP_TUNNEL|SKB_GSO_UDP_TUNNEL_CSUM))) { segs = skb_udp_tunnel_segment(skb, features, false); goto out; } It appears to be in a quick test I ran with FOU.