From: Martin KaFai Lau <martin.lau@linux.dev>
To: Geliang Tang <geliang@kernel.org>
Cc: bpf@vger.kernel.org, mptcp@lists.linux.dev,
linux-kselftest@vger.kernel.org,
Andrii Nakryiko <andrii@kernel.org>,
Eduard Zingerman <eddyz87@gmail.com>,
Mykola Lysenko <mykolal@fb.com>,
Alexei Starovoitov <ast@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
Song Liu <song@kernel.org>,
Yonghong Song <yonghong.song@linux.dev>,
John Fastabend <john.fastabend@gmail.com>,
KP Singh <kpsingh@kernel.org>,
Stanislav Fomichev <sdf@google.com>, Hao Luo <haoluo@google.com>,
Jiri Olsa <jolsa@kernel.org>, Shuah Khan <shuah@kernel.org>
Subject: Re: [PATCH bpf-next v2 2/2] selftests/bpf: Export send_recv_data helper
Date: Mon, 8 Apr 2024 21:52:59 -0700 [thread overview]
Message-ID: <4758d992-d57d-4bd9-bd72-b4be992ac08f@linux.dev> (raw)
In-Reply-To: <77aac1cb0234ec0b0f7a15bf0a2212789e6b63c2.camel@kernel.org>
On 4/8/24 8:51 PM, Geliang Tang wrote:
>> +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,
>> + .stop = 0,
>> + };
>> + pthread_t srv_thread;
>> + void *thread_ret;
>> + char batch[1500];
>> + int err;
>> +
>> + 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");
> I think we should avoid using ASSERT_* in network_helpers.c, but I'm
> not sure. What do you think?
There is log_err which is used by other helpers in network_helpers.c. May be use
log_err instead and return int instead of void here. The caller can decide if it
expects error or not and uses ASSERT accordingly.
pw-bot: cr
prev parent reply other threads:[~2024-04-09 4:53 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-08 3:45 [PATCH bpf-next v2 0/2] export send_byte and send_recv_data Geliang Tang
2024-04-08 3:45 ` [PATCH bpf-next v2 1/2] selftests/bpf: Add struct send_recv_arg Geliang Tang
2024-04-08 3:45 ` [PATCH bpf-next v2 2/2] selftests/bpf: Export send_recv_data helper Geliang Tang
2024-04-09 3:51 ` Geliang Tang
2024-04-09 4:52 ` Martin KaFai Lau [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4758d992-d57d-4bd9-bd72-b4be992ac08f@linux.dev \
--to=martin.lau@linux.dev \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=eddyz87@gmail.com \
--cc=geliang@kernel.org \
--cc=haoluo@google.com \
--cc=john.fastabend@gmail.com \
--cc=jolsa@kernel.org \
--cc=kpsingh@kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=mptcp@lists.linux.dev \
--cc=mykolal@fb.com \
--cc=sdf@google.com \
--cc=shuah@kernel.org \
--cc=song@kernel.org \
--cc=yonghong.song@linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.