FreeBSD kernel IPv4 code
sctp_indata.c File Reference
#include <sys/cdefs.h>
#include <netinet/sctp_os.h>
#include <sys/proc.h>
#include <netinet/sctp_var.h>
#include <netinet/sctp_sysctl.h>
#include <netinet/sctp_header.h>
#include <netinet/sctp_pcb.h>
#include <netinet/sctputil.h>
#include <netinet/sctp_output.h>
#include <netinet/sctp_uio.h>
#include <netinet/sctp_auth.h>
#include <netinet/sctp_timer.h>
#include <netinet/sctp_asconf.h>
#include <netinet/sctp_indata.h>
#include <netinet/sctp_bsd_addr.h>
#include <netinet/sctp_input.h>
#include <netinet/sctp_crc32.h>
#include <netinet/sctp_lock_bsd.h>
Include dependency graph for sctp_indata.c:

Go to the source code of this file.

Functions

 __FBSDID ("$FreeBSD$")
 
static uint32_t sctp_add_chk_to_control (struct sctp_queued_to_read *control, struct sctp_stream_in *strm, struct sctp_tcb *stcb, struct sctp_association *asoc, struct sctp_tmit_chunk *chk, int hold_rlock)
 
void sctp_set_rwnd (struct sctp_tcb *stcb, struct sctp_association *asoc)
 
uint32_t sctp_calc_rwnd (struct sctp_tcb *stcb, struct sctp_association *asoc)
 
struct sctp_queued_to_readsctp_build_readq_entry (struct sctp_tcb *stcb, struct sctp_nets *net, uint32_t tsn, uint32_t ppid, uint32_t context, uint16_t sid, uint32_t mid, uint8_t flags, struct mbuf *dm)
 
struct mbuf * sctp_build_ctl_nchunk (struct sctp_inpcb *inp, struct sctp_sndrcvinfo *sinfo)
 
static void sctp_mark_non_revokable (struct sctp_association *asoc, uint32_t tsn)
 
static int sctp_place_control_in_stream (struct sctp_stream_in *strm, struct sctp_association *asoc, struct sctp_queued_to_read *control)
 
static void sctp_abort_in_reasm (struct sctp_tcb *stcb, struct sctp_queued_to_read *control, struct sctp_tmit_chunk *chk, int *abort_flag, int opspot)
 
static void sctp_clean_up_control (struct sctp_tcb *stcb, struct sctp_queued_to_read *control)
 
static void sctp_queue_data_to_stream (struct sctp_tcb *stcb, struct sctp_association *asoc, struct sctp_queued_to_read *control, int *abort_flag, int *need_reasm)
 
static void sctp_setup_tail_pointer (struct sctp_queued_to_read *control)
 
static void sctp_add_to_tail_pointer (struct sctp_queued_to_read *control, struct mbuf *m, uint32_t *added)
 
static void sctp_build_readq_entry_from_ctl (struct sctp_queued_to_read *nc, struct sctp_queued_to_read *control)
 
static void sctp_reset_a_control (struct sctp_queued_to_read *control, struct sctp_inpcb *inp, uint32_t tsn)
 
static int sctp_handle_old_unordered_data (struct sctp_tcb *stcb, struct sctp_association *asoc, struct sctp_stream_in *strm, struct sctp_queued_to_read *control, uint32_t pd_point, int inp_read_lock_held)
 
static void sctp_inject_old_unordered_data (struct sctp_tcb *stcb, struct sctp_association *asoc, struct sctp_queued_to_read *control, struct sctp_tmit_chunk *chk, int *abort_flag)
 
static int sctp_deliver_reasm_check (struct sctp_tcb *stcb, struct sctp_association *asoc, struct sctp_stream_in *strm, int inp_read_lock_held)
 
static void sctp_queue_data_for_reasm (struct sctp_tcb *stcb, struct sctp_association *asoc, struct sctp_queued_to_read *control, struct sctp_tmit_chunk *chk, int created_control, int *abort_flag, uint32_t tsn)
 
static struct sctp_queued_to_readsctp_find_reasm_entry (struct sctp_stream_in *strm, uint32_t mid, int ordered, int idata_supported)
 
static int sctp_process_a_data_chunk (struct sctp_tcb *stcb, struct sctp_association *asoc, struct mbuf **m, int offset, int chk_length, struct sctp_nets *net, uint32_t *high_tsn, int *abort_flag, int *break_flag, int last_chunk, uint8_t chk_type)
 
void sctp_slide_mapping_arrays (struct sctp_tcb *stcb)
 
void sctp_sack_check (struct sctp_tcb *stcb, int was_a_gap)
 
int sctp_process_data (struct mbuf **mm, int iphlen, int *offset, int length, struct sctp_inpcb *inp, struct sctp_tcb *stcb, struct sctp_nets *net, uint32_t *high_tsn)
 
static int sctp_process_segment_range (struct sctp_tcb *stcb, struct sctp_tmit_chunk **p_tp1, uint32_t last_tsn, uint16_t frag_strt, uint16_t frag_end, int nr_sacking, int *num_frs, uint32_t *biggest_newly_acked_tsn, uint32_t *this_sack_lowest_newack, int *rto_ok)
 
static int sctp_handle_segments (struct mbuf *m, int *offset, struct sctp_tcb *stcb, struct sctp_association *asoc, uint32_t last_tsn, uint32_t *biggest_tsn_acked, uint32_t *biggest_newly_acked_tsn, uint32_t *this_sack_lowest_newack, int num_seg, int num_nr_seg, int *rto_ok)
 
static void sctp_check_for_revoked (struct sctp_tcb *stcb, struct sctp_association *asoc, uint32_t cumack, uint32_t biggest_tsn_acked)
 
static void sctp_strike_gap_ack_chunks (struct sctp_tcb *stcb, struct sctp_association *asoc, uint32_t biggest_tsn_acked, uint32_t biggest_tsn_newly_acked, uint32_t this_sack_lowest_newack, int accum_moved)
 
struct sctp_tmit_chunksctp_try_advance_peer_ack_point (struct sctp_tcb *stcb, struct sctp_association *asoc)
 
