Lines Matching refs:connp
143 static void udp_icmp_error_ipv6(conn_t *connp, mblk_t *mp,
156 int udp_opt_set(conn_t *connp, uint_t optset_context,
160 int udp_opt_get(conn_t *connp, int level, int name,
162 static int udp_output_connected(conn_t *connp, mblk_t *mp, cred_t *cr,
164 static int udp_output_lastdst(conn_t *connp, mblk_t *mp, cred_t *cr,
166 static int udp_output_newdst(conn_t *connp, mblk_t *data_mp, sin_t *sin,
357 udp_reuselist_add(struct reuselist *reusep, conn_t *connp, boolean_t last) in udp_reuselist_add() argument
373 reusep->ru_conns[reusep->ru_entries++] = connp; in udp_reuselist_add()
379 udp_reuselist_remove(conn_t *connp) in udp_reuselist_remove() argument
382 struct reuselist *reusep = connp->conn_reuselist; in udp_reuselist_remove()
390 if (reusep->ru_conns[i] == connp) in udp_reuselist_remove()
401 connp->conn_reuselist = NULL; in udp_reuselist_remove()
460 conn_t *connp = udp->udp_connp; in udp_bind_hash_remove() local
469 ASSERT(connp->conn_lport != 0); in udp_bind_hash_remove()
471 lockp = &us->us_bind_fanout[UDP_BIND_HASH(connp->conn_lport, in udp_bind_hash_remove()
493 conn_t *connp = udp->udp_connp; in udp_bind_hash_insert() local
513 if (V6_OR_V4_INADDR_ANY(connp->conn_bound_addr_v6) && in udp_bind_hash_insert()
551 conn_t *connp; in udp_tpi_bind() local
571 connp = Q_TO_CONN(q); in udp_tpi_bind()
572 udp = connp->conn_udp; in udp_tpi_bind()
605 if (connp->conn_family == AF_INET) { in udp_tpi_bind()
613 ASSERT(connp->conn_family == AF_INET6); in udp_tpi_bind()
630 if (connp->conn_family != AF_INET || in udp_tpi_bind()
644 if (connp->conn_family != AF_INET6 || in udp_tpi_bind()
658 error = udp_do_bind(connp, sa, tbr->ADDR_length, cr, in udp_tpi_bind()
685 conn_t *connp = Q_TO_CONN(q); in udp_tpi_connect() local
742 error = proto_verify_ip_addr(connp->conn_family, sa, len); in udp_tpi_connect()
748 error = udp_do_connect(connp, sa, len, cr, pid); in udp_tpi_connect()
760 if (connp->conn_family == AF_INET) { in udp_tpi_connect()
782 putnext(connp->conn_rq, mp); in udp_tpi_connect()
783 putnext(connp->conn_rq, mp1); in udp_tpi_connect()
790 conn_t *connp; in udp_tpi_close() local
802 connp = Q_TO_CONN(q); in udp_tpi_close()
803 udp_do_close(connp); in udp_tpi_close()
810 udp_close_free(conn_t *connp) in udp_close_free() argument
812 udp_t *udp = connp->conn_udp; in udp_close_free()
824 ASSERT(udp->udp_connp == connp); in udp_close_free()
826 udp->udp_connp = connp; in udp_close_free()
830 udp_do_disconnect(conn_t *connp) in udp_do_disconnect() argument
837 udp = connp->conn_udp; in udp_do_disconnect()
839 mutex_enter(&connp->conn_lock); in udp_do_disconnect()
841 mutex_exit(&connp->conn_lock); in udp_do_disconnect()
844 udpf = &us->us_bind_fanout[UDP_BIND_HASH(connp->conn_lport, in udp_do_disconnect()
847 if (connp->conn_mcbc_bind) in udp_do_disconnect()
848 connp->conn_saddr_v6 = ipv6_all_zeros; in udp_do_disconnect()
850 connp->conn_saddr_v6 = connp->conn_bound_addr_v6; in udp_do_disconnect()
851 connp->conn_laddr_v6 = connp->conn_bound_addr_v6; in udp_do_disconnect()
852 connp->conn_faddr_v6 = ipv6_all_zeros; in udp_do_disconnect()
853 connp->conn_fport = 0; in udp_do_disconnect()
858 if (connp->conn_family == AF_INET6) in udp_do_disconnect()
859 connp->conn_ipversion = IPV6_VERSION; in udp_do_disconnect()
861 connp->conn_v6lastdst = ipv6_all_zeros; in udp_do_disconnect()
862 error = udp_build_hdr_template(connp, &connp->conn_saddr_v6, in udp_do_disconnect()
863 &connp->conn_faddr_v6, connp->conn_fport, connp->conn_flowinfo); in udp_do_disconnect()
864 mutex_exit(&connp->conn_lock); in udp_do_disconnect()
872 return (ip_laddr_fanout_insert(connp)); in udp_do_disconnect()
878 conn_t *connp = Q_TO_CONN(q); in udp_tpi_disconnect() local
892 error = udp_do_disconnect(connp); in udp_tpi_disconnect()
908 udp_disconnect(conn_t *connp) in udp_disconnect() argument
912 connp->conn_dgram_errind = B_FALSE; in udp_disconnect()
913 error = udp_do_disconnect(connp); in udp_disconnect()
957 conn_t *connp = (conn_t *)arg1; in udp_icmp_input() local
966 udp_t *udp = connp->conn_udp; in udp_icmp_input()
974 udp_icmp_error_ipv6(connp, mp, ira); in udp_icmp_input()
999 if (connp->conn_ipversion != IPV4_VERSION) in udp_icmp_input()
1002 ixa = conn_get_ixa(connp, B_FALSE); in udp_icmp_input()
1014 mutex_enter(&connp->conn_lock); in udp_icmp_input()
1015 ipha = (ipha_t *)connp->conn_ht_iphc; in udp_icmp_input()
1023 mutex_exit(&connp->conn_lock); in udp_icmp_input()
1049 if (!connp->conn_dgram_errind) { in udp_icmp_input()
1054 switch (connp->conn_family) { in udp_icmp_input()
1060 if (IPCL_IS_NONSTR(connp)) { in udp_icmp_input()
1061 mutex_enter(&connp->conn_lock); in udp_icmp_input()
1063 if (sin.sin_port == connp->conn_fport && in udp_icmp_input()
1065 connp->conn_faddr_v4) { in udp_icmp_input()
1066 mutex_exit(&connp->conn_lock); in udp_icmp_input()
1067 (*connp->conn_upcalls->su_set_error) in udp_icmp_input()
1068 (connp->conn_upper_handle, error); in udp_icmp_input()
1075 mutex_exit(&connp->conn_lock); in udp_icmp_input()
1080 putnext(connp->conn_rq, mp1); in udp_icmp_input()
1088 if (IPCL_IS_NONSTR(connp)) { in udp_icmp_input()
1089 mutex_enter(&connp->conn_lock); in udp_icmp_input()
1091 if (sin6.sin6_port == connp->conn_fport && in udp_icmp_input()
1093 &connp->conn_faddr_v6)) { in udp_icmp_input()
1094 mutex_exit(&connp->conn_lock); in udp_icmp_input()
1095 (*connp->conn_upcalls->su_set_error) in udp_icmp_input()
1096 (connp->conn_upper_handle, error); in udp_icmp_input()
1103 mutex_exit(&connp->conn_lock); in udp_icmp_input()
1108 putnext(connp->conn_rq, mp1); in udp_icmp_input()
1123 udp_icmp_error_ipv6(conn_t *connp, mblk_t *mp, ip_recv_attr_t *ira) in udp_icmp_error_ipv6() argument
1133 udp_t *udp = connp->conn_udp; in udp_icmp_error_ipv6()
1187 if (!connp->conn_ipv6_recvpathmtu) in udp_icmp_error_ipv6()
1213 sin6->sin6_addr = connp->conn_faddr_v6; in udp_icmp_error_ipv6()
1231 udp_ulp_recv(connp, newmp, msgdsize(newmp), ira); in udp_icmp_error_ipv6()
1256 if (!connp->conn_dgram_errind) { in udp_icmp_error_ipv6()
1267 if (IPCL_IS_NONSTR(connp)) { in udp_icmp_error_ipv6()
1268 mutex_enter(&connp->conn_lock); in udp_icmp_error_ipv6()
1270 if (sin6.sin6_port == connp->conn_fport && in udp_icmp_error_ipv6()
1272 &connp->conn_faddr_v6)) { in udp_icmp_error_ipv6()
1273 mutex_exit(&connp->conn_lock); in udp_icmp_error_ipv6()
1274 (*connp->conn_upcalls->su_set_error) in udp_icmp_error_ipv6()
1275 (connp->conn_upper_handle, error); in udp_icmp_error_ipv6()
1282 mutex_exit(&connp->conn_lock); in udp_icmp_error_ipv6()
1287 putnext(connp->conn_rq, mp1); in udp_icmp_error_ipv6()
1307 conn_t *connp = udp->udp_connp; in udp_addr_req() local
1325 if (connp->conn_family == AF_INET) in udp_addr_req()
1330 mutex_enter(&connp->conn_lock); in udp_addr_req()
1342 (void) conn_getsockname(connp, sa, &addrlen); in udp_addr_req()
1353 (void) conn_getpeername(connp, sa, &addrlen); in udp_addr_req()
1356 mutex_exit(&connp->conn_lock); in udp_addr_req()
1364 conn_t *connp = udp->udp_connp; in udp_copy_info() local
1366 if (connp->conn_family == AF_INET) { in udp_copy_info()
1455 conn_t *connp; in udp_open() local
1493 connp = udp_do_open(credp, isv6, KM_SLEEP, &err); in udp_open()
1494 if (connp == NULL) { in udp_open()
1498 udp = connp->conn_udp; in udp_open()
1501 connp->conn_dev = conn_dev; in udp_open()
1502 connp->conn_minor_arena = minor_arena; in udp_open()
1507 q->q_ptr = connp; in udp_open()
1508 WR(q)->q_ptr = connp; in udp_open()
1509 connp->conn_rq = q; in udp_open()
1510 connp->conn_wq = WR(q); in udp_open()
1516 ASSERT(connp->conn_proto == IPPROTO_UDP); in udp_open()
1517 ASSERT(connp->conn_udp == udp); in udp_open()
1518 ASSERT(udp->udp_connp == connp); in udp_open()
1524 WR(q)->q_hiwat = connp->conn_sndbuf; in udp_open()
1525 WR(q)->q_lowat = connp->conn_sndlowat; in udp_open()
1530 (void) proto_set_tx_wroff(q, connp, connp->conn_wroff); in udp_open()
1531 (void) proto_set_rx_hiwat(q, connp, in udp_open()
1532 udp_set_rcv_hiwat(udp, connp->conn_rcvbuf)); in udp_open()
1534 mutex_enter(&connp->conn_lock); in udp_open()
1535 connp->conn_state_flags &= ~CONN_INCIPIENT; in udp_open()
1536 mutex_exit(&connp->conn_lock); in udp_open()
1594 udp_opt_get(conn_t *connp, t_scalar_t level, t_scalar_t name, in udp_opt_get() argument
1598 udp_t *udp = connp->conn_udp; in udp_opt_get()
1603 coas.coa_connp = connp; in udp_opt_get()
1604 coas.coa_ixa = connp->conn_ixa; in udp_opt_get()
1605 coas.coa_ipp = &connp->conn_xmit_ipp; in udp_opt_get()
1620 if (connp->conn_family != AF_INET) in udp_opt_get()
1626 mutex_enter(&connp->conn_lock); in udp_opt_get()
1629 mutex_exit(&connp->conn_lock); in udp_opt_get()
1636 mutex_exit(&connp->conn_lock); in udp_opt_get()
1643 mutex_enter(&connp->conn_lock); in udp_opt_get()
1645 mutex_exit(&connp->conn_lock); in udp_opt_get()
1648 mutex_enter(&connp->conn_lock); in udp_opt_get()
1650 mutex_exit(&connp->conn_lock); in udp_opt_get()
1654 mutex_enter(&connp->conn_lock); in udp_opt_get()
1656 mutex_exit(&connp->conn_lock); in udp_opt_get()
1667 conn_t *connp = Q_TO_CONN(q); in udp_tpi_opt_get() local
1670 err = udp_opt_get(connp, level, name, ptr); in udp_tpi_opt_get()
1681 conn_t *connp = coa->coa_connp; in udp_do_opt_set() local
1683 udp_t *udp = connp->conn_udp; in udp_do_opt_set()
1719 if (connp->conn_mlp_type == mlptSingle) in udp_do_opt_set()
1769 if (connp->conn_family != AF_INET) { in udp_do_opt_set()
1774 mutex_enter(&connp->conn_lock); in udp_do_opt_set()
1776 mutex_exit(&connp->conn_lock); in udp_do_opt_set()
1783 mutex_enter(&connp->conn_lock); in udp_do_opt_set()
1785 mutex_exit(&connp->conn_lock); in udp_do_opt_set()
1799 udp_opt_set(conn_t *connp, uint_t optset_context, int level, in udp_opt_set() argument
1803 udp_t *udp = connp->conn_udp; in udp_opt_set()
1857 ASSERT(coa->coa_connp == connp); in udp_opt_set()
1863 coas.coa_connp = connp; in udp_opt_set()
1865 coas.coa_ixa = conn_get_ixa(connp, B_TRUE); in udp_opt_set()
1870 coas.coa_ipp = &connp->conn_xmit_ipp; in udp_opt_set()
1914 mutex_enter(&connp->conn_lock); in udp_opt_set()
1916 if (connp->conn_dhcpinit_ill != NULL) { in udp_opt_set()
1922 ill_t *oill = connp->conn_dhcpinit_ill; in udp_opt_set()
1926 ill_set_inputfn(connp->conn_dhcpinit_ill); in udp_opt_set()
1927 connp->conn_dhcpinit_ill = NULL; in udp_opt_set()
1931 connp->conn_dhcpinit_ill = ill; in udp_opt_set()
1934 mutex_exit(&connp->conn_lock); in udp_opt_set()
1938 mutex_exit(&connp->conn_lock); in udp_opt_set()
1973 mutex_enter(&connp->conn_lock); in udp_opt_set()
1974 connp->conn_v6lastdst = ipv6_all_zeros; in udp_opt_set()
1977 &connp->conn_faddr_v6, &nexthop); in udp_opt_set()
1978 saddr = connp->conn_saddr_v6; in udp_opt_set()
1979 faddr = connp->conn_faddr_v6; in udp_opt_set()
1980 fport = connp->conn_fport; in udp_opt_set()
1981 mutex_exit(&connp->conn_lock); in udp_opt_set()
1985 (void) ip_attr_connect(connp, coa->coa_ixa, in udp_opt_set()
1999 mutex_enter(&connp->conn_lock); in udp_opt_set()
2000 if (!IN6_IS_ADDR_UNSPECIFIED(&connp->conn_faddr_v6) && in udp_opt_set()
2001 !IN6_IS_ADDR_V4MAPPED_ANY(&connp->conn_faddr_v6)) { in udp_opt_set()
2002 err = udp_build_hdr_template(connp, in udp_opt_set()
2003 &connp->conn_saddr_v6, &connp->conn_faddr_v6, in udp_opt_set()
2004 connp->conn_fport, connp->conn_flowinfo); in udp_opt_set()
2006 mutex_exit(&connp->conn_lock); in udp_opt_set()
2010 connp->conn_v6lastdst = ipv6_all_zeros; in udp_opt_set()
2012 mutex_exit(&connp->conn_lock); in udp_opt_set()
2015 (void) proto_set_rx_hiwat(connp->conn_rq, connp, in udp_opt_set()
2016 connp->conn_rcvbuf); in udp_opt_set()
2018 if ((coa->coa_changed & COA_SNDBUF_CHANGED) && !IPCL_IS_NONSTR(connp)) { in udp_opt_set()
2019 connp->conn_wq->q_hiwat = connp->conn_sndbuf; in udp_opt_set()
2025 mutex_enter(&connp->conn_lock); in udp_opt_set()
2026 wroff = connp->conn_ht_iphc_allocated + us->us_wroff_extra; in udp_opt_set()
2029 if (wroff > connp->conn_wroff) { in udp_opt_set()
2030 connp->conn_wroff = wroff; in udp_opt_set()
2031 mutex_exit(&connp->conn_lock); in udp_opt_set()
2032 (void) proto_set_tx_wroff(connp->conn_rq, connp, wroff); in udp_opt_set()
2034 mutex_exit(&connp->conn_lock); in udp_opt_set()
2046 conn_t *connp = Q_TO_CONN(q); in udp_tpi_opt_set() local
2049 error = udp_opt_set(connp, optset_context, level, name, inlen, invalp, in udp_tpi_opt_set()
2059 udp_prepend_hdr(conn_t *connp, ip_xmit_attr_t *ixa, const ip_pkt_t *ipp, in udp_prepend_hdr() argument
2065 udp_stack_t *us = connp->conn_netstack->netstack_udp; in udp_prepend_hdr()
2068 udp_t *udp = connp->conn_udp; in udp_prepend_hdr()
2088 udpha->uha_src_port = connp->conn_lport; in udp_prepend_hdr()
2141 udp_build_hdr_template(conn_t *connp, const in6_addr_t *v6src, in udp_build_hdr_template() argument
2147 ASSERT(MUTEX_HELD(&connp->conn_lock)); in udp_build_hdr_template()
2152 connp->conn_v6lastdst = ipv6_all_zeros; in udp_build_hdr_template()
2154 error = conn_build_hdr_template(connp, UDPH_SIZE, 0, v6src, v6dst, in udp_build_hdr_template()
2163 udpha = (udpha_t *)connp->conn_ht_ulp; in udp_build_hdr_template()
2164 udpha->uha_src_port = connp->conn_lport; in udp_build_hdr_template()
2202 udp_ulp_recv(conn_t *connp, mblk_t *mp, uint_t len, ip_recv_attr_t *ira) in udp_ulp_recv() argument
2204 if (IPCL_IS_NONSTR(connp)) { in udp_ulp_recv()
2205 udp_t *udp = connp->conn_udp; in udp_ulp_recv()
2209 if ((*connp->conn_upcalls->su_recv) in udp_ulp_recv()
2210 (connp->conn_upper_handle, mp, len, 0, &error, NULL) < 0) { in udp_ulp_recv()
2216 if ((*connp->conn_upcalls->su_recv) in udp_ulp_recv()
2217 (connp->conn_upper_handle, NULL, 0, 0, in udp_ulp_recv()
2221 connp->conn_flow_cntrld = in udp_ulp_recv()
2231 putnext(connp->conn_rq, mp); in udp_ulp_recv()
2245 putnext(connp->conn_rq, mp); in udp_ulp_recv()
2258 conn_t *connp = (conn_t *)arg1; in udp_input() local
2274 ASSERT(connp->conn_flags & IPCL_UDPCONN); in udp_input()
2276 mutex_enter(&connp->conn_lock); in udp_input()
2277 if (connp->conn_reuselist != NULL) { in udp_input()
2278 struct reuselist *reusep = connp->conn_reuselist; in udp_input()
2294 if (new == connp) in udp_input()
2299 mutex_exit(&connp->conn_lock); in udp_input()
2301 connp = new; in udp_input()
2303 mutex_exit(&connp->conn_lock); in udp_input()
2306 udp = connp->conn_udp; in udp_input()
2320 mutex_enter(&connp->conn_lock); in udp_input()
2322 recv_ancillary = connp->conn_recv_ancillary; in udp_input()
2323 mutex_exit(&connp->conn_lock); in udp_input()
2346 connp->conn_family == AF_INET) { in udp_input()
2354 mutex_enter(&connp->conn_lock); in udp_input()
2359 mutex_exit(&connp->conn_lock); in udp_input()
2362 mutex_exit(&connp->conn_lock); in udp_input()
2385 ASSERT(connp->conn_family == AF_INET6); in udp_input()
2403 if (connp->conn_family == AF_INET) { in udp_input()
2414 udi_size += conn_recvancillary_size(connp, in udp_input()
2436 sin->sin_family = connp->conn_family; in udp_input()
2445 conn_recvancillary_add(connp, recv_ancillary, ira, in udp_input()
2461 udi_size += conn_recvancillary_size(connp, in udp_input()
2490 IPCL_ZONEID(connp), us->us_netstack); in udp_input()
2503 &ip6h->ip6_dst, IPCL_ZONEID(connp), in udp_input()
2507 sin6->sin6_family = connp->conn_family; in udp_input()
2510 conn_recvancillary_add(connp, recv_ancillary, ira, in udp_input()
2519 DTRACE_UDP5(receive, mblk_t *, NULL, ip_xmit_attr_t *, connp->conn_ixa, in udp_input()
2529 udp_ulp_recv(connp, mp1, pkt_len, ira); in udp_input()
2592 conn_t *connp = Q_TO_CONN(q); in udp_tpi_unbind() local
2595 error = udp_do_unbind(connp); in udp_tpi_unbind()
2694 udp_output_ancillary(conn_t *connp, sin_t *sin, sin6_t *sin6, mblk_t *mp, in udp_output_ancillary() argument
2697 udp_t *udp = connp->conn_udp; in udp_output_ancillary()
2720 ixa = conn_get_ixa_exclusive(connp); in udp_output_ancillary()
2742 ixa->ixa_cred = connp->conn_cred; /* Restore */ in udp_output_ancillary()
2743 ixa->ixa_cpid = connp->conn_cpid; in udp_output_ancillary()
2749 mutex_enter(&connp->conn_lock); in udp_output_ancillary()
2750 error = ip_pkt_copy(&connp->conn_xmit_ipp, ipp, KM_NOSLEEP); in udp_output_ancillary()
2751 mutex_exit(&connp->conn_lock); in udp_output_ancillary()
2765 coa->coa_connp = connp; in udp_output_ancillary()
2772 error = process_auxiliary_options(connp, msg->msg_control, in udp_output_ancillary()
2779 error = tpi_optcom_buf(connp->conn_wq, tudr_mp, in udp_output_ancillary()
2794 mutex_enter(&connp->conn_lock); in udp_output_ancillary()
2804 v6src = connp->conn_saddr_v6; in udp_output_ancillary()
2830 if (!ip_srcid_find_id(srcid, &v6src, IPCL_ZONEID(connp), in udp_output_ancillary()
2831 v4mapped, connp->conn_netstack)) { in udp_output_ancillary()
2833 mutex_exit(&connp->conn_lock); in udp_output_ancillary()
2840 v6dst = connp->conn_faddr_v6; in udp_output_ancillary()
2841 dstport = connp->conn_fport; in udp_output_ancillary()
2842 flowinfo = connp->conn_flowinfo; in udp_output_ancillary()
2844 mutex_exit(&connp->conn_lock); in udp_output_ancillary()
2858 error = ip_attr_connect(connp, ixa, &v6src, &v6dst, &v6nexthop, dstport, in udp_output_ancillary()
2907 if (connp->conn_mlp_type != mlptSingle && in udp_output_ancillary()
2926 error = conn_update_label(connp, ixa, &v6dst, ipp); in udp_output_ancillary()
2933 mp = udp_prepend_hdr(connp, ixa, ipp, &v6src, &v6dst, dstport, in udp_output_ancillary()
2959 (void) ixa_check_drain_insert(connp, ixa); in udp_output_ancillary()
2970 mutex_enter(&connp->conn_lock); in udp_output_ancillary()
2975 if (connp->conn_mcbc_bind) in udp_output_ancillary()
2976 connp->conn_saddr_v6 = ipv6_all_zeros; in udp_output_ancillary()
2978 connp->conn_saddr_v6 = connp->conn_bound_addr_v6; in udp_output_ancillary()
2979 connp->conn_v6lastdst = ipv6_all_zeros; in udp_output_ancillary()
2980 mutex_exit(&connp->conn_lock); in udp_output_ancillary()
2985 ixa->ixa_cred = connp->conn_cred; /* Restore */ in udp_output_ancillary()
2986 ixa->ixa_cpid = connp->conn_cpid; in udp_output_ancillary()
2998 udp_output_connected(conn_t *connp, mblk_t *mp, cred_t *cr, pid_t pid) in udp_output_connected() argument
3000 udp_t *udp = connp->conn_udp; in udp_output_connected()
3009 ixa = conn_get_ixa(connp, B_FALSE); in udp_output_connected()
3021 mutex_enter(&connp->conn_lock); in udp_output_connected()
3022 mp = udp_prepend_header_template(connp, ixa, mp, &connp->conn_saddr_v6, in udp_output_connected()
3023 connp->conn_fport, connp->conn_flowinfo, &error); in udp_output_connected()
3027 mutex_exit(&connp->conn_lock); in udp_output_connected()
3029 ixa->ixa_cred = connp->conn_cred; /* Restore */ in udp_output_connected()
3030 ixa->ixa_cpid = connp->conn_cpid; in udp_output_connected()
3046 saddr = connp->conn_saddr_v6; in udp_output_connected()
3047 faddr = connp->conn_faddr_v6; in udp_output_connected()
3048 fport = connp->conn_fport; in udp_output_connected()
3049 ip_attr_nexthop(&connp->conn_xmit_ipp, ixa, &faddr, &nexthop); in udp_output_connected()
3050 mutex_exit(&connp->conn_lock); in udp_output_connected()
3052 error = ip_attr_connect(connp, ixa, &saddr, &faddr, &nexthop, in udp_output_connected()
3087 ixa->ixa_cred = connp->conn_cred; /* Restore */ in udp_output_connected()
3088 ixa->ixa_cpid = connp->conn_cpid; in udp_output_connected()
3096 mutex_exit(&connp->conn_lock); in udp_output_connected()
3113 (void) ixa_check_drain_insert(connp, ixa); in udp_output_connected()
3125 ixa->ixa_cred = connp->conn_cred; /* Restore */ in udp_output_connected()
3126 ixa->ixa_cpid = connp->conn_cpid; in udp_output_connected()
3138 udp_output_lastdst(conn_t *connp, mblk_t *mp, cred_t *cr, pid_t pid, in udp_output_lastdst() argument
3141 udp_t *udp = connp->conn_udp; in udp_output_lastdst()
3145 ASSERT(MUTEX_HELD(&connp->conn_lock)); in udp_output_lastdst()
3153 mp = udp_prepend_header_template(connp, ixa, mp, &connp->conn_v6lastsrc, in udp_output_lastdst()
3154 connp->conn_lastdstport, connp->conn_lastflowinfo, &error); in udp_output_lastdst()
3158 mutex_exit(&connp->conn_lock); in udp_output_lastdst()
3160 ixa->ixa_cred = connp->conn_cred; /* Restore */ in udp_output_lastdst()
3161 ixa->ixa_cpid = connp->conn_cpid; in udp_output_lastdst()
3177 lastsrc = connp->conn_v6lastsrc; in udp_output_lastdst()
3178 lastdst = connp->conn_v6lastdst; in udp_output_lastdst()
3179 lastport = connp->conn_lastdstport; in udp_output_lastdst()
3180 ip_attr_nexthop(&connp->conn_xmit_ipp, ixa, &lastdst, &nexthop); in udp_output_lastdst()
3181 mutex_exit(&connp->conn_lock); in udp_output_lastdst()
3183 error = ip_attr_connect(connp, ixa, &lastsrc, &lastdst, in udp_output_lastdst()
3218 ixa->ixa_cred = connp->conn_cred; /* Restore */ in udp_output_lastdst()
3219 ixa->ixa_cpid = connp->conn_cpid; in udp_output_lastdst()
3227 mutex_exit(&connp->conn_lock); in udp_output_lastdst()
3243 (void) ixa_check_drain_insert(connp, ixa); in udp_output_lastdst()
3254 mutex_enter(&connp->conn_lock); in udp_output_lastdst()
3259 if (connp->conn_mcbc_bind) in udp_output_lastdst()
3260 connp->conn_saddr_v6 = ipv6_all_zeros; in udp_output_lastdst()
3262 connp->conn_saddr_v6 = connp->conn_bound_addr_v6; in udp_output_lastdst()
3263 connp->conn_v6lastdst = ipv6_all_zeros; in udp_output_lastdst()
3264 mutex_exit(&connp->conn_lock); in udp_output_lastdst()
3268 ixa->ixa_cred = connp->conn_cred; /* Restore */ in udp_output_lastdst()
3269 ixa->ixa_cpid = connp->conn_cpid; in udp_output_lastdst()
3284 udp_prepend_header_template(conn_t *connp, ip_xmit_attr_t *ixa, mblk_t *mp, in udp_prepend_header_template() argument
3287 udp_t *udp = connp->conn_udp; in udp_prepend_header_template()
3299 ASSERT(MUTEX_HELD(&connp->conn_lock)); in udp_prepend_header_template()
3304 copylen = connp->conn_ht_iphc_len; in udp_prepend_header_template()
3331 bcopy(connp->conn_ht_iphc, iph, copylen); in udp_prepend_header_template()
3332 ip_hdr_length = (uint_t)(connp->conn_ht_ulp - connp->conn_ht_iphc); in udp_prepend_header_template()
3348 cksum += connp->conn_sum; in udp_prepend_header_template()
3352 ipp = &connp->conn_xmit_ipp; in udp_prepend_header_template()
3406 udp_ud_err_connected(conn_t *connp, t_scalar_t error) in udp_ud_err_connected() argument
3415 mutex_enter(&connp->conn_lock); in udp_ud_err_connected()
3417 if (connp->conn_family == AF_INET) { in udp_ud_err_connected()
3421 sin->sin_port = connp->conn_fport; in udp_ud_err_connected()
3422 sin->sin_addr.s_addr = connp->conn_faddr_v4; in udp_ud_err_connected()
3429 sin6->sin6_port = connp->conn_fport; in udp_ud_err_connected()
3430 sin6->sin6_flowinfo = connp->conn_flowinfo; in udp_ud_err_connected()
3431 sin6->sin6_addr = connp->conn_faddr_v6; in udp_ud_err_connected()
3432 if (IN6_IS_ADDR_LINKSCOPE(&connp->conn_faddr_v6) && in udp_ud_err_connected()
3433 (connp->conn_ixa->ixa_flags & IXAF_SCOPEID_SET)) { in udp_ud_err_connected()
3434 sin6->sin6_scope_id = connp->conn_ixa->ixa_scopeid; in udp_ud_err_connected()
3442 mutex_exit(&connp->conn_lock); in udp_ud_err_connected()
3446 putnext(connp->conn_rq, mp1); in udp_ud_err_connected()
3466 conn_t *connp = Q_TO_CONN(q); in udp_wput() local
3467 udp_t *udp = connp->conn_udp; in udp_wput()
3508 error = udp_output_connected(connp, mp, cr, pid); in udp_wput()
3511 if (connp->conn_rq != NULL) in udp_wput()
3512 udp_ud_err_connected(connp, (t_scalar_t)error); in udp_wput()
3558 cr = connp->conn_cred; in udp_wput()
3559 pid = connp->conn_cpid; in udp_wput()
3575 switch (connp->conn_family) { in udp_wput()
3598 if (IN6_IS_ADDR_V4MAPPED(&connp->conn_saddr_v6)) { in udp_wput()
3609 if (connp->conn_ipv6_v6only) { in udp_wput()
3621 if (!IN6_IS_ADDR_V4MAPPED(&connp->conn_saddr_v6) && in udp_wput()
3622 !IN6_IS_ADDR_UNSPECIFIED(&connp->conn_saddr_v6)) { in udp_wput()
3641 !conn_same_as_last_v6(connp, sin6)) { in udp_wput()
3646 error = udp_output_ancillary(connp, NULL, sin6, in udp_wput()
3657 ixa = conn_get_ixa(connp, B_FALSE); in udp_wput()
3662 mutex_enter(&connp->conn_lock); in udp_wput()
3664 if (conn_same_as_last_v6(connp, sin6) && in udp_wput()
3665 connp->conn_lastsrcid == srcid && in udp_wput()
3669 error = udp_output_lastdst(connp, data_mp, cr, in udp_wput()
3674 error = udp_output_newdst(connp, data_mp, NULL, in udp_wput()
3677 ASSERT(MUTEX_NOT_HELD(&connp->conn_lock)); in udp_wput()
3704 !conn_same_as_last_v4(connp, sin)) { in udp_wput()
3709 error = udp_output_ancillary(connp, sin, NULL, in udp_wput()
3720 ixa = conn_get_ixa(connp, B_FALSE); in udp_wput()
3725 mutex_enter(&connp->conn_lock); in udp_wput()
3727 if (conn_same_as_last_v4(connp, sin) && in udp_wput()
3731 error = udp_output_lastdst(connp, data_mp, cr, in udp_wput()
3736 error = udp_output_newdst(connp, data_mp, sin, in udp_wput()
3739 ASSERT(MUTEX_NOT_HELD(&connp->conn_lock)); in udp_wput()
3769 udp_output_newdst(conn_t *connp, mblk_t *data_mp, sin_t *sin, sin6_t *sin6, in udp_output_newdst() argument
3774 udp_t *udp = connp->conn_udp; in udp_output_newdst()
3783 ASSERT(MUTEX_HELD(&connp->conn_lock)); in udp_output_newdst()
3806 mutex_exit(&connp->conn_lock); in udp_output_newdst()
3823 v6src = connp->conn_saddr_v6; in udp_output_newdst()
3851 if (!ip_srcid_find_id(srcid, &v6src, IPCL_ZONEID(connp), in udp_output_newdst()
3852 v4mapped, connp->conn_netstack)) { in udp_output_newdst()
3854 mutex_exit(&connp->conn_lock); in udp_output_newdst()
3861 if (connp->conn_xmit_ipp.ipp_fields & IPPF_ADDR) { in udp_output_newdst()
3862 ip_pkt_t *ipp = &connp->conn_xmit_ipp; in udp_output_newdst()
3873 ip_attr_nexthop(&connp->conn_xmit_ipp, ixa, &v6dst, &v6nexthop); in udp_output_newdst()
3874 mutex_exit(&connp->conn_lock); in udp_output_newdst()
3876 error = ip_attr_connect(connp, ixa, &v6src, &v6dst, &v6nexthop, dstport, in udp_output_newdst()
3918 CL_INET_UDP_CONNECT(connp, B_TRUE, &v6dst, dstport, error); in udp_output_newdst()
3925 mutex_enter(&connp->conn_lock); in udp_output_newdst()
3933 mutex_exit(&connp->conn_lock); in udp_output_newdst()
3953 if (connp->conn_mlp_type != mlptSingle) { in udp_output_newdst()
3954 mutex_exit(&connp->conn_lock); in udp_output_newdst()
3970 error = conn_update_label(connp, ixa, &v6dst, in udp_output_newdst()
3971 &connp->conn_xmit_ipp); in udp_output_newdst()
3973 mutex_exit(&connp->conn_lock); in udp_output_newdst()
3977 error = udp_build_hdr_template(connp, &v6src, &v6dst, dstport, in udp_output_newdst()
3980 mutex_exit(&connp->conn_lock); in udp_output_newdst()
3983 } else if ((connp->conn_xmit_ipp.ipp_fields & in udp_output_newdst()
3985 ipversion != connp->conn_lastipversion || in udp_output_newdst()
3986 IN6_IS_ADDR_UNSPECIFIED(&connp->conn_v6lastdst)) { in udp_output_newdst()
3988 error = udp_build_hdr_template(connp, &v6src, &v6dst, dstport, in udp_output_newdst()
3991 mutex_exit(&connp->conn_lock); in udp_output_newdst()
3997 ipha_t *ipha = (ipha_t *)connp->conn_ht_iphc; in udp_output_newdst()
4008 ip6_t *ip6h = (ip6_t *)connp->conn_ht_iphc; in udp_output_newdst()
4017 oldixa = conn_replace_ixa(connp, ixa); in udp_output_newdst()
4018 connp->conn_v6lastdst = v6dst; in udp_output_newdst()
4019 connp->conn_lastipversion = ipversion; in udp_output_newdst()
4020 connp->conn_lastdstport = dstport; in udp_output_newdst()
4021 connp->conn_lastflowinfo = flowinfo; in udp_output_newdst()
4022 connp->conn_lastscopeid = ixa->ixa_scopeid; in udp_output_newdst()
4023 connp->conn_lastsrcid = srcid; in udp_output_newdst()
4025 connp->conn_v6lastsrc = v6src; in udp_output_newdst()
4027 data_mp = udp_prepend_header_template(connp, ixa, data_mp, &v6src, in udp_output_newdst()
4031 mutex_exit(&connp->conn_lock); in udp_output_newdst()
4052 (void) ixa_check_drain_insert(connp, ixa); in udp_output_newdst()
4063 mutex_enter(&connp->conn_lock); in udp_output_newdst()
4068 if (connp->conn_mcbc_bind) in udp_output_newdst()
4069 connp->conn_saddr_v6 = ipv6_all_zeros; in udp_output_newdst()
4071 connp->conn_saddr_v6 = connp->conn_bound_addr_v6; in udp_output_newdst()
4072 connp->conn_v6lastdst = ipv6_all_zeros; in udp_output_newdst()
4073 mutex_exit(&connp->conn_lock); in udp_output_newdst()
4077 ixa->ixa_cred = connp->conn_cred; /* Restore */ in udp_output_newdst()
4078 ixa->ixa_cpid = connp->conn_cpid; in udp_output_newdst()
4084 ixa->ixa_cred = connp->conn_cred; /* Restore */ in udp_output_newdst()
4085 ixa->ixa_cpid = connp->conn_cpid; in udp_output_newdst()
4113 conn_t *connp = Q_TO_CONN(q); in udp_wput_cmdblk() local
4114 udp_t *udp = connp->conn_udp; in udp_wput_cmdblk()
4124 mutex_enter(&connp->conn_lock); in udp_wput_cmdblk()
4130 cmdp->cb_error = conn_getpeername(connp, data, in udp_wput_cmdblk()
4134 cmdp->cb_error = conn_getsockname(connp, data, &cmdp->cb_len); in udp_wput_cmdblk()
4140 mutex_exit(&connp->conn_lock); in udp_wput_cmdblk()
4148 conn_t *connp = udp->udp_connp; in udp_use_pure_tpi() local
4150 mutex_enter(&connp->conn_lock); in udp_use_pure_tpi()
4152 mutex_exit(&connp->conn_lock); in udp_use_pure_tpi()
4161 conn_t *connp = Q_TO_CONN(q); in udp_wput_other() local
4162 udp_t *udp = connp->conn_udp; in udp_wput_other()
4341 conn_t *connp = Q_TO_CONN(q); in udp_wput_iocdata() local
4342 udp_t *udp = connp->conn_udp; in udp_wput_iocdata()
4390 if (connp->conn_family == AF_INET) in udp_wput_iocdata()
4417 (void) conn_getsockname(connp, (struct sockaddr *)mp1->b_wptr, in udp_wput_iocdata()
4421 (void) conn_getpeername(connp, (struct sockaddr *)mp1->b_wptr, in udp_wput_iocdata()
4631 conn_t *connp; in udp_do_open() local
4658 connp = ipcl_conn_create(IPCL_UDPCONN, flags, ns); in udp_do_open()
4659 if (connp == NULL) { in udp_do_open()
4664 udp = connp->conn_udp; in udp_do_open()
4676 ASSERT(connp->conn_proto == IPPROTO_UDP); in udp_do_open()
4677 ASSERT(connp->conn_udp == udp); in udp_do_open()
4678 ASSERT(udp->udp_connp == connp); in udp_do_open()
4682 connp->conn_ixa->ixa_flags |= IXAF_VERIFY_SOURCE; in udp_do_open()
4684 connp->conn_family = AF_INET6; in udp_do_open()
4685 connp->conn_ipversion = IPV6_VERSION; in udp_do_open()
4686 connp->conn_ixa->ixa_flags &= ~IXAF_IS_IPV4; in udp_do_open()
4687 connp->conn_default_ttl = us->us_ipv6_hoplimit; in udp_do_open()
4690 connp->conn_family = AF_INET; in udp_do_open()
4691 connp->conn_ipversion = IPV4_VERSION; in udp_do_open()
4692 connp->conn_ixa->ixa_flags |= IXAF_IS_IPV4; in udp_do_open()
4693 connp->conn_default_ttl = us->us_ipv4_ttl; in udp_do_open()
4697 ASSERT(connp->conn_ixa->ixa_protocol == connp->conn_proto); in udp_do_open()
4698 connp->conn_xmit_ipp.ipp_unicast_hops = connp->conn_default_ttl; in udp_do_open()
4700 connp->conn_ixa->ixa_multicast_ttl = IP_DEFAULT_MULTICAST_TTL; in udp_do_open()
4701 connp->conn_ixa->ixa_flags |= IXAF_MULTICAST_LOOP | IXAF_SET_ULP_CKSUM; in udp_do_open()
4703 connp->conn_ixa->ixa_zoneid = zoneid; in udp_do_open()
4705 connp->conn_zoneid = zoneid; in udp_do_open()
4712 connp->conn_mac_mode = CONN_MAC_AWARE; in udp_do_open()
4714 connp->conn_zone_is_global = (crgetzoneid(credp) == GLOBAL_ZONEID); in udp_do_open()
4718 connp->conn_rcvbuf = us->us_recv_hiwat; in udp_do_open()
4719 connp->conn_sndbuf = us->us_xmit_hiwat; in udp_do_open()
4720 connp->conn_sndlowat = us->us_xmit_lowat; in udp_do_open()
4721 connp->conn_rcvlowat = udp_mod_info.mi_lowat; in udp_do_open()
4723 connp->conn_wroff = len + us->us_wroff_extra; in udp_do_open()
4724 connp->conn_so_type = SOCK_DGRAM; in udp_do_open()
4726 connp->conn_recv = udp_input; in udp_do_open()
4727 connp->conn_recvicmp = udp_icmp_input; in udp_do_open()
4729 connp->conn_cred = credp; in udp_do_open()
4730 connp->conn_cpid = curproc->p_pid; in udp_do_open()
4731 connp->conn_open_time = ddi_get_lbolt64(); in udp_do_open()
4733 ASSERT(!(connp->conn_ixa->ixa_free_flags & IXA_FREE_CRED)); in udp_do_open()
4734 connp->conn_ixa->ixa_cred = connp->conn_cred; in udp_do_open()
4735 connp->conn_ixa->ixa_cpid = connp->conn_cpid; in udp_do_open()
4737 connp->conn_ixa->ixa_tsl = crgetlabel(connp->conn_cred); in udp_do_open()
4742 connp->conn_ixa->ixa_flags |= IXAF_PMTU_DISCOVERY; in udp_do_open()
4744 return (connp); in udp_do_open()
4753 conn_t *connp; in udp_create() local
4767 connp = udp_do_open(credp, isv6, flags, errorp); in udp_create()
4768 if (connp == NULL) in udp_create()
4771 udp = connp->conn_udp; in udp_create()
4777 connp->conn_flags |= IPCL_NONSTR; in udp_create()
4784 (void) udp_set_rcv_hiwat(udp, connp->conn_rcvbuf); in udp_create()
4785 udp->udp_rcv_disply_hiwat = connp->conn_rcvbuf; in udp_create()
4787 connp->conn_flow_cntrld = B_FALSE; in udp_create()
4789 mutex_enter(&connp->conn_lock); in udp_create()
4790 connp->conn_state_flags &= ~CONN_INCIPIENT; in udp_create()
4791 mutex_exit(&connp->conn_lock); in udp_create()
4796 return ((sock_lower_handle_t)connp); in udp_create()
4804 conn_t *connp = (conn_t *)proto_handle; in udp_activate() local
4810 connp->conn_upcalls = sock_upcalls; in udp_activate()
4811 connp->conn_upper_handle = sock_handle; in udp_activate()
4815 sopp.sopp_wroff = connp->conn_wroff; in udp_activate()
4817 sopp.sopp_rxhiwat = connp->conn_rcvbuf; in udp_activate()
4818 sopp.sopp_rxlowat = connp->conn_rcvlowat; in udp_activate()
4821 (connp->conn_family == AF_INET) ? UDP_MAXPACKET_IPV4 : in udp_activate()
4826 (*connp->conn_upcalls->su_set_proto_props)(connp->conn_upper_handle, in udp_activate()
4831 udp_do_close(conn_t *connp) in udp_do_close() argument
4835 ASSERT(connp != NULL && IPCL_IS_UDP(connp)); in udp_do_close()
4836 udp = connp->conn_udp; in udp_do_close()
4842 if (connp->conn_ipversion == IPV4_VERSION) { in udp_do_close()
4844 connp->conn_netstack->netstack_stackid, in udp_do_close()
4846 (uint8_t *)(&V4_PART_OF_V6(connp->conn_laddr_v6)), in udp_do_close()
4847 (in_port_t)connp->conn_lport, NULL); in udp_do_close()
4850 connp->conn_netstack->netstack_stackid, in udp_do_close()
4852 (uint8_t *)&(connp->conn_laddr_v6), in udp_do_close()
4853 (in_port_t)connp->conn_lport, NULL); in udp_do_close()
4858 udp_reuselist_remove(connp); in udp_do_close()
4860 ip_quiesce_conn(connp); in udp_do_close()
4862 if (!IPCL_IS_NONSTR(connp)) { in udp_do_close()
4863 ASSERT(connp->conn_wq != NULL); in udp_do_close()
4864 ASSERT(connp->conn_rq != NULL); in udp_do_close()
4865 qprocsoff(connp->conn_rq); in udp_do_close()
4868 udp_close_free(connp); in udp_do_close()
4880 ASSERT(connp->conn_ref == 1); in udp_do_close()
4882 if (!IPCL_IS_NONSTR(connp)) { in udp_do_close()
4883 inet_minor_free(connp->conn_minor_arena, connp->conn_dev); in udp_do_close()
4885 ip_free_helper_stream(connp); in udp_do_close()
4888 connp->conn_ref--; in udp_do_close()
4889 ipcl_conn_destroy(connp); in udp_do_close()
4896 conn_t *connp = (conn_t *)proto_handle; in udp_close() local
4901 udp_do_close(connp); in udp_close()
4906 udp_do_bind(conn_t *connp, struct sockaddr *sa, socklen_t len, cred_t *cr, in udp_do_bind() argument
4911 udp_t *udp = connp->conn_udp; in udp_do_bind()
4923 zoneid_t zoneid = IPCL_ZONEID(connp); in udp_do_bind()
4924 ip_stack_t *ipst = connp->conn_netstack->netstack_ip; in udp_do_bind()
4937 if (connp->conn_family != AF_INET || in udp_do_bind()
4956 if (connp->conn_family != AF_INET6 || in udp_do_bind()
4962 if (connp->conn_ipv6_v6only) in udp_do_bind()
5004 if (connp->conn_anon_priv_bind) { in udp_do_bind()
5045 mutex_enter(&connp->conn_lock); in udp_do_bind()
5047 if (!connp->conn_reuseport) { in udp_do_bind()
5059 mutex_exit(&connp->conn_lock); in udp_do_bind()
5075 if (connp->conn_family == AF_INET) { in udp_do_bind()
5077 ASSERT(connp->conn_ixa->ixa_flags & IXAF_IS_IPV4); in udp_do_bind()
5084 connp->conn_ipversion = IPV4_VERSION; in udp_do_bind()
5085 connp->conn_ixa->ixa_flags |= IXAF_IS_IPV4; in udp_do_bind()
5087 connp->conn_ipversion = IPV6_VERSION; in udp_do_bind()
5088 connp->conn_ixa->ixa_flags &= ~IXAF_IS_IPV4; in udp_do_bind()
5115 if (connp->conn_anon_priv_bind) { in udp_do_bind()
5154 if (!IPCL_BIND_ZONE_MATCH(connp1, connp)) in udp_do_bind()
5176 if (connp1->conn_exclbind || connp->conn_exclbind || in udp_do_bind()
5177 IPCL_CONNS_MAC(udp1->udp_connp, connp)) { in udp_do_bind()
5194 if (connp->conn_ipversion != connp1->conn_ipversion) { in udp_do_bind()
5233 if (connp->conn_reuseport && connp1->conn_reuseport) { in udp_do_bind()
5235 cred_t *ncred = connp->conn_cred; in udp_do_bind()
5249 (connp->conn_reuseaddr && requested_port != 0)) { in udp_do_bind()
5262 if (connp->conn_reuseport) { in udp_do_bind()
5282 if (udp_reuselist_add(reusep, connp, B_TRUE) in udp_do_bind()
5296 mutex_exit(&connp->conn_lock); in udp_do_bind()
5299 connp->conn_reuselist = reusep; in udp_do_bind()
5309 if (connp->conn_reuseport) { in udp_do_bind()
5311 mutex_exit(&connp->conn_lock); in udp_do_bind()
5328 mutex_exit(&connp->conn_lock); in udp_do_bind()
5332 if (connp->conn_anon_priv_bind) { in udp_do_bind()
5357 mutex_exit(&connp->conn_lock); in udp_do_bind()
5370 connp->conn_bound_addr_v6 = v6src; in udp_do_bind()
5371 connp->conn_laddr_v6 = v6src; in udp_do_bind()
5373 connp->conn_ixa->ixa_flags |= IXAF_SCOPEID_SET; in udp_do_bind()
5374 connp->conn_ixa->ixa_scopeid = scopeid; in udp_do_bind()
5375 connp->conn_incoming_ifindex = scopeid; in udp_do_bind()
5377 connp->conn_ixa->ixa_flags &= ~IXAF_SCOPEID_SET; in udp_do_bind()
5378 connp->conn_incoming_ifindex = connp->conn_bound_if; in udp_do_bind()
5384 connp->conn_saddr_v6 = v6src; in udp_do_bind()
5385 connp->conn_mcbc_bind = B_FALSE; in udp_do_bind()
5390 connp->conn_saddr_v6 = ipv6_all_zeros; in udp_do_bind()
5391 connp->conn_mcbc_bind = B_TRUE; in udp_do_bind()
5396 connp->conn_lport = lport; in udp_do_bind()
5402 if ((requested_port == 0) && (!connp->conn_anon_priv_bind)) { in udp_do_bind()
5407 if (connp->conn_family == AF_INET) { in udp_do_bind()
5408 sin->sin_port = connp->conn_lport; in udp_do_bind()
5410 sin6->sin6_port = connp->conn_lport; in udp_do_bind()
5415 mutex_exit(&connp->conn_lock); in udp_do_bind()
5421 if (connp->conn_ipversion == IPV4_VERSION) { in udp_do_bind()
5422 (*cl_inet_bind)(connp->conn_netstack->netstack_stackid, in udp_do_bind()
5424 (in_port_t)connp->conn_lport, NULL); in udp_do_bind()
5426 (*cl_inet_bind)(connp->conn_netstack->netstack_stackid, in udp_do_bind()
5428 (in_port_t)connp->conn_lport, NULL); in udp_do_bind()
5432 mutex_enter(&connp->conn_lock); in udp_do_bind()
5433 connp->conn_anon_port = (is_system_labeled() && requested_port == 0); in udp_do_bind()
5434 if (is_system_labeled() && (!connp->conn_anon_port || in udp_do_bind()
5435 connp->conn_anon_mlp)) { in udp_do_bind()
5440 connp->conn_mlp_type = in udp_do_bind()
5441 connp->conn_recv_ancillary.crb_recvucred ? mlptBoth : in udp_do_bind()
5444 connp->conn_allzones ? ALL_ZONES : zone->zone_id, in udp_do_bind()
5448 mutex_exit(&connp->conn_lock); in udp_do_bind()
5451 mlpport = connp->conn_anon_port ? PMAPPORT : port; in udp_do_bind()
5460 connp->conn_mlp_type == mlptSingle) { in udp_do_bind()
5462 mutex_exit(&connp->conn_lock); in udp_do_bind()
5472 if (connp->conn_debug) { in udp_do_bind()
5479 mutex_exit(&connp->conn_lock); in udp_do_bind()
5497 if (connp->conn_zoneid != mlpzone) { in udp_do_bind()
5498 if (connp->conn_debug) { in udp_do_bind()
5504 mlpport, connp->conn_zoneid, in udp_do_bind()
5508 mutex_exit(&connp->conn_lock); in udp_do_bind()
5512 if (connp->conn_anon_port) { in udp_do_bind()
5513 error = tsol_mlp_anon(zone, mlptype, connp->conn_proto, in udp_do_bind()
5516 if (connp->conn_debug) { in udp_do_bind()
5523 mutex_exit(&connp->conn_lock); in udp_do_bind()
5527 connp->conn_mlp_type = mlptype; in udp_do_bind()
5537 error = udp_build_hdr_template(connp, &connp->conn_saddr_v6, in udp_do_bind()
5538 &connp->conn_faddr_v6, connp->conn_fport, connp->conn_flowinfo); in udp_do_bind()
5540 mutex_exit(&connp->conn_lock); in udp_do_bind()
5544 connp->conn_faddr_v6 = ipv6_all_zeros; in udp_do_bind()
5545 connp->conn_fport = 0; in udp_do_bind()
5546 connp->conn_v6lastdst = ipv6_all_zeros; in udp_do_bind()
5547 mutex_exit(&connp->conn_lock); in udp_do_bind()
5549 error = ip_laddr_fanout_insert(connp); in udp_do_bind()
5558 mutex_enter(&connp->conn_lock); in udp_do_bind()
5560 UDP_BIND_HASH(connp->conn_lport, in udp_do_bind()
5563 connp->conn_saddr_v6 = ipv6_all_zeros; in udp_do_bind()
5564 connp->conn_bound_addr_v6 = ipv6_all_zeros; in udp_do_bind()
5565 connp->conn_laddr_v6 = ipv6_all_zeros; in udp_do_bind()
5567 connp->conn_ixa->ixa_flags &= ~IXAF_SCOPEID_SET; in udp_do_bind()
5568 connp->conn_incoming_ifindex = connp->conn_bound_if; in udp_do_bind()
5572 udp_reuselist_remove(connp); in udp_do_bind()
5573 connp->conn_lport = 0; in udp_do_bind()
5575 connp->conn_anon_port = B_FALSE; in udp_do_bind()
5576 connp->conn_mlp_type = mlptSingle; in udp_do_bind()
5578 connp->conn_v6lastdst = ipv6_all_zeros; in udp_do_bind()
5581 (void) udp_build_hdr_template(connp, &connp->conn_saddr_v6, in udp_do_bind()
5582 &connp->conn_faddr_v6, connp->conn_fport, connp->conn_flowinfo); in udp_do_bind()
5583 mutex_exit(&connp->conn_lock); in udp_do_bind()
5592 conn_t *connp; in udp_bind() local
5597 connp = (conn_t *)proto_handle; in udp_bind()
5600 error = udp_do_unbind(connp); in udp_bind()
5602 error = udp_do_bind(connp, sa, len, cr, B_TRUE); in udp_bind()
5615 udp_implicit_bind(conn_t *connp, cred_t *cr) in udp_implicit_bind() argument
5626 if (connp->conn_family == AF_INET) { in udp_implicit_bind()
5633 ASSERT(connp->conn_family == AF_INET6); in udp_implicit_bind()
5641 error = udp_do_bind(connp, (struct sockaddr *)&sin6addr, len, in udp_implicit_bind()
5651 udp_do_unbind(conn_t *connp) in udp_do_unbind() argument
5653 udp_t *udp = connp->conn_udp; in udp_do_unbind()
5661 if (connp->conn_ipversion == IPV4_VERSION) { in udp_do_unbind()
5663 connp->conn_netstack->netstack_stackid, in udp_do_unbind()
5665 (uint8_t *)(&V4_PART_OF_V6(connp->conn_laddr_v6)), in udp_do_unbind()
5666 (in_port_t)connp->conn_lport, NULL); in udp_do_unbind()
5669 connp->conn_netstack->netstack_stackid, in udp_do_unbind()
5671 (uint8_t *)&(connp->conn_laddr_v6), in udp_do_unbind()
5672 (in_port_t)connp->conn_lport, NULL); in udp_do_unbind()
5676 mutex_enter(&connp->conn_lock); in udp_do_unbind()
5679 mutex_exit(&connp->conn_lock); in udp_do_unbind()
5682 udpf = &us->us_bind_fanout[UDP_BIND_HASH(connp->conn_lport, in udp_do_unbind()
5686 udp_reuselist_remove(connp); in udp_do_unbind()
5687 connp->conn_saddr_v6 = ipv6_all_zeros; in udp_do_unbind()
5688 connp->conn_bound_addr_v6 = ipv6_all_zeros; in udp_do_unbind()
5689 connp->conn_laddr_v6 = ipv6_all_zeros; in udp_do_unbind()
5690 connp->conn_mcbc_bind = B_FALSE; in udp_do_unbind()
5691 connp->conn_lport = 0; in udp_do_unbind()
5693 connp->conn_faddr_v6 = ipv6_all_zeros; in udp_do_unbind()
5694 connp->conn_fport = 0; in udp_do_unbind()
5697 connp->conn_v6lastdst = ipv6_all_zeros; in udp_do_unbind()
5700 (void) udp_build_hdr_template(connp, &connp->conn_saddr_v6, in udp_do_unbind()
5701 &connp->conn_faddr_v6, connp->conn_fport, connp->conn_flowinfo); in udp_do_unbind()
5702 mutex_exit(&connp->conn_lock); in udp_do_unbind()
5704 ip_unbind(connp); in udp_do_unbind()
5713 udp_do_connect(conn_t *connp, const struct sockaddr *sa, socklen_t len, in udp_do_connect() argument
5732 in6_addr_t v6src = connp->conn_saddr_v6; in udp_do_connect()
5735 udp = connp->conn_udp; in udp_do_connect()
5753 ASSERT(connp->conn_ipversion == IPV4_VERSION); in udp_do_connect()
5764 if (!ip_srcid_find_id(srcid, &v6src, IPCL_ZONEID(connp), in udp_do_connect()
5765 v4mapped, connp->conn_netstack)) { in udp_do_connect()
5771 if (connp->conn_ipv6_v6only) in udp_do_connect()
5780 &connp->conn_bound_addr_v6) && in udp_do_connect()
5781 !IN6_IS_ADDR_V4MAPPED(&connp->conn_bound_addr_v6)) { in udp_do_connect()
5808 ixa = conn_get_ixa(connp, B_FALSE); in udp_do_connect()
5812 mutex_enter(&connp->conn_lock); in udp_do_connect()
5819 mutex_exit(&connp->conn_lock); in udp_do_connect()
5825 ASSERT(connp->conn_lport != 0 && udp->udp_ptpbhn != NULL); in udp_do_connect()
5827 udpf = &us->us_bind_fanout[UDP_BIND_HASH(connp->conn_lport, in udp_do_connect()
5833 if (connp->conn_mcbc_bind) in udp_do_connect()
5834 connp->conn_saddr_v6 = ipv6_all_zeros; in udp_do_connect()
5836 connp->conn_saddr_v6 = connp->conn_bound_addr_v6; in udp_do_connect()
5837 connp->conn_laddr_v6 = connp->conn_bound_addr_v6; in udp_do_connect()
5838 connp->conn_faddr_v6 = ipv6_all_zeros; in udp_do_connect()
5839 connp->conn_fport = 0; in udp_do_connect()
5843 connp->conn_fport = dstport; in udp_do_connect()
5844 connp->conn_ipversion = ipversion; in udp_do_connect()
5854 if (connp->conn_family == AF_INET) { in udp_do_connect()
5860 connp->conn_faddr_v6 = v6dst; in udp_do_connect()
5861 connp->conn_flowinfo = 0; in udp_do_connect()
5863 ASSERT(connp->conn_ipversion == IPV6_VERSION); in udp_do_connect()
5873 connp->conn_faddr_v6 = v6dst; in udp_do_connect()
5874 connp->conn_flowinfo = flowinfo; in udp_do_connect()
5881 if (connp->conn_cred != cr) { in udp_do_connect()
5883 crfree(connp->conn_cred); in udp_do_connect()
5884 connp->conn_cred = cr; in udp_do_connect()
5886 connp->conn_cpid = pid; in udp_do_connect()
5898 connp->conn_incoming_ifindex = scopeid; in udp_do_connect()
5901 connp->conn_incoming_ifindex = connp->conn_bound_if; in udp_do_connect()
5909 connp->conn_v6lastdst = ipv6_all_zeros; in udp_do_connect()
5912 error = conn_connect(connp, NULL, IPDF_ALLOW_MCBC); in udp_do_connect()
5913 mutex_exit(&connp->conn_lock); in udp_do_connect()
5921 error = ipcl_conn_insert(connp); in udp_do_connect()
5925 mutex_enter(&connp->conn_lock); in udp_do_connect()
5926 error = udp_build_hdr_template(connp, &connp->conn_saddr_v6, in udp_do_connect()
5927 &connp->conn_faddr_v6, connp->conn_fport, connp->conn_flowinfo); in udp_do_connect()
5929 mutex_exit(&connp->conn_lock); in udp_do_connect()
5935 connp->conn_v6lastdst = connp->conn_faddr_v6; in udp_do_connect()
5936 connp->conn_lastipversion = connp->conn_ipversion; in udp_do_connect()
5937 connp->conn_lastdstport = connp->conn_fport; in udp_do_connect()
5938 connp->conn_lastflowinfo = connp->conn_flowinfo; in udp_do_connect()
5939 connp->conn_lastscopeid = scopeid; in udp_do_connect()
5940 connp->conn_lastsrcid = srcid; in udp_do_connect()
5942 connp->conn_v6lastsrc = v6src; in udp_do_connect()
5944 oldixa = conn_replace_ixa(connp, ixa); in udp_do_connect()
5945 mutex_exit(&connp->conn_lock); in udp_do_connect()
5962 if (connp->conn_lport != connp1->conn_lport || in udp_do_connect()
5963 connp->conn_ipversion != connp1->conn_ipversion || in udp_do_connect()
5965 !IN6_ARE_ADDR_EQUAL(&connp->conn_laddr_v6, in udp_do_connect()
5968 !(IPCL_ZONE_MATCH(connp, connp1->conn_zoneid) || in udp_do_connect()
5969 IPCL_ZONE_MATCH(connp1, connp->conn_zoneid))) in udp_do_connect()
5976 CL_INET_UDP_CONNECT(connp, B_TRUE, &v6dst, dstport, error); in udp_do_connect()
5991 mutex_enter(&connp->conn_lock); in udp_do_connect()
5994 connp->conn_faddr_v6 = ipv6_all_zeros; in udp_do_connect()
5995 connp->conn_fport = 0; in udp_do_connect()
5997 if (connp->conn_mcbc_bind) in udp_do_connect()
5998 connp->conn_saddr_v6 = ipv6_all_zeros; in udp_do_connect()
6000 connp->conn_saddr_v6 = connp->conn_bound_addr_v6; in udp_do_connect()
6001 connp->conn_laddr_v6 = connp->conn_bound_addr_v6; in udp_do_connect()
6004 connp->conn_v6lastdst = ipv6_all_zeros; in udp_do_connect()
6005 connp->conn_flowinfo = 0; in udp_do_connect()
6007 (void) udp_build_hdr_template(connp, &connp->conn_saddr_v6, in udp_do_connect()
6008 &connp->conn_faddr_v6, connp->conn_fport, connp->conn_flowinfo); in udp_do_connect()
6009 mutex_exit(&connp->conn_lock); in udp_do_connect()
6017 conn_t *connp = (conn_t *)proto_handle; in udp_connect() local
6018 udp_t *udp = connp->conn_udp; in udp_connect()
6034 error = udp_disconnect(connp); in udp_connect()
6038 error = proto_verify_ip_addr(connp->conn_family, sa, len); in udp_connect()
6044 error = udp_implicit_bind(connp, cr); in udp_connect()
6057 connp->conn_dgram_errind = B_TRUE; in udp_connect()
6059 error = udp_do_connect(connp, sa, len, cr, pid); in udp_connect()
6064 unbind_err = udp_do_unbind(connp); in udp_connect()
6070 (*connp->conn_upcalls->su_connected) in udp_connect()
6071 (connp->conn_upper_handle, 0, NULL, -1); in udp_connect()
6095 conn_t *connp = (conn_t *)proto_handle; in udp_send() local
6096 udp_t *udp = connp->conn_udp; in udp_send()
6110 error = udp_implicit_bind(connp, cr); in udp_send()
6129 error = udp_output_ancillary(connp, NULL, NULL, mp, in udp_send()
6132 error = udp_output_connected(connp, mp, cr, pid); in udp_send()
6143 error = proto_verify_ip_addr(connp->conn_family, in udp_send()
6149 switch (connp->conn_family) { in udp_send()
6168 if (IN6_IS_ADDR_V4MAPPED(&connp->conn_saddr_v6)) { in udp_send()
6176 if (connp->conn_ipv6_v6only) { in udp_send()
6188 if (!IN6_IS_ADDR_V4MAPPED(&connp->conn_saddr_v6) && in udp_send()
6189 !IN6_IS_ADDR_UNSPECIFIED(&connp->conn_saddr_v6)) { in udp_send()
6208 ixa = conn_get_ixa(connp, B_FALSE); in udp_send()
6216 mutex_enter(&connp->conn_lock); in udp_send()
6229 mutex_exit(&connp->conn_lock); in udp_send()
6238 mutex_exit(&connp->conn_lock); in udp_send()
6240 error = udp_output_ancillary(connp, NULL, sin6, mp, in udp_send()
6242 } else if (conn_same_as_last_v6(connp, sin6) && in udp_send()
6243 connp->conn_lastsrcid == srcid && in udp_send()
6246 error = udp_output_lastdst(connp, mp, cr, pid, ixa); in udp_send()
6249 error = udp_output_newdst(connp, mp, NULL, sin6, in udp_send()
6252 ASSERT(MUTEX_NOT_HELD(&connp->conn_lock)); in udp_send()
6271 ixa = conn_get_ixa(connp, B_FALSE); in udp_send()
6279 mutex_enter(&connp->conn_lock); in udp_send()
6290 mutex_exit(&connp->conn_lock); in udp_send()
6298 mutex_exit(&connp->conn_lock); in udp_send()
6300 error = udp_output_ancillary(connp, sin, NULL, mp, in udp_send()
6302 } else if (conn_same_as_last_v4(connp, sin) && in udp_send()
6305 error = udp_output_lastdst(connp, mp, cr, pid, ixa); in udp_send()
6308 error = udp_output_newdst(connp, mp, sin, NULL, in udp_send()
6311 ASSERT(MUTEX_NOT_HELD(&connp->conn_lock)); in udp_send()
6326 conn_t *connp = (conn_t *)proto_handle; in udp_fallback() local
6336 udp = connp->conn_udp; in udp_fallback()
6343 connp->conn_dev = (dev_t)RD(q)->q_ptr; in udp_fallback()
6344 connp->conn_minor_arena = WR(q)->q_ptr; in udp_fallback()
6346 RD(q)->q_ptr = WR(q)->q_ptr = connp; in udp_fallback()
6350 connp->conn_rq = RD(q); in udp_fallback()
6351 connp->conn_wq = WR(q); in udp_fallback()
6358 stropt->so_wroff = connp->conn_wroff; in udp_fallback()
6365 ip_free_helper_stream(connp); in udp_fallback()
6376 (void) udp_getsockname((sock_lower_handle_t)connp, in udp_fallback()
6378 error = udp_getpeername((sock_lower_handle_t)connp, in udp_fallback()
6384 if (connp->conn_dgram_errind) in udp_fallback()
6386 if (connp->conn_ixa->ixa_flags & IXAF_DONTROUTE) in udp_fallback()
6389 mp = (*quiesced_cb)(connp->conn_upper_handle, arg, &tca, in udp_fallback()
6415 mutex_enter(&connp->conn_lock); in udp_fallback()
6416 connp->conn_flags &= ~IPCL_NONSTR; in udp_fallback()
6417 mutex_exit(&connp->conn_lock); in udp_fallback()
6421 ASSERT(connp->conn_ref >= 1); in udp_fallback()
6431 conn_t *connp = (conn_t *)proto_handle; in udp_getpeername() local
6432 udp_t *udp = connp->conn_udp; in udp_getpeername()
6438 mutex_enter(&connp->conn_lock); in udp_getpeername()
6442 error = conn_getpeername(connp, sa, salenp); in udp_getpeername()
6443 mutex_exit(&connp->conn_lock); in udp_getpeername()
6452 conn_t *connp = (conn_t *)proto_handle; in udp_getsockname() local
6458 mutex_enter(&connp->conn_lock); in udp_getsockname()
6459 error = conn_getsockname(connp, sa, salenp); in udp_getsockname()
6460 mutex_exit(&connp->conn_lock); in udp_getsockname()
6468 conn_t *connp = (conn_t *)proto_handle; in udp_getsockopt() local
6488 len = udp_opt_get(connp, level, option_name, optvalp_buf); in udp_getsockopt()
6510 conn_t *connp = (conn_t *)proto_handle; in udp_setsockopt() local
6527 error = udp_opt_set(connp, SETFN_OPTCOM_NEGOTIATE, level, option_name, in udp_setsockopt()
6539 conn_t *connp = (conn_t *)proto_handle; in udp_clr_flowctrl() local
6540 udp_t *udp = connp->conn_udp; in udp_clr_flowctrl()
6543 connp->conn_flow_cntrld = B_FALSE; in udp_clr_flowctrl()
6551 conn_t *connp = (conn_t *)proto_handle; in udp_shutdown() local
6558 (*connp->conn_upcalls->su_opctl)(connp->conn_upper_handle, in udp_shutdown()
6562 (*connp->conn_upcalls->su_opctl)(connp->conn_upper_handle, in udp_shutdown()
6571 conn_t *connp = (conn_t *)proto_handle; in udp_ioctl() local
6582 if (connp->conn_helper_info == NULL) { in udp_ioctl()
6583 udp_stack_t *us = connp->conn_udp->udp_us; in udp_ioctl()
6590 error = ip_create_helper_stream(connp, us->us_ldi_ident); in udp_ioctl()
6610 error = ldi_ioctl(connp->conn_helper_info->iphs_handle, in udp_ioctl()