xref: /minix3/minix/tests/socklib.h (revision 3ba6090f825dfbac97538b19928b0ab1e37909d6)
1baa5830fSDavid van Moolenbroek #ifndef MINIX_TEST_SOCKLIB_H
2baa5830fSDavid van Moolenbroek #define MINIX_TEST_SOCKLIB_H
3baa5830fSDavid van Moolenbroek 
4*3ba6090fSDavid van Moolenbroek /* TCP/IP test values. */
5*3ba6090fSDavid van Moolenbroek #define TEST_PORT_A	12345	/* this port should be free and usable */
6*3ba6090fSDavid van Moolenbroek #define TEST_PORT_B	12346	/* this port should be free and usable */
7*3ba6090fSDavid van Moolenbroek 
8*3ba6090fSDavid van Moolenbroek #define LOOPBACK_IFNAME		"lo0"		/* loopback interface name */
9*3ba6090fSDavid van Moolenbroek #define LOOPBACK_IPV4		"127.0.0.1"	/* IPv4 address */
10*3ba6090fSDavid van Moolenbroek #define LOOPBACK_LL_IPV6	"fe80::1"	/* link-local IPv6 address */
11*3ba6090fSDavid van Moolenbroek 
12*3ba6090fSDavid van Moolenbroek /* These address should simply eat all packets. */
13*3ba6090fSDavid van Moolenbroek /*
14*3ba6090fSDavid van Moolenbroek  * IMPORTANT: the ::2 address works only if there is a route for ::/64.  This
15*3ba6090fSDavid van Moolenbroek  * route is supposed to be added by /etc/rc.d/network, and is not present by
16*3ba6090fSDavid van Moolenbroek  * default.  As a result, the tests will pass only when regular system/network
17*3ba6090fSDavid van Moolenbroek  * initialization is not skipped.  We cannot add the route ourselves, since not
18*3ba6090fSDavid van Moolenbroek  * all tests run as root.
19*3ba6090fSDavid van Moolenbroek  */
20*3ba6090fSDavid van Moolenbroek #define TEST_BLACKHOLE_IPV4	"127.255.0.254"
21*3ba6090fSDavid van Moolenbroek #define TEST_BLACKHOLE_IPV6	"::2"
22*3ba6090fSDavid van Moolenbroek #define TEST_BLACKHOLE_LL_IPV6	"fe80::ffff"
23*3ba6090fSDavid van Moolenbroek 
24*3ba6090fSDavid van Moolenbroek #define BAD_SCOPE_ID	255	/* guaranteed not to belong to an interface */
25*3ba6090fSDavid van Moolenbroek 
26baa5830fSDavid van Moolenbroek enum state {
27baa5830fSDavid van Moolenbroek 	S_NEW,
28baa5830fSDavid van Moolenbroek 	S_N_SHUT_R,
29baa5830fSDavid van Moolenbroek 	S_N_SHUT_W,
30baa5830fSDavid van Moolenbroek 	S_N_SHUT_RW,
31baa5830fSDavid van Moolenbroek 	S_BOUND,
32baa5830fSDavid van Moolenbroek 	S_LISTENING,
33baa5830fSDavid van Moolenbroek 	S_L_SHUT_R,
34baa5830fSDavid van Moolenbroek 	S_L_SHUT_W,
35baa5830fSDavid van Moolenbroek 	S_L_SHUT_RW,
36baa5830fSDavid van Moolenbroek 	S_CONNECTING,
37baa5830fSDavid van Moolenbroek 	S_C_SHUT_R,
38baa5830fSDavid van Moolenbroek 	S_C_SHUT_W,
39baa5830fSDavid van Moolenbroek 	S_C_SHUT_RW,
40baa5830fSDavid van Moolenbroek 	S_CONNECTED,
41baa5830fSDavid van Moolenbroek 	S_ACCEPTED,
42baa5830fSDavid van Moolenbroek 	S_SHUT_R,
43baa5830fSDavid van Moolenbroek 	S_SHUT_W,
44baa5830fSDavid van Moolenbroek 	S_SHUT_RW,
45baa5830fSDavid van Moolenbroek 	S_RSHUT_R,
46baa5830fSDavid van Moolenbroek 	S_RSHUT_W,
47baa5830fSDavid van Moolenbroek 	S_RSHUT_RW,
48baa5830fSDavid van Moolenbroek 	S_SHUT2_R,
49baa5830fSDavid van Moolenbroek 	S_SHUT2_W,
50baa5830fSDavid van Moolenbroek 	S_SHUT2_RW,
51baa5830fSDavid van Moolenbroek 	S_PRE_EOF,
52baa5830fSDavid van Moolenbroek 	S_AT_EOF,
53baa5830fSDavid van Moolenbroek 	S_POST_EOF,
54baa5830fSDavid van Moolenbroek 	S_PRE_SHUT_R,
55baa5830fSDavid van Moolenbroek 	S_EOF_SHUT_R,
56baa5830fSDavid van Moolenbroek 	S_POST_SHUT_R,
57baa5830fSDavid van Moolenbroek 	S_PRE_SHUT_W,
58baa5830fSDavid van Moolenbroek 	S_EOF_SHUT_W,
59baa5830fSDavid van Moolenbroek 	S_POST_SHUT_W,
60baa5830fSDavid van Moolenbroek 	S_PRE_SHUT_RW,
61baa5830fSDavid van Moolenbroek 	S_EOF_SHUT_RW,
62baa5830fSDavid van Moolenbroek 	S_POST_SHUT_RW,
63baa5830fSDavid van Moolenbroek 	S_PRE_RESET,
64baa5830fSDavid van Moolenbroek 	S_AT_RESET,
65baa5830fSDavid van Moolenbroek 	S_POST_RESET,
66baa5830fSDavid van Moolenbroek 	S_FAILED,
67baa5830fSDavid van Moolenbroek 	S_POST_FAILED,
68baa5830fSDavid van Moolenbroek 	S_MAX
69baa5830fSDavid van Moolenbroek };
70baa5830fSDavid van Moolenbroek 
71baa5830fSDavid van Moolenbroek enum call {
72baa5830fSDavid van Moolenbroek 	C_ACCEPT,
73baa5830fSDavid van Moolenbroek 	C_BIND,
74baa5830fSDavid van Moolenbroek 	C_CONNECT,
75baa5830fSDavid van Moolenbroek 	C_GETPEERNAME,
76baa5830fSDavid van Moolenbroek 	C_GETSOCKNAME,
77baa5830fSDavid van Moolenbroek 	C_GETSOCKOPT_ERR,
78baa5830fSDavid van Moolenbroek 	C_GETSOCKOPT_KA,
79baa5830fSDavid van Moolenbroek 	C_GETSOCKOPT_RB,
80baa5830fSDavid van Moolenbroek 	C_IOCTL_NREAD,
81baa5830fSDavid van Moolenbroek 	C_LISTEN,
82baa5830fSDavid van Moolenbroek 	C_RECV,
83baa5830fSDavid van Moolenbroek 	C_RECVFROM,
84baa5830fSDavid van Moolenbroek 	C_SEND,
85baa5830fSDavid van Moolenbroek 	C_SENDTO,
86baa5830fSDavid van Moolenbroek 	C_SELECT_R,
87baa5830fSDavid van Moolenbroek 	C_SELECT_W,
88baa5830fSDavid van Moolenbroek 	C_SELECT_X,
89baa5830fSDavid van Moolenbroek 	C_SETSOCKOPT_BC,
90baa5830fSDavid van Moolenbroek 	C_SETSOCKOPT_KA,
91baa5830fSDavid van Moolenbroek 	C_SETSOCKOPT_L,
92baa5830fSDavid van Moolenbroek 	C_SETSOCKOPT_RA,
93baa5830fSDavid van Moolenbroek 	C_SHUTDOWN_R,
94baa5830fSDavid van Moolenbroek 	C_SHUTDOWN_RW,
95baa5830fSDavid van Moolenbroek 	C_SHUTDOWN_W,
96baa5830fSDavid van Moolenbroek 	C_MAX
97baa5830fSDavid van Moolenbroek };
98baa5830fSDavid van Moolenbroek 
99baa5830fSDavid van Moolenbroek int socklib_sweep_call(enum call call, int fd, struct sockaddr * local_addr,
100baa5830fSDavid van Moolenbroek 	struct sockaddr * remote_addr, socklen_t addr_len);
101baa5830fSDavid van Moolenbroek void socklib_sweep(int domain, int type, int protocol,
102baa5830fSDavid van Moolenbroek 	const enum state * states, unsigned int nstates, const int * results,
103baa5830fSDavid van Moolenbroek 	int (* proc)(int domain, int type, int protocol, enum state,
104baa5830fSDavid van Moolenbroek 	enum call));
105baa5830fSDavid van Moolenbroek 
106*3ba6090fSDavid van Moolenbroek void socklib_multicast_tx_options(int type);
107baa5830fSDavid van Moolenbroek void socklib_large_transfers(int fd[2]);
108baa5830fSDavid van Moolenbroek void socklib_producer_consumer(int fd[2]);
109baa5830fSDavid van Moolenbroek void socklib_stream_recv(int (* socket_pair)(int, int, int, int *), int domain,
110baa5830fSDavid van Moolenbroek 	int type, int (* break_recv)(int, const char *, size_t));
111*3ba6090fSDavid van Moolenbroek int socklib_find_pcb(const char * path, int protocol, uint16_t local_port,
112*3ba6090fSDavid van Moolenbroek 	uint16_t remote_port, struct kinfo_pcb * ki);
113*3ba6090fSDavid van Moolenbroek void socklib_test_addrs(int type, int protocol);
114*3ba6090fSDavid van Moolenbroek void socklib_test_multicast(int type, int protocol);
115baa5830fSDavid van Moolenbroek 
116baa5830fSDavid van Moolenbroek #endif /* !MINIX_TEST_SOCKLIB_H */
117