Home | History | Annotate | Download | only in netinet
      1 /*
      2  * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
      3  * Use is subject to license terms.
      4  */
      5 
      6 /*
      7  * Copyright (c) 1982, 1986 Regents of the University of California.
      8  * All rights reserved.  The Berkeley software License Agreement
      9  * specifies the terms and conditions for redistribution.
     10  */
     11 
     12 #ifndef	_NETINET_TCP_H
     13 #define	_NETINET_TCP_H
     14 
     15 #pragma ident	"%Z%%M%	%I%	%E% SMI"
     16 /* tcp.h 1.11 88/08/19 SMI; from UCB 7.2 10/28/86	*/
     17 
     18 
     19 #include <sys/isa_defs.h>
     20 #include <sys/inttypes.h>
     21 
     22 #ifdef	__cplusplus
     23 extern "C" {
     24 #endif
     25 
     26 typedef	uint32_t	tcp_seq;
     27 /*
     28  * TCP header.
     29  * Per RFC 793, September, 1981.
     30  */
     31 struct tcphdr {
     32 	uint16_t	th_sport;	/* source port */
     33 	uint16_t	th_dport;	/* destination port */
     34 	tcp_seq		th_seq;		/* sequence number */
     35 	tcp_seq		th_ack;		/* acknowledgement number */
     36 #ifdef _BIT_FIELDS_LTOH
     37 	uint_t	th_x2:4,		/* (unused) */
     38 		th_off:4;		/* data offset */
     39 #else
     40 	uint_t	th_off:4,		/* data offset */
     41 		th_x2:4;		/* (unused) */
     42 #endif
     43 	uchar_t	th_flags;
     44 #define	TH_FIN	0x01
     45 #define	TH_SYN	0x02
     46 #define	TH_RST	0x04
     47 #define	TH_PUSH	0x08
     48 #define	TH_ACK	0x10
     49 #define	TH_URG	0x20
     50 #define	TH_ECE	0x40
     51 #define	TH_CWR	0x80
     52 	uint16_t	th_win;		/* window */
     53 	uint16_t	th_sum;		/* checksum */
     54 	uint16_t	th_urp;		/* urgent pointer */
     55 };
     56 
     57 #define	TCPOPT_EOL	0
     58 #define	TCPOPT_NOP	1
     59 #define	TCPOPT_MAXSEG	2
     60 #define	TCPOPT_WSCALE	3
     61 #define	TCPOPT_SACK_PERMITTED	4
     62 #define	TCPOPT_SACK	5
     63 #define	TCPOPT_TSTAMP	8
     64 
     65 /*
     66  * Default maximum segment size for TCP.
     67  * With an IP MTU of 576, this is 536.
     68  */
     69 #define	TCP_MSS	536
     70 
     71 /*
     72  * Options for use with [gs]etsockopt at the TCP level.
     73  *
     74  * Note: Some of the TCP_ namespace has conflict with and
     75  * and is exposed through <xti.h>. (It also requires exposing
     76  * options not implemented). The options with potential
     77  * for conflicts use #ifndef guards.
     78  */
     79 #ifndef TCP_NODELAY
     80 #define	TCP_NODELAY	0x01	/* don't delay send to coalesce packets */
     81 #endif
     82 
     83 #ifndef TCP_MAXSEG
     84 #define	TCP_MAXSEG	0x02	/* set maximum segment size */
     85 #endif
     86 
     87 #ifndef TCP_KEEPALIVE
     88 #define	TCP_KEEPALIVE	0x8	/* set keepalive timer */
     89 #endif
     90 
     91 
     92 #define	TCP_NOTIFY_THRESHOLD		0x10
     93 #define	TCP_ABORT_THRESHOLD		0x11
     94 #define	TCP_CONN_NOTIFY_THRESHOLD	0x12
     95 #define	TCP_CONN_ABORT_THRESHOLD	0x13
     96 #define	TCP_RECVDSTADDR			0x14
     97 #define	TCP_INIT_CWND			0x15
     98 #define	TCP_KEEPALIVE_THRESHOLD		0x16
     99 #define	TCP_KEEPALIVE_ABORT_THRESHOLD	0x17
    100 #define	TCP_CORK			0x18
    101 
    102 /* gap for expansion of ``standard'' options */
    103 #define	TCP_ANONPRIVBIND		0x20	/* for internal use only  */
    104 #define	TCP_EXCLBIND			0x21	/* for internal use only  */
    105 
    106 #ifdef	__cplusplus
    107 }
    108 #endif
    109 
    110 #endif	/* _NETINET_TCP_H */
    111