Dr Andrew Scott G7VAV

My photo
 
June 2025
Mo Tu We Th Fr Sa Su
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 1 2 3 4 5 6


tcp.h
001: /*
002:  * INET         An implementation of the TCP/IP protocol suite for the LINUX
003:  *              operating system.  INET is implemented using the  BSD Socket
004:  *              interface as the means of communication with the user level.
005:  *
006:  *              Definitions for the TCP protocol.
007:  *
008:  * Version:     @(#)tcp.h       1.0.2   04/28/93
009:  *
010:  * Author:      Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
011:  *
012:  *              This program is free software; you can redistribute it and/or
013:  *              modify it under the terms of the GNU General Public License
014:  *              as published by the Free Software Foundation; either version
015:  *              2 of the License, or (at your option) any later version.
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:  *      The union cast uses a gcc extension to avoid aliasing problems
061:  *  (union is compatible to any of its members)
062:  *  This means this part of the code is -fstrict-aliasing safe now.
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:  * TCP general constants
086:  */
087: #define TCP_MSS_DEFAULT          536U   /* IPv4 (RFC1122, RFC2581) */
088: #define TCP_MSS_DESIRED         1220U   /* IPv6 (tunneled), EDNS0 (RFC3226) */
089: 
090: /* TCP socket options */
091: #define TCP_NODELAY             1       /* Turn off Nagle's algorithm. */
092: #define TCP_MAXSEG              2       /* Limit MSS */
093: #define TCP_CORK                3       /* Never send partially complete segments */
094: #define TCP_KEEPIDLE            4       /* Start keeplives after this period */
095: #define TCP_KEEPINTVL           5       /* Interval between keepalives */
096: #define TCP_KEEPCNT             6       /* Number of keepalives before death */
097: #define TCP_SYNCNT              7       /* Number of SYN retransmits */
098: #define TCP_LINGER2             8       /* Life time of orphaned FIN-WAIT-2 state */
099: #define TCP_DEFER_ACCEPT        9       /* Wake up listener only when data arrive */
100: #define TCP_WINDOW_CLAMP        10      /* Bound advertised window */
101: #define TCP_INFO                11      /* Information about this connection. */
102: #define TCP_QUICKACK            12      /* Block/reenable quick acks */
103: #define TCP_CONGESTION          13      /* Congestion control algorithm */
104: #define TCP_MD5SIG              14      /* TCP MD5 Signature (RFC2385) */
105: #define TCP_COOKIE_TRANSACTIONS 15      /* TCP Cookie Transactions */
106: #define TCP_THIN_LINEAR_TIMEOUTS 16      /* Use linear timeouts for thin streams*/
107: #define TCP_THIN_DUPACK         17      /* Fast retrans. after 1 dupack */
108: #define TCP_USER_TIMEOUT        18      /* How long for loss retry before timeout */
109: 
110: /* for TCP_INFO socket option */
111: #define TCPI_OPT_TIMESTAMPS     1
112: #define TCPI_OPT_SACK           2
113: #define TCPI_OPT_WSCALE         4
114: #define TCPI_OPT_ECN            8 /* ECN was negociated at TCP session init */
115: #define TCPI_OPT_ECN_SEEN       16 /* we received at least one packet with ECT */
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:         /* Times. */
151:         __u32   tcpi_last_data_sent;
152:         __u32   tcpi_last_ack_sent;     /* Not remembered, sorry. */
153:         __u32   tcpi_last_data_recv;
154:         __u32   tcpi_last_ack_recv;
155: 
156:         /* Metrics. */
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: /* for TCP_MD5SIG socket option */
173: #define TCP_MD5SIG_MAXKEYLEN    80
174: 
175: struct tcp_md5sig {
176:         struct __kernel_sockaddr_storage tcpm_addr;     /* address associated */
177:         __u16   __tcpm_pad1;                            /* zero */
178:         __u16   tcpm_keylen;                            /* key length */
179:         __u32   __tcpm_pad2;                            /* zero */
180:         __u8    tcpm_key[TCP_MD5SIG_MAXKEYLEN];         /* key (binary) */
181: };
182: 
183: /* for TCP_COOKIE_TRANSACTIONS (TCPCT) socket option */
184: #define TCP_COOKIE_MIN           8              /*  64-bits */
185: #define TCP_COOKIE_MAX          16              /* 128-bits */
186: #define TCP_COOKIE_PAIR_SIZE    (2*TCP_COOKIE_MAX)
187: 
188: /* Flags for both getsockopt and setsockopt */
189: #define TCP_COOKIE_IN_ALWAYS    (1 << 0)        /* Discard SYN without cookie */
190: #define TCP_COOKIE_OUT_NEVER    (1 << 1)        /* Prohibit outgoing cookies,
191:                                                  * supercedes everything. */
192: 
193: /* Flags for getsockopt */
194: #define TCP_S_DATA_IN           (1 << 2)        /* Was data received? */
195: #define TCP_S_DATA_OUT          (1 << 3)        /* Was data sent? */
196: 
197: /* TCP_COOKIE_TRANSACTIONS data */
198: struct tcp_cookie_transactions {
199:         __u16   tcpct_flags;                    /* see above */
200:         __u8    __tcpct_pad1;                   /* zero */
201:         __u8    tcpct_cookie_desired;           /* bytes */
202:         __u16   tcpct_s_data_desired;           /* bytes of variable data */
203:         __u16   tcpct_used;                     /* bytes in value */
204:         __u8    tcpct_value[TCP_MSS_DEFAULT];
205: };
206: 
207: 
208: #endif  /* _LINUX_TCP_H */
209: 


for client (none)
© Andrew Scott 2006 - 2025,
All Rights Reserved
http://www.andrew-scott.uk/
Andrew Scott
http://www.andrew-scott.co.uk/