]> CyberLeo.Net >> Repos - FreeBSD/stable/9.git/commit
Merge 234342 from head:
authorglebius <glebius@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f>
Sat, 5 May 2012 07:55:50 +0000 (07:55 +0000)
committerglebius <glebius@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f>
Sat, 5 May 2012 07:55:50 +0000 (07:55 +0000)
commit7ccabfa03d608caeb10572a7e7ca3ec5f2dfd225
tree216210537323c9bfe2a40fe6991261a619225a39
parentd2345a78a941e7463384e210fd8b45f5ca481253
Merge 234342 from head:
  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)

git-svn-id: svn://svn.freebsd.org/base/stable/9@235051 ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f
sys/netinet/tcp_input.c
sys/netinet/tcp_output.c
sys/netinet/tcp_subr.c
sys/netinet/tcp_var.h