Lines Matching refs:tcp
84 tcp_fuse(tcp_t *tcp, uchar_t *iphdr, tcpha_t *tcpha) in tcp_fuse() argument
86 conn_t *peer_connp, *connp = tcp->tcp_connp; in tcp_fuse()
88 tcp_stack_t *tcps = tcp->tcp_tcps; in tcp_fuse()
92 ASSERT(!tcp->tcp_fused); in tcp_fuse()
93 ASSERT(tcp->tcp_loopback); in tcp_fuse()
94 ASSERT(tcp->tcp_loopback_peer == NULL); in tcp_fuse()
105 ASSERT(tcp->tcp_saved_listener != NULL); in tcp_fuse()
142 ASSERT(peer_tcp != NULL && peer_tcp != tcp && !peer_tcp->tcp_fused); in tcp_fuse()
159 if (tcp->tcp_md5sig || peer_tcp->tcp_md5sig) { in tcp_fuse()
172 if (!tcp->tcp_unfusable && !peer_tcp->tcp_unfusable && in tcp_fuse()
173 tcp->tcp_xmit_head == NULL && peer_tcp->tcp_xmit_head == NULL) { in tcp_fuse()
178 ASSERT(tcp->tcp_fused_sigurg_mp == NULL); in tcp_fuse()
189 if (!IPCL_IS_NONSTR(tcp->tcp_connp)) { in tcp_fuse()
192 if (tcp->tcp_fused_sigurg_mp == NULL) { in tcp_fuse()
195 tcp->tcp_fused_sigurg_mp = mp; in tcp_fuse()
210 peer_tcp->tcp_loopback_peer = tcp; in tcp_fuse()
211 tcp->tcp_loopback_peer = peer_tcp; in tcp_fuse()
212 peer_tcp->tcp_fused = tcp->tcp_fused = B_TRUE; in tcp_fuse()
222 peer_tcp->tcp_unsent = tcp->tcp_unsent = 0; in tcp_fuse()
224 tcp_timers_stop(tcp); in tcp_fuse()
270 if (tcp->tcp_fused_sigurg_mp != NULL) { in tcp_fuse()
271 freeb(tcp->tcp_fused_sigurg_mp); in tcp_fuse()
272 tcp->tcp_fused_sigurg_mp = NULL; in tcp_fuse()
285 tcp_unfuse(tcp_t *tcp) in tcp_unfuse() argument
287 tcp_t *peer_tcp = tcp->tcp_loopback_peer; in tcp_unfuse()
288 tcp_stack_t *tcps = tcp->tcp_tcps; in tcp_unfuse()
290 ASSERT(tcp->tcp_fused && peer_tcp != NULL); in tcp_unfuse()
291 ASSERT(peer_tcp->tcp_fused && peer_tcp->tcp_loopback_peer == tcp); in tcp_unfuse()
292 ASSERT(tcp->tcp_connp->conn_sqp == peer_tcp->tcp_connp->conn_sqp); in tcp_unfuse()
293 ASSERT(tcp->tcp_unsent == 0 && peer_tcp->tcp_unsent == 0); in tcp_unfuse()
298 if (tcp->tcp_push_tid != 0) { in tcp_unfuse()
299 (void) TCP_TIMER_CANCEL(tcp, tcp->tcp_push_tid); in tcp_unfuse()
300 tcp->tcp_push_tid = 0; in tcp_unfuse()
316 if (!TCP_IS_DETACHED(tcp)) { in tcp_unfuse()
317 (void) tcp_fuse_rcv_drain(tcp->tcp_connp->conn_rq, tcp, in tcp_unfuse()
318 &tcp->tcp_fused_sigurg_mp); in tcp_unfuse()
326 mutex_enter(&tcp->tcp_non_sq_lock); in tcp_unfuse()
327 if (tcp->tcp_flow_stopped) { in tcp_unfuse()
328 tcp_clrqfull(tcp); in tcp_unfuse()
331 mutex_exit(&tcp->tcp_non_sq_lock); in tcp_unfuse()
343 tcp->tcp_tcpha->tha_seq = htonl(tcp->tcp_snxt); in tcp_unfuse()
344 tcp->tcp_tcpha->tha_ack = htonl(tcp->tcp_rnxt); in tcp_unfuse()
349 peer_tcp->tcp_fused = tcp->tcp_fused = B_FALSE; in tcp_unfuse()
350 peer_tcp->tcp_loopback_peer = tcp->tcp_loopback_peer = NULL; in tcp_unfuse()
359 tcp_fuse_output_urg(tcp_t *tcp, mblk_t *mp) in tcp_fuse_output_urg() argument
363 tcp_t *peer_tcp = tcp->tcp_loopback_peer; in tcp_fuse_output_urg()
365 tcp_stack_t *tcps = tcp->tcp_tcps; in tcp_fuse_output_urg()
367 ASSERT(tcp->tcp_fused); in tcp_fuse_output_urg()
368 ASSERT(peer_tcp != NULL && peer_tcp->tcp_loopback_peer == tcp); in tcp_fuse_output_urg()
369 ASSERT(!IPCL_IS_NONSTR(tcp->tcp_connp)); in tcp_fuse_output_urg()
392 ASSERT(tcp->tcp_valid_bits & TCP_URG_VALID); in tcp_fuse_output_urg()
394 tcp->tcp_valid_bits &= ~TCP_URG_VALID; in tcp_fuse_output_urg()
450 tcp_fuse_output(tcp_t *tcp, mblk_t *mp, uint32_t send_size) in tcp_fuse_output() argument
452 conn_t *connp = tcp->tcp_connp; in tcp_fuse_output()
453 tcp_t *peer_tcp = tcp->tcp_loopback_peer; in tcp_fuse_output()
461 tcp_stack_t *tcps = tcp->tcp_tcps; in tcp_fuse_output()
468 ASSERT(tcp->tcp_fused); in tcp_fuse_output()
469 ASSERT(peer_tcp != NULL && peer_tcp->tcp_loopback_peer == tcp); in tcp_fuse_output()
495 tcp_fuse_output_urg(tcp, mp); in tcp_fuse_output()
535 if ((mp1 = tcp_xmit_mp(tcp, mp1, tcp->tcp_mss, NULL, NULL, in tcp_fuse_output()
536 tcp->tcp_snxt, B_TRUE, NULL, B_FALSE)) == NULL) in tcp_fuse_output()
565 recv_size += htonl(tcpha->tha_seq) - tcp->tcp_snxt; in tcp_fuse_output()
590 if ((tcp->tcp_valid_bits & TCP_URG_VALID) && in tcp_fuse_output()
591 (tcp->tcp_urg == tcp->tcp_snxt)) { in tcp_fuse_output()
595 tcp->tcp_valid_bits &= ~TCP_URG_VALID; in tcp_fuse_output()
605 (tcp->tcp_valid_bits & TCP_URG_VALID) && in tcp_fuse_output()
606 (tcp->tcp_urg == tcp->tcp_snxt)) { in tcp_fuse_output()
612 tcp->tcp_valid_bits &= ~TCP_URG_VALID; in tcp_fuse_output()
618 tcp->tcp_connp->conn_cred); in tcp_fuse_output()
635 mutex_enter(&tcp->tcp_non_sq_lock); in tcp_fuse_output()
636 flow_stopped = tcp->tcp_flow_stopped; in tcp_fuse_output()
645 (TCP_UNSENT_BYTES(tcp) >= connp->conn_sndbuf))) { in tcp_fuse_output()
646 tcp_setqfull(tcp); in tcp_fuse_output()
649 DTRACE_PROBE3(tcp__fuse__output__flowctl, tcp_t *, tcp, in tcp_fuse_output()
652 (TCP_UNSENT_BYTES(tcp) <= connp->conn_sndlowat)) { in tcp_fuse_output()
653 tcp_clrqfull(tcp); in tcp_fuse_output()
657 mutex_exit(&tcp->tcp_non_sq_lock); in tcp_fuse_output()
660 tcp->tcp_last_sent_len = send_size; in tcp_fuse_output()
663 tcp->tcp_snxt += send_size; in tcp_fuse_output()
664 tcp->tcp_suna = tcp->tcp_snxt; in tcp_fuse_output()
672 tcp->tcp_cs.tcp_out_data_bytes += send_size; in tcp_fuse_output()
673 tcp->tcp_cs.tcp_out_data_segs++; in tcp_fuse_output()
682 __dtrace_tcp_void_ip_t *, NULL, tcp_t *, tcp, in tcp_fuse_output()
712 tcp_unfuse(tcp); in tcp_fuse_output()
723 tcp_fuse_rcv_drain(queue_t *q, tcp_t *tcp, mblk_t **sigurg_mpp) in tcp_fuse_rcv_drain() argument
726 conn_t *connp = tcp->tcp_connp; in tcp_fuse_rcv_drain()
731 tcp_stack_t *tcps = tcp->tcp_tcps; in tcp_fuse_rcv_drain()
732 tcp_t *peer_tcp = tcp->tcp_loopback_peer; in tcp_fuse_rcv_drain()
734 ASSERT(tcp->tcp_loopback); in tcp_fuse_rcv_drain()
735 ASSERT(tcp->tcp_fused || tcp->tcp_fused_sigurg); in tcp_fuse_rcv_drain()
736 ASSERT(!tcp->tcp_fused || tcp->tcp_loopback_peer != NULL); in tcp_fuse_rcv_drain()
737 ASSERT(IPCL_IS_NONSTR(connp) || sigurg_mpp != NULL || tcp->tcp_fused); in tcp_fuse_rcv_drain()
740 if (tcp->tcp_push_tid != 0) { in tcp_fuse_rcv_drain()
741 (void) TCP_TIMER_CANCEL(tcp, tcp->tcp_push_tid); in tcp_fuse_rcv_drain()
742 tcp->tcp_push_tid = 0; in tcp_fuse_rcv_drain()
750 if (tcp->tcp_fused_sigurg) { in tcp_fuse_rcv_drain()
751 ASSERT(!IPCL_IS_NONSTR(tcp->tcp_connp)); in tcp_fuse_rcv_drain()
753 tcp->tcp_fused_sigurg = B_FALSE; in tcp_fuse_rcv_drain()
763 tcp->tcp_push_tid = TCP_TIMER(tcp, in tcp_fuse_rcv_drain()
786 if (!tcp->tcp_fused) in tcp_fuse_rcv_drain()
791 while ((mp = tcp->tcp_rcv_list) != NULL) { in tcp_fuse_rcv_drain()
792 tcp->tcp_rcv_list = mp->b_next; in tcp_fuse_rcv_drain()
803 ASSERT(cnt == tcp->tcp_rcv_cnt); in tcp_fuse_rcv_drain()
805 tcp->tcp_rcv_last_head = NULL; in tcp_fuse_rcv_drain()
806 tcp->tcp_rcv_last_tail = NULL; in tcp_fuse_rcv_drain()
807 tcp->tcp_rcv_cnt = 0; in tcp_fuse_rcv_drain()
808 tcp->tcp_rwnd = tcp->tcp_connp->conn_rcvbuf; in tcp_fuse_rcv_drain()
825 tcp_fuse_set_rcv_hiwat(tcp_t *tcp, size_t rwnd) in tcp_fuse_set_rcv_hiwat() argument
827 tcp_stack_t *tcps = tcp->tcp_tcps; in tcp_fuse_set_rcv_hiwat()
830 ASSERT(tcp->tcp_fused); in tcp_fuse_set_rcv_hiwat()
840 max_win = TCP_MAXWIN << tcp->tcp_rcv_ws; in tcp_fuse_set_rcv_hiwat()
842 rwnd = max_win - (max_win % tcp->tcp_mss); in tcp_fuse_set_rcv_hiwat()
843 if (rwnd < tcp->tcp_mss) in tcp_fuse_set_rcv_hiwat()
851 tcp->tcp_connp->conn_rcvbuf = rwnd; in tcp_fuse_set_rcv_hiwat()
852 tcp->tcp_rwnd = rwnd; in tcp_fuse_set_rcv_hiwat()
860 tcp_fuse_maxpsz(tcp_t *tcp) in tcp_fuse_maxpsz() argument
862 tcp_t *peer_tcp = tcp->tcp_loopback_peer; in tcp_fuse_maxpsz()
863 conn_t *connp = tcp->tcp_connp; in tcp_fuse_maxpsz()
867 ASSERT(tcp->tcp_fused); in tcp_fuse_maxpsz()
889 tcp_fuse_backenable(tcp_t *tcp) in tcp_fuse_backenable() argument
891 tcp_t *peer_tcp = tcp->tcp_loopback_peer; in tcp_fuse_backenable()
893 ASSERT(tcp->tcp_fused); in tcp_fuse_backenable()
895 ASSERT(peer_tcp->tcp_loopback_peer == tcp); in tcp_fuse_backenable()
896 ASSERT(!TCP_IS_DETACHED(tcp)); in tcp_fuse_backenable()
897 ASSERT(tcp->tcp_connp->conn_sqp == in tcp_fuse_backenable()
900 if (tcp->tcp_rcv_list != NULL) in tcp_fuse_backenable()
901 (void) tcp_fuse_rcv_drain(tcp->tcp_connp->conn_rq, tcp, NULL); in tcp_fuse_backenable()
911 TCP_STAT(tcp->tcp_tcps, tcp_fusion_backenabled); in tcp_fuse_backenable()