static int sctp_fs_audit (struct sctp_association *asoc)
 
static void sctp_window_probe_recovery (struct sctp_tcb *stcb, struct sctp_association *asoc, struct sctp_tmit_chunk *tp1)
 
void sctp_express_handle_sack (struct sctp_tcb *stcb, uint32_t cumack, uint32_t rwnd, int *abort_now, int ecne_seen)
 
void sctp_handle_sack (struct mbuf *m, int offset_seg, int offset_dup, struct sctp_tcb *stcb, uint16_t num_seg, uint16_t num_nr_seg, uint16_t num_dup, int *abort_now, uint8_t flags, uint32_t cum_ack, uint32_t rwnd, int ecne_seen)
 
void sctp_update_acked (struct sctp_tcb *stcb, struct sctp_shutdown_chunk *cp, int *abort_flag)
 
static void sctp_kick_prsctp_reorder_queue (struct sctp_tcb *stcb, struct sctp_stream_in *strmin)
 
static void sctp_flush_reassm_for_str_seq (struct sctp_tcb *stcb, struct sctp_association *asoc, struct sctp_stream_in *strm, struct sctp_queued_to_read *control, int ordered, uint32_t cumtsn)
 
void sctp_handle_forward_tsn (struct sctp_tcb *stcb, struct sctp_forward_tsn_chunk *fwd, int *abort_flag, struct mbuf *m, int offset)
 

Variables

static const int8_t sctp_map_lookup_tab [256]
 

Function Documentation

◆ __FBSDID()

__FBSDID ( "$FreeBSD$"  )

◆ sctp_abort_in_reasm()

◆ sctp_add_chk_to_control()

uint32_t sctp_add_chk_to_control ( struct sctp_queued_to_read control,
struct sctp_stream_in strm,
struct sctp_tcb stcb,
struct sctp_association asoc,
struct sctp_tmit_chunk chk,
int  hold_rlock 
)
static

◆ sctp_add_to_tail_pointer()

static void sctp_add_to_tail_pointer ( struct sctp_queued_to_read control,
struct mbuf *  m,
uint32_t added 
)
static

◆ sctp_build_ctl_nchunk()

◆ sctp_build_readq_entry()

◆ sctp_build_readq_entry_from_ctl()

◆ sctp_calc_rwnd()

◆ sctp_check_for_revoked()

◆ sctp_clean_up_control()

static void sctp_clean_up_control ( struct sctp_tcb stcb,
struct sctp_queued_to_read control 
)
static

◆ sctp_deliver_reasm_check()

◆ sctp_express_handle_sack()

void sctp_express_handle_sack ( struct sctp_tcb stcb,
uint32_t  cumack,
uint32_t  rwnd,
int *  abort_now,
int  ecne_seen 
)

Definition at line 3924 of file sctp_indata.c.

References sctp_association::advanced_peer_ack_point, sctp_association::alternate, sctp_tcb::asoc, sctp_tmit_chunk::asoc, sctp_tmit_chunk::book_size, sctp_association::cc_functions, sctp_data_chunkrec::chunk_was_revoked, sctp_stream_out::chunks_on_queues, sctp_nets::cwnd, sctp_nets::cwr_window_tsn, sctp_tmit_chunk::data, sctp_nets::dest_state, sctp_tmit_chunk::do_rtt, sctp_nets::error_count, sctp_nets::find_pseudo_cumack, sctp_nets::find_rtx_pseudo_cumack, sctp_nets::flight_size, sctp_data_chunkrec::fwd_tsn_cnt, sctp_inpcb::last_abort_code, sctp_association::last_acked_seq, sctp_nets::lastsa, sctp_nets::lastsv, sctp_association::maxrto, sctp_association::minrto, sctp_nets::net_ack, sctp_nets::net_ack2, sctp_association::nets, sctp_nets::new_pseudo_cumack, sctp_stream_out::outqueue, sctp_association::overall_error_count, sctp_nets::partial_bytes_acked, sctp_association::peers_rwnd, sctp_association::pr_sctp_cnt, sctp_nets::prev_cwnd, sctp_association::primary_destination, sctp_association::prsctp_supported, sctp_tmit_chunk::rec, sctp_nets::RTO, sctp_nets::rto_needed, sctp_nets::rxt_timer, sctp_abort_an_association(), SCTP_ADD_SUBSTATE, SCTP_ADDR_PF, SCTP_ADDR_REACHABLE, SCTP_BASE_SYSCTL, sctp_calculate_rto(), SCTP_CAUSE_PROTOCOL_VIOLATION, SCTP_CAUSE_USER_INITIATED_ABT, SCTP_CWND_LOG_FROM_SACK, SCTP_CWND_LOGGING_ENABLE, sctp_cc_functions::sctp_cwnd_prepare_net_for_sack, sctp_cc_functions::sctp_cwnd_update_after_sack, sctp_cc_functions::sctp_cwnd_update_exit_pf, sctp_cc_functions::sctp_cwnd_update_tsn_acknowledged, SCTP_DATAGRAM_ACKED, SCTP_DATAGRAM_NR_ACKED, SCTP_DATAGRAM_RESEND, SCTP_DATAGRAM_UNSENT, SCTP_DIAG_INFO_LEN, sctp_inpcb::sctp_ep, sctp_tcb::sctp_ep, SCTP_FLIGHT_LOG_DOWN_CA, SCTP_FLIGHT_LOGGING_ENABLE, sctp_flight_size_decrease, sctp_flight_size_increase, sctp_free_a_chunk, sctp_free_bufspace, sctp_free_remote_addr, SCTP_FROM_SCTP_INDATA, sctp_fs_audit(), sctp_generate_cause(), SCTP_GET_STATE, SCTP_LOC_25, SCTP_LOC_26, SCTP_LOC_27, SCTP_LOC_28, sctp_log_cwnd(), SCTP_LOG_FREE_SENT, sctp_log_sack(), SCTP_LOG_SACK_ARRIVALS_ENABLE, sctp_m_freem, sctp_misc_ints(), SCTP_NOTIFY_INTERFACE_UP, SCTP_NOWAKE_FROM_SACK, SCTP_OS_TIMER_PENDING, SCTP_PRINTF, SCTP_RTT_FROM_DATA, SCTP_RTT_SHIFT, SCTP_SACK_LOG_EXPRESS, SCTP_SACK_LOGGING_ENABLE, SCTP_SACK_RWND_LOGGING_ENABLE, SCTP_SACK_RWND_UPDATE, sctp_sbspace_sub, sctp_send_shutdown(), sctp_send_shutdown_ack(), SCTP_SET_STATE, SCTP_SNPRINTF, SCTP_SO_NOT_LOCKED, sctp_tcb::sctp_socket, sctp_sowwakeup_locked, sctp_ss_functions::sctp_ss_is_user_msgs_incomplete, SCTP_STAT_DECR_GAUGE32, SCTP_STATE_OPEN, SCTP_STATE_PARTIAL_MSG_LEFT, SCTP_STATE_SHUTDOWN_ACK_SENT, SCTP_STATE_SHUTDOWN_PENDING, SCTP_STATE_SHUTDOWN_RECEIVED, SCTP_STATE_SHUTDOWN_SENT, sctp_stop_timers_for_shutdown(), SCTP_STREAM_RESET_PENDING, sctp_pcb::sctp_sws_sender, SCTP_TCB_LOCK_ASSERT, SCTP_THRESHOLD_CLEAR, SCTP_THRESHOLD_LOGGING, sctp_timer_start(), sctp_timer_stop(), SCTP_TIMER_TYPE_HEARTBEAT, SCTP_TIMER_TYPE_SEND, SCTP_TIMER_TYPE_SHUTDOWN, SCTP_TIMER_TYPE_SHUTDOWNACK, SCTP_TIMER_TYPE_SHUTDOWNGUARD, sctp_total_flight_decrease, sctp_total_flight_increase, sctp_try_advance_peer_ack_point(), SCTP_TSN_GE, SCTP_TSN_GT, SCTP_TSN_LOG_SIZE, sctp_ucount_decr, sctp_ucount_incr, sctp_ulp_notify(), SCTP_WAKE_LOGGING_ENABLE, SCTP_WAKESND_FROM_SACK, sctp_wakeup_log(), sctp_window_probe_recovery(), send_forward_tsn(), sctp_association::send_queue, sctp_tmit_chunk::send_size, sctp_association::sending_seq, sctp_tmit_chunk::sent, sctp_association::sent_queue, sctp_association::sent_queue_cnt, sctp_association::sent_queue_retran_cnt, sctp_tmit_chunk::sent_rcv_time, sctp_data_chunkrec::sid, sctp_tmit_chunk::snd_count, sctp_association::ss_functions, sctp_stream_out::state, sctp_association::state, sctp_association::stream_queue_cnt, sctp_association::strmout, sctp_association::this_sack_highest_gap, sctp_timer::timer, sctp_association::total_flight, sctp_association::total_flight_count, sctp_association::total_output_queue_size, sctp_association::trigger_reset, sctp_data_chunkrec::tsn, sctp_tmit_chunk::whoTo, sctp_nets::will_exit_fast_recovery, sctp_nets::window_probe, and sctp_tmit_chunk::window_probe.

