freebsd-dev/sys/netinet
Gleb Smirnoff ef341ee1e3 When we receive an ICMP unreach need fragmentation datagram, we take
proposed MTU value from it and update the TCP host cache. Then
tcp_mss_update() is called on the corresponding tcpcb. It finds the
just allocated entry in the TCP host cache and updates MSS on the
tcpcb. And then we do a fast retransmit of what we have in the tcp
send buffer.

This sequence gets broken if the TCP host cache is exausted. In this
case allocation fails, and later called tcp_mss_update() finds nothing
in cache. The fast retransmit is done with not reduced MSS and is
immidiately replied by remote host with new ICMP datagrams and the
cycle repeats. This ping-pong can go up to wirespeed.

To fix this:
- tcp_mss_update() gets new parameter - mtuoffer, that is like
  offer, but needs to have min_protoh subtracted.
- tcp_mtudisc() as notification method renamed to tcp_mtudisc_notify().
- tcp_mtudisc() now accepts not a useless error argument, but proposed
  MTU value, that is passed to tcp_mss_update() as mtuoffer.

Reported by:	az
Reported by:	Andrey Zonov <andrey zonov.org>
Reviewed by:	andre (previous version of patch)
2012-04-16 13:49:03 +00:00
..
cc Staticize malloc types. 2011-04-13 11:28:46 +00:00
ipfw Don't check malloc(M_WAITOK) results. 2012-03-31 11:20:48 +00:00
khelp Use the full and proper company name for Swinburne University of Technology 2011-04-12 08:13:18 +00:00
libalias Mark all SYSCTL_NODEs static that have no corresponding SYSCTL_DECLs. 2011-11-07 15:43:11 +00:00
accf_data.c
accf_dns.c
accf_http.c Mark all SYSCTL_NODEs static that have no corresponding SYSCTL_DECLs. 2011-11-07 15:43:11 +00:00
cc.h Use the full and proper company name for Swinburne University of Technology 2011-04-12 08:13:18 +00:00
icmp6.h Correct typo in the RFC number for the constants based on IANA assignments 2012-03-04 18:47:20 +00:00
icmp_var.h
if_atm.c Bring back (most of) NATM to avoid further bitrot after r186119. 2010-12-15 22:58:45 +00:00
if_atm.h
if_ether.c Clean up some #endif comments removing from short sections. Add #endif 2012-01-22 02:13:19 +00:00
if_ether.h Move arprequest() declaration to if_ether.h. 2012-01-08 13:34:00 +00:00
igmp_var.h
igmp.c Convert all users of IF_ADDR_LOCK to use new locking macros that specify 2012-01-05 19:00:36 +00:00
igmp.h
in_cksum.c
in_debug.c Remove last remnants of classful addressing: 2011-10-15 16:28:06 +00:00
in_gif.c Update packet filter (pf) code to OpenBSD 4.5. 2011-06-28 11:57:25 +00:00
in_gif.h
in_mcast.c Remove unused variable. 2012-01-24 14:27:14 +00:00
in_pcb.c Clean up some #endif comments removing from short sections. Add #endif 2012-01-22 02:13:19 +00:00
in_pcb.h Hide a few declarations from userland (including `struct inpcbgroup'). This 2012-03-17 21:51:39 +00:00
in_pcbgroup.c Implement a CPU-affine TCP and UDP connection lookup data structure, 2011-06-06 12:55:02 +00:00
in_proto.c Bunch of fixes to pfsync(4) module load/unload: 2012-01-09 08:50:22 +00:00
in_rmx.c After some off-list discussion, revert a number of changes to the 2010-11-22 19:32:54 +00:00
in_systm.h
in_var.h Provide IA_MASKSIN() macro similar to IA_SIN() and IA_DSTSIN(). 2012-01-08 17:20:29 +00:00
in.c M_DONTWAIT is a flag from historical mbuf(9) 2012-04-10 06:52:39 +00:00
in.h Add support for IPv4 /31 prefixes, as described in RFC3021. 2011-10-15 18:41:25 +00:00
ip6.h Fix more continuous/contiguous typos (cf. r215955) 2010-11-27 21:51:39 +00:00
ip_carp.c It is a logical error that in carp_multicast_cleanup() 2012-04-11 12:26:30 +00:00
ip_carp.h Restore a feature that was present in 5.x and 6.x, and was cleared in 2011-12-20 13:53:31 +00:00
ip_divert.c Make #error messages string-literals and remove punctuation. 2012-01-22 10:41:58 +00:00
ip_divert.h
ip_dummynet.h
ip_ecn.c
ip_ecn.h
ip_encap.c
ip_encap.h
ip_fastfwd.c Use correct field to track statistics counting error as bad header length. 2010-12-05 01:09:48 +00:00
ip_fw.h - Permit number of ipfw tables to be changed in runtime. 2012-03-25 20:37:59 +00:00
ip_gre.c Make #error messages string-literals and remove punctuation. 2012-01-22 10:41:58 +00:00
ip_gre.h
ip_icmp.c - Fix sysctl description 2012-01-07 00:11:36 +00:00
ip_icmp.h
ip_id.c
ip_input.c Convert all users of IF_ADDR_LOCK to use new locking macros that specify 2012-01-05 19:00:36 +00:00
ip_ipsec.c Clean up some #endif comments removing from short sections. Add #endif 2012-01-22 02:13:19 +00:00
ip_ipsec.h
ip_mroute.c Change SYSINIT priorities so that ip_mroute_modevent() is executed 2012-03-04 18:59:38 +00:00
ip_mroute.h
ip_options.c Use ifa_ifwithaddr_check() rather than ifa_ifwithaddr() as we are not 2010-10-14 12:32:49 +00:00
ip_options.h
ip_output.c Cache SO_REUSEPORT socket option in inpcb-layer in order to avoid 2011-11-06 10:47:20 +00:00
ip_var.h Defer the work of freeing IPv4 multicast options from a socket to an 2011-12-29 20:41:16 +00:00
ip.h
pim_var.h
pim.h
raw_ip.c As I came by and noticed add a comment that inp locking is a bit optistic 2012-01-02 09:18:58 +00:00
sctp_asconf.c Address issues found by clang. While there, fix also some style 2011-12-27 10:16:24 +00:00
sctp_asconf.h Fix unused parameter warnings. 2011-12-17 19:21:40 +00:00
sctp_auth.c Address issues found by clang. While there, fix also some style 2011-12-27 10:16:24 +00:00
sctp_auth.h Fix unused parameter warnings. 2011-12-17 19:21:40 +00:00
sctp_bsd_addr.c This fixes PR 165210. Basically we just 2012-03-12 15:05:17 +00:00
sctp_bsd_addr.h Fix unused parameter warnings. 2011-12-17 19:21:40 +00:00
sctp_cc_functions.c Address issues found by clang. While there, fix also some style 2011-12-27 10:16:24 +00:00
sctp_constants.h Make stream our stream reset implementation 2012-03-29 13:36:53 +00:00
sctp_crc32.c 1) Typo correction in comments and one spacing change. 2011-02-05 12:12:51 +00:00
sctp_crc32.h Fix unused parameter warnings. 2011-12-17 19:21:40 +00:00
sctp_dtrace_declare.h Fix unused parameter warnings. 2011-12-17 19:21:40 +00:00
sctp_dtrace_define.h Fix unused parameter warnings. 2011-12-17 19:21:40 +00:00
sctp_header.h Make stream our stream reset implementation 2012-03-29 13:36:53 +00:00
sctp_indata.c Address issues found by clang. While there, fix also some style 2011-12-27 10:16:24 +00:00
sctp_indata.h Fix unused parameter warnings. 2011-12-17 19:21:40 +00:00
sctp_input.c Make stream our stream reset implementation 2012-03-29 13:36:53 +00:00
sctp_input.h Fix unused parameter warnings. 2011-12-17 19:21:40 +00:00
sctp_lock_bsd.h 1) Typo correction in comments and one spacing change. 2011-02-05 12:12:51 +00:00
sctp_os_bsd.h Document the fact that multi-FIB support for SCTP had been backed out 2012-02-03 15:39:13 +00:00
sctp_os.h Fix unused parameter warnings. 2011-12-17 19:21:40 +00:00
sctp_output.c Make stream our stream reset implementation 2012-03-29 13:36:53 +00:00
sctp_output.h Make stream our stream reset implementation 2012-03-29 13:36:53 +00:00
sctp_pcb.c Address issues found by clang. While there, fix also some style 2011-12-27 10:16:24 +00:00
sctp_pcb.h Make stream our stream reset implementation 2012-03-29 13:36:53 +00:00
sctp_peeloff.c Make stream our stream reset implementation 2012-03-29 13:36:53 +00:00
sctp_peeloff.h Fix unused parameter warnings. 2011-12-17 19:21:40 +00:00
sctp_ss_functions.c Address issues found by clang. While there, fix also some style 2011-12-27 10:16:24 +00:00
sctp_structs.h Make stream our stream reset implementation 2012-03-29 13:36:53 +00:00
sctp_sysctl.c Add an SCTP sysctl "blackhole", similar to the one for TCP. 2012-01-08 09:56:24 +00:00
sctp_sysctl.h Add an SCTP sysctl "blackhole", similar to the one for TCP. 2012-01-08 09:56:24 +00:00
sctp_timer.c Send always HBs when in PF state. 2012-04-14 21:01:44 +00:00
sctp_timer.h Fix unused parameter warnings. 2011-12-17 19:21:40 +00:00
sctp_uio.h Make stream our stream reset implementation 2012-03-29 13:36:53 +00:00
sctp_usrreq.c Remove duplicate condition in if statement. 2012-04-06 09:03:02 +00:00
sctp_var.h Address issues found by clang. While there, fix also some style 2011-12-27 10:16:24 +00:00
sctp.h Make stream our stream reset implementation 2012-03-29 13:36:53 +00:00
sctputil.c Make stream our stream reset implementation 2012-03-29 13:36:53 +00:00
sctputil.h Make stream our stream reset implementation 2012-03-29 13:36:53 +00:00
siftr.c Decompose the current single inpcbinfo lock into two locks: 2011-05-30 09:43:55 +00:00
tcp_debug.c
tcp_debug.h
tcp_fsm.h
tcp_hostcache.c Mark all SYSCTL_NODEs static that have no corresponding SYSCTL_DECLs. 2011-11-07 15:43:11 +00:00
tcp_hostcache.h
tcp_input.c When we receive an ICMP unreach need fragmentation datagram, we take 2012-04-16 13:49:03 +00:00
tcp_lro.c Don't allow lro->len to exceed 65535, as this will result in overflow 2011-07-05 18:43:54 +00:00
tcp_lro.h Trim extra spaces before tabs. 2011-01-07 21:40:34 +00:00
tcp_offload.c
tcp_offload.h Fix typos - remove duplicate "the". 2011-02-21 09:01:34 +00:00
tcp_output.c When we receive an ICMP unreach need fragmentation datagram, we take 2012-04-16 13:49:03 +00:00
tcp_reass.c Plug a TCP reassembly UMA zone leak introduced in r226113 by only using the 2011-11-27 02:32:08 +00:00
tcp_sack.c Covers values if (BYTES_THIS_ACK(tp, th) / tp->t_maxseg) value is from 2011-03-28 19:03:56 +00:00
tcp_seq.h Fix PAWS (Protect Against Wrapped Sequence numbers) in cases when 2012-02-15 16:09:56 +00:00
tcp_subr.c When we receive an ICMP unreach need fragmentation datagram, we take 2012-04-16 13:49:03 +00:00
tcp_syncache.c Fix PAWS (Protect Against Wrapped Sequence numbers) in cases when 2012-02-15 16:09:56 +00:00
tcp_syncache.h Add spares to the network stack for FreeBSD-9: 2011-07-17 21:15:20 +00:00
tcp_timer.c Add new socket options: TCP_KEEPINIT, TCP_KEEPIDLE, TCP_KEEPINTVL and 2012-02-05 16:53:02 +00:00
tcp_timer.h Add new socket options: TCP_KEEPINIT, TCP_KEEPIDLE, TCP_KEEPINTVL and 2012-02-05 16:53:02 +00:00
tcp_timewait.c Fix PAWS (Protect Against Wrapped Sequence numbers) in cases when 2012-02-15 16:09:56 +00:00
tcp_usrreq.c Add new socket options: TCP_KEEPINIT, TCP_KEEPIDLE, TCP_KEEPINTVL and 2012-02-05 16:53:02 +00:00
tcp_var.h When we receive an ICMP unreach need fragmentation datagram, we take 2012-04-16 13:49:03 +00:00
tcp.h Add new socket options: TCP_KEEPINIT, TCP_KEEPIDLE, TCP_KEEPINTVL and 2012-02-05 16:53:02 +00:00
tcpip.h
toedev.h
udp_usrreq.c Export the udp_cksum sysctl for upcoming SCTP work. Rather than always, 2012-03-27 15:14:29 +00:00
udp_var.h Export the udp_cksum sysctl for upcoming SCTP work. Rather than always, 2012-03-27 15:14:29 +00:00
udp.h Trim extra spaces before tabs. 2011-01-07 21:40:34 +00:00