usr/src/uts/common/inet/tcp.h
author masputra
Sat, 22 Oct 2005 22:50:14 -0700
changeset 741 40027a3621ac
parent 740 70e4862c9a1a
child 898 64b2a371a6bd
permissions -rw-r--r--
PSARC 2005/082 Yosemite: UDP Performance Enhancement 4796051 Solaris needs a more complete HW checksumming support 4905227 duplicate macros in ipclassifier.h and ip.h 4915681 need hardware checksum offload for the case of IP/UDP reassembly 6201076 outbound flow-control dysfunctional, ip to ce using mdt 6223331 ipv6 flow control may corrupt UDP packets 6223809 16-bit aligned IP header should be allowed for all x86 platforms 6275398 Galaxy hangs when running lmbench 6281836 Yosemite project integration into Solaris 6281885 xge needs to support IPv6 checksum offload 6282776 IPv6 NCE fast path is not created for incoming solicitation 6304890 IP transmit-side checksum logic needs to be tightened 6304902 IP6_IN_NOCKSUM is obsolete and should be torched 6304904 UDP should reject TI_GETPEERNAME for non-connected endpoint 6306768 IP and UDP device and module definitions need to be centralized
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     1
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     2
 * CDDL HEADER START
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     3
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     5
 * Common Development and Distribution License, Version 1.0 only
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     6
 * (the "License").  You may not use this file except in compliance
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     7
 * with the License.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     8
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     9
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    10
 * or http://www.opensolaris.org/os/licensing.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    11
 * See the License for the specific language governing permissions
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    12
 * and limitations under the License.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    13
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    14
 * When distributing Covered Code, include this CDDL HEADER in each
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    15
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    16
 * If applicable, add the following below this CDDL HEADER, with the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    17
 * fields enclosed by brackets "[]" replaced with your own identifying
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    18
 * information: Portions Copyright [yyyy] [name of copyright owner]
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    19
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    20
 * CDDL HEADER END
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    21
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    22
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    23
 * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    24
 * Use is subject to license terms.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    25
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    26
/* Copyright (c) 1990 Mentat Inc. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    27
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    28
#ifndef	_INET_TCP_H
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    29
#define	_INET_TCP_H
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    30
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    31
#pragma ident	"%Z%%M%	%I%	%E% SMI"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    32
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    33
#ifdef	__cplusplus
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    34
extern "C" {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    35
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    36
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    37
#include <sys/inttypes.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    38
#include <netinet/ip6.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    39
#include <netinet/tcp.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    40
#include <inet/tcp_sack.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    41
#include <sys/socket.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    42
#include <sys/multidata.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    43
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    44
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    45
 * Private (and possibly temporary) ioctl used by configuration code
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    46
 * to lock in the "default" stream for detached closes.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    47
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    48
#define	TCP_IOC_DEFAULT_Q	(('T' << 8) + 51)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    49
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    50
/* TCP states */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    51
#define	TCPS_CLOSED		-6
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    52
#define	TCPS_IDLE		-5	/* idle (opened, but not bound) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    53
#define	TCPS_BOUND		-4	/* bound, ready to connect or accept */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    54
#define	TCPS_LISTEN		-3	/* listening for connection */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    55
#define	TCPS_SYN_SENT		-2	/* active, have sent syn */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    56
#define	TCPS_SYN_RCVD		-1	/* have received syn (and sent ours) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    57
/* states < TCPS_ESTABLISHED are those where connections not established */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    58
#define	TCPS_ESTABLISHED	0	/* established */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    59
#define	TCPS_CLOSE_WAIT		1	/* rcvd fin, waiting for close */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    60
/* states > TCPS_CLOSE_WAIT are those where user has closed */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    61
#define	TCPS_FIN_WAIT_1		2	/* have closed and sent fin */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    62
#define	TCPS_CLOSING		3	/* closed, xchd FIN, await FIN ACK */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    63
#define	TCPS_LAST_ACK		4	/* had fin and close; await FIN ACK */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    64
/* states > TCPS_CLOSE_WAIT && < TCPS_FIN_WAIT_2 await ACK of FIN */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    65
#define	TCPS_FIN_WAIT_2		5	/* have closed, fin is acked */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    66
#define	TCPS_TIME_WAIT		6	/* in 2*msl quiet wait after close */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    67
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    68
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    69
 * Internal flags used in conjunction with the packet header flags.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    70
 * Used in tcp_rput_data to keep track of what needs to be done.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    71
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    72
#define	TH_LIMIT_XMIT		0x0400	/* Limited xmit is needed */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    73
#define	TH_XMIT_NEEDED		0x0800	/* Window opened - send queued data */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    74
#define	TH_REXMIT_NEEDED	0x1000	/* Time expired for unacked data */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    75
#define	TH_ACK_NEEDED		0x2000	/* Send an ack now. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    76
#define	TH_NEED_SACK_REXMIT	0x4000	/* Use SACK info to retransmission */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    77
#define	TH_ACK_TIMER_NEEDED	0x8000	/* Start the delayed ACK timer */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    78
#define	TH_ORDREL_NEEDED	0x10000	/* Generate an ordrel indication */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    79
#define	TH_MARKNEXT_NEEDED	0x20000	/* Data should have MSGMARKNEXT */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    80
#define	TH_SEND_URP_MARK	0x40000	/* Send up tcp_urp_mark_mp */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    81
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    82
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    83
 * TCP sequence numbers are 32 bit integers operated
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    84
 * on with modular arithmetic.  These macros can be
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    85
 * used to compare such integers.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    86
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    87
#define	SEQ_LT(a, b)	((int32_t)((a)-(b)) < 0)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    88
#define	SEQ_LEQ(a, b)	((int32_t)((a)-(b)) <= 0)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    89
#define	SEQ_GT(a, b)	((int32_t)((a)-(b)) > 0)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    90
#define	SEQ_GEQ(a, b)	((int32_t)((a)-(b)) >= 0)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    91
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    92
/* TCP Protocol header */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    93
typedef	struct tcphdr_s {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    94
	uint8_t		th_lport[2];	/* Source port */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    95
	uint8_t		th_fport[2];	/* Destination port */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    96
	uint8_t		th_seq[4];	/* Sequence number */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    97
	uint8_t		th_ack[4];	/* Acknowledgement number */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    98
	uint8_t		th_offset_and_rsrvd[1]; /* Offset to the packet data */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    99
	uint8_t		th_flags[1];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   100
	uint8_t		th_win[2];	/* Allocation number */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   101
	uint8_t		th_sum[2];	/* TCP checksum */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   102
	uint8_t		th_urp[2];	/* Urgent pointer */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   103
} tcph_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   104
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   105
#define	TCP_HDR_LENGTH(tcph) (((tcph)->th_offset_and_rsrvd[0] >>2) &(0xF << 2))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   106
#define	TCP_MAX_COMBINED_HEADER_LENGTH	(60 + 60) /* Maxed out ip + tcp */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   107
#define	TCP_MAX_IP_OPTIONS_LENGTH	(60 - IP_SIMPLE_HDR_LENGTH)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   108
#define	TCP_MAX_HDR_LENGTH		60
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   109
#define	TCP_MAX_TCP_OPTIONS_LENGTH	(60 - sizeof (tcph_t))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   110
#define	TCP_MIN_HEADER_LENGTH		20
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   111
#define	TCP_MAXWIN			65535
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   112
#define	TCP_PORT_LEN			sizeof (in_port_t)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   113
#define	TCP_MAX_WINSHIFT		14
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   114
#define	TCP_MAX_LARGEWIN		(TCP_MAXWIN << TCP_MAX_WINSHIFT)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   115
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   116
#define	TCPIP_HDR_LENGTH(mp, n)					\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   117
	(n) = IPH_HDR_LENGTH((mp)->b_rptr),			\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   118
	(n) += TCP_HDR_LENGTH((tcph_t *)&(mp)->b_rptr[(n)])
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   119
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   120
/* TCP Protocol header (used if the header is known to be 32-bit aligned) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   121
typedef	struct tcphdra_s {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   122
	in_port_t	tha_lport;	/* Source port */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   123
	in_port_t	tha_fport;	/* Destination port */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   124
	uint32_t	tha_seq;	/* Sequence number */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   125
	uint32_t	tha_ack;	/* Acknowledgement number */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   126
	uint8_t tha_offset_and_reserved; /* Offset to the packet data */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   127
	uint8_t		tha_flags;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   128
	uint16_t	tha_win;	/* Allocation number */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   129
	uint16_t	tha_sum;	/* TCP checksum */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   130
	uint16_t	tha_urp;	/* Urgent pointer */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   131
} tcpha_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   132
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   133
struct conn_s;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   134
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   135
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   136
 * Control structure for each open TCP stream,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   137
 * defined only within the kernel or for a kmem user.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   138
 * NOTE: tcp_reinit_values MUST have a line for each field in this structure!
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   139
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   140
#if (defined(_KERNEL) || defined(_KMEMUSER))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   141
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   142
typedef struct tcp_s {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   143
				/* Pointer to previous bind hash next. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   144
	struct tcp_s *tcp_time_wait_next;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   145
				/* Pointer to next T/W block */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   146
	struct tcp_s *tcp_time_wait_prev;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   147
				/* Pointer to previous T/W next */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   148
	clock_t	tcp_time_wait_expire;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   149
	struct conn_s *tcp_connp;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   150
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   151
	int32_t	tcp_state;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   152
	int32_t	tcp_rcv_ws;		/* My window scale power */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   153
	int32_t	tcp_snd_ws;		/* Sender's window scale power */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   154
	uint32_t tcp_ts_recent;		/* Timestamp of earliest unacked */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   155
					/*  data segment */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   156
	clock_t	tcp_rto;		/* Round trip timeout */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   157
	clock_t	tcp_last_rcv_lbolt;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   158
				/* lbolt on last packet, used for PAWS */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   159
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   160
	uint32_t tcp_snxt;		/* Senders next seq num */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   161
	uint32_t tcp_swnd;		/* Senders window (relative to suna) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   162
	uint32_t tcp_mss;		/* Max segment size */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   163
	uint32_t tcp_iss;		/* Initial send seq num */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   164
	uint32_t tcp_rnxt;		/* Seq we expect to recv next */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   165
	uint32_t tcp_rwnd;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   166
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   167
	queue_t	*tcp_rq;		/* Our upstream neighbor (client) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   168
	queue_t	*tcp_wq;		/* Our downstream neighbor */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   169
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   170
	/* Fields arranged in approximate access order along main paths */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   171
	mblk_t	*tcp_xmit_head;		/* Head of rexmit list */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   172
	mblk_t	*tcp_xmit_last;		/* last valid data seen by tcp_wput */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   173
	mblk_t	*tcp_xmit_tail;		/* Last rexmit data sent */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   174
	uint32_t tcp_unsent;		/* # of bytes in hand that are unsent */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   175
	uint32_t tcp_xmit_tail_unsent;	/* # of unsent bytes in xmit_tail */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   176
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   177
	uint32_t tcp_suna;		/* Sender unacknowledged */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   178
	uint32_t tcp_rexmit_nxt;	/* Next rexmit seq num */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   179
	uint32_t tcp_rexmit_max;	/* Max retran seq num */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   180
	int32_t	tcp_snd_burst;		/* Send burst factor */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   181
	uint32_t tcp_cwnd;		/* Congestion window */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   182
	int32_t tcp_cwnd_cnt;		/* cwnd cnt in congestion avoidance */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   183
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   184
	uint32_t tcp_ibsegs;		/* Inbound segments on this stream */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   185
	uint32_t tcp_obsegs;		/* Outbound segments on this stream */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   186
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   187
	uint32_t tcp_naglim;		/* Tunable nagle limit */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   188
	uint32_t	tcp_valid_bits;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   189
#define	TCP_ISS_VALID	0x1	/* Is the tcp_iss seq num active? */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   190
#define	TCP_FSS_VALID	0x2	/* Is the tcp_fss seq num active? */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   191
#define	TCP_URG_VALID	0x4	/* Is the tcp_urg seq num active? */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   192
#define	TCP_OFO_FIN_VALID 0x8	/* Has TCP received an out of order FIN? */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   193
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   194
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   195
	int32_t	tcp_xmit_hiwater;	/* Send buffer high water mark. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   196
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   197
	timeout_id_t	tcp_timer_tid;	/* Control block for timer service */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   198
	uchar_t	tcp_timer_backoff;	/* Backoff shift count. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   199
	int64_t tcp_last_recv_time;	/* Last time we receive a segment. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   200
	uint32_t tcp_init_cwnd;		/* Initial cwnd (start/restart) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   201
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   202
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   203
	 * Following socket options are set by sockfs outside the squeue
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   204
	 * and we want to separate these bit fields from the other bit fields
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   205
	 * set by TCP to avoid grabbing locks. sockfs ensures that only one
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   206
	 * thread in sockfs can set a socket option at a time on a conn_t.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   207
	 * However TCP may read these options concurrently. The linger option
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   208
	 * needs atomicity since tcp_lingertime also needs to be in sync.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   209
	 * However TCP uses it only during close, and by then no socket option
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   210
	 * can come down. So we don't need any locks, instead just separating
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   211
	 * the sockfs settable bit fields from the other bit fields is
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   212
	 * sufficient.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   213
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   214
	uint32_t
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   215
		tcp_debug : 1,		/* SO_DEBUG "socket" option. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   216
		tcp_dontroute : 1,	/* SO_DONTROUTE "socket" option. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   217
		tcp_broadcast : 1,	/* SO_BROADCAST "socket" option. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   218
		tcp_useloopback : 1,	/* SO_USELOOPBACK "socket" option. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   219
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   220
		tcp_oobinline : 1,	/* SO_OOBINLINE "socket" option. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   221
		tcp_dgram_errind : 1,	/* SO_DGRAM_ERRIND option */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   222
		tcp_linger : 1,		/* SO_LINGER turned on */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   223
		tcp_reuseaddr	: 1,	/* SO_REUSEADDR "socket" option. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   224
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   225
		tcp_junk_to_bit_31 : 24;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   226
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   227
	/* Following manipulated by TCP under squeue protection */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   228
	uint32_t
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   229
		tcp_urp_last_valid : 1,	/* Is tcp_urp_last valid? */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   230
		tcp_hard_binding : 1,	/* If we've started a full bind */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   231
		tcp_hard_bound : 1,	/* If we've done a full bind with IP */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   232
		tcp_fin_acked : 1,	/* Has our FIN been acked? */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   233
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   234
		tcp_fin_rcvd : 1,	/* Have we seen a FIN? */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   235
		tcp_fin_sent : 1,	/* Have we sent our FIN yet? */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   236
		tcp_ordrel_done : 1,	/* Have we sent the ord_rel upstream? */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   237
		tcp_flow_stopped : 1,	/* Have we flow controlled xmitter? */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   238
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   239
		tcp_detached : 1,	/* If we're detached from a stream */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   240
		tcp_bind_pending : 1,	/* Client is waiting for bind ack */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   241
		tcp_unbind_pending : 1, /* Client sent T_UNBIND_REQ */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   242
		tcp_deferred_clean_death : 1,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   243
					/* defer tcp endpoint cleanup etc. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   244
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   245
		tcp_conn_def_q0: 1,	/* move from q0 to q deferred */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   246
		tcp_ka_enabled: 1,	/* Connection KeepAlive Timer needed */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   247
		tcp_zero_win_probe: 1,	/* Zero win probing is in progress */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   248
		tcp_loopback: 1,	/* src and dst are the same machine */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   249
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   250
		tcp_localnet: 1,	/* src and dst are on the same subnet */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   251
		tcp_syn_defense: 1,	/* For defense against SYN attack */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   252
#define	tcp_dontdrop	tcp_syn_defense
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   253
		tcp_set_timer : 1,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   254
		tcp_active_open: 1,	/* This is a active open */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   255
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   256
		tcp_timeout : 1,	/* qbufcall failed, qtimeout pending */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   257
		tcp_rexmit : 1,		/* TCP is retransmitting */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   258
		tcp_snd_sack_ok : 1,	/* Can use SACK for this connection */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   259
		tcp_empty_flag : 1,	/* Empty flag for future use */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   260
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   261
		tcp_recvdstaddr : 1,	/* return T_EXTCONN_IND with dst addr */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   262
		tcp_hwcksum : 1,	/* The NIC is capable of hwcksum */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   263
		tcp_ip_forward_progress : 1,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   264
		tcp_anon_priv_bind : 1,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   265
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   266
		tcp_ecn_ok : 1,		/* Can use ECN for this connection */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   267
		tcp_ecn_echo_on : 1,	/* Need to do ECN echo */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   268
		tcp_ecn_cwr_sent : 1,	/* ECN_CWR has been sent */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   269
		tcp_cwr : 1;		/* Cwnd has reduced recently */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   270
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   271
	/* Following manipulated by TCP under squeue protection */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   272
	uint32_t
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   273
		tcp_mdt : 1,		/* Lower layer is capable of MDT */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   274
		tcp_snd_ts_ok  : 1,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   275
		tcp_snd_ws_ok  : 1,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   276
		tcp_exclbind	: 1,	/* ``exclusive'' binding */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   277
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   278
		tcp_reserved_port : 1,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   279
		tcp_hdr_grown	: 1,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   280
		tcp_in_free_list : 1,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   281
		tcp_snd_zcopy_on : 1,	/* xmit zero-copy enabled */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   282
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   283
		tcp_snd_zcopy_aware : 1, /* client is zero-copy aware */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   284
		tcp_xmit_zc_clean : 1,	/* the xmit list is free of zc-mblk */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   285
		tcp_wait_for_eagers : 1, /* Wait for eagers to disappear */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   286
		tcp_accept_error : 1,	/* Error during TLI accept */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   287
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   288
		tcp_send_discon_ind : 1, /* TLI accept err, send discon ind */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   289
		tcp_cork : 1,		/* tcp_cork option */
741
40027a3621ac PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents: 740
diff changeset
   290
		tcp_pad_to_bit_31 : 18;
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   291
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   292
	uint32_t	tcp_if_mtu;	/* Outgoing interface MTU. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   293
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   294
	mblk_t	*tcp_reass_head;	/* Out of order reassembly list head */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   295
	mblk_t	*tcp_reass_tail;	/* Out of order reassembly list tail */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   296
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   297
	tcp_sack_info_t	*tcp_sack_info;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   298
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   299
#define	tcp_pipe	tcp_sack_info->tcp_pipe
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   300
#define	tcp_fack	tcp_sack_info->tcp_fack
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   301
#define	tcp_sack_snxt	tcp_sack_info->tcp_sack_snxt
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   302
#define	tcp_max_sack_blk	tcp_sack_info->tcp_max_sack_blk
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   303
#define	tcp_num_sack_blk	tcp_sack_info->tcp_num_sack_blk
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   304
#define	tcp_sack_list		tcp_sack_info->tcp_sack_list
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   305
#define	tcp_num_notsack_blk	tcp_sack_info->tcp_num_notsack_blk
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   306
#define	tcp_cnt_notsack_list	tcp_sack_info->tcp_cnt_notsack_list
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   307
#define	tcp_notsack_list		tcp_sack_info->tcp_notsack_list
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   308
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   309
	mblk_t	*tcp_rcv_list;		/* Queued until push, urgent data, */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   310
	mblk_t	*tcp_rcv_last_head;	/* optdata, or the count exceeds */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   311
	mblk_t	*tcp_rcv_last_tail;	/* tcp_rcv_push_wait. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   312
	uint32_t tcp_rcv_cnt;		/* tcp_rcv_list is b_next chain. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   313
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   314
	uint32_t tcp_cwnd_ssthresh;	/* Congestion window */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   315
	uint32_t tcp_cwnd_max;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   316
	uint32_t tcp_csuna;		/* Clear (no rexmits in window) suna */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   317
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   318
	clock_t	tcp_rtt_sa;		/* Round trip smoothed average */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   319
	clock_t	tcp_rtt_sd;		/* Round trip smoothed deviation */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   320
	clock_t	tcp_rtt_update;		/* Round trip update(s) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   321
	clock_t tcp_ms_we_have_waited;	/* Total retrans time */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   322
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   323
	uint32_t tcp_swl1;		/* These help us avoid using stale */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   324
	uint32_t tcp_swl2;		/*  packets to update state */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   325
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   326
	uint32_t tcp_rack;		/* Seq # we have acked */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   327
	uint32_t tcp_rack_cnt;		/* # of segs we have deferred ack */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   328
	uint32_t tcp_rack_cur_max;	/* # of segs we may defer ack for now */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   329
	uint32_t tcp_rack_abs_max;	/* # of segs we may defer ack ever */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   330
	timeout_id_t	tcp_ack_tid;	/* Delayed ACK timer ID */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   331
	timeout_id_t	tcp_push_tid;	/* Push timer ID */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   332
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   333
	uint32_t tcp_max_swnd;		/* Maximum swnd we have seen */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   334
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   335
	struct tcp_s *tcp_listener;	/* Our listener */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   336
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   337
	int32_t	tcp_xmit_lowater;	/* Send buffer low water mark. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   338
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   339
	uint32_t tcp_irs;		/* Initial recv seq num */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   340
	uint32_t tcp_fss;		/* Final/fin send seq num */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   341
	uint32_t tcp_urg;		/* Urgent data seq num */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   342
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   343
	clock_t	tcp_first_timer_threshold;  /* When to prod IP */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   344
	clock_t	tcp_second_timer_threshold; /* When to give up completely */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   345
	clock_t	tcp_first_ctimer_threshold; /* 1st threshold while connecting */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   346
	clock_t tcp_second_ctimer_threshold; /* 2nd ... while connecting */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   347
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   348
	int	tcp_lingertime;		/* Close linger time (in seconds) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   349
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   350
	uint32_t tcp_urp_last;		/* Last urp for which signal sent */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   351
	mblk_t	*tcp_urp_mp;		/* T_EXDATA_IND for urgent byte */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   352
	mblk_t	*tcp_urp_mark_mp;	/* zero-length marked/unmarked msg */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   353
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   354
	int tcp_conn_req_cnt_q0;	/* # of conn reqs in SYN_RCVD */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   355
	int tcp_conn_req_cnt_q;	/* # of conn reqs in ESTABLISHED */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   356
	int tcp_conn_req_max;	/* # of ESTABLISHED conn reqs allowed */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   357
	t_scalar_t tcp_conn_req_seqnum;	/* Incrementing pending conn req ID */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   358
#define	tcp_ip_addr_cache	tcp_reass_tail
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   359
					/* Cache ip addresses that */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   360
					/* complete the 3-way handshake */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   361
	kmutex_t  tcp_eager_lock;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   362
	struct tcp_s *tcp_eager_next_q; /* next eager in ESTABLISHED state */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   363
	struct tcp_s *tcp_eager_last_q;	/* last eager in ESTABLISHED state */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   364
	struct tcp_s *tcp_eager_next_q0; /* next eager in SYN_RCVD state */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   365
	struct tcp_s *tcp_eager_prev_q0; /* prev eager in SYN_RCVD state */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   366
					/* all eagers form a circular list */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   367
	union {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   368
	    mblk_t *tcp_eager_conn_ind; /* T_CONN_IND waiting for 3rd ack. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   369
	    mblk_t *tcp_opts_conn_req; /* T_CONN_REQ w/ options processed */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   370
	} tcp_conn;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   371
	uint32_t tcp_syn_rcvd_timeout;	/* How many SYN_RCVD timeout in q0 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   372
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   373
	/* TCP Keepalive Timer members */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   374
	int32_t	tcp_ka_last_intrvl;	/* Last probe interval */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   375
	timeout_id_t tcp_ka_tid;	/* Keepalive timer ID */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   376
	uint32_t tcp_ka_interval;	/* Keepalive interval */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   377
	uint32_t tcp_ka_abort_thres;	/* Keepalive abort threshold */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   378
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   379
	int32_t	tcp_client_errno;	/* How the client screwed up */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   380
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   381
	char	*tcp_iphc;		/* Buffer holding tcp/ip hdr template */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   382
	int	tcp_iphc_len;		/* actual allocated buffer size */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   383
	int32_t	tcp_hdr_len;		/* Byte len of combined TCP/IP hdr */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   384
	ipha_t	*tcp_ipha;		/* IPv4 header in the buffer */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   385
	ip6_t	*tcp_ip6h;		/* IPv6 header in the buffer */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   386
	int	tcp_ip_hdr_len;		/* Byte len of our current IPvx hdr */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   387
	tcph_t	*tcp_tcph;		/* tcp header within combined hdr */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   388
	int32_t	tcp_tcp_hdr_len;	/* tcp header len within combined */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   389
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   390
	uint32_t tcp_sum;		/* checksum to compensate for source */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   391
					/* routed packets. Host byte order */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   392
	uint16_t tcp_last_sent_len;	/* Record length for nagle */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   393
	uint16_t tcp_dupack_cnt;	/* # of consequtive duplicate acks */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   394
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   395
	kmutex_t	*tcp_acceptor_lockp;	/* Ptr to tf_lock */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   396
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   397
	timeout_id_t	tcp_ordrelid;		/* qbufcall/qtimeout id */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   398
	t_uscalar_t	tcp_acceptor_id;	/* ACCEPTOR_id */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   399
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   400
	int		tcp_ipsec_overhead;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   401
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   402
	 * Address family that app wishes returned addrsses to be in.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   403
	 * Currently taken from address family used in T_BIND_REQ, but
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   404
	 * should really come from family used in original socket() call.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   405
	 * Value can be AF_INET or AF_INET6.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   406
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   407
	uint_t	tcp_family;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   408
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   409
	 * used for a quick test to determine if any ancillary bits are
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   410
	 * set
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   411
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   412
	uint_t		tcp_ipv6_recvancillary;		/* Flags */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   413
#define	TCP_IPV6_RECVPKTINFO	0x01	/* IPV6_RECVPKTINFO option  */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   414
#define	TCP_IPV6_RECVHOPLIMIT	0x02	/* IPV6_RECVHOPLIMIT option */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   415
#define	TCP_IPV6_RECVHOPOPTS	0x04	/* IPV6_RECVHOPOPTS option */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   416
#define	TCP_IPV6_RECVDSTOPTS	0x08	/* IPV6_RECVDSTOPTS option */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   417
#define	TCP_IPV6_RECVRTHDR	0x10	/* IPV6_RECVRTHDR option */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   418
#define	TCP_IPV6_RECVRTDSTOPTS	0x20	/* IPV6_RECVRTHDRDSTOPTS option */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   419
#define	TCP_IPV6_RECVTCLASS	0x40	/* IPV6_RECVTCLASS option */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   420
#define	TCP_OLD_IPV6_RECVDSTOPTS 0x80	/* old IPV6_RECVDSTOPTS option */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   421
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   422
	uint_t		tcp_recvifindex; /* Last received IPV6_RCVPKTINFO */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   423
	uint_t		tcp_recvhops;	/* Last received IPV6_RECVHOPLIMIT */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   424
	uint_t		tcp_recvtclass;	/* Last received IPV6_RECVTCLASS */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   425
	ip6_hbh_t	*tcp_hopopts;	/* Last received IPV6_RECVHOPOPTS */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   426
	ip6_dest_t	*tcp_dstopts;	/* Last received IPV6_RECVDSTOPTS */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   427
	ip6_dest_t	*tcp_rtdstopts;	/* Last recvd IPV6_RECVRTHDRDSTOPTS */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   428
	ip6_rthdr_t	*tcp_rthdr;	/* Last received IPV6_RECVRTHDR */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   429
	uint_t		tcp_hopoptslen;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   430
	uint_t		tcp_dstoptslen;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   431
	uint_t		tcp_rtdstoptslen;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   432
	uint_t		tcp_rthdrlen;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   433
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   434
	mblk_t		*tcp_timercache;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   435
	cred_t		*tcp_cred;	/* Credentials when this was opened */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   436
	pid_t		tcp_cpid;	/* Process id when this was opened */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   437
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   438
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   439
	union {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   440
		struct {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   441
			uchar_t	v4_ttl;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   442
				/* Dup of tcp_ipha.iph_type_of_service */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   443
			uchar_t	v4_tos; /* Dup of tcp_ipha.iph_ttl */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   444
		} v4_hdr_info;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   445
		struct {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   446
			uint_t	v6_vcf;		/* Dup of tcp_ip6h.ip6h_vcf */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   447
			uchar_t	v6_hops;	/* Dup of tcp_ip6h.ip6h_hops */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   448
		} v6_hdr_info;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   449
	} tcp_hdr_info;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   450
#define	tcp_ttl	tcp_hdr_info.v4_hdr_info.v4_ttl
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   451
#define	tcp_tos	tcp_hdr_info.v4_hdr_info.v4_tos
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   452
#define	tcp_ip6_vcf	tcp_hdr_info.v6_hdr_info.v6_vcf
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   453
#define	tcp_ip6_hops	tcp_hdr_info.v6_hdr_info.v6_hops
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   454
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   455
	ushort_t	tcp_ipversion;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   456
	uint_t		tcp_bound_if;	/* IPV6_BOUND_IF */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   457
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   458
#define	tcp_lport	tcp_connp->conn_lport
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   459
#define	tcp_fport	tcp_connp->conn_fport
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   460
#define	tcp_ports	tcp_connp->conn_ports
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   461
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   462
#define	tcp_remote	tcp_connp->conn_rem
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   463
#define	tcp_ip_src	tcp_connp->conn_src
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   464
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   465
#define	tcp_remote_v6	tcp_connp->conn_remv6
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   466
#define	tcp_ip_src_v6	tcp_connp->conn_srcv6
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   467
#define	tcp_bound_source_v6	tcp_connp->conn_bound_source_v6
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   468
#define	tcp_bound_source	tcp_connp->conn_bound_source
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   469
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   470
	kmutex_t	tcp_closelock;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   471
	kcondvar_t	tcp_closecv;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   472
	uint8_t		tcp_closed;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   473
	uint8_t		tcp_closeflags;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   474
	uint8_t		tcp_cleandeathtag;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   475
	mblk_t		tcp_closemp;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   476
	timeout_id_t	tcp_linger_tid;	/* Linger timer ID */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   477
	void		*tcp_tracebuf;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   478
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   479
	struct tcp_s *tcp_acceptor_hash; /* Acceptor hash chain */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   480
	struct tcp_s **tcp_ptpahn; /* Pointer to previous accept hash next. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   481
	struct tcp_s *tcp_bind_hash; /* Bind hash chain */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   482
	struct tcp_s **tcp_ptpbhn;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   483
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   484
	boolean_t	tcp_ire_ill_check_done;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   485
	uint_t		tcp_maxpsz;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   486
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   487
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   488
	 * used for Multidata Transmit
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   489
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   490
	uint_t	tcp_mdt_hdr_head; /* leading header fragment extra space */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   491
	uint_t	tcp_mdt_hdr_tail; /* trailing header fragment extra space */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   492
	int	tcp_mdt_max_pld;  /* maximum payload buffers per Multidata */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   493
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   494
	uint32_t	tcp_ofo_fin_seq; /* Recv out of order FIN seq num */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   495
	uint32_t	tcp_cwr_snd_max;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   496
	uint_t		tcp_drop_opt_ack_cnt; /* # tcp generated optmgmt */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   497
	ip6_pkt_t	tcp_sticky_ipp;			/* Sticky options */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   498
#define	tcp_ipp_fields	tcp_sticky_ipp.ipp_fields	/* valid fields */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   499
#define	tcp_ipp_ifindex	tcp_sticky_ipp.ipp_ifindex	/* pktinfo ifindex */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   500
#define	tcp_ipp_addr	tcp_sticky_ipp.ipp_addr	/* pktinfo src/dst addr */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   501
#define	tcp_ipp_hoplimit	tcp_sticky_ipp.ipp_hoplimit
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   502
#define	tcp_ipp_hopoptslen	tcp_sticky_ipp.ipp_hopoptslen
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   503
#define	tcp_ipp_rtdstoptslen	tcp_sticky_ipp.ipp_rtdstoptslen
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   504
#define	tcp_ipp_rthdrlen	tcp_sticky_ipp.ipp_rthdrlen
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   505
#define	tcp_ipp_dstoptslen	tcp_sticky_ipp.ipp_dstoptslen
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   506
#define	tcp_ipp_hopopts		tcp_sticky_ipp.ipp_hopopts
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   507
#define	tcp_ipp_rtdstopts	tcp_sticky_ipp.ipp_rtdstopts
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   508
#define	tcp_ipp_rthdr		tcp_sticky_ipp.ipp_rthdr
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   509
#define	tcp_ipp_dstopts		tcp_sticky_ipp.ipp_dstopts
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   510
#define	tcp_ipp_nexthop		tcp_sticky_ipp.ipp_nexthop
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   511
#define	tcp_ipp_use_min_mtu	tcp_sticky_ipp.ipp_use_min_mtu
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   512
	struct tcp_s *tcp_saved_listener;	/* saved value of listener */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   513
741
40027a3621ac PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents: 740
diff changeset
   514
	uint32_t	tcp_in_ack_unsent;	/* ACK for unsent data cnt. */
40027a3621ac PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents: 740
diff changeset
   515
40027a3621ac PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents: 740
diff changeset
   516
	/*
40027a3621ac PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents: 740
diff changeset
   517
	 * The following fusion-related fields are protected by squeue.
40027a3621ac PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents: 740
diff changeset
   518
	 */
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   519
	struct tcp_s *tcp_loopback_peer;	/* peer tcp for loopback */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   520
	mblk_t	*tcp_fused_sigurg_mp;		/* M_PCSIG mblk for SIGURG */
741
40027a3621ac PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents: 740
diff changeset
   521
	size_t	tcp_fuse_rcv_hiwater;		/* fusion receive queue size */
40027a3621ac PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents: 740
diff changeset
   522
	uint_t	tcp_fuse_rcv_unread_hiwater;	/* max # of outstanding pkts */
40027a3621ac PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents: 740
diff changeset
   523
	/*
40027a3621ac PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents: 740
diff changeset
   524
	 * The following fusion-related fields and bit fields are to be
40027a3621ac PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents: 740
diff changeset
   525
	 * manipulated with squeue protection or with tcp_fuse_lock held.
40027a3621ac PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents: 740
diff changeset
   526
	 */
40027a3621ac PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents: 740
diff changeset
   527
	kmutex_t tcp_fuse_lock;
40027a3621ac PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents: 740
diff changeset
   528
	uint_t tcp_fuse_rcv_unread_cnt;	/* # of outstanding pkts */
40027a3621ac PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents: 740
diff changeset
   529
	uint32_t
40027a3621ac PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents: 740
diff changeset
   530
		tcp_fused : 1,		/* loopback tcp in fusion mode */
40027a3621ac PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents: 740
diff changeset
   531
		tcp_unfusable : 1,	/* fusion not allowed on endpoint */
40027a3621ac PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents: 740
diff changeset
   532
		tcp_fused_sigurg : 1,	/* send SIGURG upon draining */
40027a3621ac PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents: 740
diff changeset
   533
		tcp_direct_sockfs : 1,	/* direct calls to sockfs */
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   534
741
40027a3621ac PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents: 740
diff changeset
   535
		tcp_fuse_syncstr_stopped : 1, /* synchronous streams stopped */
40027a3621ac PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents: 740
diff changeset
   536
		tcp_fuse_to_bit_31 : 27;
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   537
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   538
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   539
	 * This variable is accessed without any lock protection
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   540
	 * and therefore must not be declared as a bit field along
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   541
	 * with the rest which require such condition.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   542
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   543
	boolean_t	tcp_issocket;	/* this is a socket tcp */
741
40027a3621ac PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents: 740
diff changeset
   544
40027a3621ac PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents: 740
diff changeset
   545
	uint32_t	tcp_squeue_bytes;
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   546
} tcp_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   547
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   548
extern void 	tcp_free(tcp_t *tcp);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   549
extern void	tcp_ddi_init(void);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   550
extern void	tcp_ddi_destroy(void);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   551
extern void	tcp_xmit_listeners_reset(mblk_t *mp, uint_t ip_hdr_len);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   552
extern void	tcp_conn_request(void *arg, mblk_t *mp, void *arg2);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   553
extern void	tcp_conn_request_unbound(void *arg, mblk_t *mp, void *arg2);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   554
extern void 	tcp_input(void *arg, mblk_t *mp, void *arg2);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   555
extern void	tcp_rput_data(void *arg, mblk_t *mp, void *arg2);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   556
extern void 	*tcp_get_conn(void *arg);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   557
extern void	tcp_time_wait_collector(void *arg);
741
40027a3621ac PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents: 740
diff changeset
   558
