svcadm(8)을 검색하려면 섹션에서 8 을 선택하고, 맨 페이지 이름에 svcadm을 입력하고 검색을 누른다.
ip6(4p)
ip6(4P) Network Protocols ip6(4P)
NAME
ip6 - Internet Protocol Version 6
SYNOPSIS
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip6.h>
s = socket(AF_INET6, SOCK_RAW, proto);
t = t_open ("/dev/rawip6", O_RDWR);
DESCRIPTION
The IPv6 protocol is the next generation of the internetwork datagram
delivery protocol of the Internet protocol family. Programs can use
IPv6 through higher-level protocols such as the Transmission Control
Protocol (TCP) or the User Datagram Protocol (UDP), or can interface
directly to IPv6. See tcp(4P) and udp(4P). Direct access can be by
means of the socket interface, using a "raw socket," or by means of the
Transport Level Interface (TLI). The protocol options and IPv6 exten‐
sion headers defined in the IPv6 specification can be set in outgoing
datagrams.
APPLICATION PROGRAMMING INTERFACE
The STREAMS driver /dev/rawip6 is the TLI transport provider that pro‐
vides raw access to IPv6.
Raw IPv6 sockets are connectionless and are normally used with the
sendto() and recvfrom() calls (see send(3C) and recv(3C)), although the
connect(3C) call can also be used to fix the destination for future
datagrams. In this case, the read(2) or recv(3C) and write(2) or
send(3C) calls can be used. Ancillary data can also be sent or received
over raw IPv6 sockets using the sendmsg(3C) and recvmsg(3C) system
calls.
Unlike raw IP, IPv6 applications do not include a complete IPv6 header
when sending; there is no IPv6 analog to the IP IP_HDRINCL socket
option. IPv6 header values can be specified or received as ancillary
data to a sendmsg(3C) or recvmsg(3C) system call, or can be specified
as sticky options on a per-socket basis by using the setsockopt(3C)
system call. Such sticky options are applied to all outbound packets
unless overridden by ancillary data. If any ancillary data is specified
in a sendmsg(3C) call, all sticky options not explicitly overridden
revert to default values for that datagram only; the sticky options
persist as set for subsequent datagrams.
Since sendmsg(3C) is not supported for SOCK_STREAM upper level proto‐
cols such as TCP, ancillary data is unsupported for TCP. Sticky
options, however, are supported.
Since sendmsg(3C) is supported for SOCK_DGRAM upper level protocols,
both ancillary data and sticky options are supported for UDP, ICMP6,
and raw IPv6 sockets.
The socket options supported at the IPv6 level are:
IPV6_BOUND_IF Limit reception and transmission of packets to
this interface. Takes an integer as an argu‐
ment; the integer is the selected interface
index.
IPV6_UNSPEC_SRC Boolean. Allow/disallow sending with a zero
source address.
IPV6_UNICAST_HOPS Default hop limit for unicast datagrams. This
option takes an integer as an argument. Its
value becomes the new default value for
ip6_hops that IPv6 uses on outgoing unicast
datagrams sent from that socket. The initial
default is 60.
IPV6_CHECKSUM Specify the integer offset in bytes into the
user data of the checksum location. Does not
apply to the ICMP6 protocol. Note: checksums
are required for all IPv6 datagrams; this is
different from IP, in which datagram checksums
were optional. IPv6 computes the ULP checksum
if the value in the checksum field is zero.
IPV6_SEC_OPT Enable or obtain IPsec security settings for
this socket. For more details on the protection
services of IPsec, see ipsec(4P).
IPV6_DONTFRAG Boolean. Control fragmentation.
IPV6_USE_MIN_MTU Controls whether path MTU discovery is used. If
set to 1, path MTU discovery is never used and
IPv6 packets are sent with the IPv6 minimum
MTU. If set to -1, path MTU discovery is not
used for multicast and multicast packets are
sent with the IPv6 minimum MTU. If set to 0,
path MTU is always performed.
IPV6_V6ONLY Boolean. If set, only V6 packets can be sent or
received
IPV6_SRC_PREFERENCES Enable or obtain Source Address Selection rule
settings for this socket. For more details on
the Source Address Selection rules, see
inet6(4P).
The following options are boolean switches controlling the reception of
ancillary data:
IPV6_RECVPKTINFO Enable/disable receipt of the index of the
interface the packet arrived on, and of the
inbound packet's destination address.
IPV6_RECVHOPLIMIT Enable/disable receipt of the inbound packet's
current hoplimit.
IPV6_RECVHOPOPTS Enable/disable receipt of the inbound packet's
IPv6 hop-by-hop extension header.
IPV6_RECVDSTOPTS Enable/disable receipt of the inbound packet's
IPv6 destination options extension header.
IPV6_RECVRTHDR Enable/disable receipt of the inbound packet's
IPv6 routing header.
IPV6_RECVRTHDRDSTOPTS Enable/disable receipt of the inbound packet's
intermediate-hops options extension header.
This option is obsolete. IPV6_RECVDSTOPTS
turns on receipt of both destination option
headers.
IPV6_RECVTCLASS Enable/disable receipt of the traffic class of
the inbound packet.
IPV6_RECVPATHMTU Enable/disable receipt of the path mtu of the
inbound packet.
The following options can be set as sticky options with setsockopt(3C)
or as ancillary data to a sendmsg(3C) system call:
IPV6_PKTINFO Set the source address and/or interface out which
the packet(s) is sent. Takes a struct in6_pktinfo
as the parameter.
IPV6_HOPLIMIT Set the initial hoplimit for outbound datagrams.
Takes an integer as the parameter. This option
sets the hoplimit only for ancillary data or
sticky options and does not change the default
hoplimit for the socket; see IPV6_UNICAST_HOPS and
IPV6_MULTICAST_HOPS to change the socket's default
hoplimit.
IPV6_NEXTHOP Specify the IPv6 address of the first hop, which
must be a neighbor of the sending host. Takes a
struct sockaddr_in6 as the parameter. When this
option specifies the same address as the destina‐
tion IPv6 address of the datagram, this is equiva‐
lent to the existing SO_DONTROUTE option.
IPV6_HOPOPTS Specify one or more hop-by-hop options. Variable
length. Takes a complete IPv6 hop-by-hop options
extension header as the parameter.
IPV6_DSTOPTS Specify one or more destination options. Variable
length. Takes a complete IPv6 destination options
extension header as the parameter.
IPV6_RTHDR Specify the IPv6 routing header. Variable length.
Takes a complete IPv6 routing header as the param‐
eter. Currently, only type 0 routing headers are
supported.
IPV6_RTHDRDSTOPTS Specify one or more destination options for all
intermediate hops. May be configured, but is not
applied unless an IPv6 routing header is also con‐
figured. Variable length. Takes a complete IPv6
destination options extension header as the param‐
eter.
IPV6_PATHMTU Get the path MTU associated with a connected
socket. Takes a ip6_mtuinfo as the parameter.
IPV6_TCLASS Set the traffic class associated with outgoing
packets. The parameter is an integer. If the
parameter is less then -1 or greater then 256,
EINVAL is returned. If the parameter is equal to
-1, use the default. If the parameter is between 0
and 255 inclusive, use that value.
The following options affect the socket's multicast behavior:
IPV6_JOIN_GROUP Join a multicast group. Takes a struct
ipv6_mreq as the parameter; the structure
contains a multicast address and an inter‐
face index.
IPV6_LEAVE_GROUP Leave a multicast group. Takes a struct
ipv6_mreq as the parameter; the structure
contains a multicast address and an inter‐
face index.
MCAST_JOIN_GROUP Functionally equivalent to IPV6_JOIN_GROUP.
Takes a struct group_req as the parameter.
The structure contains a multicast address
and an interface index.
MCAST_BLOCK_SOURCE Block multicast packets on a particular
multicast group whose source address
matches the given source address. The spec‐
ified group must be joined previously using
IPV6_JOIN_GROUP or MCAST_JOIN_GROUP. Takes
a struct group_source_req as the parame‐
ter. The structure contains an interface
index, a multicast address, and a source
address.
MCAST_UNBLOCK_SOURCE Unblock multicast packets which were previ‐
ously blocked using MCAST_BLOCK_SOURCE.
Takes a struct group_source_req as the
parameter. The structure contains an inter‐
face index, a multicast address, and a
source address.
MCAST_LEAVE_GROUP Functionally equivalent to
IPV6_LEAVE_GROUP. Takes a struct group_req
as the parameter. The structure contains a
multicast address and an interface index.
MCAST_JOIN_SOURCE_GROUP Begin receiving packets for the given mul‐
ticast group whose source address matches
the specified address. Takes a struct
group_source_req as the parameter. The
structure contains an interface index, a
multicast address, and a source address.
MCAST_LEAVE_SOURCE_GROUP Stop receiving packets for the given multi‐
cast group whose source address matches the
specified address. Takes a struct
group_source_req as the parameter. The
structure contains an interface index, a
multicast address, and a source address.
IPV6_MULTICAST_IF The outgoing interface for multicast pack‐
ets. This option takes an integer as an
argument; the integer is the interface
index of the selected interface.
IPV6_MULTICAST_HOPS Default hop limit for multicast datagrams.
This option takes an integer as an argu‐
ment. Its value becomes the new default
value for ip6_hops that IPv6 uses on outgo‐
ing multicast datagrams sent from that
socket. The initial default is 1.
IPV6_MULTICAST_LOOP Loopback for multicast datagrams. Normally
multicast datagrams are delivered to mem‐
bers on the sending host. Setting the
unsigned character argument to 0 causes the
opposite behavior.
The multicast socket options can be used with any datagram socket type
in the IPv6 family.
At the socket level, the socket option SO_DONTROUTE can be applied.
This option forces datagrams being sent to bypass routing and forward‐
ing by forcing the IPv6 hoplimit field to 1, meaning that the packet
is not forwarded by routers.
Raw IPv6 datagrams can also be sent and received using the TLI connec‐
tionless primitives.
Datagrams flow through the IPv6 layer in two directions: from the net‐
work up to user processes and from user processes down to the network.
Using this orientation, IPv6 is layered above the network interface
drivers and below the transport protocols such as UDP and TCP. The
Internet Control Message Protocol (ICMPv6) for the Internet Protocol
Version 6 (IPv6) is logically a part of IPv6. See icmp6(4P).
Unlike IP, IPv6 provides no checksum of the IPv6 header. Also unlike
IP, upper level protocol checksums are required. IPv6 computes the
ULP/data portion checksum if the checksum field contains a zero (see
IPV6_CHECKSUM option above).
IPv6 extension headers in received datagrams are processed in the IPv6
layer according to the protocol specification. Currently recognized
IPv6 extension headers include hop-by-hop options header, destination
options header, routing header (currently, only type 0 routing headers
are supported), and fragment header.
By default, the IPv6 layer does not forward IPv6 packets that are not
addressed to it. This behavior can be overridden by using routeadm(8)
to enable the ipv6-forwarding option. IPv6 forwarding is configured at
boot time based on the setting of routeadm's ipv6-forwarding option.
ipadm(8) can also be used to enable ipv6 forwarding on a global basis.
The ipadm set-prop subcommand along with the forwarding property is
used to enable system-wide forwarding of packets. The protocol for
which forwarding needs to be enabled is specified using the -m option.
See ipadm(8) for more details.
Additionally, finer-grained forwarding can be configured in IPv6. Each
interface can be configured to forward IPv6 packets by setting the
IFF_ROUTER interface flag. This flag can be set and cleared using the
ifconfig(8) router and -router options. If an interface's IFF_ROUTER
flag is set, packets can be forwarded to or from the interface. If it
is clear, packets is neither forwarded from this interface to others,
nor forwarded to this interface. Setting the global ipv6 forwarding
variable sets all of the IPv6 interfaces' IFF_ROUTER flags. Also, the
ipadm set-ifprop subcommand can be used to enable/disable per-interface
ipv6 forwarding. See ipadm(8) for more details. The ipadm set-ifprop
interfaces are preferred.
The IPv6 layer sends an ICMP6 message back to the source host in many
cases when it receives a datagram that can not be handled. A time
exceeded ICMP6 message is sent if the ip6_hops field in the IPv6
header drops to zero in the process of forwarding a datagram. A desti‐
nation unreachable message is sent by a router or by the originating
host if a datagram can not be sent on because there is no route to the
final destination; it is sent by a router when it encounters a firewall
prohibition; it is sent by a destination node when the transport proto‐
col (that is, TCP) has no listener. A packet too big message is sent by
a router if the packet is larger than the MTU of the outgoing link
(this is used for Path MTU Discovery). A parameter problem message is
sent if there is a problem with a field in the IPv6 header or any of
the IPv6 extension headers such that the packet cannot be fully pro‐
cessed.
The IPv6 layer supports fragmentation and reassembly. Datagrams are
fragmented on output if the datagram is larger than the maximum trans‐
mission unit (MTU) of the network interface. Fragments of received
datagrams are dropped from the reassembly queues if the complete data‐
gram is not reconstructed within a short time period.
Errors in sending discovered at the network interface driver layer are
passed by IPv6 back up to the user process.
SEE ALSO
svcs(1), read(2), write(2), send(3C), bind(3C), connect(3C), getsock‐
opt(3C), recv(3C), recvmsg(3C), sendmsg(3C), setsockopt(3C), icmp6(4P),
if_tcp(4P), inet6(4P), ipsec(4P), routing(4P), tcp(4P), udp(4P),
smf(7), ifconfig(8), ipadm(8), ndd(8), routeadm(8), svcadm(8)
Deering, S. and Hinden, R. RFC 8200, Internet Protocol, Version 6
(IPv6) Specification. Network Working Group. July 2017.
https://tools.ietf.org/html/rfc8200
Gilligan, R. RFC 3493, Basic Socket Interface Extensions for IPv6. Net‐
work Working Group. February 2003. https://tools.ietf.org/html/rfc3493
Stevens, W., Thomas, M., Nordmark, E., and Jinmei, T. RFC 3542,
Advanced Sockets API for IPv6. Network Working Group. May 2003.
https://tools.ietf.org/html/rfc3542
DIAGNOSTICS
A socket operation can fail with one of the following errors returned:
EPROTONOSUPPORT Unsupported protocol (for example, IPPROTO_RAW.)
EACCES A bind() operation was attempted with a "reserved"
port number and the effective user ID of the process
was not the privileged user.
EADDRINUSE A bind() operation was attempted on a socket with a
network address/port pair that has already been
bound to another socket.
EADDRNOTAVAIL A bind() operation was attempted for an address that
is not configured on this machine.
EINVAL A sendmsg() operation with a non-NULL msg_accrights
was attempted.
EINVAL A getsockopt() or setsockopt() operation with an
unknown socket option name was given.
EINVAL A getsockopt() or setsockopt() operation was
attempted with the IPv6 option field improperly
formed; an option field was shorter than the minimum
value or longer than the option buffer provided; the
value in the option field was invalid.
EISCONN A connect() operation was attempted on a socket on
which a connect() operation had already been per‐
formed, and the socket could not be successfully
disconnected before making the new connection.
EISCONN A sendto() or sendmsg() operation specifying an
address to which the message should be sent was
attempted on a socket on which a connect() operation
had already been performed.
EMSGSIZE A send(), sendto(), or sendmsg() operation was
attempted to send a datagram that was too large for
an interface, but was not allowed to be fragmented
(such as broadcasts).
ENETUNREACH An attempt was made to establish a connection via
connect(), or to send a datagram by means of
sendto() or sendmsg(), where there was no matching
entry in the routing table; or if an ICMP "destina‐
tion unreachable" message was received.
ENOTCONN A send() or write() operation, or a sendto() or
sendmsg() operation not specifying an address to
which the message should be sent, was attempted on a
socket on which a connect() operation had not
already been performed.
ENOBUFS The system ran out of memory for fragmentation buf‐
fers or other internal data structures.
ENOMEM The system was unable to allocate memory for an IPv6
socket option or other internal data structures.
ENOPROTOOPT An IP socket option was attempted on an IPv6 socket,
or an IPv6 socket option was attempted on an IP
socket.
ENOPROTOOPT Invalid socket type for the option.
NOTES
Applications using the sockets API must use the Advanced Sockets API
for IPv6 (RFC 3542) to see elements of the inbound packet's IPv6 header
or extension headers.
The ip6 service is managed by the service management facility, smf(7),
under the service identifier:
svc:/network/initial:default
Administrative actions on this service, such as enabling, disabling, or
requesting restart, can be performed using svcadm(8). The service's
status can be queried using the svcs(1) command.
Oracle Solaris 11.4 24 Feb 2021 ip6(4P)