IETF MANET Working Group Yih-Chun Hu, Rice University
INTERNET-DRAFT David B. Johnson, Rice University
David A. Maltz, AON Networks
23 February 2001
Flow State in the Dynamic Source Routing Protocol
for Mobile Ad Hoc Networks
<draft-ietf-manet-dsrflow-00.txt>
Status of This Memo
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
produce derivative works is not granted.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF), its areas, and its working groups. Note
that other groups may also distribute working documents as
Internet-Drafts.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at
any time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt
The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html.
Abstract
This document defines an extension to the Dynamic Source Routing
protocol (DSR), a simple and efficient routing protocol designed
specifically for use in multi-hop wireless ad hoc networks of mobile
nodes. DSR enables the sender of a packet to determine the sequence
of nodes through with the packet must be forwarded to reach the
intended destination node, and to route that packet along that
sequence of hops by including a source route header in the packet.
All aspects of the protocol operate entirely on-demand, allowing the
routing packet overhead of DSR to scale automatically to only that
needed to react to changes in the routes currently in use. The DSR
extension defined in this document, known as "flow state", allows the
routing of most packets without an explicit source route header in
the packet, further reducing the overhead of the protocol while still
preserving the fundamental properties of DSR's operation.
Hu, Johnson, and Maltz Expires 23 July 2001 [Page i]
INTERNET-DRAFT Flow State in DSR 23 February 2001
Contents
Status of This Memo i
Abstract i
1. Introduction 1
2. DSR Flow State Overview 2
2.1. Flow Establishment . . . . . . . . . . . . . . . . . . . 2
2.2. Receiving and Forwarding Establishment Packets . . . . . 3
2.3. Sending Packets Along Established Flows . . . . . . . . . 3
2.4. Receiving and Forwarding Packets Sent Along Established
Flows . . . . . . . . . . . . . . . . . . . . . . . . 4
2.5. Processing Errors . . . . . . . . . . . . . . . . . . . . 5
2.6. Automatic Route Shortening . . . . . . . . . . . . . . . 5
2.7. Loop Detection . . . . . . . . . . . . . . . . . . . . . 6
2.8. Acknowledgement Destination . . . . . . . . . . . . . . . 6
2.9. Crash Recovery . . . . . . . . . . . . . . . . . . . . . 6
2.10. Rate Limiting . . . . . . . . . . . . . . . . . . . . . . 6
2.11. Interaction with Salvaging . . . . . . . . . . . . . . . 7
3. Conceptual Data Structures 8
3.1. Flow Table . . . . . . . . . . . . . . . . . . . . . . . 8
3.2. Automatic Route Shortening Table . . . . . . . . . . . . 9
3.3. Default Flow ID Table . . . . . . . . . . . . . . . . . . 9
4. Packet Formats 10
4.1. DSR Flow State Header . . . . . . . . . . . . . . . . . . 11
4.2. DSR Header Options and Extensions . . . . . . . . . . . . 12
4.2.1. Virtual Route Option . . . . . . . . . . . . . . 12
4.2.2. Timeout Option . . . . . . . . . . . . . . . . . 13
4.2.3. Destination and Flow ID Option . . . . . . . . . 14
4.2.4. New Error Type Value for Unknown Flow . . . . . . 15
4.2.5. New Error Type Value for Default Flow Unknown . . 16
4.2.6. Acknowledgement Request Option
Previous Hop Address Extension . . . . . . 17
5. Detailed Operation 18
5.1. Originating a Packet . . . . . . . . . . . . . . . . . . 18
5.1.1. Inserting a DSR Flow State Header . . . . . . . . 20
5.2. Receiving a Packet . . . . . . . . . . . . . . . . . . . 20
5.3. Forwarding a Packet Using Flow IDs . . . . . . . . . . . 24
5.4. Promiscuously Receiving a Packet . . . . . . . . . . . . 24
5.5. Operation Where the Layer Below DSR Decreases the IP TTL
Non-Uniformly . . . . . . . . . . . . . . . . . . . . 25
5.6. Salvage Interactions with DSR . . . . . . . . . . . . . . 25
Hu, Johnson, and Maltz Expires 23 July 2001 [Page ii]
INTERNET-DRAFT Flow State in DSR 23 February 2001
6. IANA Considerations 26
7. Security Considerations 26
Implementation Status 27
References 28
Chair's Address 29
Authors' Addresses 30
Hu, Johnson, and Maltz Expires 23 July 2001 [Page iii]
INTERNET-DRAFT Flow State in DSR 23 February 2001
1. Introduction
The Dynamic Source Routing protocol (DSR) is a simple and efficient
routing protocol designed specifically for use in multi-hop wireless
ad hoc networks of mobile nodes. DSR enables the sender of a packet
to determine the sequence of nodes through with the packet must
be forwarded to reach the intended destination node, and to route
that packet along that sequence of hops by including a source route
header in the packet. All aspects of the protocol operate entirely
on-demand, allowing the routing packet overhead of DSR to scale
automatically to only that needed to react to changes in the routes
currently in use.
This document defines an extension to the DSR protocol, known as
"flow state", that allows the routing of most packets without an
explicit source route header in the packet, further reducing the
overhead of the protocol while still preserving the fundamental
properties of DSR's operation. Once a sending node has discovered
a source route such as through DSR's Route Discovery mechanism, the
flow state mechanism allows the sending node to establish hop-by-hop
forwarding state within the network, based on this source route, to
enable each node along the route to forward the packet to the next
hop based on the node's own local knowledge of the flow along which
this packet is being routed. Flow state is dynamically initialized
by the first packet using a source route and is then able to route
subsequent packets along the same flow without use of a source route
header in the packet. The state established at each hop along a flow
is "soft state" and thus automatically expires when no longer needed.
This document relies on the base specification of the DSR protocol
for routing unicast IP packets [2]. The flow state extension
described here is fully compatible with nodes implementing that base
specification.
The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in RFC 2119 [1].
Hu, Johnson, and Maltz Expires 23 July 2001 [Page 1]
INTERNET-DRAFT Flow State in DSR 23 February 2001
2. DSR Flow State Overview
2.1. Flow Establishment
A source node sending packets to some destination node MAY use the
DSR flow state extension described here to establish a route to
that destination as a flow. A "flow" is a route from the source to
the destination represented by hop-by-hop forwarding state within
the nodes along the route. Each flow is uniquely identified by a
combination of the source node address, the destination node address,
and a flow identifier (flow ID) chosen by the source node.
Each flow ID is a 16-bit unsigned integer. Comparison between
different flow IDs MUST be performed modulo 2**16. For example,
using an implementation in the C programming language, a
flow ID value (a) is greater than another flow ID value (b) if
((short)((a) - (b)) > 0), if a C language "short" data type is
implemented as a 16-bit signed integer.
A DSR Flow State header in a packet identifies the flow ID to
be followed in forwarding that packet. From a given source to
some destination, any number of different flows MAY exist and
be in use, for example following different sequences of hops to
reach the destination. One of these flows may be considered to be
the "default" flow from that source to that destination. A node
receiving a packet with neither a DSR header [2] specifying the route
to be taken (with a Source Route option in the DSR header) nor a DSR
Flow State header specifying the flow to be followed, is forwarded
along the default flow for the source and destination addresses
specified in the packet's IP header.
In establishing a new flow, the source node generates a nonzero
16-bit flow ID greater than any unexpired flow IDs for this
(source, destination) pair. If the source wishes for this flow to
become the default flow, the low bit of the flow ID MUST be set (the
flow ID is an odd number); otherwise, the low bit MUST NOT be set
(the flow ID is an even number).
The source node establishing the new flow then transmits a packet
containing a DSR header with a Source Route option, as defined in the
base specification for DSR [2]; to establish the flow, the source
node also MUST include in the packet a DSR Flow State header, with
the Flow ID field set to the chosen flow ID for the new flow, and
MUST include a Timeout option in the DSR header, giving the lifetime
after which information about this flow is to expire.
The source node also records this flow in its Flow Table for future
use, setting the TTL in this Flow Table entry to be the value used in
the TTL field in the packets's IP header and setting the Lifetime in
this entry to be the lifetime specified in the Timeout option in the
DSR header.
Hu, Johnson, and Maltz Expires 23 July 2001 [Page 2]
INTERNET-DRAFT Flow State in DSR 23 February 2001
Any further packets sent with this flow ID before the timeout that
also contain a DSR header with a Source Route option MUST use this
same source route in the Source Route option.
2.2. Receiving and Forwarding Establishment Packets
Packets intended to establish a flow, as described in Section 2.1,
contain a DSR header with a Source Route option, and are forwarded
along the indicated route according to the procedures defined in
the base DSR specification [2]. A node implementing the DSR flow
state extension, when receiving and forwarding such a DSR packet,
also keep some state in its own Flow Table to enable it to forward
future packets that are sent along this flow with only the flow ID
specified. Specifically, if the packet also contains a DSR Flow
State header, this packet SHOULD cause an entry to be established for
this flow in the Flow Table of each node along the packet's route.
The Hop Count field of the DSR Flow State header is also stored in
the Flow Table, as is Lifetime Option specified in the DSR header.
If the Flow ID is odd and there is no flow in the Flow Table with
Flow ID greater than the received Flow ID, set the default Flow ID
for this (IP Source Address, IP Destination Address) pair to the
received Flow ID, and the TTL of the packet is recorded.
The Flow ID Option is removed before final delivery of the packet.
2.3. Sending Packets Along Established Flows
When a flow is established as described in Section 2.1, a packet
is sent which establishes state in each node along the route.
This state is soft; that is, the protocol contains mechanisms for
recovering from the loss of this state. However, the use of these
mechanisms may result in reduced performance for packets sent
along flows with forgotten state. As a result, it is desirable
to differentiate behavior based on whether or not the sender is
reasonably certain that the flow state exists on each node along
the route. We define a flow's state to be "established end-to-end"
if the Flow Tables of all nodes on the route contains forwarding
information for that flow. While it is impossible to detect whether
or not a flow's state has been established end-to-end without sending
packets, implementations may make reasonable assumptions about the
retention of flow state and the probability that an establishment
packet has been seen by all nodes on the route.
A source wishing to send a packet along an established flow
determines if the flow state has been established end-to-end. If it
has not, a DSR header with Source Route option with this flow's route
is added to the packet. The source SHOULD set the Flow ID field of
the DSR Flow State header either to the flow ID previously associated
Hu, Johnson, and Maltz Expires 23 July 2001 [Page 3]
INTERNET-DRAFT Flow State in DSR 23 February 2001
with this flow's route or to zero. If it sets the Flow ID field to
any other value, it MUST follow the processing steps in Section 2.1
for establishing a new flow ID. If it sets the Flow ID field to a
nonzero value, it MUST include a Timeout option with a value not
greater than the timeout remaining in the node's Flow Table, and if
its TTL is not equal to that specified in the flow table, the flow
MUST NOT be used as a default flow in the future.
Once flow state has been established end-to-end for non-default
flows, a source adds a DSR Flow State header to each packet it wishes
to send along that flow, setting the Flow ID field to the flow ID of
that flow. A Source Route option SHOULD NOT be added to the packet,
though if one is, then the steps for processing flows that have not
been established end to end MUST be followed.
Once flow state has been established end-to-end for default flows,
sources sending packets with IP TTL equal to the TTL value in the
local Flow Table entry for this flow then transmit the packet to
the next hop. In this case, a DSR Flow State header SHOULD NOT be
added to the packet and a DSR header likewise SHOULD NOT be added to
the packet; though if one is, the steps for sending packets along
non-default flows MUST be followed. If the IP TTL is not equal to
the TTL value in the local Flow Table, then the steps for processing
a non-default flow MUST be followed.
2.4. Receiving and Forwarding Packets Sent Along Established Flows
The handling of packets containing a DSR header with both a nonzero
Flow ID and a Source Route option is described in Section 2.2. The
handling of packets with a Source Route option and Flow ID equal
to zero is described in the base specification. This section only
describes handling of packets without a Source Route option.
If a node receives a packet with a Flow ID that indicates a flow not
currently in the node's Flow Table, it returns a Route Error of type
Unknown Flow. It MAY attempt to salvage the packet, though if it
does, it MUST zero the Flow ID.
If a node receives a packet with a Flow ID in the DSR header that
indicates an unexpired flow in the node's Flow Table, it increments
the Hop Count in the DSR header and forwards the packet to the next
hop indicated in the Flow Table.
If a node receives a packet with no DSR header and no DSR Flow State
header, it checks the Default Flow Table. If there is no entry, it
returns a Route Error of type Default Flow Unknown. It may attempt
to salvage the packet, though if it does, it MUST zero the Flow ID.
If there is an entry, it forwards to the next hop indicated in the
Flow Table for the default flow.
Hu, Johnson, and Maltz Expires 23 July 2001 [Page 4]
INTERNET-DRAFT Flow State in DSR 23 February 2001
2.5. Processing Errors
When a node receives a Route Error of type Unknown Flow, it marks
the flow to indicate that it has not been established end-to-end.
When a node receives a Route Error of type Default Flow Unknown, it
marks the default flow to indicate that it has not been established
end-to-end.
2.6. Automatic Route Shortening
Because a full source route is not carried in every packet, an
alternate method for performing automatic route shortening is
necessary. Instead, nodes promiscuously listen to packets, and
if a node receives a packet with (source, destination, Flow ID)
found in the Flow table but the packet is not MAC addressed to the
node, it determines whether the packet was sent by an upstream or
downstream node by examining the Hop Count field in the DSR header.
If the Hop Count field is lower than the expected Hop Count at this
node, the node assumes that the packet was sent by an upstream
node, and adds the packet to an Automatic Route Shortening table,
possibly evicting an earlier packet added to this table. When the
packet is then sent to that node for forwarding, it finds that it
has previously received the packet by checking the Automatic Route
Shortening table, and returns a gratuitous Route Reply to the source
of the packet.
When a packet does not contain a DSR header, the node promiscuously
receiving a packet assumes that the Flow ID is the default flow
for the IP Source and IP Destination. To determine whether the
packet was sent by an upstream or downstream node, it examines the
IP TTL field; if the IP TTL field is higher than the TTL recorded
during establishment, the packet is added to an Automatic Route
Shortening table. As in the case of packets with DSR headers, when
the packet is then sent to that node for forwarding, it finds that it
has previously received the packet by checking the Automatic Route
Shortening table, and returns a gratuitous Route Reply to the source
of the packet.
In order for this technique to work, each node in a route must
decrement the TTL by a uniform amount for each packet. If any
node intends to change the TTL of a packet sent using default flow
forwarding by an amount different from the change in TTL of that
flow's establishment packet, it MUST add a DSR header specifying the
Hop Count of this node as well as the Flow ID that the packet was
sent along.
If a DSR packet is received from the previous hop using default flow
forwarding, and the packet has an unexpected TTL, the receiving node
MUST insert a DSR header specifying the Hop Count of this node as
well as the Flow ID of the default flow.
Hu, Johnson, and Maltz Expires 23 July 2001 [Page 5]
INTERNET-DRAFT Flow State in DSR 23 February 2001
2.7. Loop Detection
If a node receives a packet for forwarding with adjusted TTL
lower than expected and default flow forwarding is being used, it
sends a Route Error of type Default Flow Unknown back to the IP
source. It can attempt delivery of the packet by normal salvaging
(subject to constraints described in Section 5.6) or by inserting a
Flow ID option with Special TTL extension based on what that node's
understanding of the default Flow ID and TTL.
2.8. Acknowledgement Destination
In the base specification, nodes sending Acknowledgements determine
the previous hop by examining the Source Route option. In packets
sent using Flow State, the previous hop is not necessarily known.
In order to allow nodes that have lost flow state to determine the
previous hop, the address of the previous hop can optionally be
stored in the Acknowledgement Request. This extension SHOULD NOT be
used when a Source Route option is present, MAY be used when flow
state routing is used without a Source Route option, and SHOULD be
used before Route Maintenance determines that a packet cannot be
successfully sent.
2.9. Crash Recovery
Each node has a maximum Timeout value that it can possibly generate.
This can be based on the largest number that can be set in a timeout
option (2**16 - 1 seconds) or set in system software. When a node
crashes, it does not establish new flows for a period equal to this
maximum Timeout value, in order to avoid colliding with its old
Flow IDs.
2.10. Rate Limiting
Flow IDs can be assigned with a counter. More specifically, the
"Current Flow ID" is kept. When a new default Flow ID needs to be
assigned, if the Current Flow ID is odd, the Current Flow ID is
assigned as the Flow ID and the Current Flow ID is incremented by
one; if the Current Flow ID is even, one plus the Current Flow ID is
assigned as the Flow ID and the Current Flow ID is incremented by
two.
If Flow IDs are assigned in this way, one algorithm for avoiding
duplicate, unexpired Flow IDs is to rate limit new Flow IDs to an
average rate of n assignments per second, where n is 2**15 divided by
the maximum Timeout value. This can be averaged over any period not
exceeding the maximum Timeout value.
Hu, Johnson, and Maltz Expires 23 July 2001 [Page 6]
INTERNET-DRAFT Flow State in DSR 23 February 2001
2.11. Interaction with Salvaging
Salvaging in the base protocol is modified to zero the Flow ID field.
Also, any time the base DSR specification refers to the Salvage field
in the Source Route option in a DSR header, packets without a Source
Route option are considered to have the value zero in the Salvage
field.
Hu, Johnson, and Maltz Expires 23 July 2001 [Page 7]
INTERNET-DRAFT Flow State in DSR 23 February 2001
3. Conceptual Data Structures
This section describes conceptual data structures added to those in
the base specification. In an implementation of the protocol, these
data structures MAY be implemented in any manner consistent with the
external behavior described in this document.
3.1. Flow Table
The Flow Table records information about flows from which packets
have been recently sent or forwarded by this node. The table is
indexed by a triple (IP Source Address, IP Destination Address,
Flow ID), where Flow ID is a 16-bit token assigned by the source as
described in Section 2.1. The table
- MUST keep outgoing interface
- MUST keep outgoing MAC destination
- MUST keep a timeout
- MUST keep a Hop Count
- MUST keep an expected TTL
- MUST keep an indication of whether or not this flow can be used
as default if the source is this node and the Flow ID is odd
- SHOULD keep expected previous hop
- SHOULD keep the complete source route (Nodes not keeping complete
source route information cannot participate in Automatic Route
Shortening)
- SHOULD keep a flag indicating whether or not the next hop of this
flow is in range
- MAY keep a last-used time
- MAY keep a list of all links in this flow
The entry MUST be deleted when the timeout expires.
The flag indicating whether or not the next hop of this flow is in
range essentially serves as a negative cache of this link and can
reduce the number of transmission attempts along broken links.
Hu, Johnson, and Maltz Expires 23 July 2001 [Page 8]
INTERNET-DRAFT Flow State in DSR 23 February 2001
3.2. Automatic Route Shortening Table
The Automatic Route Shortening Table records packets for which
Automatic Route Shortening may be possible. The table is indexed by
a triple (IP Source Address, IP Destination Address, Flow ID), and
- MUST keep a list of (Packet, Shortened Route) pairs
- MAY expire packets at any time
3.3. Default Flow ID Table
For each (source, destination) pair for which a node forwards
packets, it MUST record:
- the largest odd Flow ID seen
- the time at which all of this pair's flows that are forwarded by
this node expire
- the current canonical Flow ID
- a flag indicating whether or not the current canonical Flow ID is
valid
If a node deletes this record for a (source, destination) pair,
it MUST also delete all Flow Table entries for that (source,
destination) pair. Nodes MUST delete table entries if all of this
pair's flows that are forwarded by this node expire.
Hu, Johnson, and Maltz Expires 23 July 2001 [Page 9]
INTERNET-DRAFT Flow State in DSR 23 February 2001
4. Packet Formats
The DSR flow state extension requires a new header type, the DSR Flow
State header.
In addition, this extension adds the following three options for the
DSR header defined in the base DSR specification:
- Virtual Route Option
- Timeout Option
- Destination and Flow ID Option
Two new Error Type values are defined for use in the Route Error
option in a DSR header:
- Unknown Flow
- Default Flow Unknown
Finally, an extension to the Acknowledgement Request option in a DSR
header is also defined:
- Previous Hop Address
Hu, Johnson, and Maltz Expires 23 July 2001 [Page 10]
INTERNET-DRAFT Flow State in DSR 23 February 2001
4.1. DSR Flow State Header
The DSR Flow State header is a small 4-byte header optionally used to
carry the flow ID and hop count for a packet being sent along a DSR
flow.
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Header | Hop Count | Flow Identifier |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Next Header
8-bit selector. Identifies the type of header immediately
following the Destination Options header. Uses the same values
as the IPv4 Protocol field [3].
Hop Count
8-bit unsigned integer. The number of hops through which this
packet has been forwarded.
Flow Identification
The flow ID for this flow, as described in Section 2.1.
Hu, Johnson, and Maltz Expires 23 July 2001 [Page 11]
INTERNET-DRAFT Flow State in DSR 23 February 2001
4.2. DSR Header Options and Extensions
4.2.1. Virtual Route Option
A Virtual Route is defined for use in a DSR header to indicate that
a DSR node processing the DSR header should stop processing further
options after this point in the header. This option is encoded as
follows:
0 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Option Type | Option Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Option Type
8
Option Length
8-bit unsigned integer. Length of the option, in octets,
excluding the Option Type and Option Length fields.
When no extensions are present, the Option Length of a Virtual
Route Option is 0. Further extensions to DSR may include
additional data in a Virtual Route Option. The presence of
such extensions is indicated by an Option Length greater
than 0. Currently, no such extensions have been defined.
The Virtual Route option MAY appear one or more times within a DSR
header.
Hu, Johnson, and Maltz Expires 23 July 2001 [Page 12]
INTERNET-DRAFT Flow State in DSR 23 February 2001
4.2.2. Timeout Option
The Timeout option is defined for use in a DSR header to indicate the
amount of time before the expiration of the flow ID along which the
packet is being sent.
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 | Timeout |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Option Type
9
Option Length
8-bit unsigned integer. Length of the option, in octets,
excluding the Option Type and Option Length fields.
When no extensions are present, the Option Length of a Timeout
Option is 2. Further extensions to DSR may include additional
data in a Timeout Option. The presence of such extensions is
indicated by an Option Length greater than 2. Currently, no
such extensions have been defined.
Timeout
The number of seconds for which this flow remains valid.
The Timeout option MUST NOT appear more than once within a DSR
header.
Hu, Johnson, and Maltz Expires 23 July 2001 [Page 13]
INTERNET-DRAFT Flow State in DSR 23 February 2001
4.2.3. Destination and Flow ID Option
The Destination and Flow ID option is defined for use in a DSR header
to send a packet to an intermediate host along one flow, for eventual
forwarding to the final destination along a different flow. This
option enables the aggregation of the state of multiple flows.
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Option Type | Option Length | New Flow Identifier |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| New IP Destination Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Option Type
10
Option Length
8-bit unsigned integer. Length of the option, in octets,
excluding the Option Type and Option Length fields.
When no extensions are present, the Option Length of a
Destination and Flow ID Option is 6. Further extensions to
DSR may include additional data in a Destination and Flow ID
Option. The presence of such extensions is indicated by an
Option Length greater than 6. Currently, no such extensions
have been defined.
New Flow Identifier
Indicates the next identifier to store in the Flow ID field of
the DSR header.
New IP Destination Address
Indicates the next address to store in the Destination Address
field of the IP header.
The Destination and Flow ID Option MAY appear one or more times
within a DSR header.
Hu, Johnson, and Maltz Expires 23 July 2001 [Page 14]
INTERNET-DRAFT Flow State in DSR 23 February 2001
4.2.4. New Error Type Value for Unknown Flow
A new Error Type value of 129 (Unknown Flow) is defined for use in a
Route Error option in a DSR header. The Type-Specific Information
for errors of this type is encoded as follows:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Original IP Destination Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Flow~ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Original IP Destination Address
The IP Destination Address of the packet that caused the error.
Flow ID
The Flow ID contained in the DSR Flow ID Option that caused the
error.
Hu, Johnson, and Maltz Expires 23 July 2001 [Page 15]
INTERNET-DRAFT Flow State in DSR 23 February 2001
4.2.5. New Error Type Value for Default Flow Unknown
A new Error Type value of 130 (Default Flow Unknown) is defined for
use in a Route Error option in a DSR header. The Type-Specific
Information for errors of this type is encoded as follows:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Original IP Destination Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Original IP Destination Address
The IP Destination Address of the packet that caused the error.
Hu, Johnson, and Maltz Expires 23 July 2001 [Page 16]
INTERNET-DRAFT Flow State in DSR 23 February 2001
4.2.6. Acknowledgement Request Option Previous Hop Address Extension
When the Option Length field of an Acknowledgement Request option in
a DSR header is greater than or equal to 6, a Previous Hop Address
Extension is present. The option is then formatted as follows:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Option Type | Option Length | Packet Identifier |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ACK Request Source Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Option Type
5
Option Length
8-bit unsigned integer. Length of the option, in octets,
excluding the Option Type and Option Length fields.
When no extensions are present, the Option Length of a
Acknowledgement Request Option is 2. Further extensions to
DSR may include additional data in a Acknowledgement Request
Option. The presence of such extensions is indicated by an
Option Length greater than 2.
Currently, one such extension has been defined. If the
Option Length is at least 6, then a ACK Request Source Address
is present.
Packet Identifier
The Packet Identifier field is set to a unique number and is
copied into the Identification field of the DSR Acknowledgement
option when returned by the node receiving the packet over this
hop.
ACK Request Source Address
The address of the node requesting the DSR Acknowledgment.
Hu, Johnson, and Maltz Expires 23 July 2001 [Page 17]
INTERNET-DRAFT Flow State in DSR 23 February 2001
5. Detailed Operation
5.1. Originating a Packet
When originating any packet to be routed using flow state, a node
using DSR Flow State MUST:
- If the route to be used for this packet has never had a DSR Flow
State established along it:
* Generate a 16-bit Flow ID larger than any unexpired Flow IDs
used for this destination. Odd Flow IDs MUST be chosen for
"default" flows; even Flow IDs MUST be chosen for non-default
flows
* Add a DSR header, as specified in the base DSR protocol
specification
* Add a DSR Flow State header, as described in Section 5.1.1
* Set the Flow ID field in the DSR Flow State header to the
Flow ID generated in the first step
* Add a Timeout Option to the DSR header
* Add a Source Route option after the Timeout Option with the
route to be used, as specified in the base DSR protocol
specification
* The source SHOULD record this flow in its Flow Table
* If this flow is recorded in the Flow Table, the TTL MUST be
set to be the TTL of the flow establishment packet.
* If this flow is recorded in the Flow Table, the timeout MUST
be set to a value no less than the value specified in the
Timeout Option.
- If the route to be used for this packet has had DSR Flow State
established along it, but has not been established end-to-end
* Add a DSR header, as specified in the base DSR protocol
specification
* Add a DSR Flow State header, as described in Section 5.1.1
* The Flow ID field of the DSR Flow State header SHOULD be the
Flow ID previously used for this route. If it is not, the
steps for sending packets along never before established
routes MUST be followed in place of these.
Hu, Johnson, and Maltz Expires 23 July 2001 [Page 18]
INTERNET-DRAFT Flow State in DSR 23 February 2001
* Add a Timeout Option to the DSR header, setting the Timeout
to a value not greater than the timeout remaining for this
flow in the Flow Table.
* Add a Source Route option after the Timeout Option with the
route to be used, as specified in the base DSR protocol
specification
* If the IP TTL is not equal to the TTL specified in the Flow
Table, the source MUST set a flag to indicate that this flow
cannot be used as default.
- If the route the node wishes to use for this packet has been
established end-to-end and is not default
* Add a DSR Flow State header, as described in Section 5.1.1
* The Flow ID field of the DSR Flow State header SHOULD be the
Flow ID previously used for this route. If it is not, the
steps for sending packets along never before established
routes MUST be followed in place of these.
* If the next hop requires a Hop-by-Hop acknowledgement,
add a DSR header, as specified in the base DSR protocol
specification, and an Acknowledgement Request Option, as
specified in the base DSR protocol specification.
* A DSR header SHOULD NOT be added to a packet, unless it is
added to carry an Acknowledgement Request Option, in which
case:
+ A Source Route option in the DSR header SHOULD NOT be
added.
+ If a Source Route option in the DSR header is added,
the steps for sending packets along routes not yet
established end-to-end MUST be followed in place of
these.
+ A Timeout Option SHOULD NOT be added.
+ If a Timeout Option is added, it MUST specify a timeout
not greater than the timeout remaining for this flow in
the Flow Table.
- If the route the node wishes to use for this packet has been
established end-to-end and is the current default
* If the IP TTL is not equal to the TTL specified in the Flow
Table, the source MUST follow the steps for sending a packet
along a non-default flow that has been established end-to-end
in place of these steps.
Hu, Johnson, and Maltz Expires 23 July 2001 [Page 19]
INTERNET-DRAFT Flow State in DSR 23 February 2001
* If the next hop requires a Hop-by-Hop acknowledgement, the
sending node MUST add a DSR header and an Acknowledgement
Request Option, as specified in the base DSR protocol
specification. The sending node MUST NOT add any additional
options to this header.
* A DSR header SHOULD NOT be added, except as specified in
the previous step. If one is added in a way inconsistent
with the previous step, the source MUST follow the steps
for sending a packet along a non-default flow that has been
established end-to-end in place of these steps.
5.1.1. Inserting a DSR Flow State Header
A node originating a packet adds a DSR Flow State header to the
packet, if necessary, to carry information needed by the routing
protocol. Only one DSR Flow State header may be in any packet.
A DSR Flow State header is added to a packet by performing the
following sequence of steps:
- Insert a DSR Flow State header after the IP header and any
Hop-by-Hop Options header that may already be in the packet, but
before any other header that may be present.
- Set the Next Header field of the DSR Flow State header to the
Next Header field of the previous header (either an IP header or
a Hop-by-Hop Options header).
- Set the Next Header field of the previous header to the Protocol
number assigned to DSR Flow State headers.
5.2. Receiving a Packet
This section describes processing only for packets that are sent to
the processing node; that is, when the MAC Destination Address is the
MAC address of the processing node. Otherwise, the process described
in Sections 5.4 should be followed.
The flow that a packet is being sent along is considered to be in the
Flow Table if the triple (IP Source Address, IP Destination Address,
Flow ID) has an unexpired entry in the flow table.
When a node using DSR Flow State receives a packet, it MUST follow
the following steps for processing:
- If a DSR Flow State header is present, increment the Hop Count
field
- If the triple (IP Source Address, IP Destination Address,
Flow ID) is in the Automatic Route Shortening table, and the
Hu, Johnson, and Maltz Expires 23 July 2001 [Page 20]
INTERNET-DRAFT Flow State in DSR 23 February 2001
packet is in the entry, the node MAY send a Gratuitous Reply as
described in the base specification, giving any routes by which
the packet originally reached this node, subject to the rate
limiting specified in the base DSR protocol specification. If
no DSR Flow State header is present, and no Source Route option
is present, then for the purposes of this step, the Flow ID is
equal to the default Flow ID in the Default Flow Table for the
(IP Source Address, IP Destination Address) pair. If no DSR Flow
State header is present but a Source Route option is present,
skip this step.
- Process each of the Options within the DSR header in order:
* On receiving a Pad1 or PadN option, skip over the option
* On receiving a Route Request for which this node is the
destination, remove the option and return a Route Reply as
specified in the base DSR protocol specification
* On receiving a broadcast Route Request that this node has not
previously seen for which this node is not the destination,
append this node's incoming interface address to the Route
Request, continue propagating the Route Request as specified
in the base DSR protocol specification, send the payload, if
any, to the network layer, and stop processing.
* On receiving a Route Request that this node has not
previously seen for which this node is not the destination,
discard the packet and stop processing.
* On receiving any Route Request, add appropriate links to the
cache, as specified in the base DSR protocol specification.
* On receiving a Route Reply that this node is the Requester
for, remove the Route Reply from the packet and process it as
specified in the base DSR protocol specification.
* On receiving any Route Reply, add appropriate links to the
cache, as specified in the base DSR protocol specification.
* On receiving any Route Error of type NODE_UNREACHABLE, remove
appropriate links to the cache, as specified in the base DSR
protocol specification.
* On receiving a Route Error of type NODE_UNREACHABLE that this
node is the Error Destination Address of, remove the Route
Error from the packet and process it as specified in the base
DSR protocol specification. It also MUST stop originating
packets along any flows using the link from Error Source
Address to Unreachable Node, and it MAY remove from its Flow
Table any flows using the link from Error Source Address to
Unreachable Node.
Hu, Johnson, and Maltz Expires 23 July 2001 [Page 21]
INTERNET-DRAFT Flow State in DSR 23 February 2001
* On receiving a Route Error of type UNKNOWN_FLOW that this
node is the Error Destination Address of, remove the Route
Error from the packet and mark the flow specified by the
triple (Error Destination Address, Original IP Destination
Address, Flow ID) as not having been established end-to-end.
* On receiving a Route Error of type DEFAULT_FLOW_UNKNOWN that
this node is the Error Destination Address of, remove the
Route Error from the packet and mark the default flow between
the Error Destination Address and the Original IP Destination
Address as not having been established end-to-end.
* On receiving a Acknowledgment Request option, the receiving
node removes the Acknowledgement Request option and replies
to the previous hop with a Acknowledgement option. If the
previous hop cannot be determined, the Acknowledgement
Request option is discarded, and processing continues.
* On receiving a Acknowledgement option, the receiving node
removes the Acknowledgement option and processes it.
* On receiving any Acknowledgement option, add the appropriate
link to the cache, as specified in the base DSR protocol
specification.
* On receiving any Source Route option, add appropriate
links to the cache, as specified in the base DSR protocol
specification.
* On receiving a Source Route option and either no DSR Flow
State header is present, the flow this packet is being sent
along is in the Flow Table, or no Timeout Option preceded
the Source Route option in this DSR header, process it as
specified in the base DSR protocol specification. Stop
processing this packet unless the last address in the Source
Route option is an address of this node.
* On receiving a Source Route option in a packet with a DSR
Flow State header, and the Flow ID specified in the DSR Flow
State header is not in the Flow Table, add the flow to the
Flow Table, setting the Timeout value to a value not greater
than the Timeout field of the Timeout Option in this header.
If no Timeout Option preceded the Source Route option in this
header, the flow MUST NOT be added to the Flow Table.
If the Flow ID is odd and larger than any unexpired, odd
Flow IDs, it is set to be default in the Default Flow ID
Table.
Then process the Route Option as specified in the base DSR
protocol specification. Stop processing this packet unless
Hu, Johnson, and Maltz Expires 23 July 2001 [Page 22]
INTERNET-DRAFT Flow State in DSR 23 February 2001
the last address in the Source Route option is an address of
this node.
* On receiving a Virtual Route Option, when the IP Destination
Address is an address of this node, discard the Option and
continue processing.
* On receiving a Virtual Route Option, when the IP Destination
Address is not an address of this node, forward the packet
according to the Flow ID, as described in Section 5.3 stop
processing this packet.
* On receiving a Timeout Option, check if this packet contains
a DSR Flow State header. If this packet does not contain a
DSR Flow State header, discard the Option. Otherwise, record
the Timeout value in the option for future reference. The
value recorded SHOULD be discarded when the node has finished
processing this DSR header. If the flow that this packet is
being sent along is in the Flow Table, it MAY set the flow to
time out no more than Timeout seconds in the future.
* On receiving a Destination and Flow ID Option, if the
IP Destination Address is not an address of this node,
forward the packet according to the Flow ID, as described in
Section 5.3, and stop processing this packet.
* On receiving a Destination and Flow ID Option, if the IP
Destination Address is an address of this node, set the
IP Destination Address to the New IP Destination Address
specified in the option, and set the Flow ID to the New
Flow Identifier. Then remove the Option from the packet and
continue processing.
- If the IP Destination Address is an address of this node, remove
the DSR header, if any, and pass the packet up the network stack
and stop processing.
- If there is still a DSR header containing no options, remove the
DSR header.
- If there is still a DSR Flow State header, forward the packet
according to the Flow ID, as described in Section 5.3.
- If there is neither a DSR header nor a DSR Flow State header, but
there is an entry in the Default Flow Table for the (IP Source
Address, IP Destination Address) pair:
* If the IP TTL is not equal to the TTL expected in the Flow
Table, insert a DSR Flow State header, setting Hop Count
equal to the Hop Count of this node, and the Flow ID equal
to the default Flow ID found in the table, and forward this
packet according to the Flow ID, as described in Section 5.3.
Hu, Johnson, and Maltz Expires 23 July 2001 [Page 23]
INTERNET-DRAFT Flow State in DSR 23 February 2001
* Otherwise, follow the steps for forwarding the packet using
Flow IDs described in Section 5.3, but taking the Flow ID to
be the default Flow ID found in the table.
- If there is no DSR header, no DSR Flow State header, and no
default flow can be found, the node returns a Route Error of
type Default Flow Unknown to the IP Source Address, specifying
the IP Destination Address as the Original IP Destination in the
type-specific field.
5.3. Forwarding a Packet Using Flow IDs
To forward a packet using Flow IDs, a node MUST follow the following
sequence of steps:
- If the triple (IP Source Address, IP Destination Address,
Flow ID) is not in the Flow Table, return a Route Error of type
Unknown Flow.
- If a hop-by-hop acknowledgement is required for the next hop, the
node MUST include an Acknowledegment Request option as specified
in the base DSR protocol specification. If no DSR header is in
the packet for the Acknowledgement Request option to be attached
to, it MUST be included, as specified in the base DSR protocol
specification, except that it MUST be added after the DSR Flow
State header, if one is present.
- Attempt to transmit this packet to the next hop as specified in
the Flow Table, performing Route Maintenance to detect broken
routes.
5.4. Promiscuously Receiving a Packet
This section describes processing only for packets that have MAC
destinations other than the processing node. Otherwise, the process
described in Section 5.2 should be followed.
When a node using DSR Flow State promiscuously overhears a packet, it
SHOULD follow the following steps for processing:
- If the packet has a DSR Flow State header, and if the triple (IP
Source Address, IP Destination Address, Flow ID) is in the Flow
Table and the Hop Count is less than the Hop Count in the flow's
entry, the node MAY retain the packet in the Automatic Route
Shortening table. If it can be determined that this Flow ID has
been recently used, it SHOULD retain the packet in the Automatic
Route Shortening table.
- If the packet has neither a DSR Flow State header nor a Source
Route option, and a Default Flow ID can be found in the Default
Hu, Johnson, and Maltz Expires 23 July 2001 [Page 24]
INTERNET-DRAFT Flow State in DSR 23 February 2001
Flow Table for (IP Source Address, IP Destination Address), and
the IP TTL is greater than the TTL in the table for the default
flow, the node MAY retain the packet in the Automatic Route
Shortening table. If it can be determined that this Flow ID has
been recently used, it SHOULD retain the packet in the Automatic
Route Shortening table.
5.5. Operation Where the Layer Below DSR Decreases the IP TTL
Non-Uniformly
Some nodes may use an IP tunnel as a DSR hop. If different packets
sent along this IP tunnel can take different routes, the reduction
in IP TTL across this link may be different for different packets.
This prevents the Automatic Route Shortening and Loop Detection
functionality from working properly when used in conjunction with
default routes.
Nodes forwarding packets without a Source Route option on to a link
with unpredictable TTL changes MUST ensure that a DSR Flow State
header is present, indicating the correct Hop Count and Flow ID.
5.6. Salvage Interactions with DSR
Nodes salvaging packets MUST remove the DSR Flow State header, if
present.
Any time the base specification refers to the Salvage field in the
Source Route option, packets without a Source Route option are
considered to have the value zero in the Salvage field.
Hu, Johnson, and Maltz Expires 23 July 2001 [Page 25]
INTERNET-DRAFT Flow State in DSR 23 February 2001
6. IANA Considerations
This document contains no new IANA considerations beyond those
required by the base DSR protocol specification [2].
7. Security Considerations
All security considerations outlined in the base DSR protocol
specification [2] apply to this document as well.
Hu, Johnson, and Maltz Expires 23 July 2001 [Page 26]
INTERNET-DRAFT Flow State in DSR 23 February 2001
Implementation Status
A preliminary version of the flow state modifications described here
was implemented in FreeBSD 3.3. A demonstration of this modified
version of DSR was presented in July 2000.
Hu, Johnson, and Maltz Expires 23 July 2001 [Page 27]
INTERNET-DRAFT Flow State in DSR 23 February 2001
References
[1] Scott Bradner. Key words for use in RFCs to indicate requirement
levels. RFC 2119, March 1997.
[2] David B. Johnson, David A. Maltz, Yih-Chun Hu, and Jorjeta
Jetcheva. The Dynamic Source Routing protocol for mobile ad hoc
networks. Internet-Draft, draft-ietf-manet-dsr-05.txt, March
2001. Work in progress.
[3] Joyce K. Reynolds and Jon Postel. Assigned numbers. RFC 1700,
October 1994. See also http://www.iana.org/numbers.html.
Hu, Johnson, and Maltz Expires 23 July 2001 [Page 28]
INTERNET-DRAFT Flow State in DSR 23 February 2001
Chair's Address
The MANET Working Group can be contacted via its current chairs:
M. Scott Corson Phone: +1 301 405-6630
Institute for Systems Research Email: corson@isr.umd.edu
University of Maryland
College Park, MD 20742
USA
Joseph Macker Phone: +1 202 767-2001
Information Technology Division Email: macker@itd.nrl.navy.mil
Naval Research Laboratory
Washington, DC 20375
USA
Hu, Johnson, and Maltz Expires 23 July 2001 [Page 29]
INTERNET-DRAFT Flow State in DSR 23 February 2001
Authors' Addresses
Questions about this document can also be directed to the authors:
Yih-Chun Hu Phone: +1 412 268-3075
Carnegie Mellon University Fax: +1 412 268-5576
Computer Science Department Email: yihchun@cs.cmu.edu
5000 Forbes Avenue
Pittsburgh, PA 15213-3891
USA
David B. Johnson Phone: +1 713 348-3063
Rice University Fax: +1 713 348-5930
Computer Science Department, MS 132 Email: dbj@cs.rice.edu
6100 Main Street
Houston, TX 77005-1892
USA
David A. Maltz Phone: +1 650 688-3128
AON Networks Fax: +1 650 688-3119
3045 Park Blvd. Email: dmaltz@cs.cmu.edu
Palo Alto, CA 94306
USA
Hu, Johnson, and Maltz Expires 23 July 2001 [Page 30]