16#ifndef _NETSIM_TCP_HEADER_H_
17#define _NETSIM_TCP_HEADER_H_
24#define PNETSIM_SOCKET void*
27 typedef enum enum_tcp_packet
29 TCPPACKET_SYN = TX_PROTOCOL_TCP * 100 + 1,
36 typedef enum enum_tcp_option
39 TCP_OPTION_NOOPERATION,
41 TCP_OPTION_WINDOW_SCALE,
42 TCP_OPTION_SACK_PERMITTED,
55 }TCPOPTION,*PTCPOPTION;
102 }TCP_SEGMENT_HDR,*PTCP_SEGMENT_HDR;
103#define TCP_HDR_SIZE 20
104#define MAX_TCP_OPT_LEN 40
105#define MAX_TCP_HDR_SIZE (TCP_HDR_SIZE+MAX_TCP_OPT_LEN)
107 static PTCP_SEGMENT_HDR TCP_GET_SEGMENT_HDR(NetSim_PACKET* packet)
110 packet->pstruTransportData &&
111 packet->pstruTransportData->nTransportProtocol == TX_PROTOCOL_TCP)
112 return packet->pstruTransportData->Packet_TransportProtocol;
121 }MSS_OPTION, *PMSS_OPTION;
122#define MSS_OPTION_LEN 4
128 }SACKPERMITTED_OPTION, *PSACKPERMITTED_OPTION;
129#define SACKPERMITTED_OPTION_LEN 2
135 }SACKDATA, *PSACKDATA;
136#define SACKDATA_LEN 8
143 }SACK_OPTION, *PSACK_OPTION;
144#define SACK_OPTION_FIX_LEN 2
145#define SACK_OPTION_LEN(n) ((UINT8)(SACK_OPTION_FIX_LEN+(n)*SACKDATA_LEN))
146#define get_sack_data_count(sack) ((sack->len-SACK_OPTION_FIX_LEN)/SACKDATA_LEN)
151 }EXTRA_OPTION, *PEXTRA_OPTION;
152#define EXTRA_OPTION_LEN 1
172 PTCP_SEGMENT_HDR copy_tcp_hdr(PTCP_SEGMENT_HDR hdr);
173 void free_tcp_hdr(PTCP_SEGMENT_HDR hdr);
174 void* get_tcp_option(PTCP_SEGMENT_HDR hdr, TCP_OPTION type);
175 void set_tcp_option(PTCP_SEGMENT_HDR hdr,
void* option, TCP_OPTION type, UINT32 size);
178 void set_sack_option(PNETSIM_SOCKET s, PTCP_SEGMENT_HDR hdr,
double time);
179 void receive_sack_option(PNETSIM_SOCKET s, PTCP_SEGMENT_HDR hdr);
182 void set_window_scaling(PNETSIM_SOCKET s, PWsopt opt);
185 void set_timestamp_value(PNETSIM_SOCKET s,
186 PTCP_SEGMENT_HDR hdr,