Lines Matching refs:ssa

137 sosctp_assoc(struct sctp_sonode *ss, sctp_assoc_t id, struct sctp_soassoc **ssa)  in sosctp_assoc()  argument
139 ASSERT(ssa != NULL); in sosctp_assoc()
142 *ssa = NULL; in sosctp_assoc()
146 if ((*ssa = ss->ss_assocs[id].ssi_assoc) == NULL) { in sosctp_assoc()
149 if (((*ssa)->ssa_state & (SS_CANTSENDMORE|SS_CANTRCVMORE)) == in sosctp_assoc()
154 *ssa = NULL; in sosctp_assoc()
157 SSA_REFHOLD(*ssa) in sosctp_assoc()
168 struct sctp_soassoc *ssa; in sosctp_assoc_create() local
170 ssa = kmem_cache_alloc(sosctp_assoccache, kmflag); in sosctp_assoc_create()
171 if (ssa != NULL) { in sosctp_assoc_create()
172 ssa->ssa_type = SOSCTP_ASSOC; in sosctp_assoc_create()
173 ssa->ssa_refcnt = 1; in sosctp_assoc_create()
174 ssa->ssa_sonode = ss; in sosctp_assoc_create()
175 ssa->ssa_state = 0; in sosctp_assoc_create()
176 ssa->ssa_error = 0; in sosctp_assoc_create()
177 ssa->ssa_snd_qfull = 0; in sosctp_assoc_create()
178 ssa->ssa_rcv_queued = 0; in sosctp_assoc_create()
179 ssa->ssa_flowctrld = B_FALSE; in sosctp_assoc_create()
181 dprint(2, ("sosctp_assoc_create %p %p\n", (void *)ss, (void *)ssa)); in sosctp_assoc_create()
182 return (ssa); in sosctp_assoc_create()
186 sosctp_assoc_free(struct sctp_sonode *ss, struct sctp_soassoc *ssa) in sosctp_assoc_free() argument
190 dprint(2, ("sosctp_assoc_free %p %p (%d)\n", (void *)ss, (void *)ssa, in sosctp_assoc_free()
191 ssa->ssa_id)); in sosctp_assoc_free()
193 if (ssa->ssa_conn != NULL) { in sosctp_assoc_free()
196 sctp_recvd(ssa->ssa_conn, so->so_rcvbuf); in sosctp_assoc_free()
197 (void) sctp_disconnect(ssa->ssa_conn); in sosctp_assoc_free()
198 sctp_close(ssa->ssa_conn); in sosctp_assoc_free()
201 ssa->ssa_conn = NULL; in sosctp_assoc_free()
203 sosctp_aid_reserve(ss, ssa->ssa_id, -1); in sosctp_assoc_free()
204 ss->ss_assocs[ssa->ssa_id].ssi_assoc = NULL; in sosctp_assoc_free()
206 kmem_cache_free(sosctp_assoccache, ssa); in sosctp_assoc_free()
309 sosctp_assoc_waitconnected(struct sctp_soassoc *ssa, int fmode) in sosctp_assoc_waitconnected() argument
311 struct sonode *so = &ssa->ssa_sonode->ss_so; in sosctp_assoc_waitconnected()
314 ASSERT((ssa->ssa_state & (SS_ISCONNECTED|SS_ISCONNECTING)) || in sosctp_assoc_waitconnected()
315 ssa->ssa_error != 0); in sosctp_assoc_waitconnected()
317 while ((ssa->ssa_state & (SS_ISCONNECTED|SS_ISCONNECTING)) == in sosctp_assoc_waitconnected()
318 SS_ISCONNECTING && ssa->ssa_error == 0) { in sosctp_assoc_waitconnected()
336 if (ssa->ssa_error != 0) { in sosctp_assoc_waitconnected()
337 error = ssa->ssa_error; in sosctp_assoc_waitconnected()
338 ssa->ssa_error = 0; in sosctp_assoc_waitconnected()
343 if (!(ssa->ssa_state & SS_ISCONNECTED)) { in sosctp_assoc_waitconnected()
364 struct sctp_soassoc *ssa; in sosctp_assoc_createconn() local
407 ssa = sosctp_assoc_create(ss, KM_SLEEP); in sosctp_assoc_createconn()
408 ssa->ssa_wroff = ss->ss_wroff; in sosctp_assoc_createconn()
409 ssa->ssa_wrsize = ss->ss_wrsize; in sosctp_assoc_createconn()
410 ssa->ssa_conn = sctp_create(ssa, (struct sctp_s *)so->so_proto_handle, in sosctp_assoc_createconn()
415 ss->ss_assocs[id].ssi_assoc = ssa; in sosctp_assoc_createconn()
416 ssa->ssa_id = id; in sosctp_assoc_createconn()
417 if (ssa->ssa_conn == NULL) { in sosctp_assoc_createconn()
418 ASSERT(ssa->ssa_refcnt == 1); in sosctp_assoc_createconn()
419 sosctp_assoc_free(ss, ssa); in sosctp_assoc_createconn()
423 ssa->ssa_state |= SS_ISBOUND; in sosctp_assoc_createconn()
425 sosctp_assoc_isconnecting(ssa); in sosctp_assoc_createconn()
426 SSA_REFHOLD(ssa); in sosctp_assoc_createconn()
434 error = sctp_set_opt(ssa->ssa_conn, IPPROTO_SCTP, SCTP_INITMSG, in sosctp_assoc_createconn()
440 if ((error = sctp_connect(ssa->ssa_conn, name, namelen, cr, pid)) != 0) in sosctp_assoc_createconn()
447 error = sosctp_assoc_waitconnected(ssa, fflag); in sosctp_assoc_createconn()
462 ASSERT(ssa->ssa_state & (SS_CANTSENDMORE | SS_CANTRCVMORE)); in sosctp_assoc_createconn()
463 SSA_REFRELE(ss, ssa); in sosctp_assoc_createconn()
464 ssa = NULL; in sosctp_assoc_createconn()
468 *ssap = ssa; in sosctp_assoc_createconn()
480 if (ssa->ssa_refcnt > 2) in sosctp_assoc_createconn()
481 ssa->ssa_refcnt -= 2; in sosctp_assoc_createconn()
483 sosctp_assoc_free(ss, ssa); in sosctp_assoc_createconn()
514 struct sctp_soassoc *ssa) in sosctp_assoc_move() argument
527 (ssa->ssa_state & (SS_ISCONNECTED|SS_ISCONNECTING| in sosctp_assoc_move()
529 nso->so_error = ssa->ssa_error; in sosctp_assoc_move()
530 nso->so_snd_qfull = ssa->ssa_snd_qfull; in sosctp_assoc_move()
531 nso->so_proto_props.sopp_wroff = ssa->ssa_wroff; in sosctp_assoc_move()
532 nso->so_proto_props.sopp_maxblk = ssa->ssa_wrsize; in sosctp_assoc_move()
533 nso->so_rcv_queued = ssa->ssa_rcv_queued; in sosctp_assoc_move()
534 nso->so_flowctrld = ssa->ssa_flowctrld; in sosctp_assoc_move()
535 nso->so_proto_handle = (sock_lower_handle_t)ssa->ssa_conn; in sosctp_assoc_move()
565 if (tmp == ssa) { in sosctp_assoc_move()
586 sosctp_assoc_isconnecting(struct sctp_soassoc *ssa) in sosctp_assoc_isconnecting() argument
588 struct sonode *so = &ssa->ssa_sonode->ss_so; in sosctp_assoc_isconnecting()
592 ssa->ssa_state &= ~(SS_ISCONNECTED|SS_ISDISCONNECTING); in sosctp_assoc_isconnecting()
593 ssa->ssa_state |= SS_ISCONNECTING; in sosctp_assoc_isconnecting()
598 sosctp_assoc_isconnected(struct sctp_soassoc *ssa) in sosctp_assoc_isconnected() argument
600 struct sonode *so = &ssa->ssa_sonode->ss_so; in sosctp_assoc_isconnected()
604 ssa->ssa_state &= ~(SS_ISCONNECTING|SS_ISDISCONNECTING); in sosctp_assoc_isconnected()
605 ssa->ssa_state |= SS_ISCONNECTED; in sosctp_assoc_isconnected()
610 sosctp_assoc_isdisconnecting(struct sctp_soassoc *ssa) in sosctp_assoc_isdisconnecting() argument
612 struct sonode *so = &ssa->ssa_sonode->ss_so; in sosctp_assoc_isdisconnecting()
616 ssa->ssa_state &= ~SS_ISCONNECTING; in sosctp_assoc_isdisconnecting()
617 ssa->ssa_state |= SS_CANTSENDMORE; in sosctp_assoc_isdisconnecting()
622 sosctp_assoc_isdisconnected(struct sctp_soassoc *ssa, int error) in sosctp_assoc_isdisconnected() argument
624 struct sonode *so = &ssa->ssa_sonode->ss_so; in sosctp_assoc_isdisconnected()
628 ssa->ssa_state &= ~(SS_ISCONNECTING|SS_ISCONNECTED|SS_ISDISCONNECTING); in sosctp_assoc_isdisconnected()
629 ssa->ssa_state |= (SS_CANTRCVMORE|SS_CANTSENDMORE); in sosctp_assoc_isdisconnected()
631 ssa->ssa_error = (ushort_t)error; in sosctp_assoc_isdisconnected()