linux/net/ipv4
Ilpo Järvinen 46d0de4ed9 [TCP] FRTO: Entry is allowed only during (New)Reno like recovery
This interpretation comes from RFC4138:
    "If the sender implements some loss recovery algorithm other
     than Reno or NewReno [FHG04], the F-RTO algorithm SHOULD
     NOT be entered when earlier fast recovery is underway."

I think the RFC means to say (especially in the light of
Appendix B) that ...recovery is underway (not just fast recovery)
or was underway when it was interrupted by an earlier (F-)RTO
that hasn't yet been resolved (snd_una has not advanced enough).
Thus, my interpretation is that whenever TCP has ever
retransmitted other than head, basic version cannot be used
because then the order assumptions which are used as FRTO basis
do not hold.

NewReno has only the head segment retransmitted at a time.
Therefore, walk up to the segment that has not been SACKed, if
that segment is not retransmitted nor anything before it, we know
for sure, that nothing after the non-SACKed segment should be
either. This assumption is valid because TCPCB_EVER_RETRANS does
not leave holes but each non-SACKed segment is rexmitted
in-order.

Check for retrans_out > 1 avoids more expensive walk through the
skb list, as we can know the result beforehand: F-RTO will not be
allowed.

SACKed skb can turn into non-SACked only in the extremely rare
case of SACK reneging, in this case we might fail to detect
retransmissions if there were them for any other than head. To
get rid of that feature, whole rexmit queue would have to be
walked (always) or FRTO should be prevented when SACK reneging
happens. Of course RTO should still trigger after reneging which
makes this issue even less likely to show up. And as long as the
response is as conservative as it's now, nothing bad happens even
then.

Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@helsinki.fi>
Signed-off-by: David S. Miller <davem@davemloft.net>
2007-04-25 22:23:12 -07:00
..
ipvs [PATCH] sysctl: remove insert_at_head from register_sysctl 2007-02-14 08:09:59 -08:00
netfilter [NETFILTER] arp_tables: Fix unaligned accesses. 2007-04-13 16:37:54 -07:00
af_inet.c [NET] IPV4: Fix whitespace errors. 2007-02-10 23:19:39 -08:00
ah4.c [NET] IPV4: Fix whitespace errors. 2007-02-10 23:19:39 -08:00
arp.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
cipso_ipv4.c [NetLabel]: parse the CIPSO ranged tag on incoming packets 2007-03-12 14:38:02 -07:00
datagram.c [NET] IPV4: Fix whitespace errors. 2007-02-10 23:19:39 -08:00
devinet.c [IPV4]: Fix rtm_to_ifaddr() error handling. 2007-03-09 13:43:24 -08:00
esp4.c [NET] IPV4: Fix whitespace errors. 2007-02-10 23:19:39 -08:00
fib_frontend.c [NETLINK]: Infinite recursion in netlink. 2007-04-25 13:07:28 -07:00
fib_hash.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
fib_lookup.h [IPV4]: net/ipv4/fib annotations 2006-09-28 18:02:23 -07:00
fib_rules.c [NET]: Fix fib_rules compatibility breakage 2007-03-25 18:48:00 -07:00
fib_semantics.c [IPv4] fib: Fix out of bound access of fib_props[] 2007-03-25 18:48:03 -07:00
fib_trie.c [IPV4] fib_trie: Document locking. 2007-03-26 14:22:22 -07:00
icmp.c [NET] IPV4: Fix whitespace errors. 2007-02-10 23:19:39 -08:00
igmp.c [IPV4]: Fix warning in ip_mc_rejoin_group. 2007-03-12 17:02:37 -07:00
inet_connection_sock.c [NET] IPV4: Fix whitespace errors. 2007-02-10 23:19:39 -08:00
inet_diag.c [NET] IPV4: Fix whitespace errors. 2007-02-10 23:19:39 -08:00
inet_hashtables.c [NET] IPV4: Fix whitespace errors. 2007-02-10 23:19:39 -08:00
inet_timewait_sock.c [NET]: change layout of ehash table 2007-02-08 14:16:46 -08:00
inetpeer.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
ip_forward.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
ip_fragment.c [NET] IPV4: Fix whitespace errors. 2007-02-10 23:19:39 -08:00
ip_gre.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
ip_input.c [NET] IPV4: Fix whitespace errors. 2007-02-10 23:19:39 -08:00
ip_options.c [NET] IPV4: Fix whitespace errors. 2007-02-10 23:19:39 -08:00
ip_output.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
ip_sockglue.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
ipcomp.c [NET] IPV4: Fix whitespace errors. 2007-02-10 23:19:39 -08:00
ipconfig.c [PATCH] mark struct file_operations const 7 2007-02-12 09:48:46 -08:00
ipip.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
ipmr.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
Kconfig [IPV4]: Correct links in net/ipv4/Kconfig 2007-02-26 11:42:51 -08:00
Makefile [NET]: Supporting UDP-Lite (RFC 3828) in Linux 2006-12-02 21:22:46 -08:00
multipath.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
multipath_drr.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
multipath_random.c [IPV4]: Use random32() in net/ipv4/multipath 2007-02-26 11:43:00 -08:00
multipath_rr.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
multipath_wrandom.c [IPV4]: Use random32() in net/ipv4/multipath 2007-02-26 11:43:00 -08:00
netfilter.c [NET] IPV4: Fix whitespace errors. 2007-02-10 23:19:39 -08:00
proc.c [PATCH] mark struct file_operations const 7 2007-02-12 09:48:46 -08:00
protocol.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
raw.c [PATCH] mark struct file_operations const 7 2007-02-12 09:48:46 -08:00
route.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
syncookies.c [NET] IPV4: Fix whitespace errors. 2007-02-10 23:19:39 -08:00
sysctl_net_ipv4.c [NET] IPV4: Fix whitespace errors. 2007-02-10 23:19:39 -08:00
tcp.c [TCP]: Fix tcp_mem[] initialization. 2007-03-16 15:04:03 -07:00
tcp_bic.c [TCP] tcp_bic: use BUILD_BUG_ON 2006-09-22 15:18:04 -07:00
tcp_cong.c [TCP]: Congestion control initialization. 2007-04-23 22:32:11 -07:00
tcp_cubic.c [TCP]: Use read mostly for CUBIC parameters. 2007-02-12 13:15:20 -08:00
tcp_diag.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
tcp_highspeed.c [NET] IPV4: Fix whitespace errors. 2007-02-10 23:19:39 -08:00
tcp_htcp.c [TCP]: cleanup of htcp (resend) 2007-02-12 13:34:03 -08:00
tcp_hybla.c [TCP] Congestion control (modulo lp, bic): use BUILD_BUG_ON 2006-09-22 15:18:13 -07:00
tcp_input.c [TCP] FRTO: Entry is allowed only during (New)Reno like recovery 2007-04-25 22:23:12 -07:00
tcp_ipv4.c [NET] IPV4: Fix whitespace errors. 2007-02-10 23:19:39 -08:00
tcp_lp.c [TCP] tcp-lp: prevent chance for oops 2006-09-28 18:03:07 -07:00
tcp_minisocks.c [TCP]: Fix minisock tcp_create_openreq_child() typo. 2007-02-28 11:05:56 -08:00
tcp_output.c [TCP]: slow_start_after_idle should influence cwnd validation too 2007-04-09 13:31:15 -07:00
tcp_probe.c [PATCH] mark struct file_operations const 7 2007-02-12 09:48:46 -08:00
tcp_scalable.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
tcp_timer.c [NET] IPV4: Fix whitespace errors. 2007-02-10 23:19:39 -08:00
tcp_vegas.c [NET] IPV4: Fix whitespace errors. 2007-02-10 23:19:39 -08:00
tcp_veno.c [TCP] Congestion control (modulo lp, bic): use BUILD_BUG_ON 2006-09-22 15:18:13 -07:00
tcp_westwood.c [NET] IPV4: Fix whitespace errors. 2007-02-10 23:19:39 -08:00
tunnel4.c [IPSEC]: Changing API of xfrm4_tunnel_register. 2007-02-13 12:54:47 -08:00
udp.c [UDP]: Reread uh pointer after pskb_trim 2007-03-07 16:08:04 -08:00
udp_impl.h [NET] IPV4: Fix whitespace errors. 2007-02-10 23:19:39 -08:00
udplite.c [NET]: Possible cleanups. 2006-12-02 21:31:51 -08:00
xfrm4_input.c [IPSEC]: Changing API of xfrm4_tunnel_register. 2007-02-13 12:54:47 -08:00
xfrm4_mode_beet.c [XFRM]: beet: fix pseudo header length value 2007-04-23 22:39:02 -07:00
xfrm4_mode_transport.c [IPSEC]: output mode to take an xfrm state as input param 2006-09-22 15:18:48 -07:00
xfrm4_mode_tunnel.c [XFRM_TUNNEL]: Reload header pointer after pskb_may_pull/pskb_expand_head 2007-02-26 11:43:01 -08:00
xfrm4_output.c [NET] IPV4: Fix whitespace errors. 2007-02-10 23:19:39 -08:00
xfrm4_policy.c [XFRM]: Fix oops in xfrm4_dst_destroy() 2007-02-26 12:10:32 -08:00
xfrm4_state.c [IPSEC]: exporting xfrm_state_afinfo 2007-02-08 12:39:00 -08:00
xfrm4_tunnel.c [IPSEC]: Changing API of xfrm4_tunnel_register. 2007-02-13 12:54:47 -08:00