1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
2 | #ifndef UTIL_H |
3 | #define UTIL_H |
4 | |
5 | #include <sys/socket.h> |
6 | #include <linux/vm_sockets.h> |
7 | |
8 | /* Tests can either run as the client or the server */ |
9 | enum test_mode { |
10 | TEST_MODE_UNSET, |
11 | TEST_MODE_CLIENT, |
12 | TEST_MODE_SERVER |
13 | }; |
14 | |
15 | #define DEFAULT_PEER_PORT 1234 |
16 | |
17 | /* Test runner options */ |
18 | struct test_opts { |
19 | enum test_mode mode; |
20 | unsigned int peer_cid; |
21 | unsigned int peer_port; |
22 | }; |
23 | |
24 | /* A test case definition. Test functions must print failures to stderr and |
25 | * terminate with exit(EXIT_FAILURE). |
26 | */ |
27 | struct test_case { |
28 | const char *name; /* human-readable name */ |
29 | |
30 | /* Called when test mode is TEST_MODE_CLIENT */ |
31 | void (*run_client)(const struct test_opts *opts); |
32 | |
33 | /* Called when test mode is TEST_MODE_SERVER */ |
34 | void (*run_server)(const struct test_opts *opts); |
35 | |
36 | bool skip; |
37 | }; |
38 | |
39 | void init_signals(void); |
40 | unsigned int parse_cid(const char *str); |
41 | unsigned int parse_port(const char *str); |
42 | int vsock_stream_connect(unsigned int cid, unsigned int port); |
43 | int vsock_bind_connect(unsigned int cid, unsigned int port, |
44 | unsigned int bind_port, int type); |
45 | int vsock_seqpacket_connect(unsigned int cid, unsigned int port); |
46 | int vsock_stream_accept(unsigned int cid, unsigned int port, |
47 | struct sockaddr_vm *clientaddrp); |
48 | int vsock_stream_listen(unsigned int cid, unsigned int port); |
49 | int vsock_seqpacket_accept(unsigned int cid, unsigned int port, |
50 | struct sockaddr_vm *clientaddrp); |
51 | void vsock_wait_remote_close(int fd); |
52 | void send_buf(int fd, const void *buf, size_t len, int flags, |
53 | ssize_t expected_ret); |
54 | void recv_buf(int fd, void *buf, size_t len, int flags, ssize_t expected_ret); |
55 | void send_byte(int fd, int expected_ret, int flags); |
56 | void recv_byte(int fd, int expected_ret, int flags); |
57 | void run_tests(const struct test_case *test_cases, |
58 | const struct test_opts *opts); |
59 | void list_tests(const struct test_case *test_cases); |
60 | void skip_test(struct test_case *test_cases, size_t test_cases_len, |
61 | const char *test_id_str); |
62 | unsigned long hash_djb2(const void *data, size_t len); |
63 | size_t iovec_bytes(const struct iovec *iov, size_t iovnum); |
64 | unsigned long iovec_hash_djb2(const struct iovec *iov, size_t iovnum); |
65 | struct iovec *alloc_test_iovec(const struct iovec *test_iovec, int iovnum); |
66 | void free_test_iovec(const struct iovec *test_iovec, |
67 | struct iovec *iovec, int iovnum); |
68 | #endif /* UTIL_H */ |
69 | |