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