IP6(4P)                           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 may use       
IPv6 through higher-level protocols such as the Transmission Control
       Protocol (
TCP) or the User Datagram Protocol (
UDP), or may interface
       directly to 
IPv6. See 
tcp(4P) and 
udp(4P). Direct access may 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       extension headers defined in the 
IPv6 specification may be set in
       outgoing datagrams.
APPLICATION PROGRAMMING INTERFACE
       The 
STREAMS driver 
/dev/rawip6 is the 
TLI transport provider that
       provides raw access to 
IPv6.
       Raw 
IPv6 sockets are connectionless and are normally used with the       
sendto() and 
recvfrom() calls (see 
send(3SOCKET) and 
recv(3SOCKET)),
       although the 
connect(3SOCKET) call may also be used to fix the
       destination for future datagrams. In this case, the 
read(2) or       
recv(3SOCKET) and 
write(2) or 
send(3SOCKET) calls may be used.
       Ancillary data may also be sent or received over raw 
IPv6 sockets
       using the 
sendmsg(3SOCKET) and 
recvmsg(3SOCKET) 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 may be specified or received as
       ancillary data to a 
sendmsg(3SOCKET) or 
recvmsg(3SOCKET) system call,
       or may be specified as "sticky" options on a per-socket basis by
       using the 
setsockopt(3SOCKET) 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(3SOCKET) 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(3SOCKET) is not supported for 
SOCK_STREAM upper level
       protocols such as 
TCP, ancillary data is unsupported for 
TCP.  Sticky
       options, however, are supported.
       Since 
sendmsg(3SOCKET) 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
                               argument; 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 will use on outgoing
                               unicast datagrams sent from that socket. The
                               initial default is 
60.       
IPV6_MINHOPCOUNT                             Controls the minimum value of the IPv6 header's
                             hop limit field that is required in an IPv6
                             packet before accepting it. If the value is set
                             to 100, then only IPv6 packets with a TTL of
                             100 or higher are accepted. Packets with a TTL
                             less than the minimum are dropped. This option
                             takes an integer as an argument and must be in
                             the range of 0 to 255. A value of 0 indicates
                             that all packets should be accepted.       
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 will compute
                               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 may be set as sticky options with       
setsockopt(3SOCKET) or as ancillary data to a 
sendmsg(3SOCKET) system
       call:       
IPV6_PKTINFO                            Set the source address and/or interface out
                            which the packet(s) will be sent.  Takes a                            
struct in6_pktinfo as the parameter.       
IPV6_HOPLIMIT                            Set the initial hoplimit for outbound datagrams.
                            Takes an integer as the parameter. Note: 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
                            destination 
IPv6 address of the datagram, this
                            is equivalent 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 parameter. Currently, only type 0 routing
                            headers are supported.       
IPV6_RTHDRDSTOPTS                            Specify one or more destination options for all
                            intermediate hops. May be configured, but will
                            not be applied unless an 
IPv6 routing header is
                            also configured. Variable length. Takes a
                            complete 
IPv6 destination options extension
                            header as the parameter.       
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
                                   interface index.       
IPV6_LEAVE_GROUP                                   Leave a multicast group. Takes a 
struct                                   ipv6_mreq as the parameter; the structure
                                   contains a multicast address and an
                                   interface 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
                                   specified group must be joined previously
                                   using IPV6_JOIN_GROUP or
                                   MCAST_JOIN_GROUP. Takes a 
struct                                   group_source_req as the parameter. The
                                   structure contains an interface index, a
                                   multicast address, and a source address.       
MCAST_UNBLOCK_SOURCE                                   Unblock multicast packets which were
                                   previously blocked using
                                   MCAST_BLOCK_SOURCE. Takes a 
struct                                   group_source_req as the parameter. The
                                   structure contains an interface 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
                                   multicast 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
                                   multicast 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
                                   packets. 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 argument. Its value becomes the new
                                   default value for 
ip6_hops that 
IPv6 will
                                   use on outgoing multicast datagrams sent
                                   from that socket. The initial default is                                   
1.       
IPV6_MULTICAST_LOOP                                   Loopback for multicast datagrams.
                                   Normally multicast datagrams are
                                   delivered to members on the sending host.
                                   Setting the unsigned character argument
                                   to 0 will cause 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 may be applied.
       This option forces datagrams being sent to bypass routing and
       forwarding by forcing the 
IPv6 hoplimit field to 
1, meaning that the
       packet will not be forwarded by routers.
       Raw 
IPv6 datagrams can also be sent and received using the 
TLI       connectionless primitives.
       Datagrams flow through the 
IPv6 layer in two directions: from the
       network 
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 will compute
       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 will 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(8)'s
       ipv6-forwarding option.
       For backwards compatibility, IPv6 forwarding can be enabled or
       disabled using 
ndd(8)'s ip_forwarding variable.  It is set to 1 if
       IPv6 forwarding is enabled, or 0 if it is disabled.
       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       
ifconfig(8)'s 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 will neither be forwarded from
       this interface to others, nor forwarded to this interface.  Setting
       the ip6_forwarding variable sets all of the IPv6 interfaces'
       IFF_ROUTER flags.
       For backwards compatibility, each interface creates an       
<ifname>ip6_forwarding /dev/ip6 variable that can be modified using       
ndd(8). An interface's 
:ip6_forwarding ndd variable is a boolean
       variable that mirrors the status of its IFF_ROUTER interface flag. It
       is set to 1 if the flag is set, or 0 if it is clear. This interface
       specific 
<ifname>:ip6_forwarding ndd variable is obsolete and may be
       removed in a future release of Solaris. The 
ifconfig(8) router and
       -router interfaces are preferred.
       The 
IPv6 layer will send 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 will be sent if the 
ip6_hops field in
       the 
IPv6 header drops to zero in the process of forwarding a
       datagram. A "
destination unreachable" message will be 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 will be sent
       by a router when it encounters a firewall prohibition; it will be
       sent by a destination node when the transport protocol (that is, 
TCP)
       has no listener. A "
packet too big" message will be 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 will be
       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
       processed.
       The 
IPv6 layer supports fragmentation and reassembly. Datagrams are
       fragmented on output if the datagram is larger than the maximum
       transmission unit (
MTU) of the network interface. Fragments of
       received datagrams are dropped from the reassembly queues if the
       complete datagram 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), 
bind(3SOCKET), 
connect(3SOCKET),       
getsockopt(3SOCKET), 
recv(3SOCKET), 
recvmsg(3SOCKET), 
send(3SOCKET),       
sendmsg(3SOCKET), 
setsockopt(3SOCKET), 
icmp6(4P), 
if_tcp(4P),       
inet6(4P), 
ipsec(4P), 
routing(4P), 
tcp(4P), 
udp(4P),       
defaultrouter(5), 
smf(7), 
ndd(8), 
routeadm(8), 
svcadm(8)       Deering, S. and Hinden, B.  
RFC 2460, Internet Protocol, Version 6       (IPv6) Specification. The Internet Society. December, 1998.
       Stevens, W., and Thomas, M. 
RFC 2292, Advanced Sockets API for IPv6.
       Network Working Group. February 1998.
DIAGNOSTICS
       A socket operation may 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
                          performed, 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                          "
destination 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
                          buffers 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 2292) 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.
                               April 17, 2024                        IP6(4P)