176404edcSAsim Jamshed #ifndef __TCP_OUT_H_
276404edcSAsim Jamshed #define __TCP_OUT_H_
376404edcSAsim Jamshed 
476404edcSAsim Jamshed #include "mtcp.h"
576404edcSAsim Jamshed #include "tcp_stream.h"
676404edcSAsim Jamshed 
776404edcSAsim Jamshed enum ack_opt
876404edcSAsim Jamshed {
976404edcSAsim Jamshed 	ACK_OPT_NOW,
1076404edcSAsim Jamshed 	ACK_OPT_AGGREGATE,
1176404edcSAsim Jamshed 	ACK_OPT_WACK
1276404edcSAsim Jamshed };
1376404edcSAsim Jamshed 
1476404edcSAsim Jamshed int
1576404edcSAsim Jamshed SendTCPPacketStandalone(struct mtcp_manager *mtcp,
1676404edcSAsim Jamshed 		uint32_t saddr, uint16_t sport, uint32_t daddr, uint16_t dport,
1776404edcSAsim Jamshed 		uint32_t seq, uint32_t ack_seq, uint16_t window, uint8_t flags,
1876404edcSAsim Jamshed 		uint8_t *payload, uint16_t payloadlen,
19*a834ea89SAsim Jamshed 		uint32_t cur_ts, uint32_t echo_ts, uint16_t ip_id, int8_t in_ifidx);
2076404edcSAsim Jamshed 
2176404edcSAsim Jamshed int
2276404edcSAsim Jamshed SendTCPPacket(struct mtcp_manager *mtcp, tcp_stream *cur_stream,
2376404edcSAsim Jamshed 		uint32_t cur_ts, uint8_t flags, uint8_t *payload, uint16_t payloadlen);
2476404edcSAsim Jamshed 
2576404edcSAsim Jamshed extern inline int
2676404edcSAsim Jamshed WriteTCPControlList(mtcp_manager_t mtcp,
2776404edcSAsim Jamshed 		struct mtcp_sender *sender, uint32_t cur_ts, int thresh);
2876404edcSAsim Jamshed 
2976404edcSAsim Jamshed extern inline int
3076404edcSAsim Jamshed WriteTCPDataList(mtcp_manager_t mtcp,
3176404edcSAsim Jamshed 		struct mtcp_sender *sender, uint32_t cur_ts, int thresh);
3276404edcSAsim Jamshed 
3376404edcSAsim Jamshed extern inline int
3476404edcSAsim Jamshed WriteTCPACKList(mtcp_manager_t mtcp,
3576404edcSAsim Jamshed 		struct mtcp_sender *sender, uint32_t cur_ts, int thresh);
3676404edcSAsim Jamshed 
3776404edcSAsim Jamshed extern inline void
3876404edcSAsim Jamshed AddtoControlList(mtcp_manager_t mtcp, tcp_stream *cur_stream, uint32_t cur_ts);
3976404edcSAsim Jamshed 
4076404edcSAsim Jamshed extern inline void
4176404edcSAsim Jamshed AddtoSendList(mtcp_manager_t mtcp, tcp_stream *cur_stream);
4276404edcSAsim Jamshed 
4376404edcSAsim Jamshed extern inline void
4476404edcSAsim Jamshed RemoveFromControlList(mtcp_manager_t mtcp, tcp_stream *cur_stream);
4576404edcSAsim Jamshed 
4676404edcSAsim Jamshed extern inline void
4776404edcSAsim Jamshed RemoveFromSendList(mtcp_manager_t mtcp, tcp_stream *cur_stream);
4876404edcSAsim Jamshed 
4976404edcSAsim Jamshed extern inline void
5076404edcSAsim Jamshed RemoveFromACKList(mtcp_manager_t mtcp, tcp_stream *cur_stream);
5176404edcSAsim Jamshed 
5276404edcSAsim Jamshed extern inline void
5376404edcSAsim Jamshed EnqueueACK(mtcp_manager_t mtcp,
5476404edcSAsim Jamshed 		tcp_stream *cur_stream, uint32_t cur_ts, uint8_t opt);
5576404edcSAsim Jamshed 
5676404edcSAsim Jamshed extern inline void
5776404edcSAsim Jamshed DumpControlList(mtcp_manager_t mtcp, struct mtcp_sender *sender);
5876404edcSAsim Jamshed 
5976404edcSAsim Jamshed void
6076404edcSAsim Jamshed UpdatePassiveSendTCPContext(mtcp_manager_t mtcp, struct tcp_stream *cur_stream,
6176404edcSAsim Jamshed 			    struct pkt_ctx *pctx);
6276404edcSAsim Jamshed 
6376404edcSAsim Jamshed void
6476404edcSAsim Jamshed PostSendTCPAction(mtcp_manager_t mtcp, struct pkt_ctx *pctx,
6576404edcSAsim Jamshed 		  struct tcp_stream *recvside_stream,
6676404edcSAsim Jamshed 		  struct tcp_stream *sendside_stream);
6776404edcSAsim Jamshed 
6876404edcSAsim Jamshed #endif /* __TCP_OUT_H_ */
69