From: John Fastabend <john.fastabend@gmail.com>
To: netdev@vger.kernel.org, jakub@cloudflare.com
Cc: john.fastabend@gmail.com, bpf@vger.kernel.org
Subject: [PATCH bpf-next 4/4] bpf: sockmap test cork and pop combined
Date: Tue, 23 Jan 2024 14:36:12 -0800 [thread overview]
Message-ID: <20240123223612.1015788-5-john.fastabend@gmail.com> (raw)
In-Reply-To: <20240123223612.1015788-1-john.fastabend@gmail.com>
Its possible to cork data for some N bytes and then pop
a some bytes off that scatterlist. Test combining cork
and pop here.
Signed-off-by: John Fastabend <john.fastabend@gmail.com>
---
.../bpf/prog_tests/sockmap_msg_helpers.c | 19 ++++++++++++++-----
.../bpf/progs/test_sockmap_msg_helpers.c | 14 +++++++++++++-
2 files changed, 27 insertions(+), 6 deletions(-)
diff --git a/tools/testing/selftests/bpf/prog_tests/sockmap_msg_helpers.c b/tools/testing/selftests/bpf/prog_tests/sockmap_msg_helpers.c
index a05000b07891..cf38d6bb3f94 100644
--- a/tools/testing/selftests/bpf/prog_tests/sockmap_msg_helpers.c
+++ b/tools/testing/selftests/bpf/prog_tests/sockmap_msg_helpers.c
@@ -21,7 +21,7 @@ struct msg_test_opts {
#define POP_END -1
-static void cork_send(struct msg_test_opts *opts, int cork)
+static void cork_send(struct msg_test_opts *opts, int cork, int start, int len)
{
struct test_sockmap_msg_helpers *skel = opts->skel;
char buf[] = "abcdefghijklmnopqrstuvwxyz";
@@ -29,9 +29,12 @@ static void cork_send(struct msg_test_opts *opts, int cork)
char *recvbuf;
int i;
- skel->bss->pop = false;
+ skel->bss->pop = !!len;
skel->bss->cork = cork;
+ skel->bss->pop_start = start;
+ skel->bss->pop_len = len;
+
/* Send N bytes in 27B chunks */
for (i = 0; i < cork / sizeof(buf); i++) {
sent = xsend(opts->client, buf, sizeof(buf), 0);
@@ -48,7 +51,7 @@ static void cork_send(struct msg_test_opts *opts, int cork)
ASSERT_EQ(skel->bss->size, cork, "cork did not receive all bytes");
recv = xrecv_nonblock(opts->server, recvbuf, total, 0);
- if (recv != total)
+ if (recv != total - len)
FAIL("Received incorrect number of bytes");
free(recvbuf);
@@ -88,9 +91,15 @@ static void test_sockmap_cork()
opts.skel = skel;
/* Small cork */
- cork_send(&opts, 54);
+ cork_send(&opts, 54, 0, 0);
/* Full cork */
- cork_send(&opts, 270);
+ cork_send(&opts, 270, 0, 0);
+
+ /* Combine cork and pop small */
+ cork_send(&opts, 54, 0, 10);
+ /* Full cork and pop */
+ cork_send(&opts, 270, 200, 50);
+
close_sockets:
close(client);
close(server);
diff --git a/tools/testing/selftests/bpf/progs/test_sockmap_msg_helpers.c b/tools/testing/selftests/bpf/progs/test_sockmap_msg_helpers.c
index 9622f154d016..4c7e70367e35 100644
--- a/tools/testing/selftests/bpf/progs/test_sockmap_msg_helpers.c
+++ b/tools/testing/selftests/bpf/progs/test_sockmap_msg_helpers.c
@@ -37,8 +37,19 @@ int msg_helpers(struct sk_msg_md *msg)
{
size = msg->size;
- if (cork)
+ /* If message is not yet fully cork'ed skip push, pull, pop */
+ if (cork && cork > msg->size) {
err = bpf_msg_cork_bytes(msg, cork);
+ goto out;
+ } else if (cork) {
+ /* If we previously corked the msg we need to clear the cork
+ * otherwise next pop would cause datapath to wait for the
+ * popped bytes to actually do the send.
+ */
+ err = bpf_msg_cork_bytes(msg, 0);
+ if (err)
+ goto out;
+ }
if (pull)
err = bpf_msg_pull_data(msg, pull_start, pull_end, 0);
@@ -49,6 +60,7 @@ int msg_helpers(struct sk_msg_md *msg)
if (pop)
err = bpf_msg_pop_data(msg, pop_start, pop_len, 0);
+out:
return SK_PASS;
}
--
2.33.0
next prev parent reply other threads:[~2024-01-23 22:36 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-23 22:36 [PATCH bpf-next 0/4] transition sockmap testing to test_progs John Fastabend
2024-01-23 22:36 ` [PATCH bpf-next 1/4] bpf: sockmap, add test for sk_msg prog pop msg helper John Fastabend
2024-01-23 22:36 ` [PATCH bpf-next 2/4] bpf: sockmap, add a sendmsg test so we can check that path John Fastabend
2024-01-23 22:36 ` [PATCH bpf-next 3/4] bpf: sockmap, add a cork to force buffering of the scatterlist John Fastabend
2024-01-23 22:36 ` John Fastabend [this message]
2024-01-24 2:35 ` [PATCH bpf-next 0/4] transition sockmap testing to test_progs John Fastabend
2024-01-24 17:45 ` Andrii Nakryiko
2024-01-24 17:52 ` John Fastabend
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=20240123223612.1015788-5-john.fastabend@gmail.com \
--to=john.fastabend@gmail.com \
--cc=bpf@vger.kernel.org \
--cc=jakub@cloudflare.com \
--cc=netdev@vger.kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).