Referenced by sctp_process_control(), and sctp_update_acked().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ sctp_find_reasm_entry()

static struct sctp_queued_to_read * sctp_find_reasm_entry ( struct sctp_stream_in strm,
uint32_t  mid,
int  ordered,
int  idata_supported 
)
static

Definition at line 1665 of file sctp_indata.c.

References sctp_stream_in::inqueue, sctp_queued_to_read::mid, SCTP_MID_EQ, and sctp_stream_in::uno_inqueue.

Referenced by sctp_process_a_data_chunk().

Here is the caller graph for this function:

◆ sctp_flush_reassm_for_str_seq()

◆ sctp_fs_audit()

◆ sctp_handle_forward_tsn()

void sctp_handle_forward_tsn ( struct sctp_tcb stcb,
struct sctp_forward_tsn_chunk fwd,
int *  abort_flag,
struct mbuf *  m,
int  offset 
)

Definition at line 5476 of file sctp_indata.c.

References sctp_tcb::asoc, sctp_forward_tsn_chunk::ch, sctp_chunkhdr::chunk_length, sctp_association::cnt_on_all_streams, sctp_association::control_pdapi, sctp_association::cumulative_tsn, sctp_queued_to_read::end_added, sctp_strseq_mid::flags, sctp_association::fragmented_delivery_inprogress, sctp_association::highest_tsn_inside_map, sctp_association::highest_tsn_inside_nr_map, sctp_association::idata_supported, sctp_stream_in::inqueue, sctp_inpcb::last_abort_code, sctp_stream_in::last_mid_delivered, sctp_queued_to_read::length, sctp_association::mapping_array, sctp_association::mapping_array_base_tsn, sctp_association::mapping_array_size, sctp_strseq_mid::mid, sctp_queued_to_read::mid, sctp_forward_tsn_chunk::new_cumulative_tsn, next, sctp_association::nr_mapping_array, sctp_queued_to_read::on_strm_q, sctp_queued_to_read::pdapi_aborted, PR_SCTP_UNORDERED_FLAG, sctp_inpcb::read_queue, sctp_abort_an_association(), SCTP_BASE_SYSCTL, SCTP_CALC_TSN_TO_GAP, SCTP_CAUSE_PROTOCOL_VIOLATION, SCTP_DEBUG_INDATA1, SCTP_DIAG_INFO_LEN, sctp_tcb::sctp_ep, sctp_flush_reassm_for_str_seq(), SCTP_FROM_SCTP_INDATA, sctp_generate_cause(), SCTP_INP_READ_LOCK, SCTP_INP_READ_UNLOCK, SCTP_IS_TSN_PRESENT, sctp_kick_prsctp_reorder_queue(), SCTP_LOC_37, sctp_log_map(), sctp_m_getptr(), SCTP_MAP_LOGGING_ENABLE, SCTP_MAP_SLIDE_RESULT, SCTP_MID_EQ, SCTP_MID_GE, SCTP_MID_GT, SCTP_NOTIFY_PARTIAL_DELVIERY_INDICATION, SCTP_ON_ORDERED, SCTP_ON_UNORDERED, SCTP_PARTIAL_DELIVERY_ABORTED, sctp_sbspace, SCTP_SET_TSN_PRESENT, sctp_slide_mapping_arrays(), SCTP_SNPRINTF, SCTP_SO_NOT_LOCKED, sctp_tcb::sctp_socket, SCTP_STAT_INCR, SCTP_TCB_LOCK_ASSERT, SCTP_TSN_GE, SCTP_TSN_GT, sctp_ucount_decr, sctp_ulp_notify(), SCTPDBG, sctp_strseq::sid, sctp_strseq_mid::sid, sctp_queued_to_read::sinfo_stream, sctp_association::size_on_all_streams, sctp_strseq::ssn, sctp_association::ssn_of_pdapi, sctp_queued_to_read::stcb, sctp_association::str_of_pdapi, sctp_association::streamincnt, sctp_association::strmin, and sctp_stream_in::uno_inqueue.

