vsock/test: add '--peer-port' input argument
authorArseniy Krasnov <avkrasnov@salutedevices.com>
Tue, 23 Jan 2024 07:27:50 +0000 (10:27 +0300)
committerJakub Kicinski <kuba@kernel.org>
Thu, 25 Jan 2024 01:47:35 +0000 (17:47 -0800)
Implement port for given CID as input argument instead of using
hardcoded value '1234'. This allows to run different test instances
on a single CID. Port argument is not required parameter and if it is
not set, then default value will be '1234' - thus we preserve previous
behaviour.

Signed-off-by: Arseniy Krasnov <avkrasnov@salutedevices.com>
Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Link: https://lore.kernel.org/r/20240123072750.4084181-1-avkrasnov@salutedevices.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
tools/testing/vsock/util.c
tools/testing/vsock/util.h
tools/testing/vsock/vsock_diag_test.c
tools/testing/vsock/vsock_test.c
tools/testing/vsock/vsock_test_zerocopy.c
tools/testing/vsock/vsock_uring_test.c

index ae2b33c21c452a7305bf4239aee33036327f8e8c..554b290fefdc244fb1ec5ec6cf7910eaf5f92aa6 100644 (file)
@@ -33,8 +33,7 @@ void init_signals(void)
        signal(SIGPIPE, SIG_IGN);
 }
 
-/* Parse a CID in string representation */
-unsigned int parse_cid(const char *str)
+static unsigned int parse_uint(const char *str, const char *err_str)
 {
        char *endptr = NULL;
        unsigned long n;
@@ -42,12 +41,24 @@ unsigned int parse_cid(const char *str)
        errno = 0;
        n = strtoul(str, &endptr, 10);
        if (errno || *endptr != '\0') {
-               fprintf(stderr, "malformed CID \"%s\"\n", str);
+               fprintf(stderr, "malformed %s \"%s\"\n", err_str, str);
                exit(EXIT_FAILURE);
        }
        return n;
 }
 
