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