]>
Commit | Line | Data |
---|---|---|
1 | .\" $NetBSD: icmp6.4,v 1.13 2005/01/11 06:01:41 itojun Exp $ | |
2 | .\" $KAME: icmp6.4,v 1.6 2004/12/27 05:30:56 itojun Exp $ | |
3 | .\" $OpenBSD: icmp6.4,v 1.19 2004/12/23 20:33:03 jaredy Exp $ | |
4 | .\" | |
5 | .\" Copyright (c) 1986, 1991, 1993 | |
6 | .\" The Regents of the University of California. All rights reserved. | |
7 | .\" | |
8 | .\" Redistribution and use in source and binary forms, with or without | |
9 | .\" modification, are permitted provided that the following conditions | |
10 | .\" are met: | |
11 | .\" 1. Redistributions of source code must retain the above copyright | |
12 | .\" notice, this list of conditions and the following disclaimer. | |
13 | .\" 2. Redistributions in binary form must reproduce the above copyright | |
14 | .\" notice, this list of conditions and the following disclaimer in the | |
15 | .\" documentation and/or other materials provided with the distribution. | |
16 | .\" 3. Neither the name of the University nor the names of its contributors | |
17 | .\" may be used to endorse or promote products derived from this software | |
18 | .\" without specific prior written permission. | |
19 | .\" | |
20 | .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND | |
21 | .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
22 | .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
23 | .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | |
24 | .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |
25 | .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |
26 | .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |
27 | .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |
28 | .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |
29 | .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |
30 | .\" SUCH DAMAGE. | |
31 | .Dd December 20, 2004 | |
32 | .Dt ICMP6 4 | |
33 | .Os | |
34 | .Sh NAME | |
35 | .Nm icmp6 | |
36 | .Nd Internet Control Message Protocol for IPv6 | |
37 | .Sh SYNOPSIS | |
38 | .In sys/socket.h | |
39 | .In netinet/in.h | |
40 | .In netinet/icmp6.h | |
41 | .Ft int | |
42 | .Fn socket AF_INET6 SOCK_RAW IPPROTO_ICMPV6 | |
43 | .Sh DESCRIPTION | |
44 | ICMPv6 is the error and control message protocol used by IPv6 and the | |
45 | IPv6 protocol family (see | |
46 | .Xr ip6 4 | |
47 | and | |
48 | .Xr inet6 4 ) . | |
49 | It may be accessed through a | |
50 | .Dq raw socket | |
51 | for network monitoring and diagnostic functions. | |
52 | .Pp | |
53 | The | |
54 | .Fa proto | |
55 | parameter to the | |
56 | .Xr socket 2 | |
57 | call to create an ICMPv6 socket may be obtained from | |
58 | .Xr getprotobyname 3 . | |
59 | ICMPv6 sockets are connectionless, and are normally used with the | |
60 | .Xr sendto 2 | |
61 | and | |
62 | .Xr recvfrom 2 | |
63 | calls, though the | |
64 | .Xr connect 2 | |
65 | call may also be used to fix the destination for future packets | |
66 | (in which case | |
67 | .Xr read 2 | |
68 | or | |
69 | .Xr recv 2 | |
70 | and | |
71 | .Xr write 2 | |
72 | or | |
73 | .Xr send 2 | |
74 | system calls may be used). | |
75 | .Pp | |
76 | Outgoing packets automatically have an IPv6 header prepended to them | |
77 | (based on the destination address). | |
78 | Incoming packets on the socket are received with the IPv6 header and any | |
79 | extension headers removed. | |
80 | .Ss Types | |
81 | ICMPv6 messages are classified according to the type and code fields | |
82 | present in the ICMPv6 header. | |
83 | The abbreviations for the types and codes may be used in rules in | |
84 | .Xr pf.conf 5 . | |
85 | The following types are defined: | |
86 | .Bl -column x xxxxxxxxxxxx -offset indent | |
87 | .It Sy Num Ta Sy Abbrev. Ta Sy Description | |
88 | .It 1 Ta unreach Ta "Destination unreachable" | |
89 | .It 2 Ta toobig Ta "Packet too big" | |
90 | .It 3 Ta timex Ta "Time exceeded" | |
91 | .It 4 Ta paramprob Ta "Invalid IPv6 header" | |
92 | .It 128 Ta echoreq Ta "Echo service request" | |
93 | .It 129 Ta echorep Ta "Echo service reply" | |
94 | .It 130 Ta groupqry Ta "Group membership query" | |
95 | .It 130 Ta listqry Ta "Multicast listener query" | |
96 | .It 131 Ta grouprep Ta "Group membership report" | |
97 | .It 131 Ta listenrep Ta "Multicast listener report" | |
98 | .It 132 Ta groupterm Ta "Group membership termination" | |
99 | .It 132 Ta listendone Ta "Multicast listerner done" | |
100 | .It 133 Ta routersol Ta "Router solicitation" | |
101 | .It 134 Ta routeradv Ta "Router advertisement" | |
102 | .It 135 Ta neighbrsol Ta "Neighbor solicitation" | |
103 | .It 136 Ta neighbradv Ta "Neighbor advertisement" | |
104 | .It 137 Ta redir Ta "Shorter route exists" | |
105 | .It 138 Ta routrrenum Ta "Route renumbering" | |
106 | .It 139 Ta fqdnreq Ta "FQDN query" | |
107 | .It 139 Ta niqry Ta "Node information query" | |
108 | .It 139 Ta wrureq Ta "Who-are-you request" | |
109 | .It 140 Ta fqdnrep Ta "FQDN reply" | |
110 | .It 140 Ta nirep Ta "Node information reply" | |
111 | .It 140 Ta wrurep Ta "Who-are-you reply" | |
112 | .It 200 Ta mtraceresp Ta "mtrace response" | |
113 | .It 201 Ta mtrace Ta "mtrace messages" | |
114 | .El | |
115 | .Pp | |
116 | The following codes are defined: | |
117 | .Bl -column x xxxxxxxxxxxx xxxxxxxx -offset indent | |
118 | .It Sy Num Ta Sy Abbrev. Ta Sy Type Ta | |
119 | .Sy Description | |
120 | .It 0 Ta noroute-unr Ta unreach Ta "No route to destination" | |
121 | .It 1 Ta admin-unr Ta unreach Ta "Administratively prohibited" | |
122 | .It 2 Ta beyond-unr Ta unreach Ta "Beyond scope of source address" | |
123 | .It 2 Ta notnbr-unr Ta unreach Ta "Not a neighbor (obselete)" | |
124 | .It 3 Ta addr-unr Ta unreach Ta "Address unreachable" | |
125 | .It 4 Ta port-unr Ta unreach Ta "Port unreachable" | |
126 | .It 0 Ta transit Ta timex Ta "Time exceeded in transit" | |
127 | .It 1 Ta reassemb Ta timex Ta "Time exceeded in reassembly" | |
128 | .It 0 Ta badhead Ta paramprob Ta "Erroneous header field" | |
129 | .It 1 Ta nxthdr Ta paramprob Ta "Unrecognized next header" | |
130 | .It 2 Ta "" Ta redir Ta "Unrecognized option" | |
131 | .It 0 Ta redironlink Ta redir Ta "Redirection to on-link node" | |
132 | .It 1 Ta redirrouter Ta redir Ta "Redirection to better router" | |
133 | .El | |
134 | .Ss Headers | |
135 | All ICMPv6 messages are prefixed with an ICMPv6 header. | |
136 | This header corresponds to the | |
137 | .Vt icmp6_hdr | |
138 | structure and has the following definition: | |
139 | .Bd -literal -offset indent | |
140 | struct icmp6_hdr { | |
141 | u_int8_t icmp6_type; /* type field */ | |
142 | u_int8_t icmp6_code; /* code field */ | |
143 | u_int16_t icmp6_cksum; /* checksum field */ | |
144 | union { | |
145 | u_int32_t icmp6_un_data32[1]; /* type-specific */ | |
146 | u_int16_t icmp6_un_data16[2]; /* type-specific */ | |
147 | u_int8_t icmp6_un_data8[4]; /* type-specific */ | |
148 | } icmp6_dataun; | |
149 | } __packed; | |
150 | ||
151 | #define icmp6_data32 icmp6_dataun.icmp6_un_data32 | |
152 | #define icmp6_data16 icmp6_dataun.icmp6_un_data16 | |
153 | #define icmp6_data8 icmp6_dataun.icmp6_un_data8 | |
154 | #define icmp6_pptr icmp6_data32[0] /* parameter prob */ | |
155 | #define icmp6_mtu icmp6_data32[0] /* packet too big */ | |
156 | #define icmp6_id icmp6_data16[0] /* echo request/reply */ | |
157 | #define icmp6_seq icmp6_data16[1] /* echo request/reply */ | |
158 | #define icmp6_maxdelay icmp6_data16[0] /* mcast group membership*/ | |
159 | .Ed | |
160 | .Pp | |
161 | .Va icmp6_type | |
162 | describes the type of the message. | |
163 | Suitable values are defined in | |
164 | .Aq Pa netinet/icmp6.h . | |
165 | .Va icmp6_code | |
166 | describes the sub-type of the message and depends on | |
167 | .Va icmp6_type . | |
168 | .Va icmp6_cksum | |
169 | contains the checksum for the message and is filled in by the | |
170 | kernel on outgoing messages. | |
171 | The other fields are used for type-specific purposes. | |
172 | .Ss Filters | |
173 | Because of the extra functionality of ICMPv6 in comparison to ICMPv4, | |
174 | a larger number of messages may be potentially received on an ICMPv6 | |
175 | socket. | |
176 | Input filters may therefore be used to restrict input to a subset of the | |
177 | incoming ICMPv6 messages so only interesting messages are returned by the | |
178 | .Xr recv 2 | |
179 | family of calls to an application. | |
180 | .Pp | |
181 | The | |
182 | .Vt icmp6_filter | |
183 | structure may be used to refine the input message set according to the | |
184 | ICMPv6 type. | |
185 | By default, all messages types are allowed on newly created raw ICMPv6 | |
186 | sockets. | |
187 | The following macros may be used to refine the input set: | |
188 | .Bl -tag -width Ds | |
189 | .It Fn "void ICMP6_FILTER_SETPASSALL" "struct icmp6_filter *filterp" | |
190 | Allow all incoming messages. | |
191 | .Va filterp | |
192 | is modified to allow all message types. | |
193 | .It Fn "void ICMP6_FILTER_SETBLOCKALL" "struct icmp6_filter *filterp" | |
194 | Ignore all incoming messages. | |
195 | .Va filterp | |
196 | is modified to ignore all message types. | |
197 | .It Fn "void ICMP6_FILTER_SETPASS" "int type" \ | |
198 | "struct icmp6_filter *filterp" | |
199 | Allow ICMPv6 messages with the given | |
200 | .Fa type . | |
201 | .Va filterp | |
202 | is modified to allow such messages. | |
203 | .It Fn "void ICMP6_FILTER_SETBLOCK" "int type" \ | |
204 | "struct icmp6_filter *filterp" | |
205 | Ignore ICMPv6 messages with the given | |
206 | .Fa type . | |
207 | .Va filterp | |
208 | is modified to ignore such messages. | |
209 | .It Fn "int ICMP6_FILTER_WILLPASS" "int type" \ | |
210 | "const struct icmp6_filter *filterp" | |
211 | Determine if the given filter will allow an ICMPv6 message of the given | |
212 | type. | |
213 | .It Fn "int ICMP6_FILTER_WILLBLOCK" "int type" \ | |
214 | "const struct icmp6_filter *filterp" | |
215 | Determine if the given filter will ignore an ICMPv6 message of the given | |
216 | type. | |
217 | .El | |
218 | .Pp | |
219 | The | |
220 | .Xr getsockopt 2 | |
221 | and | |
222 | .Xr setsockopt 2 | |
223 | calls may be used to obtain and install the filter on ICMPv6 sockets at | |
224 | option level | |
225 | .Dv IPPROTO_ICMPV6 | |
226 | and name | |
227 | .Dv ICMPV6_FILTER | |
228 | with a pointer to the | |
229 | .Vt icmp6_filter | |
230 | structure as the option value. | |
231 | .Ss "Non-privileged ICMPv6" | |
232 | .Pp | |
233 | .Tn ICMPv6 | |
234 | sockets can be opened with the | |
235 | .Dv SOCK_DGRAM | |
236 | socket type without requiring root privileges. The synopsis is the following: | |
237 | .Pp | |
238 | .Fn socket AF_INET6 SOCK_DGRAM IPPROTO_ICMPV6 | |
239 | .Pp | |
240 | This can only be used to send | |
241 | .Tn ICMPv6 | |
242 | echo requests to gauge the quality of the connectivity to a host, to receive | |
243 | destination unreachable message for path MTU discovery, or to receveive | |
244 | time exceeded message for traceroute. | |
245 | .Pp | |
246 | A socket opened with superuser privileges can send any kind of | |
247 | .Tn ICMPv6 | |
248 | message and can also use the | |
249 | .Xr ip6 4 | |
250 | options that require superuser privileges. | |
251 | .Sh SEE ALSO | |
252 | .Xr getsockopt 2 , | |
253 | .Xr recv 2 , | |
254 | .Xr send 2 , | |
255 | .Xr setsockopt 2 , | |
256 | .Xr socket 2 , | |
257 | .Xr getprotobyname 3 , | |
258 | .Xr inet6 4 , | |
259 | .Xr ip6 4 , | |
260 | .Xr netintro 4 | |
261 | .Rs | |
262 | .%A W. Stevens | |
263 | .%A M. Thomas | |
264 | .%T Advanced Sockets API for IPv6 | |
265 | .%N RFC 2292 | |
266 | .%D February 1998 | |
267 | .Re | |
268 | .Rs | |
269 | .%A A. Conta | |
270 | .%A S. Deering | |
271 | .%T "Internet Control Message Protocol (ICMPv6) for the Internet" \ | |
272 | "Protocol Version 6 (IPv6) Specification" | |
273 | .%N RFC 2463 | |
274 | .%D December 1998 | |
275 | .Re |