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
647 if (sctp->sctp_cxmit_list == NULL || *snp != (sctp->sctp_lcsn - 1)) { in sctp_input_asconf_ack()
651 sctp->sctp_cchunk_pend = 0; in sctp_input_asconf_ack()
654 mp = sctp->sctp_cxmit_list; in sctp_input_asconf_ack()
674 och = (sctp_chunk_hdr_t *)sctp->sctp_cxmit_list->b_rptr; in sctp_input_asconf_ack()
699 dp->asconf_ack(sctp, ph, oph, fp, &addr); in sctp_input_asconf_ack()
756 dp->asconf_ack(sctp, NULL, oph, fp, &addr); in sctp_input_asconf_ack()
795 sctp->sctp_cxmit_list = mp->b_cont; in sctp_input_asconf_ack()
813 (*cl_sctp_assoc_change)(sctp->sctp_connp->conn_family, alist, in sctp_input_asconf_ack()
815 dcount, SCTP_CL_LADDR, (cl_sctp_handle_t)sctp); in sctp_input_asconf_ack()
824 if (sctp->sctp_cxmit_list != NULL) in sctp_input_asconf_ack()
825 sctp_wput_asconf(sctp, NULL); in sctp_input_asconf_ack()
839 sctp_redo_faddr_srcs(sctp); in sctp_input_asconf_ack()
843 sctp_rc_timer(sctp_t *sctp, sctp_faddr_t *fp) in sctp_rc_timer() argument
848 sctp_stack_t *sctps = sctp->sctp_sctps; in sctp_rc_timer()
854 if (sctp->sctp_state != SCTPS_ESTABLISHED || in sctp_rc_timer()
855 sctp->sctp_cxmit_list == NULL) { in sctp_rc_timer()
862 if (!SCTP_CHUNK_ISSENT(sctp->sctp_cxmit_list)) { in sctp_rc_timer()
863 sctp_wput_asconf(sctp, fp); in sctp_rc_timer()
869 SCTP_CLR_SENT_FLAG(sctp->sctp_cxmit_list); in sctp_rc_timer()
871 if (sctp->sctp_strikes >= sctp->sctp_pa_max_rxt) { in sctp_rc_timer()
874 sctp_assoc_event(sctp, SCTP_COMM_LOST, 0, NULL); in sctp_rc_timer()
875 sctp_clean_death(sctp, ETIMEDOUT); in sctp_rc_timer()
879 if (sctp_faddr_dead(sctp, fp, SCTP_FADDRS_DOWN) == -1) in sctp_rc_timer()
884 sctp->sctp_strikes++; in sctp_rc_timer()
885 SCTP_CALC_RXT(sctp, fp, sctp->sctp_rto_max); in sctp_rc_timer()
887 nfp = sctp_rotate_faddr(sctp, fp); in sctp_rc_timer()
888 sctp->sctp_cchunk_pend = 0; in sctp_rc_timer()
889 ofp = SCTP_CHUNK_DEST(sctp->sctp_cxmit_list); in sctp_rc_timer()
890 SCTP_SET_CHUNK_DEST(sctp->sctp_cxmit_list, NULL); in sctp_rc_timer()
892 ASSERT(ofp->sf_suna >= MBLKL(sctp->sctp_cxmit_list)); in sctp_rc_timer()
902 ofp->sf_suna -= MBLKL(sctp->sctp_cxmit_list); in sctp_rc_timer()
907 if (!SCTP_CHUNK_WANT_REXMIT(sctp->sctp_cxmit_list)) in sctp_rc_timer()
908 SCTP_CHUNK_REXMIT(sctp, sctp->sctp_cxmit_list); in sctp_rc_timer()
909 sctp_wput_asconf(sctp, nfp); in sctp_rc_timer()
914 sctp_wput_asconf(sctp_t *sctp, sctp_faddr_t *fp) in sctp_wput_asconf() argument
923 sctp_stack_t *sctps = sctp->sctp_sctps; in sctp_wput_asconf()
926 if (sctp->sctp_cchunk_pend || sctp->sctp_cxmit_list == NULL || in sctp_wput_asconf()
928 sctp->sctp_state < SCTPS_ESTABLISHED) { in sctp_wput_asconf()
931 sctp->sctp_cchunk_pend, sctp->sctp_cxmit_list == NULL ? in sctp_wput_asconf()
932 "yes" : "no", sctp->sctp_state)); in sctp_wput_asconf()
937 fp = sctp->sctp_current; in sctp_wput_asconf()
940 ipmp = sctp_make_mp(sctp, fp, 0); in sctp_wput_asconf()
942 SCTP_FADDR_RC_TIMER_RESTART(sctp, fp, fp->sf_rto); in sctp_wput_asconf()
946 mp = sctp->sctp_cxmit_list; in sctp_wput_asconf()
948 isv4 = (fp != NULL) ? fp->sf_isv4 : sctp->sctp_current->sf_isv4; in sctp_wput_asconf()
961 ipaddr = sctp_get_valid_addr(sctp, B_FALSE, &saddr_set); in sctp_wput_asconf()
967 SCTP_FADDR_RC_TIMER_RESTART(sctp, fp, in sctp_wput_asconf()
984 ipaddr = sctp_get_valid_addr(sctp, B_TRUE, &saddr_set); in sctp_wput_asconf()
990 SCTP_FADDR_RC_TIMER_RESTART(sctp, fp, in sctp_wput_asconf()
1001 ((mp = dupb(sctp->sctp_cxmit_list)) == NULL)) { in sctp_wput_asconf()
1002 SCTP_FADDR_RC_TIMER_RESTART(sctp, fp, fp->sf_rto); in sctp_wput_asconf()
1010 *snp = htonl(sctp->sctp_lcsn++); in sctp_wput_asconf()
1016 sctp->sctp_cchunk_pend = 1; in sctp_wput_asconf()
1018 SCTP_SET_SENT_FLAG(sctp->sctp_cxmit_list); in sctp_wput_asconf()
1019 SCTP_SET_CHUNK_DEST(sctp->sctp_cxmit_list, fp); in sctp_wput_asconf()
1020 sctp_set_iplen(sctp, ipmp, fp->sf_ixa); in sctp_wput_asconf()
1022 BUMP_LOCAL(sctp->sctp_opkts); in sctp_wput_asconf()
1023 SCTP_FADDR_RC_TIMER_RESTART(sctp, fp, fp->sf_rto); in sctp_wput_asconf()
1150 sctp_addip_req(sctp_t *sctp, sctp_parm_hdr_t *ph, uint32_t cid, in sctp_addip_req() argument
1159 sctp_stack_t *sctps = sctp->sctp_sctps; in sctp_addip_req()
1183 if (sctp_lookup_faddr(sctp, &addr) != NULL) { in sctp_addip_req()
1195 mutex_enter(&sctp->sctp_conn_tfp->tf_lock); in sctp_addip_req()
1196 err = sctp_add_faddr(sctp, &addr, KM_NOSLEEP, B_FALSE); in sctp_addip_req()
1197 mutex_exit(&sctp->sctp_conn_tfp->tf_lock); in sctp_addip_req()
1207 sctp_intf_event(sctp, addr, SCTP_ADDR_ADDED, 0); in sctp_addip_req()
1209 nfp = sctp_lookup_faddr(sctp, &addr); in sctp_addip_req()
1220 if (sctp->sctp_faddrs == nfp && nfp->sf_next == NULL) { in sctp_addip_req()
1238 sctp_unlink_faddr(sctp, nfp); in sctp_addip_req()
1240 if (sctp->sctp_primary == nfp) { in sctp_addip_req()
1241 sctp->sctp_primary = fp; in sctp_addip_req()
1243 if (sctp->sctp_current == nfp) { in sctp_addip_req()
1244 sctp_set_faddr_current(sctp, fp); in sctp_addip_req()
1246 if (sctp->sctp_lastdata == nfp) { in sctp_addip_req()
1247 sctp->sctp_lastdata = fp; in sctp_addip_req()
1249 if (sctp->sctp_shutdown_faddr == nfp) { in sctp_addip_req()
1250 sctp->sctp_shutdown_faddr = nfp; in sctp_addip_req()
1252 if (sctp->sctp_lastfaddr == nfp) { in sctp_addip_req()
1253 for (fp = sctp->sctp_faddrs; fp->sf_next; in sctp_addip_req()
1256 sctp->sctp_lastfaddr = fp; in sctp_addip_req()
1258 sctp_intf_event(sctp, addr, SCTP_ADDR_REMOVED, 0); in sctp_addip_req()
1278 sctp_addip_ack(sctp_t *sctp, sctp_parm_hdr_t *ph, sctp_parm_hdr_t *oph, in sctp_addip_ack() argument
1294 sctp->sctp_understands_addip = B_FALSE; in sctp_addip_ack()
1304 sctp_error_event(sctp, (sctp_chunk_hdr_t *)ph, B_TRUE); in sctp_addip_ack()
1321 sp = sctp_saddr_lookup(sctp, &addr, 0); in sctp_addip_ack()
1326 sctp_del_saddr(sctp, sp); in sctp_addip_ack()
1335 sctp_del_saddr(sctp, sp); in sctp_addip_ack()
1345 sctp_setprim_req(sctp_t *sctp, sctp_parm_hdr_t *ph, uint32_t cid, in sctp_setprim_req() argument
1356 if (!sctp->sctp_understands_asconf || !sctp->sctp_understands_addip) { in sctp_setprim_req()
1381 nfp = sctp_lookup_faddr(sctp, &addr); in sctp_setprim_req()
1396 sctp_intf_event(sctp, addr, SCTP_ADDR_MADE_PRIM, 0); in sctp_setprim_req()
1397 sctp->sctp_primary = nfp; in sctp_setprim_req()
1398 if (nfp->sf_state != SCTP_FADDRS_ALIVE || nfp == sctp->sctp_current) { in sctp_setprim_req()
1401 sctp_set_faddr_current(sctp, nfp); in sctp_setprim_req()
1407 sctp_setprim_ack(sctp_t *sctp, sctp_parm_hdr_t *ph, sctp_parm_hdr_t *oph, in sctp_setprim_ack() argument
1413 sctp->sctp_understands_addip = B_FALSE; in sctp_setprim_ack()
1415 sctp_error_event(sctp, (sctp_chunk_hdr_t *)ph, B_TRUE); in sctp_setprim_ack()
1422 sctp_add_ip(sctp_t *sctp, const void *addrs, uint32_t cnt) in sctp_add_ip() argument
1435 conn_t *connp = sctp->sctp_connp; in sctp_add_ip()
1438 if (!sctp->sctp_understands_asconf || !sctp->sctp_understands_addip) in sctp_add_ip()
1517 error = sctp_asconf_send(sctp, asc, sctp->sctp_current, ainfo); in sctp_add_ip()
1534 sctp_del_ip(sctp_t *sctp, const void *addrs, uint32_t cnt, uchar_t *ulist, in sctp_del_ip() argument
1555 sctp_stack_t *sctps = sctp->sctp_sctps; in sctp_del_ip()
1556 conn_t *connp = sctp->sctp_connp; in sctp_del_ip()
1559 if (sctp->sctp_state <= SCTPS_LISTEN || !sctps->sctps_addip_enabled || in sctp_del_ip()
1560 !sctp->sctp_understands_asconf || !sctp->sctp_understands_addip) { in sctp_del_ip()
1564 if (sctp->sctp_state > SCTPS_BOUND) in sctp_del_ip()
1619 nsp = sctp_saddr_lookup(sctp, &addr, ifindex); in sctp_del_ip()
1675 sctp_del_saddr_list(sctp, addrs, cnt, B_FALSE); in sctp_del_ip()
1678 error = sctp_asconf_send(sctp, asc, sctp->sctp_current, ainfo); in sctp_del_ip()
1681 sctp_redo_faddr_srcs(sctp); in sctp_del_ip()
1706 nsp = sctp_saddr_lookup(sctp, &addr, ifindex); in sctp_del_ip()
1717 sctp_set_peerprim(sctp_t *sctp, const void *inp) in sctp_set_peerprim() argument
1733 if (!sctp->sctp_understands_asconf || !sctp->sctp_understands_addip) { in sctp_set_peerprim()
1738 if (sctp->sctp_state != SCTPS_ESTABLISHED) in sctp_set_peerprim()
1754 sp = sctp_saddr_lookup(sctp, &addr, ifindex); in sctp_set_peerprim()
1793 error = sctp_asconf_send(sctp, asc, sctp->sctp_current, NULL); in sctp_set_peerprim()