45 #define HAVE_LINUX_EPOLL 47 #ifdef HAVE_LINUX_EPOLL 49 #include <sys/epoll.h> 70 memset (&e, 0,
sizeof (e));
94 struct epoll_event *e;
101 int timeout_ms, max_timeout_ms = 10;
107 timeout_ms = max_timeout_ms;
115 timeout_ms = timeout * 1e3;
118 timeout_ms =
clib_max (1, timeout_ms);
119 timeout_ms =
clib_min (max_timeout_ms, timeout_ms);
142 static sigset_t unblock_all_signals;
143 n_fds_ready = epoll_pwait (em->
epoll_fd,
146 timeout_ms, &unblock_all_signals);
149 if (n_fds_ready < 0 && errno == ENOSYS)
151 n_fds_ready = epoll_wait (em->
epoll_fd,
170 for (e = em->
epoll_events; e < em->epoll_events + n_fds_ready; e++)
179 if (e->events & EPOLLIN)
182 n_errors += errors[n_errors] != 0;
184 if (e->events & EPOLLOUT)
187 n_errors += errors[n_errors] != 0;
195 n_errors += errors[n_errors] != 0;
202 for (i = 0; i < n_errors; i++)
215 .name =
"unix-epoll-input",
sll srl srl sll sra u16x4 i
static void vlib_panic_with_error(vlib_main_t *vm, clib_error_t *error)
unix_file_function_t * read_function
u64 cpu_time_next_process_ready
static u64 clib_cpu_time_now(void)
static u32 vlib_last_vectors_per_main_loop(vlib_main_t *vm)
u32 input_main_loops_per_call
#define VLIB_INIT_FUNCTION(x)
#define clib_warning(format, args...)
#define vec_resize(V, N)
Resize a vector (no header, unspecified alignment) Add N elements to end of given vector V...
#define vlib_call_init_function(vm, x)
#define pool_elt_at_index(p, i)
Returns pointer to element at given index.
static void unix_save_error(unix_main_t *um, clib_error_t *error)
unix_file_function_t * error_function
#define UNIX_FILE_EVENT_EDGE_TRIGGERED
#define clib_error_return_unix(e, args...)
static word unix_error_is_fatal(word error)
struct epoll_event * epoll_events
void(* file_update)(unix_file_t *file, unix_file_update_type_t update_type)
unix_file_function_t * write_function
#define UNIX_FILE_DATA_AVAILABLE_TO_WRITE
#define vec_len(v)
Number of elements in vector (rvalue-only, NULL tolerant)
u32 input_node_counts_by_state[VLIB_N_NODE_STATE]
vlib_node_main_t node_main
volatile u32 api_queue_nonempty
#define VLIB_REGISTER_NODE(x,...)