ip6(4p) 맨 페이지 - 윈디하나의 솔라나라

개요

섹션
맨 페이지 이름
검색(S)

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)
맨 페이지 내용의 저작권은 맨 페이지 작성자에게 있습니다.
RSS ATOM XHTML 5 CSS3