inet6(7P)




NAME

     inet6 - Internet protocol family for Internet Protocol  ver-
     sion 6


SYNOPSIS

     #include <sys/types.h>
     #include <netinet/in.h>


DESCRIPTION

     The inet6 protocol family implements a collection of  proto-
     cols  that are centered around the Internet Protocol version
     6 (IPv6) and share a common address format. The inet6   pro-
     tocol  family  can  be  accessed using the socket interface,
     where it supports the SOCK_STREAM, SOCK_DGRAM,  and SOCK_RAW
     socket  types, or the Transport Level Interface (TLI), where
     it supports   the  connectionless  (T_CLTS)  and  connection
     oriented (T_COTS_ORD) service types.


PROTOCOLS

     The Internet protocol family for IPv6 included the  Internet
     Protocol  Version  6 (IPv6), the Neighbor Discovery Protocol
     (NDP), the Internet Control Message Protocol  (ICMPv6),  the
     Transmission  Control  Protocol (TCP), and the User Datagram
     Protocol (UDP).

     TCP supports the socket interface's SOCK_STREAM  abstraction
     and  TLI's   T_COTS_ORD   service   type.   UDP supports the
     SOCK_DGRAM socket abstraction and  the  TLI  T_CLTS  service
     type. See tcp(7P) and udp(7P). A direct interface to IPv6 is
     available using the socket interface. See ip6(7P). ICMPv6 is
     used  by  the kernel to handle and report errors in protocol
     processing. It  is also accessible  to  user  programs.  See
     icmp6(7P).  NDP  is used to translate 128-bit IPv6 addresses
     into 48-bit Ethernet addresses.

     IPv6 addresses come in three types:  unicast,  anycast,  and
     multicast.  A  unicast address is an identifier for a single
     network interface. An anycast address is an identifier for a
     set  of  interfaces;  a packet sent to an anycast address is
     delivered to the "nearest"   interface  identified  by  that
     address,  pursuant to the routing protocol's measure of dis-
     tance. A multicast address is an identifier  for  a  set  of
     interfaces;   a  packet  sent  to  a  multicast  address  is
     delivered to all  interfaces  identified  by  that  address.
     There  are  no  broadcast  addresses  as such in IPv6; their
     functionality is superseded by multicast addresses.

     For IPv6 addresses, there are three scopes within which uni-
     cast  addresses  are  guaranteed  to be unique. The scope is
     indicated by the address prefix.  The  three  varieties  are
     link-local  (the  address  is unique on that physical link),
     site-local (the address is unique  within  that  site),  and
     global (the address is globally unique).

     The three highest order  bits for global  unicast  addresses
     are  set  to  001. The ten highest order bits for site-local
     addresses are set to 1111 1110 11.  The  ten  highest  order
     bits  for  link-local addresses are set to 1111 1110 11. For
     multicast addresses, the eight highest order bits are set to
     1111 1111. Anycast addresses have the same format as unicast
     addresses.

     IPv6 addresses do not follow the concept of "address  class"
     seen in IP.

     A global unicast address is divided into the following  seg-
     ments:

        o  The first three bits are the Format Prefix identifying
           a unicast address.

        o  The next 13 bits are the Top-Level  Aggregation  (TLA)
           identifier.  For example, the identifier could specify
           the ISP.

        o  The next eight bits are reserved for future use.

        o  The next 24 bits are the Next-Level Aggregation  (NLA)
           identifier.

        o  The next 16 bits are the Site-Level Aggregation  (SLA)
            identifier.

        o  The last 64 bits are the interface ID. This will  most
           often  be  the  hardware  address  of the link in IEEE
           EUI-64 format.

     Link-local unicast addresses are divided in this manner:

        o  The first ten bits are the Format Prefix identifying a
           link-local address.

        o  The next 54 bits are zero.

        o  The last 64 bits are the interface ID. This will  most
           often  be  the  hardware  address  of the link in IEEE
           EUI-64 format.

     Site-local unicast addresses are divided in this manner:

        o  The first ten bits are the Format Prefix identifying a
           site-local address.

        o  The next 38 bits are zero.
        o  The next 16 bits are the subnet ID.

        o  The last 64 bits are the interface ID. This will  most
           often  be  the  hardware  address  of the link in IEEE
           EUI-64 format.


