2019-12-18 21:07:00 +03:00
/* SPDX-License-Identifier: GPL-2.0-only */
# ifndef UTIL_H
# define UTIL_H
2019-12-18 21:07:01 +03:00
# include <sys/socket.h>
# include <linux/vm_sockets.h>
2019-12-18 21:07:00 +03:00
/* Tests can either run as the client or the server */
enum test_mode {
TEST_MODE_UNSET ,
TEST_MODE_CLIENT ,
TEST_MODE_SERVER
} ;
/* Test runner options */
struct test_opts {
enum test_mode mode ;
unsigned int peer_cid ;
} ;
/* A test case definition. Test functions must print failures to stderr and
* terminate with exit ( EXIT_FAILURE ) .
*/
struct test_case {
const char * name ; /* human-readable name */
/* Called when test mode is TEST_MODE_CLIENT */
void ( * run_client ) ( const struct test_opts * opts ) ;
/* Called when test mode is TEST_MODE_SERVER */
void ( * run_server ) ( const struct test_opts * opts ) ;
2019-12-18 21:07:06 +03:00
bool skip ;
2019-12-18 21:07:00 +03:00
} ;
void init_signals ( void ) ;
unsigned int parse_cid ( const char * str ) ;
2019-12-18 21:07:01 +03:00
int vsock_stream_connect ( unsigned int cid , unsigned int port ) ;
2021-06-11 14:14:04 +03:00
int vsock_seqpacket_connect ( unsigned int cid , unsigned int port ) ;
2019-12-18 21:07:01 +03:00
int vsock_stream_accept ( unsigned int cid , unsigned int port ,
struct sockaddr_vm * clientaddrp ) ;
2021-06-11 14:14:04 +03:00
int vsock_seqpacket_accept ( unsigned int cid , unsigned int port ,
struct sockaddr_vm * clientaddrp ) ;
2019-12-18 21:07:05 +03:00
void vsock_wait_remote_close ( int fd ) ;
2019-12-18 21:07:03 +03:00
void send_byte ( int fd , int expected_ret , int flags ) ;
void recv_byte ( int fd , int expected_ret , int flags ) ;
2019-12-18 21:07:00 +03:00
void run_tests ( const struct test_case * test_cases ,
const struct test_opts * opts ) ;
2019-12-18 21:07:06 +03:00
void list_tests ( const struct test_case * test_cases ) ;
void skip_test ( struct test_case * test_cases , size_t test_cases_len ,
const char * test_id_str ) ;
2019-12-18 21:07:00 +03:00
# endif /* UTIL_H */