aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeliang Tang <tanggeliang@kylinos.cn>2024-04-11 13:43:11 +0800
committerMartin KaFai Lau <martin.lau@kernel.org>2024-04-11 11:17:56 -0700
commit68acca6e6f99b1f928a2c05b92bb1c272edb8ae7 (patch)
tree3767bece7681558b7ac282a88a2cc74070123365
parentd75142dbeb2bd1587b9cc19f841578f541275a64 (diff)
downloadbpf-next-68acca6e6f99b1f928a2c05b92bb1c272edb8ae7.tar.gz
selftests/bpf: Add struct send_recv_arg
Avoid setting total_bytes and stop as global variables, this patch adds a new struct named send_recv_arg to pass arguments between threads. Put these two variables together with fd into this struct and pass it to server thread, so that server thread can access these two variables without setting them as global ones. Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn> Link: https://lore.kernel.org/r/ca1dd703b796f6810985418373e750f7068b4186.1712813933.git.tanggeliang@kylinos.cn Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
-rw-r--r--tools/testing/selftests/bpf/prog_tests/bpf_tcp_ca.c34
1 files changed, 22 insertions, 12 deletions
diff --git a/tools/testing/selftests/bpf/prog_tests/bpf_tcp_ca.c b/tools/testing/selftests/bpf/prog_tests/bpf_tcp_ca.c
index 077b107130f6b9..64f172f02a9a2f 100644
--- a/tools/testing/selftests/bpf/prog_tests/bpf_tcp_ca.c
+++ b/tools/testing/selftests/bpf/prog_tests/bpf_tcp_ca.c
@@ -21,7 +21,6 @@
static const unsigned int total_bytes = 10 * 1024 * 1024;
static int expected_stg = 0xeB9F;
-static int stop;
static int settcpca(int fd, const char *tcp_ca)
{
@@ -34,13 +33,20 @@ static int settcpca(int fd, const char *tcp_ca)
return 0;
}
+struct send_recv_arg {
+ int fd;
+ uint32_t bytes;
+ int stop;
+};
+
static void *server(void *arg)
{
- int lfd = (int)(long)arg, err = 0, fd;
+ struct send_recv_arg *a = (struct send_recv_arg *)arg;
ssize_t nr_sent = 0, bytes = 0;
char batch[1500];
+ int err = 0, fd;
- fd = accept(lfd, NULL, NULL);
+ fd = accept(a->fd, NULL, NULL);
while (fd == -1) {
if (errno == EINTR)
continue;
@@ -53,9 +59,9 @@ static void *server(void *arg)
goto done;
}
- while (bytes < total_bytes && !READ_ONCE(stop)) {
+ while (bytes < a->bytes && !READ_ONCE(a->stop)) {
nr_sent = send(fd, &batch,
- MIN(total_bytes - bytes, sizeof(batch)), 0);
+ MIN(a->bytes - bytes, sizeof(batch)), 0);
if (nr_sent == -1 && errno == EINTR)
continue;
if (nr_sent == -1) {
@@ -65,13 +71,13 @@ static void *server(void *arg)
bytes += nr_sent;
}
- ASSERT_EQ(bytes, total_bytes, "send");
+ ASSERT_EQ(bytes, a->bytes, "send");
done:
if (fd >= 0)
close(fd);
if (err) {
- WRITE_ONCE(stop, 1);
+ WRITE_ONCE(a->stop, 1);
return ERR_PTR(err);
}
return NULL;
@@ -80,18 +86,22 @@ done:
static void do_test(const char *tcp_ca, const struct bpf_map *sk_stg_map)
{
ssize_t nr_recv = 0, bytes = 0;
+ struct send_recv_arg arg = {
+ .bytes = total_bytes,
+ .stop = 0,
+ };
int lfd = -1, fd = -1;
pthread_t srv_thread;
void *thread_ret;
char batch[1500];
int err;
- WRITE_ONCE(stop, 0);
-
lfd = start_server(AF_INET6, SOCK_STREAM, NULL, 0, 0);
if (!ASSERT_NEQ(lfd, -1, "socket"))
return;
+ arg.fd = lfd;
+
fd = socket(AF_INET6, SOCK_STREAM, 0);
if (!ASSERT_NEQ(fd, -1, "socket")) {
close(lfd);
@@ -123,12 +133,12 @@ static void do_test(const char *tcp_ca, const struct bpf_map *sk_stg_map)
goto done;
}
- err = pthread_create(&srv_thread, NULL, server, (void *)(long)lfd);
+ err = pthread_create(&srv_thread, NULL, server, (void *)&arg);
if (!ASSERT_OK(err, "pthread_create"))
goto done;
/* recv total_bytes */
- while (bytes < total_bytes && !READ_ONCE(stop)) {
+ while (bytes < total_bytes && !READ_ONCE(arg.stop)) {
nr_recv = recv(fd, &batch,
MIN(total_bytes - bytes, sizeof(batch)), 0);
if (nr_recv == -1 && errno == EINTR)
@@ -140,7 +150,7 @@ static void do_test(const char *tcp_ca, const struct bpf_map *sk_stg_map)
ASSERT_EQ(bytes, total_bytes, "recv");
- WRITE_ONCE(stop, 1);
+ WRITE_ONCE(arg.stop, 1);
pthread_join(srv_thread, &thread_ret);
ASSERT_OK(IS_ERR(thread_ret), "thread_ret");