On Wed, Nov 7, 2018 at 5:43 AM Paolo Abeni <pab...@redhat.com> wrote: > > This series implements GRO support for UDP sockets, as the RX counterpart > of commit bec1f6f69736 ("udp: generate gso with UDP_SEGMENT"). > The core functionality is implemented by the second patch, introducing a new > sockopt to enable UDP_GRO, while patch 3 implements support for passing the > segment size to the user space via a new cmsg. > UDP GRO performs a socket lookup for each ingress packets and aggregate > datagram > directed to UDP GRO enabled sockets with constant l4 tuple. > > UDP GRO packets can land on non GRO-enabled sockets, e.g. due to iptables NAT > rules, and that could potentially confuse existing applications. > > The solution adopted here is to de-segment the GRO packet before enqueuing > as needed. Since we must cope with packet reinsertion after de-segmentation, > the relevant code is factored-out in ipv4 and ipv6 specific helpers and > exposed > to UDP usage. > > While the current code can probably be improved, this safeguard ,implemented > in > the patches 4-7, allows future enachements to enable UDP GSO offload on more > virtual devices eventually even on forwarded packets. > > The last 4 for patches implement some performance and functional self-tests, > re-using the existing udpgso infrastructure. The problematic scenario > described > above is explicitly tested. > > This revision of the series try to address the feedback provided by Willem and > Subash on previous iteration. > > Paolo Abeni (10): > udp: implement complete book-keeping for encap_needed > udp: implement GRO for plain UDP sockets. > udp: add support for UDP_GRO cmsg > ip: factor out protocol delivery helper > ipv6: factor out protocol delivery helper > udp: cope with UDP GRO packet misdirection > selftests: add GRO support to udp bench rx program > selftests: add dummy xdp test helper > selftests: add some benchmark for UDP GRO > selftests: add functionals test for UDP GRO > > include/linux/udp.h | 25 ++- > include/net/ip.h | 1 + > include/net/ipv6.h | 2 + > include/net/udp.h | 45 ++++- > include/net/udp_tunnel.h | 6 + > include/uapi/linux/udp.h | 1 + > net/ipv4/ip_input.c | 73 ++++---- > net/ipv4/udp.c | 54 +++++- > net/ipv4/udp_offload.c | 109 +++++++++--- > net/ipv6/ip6_input.c | 28 ++-- > net/ipv6/udp.c | 41 ++++- > net/ipv6/udp_offload.c | 6 +- > tools/testing/selftests/bpf/Makefile | 3 +- > tools/testing/selftests/bpf/xdp_dummy.c | 13 ++ > tools/testing/selftests/net/Makefile | 1 + > tools/testing/selftests/net/udpgro.sh | 148 +++++++++++++++++ > tools/testing/selftests/net/udpgro_bench.sh | 95 +++++++++++ > tools/testing/selftests/net/udpgso_bench.sh | 2 +- > tools/testing/selftests/net/udpgso_bench_rx.c | 156 ++++++++++++++++-- > tools/testing/selftests/net/udpgso_bench_tx.c | 22 ++- > 20 files changed, 708 insertions(+), 123 deletions(-) > create mode 100644 tools/testing/selftests/bpf/xdp_dummy.c > create mode 100755 tools/testing/selftests/net/udpgro.sh > create mode 100755 tools/testing/selftests/net/udpgro_bench.sh > > -- > 2.17.2 >
For the series: Acked-by: Willem de Bruijn <will...@google.com> (Let me know if I need to Ack each patch directly) Looks great. Thanks for addressing all comments, Paolo. I applied the series mbox from patchwork to the same commit as the previous RFCs to be able to incrementally review with git diff.