1 #ifndef __SCALABLE_EVENT_H__ 2 #define __SCALABLE_EVENT_H__ 3 /*----------------------------------------------------------------------------*/ 4 #ifdef NEWEV 5 6 #include <tree.h> 7 #include <key_value_store.h> 8 #include <mos_api.h> 9 /*----------------------------------------------------------------------------*/ 10 #ifndef NDEBUG 11 #define FLOOR(x) (((x) > 0) ? (x) : 0) 12 #define gprintf(f, args...) do { \ 13 printf("%-15s:%-4d:%-10.10s: " f, \ 14 &__FILE__[FLOOR(sizeof(__FILE__) - 16)], \ 15 __LINE__, __func__, ##args); \ 16 } while (0) 17 #else /* NDEBUG */ 18 #define gprintf(args...) ((void) 0) 19 #endif 20 21 #ifdef ENABLE_DEBUG_EVENT 22 #define RAISE_DEBUG_EVENT(mtcp, stream, format, args...) \ 23 do { \ 24 mtcp_set_debug_string(mtcp, "[%s:%d] "format, __func__, __LINE__, ##args); \ 25 struct socket_map *walk;\ 26 SOCKQ_FOREACH_START(walk, &cur_stream->msocks) { \ 27 HandleCallback(mtcp, MOS_NULL, walk, (stream)->side, \ 28 NULL, MOS_ON_DEBUG_MESSAGE); \ 29 } SOCKQ_FOREACH_END; \ 30 mtcp_set_debug_string(mtcp, NULL); \ 31 } while (0) 32 #else 33 #define RAISE_DEBUG_EVENT(args...) do {} while (0) 34 #endif 35 36 #ifdef NUM_BEV 37 #undef NUM_BEV 38 #endif 39 #define NUM_BEV 12 40 /*----------------------------------------------------------------------------*/ 41 typedef TAILQ_HEAD(_fq, _tree_node_t) fevq_t; 42 43 typedef struct _tree_node_t { 44 filter_t ft; 45 callback_t cb; 46 event_t ev; 47 struct filter_arg arg; 48 _key_t key; 49 uint32_t is_in_raiseq:1; 50 51 TREE_NODE(_tree_node_t) link; 52 TREE_NODE(_tree_node_t) invk; 53 TAILQ_ENTRY(_tree_node_t) flink; 54 } tree_node_t; 55 56 typedef struct _stree_t { 57 int ref_cnt; 58 uint64_t id; 59 tree_node_t *root; 60 tree_node_t *bevs[NUM_BEV]; 61 62 fevq_t floating_evq; 63 } stree_t; 64 /*----------------------------------------------------------------------------*/ 65 extern inline void 66 stree_inc_ref(stree_t *stree); 67 extern inline void 68 stree_dec_ref(kvs_t *store, stree_t *stree); 69 70 void 71 GlobInitEvent(void); 72 73 void 74 InitEvent(mtcp_manager_t mtcp); 75 76 extern inline void 77 HandleCallback(mtcp_manager_t mtcp, uint32_t hook, 78 socket_map_t socket, int side, struct pkt_ctx *pctx, event_t events); 79 /*----------------------------------------------------------------------------*/ 80 #endif 81 #endif /* __SCALABLE_EVENT_H__ */ 82