From: Petar Penkov <ppenkov@xxxxxxxxxx> This patch series introduces a BPF helper function that allows generating SYN cookies from BPF. The first two patches in the series modify several TCP helper functions to allow for SKB-less operation, as is the case with XDP. The third patch introduces the bpf_tcp_gen_syncookie helper function which generates a SYN cookie for either XDP or TC programs. The last three patches sync tools/ and add a test. The primary design consideration I see in the patch series is the return value of the helper function. Currently bpf_tcp_gen_syncookie returns a 64-bit value that contains both the 32-bit syncookie, and the 16-bit mss value which is encoded in the cookie. On error, it would return a negative value instead. I chose this over writing the cookie into the provided TCP packet to avoid writing packet data as currently if a helper changes the packet data, the first argument has to point to the context (can this be relaxed?). To make the API cleaner we can instead return something like the struct below though the return type would then not really be RET_INTEGER or any of the currently existing return types. struct bpf_syncookie { u16 error; // or u8 error, u8 unused for future use u16 mss; u32 syncookie; } Petar Penkov (6): tcp: tcp_syn_flood_action read port from socket tcp: add skb-less helpers to retrieve SYN cookie bpf: add bpf_tcp_gen_syncookie helper bpf: sync bpf.h to tools/ selftests/bpf: bpf_tcp_gen_syncookie->bpf_helpers selftests/bpf: add test for bpf_tcp_gen_syncookie include/net/tcp.h | 11 +++ include/uapi/linux/bpf.h | 30 ++++++- net/core/filter.c | 62 +++++++++++++ net/ipv4/tcp_input.c | 87 +++++++++++++++++-- net/ipv4/tcp_ipv4.c | 8 ++ net/ipv6/tcp_ipv6.c | 8 ++ tools/include/uapi/linux/bpf.h | 37 +++++++- tools/testing/selftests/bpf/bpf_helpers.h | 3 + .../bpf/progs/test_tcp_check_syncookie_kern.c | 28 ++++-- .../bpf/test_tcp_check_syncookie_user.c | 61 +++++++++++-- 10 files changed, 313 insertions(+), 22 deletions(-) -- 2.22.0.510.g264f2c817a-goog