draft-ietf-manet-dsr-04.txt | draft-ietf-manet-dsr-05.txt | |||
---|---|---|---|---|
IETF MANET Working Group David B. Johnson, Rice University | IETF MANET Working Group David B. Johnson, Rice University | |||
INTERNET-DRAFT David A. Maltz, AON Networks | INTERNET-DRAFT David A. Maltz, AON Networks | |||
17 November 2000 Yih-Chun Hu, Carnegie Mellon University | 2 March 2001 Yih-Chun Hu, Rice University | |||
Jorjeta G. Jetcheva, Carnegie Mellon University | Jorjeta G. Jetcheva, Carnegie Mellon University | |||
The Dynamic Source Routing Protocol for Mobile Ad Hoc Networks | The Dynamic Source Routing Protocol for Mobile Ad Hoc Networks | |||
<draft-ietf-manet-dsr-04.txt> | <draft-ietf-manet-dsr-05.txt> | |||
Status of This Memo | Status of This Memo | |||
This document is an Internet-Draft and is in full conformance with | This document is an Internet-Draft and is in full conformance with | |||
all provisions of Section 10 of RFC 2026 except that the right to | all provisions of Section 10 of RFC 2026 except that the right to | |||
produce derivative works is not granted. | produce derivative works is not granted. | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF), its areas, and its working groups. Note | Task Force (IETF), its areas, and its working groups. Note | |||
that other groups may also distribute working documents as | that other groups may also distribute working documents as | |||
skipping to change at page 1, line 78 | skipping to change at page 1, line 78 | |||
2. Assumptions 3 | 2. Assumptions 3 | |||
3. DSR Protocol Overview 5 | 3. DSR Protocol Overview 5 | |||
3.1. Basic DSR Route Discovery . . . . . . . . . . . . . . . . 5 | 3.1. Basic DSR Route Discovery . . . . . . . . . . . . . . . . 5 | |||
3.2. Basic DSR Route Maintenance . . . . . . . . . . . . . . . 7 | 3.2. Basic DSR Route Maintenance . . . . . . . . . . . . . . . 7 | |||
3.3. Additional Route Discovery Features . . . . . . . . . . . 8 | 3.3. Additional Route Discovery Features . . . . . . . . . . . 8 | |||
3.3.1. Caching Overheard Routing Information . . . . . . 8 | 3.3.1. Caching Overheard Routing Information . . . . . . 8 | |||
3.3.2. Replying to Route Requests using Cached Routes . 9 | 3.3.2. Replying to Route Requests using Cached Routes . 9 | |||
3.3.3. Preventing Route Reply Storms . . . . . . . . . . 10 | 3.3.3. Preventing Route Reply Storms . . . . . . . . . . 10 | |||
3.3.4. Route Request Hop Limits . . . . . . . . . . . . 12 | 3.3.4. Route Request Hop Limits . . . . . . . . . . . . 12 | |||
3.4. Additional Route Maintenance Features . . . . . . . . . . 12 | 3.4. Additional Route Maintenance Features . . . . . . . . . . 13 | |||
3.4.1. Packet Salvaging . . . . . . . . . . . . . . . . 12 | 3.4.1. Packet Salvaging . . . . . . . . . . . . . . . . 13 | |||
3.4.2. Automatic Route Shortening . . . . . . . . . . . 13 | 3.4.2. Automatic Route Shortening . . . . . . . . . . . 13 | |||
3.4.3. Increased Spreading of Route Error Messages . . . 14 | 3.4.3. Increased Spreading of Route Error Messages . . . 14 | |||
4. Conceptual Data Structures 15 | 4. Conceptual Data Structures 15 | |||
4.1. Route Cache . . . . . . . . . . . . . . . . . . . . . . . 15 | 4.1. Route Cache . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
4.2. Route Request Table . . . . . . . . . . . . . . . . . . . 17 | 4.2. Route Request Table . . . . . . . . . . . . . . . . . . . 17 | |||
4.3. Send Buffer . . . . . . . . . . . . . . . . . . . . . . . 18 | 4.3. Send Buffer . . . . . . . . . . . . . . . . . . . . . . . 18 | |||
4.4. Retransmission Buffer . . . . . . . . . . . . . . . . . . 19 | 4.4. Retransmission Buffer . . . . . . . . . . . . . . . . . . 19 | |||
5. Packet Formats 20 | 5. DSR Header Format 20 | |||
5.1. Destination Options Header . . . . . . . . . . . . . . . 21 | 5.1. Fixed Portion of DSR Header . . . . . . . . . . . . . . . 21 | |||
5.1.1. DSR Route Request Option . . . . . . . . . . . . 22 | 5.2. Route Request Option . . . . . . . . . . . . . . . . . . 23 | |||
5.2. Hop-by-Hop Options Header . . . . . . . . . . . . . . . . 24 | 5.3. Route Reply Option . . . . . . . . . . . . . . . . . . . 25 | |||
5.2.1. DSR Route Reply Option . . . . . . . . . . . . . 25 | 5.4. Route Error Option . . . . . . . . . . . . . . . . . . . 27 | |||
5.2.2. DSR Route Error Option . . . . . . . . . . . . . 27 | 5.5. Acknowledgment Request Option . . . . . . . . . . . . . . 29 | |||
5.2.3. DSR Acknowledgment Option . . . . . . . . . . . . 29 | 5.6. Acknowledgment Option . . . . . . . . . . . . . . . . . . 30 | |||
5.3. DSR Routing Header . . . . . . . . . . . . . . . . . . . 30 | 5.7. Source Route Option . . . . . . . . . . . . . . . . . . . 31 | |||
5.8. Pad1 Option . . . . . . . . . . . . . . . . . . . . . . . 33 | ||||
5.9. PadN Option . . . . . . . . . . . . . . . . . . . . . . . 34 | ||||
6. Detailed Operation 33 | 6. Detailed Operation 35 | |||
6.1. General Packet Processing . . . . . . . . . . . . . . . . 33 | 6.1. General Packet Processing . . . . . . . . . . . . . . . . 35 | |||
6.1.1. Originating a Packet . . . . . . . . . . . . . . 33 | 6.1.1. Originating a Packet . . . . . . . . . . . . . . 35 | |||
6.1.2. Adding a DSR Routing Header to a Packet . . . . . 34 | 6.1.2. Adding a DSR Header to a Packet . . . . . . . . . 35 | |||
6.1.3. Receiving a Packet . . . . . . . . . . . . . . . 36 | 6.1.3. Adding a Source Route Option to a Packet . . . . 36 | |||
6.1.4. Processing a Routing Header in a Received Packet 38 | 6.1.4. Receiving a Packet . . . . . . . . . . . . . . . 36 | |||
6.1.5. Processing a Received Source Route Option . . . . 38 | ||||
6.2. Route Discovery Processing . . . . . . . . . . . . . . . 40 | 6.2. Route Discovery Processing . . . . . . . . . . . . . . . 40 | |||
6.2.1. Originating a Route Request . . . . . . . . . . . 40 | 6.2.1. Originating a Route Request . . . . . . . . . . . 40 | |||
6.2.2. Processing a Received Route Request Option . . . 42 | 6.2.2. Processing a Received Route Request Option . . . 42 | |||
6.2.3. Generating Route Replies using the Route Cache . 43 | 6.2.3. Generating Route Replies using the Route Cache . 43 | |||
6.2.4. Originating a Route Reply . . . . . . . . . . . . 45 | 6.2.4. Originating a Route Reply . . . . . . . . . . . . 44 | |||
6.2.5. Processing a Route Reply Option . . . . . . . . . 46 | 6.2.5. Processing a Route Reply Option . . . . . . . . . 46 | |||
6.3. Route Maintenance Processing . . . . . . . . . . . . . . 47 | 6.3. Route Maintenance Processing . . . . . . . . . . . . . . 47 | |||
6.3.1. Using Network-Layer Acknowledgments . . . . . . . 47 | 6.3.1. Using Network-Layer Acknowledgments . . . . . . . 47 | |||
6.3.2. Using Link Layer Acknowledgments . . . . . . . . 48 | 6.3.2. Using Link Layer Acknowledgments . . . . . . . . 48 | |||
6.3.3. Originating a Route Error . . . . . . . . . . . . 48 | 6.3.3. Originating a Route Error . . . . . . . . . . . . 48 | |||
6.3.4. Processing a Route Error Option . . . . . . . . . 49 | 6.3.4. Processing a Route Error Option . . . . . . . . . 49 | |||
6.3.5. Salvaging a Packet . . . . . . . . . . . . . . . 49 | 6.3.5. Salvaging a Packet . . . . . . . . . . . . . . . 49 | |||
7. Constants 50 | 7. Constants 50 | |||
skipping to change at page 3, line 52 | skipping to change at page 3, line 52 | |||
believe that portions of the protocol are suitable for implementation | believe that portions of the protocol are suitable for implementation | |||
directly within a programmable network interface unit to avoid this | directly within a programmable network interface unit to avoid this | |||
overhead on the CPU [13]. Use of promiscuous mode may also increase | overhead on the CPU [13]. Use of promiscuous mode may also increase | |||
the power consumption of the network interface hardware, depending | the power consumption of the network interface hardware, depending | |||
on the design of the receiver hardware, and in such cases, DSR can | on the design of the receiver hardware, and in such cases, DSR can | |||
easily be used without the optimizations that depend on promiscuous | easily be used without the optimizations that depend on promiscuous | |||
receive mode, or can be programmed to only periodically switch the | receive mode, or can be programmed to only periodically switch the | |||
interface into promiscuous mode. Use of promiscuous receive mode is | interface into promiscuous mode. Use of promiscuous receive mode is | |||
entirely optional. | entirely optional. | |||
Wireless communication ability between any pair of nodes can at | Wireless communication ability between any pair of nodes may at | |||
times not work equally well in both directions, due for example to | times not work equally well in both directions, due for example to | |||
differing antenna or propagation patterns or sources of interference | differing antenna or propagation patterns or sources of interference | |||
around the two nodes [1, 17]. That is, wireless communications | around the two nodes [1, 17]. That is, wireless communications | |||
between each pair of nodes will in many cases be able to operate | between each pair of nodes will in many cases be able to operate | |||
bi-directionally, but at times the wireless link between two nodes | bi-directionally, but at times the wireless link between two nodes | |||
may be only uni-directional, allowing one node to successfully send | may be only uni-directional, allowing one node to successfully send | |||
packets to the other while no communication is possible in the | packets to the other while no communication is possible in the | |||
reverse direction. Although many routing protocols operate correctly | reverse direction. Although many routing protocols operate correctly | |||
only over bi-directional links, DSR can successfully discover and | only over bi-directional links, DSR can successfully discover and | |||
forward packets over paths that contain uni-directional links. | forward packets over paths that contain uni-directional links. | |||
skipping to change at page 5, line 9 | skipping to change at page 5, line 9 | |||
The IP address used by a node using the DSR protocol MAY be assigned | The IP address used by a node using the DSR protocol MAY be assigned | |||
by any mechanism (e.g., static assignment or use of DHCP for dynamic | by any mechanism (e.g., static assignment or use of DHCP for dynamic | |||
assignment [8]), although the method of such assignment is outside | assignment [8]), although the method of such assignment is outside | |||
the scope of this specification. | the scope of this specification. | |||
3. DSR Protocol Overview | 3. DSR Protocol Overview | |||
3.1. Basic DSR Route Discovery | 3.1. Basic DSR Route Discovery | |||
When some node S originates a new packet destined to some other | When some source node originates a new packet addressed to some | |||
node D, it places in the header of the packet a source route giving | destination node, the source node places in the header of the packet | |||
the sequence of hops that the packet is to follow on its way to | a source route giving the sequence of hops that the packet is to | |||
D. Normally, S will obtain a suitable source route by searching | follow on its way to the destination. Normally, the sender will | |||
its "Route Cache" of routes previously learned, but if no route is | obtain a suitable source route by searching its "Route Cache" of | |||
found in its cache, it will initiate the Route Discovery protocol | routes previously learned, but if no route is found in its cache, it | |||
to dynamically find a new route to D. In this case, we call S the | will initiate the Route Discovery protocol to dynamically find a new | |||
"initiator" and D the "target" of the Route Discovery. | 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 | 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 | node E. The Route Discovery initiated by node A in this example | |||
would proceed as follows: | would proceed as follows: | |||
^ "A" ^ "A,B" ^ "A,B,C" ^ "A,B,C,D" | ^ "A" ^ "A,B" ^ "A,B,C" ^ "A,B,C,D" | |||
| id=2 | id=2 | id=2 | id=2 | | id=2 | id=2 | id=2 | id=2 | |||
+-----+ +-----+ +-----+ +-----+ +-----+ | +-----+ +-----+ +-----+ +-----+ +-----+ | |||
| A |---->| B |---->| C |---->| D |---->| E | | | A |---->| B |---->| C |---->| D |---->| E | | |||
+-----+ +-----+ +-----+ +-----+ +-----+ | +-----+ +-----+ +-----+ +-----+ +-----+ | |||
| | | | | | | | | | |||
v v v v | v v v v | |||
To initiate the Route Discovery, node A transmits a "Route Request" | To initiate the Route Discovery, node A transmits a "Route | |||
message as a single local broadcast packet, which is received by | Request" as a single local broadcast packet, which is received by | |||
(approximately) all nodes currently within wireless transmission | (approximately) all nodes currently within wireless transmission | |||
range of A, including node B in this example. Each Route Request | range of A, including node B in this example. Each Route Request | |||
message identifies the initiator and target of the Route Discovery, | identifies the initiator and target of the Route Discovery, and | |||
and also contains a unique request identification (2, in this | also contains a unique request identification (2, in this example), | |||
example), determined by the initiator of the Request. Each | determined by the initiator of the Request. Each Route Request also | |||
Route Request also contains a record listing the address of each | contains a record listing the address of each intermediate node | |||
intermediate node through which this particular copy of the Route | through which this particular copy of the Route Request has been | |||
Request message has been forwarded. This route record is initialized | forwarded. This route record is initialized to an empty list by the | |||
to an empty list by the initiator of the Route Discovery. In this | initiator of the Route Discovery. In this example, the route record | |||
example, the route record initially lists only node A. | initially lists only node A. | |||
When another node receives a Route Request (such as node B in this | 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 | example), if it is the target of the Route Discovery, it returns | |||
a "Route Reply" message to the initiator of the Route Discovery, | a "Route Reply" to the initiator of the Route Discovery, giving | |||
giving a copy of the accumulated route record from the Route Request; | a copy of the accumulated route record from the Route Request; | |||
when the initiator receives this Route Reply, it caches this route | when the initiator receives this Route Reply, it caches this route | |||
in its Route Cache for use in sending subsequent packets to this | in its Route Cache for use in sending subsequent packets to this | |||
destination. Otherwise, if this node receiving the Route Request | destination. | |||
has recently seen another Route Request message from this initiator | ||||
bearing this same request identification and target address, or if it | Otherwise, if this node receiving the Route Request has recently seen | |||
finds that its own address is already listed in the route record in | another Route Request message from this initiator bearing this same | |||
the Route Request message, it discards the Request. Otherwise, this | request identification and target address, or if this node's own | |||
node appends its own address to the route record in the Route Request | address is already listed in the route record in the Route Request, | |||
message and propagates it by transmitting it as a local broadcast | this node discards the Request. Otherwise, this node appends its | |||
packet (with the same request identification). In this example, | own address to the route record in the Route Request and propagates | |||
node B broadcast the Route Request, which is received by node C; | it by transmitting it as a local broadcast packet (with the same | |||
nodes C and D each also broadcast the Request in turn, resulting in a | request identification). In this example, node B broadcast the Route | |||
copy of the Request being received by node E. | Request, which is received by node C; nodes C and D each also, in | |||
turn, broadcast the Request, resulting in a copy of the Request being | ||||
received by node E. | ||||
In returning the Route Reply to the initiator of the Route Discovery, | In returning the Route Reply to the initiator of the Route Discovery, | |||
such as node E replying back to A in this example, node E will | 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 | typically examine its own Route Cache for a route back to A, and if | |||
found, will use it for the source route for delivery of the packet | found, will use it for the source route for delivery of the packet | |||
containing the Route Reply. Otherwise, E SHOULD perform its own | containing the Route Reply. Otherwise, E SHOULD perform its own | |||
Route Discovery for target node A, but to avoid possible infinite | Route Discovery for target node A, but to avoid possible infinite | |||
recursion of Route Discoveries, it MUST piggyback this Route Reply on | recursion of Route Discoveries, it MUST piggyback this Route Reply | |||
its own Route Request message for A. | 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 [25], on a Route Request using this same mechanism. | ||||
It is also possible to piggyback other small data packets, such as a | Node E could instead simply reverse the sequence of hops in the route | |||
TCP SYN packet [26], on a Route Request using this same mechanism. | ||||
Node E could also simply reverse the sequence of hops in the route | ||||
record that it is trying to send in the Route Reply, and use this | 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. | as the source route on the packet carrying the Route Reply itself. | |||
For MAC protocols such as IEEE 802.11 that require a bi-directional | For MAC protocols such as IEEE 802.11 that require a bi-directional | |||
frame exchange as part of the MAC protocol [10], this route reversal | frame exchange as part of the MAC protocol [10], this route reversal | |||
is preferred as it avoids the overhead of a possible second Route | is preferred, as it avoids the overhead of a possible second | |||
Discovery, and it tests the discovered route to ensure it is | Route Discovery, and it tests the discovered route to ensure it is | |||
bi-directional before the Route Discovery initiator begins using the | bi-directional before the Route Discovery initiator begins using the | |||
route. However, this technique will prevent the discovery of routes | route. However, this technique will prevent the discovery of routes | |||
using uni-directional links. In wireless environments where the use | using uni-directional links. In wireless environments where the use | |||
of uni-directional links is permitted, such routes may in some cases | of uni-directional links is permitted, such routes may in some cases | |||
be more efficient than those with only bi-directional links, or they | be more efficient than those with only bi-directional links, or they | |||
may be the only way to achieve connectivity to the target node. | may be the only way to achieve connectivity to the target node. | |||
When initiating a Route Discovery, the sending node saves a copy of | When initiating a Route Discovery, the sending node saves a copy of | |||
the original packet in a local buffer called the "Send Buffer". The | the original packet (that triggered the Discovery) in a local buffer | |||
Send Buffer contains a copy of each packet that cannot be transmitted | called the "Send Buffer". The Send Buffer contains a copy of each | |||
by this node because it does not yet have a source route to the | packet that cannot be transmitted by this node because it does not | |||
packet's destination. Each packet in the Send Buffer is stamped with | yet have a source route to the packet's destination. Each packet in | |||
the time that it was placed into the Buffer and is discarded after | the Send Buffer is logically associated with the time that it was | |||
residing in the Send Buffer for some timeout period; if necessary | placed into the Send Buffer and is discarded after residing in the | |||
for preventing the Send Buffer from overflowing, a FIFO or other | Send Buffer for some timeout period; if necessary for preventing the | |||
replacement strategy MAY also be used to evict packets before they | Send Buffer from overflowing, a FIFO or other replacement strategy | |||
expire. | MAY also be used to evict packets even before they expire. | |||
While a packet remains in the Send Buffer, the node SHOULD | While a packet remains in the Send Buffer, the node SHOULD | |||
occasionally initiate a new Route Discovery for the packet's | occasionally initiate a new Route Discovery for the packet's | |||
destination address. However, the node MUST limit the rate at which | destination address. However, the node MUST limit the rate at which | |||
such new Route Discoveries for the same address are initiated, since | such new Route Discoveries for the same address are initiated, since | |||
it is possible that the destination node is not currently reachable. | it is possible that the destination node is not currently reachable. | |||
In particular, due to the limited wireless transmission range and the | In particular, due to the limited wireless transmission range and the | |||
movement of the nodes in the network, the network may at times become | movement of the nodes in the network, the network may at times become | |||
partitioned, meaning that there is currently no sequence of nodes | partitioned, meaning that there is currently no sequence of nodes | |||
through which a packet could be forwarded to reach the destination. | through which a packet could be forwarded to reach the destination. | |||
Depending on the movement pattern and the density of nodes in the | Depending on the movement pattern and the density of nodes in the | |||
network, such network partitions may be rare or may be common. | network, such network partitions may be rare or may be common. | |||
If a new Route Discovery was initiated for each packet sent by a | If a new Route Discovery was initiated for each packet sent by a | |||
node in such a situation, a large number of unproductive Route | node in such a partitioned network, a large number of unproductive | |||
Request packets would be propagated throughout the subset of the | Route Request packets would be propagated throughout the subset of | |||
ad hoc network reachable from this node. In order to reduce the | the ad hoc network reachable from this node. In order to reduce the | |||
overhead from such Route Discoveries, a node MUST use an exponential | overhead from such Route Discoveries, a node MUST use an exponential | |||
back-off algorithm to limit the rate at which it initiates new Route | back-off algorithm to limit the rate at which it initiates new Route | |||
Discoveries for the same target. If the node attempts to send | Discoveries for the same target. If the node attempts to send | |||
additional data packets to this same node more frequently than this | additional data packets to this same destination node more frequently | |||
limit, the subsequent packets SHOULD be buffered in the Send Buffer | than this limit, the subsequent packets SHOULD be buffered in the | |||
until a Route Reply is received giving a route to this destination, | Send Buffer until a Route Reply is received giving a route to this | |||
but the node MUST NOT initiate a new Route Discovery until the | destination, but the node MUST NOT initiate a new Route Discovery | |||
minimum allowable interval between new Route Discoveries for this | until the minimum allowable interval between new Route Discoveries | |||
target has been reached. This limitation on the maximum rate of | for this target has been reached. This limitation on the maximum | |||
Route Discoveries for the same target is similar to the mechanism | rate of Route Discoveries for the same target is similar to the | |||
required by Internet nodes to limit the rate at which ARP Requests | mechanism required by Internet nodes to limit the rate at which ARP | |||
are sent for any single target IP address [3]. | Requests are sent for any single target IP address [3]. | |||
3.2. Basic DSR Route Maintenance | 3.2. Basic DSR Route Maintenance | |||
When originating or forwarding a packet using a source route, each | When originating or forwarding a packet using a source route, each | |||
node transmitting the packet is responsible for confirming that the | node transmitting the packet is responsible for confirming that the | |||
packet has been received by the next hop along the source route; the | packet has been received by the next hop along the source route; the | |||
packet SHOULD be retransmitted (up to a maximum number of attempts) | packet SHOULD be retransmitted (up to a maximum number of attempts) | |||
until this confirmation of receipt is received. For example, in the | until this confirmation of receipt is received. For example, in the | |||
situation shown below, node A has originated a packet for node E | situation shown below, node A has originated a packet for node E | |||
using a source route through intermediate nodes B, C, and D: | using a source route through intermediate nodes B, C, and D: | |||
+-----+ +-----+ +-----+ +-----+ +-----+ | +-----+ +-----+ +-----+ +-----+ +-----+ | |||
| A |---->| B |---->| C |-- | D | | E | | | A |---->| B |---->| C |--x | D | | E | | |||
+-----+ +-----+ +-----+ +-----+ +-----+ | +-----+ +-----+ +-----+ +-----+ +-----+ | |||
In this case, node A is responsible for receipt of the packet at B, | In this case, node A is responsible for receipt of the packet at B, | |||
node B is responsible for receipt at C, node C is responsible for | node B is responsible for receipt at C, node C is responsible for | |||
receipt at D, and node D is responsible for receipt finally at the | receipt at D, and node D is responsible for receipt finally at the | |||
destination E. | destination E. | |||
This confirmation of receipt in many cases may be provided at no cost | This confirmation of receipt in many cases may be provided at no cost | |||
to DSR, either as an existing standard part of the MAC protocol in | to DSR, either as an existing standard part of the MAC protocol in | |||
use (such as the link-level acknowledgement frame defined by IEEE | use (such as the link-level acknowledgement frame defined by IEEE | |||
802.11 [10]), or by a "passive acknowledgement" [15] (in which, for | 802.11 [10]), or by a "passive acknowledgement" [15] (in which, | |||
example, B confirms receipt at C by overhearing C transmit the packet | for example, B confirms receipt at C by overhearing C transmit the | |||
to forward it on to D). If neither of these confirmation mechanisms | packet when forwarding it on to D). If neither of these confirmation | |||
are available, the node transmitting the packet can explicitly | mechanisms are available, the node transmitting the packet can | |||
request a DSR-specific software acknowledgement be returned by the | explicitly request a DSR-specific software acknowledgement be | |||
next hop; this software acknowledgement will normally be transmitted | returned by the next hop; this software acknowledgement will normally | |||
directly to the sending node, but if the link between these two nodes | be transmitted directly to the sending node, but if the link between | |||
is uni-directional, this software acknowledgement may travel over a | these two nodes is uni-directional, this software acknowledgement may | |||
different, multi-hop path. | travel over a different, multi-hop path. | |||
If no receipt confirmation is received after the packet has been | If no receipt confirmation is received after the packet has been | |||
retransmitted the maximum number of attempts by some hop, this node | retransmitted the maximum number of attempts by some hop, this node | |||
SHOULD return a "Route Error" message to the original sender of the | SHOULD return a "Route Error" to the original sender of the packet, | |||
packet, identifying the link over which the packet could not be | identifying the link over which the packet could not be forwarded. | |||
forwarded. For example, in the example shown above, if C is unable | For example, in the example shown above, if C is unable to deliver | |||
to deliver the packet to the next hop D, then C returns a Route Error | the packet to the next hop D, then C returns a Route Error to A, | |||
to A, stating that the link from C to D is currently "broken". Node | stating that the link from C to D is currently "broken". Node A | |||
A then removes this broken link from its cache; any retransmission | then removes this broken link from its cache; any retransmission of | |||
of the original packet can be performed by upper layer protocols | the original packet can be performed by upper layer protocols such | |||
such as TCP, if necessary. For sending such a retransmission or | as TCP, if necessary. For sending such a retransmission or other | |||
other packets to this same destination E, if A has in its Route Cache | packets to this same destination E, if A has in its Route Cache | |||
another route to E (for example, from additional Route Replys from | another route to E (for example, from additional Route Replies from | |||
its earlier Route Discovery, or from having overheard sufficient | its earlier Route Discovery, or from having overheard sufficient | |||
routing information from other packets), it can send the packet | routing information from other packets), it can send the packet | |||
using the new route immediately. Otherwise, it SHOULD perform a new | using the new route immediately. Otherwise, it SHOULD perform a new | |||
Route Discovery for this target (subject to the exponential back-off | Route Discovery for this target (subject to the exponential back-off | |||
described in Section 3.1). | described in Section 3.1). | |||
3.3. Additional Route Discovery Features | 3.3. Additional Route Discovery Features | |||
3.3.1. Caching Overheard Routing Information | 3.3.1. Caching Overheard Routing Information | |||
skipping to change at page 9, line 4 | skipping to change at page 9, line 15 | |||
below, node A is using a source route to communicate with node E: | below, node A is using a source route to communicate with node E: | |||
+-----+ +-----+ +-----+ +-----+ +-----+ | +-----+ +-----+ +-----+ +-----+ +-----+ | |||
| A |---->| B |---->| C |---->| D |---->| E | | | A |---->| B |---->| C |---->| D |---->| E | | |||
+-----+ +-----+ +-----+ +-----+ +-----+ | +-----+ +-----+ +-----+ +-----+ +-----+ | |||
^ | ^ | |||
| | | | |||
+-----+ +-----+ +-----+ +-----+ +-----+ | +-----+ +-----+ +-----+ +-----+ +-----+ | |||
| V |---->| W |---->| X |---->| Y |---->| Z | | | V |---->| W |---->| X |---->| Y |---->| Z | | |||
+-----+ +-----+ +-----+ +-----+ +-----+ | +-----+ +-----+ +-----+ +-----+ +-----+ | |||
As node C forwards a data packet along the route from A to E, it | As node C forwards a data packet along the route from A to E, it | |||
can always add to its cache the presence of the "forward" direction | MAY add to its cache the presence of the "forward" direction links | |||
links that it learns from the headers of these packets, from itself | that it learns from the headers of these packets, from itself to D | |||
to D and from D to E. However, the "reverse" direction of the links | and from D to E. However, the "reverse" direction of the links | |||
identified in the packet headers, from itself back to B and from B to | identified in the packet headers, from itself back to B and from B | |||
A, may not work for it since these links might be uni-directional. | to A, may not work for it since these links might be uni-directional. | |||
If C knows that the links are in fact bi-directional, for example due | If C knows that the links are in fact bi-directional, for example due | |||
to the MAC protocol in use, it could cache them but otherwise SHOULD | to the MAC protocol in use, it could cache them but otherwise SHOULD | |||
not. | not. | |||
Likewise, node V in the example above is using a different source | Likewise, node V in the example above is using a different source | |||
route to communicate with node Z. If node C overhears node X | route to communicate with node Z. If node C overhears node X | |||
transmitting a data packet to forward it to Y (from V), node C SHOULD | transmitting a data packet to forward it to Y (from V), node C SHOULD | |||
consider whether the links involved can be known to be bi-directional | consider whether the links involved can be known to be bi-directional | |||
or not before caching them. If the link from X to C (over which this | or not before caching them. If the link from X to C (over which this | |||
data packet was received) can be known to be bi-directional, then C | data packet was received) can be known to be bi-directional, then C | |||
could cache the link from itself to X, the link from X to Y, and the | MAY cache the link from itself to X, the link from X to Y, and the | |||
link from Y to Z. If all links can be assumed to be bi-directional, | link from Y to Z. If all links can be assumed to be bi-directional, | |||
C could also cache the links from X to W and from W to V. Similar | C MAY also cache the links from X to W and from W to V. Similar | |||
considerations apply to the routing information that might be learned | considerations apply to the routing information that might be learned | |||
from forwarded or otherwise overheard Route Request or Route Reply | from forwarded or otherwise overheard Route Request or Route Reply | |||
packets. | packets. | |||
3.3.2. Replying to Route Requests using Cached Routes | 3.3.2. Replying to Route Requests using Cached Routes | |||
A node receiving a Route Request for which it is not the target, | 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 | searches its own Route Cache for a route to the target of the | |||
Request. If found, the node generally returns a Route Reply to | Request. If found, the node generally returns a Route Reply to the | |||
the initiator itself rather than forwarding the Route Request. In | initiator itself rather than forwarding the Route Request. In the | |||
the Route Reply, it sets the route record to list the sequence of | 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, | hops over which this copy of the Route Request was forwarded to it, | |||
concatenated with its own idea of the route from itself to the target | concatenated with the source route to this target obtained from its | |||
from its Route Cache. | own Route Cache. | |||
However, before transmitting a Route Reply packet that was generated | However, before transmitting a Route Reply packet that was generated | |||
using information from its Route Cache in this way, a node MUST | using information from its Route Cache in this way, a node MUST | |||
verify that the resulting route being returned in the Route Reply, | verify that the resulting route being returned in the Route Reply, | |||
after this concatenation, contains no duplicate nodes listed in the | after this concatenation, contains no duplicate nodes listed in the | |||
route record. For example, the figure below illustrates a case in | 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 | 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: | node F already has in its Route Cache a route from itself to E: | |||
+-----+ +-----+ +-----+ +-----+ | +-----+ +-----+ +-----+ +-----+ | |||
skipping to change at page 10, line 18 | skipping to change at page 10, line 22 | |||
\ / | \ / | |||
\ +-----+ / | \ +-----+ / | |||
>| C |- | >| C |- | |||
+-----+ | +-----+ | |||
| ^ | | ^ | |||
v | | v | | |||
Route Request +-----+ | Route Request +-----+ | |||
Route: A - B - C - F | F | Cache: C - D - E | Route: A - B - C - F | F | Cache: C - D - E | |||
+-----+ | +-----+ | |||
The concatenation of the accumulated route from the Route Request and | The concatenation of the accumulated route record from the Route | |||
the cached route from F's Route Cache would include a duplicate node | Request and the cached route from F's Route Cache would include a | |||
in passing from C to F and back to C. | 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 | Node F in this case could attempt to edit the route to eliminate the | |||
the duplication, resulting in a route from A to B to C to D and on | duplication, resulting in a route from A to B to C to D and on to E, | |||
to E, but in this case, node F would not be on the route that it | but in this case, node F would not be on the route that it returned | |||
returned in its own Route Reply. DSR Route Discovery prohibits | in its own Route Reply. DSR Route Discovery prohibits node F from | |||
node F from returning such a Route Reply from its cache for two | returning such a Route Reply from its cache for two reasons. First, | |||
reasons. First, this limitation increases the probability that the | this limitation increases the probability that the resulting route | |||
resulting route is valid, since F in this case should have received | is valid, since node F in this case should have received a Route | |||
a Route Error if the route had previously stopped working. Second, | Error if the route had previously stopped working. Second, this | |||
this limitation means that a Route Error traversing the route is very | limitation means that a Route Error traversing the route is very | |||
likely to pass through any node that sent the Route Reply for the | likely to pass through any node that sent the Route Reply for the | |||
route (including F), which helps to ensure that stale data is removed | route (including node F), which helps to ensure that stale data is | |||
from caches (such as at F) in a timely manner. Otherwise, the next | removed from caches (such as at F) in a timely manner. Otherwise, | |||
Route Discovery initiated by A might also be contaminated by a Route | the next Route Discovery initiated by A might also be contaminated by | |||
Reply from F containing the same stale route. If the Route Request | a Route Reply from F containing the same stale route. If the Route | |||
does not meet these restrictions, the node (node F in this example) | Request does not meet these restrictions, the node (node F in this | |||
discards the Route Request rather than replying to it or propagating | example) discards the Route Request rather than replying to it or | |||
it. | propagating it. | |||
3.3.3. Preventing Route Reply Storms | 3.3.3. Preventing Route Reply Storms | |||
The ability for nodes to reply to a Route Request based on | The ability for nodes to reply to a Route Request based on | |||
information in their Route Caches, as described in Section 3.3.2, | information in their Route Caches, as described in Section 3.3.2, | |||
could result in a possible Route Reply "storm" in some cases. In | could result in a possible Route Reply "storm" in some cases. In | |||
particular, if a node broadcasts a Route Request for a target node | particular, if a node broadcasts a Route Request for a target node | |||
for which the node's neighbors have a route in their Route Caches, | for which the node's neighbors have a route in their Route Caches, | |||
each neighbor may attempt to send a Route Reply, thereby wasting | each neighbor may attempt to send a Route Reply, thereby wasting | |||
bandwidth and possibly increasing the number of network collisions in | bandwidth and possibly increasing the number of network collisions in | |||
the area. | the area. | |||
For example, the figure below shows a situation in which nodes B, C, | 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 have | D, E, and F all receive A's Route Request for target G, and each has | |||
the indicated route cached for this target: | the indicated route cached for this target: | |||
+-----+ +-----+ | +-----+ +-----+ | |||
| D |< >| C | | | D |< >| C | | |||
+-----+ \ / +-----+ | +-----+ \ / +-----+ | |||
Cache: C - B - G \ / Cache: B - G | Cache: C - B - G \ / Cache: B - G | |||
\ +-----+ / | \ +-----+ / | |||
-| A |- | -| A |- | |||
+-----+\ +-----+ +-----+ | +-----+\ +-----+ +-----+ | |||
| | \--->| B | | G | | | | \--->| B | | G | | |||
/ \ +-----+ +-----+ | / \ +-----+ +-----+ | |||
/ \ Cache: G | / \ Cache: G | |||
v v | v v | |||
+-----+ +-----+ | +-----+ +-----+ | |||
| E | | F | | | E | | F | | |||
+-----+ +-----+ | +-----+ +-----+ | |||
Cache: F - B - G Cache: B - G | Cache: F - B - G Cache: B - G | |||
Normally, they would all attempt to reply from their own Route | Normally, these nodes would all attempt to reply from their own | |||
Caches, and would all send their Replys at about the same time since | Route Caches, and would all send their Route Replies at about the | |||
they all received the broadcast Route Request at about the same time. | same time, since they all received the broadcast Route Request at | |||
Such simultaneous replies from different nodes all receiving the | about the same time. Such simultaneous replies from different nodes | |||
Route Request may create packet collisions among some or all of these | all receiving the Route Request may create packet collisions among | |||
Replies and may cause local congestion in the wireless network. In | some or all of these Replies and may cause local congestion in the | |||
addition, it will often be the case that the different replies will | wireless network. In addition, it will often be the case that the | |||
indicate routes of different lengths, as shown in this example. | different replies will indicate routes of different lengths, as shown | |||
in this example. | ||||
If a node can put its network interface into promiscuous receive | If a node can put its network interface into promiscuous receive | |||
mode, it SHOULD delay sending its own Route Reply for a short period, | mode, it SHOULD delay sending its own Route Reply for a short period, | |||
while listening to see if the initiating node begins using a shorter | while listening to see if the initiating node begins using a shorter | |||
route first. That is, this node SHOULD delay sending its own Route | route first. That is, this node SHOULD delay sending its own Route | |||
Reply for a random period d = H * (h - 1 + r), where h is the length | Reply for a random period | |||
in number of network hops for the route to be returned in this node's | ||||
Route Reply, r is a random number between 0 and 1, and H is a small | d = H * (h - 1 + r) | |||
constant delay (at least twice the maximum wireless link propagation | ||||
delay) to be introduced per hop. This delay effectively randomizes | where h is the length in number of network hops for the route to be | |||
the time at which each node sends its Route Reply, with all nodes | returned in this node's Route Reply, r is a random floating point | |||
sending Route Replys giving routes of length less than h sending | number between 0 and 1, and H is a small constant delay (at least | |||
their Replys before this node, and all nodes sending Route Replys | twice the maximum wireless link propagation delay) to be introduced | |||
giving routes of length greater than h sending their Replys after | per hop. This delay effectively randomizes the time at which each | |||
this node. Within the delay period, this node promiscuously receives | node sends its Route Reply, with all nodes sending Route Replies | |||
all packets, looking for data packets from the initiator of this | giving routes of length less than h sending their Replies before this | |||
Route Discovery destined for the target of the Discovery. If such | node, and all nodes sending Route Replies giving routes of length | |||
a data packet received by this node during the delay period uses a | greater than h sending their Replies after this node. | |||
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 | Within the delay period, this node promiscuously receives all | |||
Route Reply giving an equally good or better route. In this case, | packets, looking for data packets from the initiator of this Route | |||
this node SHOULD cancel its delay timer and SHOULD NOT send its Route | Discovery destined for the target of the Discovery. If such a data | |||
Reply for this Route Discovery. | 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. | ||||
3.3.4. Route Request Hop Limits | 3.3.4. Route Request Hop Limits | |||
Each Route Request message contains a "hop limit" that may be used | Each Route Request message contains a "hop limit" that may be used | |||
to limit the number of intermediate nodes allowed to forward that | to limit the number of intermediate nodes allowed to forward that | |||
copy of the Route Request. This hop limit is implemented using the | 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 | Time-to-Live (TTL) field in the IP header of the packet carrying | |||
the Route Request. As the Request is forwarded, this limit is | the Route Request. As the Request is forwarded, this limit is | |||
decremented, and the Request packet is discarded if the limit reaches | decremented, and the Request packet is discarded if the limit reaches | |||
zero before finding the target. | zero before finding the target. | |||
This Route Request hop limit can be used to implement a variety of | This Route Request hop limit can be used to implement a variety of | |||
algorithms for controlling the spread of a Route Request during a | algorithms for controlling the spread of a Route Request during a | |||
Route Discovery attempt. For example, a node MAY send its first | Route Discovery attempt. For example, a node MAY send its first | |||
Route Request attempt for some target node using a hop limit of 1, | Route Request attempt for some target node using a hop limit of 1, | |||
such that any node receiving the initial transmission of the Route | such that any node receiving the initial transmission of the Route | |||
Request will not forward it to other nodes by rebroadcasting it. | Request will not forward the Request to other nodes by rebroadcasting | |||
This form of Route Request is called a "non-propagating" Route | it. This form of Route Request is called a "non-propagating" | |||
Request. It provides an inexpensive method for determining if the | Route Request. It provides an inexpensive method for determining | |||
target is currently a neighbor of the initiator or if a neighbor | if the target is currently a neighbor of the initiator or if a | |||
node has a route to the target cached (effectively using the | neighbor node has a route to the target cached (effectively using the | |||
neighbors' Route Caches as an extension of the initiator's own Route | neighbors' Route Caches as an extension of the initiator's own Route | |||
Cache). If no Route Reply is received after a short timeout, then a | Cache). If no Route Reply is received after a short timeout, then a | |||
"propagating" Route Request (i.e., with no hop limit) MAY be sent. | "propagating" Route Request (i.e., with no hop limit) MAY be sent. | |||
Another possible use of the hop limit in a Route Request is to | Another possible use of the hop limit in a Route Request is to | |||
implement an "expanding ring" search for the target [13]. For | implement an "expanding ring" search for the target [13]. For | |||
example, a node could send an initial non-propagating Route Request | example, a node could send an initial non-propagating Route Request | |||
as described above; if no Route Reply is received for it, the node | as described above; if no Route Reply is received for it, the node | |||
could initiate another Route Request with a hop limit of 2. For | could initiate another Route Request with a hop limit of 2. For | |||
each Route Request initiated, if no Route Reply is received for it, | each Route Request initiated, if no Route Reply is received for it, | |||
skipping to change at page 12, line 49 | skipping to change at page 13, line 9 | |||
Route Request to propagate over the entire network. However, this | Route Request to propagate over the entire network. However, this | |||
expanding ring search approach could have the effect of increasing | expanding ring search approach could have the effect of increasing | |||
the average latency of Route Discovery, since multiple Discovery | the average latency of Route Discovery, since multiple Discovery | |||
attempts and timeouts may be needed before discovering a route to the | attempts and timeouts may be needed before discovering a route to the | |||
target node. | target node. | |||
3.4. Additional Route Maintenance Features | 3.4. Additional Route Maintenance Features | |||
3.4.1. Packet Salvaging | 3.4.1. Packet Salvaging | |||
After sending a Route Error message as part of Route Maintenance as | After sending a Route Error message as part of Route Maintenance | |||
described in Section 3.2, a node may attempt to "salvage" the data | as described in Section 3.2, a node MAY attempt to "salvage" the | |||
packet that caused the Route Error rather than discarding it. To | data packet that caused the Route Error rather than discarding the | |||
attempt to salvage a packet, the node sending a Route Error searches | packet. To attempt to salvage a packet, the node sending a Route | |||
its own Route Cache for a route from itself to the destination of the | Error searches its own Route Cache for a route from itself to the | |||
packet causing the Error. If such a route is found, the node may | destination of the packet causing the Error. If such a route is | |||
salvage the packet after returning the Route Error by replacing the | found, the node MAY salvage the packet after returning the Route | |||
original source route on the packet with the route from its Route | Error by replacing the original source route on the packet with the | |||
Cache. The node then forwards the packet to the next node indicated | route from its Route Cache. The node then forwards the packet to the | |||
along this source route. For example, in the situation shown in the | next node indicated along this source route. For example, in the | |||
example of Section 3.2, if node C has another route cached to node E, | situation shown in the example of Section 3.2, if node C has another | |||
it can salvage the packet by applying this route to the packet rather | route cached to node E, it can salvage the packet by replacing the | |||
than discarding the packet. | original route in the packet with this new route from its own Route | |||
Cache, rather than discarding the packet. | ||||
When salvaging a packet in this way, a count is maintained in the | When salvaging a packet in this way, a count is maintained in the | |||
packet of the number of times that it has been salvaged, to prevent a | packet of the number of times that it has been salvaged, to prevent a | |||
single packet from being salvaged endlessly. Otherwise, it could be | single packet from being salvaged endlessly. Otherwise, it could be | |||
possible for the packet to enter a routing loop, as different nodes | possible for the packet to enter a routing loop, as different nodes | |||
repeatedly salvage the packet and replace the source route on the | repeatedly salvage the packet and replace the source route on the | |||
packet with routes to each other. | packet with routes to each other. | |||
3.4.2. Automatic Route Shortening | 3.4.2. Automatic Route Shortening | |||
Source routes in use may be automatically shortened if one or more | Source routes in use MAY be automatically shortened if one or more | |||
intermediate hops in the route become no longer necessary. This | intermediate hops in the route become no longer necessary. This | |||
mechanism of automatically shortening routes in use is somewhat | mechanism of automatically shortening routes in use is somewhat | |||
similar to the use of passive acknowledgements. In particular, if a | similar to the use of passive acknowledgements [15]. In particular, | |||
node is able to overhear a packet carrying a source route (e.g., by | if a node is able to overhear a packet carrying a source route (e.g., | |||
operating its network interface in promiscuous receive mode), then | by operating its network interface in promiscuous receive mode), then | |||
this node examines the unused portion of that source route. If this | this node examines the unused portion of that source route. If this | |||
node is not the intended next hop for the packet but is named in | node is not the intended next hop for the packet but is named in | |||
the later unused portion of the packet's source route, then it can | the later unused portion of the packet's source route, then it can | |||
infer that the intermediate nodes before itself in the source route | infer that the intermediate nodes before itself in the source route | |||
are no longer needed in the route. For example, the figure below | are no longer needed in the route. For example, the figure below | |||
illustrates an example in which node D has overheard a data packet | 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: | being transmitted from B to C, for later forwarding to D and to E: | |||
+-----+ +-----+ +-----+ +-----+ +-----+ | +-----+ +-----+ +-----+ +-----+ +-----+ | |||
| A |---->| B |---->| C | | D | | E | | | A |---->| B |---->| C | | D | | E | | |||
+-----+ +-----+ +-----+ +-----+ +-----+ | +-----+ +-----+ +-----+ +-----+ +-----+ | |||
\ ^ | \ ^ | |||
\ / | \ / | |||
--------------------- | --------------------- | |||
In this case, this node (node D) returns a "gratuitous" Route Reply | In this case, this node (node D) returns a "gratuitous" Route Reply | |||
message to the original sender of the packet (node A). The Route | to the original sender of the packet (node A). The Route Reply | |||
Reply gives the shorter route as the concatenation of the portion of | gives the shorter route as the concatenation of the portion of the | |||
the original source route up through the node that transmitted the | original source route up through the node that transmitted the | |||
overheard packet (node B), plus the suffix of the original source | overheard packet (node B), plus the suffix of the original source | |||
route beginning with the node returning the gratuitous Route Reply | route beginning with the node returning the gratuitous Route Reply | |||
(node D). In this example, the route returned in the gratuitous Route | (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 | Reply message sent from D to A gives the new route as the sequence of | |||
hops from A to B to D to E. | hops from A to B to D to E. | |||
3.4.3. Increased Spreading of Route Error Messages | 3.4.3. Increased Spreading of Route Error Messages | |||
When a source node receives a Route Error for a data packet that | When a source node receives a Route Error for a data packet that | |||
it originated, this source node propagates this Route Error to its | it originated, this source node propagates this Route Error to its | |||
neighbors by piggybacking it on its next Route Request. In this way, | neighbors by piggybacking it on its next Route Request. In this way, | |||
stale information in the caches of nodes around this source node will | stale information in the caches of nodes around this source node will | |||
not generate Route Replys that contain the same invalid link for | not generate Route Replies that contain the same invalid link for | |||
which this source node received the Route Error. | which this source node received the Route Error. | |||
For example, in the situation shown in the example of Section 3.2, | 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 | node A learns from the Route Error message from C, that the link | |||
C to D is currently broken. It thus removes this link from its own | from C to D is currently broken. It thus removes this link from | |||
Route Cache and initiates a new Route Discovery (if it doesn't have | its own Route Cache and initiates a new Route Discovery (if it has | |||
another route to E in its Route Cache). On the Route Request packet | no other route to E in its Route Cache). On the Route Request | |||
initiating this Route Discovery, node A piggybacks a copy of this | packet initiating this Route Discovery, node A piggybacks a copy | |||
Route Error message, ensuring that the Route Error message spreads | of this Route Error, ensuring that the Route Error spreads well to | |||
well to other nodes, and guaranteeing that any Route Reply that it | other nodes, and guaranteeing that any Route Reply that it receives | |||
receives (including those from other node's Route Caches) in response | (including those from other node's Route Caches) in response to this | |||
to this Route Request does not contain a route that assumes the | Route Request does not contain a route that assumes the existence of | |||
existence of this broken link. | this broken link. | |||
4. Conceptual Data Structures | 4. Conceptual Data Structures | |||
This document describes the DSR protocol in terms of a number of | This document describes the operation of the DSR protocol in terms | |||
conceptual data structures. This section describes each of these | of a number of conceptual data structures. This section describes | |||
data structures and provides an overview of its use in the protocol. | each of these data structures and provides an overview of its use | |||
In an implementation of the protocol, these data structures MAY be | in the protocol. In an implementation of the protocol, these data | |||
implemented in any manner consistent with the external behavior | structures MAY be implemented in any manner consistent with the | |||
described in this document. | external behavior described in this document. | |||
4.1. Route Cache | 4.1. Route Cache | |||
All routing information needed by a node participating in an ad hoc | All routing information needed by a node participating in an ad hoc | |||
network using DSR is stored in a Route Cache. Each node in the | network using DSR is stored in that node's Route Cache. Each node in | |||
network maintains its own Route Cache. A node adds information | the network maintains its own Route Cache. A node adds information | |||
to its Route Cache as it learns of new links between nodes in the | 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 | ad hoc network; for example, a node may learn of new links when it | |||
receives a packet carrying either a Route Reply or a DSR Routing | receives a packet carrying either a Route Reply or a DSR Routing | |||
header. Likewise, a node removes information from its Route Cache as | header. Likewise, a node removes information from its Route Cache as | |||
it learns that existing links in the ad hoc network have broken; for | 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 | example, a node may learn of a broken link when it receives a packet | |||
carrying a Route Error or through the link-layer retransmission | carrying a Route Error or through the link-layer retransmission | |||
mechanism reporting a failure in forwarding a packet to its next-hop | mechanism reporting a failure in forwarding a packet to its next-hop | |||
destination. | destination. | |||
skipping to change at page 15, line 40 | skipping to change at page 15, line 40 | |||
external to this DSR network. Such external networks may, for | external to this DSR network. Such external networks may, for | |||
example, be the Internet, or may be other ad hoc networks routed | example, be the Internet, or may be other ad hoc networks routed | |||
with a routing protocol other than DSR. Such external networks may | with a routing protocol other than DSR. Such external networks may | |||
also be other DSR networks that are treated as external networks | also be other DSR networks that are treated as external networks | |||
in order to improve scalability. The complete handling of such | in order to improve scalability. The complete handling of such | |||
external networks is beyond the scope of this document. However, | external networks is beyond the scope of this document. However, | |||
this document specifies a minimal set of requirements and features | this document specifies a minimal set of requirements and features | |||
necessary to allow nodes only implementing this specification to | necessary to allow nodes only implementing this specification to | |||
interoperate correctly with nodes implementing interfaces to such | interoperate correctly with nodes implementing interfaces to such | |||
external networks. This minimal set of requirements and features | external networks. This minimal set of requirements and features | |||
involve the First Hop External (F) and Last Hop External (L) bits in | involve the First Hop External (F) and Last Hop External (L) | |||
a DSR Routing Header and a DSR Route Reply option, and the addition | bits in a Source Route option (Section 5.7) and a Route Reply | |||
of an External flag bit tagging each node in the Route Cache, copied | option (Section 5.3) in a packet's DSR header (Section 5). These | |||
from the First Hop External (F) and Last Hop External (L) bits in the | requirements also include the addition of an External flag bit | |||
Routing header or Route Reply from which the link to this node was | tagging each node in the Route Cache, copied from the First Hop | |||
External (F) and Last Hop External (L) bits in the Source Route | ||||
option or Route Reply option from which the link to this node was | ||||
learned. | learned. | |||
The Route Cache SHOULD support storing more than one route to each | The Route Cache SHOULD support storing more than one route to each | |||
destination. In searching the Route Cache for a route to some | destination. In searching the Route Cache for a route to some | |||
destination node, the Route Cache is indexed by destination node | destination node, the Route Cache is indexed by destination node | |||
address. | address. The following properties describe this searching function | |||
on a Route Cache: | ||||
- Each implementation of DSR at any node MAY choose any appropriate | - Each implementation of DSR at any node MAY choose any appropriate | |||
strategy and algorithm for searching its Route Cache and | strategy and algorithm for searching its Route Cache and | |||
selecting a "best" route to the destination from among those | selecting a "best" route to the destination from among those | |||
found. For example, a node MAY choose to select the shortest | found. For example, a node MAY choose to select the shortest | |||
route to the destination (the shortest sequence of hops), or it | route to the destination (the shortest sequence of hops), or it | |||
MAY use an alternate metric to select the route from the Cache. | MAY use an alternate metric to select the route from the Cache. | |||
- However, if there are multiple cached routes to a destination, | - However, if there are multiple cached routes to a destination, | |||
the selection of routes when searching the Route Cache SHOULD | the selection of routes when searching the Route Cache SHOULD | |||
prefer routes that do not have the External flag set on any | prefer routes that do not have the External flag set on any node. | |||
node. This will prefer routes that lead directly to the target | This preference will select routes that lead directly to the | |||
node instead of routes that attempt to reach the target via any | target node over routes that attempt to reach the target via any | |||
external networks connected to the DSR ad hoc network. | external networks connected to the DSR ad hoc network. | |||
- In addition, any route selected when searching the Route Cache | - In addition, any route selected when searching the Route Cache | |||
MUST NOT have the External bit set for any nodes other than | MUST NOT have the External bit set for any nodes other than | |||
possibly the first node, the last node, or both; the External bit | possibly the first node, the last node, or both; the External bit | |||
MUST NOT be set for any intermediate hops in the route selected. | MUST NOT be set for any intermediate hops in the route selected. | |||
An implementation of a Route Cache MAY provide a fixed capacity for | An implementation of a Route Cache MAY provide a fixed capacity | |||
the cache, or the cache size MAY be variable. | 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 | - Each implementation of DSR at each node MAY choose any | |||
appropriate policy for managing the entries in its Route Cache, | appropriate policy for managing the entries in its Route Cache, | |||
such as when limited cache capacity requires a choice of which | such as when limited cache capacity requires a choice of which | |||
entries to retain in the cache. For example, a node MAY chose a | entries to retain in the Cache. For example, a node MAY chose a | |||
"least recently used" (LRU) cache replacement policy, in which | "least recently used" (LRU) cache replacement policy, in which | |||
the entry last used longest ago is discarded from the cache if a | the entry last used longest ago is discarded from the cache if a | |||
decision needs to be made to allow space in the cache for some | decision needs to be made to allow space in the cache for some | |||
new entry being added. | new entry being added. | |||
- However, the Route Cache replacement policy SHOULD allow routes | - However, the Route Cache replacement policy SHOULD allow routes | |||
to be categorized based upon "preference", where routes with a | to be categorized based upon "preference", where routes with a | |||
higher preferences are less likely to be removed from the cache. | higher preferences are less likely to be removed from the cache. | |||
For example, a node could prefer routes for which it initiated | For example, a node could prefer routes for which it initiated | |||
a Route Discovery over routes that it learned as the result of | a Route Discovery over routes that it learned as the result of | |||
promiscuous snooping on other packets. In particular, a node | promiscuous snooping on other packets. In particular, a node | |||
SHOULD prefer routes that it is presently using over those that | SHOULD prefer routes that it is presently using over those that | |||
it is not. | it is not. | |||
Any suitable data structure organization, consistent with this | Any suitable data structure organization, consistent with this | |||
specification, MAY be used to implement the Route Cache in any node. | specification, MAY be used to implement the Route Cache in any node. | |||
For example, the following two types of organization are possible: | For example, the following two types of organization are possible: | |||
- In DSR, the route returned in each Route Reply that is received | - In DSR, the route returned in each Route Reply that is received | |||
by the initiator of a Route Discovery (or that is learned from | by the initiator of a Route Discovery (or that is learned from | |||
the header of overhead packets, as described in Section 6.1.3) | the header of overhead packets, as described in Section 6.1.4) | |||
represents a complete path (a sequence of links) leading to the | represents a complete path (a sequence of links) leading to the | |||
destination node. By caching each of these paths separately, | destination node. By caching each of these paths separately, | |||
a "path cache" organization for the Route Cache can be formed. | a "path cache" organization for the Route Cache can be formed. | |||
A path cache is very simple to implement and easily guarantees | A path cache is very simple to implement and easily guarantees | |||
that all routes are loop-free, since each individual route from | 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. | 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 | 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 | node can simply search its Route Cache for any path (or prefix of | |||
a path) that leads to the intended destination node. | a path) that leads to the intended destination node. | |||
This type of organization for the Route Cache in DSR has | This type of organization for the Route Cache in DSR has | |||
been extensively studied through simulation [5, 11, 19] and | been extensively studied through simulation [5, 11, 18] and | |||
through implementation of DSR in a mobile outdoor testbed under | through implementation of DSR in a mobile outdoor testbed under | |||
significant workload [20, 21]. | significant workload [19, 20, 20]. | |||
- Alternatively, a "link cache" organization could be used for the | - Alternatively, a "link cache" organization could be used for the | |||
Route Cache, in which each individual link in the routes returned | Route Cache, in which each individual link (hop) in the routes | |||
in Route Reply packets (or otherwise learned from the header of | returned in Route Reply packets (or otherwise learned from the | |||
overhead packets) is added to a unified graph data structure of | header of overhead packets) is added to a unified graph data | |||
this node's current view of the network topology. To search | structure of this node's current view of the network topology. | |||
for a route in link cache, the sending node must use a more | To search for a route in link cache, the sending node must use | |||
complex graph search algorithm, such as the well-known Dijkstra's | a more complex graph search algorithm, such as the well-known | |||
shortest-path algorithm, to find the current best path through | Dijkstra's shortest-path algorithm, to find the current best path | |||
the graph to the destination node. Such an algorithm is more | through the graph to the destination node. Such an algorithm is | |||
difficult to implement and may require significantly more CPU | more difficult to implement and may require significantly more | |||
time to execute. | CPU time to execute. | |||
However, a link cache organization is more powerful than a | However, a link cache organization is more powerful than a | |||
path cache organization, in its ability to effectively utilize | path cache organization, in its ability to effectively utilize | |||
all of the potential information that a node might learn about | all of the potential information that a node might learn about | |||
the state of the network: links learned from different Route | the state of the network: links learned from different Route | |||
Discoveries or from the header of any overheard packets can be | Discoveries or from the header of any overheard packets can be | |||
merged together to form new routes in the network, but this | merged together to form new routes in the network, but this | |||
is not possible in a path cache due to the separation of each | is not possible in a path cache due to the separation of each | |||
individual path in the cache. | individual path in the cache. | |||
skipping to change at page 17, line 47 | skipping to change at page 17, line 51 | |||
through detailed simulation [9]. | through detailed simulation [9]. | |||
The choice of data structure organization to use for the Route Cache | 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 | in any DSR implementation is a local matter for each node and affects | |||
only performance; any reasonable choice of organization for the Route | only performance; any reasonable choice of organization for the Route | |||
Cache does not affect either correctness or interoperability. | Cache does not affect either correctness or interoperability. | |||
4.2. Route Request Table | 4.2. Route Request Table | |||
The Route Request Table records information about Route Requests that | The Route Request Table records information about Route Requests that | |||
were recently originated or forwarded by this node. The table is | have been recently originated or forwarded by this node. The table | |||
indexed by IP address. | is indexed by IP address. | |||
The Route Request Table on a node records the following information | The Route Request Table on a node records the following information | |||
about nodes to which this node has initiated a Route Request: | about nodes to which this node has initiated a Route Request: | |||
- The time that this node last originated a Route Discovery for | - The time that this node last originated a Route Request for that | |||
that target node. | target node. | |||
- The number of consecutive Route Requests initiated for this | - The number of consecutive Route Requests initiated for this | |||
target since receiving a valid Route Reply giving a route to that | target since receiving a valid Route Reply giving a route to that | |||
target node. | target node. | |||
- The remaining amount of time before which this node MAY next | - The remaining amount of time before which this node MAY next | |||
attempt at a Route Discovery for that target node. | attempt at a Route Discovery for that target node. | |||
- The Time-to-Live (TTL) field used in the IP header of last Route | - The Time-to-Live (TTL) field used in the IP header of last Route | |||
Request initiated by this node for that target node. | Request initiated by this node for that target node. | |||
skipping to change at page 18, line 32 | skipping to change at page 18, line 35 | |||
- A FIFO cache of size REQUEST_TABLE_IDS entries containing the | - A FIFO cache of size REQUEST_TABLE_IDS entries containing the | |||
Identification value and target address from the most recent | Identification value and target address from the most recent | |||
Route Requests received by this node from that initiator node. | Route Requests received by this node from that initiator node. | |||
Nodes SHOULD use an LRU policy to manage the entries in their Route | Nodes SHOULD use an LRU policy to manage the entries in their Route | |||
Request Table. | Request Table. | |||
The number of Identification values to retain in each Route Request | The number of Identification values to retain in each Route Request | |||
Table entry, REQUEST_TABLE_IDS, MUST NOT be unlimited, since, | Table entry, REQUEST_TABLE_IDS, MUST NOT be unlimited, since, | |||
in the worst case, when a node crashes and reboots, the first | in the worst case, when a node crashes and reboots, the first | |||
REQUEST_TABLE_IDS Route Requests it initiates could appear to be | REQUEST_TABLE_IDS Route Discoveries it initiates after rebooting | |||
duplicates to the other nodes in the network. | 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, 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 SHOULD base its initial Identification value after | ||||
rebooting on a random number. | ||||
4.3. Send Buffer | 4.3. Send Buffer | |||
The Send Buffer of some node is a queue of packets that cannot be | The Send Buffer of a node implementing DSR is a queue of packets that | |||
transmitted by that node because it does not yet have a source | cannot be sent by that node because it does not yet have a source | |||
route to each respective packet's destination. Each packet in the | route to each such packet's destination. Each packet in the Send | |||
Send Buffer is stamped with the time that it is placed into the | Buffer is logically associated with the time that it was placed into | |||
Buffer, and SHOULD be removed from the Send Buffer and discarded | the Buffer, and SHOULD be removed from the Send Buffer and silently | |||
SEND_BUFFER_TIMEOUT seconds after initially being placed in the | discarded SEND_BUFFER_TIMEOUT seconds after initially being placed in | |||
Buffer. If necessary, a FIFO strategy SHOULD be used to evict | the Buffer. If necessary, a FIFO strategy SHOULD be used to evict | |||
packets before they timeout to prevent the buffer from overflowing. | packets before they timeout to prevent the buffer from overflowing. | |||
Subject to the rate limiting defined in Section 6.2, a Route | Subject to the rate limiting defined in Section 6.2, a Route | |||
Discovery SHOULD be initiated as often as possible for the | Discovery SHOULD be initiated as often as possible for the | |||
destination address of any packets residing in the Send Buffer. | destination address of any packets residing in the Send Buffer. | |||
4.4. Retransmission Buffer | 4.4. Retransmission Buffer | |||
The Retransmission Buffer of a node is a queue of packets sent by | The Retransmission Buffer of a node implementing DSR is a queue | |||
this node that are awaiting the receipt of an acknowledgment from the | of packets sent by this node that are awaiting the receipt of an | |||
next hop in the source route (Section 5.3). | acknowledgment from the next hop in the source route (Section 5.7). | |||
For each packet in the Retransmission Buffer, a node maintains (1) a | For each packet in the Retransmission Buffer, a node maintains (1) a | |||
count of the number of retransmissions and (2) the time of the last | count of the number of retransmissions and (2) the time of the last | |||
retransmission. | retransmission. | |||
Packets are removed from the buffer when an acknowledgment | Packets are removed from the Retransmission Buffer when an | |||
is received, or when the number of retransmissions exceeds | acknowledgment is received or when the number of retransmissions | |||
DSR_MAXRXTSHIFT. In the later case, the removal of the packet from | exceeds DSR_MAXRXTSHIFT. In the later case, the removal of the | |||
the Retransmission Buffer SHOULD result in a Route Error being | packet from the Retransmission Buffer SHOULD result in a Route Error | |||
returned to the original source of the packet (Section 6.3). | being returned to the original source of the packet (Section 6.3). | |||
5. Packet Formats | 5. DSR Header Format | |||
Dynamic Source Routing makes use of four options carrying control | The Dynamic Source Routing protocol makes use of a special header | |||
information that can be piggybacked in any existing IP packet. The | carrying control information that can be included in any existing IP | |||
mechanism used to represent these options in a packet is based on | packet. This DSR header in a packet contains a small fixed-sized, | |||
the design of the Hop-by-Hop and Destination Options mechanisms in | 4-octet portion, followed by a sequence of zero or more DSR options | |||
IPv6 [7]. The ability to generate and process such options must | carrying optional information. The end of the sequence of DSR | |||
be added to an IPv4 protocol stack. Specifically, the Protocol | options in the DSR header is implied by total length of the DSR | |||
field in the IP header is used to indicate that a Hop-by-Hop Options | header. | |||
extension header or Destination Options extension header follows the | ||||
IP header, and the Next Header field in the extension header is used | ||||
to indicate the type of protocol header (such as a transport layer | ||||
header) following the extension header. | ||||
In addition, DSR makes use of one additional header type, to carry | The DSR header is inserted in the packet following the packet's IP | |||
the source route for a packet. This DSR Routing header is based on | header, before any following header such as a traditional (e.g., TCP | |||
the design of the Routing header defined for IPv6 [7]. DSR defines | or UDP) transport layer header. Specifically, the Protocol field | |||
a new value for the Routing Type field to distinguish a DSR Routing | in the IP header is used to indicate that a DSR header follows the | |||
header from other types of Routing headers. | IP header, and the Next Header field in the DSR header is used to | |||
indicate the type of protocol header (such as a transport layer | ||||
header) following the DSR header. | ||||
For IPv6, all extension headers are a multiple of 8 bytes in length. | The total length of the DSR header (and thus the total, combined | |||
However, for use in IPv4 packets, all extension headers only MUST be | length of all DSR options present) MUST be a multiple of 4 octets. | |||
a multiple of 4 bytes long. This requirement preserves the alignment | This requirement preserves the alignment of any following headers in | |||
of any following extension headers and of any additional header | the packet. | |||
(e.g., a TCP header [26]) following the last extension header. | ||||
5.1. Destination Options Header | 5.1. Fixed Portion of DSR Header | |||
The Destination Options extension header is used to carry optional | The fixed portion of the DSR header is used to carry information that | |||
information that needs to be examined only by a packet's destination | must be present in any DSR header. This fixed portion of the DSR | |||
node(s). The Destination Options extension header is identified by | header has the following format: | |||
a Next Header (or Protocol) value of 60 in the immediately preceding | ||||
header [7], and has the following format: | ||||
0 1 2 3 | 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 | 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 | Hdr Ext Len | | | | Next Header | Reserved | Payload Length | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | ||||
. . | . . | |||
. Options . | . Options . | |||
. . | . . | |||
| | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
Next Header | Next Header | |||
8-bit selector. Identifies the type of header immediately | 8-bit selector. Identifies the type of header immediately | |||
following the Destination Options header. Uses the same values | following the DSR header. Uses the same values as the IPv4 | |||
as the IPv4 Protocol field [27]. | Protocol field [26]. | |||
Hdr Ext Len | Reserved | |||
8-bit unsigned integer. Length of the Destination Options | Sent as 0; ignored on reception. | |||
header in 4-octet units, not including the first 8 octets. | ||||
Payload Length | ||||
The length of the DSR 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 header. | ||||
Options | Options | |||
Variable-length field, of length such that the complete | Variable-length field; the length of the Options field is | |||
Destination Options header is an integer multiple of 4 octets | specified by the Payload Length field in this DSR header. | |||
long. Contains one or more TLV-encoded options. | 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 5.8). | ||||
The following destination option type is used by the DSR protocol: | The placement of DSR options following the fixed portion of the DSR | |||
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 header to be aligned. A node inserting a DSR header into | ||||
a packet MUST set the Don't Fragment (DF) bit in the packet's IP | ||||
header. | ||||
- DSR Route Request option (Section 5.1.1) | The following types of DSR options are defined in this document for | |||
use within a DSR header: | ||||
5.1.1. DSR Route Request Option | - Route Request option (Section 5.2) | |||
The DSR Route Request destination option is encoded in | - Route Reply option (Section 5.3) | |||
type-length-value (TLV) format as follows: | ||||
- Route Error option (Section 5.4) | ||||
- Acknowledgement Request option (Section 5.5) | ||||
- Acknowledgement option (Section 5.6) | ||||
- Source Route option (Section 5.7) | ||||
- Pad1 option (Section 5.8) | ||||
- PadN option (Section 5.9) | ||||
5.2. Route Request Option | ||||
The Route Request DSR option is encoded as follows: | ||||
0 1 2 3 | 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 | 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 | Option Length | Identification | | | Option Type | Opt Data Len | Identification | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Target Address | | | Target Address | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Address[1] | | | Address[1] | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Address[2] | | | Address[2] | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| ... | | | ... | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Address[n] | | | Address[n] | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
IP fields: | IP fields: | |||
Source Address | Source Address | |||
MUST be set to the address of the node originating this packet. | MUST be set to the address of the node originating this packet. | |||
Intermediate nodes that repropagate the Route Request MUST not | Intermediate nodes that retransmit the packet to propagate the | |||
change this field. | Route Request MUST NOT change this field. | |||
Destination Address | Destination Address | |||
MUST be set to the limited broadcast address (255.255.255.255). | MUST be set to the IP limited broadcast address | |||
(255.255.255.255). | ||||
Hop Limit (TTL) | Hop Limit (TTL) | |||
Can be varied from 1 to 255, for example to implement | MAY be varied from 1 to 255, for example to implement | |||
non-propagating Route Requests and Route Request expanding-ring | non-propagating Route Requests and Route Request expanding-ring | |||
searches (Section 3.3.4). | searches (Section 3.3.4). | |||
Route Request fields: | Route Request fields: | |||
Option Type | Option Type | |||
???. The top three bits of this Option Type value are equal to | 2 | |||
011, meaning that a node that does not understand this option | ||||
MUST discard the packet, and that the Option Data may change | ||||
en-route [7]. | ||||
Option Length | Opt Data Len | |||
8-bit unsigned integer. Length of the option, in octets, | 8-bit unsigned integer. Length of the option, in octets, | |||
excluding the Option Type and Option Length fields. | excluding the Option Type and Opt Data Len fields. | |||
Identification | Identification | |||
A unique value generated by the initiator (original sender) of | A unique value generated by the initiator (original sender) of | |||
the Route Request. Nodes initiating a Route Request generate | the Route Request. Nodes initiating a Route Request generate | |||
a new Identification value for each Route Request, for example | a new Identification value for each Route Request, for example | |||
based on a sequence number counter of all Route Requests | based on a sequence number counter of all Route Requests | |||
initiated by the node. | initiated by the node. | |||
This value allows a receiving node to determine whether it | This value allows a receiving node to determine whether it | |||
has recently seen a copy of this Route Request: if this | has recently seen a copy of this Route Request: if this | |||
Identification value is found by this receiving node in its | Identification value is found by this receiving node in its | |||
Route Request Table (in the cache of Identification values | Route Request Table (in the cache of Identification values | |||
in the entry there for this initiating node), this receiving | in the entry there for this initiating node), this receiving | |||
node MUST discard the Route Request. When propagating a Route | node MUST discard the Route Request. When propagating a Route | |||
Request, this field MUST be copied from the received copy of | Request, this field MUST be copied from the received copy of | |||
the Route Request being forwarded. | the Route Request being propagated. | |||
Target Address | Target Address | |||
The address of the node that is the target of the Route | The address of the node that is the target of the Route | |||
Request. | Request. | |||
Address[1..n] | Address[1..n] | |||
Address[i] is the address of the i-th hop recorded in the | Address[i] is the address of the i-th hop recorded in the Route | |||
Route Request option. The number of addresses present in this | Request option. The address given in the Source Address field | |||
field is indicated by the Option Length field in the option | in the IP header is the address of the initiator of the Route | |||
(n = (Option Length - 6) / 4). Each node repropagating the | Discovery and MUST NOT be listed in the Address[i] fields; the | |||
Route Request adds its own address to this list, increasing the | address given in Address[1] is thus the address of the first | |||
Option Length value by 4. | 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 - 2) / 4). Each node propagating | ||||
the Route Request adds its own address to this list, increasing | ||||
the Opt Data Len value by 4 octets. | ||||
The DSR Route Request destination option MUST NOT appear more than | The Route Request option MUST NOT appear more than once within a DSR | |||
once within any single Destination Options extension header. | header. | |||
5.2. Hop-by-Hop Options Header | 5.3. Route Reply Option | |||
The Hop-by-Hop Options extension header is used to carry optional | The Route Reply DSR option is encoded as follows: | |||
information that must be examined by every node along a packet's | ||||
delivery path. The Hop-by-Hop Options extension header is identified | ||||
by a Protocol value of 0 in the IP header [7], and has the following | ||||
format: | ||||
0 1 2 3 | 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 | 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 | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Next Header | Hdr Ext Len | | | | Opt Data Len |L| Reserved | Identification | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | ||||
| | | ||||
. . | ||||
. Options . | ||||
. . | ||||
| | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
Next Header | ||||
8-bit selector. Identifies the type of header immediately | ||||
following the Hop-by-Hop Options header. Uses the same values | ||||
as the IPv4 Protocol field [27]. | ||||
Hdr Ext Len | ||||
8-bit unsigned integer. Length of the Hop-by-Hop Options | ||||
header in 4-octet units, not including the first 8 octets. | ||||
Options | ||||
Variable-length field, of length such that the complete | ||||
Hop-by-Hop Options header is an integer multiple of 4 octets | ||||
long. Contains one or more TLV-encoded options. | ||||
If present in an IP packet, the Hop-by-Hop Options extension header | ||||
MUST appear in the packet immediately following the IP header. | ||||
The following hop-by-hop option types are used by the DSR protocol: | ||||
- DSR Route Reply option (Section 5.2.1) | ||||
- DSR Route Error option (Section 5.2.2) | ||||
- DSR Acknowledgment option (Section 5.2.3) | ||||
5.2.1. DSR Route Reply Option | ||||
The DSR Route Reply hop-by-hop option is encoded in type-length-value | ||||
(TLV) format 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 | Option Length |L| Reserved | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Address[1] | | | Address[1] | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Address[2] | | | Address[2] | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| ... | | | ... | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Address[n] | | | 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.2), 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 | Option Type | |||
???. The top three bits of this Option Type value are equal to | 3 | |||
000, meaning that a node that does not understand this option | ||||
SHOULD ignore this option and continue processing the packet, | ||||
and that the Option Data does not change en-route [7]. | ||||
Option Length | Opt Data Len | |||
8-bit unsigned integer. Length of the option, in octets, | 8-bit unsigned integer. Length of the option, in octets, | |||
excluding the Option Type and Option Length fields. | excluding the Option Type and Opt Data Len fields. | |||
Last Hop External (L) | Last Hop External (L) | |||
Set to indicate that the last node indicated by the Route Reply | Set to indicate that the last node indicated by the Route | |||
is actually in a network external to the DSR network; the exact | Reply (Address[n]) is actually in a network external to the | |||
sequence of hops leading to it outside the DSR network are not | DSR network; the exact sequence of hops leading to it outside | |||
represented in the Route Reply. Nodes caching this hop in | the DSR network is not represented in the Route Reply. Nodes | |||
their Route Cache MUST flag the cached hop with the External | caching this hop in their Route Cache MUST flag the cached hop | |||
flag. Such hops MUST NOT be returned in a cached Route Reply | with the External flag. Such hops MUST NOT be returned in a | |||
generated from this Route Cache entry, and selection of routes | cached Route Reply generated from this Route Cache entry, and | |||
from the Route Cache to route a packet being sent SHOULD prefer | selection of routes from the Route Cache to route a packet | |||
routes that contain no nodes flagged as External. | being sent SHOULD prefer routes that contain no hops flagged as | |||
External. | ||||
Reserved | Reserved | |||
Sent as 0; ignored on reception. | Sent as 0; ignored on reception. | |||
Identification | ||||
Copied from the Identification field of the Route Request for | ||||
which this Reply is sent in response. Sent as 0 if the Route | ||||
Reply is not sent in response to a Route Request (a gratuitous | ||||
Route Reply). | ||||
Address[1..n] | Address[1..n] | |||
The source route being returned by the Route Reply, indicating | The source route being returned by the Route Reply. The route | |||
a route from the node with address Address[1] to the node with | indicates a sequence of hops, originating at the source node | |||
address Address[n]. The number of addresses present in this | specified in the Destination Address field of the IP header | |||
field is indicated by the Option Length field in the option | of the packet carrying the Route Reply, through each of the | |||
(n = (Option Length - 1) / 4). | Address[i] nodes in the order listed in the Route Reply, | |||
ending with the destination 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 - 3) / 4). | ||||
A DSR Route Reply destination option MAY appear one or more times | A Route Reply option MAY appear one or more times within a DSR | |||
within a single Hop-by-Hop Options extension header. | header. | |||
5.2.2. DSR Route Error Option | 5.4. Route Error Option | |||
The DSR Route Error hop-by-hop option is encoded in type-length-value | The Route Error DSR option is encoded as follows: | |||
(TLV) format as follows: | ||||
0 1 2 3 | 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 | 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 | Option Length | Error Type |Reservd|Salvage| | | Option Type | Opt Data Len | Error Type |Reservd|Salvage| | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Error Source Address | | | Error Source Address | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Error Destination Address | | | Error Destination Address | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Unreachable Node Address | | . . | |||
. Type-Specific Information . | ||||
. . | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
Option Type | Option Type | |||
???. The top three bits of this Option Type value are equal to | 4 | |||
000, meaning that a node that does not understand this option | ||||
SHOULD ignore this option and continue processing the packet, | ||||
and that the Option Data does not change en-route [7]. | ||||
Option Length | Opt Data Len | |||
8-bit unsigned integer. Length of the option, in octets, | 8-bit unsigned integer. Length of the option, in octets, | |||
excluding the Option Type and Option Length fields. | excluding the Option Type and Opt Data Len fields. | |||
For the current definition of the DSR Route Error option, this | For the current definition of the Route Error option, | |||
field MUST be set to 13. Extensions to the DSR Route Error | this field MUST be set to 10, plus the size of any | |||
option format may be included after the fixed portion of the | Type-Specific Information present in the Route Error. Further | |||
DSR Route Error option specified above. The presence of such | extensions to the Route Error option format may also be | |||
extensions will be indicated by the Option Length field. When | included after the Type-Specific Information portion of the | |||
the Option Length is greater than 13 octets, the remaining | Route Error option specified above. The presence of such | |||
octets are interpreted as extensions. Currently, no extensions | extensions will be indicated by the Opt Data Len field. | |||
have been defined. | 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 | Error Type | |||
The type of error encountered. Currently, the following type | The type of error encountered. Currently, the following type | |||
value is defined: | value is defined: | |||
NODE_UNREACHABLE 1 | 1 = NODE_UNREACHABLE | |||
Other values of the Error Type field are reserved for future | Other values of the Error Type field are reserved for future | |||
use. | use. | |||
Reservd | Reservd | |||
Reserved. Sent as 0; ignored on reception. | Reserved. Sent as 0; ignored on reception. | |||
Salvage | Salvage | |||
A 4-bit unsigned integer. Copied from the Salvage field in the | A 4-bit unsigned integer. Copied from the Salvage field in the | |||
DSR Routing header of the packet triggering the Route Error, | Source Route option of the packet triggering the Route Error, | |||
incremented by the node returning the Route Error. | incremented by the node returning the Route Error. | |||
Error Source Address | Error Source Address | |||
The address of the node originating the Route Error (e.g., the | The address of the node originating the Route Error (e.g., the | |||
node that attempted to forward a packet and discovered the link | node that attempted to forward a packet and discovered the link | |||
failure). | failure). | |||
Error Destination Address | Error Destination Address | |||
The address of the node to which the Route Error must | The address of the node to which the Route Error must be | |||
be delivered (e.g., the node that generated the routing | delivered For example, when the Error Type field is set to | |||
information claiming that the hop Error Source Address to | NODE_UNREACHABLE, this field will be set to the address of the | |||
Unreachable Node Address was a valid hop). | 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. | ||||
Currently, the Type-Specific Information field is defined only for | ||||
Route Error messages of type NODE_UNREACHABLE. In this case, 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 | Unreachable Node Address | |||
The address of the node that was found to be unreachable | The address of the node that was found to be unreachable | |||
(the next hop neighbor to which the node with address | (the next hop neighbor to which the node with address | |||
Error Source Address was attempting to transmit the packet). | Error Source Address was attempting to transmit the packet). | |||
A DSR Route Error destination option MAY appear one or more times | A Route Error option MAY appear one or more times within a DSR | |||
within a single Hop-by-Hop Options extension header. | header. | |||
5.2.3. DSR Acknowledgment Option | 5.5. Acknowledgment Request Option | |||
The DSR Acknowledgment hop-by-hop option is encoded in | The Acknowledgment Request DSR option is encoded as follows: | |||
type-length-value (TLV) format as follows: | ||||
0 1 2 3 | 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 | 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 | Option Length | Identification | | | Option Type | Opt Data Len | Identification | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| ACK Source Address | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| ACK Destination Address | | | ACK Request Source Address | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
Option Type | Option Type | |||
???. The top three bits of this Option Type value are equal to | 5 | |||
000, meaning that a node that does not understand this option | ||||
SHOULD ignore this option and continue processing the packet, | ||||
and that the Option Data does not change en-route [7]. | ||||
Option Length | Opt Data Len | |||
8-bit unsigned integer. Length of the option, in octets, | 8-bit unsigned integer. Length of the option, in octets, | |||
excluding the Option Type and Option Length fields. | excluding the Option Type and Opt Data Len fields. | |||
Identification | Identification | |||
Copied from the Identification field of the DSR Routing header | The Identification field is set to a unique nonzero value and | |||
of the packet being acknowledged. | is copied into the Identification field of the Acknowledgement | |||
option when returned by the node receiving the packet over this | ||||
ACK Source Address | hop. | |||
The address of the node originating the DSR Acknowledgment. | ||||
ACK Destination Address | ACK Request Source Address | |||
The address of the node to which the DSR Acknowledgment is to | The address of the node requesting the acknowledgment. | |||
be delivered. | ||||
A DSR Acknowledgement destination option MAY appear one or more times | An Acknowledgement Request option MUST NOT appear more than once | |||
within a single Hop-by-Hop Options extension header. | within a DSR header. | |||
5.3. DSR Routing Header | 5.6. Acknowledgment Option | |||
As specified for IPv6 [7], a Routing header is used by a source to | The Acknowledgment DSR option is encoded as follows: | |||
list one or more intermediate nodes to be "visited" on the way to | ||||
a packet's destination. This function is similar to IPv4's Loose | ||||
Source and Record Route option, but the Routing header does not | ||||
record the route taken as the packet is forwarded. The specific | ||||
processing steps required to implement the Routing header must be | ||||
added to an IPv4 protocol stack. The Routing header is identified by | ||||
a Next Header value of 43 in the immediately preceding header, and | ||||
has the following format: | ||||
0 1 2 3 | 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 | 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 | Hdr Ext Len | Routing Type | Segments Left | | | Option Type | Opt Data Len | Identification | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | ACK Source Address | | |||
. . | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
. type-specific data . | | ACK Destination Address | | |||
. . | ||||
| | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
The type-specific data for a Routing Header carrying a DSR Source | Option Type | |||
Route is: | ||||
6 | ||||
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. | ||||
ACK Source Address | ||||
The address of the node originating the acknowledgment. | ||||
ACK Destination Address | ||||
The address of the node to which the acknowledgment is to be | ||||
delivered. | ||||
An Acknowledgement option MAY appear one or more times within a DSR | ||||
header. | ||||
5.7. Source Route Option | ||||
The Source Route DSR option is encoded as follows: | ||||
0 1 2 3 | 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 | 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 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
|F|L| Reserved |Salvage| Identification | | | Option Type | Opt Data Len |F|L|Reservd|Salvage| Segs Left | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Address[1] | | | Address[1] | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Address[2] | | | Address[2] | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| ... | | | ... | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Address[n] | | | Address[n] | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
Routing header fields: | ||||
Next Header | ||||
8-bit selector. Identifies the type of header immediately | ||||
following the Routing header. | ||||
Hdr Ext Len | Option Type | |||
8-bit unsigned integer. Length of the Routing header in | ||||
4-octet units, not including the first 8 octets. | ||||
Routing Type | ||||
??? | ||||
Segments Left | 7 | |||
Number of route segments remaining, i.e., number of explicitly | Opt Data Len | |||
listed intermediate nodes still to be visited before reaching | ||||
the final destination. | ||||
Type-specific fields: | 8-bit unsigned integer. Length of the option, in octets, | |||
excluding the Option Type and Opt Data Len fields. For the | ||||
format of the 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) | First Hop External (F) | |||
Set to indicate that the first node indicated by the Routing | Set to indicate that the first node indicated by the Source | |||
header is actually in a network external to the DSR network; | Route option is actually in a network external to the DSR | |||
the exact sequence of hops leading from it outside the DSR | network; the exact sequence of hops leading from it outside the | |||
network are not represented in the Routing header. Nodes | DSR network are not represented in the Source Route option. | |||
caching this hop in their Route Cache MUST flag the cached | Nodes caching this hop in their Route Cache MUST flag the | |||
hop with the External flag. Such hops MUST NOT be returned | cached hop with the External flag. Such hops MUST NOT be | |||
in a Route Reply generated from this Route Cache entry, and | returned in a Route Reply generated from this Route Cache | |||
selection of routes from the Route Cache to route a packet | entry, and selection of routes from the Route Cache to route | |||
being sent SHOULD prefer routes that contain no hops flagged as | a packet being sent SHOULD prefer routes that contain no hops | |||
External. | flagged as External. | |||
Last Hop External (L) | Last Hop External (L) | |||
Set to indicate that the last hop indicated by the Routing | Set to indicate that the last hop indicated by the Source Route | |||
header is actually in a network external to the DSR network; | option is actually in a network external to the DSR network; | |||
the exact sequence of hops leading to it outside the DSR | the exact sequence of hops leading to it outside the DSR | |||
network are not represented in the Routing header. Nodes | network are not represented in the Source Route option. Nodes | |||
caching this hop in their Route Cache MUST flag the cached | caching this hop in their Route Cache MUST flag the cached | |||
hop with the External flag. Such hops MUST NOT be returned | hop with the External flag. Such hops MUST NOT be returned | |||
in a Route Reply generated from this Route Cache entry, and | in a Route Reply generated from this Route Cache entry, and | |||
selection of routes from the Route Cache to route a packet | selection of routes from the Route Cache to route a packet | |||
being sent SHOULD prefer routes that contain no hops flagged as | being sent SHOULD prefer routes that contain no hops flagged as | |||
External. | External. | |||
Reserved | Reserved | |||
Sent as 0; ignored on reception. | Sent as 0; ignored on reception. | |||
Salvage | Salvage | |||
A 4-bit unsigned integer. Count of number of times that | A 4-bit unsigned integer. Count of number of times that | |||
this packet has been salvaged as a part of DSR routing | this packet has been salvaged as a part of DSR routing | |||
(Section 3.4.1). | (Section 3.4.1). | |||
Identification | Segments Left (Segs Left) | |||
Used to request that a DSR Acknowledgement option be returned | Number of route segments remaining, i.e., number of explicitly | |||
to this transmitting node for this hop. The special value of 0 | listed intermediate nodes still to be visited before reaching | |||
indicates that no DSR Acknowledgement is requested. Otherwise, | the final destination. | |||
the Identification field is set to a unique nonzero number | ||||
by this node transmitting the packet and is copied into the | ||||
Identification field of the DSR Acknowledgement option when | ||||
returned by the node receiving the packet over this hop. | ||||
Address[1..n] | Address[1..n] | |||
The sequence of addresses of the source route. In routing | The sequence of addresses of the source route. In routing | |||
and forwarding the packet, the source route is processed as | and forwarding the packet, the source route is processed as | |||
described in Sections 6.1.2 and 6.1.4. | described in Sections 6.1.3 and 6.1.5. | |||
When forwarding a packet along a DSR source route using a Source | ||||
Route option in the packet's DSR header, the Source Address field in | ||||
the packet's IP header is always set to the address of the packet's | ||||
ultimate destination. A node receiving a packet containing a DSR | ||||
header with a Source Route option MUST examine the indicated source | ||||
route to determine if it is the intended next hop for the packet and | ||||
determine how to forward the packet, as defined in Sections 6.1.4 | ||||
and 6.1.5. | ||||
5.8. Pad1 Option | ||||
The Pad1 DSR option is encoded as follows: | ||||
+-+-+-+-+-+-+-+-+ | ||||
| Option Type | | ||||
+-+-+-+-+-+-+-+-+ | ||||
Option Type | ||||
0 | ||||
A Pad1 option MAY be included in the Options field of a DSR header | ||||
in order to align subsequent DSR options, but such alignment is | ||||
not required and MUST NOT be expected by nodes receiving packets | ||||
containing a DSR header. | ||||
The total length of a DSR header, indicated by the Payload Length | ||||
field in the DSR header MUST be a multiple of 4 octets. When | ||||
building a DSR header in a packet, sufficient Pad1 or PadN options | ||||
MUST be included in the Options field of the DSR 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 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. | ||||
5.9. PadN Option | ||||
The PadN DSR option is encoded as follows: | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - - | ||||
| Option Type | Opt Data Len | Option Data | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - - | ||||
Option Type | ||||
1 | ||||
Opt Data Len | ||||
8-bit unsigned integer. Length of the option, in octets, | ||||
excluding the Option Type and Opt Data Len fields. | ||||
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 header | ||||
in order to align subsequent DSR options, but such alignment is | ||||
not required and MUST NOT be expected by nodes receiving packets | ||||
containing a DSR header. | ||||
The total length of a DSR header, indicated by the Payload Length | ||||
field in the DSR header MUST be a multiple of 4 octets. When | ||||
building a DSR header in a packet, sufficient Pad1 or PadN options | ||||
MUST be included in the Options field of the DSR header to make the | ||||
total length a multiple of 4 octets. | ||||
6. Detailed Operation | 6. Detailed Operation | |||
6.1. General Packet Processing | 6.1. General Packet Processing | |||
6.1.1. Originating a Packet | 6.1.1. Originating a Packet | |||
When originating any packet, a node using DSR routing MUST perform | When originating any packet, a node using DSR routing MUST perform | |||
the following sequence of steps: | the following sequence of steps: | |||
skipping to change at page 33, line 30 | skipping to change at page 35, line 30 | |||
- If the packet contains a Route Request option, then replace the | - If the packet contains a Route Request option, then replace the | |||
IP Destination Address field with the IP "limited broadcast" | IP Destination Address field with the IP "limited broadcast" | |||
address (255.255.255.255) [3]. | address (255.255.255.255) [3]. | |||
- Else, this node must have a route to the Destination Address | - Else, this node must have a route to the Destination Address | |||
of the packet (since otherwise a Route Request would have | of the packet (since otherwise a Route Request would have | |||
been added to the packet). If the length of this route is | been added to the packet). If the length of this route is | |||
greater than 1 hop, or if the node determines to request a DSR | greater than 1 hop, or if the node determines to request a DSR | |||
network-layer acknowledgement from the first hop of the route, | network-layer acknowledgement from the first hop of the route, | |||
then insert a DSR Routing header into the packet, as described | then insert a DSR header as described in Section 6.1.2, and | |||
in Section 6.1.2. The source route in the packet is initialized | insert a Source Route option, as described in Section 6.1.3. The | |||
from the route to the Destination Address found in the Route | source route in the packet is initialized from the route to the | |||
Cache. | Destination Address found in the Route Cache. | |||
- Transmit the packet to the address given in the IP | ||||
Destination Address, using Route Maintenance to retransmit the | ||||
packet if necessary, as described in Section 6.3. | ||||
6.1.2. Adding a DSR Routing Header to a Packet | ||||
The design of the DSR Routing header is based on the design of a | - Transmit the packet to the address given in the next hop, using | |||
Routing header in IPv6 [7]. A node originating a packet adds a | Route Maintenance to retransmit the packet if necessary, as | |||
DSR Routing header to the packet, if necessary, in order to carry | described in Section 6.3. | |||
the source route of hops from this originating node to the final | ||||
destination address of the packet. Specifically, the node adding the | ||||
DSR Routing header constructs the Routing header and modifies the IP | ||||
packet according to the following sequence of steps: | ||||
- A DSR Routing header, as described in Section 5.3, is created | 6.1.2. Adding a DSR Header to a Packet | |||
and added to the packet after the IP header and any Hop-by-Hop | ||||
Options header that may already be in the packet, but before any | ||||
Destination Options header (e.g., containing a DSR Route Reply | ||||
option) that may be present. | ||||
- The number of Address fields to include in the DSR Routing | A node originating a packet adds a DSR header to the packet, if | |||
header (n) is the number of intermediate nodes in the source | necessary, to carry information needed by the routing protocol. A | |||
route for the packet (i.e., excluding address of the originating | packet MUST NOT contain more than one DSR header. A DSR header is | |||
node and the final destination address of the packet). The | added to a packet by performing the following sequence of steps | |||
Segments Left field in the DSR Routing header is initialized | (these steps assume that the packet contains no other headers that | |||
equal to n. | MUST be located in the packet before the DSR header): | |||
- The Source Address from the IP header is copied into Address[n] | - Insert a DSR header after the IP header but before any other | |||
in the DSR Routing header. | header that may be present. | |||
- The first hop of the source route for the packet is copied into | - Set the Next Header field of the DSR header to the Protocol | |||
the Source Address field in the IP header. | number field of the packet's IP header. | |||
- The remaining hops of the source route for the packet are copied | - Set the Protocol field of the packet's IP header to the Protocol | |||
into sequential Address[i] fields in the DSR routing header, | number assigned for a DSR header (???). | |||
for i = 1, 2, ..., n-1. | ||||
- The First Hop External (F) bit in the Routing header is copied | 6.1.3. Adding a Source Route Option to a Packet | |||
from the External bit flagging the first hop node in the source | ||||
route for the packet, as indicated in the Route Cache. | ||||
- The Last Hop External (L) bit in the Routing header is copied | A node originating a packet adds a Source Route option to the packet, | |||
from the External bit flagging the last hop node in the source | if necessary, in order to carry the source route of hops from this | |||
route for the packet, as indicated in the Route Cache. | originating node to the final destination address of the packet. | |||
Specifically, the node adding the Source Route option constructs | ||||
the Source Route option and modifies the IP packet according to the | ||||
following sequence of steps: | ||||
- All other fields in the type-specific data in the DSR Routing | - A Source Route option, as described in Section 5.7, is created | |||
header are initialized to 0. | and appended to the DSR header in the packet (a DSR header is | |||
added, as described in Section 6.1.2, if not already present). | ||||
- The Routing Type field in the DSR Routing header is initialized | - The number of Address[i] fields to include in the DSR Source | |||
to ???. | Route option (n) is the number of intermediate nodes in the | |||
source route for the packet (i.e., excluding 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 Hdr Ext Len field in the DSR Routing header is initialized | - The Destination Address from the IP header is copied into | |||
to 4. | Address[n] in the DSR Source Route option. | |||
- Next Header field in the DSR Routing header is set equal to the | - The first hop of the source route for the packet is copied into | |||
current value in the Protocol field in the IP header (or the | the Destination Address field in the IP header. | |||
Next Header field in the preceding extension header), and the | ||||
Protocol field (or preceding Next Header field) is set equal | ||||
to 43 to indicate a Routing header extension header [7]. | ||||
6.1.3. Receiving a Packet | - The remaining hops of the source route for the packet are copied | |||
into sequential Address[i] fields in the Source Route option, | ||||
for i = 1, 2, ..., n-1. | ||||
When a node receives any packet, it MUST process the packet according | - The First Hop External (F) bit in the Source Route option is | |||
to the following sequence of steps: | copied from the External bit flagging the first hop node in the | |||
source route for the packet, as indicated in the Route Cache. | ||||
- If the Destination Address in the packet's IP header does not | - The Last Hop External (L) bit in the Source Route option is | |||
match any of this receiving node's own IP address(s), then the | copied from the External bit flagging the last hop node in the | |||
processing of this packet depends on whether the packet contains | source route for the packet, as indicated in the Route Cache. | |||
a DSR Routing header: | ||||
* If the packet contains a DSR Routing header, then discard the | 6.1.4. Receiving a Packet | |||
packet. | ||||
* Else, if the packet contains a Hop-by-Hop Options extension | When a node receives any packet containing a DSR header, it MUST | |||
header (if present, this MUST immediately follow the packet's | process the packet according to the following sequence of steps: | |||
IP header), then process the options contained in the | ||||
Hop-by-Hop Options extension header. Forward the packet | ||||
using normal IP forwarding proceedures and do not process the | ||||
packet further. | ||||
- Examine and process each of the extension headers (if any) in | - If the Destination Address in the packet's IP header matches | |||
the packet in the order in which they occur in the packet. By | one of this receiving node's own IP address(es), remove the DSR | |||
dispatching on the Protocol field in the packet's IP header, | header and all the included DSR options in the header, and pass | |||
and subsequently dispatching on the Next Header field of each | the rest of the packet to the network layer. | |||
encountered extension header, the appropriate protocol module is | ||||
executed by the receiving node for each extension header. | ||||
- If a Hop-by-Hop Options extension header or Destination Options | - Examine and process each of the options (if any) in the DSR | |||
extension headers is encountered in processing the packet, the | header in the order in which they occur in the packet, skipping | |||
receiving node MUST process any options given in this header in | over any Pad1 or PadN options. | |||
the order in which they occur in the Options field within the | ||||
option. | ||||
Any DSR routing information carried in a packet SHOULD be examined | Any DSR routing information carried in a packet SHOULD be examined | |||
and reflected in the node's Route Cache, even if the options in | and reflected in the node's Route Cache, even if the options in | |||
the packet are not otherwise processed as described above. In | the packet are not otherwise processed as described above. In | |||
particular, the following routing information SHOULD be handled in | particular, the following routing information SHOULD be handled in | |||
this way: | this way: | |||
- In a DSR Route Request option, the accumulated route record, | - In a Route Request option, the accumulated route record, | |||
represented by the IP Source Address of the packet and by the | represented by the IP Source Address of the packet and by the | |||
sequence of Address[i] entries in the Route Request option SHOULD | sequence of Address[i] entries in the Route Request option SHOULD | |||
be added to the node's Route Cache. | be added to the node's Route Cache. | |||
- In a DSR Route Reply option, the route record being returned, | - In a Route Reply option, the route record being returned, | |||
represented by the sequence of Address[i] entries in the Route | represented by the sequence of Address[i] entries in the Route | |||
Request option and by the Destination Address in the packet's IP | Request option and by the Destination Address in the packet's IP | |||
header SHOULD be added to the node's Route Cache. | header SHOULD be added to the node's Route Cache. | |||
- In a DSR Acknowledgement option, the single link from the | - In an Acknowledgement option, the single link from the | |||
ACK Source Address to the ACK Destination Address SHOULD be added | ACK Source Address to the ACK Destination Address SHOULD be added | |||
to the node's Route Cache. | to the node's Route Cache. | |||
- In a DSR Route Error option, the single link from the | - In a Route Error option, the single link from the | |||
Error Source Address to the Unreachable Node Address MUST be | Error Source Address to the Unreachable Node Address MUST | |||
removed from the node's Route Cache. | be removed from the node's Route Cache. | |||
- In a DSR Routing header, the indicated source route SHOULD be | - In a Source Route option, the indicated source route SHOULD | |||
added to the node's Route Cache, subject to the conditions | be added to the node's Route Cache, subject to the conditions | |||
identified in Section 3.3.1. The full sequence of hops in the | identified in Section 3.3.1. The full sequence of hops in the | |||
DSR Routing header is as follows: | DSR Source Route option is as follows: | |||
* The Source Address in the packet's IP header is the first hop | * The Source Address in the packet's IP header is the first hop | |||
(the sender of the packet). | (the sender of the packet). | |||
* Let n equal Hdr Ext Len. This is the number of addresses in | ||||
the Routing header. Let i equal n minus Segments Left. | ||||
* The sequence of hops | * The sequence of hops | |||
Address[1], Address[2], ..., Address[i] | Address[1], Address[2], ..., Address[n] | |||
follow immediately after the IP Source Address in the source | follow immediately after the IP Source Address in the source | |||
route. | route, where n is the number of addresses in the packet, or | |||
(Opt Data Len - 2) / 4. | ||||
* The Destination Address in the packet's IP header follows | ||||
immediately next in the source route. | ||||
* The sequence of hops | ||||
Address[i+1], Address[i+2], ..., Address[n] | ||||
follow next in the source route. The address Address[n] | * The Destination Address in the packet's IP header is the | |||
above is the final hop in the source route. | final destination of the packet and is the last hop of the | |||
source route. | ||||
In addition to the processing of received packets described above, a | In addition to the processing of received packets described above, a | |||
node SHOULD examine the packet to determine if the receipt of this | node SHOULD examine the packet to determine if the receipt of this | |||
packet indicates an opportunity for automatic route shortening, as | packet indicates an opportunity for automatic route shortening, as | |||
described in Section 3.4.2. If the received packet satisfies the | described in Section 3.4.2. If the received packet satisfies the | |||
tests described there, then this node SHOULD perform the following | tests described there, then this node SHOULD perform the following | |||
sequence of steps: | sequence of steps: | |||
- Return a gratuitous Route Reply to the IP Source Address of the | - Return a gratuitous Route Reply to the IP Source Address of the | |||
packet, as described in Section 3.4.2. | packet, as described in Section 3.4.2. | |||
- Discard the received packet, since the packet has been received | - Discard the received packet, since the packet has been received | |||
before its normal traversal of the packet's source route would | before its normal traversal of the packet's source route would | |||
have caused it to reach this receiving node. Another copy of | have caused it to reach this receiving node. Another copy of | |||
the packet will normally arrive at this node as indicated in | the packet will normally arrive at this node as indicated in | |||
the packet's source route; discarding this initial copy of the | the packet's source route; discarding this initial copy of the | |||
packet, which triggered the gratuitous Route Reply, will prevent | packet, which triggered the gratuitous Route Reply, will prevent | |||
the duplication of this packet that would otherwise occur. | the duplication of this packet that would otherwise occur. | |||
6.1.4. Processing a Routing Header in a Received Packet | 6.1.5. Processing a Received Source Route Option | |||
A Routing header in a packet is not examined or processed until the | ||||
packet reaches the node identified in the Destination Address field | ||||
in the packet's IP header. In that node, dispatching on the Protocol | ||||
field in the packet's IP header (or the Next Header field in the | ||||
preceding extension header) causes the Routing header module in that | ||||
node's IP implementation to be invoked. The node then examines the | ||||
Routing Type field in the Routing header to determine the specific | ||||
type of processing for that type of Routing header. The processing | ||||
for a Routing header here in general follows the procedures specified | ||||
for IPv6 Routing headers, and the processing specifically for a DSR | ||||
Routing header in general follows the general procedures specified | ||||
for a Type 0 Routing header in IPv6 [7]. | ||||
If, while processing a received packet, a node encounters a Routing | ||||
header with an unrecognized Routing Type value, the required behavior | ||||
of the node depends on the value of the Segments Left field, as | ||||
follows: | ||||
- If Segments Left is 0, the node MUST ignore the Routing header | ||||
and proceed to process the next header in the packet, whose type | ||||
is identified by the Next Header field in the Routing header. | ||||
- If Segments Left is non-zero, the node MUST discard the packet | If a received packet contains a DSR header with a DSR Source Route | |||
and send an ICMP Parameter Problem, Code 0, message [24] to | option, the Source Route option MUST be examined and processed (even | |||
the packet's Source Address, pointing to the unrecognized | though this node is not indicated in the Destination Address field of | |||
Routing Type. | the packet's IP header). | |||
If, after processing a Routing header in a received packet, an | If, after processing a Source Route option in a received packet, an | |||
intermediate node determines that the packet is to be forwarded onto | intermediate node determines that the packet is to be forwarded onto | |||
a link whose link MTU is less than the size of the packet, the node | a link whose link MTU is less than the size of the packet, the node | |||
MUST discard the packet and send an ICMP Packet Too Big message to | MUST discard the packet and send an ICMP Packet Too Big message to | |||
the packet's Source Address [24]. | the packet's Source Address [23]. | |||
A DSR Routing header is identified by a Routing Type value of ??? | A Source Route option in a DSR header for IPv4 is processed according | |||
in the Routing header. A DSR Routing header for IPv4 is processed | to the following sequence of steps: | |||
according to the following sequence of steps: | ||||
- If the value of the Segments Left field in the Routing header | - If the value of the Segments Left field in the Source Route | |||
equals 0, then proceed to process the next header in the packet, | option equals 0, then remove the Source Route option from the DSR | |||
whose type is identified by the Next Header field in the Routing | header. | |||
header. Do not process the Routing header further. | ||||
- Else, let n equal Hdr Ext Len. This is the number of addresses | - Else, let n equal (Opt Data Len - 2) / 4. This is the number of | |||
in the Routing header. | addresses in the Source Route option. | |||
- If the value of the Segments Left field is greater than n, then | - If the value of the Segments Left field is greater than n, then | |||
send an ICMP Parameter Problem, Code 0, message [24] to the IP | send an ICMP Parameter Problem, Code 0, message [23] to the IP | |||
Source Address, pointing to the Segments Left field, and discard | Source Address, pointing to the Segments Left field, and discard | |||
the packet. Do not process the Routing header further. | the packet. Do not process the Source Route option further. | |||
- Else, decrement the value of the Segments Left field by 1. Let i | - 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 | equal n minus Segments Left. This is the index of the next | |||
address to be visited in the Address vector. | address to be visited in the Address vector. | |||
- If Address[i] or the IP Destination Address is a multicast | - If Address[i] or the IP Destination Address is a multicast | |||
address, then discard the packet. Do not process the Routing | address, then discard the packet. Do not process the Source | |||
header further. | Route option further. | |||
- Else, swap the IP Destination Address and Address[i]. | ||||
- Forward the packet to the IP address specified in the | - Forward the packet to the IP address specified in the Address[i] | |||
Destination Address field of the IP header, following normal IP | field of the IP header, following normal IP forwarding | |||
forwarding procedures, including checking and decrementing the | procedures, including checking and decrementing the Time-to-Live | |||
Time-to-Live (TTL) field in the packet's IP header [25, 3]. In | (TTL) field in the packet's IP header [24, 3]. In this | |||
this forwarding of the packet, the next hop node (identified by | forwarding of the packet, the next hop node (identified by | |||
the Destination Address) MUST be treated as a direct neighbor | Address[i]) MUST be treated as a direct neighbor node; the | |||
node; the transmission to that next node MUST be done in a single | transmission to that next node MUST be done in a single IP | |||
IP forwarding hop, without Route Discovery and without searching | forwarding hop, without Route Discovery and without searching the | |||
the Route Cache. | Route Cache. | |||
- In forwarding the packet, perform Route Maintenance for the next | - In forwarding the packet, perform Route Maintenance for the next | |||
hop of the packet, by verifying that the packet was received by | hop of the packet, by verifying that the packet was received by | |||
that next hop, as described in Section 6.3. | that next hop, as described in Section 6.3. | |||
Multicast addresses must not appear in a DSR Routing header or in | Multicast addresses MUST NOT appear in a Source Route option or in | |||
the IP Destination Address field of a packet carrying a DSR Routing | the IP Destination Address field of a packet carrying a Source Route | |||
header. | option in a DSR header. | |||
6.2. Route Discovery Processing | 6.2. Route Discovery Processing | |||
Route Discovery is the mechanism by which a node S wishing to send a | 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 | 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 | Discovery is 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 | 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 | Discovery is known as the "initiator" of the Route Discovery, and the | |||
destination node for which the Route Discovery is initiated is known | destination node for which the Route Discovery is initiated is known | |||
as the "target" of the Route Discovery. | as the "target" of the Route Discovery. | |||
Route Discovery operates entirely on demand, with a node initiating | Route Discovery operates entirely on demand, with a node initiating | |||
Route Discovery based on its own origination of new packets for | Route Discovery based on its own origination of new packets for | |||
some destination address to which it does not currently know a | some destination address to which it does not currently know a | |||
route. Route Discovery does not depend on any periodic or background | route. Route Discovery does not depend on any periodic or background | |||
exchange of routing information or neighbor node detection at any | exchange of routing information or neighbor node detection at any | |||
layer in the network protocol stack at any node. | layer in the network protocol stack at any node. | |||
The Route Discovery procedure utilizes two types of messages, a DSR | The Route Discovery procedure utilizes two types of messages, a Route | |||
Route Request (Section 5.1.1) and a DSR Route Reply (Section 5.2.1), | Request (Section 5.2) and a Route Reply (Section 5.3), to actively | |||
to actively search the ad hoc network for a route to the desired | search the ad hoc network for a route to the desired destination. | |||
destination. These DSR messages MAY be carried in any type of IP | These DSR messages MAY be carried in any type of IP packet, through | |||
packet, through use of extension headers as described in Section 5: | use of the DSR header as described in Section 5. | |||
a Route Request is carried in a Destination options extension header, | ||||
and a Route Reply is carried in a Hop-by-Hop options extension | ||||
header. | ||||
A Route Discovery for a destination SHOULD NOT be initiated unless | A Route Discovery for a destination address SHOULD NOT be initiated | |||
the initiating node has a packet in the Send Buffer requiring | unless the initiating node has a packet in its Send Buffer requiring | |||
delivery to that destination. A Route Discovery for a given target | delivery to that destination. A Route Discovery for a given target | |||
node MUST NOT be initiated unless permitted by the rate-limiting | node MUST NOT be initiated unless permitted by the rate-limiting | |||
information contained in the Route Request Table. After each | information contained in the Route Request Table. After each | |||
Route Discovery attempt, the interval between successive Route | Route Discovery attempt, the interval between successive Route | |||
Discoveries for this target must be doubled, up to a maximum of | Discoveries for this target MUST be doubled, up to a maximum of | |||
MAX_REQUEST_PERIOD. | MAX_REQUEST_PERIOD, until a valid Route Reply is received for this | |||
target. | ||||
6.2.1. Originating a Route Request | 6.2.1. Originating a Route Request | |||
A node initiating a Route Discovery for some target creates and | A node initiating a Route Discovery for some target creates and | |||
initializes a DSR Route Request option in some IP packet. This | initializes a Route Request option in a DSR header in some IP packet. | |||
MAY be a separate IP packet, used only to carry this Route Request | This MAY be a separate IP packet, used only to carry this Route | |||
option, or the node MAY include the Route Request option in some | Request option, or the node MAY include the Route Request option | |||
existing packet it needs to send to the target node (e.g., the IP | in some existing packet it needs to send to the target node (e.g., | |||
packet originated by this node, that caused the node to attempt Route | the IP packet originated by this node, that caused the node to | |||
Discovery for the destination address of the packet). | attempt Route Discovery for the destination address of the packet). | |||
The Route Request option MUST be included in a DSR header in the | ||||
The Route Request option MUST be included in a Destination Options | packet. To initialize the Route Request option, the node performs | |||
extension header in the packet. To initialize the Route Request | the following sequence of steps: | |||
option, the node performs the following sequence of steps: | ||||
- The Option Type in the option MUST be set to the value ???. | - The Option Type in the option MUST be set to the value 2. | |||
- The Option Length field in the option MUST be set to the value 6. | - 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 | The total size of the Route Request option when initiated | |||
8 octets; the Option Length field excludes the size of the | is 8 octets; the Opt Data Len field excludes the size of the | |||
Option Type and Option Length fields themselves. | Option Type and Opt Data Len fields themselves. | |||
- The Identification field in the option MUST be set to a new | - The Identification field in the option MUST be set to a new | |||
value, different from that used for other Route Requests recently | value, different from that used for other Route Requests recently | |||
initiated by this node. For example, each node MAY maintain a | initiated by this node. For example, each node MAY maintain a | |||
single counter value for generating a new Identification value | single counter value for generating a new Identification value | |||
for each Route Request it initiates. | for each Route Request it initiates. | |||
- The Target Address field in the option MUST be set to the IP | - The Target Address field in the option MUST be set to the IP | |||
address that is the target of this Route Discovery. | address that is the target of this Route Discovery. | |||
skipping to change at page 42, line 5 | skipping to change at page 41, line 53 | |||
next attempt at a Route Discovery for that target node. | next attempt at a Route Discovery for that target node. | |||
These values MUST be used to implement an exponential back-off | These values MUST be used to implement an exponential back-off | |||
algorithm to limit the rate at which this node initiates new | algorithm to limit the rate at which this node initiates new | |||
Route Discoveries for the same target address. Until a valid | Route Discoveries for the same target address. Until a valid | |||
Route Reply is received for this target node address, the timeout | Route Reply is received for this target node address, the timeout | |||
between consecutive Route Discovery initiations for this target | between consecutive Route Discovery initiations for this target | |||
node SHOULD increase by doubling the timeout value on each new | node SHOULD increase by doubling the timeout value on each new | |||
initiation. | initiation. | |||
The behavior of a node processing a packet containing both a Routing | The behavior of a node processing a packet containing DSR header with | |||
Header and a Route Request Destination option is unspecified. | both a Source Route option and a Route Request option is unspecified. | |||
Packets SHOULD NOT contain both a Routing Header and a Route Request | ||||
Destination option. [This is not exactly true: A Route Request | ||||
option appearing in the second Destination Options header that IPv6 | ||||
allows after the Routing Header would probably do-what-you-mean, | ||||
though we have not triple-checked it yet. Namely, it would allow the | ||||
originator of a route discovery to unicast the request to some other | ||||
node, where it would be released and begin the flood fill. We call | ||||
this a Route Request Blossom since the unicast portion of the path | ||||
looks like a stem on the blossoming flood-fill of the request.] | ||||
Packets containing a Route Request Destination option SHOULD NOT be | Packets SHOULD NOT contain both a Source Route option and a Route | |||
retransmitted, SHOULD NOT request an explicit DSR Acknowledgment by | Request option. | |||
setting the R bit, SHOULD NOT expect a passive acknowledgment, and | ||||
SHOULD NOT be placed in the Retransmission Buffer. The repeated | Packets containing a Route Request option SHOULD NOT be | |||
transmission of packets containing a Route Request Destination option | retransmitted, SHOULD NOT request a DSR acknowledgment by including | |||
is controlled solely by the logic described in this section. | an Acknowledgement Request option, SHOULD NOT expect a passive | |||
acknowledgment, and SHOULD NOT be placed in the Retransmission | ||||
Buffer. The repeated transmission of packets containing a Route | ||||
Request option is controlled solely by the logic described in this | ||||
section. | ||||
6.2.2. Processing a Received Route Request Option | 6.2.2. Processing a Received Route Request Option | |||
When a node receives a packet containing a Route Request option, the | When a node receives a packet containing a Route Request option, the | |||
node MUST process the option according to the following sequence of | node MUST process the option according to the following sequence of | |||
steps: | steps: | |||
- If the Target Address field in the Route Request matches this | - If the Target Address field in the Route Request matches this | |||
node's own IP address, then the node SHOULD return a Route Reply | 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 | to the initiator of this Route Request (the Source Address in the | |||
IP header of the packet), as described in Section 6.2.4. The | IP header of the packet), as described in Section 6.2.4. The | |||
source route for this reply is the sequence of hops | source route for this reply is the sequence of hops | |||
initiator, Address[1], Address[2], ..., Address[n], target | initiator, Address[1], Address[2], ..., Address[n], target | |||
where initiator is the address of the initiator of this Route | where initiator is the address of the initiator of this Route | |||
Request, each Address[i] is an address from the Route Request, | Request, each Address[i] is an address from the Route Request, | |||
and target is the target of the Route Request (the Target Address | and target is the target of the Route Request (the Target Address | |||
field in the Route Request). | field in the Route Request). | |||
The node MUST then continue processing the packet normally, | The node MUST then continue processing the rest of the packet | |||
including any following options or extension headers in the | normally. The node in this case MUST NOT retransmit the Route | |||
packet. The node MUST NOT retransmit the Route Request to | Request to propagate it to other nodes. Do not process the Route | |||
propagate it to other nodes. Do not process the Route Request | Request option further. | |||
option further. | ||||
- Else, the node MUST examine the route recorded in the Route | - Else, the node MUST examine the route recorded in the Route | |||
Request option (the IP Source Address field and the sequence of | Request option (the IP Source Address field and the sequence of | |||
Address[i] fields) to determine if this node's own IP address | Address[i] fields) to determine if this node's own IP address | |||
already appears in this list of addresses. If so, the node MUST | already appears in this list of addresses. If so, the node MUST | |||
discard the entire packet carrying the Route Request option. | discard the entire packet carrying the Route Request option. | |||
- Else, the node MUST search its Route Request Table for an entry | - Else, the node MUST search its Route Request Table for an entry | |||
for the initiator of this Route Request (the IP Source Address | for the initiator of this Route Request (the IP Source Address | |||
field). If such an entry is found in the table, the node MUST | field). If such an entry is found in the table, the node MUST | |||
search the cache of Identification values of recently received | search the cache of Identification values of recently received | |||
Route Requests in that table entry, to determine if an entry | Route Requests in that table entry, to determine if an entry | |||
is present in the cache matching the Identification value | is present in the cache matching the Identification value | |||
and target node address in this Route Request. If such an | and target node address in this Route Request. If such an | |||
(Identification, target address) entry is found in this cache in | (Identification, target address) entry is found in this cache in | |||
this entry in the Route Request Table, then the node MUST discard | this entry in the Route Request Table, then the node MUST discard | |||
the entire packet carrying the Route Request option. | the entire packet carrying the Route Request option. | |||
- Else, this node SHOULD repropagate this Route Request. If it | - Else, this node SHOULD further process the Route Request | |||
does so, the node MUST do so according to the following sequence | according to the following sequence of steps: | |||
of steps: | ||||
* Add an entry for this Route Request in its cache of | * Add an entry for this Route Request in its cache of | |||
(Identification, target address) values of recently received | (Identification, target address) values of recently received | |||
Route Requests. | Route Requests. | |||
* Create a copy of this entire packet and perform the following | * Create a copy of this entire packet and perform the following | |||
steps on the copy of the packet. | steps on the copy of the packet. | |||
* Append this node's own IP address to the list of Address[i] | * Append this node's own IP address to the list of Address[i] | |||
values in the Route Request, and increase the value of the | values in the Route Request, and increase the value of the | |||
Option Length field in the Route Request by 4 (the size of an | Opt Data Len field in the Route Request by 4 (the size of an | |||
IP address). | IP address). | |||
* This node SHOULD search its own Route Cache for a route | * This node SHOULD search its own Route Cache for a route | |||
(from itself, as if it were the source of a packet) to the | (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 | target of this Route Request. If such a route is found in | |||
its Route Cache, then this node SHOULD follow the procedure | its Route Cache, then this node SHOULD follow the procedure | |||
outlined in Section 6.2.3 to return a "cached Route Reply" | outlined in Section 6.2.3 to return a "cached Route Reply" | |||
to the initiator of this Route Request, if permitted by the | to the initiator of this Route Request, if permitted by the | |||
restrictions specified there. | restrictions specified there. | |||
skipping to change at page 45, line 9 | skipping to change at page 44, line 49 | |||
- Send a Route Reply to the initiator of the Route Request, using | - Send a Route Reply to the initiator of the Route Request, using | |||
the procedure defined in Section 6.2.4. The initiator of the | the procedure defined in Section 6.2.4. The initiator of the | |||
Route Request is indicated in the Source Address field in the | Route Request is indicated in the Source Address field in the | |||
packet's IP header. | packet's IP header. | |||
6.2.4. Originating a Route Reply | 6.2.4. Originating a Route Reply | |||
A node originates a Route Reply in order to reply to a received and | A node originates a Route Reply in order to reply to a received and | |||
processed Route Request, according to the procedures described in | processed Route Request, according to the procedures described in | |||
Sections 6.2.2 and 6.2.3. The Route Reply is returned in a DSR Route | Sections 6.2.2 and 6.2.3. The Route Reply is returned in a Route | |||
Reply option (Section 5.2.1). The Route Reply option MAY be returned | Reply option (Section 5.3). The Route Reply option MAY be returned | |||
to the initiator of the Route Request in a separate IP packet, used | 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 | only to carry this Route Reply option, or it MAY be included in any | |||
other IP packet being sent to this address. | other IP packet being sent to this address. | |||
The Route Reply option MUST be included in a Hop-by-Hop Options | The Route Reply option MUST be included in a DSR header in the packet | |||
extension header in the packet returned to the initiator. To | returned to the initiator. To initialize the Route Reply option, the | |||
initialize the Route Reply option, the node performs the following | node performs the following sequence of steps: | |||
sequence of steps: | ||||
- The Option Type in the option MUST be set to the value ???. | - The Option Type in the option MUST be set to the value 3. | |||
- The Option Length field in the option MUST be set to the value | - The Opt Data Len field in the option MUST be set to the value | |||
(n * 4) + 1, where n is the number of addresses in the source | (n * 4) + 3, where n is the number of addresses in the source | |||
route being returned (excluding the Route Discovery initiator | route being returned (excluding the Route Discovery initiator | |||
node's address). | node's address). | |||
- The Last Hop External (L) bit in the option MUST be initialized | - The Last Hop External (L) bit in the option MUST be initialized | |||
to 0. | to 0. | |||
- The Reserved field 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 that this reply is sent in | ||||
response to. | ||||
- The sequence of addresses of the source route are copied into | - The sequence of addresses of the source route are copied into | |||
the Address[i] fields of the option. Address[1] MUST be set | the Address[i] fields of the option. Address[1] MUST be set | |||
to the first hop of the route after the initiator of the Route | to the first hop of the route after the initiator of the Route | |||
Discovery, Address[n] MUST be set to the last hop of the source | Discovery, Address[n] MUST be set to the last hop of the source | |||
route (the address of the target node), and each other Address[i] | 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 | MUST be set to the next address in sequence in the source route | |||
being returned. | being returned. | |||
The Destination Address field in the IP header of the packet carrying | 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 | 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 | 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 | response to some Route Request, the IP Source Address of the Route | |||
Request). | Request). | |||
After creating and initializing the DSR Route Reply option and | After creating and initializing the Route Reply option and the IP | |||
the IP packet containing it, send the Route Reply, jittered by | packet containing it, send the Route Reply. In sending the Route | |||
T milliseconds, where T is a uniformly distributed random number | Reply from this node (but not from nodes forwarding the Route Reply), | |||
between 0 and BROADCAST_JITTER. | this node SHOULD delay the rely by a small jitter period chosen | |||
randomly between 0 and BROADCAST_JITTER milliseconds. | ||||
If the MAC layer above which DSR is operating requires | ||||
bidirectionality for unidirectional transmissions, the Route | ||||
Reply MUST be sent by reversing the sequence of hops that are stored | ||||
in it. | ||||
If sending a Route Reply to the originator of the Route Request | If sending a Route Reply to the originator of the Route Request | |||
requires performing a Route Discovery, the Route Reply hop-by-hop | requires performing a Route Discovery, the Route Reply Option MUST | |||
option MUST be piggybacked on the packet that contains the Route | be piggybacked on the packet that contains the Route Request. This | |||
Request. This piggybacking prevents a loop wherein the target of the | piggybacking prevents a loop wherein the target of the new Route | |||
new Route Request (which was itself the originator of the original | Request (which was itself the originator of the original Route | |||
Route Request) must do another Route Request in order to return its | Request) must do another Route Request in order to return its Route | |||
Route Reply. | Reply. | |||
If sending the Route Reply to the originator of the Route Request | If sending the Route Reply to the originator of the Route Request | |||
does not require performing Route Discovery, a node SHOULD send a | does not require performing Route Discovery, a node SHOULD send a | |||
unicast Route Reply in response to every received Route Request | unicast Route Reply in response to every received Route Request | |||
targeted at it. | targeted at it. | |||
6.2.5. Processing a Route Reply Option | 6.2.5. Processing a Route Reply Option | |||
Upon receiving a Route Reply, a node SHOULD extract the source route | Upon receiving a Route Reply, a node SHOULD extract the source route | |||
from the Route Reply and add this routing information to its Route | from the Route Reply and add this routing information to its Route | |||
skipping to change at page 47, line 19 | skipping to change at page 47, line 19 | |||
such that it can no longer use its route to D because a link along | 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 | 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 | route is broken, S can attempt to use any other route it happens to | |||
know to D, or can invoke Route Discovery again to find a new route | 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 | for subsequent packets to D. Route Maintenance for this route is | |||
used only when S is actually sending packets to D. | used only when S is actually sending packets to D. | |||
When forwarding a packet, a node MUST attempt to receive an | When forwarding a packet, a node MUST attempt to receive an | |||
acknowledgement for the packet from the next hop. If no | acknowledgement for the packet from the next hop. If no | |||
acknowledgement is received, the node SHOULD return a Route Error to | acknowledgement is received, the node SHOULD return a Route Error to | |||
the IP Source Address of the packet, as described in Section 6.3.3 | the IP Source Address of the packet, as described in Section 6.3.3. | |||
A node's algorithm for deciding whether or not to return a Route | ||||
Error MUST NOT allow any node to attempt to send an unbounded number | ||||
of packets along a broken link without receiving a Route Error. | ||||
6.3.1. Using Network-Layer Acknowledgments | 6.3.1. Using Network-Layer Acknowledgments | |||
When a node retransmits a packet or has no other way to ensure | When a node retransmits a packet or has no other way to ensure | |||
successful delivery of a packet to the next hop, it SHOULD request | successful delivery of a packet to the next hop, it MUST request a | |||
a network-layer acknowledgement by placing a non-zero value in the | network-layer acknowledgement by placing inserting an Acknowledgement | |||
Identification field of the DSR Routing header. Such a value MUST | Request the DSR header. The Identification value contained in that | |||
be unique over all packets delivered to the same next hop which are | header MUST be unique over all packets delivered to the same next hop | |||
either unacknowledged or recently acknowledged. | which are either unacknowledged or recently acknowledged. | |||
A node receiving a DSR Routing header with a non-zero value in the | A node receiving an Acknowledgement Request MUST send an | |||
Identification field MUST send an acknowledgement to the previous hop | acknowledgement to the previous hop by performing the following | |||
by performing the following sequence of steps: | sequence of steps: | |||
- Create a packet and set the IP Source Address to the address | - Create a packet and set the IP Source Address to the address | |||
of this node, the IP Destination Address to the address of the | of this node, the IP Destination Address to the address of the | |||
previous hop, and the IP Protocol field to the protocol number | previous hop, and the IP Protocol field to the protocol number | |||
reserved for Hop-by-Hop Options extension headers. | reserved for DSR headers. | |||
- Set the Hop-by-Hop Options extension header's Next Header field | - Set the DSR header's Next Header field to be the "No Next Header" | |||
to be the "No Next Header" value. Set the Header Extension | value. | |||
Length to the size of a DSR Acknowledgement Option. | ||||
- Set the DSR Acknowledgement option's Option Type field to | - Set the Acknowledgement option's Option Type field to 6, and the | |||
the Option Type reserved for DSR Acknowledgements, and the | Opt Data Len field to 10. | |||
Option Length field to 10. | ||||
- Copy the Identification field from the Routing Header into | - Copy the Identification field from the Acknowledgement Request | |||
the Identification field in the DSR Acknowledgement Option. | option into the Identification field in the Acknowledgement | |||
Set the ACK Source Address field in the option to be the IP | option. Set the ACK Source Address field in the option to be the | |||
Source Address and the ACK Destination Address field to the IP | IP Source Address and the ACK Destination Address field to the IP | |||
Destination Address. | Destination Address. | |||
- Send the packet as described in Section 6.1.1. | - Send the packet as described in Section 6.1.1. | |||
6.3.2. Using Link Layer Acknowledgments | 6.3.2. Using Link Layer Acknowledgments | |||
If explicit failure notifications are provided by the link layer, | If explicit failure notifications are provided by the link layer, | |||
then all packets are assumed to be correctly received by the | then all packets are assumed to be correctly received by the | |||
next hop, and a Route Error is sent only when an explicit failure | next hop, and a Route Error is sent only when an explicit failure | |||
notification is made from the link layer. | notification is made from the link layer. | |||
Nodes receiving a packet without a Routing Header do not need to send | Nodes receiving a packet without an Acknowledgement Request Option | |||
an explicit Acknowledgment to the packet's originator, since the | do not need to send an explicit Acknowledgment to the packet's | |||
link layer will notify the originator if the packet was not received | originator, since the link layer will notify the originator if the | |||
properly. | packet was not received properly. | |||
6.3.3. Originating a Route Error | 6.3.3. Originating a Route Error | |||
When a node is unable to verify successful delivery of a packet to | When a node is unable to verify successful delivery of a packet to | |||
the next hop after a maximum number of retransmission attempts, | the next hop after a maximum number of retransmission attempts, | |||
a node SHOULD send a Route Error to the IP Source Address of the | a node SHOULD send a Route Error to the IP Source Address of the | |||
packet. When sending a Route Error for a packet containing either a | packet. In addition, a node's algorithm for deciding whether or not | |||
DSR Route Error option or a DSR Acknowledgement option, a node SHOULD | to return a Route Error MUST NOT allow any node to attempt to send | |||
add these options to it's Route Error, subject to some limit on | an unbounded number of packets along a broken link without receiving | |||
a Route Error. When sending a Route Error for a packet containing | ||||
either a Route Error option or an Acknowledgement option, a node | ||||
SHOULD add these options to its Route Error, subject to some limit on | ||||
lifetime. Specifically, we define the "salvage count" of an option | lifetime. Specifically, we define the "salvage count" of an option | |||
to be the sum of one plus the salvage count recorded in the DSR | to be the sum of one plus the salvage count recorded in the Source | |||
Routing header plus the sum of the salvage counts of any DSR Route | Route option plus the sum of the salvage counts of any Route Errors | |||
Errors preceding that option. | preceding that option. | |||
A node transmitting a Route Error MUST follow the following steps: | A node transmitting a Route Error MUST follow the following steps: | |||
- Create a packet and set the IP Source Address to the address of | - Create a packet and set the IP Source Address to the address of | |||
this node, the IP Destination Address to the address IP Source | this node, the IP Destination Address to the address IP Source | |||
Address of the packet experiencing the error. | Address of the packet experiencing the error. | |||
- Insert a Hop-by-Hop Options Header into the packet. | - Insert a DSR header into the packet. | |||
- Add a Route Error Option, setting the Error Type to | - Add a Route Error Option, setting the Error Type to | |||
NODE_UNREACHABLE, the Reserved bits to 0, the Salvage value to | NODE_UNREACHABLE, the Reserved bits to 0, the Salvage value to | |||
one plus the Salvage value from the DSR Routing header, and the | one plus the Salvage value from the DSR Source Route option, and | |||
Unreachable Node Address to the address of the next hop. Set | the Unreachable Node Address to the address of the next hop. Set | |||
the Error Source Address to the IP Source Address and the Error | the Error Source Address to the IP Source Address and the Error | |||
Destination to the IP Destination Address. | Destination to the IP Destination Address. | |||
- The node MAY append each DSR Route Error and DSR Acknowledgement, | - The node MAY append each Route Error and Acknowledgement | |||
in order, from the packet experiencing the error, though it MUST | option, in order, from the packet experiencing the error, | |||
exclude options with salvage counts greater than 15. | though it MUST exclude options with salvage counts greater | |||
than MAX_SALVAGE_TIMES. | ||||
- Send the packet as described in Section 6.1.1. | - Send the packet as described in Section 6.1.1. | |||
6.3.4. Processing a Route Error Option | 6.3.4. Processing a Route Error Option | |||
A node receiving a Route Error MUST process it as follows: | A node receiving a Route Error MUST process it as follows: | |||
- Delete all routes from the Route Cache that have a link from the | - Delete all routes from the Route Cache that have a link from the | |||
Route Error Source Address to the Unreachable Node Address. | Route Error Source Address to the Unreachable Node Address. | |||
- If the Hop-by-Hop option following the Route Error is a DSR | - If the option following the Route Error is an Acknowledgement | |||
Acknowledgement or DSR Route Error option sent by this node | or Route Error option sent by this node (that is, with | |||
(that is, with Acknowledgement or Error Source Address equal to | Acknowledgement or Error Source Address equal to this node's | |||
this node's address), copy the Hop-by-Hop options following the | address), copy the DSR options following the current Route | |||
current Route Error into a new packet with IP Source Address | Error into a new packet with IP Source Address equal to this | |||
equal to this node's own IP address and IP Destination Address | node's own IP address and IP Destination Address equal to the | |||
equal to the Acknowledgement or Error Destination Address. | Acknowledgement or Error Destination Address. Transmit this | |||
Transmit this packet as described in Section 6.1.1, with the | packet as described in Section 6.1.1, with the salvage count in | |||
salvage count in the DSR Routing header set to the Salvage value | the Source Route option set to the Salvage value of the Route | |||
of the Route Error. | Error. | |||
6.3.5. Salvaging a Packet | 6.3.5. Salvaging a Packet | |||
When a node is unable to verify successful delivery of a packet | When a node is unable to verify successful delivery of a packet | |||
to the next hop after a maximum number of retransmission attempts | to the next hop after a maximum number of retransmission attempts | |||
and has transmitted a Route Error to the sender, it MAY attempt to | and has transmitted a Route Error to the sender, it MAY attempt to | |||
salvage the packet by examining its route cache. If the node can | salvage the packet by examining its route cache. If the node can | |||
find a route to the packet's IP Destination Address in its own Route | find a route to the packet's IP Destination Address in its own Route | |||
Cache, then this node replaces the packet's Routing header with a new | Cache, then this node replaces the packet's Source Route option | |||
Routing Header in the same way as described in Section 6.1.2, except | with a new Source Route option in the same way as described in | |||
that Address[1] MUST be set to the address of this node and the | Section 6.1.3, except that Address[1] MUST be set to the address of | |||
Salvage field MUST be set to 1 plus the value of the Salvage field in | this node and the Salvage field MUST be set to 1 plus the value of | |||
the Routing Header that caused the error. | the Salvage field in the Source Route option that caused the error. | |||
7. Constants | 7. Constants | |||
BROADCAST_JITTER 10 milliseconds | BROADCAST_JITTER 10 milliseconds | |||
MAX_ROUTE_LEN 15 nodes | MAX_ROUTE_LEN 15 nodes | |||
MAX_SALVAGE_TIMES 15 salvages | ||||
Route Cache | Route Cache | |||
ROUTE_CACHE_TIMEOUT 300 seconds | ROUTE_CACHE_TIMEOUT 300 seconds | |||
Send Buffer | Send Buffer | |||
SEND_BUFFER_TIMEOUT 30 seconds | SEND_BUFFER_TIMEOUT 30 seconds | |||
Route Request Table | Route Request Table | |||
REQUEST_TABLE_SIZE 64 nodes | REQUEST_TABLE_SIZE 64 nodes | |||
REQUEST_TABLE_IDS 16 identifiers | REQUEST_TABLE_IDS 16 identifiers | |||
MAX_REQUEST_REXMT 16 retransmissions | MAX_REQUEST_REXMT 16 retransmissions | |||
skipping to change at page 51, line 7 | skipping to change at page 51, line 7 | |||
NONPROP_REQUEST_TIMEOUT 30 milliseconds | NONPROP_REQUEST_TIMEOUT 30 milliseconds | |||
Retransmission Buffer | Retransmission Buffer | |||
DSR_RXMT_BUFFER_SIZE 50 packets | DSR_RXMT_BUFFER_SIZE 50 packets | |||
Retransmission Timer | Retransmission Timer | |||
DSR_MAXRXTSHIFT 2 | DSR_MAXRXTSHIFT 2 | |||
8. IANA Considerations | 8. IANA Considerations | |||
This document proposes the use in IPv4 of the Destination Options | This document proposes the use of a DSR header, which requires an IP | |||
extension header, the Hop-by-Hop Options extension header, and | Protocol number. | |||
Routing header, which were originally defined for IPv6 [7]. The | ||||
Next Header values indicating these three extension header types (60, | ||||
0, and 43, respectively) must therefore be reserved within the IPv4 | ||||
Protocol number space. In addition, the "No Next Header" type value | ||||
of 69, defined for IPv6, must also be defined for use in IPv4. Other | ||||
protocols in IPv4 wishing to use these IPv6-style extension headers | ||||
can also make use of these Protocol number assignments. | ||||
For use within a Destination Options extension header, this document | ||||
defines one new type of destination option, which must be assigned an | ||||
Option Type value: | ||||
- DSR Route Request option, described in Section 5.1.1. The top | ||||
three bits of this Option Type value MUST be 011. | ||||
For use within a Hop-by-Hop Options extension header, this document | ||||
defines three new types of hop-by-hop options, each of which must be | ||||
assigned an Option Type value: | ||||
- DSR Route Reply option, described in Section 5.2.1. The top | ||||
three bits of this Option Type value MUST be 000. | ||||
- DSR Route Error option, described in Section 5.2.2. The top | ||||
three bits of this Option Type value MUST be 000. | ||||
- DSR Acknowledgment option, described in Section 5.2.3. The top | ||||
three bits of this Option Type value MUST be 000. | ||||
For use within a Routing header, this document defines one new type | ||||
of routing header, which must be assigned an Routing Type value: | ||||
- DSR Routing Header, defined in Section 5.3. | In addition, this document proposes use of the value "No Next Header" | |||
(originally defined for use in IPv6) within an IPv4 packet, to | ||||
indicate that no further header follows a DSR header. | ||||
9. Security Considerations | 9. Security Considerations | |||
This document does not specifically address security concerns. This | This document does not specifically address security concerns. This | |||
document does assume that all nodes participating in the DSR protocol | document does assume that all nodes participating in the DSR protocol | |||
do so in good faith and without malicious intent to corrupt the | do so in good faith and without malicious intent to corrupt the | |||
routing ability of the network. In mission-oriented environments | routing ability of the network. In mission-oriented environments | |||
where all the nodes participating in the DSR protocol share a | where all the nodes participating in the DSR protocol share a | |||
common goal that motivates their participation in the protocol, the | common goal that motivates their participation in the protocol, the | |||
communications between the nodes can be encrypted at the physical | communications between the nodes can be encrypted at the physical | |||
skipping to change at page 53, line 16 | skipping to change at page 53, line 16 | |||
When designing DSR, we had to determine at what layer within | When designing DSR, we had to determine at what layer within | |||
the protocol hierarchy to implement ad hoc network routing. We | the protocol hierarchy to implement ad hoc network routing. We | |||
considered two different options: routing at the link layer (ISO | considered two different options: routing at the link layer (ISO | |||
layer 2) and routing at the network layer (ISO layer 3). Originally, | layer 2) and routing at the network layer (ISO layer 3). Originally, | |||
we opted to route at the link layer for several reasons: | we opted to route at the link layer for several reasons: | |||
- Pragmatically, running the DSR protocol at the link layer | - Pragmatically, running the DSR protocol at the link layer | |||
maximizes the number of mobile nodes that can participate in | maximizes the number of mobile nodes that can participate in | |||
ad hoc networks. For example, the protocol can route equally | ad hoc networks. For example, the protocol can route equally | |||
well between IPv4 [25], IPv6 [7], and IPX [28] nodes. | well between IPv4 [24], IPv6 [7], and IPX [27] nodes. | |||
- Historically [12, 13], DSR grew from our contemplation of | - Historically [12, 13], DSR grew from our contemplation of | |||
a multi-hop propagating version of the Internet's Address | a multi-hop propagating version of the Internet's Address | |||
Resolution Protocol (ARP) [23], as well as from the routing | Resolution Protocol (ARP) [22], as well as from the routing | |||
mechanism used in IEEE 802 source routing bridges [22]. These | mechanism used in IEEE 802 source routing bridges [21]. These | |||
are layer 2 protocols. | are layer 2 protocols. | |||
- Technically, we designed DSR to be simple enough that it could | - Technically, we designed DSR to be simple enough that it could | |||
be implemented directly in the firmware inside wireless network | be implemented directly in the firmware inside wireless network | |||
interface cards [12, 13], well below the layer 3 software within | interface cards [12, 13], well below the layer 3 software within | |||
a mobile node. We see great potential in this for DSR running | a mobile node. We see great potential in this for DSR running | |||
inside a cloud of mobile nodes around a fixed base station, | inside a cloud of mobile nodes around a fixed base station, | |||
where DSR would act to transparently extend the coverage range | where DSR would act to transparently extend the coverage range | |||
to these nodes. Mobile nodes that would otherwise be unable | to these nodes. Mobile nodes that would otherwise be unable | |||
to communicate with the base station due to factors such as | to communicate with the base station due to factors such as | |||
distance, fading, or local interference sources could then reach | distance, fading, or local interference sources could then reach | |||
the base station through their peers. | the base station through their peers. | |||
Ultimately, however, we decided to specify and to implement [20] | Ultimately, however, we decided to specify and to implement [19] | |||
DSR as a layer 3 protocol, since this is the only layer at which we | DSR as a layer 3 protocol, since this is the only layer at which we | |||
could realistically support nodes with multiple network interfaces of | could realistically support nodes with multiple network interfaces of | |||
different types forming an ad hoc network. | different types forming an ad hoc network. | |||
Appendix B. Implementation and Evaluation Status | Appendix B. Implementation and Evaluation Status | |||
The DSR protocol has been implemented under the FreeBSD 2.2.7 | The DSR protocol has been implemented under the FreeBSD 2.2.7 | |||
operating system running on Intel x86 platforms. FreeBSD is based | operating system running on Intel x86 platforms. FreeBSD is based | |||
on a variety of free software, including 4.4 BSD Lite from the | on a variety of free software, including 4.4 BSD Lite from the | |||
University of California, Berkeley. For the environments in which | University of California, Berkeley. For the environments in which | |||
skipping to change at page 54, line 22 | skipping to change at page 54, line 22 | |||
protocol specified in this draft. | protocol specified in this draft. | |||
During the 7 months from August 1998 to February 1999, we designed | During the 7 months from August 1998 to February 1999, we designed | |||
and implemented a full-scale physical testbed to enable the | and implemented a full-scale physical testbed to enable the | |||
evaluation of ad hoc network performance in the field, in a actively | evaluation of ad hoc network performance in the field, in a actively | |||
mobile ad hoc network under realistic communication workloads. | mobile ad hoc network under realistic communication workloads. | |||
The last week of February and the first week of March included | The last week of February and the first week of March included | |||
demonstrations of this testbed to a number of our sponsors and | demonstrations of this testbed to a number of our sponsors and | |||
partners, including Lucent Technologies, Bell Atlantic, and DARPA. | partners, including Lucent Technologies, Bell Atlantic, and DARPA. | |||
A complete description of the testbed is available as a Technical | A complete description of the testbed is available as a Technical | |||
Report [20]. | Report [19]. | |||
The software was ported to FreeBSD 3.3, and a preliminary version | The software was ported to FreeBSD 3.3, and a preliminary version | |||
of Quality of Service (QoS) support was added. A demonstration of | of Quality of Service (QoS) support was added. A demonstration of | |||
this modified version of DSR was presented in July 2000. Those QoS | this modified version of DSR was presented in July 2000. Those QoS | |||
features are not included in this draft, and will be added later in a | features are not included in this draft, and will be added later in a | |||
seprate draft on top of the base protocol specified here. | separate draft on top of the base protocol specified here. | |||
The DSR protocol has been extensively studied using simulation; we | The DSR protocol has been extensively studied using simulation; we | |||
have implemented DSR in the ns-2 simulator [5, 19] and conducted | have implemented DSR in the ns-2 simulator [5, 18] and conducted | |||
evaluations of different caching strategies documented in this | evaluations of different caching strategies documented in this | |||
draft [9]. | draft [9]. | |||
Several independant groups have also used DSR as a platform for their | Several independent groups have also used DSR as a platform for their | |||
own research, or and as a basis of comparison between ad hoc network | own research, or and as a basis of comparison between ad hoc network | |||
routing protocols. | routing protocols. | |||
Acknowledgements | Acknowledgements | |||
The protocol described in this draft has been designed and developed | The protocol described in this draft has been designed and developed | |||
within the Monarch Project, a research project at Rice University and | within the Monarch Project, a research project at Rice University and | |||
Carnegie Mellon University which is developing adaptive networking | Carnegie Mellon University which is developing adaptive networking | |||
protocols and protocol interfaces to allow truly seamless wireless | protocols and protocol interfaces to allow truly seamless wireless | |||
and mobile node networking [14, 6]. | and mobile node networking [14, 6]. | |||
skipping to change at page 57, line 26 | skipping to change at page 57, line 26 | |||
[16] Phil Karn. MACA---A new channel access method for packet radio. | [16] Phil Karn. MACA---A new channel access method for packet radio. | |||
In ARRL/CRRL Amateur Radio 9th Computer Networking Conference, | In ARRL/CRRL Amateur Radio 9th Computer Networking Conference, | |||
pages 134--140, September 1990. | pages 134--140, September 1990. | |||
[17] Gregory S. Lauer. Packet-radio routing. In Routing in | [17] Gregory S. Lauer. Packet-radio routing. In Routing in | |||
Communications Networks, edited by Martha E. Steenstrup, | Communications Networks, edited by Martha E. Steenstrup, | |||
chapter 11, pages 351--396. Prentice-Hall, Englewood Cliffs, | chapter 11, pages 351--396. Prentice-Hall, Englewood Cliffs, | |||
New Jersey, 1995. | New Jersey, 1995. | |||
[18] S.B. Lee, A. Gahng-Seop, X. Zhang, and A.T. Campbell. INSIGNIA: | [18] David A. Maltz, Josh Broch, Jorjeta Jetcheva, and David B. | |||
An IP-Based Quality of Service Framework for Mobile Ad Hoc | ||||
Networks. Journal of Parallel and Distributed Computing, | ||||
60(4):374--406, April 2000. | ||||
[19] David A. Maltz, Josh Broch, Jorjeta Jetcheva, and David B. | ||||
Johnson. The effects of on-demand behavior in routing protocols | Johnson. The effects of on-demand behavior in routing protocols | |||
for multi-hop wireless ad hoc networks. IEEE Journal on | for multi-hop wireless ad hoc networks. IEEE Journal on | |||
Selected Areas of Communications, 17(8):1439--1453, August 1999. | Selected Areas of Communications, 17(8):1439--1453, August 1999. | |||
[20] David A. Maltz, Josh Broch, and David B. Johnson. Experiences | [19] David A. Maltz, Josh Broch, and David B. Johnson. Experiences | |||
designing and building a multi-hop wireless ad hoc network | designing and building a multi-hop wireless ad hoc network | |||
testbed. Technical Report CMU-CS-99-116, School of Computer | testbed. Technical Report CMU-CS-99-116, School of Computer | |||
Science, Carnegie Mellon University, Pittsburgh, Pennsylvania, | Science, Carnegie Mellon University, Pittsburgh, Pennsylvania, | |||
March 1999. | March 1999. | |||
[21] David A. Maltz, Josh Broch, and David B. Johnson. Quantitative | [20] David A. Maltz, Josh Broch, and David B. Johnson. Lessons from | |||
lessons from a full-scale multi-hop wireless ad hoc network | a full-scale multihop wireless ad hoc network testbed. IEEE | |||
testbed. In Proceedings of the IEEE Wireless Communications and | Personal Communications, 8(1):8--15, February 2001. | |||
Networking Conference, September 2000. | ||||
[22] Radia Perlman. Interconnections: Bridges and Routers. | [21] Radia Perlman. Interconnections: Bridges and Routers. | |||
Addison-Wesley, Reading, Massachusetts, 1992. | Addison-Wesley, Reading, Massachusetts, 1992. | |||
[23] David C. Plummer. An Ethernet address resolution protocol: | [22] David C. Plummer. An Ethernet address resolution protocol: | |||
Or converting network protocol addresses to 48.bit Ethernet | Or converting network protocol addresses to 48.bit Ethernet | |||
addresses for transmission on Ethernet hardware. RFC 826, | addresses for transmission on Ethernet hardware. RFC 826, | |||
November 1982. | November 1982. | |||
[24] J. B. Postel, editor. Internet Control Message Protocol. | [23] J. B. Postel, editor. Internet Control Message Protocol. | |||
RFC 792, September 1981. | RFC 792, September 1981. | |||
[25] J. B. Postel, editor. Internet Protocol. RFC 791, September | [24] J. B. Postel, editor. Internet Protocol. RFC 791, September | |||
1981. | 1981. | |||
[26] J. B. Postel, editor. Transmission Control Protocol. RFC 793, | [25] J. B. Postel, editor. Transmission Control Protocol. RFC 793, | |||
September 1981. | September 1981. | |||
[27] Joyce K. Reynolds and Jon Postel. Assigned numbers. RFC 1700, | [26] Joyce K. Reynolds and Jon Postel. Assigned numbers. RFC 1700, | |||
October 1994. See also http://www.iana.org/numbers.html. | October 1994. See also http://www.iana.org/numbers.html. | |||
[28] Paul Turner. NetWare communications processes. NetWare | [27] Paul Turner. NetWare communications processes. NetWare | |||
Application Notes, Novell Research, pages 25--91, September | Application Notes, Novell Research, pages 25--91, September | |||
1990. | 1990. | |||
Chair's Address | Chair's Address | |||
The MANET Working Group can be contacted via its current chairs: | The MANET Working Group can be contacted via its current chairs: | |||
M. Scott Corson Phone: +1 301 405-6630 | M. Scott Corson Phone: +1 301 405-6630 | |||
Institute for Systems Research Email: corson@isr.umd.edu | Institute for Systems Research Email: corson@isr.umd.edu | |||
University of Maryland | University of Maryland | |||
skipping to change at page 60, line 18 | skipping to change at page 60, line 18 | |||
David B. Johnson Phone: +1 713 348-3063 | David B. Johnson Phone: +1 713 348-3063 | |||
Rice University Fax: +1 713 348-5930 | Rice University Fax: +1 713 348-5930 | |||
Computer Science Department, MS 132 Email: dbj@cs.rice.edu | Computer Science Department, MS 132 Email: dbj@cs.rice.edu | |||
6100 Main Street | 6100 Main Street | |||
Houston, TX 77005-1892 | Houston, TX 77005-1892 | |||
USA | USA | |||
David A. Maltz Phone: +1 650 688-3128 | David A. Maltz Phone: +1 650 688-3128 | |||
AON Networks Fax: +1 650 688-3119 | AON Networks Fax: +1 650 688-3119 | |||
3045 Park Blvd. Email: dmaltz@cs.cmu.com | 3045 Park Blvd. Email: dmaltz@cs.cmu.edu | |||
Palo Alto, CA 94306 | Palo Alto, CA 94306 | |||
USA | USA | |||
Yih-Chun Hu Phone: +1 412 268-3075 | Yih-Chun Hu Phone: +1 412 268-3075 | |||
Carnegie Mellon University Fax: +1 412 268-5576 | Rice University Fax: +1 412 268-5576 | |||
Computer Science Department Email: yihchun@cs.cmu.edu | Computer Science Department, MS 132 Email: yihchun@cs.cmu.edu | |||
5000 Forbes Avenue | 6100 Main Street | |||
Pittsburgh, PA 15213-3891 | Houston, TX 77005-1892 | |||
USA | USA | |||
Jorjeta G. Jetcheva Phone: +1 412 268-3053 | Jorjeta G. Jetcheva Phone: +1 412 268-3053 | |||
Carnegie Mellon University Fax: +1 412 268-5576 | Carnegie Mellon University Fax: +1 412 268-5576 | |||
Computer Science Department Email: jorjeta@cs.cmu.edu | Computer Science Department Email: jorjeta@cs.cmu.edu | |||
5000 Forbes Avenue | 5000 Forbes Avenue | |||
Pittsburgh, PA 15213-3891 | Pittsburgh, PA 15213-3891 | |||
USA | USA | |||
End of changes. | ||||
This html diff was produced by rfcdiff 1.23, available from http://www.levkowetz.com/ietf/tools/rfcdiff/ |