1c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef _LINUX_ERRQUEUE_H
2c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define _LINUX_ERRQUEUE_H 1
3c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
4c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct sock_extended_err
5c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{
6c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u32	ee_errno;
7c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	ee_origin;
8c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	ee_type;
9c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	ee_code;
10c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	ee_pad;
11c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u32   ee_info;
12c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u32   ee_data;
13c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
14c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
15c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SO_EE_ORIGIN_NONE	0
16c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SO_EE_ORIGIN_LOCAL	1
17c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SO_EE_ORIGIN_ICMP	2
18c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SO_EE_ORIGIN_ICMP6	3
19c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
20c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SO_EE_OFFENDER(ee)	((struct sockaddr*)((ee)+1))
21c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
22c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifdef __KERNEL__
23c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
24c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#include <net/ip.h>
25c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
26c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#include <linux/ipv6.h>
27c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif
28c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
29c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SKB_EXT_ERR(skb) ((struct sock_exterr_skb *) ((skb)->cb))
30c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
31c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct sock_exterr_skb
32c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{
33c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	union {
34c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru		struct inet_skb_parm	h4;
35c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
36c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru		struct inet6_skb_parm	h6;
37c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif
38c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	} header;
39c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	struct sock_extended_err	ee;
40c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	u16				addr_offset;
41c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	u16				port;
42c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
43c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
44c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif
45c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
46c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif
47