home *** CD-ROM | disk | FTP | other *** search
/ ProfitPress Mega CDROM2 …eeware (MSDOS)(1992)(Eng) / ProfitPress-MegaCDROM2.B6I / MISC / NETWORK / KA9QBGN.ZIP / RSPF.TXT < prev    next >
Encoding:
Text File  |  1991-02-26  |  60.4 KB  |  1,175 lines

  1.                 Fred Goldstein   k1io
  2.  
  3.                 goldstein@carafe.enet.dec.com
  4.  
  5.                 Version 2.1  2-oct-1989
  6.  
  7.  
  8.  
  9.      The Radio Shortest Path First (RSPF) Routing Protocol 
  10.  
  11.       For DDN Internet Protocol over Amateur Packet Radio 
  12.  
  13.  
  14.  
  15.         ** DRAFT ARCHITECTURE -- FOR COMMENT **
  16.  
  17.                 ** changes in V2.1 are noted by "**" and
  18.  
  19.                    should be edited out before final release**
  20.  
  21.  
  22.  
  23. CONTENTS
  24.  
  25.  
  26.  
  27. I.   Introduction and Version Notes
  28.  
  29. II.  Acquisition of router-router adjacencies
  30.  
  31. III. Acquisition of end node adjacencies
  32.  
  33. IV.  Link state propagation
  34.  
  35. V.   The Shortest Path First Spanning Tree 
  36.  
  37. Appendix:  Router Parameters
  38.  
  39.  
  40.  
  41.  
  42.  
  43. I.  Introduction
  44.  
  45.  
  46.  
  47. Amateur packet radio use of the Internet Protocol does not yet provide 
  48.  
  49. all of the capabilities of other IP networks.  One particular example
  50.  
  51. of this is IP packet routing.  Most existing versions of the AMPR IP code
  52.  
  53. make use of a static routing table.  This requires human intervention
  54.  
  55. every time a new backbone path is added, and adds geographic constraints
  56.  
  57. to address assignment which do not exist on the ARPA Internet. Some
  58.  
  59. implementations make use of automatic routing protocols (interior
  60.  
  61. gateway protocols, or IGPs) using distance vector routing.  These IGPs
  62.  
  63. were originally written for wireline networks and tend to scale poorly
  64.  
  65. to the amateur packet radio environment.
  66.  
  67.  
  68.  
  69. Many IP and other networks have implemented link state routing based upon
  70.  
  71. Dijkstra's "SPF" (shortest path first) spanning tree algorithm.  A
  72.  
  73. wireline implementation of SPF for IP is being standardized as the
  74.  
  75. Open SPF Interior Gateway Protocol (OSPF), and an SPF procedure is
  76.  
  77. being considered by ISO as the standard "IS-IS" routing protocol for
  78.  
  79. OSI connectionless networks.  A similar (and derivative) procedure can
  80.  
  81. be applied to AMPRnet (Net 44).  It is called Radio Shortest Packet
  82.  
  83. First (RSPF); this document outlines the RSPF protocol.
  84.  
  85.  
  86.  
  87. RSPF occupies the role traditionally referred to in TCP/IP networks as
  88.  
  89. an "Interior Gateway Protocol" (IGP), where "Gateway" means "router".
  90.  
  91. It makes use of the services of the Internet Protocol.  It is not
  92.  
  93. inconceivable that a router could use both RSPF and another IGP, or
  94.  
  95. communicate with another network using the Exterior Gateway Protocol
  96.  
  97. (EGP).  However these are not described in this document.
  98.  
  99.  
  100.  
  101. RSPF is intended to be implemented on routers, and need not be
  102.  
  103. implemented on end nodes for the end nodes to take advantage of
  104.  
  105. routing services.  Any IP station may be an end node giving no further
  106.  
  107. consideration to routing.
  108.  
  109.  
  110.  
  111.  
  112.  
  113. I.1. Elements of RSPF
  114.  
  115.  
  116.  
  117. The RSPF protocol is designed for use by internet-layer routing nodes (IP 
  118.  
  119. Gateways) in a packet radio network using the DDN Internet Protocol.
  120.  
  121. It is comprised of four major functions:
  122.  
  123.  
  124.  
  125.     1) Acquisition of router-router adjacencies
  126.  
  127.     2) Acquisition of end node adjacencies
  128.  
  129.     3) Link state propogation
  130.  
  131.     4) Spanning tree route decision making.
  132.  
  133.  
  134.  
  135. Its net result is the automatic maintenance of a least-cost routing 
  136.  
  137. table for use by IP Routing.  RSPF is optimized for the geographically
  138.  
  139. heirarchical addressing used in AMPRnet, but does not depend upon it. 
  140.  
  141.  
  142.  
  143. RSPF is simpler than OSPF and IS-IS, as it is designed for PC
  144.  
  145. implementation within the Amateur Radio Service.  It also adds
  146.  
  147. procedures to take advantage of packet radio's "semi-broadcast"
  148.  
  149. nature.
  150.  
  151.  
  152.  
  153.  
  154.  
  155. I.2. Addressing convention
  156.  
  157.  
  158.  
  159. When an RSPF router communicates with an end node, it will typically
  160.  
  161. deal with a 32 bit IP address.  Routers themselves, however, also
  162.  
  163. support node group addressing (fewer than 32 bits need match).  This
  164.  
  165. follows the convention in the KA9Q IP routing program, which permits a
  166.  
  167. crude form of heirarchical addressing as well as allowing portable
  168.  
  169. operations to override the defaults.  RSPF looks for the match (node or
  170.  
  171. node group) with the greatest number of matching bits.  Only if the
  172.  
  173. number of bits matched is equal, then the lower cost path will be used.
  174.  
  175.  
  176.  
  177. Thus a match to a full node address will override a "cheaper" path that
  178.  
  179. matches its "class C net" of 24 bits, which overrides a "class B net",
  180.  
  181. etc., noting that AMPRnet does not follow strict 8-bit address
  182.  
  183. classification, and is a single Class A net.  In every case, a greater
  184.  
  185. number of bits matched is considered a superior path to a destination
  186.  
  187. than one that matches fewer bits, regardless of the value of the routing
  188.  
  189. metric ("cost").
  190.  
  191.  
  192.  
  193.  
  194.  
  195. I.3. Connection-oriented vs. connectionless lower layers
  196.  
  197.  
  198.  
  199. IP is a datagram network protocol, and supports both connection-
  200.  
  201. oriented and connectionless lower layers (subnets).  In a network with
  202.  
  203. a high packet loss rate, the local retransmission provided by a
  204.  
  205. connection-oriented datalink will substantially improve overall
  206.  
  207. throughput.  However, in a high-speed dedicated backbone, particularly
  208.  
  209. one implemented using full-duplex radio or wireline links,
  210.  
  211. connectionless links may provide better overall performance.  The
  212.  
  213. choice of which to use is a local matter; RSPF will work with both.
  214.  
  215. The reliability of the routing information, however, may be somewhat
  216.  
  217. greater with connection-oriented datalink procedures, since these will
  218.  
  219. give more rapid indication of a physical link failure.
  220.  
  221.  
  222.  
  223.  
  224.  
  225. I.4. Relationship to other protocols
  226.  
  227.  
  228.  
  229. The reliability of the network depends upon reasonably reliable
  230.  
  231. transmission of the routing update; hence, for non-broadcast procedures,
  232.  
  233. connected-mode AX.25, or another reliable data link layer.  (In any case
  234.  
  235. connected-AX.25 may be more useful than connectionless for backbone 
  236.  
  237. links due to its local error correction ability.)  
  238.  
  239.  
  240.  
  241. **CHECK THIS OUT FOR VALIDITY WITH ANDERS**
  242.  
  243. All packets specific to RSPF shall be exchanged inside IP packets using
  244.  
  245. a protocol identifier which, pending formal assignment of one, shall
  246.  
  247. be 73.  (How is this formally assigned?)  Such IP packets shall be
  248.  
  249. sent with a time to live (TTL) value of 1.  If broadcast procedures
  250.  
  251. are used, connectionless AX.25 UI frames shall be sent, with a
  252.  
  253. multicast address "QST-0" in the AX.25 address and an IP address of
  254.  
  255. 44.255.255.255. (A router can also "read the mail" on passing radio 
  256.  
  257. packets not addressed to it; such procedures are for further study.) 
  258.  
  259.  
  260.  
  261. Note that in this document, "subnetwork" and "data link" are synonymous, 
  262.  
  263. and refer to the layer over which IP packets are exchanged.
  264.  
  265.  
  266.  
  267.  
  268.  
  269. I.5.  Version 2.1 changes.
  270.  
  271.  
  272.  
  273. RSPF draft 2.0 was released in June, 1988, as the first nearly-
  274.  
  275. implementable version.  It was first implemented in September, 1989 by
  276.  
  277. Anders Klemets.  This version 2.1 reflects changes whose need was
  278.  
  279. discovered during this implementation.  These changes are both
  280.  
  281. editorial and, in a few cases, substantive.
  282.  
  283.  
  284.  
  285. The format of the Routing Update packet has been slightly modified.
  286.  
  287. In order to prevent fragments of two or more different routing update
  288.  
  289. messages from being erroneously merged, an Envelope ID is added to
  290.  
  291. each such packet, with the same Envelope ID on all fragments of a
  292.  
  293. multi-packet message.  The term for such a message is now "envelope";
  294.  
  295. it contains one or more "bulletins", each of which originated from a
  296.  
  297. single router.
  298.  
  299.  
  300.  
  301. There are no longer separate packet types for Full Routing Update and
  302.  
  303. Partial Routing Update.  Instead, they are distinguished by the value
  304.  
  305. of the subsequence number, which is always 0 for Full Routing Updates
  306.  
  307. and is never 0 for Partial Routing Updates.  A given envelope may
  308.  
  309. contain both types of bulletin.
  310.  
  311.  
  312.  
  313. Cost is now set on the basis of receiver instead of transmitter.  This
  314.  
  315. permits the automatic link quality adjustment to operate on the basis
  316.  
  317. of locally-received traffic.
  318.  
  319.  
  320.  
  321. The remaining horizon is stored in the links table.  This is needed
  322.  
  323. for consistency within the specification and was erroneously left out
  324.  
  325. of 2.0.
  326.  
  327.  
  328.  
  329. It is now explicitly stated that upon creation of a new router-router
  330.  
  331. adjacency, the routers exchage full routing information.  This allows
  332.  
  333. routers to initialize themselves with a reasonably complete map of the
  334.  
  335. network.
  336.  
  337.  
  338.  
  339.  
  340.  
  341. II.  Acquisition of router-router adjacencies
  342.  
  343.  
  344.  
  345. For RSPF to operate correctly, all routers must remain reasonably 
  346.  
  347. current as to the state of the network at large.  This is handled by
  348.  
  349. the propagation of "bulletin" messages among routers.  End nodes need
  350.  
  351. not concern themselves with this; they will normally communicate
  352.  
  353. through one "designated" router at any given time, for all
  354.  
  355. (non-adjacent) destinations (not seen by ARP or other lower-layer 
  356.  
  357. procedures).  End nodes can also, of course, connect to each other
  358.  
  359. directly, bypassing RSPF.
  360.  
  361.  
  362.  
  363. Each router maintains an adjacencies table.  Each router's adjacency
  364.  
  365. table lists the following information for all other nodes, both
  366.  
  367. routers and end nodes, from which it directly receives packets over a
  368.  
  369. subnetwork:
  370.  
  371.  
  372.  
  373.     Adjacent node IP address (i.e., 44.56.0.44)
  374.  
  375.     Adjacent node datalink (AX.25) address (i.e., K1IO-0)
  376.  
  377.     Datalink used (i.e., AX0)
  378.  
  379.     Datalink cost (i.e., 4)
  380.  
  381.     Number of packets heard since last RRH update (i.e., 50)
  382.  
  383.     Packet sequence number in last RRH update (i.e., 12593)
  384.  
  385.     Time of last RRH update (i.e., 2130).
  386.  
  387.  
  388.  
  389.  
  390.  
  391. II.1.  Router-router hello
  392.  
  393.  
  394.  
  395. For the backbone to create its topology automatically, there must be a
  396.  
  397. way for routers to discover each other with minimal overhead.  For
  398.  
  399. this purpose, a router-router hello (RRH) message is provided.
  400.  
  401. Periodically (as an initial suggestion, shortly before beginning to
  402.  
  403. propogate the periodic links state bulletin to known adjacencies), the
  404.  
  405. router sends out the RRH message to the layer 2 multicast address and IP
  406.  
  407. multicast address.  RSPF makes no assumption of reciprocity (that
  408.  
  409. links are bidirectional), so receipt of an RRH packet provides the
  410.  
  411. receiver with information about a one-way (received) adjacency. 
  412.  
  413.  
  414.  
  415.  
  416.  
  417. II.2.  Connection-oriented procedure
  418.  
  419.  
  420.  
  421. If a router uses connection-oriented subnet procedures to its own 
  422.  
  423. adjacencies, then when a router receives this RRH packet, it checks to
  424.  
  425. see if it already has a link to that packet's originator in its own
  426.  
  427. links table.  If not, it waits a random period of time (initial
  428.  
  429. suggestion:  within the range of 0 to 10 times the link's value of T1,
  430.  
  431. DWAIT or SLOTTIME, and in any case much longer than the timers used
  432.  
  433. within a CSMA or Aloha subnet such as AX.25) and then attempts to
  434.  
  435. establish an AX.25 connection with the usual SABM; the router responds
  436.  
  437. with the usual UA (link established) or DM (link rejected). 
  438.  
  439.  
  440.  
  441. If a two-way connection has been established, then both routers add the 
  442.  
  443. link to their adjacency tables.  While the existence of this route is
  444.  
  445. set reciprocally, the cost of each side of the route is set separately
  446.  
  447. for each side of the connection.  Cost is propagated in the routing
  448.  
  449. update (link state) packet.  Thus the adjacency between two routers is
  450.  
  451. not actually used for real traffic until the first routing update
  452.  
  453. packet exchange has taken place.
  454.  
  455.  
  456.  
  457. Loss of an adjacency may then be noted by the loss of the subnet
  458.  
  459. connection.  When this occurs, the router removes the adjacency from
  460.  
  461. its adjacency table and follows the "bad news" procedures outlined
  462.  
  463. below for link state propagation.
  464.  
  465.  
  466.  
  467.  
  468.  
  469. II.3.  Connectionless procedure
  470.  
  471.  
  472.  
  473. If a router uses connectionless datalink procedures to its own 
  474.  
  475. adjacencies (suitable to low-loss links), then when a router receives an 
  476.  
  477. RRH packet, it checks to see if this adjacency is already in its 
  478.  
  479. adjacency table.  If not, then it is added.  It also sends RRH packets
  480.  
  481. with the same frequency as with connection-oriented subnets.
  482.  
  483.  
  484.  
  485. Loss of an adjacency may be noted by timeout; if no RRH message is 
  486.  
  487. received, and no frames have been received from the adjacent router for 
  488.  
  489. a period of time (initial suggestion:  slightly over twice the maximum 
  490.  
  491. interval between RRH messages), then the adjacency becomes suspect.
  492.  
  493. The router should attempt (**a settable number of times**) to exchange a
  494.  
  495. packet (ICMP echo) with the suspect adjacency; if unsuccessful (after
  496.  
  497. the usual number of retries), the route is marked lost.  It may also
  498.  
  499. be marked lost if other attempts to send data through that router
  500.  
  501. fail, such that the implementation determines that there is a high
  502.  
  503. probability that the link is lost.  
  504.  
  505.  
  506.  
  507.  
  508.  
  509. Table II-1.  Coding of the RRH PDU.
  510.  
  511.  
  512.  
  513.                   1           2
  514.  
  515.  |0              |8              |6              |4              |
  516.  
  517.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
  518.  
  519.  | RSPF Version #| Type (RRH)    | Checksum                      |
  520.  
  521.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
  522.  
  523.  |         Full IP Address of sending router                     |
  524.  
  525.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
  526.  
  527.  |  last packet sent seq. #      |  flags        |
  528.  
  529.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  530.  
  531.  |        plaintext                                              |...
  532.  
  533.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  534.  
  535.  
  536.  
  537.  
  538.  
  539. Parameters--
  540.  
  541.  
  542.  
  543.   An RSPF Router-Router Hello packet is sent within IP with a type
  544.  
  545.   of <tbd-- 73 suggested>.  Each RRH packet contains the following
  546.  
  547.   fields:
  548.  
  549.  
  550.  
  551.     RSPF Version Number:  Version number of this protocol (initially 1).
  552.  
  553.  
  554.  
  555.     Type:  Value of 3 for RRH.
  556.  
  557.  
  558.  
  559.     Checksum:  IP-style checksum
  560.  
  561.  
  562.  
  563.     Address:  Full IP address of sending router
  564.  
  565.  
  566.  
  567.     Last packet sent sequence number:  An integer (mod 65535) 
  568.  
  569.     incremented by 1 for every frame sent by the datalink layer across 
  570.  
  571.     this interface.  This value allows receiving entities using 
  572.  
  573.     connectionless procedures to use the automatic link quality 
  574.  
  575.     measurement technique described in II.4. 
  576.  
  577.     
  578.  
  579.     Flags:  The low-order bit is 1 if connectionless datalink is
  580.  
  581.     preferred; 0 if connection-oriented is preferred.  (Set by
  582.  
  583.     system management based upon anticipated link quality.)
  584.  
  585.     Other bits are reserved (sent 0).
  586.  
  587.  
  588.  
  589.     Plaintext:  An optional text message (length may be up to maximum
  590.  
  591.     size remaining in datalink PDU).  This might serve, for example,
  592.  
  593.     to "broadcast" the router's existence to persons who might be
  594.  
  595.     "reading the mail" (monitoring a radio channel promiscuously).
  596.  
  597.  
  598.  
  599.  
  600.  
  601. II.4.  Automatic link quality measurement
  602.  
  603.  
  604.  
  605. A connectionless link or subnetwork may have very reliable, or very
  606.  
  607. sporadic, performance.  Since there is no procedure for ensuring the
  608.  
  609. reliability of packets sent over a connectionless link, a high rate of 
  610.  
  611. packet loss may occur without being detected by the routers.  If this 
  612.  
  613. loss is high enough, another route may become a better choice; a high 
  614.  
  615. enough packet loss rate may be enough to mark a link as "down".  The
  616.  
  617. automatic link quality measurement procedure allows links which are
  618.  
  619. not yet "down", but whose performance is substandard, to be noted.
  620.  
  621.  
  622.  
  623. Every router shall maintain, for each link, a count of all packets
  624.  
  625. sent over each link.  Every time an RRH message is sent, it includes
  626.  
  627. the current value of this counter (modulo 65536).  Every router also
  628.  
  629. maintains, in its adjacency table, a count of the total number of
  630.  
  631. packets received from said adjacency since the last RRH message, and
  632.  
  633. the value of that counter as received in the last RRH message.
  634.  
  635.  
  636.  
  637. Upon receipt of an RRH message, the recipient router compares the value 
  638.  
  639. of the received packet counter with the last received value in the 
  640.  
  641. adjacency table.  The difference (taking into account wrap-around at the 
  642.  
  643. modulus) is compared with the number of packets received since the last 
  644.  
  645. RRH message.  (This works even if an RRH message is lost.)  This packet 
  646.  
  647. loss ratio is then maintained as a guideline to determine link quality.  
  648.  
  649. If link quality falls below a settable threshhold, the link is
  650.  
  651. suspect.  Timestamp can also be used to compute packet arrival rate.
  652.  
  653.  
  654.  
  655. Connection-oriented data links presumably deliver 100% of attempted 
  656.  
  657. packets.  A high-quality connectionless link, such as Ethernet/LLC1, will 
  658.  
  659. come close to this.  However, single-frequency packet radio links are 
  660.  
  661. prone to packet loss for several reasons, including hidden transmitters, 
  662.  
  663. lack of collision detection, and rf interference.  The packet loss ratio
  664.  
  665. is useful in setting link cost, and may also be used to determine
  666.  
  667. whether a link should use connectionless or connection-oriented 
  668.  
  669. procedures.
  670.  
  671.  
  672.  
  673. If a router reports, in its link update packets, that a given link has a 
  674.  
  675. cost of _n_, then its adjacencies (and only its adjacencies) may apply 
  676.  
  677. the packet loss ratio to adjust the cost which they maintain in their 
  678.  
  679. link state tables.  These adjusted costs, rather than the received 
  680.  
  681. costs, may then be propagated to other routers.  
  682.  
  683.  
  684.  
  685. Such procedures should be applied sparingly, as each change must be
  686.  
  687. propagated and could, if used too frequently, result in network-wide
  688.  
  689. instability.  A suggested (experimental) algorithm is as follows:  A
  690.  
  691. percentage threshhold x is set, as is a cost-adjustment factor y.  If
  692.  
  693. fewer than x% of packets are received during a measurement interval,
  694.  
  695. the cost of that adjacency is multipled by y.  For example, if x is 80 and
  696.  
  697. y is 1.5, then an adjacency with a nominal assigned cost of 4 will be
  698.  
  699. up-costed to 6 if only 70% of packets are received, but will be
  700.  
  701. restored to 4 if 80% or more are received during the next measurement
  702.  
  703. interval.  The measurement interval is the time between RRH messages,
  704.  
  705. which precede routing update messages.
  706.  
  707.  
  708.  
  709.  
  710.  
  711. III. Acquisition of end node adjacencies
  712.  
  713.  
  714.  
  715. Three possible means of determining adjacencies to end nodes are the use
  716.  
  717. of connected-mode AX.25 links, the use of ARP, and the use of a 
  718.  
  719. "wiretap" algorithm (see RFC981).  Unless a connection mode Data Link
  720.  
  721. layer (with keepalive timers) is used, adjacent nodes may need to send
  722.  
  723. each other messages at regular intervals (ping) to ensure that the
  724.  
  725. link is still usable.  A procedure is outlined below for routers and
  726.  
  727. end nodes to acquire knowledge of each other. 
  728.  
  729.  
  730.  
  731. It is assumed that RSPF will not be activated in end nodes; this
  732.  
  733. permits them to use simple version of the IP software.  A node that
  734.  
  735. has RSPF support in its software but operates as an end node can also
  736.  
  737. use the router-router connection procedures and simply broadcast its
  738.  
  739. adjacency to the router in a one-entry bulletin with a horizon of one.
  740.  
  741. Such a node may also be simultaneously homed on two or more other
  742.  
  743. routers, unlike true end nodes whose traffic either bypasses RSPF
  744.  
  745. (using ARP) or arrives by way of its associated router.
  746.  
  747.  
  748.  
  749. There is no "redirect" function provided in RSPF.  Since radio does
  750.  
  751. not provide a true "broadcast" topology subnetwork, a router cannot
  752.  
  753. presume that if both end nodes can hear it, that both end nodes can
  754.  
  755. hear each other.
  756.  
  757.  
  758.  
  759. If an end node knows the IP address of the router which will connect
  760.  
  761. it to the network at large, it may establish a connected-mode AX.25
  762.  
  763. (or other subnet) connection to the router; the presence of this
  764.  
  765. connection indicates that the node is reachable from that router,
  766.  
  767. which then adds it to its links table and subsequent bulletins.  This
  768.  
  769. may, of course, require an ARP exchange in order to acquire the AX.25
  770.  
  771. (or other data link layer or subnet) address.  
  772.  
  773.  
  774.  
  775. Alternately, the end node can simply use ARP and use connectionless 
  776.  
  777. link procedures. In this case the router should assume that the end node
  778.  
  779. is available until either a rather lengthy timer expires, or the router
  780.  
  781. is unable to make an ARP contact after the ARP timer expires.  (A loss
  782.  
  783. of reachability should not be inferred from the ARP timeout.) 
  784.  
  785.  
  786.  
  787. Routers should periodically broadcast their availability (suggested 
  788.  
  789. interval:  every 15 minutes) with an AX.25 UI frame sent to QST-0 (the 
  790.  
  791. AX.25 broadcast address).  A human-readable "unproto" message may go 
  792.  
  793. here, allowing individual operators to recognize routers and connect
  794.  
  795. as appropriate.  (No specific PDU coding is provided, as the end
  796.  
  797. nodes do not use RSPF, and thus this is not really an RSPF packet.)
  798.  
  799.  
  800.  
  801. A router may also choose to use "Promiscuous ARP" to provide service to 
  802.  
  803. an end node which is attempting to connect with an IP address reachable 
  804.  
  805. by the router.  In such a case the router should wait an extra interval 
  806.  
  807. after receiving the ARP request because the desired destination may 
  808.  
  809. actually be directly reachable; ARP procedures may need to be modified
  810.  
  811. to provide this. 
  812.  
  813.  
  814.  
  815. Another potential approach is for routers to simply listen to AX.25 
  816.  
  817. traffic on the link and determine who is adjacent to whom.  This is the 
  818.  
  819. gist of the "wiretap" algorithm in RFC981, which also finds non-adjacent 
  820.  
  821. nodes by taking advantage of the source routing found in AX.25 frames.
  822.  
  823. Integration of wiretap into RSPF is for further study.
  824.  
  825.  
  826.  
  827.  
  828.  
  829.  
  830.  
  831. IV.  Link state propagation
  832.  
  833.  
  834.  
  835. Link state information is propagated between routers within bulletin
  836.  
  837. envelopes, which are sequences of packets containing partial or full
  838.  
  839. copies of the sending node's link state table.  Both point-to-point
  840.  
  841. and broadcast procedures are provided.
  842.  
  843.  
  844.  
  845. IV.1.  Optional multicast/broadcast
  846.  
  847.  
  848.  
  849. Packet radio is inherently a broadcast medium.  Packet radio networks, 
  850.  
  851. however, may be viewed as a collection of individual links which happen 
  852.  
  853. to use a broadcast physical medium.  It is also possible to exploit the
  854.  
  855. broadcast nature of the medium.  RSPF link state propagation procedures
  856.  
  857. allow but do not require such multicasting.  If the link uses
  858.  
  859. connectionless procedures for user data packet exchange, then broadcast
  860.  
  861. procedures should be used for link state packet exchange.  The converse
  862.  
  863. may not necessarily be true:  The threshhold of loss that militates
  864.  
  865. against connectionless transmission of user data may be more stringent
  866.  
  867. than that which call for non-broadcast transmission of link state
  868.  
  869. packets.  (Optimal parameters are for further study.) 
  870.  
  871.  
  872.  
  873.  
  874.  
  875. IV.2.  Routing update bulletins
  876.  
  877.  
  878.  
  879. Routing updates are passed along from router to router via routing
  880.  
  881. update bulletins, which are broadcast within routing update envelopes.
  882.  
  883. Bulletin propagation is designed to make it extremely likely that
  884.  
  885. every node within a given "horizon" receives every routing update
  886.  
  887. message sent out by a given node. 
  888.  
  889.  
  890.  
  891. Every router originates information about changes in its own adjacencies, 
  892.  
  893. as well as periodic retranmissions of its entire list of adjacencies.  
  894.  
  895. These bulletins are then propagated among other routers. The router whose
  896.  
  897. adjacency information is being broadcast is called the _reporting
  898.  
  899. router_; this may be some hops away from the routers which forward it to
  900.  
  901. their own adjacencies.  Each reporting router's bulletins (adjacency
  902.  
  903. updates) contain a sequence number (and in some cases, a subsequence
  904.  
  905. number).  These sequence and subsequence numbers are generated by the
  906.  
  907. reporting router and propagated; they are not changed when a bulletin
  908.  
  909. is relayed.  They are incrememted by 1 (modulo 65536) every time a new
  910.  
  911. one is generated. 
  912.  
  913.  
  914.  
  915. Bulletins may also carry change information incremental to previous
  916.  
  917. bulletins.  These carry the same sequence number as the full routing
  918.  
  919. update bulletin to which they are reporting incremental changes; each
  920.  
  921. such partial routing update bulletin has a subsequence number.  The
  922.  
  923. subsequence number is zero for a full routing update bulletin.
  924.  
  925.  
  926.  
  927. Every bulletin also has a horizon value, set by the reporting router,
  928.  
  929. associated with each of its constituent links.  (A given reporting
  930.  
  931. router may have more than one constituent link, if it is a multi-port
  932.  
  933. router.)  Every time a bulletin is propagated, each horizon value is
  934.  
  935. decremented by 1.  When it hits zero, the bulletin is not propagated
  936.  
  937. further.  Note that for horizon purposes, a bulletin's individual
  938.  
  939. constituent links may have separate horizons; when a link's horizon hits
  940.  
  941. zero, other links' adjacency information from the same reporting router 
  942.  
  943. may continue to be propogated.  
  944.  
  945.  
  946.  
  947. It should also be noted that if a given link has adjacencies with
  948.  
  949. different horizons, these must be treated as separate links, since
  950.  
  951. horizon is reported as a characteristic of link.  Such a circumstance
  952.  
  953. may occur, for example, when a router serves a node group.
  954.  
  955. Adjacencies within the node group are typically propagated with short
  956.  
  957. horizons, since they are only of local interest (i.e., to other nodes
  958.  
  959. in or near that node group).  Similarly, the node group itself is
  960.  
  961. propagated with a long horizon, across a backbone.  However,
  962.  
  963. adjacencies outside the node group may be propagated with long
  964.  
  965. horizons, as they would not otherwise be reached across a backbone
  966.  
  967. dependent upon node groups for long-haul routing.
  968.  
  969.  
  970.  
  971. Every router maintains within memory a routers table containing one
  972.  
  973. tuple for every other router on the network.  This tuple contains the
  974.  
  975. following elements:  
  976.  
  977.  
  978.  
  979.     IP Address 
  980.  
  981.     Last received bulletin sequence number 
  982.  
  983.     Last received bulletin subsequence number 
  984.  
  985.     Timestamp for when the data was received.  
  986.  
  987.     Horizon remaining in bulletin when received **NEW IN 2.1**
  988.  
  989.  
  990.  
  991. This table is used to coordinate the receipt and transmission of
  992.  
  993. bulletins, using either broadcast or non-broadcast procedures. 
  994.  
  995.  
  996.  
  997.  
  998.  
  999. IV.3.  Flooding without congestion 
  1000.  
  1001.  
  1002.  
  1003. Upon initialization of adjacencies
  1004.  
  1005.  
  1006.  
  1007. Bulletins are forwarded in a routing update envelope which may contain
  1008.  
  1009. one or more reporting routers' bulletins (adjacency lists), which are 
  1010.  
  1011. flooded to the network.  A bulletin envelope may actually concatenate
  1012.  
  1013. multiple reporting routers' bulletins; this is in fact the typical
  1014.  
  1015. case, when routing update packets are exchange on schedule, **and when a
  1016.  
  1017. given router acquires a new adjacency**.  However, partial routing
  1018.  
  1019. updates (good news and bad news) may be sent at any time.
  1020.  
  1021.  
  1022.  
  1023. The first time an adjacency is acquired, the two routers perform a
  1024.  
  1025. full routing update with each other, exchanging their complete link
  1026.  
  1027. lists.  Once this is complete, the routers perform the SPF algorithm
  1028.  
  1029. and compute new routing tables.
  1030.  
  1031.  
  1032.  
  1033. Preventing loops and retransmissions
  1034.  
  1035.  
  1036.  
  1037. A bulletin from reporting router X (which lists all of X's
  1038.  
  1039. adjacencies) is sent, initially by X, to every adjacent (to X) router
  1040.  
  1041. A.  This router A passes it along to all of its own adjacencies B,
  1042.  
  1043. etc..  This flooding is controlled such that no reporting router's
  1044.  
  1045. adjacency update is sent more than once between the same pair of
  1046.  
  1047. routers.  
  1048.  
  1049.  
  1050.  
  1051. After router A sends its bulletin envelope to B, the recipient router
  1052.  
  1053. B then looks at the sequence number of each reporting router X's
  1054.  
  1055. adjacency bulletin within that envelope, and for each reporting
  1056.  
  1057. router's bulletin, compares the sequence number of the just-received
  1058.  
  1059. adjacency bulletin with the highest sequence number previously
  1060.  
  1061. originated from X.  If the just-received bulletin is newer (higher
  1062.  
  1063. number), then it sends a positive acknowledgement to A, and joins in
  1064.  
  1065. the flooding to its own adjacencies.  The horizon is, of course,
  1066.  
  1067. decremented.  ** HOW IS IT POSITIVELY ACKED?  NEED WE? **
  1068.  
  1069.  
  1070.  
  1071. If the bulletin from X has the same number as was stored in B, B checks 
  1072.  
  1073. the horizon left in the received bulletin against the horizon left
  1074.  
  1075. when it previously received the bulletin.  In the event that the
  1076.  
  1077. latest bulletin received had a shorter (lower number) horizon left
  1078.  
  1079. than the earlier one, it simply acknowledges the (redundant) message.
  1080.  
  1081. But if the reporting router X's horizon left is greater for the new
  1082.  
  1083. copy of the bulletin, router B propagates it as if it were a new
  1084.  
  1085. bulletin. This way, if the bulletin happened to first arrive via a
  1086.  
  1087. roundabout path, it won't accidentally fail to reach the intended end
  1088.  
  1089. of its range. (Summary:  Newer or longer-horizon bulletins are both
  1090.  
  1091. passed along.  Same age or older (by sequence number) or same or lower
  1092.  
  1093. horizon will not be propagated.)
  1094.  
  1095.  
  1096.  
  1097. If any router B receives from router A a bulletin (from any reporting 
  1098.  
  1099. router X) that contains a lower sequence number than one that had 
  1100.  
  1101. previously arrived at B from said X, then it can be presumed that A
  1102.  
  1103. has "obsolete" information.  B replies by sending a bulletin to A with
  1104.  
  1105. the latest link state information for that node X.  As a corrolary, a
  1106.  
  1107. router may poll for information about a given reporting router by
  1108.  
  1109. sending a routing update bulletin for that reporting router with a
  1110.  
  1111. sequence number that is lower than the latest one it actually has
  1112.  
  1113. received.  Said bulletin may contain zero links' information.  (Note
  1114.  
  1115. that since the sequence number is modular, a value of 0 is not correct
  1116.  
  1117. for this function as 0 is higher than 65535; the "poll" number should
  1118.  
  1119. be only slightly lower.)
  1120.  
  1121.  
  1122.  
  1123.  
  1124.  
  1125. IV.4.  Non-broadcast bulletin envelope exchange
  1126.  
  1127.  
  1128.  
  1129. A router may acquire routing information from adjacent routers via 
  1130.  
  1131. point-to-point procedures which treat every adjacency as a separate 
  1132.  
  1133. logical data link.  (Such a procedure also works, of course, over 
  1134.  
  1135. point-to-point links such as wirelines.)  This tends to have the highest
  1136.  
  1137. reliability, since connection-oriented data link control procedures can
  1138.  
  1139. be used to ensure the accuracy and completeness of the data passed over
  1140.  
  1141. the link.  It has the disadvantage of requiring separate transmission of
  1142.  
  1143. the same data to different adjacent nodes on the same radio channel. 
  1144.  
  1145.  
  1146.  
  1147. Bulletin envelopes are thus exchanged (when connection-oriented is
  1148.  
  1149. selected) periodically (based upon timers) and when new information is
  1150.  
  1151. received (over a new adjacency, and when good and bad news arrive).
  1152.  
  1153. Delivery of these bulletins is considered to be gnerally reliable.
  1154.  
  1155.  
  1156.  
  1157.  
  1158.  
  1159. IV.5.  Broadcast bulletin propagation
  1160.  
  1161.  
  1162.  
  1163. When a router is adjacent to several other routers via the same 
  1164.  
  1165. broadcast (i.e., packet radio) channel, retransmission of routing
  1166.  
  1167. bulletins to each adjacency makes additional use of bandwidth, which may
  1168.  
  1169. be a scarce resource.  A broadcast procedure may be used to pass the
  1170.  
  1171. bulletin along that link.  Note that broadcast propagation of bulletins
  1172.  
  1173. may be combined with non-broadcast propagation, on a link by link basis.
  1174.  
  1175. Although packet radio is a broadcast medium, it is not a perfect one:
  1176.  
  1177. The reliability of multicast packets is not as high as for wireline LANs.
  1178.  
  1179. This leads to the need for a unique broadcast "flooding" technique.
  1180.  
  1181.  
  1182.  
  1183. A routing update bulletin is broadcast to the Layer 2 multicast AX.25
  1184.  
  1185. address using the IP multicast address.  Individual recipient routers
  1186.  
  1187. may or may not receive the entire bulletin, since there is no
  1188.  
  1189. acknowledgement provided. 
  1190.  
  1191.  
  1192.  
  1193. In the previously described case of a non-broadcast message sent via a
  1194.  
  1195. connection-oriented datalink, the entire routing update bulletin can
  1196.  
  1197. be assumed to have been received intact.  Thus, if a given reporting
  1198.  
  1199. router has originated a new complete list of its adjacencies (new
  1200.  
  1201. sequence numbers, subsequence numbers are 0), then any adjacency not
  1202.  
  1203. included is presumed to have ceased to exist.  Such a presumption is
  1204.  
  1205. not always possible when a bulletin was received via unacknowledged
  1206.  
  1207. broadcast, as the message might have been received in part.  This
  1208.  
  1209. should not make the partially received bulletin unusable. 
  1210.  
  1211.  
  1212.  
  1213. A bulletin envelope is transmitted in one or more packets, each of
  1214.  
  1215. which constitutes a numbered fragment of the whole bulletin envelope.
  1216.  
  1217. Within the transmitted bulletin envelope, each individual reporting
  1218.  
  1219. router's bulletin begins with a node-header which contains the number
  1220.  
  1221. of links being reported on.  Within each bulletin, each link is
  1222.  
  1223. identified by a link header, each of which specifies the number of
  1224.  
  1225. adjacencies being reported on (for that link).  Since each IP packet
  1226.  
  1227. that makes up a bulletin contains a fragment number, it is also
  1228.  
  1229. possible to determine whether or not a fragment was lost.  Each packet
  1230.  
  1231. also contains an envelope-ID, which prevents accidental mis-assembly
  1232.  
  1233. of different bulletins that may arrive close in time. **NEW IN 2.1**
  1234.  
  1235.  
  1236.  
  1237. In connection-oriented non-broadcast procedures, a routing update 
  1238.  
  1239. bulletin (not a partial one with a subsequence numbers >0) provides a 
  1240.  
  1241. complete list of adjacencies known to the sending node, except where the 
  1242.  
  1243. horizon is exceeded.  Absence of a previouly-known adjacency then 
  1244.  
  1245. implies that the adjacency has been lost.  However, that assumption does 
  1246.  
  1247. not apply to fragmented bulletins received in part, which can occur with 
  1248.  
  1249. broadcast procedures: If a fragment was lost before reaching the end of
  1250.  
  1251. a given reporting router's bulletin within the bulletin envelope, then
  1252.  
  1253. the absence of a previously-known adjacency in the received bulletin
  1254.  
  1255. does not mean that the adjacency was lost. 
  1256.  
  1257.  
  1258.  
  1259. RSPF procedures dictate that routing update bulletins with a subsequence 
  1260.  
  1261. number of zero are presumed to be complete lists of adjacencies from 
  1262.  
  1263. their originators; higher subsequence numbers represent incremental
  1264.  
  1265. changes only.  In the broadcast procedures, a routing update bulletin 
  1266.  
  1267. with a subsequence number of zero, if received only in part, is
  1268.  
  1269. treated as a partial routing update bulletin.  If it received in full,
  1270.  
  1271. it is treated as a full routing update bulletin.
  1272.  
  1273.  
  1274.  
  1275. Thus, the recipient compares the sequence number with the previously
  1276.  
  1277. received sequence number from that reporting router.  If it is higher
  1278.  
  1279. than the previously received one, then its adjacencies are used.  If
  1280.  
  1281. it was received in full, and had a subsequence number of 0, then its
  1282.  
  1283. previous adjacencies are replaced (removed if not contained in the
  1284.  
  1285. latest full routing update bulletin).  If it was not received in full,
  1286.  
  1287. or if its subsequence number was not zero, then its previous
  1288.  
  1289. adjacencies are left intact unless explicitly changed by the received
  1290.  
  1291. bulletin.
  1292.  
  1293.  
  1294.  
  1295. If a bulletin is received in full, then the routers table is updated 
  1296.  
  1297. with the latest sequence and/or subsequence number, horizon **NEW 2.1**
  1298.  
  1299. and timestamp.  If it is received in part, then these entries are not
  1300.  
  1301. updated.  After the bulletin has been completely transmitted, a
  1302.  
  1303. recipient node which has received a partial update from a reporting
  1304.  
  1305. node may poll for that node's latest information, by using the (now
  1306.  
  1307. known to be obsolete) sequence number for that router in its router
  1308.  
  1309. table in a bulletin, with zero links for that reporting router.  (This
  1310.  
  1311. is the same polling procedure used for non-broadcast links.)
  1312.  
  1313.  
  1314.  
  1315. Note that if a fragment is lost, a reporting router whose node-header is 
  1316.  
  1317. in the lost fragment will of course remain unchanged in the recipient's 
  1318.  
  1319. data base.  Furthermore, any data received in subsequent fragments, 
  1320.  
  1321. prior to a node-header, will also be meaningless.  The last adjacency 
  1322.  
  1323. of the last link in a reporting router's bulletin will have the Last 
  1324.  
  1325. flag set to 1, signaling that following the address, a node header 
  1326.  
  1327. follows.  Note also that the first node-header within an envelope is
  1328.  
  1329. pointed to by the sync byte in the envelope header.  The last flag and
  1330.  
  1331. sync byte should match or an error should be noted.
  1332.  
  1333.  
  1334.  
  1335.  
  1336.  
  1337. IV.6.  Routing update bulletin packets 
  1338.  
  1339.  
  1340.  
  1341. A routing update bulletin envelope (Table IV.1) may contain several
  1342.  
  1343. different reporting routers' updated link state information,
  1344.  
  1345. concatenated into one message, with a different sequence number for each
  1346.  
  1347. source (reporting router).  One of the sources, of course, may be the
  1348.  
  1349. local router.  Each router's link state information is further broken
  1350.  
  1351. down by link, which allows its backbone routing information to be
  1352.  
  1353. propogated separately from its local end node adjacency information. 
  1354.  
  1355.  
  1356.  
  1357. Incremental changes (good news and bad news)
  1358.  
  1359.  
  1360.  
  1361. Bulletins that only report changes in state come in two flavors.  Good
  1362.  
  1363. News bulletins inform other routers that an adjacency has been noted.
  1364.  
  1365. Bad News bulletins inform them that an adjacency has been lost.  If an
  1366.  
  1367. end node establishes a connection with a router whose node group default
  1368.  
  1369. addresses (based on the significant bit count) already include that end
  1370.  
  1371. station, however, no bulletin need be sent out, as packets to that end 
  1372.  
  1373. station will already be routed correctly.  Theoretically, a router could
  1374.  
  1375. send out a new full routing update bulletin every time it gained or lost
  1376.  
  1377. an adjacency. However, the use of shorter Good News and Bad News
  1378.  
  1379. packets, which do not contain a full routing update, allow the network
  1380.  
  1381. to remain relatively current with less transmitted traffic. 
  1382.  
  1383.  
  1384.  
  1385. Good news and bad news packets are propogated like other packets,
  1386.  
  1387. but are not originated by the same rules.  While full routing bulletins
  1388.  
  1389. are originated based upon a timer, good news packets are transmitted
  1390.  
  1391. immediately upon receipt and initiated immediately after an adjacency
  1392.  
  1393. is initialized.  This enables new links to be useful quickly.  Bad news,
  1394.  
  1395. however, should not travel as fast:  A node should cache any bad
  1396.  
  1397. news message for a time (initial recommendation for this timer: 60 
  1398.  
  1399. seconds) while waiting for the link to come back up.  This helps keep
  1400.  
  1401. the network stable; if the node receives a packet destined for the 
  1402.  
  1403. lost destination, it may send an ICMP "host unreachable" message
  1404.  
  1405. to the originator of the packet, unless it can reroute the packet
  1406.  
  1407. itself (as may happen with the loss of a backbone link when others
  1408.  
  1409. still exist).
  1410.  
  1411.  
  1412.  
  1413. Because good news and bad news messages represent changes to the last
  1414.  
  1415. full link state bulletin propogated, but do not purport to completely
  1416.  
  1417. represent a node's link states, they carry bulletin subsequence
  1418.  
  1419. numbers.  These use the last bulletin sequence number originated by the
  1420.  
  1421. reporting router, but the sub-sequence value increments from 1. (A full 
  1422.  
  1423. link state packet has a sub-sequence value of 0, and resets the 
  1424.  
  1425. subsequence counter.) 
  1426.  
  1427.  
  1428.  
  1429. Routes to nearby destinations
  1430.  
  1431.  
  1432.  
  1433. Sometimes more than one router will serve the same area (determined by 
  1434.  
  1435. the significant bits' matching), and they will need to know which one has 
  1436.  
  1437. the better path to a given station.  These adjacency messages may only 
  1438.  
  1439. require a short horizon, as will Good News and Bad News packets which 
  1440.  
  1441. refer to end nodes going on and off the air.   Higher horizons are 
  1442.  
  1443. needed for backbone routers.
  1444.  
  1445.  
  1446.  
  1447.  
  1448.  
  1449. Table IV.1.  Routing update (link state packet) bulletin envelope:
  1450.  
  1451.  
  1452.  
  1453.                   1           2
  1454.  
  1455.  |0              |8              |6              |4              |
  1456.  
  1457.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ----
  1458.  
  1459.  | RSPF Version #| Type          | fragment #    | fragment total| packet
  1460.  
  1461.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -hdr
  1462.  
  1463.  |       Checksum                | sync byte     | # nodes below |
  1464.  
  1465.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
  1466.  
  1467.  |  Envelope-ID                  |
  1468.  
  1469.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ----
  1470.  
  1471.  |         Reporting node #1 full IP Router-Address              | node
  1472.  
  1473.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -hdr
  1474.  
  1475.  |  Node 1 bulletin  sequence #  | sub-sequence #| # links       |
  1476.  
  1477.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ----
  1478.  
  1479.  | horizon left   |  ERP factor  |  link cost    |  #adjacencies | link
  1480.  
  1481.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ _-hdr_
  1482.  
  1483.  |significant bits|
  1484.  
  1485.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1486.  
  1487.  |              Adjacent node(s) 1,1,1 IP address                | adj.
  1488.  
  1489.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ---
  1490.  
  1491.  |significant bits|
  1492.  
  1493.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1494.  
  1495.  |             Adjacent node(s) 1,1,2 IP address                 | adj.
  1496.  
  1497.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ---
  1498.  
  1499.                        ...
  1500.  
  1501.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1502.  
  1503.  |significant bits|
  1504.  
  1505.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1506.  
  1507.  |             Adjacent node(s) 1,1,n IP address                 |
  1508.  
  1509.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ---
  1510.  
  1511.  | horizon left   |  ERP factor  |  link cost    |  #adjacencies | link
  1512.  
  1513.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ---
  1514.  
  1515.  |significant bits|
  1516.  
  1517.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1518.  
  1519.  |             Adjacent node(s) 1,2,1 IP address                 | adj.
  1520.  
  1521.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ---
  1522.  
  1523.                         ...
  1524.  
  1525.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1526.  
  1527.  |significant bits|
  1528.  
  1529.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1530.  
  1531.  |             Adjacent node(s) 1,2,n IP address                 | adj.
  1532.  
  1533.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ---
  1534.  
  1535.  |         Reporting node #2 full IP Address                     | node
  1536.  
  1537.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1538.  
  1539.  |  Node 2 bulletin sequence #   | sub-sequence #|  # links      |
  1540.  
  1541.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ---
  1542.  
  1543.  | horizon left  |  ERP factor   |  link cost    |  #adjacencies | link
  1544.  
  1545.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ---
  1546.  
  1547.  |significant bits|
  1548.  
  1549.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ adj.
  1550.  
  1551.  |             Adjacent node(s) 2,1,1 IP address                 |
  1552.  
  1553.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ---
  1554.  
  1555.  |significant bits|
  1556.  
  1557.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1558.  
  1559.  |             Adjacent node(s) 2,1,2 IP address                 |
  1560.  
  1561.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1562.  
  1563.                        ...
  1564.  
  1565.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1566.  
  1567.  | horizon left    |  ERP factor |  link cost    |  #adjacencies | 
  1568.  
  1569.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1570.  
  1571.  |significant bits|
  1572.  
  1573.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1574.  
  1575.  |             Adjacent node(s) 2,2,1 IP address                 |
  1576.  
  1577.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1578.  
  1579.                         ...
  1580.  
  1581.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1582.  
  1583.  |significant bits|
  1584.  
  1585.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1586.  
  1587.  |             Adjacent node(s) 2,2,n IP address                 |
  1588.  
  1589.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1590.  
  1591.                         ...
  1592.  
  1593.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1594.  
  1595.  |         Reporting node #n full IP address                     |
  1596.  
  1597.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1598.  
  1599.  |  Node n bulletin sequence #   | sub-sequence #|   # links     |
  1600.  
  1601.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1602.  
  1603.     etc.
  1604.  
  1605.  
  1606.  
  1607. Parameters--
  1608.  
  1609.  
  1610.  
  1611.   An RSPF bulletin packet is sent within IP with a type of <tbd - use 73
  1612.  
  1613.   until an official value is assigned>.  Each routing update envelope
  1614.  
  1615.   contains an envelope packet header that contains:
  1616.  
  1617.  
  1618.  
  1619.     RSPF Version Number:  Version number of the protocol (initially 1).
  1620.  
  1621.     Type:  (Value 1 for Routing Update Bulletin Envelope)
  1622.  
  1623.  
  1624.  
  1625.     Fragment Number:  States which fragment, in a segmented message,
  1626.  
  1627.     this is, beginning at 1.  Non-fragmented messages use 1.
  1628.  
  1629.     
  1630.  
  1631.     Fragment total:  Total number of fragments in message; 1 if not 
  1632.  
  1633.     fragmented.
  1634.  
  1635.  
  1636.  
  1637.     Checksum:  IP-style checksum.
  1638.  
  1639.  
  1640.  
  1641.     Sync byte:  Which octet in this packet (counting from this 
  1642.  
  1643.     byte as byte 0) is the beginning of the first node-header.  If 0,
  1644.  
  1645.     this fragment has no node-header.  Non-fragmented messages
  1646.  
  1647.     use a value of 4 (because 3 bytes follow in packet header).
  1648.  
  1649.     **NOTE CHANGE IN 2.1**
  1650.  
  1651.  
  1652.  
  1653.     Number of nodes reporting:  The number of reporting routers in the 
  1654.  
  1655.     messages that follows (this packet or a sequence of packets forming
  1656.  
  1657.     the envelope).
  1658.  
  1659.  
  1660.  
  1661.  
  1662.  
  1663.   The node-header (for each reporting router) contains 8 octets:
  1664.  
  1665.  
  1666.  
  1667.     Reporting router #n full IP router address:  The IP address of 
  1668.  
  1669.     the router whose adjacencies are being reported below.  (Note
  1670.  
  1671.     that if a router uses separate IP addresses on its links, it
  1672.  
  1673.     should still adopt a single one as its router address.)
  1674.  
  1675.  
  1676.  
  1677.     Bulletin sequence number:  When a bulletin is passed along, this 
  1678.  
  1679.     number is NOT changed; every new bulletin from a given Reporting 
  1680.  
  1681.     router has a value 1 higher than the previous bulletin from that
  1682.  
  1683.     reporting router.  (Note:  This is modulo 65536, so implementations
  1684.  
  1685.     must cope with the "wrap around" and consider values below, say,
  1686.  
  1687.     100, to be "higher" than values above, say, 65400.  Between 100
  1688.  
  1689.     and 65400, modular arithmetic is NOT used.)
  1690.  
  1691.  
  1692.  
  1693.     Sub-sequence number:  Good news and bad news packets representing
  1694.  
  1695.     incremental changes from the last full report increment this value
  1696.  
  1697.     by 1; it is 0 for full bulletins.
  1698.  
  1699.  
  1700.  
  1701.     # links:  The number of different cost-horizon values (typically, 
  1702.  
  1703.     but not necessarily, representing different types of link in a 
  1704.  
  1705.     mulitiport gateway) being reported below; the following four octets 
  1706.  
  1707.     are the header for each link.
  1708.  
  1709.  
  1710.  
  1711.  [For each reporting router, adjacencies are reported separately by
  1712.  
  1713.   link cost.  This is the received cost value for that data link, after
  1714.  
  1715.   any adjustment that may be based upon packet loss ratio.  Adjacencies
  1716.  
  1717.   are also reported separately by horizon, even if the cost is the same. 
  1718.  
  1719.   It does not matter at this point if there are multiple RF or other 
  1720.  
  1721.   links if their cost and horizon are the same.  Likewise, separate
  1722.  
  1723.   received costs or horizons on one link will be treated separately
  1724.  
  1725.   and such adjacencies will be grouped under separate link headers:]
  1726.  
  1727.  
  1728.  
  1729.     Horizon left:  This number is decremented every time a routing update 
  1730.  
  1731.     bulletin is passed along; when it reaches 0, it is not passed further.
  1732.  
  1733.  
  1734.  
  1735.     Link cost:  A "figure of merit" for each link, rising with
  1736.  
  1737.     slower/poorer links.  This is the number whose total is minimized
  1738.  
  1739.     by SPF.  The range is 1-127.  As a starting point, a 56000 bps fdx
  1740.  
  1741.     backbone link might have a value of 2, a 4800bps hdx link a value
  1742.  
  1743.     of 5, a 1200bps hdx link a value of 10 and a 300 bps hf "wormhole"
  1744.  
  1745.     a value of 20.  An Ethernet or high-speed (1 Mbps+) link might
  1746.  
  1747.     then have a value of 1.  A value of 255 denotes the loss of a
  1748.  
  1749.     link; this is found in Bad News packets.  These values should be
  1750.  
  1751.     coordinated network-wide;  adjusting them will change the way
  1752.  
  1753.     packets are routed by RSPF.
  1754.  
  1755.  
  1756.  
  1757.     Number of adjacencies:  The number of adjacencies to be listed for that 
  1758.  
  1759.     reporting node.
  1760.  
  1761.  
  1762.  
  1763.     ERP Factor:  Used for "approximating" a route; contains the number of 
  1764.  
  1765.     significant bits for which a given node can be presumed to be a valid 
  1766.  
  1767.     router, even if it doesn't report in detail.  A low factor = wider 
  1768.  
  1769.     coverage area; thus ERP of 16 means that if NO other match is found for 
  1770.  
  1771.     a given address, this router will try to handle it if it matches 16 
  1772.  
  1773.     bits.  Basically a handle for future enhancements; its use will not
  1774.  
  1775.     be required in the initial release of RSPF.
  1776.  
  1777.  
  1778.  
  1779.   For each adjacency of the given link cost, the following is provided:
  1780.  
  1781.  
  1782.  
  1783.     Significant bits: The number of bits used for node group routing 
  1784.  
  1785.     purposes.  Usually 32 but may be lower if a given link purports to 
  1786.  
  1787.     serve all end nodes in an area defined using the most-matched-bits 
  1788.  
  1789.     node group convention.  Higher numbers of bits matched take a higher 
  1790.  
  1791.     priority than least cost.  This uses the low-order 5 bits of the 
  1792.  
  1793.     octet.
  1794.  
  1795.  
  1796.  
  1797.     Last-flag:  If this is the last adjacency in the list for this 
  1798.  
  1799.     reporting router, this value is 1; otherwise it is 0.  (This 
  1800.  
  1801.     occupies the high-order bit of the significant bits octet.)
  1802.  
  1803.  
  1804.  
  1805.     Full IP address: The full IP address for this node.  
  1806.  
  1807.  
  1808.  
  1809. Note that the n,n,n vector within the bulletin has three fields in the
  1810.  
  1811. above representation: Reporting router within bulletin envelope, link 
  1812.  
  1813. cost/horizon within reporting router's bulletin, and reporting adjacency
  1814.  
  1815. with that link cost/horizon.
  1816.  
  1817.  
  1818.  
  1819.  
  1820.  
  1821. IV.7.  Fragmentation
  1822.  
  1823.  
  1824.  
  1825. In a moderate to large network, a full routing update can easily exceed 
  1826.  
  1827. the maximum size of an AX.25 frame or IP packet.  The RSPF Routing
  1828.  
  1829. Update message, however, may be sent in fragments.  The IP
  1830.  
  1831. fragmentation function is not used for this; bulletins are not assumed
  1832.  
  1833. to be terminated by a packet boundary.  Each fragment is, however,
  1834.  
  1835. numbered in the packet header, along with an indication of the number
  1836.  
  1837. of the total number of fragments in that envelope.
  1838.  
  1839.  
  1840.  
  1841. In order to permit parsing of the incoming fragments by routers who
  1842.  
  1843. are using unacknowledged broadcast information (with the high 
  1844.  
  1845. likelihood of lost fragments), every bulletin's packet header contains a 
  1846.  
  1847. sync byte indicator.  This indicates which byte, where the next byte in 
  1848.  
  1849. the header is byte 1, is the beginning of a node header.  If a previous 
  1850.  
  1851. fragment was lost, the receiver should ignore the number of bytes 
  1852.  
  1853. indicated in the sync byte before resuming parsing of the packet.  (If 
  1854.  
  1855. the fragment does not exceed 255 bytes, this will always be sufficient.  
  1856.  
  1857. It is recognized that long packets may not be able to use this mechanism 
  1858.  
  1859. reliably, and a value of "0" should be used to indicate that no sync is 
  1860.  
  1861. possible within this fragment.)
  1862.  
  1863.  
  1864.  
  1865. Each routing update bulletin envelope takes the form of a three-
  1866.  
  1867. dimensional list, with the dimensions being reporting router, link and
  1868.  
  1869. adjacency. A given bulletin envelope may report on link state from one
  1870.  
  1871. or more remote nodes, as well as from the sending node.  Each node may
  1872.  
  1873. have one or more links; each link may have one or more adjacencies. 
  1874.  
  1875.  
  1876.  
  1877. Packets may not be fragmented within adjacencies, but may be
  1878.  
  1879. fragmented after an adjacency's address and before the next adjacency's
  1880.  
  1881. significant bits field.  (This presents a 5-octet field that should
  1882.  
  1883. not be fragmented.)  The next fragment, in a new packet, simply begins
  1884.  
  1885. where the last one left off; the receiver knows how much more to
  1886.  
  1887. expect based upon the node and link count in the respective
  1888.  
  1889. node-header and link-header. 
  1890.  
  1891.  
  1892.  
  1893. A router may not start sending a new Routing Update message of any kind 
  1894.  
  1895. to any given IP address until all fragments of a previous message to
  1896.  
  1897. that address have been transmitted.  This applies both to point to
  1898.  
  1899. point (non-multicast address) and multicast procedures.
  1900.  
  1901.  
  1902.  
  1903.  
  1904.  
  1905. IV.8.  Bulletin Timers
  1906.  
  1907.  
  1908.  
  1909. The timers used for bulletin updates must be a compromise between
  1910.  
  1911. maintaing the network's current state and the traffic required to do
  1912.  
  1913. so.  An initial suggestion:  Good news messages should be initiated
  1914.  
  1915. within a few seconds and bad news messages should be initiated within
  1916.  
  1917. one minute, with relatively short horizons on the bulletins (i.e., the
  1918.  
  1919. routers within the region).  Full routing updates with normal horizons
  1920.  
  1921. should be sent out every 30 minutes.  If the network is small, more
  1922.  
  1923. frequent updates may be possible; too frequent updates risk choking
  1924.  
  1925. the network with update traffic.
  1926.  
  1927.  
  1928.  
  1929.  
  1930.  
  1931.  
  1932.  
  1933.  
  1934.  
  1935. V.  The Shortest Path First spanning tree algorithm
  1936.  
  1937.  
  1938.  
  1939. As a routing node comes onto the network, it acquires over time a
  1940.  
  1941. complete list of adjacencies between other nodes on the network except
  1942.  
  1943. as limited by the "horizon".  Each adjacency (point to point link)
  1944.  
  1945. within the entire known network has a "cost" associated with it.  It
  1946.  
  1947. should be noted that adjacencies, for the purposes of this algorithm,
  1948.  
  1949. are "logical" and not necessarily physical;  if a subnetwork link
  1950.  
  1951. occurs below IP (as in AX.25 digipieating or NET/ROM), the two ends of
  1952.  
  1953. the link are still adjacent.  (Adjacency at the IP internet layer is
  1954.  
  1955. based upon subnetworks, which may contain their own links.)  
  1956.  
  1957.  
  1958.  
  1959. Cost is set for the receive (** Changed in 2.1 to facilitate automatic
  1960.  
  1961. link quality adjustment **) side of each link.  If the receiver and
  1962.  
  1963. transmitter do not agree on cost, the network shall apply different
  1964.  
  1965. routes for packets going in opposite directions between the same two
  1966.  
  1967. end nodes.  (This is not a problem.  In a radio environment, one
  1968.  
  1969. should NOT assume reciprocity across a link.) 
  1970.  
  1971.  
  1972.  
  1973. V.1.  Tables
  1974.  
  1975.  
  1976.  
  1977. Each router builds a _link state table_ that lists, for every known
  1978.  
  1979. link in the network (from every reporting router), the two ends and
  1980.  
  1981. the cost of that end of the link.  The ends are listed by an IP router
  1982.  
  1983. address and, for the destination IP router address, a number of
  1984.  
  1985. significant bits.  This is what's updated by the bulletins and by good
  1986.  
  1987. news/bad news messages. 
  1988.  
  1989.  
  1990.  
  1991.     Source IP address    Dest. IP addr/bits    Cost
  1992.  
  1993.  
  1994.  
  1995.     44.56.0.44        44.56.0.128/32        5
  1996.  
  1997.     44.56.0.44        44.56.0.12/25        10
  1998.  
  1999.  
  2000.  
  2001. The goal of the SPF algorithm is to build a _paths table_ which lists,
  2002.  
  2003. for every reachable node (or node group approximation of fewer than 32
  2004.  
  2005. bits) on the network, that node address (or node group address and
  2006.  
  2007. number of significant bits), the adjacent node used to get there
  2008.  
  2009. (i.e., where you blast the packets to next), and the total cost of the
  2010.  
  2011. path.  (This feeds the Route table in the IP Route module in NET.)
  2012.  
  2013. This is done by building a spanning tree with the router doing the
  2014.  
  2015. computation (the home router) as the root of the tree.  The paths
  2016.  
  2017. table thus lists the best way across the tree from the home router to
  2018.  
  2019. all known destinations.
  2020.  
  2021.  
  2022.  
  2023. Every router contains, for the purposes of building the tree, a 
  2024.  
  2025. _trial table_ that has three entries:  Destination address/bits,
  2026.  
  2027. adjacent node, and cost of this path.  The paths table additionally 
  2028.  
  2029. has one more entry, the _parent_ node, which is the last hop
  2030.  
  2031. before the destination.  Thus in a path A -> B -> C -> D -> E, home 
  2032.  
  2033. router A views E as the destination, D as the parent, and B as the
  2034.  
  2035. adjacency.  Note that in the path from A to B, A is the parent node. 
  2036.  
  2037.  
  2038.  
  2039. Begin building the paths table by using the home router as the first 
  2040.  
  2041. node on the paths table.  The cost to reach yourself is always 0, so 
  2042.  
  2043. make the first entry on the paths table as follows:  Source=self,
  2044.  
  2045. destination=self, parent=self, and cost=0.  From here on in, parent 
  2046.  
  2047. is always (by definition of the SPF spanning tree) the node most 
  2048.  
  2049. recently added to the paths table.
  2050.  
  2051.  
  2052.  
  2053.     Destination    Adjacent     Parent        Cost
  2054.  
  2055.  
  2056.  
  2057.     44.56.0.128    44.56.0.128    44.56.0.44    5
  2058.  
  2059.     44.56.0.131    44.56.0.128    44.56.0.128    10
  2060.  
  2061.     44.56.0.200    44.56.0.128    44.56.0.131    15
  2062.  
  2063.  
  2064.  
  2065.         Paths Table showing relationship between 
  2066.  
  2067.     destination, parent and adjacent nodes, where the home
  2068.  
  2069.     node is 44.56.0.44 and 44.56.0.200 is three hops away;
  2070.  
  2071.     all hops here have a cost of 5.
  2072.  
  2073.  
  2074.  
  2075. V.2.  Scanning the links
  2076.  
  2077.  
  2078.  
  2079. The home router now scans its links table looking for all nodes (routers 
  2080.  
  2081. and end nodes) that are adjacent to the current parent node, except
  2082.  
  2083. for links to nodes which are already on the paths table.  (It is
  2084.  
  2085. generally fastest to build the paths table by scanning the links table
  2086.  
  2087. in order of increasing link cost.)  Each of these new nodes is added
  2088.  
  2089. to the trial table, except for the parent node (which is already on
  2090.  
  2091. the paths table, so it can't possibly have a shorter path).  The value
  2092.  
  2093. of cost placed on the trial table is the cost of the link from the
  2094.  
  2095. parent to the destination plus the cost from home to the parent node
  2096.  
  2097. (which value is already on the paths table).  
  2098.  
  2099.  
  2100.  
  2101. A node may only appear once in the trial table at any given time.  If
  2102.  
  2103. an adjacency is found to a node that is already on the trial table, a
  2104.  
  2105. new entry replaces the existing entry if and only if the new total
  2106.  
  2107. cost is lower.  If the cost is higher, it is ignored.  (If the costs
  2108.  
  2109. are equal, then a "tiebreaker" is determined by treating the
  2110.  
  2111. lower-numbered IP address as the lower cost.  This will simply make
  2112.  
  2113. the spanning tree more deterministic in case of tie.)  Thus the trial
  2114.  
  2115. table always contains the lowest cost path to each destination found so
  2116.  
  2117. far.
  2118.  
  2119.  
  2120.  
  2121. Once all of the links from the parent node have had their chance to go 
  2122.  
  2123. onto the trial table, scan the entire trial table for the _one_ entry
  2124.  
  2125. with the lowest total cost.  This not need be a link from that parent
  2126.  
  2127. node!  In case of tie, pick the lower IP address (again just to be
  2128.  
  2129. deterministic).  Move this node to the paths table;  guaranteed,
  2130.  
  2131. there'll be no cheaper path to that node!  The adjacency used for that
  2132.  
  2133. node in the paths table is the adjacency to its parent node.  Note
  2134.  
  2135. that the parent _must_ already be on the paths table since that's the
  2136.  
  2137. source of the parent; you're working your way outward. 
  2138.  
  2139.  
  2140.  
  2141. This new addition to the paths table becomes the new parent node.  
  2142.  
  2143. Repeat the procedure above (from the beginning of V.2) until there are
  2144.  
  2145. no nodes left on the trial table.  This means you've completed the
  2146.  
  2147. spanning tree and have found the least-cost path to every other node.
  2148.  
  2149.  
  2150.  
  2151. One of the router parameters is maximum_cost.  If the cost to a given 
  2152.  
  2153. parent node exceeds this value, the procedure stops, since all 
  2154.  
  2155. subsequent entries in the route table will have a higher cost.  This 
  2156.  
  2157. value has some semblane to the time-to-live parameter of the IP
  2158.  
  2159. packet:  It makes little sense to compute a routing table to nodes
  2160.  
  2161. that cannot be reached within time-to-live.  (Ideally, ttl will be
  2162.  
  2163. implemented using a timer rather than a node counter, but this is
  2164.  
  2165. difficult to do with some of the packet radio data link controller
  2166.  
  2167. implementations; vis., TNCs.)
  2168.  
  2169.  
  2170.  
  2171. A router should recalculate its routes periodically based upon the 
  2172.  
  2173. current links table.  How frequently depends upon the CPU load involved.
  2174.  
  2175. Initial estimates are that it should be recalculated after receipt of
  2176.  
  2177. every routing update bulletin:  Partial calculations do not save
  2178.  
  2179. enough CPU time to make them worthwhile.
  2180.  
  2181.  
  2182.  
  2183.  
  2184.  
  2185. V.3.  Filling in the routing table
  2186.  
  2187.  
  2188.  
  2189. The route table in NOS and NET (the KA9Q et al implementations of IP)
  2190.  
  2191. contains, for each entry, the destination address, number of bits,
  2192.  
  2193. interface, gateway and metric.  This is essentially left intact,
  2194.  
  2195. except that metric is filled in by cost and the routing decision looks
  2196.  
  2197. for the least cost of all matches.  The route table is filled in from
  2198.  
  2199. the paths table.
  2200.  
  2201.  
  2202.  
  2203. Since the routing table will be periodically recalculated from
  2204.  
  2205. scratch, implementation may require two route tables, one "in
  2206.  
  2207. progress" and one "in service".  When the route calculation is
  2208.  
  2209. complete, the "in progress" table becomes "in service" and the old one
  2210.  
  2211. is cleared for reuse.  This allows packet forwarding to continue while
  2212.  
  2213. the completed paths table is being converted into the route table.
  2214.  
  2215.  
  2216.  
  2217. A manual route table may also be maintained.  This should be overriden
  2218.  
  2219. by RSPF-generated entries.  Manual routes are useful defaults before
  2220.  
  2221. RSPF generates routing entries, for destinations not reported on by
  2222.  
  2223. RSPF, and for interworking with other routing protocols.
  2224.  
  2225.  
  2226.  
  2227.  
  2228.  
  2229.  
  2230.  
  2231.  
  2232.  
  2233. Appendix I.  Router parameters
  2234.  
  2235.  
  2236.  
  2237. Every router must set a number of parameters in order to properly
  2238.  
  2239. operate.  While RSPF builds its routing matrix automatically, overall
  2240.  
  2241. network efficiency and stability may require some fine-tuning based
  2242.  
  2243. upon experience.  These include parameters set for each data link
  2244.  
  2245. or subnetwork layer entity (i.e., each radio channel) and for the
  2246.  
  2247. router in general.
  2248.  
  2249.  
  2250.  
  2251. Link/subnet settings:
  2252.  
  2253.  
  2254.  
  2255.    Set Link cost:  This is the cost parameter based upon the link speed
  2256.  
  2257.     and type.  Since the overall cost of the end-to-end path is
  2258.  
  2259.     minimized by the RSPF spanning tree, link cost should be set to
  2260.  
  2261.     arrive at the best overall network performance.  The legal range
  2262.  
  2263.     is 1-127.  This is sent in routing update bulletins.
  2264.  
  2265.  
  2266.  
  2267. Node settings: 
  2268.  
  2269.  
  2270.  
  2271.   Add/Delete Node group: [IPaddr]/bits {cost}.  This allows a node to 
  2272.  
  2273.    announce its ability to serve a group of nodes, identified using 
  2274.  
  2275.    the standard NET convention of address/significant bits.  Thus a 
  2276.  
  2277.    node group setting of [44.56.0.1]/25 will match all nodes from
  2278.  
  2279.    [44.56.0.1] to [44.56.0.127].  Cost is optional; if set, this
  2280.  
  2281.    cost to will be propogated to reach such nodes; otherwise, the 
  2282.  
  2283.    link's default is used. 
  2284.  
  2285.  
  2286.  
  2287.   Set horizon link:   This sets the horizon value for the node's
  2288.  
  2289.    routing bulletins apropos 32-bit addresses of other connected 
  2290.  
  2291.    routers.  This should be high enough to propogate across the 
  2292.  
  2293.    backbone.
  2294.  
  2295.  
  2296.  
  2297.   Set horizon group:  This sets the horizon value for the node's
  2298.  
  2299.    routing bulletins apropos node group addresses (fewer than 32
  2300.  
  2301.    bits matched).  Usually matches the horizon link value.
  2302.  
  2303.  
  2304.  
  2305.   Set horizon local:  This sets the horizon vaue for the node's
  2306.  
  2307.    routing bulletins apropos full link addresses (32 bits) **to
  2308.  
  2309.    non-routers** within the router's node group area.  This is set to
  2310.  
  2311.    a low value so that only other routers serving the same or overlapping
  2312.  
  2313.    node group(s) will receive these messages.
  2314.  
  2315.  
  2316.  
  2317.   Set horizon portable:  This sets the horizon value for the 
  2318.  
  2319.    node's routing bulletins apropos full link addresses (32 bits)
  2320.  
  2321.    not within a node group.  This allows portable end nodes to 
  2322.  
  2323.    have their location in the network propogated farther than
  2324.  
  2325.    the local horizon; this is usually set the same as horizon group.
  2326.  
  2327.  
  2328.  
  2329.   Set broadcast timer:  This sets the time, in seconds, between 
  2330.  
  2331.    router-router hello (RRH) broadcasts.  Initial suggestion:  900.
  2332.  
  2333.  
  2334.  
  2335.   Set suspect timer:  This sets the time, in seconds, after which
  2336.  
  2337.    an adjacency is "suspect" if no packets are received from it.
  2338.  
  2339.    An ICMP echo is then issued.  Initial suggestion:  900.
  2340.  
  2341.  
  2342.  
  2343.   Set suspect count:  This sets the number of times an ICMP echo 
  2344.  
  2345.    (ping) should be sent after a node is suspect, before it is
  2346.  
  2347.    removed from the adjacency list.
  2348.  
  2349.