From 4bfd864f10b68b71482b35c818559068ef8d5797 Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Wed, 27 Nov 2024 20:54:24 +0100 Subject: doc: Add RFC documents --- doc/rfc/rfc4728.txt | 5995 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 5995 insertions(+) create mode 100644 doc/rfc/rfc4728.txt (limited to 'doc/rfc/rfc4728.txt') diff --git a/doc/rfc/rfc4728.txt b/doc/rfc/rfc4728.txt new file mode 100644 index 0000000..34fe6a5 --- /dev/null +++ b/doc/rfc/rfc4728.txt @@ -0,0 +1,5995 @@ + + + + + + +Network Working Group D. Johnson +Request for Comments: 4728 Rice University +Category: Experimental Y. Hu + UIUC + D. Maltz + Microsoft Research + February 2007 + + + The Dynamic Source Routing Protocol (DSR) + for Mobile Ad Hoc Networks for IPv4 + +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 IETF Trust (2007). + +Abstract + + The Dynamic Source Routing protocol (DSR) is a simple and efficient + routing protocol designed specifically for use in multi-hop wireless + ad hoc networks of mobile nodes. DSR allows the network to be + completely self-organizing and self-configuring, without the need for + any existing network infrastructure or administration. The protocol + is composed of the two main mechanisms of "Route Discovery" and + "Route Maintenance", which work together to allow nodes to discover + and maintain routes to arbitrary destinations in the ad hoc network. + All aspects of the protocol operate entirely on demand, allowing the + routing packet overhead of DSR to scale automatically to only what is + needed to react to changes in the routes currently in use. The + protocol allows multiple routes to any destination and allows each + sender to select and control the routes used in routing its packets, + for example, for use in load balancing or for increased robustness. + Other advantages of the DSR protocol include easily guaranteed loop- + free routing, operation in networks containing unidirectional links, + use of only "soft state" in routing, and very rapid recovery when + routes in the network change. The DSR protocol is designed mainly + for mobile ad hoc networks of up to about two hundred nodes and is + designed to work well even with very high rates of mobility. This + document specifies the operation of the DSR protocol for routing + unicast IPv4 packets. + + + + +Johnson, et al. Experimental [Page 1] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + +Table of Contents + + 1. Introduction ....................................................5 + 2. Assumptions .....................................................7 + 3. DSR Protocol Overview ...........................................9 + 3.1. Basic DSR Route Discovery .................................10 + 3.2. Basic DSR Route Maintenance ...............................12 + 3.3. Additional Route Discovery Features .......................14 + 3.3.1. Caching Overheard Routing Information ..............14 + 3.3.2. Replying to Route Requests Using Cached Routes .....15 + 3.3.3. Route Request Hop Limits ...........................16 + 3.4. Additional Route Maintenance Features .....................17 + 3.4.1. Packet Salvaging ...................................17 + 3.4.2. Queued Packets Destined over a Broken Link .........18 + 3.4.3. Automatic Route Shortening .........................19 + 3.4.4. Increased Spreading of Route Error Messages ........20 + 3.5. Optional DSR Flow State Extension .........................20 + 3.5.1. Flow Establishment .................................21 + 3.5.2. Receiving and Forwarding Establishment Packets .....22 + 3.5.3. Sending Packets along Established Flows ............22 + 3.5.4. Receiving and Forwarding Packets Sent along + Established Flows ..................................23 + 3.5.5. Processing Route Errors ............................24 + 3.5.6. Interaction with Automatic Route Shortening ........24 + 3.5.7. Loop Detection .....................................25 + 3.5.8. Acknowledgement Destination ........................25 + 3.5.9. Crash Recovery .....................................25 + 3.5.10. Rate Limiting .....................................25 + 3.5.11. Interaction with Packet Salvaging .................26 + 4. Conceptual Data Structures .....................................26 + 4.1. Route Cache ...............................................26 + 4.2. Send Buffer ...............................................30 + 4.3. Route Request Table .......................................30 + 4.4. Gratuitous Route Reply Table ..............................31 + 4.5. Network Interface Queue and Maintenance Buffer ............32 + 4.6. Blacklist .................................................33 + 5. Additional Conceptual Data Structures for Flow State + Extension ......................................................34 + 5.1. Flow Table ................................................34 + 5.2. Automatic Route Shortening Table ..........................35 + 5.3. Default Flow ID Table .....................................36 + 6. DSR Options Header Format ......................................36 + 6.1. Fixed Portion of DSR Options Header .......................37 + 6.2. Route Request Option ......................................40 + 6.3. Route Reply Option ........................................42 + + + + + + +Johnson, et al. Experimental [Page 2] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + 6.4. Route Error Option ........................................44 + 6.4.1. Node Unreachable Type-Specific Information .........46 + 6.4.2. Flow State Not Supported Type-Specific + Information ........................................46 + 6.4.3. Option Not Supported Type-Specific Information .....46 + 6.5. Acknowledgement Request Option ............................46 + 6.6. Acknowledgement Option ....................................47 + 6.7. DSR Source Route Option ...................................48 + 6.8. Pad1 Option ...............................................50 + 6.9. PadN Option ...............................................50 + 7. Additional Header Formats and Options for Flow State + Extension ......................................................51 + 7.1. DSR Flow State Header .....................................52 + 7.2. New Options and Extensions in DSR Options Header ..........52 + 7.2.1. Timeout Option .....................................52 + 7.2.2. Destination and Flow ID Option .....................53 + 7.3. New Error Types for Route Error Option ....................54 + 7.3.1. Unknown Flow Type-Specific Information .............54 + 7.3.2. Default Flow Unknown Type-Specific Information .....55 + 7.4. New Acknowledgement Request Option Extension ..............55 + 7.4.1. Previous Hop Address Extension .....................55 + 8. Detailed Operation .............................................56 + 8.1. General Packet Processing .................................56 + 8.1.1. Originating a Packet ...............................56 + 8.1.2. Adding a DSR Options Header to a Packet ............57 + 8.1.3. Adding a DSR Source Route Option to a Packet .......57 + 8.1.4. Processing a Received Packet .......................58 + 8.1.5. Processing a Received DSR Source Route Option ......60 + 8.1.6. Handling an Unknown DSR Option .....................63 + 8.2. Route Discovery Processing ................................64 + 8.2.1. Originating a Route Request ........................65 + 8.2.2. Processing a Received Route Request Option .........66 + 8.2.3. Generating a Route Reply Using the Route Cache .....68 + 8.2.4. Originating a Route Reply ..........................71 + 8.2.5. Preventing Route Reply Storms ......................72 + 8.2.6. Processing a Received Route Reply Option ...........74 + 8.3. Route Maintenance Processing ..............................74 + 8.3.1. Using Link-Layer Acknowledgements ..................75 + 8.3.2. Using Passive Acknowledgements .....................76 + 8.3.3. Using Network-Layer Acknowledgements ...............77 + 8.3.4. Originating a Route Error ..........................80 + 8.3.5. Processing a Received Route Error Option ...........81 + 8.3.6. Salvaging a Packet .................................82 + 8.4. Multiple Network Interface Support ........................84 + 8.5. IP Fragmentation and Reassembly ...........................84 + 8.6. Flow State Processing .....................................85 + 8.6.1. Originating a Packet ...............................85 + 8.6.2. Inserting a DSR Flow State Header ..................88 + + + +Johnson, et al. Experimental [Page 3] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + 8.6.3. Receiving a Packet .................................88 + 8.6.4. Forwarding a Packet Using Flow IDs .................93 + 8.6.5. Promiscuously Receiving a Packet ...................93 + 8.6.6. Operation Where the Layer below DSR + Decreases the IP TTL ...............................94 + 8.6.7. Salvage Interactions with DSR ......................94 + 9. Protocol Constants and Configuration Variables .................95 + 10. IANA Considerations ...........................................96 + 11. Security Considerations .......................................96 + Appendix A. Link-MaxLife Cache Description ........................97 + Appendix B. Location of DSR in the ISO Network Reference Model ....99 + Appendix C. Implementation and Evaluation Status .................100 + Acknowledgements .................................................101 + Normative References .............................................102 + Informative References ...........................................102 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Johnson, et al. Experimental [Page 4] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + +1. Introduction + + The Dynamic Source Routing protocol (DSR) [JOHNSON94, JOHNSON96a] is + a simple and efficient routing protocol designed specifically for use + in multi-hop wireless ad hoc networks of mobile nodes. Using DSR, + the network is completely self-organizing and self-configuring, + requiring no existing network infrastructure or administration. + Network nodes cooperate to forward packets for each other to allow + communication over multiple "hops" between nodes not directly within + wireless transmission range of one another. As nodes in the network + move about or join or leave the network, and as wireless transmission + conditions such as sources of interference change, all routing is + automatically determined and maintained by the DSR routing protocol. + Since the number or sequence of intermediate hops needed to reach any + destination may change at any time, the resulting network topology + may be quite rich and rapidly changing. + + In designing DSR, we sought to create a routing protocol that had + very low overhead yet was able to react very quickly to changes in + the network. The DSR protocol provides highly reactive service in + order to help ensure successful delivery of data packets in spite of + node movement or other changes in network conditions. + + The DSR protocol is composed of two main mechanisms that work + together to allow the discovery and maintenance of source routes in + the ad hoc network: + + - Route Discovery is the mechanism by which a node S wishing to send + a packet to a destination node D obtains a source route to D. + Route Discovery is used only when S attempts to send a packet to D + and does not already know a route to D. + + - Route Maintenance is the mechanism by which node S is able to + detect, while using a source route to D, if the network topology + has changed such that it can no longer use its route to D because + a link along the route no longer works. When Route Maintenance + indicates a source route is broken, S can attempt to use any other + route it happens to know to D, or it can invoke Route Discovery + again to find a new route for subsequent packets to D. Route + Maintenance for this route is used only when S is actually sending + packets to D. + + In DSR, Route Discovery and Route Maintenance each operate entirely + "on demand". In particular, unlike other protocols, DSR requires no + periodic packets of any kind at any layer within the network. For + example, DSR does not use any periodic routing advertisement, link + status sensing, or neighbor detection packets and does not rely on + these functions from any underlying protocols in the network. This + + + +Johnson, et al. Experimental [Page 5] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + entirely on-demand behavior and lack of periodic activity allows the + number of overhead packets caused by DSR to scale all the way down to + zero, when all nodes are approximately stationary with respect to + each other and all routes needed for current communication have + already been discovered. As nodes begin to move more or as + communication patterns change, the routing packet overhead of DSR + automatically scales to only what is needed to track the routes + currently in use. Network topology changes not affecting routes + currently in use are ignored and do not cause reaction from the + protocol. + + All state maintained by DSR is "soft state" [CLARK88], in that the + loss of any state will not interfere with the correct operation of + the protocol; all state is discovered as needed and can easily and + quickly be rediscovered if needed after a failure without significant + impact on the protocol. This use of only soft state allows the + routing protocol to be very robust to problems such as dropped or + delayed routing packets or node failures. In particular, a node in + DSR that fails and reboots can easily rejoin the network immediately + after rebooting; if the failed node was involved in forwarding + packets for other nodes as an intermediate hop along one or more + routes, it can also resume this forwarding quickly after rebooting, + with no or minimal interruption to the routing protocol. + + In response to a single Route Discovery (as well as through routing + information from other packets overheard), a node may learn and cache + multiple routes to any destination. This support for multiple routes + allows the reaction to routing changes to be much more rapid, since a + node with multiple routes to a destination can try another cached + route if the one it has been using should fail. This caching of + multiple routes also avoids the overhead of needing to perform a new + Route Discovery each time a route in use breaks. The sender of a + packet selects and controls the route used for its own packets, + which, together with support for multiple routes, also allows + features such as load balancing to be defined. In addition, all + routes used are easily guaranteed to be loop-free, since the sender + can avoid duplicate hops in the routes selected. + + The operation of both Route Discovery and Route Maintenance in DSR + are designed to allow unidirectional links and asymmetric routes to + be supported. In particular, as noted in Section 2, in wireless + networks, it is possible that a link between two nodes may not work + equally well in both directions, due to differing transmit power + levels or sources of interference. + + It is possible to interface a DSR network with other networks, + external to this DSR network. Such external networks may, for + example, be the Internet or may be other ad hoc networks routed with + + + +Johnson, et al. Experimental [Page 6] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + a routing protocol other than DSR. Such external networks may also + be other DSR networks that are treated as external networks in order + to improve scalability. The complete handling of such external + networks is beyond the scope of this document. However, this + document specifies a minimal set of requirements and features + necessary to allow nodes only implementing this specification to + interoperate correctly with nodes implementing interfaces to such + external networks. + + This document specifies the operation of the DSR protocol for routing + unicast IPv4 packets in multi-hop wireless ad hoc networks. + Advanced, optional features, such as Quality of Service (QoS) support + and efficient multicast routing, and operation of DSR with IPv6 + [RFC2460], will be covered in other documents. The specification of + DSR in this document provides a compatible base on which such + features can be added, either independently or by integration with + the DSR operation specified here. As described in Appendix C, the + design of DSR has been extensively studied through detailed + simulations and testbed implementation and demonstration; this + document encourages additional implementation and experimentation + with the protocol. + + The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", + "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this + document are to be interpreted as described in RFC 2119 [RFC2119]. + +2. Assumptions + + As described here, the DSR protocol is designed mainly for mobile ad + hoc networks of up to about two hundred nodes and is designed to work + well even with very high rates of mobility. Other protocol features + and enhancements that may allow DSR to scale to larger networks are + outside the scope of this document. + + We assume in this document that all nodes wishing to communicate with + other nodes within the ad hoc network are willing to participate + fully in the protocols of the network. In particular, each node + participating in the ad hoc network SHOULD also be willing to forward + packets for other nodes in the network. + + The diameter of an ad hoc network is the minimum number of hops + necessary for a packet to reach from any node located at one extreme + edge of the ad hoc network to another node located at the opposite + extreme. We assume that this diameter will often be small (e.g., + perhaps 5 or 10 hops), but it may often be greater than 1. + + + + + + +Johnson, et al. Experimental [Page 7] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + Packets may be lost or corrupted in transmission on the wireless + network. We assume that a node receiving a corrupted packet can + detect the error, such as through a standard link-layer checksum or + Cyclic Redundancy Check (CRC), and discard the packet. + + Nodes within the ad hoc network MAY move at any time without notice + and MAY even move continuously, but we assume that the speed with + which nodes move is moderate with respect to the packet transmission + latency and wireless transmission range of the particular underlying + network hardware in use. In particular, DSR can support very rapid + rates of arbitrary node mobility, but we assume that nodes do not + continuously move so rapidly as to make the flooding of every + individual data packet the only possible routing protocol. + + A common feature of many network interfaces, including most current + LAN hardware for broadcast media such as wireless, is the ability to + operate the network interface in "promiscuous" receive mode. This + mode causes the hardware to deliver every received packet to the + network driver software without filtering based on link-layer + destination address. Although we do not require this facility, some + of our optimizations can take advantage of its availability. Use of + promiscuous mode does increase the software overhead on the CPU, but + we believe that wireless network speeds and capacity are more the + inherent limiting factors to performance in current and future + systems; we also believe that portions of the protocol are suitable + for implementation directly within a programmable network interface + unit to avoid this overhead on the CPU [JOHNSON96a]. Use of + promiscuous mode may also increase the power consumption of the + network interface hardware, depending on the design of the receiver + hardware, and in such cases, DSR can easily be used without the + optimizations that depend on promiscuous receive mode or can be + programmed to only periodically switch the interface into promiscuous + mode. Use of promiscuous receive mode is entirely optional. + + Wireless communication ability between any pair of nodes may at times + not work equally well in both directions, due, for example, to + transmit power levels or sources of interference around the two nodes + [BANTZ94, LAUER95]. That is, wireless communications between each + pair of nodes will in many cases be able to operate bidirectionally, + but at times the wireless link between two nodes may be only + unidirectional, allowing one node to successfully send packets to the + other while no communication is possible in the reverse direction. + Some Medium Access Control (MAC) protocols, however, such as MACA + [KARN90], MACAW [BHARGHAVAN94], or IEEE 802.11 [IEEE80211], limit + unicast data packet transmission to bidirectional links, due to the + required bidirectional exchange of request to send (RTS) and clear to + send (CTS) packets in these protocols and to the link-layer + acknowledgement feature in IEEE 802.11. When used on top of MAC + + + +Johnson, et al. Experimental [Page 8] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + protocols such as these, DSR can take advantage of additional + optimizations, such as the ability to reverse a source route to + obtain a route back to the origin of the original route. + + The IP address used by a node using the DSR protocol MAY be assigned + by any mechanism (e.g., static assignment or use of Dynamic Host + Configuration Protocol (DHCP) for dynamic assignment [RFC2131]), + although the method of such assignment is outside the scope of this + specification. + + A routing protocol such as DSR chooses a next-hop for each packet and + provides the IP address of that next-hop. When the packet is + transmitted, however, the lower-layer protocol often has a separate, + MAC-layer address for the next-hop node. DSR uses the Address + Resolution Protocol (ARP) [RFC826] to translate from next-hop IP + addresses to next-hop MAC addresses. In addition, a node MAY add an + entry to its ARP cache based on any received packet, when the IP + address and MAC address of the transmitting node are available in the + packet; for example, the IP address of the transmitting node is + present in a Route Request option (in the Address list being + accumulated) and any packets containing a source route. Adding + entries to the ARP cache in this way avoids the overhead of ARP in + most cases. + +3. DSR Protocol Overview + + This section provides an overview of the operation of the DSR + protocol. The basic version of DSR uses explicit "source routing", + in which each data packet sent carries in its header the complete, + ordered list of nodes through which the packet will pass. This use + of explicit source routing allows the sender to select and control + the routes used for its own packets, supports the use of multiple + routes to any destination (for example, for load balancing), and + allows a simple guarantee that the routes used are loop-free. By + including this source route in the header of each data packet, other + nodes forwarding or overhearing any of these packets can also easily + cache this routing information for future use. Section 3.1 describes + this basic operation of Route Discovery, Section 3.2 describes basic + Route Maintenance, and Sections 3.3 and 3.4 describe additional + features of these two parts of DSR's operation. Section 3.5 then + describes an optional, compatible extension to DSR, known as "flow + state", that allows the routing of most packets without an explicit + source route header in the packet, while the fundamental properties + of DSR's operation are preserved. + + + + + + + +Johnson, et al. Experimental [Page 9] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + +3.1. Basic DSR Route Discovery + + When some source node originates a new packet addressed to some + destination node, the source node places in the header of the packet + a "source route" giving the sequence of hops that the packet is to + follow on its way to the destination. Normally, the sender will + obtain a suitable source route by searching its "Route Cache" of + routes previously learned; if no route is found in its cache, it will + initiate the Route Discovery protocol to dynamically find a new route + to this destination node. In this case, we call the source node the + "initiator" and the destination node the "target" of the Route + Discovery. + + For example, suppose a node A is attempting to discover a route to + node E. The Route Discovery initiated by node A in this example + would proceed as follows: + + ^ "A" ^ "A,B" ^ "A,B,C" ^ "A,B,C,D" + | id=2 | id=2 | id=2 | id=2 + +-----+ +-----+ +-----+ +-----+ +-----+ + | A |---->| B |---->| C |---->| D |---->| E | + +-----+ +-----+ +-----+ +-----+ +-----+ + | | | | + v v v v + + To initiate the Route Discovery, node A transmits a "Route Request" + as a single local broadcast packet, which is received by + (approximately) all nodes currently within wireless transmission + range of A, including node B in this example. Each Route Request + identifies the initiator and target of the Route Discovery, and also + contains a unique request identification (2, in this example), + determined by the initiator of the Request. Each Route Request also + contains a record listing the address of each intermediate node + through which this particular copy of the Route Request has been + forwarded. This route record is initialized to an empty list by the + initiator of the Route Discovery. In this example, the route record + initially lists only node A. + + When another node receives this Route Request (such as node B in this + example), if it is the target of the Route Discovery, it returns a + "Route Reply" to the initiator of the Route Discovery, giving a copy + of the accumulated route record from the Route Request; when the + initiator receives this Route Reply, it caches this route in its + Route Cache for use in sending subsequent packets to this + destination. + + + + + + +Johnson, et al. Experimental [Page 10] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + Otherwise, if this node receiving the Route Request has recently seen + another Route Request message from this initiator bearing this same + request identification and target address, or if this node's own + address is already listed in the route record in the Route Request, + this node discards the Request. (A node considers a Request recently + seen if it still has information about that Request in its Route + Request Table, which is described in Section 4.3.) Otherwise, this + node appends its own address to the route record in the Route Request + and propagates it by transmitting it as a local broadcast packet + (with the same request identification). In this example, node B + broadcast the Route Request, which is received by node C; nodes C and + D each also, in turn, broadcast the Request, resulting in receipt of + a copy of the Request by node E. + + In returning the Route Reply to the initiator of the Route Discovery, + such as in this example, node E replying back to node A, node E will + typically examine its own Route Cache for a route back to A and, if + one is found, will use it for the source route for delivery of the + packet containing the Route Reply. Otherwise, E SHOULD perform its + own Route Discovery for target node A, but to avoid possible infinite + recursion of Route Discoveries, it MUST in this case piggyback this + Route Reply on the packet containing its own Route Request for A. It + is also possible to piggyback other small data packets, such as a TCP + SYN packet [RFC793], on a Route Request using this same mechanism. + + Node E could instead simply reverse the sequence of hops in the route + record that it is trying to send in the Route Reply and use this as + the source route on the packet carrying the Route Reply itself. For + MAC protocols, such as IEEE 802.11, that require a bidirectional + frame exchange for unicast packets as part of the MAC protocol + [IEEE80211], the discovered source route MUST be reversed in this way + to return the Route Reply, since this route reversal tests the + discovered route to ensure that it is bidirectional before the Route + Discovery initiator begins using the route. This route reversal also + avoids the overhead of a possible second Route Discovery. + + When initiating a Route Discovery, the sending node saves a copy of + the original packet (that triggered the discovery) in a local buffer + called the "Send Buffer". The Send Buffer contains a copy of each + packet that cannot be transmitted by this node because it does not + yet have a source route to the packet's destination. Each packet in + the Send Buffer is logically associated with the time that it was + placed into the Send Buffer and is discarded after residing in the + Send Buffer for some timeout period SendBufferTimeout; if necessary + for preventing the Send Buffer from overflowing, a FIFO or other + replacement strategy MAY also be used to evict packets even before + they expire. + + + + +Johnson, et al. Experimental [Page 11] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + While a packet remains in the Send Buffer, the node SHOULD + occasionally initiate a new Route Discovery for the packet's + destination address. However, the node MUST limit the rate at which + such new Route Discoveries for the same address are initiated (as + described in Section 4.3), since it is possible that the destination + node is not currently reachable. In particular, due to the limited + wireless transmission range and the movement of the nodes in the + network, the network may at times become partitioned, meaning that + there is currently no sequence of nodes through which a packet could + be forwarded to reach the destination. Depending on the movement + pattern and the density of nodes in the network, such network + partitions may be rare or common. + + If a new Route Discovery was initiated for each packet sent by a node + in such a partitioned network, a large number of unproductive Route + Request packets would be propagated throughout the subset of the ad + hoc network reachable from this node. In order to reduce the + overhead from such Route Discoveries, a node SHOULD use an + exponential back-off algorithm to limit the rate at which it + initiates new Route Discoveries for the same target, doubling the + timeout between each successive discovery initiated for the same + target. If the node attempts to send additional data packets to this + same destination node more frequently than this limit, the subsequent + packets SHOULD be buffered in the Send Buffer until a Route Reply is + received giving a route to this destination, but the node MUST NOT + initiate a new Route Discovery until the minimum allowable interval + between new Route Discoveries for this target has been reached. This + limitation on the maximum rate of Route Discoveries for the same + target is similar to the mechanism required by Internet nodes to + limit the rate at which ARP Requests are sent for any single target + IP address [RFC1122]. + +3.2. Basic DSR Route Maintenance + + When originating or forwarding a packet using a source route, each + node transmitting the packet is responsible for confirming that data + can flow over the link from that node to the next hop. For example, + in the situation shown below, node A has originated a packet for node + E using a source route through intermediate nodes B, C, and D: + + +-----+ +-----+ +-----+ +-----+ +-----+ + | A |---->| B |---->| C |-->? | D | | E | + +-----+ +-----+ +-----+ +-----+ +-----+ + + In this case, node A is responsible for the link from A to B, node B + is responsible for the link from B to C, node C is responsible for + the link from C to D, and node D is responsible for the link from D + to E. + + + +Johnson, et al. Experimental [Page 12] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + An acknowledgement can provide confirmation that a link is capable of + carrying data, and in wireless networks, acknowledgements are often + provided at no cost, either as an existing standard part of the MAC + protocol in use (such as the link-layer acknowledgement frame defined + by IEEE 802.11 [IEEE80211]), or by a "passive acknowledgement" + [JUBIN87] (in which, for example, B confirms receipt at C by + overhearing C transmit the packet when forwarding it on to D). + + If a built-in acknowledgement mechanism is not available, the node + transmitting the packet can explicitly request that a DSR-specific + software acknowledgement be returned by the next node along the + route; this software acknowledgement will normally be transmitted + directly to the sending node, but if the link between these two nodes + is unidirectional (Section 4.6), this software acknowledgement could + travel over a different, multi-hop path. + + After an acknowledgement has been received from some neighbor, a node + MAY choose not to require acknowledgements from that neighbor for a + brief period of time, unless the network interface connecting a node + to that neighbor always receives an acknowledgement in response to + unicast traffic. + + When a software acknowledgement is used, the acknowledgement request + SHOULD be retransmitted up to a maximum number of times. A + retransmission of the acknowledgement request can be sent as a + separate packet, piggybacked on a retransmission of the original data + packet, or piggybacked on any packet with the same next-hop + destination that does not also contain a software acknowledgement. + + After the acknowledgement request has been retransmitted the maximum + number of times, if no acknowledgement has been received, then the + sender treats the link to this next-hop destination as currently + "broken". It SHOULD remove this link from its Route Cache and SHOULD + return a "Route Error" to each node that has sent a packet routed + over that link since an acknowledgement was last received. For + example, in the situation shown above, if C does not receive an + acknowledgement from D after some number of requests, it would return + a Route Error to A, as well as any other node that may have used the + link from C to D since C last received an acknowledgement from D. + Node A then removes this broken link from its cache; any + retransmission of the original packet can be performed by upper layer + protocols such as TCP, if necessary. For sending such a + retransmission or other packets to this same destination E, if A has + in its Route Cache another route to E (for example, from additional + Route Replies from its earlier Route Discovery, or from having + overheard sufficient routing information from other packets), it can + + + + + +Johnson, et al. Experimental [Page 13] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + send the packet using the new route immediately. Otherwise, it + SHOULD perform a new Route Discovery for this target (subject to the + back-off described in Section 3.1). + +3.3. Additional Route Discovery Features + +3.3.1. Caching Overheard Routing Information + + A node forwarding or otherwise overhearing any packet SHOULD add all + usable routing information from that packet to its own Route Cache. + The usefulness of routing information in a packet depends on the + directionality characteristics of the physical medium (Section 2), as + well as on the MAC protocol being used. Specifically, three distinct + cases are possible: + + - Links in the network frequently are capable of operating only + unidirectionally (not bidirectionally), and the MAC protocol in + use in the network is capable of transmitting unicast packets over + unidirectional links. + + - Links in the network occasionally are capable of operating only + unidirectionally (not bidirectionally), but this unidirectional + restriction on any link is not persistent; almost all links are + physically bidirectional, and the MAC protocol in use in the + network is capable of transmitting unicast packets over + unidirectional links. + + - The MAC protocol in use in the network is not capable of + transmitting unicast packets over unidirectional links; only + bidirectional links can be used by the MAC protocol for + transmitting unicast packets. For example, the IEEE 802.11 + Distributed Coordination Function (DCF) MAC protocol [IEEE80211] + is capable of transmitting a unicast packet only over a + bidirectional link, since the MAC protocol requires the return of + a link-level acknowledgement packet from the receiver and also + optionally requires the bidirectional exchange of an RTS and CTS + packet between the transmitter and receiver nodes. + + In the first case above, for example, the source route used in a data + packet, the accumulated route record in a Route Request, or the route + being returned in a Route Reply SHOULD all be cached by any node in + the "forward" direction. Any node SHOULD cache this information from + any such packet received, whether the packet was addressed to this + node, sent to a broadcast (or multicast) MAC address, or overheard + while the node's network interface is in promiscuous mode. However, + the "reverse" direction of the links identified in such packet + headers SHOULD NOT be cached. + + + + +Johnson, et al. Experimental [Page 14] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + For example, in the situation shown below, node A is using a source + route to communicate with node E: + + +-----+ +-----+ +-----+ +-----+ +-----+ + | A |---->| B |---->| C |---->| D |---->| E | + +-----+ +-----+ +-----+ +-----+ +-----+ + + As node C forwards a data packet along the route from A to E, it + SHOULD add to its cache the presence of the "forward" direction links + that it learns from the headers of these packets, from itself to D + and from D to E. Node C SHOULD NOT, in this case, cache the + "reverse" direction of the links identified in these packet headers, + from itself back to B and from B to A, since these links might be + unidirectional. + + In the second case above, in which links may occasionally operate + unidirectionally, the links described above SHOULD be cached in both + directions. Furthermore, in this case, if node X overhears (e.g., + through promiscuous mode) a packet transmitted by node C that is + using a source route from node A to E, node X SHOULD cache all of + these links as well, also including the link from C to X over which + it overheard the packet. + + In the final case, in which the MAC protocol requires physical + bidirectionality for unicast operation, links from a source route + SHOULD be cached in both directions, except when the packet also + contains a Route Reply, in which case only the links already + traversed in this source route SHOULD be cached. However, the links + not yet traversed in this route SHOULD NOT be cached. + +3.3.2. Replying to Route Requests Using Cached Routes + + A node receiving a Route Request for which it is not the target + searches its own Route Cache for a route to the target of the + Request. If it is found, the node generally returns a Route Reply to + the initiator itself rather than forward the Route Request. In the + Route Reply, this node sets the route record to list the sequence of + hops over which this copy of the Route Request was forwarded to it, + concatenated with the source route to this target obtained from its + own Route Cache. + + However, before transmitting a Route Reply packet that was generated + using information from its Route Cache in this way, a node MUST + verify that the resulting route being returned in the Route Reply, + after this concatenation, contains no duplicate nodes listed in the + route record. For example, the figure below illustrates a case in + which a Route Request for target E has been received by node F, and + node F already has in its Route Cache a route from itself to E: + + + +Johnson, et al. Experimental [Page 15] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + +-----+ +-----+ +-----+ +-----+ + | A |---->| B |- >| D |---->| E | + +-----+ +-----+ \ / +-----+ +-----+ + \ / + \ +-----+ / + >| C |- + +-----+ + | ^ + v | + Route Request +-----+ + Route: A - B - C - F | F | Cache: C - D - E + +-----+ + + The concatenation of the accumulated route record from the Route + Request and the cached route from F's Route Cache would include a + duplicate node in passing from C to F and back to C. + + Node F in this case could attempt to edit the route to eliminate the + duplication, resulting in a route from A to B to C to D and on to E, + but in this case, node F would not be on the route that it returned + in its own Route Reply. DSR Route Discovery prohibits node F from + returning such a Route Reply from its cache; this prohibition + increases the probability that the resulting route is valid, since + node F in this case should have received a Route Error if the route + had previously stopped working. Furthermore, this prohibition means + that a future Route Error traversing the route is very likely to pass + through any node that sent the Route Reply for the route (including + node F), which helps to ensure that stale data is removed from caches + (such as at F) in a timely manner; otherwise, the next Route + Discovery initiated by A might also be contaminated by a Route Reply + from F containing the same stale route. If, due to this restriction + on returning a Route Reply based on information from its Route Cache, + node F does not return such a Route Reply, it propagates the Route + Request normally. + +3.3.3. Route Request Hop Limits + + Each Route Request message contains a "hop limit" that may be used to + limit the number of intermediate nodes allowed to forward that copy + of the Route Request. This hop limit is implemented using the Time- + to-Live (TTL) field in the IP header of the packet carrying the Route + Request. As the Request is forwarded, this limit is decremented, and + the Request packet is discarded if the limit reaches zero before + finding the target. This Route Request hop limit can be used to + implement a variety of algorithms for controlling the spread of a + Route Request during a Route Discovery attempt. + + + + + +Johnson, et al. Experimental [Page 16] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + For example, a node MAY use this hop limit to implement a "non- + propagating" Route Request as an initial phase of a Route Discovery. + A node using this technique sends its first Route Request attempt for + some target node using a hop limit of 1, such that any node receiving + the initial transmission of the Route Request will not forward the + Request to other nodes by re-broadcasting it. This form of Route + Request is called a "non-propagating" Route Request; it provides an + inexpensive method for determining if the target is currently a + neighbor of the initiator or if a neighbor node has a route to the + target cached (effectively using the neighbors' Route Caches as an + extension of the initiator's own Route Cache). If no Route Reply is + received after a short timeout, then the node sends a "propagating" + Route Request for the target node (i.e., with hop limit as defined by + the value of the DiscoveryHopLimit configuration variable). + + As another example, a node MAY use this hop limit to implement an + "expanding ring" search for the target [JOHNSON96a]. A node using + this technique sends an initial non-propagating Route Request as + described above; if no Route Reply is received for it, the node + originates another Route Request with a hop limit of 2. For each + Route Request originated, if no Route Reply is received for it, the + node doubles the hop limit used on the previous attempt, to + progressively explore for the target node without allowing the Route + Request to propagate over the entire network. However, this + expanding ring search approach could increase the average latency of + Route Discovery, since multiple Discovery attempts and timeouts may + be needed before discovering a route to the target node. + +3.4. Additional Route Maintenance Features + +3.4.1. Packet Salvaging + + When an intermediate node forwarding a packet detects through Route + Maintenance that the next hop along the route for that packet is + broken, if the node has another route to the packet's destination in + its Route Cache, the node SHOULD "salvage" the packet rather than + discard it. To salvage a packet, the node replaces the original + source route on the packet with a route from its Route Cache. The + node then forwards the packet to the next node indicated along this + source route. For example, in the situation shown in the example of + Section 3.2, if node C has another route cached to node E, it can + salvage the packet by replacing the original route in the packet with + this new route from its own Route Cache rather than discarding the + packet. + + When salvaging a packet, a count is maintained in the packet of the + number of times that it has been salvaged, to prevent a single packet + from being salvaged endlessly. Otherwise, since the TTL is + + + +Johnson, et al. Experimental [Page 17] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + decremented only once by each node, a single node could salvage a + packet an unbounded number of times. Even if we chose to require the + TTL to be decremented on each salvage attempt, packet salvaging is an + expensive operation, so it is desirable to bound the maximum number + of times a packet can be salvaged independently of the maximum number + of hops a packet can traverse. + + As described in Section 3.2, an intermediate node, such as in this + case, that detects through Route Maintenance that the next hop along + the route for a packet that it is forwarding is broken, the node also + SHOULD return a Route Error to the original sender of the packet, + identifying the link over which the packet could not be forwarded. + If the node sends this Route Error, it SHOULD originate the Route + Error before salvaging the packet. + +3.4.2. Queued Packets Destined over a Broken Link + + When an intermediate node forwarding a packet detects through Route + Maintenance that the next-hop link along the route for that packet is + broken, in addition to handling that packet as defined for Route + Maintenance, the node SHOULD also handle in a similar way any pending + packets that it has queued that are destined over this new broken + link. Specifically, the node SHOULD search its Network Interface + Queue and Maintenance Buffer (Section 4.5) for packets for which the + next-hop link is this new broken link. For each such packet + currently queued at this node, the node SHOULD process that packet as + follows: + + - Remove the packet from the node's Network Interface Queue and + Maintenance Buffer. + + - Originate a Route Error for this packet to the original sender of + the packet, using the procedure described in Section 8.3.4, as if + the node had already reached the maximum number of retransmission + attempts for that packet for Route Maintenance. However, in + sending such Route Errors for queued packets in response to + detection of a single, new broken link, the node SHOULD send no + more than one Route Error to each original sender of any of these + packets. + + - If the node has another route to the packet's IP Destination + Address in its Route Cache, the node SHOULD salvage the packet as + described in Section 8.3.6. Otherwise, the node SHOULD discard + the packet. + + + + + + + +Johnson, et al. Experimental [Page 18] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + +3.4.3. Automatic Route Shortening + + Source routes in use MAY be automatically shortened if one or more + intermediate nodes in the route become no longer necessary. This + mechanism of automatically shortening routes in use is somewhat + similar to the use of passive acknowledgements [JUBIN87]. In + particular, if a node is able to overhear a packet carrying a source + route (e.g., by operating its network interface in promiscuous + receive mode), then this node examines the unexpended portion of that + source route. If this node is not the intended next-hop destination + for the packet but is named in the later unexpended portion of the + packet's source route, then it can infer that the intermediate nodes + before itself in the source route are no longer needed in the route. + For example, the figure below illustrates an example in which node D + has overheard a data packet being transmitted from B to C, for later + forwarding to D and to E: + + +-----+ +-----+ +-----+ +-----+ +-----+ + | A |---->| B |---->| C | | D | | E | + +-----+ +-----+ +-----+ +-----+ +-----+ + \ ^ + \ / + --------------------- + + In this case, this node (node D) SHOULD return a "gratuitous" Route + Reply to the original sender of the packet (node A). The Route Reply + gives the shorter route as the concatenation of the portion of the + original source route up through the node that transmitted the + overheard packet (node B), plus the suffix of the original source + route beginning with the node returning the gratuitous Route Reply + (node D). In this example, the route returned in the gratuitous + Route Reply message sent from D to A gives the new route as the + sequence of hops from A to B to D to E. + + When deciding whether to return a gratuitous Route Reply in this way, + a node MAY factor in additional information beyond the fact that it + was able to overhear the packet. For example, the node MAY decide to + return the gratuitous Route Reply only when the overheard packet is + received with a signal strength or signal-to-noise ratio above some + specific threshold. In addition, each node maintains a Gratuitous + Route Reply Table, as described in Section 4.4, to limit the rate at + which it originates gratuitous Route Replies for the same returned + route. + + + + + + + + +Johnson, et al. Experimental [Page 19] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + +3.4.4. Increased Spreading of Route Error Messages + + When a source node receives a Route Error for a data packet that it + originated, this source node propagates this Route Error to its + neighbors by piggybacking it on its next Route Request. In this way, + stale information in the caches of nodes around this source node will + not generate Route Replies that contain the same invalid link for + which this source node received the Route Error. + + For example, in the situation shown in the example of Section 3.2, + node A learns from the Route Error message from C that the link from + C to D is currently broken. It thus removes this link from its own + Route Cache and initiates a new Route Discovery (if it has no other + route to E in its Route Cache). On the Route Request packet + initiating this Route Discovery, node A piggybacks a copy of this + Route Error, ensuring that the Route Error spreads well to other + nodes, and guaranteeing that any Route Reply that it receives + (including those from other node's Route Caches) in response to this + Route Request does not contain a route that assumes the existence of + this broken link. + +3.5. Optional DSR Flow State Extension + + This section describes an optional, compatible extension to the DSR + protocol, known as "flow state", that allows the routing of most + packets without an explicit source route header in the packet. The + DSR flow state extension further reduces the overhead of the protocol + yet still preserves the fundamental properties of DSR's operation. + Once a sending node has discovered a source route such as through + DSR's Route Discovery mechanism, the flow state mechanism allows the + sending node to establish hop-by-hop forwarding state within the + network, based on this source route, to enable each node along the + route to forward the packet to the next hop based on the node's own + local knowledge of the flow along which this packet is being routed. + Flow state is dynamically initialized by the first packet using a + source route and is then able to route subsequent packets along the + same flow without use of a source route header in the packet. The + state established at each hop along a flow is "soft state" and thus + automatically expires when no longer needed and can be quickly + recreated as necessary. Extending DSR's basic operation based on an + explicit source route in the header of each packet routed, the flow + state extension operates as a form of "implicit source routing" by + preserving DSR's basic operation but removing the explicit source + route from packets. + + + + + + + +Johnson, et al. Experimental [Page 20] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + +3.5.1. Flow Establishment + + A source node sending packets to some destination node MAY use the + DSR flow state extension described here to establish a route to that + destination as a flow. A "flow" is a route from the source to the + destination represented by hop-by-hop forwarding state within the + nodes along the route. Each flow is uniquely identified by a + combination of the source node address, the destination node address, + and a flow identifier (flow ID) chosen by the source node. + + Each flow ID is a 16-bit unsigned integer. Comparison between + different flow IDs MUST be performed modulo 2**16. For example, + using an implementation in the C programming language, a flow ID + value (a) is greater than another flow ID value (b) if + ((short)((a) - (b)) > 0), if a C language "short" data type is + implemented as a 16-bit signed integer. + + A DSR Flow State header in a packet identifies the flow ID to be + followed in forwarding that packet. From a given source to some + destination, any number of different flows MAY exist and be in use, + for example, following different sequences of hops to reach the + destination. One of these flows MAY be considered the "default" flow + from that source to that destination. If a node receives a packet + with neither a DSR Options header specifying the route to be taken + (with a Source Route option in the DSR Options header) nor a DSR Flow + State header specifying the flow ID to be followed, it is forwarded + along the default flow for the source and destination addresses + specified in the packet's IP header. + + In establishing a new flow, the source node generates a nonzero + 16-bit flow ID greater than any unexpired flow IDs for this (source, + destination) pair. If the source wishes for this flow to become the + default flow, the low bit of the flow ID MUST be set (the flow ID is + an odd number); otherwise, the low bit MUST NOT be set (the flow ID + is an even number). + + The source node establishing the new flow then transmits a packet + containing a DSR Options header with a Source Route option. To + establish the flow, the source node also MUST include in the packet a + DSR Flow State header, with the Flow ID field set to the chosen flow + ID for the new flow, and MUST include a Timeout option in the DSR + Options header, giving the lifetime after which state information + about this flow is to expire. This packet will generally be a normal + data packet being sent from this sender to the destination (for + example, the first packet sent after discovering the new route) but + is also treated as a "flow establishment" packet. + + + + + +Johnson, et al. Experimental [Page 21] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + The source node records this flow in its Flow Table for future use, + setting the TTL in this Flow Table entry to the value used in the TTL + field in the packet's IP header and setting the Lifetime in this + entry to the lifetime specified in the Timeout option in the DSR + Options header. The TTL field is used for Default Flow Forwarding, + as described in Sections 3.5.3 and 3.5.4. + + Any further packets sent with this flow ID before the timeout that + also contain a DSR Options header with a Source Route option MUST use + this same source route in the Source Route option. + +3.5.2. Receiving and Forwarding Establishment Packets + + Packets intended to establish a flow, as described in Section 3.5.1, + contain a DSR Options header with a Source Route option and are + forwarded along the indicated route. A node implementing the DSR + flow state extension, when receiving and forwarding such a DSR + packet, also keeps some state in its own Flow Table to enable it to + forward future packets that are sent along this flow with only the + flow ID specified. Specifically, if the packet also contains a DSR + Flow State header, this packet SHOULD cause an entry to be + established for this flow in the Flow Table of each node along the + packet's route. + + The Hop Count field of the DSR Flow State header is also stored in + the Flow Table, as is the lifetime specified in the Timeout option + specified in the DSR Options header. + + If the Flow ID is odd and there is no flow in the Flow Table with + Flow ID greater than the received Flow ID, set the default Flow ID + for this (IP Source Address, IP Destination Address) pair to the + received Flow ID, and the TTL of the packet is recorded. + + The Flow ID option is removed before final delivery of the packet. + +3.5.3. Sending Packets along Established Flows + + When a flow is established as described in Section 3.5.1, a packet is + sent that establishes state in each node along the route. This state + is soft; that is, the protocol contains mechanisms for recovering + from the loss of this state. However, the use of these mechanisms + may result in reduced performance for packets sent along flows with + forgotten state. As a result, it is desirable to differentiate + behavior based on whether or not the sender is reasonably certain + that the flow state exists on each node along the route. We define a + flow's state to be "established end-to-end" if the Flow Tables of all + nodes on the route contains forwarding information for that flow. + While it is impossible to detect whether or not a flow's state has + + + +Johnson, et al. Experimental [Page 22] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + been established end-to-end without sending packets, implementations + may make reasonable assumptions about the retention of flow state and + the probability that an establishment packet has been seen by all + nodes on the route. + + A source wishing to send a packet along an established flow + determines if the flow state has been established end-to-end. If it + has not, a DSR Options header with Source Route option with this + flow's route is added to the packet. The source SHOULD set the Flow + ID field of the DSR Flow State header either to the flow ID + previously associated with this flow's route or to zero. If it sets + the Flow ID field to any other value, it MUST follow the processing + steps in Section 3.5.1 for establishing a new flow ID. If it sets + the Flow ID field to a nonzero value, it MUST include a Timeout + option with a value not greater than the timeout remaining in the + node's Flow Table, and if its TTL is not equal to that specified in + the Flow Table, the flow MUST NOT be used as a default flow in the + future. + + Once flow state has been established end-to-end for non-default + flows, a source adds a DSR Flow State header to each packet it wishes + to send along that flow, setting the Flow ID field to the flow ID of + that flow. A Source Route option SHOULD NOT be added to the packet, + though if one is, then the steps for processing flows that have not + been established end-to-end MUST be followed. + + Once flow state has been established end-to-end for default flows, + sources sending packets with IP TTL equal to the TTL value in the + local Flow Table entry for this flow then transmit the packet to the + next hop. In this case, a DSR Flow State header SHOULD NOT be added + to the packet and a DSR Options header likewise SHOULD NOT be added + to the packet; though if one is, the steps for sending packets along + non-default flows MUST be followed. If the IP TTL is not equal to + the TTL value in the local Flow Table, then the steps for processing + a non-default flow MUST be followed. + +3.5.4. Receiving and Forwarding Packets Sent along Established Flows + + The handling of packets containing a DSR Options header with both a + nonzero Flow ID and a Source Route option is described in Section + 3.5.2. The Flow ID is ignored when it is equal to zero. This + section only describes handling of packets without a Source Route + option. + + If a node receives a packet with a Flow ID in the DSR Options header + that indicates an unexpired flow in the node's Flow Table, it + increments the Hop Count in the DSR Options header and forwards the + packet to the next hop indicated in the Flow Table. + + + +Johnson, et al. Experimental [Page 23] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + If a node receives a packet with a Flow ID that indicates a flow not + currently in the node's Flow Table, it returns a Route Error of type + UNKNOWN_FLOW with Error Destination and IP Destination addresses + copied from the IP Source of the packet triggering the error. This + error packet SHOULD be MAC-destined to the node from which the packet + was received; if it cannot confirm reachability of the previous node + using Route Maintenance, it MUST send the error as described in + Section 8.1.1. The node sending the error SHOULD attempt to salvage + the packet triggering the Route Error. If it does salvage the + packet, it MUST zero the Flow ID in the packet. + + If a node receives a packet with no DSR Options header and no DSR + Flow State header, it checks the Default Flow Table. If there is a + matching entry, it forwards to the next hop indicated in the Flow + Table for the default flow. Otherwise, it returns a Route Error of + type DEFAULT_FLOW_UNKNOWN with Error Destination and IP Destination + addresses copied from the IP Source Address of the packet triggering + the error. This error packet SHOULD be MAC-destined to the node from + which it was received; if this node cannot confirm reachability of + the previous node using Route Maintenance, it MUST send the error as + described in Section 8.1.1. The node sending the error SHOULD + attempt to salvage the packet triggering the Route Error. If it does + salvage the packet, it MUST zero the Flow ID in the packet. + +3.5.5. Processing Route Errors + + When a node receives a Route Error of type UNKNOWN_FLOW, it marks the + flow to indicate that it has not been established end-to-end. When a + node receives a Route Error of type DEFAULT_FLOW_UNKNOWN, it marks + the default flow to indicate that it has not been established end- + to-end. + +3.5.6. Interaction with Automatic Route Shortening + + Because a full source route is not carried in every packet, an + alternative method for performing automatic route shortening is + necessary for packets using the flow state extension. Instead, nodes + promiscuously listen to packets, and if a node receives a packet with + (IP Source, IP Destination, Flow ID) found in the Flow Table but the + MAC-layer (next hop) destination address of the packet is not this + node, the node determines whether the packet was sent by an upstream + or downstream node by examining the Hop Count field in the DSR Flow + State header. If the Hop Count field is less than the expected Hop + Count at this node (that is, the expected Hop Count field in the Flow + Table described in Section 5.1), the node assumes that the packet was + sent by an upstream node and adds an entry for the packet to its + Automatic Route Shortening Table, possibly evicting an earlier entry + added to this table. When the packet is then sent to that node for + + + +Johnson, et al. Experimental [Page 24] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + forwarding, the node finds that it has previously received the packet + by checking its Automatic Route Shortening Table and returns a + gratuitous Route Reply to the source of the packet. + +3.5.7. Loop Detection + + If a node receives a packet for forwarding with TTL lower than + expected and default flow forwarding is being used, it sends a Route + Error of type DEFAULT_FLOW_UNKNOWN back to the IP source. It can + attempt delivery of the packet by normal salvaging (subject to + constraints described in Section 8.6.7). + +3.5.8. Acknowledgement Destination + + In packets sent using Flow State, the previous hop is not necessarily + known. In order to allow nodes that have lost flow state to + determine the previous hop, the address of the previous hop can + optionally be stored in the Acknowledgement Request. This extension + SHOULD NOT be used when a Source Route option is present, MAY be used + when flow state routing is used without a Source Route option, and + SHOULD be used before Route Maintenance determines that the next-hop + destination is unreachable. + +3.5.9. Crash Recovery + + Each node has a maximum Timeout value that it can possibly generate. + This can be based on the largest number that can be set in a timeout + option (2**16 - 1 seconds) or may be less than this, set in system + software. When a node crashes, it does not establish new flows for a + period equal to this maximum Timeout value, in order to avoid + colliding with its old Flow IDs. + +3.5.10. Rate Limiting + + Flow IDs can be assigned with a counter. More specifically, the + "Current Flow ID" is kept. When a new default Flow ID needs to be + assigned, if the Current Flow ID is odd, the Current Flow ID is + assigned as the Flow ID and the Current Flow ID is incremented by + one; if the Current Flow ID is even, one plus the Current Flow ID is + assigned as the Flow ID and the Current Flow ID is incremented by + two. + + If Flow IDs are assigned in this way, one algorithm for avoiding + duplicate, unexpired Flow IDs is to rate limit new Flow IDs to an + average rate of n assignments per second, where n is 2**15 divided by + the maximum Timeout value. This can be averaged over any period not + exceeding the maximum Timeout value. + + + + +Johnson, et al. Experimental [Page 25] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + +3.5.11. Interaction with Packet Salvaging + + Salvaging is modified to zero the Flow ID field in the packet. Also, + anytime this document refers to the Salvage field in the Source Route + option in a DSR Options header, packets without a Source Route option + are considered to have the value zero in the Salvage field. + +4. Conceptual Data Structures + + This document describes the operation of the DSR protocol in terms of + a number of conceptual data structures. This section describes each + of these data structures and provides an overview of its use in the + protocol. In an implementation of the protocol, these data + structures MUST be implemented in a manner consistent with the + external behavior described in this document, but the choice of + implementation used is otherwise unconstrained. Additional + conceptual data structures are required for the optional flow state + extensions to DSR; these data structures are described in Section 5. + +4.1. Route Cache + + Each node implementing DSR MUST maintain a Route Cache, containing + routing information needed by the node. A node adds information to + its Route Cache as it learns of new links between nodes in the ad hoc + network; for example, a node may learn of new links when it receives + a packet carrying a Route Request, Route Reply, or DSR source route. + Likewise, a node removes information from its Route Cache as it + learns that existing links in the ad hoc network have broken. For + example, a node may learn of a broken link when it receives a packet + carrying a Route Error or through the link-layer retransmission + mechanism reporting a failure in forwarding a packet to its next-hop + destination. + + Anytime a node adds new information to its Route Cache, the node + SHOULD check each packet in its own Send Buffer (Section 4.2) to + determine whether a route to that packet's IP Destination Address now + exists in the node's Route Cache (including the information just + added to the Cache). If so, the packet SHOULD then be sent using + that route and removed from the Send Buffer. + + It is possible to interface a DSR network with other networks, + external to this DSR network. Such external networks may, for + example, be the Internet or may be other ad hoc networks routed with + a routing protocol other than DSR. Such external networks may also + be other DSR networks that are treated as external networks in order + to improve scalability. The complete handling of such external + networks is beyond the scope of this document. However, this + document specifies a minimal set of requirements and features + + + +Johnson, et al. Experimental [Page 26] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + necessary to allow nodes only implementing this specification to + interoperate correctly with nodes implementing interfaces to such + external networks. This minimal set of requirements and features + involve the First Hop External (F) and Last Hop External (L) bits in + a DSR Source Route option (Section 6.7) and a Route Reply option + (Section 6.3) in a packet's DSR Options header (Section 6). These + requirements also include the addition of an External flag bit + tagging each link in the Route Cache, copied from the First Hop + External (F) and Last Hop External (L) bits in the DSR Source Route + option or Route Reply option from which this link was learned. + + The Route Cache SHOULD support storing more than one route to each + destination. In searching the Route Cache for a route to some + destination node, the Route Cache is searched by destination node + address. The following properties describe this searching function + on a Route Cache: + + - Each implementation of DSR at any node MAY choose any appropriate + strategy and algorithm for searching its Route Cache and selecting + a "best" route to the destination from among those found. For + example, a node MAY choose to select the shortest route to the + destination (the shortest sequence of hops), or it MAY use an + alternate metric to select the route from the Cache. + + - However, if there are multiple cached routes to a destination, the + selection of routes when searching the Route Cache SHOULD prefer + routes that do not have the External flag set on any link. This + preference will select routes that lead directly to the target + node over routes that attempt to reach the target via any external + networks connected to the DSR ad hoc network. + + - In addition, any route selected when searching the Route Cache + MUST NOT have the External bit set for any links other than + possibly the first link, the last link, or both; the External bit + MUST NOT be set for any intermediate hops in the route selected. + + An implementation of a Route Cache MAY provide a fixed capacity for + the cache, or the cache size MAY be variable. The following + properties describe the management of available space within a node's + Route Cache: + + - Each implementation of DSR at each node MAY choose any appropriate + policy for managing the entries in its Route Cache, such as when + limited cache capacity requires a choice of which entries to + retain in the Cache. For example, a node MAY chose a "least + recently used" (LRU) cache replacement policy, in which the entry + + + + + +Johnson, et al. Experimental [Page 27] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + last used longest ago is discarded from the cache if a decision + needs to be made to allow space in the cache for some new entry + being added. + + - However, the Route Cache replacement policy SHOULD allow routes to + be categorized based upon "preference", where routes with a higher + preferences are less likely to be removed from the cache. For + example, a node could prefer routes for which it initiated a Route + Discovery over routes that it learned as the result of promiscuous + snooping on other packets. In particular, a node SHOULD prefer + routes that it is presently using over those that it is not. + + Any suitable data structure organization, consistent with this + specification, MAY be used to implement the Route Cache in any node. + For example, the following two types of organization are possible: + + - In DSR, the route returned in each Route Reply that is received by + the initiator of a Route Discovery (or that is learned from the + header of overhead packets, as described in Section 8.1.4) + represents a complete path (a sequence of links) leading to the + destination node. By caching each of these paths separately, a + "path cache" organization for the Route Cache can be formed. A + path cache is very simple to implement and easily guarantees that + all routes are loop-free, since each individual route from a Route + Reply or Route Request or used in a packet is loop-free. To + search for a route in a path cache data structure, the sending + node can simply search its Route Cache for any path (or prefix of + a path) that leads to the intended destination node. + + This type of organization for the Route Cache in DSR has been + extensively studied through simulation [BROCH98, HU00, + JOHANSSON99, MALTZ99a] and through implementation of DSR in a + mobile outdoor testbed under significant workload [MALTZ99b, + MALTZ00, MALTZ01]. + + - Alternatively, a "link cache" organization could be used for the + Route Cache, in which each individual link (hop) in the routes + returned in Route Reply packets (or otherwise learned from the + header of overhead packets) is added to a unified graph data + structure of this node's current view of the network topology. To + search for a route in link cache, the sending node must use a more + complex graph search algorithm, such as the well-known Dijkstra's + shortest-path algorithm, to find the current best path through the + graph to the destination node. Such an algorithm is more + difficult to implement and may require significantly more CPU time + to execute. + + + + + +Johnson, et al. Experimental [Page 28] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + However, a link cache organization is more powerful than a path + cache organization, in its ability to effectively utilize all of + the potential information that a node might learn about the state + of the network. In particular, links learned from different Route + Discoveries or from the header of any overheard packets can be + merged together to form new routes in the network, but this is not + possible in a path cache due to the separation of each individual + path in the cache. + + This type of organization for the Route Cache in DSR, including + the effect of a range of implementation choices, has been studied + through detailed simulation [HU00]. + + The choice of data structure organization to use for the Route Cache + in any DSR implementation is a local matter for each node and affects + only performance; any reasonable choice of organization for the Route + Cache does not affect either correctness or interoperability. + + Each entry in the Route Cache SHOULD have a timeout associated with + it, to allow that entry to be deleted if not used within some time. + The particular choice of algorithm and data structure used to + implement the Route Cache SHOULD be considered in choosing the + timeout for entries in the Route Cache. The configuration variable + RouteCacheTimeout defined in Section 9 specifies the timeout to be + applied to entries in the Route Cache, although it is also possible + to instead use an adaptive policy in choosing timeout values rather + than using a single timeout setting for all entries. For example, + the Link-MaxLife cache design (below) uses an adaptive timeout + algorithm and does not use the RouteCacheTimeout configuration + variable. + + As guidance to implementers, Appendix A describes a type of link + cache known as "Link-MaxLife" that has been shown to outperform other + types of link caches and path caches studied in detailed simulation + [HU00]. Link-MaxLife is an adaptive link cache in which each link in + the cache has a timeout that is determined dynamically by the caching + node according to its observed past behavior of the two nodes at the + ends of the link. In addition, when selecting a route for a packet + being sent to some destination, among cached routes of equal length + (number of hops) to that destination, Link-MaxLife selects the route + with the longest expected lifetime (highest minimum timeout of any + link in the route). Use of the Link-MaxLife design for the Route + Cache is recommended in implementations of DSR. + + + + + + + + +Johnson, et al. Experimental [Page 29] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + +4.2. Send Buffer + + The Send Buffer of a node implementing DSR is a queue of packets that + cannot be sent by that node because it does not yet have a source + route to each such packet's destination. Each packet in the Send + Buffer is logically associated with the time that it was placed into + the buffer and SHOULD be removed from the Send Buffer and silently + discarded after a period of SendBufferTimeout after initially being + placed in the buffer. If necessary, a FIFO strategy SHOULD be used + to evict packets before they time out to prevent the buffer from + overflowing. + + Subject to the rate limiting defined in Section 4.3, a Route + Discovery SHOULD be initiated as often as allowed for the destination + address of any packets residing in the Send Buffer. + +4.3. Route Request Table + + The Route Request Table of a node implementing DSR records + information about Route Requests that have been recently originated + or forwarded by this node. The table is indexed by IP address. + + The Route Request Table on a node records the following information + about nodes to which this node has initiated a Route Request: + + - The Time-to-Live (TTL) field used in the IP header of the Route + Request for the last Route Discovery initiated by this node for + that target node. This value allows the node to implement a + variety of algorithms for controlling the spread of its Route + Request on each Route Discovery initiated for a target. As + examples, two possible algorithms for this use of the TTL field + are described in Section 3.3.3. + + - The time that this node last originated a Route Request for that + target node. + + - The number of consecutive Route Discoveries initiated for this + target since receiving a valid Route Reply giving a route to that + target node. + + - The remaining amount of time before which this node MAY next + attempt at a Route Discovery for that target node. When the node + initiates a new Route Discovery for this target node, this field + in the Route Request Table entry for that target node is + initialized to the timeout for that Route Discovery, after which + the node MAY initiate a new Discovery for that target. Until a + valid Route Reply is received for this target node address, a node + MUST implement a back-off algorithm in determining this timeout + + + +Johnson, et al. Experimental [Page 30] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + value for each successive Route Discovery initiated for this + target using the same Time-to-Live (TTL) value in the IP header of + the Route Request packet. The timeout between such consecutive + Route Discovery initiations SHOULD increase by doubling the + timeout value on each new initiation. + + In addition, the Route Request Table on a node also records the + following information about initiator nodes from which this node has + received a Route Request: + + - A FIFO cache of size RequestTableIds entries containing the + Identification value and target address from the most recent Route + Requests received by this node from that initiator node. + + Nodes SHOULD use an LRU policy to manage the entries in their Route + Request Table. + + The number of Identification values to retain in each Route Request + Table entry, RequestTableIds, MUST NOT be unlimited, since, in the + worst case, when a node crashes and reboots, the first + RequestTableIds Route Discoveries it initiates after rebooting could + appear to be duplicates to the other nodes in the network. In + addition, a node SHOULD base its initial Identification value, used + for Route Discoveries after rebooting, on a battery backed-up clock + or other persistent memory device, if available, in order to help + avoid any possible such delay in successfully discovering new routes + after rebooting; if no such source of initial Identification value is + available, a node after rebooting SHOULD base its initial + Identification value on a random number. + +4.4. Gratuitous Route Reply Table + + The Gratuitous Route Reply Table of a node implementing DSR records + information about "gratuitous" Route Replies sent by this node as + part of automatic route shortening. As described in Section 3.4.3, a + node returns a gratuitous Route Reply when it overhears a packet + transmitted by some node, for which the node overhearing the packet + was not the intended next-hop node but was named later in the + unexpended hops of the source route in that packet; the node + overhearing the packet returns a gratuitous Route Reply to the + original sender of the packet, listing the shorter route (not + including the hops of the source route "skipped over" by this + packet). A node uses its Gratuitous Route Reply Table to limit the + rate at which it originates gratuitous Route Replies to the same + original sender for the same node from which it overheard a packet to + trigger the gratuitous Route Reply. + + + + + +Johnson, et al. Experimental [Page 31] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + Each entry in the Gratuitous Route Reply Table of a node contains the + following fields: + + - The address of the node to which this node originated a gratuitous + Route Reply. + + - The address of the node from which this node overheard the packet + triggering that gratuitous Route Reply. + + - The remaining time before which this entry in the Gratuitous Route + Reply Table expires and SHOULD be deleted by the node. When a + node creates a new entry in its Gratuitous Route Reply Table, the + timeout value for that entry SHOULD be initialized to the value + GratReplyHoldoff. + + When a node overhears a packet that would trigger a gratuitous Route + Reply, if a corresponding entry already exists in the node's + Gratuitous Route Reply Table, then the node SHOULD NOT send a + gratuitous Route Reply for that packet. Otherwise (i.e., if no + corresponding entry already exists), the node SHOULD create a new + entry in its Gratuitous Route Reply Table to record that gratuitous + Route Reply, with a timeout value of GratReplyHoldoff. + +4.5. Network Interface Queue and Maintenance Buffer + + Depending on factors such as the structure and organization of the + operating system, protocol stack implementation, network interface + device driver, and network interface hardware, a packet being + transmitted could be queued in a variety of ways. For example, + outgoing packets from the network protocol stack might be queued at + the operating system or link layer, before transmission by the + network interface. The network interface might also provide a + retransmission mechanism for packets, such as occurs in IEEE 802.11 + [IEEE80211]; the DSR protocol, as part of Route Maintenance, requires + limited buffering of packets already transmitted for which the + reachability of the next-hop destination has not yet been determined. + The operation of DSR is defined here in terms of two conceptual data + structures that, together, incorporate this queuing behavior. + + The Network Interface Queue of a node implementing DSR is an output + queue of packets from the network protocol stack waiting to be + transmitted by the network interface; for example, in the 4.4BSD Unix + network protocol stack implementation, this queue for a network + interface is represented as a "struct ifqueue" [WRIGHT95]. This + queue is used to hold packets while the network interface is in the + process of transmitting another packet. + + + + + +Johnson, et al. Experimental [Page 32] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + The Maintenance Buffer of a node implementing DSR is a queue of + packets sent by this node that are awaiting next-hop reachability + confirmation as part of Route Maintenance. For each packet in the + Maintenance Buffer, a node maintains a count of the number of + retransmissions and the time of the last retransmission. Packets are + added to the Maintenance buffer after the first transmission attempt + is made. The Maintenance Buffer MAY be of limited size; when adding + a new packet to the Maintenance Buffer, if the buffer size is + insufficient to hold the new packet, the new packet SHOULD be + silently discarded. If, after MaxMaintRexmt attempts to confirm + next-hop reachability of some node, no confirmation is received, all + packets in this node's Maintenance Buffer with this next-hop + destination SHOULD be removed from the Maintenance Buffer. In this + case, the node also SHOULD originate a Route Error for this packet to + each original source of a packet removed in this way (Section 8.3) + and SHOULD salvage each packet removed in this way (Section 8.3.6) if + it has another route to that packet's IP Destination Address in its + Route Cache. The definition of MaxMaintRexmt conceptually includes + any retransmissions that might be attempted for a packet at the link + layer or within the network interface hardware. The timeout value to + use for each transmission attempt for an acknowledgement request + depends on the type of acknowledgement mechanism used by Route + Maintenance for that attempt, as described in Section 8.3. + +4.6. Blacklist + + When a node using the DSR protocol is connected through a network + interface that requires physically bidirectional links for unicast + transmission, the node MUST maintain a blacklist. The blacklist is a + table, indexed by neighbor node address, that indicates that the link + between this node and the specified neighbor node may not be + bidirectional. A node places another node's address in this list + when it believes that broadcast packets from that other node reach + this node, but that unicast transmission between the two nodes is not + possible. For example, if a node forwarding a Route Reply discovers + that the next hop is unreachable, it places that next hop in the + node's blacklist. + + Once a node discovers that it can communicate bidirectionally with + one of the nodes listed in the blacklist, it SHOULD remove that node + from the blacklist. For example, if node A has node B listed in its + blacklist, but after transmitting a Route Request, node A hears B + forward the Route Request with a route record indicating that the + broadcast from A to B was successful, then A SHOULD remove the entry + for node B from its blacklist. + + + + + + +Johnson, et al. Experimental [Page 33] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + A node MUST associate a state with each node listed in its blacklist, + specifying whether the unidirectionality of the link to that node is + "questionable" or "probable". Each time the unreachability is + positively determined, the node SHOULD set the state to "probable". + After the unreachability has not been positively determined for some + amount of time, the state SHOULD revert to "questionable". A node + MAY expire entries for nodes from its blacklist after a reasonable + amount of time. + +5. Additional Conceptual Data Structures for Flow State Extension + + This section defines additional conceptual data structures used by + the optional "flow state" extension to DSR. In an implementation of + the protocol, these data structures MUST be implemented in a manner + consistent with the external behavior described in this document, but + the choice of implementation used is otherwise unconstrained. + +5.1. Flow Table + + A node implementing the flow state extension MUST implement a Flow + Table or other data structure consistent with the external behavior + described in this section. A node not implementing the flow state + extension SHOULD NOT implement a Flow Table. + + The Flow Table records information about flows from which packets + recently have been sent or forwarded by this node. The table is + indexed by a triple (IP Source Address, IP Destination Address, Flow + ID), where Flow ID is a 16-bit number assigned by the source as + described in Section 3.5.1. Each entry in the Flow Table contains + the following fields: + + - The MAC address of the next-hop node along this flow. + + - An indication of the outgoing network interface on this node to be + used in transmitting packets along this flow. + + - The MAC address of the previous-hop node along this flow. + + - An indication of the network interface on this node from which + packets from that previous-hop node are received. + + - A timeout after which this entry in the Flow Table MUST be + deleted. + + - The expected value of the Hop Count field in the DSR Flow State + header for packets received for forwarding along this field (for + use with packets containing a DSR Flow State header). + + + + +Johnson, et al. Experimental [Page 34] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + - An indication of whether or not this flow can be used as a default + flow for packets originated by this node (the Flow ID of a default + flow MUST be odd). + + - The entry SHOULD record the complete source route for the flow. + (Nodes not recording the complete source route cannot participate + in Automatic Route Shortening.) + + - The entry MAY contain a field recording the time this entry was + last used. + + The entry MUST be deleted when its timeout expires. + +5.2. Automatic Route Shortening Table + + A node implementing the flow state extension SHOULD implement an + Automatic Route Shortening Table or other data structure consistent + with the external behavior described in this section. A node not + implementing the flow state extension SHOULD NOT implement an + Automatic Route Shortening Table. + + The Automatic Route Shortening Table records information about + received packets for which Automatic Route Shortening may be + possible. The table is indexed by a triple (IP Source Address, IP + Destination Address, Flow ID). Each entry in the Automatic Route + Shortening Table contains a list of (packet identifier, Hop Count) + pairs for that flow. The packet identifier in the list may be any + unique identifier for the received packet; for example, for IPv4 + packets, the combination of the following fields from the packet's IP + header MAY be used as a unique identifier for the packet: Source + Address, Destination Address, Identification, Protocol, Fragment + Offset, and Total Length. The Hop Count in the list in the entry is + copied from the Hop Count field in the DSR Flow State header of the + received packet for which this table entry was created. Any packet + identifier SHOULD appear at most once in an entry's list, and this + list item SHOULD record the minimum Hop Count value received for that + packet (if the wireless signal strength or signal-to-noise ratio at + which a packet is received is available to the DSR implementation in + a node, the node MAY, for example, remember instead in this list the + minimum Hop Count value for which the received packet's signal + strength or signal-to-noise ratio exceeded some threshold). + + Space in the Automatic Route Shortening Table of a node MAY be + dynamically managed by any local algorithm at the node. For example, + in order to limit the amount of memory used to store the table, any + existing entry MAY be deleted at any time, and the number of packets + listed in each entry MAY be limited. However, when reclaiming space + in the table, nodes SHOULD favor retaining information about more + + + +Johnson, et al. Experimental [Page 35] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + flows in the table rather than about more packets listed in each + entry in the table, as long as at least the listing of some small + number of packets (e.g., 3) can be retained in each entry. + +5.3. Default Flow ID Table + + A node implementing the flow state extension MUST implement a Default + Flow Table or other data structure consistent with the external + behavior described in this section. A node not implementing the flow + state extension SHOULD NOT implement a Default Flow Table. + + For each (IP Source Address, IP Destination Address) pair for which a + node forwards packets, the node MUST record: + + - The largest odd Flow ID value seen. + + - The time at which all the corresponding flows that are forwarded + by this node expire. + + - The current default Flow ID. + + - A flag indicating whether or not the current default Flow ID is + valid. + + If a node deletes this record for an (IP Source Address, IP + Destination Address) pair, it MUST also delete all Flow Table entries + for that pair. Nodes MUST delete table entries if all of this (IP + Source Address, IP Destination Address) pair's flows that are + forwarded by this node expire. + +6. DSR Options Header Format + + The Dynamic Source Routing protocol makes use of a special header + carrying control information that can be included in any existing IP + packet. This DSR Options header in a packet contains a small fixed- + sized, 4-octet portion, followed by a sequence of zero or more DSR + options carrying optional information. The end of the sequence of + DSR options in the DSR Options header is implied by the total length + of the DSR Options header. + + For IPv4, the DSR Options header MUST immediately follow the IP + header in the packet. (If a Hop-by-Hop Options extension header, as + defined in IPv6 [RFC2460], becomes defined for IPv4, the DSR Options + header MUST immediately follow the Hop-by-Hop Options extension + header, if one is present in the packet, and MUST otherwise + immediately follow the IP header.) + + + + + +Johnson, et al. Experimental [Page 36] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + To add a DSR Options header to a packet, the DSR Options header is + inserted following the packet's IP header, before any following + header such as a traditional (e.g., TCP or UDP) transport layer + header. Specifically, the Protocol field in the IP header is used to + indicate that a DSR Options header follows the IP header, and the + Next Header field in the DSR Options header is used to indicate the + type of protocol header (such as a transport layer header) following + the DSR Options header. + + If any headers follow the DSR Options header in a packet, the total + length of the DSR Options header (and thus the total, combined length + of all DSR options present) MUST be a multiple of 4 octets. This + requirement preserves the alignment of these following headers in the + packet. + +6.1. Fixed Portion of DSR Options Header + + The fixed portion of the DSR Options header is used to carry + information that must be present in any DSR Options header. This + fixed portion of the DSR Options header has the following format: + + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Next Header |F| Reserved | Payload Length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + . . + . Options . + . . + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Next Header + + 8-bit selector. Identifies the type of header immediately + following the DSR Options header. Uses the same values as the + IPv4 Protocol field [RFC1700]. If no header follows, then Next + Header MUST have the value 59, "No Next Header" [RFC2460]. + + Flow State Header (F) + + Flag bit. MUST be set to 0. This bit is set in a DSR Flow + State header (Section 7.1) and clear in a DSR Options header. + + Reserved + + MUST be sent as 0 and ignored on reception. + + + + + +Johnson, et al. Experimental [Page 37] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + Payload Length + + The length of the DSR Options header, excluding the 4-octet + fixed portion. The value of the Payload Length field defines + the total length of all options carried in the DSR Options + header. + + Options + + Variable-length field; the length of the Options field is + specified by the Payload Length field in this DSR Options + header. Contains one or more pieces of optional information + (DSR options), encoded in type-length-value (TLV) format (with + the exception of the Pad1 option described in Section 6.8). + + The placement of DSR options following the fixed portion of the DSR + Options header MAY be padded for alignment. However, due to the + typically limited available wireless bandwidth in ad hoc networks, + this padding is not required, and receiving nodes MUST NOT expect + options within a DSR Options header to be aligned. + + Each DSR option is assigned a unique Option Type code. The most + significant 3 bits (that is, Option Type & 0xE0) allow a node not + implementing processing for this Option Type value to behave in the + manner closest to correct for that type: + + - The most significant bit in the Option Type value (that is, Option + Type & 0x80) represents whether or not a node receiving this + Option Type (when the node does not implement processing for this + Option Type) SHOULD respond to such a DSR option with a Route + Error of type OPTION_NOT_SUPPORTED, except that such a Route Error + SHOULD never be sent in response to a packet containing a Route + Request option. + + - The two following bits in the Option Type value (that is, Option + Type & 0x60) are a two-bit field indicating how such a node that + does not support this Option Type MUST process the packet: + + 00 = Ignore Option + 01 = Remove Option + 10 = Mark Option + 11 = Drop Packet + + When these 2 bits are 00 (that is, Option Type & 0x60 == 0), a + node not implementing processing for that Option Type MUST use the + Opt Data Len field to skip over the option and continue + processing. When these 2 bits are 01 (that is, Option Type & 0x60 + == 0x20), a node not implementing processing for that Option Type + + + +Johnson, et al. Experimental [Page 38] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + MUST use the Opt Data Len field to remove the option from the + packet and continue processing as if the option had not been + included in the received packet. When these 2 bits are 10 (that + is, Option Type & 0x60 == 0x40), a node not implementing + processing for that Option Type MUST set the most significant bit + following the Opt Data Len field, MUST ignore the contents of the + option using the Opt Data Len field, and MUST continue processing + the packet. Finally, when these 2 bits are 11 (that is, Option + Type & 0x60 == 0x60), a node not implementing processing for that + Option Type MUST drop the packet. + + The following types of DSR options are defined in this document for + use within a DSR Options header: + + - Route Request option (Section 6.2) + + - Route Reply option (Section 6.3) + + - Route Error option (Section 6.4) + + - Acknowledgement Request option (Section 6.5) + + - Acknowledgement option (Section 6.6) + + - DSR Source Route option (Section 6.7) + + - Pad1 option (Section 6.8) + + - PadN option (Section 6.9) + + In addition, Section 7 specifies further DSR options for use with the + optional DSR flow state extension. + + + + + + + + + + + + + + + + + + + +Johnson, et al. Experimental [Page 39] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + +6.2. Route Request Option + + The Route Request option in a DSR Options header is encoded 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Option Type | Opt Data Len | Identification | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Target Address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Address[1] | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Address[2] | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | ... | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Address[n] | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + IP fields: + + Source Address + + MUST be set to the address of the node originating this packet. + Intermediate nodes that retransmit the packet to propagate the + Route Request MUST NOT change this field. + + Destination Address + + MUST be set to the IP limited broadcast address + (255.255.255.255). + + Hop Limit (TTL) + + MAY be varied from 1 to 255, for example, to implement non- + propagating Route Requests and Route Request expanding-ring + searches (Section 3.3.3). + + Route Request fields: + + Option Type + + 1. Nodes not understanding this option will ignore this + option. + + + + + +Johnson, et al. Experimental [Page 40] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + Opt Data Len + + 8-bit unsigned integer. Length of the option, in octets, + excluding the Option Type and Opt Data Len fields. MUST be set + equal to (4 * n) + 6, where n is the number of addresses in the + Route Request Option. + + Identification + + A unique value generated by the initiator (original sender) of + the Route Request. Nodes initiating a Route Request generate a + new Identification value for each Route Request, for example + based on a sequence number counter of all Route Requests + initiated by the node. + + This value allows a receiving node to determine whether it has + recently seen a copy of this Route Request. If this + Identification value (for this IP Source address and Target + Address) is found by this receiving node in its Route Request + Table (in the cache of Identification values in the entry there + for this initiating node), this receiving node MUST discard the + Route Request. When a Route Request is propagated, this field + MUST be copied from the received copy of the Route Request + being propagated. + + Target Address + + The address of the node that is the target of the Route + Request. + + Address[1..n] + + Address[i] is the IPv4 address of the i-th node recorded in the + Route Request option. The address given in the Source Address + field in the IP header is the address of the initiator of the + Route Discovery and MUST NOT be listed in the Address[i] + fields; the address given in Address[1] is thus the IPv4 + address of the first node on the path after the initiator. The + number of addresses present in this field is indicated by the + Opt Data Len field in the option (n = (Opt Data Len - 6) / 4). + Each node propagating the Route Request adds its own address to + this list, increasing the Opt Data Len value by 4 octets. + + The Route Request option MUST NOT appear more than once within a DSR + Options header. + + + + + + +Johnson, et al. Experimental [Page 41] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + +6.3. Route Reply Option + + The Route Reply option in a DSR Options header is encoded 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Option Type | Opt Data Len |L| Reserved | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Address[1] | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Address[2] | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | ... | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Address[n] | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + IP fields: + + Source Address + + Set to the address of the node sending the Route Reply. In the + case of a node sending a reply from its Route Cache (Section + 3.3.2) or sending a gratuitous Route Reply (Section 3.4.3), + this address can differ from the address that was the target of + the Route Discovery. + + Destination Address + + MUST be set to the address of the source node of the route + being returned. Copied from the Source Address field of the + Route Request generating the Route Reply or, in the case of a + gratuitous Route Reply, copied from the Source Address field of + the data packet triggering the gratuitous Reply. + + Route Reply fields: + + Option Type + + 2. Nodes not understanding this option will ignore this + option. + + + + + + + + + +Johnson, et al. Experimental [Page 42] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + Opt Data Len + + 8-bit unsigned integer. Length of the option, in octets, + excluding the Option Type and Opt Data Len fields. MUST be set + equal to (4 * n) + 1, where n is the number of addresses in the + Route Reply Option. + + Last Hop External (L) + + Set to indicate that the last hop given by the Route Reply (the + link from Address[n-1] to Address[n]) is actually an arbitrary + path in a network external to the DSR network; the exact route + outside the DSR network is not represented in the Route Reply. + Nodes caching this hop in their Route Cache MUST flag the + cached hop with the External flag. Such hops MUST NOT be + returned in a cached Route Reply generated from this Route + Cache entry, and selection of routes from the Route Cache to + route a packet being sent SHOULD prefer routes that contain no + hops flagged as External. + + Reserved + + MUST be sent as 0 and ignored on reception. + + Address[1..n] + + The source route being returned by the Route Reply. The route + indicates a sequence of hops, originating at the source node + specified in the Destination Address field of the IP header of + the packet carrying the Route Reply, through each of the + Address[i] nodes in the order listed in the Route Reply, ending + at the node indicated by Address[n]. The number of addresses + present in the Address[1..n] field is indicated by the Opt Data + Len field in the option (n = (Opt Data Len - 1) / 4). + + A Route Reply option MAY appear one or more times within a DSR + Options header. + + + + + + + + + + + + + + +Johnson, et al. Experimental [Page 43] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + +6.4. Route Error Option + + The Route Error option in a DSR Options header is encoded 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Option Type | Opt Data Len | Error Type |Reservd|Salvage| + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Error Source Address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Error Destination Address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + . . + . Type-Specific Information . + . . + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Option Type + + 3. Nodes not understanding this option will ignore this + option. + + Opt Data Len + + 8-bit unsigned integer. Length of the option, in octets, + excluding the Option Type and Opt Data Len fields. + + For the current definition of the Route Error option, + this field MUST be set to 10, plus the size of any + Type-Specific Information present in the Route Error. Further + extensions to the Route Error option format may also be + included after the Type-Specific Information portion of the + Route Error option specified above. The presence of such + extensions will be indicated by the Opt Data Len field. + When the Opt Data Len is greater than that required for + the fixed portion of the Route Error plus the necessary + Type-Specific Information as indicated by the Option Type + value in the option, the remaining octets are interpreted as + extensions. Currently, no such further extensions have been + defined. + + Error Type + + The type of error encountered. Currently, the following type + values are defined: + + + + + +Johnson, et al. Experimental [Page 44] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + 1 = NODE_UNREACHABLE + 2 = FLOW_STATE_NOT_SUPPORTED + 3 = OPTION_NOT_SUPPORTED + + Other values of the Error Type field are reserved for future + use. + + Reservd + + Reserved. MUST be sent as 0 and ignored on reception. + + Salvage + + A 4-bit unsigned integer. Copied from the Salvage field in the + DSR Source Route option of the packet triggering the Route + Error. + + The "total salvage count" of the Route Error option is derived + from the value in the Salvage field of this Route Error option + and all preceding Route Error options in the packet as follows: + the total salvage count is the sum of, for each such Route + Error option, one plus the value in the Salvage field of that + Route Error option. + + Error Source Address + + The address of the node originating the Route Error (e.g., the + node that attempted to forward a packet and discovered the link + failure). + + Error Destination Address + + The address of the node to which the Route Error must be + delivered. For example, when the Error Type field is set to + NODE_UNREACHABLE, this field will be set to the address of the + node that generated the routing information claiming that the + hop from the Error Source Address to Unreachable Node Address + (specified in the Type-Specific Information) was a valid hop. + + Type-Specific Information + + Information specific to the Error Type of this Route Error + message. + + A Route Error option MAY appear one or more times within a DSR + Options header. + + + + + +Johnson, et al. Experimental [Page 45] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + +6.4.1. Node Unreachable Type-Specific Information + + When the Route Error is of type NODE_UNREACHABLE, the Type-Specific + Information field is defined 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Unreachable Node Address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Unreachable Node Address + + The IP address of the node that was found to be unreachable + (the next-hop neighbor to which the node with address + Error Source Address was attempting to transmit the packet). + +6.4.2. Flow State Not Supported Type-Specific Information + + When the Route Error is of type FLOW_STATE_NOT_SUPPORTED, the + Type-Specific Information field is empty. + +6.4.3. Option Not Supported Type-Specific Information + + When the Route Error is of type OPTION_NOT_SUPPORTED, the + Type-Specific Information field is defined as follows: + + 0 1 2 3 4 5 6 7 + +-+-+-+-+-+-+-+-+ + |Unsupported Opt| + +-+-+-+-+-+-+-+-+ + + Unsupported Opt + + The Option Type of option triggering the Route Error. + +6.5. Acknowledgement Request Option + + The Acknowledgement Request option in a DSR Options header is encoded + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Option Type | Opt Data Len | Identification | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + + + +Johnson, et al. Experimental [Page 46] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + Option Type + + 160. Nodes not understanding this option will remove the + option and return a Route Error. + + Opt Data Len + + 8-bit unsigned integer. Length of the option, in octets, + excluding the Option Type and Opt Data Len fields. + + Identification + + The Identification field is set to a unique value and is copied + into the Identification field of the Acknowledgement option + when returned by the node receiving the packet over this hop. + + An Acknowledgement Request option MUST NOT appear more than once + within a DSR Options header. + +6.6. Acknowledgement Option + + The Acknowledgement option in a DSR Options header is encoded 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Option Type | Opt Data Len | Identification | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | ACK Source Address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | ACK Destination Address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Option Type + + 32. Nodes not understanding this option will remove the + option. + + Opt Data Len + + 8-bit unsigned integer. Length of the option, in octets, + excluding the Option Type and Opt Data Len fields. + + Identification + + Copied from the Identification field of the Acknowledgement + Request option of the packet being acknowledged. + + + +Johnson, et al. Experimental [Page 47] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + ACK Source Address + + The address of the node originating the acknowledgement. + + ACK Destination Address + + The address of the node to which the acknowledgement is to be + delivered. + + An Acknowledgement option MAY appear one or more times within a DSR + Options header. + +6.7. DSR Source Route Option + + The DSR Source Route option in a DSR Options header is encoded 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Option Type | Opt Data Len |F|L|Reservd|Salvage| Segs Left | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Address[1] | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Address[2] | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | ... | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Address[n] | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Option Type + + 96. Nodes not understanding this option will drop the packet. + + Opt Data Len + + 8-bit unsigned integer. Length of the option, in octets, + excluding the Option Type and Opt Data Len fields. For the + format of the DSR Source Route option defined here, this field + MUST be set to the value (n * 4) + 2, where n is the number of + addresses present in the Address[i] fields. + + First Hop External (F) + + Set to indicate that the first hop indicated by the DSR Source + Route option is actually an arbitrary path in a network + external to the DSR network; the exact route outside the DSR + + + +Johnson, et al. Experimental [Page 48] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + network is not represented in the DSR Source Route option. + Nodes caching this hop in their Route Cache MUST flag the + cached hop with the External flag. Such hops MUST NOT be + returned in a Route Reply generated from this Route Cache + entry, and selection of routes from the Route Cache to route a + packet being sent SHOULD prefer routes that contain no hops + flagged as External. + + Last Hop External (L) + + Set to indicate that the last hop indicated by the DSR Source + Route option is actually an arbitrary path in a network + external to the DSR network; the exact route outside the DSR + network is not represented in the DSR Source Route option. + Nodes caching this hop in their Route Cache MUST flag the + cached hop with the External flag. Such hops MUST NOT be + returned in a Route Reply generated from this Route Cache + entry, and selection of routes from the Route Cache to route a + packet being sent SHOULD prefer routes that contain no hops + flagged as External. + + Reserved + + MUST be sent as 0 and ignored on reception. + + Salvage + + A 4-bit unsigned integer. Count of number of times that this + packet has been salvaged as a part of DSR routing (Section + 3.4.1). + + Segments Left (Segs Left) + + Number of route segments remaining, i.e., number of explicitly + listed intermediate nodes still to be visited before reaching + the final destination. + + Address[1..n] + + The sequence of addresses of the source route. In routing and + forwarding the packet, the source route is processed as + described in Sections 8.1.3 and 8.1.5. The number of addresses + present in the Address[1..n] field is indicated by the Opt Data + Len field in the option (n = (Opt Data Len - 2) / 4). + + When forwarding a packet along a DSR source route using a DSR Source + Route option in the packet's DSR Options header, the Destination + Address field in the packet's IP header is always set to the address + + + +Johnson, et al. Experimental [Page 49] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + of the packet's ultimate destination. A node receiving a packet + containing a DSR Options header with a DSR Source Route option MUST + examine the indicated source route to determine if it is the intended + next-hop node for the packet and how to forward the packet, as + defined in Sections 8.1.4 and 8.1.5. + +6.8. Pad1 Option + + The Pad1 option in a DSR Options header is encoded as follows: + + +-+-+-+-+-+-+-+-+ + | Option Type | + +-+-+-+-+-+-+-+-+ + + Option Type + + 224. Nodes not understanding this option will drop the packet + and return a Route Error. + + A Pad1 option MAY be included in the Options field of a DSR Options + header in order to align subsequent DSR options, but such alignment + is not required and MUST NOT be expected by a node receiving a packet + containing a DSR Options header. + + If any headers follow the DSR Options header in a packet, the total + length of a DSR Options header, indicated by the Payload Length field + in the DSR Options header MUST be a multiple of 4 octets. In this + case, when building a DSR Options header in a packet, sufficient Pad1 + or PadN options MUST be included in the Options field of the DSR + Options header to make the total length a multiple of 4 octets. + + If more than one consecutive octet of padding is being inserted in + the Options field of a DSR Options header, the PadN option described + next, SHOULD be used, rather than multiple Pad1 options. + + Note that the format of the Pad1 option is a special case; it does + not have an Opt Data Len or Option Data field. + +6.9. PadN Option + + The PadN option in a DSR Options header is encoded as follows: + + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - - + | Option Type | Opt Data Len | Option Data + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - - + + + + + + +Johnson, et al. Experimental [Page 50] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + Option Type + + 0. Nodes not understanding this option will ignore this + option. + + Opt Data Len + + 8-bit unsigned integer. Length of the option, in octets, + excluding the Option Type and Opt Data Len fields. The size of + the Option Data field. + + Option Data + + A number of zero-valued octets equal to the Opt Data Len. + + A PadN option MAY be included in the Options field of a DSR Options + header in order to align subsequent DSR options, but such alignment + is not required and MUST NOT be expected by a node receiving a packet + containing a DSR Options header. + + If any headers follow the DSR Options header in a packet, the total + length of a DSR Options header, indicated by the Payload Length field + in the DSR Options header, MUST be a multiple of 4 octets. In this + case, when building a DSR Options header in a packet, sufficient Pad1 + or PadN options MUST be included in the Options field of the DSR + Options header to make the total length a multiple of 4 octets. + +7. Additional Header Formats and Options for Flow State Extension + + The optional DSR flow state extension requires a new header type, the + DSR Flow State header. + + In addition, the DSR flow state extension adds the following options + for the DSR Options header defined in Section 6: + + - Timeout option (Section 7.2.1) + + - Destination and Flow ID option (Section 7.2.2) + + Two new Error Type values are also defined for use in the Route Error + option in a DSR Options header: + + - UNKNOWN_FLOW + + - DEFAULT_FLOW_UNKNOWN + + Finally, an extension to the Acknowledgement Request option in a DSR + Options header is also defined: + + + +Johnson, et al. Experimental [Page 51] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + - Previous Hop Address + + This section defines each of these new header, option, or extension + formats. + +7.1. DSR Flow State Header + + The DSR Flow State header is a small 4-byte header optionally used to + carry the flow ID and hop count for a packet being sent along a DSR + flow. It is distinguished from the fixed DSR Options header (Section + 6.1) in that the Flow State Header (F) bit is set in the DSR Flow + State header and is clear in the fixed DSR Options header. + + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Next Header |F| Hop Count | Flow Identifier | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Next Header + + 8-bit selector. Identifies the type of header immediately + following the DSR Flow State header. Uses the same values as + the IPv4 Protocol field [RFC1700]. + + Flow State Header (F) + + Flag bit. MUST be set to 1. This bit is set in a DSR Flow + State header and clear in a DSR Options header (Section 6.1). + + Hop Count + + 7-bit unsigned integer. The number of hops through which this + packet has been forwarded. + + Flow Identification + + The flow ID for this flow, as described in Section 3.5.1. + +7.2. New Options and Extensions in DSR Options Header + +7.2.1. Timeout Option + + The Timeout option is defined for use in a DSR Options header to + indicate the amount of time before the expiration of the flow ID + along which the packet is being sent. + + + + + +Johnson, et al. Experimental [Page 52] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Option Type | Opt Data Len | Timeout | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Option Type + + 128. Nodes not understanding this option will ignore the + option and return a Route Error. + + Opt Data Len + + 8-bit unsigned integer. Length of the option, in octets, + excluding the Option Type and Opt Data Len fields. + + When no extensions are present, the Opt Data Len of a Timeout + option is 2. Further extensions to DSR may include additional + data in a Timeout option. The presence of such extensions is + indicated by an Opt Data Len greater than 2. Currently, no + such extensions have been defined. + + Timeout + + The number of seconds for which this flow remains valid. + + The Timeout option MUST NOT appear more than once within a DSR + Options header. + +7.2.2. Destination and Flow ID Option + + The Destination and Flow ID option is defined for use in a DSR + Options header to send a packet to an intermediate host along one + flow, for eventual forwarding to the final destination along a + different flow. This option enables the aggregation of the state of + multiple flows. + + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Option Type | Opt Data Len | New Flow Identifier | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | New IP Destination Address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + + + + + +Johnson, et al. Experimental [Page 53] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + Option Type + + 129. Nodes not understanding this option will ignore the + option and return a Route Error. + + Opt Data Len + + 8-bit unsigned integer. Length of the option, in octets, + excluding the Option Type and Opt Data Len fields. + + When no extensions are present, the Opt Data Len of a + Destination and Flow ID option is 6. Further extensions to DSR + may include additional data in a Destination and Flow ID + option. The presence of such extensions is indicated by an Opt + Data Len greater than 6. Currently, no such extensions have + been defined. + + New Flow Identifier + + Indicates the next identifier to store in the Flow ID field of + the DSR Options header. + + New IP Destination Address + + Indicates the next address to store in the Destination Address + field of the IP header. + + The Destination and Flow ID option MAY appear one or more times + within a DSR Options header. + +7.3. New Error Types for Route Error Option + +7.3.1. Unknown Flow Type-Specific Information + + A new Error Type value of 129 (UNKNOWN_FLOW) is defined for use in a + Route Error option in a DSR Options header. The Type-Specific + Information for errors of this type is encoded 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Original IP Destination Address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Flow ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + + + + +Johnson, et al. Experimental [Page 54] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + Original IP Destination Address + + The IP Destination Address of the packet that caused the error. + + Flow ID + + The Flow ID contained in the DSR Flow ID option that caused the + error. + +7.3.2. Default Flow Unknown Type-Specific Information + + A new Error Type value of 130 (DEFAULT_FLOW_UNKNOWN) is defined + for use in a Route Error option in a DSR Options header. The + Type-Specific Information for errors of this type is encoded 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Original IP Destination Address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Original IP Destination Address + + The IP Destination Address of the packet that caused the error. + +7.4. New Acknowledgement Request Option Extension + +7.4.1. Previous Hop Address Extension + + When the Opt Data Len field of an Acknowledgement Request option + in a DSR Options header is greater than or equal to 6, the + ACK Request Source Address field is present. The option is then + formatted 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Option Type | Opt Data Len | Packet Identifier | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | ACK Request Source Address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Option Type + + 160. Nodes not understanding this option will remove the + option and return a Route Error. + + + + +Johnson, et al. Experimental [Page 55] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + Opt Data Len + + 8-bit unsigned integer. Length of the option, in octets, + excluding the Option Type and Opt Data Len fields. + + When no extensions are presents, the Opt Data Len of an + Acknowledgement Request option is 2. Further extensions to DSR + may include additional data in an Acknowledgement Request + option. The presence of such extensions is indicated by an Opt + Data Len greater than 2. + + Currently, one such extension has been defined. If the Opt + Data Len is at least 6, then an ACK Request Source Address is + present. + + Packet Identifier + + The Packet Identifier field is set to a unique number and is + copied into the Identification field of the DSR Acknowledgement + option when returned by the node receiving the packet over this + hop. + + ACK Request Source Address + + The address of the node requesting the DSR Acknowledgement. + +8. Detailed Operation + +8.1. General Packet Processing + +8.1.1. Originating a Packet + + When originating any packet, a node using DSR routing MUST perform + the following sequence of steps: + + - Search the node's Route Cache for a route to the address given in + the IP Destination Address field in the packet's header. + + - If no such route is found in the Route Cache, then perform Route + Discovery for the Destination Address, as described in Section + 8.2. Initiating a Route Discovery for this target node address + results in the node adding a Route Request option in a DSR Options + header in this existing packet, or saving this existing packet to + its Send Buffer and initiating the Route Discovery by sending a + separate packet containing such a Route Request option. If the + node chooses to initiate the Route Discovery by adding the Route + Request option to this existing packet, it will replace the IP + Destination Address field with the IP "limited broadcast" address + + + +Johnson, et al. Experimental [Page 56] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + (255.255.255.255) [RFC1122], copying the original IP Destination + Address to the Target Address field of the new Route Request + option added to the packet, as described in Section 8.2.1. + + - If the packet now does not contain a Route Request option, then + this node must have a route to the Destination Address of the + packet; if the node has more than one route to this Destination + Address, the node selects one to use for this packet. If the + length of this route is greater than 1 hop, or if the node + determines to request a DSR network-layer acknowledgement from the + first-hop node in that route, then insert a DSR Options header + into the packet, as described in Section 8.1.2, and insert a DSR + Source Route option, as described in Section 8.1.3. The source + route in the packet is initialized from the selected route to the + Destination Address of the packet. + + - Transmit the packet to the first-hop node address given in + selected source route, using Route Maintenance to determine the + reachability of the next hop, as described in Section 8.3. + +8.1.2. Adding a DSR Options Header to a Packet + + A node originating a packet adds a DSR Options header to the packet, + if necessary, to carry information needed by the routing protocol. A + packet MUST NOT contain more than one DSR Options header. A DSR + Options header is added to a packet by performing the following + sequence of steps (these steps assume that the packet contains no + other headers that MUST be located in the packet before the DSR + Options header): + + - Insert a DSR Options header after the IP header but before any + other header that may be present. + + - Set the Next Header field of the DSR Options header to the + Protocol number field of the packet's IP header. + + - Set the Protocol field of the packet's IP header to the protocol + number assigned for DSR (48). + +8.1.3. Adding a DSR Source Route Option to a Packet + + A node originating a packet adds a DSR Source Route option to the + packet, if necessary, in order to carry the source route from this + originating node to the final destination address of the packet. + Specifically, the node adding the DSR Source Route option constructs + the DSR Source Route option and modifies the IP packet according to + the following sequence of steps: + + + + +Johnson, et al. Experimental [Page 57] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + - The node creates a DSR Source Route option, as described in + Section 6.7, and appends it to the DSR Options header in the + packet. (A DSR Options header is added, as described in Section + 8.1.2, if not already present.) + + - The number of Address[i] fields to include in the DSR Source Route + option (n) is the number of intermediate nodes in the source route + for the packet (i.e., excluding the address of the originating + node and the final destination address of the packet). The + Segments Left field in the DSR Source Route option is initialized + equal to n. + + - The addresses within the source route for the packet are copied + into sequential Address[i] fields in the DSR Source Route option, + for i = 1, 2, ..., n. + + - The First Hop External (F) bit in the DSR Source Route option is + copied from the External bit flagging the first hop in the source + route for the packet, as indicated in the Route Cache. + + - The Last Hop External (L) bit in the DSR Source Route option is + copied from the External bit flagging the last hop in the source + route for the packet, as indicated in the Route Cache. + + - The Salvage field in the DSR Source Route option is initialized to + 0. + +8.1.4. Processing a Received Packet + + When a node receives any packet (whether for forwarding, overheard, + or the final destination of the packet), if that packet contains a + DSR Options header, then that node MUST process any options contained + in that DSR Options header, in the order contained there. + Specifically: + + - If the DSR Options header contains a Route Request option, the + node SHOULD extract the source route from the Route Request and + add this routing information to its Route Cache, subject to the + conditions identified in Section 3.3.1. The routing information + from the Route Request is the sequence of hop addresses + + initiator, Address[1], Address[2], ..., Address[n] + + where initiator is the value of the Source Address field in the IP + header of the packet carrying the Route Request (the address of + the initiator of the Route Discovery), and each Address[i] is a + node through which this Route Request has passed, in turn, during + + + + +Johnson, et al. Experimental [Page 58] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + this Route Discovery. The value n, here, is the number of + addresses recorded in the Route Request option, or + (Opt Data Len - 6) / 4. + + After possibly updating the node's Route Cache in response to the + routing information in the Route Request option, the node MUST + then process the Route Request option as described in Section + 8.2.2. + + - If the DSR Options header contains a Route Reply option, the node + SHOULD extract the source route from the Route Reply and add this + routing information to its Route Cache, subject to the conditions + identified in Section 3.3.1. The source route from the Route + Reply is the sequence of hop addresses + + initiator, Address[1], Address[2], ..., Address[n] + + where initiator is the value of the Destination Address field in + the IP header of the packet carrying the Route Reply (the address + of the initiator of the Route Discovery), and each Address[i] is a + node through which the source route passes, in turn, on the route + to the target of the Route Discovery. Address[n] is the address + of the target. If the Last Hop External (L) bit is set in the + Route Reply, the node MUST flag the last hop from the Route Reply + (the link from Address[n-1] to Address[n]) in its Route Cache as + External. The value n here is the number of addresses in the + source route being returned in the Route Reply option, or + (Opt Data Len - 1) / 4. + + After possibly updating the node's Route Cache in response to the + routing information in the Route Reply option, then if the + packet's IP Destination Address matches one of this node's IP + addresses, the node MUST then process the Route Reply option as + described in Section 8.2.6. + + - If the DSR Options header contains a Route Error option, the node + MUST process the Route Error option as described in Section 8.3.5. + + - If the DSR Options header contains an Acknowledgement Request + option, the node MUST process the Acknowledgement Request option + as described in Section 8.3.3. + + - If the DSR Options header contains an Acknowledgement option, then + subject to the conditions identified in Section 3.3.1, the node + SHOULD add to its Route Cache the single link from the node + identified by the ACK Source Address field to the node identified + by the ACK Destination Address field. + + + + +Johnson, et al. Experimental [Page 59] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + After possibly updating the node's Route Cache in response to the + routing information in the Acknowledgement option, the node MUST + then process the Acknowledgement option as described in Section + 8.3.3. + + - If the DSR Options header contains a DSR Source Route option, the + node SHOULD extract the source route from the DSR Source Route + option and add this routing information to its Route Cache, + subject to the conditions identified in Section 3.3.1. If the + value of the Salvage field in the DSR Source Route option is zero, + then the routing information from the DSR Source Route is the + sequence of hop addresses + + source, Address[1], Address[2], ..., Address[n], destination + + Otherwise (i.e., if Salvage is nonzero), the routing information + from the DSR Source Route is the sequence of hop addresses + + Address[1], Address[2], ..., Address[n], destination + + where source is the value of the Source Address field in the IP + header of the packet carrying the DSR Source Route option (the + original sender of the packet), each Address[i] is the value in + the Address[i] field in the DSR Source Route option, and + destination is the value of the Destination Address field in the + packet's IP header (the last-hop address of the source route). + The value n here is the number of addresses in source route in the + DSR Source Route option, or (Opt Data Len - 2) / 4. + + After possibly updating the node's Route Cache in response to the + routing information in the DSR Source Route option, the node MUST + then process the DSR Source Route option as described in Section + 8.1.5. + + - Any Pad1 or PadN options in the DSR Options header are ignored. + + - Finally, if the Destination Address in the packet's IP header + matches one of this receiving node's own IP address(es), remove + the DSR Options header and all the included DSR options in the + header, and pass the rest of the packet to the network layer. + +8.1.5. Processing a Received DSR Source Route Option + + When a node receives a packet containing a DSR Source Route option + (whether for forwarding, overheard, or the final destination of the + packet), that node SHOULD examine the packet to determine if the + receipt of that packet indicates an opportunity for automatic route + shortening, as described in Section 3.4.3. Specifically, if this + + + +Johnson, et al. Experimental [Page 60] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + node is not the intended next-hop destination for the packet but is + named in the later unexpended portion of the source route in the + packet's DSR Source Route option, then this packet indicates an + opportunity for automatic route shortening: the intermediate nodes + after the node from which this node overheard the packet and before + this node itself are no longer necessary in the source route. In + this case, this node SHOULD perform the following sequence of steps + as part of automatic route shortening: + + - The node searches its Gratuitous Route Reply Table for an entry + describing a gratuitous Route Reply earlier sent by this node, for + which the original sender (of the packet triggering the gratuitous + Route Reply) and the transmitting node (from which this node + overheard that packet in order to trigger the gratuitous Route + Reply) both match the respective node addresses for this new + received packet. If such an entry is found in the node's + Gratuitous Route Reply Table, the node SHOULD NOT perform + automatic route shortening in response to this receipt of this + packet. + + - Otherwise, the node creates an entry for this overheard packet in + its Gratuitous Route Reply Table. The timeout value for this new + entry SHOULD be initialized to the value GratReplyHoldoff. After + this timeout has expired, the node SHOULD delete this entry from + its Gratuitous Route Reply Table. + + - After creating the new Gratuitous Route Reply Table entry above, + the node originates a gratuitous Route Reply to the IP Source + Address of this overheard packet, as described in Section 3.4.3. + + If the MAC protocol in use in the network is not capable of + transmitting unicast packets over unidirectional links, as + discussed in Section 3.3.1, then in originating this Route Reply, + the node MUST use a source route for routing the Route Reply + packet that is obtained by reversing the sequence of hops over + which the packet triggering the gratuitous Route Reply was routed + in reaching and being overheard by this node. This reversing of + the route uses the gratuitous Route Reply to test this sequence of + hops for bidirectionality, preventing the gratuitous Route Reply + from being received by the initiator of the Route Discovery unless + each of the hops over which the gratuitous Route Reply is returned + is bidirectional. + + - Discard the overheard packet, since the packet has been received + before its normal traversal of the packet's source route would + have caused it to reach this receiving node. Another copy of the + packet will normally arrive at this node as indicated in the + + + + +Johnson, et al. Experimental [Page 61] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + packet's source route; discarding this initial copy of the packet, + which triggered the gratuitous Route Reply, will prevent the + duplication of this packet that would otherwise occur. + + If the packet is not discarded as part of automatic route shortening + above, then the node MUST process the Source Route option according + to the following sequence of steps: + + - If the value of the Segments Left field in the DSR Source Route + option equals 0, then remove the DSR Source Route option from the + DSR Options header. + + - Else, let n equal (Opt Data Len - 2) / 4. This is the number of + addresses in the DSR Source Route option. + + - If the value of the Segments Left field is greater than n, then + send an ICMP Parameter Problem, Code 0, message [RFC792] to the IP + Source Address, pointing to the Segments Left field, and discard + the packet. Do not process the DSR Source Route option further. + + - Else, decrement the value of the Segments Left field by 1. Let i + equal n minus Segments Left. This is the index of the next + address to be visited in the Address vector. + + - If Address[i] or the IP Destination Address is a multicast + address, then discard the packet. Do not process the DSR Source + Route option further. + + - If this node has more than one network interface and if Address[i] + is the address of one this node's network interfaces, then this + indicates a change in the network interface to use in forwarding + the packet, as described in Section 8.4. In this case, decrement + the value of the Segments Left field by 1 to skip over this + address (that indicated the change of network interface) and go to + the first step above (checking the value of the Segments Left + field) to continue processing this Source Route option; in further + processing of this Source Route option, the indicated new network + interface MUST be used in forwarding the packet. + + - If the MTU of the link over which this node would transmit the + packet to forward it to the node Address[i] is less than the size + of the packet, the node MUST either discard the packet and send an + ICMP Packet Too Big message to the packet's Source Address + [RFC792] or fragment it as specified in Section 8.5. + + - Forward the packet to the IP address specified in the Address[i] + field of the IP header, following normal IP forwarding procedures, + including checking and decrementing the Time-to-Live (TTL) field + + + +Johnson, et al. Experimental [Page 62] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + in the packet's IP header [RFC791, RFC1122]. In this forwarding + of the packet, the next-hop node (identified by Address[i]) MUST + be treated as a direct neighbor node: the transmission to that + next node MUST be done in a single IP forwarding hop, without + Route Discovery and without searching the Route Cache. + + - In forwarding the packet, perform Route Maintenance for the next + hop of the packet, by verifying that the next-hop node is + reachable, as described in Section 8.3. + + Multicast addresses MUST NOT appear in a DSR Source Route option or + in the IP Destination Address field of a packet carrying a DSR Source + Route option in a DSR Options header. + +8.1.6. Handling an Unknown DSR Option + + Nodes implementing DSR MUST handle all options specified in this + document, except those options pertaining to the optional flow state + extension (Section 7). However, further extensions to DSR may + include other option types that may not be understood by + implementations conforming to this version of the DSR specification. + In DSR, Option Type codes encode required behavior for nodes not + implementing that type of option. These behaviors are included in + the most significant 3 bits of the Option Type. + + If the most significant bit of the Option Type is set (that is, + Option Type & 0x80 is nonzero), and this packet does not contain a + Route Request option, a node SHOULD return a Route Error to the IP + Source Address, following the steps described in Section 8.3.4, + except that the Error Type MUST be set to OPTION_NOT_SUPPORTED and + the Unsupported Opt field MUST be set to the Option Type triggering + the Route Error. + + Whether or not a Route Error is sent in response to this DSR option, + as described above, the node also MUST examine the next 2 most + significant bits (that is, Option Type & 0x60): + + - When these 2 bits are 00 (that is, Option Type & 0x60 == 0), a + node not implementing processing for that Option Type MUST use the + Opt Data Len field to skip over the option and continue + processing. + + - When these 2 bits are 01 (that is, Option Type & 0x60 == 0x20), a + node not implementing processing for that Option Type MUST use the + Opt Data Len field to remove the option from the packet and + continue processing as if the option had not been included in the + received packet. + + + + +Johnson, et al. Experimental [Page 63] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + - When these 2 bits are 10 (that is, Option Type & 0x60 == 0x40), a + node not implementing processing for that Option Type MUST set the + most significant bit following the Opt Data Len field. In + addition, the node MUST then ignore and skip over the contents of + the option using the Opt Data Len field and MUST continue + processing the packet. + + - Finally, when these 2 bits are 11 (that is, + Option Type & 0x60 == 0x60), a node not implementing processing + for that Option Type MUST drop the packet. + +8.2. Route Discovery Processing + + Route Discovery is the mechanism by which a node S wishing to send a + packet to a destination node D obtains a source route to D. Route + Discovery SHOULD be used only when S attempts to send a packet to D + and does not already know a route to D. The node initiating a Route + Discovery is known as the "initiator" of the Route Discovery, and the + destination node for which the Route Discovery is initiated is known + as the "target" of the Route Discovery. + + Route Discovery operates entirely on demand; a node initiates Route + Discovery based on its own origination of new packets for some + destination address to which it does not currently know a route. + Route Discovery does not depend on any periodic or background + exchange of routing information or neighbor node detection at any + layer in the network protocol stack at any node. + + The Route Discovery procedure utilizes two types of messages, a Route + Request (Section 6.2) and a Route Reply (Section 6.3), to actively + search the ad hoc network for a route to the desired target + destination. These DSR messages MAY be carried in any type of IP + packet, through use of the DSR Options header as described in Section + 6. + + Except as discussed in Section 8.3.5, a Route Discovery for a + destination address SHOULD NOT be initiated unless the initiating + node has a packet in its Send Buffer requiring delivery to that + destination. A Route Discovery for a given target node MUST NOT be + initiated unless permitted by the rate-limiting information contained + in the Route Request Table. After each Route Discovery attempt, the + interval between successive Route Discoveries for this target SHOULD + be doubled, up to a maximum of MaxRequestPeriod, until a valid Route + Reply is received for this target. + + + + + + + +Johnson, et al. Experimental [Page 64] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + +8.2.1. Originating a Route Request + + A node initiating a Route Discovery for some target creates and + initializes a Route Request option in a DSR Options header in some IP + packet. This MAY be a separate IP packet, used only to carry this + Route Request option, or the node MAY include the Route Request + option in some existing packet that it needs to send to the target + node (e.g., the IP packet originated by this node that caused the + node to attempt Route Discovery for the destination address of the + packet). The Route Request option MUST be included in a DSR Options + header in the packet. To initialize the Route Request option, the + node performs the following sequence of steps: + + - The Option Type in the option MUST be set to the value 2. + + - The Opt Data Len field in the option MUST be set to the value 6. + The total size of the Route Request option, when initiated, is 8 + octets; the Opt Data Len field excludes the size of the Option + Type and Opt Data Len fields themselves. + + - The Identification field in the option MUST be set to a new value, + different from that used for other Route Requests recently + initiated by this node for this same target address. For example, + each node MAY maintain a single counter value for generating a new + Identification value for each Route Request it initiates. + + - The Target Address field in the option MUST be set to the IP + address that is the target of this Route Discovery. + + The Source Address in the IP header of this packet MUST be the node's + own IP address. The Destination Address in the IP header of this + packet MUST be the IP "limited broadcast" address (255.255.255.255). + + A node MUST maintain, in its Route Request Table, information about + Route Requests that it initiates. When initiating a new Route + Request, the node MUST use the information recorded in the Route + Request Table entry for the target of that Route Request, and it MUST + update that information in the table entry for use in the next Route + Request initiated for this target. In particular: + + - The Route Request Table entry for a target node records the Time- + to-Live (TTL) field used in the IP header of the Route Request for + the last Route Discovery initiated by this node for that target + node. This value allows the node to implement a variety of + algorithms for controlling the spread of its Route Request on each + Route Discovery initiated for a target. As examples, two possible + algorithms for this use of the TTL field are described in Section + 3.3.3. + + + +Johnson, et al. Experimental [Page 65] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + - The Route Request Table entry for a target node records the number + of consecutive Route Requests initiated for this target since + receiving a valid Route Reply giving a route to that target node, + and the remaining amount of time before which this node MAY next + attempt at a Route Discovery for that target node. + + A node MUST use these values to implement a back-off algorithm to + limit the rate at which this node initiates new Route Discoveries + for the same target address. In particular, until a valid Route + Reply is received for this target node address, the timeout + between consecutive Route Discovery initiations for this target + node with the same hop limit SHOULD increase by doubling the + timeout value on each new initiation. + + The behavior of a node processing a packet containing DSR Options + header with both a DSR Source Route option and a Route Request option + is unspecified. Packets SHOULD NOT contain both a DSR Source Route + option and a Route Request option. + + Packets containing a Route Request option SHOULD NOT include an + Acknowledgement Request option, SHOULD NOT expect link-layer + acknowledgement or passive acknowledgement, and SHOULD NOT be + retransmitted. The retransmission of packets containing a Route + Request option is controlled solely by the logic described in this + section. + +8.2.2. Processing a Received Route Request Option + + When a node receives a packet containing a Route Request option, that + node MUST process the option according to the following sequence of + steps: + + - If the Target Address field in the Route Request matches this + node's own IP address, then the node SHOULD return a Route Reply + to the initiator of this Route Request (the Source Address in the + IP header of the packet), as described in Section 8.2.4. The + source route for this Reply is the sequence of hop addresses + + initiator, Address[1], Address[2], ..., Address[n], target + + where initiator is the address of the initiator of this Route + Request, each Address[i] is an address from the Route Request, and + target is the target of the Route Request (the Target Address + field in the Route Request). The value n here is the number of + addresses recorded in the Route Request, or + (Opt Data Len - 6) / 4. + + + + + +Johnson, et al. Experimental [Page 66] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + The node then MUST replace the Destination Address field in the + Route Request packet's IP header with the value in the Target + Address field in the Route Request option, and continue processing + the rest of the Route Request packet normally. The node MUST NOT + process the Route Request option further and MUST NOT retransmit + the Route Request to propagate it to other nodes as part of the + Route Discovery. + + - Else, the node MUST examine the route recorded in the Route + Request option (the IP Source Address field and the sequence of + Address[i] fields) to determine if this node's own IP address + already appears in this list of addresses. If so, the node MUST + discard the entire packet carrying the Route Request option. + + - Else, if the Route Request was received through a network + interface that requires physically bidirectional links for unicast + transmission, the node MUST check if the Route Request was last + forwarded by a node on its blacklist (Section 4.6). If such an + entry is found in the blacklist, and the state of the + unidirectional link is "probable", then the Request MUST be + silently discarded. + + - Else, if the Route Request was received through a network + interface that requires physically bidirectional links for unicast + transmission, the node MUST check if the Route Request was last + forwarded by a node on its blacklist. If such an entry is found + in the blacklist, and the state of the unidirectional link is + "questionable", then the node MUST create and unicast a Route + Request packet to that previous node, setting the IP Time-To-Live + (TTL) to 1 to prevent the Request from being propagated. If the + node receives a Route Reply in response to the new Request, it + MUST remove the blacklist entry for that node, and SHOULD continue + processing. If the node does not receive a Route Reply within + some reasonable amount of time, the node MUST silently discard the + Route Request packet. + + - Else, the node MUST search its Route Request Table for an entry + for the initiator of this Route Request (the IP Source Address + field). If such an entry is found in the table, the node MUST + search the cache of Identification values of recently received + Route Requests in that table entry, to determine if an entry is + present in the cache matching the Identification value and target + node address in this Route Request. If such an (Identification, + target address) entry is found in this cache in this entry in the + Route Request Table, then the node MUST discard the entire packet + carrying the Route Request option. + + + + + +Johnson, et al. Experimental [Page 67] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + - Else, this node SHOULD further process the Route Request according + to the following sequence of steps: + + o Add an entry for this Route Request in its cache of + (Identification, target address) values of recently received + Route Requests. + + o Conceptually create a copy of this entire packet and perform + the following steps on the copy of the packet. + + o Append this node's own IP address to the list of Address[i] + values in the Route Request and increase the value of the Opt + Data Len field in the Route Request by 4 (the size of an IP + address). However, if the node has multiple network + interfaces, this step MUST be modified by the special + processing specified in Section 8.4. + + o This node SHOULD search its own Route Cache for a route (from + itself, as if it were the source of a packet) to the target of + this Route Request. If such a route is found in its Route + Cache, then this node SHOULD follow the procedure outlined in + Section 8.2.3 to return a "cached Route Reply" to the initiator + of this Route Request, if permitted by the restrictions + specified there. + + o If the node does not return a cached Route Reply, then this + node SHOULD transmit this copy of the packet as a link-layer + broadcast, with a short jitter delay before the broadcast is + sent. The jitter period SHOULD be chosen as a random period, + uniformly distributed between 0 and BroadcastJitter. + +8.2.3. Generating a Route Reply Using the Route Cache + + As described in Section 3.3.2, it is possible for a node processing a + received Route Request to avoid propagating the Route Request further + toward the target of the Request, if this node has in its Route Cache + a route from itself to this target. Such a Route Reply generated by + a node from its own cached route to the target of a Route Request is + called a "cached Route Reply", and this mechanism can greatly reduce + the overall overhead of Route Discovery on the network by reducing + the flood of Route Requests. The general processing of a received + Route Request is described in Section 8.2.2; this section specifies + the additional requirements that MUST be met before a cached Route + Reply may be generated and returned and specifies the procedure for + returning such a cached Route Reply. + + + + + + +Johnson, et al. Experimental [Page 68] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + While processing a received Route Request, for a node to possibly + return a cached Route Reply, it MUST have in its Route Cache a route + from itself to the target of this Route Request. However, before + generating a cached Route Reply for this Route Request, the node MUST + verify that there are no duplicate addresses listed in the route + accumulated in the Route Request together with the route from this + node's Route Cache. Specifically, there MUST be no duplicates among + the following addresses: + + - The IP Source Address of the packet containing the Route Request, + + - The Address[i] fields in the Route Request, and + + - The nodes listed in the route obtained from this node's Route + Cache, excluding the address of this node itself (this node itself + is the common point between the route accumulated in the Route + Request and the route obtained from the Route Cache). + + If any duplicates exist among these addresses, then the node MUST NOT + send a cached Route Reply using this route from the Route Cache (it + is possible that this node has another route in its Route Cache for + which the above restriction on duplicate addresses is met, allowing + the node to send a cached Route Reply based on that cached route, + instead). The node SHOULD continue to process the Route Request as + described in Section 8.2.2 if it does not send a cached Route Reply. + + If the Route Request and the route from the Route Cache meet the + restriction above, then the node SHOULD construct and return a cached + Route Reply as follows: + + - The source route for this Route Reply is the sequence of hop + addresses + + initiator, Address[1], Address[2], ..., Address[n], c-route + + where initiator is the address of the initiator of this Route + Request, each Address[i] is an address from the Route Request, and + c-route is the sequence of hop addresses in the source route to + this target node, obtained from the node's Route Cache. In + appending this cached route to the source route for the reply, the + address of this node itself MUST be excluded, since it is already + listed as Address[n]. + + - Send a Route Reply to the initiator of the Route Request, using + the procedure defined in Section 8.2.4. The initiator of the + Route Request is indicated in the Source Address field in the + packet's IP header. + + + + +Johnson, et al. Experimental [Page 69] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + Before sending the cached Route Reply, however, the node MAY delay + the Reply in order to help prevent a possible Route Reply "storm", as + described in Section 8.2.5. + + If the node returns a cached Route Reply as described above, then the + node MUST NOT propagate the Route Request further (i.e., the node + MUST NOT rebroadcast the Route Request). In this case, instead, if + the packet contains no other DSR options and contains no payload + after the DSR Options header (e.g., the Route Request is not + piggybacked on a TCP or UDP packet), then the node SHOULD simply + discard the packet. Otherwise (if the packet contains other DSR + options or contains any payload after the DSR Options header), the + node SHOULD forward the packet along the cached route to the target + of the Route Request. Specifically, if the node does so, it MUST use + the following steps: + + - Copy the Target Address from the Route Request option in the DSR + Options header to the Destination Address field in the packet's IP + header. + + - Remove the Route Request option from the DSR Options header in the + packet, and add a DSR Source Route option to the packet's DSR + Options header. + + - In the DSR Source Route option, set the Address[i] fields to + represent the source route found in this node's Route Cache to the + original target of the Route Discovery (the new IP Destination + Address of the packet). Specifically, the node copies the hop + addresses of the source route into sequential Address[i] fields in + the DSR Source Route option, for i = 1, 2, ..., n. Address[1], + here, is the address of this node itself (the first address in the + source route found from this node to the original target of the + Route Discovery). The value n, here, is the number of hop + addresses in this source route, excluding the destination of the + packet (which is instead already represented in the Destination + Address field in the packet's IP header). + + - Initialize the Segments Left field in the DSR Source Route option + to n as defined above. + + - The First Hop External (F) bit in the DSR Source Route option MUST + be set to 0. + + - The Last Hop External (L) bit in the DSR Source Route option is + copied from the External bit flagging the last hop in the source + route for the packet, as indicated in the Route Cache. + + + + + +Johnson, et al. Experimental [Page 70] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + - The Salvage field in the DSR Source Route option MUST be + initialized to some nonzero value; the particular nonzero value + used SHOULD be MAX_SALVAGE_COUNT. By initializing this field to a + nonzero value, nodes forwarding or overhearing this packet will + not consider a link to exist between the IP Source Address of the + packet and the Address[1] address in the DSR Source Route option + (e.g., they will not attempt to add this to their Route Cache as a + link). By choosing MAX_SALVAGE_COUNT as the nonzero value to + which the node initializes this field, nodes furthermore will not + attempt to salvage this packet. + + - Transmit the packet to the next-hop node on the new source route + in the packet, using the forwarding procedure described in Section + 8.1.5. + +8.2.4. Originating a Route Reply + + A node originates a Route Reply in order to reply to a received and + processed Route Request, according to the procedures described in + Sections 8.2.2 and 8.2.3. The Route Reply is returned in a Route + Reply option (Section 6.3). The Route Reply option MAY be returned + to the initiator of the Route Request in a separate IP packet, used + only to carry this Route Reply option, or it MAY be included in any + other IP packet being sent to this address. + + The Route Reply option MUST be included in a DSR Options header in + the packet returned to the initiator. To initialize the Route Reply + option, the node performs the following sequence of steps: + + - The Option Type in the option MUST be set to the value 3. + + - The Opt Data Len field in the option MUST be set to the value + (n * 4) + 3, where n is the number of addresses in the source + route being returned (excluding the Route Discovery initiator + node's address). + + - If this node is the target of the Route Request, the Last Hop + External (L) bit in the option MUST be initialized to 0. + + - The Reserved field in the option MUST be initialized to 0. + + - The Route Request Identifier MUST be initialized to the Identifier + field of the Route Request to which this Route Reply is sent in + response. + + - The sequence of hop addresses in the source route are copied into + the Address[i] fields of the option. Address[1] MUST be set to + the first-hop address of the route after the initiator of the + + + +Johnson, et al. Experimental [Page 71] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + Route Discovery, Address[n] MUST be set to the last-hop address of + the source route (the address of the target node), and each other + Address[i] MUST be set to the next address in sequence in the + source route being returned. + + The Destination Address field in the IP header of the packet carrying + the Route Reply option MUST be set to the address of the initiator of + the Route Discovery (i.e., for a Route Reply being returned in + response to some Route Request, the IP Source Address of the Route + Request). + + After creating and initializing the Route Reply option and the IP + packet containing it, send the Route Reply. In sending the Route + Reply from this node (but not from nodes forwarding the Route Reply), + this node SHOULD delay the Reply by a small jitter period chosen + randomly between 0 and BroadcastJitter. + + When returning any Route Reply in the case in which the MAC protocol + in use in the network is not capable of transmitting unicast packets + over unidirectional links, the source route used for routing the + Route Reply packet MUST be obtained by reversing the sequence of hops + in the Route Request packet (the source route that is then returned + in the Route Reply). This restriction on returning a Route Reply + enables the Route Reply to test this sequence of hops for + bidirectionality, preventing the Route Reply from being received by + the initiator of the Route Discovery unless each of the hops over + which the Route Reply is returned (and thus each of the hops in the + source route being returned in the Reply) is bidirectional. + + If sending a Route Reply to the initiator of the Route Request + requires performing a Route Discovery, the Route Reply option MUST be + piggybacked on the packet that contains the Route Request. This + piggybacking prevents a recursive dependency wherein the target of + the new Route Request (which was itself the initiator of the original + Route Request) must do another Route Request in order to return its + Route Reply. + + If sending the Route Reply to the initiator of the Route Request does + not require performing a Route Discovery, a node SHOULD send a + unicast Route Reply in response to every Route Request it receives + for which it is the target node. + +8.2.5. Preventing Route Reply Storms + + The ability for nodes to reply to a Route Request based on + information in their Route Caches, as described in Sections 3.3.2 and + 8.2.3, could result in a possible Route Reply "storm" in some cases. + In particular, if a node broadcasts a Route Request for a target node + + + +Johnson, et al. Experimental [Page 72] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + for which the node's neighbors have a route in their Route Caches, + each neighbor may attempt to send a Route Reply, thereby wasting + bandwidth and possibly increasing the number of network collisions in + the area. + + For example, the figure below shows a situation in which nodes B, C, + D, E, and F all receive A's Route Request for target G, and each has + the indicated route cached for this target: + + +-----+ +-----+ + | D |< >| C | + +-----+ \ / +-----+ + Cache: C - B - G \ / Cache: B - G + \ +-----+ / + -| A |- + +-----+\ +-----+ +-----+ + | | \--->| B | | G | + / \ +-----+ +-----+ + / \ Cache: G + v v + +-----+ +-----+ + | E | | F | + +-----+ +-----+ + Cache: F - B - G Cache: B - G + + Normally, each of these nodes would attempt to reply from its own + Route Cache, and they would thus all send their Route Replies at + about the same time, since they all received the broadcast Route + Request at about the same time. Such simultaneous Route Replies from + different nodes all receiving the Route Request may cause local + congestion in the wireless network and may create packet collisions + among some or all of these Replies if the MAC protocol in use does + not provide sufficient collision avoidance for these packets. In + addition, it will often be the case that the different replies will + indicate routes of different lengths, as shown in this example. + + In order to reduce these effects, if a node can put its network + interface into promiscuous receive mode, it MAY delay sending its own + Route Reply for a short period, while listening to see if the + initiating node begins using a shorter route first. Specifically, + this node MAY delay sending its own Route Reply for a random period + + d = H * (h - 1 + r) + + where h is the length in number of network hops for the route to be + returned in this node's Route Reply, r is a random floating point + number between 0 and 1, and H is a small constant delay (at least + twice the maximum wireless link propagation delay) to be introduced + + + +Johnson, et al. Experimental [Page 73] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + per hop. This delay effectively randomizes the time at which each + node sends its Route Reply, with all nodes sending Route Replies + giving routes of length less than h sending their Replies before this + node, and all nodes sending Route Replies giving routes of length + greater than h send their Replies after this node. + + Within the delay period, this node promiscuously receives all + packets, looking for data packets from the initiator of this Route + Discovery destined for the target of the Route Discovery. If such a + data packet received by this node during the delay period uses a + source route of length less than or equal to h, this node may infer + that the initiator of the Route Discovery has already received a + Route Reply giving an equally good or better route. In this case, + this node SHOULD cancel its delay timer and SHOULD NOT send its Route + Reply for this Route Discovery. + +8.2.6. Processing a Received Route Reply Option + + Section 8.1.4 describes the general processing for a received packet, + including the addition of routing information from options in the + packet's DSR Options header to the receiving node's Route Cache. + + If the received packet contains a Route Reply, no additional special + processing of the Route Reply option is required beyond what is + described there. As described in Section 4.1, anytime a node adds + new information to its Route Cache (including the information added + from this Route Reply option), the node SHOULD check each packet in + its own Send Buffer (Section 4.2) to determine whether a route to + that packet's IP Destination Address now exists in the node's Route + Cache (including the information just added to the Cache). If so, + the packet SHOULD then be sent using that route and removed from the + Send Buffer. This general procedure handles all processing required + for a received Route Reply option. + + When using a MAC protocol that requires bidirectional links for + unicast transmission, a unidirectional link may be discovered by the + propagation of the Route Request. When the Route Reply is sent over + the reverse path, a forwarding node may discover that the next-hop is + unreachable. In this case, it MUST add the next-hop address to its + blacklist (Section 4.6). + +8.3. Route Maintenance Processing + + Route Maintenance is the mechanism by which a source node S is able + to detect, while using a source route to some destination node D, if + the network topology has changed such that it can no longer use its + route to D because a link along the route no longer works. When + Route Maintenance indicates that a source route is broken, S can + + + +Johnson, et al. Experimental [Page 74] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + attempt to use any other route it happens to know to D or can invoke + Route Discovery again to find a new route for subsequent packets to + D. Route Maintenance for this route is used only when S is actually + sending packets to D. + + Specifically, when forwarding a packet, a node MUST attempt to + confirm the reachability of the next-hop node, unless such + confirmation had been received in the last MaintHoldoffTime period. + Individual implementations MAY choose to bypass such confirmation for + some limited number of packets, as long as those packets all fall + within MaintHoldoffTime since the last confirmation. If no + confirmation is received after the retransmission of MaxMaintRexmt + acknowledgement requests, after the initial transmission of the + packet, and conceptually including all retransmissions provided by + the MAC layer, the node determines that the link for this next-hop + node of the source route is "broken". This confirmation from the + next-hop node for Route Maintenance can be implemented using a link- + layer acknowledgement (Section 8.3.1), a "passive acknowledgement" + (Section 8.3.2), or a network-layer acknowledgement (Section 8.3.3); + the particular strategy for retransmission timing depends on the type + of acknowledgement mechanism used. When not using link-layer + acknowledgements for Route Maintenance, nodes SHOULD use passive + acknowledgements when possible but SHOULD try requesting a network- + layer acknowledgement one or more times before deciding that the link + has failed and originating a Route Error to the original sender of + the packet, as described in Section 8.3.4. + + In deciding whether or not to send a Route Error in response to + attempting to forward a packet from some sender over a broken link, a + node MUST limit the number of consecutive packets from a single + sender that the node attempts to forward over this same broken link + for which the node chooses not to return a Route Error. This + requirement MAY be satisfied by returning a Route Error for each + packet that the node attempts to forward over a broken link. + +8.3.1. Using Link-Layer Acknowledgements + + If the MAC protocol in use provides feedback as to the successful + delivery of a data packet (such as is provided for unicast packets by + the link-layer acknowledgement frame defined by IEEE 802.11 + [IEEE80211]), then the use of the DSR Acknowledgement Request and + Acknowledgement options is not necessary. If such link-layer + feedback is available, it SHOULD be used instead of any other + acknowledgement mechanism for Route Maintenance, and the node SHOULD + NOT use either passive acknowledgements or network-layer + acknowledgements for Route Maintenance. + + + + + +Johnson, et al. Experimental [Page 75] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + When using link-layer acknowledgements for Route Maintenance, the + retransmission timing and the timing at which retransmission attempts + are scheduled are generally controlled by the particular link layer + implementation in use in the network. For example, in IEEE 802.11, + the link-layer acknowledgement is returned after a unicast packet as + a part of the basic access method of the IEEE 802.11 Distributed + Coordination Function (DCF) MAC protocol; the time at which the + acknowledgement is expected to arrive and the time at which the next + retransmission attempt (if necessary) will occur are controlled by + the MAC protocol implementation. + + When a node receives a link-layer acknowledgement for any packet in + its Maintenance Buffer, that node SHOULD remove from its Maintenance + Buffer that packet, as well as any other packets in its Maintenance + Buffer with the same next-hop destination. + +8.3.2. Using Passive Acknowledgements + + When link-layer acknowledgements are not available, but passive + acknowledgements [JUBIN87] are available, passive acknowledgements + SHOULD be used for Route Maintenance when originating or forwarding a + packet along any hop other than the last hop (the hop leading to the + IP Destination Address node of the packet). In particular, passive + acknowledgements SHOULD be used for Route Maintenance in such cases + if the node can place its network interface into "promiscuous" + receive mode, and if network links used for data packets generally + operate bidirectionally. + + A node MUST NOT attempt to use passive acknowledgements for Route + Maintenance for a packet originated or forwarded over its last hop + (the hop leading to the IP Destination Address node of the packet), + since the receiving node will not be forwarding the packet and thus + no passive acknowledgement will be available to be heard by this + node. Beyond this restriction, a node MAY utilize a variety of + strategies in using passive acknowledgements for Route Maintenance of + a packet that it originates or forwards. For example, the following + two strategies are possible: + + - Each time a node receives a packet to be forwarded to a node other + than the final destination (the IP Destination Address of the + packet), that node sends the original transmission of that packet + without requesting a network-layer acknowledgement for it. If no + passive acknowledgement is received within PassiveAckTimeout after + this transmission, the node retransmits the packet, again without + requesting a network-layer acknowledgement for it; the same + PassiveAckTimeout timeout value is used for each such attempt. If + no acknowledgement has been received after a total of + TryPassiveAcks retransmissions of the packet, network-layer + + + +Johnson, et al. Experimental [Page 76] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + acknowledgements (as described in Section 8.3.3) are requested for + all remaining attempts for that packet. + + - Each node maintains a table of possible next-hop destination + nodes, noting whether or not passive acknowledgements can + typically be expected from transmission to that node, and the + expected latency and jitter of a passive acknowledgement from that + node. Each time a node receives a packet to be forwarded to a + node other than the IP Destination Address, the node checks its + table of next-hop destination nodes to determine whether to use a + passive acknowledgement or a network-layer acknowledgement for + that transmission to that node. The timeout for this packet can + also be derived from this table. A node using this method SHOULD + prefer using passive acknowledgements to network-layer + acknowledgements. + + In using passive acknowledgements for a packet that it originates or + forwards, a node considers the later receipt of a new packet (e.g., + with promiscuous receive mode enabled on its network interface) an + acknowledgement of this first packet if both of the following two + tests succeed: + + - The Source Address, Destination Address, Protocol, Identification, + and Fragment Offset fields in the IP header of the two packets + MUST match [RFC791]. + + - If either packet contains a DSR Source Route header, both packets + MUST contain one, and the value in the Segments Left field in the + DSR Source Route header of the new packet MUST be less than that + in the first packet. + + When a node hears such a passive acknowledgement for any packet in + its Maintenance Buffer, that node SHOULD remove from its Maintenance + Buffer that packet, as well as any other packets in its Maintenance + Buffer with the same next-hop destination. + +8.3.3. Using Network-Layer Acknowledgements + + When a node originates or forwards a packet and has no other + mechanism of acknowledgement available to determine reachability of + the next-hop node in the source route for Route Maintenance, that + node SHOULD request a network-layer acknowledgement from that next- + hop node. To do so, the node inserts an Acknowledgement Request + option in the DSR Options header in the packet. The Identification + field in that Acknowledgement Request option MUST be set to a value + unique over all packets recently transmitted by this node to the same + next-hop node. + + + + +Johnson, et al. Experimental [Page 77] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + When a node receives a packet containing an Acknowledgement Request + option, that node performs the following tests on the packet: + + - If the indicated next-hop node address for this packet does not + match any of this node's own IP addresses, then this node MUST NOT + process the Acknowledgement Request option. The indicated next- + hop node address is the next Address[i] field in the DSR Source + Route option in the DSR Options header in the packet, or the IP + Destination Address in the packet if the packet does not contain a + DSR Source Route option or the Segments Left there is zero. + + - If the packet contains an Acknowledgement option, then this node + MUST NOT process the Acknowledgement Request option. + + If neither of the tests above fails, then this node MUST process the + Acknowledgement Request option by sending an Acknowledgement option + to the previous-hop node; to do so, the node performs the following + sequence of steps: + + - Create a packet and set the IP Protocol field to the protocol + number assigned for DSR (48). + + - Set the IP Source Address field in this packet to the IP address + of this node, copied from the source route in the DSR Source Route + option in that packet (or from the IP Destination Address field of + the packet, if the packet does not contain a DSR Source Route + option). + + - Set the IP Destination Address field in this packet to the IP + address of the previous-hop node, copied from the source route in + the DSR Source Route option in that packet (or from the IP Source + Address field of the packet, if the packet does not contain a DSR + Source Route option). + + - Add a DSR Options header to the packet. Set the Next Header field + in the DSR Options header to the value 59, "No Next Header" + [RFC2460]. + + - Add an Acknowledgement option to the DSR Options header in the + packet; set the Acknowledgement option's Option Type field to 6 + and the Opt Data Len field to 10. + + - Copy the Identification field from the received Acknowledgement + Request option into the Identification field in the + Acknowledgement option. + + + + + + +Johnson, et al. Experimental [Page 78] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + - Set the ACK Source Address field in the Acknowledgement option to + be the IP Source Address of this new packet (set above to be the + IP address of this node). + + - Set the ACK Destination Address field in the Acknowledgement + option to be the IP Destination Address of this new packet (set + above to be the IP address of the previous-hop node). + + - Send the packet as described in Section 8.1.1. + + Packets containing an Acknowledgement option SHOULD NOT be placed in + the Maintenance Buffer. + + When a node receives a packet with both an Acknowledgement option and + an Acknowledgement Request option, if that node is not the + destination of the Acknowledgement option (the IP Destination Address + of the packet), then the Acknowledgement Request option MUST be + ignored. Otherwise (that node is the destination of the + Acknowledgement option), that node MUST process the Acknowledgement + Request option by returning an Acknowledgement option according to + the following sequence of steps: + + - Create a packet and set the IP Protocol field to the protocol + number assigned for DSR (48). + + - Set the IP Source Address field in this packet to the IP address + of this node, copied from the source route in the DSR Source Route + option in that packet (or from the IP Destination Address field of + the packet, if the packet does not contain a DSR Source Route + option). + + - Set the IP Destination Address field in this packet to the IP + address of the node originating the Acknowledgement option. + + - Add a DSR Options header to the packet, and set the DSR Options + header's Next Header field to the value 59, "No Next Header" + [RFC2460]. + + - Add an Acknowledgement option to the DSR Options header in this + packet; set the Acknowledgement option's Option Type field to 6 + and the Opt Data Len field to 10. + + - Copy the Identification field from the received Acknowledgement + Request option into the Identification field in the + Acknowledgement option. + + + + + + +Johnson, et al. Experimental [Page 79] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + - Set the ACK Source Address field in the option to the IP Source + Address of this new packet (set above to be the IP address of this + node). + + - Set the ACK Destination Address field in the option to the IP + Destination Address of this new packet (set above to be the IP + address of the node originating the Acknowledgement option). + + - Send the packet directly to the destination. The IP Destination + Address MUST be treated as a direct neighbor node: the + transmission to that node MUST be done in a single IP forwarding + hop, without Route Discovery and without searching the Route + Cache. In addition, this packet MUST NOT contain a DSR + Acknowledgement Request, MUST NOT be retransmitted for Route + Maintenance, and MUST NOT expect a link-layer acknowledgement or + passive acknowledgement. + + When using network-layer acknowledgements for Route Maintenance, a + node SHOULD use an adaptive algorithm in determining the + retransmission timeout for each transmission attempt of an + acknowledgement request. For example, a node SHOULD maintain a + separate round-trip time (RTT) estimate for each node to which it has + recently attempted to transmit packets, and it SHOULD use this RTT + estimate in setting the timeout for each retransmission attempt for + Route Maintenance. The TCP RTT estimation algorithm has been shown + to work well for this purpose in implementation and testbed + experiments with DSR [MALTZ99b, MALTZ01]. + +8.3.4. Originating a Route Error + + When a node is unable to verify reachability of a next-hop node after + reaching a maximum number of retransmission attempts, it SHOULD send + a Route Error to the IP Source Address of the packet. When sending a + Route Error for a packet containing either a Route Error option or an + Acknowledgement option, a node SHOULD add these existing options to + its Route Error, subject to the limit described below. + + A node transmitting a Route Error MUST perform the following steps: + + - Create an IP packet and set the IP Protocol field to the protocol + number assigned for DSR (48). Set the Source Address field in + this packet's IP header to the address of this node. + + - If the Salvage field in the DSR Source Route option in the packet + triggering the Route Error is zero, then copy the Source Address + field of the packet triggering the Route Error into the + Destination Address field in the new packet's IP header; + + + + +Johnson, et al. Experimental [Page 80] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + otherwise, copy the Address[1] field from the DSR Source Route + option of the packet triggering the Route Error into the + Destination Address field in the new packet's IP header + + - Insert a DSR Options header into the new packet. + + - Add a Route Error Option to the new packet, setting the Error Type + to NODE_UNREACHABLE, the Salvage value to the Salvage value from + the DSR Source Route option of the packet triggering the Route + Error, and the Unreachable Node Address field to the address of + the next-hop node from the original source route. Set the Error + Source Address field to this node's IP address, and the Error + Destination field to the new packet's IP Destination Address. + + - If the packet triggering the Route Error contains any Route Error + or Acknowledgement options, the node MAY append to its Route Error + each of these options, with the following constraints: + + o The node MUST NOT include any Route Error option from the + packet triggering the new Route Error, for which the total + Salvage count (Section 6.4) of that included Route Error would + be greater than MAX_SALVAGE_COUNT in the new packet. + + o If any Route Error option from the packet triggering the new + Route Error is not included in the packet, the node MUST NOT + include any following Route Error or Acknowledgement options + from the packet triggering the new Route Error. + + o Any appended options from the packet triggering the Route Error + MUST follow the new Route Error in the packet. + + o In appending these options to the new Route Error, the order of + these options from the packet triggering the Route Error MUST + be preserved. + + - Send the packet as described in Section 8.1.1. + +8.3.5. Processing a Received Route Error Option + + When a node receives a packet containing a Route Error option, that + node MUST process the Route Error option according to the following + sequence of steps: + + - The node MUST remove from its Route Cache the link from the node + identified by the Error Source Address field to the node + identified by the Unreachable Node Address field (if this link is + present in its Route Cache). If the node implements its Route + Cache as a link cache, as described in Section 4.1, only this + + + +Johnson, et al. Experimental [Page 81] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + single link is removed; if the node implements its Route Cache as + a path cache, however, all routes (paths) that use this link are + either truncated before the link or removed completely. + + - If the option following the Route Error is an Acknowledgement or + Route Error option sent by this node (that is, with + Acknowledgement or Error Source Address equal to this node's + address), copy the DSR options following the current Route Error + into a new packet with IP Source Address equal to this node's own + IP address and IP Destination Address equal to the Acknowledgement + or Error Destination Address. Transmit this packet as described + in Section 8.1.1, with the Salvage count in the DSR Source Route + option set to the Salvage value of the Route Error. + + In addition, after processing the Route Error as described above, the + node MAY initiate a new Route Discovery for any destination node for + which it then has no route in its Route Cache as a result of + processing this Route Error, if the node has indication that a route + to that destination is needed. For example, if the node has an open + TCP connection to some destination node, then if the processing of + this Route Error removed the only route to that destination from this + node's Route Cache, then this node MAY initiate a new Route Discovery + for that destination node. Any node, however, MUST limit the rate at + which it initiates new Route Discoveries for any single destination + address, and any new Route Discovery initiated in this way as part of + processing this Route Error MUST conform as a part of this limit. + +8.3.6. Salvaging a Packet + + When an intermediate node forwarding a packet detects through Route + Maintenance that the next-hop link along the route for that packet is + broken (Section 8.3), if the node has another route to the packet's + IP Destination Address in its Route Cache, the node SHOULD "salvage" + the packet rather than discard it. To do so using the route found in + its Route Cache, this node processes the packet as follows: + + - If the MAC protocol in use in the network is not capable of + transmitting unicast packets over unidirectional links, as + discussed in Section 3.3.1, then if this packet contains a Route + Reply option, remove and discard the Route Reply option in the + packet; if the DSR Options header in the packet then contains no + DSR options or only a DSR Source Route Option, remove the DSR + Options header from the packet. If the resulting packet then + contains only an IP header (e.g., no transport layer header or + payload), the node SHOULD NOT salvage the packet and instead + SHOULD discard the entire packet. + + + + + +Johnson, et al. Experimental [Page 82] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + - Modify the existing DSR Source Route option in the packet so that + the Address[i] fields represent the source route found in this + node's Route Cache to this packet's IP Destination Address. + Specifically, the node copies the hop addresses of the source + route into sequential Address[i] fields in the DSR Source Route + option, for i = 1, 2, ..., n. Address[1], here, is the address of + the salvaging node itself (the first address in the source route + found from this node to the IP Destination Address of the packet). + The value n, here, is the number of hop addresses in this source + route, excluding the destination of the packet (which is instead + already represented in the Destination Address field in the + packet's IP header). + + - Initialize the Segments Left field in the DSR Source Route option + to n as defined above. + + - The First Hop External (F) bit in the DSR Source Route option MUST + be set to 0. + + - The Last Hop External (L) bit in the DSR Source Route option is + copied from the External bit flagging the last hop in the source + route for the packet, as indicated in the Route Cache. + + - The Salvage field in the DSR Source Route option is set to 1 plus + the value of the Salvage field in the DSR Source Route option of + the packet that caused the error. + + - Transmit the packet to the next-hop node on the new source route + in the packet, using the forwarding procedure described in Section + 8.1.5. + + As described in Section 8.3.4, the node in this case also SHOULD + return a Route Error to the original sender of the packet. If the + node chooses to salvage the packet, it SHOULD do so after originating + the Route Error. + + When returning any Route Reply in the case in which the MAC protocol + in use in the network is not capable of transmitting unicast packets + over unidirectional links, the source route used for routing the + Route Reply packet MUST be obtained by reversing the sequence of hops + in the Route Request packet (the source route that is then returned + in the Route Reply). This restriction on returning a Route Reply and + on salvaging a packet that contains a Route Reply option enables the + Route Reply to test this sequence of hops for bidirectionality, + preventing the Route Reply from being received by the initiator of + the Route Discovery unless each of the hops over which the Route + Reply is returned (and thus each of the hops in the source route + being returned in the Reply) is bidirectional. + + + +Johnson, et al. Experimental [Page 83] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + +8.4. Multiple Network Interface Support + + A node using DSR MAY have multiple network interfaces that support + DSR ad hoc network routing. This section describes special packet + processing at such nodes. + + A node with multiple network interfaces that support DSR ad hoc + network routing MUST have some policy for determining which Route + Request packets are forwarded using which network interfaces. For + example, a node MAY choose to forward all Route Requests over all + network interfaces. + + When a node with multiple network interfaces that support DSR + propagates a Route Request on a network interface other than the one + on which it received the Route Request, it MUST in this special case + modify the Address list in the Route Request as follows: + + - Append the node's IP address for the incoming network interface. + + - Append the node's IP address for the outgoing network interface. + + When a node forwards a packet containing a source route, it MUST + assume that the next-hop node is reachable on the incoming network + interface, unless the next hop is the address of one of this node's + network interfaces, in which case this node MUST skip over this + address in the source route and process the packet in the same way as + if it had just received it from that network interface, as described + in Section 8.1.5. + + If a node that previously had multiple network interfaces that + support DSR receives a packet sent with a source route specifying a + change to a network interface, as described above, that is no longer + available, it MAY send a Route Error to the source of the packet + without attempting to forward the packet on the incoming network + interface, unless the network uses an autoconfiguration mechanism + that may have allowed another node to acquire the now unused address + of the unavailable network interface. + +8.5. IP Fragmentation and Reassembly + + When a node using DSR wishes to fragment a packet that contains a DSR + header not containing a Route Request option, it MUST perform the + following sequence of steps: + + - Remove the DSR Options header from the packet. + + + + + + +Johnson, et al. Experimental [Page 84] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + - Fragment the packet using normal IP fragmentation processing + [RFC791]. However, when determining the size of each fragment to + create from the original packet, the fragment size MUST be reduced + by the size of the DSR Options header from the original packet. + + - IP-in-IP encapsulate each fragment [RFC2003]. The IP Destination + address of the outer (encapsulating) packet MUST be set equal to + the IP Destination address of the original packet. + + - Add the DSR Options header from the original packet to each + resulting encapsulating packet. If a Source Route header is + present in the DSR Options header, increment the Salvage field. + + When a node using the DSR protocol receives an IP-in-IP encapsulated + packet destined to itself, it SHOULD decapsulate the packet [RFC2003] + and then process the inner packet according to standard IP reassembly + processing [RFC791]. + +8.6. Flow State Processing + + A node implementing the optional DSR flow state extension MUST follow + these additional processing steps. + +8.6.1. Originating a Packet + + When originating any packet to be routed using flow state, a node + using DSR flow state MUST do the following: + + - If the route to be used for this packet has never had a DSR flow + state established along it (or the existing flow state has + expired): + + o Generate a 16-bit Flow ID larger than any unexpired Flow IDs + used by this node for this destination. Odd Flow IDs MUST be + chosen for "default" flows; even Flow IDs MUST be chosen for + non-default flows. + + o Add a DSR Options header, as described in Section 8.1.2. + + o Add a DSR Flow State header, as described in Section 8.6.2. + + o Initialize the Hop Count field in the DSR Flow State header to + 0. + + o Set the Flow ID field in the DSR Flow State header to the Flow + ID generated in the first step. + + o Add a Timeout option to the DSR Options header. + + + +Johnson, et al. Experimental [Page 85] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + o Add a Source Route option after the Timeout option with the + route to be used, as described in Section 8.1.3. + + o The source node SHOULD record this flow in its Flow Table. + + o If this flow is recorded in the Flow Table, the TTL in this + Flow Table entry MUST be set to be the TTL of this flow + establishment packet. + + o If this flow is recorded in the Flow Table, the timeout in this + Flow Table entry MUST be set to a value no less than the value + specified in the Timeout option. + + - If the route to be used for this packet has had DSR flow state + established along it, but has not been established end-to-end: + + o Add a DSR Options header, as described in Section 8.1.2. + + o Add a DSR Flow State header, as described in Section 8.6.2. + + o Initialize the Hop Count field in the DSR Flow State header to + 0. + + o The Flow ID field of the DSR Flow State header SHOULD be the + Flow ID previously used for this route. If it is not, the + steps for sending packets along never-before-established routes + above MUST be followed in place of these. + + o Add a Timeout option to the DSR Options header, setting the + Timeout to a value not greater than the timeout remaining for + this flow in the Flow Table. + + o Add a Source Route option after the Timeout option with the + route to be used, as described in Section 8.1.3. + + o If the IP TTL is not equal to the TTL specified in the Flow + Table, the source node MUST set a flag to indicate that this + flow cannot be used as default. + + - If the route the node wishes to use for this packet has been + established as a flow end-to-end and is not the default flow: + + o Add a DSR Flow State header, as described in Section 8.6.2. + + o Initialize the Hop Count field in the DSR Flow State header to + 0. + + + + + +Johnson, et al. Experimental [Page 86] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + o The Flow ID field of the DSR Flow State header SHOULD be set to + the Flow ID previously used for this route. If it is not, the + steps for sending packets along never-before-established routes + above MUST be followed in place of these. + + o If the next hop requires a network-layer acknowledgement for + Route Maintenance, add a DSR Options header, as described in + Section 8.1.2, and an Acknowledgement Request option, as + described in Section 8.3.3. + + o A DSR Options header SHOULD NOT be added to a packet, unless it + is added to carry an Acknowledgement Request option, in which + case: + + + A Source Route option in the DSR Options header SHOULD NOT + be added. + + + If a Source Route option in the DSR Options header is added, + the steps for sending packets along flows not yet + established end-to-end MUST be followed in place of these. + + + A Timeout option SHOULD NOT be added. + + + If a Timeout option is added, it MUST specify a timeout not + greater than the timeout remaining for this flow in the Flow + Table. + + - If the route the node wishes to use for this packet has been + established as a flow end-to-end and is the current default flow: + + o If the IP TTL is not equal to the TTL specified in the Flow + Table, the source node MUST follow the steps above for sending + a packet along a non-default flow that has been established + end-to-end in place of these steps. + + o If the next hop requires a network-layer acknowledgement for + Route Maintenance, the sending node MUST add a DSR Options + header and an Acknowledgement Request option, as described in + Section 8.3.3. The sending node MUST NOT add any additional + options to this header. + + o A DSR Options header SHOULD NOT be added, except as specified + in the previous step. If one is added in a way inconsistent + with the previous step, the source node MUST follow the steps + above for sending a packet along a non-default flow that has + been established end-to-end in place of these steps. + + + + + +Johnson, et al. Experimental [Page 87] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + +8.6.2. Inserting a DSR Flow State Header + + A node originating a packet adds a DSR Flow State header to the + packet, if necessary, to carry information needed by the routing + protocol. A packet MUST NOT contain more than one DSR Flow State + header. A DSR Flow State header is added to a packet by performing + the following sequence of steps: + + - Insert a DSR Flow State header after the IP header and any Hop- + by-Hop Options header that may already be in the packet, but + before any other header that may be present. + + - Set the Next Header field of the DSR Flow State header to the Next + Header field of the previous header (either an IP header or a + Hop-by-Hop Options header). + + - Set the Flow (F) bit in the DSR Flow State header to 1. + + - Set the Protocol field of the IP header to the protocol number + assigned for DSR (48). + +8.6.3. Receiving a Packet + + This section describes processing only for packets that are sent to + this processing node as the next-hop node; that is, when the MAC- + layer destination address is the MAC address of this node. + Otherwise, the process described in Sections 8.6.5 should be + followed. + + The flow along which a packet is being sent is considered to be in + the Flow Table if the triple (IP Source Address, IP Destination + Address, Flow ID) has an unexpired entry in this node's Flow Table. + + When a node using DSR flow state receives a packet, it MUST follow + the following steps for processing: + + - If a DSR Flow State header is present, increment the Hop Count + field. + + - In addition, if a DSR Flow State header is present, then if the + triple (IP Source Address, IP Destination Address, Flow ID) is in + this node's Automatic Route Shortening Table and the packet is + listed in the entry, then the node MAY send a gratuitous Route + Reply as described in Section 4.4, subject to the rate limiting + specified therein. This gratuitous Route Reply gives the route by + which the packet originally reached this node. Specifically, the + node sending the gratuitous Route Reply constructs the route to + return in the Route Reply as follows: + + + +Johnson, et al. Experimental [Page 88] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + o Let k = (packet Hop Count) - (table Hop Count), where packet + Hop Count is the value of the Hop Count field in this received + packet, and table Hop Count is the Hop Count value stored for + this packet in the corresponding entry in this node's Automatic + Route Shortening Table. + + o Copy the complete source route for this flow from the + corresponding entry in the node's Flow Table. + + o Remove from this route the k hops immediately preceding this + node in the route, since these are the hops "skipped over" by + the packet as recorded in the Automatic Route Shortening Table + entry. + + - Process each of the DSR options within the DSR Options header in + order: + + o On receiving a Pad1 or PadN option, skip over the option. + + o On receiving a Route Request for which this node is the + destination, remove the option and return a Route Reply as + specified in Section 8.2.2. + + o On receiving a broadcast Route Request that this node has not + previously seen for which this node is not the destination, + append this node's incoming interface address to the Route + Request, continue propagating the Route Request as specified in + Section 8.2.2, pass the payload, if any, to the network layer, + and stop processing. + + o On receiving a Route Request that this node has previously seen + for which this node is not the destination, discard the packet + and stop processing. + + o On receiving any Route Request, add appropriate links to the + Route Cache, as specified in Section 8.2.2. + + o On receiving a Route Reply for which this node is the + initiator, remove the Route Reply from the packet and process + it as specified in Section 8.2.6. + + o On receiving any Route Reply, add appropriate links to the + Route Cache, as specified in Section 8.2.6. + + o On receiving any Route Error of type NODE_UNREACHABLE, remove + appropriate links to the Route Cache, as specified in Section + 8.3.5. + + + + +Johnson, et al. Experimental [Page 89] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + o On receiving a Route Error of type NODE_UNREACHABLE that this + node is the Error Destination Address of, remove the Route + Error from the packet and process it as specified in Section + 8.3.5. It also MUST stop originating packets along any flows + using the link from Error Source Address to Unreachable Node, + and it MAY remove from its Flow Table any flows using the link + from Error Source Address to Unreachable Node. + + o On receiving a Route Error of type UNKNOWN_FLOW that this node + is not the Error Destination Address of, the node checks if the + Route Error corresponds to a flow in its Flow Table. If it + does not, the node silently discards the Route Error; + otherwise, it forwards the packet to the expected previous hop + of the corresponding flow. If Route Maintenance cannot confirm + the reachability of the previous hop, the node checks if the + network interface requires bidirectional links for operation. + If it does, the node silently discards the Route Error; + otherwise, it sends the Error as if it were originating it, as + described in Section 8.1.1. + + o On receiving a Route Error of type UNKNOWN_FLOW that this node + is the Error Destination Address of, remove the Route Error + from the packet and mark the flow specified by the triple + (Error Destination Address, Original IP Destination Address, + Flow ID) as not having been established end-to-end. + + o On receiving a Route Error of type DEFAULT_FLOW_UNKNOWN that + this node is not the Error Destination Address of, the node + checks if the Route Error corresponds to a flow in its Default + Flow Table. If it does not, the node silently discards the + Route Error; otherwise, it forwards the packet to the expected + previous hop of the corresponding flow. If Route Maintenance + cannot confirm the reachability of the previous hop, the node + checks if the network interface requires bidirectional links + for operation. If it does, the node silently discards the + Route Error; otherwise, it sends the Error as if it were + originating it, as described in Section 8.1.1. + + o On receiving a Route Error of type DEFAULT_FLOW_UNKNOWN that + this node is the Error Destination Address of, remove the Route + Error from the packet and mark the default flow between the + Error Destination Address and the Original IP Destination + Address as not having been established end-to-end. + + + + + + + + +Johnson, et al. Experimental [Page 90] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + o On receiving an Acknowledgement Request option, the receiving + node removes the Acknowledgement Request option and replies to + the previous hop with an Acknowledgement option. If the + previous hop cannot be determined, the Acknowledgement Request + option is discarded, and processing continues. + + o On receiving an Acknowledgement option, the receiving node + removes the Acknowledgement option and processes it. + + o On receiving any Acknowledgement option, add the appropriate + link to the Route Cache, as specified in Section 8.1.4. + + o On receiving any Source Route option, add appropriate links to + the Route Cache, as specified in Section 8.1.4. + + o On receiving a Source Route option, if no DSR Flow State header + is present, if the flow this packet is being sent along is in + the Flow Table, or if no Timeout option preceded the Source + Route option in this DSR Options header, process it as + specified in Section 8.1.4. Stop processing this packet unless + the last address in the Source Route option is an address of + this node. + + o On receiving a Source Route option in a packet with a DSR Flow + State header, if the Flow ID specified in the DSR Flow State + header is not in the Flow Table, add the flow to the Flow + Table, setting the Timeout value to a value not greater than + the Timeout field of the Timeout option in this header. If no + Timeout option preceded the Source Route option in this header, + the flow MUST NOT be added to the Flow Table. + + If the Flow ID is odd and larger than any unexpired, odd Flow + IDs for this (IP Source Address, IP Destination Address), it is + set to be default in the Default Flow ID Table. + + Then process the Route option as specified in Section 8.1.4. + Stop processing this packet unless the last address in the + Source Route option is an address of this node. + + o On receiving a Timeout option, check if this packet contains a + DSR Flow State header. If this packet does not contain a DSR + Flow State header, discard the DSR option. Otherwise, record + the Timeout value in the option for future reference. The + value recorded SHOULD be discarded when the node has finished + processing this DSR Options header. If the flow that this + packet is being sent along is in the Flow Table, it MAY set the + flow to time out no more than Timeout seconds in the future. + + + + +Johnson, et al. Experimental [Page 91] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + o On receiving a Destination and Flow ID option, if the IP + Destination Address is not an address of this node, forward the + packet according to the Flow ID, as described in Section 8.6.4, + and stop processing this packet. + + o On receiving a Destination and Flow ID option, if the IP + Destination Address is an address of this node, set the IP + Destination Address to the New IP Destination Address specified + in the option and set the Flow ID to the New Flow Identifier. + Then remove the Destination and Flow ID option from the packet + and continue processing. + + - If the IP Destination Address is an address of this node, remove + the DSR Options header, if any, pass the packet up the network + stack, and stop processing. + + - If there is still a DSR Options header containing no options, + remove the DSR Options header. + + - If there is still a DSR Flow State header, forward the packet + according to the Flow ID, as described in Section 8.6.4. + + - If there is neither a DSR Options header nor a DSR Flow State + header, but there is an entry in the Default Flow Table for the + (IP Source Address, IP Destination Address) pair: + + o If the IP TTL is not equal to the TTL expected in the Flow + Table, insert a DSR Flow State header, setting the Hop Count + equal to the Hop Count of this node, and the Flow ID equal to + the default Flow ID found in the Default Flow Table, and + forward this packet according to the Flow ID, as described in + Section 8.6.4. + + o Otherwise, follow the steps for forwarding the packet using + Flow IDs described in Section 8.6.4, but taking the Flow ID to + be the default Flow ID found in the Default Flow Table. + + - If there is no DSR Options header and no DSR Flow State header and + no default flow can be found, the node returns a Route Error of + type DEFAULT_FLOW_UNKNOWN to the IP Source Address, specifying the + IP Destination Address as the Original IP Destination in the + type-specific field. + + + + + + + + + +Johnson, et al. Experimental [Page 92] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + +8.6.4. Forwarding a Packet Using Flow IDs + + To forward a packet using Flow IDs, a node MUST follow the following + sequence of steps: + + - If the triple (IP Source Address, IP Destination Address, Flow ID) + is not in the Flow Table, return a Route Error of type + UNKNOWN_FLOW. + + - If a network-layer acknowledgement is required for Route + Maintenance for the next hop, the node MUST include an + Acknowledgement Request option as specified in Section 8.3.3. If + no DSR Options header is in the packet in which the + Acknowledgement Request option is to be added, it MUST be + included, as described in Section 8.1.2, except that it MUST be + added after the DSR Flow State header, if one is present. + + - Attempt to transmit this packet to the next hop as specified in + the Flow Table, performing Route Maintenance to detect broken + routes. + +8.6.5. Promiscuously Receiving a Packet + + This section describes processing only for packets that have MAC + destinations other than this processing node. Otherwise, the process + described in Section 8.6.3 should be followed. + + When a node using DSR flow state promiscuously overhears a packet, it + SHOULD follow the following steps for processing: + + - If the packet contains a DSR Flow State header, and if the triple + (IP Source Address, IP Destination Address, Flow ID) is in the + Flow Table and the Hop Count is less than the Hop Count in the + flow's entry, the node MAY retain the packet in the Automatic + Route Shortening Table. If it can be determined that this Flow ID + has been recently used, the node SHOULD retain the packet in the + Automatic Route Shortening Table. + + - If the packet contains neither a DSR Flow State header nor a + Source Route option and a Default Flow ID can be found in the + Default Flow Table for the (IP Source Address, IP Destination + Address), and if the IP TTL is greater than the TTL in the Flow + Table for the default flow, the node MAY retain the packet in the + Automatic Route Shortening Table. If it can be determined that + this Flow ID has been used recently, the node SHOULD retain the + packet in the Automatic Route Shortening Table. + + + + + +Johnson, et al. Experimental [Page 93] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + +8.6.6. Operation Where the Layer below DSR Decreases the IP TTL + Non-uniformly + + Some nodes may use an IP tunnel as a DSR hop. If different packets + sent along this IP tunnel can take different routes, the reduction in + IP TTL across this link may be different for different packets. This + prevents the Automatic Route Shortening and Loop Detection + functionality from working properly when used in conjunction with + default routes. + + Nodes forwarding packets without a Source Route option onto a link + with unpredictable TTL changes MUST ensure that a DSR Flow State + header is present, indicating the correct Hop Count and Flow ID. + +8.6.7. Salvage Interactions with DSR + + Nodes salvaging packets MUST remove the DSR Flow State header, if + present. + + Anytime this document refers to the Salvage field in the Source Route + option, packets without a Source Route option are considered to have + the value zero in the Salvage field. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Johnson, et al. Experimental [Page 94] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + +9. Protocol Constants and Configuration Variables + + Any DSR implementation MUST support the following configuration + variables and MUST support a mechanism enabling the value of these + variables to be modified by system management. The specific variable + names are used for demonstration purposes only, and an implementation + is not required to use these names for the configuration variables, + so long as the external behavior of the implementation is consistent + with that described in this document. + + For each configuration variable below, the default value is specified + to simplify configuration. In particular, the default values given + below are chosen for a DSR network running over 2 Mbps IEEE 802.11 + network interfaces using the Distributed Coordination Function (DCF) + MAC protocol with RTS and CTS [IEEE80211, BROCH98]. + + DiscoveryHopLimit 255 hops + + BroadcastJitter 10 milliseconds + + RouteCacheTimeout 300 seconds + + SendBufferTimeout 30 seconds + + RequestTableSize 64 nodes + RequestTableIds 16 identifiers + MaxRequestRexmt 16 retransmissions + MaxRequestPeriod 10 seconds + RequestPeriod 500 milliseconds + NonpropRequestTimeout 30 milliseconds + + RexmtBufferSize 50 packets + + MaintHoldoffTime 250 milliseconds + + MaxMaintRexmt 2 retransmissions + + TryPassiveAcks 1 attempt + PassiveAckTimeout 100 milliseconds + + GratReplyHoldoff 1 second + + In addition, the following protocol constant MUST be supported by any + implementation of the DSR protocol: + + MAX_SALVAGE_COUNT 15 salvages + + + + + +Johnson, et al. Experimental [Page 95] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + +10. IANA Considerations + + This document specifies the DSR Options header and DSR Flow State + header, for which the IP protocol number 48 has been assigned. A + single IP protocol number can be used for both header types, since + they can be distinguished by the Flow State Header (F) bit in each + header. + + In addition, this document proposes use of the value "No Next Header" + (originally defined for use in IPv6 [RFC2460]) within an IPv4 packet, + to indicate that no further header follows a DSR Options header. + + Finally, this document introduces a number of DSR options for use in + the DSR Options header, and additional new DSR options may be defined + in the future. Each of these options requires a unique Option Type + value, the most significant 3 bits (that is, Option Type & 0xE0) + encoded as defined in Section 6.1. It is necessary only that each + Option Type value be unique, not that they be unique in the remaining + 5 bits of the value after these 3 most significant bits. + + Two registries (DSR Protocol Options and DSR Protocol Route Error + Types) have been created and contain the initial registrations. + Assignment of new values for DSR options will be by Expert Review + [RFC2434], with the authors of this document serving as the + Designated Experts. + +11. Security Considerations + + This document does not specifically address security concerns. This + document does assume that all nodes participating in the DSR protocol + do so in good faith and without malicious intent to corrupt the + routing ability of the network. + + Depending on the threat model, a number of different mechanisms can + be used to secure DSR. For example, in an environment where node + compromise is unrealistic and where all the nodes participating in + the DSR protocol share a common goal that motivates their + participation in the protocol, the communications between the nodes + can be encrypted at the physical channel or link layer to prevent + attack by outsiders. Cryptographic approaches, such as that provided + by Ariadne [HU02] or Secure Routing Protocol (SRP) + [PAPADIMITRATOS02], can resist stronger attacks. + + + + + + + + + +Johnson, et al. Experimental [Page 96] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + +Appendix A. Link-MaxLife Cache Description + + As guidance to implementers of DSR, the description below outlines + the operation of a possible implementation of a Route Cache for DSR + that has been shown to outperform other caches studied in detailed + simulations. Use of this design for the Route Cache is recommended + in implementations of DSR. + + This cache, called "Link-MaxLife" [HU00], is a link cache, in that + each individual link (hop) in the routes returned in Route Reply + packets (or otherwise learned from the header of overhead packets) is + added to a unified graph data structure of this node's current view + of the network topology, as described in Section 4.1. To search for + a route in this cache to some destination node, the sending node uses + a graph search algorithm, such as the well-known Dijkstra's + shortest-path algorithm, to find the current best path through the + graph to the destination node. + + The Link-MaxLife form of link cache is adaptive in that each link in + the cache has a timeout that is determined dynamically by the caching + node according to its observed past behavior of the two nodes at the + ends of the link; in addition, when selecting a route for a packet + being sent to some destination, among cached routes of equal length + (number of hops) to that destination, Link-MaxLife selects the route + with the longest expected lifetime (highest minimum timeout of any + link in the route). + + Specifically, in Link-MaxLife, a link's timeout in the Route Cache is + chosen according to a "Stability Table" maintained by the caching + node. Each entry in a node's Stability Table records the address of + another node and a factor representing the perceived "stability" of + this node. The stability of each other node in a node's Stability + Table is initialized to InitStability. When a link from the Route + Cache is used in routing a packet originated or salvaged by that + node, the stability metric for each of the two endpoint nodes of that + link is incremented by the amount of time since that link was last + used, multiplied by StabilityIncrFactor (StabilityIncrFactor >= 1); + when a link is observed to break and the link is thus removed from + the Route Cache, the stability metric for each of the two endpoint + nodes of that link is multiplied by StabilityDecrFactor + (StabilityDecrFactor < 1). + + When a node adds a new link to its Route Cache, the node assigns a + lifetime for that link in the Cache equal to the stability of the + less "stable" of the two endpoint nodes for the link, except that a + link is not allowed to be given a lifetime less than MinLifetime. + When a link is used in a route chosen for a packet originated or + salvaged by this node, the link's lifetime is set to be at least + + + +Johnson, et al. Experimental [Page 97] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + UseExtends into the future; if the lifetime of that link in the Route + Cache is already further into the future, the lifetime remains + unchanged. + + When a node using Link-MaxLife selects a route from its Route Cache + for a packet being originated or salvaged by this node, it selects + the shortest-length route that has the longest expected lifetime + (highest minimum timeout of any link in the route), as opposed to + simply selecting an arbitrary route of shortest length. + + The following configuration variables are used in the description of + Link-MaxLife above. The specific variable names are used for + demonstration purposes only, and an implementation is not required to + use these names for these configuration variables. For each + configuration variable below, the default value is specified to + simplify configuration. In particular, the default values given + below are chosen for a DSR network where nodes move at relative + velocities between 12 and 25 seconds per wireless transmission + radius. + + InitStability 25 seconds + StabilityIncrFactor 4 + StabilityDecrFactor 0.5 + + MinLifetime 1 second + UseExtends 120 seconds + + + + + + + + + + + + + + + + + + + + + + + + + +Johnson, et al. Experimental [Page 98] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + +Appendix B. Location of DSR in the ISO Network Reference Model + + When designing DSR, we had to determine at what layer within the + protocol hierarchy to implement ad hoc network routing. We + considered two different options: routing at the link layer (ISO + layer 2) and routing at the network layer (ISO layer 3). Originally, + we opted to route at the link layer for several reasons: + + - Pragmatically, running the DSR protocol at the link layer + maximizes the number of mobile nodes that can participate in ad + hoc networks. For example, the protocol can route equally well + between IPv4 [RFC791], IPv6 [RFC2460], and IPX [TURNER90] nodes. + + - Historically [JOHNSON94, JOHNSON96a], DSR grew from our + contemplation of a multi-hop propagating version of the Internet's + Address Resolution Protocol (ARP) [RFC826], as well as from the + routing mechanism used in IEEE 802 source routing bridges + [PERLMAN92]. These are layer 2 protocols. + + - Technically, we designed DSR to be simple enough that it could be + implemented directly in the firmware inside wireless network + interface cards [JOHNSON94, JOHNSON96a], well below the layer 3 + software within a mobile node. We see great potential in this for + DSR running inside a cloud of mobile nodes around a fixed base + station, where DSR would act to transparently extend the coverage + range to these nodes. Mobile nodes that would otherwise be unable + to communicate with the base station due to factors such as + distance, fading, or local interference sources could then reach + the base station through their peers. + + Ultimately, however, we decided to specify and to implement + [MALTZ99b] DSR as a layer 3 protocol, since this is the only layer at + which we could realistically support nodes with multiple network + interfaces of different types forming an ad hoc network. + + + + + + + + + + + + + + + + + +Johnson, et al. Experimental [Page 99] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + +Appendix C. Implementation and Evaluation Status + + The initial design of the DSR protocol, including DSR's basic Route + Discovery and Route Maintenance mechanisms, was first published in + December 1994 [JOHNSON94]; significant additional design details and + initial simulation results were published in early 1996 [JOHNSON96a]. + + The DSR protocol has been extensively studied since then through + additional detailed simulations. In particular, we have implemented + DSR in the ns-2 network simulator [NS-2, BROCH98] and performed + extensive simulations of DSR using ns-2 (e.g., [BROCH98, MALTZ99a]). + We have also conducted evaluations of the different caching + strategies in this document [HU00]. + + We have also implemented the DSR protocol under the FreeBSD 2.2.7 + operating system running on Intel x86 platforms. FreeBSD [FREEBSD] + is based on a variety of free software, including 4.4 BSD Lite, from + the University of California, Berkeley. For the environments in + which we used it, this implementation is functionally equivalent to + the version of the DSR protocol specified in this document. + + During the 7 months from August 1998 to February 1999, we designed + and implemented a full-scale physical testbed to enable the + evaluation of ad hoc network performance in the field, in an actively + mobile ad hoc network under realistic communication workloads. The + last week of February and the first week of March of 1999 included + demonstrations of this testbed to a number of our sponsors and + partners, including Lucent Technologies, Bell Atlantic, and the + Defense Advanced Research Projects Agency (DARPA). A complete + description of the testbed is available [MALTZ99b, MALTZ00, MALTZ01]. + + We have since ported this implementation of DSR to FreeBSD 3.3, and + we have also added a preliminary version of Quality of Service (QoS) + support for DSR. A demonstration of this modified version of DSR was + presented in July 2000. These QoS features are not included in this + document and will be added later in a separate document on top of the + base protocol specified here. + + DSR has also been implemented under Linux by Alex Song at the + University of Queensland, Australia [SONG01]. This implementation + supports the Intel x86 PC platform and the Compaq iPAQ. + + The Network and Telecommunications Research Group at Trinity College, + Dublin, have implemented a version of DSR on Windows CE. + + Microsoft Research has implemented a version of DSR on Windows XP and + has used it in testbeds of over 15 nodes. Several machines use this + implementation as their primary means of accessing the Internet. + + + +Johnson, et al. Experimental [Page 100] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + Several other independent groups have also used DSR as a platform for + their own research, or as a basis of comparison between ad hoc + network routing protocols. + + A preliminary version of the optional DSR flow state extension was + implemented in FreeBSD 3.3. A demonstration of this modified version + of DSR was presented in July 2000. The DSR flow state extension has + also been extensively evaluated using simulation [HU01]. + +Acknowledgements + + The protocol described in this document has been designed and + developed within the Monarch Project, a long-term research project at + Rice University (previously at Carnegie Mellon University) that is + developing adaptive networking protocols and protocol interfaces to + allow truly seamless wireless and mobile node networking [JOHNSON96b, + MONARCH]. + + The authors would like to acknowledge the substantial contributions + of Josh Broch in helping to design, simulate, and implement the DSR + protocol. We thank him for his contributions to earlier versions of + this document. + + We would also like to acknowledge the assistance of Robert V. Barron + at Carnegie Mellon University. Bob ported our DSR implementation + from FreeBSD 2.2.7 into FreeBSD 3.3. + + Many valuable suggestions came from participants in the IETF process. + We would particularly like to acknowledge Fred Baker, who provided + extensive feedback on a previous version of this document, as well as + the working group chairs, for their suggestions of previous versions + of the document. + + + + + + + + + + + + + + + + + + + +Johnson, et al. Experimental [Page 101] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + +Normative References + + [RFC791] Postel, J., "Internet Protocol", STD 5, RFC 791, + September 1981. + + [RFC792] Postel, J., "Internet Control Message Protocol", STD + 5, RFC 792, September 1981. + + [RFC826] Plummer, David C., "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. + + [RFC1122] Braden, R., "Requirements for Internet Hosts - + Communication Layers", STD 3, RFC 1122, October 1989. + + [RFC1700] Reynolds, J. and J. Postel, "Assigned Numbers", STD 2, + RFC 1700, October 1994. See also + http://www.iana.org/numbers.html. + + [RFC2003] Perkins, C., "IP Encapsulation within IP", RFC 2003, + October 1996. RFC 2003, October 1996. + + [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate + Requirement Levels", BCP 14, RFC 2119, March 1997. + + [RFC2434] Narten, T. and H. Alvestrand, "Guidelines for Writing + an IANA Considerations Section in RFCs", BCP 26, RFC + 2434, October 1998. + +Informative References + + [BANTZ94] David F. Bantz and Frederic J. Bauchot. Wireless LAN + Design Alternatives. IEEE Network, 8(2):43-53, + March/April 1994. + + [BHARGHAVAN94] Vaduvur Bharghavan, Alan Demers, Scott Shenker, and + Lixia Zhang. MACAW: A Media Access Protocol for + Wireless LAN's. In Proceedings of the ACM SIGCOMM '94 + Conference, pages 212-225. ACM, August 1994. + + [BROCH98] Josh Broch, David A. Maltz, David B. Johnson, Yih-Chun + Hu, and Jorjeta Jetcheva. A Performance Comparison of + Multi-Hop Wireless Ad Hoc Network Routing Protocols. + In Proceedings of the Fourth Annual ACM/IEEE + International Conference on Mobile Computing and + Networking, pages 85-97. ACM/IEEE, October 1998. + + + + +Johnson, et al. Experimental [Page 102] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + [CLARK88] David D. Clark. The Design Philosophy of the DARPA + Internet Protocols. In Proceedings of the ACM SIGCOMM + '88 Conference, pages 106-114. ACM, August 1988. + + [FREEBSD] The FreeBSD Project. Project web page available at + http://www.freebsd.org/. + + [HU00] Yih-Chun Hu and David B. Johnson. Caching Strategies + in On-Demand Routing Protocols for Wireless Ad Hoc + Networks. In Proceedings of the Sixth Annual ACM + International Conference on Mobile Computing and + Networking. ACM, August 2000. + + [HU01] Yih-Chun Hu and David B. Johnson. Implicit Source + Routing in On-Demand Ad Hoc Network Routing. In + Proceedings of the Second Symposium on Mobile Ad Hoc + Networking and Computing (MobiHoc 2001), pages 1-10, + October 2001. + + [HU02] Yih-Chun Hu, Adrian Perrig, and David B. Johnson. + Ariadne: A Secure On-Demand Routing Protocol for Ad + Hoc Networks. In Proceedings of the Eighth Annual + International Conference on Mobile Computing and + Networking (MobiCom 2002), pages 12-23, September + 2002. + + [IEEE80211] IEEE Computer Society LAN MAN Standards Committee. + Wireless LAN Medium Access Control (MAC) and Physical + Layer (PHY) Specifications, IEEE Std 802.11-1997. The + Institute of Electrical and Electronics Engineers, New + York, New York, 1997. + + [JOHANSSON99] Per Johansson, Tony Larsson, Nicklas Hedman, Bartosz + Mielczarek, and Mikael Degermark. Scenario-based + Performance Analysis of Routing Protocols for Mobile + Ad-hoc Networks. In Proceedings of the Fifth Annual + ACM/IEEE International Conference on Mobile Computing + and Networking, pages 195-206. ACM/IEEE, August 1999. + + [JOHNSON94] David B. Johnson. Routing in Ad Hoc Networks of + Mobile Hosts. In Proceedings of the IEEE Workshop on + Mobile Computing Systems and Applications, pages 158- + 163. IEEE Computer Society, December 1994. + + + + + + + + +Johnson, et al. Experimental [Page 103] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + [JOHNSON96a] David B. Johnson and David A. Maltz. Dynamic Source + Routing in Ad Hoc Wireless Networks. In Mobile + Computing, edited by Tomasz Imielinski and Hank Korth, + chapter 5, pages 153-181. Kluwer Academic Publishers, + 1996. + + [JOHNSON96b] David B. Johnson and David A. Maltz. Protocols for + Adaptive Wireless and Mobile Networking. IEEE + Personal Communications, 3(1):34-42, February 1996. + + [JUBIN87] John Jubin and Janet D. Tornow. The DARPA Packet + Radio Network Protocols. Proceedings of the IEEE, + 75(1):21-32, January 1987. + + [KARN90] Phil Karn. MACA---A New Channel Access Method for + Packet Radio. In ARRL/CRRL Amateur Radio 9th Computer + Networking Conference, pages 134-140. American Radio + Relay League, September 1990. + + [LAUER95] Gregory S. Lauer. Packet-Radio Routing. In Routing + in Communications Networks, edited by Martha E. + Steenstrup, chapter 11, pages 351-396. Prentice-Hall, + Englewood Cliffs, New Jersey, 1995. + + [MALTZ99a] David A. Maltz, Josh Broch, Jorjeta Jetcheva, and + David B. Johnson. The Effects of On-Demand Behavior + in Routing Protocols for Multi-Hop Wireless Ad Hoc + Networks. IEEE Journal on Selected Areas of + Communications, 17(8):1439-1453, August 1999. + + [MALTZ99b] David A. Maltz, Josh Broch, and David B. Johnson. + Experiences Designing and Building a Multi-Hop + Wireless Ad Hoc Network Testbed. Technical Report + CMU-CS-99-116, School of Computer Science, Carnegie + Mellon University, Pittsburgh, Pennsylvania, March + 1999. + + [MALTZ00] David A. Maltz, Josh Broch, and David B. Johnson. + Quantitative Lessons From a Full-Scale Multi-Hop + Wireless Ad Hoc Network Testbed. In Proceedings of + the IEEE Wireless Communications and Networking + Conference. IEEE, September 2000. + + [MALTZ01] David A. Maltz, Josh Broch, and David B. Johnson. + Lessons From a Full-Scale MultiHop Wireless Ad Hoc + Network Testbed. IEEE Personal Communications, + 8(1):8-15, February 2001. + + + + +Johnson, et al. Experimental [Page 104] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + + [MONARCH] Rice University Monarch Project. Monarch Project Home + Page. Available at http://www.monarch.cs.rice.edu/. + + [NS-2] The Network Simulator -- ns-2. Project web page + available at http://www.isi.edu/nsnam/ns/. + + [PAPADIMITRATOS02] + Panagiotis Papadimitratos and Zygmunt J. Haas. Secure + Routing for Mobile Ad Hoc Networks. In SCS + Communication Networks and Distributed Systems + Modeling and Simulation Conference (CNDS 2002), + January 2002. + + [PERLMAN92] Radia Perlman. Interconnections: Bridges and + Routers. Addison-Wesley, Reading, Massachusetts, + 1992. + + [RFC793] Postel, J., "Transmission Control Protocol", STD 7, + RFC 793, September 1981. + + [RFC2131] Droms, R., "Dynamic Host Configuration Protocol", RFC + 2131, March 1997. + + [RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version + 6 (IPv6) Specification", RFC 2460, December 1998. + + [SONG01] Alex Song. picoNet II: A Wireless Ad Hoc Network for + Mobile Handheld Devices. Submitted for the degree of + Bachelor of Engineering (Honours) in the division of + Electrical Engineering, Department of Information + Technology and Electrical Engineering, University of + Queensland, Australia, October 2001. Available at + http://piconet.sourceforge.net/thesis/index.html. + + [TURNER90] Paul Turner. NetWare Communications Processes. + NetWare Application Notes, Novell Research, pages 25- + 91, September 1990. + + [WRIGHT95] Gary R. Wright and W. Richard Stevens. TCP/IP + Illustrated, Volume 2: The Implementation. Addison- + Wesley, Reading, Massachusetts, 1995. + + + + + + + + + + +Johnson, et al. Experimental [Page 105] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + +Authors' Addresses + + David B. Johnson + Rice University + Computer Science Department, MS 132 + 6100 Main Street + Houston, TX 77005-1892 + USA + + Phone: +1 713 348-3063 + Fax: +1 713 348-5930 + EMail: dbj@cs.rice.edu + + + David A. Maltz + Microsoft Research + One Microsoft Way + Redmond, WA 98052 + USA + + Phone: +1 425 706-7785 + Fax: +1 425 936-7329 + EMail: dmaltz@microsoft.com + + + Yih-Chun Hu + University of Illinois at Urbana-Champaign + Coordinated Science Lab + 1308 West Main St, MC 228 + Urbana, IL 61801 + USA + + Phone: +1 217 333-4220 + EMail: yihchun@uiuc.edu + + + + + + + + + + + + + + + + + +Johnson, et al. Experimental [Page 106] + +RFC 4728 The Dynamic Source Routing Protocol February 2007 + + +Full Copyright Statement + + Copyright (C) The IETF Trust (2007). + + 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, THE IETF TRUST 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. + + + + + + + +Johnson, et al. Experimental [Page 107] + -- cgit v1.2.3