Referenced by sctp_handle_str_reset_request_tsn(), sctp_handle_stream_reset_response(), and sctp_process_control().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ sctp_handle_old_unordered_data()

◆ sctp_handle_sack()

void sctp_handle_sack ( struct mbuf *  m,
int  offset_seg,
int  offset_dup,
struct sctp_tcb stcb,
uint16_t  num_seg,
uint16_t  num_nr_seg,
uint16_t  num_dup,
int *  abort_now,
uint8_t  flags,
uint32_t  cum_ack,
uint32_t  rwnd,
int  ecne_seen 
)

Definition at line 4401 of file sctp_indata.c.

References sctp_association::advanced_peer_ack_point, sctp_association::alternate, sctp_tcb::asoc, sctp_tmit_chunk::asoc, sctp_tmit_chunk::book_size, sctp_association::cc_functions, sctp_data_chunkrec::chunk_was_revoked, sctp_stream_out::chunks_on_queues, sctp_nets::cwnd, sctp_nets::cwr_window_tsn, sctp_tmit_chunk::data, sctp_nets::dest_state, sctp_tmit_chunk::do_rtt, sctp_nets::error_count, sctp_association::fast_recovery_tsn, sctp_nets::fast_retran_loss_recovery, sctp_association::fast_retran_loss_recovery, sctp_nets::find_pseudo_cumack, sctp_nets::find_rtx_pseudo_cumack, sctp_tmit_chunk::flags, sctp_nets::flight_size, sctp_data_chunkrec::fwd_tsn_cnt, sctp_inpcb::last_abort_code, sctp_association::last_acked_seq, sctp_nets::lastsa, sctp_nets::lastsv, sctp_association::maxrto, sctp_association::minrto, sctp_nets::net_ack, sctp_nets::net_ack2, sctp_association::nets, sctp_nets::new_pseudo_cumack, sctp_stream_out::outqueue, sctp_association::overall_error_count, sctp_nets::partial_bytes_acked, sctp_association::peers_rwnd, PR_SCTP_BUF_ENABLED, sctp_association::pr_sctp_cnt, PR_SCTP_ENABLED, sctp_nets::prev_cwnd, sctp_association::primary_destination, sctp_association::prsctp_supported, sctp_tmit_chunk::rec, sctp_nets::RTO, sctp_nets::rto_needed, sctp_nets::rxt_timer, sctp_association::sat_t3_loss_recovery, sctp_association::sat_t3_recovery_tsn, sctp_nets::saw_newack, sctp_association::saw_sack_with_frags, sctp_association::saw_sack_with_nr_frags, sctp_abort_an_association(), SCTP_ADD_SUBSTATE, SCTP_ADDR_PF, SCTP_ADDR_REACHABLE, SCTP_ADDR_UNCONFIRMED, SCTP_BASE_SYSCTL, sctp_calculate_rto(), SCTP_CAUSE_PROTOCOL_VIOLATION, SCTP_CAUSE_USER_INITIATED_ABT, sctp_check_for_revoked(), sctp_association::sctp_cmt_on_off, SCTP_CWND_LOG_FROM_SACK, SCTP_CWND_LOGGING_ENABLE, sctp_cc_functions::sctp_cwnd_prepare_net_for_sack, sctp_cc_functions::sctp_cwnd_update_after_fr, sctp_cc_functions::sctp_cwnd_update_after_sack, sctp_cc_functions::sctp_cwnd_update_exit_pf, sctp_cc_functions::sctp_cwnd_update_tsn_acknowledged, SCTP_DATAGRAM_ACKED, SCTP_DATAGRAM_NR_ACKED, SCTP_DATAGRAM_RESEND, SCTP_DATAGRAM_SENT, SCTP_DATAGRAM_UNSENT, SCTP_DIAG_INFO_LEN, sctp_inpcb::sctp_ep, sctp_tcb::sctp_ep, SCTP_FLIGHT_LOG_DOWN_CA, SCTP_FLIGHT_LOG_UP_REVOKE, SCTP_FLIGHT_LOGGING_ENABLE, sctp_flight_size_decrease, sctp_flight_size_increase, SCTP_FR_DUPED, SCTP_FR_LOGGING_ENABLE, sctp_free_a_chunk, sctp_free_bufspace, sctp_free_remote_addr, SCTP_FROM_SCTP_INDATA, sctp_fs_audit(), SCTP_FWD_TSN_CHECK, sctp_generate_cause(), SCTP_GET_STATE, sctp_handle_segments(), SCTP_LOC_29, SCTP_LOC_30, SCTP_LOC_31, SCTP_LOC_32, SCTP_LOC_33, SCTP_LOC_34, SCTP_LOC_35, SCTP_LOC_36, sctp_log_cwnd(), sctp_log_fr(), SCTP_LOG_FREE_SENT, SCTP_LOG_NEW_SACK, SCTP_LOG_RWND_ENABLE, sctp_log_rwnd_set(), sctp_log_sack(), SCTP_LOG_SACK_ARRIVALS_ENABLE, SCTP_LOG_TRY_ADVANCE, SCTP_LOG_TSN_ACKED, sctp_m_freem, sctp_m_getptr(), sctp_misc_ints(), SCTP_NOTIFY_INTERFACE_UP, SCTP_NOWAKE_FROM_SACK, SCTP_OS_TIMER_PENDING, SCTP_PRINTF, SCTP_RTT_FROM_DATA, SCTP_RTT_SHIFT, SCTP_SACK_CMT_DAC, SCTP_SACK_LOG_NORMAL, SCTP_SACK_LOGGING_ENABLE, SCTP_SACK_RWND_LOGGING_ENABLE, SCTP_SACK_RWND_UPDATE, sctp_sbspace_sub, sctp_send_shutdown(), sctp_send_shutdown_ack(), SCTP_SET_PEER_RWND_VIA_SACK, SCTP_SET_STATE, SCTP_SNPRINTF, SCTP_SO_NOT_LOCKED, sctp_tcb::sctp_socket, sctp_sowwakeup_locked, sctp_ss_functions::sctp_ss_is_user_msgs_incomplete, SCTP_STAT_DECR_GAUGE32, SCTP_STAT_INCR, SCTP_STATE_OPEN, SCTP_STATE_PARTIAL_MSG_LEFT, SCTP_STATE_SHUTDOWN_ACK_SENT, SCTP_STATE_SHUTDOWN_PENDING, SCTP_STATE_SHUTDOWN_RECEIVED, SCTP_STATE_SHUTDOWN_SENT, sctp_stop_timers_for_shutdown(), SCTP_STREAM_RESET_PENDING, sctp_strike_gap_ack_chunks(), sctp_pcb::sctp_sws_sender, SCTP_TCB_LOCK_ASSERT, SCTP_THRESHOLD_CLEAR, SCTP_THRESHOLD_LOGGING, sctp_timer_start(), sctp_timer_stop(), SCTP_TIMER_TYPE_HEARTBEAT, SCTP_TIMER_TYPE_SEND, SCTP_TIMER_TYPE_SHUTDOWN, SCTP_TIMER_TYPE_SHUTDOWNACK, SCTP_TIMER_TYPE_SHUTDOWNGUARD, sctp_total_flight_decrease, sctp_total_flight_increase, sctp_try_advance_peer_ack_point(), SCTP_TSN_GE, SCTP_TSN_GT, SCTP_TSN_LOG_SIZE, sctp_ucount_decr, sctp_ucount_incr, sctp_ulp_notify(), SCTP_WAKE_LOGGING_ENABLE, SCTP_WAKESND_FROM_SACK, sctp_wakeup_log(), sctp_window_probe_recovery(), send_forward_tsn(), sctp_association::send_queue, sctp_tmit_chunk::send_size, sctp_association::sending_seq, sctp_tmit_chunk::sent, sctp_association::sent_queue, sctp_association::sent_queue_cnt, sctp_association::sent_queue_cnt_removeable, sctp_association::sent_queue_retran_cnt, sctp_tmit_chunk::sent_rcv_time, sctp_data_chunkrec::sid, sctp_tmit_chunk::snd_count, sctp_association::ss_functions, sctp_stream_out::state, sctp_association::state, sctp_association::stream_queue_cnt, sctp_association::strmout, sctp_association::this_sack_highest_gap, sctp_nets::this_sack_highest_newack, sctp_timer::timer, sctp_association::total_flight, sctp_association::total_flight_count, sctp_association::total_output_queue_size, sctp_association::trigger_reset, sctp_data_chunkrec::tsn, sctp_tmit_chunk::whoTo, sctp_nets::will_exit_fast_recovery, sctp_nets::window_probe, and sctp_tmit_chunk::window_probe.

