Wind River Support Network


LIN6-6682 : wrl 4.3 : SCTP : RTO is always set to RTO initial after many DATA packets have recv SACK

Created: Feb 12, 2014    Updated: Dec 3, 2018
Resolved Date: Mar 16, 2014
Previous ID: LIN5-17993
Found In Version: 6.0
Fix Version:
Severity: Severe
Applicable for: Wind River Linux 6
Component/s: Networking


After association is up and many data packets are exchanged RTO used is RTO.Initial.
Attached is the pcap of the issue.
In this association we have used,
RTO.Max = 10,000 milli sec
RTO.Min = 500 milli sec
RTO.Initial = 5,000 milli sec

Before the sending packet 21, path to destination is broken, Its getting re-transmitted to secondary path after 5 seconds with is RTO.Initial. If we calculate the RTO, it should come around 500 milli sec. 

Steps to Reproduce

We further continued the analysis and found the issue in the code.
In the function sctp_packet_transmit, variable chunk->resent is getting set for the first when the chunk is sent, instead it should be set for first re-transmission.
Below is the snippet of the code.
File: output.c
Function : sctp_packet_transmit
  if (!tp->rto_pending) {
                    chunk->rtt_in_progress = 1;
                    tp->rto_pending = 1;
                chunk->resent = 1;

If chunk->resent variable is set, In function sctp_check_transmitted, sctp_transport_update_rto function is never called.

Below is the code snippet. 
File: outqueue.c
function: sctp_check_transmitted
if (!tchunk->tsn_gap_acked &&
                    !tchunk->resent &&
                    tchunk->rtt_in_progress) {
                    tchunk->rtt_in_progress = 0;
                    rtt = jiffies - tchunk->sent_at;

Other Downloads

Live chat