Commit e18c7092 authored by Arseniy Krasnov's avatar Arseniy Krasnov Committed by Jakub Kicinski

vsock/test: add '--peer-port' input argument

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: default avatarArseniy Krasnov <avkrasnov@salutedevices.com>
Reviewed-by: default avatarStefano Garzarella <sgarzare@redhat.com>
Acked-by: default avatarMichael S. Tsirkin <mst@redhat.com>
Link: https://lore.kernel.org/r/20240123072750.4084181-1-avkrasnov@salutedevices.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 16c595a5
...@@ -33,8 +33,7 @@ void init_signals(void) ...@@ -33,8 +33,7 @@ void init_signals(void)
signal(SIGPIPE, SIG_IGN); signal(SIGPIPE, SIG_IGN);
} }
/* Parse a CID in string representation */ static unsigned int parse_uint(const char *str, const char *err_str)
unsigned int parse_cid(const char *str)
{ {
char *endptr = NULL; char *endptr = NULL;
unsigned long n; unsigned long n;
...@@ -42,12 +41,24 @@ unsigned int parse_cid(const char *str) ...@@ -42,12 +41,24 @@ unsigned int parse_cid(const char *str)
errno = 0; errno = 0;
n = strtoul(str, &endptr, 10); n = strtoul(str, &endptr, 10);
if (errno || *endptr != '\0') { if (errno || *endptr != '\0') {
fprintf(stderr, "malformed CID \"%s\"\n", str); fprintf(stderr, "malformed %s \"%s\"\n", err_str, str);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
return n; 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 */ /* Wait for the remote to close the connection */
void vsock_wait_remote_close(int fd) void vsock_wait_remote_close(int fd)
{ {
......
...@@ -12,10 +12,13 @@ enum test_mode { ...@@ -12,10 +12,13 @@ enum test_mode {
TEST_MODE_SERVER TEST_MODE_SERVER
}; };
#define DEFAULT_PEER_PORT 1234
/* Test runner options */ /* Test runner options */
struct test_opts { struct test_opts {
enum test_mode mode; enum test_mode mode;
unsigned int peer_cid; unsigned int peer_cid;
unsigned int peer_port;
}; };
/* A test case definition. Test functions must print failures to stderr and /* A test case definition. Test functions must print failures to stderr and
...@@ -35,6 +38,7 @@ struct test_case { ...@@ -35,6 +38,7 @@ struct test_case {
void init_signals(void); void init_signals(void);
unsigned int parse_cid(const char *str); 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_stream_connect(unsigned int cid, unsigned int port);
int vsock_bind_connect(unsigned int cid, unsigned int port, int vsock_bind_connect(unsigned int cid, unsigned int port,
unsigned int bind_port, int type); unsigned int bind_port, int type);
......
...@@ -342,7 +342,7 @@ static void test_listen_socket_server(const struct test_opts *opts) ...@@ -342,7 +342,7 @@ static void test_listen_socket_server(const struct test_opts *opts)
} addr = { } addr = {
.svm = { .svm = {
.svm_family = AF_VSOCK, .svm_family = AF_VSOCK,
.svm_port = 1234, .svm_port = opts->peer_port,
.svm_cid = VMADDR_CID_ANY, .svm_cid = VMADDR_CID_ANY,
}, },
}; };
...@@ -378,7 +378,7 @@ static void test_connect_client(const struct test_opts *opts) ...@@ -378,7 +378,7 @@ static void test_connect_client(const struct test_opts *opts)
LIST_HEAD(sockets); LIST_HEAD(sockets);
struct vsock_stat *st; 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) { if (fd < 0) {
perror("connect"); perror("connect");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
...@@ -403,7 +403,7 @@ static void test_connect_server(const struct test_opts *opts) ...@@ -403,7 +403,7 @@ static void test_connect_server(const struct test_opts *opts)
LIST_HEAD(sockets); LIST_HEAD(sockets);
int client_fd; 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) { if (client_fd < 0) {
perror("accept"); perror("accept");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
...@@ -461,6 +461,11 @@ static const struct option longopts[] = { ...@@ -461,6 +461,11 @@ static const struct option longopts[] = {
.has_arg = required_argument, .has_arg = required_argument,
.val = 'p', .val = 'p',
}, },
{
.name = "peer-port",
.has_arg = required_argument,
.val = 'q',
},
{ {
.name = "list", .name = "list",
.has_arg = no_argument, .has_arg = no_argument,
...@@ -481,7 +486,7 @@ static const struct option longopts[] = { ...@@ -481,7 +486,7 @@ static const struct option longopts[] = {
static void usage(void) 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" "\n"
" Server: vsock_diag_test --control-port=1234 --mode=server --peer-cid=3\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" " 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) ...@@ -503,9 +508,11 @@ static void usage(void)
" --control-port <port> Server port to listen on/connect to\n" " --control-port <port> Server port to listen on/connect to\n"
" --mode client|server Server or client mode\n" " --mode client|server Server or client mode\n"
" --peer-cid <cid> CID of the other side\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" " --list List of tests that will be executed\n"
" --skip <test_id> Test ID to skip;\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); exit(EXIT_FAILURE);
} }
...@@ -517,6 +524,7 @@ int main(int argc, char **argv) ...@@ -517,6 +524,7 @@ int main(int argc, char **argv)
struct test_opts opts = { struct test_opts opts = {
.mode = TEST_MODE_UNSET, .mode = TEST_MODE_UNSET,
.peer_cid = VMADDR_CID_ANY, .peer_cid = VMADDR_CID_ANY,
.peer_port = DEFAULT_PEER_PORT,
}; };
init_signals(); init_signals();
...@@ -544,6 +552,9 @@ int main(int argc, char **argv) ...@@ -544,6 +552,9 @@ int main(int argc, char **argv)
case 'p': case 'p':
opts.peer_cid = parse_cid(optarg); opts.peer_cid = parse_cid(optarg);
break; break;
case 'q':
opts.peer_port = parse_port(optarg);
break;
case 'P': case 'P':
control_port = optarg; control_port = optarg;
break; break;
......
...@@ -34,7 +34,7 @@ static void test_stream_connection_reset(const struct test_opts *opts) ...@@ -34,7 +34,7 @@ static void test_stream_connection_reset(const struct test_opts *opts)
} addr = { } addr = {
.svm = { .svm = {
.svm_family = AF_VSOCK, .svm_family = AF_VSOCK,
.svm_port = 1234, .svm_port = opts->peer_port,
.svm_cid = opts->peer_cid, .svm_cid = opts->peer_cid,
}, },
}; };
...@@ -70,7 +70,7 @@ static void test_stream_bind_only_client(const struct test_opts *opts) ...@@ -70,7 +70,7 @@ static void test_stream_bind_only_client(const struct test_opts *opts)
} addr = { } addr = {
.svm = { .svm = {
.svm_family = AF_VSOCK, .svm_family = AF_VSOCK,
.svm_port = 1234, .svm_port = opts->peer_port,
.svm_cid = opts->peer_cid, .svm_cid = opts->peer_cid,
}, },
}; };
...@@ -112,7 +112,7 @@ static void test_stream_bind_only_server(const struct test_opts *opts) ...@@ -112,7 +112,7 @@ static void test_stream_bind_only_server(const struct test_opts *opts)
} addr = { } addr = {
.svm = { .svm = {
.svm_family = AF_VSOCK, .svm_family = AF_VSOCK,
.svm_port = 1234, .svm_port = opts->peer_port,
.svm_cid = VMADDR_CID_ANY, .svm_cid = VMADDR_CID_ANY,
}, },
}; };
...@@ -138,7 +138,7 @@ static void test_stream_client_close_client(const struct test_opts *opts) ...@@ -138,7 +138,7 @@ static void test_stream_client_close_client(const struct test_opts *opts)
{ {
int fd; int fd;
fd = vsock_stream_connect(opts->peer_cid, 1234); fd = vsock_stream_connect(opts->peer_cid, opts->peer_port);
if (fd < 0) { if (fd < 0) {
perror("connect"); perror("connect");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
...@@ -152,7 +152,7 @@ static void test_stream_client_close_server(const struct test_opts *opts) ...@@ -152,7 +152,7 @@ static void test_stream_client_close_server(const struct test_opts *opts)
{ {
int fd; 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) { if (fd < 0) {
perror("accept"); perror("accept");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
...@@ -173,7 +173,7 @@ static void test_stream_server_close_client(const struct test_opts *opts) ...@@ -173,7 +173,7 @@ static void test_stream_server_close_client(const struct test_opts *opts)
{ {
int fd; int fd;
fd = vsock_stream_connect(opts->peer_cid, 1234); fd = vsock_stream_connect(opts->peer_cid, opts->peer_port);
if (fd < 0) { if (fd < 0) {
perror("connect"); perror("connect");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
...@@ -194,7 +194,7 @@ static void test_stream_server_close_server(const struct test_opts *opts) ...@@ -194,7 +194,7 @@ static void test_stream_server_close_server(const struct test_opts *opts)
{ {
int fd; 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) { if (fd < 0) {
perror("accept"); perror("accept");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
...@@ -215,7 +215,7 @@ static void test_stream_multiconn_client(const struct test_opts *opts) ...@@ -215,7 +215,7 @@ static void test_stream_multiconn_client(const struct test_opts *opts)
int i; int i;
for (i = 0; i < MULTICONN_NFDS; 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) { if (fds[i] < 0) {
perror("connect"); perror("connect");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
...@@ -239,7 +239,7 @@ static void test_stream_multiconn_server(const struct test_opts *opts) ...@@ -239,7 +239,7 @@ static void test_stream_multiconn_server(const struct test_opts *opts)
int i; int i;
for (i = 0; i < MULTICONN_NFDS; 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) { if (fds[i] < 0) {
perror("accept"); perror("accept");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
...@@ -267,9 +267,9 @@ static void test_msg_peek_client(const struct test_opts *opts, ...@@ -267,9 +267,9 @@ static void test_msg_peek_client(const struct test_opts *opts,
int i; int i;
if (seqpacket) if (seqpacket)
fd = vsock_seqpacket_connect(opts->peer_cid, 1234); fd = vsock_seqpacket_connect(opts->peer_cid, opts->peer_port);
else else
fd = vsock_stream_connect(opts->peer_cid, 1234); fd = vsock_stream_connect(opts->peer_cid, opts->peer_port);
if (fd < 0) { if (fd < 0) {
perror("connect"); perror("connect");
...@@ -295,9 +295,9 @@ static void test_msg_peek_server(const struct test_opts *opts, ...@@ -295,9 +295,9 @@ static void test_msg_peek_server(const struct test_opts *opts,
int fd; int fd;
if (seqpacket) if (seqpacket)
fd = vsock_seqpacket_accept(VMADDR_CID_ANY, 1234, NULL); fd = vsock_seqpacket_accept(VMADDR_CID_ANY, opts->peer_port, NULL);
else else
fd = vsock_stream_accept(VMADDR_CID_ANY, 1234, NULL); fd = vsock_stream_accept(VMADDR_CID_ANY, opts->peer_port, NULL);
if (fd < 0) { if (fd < 0) {
perror("accept"); perror("accept");
...@@ -363,7 +363,7 @@ static void test_seqpacket_msg_bounds_client(const struct test_opts *opts) ...@@ -363,7 +363,7 @@ static void test_seqpacket_msg_bounds_client(const struct test_opts *opts)
int msg_count; int msg_count;
int fd; int fd;
fd = vsock_seqpacket_connect(opts->peer_cid, 1234); fd = vsock_seqpacket_connect(opts->peer_cid, opts->peer_port);
if (fd < 0) { if (fd < 0) {
perror("connect"); perror("connect");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
...@@ -434,7 +434,7 @@ static void test_seqpacket_msg_bounds_server(const struct test_opts *opts) ...@@ -434,7 +434,7 @@ static void test_seqpacket_msg_bounds_server(const struct test_opts *opts)
struct msghdr msg = {0}; struct msghdr msg = {0};
struct iovec iov = {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) { if (fd < 0) {
perror("accept"); perror("accept");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
...@@ -505,7 +505,7 @@ static void test_seqpacket_msg_trunc_client(const struct test_opts *opts) ...@@ -505,7 +505,7 @@ static void test_seqpacket_msg_trunc_client(const struct test_opts *opts)
int fd; int fd;
char buf[MESSAGE_TRUNC_SZ]; 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) { if (fd < 0) {
perror("connect"); perror("connect");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
...@@ -524,7 +524,7 @@ static void test_seqpacket_msg_trunc_server(const struct test_opts *opts) ...@@ -524,7 +524,7 @@ static void test_seqpacket_msg_trunc_server(const struct test_opts *opts)
struct msghdr msg = {0}; struct msghdr msg = {0};
struct iovec iov = {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) { if (fd < 0) {
perror("accept"); perror("accept");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
...@@ -575,7 +575,7 @@ static void test_seqpacket_timeout_client(const struct test_opts *opts) ...@@ -575,7 +575,7 @@ static void test_seqpacket_timeout_client(const struct test_opts *opts)
time_t read_enter_ns; time_t read_enter_ns;
time_t read_overhead_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) { if (fd < 0) {
perror("connect"); perror("connect");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
...@@ -620,7 +620,7 @@ static void test_seqpacket_timeout_server(const struct test_opts *opts) ...@@ -620,7 +620,7 @@ static void test_seqpacket_timeout_server(const struct test_opts *opts)
{ {
int fd; 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) { if (fd < 0) {
perror("accept"); perror("accept");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
...@@ -639,7 +639,7 @@ static void test_seqpacket_bigmsg_client(const struct test_opts *opts) ...@@ -639,7 +639,7 @@ static void test_seqpacket_bigmsg_client(const struct test_opts *opts)
len = sizeof(sock_buf_size); 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) { if (fd < 0) {
perror("connect"); perror("connect");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
...@@ -671,7 +671,7 @@ static void test_seqpacket_bigmsg_server(const struct test_opts *opts) ...@@ -671,7 +671,7 @@ static void test_seqpacket_bigmsg_server(const struct test_opts *opts)
{ {
int fd; 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) { if (fd < 0) {
perror("accept"); perror("accept");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
...@@ -692,7 +692,7 @@ static void test_seqpacket_invalid_rec_buffer_client(const struct test_opts *opt ...@@ -692,7 +692,7 @@ static void test_seqpacket_invalid_rec_buffer_client(const struct test_opts *opt
unsigned char *buf2; unsigned char *buf2;
int buf_size = getpagesize() * 3; 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) { if (fd < 0) {
perror("connect"); perror("connect");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
...@@ -732,7 +732,7 @@ static void test_seqpacket_invalid_rec_buffer_server(const struct test_opts *opt ...@@ -732,7 +732,7 @@ static void test_seqpacket_invalid_rec_buffer_server(const struct test_opts *opt
int flags = MAP_PRIVATE | MAP_ANONYMOUS; int flags = MAP_PRIVATE | MAP_ANONYMOUS;
int i; 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) { if (fd < 0) {
perror("accept"); perror("accept");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
...@@ -808,7 +808,7 @@ static void test_stream_poll_rcvlowat_server(const struct test_opts *opts) ...@@ -808,7 +808,7 @@ static void test_stream_poll_rcvlowat_server(const struct test_opts *opts)
int fd; int fd;
int i; 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) { if (fd < 0) {
perror("accept"); perror("accept");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
...@@ -839,7 +839,7 @@ static void test_stream_poll_rcvlowat_client(const struct test_opts *opts) ...@@ -839,7 +839,7 @@ static void test_stream_poll_rcvlowat_client(const struct test_opts *opts)
short poll_flags; short poll_flags;
int fd; int fd;
fd = vsock_stream_connect(opts->peer_cid, 1234); fd = vsock_stream_connect(opts->peer_cid, opts->peer_port);
if (fd < 0) { if (fd < 0) {
perror("connect"); perror("connect");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
...@@ -906,9 +906,9 @@ static void test_inv_buf_client(const struct test_opts *opts, bool stream) ...@@ -906,9 +906,9 @@ static void test_inv_buf_client(const struct test_opts *opts, bool stream)
int fd; int fd;
if (stream) if (stream)
fd = vsock_stream_connect(opts->peer_cid, 1234); fd = vsock_stream_connect(opts->peer_cid, opts->peer_port);
else else
fd = vsock_seqpacket_connect(opts->peer_cid, 1234); fd = vsock_seqpacket_connect(opts->peer_cid, opts->peer_port);
if (fd < 0) { if (fd < 0) {
perror("connect"); perror("connect");
...@@ -941,9 +941,9 @@ static void test_inv_buf_server(const struct test_opts *opts, bool stream) ...@@ -941,9 +941,9 @@ static void test_inv_buf_server(const struct test_opts *opts, bool stream)
int fd; int fd;
if (stream) if (stream)
fd = vsock_stream_accept(VMADDR_CID_ANY, 1234, NULL); fd = vsock_stream_accept(VMADDR_CID_ANY, opts->peer_port, NULL);
else else
fd = vsock_seqpacket_accept(VMADDR_CID_ANY, 1234, NULL); fd = vsock_seqpacket_accept(VMADDR_CID_ANY, opts->peer_port, NULL);
if (fd < 0) { if (fd < 0) {
perror("accept"); perror("accept");
...@@ -986,7 +986,7 @@ static void test_stream_virtio_skb_merge_client(const struct test_opts *opts) ...@@ -986,7 +986,7 @@ static void test_stream_virtio_skb_merge_client(const struct test_opts *opts)
{ {
int fd; int fd;
fd = vsock_stream_connect(opts->peer_cid, 1234); fd = vsock_stream_connect(opts->peer_cid, opts->peer_port);
if (fd < 0) { if (fd < 0) {
perror("connect"); perror("connect");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
...@@ -1015,7 +1015,7 @@ static void test_stream_virtio_skb_merge_server(const struct test_opts *opts) ...@@ -1015,7 +1015,7 @@ static void test_stream_virtio_skb_merge_server(const struct test_opts *opts)
unsigned char buf[64]; unsigned char buf[64];
int fd; 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) { if (fd < 0) {
perror("accept"); perror("accept");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
...@@ -1108,7 +1108,7 @@ static void test_stream_shutwr_client(const struct test_opts *opts) ...@@ -1108,7 +1108,7 @@ static void test_stream_shutwr_client(const struct test_opts *opts)
sigaction(SIGPIPE, &act, NULL); 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) { if (fd < 0) {
perror("connect"); perror("connect");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
...@@ -1130,7 +1130,7 @@ static void test_stream_shutwr_server(const struct test_opts *opts) ...@@ -1130,7 +1130,7 @@ static void test_stream_shutwr_server(const struct test_opts *opts)
{ {
int fd; 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) { if (fd < 0) {
perror("accept"); perror("accept");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
...@@ -1151,7 +1151,7 @@ static void test_stream_shutrd_client(const struct test_opts *opts) ...@@ -1151,7 +1151,7 @@ static void test_stream_shutrd_client(const struct test_opts *opts)
sigaction(SIGPIPE, &act, NULL); 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) { if (fd < 0) {
perror("connect"); perror("connect");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
...@@ -1170,7 +1170,7 @@ static void test_stream_shutrd_server(const struct test_opts *opts) ...@@ -1170,7 +1170,7 @@ static void test_stream_shutrd_server(const struct test_opts *opts)
{ {
int fd; 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) { if (fd < 0) {
perror("accept"); perror("accept");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
...@@ -1193,7 +1193,7 @@ static void test_double_bind_connect_server(const struct test_opts *opts) ...@@ -1193,7 +1193,7 @@ static void test_double_bind_connect_server(const struct test_opts *opts)
struct sockaddr_vm sa_client; struct sockaddr_vm sa_client;
socklen_t socklen_client = sizeof(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++) { for (i = 0; i < 2; i++) {
control_writeln("LISTENING"); control_writeln("LISTENING");
...@@ -1226,7 +1226,13 @@ static void test_double_bind_connect_client(const struct test_opts *opts) ...@@ -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 */ /* Wait until server is ready to accept a new connection */
control_expectln("LISTENING"); 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); close(client_fd);
} }
...@@ -1246,7 +1252,7 @@ static void test_stream_rcvlowat_def_cred_upd_client(const struct test_opts *opt ...@@ -1246,7 +1252,7 @@ static void test_stream_rcvlowat_def_cred_upd_client(const struct test_opts *opt
void *buf; void *buf;
int fd; int fd;
fd = vsock_stream_connect(opts->peer_cid, 1234); fd = vsock_stream_connect(opts->peer_cid, opts->peer_port);
if (fd < 0) { if (fd < 0) {
perror("connect"); perror("connect");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
...@@ -1282,7 +1288,7 @@ static void test_stream_credit_update_test(const struct test_opts *opts, ...@@ -1282,7 +1288,7 @@ static void test_stream_credit_update_test(const struct test_opts *opts,
void *buf; void *buf;
int fd; 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) { if (fd < 0) {
perror("accept"); perror("accept");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
...@@ -1542,6 +1548,11 @@ static const struct option longopts[] = { ...@@ -1542,6 +1548,11 @@ static const struct option longopts[] = {
.has_arg = required_argument, .has_arg = required_argument,
.val = 'p', .val = 'p',
}, },
{
.name = "peer-port",
.has_arg = required_argument,
.val = 'q',
},
{ {
.name = "list", .name = "list",
.has_arg = no_argument, .has_arg = no_argument,
...@@ -1562,7 +1573,7 @@ static const struct option longopts[] = { ...@@ -1562,7 +1573,7 @@ static const struct option longopts[] = {
static void usage(void) 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" "\n"
" Server: vsock_test --control-port=1234 --mode=server --peer-cid=3\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" " 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) ...@@ -1577,6 +1588,9 @@ static void usage(void)
"connect to.\n" "connect to.\n"
"\n" "\n"
"The CID of the other side must be given with --peer-cid=<cid>.\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" "\n"
"Options:\n" "Options:\n"
" --help This help message\n" " --help This help message\n"
...@@ -1584,9 +1598,11 @@ static void usage(void) ...@@ -1584,9 +1598,11 @@ static void usage(void)
" --control-port <port> Server port to listen on/connect to\n" " --control-port <port> Server port to listen on/connect to\n"
" --mode client|server Server or client mode\n" " --mode client|server Server or client mode\n"
" --peer-cid <cid> CID of the other side\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" " --list List of tests that will be executed\n"
" --skip <test_id> Test ID to skip;\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); exit(EXIT_FAILURE);
} }
...@@ -1598,6 +1614,7 @@ int main(int argc, char **argv) ...@@ -1598,6 +1614,7 @@ int main(int argc, char **argv)
struct test_opts opts = { struct test_opts opts = {
.mode = TEST_MODE_UNSET, .mode = TEST_MODE_UNSET,
.peer_cid = VMADDR_CID_ANY, .peer_cid = VMADDR_CID_ANY,
.peer_port = DEFAULT_PEER_PORT,
}; };
srand(time(NULL)); srand(time(NULL));
...@@ -1626,6 +1643,9 @@ int main(int argc, char **argv) ...@@ -1626,6 +1643,9 @@ int main(int argc, char **argv)
case 'p': case 'p':
opts.peer_cid = parse_cid(optarg); opts.peer_cid = parse_cid(optarg);
break; break;
case 'q':
opts.peer_port = parse_port(optarg);
break;
case 'P': case 'P':
control_port = optarg; control_port = optarg;
break; break;
......
...@@ -152,9 +152,9 @@ static void test_client(const struct test_opts *opts, ...@@ -152,9 +152,9 @@ static void test_client(const struct test_opts *opts,
int fd; int fd;
if (sock_seqpacket) if (sock_seqpacket)
fd = vsock_seqpacket_connect(opts->peer_cid, 1234); fd = vsock_seqpacket_connect(opts->peer_cid, opts->peer_port);
else else
fd = vsock_stream_connect(opts->peer_cid, 1234); fd = vsock_stream_connect(opts->peer_cid, opts->peer_port);
if (fd < 0) { if (fd < 0) {
perror("connect"); perror("connect");
...@@ -248,9 +248,9 @@ static void test_server(const struct test_opts *opts, ...@@ -248,9 +248,9 @@ static void test_server(const struct test_opts *opts,
int fd; int fd;
if (sock_seqpacket) if (sock_seqpacket)
fd = vsock_seqpacket_accept(VMADDR_CID_ANY, 1234, NULL); fd = vsock_seqpacket_accept(VMADDR_CID_ANY, opts->peer_port, NULL);
else else
fd = vsock_stream_accept(VMADDR_CID_ANY, 1234, NULL); fd = vsock_stream_accept(VMADDR_CID_ANY, opts->peer_port, NULL);
if (fd < 0) { if (fd < 0) {
perror("accept"); perror("accept");
...@@ -323,7 +323,7 @@ void test_stream_msgzcopy_empty_errq_client(const struct test_opts *opts) ...@@ -323,7 +323,7 @@ void test_stream_msgzcopy_empty_errq_client(const struct test_opts *opts)
ssize_t res; ssize_t res;
int fd; int fd;
fd = vsock_stream_connect(opts->peer_cid, 1234); fd = vsock_stream_connect(opts->peer_cid, opts->peer_port);
if (fd < 0) { if (fd < 0) {
perror("connect"); perror("connect");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
...@@ -347,7 +347,7 @@ void test_stream_msgzcopy_empty_errq_server(const struct test_opts *opts) ...@@ -347,7 +347,7 @@ void test_stream_msgzcopy_empty_errq_server(const struct test_opts *opts)
{ {
int fd; 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) { if (fd < 0) {
perror("accept"); perror("accept");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
......
...@@ -66,7 +66,7 @@ static void vsock_io_uring_client(const struct test_opts *opts, ...@@ -66,7 +66,7 @@ static void vsock_io_uring_client(const struct test_opts *opts,
struct msghdr msg; struct msghdr msg;
int fd; int fd;
fd = vsock_stream_connect(opts->peer_cid, 1234); fd = vsock_stream_connect(opts->peer_cid, opts->peer_port);
if (fd < 0) { if (fd < 0) {
perror("connect"); perror("connect");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
...@@ -120,7 +120,7 @@ static void vsock_io_uring_server(const struct test_opts *opts, ...@@ -120,7 +120,7 @@ static void vsock_io_uring_server(const struct test_opts *opts,
void *data; void *data;
int fd; 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) { if (fd < 0) {
perror("accept"); perror("accept");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
...@@ -247,6 +247,11 @@ static const struct option longopts[] = { ...@@ -247,6 +247,11 @@ static const struct option longopts[] = {
.has_arg = required_argument, .has_arg = required_argument,
.val = 'p', .val = 'p',
}, },
{
.name = "peer-port",
.has_arg = required_argument,
.val = 'q',
},
{ {
.name = "help", .name = "help",
.has_arg = no_argument, .has_arg = no_argument,
...@@ -257,7 +262,7 @@ static const struct option longopts[] = { ...@@ -257,7 +262,7 @@ static const struct option longopts[] = {
static void usage(void) 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" "\n"
" Server: vsock_uring_test --control-port=1234 --mode=server --peer-cid=3\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" " 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) ...@@ -271,6 +276,8 @@ static void usage(void)
" --control-port <port> Server port to listen on/connect to\n" " --control-port <port> Server port to listen on/connect to\n"
" --mode client|server Server or client mode\n" " --mode client|server Server or client mode\n"
" --peer-cid <cid> CID of the other side\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); exit(EXIT_FAILURE);
} }
...@@ -282,6 +289,7 @@ int main(int argc, char **argv) ...@@ -282,6 +289,7 @@ int main(int argc, char **argv)
struct test_opts opts = { struct test_opts opts = {
.mode = TEST_MODE_UNSET, .mode = TEST_MODE_UNSET,
.peer_cid = VMADDR_CID_ANY, .peer_cid = VMADDR_CID_ANY,
.peer_port = DEFAULT_PEER_PORT,
}; };
init_signals(); init_signals();
...@@ -309,6 +317,9 @@ int main(int argc, char **argv) ...@@ -309,6 +317,9 @@ int main(int argc, char **argv)
case 'p': case 'p':
opts.peer_cid = parse_cid(optarg); opts.peer_cid = parse_cid(optarg);
break; break;
case 'q':
opts.peer_port = parse_port(optarg);
break;
case 'P': case 'P':
control_port = optarg; control_port = optarg;
break; break;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment