2008-08-08 16:41:48 +00:00
|
|
|
.\" This man page is Copyright (C) 2000 Andi Kleen <ak@muc.de>.
|
|
|
|
.\" Permission is granted to distribute possibly modified copies
|
|
|
|
.\" of this page provided the header is included verbatim,
|
|
|
|
.\" and in case of nontrivial modification author and date
|
|
|
|
.\" of the modification is added to the header.
|
|
|
|
.\" $Id: ipv6.7,v 1.3 2000/12/20 18:10:31 ak Exp $
|
2012-12-15 16:45:45 +00:00
|
|
|
.\"
|
|
|
|
.\" The following socket options are undocumented
|
|
|
|
.\" All of the folloing are from:
|
|
|
|
.\" commit 333fad5364d6b457c8d837f7d05802d2aaf8a961
|
|
|
|
.\" Author: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
|
|
|
|
.\" Support several new sockopt / ancillary data in Advanced API (RFC3542).
|
|
|
|
.\" IPV6_2292PKTINFO (2.6.14)
|
|
|
|
.\" Formerly IPV6_PKTINFO
|
|
|
|
.\" IPV6_2292HOPOPTS (2.6.14)
|
|
|
|
.\" Formerly IPV6_HOPOPTS, which is documented
|
|
|
|
.\" IPV6_2292DSTOPTS (2.6.14)
|
|
|
|
.\" Formerly IPV6_DSTOPTS, which is documented
|
|
|
|
.\" IPV6_2292RTHDR (2.6.14)
|
|
|
|
.\" Formerly IPV6_RTHDR, which is documented
|
|
|
|
.\" IPV6_2292PKTOPTIONS (2.6.14)
|
|
|
|
.\" Formerly IPV6_PKTOPTIONS
|
|
|
|
.\" IPV6_2292HOPLIMIT (2.6.14)
|
|
|
|
.\" Formerly IPV6_HOPLIMIT, which is documented
|
2012-12-20 17:17:09 +00:00
|
|
|
.\"
|
2012-12-15 16:45:45 +00:00
|
|
|
.\" IPV6_RECVHOPLIMIT (2.6.14)
|
|
|
|
.\" IPV6_RECVHOPOPTS (2.6.14)
|
|
|
|
.\" IPV6_RTHDRDSTOPTS (2.6.14)
|
|
|
|
.\" IPV6_RECVRTHDR (2.6.14)
|
|
|
|
.\" IPV6_RECVDSTOPTS (2.6.14)
|
|
|
|
.\"
|
|
|
|
.\" IPV6_RECVPATHMTU (2.6.35, flag value added in 2.6.14)
|
|
|
|
.\" commit 793b14731686595a741d9f47726ad8b9a235385a
|
|
|
|
.\" Author: Brian Haley <brian.haley@hp.com>
|
|
|
|
.\" IPV6_PATHMTU (2.6.35, flag value added in 2.6.14)
|
|
|
|
.\" commit 793b14731686595a741d9f47726ad8b9a235385a
|
|
|
|
.\" Author: Brian Haley <brian.haley@hp.com>
|
|
|
|
.\" IPV6_DONTFRAG (2.6.35, flag value added in 2.6.14)
|
|
|
|
.\" commit 793b14731686595a741d9f47726ad8b9a235385a
|
|
|
|
.\" Author: Brian Haley <brian.haley@hp.com>
|
|
|
|
.\" commit 4b340ae20d0e2366792abe70f46629e576adaf5e
|
|
|
|
.\" Author: Brian Haley <brian.haley@hp.com>
|
|
|
|
.\"
|
|
|
|
.\" IPV6_RECVTCLASS (2.6.14)
|
|
|
|
.\" commit 41a1f8ea4fbfcdc4232f023732584aae2220de31
|
|
|
|
.\" Author: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
|
|
|
|
.\" Based on patch from David L Stevens <dlstevens@us.ibm.com>
|
|
|
|
.\"
|
|
|
|
.\" IPV6_CHECKSUM (2.2)
|
|
|
|
.\" IPV6_NEXTHOP (2.2)
|
|
|
|
.\" IPV6_JOIN_ANYCAST (2.4.21 / 2.6)
|
|
|
|
.\" IPV6_LEAVE_ANYCAST (2.4.21 / 2.6)
|
|
|
|
.\" IPV6_FLOWLABEL_MGR (2.2.7 / 2.4)
|
|
|
|
.\" IPV6_FLOWINFO_SEND (2.2.7 / 2.4)
|
|
|
|
.\" IPV6_IPSEC_POLICY (2.6)
|
|
|
|
.\" IPV6_XFRM_POLICY (2.6)
|
|
|
|
.\" IPV6_TCLASS (2.6)
|
|
|
|
.\"
|
|
|
|
.\" IPV6_ADDR_PREFERENCES (2.6.26)
|
|
|
|
.\" commit 7cbca67c073263c179f605bdbbdc565ab29d801d
|
|
|
|
.\" Author: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
|
|
|
|
.\" IPV6_MINHOPCOUNT (2.6.35)
|
|
|
|
.\" commit e802af9cabb011f09b9c19a82faef3dd315f27eb
|
|
|
|
.\" Author: Stephen Hemminger <shemminger@vyatta.com>
|
|
|
|
.\" IPV6_ORIGDSTADDR (2.6.37)
|
|
|
|
.\" Actually a CMSG rather than a sockopt?
|
|
|
|
.\" In header file, we have IPV6_RECVORIGDSTADDR == IPV6_ORIGDSTADDR
|
|
|
|
.\" commit 6c46862280c5f55eda7750391bc65cd7e08c7535
|
|
|
|
.\" Author: Balazs Scheidler <bazsi@balabit.hu>
|
|
|
|
.\" IPV6_RECVORIGDSTADDR (2.6.37)
|
|
|
|
.\" commit 6c46862280c5f55eda7750391bc65cd7e08c7535
|
|
|
|
.\" Author: Balazs Scheidler <bazsi@balabit.hu>
|
|
|
|
.\" Support for IPV6_RECVORIGDSTADDR sockopt for UDP sockets
|
|
|
|
.\" were contributed by Harry Mason.
|
|
|
|
.\" IPV6_TRANSPARENT (2.6.37)
|
|
|
|
.\" commit 6c46862280c5f55eda7750391bc65cd7e08c7535
|
|
|
|
.\" Author: Balazs Scheidler <bazsi@balabit.hu>
|
|
|
|
.\" IPV6_UNICAST_IF (3.4)
|
|
|
|
.\" commit c4062dfc425e94290ac427a98d6b4721dd2bc91f
|
|
|
|
.\" Author: Erich E. Hoover <ehoover@mines.edu>
|
|
|
|
.\"
|
2012-12-15 18:52:49 +00:00
|
|
|
.TH IPV6 7 2012-12-16 "Linux" "Linux Programmer's Manual"
|
2008-08-08 16:41:48 +00:00
|
|
|
.SH NAME
|
2012-05-03 17:00:00 +00:00
|
|
|
ipv6 \- Linux IPv6 protocol implementation
|
2008-08-08 16:41:48 +00:00
|
|
|
.SH SYNOPSIS
|
|
|
|
.B #include <sys/socket.h>
|
|
|
|
.br
|
|
|
|
.B #include <netinet/in.h>
|
|
|
|
.sp
|
2008-08-08 16:47:53 +00:00
|
|
|
.IB tcp6_socket " = socket(AF_INET6, SOCK_STREAM, 0);"
|
2008-08-08 16:41:48 +00:00
|
|
|
.br
|
2008-08-08 16:47:53 +00:00
|
|
|
.IB raw6_socket " = socket(AF_INET6, SOCK_RAW, " protocol ");"
|
2008-08-08 16:41:48 +00:00
|
|
|
.br
|
2008-08-08 16:47:53 +00:00
|
|
|
.IB udp6_socket " = socket(AF_INET6, SOCK_DGRAM, " protocol ");"
|
2008-08-08 16:41:48 +00:00
|
|
|
.SH DESCRIPTION
|
|
|
|
Linux 2.2 optionally implements the Internet Protocol, version 6.
|
|
|
|
This man page contains a description of the IPv6 basic API as
|
|
|
|
implemented by the Linux kernel and glibc 2.1.
|
|
|
|
The interface
|
|
|
|
is based on the BSD sockets interface; see
|
|
|
|
.BR socket (7).
|
|
|
|
.PP
|
|
|
|
The IPv6 API aims to be mostly compatible with the
|
2008-11-25 23:07:11 +00:00
|
|
|
IPv4 API (see
|
|
|
|
.BR ip (7)).
|
2008-08-08 16:41:48 +00:00
|
|
|
Only differences are described in this man page.
|
|
|
|
.PP
|
|
|
|
To bind an
|
|
|
|
.B AF_INET6
|
2008-11-25 23:07:11 +00:00
|
|
|
socket to any process, the local address should be copied from the
|
2008-08-08 16:41:48 +00:00
|
|
|
.I in6addr_any
|
|
|
|
variable which has
|
|
|
|
.I in6_addr
|
|
|
|
type.
|
2008-11-25 23:07:11 +00:00
|
|
|
In static initializations,
|
2008-08-08 16:41:48 +00:00
|
|
|
.B IN6ADDR_ANY_INIT
|
|
|
|
may also be used, which expands to a constant expression.
|
2008-11-25 23:07:11 +00:00
|
|
|
Both of them are in network byte order.
|
2008-08-08 16:41:48 +00:00
|
|
|
.PP
|
|
|
|
The IPv6 loopback address (::1) is available in the global
|
|
|
|
.I in6addr_loopback
|
|
|
|
variable.
|
2008-11-25 23:07:11 +00:00
|
|
|
For initializations,
|
2008-08-08 16:41:48 +00:00
|
|
|
.B IN6ADDR_LOOPBACK_INIT
|
|
|
|
should be used.
|
|
|
|
.PP
|
|
|
|
IPv4 connections can be handled with the v6 API by using the
|
|
|
|
v4-mapped-on-v6 address type;
|
2008-11-25 23:07:11 +00:00
|
|
|
thus a program only needs to support this API type to
|
2008-08-08 16:41:48 +00:00
|
|
|
support both protocols.
|
|
|
|
This is handled transparently by the address
|
2008-11-25 23:07:11 +00:00
|
|
|
handling functions in the C library.
|
2008-08-08 16:41:48 +00:00
|
|
|
.PP
|
|
|
|
IPv4 and IPv6 share the local port space.
|
|
|
|
When you get an IPv4 connection
|
2008-11-25 23:07:11 +00:00
|
|
|
or packet to a IPv6 socket, its source address will be mapped
|
2008-08-08 16:41:48 +00:00
|
|
|
to v6 and it will be mapped to v6.
|
|
|
|
.SS "Address Format"
|
|
|
|
.in +4n
|
|
|
|
.nf
|
|
|
|
struct sockaddr_in6 {
|
2009-02-28 09:46:10 +00:00
|
|
|
sa_family_t sin6_family; /* AF_INET6 */
|
|
|
|
in_port_t sin6_port; /* port number */
|
2008-08-08 16:41:48 +00:00
|
|
|
uint32_t sin6_flowinfo; /* IPv6 flow information */
|
|
|
|
struct in6_addr sin6_addr; /* IPv6 address */
|
|
|
|
uint32_t sin6_scope_id; /* Scope ID (new in 2.4) */
|
|
|
|
};
|
|
|
|
|
|
|
|
struct in6_addr {
|
|
|
|
unsigned char s6_addr[16]; /* IPv6 address */
|
|
|
|
};
|
|
|
|
.fi
|
|
|
|
.in
|
|
|
|
.sp
|
|
|
|
.I sin6_family
|
|
|
|
is always set to
|
|
|
|
.BR AF_INET6 ;
|
|
|
|
.I sin6_port
|
|
|
|
is the protocol port (see
|
|
|
|
.I sin_port
|
|
|
|
in
|
|
|
|
.BR ip (7));
|
|
|
|
.I sin6_flowinfo
|
|
|
|
is the IPv6 flow identifier;
|
|
|
|
.I sin6_addr
|
|
|
|
is the 128-bit IPv6 address.
|
|
|
|
.I sin6_scope_id
|
2008-11-25 23:07:11 +00:00
|
|
|
is an ID depending on the scope of the address.
|
2008-08-08 16:41:48 +00:00
|
|
|
It is new in Linux 2.4.
|
2012-04-28 04:48:07 +00:00
|
|
|
Linux only supports it for link-local addresses, in that case
|
2008-08-08 16:41:48 +00:00
|
|
|
.I sin6_scope_id
|
|
|
|
contains the interface index (see
|
|
|
|
.BR netdevice (7))
|
|
|
|
.PP
|
|
|
|
IPv6 supports several address types: unicast to address a single
|
|
|
|
host, multicast to address a group of hosts,
|
|
|
|
anycast to address the nearest member of a group of hosts
|
|
|
|
(not implemented in Linux), IPv4-on-IPv6 to
|
|
|
|
address a IPv4 host, and other reserved address types.
|
|
|
|
.PP
|
2011-09-09 00:01:22 +00:00
|
|
|
The address notation for IPv6 is a group of 8 4-digit hexadecimal
|
2008-08-08 16:41:48 +00:00
|
|
|
numbers, separated with a \(aq:\(aq.
|
|
|
|
\&"::" stands for a string of 0 bits.
|
|
|
|
Special addresses are ::1 for loopback and ::FFFF:<IPv4 address>
|
|
|
|
for IPv4-mapped-on-IPv6.
|
|
|
|
.PP
|
|
|
|
The port space of IPv6 is shared with IPv4.
|
|
|
|
.SS "Socket Options"
|
|
|
|
IPv6 supports some protocol-specific socket options that can be set with
|
|
|
|
.BR setsockopt (2)
|
|
|
|
and read with
|
|
|
|
.BR getsockopt (2).
|
|
|
|
The socket option level for IPv6 is
|
|
|
|
.BR IPPROTO_IPV6 .
|
|
|
|
A boolean integer flag is zero when it is false, otherwise true.
|
|
|
|
.TP
|
|
|
|
.B IPV6_ADDRFORM
|
|
|
|
Turn an
|
|
|
|
.B AF_INET6
|
|
|
|
socket into a socket of a different address family.
|
|
|
|
Only
|
|
|
|
.B AF_INET
|
|
|
|
is currently supported for that.
|
|
|
|
It is only allowed for IPv6 sockets
|
|
|
|
that are connected and bound to a v4-mapped-on-v6 address.
|
|
|
|
The argument is a pointer to an integer containing
|
|
|
|
.BR AF_INET .
|
|
|
|
This is useful to pass v4-mapped sockets as file descriptors to
|
|
|
|
programs that don't know how to deal with the IPv6 API.
|
|
|
|
.TP
|
|
|
|
.B IPV6_ADD_MEMBERSHIP, IPV6_DROP_MEMBERSHIP
|
|
|
|
Control membership in multicast groups.
|
|
|
|
Argument is a pointer to a
|
2012-12-23 17:54:37 +00:00
|
|
|
.IR "struct ipv6_mreq" .
|
2008-08-08 16:41:48 +00:00
|
|
|
.TP
|
|
|
|
.B IPV6_MTU
|
2012-12-15 18:55:04 +00:00
|
|
|
.BR getsockopt ():
|
2012-12-15 18:52:49 +00:00
|
|
|
Retrieve the current known path MTU of the current socket.
|
|
|
|
Only valid when the socket has been connected.
|
|
|
|
Returns an integer.
|
|
|
|
|
2012-12-15 18:55:04 +00:00
|
|
|
.BR setsockopt ():
|
2008-08-08 16:41:48 +00:00
|
|
|
Set the MTU to be used for the socket.
|
|
|
|
The MTU is limited by the device
|
2011-09-22 03:58:54 +00:00
|
|
|
MTU or the path MTU when path MTU discovery is enabled.
|
2008-08-08 16:41:48 +00:00
|
|
|
Argument is a pointer to integer.
|
|
|
|
.TP
|
|
|
|
.B IPV6_MTU_DISCOVER
|
2011-09-22 03:58:54 +00:00
|
|
|
Control path-MTU discovery on the socket.
|
2008-08-08 16:41:48 +00:00
|
|
|
See
|
|
|
|
.B IP_MTU_DISCOVER
|
|
|
|
in
|
|
|
|
.BR ip (7)
|
|
|
|
for details.
|
|
|
|
.TP
|
|
|
|
.B IPV6_MULTICAST_HOPS
|
|
|
|
Set the multicast hop limit for the socket.
|
|
|
|
Argument is a pointer to an
|
|
|
|
integer.
|
|
|
|
\-1 in the value means use the route default, otherwise it should be
|
|
|
|
between 0 and 255.
|
|
|
|
.TP
|
|
|
|
.B IPV6_MULTICAST_IF
|
|
|
|
Set the device for outgoing multicast packets on the socket.
|
|
|
|
This is only allowed
|
|
|
|
for
|
|
|
|
.B SOCK_DGRAM
|
|
|
|
and
|
|
|
|
.B SOCK_RAW
|
|
|
|
socket.
|
|
|
|
The argument is a pointer to an interface index (see
|
|
|
|
.BR netdevice (7))
|
|
|
|
in an integer.
|
|
|
|
.TP
|
|
|
|
.B IPV6_MULTICAST_LOOP
|
|
|
|
Control whether the socket sees multicast packets that it has send itself.
|
|
|
|
Argument is a pointer to boolean.
|
|
|
|
.TP
|
ipv6.7: Document IPV6_RECVPKTINFO
Notes from Bert Hubert:
Recently PowerDNS needed to support the getting of the
original destination address of packets received on ::.
Following the advice in ipv6(7) generated an error on
setsockopt().
Some googling confirmed that setsockopt() with
IPV6_PKTINFO indeed does not work, but we found that
IPV6_RECVPKTINFO did.
Our experiences are detailed in
http://bert-hubert.blogspot.nl/2012/10/on-binding-datagram-udp-sockets-to-any.html
Please find attached a quite naive patch to ipv6.7 that at
least fixes 'my' problem, but does not document if
IPV6_PKTINFO ever worked as a flag. It does document that
IPV6_RECVPKTINFO is available since 2.6.13.
Please let me know if this patch is acceptable, or if you
want me to dig deeper into the IPV6_PKTINFO situation.
Notes from mtk:
Drop mention of IPV6_PKTINFO; that's IPV6_2292PKTINFO nowadays
(and needs to be documented). And, confusingly, there's nowadays
an IPV6_PKTINFO that is a quite different thig.
With kernel commit 333fad5364d6b457c8d837f7d05802d2aaf8a961
(Sep 2005) PV6_PKTINFO disappeared from the
getsockopt/setsockopt API, and IPV6_2292PKTINFO took its place.
Meanwhile, IPV6_RECVPKTINFO was added.
Then kernel commit b24a2516d10751d7ed5afb58420df25370c9dffb
(Dec 2008) added IPV6_PKTINFO back to the
getsockopt/getsockopt API, but with what looks to be a
rather different meaning (it takes a 'struct in6_pktinfo'
as the third arg).
This seems consistent (if confusing) with the RFCs:
http://www.ietf.org/rfc/rfc2292.txt
http://www.ietf.org/rfc/rfc3542.txt (obsoletes 2292)
Both of those RFCs define an IPV6_PKTINO sockopt, but the
former takes an int arg, and the latter takes a
'struct in6_pktinfo'.
So, my summary of your patch is that it's correct. (But I think
that IPV6_RECVPKTINFO is present since 2.6.14, not 2.6.13.)
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2012-10-21 10:51:33 +00:00
|
|
|
.BR IPV6_RECVPKTINFO " (since Linux 2.6.14)"
|
2008-08-08 16:41:48 +00:00
|
|
|
Set delivery of the
|
|
|
|
.B IPV6_PKTINFO
|
|
|
|
control message on incoming datagrams.
|
2012-11-02 05:57:34 +00:00
|
|
|
Such control messages contain a
|
|
|
|
.IR "struct in6_pktinfo" ,
|
|
|
|
as per RFC 3542.
|
2008-08-08 16:41:48 +00:00
|
|
|
Only allowed for
|
|
|
|
.B SOCK_DGRAM
|
|
|
|
or
|
|
|
|
.B SOCK_RAW
|
|
|
|
sockets.
|
|
|
|
Argument is a pointer to a boolean value in an integer.
|
|
|
|
.TP
|
|
|
|
.nh
|
2010-10-30 05:42:37 +00:00
|
|
|
.B IPV6_RTHDR, IPV6_AUTHHDR, IPV6_DSTOPTS, IPV6_HOPOPTS, IPV6_FLOWINFO, IPV6_HOPLIMIT
|
2008-08-08 16:41:48 +00:00
|
|
|
.hy
|
|
|
|
Set delivery of control messages for incoming datagrams containing
|
|
|
|
extension headers from the received packet.
|
|
|
|
.B IPV6_RTHDR
|
|
|
|
delivers the routing header,
|
|
|
|
.B IPV6_AUTHHDR
|
|
|
|
delivers the authentication header,
|
|
|
|
.B IPV6_DSTOPTS
|
|
|
|
delivers the destination options,
|
|
|
|
.B IPV6_HOPOPTS
|
|
|
|
delivers the hop options,
|
|
|
|
.B IPV6_FLOWINFO
|
|
|
|
delivers an integer containing the flow ID,
|
|
|
|
.B IPV6_HOPLIMIT
|
|
|
|
delivers an integer containing the hop count of the packet.
|
|
|
|
The control messages have the same type as the socket option.
|
|
|
|
All these header options can also be set for outgoing packets
|
|
|
|
by putting the appropriate control message into the control buffer of
|
|
|
|
.BR sendmsg (2).
|
|
|
|
Only allowed for
|
|
|
|
.B SOCK_DGRAM
|
|
|
|
or
|
|
|
|
.B SOCK_RAW
|
|
|
|
sockets.
|
|
|
|
Argument is a pointer to a boolean value.
|
|
|
|
.TP
|
|
|
|
.B IPV6_RECVERR
|
|
|
|
Control receiving of asynchronous error options.
|
|
|
|
See
|
|
|
|
.B IP_RECVERR
|
|
|
|
in
|
|
|
|
.BR ip (7)
|
|
|
|
for details.
|
|
|
|
Argument is a pointer to boolean.
|
|
|
|
.TP
|
|
|
|
.B IPV6_ROUTER_ALERT
|
|
|
|
Pass forwarded packets containing a router alert hop-by-hop option to
|
|
|
|
this socket.
|
|
|
|
Only allowed for SOCK_RAW sockets.
|
|
|
|
The tapped packets are not forwarded by the kernel, it is the
|
|
|
|
user's responsibility to send them out again.
|
|
|
|
Argument is a pointer to an integer.
|
|
|
|
A positive integer indicates a router alert option value to intercept.
|
|
|
|
Packets carrying a router alert option with a value field containing
|
|
|
|
this integer will be delivered to the socket.
|
|
|
|
A negative integer disables delivery of packets with router alert options
|
|
|
|
to this socket.
|
|
|
|
.TP
|
|
|
|
.B IPV6_UNICAST_HOPS
|
|
|
|
Set the unicast hop limit for the socket.
|
|
|
|
Argument is a pointer to an integer.
|
|
|
|
\-1 in the value means use the route default,
|
|
|
|
otherwise it should be between 0 and 255.
|
|
|
|
.TP
|
|
|
|
.BR IPV6_V6ONLY " (since Linux 2.4.21 and 2.6)"
|
|
|
|
.\" See RFC 3493
|
intro.1, time.1, adjtimex.2, capget.2, eventfd.2, fcntl.2, getrlimit.2, getsockopt.2, gettimeofday.2, intro.2, ioctl_list.2, ioperm.2, mlock.2, pivot_root.2, poll.2, prctl.2, ptrace.2, sched_setscheduler.2, select_tut.2, semget.2, sigaltstack.2, signalfd.2, sysctl.2, timer_settime.2, timerfd_create.2, wait.2, CPU_SET.3, argz_add.3, assert_perror.3, atexit.3, backtrace.3, bcmp.3, clearenv.3, ctime.3, dl_iterate_phdr.3, dlopen.3, ecvt.3, errno.3, error.3, ether_aton.3, exit.3, fenv.3, ferror.3, finite.3, flockfile.3, fnmatch.3, fpathconf.3, fpclassify.3, ftime.3, ftok.3, ftw.3, fwide.3, getaddrinfo.3, gethostbyname.3, getlogin.3, getnameinfo.3, getnetent.3, getopt.3, getprotoent.3, getrpcent.3, getservent.3, glob.3, hsearch.3, inet.3, isalpha.3, iswalnum.3, iswalpha.3, iswblank.3, iswcntrl.3, iswctype.3, iswdigit.3, iswgraph.3, iswlower.3, iswprint.3, iswpunct.3, iswspace.3, iswupper.3, iswxdigit.3, longjmp.3, lsearch.3, malloc.3, matherr.3, mblen.3, mbsinit.3, mbtowc.3, on_exit.3, printf.3, pthread_attr_init.3, pthread_attr_setaffinity_np.3, pthread_attr_setdetachstate.3, pthread_attr_setguardsize.3, pthread_attr_setinheritsched.3, pthread_attr_setschedparam.3, pthread_attr_setschedpolicy.3, pthread_attr_setscope.3, pthread_attr_setstack.3, pthread_attr_setstackaddr.3, pthread_attr_setstacksize.3, pthread_cancel.3, pthread_cleanup_push.3, pthread_equal.3, pthread_getattr_np.3, pthread_getcpuclockid.3, pthread_setaffinity_np.3, pthread_setcancelstate.3, pthread_setconcurrency.3, pthread_setschedparam.3, pthread_setschedprio.3, ptsname.3, putenv.3, putgrent.3, raise.3, rcmd.3, regex.3, rexec.3, rpc.3, rpmatch.3, rtnetlink.3, scandir.3, sem_init.3, setaliasent.3, setbuf.3, setenv.3, setjmp.3, signbit.3, stdio_ext.3, strtod.3, strtol.3, strtoul.3, system.3, termios.3, timeradd.3, tzset.3, ualarm.3, wctomb.3, xdr.3, st.4, tty_ioctl.4, core.5, elf.5, proc.5, bootparam.7, capabilities.7, icmp.7, ip.7, ipv6.7, math_error.7, mdoc.samples.7, mq_overview.7, pthreads.7, raw.7, regex.7, socket.7, tcp.7, tzselect.8: Global fix: s/non-zero/nonzero/
The tendency in English, as prescribed in style guides like
Chicago MoS, is towards removing hyphens after prefixes
like "non-" etc.
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2010-01-16 16:40:55 +00:00
|
|
|
If this flag is set to true (nonzero), then the socket is restricted
|
2008-08-08 16:41:48 +00:00
|
|
|
to sending and receiving IPv6 packets only.
|
|
|
|
In this case, an IPv4 and an IPv6 application can bind
|
|
|
|
to a single port at the same time.
|
|
|
|
|
|
|
|
If this flag is set to false (zero),
|
|
|
|
then the socket can be used to send and receive packets
|
|
|
|
to and from an IPv6 address or an IPv4-mapped IPv6 address.
|
|
|
|
|
|
|
|
The argument is a pointer to a boolean value in an integer.
|
|
|
|
|
|
|
|
The default value for this flag is defined by the contents of the file
|
2008-11-25 22:59:18 +00:00
|
|
|
.IR /proc/sys/net/ipv6/bindv6only .
|
2008-08-08 16:41:48 +00:00
|
|
|
The default value for that file is 0 (false).
|
|
|
|
.\" FLOWLABEL_MGR, FLOWINFO_SEND
|
2012-04-28 04:48:07 +00:00
|
|
|
.SH ERRORS
|
|
|
|
.\" FIXME document all errors.
|
|
|
|
.TP
|
|
|
|
.B ENODEV
|
|
|
|
The user tried to
|
|
|
|
.BR bind (2)
|
|
|
|
to a link-local IPv6 address, but the
|
|
|
|
.I sin6_scope_id
|
|
|
|
in the supplied
|
|
|
|
.I sockaddr_in6
|
|
|
|
structure is not a valid
|
|
|
|
interface index.
|
2008-08-08 16:41:48 +00:00
|
|
|
.SH VERSIONS
|
|
|
|
The older
|
|
|
|
.I libinet6
|
|
|
|
libc5 based IPv6 API implementation for Linux is not described here
|
|
|
|
and may vary in details.
|
|
|
|
.PP
|
|
|
|
Linux 2.4 will break binary compatibility for the
|
|
|
|
.I sockaddr_in6
|
|
|
|
for 64-bit
|
|
|
|
hosts by changing the alignment of
|
|
|
|
.I in6_addr
|
|
|
|
and adding an additional
|
|
|
|
.I sin6_scope_id
|
|
|
|
field.
|
|
|
|
The kernel interfaces stay compatible, but a program including
|
|
|
|
.I sockaddr_in6
|
|
|
|
or
|
|
|
|
.I in6_addr
|
|
|
|
into other structures may not be.
|
|
|
|
This is not
|
|
|
|
a problem for 32-bit hosts like i386.
|
|
|
|
.PP
|
|
|
|
The
|
|
|
|
.I sin6_flowinfo
|
|
|
|
field is new in Linux 2.4.
|
|
|
|
It is transparently passed/read by the kernel
|
|
|
|
when the passed address length contains it.
|
|
|
|
Some programs that pass a longer address buffer and then
|
|
|
|
check the outgoing address length may break.
|
|
|
|
.SH "NOTES"
|
|
|
|
The
|
|
|
|
.I sockaddr_in6
|
|
|
|
structure is bigger than the generic
|
|
|
|
.IR sockaddr .
|
|
|
|
Programs that assume that all address types can be stored safely in a
|
|
|
|
.I struct sockaddr
|
|
|
|
need to be changed to use
|
|
|
|
.I struct sockaddr_storage
|
|
|
|
for that instead.
|
|
|
|
.SH BUGS
|
|
|
|
The IPv6 extended API as in RFC\ 2292 is currently only partly
|
|
|
|
implemented;
|
|
|
|
although the 2.2 kernel has near complete support for receiving options,
|
|
|
|
the macros for generating IPv6 options are missing in glibc 2.1.
|
|
|
|
.PP
|
|
|
|
IPSec support for EH and AH headers is missing.
|
|
|
|
.PP
|
|
|
|
Flow label management is not complete and not documented here.
|
|
|
|
.PP
|
|
|
|
This man page is not complete.
|
|
|
|
.SH "SEE ALSO"
|
|
|
|
.BR cmsg (3),
|
|
|
|
.BR ip (7)
|
|
|
|
.PP
|
arch_prctl.2, fcntl.2, flock.2, get_robust_list.2, getpriority.2, ioprio_set.2, migrate_pages.2, mmap.2, mremap.2, msync.2, sched_get_priority_max.2, sched_rr_get_interval.2, sched_setparam.2, sched_setscheduler.2, sched_yield.2, select.2, socket.2, subpage_prot.2, unshare.2, btree.3, dbopen.3, dl_iterate_phdr.3, dlopen.3, getnameinfo.3, hash.3, lockf.3, netlink.3, recno.3, rpc.3, xdr.3, cciss.4, console_ioctl.4, hpsa.4, initrd.4, msr.4, rtc.4, st.4, hosts.5, services.5, tzfile.5, aio.7, arp.7, capabilities.7, cpuset.7, feature_test_macros.7, futex.7, inotify.7, ip.7, ipv6.7, iso_8859-16.7, iso_8859-2.7, koi8-r.7, math_error.7, netlink.7, packet.7, pthreads.7, raw.7, spufs.7, udplite.7, uri.7, x25.7: Global fix: Various consistency fixes for SEE ALSO
Coauthored-by: Michael Kerrisk <mtk.manpages@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2012-09-24 07:53:22 +00:00
|
|
|
RFC\ 2553: IPv6 BASIC API;
|
2008-08-08 16:41:48 +00:00
|
|
|
Linux tries to be compliant to this.
|
|
|
|
RFC\ 2460: IPv6 specification.
|