usr/src/uts/common/inet/tcp.h
changeset 741 40027a3621ac
parent 740 70e4862c9a1a
child 898 64b2a371a6bd
--- a/usr/src/uts/common/inet/tcp.h	Sat Oct 22 11:06:40 2005 -0700
+++ b/usr/src/uts/common/inet/tcp.h	Sat Oct 22 22:50:14 2005 -0700
@@ -286,11 +286,8 @@
 		tcp_accept_error : 1,	/* Error during TLI accept */
 
 		tcp_send_discon_ind : 1, /* TLI accept err, send discon ind */
-		tcp_fused : 1,		/* loopback tcp in fusion mode */
-		tcp_unfusable : 1,	/* fusion not allowed on endpoint */
-		tcp_fused_sigurg : 1,	/* send SIGURG upon draining */
 		tcp_cork : 1,		/* tcp_cork option */
-		tcp_pad_to_bit_31 : 15;
+		tcp_pad_to_bit_31 : 18;
 
 	uint32_t	tcp_if_mtu;	/* Outgoing interface MTU. */
 
@@ -514,10 +511,29 @@
 #define	tcp_ipp_use_min_mtu	tcp_sticky_ipp.ipp_use_min_mtu
 	struct tcp_s *tcp_saved_listener;	/* saved value of listener */
 
+	uint32_t	tcp_in_ack_unsent;	/* ACK for unsent data cnt. */
+
+	/*
+	 * The following fusion-related fields are protected by squeue.
+	 */
 	struct tcp_s *tcp_loopback_peer;	/* peer tcp for loopback */
 	mblk_t	*tcp_fused_sigurg_mp;		/* M_PCSIG mblk for SIGURG */
+	size_t	tcp_fuse_rcv_hiwater;		/* fusion receive queue size */
+	uint_t	tcp_fuse_rcv_unread_hiwater;	/* max # of outstanding pkts */
+	/*
+	 * The following fusion-related fields and bit fields are to be
+	 * manipulated with squeue protection or with tcp_fuse_lock held.
+	 */
+	kmutex_t tcp_fuse_lock;
+	uint_t tcp_fuse_rcv_unread_cnt;	/* # of outstanding pkts */
+	uint32_t
+		tcp_fused : 1,		/* loopback tcp in fusion mode */
+		tcp_unfusable : 1,	/* fusion not allowed on endpoint */
+		tcp_fused_sigurg : 1,	/* send SIGURG upon draining */
+		tcp_direct_sockfs : 1,	/* direct calls to sockfs */
 
-	uint32_t	tcp_in_ack_unsent;	/* ACK for unsent data cnt. */
+		tcp_fuse_syncstr_stopped : 1, /* synchronous streams stopped */
+		tcp_fuse_to_bit_31 : 27;
 
 	/*
 	 * This variable is accessed without any lock protection
@@ -525,6 +541,8 @@
 	 * with the rest which require such condition.
 	 */
 	boolean_t	tcp_issocket;	/* this is a socket tcp */
+
+	uint32_t	tcp_squeue_bytes;
 } tcp_t;
 
 extern void 	tcp_free(tcp_t *tcp);
@@ -537,7 +555,8 @@
 extern void	tcp_rput_data(void *arg, mblk_t *mp, void *arg2);
 extern void 	*tcp_get_conn(void *arg);
 extern void	tcp_time_wait_collector(void *arg);
-
+extern int	tcp_snmp_get(queue_t *, mblk_t *);
+extern int	tcp_snmp_set(queue_t *, int, int, uchar_t *, int len);
 /*
  * The TCP Fanout structure.
  * The hash tables and their linkage (tcp_*_hash_next, tcp_ptp*hn) are
@@ -610,18 +629,6 @@
 #pragma pack()
 #endif
 
-/* Named Dispatch Parameter Management Structure */
-typedef struct tcpparam_s {
-	uint32_t	tcp_param_min;
-	uint32_t	tcp_param_max;
-	uint32_t	tcp_param_val;
-	char		*tcp_param_name;
-} tcpparam_t;
-
-extern tcpparam_t	tcp_param_arr[];
-
-extern boolean_t	do_tcp_fusion;
-
 #if (defined(_KERNEL) || defined(_KMEMUSER))
 extern void tcp_rput_other(tcp_t *tcp, mblk_t *mp);
 #endif