8322 nl: misleading-indentation
[unleashed/tickless.git] / usr / src / man / man7p / routing.7p
blobbe5d0d832cdba5e247f12d8cf69e331818ff613b
1 '\" te
2 .\"  Copyright 1989 AT&T
3 .\" Copyright (C) 1999, Sun Microsystems,
4 .\" Inc. All Rights Reserved
5 .\" The contents of this file are subject to the terms of the Common Development and Distribution License (the "License").  You may not use this file except in compliance with the License.
6 .\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE or http://www.opensolaris.org/os/licensing.  See the License for the specific language governing permissions and limitations under the License.
7 .\" When distributing Covered Code, include this CDDL HEADER in each file and include the License file at usr/src/OPENSOLARIS.LICENSE.  If applicable, add the following below this CDDL HEADER, with the fields enclosed by brackets "[]" replaced with your own identifying information: Portions Copyright [yyyy] [name of copyright owner]
8 .TH ROUTING 7P "Nov 9, 1999"
9 .SH NAME
10 routing \- system support for packet network routing
11 .SH DESCRIPTION
12 .sp
13 .LP
14 The network facilities provide general packet routing. The \fBrouting\fR
15 interface described here can be used to maintain the system's IPv4 routing
16 table. It has been maintained for compatibility with older applications. The
17 recommended interface for maintaining the system's routing tables is the
18 routing socket, described at \fBroute\fR(7P). The routing socket can be used to
19 manipulate both the IPv4 and IPv6 routing tables of the system. Routing table
20 maintenance may be implemented in applications processes.
21 .sp
22 .LP
23 A simple set of data structures compose a "routing table" used in selecting the
24 appropriate network interface when transmitting packets. This table contains a
25 single entry for each route to a specific network or host. The routing table
26 was designed to support routing for the Internet Protocol (IP), but its
27 implementation is protocol independent and thus it may serve other protocols as
28 well. User programs may manipulate this data base with the aid of two
29 \fBioctl\fR(2) commands, \fBSIOCADDRT\fR and \fBSIOCDELRT\fR. These commands
30 allow the addition and deletion of a single routing table entry, respectively.
31 Routing table manipulations may only be carried out by privileged user.
32 .sp
33 .LP
34 A routing table entry has the following form, as defined in
35 \fB/usr/include/net/route.h\fR:
36 .sp
37 .in +2
38 .nf
39 struct rtentry {
40         unit_t   rt_hash;               /* to speed lookups */
41         struct  sockaddr rt_dst;        /* key */
42         struct  sockaddr rt_gateway;    /* value */
43         short   rt_flags;               /* up/down?, host/net */
44         short   rt_refcnt;              /* # held references */
45         unit_t   rt_use;                /* raw # packets forwarded */
47  * The kernel does not use this field, and without it the structure is
48  * datamodel independent.
49  */
50 #if !defined(_KERNEL)
51         struct  ifnet *rt_ifp;          /* the answer: interface to use */
52 #endif                                  /* !defined(_KERNEL) */
54 .fi
55 .in -2
57 .sp
58 .LP
59 with \fIrt_flags\fR defined from:
60 .sp
61 .in +2
62 .nf
63 #define RTF_UP 0x1         /* route usable */
64 #define RTF_GATEWAY 0x2    /* destination is a gateway */
65 #define RTF_HOST 0x4       /* host entry (net otherwise) */
66 .fi
67 .in -2
69 .sp
70 .LP
71 There are three types of routing table entries: those for a specific host,
72 those for all hosts on a specific network, and those for any  destination not
73 matched by entries of the first two types, called a  wildcard route. Each
74 network interface installs a routing table entry when  it is initialized.
75 Normally the interface specifies if the route through it is a "direct"
76 connection to the destination host or network. If the route is direct, the
77 transport layer of a protocol family usually requests the packet be sent to the
78 same host specified in the packet. Otherwise, the interface may be requested to
79 address the packet to an entity different from the eventual recipient;
80 essentially, the packet is forwarded.
81 .sp
82 .LP
83 Routing table entries installed by a user process may not specify the hash,
84 reference count, use, or interface fields; these are filled in by the routing
85 routines. If a route is in use when it is deleted, meaning its \fBrt_refcnt\fR
86 is non-zero, the resources associated with it will not be reclaimed until all
87 references to it are removed.
88 .sp
89 .LP
90 User processes read the routing tables through the \fB/dev/ip\fR device.
91 .sp
92 .LP
93 The \fIrt_use\fR field contains the number of packets sent along the route.
94 This value is used to select among multiple routes to the same destination.
95 When multiple routes to the same destination exist, the least used route is
96 selected.
97 .sp
98 .LP
99 A wildcard routing entry is specified with a  \fBzero\fR destination address
100 value. Wildcard routes are used only when the system fails to find a route to
101 the destination host and network. The combination of wildcard routes and
102 routing redirects can provide an economical mechanism for routing traffic.
103 .SH ERRORS
105 .ne 2
107 \fB\fBEEXIST\fR\fR
109 .RS 15n
110 A request was made to duplicate an existing entry.
114 .ne 2
116 \fB\fBESRCH\fR\fR
118 .RS 15n
119 A request was made to delete a non-existent entry.
123 .ne 2
125 \fB\fBENOBUFS\fR\fR
127 .RS 15n
128 Insufficient resources were available to install a new route.
132 .ne 2
134 \fB\fBENOMEM\fR\fR
136 .RS 15n
137 Insufficient resources were available to install a new route.
141 .ne 2
143 \fB\fBENETUNREACH\fR\fR
145 .RS 15n
146 The gateway is not directly reachable.  For example, it does not match the
147 destination/subnet on any of the network interfaces.
150 .SH FILES
152 .ne 2
154 \fB\fB/dev/ip\fR\fR
156 .RS 11n
157 \fBIP\fR device driver
160 .SH SEE ALSO
163 \fBroute\fR(1M), \fBioctl\fR(2), \fBroute\fR(7P)