Message ID | 20230725172912.1659970-5-AVKrasnov@sberdevices.ru (mailing list archive) |
---|---|
State | Accepted |
Commit | 8a0697f23e5a6e03a31f9dfb96755521aa9b9fc1 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | virtio/vsock: some updates for MSG_PEEK flag | expand |
Context | Check | Description |
---|---|---|
netdev/series_format | success | Posting correctly formatted |
netdev/tree_selection | success | Clearly marked for net-next |
netdev/fixes_present | success | Fixes tag not required for -next series |
netdev/header_inline | success | No static functions without inline keyword in header files |
netdev/build_32bit | success | Errors and warnings before: 9 this patch: 9 |
netdev/cc_maintainers | success | CCed 3 of 3 maintainers |
netdev/build_clang | success | Errors and warnings before: 9 this patch: 9 |
netdev/verify_signedoff | success | Signed-off-by tag matches author and committer |
netdev/deprecated_api | success | None detected |
netdev/check_selftest | success | No net selftest shell script |
netdev/verify_fixes | success | No Fixes tag |
netdev/build_allmodconfig_warn | success | Errors and warnings before: 9 this patch: 9 |
netdev/checkpatch | success | total: 0 errors, 0 warnings, 0 checks, 106 lines checked |
netdev/kdoc | success | Errors and warnings before: 0 this patch: 0 |
netdev/source_inline | success | Was 0 now: 0 |
On Tue, Jul 25, 2023 at 08:29:12PM +0300, Arseniy Krasnov wrote: >This adds MSG_PEEK test for SOCK_SEQPACKET. It works in the same way as >SOCK_STREAM test, except it also tests MSG_TRUNC flag. > >Signed-off-by: Arseniy Krasnov <AVKrasnov@sberdevices.ru> >--- > tools/testing/vsock/vsock_test.c | 58 +++++++++++++++++++++++++++++--- > 1 file changed, 54 insertions(+), 4 deletions(-) Reviewed-by: Stefano Garzarella <sgarzare@redhat.com> Thanks, Stefano > >diff --git a/tools/testing/vsock/vsock_test.c b/tools/testing/vsock/vsock_test.c >index 444a3ff0681f..90718c2fd4ea 100644 >--- a/tools/testing/vsock/vsock_test.c >+++ b/tools/testing/vsock/vsock_test.c >@@ -257,14 +257,19 @@ static void test_stream_multiconn_server(const struct test_opts *opts) > > #define MSG_PEEK_BUF_LEN 64 > >-static void test_stream_msg_peek_client(const struct test_opts *opts) >+static void test_msg_peek_client(const struct test_opts *opts, >+ bool seqpacket) > { > unsigned char buf[MSG_PEEK_BUF_LEN]; > ssize_t send_size; > int fd; > int i; > >- fd = vsock_stream_connect(opts->peer_cid, 1234); >+ if (seqpacket) >+ fd = vsock_seqpacket_connect(opts->peer_cid, 1234); >+ else >+ fd = vsock_stream_connect(opts->peer_cid, 1234); >+ > if (fd < 0) { > perror("connect"); > exit(EXIT_FAILURE); >@@ -290,7 +295,8 @@ static void test_stream_msg_peek_client(const struct test_opts *opts) > close(fd); > } > >-static void test_stream_msg_peek_server(const struct test_opts *opts) >+static void test_msg_peek_server(const struct test_opts *opts, >+ bool seqpacket) > { > unsigned char buf_half[MSG_PEEK_BUF_LEN / 2]; > unsigned char buf_normal[MSG_PEEK_BUF_LEN]; >@@ -298,7 +304,11 @@ static void test_stream_msg_peek_server(const struct test_opts *opts) > ssize_t res; > int fd; > >- fd = vsock_stream_accept(VMADDR_CID_ANY, 1234, NULL); >+ if (seqpacket) >+ fd = vsock_seqpacket_accept(VMADDR_CID_ANY, 1234, NULL); >+ else >+ fd = vsock_stream_accept(VMADDR_CID_ANY, 1234, NULL); >+ > if (fd < 0) { > perror("accept"); > exit(EXIT_FAILURE); >@@ -340,6 +350,21 @@ static void test_stream_msg_peek_server(const struct test_opts *opts) > exit(EXIT_FAILURE); > } > >+ if (seqpacket) { >+ /* This type of socket supports MSG_TRUNC flag, >+ * so check it with MSG_PEEK. We must get length >+ * of the message. >+ */ >+ res = recv(fd, buf_half, sizeof(buf_half), MSG_PEEK | >+ MSG_TRUNC); >+ if (res != sizeof(buf_peek)) { >+ fprintf(stderr, >+ "recv(2) + MSG_PEEK | MSG_TRUNC, exp %zu, got %zi\n", >+ sizeof(buf_half), res); >+ exit(EXIT_FAILURE); >+ } >+ } >+ > res = recv(fd, buf_normal, sizeof(buf_normal), 0); > if (res != sizeof(buf_normal)) { > fprintf(stderr, "recv(2), expected %zu, got %zi\n", >@@ -356,6 +381,16 @@ static void test_stream_msg_peek_server(const struct test_opts *opts) > close(fd); > } > >+static void test_stream_msg_peek_client(const struct test_opts *opts) >+{ >+ return test_msg_peek_client(opts, false); >+} >+ >+static void test_stream_msg_peek_server(const struct test_opts *opts) >+{ >+ return test_msg_peek_server(opts, false); >+} >+ > #define SOCK_BUF_SIZE (2 * 1024 * 1024) > #define MAX_MSG_SIZE (32 * 1024) > >@@ -1125,6 +1160,16 @@ static void test_stream_virtio_skb_merge_server(const struct test_opts *opts) > close(fd); > } > >+static void test_seqpacket_msg_peek_client(const struct test_opts *opts) >+{ >+ return test_msg_peek_client(opts, true); >+} >+ >+static void test_seqpacket_msg_peek_server(const struct test_opts *opts) >+{ >+ return test_msg_peek_server(opts, true); >+} >+ > static struct test_case test_cases[] = { > { > .name = "SOCK_STREAM connection reset", >@@ -1200,6 +1245,11 @@ static struct test_case test_cases[] = { > .run_client = test_stream_virtio_skb_merge_client, > .run_server = test_stream_virtio_skb_merge_server, > }, >+ { >+ .name = "SOCK_SEQPACKET MSG_PEEK", >+ .run_client = test_seqpacket_msg_peek_client, >+ .run_server = test_seqpacket_msg_peek_server, >+ }, > {}, > }; > >-- >2.25.1 >
diff --git a/tools/testing/vsock/vsock_test.c b/tools/testing/vsock/vsock_test.c index 444a3ff0681f..90718c2fd4ea 100644 --- a/tools/testing/vsock/vsock_test.c +++ b/tools/testing/vsock/vsock_test.c @@ -257,14 +257,19 @@ static void test_stream_multiconn_server(const struct test_opts *opts) #define MSG_PEEK_BUF_LEN 64 -static void test_stream_msg_peek_client(const struct test_opts *opts) +static void test_msg_peek_client(const struct test_opts *opts, + bool seqpacket) { unsigned char buf[MSG_PEEK_BUF_LEN]; ssize_t send_size; int fd; int i; - fd = vsock_stream_connect(opts->peer_cid, 1234); + if (seqpacket) + fd = vsock_seqpacket_connect(opts->peer_cid, 1234); + else + fd = vsock_stream_connect(opts->peer_cid, 1234); + if (fd < 0) { perror("connect"); exit(EXIT_FAILURE); @@ -290,7 +295,8 @@ static void test_stream_msg_peek_client(const struct test_opts *opts) close(fd); } -static void test_stream_msg_peek_server(const struct test_opts *opts) +static void test_msg_peek_server(const struct test_opts *opts, + bool seqpacket) { unsigned char buf_half[MSG_PEEK_BUF_LEN / 2]; unsigned char buf_normal[MSG_PEEK_BUF_LEN]; @@ -298,7 +304,11 @@ static void test_stream_msg_peek_server(const struct test_opts *opts) ssize_t res; int fd; - fd = vsock_stream_accept(VMADDR_CID_ANY, 1234, NULL); + if (seqpacket) + fd = vsock_seqpacket_accept(VMADDR_CID_ANY, 1234, NULL); + else + fd = vsock_stream_accept(VMADDR_CID_ANY, 1234, NULL); + if (fd < 0) { perror("accept"); exit(EXIT_FAILURE); @@ -340,6 +350,21 @@ static void test_stream_msg_peek_server(const struct test_opts *opts) exit(EXIT_FAILURE); } + if (seqpacket) { + /* This type of socket supports MSG_TRUNC flag, + * so check it with MSG_PEEK. We must get length + * of the message. + */ + res = recv(fd, buf_half, sizeof(buf_half), MSG_PEEK | + MSG_TRUNC); + if (res != sizeof(buf_peek)) { + fprintf(stderr, + "recv(2) + MSG_PEEK | MSG_TRUNC, exp %zu, got %zi\n", + sizeof(buf_half), res); + exit(EXIT_FAILURE); + } + } + res = recv(fd, buf_normal, sizeof(buf_normal), 0); if (res != sizeof(buf_normal)) { fprintf(stderr, "recv(2), expected %zu, got %zi\n", @@ -356,6 +381,16 @@ static void test_stream_msg_peek_server(const struct test_opts *opts) close(fd); } +static void test_stream_msg_peek_client(const struct test_opts *opts) +{ + return test_msg_peek_client(opts, false); +} + +static void test_stream_msg_peek_server(const struct test_opts *opts) +{ + return test_msg_peek_server(opts, false); +} + #define SOCK_BUF_SIZE (2 * 1024 * 1024) #define MAX_MSG_SIZE (32 * 1024) @@ -1125,6 +1160,16 @@ static void test_stream_virtio_skb_merge_server(const struct test_opts *opts) close(fd); } +static void test_seqpacket_msg_peek_client(const struct test_opts *opts) +{ + return test_msg_peek_client(opts, true); +} + +static void test_seqpacket_msg_peek_server(const struct test_opts *opts) +{ + return test_msg_peek_server(opts, true); +} + static struct test_case test_cases[] = { { .name = "SOCK_STREAM connection reset", @@ -1200,6 +1245,11 @@ static struct test_case test_cases[] = { .run_client = test_stream_virtio_skb_merge_client, .run_server = test_stream_virtio_skb_merge_server, }, + { + .name = "SOCK_SEQPACKET MSG_PEEK", + .run_client = test_seqpacket_msg_peek_client, + .run_server = test_seqpacket_msg_peek_server, + }, {}, };
This adds MSG_PEEK test for SOCK_SEQPACKET. It works in the same way as SOCK_STREAM test, except it also tests MSG_TRUNC flag. Signed-off-by: Arseniy Krasnov <AVKrasnov@sberdevices.ru> --- tools/testing/vsock/vsock_test.c | 58 +++++++++++++++++++++++++++++--- 1 file changed, 54 insertions(+), 4 deletions(-)