Work on adding appropriate byte counting (RFC 3465) support to TCP.
More work on TCP ABC support.
Ensure we correctly handle counting of ACKed bytes per RTT in cong avoid mode
for ABC purposes by resetting to 0 after fast recovery.

Sponsored by:	FreeBSD Foundation
Ensure that slow starting after an RTO when ABC is enabled enforces
abc_l_var = 1 until we've recovered from any lingering badness.

I believe this commit pretty much wraps up the ABC implementation.

Inspired by:	NetBSD
Sponsored by:	FreeBSD Foundation
Forgot to correct the logic. Ahem.

Sponsored by:	FreeBSD Foundation
IFC r184919:186471

Sponsored by:	FreeBSD Foundation
Fix yesterday's botched IFC and make the patch work with the recent vimage changes.

Sponsored by:	FreeBSD Foundation
Merge r186471:186647 from head.
Merge r186647:188939 from head.
Merge r188939:190780 from head.
Merge r190780:192000 from head.
Merge r192000:194354 from head.
Merge r194354:194850 from head.
Merge r194850:195779 from head.
Fold struct sackhint into struct tcpcb. Having the details in a separate struct
provided no real benefit, and we now have a simplified ABI with respect to
struct tcpcb.

Sponsored by:	FreeBSD Foundation
Keep a sender-side tally of the total number of bytes outstanding at the
receiver when SACK is in use. This allows us to *accurately* gauge how much of
the outstanding window of data is actually sitting in the receiver's buffers.
This in turn will be used by follow up work to improve fast recovery performance
for SACK enabled connections.

Sponsored by:	FreeBSD Foundation
Tweak the accounting math in my previous commit so that it actually calculates
the correct values. The sack_hole_bytes variable should now be ready to use to
influence SACK recovery behaviour.

Sponsored by:	FreeBSD Foundation
Import variable length ALQ(9) work from my user branch/SIFTR development
repository. This is a prerequisite for importing SIFTR into the tree.

This patch allows the ALQ(9) framework to be compiled as a kernel module. It
also extends the KPI to support logging variable length messages by replacing
the underlying storage with a circular byte based buffer and adding new
alq_writen/alq_getn functions.

Some additional minor structural work is required to remove the patch's current
use of malloc in alq_getn.

Sponsored by:	FreeBSD Foundation
Discussed with:	jeff@, rwatson@ (quite some time ago now)
Forgot this in the previous ALQ import commit.

Sponsored by:	FreeBSD Foundation
Initial wholesale import of the Statistical Information For TCP Research (SIFTR)
v1.2.2 kernel module.

SIFTR facilitates TCP related research, development and debugging by providing
near real-time access to highly detailed kernel information from TCP endpoints.
The tool can be used to gather data unobtrusively on running systems, making it
a useful addition to the toolkits of system administrators, developers, and
researchers alike.

SIFTR was first released in 2007 by James Healy and Lawrence Stewart whilst
working on the NewTCP research project at Swinburne University's Centre for
Advanced Internet Architectures, Melbourne, Australia, which was made possible
in part by a grant from the Cisco University Research Program Fund at Community
Foundation Silicon Valley. More details are available at:
    http://caia.swin.edu.au/urp/newtcp/

Work on SIFTR v1.2.x was sponsored by the FreeBSD Foundation as part of the
"Enhancing the FreeBSD TCP Implementation" project 2008-2009. More details are
available at:
    http://www.freebsdfoundation.org/
    http://caia.swin.edu.au/freebsd/etcp09/

Sponsored by:	FreeBSD Foundation, Cisco Systems