1/*
2 * Copyright 2006-2012 Haiku, Inc. All Rights Reserved.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef NETINET_TCP_H
6#define NETINET_TCP_H
7
8
9#include <endian.h>
10#include <stdint.h>
11
12
13struct tcphdr {
14	uint16_t	th_sport;	/* source port */
15	uint16_t	th_dport;	/* destination port */
16	uint32_t	th_seq;
17	uint32_t	th_ack;
18
19#if BIG_ENDIAN
20	uint8_t		th_off : 4;	/* data offset */
21	uint8_t		th_x2 : 4;	/* unused */
22#else
23	uint8_t		th_x2 : 4;
24	uint8_t		th_off : 4;
25#endif
26	uint8_t		th_flags;
27	uint16_t	th_win;
28	uint16_t	th_sum;
29	uint16_t	th_urp;		/* end of urgent data offset */
30} _PACKED;
31
32#if 0
33#define	TH_FIN	0x01
34#define	TH_SYN	0x02
35#define	TH_RST	0x04
36#define	TH_PUSH	0x08
37#define	TH_ACK	0x10
38#define	TH_URG	0x20
39#define	TH_ECE	0x40
40#define	TH_CWR	0x80
41
42#define	TCPOPT_EOL				0
43#define	TCPOPT_NOP				1
44#define	TCPOPT_MAXSEG			2
45#define	TCPOPT_WINDOW			3
46#define	TCPOPT_SACK_PERMITTED	4
47#define	TCPOPT_SACK				5
48#define	TCPOPT_TIMESTAMP		8
49#define	TCPOPT_SIGNATURE		19
50
51#define	MAX_TCPOPTLEN			40
52	/* absolute maximum TCP options length */
53
54#define	TCPOLEN_MAXSEG			4
55#define	TCPOLEN_WINDOW			3
56#define	TCPOLEN_SACK			8
57#define	TCPOLEN_SACK_PERMITTED	2
58#define	TCPOLEN_TIMESTAMP		10
59#define	TCPOLEN_TSTAMP_APPA		(TCPOLEN_TIMESTAMP + 2)
60	/* see RFC 1323, appendix A */
61#define	TCPOLEN_SIGNATURE		18
62
63#define TCPOPT_TSTAMP_HDR \
64    (TCPOPT_NOP << 24 | TCPOPT_NOP << 16 | TCPOPT_TIMESTAMP << 8 | TCPOLEN_TIMESTAMP)
65
66#define TCP_MSS					536
67#define TCP_MAXWIN				65535
68#define TCP_MAX_WINSHIFT		14
69
70#endif
71
72/* options that can be set using setsockopt() and level IPPROTO_TCP */
73
74#define	TCP_NODELAY				0x01
75	/* don't delay sending smaller packets */
76#define	TCP_MAXSEG				0x02
77	/* set maximum segment size */
78#define TCP_NOPUSH				0x04
79	/* don't use TH_PUSH */
80#define TCP_NOOPT				0x08
81	/* don't use any TCP options */
82
83#endif	/* NETINET_TCP_H */
84