github.com/looshlee/beatles@v0.0.0-20220727174639-742810ab631c/bpf/include/linux/icmpv6.h (about)

     1  #ifndef _LINUX_ICMPV6_H
     2  #define _LINUX_ICMPV6_H
     3  
     4  #include <linux/type_mapper.h>
     5  #include <linux/in6.h>
     6  
     7  struct icmp6hdr {
     8  
     9  	__u8		icmp6_type;
    10  	__u8		icmp6_code;
    11  	__sum16		icmp6_cksum;
    12  
    13  
    14  	union {
    15  		__be32			un_data32[1];
    16  		__be16			un_data16[2];
    17  		__u8			un_data8[4];
    18  
    19  		struct icmpv6_echo {
    20  			__be16		identifier;
    21  			__be16		sequence;
    22  		} u_echo;
    23  
    24                  struct icmpv6_nd_advt {
    25  #if defined(__LITTLE_ENDIAN_BITFIELD)
    26                          __u32		reserved:5,
    27                          		override:1,
    28                          		solicited:1,
    29                          		router:1,
    30  					reserved2:24;
    31  #elif defined(__BIG_ENDIAN_BITFIELD)
    32                          __u32		router:1,
    33  					solicited:1,
    34                          		override:1,
    35                          		reserved:29;
    36  #else
    37  #error	"Please fix <asm/byteorder.h>"
    38  #endif						
    39                  } u_nd_advt;
    40  
    41                  struct icmpv6_nd_ra {
    42  			__u8		hop_limit;
    43  #if defined(__LITTLE_ENDIAN_BITFIELD)
    44  			__u8		reserved:3,
    45  					router_pref:2,
    46  					home_agent:1,
    47  					other:1,
    48  					managed:1;
    49  
    50  #elif defined(__BIG_ENDIAN_BITFIELD)
    51  			__u8		managed:1,
    52  					other:1,
    53  					home_agent:1,
    54  					router_pref:2,
    55  					reserved:3;
    56  #else
    57  #error	"Please fix <asm/byteorder.h>"
    58  #endif
    59  			__be16		rt_lifetime;
    60                  } u_nd_ra;
    61  
    62  	} icmp6_dataun;
    63  
    64  #define icmp6_identifier	icmp6_dataun.u_echo.identifier
    65  #define icmp6_sequence		icmp6_dataun.u_echo.sequence
    66  #define icmp6_pointer		icmp6_dataun.un_data32[0]
    67  #define icmp6_mtu		icmp6_dataun.un_data32[0]
    68  #define icmp6_unused		icmp6_dataun.un_data32[0]
    69  #define icmp6_maxdelay		icmp6_dataun.un_data16[0]
    70  #define icmp6_router		icmp6_dataun.u_nd_advt.router
    71  #define icmp6_solicited		icmp6_dataun.u_nd_advt.solicited
    72  #define icmp6_override		icmp6_dataun.u_nd_advt.override
    73  #define icmp6_ndiscreserved	icmp6_dataun.u_nd_advt.reserved
    74  #define icmp6_hop_limit		icmp6_dataun.u_nd_ra.hop_limit
    75  #define icmp6_addrconf_managed	icmp6_dataun.u_nd_ra.managed
    76  #define icmp6_addrconf_other	icmp6_dataun.u_nd_ra.other
    77  #define icmp6_rt_lifetime	icmp6_dataun.u_nd_ra.rt_lifetime
    78  #define icmp6_router_pref	icmp6_dataun.u_nd_ra.router_pref
    79  };
    80  
    81  
    82  #define ICMPV6_ROUTER_PREF_LOW		0x3
    83  #define ICMPV6_ROUTER_PREF_MEDIUM	0x0
    84  #define ICMPV6_ROUTER_PREF_HIGH		0x1
    85  #define ICMPV6_ROUTER_PREF_INVALID	0x2
    86  
    87  #define ICMPV6_DEST_UNREACH		1
    88  #define ICMPV6_PKT_TOOBIG		2
    89  #define ICMPV6_TIME_EXCEED		3
    90  #define ICMPV6_PARAMPROB		4
    91  
    92  #define ICMPV6_INFOMSG_MASK		0x80
    93  
    94  #define ICMPV6_ECHO_REQUEST		128
    95  #define ICMPV6_ECHO_REPLY		129
    96  #define ICMPV6_MGM_QUERY		130
    97  #define ICMPV6_MGM_REPORT       	131
    98  #define ICMPV6_MGM_REDUCTION    	132
    99  
   100  #define ICMPV6_NI_QUERY			139
   101  #define ICMPV6_NI_REPLY			140
   102  
   103  #define ICMPV6_MLD2_REPORT		143
   104  
   105  #define ICMPV6_DHAAD_REQUEST		144
   106  #define ICMPV6_DHAAD_REPLY		145
   107  #define ICMPV6_MOBILE_PREFIX_SOL	146
   108  #define ICMPV6_MOBILE_PREFIX_ADV	147
   109  
   110  /*
   111   *	Codes for Destination Unreachable
   112   */
   113  #define ICMPV6_NOROUTE			0
   114  #define ICMPV6_ADM_PROHIBITED		1
   115  #define ICMPV6_NOT_NEIGHBOUR		2
   116  #define ICMPV6_ADDR_UNREACH		3
   117  #define ICMPV6_PORT_UNREACH		4
   118  #define ICMPV6_POLICY_FAIL		5
   119  #define ICMPV6_REJECT_ROUTE		6
   120  
   121  /*
   122   *	Codes for Time Exceeded
   123   */
   124  #define ICMPV6_EXC_HOPLIMIT		0
   125  #define ICMPV6_EXC_FRAGTIME		1
   126  
   127  /*
   128   *	Codes for Parameter Problem
   129   */
   130  #define ICMPV6_HDR_FIELD		0
   131  #define ICMPV6_UNK_NEXTHDR		1
   132  #define ICMPV6_UNK_OPTION		2
   133  
   134  /*
   135   *	constants for (set|get)sockopt
   136   */
   137  
   138  #define ICMPV6_FILTER			1
   139  
   140  /*
   141   *	ICMPV6 filter
   142   */
   143  
   144  #define ICMPV6_FILTER_BLOCK		1
   145  #define ICMPV6_FILTER_PASS		2
   146  #define ICMPV6_FILTER_BLOCKOTHERS	3
   147  #define ICMPV6_FILTER_PASSONLY		4
   148  
   149  struct icmp6_filter {
   150  	__u32		data[8];
   151  };
   152  
   153  /*
   154   *	Definitions for MLDv2
   155   */
   156  #define MLD2_MODE_IS_INCLUDE	1
   157  #define MLD2_MODE_IS_EXCLUDE	2
   158  #define MLD2_CHANGE_TO_INCLUDE	3
   159  #define MLD2_CHANGE_TO_EXCLUDE	4
   160  #define MLD2_ALLOW_NEW_SOURCES	5
   161  #define MLD2_BLOCK_OLD_SOURCES	6
   162  
   163  #define MLD2_ALL_MCR_INIT { { { 0xff,0x02,0,0,0,0,0,0,0,0,0,0,0,0,0,0x16 } } }
   164  
   165  
   166  #endif /* _LINUX_ICMPV6_H */