summaryrefslogtreecommitdiffstats
path: root/sys/sys/mbuf.h
diff options
context:
space:
mode:
authorglebius <glebius@FreeBSD.org>2014-05-04 23:25:32 +0000
committerglebius <glebius@FreeBSD.org>2014-05-04 23:25:32 +0000
commitd2bbb6646bad4efa2c8bac48ec5a0c33f7482d11 (patch)
treed7e7b758425a201d0984001d2f9d3f019d60b8d7 /sys/sys/mbuf.h
parent9b1896e64f52fa639d8bea0b9ba42b8064af94a4 (diff)
downloadFreeBSD-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.h1
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
OpenPOWER on IntegriCloud