• Patrick Ohly's avatar
    net: infrastructure for hardware time stamping · ac45f602
    Patrick Ohly authored
    The additional per-packet information (16 bytes for time stamps, 1
    byte for flags) is stored for all packets in the skb_shared_info
    struct. This implementation detail is hidden from users of that
    information via skb_* accessor functions. A separate struct resp.
    union is used for the additional information so that it can be
    stored/copied easily outside of skb_shared_info.
    
    Compared to previous implementations (reusing the tstamp field
    depending on the context, optional additional structures) this
    is the simplest solution. It does not extend sk_buff itself.
    
    TX time stamping is implemented in software if the device driver
    doesn't support hardware time stamping.
    
    The new semantic for hardware/software time stamping around
    ndo_start_xmit() is based on two assumptions about existing
    network device drivers which don't support hardware time
    stamping and know nothing about it:
     - they leave the new skb_shared_tx unmodified
     - the keep the connection to the originating socket in skb->sk
       alive, i.e., don't call skb_orphan()
    
    Given that skb_shared_tx is new, the first assumption is safe.
    The second is only true for some drivers. As a result, software
    TX time stamping currently works with the bnx2 driver, but not
    with the unmodified igb driver (the two drivers this patch series
    was tested with).
    Signed-off-by: default avatarPatrick Ohly <patrick.ohly@intel.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    ac45f602
skbuff.c 74 KB