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