summaryrefslogtreecommitdiffstats
path: root/libc/kernel/common/linux/tcp.h
blob: 3fa95f808b028bd86929f902b53599f5d637db2b (plain)
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
/****************************************************************************
 ****************************************************************************
 ***
 ***   This header was automatically generated from a Linux kernel header
 ***   of the same name, to make information necessary for userspace to
 ***   call into the kernel available to libc.  It contains only constants,
 ***   structures, and macros generated from the original header, and thus,
 ***   contains no copyrightable information.
 ***
 ****************************************************************************
 ****************************************************************************/
#ifndef _LINUX_TCP_H
#define _LINUX_TCP_H

#include <linux/types.h>
#include <asm/byteorder.h>

struct tcphdr {
 __u16 source;
 __u16 dest;
 __u32 seq;
 __u32 ack_seq;
#ifdef __LITTLE_ENDIAN_BITFIELD
 __u16 res1:4,
 doff:4,
 fin:1,
 syn:1,
 rst:1,
 psh:1,
 ack:1,
 urg:1,
 ece:1,
 cwr:1;
#elif defined(__BIG_ENDIAN_BITFIELD)
 __u16 doff:4,
 res1:4,
 cwr:1,
 ece:1,
 urg:1,
 ack:1,
 psh:1,
 rst:1,
 syn:1,
 fin:1;
#else
#error "Adjust your <asm/byteorder.h> defines"
#endif
 __u16 window;
 __u16 check;
 __u16 urg_ptr;
};

union tcp_word_hdr {
 struct tcphdr hdr;
 __u32 words[5];
};

#define tcp_flag_word(tp) ( ((union tcp_word_hdr *)(tp))->words [3]) 

enum {
 TCP_FLAG_CWR = __constant_htonl(0x00800000),
 TCP_FLAG_ECE = __constant_htonl(0x00400000),
 TCP_FLAG_URG = __constant_htonl(0x00200000),
 TCP_FLAG_ACK = __constant_htonl(0x00100000),
 TCP_FLAG_PSH = __constant_htonl(0x00080000),
 TCP_FLAG_RST = __constant_htonl(0x00040000),
 TCP_FLAG_SYN = __constant_htonl(0x00020000),
 TCP_FLAG_FIN = __constant_htonl(0x00010000),
 TCP_RESERVED_BITS = __constant_htonl(0x0F000000),
 TCP_DATA_OFFSET = __constant_htonl(0xF0000000)
};

#define TCP_NODELAY 1  
#define TCP_MAXSEG 2  
#define TCP_CORK 3  
#define TCP_KEEPIDLE 4  
#define TCP_KEEPINTVL 5  
#define TCP_KEEPCNT 6  
#define TCP_SYNCNT 7  
#define TCP_LINGER2 8  
#define TCP_DEFER_ACCEPT 9  
#define TCP_WINDOW_CLAMP 10  
#define TCP_INFO 11  
#define TCP_QUICKACK 12  
#define TCP_CONGESTION 13  

#define TCPI_OPT_TIMESTAMPS 1
#define TCPI_OPT_SACK 2
#define TCPI_OPT_WSCALE 4
#define TCPI_OPT_ECN 8

enum tcp_ca_state
{
 TCP_CA_Open = 0,
#define TCPF_CA_Open (1<<TCP_CA_Open)
 TCP_CA_Disorder = 1,
#define TCPF_CA_Disorder (1<<TCP_CA_Disorder)
 TCP_CA_CWR = 2,
#define TCPF_CA_CWR (1<<TCP_CA_CWR)
 TCP_CA_Recovery = 3,
#define TCPF_CA_Recovery (1<<TCP_CA_Recovery)
 TCP_CA_Loss = 4
#define TCPF_CA_Loss (1<<TCP_CA_Loss)
};

struct tcp_info
{
 __u8 tcpi_state;
 __u8 tcpi_ca_state;
 __u8 tcpi_retransmits;
 __u8 tcpi_probes;
 __u8 tcpi_backoff;
 __u8 tcpi_options;
 __u8 tcpi_snd_wscale : 4, tcpi_rcv_wscale : 4;

 __u32 tcpi_rto;
 __u32 tcpi_ato;
 __u32 tcpi_snd_mss;
 __u32 tcpi_rcv_mss;

 __u32 tcpi_unacked;
 __u32 tcpi_sacked;
 __u32 tcpi_lost;
 __u32 tcpi_retrans;
 __u32 tcpi_fackets;

 __u32 tcpi_last_data_sent;
 __u32 tcpi_last_ack_sent;
 __u32 tcpi_last_data_recv;
 __u32 tcpi_last_ack_recv;

 __u32 tcpi_pmtu;
 __u32 tcpi_rcv_ssthresh;
 __u32 tcpi_rtt;
 __u32 tcpi_rttvar;
 __u32 tcpi_snd_ssthresh;
 __u32 tcpi_snd_cwnd;
 __u32 tcpi_advmss;
 __u32 tcpi_reordering;

 __u32 tcpi_rcv_rtt;
 __u32 tcpi_rcv_space;

 __u32 tcpi_total_retrans;
};

#endif