Lines Matching refs:sctp

171 sctp_asconf_unrec_parm(sctp_t *sctp, sctp_parm_hdr_t *ph, uint32_t cid,  in sctp_asconf_unrec_parm()  argument
225 sctp_asconf_ack_unrec_parm(sctp_t *sctp, sctp_parm_hdr_t *ph, in sctp_asconf_ack_unrec_parm() argument
229 sctp_error_event(sctp, (sctp_chunk_hdr_t *)ph, B_TRUE); in sctp_asconf_ack_unrec_parm()
270 sctp_asconf_send(sctp_t *sctp, sctp_asconf_t *asc, sctp_faddr_t *fp, in sctp_asconf_send() argument
280 isv4 = (fp != NULL) ? fp->sf_isv4 : sctp->sctp_current->sf_isv4; in sctp_asconf_send()
320 if (sctp->sctp_cxmit_list == NULL) { in sctp_asconf_send()
321 sctp->sctp_cxmit_list = nmp; in sctp_asconf_send()
323 linkb(sctp->sctp_cxmit_list, nmp); in sctp_asconf_send()
326 BUMP_LOCAL(sctp->sctp_obchunks); in sctp_asconf_send()
329 sctp_wput_asconf(sctp, fp); in sctp_asconf_send()
343 sctp_asconf_free_cxmit(sctp_t *sctp, sctp_chunk_hdr_t *ch) in sctp_asconf_free_cxmit() argument
349 if (sctp->sctp_cxmit_list == NULL) { in sctp_asconf_free_cxmit()
354 mp = sctp->sctp_cxmit_list; in sctp_asconf_free_cxmit()
368 sctp->sctp_cxmit_list = NULL; in sctp_asconf_free_cxmit()
372 sctp_input_asconf(sctp_t *sctp, sctp_chunk_hdr_t *ch, sctp_faddr_t *fp) in sctp_input_asconf() argument
393 sctp_stack_t *sctps = sctp->sctp_sctps; in sctp_input_asconf()
407 if (*idp == (sctp->sctp_fcsn + 1)) { in sctp_input_asconf()
409 } else if (*idp == sctp->sctp_fcsn) { in sctp_input_asconf()
417 hmp = sctp_make_mp(sctp, fp, sizeof (*ach) + sizeof (*idp)); in sctp_input_asconf()
523 mp = dp->asconf(sctp, ph, *idp, fp, &cont, act, &addr); in sctp_input_asconf()
573 (*cl_sctp_assoc_change)(sctp->sctp_connp->conn_family, in sctp_input_asconf()
576 (cl_sctp_handle_t)sctp); in sctp_input_asconf()
581 sctp->sctp_fcsn++; in sctp_input_asconf()
583 BUMP_LOCAL(sctp->sctp_obchunks); in sctp_input_asconf()
586 ach->sch_len = htons(msgdsize(hmp) - sctp->sctp_hdr_len); in sctp_input_asconf()
588 ach->sch_len = htons(msgdsize(hmp) - sctp->sctp_hdr6_len); in sctp_input_asconf()
590 sctp_set_iplen(sctp, hmp, fp->sf_ixa); in sctp_input_asconf()
592 BUMP_LOCAL(sctp->sctp_opkts); in sctp_input_asconf()
593 sctp_validate_peer(sctp); in sctp_input_asconf()
614 sctp_input_asconf_ack(sctp_t *sctp, sctp_chunk_hdr_t *ch, sctp_faddr_t *fp) in sctp_input_asconf_ack() argument
653 if (sctp->sctp_cxmit_list == NULL || *snp != (sctp->sctp_lcsn - 1)) { in sctp_input_asconf_ack()
657 sctp->sctp_cchunk_pend = 0; in sctp_input_asconf_ack()
660 mp = sctp->sctp_cxmit_list; in sctp_input_asconf_ack()
680 och = (sctp_chunk_hdr_t *)sctp->sctp_cxmit_list->b_rptr; in sctp_input_asconf_ack()
705 dp->asconf_ack(sctp, ph, oph, fp, &addr); in sctp_input_asconf_ack()
762 dp->asconf_ack(sctp, NULL, oph, fp, &addr); in sctp_input_asconf_ack()
801 sctp->sctp_cxmit_list = mp->b_cont; in sctp_input_asconf_ack()
819 (*cl_sctp_assoc_change)(sctp->sctp_connp->conn_family, alist, in sctp_input_asconf_ack()
821 dcount, SCTP_CL_LADDR, (cl_sctp_handle_t)sctp); in sctp_input_asconf_ack()
830 if (sctp->sctp_cxmit_list != NULL) in sctp_input_asconf_ack()
831 sctp_wput_asconf(sctp, NULL); in sctp_input_asconf_ack()
845 sctp_redo_faddr_srcs(sctp); in sctp_input_asconf_ack()
849 sctp_rc_timer(sctp_t *sctp, sctp_faddr_t *fp) in sctp_rc_timer() argument
854 sctp_stack_t *sctps = sctp->sctp_sctps; in sctp_rc_timer()
860 if (sctp->sctp_state != SCTPS_ESTABLISHED || in sctp_rc_timer()
861 sctp->sctp_cxmit_list == NULL) { in sctp_rc_timer()
868 if (!SCTP_CHUNK_ISSENT(sctp->sctp_cxmit_list)) { in sctp_rc_timer()
869 sctp_wput_asconf(sctp, fp); in sctp_rc_timer()
875 SCTP_CLR_SENT_FLAG(sctp->sctp_cxmit_list); in sctp_rc_timer()
877 if (sctp->sctp_strikes >= sctp->sctp_pa_max_rxt) { in sctp_rc_timer()
880 sctp_assoc_event(sctp, SCTP_COMM_LOST, 0, NULL); in sctp_rc_timer()
881 sctp_clean_death(sctp, ETIMEDOUT); in sctp_rc_timer()
885 if (sctp_faddr_dead(sctp, fp, SCTP_FADDRS_DOWN) == -1) in sctp_rc_timer()
890 sctp->sctp_strikes++; in sctp_rc_timer()
891 SCTP_CALC_RXT(sctp, fp, sctp->sctp_rto_max); in sctp_rc_timer()
893 nfp = sctp_rotate_faddr(sctp, fp); in sctp_rc_timer()
894 sctp->sctp_cchunk_pend = 0; in sctp_rc_timer()
895 ofp = SCTP_CHUNK_DEST(sctp->sctp_cxmit_list); in sctp_rc_timer()
896 SCTP_SET_CHUNK_DEST(sctp->sctp_cxmit_list, NULL); in sctp_rc_timer()
898 ASSERT(ofp->sf_suna >= MBLKL(sctp->sctp_cxmit_list)); in sctp_rc_timer()
908 ofp->sf_suna -= MBLKL(sctp->sctp_cxmit_list); in sctp_rc_timer()
913 if (!SCTP_CHUNK_WANT_REXMIT(sctp->sctp_cxmit_list)) in sctp_rc_timer()
914 SCTP_CHUNK_REXMIT(sctp, sctp->sctp_cxmit_list); in sctp_rc_timer()
915 sctp_wput_asconf(sctp, nfp); in sctp_rc_timer()
920 sctp_wput_asconf(sctp_t *sctp, sctp_faddr_t *fp) in sctp_wput_asconf() argument
929 sctp_stack_t *sctps = sctp->sctp_sctps; in sctp_wput_asconf()
932 if (sctp->sctp_cchunk_pend || sctp->sctp_cxmit_list == NULL || in sctp_wput_asconf()
934 sctp->sctp_state < SCTPS_ESTABLISHED) { in sctp_wput_asconf()
937 sctp->sctp_cchunk_pend, sctp->sctp_cxmit_list == NULL ? in sctp_wput_asconf()
938 "yes" : "no", sctp->sctp_state)); in sctp_wput_asconf()
943 fp = sctp->sctp_current; in sctp_wput_asconf()
946 ipmp = sctp_make_mp(sctp, fp, 0); in sctp_wput_asconf()
948 SCTP_FADDR_RC_TIMER_RESTART(sctp, fp, fp->sf_rto); in sctp_wput_asconf()
952 mp = sctp->sctp_cxmit_list; in sctp_wput_asconf()
954 isv4 = (fp != NULL) ? fp->sf_isv4 : sctp->sctp_current->sf_isv4; in sctp_wput_asconf()
967 ipaddr = sctp_get_valid_addr(sctp, B_FALSE, &saddr_set); in sctp_wput_asconf()
973 SCTP_FADDR_RC_TIMER_RESTART(sctp, fp, in sctp_wput_asconf()
990 ipaddr = sctp_get_valid_addr(sctp, B_TRUE, &saddr_set); in sctp_wput_asconf()
996 SCTP_FADDR_RC_TIMER_RESTART(sctp, fp, in sctp_wput_asconf()
1007 ((mp = dupb(sctp->sctp_cxmit_list)) == NULL)) { in sctp_wput_asconf()
1008 SCTP_FADDR_RC_TIMER_RESTART(sctp, fp, fp->sf_rto); in sctp_wput_asconf()
1016 *snp = htonl(sctp->sctp_lcsn++); in sctp_wput_asconf()
1022 sctp->sctp_cchunk_pend = 1; in sctp_wput_asconf()
1024 SCTP_SET_SENT_FLAG(sctp->sctp_cxmit_list); in sctp_wput_asconf()
1025 SCTP_SET_CHUNK_DEST(sctp->sctp_cxmit_list, fp); in sctp_wput_asconf()
1026 sctp_set_iplen(sctp, ipmp, fp->sf_ixa); in sctp_wput_asconf()
1028 BUMP_LOCAL(sctp->sctp_opkts); in sctp_wput_asconf()
1029 SCTP_FADDR_RC_TIMER_RESTART(sctp, fp, fp->sf_rto); in sctp_wput_asconf()
1156 sctp_addip_req(sctp_t *sctp, sctp_parm_hdr_t *ph, uint32_t cid, in sctp_addip_req() argument
1165 sctp_stack_t *sctps = sctp->sctp_sctps; in sctp_addip_req()
1189 if (sctp_lookup_faddr(sctp, &addr) != NULL) { in sctp_addip_req()
1201 mutex_enter(&sctp->sctp_conn_tfp->tf_lock); in sctp_addip_req()
1202 err = sctp_add_faddr(sctp, &addr, KM_NOSLEEP, B_FALSE); in sctp_addip_req()
1203 mutex_exit(&sctp->sctp_conn_tfp->tf_lock); in sctp_addip_req()
1213 sctp_intf_event(sctp, addr, SCTP_ADDR_ADDED, 0); in sctp_addip_req()
1215 nfp = sctp_lookup_faddr(sctp, &addr); in sctp_addip_req()
1226 if (sctp->sctp_faddrs == nfp && nfp->sf_next == NULL) { in sctp_addip_req()
1244 sctp_unlink_faddr(sctp, nfp); in sctp_addip_req()
1246 if (sctp->sctp_primary == nfp) { in sctp_addip_req()
1247 sctp->sctp_primary = fp; in sctp_addip_req()
1249 if (sctp->sctp_current == nfp) { in sctp_addip_req()
1250 sctp_set_faddr_current(sctp, fp); in sctp_addip_req()
1252 if (sctp->sctp_lastdata == nfp) { in sctp_addip_req()
1253 sctp->sctp_lastdata = fp; in sctp_addip_req()
1255 if (sctp->sctp_shutdown_faddr == nfp) { in sctp_addip_req()
1256 sctp->sctp_shutdown_faddr = nfp; in sctp_addip_req()
1258 if (sctp->sctp_lastfaddr == nfp) { in sctp_addip_req()
1259 for (fp = sctp->sctp_faddrs; fp->sf_next; in sctp_addip_req()
1262 sctp->sctp_lastfaddr = fp; in sctp_addip_req()
1264 sctp_intf_event(sctp, addr, SCTP_ADDR_REMOVED, 0); in sctp_addip_req()
1284 sctp_addip_ack(sctp_t *sctp, sctp_parm_hdr_t *ph, sctp_parm_hdr_t *oph, in sctp_addip_ack() argument
1300 sctp->sctp_understands_addip = B_FALSE; in sctp_addip_ack()
1310 sctp_error_event(sctp, (sctp_chunk_hdr_t *)ph, B_TRUE); in sctp_addip_ack()
1327 sp = sctp_saddr_lookup(sctp, &addr, 0); in sctp_addip_ack()
1332 sctp_del_saddr(sctp, sp); in sctp_addip_ack()
1341 sctp_del_saddr(sctp, sp); in sctp_addip_ack()
1351 sctp_setprim_req(sctp_t *sctp, sctp_parm_hdr_t *ph, uint32_t cid, in sctp_setprim_req() argument
1362 if (!sctp->sctp_understands_asconf || !sctp->sctp_understands_addip) { in sctp_setprim_req()
1387 nfp = sctp_lookup_faddr(sctp, &addr); in sctp_setprim_req()
1402 sctp_intf_event(sctp, addr, SCTP_ADDR_MADE_PRIM, 0); in sctp_setprim_req()
1403 sctp->sctp_primary = nfp; in sctp_setprim_req()
1404 if (nfp->sf_state != SCTP_FADDRS_ALIVE || nfp == sctp->sctp_current) { in sctp_setprim_req()
1407 sctp_set_faddr_current(sctp, nfp); in sctp_setprim_req()
1413 sctp_setprim_ack(sctp_t *sctp, sctp_parm_hdr_t *ph, sctp_parm_hdr_t *oph, in sctp_setprim_ack() argument
1419 sctp->sctp_understands_addip = B_FALSE; in sctp_setprim_ack()
1421 sctp_error_event(sctp, (sctp_chunk_hdr_t *)ph, B_TRUE); in sctp_setprim_ack()
1428 sctp_add_ip(sctp_t *sctp, const void *addrs, uint32_t cnt) in sctp_add_ip() argument
1441 conn_t *connp = sctp->sctp_connp; in sctp_add_ip()
1444 if (!sctp->sctp_understands_asconf || !sctp->sctp_understands_addip) in sctp_add_ip()
1524 error = sctp_asconf_send(sctp, asc, sctp->sctp_current, ainfo); in sctp_add_ip()
1541 sctp_del_ip(sctp_t *sctp, const void *addrs, uint32_t cnt, uchar_t *ulist, in sctp_del_ip() argument
1562 sctp_stack_t *sctps = sctp->sctp_sctps; in sctp_del_ip()
1563 conn_t *connp = sctp->sctp_connp; in sctp_del_ip()
1566 if (sctp->sctp_state <= SCTPS_LISTEN || !sctps->sctps_addip_enabled || in sctp_del_ip()
1567 !sctp->sctp_understands_asconf || !sctp->sctp_understands_addip) { in sctp_del_ip()
1571 if (sctp->sctp_state > SCTPS_BOUND) in sctp_del_ip()
1626 nsp = sctp_saddr_lookup(sctp, &addr, ifindex); in sctp_del_ip()
1682 sctp_del_saddr_list(sctp, addrs, cnt, B_FALSE); in sctp_del_ip()
1685 error = sctp_asconf_send(sctp, asc, sctp->sctp_current, ainfo); in sctp_del_ip()
1688 sctp_redo_faddr_srcs(sctp); in sctp_del_ip()
1713 nsp = sctp_saddr_lookup(sctp, &addr, ifindex); in sctp_del_ip()
1724 sctp_set_peerprim(sctp_t *sctp, const void *inp) in sctp_set_peerprim() argument
1740 if (!sctp->sctp_understands_asconf || !sctp->sctp_understands_addip) { in sctp_set_peerprim()
1745 if (sctp->sctp_state != SCTPS_ESTABLISHED) in sctp_set_peerprim()
1761 sp = sctp_saddr_lookup(sctp, &addr, ifindex); in sctp_set_peerprim()
1800 error = sctp_asconf_send(sctp, asc, sctp->sctp_current, NULL); in sctp_set_peerprim()