Skip to content

Commit ba1cf16

Browse files
author
Martin KaFai Lau
committed
Merge branch 'use network helpers, part 10'
Geliang Tang says: ==================== This set is part 10 of series "use network helpers" all BPF selftests wide. Patches 1-3 drop local functions make_client(), make_socket() and inetaddr_len() in sk_lookup.c. Patch 4 drops a useless function __start_server() in network_helpers.c. ==================== Signed-off-by: Martin KaFai Lau <[email protected]>
2 parents 229d6db + b27a9ab commit ba1cf16

File tree

2 files changed

+40
-96
lines changed

2 files changed

+40
-96
lines changed

tools/testing/selftests/bpf/network_helpers.c

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -80,12 +80,15 @@ int settimeo(int fd, int timeout_ms)
8080

8181
#define save_errno_close(fd) ({ int __save = errno; close(fd); errno = __save; })
8282

83-
static int __start_server(int type, const struct sockaddr *addr, socklen_t addrlen,
84-
const struct network_helper_opts *opts)
83+
int start_server_addr(int type, const struct sockaddr_storage *addr, socklen_t addrlen,
84+
const struct network_helper_opts *opts)
8585
{
8686
int fd;
8787

88-
fd = socket(addr->sa_family, type, opts->proto);
88+
if (!opts)
89+
opts = &default_opts;
90+
91+
fd = socket(addr->ss_family, type, opts->proto);
8992
if (fd < 0) {
9093
log_err("Failed to create server socket");
9194
return -1;
@@ -100,7 +103,7 @@ static int __start_server(int type, const struct sockaddr *addr, socklen_t addrl
100103
goto error_close;
101104
}
102105

103-
if (bind(fd, addr, addrlen) < 0) {
106+
if (bind(fd, (struct sockaddr *)addr, addrlen) < 0) {
104107
log_err("Failed to bind socket");
105108
goto error_close;
106109
}
@@ -131,7 +134,7 @@ int start_server_str(int family, int type, const char *addr_str, __u16 port,
131134
if (make_sockaddr(family, addr_str, port, &addr, &addrlen))
132135
return -1;
133136

134-
return __start_server(type, (struct sockaddr *)&addr, addrlen, opts);
137+
return start_server_addr(type, &addr, addrlen, opts);
135138
}
136139

137140
int start_server(int family, int type, const char *addr_str, __u16 port,
@@ -173,7 +176,7 @@ int *start_reuseport_server(int family, int type, const char *addr_str,
173176
if (!fds)
174177
return NULL;
175178

176-
fds[0] = __start_server(type, (struct sockaddr *)&addr, addrlen, &opts);
179+
fds[0] = start_server_addr(type, &addr, addrlen, &opts);
177180
if (fds[0] == -1)
178181
goto close_fds;
179182
nr_fds = 1;
@@ -182,7 +185,7 @@ int *start_reuseport_server(int family, int type, const char *addr_str,
182185
goto close_fds;
183186

184187
for (; nr_fds < nr_listens; nr_fds++) {
185-
fds[nr_fds] = __start_server(type, (struct sockaddr *)&addr, addrlen, &opts);
188+
fds[nr_fds] = start_server_addr(type, &addr, addrlen, &opts);
186189
if (fds[nr_fds] == -1)
187190
goto close_fds;
188191
}
@@ -194,15 +197,6 @@ int *start_reuseport_server(int family, int type, const char *addr_str,
194197
return NULL;
195198
}
196199

197-
int start_server_addr(int type, const struct sockaddr_storage *addr, socklen_t len,
198-
const struct network_helper_opts *opts)
199-
{
200-
if (!opts)
201-
opts = &default_opts;
202-
203-
return __start_server(type, (struct sockaddr *)addr, len, opts);
204-
}
205-
206200
void free_fds(int *fds, unsigned int nr_close_fds)
207201
{
208202
if (fds) {

tools/testing/selftests/bpf/prog_tests/sk_lookup.c

Lines changed: 30 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,6 @@
4747
#define INT_IP6 "fd00::2"
4848
#define INT_PORT 8008
4949

50-
#define IO_TIMEOUT_SEC 3
51-
5250
enum server {
5351
SERVER_A = 0,
5452
SERVER_B = 1,
@@ -108,46 +106,6 @@ static int attach_reuseport(int sock_fd, struct bpf_program *reuseport_prog)
108106
return 0;
109107
}
110108

111-
static socklen_t inetaddr_len(const struct sockaddr_storage *addr)
112-
{
113-
return (addr->ss_family == AF_INET ? sizeof(struct sockaddr_in) :
114-
addr->ss_family == AF_INET6 ? sizeof(struct sockaddr_in6) : 0);
115-
}
116-
117-
static int make_socket(int sotype, const char *ip, int port,
118-
struct sockaddr_storage *addr)
119-
{
120-
struct timeval timeo = { .tv_sec = IO_TIMEOUT_SEC };
121-
int err, family, fd;
122-
123-
family = is_ipv6(ip) ? AF_INET6 : AF_INET;
124-
err = make_sockaddr(family, ip, port, addr, NULL);
125-
if (CHECK(err, "make_address", "failed\n"))
126-
return -1;
127-
128-
fd = socket(addr->ss_family, sotype, 0);
129-
if (CHECK(fd < 0, "socket", "failed\n")) {
130-
log_err("failed to make socket");
131-
return -1;
132-
}
133-
134-
err = setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, &timeo, sizeof(timeo));
135-
if (CHECK(err, "setsockopt(SO_SNDTIMEO)", "failed\n")) {
136-
log_err("failed to set SNDTIMEO");
137-
close(fd);
138-
return -1;
139-
}
140-
141-
err = setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, &timeo, sizeof(timeo));
142-
if (CHECK(err, "setsockopt(SO_RCVTIMEO)", "failed\n")) {
143-
log_err("failed to set RCVTIMEO");
144-
close(fd);
145-
return -1;
146-
}
147-
148-
return fd;
149-
}
150-
151109
static int setsockopts(int fd, void *opts)
152110
{
153111
struct cb_opts *co = (struct cb_opts *)opts;
@@ -229,27 +187,6 @@ static int make_server(int sotype, const char *ip, int port,
229187
return -1;
230188
}
231189

232-
static int make_client(int sotype, const char *ip, int port)
233-
{
234-
struct sockaddr_storage addr = {0};
235-
int err, fd;
236-
237-
fd = make_socket(sotype, ip, port, &addr);
238-
if (fd < 0)
239-
return -1;
240-
241-
err = connect(fd, (void *)&addr, inetaddr_len(&addr));
242-
if (CHECK(err, "make_client", "connect")) {
243-
log_err("failed to connect client socket");
244-
goto fail;
245-
}
246-
247-
return fd;
248-
fail:
249-
close(fd);
250-
return -1;
251-
}
252-
253190
static __u64 socket_cookie(int fd)
254191
{
255192
__u64 cookie;
@@ -646,8 +583,9 @@ static void run_lookup_prog(const struct test *t)
646583
goto close;
647584
}
648585

649-
client_fd = make_client(t->sotype, t->connect_to.ip, t->connect_to.port);
650-
if (client_fd < 0)
586+
client_fd = connect_to_addr_str(is_ipv6(t->connect_to.ip) ? AF_INET6 : AF_INET,
587+
t->sotype, t->connect_to.ip, t->connect_to.port, NULL);
588+
if (!ASSERT_OK_FD(client_fd, "connect_to_addr_str"))
651589
goto close;
652590

653591
if (t->sotype == SOCK_STREAM)
@@ -862,9 +800,11 @@ static void test_redirect_lookup(struct test_sk_lookup *skel)
862800

863801
static void drop_on_lookup(const struct test *t)
864802
{
803+
int family = is_ipv6(t->connect_to.ip) ? AF_INET6 : AF_INET;
865804
struct sockaddr_storage dst = {};
866805
int client_fd, server_fd, err;
867806
struct bpf_link *lookup_link;
807+
socklen_t len;
868808
ssize_t n;
869809

870810
lookup_link = attach_lookup_prog(t->lookup_prog);
@@ -876,12 +816,14 @@ static void drop_on_lookup(const struct test *t)
876816
if (server_fd < 0)
877817
goto detach;
878818

879-
client_fd = make_socket(t->sotype, t->connect_to.ip,
880-
t->connect_to.port, &dst);
881-
if (client_fd < 0)
819+
client_fd = client_socket(family, t->sotype, NULL);
820+
if (!ASSERT_OK_FD(client_fd, "client_socket"))
882821
goto close_srv;
883822

884-
err = connect(client_fd, (void *)&dst, inetaddr_len(&dst));
823+
err = make_sockaddr(family, t->connect_to.ip, t->connect_to.port, &dst, &len);
824+
if (!ASSERT_OK(err, "make_sockaddr"))
825+
goto close_all;
826+
err = connect(client_fd, (void *)&dst, len);
885827
if (t->sotype == SOCK_DGRAM) {
886828
err = send_byte(client_fd);
887829
if (err)
@@ -976,9 +918,11 @@ static void test_drop_on_lookup(struct test_sk_lookup *skel)
976918

977919
static void drop_on_reuseport(const struct test *t)
978920
{
921+
int family = is_ipv6(t->connect_to.ip) ? AF_INET6 : AF_INET;
979922
struct sockaddr_storage dst = { 0 };
980923
int client, server1, server2, err;
981924
struct bpf_link *lookup_link;
925+
socklen_t len;
982926
ssize_t n;
983927

984928
lookup_link = attach_lookup_prog(t->lookup_prog);
@@ -1000,12 +944,14 @@ static void drop_on_reuseport(const struct test *t)
1000944
if (server2 < 0)
1001945
goto close_srv1;
1002946

1003-
client = make_socket(t->sotype, t->connect_to.ip,
1004-
t->connect_to.port, &dst);
1005-
if (client < 0)
947+
client = client_socket(family, t->sotype, NULL);
948+
if (!ASSERT_OK_FD(client, "client_socket"))
1006949
goto close_srv2;
1007950

1008-
err = connect(client, (void *)&dst, inetaddr_len(&dst));
951+
err = make_sockaddr(family, t->connect_to.ip, t->connect_to.port, &dst, &len);
952+
if (!ASSERT_OK(err, "make_sockaddr"))
953+
goto close_all;
954+
err = connect(client, (void *)&dst, len);
1009955
if (t->sotype == SOCK_DGRAM) {
1010956
err = send_byte(client);
1011957
if (err)
@@ -1152,8 +1098,8 @@ static void run_sk_assign_connected(struct test_sk_lookup *skel,
11521098
if (server_fd < 0)
11531099
return;
11541100

1155-
connected_fd = make_client(sotype, EXT_IP4, EXT_PORT);
1156-
if (connected_fd < 0)
1101+
connected_fd = connect_to_addr_str(AF_INET, sotype, EXT_IP4, EXT_PORT, NULL);
1102+
if (!ASSERT_OK_FD(connected_fd, "connect_to_addr_str"))
11571103
goto out_close_server;
11581104

11591105
/* Put a connected socket in redirect map */
@@ -1166,8 +1112,8 @@ static void run_sk_assign_connected(struct test_sk_lookup *skel,
11661112
goto out_close_connected;
11671113

11681114
/* Try to redirect TCP SYN / UDP packet to a connected socket */
1169-
client_fd = make_client(sotype, EXT_IP4, EXT_PORT);
1170-
if (client_fd < 0)
1115+
client_fd = connect_to_addr_str(AF_INET, sotype, EXT_IP4, EXT_PORT, NULL);
1116+
if (!ASSERT_OK_FD(client_fd, "connect_to_addr_str"))
11711117
goto out_unlink_prog;
11721118
if (sotype == SOCK_DGRAM) {
11731119
send_byte(client_fd);
@@ -1219,6 +1165,7 @@ static void run_multi_prog_lookup(const struct test_multi_prog *t)
12191165
int map_fd, server_fd, client_fd;
12201166
struct bpf_link *link1, *link2;
12211167
int prog_idx, done, err;
1168+
socklen_t len;
12221169

12231170
map_fd = bpf_map__fd(t->run_map);
12241171

@@ -1248,11 +1195,14 @@ static void run_multi_prog_lookup(const struct test_multi_prog *t)
12481195
if (err)
12491196
goto out_close_server;
12501197

1251-
client_fd = make_socket(SOCK_STREAM, EXT_IP4, EXT_PORT, &dst);
1252-
if (client_fd < 0)
1198+
client_fd = client_socket(AF_INET, SOCK_STREAM, NULL);
1199+
if (!ASSERT_OK_FD(client_fd, "client_socket"))
12531200
goto out_close_server;
12541201

1255-
err = connect(client_fd, (void *)&dst, inetaddr_len(&dst));
1202+
err = make_sockaddr(AF_INET, EXT_IP4, EXT_PORT, &dst, &len);
1203+
if (!ASSERT_OK(err, "make_sockaddr"))
1204+
goto out_close_client;
1205+
err = connect(client_fd, (void *)&dst, len);
12561206
if (CHECK(err && !t->expect_errno, "connect",
12571207
"unexpected error %d\n", errno))
12581208
goto out_close_client;

0 commit comments

Comments
 (0)