176404edcSAsim Jamshed #ifndef __TIMER_H_ 276404edcSAsim Jamshed #define __TIMER_H_ 3*786603b0SAsim Jamshed /*----------------------------------------------------------------------------*/ 476404edcSAsim Jamshed #include "mtcp.h" 576404edcSAsim Jamshed #include "tcp_stream.h" 6*786603b0SAsim Jamshed #include <sys/time.h> 7*786603b0SAsim Jamshed /*----------------------------------------------------------------------------*/ 876404edcSAsim Jamshed #define RTO_HASH 2048 9*786603b0SAsim Jamshed /*----------------------------------------------------------------------------*/ 10*786603b0SAsim Jamshed #define TIMEVAL_ADD(a, b) \ 11*786603b0SAsim Jamshed do { (a)->tv_sec += (b)->tv_sec; \ 12*786603b0SAsim Jamshed if (((a)->tv_usec += (b)->tv_usec) > 1000000) { \ 13*786603b0SAsim Jamshed (a)->tv_sec++; (a)->tv_usec -= 1000000; } \ 14*786603b0SAsim Jamshed } while (0) 1576404edcSAsim Jamshed 1676404edcSAsim Jamshed #define TIMEVAL_LT(a, b) \ 17*786603b0SAsim Jamshed timercmp(a, b, <) 18*786603b0SAsim Jamshed /*----------------------------------------------------------------------------*/ 1976404edcSAsim Jamshed struct timer { 2076404edcSAsim Jamshed int id; 2176404edcSAsim Jamshed struct timeval exp; /* expiration time */ 2276404edcSAsim Jamshed callback_t cb; 2376404edcSAsim Jamshed 2476404edcSAsim Jamshed TAILQ_ENTRY(timer) timer_link; 2576404edcSAsim Jamshed }; 2676404edcSAsim Jamshed 2776404edcSAsim Jamshed struct rto_hashstore 2876404edcSAsim Jamshed { 2976404edcSAsim Jamshed uint32_t rto_now_idx; // pointing the hs_table_s index 3076404edcSAsim Jamshed uint32_t rto_now_ts; // 3176404edcSAsim Jamshed 3276404edcSAsim Jamshed TAILQ_HEAD(rto_head , tcp_stream) rto_list[RTO_HASH+1]; 3376404edcSAsim Jamshed }; 34*786603b0SAsim Jamshed /*----------------------------------------------------------------------------*/ 3576404edcSAsim Jamshed struct rto_hashstore* 3676404edcSAsim Jamshed InitRTOHashstore(); 3776404edcSAsim Jamshed 3876404edcSAsim Jamshed extern inline void 3976404edcSAsim Jamshed AddtoRTOList(mtcp_manager_t mtcp, tcp_stream *cur_stream); 4076404edcSAsim Jamshed 4176404edcSAsim Jamshed extern inline void 4276404edcSAsim Jamshed RemoveFromRTOList(mtcp_manager_t mtcp, tcp_stream *cur_stream); 4376404edcSAsim Jamshed 4476404edcSAsim Jamshed extern inline void 4576404edcSAsim Jamshed AddtoTimewaitList(mtcp_manager_t mtcp, tcp_stream *cur_stream, uint32_t cur_ts); 4676404edcSAsim Jamshed 4776404edcSAsim Jamshed extern inline void 4876404edcSAsim Jamshed RemoveFromTimewaitList(mtcp_manager_t mtcp, tcp_stream *cur_stream); 4976404edcSAsim Jamshed 5076404edcSAsim Jamshed extern inline void 5176404edcSAsim Jamshed AddtoTimeoutList(mtcp_manager_t mtcp, tcp_stream *cur_stream); 5276404edcSAsim Jamshed 5376404edcSAsim Jamshed extern inline void 5476404edcSAsim Jamshed RemoveFromTimeoutList(mtcp_manager_t mtcp, tcp_stream *cur_stream); 5576404edcSAsim Jamshed 5676404edcSAsim Jamshed extern inline void 5776404edcSAsim Jamshed UpdateTimeoutList(mtcp_manager_t mtcp, tcp_stream *cur_stream); 5876404edcSAsim Jamshed 5976404edcSAsim Jamshed extern inline void 6076404edcSAsim Jamshed UpdateRetransmissionTimer(mtcp_manager_t mtcp, 6176404edcSAsim Jamshed tcp_stream *cur_stream, uint32_t cur_ts); 6276404edcSAsim Jamshed 6376404edcSAsim Jamshed void 6476404edcSAsim Jamshed CheckRtmTimeout(mtcp_manager_t mtcp, uint32_t cur_ts, int thresh); 6576404edcSAsim Jamshed 6676404edcSAsim Jamshed void 6776404edcSAsim Jamshed CheckTimewaitExpire(mtcp_manager_t mtcp, uint32_t cur_ts, int thresh); 6876404edcSAsim Jamshed 6976404edcSAsim Jamshed void 7076404edcSAsim Jamshed CheckConnectionTimeout(mtcp_manager_t mtcp, uint32_t cur_ts, int thresh); 7176404edcSAsim Jamshed 7276404edcSAsim Jamshed void 7376404edcSAsim Jamshed DelTimer(mtcp_manager_t mtcp, struct timer *timer); 74*786603b0SAsim Jamshed /*----------------------------------------------------------------------------*/ 7576404edcSAsim Jamshed #endif /* __TIMER_H_ */ 76