tcp.h
001:
002:
003:
004:
005:
006:
007:
008:
009:
010: <waltje@uWalt.NL.Mugnet.ORG>
011:
012:
013:
014:
015:
016:
017: #ifndef _LINUX_TCP_H
018: #define _LINUX_TCP_H
019:
020: #include <linux/types.h>
021: #include <asm/byteorder.h>
022: #include <linux/socket.h>
023:
024: struct tcphdr {
025: __be16 source;
026: __be16 dest;
027: __be32 seq;
028: __be32 ack_seq;
029: #if defined(__LITTLE_ENDIAN_BITFIELD)
030: __u16 res1:4,
031: doff:4,
032: fin:1,
033: syn:1,
034: rst:1,
035: psh:1,
036: ack:1,
037: urg:1,
038: ece:1,
039: cwr:1;
040: #elif defined(__BIG_ENDIAN_BITFIELD)
041: __u16 doff:4,
042: res1:4,
043: cwr:1,
044: ece:1,
045: urg:1,
046: ack:1,
047: psh:1,
048: rst:1,
049: syn:1,
050: fin:1;
051: #else
052: #error "Adjust your <asm/byteorder.h> defines"
053: #endif
054: __be16 window;
055: __sum16 check;
056: __be16 urg_ptr;
057: };
058:
059:
060:
061:
062:
063:
064: union tcp_word_hdr {
065: struct tcphdr hdr;
066: __be32 words[5];
067: };
068:
069: #define tcp_flag_word(tp) ( ((union tcp_word_hdr *)(tp))->words [3])
070:
071: enum {
072: TCP_FLAG_CWR = __cpu_to_be32(0x00800000),
073: TCP_FLAG_ECE = __cpu_to_be32(0x00400000),
074: TCP_FLAG_URG = __cpu_to_be32(0x00200000),
075: TCP_FLAG_ACK = __cpu_to_be32(0x00100000),
076: TCP_FLAG_PSH = __cpu_to_be32(0x00080000),
077: TCP_FLAG_RST = __cpu_to_be32(0x00040000),
078: TCP_FLAG_SYN = __cpu_to_be32(0x00020000),
079: TCP_FLAG_FIN = __cpu_to_be32(0x00010000),
080: TCP_RESERVED_BITS = __cpu_to_be32(0x0F000000),
081: TCP_DATA_OFFSET = __cpu_to_be32(0xF0000000)
082: };
083:
084:
085:
086:
087: #define TCP_MSS_DEFAULT 536U
088: #define TCP_MSS_DESIRED 1220U
089:
090:
091: #define TCP_NODELAY 1
092: #define TCP_MAXSEG 2
093: #define TCP_CORK 3
094: #define TCP_KEEPIDLE 4
095: #define TCP_KEEPINTVL 5
096: #define TCP_KEEPCNT 6
097: #define TCP_SYNCNT 7
098: #define TCP_LINGER2 8
099: #define TCP_DEFER_ACCEPT 9
100: #define TCP_WINDOW_CLAMP 10
101: #define TCP_INFO 11
102: #define TCP_QUICKACK 12
103: #define TCP_CONGESTION 13
104: #define TCP_MD5SIG 14
105: #define TCP_COOKIE_TRANSACTIONS 15
106: #define TCP_THIN_LINEAR_TIMEOUTS 16
107: #define TCP_THIN_DUPACK 17
108: #define TCP_USER_TIMEOUT 18
109:
110:
111: #define TCPI_OPT_TIMESTAMPS 1
112: #define TCPI_OPT_SACK 2
113: #define TCPI_OPT_WSCALE 4
114: #define TCPI_OPT_ECN 8
115: #define TCPI_OPT_ECN_SEEN 16
116:
117: enum tcp_ca_state {
118: TCP_CA_Open = 0,
119: #define TCPF_CA_Open (1<<TCP_CA_Open)
120: TCP_CA_Disorder = 1,
121: #define TCPF_CA_Disorder (1<<TCP_CA_Disorder)
122: TCP_CA_CWR = 2,
123: #define TCPF_CA_CWR (1<<TCP_CA_CWR)
124: TCP_CA_Recovery = 3,
125: #define TCPF_CA_Recovery (1<<TCP_CA_Recovery)
126: TCP_CA_Loss = 4
127: #define TCPF_CA_Loss (1<<TCP_CA_Loss)
128: };
129:
130: struct tcp_info {
131: __u8 tcpi_state;
132: __u8 tcpi_ca_state;
133: __u8 tcpi_retransmits;
134: __u8 tcpi_probes;
135: __u8 tcpi_backoff;
136: __u8 tcpi_options;
137: __u8 tcpi_snd_wscale : 4, tcpi_rcv_wscale : 4;
138:
139: __u32 tcpi_rto;
140: __u32 tcpi_ato;
141: __u32 tcpi_snd_mss;
142: __u32 tcpi_rcv_mss;
143:
144: __u32 tcpi_unacked;
145: __u32 tcpi_sacked;
146: __u32 tcpi_lost;
147: __u32 tcpi_retrans;
148: __u32 tcpi_fackets;
149:
150:
151: __u32 tcpi_last_data_sent;
152: __u32 tcpi_last_ack_sent;
153: __u32 tcpi_last_data_recv;
154: __u32 tcpi_last_ack_recv;
155:
156:
157: __u32 tcpi_pmtu;
158: __u32 tcpi_rcv_ssthresh;
159: __u32 tcpi_rtt;
160: __u32 tcpi_rttvar;
161: __u32 tcpi_snd_ssthresh;
162: __u32 tcpi_snd_cwnd;
163: __u32 tcpi_advmss;
164: __u32 tcpi_reordering;
165:
166: __u32 tcpi_rcv_rtt;
167: __u32 tcpi_rcv_space;
168:
169: __u32 tcpi_total_retrans;
170: };
171:
172:
173: #define TCP_MD5SIG_MAXKEYLEN 80
174:
175: struct tcp_md5sig {
176: struct __kernel_sockaddr_storage tcpm_addr;
177: __u16 __tcpm_pad1;
178: __u16 tcpm_keylen;
179: __u32 __tcpm_pad2;
180: __u8 tcpm_key[TCP_MD5SIG_MAXKEYLEN];
181: };
182:
183:
184: #define TCP_COOKIE_MIN 8
185: #define TCP_COOKIE_MAX 16
186: #define TCP_COOKIE_PAIR_SIZE (2*TCP_COOKIE_MAX)
187:
188:
189: #define TCP_COOKIE_IN_ALWAYS (1 << 0)
190: #define TCP_COOKIE_OUT_NEVER (1 << 1)
191:
192:
193:
194: #define TCP_S_DATA_IN (1 << 2)
195: #define TCP_S_DATA_OUT (1 << 3)
196:
197:
198: struct tcp_cookie_transactions {
199: __u16 tcpct_flags;
200: __u8 __tcpct_pad1;
201: __u8 tcpct_cookie_desired;
202: __u16 tcpct_s_data_desired;
203: __u16 tcpct_used;
204: __u8 tcpct_value[TCP_MSS_DEFAULT];
205: };
206:
207:
208: #endif
209:
© Andrew Scott 2006 -
2025,
All Rights Reserved