1*76404edcSAsim Jamshed #ifndef __EVENTPOLL_H_ 2*76404edcSAsim Jamshed #define __EVENTPOLL_H_ 3*76404edcSAsim Jamshed 4*76404edcSAsim Jamshed #include "mtcp_api.h" 5*76404edcSAsim Jamshed #include "mtcp_epoll.h" 6*76404edcSAsim Jamshed 7*76404edcSAsim Jamshed /*----------------------------------------------------------------------------*/ 8*76404edcSAsim Jamshed struct mtcp_epoll_stat 9*76404edcSAsim Jamshed { 10*76404edcSAsim Jamshed uint64_t calls; 11*76404edcSAsim Jamshed uint64_t waits; 12*76404edcSAsim Jamshed uint64_t wakes; 13*76404edcSAsim Jamshed 14*76404edcSAsim Jamshed uint64_t issued; 15*76404edcSAsim Jamshed uint64_t registered; 16*76404edcSAsim Jamshed uint64_t invalidated; 17*76404edcSAsim Jamshed uint64_t handled; 18*76404edcSAsim Jamshed }; 19*76404edcSAsim Jamshed /*----------------------------------------------------------------------------*/ 20*76404edcSAsim Jamshed struct mtcp_epoll_event_int 21*76404edcSAsim Jamshed { 22*76404edcSAsim Jamshed struct mtcp_epoll_event ev; 23*76404edcSAsim Jamshed int sockid; 24*76404edcSAsim Jamshed }; 25*76404edcSAsim Jamshed /*----------------------------------------------------------------------------*/ 26*76404edcSAsim Jamshed enum event_queue_type 27*76404edcSAsim Jamshed { 28*76404edcSAsim Jamshed USR_EVENT_QUEUE = 0, 29*76404edcSAsim Jamshed USR_SHADOW_EVENT_QUEUE = 1, 30*76404edcSAsim Jamshed MOS_EVENT_QUEUE = 2 31*76404edcSAsim Jamshed }; 32*76404edcSAsim Jamshed /*----------------------------------------------------------------------------*/ 33*76404edcSAsim Jamshed struct event_queue 34*76404edcSAsim Jamshed { 35*76404edcSAsim Jamshed struct mtcp_epoll_event_int *events; 36*76404edcSAsim Jamshed int start; // starting index 37*76404edcSAsim Jamshed int end; // ending index 38*76404edcSAsim Jamshed 39*76404edcSAsim Jamshed int size; // max size 40*76404edcSAsim Jamshed int num_events; // number of events 41*76404edcSAsim Jamshed }; 42*76404edcSAsim Jamshed /*----------------------------------------------------------------------------*/ 43*76404edcSAsim Jamshed struct mtcp_epoll 44*76404edcSAsim Jamshed { 45*76404edcSAsim Jamshed struct event_queue *usr_queue; 46*76404edcSAsim Jamshed struct event_queue *usr_shadow_queue; 47*76404edcSAsim Jamshed struct event_queue *mtcp_queue; 48*76404edcSAsim Jamshed 49*76404edcSAsim Jamshed uint8_t waiting; 50*76404edcSAsim Jamshed struct mtcp_epoll_stat stat; 51*76404edcSAsim Jamshed 52*76404edcSAsim Jamshed pthread_cond_t epoll_cond; 53*76404edcSAsim Jamshed pthread_mutex_t epoll_lock; 54*76404edcSAsim Jamshed }; 55*76404edcSAsim Jamshed /*----------------------------------------------------------------------------*/ 56*76404edcSAsim Jamshed 57*76404edcSAsim Jamshed int 58*76404edcSAsim Jamshed CloseEpollSocket(mctx_t mctx, int epid); 59*76404edcSAsim Jamshed 60*76404edcSAsim Jamshed struct event_queue * 61*76404edcSAsim Jamshed CreateEventQueue(int size); 62*76404edcSAsim Jamshed 63*76404edcSAsim Jamshed void 64*76404edcSAsim Jamshed DestroyEventQueue(struct event_queue *eq); 65*76404edcSAsim Jamshed 66*76404edcSAsim Jamshed #endif /* __EVENTPOLL_H_ */ 67