mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
4b15c70753
Use the socket error queue for reporting dropped packets if the socket has enabled that feature through the SO_TXTIME API. Packets are dropped either on enqueue() if they aren't accepted by the qdisc or on dequeue() if the system misses their deadline. Those are reported as different errors so applications can react accordingly. Userspace can retrieve the errors through the socket error queue and the corresponding cmsg interfaces. A struct sock_extended_err* is used for returning the error data, and the packet's timestamp can be retrieved by adding both ee_data and ee_info fields as e.g.: ((__u64) serr->ee_data << 32) + serr->ee_info This feature is disabled by default and must be explicitly enabled by applications. Enabling it can bring some overhead for the Tx cycles of the application. Signed-off-by: Jesus Sanchez-Palencia <jesus.sanchez-palencia@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
55 lines
1.5 KiB
C
55 lines
1.5 KiB
C
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
|
#ifndef _UAPI_LINUX_ERRQUEUE_H
|
|
#define _UAPI_LINUX_ERRQUEUE_H
|
|
|
|
#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_TXSTATUS 4
|
|
#define SO_EE_ORIGIN_ZEROCOPY 5
|
|
#define SO_EE_ORIGIN_TXTIME 6
|
|
#define SO_EE_ORIGIN_TIMESTAMPING SO_EE_ORIGIN_TXSTATUS
|
|
|
|
#define SO_EE_OFFENDER(ee) ((struct sockaddr*)((ee)+1))
|
|
|
|
#define SO_EE_CODE_ZEROCOPY_COPIED 1
|
|
|
|
#define SO_EE_CODE_TXTIME_INVALID_PARAM 1
|
|
#define SO_EE_CODE_TXTIME_MISSED 2
|
|
|
|
/**
|
|
* struct scm_timestamping - timestamps exposed through cmsg
|
|
*
|
|
* The timestamping interfaces SO_TIMESTAMPING, MSG_TSTAMP_*
|
|
* communicate network timestamps by passing this struct in a cmsg with
|
|
* recvmsg(). See Documentation/networking/timestamping.txt for details.
|
|
*/
|
|
struct scm_timestamping {
|
|
struct timespec ts[3];
|
|
};
|
|
|
|
/* The type of scm_timestamping, passed in sock_extended_err ee_info.
|
|
* This defines the type of ts[0]. For SCM_TSTAMP_SND only, if ts[0]
|
|
* is zero, then this is a hardware timestamp and recorded in ts[2].
|
|
*/
|
|
enum {
|
|
SCM_TSTAMP_SND, /* driver passed skb to NIC, or HW */
|
|
SCM_TSTAMP_SCHED, /* data entered the packet scheduler */
|
|
SCM_TSTAMP_ACK, /* data acknowledged by peer */
|
|
};
|
|
|
|
#endif /* _UAPI_LINUX_ERRQUEUE_H */
|