On 4/24/24 8:23 PM, Geliang Tang wrote:
+static int setsockopt_reuseport(int fd, const void *optval, socklen_t optlen)
+{
+ return setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, optval, optlen);
}
[ ... ]
void free_fds(int *fds, unsigned int nr_close_fds)
diff --git a/tools/testing/selftests/bpf/network_helpers.h b/tools/testing/selftests/bpf/network_helpers.h
index c62b54daa914..540ecfc52bd7 100644
--- a/tools/testing/selftests/bpf/network_helpers.h
+++ b/tools/testing/selftests/bpf/network_helpers.h
@@ -28,6 +28,9 @@ struct network_helper_opts {
bool noconnect;
int type;
int proto;
+ int (*setsockopt)(int fd, const void *optval, socklen_t optlen);
+ const void *optval;
+ socklen_t optlen;
optval and optlen could be in the stack of the (*setsockopt) callback.
e.g. the "int on;" could be local to the setsockopt_reuseport() instead of
adding optval/len to the network_helper_opts. Passing one optval in
network_helper_opts could be less flexible when we want to do multiple
setsockopt() after socket().
Another nit I would like to make, rename this from (*setsockopt) to
(*post_socket_cb) because this callback could do more than setsockopt, e.g.
adding a sk local storage to a socket fd before bind(). Also, add a "const
struct post_socket_opts *opts" for future extension, Like:
struct post_socket_opts {};
int (*post_socket_cb)(int fd, const struct post_socket_opts *opts);
Patch 6 will need two setsockopt cb functions because of different optval but I
believe the tradeoff is worth it for this callback doing more than just one
setsockopt.
Patch 1 to 3 have been applied. Thanks.