1.\" Copyright (C) 1999 WIDE Project. 2.\" All rights reserved. 3.\" 4.\" Redistribution and use in source and binary forms, with or without 5.\" modification, are permitted provided that the following conditions 6.\" are met: 7.\" 1. Redistributions of source code must retain the above copyright 8.\" notice, this list of conditions and the following disclaimer. 9.\" 2. Redistributions in binary form must reproduce the above copyright 10.\" notice, this list of conditions and the following disclaimer in the 11.\" documentation and/or other materials provided with the distribution. 12.\" 3. Neither the name of the project nor the names of its contributors 13.\" may be used to endorse or promote products derived from this software 14.\" without specific prior written permission. 15.\" 16.\" THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND 17.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19.\" ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE 20.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26.\" SUCH DAMAGE. 27.\" 28.\" Copyright (c) 1986, 1991, 1993 29.\" The Regents of the University of California. All rights reserved. 30.\" 31.\" Redistribution and use in source and binary forms, with or without 32.\" modification, are permitted provided that the following conditions 33.\" are met: 34.\" 1. Redistributions of source code must retain the above copyright 35.\" notice, this list of conditions and the following disclaimer. 36.\" 2. Redistributions in binary form must reproduce the above copyright 37.\" notice, this list of conditions and the following disclaimer in the 38.\" documentation and/or other materials provided with the distribution. 39.\" 3. All advertising materials mentioning features or use of this software 40.\" must display the following acknowledgement: 41.\" This product includes software developed by the University of 42.\" California, Berkeley and its contributors. 43.\" 4. Neither the name of the University nor the names of its contributors 44.\" may be used to endorse or promote products derived from this software 45.\" without specific prior written permission. 46.\" 47.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 48.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 49.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 50.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 51.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 52.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 53.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 54.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 55.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 56.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 57.\" SUCH DAMAGE. 58.\" 59.\" KAME $Id: icmp6.4,v 1.1 1999/12/17 09:47:01 itojun Exp $ 60.\" $FreeBSD$ 61.\" 62.Dd March 13, 2000 63.Dt ICMP6 4 64.Os KAME 65." 66.Sh NAME 67.Nm icmp6 68.Nd Internet Control Message Protocol for IPv6 69." 70.Sh SYNOPSIS 71.Fd #include <sys/types.h> 72.Fd #include <sys/socket.h> 73.Fd #include <netinet/in.h> 74.Fd #include <netinet/icmp6.h> 75.Ft int 76.Fn socket AF_INET6 SOCK_RAW proto 77." 78.Sh DESCRIPTION 79.Tn ICMPv6 80is the error and control message protocol used 81by 82.Tn IPv6 83and the Internet protocol family. 84It may be accessed through a 85.Dq raw socket 86for network monitoring and diagnostic functions. 87The 88.Fa proto 89parameter to the socket call to create an 90.Tn ICMPv6 91socket is obtained from 92.Xr getprotobyname 3 , 93or you can use 94.Dv IPPROTO_ICMPV6 . 95.Tn ICMPv6 96sockets are connectionless, and are normally used with the 97.Xr sendto 2 98and 99.Xr recvfrom 2 100calls, though the 101.Xr connect 2 102call may also be used to fix the destination for future packets 103(in which case the 104.Xr read 2 105or 106.Xr recv 2 107and 108.Xr write 2 109or 110.Xr send 2 111system calls may be used). 112.Pp 113Outgoing packets automatically have an 114.Tn IPv6 115header prepended to them 116.Pq based on the destination address . 117.Tn ICMPv6 118pseudo header checksum field 119.Pq Li icmp6_cksum 120will be filled automatically by the kernel. 121Incoming packets are received without the 122.Tn IPv6 123header nor IPv6 extension headers. 124Notice that this behavior is opposite from 125.Tn IPv4 126raw sockets and. 127.Tn ICMPv4 128sockets. 129.Pp 130.Ss ICMPv6 type/code filter 131Each 132.Tn ICMPv6 133raw socket has an associated filter whose datatype is defined as 134.Li struct icmp6_filter ; 135.Pp 136This structure, along with the macros and constants defined later in 137this section, are defined as a result of including the 138.Aq Li netinet/icmp6.h 139header. 140.Pp 141The current filter is fetched and stored using 142.Xr getsockopt 2 143and 144.Xr setsockopt 2 145with a level of 146.Dv IPPROTO_ICMPV6 147and an option name of 148.Dv ICMP6_FILTER . 149.Pp 150Six macros operate on an icmp6_filter structure: 151.\" is "Fn" legal for macros? 152.Bl -item -compact -offset indent 153.It Ft void 154.Fn ICMP6_FILTER_SETPASSALL "struct icmp6_filter *" 155.It Ft void 156.Fn ICMP6_FILTER_SETBLOCKALL "struct icmp6_filter *" 157.It Ft void 158.Fn ICMP6_FILTER_SETPASS "int" "struct icmp6_filter *" 159.It Ft void 160.Fn ICMP6_FILTER_SETBLOCK "int" "struct icmp6_filter *" 161.It Ft int 162.Fn ICMP6_FILTER_WILLPASS "int" "const struct icmp6_filter *" 163.It Ft int 164.Fn ICMP6_FILTER_WILLBLOCK "int" "const struct icmp6_filter *" 165.El 166.Pp 167The first argument to the last four macros 168.Pq an integer 169is an 170.Tn ICMPv6 171message type, between 0 and 255. 172The pointer argument to all six 173macros is a pointer to a filter that is modified by the first four 174macros examined by the last two macros. 175.Pp 176The first two macros, 177.Dv SETPASSALL 178and 179.Dv SETBLOCKALL , 180let us specify that 181all 182.Tn ICMPv6 183messages are passed to the application or that all 184.Tn ICMPv6 185messages are blocked from being passed to the application. 186.Pp 187The next two macros, 188.Dv SETPASS 189and 190.Dv SETBLOCK , 191let us specify that 192messages of a given 193.Tn ICMPv6 194type should be passed to the application 195or not passed to the application 196.Pq blocked . 197.Pp 198The final two macros, 199.Dv WILLPASS 200and 201.Dv WILLBLOCK , 202return true or false 203depending whether the specified message type is passed to the 204application or blocked from being passed to the application by the 205filter pointed to by the second argument. 206.Pp 207When an 208.Tn ICMPv6 209raw socket is created, it will by default pass all 210.Tn ICMPv6 211message types to the application. 212.Pp 213For further discussions see RFC2292. 214.\" 215.Sh DIAGNOSTICS 216A socket operation may fail with one of the following errors returned: 217.Bl -tag -width [EADDRNOTAVAIL] 218.It Bq Er EISCONN 219when trying to establish a connection on a socket which 220already has one, or when trying to send a datagram with the destination 221address specified and the socket is already connected; 222.It Bq Er ENOTCONN 223when trying to send a datagram, but 224no destination address is specified, and the socket hasn't been 225connected; 226.It Bq Er ENOBUFS 227when the system runs out of memory for 228an internal data structure; 229.It Bq Er EADDRNOTAVAIL 230when an attempt is made to create a 231socket with a network address for which no network interface exists. 232.El 233." 234.Sh SEE ALSO 235.Xr send 2 , 236.Xr recv 2 , 237.Xr intro 4 , 238.Xr inet6 4 , 239.Xr ip6 4 240.Rs 241.%A W. Stevens 242.%A M. Thomas 243.%R RFC 244.%N 2292 245.%D February 1998 246.%T "Advanced Sockets API for IPv6" 247.Re 248.Rs 249.%A A. Conta 250.%A S. Deering 251.%R RFC 252.%N 2463 253.%D December 1998 254.%T "Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification" 255.Re 256." 257.Sh HISTORY 258The implementation is based on KAME stack 259.Po 260which is decendant of WIDE hydrangea IPv6 stack kit 261.Pc . 262.Pp 263Part of the document was shamelessly copied from RFC2292. 264