freebsd-nq/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
ipfw Don't check malloc(M_WAITOK) results. 2012-03-31 11:20:48 +00:00
khelp
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
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
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
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
in_proto.c Bunch of fixes to pfsync(4) module load/unload: 2012-01-09 08:50:22 +00:00
in_rmx.c
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
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
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
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
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
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
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
tcp_lro.h
tcp_offload.c
tcp_offload.h
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
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
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