linux-headers (unknown)

(root)/
include/
linux/
errqueue.h
       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  #include <linux/time_types.h>
       7  
       8  /* RFC 4884: return offset to extension struct + validation */
       9  struct sock_ee_data_rfc4884 {
      10  	__u16	len;
      11  	__u8	flags;
      12  	__u8	reserved;
      13  };
      14  
      15  struct sock_extended_err {
      16  	__u32	ee_errno;	
      17  	__u8	ee_origin;
      18  	__u8	ee_type;
      19  	__u8	ee_code;
      20  	__u8	ee_pad;
      21  	__u32   ee_info;
      22  	union	{
      23  		__u32   ee_data;
      24  		struct sock_ee_data_rfc4884 ee_rfc4884;
      25  	};
      26  };
      27  
      28  #define SO_EE_ORIGIN_NONE	0
      29  #define SO_EE_ORIGIN_LOCAL	1
      30  #define SO_EE_ORIGIN_ICMP	2
      31  #define SO_EE_ORIGIN_ICMP6	3
      32  #define SO_EE_ORIGIN_TXSTATUS	4
      33  #define SO_EE_ORIGIN_ZEROCOPY	5
      34  #define SO_EE_ORIGIN_TXTIME	6
      35  #define SO_EE_ORIGIN_TIMESTAMPING SO_EE_ORIGIN_TXSTATUS
      36  
      37  #define SO_EE_OFFENDER(ee)	((struct sockaddr*)((ee)+1))
      38  
      39  #define SO_EE_CODE_ZEROCOPY_COPIED	1
      40  
      41  #define SO_EE_CODE_TXTIME_INVALID_PARAM	1
      42  #define SO_EE_CODE_TXTIME_MISSED	2
      43  
      44  #define SO_EE_RFC4884_FLAG_INVALID	1
      45  
      46  /**
      47   *	struct scm_timestamping - timestamps exposed through cmsg
      48   *
      49   *	The timestamping interfaces SO_TIMESTAMPING, MSG_TSTAMP_*
      50   *	communicate network timestamps by passing this struct in a cmsg with
      51   *	recvmsg(). See Documentation/networking/timestamping.rst for details.
      52   *	User space sees a timespec definition that matches either
      53   *	__kernel_timespec or __kernel_old_timespec, in the kernel we
      54   *	require two structure definitions to provide both.
      55   */
      56  struct scm_timestamping {
      57  	struct timespec ts[3];
      58  };
      59  
      60  struct scm_timestamping64 {
      61  	struct __kernel_timespec ts[3];
      62  };
      63  
      64  /* The type of scm_timestamping, passed in sock_extended_err ee_info.
      65   * This defines the type of ts[0]. For SCM_TSTAMP_SND only, if ts[0]
      66   * is zero, then this is a hardware timestamp and recorded in ts[2].
      67   */
      68  enum {
      69  	SCM_TSTAMP_SND,		/* driver passed skb to NIC, or HW */
      70  	SCM_TSTAMP_SCHED,	/* data entered the packet scheduler */
      71  	SCM_TSTAMP_ACK,		/* data acknowledged by peer */
      72  };
      73  
      74  #endif /* _LINUX_ERRQUEUE_H */