rtalloc(9)
NAME
- rtalloc, rtalloc_ign, rtalloc1, rtfree - look up a route in
- the kernel
routing table
SYNOPSIS
#include <sys/types.h>
#include <sys/socket.h>
#include <net/route.h>
void
rtalloc(struct route *ro);
void
rtalloc_ign(struct route *ro, u_long flags);
struct rtentry *
rtalloc1(struct sockaddr *sa, int report, u_long flags);
void
rtfree(struct rt_entry *rt);
RTFREE(struct rt_entry *rt);
RT_LOCK(struct rt_entry *rt);
RT_UNLOCK(struct rt_entry *rt);
RT_ADDREF(struct rt_entry *rt);
RT_REMREF(struct rt_entry *rt);
DESCRIPTION
- The kernel uses a radix tree structure to manage routes for
- the networking subsystem. The rtalloc() family of routines is used by
- protocols to
query this structure for a route corresponding to a particu
- lar end-node
address, and to cause certain protocol- and interface-spe
- cific actions to
take place.
- When a route with the flag RTF_CLONING is retrieved, and the
- action of
this flag is not masked, the rtalloc facility automatically
- generates a
new route using information in the old route as a template,
- and sends an
RTM_RESOLVE message to the appropriate interface-address
- route-management
routine (ifa->ifa_rtrequest()). This generated route is
- called cloned,
and has RTF_WASCLONED flag set. RTF_PRCLONING flag is obso
- lete and thus
ignored by facility. If the RTF_XRESOLVE flag is set, then
- the
RTM_RESOLVE message is sent instead on the route(4) socket
- interface,
requesting that an external program resolve the address in
- question and
modify the route appropriately.
- The default interface is rtalloc(). Its only argument is
- ro, a pointer
to a ``struct route'', which is defined as follows:
struct route {
struct sockaddr ro_dst;
struct rtentry *ro_rt;
- };
- Thus, this function can only be used for address families
- which are
smaller than the default ``struct sockaddr''. Before call
- ing rtalloc()
for the first time, callers should ensure that unused bits
- of the structure are set to zero. On subsequent calls, rtalloc() re
- turns without
performing a lookup if ro->ro_rt is non-null and the RTF_UP
- flag is set
in the route's rt_flags field.
- The rtalloc_ign() interface can be used when the default ac
- tions of
rtalloc() in the presence of the RTF_CLONING flag is unde
- sired. The ro
argument is the same as rtalloc(), but there is additionally
- a flags
argument, which lists the flags in the route which are to be
- ignored (in
most cases this is RTF_CLONING flag). Both rtalloc() and
- rtalloc_ign()
functions return a pointer to an unlocked struct rtentry.
- The rtalloc1() function is the most general form of
- rtalloc() (and both
of the other forms are implemented as calls to rtalloc1).
- It does not
use the ``struct route'', and is therefore suitable for ad
- dress families
which require more space than is in a traditional ``struct
- sockaddr''.
Instead, it takes a ``struct sockaddr *'' directly as the sa
- argument.
The second argument, report, controls whether RTM_RESOLVE
- requests are
sent to the lower layers when an RTF_CLONING or
- RTF_PRCLONING route is
cloned. Ordinarily a value of one should be passed, except
- in the processing of those lower layers which use the cloning facili
- ty. The third
argument, flags, is a set of flags to ignore, as in
- rtalloc_ign(). The
rtalloc1() function returns a pointer to a locked struct
- rtentry.
- The rtfree() function frees a locked route entry, e.g., a
- previously
allocated by rtalloc1().
- The RTFREE() macro is used to free unlocked route entries,
- previously
allocated by rtalloc() or rtalloc_ign(). The RTFREE() macro
- decrements
the reference count on the routing table entry (see below),
- and frees it
if the reference count has reached zero.
- The preferred usage is allocating a route using rtalloc() or
rtalloc_ign() and freeing using RTFREE().
- The RT_LOCK() macro is used to lock a routing table entry.
- The
RT_UNLOCK() macro is used to unlock a routing table entry.
- The RT_ADDREF() macro increments the reference count on a
- previously
locked route entry. The RT_REMREF() macro decrements the
- reference count
on a previously locked route entry.
RETURN VALUES
- The rtalloc(), rtalloc_ign() and rtfree() functions do not
- return a
value. The rtalloc1() function returns a pointer to a rout
- ing-table
entry if it succeeds, otherwise a null pointer. Lack of a
- route should
in most cases be translated to the errno(2) value EHOSTUN
- REACH.
SEE ALSO
route(4), rtentry(9)
HISTORY
- The rtalloc facility first appeared in 4.2BSD, although with
- much different internals. The rtalloc_ign() function and the flags ar
- gument to
rtalloc1() first appeared in FreeBSD 2.0. Routing table
- locking was
introduced in FreeBSD 5.2.
AUTHORS
- This manual page was written by Garrett Wollman, as were the
- changes to
implement RTF_PRCLONING and the rtalloc_ign() function and
- the flags
argument to rtalloc1().
- BSD October 11, 2004