1 | /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ |
2 | #ifndef _LINUX_ERRQUEUE_H |
3 | #define _LINUX_ERRQUEUE_H |
4 | |
5 | #include <linux/types.h> |
6 | |
7 | struct sock_extended_err { |
8 | __u32 ee_errno; |
9 | __u8 ee_origin; |
10 | __u8 ee_type; |
11 | __u8 ee_code; |
12 | __u8 ee_pad; |
13 | __u32 ee_info; |
14 | __u32 ee_data; |
15 | }; |
16 | |
17 | #define SO_EE_ORIGIN_NONE 0 |
18 | #define SO_EE_ORIGIN_LOCAL 1 |
19 | #define SO_EE_ORIGIN_ICMP 2 |
20 | #define SO_EE_ORIGIN_ICMP6 3 |
21 | #define SO_EE_ORIGIN_TXSTATUS 4 |
22 | #define SO_EE_ORIGIN_ZEROCOPY 5 |
23 | #define SO_EE_ORIGIN_TIMESTAMPING SO_EE_ORIGIN_TXSTATUS |
24 | |
25 | #define SO_EE_OFFENDER(ee) ((struct sockaddr*)((ee)+1)) |
26 | |
27 | #define SO_EE_CODE_ZEROCOPY_COPIED 1 |
28 | |
29 | /** |
30 | * struct scm_timestamping - timestamps exposed through cmsg |
31 | * |
32 | * The timestamping interfaces SO_TIMESTAMPING, MSG_TSTAMP_* |
33 | * communicate network timestamps by passing this struct in a cmsg with |
34 | * recvmsg(). See Documentation/networking/timestamping.txt for details. |
35 | */ |
36 | struct scm_timestamping { |
37 | struct timespec ts[3]; |
38 | }; |
39 | |
40 | /* The type of scm_timestamping, passed in sock_extended_err ee_info. |
41 | * This defines the type of ts[0]. For SCM_TSTAMP_SND only, if ts[0] |
42 | * is zero, then this is a hardware timestamp and recorded in ts[2]. |
43 | */ |
44 | enum { |
45 | SCM_TSTAMP_SND, /* driver passed skb to NIC, or HW */ |
46 | SCM_TSTAMP_SCHED, /* data entered the packet scheduler */ |
47 | SCM_TSTAMP_ACK, /* data acknowledged by peer */ |
48 | }; |
49 | |
50 | #endif /* _LINUX_ERRQUEUE_H */ |
51 | |