diff options
author | glebius <glebius@FreeBSD.org> | 2014-05-04 23:25:32 +0000 |
---|---|---|
committer | glebius <glebius@FreeBSD.org> | 2014-05-04 23:25:32 +0000 |
commit | d2bbb6646bad4efa2c8bac48ec5a0c33f7482d11 (patch) | |
tree | d7e7b758425a201d0984001d2f9d3f019d60b8d7 /sys/sys/mbuf.h | |
parent | 9b1896e64f52fa639d8bea0b9ba42b8064af94a4 (diff) | |
download | FreeBSD-src-d2bbb6646bad4efa2c8bac48ec5a0c33f7482d11.zip FreeBSD-src-d2bbb6646bad4efa2c8bac48ec5a0c33f7482d11.tar.gz |
The FreeBSD-SA-14:08.tcp was a lesson on not doing acrobatics with
mixing on stack memory and UMA memory in one linked list.
Thus, rewrite TCP reassembly code in terms of memory usage. The
algorithm remains unchanged.
We actually do not need extra memory to build a reassembly queue.
Arriving mbufs are always packet header mbufs. So we got the length
of data as pkthdr.len. We got m_nextpkt for linkage. And we need
only one pointer to point at the tcphdr, use PH_loc for that.
In tcpcb the t_segq fields becomes mbuf pointer. The t_segqlen
field now counts not packets, but bytes in the queue. This gives
us more precision when comparing to socket buffer limits.
Sponsored by: Netflix
Sponsored by: Nginx, Inc.
Diffstat (limited to 'sys/sys/mbuf.h')
-rw-r--r-- | sys/sys/mbuf.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/sys/sys/mbuf.h b/sys/sys/mbuf.h index 815732e..e056bc7 100644 --- a/sys/sys/mbuf.h +++ b/sys/sys/mbuf.h @@ -159,6 +159,7 @@ struct pkthdr { #define tso_segsz PH_per.sixteen[1] #define csum_phsum PH_per.sixteen[2] #define csum_data PH_per.thirtytwo[1] +#define pkt_tcphdr PH_loc.ptr /* * Description of external storage mapped into mbuf; valid only if M_EXT is |