All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrei Pelinescu-Onciul <andrei@iptel.org>
To: linux-sctp@vger.kernel.org
Subject: [PATCH] sctp: on T3_RTX retransmit all the in-flight chunks
Date: Mon, 23 Nov 2009 13:39:18 +0000	[thread overview]
Message-ID: <20091123133916.GL10897@shell.iptel.org> (raw)

When retransmitting due to T3 timeout, retransmit all the
in-flight chunks for the corresponding  transport/path, including
chunks sent less then 1 rto ago.
This is the correct behaviour according to rfc4960 section 6.3.3
E3 and
"Note: Any DATA chunks that were sent to the address for which the
 T3-rtx timer expired but did not fit in one MTU (rule E3 above)
 should be marked for retransmission and sent as soon as cwnd
 allows (normally, when a SACK arrives). ".

This fixes problems when more then one path is present and the T3
retransmission of the first chunk that timeouts stops the T3 timer
for the initial active path, leaving all the other in-flight
chunks waiting forever or until a new chunk is transmitted on the
same path and timeouts (and this will happen only if the cwnd
allows sending new chunks, but since cwnd was dropped to MTU by
the timeout => it will wait until the first heartbeat).

Example: 10 packets in flight, sent at 0.1 s intervals on the
primary path. The primary path is down and the first packet
timeouts. The first packet is retransmitted on another path, the
T3 timer for the primary path is stopped and cwnd is set to MTU.
All the other 9 in-flight packets will not be retransmitted
(unless more new packets are sent on the primary path which depends
on cwnd allowing it, and even in this case the 9 packets will be
retransmitted only after a new packet timeouts which even in the
best case would be more then RTO).

This commit reverts d0ce92910bc04e107b2f3f2048f07e94f570035d.

Signed-off-by: Andrei Pelinescu-Onciul <andrei@iptel.org>
---
 net/sctp/outqueue.c |   10 ----------
 1 files changed, 0 insertions(+), 10 deletions(-)

diff --git a/net/sctp/outqueue.c b/net/sctp/outqueue.c
index d765fc5..746f06c 100644
--- a/net/sctp/outqueue.c
+++ b/net/sctp/outqueue.c
@@ -422,16 +422,6 @@ void sctp_retransmit_mark(struct sctp_outq *q,
 		if ((reason = SCTP_RTXR_FAST_RTX  &&
 			    (chunk->fast_retransmit = SCTP_NEED_FRTX)) ||
 		    (reason != SCTP_RTXR_FAST_RTX  && !chunk->tsn_gap_acked)) {
-			/* If this chunk was sent less then 1 rto ago, do not
-			 * retransmit this chunk, but give the peer time
-			 * to acknowlege it.  Do this only when
-			 * retransmitting due to T3 timeout.
-			 */
-			if (reason = SCTP_RTXR_T3_RTX &&
-			    time_before(jiffies, chunk->sent_at +
-						 transport->last_rto))
-				continue;
-
 			/* RFC 2960 6.2.1 Processing a Received SACK
 			 *
 			 * C) Any time a DATA chunk is marked for
-- 
1.6.5.2


             reply	other threads:[~2009-11-23 13:39 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-11-23 13:39 Andrei Pelinescu-Onciul [this message]
2009-11-23 16:50 ` [PATCH] sctp: on T3_RTX retransmit all the in-flight chunks Vlad Yasevich
2009-11-23 17:26 ` Andrei Pelinescu-Onciul
2009-11-23 19:33 Vlad Yasevich
2009-11-23 19:33 ` Vlad Yasevich
2009-11-29  8:15 ` David Miller
2009-11-29  8:15   ` David Miller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20091123133916.GL10897@shell.iptel.org \
    --to=andrei@iptel.org \
    --cc=linux-sctp@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.