IP(7) DEVICES AND MODULES IP(7)
NAME
IP - Internet Protocol
SYNOPSIS
#include <sys/socket.h>
#include <netinet/in.h>
s = socket(AFINET, SOCKRAW, proto);
t = topen ("/dev/rawip", ORDWR);
d = open ("/dev/ip", ORDWR);
DESCRIPTION
IP is the internetwork datagram delivery protocol that is
central to the Internet protocol family. Programs may use
IP through higher-level protocols such as the Transmission
Control Protocol (TCP) or the User Datagram Protocol (UDP),
or may interface directly to IP. See tcp(7) and udp(7).
Direct access may be via the socket interface (using a raw
socket) or the Transport Level Interface (TLI). The proto-
col options defined in the IP specification may be set in
outgoing datagrams.
The STREAMS driver /dev/rawip is the TLI transport provider
that provides raw access to IP. The device /dev/ip is the
multiplexing STREAMS driver that implements the protocol
processing of IP. The latter connects below to datalink pro-
viders [interface drivers, see if(3N)], and above to tran-
port providers such as TCP and UDP.
Raw IP sockets are connectionless and are normally used with
the sendto() and recvfrom() calls, [(see send(2) and
recv(2)] although the connect(2) call may also be used to
fix the destination for future datagrams [in which case the
read(2) or recv(2) and write(2) or send(2) calls may be
used]. If proto is zero, the default protocol, IPPROTORAW,
is used. If proto is non-zero, that protocol number will be
set in outgoing datagrams and will be used to filter incom-
ing datagrams. An IP header will be generated and prepended
to each outgoing datagram; received datagrams are returned
with the IP header and options intact.
A single socket option, IPOPTIONS, is supported at the IP
level. This socket option may be used to set IP options to
be included in each outgoing datagram. IP options to be
sent are set with setsockopt() [see getsockopt(2)]. The
getsockopt(2) call returns the IP options set in the last
setsockopt() call. IP options on received datagrams are
visible to user programs only using raw IP sockets. The
format of IP options given in setsockopt() matches those
defined in the IP specification with one exception: the
1
IP(7) DEVICES AND MODULES IP(7)
list of addresses for the source routing 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 accord-
ingly before use. IP options may be used with any socket
type in the Internet family.
At the socket level, the socket option SODONTROUTE may be
applied. This option forces datagrams being sent to bypass
the routing step in output. Normally, IP selects a network
interface to send the datagram, and possibly an intermediate
gateway, based on an entry in the routing table. See rout-
ing(4). When SODONTROUTE is set, the datagram will be sent
using the interface whose network number or full IP address
matches the destination address. If no interface matches,
the error ENETUNRCH will be returned.
Raw IP datagrams can also be sent and received using the TLI
connectionless primitives.
Datagrams flow through the IP layer in two directions: from
the network up to user processes and from user processes
down to the network. Using this orientation, IP is layered
above the network interface drivers and below the transport
protocols such as UDP and TCP. The Internet Control Message
Protocol (ICMP) is logically a part of IP. See icmp(7).
IP provides for a checksum of the header part, but not the
data part of the datagram. The checksum value is computed
and set in the process of sending datagrams and checked when
receiving datagrams. IP header checksumming may be disabled
for debugging purposes by patching the kernel variable ipck-
sum to have the value zero.
IP options in received datagrams are processed in the IP
layer according to the protocol specification. Currently
recognized IP options include: security, loose source and
record route (LSRR), strict source and record route (SSRR),
record route, stream identifier, and internet timestamp.
The IP layer will normally forward received datagrams that
are not addressed to it. Forwarding is under the control of
the kernel variable ipforwarding: if ipforwarding is zero,
IP datagrams will not be forwarded; if ipforwarding is one,
IP datagrams will be forwarded. ipforwarding is usually set
to one only in machines with more than one network interface
(internetwork routers). This kernel variable can be patched
to enable or disable forwarding.
The IP layer will send an ICMP message back to the source
host in many cases when it receives a datagram that can not
be handled. A time exceeded ICMP message will be sent if
2
IP(7) DEVICES AND MODULES IP(7)
the time to live field in the IP header drops to zero in the
process of forwarding a datagram. A destination unreachable
message will be sent if a datagram can not be forwarded
because there is no route to the final destination, or if it
can not be fragmented. If the datagram is addressed to the
local host but is destined for a protocol that is not sup-
ported or a port that is not in use, a destination unreach-
able message will also be sent. The IP layer may send an
ICMP source quench message if it is receiving datagrams too
quickly. ICMP messages are only sent for the first fragment
of a fragmented datagram and are never returned in response
to errors in other ICMP messages.
The IP layer supports fragmentation and reassembly.
Datagrams are fragmented on output if the datagram is larger
than the maximum transmission unit (MTU) of the network
interface. Fragments of received datagrams are dropped from
the reassembly queues if the complete datagram is not recon-
structed within a short time period.
Errors in sending discovered at the network interface driver
layer are passed by IP back up to the user process.
SEE ALSO
read(2), write(2), connect(3N), getsockopt(3N), recv(3N),
send(3N), routing(4), icmp(7), inet(7) tcp(7), udp(7).
Postel, Jon, Internet Protocol - DARPA Internet Program Pro-
tocol Specification, RFC 791, Network Information Center,
SRI International, Menlo Park, Calif., September 1981.
DIAGNOSTICS
A socket operation may fail with one of the following errors
returned:
EACCESS A IP broadcast destination address was
specified and the caller was not the
privileged user.
EISCONN An attempt was made to establish a con-
nection on a socket which already had
one, or to send a datagram with the des-
tination address specified and the
socket was already connected.
EMSGSIZE An attempt was made to send a datagram
that was too large for an interface, but
was not allowed to be fragmented (such
as broadcasts).
ENETUNREACH An attempt was made to establish a con-
nection or send a datagram, where there
3
IP(7) DEVICES AND MODULES IP(7)
was no matching entry in the routing
table, or if an ICMP destination
unreachable message was received.
ENOTCONN A datagrem was sent, but no destination
address was specified, and the socket
had not been connected.
ENOBUFS The system ran out of memory for frag-
mentation buffers or other internal data
structure.
EADDRNOTAVAIL An attempt was made to create a socket
with a local address that did not match
any network interface, or an IP broad-
cast destination address was specified
and the network interface does not sup-
port broadcast.
The following errors may occur when setting or getting IP
options:
EINVAL An unknown socket option name was given.
EINVAL The IP option field was improperly
formed; an option field was shorter than
the minimum value or longer than the
option buffer provided.
NOTES
Raw sockets should receive ICMP error packets relating to
the protocol; currently such packets are simply discarded.
Users of higher-level protocols such as TCP and UDP should
be able to see received IP options.
4