<commit_before>.\" Copyright (c) 1983, 1991, 1993
.\"	The Regents of the University of California.  All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\"    notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\"    notice, this list of conditions and the following disclaimer in the
.\"    documentation and/or other materials provided with the distribution.
.\" 3. All advertising materials mentioning features or use of this software
.\"    must display the following acknowledgement:
.\"	This product includes software developed by the University of
.\"	California, Berkeley and its contributors.
.\" 4. Neither the name of the University nor the names of its contributors
.\"    may be used to endorse or promote products derived from this software
.\"    without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\"     @(#)ip.4	8.2 (Berkeley) 11/30/93
.\" $FreeBSD$
.\"
.Dd March 3, 2001
.Dt IP 4
.Os
.Sh NAME
.Nm ip
.Nd Internet Protocol
.Sh SYNOPSIS
.Fd #include <sys/types.h>
.Fd #include <sys/socket.h>
.Fd #include <netinet/in.h>
.Ft int
.Fn socket AF_INET SOCK_RAW proto
.Sh DESCRIPTION
.Tn IP 
is the transport layer protocol used
by the Internet protocol family.
Options may be set at the
.Tn IP
level
when using higher-level protocols that are based on
.Tn IP
(such as
.Tn TCP
and
.Tn UDP ) .
It may also be accessed
through a
.Dq raw socket
when developing new protocols, or
special-purpose applications.
.Pp
There are several
.Tn IP-level
.Xr setsockopt 2 
and
.Xr getsockopt 2
options.
.Dv IP_OPTIONS 
may be used to provide
.Tn IP
options to be transmitted in the
.Tn IP
header of each outgoing packet
or to examine the header options on incoming packets.
.Tn IP
options may be used with any socket type in the Internet family.
The format of
.Tn IP
options to be sent is that specified by the
.Tn IP 
protocol specification (RFC-791), with one exception:
the list of addresses for Source Route options must include the first-hop
gateway at the beginning of the list of gateways.
The first-hop gateway address will be extracted from the option list
and the size adjusted accordingly before use.
To disable previously specified options,
use a zero-length buffer:
.Bd -literal
setsockopt(s, IPPROTO_IP, IP_OPTIONS, NULL, 0);
.Ed
.Pp
.Dv IP_TOS 
and 
.Dv IP_TTL 
may be used to set the type-of-service and time-to-live
fields in the 
.Tn IP 
header for 
.Dv SOCK_STREAM , SOCK_DGRAM ,
and certain types of
.Dv SOCK_RAW
sockets.
For example,
.Bd -literal
int tos = IPTOS_LOWDELAY;       /* see <netinet/ip.h> */
setsockopt(s, IPPROTO_IP, IP_TOS, &tos, sizeof(tos));

