Annotation of 43BSDReno/share/doc/smm/15.net/a.t, revision 1.1.1.1

1.1       root        1: .\" Copyright (c) 1983, 1986 The Regents of the University of California.
                      2: .\" All rights reserved.
                      3: .\"
                      4: .\" Redistribution and use in source and binary forms are permitted
                      5: .\" provided that the above copyright notice and this paragraph are
                      6: .\" duplicated in all such forms and that any documentation,
                      7: .\" advertising materials, and other materials related to such
                      8: .\" distribution and use acknowledge that the software was developed
                      9: .\" by the University of California, Berkeley.  The name of the
                     10: .\" University may not be used to endorse or promote products derived
                     11: .\" from this software without specific prior written permission.
                     12: .\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
                     13: .\" IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
                     14: .\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
                     15: .\"
                     16: .\"    @(#)a.t 6.4 (Berkeley) 3/7/89
                     17: .\"
                     18: .nr H2 1
                     19: .\".ds RH "Gateways and routing
                     20: .br
                     21: .ne 2i
                     22: .NH
                     23: \s+2Gateways and routing issues\s0
                     24: .PP
                     25: The system has been designed with the expectation that it will
                     26: be used in an internetwork environment.  The ``canonical''
                     27: environment was envisioned to be a collection of local area
                     28: networks connected at one or more points through hosts with
                     29: multiple network interfaces (one on each local area network),
                     30: and possibly a connection to a long haul network (for example,
                     31: the ARPANET).  In such an environment, issues of
                     32: gatewaying and packet routing become very important.  Certain
                     33: of these issues, such as congestion
                     34: control, have been handled in a simplistic manner or specifically
                     35: not addressed.
                     36: Instead, where possible, the network system
                     37: attempts to provide simple mechanisms upon which more involved
                     38: policies may be implemented.  As some of these problems become
                     39: better understood, the solutions developed will be incorporated
                     40: into the system.
                     41: .PP
                     42: This section will describe the facilities provided for packet
                     43: routing.  The simplistic mechanisms provided for congestion
                     44: control are described in chapter 12.
                     45: .NH 2
                     46: Routing tables
                     47: .PP
                     48: The network system maintains a set of routing tables for
                     49: selecting a network interface to use in delivering a 
                     50: packet to its destination.  These tables are of the form:
                     51: .DS
                     52: .ta \w'struct   'u +\w'u_long   'u +\w'sockaddr rt_gateway;    'u
                     53: struct rtentry {
                     54:        u_long  rt_hash;                /* hash key for lookups */
                     55:        struct  sockaddr rt_dst;        /* destination net or host */
                     56:        struct  sockaddr rt_gateway;    /* forwarding agent */
                     57:        short   rt_flags;               /* see below */
                     58:        short   rt_refcnt;              /* no. of references to structure */
                     59:        u_long  rt_use;                 /* packets sent using route */
                     60:        struct  ifnet *rt_ifp;          /* interface to give packet to */
                     61: };
                     62: .DE
                     63: .PP
                     64: The routing information is organized in two separate tables, one
                     65: for routes to a host and one for routes to a network.  The
                     66: distinction between hosts and networks is necessary so
                     67: that a single mechanism may be used
                     68: for both broadcast and multi-drop type networks, and
                     69: also for networks built from point-to-point links (e.g
                     70: DECnet [DEC80]).
                     71: .PP
                     72: Each table is organized as a hashed set of linked lists.
                     73: Two 32-bit hash values are calculated by routines defined for
                     74: each address family; one based on the destination being
                     75: a host, and one assuming the target is the network portion
                     76: of the address.  Each hash value is used to
                     77: locate a hash chain to search (by taking the value modulo the
                     78: hash table size) and the entire 32-bit value is then
                     79: used as a key in scanning the list of routes.  Lookups are
                     80: applied first to the routing
                     81: table for hosts, then to the routing table for networks.
                     82: If both lookups fail, a final lookup is made for a ``wildcard''
                     83: route (by convention, network 0).
                     84: The first appropriate route discovered is used.
                     85: By doing this, routes to a specific host on a network may be
                     86: present as well as routes to the network.  This also allows a
                     87: ``fall back'' network route to be defined to a ``smart'' gateway
                     88: which may then perform more intelligent routing.
                     89: .PP
                     90: Each routing table entry contains a destination (the desired final destination),
                     91: a gateway to which to send the packet,
                     92: and various flags which indicate the route's status and type (host or
                     93: network).  A count
                     94: of the number of packets sent using the route is kept, along
                     95: with a count of ``held references'' to the dynamically
                     96: allocated structure to insure that memory reclamation
                     97: occurs only when the route is not in use.  Finally, a pointer to the
                     98: a network interface is kept; packets sent using
                     99: the route should be handed to this interface.
                    100: .PP
                    101: Routes are typed in two ways: either as host or network, and as
                    102: ``direct'' or ``indirect''.  The host/network
                    103: distinction determines how to compare the \fIrt_dst\fP field
                    104: during lookup.  If the route is to a network, only a packet's
                    105: destination network is compared to the \fIrt_dst\fP entry stored
                    106: in the table.  If the route is to a host, the addresses must
                    107: match bit for bit.
                    108: .PP
                    109: The distinction between ``direct'' and ``indirect'' routes indicates
                    110: whether the destination is directly connected to the source.
                    111: This is needed when performing local network encapsulation.  If
                    112: a packet is destined for a peer at a host or network which is
                    113: not directly connected to the source, the internetwork packet
                    114: header will
                    115: contain the address of the eventual destination, while
                    116: the local network header will address the intervening
                    117: gateway.  Should the destination be directly connected, these addresses
                    118: are likely to be identical, or a mapping between the two exists.
                    119: The RTF_GATEWAY flag indicates that the route is to an ``indirect''
                    120: gateway agent, and that the local network header should be filled in
                    121: from the \fIrt_gateway\fP field instead of
                    122: from the final internetwork destination address.
                    123: .PP
                    124: It is assumed that multiple routes to the same destination will not
                    125: be present; only one of multiple routes, that most recently installed,
                    126: will be used.
                    127: .PP
                    128: Routing redirect control messages are used to dynamically
                    129: modify existing routing table entries as well as dynamically
                    130: create new routing table entries.  On hosts where exhaustive
                    131: routing information is too expensive to maintain (e.g. work
                    132: stations), the
                    133: combination of wildcard routing entries and routing redirect
                    134: messages can be used to provide a simple routing management
                    135: scheme without the use of a higher level policy process. 
                    136: Current connections may be rerouted after notification of the protocols
                    137: by means of their \fIpr_ctlinput\fP entries.
                    138: Statistics are kept by the routing table routines
                    139: on the use of routing redirect messages and their
                    140: affect on the routing tables.  These statistics may be viewed using
                    141: .IR netstat (1).
                    142: .PP
                    143: Status information other than routing redirect control messages
                    144: may be used in the future, but at present they are ignored.
                    145: Likewise, more intelligent ``metrics'' may be used to describe
                    146: routes in the future, possibly based on bandwidth and monetary
                    147: costs.
                    148: .NH 2
                    149: Routing table interface
                    150: .PP
                    151: A protocol accesses the routing tables through
                    152: three routines,
                    153: one to allocate a route, one to free a route, and one
                    154: to process a routing redirect control message.
                    155: The routine \fIrtalloc\fP performs route allocation; it is
                    156: called with a pointer to the following structure containing
                    157: the desired destination:
                    158: .DS
                    159: ._f
                    160: struct route {
                    161:        struct  rtentry *ro_rt;
                    162:        struct  sockaddr ro_dst;
                    163: };
                    164: .DE
                    165: The route returned is assumed ``held'' by the caller until
                    166: released with an \fIrtfree\fP call.  Protocols which implement
                    167: virtual circuits, such as TCP, hold onto routes for the duration
                    168: of the circuit's lifetime, while connection-less protocols,
                    169: such as UDP, allocate and free routes whenever their destination address
                    170: changes.
                    171: .PP
                    172: The routine \fIrtredirect\fP is called to process a routing redirect
                    173: control message.  It is called with a destination address,
                    174: the new gateway to that destination, and the source of the redirect.
                    175: Redirects are accepted only from the current router for the destination.
                    176: If a non-wildcard route
                    177: exists to the destination, the gateway entry in the route is modified 
                    178: to point at the new gateway supplied.  Otherwise, a new routing
                    179: table entry is inserted reflecting the information supplied.  Routes
                    180: to interfaces and routes to gateways which are not directly accessible
                    181: from the host are ignored.
                    182: .NH 2
                    183: User level routing policies
                    184: .PP
                    185: Routing policies implemented in user processes manipulate the
                    186: kernel routing tables through two \fIioctl\fP calls.  The
                    187: commands SIOCADDRT and SIOCDELRT add and delete routing entries,
                    188: respectively; the tables are read through the /dev/kmem device.
                    189: The decision to place policy decisions in a user process implies
                    190: that routing table updates may lag a bit behind the identification of
                    191: new routes, or the failure of existing routes, but this period
                    192: of instability is normally very small with proper implementation
                    193: of the routing process.  Advisory information, such as ICMP
                    194: error messages and IMP diagnostic messages, may be read from
                    195: raw sockets (described in the next section).
                    196: .PP
                    197: Several routing policy processes have already been implemented.  The
                    198: system standard
                    199: ``routing daemon'' uses a variant of the Xerox NS Routing Information
                    200: Protocol [Xerox82] to maintain up-to-date routing tables in our local
                    201: environment.  Interaction with other existing routing protocols,
                    202: such as the Internet EGP (Exterior Gateway Protocol), has been
                    203: accomplished using a similar process.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.