Lines Matching refs:connp
113 static void icmp_icmp_error_ipv6(conn_t *connp, mblk_t *mp,
123 int icmp_opt_set(conn_t *connp, uint_t optset_context,
127 int icmp_opt_get(conn_t *connp, int level, int name,
129 static int icmp_output_newdst(conn_t *connp, mblk_t *data_mp, sin_t *sin,
317 conn_t *connp = Q_TO_CONN(q); in icmp_tpi_bind() local
335 icmp = connp->conn_icmp; in icmp_tpi_bind()
369 if (connp->conn_family == AF_INET) { in icmp_tpi_bind()
378 ASSERT(connp->conn_family == AF_INET6); in icmp_tpi_bind()
406 error = rawip_do_bind(connp, sa, len); in icmp_tpi_bind()
420 rawip_do_bind(conn_t *connp, struct sockaddr *sa, socklen_t len) in rawip_do_bind() argument
424 icmp_t *icmp = connp->conn_icmp; in rawip_do_bind()
431 zoneid_t zoneid = IPCL_ZONEID(connp); in rawip_do_bind()
432 ip_stack_t *ipst = connp->conn_netstack->netstack_ip; in rawip_do_bind()
442 connp->conn_family != AF_INET) { in rawip_do_bind()
457 connp->conn_family != AF_INET6) { in rawip_do_bind()
488 mutex_enter(&connp->conn_lock); in rawip_do_bind()
490 mutex_exit(&connp->conn_lock); in rawip_do_bind()
502 connp->conn_bound_addr_v6 = v6src; in rawip_do_bind()
503 connp->conn_laddr_v6 = v6src; in rawip_do_bind()
505 connp->conn_ixa->ixa_flags |= IXAF_SCOPEID_SET; in rawip_do_bind()
506 connp->conn_ixa->ixa_scopeid = scopeid; in rawip_do_bind()
507 connp->conn_incoming_ifindex = scopeid; in rawip_do_bind()
509 connp->conn_ixa->ixa_flags &= ~IXAF_SCOPEID_SET; in rawip_do_bind()
510 connp->conn_incoming_ifindex = connp->conn_bound_if; in rawip_do_bind()
516 connp->conn_saddr_v6 = v6src; in rawip_do_bind()
517 connp->conn_mcbc_bind = B_FALSE; in rawip_do_bind()
522 connp->conn_saddr_v6 = ipv6_all_zeros; in rawip_do_bind()
523 connp->conn_mcbc_bind = B_TRUE; in rawip_do_bind()
533 connp->conn_lport = lport; in rawip_do_bind()
534 connp->conn_fport = 0; in rawip_do_bind()
536 if (connp->conn_family == AF_INET) { in rawip_do_bind()
537 ASSERT(connp->conn_ipversion == IPV4_VERSION); in rawip_do_bind()
539 ASSERT(connp->conn_ipversion == IPV6_VERSION); in rawip_do_bind()
551 error = icmp_build_hdr_template(connp, &connp->conn_saddr_v6, in rawip_do_bind()
552 &connp->conn_faddr_v6, connp->conn_flowinfo); in rawip_do_bind()
554 mutex_exit(&connp->conn_lock); in rawip_do_bind()
558 connp->conn_faddr_v6 = ipv6_all_zeros; in rawip_do_bind()
559 connp->conn_v6lastdst = ipv6_all_zeros; in rawip_do_bind()
560 mutex_exit(&connp->conn_lock); in rawip_do_bind()
562 error = ip_laddr_fanout_insert(connp); in rawip_do_bind()
570 mutex_enter(&connp->conn_lock); in rawip_do_bind()
571 connp->conn_saddr_v6 = ipv6_all_zeros; in rawip_do_bind()
572 connp->conn_bound_addr_v6 = ipv6_all_zeros; in rawip_do_bind()
573 connp->conn_laddr_v6 = ipv6_all_zeros; in rawip_do_bind()
575 connp->conn_ixa->ixa_flags &= ~IXAF_SCOPEID_SET; in rawip_do_bind()
576 connp->conn_incoming_ifindex = connp->conn_bound_if; in rawip_do_bind()
579 connp->conn_v6lastdst = ipv6_all_zeros; in rawip_do_bind()
580 connp->conn_lport = 0; in rawip_do_bind()
583 (void) icmp_build_hdr_template(connp, &connp->conn_saddr_v6, in rawip_do_bind()
584 &connp->conn_faddr_v6, connp->conn_flowinfo); in rawip_do_bind()
585 mutex_exit(&connp->conn_lock); in rawip_do_bind()
595 conn_t *connp = icmp->icmp_connp; in icmp_bind_proto() local
597 mutex_enter(&connp->conn_lock); in icmp_bind_proto()
598 connp->conn_saddr_v6 = ipv6_all_zeros; in icmp_bind_proto()
599 connp->conn_laddr_v6 = ipv6_all_zeros; in icmp_bind_proto()
600 connp->conn_faddr_v6 = ipv6_all_zeros; in icmp_bind_proto()
601 connp->conn_v6lastdst = ipv6_all_zeros; in icmp_bind_proto()
602 mutex_exit(&connp->conn_lock); in icmp_bind_proto()
604 (void) ip_laddr_fanout_insert(connp); in icmp_bind_proto()
619 conn_t *connp = Q_TO_CONN(q); in icmp_tpi_connect() local
668 error = proto_verify_ip_addr(connp->conn_family, sa, len); in icmp_tpi_connect()
674 error = rawip_do_connect(connp, sa, len, cr, pid); in icmp_tpi_connect()
688 if (connp->conn_family == AF_INET) { in icmp_tpi_connect()
692 ASSERT(connp->conn_family == AF_INET6); in icmp_tpi_connect()
710 putnext(connp->conn_rq, mp); in icmp_tpi_connect()
711 putnext(connp->conn_rq, mp1); in icmp_tpi_connect()
716 rawip_do_connect(conn_t *connp, const struct sockaddr *sa, socklen_t len, in rawip_do_connect() argument
731 in6_addr_t v6src = connp->conn_saddr_v6; in rawip_do_connect()
733 icmp = connp->conn_icmp; in rawip_do_connect()
754 ASSERT(connp->conn_ipversion == IPV4_VERSION); in rawip_do_connect()
766 ASSERT(connp->conn_ipversion == IPV6_VERSION); in rawip_do_connect()
773 if (!ip_srcid_find_id(srcid, &v6src, IPCL_ZONEID(connp), in rawip_do_connect()
774 B_FALSE, connp->conn_netstack)) { in rawip_do_connect()
791 ixa = conn_get_ixa(connp, B_FALSE); in rawip_do_connect()
795 mutex_enter(&connp->conn_lock); in rawip_do_connect()
802 mutex_exit(&connp->conn_lock); in rawip_do_connect()
809 if (connp->conn_mcbc_bind) in rawip_do_connect()
810 connp->conn_saddr_v6 = ipv6_all_zeros; in rawip_do_connect()
812 connp->conn_saddr_v6 = connp->conn_bound_addr_v6; in rawip_do_connect()
813 connp->conn_laddr_v6 = connp->conn_bound_addr_v6; in rawip_do_connect()
814 connp->conn_faddr_v6 = ipv6_all_zeros; in rawip_do_connect()
822 connp->conn_fport = dstport; in rawip_do_connect()
823 if (connp->conn_ipversion == IPV4_VERSION) { in rawip_do_connect()
832 ASSERT(connp->conn_family == AF_INET); in rawip_do_connect()
835 connp->conn_faddr_v6 = v6dst; in rawip_do_connect()
836 connp->conn_flowinfo = 0; in rawip_do_connect()
838 ASSERT(connp->conn_ipversion == IPV6_VERSION); in rawip_do_connect()
848 connp->conn_faddr_v6 = v6dst; in rawip_do_connect()
849 connp->conn_flowinfo = flowinfo; in rawip_do_connect()
855 if (connp->conn_cred != cr) { in rawip_do_connect()
857 crfree(connp->conn_cred); in rawip_do_connect()
858 connp->conn_cred = cr; in rawip_do_connect()
860 connp->conn_cpid = pid; in rawip_do_connect()
872 connp->conn_incoming_ifindex = scopeid; in rawip_do_connect()
875 connp->conn_incoming_ifindex = connp->conn_bound_if; in rawip_do_connect()
884 connp->conn_v6lastdst = ipv6_all_zeros; in rawip_do_connect()
887 error = conn_connect(connp, NULL, IPDF_ALLOW_MCBC); in rawip_do_connect()
888 mutex_exit(&connp->conn_lock); in rawip_do_connect()
896 error = ipcl_conn_insert(connp); in rawip_do_connect()
900 mutex_enter(&connp->conn_lock); in rawip_do_connect()
901 error = icmp_build_hdr_template(connp, &connp->conn_saddr_v6, in rawip_do_connect()
902 &connp->conn_faddr_v6, connp->conn_flowinfo); in rawip_do_connect()
904 mutex_exit(&connp->conn_lock); in rawip_do_connect()
910 connp->conn_v6lastdst = connp->conn_faddr_v6; in rawip_do_connect()
911 connp->conn_lastipversion = connp->conn_ipversion; in rawip_do_connect()
912 connp->conn_lastdstport = connp->conn_fport; in rawip_do_connect()
913 connp->conn_lastflowinfo = connp->conn_flowinfo; in rawip_do_connect()
914 connp->conn_lastscopeid = scopeid; in rawip_do_connect()
915 connp->conn_lastsrcid = srcid; in rawip_do_connect()
917 connp->conn_v6lastsrc = v6src; in rawip_do_connect()
919 oldixa = conn_replace_ixa(connp, ixa); in rawip_do_connect()
920 mutex_exit(&connp->conn_lock); in rawip_do_connect()
929 mutex_enter(&connp->conn_lock); in rawip_do_connect()
932 if (connp->conn_mcbc_bind) in rawip_do_connect()
933 connp->conn_saddr_v6 = ipv6_all_zeros; in rawip_do_connect()
935 connp->conn_saddr_v6 = connp->conn_bound_addr_v6; in rawip_do_connect()
936 connp->conn_laddr_v6 = connp->conn_bound_addr_v6; in rawip_do_connect()
937 connp->conn_faddr_v6 = ipv6_all_zeros; in rawip_do_connect()
938 connp->conn_v6lastdst = ipv6_all_zeros; in rawip_do_connect()
939 connp->conn_flowinfo = 0; in rawip_do_connect()
941 (void) icmp_build_hdr_template(connp, &connp->conn_saddr_v6, in rawip_do_connect()
942 &connp->conn_faddr_v6, connp->conn_flowinfo); in rawip_do_connect()
943 mutex_exit(&connp->conn_lock); in rawip_do_connect()
948 rawip_do_close(conn_t *connp) in rawip_do_close() argument
950 ASSERT(connp != NULL && IPCL_IS_RAWIP(connp)); in rawip_do_close()
952 ip_quiesce_conn(connp); in rawip_do_close()
954 if (!IPCL_IS_NONSTR(connp)) { in rawip_do_close()
955 qprocsoff(connp->conn_rq); in rawip_do_close()
958 icmp_close_free(connp); in rawip_do_close()
970 ASSERT(connp->conn_ref == 1); in rawip_do_close()
972 if (!IPCL_IS_NONSTR(connp)) { in rawip_do_close()
973 inet_minor_free(connp->conn_minor_arena, connp->conn_dev); in rawip_do_close()
975 ip_free_helper_stream(connp); in rawip_do_close()
978 connp->conn_ref--; in rawip_do_close()
979 ipcl_conn_destroy(connp); in rawip_do_close()
985 conn_t *connp; in icmp_close() local
997 connp = Q_TO_CONN(q); in icmp_close()
998 (void) rawip_do_close(connp); in icmp_close()
1005 icmp_close_free(conn_t *connp) in icmp_close_free() argument
1007 icmp_t *icmp = connp->conn_icmp; in icmp_close_free()
1020 ASSERT(icmp->icmp_connp == connp); in icmp_close_free()
1022 icmp->icmp_connp = connp; in icmp_close_free()
1031 icmp_do_disconnect(conn_t *connp) in icmp_do_disconnect() argument
1033 icmp_t *icmp = connp->conn_icmp; in icmp_do_disconnect()
1036 mutex_enter(&connp->conn_lock); in icmp_do_disconnect()
1038 mutex_exit(&connp->conn_lock); in icmp_do_disconnect()
1041 if (connp->conn_mcbc_bind) in icmp_do_disconnect()
1042 connp->conn_saddr_v6 = ipv6_all_zeros; in icmp_do_disconnect()
1044 connp->conn_saddr_v6 = connp->conn_bound_addr_v6; in icmp_do_disconnect()
1045 connp->conn_laddr_v6 = connp->conn_bound_addr_v6; in icmp_do_disconnect()
1046 connp->conn_faddr_v6 = ipv6_all_zeros; in icmp_do_disconnect()
1049 connp->conn_v6lastdst = ipv6_all_zeros; in icmp_do_disconnect()
1050 error = icmp_build_hdr_template(connp, &connp->conn_saddr_v6, in icmp_do_disconnect()
1051 &connp->conn_faddr_v6, connp->conn_flowinfo); in icmp_do_disconnect()
1052 mutex_exit(&connp->conn_lock); in icmp_do_disconnect()
1060 return (ip_laddr_fanout_insert(connp)); in icmp_do_disconnect()
1066 conn_t *connp = Q_TO_CONN(q); in icmp_tpi_disconnect() local
1080 error = icmp_do_disconnect(connp); in icmp_tpi_disconnect()
1096 icmp_disconnect(conn_t *connp) in icmp_disconnect() argument
1100 connp->conn_dgram_errind = B_FALSE; in icmp_disconnect()
1102 error = icmp_do_disconnect(connp); in icmp_disconnect()
1143 conn_t *connp = (conn_t *)arg1; in icmp_icmp_input() local
1144 icmp_t *icmp = connp->conn_icmp; in icmp_icmp_input()
1158 icmp_icmp_error_ipv6(connp, mp, ira); in icmp_icmp_input()
1181 if (connp->conn_ipversion != IPV4_VERSION) in icmp_icmp_input()
1184 ixa = conn_get_ixa(connp, B_FALSE); in icmp_icmp_input()
1196 mutex_enter(&connp->conn_lock); in icmp_icmp_input()
1197 ipha = (ipha_t *)connp->conn_ht_iphc; in icmp_icmp_input()
1205 mutex_exit(&connp->conn_lock); in icmp_icmp_input()
1231 if (!connp->conn_dgram_errind) { in icmp_icmp_input()
1240 if (IPCL_IS_NONSTR(connp)) { in icmp_icmp_input()
1241 mutex_enter(&connp->conn_lock); in icmp_icmp_input()
1243 if (sin.sin_addr.s_addr == connp->conn_faddr_v4) { in icmp_icmp_input()
1244 mutex_exit(&connp->conn_lock); in icmp_icmp_input()
1245 (*connp->conn_upcalls->su_set_error) in icmp_icmp_input()
1246 (connp->conn_upper_handle, error); in icmp_icmp_input()
1253 mutex_exit(&connp->conn_lock); in icmp_icmp_input()
1258 putnext(connp->conn_rq, mp1); in icmp_icmp_input()
1271 icmp_icmp_error_ipv6(conn_t *connp, mblk_t *mp, ip_recv_attr_t *ira) in icmp_icmp_error_ipv6() argument
1280 icmp_t *icmp = connp->conn_icmp; in icmp_icmp_error_ipv6()
1331 if (!connp->conn_ipv6_recvpathmtu) in icmp_icmp_error_ipv6()
1357 sin6->sin6_addr = connp->conn_faddr_v6; in icmp_icmp_error_ipv6()
1375 icmp_ulp_recv(connp, newmp, msgdsize(newmp)); in icmp_icmp_error_ipv6()
1400 if (!connp->conn_dgram_errind) { in icmp_icmp_error_ipv6()
1409 if (IPCL_IS_NONSTR(connp)) { in icmp_icmp_error_ipv6()
1410 mutex_enter(&connp->conn_lock); in icmp_icmp_error_ipv6()
1413 &connp->conn_faddr_v6)) { in icmp_icmp_error_ipv6()
1414 mutex_exit(&connp->conn_lock); in icmp_icmp_error_ipv6()
1415 (*connp->conn_upcalls->su_set_error) in icmp_icmp_error_ipv6()
1416 (connp->conn_upper_handle, error); in icmp_icmp_error_ipv6()
1423 mutex_exit(&connp->conn_lock); in icmp_icmp_error_ipv6()
1428 putnext(connp->conn_rq, mp1); in icmp_icmp_error_ipv6()
1448 conn_t *connp = icmp->icmp_connp; in icmp_addr_req() local
1466 if (connp->conn_family == AF_INET) in icmp_addr_req()
1471 mutex_enter(&connp->conn_lock); in icmp_addr_req()
1483 (void) conn_getsockname(connp, sa, &addrlen); in icmp_addr_req()
1494 (void) conn_getpeername(connp, sa, &addrlen); in icmp_addr_req()
1497 mutex_exit(&connp->conn_lock); in icmp_addr_req()
1505 conn_t *connp = icmp->icmp_connp; in icmp_copy_info() local
1509 if (connp->conn_family == AF_INET6) in icmp_copy_info()
1579 conn_t *connp; in icmp_tpi_open() local
1609 connp = rawip_do_open(family, credp, &error, KM_SLEEP); in icmp_tpi_open()
1610 if (connp == NULL) { in icmp_tpi_open()
1617 connp->conn_dev = conn_dev; in icmp_tpi_open()
1618 connp->conn_minor_arena = ip_minor_arena_sa; in icmp_tpi_open()
1623 q->q_ptr = connp; in icmp_tpi_open()
1624 WR(q)->q_ptr = connp; in icmp_tpi_open()
1625 connp->conn_rq = q; in icmp_tpi_open()
1626 connp->conn_wq = WR(q); in icmp_tpi_open()
1628 WR(q)->q_hiwat = connp->conn_sndbuf; in icmp_tpi_open()
1629 WR(q)->q_lowat = connp->conn_sndlowat; in icmp_tpi_open()
1634 (void) proto_set_tx_wroff(q, connp, connp->conn_wroff); in icmp_tpi_open()
1635 (void) proto_set_rx_hiwat(connp->conn_rq, connp, connp->conn_rcvbuf); in icmp_tpi_open()
1637 mutex_enter(&connp->conn_lock); in icmp_tpi_open()
1638 connp->conn_state_flags &= ~CONN_INCIPIENT; in icmp_tpi_open()
1639 mutex_exit(&connp->conn_lock); in icmp_tpi_open()
1641 icmp_bind_proto(connp->conn_icmp); in icmp_tpi_open()
1668 conn_t *connp; in rawip_do_open() local
1698 connp = ipcl_conn_create(IPCL_RAWIPCONN, flags, ns); in rawip_do_open()
1699 icmp = connp->conn_icmp; in rawip_do_open()
1711 ASSERT(connp->conn_proto == IPPROTO_ICMP); in rawip_do_open()
1712 ASSERT(connp->conn_icmp == icmp); in rawip_do_open()
1713 ASSERT(icmp->icmp_connp == connp); in rawip_do_open()
1717 connp->conn_ixa->ixa_flags |= IXAF_VERIFY_SOURCE; in rawip_do_open()
1719 connp->conn_family = AF_INET6; in rawip_do_open()
1720 connp->conn_ipversion = IPV6_VERSION; in rawip_do_open()
1721 connp->conn_ixa->ixa_flags &= ~IXAF_IS_IPV4; in rawip_do_open()
1722 connp->conn_proto = IPPROTO_ICMPV6; in rawip_do_open()
1724 connp->conn_proto = IPPROTO_ICMPV6; in rawip_do_open()
1725 connp->conn_ixa->ixa_protocol = connp->conn_proto; in rawip_do_open()
1726 connp->conn_ixa->ixa_raw_cksum_offset = 2; in rawip_do_open()
1727 connp->conn_default_ttl = is->is_ipv6_hoplimit; in rawip_do_open()
1730 connp->conn_family = AF_INET; in rawip_do_open()
1731 connp->conn_ipversion = IPV4_VERSION; in rawip_do_open()
1732 connp->conn_ixa->ixa_flags |= IXAF_IS_IPV4; in rawip_do_open()
1734 connp->conn_proto = IPPROTO_ICMP; in rawip_do_open()
1735 connp->conn_ixa->ixa_protocol = connp->conn_proto; in rawip_do_open()
1736 connp->conn_default_ttl = is->is_ipv4_ttl; in rawip_do_open()
1739 connp->conn_xmit_ipp.ipp_unicast_hops = connp->conn_default_ttl; in rawip_do_open()
1741 connp->conn_ixa->ixa_multicast_ttl = IP_DEFAULT_MULTICAST_TTL; in rawip_do_open()
1749 connp->conn_ixa->ixa_flags |= IXAF_MULTICAST_LOOP | IXAF_SET_ULP_CKSUM; in rawip_do_open()
1751 connp->conn_ixa->ixa_zoneid = zoneid; in rawip_do_open()
1753 connp->conn_zoneid = zoneid; in rawip_do_open()
1760 connp->conn_mac_mode = CONN_MAC_AWARE; in rawip_do_open()
1762 connp->conn_zone_is_global = (crgetzoneid(credp) == GLOBAL_ZONEID); in rawip_do_open()
1766 connp->conn_rcvbuf = is->is_recv_hiwat; in rawip_do_open()
1767 connp->conn_sndbuf = is->is_xmit_hiwat; in rawip_do_open()
1768 connp->conn_sndlowat = is->is_xmit_lowat; in rawip_do_open()
1769 connp->conn_rcvlowat = icmp_mod_info.mi_lowat; in rawip_do_open()
1771 connp->conn_wroff = len + is->is_wroff_extra; in rawip_do_open()
1772 connp->conn_so_type = SOCK_RAW; in rawip_do_open()
1774 connp->conn_recv = icmp_input; in rawip_do_open()
1775 connp->conn_recvicmp = icmp_icmp_input; in rawip_do_open()
1777 connp->conn_cred = credp; in rawip_do_open()
1778 connp->conn_cpid = curproc->p_pid; in rawip_do_open()
1779 connp->conn_open_time = ddi_get_lbolt64(); in rawip_do_open()
1781 ASSERT(!(connp->conn_ixa->ixa_free_flags & IXA_FREE_CRED)); in rawip_do_open()
1782 connp->conn_ixa->ixa_cred = connp->conn_cred; in rawip_do_open()
1783 connp->conn_ixa->ixa_cpid = connp->conn_cpid; in rawip_do_open()
1785 connp->conn_ixa->ixa_tsl = crgetlabel(connp->conn_cred); in rawip_do_open()
1787 connp->conn_flow_cntrld = B_FALSE; in rawip_do_open()
1790 connp->conn_ixa->ixa_flags |= IXAF_PMTU_DISCOVERY; in rawip_do_open()
1792 return (connp); in rawip_do_open()
1857 icmp_opt_get(conn_t *connp, int level, int name, uchar_t *ptr) in icmp_opt_get() argument
1859 icmp_t *icmp = connp->conn_icmp; in icmp_opt_get()
1864 coas.coa_connp = connp; in icmp_opt_get()
1865 coas.coa_ixa = connp->conn_ixa; in icmp_opt_get()
1866 coas.coa_ipp = &connp->conn_xmit_ipp; in icmp_opt_get()
1881 if (connp->conn_family != AF_INET) in icmp_opt_get()
1890 mutex_enter(&connp->conn_lock); in icmp_opt_get()
1892 mutex_exit(&connp->conn_lock); in icmp_opt_get()
1901 if (connp->conn_family != AF_INET6) in icmp_opt_get()
1910 if (connp->conn_proto == IPPROTO_ICMPV6) in icmp_opt_get()
1913 mutex_enter(&connp->conn_lock); in icmp_opt_get()
1914 if (connp->conn_ixa->ixa_flags & IXAF_SET_RAW_CKSUM) in icmp_opt_get()
1915 *i1 = connp->conn_ixa->ixa_raw_cksum_offset; in icmp_opt_get()
1918 mutex_exit(&connp->conn_lock); in icmp_opt_get()
1927 if (connp->conn_family != AF_INET6) in icmp_opt_get()
1930 if (connp->conn_proto != IPPROTO_ICMPV6) in icmp_opt_get()
1935 mutex_enter(&connp->conn_lock); in icmp_opt_get()
1943 mutex_exit(&connp->conn_lock); in icmp_opt_get()
1947 mutex_enter(&connp->conn_lock); in icmp_opt_get()
1949 mutex_exit(&connp->conn_lock); in icmp_opt_get()
1960 conn_t *connp = Q_TO_CONN(q); in icmp_tpi_opt_get() local
1963 err = icmp_opt_get(connp, level, name, ptr); in icmp_tpi_opt_get()
1974 conn_t *connp = coa->coa_connp; in icmp_do_opt_set() local
1976 icmp_t *icmp = connp->conn_icmp; in icmp_do_opt_set()
2002 mutex_enter(&connp->conn_lock); in icmp_do_opt_set()
2003 connp->conn_proto = *i1 & 0xFF; in icmp_do_opt_set()
2004 ixa->ixa_protocol = connp->conn_proto; in icmp_do_opt_set()
2005 if ((connp->conn_proto == IPPROTO_RAW || in icmp_do_opt_set()
2006 connp->conn_proto == IPPROTO_IGMP) && in icmp_do_opt_set()
2007 connp->conn_family == AF_INET) { in icmp_do_opt_set()
2010 } else if (connp->conn_proto == IPPROTO_UDP || in icmp_do_opt_set()
2011 connp->conn_proto == IPPROTO_TCP || in icmp_do_opt_set()
2012 connp->conn_proto == IPPROTO_SCTP) { in icmp_do_opt_set()
2021 if (connp->conn_family == AF_INET6 && in icmp_do_opt_set()
2022 connp->conn_proto == IPPROTO_ICMPV6) { in icmp_do_opt_set()
2028 connp->conn_proto != IPPROTO_ICMPV6) { in icmp_do_opt_set()
2033 mutex_exit(&connp->conn_lock); in icmp_do_opt_set()
2040 if (connp->conn_proto == IPPROTO_SCTP) in icmp_do_opt_set()
2063 if (connp->conn_family != AF_INET) in icmp_do_opt_set()
2069 mutex_enter(&connp->conn_lock); in icmp_do_opt_set()
2075 mutex_exit(&connp->conn_lock); in icmp_do_opt_set()
2082 if (connp->conn_family != AF_INET6) in icmp_do_opt_set()
2093 if (connp->conn_proto == IPPROTO_ICMPV6 || in icmp_do_opt_set()
2104 mutex_enter(&connp->conn_lock); in icmp_do_opt_set()
2114 mutex_exit(&connp->conn_lock); in icmp_do_opt_set()
2123 if (connp->conn_family != AF_INET6) in icmp_do_opt_set()
2125 if (connp->conn_proto != IPPROTO_ICMPV6) in icmp_do_opt_set()
2137 mutex_enter(&connp->conn_lock); in icmp_do_opt_set()
2150 mutex_exit(&connp->conn_lock); in icmp_do_opt_set()
2156 mutex_exit(&connp->conn_lock); in icmp_do_opt_set()
2170 icmp_opt_set(conn_t *connp, uint_t optset_context, int level, int name, in icmp_opt_set() argument
2174 icmp_t *icmp = connp->conn_icmp; in icmp_opt_set()
2228 ASSERT(coa->coa_connp == connp); in icmp_opt_set()
2234 coas.coa_connp = connp; in icmp_opt_set()
2236 coas.coa_ixa = conn_get_ixa(connp, B_TRUE); in icmp_opt_set()
2241 coas.coa_ipp = &connp->conn_xmit_ipp; in icmp_opt_set()
2287 mutex_enter(&connp->conn_lock); in icmp_opt_set()
2288 connp->conn_v6lastdst = ipv6_all_zeros; in icmp_opt_set()
2291 &connp->conn_faddr_v6, &nexthop); in icmp_opt_set()
2292 saddr = connp->conn_saddr_v6; in icmp_opt_set()
2293 faddr = connp->conn_faddr_v6; in icmp_opt_set()
2294 fport = connp->conn_fport; in icmp_opt_set()
2295 mutex_exit(&connp->conn_lock); in icmp_opt_set()
2299 (void) ip_attr_connect(connp, coa->coa_ixa, in icmp_opt_set()
2313 mutex_enter(&connp->conn_lock); in icmp_opt_set()
2314 if (!IN6_IS_ADDR_UNSPECIFIED(&connp->conn_faddr_v6) && in icmp_opt_set()
2315 !IN6_IS_ADDR_V4MAPPED_ANY(&connp->conn_faddr_v6)) { in icmp_opt_set()
2316 err = icmp_build_hdr_template(connp, in icmp_opt_set()
2317 &connp->conn_saddr_v6, &connp->conn_faddr_v6, in icmp_opt_set()
2318 connp->conn_flowinfo); in icmp_opt_set()
2320 mutex_exit(&connp->conn_lock); in icmp_opt_set()
2324 connp->conn_v6lastdst = ipv6_all_zeros; in icmp_opt_set()
2326 mutex_exit(&connp->conn_lock); in icmp_opt_set()
2329 (void) proto_set_rx_hiwat(connp->conn_rq, connp, in icmp_opt_set()
2330 connp->conn_rcvbuf); in icmp_opt_set()
2332 if ((coa->coa_changed & COA_SNDBUF_CHANGED) && !IPCL_IS_NONSTR(connp)) { in icmp_opt_set()
2333 connp->conn_wq->q_hiwat = connp->conn_sndbuf; in icmp_opt_set()
2339 mutex_enter(&connp->conn_lock); in icmp_opt_set()
2340 wroff = connp->conn_ht_iphc_allocated + is->is_wroff_extra; in icmp_opt_set()
2341 if (wroff > connp->conn_wroff) { in icmp_opt_set()
2342 connp->conn_wroff = wroff; in icmp_opt_set()
2343 mutex_exit(&connp->conn_lock); in icmp_opt_set()
2344 (void) proto_set_tx_wroff(connp->conn_rq, connp, wroff); in icmp_opt_set()
2346 mutex_exit(&connp->conn_lock); in icmp_opt_set()
2361 conn_t *connp = Q_TO_CONN(q); in icmp_tpi_opt_set() local
2364 error = icmp_opt_set(connp, optset_context, level, name, inlen, invalp, in icmp_tpi_opt_set()
2376 icmp_prepend_hdr(conn_t *connp, ip_xmit_attr_t *ixa, const ip_pkt_t *ipp, in icmp_prepend_hdr() argument
2381 icmp_stack_t *is = connp->conn_netstack->netstack_icmp; in icmp_prepend_hdr()
2386 mp = conn_prepend_hdr(ixa, ipp, v6src, v6dst, connp->conn_proto, in icmp_prepend_hdr()
2423 if (connp->conn_proto == IPPROTO_ICMPV6) { in icmp_prepend_hdr()
2458 icmp_build_hdr_template(conn_t *connp, const in6_addr_t *v6src, in icmp_build_hdr_template() argument
2463 ASSERT(MUTEX_HELD(&connp->conn_lock)); in icmp_build_hdr_template()
2468 connp->conn_v6lastdst = ipv6_all_zeros; in icmp_build_hdr_template()
2470 error = conn_build_hdr_template(connp, 0, 0, v6src, v6dst, flowinfo); in icmp_build_hdr_template()
2512 icmp_ulp_recv(conn_t *connp, mblk_t *mp, uint_t len) in icmp_ulp_recv() argument
2514 if (IPCL_IS_NONSTR(connp)) { in icmp_ulp_recv()
2515 icmp_t *icmp = connp->conn_icmp; in icmp_ulp_recv()
2519 if ((*connp->conn_upcalls->su_recv) in icmp_ulp_recv()
2520 (connp->conn_upper_handle, mp, len, 0, &error, NULL) < 0) { in icmp_ulp_recv()
2526 if ((*connp->conn_upcalls->su_recv) in icmp_ulp_recv()
2527 (connp->conn_upper_handle, NULL, 0, 0, in icmp_ulp_recv()
2531 connp->conn_flow_cntrld = in icmp_ulp_recv()
2541 putnext(connp->conn_rq, mp); in icmp_ulp_recv()
2546 putnext(connp->conn_rq, mp); in icmp_ulp_recv()
2559 conn_t *connp = (conn_t *)arg1; in icmp_input() local
2575 ASSERT(connp->conn_flags & IPCL_RAWIPCONN); in icmp_input()
2577 icmp = connp->conn_icmp; in icmp_input()
2591 mutex_enter(&connp->conn_lock); in icmp_input()
2592 recv_ancillary = connp->conn_recv_ancillary; in icmp_input()
2593 mutex_exit(&connp->conn_lock); in icmp_input()
2648 ASSERT(connp->conn_family == AF_INET); in icmp_input()
2662 udi_size += conn_recvancillary_size(connp, in icmp_input()
2695 conn_recvancillary_add(connp, recv_ancillary, ira, in icmp_input()
2707 ASSERT(connp->conn_family == AF_INET6); in icmp_input()
2742 mutex_enter(&connp->conn_lock); in icmp_input()
2751 mutex_exit(&connp->conn_lock); in icmp_input()
2756 if (connp->conn_ixa->ixa_flags & IXAF_SET_RAW_CKSUM) { in icmp_input()
2765 sum = htons(connp->conn_proto + remlen) in icmp_input()
2775 mutex_exit(&connp->conn_lock); in icmp_input()
2781 mutex_exit(&connp->conn_lock); in icmp_input()
2786 udi_size += conn_recvancillary_size(connp, in icmp_input()
2820 IPCL_ZONEID(connp), is->is_netstack); in icmp_input()
2823 conn_recvancillary_add(connp, recv_ancillary, ira, in icmp_input()
2833 icmp_ulp_recv(connp, mp1, pkt_len); in icmp_input()
2845 conn_t *connp = Q_TO_CONN(q); in icmp_snmp_get() local
2846 icmp_stack_t *is = connp->conn_netstack->netstack_icmp; in icmp_snmp_get()
2936 rawip_do_unbind(conn_t *connp) in rawip_do_unbind() argument
2938 icmp_t *icmp = connp->conn_icmp; in rawip_do_unbind()
2940 mutex_enter(&connp->conn_lock); in rawip_do_unbind()
2943 mutex_exit(&connp->conn_lock); in rawip_do_unbind()
2946 connp->conn_saddr_v6 = ipv6_all_zeros; in rawip_do_unbind()
2947 connp->conn_bound_addr_v6 = ipv6_all_zeros; in rawip_do_unbind()
2948 connp->conn_laddr_v6 = ipv6_all_zeros; in rawip_do_unbind()
2949 connp->conn_mcbc_bind = B_FALSE; in rawip_do_unbind()
2950 connp->conn_lport = 0; in rawip_do_unbind()
2951 connp->conn_fport = 0; in rawip_do_unbind()
2953 connp->conn_faddr_v6 = ipv6_all_zeros; in rawip_do_unbind()
2954 connp->conn_v6lastdst = ipv6_all_zeros; in rawip_do_unbind()
2958 (void) icmp_build_hdr_template(connp, &connp->conn_saddr_v6, in rawip_do_unbind()
2959 &connp->conn_faddr_v6, connp->conn_flowinfo); in rawip_do_unbind()
2960 mutex_exit(&connp->conn_lock); in rawip_do_unbind()
2962 ip_unbind(connp); in rawip_do_unbind()
2973 conn_t *connp = Q_TO_CONN(q); in icmp_tpi_unbind() local
2977 error = rawip_do_unbind(connp); in icmp_tpi_unbind()
3013 icmp_output_hdrincl(conn_t *connp, mblk_t *mp, cred_t *cr, pid_t pid) in icmp_output_hdrincl() argument
3015 icmp_t *icmp = connp->conn_icmp; in icmp_output_hdrincl()
3035 ixa = conn_get_ixa_exclusive(connp); in icmp_output_hdrincl()
3061 ixa->ixa_cred = connp->conn_cred; /* Restore */ in icmp_output_hdrincl()
3062 ixa->ixa_cpid = connp->conn_cpid; in icmp_output_hdrincl()
3068 mutex_enter(&connp->conn_lock); in icmp_output_hdrincl()
3069 error = ip_pkt_copy(&connp->conn_xmit_ipp, ipp, KM_NOSLEEP); in icmp_output_hdrincl()
3070 mutex_exit(&connp->conn_lock); in icmp_output_hdrincl()
3126 error = ip_attr_connect(connp, ixa, &v6src, &v6dst, &v6nexthop, in icmp_output_hdrincl()
3127 connp->conn_fport, &v6src, NULL, IPDF_ALLOW_MCBC | IPDF_VERIFY_DST | in icmp_output_hdrincl()
3188 error = conn_update_label(connp, ixa, &v6dst, ipp); in icmp_output_hdrincl()
3206 mp = icmp_prepend_hdr(connp, ixa, ipp, &v6src, &v6dst, 0, mp, &error); in icmp_output_hdrincl()
3267 mp = ip_output_attach_policy(mp, ipha, NULL, connp, ixa); in icmp_output_hdrincl()
3284 (void) ixa_check_drain_insert(connp, ixa); in icmp_output_hdrincl()
3297 ixa->ixa_cred = connp->conn_cred; /* Restore */ in icmp_output_hdrincl()
3298 ixa->ixa_cpid = connp->conn_cpid; in icmp_output_hdrincl()
3306 icmp_output_attach_policy(mblk_t *mp, conn_t *connp, ip_xmit_attr_t *ixa) in icmp_output_attach_policy() argument
3321 return (ip_output_attach_policy(mp, ipha, ip6h, connp, ixa)); in icmp_output_attach_policy()
3332 icmp_output_ancillary(conn_t *connp, sin_t *sin, sin6_t *sin6, mblk_t *mp, in icmp_output_ancillary() argument
3335 icmp_t *icmp = connp->conn_icmp; in icmp_output_ancillary()
3357 ixa = conn_get_ixa_exclusive(connp); in icmp_output_ancillary()
3379 ixa->ixa_cred = connp->conn_cred; /* Restore */ in icmp_output_ancillary()
3380 ixa->ixa_cpid = connp->conn_cpid; in icmp_output_ancillary()
3386 mutex_enter(&connp->conn_lock); in icmp_output_ancillary()
3387 error = ip_pkt_copy(&connp->conn_xmit_ipp, ipp, KM_NOSLEEP); in icmp_output_ancillary()
3388 mutex_exit(&connp->conn_lock); in icmp_output_ancillary()
3400 coa->coa_connp = connp; in icmp_output_ancillary()
3407 error = process_auxiliary_options(connp, msg->msg_control, in icmp_output_ancillary()
3414 error = tpi_optcom_buf(connp->conn_wq, tudr_mp, in icmp_output_ancillary()
3429 mutex_enter(&connp->conn_lock); in icmp_output_ancillary()
3439 v6src = connp->conn_saddr_v6; in icmp_output_ancillary()
3466 if (!ip_srcid_find_id(srcid, &v6src, IPCL_ZONEID(connp), in icmp_output_ancillary()
3467 v4mapped, connp->conn_netstack)) { in icmp_output_ancillary()
3469 mutex_exit(&connp->conn_lock); in icmp_output_ancillary()
3476 v6dst = connp->conn_faddr_v6; in icmp_output_ancillary()
3477 flowinfo = connp->conn_flowinfo; in icmp_output_ancillary()
3479 mutex_exit(&connp->conn_lock); in icmp_output_ancillary()
3512 error = ip_attr_connect(connp, ixa, &v6src, &v6dst, &v6nexthop, dstport, in icmp_output_ancillary()
3572 error = conn_update_label(connp, ixa, &v6dst, ipp); in icmp_output_ancillary()
3579 mp = icmp_prepend_hdr(connp, ixa, ipp, &v6src, &v6dst, flowinfo, mp, in icmp_output_ancillary()
3594 mp = icmp_output_attach_policy(mp, connp, ixa); in icmp_output_ancillary()
3605 if (!connp->conn_unspec_src) in icmp_output_ancillary()
3612 (void) ixa_check_drain_insert(connp, ixa); in icmp_output_ancillary()
3623 mutex_enter(&connp->conn_lock); in icmp_output_ancillary()
3628 if (connp->conn_mcbc_bind) in icmp_output_ancillary()
3629 connp->conn_saddr_v6 = ipv6_all_zeros; in icmp_output_ancillary()
3631 connp->conn_saddr_v6 = connp->conn_bound_addr_v6; in icmp_output_ancillary()
3632 connp->conn_v6lastdst = ipv6_all_zeros; in icmp_output_ancillary()
3633 mutex_exit(&connp->conn_lock); in icmp_output_ancillary()
3638 ixa->ixa_cred = connp->conn_cred; /* Restore */ in icmp_output_ancillary()
3639 ixa->ixa_cpid = connp->conn_cpid; in icmp_output_ancillary()
3651 icmp_output_connected(conn_t *connp, mblk_t *mp, cred_t *cr, pid_t pid) in icmp_output_connected() argument
3653 icmp_t *icmp = connp->conn_icmp; in icmp_output_connected()
3663 ixa = conn_get_ixa(connp, B_FALSE); in icmp_output_connected()
3685 mutex_enter(&connp->conn_lock); in icmp_output_connected()
3686 mp = icmp_prepend_header_template(connp, ixa, mp, in icmp_output_connected()
3687 &connp->conn_saddr_v6, connp->conn_flowinfo, &error); in icmp_output_connected()
3691 mutex_exit(&connp->conn_lock); in icmp_output_connected()
3693 ixa->ixa_cred = connp->conn_cred; /* Restore */ in icmp_output_connected()
3694 ixa->ixa_cpid = connp->conn_cpid; in icmp_output_connected()
3703 mp = icmp_output_attach_policy(mp, connp, ixa); in icmp_output_connected()
3705 mutex_exit(&connp->conn_lock); in icmp_output_connected()
3708 ixa->ixa_cred = connp->conn_cred; /* Restore */ in icmp_output_connected()
3709 ixa->ixa_cpid = connp->conn_cpid; in icmp_output_connected()
3724 saddr = connp->conn_saddr_v6; in icmp_output_connected()
3725 faddr = connp->conn_faddr_v6; in icmp_output_connected()
3726 fport = connp->conn_fport; in icmp_output_connected()
3727 ip_attr_nexthop(&connp->conn_xmit_ipp, ixa, &faddr, &nexthop); in icmp_output_connected()
3728 mutex_exit(&connp->conn_lock); in icmp_output_connected()
3730 error = ip_attr_connect(connp, ixa, &saddr, &faddr, &nexthop, in icmp_output_connected()
3765 ixa->ixa_cred = connp->conn_cred; /* Restore */ in icmp_output_connected()
3766 ixa->ixa_cpid = connp->conn_cpid; in icmp_output_connected()
3774 mutex_exit(&connp->conn_lock); in icmp_output_connected()
3786 (void) ixa_check_drain_insert(connp, ixa); in icmp_output_connected()
3798 ixa->ixa_cred = connp->conn_cred; /* Restore */ in icmp_output_connected()
3799 ixa->ixa_cpid = connp->conn_cpid; in icmp_output_connected()
3811 icmp_output_lastdst(conn_t *connp, mblk_t *mp, cred_t *cr, pid_t pid, in icmp_output_lastdst() argument
3814 icmp_t *icmp = connp->conn_icmp; in icmp_output_lastdst()
3819 ASSERT(MUTEX_HELD(&connp->conn_lock)); in icmp_output_lastdst()
3838 mp = icmp_prepend_header_template(connp, ixa, mp, in icmp_output_lastdst()
3839 &connp->conn_v6lastsrc, connp->conn_lastflowinfo, &error); in icmp_output_lastdst()
3843 mutex_exit(&connp->conn_lock); in icmp_output_lastdst()
3845 ixa->ixa_cred = connp->conn_cred; /* Restore */ in icmp_output_lastdst()
3846 ixa->ixa_cpid = connp->conn_cpid; in icmp_output_lastdst()
3855 mp = icmp_output_attach_policy(mp, connp, ixa); in icmp_output_lastdst()
3857 mutex_exit(&connp->conn_lock); in icmp_output_lastdst()
3860 ixa->ixa_cred = connp->conn_cred; /* Restore */ in icmp_output_lastdst()
3861 ixa->ixa_cpid = connp->conn_cpid; in icmp_output_lastdst()
3876 lastsrc = connp->conn_v6lastsrc; in icmp_output_lastdst()
3877 lastdst = connp->conn_v6lastdst; in icmp_output_lastdst()
3878 lastport = connp->conn_lastdstport; in icmp_output_lastdst()
3879 ip_attr_nexthop(&connp->conn_xmit_ipp, ixa, &lastdst, &nexthop); in icmp_output_lastdst()
3880 mutex_exit(&connp->conn_lock); in icmp_output_lastdst()
3882 error = ip_attr_connect(connp, ixa, &lastsrc, &lastdst, in icmp_output_lastdst()
3917 ixa->ixa_cred = connp->conn_cred; /* Restore */ in icmp_output_lastdst()
3918 ixa->ixa_cpid = connp->conn_cpid; in icmp_output_lastdst()
3926 mutex_exit(&connp->conn_lock); in icmp_output_lastdst()
3937 (void) ixa_check_drain_insert(connp, ixa); in icmp_output_lastdst()
3948 mutex_enter(&connp->conn_lock); in icmp_output_lastdst()
3953 if (connp->conn_mcbc_bind) in icmp_output_lastdst()
3954 connp->conn_saddr_v6 = ipv6_all_zeros; in icmp_output_lastdst()
3956 connp->conn_saddr_v6 = connp->conn_bound_addr_v6; in icmp_output_lastdst()
3957 connp->conn_v6lastdst = ipv6_all_zeros; in icmp_output_lastdst()
3958 mutex_exit(&connp->conn_lock); in icmp_output_lastdst()
3962 ixa->ixa_cred = connp->conn_cred; /* Restore */ in icmp_output_lastdst()
3963 ixa->ixa_cpid = connp->conn_cpid; in icmp_output_lastdst()
3978 icmp_prepend_header_template(conn_t *connp, ip_xmit_attr_t *ixa, mblk_t *mp, in icmp_prepend_header_template() argument
3981 icmp_t *icmp = connp->conn_icmp; in icmp_prepend_header_template()
3990 ASSERT(MUTEX_HELD(&connp->conn_lock)); in icmp_prepend_header_template()
3995 copylen = connp->conn_ht_iphc_len; in icmp_prepend_header_template()
4021 bcopy(connp->conn_ht_iphc, iph, copylen); in icmp_prepend_header_template()
4022 ip_hdr_length = (uint_t)(connp->conn_ht_ulp - connp->conn_ht_iphc); in icmp_prepend_header_template()
4038 cksum += connp->conn_sum; in icmp_prepend_header_template()
4042 ipp = &connp->conn_xmit_ipp; in icmp_prepend_header_template()
4080 if (connp->conn_proto == IPPROTO_ICMPV6) { in icmp_prepend_header_template()
4125 conn_t *connp = Q_TO_CONN(q); in icmp_wput() local
4126 icmp_t *icmp = connp->conn_icmp; in icmp_wput()
4202 switch (connp->conn_family) { in icmp_wput()
4225 if (IN6_IS_ADDR_V4MAPPED(&connp->conn_saddr_v6)) { in icmp_wput()
4239 !conn_same_as_last_v6(connp, sin6)) { in icmp_wput()
4243 error = icmp_output_ancillary(connp, NULL, sin6, in icmp_wput()
4254 ixa = conn_get_ixa(connp, B_FALSE); in icmp_wput()
4259 mutex_enter(&connp->conn_lock); in icmp_wput()
4261 if (conn_same_as_last_v6(connp, sin6) && in icmp_wput()
4262 connp->conn_lastsrcid == srcid && in icmp_wput()
4265 error = icmp_output_lastdst(connp, data_mp, cr, in icmp_wput()
4269 error = icmp_output_newdst(connp, data_mp, NULL, in icmp_wput()
4272 ASSERT(MUTEX_NOT_HELD(&connp->conn_lock)); in icmp_wput()
4299 error = icmp_output_hdrincl(connp, data_mp, cr, pid); in icmp_wput()
4315 !conn_same_as_last_v4(connp, sin)) { in icmp_wput()
4319 error = icmp_output_ancillary(connp, sin, NULL, in icmp_wput()
4330 ixa = conn_get_ixa(connp, B_FALSE); in icmp_wput()
4335 mutex_enter(&connp->conn_lock); in icmp_wput()
4337 if (conn_same_as_last_v4(connp, sin) && in icmp_wput()
4340 error = icmp_output_lastdst(connp, data_mp, cr, in icmp_wput()
4344 error = icmp_output_newdst(connp, data_mp, sin, in icmp_wput()
4347 ASSERT(MUTEX_NOT_HELD(&connp->conn_lock)); in icmp_wput()
4375 icmp_output_newdst(conn_t *connp, mblk_t *data_mp, sin_t *sin, sin6_t *sin6, in icmp_output_newdst() argument
4378 icmp_t *icmp = connp->conn_icmp; in icmp_output_newdst()
4390 ASSERT(MUTEX_HELD(&connp->conn_lock)); in icmp_output_newdst()
4413 mutex_exit(&connp->conn_lock); in icmp_output_newdst()
4430 v6src = connp->conn_saddr_v6; in icmp_output_newdst()
4458 if (!ip_srcid_find_id(srcid, &v6src, IPCL_ZONEID(connp), in icmp_output_newdst()
4459 v4mapped, connp->conn_netstack)) { in icmp_output_newdst()
4461 mutex_exit(&connp->conn_lock); in icmp_output_newdst()
4468 if (connp->conn_xmit_ipp.ipp_fields & IPPF_ADDR) { in icmp_output_newdst()
4469 ip_pkt_t *ipp = &connp->conn_xmit_ipp; in icmp_output_newdst()
4490 ip_attr_nexthop(&connp->conn_xmit_ipp, ixa, &v6dst, &v6nexthop); in icmp_output_newdst()
4491 mutex_exit(&connp->conn_lock); in icmp_output_newdst()
4493 error = ip_attr_connect(connp, ixa, &v6src, &v6dst, &v6nexthop, dstport, in icmp_output_newdst()
4530 mutex_enter(&connp->conn_lock); in icmp_output_newdst()
4538 mutex_exit(&connp->conn_lock); in icmp_output_newdst()
4557 if (connp->conn_mlp_type != mlptSingle) { in icmp_output_newdst()
4558 mutex_exit(&connp->conn_lock); in icmp_output_newdst()
4574 error = conn_update_label(connp, ixa, &v6dst, in icmp_output_newdst()
4575 &connp->conn_xmit_ipp); in icmp_output_newdst()
4577 mutex_exit(&connp->conn_lock); in icmp_output_newdst()
4581 error = icmp_build_hdr_template(connp, &v6src, &v6dst, in icmp_output_newdst()
4584 mutex_exit(&connp->conn_lock); in icmp_output_newdst()
4587 } else if (connp->conn_xmit_ipp.ipp_fields & in icmp_output_newdst()
4589 IN6_IS_ADDR_UNSPECIFIED(&connp->conn_v6lastdst)) { in icmp_output_newdst()
4591 error = icmp_build_hdr_template(connp, &v6src, &v6dst, in icmp_output_newdst()
4594 mutex_exit(&connp->conn_lock); in icmp_output_newdst()
4600 ipha_t *ipha = (ipha_t *)connp->conn_ht_iphc; in icmp_output_newdst()
4611 ip6_t *ip6h = (ip6_t *)connp->conn_ht_iphc; in icmp_output_newdst()
4620 oldixa = conn_replace_ixa(connp, ixa); in icmp_output_newdst()
4621 connp->conn_v6lastdst = v6dst; in icmp_output_newdst()
4622 connp->conn_lastflowinfo = flowinfo; in icmp_output_newdst()
4623 connp->conn_lastscopeid = ixa->ixa_scopeid; in icmp_output_newdst()
4624 connp->conn_lastsrcid = srcid; in icmp_output_newdst()
4626 connp->conn_v6lastsrc = v6src; in icmp_output_newdst()
4628 data_mp = icmp_prepend_header_template(connp, ixa, data_mp, &v6src, in icmp_output_newdst()
4632 mutex_exit(&connp->conn_lock); in icmp_output_newdst()
4642 data_mp = icmp_output_attach_policy(data_mp, connp, ixa); in icmp_output_newdst()
4659 (void) ixa_check_drain_insert(connp, ixa); in icmp_output_newdst()
4670 mutex_enter(&connp->conn_lock); in icmp_output_newdst()
4675 if (connp->conn_mcbc_bind) in icmp_output_newdst()
4676 connp->conn_saddr_v6 = ipv6_all_zeros; in icmp_output_newdst()
4678 connp->conn_saddr_v6 = connp->conn_bound_addr_v6; in icmp_output_newdst()
4679 connp->conn_v6lastdst = ipv6_all_zeros; in icmp_output_newdst()
4680 mutex_exit(&connp->conn_lock); in icmp_output_newdst()
4685 ixa->ixa_cred = connp->conn_cred; /* Restore */ in icmp_output_newdst()
4686 ixa->ixa_cpid = connp->conn_cpid; in icmp_output_newdst()
4692 ixa->ixa_cred = connp->conn_cred; /* Restore */ in icmp_output_newdst()
4693 ixa->ixa_cpid = connp->conn_cpid; in icmp_output_newdst()
4716 conn_t *connp = Q_TO_CONN(q); in icmp_wput_other() local
4717 icmp_t *icmp = connp->conn_icmp; in icmp_wput_other()
4872 conn_t *connp = Q_TO_CONN(q); in icmp_wput_iocdata() local
4873 icmp_t *icmp = connp->conn_icmp; in icmp_wput_iocdata()
4922 if (connp->conn_family == AF_INET) in icmp_wput_iocdata()
4951 (void) conn_getsockname(connp, (struct sockaddr *)mp1->b_wptr, in icmp_wput_iocdata()
4955 (void) conn_getpeername(connp, (struct sockaddr *)mp1->b_wptr, in icmp_wput_iocdata()
5112 conn_t *connp = (conn_t *)proto_handle; in rawip_bind() local
5120 error = rawip_do_unbind(connp); in rawip_bind()
5122 error = rawip_do_bind(connp, sa, len); in rawip_bind()
5134 rawip_implicit_bind(conn_t *connp) in rawip_implicit_bind() argument
5142 if (connp->conn_family == AF_INET) { in rawip_implicit_bind()
5149 ASSERT(connp->conn_family == AF_INET6); in rawip_implicit_bind()
5157 error = rawip_do_bind(connp, (struct sockaddr *)&sin6addr, len); in rawip_implicit_bind()
5163 rawip_unbind(conn_t *connp) in rawip_unbind() argument
5167 error = rawip_do_unbind(connp); in rawip_unbind()
5185 conn_t *connp = (conn_t *)proto_handle; in rawip_connect() local
5186 icmp_t *icmp = connp->conn_icmp; in rawip_connect()
5202 error = icmp_disconnect(connp); in rawip_connect()
5206 error = proto_verify_ip_addr(connp->conn_family, sa, len); in rawip_connect()
5212 error = rawip_implicit_bind(connp); in rawip_connect()
5226 connp->conn_dgram_errind = B_TRUE; in rawip_connect()
5228 error = rawip_do_connect(connp, sa, len, cr, pid); in rawip_connect()
5232 unbind_err = rawip_unbind(connp); in rawip_connect()
5238 (*connp->conn_upcalls->su_connected)(connp->conn_upper_handle, in rawip_connect()
5252 conn_t *connp = (conn_t *)proto_handle; in rawip_fallback() local
5262 icmp = connp->conn_icmp; in rawip_fallback()
5269 connp->conn_dev = (dev_t)RD(q)->q_ptr; in rawip_fallback()
5270 connp->conn_minor_arena = WR(q)->q_ptr; in rawip_fallback()
5272 RD(q)->q_ptr = WR(q)->q_ptr = connp; in rawip_fallback()
5276 connp->conn_rq = RD(q); in rawip_fallback()
5277 connp->conn_wq = WR(q); in rawip_fallback()
5284 stropt->so_wroff = connp->conn_wroff; in rawip_fallback()
5285 stropt->so_hiwat = connp->conn_rcvbuf; in rawip_fallback()
5291 ip_free_helper_stream(connp); in rawip_fallback()
5299 (void) rawip_getsockname((sock_lower_handle_t)connp, in rawip_fallback()
5301 error = rawip_getpeername((sock_lower_handle_t)connp, in rawip_fallback()
5306 if (connp->conn_dgram_errind) in rawip_fallback()
5308 if (connp->conn_ixa->ixa_flags & IXAF_DONTROUTE) in rawip_fallback()
5311 mp = (*quiesced_cb)(connp->conn_upper_handle, arg, &tca, in rawip_fallback()
5337 mutex_enter(&connp->conn_lock); in rawip_fallback()
5338 connp->conn_flags &= ~IPCL_NONSTR; in rawip_fallback()
5339 mutex_exit(&connp->conn_lock); in rawip_fallback()
5346 ASSERT(connp->conn_ref >= 1); in rawip_fallback()
5356 conn_t *connp; in rawip_create() local
5363 connp = rawip_do_open(family, credp, errorp, flags); in rawip_create()
5364 if (connp != NULL) { in rawip_create()
5365 connp->conn_flags |= IPCL_NONSTR; in rawip_create()
5367 mutex_enter(&connp->conn_lock); in rawip_create()
5368 connp->conn_state_flags &= ~CONN_INCIPIENT; in rawip_create()
5369 mutex_exit(&connp->conn_lock); in rawip_create()
5376 return ((sock_lower_handle_t)connp); in rawip_create()
5385 conn_t *connp = (conn_t *)proto_handle; in rawip_activate() local
5391 connp->conn_upcalls = sock_upcalls; in rawip_activate()
5392 connp->conn_upper_handle = sock_handle; in rawip_activate()
5396 sopp.sopp_wroff = connp->conn_wroff; in rawip_activate()
5397 sopp.sopp_rxhiwat = connp->conn_rcvbuf; in rawip_activate()
5398 sopp.sopp_rxlowat = connp->conn_rcvlowat; in rawip_activate()
5404 (*connp->conn_upcalls->su_set_proto_props) in rawip_activate()
5405 (connp->conn_upper_handle, &sopp); in rawip_activate()
5407 icmp_bind_proto(connp->conn_icmp); in rawip_activate()
5415 conn_t *connp = (conn_t *)proto_handle; in rawip_getpeername() local
5416 icmp_t *icmp = connp->conn_icmp; in rawip_getpeername()
5422 mutex_enter(&connp->conn_lock); in rawip_getpeername()
5426 error = conn_getpeername(connp, sa, salenp); in rawip_getpeername()
5427 mutex_exit(&connp->conn_lock); in rawip_getpeername()
5436 conn_t *connp = (conn_t *)proto_handle; in rawip_getsockname() local
5442 mutex_enter(&connp->conn_lock); in rawip_getsockname()
5443 error = conn_getsockname(connp, sa, salenp); in rawip_getsockname()
5444 mutex_exit(&connp->conn_lock); in rawip_getsockname()
5452 conn_t *connp = (conn_t *)proto_handle; in rawip_setsockopt() local
5473 error = icmp_opt_set(connp, SETFN_OPTCOM_NEGOTIATE, level, in rawip_setsockopt()
5487 conn_t *connp = (conn_t *)proto_handle; in rawip_getsockopt() local
5508 len = icmp_opt_get(connp, level, option_name, optvalp_buf); in rawip_getsockopt()
5530 conn_t *connp = (conn_t *)proto_handle; in rawip_close() local
5535 (void) rawip_do_close(connp); in rawip_close()
5543 conn_t *connp = (conn_t *)proto_handle; in rawip_shutdown() local
5550 (*connp->conn_upcalls->su_opctl)(connp->conn_upper_handle, in rawip_shutdown()
5554 (*connp->conn_upcalls->su_opctl)(connp->conn_upper_handle, in rawip_shutdown()
5562 conn_t *connp = (conn_t *)proto_handle; in rawip_clr_flowctrl() local
5563 icmp_t *icmp = connp->conn_icmp; in rawip_clr_flowctrl()
5566 connp->conn_flow_cntrld = B_FALSE; in rawip_clr_flowctrl()
5574 conn_t *connp = (conn_t *)proto_handle; in rawip_ioctl() local
5585 if (connp->conn_helper_info == NULL) { in rawip_ioctl()
5586 icmp_stack_t *is = connp->conn_icmp->icmp_is; in rawip_ioctl()
5593 error = ip_create_helper_stream(connp, is->is_ldi_ident); in rawip_ioctl()
5615 error = ldi_ioctl(connp->conn_helper_info->iphs_handle, in rawip_ioctl()
5629 conn_t *connp = (conn_t *)proto_handle; in rawip_send() local
5630 icmp_t *icmp = connp->conn_icmp; in rawip_send()
5643 error = rawip_implicit_bind(connp); in rawip_send()
5658 ASSERT(connp->conn_ipversion == IPV4_VERSION); in rawip_send()
5666 error = icmp_output_hdrincl(connp, mp, cr, pid); in rawip_send()
5680 error = icmp_output_ancillary(connp, NULL, NULL, mp, in rawip_send()
5683 error = icmp_output_connected(connp, mp, cr, pid); in rawip_send()
5694 error = proto_verify_ip_addr(connp->conn_family, in rawip_send()
5700 switch (connp->conn_family) { in rawip_send()
5718 if (IN6_IS_ADDR_V4MAPPED(&connp->conn_saddr_v6)) { in rawip_send()
5733 ixa = conn_get_ixa(connp, B_FALSE); in rawip_send()
5741 mutex_enter(&connp->conn_lock); in rawip_send()
5753 mutex_exit(&connp->conn_lock); in rawip_send()
5761 mutex_exit(&connp->conn_lock); in rawip_send()
5763 error = icmp_output_ancillary(connp, NULL, sin6, mp, in rawip_send()
5765 } else if (conn_same_as_last_v6(connp, sin6) && in rawip_send()
5766 connp->conn_lastsrcid == srcid && in rawip_send()
5769 error = icmp_output_lastdst(connp, mp, cr, pid, ixa); in rawip_send()
5772 error = icmp_output_newdst(connp, mp, NULL, sin6, cr, in rawip_send()
5775 ASSERT(MUTEX_NOT_HELD(&connp->conn_lock)); in rawip_send()
5792 ixa = conn_get_ixa(connp, B_FALSE); in rawip_send()
5800 mutex_enter(&connp->conn_lock); in rawip_send()
5810 mutex_exit(&connp->conn_lock); in rawip_send()
5819 mutex_exit(&connp->conn_lock); in rawip_send()
5821 error = icmp_output_ancillary(connp, sin, NULL, mp, in rawip_send()
5823 } else if (conn_same_as_last_v4(connp, sin) && in rawip_send()
5826 error = icmp_output_lastdst(connp, mp, cr, pid, ixa); in rawip_send()
5829 error = icmp_output_newdst(connp, mp, sin, NULL, cr, in rawip_send()
5832 ASSERT(MUTEX_NOT_HELD(&connp->conn_lock)); in rawip_send()