mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
selftests/bpf: Add backlog for network_helper_opts
Some callers expect __start_server() helper to pass their own "backlog" value to listen() instead of the default of 1. So this patch adds struct member "backlog" for network_helper_opts to allow callers to set "backlog" value via start_server_str() helper. listen(fd, 0 /* backlog */) can be used to enforce syncookie. Meaning backlog 0 is a legit value. Using 0 as a default and changing it to 1 here is fine. It makes the test program easier to write for the common case. Enforcing syncookie mode by using backlog 0 is a niche use case but it should at least have a way for the caller to do that. Thus, -ve backlog value is used here for the syncookie use case. Please see the comment in network_helpers.h for the details. Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn> Link: https://lore.kernel.org/r/1660229659b66eaad07aa2126e9c9fe217eba0dd.1720515893.git.tanggeliang@kylinos.cn Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
This commit is contained in:
parent
eeb23b54e4
commit
a3016a27ce
@ -106,7 +106,7 @@ static int __start_server(int type, const struct sockaddr *addr, socklen_t addrl
|
||||
}
|
||||
|
||||
if (type == SOCK_STREAM) {
|
||||
if (listen(fd, 1) < 0) {
|
||||
if (listen(fd, opts->backlog ? MAX(opts->backlog, 0) : 1) < 0) {
|
||||
log_err("Failed to listed on socket");
|
||||
goto error_close;
|
||||
}
|
||||
|
@ -25,6 +25,16 @@ struct network_helper_opts {
|
||||
int timeout_ms;
|
||||
bool must_fail;
|
||||
int proto;
|
||||
/* +ve: Passed to listen() as-is.
|
||||
* 0: Default when the test does not set
|
||||
* a particular value during the struct init.
|
||||
* It is changed to 1 before passing to listen().
|
||||
* Most tests only have one on-going connection.
|
||||
* -ve: It is changed to 0 before passing to listen().
|
||||
* It is useful to force syncookie without
|
||||
* changing the "tcp_syncookies" sysctl from 1 to 2.
|
||||
*/
|
||||
int backlog;
|
||||
int (*post_socket_cb)(int fd, void *opts);
|
||||
void *cb_opts;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user