Referenced by sctp_process_control().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ sctp_handle_segments()

static int sctp_handle_segments ( struct mbuf *  m,
int *  offset,
struct sctp_tcb stcb,
struct sctp_association asoc,
uint32_t  last_tsn,
uint32_t biggest_tsn_acked,
uint32_t biggest_newly_acked_tsn,
uint32_t this_sack_lowest_newack,
int  num_seg,
int  num_nr_seg,
int *  rto_ok 
)
static

◆ sctp_inject_old_unordered_data()

◆ sctp_kick_prsctp_reorder_queue()

◆ sctp_mark_non_revokable()

◆ sctp_place_control_in_stream()

◆ sctp_process_a_data_chunk()

static int sctp_process_a_data_chunk ( struct sctp_tcb stcb,
struct sctp_association asoc,
struct mbuf **  m,
int  offset,
int  chk_length,
struct sctp_nets net,
uint32_t high_tsn,
int *  abort_flag,
int *  break_flag,
int  last_chunk,
uint8_t  chk_type 
)
static

Definition at line 1690 of file sctp_indata.c.

References sctp_tcb::asoc, sctp_tmit_chunk::asoc, sctp_error_invalid_stream::cause, sctp_data_chunk::ch, sctp_idata_chunk::ch, sctp_chunkhdr::chunk_flags, sctp_association::cnt_msg_on_sb, sctp_association::cnt_on_all_streams, sctp_association::cnt_on_reasm_queue, sctp_error_cause::code, sctp_data_chunkrec::context, sctp_association::context, sctp_association::cumulative_tsn, sctp_tmit_chunk::data, sctp_queued_to_read::data, sctp_data_chunkrec::doing_fast_retransmit, sctp_data_chunk::dp, sctp_idata_chunk::dp, sctp_association::dup_tsns, sctp_queued_to_read::end_added, sctp_queued_to_read::first_frag_seen, sctp_idata::fsn, sctp_data_chunkrec::fsn, sctp_queued_to_read::fsn_included, sctp_association::highest_tsn_inside_map, sctp_association::highest_tsn_inside_nr_map, sctp_association::idata_supported, sctp_stream_in::inqueue, sctp_inpcb::last_abort_code, sctp_queued_to_read::last_frag_seen, sctp_stream_in::last_mid_delivered, sctp_error_cause::length, sctp_queued_to_read::length, sctp_stream_reset_list::list_of_streams, sctp_association::mapping_array, sctp_association::mapping_array_base_tsn, sctp_association::mapping_array_size, sctp_idata::mid, sctp_data_chunkrec::mid, sctp_queued_to_read::mid, sctp_association::my_rwnd, next, sctp_tmit_chunk::no_fr_allowed, sctp_association::nr_mapping_array, sctp_stream_reset_list::number_entries, sctp_association::numduptsns, sctp_association::pending_reply_queue, sctp_data::ppid, sctp_idata::ppid, sctp_data_chunkrec::ppid, sctp_idata::ppid_fsn, sctp_data_chunkrec::rcv_flags, sctp_tmit_chunk::rec, sctp_nets::ref_count, sctp_association::resetHead, sctp_abort_an_association(), sctp_add_to_readq(), sctp_alloc_a_chunk, sctp_alloc_a_readq, SCTP_BASE_SYSCTL, SCTP_BUF_LEN, SCTP_BUF_NEXT, SCTP_BUF_RESV_UF, sctp_build_readq_entry_mac, SCTP_CALC_TSN_TO_GAP, SCTP_CAUSE_INVALID_STREAM, SCTP_CAUSE_OUT_OF_RESC, SCTP_CAUSE_PROTOCOL_VIOLATION, SCTP_DATA, SCTP_DATA_FIRST_FRAG, SCTP_DATA_NOT_FRAG, SCTP_DATA_SACK_IMMEDIATELY, SCTP_DATA_UNORDERED, SCTP_DEBUG_INDATA1, SCTP_DEBUG_XXX, sctp_deliver_reasm_check(), SCTP_DIAG_INFO_LEN, sctp_tcb::sctp_ep, sctp_expand_mapping_array(), sctp_find_reasm_entry(), sctp_inpcb::sctp_flags, SCTP_FREE, SCTP_FROM_SCTP_INDATA, sctp_generate_cause(), sctp_generate_no_user_data_cause(), sctp_get_mbuf_for_msg(), SCTP_IDATA, SCTP_IS_TSN_PRESENT, SCTP_LOC_16, SCTP_LOC_17, SCTP_LOC_18, sctp_log_map(), sctp_log_strm_del_alt(), SCTP_LTRACE_CHK, SCTP_M_COPYM, sctp_m_freem, sctp_m_getptr(), SCTP_MAP_LOGGING_ENABLE, SCTP_MAP_PREPARE_SLIDE, SCTP_MAP_TSN_ENTERS, SCTP_MAPPING_ARRAY, sctp_mark_non_revokable(), SCTP_MAX_DUP_TSNS, SCTP_MBUF_ICOPY, SCTP_MBUF_LOGGING_ENABLE, SCTP_MID_EQ, SCTP_MID_GE, SCTP_PCB_FLAGS_SOCKET_ALLGONE, SCTP_PCB_FLAGS_SOCKET_GONE, sctp_queue_data_for_reasm(), sctp_queue_data_to_stream(), sctp_queue_op_err(), SCTP_READ_LOCK_NOT_HELD, sctp_reset_in_stream(), sctp_send_deferred_reset_response(), sctp_set_rwnd(), SCTP_SET_TSN_PRESENT, SCTP_SNPRINTF, SCTP_SO_NOT_LOCKED, sctp_tcb::sctp_socket, sctp_sorwakeup, SCTP_STAT_INCR, SCTP_STAT_INCR_COUNTER64, SCTP_STATE_CLOSED_SOCKET, SCTP_STR_LOG_FROM_EXPRS_DEL, SCTP_STR_LOG_FROM_MARK_TSN, SCTP_STR_LOGGING_ENABLE, SCTP_STREAM_RESET_RESULT_PERFORMED, SCTP_TCB_LOCK_ASSERT, SCTP_TSN_GE, SCTP_TSN_GT, SCTP_TSN_LOG_SIZE, SCTPDBG, sctp_association::send_sack, sctp_tmit_chunk::send_size, sctp_data::sid, sctp_idata::sid, sctp_data_chunkrec::sid, sctp_queued_to_read::sinfo_flags, sctp_queued_to_read::sinfo_stream, sctp_queued_to_read::sinfo_tsn, sctp_data::ssn, sctp_association::state, sctp_queued_to_read::stcb, sctp_association::streamincnt, sctp_association::strmin, sctp_queued_to_read::tail_mbuf, sctp_queued_to_read::top_fsn, sctp_data::tsn, sctp_idata::tsn, sctp_stream_reset_list::tsn, sctp_data_chunkrec::tsn, and sctp_tmit_chunk::whoTo.

