Lines Matching refs:asoc
724 loopback_scope = stcb->asoc.scope.loopback_scope; in sctp_does_stcb_own_this_addr()
726 ipv4_local_scope = stcb->asoc.scope.ipv4_local_scope; in sctp_does_stcb_own_this_addr()
727 ipv4_addr_legal = stcb->asoc.scope.ipv4_addr_legal; in sctp_does_stcb_own_this_addr()
730 local_scope = stcb->asoc.scope.local_scope; in sctp_does_stcb_own_this_addr()
731 site_scope = stcb->asoc.scope.site_scope; in sctp_does_stcb_own_this_addr()
732 ipv6_addr_legal = stcb->asoc.scope.ipv6_addr_legal; in sctp_does_stcb_own_this_addr()
736 vrf = sctp_find_vrf(stcb->asoc.vrf_id); in sctp_does_stcb_own_this_addr()
1058 if (stcb->asoc.state & SCTP_STATE_ABOUT_TO_BE_FREED) { in sctp_tcb_special_locate()
1069 TAILQ_FOREACH(net, &stcb->asoc.nets, sctp_next) { in sctp_tcb_special_locate()
1173 atomic_add_int(&locked_tcb->asoc.refcnt, 1); in sctp_findassociation_ep_addr()
1197 atomic_subtract_int(&locked_tcb->asoc.refcnt, 1); in sctp_findassociation_ep_addr()
1218 if (stcb->asoc.state & SCTP_STATE_ABOUT_TO_BE_FREED) { in sctp_findassociation_ep_addr()
1227 TAILQ_FOREACH(net, &stcb->asoc.nets, sctp_next) { in sctp_findassociation_ep_addr()
1260 atomic_subtract_int(&locked_tcb->asoc.refcnt, 1); in sctp_findassociation_ep_addr()
1290 atomic_subtract_int(&locked_tcb->asoc.refcnt, 1); in sctp_findassociation_ep_addr()
1319 if (stcb->asoc.state & SCTP_STATE_ABOUT_TO_BE_FREED) { in sctp_findassociation_ep_addr()
1328 TAILQ_FOREACH(net, &stcb->asoc.nets, sctp_next) { in sctp_findassociation_ep_addr()
1361 atomic_subtract_int(&locked_tcb->asoc.refcnt, 1); in sctp_findassociation_ep_addr()
1391 atomic_subtract_int(&locked_tcb->asoc.refcnt, 1); in sctp_findassociation_ep_addr()
1412 atomic_subtract_int(&locked_tcb->asoc.refcnt, 1); in sctp_findassociation_ep_addr()
1446 if (stcb->asoc.assoc_id == id) { in sctp_findasoc_ep_asocid_locked()
1455 if (stcb->asoc.state & SCTP_STATE_ABOUT_TO_BE_FREED) { in sctp_findasoc_ep_asocid_locked()
2025 if (stcb->asoc.my_vtag == vtag) { in sctp_findassoc_by_vtag()
2035 if (stcb->asoc.state & SCTP_STATE_ABOUT_TO_BE_FREED) { in sctp_findassoc_by_vtag()
2050 if (stcb->asoc.peer_vtag == remote_tag) { in sctp_findassoc_by_vtag()
2504 atomic_add_int(&stcb->asoc.refcnt, 1); in sctp_move_pcb_and_assoc()
2510 atomic_subtract_int(&stcb->asoc.refcnt, 1); in sctp_move_pcb_and_assoc()
2549 if (stcb->asoc.in_asocid_hash) { in sctp_move_pcb_and_assoc()
2566 if (stcb->asoc.in_asocid_hash) { in sctp_move_pcb_and_assoc()
2569 lhd = &new_inp->sctp_asocidhash[SCTP_PCBHASH_ASOC(stcb->asoc.assoc_id, in sctp_move_pcb_and_assoc()
2574 TAILQ_FOREACH(net, &stcb->asoc.nets, sctp_next) { in sctp_move_pcb_and_assoc()
2605 if (oladdr == stcb->asoc.last_used_address) { in sctp_move_pcb_and_assoc()
2606 stcb->asoc.last_used_address = laddr; in sctp_move_pcb_and_assoc()
2611 if (stcb->asoc.dack_timer.ep == old_inp) { in sctp_move_pcb_and_assoc()
2613 stcb->asoc.dack_timer.ep = new_inp; in sctp_move_pcb_and_assoc()
2616 if (stcb->asoc.asconf_timer.ep == old_inp) { in sctp_move_pcb_and_assoc()
2618 stcb->asoc.asconf_timer.ep = new_inp; in sctp_move_pcb_and_assoc()
2621 if (stcb->asoc.strreset_timer.ep == old_inp) { in sctp_move_pcb_and_assoc()
2623 stcb->asoc.strreset_timer.ep = new_inp; in sctp_move_pcb_and_assoc()
2626 if (stcb->asoc.shut_guard_timer.ep == old_inp) { in sctp_move_pcb_and_assoc()
2628 stcb->asoc.shut_guard_timer.ep = new_inp; in sctp_move_pcb_and_assoc()
2631 if (stcb->asoc.autoclose_timer.ep == old_inp) { in sctp_move_pcb_and_assoc()
2633 stcb->asoc.autoclose_timer.ep = new_inp; in sctp_move_pcb_and_assoc()
2636 if (stcb->asoc.delete_prim_timer.ep == old_inp) { in sctp_move_pcb_and_assoc()
2638 stcb->asoc.delete_prim_timer.ep = new_inp; in sctp_move_pcb_and_assoc()
2642 TAILQ_FOREACH(net, &stcb->asoc.nets, sctp_next) { in sctp_move_pcb_and_assoc()
3263 if (stcb->asoc.state & SCTP_STATE_ABOUT_TO_BE_FREED) { in sctp_inpcb_free()
3266 if (stcb->asoc.state & SCTP_STATE_IN_ACCEPT_QUEUE) { in sctp_inpcb_free()
3281 (stcb->asoc.total_output_queue_size == 0)) { in sctp_inpcb_free()
3295 if ((stcb->asoc.size_on_reasm_queue > 0) || in sctp_inpcb_free()
3296 (stcb->asoc.size_on_all_streams > 0) || in sctp_inpcb_free()
3314 } else if (TAILQ_EMPTY(&stcb->asoc.send_queue) && in sctp_inpcb_free()
3315 TAILQ_EMPTY(&stcb->asoc.sent_queue) && in sctp_inpcb_free()
3316 (stcb->asoc.stream_queue_cnt == 0)) { in sctp_inpcb_free()
3317 if ((*stcb->asoc.ss_functions.sctp_ss_is_user_msgs_incomplete) (stcb, &stcb->asoc)) { in sctp_inpcb_free()
3334 if (stcb->asoc.alternate) { in sctp_inpcb_free()
3335 netp = stcb->asoc.alternate; in sctp_inpcb_free()
3337 netp = stcb->asoc.primary_destination; in sctp_inpcb_free()
3348 if ((*stcb->asoc.ss_functions.sctp_ss_is_user_msgs_incomplete) (stcb, &stcb->asoc)) { in sctp_inpcb_free()
3351 if (TAILQ_EMPTY(&stcb->asoc.send_queue) && in sctp_inpcb_free()
3352 TAILQ_EMPTY(&stcb->asoc.sent_queue) && in sctp_inpcb_free()
3353 (stcb->asoc.state & SCTP_STATE_PARTIAL_MSG_LEFT)) { in sctp_inpcb_free()
3412 if (stcb->asoc.state & SCTP_STATE_ABOUT_TO_BE_FREED) { in sctp_inpcb_free()
3413 if (stcb->asoc.state & SCTP_STATE_IN_ACCEPT_QUEUE) { in sctp_inpcb_free()
3423 ((stcb->asoc.state & SCTP_STATE_ABOUT_TO_BE_FREED) == 0)) { in sctp_inpcb_free()
3430 } else if (stcb->asoc.state & SCTP_STATE_ABOUT_TO_BE_FREED) { in sctp_inpcb_free()
3577 TAILQ_FOREACH(net, &stcb->asoc.nets, sctp_next) { in sctp_findnet()
3658 stcb->asoc.scope.ipv4_local_scope = 1; in sctp_add_remote_addr()
3663 (stcb->asoc.scope.ipv4_local_scope == 0)) { in sctp_add_remote_addr()
3683 if (sctp_is_address_on_local_host(newaddr, stcb->asoc.vrf_id)) { in sctp_add_remote_addr()
3684 stcb->asoc.scope.loopback_scope = 1; in sctp_add_remote_addr()
3685 stcb->asoc.scope.local_scope = 0; in sctp_add_remote_addr()
3686 stcb->asoc.scope.ipv4_local_scope = 1; in sctp_add_remote_addr()
3687 stcb->asoc.scope.site_scope = 1; in sctp_add_remote_addr()
3699 stcb->asoc.scope.ipv4_local_scope = 1; in sctp_add_remote_addr()
3700 stcb->asoc.scope.site_scope = 1; in sctp_add_remote_addr()
3707 stcb->asoc.scope.site_scope = 1; in sctp_add_remote_addr()
3712 (stcb->asoc.scope.loopback_scope == 0)) { in sctp_add_remote_addr()
3715 (stcb->asoc.scope.local_scope == 0)) { in sctp_add_remote_addr()
3718 (stcb->asoc.scope.site_scope == 0)) { in sctp_add_remote_addr()
3751 net->addr_is_local = sctp_is_address_on_local_host(newaddr, stcb->asoc.vrf_id); in sctp_add_remote_addr()
3753 stcb->asoc.scope.loopback_scope = 1; in sctp_add_remote_addr()
3754 stcb->asoc.scope.ipv4_local_scope = 1; in sctp_add_remote_addr()
3755 stcb->asoc.scope.local_scope = 0; in sctp_add_remote_addr()
3756 stcb->asoc.scope.site_scope = 1; in sctp_add_remote_addr()
3759 net->failure_threshold = stcb->asoc.def_net_failure; in sctp_add_remote_addr()
3760 net->pf_threshold = stcb->asoc.def_net_pf_threshold; in sctp_add_remote_addr()
3779 stcb->asoc.numnets++; in sctp_add_remote_addr()
3781 net->cwr_window_tsn = net->last_cwr_tsn = stcb->asoc.sending_seq - 1; in sctp_add_remote_addr()
3783 net->dscp = stcb->asoc.default_dscp; in sctp_add_remote_addr()
3785 net->flowlabel = stcb->asoc.default_flowlabel; in sctp_add_remote_addr()
3797 net->heart_beat_delay = stcb->asoc.heart_beat_delay; in sctp_add_remote_addr()
3815 stcb->asoc.vrf_id, in sctp_add_remote_addr()
3826 stcb->asoc.vrf_id); in sctp_add_remote_addr()
3827 if (stcb->asoc.default_mtu > 0) { in sctp_add_remote_addr()
3828 net->mtu = stcb->asoc.default_mtu; in sctp_add_remote_addr()
3869 if (stcb->asoc.default_mtu > 0) { in sctp_add_remote_addr()
3870 net->mtu = stcb->asoc.default_mtu; in sctp_add_remote_addr()
3913 stcb->asoc.smallest_mtu = net->mtu; in sctp_add_remote_addr()
3915 if (stcb->asoc.smallest_mtu > net->mtu) { in sctp_add_remote_addr()
3928 if (stcb->asoc.cc_functions.sctp_set_initial_cc_param != NULL) in sctp_add_remote_addr()
3929 (*stcb->asoc.cc_functions.sctp_set_initial_cc_param) (stcb, net); in sctp_add_remote_addr()
3938 net->flowid = stcb->asoc.my_vtag ^ in sctp_add_remote_addr()
3945 netfirst = TAILQ_FIRST(&stcb->asoc.nets); in sctp_add_remote_addr()
3948 TAILQ_INSERT_TAIL(&stcb->asoc.nets, net, sctp_next); in sctp_add_remote_addr()
3951 TAILQ_INSERT_HEAD(&stcb->asoc.nets, net, sctp_next); in sctp_add_remote_addr()
3957 TAILQ_INSERT_HEAD(&stcb->asoc.nets, net, sctp_next); in sctp_add_remote_addr()
3963 TAILQ_INSERT_HEAD(&stcb->asoc.nets, net, sctp_next); in sctp_add_remote_addr()
3977 TAILQ_INSERT_TAIL(&stcb->asoc.nets, net, sctp_next); in sctp_add_remote_addr()
3984 TAILQ_INSERT_AFTER(&stcb->asoc.nets, netlook, in sctp_add_remote_addr()
3994 if (stcb->asoc.primary_destination == 0) { in sctp_add_remote_addr()
3995 stcb->asoc.primary_destination = net; in sctp_add_remote_addr()
3996 } else if ((stcb->asoc.primary_destination->ro.ro_nh == NULL) && in sctp_add_remote_addr()
4000 stcb->asoc.primary_destination = net; in sctp_add_remote_addr()
4003 net = TAILQ_FIRST(&stcb->asoc.nets); in sctp_add_remote_addr()
4004 if ((net != stcb->asoc.primary_destination) && in sctp_add_remote_addr()
4005 (stcb->asoc.primary_destination)) { in sctp_add_remote_addr()
4011 TAILQ_REMOVE(&stcb->asoc.nets, in sctp_add_remote_addr()
4012 stcb->asoc.primary_destination, sctp_next); in sctp_add_remote_addr()
4013 TAILQ_INSERT_HEAD(&stcb->asoc.nets, in sctp_add_remote_addr()
4014 stcb->asoc.primary_destination, sctp_next); in sctp_add_remote_addr()
4046 stcb->asoc.in_asocid_hash = 1; in sctp_aloc_a_assoc_id()
4065 struct sctp_association *asoc; in sctp_aloc_assoc_locked() local
4207 asoc = &stcb->asoc; in sctp_aloc_assoc_locked()
4224 asoc->assoc_id = sctp_aloc_a_assoc_id(inp, stcb); in sctp_aloc_assoc_locked()
4226 …head = &SCTP_BASE_INFO(sctp_asochash)[SCTP_PCBHASH_ASOC(stcb->asoc.my_vtag, SCTP_BASE_INFO(hashaso… in sctp_aloc_assoc_locked()
4232 if (asoc->strmout) { in sctp_aloc_assoc_locked()
4233 SCTP_FREE(asoc->strmout, SCTP_M_STRMO); in sctp_aloc_assoc_locked()
4234 asoc->strmout = NULL; in sctp_aloc_assoc_locked()
4236 if (asoc->mapping_array) { in sctp_aloc_assoc_locked()
4237 SCTP_FREE(asoc->mapping_array, SCTP_M_MAP); in sctp_aloc_assoc_locked()
4238 asoc->mapping_array = NULL; in sctp_aloc_assoc_locked()
4240 if (asoc->nr_mapping_array) { in sctp_aloc_assoc_locked()
4241 SCTP_FREE(asoc->nr_mapping_array, SCTP_M_MAP); in sctp_aloc_assoc_locked()
4242 asoc->nr_mapping_array = NULL; in sctp_aloc_assoc_locked()
4255 SCTP_OS_TIMER_INIT(&asoc->dack_timer.timer); in sctp_aloc_assoc_locked()
4256 SCTP_OS_TIMER_INIT(&asoc->strreset_timer.timer); in sctp_aloc_assoc_locked()
4257 SCTP_OS_TIMER_INIT(&asoc->asconf_timer.timer); in sctp_aloc_assoc_locked()
4258 SCTP_OS_TIMER_INIT(&asoc->shut_guard_timer.timer); in sctp_aloc_assoc_locked()
4259 SCTP_OS_TIMER_INIT(&asoc->autoclose_timer.timer); in sctp_aloc_assoc_locked()
4260 SCTP_OS_TIMER_INIT(&asoc->delete_prim_timer.timer); in sctp_aloc_assoc_locked()
4327 struct sctp_association *asoc; in sctp_remove_net() local
4330 asoc = &stcb->asoc; in sctp_remove_net()
4331 asoc->numnets--; in sctp_remove_net()
4332 TAILQ_REMOVE(&asoc->nets, net, sctp_next); in sctp_remove_net()
4333 if (net == asoc->primary_destination) { in sctp_remove_net()
4337 lnet = TAILQ_FIRST(&asoc->nets); in sctp_remove_net()
4348 if (asoc->deleted_primary != NULL) { in sctp_remove_net()
4352 asoc->deleted_primary = net; in sctp_remove_net()
4363 asoc->primary_destination = sctp_find_alternate_net(stcb, lnet, 0); in sctp_remove_net()
4365 if (net == asoc->last_data_chunk_from) { in sctp_remove_net()
4367 asoc->last_data_chunk_from = TAILQ_FIRST(&asoc->nets); in sctp_remove_net()
4369 if (net == asoc->last_control_chunk_from) { in sctp_remove_net()
4371 asoc->last_control_chunk_from = NULL; in sctp_remove_net()
4373 if (net == asoc->last_net_cmt_send_started) { in sctp_remove_net()
4375 asoc->last_net_cmt_send_started = NULL; in sctp_remove_net()
4377 if (net == stcb->asoc.alternate) { in sctp_remove_net()
4378 sctp_free_remote_addr(stcb->asoc.alternate); in sctp_remove_net()
4379 stcb->asoc.alternate = NULL; in sctp_remove_net()
4403 struct sctp_association *asoc; in sctp_del_remote_addr() local
4406 asoc = &stcb->asoc; in sctp_del_remote_addr()
4409 TAILQ_FOREACH_SAFE(net, &asoc->nets, sctp_next, nnet) { in sctp_del_remote_addr()
4416 if (asoc->numnets < 2) { in sctp_del_remote_addr()
4569 struct sctp_association *asoc; in sctp_free_assoc() local
4587 if (stcb->asoc.state == 0) { in sctp_free_assoc()
4594 if (stcb->asoc.alternate) { in sctp_free_assoc()
4595 sctp_free_remote_addr(stcb->asoc.alternate); in sctp_free_assoc()
4596 stcb->asoc.alternate = NULL; in sctp_free_assoc()
4605 asoc = &stcb->asoc; in sctp_free_assoc()
4618 if ((stcb->asoc.state & SCTP_STATE_ABOUT_TO_BE_FREED) && in sctp_free_assoc()
4624 if (stcb->asoc.refcnt) { in sctp_free_assoc()
4638 if ((stcb->asoc.state & SCTP_STATE_ABOUT_TO_BE_FREED) == 0) { in sctp_free_assoc()
4644 sq->sinfo_cumtsn = stcb->asoc.cumulative_tsn; in sctp_free_assoc()
4672 if ((stcb->asoc.refcnt) || (stcb->asoc.state & SCTP_STATE_IN_ACCEPT_QUEUE)) { in sctp_free_assoc()
4677 if ((stcb->asoc.refcnt) || in sctp_free_assoc()
4714 atomic_add_int(&stcb->asoc.refcnt, 1); in sctp_free_assoc()
4757 atomic_subtract_int(&stcb->asoc.refcnt, 1); in sctp_free_assoc()
4759 if (stcb->asoc.refcnt) { in sctp_free_assoc()
4769 asoc->state = 0; in sctp_free_assoc()
4773 if (stcb->asoc.in_asocid_hash) { in sctp_free_assoc()
4787 sctp_add_vtag_to_timewait(asoc->my_vtag, inp->sctp_lport, stcb->rport); in sctp_free_assoc()
4799 for (i = 0; i < asoc->streamoutcnt; i++) { in sctp_free_assoc()
4802 outs = &asoc->strmout[i]; in sctp_free_assoc()
4805 atomic_subtract_int(&asoc->stream_queue_cnt, 1); in sctp_free_assoc()
4807 stcb->asoc.ss_functions.sctp_ss_remove_from_stream(stcb, asoc, outs, sp); in sctp_free_assoc()
4808 sctp_free_spbufspace(stcb, asoc, sp); in sctp_free_assoc()
4830 TAILQ_FOREACH_SAFE(strrst, &asoc->resetHead, next_resp, nstrrst) { in sctp_free_assoc()
4831 TAILQ_REMOVE(&asoc->resetHead, strrst, next_resp); in sctp_free_assoc()
4834 TAILQ_FOREACH_SAFE(sq, &asoc->pending_reply_queue, next, nsq) { in sctp_free_assoc()
4835 TAILQ_REMOVE(&asoc->pending_reply_queue, sq, next); in sctp_free_assoc()
4847 TAILQ_FOREACH_SAFE(chk, &asoc->free_chunks, sctp_next, nchk) { in sctp_free_assoc()
4848 TAILQ_REMOVE(&asoc->free_chunks, chk, sctp_next); in sctp_free_assoc()
4858 asoc->free_chunk_cnt--; in sctp_free_assoc()
4862 TAILQ_FOREACH_SAFE(chk, &asoc->send_queue, sctp_next, nchk) { in sctp_free_assoc()
4863 if (asoc->strmout[chk->rec.data.sid].chunks_on_queues > 0) { in sctp_free_assoc()
4864 asoc->strmout[chk->rec.data.sid].chunks_on_queues--; in sctp_free_assoc()
4870 TAILQ_REMOVE(&asoc->send_queue, chk, sctp_next); in sctp_free_assoc()
4893 TAILQ_FOREACH_SAFE(chk, &asoc->sent_queue, sctp_next, nchk) { in sctp_free_assoc()
4895 if (asoc->strmout[chk->rec.data.sid].chunks_on_queues > 0) { in sctp_free_assoc()
4896 asoc->strmout[chk->rec.data.sid].chunks_on_queues--; in sctp_free_assoc()
4903 TAILQ_REMOVE(&asoc->sent_queue, chk, sctp_next); in sctp_free_assoc()
4923 for (i = 0; i < stcb->asoc.streamoutcnt; i++) { in sctp_free_assoc()
4924 if (stcb->asoc.strmout[i].chunks_on_queues > 0) { in sctp_free_assoc()
4925 panic("%u chunks left for stream %u.", stcb->asoc.strmout[i].chunks_on_queues, i); in sctp_free_assoc()
4930 TAILQ_FOREACH_SAFE(chk, &asoc->control_send_queue, sctp_next, nchk) { in sctp_free_assoc()
4931 TAILQ_REMOVE(&asoc->control_send_queue, chk, sctp_next); in sctp_free_assoc()
4944 TAILQ_FOREACH_SAFE(chk, &asoc->asconf_send_queue, sctp_next, nchk) { in sctp_free_assoc()
4945 TAILQ_REMOVE(&asoc->asconf_send_queue, chk, sctp_next); in sctp_free_assoc()
4957 if (asoc->mapping_array) { in sctp_free_assoc()
4958 SCTP_FREE(asoc->mapping_array, SCTP_M_MAP); in sctp_free_assoc()
4959 asoc->mapping_array = NULL; in sctp_free_assoc()
4961 if (asoc->nr_mapping_array) { in sctp_free_assoc()
4962 SCTP_FREE(asoc->nr_mapping_array, SCTP_M_MAP); in sctp_free_assoc()
4963 asoc->nr_mapping_array = NULL; in sctp_free_assoc()
4966 if (asoc->strmout) { in sctp_free_assoc()
4967 SCTP_FREE(asoc->strmout, SCTP_M_STRMO); in sctp_free_assoc()
4968 asoc->strmout = NULL; in sctp_free_assoc()
4970 asoc->strm_realoutsize = asoc->streamoutcnt = 0; in sctp_free_assoc()
4971 if (asoc->strmin) { in sctp_free_assoc()
4972 for (i = 0; i < asoc->streamincnt; i++) { in sctp_free_assoc()
4973 sctp_clean_up_stream(stcb, &asoc->strmin[i].inqueue); in sctp_free_assoc()
4974 sctp_clean_up_stream(stcb, &asoc->strmin[i].uno_inqueue); in sctp_free_assoc()
4976 SCTP_FREE(asoc->strmin, SCTP_M_STRMI); in sctp_free_assoc()
4977 asoc->strmin = NULL; in sctp_free_assoc()
4979 asoc->streamincnt = 0; in sctp_free_assoc()
4980 TAILQ_FOREACH_SAFE(net, &asoc->nets, sctp_next, nnet) { in sctp_free_assoc()
4986 TAILQ_REMOVE(&asoc->nets, net, sctp_next); in sctp_free_assoc()
4989 LIST_FOREACH_SAFE(laddr, &asoc->sctp_restricted_addrs, sctp_nxt_addr, naddr) { in sctp_free_assoc()
4995 TAILQ_FOREACH_SAFE(aparam, &asoc->asconf_queue, next, naparam) { in sctp_free_assoc()
4997 TAILQ_REMOVE(&asoc->asconf_queue, aparam, next); in sctp_free_assoc()
5000 TAILQ_FOREACH_SAFE(aack, &asoc->asconf_ack_sent, next, naack) { in sctp_free_assoc()
5002 TAILQ_REMOVE(&asoc->asconf_ack_sent, aack, next); in sctp_free_assoc()
5009 if (asoc->local_hmacs) in sctp_free_assoc()
5010 sctp_free_hmaclist(asoc->local_hmacs); in sctp_free_assoc()
5011 if (asoc->peer_hmacs) in sctp_free_assoc()
5012 sctp_free_hmaclist(asoc->peer_hmacs); in sctp_free_assoc()
5014 if (asoc->local_auth_chunks) in sctp_free_assoc()
5015 sctp_free_chunklist(asoc->local_auth_chunks); in sctp_free_assoc()
5016 if (asoc->peer_auth_chunks) in sctp_free_assoc()
5017 sctp_free_chunklist(asoc->peer_auth_chunks); in sctp_free_assoc()
5019 sctp_free_authinfo(&asoc->authinfo); in sctp_free_assoc()
5021 LIST_FOREACH_SAFE(shared_key, &asoc->shared_keys, next, nshared_key) { in sctp_free_assoc()
5243 TAILQ_FOREACH(net, &stcb->asoc.nets, sctp_next) { in sctp_select_primary_destination()
5250 stcb->asoc.primary_destination = net; in sctp_select_primary_destination()
5300 if (stcb->asoc.last_used_address == laddr) in sctp_del_local_addr_ep()
5302 stcb->asoc.last_used_address = NULL; in sctp_del_local_addr_ep()
5307 TAILQ_FOREACH(net, &stcb->asoc.nets, sctp_next) { in sctp_del_local_addr_ep()
5342 list = &stcb->asoc.sctp_restricted_addrs; in sctp_add_local_addr_restricted()
5392 LIST_FOREACH(laddr, &stcb->asoc.sctp_restricted_addrs, sctp_nxt_addr) { in sctp_del_local_addr_restricted()
5942 TAILQ_FOREACH(net, &stcb->asoc.nets, sctp_next) { in sctp_load_addresses_from_init()
5948 atomic_add_int(&stcb->asoc.refcnt, 1); in sctp_load_addresses_from_init()
5950 atomic_subtract_int(&stcb->asoc.refcnt, 1); in sctp_load_addresses_from_init()
5958 if (stcb->asoc.scope.ipv4_addr_legal) { in sctp_load_addresses_from_init()
5967 if (stcb->asoc.scope.ipv6_addr_legal) { in sctp_load_addresses_from_init()
5987 if (stcb->asoc.state == 0) { in sctp_load_addresses_from_init()
6008 if (stcb->asoc.scope.ipv4_addr_legal) { in sctp_load_addresses_from_init()
6030 atomic_add_int(&stcb->asoc.refcnt, 1); in sctp_load_addresses_from_init()
6033 atomic_subtract_int(&stcb->asoc.refcnt, 1); in sctp_load_addresses_from_init()
6048 if (stcb->asoc.state == 0) { in sctp_load_addresses_from_init()
6056 if (stcb->asoc.state == 0) { in sctp_load_addresses_from_init()
6091 if (stcb->asoc.state == 0) { in sctp_load_addresses_from_init()
6102 if (stcb->asoc.scope.ipv6_addr_legal) { in sctp_load_addresses_from_init()
6129 atomic_add_int(&stcb->asoc.refcnt, 1); in sctp_load_addresses_from_init()
6132 atomic_subtract_int(&stcb->asoc.refcnt, 1); in sctp_load_addresses_from_init()
6140 if (stcb->asoc.state == 0) { in sctp_load_addresses_from_init()
6156 if (stcb->asoc.state == 0) { in sctp_load_addresses_from_init()
6190 if (stcb->asoc.state == 0) { in sctp_load_addresses_from_init()
6202 if (stcb->asoc.state != SCTP_STATE_OPEN) { in sctp_load_addresses_from_init()
6210 stcb->asoc.peers_adaptation = ntohl(aip->indication); in sctp_load_addresses_from_init()
6211 stcb->asoc.adaptation_needed = 1; in sctp_load_addresses_from_init()
6222 if (stcb->asoc.asconf_supported == 0) { in sctp_load_addresses_from_init()
6276 stcb->asoc.peer_supports_nat = 1; in sctp_load_addresses_from_init()
6295 (ntohl(zero_chksum_p->edmid) == stcb->asoc.rcv_edmid)) { in sctp_load_addresses_from_init()
6296 stcb->asoc.snd_edmid = stcb->asoc.rcv_edmid; in sctp_load_addresses_from_init()
6388 if (stcb->asoc.peer_hmacs != NULL) in sctp_load_addresses_from_init()
6389 sctp_free_hmaclist(stcb->asoc.peer_hmacs); in sctp_load_addresses_from_init()
6390 stcb->asoc.peer_hmacs = sctp_alloc_hmaclist(num_hmacs); in sctp_load_addresses_from_init()
6391 if (stcb->asoc.peer_hmacs != NULL) { in sctp_load_addresses_from_init()
6393 (void)sctp_auth_add_hmacid(stcb->asoc.peer_hmacs, in sctp_load_addresses_from_init()
6414 if (stcb->asoc.peer_auth_chunks != NULL) in sctp_load_addresses_from_init()
6415 sctp_clear_chunklist(stcb->asoc.peer_auth_chunks); in sctp_load_addresses_from_init()
6417 stcb->asoc.peer_auth_chunks = sctp_alloc_chunklist(); in sctp_load_addresses_from_init()
6420 stcb->asoc.peer_auth_chunks); in sctp_load_addresses_from_init()
6460 TAILQ_FOREACH_SAFE(net, &stcb->asoc.nets, sctp_next, nnet) { in sctp_load_addresses_from_init()
6465 stcb->asoc.numnets--; in sctp_load_addresses_from_init()
6466 TAILQ_REMOVE(&stcb->asoc.nets, net, sctp_next); in sctp_load_addresses_from_init()
6467 if (net == stcb->asoc.alternate) { in sctp_load_addresses_from_init()
6468 sctp_free_remote_addr(stcb->asoc.alternate); in sctp_load_addresses_from_init()
6469 stcb->asoc.alternate = NULL; in sctp_load_addresses_from_init()
6471 if (net == stcb->asoc.primary_destination) { in sctp_load_addresses_from_init()
6472 stcb->asoc.primary_destination = NULL; in sctp_load_addresses_from_init()
6478 if ((stcb->asoc.ecn_supported == 1) && in sctp_load_addresses_from_init()
6480 stcb->asoc.ecn_supported = 0; in sctp_load_addresses_from_init()
6482 if ((stcb->asoc.prsctp_supported == 1) && in sctp_load_addresses_from_init()
6484 stcb->asoc.prsctp_supported = 0; in sctp_load_addresses_from_init()
6486 if ((stcb->asoc.auth_supported == 1) && in sctp_load_addresses_from_init()
6489 stcb->asoc.auth_supported = 0; in sctp_load_addresses_from_init()
6491 if ((stcb->asoc.asconf_supported == 1) && in sctp_load_addresses_from_init()
6493 (stcb->asoc.auth_supported == 0) || in sctp_load_addresses_from_init()
6495 stcb->asoc.asconf_supported = 0; in sctp_load_addresses_from_init()
6497 if ((stcb->asoc.reconfig_supported == 1) && in sctp_load_addresses_from_init()
6499 stcb->asoc.reconfig_supported = 0; in sctp_load_addresses_from_init()
6501 if ((stcb->asoc.idata_supported == 1) && in sctp_load_addresses_from_init()
6503 stcb->asoc.idata_supported = 0; in sctp_load_addresses_from_init()
6505 if ((stcb->asoc.nrsack_supported == 1) && in sctp_load_addresses_from_init()
6507 stcb->asoc.nrsack_supported = 0; in sctp_load_addresses_from_init()
6509 if ((stcb->asoc.pktdrop_supported == 1) && in sctp_load_addresses_from_init()
6511 stcb->asoc.pktdrop_supported = 0; in sctp_load_addresses_from_init()
6555 if (stcb->asoc.authinfo.peer_random != NULL) in sctp_load_addresses_from_init()
6556 sctp_free_key(stcb->asoc.authinfo.peer_random); in sctp_load_addresses_from_init()
6557 stcb->asoc.authinfo.peer_random = new_key; in sctp_load_addresses_from_init()
6558 sctp_clear_cachedkeys(stcb, stcb->asoc.authinfo.assoc_keyid); in sctp_load_addresses_from_init()
6559 sctp_clear_cachedkeys(stcb, stcb->asoc.authinfo.recv_keyid); in sctp_load_addresses_from_init()
6582 stcb->asoc.primary_destination = net; in sctp_set_primary_addr()
6584 (stcb->asoc.alternate != NULL)) { in sctp_set_primary_addr()
6585 sctp_free_remote_addr(stcb->asoc.alternate); in sctp_set_primary_addr()
6586 stcb->asoc.alternate = NULL; in sctp_set_primary_addr()
6588 net = TAILQ_FIRST(&stcb->asoc.nets); in sctp_set_primary_addr()
6589 if (net != stcb->asoc.primary_destination) { in sctp_set_primary_addr()
6595 TAILQ_REMOVE(&stcb->asoc.nets, stcb->asoc.primary_destination, sctp_next); in sctp_set_primary_addr()
6596 TAILQ_INSERT_HEAD(&stcb->asoc.nets, stcb->asoc.primary_destination, sctp_next); in sctp_set_primary_addr()
6621 if (stcb->asoc.my_vtag == tag) { in sctp_is_vtag_good()
6643 struct sctp_association *asoc; in sctp_drain_mbufs() local
6653 asoc = &stcb->asoc; in sctp_drain_mbufs()
6654 if (asoc->cumulative_tsn == asoc->highest_tsn_inside_map) { in sctp_drain_mbufs()
6659 cumulative_tsn_p1 = asoc->cumulative_tsn + 1; in sctp_drain_mbufs()
6662 for (strmat = 0; strmat < asoc->streamincnt; strmat++) { in sctp_drain_mbufs()
6663 TAILQ_FOREACH_SAFE(control, &asoc->strmin[strmat].inqueue, next_instrm, ncontrol) { in sctp_drain_mbufs()
6673 SCTP_CALC_TSN_TO_GAP(gap, control->sinfo_tsn, asoc->mapping_array_base_tsn); in sctp_drain_mbufs()
6675 if (asoc->size_on_all_streams >= control->length) { in sctp_drain_mbufs()
6676 asoc->size_on_all_streams -= control->length; in sctp_drain_mbufs()
6679 …panic("size_on_all_streams = %u smaller than control length %u", asoc->size_on_all_streams, contro… in sctp_drain_mbufs()
6681 asoc->size_on_all_streams = 0; in sctp_drain_mbufs()
6684 sctp_ucount_decr(asoc->cnt_on_all_streams); in sctp_drain_mbufs()
6685 SCTP_UNSET_TSN_PRESENT(asoc->mapping_array, gap); in sctp_drain_mbufs()
6690 TAILQ_REMOVE(&asoc->strmin[strmat].inqueue, control, next_instrm); in sctp_drain_mbufs()
6700 SCTP_CALC_TSN_TO_GAP(gap, chk->rec.data.tsn, asoc->mapping_array_base_tsn); in sctp_drain_mbufs()
6702 if (asoc->size_on_reasm_queue >= chk->send_size) { in sctp_drain_mbufs()
6703 asoc->size_on_reasm_queue -= chk->send_size; in sctp_drain_mbufs()
6706 …panic("size_on_reasm_queue = %u smaller than chunk length %u", asoc->size_on_reasm_queue, chk->sen… in sctp_drain_mbufs()
6708 asoc->size_on_reasm_queue = 0; in sctp_drain_mbufs()
6711 sctp_ucount_decr(asoc->cnt_on_reasm_queue); in sctp_drain_mbufs()
6712 SCTP_UNSET_TSN_PRESENT(asoc->mapping_array, gap); in sctp_drain_mbufs()
6723 TAILQ_FOREACH_SAFE(control, &asoc->strmin[strmat].uno_inqueue, next_instrm, ncontrol) { in sctp_drain_mbufs()
6733 SCTP_CALC_TSN_TO_GAP(gap, control->sinfo_tsn, asoc->mapping_array_base_tsn); in sctp_drain_mbufs()
6735 if (asoc->size_on_all_streams >= control->length) { in sctp_drain_mbufs()
6736 asoc->size_on_all_streams -= control->length; in sctp_drain_mbufs()
6739 …panic("size_on_all_streams = %u smaller than control length %u", asoc->size_on_all_streams, contro… in sctp_drain_mbufs()
6741 asoc->size_on_all_streams = 0; in sctp_drain_mbufs()
6744 sctp_ucount_decr(asoc->cnt_on_all_streams); in sctp_drain_mbufs()
6745 SCTP_UNSET_TSN_PRESENT(asoc->mapping_array, gap); in sctp_drain_mbufs()
6750 TAILQ_REMOVE(&asoc->strmin[strmat].uno_inqueue, control, next_instrm); in sctp_drain_mbufs()
6760 SCTP_CALC_TSN_TO_GAP(gap, chk->rec.data.tsn, asoc->mapping_array_base_tsn); in sctp_drain_mbufs()
6762 if (asoc->size_on_reasm_queue >= chk->send_size) { in sctp_drain_mbufs()
6763 asoc->size_on_reasm_queue -= chk->send_size; in sctp_drain_mbufs()
6766 …panic("size_on_reasm_queue = %u smaller than chunk length %u", asoc->size_on_reasm_queue, chk->sen… in sctp_drain_mbufs()
6768 asoc->size_on_reasm_queue = 0; in sctp_drain_mbufs()
6771 sctp_ucount_decr(asoc->cnt_on_reasm_queue); in sctp_drain_mbufs()
6772 SCTP_UNSET_TSN_PRESENT(asoc->mapping_array, gap); in sctp_drain_mbufs()
6786 for (i = asoc->highest_tsn_inside_map; SCTP_TSN_GE(i, asoc->mapping_array_base_tsn); i--) { in sctp_drain_mbufs()
6787 SCTP_CALC_TSN_TO_GAP(gap, i, asoc->mapping_array_base_tsn); in sctp_drain_mbufs()
6788 if (SCTP_IS_TSN_PRESENT(asoc->mapping_array, gap)) { in sctp_drain_mbufs()
6789 asoc->highest_tsn_inside_map = i; in sctp_drain_mbufs()
6795 asoc->highest_tsn_inside_map = asoc->mapping_array_base_tsn - 1; in sctp_drain_mbufs()
6821 asoc->last_revoke_count = cnt; in sctp_drain_mbufs()