]> git.karo-electronics.de Git - linux-beck.git/commit
net: Allow raw buffers to be passed into the flow dissector.
authorDavid S. Miller <davem@davemloft.net>
Sat, 23 Aug 2014 19:13:41 +0000 (12:13 -0700)
committerDavid S. Miller <davem@davemloft.net>
Sat, 23 Aug 2014 19:13:41 +0000 (12:13 -0700)
commit690e36e726d00d2528bc569809048adf61550d80
treee28c0ca1fce29a077415235ec3b90db4527de6c9
parent1ad676a6bc4b284b68e4d24c0eac366438a32af6
net: Allow raw buffers to be passed into the flow dissector.

Drivers, and perhaps other entities we have not yet considered,
sometimes want to know how deep the protocol headers go before
deciding how large of an SKB to allocate and how much of the packet to
place into the linear SKB area.

For example, consider a driver which has a device which DMAs into
pools of pages and then tells the driver where the data went in the
DMA descriptor(s).  The driver can then build an SKB and reference
most of the data via SKB fragments (which are page/offset/length
triplets).

However at least some of the front of the packet should be placed into
the linear SKB area, which comes before the fragments, so that packet
processing can get at the headers efficiently.  The first thing each
protocol layer is going to do is a "pskb_may_pull()" so we might as
well aggregate as much of this as possible while we're building the
SKB in the driver.

Part of supporting this is that we don't have an SKB yet, so we want
to be able to let the flow dissector operate on a raw buffer in order
to compute the offset of the end of the headers.

So now we have a __skb_flow_dissect() which takes an explicit data
pointer and length.

Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/skbuff.h
include/net/flow_keys.h
net/core/flow_dissector.c