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