+/* Parse a CID in string representation */
+unsigned int parse_cid(const char *str)
+{
+       return parse_uint(str, "CID");
+}
+
+/* Parse a port in string representation */
+unsigned int parse_port(const char *str)
+{
+       return parse_uint(str, "port");
+}
+
 /* Wait for the remote to close the connection */
 void vsock_wait_remote_close(int fd)
 {
index 03c88d0cb8610b5d106379fe36a61c8734cd4f5f..e95e62485959eb4c6e2e268125adba9a082dabb8 100644 (file)
@@ -12,10 +12,13 @@ enum test_mode {
        TEST_MODE_SERVER
 };
 
+#define DEFAULT_PEER_PORT      1234
+
 /* Test runner options */
 struct test_opts {
        enum test_mode mode;
        unsigned int peer_cid;
+       unsigned int peer_port;
 };
 
 /* A test case definition.  Test functions must print failures to stderr and
@@ -35,6 +38,7 @@ struct test_case {
 
 void init_signals(void);
 unsigned int parse_cid(const char *str);
+unsigned int parse_port(const char *str);
 int vsock_stream_connect(unsigned int cid, unsigned int port);
 int vsock_bind_connect(unsigned int cid, unsigned int port,
                       unsigned int bind_port, int type);
index fa927ad16f8a227bf5677e16145f58598208e643..9d61b1f1c4c33427a7f7ad1c59f5e949361db25d 100644 (file)
@@ -342,7 +342,7 @@ static void test_listen_socket_server(const struct test_opts *opts)
        } addr = {
                .svm = {
                        .svm_family = AF_VSOCK,
-                       .svm_port = 1234,
+                       .svm_port = opts->peer_port,
                        .svm_cid = VMADDR_CID_ANY,
                },
        };
@@ -378,7 +378,7 @@ static void test_connect_client(const struct test_opts *opts)
        LIST_HEAD(sockets);
        struct vsock_stat *st;
 
-       fd = vsock_stream_connect(opts->peer_cid, 1234);
+       fd = vsock_stream_connect(opts->peer_cid, opts->peer_port);
        if (fd < 0) {
                perror("connect");
                exit(EXIT_FAILURE);
@@ -403,7 +403,7 @@ static void test_connect_server(const struct test_opts *opts)
        LIST_HEAD(sockets);
        int client_fd;
 
-       client_fd = vsock_stream_accept(VMADDR_CID_ANY, 1234, NULL);
+       client_fd = vsock_stream_accept(VMADDR_CID_ANY, opts->peer_port, NULL);
        if (client_fd < 0) {
                perror("accept");
                exit(EXIT_FAILURE);
@@ -461,6 +461,11 @@ static const struct option longopts[] = {
                .has_arg = required_argument,
                .val = 'p',
        },
+       {
+               .name = "peer-port",
+               .has_arg = required_argument,
+               .val = 'q',
+       },
        {
                .name = "list",
                .has_arg = no_argument,
@@ -481,7 +486,7 @@ static const struct option longopts[] = {
 
 static void usage(void)
 {
-       fprintf(stderr, "Usage: vsock_diag_test [--help] [--control-host=<host>] --control-port=<port> --mode=client|server --peer-cid=<cid> [--list] [--skip=<test_id>]\n"
+       fprintf(stderr, "Usage: vsock_diag_test [--help] [--control-host=<host>] --control-port=<port> --mode=client|server --peer-cid=<cid> [--peer-port=<port>] [--list] [--skip=<test_id>]\n"
                "\n"
                "  Server: vsock_diag_test --control-port=1234 --mode=server --peer-cid=3\n"
                "  Client: vsock_diag_test --control-host=192.168.0.1 --control-port=1234 --mode=client --peer-cid=2\n"
@@ -503,9 +508,11 @@ static void usage(void)
                "  --control-port <port>  Server port to listen on/connect to\n"
                "  --mode client|server   Server or client mode\n"
                "  --peer-cid <cid>       CID of the other side\n"
+               "  --peer-port <port>     AF_VSOCK port used for the test [default: %d]\n"
                "  --list                 List of tests that will be executed\n"
                "  --skip <test_id>       Test ID to skip;\n"
-               "                         use multiple --skip options to skip more tests\n"
+               "                         use multiple --skip options to skip more tests\n",
+               DEFAULT_PEER_PORT
                );
        exit(EXIT_FAILURE);
 }
@@ -517,6 +524,7 @@ int main(int argc, char **argv)
        struct test_opts opts = {
                .mode = TEST_MODE_UNSET,
                .peer_cid = VMADDR_CID_ANY,
+               .peer_port = DEFAULT_PEER_PORT,
        };
 
        init_signals();
@@ -544,6 +552,9 @@ int main(int argc, char **argv)
                case 'p':
                        opts.peer_cid = parse_cid(optarg);
                        break;
+               case 'q':
+                       opts.peer_port = parse_port(optarg);
+                       break;
                case 'P':
                        control_port = optarg;
                        break;
index 66246d81d65499cc46703df552c627bb082f573e..f851f8961247000d86a40919dbc5594cc01eb095 100644 (file)
@@ -34,7 +34,7 @@ static void test_stream_connection_reset(const struct test_opts *opts)
        } addr = {
                .svm = {
                        .svm_family = AF_VSOCK,
-                       .svm_port = 1234,
+                       .svm_port = opts->peer_port,
                        .svm_cid = opts->peer_cid,
                },
        };
@@ -70,7 +70,7 @@ static void test_stream_bind_only_client(const struct test_opts *opts)
        } addr = {
                .svm = {
                        .svm_family = AF_VSOCK,
-                       .svm_port = 1234,
+                       .svm_port = opts->peer_port,
                        .svm_cid = opts->peer_cid,
                },
        };
@@ -112,7 +112,7 @@ static void test_stream_bind_only_server(const struct test_opts *opts)
        } addr = {
                .svm = {
                        .svm_family = AF_VSOCK,
-                       .svm_port = 1234,
+                       .svm_port = opts->peer_port,
                        .svm_cid = VMADDR_CID_ANY,
                },
        };
@@ -138,7 +138,7 @@ static void test_stream_client_close_client(const struct test_opts *opts)
 {
        int fd;
 
-       fd = vsock_stream_connect(opts->peer_cid, 1234);
+       fd = vsock_stream_connect(opts->peer_cid, opts->peer_port);
        if (fd < 0) {
                perror("connect");
                exit(EXIT_FAILURE);
@@ -152,7 +152,7 @@ static void test_stream_client_close_server(const struct test_opts *opts)
 {
        int fd;
 
-       fd = vsock_stream_accept(VMADDR_CID_ANY, 1234, NULL);
+       fd = vsock_stream_accept(VMADDR_CID_ANY, opts->peer_port, NULL);
        if (fd < 0) {
                perror("accept");
                exit(EXIT_FAILURE);
@@ -173,7 +173,7 @@ static void test_stream_server_close_client(const struct test_opts *opts)
 {
        int fd;
 
-       fd = vsock_stream_connect(opts->peer_cid, 1234);
+       fd = vsock_stream_connect(opts->peer_cid, opts->peer_port);
        if (fd < 0) {
                perror("connect");
                exit(EXIT_FAILURE);
@@ -194,7 +194,7 @@ static void test_stream_server_close_server(const struct test_opts *opts)
 {
        int fd;
 
-       fd = vsock_stream_accept(VMADDR_CID_ANY, 1234, NULL);
+       fd = vsock_stream_accept(VMADDR_CID_ANY, opts->peer_port, NULL);
        if (fd < 0) {
                perror("accept");
                exit(EXIT_FAILURE);
@@ -215,7 +215,7 @@ static void test_stream_multiconn_client(const struct test_opts *opts)
        int i;
 
        for (i = 0; i < MULTICONN_NFDS; i++) {
-               fds[i] = vsock_stream_connect(opts->peer_cid, 1234);
+               fds[i] = vsock_stream_connect(opts->peer_cid, opts->peer_port);
                if (fds[i] < 0) {
                        perror("connect");
                        exit(EXIT_FAILURE);
@@ -239,7 +239,7 @@ static void test_stream_multiconn_server(const struct test_opts *opts)
        int i;
 
        for (i = 0; i < MULTICONN_NFDS; i++) {
-               fds[i] = vsock_stream_accept(VMADDR_CID_ANY, 1234, NULL);
+               fds[i] = vsock_stream_accept(VMADDR_CID_ANY, opts->peer_port, NULL);
                if (fds[i] < 0) {
                        perror("accept");
                        exit(EXIT_FAILURE);
@@ -267,9 +267,9 @@ static void test_msg_peek_client(const struct test_opts *opts,
        int i;
 
        if (seqpacket)
-               fd = vsock_seqpacket_connect(opts->peer_cid, 1234);
+               fd = vsock_seqpacket_connect(opts->peer_cid, opts->peer_port);
        else
-               fd = vsock_stream_connect(opts->peer_cid, 1234);
+               fd = vsock_stream_connect(opts->peer_cid, opts->peer_port);
 
        if (fd < 0) {
                perror("connect");
@@ -295,9 +295,9 @@ static void test_msg_peek_server(const struct test_opts *opts,
        int fd;
 
        if (seqpacket)
-               fd = vsock_seqpacket_accept(VMADDR_CID_ANY, 1234, NULL);
+               fd = vsock_seqpacket_accept(VMADDR_CID_ANY, opts->peer_port, NULL);
        else
-               fd = vsock_stream_accept(VMADDR_CID_ANY, 1234, NULL);
+               fd = vsock_stream_accept(VMADDR_CID_ANY, opts->peer_port, NULL);
 
        if (fd < 0) {
                perror("accept");
@@ -363,7 +363,7 @@ static void test_seqpacket_msg_bounds_client(const struct test_opts *opts)
        int msg_count;
        int fd;
 
-       fd = vsock_seqpacket_connect(opts->peer_cid, 1234);
+       fd = vsock_seqpacket_connect(opts->peer_cid, opts->peer_port);
        if (fd < 0) {
                perror("connect");
                exit(EXIT_FAILURE);
@@ -434,7 +434,7 @@ static void test_seqpacket_msg_bounds_server(const struct test_opts *opts)
        struct msghdr msg = {0};
        struct iovec iov = {0};
 
-       fd = vsock_seqpacket_accept(VMADDR_CID_ANY, 1234, NULL);
+       fd = vsock_seqpacket_accept(VMADDR_CID_ANY, opts->peer_port, NULL);
        if (fd < 0) {
                perror("accept");
                exit(EXIT_FAILURE);
@@ -505,7 +505,7 @@ static void test_seqpacket_msg_trunc_client(const struct test_opts *opts)
        int fd;
        char buf[MESSAGE_TRUNC_SZ];
 
-       fd = vsock_seqpacket_connect(opts->peer_cid, 1234);
+       fd = vsock_seqpacket_connect(opts->peer_cid, opts->peer_port);
        if (fd < 0) {
                perror("connect");
                exit(EXIT_FAILURE);
@@ -524,7 +524,7 @@ static void test_seqpacket_msg_trunc_server(const struct test_opts *opts)
        struct msghdr msg = {0};
        struct iovec iov = {0};
 
-       fd = vsock_seqpacket_accept(VMADDR_CID_ANY, 1234, NULL);
+       fd = vsock_seqpacket_accept(VMADDR_CID_ANY, opts->peer_port, NULL);
        if (fd < 0) {
                perror("accept");
                exit(EXIT_FAILURE);
@@ -575,7 +575,7 @@ static void test_seqpacket_timeout_client(const struct test_opts *opts)
        time_t read_enter_ns;
        time_t read_overhead_ns;
 
-       fd = vsock_seqpacket_connect(opts->peer_cid, 1234);
+       fd = vsock_seqpacket_connect(opts->peer_cid, opts->peer_port);
        if (fd < 0) {
                perror("connect");
                exit(EXIT_FAILURE);
@@ -620,7 +620,7 @@ static void test_seqpacket_timeout_server(const struct test_opts *opts)
 {
        int fd;
 
-       fd = vsock_seqpacket_accept(VMADDR_CID_ANY, 1234, NULL);
+       fd = vsock_seqpacket_accept(VMADDR_CID_ANY, opts->peer_port, NULL);
        if (fd < 0) {
                perror("accept");
                exit(EXIT_FAILURE);
@@ -639,7 +639,7 @@ static void test_seqpacket_bigmsg_client(const struct test_opts *opts)
 
        len = sizeof(sock_buf_size);
 
-       fd = vsock_seqpacket_connect(opts->peer_cid, 1234);
+       fd = vsock_seqpacket_connect(opts->peer_cid, opts->peer_port);
        if (fd < 0) {
                perror("connect");
                exit(EXIT_FAILURE);
@@ -671,7 +671,7 @@ static void test_seqpacket_bigmsg_server(const struct test_opts *opts)
 {
        int fd;
 
-       fd = vsock_seqpacket_accept(VMADDR_CID_ANY, 1234, NULL);
+       fd = vsock_seqpacket_accept(VMADDR_CID_ANY, opts->peer_port, NULL);
        if (fd < 0) {
                perror("accept");
                exit(EXIT_FAILURE);
@@ -692,7 +692,7 @@ static void test_seqpacket_invalid_rec_buffer_client(const struct test_opts *opt
        unsigned char *buf2;
        int buf_size = getpagesize() * 3;
 
-       fd = vsock_seqpacket_connect(opts->peer_cid, 1234);
+       fd = vsock_seqpacket_connect(opts->peer_cid, opts->peer_port);
        if (fd < 0) {
                perror("connect");
                exit(EXIT_FAILURE);
@@ -732,7 +732,7 @@ static void test_seqpacket_invalid_rec_buffer_server(const struct test_opts *opt
        int flags = MAP_PRIVATE | MAP_ANONYMOUS;
        int i;
 
-       fd = vsock_seqpacket_accept(VMADDR_CID_ANY, 1234, NULL);
+       fd = vsock_seqpacket_accept(VMADDR_CID_ANY, opts->peer_port, NULL);
        if (fd < 0) {
                perror("accept");
                exit(EXIT_FAILURE);
@@ -808,7 +808,7 @@ static void test_stream_poll_rcvlowat_server(const struct test_opts *opts)
        int fd;
        int i;
 
-       fd = vsock_stream_accept(VMADDR_CID_ANY, 1234, NULL);
+       fd = vsock_stream_accept(VMADDR_CID_ANY, opts->peer_port, NULL);
        if (fd < 0) {
                perror("accept");
                exit(EXIT_FAILURE);
@@ -839,7 +839,7 @@ static void test_stream_poll_rcvlowat_client(const struct test_opts *opts)
        short poll_flags;
        int fd;
 
-       fd = vsock_stream_connect(opts->peer_cid, 1234);
+       fd = vsock_stream_connect(opts->peer_cid, opts->peer_port);
        if (fd < 0) {
                perror("connect");
                exit(EXIT_FAILURE);
@@ -906,9 +906,9 @@ static void test_inv_buf_client(const struct test_opts *opts, bool stream)
        int fd;
 
        if (stream)
-               fd = vsock_stream_connect(opts->peer_cid, 1234);
+               fd = vsock_stream_connect(opts->peer_cid, opts->peer_port);
        else
-               fd = vsock_seqpacket_connect(opts->peer_cid, 1234);
+               fd = vsock_seqpacket_connect(opts->peer_cid, opts->peer_port);
 
        if (fd < 0) {
                perror("connect");
@@ -941,9 +941,9 @@ static void test_inv_buf_server(const struct test_opts *opts, bool stream)
        int fd;
 
        if (stream)
-               fd = vsock_stream_accept(VMADDR_CID_ANY, 1234, NULL);
+               fd = vsock_stream_accept(VMADDR_CID_ANY, opts->peer_port, NULL);
        else
-               fd = vsock_seqpacket_accept(VMADDR_CID_ANY, 1234, NULL);
+               fd = vsock_seqpacket_accept(VMADDR_CID_ANY, opts->peer_port, NULL);
 
        if (fd < 0) {
                perror("accept");
@@ -986,7 +986,7 @@ static void test_stream_virtio_skb_merge_client(const struct test_opts *opts)
 {
        int fd;
 
-       fd = vsock_stream_connect(opts->peer_cid, 1234);
+       fd = vsock_stream_connect(opts->peer_cid, opts->peer_port);
        if (fd < 0) {
                perror("connect");
                exit(EXIT_FAILURE);
@@ -1015,7 +1015,7 @@ static void test_stream_virtio_skb_merge_server(const struct test_opts *opts)
        unsigned char buf[64];
        int fd;
 
-       fd = vsock_stream_accept(VMADDR_CID_ANY, 1234, NULL);
+       fd = vsock_stream_accept(VMADDR_CID_ANY, opts->peer_port, NULL);
        if (fd < 0) {
                perror("accept");
                exit(EXIT_FAILURE);
@@ -1108,7 +1108,7 @@ static void test_stream_shutwr_client(const struct test_opts *opts)
 
        sigaction(SIGPIPE, &act, NULL);
 
-       fd = vsock_stream_connect(opts->peer_cid, 1234);
+       fd = vsock_stream_connect(opts->peer_cid, opts->peer_port);
        if (fd < 0) {
                perror("connect");
                exit(EXIT_FAILURE);
@@ -1130,7 +1130,7 @@ static void test_stream_shutwr_server(const struct test_opts *opts)
 {
        int fd;
 
-       fd = vsock_stream_accept(VMADDR_CID_ANY, 1234, NULL);
+       fd = vsock_stream_accept(VMADDR_CID_ANY, opts->peer_port, NULL);
        if (fd < 0) {
                perror("accept");
                exit(EXIT_FAILURE);
@@ -1151,7 +1151,7 @@ static void test_stream_shutrd_client(const struct test_opts *opts)
 
        sigaction(SIGPIPE, &act, NULL);
 
-       fd = vsock_stream_connect(opts->peer_cid, 1234);
+       fd = vsock_stream_connect(opts->peer_cid, opts->peer_port);
        if (fd < 0) {
                perror("connect");
                exit(EXIT_FAILURE);
@@ -1170,7 +1170,7 @@ static void test_stream_shutrd_server(const struct test_opts *opts)
 {
        int fd;
 
-       fd = vsock_stream_accept(VMADDR_CID_ANY, 1234, NULL);
+       fd = vsock_stream_accept(VMADDR_CID_ANY, opts->peer_port, NULL);
        if (fd < 0) {
                perror("accept");
                exit(EXIT_FAILURE);
@@ -1193,7 +1193,7 @@ static void test_double_bind_connect_server(const struct test_opts *opts)
        struct sockaddr_vm sa_client;
        socklen_t socklen_client = sizeof(sa_client);
 
-       listen_fd = vsock_stream_listen(VMADDR_CID_ANY, 1234);
+       listen_fd = vsock_stream_listen(VMADDR_CID_ANY, opts->peer_port);
 
        for (i = 0; i < 2; i++) {
                control_writeln("LISTENING");
@@ -1226,7 +1226,13 @@ static void test_double_bind_connect_client(const struct test_opts *opts)
                /* Wait until server is ready to accept a new connection */
                control_expectln("LISTENING");
 
-               client_fd = vsock_bind_connect(opts->peer_cid, 1234, 4321, SOCK_STREAM);
+               /* We use 'peer_port + 1' as "some" port for the 'bind()'
+                * call. It is safe for overflow, but must be considered,
+                * when running multiple test applications simultaneously
+                * where 'peer-port' argument differs by 1.
+                */
+               client_fd = vsock_bind_connect(opts->peer_cid, opts->peer_port,
+                                              opts->peer_port + 1, SOCK_STREAM);
 
                close(client_fd);
        }
