1*76404edcSAsim Jamshed #ifndef __TIMER_H_ 2*76404edcSAsim Jamshed #define __TIMER_H_ 3*76404edcSAsim Jamshed 4*76404edcSAsim Jamshed #include "mtcp.h" 5*76404edcSAsim Jamshed #include "tcp_stream.h" 6*76404edcSAsim Jamshed 7*76404edcSAsim Jamshed #define RTO_HASH 2048 8*76404edcSAsim Jamshed 9*76404edcSAsim Jamshed #define TIMEVAL_LT(a, b) \ 10*76404edcSAsim Jamshed (((a)->tv_sec < (b)->tv_sec) ? 1 : \ 11*76404edcSAsim Jamshed ((a)->tv_sec < (b)->tv_sec) ? 1 : \ 12*76404edcSAsim Jamshed ((a)->tv_usec < (b)->tv_usec) ? 1 : 0) 13*76404edcSAsim Jamshed 14*76404edcSAsim Jamshed struct timer { 15*76404edcSAsim Jamshed int id; 16*76404edcSAsim Jamshed struct timeval exp; /* expiration time */ 17*76404edcSAsim Jamshed callback_t cb; 18*76404edcSAsim Jamshed 19*76404edcSAsim Jamshed TAILQ_ENTRY(timer) timer_link; 20*76404edcSAsim Jamshed }; 21*76404edcSAsim Jamshed 22*76404edcSAsim Jamshed struct rto_hashstore 23*76404edcSAsim Jamshed { 24*76404edcSAsim Jamshed uint32_t rto_now_idx; // pointing the hs_table_s index 25*76404edcSAsim Jamshed uint32_t rto_now_ts; // 26*76404edcSAsim Jamshed 27*76404edcSAsim Jamshed TAILQ_HEAD(rto_head , tcp_stream) rto_list[RTO_HASH+1]; 28*76404edcSAsim Jamshed }; 29*76404edcSAsim Jamshed 30*76404edcSAsim Jamshed struct rto_hashstore* 31*76404edcSAsim Jamshed InitRTOHashstore(); 32*76404edcSAsim Jamshed 33*76404edcSAsim Jamshed extern inline void 34*76404edcSAsim Jamshed AddtoRTOList(mtcp_manager_t mtcp, tcp_stream *cur_stream); 35*76404edcSAsim Jamshed 36*76404edcSAsim Jamshed extern inline void 37*76404edcSAsim Jamshed RemoveFromRTOList(mtcp_manager_t mtcp, tcp_stream *cur_stream); 38*76404edcSAsim Jamshed 39*76404edcSAsim Jamshed extern inline void 40*76404edcSAsim Jamshed AddtoTimewaitList(mtcp_manager_t mtcp, tcp_stream *cur_stream, uint32_t cur_ts); 41*76404edcSAsim Jamshed 42*76404edcSAsim Jamshed extern inline void 43*76404edcSAsim Jamshed RemoveFromTimewaitList(mtcp_manager_t mtcp, tcp_stream *cur_stream); 44*76404edcSAsim Jamshed 45*76404edcSAsim Jamshed extern inline void 46*76404edcSAsim Jamshed AddtoTimeoutList(mtcp_manager_t mtcp, tcp_stream *cur_stream); 47*76404edcSAsim Jamshed 48*76404edcSAsim Jamshed extern inline void 49*76404edcSAsim Jamshed RemoveFromTimeoutList(mtcp_manager_t mtcp, tcp_stream *cur_stream); 50*76404edcSAsim Jamshed 51*76404edcSAsim Jamshed extern inline void 52*76404edcSAsim Jamshed UpdateTimeoutList(mtcp_manager_t mtcp, tcp_stream *cur_stream); 53*76404edcSAsim Jamshed 54*76404edcSAsim Jamshed extern inline void 55*76404edcSAsim Jamshed UpdateRetransmissionTimer(mtcp_manager_t mtcp, 56*76404edcSAsim Jamshed tcp_stream *cur_stream, uint32_t cur_ts); 57*76404edcSAsim Jamshed 58*76404edcSAsim Jamshed void 59*76404edcSAsim Jamshed CheckRtmTimeout(mtcp_manager_t mtcp, uint32_t cur_ts, int thresh); 60*76404edcSAsim Jamshed 61*76404edcSAsim Jamshed void 62*76404edcSAsim Jamshed CheckTimewaitExpire(mtcp_manager_t mtcp, uint32_t cur_ts, int thresh); 63*76404edcSAsim Jamshed 64*76404edcSAsim Jamshed void 65*76404edcSAsim Jamshed CheckConnectionTimeout(mtcp_manager_t mtcp, uint32_t cur_ts, int thresh); 66*76404edcSAsim Jamshed 67*76404edcSAsim Jamshed void 68*76404edcSAsim Jamshed DelTimer(mtcp_manager_t mtcp, struct timer *timer); 69*76404edcSAsim Jamshed 70*76404edcSAsim Jamshed #endif /* __TIMER_H_ */ 71