xref: /csrg-svn/sys/netinet/tcp.h (revision 36816)
1 /*
2  * Copyright (c) 1982, 1986 Regents of the University of California.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms are permitted
6  * provided that the above copyright notice and this paragraph are
7  * duplicated in all such forms and that any documentation,
8  * advertising materials, and other materials related to such
9  * distribution and use acknowledge that the software was developed
10  * by the University of California, Berkeley.  The name of the
11  * University may not be used to endorse or promote products derived
12  * from this software without specific prior written permission.
13  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
16  *
17  *	@(#)tcp.h	7.4.1.2 (Berkeley) 02/17/89
18  */
19 #ifndef BYTE_ORDER
20 /*
21  * Definitions for byte order,
22  * according to byte significance from low address to high.
23  */
24 #define	LITTLE_ENDIAN	1234	/* least-significant byte first (vax) */
25 #define	BIG_ENDIAN	4321	/* most-significant byte first (IBM, net) */
26 #define	PDP_ENDIAN	3412	/* LSB first in word, MSW first in long (pdp) */
27 
28 #ifdef vax
29 #define	BYTE_ORDER	LITTLE_ENDIAN
30 #else
31 #define	BYTE_ORDER	BIG_ENDIAN	/* mc68000, tahoe, most others */
32 #endif
33 #endif BYTE_ORDER
34 
35 typedef	u_long	tcp_seq;
36 /*
37  * TCP header.
38  * Per RFC 793, September, 1981.
39  */
40 struct tcphdr {
41 	u_short	th_sport;		/* source port */
42 	u_short	th_dport;		/* destination port */
43 	tcp_seq	th_seq;			/* sequence number */
44 	tcp_seq	th_ack;			/* acknowledgement number */
45 #if BYTE_ORDER == LITTLE_ENDIAN
46 	u_char	th_x2:4,		/* (unused) */
47 		th_off:4;		/* data offset */
48 #endif
49 #if BYTE_ORDER == BIG_ENDIAN
50 	u_char	th_off:4,		/* data offset */
51 		th_x2:4;		/* (unused) */
52 #endif
53 	u_char	th_flags;
54 #define	TH_FIN	0x01
55 #define	TH_SYN	0x02
56 #define	TH_RST	0x04
57 #define	TH_PUSH	0x08
58 #define	TH_ACK	0x10
59 #define	TH_URG	0x20
60 	u_short	th_win;			/* window */
61 	u_short	th_sum;			/* checksum */
62 	u_short	th_urp;			/* urgent pointer */
63 };
64 
65 #define	TCPOPT_EOL	0
66 #define	TCPOPT_NOP	1
67 #define	TCPOPT_MAXSEG	2
68 
69 /*
70  * Default maximum segment size for TCP.
71  * With an IP MSS of 576, this is 536,
72  * but 512 is probably more convenient.
73  */
74 #ifdef	lint
75 #define	TCP_MSS	536
76 #else
77 #ifndef IP_MSS
78 #define	IP_MSS	576
79 #endif
80 #define	TCP_MSS	MIN(512, IP_MSS - sizeof (struct tcpiphdr))
81 #endif
82 
83 /*
84  * User-settable options (used with setsockopt).
85  */
86 #define	TCP_NODELAY	0x01	/* don't delay send to coalesce packets */
87 #define	TCP_MAXSEG	0x02	/* set maximum segment size */
88