176404edcSAsim Jamshed #ifndef __SCALABLE_EVENT_H__ 276404edcSAsim Jamshed #define __SCALABLE_EVENT_H__ 376404edcSAsim Jamshed /*----------------------------------------------------------------------------*/ 476404edcSAsim Jamshed #ifdef NEWEV 576404edcSAsim Jamshed 676404edcSAsim Jamshed #include <tree.h> 776404edcSAsim Jamshed #include <key_value_store.h> 876404edcSAsim Jamshed #include <mos_api.h> 976404edcSAsim Jamshed /*----------------------------------------------------------------------------*/ 1076404edcSAsim Jamshed #ifndef NDEBUG 1176404edcSAsim Jamshed #define FLOOR(x) (((x) > 0) ? (x) : 0) 1276404edcSAsim Jamshed #define gprintf(f, args...) do { \ 1376404edcSAsim Jamshed printf("%-15s:%-4d:%-10.10s: " f, \ 1476404edcSAsim Jamshed &__FILE__[FLOOR(sizeof(__FILE__) - 16)], \ 1576404edcSAsim Jamshed __LINE__, __func__, ##args); \ 1676404edcSAsim Jamshed } while (0) 1776404edcSAsim Jamshed #else /* NDEBUG */ 1876404edcSAsim Jamshed #define gprintf(args...) ((void) 0) 1976404edcSAsim Jamshed #endif 2076404edcSAsim Jamshed 2176404edcSAsim Jamshed #ifdef ENABLE_DEBUG_EVENT 2276404edcSAsim Jamshed #define RAISE_DEBUG_EVENT(mtcp, stream, format, args...) \ 2376404edcSAsim Jamshed do { \ 2476404edcSAsim Jamshed mtcp_set_debug_string(mtcp, "[%s:%d] "format, __func__, __LINE__, ##args); \ 2576404edcSAsim Jamshed struct socket_map *walk; \ 2676404edcSAsim Jamshed SOCKQ_FOREACH_START(walk, &cur_stream->msocks) { \ 2776404edcSAsim Jamshed HandleCallback(mtcp, MOS_NULL, walk, (stream)->side, \ 2876404edcSAsim Jamshed NULL, MOS_ON_DEBUG_MESSAGE); \ 2976404edcSAsim Jamshed } SOCKQ_FOREACH_END; \ 3076404edcSAsim Jamshed mtcp_set_debug_string(mtcp, NULL); \ 3176404edcSAsim Jamshed } while (0) 3276404edcSAsim Jamshed #else 3376404edcSAsim Jamshed #define RAISE_DEBUG_EVENT(args...) do {} while (0) 3476404edcSAsim Jamshed #endif 3576404edcSAsim Jamshed 3676404edcSAsim Jamshed #ifdef NUM_BEV 3776404edcSAsim Jamshed #undef NUM_BEV 3876404edcSAsim Jamshed #endif 3976404edcSAsim Jamshed #define NUM_BEV 12 4076404edcSAsim Jamshed /*----------------------------------------------------------------------------*/ 4176404edcSAsim Jamshed 4276404edcSAsim Jamshed typedef struct _tree_node_t { 43*a14d6bd4SAsim Jamshed filter_t ft; // filter function 44*a14d6bd4SAsim Jamshed callback_t cb; // callback function 45*a14d6bd4SAsim Jamshed event_t ev; // event id 46*a14d6bd4SAsim Jamshed struct filter_arg arg; // filter argument 47*a14d6bd4SAsim Jamshed // _key_t key; 4876404edcSAsim Jamshed uint32_t is_in_raiseq:1; 4976404edcSAsim Jamshed 50*a14d6bd4SAsim Jamshed TREE_NODE(_tree_node_t) link; // link in the tree 51*a14d6bd4SAsim Jamshed TREE_NODE(_tree_node_t) invk; // inverse link: used for invoking callbacks 52*a14d6bd4SAsim Jamshed // TAILQ_ENTRY(_tree_node_t) flink; 5376404edcSAsim Jamshed } tree_node_t; 5476404edcSAsim Jamshed 5576404edcSAsim Jamshed typedef struct _stree_t { 5676404edcSAsim Jamshed int ref_cnt; 5776404edcSAsim Jamshed uint64_t id; 5876404edcSAsim Jamshed tree_node_t *root; 5976404edcSAsim Jamshed tree_node_t *bevs[NUM_BEV]; 6076404edcSAsim Jamshed } stree_t; 6176404edcSAsim Jamshed /*----------------------------------------------------------------------------*/ 6276404edcSAsim Jamshed extern inline void 6376404edcSAsim Jamshed stree_inc_ref(stree_t *stree); 6476404edcSAsim Jamshed extern inline void 6576404edcSAsim Jamshed stree_dec_ref(kvs_t *store, stree_t *stree); 6676404edcSAsim Jamshed 6776404edcSAsim Jamshed void 6876404edcSAsim Jamshed GlobInitEvent(void); 6976404edcSAsim Jamshed 7076404edcSAsim Jamshed void 7176404edcSAsim Jamshed InitEvent(mtcp_manager_t mtcp); 7276404edcSAsim Jamshed 7376404edcSAsim Jamshed extern inline void 7476404edcSAsim Jamshed HandleCallback(mtcp_manager_t mtcp, uint32_t hook, 7576404edcSAsim Jamshed socket_map_t socket, int side, struct pkt_ctx *pctx, event_t events); 7676404edcSAsim Jamshed /*----------------------------------------------------------------------------*/ 7776404edcSAsim Jamshed #endif 7876404edcSAsim Jamshed #endif /* __SCALABLE_EVENT_H__ */ 79