ADDRESSING

     IPv6 addresses are sixteen byte quantities, stored  in  net-
     work byte order. The socket API uses the sockaddr_in6 struc-
     ture when passing IPv6 addresses between an application  and
     the  kernel.  The  sockaddr_in6  structure has the following
     members:

     sa_familty_t     sin6_family;
     in_port_t        sin6_port;
     uint32_t         sin6_flowinfo;
     struct in6_addr  sin6_addr;
     uint32_t         sin6_scope_id;
     uint32_t         __sin6_src_id;

     Library routines are provided to  manipulate  structures  of
     this form. See inet(3SOCKET).

     The sin6_addr field of the sockaddr_in6 structure  specifies
     a  local  or remote IPv6 address. Each network interface has
     one or more IPv6 addresses configured, that is, a link-local
     address,  a  site-local address, and one or more global uni-
     cast IPv6 addresses. The special value of all zeros  may  be
     used on this field to test for "wildcard" matching. Given in
     a bind(3SOCKET) call,  this  value  leaves  the  local  IPv6
     address  of  the socket unspecified, so that the socket will
     receive connections or messages directed at any of the valid
     IPv6  addresses  of the system. This can prove useful when a
     process neither knows nor cares what the local IPv6  address
     is,  or  when a process wishes to receive requests using all
     of its network interfaces. The sockaddr_in6 structure  given
     in  the bind() call must specify an in6_addr value of either
     all zeros or one  of  the  system's  valid  IPv6  addresses.
     Requests  to  bind  any  other address will elicit the error
     EADDRNOTAVAI. When a connect(3SOCKET) call  is  made  for  a
     socket  that  has  a wildcard local address, the system sets
     the sin6_addr field of the socket to the IPv6 address of the
     network interface through which the packets for that connec-
     tion are routed.

     The sin6_port field of the sockaddr_in6 structure  specifies
     a  port  number  used  by TCP or UDP. The local port address
     specified in a bind() call is restricted to be greater  than
     IPPORT_RESERVED   (defined  in  <netinet/in.h>)  unless  the
     creating process is running as the super-user,  providing  a
     space of protected port numbers. In addition, the local port
     address cannot be in use by any socket of the  same  address
     family  and  type.  Requests to bind sockets to port numbers
     being used by other sockets return the error EADDRINUSE.  If
     the local port address is specified as 0, the system picks a
     unique port address greater than IPPORT_RESERVED.  A  unique
     local  port  address is also selected when a socket which is
     not bound is used in a connect(3SOCKET)  or  sendto()  call.
     See  send(3SOCKET).  This  allows  programs that do not care
     which local port number is used to set up TCP connections by
     simply  calling  socket(3SOCKET)  and then connect(3SOCKET),
     and then sending UDP datagrams with a socket() call followed
     by a sendto() call.

     Although this implementation  restricts  sockets  to  unique
     local port numbers, TCP allows multiple simultaneous connec-
     tions involving the same local port number so  long  as  the
     remote IPv6 addresses or port numbers are different for each
     connection. Programs may explicitly override the socket res-
     triction by setting the SO_REUSEADDR socket option with set-
     sockopt(). See getsockopt(3SOCKET).

     In addition, the same port may  be  bound  by  two  separate
     sockets if one is an IP socket and the other an IPv6 socket.

     TLI applies somewhat different semantics to the  binding  of
     local port numbers. These semantics apply when Internet fam-
     ily protocols are used using the TLI.


SEE ALSO

     ioctl(2),                                     bind(3SOCKET),
     connect(3SOCKET),getipnodebyaddr(3SOCKET),
     getipnodebyname(3SOCKET),getprotobyname(3SOCKET),
     getservbyname(3SOCKET),  getsockopt(3SOCKET), inet(3SOCKET),
     send(3SOCKET), icmp6(7P), ip6(7P), tcp(7P), udp(7P)

     Conta, A. and Deering, S., Internet Control Message Protocol
     (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specifi-
     cation, RFC 1885, December 1995.

     Deering, S. and Hinden, B.,  Internet  Protocol,  Version  6
     (IPv6) Specification, RFC 1883, December 1995.

     Hinden, B. and Deering, S.,  IP Version 6 Addressing  Archi-
     tecture, RFC 1884, December 1995.


NOTES

     The IPv6 support is subject to change as the Internet proto-
     cols  develop.  Users  should  not  depend on details of the
     current implementation, but rather the services exported.


Man(1) output converted with man2html