From: Martin KaFai Lau <kafai@fb.com> To: <bpf@vger.kernel.org> Cc: Alexei Starovoitov <ast@kernel.org>, Daniel Borkmann <daniel@iogearbox.net>, Eric Dumazet <edumazet@google.com>, <kernel-team@fb.com>, Lawrence Brakmo <brakmo@fb.com>, Neal Cardwell <ncardwell@google.com>, <netdev@vger.kernel.org>, Yuchung Cheng <ycheng@google.com> Subject: [PATCH bpf-next 00/10] BPF TCP header options Date: Fri, 26 Jun 2020 10:55:01 -0700 Message-ID: <20200626175501.1459961-1-kafai@fb.com> (raw) The earlier effort in BPF-TCP-CC allows the TCP Congestion Control algorithm to be written in BPF. It opens up opportunities to allow a faster turnaround time in testing/releasing new congestion control ideas to production environment. The same flexibility can be extended to writing TCP header option. It is not uncommon that people want to test new TCP header option to improve the TCP performance. Another use case is for data-center that has a more controlled environment and has more flexibility in putting header options for internal traffic only. This patch set introduces the necessary BPF logic and API to allow bpf program (BPF_PROG_TYPE_SOCK_OPS) to write and parse TCP options under experimental kind(254) and 16bit-magic(0xeB9F). The experimental kind(254) usage is defined in RFC 6994. There are also some changes to TCP and they are mostly to provide the needed sk and skb info to the bpf program to make decision. Patch 4 is the main patch and has more details on the API and design. The set ends with an example which sends the max delay ack in the BPF TCP header option and the receiving side can then adjust its RTO accordingly. Martin KaFai Lau (10): tcp: Use a struct to represent a saved_syn tcp: bpf: Parse BPF experimental header option bpf: sock_ops: Change some members of sock_ops_kern from u32 to u8 bpf: tcp: Allow bpf prog to write and parse BPF TCP header option bpf: selftests: A few improvements to network_helpers.c bpf: selftests: Add fastopen_connect to network_helpers bpf: selftests: Restore netns after each test bpf: selftests: tcp header options tcp: bpf: Add TCP_BPF_DELACK_MAX and TCP_BPF_RTO_MIN to bpf_setsockopt bpf: selftest: Add test for TCP_BPF_DELACK_MAX and TCP_BPF_RTO_MIN include/linux/bpf-cgroup.h | 25 + include/linux/filter.h | 10 +- include/linux/tcp.h | 11 +- include/net/inet_connection_sock.h | 2 + include/net/request_sock.h | 8 +- include/net/tcp.h | 58 +- include/uapi/linux/bpf.h | 189 ++++- net/core/filter.c | 236 +++++- net/ipv4/tcp.c | 13 +- net/ipv4/tcp_fastopen.c | 2 +- net/ipv4/tcp_input.c | 99 ++- net/ipv4/tcp_ipv4.c | 4 +- net/ipv4/tcp_minisocks.c | 1 + net/ipv4/tcp_output.c | 188 ++++- net/ipv6/tcp_ipv6.c | 4 +- tools/include/uapi/linux/bpf.h | 189 ++++- tools/testing/selftests/bpf/network_helpers.c | 182 +++-- tools/testing/selftests/bpf/network_helpers.h | 11 +- .../bpf/prog_tests/cgroup_skb_sk_lookup.c | 12 +- .../bpf/prog_tests/connect_force_port.c | 10 +- .../bpf/prog_tests/load_bytes_relative.c | 4 +- .../bpf/prog_tests/tcp_hdr_options.c | 522 +++++++++++++ .../selftests/bpf/prog_tests/tcp_rtt.c | 4 +- .../bpf/progs/test_tcp_hdr_options.c | 708 ++++++++++++++++++ tools/testing/selftests/bpf/test_progs.c | 21 + tools/testing/selftests/bpf/test_progs.h | 2 + .../selftests/bpf/test_tcp_hdr_options.h | 34 + 27 files changed, 2426 insertions(+), 123 deletions(-) create mode 100644 tools/testing/selftests/bpf/prog_tests/tcp_hdr_options.c create mode 100644 tools/testing/selftests/bpf/progs/test_tcp_hdr_options.c create mode 100644 tools/testing/selftests/bpf/test_tcp_hdr_options.h -- 2.24.1
next reply index Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-06-26 17:55 Martin KaFai Lau [this message] 2020-06-26 17:55 ` [PATCH bpf-next 01/10] tcp: Use a struct to represent a saved_syn Martin KaFai Lau 2020-06-27 17:41 ` Eric Dumazet 2020-06-30 23:24 ` Martin KaFai Lau 2020-06-30 23:35 ` Eric Dumazet 2020-06-26 17:55 ` [PATCH bpf-next 02/10] tcp: bpf: Parse BPF experimental header option Martin KaFai Lau 2020-06-27 16:44 ` Eric Dumazet 2020-06-27 17:17 ` Eric Dumazet 2020-06-28 23:44 ` Martin KaFai Lau 2020-06-29 0:45 ` Martin KaFai Lau 2020-06-26 17:55 ` [PATCH bpf-next 03/10] bpf: sock_ops: Change some members of sock_ops_kern from u32 to u8 Martin KaFai Lau 2020-06-26 17:55 ` [PATCH bpf-next 04/10] bpf: tcp: Allow bpf prog to write and parse BPF TCP header option Martin KaFai Lau 2020-06-28 18:24 ` Alexei Starovoitov 2020-06-29 0:34 ` Martin KaFai Lau 2020-07-02 5:31 ` Martin KaFai Lau 2020-06-26 17:55 ` [PATCH bpf-next 05/10] bpf: selftests: A few improvements to network_helpers.c Martin KaFai Lau 2020-06-26 17:55 ` [PATCH bpf-next 06/10] bpf: selftests: Add fastopen_connect to network_helpers Martin KaFai Lau 2020-06-26 17:55 ` [PATCH bpf-next 07/10] bpf: selftests: Restore netns after each test Martin KaFai Lau 2020-06-26 22:45 ` Andrii Nakryiko 2020-06-27 0:23 ` Martin KaFai Lau 2020-06-27 20:31 ` Andrii Nakryiko 2020-06-29 18:00 ` Martin KaFai Lau 2020-06-29 18:13 ` Andrii Nakryiko 2020-06-29 18:24 ` Martin KaFai Lau 2020-06-26 17:55 ` [PATCH bpf-next 08/10] bpf: selftests: tcp header options Martin KaFai Lau 2020-06-26 17:55 ` [PATCH bpf-next 09/10] tcp: bpf: Add TCP_BPF_DELACK_MAX and TCP_BPF_RTO_MIN to bpf_setsockopt Martin KaFai Lau 2020-06-27 17:30 ` Eric Dumazet 2020-06-26 17:56 ` [PATCH bpf-next 10/10] bpf: selftest: Add test for TCP_BPF_DELACK_MAX and TCP_BPF_RTO_MIN Martin KaFai Lau
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20200626175501.1459961-1-kafai@fb.com \ --to=kafai@fb.com \ --cc=ast@kernel.org \ --cc=bpf@vger.kernel.org \ --cc=brakmo@fb.com \ --cc=daniel@iogearbox.net \ --cc=edumazet@google.com \ --cc=kernel-team@fb.com \ --cc=ncardwell@google.com \ --cc=netdev@vger.kernel.org \ --cc=ycheng@google.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Netdev Archive on lore.kernel.org Archives are clonable: git clone --mirror https://lore.kernel.org/netdev/0 netdev/git/0.git git clone --mirror https://lore.kernel.org/netdev/1 netdev/git/1.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 netdev netdev/ https://lore.kernel.org/netdev \ netdev@vger.kernel.org public-inbox-index netdev Example config snippet for mirrors Newsgroup available over NNTP: nntp://nntp.lore.kernel.org/org.kernel.vger.netdev AGPL code for this site: git clone https://public-inbox.org/public-inbox.git