blob: 147f6f76dd308405acbed52ac23f9b638ff217ac [file] [log] [blame]
The Android Open Source Project1dc9e472009-03-03 19:28:35 -08001/*
2 * Copyright (C) 2008 The Android Open Source Project
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in
12 * the documentation and/or other materials provided with the
13 * distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
18 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
19 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
20 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
21 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
22 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
23 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
25 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 * SUCH DAMAGE.
27 */
Elliott Hughes338e6102014-01-03 15:58:40 -080028
The Android Open Source Project1dc9e472009-03-03 19:28:35 -080029#ifndef _NETINET_TCP_H
30#define _NETINET_TCP_H
31
Josh Gaoef7c95b2016-04-07 11:16:35 -070032#include <sys/cdefs.h>
Elliott Hughesf0210612016-05-16 13:26:25 -070033#include <stdint.h>
Josh Gaoef7c95b2016-04-07 11:16:35 -070034
Elliott Hughesf0210612016-05-16 13:26:25 -070035#define tcphdr __kernel_tcphdr
The Android Open Source Project1dc9e472009-03-03 19:28:35 -080036#include <linux/tcp.h>
Elliott Hughesf0210612016-05-16 13:26:25 -070037#undef tcphdr
The Android Open Source Project1dc9e472009-03-03 19:28:35 -080038
Elliott Hughes0dff43c2013-07-11 16:21:32 -070039__BEGIN_DECLS
40
Elliott Hughesf0210612016-05-16 13:26:25 -070041struct tcphdr {
42 __extension__ union {
43 struct {
44 uint16_t th_sport;
45 uint16_t th_dport;
46 uint32_t th_seq;
47 uint32_t th_ack;
48 uint8_t th_x2:4;
49 uint8_t th_off:4;
50 uint8_t th_flags;
51 uint16_t th_win;
52 uint16_t th_sum;
53 uint16_t th_urp;
54 };
55 struct {
56 uint16_t source;
57 uint16_t dest;
58 uint32_t seq;
59 uint32_t ack_seq;
60 uint16_t res1:4;
61 uint16_t doff:4;
62 uint16_t fin:1;
63 uint16_t syn:1;
64 uint16_t rst:1;
65 uint16_t psh:1;
66 uint16_t ack:1;
67 uint16_t urg:1;
68 uint16_t res2:2;
69 uint16_t window;
70 uint16_t check;
71 uint16_t urg_ptr;
72 };
73 };
74};
75
76#define TH_FIN 0x01
77#define TH_SYN 0x02
78#define TH_RST 0x04
79#define TH_PUSH 0x08
80#define TH_ACK 0x10
81#define TH_URG 0x20
82
Elliott Hughes0dff43c2013-07-11 16:21:32 -070083enum {
84 TCP_ESTABLISHED = 1,
85 TCP_SYN_SENT,
86 TCP_SYN_RECV,
87 TCP_FIN_WAIT1,
88 TCP_FIN_WAIT2,
89 TCP_TIME_WAIT,
90 TCP_CLOSE,
91 TCP_CLOSE_WAIT,
92 TCP_LAST_ACK,
93 TCP_LISTEN,
94 TCP_CLOSING
95};
96
Elliott Hughes338e6102014-01-03 15:58:40 -080097#define TCPOPT_EOL 0
98#define TCPOPT_NOP 1
99#define TCPOPT_MAXSEG 2
100#define TCPOLEN_MAXSEG 4
101#define TCPOPT_WINDOW 3
102#define TCPOLEN_WINDOW 3
103#define TCPOPT_SACK_PERMITTED 4
104#define TCPOLEN_SACK_PERMITTED 2
105#define TCPOPT_SACK 5
106#define TCPOPT_TIMESTAMP 8
107#define TCPOLEN_TIMESTAMP 10
108#define TCPOLEN_TSTAMP_APPA (TCPOLEN_TIMESTAMP+2)
109
110#define TCPOPT_TSTAMP_HDR (TCPOPT_NOP<<24|TCPOPT_NOP<<16|TCPOPT_TIMESTAMP<<8|TCPOLEN_TIMESTAMP)
111
Elliott Hughes0dff43c2013-07-11 16:21:32 -0700112__END_DECLS
113
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800114#endif /* _NETINET_TCP_H */