xref: /csrg-svn/sys/netinet/tcp.h (revision 63218)
123187Smckusick /*
2*63218Sbostic  * Copyright (c) 1982, 1986, 1993
3*63218Sbostic  *	The Regents of the University of California.  All rights reserved.
423187Smckusick  *
544483Sbostic  * %sccs.include.redist.c%
632787Sbostic  *
7*63218Sbostic  *	@(#)tcp.h	8.1 (Berkeley) 06/10/93
823187Smckusick  */
94573Swnj 
105085Swnj typedef	u_long	tcp_seq;
114573Swnj /*
124899Swnj  * TCP header.
134924Swnj  * Per RFC 793, September, 1981.
144573Swnj  */
154899Swnj struct tcphdr {
164899Swnj 	u_short	th_sport;		/* source port */
174899Swnj 	u_short	th_dport;		/* destination port */
185085Swnj 	tcp_seq	th_seq;			/* sequence number */
195085Swnj 	tcp_seq	th_ack;			/* acknowledgement number */
2044373Skarels #if BYTE_ORDER == LITTLE_ENDIAN
219992Ssam 	u_char	th_x2:4,		/* (unused) */
224899Swnj 		th_off:4;		/* data offset */
239992Ssam #endif
2444373Skarels #if BYTE_ORDER == BIG_ENDIAN
2529923Skarels 	u_char	th_off:4,		/* data offset */
2629923Skarels 		th_x2:4;		/* (unused) */
2729923Skarels #endif
284575Swnj 	u_char	th_flags;
295065Swnj #define	TH_FIN	0x01
305065Swnj #define	TH_SYN	0x02
315065Swnj #define	TH_RST	0x04
325065Swnj #define	TH_PUSH	0x08
335065Swnj #define	TH_ACK	0x10
345065Swnj #define	TH_URG	0x20
354899Swnj 	u_short	th_win;			/* window */
364899Swnj 	u_short	th_sum;			/* checksum */
374899Swnj 	u_short	th_urp;			/* urgent pointer */
384499Swnj };
395440Swnj 
4057433Sandrew #define	TCPOPT_EOL		0
4157433Sandrew #define	TCPOPT_NOP		1
4257433Sandrew #define	TCPOPT_MAXSEG		2
4357433Sandrew #define    TCPOLEN_MAXSEG		4
4457433Sandrew #define TCPOPT_WINDOW		3
4557433Sandrew #define    TCPOLEN_WINDOW		3
4657433Sandrew #define TCPOPT_SACK_PERMITTED	4		/* Experimental */
4757433Sandrew #define    TCPOLEN_SACK_PERMITTED	2
4857433Sandrew #define TCPOPT_SACK		5		/* Experimental */
4957433Sandrew #define TCPOPT_TIMESTAMP	8
5057433Sandrew #define    TCPOLEN_TIMESTAMP		10
5157433Sandrew #define    TCPOLEN_TSTAMP_APPA		(TCPOLEN_TIMESTAMP+2) /* appendix A */
5217316Skarels 
5357433Sandrew #define TCPOPT_TSTAMP_HDR	\
5457433Sandrew     (TCPOPT_NOP<<24|TCPOPT_NOP<<16|TCPOPT_TIMESTAMP<<8|TCPOLEN_TIMESTAMP)
5557433Sandrew 
5617316Skarels /*
5726259Skarels  * Default maximum segment size for TCP.
5826259Skarels  * With an IP MSS of 576, this is 536,
5926259Skarels  * but 512 is probably more convenient.
6044373Skarels  * This should be defined as MIN(512, IP_MSS - sizeof (struct tcpiphdr)).
6117316Skarels  */
6244373Skarels #define	TCP_MSS	512
6325895Skarels 
6457433Sandrew #define	TCP_MAXWIN	65535	/* largest value for (unscaled) window */
6544373Skarels 
6657433Sandrew #define TCP_MAX_WINSHIFT	14	/* maximum window shift */
6757433Sandrew 
6825895Skarels /*
6925895Skarels  * User-settable options (used with setsockopt).
7025895Skarels  */
7125895Skarels #define	TCP_NODELAY	0x01	/* don't delay send to coalesce packets */
7225895Skarels #define	TCP_MAXSEG	0x02	/* set maximum segment size */
73