extern int	tcp_snmp_get(queue_t *, mblk_t *);
40027a3621ac PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents: 740
diff changeset
   559
extern int	tcp_snmp_set(queue_t *, int, int, uchar_t *, int len);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   560
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   561
 * The TCP Fanout structure.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   562
 * The hash tables and their linkage (tcp_*_hash_next, tcp_ptp*hn) are
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   563
 * protected by the per-bucket tf_lock. Each tcp_t
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   564
 * inserted in the list points back at this lock using tcp_*_lockp.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   565
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   566
 * The listener and acceptor hash queues are lists of tcp_t.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   567
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   568
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   569
/* listener hash and acceptor hash queue head */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   570
typedef struct tf_s {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   571
	tcp_t		*tf_tcp;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   572
	kmutex_t	tf_lock;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   573
} tf_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   574
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   575
extern mib2_tcp_t tcp_mib;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   576
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   577
#endif	/* (defined(_KERNEL) || defined(_KMEMUSER)) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   578
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   579
/* Contract private interface between TCP and Clustering. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   580
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   581
#define	CL_TCPI_V1	1	/* cl_tcpi_version number */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   582
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   583
typedef struct cl_tcp_info_s {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   584
	ushort_t	cl_tcpi_version;	/* cl_tcp_info_t's version no */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   585
	ushort_t	cl_tcpi_ipversion;	/* IP version */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   586
	int32_t		cl_tcpi_state;		/* TCP state */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   587
	in_port_t	cl_tcpi_lport;		/* Local port */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   588
	in_port_t	cl_tcpi_fport;		/* Remote port */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   589
	in6_addr_t	cl_tcpi_laddr_v6;	/* Local IP address */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   590
	in6_addr_t	cl_tcpi_faddr_v6;	/* Remote IP address */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   591
#ifdef _KERNEL
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   592
/* Note: V4_PART_OF_V6 is meant to be used only for _KERNEL defined stuff */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   593
#define	cl_tcpi_laddr	V4_PART_OF_V6(cl_tcpi_laddr_v6)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   594
#define	cl_tcpi_faddr	V4_PART_OF_V6(cl_tcpi_faddr_v6)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   595
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   596
#endif	/* _KERNEL */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   597
} cl_tcp_info_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   598
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   599
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   600
 * Hook functions to enable cluster networking
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   601
 * On non-clustered systems these vectors must always be NULL.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   602
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   603
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   604
extern void	(*cl_inet_listen)(uint8_t, sa_family_t, uint8_t *, in_port_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   605
extern void	(*cl_inet_unlisten)(uint8_t, sa_family_t, uint8_t *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   606
		    in_port_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   607
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   608
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   609
 * Contracted Consolidation Private ioctl for aborting TCP connections.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   610
 * In order to keep the offsets and size of the structure the same between
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   611
 * a 32-bit application and a 64-bit amd64 kernel, we use a #pragma
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   612
 * pack(4).
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   613
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   614
#define	TCP_IOC_ABORT_CONN	(('T' << 8) + 91)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   615
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   616
#if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   617
#pragma pack(4)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   618
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   619
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   620
typedef struct tcp_ioc_abort_conn_s {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   621
	struct sockaddr_storage ac_local;	/* local addr and port */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   622
	struct sockaddr_storage ac_remote;	/* remote addr and port */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   623
	int32_t ac_start;			/* start state */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   624
	int32_t ac_end;				/* end state  */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   625
	int32_t ac_zoneid;			/* zoneid */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   626
} tcp_ioc_abort_conn_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   627
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   628
#if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   629
#pragma pack()
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   630
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   631
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   632
#if (defined(_KERNEL) || defined(_KMEMUSER))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   633
extern void tcp_rput_other(tcp_t *tcp, mblk_t *mp);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   634
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   635
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   636
#ifdef	__cplusplus
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   637
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   638
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   639
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   640
#endif	/* _INET_TCP_H */