Lines Matching refs:so
279 struct sonode *so; in sotpi_create() local
306 so = kmem_cache_alloc(cp, KM_SLEEP); in sotpi_create()
307 if (so == NULL) { in sotpi_create()
312 sonode_init(so, sp, family, type, protocol, &sotpi_sonodeops); in sotpi_create()
313 sotpi_info_init(so); in sotpi_create()
316 SOTOTPI(so)->sti_nl7c_flags = NL7C_AF_NCA; in sotpi_create()
322 so->so_version = (short)version; in sotpi_create()
325 return (so); in sotpi_create()
329 sotpi_destroy(struct sonode *so) in sotpi_destroy() argument
339 ASSERT(so->so_ops == &sotpi_sonodeops); in sotpi_destroy()
341 origsp = SOTOTPI(so)->sti_orig_sp; in sotpi_destroy()
343 sotpi_info_fini(so); in sotpi_destroy()
345 if (so->so_state & SS_FALLBACK_COMP) { in sotpi_destroy()
352 sotpi_info_destroy(so); in sotpi_destroy()
355 origsp->sp_smod_info->smod_sock_destroy_func(so); in sotpi_destroy()
358 sonode_fini(so); in sotpi_destroy()
359 cp = (so->so_family == AF_UNIX) ? socktpi_unix_cache : in sotpi_destroy()
361 kmem_cache_free(cp, so); in sotpi_destroy()
367 sotpi_init(struct sonode *so, struct sonode *tso, struct cred *cr, int flags) in sotpi_init() argument
375 sotpi_info_t *sti = SOTOTPI(so); in sotpi_init()
389 so->so_flag |= SOCLONE; in sotpi_init()
391 if ((so->so_type == SOCK_STREAM || so->so_type == SOCK_DGRAM) && in sotpi_init()
392 (so->so_family == AF_INET || so->so_family == AF_INET6) && in sotpi_init()
393 (so->so_protocol == IPPROTO_TCP || so->so_protocol == IPPROTO_UDP || in sotpi_init()
394 so->so_protocol == IPPROTO_IP)) { in sotpi_init()
405 ASSERT(so->so_type != SOCK_DGRAM || tso == NULL); in sotpi_init()
406 if (so->so_type == SOCK_STREAM && tso != NULL) { in sotpi_init()
430 if (so->so_family == AF_UNIX) { in sotpi_init()
434 vp = SOTOV(so); in sotpi_init()
443 if (so->so_flag & SOCLONE) in sotpi_init()
445 mutex_enter(&so->so_lock); in sotpi_init()
448 mutex_exit(&so->so_lock); in sotpi_init()
455 (void) sotpi_close(so, flags, cr); in sotpi_init()
481 ASSERT(so->so_family == AF_INET || in sotpi_init()
482 so->so_family == AF_INET6); in sotpi_init()
483 ASSERT(so->so_protocol == IPPROTO_UDP || in sotpi_init()
484 so->so_protocol == IPPROTO_TCP || in sotpi_init()
485 so->so_protocol == IPPROTO_IP); in sotpi_init()
486 ASSERT(so->so_type == SOCK_DGRAM || in sotpi_init()
487 so->so_type == SOCK_STREAM); in sotpi_init()
515 (void) sotpi_close(so, flags, in sotpi_init()
530 if (error = so_strinit(so, tso)) { in sotpi_init()
531 (void) sotpi_close(so, flags, cr); in sotpi_init()
536 if (so->so_protocol != so->so_sockparams->sp_protocol) { in sotpi_init()
537 int protocol = so->so_protocol; in sotpi_init()
541 error = sotpi_setsockopt(so, SOL_SOCKET, SO_PROTOTYPE, in sotpi_init()
544 (void) sotpi_close(so, flags, cr); in sotpi_init()
567 (void) sotpi_close(so, flags, cr); in sotpi_init()
575 maj, vp, so, error); in sotpi_init()
585 so_automatic_bind(struct sonode *so) in so_automatic_bind() argument
587 sotpi_info_t *sti = SOTOTPI(so); in so_automatic_bind()
588 ASSERT(so->so_family == AF_INET || so->so_family == AF_INET6); in so_automatic_bind()
590 ASSERT(MUTEX_HELD(&so->so_lock)); in so_automatic_bind()
591 ASSERT(!(so->so_state & SS_ISBOUND)); in so_automatic_bind()
596 sti->sti_laddr_sa->sa_family = so->so_family; in so_automatic_bind()
597 so->so_state |= SS_ISBOUND; in so_automatic_bind()
625 sotpi_bindlisten(struct sonode *so, struct sockaddr *name, in sotpi_bindlisten() argument
641 sotpi_info_t *sti = SOTOTPI(so); in sotpi_bindlisten()
643 dprintso(so, 1, ("sotpi_bindlisten(%p, %p, %d, %d, 0x%x) %s\n", in sotpi_bindlisten()
644 (void *)so, (void *)name, namelen, backlog, flags, in sotpi_bindlisten()
645 pr_state(so->so_state, so->so_mode))); in sotpi_bindlisten()
647 tcp_udp_xport = so->so_type == SOCK_STREAM || so->so_type == SOCK_DGRAM; in sotpi_bindlisten()
650 mutex_enter(&so->so_lock); in sotpi_bindlisten()
651 so_lock_single(so); /* Set SOLOCKED */ in sotpi_bindlisten()
653 ASSERT(MUTEX_HELD(&so->so_lock)); in sotpi_bindlisten()
654 ASSERT(so->so_flag & SOLOCKED); in sotpi_bindlisten()
663 dprintso(so, 1, ("sobind: allocating unbind_req\n")); in sotpi_bindlisten()
677 if (so->so_family == AF_UNIX) { in sotpi_bindlisten()
681 dprintso(so, 1, ("sobind rebind UNIX: addrlen %d, " in sotpi_bindlisten()
697 if (so->so_state & SS_ISBOUND) { in sotpi_bindlisten()
703 switch (so->so_family) { in sotpi_bindlisten()
713 sti->sti_laddr_sa->sa_family = so->so_family; in sotpi_bindlisten()
732 sti->sti_laddr_len = (so->so_family == AF_INET) ? in sotpi_bindlisten()
737 sti->sti_laddr_sa->sa_family = so->so_family; in sotpi_bindlisten()
759 if (so->so_state & SS_ISBOUND) { in sotpi_bindlisten()
776 eprintsoline(so, error); in sotpi_bindlisten()
779 if ((so->so_mode & SM_CONNREQUIRED) && in sotpi_bindlisten()
780 (so->so_state & SS_CANTREBIND)) { in sotpi_bindlisten()
783 eprintsoline(so, error); in sotpi_bindlisten()
786 error = sotpi_unbind(so, 0); in sotpi_bindlisten()
788 eprintsoline(so, error); in sotpi_bindlisten()
791 ASSERT(!(so->so_state & SS_ISBOUND)); in sotpi_bindlisten()
793 so->so_state &= in sotpi_bindlisten()
800 if ((so->so_state & SS_CANTSENDMORE) && !xnet_skip_checks) { in sotpi_bindlisten()
809 switch (so->so_family) { in sotpi_bindlisten()
819 eprintsoline(so, error); in sotpi_bindlisten()
827 if (name->sa_family != so->so_family) { in sotpi_bindlisten()
835 eprintsoline(so, error); in sotpi_bindlisten()
839 error = name->sa_family != so->so_family ? in sotpi_bindlisten()
841 eprintsoline(so, error); in sotpi_bindlisten()
845 (name->sa_family != so->so_family)) { in sotpi_bindlisten()
853 eprintsoline(so, error); in sotpi_bindlisten()
866 name->sa_family = so->so_family; in sotpi_bindlisten()
876 eprintsoline(so, error); in sotpi_bindlisten()
880 error = name->sa_family != so->so_family ? in sotpi_bindlisten()
882 eprintsoline(so, error); in sotpi_bindlisten()
885 if (name->sa_family != so->so_family) { in sotpi_bindlisten()
891 eprintsoline(so, error); in sotpi_bindlisten()
924 eprintsoline(so, error); in sotpi_bindlisten()
932 eprintsoline(so, error); in sotpi_bindlisten()
944 switch (so->so_family) { in sotpi_bindlisten()
968 eprintsoline(so, error); in sotpi_bindlisten()
980 eprintsoline(so, error); in sotpi_bindlisten()
997 ASSERT(SOTOV(so)->v_stream); in sotpi_bindlisten()
999 vp->v_stream = SOTOV(so)->v_stream; in sotpi_bindlisten()
1013 dprintso(so, 1, ("sobind UNIX: addrlen %d, addr %p\n", in sotpi_bindlisten()
1028 if ((so->so_state & SS_ACCEPTCONN) == 0) in sotpi_bindlisten()
1030 save_so_backlog = so->so_backlog; in sotpi_bindlisten()
1032 so->so_state |= SS_ACCEPTCONN; in sotpi_bindlisten()
1033 so->so_backlog = backlog; in sotpi_bindlisten()
1044 (so->so_family == AF_INET || so->so_family == AF_INET6) && in sotpi_bindlisten()
1051 if (so->so_zoneid == GLOBAL_ZONEID) { in sotpi_bindlisten()
1070 (so->so_family == AF_INET || so->so_family == AF_INET6)) in sotpi_bindlisten()
1083 mutex_exit(&so->so_lock); in sotpi_bindlisten()
1085 error = kstrputmsg(SOTOV(so), mp, NULL, 0, 0, in sotpi_bindlisten()
1088 eprintsoline(so, error); in sotpi_bindlisten()
1089 mutex_enter(&so->so_lock); in sotpi_bindlisten()
1093 mutex_enter(&so->so_lock); in sotpi_bindlisten()
1094 error = sowaitprim(so, PRIM_type, T_BIND_ACK, in sotpi_bindlisten()
1097 eprintsoline(so, error); in sotpi_bindlisten()
1109 ASSERT(so->so_family == AF_UNIX); in sotpi_bindlisten()
1112 ASSERT(!(so->so_state & SS_ISBOUND) || (flags & _SOBIND_REBIND)); in sotpi_bindlisten()
1113 so->so_state |= SS_ISBOUND; in sotpi_bindlisten()
1123 addrlen = (t_uscalar_t)(so->so_family == AF_UNIX ? in sotpi_bindlisten()
1138 eprintsoline(so, error); in sotpi_bindlisten()
1200 eprintsoline(so, error); in sotpi_bindlisten()
1204 switch (so->so_family) { in sotpi_bindlisten()
1242 eprintsoline(so, error); in sotpi_bindlisten()
1253 if (so->so_family == AF_INET) { in sotpi_bindlisten()
1258 eprintsoline(so, error); in sotpi_bindlisten()
1269 eprintsoline(so, error); in sotpi_bindlisten()
1279 eprintsoline(so, error); in sotpi_bindlisten()
1280 eprintso(so, in sotpi_bindlisten()
1296 eprintsoline(so, error); in sotpi_bindlisten()
1319 switch (so->so_family) { in sotpi_bindlisten()
1347 nl7c_listener_addr(nl7c, so); in sotpi_bindlisten()
1356 so->so_state &= ~SS_ACCEPTCONN; in sotpi_bindlisten()
1358 so->so_backlog = save_so_backlog; in sotpi_bindlisten()
1360 if (unbind_on_err && so->so_state & SS_ISBOUND) { in sotpi_bindlisten()
1363 err = sotpi_unbind(so, 0); in sotpi_bindlisten()
1366 eprintsoline(so, error); in sotpi_bindlisten()
1368 ASSERT(!(so->so_state & SS_ISBOUND)); in sotpi_bindlisten()
1373 so_unlock_single(so, SOLOCKED); in sotpi_bindlisten()
1374 mutex_exit(&so->so_lock); in sotpi_bindlisten()
1376 ASSERT(MUTEX_HELD(&so->so_lock)); in sotpi_bindlisten()
1377 ASSERT(so->so_flag & SOLOCKED); in sotpi_bindlisten()
1384 sotpi_bind(struct sonode *so, struct sockaddr *name, socklen_t namelen, in sotpi_bind() argument
1388 return (sotpi_bindlisten(so, name, namelen, 0, flags, cr)); in sotpi_bind()
1391 return (sotpi_bindlisten(so, name, namelen, 1, flags, cr)); in sotpi_bind()
1401 sotpi_unbind(struct sonode *so, int flags) in sotpi_unbind() argument
1406 sotpi_info_t *sti = SOTOTPI(so); in sotpi_unbind()
1408 dprintso(so, 1, ("sotpi_unbind(%p, 0x%x) %s\n", in sotpi_unbind()
1409 (void *)so, flags, pr_state(so->so_state, so->so_mode))); in sotpi_unbind()
1411 ASSERT(MUTEX_HELD(&so->so_lock)); in sotpi_unbind()
1412 ASSERT(so->so_flag & SOLOCKED); in sotpi_unbind()
1414 if (!(so->so_state & SS_ISBOUND)) { in sotpi_unbind()
1416 eprintsoline(so, error); in sotpi_unbind()
1420 mutex_exit(&so->so_lock); in sotpi_unbind()
1426 (void) putnextctl1(strvp2wq(SOTOV(so)), M_FLUSH, FLUSHRW); in sotpi_unbind()
1431 error = kstrputmsg(SOTOV(so), mp, NULL, 0, 0, in sotpi_unbind()
1433 mutex_enter(&so->so_lock); in sotpi_unbind()
1435 eprintsoline(so, error); in sotpi_unbind()
1439 error = sowaitokack(so, T_UNBIND_REQ); in sotpi_unbind()
1441 eprintsoline(so, error); in sotpi_unbind()
1463 so->so_state &= ~(SS_ISBOUND|SS_ACCEPTCONN); in sotpi_unbind()
1469 ASSERT(MUTEX_HELD(&so->so_lock)); in sotpi_unbind()
1470 ASSERT(so->so_flag & SOLOCKED); in sotpi_unbind()
1482 sotpi_listen(struct sonode *so, int backlog, struct cred *cr) in sotpi_listen() argument
1485 sotpi_info_t *sti = SOTOTPI(so); in sotpi_listen()
1487 dprintso(so, 1, ("sotpi_listen(%p, %d) %s\n", in sotpi_listen()
1488 (void *)so, backlog, pr_state(so->so_state, so->so_mode))); in sotpi_listen()
1500 if (so->so_state & SS_ACCEPTCONN && in sotpi_listen()
1501 !((so->so_family == AF_INET || so->so_family == AF_INET6) && in sotpi_listen()
1506 if (so->so_state & SS_ISCONNECTED) in sotpi_listen()
1509 mutex_enter(&so->so_lock); in sotpi_listen()
1510 so_lock_single(so); /* Set SOLOCKED */ in sotpi_listen()
1516 if ((so->so_state & SS_ACCEPTCONN) && in sotpi_listen()
1517 so->so_backlog == backlog) in sotpi_listen()
1520 if (!(so->so_state & SS_ISBOUND)) { in sotpi_listen()
1524 if (so->so_family == AF_UNIX) { in sotpi_listen()
1528 error = sotpi_bindlisten(so, NULL, 0, backlog, in sotpi_listen()
1537 if (!((so->so_family == AF_INET || so->so_family == AF_INET6) && in sotpi_listen()
1540 error = sotpi_unbind(so, _SOUNBIND_REBIND); in sotpi_listen()
1544 error = sotpi_bindlisten(so, NULL, 0, backlog, in sotpi_listen()
1547 so->so_state |= SS_ACCEPTCONN; in sotpi_listen()
1548 so->so_backlog = backlog; in sotpi_listen()
1552 ASSERT(so->so_state & SS_ACCEPTCONN); in sotpi_listen()
1554 so_unlock_single(so, SOLOCKED); in sotpi_listen()
1555 mutex_exit(&so->so_lock); in sotpi_listen()
1568 sodisconnect(struct sonode *so, t_scalar_t seqno, int flags) in sodisconnect() argument
1574 dprintso(so, 1, ("sodisconnect(%p, %d, 0x%x) %s\n", in sodisconnect()
1575 (void *)so, seqno, flags, pr_state(so->so_state, so->so_mode))); in sodisconnect()
1578 mutex_enter(&so->so_lock); in sodisconnect()
1579 so_lock_single(so); /* Set SOLOCKED */ in sodisconnect()
1581 ASSERT(MUTEX_HELD(&so->so_lock)); in sodisconnect()
1582 ASSERT(so->so_flag & SOLOCKED); in sodisconnect()
1585 if (!(so->so_state & (SS_ISCONNECTED|SS_ISCONNECTING|SS_ACCEPTCONN))) { in sodisconnect()
1587 eprintsoline(so, error); in sodisconnect()
1591 mutex_exit(&so->so_lock); in sodisconnect()
1598 if (!(so->so_state & SS_ACCEPTCONN)) in sodisconnect()
1599 (void) putnextctl1(strvp2wq(SOTOV(so)), M_FLUSH, FLUSHW); in sodisconnect()
1605 error = kstrputmsg(SOTOV(so), mp, NULL, 0, 0, in sodisconnect()
1607 mutex_enter(&so->so_lock); in sodisconnect()
1609 eprintsoline(so, error); in sodisconnect()
1613 error = sowaitokack(so, T_DISCON_REQ); in sodisconnect()
1615 eprintsoline(so, error); in sodisconnect()
1624 so->so_state &= ~(SS_ISCONNECTED|SS_ISCONNECTING); in sodisconnect()
1625 SOTOTPI(so)->sti_laddr_valid = 0; in sodisconnect()
1626 SOTOTPI(so)->sti_faddr_valid = 0; in sodisconnect()
1629 so_unlock_single(so, SOLOCKED); in sodisconnect()
1630 mutex_exit(&so->so_lock); in sodisconnect()
1633 ASSERT(MUTEX_HELD(&so->so_lock)); in sodisconnect()
1634 ASSERT(so->so_flag & SOLOCKED); in sodisconnect()
1641 sotpi_accept(struct sonode *so, int fflag, struct cred *cr, in sotpi_accept() argument
1657 sotpi_info_t *sti = SOTOTPI(so); in sotpi_accept()
1660 dprintso(so, 1, ("sotpi_accept(%p, 0x%x, %p) %s\n", in sotpi_accept()
1661 (void *)so, fflag, (void *)nsop, in sotpi_accept()
1662 pr_state(so->so_state, so->so_mode))); in sotpi_accept()
1671 if ((so->so_state & SS_ACCEPTCONN) == 0) in sotpi_accept()
1674 if ((error = sowaitconnind(so, fflag, &mp)) != 0) in sotpi_accept()
1690 eprintsoline(so, error); in sotpi_accept()
1694 switch (so->so_family) { in sotpi_accept()
1720 (void) strioctl(SOTOV(so), _SIOCSOCKFALLBACK, in sotpi_accept()
1735 eprintsoline(so, error); in sotpi_accept()
1739 if (so->so_family == AF_UNIX) { in sotpi_accept()
1754 nso = socket_newconn(so, NULL, NULL, SOCKET_SLEEP, &error); in sotpi_accept()
1775 nso->so_options |= so->so_options & SO_DEBUG; in sotpi_accept()
1789 eprintsoline(so, error); in sotpi_accept()
1821 eprintsoline(so, error); in sotpi_accept()
1876 nso->so_pgrp = so->so_pgrp; in sotpi_accept()
1877 nso->so_state |= so->so_state & SS_ASYNC; in sotpi_accept()
1894 nso->so_options = so->so_options & (SO_DEBUG|SO_REUSEADDR|SO_KEEPALIVE| in sotpi_accept()
1897 nso->so_sndbuf = so->so_sndbuf; in sotpi_accept()
1898 nso->so_rcvbuf = so->so_rcvbuf; in sotpi_accept()
1900 nso->so_linger = so->so_linger; in sotpi_accept()
1923 mutex_enter(&so->so_lock); in sotpi_accept()
1924 so_lock_single(so); in sotpi_accept()
1925 eprintsoline(so, error); in sotpi_accept()
1933 mutex_enter(&so->so_lock); in sotpi_accept()
1934 so_lock_single(so); in sotpi_accept()
1935 eprintsoline(so, error); in sotpi_accept()
1970 if (so->so_state & (SS_NONBLOCK|SS_NDELAY)) { in sotpi_accept()
2006 mutex_enter(&so->so_lock); in sotpi_accept()
2007 so_lock_single(so); in sotpi_accept()
2008 eprintsoline(so, error); in sotpi_accept()
2064 mutex_enter(&so->so_lock); in sotpi_accept()
2065 so_lock_single(so); /* Set SOLOCKED */ in sotpi_accept()
2066 mutex_exit(&so->so_lock); in sotpi_accept()
2068 error = kstrputmsg(SOTOV(so), mp, NULL, in sotpi_accept()
2070 mutex_enter(&so->so_lock); in sotpi_accept()
2072 eprintsoline(so, error); in sotpi_accept()
2075 error = sowaitprim(so, PRIM_type, T_OK_ACK, in sotpi_accept()
2078 eprintsoline(so, error); in sotpi_accept()
2081 mutex_exit(&so->so_lock); in sotpi_accept()
2103 ASSERT(so->so_family == AF_UNIX); in sotpi_accept()
2120 mutex_enter(&so->so_lock); in sotpi_accept()
2121 so_unlock_single(so, SOLOCKED); in sotpi_accept()
2122 mutex_exit(&so->so_lock); in sotpi_accept()
2136 eprintsoline(so, error); in sotpi_accept()
2140 eprintsoline(so, error); in sotpi_accept()
2145 (void) sodisconnect(so, SEQ_number, 0); in sotpi_accept()
2149 eprintsoline(so, error); in sotpi_accept()
2151 (void) sodisconnect(so, SEQ_number, _SODISCONNECT_LOCK_HELD); in sotpi_accept()
2152 so_unlock_single(so, SOLOCKED); in sotpi_accept()
2153 mutex_exit(&so->so_lock); in sotpi_accept()
2159 error = (so->so_type == SOCK_DGRAM || so->so_type == SOCK_RAW) in sotpi_accept()
2162 eprintsoline(so, error); in sotpi_accept()
2173 sotpi_connect(struct sonode *so, in sotpi_connect() argument
2188 sotpi_info_t *sti = SOTOTPI(so); in sotpi_connect()
2190 dprintso(so, 1, ("sotpi_connect(%p, %p, %d, 0x%x, 0x%x) %s\n", in sotpi_connect()
2191 (void *)so, (void *)name, namelen, fflag, flags, in sotpi_connect()
2192 pr_state(so->so_state, so->so_mode))); in sotpi_connect()
2211 eprintsoline(so, error); in sotpi_connect()
2215 mutex_enter(&so->so_lock); in sotpi_connect()
2225 so_lock_single(so); /* Set SOLOCKED */ in sotpi_connect()
2229 dprintso(so, 1, ("sotpi_connect: allocating unbind_req\n")); in sotpi_connect()
2242 if (so->so_state & SS_ACCEPTCONN) { in sotpi_connect()
2250 if (!(so->so_state & SS_ISBOUND)) { in sotpi_connect()
2251 if ((so->so_family == AF_INET || so->so_family == AF_INET6) && in sotpi_connect()
2253 so->so_type == SOCK_STREAM && !soconnect_tpi_tcp) { in sotpi_connect()
2258 so_automatic_bind(so); in sotpi_connect()
2260 error = sotpi_bind(so, NULL, 0, in sotpi_connect()
2265 ASSERT(so->so_state & SS_ISBOUND); in sotpi_connect()
2287 if (so->so_state & (SS_ISCONNECTED|SS_ISCONNECTING)) { in sotpi_connect()
2289 if (so->so_mode & SM_CONNREQUIRED) { in sotpi_connect()
2291 error = so->so_state & SS_ISCONNECTED ? in sotpi_connect()
2304 if ((so->so_family == AF_INET || in sotpi_connect()
2305 so->so_family == AF_INET6) && in sotpi_connect()
2306 (so->so_type == SOCK_DGRAM || in sotpi_connect()
2307 so->so_type == SOCK_RAW) && in sotpi_connect()
2311 error = sodisconnect(so, -1, in sotpi_connect()
2314 so->so_state &= in sotpi_connect()
2321 so_unlock_single(so, SOLOCKED); in sotpi_connect()
2322 mutex_exit(&so->so_lock); in sotpi_connect()
2325 (void) sotpi_setsockopt(so, SOL_SOCKET, in sotpi_connect()
2329 mutex_enter(&so->so_lock); in sotpi_connect()
2330 so_lock_single(so); /* Set SOLOCKED */ in sotpi_connect()
2334 ASSERT(so->so_state & SS_ISBOUND); in sotpi_connect()
2347 ASSERT(so->so_family == AF_UNIX); in sotpi_connect()
2361 error = so_addr_verify(so, name, namelen); in sotpi_connect()
2379 if (so->so_family == AF_UNIX) { in sotpi_connect()
2397 dprintso(so, 1, in sotpi_connect()
2400 error = so_ux_addr_xlate(so, in sotpi_connect()
2427 if (!(so->so_mode & SM_CONNREQUIRED)) { in sotpi_connect()
2433 so_unlock_single(so, SOLOCKED); in sotpi_connect()
2434 mutex_exit(&so->so_lock); in sotpi_connect()
2437 (void) sotpi_setsockopt(so, SOL_SOCKET, SO_DGRAM_ERRIND, in sotpi_connect()
2440 mutex_enter(&so->so_lock); in sotpi_connect()
2441 so_lock_single(so); /* Set SOLOCKED */ in sotpi_connect()
2442 if ((so->so_family != AF_INET && so->so_family != AF_INET6) || in sotpi_connect()
2443 (so->so_type != SOCK_DGRAM && so->so_type != SOCK_RAW) || in sotpi_connect()
2445 soisconnected(so); in sotpi_connect()
2453 ASSERT(so->so_family != AF_UNIX); in sotpi_connect()
2461 switch (so->so_family) { in sotpi_connect()
2489 if (so->so_error != 0) in sotpi_connect()
2531 soisconnecting(so); in sotpi_connect()
2532 mutex_exit(&so->so_lock); in sotpi_connect()
2535 audit_sock(T_CONN_REQ, strvp2wq(SOTOV(so)), mp, 0); in sotpi_connect()
2537 error = kstrputmsg(SOTOV(so), mp, NULL, 0, 0, in sotpi_connect()
2540 mutex_enter(&so->so_lock); in sotpi_connect()
2544 if ((error = sowaitokack(so, T_CONN_REQ)) != 0) in sotpi_connect()
2548 so_unlock_single(so, SOLOCKED); in sotpi_connect()
2554 if ((error = sowaitconnected(so, fflag, 0)) != 0) { in sotpi_connect()
2555 so_lock_single(so); /* Set SOLOCKED */ in sotpi_connect()
2577 so->so_state &= ~SS_ISCONNECTING; in sotpi_connect()
2581 (so->so_state & SS_ISBOUND)) { in sotpi_connect()
2584 err = sotpi_unbind(so, 0); in sotpi_connect()
2587 eprintsoline(so, err); in sotpi_connect()
2593 so_unlock_single(so, SOLOCKED); in sotpi_connect()
2594 mutex_exit(&so->so_lock); in sotpi_connect()
2597 so_bad: error = sogeterr(so, B_TRUE); in sotpi_connect()
2598 bad: eprintsoline(so, error); in sotpi_connect()
2604 sotpi_shutdown(struct sonode *so, int how, struct cred *cr) in sotpi_shutdown() argument
2610 sotpi_info_t *sti = SOTOTPI(so); in sotpi_shutdown()
2612 dprintso(so, 1, ("sotpi_shutdown(%p, %d) %s\n", in sotpi_shutdown()
2613 (void *)so, how, pr_state(so->so_state, so->so_mode))); in sotpi_shutdown()
2615 mutex_enter(&so->so_lock); in sotpi_shutdown()
2616 so_lock_single(so); /* Set SOLOCKED */ in sotpi_shutdown()
2623 if (!(so->so_state & SS_ISCONNECTED)) { in sotpi_shutdown()
2640 old_state = so->so_state; in sotpi_shutdown()
2644 socantrcvmore(so); in sotpi_shutdown()
2647 socantsendmore(so); in sotpi_shutdown()
2650 socantsendmore(so); in sotpi_shutdown()
2651 socantrcvmore(so); in sotpi_shutdown()
2661 state_change = (so->so_state & (SS_CANTRCVMORE|SS_CANTSENDMORE)) - in sotpi_shutdown()
2667 dprintso(so, 1, in sotpi_shutdown()
2669 so->so_state)); in sotpi_shutdown()
2673 mutex_exit(&so->so_lock); in sotpi_shutdown()
2674 strseteof(SOTOV(so), 1); in sotpi_shutdown()
2683 mutex_enter(&so->so_lock); in sotpi_shutdown()
2684 (void) so_lock_read(so, 0); /* Set SOREADLOCKED */ in sotpi_shutdown()
2685 mutex_exit(&so->so_lock); in sotpi_shutdown()
2688 strflushrq(SOTOV(so), FLUSHALL); in sotpi_shutdown()
2690 mutex_enter(&so->so_lock); in sotpi_shutdown()
2691 so_unlock_read(so); /* Clear SOREADLOCKED */ in sotpi_shutdown()
2695 mutex_exit(&so->so_lock); in sotpi_shutdown()
2696 strsetwerror(SOTOV(so), 0, 0, sogetwrerr); in sotpi_shutdown()
2697 mutex_enter(&so->so_lock); in sotpi_shutdown()
2701 mutex_exit(&so->so_lock); in sotpi_shutdown()
2702 strsetwerror(SOTOV(so), 0, 0, sogetwrerr); in sotpi_shutdown()
2703 strseteof(SOTOV(so), 1); in sotpi_shutdown()
2712 mutex_enter(&so->so_lock); in sotpi_shutdown()
2713 (void) so_lock_read(so, 0); /* Set SOREADLOCKED */ in sotpi_shutdown()
2714 mutex_exit(&so->so_lock); in sotpi_shutdown()
2717 strflushrq(SOTOV(so), FLUSHALL); in sotpi_shutdown()
2719 mutex_enter(&so->so_lock); in sotpi_shutdown()
2720 so_unlock_read(so); /* Clear SOREADLOCKED */ in sotpi_shutdown()
2724 ASSERT(MUTEX_HELD(&so->so_lock)); in sotpi_shutdown()
2737 if ((so->so_state & (SS_CANTRCVMORE|SS_CANTSENDMORE)) == in sotpi_shutdown()
2743 if (so->so_family == AF_UNIX && sti->sti_serv_type != T_CLTS) in sotpi_shutdown()
2744 so_unix_close(so); in sotpi_shutdown()
2747 error = sodisconnect(so, -1, _SODISCONNECT_LOCK_HELD); in sotpi_shutdown()
2754 mutex_exit(&so->so_lock); in sotpi_shutdown()
2762 error = kstrputmsg(SOTOV(so), mp, NULL, 0, 0, in sotpi_shutdown()
2764 mutex_enter(&so->so_lock); in sotpi_shutdown()
2766 eprintsoline(so, error); in sotpi_shutdown()
2772 so_unlock_single(so, SOLOCKED); in sotpi_shutdown()
2773 mutex_exit(&so->so_lock); in sotpi_shutdown()
2797 so_unix_close(struct sonode *so) in so_unix_close() argument
2802 sotpi_info_t *sti = SOTOTPI(so); in so_unix_close()
2804 ASSERT(MUTEX_HELD(&so->so_lock)); in so_unix_close()
2806 ASSERT(so->so_family == AF_UNIX); in so_unix_close()
2808 if ((so->so_state & (SS_ISCONNECTED|SS_ISBOUND)) != in so_unix_close()
2812 dprintso(so, 1, ("so_unix_close(%p) %s\n", in so_unix_close()
2813 (void *)so, pr_state(so->so_state, so->so_mode))); in so_unix_close()
2822 if (so->so_type == SOCK_STREAM || so->so_type == SOCK_SEQPACKET) { in so_unix_close()
2853 error = so_addr_verify(so, sti->sti_faddr_sa, in so_unix_close()
2856 eprintsoline(so, error); in so_unix_close()
2876 dprintso(so, 1, in so_unix_close()
2879 error = so_ux_addr_xlate(so, in so_unix_close()
2884 eprintsoline(so, error); in so_unix_close()
2931 mutex_exit(&so->so_lock); in so_unix_close()
2932 error = kstrputmsg(SOTOV(so), mp, NULL, 0, 0, in so_unix_close()
2934 mutex_enter(&so->so_lock); in so_unix_close()
2955 sorecv_update_oobstate(struct sonode *so) in sorecv_update_oobstate() argument
2957 sotpi_info_t *sti = SOTOTPI(so); in sorecv_update_oobstate()
2959 mutex_enter(&so->so_lock); in sorecv_update_oobstate()
2960 ASSERT(so_verify_oobstate(so)); in sorecv_update_oobstate()
2961 dprintso(so, 1, in sorecv_update_oobstate()
2964 sti->sti_oobcnt, pr_state(so->so_state, so->so_mode))); in sorecv_update_oobstate()
2967 so->so_state &= ~(SS_OOBPEND|SS_HAVEOOBDATA|SS_RCVATMARK); in sorecv_update_oobstate()
2968 freemsg(so->so_oobmsg); in sorecv_update_oobstate()
2969 so->so_oobmsg = NULL; in sorecv_update_oobstate()
2971 ASSERT(so_verify_oobstate(so)); in sorecv_update_oobstate()
2972 mutex_exit(&so->so_lock); in sorecv_update_oobstate()
2979 nl7c_sorecv(struct sonode *so, mblk_t **rmp, uio_t *uiop, rval_t *rp) in nl7c_sorecv() argument
2981 sotpi_info_t *sti = SOTOTPI(so); in nl7c_sorecv()
3055 sotpi_recvmsg(struct sonode *so, struct nmsghdr *msg, struct uio *uiop, in sotpi_recvmsg() argument
3065 int so_state = so->so_state; /* Snapshot */ in sotpi_recvmsg()
3071 sotpi_info_t *sti = SOTOTPI(so); in sotpi_recvmsg()
3076 dprintso(so, 1, ("sotpi_recvmsg(%p, %p, 0x%x) state %s err %d\n", in sotpi_recvmsg()
3077 (void *)so, (void *)msg, flags, in sotpi_recvmsg()
3078 pr_state(so->so_state, so->so_mode), so->so_error)); in sotpi_recvmsg()
3080 if (so->so_version == SOV_STREAM) { in sotpi_recvmsg()
3081 so_update_attrs(so, SOACC); in sotpi_recvmsg()
3083 return (strread(SOTOV(so), uiop, cr)); in sotpi_recvmsg()
3097 (so->so_mode & SM_CONNREQUIRED)) { in sotpi_recvmsg()
3110 if (!(so->so_mode & SM_EXDATA)) in sotpi_recvmsg()
3112 so_update_attrs(so, SOACC); in sotpi_recvmsg()
3113 return (sorecvoob(so, msg, uiop, flags, in sotpi_recvmsg()
3114 (so->so_options & SO_OOBINLINE))); in sotpi_recvmsg()
3117 so_update_attrs(so, SOACC); in sotpi_recvmsg()
3128 dprintso(so, 1, ("sotpi_recvmsg: namelen %d controllen %d\n", in sotpi_recvmsg()
3131 mutex_enter(&so->so_lock); in sotpi_recvmsg()
3139 nl7c_close(so); in sotpi_recvmsg()
3144 mutex_exit(&so->so_lock); in sotpi_recvmsg()
3150 ret = nl7c_process(so, in sotpi_recvmsg()
3151 (so->so_state & (SS_NONBLOCK|SS_NDELAY))); in sotpi_recvmsg()
3156 mutex_exit(&so->so_lock); in sotpi_recvmsg()
3165 mutex_exit(&so->so_lock); in sotpi_recvmsg()
3199 error = so_lock_read_intr(so, in sotpi_recvmsg()
3201 mutex_exit(&so->so_lock); in sotpi_recvmsg()
3220 if (so->so_mode & SM_ATOMIC) in sotpi_recvmsg()
3225 else if (so->so_rcvtimeo != 0) in sotpi_recvmsg()
3226 timout = TICK_TO_MSEC(so->so_rcvtimeo); in sotpi_recvmsg()
3236 error = nl7c_sorecv(so, &mp, uiop, &rval); in sotpi_recvmsg()
3238 error = kstrgetmsg(SOTOV(so), &mp, uiop, &pri, &pflag, in sotpi_recvmsg()
3252 if ((rval.r_val1 & MOREDATA) && (so->so_mode & SM_ATOMIC)) in sotpi_recvmsg()
3256 dprintso(so, 1, ("sotpi_recvmsg: got M_DATA\n")); in sotpi_recvmsg()
3262 if ((so->so_state & in sotpi_recvmsg()
3266 sorecv_update_oobstate(so); in sotpi_recvmsg()
3269 mutex_enter(&so->so_lock); in sotpi_recvmsg()
3272 if (so->so_state & SS_SAVEDEOR) { in sotpi_recvmsg()
3274 so->so_state &= ~SS_SAVEDEOR; in sotpi_recvmsg()
3283 mutex_exit(&so->so_lock); in sotpi_recvmsg()
3292 dprintso(so, 1, ("sotpi_recvmsg: type %d\n", tpr->type)); in sotpi_recvmsg()
3296 if ((so->so_state & in sotpi_recvmsg()
3300 sorecv_update_oobstate(so); in sotpi_recvmsg()
3307 mutex_enter(&so->so_lock); in sotpi_recvmsg()
3308 so->so_state &= ~SS_SAVEDEOR; in sotpi_recvmsg()
3313 so->so_state |= SS_SAVEDEOR; in sotpi_recvmsg()
3322 mutex_exit(&so->so_lock); in sotpi_recvmsg()
3335 if ((so->so_state & in sotpi_recvmsg()
3339 sorecv_update_oobstate(so); in sotpi_recvmsg()
3351 eprintsoline(so, error); in sotpi_recvmsg()
3354 if (so->so_family == AF_UNIX) { in sotpi_recvmsg()
3380 eprintsoline(so, error); in sotpi_recvmsg()
3383 if (so->so_family == AF_UNIX) in sotpi_recvmsg()
3427 eprintsoline(so, error); in sotpi_recvmsg()
3442 if ((so->so_state & in sotpi_recvmsg()
3446 sorecv_update_oobstate(so); in sotpi_recvmsg()
3463 eprintsoline(so, error); in sotpi_recvmsg()
3491 eprintsoline(so, error); in sotpi_recvmsg()
3502 mutex_enter(&so->so_lock); in sotpi_recvmsg()
3503 so->so_state &= ~SS_SAVEDEOR; in sotpi_recvmsg()
3508 so->so_state |= SS_SAVEDEOR; in sotpi_recvmsg()
3519 mutex_exit(&so->so_lock); in sotpi_recvmsg()
3526 dprintso(so, 1, in sotpi_recvmsg()
3531 pr_state(so->so_state, so->so_mode))); in sotpi_recvmsg()
3556 dprintso(so, 1, in sotpi_recvmsg()
3561 pr_state(so->so_state, so->so_mode))); in sotpi_recvmsg()
3564 if (so->so_mode & SM_ATOMIC) in sotpi_recvmsg()
3570 error = kstrgetmsg(SOTOV(so), &mp, uiop, in sotpi_recvmsg()
3577 eprintsoline(so, error); in sotpi_recvmsg()
3597 mutex_enter(&so->so_lock); in sotpi_recvmsg()
3598 ASSERT(so_verify_oobstate(so)); in sotpi_recvmsg()
3612 so->so_state |= SS_RCVATMARK; in sotpi_recvmsg()
3613 mutex_exit(&so->so_lock); in sotpi_recvmsg()
3614 dprintso(so, 1, in sotpi_recvmsg()
3617 pr_state(so->so_state, so->so_mode))); in sotpi_recvmsg()
3623 (void *)so, tpr->type, (void *)mp); in sotpi_recvmsg()
3627 eprintsoline(so, error); in sotpi_recvmsg()
3632 mutex_enter(&so->so_lock); in sotpi_recvmsg()
3634 so_unlock_read(so); /* Clear SOREADLOCKED */ in sotpi_recvmsg()
3635 mutex_exit(&so->so_lock); in sotpi_recvmsg()
3644 sosend_dgramcmsg(struct sonode *so, struct sockaddr *name, socklen_t namelen, in sosend_dgramcmsg() argument
3661 sotpi_info_t *sti = SOTOTPI(so); in sosend_dgramcmsg()
3681 error = so_addr_verify(so, name, namelen); in sosend_dgramcmsg()
3683 eprintsoline(so, error); in sosend_dgramcmsg()
3686 if (so->so_family == AF_UNIX) { in sosend_dgramcmsg()
3709 dprintso(so, 1, in sosend_dgramcmsg()
3712 error = so_ux_addr_xlate(so, name, namelen, in sosend_dgramcmsg()
3716 eprintsoline(so, error); in sosend_dgramcmsg()
3749 if (!(so->so_mode & SM_FDPASSING)) in sosend_dgramcmsg()
3803 audit_sock(T_UNITDATA_REQ, strvp2wq(SOTOV(so)), mp, 0); in sosend_dgramcmsg()
3805 error = kstrputmsg(SOTOV(so), mp, uiop, len, 0, MSG_BAND, 0); in sosend_dgramcmsg()
3808 eprintsoline(so, error); in sosend_dgramcmsg()
3819 sosend_svccmsg(struct sonode *so, struct uio *uiop, int more, void *control, in sosend_svccmsg() argument
3832 sotpi_info_t *sti = SOTOTPI(so); in sosend_svccmsg()
3834 dprintso(so, 1, in sosend_svccmsg()
3844 if (!(so->so_mode & SM_OPTDATA)) in sosend_svccmsg()
3866 dprintso(so, 1, ("sosend_svccmsg: sending %d, %ld bytes\n", in sosend_svccmsg()
3882 if (!(so->so_mode & SM_FDPASSING)) in sosend_svccmsg()
3919 error = kstrputmsg(SOTOV(so), mp, uiop, iosize, in sosend_svccmsg()
3922 eprintsoline(so, error); in sosend_svccmsg()
3932 if (so->so_state & SS_CANTSENDMORE) { in sosend_svccmsg()
3933 eprintsoline(so, error); in sosend_svccmsg()
3936 if (so->so_error != 0) { in sosend_svccmsg()
3937 mutex_enter(&so->so_lock); in sosend_svccmsg()
3938 error = sogeterr(so, B_TRUE); in sosend_svccmsg()
3939 mutex_exit(&so->so_lock); in sosend_svccmsg()
3941 eprintsoline(so, error); in sosend_svccmsg()
3958 sosend_dgram(struct sonode *so, struct sockaddr *name, socklen_t namelen, in sosend_dgram() argument
3969 sotpi_info_t *sti = SOTOTPI(so); in sosend_dgram()
3980 error = so_addr_verify(so, name, namelen); in sosend_dgram()
3985 return (sodgram_direct(so, name, namelen, uiop, flags)); in sosend_dgram()
3987 if (so->so_family == AF_UNIX) { in sosend_dgram()
4010 dprintso(so, 1, in sosend_dgram()
4013 error = so_ux_addr_xlate(so, name, namelen, in sosend_dgram()
4017 eprintsoline(so, error); in sosend_dgram()
4081 audit_sock(T_UNITDATA_REQ, strvp2wq(SOTOV(so)), mp, 0); in sosend_dgram()
4083 error = kstrputmsg(SOTOV(so), mp, uiop, len, 0, MSG_BAND, 0); in sosend_dgram()
4087 eprintsoline(so, error); in sosend_dgram()
4098 sosend_svc(struct sonode *so, struct uio *uiop, t_scalar_t prim, int more, in sosend_svc() argument
4105 sotpi_info_t *sti = SOTOTPI(so); in sosend_svc()
4107 dprintso(so, 1, in sosend_svc()
4109 (void *)so, uiop->uio_resid, prim, sflag)); in sosend_svc()
4136 dprintso(so, 1, ("sosend_svc: sending 0x%x %d, %ld bytes\n", in sosend_svc()
4147 error = kstrputmsg(SOTOV(so), mp, uiop, iosize, in sosend_svc()
4150 eprintsoline(so, error); in sosend_svc()
4159 if (so->so_state & SS_CANTSENDMORE) { in sosend_svc()
4160 eprintsoline(so, error); in sosend_svc()
4163 if (so->so_error != 0) { in sosend_svc()
4164 mutex_enter(&so->so_lock); in sosend_svc()
4165 error = sogeterr(so, B_TRUE); in sosend_svc()
4166 mutex_exit(&so->so_lock); in sosend_svc()
4168 eprintsoline(so, error); in sosend_svc()
4185 sotpi_sendmsg(struct sonode *so, struct nmsghdr *msg, struct uio *uiop, in sotpi_sendmsg() argument
4195 sotpi_info_t *sti = SOTOTPI(so); in sotpi_sendmsg()
4197 dprintso(so, 1, ("sotpi_sendmsg(%p, %p, 0x%x) state %s, error %d\n", in sotpi_sendmsg()
4198 (void *)so, (void *)msg, msg->msg_flags, in sotpi_sendmsg()
4199 pr_state(so->so_state, so->so_mode), so->so_error)); in sotpi_sendmsg()
4201 if (so->so_version == SOV_STREAM) { in sotpi_sendmsg()
4203 so_update_attrs(so, SOMOD); in sotpi_sendmsg()
4204 return (strwrite(SOTOV(so), uiop, cr)); in sotpi_sendmsg()
4207 mutex_enter(&so->so_lock); in sotpi_sendmsg()
4208 so_state = so->so_state; in sotpi_sendmsg()
4211 mutex_exit(&so->so_lock); in sotpi_sendmsg()
4215 if (so->so_error != 0) { in sotpi_sendmsg()
4216 error = sogeterr(so, B_TRUE); in sotpi_sendmsg()
4218 mutex_exit(&so->so_lock); in sotpi_sendmsg()
4226 so_mode = so->so_mode; in sotpi_sendmsg()
4230 mutex_exit(&so->so_lock); in sotpi_sendmsg()
4255 mutex_exit(&so->so_lock); in sotpi_sendmsg()
4268 mutex_exit(&so->so_lock); in sotpi_sendmsg()
4272 so_lock_single(so); /* Set SOLOCKED */ in sotpi_sendmsg()
4273 error = sotpi_bind(so, NULL, 0, in sotpi_sendmsg()
4275 so_unlock_single(so, SOLOCKED); in sotpi_sendmsg()
4277 mutex_exit(&so->so_lock); in sotpi_sendmsg()
4278 eprintsoline(so, error); in sotpi_sendmsg()
4305 switch (so->so_family) { in sotpi_sendmsg()
4341 mutex_exit(&so->so_lock); in sotpi_sendmsg()
4343 dprintso(so, 0, in sotpi_sendmsg()
4346 pr_addr(so->so_family, name, namelen))); in sotpi_sendmsg()
4354 mutex_exit(&so->so_lock); in sotpi_sendmsg()
4358 if ((flags & MSG_DONTROUTE) && !(so->so_options & SO_DONTROUTE)) { in sotpi_sendmsg()
4362 error = sotpi_setsockopt(so, SOL_SOCKET, SO_DONTROUTE, in sotpi_sendmsg()
4375 so_update_attrs(so, SOMOD); in sotpi_sendmsg()
4376 error = sosend_dgramcmsg(so, name, namelen, uiop, in sotpi_sendmsg()
4384 so_update_attrs(so, SOMOD); in sotpi_sendmsg()
4385 error = sosend_svccmsg(so, uiop, in sotpi_sendmsg()
4393 so_update_attrs(so, SOMOD); in sotpi_sendmsg()
4400 return (sosend_dgram(so, name, namelen, uiop, flags)); in sotpi_sendmsg()
4402 error = sosend_dgram(so, name, namelen, uiop, flags); in sotpi_sendmsg()
4418 dprintso(so, 1, ("sotpi_sendmsg: write\n")); in sotpi_sendmsg()
4422 (error = nl7c_data(so, uiop)) >= 0) { in sotpi_sendmsg()
4432 canputnext(SOTOV(so)->v_stream->sd_wrq)) { in sotpi_sendmsg()
4433 return (sostream_direct(so, uiop, in sotpi_sendmsg()
4436 error = strwrite(SOTOV(so), uiop, cr); in sotpi_sendmsg()
4447 return (sosend_svc(so, uiop, prim, in sotpi_sendmsg()
4449 error = sosend_svc(so, uiop, prim, in sotpi_sendmsg()
4458 (void) sotpi_setsockopt(so, SOL_SOCKET, SO_DONTROUTE, in sotpi_sendmsg()
4485 struct sonode *so; in kstrwritemp() local
4491 so = VTOSO(vp); in kstrwritemp()
4492 direct = _SOTOTPI(so)->sti_direct; in kstrwritemp()
4503 return (sostream_direct(so, NULL, mp, CRED())); in kstrwritemp()
4558 sotpi_sendmblk(struct sonode *so, struct nmsghdr *msg, int fflag, in sotpi_sendmblk() argument
4563 if (so->so_family != AF_INET && so->so_family != AF_INET6) in sotpi_sendmblk()
4566 if (so->so_state & SS_CANTSENDMORE) in sotpi_sendmblk()
4569 if (so->so_type != SOCK_STREAM) in sotpi_sendmblk()
4572 if ((so->so_state & SS_ISCONNECTED) == 0) in sotpi_sendmblk()
4575 error = kstrwritemp(so->so_vnode, *mpp, fflag); in sotpi_sendmblk()
4587 sodgram_direct(struct sonode *so, struct sockaddr *name, in sodgram_direct() argument
4596 struct stdata *stp = SOTOV(so)->v_stream; in sodgram_direct()
4601 sotpi_info_t *sti = SOTOTPI(so); in sodgram_direct()
4605 ASSERT(!(so->so_mode & SM_CONNREQUIRED)); in sodgram_direct()
4606 ASSERT(!(so->so_mode & SM_EXDATA)); in sodgram_direct()
4607 ASSERT(so->so_family == AF_INET || so->so_family == AF_INET6); in sodgram_direct()
4608 ASSERT(SOTOV(so)->v_type == VSOCK); in sodgram_direct()
4615 ASSERT(name->sa_family == so->so_family); in sodgram_direct()
4616 ASSERT(so->so_family == AF_INET || in sodgram_direct()
4618 ASSERT(so->so_family == AF_INET6 || in sodgram_direct()
4628 so_state = so->so_state; in sodgram_direct()
4668 audit_sock(T_UNITDATA_REQ, strvp2wq(SOTOV(so)), mp, 0); in sodgram_direct()
4685 return (strwrite(SOTOV(so), uiop, CRED())); in sodgram_direct()
4688 audit_sock(T_UNITDATA_REQ, strvp2wq(SOTOV(so)), mp, 0); in sodgram_direct()
4690 error = kstrputmsg(SOTOV(so), mp, uiop, len, 0, MSG_BAND, 0); in sodgram_direct()
4694 eprintsoline(so, error); in sodgram_direct()
4701 sostream_direct(struct sonode *so, struct uio *uiop, mblk_t *mp, cred_t *cr) in sostream_direct() argument
4703 struct stdata *stp = SOTOV(so)->v_stream; in sostream_direct()
4709 ASSERT(so->so_mode & SM_BYTESTREAM); in sostream_direct()
4710 ASSERT(SOTOV(so)->v_type == VSOCK); in sostream_direct()
4725 newmp = (stp->sd_wputdatafunc)(SOTOV(so), mp, NULL, in sostream_direct()
4739 return (strwrite(SOTOV(so), uiop, cr)); in sostream_direct()
4776 newmp = (stp->sd_wputdatafunc)(SOTOV(so), mp, NULL, in sostream_direct()
4807 return (strwrite_common(SOTOV(so), uiop, cr, wflag)); in sostream_direct()
4818 sotpi_getpeername(struct sonode *so, struct sockaddr *name, socklen_t *namelen, in sotpi_getpeername() argument
4826 sotpi_info_t *sti = SOTOTPI(so); in sotpi_getpeername()
4828 dprintso(so, 1, ("sotpi_getpeername(%p) %s\n", in sotpi_getpeername()
4829 (void *)so, pr_state(so->so_state, so->so_mode))); in sotpi_getpeername()
4832 mutex_enter(&so->so_lock); in sotpi_getpeername()
4833 so_lock_single(so); /* Set SOLOCKED */ in sotpi_getpeername()
4842 if (!(so->so_state & SS_ISCONNECTED)) { in sotpi_getpeername()
4847 if ((so->so_state & SS_CANTSENDMORE) && !xnet_skip_checks) { in sotpi_getpeername()
4863 dprintso(so, 1, ("sotpi_getpeername (local): %s\n", in sotpi_getpeername()
4864 pr_addr(so->so_family, sti->sti_faddr_sa, in sotpi_getpeername()
4868 if (so->so_family == AF_UNIX) { in sotpi_getpeername()
4876 ASSERT(so->so_family != AF_UNIX && sti->sti_faddr_noxlate == 0); in sotpi_getpeername()
4881 mutex_exit(&so->so_lock); in sotpi_getpeername()
4898 error = strioctl(SOTOV(so), TI_GETPEERNAME, (intptr_t)&strbuf, in sotpi_getpeername()
4902 mutex_enter(&so->so_lock); in sotpi_getpeername()
4929 (so->so_state & SS_ISCONNECTED)) { in sotpi_getpeername()
4940 dprintso(so, 1, ("sotpi_getpeername (tp): %s\n", in sotpi_getpeername()
4941 pr_addr(so->so_family, sti->sti_faddr_sa, in sotpi_getpeername()
4945 so_unlock_single(so, SOLOCKED); in sotpi_getpeername()
4946 mutex_exit(&so->so_lock); in sotpi_getpeername()
4954 sotpi_getsockname(struct sonode *so, struct sockaddr *name, socklen_t *namelen, in sotpi_getsockname() argument
4962 sotpi_info_t *sti = SOTOTPI(so); in sotpi_getsockname()
4964 dprintso(so, 1, ("sotpi_getsockname(%p) %s\n", in sotpi_getsockname()
4965 (void *)so, pr_state(so->so_state, so->so_mode))); in sotpi_getsockname()
4968 mutex_enter(&so->so_lock); in sotpi_getsockname()
4969 so_lock_single(so); /* Set SOLOCKED */ in sotpi_getsockname()
4973 dprintso(so, 1, ("sotpi_getsockname (local): %s\n", in sotpi_getsockname()
4974 pr_addr(so->so_family, sti->sti_laddr_sa, in sotpi_getsockname()
4984 if (so->so_family == AF_UNIX) { in sotpi_getsockname()
4998 if (!(so->so_state & SS_ISBOUND)) { in sotpi_getsockname()
5006 mutex_exit(&so->so_lock); in sotpi_getsockname()
5023 error = strioctl(SOTOV(so), TI_GETMYNAME, (intptr_t)&strbuf, in sotpi_getsockname()
5027 mutex_enter(&so->so_lock); in sotpi_getsockname()
5051 (so->so_state & SS_ISBOUND)) { in sotpi_getsockname()
5062 dprintso(so, 1, ("sotpi_getsockname (tp): %s\n", in sotpi_getsockname()
5063 pr_addr(so->so_family, sti->sti_laddr_sa, in sotpi_getsockname()
5067 so_unlock_single(so, SOLOCKED); in sotpi_getsockname()
5068 mutex_exit(&so->so_lock); in sotpi_getsockname()
5081 sotpi_getsockopt(struct sonode *so, int level, int option_name, in sotpi_getsockopt() argument
5098 dprintso(so, 1, ("sotpi_getsockopt(%p, 0x%x, 0x%x, %p, %p) %s\n", in sotpi_getsockopt()
5099 (void *)so, level, option_name, optval, (void *)optlenp, in sotpi_getsockopt()
5100 pr_state(so->so_state, so->so_mode))); in sotpi_getsockopt()
5102 mutex_enter(&so->so_lock); in sotpi_getsockopt()
5103 so_lock_single(so); /* Set SOLOCKED */ in sotpi_getsockopt()
5135 eprintsoline(so, error); in sotpi_getsockopt()
5145 eprintsoline(so, error); in sotpi_getsockopt()
5151 eprintsoline(so, error); in sotpi_getsockopt()
5160 eprintsoline(so, error); in sotpi_getsockopt()
5168 eprintsoline(so, error); in sotpi_getsockopt()
5178 value = so->so_type; in sotpi_getsockopt()
5183 value = sogeterr(so, B_TRUE); in sotpi_getsockopt()
5188 if (so->so_state & SS_ACCEPTCONN) in sotpi_getsockopt()
5194 dprintso(so, 1, in sotpi_getsockopt()
5198 dprintso(so, 1, in sotpi_getsockopt()
5215 value = (so->so_options & option_name); in sotpi_getsockopt()
5218 dprintso(so, 1, in sotpi_getsockopt()
5222 dprintso(so, 1, in sotpi_getsockopt()
5235 option = &so->so_linger; in sotpi_getsockopt()
5247 lvalue = so->so_sndbuf; in sotpi_getsockopt()
5249 mutex_exit(&so->so_lock); in sotpi_getsockopt()
5250 (void) strqget(strvp2wq(SOTOV(so))->q_next, in sotpi_getsockopt()
5252 mutex_enter(&so->so_lock); in sotpi_getsockopt()
5253 dprintso(so, 1, in sotpi_getsockopt()
5258 len = (t_uscalar_t)sizeof (so->so_sndbuf); in sotpi_getsockopt()
5277 lvalue = so->so_rcvbuf; in sotpi_getsockopt()
5279 mutex_exit(&so->so_lock); in sotpi_getsockopt()
5280 (void) strqget(RD(strvp2wq(SOTOV(so))), in sotpi_getsockopt()
5282 mutex_enter(&so->so_lock); in sotpi_getsockopt()
5283 dprintso(so, 1, in sotpi_getsockopt()
5292 len = (t_uscalar_t)sizeof (so->so_rcvbuf); in sotpi_getsockopt()
5296 value = so->so_family; in sotpi_getsockopt()
5306 value = so->so_sndlowat; in sotpi_getsockopt()
5310 value = so->so_rcvlowat; in sotpi_getsockopt()
5319 val = drv_hztousec(so->so_rcvtimeo); in sotpi_getsockopt()
5321 val = drv_hztousec(so->so_sndtimeo); in sotpi_getsockopt()
5337 (so->so_proto_props).sopp_wroff; in sotpi_getsockopt()
5339 (so->so_proto_props).sopp_maxblk; in sotpi_getsockopt()
5341 (so->so_proto_props).sopp_maxpsz; in sotpi_getsockopt()
5343 (so->so_proto_props).sopp_tail; in sotpi_getsockopt()
5351 mutex_exit(&so->so_lock); in sotpi_getsockopt()
5366 error = kstrputmsg(SOTOV(so), mp, NULL, 0, 0, in sotpi_getsockopt()
5369 mutex_enter(&so->so_lock); in sotpi_getsockopt()
5371 eprintsoline(so, error); in sotpi_getsockopt()
5374 error = sowaitprim(so, T_SVR4_OPTMGMT_REQ, T_OPTMGMT_ACK, in sotpi_getsockopt()
5382 eprintsoline(so, error); in sotpi_getsockopt()
5396 eprintsoline(so, error); in sotpi_getsockopt()
5410 eprintsoline(so, error); in sotpi_getsockopt()
5424 so_unlock_single(so, SOLOCKED); in sotpi_getsockopt()
5425 mutex_exit(&so->so_lock); in sotpi_getsockopt()
5438 sotpi_setsockopt(struct sonode *so, int level, int option_name, in sotpi_setsockopt() argument
5447 dprintso(so, 1, ("sotpi_setsockopt(%p, 0x%x, 0x%x, %p, %d) %s\n", in sotpi_setsockopt()
5448 (void *)so, level, option_name, optval, optlen, in sotpi_setsockopt()
5449 pr_state(so->so_state, so->so_mode))); in sotpi_setsockopt()
5452 if ((so->so_state & SS_CANTSENDMORE) && !xnet_skip_checks) { in sotpi_setsockopt()
5458 mutex_enter(&so->so_lock); in sotpi_setsockopt()
5459 so_lock_single(so); /* Set SOLOCKED */ in sotpi_setsockopt()
5460 mutex_exit(&so->so_lock); in sotpi_setsockopt()
5474 error = kstrputmsg(SOTOV(so), mp, NULL, 0, 0, in sotpi_setsockopt()
5477 mutex_enter(&so->so_lock); in sotpi_setsockopt()
5479 eprintsoline(so, error); in sotpi_setsockopt()
5482 error = sowaitprim(so, T_SVR4_OPTMGMT_REQ, T_OPTMGMT_ACK, in sotpi_setsockopt()
5485 eprintsoline(so, error); in sotpi_setsockopt()
5518 eprintsoline(so, error); in sotpi_setsockopt()
5530 eprintsoline(so, error); in sotpi_setsockopt()
5536 eprintsoline(so, error); in sotpi_setsockopt()
5546 eprintsoline(so, error); in sotpi_setsockopt()
5566 so->so_linger.l_linger = l->l_linger; in sotpi_setsockopt()
5568 so->so_linger.l_onoff = SO_LINGER; in sotpi_setsockopt()
5569 so->so_options |= SO_LINGER; in sotpi_setsockopt()
5571 so->so_linger.l_onoff = 0; in sotpi_setsockopt()
5572 so->so_options &= ~SO_LINGER; in sotpi_setsockopt()
5599 dprintso(so, 1, in sotpi_setsockopt()
5602 so->so_options |= option_name; in sotpi_setsockopt()
5604 dprintso(so, 1, in sotpi_setsockopt()
5607 so->so_options &= ~option_name; in sotpi_setsockopt()
5618 so->so_sndbuf = intvalue; in sotpi_setsockopt()
5621 so->so_rcvbuf = intvalue; in sotpi_setsockopt()
5624 so->so_rcv_timer_interval = intvalue; in sotpi_setsockopt()
5632 so->so_sndlowat = intvalue; in sotpi_setsockopt()
5635 so->so_rcvlowat = intvalue; in sotpi_setsockopt()
5652 so->so_rcvtimeo = drv_usectohz(val); in sotpi_setsockopt()
5654 so->so_sndtimeo = drv_usectohz(val); in sotpi_setsockopt()
5663 dprintso(so, 1, in sotpi_setsockopt()
5671 so_unlock_single(so, SOLOCKED); in sotpi_setsockopt()
5672 mutex_exit(&so->so_lock); in sotpi_setsockopt()
5681 sotpi_close(struct sonode *so, int flag, struct cred *cr) in sotpi_close() argument
5683 struct vnode *vp = SOTOV(so); in sotpi_close()
5686 sotpi_info_t *sti = SOTOTPI(so); in sotpi_close()
5688 dprintso(so, 1, ("sotpi_close(%p, %x) %s\n", in sotpi_close()
5689 (void *)vp, flag, pr_state(so->so_state, so->so_mode))); in sotpi_close()
5695 mutex_enter(&so->so_lock); in sotpi_close()
5696 so_lock_single(so); /* Set SOLOCKED */ in sotpi_close()
5698 ASSERT(so_verify_oobstate(so)); in sotpi_close()
5702 nl7c_close(so); in sotpi_close()
5708 if (so->so_family == AF_UNIX) { in sotpi_close()
5710 so_unix_close(so); in sotpi_close()
5713 mutex_exit(&so->so_lock); in sotpi_close()
5727 mutex_enter(&so->so_lock); in sotpi_close()
5733 so_flush_discon_ind(so); in sotpi_close()
5735 so_unlock_single(so, SOLOCKED); in sotpi_close()
5736 mutex_exit(&so->so_lock); in sotpi_close()
5744 if (so->so_flag & SOCLONE) in sotpi_close()
5751 sotpi_ioctl(struct sonode *so, int cmd, intptr_t arg, int mode, in sotpi_ioctl() argument
5754 struct vnode *vp = SOTOV(so); in sotpi_ioctl()
5755 sotpi_info_t *sti = SOTOTPI(so); in sotpi_ioctl()
5758 dprintso(so, 0, ("sotpi_ioctl: cmd 0x%x, arg 0x%lx, state %s\n", in sotpi_ioctl()
5759 cmd, arg, pr_state(so->so_state, so->so_mode))); in sotpi_ioctl()
5793 if (so->so_version != SOV_STREAM) in sotpi_ioctl()
5802 ASSERT(so->so_version != SOV_STREAM); in sotpi_ioctl()
5815 mutex_enter(&so->so_lock); in sotpi_ioctl()
5817 so->so_state |= SS_NDELAY; in sotpi_ioctl()
5819 so->so_state &= ~SS_NDELAY; in sotpi_ioctl()
5821 mutex_exit(&so->so_lock); in sotpi_ioctl()
5832 mutex_enter(&so->so_lock); in sotpi_ioctl()
5838 if (value == 0 && (so->so_state & SS_ASYNC) != 0 || in sotpi_ioctl()
5839 value != 0 && (so->so_state & SS_ASYNC) == 0) in sotpi_ioctl()
5840 error = so_flip_async(so, vp, mode, cr); in sotpi_ioctl()
5841 mutex_exit(&so->so_lock); in sotpi_ioctl()
5853 mutex_enter(&so->so_lock); in sotpi_ioctl()
5854 dprintso(so, 1, ("setown: new %d old %d\n", pgrp, so->so_pgrp)); in sotpi_ioctl()
5856 if (pgrp != so->so_pgrp) in sotpi_ioctl()
5857 error = so_set_siggrp(so, vp, pgrp, mode, cr); in sotpi_ioctl()
5858 mutex_exit(&so->so_lock); in sotpi_ioctl()
5863 if (so_copyout(&so->so_pgrp, (void *)arg, in sotpi_ioctl()
5882 mutex_enter(&so->so_lock); in sotpi_ioctl()
5883 so_state = so->so_state; in sotpi_ioctl()
5884 mutex_exit(&so->so_lock); in sotpi_ioctl()
5946 mutex_enter(&so->so_lock); in sotpi_ioctl()
5947 if ((so->so_mode & SM_CONNREQUIRED) == 0) { in sotpi_ioctl()
5949 } else if ((so->so_state & SS_ISCONNECTED) == 0) { in sotpi_ioctl()
5951 } else if (so->so_peercred != NULL) { in sotpi_ioctl()
5953 kp->pc_cr = so->so_peercred; in sotpi_ioctl()
5954 kp->pc_cpid = so->so_cpid; in sotpi_ioctl()
5955 crhold(so->so_peercred); in sotpi_ioctl()
5959 mutex_exit(&so->so_lock); in sotpi_ioctl()
5968 so->so_version == SOV_SOCKBSD) { in sotpi_ioctl()
5988 struct sonode *so = VTOSO(vp); in socktpi_plumbioctl() local
5991 sotpi_info_t *sti = SOTOTPI(so); in socktpi_plumbioctl()
5995 if (so->so_version == SOV_SOCKBSD) in socktpi_plumbioctl()
5998 if (so->so_version == SOV_STREAM) { in socktpi_plumbioctl()
6008 dprintso(so, 0, ("socktpi_ioctl: going to " in socktpi_plumbioctl()
6010 so_stream2sock(so); in socktpi_plumbioctl()
6020 mutex_enter(&so->so_lock); in socktpi_plumbioctl()
6021 so_lock_single(so); in socktpi_plumbioctl()
6022 mutex_exit(&so->so_lock); in socktpi_plumbioctl()
6027 mutex_enter(&so->so_lock); in socktpi_plumbioctl()
6030 so_unlock_single(so, SOLOCKED); in socktpi_plumbioctl()
6031 mutex_exit(&so->so_lock); in socktpi_plumbioctl()
6045 dprintso(so, 0, in socktpi_plumbioctl()
6047 return (so_sock2stream(so)); in socktpi_plumbioctl()
6183 struct sonode *so, in sotpi_poll() argument
6190 struct vnode *vp = SOTOV(so); in sotpi_poll()
6192 int so_state = so->so_state; /* snapshot */ in sotpi_poll()
6193 sotpi_info_t *sti = SOTOTPI(so); in sotpi_poll()
6195 dprintso(so, 0, ("socktpi_poll(%p): state %s err %d\n", in sotpi_poll()
6196 (void *)vp, pr_state(so_state, so->so_mode), so->so_error)); in sotpi_poll()
6201 if (so->so_version == SOV_STREAM) { in sotpi_poll()
6208 (so->so_mode & SM_CONNREQUIRED)) { in sotpi_poll()
6217 if (so->so_error != 0 && in sotpi_poll()
6279 if (so->so_state & SS_CANTRCVMORE) { in sotpi_poll()
6282 if (so->so_state & SS_CANTSENDMORE) in sotpi_poll()
6286 if (so->so_state & SS_OOBPEND) in sotpi_poll()
6339 struct sonode *so = (struct sonode *)buf; in socktpi_unix_constructor() local
6340 sotpi_info_t *sti = SOTOTPI(so); in socktpi_unix_constructor()
6347 SOTOTPI(sti->sti_next_so)->sti_prev_so = so; in socktpi_unix_constructor()
6348 socklist.sl_list = so; in socktpi_unix_constructor()
6359 struct sonode *so = (struct sonode *)buf; in socktpi_unix_destructor() local
6360 sotpi_info_t *sti = SOTOTPI(so); in socktpi_unix_destructor()
6400 sotpi_convert_sonode(struct sonode *so, struct sockparams *newsp, in sotpi_convert_sonode() argument
6404 struct sockparams *origsp = so->so_sockparams; in sotpi_convert_sonode()
6405 sock_lower_handle_t handle = so->so_proto_handle; in sotpi_convert_sonode()
6411 ASSERT((so->so_state & (SS_FALLBACK_PENDING|SS_FALLBACK_COMP)) == in sotpi_convert_sonode()
6413 ASSERT(SOCK_IS_NONSTR(so)); in sotpi_convert_sonode()
6417 so->so_sockparams = newsp; in sotpi_convert_sonode()
6421 (void) sotpi_info_create(so, KM_SLEEP); in sotpi_convert_sonode()
6422 sotpi_info_init(so); in sotpi_convert_sonode()
6424 if ((error = sotpi_init(so, NULL, cr, SO_FALLBACK)) != 0) { in sotpi_convert_sonode()
6425 sotpi_info_fini(so); in sotpi_convert_sonode()
6426 sotpi_info_destroy(so); in sotpi_convert_sonode()
6429 ASSERT(handle == so->so_proto_handle); in sotpi_convert_sonode()
6430 sti = SOTOTPI(so); in sotpi_convert_sonode()
6440 so_basic_strinit(so); /* skips the T_CAPABILITY_REQ */ in sotpi_convert_sonode()
6441 so_alloc_addr(so, so->so_max_addr_len); in sotpi_convert_sonode()
6453 if (so->so_pgrp != 0) { in sotpi_convert_sonode()
6454 if (so_set_events(so, so->so_vnode, cr) != 0) in sotpi_convert_sonode()
6455 so->so_pgrp = 0; in sotpi_convert_sonode()
6461 vp = SOTOV(so); in sotpi_convert_sonode()
6475 so->so_not_str = B_FALSE; in sotpi_convert_sonode()
6485 sotpi_revert_sonode(struct sonode *so, struct cred *cr) in sotpi_revert_sonode() argument
6487 vnode_t *vp = SOTOV(so); in sotpi_revert_sonode()
6489 ASSERT((so->so_state & (SS_FALLBACK_PENDING|SS_FALLBACK_COMP)) == in sotpi_revert_sonode()
6491 ASSERT(!SOCK_IS_NONSTR(so)); in sotpi_revert_sonode()
6501 so->so_sockparams = SOTOTPI(so)->sti_orig_sp; in sotpi_revert_sonode()
6503 sotpi_info_fini(so); in sotpi_revert_sonode()
6504 sotpi_info_destroy(so); in sotpi_revert_sonode()
6507 so->so_not_str = B_TRUE; in sotpi_revert_sonode()
6511 sotpi_update_state(struct sonode *so, struct T_capability_ack *tcap, in sotpi_update_state() argument
6515 sotpi_info_t *sti = SOTOTPI(so); in sotpi_update_state()
6517 so_proc_tcapability_ack(so, tcap); in sotpi_update_state()
6519 so->so_options |= opts; in sotpi_update_state()
6528 sti->sti_laddr_valid = (so->so_state & SS_ISBOUND); in sotpi_update_state()
6535 sti->sti_faddr_valid = (so->so_state & SS_ISCONNECTED); in sotpi_update_state()
6544 so_alloc_addr(struct sonode *so, t_uscalar_t maxlen) in so_alloc_addr() argument
6546 sotpi_info_t *sti = SOTOTPI(so); in so_alloc_addr()
6552 so->so_max_addr_len = sti->sti_laddr_maxlen; in so_alloc_addr()
6557 if (so->so_family == AF_UNIX) { in so_alloc_addr()
6568 sotpi_sototpi(struct sonode *so) in sotpi_sototpi() argument
6572 ASSERT(so != NULL); in sotpi_sototpi()
6574 sti = (sotpi_info_t *)so->so_priv; in sotpi_sototpi()
6634 sotpi_info_create(struct sonode *so, int kmflags) in sotpi_info_create() argument
6638 ASSERT(so->so_priv == NULL); in sotpi_info_create()
6648 so->so_priv = (void *)sti; in sotpi_info_create()
6656 sotpi_info_init(struct sonode *so) in sotpi_info_init() argument
6658 struct vnode *vp = SOTOV(so); in sotpi_info_init()
6659 sotpi_info_t *sti = SOTOTPI(so); in sotpi_info_init()
6662 sti->sti_dev = so->so_sockparams->sp_sdev_info.sd_vnode->v_rdev; in sotpi_info_init()
6707 sotpi_info_fini(struct sonode *so) in sotpi_info_fini() argument
6709 sotpi_info_t *sti = SOTOTPI(so); in sotpi_info_fini()
6730 mutex_enter(&so->so_lock); in sotpi_info_fini()
6745 mutex_exit(&so->so_lock); in sotpi_info_fini()
6764 nl7c_urifree(so); in sotpi_info_fini()
6782 sotpi_info_destroy(struct sonode *so) in sotpi_info_destroy() argument
6784 sotpi_info_t *sti = SOTOTPI(so); in sotpi_info_destroy()
6789 so->so_priv = NULL; in sotpi_info_destroy()