Lines Matching defs: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)
373 reusep->ru_conns[reusep->ru_entries++] = connp;
379 udp_reuselist_remove(conn_t *connp)
382 struct reuselist *reusep = connp->conn_reuselist;
387 ASSERT(MUTEX_HELD(&connp->conn_lock));
392 if (reusep->ru_conns[i] == connp)
403 connp->conn_reuselist = NULL;
462 conn_t *connp = udp->udp_connp;
471 ASSERT(connp->conn_lport != 0);
473 lockp = &us->us_bind_fanout[UDP_BIND_HASH(connp->conn_lport,
495 conn_t *connp = udp->udp_connp;
515 if (V6_OR_V4_INADDR_ANY(connp->conn_bound_addr_v6) &&
553 conn_t *connp;
573 connp = Q_TO_CONN(q);
574 udp = connp->conn_udp;
607 if (connp->conn_family == AF_INET) {
615 ASSERT(connp->conn_family == AF_INET6);
632 if (connp->conn_family != AF_INET ||
646 if (connp->conn_family != AF_INET6 ||
660 error = udp_do_bind(connp, sa, tbr->ADDR_length, cr,
687 conn_t *connp = Q_TO_CONN(q);
744 error = proto_verify_ip_addr(connp->conn_family, sa, len);
750 error = udp_do_connect(connp, sa, len, cr, pid);
762 if (connp->conn_family == AF_INET) {
784 putnext(connp->conn_rq, mp);
785 putnext(connp->conn_rq, mp1);
792 conn_t *connp;
804 connp = Q_TO_CONN(q);
805 udp_do_close(connp);
812 udp_close_free(conn_t *connp)
814 udp_t *udp = connp->conn_udp;
826 ASSERT(udp->udp_connp == connp);
828 udp->udp_connp = connp;
832 udp_do_disconnect(conn_t *connp)
839 udp = connp->conn_udp;
841 mutex_enter(&connp->conn_lock);
843 mutex_exit(&connp->conn_lock);
846 udpf = &us->us_bind_fanout[UDP_BIND_HASH(connp->conn_lport,
849 if (connp->conn_mcbc_bind)
850 connp->conn_saddr_v6 = ipv6_all_zeros;
852 connp->conn_saddr_v6 = connp->conn_bound_addr_v6;
853 connp->conn_laddr_v6 = connp->conn_bound_addr_v6;
854 connp->conn_faddr_v6 = ipv6_all_zeros;
855 connp->conn_fport = 0;
860 if (connp->conn_family == AF_INET6)
861 connp->conn_ipversion = IPV6_VERSION;
863 connp->conn_v6lastdst = ipv6_all_zeros;
864 error = udp_build_hdr_template(connp, &connp->conn_saddr_v6,
865 &connp->conn_faddr_v6, connp->conn_fport, connp->conn_flowinfo);
866 mutex_exit(&connp->conn_lock);
874 return (ip_laddr_fanout_insert(connp));
880 conn_t *connp = Q_TO_CONN(q);
894 error = udp_do_disconnect(connp);
910 udp_disconnect(conn_t *connp)
914 connp->conn_dgram_errind = B_FALSE;
915 error = udp_do_disconnect(connp);
959 conn_t *connp = (conn_t *)arg1;
968 udp_t *udp = connp->conn_udp;
976 udp_icmp_error_ipv6(connp, mp, ira);
1001 if (connp->conn_ipversion != IPV4_VERSION)
1004 ixa = conn_get_ixa(connp, B_FALSE);
1016 mutex_enter(&connp->conn_lock);
1017 ipha = (ipha_t *)connp->conn_ht_iphc;
1025 mutex_exit(&connp->conn_lock);
1051 if (!connp->conn_dgram_errind) {
1056 switch (connp->conn_family) {
1062 if (IPCL_IS_NONSTR(connp)) {
1063 mutex_enter(&connp->conn_lock);
1065 if (sin.sin_port == connp->conn_fport &&
1067 connp->conn_faddr_v4) {
1068 mutex_exit(&connp->conn_lock);
1069 (*connp->conn_upcalls->su_set_error)
1070 (connp->conn_upper_handle, error);
1077 mutex_exit(&connp->conn_lock);
1082 putnext(connp->conn_rq, mp1);
1090 if (IPCL_IS_NONSTR(connp)) {
1091 mutex_enter(&connp->conn_lock);
1093 if (sin6.sin6_port == connp->conn_fport &&
1095 &connp->conn_faddr_v6)) {
1096 mutex_exit(&connp->conn_lock);
1097 (*connp->conn_upcalls->su_set_error)
1098 (connp->conn_upper_handle, error);
1105 mutex_exit(&connp->conn_lock);
1110 putnext(connp->conn_rq, mp1);
1125 udp_icmp_error_ipv6(conn_t *connp, mblk_t *mp, ip_recv_attr_t *ira)
1135 udp_t *udp = connp->conn_udp;
1189 if (!connp->conn_ipv6_recvpathmtu)
1215 sin6->sin6_addr = connp->conn_faddr_v6;
1233 udp_ulp_recv(connp, newmp, msgdsize(newmp), ira);
1258 if (!connp->conn_dgram_errind) {
1269 if (IPCL_IS_NONSTR(connp)) {
1270 mutex_enter(&connp->conn_lock);
1272 if (sin6.sin6_port == connp->conn_fport &&
1274 &connp->conn_faddr_v6)) {
1275 mutex_exit(&connp->conn_lock);
1276 (*connp->conn_upcalls->su_set_error)
1277 (connp->conn_upper_handle, error);
1284 mutex_exit(&connp->conn_lock);
1289 putnext(connp->conn_rq, mp1);
1309 conn_t *connp = udp->udp_connp;
1327 if (connp->conn_family == AF_INET)
1332 mutex_enter(&connp->conn_lock);
1344 (void) conn_getsockname(connp, sa, &addrlen);
1355 (void) conn_getpeername(connp, sa, &addrlen);
1358 mutex_exit(&connp->conn_lock);
1366 conn_t *connp = udp->udp_connp;
1368 if (connp->conn_family == AF_INET) {
1457 conn_t *connp;
1495 connp = udp_do_open(credp, isv6, KM_SLEEP, &err);
1496 if (connp == NULL) {
1500 udp = connp->conn_udp;
1503 connp->conn_dev = conn_dev;
1504 connp->conn_minor_arena = minor_arena;
1509 q->q_ptr = connp;
1510 WR(q)->q_ptr = connp;
1511 connp->conn_rq = q;
1512 connp->conn_wq = WR(q);
1518 ASSERT(connp->conn_proto == IPPROTO_UDP);
1519 ASSERT(connp->conn_udp == udp);
1520 ASSERT(udp->udp_connp == connp);
1526 WR(q)->q_hiwat = connp->conn_sndbuf;
1527 WR(q)->q_lowat = connp->conn_sndlowat;
1532 (void) proto_set_tx_wroff(q, connp, connp->conn_wroff);
1533 (void) proto_set_rx_hiwat(q, connp,
1534 udp_set_rcv_hiwat(udp, connp->conn_rcvbuf));
1536 mutex_enter(&connp->conn_lock);
1537 connp->conn_state_flags &= ~CONN_INCIPIENT;
1538 mutex_exit(&connp->conn_lock);
1596 udp_opt_get(conn_t *connp, t_scalar_t level, t_scalar_t name,
1600 udp_t *udp = connp->conn_udp;
1605 coas.coa_connp = connp;
1606 coas.coa_ixa = connp->conn_ixa;
1607 coas.coa_ipp = &connp->conn_xmit_ipp;
1622 if (connp->conn_family != AF_INET)
1628 mutex_enter(&connp->conn_lock);
1631 mutex_exit(&connp->conn_lock);
1638 mutex_exit(&connp->conn_lock);
1645 mutex_enter(&connp->conn_lock);
1647 mutex_exit(&connp->conn_lock);
1650 mutex_enter(&connp->conn_lock);
1652 mutex_exit(&connp->conn_lock);
1656 mutex_enter(&connp->conn_lock);
1658 mutex_exit(&connp->conn_lock);
1669 conn_t *connp = Q_TO_CONN(q);
1672 err = udp_opt_get(connp, level, name, ptr);
1683 conn_t *connp = coa->coa_connp;
1685 udp_t *udp = connp->conn_udp;
1721 if (connp->conn_mlp_type == mlptSingle)
1771 if (connp->conn_family != AF_INET) {
1776 mutex_enter(&connp->conn_lock);
1778 mutex_exit(&connp->conn_lock);
1785 mutex_enter(&connp->conn_lock);
1787 mutex_exit(&connp->conn_lock);
1801 udp_opt_set(conn_t *connp, uint_t optset_context, int level,
1805 udp_t *udp = connp->conn_udp;
1859 ASSERT(coa->coa_connp == connp);
1865 coas.coa_connp = connp;
1867 coas.coa_ixa = conn_get_ixa(connp, B_TRUE);
1872 coas.coa_ipp = &connp->conn_xmit_ipp;
1916 mutex_enter(&connp->conn_lock);
1918 if (connp->conn_dhcpinit_ill != NULL) {
1924 ill_t *oill = connp->conn_dhcpinit_ill;
1928 ill_set_inputfn(connp->conn_dhcpinit_ill);
1929 connp->conn_dhcpinit_ill = NULL;
1933 connp->conn_dhcpinit_ill = ill;
1936 mutex_exit(&connp->conn_lock);
1940 mutex_exit(&connp->conn_lock);
1975 mutex_enter(&connp->conn_lock);
1976 connp->conn_v6lastdst = ipv6_all_zeros;
1979 &connp->conn_faddr_v6, &nexthop);
1980 saddr = connp->conn_saddr_v6;
1981 faddr = connp->conn_faddr_v6;
1982 fport = connp->conn_fport;
1983 mutex_exit(&connp->conn_lock);
1987 (void) ip_attr_connect(connp, coa->coa_ixa,
2001 mutex_enter(&connp->conn_lock);
2002 if (!IN6_IS_ADDR_UNSPECIFIED(&connp->conn_faddr_v6) &&
2003 !IN6_IS_ADDR_V4MAPPED_ANY(&connp->conn_faddr_v6)) {
2004 err = udp_build_hdr_template(connp,
2005 &connp->conn_saddr_v6, &connp->conn_faddr_v6,
2006 connp->conn_fport, connp->conn_flowinfo);
2008 mutex_exit(&connp->conn_lock);
2012 connp->conn_v6lastdst = ipv6_all_zeros;
2014 mutex_exit(&connp->conn_lock);
2017 (void) proto_set_rx_hiwat(connp->conn_rq, connp,
2018 connp->conn_rcvbuf);
2020 if ((coa->coa_changed & COA_SNDBUF_CHANGED) && !IPCL_IS_NONSTR(connp)) {
2021 connp->conn_wq->q_hiwat = connp->conn_sndbuf;
2027 mutex_enter(&connp->conn_lock);
2028 wroff = connp->conn_ht_iphc_allocated + us->us_wroff_extra;
2031 if (wroff > connp->conn_wroff) {
2032 connp->conn_wroff = wroff;
2033 mutex_exit(&connp->conn_lock);
2034 (void) proto_set_tx_wroff(connp->conn_rq, connp, wroff);
2036 mutex_exit(&connp->conn_lock);
2048 conn_t *connp = Q_TO_CONN(q);
2051 error = udp_opt_set(connp, optset_context, level, name, inlen, invalp,
2061 udp_prepend_hdr(conn_t *connp, ip_xmit_attr_t *ixa, const ip_pkt_t *ipp,
2067 udp_stack_t *us = connp->conn_netstack->netstack_udp;
2070 udp_t *udp = connp->conn_udp;
2090 udpha->uha_src_port = connp->conn_lport;
2143 udp_build_hdr_template(conn_t *connp, const in6_addr_t *v6src,
2149 ASSERT(MUTEX_HELD(&connp->conn_lock));
2154 connp->conn_v6lastdst = ipv6_all_zeros;
2156 error = conn_build_hdr_template(connp, UDPH_SIZE, 0, v6src, v6dst,
2165 udpha = (udpha_t *)connp->conn_ht_ulp;
2166 udpha->uha_src_port = connp->conn_lport;
2204 udp_ulp_recv(conn_t *connp, mblk_t *mp, uint_t len, ip_recv_attr_t *ira)
2206 if (IPCL_IS_NONSTR(connp)) {
2207 udp_t *udp = connp->conn_udp;
2211 if ((*connp->conn_upcalls->su_recv)
2212 (connp->conn_upper_handle, mp, len, 0, &error, NULL) < 0) {
2218 if ((*connp->conn_upcalls->su_recv)
2219 (connp->conn_upper_handle, NULL, 0, 0,
2223 connp->conn_flow_cntrld =
2233 putnext(connp->conn_rq, mp);
2247 putnext(connp->conn_rq, mp);
2260 conn_t *connp = (conn_t *)arg1;
2276 ASSERT(connp->conn_flags & IPCL_UDPCONN);
2278 mutex_enter(&connp->conn_lock);
2279 if (connp->conn_reuselist != NULL) {
2280 struct reuselist *reusep = connp->conn_reuselist;
2296 if (new == connp)
2301 mutex_exit(&connp->conn_lock);
2303 connp = new;
2305 mutex_exit(&connp->conn_lock);
2308 udp = connp->conn_udp;
2322 mutex_enter(&connp->conn_lock);
2324 recv_ancillary = connp->conn_recv_ancillary;
2325 mutex_exit(&connp->conn_lock);
2348 connp->conn_family == AF_INET) {
2356 mutex_enter(&connp->conn_lock);
2361 mutex_exit(&connp->conn_lock);
2364 mutex_exit(&connp->conn_lock);
2387 ASSERT(connp->conn_family == AF_INET6);
2405 if (connp->conn_family == AF_INET) {
2416 udi_size += conn_recvancillary_size(connp,
2438 sin->sin_family = connp->conn_family;
2447 conn_recvancillary_add(connp, recv_ancillary, ira,
2463 udi_size += conn_recvancillary_size(connp,
2492 IPCL_ZONEID(connp), us->us_netstack);
2505 &ip6h->ip6_dst, IPCL_ZONEID(connp),
2509 sin6->sin6_family = connp->conn_family;
2512 conn_recvancillary_add(connp, recv_ancillary, ira,
2521 DTRACE_UDP5(receive, mblk_t *, NULL, ip_xmit_attr_t *, connp->conn_ixa,
2531 udp_ulp_recv(connp, mp1, pkt_len, ira);
2594 conn_t *connp = Q_TO_CONN(q);
2597 error = udp_do_unbind(connp);
2696 udp_output_ancillary(conn_t *connp, sin_t *sin, sin6_t *sin6, mblk_t *mp,
2699 udp_t *udp = connp->conn_udp;
2722 ixa = conn_get_ixa_exclusive(connp);
2744 ixa->ixa_cred = connp->conn_cred; /* Restore */
2745 ixa->ixa_cpid = connp->conn_cpid;
2751 mutex_enter(&connp->conn_lock);
2752 error = ip_pkt_copy(&connp->conn_xmit_ipp, ipp, KM_NOSLEEP);
2753 mutex_exit(&connp->conn_lock);
2767 coa->coa_connp = connp;
2774 error = process_auxiliary_options(connp, msg->msg_control,
2781 error = tpi_optcom_buf(connp->conn_wq, tudr_mp,
2796 mutex_enter(&connp->conn_lock);
2806 v6src = connp->conn_saddr_v6;
2832 if (!ip_srcid_find_id(srcid, &v6src, IPCL_ZONEID(connp),
2833 v4mapped, connp->conn_netstack)) {
2835 mutex_exit(&connp->conn_lock);
2842 v6dst = connp->conn_faddr_v6;
2843 dstport = connp->conn_fport;
2844 flowinfo = connp->conn_flowinfo;
2846 mutex_exit(&connp->conn_lock);
2860 error = ip_attr_connect(connp, ixa, &v6src, &v6dst, &v6nexthop, dstport,
2909 if (connp->conn_mlp_type != mlptSingle &&
2928 error = conn_update_label(connp, ixa, &v6dst, ipp);
2935 mp = udp_prepend_hdr(connp, ixa, ipp, &v6src, &v6dst, dstport,
2961 (void) ixa_check_drain_insert(connp, ixa);
2972 mutex_enter(&connp->conn_lock);
2977 if (connp->conn_mcbc_bind)
2978 connp->conn_saddr_v6 = ipv6_all_zeros;
2980 connp->conn_saddr_v6 = connp->conn_bound_addr_v6;
2981 connp->conn_v6lastdst = ipv6_all_zeros;
2982 mutex_exit(&connp->conn_lock);
2987 ixa->ixa_cred = connp->conn_cred; /* Restore */
2988 ixa->ixa_cpid = connp->conn_cpid;
3000 udp_output_connected(conn_t *connp, mblk_t *mp, cred_t *cr, pid_t pid)
3002 udp_t *udp = connp->conn_udp;
3011 ixa = conn_get_ixa(connp, B_FALSE);
3023 mutex_enter(&connp->conn_lock);
3024 mp = udp_prepend_header_template(connp, ixa, mp, &connp->conn_saddr_v6,
3025 connp->conn_fport, connp->conn_flowinfo, &error);
3029 mutex_exit(&connp->conn_lock);
3031 ixa->ixa_cred = connp->conn_cred; /* Restore */
3032 ixa->ixa_cpid = connp->conn_cpid;
3048 saddr = connp->conn_saddr_v6;
3049 faddr = connp->conn_faddr_v6;
3050 fport = connp->conn_fport;
3051 ip_attr_nexthop(&connp->conn_xmit_ipp, ixa, &faddr, &nexthop);
3052 mutex_exit(&connp->conn_lock);
3054 error = ip_attr_connect(connp, ixa, &saddr, &faddr, &nexthop,
3089 ixa->ixa_cred = connp->conn_cred; /* Restore */
3090 ixa->ixa_cpid = connp->conn_cpid;
3098 mutex_exit(&connp->conn_lock);
3115 (void) ixa_check_drain_insert(connp, ixa);
3127 ixa->ixa_cred = connp->conn_cred; /* Restore */
3128 ixa->ixa_cpid = connp->conn_cpid;
3140 udp_output_lastdst(conn_t *connp, mblk_t *mp, cred_t *cr, pid_t pid,
3143 udp_t *udp = connp->conn_udp;
3147 ASSERT(MUTEX_HELD(&connp->conn_lock));
3155 mp = udp_prepend_header_template(connp, ixa, mp, &connp->conn_v6lastsrc,
3156 connp->conn_lastdstport, connp->conn_lastflowinfo, &error);
3160 mutex_exit(&connp->conn_lock);
3162 ixa->ixa_cred = connp->conn_cred; /* Restore */
3163 ixa->ixa_cpid = connp->conn_cpid;
3179 lastsrc = connp->conn_v6lastsrc;
3180 lastdst = connp->conn_v6lastdst;
3181 lastport = connp->conn_lastdstport;
3182 ip_attr_nexthop(&connp->conn_xmit_ipp, ixa, &lastdst, &nexthop);
3183 mutex_exit(&connp->conn_lock);
3185 error = ip_attr_connect(connp, ixa, &lastsrc, &lastdst,
3220 ixa->ixa_cred = connp->conn_cred; /* Restore */
3221 ixa->ixa_cpid = connp->conn_cpid;
3229 mutex_exit(&connp->conn_lock);
3245 (void) ixa_check_drain_insert(connp, ixa);
3256 mutex_enter(&connp->conn_lock);
3261 if (connp->conn_mcbc_bind)
3262 connp->conn_saddr_v6 = ipv6_all_zeros;
3264 connp->conn_saddr_v6 = connp->conn_bound_addr_v6;
3265 connp->conn_v6lastdst = ipv6_all_zeros;
3266 mutex_exit(&connp->conn_lock);
3270 ixa->ixa_cred = connp->conn_cred; /* Restore */
3271 ixa->ixa_cpid = connp->conn_cpid;
3286 udp_prepend_header_template(conn_t *connp, ip_xmit_attr_t *ixa, mblk_t *mp,
3289 udp_t *udp = connp->conn_udp;
3301 ASSERT(MUTEX_HELD(&connp->conn_lock));
3306 copylen = connp->conn_ht_iphc_len;
3333 bcopy(connp->conn_ht_iphc, iph, copylen);
3334 ip_hdr_length = (uint_t)(connp->conn_ht_ulp - connp->conn_ht_iphc);
3350 cksum += connp->conn_sum;
3354 ipp = &connp->conn_xmit_ipp;
3408 udp_ud_err_connected(conn_t *connp, t_scalar_t error)
3417 mutex_enter(&connp->conn_lock);
3419 if (connp->conn_family == AF_INET) {
3423 sin->sin_port = connp->conn_fport;
3424 sin->sin_addr.s_addr = connp->conn_faddr_v4;
3431 sin6->sin6_port = connp->conn_fport;
3432 sin6->sin6_flowinfo = connp->conn_flowinfo;
3433 sin6->sin6_addr = connp->conn_faddr_v6;
3434 if (IN6_IS_ADDR_LINKSCOPE(&connp->conn_faddr_v6) &&
3435 (connp->conn_ixa->ixa_flags & IXAF_SCOPEID_SET)) {
3436 sin6->sin6_scope_id = connp->conn_ixa->ixa_scopeid;
3444 mutex_exit(&connp->conn_lock);
3448 putnext(connp->conn_rq, mp1);
3468 conn_t *connp = Q_TO_CONN(q);
3469 udp_t *udp = connp->conn_udp;
3510 error = udp_output_connected(connp, mp, cr, pid);
3513 if (connp->conn_rq != NULL)
3514 udp_ud_err_connected(connp, (t_scalar_t)error);
3560 cr = connp->conn_cred;
3561 pid = connp->conn_cpid;
3577 switch (connp->conn_family) {
3600 if (IN6_IS_ADDR_V4MAPPED(&connp->conn_saddr_v6)) {
3611 if (connp->conn_ipv6_v6only) {
3623 if (!IN6_IS_ADDR_V4MAPPED(&connp->conn_saddr_v6) &&
3624 !IN6_IS_ADDR_UNSPECIFIED(&connp->conn_saddr_v6)) {
3643 !conn_same_as_last_v6(connp, sin6)) {
3648 error = udp_output_ancillary(connp, NULL, sin6,
3659 ixa = conn_get_ixa(connp, B_FALSE);
3664 mutex_enter(&connp->conn_lock);
3666 if (conn_same_as_last_v6(connp, sin6) &&
3667 connp->conn_lastsrcid == srcid &&
3671 error = udp_output_lastdst(connp, data_mp, cr,
3676 error = udp_output_newdst(connp, data_mp, NULL,
3679 ASSERT(MUTEX_NOT_HELD(&connp->conn_lock));
3706 !conn_same_as_last_v4(connp, sin)) {
3711 error = udp_output_ancillary(connp, sin, NULL,
3722 ixa = conn_get_ixa(connp, B_FALSE);
3727 mutex_enter(&connp->conn_lock);
3729 if (conn_same_as_last_v4(connp, sin) &&
3733 error = udp_output_lastdst(connp, data_mp, cr,
3738 error = udp_output_newdst(connp, data_mp, sin,
3741 ASSERT(MUTEX_NOT_HELD(&connp->conn_lock));
3771 udp_output_newdst(conn_t *connp, mblk_t *data_mp, sin_t *sin, sin6_t *sin6,
3776 udp_t *udp = connp->conn_udp;
3785 ASSERT(MUTEX_HELD(&connp->conn_lock));
3808 mutex_exit(&connp->conn_lock);
3825 v6src = connp->conn_saddr_v6;
3853 if (!ip_srcid_find_id(srcid, &v6src, IPCL_ZONEID(connp),
3854 v4mapped, connp->conn_netstack)) {
3856 mutex_exit(&connp->conn_lock);
3863 if (connp->conn_xmit_ipp.ipp_fields & IPPF_ADDR) {
3864 ip_pkt_t *ipp = &connp->conn_xmit_ipp;
3875 ip_attr_nexthop(&connp->conn_xmit_ipp, ixa, &v6dst, &v6nexthop);
3876 mutex_exit(&connp->conn_lock);
3878 error = ip_attr_connect(connp, ixa, &v6src, &v6dst, &v6nexthop, dstport,
3920 CL_INET_UDP_CONNECT(connp, B_TRUE, &v6dst, dstport, error);
3927 mutex_enter(&connp->conn_lock);
3935 mutex_exit(&connp->conn_lock);
3955 if (connp->conn_mlp_type != mlptSingle) {
3956 mutex_exit(&connp->conn_lock);
3972 error = conn_update_label(connp, ixa, &v6dst,
3973 &connp->conn_xmit_ipp);
3975 mutex_exit(&connp->conn_lock);
3979 error = udp_build_hdr_template(connp, &v6src, &v6dst, dstport,
3982 mutex_exit(&connp->conn_lock);
3985 } else if ((connp->conn_xmit_ipp.ipp_fields &
3987 ipversion != connp->conn_lastipversion ||
3988 IN6_IS_ADDR_UNSPECIFIED(&connp->conn_v6lastdst)) {
3990 error = udp_build_hdr_template(connp, &v6src, &v6dst, dstport,
3993 mutex_exit(&connp->conn_lock);
3999 ipha_t *ipha = (ipha_t *)connp->conn_ht_iphc;
4010 ip6_t *ip6h = (ip6_t *)connp->conn_ht_iphc;
4019 oldixa = conn_replace_ixa(connp, ixa);
4020 connp->conn_v6lastdst = v6dst;
4021 connp->conn_lastipversion = ipversion;
4022 connp->conn_lastdstport = dstport;
4023 connp->conn_lastflowinfo = flowinfo;
4024 connp->conn_lastscopeid = ixa->ixa_scopeid;
4025 connp->conn_lastsrcid = srcid;
4027 connp->conn_v6lastsrc = v6src;
4029 data_mp = udp_prepend_header_template(connp, ixa, data_mp, &v6src,
4033 mutex_exit(&connp->conn_lock);
4054 (void) ixa_check_drain_insert(connp, ixa);
4065 mutex_enter(&connp->conn_lock);
4070 if (connp->conn_mcbc_bind)
4071 connp->conn_saddr_v6 = ipv6_all_zeros;
4073 connp->conn_saddr_v6 = connp->conn_bound_addr_v6;
4074 connp->conn_v6lastdst = ipv6_all_zeros;
4075 mutex_exit(&connp->conn_lock);
4079 ixa->ixa_cred = connp->conn_cred; /* Restore */
4080 ixa->ixa_cpid = connp->conn_cpid;
4086 ixa->ixa_cred = connp->conn_cred; /* Restore */
4087 ixa->ixa_cpid = connp->conn_cpid;
4115 conn_t *connp = Q_TO_CONN(q);
4116 udp_t *udp = connp->conn_udp;
4126 mutex_enter(&connp->conn_lock);
4132 cmdp->cb_error = conn_getpeername(connp, data,
4136 cmdp->cb_error = conn_getsockname(connp, data, &cmdp->cb_len);
4142 mutex_exit(&connp->conn_lock);
4150 conn_t *connp = udp->udp_connp;
4152 mutex_enter(&connp->conn_lock);
4154 mutex_exit(&connp->conn_lock);
4163 conn_t *connp = Q_TO_CONN(q);
4164 udp_t *udp = connp->conn_udp;
4343 conn_t *connp = Q_TO_CONN(q);
4344 udp_t *udp = connp->conn_udp;
4392 if (connp->conn_family == AF_INET)
4419 (void) conn_getsockname(connp, (struct sockaddr *)mp1->b_wptr,
4423 (void) conn_getpeername(connp, (struct sockaddr *)mp1->b_wptr,
4633 conn_t *connp;
4660 connp = ipcl_conn_create(IPCL_UDPCONN, flags, ns);
4661 if (connp == NULL) {
4666 udp = connp->conn_udp;
4678 ASSERT(connp->conn_proto == IPPROTO_UDP);
4679 ASSERT(connp->conn_udp == udp);
4680 ASSERT(udp->udp_connp == connp);
4684 connp->conn_ixa->ixa_flags |= IXAF_VERIFY_SOURCE;
4686 connp->conn_family = AF_INET6;
4687 connp->conn_ipversion = IPV6_VERSION;
4688 connp->conn_ixa->ixa_flags &= ~IXAF_IS_IPV4;
4689 connp->conn_default_ttl = us->us_ipv6_hoplimit;
4692 connp->conn_family = AF_INET;
4693 connp->conn_ipversion = IPV4_VERSION;
4694 connp->conn_ixa->ixa_flags |= IXAF_IS_IPV4;
4695 connp->conn_default_ttl = us->us_ipv4_ttl;
4699 ASSERT(connp->conn_ixa->ixa_protocol == connp->conn_proto);
4700 connp->conn_xmit_ipp.ipp_unicast_hops = connp->conn_default_ttl;
4702 connp->conn_ixa->ixa_multicast_ttl = IP_DEFAULT_MULTICAST_TTL;
4703 connp->conn_ixa->ixa_flags |= IXAF_MULTICAST_LOOP | IXAF_SET_ULP_CKSUM;
4705 connp->conn_ixa->ixa_zoneid = zoneid;
4707 connp->conn_zoneid = zoneid;
4714 connp->conn_mac_mode = CONN_MAC_AWARE;
4716 connp->conn_zone_is_global = (crgetzoneid(credp) == GLOBAL_ZONEID);
4720 connp->conn_rcvbuf = us->us_recv_hiwat;
4721 connp->conn_sndbuf = us->us_xmit_hiwat;
4722 connp->conn_sndlowat = us->us_xmit_lowat;
4723 connp->conn_rcvlowat = udp_mod_info.mi_lowat;
4725 connp->conn_wroff = len + us->us_wroff_extra;
4726 connp->conn_so_type = SOCK_DGRAM;
4728 connp->conn_recv = udp_input;
4729 connp->conn_recvicmp = udp_icmp_input;
4731 connp->conn_cred = credp;
4732 connp->conn_cpid = curproc->p_pid;
4733 connp->conn_open_time = ddi_get_lbolt64();
4735 ASSERT(!(connp->conn_ixa->ixa_free_flags & IXA_FREE_CRED));
4736 connp->conn_ixa->ixa_cred = connp->conn_cred;
4737 connp->conn_ixa->ixa_cpid = connp->conn_cpid;
4739 connp->conn_ixa->ixa_tsl = crgetlabel(connp->conn_cred);
4744 connp->conn_ixa->ixa_flags |= IXAF_PMTU_DISCOVERY;
4746 return (connp);
4755 conn_t *connp;
4769 connp = udp_do_open(credp, isv6, flags, errorp);
4770 if (connp == NULL)
4773 udp = connp->conn_udp;
4779 connp->conn_flags |= IPCL_NONSTR;
4786 (void) udp_set_rcv_hiwat(udp, connp->conn_rcvbuf);
4787 udp->udp_rcv_disply_hiwat = connp->conn_rcvbuf;
4789 connp->conn_flow_cntrld = B_FALSE;
4791 mutex_enter(&connp->conn_lock);
4792 connp->conn_state_flags &= ~CONN_INCIPIENT;
4793 mutex_exit(&connp->conn_lock);
4798 return ((sock_lower_handle_t)connp);
4806 conn_t *connp = (conn_t *)proto_handle;
4812 connp->conn_upcalls = sock_upcalls;
4813 connp->conn_upper_handle = sock_handle;
4817 sopp.sopp_wroff = connp->conn_wroff;
4819 sopp.sopp_rxhiwat = connp->conn_rcvbuf;
4820 sopp.sopp_rxlowat = connp->conn_rcvlowat;
4823 (connp->conn_family == AF_INET) ? UDP_MAXPACKET_IPV4 :
4828 (*connp->conn_upcalls->su_set_proto_props)(connp->conn_upper_handle,
4833 udp_do_close(conn_t *connp)
4837 ASSERT(connp != NULL && IPCL_IS_UDP(connp));
4838 udp = connp->conn_udp;
4844 if (connp->conn_ipversion == IPV4_VERSION) {
4846 connp->conn_netstack->netstack_stackid,
4848 (uint8_t *)(&V4_PART_OF_V6(connp->conn_laddr_v6)),
4849 (in_port_t)connp->conn_lport, NULL);
4852 connp->conn_netstack->netstack_stackid,
4854 (uint8_t *)&(connp->conn_laddr_v6),
4855 (in_port_t)connp->conn_lport, NULL);
4860 mutex_enter(&connp->conn_lock);
4861 udp_reuselist_remove(connp);
4862 mutex_exit(&connp->conn_lock);
4864 ip_quiesce_conn(connp);
4866 if (!IPCL_IS_NONSTR(connp)) {
4867 ASSERT(connp->conn_wq != NULL);
4868 ASSERT(connp->conn_rq != NULL);
4869 qprocsoff(connp->conn_rq);
4872 udp_close_free(connp);
4876 * delete the things hanging off the connp, and finally the connp.
4877 * We removed this connp from the fanout list, it cannot be
4884 ASSERT(connp->conn_ref == 1);
4886 if (!IPCL_IS_NONSTR(connp)) {
4887 inet_minor_free(connp->conn_minor_arena, connp->conn_dev);
4889 ip_free_helper_stream(connp);
4892 connp->conn_ref--;
4893 ipcl_conn_destroy(connp);
4900 conn_t *connp = (conn_t *)proto_handle;
4905 udp_do_close(connp);
4910 udp_do_bind(conn_t *connp, struct sockaddr *sa, socklen_t len, cred_t *cr,
4915 udp_t *udp = connp->conn_udp;
4927 zoneid_t zoneid = IPCL_ZONEID(connp);
4928 ip_stack_t *ipst = connp->conn_netstack->netstack_ip;
4941 if (connp->conn_family != AF_INET ||
4960 if (connp->conn_family != AF_INET6 ||
4966 if (connp->conn_ipv6_v6only)
5008 if (connp->conn_anon_priv_bind) {
5049 mutex_enter(&connp->conn_lock);
5051 if (!connp->conn_reuseport) {
5063 mutex_exit(&connp->conn_lock);
5079 if (connp->conn_family == AF_INET) {
5081 ASSERT(connp->conn_ixa->ixa_flags & IXAF_IS_IPV4);
5088 connp->conn_ipversion = IPV4_VERSION;
5089 connp->conn_ixa->ixa_flags |= IXAF_IS_IPV4;
5091 connp->conn_ipversion = IPV6_VERSION;
5092 connp->conn_ixa->ixa_flags &= ~IXAF_IS_IPV4;
5119 if (connp->conn_anon_priv_bind) {
5158 if (!IPCL_BIND_ZONE_MATCH(connp1, connp))
5180 if (connp1->conn_exclbind || connp->conn_exclbind ||
5181 IPCL_CONNS_MAC(udp1->udp_connp, connp)) {
5198 if (connp->conn_ipversion != connp1->conn_ipversion) {
5237 if (connp->conn_reuseport && connp1->conn_reuseport) {
5239 cred_t *ncred = connp->conn_cred;
5253 (connp->conn_reuseaddr && requested_port != 0)) {
5266 if (connp->conn_reuseport) {
5286 if (udp_reuselist_add(reusep, connp, B_TRUE)
5300 mutex_exit(&connp->conn_lock);
5303 connp->conn_reuselist = reusep;
5313 if (connp->conn_reuseport) {
5315 mutex_exit(&connp->conn_lock);
5332 mutex_exit(&connp->conn_lock);
5336 if (connp->conn_anon_priv_bind) {
5361 mutex_exit(&connp->conn_lock);
5374 connp->conn_bound_addr_v6 = v6src;
5375 connp->conn_laddr_v6 = v6src;
5377 connp->conn_ixa->ixa_flags |= IXAF_SCOPEID_SET;
5378 connp->conn_ixa->ixa_scopeid = scopeid;
5379 connp->conn_incoming_ifindex = scopeid;
5381 connp->conn_ixa->ixa_flags &= ~IXAF_SCOPEID_SET;
5382 connp->conn_incoming_ifindex = connp->conn_bound_if;
5388 connp->conn_saddr_v6 = v6src;
5389 connp->conn_mcbc_bind = B_FALSE;
5394 connp->conn_saddr_v6 = ipv6_all_zeros;
5395 connp->conn_mcbc_bind = B_TRUE;
5400 connp->conn_lport = lport;
5406 if ((requested_port == 0) && (!connp->conn_anon_priv_bind)) {
5411 if (connp->conn_family == AF_INET) {
5412 sin->sin_port = connp->conn_lport;
5414 sin6->sin6_port = connp->conn_lport;
5419 mutex_exit(&connp->conn_lock);
5425 if (connp->conn_ipversion == IPV4_VERSION) {
5426 (*cl_inet_bind)(connp->conn_netstack->netstack_stackid,
5428 (in_port_t)connp->conn_lport, NULL);
5430 (*cl_inet_bind)(connp->conn_netstack->netstack_stackid,
5432 (in_port_t)connp->conn_lport, NULL);
5436 mutex_enter(&connp->conn_lock);
5437 connp->conn_anon_port = (is_system_labeled() && requested_port == 0);
5438 if (is_system_labeled() && (!connp->conn_anon_port ||
5439 connp->conn_anon_mlp)) {
5444 connp->conn_mlp_type =
5445 connp->conn_recv_ancillary.crb_recvucred ? mlptBoth :
5448 connp->conn_allzones ? ALL_ZONES : zone->zone_id,
5452 mutex_exit(&connp->conn_lock);
5455 mlpport = connp->conn_anon_port ? PMAPPORT : port;
5464 connp->conn_mlp_type == mlptSingle) {
5466 mutex_exit(&connp->conn_lock);
5476 if (connp->conn_debug) {
5483 mutex_exit(&connp->conn_lock);
5501 if (connp->conn_zoneid != mlpzone) {
5502 if (connp->conn_debug) {
5508 mlpport, connp->conn_zoneid,
5512 mutex_exit(&connp->conn_lock);
5516 if (connp->conn_anon_port) {
5517 error = tsol_mlp_anon(zone, mlptype, connp->conn_proto,
5520 if (connp->conn_debug) {
5527 mutex_exit(&connp->conn_lock);
5531 connp->conn_mlp_type = mlptype;
5541 error = udp_build_hdr_template(connp, &connp->conn_saddr_v6,
5542 &connp->conn_faddr_v6, connp->conn_fport, connp->conn_flowinfo);
5544 mutex_exit(&connp->conn_lock);
5548 connp->conn_faddr_v6 = ipv6_all_zeros;
5549 connp->conn_fport = 0;
5550 connp->conn_v6lastdst = ipv6_all_zeros;
5551 mutex_exit(&connp->conn_lock);
5553 error = ip_laddr_fanout_insert(connp);
5562 mutex_enter(&connp->conn_lock);
5564 UDP_BIND_HASH(connp->conn_lport,
5567 connp->conn_saddr_v6 = ipv6_all_zeros;
5568 connp->conn_bound_addr_v6 = ipv6_all_zeros;
5569 connp->conn_laddr_v6 = ipv6_all_zeros;
5571 connp->conn_ixa->ixa_flags &= ~IXAF_SCOPEID_SET;
5572 connp->conn_incoming_ifindex = connp->conn_bound_if;
5576 udp_reuselist_remove(connp);
5577 connp->conn_lport = 0;
5579 connp->conn_anon_port = B_FALSE;
5580 connp->conn_mlp_type = mlptSingle;
5582 connp->conn_v6lastdst = ipv6_all_zeros;
5585 (void) udp_build_hdr_template(connp, &connp->conn_saddr_v6,
5586 &connp->conn_faddr_v6, connp->conn_fport, connp->conn_flowinfo);
5587 mutex_exit(&connp->conn_lock);
5596 conn_t *connp;
5601 connp = (conn_t *)proto_handle;
5604 error = udp_do_unbind(connp);
5606 error = udp_do_bind(connp, sa, len, cr, B_TRUE);
5619 udp_implicit_bind(conn_t *connp, cred_t *cr)
5630 if (connp->conn_family == AF_INET) {
5637 ASSERT(connp->conn_family == AF_INET6);
5645 error = udp_do_bind(connp, (struct sockaddr *)&sin6addr, len,
5655 udp_do_unbind(conn_t *connp)
5657 udp_t *udp = connp->conn_udp;
5665 if (connp->conn_ipversion == IPV4_VERSION) {
5667 connp->conn_netstack->netstack_stackid,
5669 (uint8_t *)(&V4_PART_OF_V6(connp->conn_laddr_v6)),
5670 (in_port_t)connp->conn_lport, NULL);
5673 connp->conn_netstack->netstack_stackid,
5675 (uint8_t *)&(connp->conn_laddr_v6),
5676 (in_port_t)connp->conn_lport, NULL);
5680 mutex_enter(&connp->conn_lock);
5683 mutex_exit(&connp->conn_lock);
5686 udpf = &us->us_bind_fanout[UDP_BIND_HASH(connp->conn_lport,
5690 udp_reuselist_remove(connp);
5691 connp->conn_saddr_v6 = ipv6_all_zeros;
5692 connp->conn_bound_addr_v6 = ipv6_all_zeros;
5693 connp->conn_laddr_v6 = ipv6_all_zeros;
5694 connp->conn_mcbc_bind = B_FALSE;
5695 connp->conn_lport = 0;
5697 connp->conn_faddr_v6 = ipv6_all_zeros;
5698 connp->conn_fport = 0;
5701 connp->conn_v6lastdst = ipv6_all_zeros;
5704 (void) udp_build_hdr_template(connp, &connp->conn_saddr_v6,
5705 &connp->conn_faddr_v6, connp->conn_fport, connp->conn_flowinfo);
5706 mutex_exit(&connp->conn_lock);
5708 ip_unbind(connp);
5717 udp_do_connect(conn_t *connp, const struct sockaddr *sa, socklen_t len,
5736 in6_addr_t v6src = connp->conn_saddr_v6;
5739 udp = connp->conn_udp;
5757 ASSERT(connp->conn_ipversion == IPV4_VERSION);
5768 if (!ip_srcid_find_id(srcid, &v6src, IPCL_ZONEID(connp),
5769 v4mapped, connp->conn_netstack)) {
5775 if (connp->conn_ipv6_v6only)
5784 &connp->conn_bound_addr_v6) &&
5785 !IN6_IS_ADDR_V4MAPPED(&connp->conn_bound_addr_v6)) {
5812 ixa = conn_get_ixa(connp, B_FALSE);
5816 mutex_enter(&connp->conn_lock);
5823 mutex_exit(&connp->conn_lock);
5829 ASSERT(connp->conn_lport != 0 && udp->udp_ptpbhn != NULL);
5831 udpf = &us->us_bind_fanout[UDP_BIND_HASH(connp->conn_lport,
5837 if (connp->conn_mcbc_bind)
5838 connp->conn_saddr_v6 = ipv6_all_zeros;
5840 connp->conn_saddr_v6 = connp->conn_bound_addr_v6;
5841 connp->conn_laddr_v6 = connp->conn_bound_addr_v6;
5842 connp->conn_faddr_v6 = ipv6_all_zeros;
5843 connp->conn_fport = 0;
5847 connp->conn_fport = dstport;
5848 connp->conn_ipversion = ipversion;
5858 if (connp->conn_family == AF_INET) {
5864 connp->conn_faddr_v6 = v6dst;
5865 connp->conn_flowinfo = 0;
5867 ASSERT(connp->conn_ipversion == IPV6_VERSION);
5877 connp->conn_faddr_v6 = v6dst;
5878 connp->conn_flowinfo = flowinfo;
5885 if (connp->conn_cred != cr) {
5887 crfree(connp->conn_cred);
5888 connp->conn_cred = cr;
5890 connp->conn_cpid = pid;
5902 connp->conn_incoming_ifindex = scopeid;
5905 connp->conn_incoming_ifindex = connp->conn_bound_if;
5913 connp->conn_v6lastdst = ipv6_all_zeros;
5916 error = conn_connect(connp, NULL, IPDF_ALLOW_MCBC);
5917 mutex_exit(&connp->conn_lock);
5925 error = ipcl_conn_insert(connp);
5929 mutex_enter(&connp->conn_lock);
5930 error = udp_build_hdr_template(connp, &connp->conn_saddr_v6,
5931 &connp->conn_faddr_v6, connp->conn_fport, connp->conn_flowinfo);
5933 mutex_exit(&connp->conn_lock);
5939 connp->conn_v6lastdst = connp->conn_faddr_v6;
5940 connp->conn_lastipversion = connp->conn_ipversion;
5941 connp->conn_lastdstport = connp->conn_fport;
5942 connp->conn_lastflowinfo = connp->conn_flowinfo;
5943 connp->conn_lastscopeid = scopeid;
5944 connp->conn_lastsrcid = srcid;
5946 connp->conn_v6lastsrc = v6src;
5948 oldixa = conn_replace_ixa(connp, ixa);
5949 mutex_exit(&connp->conn_lock);
5966 if (connp->conn_lport != connp1->conn_lport ||
5967 connp->conn_ipversion != connp1->conn_ipversion ||
5969 !IN6_ARE_ADDR_EQUAL(&connp->conn_laddr_v6,
5972 !(IPCL_ZONE_MATCH(connp, connp1->conn_zoneid) ||
5973 IPCL_ZONE_MATCH(connp1, connp->conn_zoneid)))
5980 CL_INET_UDP_CONNECT(connp, B_TRUE, &v6dst, dstport, error);
5995 mutex_enter(&connp->conn_lock);
5998 connp->conn_faddr_v6 = ipv6_all_zeros;
5999 connp->conn_fport = 0;
6001 if (connp->conn_mcbc_bind)
6002 connp->conn_saddr_v6 = ipv6_all_zeros;
6004 connp->conn_saddr_v6 = connp->conn_bound_addr_v6;
6005 connp->conn_laddr_v6 = connp->conn_bound_addr_v6;
6008 connp->conn_v6lastdst = ipv6_all_zeros;
6009 connp->conn_flowinfo = 0;
6011 (void) udp_build_hdr_template(connp, &connp->conn_saddr_v6,
6012 &connp->conn_faddr_v6, connp->conn_fport, connp->conn_flowinfo);
6013 mutex_exit(&connp->conn_lock);
6021 conn_t *connp = (conn_t *)proto_handle;
6022 udp_t *udp = connp->conn_udp;
6038 error = udp_disconnect(connp);
6042 error = proto_verify_ip_addr(connp->conn_family, sa, len);
6048 error = udp_implicit_bind(connp, cr);
6061 connp->conn_dgram_errind = B_TRUE;
6063 error = udp_do_connect(connp, sa, len, cr, pid);
6068 unbind_err = udp_do_unbind(connp);
6074 (*connp->conn_upcalls->su_connected)
6075 (connp->conn_upper_handle, 0, NULL, -1);
6099 conn_t *connp = (conn_t *)proto_handle;
6100 udp_t *udp = connp->conn_udp;
6114 error = udp_implicit_bind(connp, cr);
6133 error = udp_output_ancillary(connp, NULL, NULL, mp,
6136 error = udp_output_connected(connp, mp, cr, pid);
6147 error = proto_verify_ip_addr(connp->conn_family,
6153 switch (connp->conn_family) {
6172 if (IN6_IS_ADDR_V4MAPPED(&connp->conn_saddr_v6)) {
6180 if (connp->conn_ipv6_v6only) {
6192 if (!IN6_IS_ADDR_V4MAPPED(&connp->conn_saddr_v6) &&
6193 !IN6_IS_ADDR_UNSPECIFIED(&connp->conn_saddr_v6)) {
6212 ixa = conn_get_ixa(connp, B_FALSE);
6220 mutex_enter(&connp->conn_lock);
6233 mutex_exit(&connp->conn_lock);
6242 mutex_exit(&connp->conn_lock);
6244 error = udp_output_ancillary(connp, NULL, sin6, mp,
6246 } else if (conn_same_as_last_v6(connp, sin6) &&
6247 connp->conn_lastsrcid == srcid &&
6250 error = udp_output_lastdst(connp, mp, cr, pid, ixa);
6253 error = udp_output_newdst(connp, mp, NULL, sin6,
6256 ASSERT(MUTEX_NOT_HELD(&connp->conn_lock));
6275 ixa = conn_get_ixa(connp, B_FALSE);
6283 mutex_enter(&connp->conn_lock);
6294 mutex_exit(&connp->conn_lock);
6302 mutex_exit(&connp->conn_lock);
6304 error = udp_output_ancillary(connp, sin, NULL, mp,
6306 } else if (conn_same_as_last_v4(connp, sin) &&
6309 error = udp_output_lastdst(connp, mp, cr, pid, ixa);
6312 error = udp_output_newdst(connp, mp, sin, NULL,
6315 ASSERT(MUTEX_NOT_HELD(&connp->conn_lock));
6330 conn_t *connp = (conn_t *)proto_handle;
6340 udp = connp->conn_udp;
6347 connp->conn_dev = (dev_t)RD(q)->q_ptr;
6348 connp->conn_minor_arena = WR(q)->q_ptr;
6350 RD(q)->q_ptr = WR(q)->q_ptr = connp;
6354 connp->conn_rq = RD(q);
6355 connp->conn_wq = WR(q);
6362 stropt->so_wroff = connp->conn_wroff;
6369 ip_free_helper_stream(connp);
6380 (void) udp_getsockname((sock_lower_handle_t)connp,
6382 error = udp_getpeername((sock_lower_handle_t)connp,
6388 if (connp->conn_dgram_errind)
6390 if (connp->conn_ixa->ixa_flags & IXAF_DONTROUTE)
6393 mp = (*quiesced_cb)(connp->conn_upper_handle, arg, &tca,
6419 mutex_enter(&connp->conn_lock);
6420 connp->conn_flags &= ~IPCL_NONSTR;
6421 mutex_exit(&connp->conn_lock);
6425 ASSERT(connp->conn_ref >= 1);
6435 conn_t *connp = (conn_t *)proto_handle;
6436 udp_t *udp = connp->conn_udp;
6442 mutex_enter(&connp->conn_lock);
6446 error = conn_getpeername(connp, sa, salenp);
6447 mutex_exit(&connp->conn_lock);
6456 conn_t *connp = (conn_t *)proto_handle;
6462 mutex_enter(&connp->conn_lock);
6463 error = conn_getsockname(connp, sa, salenp);
6464 mutex_exit(&connp->conn_lock);
6472 conn_t *connp = (conn_t *)proto_handle;
6492 len = udp_opt_get(connp, level, option_name, optvalp_buf);
6514 conn_t *connp = (conn_t *)proto_handle;
6531 error = udp_opt_set(connp, SETFN_OPTCOM_NEGOTIATE, level, option_name,
6543 conn_t *connp = (conn_t *)proto_handle;
6544 udp_t *udp = connp->conn_udp;
6547 connp->conn_flow_cntrld = B_FALSE;
6555 conn_t *connp = (conn_t *)proto_handle;
6562 (*connp->conn_upcalls->su_opctl)(connp->conn_upper_handle,
6566 (*connp->conn_upcalls->su_opctl)(connp->conn_upper_handle,
6575 conn_t *connp = (conn_t *)proto_handle;
6586 if (connp->conn_helper_info == NULL) {
6587 udp_stack_t *us = connp->conn_udp->udp_us;
6594 error = ip_create_helper_stream(connp, us->us_ldi_ident);
6614 error = ldi_ioctl(connp->conn_helper_info->iphs_handle,