xref: /unit/src/nxt_test_build.h (revision 0:a63ceefd6ab0)
1*0Sigor@sysoev.ru 
2*0Sigor@sysoev.ru /*
3*0Sigor@sysoev.ru  * Copyright (C) Igor Sysoev
4*0Sigor@sysoev.ru  * Copyright (C) NGINX, Inc.
5*0Sigor@sysoev.ru  */
6*0Sigor@sysoev.ru 
7*0Sigor@sysoev.ru 
8*0Sigor@sysoev.ru #ifndef _NXT_UNIX_TEST_BUILD_H_INCLUDED_
9*0Sigor@sysoev.ru #define _NXT_UNIX_TEST_BUILD_H_INCLUDED_
10*0Sigor@sysoev.ru 
11*0Sigor@sysoev.ru 
12*0Sigor@sysoev.ru #if (NXT_TEST_BUILD_EPOLL)
13*0Sigor@sysoev.ru 
14*0Sigor@sysoev.ru #define NXT_HAVE_EPOLL       1
15*0Sigor@sysoev.ru #define NXT_HAVE_EPOLL_EDGE  1
16*0Sigor@sysoev.ru #define NXT_HAVE_EVENTFD     1
17*0Sigor@sysoev.ru #define NXT_HAVE_SIGNALFD    1
18*0Sigor@sysoev.ru #define NXT_HAVE_ACCEPT4     1
19*0Sigor@sysoev.ru 
20*0Sigor@sysoev.ru /* Linux epoll declarations */
21*0Sigor@sysoev.ru 
22*0Sigor@sysoev.ru #define EPOLLIN        0x00000001
23*0Sigor@sysoev.ru #define EPOLLPRI       0x00000002
24*0Sigor@sysoev.ru #define EPOLLOUT       0x00000004
25*0Sigor@sysoev.ru #define EPOLLERR       0x00000008
26*0Sigor@sysoev.ru #define EPOLLHUP       0x00000010
27*0Sigor@sysoev.ru #define EPOLLRDNORM    0x00000040
28*0Sigor@sysoev.ru #define EPOLLRDBAND    0x00000080
29*0Sigor@sysoev.ru #define EPOLLWRNORM    00000x0100
30*0Sigor@sysoev.ru #define EPOLLWRBAND    0x00000200
31*0Sigor@sysoev.ru #define EPOLLMSG       0x00000400
32*0Sigor@sysoev.ru #define EPOLLRDHUP     0x00002000
33*0Sigor@sysoev.ru 
34*0Sigor@sysoev.ru #define EPOLLET        0x80000000
35*0Sigor@sysoev.ru #define EPOLLONESHOT   0x40000000
36*0Sigor@sysoev.ru 
37*0Sigor@sysoev.ru #define EPOLL_CTL_ADD  1
38*0Sigor@sysoev.ru #define EPOLL_CTL_DEL  2
39*0Sigor@sysoev.ru #define EPOLL_CTL_MOD  3
40*0Sigor@sysoev.ru 
41*0Sigor@sysoev.ru #define EFD_SEMAPHORE  1
42*0Sigor@sysoev.ru #define EFD_NONBLOCK   04000
43*0Sigor@sysoev.ru 
44*0Sigor@sysoev.ru 
45*0Sigor@sysoev.ru typedef union epoll_data {
46*0Sigor@sysoev.ru     void               *ptr;
47*0Sigor@sysoev.ru     int                fd;
48*0Sigor@sysoev.ru     uint32_t           u32;
49*0Sigor@sysoev.ru     uint64_t           u64;
50*0Sigor@sysoev.ru } epoll_data_t;
51*0Sigor@sysoev.ru 
52*0Sigor@sysoev.ru 
53*0Sigor@sysoev.ru struct epoll_event {
54*0Sigor@sysoev.ru     uint32_t           events;
55*0Sigor@sysoev.ru     epoll_data_t       data;
56*0Sigor@sysoev.ru };
57*0Sigor@sysoev.ru 
58*0Sigor@sysoev.ru 
59*0Sigor@sysoev.ru struct signalfd_siginfo {
60*0Sigor@sysoev.ru     uint32_t           ssi_signo;   /* Signal number */
61*0Sigor@sysoev.ru     int32_t            ssi_errno;   /* Error number (unused) */
62*0Sigor@sysoev.ru     int32_t            ssi_code;    /* Signal code */
63*0Sigor@sysoev.ru     uint32_t           ssi_pid;     /* PID of sender */
64*0Sigor@sysoev.ru     uint32_t           ssi_uid;     /* Real UID of sender */
65*0Sigor@sysoev.ru     int32_t            ssi_fd;      /* File descriptor (SIGIO) */
66*0Sigor@sysoev.ru     uint32_t           ssi_tid;     /* Kernel timer ID (POSIX timers) */
67*0Sigor@sysoev.ru     uint32_t           ssi_band;    /* Band event (SIGIO) */
68*0Sigor@sysoev.ru     uint32_t           ssi_overrun; /* POSIX timer overrun count */
69*0Sigor@sysoev.ru     uint32_t           ssi_trapno;  /* Trap number that caused signal */
70*0Sigor@sysoev.ru     int32_t            ssi_status;  /* Exit status or signal (SIGCHLD) */
71*0Sigor@sysoev.ru     int32_t            ssi_int;     /* Integer sent by sigqueue(2) */
72*0Sigor@sysoev.ru     uint64_t           ssi_ptr;     /* Pointer sent by sigqueue(2) */
73*0Sigor@sysoev.ru     uint64_t           ssi_utime;   /* User CPU time consumed (SIGCHLD) */
74*0Sigor@sysoev.ru     uint64_t           ssi_stime;   /* System CPU time consumed (SIGCHLD) */
75*0Sigor@sysoev.ru     uint64_t           ssi_addr;    /* Address that generated signal
76*0Sigor@sysoev.ru                                        (for hardware-generated signals) */
77*0Sigor@sysoev.ru     uint8_t            pad[8];      /* Pad size to 128 bytes (allow for
78*0Sigor@sysoev.ru                                        additional fields in the future) */
79*0Sigor@sysoev.ru };
80*0Sigor@sysoev.ru 
81*0Sigor@sysoev.ru 
82*0Sigor@sysoev.ru int epoll_create(int size);
83*0Sigor@sysoev.ru int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
84*0Sigor@sysoev.ru int epoll_wait(int epfd, struct epoll_event *events, int nevents, int timeout);
85*0Sigor@sysoev.ru 
86*0Sigor@sysoev.ru int eventfd(u_int initval, int flags);
87*0Sigor@sysoev.ru int signalfd(int fd, const sigset_t *mask, int flags);
88*0Sigor@sysoev.ru 
89*0Sigor@sysoev.ru #define SOCK_NONBLOCK  04000
90*0Sigor@sysoev.ru 
91*0Sigor@sysoev.ru int accept4(int sockfd, struct sockaddr *addr, socklen_t *addrlen, int flags);
92*0Sigor@sysoev.ru 
93*0Sigor@sysoev.ru #endif
94*0Sigor@sysoev.ru 
95*0Sigor@sysoev.ru 
96*0Sigor@sysoev.ru #if (NXT_TEST_BUILD_EVENTPORT)
97*0Sigor@sysoev.ru 
98*0Sigor@sysoev.ru #include <poll.h>
99*0Sigor@sysoev.ru 
100*0Sigor@sysoev.ru #define NXT_HAVE_EVENTPORT  1
101*0Sigor@sysoev.ru 
102*0Sigor@sysoev.ru #define ushort_t  u_short
103*0Sigor@sysoev.ru #define uint_t    u_int
104*0Sigor@sysoev.ru 
105*0Sigor@sysoev.ru /* Solaris eventport declarations */
106*0Sigor@sysoev.ru 
107*0Sigor@sysoev.ru #define PORT_SOURCE_AIO    1
108*0Sigor@sysoev.ru #define PORT_SOURCE_TIMER  2
109*0Sigor@sysoev.ru #define PORT_SOURCE_USER   3
110*0Sigor@sysoev.ru #define PORT_SOURCE_FD     4
111*0Sigor@sysoev.ru #define PORT_SOURCE_ALERT  5
112*0Sigor@sysoev.ru #define PORT_SOURCE_MQ     6
113*0Sigor@sysoev.ru #define PORT_SOURCE_FILE   7
114*0Sigor@sysoev.ru 
115*0Sigor@sysoev.ru #ifndef ETIME
116*0Sigor@sysoev.ru #define ETIME              62
117*0Sigor@sysoev.ru #endif
118*0Sigor@sysoev.ru 
119*0Sigor@sysoev.ru 
120*0Sigor@sysoev.ru typedef struct {
121*0Sigor@sysoev.ru     int                    portev_events;  /* event data is source specific */
122*0Sigor@sysoev.ru     ushort_t               portev_source;  /* event source */
123*0Sigor@sysoev.ru     ushort_t               portev_pad;     /* port internal use */
124*0Sigor@sysoev.ru     uintptr_t              portev_object;  /* source specific object */
125*0Sigor@sysoev.ru     void                   *portev_user;   /* user cookie */
126*0Sigor@sysoev.ru } port_event_t;
127*0Sigor@sysoev.ru 
128*0Sigor@sysoev.ru 
129*0Sigor@sysoev.ru typedef struct timespec  timespec_t;
130*0Sigor@sysoev.ru typedef struct timespec  timestruc_t;
131*0Sigor@sysoev.ru 
132*0Sigor@sysoev.ru 
133*0Sigor@sysoev.ru typedef struct file_obj {
134*0Sigor@sysoev.ru     timestruc_t            fo_atime;       /* Access time from stat(2) */
135*0Sigor@sysoev.ru     timestruc_t            fo_mtime;       /* Modification time from stat(2) */
136*0Sigor@sysoev.ru     timestruc_t            fo_ctime;       /* Change time from stat(2) */
137*0Sigor@sysoev.ru     uintptr_t              fo_pad[3];      /* For future expansion */
138*0Sigor@sysoev.ru     char                   *fo_name;       /* Null terminated file name */
139*0Sigor@sysoev.ru } file_obj_t;
140*0Sigor@sysoev.ru 
141*0Sigor@sysoev.ru 
142*0Sigor@sysoev.ru int port_create(void);
143*0Sigor@sysoev.ru int port_associate(int port, int source, uintptr_t object, int events,
144*0Sigor@sysoev.ru     void *user);
145*0Sigor@sysoev.ru int port_dissociate(int port, int source, uintptr_t object);
146*0Sigor@sysoev.ru int port_send(int port, int events, void *user);
147*0Sigor@sysoev.ru int port_getn(int port, port_event_t list[], uint_t max, uint_t *nget,
148*0Sigor@sysoev.ru     const timespec_t *timeout);
149*0Sigor@sysoev.ru 
150*0Sigor@sysoev.ru #endif
151*0Sigor@sysoev.ru 
152*0Sigor@sysoev.ru 
153*0Sigor@sysoev.ru #if (NXT_TEST_BUILD_DEVPOLL)
154*0Sigor@sysoev.ru 
155*0Sigor@sysoev.ru #define NXT_HAVE_DEVPOLL  1
156*0Sigor@sysoev.ru 
157*0Sigor@sysoev.ru #include <poll.h>
158*0Sigor@sysoev.ru #include <sys/ioctl.h>
159*0Sigor@sysoev.ru 
160*0Sigor@sysoev.ru /* Solaris /dev/poll declarations */
161*0Sigor@sysoev.ru 
162*0Sigor@sysoev.ru #define POLLREMOVE      0x0800
163*0Sigor@sysoev.ru #define DP_POLL         0xD001
164*0Sigor@sysoev.ru #define DP_ISPOLLED     0xD002
165*0Sigor@sysoev.ru 
166*0Sigor@sysoev.ru 
167*0Sigor@sysoev.ru struct dvpoll {
168*0Sigor@sysoev.ru     struct pollfd       *dp_fds;
169*0Sigor@sysoev.ru     int                 dp_nfds;
170*0Sigor@sysoev.ru     int                 dp_timeout;
171*0Sigor@sysoev.ru };
172*0Sigor@sysoev.ru 
173*0Sigor@sysoev.ru #endif
174*0Sigor@sysoev.ru 
175*0Sigor@sysoev.ru 
176*0Sigor@sysoev.ru #if (NXT_TEST_BUILD_POLLSET)
177*0Sigor@sysoev.ru 
178*0Sigor@sysoev.ru #define NXT_HAVE_POLLSET  1
179*0Sigor@sysoev.ru 
180*0Sigor@sysoev.ru #include <poll.h>
181*0Sigor@sysoev.ru 
182*0Sigor@sysoev.ru /* AIX pollset declarations */
183*0Sigor@sysoev.ru 
184*0Sigor@sysoev.ru #define PS_ADD          0x0
185*0Sigor@sysoev.ru #define PS_MOD          0x1
186*0Sigor@sysoev.ru #define PS_DELETE       0x2
187*0Sigor@sysoev.ru 
188*0Sigor@sysoev.ru 
189*0Sigor@sysoev.ru typedef int             pollset_t;
190*0Sigor@sysoev.ru 
191*0Sigor@sysoev.ru struct poll_ctl {
192*0Sigor@sysoev.ru     short               cmd;
193*0Sigor@sysoev.ru     short               events;
194*0Sigor@sysoev.ru     int                 fd;
195*0Sigor@sysoev.ru };
196*0Sigor@sysoev.ru 
197*0Sigor@sysoev.ru 
198*0Sigor@sysoev.ru pollset_t pollset_create(int maxfd);
199*0Sigor@sysoev.ru int pollset_destroy(pollset_t ps);
200*0Sigor@sysoev.ru int pollset_query(pollset_t ps, struct pollfd *pollfd_query);
201*0Sigor@sysoev.ru int pollset_ctl(pollset_t ps, struct poll_ctl *pollctl_array, int array_length);
202*0Sigor@sysoev.ru int pollset_poll(pollset_t ps, struct pollfd *polldata_array, int array_length,
203*0Sigor@sysoev.ru     int timeout);
204*0Sigor@sysoev.ru 
205*0Sigor@sysoev.ru #endif
206*0Sigor@sysoev.ru 
207*0Sigor@sysoev.ru 
208*0Sigor@sysoev.ru #if (NXT_TEST_BUILD_FREEBSD_SENDFILE || NXT_TEST_BUILD_MACOSX_SENDFILE)
209*0Sigor@sysoev.ru 
210*0Sigor@sysoev.ru #if !(NXT_FREEBSD) && !(NXT_MACOSX)
211*0Sigor@sysoev.ru 
212*0Sigor@sysoev.ru struct sf_hdtr {
213*0Sigor@sysoev.ru     struct iovec  *headers;
214*0Sigor@sysoev.ru     int           hdr_cnt;
215*0Sigor@sysoev.ru     struct iovec  *trailers;
216*0Sigor@sysoev.ru     int           trl_cnt;
217*0Sigor@sysoev.ru };
218*0Sigor@sysoev.ru 
219*0Sigor@sysoev.ru #endif
220*0Sigor@sysoev.ru 
221*0Sigor@sysoev.ru #endif
222*0Sigor@sysoev.ru 
223*0Sigor@sysoev.ru 
224*0Sigor@sysoev.ru #if (NXT_TEST_BUILD_SOLARIS_SENDFILEV)
225*0Sigor@sysoev.ru 
226*0Sigor@sysoev.ru /* Solaris declarations */
227*0Sigor@sysoev.ru 
228*0Sigor@sysoev.ru typedef struct sendfilevec {
229*0Sigor@sysoev.ru     int     sfv_fd;
230*0Sigor@sysoev.ru     u_int   sfv_flag;
231*0Sigor@sysoev.ru     off_t   sfv_off;
232*0Sigor@sysoev.ru     size_t  sfv_len;
233*0Sigor@sysoev.ru } sendfilevec_t;
234*0Sigor@sysoev.ru 
235*0Sigor@sysoev.ru #define SFV_FD_SELF  -2
236*0Sigor@sysoev.ru 
237*0Sigor@sysoev.ru ssize_t sendfilev(int fd, const struct sendfilevec *vec, int sfvcnt,
238*0Sigor@sysoev.ru     size_t *xferred);
239*0Sigor@sysoev.ru 
240*0Sigor@sysoev.ru #endif
241*0Sigor@sysoev.ru 
242*0Sigor@sysoev.ru 
243*0Sigor@sysoev.ru #if (NXT_TEST_BUILD_AIX_SEND_FILE)
244*0Sigor@sysoev.ru 
245*0Sigor@sysoev.ru #ifndef uint_t
246*0Sigor@sysoev.ru #define uint_t    u_int
247*0Sigor@sysoev.ru #endif
248*0Sigor@sysoev.ru 
249*0Sigor@sysoev.ru struct sf_parms {
250*0Sigor@sysoev.ru     void      *header_data;
251*0Sigor@sysoev.ru     uint_t    header_length;
252*0Sigor@sysoev.ru 
253*0Sigor@sysoev.ru     int       file_descriptor;
254*0Sigor@sysoev.ru     uint64_t  file_size;
255*0Sigor@sysoev.ru     uint64_t  file_offset;
256*0Sigor@sysoev.ru     int64_t   file_bytes;
257*0Sigor@sysoev.ru 
258*0Sigor@sysoev.ru     void      *trailer_data;
259*0Sigor@sysoev.ru     uint_t    trailer_length;
260*0Sigor@sysoev.ru 
261*0Sigor@sysoev.ru     uint64_t  bytes_sent;
262*0Sigor@sysoev.ru };
263*0Sigor@sysoev.ru 
264*0Sigor@sysoev.ru #define SF_CLOSE       0x00000001  /* close the socket after completion */
265*0Sigor@sysoev.ru #define SF_REUSE       0x00000002  /* reuse socket. not supported */
266*0Sigor@sysoev.ru #define SF_DONT_CACHE  0x00000004  /* don't apply network buffer cache */
267*0Sigor@sysoev.ru #define SF_SYNC_CACHE  0x00000008  /* sync/update network buffer cache */
268*0Sigor@sysoev.ru 
269*0Sigor@sysoev.ru ssize_t send_file(int *s, struct sf_parms *sf_iobuf, uint_t flags);
270*0Sigor@sysoev.ru 
271*0Sigor@sysoev.ru #endif
272*0Sigor@sysoev.ru 
273*0Sigor@sysoev.ru 
274*0Sigor@sysoev.ru #endif /* _NXT_UNIX_TEST_BUILD_H_INCLUDED_ */
275