freebsd-src/sys/netinet
Matthew Dillon fa55172bc0 Guido reported an interesting bug where an FTP connection between a
Windows 2000 box and a FreeBSD box could stall.  The problem turned out
to be a timestamp reply bug in the W2K TCP stack.  FreeBSD sends a
timestamp with the SYN, W2K returns a timestamp of 0 in the SYN+ACK
causing FreeBSD to calculate an insane SRTT and RTT, resulting in
a maximal retransmit timeout (60 seconds).  If there is any packet
loss on the connection for the first six or so packets the retransmit
case may be hit (the window will still be too small for fast-retransmit),
causing a 60+ second pause.  The W2K box gives up and closes the
connection.

This commit works around the W2K bug.

15:04:59.374588 FREEBSD.20 > W2K.1036: S 1420807004:1420807004(0) win 65535 <mss 1460,nop,wscale 2,nop,nop,timestamp 188297344 0> (DF) [tos 0x8]
15:04:59.377558 W2K.1036 > FREEBSD.20: S 4134611565:4134611565(0) ack 1420807005 win 17520 <mss 1460,nop,wscale 0,nop,nop,timestamp 0 0> (DF)

Bug reported by: Guido van Rooij <guido@gvr.org>
2002-09-17 22:21:37 +00:00
..
libalias Don't forget to recalculate the IP checksum of the original 2002-07-23 00:16:19 +00:00
accf_data.c Remove so*_locked(), which were backed out by mistake. 2002-06-18 07:42:02 +00:00
accf_http.c Remove so*_locked(), which were backed out by mistake. 2002-06-18 07:42:02 +00:00
icmp6.h Revised MLD-related definitions 2002-05-06 16:28:25 +00:00
icmp_var.h Remove __P. 2002-03-19 21:25:46 +00:00
if_atm.c - Change the newly turned INVARIANTS #ifdef blocks (they were changed from 2002-05-21 18:52:24 +00:00
if_atm.h Remove __P. 2002-03-19 21:25:46 +00:00
if_ether.c Introduce support for Mandatory Access Control and extensible 2002-07-31 16:45:16 +00:00
if_ether.h Fixed some style bugs in the removal of __P(()). Continuation lines 2002-03-24 10:19:10 +00:00
igmp.c Introduce support for Mandatory Access Control and extensible 2002-07-31 16:46:56 +00:00
igmp.h
igmp_var.h Remove __P. 2002-03-19 21:25:46 +00:00
in.c Lock up inpcb. 2002-06-10 20:05:46 +00:00
in.h Add in_hosteq() and in_nullhost() macros to make life of developers 2002-09-04 09:55:50 +00:00
in_cksum.c
in_gif.c just merged cosmetic changes from KAME to ease sync between KAME and FreeBSD. 2002-04-19 04:46:24 +00:00
in_gif.h Remove __P. 2002-03-19 21:25:46 +00:00
in_pcb.c Create new functions in_sockaddr(), in6_sockaddr(), and 2002-08-21 11:57:12 +00:00
in_pcb.h Fixed namespace pollution in uma changes: 2002-09-05 19:48:52 +00:00
in_proto.c Add a new gre(4) driver, which could be used to create GRE (RFC1701) 2002-09-06 17:12:50 +00:00
in_rmx.c Remove __P. 2002-03-19 21:25:46 +00:00
in_systm.h Remove __P. 2002-03-19 21:25:46 +00:00
in_var.h Fixed some style bugs in the removal of __P(()). Continuation lines 2002-03-24 10:19:10 +00:00
ip.h o Add IPOPT_ESO for the 'Extended Security' IP option (RFC1108) 2001-12-14 19:37:32 +00:00
ip6.h
ip_divert.c Introduce support for Mandatory Access Control and extensible 2002-07-31 16:42:47 +00:00
ip_dummynet.c Kernel support for a dummynet option: 2002-08-15 16:53:43 +00:00
ip_dummynet.h Kernel support for a dummynet option: 2002-08-15 16:53:43 +00:00
ip_ecn.c initialize local variable explicitly 2002-04-11 02:14:21 +00:00
ip_ecn.h Remove __P. 2002-03-19 21:25:46 +00:00
ip_encap.c just merged cosmetic changes from KAME to ease sync between KAME and FreeBSD. 2002-04-19 04:46:24 +00:00
ip_encap.h Remove __P. 2002-03-19 21:25:46 +00:00
ip_flow.c s/FREE/free/ 2001-11-04 17:35:31 +00:00
ip_flow.h
ip_fw.c Remove (almost all) global variables that were used to hold 2002-06-22 11:51:02 +00:00
ip_fw.h One bugfix and one new feature. 2002-08-10 04:37:32 +00:00
ip_fw2.c Lock the sysctl(8) knobs that turn ip{,6}fw(8) firewalling and 2002-08-25 03:50:29 +00:00
ip_gre.c Remove __RCSID(). 2002-09-17 11:31:41 +00:00
ip_gre.h Add a new gre(4) driver, which could be used to create GRE (RFC1701) 2002-09-06 17:12:50 +00:00
ip_icmp.c Introduce support for Mandatory Access Control and extensible 2002-08-01 03:53:04 +00:00
ip_icmp.h Remove __P. 2002-03-19 21:25:46 +00:00
ip_id.c Remove __P. 2002-03-19 21:25:46 +00:00
ip_input.c Explicitly clear M_FRAG flag on a mbuf with the last fragment to unbreak 2002-09-17 11:20:02 +00:00
ip_mroute.c Since from now on encap_input() also catches IPPROTO_MOBILE and IPPROTO_GRE 2002-09-09 09:36:47 +00:00
ip_mroute.h Remove __P. 2002-03-19 21:25:46 +00:00
ip_output.c In rare cases when there is no room for ip options ip_insertoptions() 2002-09-17 11:13:04 +00:00
ip_var.h Perform a nested include of _label.h if #ifdef _KERNEL. This will 2002-08-15 14:34:02 +00:00
ipprotosw.h KSE Milestone 2 2001-09-12 08:38:13 +00:00
raw_ip.c Rename mac_check_socket_receive() to mac_check_socket_deliver() so that 2002-08-15 18:51:27 +00:00
tcp.h
tcp_debug.c It's now sufficient to rely on a nested include of _label.h to make sure 2002-08-15 14:34:45 +00:00
tcp_debug.h make the strings for tcptimers, tanames and prurequests const to silence 2002-08-16 09:07:59 +00:00
tcp_fsm.h WARNS=n and lint(1) silencer. Declare an array of (const) strings 2002-02-03 11:57:32 +00:00
tcp_input.c Guido reported an interesting bug where an FTP connection between a 2002-09-17 22:21:37 +00:00
tcp_output.c Tempary fix for inet6. The final fix is to change in6_pcbnotify to take pcbinfo instead 2002-09-17 03:19:43 +00:00
tcp_reass.c Guido reported an interesting bug where an FTP connection between a 2002-09-17 22:21:37 +00:00
tcp_seq.h Move initialization of snd_recover into tcp_sendseqinit(). 2001-11-21 18:45:51 +00:00
tcp_subr.c Correct bug in t_bw_rtttime rollover, #undef USERTT 2002-08-24 17:22:44 +00:00
tcp_syncache.c Handle PMTU discovery in syn-ack packets slightly differently; 2002-08-05 22:34:15 +00:00
tcp_timer.c Include <sys/mutex.h> and its prerequisite <sys/lock.h> instead of depending 2002-09-05 15:33:30 +00:00
tcp_timer.h make the strings for tcptimers, tanames and prurequests const to silence 2002-08-16 09:07:59 +00:00
tcp_timewait.c Correct bug in t_bw_rtttime rollover, #undef USERTT 2002-08-24 17:22:44 +00:00
tcp_usrreq.c Replace (ab)uses of "NULL" where "0" is really meant. 2002-08-22 21:24:01 +00:00
tcp_var.h Implement TCP bandwidth delay product window limiting, similar to (but 2002-08-17 18:26:02 +00:00
tcpip.h
udp.h
udp_usrreq.c Code formatting sync to trustedbsd_mac: don't perform an assignment 2002-08-15 22:04:31 +00:00
udp_var.h Notify functions can destroy the pcb, so they have to return an 2002-06-14 08:35:21 +00:00