routing(4) routing(4)
NAME
routing - system supporting for packet network routing
DESCRIPTION
The network facilities provide general packet routing. Routing table
maintenance may be implemented in applications processes.
A simple set of data structures compose a "routing table" used in
selecting the appropriate network interface when transmitting packets.
This table contains a single entry for each route to a specific net-
work or host. The routing table was designed to support routing for
the Internet Protocol (IP), but its implementation is protocol
independent and thus it may serve other protocols as well. User pro-
grams may manipulate this data base with the aid of two ioctl(2) com-
mands, SIOCADDRT and SIOCDELRT. These commands allow the addition and
deletion of a single routing table entry, respectively. Routing table
manipulations may only be carried out by privileged user.
A routing table entry has the following form, as defined in
/usr/include/net/route.h:
struct rtentry {
ulong rthash; /* to speed lookups */
struct sockaddr rtdst; /* key */
struct sockaddr rtgateway; /* value */
short rtflags; /* up/down?, host/net, subnetmask */
short rtrefcnt; /* # held references */
ulong rtuse; /* raw # packets forwarded */
#ifdef STRNET
struct ipprovider *rtprov; /* the answer: provider to use */
#else
struct ifnet *rtifp; /* the answer: interface to use */
#endif /* STRNET */
ulong rtsubnetmask; /* subnet mask */
};
with rtflags defined from:
#define RTFUP 0x1 /* route usable */
#define RTFGATEWAY 0x2 /* destination is a gateway */
#define RTFHOST 0x4 /* host entry (net otherwise) */
#define RTFSTATIC 0x800 /* mark route as static */
#define RTFNOCHECKSUM 0x1000 /* no need to compute UDP checksums */
#define RTFSUBNETMASK 0x2000 /* use subnet mask of route */
Applications using the old rtentry structure (i.e. without the
rtsubnetmask field) run without changes. There is no need to recom-
pile these applications.
Page 1 Reliant UNIX 5.44 Printed 11/98
routing(4) routing(4)
Routing table entries come in three flavors: for a specific host, for
all hosts on a specific network, for any destination not matched by
entries of the first two types (a wildcard route). Each network inter-
face installs a routing table entry when it it is initialized. Nor-
mally the interface specifies the route through it is a "direct" con-
nection to the destination host or network. If the route is direct,
the transport layer of a protocol family usually requests the packet
be sent to the same host specified in the packet. Otherwise, the
interface may be requested to address the packet to an entity dif-
ferent from the eventual recipient (that is, the packet is forwarded).
The user may supply a subnet mask different from the default netmask
of the network interface. If a subnet mask is supplied, the
RTFSUBNETMASK flag must be set in rtflags, otherwise the subnet mask
is ignored and the netmask of the network interface is used.
Routing table entries installed by the route(1M) command are marked as
static (i.e. the RTFSTATIC flag is set. This prevents the route from
being removed by a routing daemon.
Routing table entries installed by a user process may not specify the
hash, reference count, use, or interface fields; these are filled in
by the routing routines. If a route is in use when it is deleted
(rtrefcnt is non-zero), the resources associated with it will not be
reclaimed until all references to it are removed.
User processes read the routing tables through the /dev/kmem device.
The rtuse field contains the number of packets sent along the route.
This value is used to select among multiple routes to the same desti-
nation. When multiple routes to the same destination exist, the least
used route is selected.
A wildcard routing entry is specified with a zero destination address
value. Wildcard routes are used only when the system fails to find a
route to the destination host and network. The combination of wildcard
routes and routing redirects can provide an economical mechanism for
routing traffic.
DIAGNOSTICS
EEXIST A request was made to duplicate an existing entry.
ESRCH A request was made to delete a non-existent entry.
ENOBUFS The resources available were not sufficient to install a
new route.
Page 2 Reliant UNIX 5.44 Printed 11/98
routing(4) routing(4)
FILES
/dev/kmem
SEE ALSO
route(1M), routed(1M), ioctl(2).
Page 3 Reliant UNIX 5.44 Printed 11/98