1*76404edcSAsim Jamshed #ifndef __SOCKET_H_ 2*76404edcSAsim Jamshed #define __SOCKET_H_ 3*76404edcSAsim Jamshed 4*76404edcSAsim Jamshed #include <sys/queue.h> 5*76404edcSAsim Jamshed #include "tcp_stream_queue.h" 6*76404edcSAsim Jamshed #include "mtcp_epoll.h" 7*76404edcSAsim Jamshed #include "mos_api.h" 8*76404edcSAsim Jamshed #include "bpf/sfbpf.h" 9*76404edcSAsim Jamshed #include "bpf/sfbpf_dlt.h" 10*76404edcSAsim Jamshed #include "event_callback.h" 11*76404edcSAsim Jamshed #include "tcp_rb.h" 12*76404edcSAsim Jamshed #include "scalable_event.h" 13*76404edcSAsim Jamshed 14*76404edcSAsim Jamshed /*----------------------------------------------------------------------------*/ 15*76404edcSAsim Jamshed #ifndef __SOCKET_MAP 16*76404edcSAsim Jamshed #define __SOCKET_MAP 17*76404edcSAsim Jamshed typedef struct socket_map * socket_map_t; 18*76404edcSAsim Jamshed #endif 19*76404edcSAsim Jamshed /*----------------------------------------------------------------------------*/ 20*76404edcSAsim Jamshed enum socket_opts 21*76404edcSAsim Jamshed { 22*76404edcSAsim Jamshed MTCP_NONBLOCK = 0x01, 23*76404edcSAsim Jamshed MTCP_ADDR_BIND = 0x02, 24*76404edcSAsim Jamshed }; 25*76404edcSAsim Jamshed /*----------------------------------------------------------------------------*/ 26*76404edcSAsim Jamshed struct tcp_listener 27*76404edcSAsim Jamshed { 28*76404edcSAsim Jamshed int sockid; 29*76404edcSAsim Jamshed socket_map_t socket; 30*76404edcSAsim Jamshed 31*76404edcSAsim Jamshed int backlog; 32*76404edcSAsim Jamshed stream_queue_t acceptq; 33*76404edcSAsim Jamshed 34*76404edcSAsim Jamshed pthread_mutex_t accept_lock; 35*76404edcSAsim Jamshed pthread_cond_t accept_cond; 36*76404edcSAsim Jamshed }; 37*76404edcSAsim Jamshed /*----------------------------------------------------------------------------*/ 38*76404edcSAsim Jamshed struct mon_listener 39*76404edcSAsim Jamshed { 40*76404edcSAsim Jamshed socket_map_t socket; 41*76404edcSAsim Jamshed void *uctx; 42*76404edcSAsim Jamshed 43*76404edcSAsim Jamshed uint8_t ude_id; 44*76404edcSAsim Jamshed uint8_t client_buf_mgmt: 2, /* controls different buf mgmt modes (client-side) */ 45*76404edcSAsim Jamshed server_buf_mgmt: 2, /* controls different buf mgmt modes (server-side) */ 46*76404edcSAsim Jamshed client_mon: 1, /* controls client-side monitoring */ 47*76404edcSAsim Jamshed server_mon: 1, /* controls server-side monitoring */ 48*76404edcSAsim Jamshed is_stream_syn_filter_hit: 1; 49*76404edcSAsim Jamshed 50*76404edcSAsim Jamshed // struct sfbpf_program fcode; 51*76404edcSAsim Jamshed 52*76404edcSAsim Jamshed union { 53*76404edcSAsim Jamshed /** For MOS_SOCK_MONITOR_RAW type socket **/ 54*76404edcSAsim Jamshed struct sfbpf_program raw_pkt_fcode; 55*76404edcSAsim Jamshed /** For MOS_SOCK_MONITOR_STREAM type socket **/ 56*76404edcSAsim Jamshed struct { 57*76404edcSAsim Jamshed struct sfbpf_program stream_syn_fcode; 58*76404edcSAsim Jamshed struct sfbpf_program stream_orphan_fcode; 59*76404edcSAsim Jamshed }; 60*76404edcSAsim Jamshed }; 61*76404edcSAsim Jamshed 62*76404edcSAsim Jamshed struct event_queue *eq; 63*76404edcSAsim Jamshed 64*76404edcSAsim Jamshed #ifdef NEWEV 65*76404edcSAsim Jamshed stree_t *stree_dontcare; 66*76404edcSAsim Jamshed stree_t *stree_pre_rcv; 67*76404edcSAsim Jamshed stree_t *stree_post_snd; 68*76404edcSAsim Jamshed #else 69*76404edcSAsim Jamshed struct ev_base dontcare_evb; 70*76404edcSAsim Jamshed struct ev_base pre_tcp_evb; 71*76404edcSAsim Jamshed struct ev_base post_tcp_evb; 72*76404edcSAsim Jamshed #endif 73*76404edcSAsim Jamshed 74*76404edcSAsim Jamshed TAILQ_ENTRY(mon_listener) link; 75*76404edcSAsim Jamshed }; 76*76404edcSAsim Jamshed /*----------------------------------------------------------------------------*/ 77*76404edcSAsim Jamshed struct mon_stream 78*76404edcSAsim Jamshed { 79*76404edcSAsim Jamshed socket_map_t socket; 80*76404edcSAsim Jamshed struct tcp_stream *stream; 81*76404edcSAsim Jamshed void *uctx; 82*76404edcSAsim Jamshed 83*76404edcSAsim Jamshed /* 84*76404edcSAsim Jamshed * offset that points to the monitoring stream offset. 85*76404edcSAsim Jamshed * This variable will eventually be moved to socket. 86*76404edcSAsim Jamshed */ 87*76404edcSAsim Jamshed loff_t peek_offset[MOS_SIDE_BOTH]; 88*76404edcSAsim Jamshed struct mon_listener *monitor_listener; 89*76404edcSAsim Jamshed 90*76404edcSAsim Jamshed #ifdef NEWEV 91*76404edcSAsim Jamshed stree_t *stree_dontcare; 92*76404edcSAsim Jamshed stree_t *stree_pre_rcv; 93*76404edcSAsim Jamshed stree_t *stree_post_snd; 94*76404edcSAsim Jamshed #else 95*76404edcSAsim Jamshed struct ev_pointer dontcare_evp; 96*76404edcSAsim Jamshed struct ev_pointer pre_tcp_evp; 97*76404edcSAsim Jamshed struct ev_pointer post_tcp_evp; 98*76404edcSAsim Jamshed #endif 99*76404edcSAsim Jamshed 100*76404edcSAsim Jamshed uint8_t client_buf_mgmt: 2, 101*76404edcSAsim Jamshed server_buf_mgmt: 2, 102*76404edcSAsim Jamshed client_mon: 1, 103*76404edcSAsim Jamshed server_mon: 1; 104*76404edcSAsim Jamshed }; 105*76404edcSAsim Jamshed /*----------------------------------------------------------------------------*/ 106*76404edcSAsim Jamshed struct socket_map 107*76404edcSAsim Jamshed { 108*76404edcSAsim Jamshed int id; 109*76404edcSAsim Jamshed int socktype; 110*76404edcSAsim Jamshed uint32_t opts; 111*76404edcSAsim Jamshed uint8_t forward; 112*76404edcSAsim Jamshed 113*76404edcSAsim Jamshed struct sockaddr_in saddr; 114*76404edcSAsim Jamshed 115*76404edcSAsim Jamshed union { 116*76404edcSAsim Jamshed struct tcp_stream *stream; 117*76404edcSAsim Jamshed struct tcp_listener *listener; 118*76404edcSAsim Jamshed struct mon_listener *monitor_listener; 119*76404edcSAsim Jamshed struct mon_stream *monitor_stream; 120*76404edcSAsim Jamshed struct mtcp_epoll *ep; 121*76404edcSAsim Jamshed struct pipe *pp; 122*76404edcSAsim Jamshed }; 123*76404edcSAsim Jamshed 124*76404edcSAsim Jamshed uint64_t epoll; /* registered events */ 125*76404edcSAsim Jamshed uint64_t events; /* available events */ 126*76404edcSAsim Jamshed mtcp_epoll_data_t ep_data; 127*76404edcSAsim Jamshed 128*76404edcSAsim Jamshed TAILQ_ENTRY (socket_map) link; 129*76404edcSAsim Jamshed }; 130*76404edcSAsim Jamshed /*----------------------------------------------------------------------------*/ 131*76404edcSAsim Jamshed socket_map_t 132*76404edcSAsim Jamshed AllocateSocket(mctx_t mctx, int socktype); 133*76404edcSAsim Jamshed /*----------------------------------------------------------------------------*/ 134*76404edcSAsim Jamshed void 135*76404edcSAsim Jamshed FreeSocket(mctx_t mctx, int sockid, int socktype); 136*76404edcSAsim Jamshed /*----------------------------------------------------------------------------*/ 137*76404edcSAsim Jamshed socket_map_t 138*76404edcSAsim Jamshed GetSocket(mctx_t mctx, int sockid); 139*76404edcSAsim Jamshed /*----------------------------------------------------------------------------*/ 140*76404edcSAsim Jamshed 141*76404edcSAsim Jamshed #endif /* __SOCKET_H_ */ 142