int ttl = 60;                   /* max = 255 */
setsockopt(s, IPPROTO_IP, IP_TTL, &ttl, sizeof(ttl));
.Ed
.Pp
If the 
.Dv IP_RECVDSTADDR 
option is enabled on a 
.Dv SOCK_DGRAM 
socket,
the
.Xr recvmsg 2
call will return the destination 
.Tn IP 
address for a 
.Tn UDP 
datagram. 
The msg_control field in the msghdr structure points to a buffer 
that contains a cmsghdr structure followed by the 
.Tn IP 
address. 
The cmsghdr fields have the following values:
.Bd -literal
cmsg_len = sizeof(struct in_addr)
cmsg_level = IPPROTO_IP
cmsg_type = IP_RECVDSTADDR
.Ed
.Pp
.Dv IP_PORTRANGE 
may be used to set the port range used for selecting a local port number
on a socket with an unspecified (zero) port number.
It has the following
possible values:
.Bl -tag -width IP_PORTRANGE_DEFAULT
.It Dv IP_PORTRANGE_DEFAULT
use the default range of values, normally
.Dv IPPORT_RESERVED
through
.Dv IPPORT_USERRESERVED .
This is adjustable through the sysctl setting:
.Sy net.inet.ip.portrange.first
and
.Sy net.inet.ip.portrange.last .
.It Dv IP_PORTRANGE_HIGH
use a high range of values, normally
.Dv IPPORT_HIFIRSTAUTO
and
.Dv IPPORT_HILASTAUTO .
This is adjustable through the sysctl setting:
.Sy net.inet.ip.portrange.hifirst
and
.Sy net.inet.ip.portrange.hilast .
.It Dv IP_PORTRANGE_LOW
use a low range of ports, which are normally restricted to
privileged processes on
.Ux
systems.  The range is normally from
.Dv IPPORT_RESERVED
down to
.Li 1
in descending order.  This range is not sysctl configurable.
.El
.Ss "Multicast Options"
.Pp
.Tn IP 
multicasting is supported only on 
.Dv AF_INET 
sockets of type
.Dv SOCK_DGRAM 
and 
.Dv SOCK_RAW ,
and only on networks where the interface
driver supports multicasting.
.Pp
The 
.Dv IP_MULTICAST_TTL 
option changes the time-to-live (TTL)
for outgoing multicast datagrams
in order to control the scope of the multicasts:
.Bd -literal
u_char ttl;	/* range: 0 to 255, default = 1 */
setsockopt(s, IPPROTO_IP, IP_MULTICAST_TTL, &ttl, sizeof(ttl));
.Ed
.Pp
Datagrams with a TTL of 1 are not forwarded beyond the local network.
Multicast datagrams with a TTL of 0 will not be transmitted on any network,
but may be delivered locally if the sending host belongs to the destination<commit_msg>Correct the description of the "low" (< 1024) port range.<commit_after>.\" Copyright (c) 1983, 1991, 1993
.\"	The Regents of the University of California.  All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\"    notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\"    notice, this list of conditions and the following disclaimer in the
.\"    documentation and/or other materials provided with the distribution.
.\" 3. All advertising materials mentioning features or use of this software
.\"    must display the following acknowledgement:
.\"	This product includes software developed by the University of
.\"	California, Berkeley and its contributors.
.\" 4. Neither the name of the University nor the names of its contributors
.\"    may be used to endorse or promote products derived from this software
.\"    without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\"     @(#)ip.4	8.2 (Berkeley) 11/30/93
.\" $FreeBSD$
.\"
.Dd March 3, 2001
.Dt IP 4
.Os
.Sh NAME
.Nm ip
.Nd Internet Protocol
.Sh SYNOPSIS
.Fd #include <sys/types.h>
.Fd #include <sys/socket.h>
.Fd #include <netinet/in.h>
.Ft int
.Fn socket AF_INET SOCK_RAW proto
.Sh DESCRIPTION
.Tn IP 
is the transport layer protocol used
by the Internet protocol family.
Options may be set at the
.Tn IP
level
when using higher-level protocols that are based on
.Tn IP
(such as
.Tn TCP
and
.Tn UDP ) .
It may also be accessed
through a
.Dq raw socket
when developing new protocols, or
special-purpose applications.
.Pp
There are several
.Tn IP-level
.Xr setsockopt 2 
and
.Xr getsockopt 2
options.
.Dv IP_OPTIONS 
may be used to provide
.Tn IP
options to be transmitted in the
.Tn IP
header of each outgoing packet
or to examine the header options on incoming packets.
.Tn IP
options may be used with any socket type in the Internet family.
The format of
.Tn IP
options to be sent is that specified by the
.Tn IP 
protocol specification (RFC-791), with one exception:
the list of addresses for Source Route options must include the first-hop
gateway at the beginning of the list of gateways.
The first-hop gateway address will be extracted from the option list
and the size adjusted accordingly before use.
To disable previously specified options,
use a zero-length buffer:
.Bd -literal
setsockopt(s, IPPROTO_IP, IP_OPTIONS, NULL, 0);
.Ed
.Pp
.Dv IP_TOS 
and 
.Dv IP_TTL 
may be used to set the type-of-service and time-to-live
fields in the 
.Tn IP 
header for 
.Dv SOCK_STREAM , SOCK_DGRAM ,
and certain types of
.Dv SOCK_RAW
sockets.
For example,
.Bd -literal
int tos = IPTOS_LOWDELAY;       /* see <netinet/ip.h> */
setsockopt(s, IPPROTO_IP, IP_TOS, &tos, sizeof(tos));

