Initial version.
This commit is contained in:
274
src/nxt_test_build.h
Normal file
274
src/nxt_test_build.h
Normal file
@@ -0,0 +1,274 @@
|
||||
|
||||
/*
|
||||
* Copyright (C) Igor Sysoev
|
||||
* Copyright (C) NGINX, Inc.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _NXT_UNIX_TEST_BUILD_H_INCLUDED_
|
||||
#define _NXT_UNIX_TEST_BUILD_H_INCLUDED_
|
||||
|
||||
|
||||
#if (NXT_TEST_BUILD_EPOLL)
|
||||
|
||||
#define NXT_HAVE_EPOLL 1
|
||||
#define NXT_HAVE_EPOLL_EDGE 1
|
||||
#define NXT_HAVE_EVENTFD 1
|
||||
#define NXT_HAVE_SIGNALFD 1
|
||||
#define NXT_HAVE_ACCEPT4 1
|
||||
|
||||
/* Linux epoll declarations */
|
||||
|
||||
#define EPOLLIN 0x00000001
|
||||
#define EPOLLPRI 0x00000002
|
||||
#define EPOLLOUT 0x00000004
|
||||
#define EPOLLERR 0x00000008
|
||||
#define EPOLLHUP 0x00000010
|
||||
#define EPOLLRDNORM 0x00000040
|
||||
#define EPOLLRDBAND 0x00000080
|
||||
#define EPOLLWRNORM 00000x0100
|
||||
#define EPOLLWRBAND 0x00000200
|
||||
#define EPOLLMSG 0x00000400
|
||||
#define EPOLLRDHUP 0x00002000
|
||||
|
||||
#define EPOLLET 0x80000000
|
||||
#define EPOLLONESHOT 0x40000000
|
||||
|
||||
#define EPOLL_CTL_ADD 1
|
||||
#define EPOLL_CTL_DEL 2
|
||||
#define EPOLL_CTL_MOD 3
|
||||
|
||||
#define EFD_SEMAPHORE 1
|
||||
#define EFD_NONBLOCK 04000
|
||||
|
||||
|
||||
typedef union epoll_data {
|
||||
void *ptr;
|
||||
int fd;
|
||||
uint32_t u32;
|
||||
uint64_t u64;
|
||||
} epoll_data_t;
|
||||
|
||||
|
||||
struct epoll_event {
|
||||
uint32_t events;
|
||||
epoll_data_t data;
|
||||
};
|
||||
|
||||
|
||||
struct signalfd_siginfo {
|
||||
uint32_t ssi_signo; /* Signal number */
|
||||
int32_t ssi_errno; /* Error number (unused) */
|
||||
int32_t ssi_code; /* Signal code */
|
||||
uint32_t ssi_pid; /* PID of sender */
|
||||
uint32_t ssi_uid; /* Real UID of sender */
|
||||
int32_t ssi_fd; /* File descriptor (SIGIO) */
|
||||
uint32_t ssi_tid; /* Kernel timer ID (POSIX timers) */
|
||||
uint32_t ssi_band; /* Band event (SIGIO) */
|
||||
uint32_t ssi_overrun; /* POSIX timer overrun count */
|
||||
uint32_t ssi_trapno; /* Trap number that caused signal */
|
||||
int32_t ssi_status; /* Exit status or signal (SIGCHLD) */
|
||||
int32_t ssi_int; /* Integer sent by sigqueue(2) */
|
||||
uint64_t ssi_ptr; /* Pointer sent by sigqueue(2) */
|
||||
uint64_t ssi_utime; /* User CPU time consumed (SIGCHLD) */
|
||||
uint64_t ssi_stime; /* System CPU time consumed (SIGCHLD) */
|
||||
uint64_t ssi_addr; /* Address that generated signal
|
||||
(for hardware-generated signals) */
|
||||
uint8_t pad[8]; /* Pad size to 128 bytes (allow for
|
||||
additional fields in the future) */
|
||||
};
|
||||
|
||||
|
||||
int epoll_create(int size);
|
||||
int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
|
||||
int epoll_wait(int epfd, struct epoll_event *events, int nevents, int timeout);
|
||||
|
||||
int eventfd(u_int initval, int flags);
|
||||
int signalfd(int fd, const sigset_t *mask, int flags);
|
||||
|
||||
#define SOCK_NONBLOCK 04000
|
||||
|
||||
int accept4(int sockfd, struct sockaddr *addr, socklen_t *addrlen, int flags);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#if (NXT_TEST_BUILD_EVENTPORT)
|
||||
|
||||
#include <poll.h>
|
||||
|
||||
#define NXT_HAVE_EVENTPORT 1
|
||||
|
||||
#define ushort_t u_short
|
||||
#define uint_t u_int
|
||||
|
||||
/* Solaris eventport declarations */
|
||||
|
||||
#define PORT_SOURCE_AIO 1
|
||||
#define PORT_SOURCE_TIMER 2
|
||||
#define PORT_SOURCE_USER 3
|
||||
#define PORT_SOURCE_FD 4
|
||||
#define PORT_SOURCE_ALERT 5
|
||||
#define PORT_SOURCE_MQ 6
|
||||
#define PORT_SOURCE_FILE 7
|
||||
|
||||
#ifndef ETIME
|
||||
#define ETIME 62
|
||||
#endif
|
||||
|
||||
|
||||
typedef struct {
|
||||
int portev_events; /* event data is source specific */
|
||||
ushort_t portev_source; /* event source */
|
||||
ushort_t portev_pad; /* port internal use */
|
||||
uintptr_t portev_object; /* source specific object */
|
||||
void *portev_user; /* user cookie */
|
||||
} port_event_t;
|
||||
|
||||
|
||||
typedef struct timespec timespec_t;
|
||||
typedef struct timespec timestruc_t;
|
||||
|
||||
|
||||
typedef struct file_obj {
|
||||
timestruc_t fo_atime; /* Access time from stat(2) */
|
||||
timestruc_t fo_mtime; /* Modification time from stat(2) */
|
||||
timestruc_t fo_ctime; /* Change time from stat(2) */
|
||||
uintptr_t fo_pad[3]; /* For future expansion */
|
||||
char *fo_name; /* Null terminated file name */
|
||||
} file_obj_t;
|
||||
|
||||
|
||||
int port_create(void);
|
||||
int port_associate(int port, int source, uintptr_t object, int events,
|
||||
void *user);
|
||||
int port_dissociate(int port, int source, uintptr_t object);
|
||||
int port_send(int port, int events, void *user);
|
||||
int port_getn(int port, port_event_t list[], uint_t max, uint_t *nget,
|
||||
const timespec_t *timeout);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#if (NXT_TEST_BUILD_DEVPOLL)
|
||||
|
||||
#define NXT_HAVE_DEVPOLL 1
|
||||
|
||||
#include <poll.h>
|
||||
#include <sys/ioctl.h>
|
||||
|
||||
/* Solaris /dev/poll declarations */
|
||||
|
||||
#define POLLREMOVE 0x0800
|
||||
#define DP_POLL 0xD001
|
||||
#define DP_ISPOLLED 0xD002
|
||||
|
||||
|
||||
struct dvpoll {
|
||||
struct pollfd *dp_fds;
|
||||
int dp_nfds;
|
||||
int dp_timeout;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#if (NXT_TEST_BUILD_POLLSET)
|
||||
|
||||
#define NXT_HAVE_POLLSET 1
|
||||
|
||||
#include <poll.h>
|
||||
|
||||
/* AIX pollset declarations */
|
||||
|
||||
#define PS_ADD 0x0
|
||||
#define PS_MOD 0x1
|
||||
#define PS_DELETE 0x2
|
||||
|
||||
|
||||
typedef int pollset_t;
|
||||
|
||||
struct poll_ctl {
|
||||
short cmd;
|
||||
short events;
|
||||
int fd;
|
||||
};
|
||||
|
||||
|
||||
pollset_t pollset_create(int maxfd);
|
||||
int pollset_destroy(pollset_t ps);
|
||||
int pollset_query(pollset_t ps, struct pollfd *pollfd_query);
|
||||
int pollset_ctl(pollset_t ps, struct poll_ctl *pollctl_array, int array_length);
|
||||
int pollset_poll(pollset_t ps, struct pollfd *polldata_array, int array_length,
|
||||
int timeout);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#if (NXT_TEST_BUILD_FREEBSD_SENDFILE || NXT_TEST_BUILD_MACOSX_SENDFILE)
|
||||
|
||||
#if !(NXT_FREEBSD) && !(NXT_MACOSX)
|
||||
|
||||
struct sf_hdtr {
|
||||
struct iovec *headers;
|
||||
int hdr_cnt;
|
||||
struct iovec *trailers;
|
||||
int trl_cnt;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#if (NXT_TEST_BUILD_SOLARIS_SENDFILEV)
|
||||
|
||||
/* Solaris declarations */
|
||||
|
||||
typedef struct sendfilevec {
|
||||
int sfv_fd;
|
||||
u_int sfv_flag;
|
||||
off_t sfv_off;
|
||||
size_t sfv_len;
|
||||
} sendfilevec_t;
|
||||
|
||||
#define SFV_FD_SELF -2
|
||||
|
||||
ssize_t sendfilev(int fd, const struct sendfilevec *vec, int sfvcnt,
|
||||
size_t *xferred);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#if (NXT_TEST_BUILD_AIX_SEND_FILE)
|
||||
|
||||
#ifndef uint_t
|
||||
#define uint_t u_int
|
||||
#endif
|
||||
|
||||
struct sf_parms {
|
||||
void *header_data;
|
||||
uint_t header_length;
|
||||
|
||||
int file_descriptor;
|
||||
uint64_t file_size;
|
||||
uint64_t file_offset;
|
||||
int64_t file_bytes;
|
||||
|
||||
void *trailer_data;
|
||||
uint_t trailer_length;
|
||||
|
||||
uint64_t bytes_sent;
|
||||
};
|
||||
|
||||
#define SF_CLOSE 0x00000001 /* close the socket after completion */
|
||||
#define SF_REUSE 0x00000002 /* reuse socket. not supported */
|
||||
#define SF_DONT_CACHE 0x00000004 /* don't apply network buffer cache */
|
||||
#define SF_SYNC_CACHE 0x00000008 /* sync/update network buffer cache */
|
||||
|
||||
ssize_t send_file(int *s, struct sf_parms *sf_iobuf, uint_t flags);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#endif /* _NXT_UNIX_TEST_BUILD_H_INCLUDED_ */
|
||||
Reference in New Issue
Block a user