cb9eff0978
User space can request hardware and/or software time stamping. Reporting of the result(s) via a new control message is enabled separately for each field in the message because some of the fields may require additional computation and thus cause overhead. User space can tell the different kinds of time stamps apart and choose what suits its needs. When a TX timestamp operation is requested, the TX skb will be cloned and the clone will be time stamped (in hardware or software) and added to the socket error queue of the skb, if the skb has a socket associated with it. The actual TX timestamp will reach userspace as a RX timestamp on the cloned packet. If timestamping is requested and no timestamping is done in the device driver (potentially this may use hardware timestamping), it will be done in software after the device's start_hard_xmit routine. Signed-off-by: Patrick Ohly <patrick.ohly@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
50 lines
881 B
C
50 lines
881 B
C
#ifndef _LINUX_ERRQUEUE_H
|
|
#define _LINUX_ERRQUEUE_H 1
|
|
|
|
#include <linux/types.h>
|
|
|
|
struct sock_extended_err
|
|
{
|
|
__u32 ee_errno;
|
|
__u8 ee_origin;
|
|
__u8 ee_type;
|
|
__u8 ee_code;
|
|
__u8 ee_pad;
|
|
__u32 ee_info;
|
|
__u32 ee_data;
|
|
};
|
|
|
|
#define SO_EE_ORIGIN_NONE 0
|
|
#define SO_EE_ORIGIN_LOCAL 1
|
|
#define SO_EE_ORIGIN_ICMP 2
|
|
#define SO_EE_ORIGIN_ICMP6 3
|
|
#define SO_EE_ORIGIN_TIMESTAMPING 4
|
|
|
|
#define SO_EE_OFFENDER(ee) ((struct sockaddr*)((ee)+1))
|
|
|
|
#ifdef __KERNEL__
|
|
|
|
#include <net/ip.h>
|
|
#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
|
|
#include <linux/ipv6.h>
|
|
#endif
|
|
|
|
#define SKB_EXT_ERR(skb) ((struct sock_exterr_skb *) ((skb)->cb))
|
|
|
|
struct sock_exterr_skb
|
|
{
|
|
union {
|
|
struct inet_skb_parm h4;
|
|
#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
|
|
struct inet6_skb_parm h6;
|
|
#endif
|
|
} header;
|
|
struct sock_extended_err ee;
|
|
u16 addr_offset;
|
|
__be16 port;
|
|
};
|
|
|
|
#endif
|
|
|
|
#endif
|