int ttl = 60;                   /* max = 255 */
setsockopt(s, IPPROTO_IP, IP_TTL, &ttl, sizeof(ttl));
.Ed
.Pp
If the 
.Dv IP_RECVDSTADDR 
option is enabled on a 
.Dv SOCK_DGRAM 
socket,
the
.Xr recvmsg 2
call will return the destination 
.Tn IP 
address for a 
.Tn UDP 
datagram. 
The msg_control field in the msghdr structure points to a buffer 
that contains a cmsghdr structure followed by the 
.Tn IP 
address. 
The cmsghdr fields have the following values:
.Bd -literal
cmsg_len = sizeof(struct in_addr)
cmsg_level = IPPROTO_IP
cmsg_type = IP_RECVDSTADDR
.Ed
.Pp
.Dv IP_PORTRANGE 
may be used to set the port range used for selecting a local port number
on a socket with an unspecified (zero) port number.
It has the following
possible values:
.Bl -tag -width IP_PORTRANGE_DEFAULT
.It Dv IP_PORTRANGE_DEFAULT
use the default range of values, normally
.Dv IPPORT_RESERVED
through
.Dv IPPORT_USERRESERVED .
This is adjustable through the sysctl setting:
.Sy net.inet.ip.portrange.first
and
.Sy net.inet.ip.portrange.last .
.It Dv IP_PORTRANGE_HIGH
use a high range of values, normally
.Dv IPPORT_HIFIRSTAUTO
and
.Dv IPPORT_HILASTAUTO .
This is adjustable through the sysctl setting:
.Sy net.inet.ip.portrange.hifirst
and
.Sy net.inet.ip.portrange.hilast .
.It Dv IP_PORTRANGE_LOW
use a low range of ports, which are normally restricted to
privileged processes on
.Ux
systems.  The range is normally from
.Dv IPPORT_RESERVED - 1
down to
.Li IPPORT_RESERVEDSTART
in descending order. 
This is adjustable through the sysctl setting:
.Sy net.inet.ip.portrange.lowfirst
and
.Sy net.inet.ip.portrange.lowlast .
.El
.Ss "Multicast Options"
.Pp
.Tn IP 
multicasting is supported only on 
.Dv AF_INET 
sockets of type
.Dv SOCK_DGRAM 
and 
.Dv SOCK_RAW ,
and only on networks where the interface
driver supports multicasting.
.Pp
The 
.Dv IP_MULTICAST_TTL 
option changes the time-to-live (TTL)
for outgoing multicast datagrams
in order to control the scope of the multicasts:
.Bd -literal
u_char ttl;	/* range: 0 to 255, default = 1 */
setsockopt(s, IPPROTO_IP, IP_MULTICAST_TTL, &ttl, sizeof(ttl));
.Ed
.Pp
Datagrams with a TTL of 1 are not forwarded beyond the local network.
Multicast datagrams with a TTL of 0 will not be transmitted on any network,
but may be delivered locally if the sending host belongs to the destination
{'fraction_non_alphanumeric': 0.07079199596435178, 'fraction_numerical': 0.008912056499075165, 'mean_word_length': 3.7867203219315897, 'pattern_counts': {'":': 0, '<': 12, '<?xml version=': 0, '>': 11, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '615416', 'n_tokens_mistral': 3996, 'n_tokens_neox': 3660, 'n_words': 1732}