Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
ip6(7P)								       ip6(7P)

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);

       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(7P)  and udp(7P). 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	exten-
       sion 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 pro-
       vides 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 destina-
       tion  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 op-
       tion. IPv6 header values	may be specified or received as	ancillary data
       to a sendmsg(3SOCKET) or	recvmsg(3SOCKET) system	call, or may be	speci-
       fied as "sticky"	options	on a per-socket	basis by  using	 the  setsock-
       opt(3SOCKET)  system  call. Such	sticky options are applied to all out-
       bound 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	proto-
       cols, 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 transmission of packets to this
			       interface. Takes	an integer as an argument; the
			       integer is the selected interace	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_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	check-
			       sum 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(7P).

       IPV6_DONTFRAG	       Boolean.	Control	fragmentation.

       IPV6_USE_MIN_MTU	       Boolean.	 Use  the minimum MTU for transmitting
			       traffic.

       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(7P).

       The following options are boolean switches controlling the reception of
       ancillary data:

       IPV6_RECVPKTINFO	       Enable/disable  receipt of the index of the in-
			       terface the packet arrived on, and of  the  in-
			       bound 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  setsock-
       opt(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 data-
			       grams. Takes an integer as the parameter. Note:
			       This  option  sets the hoplimit only for	ancil-
			       lary 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. Vari-
			       able length. Takes a complete  IPv6  hop-by-hop
			       options extension header	as the parameter.

       IPV6_DSTOPTS	       Specify	one or more destination	options. Vari-
			       able 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 com-
			       plete 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  con-
			       tains  a	multicast address and an interface in-
			       dex.

       IPV6_LEAVE_GROUP	       Leave  a	 multicast  group.  Takes   a	struct
			       ipv6_mreq  as the parameter; the	structure con-
			       tains a multicast address and an	interface  in-
			       dex.

       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	multi-
			       cast  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	struc-
			       ture 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	multi-
			       cast 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	speci-
			       fied address. Takes a  struct  group_source_req
			       as the parameter. The structure contains	an in-
			       terface	index,	a  multicast  address,	and  a
			       source address.

       MCAST_LEAVE_SOURCE_GROUPStop  receiving packets for the given multicast
			       group whose source address matches  the	speci-
			       fied  address.  Takes a struct group_source_req
			       as the parameter. The structure contains	an in-
			       terface	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  se-
			       lected 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	multi-
			       cast  datagrams sent from that socket. The ini-
			       tial default is 1.

       IPV6_MULTICAST_LOOP     Loopback	for multicast datagrams. Normally mul-
			       ticast  datagrams  are  delivered to members on
			       the sending host. Setting the unsigned  charac-
			       ter  argument  to 0 will	cause the opposite be-
			       havior.

       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  forward-
       ing  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  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  In-
       ternet Control Message Protocol (ICMPv6)	for the	Internet Protocol Ver-
       sion 6 (IPv6) is	logically a part of IPv6. See icmp6(7P).

       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(1M)
       to  enable the ipv6-forwarding option. IPv6 forwarding is configured at
       boot time based on the setting of  routeadm(1M)'s  ipv6-forwarding  op-
       tion.

       For backwards compatibility, IPv6 forwarding can	be enabled or disabled
       using ndd(1M)'s ip_forwarding variable.	It is set to 1	if  IPv6  for-
       warding 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 if-
       config(1M)'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 oth-
       ers, nor	forwarded to this interface.  Setting the ip6_forwarding vari-
       able sets all of	the IPv6 interfaces' IFF_ROUTER	flags.

       For backwards compatibility, each interface creates an <ifname>ip6_for-
       warding /dev/ip6	variable that can be modified using ndd(1M). An	inter-
       face'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_for-
       warding ndd variable is obsolete	and may	be removed in a	future release
       of Solaris. The ifconfig(1M) router and	-router	 interfaces  are  pre-
       ferred.

       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 "desti-
       nation  unreachable"  message will be sent by a router or by the	origi-
       nating 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 encoun-
       ters 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 "pa-
       rameter 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	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.

       svcs(1),	  ndd(1M),   routeadm(1M),   svcadm(1M),   read(2),  write(2),
       bind(3SOCKET),  connect(3SOCKET),  getsockopt(3SOCKET),	recv(3SOCKET),
       recvmsg(3SOCKET), send(3SOCKET),	sendmsg(3SOCKET), setsockopt(3SOCKET),
       defaultrouter(4), smf(5), icmp6(7P), if_tcp(7P),	ipsec(7P),  inet6(7P),
       routing(7P), tcp(7P), udp(7P)

       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.

       A socket	operation may fail with	one of the following errors returned:

       EACCES		       A  bind()  operation  was attempted with	a "re-
			       served" 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  al-
			       ready 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_ac-
			       crights 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 in-
			       valid.

       EISCONN		       A connect() operation was attempted on a	socket
			       on which	a connect() operation had already been
			       performed, and the socket could not be success-
			       fully disconnected before making	the  new  con-
			       nection.

       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() op-
			       eration 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 re-
			       ceived.

       ENOTCONN		       A send()	or write() operation, or a sendto() or
			       sendmsg()  operation  not specifying an address
			       to which	the message should be  sent,  was  at-
			       tempted on a socket on which a connect()	opera-
			       tion 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.

       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(5),
       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(1M). The service's
       status can be queried using the svcs(1) command.

				 13 June 2005			       ip6(7P)

NAME | SYNOPSIS | APPLICATION PROGRAMMING INTERFACE

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=ip6&sektion=7p&manpath=SunOS+5.10>

home | help