Lines Matching defs:stcb

64     struct sctp_tcb *stcb,
69 sctp_set_rwnd(struct sctp_tcb *stcb, struct sctp_association *asoc)
71 asoc->my_rwnd = sctp_calc_rwnd(stcb, asoc);
76 sctp_calc_rwnd(struct sctp_tcb *stcb, struct sctp_association *asoc)
86 if (stcb->sctp_socket == NULL) {
94 if (stcb->asoc.sb_cc == 0 &&
98 calc = max(SCTP_SB_LIMIT_RCV(stcb->sctp_socket), SCTP_MINIMAL_RWND);
102 calc = (uint32_t)sctp_sbspace(&stcb->asoc, &stcb->sctp_socket->so_rcv);
117 calc = sctp_sbspace_sub(calc, stcb->asoc.my_rwnd_control_len);
122 if (calc < stcb->asoc.my_rwnd_control_len) {
132 sctp_build_readq_entry(struct sctp_tcb *stcb,
141 sctp_alloc_a_readq(stcb, read_queue_e);
152 read_queue_e->sinfo_assoc_id = sctp_get_associd(stcb);
159 read_queue_e->stcb = stcb;
160 read_queue_e->port_from = stcb->rport;
161 if (stcb->asoc.state & SCTP_STATE_ABOUT_TO_BE_FREED) {
413 sctp_abort_in_reasm(struct sctp_tcb *stcb,
421 if (stcb->asoc.idata_supported) {
442 sctp_free_a_chunk(stcb, chk, SCTP_SO_NOT_LOCKED);
443 stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_1;
444 sctp_abort_an_association(stcb->sctp_ep, stcb, oper, false, SCTP_SO_NOT_LOCKED);
449 sctp_clean_up_control(struct sctp_tcb *stcb, struct sctp_queued_to_read *control)
461 sctp_free_a_chunk(stcb, chk, SCTP_SO_NOT_LOCKED);
468 sctp_free_a_readq(stcb, control);
478 sctp_queue_data_to_stream(struct sctp_tcb *stcb,
532 stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_2;
533 sctp_abort_an_association(stcb->sctp_ep, stcb, op_err, false, SCTP_SO_NOT_LOCKED);
560 sctp_add_to_readq(stcb->sctp_ep, stcb,
562 &stcb->sctp_socket->so_rcv, 1,
600 sctp_add_to_readq(stcb->sctp_ep, stcb,
602 &stcb->sctp_socket->so_rcv, 1,
620 sctp_clean_up_control(stcb, control);
622 stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_3;
623 sctp_abort_an_association(stcb->sctp_ep, stcb, op_err, false, SCTP_SO_NOT_LOCKED);
633 struct sctp_tcb *stcb;
635 stcb = control->stcb;
662 sctp_sballoc(stcb, &stcb->sctp_socket->so_rcv, m);
675 struct sctp_tcb *stcb;
677 stcb = control->stcb;
678 if (stcb == NULL) {
715 sctp_sballoc(stcb, &stcb->sctp_socket->so_rcv, m);
744 nc->stcb = control->stcb;
750 sctp_handle_old_unordered_data(struct sctp_tcb *stcb,
782 sctp_alloc_a_readq(stcb, nc);
788 sctp_add_chk_to_control(control, strm, stcb, asoc, chk, inp_read_lock_held);
821 sctp_free_a_chunk(stcb, tchk, SCTP_SO_NOT_LOCKED);
852 sctp_add_to_readq(stcb->sctp_ep, stcb, control,
853 &stcb->sctp_socket->so_rcv, control->end_added,
856 sctp_wakeup_the_read_socket(stcb->sctp_ep, stcb, SCTP_SO_NOT_LOCKED);
866 sctp_free_a_readq(stcb, nc);
871 sctp_free_a_readq(stcb, nc);
879 sctp_wakeup_the_read_socket(stcb->sctp_ep, stcb, SCTP_SO_NOT_LOCKED);
884 sctp_add_to_readq(stcb->sctp_ep, stcb, control,
885 &stcb->sctp_socket->so_rcv, control->end_added,
887 sctp_wakeup_the_read_socket(stcb->sctp_ep, stcb, SCTP_SO_NOT_LOCKED);
895 sctp_inject_old_unordered_data(struct sctp_tcb *stcb,
953 sctp_abort_in_reasm(stcb, control, chk,
995 sctp_free_a_chunk(stcb, chk, SCTP_SO_NOT_LOCKED);
1018 sctp_abort_in_reasm(stcb, control, chk,
1034 sctp_deliver_reasm_check(struct sctp_tcb *stcb, struct sctp_association *asoc,
1048 if (stcb->sctp_socket) {
1049 pd_point = min(SCTP_SB_LIMIT_RCV(stcb->sctp_socket) >> SCTP_PARTIAL_DELIVERY_SHIFT,
1050 stcb->sctp_ep->partial_delivery_point);
1052 pd_point = stcb->sctp_ep->partial_delivery_point;
1059 if (sctp_handle_old_unordered_data(stcb, asoc, strm, control, pd_point, inp_read_lock_held)) {
1095 sctp_add_to_readq(stcb->sctp_ep, stcb,
1097 &stcb->sctp_socket->so_rcv, control->end_added,
1105 sctp_add_to_readq(stcb->sctp_ep, stcb,
1107 &stcb->sctp_socket->so_rcv, control->end_added,
1164 sctp_add_to_readq(stcb->sctp_ep, stcb,
1166 &stcb->sctp_socket->so_rcv, control->end_added,
1251 sctp_add_to_readq(stcb->sctp_ep, stcb,
1253 &stcb->sctp_socket->so_rcv, control->end_added,
1270 struct sctp_tcb *stcb, struct sctp_association *asoc,
1283 SCTP_INP_READ_LOCK(stcb->sctp_ep);
1286 if (stcb->sctp_ep->sctp_flags & SCTP_PCB_FLAGS_SOCKET_CANT_READ) {
1339 SCTP_INP_READ_UNLOCK(stcb->sctp_ep);
1341 sctp_free_a_chunk(stcb, chk, SCTP_SO_NOT_LOCKED);
1352 sctp_queue_data_for_reasm(struct sctp_tcb *stcb, struct sctp_association *asoc,
1380 sctp_abort_in_reasm(stcb, control, chk,
1383 sctp_clean_up_control(stcb, control);
1393 sctp_abort_in_reasm(stcb, control, chk,
1401 sctp_inject_old_unordered_data(stcb, asoc, control, chk, abort_flag);
1423 sctp_abort_in_reasm(stcb, control, chk,
1435 sctp_free_a_chunk(stcb, chk, SCTP_SO_NOT_LOCKED);
1460 sctp_abort_in_reasm(stcb, control, chk,
1478 sctp_abort_in_reasm(stcb, control, chk,
1490 sctp_abort_in_reasm(stcb, control,
1511 sctp_abort_in_reasm(stcb, control, chk,
1526 sctp_abort_in_reasm(stcb, control, chk,
1545 sctp_abort_in_reasm(stcb, control,
1578 sctp_abort_in_reasm(stcb, control,
1613 lenadded = sctp_add_chk_to_control(control, strm, stcb, asoc, at, SCTP_READ_LOCK_NOT_HELD);
1633 sctp_add_to_readq(stcb->sctp_ep, stcb,
1635 &stcb->sctp_socket->so_rcv, control->end_added,
1647 sctp_wakeup_the_read_socket(stcb->sctp_ep, stcb, SCTP_SO_NOT_LOCKED);
1677 sctp_process_a_data_chunk(struct sctp_tcb *stcb, struct sctp_association *asoc,
1734 stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_16;
1735 sctp_abort_an_association(stcb->sctp_ep, stcb, op_err, false, SCTP_SO_NOT_LOCKED);
1746 if (stcb == NULL) {
1749 SCTP_LTRACE_CHK(stcb->sctp_ep, stcb, chk_type, tsn);
1768 SCTP_TCB_LOCK_ASSERT(stcb);
1793 if (((stcb->sctp_ep->sctp_flags & SCTP_PCB_FLAGS_SOCKET_GONE) ||
1794 (stcb->sctp_ep->sctp_flags & SCTP_PCB_FLAGS_SOCKET_ALLGONE) ||
1795 (stcb->asoc.state & SCTP_STATE_CLOSED_SOCKET))) {
1801 sctp_abort_an_association(stcb->sctp_ep, stcb, op_err, false, SCTP_SO_NOT_LOCKED);
1831 sctp_queue_op_err(stcb, op_err);
1834 SCTP_TCB_LOCK_ASSERT(stcb);
1871 stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_17;
1872 sctp_abort_an_association(stcb->sctp_ep, stcb, op_err, false, SCTP_SO_NOT_LOCKED);
1932 if (SCTP_SBAVAIL(&stcb->sctp_socket->so_rcv) > 0) {
1934 sctp_sorwakeup(stcb->sctp_ep, stcb->sctp_socket);
1942 sctp_set_rwnd(stcb, asoc);
1963 SCTP_TCB_LOCK_ASSERT(stcb);
1973 asoc->in_tsnlog[asoc->tsn_in_at].stcb = (void *)stcb;
2007 stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_18;
2008 sctp_abort_an_association(stcb->sctp_ep, stcb, op_err, false, SCTP_SO_NOT_LOCKED);
2072 sctp_alloc_a_readq(stcb, control);
2073 sctp_build_readq_entry_mac(control, stcb, asoc->context, net, tsn,
2123 sctp_add_to_readq(stcb->sctp_ep, stcb,
2124 control, &stcb->sctp_socket->so_rcv,
2133 sctp_log_strm_del_alt(stcb, tsn, mid, sid,
2142 sctp_alloc_a_chunk(stcb, chk);
2158 chk->rec.data.context = stcb->asoc.context;
2231 sctp_add_to_readq(stcb->sctp_ep, stcb,
2233 &stcb->sctp_socket->so_rcv, 1,
2239 sctp_queue_data_to_stream(stcb, asoc, control, abort_flag, &need_reasm_check);
2254 sctp_queue_data_for_reasm(stcb, asoc, control, chk, created_control, abort_flag, tsn);
2282 sctp_log_strm_del_alt(stcb, tsn, mid, sid, SCTP_STR_LOG_FROM_MARK_TSN);
2289 (void)sctp_deliver_reasm_check(stcb, asoc, &asoc->strmin[sid], SCTP_READ_LOCK_NOT_HELD);
2301 sctp_reset_in_stream(stcb, liste->number_entries, liste->list_of_streams);
2303 sctp_send_deferred_reset_response(stcb, liste, SCTP_STREAM_RESET_RESULT_PERFORMED);
2312 sctp_queue_data_to_stream(stcb, asoc, control, abort_flag, &need_reasm_check);
2317 (void)sctp_deliver_reasm_check(stcb, asoc, strm, SCTP_READ_LOCK_NOT_HELD);
2333 sctp_queue_data_to_stream(stcb, asoc, control, abort_flag, &need_reasm_check);
2338 (void)sctp_deliver_reasm_check(stcb, asoc, strm, SCTP_READ_LOCK_NOT_HELD);
2383 sctp_slide_mapping_arrays(struct sctp_tcb *stcb)
2403 asoc = &stcb->asoc;
2413 for (slide_from = 0; slide_from < stcb->asoc.mapping_array_size; slide_from++) {
2548 sctp_sack_check(struct sctp_tcb *stcb, int was_a_gap)
2554 sctp_slide_mapping_arrays(stcb);
2555 asoc = &stcb->asoc;
2562 is_a_gap = SCTP_TSN_GT(highest_tsn, stcb->asoc.cumulative_tsn);
2568 if (SCTP_GET_STATE(stcb) == SCTP_STATE_SHUTDOWN_SENT) {
2574 if (SCTP_OS_TIMER_PENDING(&stcb->asoc.dack_timer.timer)) {
2576 stcb->sctp_ep, stcb, NULL,
2579 sctp_send_shutdown(stcb,
2580 ((stcb->asoc.alternate) ? stcb->asoc.alternate : stcb->asoc.primary_destination));
2582 sctp_send_sack(stcb, SCTP_SO_NOT_LOCKED);
2589 stcb->asoc.cmt_dac_pkts_rcvd++;
2591 if ((stcb->asoc.send_sack == 1) || /* We need to send a
2595 (stcb->asoc.numduptsns) || /* we have dup's */
2597 (stcb->asoc.delayed_ack == 0) || /* Delayed sack disabled */
2598 (stcb->asoc.data_pkts_seen >= stcb->asoc.sack_freq)) { /* hit limit of pkts */
2599 if ((stcb->asoc.sctp_cmt_on_off > 0) &&
2601 (stcb->asoc.send_sack == 0) &&
2602 (stcb->asoc.numduptsns == 0) &&
2603 (stcb->asoc.delayed_ack) &&
2604 (!SCTP_OS_TIMER_PENDING(&stcb->asoc.dack_timer.timer))) {
2616 stcb->sctp_ep, stcb, NULL);
2623 sctp_timer_stop(SCTP_TIMER_TYPE_RECV, stcb->sctp_ep, stcb, NULL,
2625 sctp_send_sack(stcb, SCTP_SO_NOT_LOCKED);
2628 if (!SCTP_OS_TIMER_PENDING(&stcb->asoc.dack_timer.timer)) {
2630 stcb->sctp_ep, stcb, NULL);
2638 struct sctp_inpcb *inp, struct sctp_tcb *stcb,
2652 sctp_set_rwnd(stcb, &stcb->asoc);
2655 SCTP_TCB_LOCK_ASSERT(stcb);
2656 asoc = &stcb->asoc;
2662 was_a_gap = SCTP_TSN_GT(highest_tsn, stcb->asoc.cumulative_tsn);
2726 stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_21;
2727 sctp_abort_an_association(inp, stcb, op_err, false, SCTP_SO_NOT_LOCKED);
2737 stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_22;
2738 sctp_abort_an_association(inp, stcb, op_err, false, SCTP_SO_NOT_LOCKED);
2762 stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_23;
2763 sctp_abort_an_association(inp, stcb, op_err, false, SCTP_SO_NOT_LOCKED);
2774 if (sctp_process_a_data_chunk(stcb, asoc, mm, *offset,
2832 sctp_abort_an_association(inp, stcb, op_err, false, SCTP_SO_NOT_LOCKED);
2850 stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_24;
2851 sctp_abort_an_association(inp, stcb, op_err, false, SCTP_SO_NOT_LOCKED);
2868 sctp_queue_op_err(stcb, op_err);
2901 sctp_send_packet_dropped(stcb, net, *mm, length, iphlen, 0);
2911 stcb->asoc.overall_error_count,
2916 stcb->asoc.overall_error_count = 0;
2917 (void)SCTP_GETTIME_TIMEVAL(&stcb->asoc.time_last_rcvd);
2920 if (SCTP_GET_STATE(stcb) == SCTP_STATE_SHUTDOWN_SENT) {
2922 stcb->asoc.send_sack = 1;
2925 sctp_sack_check(stcb, was_a_gap);
2930 sctp_process_segment_range(struct sctp_tcb *stcb, struct sctp_tmit_chunk **p_tp1, uint32_t last_tsn,
2944 tp1 = TAILQ_FIRST(&stcb->asoc.sent_queue);
3035 sctp_log_cwnd(stcb, tp1->whoTo, tp1->rec.data.tsn, SCTP_CWND_LOG_FROM_SACK);
3059 if (stcb->asoc.cc_functions.sctp_cwnd_update_tsn_acknowledged) {
3060 (*stcb->asoc.cc_functions.sctp_cwnd_update_tsn_acknowledged) (tp1->whoTo,
3063 sctp_total_flight_decrease(stcb, tp1);
3077 sctp_calculate_rto(stcb,
3078 &stcb->asoc,
3093 stcb->asoc.this_sack_highest_gap)) {
3094 stcb->asoc.this_sack_highest_gap =
3098 sctp_ucount_decr(stcb->asoc.sent_queue_retran_cnt);
3101 (stcb->asoc.sent_queue_retran_cnt & 0x000000ff));
3121 if (stcb->asoc.strmout[tp1->rec.data.sid].chunks_on_queues > 0) {
3122 stcb->asoc.strmout[tp1->rec.data.sid].chunks_on_queues--;
3128 if ((stcb->asoc.strmout[tp1->rec.data.sid].chunks_on_queues == 0) &&
3129 (stcb->asoc.strmout[tp1->rec.data.sid].state == SCTP_STREAM_RESET_PENDING) &&
3130 TAILQ_EMPTY(&stcb->asoc.strmout[tp1->rec.data.sid].outqueue)) {
3131 stcb->asoc.trigger_reset = 1;
3139 sctp_free_bufspace(stcb, &stcb->asoc, tp1, 1);
3154 tp1 = TAILQ_FIRST(&stcb->asoc.sent_queue);
3159 tp1 = TAILQ_FIRST(&stcb->asoc.sent_queue);
3168 sctp_handle_segments(struct mbuf *m, int *offset, struct sctp_tcb *stcb, struct sctp_association *asoc,
3215 if (sctp_process_segment_range(stcb, &tp1, last_tsn, frag_strt, frag_end,
3232 sctp_check_for_revoked(struct sctp_tcb *stcb,
3265 sctp_total_flight_increase(stcb, tp1);
3290 sctp_strike_gap_ack_chunks(struct sctp_tcb *stcb, struct sctp_association *asoc,
3304 tp1 = TAILQ_FIRST(&stcb->asoc.send_queue);
3319 if (stcb->asoc.prsctp_supported) {
3340 if (stcb->asoc.prsctp_supported) {
3346 (void)sctp_release_pr_sctp_chunk(stcb, tp1, 1,
3581 if (stcb->asoc.cc_functions.sctp_cwnd_update_tsn_acknowledged) {
3582 (*stcb->asoc.cc_functions.sctp_cwnd_update_tsn_acknowledged) (tp1->whoTo,
3595 sctp_total_flight_decrease(stcb, tp1);
3597 if ((stcb->asoc.prsctp_supported) &&
3606 (void)sctp_release_pr_sctp_chunk(stcb, tp1, 1,
3628 sctp_ucount_incr(stcb->asoc.sent_queue_retran_cnt);
3644 alt = sctp_find_alternate_net(stcb, alt, 2);
3652 alt = sctp_find_alternate_net(stcb, alt, 1);
3671 alt = sctp_find_alternate_net(stcb, tp1->whoTo, 0);
3735 sctp_try_advance_peer_ack_point(struct sctp_tcb *stcb,
3786 (void)sctp_release_pr_sctp_chunk(stcb, tp1,
3875 sctp_window_probe_recovery(struct sctp_tcb *stcb,
3890 if (stcb->asoc.cc_functions.sctp_cwnd_update_tsn_acknowledged) {
3891 (*stcb->asoc.cc_functions.sctp_cwnd_update_tsn_acknowledged) (tp1->whoTo,
3895 sctp_total_flight_decrease(stcb, tp1);
3910 sctp_express_handle_sack(struct sctp_tcb *stcb, uint32_t cumack,
3925 rwnd, stcb->asoc.last_acked_seq, stcb->asoc.peers_rwnd);
3927 SCTP_TCB_LOCK_ASSERT(stcb);
3929 stcb->asoc.cumack_log[stcb->asoc.cumack_log_at] = cumack;
3930 stcb->asoc.cumack_log_at++;
3931 if (stcb->asoc.cumack_log_at > SCTP_TSN_LOG_SIZE) {
3932 stcb->asoc.cumack_log_at = 0;
3935 asoc = &stcb->asoc;
3944 if (asoc->peers_rwnd < stcb->sctp_ep->sctp_ep.sctp_sws_sender) {
3970 if (stcb->asoc.cc_functions.sctp_cwnd_prepare_net_for_sack) {
3971 (*stcb->asoc.cc_functions.sctp_cwnd_prepare_net_for_sack) (stcb, net);
3991 stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_25;
3992 sctp_abort_an_association(stcb->sctp_ep, stcb, op_err, false, SCTP_SO_NOT_LOCKED);
3998 stcb->asoc.overall_error_count,
4003 stcb->asoc.overall_error_count = 0;
4026 if (stcb->asoc.cc_functions.sctp_cwnd_update_tsn_acknowledged) {
4027 (*stcb->asoc.cc_functions.sctp_cwnd_update_tsn_acknowledged) (tp1->whoTo,
4031 sctp_total_flight_decrease(stcb, tp1);
4045 sctp_calculate_rto(stcb,
4046 &stcb->asoc,
4075 sctp_log_cwnd(stcb, tp1->whoTo, tp1->rec.data.tsn, SCTP_CWND_LOG_FROM_SACK);
4103 sctp_free_bufspace(stcb, asoc, tp1, 1);
4116 sctp_free_a_chunk(stcb, tp1, SCTP_SO_NOT_LOCKED);
4123 if (stcb->sctp_socket) {
4124 SOCKBUF_LOCK(&stcb->sctp_socket->so_snd);
4127 sctp_wakeup_log(stcb, 1, SCTP_WAKESND_FROM_SACK);
4129 sctp_sowwakeup_locked(stcb->sctp_ep, stcb->sctp_socket);
4132 sctp_wakeup_log(stcb, 1, SCTP_NOWAKE_FROM_SACK);
4148 sctp_ulp_notify(SCTP_NOTIFY_INTERFACE_UP, stcb,
4151 if (net == stcb->asoc.primary_destination) {
4152 if (stcb->asoc.alternate) {
4157 sctp_free_remote_addr(stcb->asoc.alternate);
4158 stcb->asoc.alternate = NULL;
4164 stcb->sctp_ep, stcb, net,
4166 sctp_timer_start(SCTP_TIMER_TYPE_HEARTBEAT, stcb->sctp_ep, stcb, net);
4167 asoc->cc_functions.sctp_cwnd_update_exit_pf(stcb, net);
4173 if (net->RTO < stcb->asoc.minrto) {
4174 net->RTO = stcb->asoc.minrto;
4176 if (net->RTO > stcb->asoc.maxrto) {
4177 net->RTO = stcb->asoc.maxrto;
4181 asoc->cc_functions.sctp_cwnd_update_after_sack(stcb, asoc, 1, 0, 0);
4198 if (asoc->peers_rwnd < stcb->sctp_ep->sctp_ep.sctp_sws_sender) {
4219 sctp_window_probe_recovery(stcb, asoc, tp1);
4226 sctp_timer_start(SCTP_TIMER_TYPE_SEND, stcb->sctp_ep, stcb, net);
4238 sctp_timer_start(SCTP_TIMER_TYPE_SEND, stcb->sctp_ep, stcb, net);
4241 sctp_timer_stop(SCTP_TIMER_TYPE_SEND, stcb->sctp_ep,
4242 stcb, net,
4266 sctp_total_flight_increase(stcb, tp1);
4283 (SCTP_GET_STATE(stcb) == SCTP_STATE_SHUTDOWN_RECEIVED)) &&
4284 ((*asoc->ss_functions.sctp_ss_is_user_msgs_incomplete) (stcb, asoc))) {
4285 SCTP_ADD_SUBSTATE(stcb, SCTP_STATE_PARTIAL_MSG_LEFT);
4288 (SCTP_GET_STATE(stcb) == SCTP_STATE_SHUTDOWN_RECEIVED)) &&
4296 stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_28;
4297 sctp_abort_an_association(stcb->sctp_ep, stcb, op_err, false, SCTP_SO_NOT_LOCKED);
4304 if ((SCTP_GET_STATE(stcb) == SCTP_STATE_OPEN) ||
4305 (SCTP_GET_STATE(stcb) == SCTP_STATE_SHUTDOWN_RECEIVED)) {
4308 SCTP_SET_STATE(stcb, SCTP_STATE_SHUTDOWN_SENT);
4309 sctp_stop_timers_for_shutdown(stcb);
4315 sctp_send_shutdown(stcb, netp);
4317 stcb->sctp_ep, stcb, netp);
4319 stcb->sctp_ep, stcb, NULL);
4320 } else if ((SCTP_GET_STATE(stcb) == SCTP_STATE_SHUTDOWN_RECEIVED) &&
4325 SCTP_SET_STATE(stcb, SCTP_STATE_SHUTDOWN_ACK_SENT);
4326 sctp_stop_timers_for_shutdown(stcb);
4332 sctp_send_shutdown_ack(stcb, netp);
4334 stcb->sctp_ep, stcb, netp);
4351 lchk = sctp_try_advance_peer_ack_point(stcb, asoc);
4358 send_forward_tsn(stcb, asoc);
4362 send_forward_tsn(stcb, asoc);
4374 stcb->sctp_ep, stcb, lchk->whoTo);
4380 stcb->asoc.peers_rwnd,
4381 stcb->asoc.total_flight,
4382 stcb->asoc.total_output_queue_size);
4388 struct sctp_tcb *stcb,
4431 SCTP_TCB_LOCK_ASSERT(stcb);
4438 stcb->asoc.cumack_log[stcb->asoc.cumack_log_at] = cum_ack;
4439 stcb->asoc.cumack_log_at++;
4440 if (stcb->asoc.cumack_log_at > SCTP_TSN_LOG_SIZE) {
4441 stcb->asoc.cumack_log_at = 0;
4448 rwnd, stcb->asoc.last_acked_seq, stcb->asoc.peers_rwnd);
4451 old_rwnd = stcb->asoc.peers_rwnd;
4454 stcb->asoc.overall_error_count,
4459 stcb->asoc.overall_error_count = 0;
4460 asoc = &stcb->asoc;
4512 stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_29;
4513 sctp_abort_an_association(stcb->sctp_ep, stcb, op_err, false, SCTP_SO_NOT_LOCKED);
4537 if (asoc->peers_rwnd < stcb->sctp_ep->sctp_ep.sctp_sws_sender) {
4543 sctp_timer_stop(SCTP_TIMER_TYPE_SEND, stcb->sctp_ep,
4544 stcb, net, SCTP_FROM_SCTP_INDATA + SCTP_LOC_30);
4574 if (stcb->asoc.cc_functions.sctp_cwnd_prepare_net_for_sack) {
4575 (*stcb->asoc.cc_functions.sctp_cwnd_prepare_net_for_sack) (stcb, net);
4620 sctp_total_flight_decrease(stcb, tp1);
4621 if (stcb->asoc.cc_functions.sctp_cwnd_update_tsn_acknowledged) {
4622 (*stcb->asoc.cc_functions.sctp_cwnd_update_tsn_acknowledged) (tp1->whoTo,
4643 sctp_calculate_rto(stcb,
4644 &stcb->asoc,
4680 sctp_log_cwnd(stcb, tp1->whoTo, tp1->rec.data.tsn, SCTP_CWND_LOG_FROM_SACK);
4714 if (sctp_handle_segments(m, &offset_seg, stcb, asoc, last_tsn, &biggest_tsn_acked,
4739 sctp_timer_stop(SCTP_TIMER_TYPE_SEND, stcb->sctp_ep,
4740 stcb, net,
4746 sctp_timer_stop(SCTP_TIMER_TYPE_SEND, stcb->sctp_ep,
4747 stcb, net, SCTP_FROM_SCTP_INDATA + SCTP_LOC_32);
4782 sctp_free_bufspace(stcb, asoc, tp1, 1);
4797 sctp_free_a_chunk(stcb, tp1, SCTP_SO_NOT_LOCKED);
4811 if ((wake_him) && (stcb->sctp_socket)) {
4812 SOCKBUF_LOCK(&stcb->sctp_socket->so_snd);
4814 sctp_wakeup_log(stcb, wake_him, SCTP_WAKESND_FROM_SACK);
4816 sctp_sowwakeup_locked(stcb->sctp_ep, stcb->sctp_socket);
4819 sctp_wakeup_log(stcb, wake_him, SCTP_NOWAKE_FROM_SACK);
4840 sctp_check_for_revoked(stcb, asoc, cum_ack, biggest_tsn_acked);
4857 sctp_total_flight_increase(stcb, tp1);
4891 sctp_ulp_notify(SCTP_NOTIFY_INTERFACE_UP, stcb,
4895 if (net == stcb->asoc.primary_destination) {
4896 if (stcb->asoc.alternate) {
4901 sctp_free_remote_addr(stcb->asoc.alternate);
4902 stcb->asoc.alternate = NULL;
4909 stcb->sctp_ep, stcb, net,
4911 sctp_timer_start(SCTP_TIMER_TYPE_HEARTBEAT, stcb->sctp_ep, stcb, net);
4912 asoc->cc_functions.sctp_cwnd_update_exit_pf(stcb, net);
4918 if (net->RTO < stcb->asoc.minrto) {
4919 net->RTO = stcb->asoc.minrto;
4921 if (net->RTO > stcb->asoc.maxrto) {
4922 net->RTO = stcb->asoc.maxrto;
4926 asoc->cc_functions.sctp_cwnd_update_after_sack(stcb, asoc, accum_moved, reneged_all, will_exit_fast_recovery);
4933 sctp_timer_stop(SCTP_TIMER_TYPE_SEND, stcb->sctp_ep,
4934 stcb, net,
4953 if (asoc->peers_rwnd < stcb->sctp_ep->sctp_ep.sctp_sws_sender) {
4960 (SCTP_GET_STATE(stcb) == SCTP_STATE_SHUTDOWN_RECEIVED)) &&
4961 ((*asoc->ss_functions.sctp_ss_is_user_msgs_incomplete) (stcb, asoc))) {
4962 SCTP_ADD_SUBSTATE(stcb, SCTP_STATE_PARTIAL_MSG_LEFT);
4965 (SCTP_GET_STATE(stcb) == SCTP_STATE_SHUTDOWN_RECEIVED)) &&
4973 stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_35;
4974 sctp_abort_an_association(stcb->sctp_ep, stcb, op_err, false, SCTP_SO_NOT_LOCKED);
4981 if ((SCTP_GET_STATE(stcb) == SCTP_STATE_OPEN) ||
4982 (SCTP_GET_STATE(stcb) == SCTP_STATE_SHUTDOWN_RECEIVED)) {
4985 SCTP_SET_STATE(stcb, SCTP_STATE_SHUTDOWN_SENT);
4986 sctp_stop_timers_for_shutdown(stcb);
4992 sctp_send_shutdown(stcb, netp);
4994 stcb->sctp_ep, stcb, netp);
4996 stcb->sctp_ep, stcb, NULL);
4998 } else if ((SCTP_GET_STATE(stcb) == SCTP_STATE_SHUTDOWN_RECEIVED) &&
5003 SCTP_SET_STATE(stcb, SCTP_STATE_SHUTDOWN_ACK_SENT);
5004 sctp_stop_timers_for_shutdown(stcb);
5010 sctp_send_shutdown_ack(stcb, netp);
5012 stcb->sctp_ep, stcb, netp);
5035 sctp_strike_gap_ack_chunks(stcb, asoc, biggest_tsn_acked,
5039 asoc->cc_functions.sctp_cwnd_update_after_fr(stcb, asoc);
5068 if (asoc->peers_rwnd < stcb->sctp_ep->sctp_ep.sctp_sws_sender) {
5094 sctp_window_probe_recovery(stcb, asoc, tp1);
5103 stcb->sctp_ep, stcb, net);
5116 stcb->sctp_ep, stcb, net);
5119 sctp_timer_stop(SCTP_TIMER_TYPE_SEND, stcb->sctp_ep,
5120 stcb, net,
5144 sctp_total_flight_increase(stcb, tp1);
5167 lchk = sctp_try_advance_peer_ack_point(stcb, asoc);
5179 send_forward_tsn(stcb, asoc);
5183 send_forward_tsn(stcb, asoc);
5195 stcb->sctp_ep, stcb, lchk->whoTo);
5201 stcb->asoc.peers_rwnd,
5202 stcb->asoc.total_flight,
5203 stcb->asoc.total_output_queue_size);
5208 sctp_update_acked(struct sctp_tcb *stcb, struct sctp_shutdown_chunk *cp, int *abort_flag)
5215 a_rwnd = stcb->asoc.peers_rwnd + stcb->asoc.total_flight;
5218 sctp_express_handle_sack(stcb, cum_ack, a_rwnd, abort_flag, 0);
5222 sctp_kick_prsctp_reorder_queue(struct sctp_tcb *stcb,
5230 KASSERT(stcb != NULL, ("stcb == NULL"));
5231 SCTP_TCB_LOCK_ASSERT(stcb);
5232 SCTP_INP_READ_LOCK_ASSERT(stcb->sctp_ep);
5234 asoc = &stcb->asoc;
5269 if (stcb->sctp_socket) {
5271 sctp_add_to_readq(stcb->sctp_ep, stcb, control,
5272 &stcb->sctp_socket->so_rcv, 1,
5295 ret = sctp_deliver_reasm_check(stcb, &stcb->asoc, strmin, SCTP_READ_LOCK_HELD);
5341 if (stcb->sctp_socket) {
5343 sctp_add_to_readq(stcb->sctp_ep, stcb, control,
5344 &stcb->sctp_socket->so_rcv, 1,
5365 (void)sctp_deliver_reasm_check(stcb, &stcb->asoc, strmin, SCTP_READ_LOCK_HELD);
5370 sctp_flush_reassm_for_str_seq(struct sctp_tcb *stcb,
5385 KASSERT(stcb != NULL, ("stcb == NULL"));
5386 SCTP_TCB_LOCK_ASSERT(stcb);
5387 SCTP_INP_READ_LOCK_ASSERT(stcb->sctp_ep);
5416 sctp_free_a_chunk(stcb, chk, SCTP_SO_NOT_LOCKED);
5435 TAILQ_REMOVE(&stcb->sctp_ep->read_queue, control, next);
5441 sctp_add_chk_to_control(control, strm, stcb, asoc,
5444 sctp_deliver_reasm_check(stcb, asoc, strm, SCTP_READ_LOCK_HELD);
5476 sctp_free_a_readq(stcb, control);
5481 sctp_handle_forward_tsn(struct sctp_tcb *stcb,
5503 asoc = &stcb->asoc;
5509 m_size = (stcb->asoc.mapping_array_size << 3);
5526 if ((long)gap > sctp_sbspace(&stcb->asoc, &stcb->sctp_socket->so_rcv)) {
5539 stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_37;
5540 sctp_abort_an_association(stcb->sctp_ep, stcb, op_err, false, SCTP_SO_NOT_LOCKED);
5545 memset(stcb->asoc.mapping_array, 0, stcb->asoc.mapping_array_size);
5549 memset(stcb->asoc.nr_mapping_array, 0, stcb->asoc.mapping_array_size);
5556 SCTP_TCB_LOCK_ASSERT(stcb);
5576 SCTP_INP_READ_LOCK(stcb->sctp_ep);
5580 sctp_flush_reassm_for_str_seq(stcb, asoc, strm, TAILQ_FIRST(&strm->uno_inqueue), 0, new_cum_tsn);
5583 SCTP_INP_READ_UNLOCK(stcb->sctp_ep);
5601 SCTP_INP_READ_LOCK(stcb->sctp_ep);
5663 sctp_flush_reassm_for_str_seq(stcb, asoc, strm, control, ordered, new_cum_tsn);
5670 sctp_flush_reassm_for_str_seq(stcb, asoc, strm, control, ordered, new_cum_tsn);
5675 sctp_flush_reassm_for_str_seq(stcb, asoc, strm, TAILQ_FIRST(&strm->uno_inqueue), ordered, new_cum_tsn);
5679 TAILQ_FOREACH(control, &stcb->sctp_ep->read_queue, next) {
5706 stcb,
5723 sctp_kick_prsctp_reorder_queue(stcb, strm);
5725 SCTP_INP_READ_UNLOCK(stcb->sctp_ep);
5730 sctp_slide_mapping_arrays(stcb);