Commit 34ad6ec9 authored by Geliang Tang's avatar Geliang Tang Committed by Alexei Starovoitov

selftests/bpf: Drop type from network_helper_opts

The opts.{type, noconnect} is at least a bit non intuitive or unnecessary.
The only use case now is in test_bpf_ip_check_defrag_ok which ends up
bypassing most (or at least some) of the connect_to_fd_opts() logic. It's
much better that test should have its own connect_to_fd_opts() instead.

This patch adds a new "type" parameter for connect_to_fd_opts(), then
opts->type and getsockopt(SO_TYPE) can be replaced by "type" parameter in
it.

In connect_to_fd(), use getsockopt(SO_TYPE) to get "type" value and pass
it to connect_to_fd_opts().

In bpf_tcp_ca.c and cgroup_v1v2.c, "SOCK_STREAM" types are passed to
connect_to_fd_opts(), and in ip_check_defrag.c, different types "SOCK_RAW"
and "SOCK_DGRAM" are passed to it.

With these changes, the strcut member "type" of network_helper_opts can be
dropped now.
Acked-by: default avatarEduard Zingerman <eddyz87@gmail.com>
Signed-off-by: default avatarGeliang Tang <tanggeliang@kylinos.cn>
Link: https://lore.kernel.org/r/cfd20b5ad4085c1d1af5e79df3b09013a407199f.1718932493.git.tanggeliang@kylinos.cnSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
parent bf977ee4
...@@ -303,36 +303,16 @@ int connect_to_addr(int type, const struct sockaddr_storage *addr, socklen_t add ...@@ -303,36 +303,16 @@ int connect_to_addr(int type, const struct sockaddr_storage *addr, socklen_t add
return -1; return -1;
} }
int connect_to_fd_opts(int server_fd, const struct network_helper_opts *opts) int connect_to_fd_opts(int server_fd, int type, const struct network_helper_opts *opts)
{ {
struct sockaddr_storage addr; struct sockaddr_storage addr;
struct sockaddr_in *addr_in; struct sockaddr_in *addr_in;
socklen_t addrlen, optlen; socklen_t addrlen;
int fd, type, protocol; int fd;
if (!opts) if (!opts)
opts = &default_opts; opts = &default_opts;
optlen = sizeof(type);
if (opts->type) {
type = opts->type;
} else {
if (getsockopt(server_fd, SOL_SOCKET, SO_TYPE, &type, &optlen)) {
log_err("getsockopt(SOL_TYPE)");
return -1;
}
}
if (opts->proto) {
protocol = opts->proto;
} else {
if (getsockopt(server_fd, SOL_SOCKET, SO_PROTOCOL, &protocol, &optlen)) {
log_err("getsockopt(SOL_PROTOCOL)");
return -1;
}
}
addrlen = sizeof(addr); addrlen = sizeof(addr);
if (getsockname(server_fd, (struct sockaddr *)&addr, &addrlen)) { if (getsockname(server_fd, (struct sockaddr *)&addr, &addrlen)) {
log_err("Failed to get server addr"); log_err("Failed to get server addr");
...@@ -340,7 +320,7 @@ int connect_to_fd_opts(int server_fd, const struct network_helper_opts *opts) ...@@ -340,7 +320,7 @@ int connect_to_fd_opts(int server_fd, const struct network_helper_opts *opts)
} }
addr_in = (struct sockaddr_in *)&addr; addr_in = (struct sockaddr_in *)&addr;
fd = socket(addr_in->sin_family, type, protocol); fd = socket(addr_in->sin_family, type, opts->proto);
if (fd < 0) { if (fd < 0) {
log_err("Failed to create client socket"); log_err("Failed to create client socket");
return -1; return -1;
...@@ -369,8 +349,23 @@ int connect_to_fd(int server_fd, int timeout_ms) ...@@ -369,8 +349,23 @@ int connect_to_fd(int server_fd, int timeout_ms)
struct network_helper_opts opts = { struct network_helper_opts opts = {
.timeout_ms = timeout_ms, .timeout_ms = timeout_ms,
}; };
int type, protocol;
socklen_t optlen;
optlen = sizeof(type);
if (getsockopt(server_fd, SOL_SOCKET, SO_TYPE, &type, &optlen)) {
log_err("getsockopt(SOL_TYPE)");
return -1;
}
optlen = sizeof(protocol);
if (getsockopt(server_fd, SOL_SOCKET, SO_PROTOCOL, &protocol, &optlen)) {
log_err("getsockopt(SOL_PROTOCOL)");
return -1;
}
opts.proto = protocol;
return connect_to_fd_opts(server_fd, &opts); return connect_to_fd_opts(server_fd, type, &opts);
} }
int connect_fd_to_fd(int client_fd, int server_fd, int timeout_ms) int connect_fd_to_fd(int client_fd, int server_fd, int timeout_ms)
......
...@@ -25,7 +25,6 @@ struct network_helper_opts { ...@@ -25,7 +25,6 @@ struct network_helper_opts {
int timeout_ms; int timeout_ms;
bool must_fail; bool must_fail;
bool noconnect; bool noconnect;
int type;
int proto; int proto;
int (*post_socket_cb)(int fd, void *opts); int (*post_socket_cb)(int fd, void *opts);
void *cb_opts; void *cb_opts;
...@@ -61,7 +60,7 @@ void free_fds(int *fds, unsigned int nr_close_fds); ...@@ -61,7 +60,7 @@ void free_fds(int *fds, unsigned int nr_close_fds);
int connect_to_addr(int type, const struct sockaddr_storage *addr, socklen_t len, int connect_to_addr(int type, const struct sockaddr_storage *addr, socklen_t len,
const struct network_helper_opts *opts); const struct network_helper_opts *opts);
int connect_to_fd(int server_fd, int timeout_ms); int connect_to_fd(int server_fd, int timeout_ms);
int connect_to_fd_opts(int server_fd, const struct network_helper_opts *opts); int connect_to_fd_opts(int server_fd, int type, const struct network_helper_opts *opts);
int connect_fd_to_fd(int client_fd, int server_fd, int timeout_ms); int connect_fd_to_fd(int client_fd, int server_fd, int timeout_ms);
int fastopen_connect(int server_fd, const char *data, unsigned int data_len, int fastopen_connect(int server_fd, const char *data, unsigned int data_len,
int timeout_ms); int timeout_ms);
......
...@@ -49,7 +49,7 @@ static bool start_test(char *addr_str, ...@@ -49,7 +49,7 @@ static bool start_test(char *addr_str,
goto err; goto err;
/* connect to server */ /* connect to server */
*cli_fd = connect_to_fd_opts(*srv_fd, cli_opts); *cli_fd = connect_to_fd_opts(*srv_fd, SOCK_STREAM, cli_opts);
if (!ASSERT_NEQ(*cli_fd, -1, "connect_to_fd_opts")) if (!ASSERT_NEQ(*cli_fd, -1, "connect_to_fd_opts"))
goto err; goto err;
......
...@@ -32,7 +32,7 @@ static int run_test(int cgroup_fd, int server_fd, bool classid) ...@@ -32,7 +32,7 @@ static int run_test(int cgroup_fd, int server_fd, bool classid)
goto out; goto out;
} }
fd = connect_to_fd_opts(server_fd, &opts); fd = connect_to_fd_opts(server_fd, SOCK_STREAM, &opts);
if (fd < 0) if (fd < 0)
err = -1; err = -1;
else else
...@@ -52,7 +52,7 @@ void test_cgroup_v1v2(void) ...@@ -52,7 +52,7 @@ void test_cgroup_v1v2(void)
server_fd = start_server(AF_INET, SOCK_STREAM, NULL, port, 0); server_fd = start_server(AF_INET, SOCK_STREAM, NULL, port, 0);
if (!ASSERT_GE(server_fd, 0, "server_fd")) if (!ASSERT_GE(server_fd, 0, "server_fd"))
return; return;
client_fd = connect_to_fd_opts(server_fd, &opts); client_fd = connect_to_fd_opts(server_fd, SOCK_STREAM, &opts);
if (!ASSERT_GE(client_fd, 0, "client_fd")) { if (!ASSERT_GE(client_fd, 0, "client_fd")) {
close(server_fd); close(server_fd);
return; return;
......
...@@ -164,7 +164,6 @@ void test_bpf_ip_check_defrag_ok(bool ipv6) ...@@ -164,7 +164,6 @@ void test_bpf_ip_check_defrag_ok(bool ipv6)
}; };
struct network_helper_opts tx_ops = { struct network_helper_opts tx_ops = {
.timeout_ms = 1000, .timeout_ms = 1000,
.type = SOCK_RAW,
.proto = IPPROTO_RAW, .proto = IPPROTO_RAW,
.noconnect = true, .noconnect = true,
}; };
...@@ -201,7 +200,7 @@ void test_bpf_ip_check_defrag_ok(bool ipv6) ...@@ -201,7 +200,7 @@ void test_bpf_ip_check_defrag_ok(bool ipv6)
nstoken = open_netns(NS0); nstoken = open_netns(NS0);
if (!ASSERT_OK_PTR(nstoken, "setns ns0")) if (!ASSERT_OK_PTR(nstoken, "setns ns0"))
goto out; goto out;
client_tx_fd = connect_to_fd_opts(srv_fd, &tx_ops); client_tx_fd = connect_to_fd_opts(srv_fd, SOCK_RAW, &tx_ops);
close_netns(nstoken); close_netns(nstoken);
if (!ASSERT_GE(client_tx_fd, 0, "connect_to_fd_opts")) if (!ASSERT_GE(client_tx_fd, 0, "connect_to_fd_opts"))
goto out; goto out;
...@@ -210,7 +209,7 @@ void test_bpf_ip_check_defrag_ok(bool ipv6) ...@@ -210,7 +209,7 @@ void test_bpf_ip_check_defrag_ok(bool ipv6)
nstoken = open_netns(NS0); nstoken = open_netns(NS0);
if (!ASSERT_OK_PTR(nstoken, "setns ns0")) if (!ASSERT_OK_PTR(nstoken, "setns ns0"))
goto out; goto out;
client_rx_fd = connect_to_fd_opts(srv_fd, &rx_opts); client_rx_fd = connect_to_fd_opts(srv_fd, SOCK_DGRAM, &rx_opts);
close_netns(nstoken); close_netns(nstoken);
if (!ASSERT_GE(client_rx_fd, 0, "connect_to_fd_opts")) if (!ASSERT_GE(client_rx_fd, 0, "connect_to_fd_opts"))
goto out; goto out;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment