• David S. Miller's avatar
    net: Allow raw buffers to be passed into the flow dissector. · 690e36e7
    David S. Miller authored
    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: default avatarDavid S. Miller <davem@davemloft.net>
    690e36e7
flow_dissector.c 9.76 KB