Lines Matching refs:so
108 static int do_tcapability(struct sonode *so, t_uscalar_t cap_bits1);
109 static void so_removehooks(struct sonode *so);
125 so_sock2stream(struct sonode *so) in so_sock2stream() argument
127 struct vnode *vp = SOTOV(so); in so_sock2stream()
131 sotpi_info_t *sti = SOTOTPI(so); in so_sock2stream()
135 mutex_enter(&so->so_lock); in so_sock2stream()
136 so_lock_single(so); in so_sock2stream()
138 ASSERT(so->so_version != SOV_STREAM); in so_sock2stream()
147 mutex_exit(&so->so_lock); in so_sock2stream()
150 mutex_enter(&so->so_lock); in so_sock2stream()
152 dprintso(so, 0, ("so_sock2stream(%p): " in so_sock2stream()
153 "_SIOCSOCKFALLBACK failed\n", (void *)so)); in so_sock2stream()
224 so->so_version = SOV_STREAM; in so_sock2stream()
225 so->so_proto_handle = NULL; in so_sock2stream()
231 mutex_exit(&so->so_lock); in so_sock2stream()
232 so_removehooks(so); in so_sock2stream()
233 mutex_enter(&so->so_lock); in so_sock2stream()
240 so->so_error = sti->sti_delayed_error = 0; in so_sock2stream()
241 freemsg(so->so_oobmsg); in so_sock2stream()
242 so->so_oobmsg = NULL; in so_sock2stream()
245 so->so_state &= ~(SS_RCVATMARK|SS_OOBPEND|SS_HAVEOOBDATA|SS_HADOOBDATA| in so_sock2stream()
247 ASSERT(so_verify_oobstate(so)); in so_sock2stream()
255 so_flush_discon_ind(so); in so_sock2stream()
268 dprintso(so, 0, in so_sock2stream()
269 ("so_sock2stream(%p): moving T_CONN_IND\n", (void *)so)); in so_sock2stream()
272 mutex_exit(&so->so_lock); in so_sock2stream()
274 mutex_enter(&so->so_lock); in so_sock2stream()
278 ASSERT(MUTEX_HELD(&so->so_lock)); in so_sock2stream()
279 so_unlock_single(so, SOLOCKED); in so_sock2stream()
280 mutex_exit(&so->so_lock); in so_sock2stream()
296 so_stream2sock(struct sonode *so) in so_stream2sock() argument
298 struct vnode *vp = SOTOV(so); in so_stream2sock()
299 sotpi_info_t *sti = SOTOTPI(so); in so_stream2sock()
303 mutex_enter(&so->so_lock); in so_stream2sock()
304 so_lock_single(so); in so_stream2sock()
305 ASSERT(so->so_version == SOV_STREAM); in so_stream2sock()
306 so->so_version = SOV_SOCKSTREAM; in so_stream2sock()
308 mutex_exit(&so->so_lock); in so_stream2sock()
317 strsetrerror(SOTOV(so), EIO, 1, NULL); in so_stream2sock()
323 mutex_enter(&so->so_lock); in so_stream2sock()
324 (void) so_lock_read(so, 0); /* Set SOREADLOCKED */ in so_stream2sock()
325 mutex_exit(&so->so_lock); in so_stream2sock()
327 strsetrerror(SOTOV(so), 0, 0, NULL); in so_stream2sock()
328 so_installhooks(so); in so_stream2sock()
336 mutex_enter(&so->so_lock); in so_stream2sock()
341 so_flush_discon_ind(so); in so_stream2sock()
342 so_unlock_read(so); /* Clear SOREADLOCKED */ in so_stream2sock()
344 so_unlock_single(so, SOLOCKED); in so_stream2sock()
345 mutex_exit(&so->so_lock); in so_stream2sock()
352 so_installhooks(struct sonode *so) in so_installhooks() argument
354 struct vnode *vp = SOTOV(so); in so_installhooks()
365 so_removehooks(struct sonode *so) in so_removehooks() argument
367 struct vnode *vp = SOTOV(so); in so_removehooks()
378 so_basic_strinit(struct sonode *so) in so_basic_strinit() argument
380 struct vnode *vp = SOTOV(so); in so_basic_strinit()
383 sotpi_info_t *sti = SOTOTPI(so); in so_basic_strinit()
387 mutex_enter(&so->so_lock); in so_basic_strinit()
390 so->so_options = so_default_options; in so_basic_strinit()
392 mutex_exit(&so->so_lock); in so_basic_strinit()
394 so_installhooks(so); in so_basic_strinit()
413 so_strinit(struct sonode *so, struct sonode *tso) in so_strinit() argument
415 sotpi_info_t *sti = SOTOTPI(so); in so_strinit()
419 so_basic_strinit(so); in so_strinit()
427 error = do_tcapability(so, TC1_ACCEPTOR_ID | TC1_INFO); in so_strinit()
433 mutex_enter(&so->so_lock); in so_strinit()
440 so->so_mode = tso->so_mode & ~SM_ACCEPTOR_ID; in so_strinit()
441 mutex_exit(&so->so_lock); in so_strinit()
446 error = do_tcapability(so, TC1_ACCEPTOR_ID); in so_strinit()
458 so->so_state |= SS_ISBOUND | SS_ISCONNECTED; in so_strinit()
460 if (so->so_family == AF_INET6) in so_strinit()
469 so_alloc_addr(so, sti->sti_addr_size); in so_strinit()
475 copy_tinfo(struct sonode *so, struct T_info_ack *tia) in copy_tinfo() argument
477 sotpi_info_t *sti = SOTOTPI(so); in copy_tinfo()
489 so->so_state |= SS_ISBOUND; in copy_tinfo()
494 so->so_state |= SS_ISBOUND|SS_ISCONNECTED; in copy_tinfo()
509 so->so_mode |= SM_ATOMIC | SM_ADDR; in copy_tinfo()
511 so->so_mode |= SM_CONNREQUIRED; in copy_tinfo()
513 so->so_mode |= SM_EXDATA; in copy_tinfo()
515 if (so->so_type == SOCK_SEQPACKET || so->so_type == SOCK_RAW) { in copy_tinfo()
517 so->so_mode |= SM_ATOMIC; in copy_tinfo()
519 if (so->so_family == AF_UNIX) { in copy_tinfo()
520 so->so_mode |= SM_FDPASSING | SM_OPTDATA; in copy_tinfo()
526 if (so->so_type == SOCK_STREAM) { in copy_tinfo()
541 so->so_mode |= SM_BYTESTREAM; in copy_tinfo()
545 check_tinfo(struct sonode *so) in check_tinfo() argument
547 sotpi_info_t *sti = SOTOTPI(so); in check_tinfo()
550 if (so->so_type == SOCK_DGRAM && sti->sti_serv_type != T_CLTS) { in check_tinfo()
551 eprintso(so, ("service type and socket type mismatch\n")); in check_tinfo()
552 eprintsoline(so, EPROTO); in check_tinfo()
555 if (so->so_type == SOCK_STREAM && sti->sti_serv_type == T_CLTS) { in check_tinfo()
556 eprintso(so, ("service type and socket type mismatch\n")); in check_tinfo()
557 eprintsoline(so, EPROTO); in check_tinfo()
560 if (so->so_type == SOCK_SEQPACKET && sti->sti_serv_type == T_CLTS) { in check_tinfo()
561 eprintso(so, ("service type and socket type mismatch\n")); in check_tinfo()
562 eprintsoline(so, EPROTO); in check_tinfo()
565 if (so->so_family == AF_INET && in check_tinfo()
567 eprintso(so, in check_tinfo()
570 eprintsoline(so, EMSGSIZE); in check_tinfo()
573 if (so->so_family == AF_INET6 && in check_tinfo()
575 eprintso(so, in check_tinfo()
578 eprintsoline(so, EMSGSIZE); in check_tinfo()
582 dprintso(so, 1, ( in check_tinfo()
587 dprintso(so, 1, ("tinfo: so_state %s\n", in check_tinfo()
588 pr_state(so->so_state, so->so_mode))); in check_tinfo()
597 do_tinfo(struct sonode *so) in do_tinfo() argument
603 ASSERT(MUTEX_NOT_HELD(&so->so_lock)); in do_tinfo()
606 SOTOTPI(so)->sti_addr_size = 0; in do_tinfo()
610 dprintso(so, 1, ("do_tinfo(%p)\n", (void *)so)); in do_tinfo()
618 eprintsoline(so, ENOBUFS); in do_tinfo()
624 error = kstrputmsg(SOTOV(so), mp, NULL, 0, 0, in do_tinfo()
627 eprintsoline(so, error); in do_tinfo()
630 mutex_enter(&so->so_lock); in do_tinfo()
632 if ((error = sowaitprim(so, T_INFO_REQ, T_INFO_ACK, in do_tinfo()
634 mutex_exit(&so->so_lock); in do_tinfo()
635 eprintsoline(so, error); in do_tinfo()
640 copy_tinfo(so, (struct T_info_ack *)mp->b_rptr); in do_tinfo()
641 mutex_exit(&so->so_lock); in do_tinfo()
643 return (check_tinfo(so)); in do_tinfo()
651 do_tcapability(struct sonode *so, t_uscalar_t cap_bits1) in do_tcapability() argument
657 sotpi_info_t *sti = SOTOTPI(so); in do_tcapability()
661 ASSERT(MUTEX_NOT_HELD(&so->so_lock)); in do_tcapability()
664 return (do_tinfo(so)); in do_tcapability()
672 dprintso(so, 1, ("do_tcapability(%p)\n", (void *)so)); in do_tcapability()
681 eprintsoline(so, ENOBUFS); in do_tcapability()
687 error = kstrputmsg(SOTOV(so), mp, NULL, 0, 0, in do_tcapability()
690 eprintsoline(so, error); in do_tcapability()
693 mutex_enter(&so->so_lock); in do_tcapability()
695 if ((error = sowaitprim(so, T_CAPABILITY_REQ, T_CAPABILITY_ACK, in do_tcapability()
697 mutex_exit(&so->so_lock); in do_tcapability()
702 ASSERT((so->so_mode & SM_ACCEPTOR_ID) == 0); in do_tcapability()
711 return ((error = do_tinfo(so)) == EPROTO ? in do_tcapability()
714 return (do_tinfo(so)); in do_tcapability()
723 so_proc_tcapability_ack(so, tca); in do_tcapability()
727 mutex_exit(&so->so_lock); in do_tcapability()
731 return (check_tinfo(so)); in do_tcapability()
740 so_proc_tcapability_ack(struct sonode *so, struct T_capability_ack *tca) in so_proc_tcapability_ack() argument
742 sotpi_info_t *sti = SOTOTPI(so); in so_proc_tcapability_ack()
752 so->so_mode |= SM_ACCEPTOR_ID; in so_proc_tcapability_ack()
756 copy_tinfo(so, &tca->INFO_ack); in so_proc_tcapability_ack()
763 sogeterr(struct sonode *so, boolean_t clear_err) in sogeterr() argument
767 ASSERT(MUTEX_HELD(&so->so_lock)); in sogeterr()
769 error = so->so_error; in sogeterr()
771 so->so_error = 0; in sogeterr()
785 struct sonode *so = VTOSO(vp); in sogetrderr() local
788 mutex_enter(&so->so_lock); in sogetrderr()
790 error = so->so_error; in sogetrderr()
793 error = so->so_error; in sogetrderr()
794 so->so_error = 0; in sogetrderr()
797 mutex_exit(&so->so_lock); in sogetrderr()
810 struct sonode *so = VTOSO(vp); in sogetwrerr() local
813 mutex_enter(&so->so_lock); in sogetwrerr()
814 if (so->so_state & SS_CANTSENDMORE) { in sogetwrerr()
818 error = so->so_error; in sogetwrerr()
822 so->so_error = 0; in sogetwrerr()
826 mutex_exit(&so->so_lock); in sogetwrerr()
837 soseterror(struct sonode *so, int error) in soseterror() argument
841 ASSERT(MUTEX_HELD(&so->so_lock)); in soseterror()
842 so->so_error = (ushort_t)error; in soseterror()
846 soisconnecting(struct sonode *so) in soisconnecting() argument
848 ASSERT(MUTEX_HELD(&so->so_lock)); in soisconnecting()
849 so->so_state &= ~(SS_ISCONNECTED|SS_ISDISCONNECTING); in soisconnecting()
850 so->so_state |= SS_ISCONNECTING; in soisconnecting()
851 cv_broadcast(&so->so_state_cv); in soisconnecting()
855 soisconnected(struct sonode *so) in soisconnected() argument
857 ASSERT(MUTEX_HELD(&so->so_lock)); in soisconnected()
858 so->so_state &= ~(SS_ISCONNECTING|SS_ISDISCONNECTING); in soisconnected()
859 so->so_state |= SS_ISCONNECTED; in soisconnected()
860 cv_broadcast(&so->so_state_cv); in soisconnected()
867 soisdisconnected(struct sonode *so, int error) in soisdisconnected() argument
869 ASSERT(MUTEX_HELD(&so->so_lock)); in soisdisconnected()
870 so->so_state &= ~(SS_ISCONNECTING|SS_ISCONNECTED|SS_ISDISCONNECTING); in soisdisconnected()
871 so->so_state |= (SS_CANTRCVMORE|SS_CANTSENDMORE); in soisdisconnected()
872 so->so_error = (ushort_t)error; in soisdisconnected()
873 if (so->so_peercred != NULL) { in soisdisconnected()
874 crfree(so->so_peercred); in soisdisconnected()
875 so->so_peercred = NULL; in soisdisconnected()
877 cv_broadcast(&so->so_state_cv); in soisdisconnected()
886 sobreakconn(struct sonode *so, int error) in sobreakconn() argument
888 ASSERT(MUTEX_HELD(&so->so_lock)); in sobreakconn()
889 so->so_state &= ~(SS_ISCONNECTING|SS_ISCONNECTED|SS_ISDISCONNECTING); in sobreakconn()
890 so->so_error = (ushort_t)error; in sobreakconn()
891 cv_broadcast(&so->so_state_cv); in sobreakconn()
903 socantsendmore(struct sonode *so) in socantsendmore() argument
905 ASSERT(MUTEX_HELD(&so->so_lock)); in socantsendmore()
906 so->so_state |= SS_CANTSENDMORE; in socantsendmore()
907 cv_broadcast(&so->so_state_cv); in socantsendmore()
915 socantrcvmore(struct sonode *so) in socantrcvmore() argument
917 ASSERT(MUTEX_HELD(&so->so_lock)); in socantrcvmore()
918 so->so_state |= SS_CANTRCVMORE; in socantrcvmore()
919 cv_broadcast(&so->so_state_cv); in socantrcvmore()
936 sowaitprim(struct sonode *so, t_scalar_t request_prim, t_scalar_t ack_prim, in sowaitprim() argument
943 dprintso(so, 1, ("sowaitprim(%p, %d, %d, %d, %p, %lu)\n", in sowaitprim()
944 (void *)so, request_prim, ack_prim, min_size, (void *)mpp, wait)); in sowaitprim()
946 ASSERT(MUTEX_HELD(&so->so_lock)); in sowaitprim()
948 error = sowaitack(so, &mp, wait); in sowaitprim()
952 dprintso(so, 1, ("got msg %p\n", (void *)mp)); in sowaitprim()
956 eprintsoline(so, EPROTO); in sowaitprim()
974 eprintsoline(so, EPROTO); in sowaitprim()
986 dprintso(so, 0, ("error_ack for %d: %d/%d ->%d\n", in sowaitprim()
997 dprintso(so, 0, ("error_ack for %d: %d/%d\n", in sowaitprim()
1001 dprintso(so, 0, ("ok_ack for %d, expected %d for %d\n", in sowaitprim()
1004 dprintso(so, 0, in sowaitprim()
1011 eprintsoline(so, EPROTO); in sowaitprim()
1019 sowaitokack(struct sonode *so, t_scalar_t request_prim) in sowaitokack() argument
1024 error = sowaitprim(so, request_prim, T_OK_ACK, in sowaitokack()
1036 soqueueack(struct sonode *so, mblk_t *mp) in soqueueack() argument
1038 sotpi_info_t *sti = SOTOTPI(so); in soqueueack()
1048 mutex_enter(&so->so_lock); in soqueueack()
1050 dprintso(so, 1, ("sti_ack_mp already set\n")); in soqueueack()
1056 mutex_exit(&so->so_lock); in soqueueack()
1063 sowaitack(struct sonode *so, mblk_t **mpp, clock_t wait) in sowaitack() argument
1065 sotpi_info_t *sti = SOTOTPI(so); in sowaitack()
1067 ASSERT(MUTEX_HELD(&so->so_lock)); in sowaitack()
1078 if (cv_reltimedwait(&sti->sti_ack_cv, &so->so_lock, in sowaitack()
1080 eprintsoline(so, ETIME); in sowaitack()
1085 cv_wait(&sti->sti_ack_cv, &so->so_lock); in sowaitack()
1111 soqueueconnind(struct sonode *so, mblk_t *mp) in soqueueconnind() argument
1113 sotpi_info_t *sti = SOTOTPI(so); in soqueueconnind()
1122 mutex_enter(&so->so_lock); in soqueueconnind()
1132 cv_signal(&so->so_acceptq_cv); in soqueueconnind()
1133 mutex_exit(&so->so_lock); in soqueueconnind()
1142 sowaitconnind(struct sonode *so, int fmode, mblk_t **mpp) in sowaitconnind() argument
1145 sotpi_info_t *sti = SOTOTPI(so); in sowaitconnind()
1148 ASSERT(MUTEX_NOT_HELD(&so->so_lock)); in sowaitconnind()
1149 mutex_enter(&so->so_lock); in sowaitconnind()
1151 if (so->so_error) { in sowaitconnind()
1152 error = sogeterr(so, B_TRUE); in sowaitconnind()
1154 mutex_exit(&so->so_lock); in sowaitconnind()
1165 if (so->so_state & SS_CLOSING) { in sowaitconnind()
1170 if (!cv_wait_sig_swap(&so->so_acceptq_cv, &so->so_lock)) { in sowaitconnind()
1185 mutex_exit(&so->so_lock); in sowaitconnind()
1195 soflushconnind(struct sonode *so, t_scalar_t seqno) in soflushconnind() argument
1199 sotpi_info_t *sti = SOTOTPI(so); in soflushconnind()
1201 mutex_enter(&so->so_lock); in soflushconnind()
1206 dprintso(so, 1, in soflushconnind()
1225 so->so_error = ECONNABORTED; in soflushconnind()
1226 mutex_exit(&so->so_lock); in soflushconnind()
1232 mutex_exit(&so->so_lock); in soflushconnind()
1233 dprintso(so, 1, ("t_discon_ind: NOT found T_CONN_IND %d\n", seqno)); in soflushconnind()
1243 sowaitconnected(struct sonode *so, int fmode, int nosig) in sowaitconnected() argument
1247 ASSERT(MUTEX_HELD(&so->so_lock)); in sowaitconnected()
1249 while ((so->so_state & (SS_ISCONNECTED|SS_ISCONNECTING)) == in sowaitconnected()
1250 SS_ISCONNECTING && so->so_error == 0) { in sowaitconnected()
1252 dprintso(so, 1, ("waiting for SS_ISCONNECTED on %p\n", in sowaitconnected()
1253 (void *)so)); in sowaitconnected()
1257 if (so->so_state & SS_CLOSING) in sowaitconnected()
1261 cv_wait(&so->so_state_cv, &so->so_lock); in sowaitconnected()
1262 else if (!cv_wait_sig_swap(&so->so_state_cv, &so->so_lock)) { in sowaitconnected()
1270 dprintso(so, 1, ("awoken on %p\n", (void *)so)); in sowaitconnected()
1273 if (so->so_error != 0) { in sowaitconnected()
1274 error = sogeterr(so, B_TRUE); in sowaitconnected()
1276 dprintso(so, 1, ("sowaitconnected: error %d\n", error)); in sowaitconnected()
1279 if (!(so->so_state & SS_ISCONNECTED)) { in sowaitconnected()
1286 dprintso(so, 1, ("sowaitconnected: error %d\n", error)); in sowaitconnected()
1297 so_oob_sig(struct sonode *so, int extrasig, in so_oob_sig() argument
1300 sotpi_info_t *sti = SOTOTPI(so); in so_oob_sig()
1302 ASSERT(MUTEX_HELD(&so->so_lock)); in so_oob_sig()
1304 ASSERT(so_verify_oobstate(so)); in so_oob_sig()
1312 ASSERT(so->so_state & SS_OOBPEND); in so_oob_sig()
1327 so->so_state |= SS_OOBPEND; in so_oob_sig()
1332 so->so_state &= ~(SS_HAVEOOBDATA|SS_HADOOBDATA); in so_oob_sig()
1333 if (so->so_oobmsg != NULL) { in so_oob_sig()
1334 dprintso(so, 1, ("sock: discarding old oob\n")); in so_oob_sig()
1335 freemsg(so->so_oobmsg); in so_oob_sig()
1336 so->so_oobmsg = NULL; in so_oob_sig()
1340 ASSERT(so_verify_oobstate(so)); in so_oob_sig()
1349 so_oob_exdata(struct sonode *so, mblk_t *mp, in so_oob_exdata() argument
1352 sotpi_info_t *sti = SOTOTPI(so); in so_oob_exdata()
1354 ASSERT(MUTEX_HELD(&so->so_lock)); in so_oob_exdata()
1356 ASSERT(so_verify_oobstate(so)); in so_oob_exdata()
1369 ASSERT(so_verify_oobstate(so)); in so_oob_exdata()
1378 so_oob_data(struct sonode *so, mblk_t *mp, in so_oob_data() argument
1381 sotpi_info_t *sti = SOTOTPI(so); in so_oob_data()
1383 ASSERT(MUTEX_HELD(&so->so_lock)); in so_oob_data()
1385 ASSERT(so_verify_oobstate(so)); in so_oob_data()
1393 ASSERT(so->so_oobmsg == NULL); in so_oob_data()
1394 if (so->so_options & SO_OOBINLINE) { in so_oob_data()
1399 so->so_state |= SS_HAVEOOBDATA; in so_oob_data()
1400 so->so_oobmsg = mp; in so_oob_data()
1403 ASSERT(so_verify_oobstate(so)); in so_oob_data()
1415 so_save_discon_ind(struct sonode *so, in so_save_discon_ind() argument
1417 void (*func)(struct sonode *so, mblk_t *)) in so_save_discon_ind() argument
1419 sotpi_info_t *sti = SOTOTPI(so); in so_save_discon_ind()
1421 ASSERT(MUTEX_HELD(&so->so_lock)); in so_save_discon_ind()
1428 if (sti->sti_discon_ind_mp != NULL || (so->so_flag & SOASYNC_UNBIND)) { in so_save_discon_ind()
1447 so_drain_discon_ind(struct sonode *so) in so_drain_discon_ind() argument
1450 void (*func)(struct sonode *so, mblk_t *); in so_drain_discon_ind()
1451 sotpi_info_t *sti = SOTOTPI(so); in so_drain_discon_ind()
1453 ASSERT(MUTEX_HELD(&so->so_lock)); in so_drain_discon_ind()
1454 ASSERT(so->so_flag & (SOLOCKED|SOASYNC_UNBIND)); in so_drain_discon_ind()
1470 (void) (*func)(so, bp); in so_drain_discon_ind()
1479 so_flush_discon_ind(struct sonode *so) in so_flush_discon_ind() argument
1482 sotpi_info_t *sti = SOTOTPI(so); in so_flush_discon_ind()
1484 ASSERT(MUTEX_HELD(&so->so_lock)); in so_flush_discon_ind()
1516 strsock_discon_ind(struct sonode *so, mblk_t *discon_mp) in strsock_discon_ind() argument
1524 sotpi_info_t *sti = SOTOTPI(so); in strsock_discon_ind()
1526 ASSERT(MUTEX_HELD(&so->so_lock)); in strsock_discon_ind()
1533 vp = SOTOV(so); in strsock_discon_ind()
1540 ASSERT((so->so_state & SS_ACCEPTCONN) == 0); in strsock_discon_ind()
1546 soisdisconnected(so, tpr->discon_ind.DISCON_reason); in strsock_discon_ind()
1561 ASSERT(!(so->so_state & SS_ISBOUND)); in strsock_discon_ind()
1562 mutex_exit(&so->so_lock); in strsock_discon_ind()
1563 } else if (!(so->so_state & SS_ISBOUND)) { in strsock_discon_ind()
1564 mutex_exit(&so->so_lock); in strsock_discon_ind()
1571 ASSERT((so->so_flag & SOASYNC_UNBIND) == 0); in strsock_discon_ind()
1578 so->so_flag |= SOASYNC_UNBIND; in strsock_discon_ind()
1579 ASSERT(!(so->so_state & (SS_ISCONNECTED|SS_ISCONNECTING))); in strsock_discon_ind()
1580 so->so_state &= ~(SS_ISBOUND|SS_ACCEPTCONN); in strsock_discon_ind()
1582 mutex_exit(&so->so_lock); in strsock_discon_ind()
1598 (void) putnextctl1(strvp2wq(SOTOV(so)), M_FLUSH, FLUSHRW); in strsock_discon_ind()
1599 error = kstrputmsg(SOTOV(so), mp, NULL, 0, 0, in strsock_discon_ind()
1603 eprintsoline(so, error); in strsock_discon_ind()
1608 strsetrerror(SOTOV(so), 0, 0, sogetrderr); in strsock_discon_ind()
1609 strsetwerror(SOTOV(so), 0, 0, sogetwrerr); in strsock_discon_ind()
1610 strseteof(SOTOV(so), 1); in strsock_discon_ind()
1615 dprintso(so, 1, ("T_DISCON_IND: error %d\n", so->so_error)); in strsock_discon_ind()
1638 mutex_enter(&so->so_lock); in strsock_discon_ind()
1664 struct sonode *so; in strsock_proto() local
1668 so = VTOSO(vp); in strsock_proto()
1669 sti = SOTOTPI(so); in strsock_proto()
1671 dprintso(so, 1, ("strsock_proto(%p, %p)\n", (void *)vp, (void *)mp)); in strsock_proto()
1696 dprintso(so, 1, ("strsock_proto: primitive %d\n", tpr->type)); in strsock_proto()
1717 dprintso(so, 0, in strsock_proto()
1741 if ((so->so_mode & SM_CONNREQUIRED) || in strsock_proto()
1742 !(so->so_state & SS_ISCONNECTED)) { in strsock_proto()
1749 if (so->so_family == AF_UNIX && msgdsize(mp) == 0 && in strsock_proto()
1759 mutex_enter(&so->so_lock); in strsock_proto()
1760 soseterror(so, EPROTO); in strsock_proto()
1761 mutex_exit(&so->so_lock); in strsock_proto()
1814 mutex_enter(&so->so_lock); in strsock_proto()
1815 soseterror(so, EPROTO); in strsock_proto()
1816 mutex_exit(&so->so_lock); in strsock_proto()
1824 if (so->so_family == AF_INET) { in strsock_proto()
1832 mutex_enter(&so->so_lock); in strsock_proto()
1841 (so->so_type != SOCK_RAW && in strsock_proto()
1845 dprintso(so, 0, in strsock_proto()
1847 pr_addr(so->so_family, in strsock_proto()
1849 dprintso(so, 0, (" - %s\n", in strsock_proto()
1850 pr_addr(so->so_family, sti->sti_faddr_sa, in strsock_proto()
1853 mutex_exit(&so->so_lock); in strsock_proto()
1857 mutex_exit(&so->so_lock); in strsock_proto()
1858 } else if (so->so_family == AF_INET6) { in strsock_proto()
1867 mutex_enter(&so->so_lock); in strsock_proto()
1878 (so->so_type != SOCK_RAW && in strsock_proto()
1882 dprintso(so, 0, in strsock_proto()
1884 pr_addr(so->so_family, in strsock_proto()
1886 dprintso(so, 0, (" - %s\n", in strsock_proto()
1887 pr_addr(so->so_family, sti->sti_faddr_sa, in strsock_proto()
1890 mutex_exit(&so->so_lock); in strsock_proto()
1894 mutex_exit(&so->so_lock); in strsock_proto()
1895 } else if (so->so_family == AF_UNIX && in strsock_proto()
1910 mutex_enter(&so->so_lock); in strsock_proto()
1911 soseterror(so, EPROTO); in strsock_proto()
1912 mutex_exit(&so->so_lock); in strsock_proto()
1924 mutex_enter(&so->so_lock); in strsock_proto()
1925 sobreakconn(so, ECONNRESET); in strsock_proto()
1926 mutex_exit(&so->so_lock); in strsock_proto()
1927 strsetrerror(SOTOV(so), 0, 0, sogetrderr); in strsock_proto()
1955 if (so->so_family == AF_UNIX && msgdsize(mp->b_cont) == 0 && in strsock_proto()
1972 mutex_enter(&so->so_lock); in strsock_proto()
1973 soseterror(so, EPROTO); in strsock_proto()
1974 mutex_exit(&so->so_lock); in strsock_proto()
1986 mutex_enter(&so->so_lock); in strsock_proto()
1987 socantsendmore(so); in strsock_proto()
1989 mutex_exit(&so->so_lock); in strsock_proto()
1990 strsetwerror(SOTOV(so), 0, 0, sogetwrerr); in strsock_proto()
2024 dprintso(so, 1, in strsock_proto()
2027 pr_state(so->so_state, so->so_mode))); in strsock_proto()
2030 dprintso(so, 0, in strsock_proto()
2046 mutex_enter(&so->so_lock); in strsock_proto()
2047 so_oob_sig(so, 0, allmsgsigs, pollwakeups); in strsock_proto()
2048 mctl = so_oob_exdata(so, mctl, allmsgsigs, pollwakeups); in strsock_proto()
2049 mdata = so_oob_data(so, mdata, allmsgsigs, pollwakeups); in strsock_proto()
2083 !(so->so_options & SO_OOBINLINE)) { in strsock_proto()
2097 mutex_exit(&so->so_lock); in strsock_proto()
2119 dprintso(so, 1, in strsock_proto()
2124 pr_state(so->so_state, so->so_mode))); in strsock_proto()
2126 dprintso(so, 1, in strsock_proto()
2131 pr_state(so->so_state, so->so_mode))); in strsock_proto()
2134 mutex_exit(&so->so_lock); in strsock_proto()
2157 mutex_enter(&so->so_lock); in strsock_proto()
2158 if ((so->so_state & (SS_ISCONNECTED|SS_ISCONNECTING)) != in strsock_proto()
2160 mutex_exit(&so->so_lock); in strsock_proto()
2161 dprintso(so, 1, in strsock_proto()
2162 ("T_CONN_CON: state %x\n", so->so_state)); in strsock_proto()
2174 if (so->so_family == AF_UNIX ? in strsock_proto()
2181 soisdisconnected(so, EPROTO); in strsock_proto()
2184 mutex_exit(&so->so_lock); in strsock_proto()
2185 strsetrerror(SOTOV(so), 0, 0, sogetrderr); in strsock_proto()
2186 strsetwerror(SOTOV(so), 0, 0, sogetwrerr); in strsock_proto()
2187 strseteof(SOTOV(so), 1); in strsock_proto()
2204 mutex_exit(&so->so_lock); in strsock_proto()
2205 strsetrerror(SOTOV(so), 0, 0, sogetrderr); in strsock_proto()
2206 strsetwerror(SOTOV(so), 0, 0, sogetwrerr); in strsock_proto()
2207 strseteof(SOTOV(so), 1); in strsock_proto()
2222 if (so->so_family != AF_UNIX) { in strsock_proto()
2229 if (so->so_peercred != NULL) in strsock_proto()
2230 crfree(so->so_peercred); in strsock_proto()
2231 so->so_peercred = msg_getcred(mp, &so->so_cpid); in strsock_proto()
2232 if (so->so_peercred != NULL) in strsock_proto()
2233 crhold(so->so_peercred); in strsock_proto()
2236 soisconnected(so); in strsock_proto()
2237 mutex_exit(&so->so_lock); in strsock_proto()
2264 if (!(so->so_state & SS_ACCEPTCONN)) { in strsock_proto()
2271 soqueueconnind(so, mp); in strsock_proto()
2296 mutex_enter(&so->so_lock); in strsock_proto()
2297 so->so_state &= ~SS_ISCONNECTING; in strsock_proto()
2298 socantrcvmore(so); in strsock_proto()
2299 mutex_exit(&so->so_lock); in strsock_proto()
2300 strseteof(SOTOV(so), 1); in strsock_proto()
2316 if (so->so_state & SS_ACCEPTCONN) { in strsock_proto()
2326 (void) soflushconnind(so, tpr->discon_ind.SEQ_number); in strsock_proto()
2343 mutex_enter(&so->so_lock); in strsock_proto()
2344 if ((so->so_state & SS_CANTRCVMORE) && in strsock_proto()
2345 (so->so_family == AF_UNIX)) { in strsock_proto()
2346 socantsendmore(so); in strsock_proto()
2348 mutex_exit(&so->so_lock); in strsock_proto()
2349 strsetwerror(SOTOV(so), 0, 0, sogetwrerr); in strsock_proto()
2350 dprintso(so, 1, in strsock_proto()
2351 ("T_DISCON_IND: error %d\n", so->so_error)); in strsock_proto()
2362 } else if (so->so_flag & (SOASYNC_UNBIND | SOLOCKED)) { in strsock_proto()
2366 so_save_discon_ind(so, mp, strsock_discon_ind); in strsock_proto()
2367 mutex_exit(&so->so_lock); in strsock_proto()
2372 (void) strsock_discon_ind(so, mp); in strsock_proto()
2373 mutex_exit(&so->so_lock); in strsock_proto()
2383 dprintso(so, 0, in strsock_proto()
2394 if (so->so_mode & SM_CONNREQUIRED) { in strsock_proto()
2396 eprintsoline(so, 0); in strsock_proto()
2414 mutex_enter(&so->so_lock); in strsock_proto()
2415 if (so->so_state & SS_ISCONNECTED) { in strsock_proto()
2420 switch (so->so_family) { in strsock_proto()
2466 dprintso(so, 0, in strsock_proto()
2468 pr_addr(so->so_family, in strsock_proto()
2470 dprintso(so, 0, ("%s\n", in strsock_proto()
2471 pr_addr(so->so_family, sti->sti_faddr_sa, in strsock_proto()
2474 mutex_exit(&so->so_lock); in strsock_proto()
2489 soseterror(so, error); in strsock_proto()
2490 mutex_exit(&so->so_lock); in strsock_proto()
2491 strsetrerror(SOTOV(so), 0, 0, sogetrderr); in strsock_proto()
2492 strsetwerror(SOTOV(so), 0, 0, sogetwrerr); in strsock_proto()
2508 if (!(so->so_options & SO_DGRAM_ERRIND)) { in strsock_proto()
2509 mutex_exit(&so->so_lock); in strsock_proto()
2522 mutex_exit(&so->so_lock); in strsock_proto()
2527 dprintso(so, 0, in strsock_proto()
2543 mutex_enter(&so->so_lock); in strsock_proto()
2544 if ((so->so_flag & SOASYNC_UNBIND) && in strsock_proto()
2546 so_unlock_single(so, SOASYNC_UNBIND); in strsock_proto()
2547 mutex_exit(&so->so_lock); in strsock_proto()
2551 mutex_exit(&so->so_lock); in strsock_proto()
2552 soqueueack(so, mp); in strsock_proto()
2566 mutex_enter(&so->so_lock); in strsock_proto()
2567 if ((so->so_flag & SOASYNC_UNBIND) && in strsock_proto()
2569 dprintso(so, 1, in strsock_proto()
2571 so_unlock_single(so, SOASYNC_UNBIND); in strsock_proto()
2572 mutex_exit(&so->so_lock); in strsock_proto()
2576 mutex_exit(&so->so_lock); in strsock_proto()
2577 soqueueack(so, mp); in strsock_proto()
2588 soqueueack(so, mp); in strsock_proto()
2605 soqueueack(so, mp); in strsock_proto()
2616 soqueueack(so, mp); in strsock_proto()
2627 soqueueack(so, mp); in strsock_proto()
2655 struct sonode *so; in strsock_misc() local
2658 so = VTOSO(vp); in strsock_misc()
2659 sti = SOTOTPI(so); in strsock_misc()
2661 dprintso(so, 1, ("strsock_misc(%p, %p, 0x%x)\n", in strsock_misc()
2679 mutex_enter(&so->so_lock); in strsock_misc()
2680 dprintso(so, 1, in strsock_misc()
2683 pr_state(so->so_state, so->so_mode))); in strsock_misc()
2684 so_oob_sig(so, 1, allmsgsigs, pollwakeups); in strsock_misc()
2685 dprintso(so, 1, in strsock_misc()
2690 pr_state(so->so_state, so->so_mode))); in strsock_misc()
2691 mutex_exit(&so->so_lock); in strsock_misc()
2744 so_set_events(struct sonode *so, vnode_t *vp, cred_t *cr) in so_set_events() argument
2746 int events = so->so_state & SS_ASYNC ? in so_set_events()
2750 return (so_set_asyncsigs(vp, so->so_pgrp, events, 0, cr)); in so_set_events()
2756 so_flip_async(struct sonode *so, vnode_t *vp, int mode, cred_t *cr) in so_flip_async() argument
2758 ASSERT(mutex_owned(&so->so_lock)); in so_flip_async()
2759 if (so->so_pgrp != 0) { in so_flip_async()
2761 int events = so->so_state & SS_ASYNC ? /* Old flag */ in so_flip_async()
2765 so_lock_single(so); in so_flip_async()
2766 mutex_exit(&so->so_lock); in so_flip_async()
2768 error = so_set_asyncsigs(vp, so->so_pgrp, events, mode, cr); in so_flip_async()
2770 mutex_enter(&so->so_lock); in so_flip_async()
2771 so_unlock_single(so, SOLOCKED); in so_flip_async()
2775 so->so_state ^= SS_ASYNC; in so_flip_async()
2784 so_set_siggrp(struct sonode *so, vnode_t *vp, pid_t pgrp, int mode, cred_t *cr) in so_set_siggrp() argument
2786 int events = so->so_state & SS_ASYNC ? in so_set_siggrp()
2791 ASSERT(mutex_owned(&so->so_lock)); in so_set_siggrp()
2799 so_lock_single(so); in so_set_siggrp()
2800 mutex_exit(&so->so_lock); in so_set_siggrp()
2803 dprintso(so, 1, ("setown: adding pgrp %d ev 0x%x\n", in so_set_siggrp()
2807 eprintsoline(so, error); in so_set_siggrp()
2812 if (so->so_pgrp != 0) { in so_set_siggrp()
2813 dprintso(so, 1, ("setown: removing pgrp %d\n", so->so_pgrp)); in so_set_siggrp()
2814 error = so_set_asyncsigs(vp, so->so_pgrp, 0, mode, cr); in so_set_siggrp()
2816 eprintsoline(so, error); in so_set_siggrp()
2820 mutex_enter(&so->so_lock); in so_set_siggrp()
2821 so_unlock_single(so, SOLOCKED); in so_set_siggrp()
2822 so->so_pgrp = pgrp; in so_set_siggrp()
2825 mutex_enter(&so->so_lock); in so_set_siggrp()
2826 so_unlock_single(so, SOLOCKED); in so_set_siggrp()
2845 struct sonode *so; in sock_getmsg() local
2859 so = VTOSO(vp); in sock_getmsg()
2861 dprintso(so, 1, ("sock_getmsg(%p) %s\n", in sock_getmsg()
2862 (void *)so, pr_state(so->so_state, so->so_mode))); in sock_getmsg()
2864 if (so->so_version == SOV_STREAM) { in sock_getmsg()
2868 eprintsoline(so, ENOSTR); in sock_getmsg()
2891 struct sonode *so; in sock_putmsg() local
2904 so = VTOSO(vp); in sock_putmsg()
2906 dprintso(so, 1, ("sock_putmsg(%p) %s\n", in sock_putmsg()
2907 (void *)so, pr_state(so->so_state, so->so_mode))); in sock_putmsg()
2909 if (so->so_version == SOV_STREAM) { in sock_putmsg()
2913 eprintsoline(so, ENOSTR); in sock_putmsg()
2926 struct sonode *so; in sock_getfasync() local
2934 so = VTOSO(vp->v_stream->sd_vnode); in sock_getfasync()
2936 so = VTOSO(vp); in sock_getfasync()
2938 if (so->so_version == SOV_STREAM || !(so->so_state & SS_ASYNC)) in sock_getfasync()