github.com/cilium/cilium@v1.16.2/bpf/include/linux/icmpv6.h (about)

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