aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/tcp_input.c
diff options
context:
space:
mode:
authorIlpo Järvinen <ilpo.jarvinen@helsinki.fi>2007-02-22 02:04:11 -0500
committerDavid S. Miller <davem@sunset.davemloft.net>2007-04-26 01:23:06 -0400
commit6408d206c7484615ecae54bf6474a02c94e9e862 (patch)
tree43dfb94f6da8445484d987aced10dd8d304bdc4e /net/ipv4/tcp_input.c
parent7b0eb22b1d3b049306813a4aaa52966650f7491c (diff)
[TCP] FRTO: Ignore some uninteresting ACKs
Handles RFC4138 shortcoming (in step 2); it should also have case c) which ignores ACKs that are not duplicates nor advance window (opposite dir data, winupdate). Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@helsinki.fi> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/tcp_input.c')
-rw-r--r--net/ipv4/tcp_input.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index e806839acdd9..e990d562f5e3 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -2495,9 +2495,9 @@ static void tcp_conservative_spur_to_response(struct tcp_sock *tp)
2495 2495
2496/* F-RTO spurious RTO detection algorithm (RFC4138) 2496/* F-RTO spurious RTO detection algorithm (RFC4138)
2497 * 2497 *
2498 * F-RTO affects during two new ACKs following RTO. State (ACK number) is kept 2498 * F-RTO affects during two new ACKs following RTO (well, almost, see inline
2499 * in frto_counter. When ACK advances window (but not to or beyond highest 2499 * comments). State (ACK number) is kept in frto_counter. When ACK advances
2500 * sequence sent before RTO): 2500 * window (but not to or beyond highest sequence sent before RTO):
2501 * On First ACK, send two new segments out. 2501 * On First ACK, send two new segments out.
2502 * On Second ACK, RTO was likely spurious. Do spurious response (response 2502 * On Second ACK, RTO was likely spurious. Do spurious response (response
2503 * algorithm is not part of the F-RTO detection algorithm 2503 * algorithm is not part of the F-RTO detection algorithm
@@ -2527,6 +2527,13 @@ static void tcp_process_frto(struct sock *sk, u32 prior_snd_una, int flag)
2527 if (flag&FLAG_DATA_ACKED) 2527 if (flag&FLAG_DATA_ACKED)
2528 inet_csk(sk)->icsk_retransmits = 0; 2528 inet_csk(sk)->icsk_retransmits = 0;
2529 2529
2530 /* RFC4138 shortcoming in step 2; should also have case c): ACK isn't
2531 * duplicate nor advances window, e.g., opposite dir data, winupdate
2532 */
2533 if ((tp->snd_una == prior_snd_una) && (flag&FLAG_NOT_DUP) &&
2534 !(flag&FLAG_FORWARD_PROGRESS))
2535 return;
2536
2530 if (tp->snd_una == prior_snd_una || 2537 if (tp->snd_una == prior_snd_una ||
2531 !before(tp->snd_una, tp->frto_highmark)) { 2538 !before(tp->snd_una, tp->frto_highmark)) {
2532 tcp_enter_frto_loss(sk); 2539 tcp_enter_frto_loss(sk);