Referenced by sctp_process_data().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ sctp_process_data()

int sctp_process_data ( struct mbuf **  mm,
int  iphlen,
int *  offset,
int  length,
struct sctp_inpcb inp,
struct sctp_tcb stcb,
struct sctp_nets net,
uint32_t high_tsn 
)

Definition at line 2649 of file sctp_indata.c.

References sctp_tcb::asoc, sctp_chunkhdr::chunk_length, sctp_chunkhdr::chunk_type, sctp_gen_error_cause::code, sctp_association::cumulative_tsn, sctp_association::data_pkts_seen, sctp_association::highest_tsn_inside_map, sctp_association::highest_tsn_inside_nr_map, sctp_association::idata_supported, sctp_inpcb::last_abort_code, sctp_association::last_data_chunk_from, sctp_gen_error_cause::length, sctp_association::overall_error_count, sctp_abort_an_association(), SCTP_ABORT_ASSOCIATION, SCTP_ASCONF, SCTP_ASCONF_ACK, SCTP_AUTHENTICATION, SCTP_BASE_SYSCTL, SCTP_BUF_LEN, SCTP_BUF_NEXT, SCTP_CAUSE_PROTOCOL_VIOLATION, SCTP_CAUSE_UNRECOG_CHUNK, SCTP_COOKIE_ACK, SCTP_COOKIE_ECHO, SCTP_DATA, SCTP_DIAG_INFO_LEN, SCTP_ECN_CWR, SCTP_ECN_ECHO, sctp_tcb::sctp_ep, SCTP_FORWARD_CUM_TSN, SCTP_FROM_SCTP_INDATA, sctp_generate_cause(), sctp_get_mbuf_for_msg(), SCTP_GET_STATE, SCTP_GETTIME_TIMEVAL, SCTP_HEARTBEAT_ACK, SCTP_HEARTBEAT_REQUEST, SCTP_IDATA, SCTP_INITIATION, SCTP_INITIATION_ACK, SCTP_LOC_21, SCTP_LOC_22, SCTP_LOC_23, SCTP_LOC_24, SCTP_M_COPYM, sctp_m_freem, sctp_m_getptr(), sctp_misc_ints(), SCTP_NR_SELECTIVE_ACK, SCTP_OPERATION_ERROR, SCTP_PACKET_DROPPED, sctp_process_a_data_chunk(), sctp_queue_op_err(), sctp_sack_check(), SCTP_SELECTIVE_ACK, sctp_send_packet_dropped(), sctp_set_rwnd(), SCTP_SHUTDOWN, SCTP_SHUTDOWN_ACK, SCTP_SHUTDOWN_COMPLETE, SCTP_SIZE32, SCTP_SNPRINTF, SCTP_SO_NOT_LOCKED, SCTP_STAT_INCR, SCTP_STATE_SHUTDOWN_SENT, SCTP_STREAM_RESET, SCTP_TCB_LOCK_ASSERT, SCTP_THRESHOLD_CLEAR, SCTP_THRESHOLD_LOGGING, SCTP_TSN_GT, sctp_association::send_sack, and sctp_association::time_last_rcvd.

