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 42 typedef struct _tree_node_t { 43 filter_t ft; // filter function 44 callback_t cb; // callback function 45 event_t ev; // event id 46 struct filter_arg arg; // filter argument 47 // _key_t key; 48 uint32_t is_in_raiseq:1; 49 50 TREE_NODE(_tree_node_t) link; // link in the tree 51 TREE_NODE(_tree_node_t) invk; // inverse link: used for invoking callbacks 52 // TAILQ_ENTRY(_tree_node_t) flink; 53 } tree_node_t; 54 55 typedef struct _stree_t { 56 int ref_cnt; 57 uint64_t id; 58 tree_node_t *root; 59 tree_node_t *bevs[NUM_BEV]; 60 } stree_t; 61 /*----------------------------------------------------------------------------*/ 62 extern inline void 63 stree_inc_ref(stree_t *stree); 64 extern inline void 65 stree_dec_ref(kvs_t *store, stree_t *stree); 66 67 void 68 GlobInitEvent(void); 69 70 void 71 InitEvent(mtcp_manager_t mtcp); 72 73 extern inline void 74 HandleCallback(mtcp_manager_t mtcp, uint32_t hook, 75 socket_map_t socket, int side, struct pkt_ctx *pctx, event_t events); 76 /*----------------------------------------------------------------------------*/ 77 #endif 78 #endif /* __SCALABLE_EVENT_H__ */ 79