Lines Matching defs:stcb
107 sctp_set_rwnd(struct sctp_tcb *stcb, struct sctp_association *asoc)
114 (u_long)stcb->sctp_socket->so_rcv.sb_cc,
115 (u_long)stcb->sctp_socket->so_rcv.sb_hiwat,
116 (u_long)stcb->sctp_socket->so_rcv.sb_lowat,
117 (u_long)stcb->sctp_socket->so_rcv.sb_mbcnt,
118 (u_long)stcb->sctp_socket->so_rcv.sb_mbmax);
120 sctp_sbspace(&stcb->sctp_socket->so_rcv),
126 if (stcb->sctp_socket->so_rcv.sb_cc == 0 &&
131 asoc->my_rwnd = uimax(stcb->sctp_socket->so_rcv.sb_hiwat,
136 calc = (u_int32_t)sctp_sbspace(&stcb->sctp_socket->so_rcv);
146 calc_w_oh = sctp_sbspace_sub(calc, stcb->asoc.my_rwnd_control_len);
159 (asoc->my_rwnd < stcb->sctp_ep->sctp_ep.sctp_sws_receiver)) {
180 sctp_build_ctl_nchunk(struct sctp_tcb *stcb, uint32_t tsn, uint32_t ppid,
187 if ((stcb->sctp_ep->sctp_flags & SCTP_PCB_FLAGS_RECVDATAIOEVNT) == 0) {
212 outinfo->sinfo_assoc_id = sctp_get_associd(stcb);
214 outinfo->sinfo_cumtsn = stcb->asoc.cumulative_tsn;
221 stcb->asoc.my_rwnd_control_len +=
233 sctp_build_ctl(struct sctp_tcb *stcb, struct sctp_tmit_chunk *chk)
238 if ((stcb->sctp_ep->sctp_flags & SCTP_PCB_FLAGS_RECVDATAIOEVNT) == 0) {
263 outinfo->sinfo_assoc_id = sctp_get_associd(stcb);
265 outinfo->sinfo_cumtsn = stcb->asoc.cumulative_tsn;
267 stcb->asoc.my_rwnd_control_len +=
274 sctp_deliver_data(struct sctp_tcb *stcb, struct sctp_association *asoc,
289 SCTP_TCB_UNLOCK(stcb);
290 SCTP_INP_WLOCK(stcb->sctp_ep);
291 SCTP_TCB_LOCK(stcb);
295 if (stcb && (stcb->sctp_ep->sctp_flags & SCTP_PCB_FLAGS_SOCKET_GONE)) {
331 SCTP_INP_WUNLOCK(stcb->sctp_ep);
351 SCTP_INP_WUNLOCK(stcb->sctp_ep);
367 SCTP_INP_WUNLOCK(stcb->sctp_ep);
372 if (stcb->sctp_socket->so_rcv.sb_cc >= stcb->sctp_socket->so_rcv.sb_hiwat) {
375 SCTP_INP_WUNLOCK(stcb->sctp_ep);
390 SCTP_INP_WUNLOCK(stcb->sctp_ep);
416 control = sctp_build_ctl(stcb, chk);
418 if ((stcb->sctp_ep->sctp_flags & SCTP_PCB_FLAGS_NEEDS_MAPPED_V4) &&
433 (int)(ntohs(stcb->rport)));
434 /*((struct sockaddr_in *)to)->sin_port = stcb->rport;*/
437 if (sctp_sbspace(&stcb->sctp_socket->so_rcv) < (long)chk->send_size) {
441 stcb->asoc.my_rwnd_control_len -=
446 if (!sbappendaddr_nocheck(&stcb->sctp_socket->so_rcv,
447 to, chk->data, control, stcb->asoc.my_vtag,
448 stcb->sctp_ep)) {
452 stcb->asoc.my_rwnd_control_len -=
456 if ((stcb->sctp_ep->sctp_flags & SCTP_PCB_FLAGS_IN_TCPPOOL) == 0) {
457 if (sctp_add_to_socket_q(stcb->sctp_ep, stcb)) {
458 stcb->asoc.my_rwnd_control_len +=
462 stcb->asoc.my_rwnd_control_len += sizeof(struct mbuf);
468 if (sctp_sbspace(&stcb->sctp_socket->so_rcv) >=
470 sbappend(&stcb->sctp_socket->so_rcv, chk->data);
476 SCTP_INP_WUNLOCK(stcb->sctp_ep);
486 sctp_sorwakeup(stcb->sctp_ep, stcb->sctp_socket);
512 sctp_service_reassembly(struct sctp_tcb *stcb, struct sctp_association *asoc, int hold_locks)
527 SCTP_TCB_UNLOCK(stcb);
528 SCTP_INP_WLOCK(stcb->sctp_ep);
529 SCTP_TCB_LOCK(stcb);
531 if (stcb && (stcb->sctp_ep->sctp_flags & SCTP_PCB_FLAGS_SOCKET_GONE)) {
552 SCTP_INP_WUNLOCK(stcb->sctp_ep);
557 if (stcb->sctp_socket->so_rcv.sb_cc >=
558 stcb->sctp_socket->so_rcv.sb_hiwat) {
560 sctp_sorwakeup(stcb->sctp_ep,
561 stcb->sctp_socket);
564 SCTP_INP_WUNLOCK(stcb->sctp_ep);
571 sctp_sorwakeup(stcb->sctp_ep,
572 stcb->sctp_socket);
575 SCTP_INP_WUNLOCK(stcb->sctp_ep);
582 sctp_sorwakeup(stcb->sctp_ep,
583 stcb->sctp_socket);
586 SCTP_INP_WUNLOCK(stcb->sctp_ep);
599 sctp_sorwakeup(stcb->sctp_ep,
600 stcb->sctp_socket);
603 SCTP_INP_WUNLOCK(stcb->sctp_ep);
613 SCTP_INP_WUNLOCK(stcb->sctp_ep);
638 control = sctp_build_ctl(stcb, chk);
640 if ((stcb->sctp_ep->sctp_flags & SCTP_PCB_FLAGS_NEEDS_MAPPED_V4) &&
655 (int)(ntohs(stcb->rport)));
656 /*((struct sockaddr_in *)to)->sin_port = stcb->rport;*/
659 if (sctp_sbspace(&stcb->sctp_socket->so_rcv) <
663 stcb->asoc.my_rwnd_control_len -=
666 sctp_sorwakeup(stcb->sctp_ep,
667 stcb->sctp_socket);
669 SCTP_INP_WUNLOCK(stcb->sctp_ep);
673 if (!sbappendaddr_nocheck(&stcb->sctp_socket->so_rcv,
674 to, chk->data, control, stcb->asoc.my_vtag,
675 stcb->sctp_ep)) {
679 stcb->asoc.my_rwnd_control_len -=
682 sctp_sorwakeup(stcb->sctp_ep,
683 stcb->sctp_socket);
685 SCTP_INP_WUNLOCK(stcb->sctp_ep);
689 if ((stcb->sctp_ep->sctp_flags & SCTP_PCB_FLAGS_IN_TCPPOOL) == 0) {
690 if (sctp_add_to_socket_q(stcb->sctp_ep, stcb)) {
691 stcb->asoc.my_rwnd_control_len +=
695 stcb->asoc.my_rwnd_control_len += sizeof(struct mbuf);
699 if (sctp_sbspace(&stcb->sctp_socket->so_rcv) >=
701 sbappend(&stcb->sctp_socket->so_rcv, chk->data);
705 sctp_sorwakeup(stcb->sctp_ep,
706 stcb->sctp_socket);
708 SCTP_INP_WUNLOCK(stcb->sctp_ep);
764 sctp_deliver_data(stcb, asoc, chk, 1);
775 if (sctp_deliver_data(stcb, asoc, NULL, 1) == 0)
778 sctp_sorwakeup(stcb->sctp_ep, stcb->sctp_socket);
780 SCTP_INP_WUNLOCK(stcb->sctp_ep);
787 sctp_sorwakeup(stcb->sctp_ep, stcb->sctp_socket);
790 SCTP_INP_WUNLOCK(stcb->sctp_ep);
801 sctp_queue_data_to_stream(struct sctp_tcb *stcb, struct sctp_association *asoc,
859 sctp_abort_an_association(stcb->sctp_ep, stcb,
880 sctp_deliver_data(stcb, asoc, chk, 0);
901 sctp_deliver_data(stcb, asoc, chk, 0);
993 sctp_sorwakeup(stcb->sctp_ep, stcb->sctp_socket);
1040 sctp_queue_data_for_reasm(struct sctp_tcb *stcb, struct sctp_association *asoc,
1090 sctp_abort_an_association(stcb->sctp_ep, stcb,
1120 sctp_abort_an_association(stcb->sctp_ep, stcb,
1151 sctp_abort_an_association(stcb->sctp_ep,
1152 stcb, SCTP_PEER_FAULTY, oper);
1182 sctp_abort_an_association(stcb->sctp_ep,
1183 stcb, SCTP_PEER_FAULTY, oper);
1281 sctp_abort_an_association(stcb->sctp_ep,
1282 stcb, SCTP_PEER_FAULTY, oper);
1317 sctp_abort_an_association(stcb->sctp_ep,
1318 stcb, SCTP_PEER_FAULTY, oper);
1355 sctp_abort_an_association(stcb->sctp_ep,
1356 stcb, SCTP_PEER_FAULTY, oper);
1389 sctp_abort_an_association(stcb->sctp_ep,
1390 stcb, SCTP_PEER_FAULTY, oper);
1434 sctp_abort_an_association(stcb->sctp_ep,
1435 stcb, SCTP_PEER_FAULTY, oper);
1470 sctp_abort_an_association(stcb->sctp_ep,
1471 stcb, SCTP_PEER_FAULTY, oper);
1507 sctp_abort_an_association(stcb->sctp_ep,
1508 stcb, SCTP_PEER_FAULTY, oper);
1545 sctp_abort_an_association(stcb->sctp_ep,
1546 stcb, SCTP_PEER_FAULTY, oper);
1580 (stcb->sctp_socket->so_rcv.sb_hiwat >> 2) &&
1594 sctp_service_reassembly(stcb, asoc, 0);
1598 sctp_service_reassembly(stcb, asoc, 0);
1664 sctp_process_a_data_chunk(struct sctp_tcb *stcb, struct sctp_association *asoc,
1727 sctp_timer_start(SCTP_TIMER_TYPE_RECV, stcb->sctp_ep,
1728 stcb, NULL);
1736 if (stcb && (stcb->sctp_ep->sctp_flags & SCTP_PCB_FLAGS_SOCKET_GONE)) {
1743 sctp_abort_an_association(stcb->sctp_ep, stcb, 0, op_err);
1763 if (stcb->sctp_socket->so_rcv.sb_cc) {
1765 sctp_sorwakeup(stcb->sctp_ep, stcb->sctp_socket);
1776 sctp_sbspace(&stcb->sctp_socket->so_rcv),
1777 stcb->asoc.cnt_on_delivery_queue);
1780 sctp_set_rwnd(stcb, asoc);
1818 sctp_queue_op_err(stcb, mb);
1863 sctp_abort_an_association(stcb->sctp_ep, stcb, SCTP_PEER_FAULTY,
1896 ((long)(stcb->sctp_socket->so_rcv.sb_hiwat -
1897 stcb->sctp_socket->so_rcv.sb_cc) >= (long)the_len)) {
1915 control = sctp_build_ctl_nchunk(stcb, tsn,
1928 stcb->asoc.my_rwnd_control_len -=
1940 if ((stcb->sctp_ep->sctp_flags & SCTP_PCB_FLAGS_NEEDS_MAPPED_V4) &&
1956 (int)(ntohs(stcb->rport)));
1957 /*((struct sockaddr_in *)to)->sin_port = stcb->rport;*/
1974 SCTP_TCB_UNLOCK(stcb);
1975 SCTP_INP_WLOCK(stcb->sctp_ep);
1976 SCTP_TCB_LOCK(stcb);
1977 if (!sbappendaddr_nocheck(&stcb->sctp_socket->so_rcv, to, dmbuf,
1978 control, stcb->asoc.my_vtag, stcb->sctp_ep)) {
1981 stcb->asoc.my_rwnd_control_len -=
1987 if ((stcb->sctp_ep->sctp_flags & SCTP_PCB_FLAGS_IN_TCPPOOL) == 0) {
1988 if (sctp_add_to_socket_q(stcb->sctp_ep, stcb)) {
1989 stcb->asoc.my_rwnd_control_len += sizeof(struct mbuf);
1992 stcb->asoc.my_rwnd_control_len += sizeof(struct mbuf);
1994 SCTP_INP_WUNLOCK(stcb->sctp_ep);
1995 sctp_sorwakeup(stcb->sctp_ep, stcb->sctp_socket);
2074 sctp_abort_an_association(stcb->sctp_ep, stcb,
2099 sctp_abort_an_association(stcb->sctp_ep,
2100 stcb, SCTP_PEER_FAULTY, oper);
2133 sctp_abort_an_association(stcb->sctp_ep,
2134 stcb, SCTP_PEER_FAULTY, oper);
2144 sctp_deliver_data(stcb, asoc, chk, 0);
2145 sctp_sorwakeup(stcb->sctp_ep, stcb->sctp_socket);
2169 sctp_queue_data_to_stream(stcb, asoc, chk, abort_flag);
2174 sctp_queue_data_for_reasm(stcb, asoc, chk, abort_flag);
2205 sctp_sack_check(struct sctp_tcb *stcb, int ok_to_sack, int was_a_gap, int *abort_flag)
2220 asoc = &stcb->asoc;
2239 m_size = stcb->asoc.mapping_array_size << 3;
2357 sctp_handle_stream_reset_response(stcb, asoc->pending_reply);
2363 sctp_queue_data_to_stream(stcb, asoc, chk, abort_flag);
2381 if (callout_pending(&stcb->asoc.dack_timer.timer)) {
2383 stcb->sctp_ep, stcb, NULL);
2393 sctp_send_shutdown(stcb, stcb->asoc.primary_destination);
2394 sctp_send_sack(stcb);
2398 is_a_gap = compare_with_wrap(stcb->asoc.highest_tsn_inside_map,
2399 stcb->asoc.cumulative_tsn, MAX_TSN);
2400 if ((stcb->asoc.first_ack_sent == 0) || /* First time we send a sack */
2402 (stcb->asoc.numduptsns) || /* we have dup's */
2404 (callout_pending(&stcb->asoc.dack_timer.timer)) /* timer was up . second packet */
2411 stcb->asoc.first_ack_sent = 1;
2412 sctp_send_sack(stcb);
2416 stcb->sctp_ep, stcb, NULL);
2423 sctp_service_queues(struct sctp_tcb *stcb, struct sctp_association *asoc, int hold_locks)
2431 sctp_service_reassembly(stcb, asoc, hold_locks);
2444 if (stcb->sctp_socket->so_rcv.sb_cc >= stcb->sctp_socket->so_rcv.sb_hiwat) {
2446 sctp_sorwakeup(stcb->sctp_ep, stcb->sctp_socket);
2450 if (sctp_deliver_data(stcb, asoc, (struct sctp_tmit_chunk *)NULL, hold_locks) == 0)
2456 sctp_sorwakeup(stcb->sctp_ep, stcb->sctp_socket);
2487 (stcb->sctp_socket->so_rcv.sb_hiwat >> 2) && tsize))) {
2493 sctp_service_reassembly(stcb, asoc, hold_locks);
2500 struct sctphdr *sh, struct sctp_inpcb *inp, struct sctp_tcb *stcb,
2511 sctp_set_rwnd(stcb, &stcb->asoc);
2514 asoc = &stcb->asoc;
2515 if (compare_with_wrap(stcb->asoc.highest_tsn_inside_map,
2516 stcb->asoc.cumulative_tsn, MAX_TSN)) {
2609 sctp_abort_association(inp, stcb, m, iphlen, sh,
2628 if (sctp_process_a_data_chunk(stcb, asoc, mm, *offset, ch,
2666 sctp_send_packet_dropped(stcb, net, *mm, iphlen, 0);
2675 stcb->asoc.overall_error_count = 0;
2676 SCTP_GETTIME_TIMEVAL(&stcb->asoc.time_last_rcvd);
2679 sctp_service_queues(stcb, asoc, 0);
2686 sctp_timer_start(SCTP_TIMER_TYPE_RECV, stcb->sctp_ep, stcb,
2690 sctp_sack_check(stcb, 1, was_a_gap, &abort_flag);
2698 sctp_handle_segments(struct sctp_tcb *stcb, struct sctp_association *asoc,
2800 sctp_total_flight_decrease(stcb, tp1);
2810 sctp_calculate_rto(stcb,
2928 sctp_strike_gap_ack_chunks(struct sctp_tcb *stcb, struct sctp_association *asoc,
2945 tp1 = TAILQ_FIRST(&stcb->asoc.send_queue);
2958 if (stcb->asoc.peer_supports_prsctp ) {
2982 sctp_release_pr_sctp_chunk(stcb, tp1,
3110 alt = sctp_find_alternate_net(stcb, tp1->whoTo);
3164 sctp_total_flight_decrease(stcb, tp1);
3189 sctp_try_advance_peer_ack_point(struct sctp_tcb *stcb,
3239 sctp_release_pr_sctp_chunk(stcb, tp1,
3266 sctp_free_bufspace(stcb, asoc, tp1);
3278 sctp_ulp_notify(SCTP_NOTIFY_DG_FAIL, stcb,
3283 sctp_sowwakeup(stcb->sctp_ep,
3284 stcb->sctp_socket);
3466 sctp_handle_sack(struct sctp_sack_chunk *ch, struct sctp_tcb *stcb,
3484 asoc = &stcb->asoc;
3505 sctp_service_queues(stcb, asoc, 0);
3577 sctp_abort_an_association(stcb->sctp_ep, stcb, SCTP_PEER_FAULTY, oper);
3625 if (asoc->peers_rwnd < stcb->sctp_ep->sctp_ep.sctp_sws_sender) {
3631 sctp_timer_stop(SCTP_TIMER_TYPE_SEND, stcb->sctp_ep,
3632 stcb, net);
3682 sctp_total_flight_decrease(stcb, tp1);
3691 sctp_calculate_rto(stcb,
3724 sctp_timer_stop(SCTP_TIMER_TYPE_SEND, stcb->sctp_ep,
3725 stcb, net);
3750 sctp_handle_segments(stcb, asoc, ch, last_tsn,
3819 sctp_free_bufspace(stcb, asoc, tp1);
3845 sctp_sowwakeup(stcb->sctp_ep, stcb->sctp_socket);
3891 sctp_ulp_notify(SCTP_NOTIFY_INTERFACE_UP, stcb,
3895 sctp_set_primary_addr(stcb, (struct sockaddr *)NULL, net);
4023 if (net->RTO < stcb->asoc.minrto) {
4024 net->RTO = stcb->asoc.minrto;
4026 if (net->RTO > stcb->asoc.maxrto) {
4027 net->RTO = stcb->asoc.maxrto;
4057 if (asoc->peers_rwnd < stcb->sctp_ep->sctp_ep.sctp_sws_sender) {
4063 sctp_timer_stop(SCTP_TIMER_TYPE_SEND, stcb->sctp_ep,
4064 stcb, net);
4081 sctp_send_shutdown(stcb,
4082 stcb->asoc.primary_destination);
4084 stcb->sctp_ep, stcb, asoc->primary_destination);
4086 stcb->sctp_ep, stcb, asoc->primary_destination);
4090 sctp_send_shutdown_ack(stcb,
4091 stcb->asoc.primary_destination);
4094 stcb->sctp_ep, stcb, asoc->primary_destination);
4106 sctp_strike_gap_ack_chunks(stcb, asoc, biggest_tsn_acked,
4121 lchk = sctp_try_advance_peer_ack_point(stcb, asoc);
4130 send_forward_tsn(stcb, asoc);
4138 stcb->sctp_ep, stcb, lchk->whoTo);
4189 stcb->sctp_ep, stcb, net);
4191 stcb->sctp_ep, stcb, net);
4274 if (asoc->peers_rwnd < stcb->sctp_ep->sctp_ep.sctp_sws_sender) {
4294 stcb->sctp_ep, stcb, net);
4302 sctp_update_acked(struct sctp_tcb *stcb, struct sctp_shutdown_chunk *cp,
4315 htonl(stcb->asoc.peers_rwnd + stcb->asoc.total_flight);
4325 sctp_handle_sack(&sack, stcb, netp, abort_flag);
4329 sctp_kick_prsctp_reorder_queue(struct sctp_tcb *stcb,
4336 asoc = &stcb->asoc;
4353 sctp_deliver_data(stcb, &stcb->asoc, chk, 0);
4377 sctp_deliver_data(stcb, &stcb->asoc, chk, 0);
4388 sctp_handle_forward_tsn(struct sctp_tcb *stcb,
4424 asoc = &stcb->asoc;
4434 m_size = (stcb->asoc.mapping_array_size << 3);
4469 if ((long)gap > sctp_sbspace(&stcb->sctp_socket->so_rcv)) {
4494 sctp_sack_check(stcb, 0, 0, abort_flag);
4521 sctp_service_reassembly(stcb, asoc, 0);
4603 stcb, SCTP_PARTIAL_DELIVERY_ABORTED, (void *)NULL);
4618 stcb, SCTP_PARTIAL_DELIVERY_ABORTED, (void *)NULL);
4672 sctp_kick_prsctp_reorder_queue(stcb, strm);