Referenced by sctp_common_input_processing().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ sctp_process_segment_range()

static int sctp_process_segment_range ( struct sctp_tcb stcb,
struct sctp_tmit_chunk **  p_tp1,
uint32_t  last_tsn,
uint16_t  frag_strt,
uint16_t  frag_end,
int  nr_sacking,
int *  num_frs,
uint32_t biggest_newly_acked_tsn,
uint32_t this_sack_lowest_newack,
int *  rto_ok 
)
static

Definition at line 2942 of file sctp_indata.c.

References sctp_tcb::asoc, sctp_tmit_chunk::book_size, sctp_association::cc_functions, sctp_data_chunkrec::chunk_was_revoked, sctp_stream_out::chunks_on_queues, sctp_nets::cwnd, sctp_tmit_chunk::data, sctp_tmit_chunk::do_rtt, sctp_data_chunkrec::doing_fast_retransmit, sctp_nets::find_pseudo_cumack, sctp_nets::find_rtx_pseudo_cumack, sctp_nets::flight_size, sctp_nets::net_ack, sctp_nets::net_ack2, sctp_nets::new_pseudo_cumack, sctp_stream_out::outqueue, sctp_nets::pseudo_cumack, sctp_tmit_chunk::rec, sctp_nets::rto_needed, sctp_nets::rtx_pseudo_cumack, sctp_nets::saw_newack, SCTP_BASE_SYSCTL, sctp_calculate_rto(), SCTP_CWND_LOG_FROM_SACK, SCTP_CWND_LOGGING_ENABLE, sctp_cc_functions::sctp_cwnd_update_tsn_acknowledged, SCTP_DATAGRAM_MARKED, SCTP_DATAGRAM_NR_ACKED, SCTP_DATAGRAM_RESEND, SCTP_DATAGRAM_UNSENT, SCTP_FLIGHT_LOG_DOWN_GAP, SCTP_FLIGHT_LOGGING_ENABLE, sctp_flight_size_decrease, SCTP_FORWARD_TSN_SKIP, sctp_free_bufspace, sctp_log_cwnd(), sctp_log_sack(), SCTP_LOG_TSN_ACKED, sctp_m_freem, sctp_misc_ints(), SCTP_RTT_FROM_DATA, SCTP_SACK_LOGGING_ENABLE, SCTP_STREAM_RESET_PENDING, sctp_total_flight_decrease, SCTP_TSN_GT, sctp_ucount_decr, sctp_tmit_chunk::send_size, sctp_tmit_chunk::sent, sctp_association::sent_queue, sctp_association::sent_queue_retran_cnt, sctp_tmit_chunk::sent_rcv_time, sctp_data_chunkrec::sid, sctp_tmit_chunk::snd_count, sctp_stream_out::state, sctp_association::strmout, sctp_association::this_sack_highest_gap, sctp_nets::this_sack_highest_newack, sctp_association::trigger_reset, sctp_data_chunkrec::tsn, and sctp_tmit_chunk::whoTo.

Referenced by sctp_handle_segments().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ sctp_queue_data_for_reasm()

static void sctp_queue_data_for_reasm ( struct sctp_tcb stcb,
struct sctp_association asoc,
struct sctp_queued_to_read control,
struct sctp_tmit_chunk chk,
int  created_control,
int *  abort_flag,
uint32_t  tsn 
)
static

Definition at line 1365 of file sctp_indata.c.

References sctp_association::cnt_on_all_streams, sctp_association::cnt_on_reasm_queue, sctp_association::cumulative_tsn, sctp_tmit_chunk::data, sctp_queued_to_read::data, sctp_queued_to_read::end_added, sctp_queued_to_read::first_frag_seen, sctp_data_chunkrec::fsn, sctp_queued_to_read::fsn_included, sctp_association::idata_supported, sctp_queued_to_read::last_frag_seen, sctp_queued_to_read::length, sctp_queued_to_read::on_read_q, sctp_stream_in::pd_api_started, sctp_queued_to_read::pdapi_started, sctp_data_chunkrec::ppid, sctp_data_chunkrec::rcv_flags, sctp_queued_to_read::reasm, sctp_tmit_chunk::rec, sctp_abort_in_reasm(), sctp_add_chk_to_control(), sctp_add_to_readq(), sctp_clean_up_control(), SCTP_DATA_FIRST_FRAG, SCTP_DATA_LAST_FRAG, SCTP_DATA_UNORDERED, SCTP_DEBUG_XXX, sctp_tcb::sctp_ep, sctp_free_a_chunk, SCTP_FROM_SCTP_INDATA, sctp_inject_old_unordered_data(), SCTP_LOC_10, SCTP_LOC_11, SCTP_LOC_12, SCTP_LOC_13, SCTP_LOC_14, SCTP_LOC_15, SCTP_LOC_6, SCTP_LOC_7, SCTP_LOC_8, SCTP_LOC_9, sctp_mark_non_revokable(), sctp_place_control_in_stream(), SCTP_READ_LOCK_NOT_HELD, sctp_setup_tail_pointer(), SCTP_SO_NOT_LOCKED, sctp_tcb::sctp_socket, SCTP_TSN_GE, SCTP_TSN_GT, sctp_ucount_incr, sctp_wakeup_the_read_socket(), SCTPDBG, sctp_tmit_chunk::send_size, sctp_queued_to_read::sinfo_flags, sctp_queued_to_read::sinfo_ppid, sctp_queued_to_read::sinfo_stream, sctp_queued_to_read::sinfo_tsn, sctp_association::size_on_all_streams, sctp_association::size_on_reasm_queue, sctp_association::strmin, sctp_queued_to_read::top_fsn, and sctp_data_chunkrec::tsn.

