ICMP6(4P) Protocols ICMP6(4P)
NAME
icmp6 - Internet Control Message Protocol for Internet Protocol
Version 6
SYNOPSIS
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip_icmp.h>
#include <netinet/icmp6.h>
s = socket(AF_INET6, SOCK_RAW, proto);
t = t_open("/dev/icmp6", O_RDWR);
DESCRIPTION
The
ICMP6 protocol is the error and control message protocol used
with Version 6 of the Internet Protocol. It is used by the kernel to
handle and report errors in protocol processing. It is also used for
IPv6 neighbor and router discovery, and for multicast group
membership queries and reports. It may also be accessed by programs
using the socket interface or the Transport Level Interface (
TLI) for
network monitoring and diagnostic functions. When used with the
socket interface, a "raw socket" type is used. The protocol number
for
ICMP6, used in the
proto parameter to the socket call, can be
obtained from
getprotobyname(3SOCKET).
ICMP6 file descriptors and
sockets are connectionless and are normally used with the
t_sndudata /
t_rcvudata and the
sendto() /
recvfrom() calls. They may also be
used with the
sendmsg()/
recvgmsg() calls when sending or receiving
ancillary data. In order to send
ICMP6 packets, a process needs the
PRIV_NET_ICMPACCESS privilege. (See
privileges(7) for more
information on privileges.)
Outgoing packets automatically have an Internet Protocol Version 6
(
IPv6) header and zero or more
IPv6 extension headers prepended.
These headers are prepended by the kernel. Unlike
ICMP for
IPv4, the
IP_HDRINCL option is not supported for
ICMP6, so
ICMP6 applications
neither build their own outbound
IPv6 headers, nor do they receive
the inbound
IPv6 headers with received data.
IPv6 extension headers
and relevant fields of the
IPv6 header may be set or received as
ancillary data to a
sendmsg(3SOCKET) or
recvmsg(3SOCKET) system call.
Each of these fields and extension headers may also be set on a per
socket basis with the
setsockopt(3SOCKET) system call. Such "sticky"
options are used on all outgoing packets unless overridden by
ancillary data. When any ancillary data is present with a
sendmsg(3SOCKET) system call, all sticky options are ignored for that
system call, but subsequently remain configured.
ICMP6 is a datagram protocol layered above
IPv6. Received
ICMP6 messages may be reflected back to users of higher-level protocols
such as
TCP or
UDP as error returns from system calls. A copy of each
ICMP6 error message received by the system is provided to every
holder of an open
ICMP6 socket or
TLI descriptor.
SEE ALSO
t_rcvudata(3NSL),
t_sndudata(3NSL),
getprotobyname(3SOCKET),
recv(3SOCKET),
recvmsg(3SOCKET),
send(3SOCKET),
sendmsg(3SOCKET),
setsockopt(3SOCKET),
inet6(4P),
ip6(4P),
routing(4P),
privileges(7) Conta, A. and Deering, S.,
RFC 2463, Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification, The Internet Society, December 1998.
DIAGNOSTICS
A socket operation may fail with one of the following errors
returned:
EISCONN An attempt was made to establish a connection on a
socket which already has one, or when trying to send
a datagram with the destination address specified
and the socket is already connected.
ENOTCONN An attempt was made to send a datagram, but no
destination address is specified, and the socket has
not been connected.
ENOBUFS The system ran out of memory for an internal data
structure.
EADDRNOTAVAIL An attempt was made to create a socket with a
network address for which no network interface
exists.
ENOMEM The system was unable to allocate memory for an
internal data structure.
ENOPROTOOPT An attempt was made to set an
IPv4 socket option on
an
IPv6 socket.
EINVAL An attempt was made to set an invalid or malformed
socket option.
EAFNOSUPPORT An attempt was made to bind or connect to an
IPv4 or
mapped address, or to specify an
IPv4 or mapped
address as the next hop.
December 3, 2015 ICMP6(4P)