@@ -1246,7 +1252,7 @@ static void test_stream_rcvlowat_def_cred_upd_client(const struct test_opts *opt
        void *buf;
        int fd;
 
-       fd = vsock_stream_connect(opts->peer_cid, 1234);
+       fd = vsock_stream_connect(opts->peer_cid, opts->peer_port);
        if (fd < 0) {
                perror("connect");
                exit(EXIT_FAILURE);
@@ -1282,7 +1288,7 @@ static void test_stream_credit_update_test(const struct test_opts *opts,
        void *buf;
        int fd;
 
-       fd = vsock_stream_accept(VMADDR_CID_ANY, 1234, NULL);
+       fd = vsock_stream_accept(VMADDR_CID_ANY, opts->peer_port, NULL);
        if (fd < 0) {
                perror("accept");
                exit(EXIT_FAILURE);
@@ -1542,6 +1548,11 @@ static const struct option longopts[] = {
                .has_arg = required_argument,
                .val = 'p',
        },
+       {
+               .name = "peer-port",
+               .has_arg = required_argument,
+               .val = 'q',
+       },
        {
                .name = "list",
                .has_arg = no_argument,
@@ -1562,7 +1573,7 @@ static const struct option longopts[] = {
 
 static void usage(void)
 {
-       fprintf(stderr, "Usage: vsock_test [--help] [--control-host=<host>] --control-port=<port> --mode=client|server --peer-cid=<cid> [--list] [--skip=<test_id>]\n"
+       fprintf(stderr, "Usage: vsock_test [--help] [--control-host=<host>] --control-port=<port> --mode=client|server --peer-cid=<cid> [--peer-port=<port>] [--list] [--skip=<test_id>]\n"
                "\n"
                "  Server: vsock_test --control-port=1234 --mode=server --peer-cid=3\n"
                "  Client: vsock_test --control-host=192.168.0.1 --control-port=1234 --mode=client --peer-cid=2\n"
@@ -1577,6 +1588,9 @@ static void usage(void)
                "connect to.\n"
                "\n"
                "The CID of the other side must be given with --peer-cid=<cid>.\n"
+               "During the test, two AF_VSOCK ports will be used: the port\n"
+               "specified with --peer-port=<port> (or the default port)\n"
+               "and the next one.\n"
                "\n"
                "Options:\n"
                "  --help                 This help message\n"
@@ -1584,9 +1598,11 @@ static void usage(void)
                "  --control-port <port>  Server port to listen on/connect to\n"
                "  --mode client|server   Server or client mode\n"
                "  --peer-cid <cid>       CID of the other side\n"
+               "  --peer-port <port>     AF_VSOCK port used for the test [default: %d]\n"
                "  --list                 List of tests that will be executed\n"
                "  --skip <test_id>       Test ID to skip;\n"
-               "                         use multiple --skip options to skip more tests\n"
+               "                         use multiple --skip options to skip more tests\n",
+               DEFAULT_PEER_PORT
                );
        exit(EXIT_FAILURE);
 }
@@ -1598,6 +1614,7 @@ int main(int argc, char **argv)
        struct test_opts opts = {
                .mode = TEST_MODE_UNSET,
                .peer_cid = VMADDR_CID_ANY,
+               .peer_port = DEFAULT_PEER_PORT,
        };
 
        srand(time(NULL));
@@ -1626,6 +1643,9 @@ int main(int argc, char **argv)
                case 'p':
                        opts.peer_cid = parse_cid(optarg);
                        break;
+               case 'q':
+                       opts.peer_port = parse_port(optarg);
+                       break;
                case 'P':
                        control_port = optarg;
                        break;
index a16ff76484e6294871895d45fb876bbd681399df..04c376b6937f51bea284bbb3fed25eb61166297c 100644 (file)
@@ -152,9 +152,9 @@ static void test_client(const struct test_opts *opts,
        int fd;
 
        if (sock_seqpacket)
-               fd = vsock_seqpacket_connect(opts->peer_cid, 1234);
+               fd = vsock_seqpacket_connect(opts->peer_cid, opts->peer_port);
        else
-               fd = vsock_stream_connect(opts->peer_cid, 1234);
+               fd = vsock_stream_connect(opts->peer_cid, opts->peer_port);
 
        if (fd < 0) {
                perror("connect");
@@ -248,9 +248,9 @@ static void test_server(const struct test_opts *opts,
        int fd;
 
        if (sock_seqpacket)
-               fd = vsock_seqpacket_accept(VMADDR_CID_ANY, 1234, NULL);
+               fd = vsock_seqpacket_accept(VMADDR_CID_ANY, opts->peer_port, NULL);
        else
-               fd = vsock_stream_accept(VMADDR_CID_ANY, 1234, NULL);
+               fd = vsock_stream_accept(VMADDR_CID_ANY, opts->peer_port, NULL);
 
        if (fd < 0) {
                perror("accept");
@@ -323,7 +323,7 @@ void test_stream_msgzcopy_empty_errq_client(const struct test_opts *opts)
        ssize_t res;
        int fd;
 
-       fd = vsock_stream_connect(opts->peer_cid, 1234);
+       fd = vsock_stream_connect(opts->peer_cid, opts->peer_port);
        if (fd < 0) {
                perror("connect");
                exit(EXIT_FAILURE);
@@ -347,7 +347,7 @@ void test_stream_msgzcopy_empty_errq_server(const struct test_opts *opts)
 {
        int fd;
 
-       fd = vsock_stream_accept(VMADDR_CID_ANY, 1234, NULL);
+       fd = vsock_stream_accept(VMADDR_CID_ANY, opts->peer_port, NULL);
        if (fd < 0) {
                perror("accept");
                exit(EXIT_FAILURE);
index d976d35f0ba9125054cce68a4017204f40de2c0b..6c3e6f70c457da2ab6c0b993e90e1a5b4f8ac439 100644 (file)
@@ -66,7 +66,7 @@ static void vsock_io_uring_client(const struct test_opts *opts,
        struct msghdr msg;
        int fd;
 
-       fd = vsock_stream_connect(opts->peer_cid, 1234);
+       fd = vsock_stream_connect(opts->peer_cid, opts->peer_port);
        if (fd < 0) {
                perror("connect");
                exit(EXIT_FAILURE);
@@ -120,7 +120,7 @@ static void vsock_io_uring_server(const struct test_opts *opts,
        void *data;
        int fd;
 
-       fd = vsock_stream_accept(VMADDR_CID_ANY, 1234, NULL);
+       fd = vsock_stream_accept(VMADDR_CID_ANY, opts->peer_port, NULL);
        if (fd < 0) {
                perror("accept");
                exit(EXIT_FAILURE);
@@ -247,6 +247,11 @@ static const struct option longopts[] = {
                .has_arg = required_argument,
                .val = 'p',
        },
+       {
+               .name = "peer-port",
+               .has_arg = required_argument,
+               .val = 'q',
+       },
        {
                .name = "help",
                .has_arg = no_argument,
@@ -257,7 +262,7 @@ static const struct option longopts[] = {
 
 static void usage(void)
 {
-       fprintf(stderr, "Usage: vsock_uring_test [--help] [--control-host=<host>] --control-port=<port> --mode=client|server --peer-cid=<cid>\n"
+       fprintf(stderr, "Usage: vsock_uring_test [--help] [--control-host=<host>] --control-port=<port> --mode=client|server --peer-cid=<cid> [--peer-port=<port>]\n"
                "\n"
                "  Server: vsock_uring_test --control-port=1234 --mode=server --peer-cid=3\n"
                "  Client: vsock_uring_test --control-host=192.168.0.1 --control-port=1234 --mode=client --peer-cid=2\n"
@@ -271,6 +276,8 @@ static void usage(void)
                "  --control-port <port>  Server port to listen on/connect to\n"
                "  --mode client|server   Server or client mode\n"
                "  --peer-cid <cid>       CID of the other side\n"
+               "  --peer-port <port>     AF_VSOCK port used for the test [default: %d]\n",
+               DEFAULT_PEER_PORT
                );
        exit(EXIT_FAILURE);
 }
@@ -282,6 +289,7 @@ int main(int argc, char **argv)
        struct test_opts opts = {
                .mode = TEST_MODE_UNSET,
                .peer_cid = VMADDR_CID_ANY,
+               .peer_port = DEFAULT_PEER_PORT,
        };
 
        init_signals();
@@ -309,6 +317,9 @@ int main(int argc, char **argv)
                case 'p':
                        opts.peer_cid = parse_cid(optarg);
                        break;
+               case 'q':
+                       opts.peer_port = parse_port(optarg);
+                       break;
                case 'P':
                        control_port = optarg;
                        break;