2 .\" Copyright 1996 Massachusetts Institute of Technology
4 .\" Permission to use, copy, modify, and distribute this software and
5 .\" its documentation for any purpose and without fee is hereby
6 .\" granted, provided that both the above copyright notice and this
7 .\" permission notice appear in all copies, that both the above
8 .\" copyright notice and this permission notice appear in all
9 .\" supporting documentation, and that the name of M.I.T. not be used
10 .\" in advertising or publicity pertaining to distribution of the
11 .\" software without specific, written prior permission. M.I.T. makes
12 .\" no representations about the suitability of this software for any
13 .\" purpose. It is provided "as is" without express or implied
16 .\" THIS SOFTWARE IS PROVIDED BY M.I.T. ``AS IS''. M.I.T. DISCLAIMS
17 .\" ALL EXPRESS OR IMPLIED WARRANTIES WITH REGARD TO THIS SOFTWARE,
18 .\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19 .\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT
20 .\" SHALL M.I.T. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 .\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 .\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 .\" USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24 .\" ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
25 .\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
26 .\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29 .\" $FreeBSD: src/share/man/man9/rtentry.9,v 1.11.2.6 2002/03/17 09:12:50 schweikh Exp $
35 .Nd structure of an entry in the kernel routing table
41 The kernel provides a common mechanism by which all protocols can store
42 and retrieve entries from a central table of routes. Parts of this
43 mechanism are also used to interact with user-level processes by means
46 pseudo-protocol family.
49 header file defines the structures and manifest constants used in this
52 The basic structure of a route is defined by
53 .Dq Li struct rtentry ,
54 which includes the following fields:
55 .Bl -tag -offset indent -width 6n
57 .Vt "struct radix_node rt_nodes[2]" ;
59 Glue used by the radix-tree routines. These members also include in
60 their substructure the key (i.e., destination address) and mask used
61 when the route was created. The
65 macros can be used to extract this information (in the form of a
66 .Dq Li "struct sockaddr *" )
68 .Li "struct rtentry *" .
70 .Vt "struct sockaddr *rt_gateway" ;
74 of the route, which can either represent a destination in its own
75 right (some protocols will put a link-layer address here), or some
76 intermediate stop on the way to that destination (if the
80 .Vt "long rt_refcnt" ;
82 Route entries are reference-counted; this field indicates the number
83 of external (to the radix tree) references. If the
85 flag is not present, the
87 function will delete the route from the radix tree when the last
90 .Vt "u_long rt_flags" ;
94 .Vt "struct ifnet *rt_ifp" ;
97 .Vt "struct ifaddr *rt_ifa" ;
99 These two fields represent the
101 as it were, to the question posed by a route lookup; that is, they
102 name the interface and interface address to be used in sending a
103 packet to the destination or set of destinations which this route
106 .Vt "struct sockaddr *rt_genmask" ;
110 family of functions performs a cloning operation as requested by the
114 flag, this field is used as the mask for the new route which is
115 inserted into the table. If this field is a null pointer, then a host
118 .Vt "caddr_t rt_llinfo" ;
122 flag is set, this field contains information specific to the link
123 layer represented by the named interface address. (It is normally
125 .Fn rt_ifa->ifa_rtrequest
126 routine.) Protocols such as
128 use this field to reference per-destination state internal to that
131 .Vt "struct rt_metrics rt_rmx" ;
135 .Vt "struct rtentry *rt_gwroute" ;
137 This member is a reference to a route whose destination is
142 .\" .It Dv "int (*rt_output)();"
145 .Vt "struct rtentry *rt_parent" ;
147 A reference to the route from which this route was cloned, or a null
148 pointer if this route was not generated by cloning. See also the
153 The following flag bits are defined:
154 .Bl -tag -offset indent -width RTF_CHAINDELETE -compact
156 The route is not deleted.
158 The route points to an intermediate destination and not the ultimate
163 fields name that destination.
165 This is a host route.
167 The destination is presently unreachable. This should result in an
169 error from output routines.
171 This route was created dynamically by
174 This route was modified by
179 protocol, indicating that the request was executed.
181 When this route is returned as a result of a lookup, automatically
182 create a new route using this one as a template and
184 (if present) as a mask.
186 When this route is returned as a result of a lookup, send a report on
189 interface requesting that an external process perform resolution for
190 this route. (Used in conjunction with
193 Indicates that this route represents information being managed by a
194 link layer's adaptation layer (e.g.,
197 Indicates that this route was manually added by means of the
201 Requests that output sent via this route be discarded.
209 only managed by an entire protocol. (E.g.,
211 uses this flag to manage a per-host cache integrated with the routing
212 table, for those destinations which do not have a link layer
213 performing this function.)
215 Indicates that this route was generated as a result of cloning
222 field indicates the route from which this one was generated.
224 (Reserved for future use to indicate routes which are not to be
225 modified by a routing protocol.)
227 Indicates that the destination of this route is an address configured
228 as belonging to this system.
230 Indicates that the destination is a broadcast address.
232 Indicates that the destination is a multicast address.
235 Every route has associated with it a set of metrics, defined by
236 .Li struct rt_metrics :
237 .Bl -tag -offset indent -width 6n
239 .Vt "u_long rmx_locks" ;
241 Flag bits indicating which metrics the kernel is not permitted to
244 .Vt "u_long rmx_mtu" ;
248 .Vt "u_long rmx_hopcount" ;
250 Number of intermediate systems on the path to this destination.
252 .Vt "u_long rmx_expire" ;
257 at which this route should expire, or zero if it should never expire.
258 It is the responsibility of individual protocol suites to ensure that routes
259 are actually deleted once they expire.
261 .Vt "u_long rmx_recvpipe" ;
263 Nominally, the bandwidth-delay product for the path
267 this system. In practice, this value is used to set the size of the
268 receive buffer (and thus the window in sliding-window protocols like
271 .Vt "u_long rmx_sendpipe" ;
273 As before, but in the opposite direction.
275 .Vt "u_long rmx_ssthresh" ;
277 The slow-start threshold used in
279 congestion-avoidance.
281 .Vt "u_long rmx_rtt" ;
283 The round-trip time to this destination, in units of
287 .Vt "u_long rmx_rttvar" ;
289 The average deviation of the round-type time to this destination, in
294 .Vt "u_long rmx_pksent" ;
296 A count of packets successfully sent via this route.
298 .Vt "u_long rmx_filler[4]" ;
301 Empty space available for protocol-specific information.
310 structure first appeared in
312 The radix-tree representation of the routing table and the
314 structure first appeared in
318 mechanism first appeared in
321 There are a number of historical relics remaining in this interface.
326 fields could be named better.
328 There is some disagreement over whether it is legitimate for
330 to be set by any process other than
331 .Fn rt_ifa->ifa_rtrequest .
333 This manual page was written by
334 .An Garrett Wollman .