Lines Matching refs:tcp

281 static int	tcp_connect_ipv4(tcp_t *tcp, ipaddr_t *dstaddrp,
283 static int tcp_connect_ipv6(tcp_t *tcp, in6_addr_t *dstaddrp,
286 static void tcp_iss_init(tcp_t *tcp);
287 static void tcp_reinit(tcp_t *tcp);
288 static void tcp_reinit_values(tcp_t *tcp);
291 static void tcp_update_lso(tcp_t *tcp, ip_xmit_attr_t *ixa);
292 static void tcp_update_zcopy(tcp_t *tcp);
423 tcp_set_recv_threshold(tcp_t *tcp, uint32_t new_rcvthresh) in tcp_set_recv_threshold() argument
427 if (IPCL_IS_NONSTR(tcp->tcp_connp)) { in tcp_set_recv_threshold()
428 conn_t *connp = tcp->tcp_connp; in tcp_set_recv_threshold()
454 tcp_set_ws_value(tcp_t *tcp) in tcp_set_ws_value() argument
457 uint32_t rwnd = tcp->tcp_rwnd; in tcp_set_ws_value()
462 tcp->tcp_rcv_ws = i; in tcp_set_ws_value()
469 tcp_ipsec_cleanup(tcp_t *tcp) in tcp_ipsec_cleanup() argument
471 conn_t *connp = tcp->tcp_connp; in tcp_ipsec_cleanup()
499 tcp_cleanup(tcp_t *tcp) in tcp_cleanup() argument
502 conn_t *connp = tcp->tcp_connp; in tcp_cleanup()
503 tcp_stack_t *tcps = tcp->tcp_tcps; in tcp_cleanup()
507 tcp_bind_hash_remove(tcp); in tcp_cleanup()
510 tcp_ipsec_cleanup(tcp); in tcp_cleanup()
520 tcp->tcp_ipha = NULL; in tcp_cleanup()
521 tcp->tcp_ip6h = NULL; in tcp_cleanup()
522 tcp->tcp_tcpha = NULL; in tcp_cleanup()
528 tcp_free(tcp); in tcp_cleanup()
542 mp = tcp->tcp_timercache; in tcp_cleanup()
544 tcp_rsrv_mp = tcp->tcp_rsrv_mp; in tcp_cleanup()
562 tcp->tcp_tcps = NULL; in tcp_cleanup()
564 bzero(tcp, sizeof (tcp_t)); in tcp_cleanup()
567 tcp->tcp_timercache = mp; in tcp_cleanup()
569 tcp->tcp_rsrv_mp = tcp_rsrv_mp; in tcp_cleanup()
571 tcp->tcp_connp = connp; in tcp_cleanup()
573 ASSERT(connp->conn_tcp == tcp); in tcp_cleanup()
609 tcp_set_destination(tcp_t *tcp) in tcp_set_destination() argument
613 boolean_t tcp_detached = TCP_IS_DETACHED(tcp); in tcp_set_destination()
614 conn_t *connp = tcp->tcp_connp; in tcp_set_destination()
615 tcp_stack_t *tcps = tcp->tcp_tcps; in tcp_set_destination()
637 error = tcp_build_hdrs(tcp); in tcp_set_destination()
641 tcp->tcp_localnet = uinfo.iulp_localnet; in tcp_set_destination()
644 tcp->tcp_rtt_sa = MSEC2NSEC(uinfo.iulp_rtt); in tcp_set_destination()
645 tcp->tcp_rtt_sd = MSEC2NSEC(uinfo.iulp_rtt_sd); in tcp_set_destination()
646 tcp->tcp_rto = tcp_calculate_rto(tcp, tcps, 0); in tcp_set_destination()
649 tcp->tcp_cwnd_ssthresh = uinfo.iulp_ssthresh; in tcp_set_destination()
651 tcp->tcp_cwnd_ssthresh = TCP_MAX_LARGEWIN; in tcp_set_destination()
659 (void) tcp_maxpsz_set(tcp, B_TRUE); in tcp_set_destination()
669 tcp->tcp_rwnd = MIN(uinfo.iulp_rpipe, in tcp_set_destination()
674 tcp->tcp_second_timer_threshold = in tcp_set_destination()
701 tcp->tcp_snd_ts_ok = B_TRUE; in tcp_set_destination()
703 tcp->tcp_snd_ws_ok = B_TRUE; in tcp_set_destination()
705 tcp->tcp_snd_sack_ok = B_TRUE; in tcp_set_destination()
707 tcp->tcp_ecn_ok = B_TRUE; in tcp_set_destination()
716 tcp->tcp_snd_sack_ok = B_TRUE; in tcp_set_destination()
735 mss = tcp->tcp_initial_pmtu = uinfo.iulp_mtu; in tcp_set_destination()
743 if (tcp->tcp_ipsec_overhead == 0) in tcp_set_destination()
744 tcp->tcp_ipsec_overhead = conn_ipsec_length(connp); in tcp_set_destination()
746 mss -= tcp->tcp_ipsec_overhead; in tcp_set_destination()
754 tcp->tcp_mss = mss; in tcp_set_destination()
759 tcp_update_lso(tcp, connp->conn_ixa); in tcp_set_destination()
766 tcp_iss_init(tcp); in tcp_set_destination()
768 tcp->tcp_loopback = (uinfo.iulp_loopback | uinfo.iulp_local); in tcp_set_destination()
794 tcp_t *tcp = ((conn_t *)arg)->conn_tcp; in tcp_clean_death_wrapper() local
797 if (tcp->tcp_state > TCPS_BOUND) in tcp_clean_death_wrapper()
811 tcp_clean_death(tcp_t *tcp, int err) in tcp_clean_death() argument
815 conn_t *connp = tcp->tcp_connp; in tcp_clean_death()
816 tcp_stack_t *tcps = tcp->tcp_tcps; in tcp_clean_death()
818 if (tcp->tcp_fused) in tcp_clean_death()
819 tcp_unfuse(tcp); in tcp_clean_death()
821 if (tcp->tcp_linger_tid != 0 && in tcp_clean_death()
822 TCP_TIMER_CANCEL(tcp, tcp->tcp_linger_tid) >= 0) { in tcp_clean_death()
823 tcp_stop_lingering(tcp); in tcp_clean_death()
826 ASSERT(tcp != NULL); in tcp_clean_death()
833 if (TCP_IS_DETACHED(tcp)) { in tcp_clean_death()
834 if (tcp->tcp_hard_binding) { in tcp_clean_death()
847 tcp_closei_local(tcp); in tcp_clean_death()
848 if (!tcp->tcp_tconnind_started) { in tcp_clean_death()
851 tcp->tcp_state = TCPS_BOUND; in tcp_clean_death()
854 void, NULL, tcp_t *, tcp, void, NULL, in tcp_clean_death()
858 tcp_close_detached(tcp); in tcp_clean_death()
869 if (tcp->tcp_listen_cnt != NULL) in tcp_clean_death()
870 TCP_DECR_LISTEN_CNT(tcp); in tcp_clean_death()
877 if (tcp->tcp_state >= TCPS_ESTABLISHED && in tcp_clean_death()
878 tcp->tcp_state < TCPS_TIME_WAIT) { in tcp_clean_death()
895 if ((tcp->tcp_state >= TCPS_SYN_SENT) && err) { in tcp_clean_death()
896 if (tcp->tcp_state >= TCPS_ESTABLISHED && in tcp_clean_death()
897 !TCP_IS_SOCKET(tcp)) { in tcp_clean_death()
912 connp->conn_upper_handle, tcp->tcp_connid, err); in tcp_clean_death()
926 if (tcp->tcp_state <= TCPS_SYN_RCVD) { in tcp_clean_death()
929 } else if (tcp->tcp_state <= TCPS_CLOSE_WAIT) { in tcp_clean_death()
941 if (tcp->tcp_listener != NULL && IPCL_IS_NONSTR(connp)) { in tcp_clean_death()
942 tcp_closei_local(tcp); in tcp_clean_death()
943 tcp->tcp_state = TCPS_BOUND; in tcp_clean_death()
945 connp->conn_ixa, void, NULL, tcp_t *, tcp, void, NULL, in tcp_clean_death()
950 tcp_reinit(tcp); in tcp_clean_death()
962 tcp_stop_lingering(tcp_t *tcp) in tcp_stop_lingering() argument
965 tcp_stack_t *tcps = tcp->tcp_tcps; in tcp_stop_lingering()
966 conn_t *connp = tcp->tcp_connp; in tcp_stop_lingering()
968 tcp->tcp_linger_tid = 0; in tcp_stop_lingering()
969 if (tcp->tcp_state > TCPS_LISTEN) { in tcp_stop_lingering()
970 tcp_acceptor_hash_remove(tcp); in tcp_stop_lingering()
971 mutex_enter(&tcp->tcp_non_sq_lock); in tcp_stop_lingering()
972 if (tcp->tcp_flow_stopped) { in tcp_stop_lingering()
973 tcp_clrqfull(tcp); in tcp_stop_lingering()
975 mutex_exit(&tcp->tcp_non_sq_lock); in tcp_stop_lingering()
977 if (tcp->tcp_timer_tid != 0) { in tcp_stop_lingering()
978 delta = TCP_TIMER_CANCEL(tcp, tcp->tcp_timer_tid); in tcp_stop_lingering()
979 tcp->tcp_timer_tid = 0; in tcp_stop_lingering()
986 tcp_timers_stop(tcp); in tcp_stop_lingering()
988 tcp->tcp_detached = B_TRUE; in tcp_stop_lingering()
992 if (tcp->tcp_state == TCPS_TIME_WAIT) { in tcp_stop_lingering()
993 tcp_time_wait_append(tcp); in tcp_stop_lingering()
1004 tcp->tcp_timer_tid = TCP_TIMER(tcp, tcp_timer, in tcp_stop_lingering()
1008 tcp_closei_local(tcp); in tcp_stop_lingering()
1012 tcp->tcp_detached = B_TRUE; in tcp_stop_lingering()
1017 mutex_enter(&tcp->tcp_closelock); in tcp_stop_lingering()
1018 tcp->tcp_closed = 1; in tcp_stop_lingering()
1019 cv_signal(&tcp->tcp_closecv); in tcp_stop_lingering()
1020 mutex_exit(&tcp->tcp_closelock); in tcp_stop_lingering()
1047 tcp_t *tcp = connp->conn_tcp; in tcp_close_common() local
1048 mblk_t *mp = &tcp->tcp_closemp; in tcp_close_common()
1065 tcp->tcp_closeflags = (uint8_t)flags; in tcp_close_common()
1075 tcp->tcp_closemp_used = B_TRUE; in tcp_close_common()
1078 "connp %p tcp %p\n", (void *)connp, (void *)tcp); in tcp_close_common()
1080 TCP_DEBUG_GETPCSTACK(tcp->tcmp_stk, 15); in tcp_close_common()
1116 mutex_enter(&tcp->tcp_closelock); in tcp_close_common()
1117 while (!tcp->tcp_closed) { in tcp_close_common()
1118 if (!cv_wait_sig(&tcp->tcp_closecv, &tcp->tcp_closelock)) { in tcp_close_common()
1135 mutex_exit(&tcp->tcp_closelock); in tcp_close_common()
1142 mutex_enter(&tcp->tcp_closelock); in tcp_close_common()
1147 while (!tcp->tcp_closed) in tcp_close_common()
1148 cv_wait(&tcp->tcp_closecv, &tcp->tcp_closelock); in tcp_close_common()
1149 mutex_exit(&tcp->tcp_closelock); in tcp_close_common()
1162 if (tcp->tcp_wait_for_eagers && !IPCL_IS_NONSTR(connp)) { in tcp_close_common()
1184 tcp_t *tcp = connp->conn_tcp; in tcp_linger_interrupted() local
1187 if (tcp->tcp_linger_tid != 0 && in tcp_linger_interrupted()
1188 TCP_TIMER_CANCEL(tcp, tcp->tcp_linger_tid) >= 0) { in tcp_linger_interrupted()
1189 tcp_stop_lingering(tcp); in tcp_linger_interrupted()
1190 tcp->tcp_client_errno = EINTR; in tcp_linger_interrupted()
1217 tcp_close_detached(tcp_t *tcp) in tcp_close_detached() argument
1219 if (tcp->tcp_fused) in tcp_close_detached()
1220 tcp_unfuse(tcp); in tcp_close_detached()
1229 tcp_closei_local(tcp); in tcp_close_detached()
1230 CONN_DEC_REF(tcp->tcp_connp); in tcp_close_detached()
1241 tcp_closei_local(tcp_t *tcp) in tcp_closei_local() argument
1243 conn_t *connp = tcp->tcp_connp; in tcp_closei_local()
1244 tcp_stack_t *tcps = tcp->tcp_tcps; in tcp_closei_local()
1247 if (!TCP_IS_SOCKET(tcp)) in tcp_closei_local()
1248 tcp_acceptor_hash_remove(tcp); in tcp_closei_local()
1257 if (tcp->tcp_state >= TCPS_ESTABLISHED && in tcp_closei_local()
1258 tcp->tcp_state < TCPS_TIME_WAIT) { in tcp_closei_local()
1267 if (tcp->tcp_listener != NULL) { in tcp_closei_local()
1268 tcp_t *listener = tcp->tcp_listener; in tcp_closei_local()
1280 if (!tcp->tcp_tconnind_started) { in tcp_closei_local()
1281 tcp_eager_unlink(tcp); in tcp_closei_local()
1288 ASSERT(tcp->tcp_detached); in tcp_closei_local()
1298 tcp_timers_stop(tcp); in tcp_closei_local()
1300 if (tcp->tcp_state == TCPS_LISTEN) { in tcp_closei_local()
1301 if (tcp->tcp_ip_addr_cache) { in tcp_closei_local()
1302 kmem_free((void *)tcp->tcp_ip_addr_cache, in tcp_closei_local()
1304 tcp->tcp_ip_addr_cache = NULL; in tcp_closei_local()
1309 if (tcp->tcp_listen_cnt != NULL) in tcp_closei_local()
1310 TCP_DECR_LISTEN_CNT(tcp); in tcp_closei_local()
1312 mutex_enter(&tcp->tcp_non_sq_lock); in tcp_closei_local()
1313 if (tcp->tcp_flow_stopped) in tcp_closei_local()
1314 tcp_clrqfull(tcp); in tcp_closei_local()
1315 mutex_exit(&tcp->tcp_non_sq_lock); in tcp_closei_local()
1317 tcp_bind_hash_remove(tcp); in tcp_closei_local()
1326 if (tcp->tcp_state == TCPS_TIME_WAIT) in tcp_closei_local()
1327 (void) tcp_time_wait_remove(tcp, NULL); in tcp_closei_local()
1330 oldstate = tcp->tcp_state; in tcp_closei_local()
1331 tcp->tcp_state = TCPS_CLOSED; in tcp_closei_local()
1334 connp->conn_ixa, void, NULL, tcp_t *, tcp, void, NULL, in tcp_closei_local()
1345 ASSERT(tcp->tcp_time_wait_next == NULL); in tcp_closei_local()
1346 ASSERT(tcp->tcp_time_wait_prev == NULL); in tcp_closei_local()
1347 ASSERT(tcp->tcp_time_wait_expire == 0); in tcp_closei_local()
1349 tcp_ipsec_cleanup(tcp); in tcp_closei_local()
1357 tcp_free(tcp_t *tcp) in tcp_free() argument
1360 conn_t *connp = tcp->tcp_connp; in tcp_free()
1362 ASSERT(tcp != NULL); in tcp_free()
1363 ASSERT(tcp->tcp_ptpahn == NULL && tcp->tcp_acceptor_hash == NULL); in tcp_free()
1368 tcp_close_mpp(&tcp->tcp_xmit_head); in tcp_free()
1369 tcp_close_mpp(&tcp->tcp_reass_head); in tcp_free()
1370 if (tcp->tcp_rcv_list != NULL) { in tcp_free()
1372 tcp_close_mpp(&tcp->tcp_rcv_list); in tcp_free()
1374 if ((mp = tcp->tcp_urp_mp) != NULL) { in tcp_free()
1377 if ((mp = tcp->tcp_urp_mark_mp) != NULL) { in tcp_free()
1381 if (tcp->tcp_fused_sigurg_mp != NULL) { in tcp_free()
1382 ASSERT(!IPCL_IS_NONSTR(tcp->tcp_connp)); in tcp_free()
1383 freeb(tcp->tcp_fused_sigurg_mp); in tcp_free()
1384 tcp->tcp_fused_sigurg_mp = NULL; in tcp_free()
1387 if (tcp->tcp_ordrel_mp != NULL) { in tcp_free()
1388 ASSERT(!IPCL_IS_NONSTR(tcp->tcp_connp)); in tcp_free()
1389 freeb(tcp->tcp_ordrel_mp); in tcp_free()
1390 tcp->tcp_ordrel_mp = NULL; in tcp_free()
1393 TCP_NOTSACK_REMOVE_ALL(tcp->tcp_notsack_list, tcp); in tcp_free()
1394 bzero(&tcp->tcp_sack_info, sizeof (tcp_sack_info_t)); in tcp_free()
1396 if (tcp->tcp_hopopts != NULL) { in tcp_free()
1397 mi_free(tcp->tcp_hopopts); in tcp_free()
1398 tcp->tcp_hopopts = NULL; in tcp_free()
1399 tcp->tcp_hopoptslen = 0; in tcp_free()
1401 ASSERT(tcp->tcp_hopoptslen == 0); in tcp_free()
1402 if (tcp->tcp_dstopts != NULL) { in tcp_free()
1403 mi_free(tcp->tcp_dstopts); in tcp_free()
1404 tcp->tcp_dstopts = NULL; in tcp_free()
1405 tcp->tcp_dstoptslen = 0; in tcp_free()
1407 ASSERT(tcp->tcp_dstoptslen == 0); in tcp_free()
1408 if (tcp->tcp_rthdrdstopts != NULL) { in tcp_free()
1409 mi_free(tcp->tcp_rthdrdstopts); in tcp_free()
1410 tcp->tcp_rthdrdstopts = NULL; in tcp_free()
1411 tcp->tcp_rthdrdstoptslen = 0; in tcp_free()
1413 ASSERT(tcp->tcp_rthdrdstoptslen == 0); in tcp_free()
1414 if (tcp->tcp_rthdr != NULL) { in tcp_free()
1415 mi_free(tcp->tcp_rthdr); in tcp_free()
1416 tcp->tcp_rthdr = NULL; in tcp_free()
1417 tcp->tcp_rthdrlen = 0; in tcp_free()
1419 ASSERT(tcp->tcp_rthdrlen == 0); in tcp_free()
1426 tcp_close_mpp(&tcp->tcp_conn.tcp_eager_conn_ind); in tcp_free()
1428 if (tcp->tcp_sig_sa_in != NULL) { in tcp_free()
1429 tcpsig_sa_rele(tcp->tcp_sig_sa_in); in tcp_free()
1430 tcp->tcp_sig_sa_in = NULL; in tcp_free()
1432 if (tcp->tcp_sig_sa_out != NULL) { in tcp_free()
1433 tcpsig_sa_rele(tcp->tcp_sig_sa_out); in tcp_free()
1434 tcp->tcp_sig_sa_out = NULL; in tcp_free()
1438 if (tcp->tcp_cc_algo != NULL && tcp->tcp_cc_algo->cb_destroy != NULL) in tcp_free()
1439 tcp->tcp_cc_algo->cb_destroy(&tcp->tcp_ccv); in tcp_free()
1466 tcp->tcp_detached = B_TRUE; in tcp_free()
1503 tcp_t *tcp = NULL; in tcp_get_conn() local
1514 tcp = tcp_time_wait->tcp_free_list; in tcp_get_conn()
1515 ASSERT((tcp != NULL) ^ (tcp_time_wait->tcp_free_list_cnt == 0)); in tcp_get_conn()
1516 if (tcp != NULL) { in tcp_get_conn()
1517 tcp_time_wait->tcp_free_list = tcp->tcp_time_wait_next; in tcp_get_conn()
1520 tcp->tcp_time_wait_next = NULL; in tcp_get_conn()
1521 connp = tcp->tcp_connp; in tcp_get_conn()
1524 ASSERT(tcp->tcp_tcps == NULL); in tcp_get_conn()
1526 ASSERT(tcp->tcp_rsrv_mp != NULL); in tcp_get_conn()
1531 tcp->tcp_tcps = tcps; in tcp_get_conn()
1534 connp->conn_ixa->ixa_notify_cookie = tcp; in tcp_get_conn()
1556 tcp = connp->conn_tcp; in tcp_get_conn()
1557 tcp->tcp_rsrv_mp = tcp_rsrv_mp; in tcp_get_conn()
1558 mutex_init(&tcp->tcp_rsrv_mp_lock, NULL, MUTEX_DEFAULT, NULL); in tcp_get_conn()
1560 tcp->tcp_tcps = tcps; in tcp_get_conn()
1572 connp->conn_ixa->ixa_notify_cookie = tcp; in tcp_get_conn()
1583 tcp_connect_ipv4(tcp_t *tcp, ipaddr_t *dstaddrp, in_port_t dstport, in tcp_connect_ipv4() argument
1588 conn_t *connp = tcp->tcp_connp; in tcp_connect_ipv4()
1589 tcp_stack_t *tcps = tcp->tcp_tcps; in tcp_connect_ipv4()
1632 if (tcp->tcp_state == TCPS_IDLE) { in tcp_connect_ipv4()
1640 tcp, B_TRUE); in tcp_connect_ipv4()
1641 lport = tcp_bindi(tcp, lport, &connp->conn_laddr_v6, 0, B_TRUE, in tcp_connect_ipv4()
1651 error = tcp_set_destination(tcp); in tcp_connect_ipv4()
1662 tcp->tcp_state = TCPS_SYN_SENT; in tcp_connect_ipv4()
1672 tcp_connect_ipv6(tcp_t *tcp, in6_addr_t *dstaddrp, in_port_t dstport, in tcp_connect_ipv6() argument
1676 conn_t *connp = tcp->tcp_connp; in tcp_connect_ipv6()
1677 tcp_stack_t *tcps = tcp->tcp_tcps; in tcp_connect_ipv6()
1728 if (tcp->tcp_state == TCPS_IDLE) { in tcp_connect_ipv6()
1736 tcp, B_TRUE); in tcp_connect_ipv6()
1737 lport = tcp_bindi(tcp, lport, &connp->conn_laddr_v6, 0, B_TRUE, in tcp_connect_ipv6()
1747 error = tcp_set_destination(tcp); in tcp_connect_ipv6()
1758 tcp->tcp_state = TCPS_SYN_SENT; in tcp_connect_ipv6()
1769 tcp_disconnect_common(tcp_t *tcp, t_scalar_t seqnum) in tcp_disconnect_common() argument
1772 tcp_stack_t *tcps = tcp->tcp_tcps; in tcp_disconnect_common()
1773 conn_t *connp = tcp->tcp_connp; in tcp_disconnect_common()
1781 if (tcp->tcp_state <= TCPS_BOUND) { in tcp_disconnect_common()
1784 "tcp_disconnect: bad state, %d", tcp->tcp_state); in tcp_disconnect_common()
1787 } else if (tcp->tcp_state >= TCPS_ESTABLISHED) { in tcp_disconnect_common()
1791 if (seqnum == -1 || tcp->tcp_conn_req_max == 0) { in tcp_disconnect_common()
1804 int old_state = tcp->tcp_state; in tcp_disconnect_common()
1811 ASSERT(tcp->tcp_time_wait_next == NULL); in tcp_disconnect_common()
1812 ASSERT(tcp->tcp_time_wait_prev == NULL); in tcp_disconnect_common()
1813 ASSERT(tcp->tcp_time_wait_expire == 0); in tcp_disconnect_common()
1832 if (tcp->tcp_conn_req_max && lconnp == NULL) { in tcp_disconnect_common()
1833 tcp->tcp_state = TCPS_LISTEN; in tcp_disconnect_common()
1835 connp->conn_ixa, void, NULL, tcp_t *, tcp, void, in tcp_disconnect_common()
1838 tcp->tcp_conn_req_max = 0; in tcp_disconnect_common()
1839 tcp->tcp_state = TCPS_BOUND; in tcp_disconnect_common()
1841 connp->conn_ixa, void, NULL, tcp_t *, tcp, void, in tcp_disconnect_common()
1851 if (tcp->tcp_listen_cnt != NULL) in tcp_disconnect_common()
1852 TCP_DECR_LISTEN_CNT(tcp); in tcp_disconnect_common()
1867 if (tcp->tcp_fused) in tcp_disconnect_common()
1868 tcp_unfuse(tcp); in tcp_disconnect_common()
1870 mutex_enter(&tcp->tcp_eager_lock); in tcp_disconnect_common()
1871 if ((tcp->tcp_conn_req_cnt_q0 != 0) || in tcp_disconnect_common()
1872 (tcp->tcp_conn_req_cnt_q != 0)) { in tcp_disconnect_common()
1873 tcp_eager_cleanup(tcp, 0); in tcp_disconnect_common()
1875 mutex_exit(&tcp->tcp_eager_lock); in tcp_disconnect_common()
1877 tcp_xmit_ctl("tcp_disconnect", tcp, tcp->tcp_snxt, in tcp_disconnect_common()
1878 tcp->tcp_rnxt, TH_RST | TH_ACK); in tcp_disconnect_common()
1880 tcp_reinit(tcp); in tcp_disconnect_common()
1883 } else if (!tcp_eager_blowoff(tcp, seqnum)) { in tcp_disconnect_common()
1895 tcp_disconnect(tcp_t *tcp, mblk_t *mp) in tcp_disconnect() argument
1899 conn_t *connp = tcp->tcp_connp; in tcp_disconnect()
1903 tcp_err_ack(tcp, mp, TPROTO, 0); in tcp_disconnect()
1907 error = tcp_disconnect_common(tcp, seqnum); in tcp_disconnect()
1909 tcp_err_ack(tcp, mp, error, 0); in tcp_disconnect()
1911 if (tcp->tcp_state >= TCPS_ESTABLISHED) { in tcp_disconnect()
1926 tcp_reinit(tcp_t *tcp) in tcp_reinit() argument
1929 tcp_stack_t *tcps = tcp->tcp_tcps; in tcp_reinit()
1930 conn_t *connp = tcp->tcp_connp; in tcp_reinit()
1934 ASSERT(tcp->tcp_listener == NULL); in tcp_reinit()
1942 tcp_timers_stop(tcp); in tcp_reinit()
1944 tcp_close_mpp(&tcp->tcp_xmit_head); in tcp_reinit()
1945 if (tcp->tcp_snd_zcopy_aware) in tcp_reinit()
1946 tcp_zcopy_notify(tcp); in tcp_reinit()
1947 tcp->tcp_xmit_last = tcp->tcp_xmit_tail = NULL; in tcp_reinit()
1948 tcp->tcp_unsent = tcp->tcp_xmit_tail_unsent = 0; in tcp_reinit()
1949 mutex_enter(&tcp->tcp_non_sq_lock); in tcp_reinit()
1950 if (tcp->tcp_flow_stopped && in tcp_reinit()
1951 TCP_UNSENT_BYTES(tcp) <= connp->conn_sndlowat) { in tcp_reinit()
1952 tcp_clrqfull(tcp); in tcp_reinit()
1954 mutex_exit(&tcp->tcp_non_sq_lock); in tcp_reinit()
1955 tcp_close_mpp(&tcp->tcp_reass_head); in tcp_reinit()
1956 tcp->tcp_reass_tail = NULL; in tcp_reinit()
1957 if (tcp->tcp_rcv_list != NULL) { in tcp_reinit()
1959 tcp_close_mpp(&tcp->tcp_rcv_list); in tcp_reinit()
1960 tcp->tcp_rcv_last_head = NULL; in tcp_reinit()
1961 tcp->tcp_rcv_last_tail = NULL; in tcp_reinit()
1962 tcp->tcp_rcv_cnt = 0; in tcp_reinit()
1964 tcp->tcp_rcv_last_tail = NULL; in tcp_reinit()
1966 if ((mp = tcp->tcp_urp_mp) != NULL) { in tcp_reinit()
1968 tcp->tcp_urp_mp = NULL; in tcp_reinit()
1970 if ((mp = tcp->tcp_urp_mark_mp) != NULL) { in tcp_reinit()
1972 tcp->tcp_urp_mark_mp = NULL; in tcp_reinit()
1974 if (tcp->tcp_fused_sigurg_mp != NULL) { in tcp_reinit()
1975 ASSERT(!IPCL_IS_NONSTR(tcp->tcp_connp)); in tcp_reinit()
1976 freeb(tcp->tcp_fused_sigurg_mp); in tcp_reinit()
1977 tcp->tcp_fused_sigurg_mp = NULL; in tcp_reinit()
1979 if (tcp->tcp_ordrel_mp != NULL) { in tcp_reinit()
1980 ASSERT(!IPCL_IS_NONSTR(tcp->tcp_connp)); in tcp_reinit()
1981 freeb(tcp->tcp_ordrel_mp); in tcp_reinit()
1982 tcp->tcp_ordrel_mp = NULL; in tcp_reinit()
1990 tcp_close_mpp(&tcp->tcp_conn.tcp_eager_conn_ind); in tcp_reinit()
1998 ASSERT(tcp->tcp_time_wait_next == NULL); in tcp_reinit()
1999 ASSERT(tcp->tcp_time_wait_prev == NULL); in tcp_reinit()
2000 ASSERT(tcp->tcp_time_wait_expire == 0); in tcp_reinit()
2005 tcp_reinit_values(tcp); in tcp_reinit()
2009 tcp_ipsec_cleanup(tcp); in tcp_reinit()
2013 oldstate = tcp->tcp_state; in tcp_reinit()
2015 if (tcp->tcp_conn_req_max != 0) { in tcp_reinit()
2033 tcp->tcp_state = TCPS_LISTEN; in tcp_reinit()
2034 tcp->tcp_eager_next_q0 = tcp->tcp_eager_prev_q0 = tcp; in tcp_reinit()
2035 tcp->tcp_eager_next_drop_q0 = tcp; in tcp_reinit()
2036 tcp->tcp_eager_prev_drop_q0 = tcp; in tcp_reinit()
2051 tcp->tcp_state = TCPS_BOUND; in tcp_reinit()
2057 tcp_init_values(tcp, NULL); in tcp_reinit()
2060 connp->conn_ixa, void, NULL, tcp_t *, tcp, void, NULL, in tcp_reinit()
2063 ASSERT(tcp->tcp_ptpbhn != NULL); in tcp_reinit()
2064 tcp->tcp_rwnd = connp->conn_rcvbuf; in tcp_reinit()
2065 tcp->tcp_mss = connp->conn_ipversion != IPV4_VERSION ? in tcp_reinit()
2077 tcp_reinit_values(tcp_t *tcp) in tcp_reinit_values() argument
2079 tcp_stack_t *tcps = tcp->tcp_tcps; in tcp_reinit_values()
2080 conn_t *connp = tcp->tcp_connp; in tcp_reinit_values()
2085 PRESERVE(tcp->tcp_bind_hash_port); in tcp_reinit_values()
2086 PRESERVE(tcp->tcp_bind_hash); in tcp_reinit_values()
2087 PRESERVE(tcp->tcp_ptpbhn); in tcp_reinit_values()
2088 PRESERVE(tcp->tcp_acceptor_hash); in tcp_reinit_values()
2089 PRESERVE(tcp->tcp_ptpahn); in tcp_reinit_values()
2092 ASSERT(tcp->tcp_time_wait_next == NULL); in tcp_reinit_values()
2093 ASSERT(tcp->tcp_time_wait_prev == NULL); in tcp_reinit_values()
2094 ASSERT(tcp->tcp_time_wait_expire == 0); in tcp_reinit_values()
2095 PRESERVE(tcp->tcp_state); in tcp_reinit_values()
2099 ASSERT(tcp->tcp_xmit_head == NULL); in tcp_reinit_values()
2100 ASSERT(tcp->tcp_xmit_last == NULL); in tcp_reinit_values()
2101 ASSERT(tcp->tcp_unsent == 0); in tcp_reinit_values()
2102 ASSERT(tcp->tcp_xmit_tail == NULL); in tcp_reinit_values()
2103 ASSERT(tcp->tcp_xmit_tail_unsent == 0); in tcp_reinit_values()
2105 tcp->tcp_snxt = 0; /* Displayed in mib */ in tcp_reinit_values()
2106 tcp->tcp_suna = 0; /* Displayed in mib */ in tcp_reinit_values()
2107 tcp->tcp_swnd = 0; in tcp_reinit_values()
2108 DONTCARE(tcp->tcp_cwnd); /* Init in tcp_process_options */ in tcp_reinit_values()
2117 tcp->tcp_ipha = NULL; in tcp_reinit_values()
2118 tcp->tcp_ip6h = NULL; in tcp_reinit_values()
2119 tcp->tcp_tcpha = NULL; in tcp_reinit_values()
2125 DONTCARE(tcp->tcp_naglim); /* Init in tcp_init_values */ in tcp_reinit_values()
2126 DONTCARE(tcp->tcp_ipha); in tcp_reinit_values()
2127 DONTCARE(tcp->tcp_ip6h); in tcp_reinit_values()
2128 DONTCARE(tcp->tcp_tcpha); in tcp_reinit_values()
2129 tcp->tcp_valid_bits = 0; in tcp_reinit_values()
2131 DONTCARE(tcp->tcp_timer_backoff); /* Init in tcp_init_values */ in tcp_reinit_values()
2132 DONTCARE(tcp->tcp_last_recv_time); /* Init in tcp_init_values */ in tcp_reinit_values()
2133 tcp->tcp_last_rcv_lbolt = 0; in tcp_reinit_values()
2135 tcp->tcp_init_cwnd = 0; in tcp_reinit_values()
2137 tcp->tcp_urp_last_valid = 0; in tcp_reinit_values()
2138 tcp->tcp_hard_binding = 0; in tcp_reinit_values()
2140 tcp->tcp_fin_acked = 0; in tcp_reinit_values()
2141 tcp->tcp_fin_rcvd = 0; in tcp_reinit_values()
2142 tcp->tcp_fin_sent = 0; in tcp_reinit_values()
2143 tcp->tcp_ordrel_done = 0; in tcp_reinit_values()
2145 tcp->tcp_detached = 0; in tcp_reinit_values()
2147 tcp->tcp_snd_ws_ok = B_FALSE; in tcp_reinit_values()
2148 tcp->tcp_snd_ts_ok = B_FALSE; in tcp_reinit_values()
2149 tcp->tcp_zero_win_probe = 0; in tcp_reinit_values()
2151 tcp->tcp_loopback = 0; in tcp_reinit_values()
2152 tcp->tcp_localnet = 0; in tcp_reinit_values()
2153 tcp->tcp_syn_defense = 0; in tcp_reinit_values()
2154 tcp->tcp_set_timer = 0; in tcp_reinit_values()
2156 tcp->tcp_active_open = 0; in tcp_reinit_values()
2157 tcp->tcp_rexmit = B_FALSE; in tcp_reinit_values()
2158 tcp->tcp_xmit_zc_clean = B_FALSE; in tcp_reinit_values()
2160 tcp->tcp_snd_sack_ok = B_FALSE; in tcp_reinit_values()
2161 tcp->tcp_hwcksum = B_FALSE; in tcp_reinit_values()
2163 DONTCARE(tcp->tcp_maxpsz_multiplier); /* Init in tcp_init_values */ in tcp_reinit_values()
2165 tcp->tcp_conn_def_q0 = 0; in tcp_reinit_values()
2166 tcp->tcp_ip_forward_progress = B_FALSE; in tcp_reinit_values()
2167 tcp->tcp_ecn_ok = B_FALSE; in tcp_reinit_values()
2169 tcp->tcp_cwr = B_FALSE; in tcp_reinit_values()
2170 tcp->tcp_ecn_echo_on = B_FALSE; in tcp_reinit_values()
2171 tcp->tcp_is_wnd_shrnk = B_FALSE; in tcp_reinit_values()
2173 TCP_NOTSACK_REMOVE_ALL(tcp->tcp_notsack_list, tcp); in tcp_reinit_values()
2174 bzero(&tcp->tcp_sack_info, sizeof (tcp_sack_info_t)); in tcp_reinit_values()
2176 tcp->tcp_rcv_ws = 0; in tcp_reinit_values()
2177 tcp->tcp_snd_ws = 0; in tcp_reinit_values()
2178 tcp->tcp_ts_recent = 0; in tcp_reinit_values()
2179 tcp->tcp_rnxt = 0; /* Displayed in mib */ in tcp_reinit_values()
2180 DONTCARE(tcp->tcp_rwnd); /* Set in tcp_reinit() */ in tcp_reinit_values()
2181 tcp->tcp_initial_pmtu = 0; in tcp_reinit_values()
2183 ASSERT(tcp->tcp_reass_head == NULL); in tcp_reinit_values()
2184 ASSERT(tcp->tcp_reass_tail == NULL); in tcp_reinit_values()
2186 tcp->tcp_cwnd_cnt = 0; in tcp_reinit_values()
2188 ASSERT(tcp->tcp_rcv_list == NULL); in tcp_reinit_values()
2189 ASSERT(tcp->tcp_rcv_last_head == NULL); in tcp_reinit_values()
2190 ASSERT(tcp->tcp_rcv_last_tail == NULL); in tcp_reinit_values()
2191 ASSERT(tcp->tcp_rcv_cnt == 0); in tcp_reinit_values()
2193 DONTCARE(tcp->tcp_cwnd_ssthresh); /* Init in tcp_set_destination */ in tcp_reinit_values()
2194 DONTCARE(tcp->tcp_cwnd_max); /* Init in tcp_init_values */ in tcp_reinit_values()
2195 tcp->tcp_csuna = 0; in tcp_reinit_values()
2197 tcp->tcp_rto = 0; /* Displayed in MIB */ in tcp_reinit_values()
2198 DONTCARE(tcp->tcp_rtt_sa); /* Init in tcp_init_values */ in tcp_reinit_values()
2199 DONTCARE(tcp->tcp_rtt_sd); /* Init in tcp_init_values */ in tcp_reinit_values()
2200 tcp->tcp_rtt_update = 0; in tcp_reinit_values()
2201 tcp->tcp_rtt_sum = 0; in tcp_reinit_values()
2202 tcp->tcp_rtt_cnt = 0; in tcp_reinit_values()
2204 DONTCARE(tcp->tcp_swl1); /* Init in case TCPS_LISTEN/TCPS_SYN_SENT */ in tcp_reinit_values()
2205 DONTCARE(tcp->tcp_swl2); /* Init in case TCPS_LISTEN/TCPS_SYN_SENT */ in tcp_reinit_values()
2207 tcp->tcp_rack = 0; /* Displayed in mib */ in tcp_reinit_values()
2208 tcp->tcp_rack_cnt = 0; in tcp_reinit_values()
2209 tcp->tcp_rack_cur_max = 0; in tcp_reinit_values()
2210 tcp->tcp_rack_abs_max = 0; in tcp_reinit_values()
2212 tcp->tcp_max_swnd = 0; in tcp_reinit_values()
2214 ASSERT(tcp->tcp_listener == NULL); in tcp_reinit_values()
2216 DONTCARE(tcp->tcp_irs); /* tcp_valid_bits cleared */ in tcp_reinit_values()
2217 DONTCARE(tcp->tcp_iss); /* tcp_valid_bits cleared */ in tcp_reinit_values()
2218 DONTCARE(tcp->tcp_fss); /* tcp_valid_bits cleared */ in tcp_reinit_values()
2219 DONTCARE(tcp->tcp_urg); /* tcp_valid_bits cleared */ in tcp_reinit_values()
2221 ASSERT(tcp->tcp_conn_req_cnt_q == 0); in tcp_reinit_values()
2222 ASSERT(tcp->tcp_conn_req_cnt_q0 == 0); in tcp_reinit_values()
2223 PRESERVE(tcp->tcp_conn_req_max); in tcp_reinit_values()
2224 PRESERVE(tcp->tcp_conn_req_seqnum); in tcp_reinit_values()
2226 DONTCARE(tcp->tcp_first_timer_threshold); /* Init in tcp_init_values */ in tcp_reinit_values()
2227 DONTCARE(tcp->tcp_second_timer_threshold); /* Init in tcp_init_values */ in tcp_reinit_values()
2228 DONTCARE(tcp->tcp_first_ctimer_threshold); /* Init in tcp_init_values */ in tcp_reinit_values()
2229 DONTCARE(tcp->tcp_second_ctimer_threshold); /* in tcp_init_values */ in tcp_reinit_values()
2231 DONTCARE(tcp->tcp_urp_last); /* tcp_urp_last_valid is cleared */ in tcp_reinit_values()
2232 ASSERT(tcp->tcp_urp_mp == NULL); in tcp_reinit_values()
2233 ASSERT(tcp->tcp_urp_mark_mp == NULL); in tcp_reinit_values()
2234 ASSERT(tcp->tcp_fused_sigurg_mp == NULL); in tcp_reinit_values()
2236 ASSERT(tcp->tcp_eager_next_q == NULL); in tcp_reinit_values()
2237 ASSERT(tcp->tcp_eager_last_q == NULL); in tcp_reinit_values()
2238 ASSERT((tcp->tcp_eager_next_q0 == NULL && in tcp_reinit_values()
2239 tcp->tcp_eager_prev_q0 == NULL) || in tcp_reinit_values()
2240 tcp->tcp_eager_next_q0 == tcp->tcp_eager_prev_q0); in tcp_reinit_values()
2241 ASSERT(tcp->tcp_conn.tcp_eager_conn_ind == NULL); in tcp_reinit_values()
2243 ASSERT((tcp->tcp_eager_next_drop_q0 == NULL && in tcp_reinit_values()
2244 tcp->tcp_eager_prev_drop_q0 == NULL) || in tcp_reinit_values()
2245 tcp->tcp_eager_next_drop_q0 == tcp->tcp_eager_prev_drop_q0); in tcp_reinit_values()
2247 DONTCARE(tcp->tcp_ka_rinterval); /* Init in tcp_init_values */ in tcp_reinit_values()
2248 DONTCARE(tcp->tcp_ka_abort_thres); /* Init in tcp_init_values */ in tcp_reinit_values()
2249 DONTCARE(tcp->tcp_ka_cnt); /* Init in tcp_init_values */ in tcp_reinit_values()
2251 tcp->tcp_client_errno = 0; in tcp_reinit_values()
2258 tcp->tcp_last_sent_len = 0; in tcp_reinit_values()
2259 tcp->tcp_dupack_cnt = 0; in tcp_reinit_values()
2264 PRESERVE(tcp->tcp_acceptor_lockp); in tcp_reinit_values()
2266 ASSERT(tcp->tcp_ordrel_mp == NULL); in tcp_reinit_values()
2267 PRESERVE(tcp->tcp_acceptor_id); in tcp_reinit_values()
2268 DONTCARE(tcp->tcp_ipsec_overhead); in tcp_reinit_values()
2274 tcp->tcp_mss = tcps->tcps_mss_def_ipv6; in tcp_reinit_values()
2277 tcp->tcp_mss = tcps->tcps_mss_def_ipv4; in tcp_reinit_values()
2282 tcp->tcp_recvifindex = 0; in tcp_reinit_values()
2283 tcp->tcp_recvhops = 0; in tcp_reinit_values()
2284 tcp->tcp_closed = 0; in tcp_reinit_values()
2285 if (tcp->tcp_hopopts != NULL) { in tcp_reinit_values()
2286 mi_free(tcp->tcp_hopopts); in tcp_reinit_values()
2287 tcp->tcp_hopopts = NULL; in tcp_reinit_values()
2288 tcp->tcp_hopoptslen = 0; in tcp_reinit_values()
2290 ASSERT(tcp->tcp_hopoptslen == 0); in tcp_reinit_values()
2291 if (tcp->tcp_dstopts != NULL) { in tcp_reinit_values()
2292 mi_free(tcp->tcp_dstopts); in tcp_reinit_values()
2293 tcp->tcp_dstopts = NULL; in tcp_reinit_values()
2294 tcp->tcp_dstoptslen = 0; in tcp_reinit_values()
2296 ASSERT(tcp->tcp_dstoptslen == 0); in tcp_reinit_values()
2297 if (tcp->tcp_rthdrdstopts != NULL) { in tcp_reinit_values()
2298 mi_free(tcp->tcp_rthdrdstopts); in tcp_reinit_values()
2299 tcp->tcp_rthdrdstopts = NULL; in tcp_reinit_values()
2300 tcp->tcp_rthdrdstoptslen = 0; in tcp_reinit_values()
2302 ASSERT(tcp->tcp_rthdrdstoptslen == 0); in tcp_reinit_values()
2303 if (tcp->tcp_rthdr != NULL) { in tcp_reinit_values()
2304 mi_free(tcp->tcp_rthdr); in tcp_reinit_values()
2305 tcp->tcp_rthdr = NULL; in tcp_reinit_values()
2306 tcp->tcp_rthdrlen = 0; in tcp_reinit_values()
2308 ASSERT(tcp->tcp_rthdrlen == 0); in tcp_reinit_values()
2311 tcp->tcp_fused = B_FALSE; in tcp_reinit_values()
2312 tcp->tcp_unfusable = B_FALSE; in tcp_reinit_values()
2313 tcp->tcp_fused_sigurg = B_FALSE; in tcp_reinit_values()
2314 tcp->tcp_loopback_peer = NULL; in tcp_reinit_values()
2316 tcp->tcp_lso = B_FALSE; in tcp_reinit_values()
2318 tcp->tcp_in_ack_unsent = 0; in tcp_reinit_values()
2319 tcp->tcp_cork = B_FALSE; in tcp_reinit_values()
2320 tcp->tcp_tconnind_started = B_FALSE; in tcp_reinit_values()
2322 PRESERVE(tcp->tcp_squeue_bytes); in tcp_reinit_values()
2324 tcp->tcp_closemp_used = B_FALSE; in tcp_reinit_values()
2326 PRESERVE(tcp->tcp_rsrv_mp); in tcp_reinit_values()
2327 PRESERVE(tcp->tcp_rsrv_mp_lock); in tcp_reinit_values()
2330 DONTCARE(tcp->tcmp_stk[0]); in tcp_reinit_values()
2333 PRESERVE(tcp->tcp_connid); in tcp_reinit_values()
2335 if (tcp->tcp_sig_sa_in != NULL) { in tcp_reinit_values()
2336 tcpsig_sa_rele(tcp->tcp_sig_sa_in); in tcp_reinit_values()
2337 tcp->tcp_sig_sa_in = NULL; in tcp_reinit_values()
2339 if (tcp->tcp_sig_sa_out != NULL) { in tcp_reinit_values()
2340 tcpsig_sa_rele(tcp->tcp_sig_sa_out); in tcp_reinit_values()
2341 tcp->tcp_sig_sa_out = NULL; in tcp_reinit_values()
2344 ASSERT(tcp->tcp_listen_cnt == NULL); in tcp_reinit_values()
2345 ASSERT(tcp->tcp_reass_tid == 0); in tcp_reinit_values()
2348 if (tcp->tcp_cc_algo->cb_destroy != NULL) in tcp_reinit_values()
2349 tcp->tcp_cc_algo->cb_destroy(&tcp->tcp_ccv); in tcp_reinit_values()
2350 tcp->tcp_cc_algo = NULL; in tcp_reinit_values()
2361 tcp_init_values(tcp_t *tcp, tcp_t *parent) in tcp_init_values() argument
2363 tcp_stack_t *tcps = tcp->tcp_tcps; in tcp_init_values()
2364 conn_t *connp = tcp->tcp_connp; in tcp_init_values()
2372 tcp->tcp_ccv.type = IPPROTO_TCP; in tcp_init_values()
2373 tcp->tcp_ccv.ccvc.tcp = tcp; in tcp_init_values()
2376 tcp->tcp_cc_algo = tcps->tcps_default_cc_algo; in tcp_init_values()
2378 tcp->tcp_naglim = tcps->tcps_naglim_def; in tcp_init_values()
2380 tcp->tcp_rto_initial = tcps->tcps_rexmit_interval_initial; in tcp_init_values()
2381 tcp->tcp_rto_min = tcps->tcps_rexmit_interval_min; in tcp_init_values()
2382 tcp->tcp_rto_max = tcps->tcps_rexmit_interval_max; in tcp_init_values()
2384 tcp->tcp_first_ctimer_threshold = in tcp_init_values()
2386 tcp->tcp_second_ctimer_threshold = in tcp_init_values()
2388 tcp->tcp_first_timer_threshold = tcps->tcps_ip_notify_interval; in tcp_init_values()
2389 tcp->tcp_second_timer_threshold = tcps->tcps_ip_abort_interval; in tcp_init_values()
2391 tcp->tcp_fin_wait_2_flush_interval = in tcp_init_values()
2394 tcp->tcp_ka_interval = tcps->tcps_keepalive_interval; in tcp_init_values()
2395 tcp->tcp_ka_abort_thres = tcps->tcps_keepalive_abort_interval; in tcp_init_values()
2396 tcp->tcp_ka_cnt = 0; in tcp_init_values()
2397 tcp->tcp_ka_rinterval = 0; in tcp_init_values()
2405 tcp->tcp_cc_algo = parent->tcp_cc_algo; in tcp_init_values()
2407 tcp->tcp_naglim = parent->tcp_naglim; in tcp_init_values()
2409 tcp->tcp_rto_initial = parent->tcp_rto_initial; in tcp_init_values()
2410 tcp->tcp_rto_min = parent->tcp_rto_min; in tcp_init_values()
2411 tcp->tcp_rto_max = parent->tcp_rto_max; in tcp_init_values()
2413 tcp->tcp_first_ctimer_threshold = in tcp_init_values()
2415 tcp->tcp_second_ctimer_threshold = in tcp_init_values()
2417 tcp->tcp_first_timer_threshold = in tcp_init_values()
2419 tcp->tcp_second_timer_threshold = in tcp_init_values()
2422 tcp->tcp_fin_wait_2_flush_interval = in tcp_init_values()
2424 tcp->tcp_quickack = parent->tcp_quickack; in tcp_init_values()
2425 tcp->tcp_md5sig = parent->tcp_md5sig; in tcp_init_values()
2427 tcp->tcp_ka_interval = parent->tcp_ka_interval; in tcp_init_values()
2428 tcp->tcp_ka_abort_thres = parent->tcp_ka_abort_thres; in tcp_init_values()
2429 tcp->tcp_ka_cnt = parent->tcp_ka_cnt; in tcp_init_values()
2430 tcp->tcp_ka_rinterval = parent->tcp_ka_rinterval; in tcp_init_values()
2432 tcp->tcp_init_cwnd = parent->tcp_init_cwnd; in tcp_init_values()
2435 if (tcp->tcp_cc_algo->cb_init != NULL) in tcp_init_values()
2436 VERIFY(tcp->tcp_cc_algo->cb_init(&tcp->tcp_ccv) == 0); in tcp_init_values()
2445 tcp->tcp_rtt_sa = MSEC2NSEC(tcp->tcp_rto_initial) << 2; in tcp_init_values()
2446 tcp->tcp_rtt_sd = MSEC2NSEC(tcp->tcp_rto_initial) >> 1; in tcp_init_values()
2447 tcp->tcp_rto = tcp_calculate_rto(tcp, tcps, in tcp_init_values()
2450 tcp->tcp_timer_backoff = 0; in tcp_init_values()
2451 tcp->tcp_ms_we_have_waited = 0; in tcp_init_values()
2452 tcp->tcp_last_recv_time = ddi_get_lbolt(); in tcp_init_values()
2453 tcp->tcp_cwnd_max = tcps->tcps_cwnd_max_; in tcp_init_values()
2454 tcp->tcp_cwnd_ssthresh = TCP_MAX_LARGEWIN; in tcp_init_values()
2456 tcp->tcp_maxpsz_multiplier = tcps->tcps_maxpsz_multiplier; in tcp_init_values()
2461 tcp->tcp_fused = B_FALSE; in tcp_init_values()
2462 tcp->tcp_unfusable = B_FALSE; in tcp_init_values()
2463 tcp->tcp_fused_sigurg = B_FALSE; in tcp_init_values()
2464 tcp->tcp_loopback_peer = NULL; in tcp_init_values()
2474 tcp->tcp_rcv_ws = TCP_MAX_WINSHIFT; in tcp_init_values()
2475 tcp->tcp_rwnd = connp->conn_rcvbuf; in tcp_init_values()
2477 tcp->tcp_cork = B_FALSE; in tcp_init_values()
2497 tcp_update_pmtu(tcp_t *tcp, boolean_t decrease_only) in tcp_update_pmtu() argument
2501 conn_t *connp = tcp->tcp_connp; in tcp_update_pmtu()
2505 if (tcp->tcp_tcps->tcps_ignore_path_mtu) in tcp_update_pmtu()
2508 if (tcp->tcp_state < TCPS_ESTABLISHED) in tcp_update_pmtu()
2528 if (mss == tcp->tcp_mss) in tcp_update_pmtu()
2534 if (mss > tcp->tcp_mss && decrease_only) in tcp_update_pmtu()
2537 DTRACE_PROBE2(tcp_update_pmtu, int32_t, tcp->tcp_mss, uint32_t, mss); in tcp_update_pmtu()
2547 tcp_mss_set(tcp, mss); in tcp_update_pmtu()
2559 if (mss < tcp->tcp_tcps->tcps_mss_min) in tcp_update_pmtu()
2567 tcp->tcp_ipha->ipha_fragment_offset_and_flags = 0; in tcp_update_pmtu()
2573 tcp_maxpsz_set(tcp_t *tcp, boolean_t set_maxblk) in tcp_maxpsz_set() argument
2575 conn_t *connp = tcp->tcp_connp; in tcp_maxpsz_set()
2577 int32_t mss = tcp->tcp_mss; in tcp_maxpsz_set()
2580 if (TCP_IS_DETACHED(tcp)) in tcp_maxpsz_set()
2582 if (tcp->tcp_fused) { in tcp_maxpsz_set()
2583 maxpsz = tcp_fuse_maxpsz(tcp); in tcp_maxpsz_set()
2585 } else if (tcp->tcp_maxpsz_multiplier == 0) { in tcp_maxpsz_set()
2602 maxpsz = tcp->tcp_maxpsz_multiplier * mss; in tcp_maxpsz_set()
2636 tcp_t *tcp = NULL; in tcp_create_common() local
2697 tcp = connp->conn_tcp; in tcp_create_common()
2717 tcp->tcp_mss = tcps->tcps_mss_def_ipv6; in tcp_create_common()
2722 tcp->tcp_mss = tcps->tcps_mss_def_ipv4; in tcp_create_common()
2742 ASSERT(tcp->tcp_tcps == tcps); in tcp_create_common()
2754 tcp->tcp_issocket = 1; in tcp_create_common()
2769 SOCK_CONNID_INIT(tcp->tcp_connid); in tcp_create_common()
2771 tcp->tcp_state = TCPS_IDLE; in tcp_create_common()
2772 tcp_init_values(tcp, NULL); in tcp_create_common()
2780 tcp_t *tcp = NULL; in tcp_open() local
2854 tcp = connp->conn_tcp; in tcp_open()
2860 tcp->tcp_acceptor_id = (t_uscalar_t)RD(q); in tcp_open()
2862 tcp->tcp_acceptor_id = conn_dev; in tcp_open()
2864 tcp_acceptor_hash_insert(tcp->tcp_acceptor_id, tcp); in tcp_open()
2892 tcp_build_hdrs(tcp_t *tcp) in tcp_build_hdrs() argument
2894 tcp_stack_t *tcps = tcp->tcp_tcps; in tcp_build_hdrs()
2895 conn_t *connp = tcp->tcp_connp; in tcp_build_hdrs()
2929 tcp->tcp_tcpha = tcpha; in tcp_build_hdrs()
2955 tcp->tcp_ipha = (ipha_t *)connp->conn_ht_iphc; in tcp_build_hdrs()
2957 tcp->tcp_ip6h = (ip6_t *)connp->conn_ht_iphc; in tcp_build_hdrs()
2989 tcp_rwnd_set(tcp_t *tcp, uint32_t rwnd) in tcp_rwnd_set() argument
2991 uint32_t mss = tcp->tcp_mss; in tcp_rwnd_set()
2994 boolean_t tcp_detached = TCP_IS_DETACHED(tcp); in tcp_rwnd_set()
2995 tcp_stack_t *tcps = tcp->tcp_tcps; in tcp_rwnd_set()
2996 conn_t *connp = tcp->tcp_connp; in tcp_rwnd_set()
3006 if (tcp->tcp_fused) { in tcp_rwnd_set()
3008 tcp_t *peer_tcp = tcp->tcp_loopback_peer; in tcp_rwnd_set()
3011 sth_hiwat = tcp_fuse_set_rcv_hiwat(tcp, rwnd); in tcp_rwnd_set()
3015 tcp_set_recv_threshold(tcp, sth_hiwat >> 3); in tcp_rwnd_set()
3019 if (tcp->tcp_tcpha != NULL) { in tcp_rwnd_set()
3020 tcp->tcp_tcpha->tha_win = in tcp_rwnd_set()
3021 htons(tcp->tcp_rwnd >> tcp->tcp_rcv_ws); in tcp_rwnd_set()
3023 if ((tcp->tcp_rcv_ws > 0) && rwnd > tcp->tcp_cwnd_max) in tcp_rwnd_set()
3024 tcp->tcp_cwnd_max = rwnd; in tcp_rwnd_set()
3037 old_max_rwnd = tcp->tcp_rwnd; in tcp_rwnd_set()
3048 if (rwnd < old_max_rwnd && tcp->tcp_state > TCPS_SYN_SENT) { in tcp_rwnd_set()
3057 max_transmittable_rwnd = TCP_MAXWIN << tcp->tcp_rcv_ws; in tcp_rwnd_set()
3068 tcp->tcp_rwnd = old_max_rwnd = rwnd; in tcp_rwnd_set()
3070 if (tcp->tcp_localnet) { in tcp_rwnd_set()
3071 tcp->tcp_rack_abs_max = in tcp_rwnd_set()
3079 tcp->tcp_rack_abs_max = in tcp_rwnd_set()
3082 if (tcp->tcp_rack_cur_max > tcp->tcp_rack_abs_max) in tcp_rwnd_set()
3083 tcp->tcp_rack_cur_max = tcp->tcp_rack_abs_max; in tcp_rwnd_set()
3085 tcp->tcp_rack_cur_max = 0; in tcp_rwnd_set()
3091 tcp->tcp_rwnd += rwnd - old_max_rwnd; in tcp_rwnd_set()
3095 if (tcp->tcp_tcpha != NULL) { in tcp_rwnd_set()
3096 tcp->tcp_tcpha->tha_win = in tcp_rwnd_set()
3097 htons(tcp->tcp_rwnd >> tcp->tcp_rcv_ws); in tcp_rwnd_set()
3100 if ((tcp->tcp_rcv_ws > 0) && rwnd > tcp->tcp_cwnd_max) in tcp_rwnd_set()
3101 tcp->tcp_cwnd_max = rwnd; in tcp_rwnd_set()
3106 tcp_set_recv_threshold(tcp, rwnd >> 3); in tcp_rwnd_set()
3115 tcp_t *tcp = connp->conn_tcp; in tcp_do_unbind() local
3118 switch (tcp->tcp_state) { in tcp_do_unbind()
3130 mutex_enter(&tcp->tcp_eager_lock); in tcp_do_unbind()
3131 if (tcp->tcp_conn_req_cnt_q0 != 0 || tcp->tcp_conn_req_cnt_q != 0) { in tcp_do_unbind()
3132 tcp_eager_cleanup(tcp, 0); in tcp_do_unbind()
3134 mutex_exit(&tcp->tcp_eager_lock); in tcp_do_unbind()
3137 if (tcp->tcp_listen_cnt != NULL) in tcp_do_unbind()
3138 TCP_DECR_LISTEN_CNT(tcp); in tcp_do_unbind()
3141 tcp_bind_hash_remove(tcp); in tcp_do_unbind()
3142 oldstate = tcp->tcp_state; in tcp_do_unbind()
3143 tcp->tcp_state = TCPS_IDLE; in tcp_do_unbind()
3145 connp->conn_ixa, void, NULL, tcp_t *, tcp, void, NULL, in tcp_do_unbind()
3158 tcp_get_proto_props(tcp_t *tcp, struct sock_proto_props *sopp) in tcp_get_proto_props() argument
3160 conn_t *connp = tcp->tcp_connp; in tcp_get_proto_props()
3163 sopp->sopp_maxblk = tcp_maxpsz_set(tcp, B_FALSE); in tcp_get_proto_props()
3165 sopp->sopp_rxhiwat = tcp->tcp_fused ? in tcp_get_proto_props()
3166 tcp_fuse_set_rcv_hiwat(tcp, connp->conn_rcvbuf) : in tcp_get_proto_props()
3172 if (tcp->tcp_fused) { in tcp_get_proto_props()
3173 ASSERT(tcp->tcp_loopback); in tcp_get_proto_props()
3174 ASSERT(tcp->tcp_loopback_peer != NULL); in tcp_get_proto_props()
3187 (void) tcp_maxpsz_set(tcp->tcp_loopback_peer, B_TRUE); in tcp_get_proto_props()
3188 } else if (tcp->tcp_snd_sack_ok) { in tcp_get_proto_props()
3190 (tcp->tcp_loopback ? 0 : tcp->tcp_tcps->tcps_wroff_xtra); in tcp_get_proto_props()
3193 (tcp->tcp_loopback ? 0 : tcp->tcp_tcps->tcps_wroff_xtra); in tcp_get_proto_props()
3196 if (tcp->tcp_loopback) { in tcp_get_proto_props()
3206 tcp_zcopy_check(tcp_t *tcp) in tcp_zcopy_check() argument
3208 conn_t *connp = tcp->tcp_connp; in tcp_zcopy_check()
3211 tcp_stack_t *tcps = tcp->tcp_tcps; in tcp_zcopy_check()
3218 tcp->tcp_snd_zcopy_on = zc_enabled; in tcp_zcopy_check()
3219 if (!TCP_IS_DETACHED(tcp)) { in tcp_zcopy_check()
3247 tcp_zcopy_backoff(tcp_t *tcp, mblk_t *bp, boolean_t fix_xmitlist) in tcp_zcopy_backoff() argument
3252 tcp_stack_t *tcps = tcp->tcp_tcps; in tcp_zcopy_backoff()
3259 tcp->tcp_xmit_zc_clean = B_FALSE; in tcp_zcopy_backoff()
3267 tcp_zcopy_notify(tcp); in tcp_zcopy_backoff()
3282 if (tcp->tcp_xmit_tail == bp) in tcp_zcopy_backoff()
3283 tcp->tcp_xmit_tail = nbp; in tcp_zcopy_backoff()
3309 tcp->tcp_xmit_last = tail; in tcp_zcopy_backoff()
3310 tcp->tcp_xmit_zc_clean = B_TRUE; in tcp_zcopy_backoff()
3317 tcp_zcopy_notify(tcp_t *tcp) in tcp_zcopy_notify() argument
3322 if (tcp->tcp_detached) in tcp_zcopy_notify()
3324 connp = tcp->tcp_connp; in tcp_zcopy_notify()
3341 tcp_update_lso(tcp_t *tcp, ip_xmit_attr_t *ixa) in tcp_update_lso() argument
3365 tcp->tcp_lso_max = MIN(TCP_MAX_LSO_LENGTH, lso_max); in tcp_update_lso()
3367 DTRACE_PROBE3(tcp_update_lso, boolean_t, tcp->tcp_lso, in tcp_update_lso()
3368 boolean_t, B_TRUE, uint32_t, tcp->tcp_lso_max); in tcp_update_lso()
3374 if (!tcp->tcp_lso) in tcp_update_lso()
3375 tcp->tcp_maxpsz_multiplier = 0; in tcp_update_lso()
3377 tcp->tcp_lso = B_TRUE; in tcp_update_lso()
3378 TCP_STAT(tcp->tcp_tcps, tcp_lso_enabled); in tcp_update_lso()
3380 DTRACE_PROBE3(tcp_update_lso, boolean_t, tcp->tcp_lso, in tcp_update_lso()
3381 boolean_t, B_FALSE, uint32_t, tcp->tcp_lso_max); in tcp_update_lso()
3387 if (tcp->tcp_lso) { in tcp_update_lso()
3388 tcp->tcp_maxpsz_multiplier = in tcp_update_lso()
3389 tcp->tcp_tcps->tcps_maxpsz_multiplier; in tcp_update_lso()
3391 tcp->tcp_lso = B_FALSE; in tcp_update_lso()
3392 TCP_STAT(tcp->tcp_tcps, tcp_lso_disabled); in tcp_update_lso()
3396 (void) tcp_maxpsz_set(tcp, B_TRUE); in tcp_update_lso()
3403 tcp_update_zcopy(tcp_t *tcp) in tcp_update_zcopy() argument
3405 conn_t *connp = tcp->tcp_connp; in tcp_update_zcopy()
3406 tcp_stack_t *tcps = tcp->tcp_tcps; in tcp_update_zcopy()
3408 if (tcp->tcp_snd_zcopy_on) { in tcp_update_zcopy()
3409 tcp->tcp_snd_zcopy_on = B_FALSE; in tcp_update_zcopy()
3410 if (!TCP_IS_DETACHED(tcp)) { in tcp_update_zcopy()
3416 tcp->tcp_snd_zcopy_on = B_TRUE; in tcp_update_zcopy()
3417 if (!TCP_IS_DETACHED(tcp)) { in tcp_update_zcopy()
3434 tcp_t *tcp = (tcp_t *)arg; in tcp_notify() local
3435 conn_t *connp = tcp->tcp_connp; in tcp_notify()
3439 tcp_update_lso(tcp, connp->conn_ixa); in tcp_notify()
3442 tcp_update_pmtu(tcp, B_FALSE); in tcp_notify()
3445 tcp_update_zcopy(tcp); in tcp_notify()
3473 tcp_t *tcp; in tcp_acceptor_hash_lookup() local
3477 for (tcp = tf->tf_tcp; tcp != NULL; in tcp_acceptor_hash_lookup()
3478 tcp = tcp->tcp_acceptor_hash) { in tcp_acceptor_hash_lookup()
3479 if (tcp->tcp_acceptor_id == id) { in tcp_acceptor_hash_lookup()
3480 CONN_INC_REF(tcp->tcp_connp); in tcp_acceptor_hash_lookup()
3482 return (tcp); in tcp_acceptor_hash_lookup()
3493 tcp_acceptor_hash_insert(t_uscalar_t id, tcp_t *tcp) in tcp_acceptor_hash_insert() argument
3498 tcp_stack_t *tcps = tcp->tcp_tcps; in tcp_acceptor_hash_insert()
3502 if (tcp->tcp_ptpahn != NULL) in tcp_acceptor_hash_insert()
3503 tcp_acceptor_hash_remove(tcp); in tcp_acceptor_hash_insert()
3508 tcpnext->tcp_ptpahn = &tcp->tcp_acceptor_hash; in tcp_acceptor_hash_insert()
3509 tcp->tcp_acceptor_hash = tcpnext; in tcp_acceptor_hash_insert()
3510 tcp->tcp_ptpahn = tcpp; in tcp_acceptor_hash_insert()
3511 tcpp[0] = tcp; in tcp_acceptor_hash_insert()
3512 tcp->tcp_acceptor_lockp = &tf->tf_lock; /* For tcp_*_hash_remove */ in tcp_acceptor_hash_insert()
3520 tcp_acceptor_hash_remove(tcp_t *tcp) in tcp_acceptor_hash_remove() argument
3529 lockp = tcp->tcp_acceptor_lockp; in tcp_acceptor_hash_remove()
3531 if (tcp->tcp_ptpahn == NULL) in tcp_acceptor_hash_remove()
3536 if (tcp->tcp_ptpahn) { in tcp_acceptor_hash_remove()
3537 tcpnext = tcp->tcp_acceptor_hash; in tcp_acceptor_hash_remove()
3539 tcpnext->tcp_ptpahn = tcp->tcp_ptpahn; in tcp_acceptor_hash_remove()
3540 tcp->tcp_acceptor_hash = NULL; in tcp_acceptor_hash_remove()
3542 *tcp->tcp_ptpahn = tcpnext; in tcp_acceptor_hash_remove()
3543 tcp->tcp_ptpahn = NULL; in tcp_acceptor_hash_remove()
3546 tcp->tcp_acceptor_lockp = NULL; in tcp_acceptor_hash_remove()
3977 tcp_iss_init(tcp_t *tcp) in tcp_iss_init() argument
3982 tcp_stack_t *tcps = tcp->tcp_tcps; in tcp_iss_init()
3983 conn_t *connp = tcp->tcp_connp; in tcp_iss_init()
3986 tcp->tcp_iss = tcps->tcps_iss_incr_extra; in tcp_iss_init()
3997 tcp->tcp_iss += answer[0] ^ answer[1] ^ answer[2] ^ answer[3]; in tcp_iss_init()
4005 tcp->tcp_iss += (gethrtime() >> ISS_NSEC_SHT) + tcp_random(); in tcp_iss_init()
4008 tcp->tcp_iss += (uint32_t)gethrestime_sec() * in tcp_iss_init()
4012 tcp->tcp_valid_bits = TCP_ISS_VALID; in tcp_iss_init()
4013 tcp->tcp_fss = tcp->tcp_iss - 1; in tcp_iss_init()
4014 tcp->tcp_suna = tcp->tcp_iss; in tcp_iss_init()
4015 tcp->tcp_snxt = tcp->tcp_iss + 1; in tcp_iss_init()
4016 tcp->tcp_rexmit_nxt = tcp->tcp_snxt; in tcp_iss_init()
4017 tcp->tcp_csuna = tcp->tcp_snxt; in tcp_iss_init()
4027 tcp_setqfull(tcp_t *tcp) in tcp_setqfull() argument
4029 tcp_stack_t *tcps = tcp->tcp_tcps; in tcp_setqfull()
4030 conn_t *connp = tcp->tcp_connp; in tcp_setqfull()
4032 if (tcp->tcp_closed) in tcp_setqfull()
4035 conn_setqfull(connp, &tcp->tcp_flow_stopped); in tcp_setqfull()
4036 if (tcp->tcp_flow_stopped) in tcp_setqfull()
4041 tcp_clrqfull(tcp_t *tcp) in tcp_clrqfull() argument
4043 conn_t *connp = tcp->tcp_connp; in tcp_clrqfull()
4045 if (tcp->tcp_closed) in tcp_clrqfull()
4047 conn_clrqfull(connp, &tcp->tcp_flow_stopped); in tcp_clrqfull()
4100 tcp_t *tcp = connp->conn_tcp; in tcp_do_bind() local
4102 if (tcp->tcp_state >= TCPS_BOUND) { in tcp_do_bind()
4105 "tcp_bind: bad state, %d", tcp->tcp_state); in tcp_do_bind()
4114 ASSERT(tcp->tcp_state == TCPS_BOUND); in tcp_do_bind()
4115 tcp->tcp_conn_req_max = 0; in tcp_do_bind()
4128 tcp_t *tcp = connp->conn_tcp; in tcp_do_connect() local
4137 tcp_stack_t *tcps = tcp->tcp_tcps; in tcp_do_connect()
4141 oldstate = tcp->tcp_state; in tcp_do_connect()
4183 switch (tcp->tcp_state) { in tcp_do_connect()
4224 error = tcp_connect_ipv6(tcp, &sin6->sin6_addr, in tcp_do_connect()
4241 error = tcp_connect_ipv4(tcp, dstaddrp, dstport, in tcp_do_connect()
4248 error = tcp_connect_ipv4(tcp, dstaddrp, dstport, srcid); in tcp_do_connect()
4260 tcp->tcp_active_open = 1; in tcp_do_connect()
4265 mss = tcp->tcp_mss - connp->conn_ht_iphc_len; in tcp_do_connect()
4274 tcp->tcp_rwnd = connp->conn_rcvbuf; in tcp_do_connect()
4275 tcp->tcp_rwnd = MAX(MSS_ROUNDUP(tcp->tcp_rwnd, mss), in tcp_do_connect()
4277 connp->conn_rcvbuf = tcp->tcp_rwnd; in tcp_do_connect()
4278 tcp_set_ws_value(tcp); in tcp_do_connect()
4279 tcp->tcp_tcpha->tha_win = htons(tcp->tcp_rwnd >> tcp->tcp_rcv_ws); in tcp_do_connect()
4280 if (tcp->tcp_rcv_ws > 0 || tcps->tcps_wscale_always) in tcp_do_connect()
4281 tcp->tcp_snd_ws_ok = B_TRUE; in tcp_do_connect()
4290 (tcp->tcp_rcv_ws && tcps->tcps_tstamp_if_wscale)) { in tcp_do_connect()
4291 tcp->tcp_snd_ts_ok = B_TRUE; in tcp_do_connect()
4300 ASSERT(tcp->tcp_num_sack_blk == 0); in tcp_do_connect()
4301 ASSERT(tcp->tcp_notsack_list == NULL); in tcp_do_connect()
4302 tcp->tcp_snd_sack_ok = B_TRUE; in tcp_do_connect()
4314 tcp->tcp_ecn_ok = B_TRUE; in tcp_do_connect()
4318 connp->conn_ixa, void, NULL, tcp_t *, tcp, void, NULL, in tcp_do_connect()
4321 TCP_TIMER_RESTART(tcp, tcp->tcp_rto); in tcp_do_connect()
4322 syn_mp = tcp_xmit_mp(tcp, NULL, 0, NULL, NULL, in tcp_do_connect()
4323 tcp->tcp_iss, B_FALSE, NULL, B_FALSE); in tcp_do_connect()
4330 SOCK_CONNID_BUMP(tcp->tcp_connid); in tcp_do_connect()
4337 void_ip_t *, syn_mp->b_rptr, tcp_t *, tcp, in tcp_do_connect()
4340 tcp_send_data(tcp, syn_mp); in tcp_do_connect()
4343 if (tcp->tcp_conn.tcp_opts_conn_req != NULL) in tcp_do_connect()
4344 tcp_close_mpp(&tcp->tcp_conn.tcp_opts_conn_req); in tcp_do_connect()
4350 tcp->tcp_state = oldstate; in tcp_do_connect()
4351 if (tcp->tcp_conn.tcp_opts_conn_req != NULL) in tcp_do_connect()
4352 tcp_close_mpp(&tcp->tcp_conn.tcp_opts_conn_req); in tcp_do_connect()
4360 tcp_t *tcp = connp->conn_tcp; in tcp_do_listen() local
4362 tcp_stack_t *tcps = tcp->tcp_tcps; in tcp_do_listen()
4368 if (tcp->tcp_state >= TCPS_BOUND) { in tcp_do_listen()
4369 if ((tcp->tcp_state == TCPS_BOUND || in tcp_do_listen()
4370 tcp->tcp_state == TCPS_LISTEN) && backlog > 0) { in tcp_do_listen()
4382 "tcp_listen: bad state, %d", tcp->tcp_state); in tcp_do_listen()
4416 ASSERT(tcp->tcp_state == TCPS_BOUND || tcp->tcp_state == TCPS_LISTEN); in tcp_do_listen()
4417 tcp->tcp_conn_req_max = backlog; in tcp_do_listen()
4418 if (tcp->tcp_conn_req_max) { in tcp_do_listen()
4419 if (tcp->tcp_conn_req_max < tcps->tcps_conn_req_min) in tcp_do_listen()
4420 tcp->tcp_conn_req_max = tcps->tcps_conn_req_min; in tcp_do_listen()
4421 if (tcp->tcp_conn_req_max > tcps->tcps_conn_req_max_q) in tcp_do_listen()
4422 tcp->tcp_conn_req_max = tcps->tcps_conn_req_max_q; in tcp_do_listen()
4429 if (tcp->tcp_state != TCPS_LISTEN) { in tcp_do_listen()
4430 tcp->tcp_state = TCPS_LISTEN; in tcp_do_listen()
4432 connp->conn_ixa, void, NULL, tcp_t *, tcp, in tcp_do_listen()
4435 tcp->tcp_eager_next_q0 = tcp->tcp_eager_prev_q0 = tcp; in tcp_do_listen()
4436 tcp->tcp_eager_next_drop_q0 = tcp; in tcp_do_listen()
4437 tcp->tcp_eager_prev_drop_q0 = tcp; in tcp_do_listen()
4438 tcp->tcp_second_ctimer_threshold = in tcp_do_listen()
4459 oldstate = tcp->tcp_state; in tcp_do_listen()
4460 tcp->tcp_state = TCPS_IDLE; in tcp_do_listen()
4462 connp->conn_ixa, void, NULL, tcp_t *, tcp, void, NULL, in tcp_do_listen()
4480 tcp_bind_hash_remove(tcp); in tcp_do_listen()
4489 tcp->tcp_listen_cnt == NULL) { in tcp_do_listen()
4524 tcp->tcp_listen_cnt = tlc; in tcp_do_listen()