linux/include/uapi/linux/icmpv6.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
   2#ifndef _UAPI_LINUX_ICMPV6_H
   3#define _UAPI_LINUX_ICMPV6_H
   4
   5#include <linux/types.h>
   6#include <asm/byteorder.h>
   7
   8struct 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_datagram_len      icmp6_dataun.un_data8[0]
  72#define icmp6_router            icmp6_dataun.u_nd_advt.router
  73#define icmp6_solicited         icmp6_dataun.u_nd_advt.solicited
  74#define icmp6_override          icmp6_dataun.u_nd_advt.override
  75#define icmp6_ndiscreserved     icmp6_dataun.u_nd_advt.reserved
  76#define icmp6_hop_limit         icmp6_dataun.u_nd_ra.hop_limit
  77#define icmp6_addrconf_managed  icmp6_dataun.u_nd_ra.managed
  78#define icmp6_addrconf_other    icmp6_dataun.u_nd_ra.other
  79#define icmp6_rt_lifetime       icmp6_dataun.u_nd_ra.rt_lifetime
  80#define icmp6_router_pref       icmp6_dataun.u_nd_ra.router_pref
  81};
  82
  83
  84#define ICMPV6_ROUTER_PREF_LOW          0x3
  85#define ICMPV6_ROUTER_PREF_MEDIUM       0x0
  86#define ICMPV6_ROUTER_PREF_HIGH         0x1
  87#define ICMPV6_ROUTER_PREF_INVALID      0x2
  88
  89#define ICMPV6_DEST_UNREACH             1
  90#define ICMPV6_PKT_TOOBIG               2
  91#define ICMPV6_TIME_EXCEED              3
  92#define ICMPV6_PARAMPROB                4
  93
  94#define ICMPV6_ERRMSG_MAX       127
  95
  96#define ICMPV6_INFOMSG_MASK             0x80
  97
  98#define ICMPV6_ECHO_REQUEST             128
  99#define ICMPV6_ECHO_REPLY               129
 100#define ICMPV6_MGM_QUERY                130
 101#define ICMPV6_MGM_REPORT               131
 102#define ICMPV6_MGM_REDUCTION            132
 103
 104#define ICMPV6_NI_QUERY                 139
 105#define ICMPV6_NI_REPLY                 140
 106
 107#define ICMPV6_MLD2_REPORT              143
 108
 109#define ICMPV6_DHAAD_REQUEST            144
 110#define ICMPV6_DHAAD_REPLY              145
 111#define ICMPV6_MOBILE_PREFIX_SOL        146
 112#define ICMPV6_MOBILE_PREFIX_ADV        147
 113
 114#define ICMPV6_MRDISC_ADV               151
 115
 116#define ICMPV6_MSG_MAX          255
 117
 118/*
 119 *      Codes for Destination Unreachable
 120 */
 121#define ICMPV6_NOROUTE                  0
 122#define ICMPV6_ADM_PROHIBITED           1
 123#define ICMPV6_NOT_NEIGHBOUR            2
 124#define ICMPV6_ADDR_UNREACH             3
 125#define ICMPV6_PORT_UNREACH             4
 126#define ICMPV6_POLICY_FAIL              5
 127#define ICMPV6_REJECT_ROUTE             6
 128
 129/*
 130 *      Codes for Time Exceeded
 131 */
 132#define ICMPV6_EXC_HOPLIMIT             0
 133#define ICMPV6_EXC_FRAGTIME             1
 134
 135/*
 136 *      Codes for Parameter Problem
 137 */
 138#define ICMPV6_HDR_FIELD                0
 139#define ICMPV6_UNK_NEXTHDR              1
 140#define ICMPV6_UNK_OPTION               2
 141#define ICMPV6_HDR_INCOMP               3
 142
 143/* Codes for EXT_ECHO (PROBE) */
 144#define ICMPV6_EXT_ECHO_REQUEST         160
 145#define ICMPV6_EXT_ECHO_REPLY           161
 146/*
 147 *      constants for (set|get)sockopt
 148 */
 149
 150#define ICMPV6_FILTER                   1
 151
 152/*
 153 *      ICMPV6 filter
 154 */
 155
 156#define ICMPV6_FILTER_BLOCK             1
 157#define ICMPV6_FILTER_PASS              2
 158#define ICMPV6_FILTER_BLOCKOTHERS       3
 159#define ICMPV6_FILTER_PASSONLY          4
 160
 161struct icmp6_filter {
 162        __u32           data[8];
 163};
 164
 165/*
 166 *      Definitions for MLDv2
 167 */
 168#define MLD2_MODE_IS_INCLUDE    1
 169#define MLD2_MODE_IS_EXCLUDE    2
 170#define MLD2_CHANGE_TO_INCLUDE  3
 171#define MLD2_CHANGE_TO_EXCLUDE  4
 172#define MLD2_ALLOW_NEW_SOURCES  5
 173#define MLD2_BLOCK_OLD_SOURCES  6
 174
 175#define MLD2_ALL_MCR_INIT { { { 0xff,0x02,0,0,0,0,0,0,0,0,0,0,0,0,0,0x16 } } }
 176
 177
 178#endif /* _UAPI_LINUX_ICMPV6_H */
 179