haproxy/include/common/epoll.h
Willy Tarreau c3e926bf3b CLEANUP: remove support for Linux i686 vsyscalls
This was introduced 10 years ago to squeeze a few CPU cycles per syscall
on 32-bit x86 machines and was already quite old by then, requiring to
explicitly enable support for this in the kernel. We don't even know if
it still builds, let alone if it works at all on recent kernels! Let's
completely drop this now.
2020-03-10 06:55:52 +01:00

99 lines
2.5 KiB
C

/*
* include/common/epoll.h
* epoll definitions for older libc.
*
* Copyright (C) 2000-2012 Willy Tarreau - w@1wt.eu
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation, version 2.1
* exclusively.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/*
* Those constants were found both in glibc and in the Linux kernel.
* They are provided here because the epoll() syscall is featured in
* some kernels but in not often included in the glibc, so it needs
* just a basic definition.
*/
#ifndef _COMMON_EPOLL_H
#define _COMMON_EPOLL_H
#if defined (__linux__) && defined(USE_EPOLL)
#ifndef USE_MY_EPOLL
#include <sys/epoll.h>
#else
#include <errno.h>
#include <sys/types.h>
#include <linux/unistd.h>
#include <sys/syscall.h>
#include <common/config.h>
#include <common/syscall.h>
/* epoll_ctl() commands */
#ifndef EPOLL_CTL_ADD
#define EPOLL_CTL_ADD 1
#define EPOLL_CTL_DEL 2
#define EPOLL_CTL_MOD 3
#endif
/* events types (bit fields) */
#ifndef EPOLLIN
#define EPOLLIN 1
#define EPOLLPRI 2
#define EPOLLOUT 4
#define EPOLLERR 8
#define EPOLLHUP 16
#define EPOLLONESHOT (1 << 30)
#define EPOLLET (1 << 31)
#endif
struct epoll_event {
uint32_t events;
union {
void *ptr;
int fd;
uint32_t u32;
uint64_t u64;
} data;
};
/* We'll define a syscall, so for this we need __NR_splice. It should have
* been provided by syscall.h.
*/
#if !defined(__NR_epoll_ctl)
#warning unsupported architecture, guessing __NR_epoll_create=254 like x86...
#define __NR_epoll_create 254
#define __NR_epoll_ctl 255
#define __NR_epoll_wait 256
#endif /* __NR_epoll_ctl */
static inline _syscall1 (int, epoll_create, int, size);
static inline _syscall4 (int, epoll_ctl, int, epfd, int, op, int, fd, struct epoll_event *, event);
static inline _syscall4 (int, epoll_wait, int, epfd, struct epoll_event *, events, int, maxevents, int, timeout);
#endif /* USE_MY_EPOLL */
#endif /* __linux__ && USE_EPOLL */
#endif /* _COMMON_EPOLL_H */
/*
* Local variables:
* c-indent-level: 8
* c-basic-offset: 8
* End:
*/