As previously discussed here [1], long-lived sockets can miss a chance to set additional callbacks if a sock ops program was not attached early in their lifetime. Adding support to bpf_setsockopt() to set callback flags (and bpf_getsockopt() to retrieve them) provides other opportunities to enable callbacks, either directly via a cgroup/setsockopt intercepted setsockopt() or via a socket iterator. Patch 1 adds bpf_[get|set]sockopt() support; patch 2 adds testing for it via a sockops programs, along with verification via a cgroup/getsockopt program. Changes since v1 [2]: - Removed unneeded READ_ONCE() (Martin, patch 1) - Reworked sockopt test to leave existing tests undisturbed while adding test_nonstandard_opt() test to cover the TCP_BPF_SOCK_OPS_CB_FLAGS case; test verifies that value set via bpf_setsockopt() is what we expect via a call to getsockopt() which is caught by a cgroup/getsockopt program to provide the flags value (Martin, patch 2) - Removed unneeded iterator test (Martin) [1] https://lore.kernel.org/bpf/f42f157b-6e52-dd4d-3d97-9b86c84c0b00@xxxxxxxxxx/ [2] https://lore.kernel.org/bpf/20240802152929.2695863-1-alan.maguire@xxxxxxxxxx/ Alan Maguire (2): bpf/bpf_get,set_sockopt: add option to set TCP-BPF sock ops flags selftests/bpf: add sockopt tests for TCP_BPF_SOCK_OPS_CB_FLAGS include/uapi/linux/bpf.h | 3 +- net/core/filter.c | 15 ++++++ tools/include/uapi/linux/bpf.h | 3 +- .../selftests/bpf/prog_tests/setget_sockopt.c | 47 +++++++++++++++++++ .../selftests/bpf/progs/setget_sockopt.c | 24 ++++++++-- 5 files changed, 87 insertions(+), 5 deletions(-) -- 2.31.1