diff options
Diffstat (limited to 'doc/rfc/rfc3684.txt')
-rw-r--r-- | doc/rfc/rfc3684.txt | 2579 |
1 files changed, 2579 insertions, 0 deletions
diff --git a/doc/rfc/rfc3684.txt b/doc/rfc/rfc3684.txt new file mode 100644 index 0000000..b20dc9a --- /dev/null +++ b/doc/rfc/rfc3684.txt @@ -0,0 +1,2579 @@ + + + + + + +Network Working Group R. Ogier +Request for Comments: 3684 SRI International +Category: Experimental F. Templin + Nokia + M. Lewis + SRI International + February 2004 + + + Topology Dissemination Based on Reverse-Path Forwarding (TBRPF) + +Status of this Memo + + This memo defines an Experimental Protocol for the Internet + community. It does not specify an Internet standard of any kind. + Discussion and suggestions for improvement are requested. + Distribution of this memo is unlimited. + +Copyright Notice + + Copyright (C) The Internet Society (2004). All Rights Reserved. + +Abstract + + Topology Dissemination Based on Reverse-Path Forwarding (TBRPF) is a + proactive, link-state routing protocol designed for mobile ad-hoc + networks, which provides hop-by-hop routing along shortest paths to + each destination. Each node running TBRPF computes a source tree + (providing paths to all reachable nodes) based on partial topology + information stored in its topology table, using a modification of + Dijkstra's algorithm. To minimize overhead, each node reports only + *part* of its source tree to neighbors. TBRPF uses a combination of + periodic and differential updates to keep all neighbors informed of + the reported part of its source tree. Each node also has the option + to report additional topology information (up to the full topology), + to provide improved robustness in highly mobile networks. TBRPF + performs neighbor discovery using "differential" HELLO messages which + report only *changes* in the status of neighbors. This results in + HELLO messages that are much smaller than those of other link-state + routing protocols such as OSPF. + + + + + + + + + + + +Ogier, et al. Experimental [Page 1] + +RFC 3684 TBRPF February 2004 + + +Table of Contents + + 1. Introduction. . . . . . . . . . . . . . . . . . . . . . . . . 3 + 2. Requirements. . . . . . . . . . . . . . . . . . . . . . . . . 4 + 3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 + 4. Applicability Section . . . . . . . . . . . . . . . . . . . . 5 + 5. TBRPF Overview. . . . . . . . . . . . . . . . . . . . . . . . 6 + 5.1. Overview of Neighbor Discovery . . . . . . . . . . . . 6 + 5.2. Overview of the Routing Module. .. . . . . . . . . . . 8 + 6. TBRPF Packets . . . . . . . . . . . . . . . . . . . . . . . . 10 + 6.1. TBRPF Packet Header. . . . . . . . . . . . . . . . . . 10 + 6.2. TBRPF Packet Body. . . . . . . . . . . . . . . . . . . 11 + 6.2.1. Padding Options (TYPE = 0 thru 1). . . . . . . 12 + 6.2.2. Messages (TYPE = 2 thru 10). . . . . . . . . . 13 + 7. TBRPF Neighbor Discovery. . . . . . . . . . . . . . . . . . . 13 + 7.1. HELLO Message Format . . . . . . . . . . . . . . . . . 13 + 7.2. Neighbor Table . . . . . . . . . . . . . . . . . . . . 14 + 7.3. Sending HELLO Messages . . . . . . . . . . . . . . . . 15 + 7.4. Processing a Received HELLO Message. . . . . . . . . . 16 + 7.5. Expiration of Timer nbr_life . . . . . . . . . . . . . 18 + 7.6. Link-Layer Failure Notification. . . . . . . . . . . . 18 + 7.7. Optional Link Metrics. . . . . . . . . . . . . . . . . 18 + 7.8. Configurable Parameters. . . . . . . . . . . . . . . . 19 + 8. TBRPF Routing Module. . . . . . . . . . . . . . . . . . . . . 19 + 8.1. Conceptual Data Structures . . . . . . . . . . . . . . 19 + 8.2. TOPOLOGY UPDATE Message Format . . . . . . . . . . . . 21 + 8.3. Interface, Host, and Network Prefix Association + Message Formats. . . . . . . . . . . . . . . . . . . . 23 + 8.4. TBRPF Routing Operation. . . . . . . . . . . . . . . . 24 + 8.4.1. Periodic Processing. . . . . . . . . . . . . . 24 + 8.4.2. Updating the Source Tree and Topology + Graph. . . . . . . . . . . . . . . . . . . . . 25 + 8.4.3. Updating the Routing Table . . . . . . . . . . 26 + 8.4.4. Updating the Reported Node Set . . . . . . . . 27 + 8.4.5. Generating Periodic Updates. . . . . . . . . . 29 + 8.4.6. Generating Differential Updates. . . . . . . . 29 + 8.4.7. Processing Topology Updates. . . . . . . . . . 30 + 8.4.8. Expiring Topology Information. . . . . . . . . 32 + 8.4.9. Optional Reporting of Redundant Topology + Information. . . . . . . . . . . . . . . . . . 32 + 8.4.10. Local Topology Changes . . . . . . . . . . . . 33 + 8.4.11. Generating Association Messages. . . . . . . . 34 + 8.4.12. Processing Association Messages. . . . . . . . 36 + 8.4.13. Non-Relay Operation. . . . . . . . . . . . . . 37 + 8.5. Configurable Parameters. . . . . . . . . . . . . . . . 38 + 9. TBRPF Flooding Mechanism. . . . . . . . . . . . . . . . . . . 38 + 10. Operation of TBRPF in Mobile Ad-Hoc Networks. . . . . . . . . 39 + 10.1. Data Link Layer Assumptions. . . . . . . . . . . . . . 39 + + + +Ogier, et al. Experimental [Page 2] + +RFC 3684 TBRPF February 2004 + + + 10.2. Network Layer Assumptions. . . . . . . . . . . . . . . 39 + 10.3. Optional Automatic Address Resolution. . . . . . . . . 40 + 10.4. Support for Multiple Interfaces and/or + Alias Addresses. . . . . . . . . . . . . . . . . . . . 40 + 10.5. Support for Network Prefixes . . . . . . . . . . . . . 40 + 10.6. Support for non-MANET Hosts. . . . . . . . . . . . . . 40 + 10.7. Internet Protocol Considerations . . . . . . . . . . . 41 + 10.7.1. IPv4 Operation . . . . . . . . . . . . . . . . 41 + 10.7.2. IPv6 Operation . . . . . . . . . . . . . . . . 41 + 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 41 + 12. Security Considerations . . . . . . . . . . . . . . . . . . . 42 + 13. Acknowledgements. . . . . . . . . . . . . . . . . . . . . . . 42 + 14. References. . . . . . . . . . . . . . . . . . . . . . . . . . 42 + 14.1. Normative References . . . . . . . . . . . . . . . . . 42 + 14.2. Informative References . . . . . . . . . . . . . . . . 43 + Authors' Addresses. . . . . . . . . . . . . . . . . . . . . . . . 45 + Full Copyright Statement. . . . . . . . . . . . . . . . . . . . . 46 + +1. Introduction + + Topology Dissemination Based on Reverse-Path Forwarding (TBRPF) is a + proactive, link-state routing protocol designed for mobile ad-hoc + networks (MANETs), which provides hop-by-hop routing along shortest + paths to each destination. Each node running TBRPF computes a source + tree (providing shortest paths to all reachable nodes) based on + partial topology information stored in its topology table, using a + modification of Dijkstra's algorithm. To minimize overhead, each + node reports only *part* of its source tree to neighbors. + + TBRPF uses a combination of periodic and differential updates to keep + all neighbors informed of the reported part of its source tree. Each + node also has the option to report addition topology information (up + to the full topology), to provide improved robustness in highly + mobile networks. + + TBRPF performs neighbor discovery using "differential" HELLO messages + which report only *changes* in the status of neighbors. This results + in HELLO messages that are much smaller than those of other link- + state routing protocols such as OSPF [6]. + + TBRPF consists of two modules: the neighbor discovery module and the + routing module (which performs topology discovery and route + computation). An overview of these modules is given in Section 5. + + + + + + + + +Ogier, et al. Experimental [Page 3] + +RFC 3684 TBRPF February 2004 + + +2. Requirements + + The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", + "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL", when + they appear in this document, are to be interpreted as described in + BCP 14, RFC 2119 [1]. + + This document also makes use of internal conceptual variables to + describe protocol behavior and external variables that an + implementation must allow system administrators to change. The + specific variable names, how their values change, and how their + settings influence protocol behavior are provided to demonstrate + protocol behavior. An implementation is not required to have them in + the exact form described here, so long as its external behavior is + consistent with that described in this document. + +3. Terminology + + The following terms are used to describe TBRPF: + + node + A router that implements TBRPF. + + router ID + Each node is identified by a unique 32-bit router ID (RID), which + for IPv4 is typically equal to the IP address of one of its + interfaces. The term "node u" denotes the node whose RID is equal + to u. + + interface + A node's attachment to a communication facility or medium through + which it can communicate with other nodes. A node can have + multiple interfaces. An interface can be wireless or wired, and + can be broadcast (e.g., Ethernet) or point-to-point. Each + interface is identified by its IP address. The term "interface I" + denotes the interface whose IP address is I. + + link + A link is an ordered pair of interfaces (I,J) where I and J are on + two different nodes, and where interface I has recently received + packets sent from interface J. A link (i,j) from node i to node j + is said to exist if node i has an interface I and node j has an + interface J such that (I,J) is a link. Nodes i and j are called + the "tail" and "head" of the link, respectively. + + bidirectional link + A link (I,J) such that interfaces I and J can both hear each + other. Also called a 2-way link. + + + +Ogier, et al. Experimental [Page 4] + +RFC 3684 TBRPF February 2004 + + + neighbor node + A node j is said to be a neighbor of node i if node i can hear + node j on some interface. Node j is said to be a 2-way neighbor + if there is a bidirectional link between i and j. + + MANET interface + Any wireless interface such that two neighbor nodes on the + interface need not be neighbors of each other. MANET nodes + typically have at least one MANET interface, but this is not a + requirement. + + topology + The topology of the network is described by a graph G = (V, E), + where V is the set of nodes u and E is the set of links (u,v) in + the network. + + source tree + The directed tree (denoted T) computed by each node that provides + shortest paths to all other reachable nodes. + + topology update + A message that reports the state of one or more links. + + parent + The parent of node i for node u is the next node on the computed + shortest path from node i to node u. + + predecessor + The predecessor of a node v on the source tree is the node u such + that the link (u,v) is in the source tree. + + leaf node + A leaf node of the source tree is a node on the source tree that + is not the predecessor of any other node on the source tree. + + proactive routing protocol + A routing protocol in which each node maintains routes to all + reachable destinations at all times, whether or not there is + currently any need to deliver packets to those destinations. In + contrast, an "on-demand" routing protocol discovers and maintains + routes only when they are needed. + +4. Applicability Section + + TBRPF is a proactive routing protocol designed for mobile ad-hoc + networks (MANETs). It can support networks with up to a few hundred + nodes, and can be combined with hierarchical routing techniques to + support much larger networks. Because it employs techniques to + + + +Ogier, et al. Experimental [Page 5] + +RFC 3684 TBRPF February 2004 + + + greatly reduce control traffic, TBRPF can support much larger and + denser networks than routing protocols based on the classical link- + state algorithm (e.g., OSPF). + + The number of nodes that can be supported depends on several factors, + including the MAC data rate, the rate of topology changes, and the + network density (average number of neighbors). Simulations have been + reported in which TBRPF has supported as many as 500 nodes. In + simulations with 100 nodes and 20 traffic streams (sources), using + IEEE 802.11 with a data rate of 2 Mbps, TBRPF was found to generate + approximately 80-120 kb/s of routing control traffic for the + scenarios considered, which compared favorably with other MANET + routing protocols [7][8]. A proof of correctness for TBRPF can be + found in references [8] and [9]. + +5. TBRPF Overview + + TBRPF consists of two main modules: the neighbor discovery module, + and the routing module (which performs topology discovery and route + computation). + +5.1. Overview of Neighbor Discovery + + The TBRPF Neighbor Discovery (TND) protocol allows each node i to + quickly detect the neighbor nodes j such that a bidirectional link + (I,J) exists between an interface I of node i and an interface J of + node j. The protocol also quickly detects when a bidirectional link + breaks or becomes unidirectional. + + The key feature of TND is that it uses "differential" HELLO messages + which report only *changes* in the status of links. This results in + HELLO messages that are much smaller than those of other link-state + routing protocols such as OSPF, in which each HELLO message includes + the IDs of *all* neighbors. As a result, HELLO messages can be sent + more frequently, which allows faster detection of topology changes. + + TND is designed to be fully modular and independent of the routing + module. TND performs ONLY neighbor sensing, i.e., it determines + which nodes are (1-hop) neighbors. In particular, it does not + discover 2-hop neighbors (which is handled by the routing module). + As a result, TND can be used by other routing protocols, and TBRPF + can use another neighbor discovery protocol in place of TND, e.g., + one provided by the link layer. + + Nodes with multiple interfaces run TND separately on each interface, + similar to OSPF. Thus, a neighbor table is maintained for each local + interface, and a HELLO sent on a particular interface contains only + information regarding neighbors heard on that interface. + + + +Ogier, et al. Experimental [Page 6] + +RFC 3684 TBRPF February 2004 + + + We note that, in wireless networks, it is possible for a single + interface I to receive packets from multiple interfaces J associated + with the same neighbor node. This could happen, for example, if the + neighbor uses a directional antenna with different interfaces + representing different beams. For this reason, TBRPF includes + neighbor interface addresses in HELLO messages, unlike OSPF, which + includes only router IDs in HELLO packets. + + Each TBRPF node maintains a neighbor table for each local interface + I, which stores state information for each neighbor interface J heard + on that interface, i.e., for each link (I,J) between interface I and + a neighbor interface J. The status of each link can be 1-WAY, 2-WAY, + or LOST. The neighbor table for interface I determines the contents + of HELLO messages sent on interface I, and is updated based on HELLO + messages received on interface I (and possibly on link-layer + notifications). + + Each TBRPF node sends (on each interface) at least one HELLO message + per HELLO_INTERVAL. Each HELLO message contains three (possibly + empty) lists of neighbor interface addresses (which are formatted as + three message subtypes): NEIGHBOR REQUEST, NEIGHBOR REPLY, and + NEIGHBOR LOST. Each HELLO message also contains the current HELLO + sequence number (HSEQ), which is incremented with each transmitted + HELLO. + + In the following overview of the operation of TND, we assume that + interface I belongs to node i, and interface J belongs to node j. + When a node i changes the status of a link (I,J), it includes the + neighbor interface address J in the appropriate list (NEIGHBOR + REQUEST/REPLY/LOST) in at most NBR_HOLD_COUNT (typically 3) + consecutive HELLOs sent on interface I. This ensures that node j + will either receive one of these HELLOs on interface J, or will miss + NBR_HOLD_COUNT HELLOs and thus declare the link (J,I) to be LOST. + This technique makes it unnecessary for a node to include each 1-WAY + or 2-WAY neighbor in HELLOs indefinitely, unlike OSPF. + + To avoid establishing a link that is likely to be short lived (i.e., + to employ hysteresis), node i must receive (on interface I) at least + HELLO_ACQUIRE_COUNT (e.g., 2) of the last HELLO_ACQUIRE_WINDOW (e.g., + 3) HELLOs sent from a neighbor interface J, before declaring the link + (I,J) to be 1-WAY. When this happens, node i includes J in the + NEIGHBOR REQUEST list in each of its next NBR_HOLD_COUNT HELLO + messages sent on interface I, or until a NEIGHBOR REPLY message + containing I is received on interface I from neighbor interface J. + + If node j receives (on interface J) one of the HELLOs sent from + interface I that contains J in the NEIGHBOR REQUEST list, then node j + declares the link (J,I) to be 2-WAY (unless it is already 2-WAY), and + + + +Ogier, et al. Experimental [Page 7] + +RFC 3684 TBRPF February 2004 + + + includes I in the NEIGHBOR REPLY list in each of its next + NBR_HOLD_COUNT HELLO messages sent on interface J. Upon receiving + one of these HELLOs on interface I, node i declares the link (I,J) to + be 2-WAY. + + If node i receives a HELLO on interface I, sent from neighbor + interface J, whose HSEQ indicates that at least NBR_HOLD_COUNT HELLOs + were missed, or if node i receives no HELLO on interface I sent from + interface J within NBR_HOLD_TIME seconds, then node i changes the + status of link (I,J) to LOST (unless it is already LOST), and + includes J in the NEIGHBOR LOST list in each of its next + NBR_HOLD_COUNT HELLO messages sent on interface I (unless the link + changes status before these transmissions are complete). Node j will + either receive one of these HELLOs on interface J or will miss + NBR_HOLD_COUNT HELLOs; in either case, node j will declare the link + (J,I) to be LOST. In this manner, both nodes will agree that the + link between I and J is no longer bidirectional, even if node j can + still hear HELLOs from node i. + + Each node may maintain and update one or more link metrics for each + link (I,J) from a local interface I to a neighbor interface J, + representing the quality of the link. Such link metrics can be used + as additional conditions for changing the status of a neighbor, based + on the link metric going above or below some threshold. TBRPF also + allows link metrics to be advertised in topology updates, and to be + used for computing shortest paths. + +5.2. Overview of the Routing Module + + Each node running TBRPF maintains a source tree, denoted T, which + provides shortest paths to all reachable nodes. Each node computes + and updates its source tree based on partial topology information + stored in its topology table, using a modification of Dijkstra's + algorithm. To minimize overhead, each node reports only part of its + source tree to neighbors. The main idea behind the current version + of TBRPF came from PTSP [10], another protocol in which each node + reports only part of its source tree. (However, TBRPF differs from + PTSP in several ways.) The current version of TBRPF should not be + confused with its previous version [11], which is a full-topology + routing protocol. + + The part of T that a node reports to neighbors is called the + "reported subtree" and is denoted RT. Each node reports RT to + neighbors in *periodic* topology updates (e.g., every 5 seconds), and + reports changes (additions and deletions) to RT in more frequent + *differential* updates (e.g., every 1 second). Periodic updates + inform new neighbors of RT, and ensure that each neighbor eventually + learns RT even if it does not receive all updates. Differential + + + +Ogier, et al. Experimental [Page 8] + +RFC 3684 TBRPF February 2004 + + + updates ensure the fast propagation of each topology update to all + nodes that are affected by the update. A received topology update is + not forwarded, but *may* result in a change to RT, which will be + reported in the next differential or periodic update. Whenever + possible, topology updates are included in the same packet as a HELLO + message, to minimize the number of control packets sent. TBRPF does + not require reliable or sequenced delivery of messages, and does not + use ACKs or NACKs. + + TBRPF supports multiple interfaces, associated hosts, and network + prefixes. Information regarding associated interfaces, hosts, and + prefixes is disseminated efficiently in periodic and differential + updates, similar to the dissemination of topology updates. + + The reported subtree RT consists of links (u,v) of T such that u is + in the "reported node set" RN, which is computed as follows. Node i + includes a neighbor j in RN if and only if node i determines that one + of its neighbors may select i to be its next hop on its shortest path + to j. To make this determination, node i computes the shortest + paths, up to 2 hops, from each neighbor to each other neighbor, using + only neighbors (or node i itself) as an intermediate node, and using + relay priority (included in HELLO messages) and router ID to break + ties. After a node determines which neighbors are in RN, each + reachable node u is included in RN if and only if the next hop on the + shortest path to u is in RN. A node also includes itself in RN. As + a result, the reported subtree RT includes the subtrees of T that are + rooted at neighbors in RN, and also includes all local links to + neighbors. + + We note that neighbors in RN are analogous to multipoint relay (MPR) + selectors [12]. Thus, if node i selects neighbor j to be in RN, then + node i effectively selects itself to be an MPR of node j. This is + quite different from [12], in which a node does not select itself to + be an MPR, but selects a subset of its neighbors to be MPRs. + + A node with a larger relay priority reports a larger part of its + source tree (on average), and is more likely to be selected as a + next-hop relay by its neighbors. A node with relay priority equal to + 0 is called a non-relay node, and never forwards packets originating + from other nodes. + + TBRPF does not use sequence numbers for topology updates, thus + reducing message overhead and avoiding wraparound problems. Instead, + a technique similar to SPTA [13] is used in which, for each link + (u,v) reported by one or more neighbors, only the next hop p(u) to u + is believed regarding the state of the link. (However, in SPTA each + node reports the full topology.) Using this technique, each node + maintains a topology graph TG, consisting of links that are believed + + + +Ogier, et al. Experimental [Page 9] + +RFC 3684 TBRPF February 2004 + + + to be up, and computes T as the shortest-path tree within TG. To + allow immediate rerouting, the restriction that each link (u,v) in TG + must be reported by p(u) is relaxed temporarily if p(u) changes to a + neighbor that is not reporting the link. + + Each node is required to report RT, but may report additional links, + e.g., to provide increased robustness in highly mobile networks. + More precisely, a node may maintain any subgraph H of TG that + contains T, and report the reported subgraph RH, which consists of + links (u,v) of H such that u is in RN. For example, H can equal TG, + which would provide each node with the full network topology if this + is done by all nodes. H can also be a biconnected subgraph that + contains T, which would provide each node with two disjoint paths to + each other node, if this is done by all nodes. + + TBRPF allows the option to include link metrics in topology updates, + and to compute paths that are shortest with respect to the metric. + This allows packets to be sent along paths that are higher quality + than minimum-hop paths. + + TBRPF allows path optimality to be traded off in order to reduce the + amount of control traffic in networks with a large diameter, where + the degree of approximation is determined by the configurable + parameter NON_TREE_PENALTY. + +6. TBRPF Packets + + Nodes send TBRPF protocol data in contiguous units known as packets. + Each packet includes a header, optional header extensions, and a body + comprising one or more messages and padding options as needed. To + facilitate efficient receiver processing, senders SHOULD insert + padding options as necessary to align multi-octet words within the + TBRPF packet on natural boundaries (i.e., modulo-8/4/2 addresses for + 64/32/16-bit words, respectively). Receivers MUST be capable of + processing multi-octet words whether or not aligned on natural + boundaries. The following sections specify elements of the TBRPF + packet in more detail. + +6.1. TBRPF Packet Header + + TBRPF packet headers are variable-length (minimum one octet). The + format for the packet header is as follows: + + 0 1 2 3 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Vers |L|I|R|R| Reserved | Header Extensions ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + +Ogier, et al. Experimental [Page 10] + +RFC 3684 TBRPF February 2004 + + + Version (4 bits) + The TBRPF version number. This specification documents version 4 + of the protocol. + + Flags (4 bits) + Two bits (L,I) specify which header extensions (if any) follow. + Two bits (R) are reserved for future use, and MUST be zero. Any + extensions specified by these bits MUST appear in the same order + as the bits (i.e., first L, then I) as follows: + + L - Length included + If the underlying delivery service provides a length field, the + sender MAY set L = '0' and omit the length extension. Otherwise, + the sender MUST set L = '1' and include a 16-bit unsigned integer + length immediately after any previous header field. The length + includes all header and data bytes and is written into the length + field in network byte order. + + Receivers examine the L bit to determine whether the length field + is present. If L = '1', the receiver reads the length field to + determine the length of the TBRPF packet, including the TBRPF + packet header. Receivers discard any TBRPF packet if neither the + underlying delivery service nor the TBRPF packet header provide + packet length. + + I - Router ID (RID) included + If the underlying delivery service encodes the sender's RID, the + sender MAY set I = '0' and omit the RID field. Otherwise, the + sender MUST set I = '1' and include a 4-octet RID in network byte + order immediately after any previous header fields. The RID + option provides a mechanism for implicit network-level address + resolution. A receiver that detects a RID option SHOULD create a + binding between the RID and the source address that appears in the + network-level header. + + Reserved + Reserved for future use; MUST be zero. + +6.2. TBRPF Packet Body + + The TBRPF packet body consists of the concatenation of one or more + TBRPF messages (and padding options where necessary). Messages and + padding options within the TBRPF packet body are encoded using the + following format: + + +-+-+-+-+-+-+-+-+- - - - - + |OPTIONS| TYPE | VALUE + +-+-+-+-+-+-+-+-+- - - - - + + + +Ogier, et al. Experimental [Page 11] + +RFC 3684 TBRPF February 2004 + + + OPTIONS (4 bits) + Four option bits that depend on TYPE. + + TYPE (4 bits) + Identifier for message type or padding option. + + VALUE + Variable-length field. (Format and length depend on TYPE, as + described in the following sections.) + + The sequence of elements MUST be processed strictly in the order they + appear within the TBRPF packet body; a receiver must not, for + example, scan through the packet body looking for a particular type + of element prior to processing all preceding elements [2]. TBRPF + packet elements include padding options and messages as described + below. + +6.2.1. Padding Options (TYPE = 0 thru 1) + + Senders MAY insert two types of padding options where necessary, + e.g., to satisfy alignment requirements for other elements [2]. + Padding options may occur anywhere within the TBRPF packet body. The + following two padding options are defined: + + Pad1 option (TYPE = 0) + + +-+-+-+-+-+-+-+-+ + | 0 | 0 | + +-+-+-+-+-+-+-+-+ + + The Pad1 option inserts one octet of padding into the TBRPF packet + body; the VALUE field is omitted. If more than one octet of padding + is required, the PadN option (described next) should be used, rather + than multiple Pad1 options. + + PadN option (TYPE = 1) + + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - - - - + | 0 | 1 | LEN | Zero-valued Octets + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - - - - + + The PadN option inserts two or more octets of padding into the TBRPF + packet body. The first octet of the VALUE field contains an 8-bit + unsigned integer length containing a value between 0 - 253 which + specifies the number of zero-valued octets that immediately follow, + yielding a maximum total of 255 padding octets. + + + + + +Ogier, et al. Experimental [Page 12] + +RFC 3684 TBRPF February 2004 + + +6.2.2. Messages (TYPE = 2 thru 10) + + Additional message types are described as they occur in the following + sections. Senders encode messages as specified by the individual + message formats. Receivers detect errors in message construction, + e.g., messages with unrecognized types, messages with a non-integral + number of elements, or with fewer elements than indicated, etc. In + all cases, upon detecting an error, the receiver MUST discontinue + processing the current TBRPF packet and discard any unprocessed + elements. + +7. TBRPF Neighbor Discovery + + This section describes the TBRPF Neighbor Discovery (TND) protocol, + which allows each node to quickly detect bidirectional links (I,J) + between a local interface I and a neighbor interface J, and to + quickly detect the loss of such links. The interface between TND and + the routing module is defined by the neighbor table maintained by TND + and the three procedures Link_Up(I,J), Link_Down(I,J), and + Link_Change(I,J), which are called by TND to announce a new link, the + loss of a link, and a change in the metric of a link, respectively. + +7.1. HELLO Message Format + + The HELLO message has the following three subtypes: + + - NEIGHBOR REQUEST (TYPE = 2) + - NEIGHBOR REPLY (TYPE = 3) + - NEIGHBOR LOST (TYPE = 4) + + Each HELLO subtype has the following format: + + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 0 | TYPE | HSEQ | Pri | n | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Neighbor Interface Address (1) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Neighbor Interface Address (2) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ~ ... ~ + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Neighbor Interface Address (n) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + HSEQ (8 bits) + The HELLO sequence number. + + + + + +Ogier, et al. Experimental [Page 13] + +RFC 3684 TBRPF February 2004 + + + Pri (4 bits) + This field indicates the sending node's relay priority, which is + an integer between 0 and 15. A node with a higher relay priority + is more likely to be selected as the next hop on a route. The + value 0 is reserved for non-relay nodes, i.e., nodes that should + never forward packets originating from other nodes. A router in + normal operation SHOULD have a relay priority equal to 7. A + router can change its relay priority dynamically, e.g., when its + power supply becomes critical. + + n (12 bits) + The number of 32-bit neighbor interface addresses in the message. + + A HELLO message is the concatenation of a NEIGHBOR REQUEST message, a + NEIGHBOR REPLY message, and a NEIGHBOR LOST message, where each of + the last two messages is omitted if its list of neighbor interface + addresses is empty. Thus, a HELLO message always includes a + (possibly empty) NEIGHBOR REQUEST. + +7.2. Neighbor Table + + Each node maintains, for each of its local interfaces I, a neighbor + table, which stores state information for each neighbor interface J + from which HELLO messages have recently been received by interface I. + The entry for neighbor interface J, in the neighbor table for I, + contains the following variables: + + nbr_rid(I,J) - The router ID of the node associated with neighbor + interface J. + + nbr_status(I,J) - The current status of the link (I,J), which can + be LOST, 1-WAY, or 2-WAY. + + nbr_life(I,J) - The amount of time (in seconds) remaining before + nbr_status(I,J) must be changed to LOST if no further HELLO + message from interface J is received. Set to NBR_HOLD_TIME + whenever a HELLO is received on interface I from interface J. + + nbr_hseq(I,J) - The value of HSEQ in the last HELLO message + received on interface I from interface J. Used to determine the + number of HELLOs that have been missed. + + nbr_count(I,J) - The remaining number of times a NEIGHBOR REQUEST/ + REPLY/LOST message containing J must be sent on interface I. + + hello_history(I,J) - A list of the sequence numbers of the last + HELLO_ACQUIRE_WINDOW HELLO messages received on interface I from + interface J. + + + +Ogier, et al. Experimental [Page 14] + +RFC 3684 TBRPF February 2004 + + + nbr_metric(I,J) - An optional measure of the quality of the link + (I,J), represented by an integer between 1 and 255, where smaller + values indicate better quality. Defaults to 1 if not used. + + nbr_pri(I,J) - The relay priority of the node associated with + interface J. + + The entry for interface J in the neighbor table for interface I may + be deleted if no HELLO has been received on interface I from + interface J within the last 2*NBR_HOLD_TIME seconds. (It is kept + while NEIGHBOR LOST messages containing J are being transmitted.) + The absence of an entry for a given interface J is equivalent to an + entry with nbr_status(I,J) = LOST and hello_history(I,J) = NULL. + + The three possible values of nbr_status(I,J) have the following + informal meanings (the exact meanings are defined by the protocol): + + LOST + Interface I has not received a sufficient number of HELLO messages + recently from Interface J. + + 1-WAY + Interface I has received a sufficient number of HELLO messages + recently from Interface J, but the link is not 2-WAY. + + 2-WAY + Interfaces I and J have both received a sufficient number of HELLO + messages recently from each other. + +7.3. Sending HELLO Messages + + Each node MUST send, on each local interface, at least one HELLO + message per HELLO_INTERVAL. HELLO messages MAY be sent more + frequently than this (e.g., for faster detection of topology + changes). However, to avoid the possibility that HSEQ wraps around + to the same number before a neighbor that stops receiving HELLO + messages changes the status of the link to LOST, the time between two + consecutive HELLO messages (sent on a given interface) MUST be + greater than NBR_HOLD_TIME/128 second. + + To avoid synchronization of control messages, which can result in + collisions, HELLO messages SHOULD NOT be transmitted at equal + intervals. To achieve this, a node MAY choose the interval between + consecutive HELLO messages to be HELLO_INTERVAL - jitter, where + jitter is selected randomly from the interval [0, MAX_JITTER]. + + + + + + +Ogier, et al. Experimental [Page 15] + +RFC 3684 TBRPF February 2004 + + + Each HELLO message always includes a NEIGHBOR REQUEST message, even + if its list of neighbor addresses is empty. The NEIGHBOR REQUEST + message includes the sequence number HSEQ, which is incremented by 1 + (modulo 256) each time a HELLO is sent. The HELLO message also + includes a NEIGHBOR REPLY message if its list of neighbor addresses + is nonempty, and a NEIGHBOR LOST message if its list of neighbor + addresses is nonempty. The contents of these three messages are + determined by the following steps at node i for each interface I: + + 1. For each interface J such that nbr_status(I,J) = LOST and + nbr_count(I,J) > 0, include J in the NEIGHBOR LOST message and + decrement nbr_count(I,J). + + 2. For each interface J such that nbr_status(I,J) = 1-WAY and + nbr_count(I,J) > 0, include J in the NEIGHBOR REQUEST message and + decrement nbr_count(I,J). + + 3. For each interface J such that nbr_status(I,J) = 2-WAY and + nbr_count(I,J) > 0, include J in the NEIGHBOR REPLY message and + decrement nbr_count(I,J). + + If a node restarts, so that all entries are removed from the neighbor + table, then the node MUST ensure that (for each interface) at least + one of the following two conditions is satisfied: + + 1. The difference between the transmission times of the first HELLO + sent after restarting and the last HELLO sent before restarting is + at least 2*NBR_HOLD_TIME. + + 2. Letting HSEQ_LAST denote the sequence number of the last HELLO + that was sent before restarting, the sequence number of the first + HELLO sent after restarting is set to HSEQ_LAST + NBR_HOLD_COUNT + + 1 (modulo 256). + + Either of these conditions ensures that, if node i with interface I + restarts, then each neighbor of node i that has a link (J,I) to + interface I will set the status of the link to LOST. + +7.4. Processing a Received HELLO Message + + When a node receives a HELLO message, it obtains the IP address of + the sending interface from the IP header. If the TBRPF packet header + of the received HELLO contains the RID option, then the RID of the + sending node is obtained from the TBRPF packet header; otherwise it + is equal to the IP address of the sending interface. If node i (with + RID equal to i) receives a HELLO message on interface I, sent by node + j (with RID equal to j) on interface J, with sequence number HSEQ and + relay priority PRI, then node i performs the following steps: + + + +Ogier, et al. Experimental [Page 16] + +RFC 3684 TBRPF February 2004 + + + 1. If the neighbor table for interface I does not contain an entry + for interface J, create one with nbr_rid(I,J) = j, nbr_status(I,J) + = LOST (temporarily), nbr_count(I,J) = 0, and nbr_hseq(I,J) = + HSEQ. + + 2. Update hello_history(I,J) to reflect the received HELLO message. + If nbr_hseq(I,J) > HSEQ (due to wraparound), set nbr_hseq(I,J) = + nbr_hseq(I,J) - 256. + + 3. If nbr_status(I,J) = LOST and hello_history(I,J) indicates that + HELLO_ACQUIRE_COUNT of the last HELLO_ACQUIRE_WINDOW HELLO + messages from interface J have been received: + + a. If interface I does not appear in the NEIGHBOR REQUEST list or + the NEIGHBOR REPLY list, set nbr_status(I,J) = 1-WAY and + nbr_count(I,J) = NBR_HOLD_COUNT. + + b. Else, set nbr_status(I,J) = 2-WAY and nbr_count(I,J) = + NBR_HOLD_COUNT. Call Link_Up(I,J). + + 4. Else, if nbr_status(I,J) = 1-WAY: + + a. If HSEQ - nbr_hseq(I,J) > NBR_HOLD_COUNT, then set + nbr_status(I,J) = LOST and nbr_count(I,J) = NBR_HOLD_COUNT. + + b. Else, if interface I appears in the NEIGHBOR REQUEST list, set + nbr_status(I,J) = 2-WAY and nbr_count(I,J) = NBR_HOLD_COUNT. + Call Link_Up(I,J). + + c. Else, if interface I appears in the NEIGHBOR REPLY list, set + nbr_status(I,J) = 2-WAY and nbr_count(I,J) = 0. Call + Link_Up(I,J). + + 5. Else, if nbr_status(I,J) = 2-WAY: + + a. If interface I appears in the NEIGHBOR LOST list, set + nbr_status(I,J) = LOST and nbr_count(I,J) = 0. Call + Link_Down(I,J). + + b. Else, if HSEQ - nbr_hseq(I,J) > NBR_HOLD_COUNT, set + nbr_status(I,J) = LOST and nbr_count(I,J) = NBR_HOLD_COUNT. + Call Link_Down(I,J). + + c. Else, if interface I appears in the NEIGHBOR REQUEST list and + nbr_count(I,J) = 0, set nbr_count(I,J) = NBR_HOLD_COUNT. + + 6. Set nbr_life(I,J) = NBR_HOLD_TIME, nbr_hseq(I,J) = HSEQ, and + nbr_pri(I,J) = PRI. + + + +Ogier, et al. Experimental [Page 17] + +RFC 3684 TBRPF February 2004 + + +7.5. Expiration of Timer nbr_life + + Upon expiration of the timer nbr_life(I,J) in the neighbor table for + interface I, node i performs the following step: + + If nbr_status(I,J) = 1-WAY or 2-WAY, set nbr_status(I,J) = LOST + and nbr_count(I,J) = NBR_HOLD_COUNT. Call Link_Down(I,J). + +7.6. Link-Layer Failure Notification + + Some link-layer protocols (e.g., IEEE 802.11) provide a notification + that the link to a particular neighbor has failed, e.g., after + attempting a maximum number of retransmissions. If such an + notification is provided by the link layer, then node i SHOULD + perform the following step upon receipt of a link-layer failure + notification for the link (I,J) from local interface I to neighbor + interface J: + + If nbr_status(I,J) = 2-WAY, set nbr_status(I,J) = LOST and + nbr_count(I,J) = NBR_HOLD_COUNT. Call Link_Down(I,J). + +7.7. Optional Link Metrics + + Each node MAY maintain and update one or more link metrics for each + link (I,J), representing the quality of the link, e.g., signal + strength, number of HELLOs received over some time interval, + reliability, stability, bandwidth, etc. Each node MUST declare a + neighbor to be LOST if either NBR_HOLD_COUNT HELLOs are missed or if + no HELLO is received within NBR_HOLD_TIME seconds; however, a node + MAY also declare a neighbor to be LOST based on a link metric being + above or below some threshold. Each node MUST receive at least + HELLO_ACQUIRE_COUNT of the last HELLO_ACQUIRE_WINDOW HELLOs from a + neighbor before declaring the neighbor 1-WAY or 2-WAY; however, a + node MAY require an additional condition based on a link metric being + above or below some threshold, before declaring the neighbor 1-WAY or + 2-WAY. This document does not specify any particular link metric, + but an implementation of TBRPF that uses such metrics is considered + to be compliant with this specification. + + The function Link_Change(I,J) is called to alert the routing module + whenever nbr_metric(I,J) changes significantly. If the configurable + parameter USE_METRICS is equal to 1, then the metrics nbr_metric(I,J) + are used by the routing module for route computation, as described in + Section 8. + + + + + + + +Ogier, et al. Experimental [Page 18] + +RFC 3684 TBRPF February 2004 + + +7.8. Configurable Parameters + + This section lists the parameters used by the neighbor discovery + protocol, and their proposed default values. All nodes MUST be + configured to have the same value for all of the following + parameters. + + Parameter Name Default Value + -------------- ------------- + HELLO_INTERVAL 1 second + MAX_JITTER 0.1 second + NBR_HOLD_TIME 3 seconds + NBR_HOLD_COUNT 3 + HELLO_ACQUIRE_COUNT 2 + HELLO_ACQUIRE_WINDOW 3 + +8. TBRPF Routing Module + + This section describes the TBRPF routing module, which performs + topology discovery and route computation. + +8.1. Conceptual Data Structures + + In addition to the information required by the neighbor discovery + protocol, each node running TBRPF maintains a topology table TT, + which stores information for each known node and link in the network. + Nodes are identified by their RIDs, i.e., node u is the node whose + RID is u. The following information is stored in the topology table + at node i for each node u and link (u,v): + + T(u,v) - Equal to 1 if (u,v) is in node i's source tree T, and 0 + otherwise. The previous source tree is also maintained as old_T. + + RN(u) - Equal to 1 if u is in node i's reported node set RN, and 0 + otherwise. The previous reported node set is also maintained as + old_RN. + + RT(u,v) - Equal to 1 if (u,v) is in node i's reported subtree RT, + and 0 otherwise. Since RT is defined as the set of links (u,v) in + T such that u is in RN, this variable need not be maintained + explicitly. + + TG(u,v) - Equal to 1 if (u,v) is in node i's topology graph TG, + and 0 otherwise. + + N - The set of 2-way neighbors of node i. + + + + + +Ogier, et al. Experimental [Page 19] + +RFC 3684 TBRPF February 2004 + + + r(u,v) - The list of neighbors that are reporting link (u,v) in + their reported subtree RT. The set of links (u,v) reported by + neighbor j is denoted RT_j. + + r(u) - The list of neighbors that are reporting node u in their + reported node set RN. + + p(u) - The current parent for node u, equal to the next node on + the shortest path to u. + + pred(u) - The node that is the predecessor of node u in the source + tree T. Equal to NULL if node u is not reachable. + + pred(j,u) - The node that is the predecessor of node u in the + subtree RT_j reported by neighbor j. + + d(u) - The length of the shortest path to node u. If USE_METRICS + = 0, d(u) is the number of hops to node u. + + reported(u,v) - Equal to 1 if link (u,v) in TG is reported by + p(u), and 0 otherwise. + + tg_expire(u) - Expiration time for links (u,v) in TG. + + rt_expire(j,u) - Expiration time for links (u,v) in RT_j. + + nr_expire(u,v) - Expiration time for a link (u,v) in TG such that + reported(u,v) = 0. Such non-reported links can be used + temporarily during rerouting. + + metric(j,u,v) - The metric for link (u,v) reported by neighbor j. + + metric(u,v) - The metric for link (u,v) in TG. For a neighbor j, + metric(i,j) is the minimum of nbr_metric(I,J) over all 2-WAY links + (I,J) from i to j. + + cost(u,v) - The cost for link (u,v), equal to metric(u,v) if + USE_METRICS = 1, and otherwise equal to 1. + + local_if(j) - The address of the preferred local interface for + forwarding packets to neighbor j. + + nbr_if(j) - The address of the preferred interface of neighbor j. + + + + + + + + +Ogier, et al. Experimental [Page 20] + +RFC 3684 TBRPF February 2004 + + + The routing table consists of a list of tuples of the form (rt_dest, + rt_next, rt_dist, rt_if_id), where rt_dest is the destination IP + address or prefix, rt_next is the interface address of the next hop + of the route, rt_dist is the length of the route, and rt_if_id is the + ID of the local interface through which the next hop can be reached. + + Each node also maintains three tables that describe associated IP + addresses or prefixes: the "interface table", which associates + interface IP addresses with router IDs, the "host table", which + associates host IP addresses with router IDs, and the "network prefix + table", which associates network prefixes with router IDs. + + The "interface table" consists of tuples of the form (if_addr, + if_rid, if_expire), where if_addr is an interface IP address + associated with the router with RID = if_rid, and if_expire is the + time at which the tuple expires and MUST be removed. The interface + table at a node does NOT contain an entry in which if_addr equals the + node's own RID; thus, a node does not advertise its own RID as an + associated interface. + + The "host table" consists of tuples of the form (h_addr, h_rid, + h_expire), where h_addr is a host IP address associated with the + router with RID = h_rid, and h_expire is the time at which the tuple + expires and MUST be removed. + + The "network prefix table" consists of tuples of the form + (net_prefix, net_length, net_rid, net_expire), where net_prefix and + net_length describe a network prefix associated with the router with + RID = net_rid, and net_expire is the time at which the tuple expires + and MUST be removed. A MANET may be configured as a "stub" network, + in which case one or more gateway routers may announce a default + prefix such that net_prefix = net_length = 0. Two copies of each + table are kept: an "old" copy that was last reported to neighbors, + and the current copy that is updated when association messages are + received. + +8.2. TOPOLOGY UPDATE Message Format + + The TOPOLOGY UPDATE message has the two formats, depending on the + size of the message. The normal format is as follows, and is used + whenever n, NRL, and NRNL all do not exceed 255: + + + + + + + + + + +Ogier, et al. Experimental [Page 21] + +RFC 3684 TBRPF February 2004 + + + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |M|D|0|0| TYPE | n | NRL | NRNL | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Router ID of u | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Router ID of v_1 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ~ ... ~ + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Router ID of v_n | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | metric 1 | metric 2 | ... | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | ... | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + The message body contains the n+1 router IDs for nodes u, + v_1,...,v_n, which represent the links (u,v_1),..., (u,v_n). The + first NRL of the v_k are reported leaf nodes, the next NRNL of the + v_k are reported non-leaf nodes, and the last n - (NRL+NRNL) of the + v_k are not reported (not in RN). + + The M bit indicates whether or not link metrics are included in the + message. If M = 1, then a 1-octet metric is included for each of the + links (u,v_1),..., (u,v_n), following the last router ID. + + The D bit indicates whether or not implicit deletion is used, and + must be set to 1 if and only if IMPLICIT_DELETION = 1. + + The TOPOLOGY UPDATE message has the following three subtypes: + + FULL (TYPE = 5) + A FULL update (FULL, n, NRL, NRNL, u, v_1,..., v_n) reports that + the links (u,v_1),..., (u,v_n) belong to the sending router's + reported subtree RT, and that RT contains no other links with tail + u. + + ADD (TYPE = 6) + An ADD update (ADD, n, NRL, NRNL, u, v_1,..., v_n) reports that + the links (u,v_1),..., (u,v_n) have been added to the sending + router's reported subtree RT. + + DELETE (TYPE = 7) + A DELETE update (DELETE, n, NRL, NRNL, u, v_1,..., v_n) reports + that the links (u,v_1),..., (u,v_n) have been deleted from the + sending router's reported subtree RT. + + + + + +Ogier, et al. Experimental [Page 22] + +RFC 3684 TBRPF February 2004 + + + If n, NRL, or NRNL is larger than 255, then the long format of the + TOPOLOGY UPDATE message is used, in which the first 4 octets of the + normal format are replaced by the following 8 octets: + + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |M|D|1|0| TYPE | 0 | n | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | NRL | NRNL | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +8.3. Interface, Host, and Network Prefix Association Message Formats + + The INTERFACE ASSOCIATION (TYPE = 8) and HOST ASSOCIATION (TYPE = 9) + messages have the following format: + + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |ST | 0 | TYPE | Reserved | n | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Router ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | IP Address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | IP Address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | ... | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + The message body contains the router ID of the originating node, and + n IP addresses of interfaces (TYPE = 8) or hosts (TYPE = 9) that are + associated with the router ID. The ST field is defined below. + + The NETWORK PREFIX ASSOCIATION message (TYPE = 10) has the following + format: + + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |ST | 0 | TYPE | Reserved | n | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Router ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | PrefixLength | Prefix byte 1 | Prefix byte 2 | ... | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | ... | PrefixLength | Prefix byte 1 | Prefix byte 2 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | ... | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + + + + +Ogier, et al. Experimental [Page 23] + +RFC 3684 TBRPF February 2004 + + + The message body contains the router ID of the originating node, and + n network prefixes, each specified by a 1-octet prefix length + followed immediately by the prefix, using the minimum number of whole + octets required. To minimize overhead, the prefix lengths and + prefixes are NOT aligned along word boundaries. + + The INTERFACE ASSOCIATION, HOST ASSOCIATION, and NETWORK PREFIX + ASSOCIATION messages each have the following three subtypes (similar + to those for the TOPOLOGY UPDATE message): + + FULL (ST = 0) + Indicates that this is a FULL update that includes all interface + addresses, host addresses, or network prefixes associated with the + given router ID. + + ADD (ST = 1) + Indicates that the included IP addresses or network prefixes are + associated with the router ID, but may not include all such IP + addresses or network prefixes. + + DELETE (ST = 2) + Indicates that the included IP addresses or network prefixes are + no longer associated with the router ID. + +8.4. TBRPF Routing Operation + + This section describes the operation of the TBRPF routing module. + The operation is divided into the following subsections: periodic + processing, updating the source tree and topology graph, updating the + routing table, updating the reported node set, generating periodic + updates, generating differential updates, processing topology + updates, expiring topology information, optional reporting of + redundant topology information, local topology changes, generating + association messages, processing association messages, and non-relay + operation. The operation is described in terms of procedures (e.g., + Update_All), which may be executed periodically or in response to + some event, and may be called by other procedures. In all + procedures, node i is the node executing the procedure. + +8.4.1. Periodic Processing + + Each node executes the procedure Update_All() periodically, at least + once every DIFF_UPDATE_INTERVAL seconds, which is typically equal to + HELLO_INTERVAL. This procedure is defined as follows: + + + + + + + +Ogier, et al. Experimental [Page 24] + +RFC 3684 TBRPF February 2004 + + +Update_All() + 1. For each interface I, create empty message list msg_list(I). + 2. For each interface I, generate a HELLO message for + interface I and add it to msg_list(I). + 3. Expire_Links(). + 4. Update_Source_Tree(). + 5. Update_Routing_Table(). + 6. If REPORT_FULL_TREE = 0, execute Update_RN(); otherwise (the + full source tree is reported) Update_RN_Simple(). + 7. If current_time >= next_periodic: + 7.1. Generate_Periodic_Update(). + 7.2. Set next_periodic = current_time + PER_UPDATE_INTERVAL. + 8. Else, Generate_Diff_Update(). + 9. Generate_Association_Messages(). + 10. For each interface I, send the msg_list(I) on interface I. + 11. Set old_T = T and old_RN = RN. + +8.4.2. Updating the Source Tree and Topology Graph + + The procedure Update_Source_Tree() is a variant of Dijkstra's + algorithm, which is called periodically and in response to topology + changes, to update the source tree T and the topology graph TG. This + algorithm computes shortest paths subject to two link cost penalties. + The penalty NON_REPORT_PENALTY is added to the cost of links (u,v) + that are not currently reported by the parent p(u) so that, whenever + possible, a link (u,v) is included in T only if it is currently + reported by the parent. To allow immediate rerouting when p(u) + changes, it may be necessary to temporarily use a link (u,v) that is + not currently reported by the new parent. The penalty + NON_TREE_PENALTY is added to the cost of links (u,v) that are not + currently in T, to reduce the number of changes to T. When there + exist multiple paths of equal cost to a given node, router ID is used + to break ties. + + The algorithm is defined as follows (where node i is the node + executing the procedure): + +Update_Source_Tree() + 1. For each node v in TT, set d(v) = INFINITY, pred(v) = NULL, + old_p(v) = p(v), and p(v) = NULL. + + 2. Set d(i) = 0, p(i) = i, pred(i) = i. + + 3. Set S = {i}. (S is the set of labeled nodes.) + + 4. For each node j in N, set d(j) = c(i,j), pred(j) = i, + and p(j) = j. (If USE_METRICS = 0, then all link costs + c(i,j) are 1.) + + + +Ogier, et al. Experimental [Page 25] + +RFC 3684 TBRPF February 2004 + + + 5. While there exists an unlabeled node u in TT such that + d(u) < INFINITY: + 5.1. Let u be an unlabeled node in TT with minimum d(u). + (A heap should be used to find u efficiently.) + 5.2. Add u to S (u becomes labeled). + 5.3. If p(u) is not equal to old_p(u) (parent has changed): + 5.3.1. For each link (u,v) in TG with tail u, if + reported(u,v) = 1, set reported(u,v) = 0 and set + nr_expire(u,v) = current_time + PER_UPDATE_INTERVAL. + 5.3.2. If p(u) is in r(u) (p(u) is reporting u): + 5.3.2.1. Set tg_expire(u) = rt_expire(p(u),u). + 5.3.2.2. If p(u) = u (u is a neighbor), remove all links + (u,v) with tail u from TG. + 5.3.2.3. For each link (u,v) with p(u) in r(u,v): + 5.3.2.3.1. Add (u,v) to TG and set reported(u,v) = 1. + 5.3.2.3.2. Set metric(u,v) = metric(p(u),u,v). + If USE_METRICS=1, set c(u,v)=metric(u,v). + 5.4. For each node v such that (u,v) is in TG: + 5.4.1. If reported(u,v) = 0, + set cost = c(u,v) + NON_REPORT_PENALTY. + (This penalizes (u,v) if not reported by p(u).) + 5.4.2. Else, if p(u) = u AND u is not in r(v), + set cost = c(u,v) + NON_REPORT_PENALTY. + (This penalizes (u,v) if u is a neighbor and is not + reporting v.) + 5.4.3. If (u,v) is not in old_T and p(u) != u, + set cost = cost + NON_TREE_PENALTY. + 5.4.4. If (d(u) + cost, u) is lexicographically less + than (d(v), pred(v)), set d(v) = d(u) + c(u,v), + pred(v) = u, and p(v) = p(u). + + 6. Update the source tree T as follows: + 6.1. Remove all links from T. + 6.2. For each node u other than i such that pred(u) is not + NULL, add the link (pred(u), u) to T. + +8.4.3. Updating the Routing Table + + The routing table is updated following any change to the source tree + or the association tables (interface table, host table, or network + prefix table). The routing table is updated according to procedure + Update_Routing_Table(), which is defined as follows: + +Update_Routing_Table() + + 1. Remove all tuples from the routing table. + + + + + +Ogier, et al. Experimental [Page 26] + +RFC 3684 TBRPF February 2004 + + + 2. For each node u in TT (other than this node) such that p(u) is + not NULL, add the tuple (rt_dest, rt_next, rt_dist, rt_if_id) + to the routing table, where: + rt_dest = u, + rt_if_id = local_if(p(u)), + rt_next = nbr_if(p(u)), + rt_dist = d(u). + + 3. For each tuple (if_addr, if_rid, if_expire) in the interface + table, if a routing table entry (rt_dest, rt_next, rt_dist, + rt_if_id) exists such that rt_dest = if_rid, add the tuple + (if_addr, rt_next, rt_dist, rt_if_id) to the routing table. + + 4. For each tuple (h_addr, h_rid, h_expire) in the host table, if + there exists a routing table entry (rt_dest, rt_next, rt_dist, + rt_if_id) such that rt_dest = h_rid, add the tuple (h_addr, + rt_next, rt_dist, rt_if_id) to the routing table, unless an + entry already exists with the same value for h_addr and a + lexicographically smaller value for (rt_dist, rt_dest). + + 5. For each tuple (net_prefix, net_length, net_rid, net_expire) + in the network prefix table, if there exists a routing table + entry (rt_dest, rt_next, rt_dist, rt_if_id) such that + rt_dest = net_rid, add the tuple (net_prefix/net_length, + rt_next, rt_dist, rt_if_id) to the routing table, unless an + entry already exists with the same value for + net_prefix/net_length and a lexicographically smaller value + for (rt_dist, rt_dest). + +8.4.4. Updating the Reported Node Set + + Recall that the reported subtree RT is defined to be the set of links + (u,v) in T such that u is in the reported node set RN. Each node + updates its RN immediately before generating periodic or differential + topology updates. + + If REPORT_FULL_TREE = 1 (so that a node reports its entire source + tree), then RN simply consists of all reachable nodes, i.e., all + nodes u such that pred(u) is not NULL. The procedure that computes + RN in this manner is called Update_RN_Simple(). The rest of this + section describes how RN is computed assuming REPORT_FULL_TREE = 0. + + A node first determines which of its neighbors belong to RN. Node i + includes a neighbor j in RN if and only if node i determines that one + of its neighbors may select i to be its next hop on its shortest path + to j. To make this determination, node i computes the shortest + paths, up to 2 hops, from each neighbor to each other neighbor, using + only neighbors (or node i itself) as an intermediate node, and using + + + +Ogier, et al. Experimental [Page 27] + +RFC 3684 TBRPF February 2004 + + + relay priority and router ID to break ties. If a link metric is + used, then shortest paths are computed with respect to the link + metric; otherwise min-hop paths are computed. + + After a node determines which neighbors are in RN, each node u (other + than node i) in the topology table is included in RN if and only if + the next hop p(u) to u is in RN. Equivalently, node u is included in + RN if and only if u is in the subtree of T rooted at some neighbor j + that is in RN. Thus, the reported subtree RT includes the subtrees + of T that are rooted at neighbors in RN. Node i also includes itself + in RN; thus RT also includes all local links (i,j) to neighbors j. + + The precise procedure for updating RN is defined as follows: + +Update_RN() + 1. Set RN = empty. + 2. For each neighbor s in N such that s is in r(s), i.e., + such that s is reporting itself: + (Initialize to run Dijkstra for source s, for 2 hops.) + 2.1. For each node j in N+{i}, set dist(j) = INFINITY and + par(j) = NULL. + 2.2. Set dist(s) = 0 and par(s) = s. + 2.3. For each node j in N+{i} such that (s,j) is in TG: + 2.3.1. Set dist(j) = metric(s,j), par(j) = j. + 2.3.2. For each node k in N such that (j,k) is in TG: + 2.3.2.1. Set cost = metric(j,k). + 2.3.2.2. If (dist(j) + cost, nbr_pri(j), j) + is lexicographically less than + (dist(k), nbr_pri(par(k)), par(k)), + set dist(k) = dist(j) + cost and par(k) = j. + 2.4. For each neighbor j in N, add j to RN if par(j) = i. + 3. Add i to RN. (Node i is always in RN.) + 4. For each node u in the topology table, add u to RN if p(u) + is in RN. + + In some cases it may be desirable to limit the radius (number of + hops) that topology information is propagated. Since each TBRPF + packet is sent only to immediate (1-hop) neighbors, this cannot be + achieved by using a time-to-live field. Instead, the propagation of + topology information can be limited to a radius of K hops by limiting + RN (at all nodes) to include only nodes that are at most K-1 hops + away. Assuming min-hop routing is used, so that d(u) is the number + of hops to node u, this can be done by modifying Step 4 of + Update_RN() as follows: + + 4. For each node u in the topology table, add u to RN if p(u) + is in RN and d(u) <= K-1. + + + + +Ogier, et al. Experimental [Page 28] + +RFC 3684 TBRPF February 2004 + + +8.4.5. Generating Periodic Updates + + Every PER_UPDATE_INTERVAL seconds, each node generates and transmits, + on all interfaces, a set of FULL TOPOLOGY UPDATE messages (one + message for each node in RN that is not a leaf of T), which describes + the reported subtree RT. Whenever possible, these messages are + included in a single packet, in order to minimize the number of + control packets transmitted. + + Each topology update message contains the router IDs for n+1 nodes u, + v_1,...,v_n, which represent the n links (u,v_1),..., (u,v_n). The n + head nodes v_1,..., v_n are divided into three lists in order to + convey additional information and thus reduce the number of messages + that must be generated. In particular, the first NRL head nodes are + leaves of T, thus avoiding the need to generate separate topology + update messages for leaf nodes u. Similarly, the last n-(NRL+NRNL) + head nodes are not in RN, thus avoiding the need to generate separate + topology update messages for nodes u that have been removed from RN. + + Periodic update messages are generated according to procedure + Generate_Periodic_Update(), defined as follows (where node i is the + node executing the procedure): + + Generate_Periodic_Update() + For each node u in RN (including node i) that is not a leaf of T, + add the update (FULL, n, NRL, NRNL, u, v_1,..., v_n) + to msg_list(I) for each interface I, where: + + (a) v_1,..., v_n are the nodes v such that (u,v) is in T, + the first NRL of these are nodes in RN that are leaves of T, + the next NRNL of these are nodes in RN that are not leaves + of T, and the last n-(NRL+NRNL) of these are not in RN. + + (b) If USE_METRICS = 1, then the M (metrics) bit is set to 1 and + the link metrics metric(u,v_1),..., metric(u,v_n) are + included in the message. + +8.4.6. Generating Differential Updates + + Every DIFF_UPDATE_INTERVAL seconds, if it is not time to generate a + periodic update, and if RT has changed since the last time a topology + update was generated, a set of TOPOLOGY UPDATE messages describing + the changes to RT is generated and transmitted on all interfaces. + These messages are constructed according to procedure + Generate_Differential_Update(), defined as follows: + + + + + + +Ogier, et al. Experimental [Page 29] + +RFC 3684 TBRPF February 2004 + + +Generate_Differential_Update() + For each node u in RN: + 1. If u is not in old_RN (u was added to RN) and is not a leaf + of T, add the update (FULL, n, NRL, NRNL, u, v_1,..., v_n) + to msg_list(I) for each I, where: + (a) v_1,..., v_n, NRL, and NRNL are defined as above for + periodic updates. + (b) If USE_METRICS = 1, then the M (metrics) bit is set to 1 + and the link metrics metric(u,v_1),..., metric(u,v_n) + are included in the message. + + 2. Else, if u is in old_RN and is not a leaf of T: + 2.1. Let v_1,..., v_n be the nodes v such that (u,v) is in T + AND at least one of the following 3 conditions holds: + (a) (u,v) is not in old_T, or + (b) v is in old_RN but not in RN, or + (c) v is a leaf and is in RN but not in old_RN. + 2.2. If this set of nodes is nonempty, add the update + (ADD, n, NRL, NRNL, u, v_1,..., v_n) to msg_list(I) for + each interface I, where: + (a) NRL and NRNL are defined as above. + (b) If USE_METRICS = 1, then the M (metrics) bit is + set to 1 and the link metrics metric(u,v_1),..., + metric(u,v_n) are included in the message. + + 3. If u is in old_RN: + 3.1. Let v_1,..., v_n be the nodes v such that (u,v) is in + old_T but not in TG, and either IMPLICIT_DELETION = 0 + or pred(v) is not in RN (or is NULL). + (If IMPLICIT_DELETION = 1 and pred(v) is in RN, then + the deletion of (u,v) is implied by an ADD update for + another link (w,v).) + 3.2. If this set of nodes is nonempty, add the update + (DELETE, n, u, v_1,..., v_n) to msg_list(I) for each I. + +8.4.7. Processing Topology Updates + + When a packet containing a list (msg_list) of TOPOLOGY UPDATE + messages is received from node j, the list is processed according to + the procedure Process_Updates(j, msg_list), defined as follows. In + particular, this procedure updates TT, TG, and the reporting neighbor + lists r(u) and r(u,v). If any link in T has been deleted from TG, + then Update_Source_Tree() and Update_Routing_Table() are called to + provide immediate rerouting. + +Process_Updates(j, msg_list) + 1. For each update = (subtype, n, NRL, NRNL, u, v_1,..., v_n) + in msg_list: + + + +Ogier, et al. Experimental [Page 30] + +RFC 3684 TBRPF February 2004 + + + 1.1. Create an entry for u in TT if it does not exist. + 1.2. If subtype = FULL, Process_Full_Update(j, update). + 1.3. If subtype = ADD, Process_Add_Update(j, update). + 1.4. If subtype = DELETE, Process_Delete_Update(j, update). + 2. If there exists any link in T that is not in TG: + 2.1. Update_Source_Tree(). + 2.2. Update_Routing_Table(). + +Process_Full_Update(j, update) + 1. Add j to r(u). + 2. Set rt_expire(j,u) = current_time + TOP_HOLD_TIME. + 3. For each link (u,v) s.t. j is in r(u,v): + 3.1. Remove j from r(u,v). + 3.2. If pred(j,v) = u, set pred(j,v) = NULL. + 4. If j = p(u) OR p(u) = NULL: + 4.1. Set tg_expire(u) = current_time + TOP_HOLD_TIME. + 4.2. For each v s.t. (u,v) is in TG, + If reported(u,v) = 1, remove (u,v) from TG. + 5. Process_Add_Update(j, update). + +Process_Add_Update(j, update) + For m = 1,..., n: + ((u,v_m) is the mth link in update.) + 1. Let v = v_m. + 2. Create an entry for v in TT if it does not exist. + 3. Add j to r(u,v). + 4. If j = p(u) OR p(u) = NULL: + 4.1. Add (u,v) to TG. + 4.2. Set reported(u,v) = 1. + 5. If the M (metrics) bit in update is 1: + 5.1. Set metric(j,u,v) to the m-th metric in the update. + 5.2. If j = p(u) OR p(u) = NULL: + 5.2.1. Set metric(u,v) = metric(j,u,v). + 5.2.2. If USE_METRICS = 1, set c(u,v) = metric(u,v). + 6. If the D (implicit deletion) bit in update is 1: + 6.1. Set w = pred(j,v). + 6.2. If (w != NULL AND w != u): + 6.2.1. Remove j from r(w,v). + 6.2.2. If j = p(w), remove (w,v) from TG. + 7. Set pred(j,v) = u. (Set new predecessor.) + 8. If m <= NRL (v = v_m is a reported leaf): + 8.1. Set leaf_update = (FULL, 0, 0, 0, v). + 8.2. Process_Full_Update(j, leaf_update). + 9. If m > NRL + NRNL (v = v_m is not reported by j): + 9.1. Remove j from r(v). + 9.2. Set rt_expire(j,v) = 0. + 9.3. For each node w s.t. j is in r(v,w), + remove j from r(v,w). + + + +Ogier, et al. Experimental [Page 31] + +RFC 3684 TBRPF February 2004 + + + 9.4. If j = p(v), then for each node w s.t. (v,w) is in TG + and reported(v,w) = 1, set reported(v,w) = 0 and set + nr_expire(v,w) = current_time + PER_UPDATE_INTERVAL. + +Process_Delete_Update(j, update) + For m = 1,..., n: + ((u,v_m) is the mth link in update.) + 1. Let v = v_m. + 2. Remove j from r(u,v). + 3. If pred(j,v) = u, set pred(j,v) = NULL. + 4. If j = p(u), remove (u,v) from TG. + +8.4.8. Expiring Topology Information + + Each node periodically checks for outdated topology information based + on the expiration timers tg_expire(u), rt_expire(j,u), and + nr_expire(u,v), and removes any expired entries from TG and from the + lists r(u) and r(u,v). This is done according to the following + procedure Expire_Links(), which is called periodically just before + the source tree is updated. + +Expire_Links() + For each node u in TT other than node i: + 1. If tg_expire(u) < current_time, then for each v s.t. + (u,v) is in TG, remove (u,v) from TG. + 2. Else, for each v s.t. (u,v) is in TG, + if reported(u,v) = 0 AND nr_expire(u,v) < current_time, + remove (u,v) from TG. + 3. For each node j in r(u), if rt_expire(j,u) < current_time: + 3.1. Remove j from r(u). + 3.2. For each link (u,v) s.t. j is in r(u,v), + remove j from r(u,v). + + In addition, the following cleanup steps SHOULD be executed + periodically to remove unnecessary entries from the topology table + TT. A link (u,v) should be removed from TT if it is not in TG and + not in old_T. A node u should be removed from TT if all of the + following conditions hold: r(u) is empty, r(w,u) is empty for all w, + and no link of TG has u as either the head or the tail. + +8.4.9. Optional Reporting of Redundant Topology Information + + Each node is required to report its reported subtree RT to neighbors. + However, each node (independently of the other nodes) MAY report + additional links, e.g., to provide increased robustness in highly + mobile networks. For example, a node may compute any subgraph H of + TG that contains T, and may report the "reported subgraph" RH which + consists of links (u,v) of H such that u is in RN. In this case, + + + +Ogier, et al. Experimental [Page 32] + +RFC 3684 TBRPF February 2004 + + + each periodic update describes RH instead of RT, and each + differential update describes changes to RH. If this option is used, + then the parameter IMPLICIT_DELETION MUST be set to 0, since the + deletion of a link cannot be implied by the addition of another link + if redundant topology information is reported. + +8.4.10. Local Topology Changes + + This section describes the procedures that are followed when the + neighbor discovery module detects a new link, the loss of a link, or + a change in the metric for a link. + + When a link (I,J) from a local interface I to a neighbor interface J + is discovered via the neighbor discovery module, the procedure + Link_Up(I,J) is executed, as defined below. Letting j be the + neighbor node associated with interface J, Link_Up(I,J) adds j to N + (if it does not already belong), updates the preferred local + interface local_if(j) and neighbor interface nbr_if(j) so that the + link from local_if(j) to nbr_if(j) has the minimum metric among all + links from i to j, and updates metric(i,j) to be this minimum metric. + +Link_Up(I,J) + 1. Let j = nbr_rid(I,J). + 2. If j is not in N: + 2.1. Add j to N. + 2.2. Add (i,j) to TG. + 2.3. Set reported(i,j) = 1. + 3. If nbr_metric(I,J) < metric(i,j), set local_if(j) = I, + nbr_if(j) = J, and metric(i,j) = nbr_metric(I,J). + 4. If USE_METRICS = 1, set cost(i,j) = metric(i,j). + + When the loss of a link (I,J) from a local interface I to a neighbor + interface J is detected via the neighbor discovery module, the + procedure Link_Down(I,J) is executed, as defined below. Note that + routes are updated immediately when a link is lost, and if the lost + link is due to a link-layer failure notification, a differential + topology update is sent immediately. + +Link_Down(I,J) + 1. Let j = nbr_rid(I,J). + 2. If there does not exist a link (K,L) from node i to + node j with nbr_status(K,L) = 2-WAY: + 2.1. Remove j from N. + 2.2. Remove (i,j) from TG. + 3. If j is in N: + 3.1. Let (K,L) be a link from i to j such that + nbr_metric(K,L) is the minimum metric among + all links from i to j. + + + +Ogier, et al. Experimental [Page 33] + +RFC 3684 TBRPF February 2004 + + + 3.2. Set local_if(j) = K, nbr_if(j) = L, and + metric(i,j) = nbr_metric(K,L). + 3.3. If USE_METRICS = 1, set cost(i,j) = metric(i,j). + 5. Update_Source_Tree(). + 6. Update_Routing_Table(). + 7. If j is not in N and lost link is due to link-layer failure + notification: + 7.1. If (REPORT_FULL_TREE = 0) Update_RN(). + 7.2. Else, Update_RN_Simple(). + 7.3. Set msg_list = empty. + 7.4. Generate_Diff_Update(). + 7.5. Send msg_list on all interfaces. + 7.6. Set old_T = T and old_RN = RN. + + If the metric of a link (I,J) from a local interface I to a neighbor + interface J changes via the neighbor discovery module, the following + procedure Link_Change(I,J) is executed. + +Link_Change(I,J) + 1. Let j = nbr_rid(I,J). + 2. Let (K,L) be a link from i to j such that + nbr_metric(K,L) is the minimum metric among + all links from i to j. + 3. Set local_if(j) = K, nbr_if(j) = L, and + metric(i,j) = nbr_metric(K,L). + 4. If USE_METRICS = 1, set cost(i,j) = metric(i,j). + +8.4.11. Generating Association Messages + + This section describes the procedures used to generate INTERFACE + ASSOCIATION, HOST ASSOCIATION, and NETWORK PREFIX ASSOCIATION + messages. Addresses or prefixes in the interface table, host table, + and network prefix table are reported to neighbors periodically every + IA_INTERVAL, HA_INTERVAL, and NPA_INTERVAL seconds, respectively. In + addition, differential changes to the tables are reported every + DIFF_UPDATE_INTERVAL seconds if it is not time for a periodic update + (similar to differential topology updates). Each node reports only + addresses or prefixes that are associated with nodes in the reported + node set RN; this ensures the efficient broadcast of all associated + addresses and prefixes to all nodes in the network. + + The generated messages are sent on each interface. Whenever + possible, these messages are combined into the same packet, in order + to minimize the number of control packets transmitted. + +Generate_Association_Messages() + 1. Generate_Interface_Association_Messages(). + 2. Generate_Host_Association_Messages(). + + + +Ogier, et al. Experimental [Page 34] + +RFC 3684 TBRPF February 2004 + + + 3. Generate_Network_Prefix_Association_Messages(). + +Generate_Interface_Association_Messages() + 1. If current_time > next_ia_time: + 1.1. Set next_ia_time = current_time + IA_INTERVAL. + 1.2. For each node u in RN: + 1.2.1. Let addr_1,..., addr_n be the interface IP + addresses associated with RID u in the current + interface table. + 1.2.2. If this list is nonempty, add the INTERFACE + ASSOCIATION message (FULL, n, u, addr_1,..., addr_n) + to msg_list(I) for each I. + + 2. Else, for each node u in RN: + 2.1. Add the INTERFACE ASSOCIATION message (ADD, n, u, + addr_1,..., addr_n) to msg_list(I) for each I, where + addr_1,..., addr_n are the interface IP addresses that + are associated with RID u in the current interface table + but not in the old interface table. + 2.2. Add the INTERFACE ASSOCIATION message (DELETE, n, u, + addr_1,..., addr_n) to msg_list(I) for each I, where + addr_1,..., addr_n are the interface IP addresses that + are associated with RID u in the old interface table + but not in the current interface table. + +Generate_Host_Association_Messages() + 1. If current_time > next_ha_time: + 1.1. Set next_ha_time = current_time + HA_INTERVAL. + 1.2. For each node u in RN: + 1.2.1. Let addr_1,..., addr_n be the host IP addresses + associated with RID u in the current host table. + 1.2.2. If this list is nonempty, add the HOST ASSOCIATION + message (FULL, n, u, addr_1,..., addr_n) to + msg_list(I) for each I. + + 2. Else, for each node u in RN: + 2.1. Add the HOST ASSOCIATION message (ADD, n, u, + addr_1,..., addr_n) to msg_list(I) for each I, where + addr_1,..., addr_n are the host IP addresses that + are associated with RID u in the current host table + but not in the old host table. + 2.2. Add the HOST ASSOCIATION message (DELETE, n, u, + addr_1,..., addr_n) to msg_list(I) for each I, where + addr_1,..., addr_n are the host IP addresses that + are associated with RID u in the old host table + but not in the current host table. + + + + + +Ogier, et al. Experimental [Page 35] + +RFC 3684 TBRPF February 2004 + + +Generate_Network_Prefix_Association_Messages() + 1. If current_time > next_npa_time: + 1.1. Set next_npa_time = current_time + NPA_INTERVAL. + 1.2. For each node u in RN: + 1.2.1. Let length_1, prefix_1,..., length_n, prefix_n + be the network prefix lengths and prefixes associated + with RID u in the current network prefix table. + 1.2.2. If this list is nonempty, add the NETWORK PREFIX + ASSOCIATION message (FULL, n, u, length_1, prefix_1, + ..., length_n, prefix_n) to msg_list(I) for each I. + + 2. Else, for each node u in RN: + 2.1. Add the NETWORK PREFIX ASSOCIATION message + (ADD, n, u, prefix_1,..., prefix_n) to msg_list(I) for + each I, where prefix_1,..., prefix_n are the network + prefixes that are associated with RID u in the current + prefix table but not in the old prefix table. + + 2.1. Add the NETWORK PREFIX ASSOCIATION message + (DELETE, n, u, prefix_1,..., prefix_n) to msg_list(I) for + each I, where prefix_1,..., prefix_n are the network + prefixes that are associated with RID u in the old prefix + table but not in the current prefix table. + +8.4.12. Processing Association Messages + + When an INTERFACE ASSOCIATION, HOST ASSOCIATION, or NETWORK PREFIX + ASSOCIATION message is received from node j, the interface table, + host table, or network prefix table, respectively, is updated as + described in the following three procedures. + +Process_Interface_Association_Messages(j, msg_list) + For each message (subtype, n, u, addr_1,..., addr_n) in msg_list + such that j = p(u): + 1. If subtype = FULL, remove all entries with if_rid = u + from the interface table. + 2. If subtype = FULL or ADD, then for m = 1,..., n, + add the tuple (if_addr, if_rid, if_expire) to the + interface table, where: + if_addr = addr_m, + if_rid = u, + if_expire = current_time + IA_HOLD_TIME. + 3. If subtype = DELETE, then for m = 1,..., n, + remove the tuple (if_addr, if_rid, if_expire) from the + interface table, where if_addr = addr_m and if_rid = u. + + + + + + +Ogier, et al. Experimental [Page 36] + +RFC 3684 TBRPF February 2004 + + +Process_Host_Association_Messages(j, msg_list) + For each message (subtype, n, u, addr_1,..., addr_n) in msg_list + such that j = p(u): + 1. If subtype = FULL, remove all entries with h_rid = u + from the host table. + 2. If subtype = FULL or ADD, then for m = 1,..., n, + add the tuple (h_addr, h_rid, h_expire) to the + host table, where: + h_addr = addr_m, + h_rid = u, + h_expire = current_time + HA_HOLD_TIME. + 3. If subtype = DELETE, then for m = 1,..., n, + remove the tuple (h_addr, h_rid, h_expire) from the + host table, where h_addr = addr_m and h_rid = u. + +Process_Network_Prefix_Association_Messages(j, msg_list) + For each message (subtype, n, u, length_1, prefix_1, ..., + length_n, prefix_n) in msg_list such that j = p(u): + 1. If subtype = FULL, remove all entries with net_rid = u + from the prefix table. + 2. If subtype = FULL or ADD, then for m = 1,..., n, + add the tuple (net_prefix, net_length, net_rid, + net_expire) to the network prefix table, where: + net_prefix = prefix_m, + net_length = length_m, + net_rid = u, + net_expire = current_time + NPA_HOLD_TIME. + 3. If subtype = DELETE, then for m = 1,..., n, + remove the tuple (net_prefix, net_length, net_rid, + net_expire) from the network prefix table, where + net_prefix = prefix_m, net_length = length_m, + and net_rid = u. + +8.4.13. Non-Relay Operation + + Nodes with relay priority equal to zero are called non-relay nodes, + and do not forward packets (of any type) that are received from other + nodes. A non-relay node is implemented simply by not generating or + transmitting any TOPOLOGY UPDATE messages. A non-relay node may + report (in association messages) addresses or prefixes that are + associated with itself, but not those associated with other nodes. + HELLO messages must be transmitted in order to establish links with + neighbor nodes. The following procedures can be omitted in non-relay + nodes: Update_RN(), Generate_Periodic_Update(), and + Generate_Diff_Update(). + + + + + + +Ogier, et al. Experimental [Page 37] + +RFC 3684 TBRPF February 2004 + + +8.5. Configurable Parameters + + This section lists the configurable parameters used by the routing + module, and their proposed default values. All nodes MUST have the + same value for all of the following parameters except + REPORT_FULL_TREE and IMPLICIT_DELETION. + + Parameter Name Default Value + -------------- ------------- + DIFF_UPDATE_INTERVAL 1 second + PER_UPDATE_INTERVAL 5 seconds + TOP_HOLD_TIME 15 seconds + NON_REPORT_PENALTY 1.01 + NON_TREE_PENALTY 0.01 + IA_INTERVAL 10 seconds + IA_HOLD_TIME 3 * IA_INTERVAL + HA_INTERVAL 10 seconds + HA_HOLD_TIME 3 * HA_INTERVAL + NPA_INTERVAL 10 seconds + NPA_HOLD_TIME 3 * NPA_INTERVAL + USE_METRICS 0 + REPORT_FULL_TREE 0 + IMPLICIT_DELETION 1 + +9. TBRPF Flooding Mechanism + + This section describes a mechanism for the efficient best-effort + flooding (or network-wide broadcast) of packets to all nodes of a + connected ad-hoc network. This mechanism can be considered an + optimization of the classical flooding algorithm in which each packet + is transmitted by every node of the network. In TBRPF flooding, + information provided by TBRPF is used to decide whether a given + received flooded packet should be forwarded. As a result, each + packet is transmitted by only a relatively small subset of nodes, + thus consuming much less bandwidth than classical flooding. + + This document specifies that the flooding mechanism use the IPv4 + multicast address 224.0.1.20 (currently assigned by IANA for "any + private experiment"). Every node maintains a duplicate cache to keep + track of which flooded packets have already been received. The + duplicate cache contains, for each received flooded packet, the + flooded packet identifier (FPI), which for IPv4 is composed of the + source IP address, the IP identification, and the fragment offset + values obtained from the IP header [14]. + + When a node receives a packet whose destination IP address is the + flooding address (224.0.1.20), it checks its duplicate cache for an + entry that matches the packet. If such an entry exists, the node + + + +Ogier, et al. Experimental [Page 38] + +RFC 3684 TBRPF February 2004 + + + silently discards the flooded packet since it has already been + received. Otherwise, the node retransmits the packet on all + interfaces (see the exception below) if and only if the following + conditions hold: + + 1. The TBRPF node associated with the source IP address of the packet + belongs to the set RN of reported nodes computed by TBRPF. + + 2. When decremented, the 'ip_ttl' in the IPv4 packet header + (respectively, the 'hop_count' in the IPv6 packet header) is + greater than zero. + + If the packet is to be retransmitted, it is sent after a small random + time interval in order to avoid collisions. If the interface on + which the packet was received is not a MANET interface (see the + Terminology section), then the packet should not be retransmitted on + that interface. + +10. Operation of TBRPF in Mobile Ad-Hoc Networks + + TBRPF is particularly well suited to MANETs consisting of mobile + nodes with wireless network interfaces operating in peer-to-peer + fashion over a multiple access communications channel. Although + applicable across a much broader field of use, TBRPF is particularly + well suited for supporting the standard DARPA Internet protocols + [3][2]. In the following sections, we discuss practical + considerations for the operation of TBRPF on MANETs. + +10.1. Data Link Layer Assumptions + + We assume a MANET data link layer that supports broadcast, multicast + and unicast addressing with best-effort (not guaranteed) delivery + services between neighbors (i.e., a pair of nodes within operational + communications range of one another). We further assume that each + interface belonging to a node in the MANET is assigned a unicast data + link layer address that is unique within the MANET's scope. While + such uniqueness is not strictly guaranteed, the assumption of + uniqueness is consistent with current practices for deployment of the + Internet protocols on specific link layers. Methods for duplicate + link layer address detection and deconfliction are beyond the scope + of this document. + +10.2. Network Layer Assumptions + + MANETs are formed as collections of routers and non-routing nodes + that use network layer addresses when calculating the MANET topology. + We assume that each node has at least one data link layer interface + (described above) and that each such interface is assigned a network + + + +Ogier, et al. Experimental [Page 39] + +RFC 3684 TBRPF February 2004 + + + layer address that is unique within the MANET. (Methods for network + layer address assignment and duplicate address detection are beyond + the scope of this document.) We further assume that each node will + select a unique Router ID (RID) for use in TBRPF protocol messages, + whether or not the node acts as a MANET router. Finally, we assume + that each MANET router supports the multi-hop relay paradigm at the + network layer; i.e., each router provides an inter-node forwarding + service via network layer host routes which reflect the current MANET + topology as perceived by TBRPF. + +10.3. Optional Automatic Address Resolution + + TBRPF employs a proactive neighbor discovery protocol at the network + layer that maintains bi-directional link state for neighboring nodes + through the periodic transmission of messages. Since TBRPF neighbor + discovery messages contain both the data link and network layer + address of the sender, implementations MAY perform automatic + network-to-data link layer address resolution for the nodes with + which they form links. An implementation may use such a mechanism to + avoid additional message overhead and potential for packet loss + associated with on-demand address resolution mechanisms such as ARP + [15] or IPv6 Neighbor Discovery [16]. Implementations MUST respond + to on-demand address resolution requests in the normal manner. + +10.4. Support for Multiple Interfaces and/or Alias Addresses + + MANET nodes may comprise multiple interfaces; each with a unique + network layer address. Additionally, MANET nodes may wish to publish + alias addresses such as when multiple network layer addresses are + assigned to the same interface or when the MANET node is serving as a + Mobile IP [17] home agent. Multiple interfaces and alias addresses + are advertised in INTERFACE ASSOCIATION messages, which bind each + such address to the node's RID. + +10.5. Support for Network Prefixes + + MANET routers may advertise network prefixes which the router + discovered via attached networks, external routes advertised by other + protocols, or other means. Network prefixes are advertised in + NETWORK PREFIX ASSOCIATION messages, which bind each such prefix to + the node's RID. + +10.6. Support for non-MANET Hosts + + Non-MANET hosts may establish connections to MANET routers through + on-demand mechanisms such as ARP or IPv6 Neighbor Discovery. Such + connections do not constitute a MANET link and therefore are not + reported in TBRPF topology updates. Non-MANET hosts are advertised + + + +Ogier, et al. Experimental [Page 40] + +RFC 3684 TBRPF February 2004 + + + in HOST ASSOCIATION messages, which bind the IP address of each host + to the node's RID. + +10.7. Internet Protocol Considerations + + TBRPF packets are communicated using UDP/IP. Port 712 has been + assigned by IANA for exclusive use by TBRPF. Implementations in + private networks MAY employ alternate data delivery services (i.e., + raw IP or local data-link encapsulation). The selection of an + alternate data delivery service MUST be consistent among all MANET + routers in the private network. In all implementations, the data + delivery service MUST provide a checksum facility. + + The following sections specify the operation of TBRPF over UDP/IP. + +10.7.1. IPv4 Operation + + When IPv4 is used, TBRPF nodes obey IPv4 host and router requirements + [4][5]. TBRPF packets are sent to the multicast address 224.0.0.2 + (All Routers) and thus reach all TBRPF routers within single-hop + transmission range of the sender. TBRPF routers MUST NOT forward + packets sent to this multicast address. + + Since non-negligible packet loss due to link failure, interference, + etc. can occur, implementations SHOULD avoid IPv4 fragmentation/ + reassembly whenever possible, by splitting large TBRPF protocol + packets into multiple smaller packets at the application layer. When + fragmentation is unavoidable, senders SHOULD NOT send TBRPF packets + that exceed the minimum reassembly buffer size ([4], section 3.3.2) + for all receivers in the network. + +10.7.2. IPv6 Operation + + The specification of TBRPF for IPv6 is the same as for IPv4, except + that 32-bit IPv4 addresses are replaced by 128-bit IPv6 addresses. + However, to minimize overhead, router IDs remain at 32 bits, similar + to OSPF for IPv6 [18]. + +11. IANA Considerations + + The IANA has assigned port number 712 for TBRPF. + + The TBRPF flooding mechanism specified in this document uses the IPv4 + multicast address 224.0.1.20, which is currently assigned by IANA for + "any private experiment". In the event that this specification is + advanced to standards track, a new multicast address assignment would + be requested for this purpose. + + + + +Ogier, et al. Experimental [Page 41] + +RFC 3684 TBRPF February 2004 + + +12. Security Considerations + + Wireless networks are vulnerable to a variety of attacks, including + denial-of-service attacks (e.g., flooding and jamming), man-in-the- + middle attacks (e.g., interception, insertion, deletion, + modification, replaying) and service theft. To counter such attacks, + it is important to prevent the spoofing (impersonation) of TBRPF + nodes, and to prevent unauthorized nodes from joining the network via + neighbor discovery. To achieve this, TBRPF packets can be + authenticated using the IP Authentication Header [19][20]. In + addition, the Encapsulating Security Payload (ESP) header [21] can be + used to provide confidentiality (encryption) of TBRPF packets. + + The IETF SEcuring Neighbor Discovery (SEND) Working Group analyzes + trust models and threats for ad hoc networks [22]. TBRPF can be + extended in a straightforward manner to use SEND mechanisms, e.g., + [23]. + +13. Acknowledgements + + The authors would like to thank the Army Systems Engineering Office + (ASEO) for funding part of this work. + + The authors would like to thank several members of the MANET working + group for many helpful comments and suggestions, including Thomas + Clausen, Philippe Jacquet, and Joe Macker. + + The authors would like to thank Bhargav Bellur for major + contributions to the original (full-topology) version of TBRPF, + Ambatipudi Sastry for his support and advice, and Julie S. Wong for + developing a new implementation of TBRPF and suggesting several + clarifications to the TBRPF Routing Operation section. + +14. References + +14.1. Normative References + + [1] Bradner, S., "Key words for use in RFCs to Indicate Requirement + Levels", BCP 14, RFC 2119, March 1997. + + [2] Deering, S. and R. Hinden, "Internet Protocol, Version 6 (IPv6) + Specification", RFC 2460, December 1998. + + [3] Postel, J., "Internet Protocol", STD 5, RFC 791, September 1981. + + [4] Braden, R., Ed., "Requirements for Internet Hosts - + Communication Layers", STD 3, RFC 1122, October 1989. + + + + +Ogier, et al. Experimental [Page 42] + +RFC 3684 TBRPF February 2004 + + + [5] Baker, F., Ed., "Requirements for IP Version 4 Routers", RFC + 1812, June 1995. + +14.2. Informative References + + [6] Moy, J., "OSPF Version 2", STD 54, RFC 2328, April 1998. + + [7] Ogier, R., Message in IETF email archive for MANET, + ftp://ftp.ietf.org/ietf-mail-archive/manet/2002-02.mail, + February 2002. + + [8] Ogier, R., "Topology Dissemination Based on Reverse-Path + Forwarding (TBRPF): Correctness and Simulation Evaluation", + Technical Report, SRI International, October 2003. + + [9] Ogier, R., Message in IETF email archive for MANET, + ftp://ftp.ietf.org/ietf-mail-archive/manet/2002-03.mail, March + 2002. + + [10] Ogier, R., "Efficient Routing Protocols for Packet-Radio + Networks Based on Tree Sharing", Proc. Sixth IEEE Intl. Workshop + on Mobile Multimedia Communications (MOMUC'99), November 1999. + + [11] Bellur, B. and R. Ogier, "A Reliable, Efficient Topology + Broadcast Protocol for Dynamic Networks", Proc. IEEE INFOCOM + '99, New York", March 1999. + + [12] Clausen, T. and P. Jacquet, Eds., "Optimized Link State Routing + Protocol (OLSR)", RFC 3626, October 2003. + + [13] Bertsekas, D. and R. Gallager, "Data Networks", Prentice-Hall, + 1987. + + [14] Perkins, C., Belding-Royer, E. and S. Das, "IP Flooding in Ad + Hoc Mobile Networks", Work in Progress, November 2001. + + [15] Plummer, D., "Ethernet Address Resolution Protocol: Or + converting network protocol addresses to 48.bit Ethernet address + for transmission on Ethernet hardware", STD 37, RFC 826, + November 1982. + + [16] Narten, T., Nordmark, E. and W. Simpson, "Neighbor Discovery for + IP Version 6 (IPv6)", RFC 2461, December 1998. + + [17] Perkins, C., Ed., "IP Mobility Support for IPv4", RFC 3344, + August 2002. + + + + + +Ogier, et al. Experimental [Page 43] + +RFC 3684 TBRPF February 2004 + + + [18] Coltun, R., Ferguson, D. and J. Moy, "OSPF for IPv6", RFC 2740, + December 1999. + + [19] Kent, S. and R. Atkinson, "Security Architecture for the + Internet Protocol", RFC 2401, November 1998. + + [20] Kent, S. and R. Atkinson, "IP Authentication Header", RFC 2402, + November 1998. + + [21] Kent, S. and R. Atkinson, "IP Encapsulating Security Payload + (ESP)", RFC 2406, November 1998. + + [22] Nikander, P., "IPv6 Neighbor Discovery Trust Models and + Threats", Work in Progress, April 2003. + + [23] Arkko, J., "SEcure Neighbor Discovery (SEND)", Work in Progress, + June 2003. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Ogier, et al. Experimental [Page 44] + +RFC 3684 TBRPF February 2004 + + +Authors' Addresses + + Richard G. Ogier + SRI International + 333 Ravenswood Ave. + Menlo Park, CA 94025 + USA + + Phone: +1 650 859-4216 + Fax: +1 650 859-4812 + EMail: ogier@erg.sri.com + + + Fred L. Templin + Nokia + 313 Fairchild Drive + Mountain View, CA 94043 + USA + + Phone: +1 650 625 2331 + Fax: +1 650 625 2502 + EMail: ftemplin@iprg.nokia.com + + + Mark G. Lewis + SRI International + 333 Ravenswood Ave. + Menlo Park, CA 94025 + USA + + Phone: +1 650 859-4302 + Fax: +1 650 859-4812 + EMail: lewis@erg.sri.com + + + + + + + + + + + + + + + + + + +Ogier, et al. Experimental [Page 45] + +RFC 3684 TBRPF February 2004 + + +Full Copyright Statement + + Copyright (C) The Internet Society (2004). This document is subject + to the rights, licenses and restrictions contained in BCP 78 and + except as set forth therein, the authors retain all their rights. + + This document and the information contained herein are provided on an + "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE + REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE + INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF + THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED + WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + +Intellectual Property + + The IETF takes no position regarding the validity or scope of any + Intellectual Property Rights or other rights that might be claimed + to pertain to the implementation or use of the technology + described in this document or the extent to which any license + under such rights might or might not be available; nor does it + represent that it has made any independent effort to identify any + such rights. Information on the procedures with respect to + rights in RFC documents can be found in BCP 78 and BCP 79. + + Copies of IPR disclosures made to the IETF Secretariat and any + assurances of licenses to be made available, or the result of an + attempt made to obtain a general license or permission for the use + of such proprietary rights by implementers or users of this + specification can be obtained from the IETF on-line IPR repository + at http://www.ietf.org/ipr. + + The IETF invites any interested party to bring to its attention + any copyrights, patents or patent applications, or other + proprietary rights that may cover technology that may be required + to implement this standard. Please address the information to the + IETF at ietf-ipr@ietf.org. + +Acknowledgement + + Funding for the RFC Editor function is currently provided by the + Internet Society. + + + + + + + + + +Ogier, et al. Experimental [Page 46] + |