0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018 #ifndef _UAPI_LINUX_TCP_H
0019 #define _UAPI_LINUX_TCP_H
0020
0021 #include <linux/types.h>
0022 #include <asm/byteorder.h>
0023 #include <linux/socket.h>
0024
0025 struct tcphdr {
0026 __be16 source;
0027 __be16 dest;
0028 __be32 seq;
0029 __be32 ack_seq;
0030 #if defined(__LITTLE_ENDIAN_BITFIELD)
0031 __u16 res1:4,
0032 doff:4,
0033 fin:1,
0034 syn:1,
0035 rst:1,
0036 psh:1,
0037 ack:1,
0038 urg:1,
0039 ece:1,
0040 cwr:1;
0041 #elif defined(__BIG_ENDIAN_BITFIELD)
0042 __u16 doff:4,
0043 res1:4,
0044 cwr:1,
0045 ece:1,
0046 urg:1,
0047 ack:1,
0048 psh:1,
0049 rst:1,
0050 syn:1,
0051 fin:1;
0052 #else
0053 #error "Adjust your <asm/byteorder.h> defines"
0054 #endif
0055 __be16 window;
0056 __sum16 check;
0057 __be16 urg_ptr;
0058 };
0059
0060
0061
0062
0063
0064
0065 union tcp_word_hdr {
0066 struct tcphdr hdr;
0067 __be32 words[5];
0068 };
0069
0070 #define tcp_flag_word(tp) (((union tcp_word_hdr *)(tp))->words[3])
0071
0072 enum {
0073 TCP_FLAG_CWR = __constant_cpu_to_be32(0x00800000),
0074 TCP_FLAG_ECE = __constant_cpu_to_be32(0x00400000),
0075 TCP_FLAG_URG = __constant_cpu_to_be32(0x00200000),
0076 TCP_FLAG_ACK = __constant_cpu_to_be32(0x00100000),
0077 TCP_FLAG_PSH = __constant_cpu_to_be32(0x00080000),
0078 TCP_FLAG_RST = __constant_cpu_to_be32(0x00040000),
0079 TCP_FLAG_SYN = __constant_cpu_to_be32(0x00020000),
0080 TCP_FLAG_FIN = __constant_cpu_to_be32(0x00010000),
0081 TCP_RESERVED_BITS = __constant_cpu_to_be32(0x0F000000),
0082 TCP_DATA_OFFSET = __constant_cpu_to_be32(0xF0000000)
0083 };
0084
0085
0086
0087
0088 #define TCP_MSS_DEFAULT 536U
0089 #define TCP_MSS_DESIRED 1220U
0090
0091
0092 #define TCP_NODELAY 1
0093 #define TCP_MAXSEG 2
0094 #define TCP_CORK 3
0095 #define TCP_KEEPIDLE 4
0096 #define TCP_KEEPINTVL 5
0097 #define TCP_KEEPCNT 6
0098 #define TCP_SYNCNT 7
0099 #define TCP_LINGER2 8
0100 #define TCP_DEFER_ACCEPT 9
0101 #define TCP_WINDOW_CLAMP 10
0102 #define TCP_INFO 11
0103 #define TCP_QUICKACK 12
0104 #define TCP_CONGESTION 13
0105 #define TCP_MD5SIG 14
0106 #define TCP_THIN_LINEAR_TIMEOUTS 16
0107 #define TCP_THIN_DUPACK 17
0108 #define TCP_USER_TIMEOUT 18
0109 #define TCP_REPAIR 19
0110 #define TCP_REPAIR_QUEUE 20
0111 #define TCP_QUEUE_SEQ 21
0112 #define TCP_REPAIR_OPTIONS 22
0113 #define TCP_FASTOPEN 23
0114 #define TCP_TIMESTAMP 24
0115 #define TCP_NOTSENT_LOWAT 25
0116 #define TCP_CC_INFO 26
0117 #define TCP_SAVE_SYN 27
0118 #define TCP_SAVED_SYN 28
0119 #define TCP_REPAIR_WINDOW 29
0120 #define TCP_FASTOPEN_CONNECT 30
0121 #define TCP_ULP 31
0122 #define TCP_MD5SIG_EXT 32
0123 #define TCP_FASTOPEN_KEY 33
0124 #define TCP_FASTOPEN_NO_COOKIE 34
0125 #define TCP_ZEROCOPY_RECEIVE 35
0126 #define TCP_INQ 36
0127
0128 #define TCP_CM_INQ TCP_INQ
0129
0130 #define TCP_TX_DELAY 37
0131
0132
0133 #define TCP_REPAIR_ON 1
0134 #define TCP_REPAIR_OFF 0
0135 #define TCP_REPAIR_OFF_NO_WP -1
0136
0137 struct tcp_repair_opt {
0138 __u32 opt_code;
0139 __u32 opt_val;
0140 };
0141
0142 struct tcp_repair_window {
0143 __u32 snd_wl1;
0144 __u32 snd_wnd;
0145 __u32 max_window;
0146
0147 __u32 rcv_wnd;
0148 __u32 rcv_wup;
0149 };
0150
0151 enum {
0152 TCP_NO_QUEUE,
0153 TCP_RECV_QUEUE,
0154 TCP_SEND_QUEUE,
0155 TCP_QUEUES_NR,
0156 };
0157
0158
0159 enum tcp_fastopen_client_fail {
0160 TFO_STATUS_UNSPEC,
0161 TFO_COOKIE_UNAVAILABLE,
0162 TFO_DATA_NOT_ACKED,
0163 TFO_SYN_RETRANSMITTED,
0164 };
0165
0166
0167 #define TCPI_OPT_TIMESTAMPS 1
0168 #define TCPI_OPT_SACK 2
0169 #define TCPI_OPT_WSCALE 4
0170 #define TCPI_OPT_ECN 8
0171 #define TCPI_OPT_ECN_SEEN 16
0172 #define TCPI_OPT_SYN_DATA 32
0173
0174
0175
0176
0177
0178
0179 enum tcp_ca_state {
0180
0181
0182
0183
0184 TCP_CA_Open = 0,
0185 #define TCPF_CA_Open (1<<TCP_CA_Open)
0186
0187
0188
0189
0190
0191
0192 TCP_CA_Disorder = 1,
0193 #define TCPF_CA_Disorder (1<<TCP_CA_Disorder)
0194
0195
0196
0197
0198
0199 TCP_CA_CWR = 2,
0200 #define TCPF_CA_CWR (1<<TCP_CA_CWR)
0201
0202
0203
0204
0205 TCP_CA_Recovery = 3,
0206 #define TCPF_CA_Recovery (1<<TCP_CA_Recovery)
0207
0208
0209
0210 TCP_CA_Loss = 4
0211 #define TCPF_CA_Loss (1<<TCP_CA_Loss)
0212 };
0213
0214 struct tcp_info {
0215 __u8 tcpi_state;
0216 __u8 tcpi_ca_state;
0217 __u8 tcpi_retransmits;
0218 __u8 tcpi_probes;
0219 __u8 tcpi_backoff;
0220 __u8 tcpi_options;
0221 __u8 tcpi_snd_wscale : 4, tcpi_rcv_wscale : 4;
0222 __u8 tcpi_delivery_rate_app_limited:1, tcpi_fastopen_client_fail:2;
0223
0224 __u32 tcpi_rto;
0225 __u32 tcpi_ato;
0226 __u32 tcpi_snd_mss;
0227 __u32 tcpi_rcv_mss;
0228
0229 __u32 tcpi_unacked;
0230 __u32 tcpi_sacked;
0231 __u32 tcpi_lost;
0232 __u32 tcpi_retrans;
0233 __u32 tcpi_fackets;
0234
0235
0236 __u32 tcpi_last_data_sent;
0237 __u32 tcpi_last_ack_sent;
0238 __u32 tcpi_last_data_recv;
0239 __u32 tcpi_last_ack_recv;
0240
0241
0242 __u32 tcpi_pmtu;
0243 __u32 tcpi_rcv_ssthresh;
0244 __u32 tcpi_rtt;
0245 __u32 tcpi_rttvar;
0246 __u32 tcpi_snd_ssthresh;
0247 __u32 tcpi_snd_cwnd;
0248 __u32 tcpi_advmss;
0249 __u32 tcpi_reordering;
0250
0251 __u32 tcpi_rcv_rtt;
0252 __u32 tcpi_rcv_space;
0253
0254 __u32 tcpi_total_retrans;
0255
0256 __u64 tcpi_pacing_rate;
0257 __u64 tcpi_max_pacing_rate;
0258 __u64 tcpi_bytes_acked;
0259 __u64 tcpi_bytes_received;
0260 __u32 tcpi_segs_out;
0261 __u32 tcpi_segs_in;
0262
0263 __u32 tcpi_notsent_bytes;
0264 __u32 tcpi_min_rtt;
0265 __u32 tcpi_data_segs_in;
0266 __u32 tcpi_data_segs_out;
0267
0268 __u64 tcpi_delivery_rate;
0269
0270 __u64 tcpi_busy_time;
0271 __u64 tcpi_rwnd_limited;
0272 __u64 tcpi_sndbuf_limited;
0273
0274 __u32 tcpi_delivered;
0275 __u32 tcpi_delivered_ce;
0276
0277 __u64 tcpi_bytes_sent;
0278 __u64 tcpi_bytes_retrans;
0279 __u32 tcpi_dsack_dups;
0280 __u32 tcpi_reord_seen;
0281
0282 __u32 tcpi_rcv_ooopack;
0283
0284 __u32 tcpi_snd_wnd;
0285
0286
0287 };
0288
0289
0290 enum {
0291 TCP_NLA_PAD,
0292 TCP_NLA_BUSY,
0293 TCP_NLA_RWND_LIMITED,
0294 TCP_NLA_SNDBUF_LIMITED,
0295 TCP_NLA_DATA_SEGS_OUT,
0296 TCP_NLA_TOTAL_RETRANS,
0297 TCP_NLA_PACING_RATE,
0298 TCP_NLA_DELIVERY_RATE,
0299 TCP_NLA_SND_CWND,
0300 TCP_NLA_REORDERING,
0301 TCP_NLA_MIN_RTT,
0302 TCP_NLA_RECUR_RETRANS,
0303 TCP_NLA_DELIVERY_RATE_APP_LMT,
0304 TCP_NLA_SNDQ_SIZE,
0305 TCP_NLA_CA_STATE,
0306 TCP_NLA_SND_SSTHRESH,
0307 TCP_NLA_DELIVERED,
0308 TCP_NLA_DELIVERED_CE,
0309 TCP_NLA_BYTES_SENT,
0310 TCP_NLA_BYTES_RETRANS,
0311 TCP_NLA_DSACK_DUPS,
0312 TCP_NLA_REORD_SEEN,
0313 TCP_NLA_SRTT,
0314 TCP_NLA_TIMEOUT_REHASH,
0315 TCP_NLA_BYTES_NOTSENT,
0316 TCP_NLA_EDT,
0317 TCP_NLA_TTL,
0318 };
0319
0320
0321 #define TCP_MD5SIG_MAXKEYLEN 80
0322
0323
0324 #define TCP_MD5SIG_FLAG_PREFIX 0x1
0325 #define TCP_MD5SIG_FLAG_IFINDEX 0x2
0326
0327 struct tcp_md5sig {
0328 struct __kernel_sockaddr_storage tcpm_addr;
0329 __u8 tcpm_flags;
0330 __u8 tcpm_prefixlen;
0331 __u16 tcpm_keylen;
0332 int tcpm_ifindex;
0333 __u8 tcpm_key[TCP_MD5SIG_MAXKEYLEN];
0334 };
0335
0336
0337 struct tcp_diag_md5sig {
0338 __u8 tcpm_family;
0339 __u8 tcpm_prefixlen;
0340 __u16 tcpm_keylen;
0341 __be32 tcpm_addr[4];
0342 __u8 tcpm_key[TCP_MD5SIG_MAXKEYLEN];
0343 };
0344
0345
0346
0347 #define TCP_RECEIVE_ZEROCOPY_FLAG_TLB_CLEAN_HINT 0x1
0348 struct tcp_zerocopy_receive {
0349 __u64 address;
0350 __u32 length;
0351 __u32 recv_skip_hint;
0352 __u32 inq;
0353 __s32 err;
0354 __u64 copybuf_address;
0355 __s32 copybuf_len;
0356 __u32 flags;
0357 __u64 msg_control;
0358 __u64 msg_controllen;
0359 __u32 msg_flags;
0360 __u32 reserved;
0361 };
0362 #endif