NAME
inet - Internet protocol family
SYNOPSIS
#include <sys/types.h>
#include <netinet/in.h>
DESCRIPTION
The Internet protocol family is a collection of protocols layered atop
the Internet Protocol (IP) transport layer, and utilizing the Internet
address format. The Internet family provides protocol support for the
SOCK_STREAM, SOCK_DGRAM, and SOCK_RAW socket types; the SOCK_RAW
interface provides access to the IP protocol.
ADDRESSING
Internet addresses are four byte quantities, stored in network standard
format (on little endian machines, such as the alpha, amd64, i386 and
ia64 these are word and byte reversed). The include file #include
<netinet/in.h>
defines this address as a discriminated union.
Sockets bound to the Internet protocol family utilize the following
addressing structure,
struct sockaddr_in {
uint8_t sin_len;
sa_family_t sin_family;
in_port_t sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};
Sockets may be created with the local address INADDR_ANY to affect
“wildcard” matching on incoming messages. The address in a connect(2) or
sendto(2) call may be given as INADDR_ANY to mean “this host”. The
distinguished address INADDR_BROADCAST is allowed as a shorthand for the
broadcast address on the primary network if the first network configured
supports broadcast.
PROTOCOLS
The Internet protocol family is comprised of the IP network protocol,
Internet Control Message Protocol (ICMP), Internet Group Management
Protocol (IGMP), Transmission Control Protocol (TCP), and User Datagram
Protocol (UDP). TCP is used to support the SOCK_STREAM abstraction while
UDP is used to support the SOCK_DGRAM abstraction. A raw interface to IP
is available by creating an Internet socket of type SOCK_RAW. The ICMP
message protocol is accessible from a raw socket.
The 32-bit Internet address contains both network and host parts.
However, direct examination of addresses is discouraged. For those
programs which absolutely need to break addresses into their component
parts, the following ioctl(2) commands are provided for a datagram socket
in the Internet domain; they have the same form as the SIOCIFADDR command
(see intro(4)).
SIOCSIFNETMASK Set interface network mask. The network mask defines the
network part of the address; if it contains more of the
address than the address type would indicate, then
subnets are in use.
SIOCGIFNETMASK Get interface network mask.
MIB Variables
A number of variables are implemented in the net.inet branch of the
sysctl(3) MIB. In addition to the variables supported by the transport
protocols (for which the respective manual pages may be consulted), the
following general variables are defined:
IPCTL_FORWARDING (ip.forwarding) Boolean: enable/disable forwarding
of IP packets. Defaults to off.
IPCTL_FASTFORWARDING (ip.fastforwarding) Boolean: enable/disable the use
of fast IP forwarding code. Defaults to off. When
fast IP forwarding is enabled, IP packets are
forwarded directly to the appropriate network
interface with direct processing to completion,
which greatly improves the throughput. All packets
for local IP addresses, non-unicast, or with IP
options are handled by the normal IP input
processing path. All features of the normal (slow)
IP forwarding path are supported including firewall
(through pfil(9) hooks) checking, except ipsec(4)
tunnel brokering. The IP fastforwarding path does
not generate ICMP redirect or source quench
messages.
IPCTL_SENDREDIRECTS (ip.redirect) Boolean: enable/disable sending of
ICMP redirects in response to IP packets for which
a better, and for the sender directly reachable,
route and next hop is known. Defaults to on.
IPCTL_DEFTTL (ip.ttl) Integer: default time-to-live (“TTL”) to
use for outgoing IP packets.
IPCTL_ACCEPTSOURCEROUTE
(ip.accept_sourceroute) Boolean: enable/disable
accepting of source-routed IP packets (default
false).
IPCTL_SOURCEROUTE (ip.sourceroute) Boolean: enable/disable forwarding
of source-routed IP packets (default false).
IPCTL_RTEXPIRE (ip.rtexpire) Integer: lifetime in seconds of
protocol-cloned IP routes after the last reference
drops (default one hour). This value varies
dynamically as described above.
IPCTL_RTMINEXPIRE (ip.rtminexpire) Integer: minimum value of
ip.rtexpire (default ten seconds). This value has
no effect on user modifications, but restricts the
dynamic adaptation described above.
IPCTL_RTMAXCACHE (ip.rtmaxcache) Integer: trigger level of cached,
unreferenced, protocol-cloned routes which
initiates dynamic adaptation (default 128).
ip.process_options Integer: control IP options processing. By setting
this variable to 0, all IP options in the incoming
packets will be ignored, and the packets will be
passed unmodified. By setting to 1, IP options in
the incoming packets will be processed accordingly.
By setting to 2, an ICMP “prohibited by filter”
message will be sent back in response to incoming
packets with IP options. Default is 1. This
sysctl(8) variable affects packets destined for a
local host as well as packets forwarded to some
other host.
ip.random_id Boolean: control IP IDs generation behaviour.
Setting this sysctl(8) to non-zero causes the ID
field in IP packets to be randomized instead of
incremented by 1 with each packet generated. This
closes a minor information leak which allows remote
observers to determine the rate of packet
generation on the machine by watching the counter.
In the same time, on high-speed links, it can
decrease the ID reuse cycle greatly. Default is 0
(sequential IP IDs). IPv6 flow IDs and fragment
IDs are always random.
ip.maxfragpackets Integer: maximum number of fragmented packets the
host will accept and hold in the reassembling queue
simultaneously. 0 means that the host will not
accept any fragmented packets. -1 means that the
host will accept as many fragmented packets as it
receives.
ip.maxfragsperpacket Integer: maximum number of fragments the host will
accept and hold in the reassembling queue for a
packet. 0 means that the host will not accept any
fragmented packets.
SEE ALSO
ioctl(2), socket(2), sysctl(3), icmp(4), intro(4), ip(4), ipfirewall(4),
route(4), tcp(4), udp(4), pfil(9)
"An Introductory 4.3 BSD Interprocess Communication Tutorial", PS1, 7.
"An Advanced 4.3 BSD Interprocess Communication Tutorial", PS1, 8.
CAVEATS
The Internet protocol support is subject to change as the Internet
protocols develop. Users should not depend on details of the current
implementation, but rather the services exported.
HISTORY
The inet protocol interface appeared in 4.2BSD. The “protocol cloning”
code appeared in FreeBSD 2.1.