Lines Matching refs:nbp

83 static int  nb_disconnect(struct nbpcb *nbp);
94 nb_getmsg_mlen(struct nbpcb *nbp, mblk_t **mpp, size_t mlen)
103 ASSERT(nbp->nbp_flags & NBF_RECVLOCK);
104 /* nbp->nbp_tiptr checked by caller */
125 error = t_kspoll(nbp->nbp_tiptr, timo, waitflg, &events);
138 error = tli_recv(nbp->nbp_tiptr, &tm, fmode);
202 (void) nb_disconnect(nbp);
230 nb_snddis(struct nbpcb *nbp)
232 TIUSER *tiptr = nbp->nbp_tiptr;
233 cred_t *cr = nbp->nbp_cred;
238 ASSERT(MUTEX_HELD(&nbp->nbp_lock));
289 nbssn_peekhdr(struct nbpcb *nbp, size_t *lenp, uint8_t *rpcodep)
298 error = nb_getmsg_mlen(nbp, &nbp->nbp_frag, sizeof (len));
302 if (!pullupmsg(nbp->nbp_frag, sizeof (len)))
310 hdr = (uint32_t *)nbp->nbp_frag->b_rptr;
350 nbssn_recv(struct nbpcb *nbp, mblk_t **mpp, int *lenp,
359 ASSERT(nbp->nbp_flags & NBF_RECVLOCK);
361 if (nbp->nbp_tiptr == NULL)
374 error = nbssn_peekhdr(nbp, &len, &rpcode);
389 error = nb_getmsg_mlen(nbp, &nbp->nbp_frag, len + 4);
401 m0 = nbp->nbp_frag;
411 nbp->nbp_frag = NULL;
413 nbp->nbp_frag = m_split(m0, len, 1);
415 if (nbp->nbp_state != NBST_SESSION) {
492 struct nbpcb *nbp;
494 nbp = kmem_zalloc(sizeof (struct nbpcb), KM_SLEEP);
496 nbp->nbp_timo.tv_sec = SMB_NBTIMO;
497 nbp->nbp_state = NBST_CLOSED; /* really IDLE */
498 nbp->nbp_vc = vcp;
499 nbp->nbp_sndbuf = smb_tcpsndbuf;
500 nbp->nbp_rcvbuf = smb_tcprcvbuf;
501 nbp->nbp_cred = cr;
503 mutex_init(&nbp->nbp_lock, NULL, MUTEX_DRIVER, NULL);
504 vcp->vc_tdata = nbp;
518 struct nbpcb *nbp = vcp->vc_tdata;
520 if (nbp == NULL)
529 if (nbp->nbp_flags & NBF_CONNECTED)
530 (void) nb_disconnect(nbp);
531 if (nbp->nbp_tiptr)
532 (void) t_kclose(nbp->nbp_tiptr, 0);
533 if (nbp->nbp_laddr)
534 smb_free_sockaddr((struct sockaddr *)nbp->nbp_laddr);
535 if (nbp->nbp_paddr)
536 smb_free_sockaddr((struct sockaddr *)nbp->nbp_paddr);
537 if (nbp->nbp_cred)
538 crfree(nbp->nbp_cred);
539 mutex_destroy(&nbp->nbp_lock);
540 kmem_free(nbp, sizeof (*nbp));
550 nb_loan_fp(struct nbpcb *nbp, struct file *fp, cred_t *cr)
559 mutex_enter(&nbp->nbp_lock);
561 nbp->nbp_tiptr = tiptr;
562 nbp->nbp_fmode = tiptr->fp->f_flag;
563 nbp->nbp_flags |= NBF_CONNECTED;
564 nbp->nbp_state = NBST_SESSION;
566 mutex_exit(&nbp->nbp_lock);
589 nb_unloan_fp(struct nbpcb *nbp)
592 mutex_enter(&nbp->nbp_lock);
594 nbp->nbp_flags &= ~NBF_CONNECTED;
595 while (nbp->nbp_flags & (NBF_SENDLOCK | NBF_RECVLOCK)) {
596 nbp->nbp_flags |= NBF_LOCKWAIT;
597 cv_wait(&nbp->nbp_cv, &nbp->nbp_lock);
599 if (nbp->nbp_frag != NULL) {
600 freemsg(nbp->nbp_frag);
601 nbp->nbp_frag = NULL;
603 if (nbp->nbp_tiptr != NULL) {
604 (void) t_kclose(nbp->nbp_tiptr, 0);
605 nbp->nbp_tiptr = NULL;
607 nbp->nbp_state = NBST_CLOSED;
609 mutex_exit(&nbp->nbp_lock);
615 struct nbpcb *nbp = vcp->vc_tdata;
621 (void) nb_disconnect(nbp);
622 nb_unloan_fp(nbp);
628 error = nb_loan_fp(nbp, fp, cr);
652 struct nbpcb *nbp = vcp->vc_tdata;
654 if (nbp == NULL)
657 return (nb_disconnect(nbp));
661 nb_disconnect(struct nbpcb *nbp)
665 mutex_enter(&nbp->nbp_lock);
667 if ((nbp->nbp_flags & NBF_CONNECTED) != 0) {
668 nbp->nbp_flags &= ~NBF_CONNECTED;
669 err = nb_snddis(nbp);
672 mutex_exit(&nbp->nbp_lock);
682 nbssn_send(struct nbpcb *nbp, mblk_t *m)
689 ASSERT(nbp->nbp_flags & NBF_SENDLOCK);
691 if (nbp->nbp_tiptr == NULL) {
742 error = tli_send(nbp->nbp_tiptr, m, 0);
758 struct nbpcb *nbp = vcp->vc_tdata;
761 mutex_enter(&nbp->nbp_lock);
762 if ((nbp->nbp_flags & NBF_CONNECTED) == 0) {
766 if (nbp->nbp_flags & NBF_SENDLOCK) {
771 nbp->nbp_flags |= NBF_SENDLOCK;
772 mutex_exit(&nbp->nbp_lock);
774 err = nbssn_send(nbp, m);
777 mutex_enter(&nbp->nbp_lock);
778 nbp->nbp_flags &= ~NBF_SENDLOCK;
779 if (nbp->nbp_flags & NBF_LOCKWAIT) {
780 nbp->nbp_flags &= ~NBF_LOCKWAIT;
781 cv_broadcast(&nbp->nbp_cv);
784 mutex_exit(&nbp->nbp_lock);
793 struct nbpcb *nbp = vcp->vc_tdata;
797 mutex_enter(&nbp->nbp_lock);
798 if ((nbp->nbp_flags & NBF_CONNECTED) == 0) {
802 if (nbp->nbp_flags & NBF_RECVLOCK) {
807 nbp->nbp_flags |= NBF_RECVLOCK;
808 mutex_exit(&nbp->nbp_lock);
810 err = nbssn_recv(nbp, mpp, &rplen, &rpcode);
812 mutex_enter(&nbp->nbp_lock);
813 nbp->nbp_flags &= ~NBF_RECVLOCK;
814 if (nbp->nbp_flags & NBF_LOCKWAIT) {
815 nbp->nbp_flags &= ~NBF_LOCKWAIT;
816 cv_broadcast(&nbp->nbp_cv);
819 mutex_exit(&nbp->nbp_lock);
838 struct nbpcb *nbp = vcp->vc_tdata;
842 *(int *)data = nbp->nbp_sndbuf;
845 *(int *)data = nbp->nbp_rcvbuf;
848 *(struct timespec *)data = nbp->nbp_timo;
852 *(void **)data = nbp->nbp_selectid;
857 *(void **)data = nbp->nbp_upcall;