1*76404edcSAsim Jamshed #ifndef __EVENT_CALLBACK_H_ 2*76404edcSAsim Jamshed #define __EVENT_CALLBACK_H_ 3*76404edcSAsim Jamshed 4*76404edcSAsim Jamshed #ifndef NEWEV 5*76404edcSAsim Jamshed 6*76404edcSAsim Jamshed #include <stdint.h> 7*76404edcSAsim Jamshed #include <sys/queue.h> 8*76404edcSAsim Jamshed #include "mos_api.h" 9*76404edcSAsim Jamshed /*----------------------------------------------------------------------------*/ 10*76404edcSAsim Jamshed typedef struct socket_map * socket_map_t; 11*76404edcSAsim Jamshed 12*76404edcSAsim Jamshed /* configuration */ 13*76404edcSAsim Jamshed #define NUM_EV_TABLE 100 14*76404edcSAsim Jamshed 15*76404edcSAsim Jamshed /* event representation 16*76404edcSAsim Jamshed * identification (ID): type: event_t (uint64_t), range: 0x1, 0x2, 0x4, ... 17*76404edcSAsim Jamshed * index (IDX): type: int8_t, range: 0 ~ 63 */ 18*76404edcSAsim Jamshed 19*76404edcSAsim Jamshed /** maximum number of event (== 64) */ 20*76404edcSAsim Jamshed #define MAX_EV (8 * sizeof(event_t)) 21*76404edcSAsim Jamshed #define BEV_OFFSET 0 22*76404edcSAsim Jamshed #define UDE_OFFSET 32 23*76404edcSAsim Jamshed #define NUM_BEV 12 24*76404edcSAsim Jamshed 25*76404edcSAsim Jamshed struct ev_table { 26*76404edcSAsim Jamshed struct { 27*76404edcSAsim Jamshed callback_t cb; /**< callback function pointer */ 28*76404edcSAsim Jamshed int ref; /**< number of flows which are referring this `cb` */ 29*76404edcSAsim Jamshed } ent[MAX_EV]; /**< table entry */ 30*76404edcSAsim Jamshed 31*76404edcSAsim Jamshed event_t map; /**< A bit is 1 if the corresponding `ent` is occupied 32*76404edcSAsim Jamshed by any flow. This is to speed up callback registration. */ 33*76404edcSAsim Jamshed 34*76404edcSAsim Jamshed TAILQ_ENTRY(ev_table) link; /**< TAILQ link */ 35*76404edcSAsim Jamshed }; 36*76404edcSAsim Jamshed 37*76404edcSAsim Jamshed struct ev_pointer { 38*76404edcSAsim Jamshed uint64_t cb_map; /**< map of registered callback */ 39*76404edcSAsim Jamshed uint64_t ft_map; /**< map of registered fltrs. Automatically updated by 40*76404edcSAsim Jamshed `mtcp_register_callback()` or 41*76404edcSAsim Jamshed `mtcp_unregister_callback()` */ 42*76404edcSAsim Jamshed 43*76404edcSAsim Jamshed struct ev_table *evt; /**< pointer to `struct ev_table` in 44*76404edcSAsim Jamshed `struct ev_base` */ 45*76404edcSAsim Jamshed }; 46*76404edcSAsim Jamshed 47*76404edcSAsim Jamshed struct ev_base { 48*76404edcSAsim Jamshed /** Default event pointer. 49*76404edcSAsim Jamshed * This will be copied to every new monitor stream socket. 50*76404edcSAsim Jamshed * dflt_evp.evt always points default event table. */ 51*76404edcSAsim Jamshed struct ev_pointer dflt_evp; 52*76404edcSAsim Jamshed /** List of event tables. 53*76404edcSAsim Jamshed * TAILQ_FIRST(`evth`) will return current default event table. */ 54*76404edcSAsim Jamshed TAILQ_HEAD(, ev_table) evth; 55*76404edcSAsim Jamshed }; 56*76404edcSAsim Jamshed /*----------------------------------------------------------------------------*/ 57*76404edcSAsim Jamshed /* Event's global initialization (only one CPU core should run this) */ 58*76404edcSAsim Jamshed void 59*76404edcSAsim Jamshed GlobInitEvent(void); 60*76404edcSAsim Jamshed 61*76404edcSAsim Jamshed void 62*76404edcSAsim Jamshed InitEvent(mtcp_manager_t mtcp, int num_evt); 63*76404edcSAsim Jamshed 64*76404edcSAsim Jamshed void 65*76404edcSAsim Jamshed InitEvP(struct ev_pointer *evp, struct ev_base *evb); 66*76404edcSAsim Jamshed 67*76404edcSAsim Jamshed void 68*76404edcSAsim Jamshed CleanupEvP(struct ev_pointer *evp); 69*76404edcSAsim Jamshed 70*76404edcSAsim Jamshed void 71*76404edcSAsim Jamshed InitEvB(mtcp_manager_t mtcp, struct ev_base *evb); 72*76404edcSAsim Jamshed 73*76404edcSAsim Jamshed void 74*76404edcSAsim Jamshed CleanupEvB(mtcp_manager_t mtcp, struct ev_base *evb); 75*76404edcSAsim Jamshed 76*76404edcSAsim Jamshed extern inline void 77*76404edcSAsim Jamshed HandleCallback(mtcp_manager_t mtcp, uint32_t hook, 78*76404edcSAsim Jamshed socket_map_t socket, int side, struct pkt_ctx *pctx, event_t events); 79*76404edcSAsim Jamshed 80*76404edcSAsim Jamshed #endif 81*76404edcSAsim Jamshed 82*76404edcSAsim Jamshed #endif /* __EVENT_CALLBACK_H_ */ 83