Referenced by sctp_process_a_data_chunk().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ sctp_queue_data_to_stream()

◆ sctp_reset_a_control()

static void sctp_reset_a_control ( struct sctp_queued_to_read control,
struct sctp_inpcb inp,
uint32_t  tsn 
)
static

Definition at line 753 of file sctp_indata.c.

References sctp_queued_to_read::fsn_included, next, sctp_queued_to_read::on_read_q, and sctp_inpcb::read_queue.

Referenced by sctp_flush_reassm_for_str_seq().

Here is the caller graph for this function:

◆ sctp_sack_check()

◆ sctp_set_rwnd()

void sctp_set_rwnd ( struct sctp_tcb stcb,
struct sctp_association asoc 
)

Definition at line 72 of file sctp_indata.c.

References sctp_association::my_rwnd, and sctp_calc_rwnd().

Referenced by sctp_process_a_data_chunk(), sctp_process_data(), and sctp_send_sack().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ sctp_setup_tail_pointer()

◆ sctp_slide_mapping_arrays()

◆ sctp_strike_gap_ack_chunks()

static void sctp_strike_gap_ack_chunks ( struct sctp_tcb stcb,
struct sctp_association asoc,
uint32_t  biggest_tsn_acked,
uint32_t  biggest_tsn_newly_acked,
uint32_t  this_sack_lowest_newack,
int  accum_moved 
)
static

Definition at line 3302 of file sctp_indata.c.

References sctp_tcb::asoc, sctp_tmit_chunk::asoc, sctp_tmit_chunk::book_size, sctp_association::cc_functions, sctp_tmit_chunk::data, sctp_tmit_chunk::do_rtt, sctp_data_chunkrec::doing_fast_retransmit, sctp_association::fast_retran_loss_recovery, sctp_data_chunkrec::fast_retran_tsn, sctp_nets::find_pseudo_cumack, sctp_nets::find_rtx_pseudo_cumack, sctp_tmit_chunk::flags, sctp_nets::flight_size, sctp_data_chunkrec::fwd_tsn_cnt, sctp_nets::net_ack, sctp_association::nets, sctp_tmit_chunk::no_fr_allowed, sctp_association::numnets, sctp_association::peers_rwnd, PR_SCTP_RTX_ENABLED, PR_SCTP_TTL_ENABLED, sctp_association::prsctp_supported, sctp_tmit_chunk::rec, sctp_nets::ref_count, sctp_nets::rto_needed, sctp_nets::saw_newack, SCTP_BASE_SYSCTL, sctp_association::sctp_cmt_on_off, sctp_association::sctp_cmt_pf, sctp_cc_functions::sctp_cwnd_update_tsn_acknowledged, SCTP_DATAGRAM_ACKED, SCTP_DATAGRAM_RESEND, SCTP_DATAGRAM_UNSENT, sctp_find_alternate_net(), SCTP_FLIGHT_LOG_DOWN_RSND, SCTP_FLIGHT_LOGGING_ENABLE, sctp_flight_size_decrease, SCTP_FORWARD_TSN_SKIP, SCTP_FR_LOG_CHECK_STRIKE, SCTP_FR_LOG_STRIKE_CHUNK, SCTP_FR_LOGGING_ENABLE, SCTP_FR_MARKED, sctp_free_remote_addr, SCTP_GETTIME_TIMEVAL, SCTP_INCREASE_PEER_RWND, sctp_log_fr(), sctp_log_rwnd(), SCTP_LOG_RWND_ENABLE, sctp_misc_ints(), sctp_release_pr_sctp_chunk(), SCTP_SO_NOT_LOCKED, SCTP_STAT_INCR, sctp_total_flight_decrease, SCTP_TSN_GE, SCTP_TSN_GT, sctp_ucount_incr, sctp_association::send_queue, sctp_tmit_chunk::send_size, sctp_association::sending_seq, sctp_tmit_chunk::sent, sctp_association::sent_queue, sctp_association::sent_queue_retran_cnt, sctp_tmit_chunk::snd_count, sctp_association::this_sack_highest_gap, sctp_nets::this_sack_highest_newack, sctp_data_chunkrec::timetodrop, sctp_data_chunkrec::tsn, and sctp_tmit_chunk::whoTo.

Referenced by sctp_handle_sack().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ sctp_try_advance_peer_ack_point()

◆ sctp_update_acked()

void sctp_update_acked ( struct sctp_tcb stcb,
struct sctp_shutdown_chunk cp,
int *  abort_flag 
)

Definition at line 5222 of file sctp_indata.c.

References sctp_tcb::asoc, sctp_shutdown_chunk::cumulative_tsn_ack, sctp_association::peers_rwnd, sctp_express_handle_sack(), and sctp_association::total_flight.

Referenced by sctp_handle_shutdown().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ sctp_window_probe_recovery()

Variable Documentation

◆ sctp_map_lookup_tab

const int8_t sctp_map_lookup_tab[256]
static

Definition at line 2359 of file sctp_indata.c.

Referenced by sctp_slide_mapping_arrays().