aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--man/man2const/IPPROTO_IP.2const141
-rw-r--r--man/man2const/IP_ADD_MEMBERSHIP.2const50
-rw-r--r--man/man2const/IP_ADD_SOURCE_MEMBERSHIP.2const44
-rw-r--r--man/man2const/IP_BIND_ADDRESS_NO_PORT.2const42
-rw-r--r--man/man2const/IP_BLOCK_SOURCE.2const43
-rw-r--r--man/man2const/IP_DROP_MEMBERSHIP.2const42
-rw-r--r--man/man2const/IP_DROP_SOURCE_MEMBERSHIP.2const48
-rw-r--r--man/man2const/IP_FREEBIND.2const52
-rw-r--r--man/man2const/IP_HDRINCL.2const51
-rw-r--r--man/man2const/IP_LOCAL_PORT_RANGE.2const62
-rw-r--r--man/man2const/IP_MSFILTER.2const67
-rw-r--r--man/man2const/IP_MTU.2const43
-rw-r--r--man/man2const/IP_MTU_DISCOVER.2const127
-rw-r--r--man/man2const/IP_MULTICAST_ALL.2const46
-rw-r--r--man/man2const/IP_MULTICAST_IF.2const56
-rw-r--r--man/man2const/IP_MULTICAST_LOOP.2const38
-rw-r--r--man/man2const/IP_MULTICAST_TTL.2const43
-rw-r--r--man/man2const/IP_NODEFRAG.2const42
-rw-r--r--man/man2const/IP_OPTIONS.2const71
-rw-r--r--man/man2const/IP_PASSSEC.2const69
-rw-r--r--man/man2const/IP_PKTINFO.2const111
-rw-r--r--man/man2const/IP_RECVERR.2const188
-rw-r--r--man/man2const/IP_RECVOPTS.2const45
-rw-r--r--man/man2const/IP_RECVORIGDSTADDR.2const51
-rw-r--r--man/man2const/IP_RECVTOS.2const45
-rw-r--r--man/man2const/IP_RECVTTL.2const54
-rw-r--r--man/man2const/IP_RETOPTS.2const43
-rw-r--r--man/man2const/IP_ROUTER_ALERT.2const49
-rw-r--r--man/man2const/IP_TOS.2const70
-rw-r--r--man/man2const/IP_TRANSPARENT.2const62
-rw-r--r--man/man2const/IP_TTL.2const38
-rw-r--r--man/man2const/IP_UNBLOCK_SOURCE.2const40
-rw-r--r--man/man2const/SO_PEERSEC.2const96
-rw-r--r--man/man2type/ip_mreq.2type1
-rw-r--r--man/man2type/ip_mreq_source.2type50
-rw-r--r--man/man2type/ip_mreqn.2type62
-rw-r--r--man/man3type/sockaddr.3type63
-rw-r--r--man/man3type/sockaddr_in.3type47
-rw-r--r--man/man3type/sockaddr_in6.3type45
-rw-r--r--man/man3type/sockaddr_un.3type31
-rw-r--r--man/man5/proc_sys_net.54
-rw-r--r--man/man5/proc_sys_net_ipv4.5167
-rw-r--r--man/man7/ip.71131
43 files changed, 2494 insertions, 1176 deletions
diff --git a/man/man2const/IPPROTO_IP.2const b/man/man2const/IPPROTO_IP.2const
new file mode 100644
index 0000000000..eedfc24051
--- /dev/null
+++ b/man/man2const/IPPROTO_IP.2const
@@ -0,0 +1,141 @@
+.\" Copyright, the authors of the Linux man-pages project
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.\" FIXME The following socket options are yet to be documented
+.\"
+.\" IP_XFRM_POLICY (2.5.48)
+.\" Needs CAP_NET_ADMIN
+.\"
+.\" IP_IPSEC_POLICY (2.5.47)
+.\" Needs CAP_NET_ADMIN
+.\"
+.\" IP_MINTTL (2.6.34)
+.\" commit d218d11133d888f9745802146a50255a4781d37a
+.\" Author: Stephen Hemminger <shemminger@vyatta.com>
+.\"
+.\" MCAST_JOIN_GROUP (2.4.22 / 2.6)
+.\"
+.\" MCAST_BLOCK_SOURCE (2.4.22 / 2.6)
+.\"
+.\" MCAST_UNBLOCK_SOURCE (2.4.22 / 2.6)
+.\"
+.\" MCAST_LEAVE_GROUP (2.4.22 / 2.6)
+.\"
+.\" MCAST_JOIN_SOURCE_GROUP (2.4.22 / 2.6)
+.\"
+.\" MCAST_LEAVE_SOURCE_GROUP (2.4.22 / 2.6)
+.\"
+.\" MCAST_MSFILTER (2.4.22 / 2.6)
+.\"
+.\" IP_UNICAST_IF (3.4)
+.\" commit 76e21053b5bf33a07c76f99d27a74238310e3c71
+.\" Author: Erich E. Hoover <ehoover@mines.edu>
+.\"
+.TH IPPROTO_IP 2const (date) "Linux man-pages (unreleased)"
+.SH NAME
+IPPROTO_IP
+\-
+Linux IPv4 protocol socket options
+.SH LIBRARY
+Standard C library
+.RI ( libc ,\~ \-lc )
+.SH SYNOPSIS
+.nf
+.BR "#include <netinet/in.h>" " /* Definition of " IP* " constants */"
+.B #include <sys/socket.h>
+.P
+.BI int\~setsockopt(int\~ sockfd ,\~IPPROTO_IP,\~int\~ opt ,
+.BI " const\~void\~" val [ size ],\~size_t\~ size );
+.BI int\~getsockopt(int\~ sockfd ,\~IPPROTO_IP,\~int\~ opt ,
+.BI " void\~" val [ size ],\~size_t\~ size );
+.fi
+.SH DESCRIPTION
+IP 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 IP is
+.BR IPPROTO_IP .
+.\" or SOL_IP on Linux
+.P
+The following socket options are supported.
+.TP
+.BR IP_ADD_MEMBERSHIP (2const)
+.TQ
+.BR IP_ADD_SOURCE_MEMBERSHIP (2const)
+.TQ
+.BR IP_BIND_ADDRESS_NO_PORT (2const)
+.TQ
+.BR IP_BLOCK_SOURCE (2const)
+.TQ
+.BR IP_DROP_MEMBERSHIP (2const)
+.TQ
+.BR IP_DROP_SOURCE_MEMBERSHIP (2const)
+.TQ
+.BR IP_FREEBIND (2const)
+.TQ
+.BR IP_HDRINCL (2const)
+.TQ
+.BR IP_LOCAL_PORT_RANGE (2const)
+.TQ
+.BR IP_MSFILTER (2const)
+.TQ
+.BR IP_MTU (2const)
+.TQ
+.BR IP_MTU_DISCOVER (2const)
+.TQ
+.BR IP_MULTICAST_ALL (2const)
+.TQ
+.BR IP_MULTICAST_IF (2const)
+.TQ
+.BR IP_MULTICAST_LOOP (2const)
+.TQ
+.BR IP_MULTICAST_TTL (2const)
+.TQ
+.BR IP_NODEFRAG (2const)
+.TQ
+.BR IP_OPTIONS (2const)
+.TQ
+.BR IP_PASSSEC (2const)
+.TQ
+.BR IP_PKTINFO (2const)
+.TQ
+.BR IP_RECVERR (2const)
+.TQ
+.BR IP_RECVOPTS (2const)
+.TQ
+.BR IP_RECVORIGDSTADDR (2const)
+.TQ
+.BR IP_RECVTOS (2const)
+.TQ
+.BR IP_RECVTTL (2const)
+.TQ
+.BR IP_RETOPTS (2const)
+.TQ
+.BR IP_ROUTER_ALERT (2const)
+.TQ
+.BR IP_TOS (2const)
+.TQ
+.BR IP_TRANSPARENT (2const)
+.TQ
+.BR IP_TTL (2const)
+.TQ
+.BR IP_UNBLOCK_SOURCE (2const)
+.TQ
+.BR SO_PEERSEC (2const)
+.SH ERRORS
+See
+.BR setsockopt (2).
+See
+.BR ip (7).
+.TP
+.B ENOPROTOOPT
+.I opt
+is invalid.
+.\" .SH STANDARDS
+.\" IP_XFRM_POLICY is Linux-specific
+.\" IP_IPSEC_POLICY is a nonstandard extension, also present on some BSDs
+.SH SEE ALSO
+.BR setsockopt (2),
+.BR ip (7)
diff --git a/man/man2const/IP_ADD_MEMBERSHIP.2const b/man/man2const/IP_ADD_MEMBERSHIP.2const
new file mode 100644
index 0000000000..aac81abf1a
--- /dev/null
+++ b/man/man2const/IP_ADD_MEMBERSHIP.2const
@@ -0,0 +1,50 @@
+.\" Copyright, the authors of the Linux man-pages project
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH IP_ADD_MEMBERSHIP 2const (date) "Linux man-pages (unreleased)"
+.SH NAME
+IP_ADD_MEMBERSHIP
+\-
+join a multicast group
+.SH LIBRARY
+Standard C library
+.RI ( libc ,\~ \-lc )
+.SH SYNOPSIS
+.nf
+.BR "#include <netinet/in.h>" " /* Definition of " IP* " constants */"
+.B #include <sys/socket.h>
+.P
+.BI int\~setsockopt(int\~ sockfd ,\~IPPROTO_IP,\~IP_ADD_MEMBERSHIP,
+.BI " const\~struct\~ip_mreqn\~*" val ,\~sizeof(struct\~ip_mreqn));
+.fi
+.SH DESCRIPTION
+Join a multicast group.
+.P
+.B IP_ADD_MEMBERSHIP
+is valid only for
+.BR setsockopt (2).
+.SH ERRORS
+See
+.BR IPPROTO_IP (2const).
+See
+.BR setsockopt (2).
+See
+.BR ip (7).
+.TP
+.B EINVAL
+.I val->imr_multiaddr
+is not a valid multicast address.
+.SH HISTORY
+Linux 1.2.
+.P
+For compatibility, the old
+.I ip_mreq
+structure is still supported.
+The kernel determines which structure is being passed based
+on the size passed in the last argument.
+.SH SEE ALSO
+.BR IPPROTO_IP (2const),
+.BR ip_mreqn (2type),
+.BR setsockopt (2),
+.BR ip (7)
diff --git a/man/man2const/IP_ADD_SOURCE_MEMBERSHIP.2const b/man/man2const/IP_ADD_SOURCE_MEMBERSHIP.2const
new file mode 100644
index 0000000000..7af7fcc809
--- /dev/null
+++ b/man/man2const/IP_ADD_SOURCE_MEMBERSHIP.2const
@@ -0,0 +1,44 @@
+.\" Copyright, the authors of the Linux man-pages project
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH IP_ADD_SOURCE_MEMBERSHIP 2const (date) "Linux man-pages (unreleased)"
+.SH NAME
+IP_ADD_SOURCE_MEMBERSHIP
+\-
+join a multicast group
+and allow receiving data
+only from a specified source
+.SH LIBRARY
+Standard C library
+.RI ( libc ,\~ \-lc )
+.SH SYNOPSIS
+.nf
+.BR "#include <netinet/in.h>" " /* Definition of " IP* " constants */"
+.B #include <sys/socket.h>
+.P
+.BI int\~setsockopt(int\~ sockfd ,\~IPPROTO_IP,\~IP_ADD_SOURCE_MEMBERSHIP,
+.BI " const\~struct\~ip_mreq_source\~*" val ,
+.B " sizeof(struct\~ip_mreq_source));"
+.fi
+.SH DESCRIPTION
+Join a multicast group and allow receiving data only
+from a specified source.
+.P
+This option can be used multiple times to allow
+receiving data from more than one source.
+.SH ERRORS
+See
+.BR IPPROTO_IP (2const).
+See
+.BR setsockopt (2).
+See
+.BR ip (7).
+.SH HISTORY
+Linux 2.4.22, Linux 2.5.68.
+.SH SEE ALSO
+.BR IPPROTO_IP (2const),
+.BR IP_ADD_MEMBERSHIP (2const),
+.BR ip_mreq_source (2type),
+.BR setsockopt (2),
+.BR ip (7)
diff --git a/man/man2const/IP_BIND_ADDRESS_NO_PORT.2const b/man/man2const/IP_BIND_ADDRESS_NO_PORT.2const
new file mode 100644
index 0000000000..088c1c7650
--- /dev/null
+++ b/man/man2const/IP_BIND_ADDRESS_NO_PORT.2const
@@ -0,0 +1,42 @@
+.\" Copyright, the authors of the Linux man-pages project
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH IP_BIND_ADDRESS_NO_PORT 2const (date) "Linux man-pages (unreleased)"
+.SH NAME
+IP_BIND_ADDRESS_NO_PORT
+\-
+don't reserve an ephemeral port
+.SH LIBRARY
+Standard C library
+.RI ( libc ,\~ \-lc )
+.SH SYNOPSIS
+.nf
+.BR "#include <netinet/in.h>" " /* Definition of " IP* " constants */"
+.B #include <sys/socket.h>
+.P
+.BI int\~setsockopt(int\~ sockfd ,\~IPPROTO_IP,\~IP_BIND_ADDRESS_NO_PORT,
+.BI " const\~int\~*" enable ,\~sizeof(int));
+.fi
+.SH DESCRIPTION
+Inform the kernel to not reserve an ephemeral port when using
+.BR bind (2)
+with a port number of 0.
+The port will later be automatically chosen at
+.BR connect (2)
+time,
+in a way that allows sharing a source port as long as the 4-tuple is unique.
+.SH ERRORS
+See
+.BR IPPROTO_IP (2const).
+See
+.BR setsockopt (2).
+See
+.BR ip (7).
+.SH HISTORY
+Linux 4.2.
+.\" commit 90c337da1524863838658078ec34241f45d8394d
+.SH SEE ALSO
+.BR IPPROTO_IP (2const),
+.BR setsockopt (2),
+.BR ip (7)
diff --git a/man/man2const/IP_BLOCK_SOURCE.2const b/man/man2const/IP_BLOCK_SOURCE.2const
new file mode 100644
index 0000000000..b6a1ec24b8
--- /dev/null
+++ b/man/man2const/IP_BLOCK_SOURCE.2const
@@ -0,0 +1,43 @@
+.\" Copyright, the authors of the Linux man-pages project
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH IP_BLOCK_SOURCE 2const (date) "Linux man-pages (unreleased)"
+.SH NAME
+IP_BLOCK_SOURCE
+\-
+stop receiving multicast data from a specific source in a given group
+.SH LIBRARY
+Standard C library
+.RI ( libc ,\~ \-lc )
+.SH SYNOPSIS
+.nf
+.BR "#include <netinet/in.h>" " /* Definition of " IP* " constants */"
+.B #include <sys/socket.h>
+.P
+.BI int\~setsockopt(int\~ sockfd ,\~IPPROTO_IP,\~IP_BLOCK_SOURCE,
+.BI " const\~struct\~ip_mreq_source\~*" val ,
+.B " sizeof(struct\~ip_mreq_source));"
+.fi
+.SH DESCRIPTION
+Stop receiving multicast data from a specific source in a given group.
+.P
+This is valid only after the application has subscribed
+to the multicast group using either
+.BR IP_ADD_MEMBERSHIP (2const)
+or
+.BR IP_ADD_SOURCE_MEMBERSHIP (2const).
+.SH ERRORS
+See
+.BR IPPROTO_IP (2const).
+See
+.BR setsockopt (2).
+See
+.BR ip (7).
+.SH HISTORY
+Linux 2.4.22, Linux 2.5.68.
+.SH SEE ALSO
+.BR IPPROTO_IP (2const),
+.BR ip_mreq_source (2type),
+.BR setsockopt (2),
+.BR ip (7)
diff --git a/man/man2const/IP_DROP_MEMBERSHIP.2const b/man/man2const/IP_DROP_MEMBERSHIP.2const
new file mode 100644
index 0000000000..819c407c65
--- /dev/null
+++ b/man/man2const/IP_DROP_MEMBERSHIP.2const
@@ -0,0 +1,42 @@
+.\" Copyright, the authors of the Linux man-pages project
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH IP_DROP_MEMBERSHIP 2const (date) "Linux man-pages (unreleased)"
+.SH NAME
+IP_DROP_MEMBERSHIP
+\-
+leave a multicast group
+.SH LIBRARY
+Standard C library
+.RI ( libc ,\~ \-lc )
+.SH SYNOPSIS
+.nf
+.BR "#include <netinet/in.h>" " /* Definition of " IP* " constants */"
+.B #include <sys/socket.h>
+.P
+.BI int\~setsockopt(int\~ sockfd ,\~IPPROTO_IP,\~IP_DROP_MEMBERSHIP,
+.BI " const\~struct\~ip_mreqn\~*" val ,\~sizeof(struct\~ip_mreqn));
+.fi
+.SH DESCRIPTION
+Leave a multicast group.
+.SH ERRORS
+See
+.BR IPPROTO_IP (2const).
+See
+.BR setsockopt (2).
+See
+.BR ip (7).
+.SH HISTORY
+Linux 1.2.
+.P
+For compatibility, the old
+.I ip_mreq
+structure is still supported.
+The kernel determines which structure is being passed based
+on the size passed in the last argument.
+.SH SEE ALSO
+.BR IPPROTO_IP (2const),
+.BR ip_mreqn (2type),
+.BR setsockopt (2),
+.BR ip (7)
diff --git a/man/man2const/IP_DROP_SOURCE_MEMBERSHIP.2const b/man/man2const/IP_DROP_SOURCE_MEMBERSHIP.2const
new file mode 100644
index 0000000000..a1d9ed0c14
--- /dev/null
+++ b/man/man2const/IP_DROP_SOURCE_MEMBERSHIP.2const
@@ -0,0 +1,48 @@
+.\" Copyright, the authors of the Linux man-pages project
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH IP_DROP_SOURCE_MEMBERSHIP 2const (date) "Linux man-pages (unreleased)"
+.SH NAME
+IP_DROP_SOURCE_MEMBERSHIP
+\-
+leave a source-specific multicast group
+.SH LIBRARY
+Standard C library
+.RI ( libc ,\~ \-lc )
+.SH SYNOPSIS
+.nf
+.BR "#include <netinet/in.h>" " /* Definition of " IP* " constants */"
+.B #include <sys/socket.h>
+.P
+.BI int\~setsockopt(int\~ sockfd ,\~IPPROTO_IP,\~IP_DROP_SOURCE_MEMBERSHIP,
+.BI " const\~struct\~ip_mreq_source\~*" val ,
+.B " sizeof(struct\~ip_mreq_source));"
+.fi
+.SH DESCRIPTION
+Leave a source-specific group;
+that is,
+stop receiving data
+from a given multicast group
+that comes from a given source.
+.P
+If the application has subscribed to
+multiple sources within the same group,
+data from the remaining sources will still be delivered.
+To stop receiving data from all sources at once,
+use
+.BR IP_DROP_MEMBERSHIP (2const).
+.SH ERRORS
+See
+.BR IPPROTO_IP (2const).
+See
+.BR setsockopt (2).
+See
+.BR ip (7).
+.SH HISTORY
+Linux 2.4.22, Linux 2.5.68.
+.SH SEE ALSO
+.BR IPPROTO_IP (2const),
+.BR ip_mreq_source (2type),
+.BR setsockopt (2),
+.BR ip (7)
diff --git a/man/man2const/IP_FREEBIND.2const b/man/man2const/IP_FREEBIND.2const
new file mode 100644
index 0000000000..6a00dde940
--- /dev/null
+++ b/man/man2const/IP_FREEBIND.2const
@@ -0,0 +1,52 @@
+.\" Copyright, the authors of the Linux man-pages project
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH IP_FREEBIND 2const (date) "Linux man-pages (unreleased)"
+.SH NAME
+IP_FREEBIND
+\-
+bind to a nonlocal or nonexistent IP address
+.SH LIBRARY
+Standard C library
+.RI ( libc ,\~ \-lc )
+.SH SYNOPSIS
+.nf
+.BR "#include <netinet/in.h>" " /* Definition of " IP* " constants */"
+.B #include <sys/socket.h>
+.P
+.BI int\~setsockopt(int\~ sockfd ,\~IPPROTO_IP,\~IP_FREEBIND,
+.BI " const\~int\~*" enable ,\~sizeof(int));
+.fi
+.SH DESCRIPTION
+If enabled,
+this boolean option allows binding to an IP address
+that is nonlocal or does not (yet) exist.
+.P
+This permits listening on a socket,
+without requiring
+the underlying network interface
+or the specified dynamic IP address
+to be up at the time
+that the application is trying to bind to it.
+.P
+This option is the per-socket equivalent of the
+.I /proc/sys/net/ipv4/ip_nonlocal_bind
+interface.
+.SH ERRORS
+See
+.BR IPPROTO_IP (2const).
+See
+.BR setsockopt (2).
+See
+.BR ip (7).
+.SH STANDARDS
+Linux.
+.SH HISTORY
+Linux 2.4.
+.\" Precisely: since Linux 2.4.0-test10
+.SH SEE ALSO
+.BR IPPROTO_IP (2const),
+.BR setsockopt (2),
+.BR proc_sys_net_ipv4 (5),
+.BR ip (7)
diff --git a/man/man2const/IP_HDRINCL.2const b/man/man2const/IP_HDRINCL.2const
new file mode 100644
index 0000000000..948c6d651e
--- /dev/null
+++ b/man/man2const/IP_HDRINCL.2const
@@ -0,0 +1,51 @@
+.\" Copyright, the authors of the Linux man-pages project
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH IPPROTO_IP 2const (date) "Linux man-pages (unreleased)"
+.SH NAME
+IPPROTO_IP
+\-
+include a user-supplied IP header
+.SH LIBRARY
+Standard C library
+.RI ( libc ,\~ \-lc )
+.SH SYNOPSIS
+.nf
+.BR "#include <netinet/in.h>" " /* Definition of " IP* " constants */"
+.B #include <sys/socket.h>
+.P
+.BI int\~setsockopt(int\~ sockfd ,\~IPPROTO_IP,\~IP_HDRINCL,
+.BI " const\~int\~*" enable ,\~sizeof(int));
+.fi
+.SH DESCRIPTION
+If enabled,
+the user supplies an IP header in front of the user data.
+.P
+Valid only for
+.B SOCK_RAW
+sockets;
+see
+.BR raw (7)
+for more information.
+.P
+When this flag is enabled,
+the values set by
+.BR IP_OPTIONS (2const),
+.BR IP_TTL (2const),
+and
+.BR IP_TOS (2const)
+are ignored.
+.SH ERRORS
+See
+.BR IPPROTO_IP (2const).
+See
+.BR setsockopt (2).
+See
+.BR ip (7).
+.SH HISTORY
+Linux 2.0.
+.SH SEE ALSO
+.BR IPPROTO_IP (2const),
+.BR setsockopt (2),
+.BR ip (7)
diff --git a/man/man2const/IP_LOCAL_PORT_RANGE.2const b/man/man2const/IP_LOCAL_PORT_RANGE.2const
new file mode 100644
index 0000000000..c4ac9cb498
--- /dev/null
+++ b/man/man2const/IP_LOCAL_PORT_RANGE.2const
@@ -0,0 +1,62 @@
+.\" Copyright, the authors of the Linux man-pages project
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH IP_LOCAL_PORT_RANGE 2const (date) "Linux man-pages (unreleased)"
+.SH NAME
+IP_LOCAL_PORT_RANGE
+\-
+default local port range
+.SH LIBRARY
+Standard C library
+.RI ( libc ,\~ \-lc )
+.SH SYNOPSIS
+.nf
+.BR "#include <netinet/in.h>" " /* Definition of " IP* " constants */"
+.B #include <sys/socket.h>
+.P
+.BI int\~setsockopt(int\~ sockfd ,\~IPPROTO_IP,\~IP_LOCAL_PORT_RANGE,
+.BI " const\~uint32_t\~*" val ,\~sizeof(uint32_t));
+.BI int\~getsockopt(int\~ sockfd ,\~IPPROTO_IP,\~IP_LOCAL_PORT_RANGE,
+.BI " uint32_t\~*" val ,\~sizeof(uint32_t));
+.fi
+.SH DESCRIPTION
+Set or get the per-socket default local port range.
+.P
+This option can be used to clamp down the global local port range,
+defined by the
+.I /proc/sys/net/ipv4/ip_local_port_range
+interface,
+for a given socket.
+.P
+The option takes an
+.I uint32_t
+value with
+the high 16 bits set to the upper range bound,
+and the low 16 bits set to the lower range bound.
+Range bounds are inclusive.
+The 16-bit values should be in host byte order.
+.P
+The lower bound has to be less than the upper bound
+when both bounds are not zero.
+Otherwise, setting the option fails with EINVAL.
+.P
+If either bound is outside of the global local port range, or is zero,
+then that bound has no effect.
+.P
+To reset the setting,
+pass zero as both the upper and the lower bound.
+.SH ERRORS
+See
+.BR IPPROTO_IP (2const).
+See
+.BR setsockopt (2).
+See
+.BR ip (7).
+.SH HISTORY
+Linux 6.3.
+.SH SEE ALSO
+.BR IPPROTO_IP (2const),
+.BR setsockopt (2),
+.BR proc_sys_net_ipv4 (5),
+.BR ip (7)
diff --git a/man/man2const/IP_MSFILTER.2const b/man/man2const/IP_MSFILTER.2const
new file mode 100644
index 0000000000..e05c26a118
--- /dev/null
+++ b/man/man2const/IP_MSFILTER.2const
@@ -0,0 +1,67 @@
+.\" Copyright, the authors of the Linux man-pages project
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH IP_MSFILTER 2const (date) "Linux man-pages (unreleased)"
+.SH NAME
+IP_MSFILTER
+\-
+multicast source filtering
+.SH LIBRARY
+Standard C library
+.RI ( libc ,\~ \-lc )
+.SH SYNOPSIS
+.nf
+.BR "#include <netinet/in.h>" " /* Definition of " IP* " constants */"
+.B #include <sys/socket.h>
+.P
+.BI int\~setsockopt(int\~ sockfd ,\~IPPROTO_IP,\~IP_MSFILTER,
+.BI " const\~struct\~ip_msfilter\~*" val ,
+.B " sizeof(struct\~ip_msfilter));"
+.fi
+.P
+.EX
+struct ip_msfilter {
+ struct in_addr imsf_multiaddr; // IP multicast group address
+ struct in_addr imsf_interface; // IP address of local interface
+ uint32_t imsf_fmode; // Filter\-mode
+\&
+ uint32_t imsf_numsrc; // Number of elements in .imsf_slist
+ struct in_addr imsf_slist[1]; // Array of source addresses
+};
+.EE
+.SH DESCRIPTION
+This option provides access to the advanced full-state filtering API.
+.P
+There are two macros,
+.B MCAST_INCLUDE
+and
+.BR MCAST_EXCLUDE ,
+which can be used to specify the filtering mode.
+.P
+Additionally,
+the
+.BR IP_MSFILTER_SIZE (n)
+macro exists to determine how much memory is needed to store
+.I ip_msfilter
+structure with
+.I n
+sources in the source list.
+.P
+For the full description of multicast source filtering
+refer to RFC 3376.
+.SH ERRORS
+See
+.BR IPRROTO_IP (2const).
+See
+.BR setsockopt (2).
+See
+.BR ip (7).
+.SH STANDARDS
+Linux.
+.SH HISTORY
+Linux 2.4.22, Linux 2.5.68.
+.SH SEE ALSO
+.BR IPPROTO_IP (2const),
+.BR setsockopt (2),
+.BR ip (7)
diff --git a/man/man2const/IP_MTU.2const b/man/man2const/IP_MTU.2const
new file mode 100644
index 0000000000..3d3f4b685b
--- /dev/null
+++ b/man/man2const/IP_MTU.2const
@@ -0,0 +1,43 @@
+.\" Copyright, the authors of the Linux man-pages project
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH IP_MTU 2const (date) "Linux man-pages (unreleased)"
+.SH NAME
+IP_MTU
+\-
+path maximum transmission unit size
+.SH LIBRARY
+Standard C library
+.RI ( libc ,\~ \-lc )
+.SH SYNOPSIS
+.nf
+.BR "#include <netinet/in.h>" " /* Definition of " IP* " constants */"
+.B #include <sys/socket.h>
+.P
+.BI int\~getsockopt(int\~ sockfd ,\~IPPROTO_IP,\~IP_MTU,
+.BI " int\~*" val ,\~sizeof(int));
+.fi
+.SH DESCRIPTION
+Retrieve the current known path MTU of the current socket.
+.P
+.B IP_MTU
+is valid only for
+.BR getsockopt (2),
+and can be employed only when the socket has been connected.
+.SH ERRORS
+See
+.BR IPPROTO_IP (2const).
+See
+.BR getsockopt (2).
+See
+.BR ip (7).
+.SH STANDARDS
+Linux.
+.SH HISTORY
+Linux 2.2.
+.\" Precisely: since Linux 2.1.124
+.SH SEE ALSO
+.BR IPPROTO_IP (2const),
+.BR getsockopt (2),
+.BR ip (7)
diff --git a/man/man2const/IP_MTU_DISCOVER.2const b/man/man2const/IP_MTU_DISCOVER.2const
new file mode 100644
index 0000000000..b0f358bec0
--- /dev/null
+++ b/man/man2const/IP_MTU_DISCOVER.2const
@@ -0,0 +1,127 @@
+'\" t
+.\" Copyright, the authors of the Linux man-pages project
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH IP_MTU_DISCOVER 2const (date) "Linux man-pages (unreleased)"
+.SH NAME
+IP_MTU_DISCOVER
+\-
+path maximum transfer unit size discovery
+.SH LIBRARY
+Standard C library
+.RI ( libc ,\~ \-lc )
+.SH SYNOPSIS
+.nf
+.BR "#include <netinet/in.h>" " /* Definition of " IP* " constants */"
+.B #include <sys/socket.h>
+.P
+.BI int\~setsockopt(int\~ sockfd ,\~IPPROTO_IP,\~IP_MTU_DISCOVER,
+.BI " const\~int\~*" val ,\~sizeof(int));
+.BI int\~getsockopt(int\~ sockfd ,\~IPPROTO_IP,\~IP_MTU_DISCOVER,
+.BI " int\~*" val ,\~sizeof(int));
+.fi
+.SH DESCRIPTION
+Set or receive the Path MTU Discovery setting for a socket.
+.P
+When enabled,
+Linux will perform Path MTU Discovery
+as defined in RFC\ 1191 on
+.B SOCK_STREAM
+sockets.
+.P
+For
+.RB non- SOCK_STREAM
+sockets,
+.B IP_PMTUDISC_DO
+forces the don't-fragment flag to be set on all outgoing packets.
+It is the user's responsibility to packetize the data
+in MTU-sized chunks and to do the retransmits if necessary.
+The kernel will reject (with
+.BR EMSGSIZE )
+datagrams that are bigger than the known path MTU.
+.B IP_PMTUDISC_WANT
+will fragment a datagram if needed according to the path MTU,
+or will set the don't-fragment flag otherwise.
+.P
+The system-wide default can be toggled between
+.B IP_PMTUDISC_WANT
+and
+.B IP_PMTUDISC_DONT
+by writing (respectively, zero and nonzero values) to the
+.I /proc/sys/net/ipv4/ip_no_pmtu_disc
+file.
+.TS
+tab(:);
+c l
+l l.
+Path MTU discovery value:Meaning
+IP_PMTUDISC_WANT:Use per-route settings.
+IP_PMTUDISC_DONT:Never do Path MTU Discovery.
+IP_PMTUDISC_DO:Always do Path MTU Discovery.
+IP_PMTUDISC_PROBE:Set DF but ignore Path MTU.
+.TE
+.P
+When PMTU discovery is enabled, the kernel automatically keeps track of
+the path MTU per destination host.
+When it is connected to a specific peer with
+.BR connect (2),
+the currently known path MTU can be retrieved conveniently using the
+.BR IP_MTU (2const)
+socket option (e.g., after an
+.B EMSGSIZE
+error occurred).
+The path MTU may change over time.
+For connectionless sockets with many destinations,
+the new MTU for a given destination can also be accessed using the
+error queue (see
+.BR IP_RECVERR (2const)).
+A new error will be queued for every incoming MTU update.
+.P
+While MTU discovery is in progress, initial packets from datagram sockets
+may be dropped.
+Applications using UDP should be aware of this and not
+take it into account for their packet retransmit strategy.
+.P
+To bootstrap the path MTU discovery process on unconnected sockets, it
+is possible to start with a big datagram size
+(headers up to 64 kilobytes long) and let it shrink by updates of the path MTU.
+.P
+To get an initial estimate of the
+path MTU, connect a datagram socket to the destination address using
+.BR connect (2)
+and retrieve the MTU by calling
+.BR getsockopt (2)
+with the
+.BR IP_MTU (2const)
+option.
+.P
+It is possible to implement RFC 4821 MTU probing with
+.B SOCK_DGRAM
+or
+.B SOCK_RAW
+sockets by setting a value of
+.BR IP_PMTUDISC_PROBE .
+This is also particularly useful for diagnostic tools such as
+.BR tracepath (8)
+that wish to deliberately send probe packets larger than
+the observed Path MTU.
+.SH ERRORS
+See
+.BR IPPROTO_IP (2const).
+See
+.BR setsockopt (2).
+See
+.BR ip (7).
+.SH STANDARDS
+Linux.
+.SH HISTORY
+Linux 2.2.
+.\" Precisely: since Linux 2.1.124
+.TP
+.B IP_PMTUDISC_PROBE
+Linux 2.6.22.
+.SH SEE ALSO
+.BR IPPROTO_IP (2const),
+.BR setsockopt (2),
+.BR ip (7)
diff --git a/man/man2const/IP_MULTICAST_ALL.2const b/man/man2const/IP_MULTICAST_ALL.2const
new file mode 100644
index 0000000000..dd32ec0091
--- /dev/null
+++ b/man/man2const/IP_MULTICAST_ALL.2const
@@ -0,0 +1,46 @@
+.\" Copyright, the authors of the Linux man-pages project
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH IP_MULTICAST_ALL 2const (date) "Linux man-pages (unreleased)"
+.SH NAME
+IP_MULTICAST_ALL
+\-
+delivery policy of multicast messages
+.SH LIBRARY
+Standard C library
+.RI ( libc ,\~ \-lc )
+.SH SYNOPSIS
+.nf
+.BR "#include <netinet/in.h>" " /* Definition of " IP* " constants */"
+.B #include <sys/socket.h>
+.P
+.BI int\~setsockopt(int\~ sockfd ,\~IPPROTO_IP,\~IP_MULTICAST_ALL,
+.BI " const\~int\~*" val ,\~sizeof(int));
+.fi
+.SH DESCRIPTION
+This option can be used to modify the delivery policy of multicast messages.
+.P
+If set to 1 (default),
+the socket will receive messages from all the groups that have been joined
+globally on the whole system.
+.P
+If set to 0,
+it will deliver messages only from
+the groups that have been explicitly joined
+(for example via
+.BR IP_ADD_MEMBERSHIP (2const))
+on this particular socket.
+.SH ERRORS
+See
+.BR IPPROTO_IP (2const).
+See
+.BR setsockopt (2).
+See
+.BR ip (7).
+.SH HISTORY
+Linux 2.6.31.
+.SH SEE ALSO
+.BR IPPROTO_IP (2const),
+.BR setsockopt (2),
+.BR ip (7)
diff --git a/man/man2const/IP_MULTICAST_IF.2const b/man/man2const/IP_MULTICAST_IF.2const
new file mode 100644
index 0000000000..71d7811544
--- /dev/null
+++ b/man/man2const/IP_MULTICAST_IF.2const
@@ -0,0 +1,56 @@
+.\" Copyright, the authors of the Linux man-pages project
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH IP_MULTICAST_IF 2const (date) "Linux man-pages (unreleased)"
+.SH NAME
+IP_MULTICAST_IF
+\-
+local device for a multicast socket
+.SH LIBRARY
+Standard C library
+.RI ( libc ,\~ \-lc )
+.SH SYNOPSIS
+.nf
+.BR "#include <netinet/in.h>" " /* Definition of " IP* " constants */"
+.B #include <sys/socket.h>
+.P
+.BI int\~setsockopt(int\~ sockfd ,\~IPPROTO_IP,\~IP_MULTICAST_IF,
+.BI " const\~void\~" val [ size ],\~size_t\~ size );
+.BI int\~getsockopt(int\~ sockfd ,\~IPPROTO_IP,\~IP_MULTICAST_IF,
+.BI " struct\~in_addr\~*" val ,\~sizeof(struct\~in_addr));
+.fi
+.SH DESCRIPTION
+Set the local device for a multicast socket.
+.P
+The argument for
+.BR setsockopt (2)
+is an
+.BR ip_mreqn (2type)
+or
+.\" net: IP_MULTICAST_IF setsockopt now recognizes struct mreq
+.\" Commit: 3a084ddb4bf299a6e898a9a07c89f3917f0713f7
+(since Linux 3.5)
+.BR ip_mreq (2type)
+structure,
+or an
+.BR in_addr (2type)
+structure.
+(The kernel determines which structure is being passed based
+on the size passed in
+.IR size .)
+.SH ERRORS
+See
+.BR IPPROTO_IP (2const).
+See
+.BR setsockopt (2).
+See
+.BR ip (7).
+.SH HISTORY
+Linux 1.2.
+.SH SEE ALSO
+.BR IPPROTO_IP (2const),
+.BR in_addr (2type),
+.BR ip_mreqn (2type),
+.BR setsockopt (2),
+.BR ip (7)
diff --git a/man/man2const/IP_MULTICAST_LOOP.2const b/man/man2const/IP_MULTICAST_LOOP.2const
new file mode 100644
index 0000000000..3c59465d8a
--- /dev/null
+++ b/man/man2const/IP_MULTICAST_LOOP.2const
@@ -0,0 +1,38 @@
+.\" Copyright, the authors of the Linux man-pages project
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH IP_MULTICAST_LOOP 2const (date) "Linux man-pages (unreleased)"
+.SH NAME
+IP_MULTICAST_LOOP
+\-
+loop back sent multicast packets to local sockets
+.SH LIBRARY
+Standard C library
+.RI ( libc ,\~ \-lc )
+.SH SYNOPSIS
+.nf
+.BR "#include <netinet/in.h>" " /* Definition of " IP* " constants */"
+.B #include <sys/socket.h>
+.P
+.BI int\~setsockopt(int\~ sockfd ,\~IPPROTO_IP,\~IP_MULTICAST_LOOP,
+.BI " const\~int\~*" enable ,\~sizeof(int));
+.BI int\~getsockopt(int\~ sockfd ,\~IPPROTO_IP,\~IP_MULTICAST_LOOP,
+.BI " int\~*" enabled ,\~sizeof(int));
+.fi
+.SH DESCRIPTION
+Set or read a boolean integer argument that determines whether
+sent multicast packets should be looped back to the local sockets.
+.SH ERRORS
+See
+.BR IPPROTO_IP (2const).
+See
+.BR setsockopt (2).
+See
+.BR ip (7).
+.SH HISTORY
+Linux 1.2.
+.SH SEE ALSO
+.BR IPPROTO_IP (2const),
+.BR setsockopt (2),
+.BR ip (7)
diff --git a/man/man2const/IP_MULTICAST_TTL.2const b/man/man2const/IP_MULTICAST_TTL.2const
new file mode 100644
index 0000000000..f325f4fe4f
--- /dev/null
+++ b/man/man2const/IP_MULTICAST_TTL.2const
@@ -0,0 +1,43 @@
+.\" Copyright, the authors of the Linux man-pages project
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH IP_MULTICAST_TTL 2const (date) "Linux man-pages (unreleased)"
+.SH NAME
+IP_MULTICAST_TTL
+\-
+time-to-live value of outgoing multicast packets
+.SH LIBRARY
+Standard C library
+.RI ( libc ,\~ \-lc )
+.SH SYNOPSIS
+.nf
+.BR "#include <netinet/in.h>" " /* Definition of " IP* " constants */"
+.B #include <sys/socket.h>
+.P
+.BI int\~setsockopt(int\~ sockfd ,\~IPPROTO_IP,\~IP_MULTICAST_TTL,
+.BI " const\~int\~*" ttl ,\~sizeof(int));
+.BI int\~getsockopt(int\~ sockfd ,\~IPPROTO_IP,\~IP_MULTICAST_TTL,
+.BI " int\~*" ttl ,\~sizeof(int));
+.fi
+.SH DESCRIPTION
+Set or read the time-to-live value of outgoing multicast packets for this
+socket.
+.P
+The default is 1 which means that multicast packets don't leave the local
+network unless the user program explicitly requests it.
+.SH ERRORS
+See
+.BR IPPROTO_IP (2const).
+See
+.BR setsockopt (2).
+See
+.BR ip (7).
+.SH HISTORY
+Linux 1.2.
+.SH CAVEATS
+It is very important for multicast packets to set the smallest TTL possible.
+.SH SEE ALSO
+.BR IPPROTO_IP (2const),
+.BR setsockopt (2),
+.BR ip (7)
diff --git a/man/man2const/IP_NODEFRAG.2const b/man/man2const/IP_NODEFRAG.2const
new file mode 100644
index 0000000000..da0bfea158
--- /dev/null
+++ b/man/man2const/IP_NODEFRAG.2const
@@ -0,0 +1,42 @@
+.\" Copyright, the authors of the Linux man-pages project
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH IP_NODEFRAG 2const (date) "Linux man-pages (unreleased)"
+.SH NAME
+IP_NODEFRAG
+\-
+don't defragmentate outgoing packets
+.SH LIBRARY
+Standard C library
+.RI ( libc ,\~ \-lc )
+.SH SYNOPSIS
+.nf
+.BR "#include <netinet/in.h>" " /* Definition of " IP* " constants */"
+.B #include <sys/socket.h>
+.P
+.BI int\~setsockopt(int\~ sockfd ,\~IPPROTO_IP,\~IP_NODEFRAG,
+.BI " const\~int\~*" val ,\~sizeof(int));
+.fi
+.SH DESCRIPTION
+If
+.I val
+is nonzero,
+the reassembly of outgoing packets is disabled in the netfilter layer.
+.P
+This option is valid only for
+.B SOCK_RAW
+sockets.
+.SH ERRORS
+See
+.BR IPPROTO_IP (2const).
+See
+.BR setsockopt (2).
+See
+.BR ip (7).
+.SH HISTORY
+Linux 2.6.36.
+.SH SEE ALSO
+.BR IPPROTO_IP (2const),
+.BR setsockopt (2),
+.BR ip (7)
diff --git a/man/man2const/IP_OPTIONS.2const b/man/man2const/IP_OPTIONS.2const
new file mode 100644
index 0000000000..f60d5aece0
--- /dev/null
+++ b/man/man2const/IP_OPTIONS.2const
@@ -0,0 +1,71 @@
+.\" Copyright, the authors of the Linux man-pages project
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH IP_OPTIONS 2const (date) "Linux man-pages (unreleased)"
+.SH NAME
+IP_OPTIONS
+\-
+options to be sent with every packet
+.SH LIBRARY
+Standard C library
+.RI ( libc ,\~ \-lc )
+.SH SYNOPSIS
+.nf
+.BR "#include <netinet/in.h>" " /* Definition of " IP* " constants */"
+.B #include <sys/socket.h>
+.P
+.BI int\~setsockopt(int\~ sockfd ,\~IPPROTO_IP,\~IP_OPTIONS,
+.BI " const\~void\~" buf [ size ],\~size_t\~ size );
+.BI int\~getsockopt(int\~ sockfd ,\~IPPROTO_IP,\~IP_OPTIONS,
+.BI " void\~" buf [ size ],\~size_t\~ size );
+.fi
+.SH DESCRIPTION
+Set or get the IP options to be sent with every packet from this socket.
+.P
+The arguments are a pointer to a memory buffer containing the options
+and the buffer length.
+.P
+The
+.BR setsockopt (2)
+call sets the IP options associated with a socket.
+The maximum option size for IPv4 is 40 bytes.
+See RFC\ 791 for the allowed options.
+.P
+When the initial connection request packet for a
+.B SOCK_STREAM
+socket contains IP options,
+the IP options will be set automatically
+to the options from the initial packet with routing headers reversed.
+.P
+Incoming packets are not allowed to change options
+after the connection is established.
+.P
+The processing of all incoming source routing options
+is disabled by default and can be enabled by using the
+.I accept_source_route
+.I /proc
+interface.
+Other options like timestamps are still handled.
+.P
+For datagram sockets, IP options can be set only by the local user.
+.P
+Calling
+.BR getsockopt (2)
+with
+.B IP_OPTIONS
+puts the current IP options used for sending into the supplied buffer.
+.SH ERRORS
+See
+.BR IPPROTO_IP (2const).
+See
+.BR setsockopt (2).
+See
+.BR ip (7).
+.SH HISTORY
+Linux 2.0.
+.\" Precisely: since Linux 1.3.30
+.SH SEE ALSO
+.BR IPPROTO_IP (2const),
+.BR setsockopt (2),
+.BR ip (7)
diff --git a/man/man2const/IP_PASSSEC.2const b/man/man2const/IP_PASSSEC.2const
new file mode 100644
index 0000000000..46845cf3d8
--- /dev/null
+++ b/man/man2const/IP_PASSSEC.2const
@@ -0,0 +1,69 @@
+.\" Copyright, the authors of the Linux man-pages project
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH IP_PASSSEC 2const (date) "Linux man-pages (unreleased)"
+.SH NAME
+IP_PASSSEC
+\-
+receive the security context of the peer socket
+.SH LIBRARY
+Standard C library
+.RI ( libc ,\~ \-lc )
+.SH SYNOPSIS
+.nf
+.BR "#include <netinet/in.h>" " /* Definition of " IP* " constants */"
+.B #include <sys/socket.h>
+.P
+.BI int\~setsockopt(int\~ sockfd ,\~IPPROTO_IP,\~IP_PASSSEC,
+.BI " const\~int\~*" enable ,\~sizeof(int));
+.BI int\~getsockopt(int\~ sockfd ,\~IPPROTO_IP,\~IP_PASSSEC,
+.BI " int\~*" enabled ,\~sizeof(int));
+.fi
+.SH DESCRIPTION
+If labeled IPSEC or NetLabel is configured on the sending and receiving
+hosts, this option enables receiving of the security context of the peer
+socket in an ancillary message of type
+.B SCM_SECURITY
+retrieved using
+.BR recvmsg (2).
+.P
+This option is supported only for UDP sockets;
+for TCP or SCTP sockets,
+see
+.BR SO_PEERSEC (2const).
+.P
+The security context returned in the
+.B SCM_SECURITY
+ancillary message
+is of the same format as the one described in
+.BR SO_PEERSEC (2const).
+.SH ERRORS
+See
+.BR IPPROTO_IP (2const).
+See
+.BR setsockopt (2).
+See
+.BR ip (7).
+.SH STANDARDS
+Linux.
+.SH HISTORY
+Linux 2.6.17.
+.\" commit 2c7946a7bf45ae86736ab3b43d0085e43947945c
+.SH CAVEATS
+The reuse of the
+.B SCM_SECURITY
+message type for the
+.B IP_PASSSEC
+socket option was likely a mistake, since other IP control messages use
+their own numbering scheme in the IP namespace and often use the
+socket option value as the message type.
+There is no conflict currently since the IP option with the same value as
+.B SCM_SECURITY
+is
+.BR IP_HDRINCL (2const)
+and this is never used for a control message type.
+.SH SEE ALSO
+.BR IPPROTO_IP (2const),
+.BR setsockopt (2),
+.BR ip (7)
diff --git a/man/man2const/IP_PKTINFO.2const b/man/man2const/IP_PKTINFO.2const
new file mode 100644
index 0000000000..9546d68c65
--- /dev/null
+++ b/man/man2const/IP_PKTINFO.2const
@@ -0,0 +1,111 @@
+.\" Copyright, the authors of the Linux man-pages project
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH IP_PKTINFO 2const (date) "Linux man-pages (unreleased)"
+.SH NAME
+IP_PKTINFO
+\-
+information about the incoming packet
+.SH LIBRARY
+Standard C library
+.RI ( libc ,\~ \-lc )
+.SH SYNOPSIS
+.nf
+.BR "#include <netinet/in.h>" " /* Definition of " IP* " constants */"
+.B #include <sys/socket.h>
+.P
+.BI int\~setsockopt(int\~ sockfd ,\~IPPROTO_IP,\~IP_PKTINFO,
+.BI " const\~int\~*" enable ,\~sizeof(int));
+.fi
+.P
+.EX
+struct in_pktinfo {
+ unsigned int ipi_ifindex; /* Interface index */
+ struct in_addr ipi_spec_dst; /* Local address */
+ struct in_addr ipi_addr; /* Header Destination address */
+};
+.EE
+.SH DESCRIPTION
+Pass an
+.B IP_PKTINFO
+ancillary message that contains a
+.I pktinfo
+structure that supplies some information about the incoming packet.
+This works only for datagram oriented sockets.
+.P
+The argument is a flag that tells the socket whether the
+.B IP_PKTINFO
+message should be passed or not.
+.P
+The message itself can be sent/retrieved
+only as a control message with a packet using
+.BR recvmsg (2)
+or
+.BR sendmsg (2).
+.P
+When returned by
+.BR recvmsg (2) ,
+.I .ipi_ifindex
+is the unique index of the interface the packet was received on.
+.I .ipi_spec_dst
+is the preferred source address for replies to the given packet,
+and
+.I .ipi_addr
+is the destination address in the packet header.
+These addresses are usually the same,
+but can differ for broadcast or multicast packets.
+Depending on the configured routes,
+.I .ipi_spec_dst
+might belong to a different interface from the one that received the packet.
+.P
+If
+.B IP_PKTINFO
+is passed to
+.BR sendmsg (2)
+and
+.\" This field is grossly misnamed
+.I .ipi_spec_dst
+is not zero,
+then it is used as the local source address,
+for the routing table lookup,
+and for setting up IP source route options.
+When
+.I .ipi_ifindex
+is not zero,
+the primary local address of the interface specified by the index
+overwrites
+.I .ipi_spec_dst
+for the routing table lookup.
+.I .ipi_addr
+is ignored.
+.P
+Not supported for
+.B SOCK_STREAM
+sockets.
+.SH ERRORS
+See
+.BR IPPROTO_IP (2const).
+See
+.BR setsockopt (2).
+See
+.BR ip (7).
+.SH VERSIONS
+Some BSD sockets implementations provide
+.B IP_RCVDSTADDR
+and
+.B IP_RECVIF
+socket options to get the destination address and the interface of
+received datagrams.
+Linux has the more general
+.B IP_PKTINFO
+for the same task.
+.SH STANDARDS
+Linux.
+.SH HISTORY
+Linux 2.2.
+.\" Precisely: since Linux 2.1.68
+.SH SEE ALSO
+.BR IPPROTO_IP (2const),
+.BR setsockopt (2),
+.BR ip (7)
diff --git a/man/man2const/IP_RECVERR.2const b/man/man2const/IP_RECVERR.2const
new file mode 100644
index 0000000000..dba2216518
--- /dev/null
+++ b/man/man2const/IP_RECVERR.2const
@@ -0,0 +1,188 @@
+.\" Copyright, the authors of the Linux man-pages project
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH IP_RECVERR 2const (date) "Linux man-pages (unreleased)"
+.SH NAME
+IP_RECVERR
+\-
+extended reliable error message passing
+.SH LIBRARY
+Standard C library
+.RI ( libc ,\~ \-lc )
+.SH SYNOPSIS
+.nf
+.BR "#include <netinet/in.h>" " /* Definition of " IP* " constants */"
+.B #include <sys/socket.h>
+.P
+.BI int\~setsockopt(int\~ sockfd ,\~IPPROTO_IP,\~IP_RECVERR,
+.BI " const\~int\~*" enable ,\~sizeof(int));
+.BI int\~getsockopt(int\~ sockfd ,\~IPPROTO_IP,\~IP_RECVERR,
+.BI " int\~*" enabled ,\~sizeof(int));
+.fi
+.P
+.EX
+struct sock_extended_err {
+ uint32_t ee_errno; /* error number */
+ uint8_t ee_origin; /* where the error originated */
+ uint8_t ee_type; /* type */
+ uint8_t ee_code; /* code */
+ uint8_t ee_pad;
+ uint32_t ee_info; /* additional information */
+ uint32_t ee_data; /* other data */
+ /* More data may follow */
+};
+.EE
+.P
+.nf
+#define SO_EE_ORIGIN_NONE 0
+#define SO_EE_ORIGIN_LOCAL 1
+#define SO_EE_ORIGIN_ICMP 2
+#define SO_EE_ORIGIN_ICMP6 3
+.P
+.B struct\~sockaddr\~*SO_EE_OFFENDER(struct\~sock_extended_err\~*);
+.SH DESCRIPTION
+Enable extended reliable error message passing
+(default: disabled).
+.P
+When enabled on a datagram socket,
+all generated errors will be queued in a per-socket error queue.
+When the user receives an error from a socket operation,
+the errors can be received by calling
+.BR recvmsg (2)
+with the
+.B MSG_ERRQUEUE
+flag set.
+The
+.I sock_extended_err
+structure describing the error
+will be passed in an ancillary message
+with the type
+.B IP_RECVERR
+and the level
+.BR IPPROTO_IP .
+.\" or SOL_IP on Linux
+This is useful for reliable error handling on unconnected sockets.
+The received data portion of the error queue contains the error packet.
+.P
+The
+.B IP_RECVERR
+control message contains a
+.I sock_extended_err
+structure.
+.TP
+.I .ee_errno
+contains the
+.I errno
+number of the queued error.
+.TP
+.I .ee_origin
+is the origin code of where the error originated.
+.P
+The other fields are protocol-specific.
+.P
+The macro
+.BR SO_EE_OFFENDER ()
+returns a pointer to the address of the network object
+where the error originated from
+given a pointer to the ancillary message.
+If this address is not known,
+the
+.I .sa_family
+member of the
+.I sockaddr
+contains
+.B AF_UNSPEC
+and the other fields of the
+.I sockaddr
+are undefined.
+.P
+IP uses the
+.I sock_extended_err
+structure as follows:
+.IP \[bu] 3
+.I .ee_origin
+is set to
+.B SO_EE_ORIGIN_ICMP
+for errors received as an ICMP packet,
+or
+.B SO_EE_ORIGIN_LOCAL
+for locally generated errors.
+Unknown values should be ignored.
+.IP \[bu]
+.I .ee_type
+and
+.I .ee_code
+are set from the type and code fields of the ICMP header.
+.IP \[bu]
+.I .ee_info
+contains the discovered MTU for
+.B EMSGSIZE
+errors.
+.IP \[bu]
+The message also contains the
+.I sockaddr_in
+of the node caused that the error,
+which can be accessed with the
+.BR SO_EE_OFFENDER ()
+macro.
+.P
+The
+.I .sin_family
+field of the
+.BR SO_EE_OFFENDER ()
+address is
+.B AF_UNSPEC
+when the source was unknown.
+When the error originated from the network, all IP options
+.RB ( IP_OPTIONS (2const),
+.BR IP_TTL (2const),
+etc.) enabled on the socket and contained in the
+error packet are passed as control messages.
+The payload of the packet causing the error is returned as normal payload.
+.\" FIXME . Is it a good idea to document that? It is a dubious feature.
+.\" On
+.\" .B SOCK_STREAM
+.\" sockets,
+.\" .B IP_RECVERR
+.\" has slightly different semantics. Instead of
+.\" saving the errors for the next timeout, it passes all incoming
+.\" errors immediately to the user.
+.\" This might be useful for very short-lived TCP connections which
+.\" need fast error handling. Use this option with care:
+.\" it makes TCP unreliable
+.\" by not allowing it to recover properly from routing
+.\" shifts and other normal
+.\" conditions and breaks the protocol specification.
+.P
+TCP has no error queue;
+.B MSG_ERRQUEUE
+is not permitted on
+.B SOCK_STREAM
+sockets.
+.B IP_RECVERR
+is valid for TCP,
+but all errors are returned by socket function return or
+.B SO_ERROR
+only.
+.P
+For raw sockets,
+.B IP_RECVERR
+enables passing of all received ICMP errors to the
+application, otherwise errors are reported only on connected sockets
+.SH ERRORS
+See
+.BR IPPROTO_IP (2const).
+See
+.BR setsockopt (2).
+See
+.BR ip (7).
+.SH STANDARDS
+Linux.
+.SH HISTORY
+Linux 2.2.
+.\" Precisely: since Linux 2.1.15
+.SH SEE ALSO
+.BR IPPROTO_IP (2const),
+.BR setsockopt (2),
+.BR ip (7)
diff --git a/man/man2const/IP_RECVOPTS.2const b/man/man2const/IP_RECVOPTS.2const
new file mode 100644
index 0000000000..4b5b95fb78
--- /dev/null
+++ b/man/man2const/IP_RECVOPTS.2const
@@ -0,0 +1,45 @@
+.\" Copyright, the authors of the Linux man-pages project
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH IP_RECVOPTS 2const (date) "Linux man-pages (unreleased)"
+.SH NAME
+IP_RECVOPTS
+\-
+receive all incoming IP options in control message
+.SH LIBRARY
+Standard C library
+.RI ( libc ,\~ \-lc )
+.SH SYNOPSIS
+.nf
+.BR "#include <netinet/in.h>" " /* Definition of " IP* " constants */"
+.B #include <sys/socket.h>
+.P
+.BI int\~setsockopt(int\~ sockfd ,\~IPPROTO_IP,\~IP_RECVOPTS,
+.BI " const\~int\~*" enable ,\~sizeof(int));
+.fi
+.SH DESCRIPTION
+Pass all incoming IP options to the user in a
+.BR IP_OPTIONS (2const)
+control message.
+.P
+The routing header and other options are already filled in
+for the local host.
+.P
+Not supported for
+.B SOCK_STREAM
+sockets.
+.SH ERRORS
+See
+.BR IPPROTO_IP (2const).
+See
+.BR setsockopt (2).
+See
+.BR ip (7).
+.SH HISTORY
+Linux 2.2.
+.\" Precisely: since Linux 2.1.15
+.SH SEE ALSO
+.BR IPPROTO_IP (2const),
+.BR setsockopt (2),
+.BR ip (7)
diff --git a/man/man2const/IP_RECVORIGDSTADDR.2const b/man/man2const/IP_RECVORIGDSTADDR.2const
new file mode 100644
index 0000000000..505c5eadab
--- /dev/null
+++ b/man/man2const/IP_RECVORIGDSTADDR.2const
@@ -0,0 +1,51 @@
+.\" Copyright, the authors of the Linux man-pages project
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH IP_RECVORIGDSTADDR 2const (date) "Linux man-pages (unreleased)"
+.SH NAME
+IP_RECVORIGDSTADDR
+\-
+receive IP_ORIGDSTADDR control message
+.SH LIBRARY
+Standard C library
+.RI ( libc ,\~ \-lc )
+.SH SYNOPSIS
+.nf
+.BR "#include <netinet/in.h>" " /* Definition of " IP* " constants */"
+.B #include <sys/socket.h>
+.P
+.BI int\~setsockopt(int\~ sockfd ,\~IPPROTO_IP,\~IP_RECVORIGDSTADDR,
+.BI " const\~int\~*" enable ,\~sizeof(int));
+.fi
+.SH DESCRIPTION
+This boolean option enables the
+.B IP_ORIGDSTADDR
+ancillary message in
+.BR recvmsg (2),
+in which the kernel returns the original destination address
+of the datagram being received.
+.P
+The ancillary message contains a
+.BR sockaddr_in (2type)
+structure.
+.P
+Not supported for
+.B SOCK_STREAM
+sockets.
+.SH ERRORS
+See
+.BR IPPROTO_IP (2const).
+See
+.BR setsockopt (2).
+See
+.BR ip (7).
+.SH STANDARDS
+Linux.
+.SH HISTORY
+Linux 2.6.29.
+.\" commit e8b2dfe9b4501ed0047459b2756ba26e5a940a69
+.SH SEE ALSO
+.BR IPPROTO_IP (2const),
+.BR setsockopt (2),
+.BR ip (7)
diff --git a/man/man2const/IP_RECVTOS.2const b/man/man2const/IP_RECVTOS.2const
new file mode 100644
index 0000000000..e246b187d7
--- /dev/null
+++ b/man/man2const/IP_RECVTOS.2const
@@ -0,0 +1,45 @@
+.\" Copyright, the authors of the Linux man-pages project
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH IP_RECVTOS 2const (date) "Linux man-pages (unreleased)"
+.SH NAME
+IP_RECVTOS
+\-
+receive IP_TOS control message
+.SH LIBRARY
+Standard C library
+.RI ( libc ,\~ \-lc )
+.SH SYNOPSIS
+.nf
+.BR "#include <netinet/in.h>" " /* Definition of " IP* " constants */"
+.B #include <sys/socket.h>
+.P
+.BI int\~setsockopt(int\~ sockfd ,\~IPPROTO_IP,\~IP_RECVTOS,
+.BI " const\~int\~*" enable ,\~sizeof(int));
+.fi
+.SH DESCRIPTION
+If enabled,
+the
+.BR IP_TOS (2const)
+ancillary message is passed with incoming packets.
+It contains a byte which specifies the Type of Service/Precedence
+field of the packet header.
+.P
+Not supported for
+.B SOCK_STREAM
+sockets.
+.SH ERRORS
+See
+.BR IPPROTO_IP (2const).
+See
+.BR setsockopt (2).
+See
+.BR ip (7).
+.SH HISTORY
+Linux 2.2.
+.\" Precisely: since Linux 2.1.68
+.SH SEE ALSO
+.BR IPPROTO_IP (2const),
+.BR setsockopt (2),
+.BR ip (7)
diff --git a/man/man2const/IP_RECVTTL.2const b/man/man2const/IP_RECVTTL.2const
new file mode 100644
index 0000000000..77eeaec2c9
--- /dev/null
+++ b/man/man2const/IP_RECVTTL.2const
@@ -0,0 +1,54 @@
+.\" Copyright, the authors of the Linux man-pages project
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH IP_RECVTTL 2const (date) "Linux man-pages (unreleased)"
+.SH NAME
+IP_RECVTTL
+\-
+enable IP_TTL control message
+.SH LIBRARY
+Standard C library
+.RI ( libc ,\~ \-lc )
+.SH SYNOPSIS
+.nf
+.BR "#include <netinet/in.h>" " /* Definition of " IP* " constants */"
+.B #include <sys/socket.h>
+.P
+.BI int\~setsockopt(int\~ sockfd ,\~IPPROTO_IP,\~int\~ opt ,
+.BI " const\~int\~*" enable ,\~sizeof(int));
+.fi
+.SH DESCRIPTION
+When this flag is set,
+pass a
+.BR IP_TTL (2const)
+control message
+with the time-to-live field
+of the received packet as a 32 bit integer.
+.P
+Not supported for
+.B SOCK_STREAM
+sockets.
+.SH ERRORS
+See
+.BR IPPROTO_IP (2const).
+See
+.BR setsockopt (2).
+See
+.BR ip (7).
+.SH VERSIONS
+Some BSD sockets implementations also provide an
+.B IP_RECVTTL
+option, but an ancillary message with type
+.B IP_RECVTTL
+is passed with the incoming packet.
+This is different from the
+.BR IP_TTL (2const)
+option used in Linux.
+.SH HISTORY
+Linux 2.2.
+.\" Precisely: since Linux 2.1.68
+.SH SEE ALSO
+.BR IPPROTO_IP (2const),
+.BR setsockopt (2),
+.BR ip (7)
diff --git a/man/man2const/IP_RETOPTS.2const b/man/man2const/IP_RETOPTS.2const
new file mode 100644
index 0000000000..e750166f62
--- /dev/null
+++ b/man/man2const/IP_RETOPTS.2const
@@ -0,0 +1,43 @@
+.\" Copyright, the authors of the Linux man-pages project
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH IP_RETOPTS 2const (date) "Linux man-pages (unreleased)"
+.SH NAME
+IP_RETOPTS
+\-
+receive most incoming IP options in control message
+.SH LIBRARY
+Standard C library
+.RI ( libc ,\~ \-lc )
+.SH SYNOPSIS
+.nf
+.BR "#include <netinet/in.h>" " /* Definition of " IP* " constants */"
+.B #include <sys/socket.h>
+.P
+.BI int\~setsockopt(int\~ sockfd ,\~IPPROTO_IP,\~IP_RETOPTS,
+.BI " const\~int\~*" enabled ,\~sizeof(int));
+.fi
+.SH DESCRIPTION
+Identical to
+.BR IP_RECVOPTS (2const),
+but returns raw unprocessed options with timestamp and route record
+options not filled in for this hop.
+.P
+Not supported for
+.B SOCK_STREAM
+sockets.
+.SH ERRORS
+See
+.BR IPPROTO_IP (2const).
+See
+.BR setsockopt (2).
+See
+.BR ip (7).
+.SH HISTORY
+Linux 2.2.
+.\" Precisely: since Linux 2.1.15
+.SH SEE ALSO
+.BR IPPROTO_IP (2const),
+.BR setsockopt (2),
+.BR ip (7)
diff --git a/man/man2const/IP_ROUTER_ALERT.2const b/man/man2const/IP_ROUTER_ALERT.2const
new file mode 100644
index 0000000000..6aea0ca8c3
--- /dev/null
+++ b/man/man2const/IP_ROUTER_ALERT.2const
@@ -0,0 +1,49 @@
+.\" Copyright, the authors of the Linux man-pages project
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH IP_ROUTER_ALERT 2const (date) "Linux man-pages (unreleased)"
+.SH NAME
+IP_ROUTER_ALERT
+\-
+pass all to-be forwarded packets
+.SH LIBRARY
+Standard C library
+.RI ( libc ,\~ \-lc )
+.SH SYNOPSIS
+.nf
+.BR "#include <netinet/in.h>" " /* Definition of " IP* " constants */"
+.B #include <sys/socket.h>
+.P
+.BI int\~setsockopt(int\~ sockfd ,\~IPPROTO_IP,\~IP_ROUTER_ALERT,
+.BI " const\~int\~*" enable ,\~sizeof(int));
+.fi
+.SH DESCRIPTION
+Pass all to-be forwarded packets with the
+IP Router Alert option set to this socket.
+.P
+Valid only for raw sockets.
+.P
+This is useful, for instance, for user-space RSVP daemons.
+.SH ERRORS
+See
+.BR IPPROTO_IP (2const).
+See
+.BR setsockopt (2).
+See
+.BR ip (7).
+.SH STANDARDS
+Linux.
+.SH HISTORY
+Linux 2.2.
+.\" Precisely: since Linux 2.1.68
+.SH CAVEATS
+The tapped packets are not forwarded by the kernel;
+it is the user's responsibility to send them out again.
+.P
+Socket binding is ignored,
+such packets are filtered only by protocol.
+.SH SEE ALSO
+.BR IPPROTO_IP (2const),
+.BR setsockopt (2),
+.BR ip (7)
diff --git a/man/man2const/IP_TOS.2const b/man/man2const/IP_TOS.2const
new file mode 100644
index 0000000000..b5def16716
--- /dev/null
+++ b/man/man2const/IP_TOS.2const
@@ -0,0 +1,70 @@
+.\" Copyright, the authors of the Linux man-pages project
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH IP_TOS 2const (date) "Linux man-pages (unreleased)"
+.SH NAME
+IP_TOS
+\-
+type of service
+.SH LIBRARY
+Standard C library
+.RI ( libc ,\~ \-lc )
+.SH SYNOPSIS
+.nf
+.BR "#include <netinet/in.h>" " /* Definition of " IP* " constants */"
+.B #include <sys/socket.h>
+.P
+.BI int\~setsockopt(int\~ sockfd ,\~IPPROTO_IP,\~IP_TOS,
+.BI " const\~int\~*" tos ,\~sizeof(int));
+.BI int\~getsockopt(int\~ sockfd ,\~IPPROTO_IP,\~IP_TOS,
+.BI " int\~*" tos ,\~sizeof(int));
+.fi
+.SH DESCRIPTION
+Set or receive the Type-Of-Service (TOS) field that is sent
+with every IP packet originating from this socket.
+It is used to prioritize packets on the network.
+.P
+There are some standard TOS flags defined:
+.TP
+.B IPTOS_LOWDELAY
+to minimize delays for interactive traffic,
+.TP
+.B IPTOS_THROUGHPUT
+to optimize throughput,
+.TP
+.B IPTOS_RELIABILITY
+to optimize for reliability,
+.TP
+.B IPTOS_MINCOST
+should be used for "filler data" where slow transmission doesn't matter.
+.P
+At most one of these TOS values can be specified.
+Other bits are invalid and shall be cleared.
+.P
+Linux sends
+.B IPTOS_LOWDELAY
+datagrams first by default,
+but the exact behavior depends on the configured queueing discipline.
+.\" FIXME elaborate on this
+.P
+Some high-priority levels may require superuser privileges (the
+.B CAP_NET_ADMIN
+capability).
+.\" The priority can also be set in a protocol-independent way by the
+.\" .RB ( SOL_SOCKET ", " SO_PRIORITY )
+.\" socket option (see
+.\" .BR socket (7)).
+.SH ERRORS
+See
+.BR IPPROTO_IP (2const).
+See
+.BR setsockopt (2).
+See
+.BR ip (7).
+.SH HISTORY
+Linux 1.0.
+.SH SEE ALSO
+.BR IPPROTO_IP (2const),
+.BR setsockopt (2),
+.BR ip (7)
diff --git a/man/man2const/IP_TRANSPARENT.2const b/man/man2const/IP_TRANSPARENT.2const
new file mode 100644
index 0000000000..c885ebd619
--- /dev/null
+++ b/man/man2const/IP_TRANSPARENT.2const
@@ -0,0 +1,62 @@
+.\" Copyright, the authors of the Linux man-pages project
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH IP_TRANSPARENT 2const (date) "Linux man-pages (unreleased)"
+.SH NAME
+IP_TRANSPARENT
+\-
+transparent proxying
+.SH LIBRARY
+Standard C library
+.RI ( libc ,\~ \-lc )
+.SH SYNOPSIS
+.nf
+.BR "#include <netinet/in.h>" " /* Definition of " IP* " constants */"
+.B #include <sys/socket.h>
+.P
+.BI int\~setsockopt(int\~ sockfd ,\~IPPROTO_IP,\~IP_TRANSPARENT,
+.BI " const\~int\~*" enable ,\~sizeof(int));
+.fi
+.SH DESCRIPTION
+Setting this boolean option enables transparent proxying on this socket.
+.P
+This socket option allows
+the calling application to bind to a nonlocal IP address and operate
+both as a client and a server with the foreign address as the local endpoint.
+.P
+This requires that routing be set up in a way that
+packets going to the foreign address are routed through the TProxy box
+(i.e., the system hosting the application that employs the
+.B IP_TRANSPARENT
+socket option).
+.P
+Enabling this socket option requires superuser privileges
+(the
+.B CAP_NET_ADMIN
+or
+.B CAP_NET_RAW
+capability).
+.P
+TProxy redirection with the iptables TPROXY target also requires that
+this option be set on the redirected socket.
+.SH ERRORS
+See
+.BR IPPROTO_IP (2const).
+See
+.BR setsockopt (2).
+See
+.BR ip (7).
+.SH STANDARDS
+Linux.
+.SH HISTORY
+Linux 2.6.24.
+.\" commit f5715aea4564f233767ea1d944b2637a5fd7cd2e
+.\" This patch introduces the IP_TRANSPARENT socket option: enabling that
+.\" will make the IPv4 routing omit the non-local source address check on
+.\" output. Setting IP_TRANSPARENT requires NET_ADMIN capability.
+.\" http://lwn.net/Articles/252545/
+.SH SEE ALSO
+.BR IPPROTO_IP (2const),
+.BR setsockopt (2),
+.BR ip (7)
diff --git a/man/man2const/IP_TTL.2const b/man/man2const/IP_TTL.2const
new file mode 100644
index 0000000000..305b5c97f1
--- /dev/null
+++ b/man/man2const/IP_TTL.2const
@@ -0,0 +1,38 @@
+.\" Copyright, the authors of the Linux man-pages project
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH IP_TTL 2const (date) "Linux man-pages (unreleased)"
+.SH NAME
+IP_TTL
+\-
+time to live
+.SH LIBRARY
+Standard C library
+.RI ( libc ,\~ \-lc )
+.SH SYNOPSIS
+.nf
+.BR "#include <netinet/in.h>" " /* Definition of " IP* " constants */"
+.B #include <sys/socket.h>
+.P
+.BI int\~setsockopt(int\~ sockfd ,\~IPPROTO_IP,\~IP_TTL,
+.BI " const\~int\~*" ttl ,\~sizeof(int));
+.BI int\~getsockopt(int\~ sockfd ,\~IPPROTO_IP,\~IP_TTL,
+.BI " int\~*" ttl ,\~sizeof(int));
+.fi
+.SH DESCRIPTION
+Set or retrieve the current time-to-live field that is used in every packet
+sent from this socket.
+.SH ERRORS
+See
+.BR IPPROTO_IP (2const).
+See
+.BR setsockopt (2).
+See
+.BR ip (7).
+.SH HISTORY
+Linux 1.0.
+.SH SEE ALSO
+.BR IPPROTO_IP (2const),
+.BR setsockopt (2),
+.BR ip (7)
diff --git a/man/man2const/IP_UNBLOCK_SOURCE.2const b/man/man2const/IP_UNBLOCK_SOURCE.2const
new file mode 100644
index 0000000000..82ffd1b50d
--- /dev/null
+++ b/man/man2const/IP_UNBLOCK_SOURCE.2const
@@ -0,0 +1,40 @@
+.\" Copyright, the authors of the Linux man-pages project
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH IP_UNBLOCK_SOURCE 2const (date) "Linux man-pages (unreleased)"
+.SH NAME
+IP_UNBLOCK_SOURCE
+\-
+unblock multicast source
+.SH LIBRARY
+Standard C library
+.RI ( libc ,\~ \-lc )
+.SH SYNOPSIS
+.nf
+.BR "#include <netinet/in.h>" " /* Definition of " IP* " constants */"
+.B #include <sys/socket.h>
+.P
+.BI int\~setsockopt(int\~ sockfd ,\~IPPROTO_IP,\~IP_UNBLOCK_SOURCE,
+.BI " const\~struct\~ip_mreq_source\~*" src ,
+.B " sizeof(struct\~ip_mreq_source));"
+.fi
+.SH DESCRIPTION
+Unblock previously blocked multicast source.
+.P
+Fails with
+.B EADDRNOTAVAIL
+when given source is not being blocked.
+.SH ERRORS
+See
+.BR IPPROTO_IP (2const).
+See
+.BR setsockopt (2).
+See
+.BR ip (7).
+.SH HISTORY
+Linux 2.4.22, Linux 2.5.68.
+.SH SEE ALSO
+.BR IPPROTO_IP (2const),
+.BR setsockopt (2),
+.BR ip (7)
diff --git a/man/man2const/SO_PEERSEC.2const b/man/man2const/SO_PEERSEC.2const
new file mode 100644
index 0000000000..bf6f9a34e3
--- /dev/null
+++ b/man/man2const/SO_PEERSEC.2const
@@ -0,0 +1,96 @@
+.\" Copyright, the authors of the Linux man-pages project
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH SO_PEERSEC 2const (date) "Linux man-pages (unreleased)"
+.SH NAME
+SO_PEERSEC
+\-
+get the security context of a peer socker
+.SH LIBRARY
+Standard C library
+.RI ( libc ,\~ \-lc )
+.SH SYNOPSIS
+.nf
+.BR "#include <netinet/in.h>" " /* Definition of " IP* " constants */"
+.B #include <sys/socket.h>
+.P
+.BI int\~getsockopt(int\~ sockfd ,\~IPPROTO_IP,\~SO_PEERSEC,
+.BI " void\~" buf [ size ],\~size_t\~ size );
+.fi
+.SH DESCRIPTION
+If labeled IPSEC or NetLabel is configured on both the sending and
+receiving hosts, this read-only socket option returns the security
+context of the peer socket connected to this socket.
+By default,
+this will be the same as the security context of the process that created
+the peer socket unless overridden by the policy or by a process with
+the required permissions.
+.P
+The argument to
+.BR getsockopt (2)
+is a pointer to a buffer of the specified length in bytes
+into which the security context string will be copied.
+If the buffer length is less than the length of the security
+context string, then
+.BR getsockopt (2)
+returns \-1, sets
+.I errno
+to
+.BR ERANGE ,
+and returns the required length via
+.IR size .
+The caller should allocate at least
+.B NAME_MAX
+bytes for the buffer initially, although this is not guaranteed
+to be sufficient.
+Resizing the buffer to the returned length
+and retrying may be necessary.
+.P
+The security context string may include a terminating null character
+in the returned length, but is not guaranteed to do so: a security
+context "foo" might be represented as either {'f','o','o'} of length 3
+or {'f','o','o','\[rs]0'} of length 4, which are considered to be
+interchangeable.
+The string is printable,
+does not contain non-terminating null characters,
+and is in an unspecified encoding
+(in particular,
+it is not guaranteed to be ASCII or UTF-8).
+.P
+The use of this option for sockets in the
+.B AF_INET
+address family is supported since Linux 2.6.17
+.\" commit 2c7946a7bf45ae86736ab3b43d0085e43947945c
+for TCP sockets,
+and since Linux 4.17
+.\" commit d452930fd3b9031e59abfeddb2fa383f1403d61a
+for SCTP sockets.
+.P
+For SELinux, NetLabel conveys only the MLS portion of the security
+context of the peer across the wire, defaulting the rest of the
+security context to the values defined in the policy for the
+netmsg initial security identifier (SID).
+However, NetLabel can
+be configured to pass full security contexts over loopback.
+Labeled IPSEC always passes full security contexts as part of establishing
+the security association (SA) and looks them up based on the association
+for each packet.
+.SH ERRORS
+See
+.BR IPPROTO_IP (2const).
+See
+.BR setsockopt (2).
+See
+.BR ip (7).
+.TP
+.B ERANGE
+The buffer
+.I size
+is not enough.
+.SH HISTORY
+Linux 2.6.17.
+.SH SEE ALSO
+.BR IPPROTO_IP (2const),
+.BR setsockopt (2),
+.BR ip (7)
diff --git a/man/man2type/ip_mreq.2type b/man/man2type/ip_mreq.2type
new file mode 100644
index 0000000000..f4133e8849
--- /dev/null
+++ b/man/man2type/ip_mreq.2type
@@ -0,0 +1 @@
+.so man2type/ip_mreqn.2type
diff --git a/man/man2type/ip_mreq_source.2type b/man/man2type/ip_mreq_source.2type
new file mode 100644
index 0000000000..00bd3b9aac
--- /dev/null
+++ b/man/man2type/ip_mreq_source.2type
@@ -0,0 +1,50 @@
+.\" Copyright, the authors of the Linux man-pages project
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH ip_mreq_source 2type (date) "Linux man-pages (unreleased)"
+.SH NAME
+ip_mreq_source
+\-
+IP multicast request source
+.SH LIBRARY
+Standard C library
+.RI ( libc )
+.SH SYNOPSIS
+.nf
+.B #include <netinet/in.h>
+.fi
+.P
+.EX
+struct ip_mreq_source {
+ struct in_addr imr_multiaddr; /* IP multicast group address */
+ struct in_addr imr_interface; /* IP address of local interface */
+ struct in_addr imr_sourceaddr; /* IP address of multicast source */
+};
+.EE
+.SH DESCRIPTION
+The
+.I ip_mreq_source
+structure is similar to the
+.BR ip_mreqn (2type)
+structure.
+.TP
+.I .imr_multiaddr
+The address of the multicast group
+the application wants to join or leave.
+.TP
+.I .imr_interface
+The address of the local interface with which
+the system should join or leave the multicast group.
+.TP
+.I .imr_sourceaddr
+The address of the source
+the application wants to receive data from.
+.SH HISTORY
+Linux 2.4.22, Linux 2.5.68.
+.SH SEE ALSO
+.BR IP_ADD_SOURCE_MEMBERSHIP (2const),
+.BR IP_BLOCK_SOURCE (2const),
+.BR IP_DROP_SOURCE_MEMBERSHIP (2const),
+.BR IP_UNBLOCK_SOURCE (2const),
+.BR ip (7).
diff --git a/man/man2type/ip_mreqn.2type b/man/man2type/ip_mreqn.2type
new file mode 100644
index 0000000000..7e6693cb96
--- /dev/null
+++ b/man/man2type/ip_mreqn.2type
@@ -0,0 +1,62 @@
+.\" Copyright, the authors of the Linux man-pages project
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH ip_mreqn 2type (date) "Linux man-pages (unreleased)"
+.SH NAME
+ip_mreqn,
+ip_mreq
+\-
+IP multicast request index
+.SH LIBRARY
+Standard C library
+.RI ( libc )
+.SH SYNOPSIS
+.nf
+.BR "#include <netinet/in.h>" " /* Definition of " IP* " constants */"
+.fi
+.P
+.EX
+struct ip_mreqn {
+ struct in_addr imr_multiaddr; /* IP multicast group address */
+ struct in_addr imr_address; /* IP address of local interface */
+ int imr_ifindex; /* interface index */
+};
+.P
+struct ip_mreq {
+ struct in_addr imr_multiaddr; /* IP multicast group address */
+ struct in_addr imr_address; /* IP address of local interface */
+};
+.EE
+.SH DESCRIPTION
+.TP
+.I .imr_multiaddr
+The address of the multicast group
+the application wants to join or leave.
+It must be a valid multicast address.
+.\" (i.e., within the 224.0.0.0-239.255.255.255 range)
+.TP
+.I .imr_address
+The address of the local interface with which the system
+should join the multicast group;
+if it is equal to
+.BR INADDR_ANY ,
+an appropriate interface is chosen by the system.
+.TP
+.I .imr_ifindex
+The interface index of the interface that should join/leave the
+.I .imr_multiaddr
+group,
+or 0 to indicate any interface.
+.SH HISTORY
+.TP
+.I ip_mreqn
+Linux 2.2.
+.TP
+.I ip_mreq
+Linux 1.2.
+.SH SEE ALSO
+.BR IP_ADD_MEMBERSHIP (2const),
+.BR IP_DROP_MEMBERSHIP (2const),
+.BR IP_MULTICAST_IF (2const),
+.BR ip (7)
diff --git a/man/man3type/sockaddr.3type b/man/man3type/sockaddr.3type
index d0307280e5..f39b2cc8be 100644
--- a/man/man3type/sockaddr.3type
+++ b/man/man3type/sockaddr.3type
@@ -4,8 +4,7 @@
.\"
.TH sockaddr 3type (date) "Linux man-pages (unreleased)"
.SH NAME
-sockaddr, sockaddr_storage, sockaddr_in, sockaddr_in6, sockaddr_un, socklen_t,
-in_addr, in6_addr, in_addr_t, in_port_t,
+sockaddr, sockaddr_storage, socklen_t
\- socket address
.SH LIBRARY
Standard C library
@@ -27,44 +26,6 @@ Standard C library
.BR typedef " /* ... */ " sa_family_t;
.P
.EE
-.SS Internet domain sockets
-.EX
-.B #include <netinet/in.h>
-.P
-.B struct sockaddr_in {
-.BR " sa_family_t sin_family;" " /* " AF_INET " */"
-.BR " in_port_t sin_port;" " /* Port number */"
-.BR " struct in_addr sin_addr;" " /* IPv4 address */"
-.B };
-.P
-.B struct sockaddr_in6 {
-.BR " sa_family_t sin6_family;" " /* " AF_INET6 " */"
-.BR " in_port_t sin6_port;" " /* Port number */"
-.BR " uint32_t sin6_flowinfo;" " /* IPv6 flow info */"
-.BR " struct in6_addr sin6_addr;" " /* IPv6 address */"
-.BR " uint32_t sin6_scope_id;" " /* Set of interfaces for a scope */"
-.B };
-.P
-.B struct in_addr {
-.B " in_addr_t s_addr;"
-.B };
-.P
-.B struct in6_addr {
-.B " uint8_t s6_addr[16];"
-.B };
-.P
-.B typedef uint32_t in_addr_t;
-.B typedef uint16_t in_port_t;
-.EE
-.SS UNIX domain sockets
-.EX
-.B #include <sys/un.h>
-.P
-.B struct sockaddr_un {
-.BR " sa_family_t sun_family;" " /* Address family */"
-.BR " char sun_path[];" " /* Socket pathname */"
-.B };
-.EE
.SH DESCRIPTION
.TP
.I sockaddr
@@ -87,25 +48,13 @@ This is an integer type of at least 32 bits.
Describes a socket's protocol family.
This is an unsigned integer type.
.SS Internet domain sockets
-.TP
-.I sockaddr_in
-Describes an IPv4 Internet domain socket address.
-The
-.I sin_port
+See
+.BR sockaddr_in (3type)
and
-.I sin_addr
-members are stored in network byte order.
-.TP
-.I sockaddr_in6
-Describes an IPv6 Internet domain socket address.
-The
-.I sin6_addr.s6_addr
-array is used to contain a 128-bit IPv6 address,
-stored in network byte order.
+.BR sockaddr_in6 (3type).
.SS UNIX domain sockets
-.TP
-.I sockaddr_un
-Describes a UNIX domain socket address.
+See
+.BR sockaddr_un (3type).
.SH STANDARDS
POSIX.1-2024.
.SH HISTORY
diff --git a/man/man3type/sockaddr_in.3type b/man/man3type/sockaddr_in.3type
index 39e914c307..fc55edae28 100644
--- a/man/man3type/sockaddr_in.3type
+++ b/man/man3type/sockaddr_in.3type
@@ -1 +1,46 @@
-.so man3type/sockaddr.3type
+.\" Copyright, the authors of the Linux man-pages project
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH sockaddr_in 3type (date) "Linux man-pages (unreleased)"
+.SH NAME
+sockaddr_in,
+in_addr, in_addr_t, in_port_t
+\-
+IPv4 socket address
+.SH LIBRARY
+Standard C library
+.RI ( libc )
+.SH SYNOPSIS
+.EX
+.B #include <netinet/in.h>
+.P
+.B struct sockaddr_in {
+.BR " sa_family_t sin_family;" " /* " AF_INET " */"
+.BR " in_port_t sin_port;" " /* Port number */"
+.BR " struct in_addr sin_addr;" " /* IPv4 address */"
+.B };
+.P
+.B struct in_addr {
+.B " in_addr_t s_addr;"
+.B };
+.P
+.B typedef uint32_t in_addr_t;
+.B typedef uint16_t in_port_t;
+.EE
+.SH DESCRIPTION
+.TP
+.I sockaddr_in
+Describes an IPv4 Internet domain socket address.
+.IP
+.I .sin_port
+and
+.I .sin_addr
+are stored in network byte order.
+.SH STANDARDS
+POSIX.1-2024.
+.SH HISTORY
+POSIX.1-2001.
+.SH SEE ALSO
+.BR sockaddr (3type),
+.BR sockaddr_in6 (3type)
diff --git a/man/man3type/sockaddr_in6.3type b/man/man3type/sockaddr_in6.3type
index 39e914c307..7a62af088c 100644
--- a/man/man3type/sockaddr_in6.3type
+++ b/man/man3type/sockaddr_in6.3type
@@ -1 +1,44 @@
-.so man3type/sockaddr.3type
+.\" Copyright, the authors of the Linux man-pages project
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH sockaddr_in6 3type (date) "Linux man-pages (unreleased)"
+.SH NAME
+sockaddr_in6,
+in6_addr
+\-
+IPv6 socket address
+.SH LIBRARY
+Standard C library
+.RI ( libc )
+.SH SYNOPSIS
+.EX
+.B #include <netinet/in.h>
+.P
+.B struct sockaddr_in6 {
+.BR " sa_family_t sin6_family;" " /* " AF_INET6 " */"
+.BR " in_port_t sin6_port;" " /* Port number */"
+.BR " uint32_t sin6_flowinfo;" " /* IPv6 flow info */"
+.BR " struct in6_addr sin6_addr;" " /* IPv6 address */"
+.BR " uint32_t sin6_scope_id;" " /* Set of interfaces for a scope */"
+.B };
+.P
+.B struct in6_addr {
+.B " uint8_t s6_addr[16];"
+.B };
+.EE
+.SH DESCRIPTION
+.TP
+.I sockaddr_in6
+Describes an IPv6 Internet domain socket address.
+.TP
+.I in6_addr
+Contains a 128-bit IPv6 address,
+stored in network byte order.
+.SH STANDARDS
+POSIX.1-2024.
+.SH HISTORY
+POSIX.1-2001.
+.SH SEE ALSO
+.BR sockaddr_in (3type),
+.BR sockaddr (3type)
diff --git a/man/man3type/sockaddr_un.3type b/man/man3type/sockaddr_un.3type
index 39e914c307..e846c2120f 100644
--- a/man/man3type/sockaddr_un.3type
+++ b/man/man3type/sockaddr_un.3type
@@ -1 +1,30 @@
-.so man3type/sockaddr.3type
+.\" Copyright, the authors of the Linux man-pages project
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH sockaddr_un 3type (date) "Linux man-pages (unreleased)"
+.SH NAME
+sockaddr_un
+\- UNIX domain socket address
+.SH LIBRARY
+Standard C library
+.RI ( libc )
+.SH SYNOPSIS
+.EX
+.B #include <sys/un.h>
+.P
+.B struct sockaddr_un {
+.BR " sa_family_t sun_family;" " /* Address family */"
+.BR " char sun_path[];" " /* Socket pathname */"
+.B };
+.EE
+.SH DESCRIPTION
+.TP
+.I sockaddr_un
+Describes a UNIX domain socket address.
+.SH STANDARDS
+POSIX.1-2024.
+.SH HISTORY
+POSIX.1-2001.
+.SH SEE ALSO
+.BR sockaddr (3)
diff --git a/man/man5/proc_sys_net.5 b/man/man5/proc_sys_net.5
index 9149fc70a2..c72097bb2a 100644
--- a/man/man5/proc_sys_net.5
+++ b/man/man5/proc_sys_net.5
@@ -26,6 +26,10 @@ argument of
see the
.BR listen (2)
manual page for details.
+.TP
+.I /proc/sys/net/ipv4/
+See
+.BR proc_sys_net_ipv4 (5).
.SH SEE ALSO
.BR proc (5),
.BR proc_net (5)
diff --git a/man/man5/proc_sys_net_ipv4.5 b/man/man5/proc_sys_net_ipv4.5
new file mode 100644
index 0000000000..57917cd64b
--- /dev/null
+++ b/man/man5/proc_sys_net_ipv4.5
@@ -0,0 +1,167 @@
+.\" Copyright, the authors of the Linux man-pages project
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH proc_sys_net_ipv4 5 (date) "Linux man-pages (unreleased)"
+.SH NAME
+/proc/sys/net/ipv4/
+\-
+IPv4
+.SH DESCRIPTION
+The IP protocol
+supports a set of
+.I /proc
+interfaces to configure some global parameters.
+The parameters can be accessed by reading or writing files in the directory
+.IR /proc/sys/net/ipv4/ .
+.\" FIXME As at 2.6.12, 14 Jun 2005, the following are undocumented:
+.\" /proc/sys/net/ipv4/ip_queue_maxlen
+.\" /proc/sys/net/ipv4/ip_conntrack_max
+Interfaces described as
+.I Boolean
+take an integer value, with a nonzero value ("true") meaning that
+the corresponding option is enabled, and a zero value ("false")
+meaning that the option is disabled.
+.\"
+.TP
+.IR /proc/sys/net/ipv4/ip_always_defrag " (Boolean; since Linux 2.2.13)"
+[New with Linux 2.2.13;
+in earlier kernel versions this feature
+was controlled at compile time by the
+.B CONFIG_IP_ALWAYS_DEFRAG
+option; this option is not present in Linux 2.4.x and later]
+.IP
+When this boolean flag is enabled (not equal 0), incoming fragments
+(parts of IP packets
+that arose when some host between origin and destination decided
+that the packets were too large and cut them into pieces) will be
+reassembled (defragmented) before being processed, even if they are
+about to be forwarded.
+.IP
+Enable only if running
+either a firewall that is the sole link to your network
+or a transparent proxy;
+never ever use it for a normal router or host.
+Otherwise,
+fragmented communication can be disturbed
+if the fragments travel over different links.
+Defragmentation also has a large memory and CPU time cost.
+.IP
+This is automagically turned on
+when masquerading or transparent proxying are configured.
+.\"
+.TP
+.IR /proc/sys/net/ipv4/ip_autoconfig " (since Linux 2.2 to Linux 2.6.17)"
+.\" Precisely: since Linux 2.1.68
+.\" FIXME document /proc/sys/net/ipv4/ip_autoconfig
+Not documented.
+.\"
+.TP
+.IR /proc/sys/net/ipv4/ip_default_ttl " (integer; default: 64; since Linux 2.2)"
+.\" Precisely: since Linux 2.1.15
+Set the default time-to-live value of outgoing packets.
+This can be changed per socket with the
+.B IP_TTL
+option.
+.\"
+.TP
+.IR /proc/sys/net/ipv4/ip_dynaddr " (Boolean; default: disabled; since Linux 2.0.31)"
+Enable dynamic socket address and masquerading entry rewriting on interface
+address change.
+This is useful for dialup interface with changing IP addresses.
+0 means no rewriting, 1 turns it on and 2 enables verbose mode.
+.\"
+.TP
+.IR /proc/sys/net/ipv4/ip_forward " (Boolean; default: disabled; since Linux 1.2)"
+Enable IP forwarding with a boolean flag.
+IP forwarding can be also set on a per-interface basis.
+.\"
+.TP
+.IR /proc/sys/net/ipv4/ip_local_port_range " (since Linux 2.2)"
+.\" Precisely: since Linux 2.1.68
+This file contains two integers that define the default local port range
+allocated to sockets that are not explicitly bound to a port number\[em]that
+is, the range used for
+.IR "ephemeral ports" .
+An ephemeral port is allocated to a socket in the following circumstances:
+.RS
+.IP \[bu] 3
+the port number in a socket address is specified as 0 when calling
+.BR bind (2);
+.IP \[bu]
+.BR listen (2)
+is called on a stream socket that was not previously bound;
+.IP \[bu]
+.BR connect (2)
+was called on a socket that was not previously bound;
+.IP \[bu]
+.BR sendto (2)
+is called on a datagram socket that was not previously bound.
+.RE
+.IP
+Allocation of ephemeral ports starts with the first number in
+.I /proc/sys/net/ipv4/ip_local_port_range
+and ends with the second number.
+If the range of ephemeral ports is exhausted,
+then the relevant system call returns an error (but see BUGS).
+.IP
+Note that the port range in
+.I /proc/sys/net/ipv4/ip_local_port_range
+should not conflict with the ports used by masquerading
+(although the case is handled).
+Also, arbitrary choices may cause problems with some firewall packet
+filters that make assumptions about the local ports in use.
+The first number should be at least greater than 1024,
+or better, greater than 4096, to avoid clashes
+with well known ports and to minimize firewall problems.
+.\"
+.TP
+.IR /proc/sys/net/ipv4/ip_no_pmtu_disc " (Boolean; default: disabled; since Linux 2.2)"
+.\" Precisely: 2.1.15
+If enabled, don't do Path MTU Discovery for TCP sockets by default.
+Path MTU discovery may fail if misconfigured firewalls (that drop
+all ICMP packets) or misconfigured interfaces (e.g., a point-to-point
+link where the both ends don't agree on the MTU) are on the path.
+It is better to fix the broken routers on the path than to turn off
+Path MTU Discovery globally, because not doing it incurs a high cost
+to the network.
+.\"
+.\" The following is from Linux 2.6.12: Documentation/networking/ip-sysctl.txt
+.TP
+.IR /proc/sys/net/ipv4/ip_nonlocal_bind " (Boolean; default: disabled; since Linux 2.4)"
+.\" Precisely: patch-2.4.0-test10
+If set, allows processes to
+.BR bind (2)
+to nonlocal IP addresses,
+which can be quite useful, but may break some applications.
+.\"
+.\" The following is from Linux 2.6.12: Documentation/networking/ip-sysctl.txt
+.TP
+.IR /proc/sys/net/ipv4/ip6frag_time " (integer; default: 30)"
+Time in seconds to keep an IPv6 fragment in memory.
+.\"
+.\" The following is from Linux 2.6.12: Documentation/networking/ip-sysctl.txt
+.TP
+.IR /proc/sys/net/ipv4/ip6frag_secret_interval " (integer; default: 600)"
+Regeneration interval (in seconds) of the hash secret (or lifetime
+for the hash secret) for IPv6 fragments.
+.TP
+.IR /proc/sys/net/ipv4/ipfrag_high_thresh " (integer)"
+.TQ
+.IR /proc/sys/net/ipv4/ipfrag_low_thresh " (integer)"
+If the amount of queued IP fragments reaches
+.IR /proc/sys/net/ipv4/ipfrag_high_thresh ,
+the queue is pruned down to
+.IR /proc/sys/net/ipv4/ipfrag_low_thresh .
+Contains an integer with the number of bytes.
+.TP
+.IR /proc/sys/net/ipv4/neigh/ *
+See
+.BR arp (7).
+.\" FIXME Document the conf/*/* interfaces
+.\"
+.\" FIXME Document the route/* interfaces
+.SH SEE ALSO
+.BR proc (5),
+.BR proc_sys_net (5),
+.BR ip (7)
diff --git a/man/man7/ip.7 b/man/man7/ip.7
index 2d42e5f84e..60081cbea0 100644
--- a/man/man7/ip.7
+++ b/man/man7/ip.7
@@ -1,38 +1,7 @@
-'\" t
.\" Copyright, the authors of the Linux man-pages project
.\"
.\" SPDX-License-Identifier: Linux-man-pages-1-para
.\"
-.\" FIXME The following socket options are yet to be documented
-.\"
-.\" IP_XFRM_POLICY (2.5.48)
-.\" Needs CAP_NET_ADMIN
-.\"
-.\" IP_IPSEC_POLICY (2.5.47)
-.\" Needs CAP_NET_ADMIN
-.\"
-.\" IP_MINTTL (2.6.34)
-.\" commit d218d11133d888f9745802146a50255a4781d37a
-.\" Author: Stephen Hemminger <shemminger@vyatta.com>
-.\"
-.\" MCAST_JOIN_GROUP (2.4.22 / 2.6)
-.\"
-.\" MCAST_BLOCK_SOURCE (2.4.22 / 2.6)
-.\"
-.\" MCAST_UNBLOCK_SOURCE (2.4.22 / 2.6)
-.\"
-.\" MCAST_LEAVE_GROUP (2.4.22 / 2.6)
-.\"
-.\" MCAST_JOIN_SOURCE_GROUP (2.4.22 / 2.6)
-.\"
-.\" MCAST_LEAVE_SOURCE_GROUP (2.4.22 / 2.6)
-.\"
-.\" MCAST_MSFILTER (2.4.22 / 2.6)
-.\"
-.\" IP_UNICAST_IF (3.4)
-.\" commit 76e21053b5bf33a07c76f99d27a74238310e3c71
-.\" Author: Erich E. Hoover <ehoover@mines.edu>
-.\"
.TH ip 7 (date) "Linux man-pages (unreleased)"
.SH NAME
ip \- Linux IPv4 protocol implementation
@@ -148,31 +117,19 @@ are implemented by higher level protocols like
and
.BR tcp (7).
On raw sockets
-.I sin_port
+.I .sin_port
is set to the IP protocol.
.P
-.in +4n
-.EX
-struct sockaddr_in {
- sa_family_t sin_family; /* address family: AF_INET */
- in_port_t sin_port; /* port in network byte order */
- struct in_addr sin_addr; /* internet address */
-};
-\&
-/* Internet address */
-struct in_addr {
- uint32_t s_addr; /* address in network byte order */
-};
-.EE
-.in
+See
+.BR sockaddr_in (3type).
.P
-.I sin_family
+.I .sin_family
is always set to
.BR AF_INET .
This is required; in Linux 2.2 most networking functions return
.B EINVAL
when this setting is missing.
-.I sin_port
+.I .sin_port
contains the port in network byte order.
The port numbers below 1024 are called
.I privileged ports
@@ -190,14 +147,15 @@ port, they are implemented only by higher protocols like
and
.BR udp (7).
.P
-.I sin_addr
+.I .sin_addr
is the IP host address.
The
-.I s_addr
-member of
-.I struct in_addr
+.I .s_addr
+member of the
+.BR in_addr (3type)
+structure
contains the host interface address in network byte order.
-.I in_addr
+.BR in_addr (3type)
should be assigned one of the
.B INADDR_*
values
@@ -305,1037 +263,11 @@ akin to the standardized local loopback address
[224.0.0.0, 239.255.255.255]
Addresses in this range (224/4) are dedicated to multicast use.
.SS Socket options
-IP 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 IP is
-.BR IPPROTO_IP .
-.\" or SOL_IP on Linux
-A boolean integer flag is zero when it is false, otherwise true.
-.P
-When an invalid socket option is specified,
-.BR getsockopt (2)
-and
-.BR setsockopt (2)
-fail with the error
-.BR ENOPROTOOPT .
-.TP
-.BR IP_ADD_MEMBERSHIP " (since Linux 1.2)"
-Join a multicast group.
-Argument is an
-.I ip_mreqn
-structure.
-.IP
-.in +4n
-.EX
-struct ip_mreqn {
- struct in_addr imr_multiaddr; /* IP multicast group
- address */
- struct in_addr imr_address; /* IP address of local
- interface */
- int imr_ifindex; /* interface index */
-};
-.EE
-.in
-.IP
-.I imr_multiaddr
-contains the address of the multicast group the application
-wants to join or leave.
-It must be a valid multicast address
-.\" (i.e., within the 224.0.0.0-239.255.255.255 range)
-(or
-.BR setsockopt (2)
-fails with the error
-.BR EINVAL ).
-.I imr_address
-is the address of the local interface with which the system
-should join the multicast group;
-if it is equal to
-.BR INADDR_ANY ,
-an appropriate interface is chosen by the system.
-.I imr_ifindex
-is the interface index of the interface that should join/leave the
-.I imr_multiaddr
-group, or 0 to indicate any interface.
-.IP
-The
-.I ip_mreqn
-structure is available only since Linux 2.2.
-For compatibility, the old
-.I ip_mreq
-structure (present since Linux 1.2) is still supported;
-it differs from
-.I ip_mreqn
-only by not including the
-.I imr_ifindex
-field.
-(The kernel determines which structure is being passed based
-on the size passed in
-.IR optlen .)
-.IP
-.B IP_ADD_MEMBERSHIP
-is valid only for
-.BR setsockopt (2).
-.\"
-.TP
-.BR IP_ADD_SOURCE_MEMBERSHIP " (since Linux 2.4.22 / Linux 2.5.68)"
-Join a multicast group and allow receiving data only
-from a specified source.
-Argument is an
-.I ip_mreq_source
-structure.
-.IP
-.in +4n
-.EX
-struct ip_mreq_source {
- struct in_addr imr_multiaddr; /* IP multicast group
- address */
- struct in_addr imr_interface; /* IP address of local
- interface */
- struct in_addr imr_sourceaddr; /* IP address of
- multicast source */
-};
-.EE
-.in
-.IP
-The
-.I ip_mreq_source
-structure is similar to
-.I ip_mreqn
-described under
-.BR IP_ADD_MEMBERSHIP .
-The
-.I imr_multiaddr
-field contains the address of the multicast group the application
-wants to join or leave.
-The
-.I imr_interface
-field is the address of the local interface with which
-the system should join the multicast group.
-Finally, the
-.I imr_sourceaddr
-field contains the address of the source the
-application wants to receive data from.
-.IP
-This option can be used multiple times to allow
-receiving data from more than one source.
-.TP
-.BR IP_BIND_ADDRESS_NO_PORT " (since Linux 4.2)"
-.\" commit 90c337da1524863838658078ec34241f45d8394d
-Inform the kernel to not reserve an ephemeral port when using
-.BR bind (2)
-with a port number of 0.
-The port will later be automatically chosen at
-.BR connect (2)
-time,
-in a way that allows sharing a source port as long as the 4-tuple is unique.
-.TP
-.BR IP_BLOCK_SOURCE " (since Linux 2.4.22 / 2.5.68)"
-Stop receiving multicast data from a specific source in a given group.
-This is valid only after the application has subscribed
-to the multicast group using either
-.B IP_ADD_MEMBERSHIP
-or
-.BR IP_ADD_SOURCE_MEMBERSHIP .
-.IP
-Argument is an
-.I ip_mreq_source
-structure as described under
-.BR IP_ADD_SOURCE_MEMBERSHIP .
-.TP
-.BR IP_DROP_MEMBERSHIP " (since Linux 1.2)"
-Leave a multicast group.
-Argument is an
-.I ip_mreqn
-or
-.I ip_mreq
-structure similar to
-.BR IP_ADD_MEMBERSHIP .
-.TP
-.BR IP_DROP_SOURCE_MEMBERSHIP " (since Linux 2.4.22 / 2.5.68)"
-Leave a source-specific group\[em]that is, stop receiving data from
-a given multicast group that come from a given source.
-If the application has subscribed to multiple sources within
-the same group, data from the remaining sources will still be delivered.
-To stop receiving data from all sources at once, use
-.BR IP_DROP_MEMBERSHIP .
-.IP
-Argument is an
-.I ip_mreq_source
-structure as described under
-.BR IP_ADD_SOURCE_MEMBERSHIP .
-.TP
-.BR IP_FREEBIND " (since Linux 2.4)"
-.\" Precisely: since Linux 2.4.0-test10
-If enabled, this boolean option allows binding to an IP address
-that is nonlocal or does not (yet) exist.
-This permits listening on a socket,
-without requiring the underlying network interface or the
-specified dynamic IP address to be up at the time that
-the application is trying to bind to it.
-This option is the per-socket equivalent of the
-.I ip_nonlocal_bind
-.I /proc
-interface described below.
-.TP
-.BR IP_HDRINCL " (since Linux 2.0)"
-If enabled,
-the user supplies an IP header in front of the user data.
-Valid only for
-.B SOCK_RAW
-sockets;
-see
-.BR raw (7)
-for more information.
-When this flag is enabled, the values set by
-.BR IP_OPTIONS ,
-.BR IP_TTL ,
-and
-.B IP_TOS
-are ignored.
-.TP
-.BR IP_LOCAL_PORT_RANGE " (since Linux 6.3)"
-Set or get the per-socket default local port range.
-This option can be used to clamp down the global local port range,
-defined by the
-.I ip_local_port_range
-.I /proc
-interface described below, for a given socket.
-.IP
-The option takes an
-.I uint32_t
-value with
-the high 16 bits set to the upper range bound,
-and the low 16 bits set to the lower range bound.
-Range bounds are inclusive.
-The 16-bit values should be in host byte order.
-.IP
-The lower bound has to be less than the upper bound
-when both bounds are not zero.
-Otherwise, setting the option fails with EINVAL.
-.IP
-If either bound is outside of the global local port range, or is zero,
-then that bound has no effect.
-.IP
-To reset the setting,
-pass zero as both the upper and the lower bound.
-.TP
-.BR IP_MSFILTER " (since Linux 2.4.22 / 2.5.68)"
-This option provides access to the advanced full-state filtering API.
-Argument is an
-.I ip_msfilter
-structure.
-.IP
-.in +4n
-.EX
-struct ip_msfilter {
- struct in_addr imsf_multiaddr; /* IP multicast group
- address */
- struct in_addr imsf_interface; /* IP address of local
- interface */
- uint32_t imsf_fmode; /* Filter\-mode */
-\&
- uint32_t imsf_numsrc; /* Number of sources in
- the following array */
- struct in_addr imsf_slist[1]; /* Array of source
- addresses */
-};
-.EE
-.in
-.IP
-There are two macros,
-.B MCAST_INCLUDE
-and
-.BR MCAST_EXCLUDE ,
-which can be used to specify the filtering mode.
-Additionally, the
-.BR IP_MSFILTER_SIZE (n)
-macro exists to determine how much memory is needed to store
-.I ip_msfilter
-structure with
-.I n
-sources in the source list.
-.IP
-For the full description of multicast source filtering
-refer to RFC 3376.
-.TP
-.BR IP_MTU " (since Linux 2.2)"
-.\" Precisely: since Linux 2.1.124
-Retrieve the current known path MTU of the current socket.
-Returns an integer.
-.IP
-.B IP_MTU
-is valid only for
-.BR getsockopt (2)
-and can be employed only when the socket has been connected.
-.TP
-.BR IP_MTU_DISCOVER " (since Linux 2.2)"
-.\" Precisely: since Linux 2.1.124
-Set or receive the Path MTU Discovery setting for a socket.
-When enabled, Linux will perform Path MTU Discovery
-as defined in RFC\ 1191 on
-.B SOCK_STREAM
-sockets.
-For
-.RB non- SOCK_STREAM
-sockets,
-.B IP_PMTUDISC_DO
-forces the don't-fragment flag to be set on all outgoing packets.
-It is the user's responsibility to packetize the data
-in MTU-sized chunks and to do the retransmits if necessary.
-The kernel will reject (with
-.BR EMSGSIZE )
-datagrams that are bigger than the known path MTU.
-.B IP_PMTUDISC_WANT
-will fragment a datagram if needed according to the path MTU,
-or will set the don't-fragment flag otherwise.
-.IP
-The system-wide default can be toggled between
-.B IP_PMTUDISC_WANT
-and
-.B IP_PMTUDISC_DONT
-by writing (respectively, zero and nonzero values) to the
-.I /proc/sys/net/ipv4/ip_no_pmtu_disc
-file.
-.TS
-tab(:);
-c l
-l l.
-Path MTU discovery value:Meaning
-IP_PMTUDISC_WANT:Use per-route settings.
-IP_PMTUDISC_DONT:Never do Path MTU Discovery.
-IP_PMTUDISC_DO:Always do Path MTU Discovery.
-IP_PMTUDISC_PROBE:Set DF but ignore Path MTU.
-.TE
-.IP
-When PMTU discovery is enabled, the kernel automatically keeps track of
-the path MTU per destination host.
-When it is connected to a specific peer with
-.BR connect (2),
-the currently known path MTU can be retrieved conveniently using the
-.B IP_MTU
-socket option (e.g., after an
-.B EMSGSIZE
-error occurred).
-The path MTU may change over time.
-For connectionless sockets with many destinations,
-the new MTU for a given destination can also be accessed using the
-error queue (see
-.BR IP_RECVERR ).
-A new error will be queued for every incoming MTU update.
-.IP
-While MTU discovery is in progress, initial packets from datagram sockets
-may be dropped.
-Applications using UDP should be aware of this and not
-take it into account for their packet retransmit strategy.
-.IP
-To bootstrap the path MTU discovery process on unconnected sockets, it
-is possible to start with a big datagram size
-(headers up to 64 kilobytes long) and let it shrink by updates of the path MTU.
-.IP
-To get an initial estimate of the
-path MTU, connect a datagram socket to the destination address using
-.BR connect (2)
-and retrieve the MTU by calling
-.BR getsockopt (2)
-with the
-.B IP_MTU
-option.
-.IP
-It is possible to implement RFC 4821 MTU probing with
-.B SOCK_DGRAM
-or
-.B SOCK_RAW
-sockets by setting a value of
-.B IP_PMTUDISC_PROBE
-(available since Linux 2.6.22).
-This is also particularly useful for diagnostic tools such as
-.BR tracepath (8)
-that wish to deliberately send probe packets larger than
-the observed Path MTU.
-.TP
-.BR IP_MULTICAST_ALL " (since Linux 2.6.31)"
-This option can be used to modify the delivery policy of multicast messages.
-The argument is a boolean integer (defaults to 1).
-If set to 1,
-the socket will receive messages from all the groups that have been joined
-globally on the whole system.
-Otherwise, it will deliver messages only from
-the groups that have been explicitly joined (for example via the
-.B IP_ADD_MEMBERSHIP
-option) on this particular socket.
-.TP
-.BR IP_MULTICAST_IF " (since Linux 1.2)"
-Set the local device for a multicast socket.
-The argument for
-.BR setsockopt (2)
-is an
-.I ip_mreqn
-or
-.\" net: IP_MULTICAST_IF setsockopt now recognizes struct mreq
-.\" Commit: 3a084ddb4bf299a6e898a9a07c89f3917f0713f7
-(since Linux 3.5)
-.I ip_mreq
-structure similar to
-.BR IP_ADD_MEMBERSHIP ,
-or an
-.I in_addr
-structure.
-(The kernel determines which structure is being passed based
-on the size passed in
-.IR optlen .)
-For
-.BR getsockopt (2),
-the argument is an
-.I in_addr
-structure.
-.TP
-.BR IP_MULTICAST_LOOP " (since Linux 1.2)"
-Set or read a boolean integer argument that determines whether
-sent multicast packets should be looped back to the local sockets.
-.TP
-.BR IP_MULTICAST_TTL " (since Linux 1.2)"
-Set or read the time-to-live value of outgoing multicast packets for this
-socket.
-It is very important for multicast packets to set the smallest TTL possible.
-The default is 1 which means that multicast packets don't leave the local
-network unless the user program explicitly requests it.
-Argument is an integer.
-.TP
-.BR IP_NODEFRAG " (since Linux 2.6.36)"
-If enabled (argument is nonzero),
-the reassembly of outgoing packets is disabled in the netfilter layer.
-The argument is an integer.
-.IP
-This option is valid only for
-.B SOCK_RAW
-sockets.
-.TP
-.BR IP_OPTIONS " (since Linux 2.0)"
-.\" Precisely: since Linux 1.3.30
-Set or get the IP options to be sent with every packet from this socket.
-The arguments are a pointer to a memory buffer containing the options
-and the option length.
-The
-.BR setsockopt (2)
-call sets the IP options associated with a socket.
-The maximum option size for IPv4 is 40 bytes.
-See RFC\ 791 for the allowed options.
-When the initial connection request packet for a
-.B SOCK_STREAM
-socket contains IP options, the IP options will be set automatically
-to the options from the initial packet with routing headers reversed.
-Incoming packets are not allowed to change options after the connection
-is established.
-The processing of all incoming source routing options
-is disabled by default and can be enabled by using the
-.I accept_source_route
-.I /proc
-interface.
-Other options like timestamps are still handled.
-For datagram sockets, IP options can be set only by the local user.
-Calling
-.BR getsockopt (2)
-with
-.B IP_OPTIONS
-puts the current IP options used for sending into the supplied buffer.
-.TP
-.BR IP_PASSSEC " (since Linux 2.6.17)"
-.\" commit 2c7946a7bf45ae86736ab3b43d0085e43947945c
-If labeled IPSEC or NetLabel is configured on the sending and receiving
-hosts, this option enables receiving of the security context of the peer
-socket in an ancillary message of type
-.B SCM_SECURITY
-retrieved using
-.BR recvmsg (2).
-This option is supported only for UDP sockets;
-for TCP or SCTP sockets,
-see the description of the
-.B SO_PEERSEC
-option below.
-.IP
-The value given as an argument to
-.BR setsockopt (2)
-and returned as the result of
-.BR getsockopt (2)
-is an integer boolean flag.
-.IP
-The security context returned in the
-.B SCM_SECURITY
-ancillary message
-is of the same format as the one described under the
-.B SO_PEERSEC
-option below.
-.IP
-Note: the reuse of the
-.B SCM_SECURITY
-message type for the
-.B IP_PASSSEC
-socket option was likely a mistake, since other IP control messages use
-their own numbering scheme in the IP namespace and often use the
-socket option value as the message type.
-There is no conflict currently since the IP option with the same value as
-.B SCM_SECURITY
-is
-.B IP_HDRINCL
-and this is never used for a control message type.
-.TP
-.BR IP_PKTINFO " (since Linux 2.2)"
-.\" Precisely: since Linux 2.1.68
-Pass an
-.B IP_PKTINFO
-ancillary message that contains a
-.I pktinfo
-structure that supplies some information about the incoming packet.
-This works only for datagram oriented sockets.
-The argument is a flag that tells the socket whether the
-.B IP_PKTINFO
-message should be passed or not.
-The message itself can be sent/retrieved
-only as a control message with a packet using
-.BR recvmsg (2)
-or
-.BR sendmsg (2).
-.IP
-.in +4n
-.EX
-struct in_pktinfo {
- unsigned int ipi_ifindex; /* Interface index */
- struct in_addr ipi_spec_dst; /* Local address */
- struct in_addr ipi_addr; /* Header Destination
- address */
-};
-.EE
-.in
-.IP
-When returned by
-.BR recvmsg (2) ,
-.I ipi_ifindex
-is the unique index of the interface the packet was received on.
-.I ipi_spec_dst
-is the preferred source address for replies to the given packet,
-and
-.I ipi_addr
-is the destination address in the packet header.
-These addresses are usually the same,
-but can differ for broadcast or multicast packets.
-Depending on the configured routes,
-.I ipi_spec_dst
-might belong to a different interface from the one that received the packet.
-.IP
-If
-.B IP_PKTINFO
-is passed to
-.BR sendmsg (2)
-and
-.\" This field is grossly misnamed
-.I ipi_spec_dst
-is not zero,
-then it is used as the local source address,
-for the routing table lookup,
-and for setting up IP source route options.
-When
-.I ipi_ifindex
-is not zero,
-the primary local address of the interface specified by the index
-overwrites
-.I ipi_spec_dst
-for the routing table lookup.
-.I ipi_addr
-is ignored.
-.IP
-Not supported for
-.B SOCK_STREAM
-sockets.
-.TP
-.BR IP_RECVERR " (since Linux 2.2)"
-.\" Precisely: since Linux 2.1.15
-Enable extended reliable error message passing.
-When enabled on a datagram socket, all
-generated errors will be queued in a per-socket error queue.
-When the user receives an error from a socket operation,
-the errors can be received by calling
-.BR recvmsg (2)
-with the
-.B MSG_ERRQUEUE
-flag set.
-The
-.I sock_extended_err
-structure describing the error will be passed in an ancillary message with
-the type
-.B IP_RECVERR
-and the level
-.BR IPPROTO_IP .
-.\" or SOL_IP on Linux
-This is useful for reliable error handling on unconnected sockets.
-The received data portion of the error queue contains the error packet.
-.IP
-The
-.B IP_RECVERR
-control message contains a
-.I sock_extended_err
-structure:
-.IP
-.in +4n
-.EX
-#define SO_EE_ORIGIN_NONE 0
-#define SO_EE_ORIGIN_LOCAL 1
-#define SO_EE_ORIGIN_ICMP 2
-#define SO_EE_ORIGIN_ICMP6 3
-\&
-struct sock_extended_err {
- uint32_t ee_errno; /* error number */
- uint8_t ee_origin; /* where the error originated */
- uint8_t ee_type; /* type */
- uint8_t ee_code; /* code */
- uint8_t ee_pad;
- uint32_t ee_info; /* additional information */
- uint32_t ee_data; /* other data */
- /* More data may follow */
-};
-\&
-struct sockaddr *SO_EE_OFFENDER(struct sock_extended_err *);
-.EE
-.in
-.IP
-.I ee_errno
-contains the
-.I errno
-number of the queued error.
-.I ee_origin
-is the origin code of where the error originated.
-The other fields are protocol-specific.
-The macro
-.B SO_EE_OFFENDER
-returns a pointer to the address of the network object
-where the error originated from given a pointer to the ancillary message.
-If this address is not known, the
-.I sa_family
-member of the
-.I sockaddr
-contains
-.B AF_UNSPEC
-and the other fields of the
-.I sockaddr
-are undefined.
-.IP
-IP uses the
-.I sock_extended_err
-structure as follows:
-.I ee_origin
-is set to
-.B SO_EE_ORIGIN_ICMP
-for errors received as an ICMP packet, or
-.B SO_EE_ORIGIN_LOCAL
-for locally generated errors.
-Unknown values should be ignored.
-.I ee_type
-and
-.I ee_code
-are set from the type and code fields of the ICMP header.
-.I ee_info
-contains the discovered MTU for
-.B EMSGSIZE
-errors.
-The message also contains the
-.I sockaddr_in of the node
-caused the error, which can be accessed with the
-.B SO_EE_OFFENDER
-macro.
-The
-.I sin_family
-field of the
-.B SO_EE_OFFENDER
-address is
-.B AF_UNSPEC
-when the source was unknown.
-When the error originated from the network, all IP options
-.RB ( IP_OPTIONS ", " IP_TTL ,
-etc.) enabled on the socket and contained in the
-error packet are passed as control messages.
-The payload of the packet causing the error is returned as normal payload.
-.\" FIXME . Is it a good idea to document that? It is a dubious feature.
-.\" On
-.\" .B SOCK_STREAM
-.\" sockets,
-.\" .B IP_RECVERR
-.\" has slightly different semantics. Instead of
-.\" saving the errors for the next timeout, it passes all incoming
-.\" errors immediately to the user.
-.\" This might be useful for very short-lived TCP connections which
-.\" need fast error handling. Use this option with care:
-.\" it makes TCP unreliable
-.\" by not allowing it to recover properly from routing
-.\" shifts and other normal
-.\" conditions and breaks the protocol specification.
-Note that TCP has no error queue;
-.B MSG_ERRQUEUE
-is not permitted on
-.B SOCK_STREAM
-sockets.
-.B IP_RECVERR
-is valid for TCP, but all errors are returned by socket function return or
-.B SO_ERROR
-only.
-.IP
-For raw sockets,
-.B IP_RECVERR
-enables passing of all received ICMP errors to the
-application, otherwise errors are reported only on connected sockets
-.IP
-It sets or retrieves an integer boolean flag.
-.B IP_RECVERR
-defaults to off.
-.TP
-.BR IP_RECVOPTS " (since Linux 2.2)"
-.\" Precisely: since Linux 2.1.15
-Pass all incoming IP options to the user in a
-.B IP_OPTIONS
-control message.
-The routing header and other options are already filled in
-for the local host.
-Not supported for
-.B SOCK_STREAM
-sockets.
-.TP
-.BR IP_RECVORIGDSTADDR " (since Linux 2.6.29)"
-.\" commit e8b2dfe9b4501ed0047459b2756ba26e5a940a69
-This boolean option enables the
-.B IP_ORIGDSTADDR
-ancillary message in
-.BR recvmsg (2),
-in which the kernel returns the original destination address
-of the datagram being received.
-The ancillary message contains a
-.IR "struct sockaddr_in" .
-Not supported for
-.B SOCK_STREAM
-sockets.
-.TP
-.BR IP_RECVTOS " (since Linux 2.2)"
-.\" Precisely: since Linux 2.1.68
-If enabled, the
-.B IP_TOS
-ancillary message is passed with incoming packets.
-It contains a byte which specifies the Type of Service/Precedence
-field of the packet header.
-Expects a boolean integer flag.
-Not supported for
-.B SOCK_STREAM
-sockets.
-.TP
-.BR IP_RECVTTL " (since Linux 2.2)"
-.\" Precisely: since Linux 2.1.68
-When this flag is set, pass a
-.B IP_TTL
-control message with the time-to-live
-field of the received packet as a 32 bit integer.
-Not supported for
-.B SOCK_STREAM
-sockets.
-.TP
-.BR IP_RETOPTS " (since Linux 2.2)"
-.\" Precisely: since Linux 2.1.15
-Identical to
-.BR IP_RECVOPTS ,
-but returns raw unprocessed options with timestamp and route record
-options not filled in for this hop.
-Not supported for
-.B SOCK_STREAM
-sockets.
-.TP
-.BR IP_ROUTER_ALERT " (since Linux 2.2)"
-.\" Precisely: since Linux 2.1.68
-Pass all to-be forwarded packets with the
-IP Router Alert option set to this socket.
-Valid only for raw sockets.
-This is useful, for instance, for user-space RSVP daemons.
-The tapped packets are not forwarded by the kernel;
-it is the user's responsibility to send them out again.
-Socket binding is ignored,
-such packets are filtered only by protocol.
-Expects an integer flag.
-.TP
-.BR IP_TOS " (since Linux 1.0)"
-Set or receive the Type-Of-Service (TOS) field that is sent
-with every IP packet originating from this socket.
-It is used to prioritize packets on the network.
-TOS is a byte.
-There are some standard TOS flags defined:
-.B IPTOS_LOWDELAY
-to minimize delays for interactive traffic,
-.B IPTOS_THROUGHPUT
-to optimize throughput,
-.B IPTOS_RELIABILITY
-to optimize for reliability,
-.B IPTOS_MINCOST
-should be used for "filler data" where slow transmission doesn't matter.
-At most one of these TOS values can be specified.
-Other bits are invalid and shall be cleared.
-Linux sends
-.B IPTOS_LOWDELAY
-datagrams first by default,
-but the exact behavior depends on the configured queueing discipline.
-.\" FIXME elaborate on this
-Some high-priority levels may require superuser privileges (the
-.B CAP_NET_ADMIN
-capability).
-.\" The priority can also be set in a protocol-independent way by the
-.\" .RB ( SOL_SOCKET ", " SO_PRIORITY )
-.\" socket option (see
-.\" .BR socket (7)).
-.TP
-.BR IP_TRANSPARENT " (since Linux 2.6.24)"
-.\" commit f5715aea4564f233767ea1d944b2637a5fd7cd2e
-.\" This patch introduces the IP_TRANSPARENT socket option: enabling that
-.\" will make the IPv4 routing omit the non-local source address check on
-.\" output. Setting IP_TRANSPARENT requires NET_ADMIN capability.
-.\" http://lwn.net/Articles/252545/
-Setting this boolean option enables transparent proxying on this socket.
-This socket option allows
-the calling application to bind to a nonlocal IP address and operate
-both as a client and a server with the foreign address as the local endpoint.
-NOTE: this requires that routing be set up in a way that
-packets going to the foreign address are routed through the TProxy box
-(i.e., the system hosting the application that employs the
-.B IP_TRANSPARENT
-socket option).
-Enabling this socket option requires superuser privileges
-(the
-.B CAP_NET_ADMIN
-or
-.B CAP_NET_RAW
-capability).
-.IP
-TProxy redirection with the iptables TPROXY target also requires that
-this option be set on the redirected socket.
-.TP
-.BR IP_TTL " (since Linux 1.0)"
-Set or retrieve the current time-to-live field that is used in every packet
-sent from this socket.
-.TP
-.BR IP_UNBLOCK_SOURCE " (since Linux 2.4.22 / 2.5.68)"
-Unblock previously blocked multicast source.
-Returns
-.B EADDRNOTAVAIL
-when given source is not being blocked.
-.IP
-Argument is an
-.I ip_mreq_source
-structure as described under
-.BR IP_ADD_SOURCE_MEMBERSHIP .
-.TP
-.BR SO_PEERSEC " (since Linux 2.6.17)"
-If labeled IPSEC or NetLabel is configured on both the sending and
-receiving hosts, this read-only socket option returns the security
-context of the peer socket connected to this socket.
-By default,
-this will be the same as the security context of the process that created
-the peer socket unless overridden by the policy or by a process with
-the required permissions.
-.IP
-The argument to
-.BR getsockopt (2)
-is a pointer to a buffer of the specified length in bytes
-into which the security context string will be copied.
-If the buffer length is less than the length of the security
-context string, then
-.BR getsockopt (2)
-returns \-1, sets
-.I errno
-to
-.BR ERANGE ,
-and returns the required length via
-.IR optlen .
-The caller should allocate at least
-.B NAME_MAX
-bytes for the buffer initially, although this is not guaranteed
-to be sufficient.
-Resizing the buffer to the returned length
-and retrying may be necessary.
-.IP
-The security context string may include a terminating null character
-in the returned length, but is not guaranteed to do so: a security
-context "foo" might be represented as either {'f','o','o'} of length 3
-or {'f','o','o','\\0'} of length 4, which are considered to be
-interchangeable.
-The string is printable, does not contain non-terminating null characters,
-and is in an unspecified encoding (in particular, it
-is not guaranteed to be ASCII or UTF-8).
-.IP
-The use of this option for sockets in the
-.B AF_INET
-address family is supported since Linux 2.6.17
-.\" commit 2c7946a7bf45ae86736ab3b43d0085e43947945c
-for TCP sockets, and since Linux 4.17
-.\" commit d452930fd3b9031e59abfeddb2fa383f1403d61a
-for SCTP sockets.
-.IP
-For SELinux, NetLabel conveys only the MLS portion of the security
-context of the peer across the wire, defaulting the rest of the
-security context to the values defined in the policy for the
-netmsg initial security identifier (SID).
-However, NetLabel can
-be configured to pass full security contexts over loopback.
-Labeled IPSEC always passes full security contexts as part of establishing
-the security association (SA) and looks them up based on the association
-for each packet.
-.\"
+See
+.BR IPPROTO_IP (2const).
.SS /proc interfaces
-The IP protocol
-supports a set of
-.I /proc
-interfaces to configure some global parameters.
-The parameters can be accessed by reading or writing files in the directory
-.IR /proc/sys/net/ipv4/ .
-.\" FIXME As at 2.6.12, 14 Jun 2005, the following are undocumented:
-.\" ip_queue_maxlen
-.\" ip_conntrack_max
-Interfaces described as
-.I Boolean
-take an integer value, with a nonzero value ("true") meaning that
-the corresponding option is enabled, and a zero value ("false")
-meaning that the option is disabled.
-.\"
-.TP
-.IR ip_always_defrag " (Boolean; since Linux 2.2.13)"
-[New with Linux 2.2.13;
-in earlier kernel versions this feature
-was controlled at compile time by the
-.B CONFIG_IP_ALWAYS_DEFRAG
-option; this option is not present in Linux 2.4.x and later]
-.IP
-When this boolean flag is enabled (not equal 0), incoming fragments
-(parts of IP packets
-that arose when some host between origin and destination decided
-that the packets were too large and cut them into pieces) will be
-reassembled (defragmented) before being processed, even if they are
-about to be forwarded.
-.IP
-Enable only if running
-either a firewall that is the sole link to your network
-or a transparent proxy;
-never ever use it for a normal router or host.
-Otherwise,
-fragmented communication can be disturbed
-if the fragments travel over different links.
-Defragmentation also has a large memory and CPU time cost.
-.IP
-This is automagically turned on
-when masquerading or transparent proxying are configured.
-.\"
-.TP
-.IR ip_autoconfig " (since Linux 2.2 to Linux 2.6.17)"
-.\" Precisely: since Linux 2.1.68
-.\" FIXME document ip_autoconfig
-Not documented.
-.\"
-.TP
-.IR ip_default_ttl " (integer; default: 64; since Linux 2.2)"
-.\" Precisely: since Linux 2.1.15
-Set the default time-to-live value of outgoing packets.
-This can be changed per socket with the
-.B IP_TTL
-option.
-.\"
-.TP
-.IR ip_dynaddr " (Boolean; default: disabled; since Linux 2.0.31)"
-Enable dynamic socket address and masquerading entry rewriting on interface
-address change.
-This is useful for dialup interface with changing IP addresses.
-0 means no rewriting, 1 turns it on and 2 enables verbose mode.
-.\"
-.TP
-.IR ip_forward " (Boolean; default: disabled; since Linux 1.2)"
-Enable IP forwarding with a boolean flag.
-IP forwarding can be also set on a per-interface basis.
-.\"
-.TP
-.IR ip_local_port_range " (since Linux 2.2)"
-.\" Precisely: since Linux 2.1.68
-This file contains two integers that define the default local port range
-allocated to sockets that are not explicitly bound to a port number\[em]that
-is, the range used for
-.IR "ephemeral ports" .
-An ephemeral port is allocated to a socket in the following circumstances:
-.RS
-.IP \[bu] 3
-the port number in a socket address is specified as 0 when calling
-.BR bind (2);
-.IP \[bu]
-.BR listen (2)
-is called on a stream socket that was not previously bound;
-.IP \[bu]
-.BR connect (2)
-was called on a socket that was not previously bound;
-.IP \[bu]
-.BR sendto (2)
-is called on a datagram socket that was not previously bound.
-.RE
-.IP
-Allocation of ephemeral ports starts with the first number in
-.I ip_local_port_range
-and ends with the second number.
-If the range of ephemeral ports is exhausted,
-then the relevant system call returns an error (but see BUGS).
-.IP
-Note that the port range in
-.I ip_local_port_range
-should not conflict with the ports used by masquerading
-(although the case is handled).
-Also, arbitrary choices may cause problems with some firewall packet
-filters that make assumptions about the local ports in use.
-The first number should be at least greater than 1024,
-or better, greater than 4096, to avoid clashes
-with well known ports and to minimize firewall problems.
-.\"
-.TP
-.IR ip_no_pmtu_disc " (Boolean; default: disabled; since Linux 2.2)"
-.\" Precisely: 2.1.15
-If enabled, don't do Path MTU Discovery for TCP sockets by default.
-Path MTU discovery may fail if misconfigured firewalls (that drop
-all ICMP packets) or misconfigured interfaces (e.g., a point-to-point
-link where the both ends don't agree on the MTU) are on the path.
-It is better to fix the broken routers on the path than to turn off
-Path MTU Discovery globally, because not doing it incurs a high cost
-to the network.
-.\"
-.\" The following is from Linux 2.6.12: Documentation/networking/ip-sysctl.txt
-.TP
-.IR ip_nonlocal_bind " (Boolean; default: disabled; since Linux 2.4)"
-.\" Precisely: patch-2.4.0-test10
-If set, allows processes to
-.BR bind (2)
-to nonlocal IP addresses,
-which can be quite useful, but may break some applications.
-.\"
-.\" The following is from Linux 2.6.12: Documentation/networking/ip-sysctl.txt
-.TP
-.IR ip6frag_time " (integer; default: 30)"
-Time in seconds to keep an IPv6 fragment in memory.
-.\"
-.\" The following is from Linux 2.6.12: Documentation/networking/ip-sysctl.txt
-.TP
-.IR ip6frag_secret_interval " (integer; default: 600)"
-Regeneration interval (in seconds) of the hash secret (or lifetime
-for the hash secret) for IPv6 fragments.
-.TP
-.IR ipfrag_high_thresh " (integer)"
-.TQ
-.IR ipfrag_low_thresh " (integer)"
-If the amount of queued IP fragments reaches
-.IR ipfrag_high_thresh ,
-the queue is pruned down to
-.IR ipfrag_low_thresh .
-Contains an integer with the number of bytes.
-.TP
-.I neigh/*
See
-.BR arp (7).
-.\" FIXME Document the conf/*/* interfaces
-.\"
-.\" FIXME Document the route/* interfaces
+.BR proc_sys_net_ipv4 (5).
.SS Ioctls
All ioctls described in
.BR socket (7)
@@ -1442,21 +374,6 @@ see
and
.BR socket (7).
.SH NOTES
-.BR IP_FREEBIND ,
-.BR IP_MSFILTER ,
-.BR IP_MTU ,
-.BR IP_MTU_DISCOVER ,
-.BR IP_RECVORIGDSTADDR ,
-.BR IP_PASSSEC ,
-.BR IP_PKTINFO ,
-.BR IP_RECVERR ,
-.BR IP_ROUTER_ALERT ,
-and
-.B IP_TRANSPARENT
-are Linux-specific.
-.\" IP_XFRM_POLICY is Linux-specific
-.\" IP_IPSEC_POLICY is a nonstandard extension, also present on some BSDs
-.P
Be very careful with the
.B SO_BROADCAST
option \- it is not privileged in Linux.
@@ -1470,25 +387,6 @@ using the more modern multicast approach
to communicating with an open-ended
group of hosts on the local network.
.P
-Some other BSD sockets implementations provide
-.B IP_RCVDSTADDR
-and
-.B IP_RECVIF
-socket options to get the destination address and the interface of
-received datagrams.
-Linux has the more general
-.B IP_PKTINFO
-for the same task.
-.P
-Some BSD sockets implementations also provide an
-.B IP_RECVTTL
-option, but an ancillary message with type
-.B IP_RECVTTL
-is passed with the incoming packet.
-This is different from the
-.B IP_TTL
-option used in Linux.
-.P
Using the
.B SOL_IP
socket options level isn't portable;
@@ -1544,6 +442,7 @@ does not work in some Linux 2.2 kernels.
.\" .SH AUTHORS
.\" This man page was written by Andi Kleen.
.SH SEE ALSO
+.BR IPPROTO_IP (2const),
.BR recvmsg (2),
.BR sendmsg (2),
.BR byteorder (3),