bpf: Require only one of cong_avoid() and cong_control() from a TCP CC
authorJörn-Thorben Hinz <jthinz@mailbox.tu-berlin.de>
Wed, 22 Jun 2022 19:12:24 +0000 (21:12 +0200)
committerAlexei Starovoitov <ast@kernel.org>
Thu, 23 Jun 2022 16:49:57 +0000 (09:49 -0700)
commit9f0265e921dee14096943ee11f793fa076aa7a72
tree24bcc369f281f23bf64702a6432529dcbf2a7677
parent41c95dd6a604dc3f5fae55c99c138cc8e7fec76e
bpf: Require only one of cong_avoid() and cong_control() from a TCP CC

Remove the check for required and optional functions in a struct
tcp_congestion_ops from bpf_tcp_ca.c. Rely on
tcp_register_congestion_control() to reject a BPF CC that does not
implement all required functions, as it will do for a non-BPF CC.

When a CC implements tcp_congestion_ops.cong_control(), the alternate
cong_avoid() is not in use in the TCP stack. Previously, a BPF CC was
still forced to implement cong_avoid() as a no-op since it was
non-optional in bpf_tcp_ca.c.

Signed-off-by: Jörn-Thorben Hinz <jthinz@mailbox.tu-berlin.de>
Reviewed-by: Martin KaFai Lau <kafai@fb.com>
Link: https://lore.kernel.org/r/20220622191227.898118-3-jthinz@mailbox.tu-berlin.de
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
kernel/bpf/bpf_struct_ops.c
net/ipv4/bpf_tcp_ca.c