tcp: Implement "Rescue Retransmission for SACK-based Loss Recovery Algorithm"
authorSepherosa Ziehau <sephe@dragonflybsd.org>
Thu, 19 Apr 2012 09:30:59 +0000 (17:30 +0800)
committerSepherosa Ziehau <sephe@dragonflybsd.org>
Wed, 25 Apr 2012 06:10:46 +0000 (14:10 +0800)
commit1bdfd72827460e22c240cfa103e21559a253cf26
tree8046b67458767ad0b336903da4192e27546149b4
parentcf5f465c24a356edd2165fbd02f6de64394fe8ea
tcp: Implement "Rescue Retransmission for SACK-based Loss Recovery Algorithm"

http://tools.ietf.org/html/draft-nishida-tcpm-rescue-retransmission-00

When hsu@ implemented RFC3517, part of the fix mentioned in the above draft
had been implemented, i.e. no SACK scoreboard left case, as mentioned in the
above draft as example.  However, the original implementation still did not
cover the case when there are small amount of SACK scoreboards left (< 3),
and the original implmentation could be more aggressive than the method
suggested in the above draft.

- Whether to use this new mechanism is controlled by net.inet.tcp.rescuesack
  sysctl node; it is on by default.  Disable it will fallback to the original
  rescue retransmission behaviour implemented by hsu@.
- Save rexmt_high, before we start retransmission using RFC3517, so if nothing
  is sent, rexmt_high could be restored.
- Add statistics about rescue retransmission.

We could futher examine whether do more than one rescue retransmission could
be helpful or not.
sys/netinet/tcp_input.c
sys/netinet/tcp_sack.c
sys/netinet/tcp_timer.c
sys/netinet/tcp_var.h
usr.bin/netstat/inet.c