Manual Page Result
0
Command: ip | Section: 4 | Source: UNIX v10 | File: ip.4
IP(4) Kernel Interfaces Manual IP(4)
NAME
ip, ip_ld - DARPA internet protocol
SYNOPSIS
#include <sys/inio.h>
#include <sys/inet/in.h>
#include <sys/inet/ip_var.h>
DESCRIPTION
The ip_ld line discipline and the files together implement the DARPA IP
datagram protocol. They are used by the programs described in ipcon-
fig(8) and route(8).
Each Ethernet device, Datakit channel, or other stream that is to send
and receive IP packets must be registered as an `IP interface' by push-
ing ip_ld and setting local and remote addresses with ioctl calls.
Thereafter, data received from the network are assumed to be IP pack-
ets, and are intercepted by the line discipline. Packets destined for
the local address of an active IP interface are routed for reading on
one of the ip device files. Other packets are routed to the IP inter-
face with a matching remote address and retransmitted.
Data written on ip devices are taken to be IP packets, are handed to
the IP interface with a matching address, and are sent. Packets des-
tined for unreachable places are quietly dropped.
A packet consists of a single stream record, followed by a delimiter:
at most one packet is returned by a read call; an entire packet must be
presented in a single write. A packet includes the IP header. Numbers
in the header are in host byte order.
Different ip devices handle different protocols atop IP. The minor de-
vice is the protocol number in the IP header; e.g. 6 for TCP or 17 for
UDP. While an ip device is open, it may not be opened again. IP pack-
ets are often processed by pushing a line discipline such as tcp_ld on
an ip device, rather than by explicit read and write calls; see tcp(4).
The following ioctl(2) calls, defined in <sys/inio.h>, apply to an IP
interface. IPIOLOCAL and either IPIOHOST or IPIONET must be called on
each interface before packets will be routed correctly. Type in_addr,
defined in <sys/inet/in.h>, is a 32-bit integer representing an IP ad-
dress in host byte order.
IPIOLOCAL The third argument points to an in_addr: the local IP ad-
dress for this interface.
IPIOHOST The third argument points to an in_addr: the remote IP ad-
dress of the single host reachable through this interface.
IPIONET The third argument points to an in_addr: the remote IP ad-
dress of the network of many hosts reachable through this
interface. IP addresses are matched to the network address
by applying an internal bit-mask: any IP address for which
(address&mask)==net-address is part of the network. The
default mask depends on the IP address class; see the IP
protocol standard for details.
IPIOMASK The third argument points to an in_addr containing a new
network mask for this interface.
IPIOMTU The third argument points to an integer number of bytes.
IP packets larger than this size (1500 by default) will be
split into smaller ones before being sent through this in-
terface.
IPIOARP The network device for this interface is an Ethernet. Dis-
card the Ethernet header from each incoming packet. When
sending a packet, prefix an Ethernet header containing pro-
tocol type 0x8 and a destination address obtained by look-
ing up the IP destination address in a table. If the IP
address is not in the table, discard the packet, and make
an in_addr containing the offending address available for
reading on this file descriptor (the one on which ip_ld was
pushed).
IPIORESOLVE The third argument points to a structure:
struct {
in_addr inaddr;
unsigned char enaddr[6];
};
Add an entry to the table consulted after IPIOARP, mapping
IP address inaddr to Ethernet address enaddr.
The following ioctl calls, define in <sys/inio.h>, apply to the entire
IP subsystem; they may be used on any file with ip_ld pushed.
IPIOROUTE The third argument points to a structure:
struct route {
in_addr dst;
in_addr gate;
};
Arrange that henceforth, any IP packet destined for address
dst will be routed as if destined for gate.
IPIOGETIFS The third argument points to a union as follows. The
structure is defined in <sys/inet/ip_var.h>.
union {
int index;
struct ipif {
struct queue *queue;
int flags;
int mtu;
in_addr thishost;
in_addr that;
in_addr mask;
in_addr broadcast;
int ipackets, ierrors;
int opackets, oerrors;
int arp;
int dev;
} ipif;
};
Before the call, index should contain an integer naming an
entry in the system's table of active interfaces. Inter-
faces are numbered in a continuous sequence starting at 0.
Out-of-range numbers return an error. After the call, ipif
is filled in with various numbers about that interface.
FILES
/dev/ip*
SEE ALSO
ioctl(2), internet(3), ipconfig(8), route(8)
DARPA standards RFC 791, RFC 1122
BUGS
The ARP mechanism should be generalized to deal with networks other
than Ethernet. There is only one ARP table for the entire system;
there should be one for each interface.
The structures used by IPIOROUTE and IPIORESOLVE should appear in a
header file somewhere.
IP(4)