* [PATCH bpf-next 0/3] export send_byte and send_recv_data
@ 2024-04-02 6:38 Geliang Tang
2024-04-02 6:38 ` [PATCH bpf-next 1/3] selftests/bpf: Export send_byte helper Geliang Tang
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Geliang Tang @ 2024-04-02 6:38 UTC (permalink / raw)
To: Andrii Nakryiko, Eduard Zingerman, Mykola Lysenko,
Alexei Starovoitov, Daniel Borkmann, Martin KaFai Lau, Song Liu,
Yonghong Song, John Fastabend, KP Singh, Stanislav Fomichev,
Hao Luo, Jiri Olsa, Shuah Khan
Cc: Geliang Tang, bpf, mptcp
From: Geliang Tang <tanggeliang@kylinos.cn>
Export two helpers used by MPTCP BPF selftests.
Geliang Tang (3):
selftests/bpf: Export send_byte helper
selftests/bpf: Add struct send_recv_arg
selftests/bpf: Export send_recv_data helper
tools/testing/selftests/bpf/network_helpers.c | 95 +++++++++++++++++++
tools/testing/selftests/bpf/network_helpers.h | 2 +
.../selftests/bpf/prog_tests/bpf_tcp_ca.c | 71 +-------------
.../testing/selftests/bpf/prog_tests/mptcp.c | 7 --
.../selftests/bpf/prog_tests/sk_lookup.c | 13 ---
.../selftests/bpf/prog_tests/tcp_rtt.c | 7 --
6 files changed, 98 insertions(+), 97 deletions(-)
--
2.40.1
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH bpf-next 1/3] selftests/bpf: Export send_byte helper
2024-04-02 6:38 [PATCH bpf-next 0/3] export send_byte and send_recv_data Geliang Tang
@ 2024-04-02 6:38 ` Geliang Tang
2024-04-04 6:03 ` Martin KaFai Lau
2024-04-02 6:38 ` [PATCH bpf-next 2/3] selftests/bpf: Add struct send_recv_arg Geliang Tang
2024-04-02 6:38 ` [PATCH bpf-next 3/3] selftests/bpf: Export send_recv_data helper Geliang Tang
2 siblings, 1 reply; 6+ messages in thread
From: Geliang Tang @ 2024-04-02 6:38 UTC (permalink / raw)
To: Andrii Nakryiko, Eduard Zingerman, Mykola Lysenko,
Alexei Starovoitov, Daniel Borkmann, Martin KaFai Lau, Song Liu,
Yonghong Song, John Fastabend, KP Singh, Stanislav Fomichev,
Hao Luo, Jiri Olsa, Shuah Khan
Cc: Geliang Tang, bpf, mptcp
From: Geliang Tang <tanggeliang@kylinos.cn>
The helper send_byte is defined in mptcp.c, sk_lookup.c and tcp_rtt.c.
It makes sense to export it into network_helpers.h to let it can be
used for all BPF selftests.
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
tools/testing/selftests/bpf/network_helpers.c | 9 +++++++++
tools/testing/selftests/bpf/network_helpers.h | 1 +
tools/testing/selftests/bpf/prog_tests/mptcp.c | 7 -------
tools/testing/selftests/bpf/prog_tests/sk_lookup.c | 13 -------------
tools/testing/selftests/bpf/prog_tests/tcp_rtt.c | 7 -------
5 files changed, 10 insertions(+), 27 deletions(-)
diff --git a/tools/testing/selftests/bpf/network_helpers.c b/tools/testing/selftests/bpf/network_helpers.c
index 6db27a9088e9..f2f8f7388d7c 100644
--- a/tools/testing/selftests/bpf/network_helpers.c
+++ b/tools/testing/selftests/bpf/network_helpers.c
@@ -497,3 +497,12 @@ int get_socket_local_port(int sock_fd)
return -1;
}
+
+int send_byte(int fd)
+{
+ char b = 0x55;
+
+ if (!ASSERT_EQ(write(fd, &b, sizeof(b)), 1, "send single byte"))
+ return -1;
+ return 0;
+}
diff --git a/tools/testing/selftests/bpf/network_helpers.h b/tools/testing/selftests/bpf/network_helpers.h
index 94b9be24e39b..d7ee2857093c 100644
--- a/tools/testing/selftests/bpf/network_helpers.h
+++ b/tools/testing/selftests/bpf/network_helpers.h
@@ -71,6 +71,7 @@ struct nstoken;
*/
struct nstoken *open_netns(const char *name);
void close_netns(struct nstoken *token);
+int send_byte(int fd);
static __u16 csum_fold(__u32 csum)
{
diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
index 8f8d792307c1..bff13ecec64c 100644
--- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
+++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
@@ -225,13 +225,6 @@ static void test_base(void)
close(cgroup_fd);
}
-static void send_byte(int fd)
-{
- char b = 0x55;
-
- ASSERT_EQ(write(fd, &b, sizeof(b)), 1, "send single byte");
-}
-
static int verify_mptcpify(int server_fd, int client_fd)
{
struct __mptcp_info info;
diff --git a/tools/testing/selftests/bpf/prog_tests/sk_lookup.c b/tools/testing/selftests/bpf/prog_tests/sk_lookup.c
index 597d0467a926..b4310a5ec1a4 100644
--- a/tools/testing/selftests/bpf/prog_tests/sk_lookup.c
+++ b/tools/testing/selftests/bpf/prog_tests/sk_lookup.c
@@ -282,19 +282,6 @@ static int fill_sk_lookup_ctx(struct bpf_sk_lookup *ctx, const char *local_ip, _
return 0;
}
-static int send_byte(int fd)
-{
- ssize_t n;
-
- errno = 0;
- n = send(fd, "a", 1, 0);
- if (CHECK(n <= 0, "send_byte", "send")) {
- log_err("failed/partial send");
- return -1;
- }
- return 0;
-}
-
static int recv_byte(int fd)
{
char buf[1];
diff --git a/tools/testing/selftests/bpf/prog_tests/tcp_rtt.c b/tools/testing/selftests/bpf/prog_tests/tcp_rtt.c
index 8fe84da1b9b4..dcb2d5e9c8db 100644
--- a/tools/testing/selftests/bpf/prog_tests/tcp_rtt.c
+++ b/tools/testing/selftests/bpf/prog_tests/tcp_rtt.c
@@ -12,13 +12,6 @@ struct tcp_rtt_storage {
__u32 icsk_retransmits;
};
-static void send_byte(int fd)
-{
- char b = 0x55;
-
- ASSERT_EQ(write(fd, &b, sizeof(b)), 1, "send single byte");
-}
-
static int wait_for_ack(int fd, int retries)
{
struct tcp_info info;
--
2.40.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH bpf-next 2/3] selftests/bpf: Add struct send_recv_arg
2024-04-02 6:38 [PATCH bpf-next 0/3] export send_byte and send_recv_data Geliang Tang
2024-04-02 6:38 ` [PATCH bpf-next 1/3] selftests/bpf: Export send_byte helper Geliang Tang
@ 2024-04-02 6:38 ` Geliang Tang
2024-04-02 6:38 ` [PATCH bpf-next 3/3] selftests/bpf: Export send_recv_data helper Geliang Tang
2 siblings, 0 replies; 6+ messages in thread
From: Geliang Tang @ 2024-04-02 6:38 UTC (permalink / raw)
To: Andrii Nakryiko, Eduard Zingerman, Mykola Lysenko,
Alexei Starovoitov, Daniel Borkmann, Martin KaFai Lau, Song Liu,
Yonghong Song, John Fastabend, KP Singh, Stanislav Fomichev,
Hao Luo, Jiri Olsa, Shuah Khan
Cc: Geliang Tang, bpf, mptcp
From: Geliang Tang <tanggeliang@kylinos.cn>
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>
---
.../selftests/bpf/prog_tests/bpf_tcp_ca.c | 33 ++++++++++++-------
1 file changed, 22 insertions(+), 11 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 077b107130f6..a1f0a2b06489 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,23 @@ static void *server(void *arg)
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,
+ };
int lfd = -1, fd = -1;
pthread_t srv_thread;
void *thread_ret;
char batch[1500];
int err;
- WRITE_ONCE(stop, 0);
+ WRITE_ONCE(arg.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 +134,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 +151,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");
--
2.40.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH bpf-next 3/3] selftests/bpf: Export send_recv_data helper
2024-04-02 6:38 [PATCH bpf-next 0/3] export send_byte and send_recv_data Geliang Tang
2024-04-02 6:38 ` [PATCH bpf-next 1/3] selftests/bpf: Export send_byte helper Geliang Tang
2024-04-02 6:38 ` [PATCH bpf-next 2/3] selftests/bpf: Add struct send_recv_arg Geliang Tang
@ 2024-04-02 6:38 ` Geliang Tang
2024-04-04 5:54 ` Martin KaFai Lau
2 siblings, 1 reply; 6+ messages in thread
From: Geliang Tang @ 2024-04-02 6:38 UTC (permalink / raw)
To: Andrii Nakryiko, Eduard Zingerman, Mykola Lysenko,
Alexei Starovoitov, Daniel Borkmann, Martin KaFai Lau, Song Liu,
Yonghong Song, John Fastabend, KP Singh, Stanislav Fomichev,
Hao Luo, Jiri Olsa, Shuah Khan
Cc: Geliang Tang, bpf, mptcp
From: Geliang Tang <tanggeliang@kylinos.cn>
This patch extracts the code to send and receive data into a new
helper named send_recv_data() in network_helpers.c and export it
in network_helpers.h.
This helper will be used for MPTCP BPF selftests.
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
tools/testing/selftests/bpf/network_helpers.c | 86 +++++++++++++++++++
tools/testing/selftests/bpf/network_helpers.h | 1 +
.../selftests/bpf/prog_tests/bpf_tcp_ca.c | 82 +-----------------
3 files changed, 88 insertions(+), 81 deletions(-)
diff --git a/tools/testing/selftests/bpf/network_helpers.c b/tools/testing/selftests/bpf/network_helpers.c
index f2f8f7388d7c..9878d8072e7f 100644
--- a/tools/testing/selftests/bpf/network_helpers.c
+++ b/tools/testing/selftests/bpf/network_helpers.c
@@ -506,3 +506,89 @@ int send_byte(int fd)
return -1;
return 0;
}
+
+struct send_recv_arg {
+ int fd;
+ uint32_t bytes;
+ int stop;
+};
+
+static void *send_recv_server(void *arg)
+{
+ 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(a->fd, NULL, NULL);
+ while (fd == -1) {
+ if (errno == EINTR)
+ continue;
+ err = -errno;
+ goto done;
+ }
+
+ if (settimeo(fd, 0)) {
+ err = -errno;
+ goto done;
+ }
+
+ while (bytes < a->bytes && !READ_ONCE(a->stop)) {
+ nr_sent = send(fd, &batch,
+ MIN(a->bytes - bytes, sizeof(batch)), 0);
+ if (nr_sent == -1 && errno == EINTR)
+ continue;
+ if (nr_sent == -1) {
+ err = -errno;
+ break;
+ }
+ bytes += nr_sent;
+ }
+
+ ASSERT_EQ(bytes, a->bytes, "send");
+
+done:
+ if (fd >= 0)
+ close(fd);
+ if (err) {
+ WRITE_ONCE(a->stop, 1);
+ return ERR_PTR(err);
+ }
+ return NULL;
+}
+
+void send_recv_data(int lfd, int fd, uint32_t total_bytes)
+{
+ ssize_t nr_recv = 0, bytes = 0;
+ struct send_recv_arg arg = {
+ .fd = lfd,
+ .bytes = total_bytes,
+ };
+ pthread_t srv_thread;
+ void *thread_ret;
+ char batch[1500];
+ int err;
+
+ WRITE_ONCE(arg.stop, 0);
+
+ err = pthread_create(&srv_thread, NULL, send_recv_server, (void *)&arg);
+ if (!ASSERT_OK(err, "pthread_create"))
+ return;
+
+ /* recv total_bytes */
+ 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)
+ continue;
+ if (nr_recv == -1)
+ break;
+ bytes += nr_recv;
+ }
+
+ ASSERT_EQ(bytes, total_bytes, "recv");
+
+ WRITE_ONCE(arg.stop, 1);
+ pthread_join(srv_thread, &thread_ret);
+ ASSERT_OK(IS_ERR(thread_ret), "thread_ret");
+}
diff --git a/tools/testing/selftests/bpf/network_helpers.h b/tools/testing/selftests/bpf/network_helpers.h
index d7ee2857093c..e66ed7b68c4d 100644
--- a/tools/testing/selftests/bpf/network_helpers.h
+++ b/tools/testing/selftests/bpf/network_helpers.h
@@ -72,6 +72,7 @@ struct nstoken;
struct nstoken *open_netns(const char *name);
void close_netns(struct nstoken *token);
int send_byte(int fd);
+void send_recv_data(int lfd, int fd, uint32_t total_bytes);
static __u16 csum_fold(__u32 csum)
{
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 a1f0a2b06489..3f822100c2b3 100644
--- a/tools/testing/selftests/bpf/prog_tests/bpf_tcp_ca.c
+++ b/tools/testing/selftests/bpf/prog_tests/bpf_tcp_ca.c
@@ -33,76 +33,15 @@ 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)
-{
- 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(a->fd, NULL, NULL);
- while (fd == -1) {
- if (errno == EINTR)
- continue;
- err = -errno;
- goto done;
- }
-
- if (settimeo(fd, 0)) {
- err = -errno;
- goto done;
- }
-
- while (bytes < a->bytes && !READ_ONCE(a->stop)) {
- nr_sent = send(fd, &batch,
- MIN(a->bytes - bytes, sizeof(batch)), 0);
- if (nr_sent == -1 && errno == EINTR)
- continue;
- if (nr_sent == -1) {
- err = -errno;
- break;
- }
- bytes += nr_sent;
- }
-
- ASSERT_EQ(bytes, a->bytes, "send");
-
-done:
- if (fd >= 0)
- close(fd);
- if (err) {
- WRITE_ONCE(a->stop, 1);
- return ERR_PTR(err);
- }
- return NULL;
-}
-
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,
- };
int lfd = -1, fd = -1;
- pthread_t srv_thread;
- void *thread_ret;
- char batch[1500];
int err;
- WRITE_ONCE(arg.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);
@@ -134,26 +73,7 @@ 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 *)&arg);
- if (!ASSERT_OK(err, "pthread_create"))
- goto done;
-
- /* recv total_bytes */
- 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)
- continue;
- if (nr_recv == -1)
- break;
- bytes += nr_recv;
- }
-
- ASSERT_EQ(bytes, total_bytes, "recv");
-
- WRITE_ONCE(arg.stop, 1);
- pthread_join(srv_thread, &thread_ret);
- ASSERT_OK(IS_ERR(thread_ret), "thread_ret");
+ send_recv_data(lfd, fd, total_bytes);
done:
close(lfd);
--
2.40.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH bpf-next 3/3] selftests/bpf: Export send_recv_data helper
2024-04-02 6:38 ` [PATCH bpf-next 3/3] selftests/bpf: Export send_recv_data helper Geliang Tang
@ 2024-04-04 5:54 ` Martin KaFai Lau
0 siblings, 0 replies; 6+ messages in thread
From: Martin KaFai Lau @ 2024-04-04 5:54 UTC (permalink / raw)
To: Geliang Tang
Cc: Geliang Tang, bpf, mptcp, Andrii Nakryiko, Eduard Zingerman,
Mykola Lysenko, Alexei Starovoitov, Daniel Borkmann, Song Liu,
Yonghong Song, John Fastabend, KP Singh, Stanislav Fomichev,
Hao Luo, Jiri Olsa, Shuah Khan
On 4/1/24 11:38 PM, Geliang Tang wrote:
> From: Geliang Tang <tanggeliang@kylinos.cn>
>
> This patch extracts the code to send and receive data into a new
> helper named send_recv_data() in network_helpers.c and export it
> in network_helpers.h.
>
> This helper will be used for MPTCP BPF selftests.
It is good to see the codes can be reused for the mptcp selftests.
What about the patches for the new mptcp tests? It is not included in this set
because it depends on other patches that have not been in the bpf-next yet? It
is not mentioned in the cover letter.
>
> Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
> ---
> tools/testing/selftests/bpf/network_helpers.c | 86 +++++++++++++++++++
> tools/testing/selftests/bpf/network_helpers.h | 1 +
> .../selftests/bpf/prog_tests/bpf_tcp_ca.c | 82 +-----------------
> 3 files changed, 88 insertions(+), 81 deletions(-)
>
> diff --git a/tools/testing/selftests/bpf/network_helpers.c b/tools/testing/selftests/bpf/network_helpers.c
> index f2f8f7388d7c..9878d8072e7f 100644
> --- a/tools/testing/selftests/bpf/network_helpers.c
> +++ b/tools/testing/selftests/bpf/network_helpers.c
> @@ -506,3 +506,89 @@ int send_byte(int fd)
> return -1;
> return 0;
> }
> +
> +struct send_recv_arg {
> + int fd;
> + uint32_t bytes;
> + int stop;
> +};
> +
> +static void *send_recv_server(void *arg)
> +{
> + 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(a->fd, NULL, NULL);
> + while (fd == -1) {
> + if (errno == EINTR)
> + continue;
> + err = -errno;
> + goto done;
> + }
> +
> + if (settimeo(fd, 0)) {
> + err = -errno;
> + goto done;
> + }
> +
> + while (bytes < a->bytes && !READ_ONCE(a->stop)) {
> + nr_sent = send(fd, &batch,
> + MIN(a->bytes - bytes, sizeof(batch)), 0);
> + if (nr_sent == -1 && errno == EINTR)
> + continue;
> + if (nr_sent == -1) {
> + err = -errno;
> + break;
> + }
> + bytes += nr_sent;
> + }
> +
> + ASSERT_EQ(bytes, a->bytes, "send");
> +
> +done:
> + if (fd >= 0)
> + close(fd);
> + if (err) {
> + WRITE_ONCE(a->stop, 1);
> + return ERR_PTR(err);
> + }
> + return NULL;
> +}
> +
> +void send_recv_data(int lfd, int fd, uint32_t total_bytes)
> +{
> + ssize_t nr_recv = 0, bytes = 0;
> + struct send_recv_arg arg = {
> + .fd = lfd,
> + .bytes = total_bytes,
> + };
> + pthread_t srv_thread;
> + void *thread_ret;
> + char batch[1500];
> + int err;
> +
> + WRITE_ONCE(arg.stop, 0);
nit. It is not needed now because stop is not a global variable which was reused
by multiple tests.
Anyway, it has a conflict with the bpf-next tree and requires a re-spin.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH bpf-next 1/3] selftests/bpf: Export send_byte helper
2024-04-02 6:38 ` [PATCH bpf-next 1/3] selftests/bpf: Export send_byte helper Geliang Tang
@ 2024-04-04 6:03 ` Martin KaFai Lau
0 siblings, 0 replies; 6+ messages in thread
From: Martin KaFai Lau @ 2024-04-04 6:03 UTC (permalink / raw)
To: Geliang Tang
Cc: Geliang Tang, bpf, mptcp, Andrii Nakryiko, Eduard Zingerman,
Mykola Lysenko, Alexei Starovoitov, Daniel Borkmann, Song Liu,
Yonghong Song, John Fastabend, KP Singh, Stanislav Fomichev,
Hao Luo, Jiri Olsa, Shuah Khan
On 4/1/24 11:38 PM, Geliang Tang wrote:
> From: Geliang Tang <tanggeliang@kylinos.cn>
>
> The helper send_byte is defined in mptcp.c, sk_lookup.c and tcp_rtt.c.
> It makes sense to export it into network_helpers.h to let it can be
> used for all BPF selftests.
>
> Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
> ---
> tools/testing/selftests/bpf/network_helpers.c | 9 +++++++++
> tools/testing/selftests/bpf/network_helpers.h | 1 +
> tools/testing/selftests/bpf/prog_tests/mptcp.c | 7 -------
> tools/testing/selftests/bpf/prog_tests/sk_lookup.c | 13 -------------
> tools/testing/selftests/bpf/prog_tests/tcp_rtt.c | 7 -------
> 5 files changed, 10 insertions(+), 27 deletions(-)
>
> diff --git a/tools/testing/selftests/bpf/network_helpers.c b/tools/testing/selftests/bpf/network_helpers.c
> index 6db27a9088e9..f2f8f7388d7c 100644
> --- a/tools/testing/selftests/bpf/network_helpers.c
> +++ b/tools/testing/selftests/bpf/network_helpers.c
> @@ -497,3 +497,12 @@ int get_socket_local_port(int sock_fd)
>
> return -1;
> }
> +
> +int send_byte(int fd)
> +{
> + char b = 0x55;
> +
> + if (!ASSERT_EQ(write(fd, &b, sizeof(b)), 1, "send single byte"))
> + return -1;
> + return 0;
> +}
I think it is overkill to have a dedicated helper that only does the error
checking on the single syscall send/write. I would drop this patch and directly
use the syscall send/write instead.
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2024-04-04 6:03 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-04-02 6:38 [PATCH bpf-next 0/3] export send_byte and send_recv_data Geliang Tang
2024-04-02 6:38 ` [PATCH bpf-next 1/3] selftests/bpf: Export send_byte helper Geliang Tang
2024-04-04 6:03 ` Martin KaFai Lau
2024-04-02 6:38 ` [PATCH bpf-next 2/3] selftests/bpf: Add struct send_recv_arg Geliang Tang
2024-04-02 6:38 ` [PATCH bpf-next 3/3] selftests/bpf: Export send_recv_data helper Geliang Tang
2024-04-04 5:54 ` Martin KaFai Lau
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox