Internet Engineering Task Force U. Herberg
Internet-Draft A. Cardenas
Intended status: Experimental Fujitsu Laboratories
Expires: May 3, 2012 S. Cespedes
U. Icesi/U. of Waterloo
T. Iwao
Fujitsu Limited
October 31, 2011
Depth-First Forwarding in Unreliable Networks
draft-cardenas-dff-02
Abstract
This document describes the Depth-First Forwarding (DFF) protocol for
IPv6 networks based on the IEEE 802.15.4 link layer (6lowpan). The
protocol is a mesh-under data forwarding mechanism that increases
reliability of data delivery in cases where the next hop along the
path to the destination, as determined by the underlying routing
protocol, is not reachable. In that case, a node running DFF tries
to forward the packet successively to all neighbors, and - if the
packet makes no forward progress - returns it to the previous hop,
similar to a "depth-first search" in graph theory.
Status of this Memo
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/.
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."
This Internet-Draft will expire on May 3, 2012.
Copyright Notice
Copyright (c) 2011 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal
Herberg, et al. Expires May 3, 2012 [Page 1]
Internet-Draft DFF October 2011
Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License.
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1. Motivation . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Notation and Terminology . . . . . . . . . . . . . . . . . . . 4
2.1. Notation . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.2. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4
3. Applicability Statement . . . . . . . . . . . . . . . . . . . 5
4. Protocol Overview and Functioning . . . . . . . . . . . . . . 5
5. Data Structures . . . . . . . . . . . . . . . . . . . . . . . 7
5.1. Neighbor Set . . . . . . . . . . . . . . . . . . . . . . . 7
5.2. Routing Set . . . . . . . . . . . . . . . . . . . . . . . 7
5.3. Processed Set . . . . . . . . . . . . . . . . . . . . . . 7
6. Packet Format . . . . . . . . . . . . . . . . . . . . . . . . 8
7. Protocol Parameters and Constants . . . . . . . . . . . . . . 9
8. Data Packet Generation and Processing . . . . . . . . . . . . 9
8.1. Data Packet Generation . . . . . . . . . . . . . . . . . . 10
8.2. Data Packet Processing . . . . . . . . . . . . . . . . . . 10
9. Missed Link Layer Acknowledgment when Sending a Packet . . . . 12
10. Getting the Next Hop for a Packet . . . . . . . . . . . . . . 13
11. Poisoning . . . . . . . . . . . . . . . . . . . . . . . . . . 13
12. Proposed Values for Parameters and Constants . . . . . . . . . 14
13. Security Considerations . . . . . . . . . . . . . . . . . . . 14
14. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 14
15. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 14
16. Normative References . . . . . . . . . . . . . . . . . . . . . 14
Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 14
A.1. Example 1: Normal Delivery . . . . . . . . . . . . . . . . 15
A.2. Example 2: Forwarding with Link Failure . . . . . . . . . 15
A.3. Example 3: Forwarding with Missed Link Layer
Acknowledgment . . . . . . . . . . . . . . . . . . . . . . 16
A.4. Example 4: Forwarding with a Loop . . . . . . . . . . . . 17
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 18
Herberg, et al. Expires May 3, 2012 [Page 2]
Internet-Draft DFF October 2011
1. Introduction
This document describes the Depth-First Forwarding (DFF) protocol for
IPv6 networks based on the IEEE 802.15.4 link layer, as specified in
[RFC4944]. The protocol is a mesh-under data forwarding mechanism
that increases reliability of data delivery in cases where the next
hop along the path to the destination, as determined by the
underlying routing protocol, is not reachable. In that case, a node
running DFF tries to forward the packet successively to all
neighbors, and - if the packet makes no forward progress - returns it
to the previous hop, similar to a "depth-first search" in graph
theory.
As network topologies do not necessarily form a tree, loops can
occur. Therefore, DFF contains a loop detection and avoidance
mechanism.
While rerouting the packet through alternative next hops, the routing
table can be updated, and thus, DFF provides an optional local route
repair mechanism.
Any underlying mesh-under routing mechanism can be used with DFF, as
long as such routing mechanism provides lists of bidirectional
neighbors for each node. This specification assumes there is such a
protocol in place and outlines the requirements for that protocol, as
well as the interaction between the specified forwarding mechanism
and the routing protocol.
1.1. Motivation
In networks with very dynamic topologies, even frequent exchanges of
control messages between nodes for updating the routing tables cannot
guarantee freshness of routes: packets may not be delivered to their
destination because the topology has changed since the last routing
protocol update.
While more frequent routing protocol updates could mitigate that
problem to a certain extent, more frequent routing protocol updates
require network bandwidth (e.g. when flooding control messages
through the network for route discovery). This is an issue in
networks with very lossy links, where further control traffic
exchange can worsen the network stability. Moreover, additional
control traffic exchange (e.g. network-wide floods) drains energy
from battery-driven nodes.
The data-forwarding mechanism specified in this document allows
forwarding data packets along alternate paths for increasing
reliability of data delivery, using a depth-first search. The
Herberg, et al. Expires May 3, 2012 [Page 3]
Internet-Draft DFF October 2011
objective is to decrease the necessary control traffic overhead of
the underlying routing protocol, and in the same time to increase
delivery success rates. Optionally, the underlying routing protocol
can be informed about the updated topology, and routes can then be
repaired.
2. Notation and Terminology
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in
[RFC2119].
Additionally, this document uses the notation in Section 2.1 and the
terminology in Section 2.2.
2.1. Notation
The following notations are used in this document:
List - A list of elements is defined as [] for an empty list,
[element] for a list with one element, and [element1, element2,
...] for a list with multiple elements.
Concatenation of lists: If L1 and L2 are lists, then L1@L2 is a new
list with all elements of L2 concatenated to L1.
2.2. Terminology
All terms introduced in [RFC4944] are to be interpreted as described
therein.
Additionally, this document uses the following terminology:
Address - An address is either a 16-bit short or a EUI-64 link layer
address, as specified in [RFC4944].
Packet - An IPv6 packet encapsulated in a IEEE 802.15.4 frame, using
the LoWPAN adaption layer as specified in [RFC4944].
Originator Address - An address of a node that is included as source
address in the packet header.
Herberg, et al. Expires May 3, 2012 [Page 4]
Internet-Draft DFF October 2011
3. Applicability Statement
This protocol:
o Is applicable for use in IEEE 802.15.4 based networks, using the
frame format for transmission of IPv6 packets defined in
[RFC4944].
o Assumes addresses used in the network are either 16-bit short or
EUI-64 link layer address, as specified in [RFC4944].
o Operates as "mesh-under" forwarding protocol, i.e. on the link
layer. While the proposed mechanism could also be used as "route-
over", this is not specified in this document and thus out of
scope.
o Is designed to work in networks with lossy links or with a dynamic
topology.
o Relies on an underlying mesh-under routing protocol. This routing
protocol MUST provide a list of bidirectional neighbors of a node,
and MAY provide one more multiple paths to destinations in the
network (i.e. store one or more next hop nodes for a destination
with an associated routing cost).
o Increases reliability of data delivery by trying alternative
paths, using a "depth-first forwarding" approach.
o Provides a loop detection mechanism, and an optional local route
repair mechanism.
o Is designed to work in a completely distributed manner, and does
not depend on any central entity.
4. Protocol Overview and Functioning
DFF is a mesh-under data forwarding mechanism responsible for
detecting loops, choosing alternate next hops, and optionally
updating the cost metrics in the routing tables to reflect
information gathered by forwarding data packets. DFF operates on
6lowpan based networks (using the frame format and the transmission
of IPv6 packets defined in [RFC4944]).
DFF is intended to work in a network where nodes maintain a
bidirectional neighbor table as candidates for a possible next hop of
a packet, and a routing table with one or more candidate next hops
for each final destination.
Herberg, et al. Expires May 3, 2012 [Page 5]
Internet-Draft DFF October 2011
DFF provides advantages in networks where the reliability of links is
low and the link quality may change rapidly. It assumes that the
control plane mechanism cannot guarantee up-to-date routing tables,
nor necessarily the absence of loops. Therefore, whenever a data
packet is forwarded, DFF stores a data packet identifier to detect
loops, and uses alternate paths to reroute the packet to the
destination, optionally updating routing tables if a loop is
detected.
DFF achieves this functionality by implementing a distributed depth-
first search over the network graph. If the routing tables are up-
to-date, the search only involves the default route (i.e. uses the
shortest path as calculated by the underlying routing protocol).
However, if the routing table is not up-to-date and forwarding of a
data packet results in a loop, or if the link layer fails to
successfully transmit the packet to the next hop, the data packet is
sent to an alternate next hop neighbor. This alternate next hop is
selected from the neighbor set of the underlying mesh-under routing
protocol, using a descending order of priority which takes into
account link metrics. DFF lists for each recently forwarded packet
which neighbors that packet has been sent to, allowing for trying to
forward the packet to all candidates for the next hop.
If none of the transmissions to the neighbors has succeeded, the
packet is returned to the previous hop, indicated by setting a return
(RET) flag, which is defined in a 6lowpan dispatch byte. The
previous hop then continues to try other neighbors in turn, resulting
in a depth-first search in the network.
Whenever a packet has been sent to a neighbor and no link layer
acknowledgment (ACK) has been received, the duplicate (DUP) flag is
set in the packet header for the following transmissions. The
rationale is that the packet may have been successfully received by
the neighbor and only the ACK has been lost, resulting in duplicates
of the packet in the network. The DUP flag tags such a possible
duplicate.
Whenever a node receives a packet that it has already forwarded, and
which is not a duplicate (as indicated by the DUP flag), it will
assume a loop and return the packet to the previous hop (with the RET
flag set). Optionally, the link to the next hop to which the node
has originally sent the packet may be "poisoned" (i.e. the link cost
will be increased).
DFF requires an underlying mechanism that minimally provides a list
of bidirectional neighbors of a node. However, in order to avoid
sending a packet to any random neighbor as next hop, and therefore
possibly performing a network-wide depth-first search, it is
Herberg, et al. Expires May 3, 2012 [Page 6]
Internet-Draft DFF October 2011
recommended to implement DFF in combination with a routing protocol
that provides multiple paths to a destination, in order to
efficiently choose alternative next hops.
5. Data Structures
This section specifies optional and mandatory data structures of DFF.
DFF itself is no routing protocol, but a data forwarding protocol.
However, DFF relies on some information from the underlying routing
protocol, in order to perform the depth-first search.
5.1. Neighbor Set
DFF MUST have read access to a list of bidirectional neighbors,
henceforth called "Neighbor Set", provided by the underlying routing
protocol. The Neighbor Set MUST at least provide the addresses of
the direct neighbors of the node, and MAY provide additional
information representing the cost of sending a packet to each
neighbor (e.g. using a link metric). If DFF has write access to the
Neighbor Set, updating link costs ("poisoning") is supported.
5.2. Routing Set
DFF MAY have read access to a list of destinations in the network
with one or more possible next hops for reaching each destination,
henceforth called "Routing Set", provided by the underlying routing
protocol. If the routing protocol provides a Routing Set, it MUST at
least provide the addresses of destinations and one or more possible
next hops to reach that destination, and MAY provide additional
information representing the cost of sending a packet to the
destination (e.g. using a route metric). If DFF has write access to
the Routing Set, updating route costs ("poisoning") is supported.
5.3. Processed Set
Each node MUST maintain a Processed Set in order to support the loop
detection functionality. The Processed Set lists sequence numbers of
previously received packets, as well as a list of next hops to which
the packet has been sent successively as part of the depth-first
search mechanism. The set consists of Processed Tuples:
(P_orig_address, P_seq_number, P_prev_hop,
P_next_hop_neighbor_list, P_time)
where
Herberg, et al. Expires May 3, 2012 [Page 7]
Internet-Draft DFF October 2011
P_orig_address is is the originator address of the received
message;
P_seq_number is the sequence number of the received packet;
P_prev_hop is the address of the previous hop of the packet;
P_next_hop_neighbor_list is a list of addresses of next hops to
which the packet has been sent previously, as part of the depth-
first search mechanism, as explained in Section 8.2;
P_time specifies when this Tuple expires and MUST be removed.
6. Packet Format
This document assumes that the data forwarding as well as the
underlying routing protocol are based on the LoWPAN adaptation layer
("mesh-under"), and that data packets are conform with the packet
format specified in [RFC4944]. In particular, [RFC4944] states that
Additional mesh routing capabilities, such as specifying the mesh
routing protocol, source routing, and so on may be expressed by
defining additional routing headers that precede the fragmentation
or addressing header in the header stack.
Hence, all data packets to be forwarded using DFF MUST be preceded by
the standard mesh (L2) addressing header defined in [RFC4944], and
MAY be preceded by a header that identifies the DFF data forwarding
mechanism, which is defined in the following.
After these two headers, any other LoWPAN header, e.g. hop-by-hop
options, header compression or fragmentation, MAY also be added
before the actual payload. (Figure 1) depicts the mesh header of a
data frame to be forwarded with DFF.
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Mesh type and header |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|0 1| Mesh Forw |D|R|x| DID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 1: Mesh Header for DFF data frames
Field definitions are as follows:
Herberg, et al. Expires May 3, 2012 [Page 8]
Internet-Draft DFF October 2011
Mesh type and header - The mesh (L2) addressing header and its
associated dispatch byte as defined in [RFC4944].
Mesh Forw - A 6-bit identifier that allows for the use of different
mesh forwarding mechanisms. As specified in [RFC4944], additional
mesh forwarding mechanisms should use the reserved dispatch byte
values following LOWPAN_BCO; therefore, 0 1 MUST precede Mesh
Forw. The value of Mesh Forw is LOWPAN_DFF.
Duplicate packet flag (D) - This flag is included in the DFF mesh
header to indicate that the packet has been re-sent as a
duplicate. The flag MUST be set to 1 by the node that re-sends
the packet after detecting link-layer failure to deliver through
the last attempted next-hop, as specified in Section 8.2. Once
the flag is set to 1, it MUST not be modified by nodes forwarding
the packet.
Return packet flag (R) - This flag is included in the DFF mesh
header to indicate that the packet has been returned to the
previous hop after failure to deliver to all the available next-
hops. The flag MUST be set to 1 prior to forwarding the packet
back to the previous hop and MUST be set to 0 prior to forwarding
the packet to the selected next-hop, as specified in Section 8.2.
This flag is modified in a hop-by-hop basis.
Reserved flag (x) - This bit is reserved for future flag
definitions.
DID - This is the data packet identifier. It is a sequence number
generated by the originator, unique on a node for each new
generated packet. The originator address concatenated with the
DID sequence number represent an identifier of previously seen
data packets.
7. Protocol Parameters and Constants
The parameters and constants used in this specification are described
in this section.
P_HOLD_TIME - is the time period after which a newly created
Processed Tuple expires and MUST be deleted.
8. Data Packet Generation and Processing
The following sections describe the process of handling a new packet,
generated on a node (Section 8.1), as well as forwarding a packet
Herberg, et al. Expires May 3, 2012 [Page 9]
Internet-Draft DFF October 2011
from another node (Section 8.2).
8.1. Data Packet Generation
Before a new packet (the "current packet") is transmitted on a node,
the following steps MUST be performed:
1. Add the mesh header to the current packet, as specified in
Section 6, with:
* Duplicate packet flag (D) := 0;
* Return packet flag (R) := 0;
* DID := a new sequence number of the packet.
2. Select the next hop (denoted "next_hop") for the current packet,
as specified in Section 10.
3. Add a Processed Tuple to the Processed Set with:
* P_orig_address := the originator address of this node;
* P_seq_number := the sequence number of the current packet, as
added in the header in Step 1;
* P_prev_hop := the originator address of this node;
* P_next_hop_neighbor_list := [next_hop];
* P_time := current time + P_HOLD_TIME.
4. Forward the current packet to next_hop.
8.2. Data Packet Processing
If a packet (the "current packet") is received on the node, then the
following tasks MUST be performed:
1. If the packet does not contain the DFF header, specified in
Section 6, select the next hop (denoted "next_hop") for the
current packet, as specified in Section 10, and then forward it
to next_hop. This allows for interoperability of nodes sending
packets without DFF, by forwarding them without the specified
depth-first forwarding mechanism.
2. Otherwise, if no Processed Tuple (the "current tuple") exists in
the Processed Set, with:
Herberg, et al. Expires May 3, 2012 [Page 10]
Internet-Draft DFF October 2011
+ P_orig_address = the originator address of the current packet,
AND;
+ P_seq_number = the sequence number of the current packet,
then:
1. add a Processed Tuple (the "current tuple") with:
+ P_orig_address := the originator address of the current
packet;
+ P_seq_number := the sequence number (DID) of the current
packet;
+ P_prev_hop := address of the previous hop of the current
packet;
+ P_next_hop_neighbor_list := [next_hop];
+ P_time := current time + P_HOLD_TIME.
2. Set RET to 0 in the packet DFF header.
3. Select the next hop (denoted "next_hop") for the current
packet, as specified in Section 10, and then forward the
current packet to next_hop. If the transmission fails
(determined by missing link layer acknowledgments), the
procedures in Section 9 SHOULD be executed.
3. Otherwise, if a tuple exists:
1. If the return flag of the current packet is not set (RET=0),
set RET:=1 and return the packet to the previous hop of the
packet (i.e. a loop has been detected, and the packet is
returned).
2. Otherwise, if the return flag of the current packet is set
(RET=1):
1. Set RET:=0
2. Increase the route cost in the routing table entry for
the packet destination with the next hop of the current
packet, as defined in Section 11.
3. Select the next hop (denoted "next_hop") for the current
packet, as specified in Section 10.
Herberg, et al. Expires May 3, 2012 [Page 11]
Internet-Draft DFF October 2011
4. Modify the current tuple:
- P_next_hop_neighbor_list := P_next_hop_neighbor_list@
[next_hop];
- P_time := current time + P_HOLD_TIME.
5. If the selected next hop is equal to P_prev_hop of the
current tuple (i.e. all neighbors have been
unsuccessfully tried), set the RET flag (RET := 1),
otherwise reset it (RET := 0).
6. Forward the current packet to next_hop. If the
transmission fails (determined by missing link layer
acknowledgments), the procedures in Section 9 SHOULD be
executed.
9. Missed Link Layer Acknowledgment when Sending a Packet
If a packet (the "current packet") has been sent to the next hop, as
specified in Section 8.1 and Section 8.2, and no link layer
acknowledgment has been received after several retries (as specified
in [ieee802.15.4]), then:
1. Set the duplicate flag (DUP) of the DFF header of the current
packet to 1.
2. Select the next hop (denoted "next_hop") for the current packet,
as specified in Section 10.
3. Find the Processed Tuple (the "current tuple") in the Processed
Set, with:
+ P_orig_address = the originator address of the current packet,
AND;
+ P_seq_number = the sequence number of the current packet,
and modify the current tuple:
* P_next_hop_neighbor_list := P_next_hop_neighbor_list@
[next_hop];
* P_time := current time + P_HOLD_TIME.
Herberg, et al. Expires May 3, 2012 [Page 12]
Internet-Draft DFF October 2011
4. If the selected next hop is equal to P_prev_hop of the current
tuple, set the RET flag (RET := 1), otherwise reset it (RET :=
0).
5. Forward the current packet to next_hop.
10. Getting the Next Hop for a Packet
Before a packet (the "current packet") is sent from a node towards
the packet destination, a valid next hop along the path has to be
selected. This section describes how to select the next hop (denoted
"next_hop"). As a Processed Tuple was either existing when receiving
the packet, or otherwise was created, it can be assumed the a
Processed Tuple for that packet (the "current tuple") is available.
The next hop is chosen from the Neighbor Set in order of decreasing
preference of the following conditions. This list is only a
suggestion, any other order of priority MAY be used.
1. The neighbor is listed in the Routing Set as next hop for the
destination of the current packet, with lower route costs having
a higher priority, and the neighbor is not listed in
P_next_hop_neighbor_list of the current tuple.
2. The neighbor is not listed in the Routing Set as any next hop
destination of the current packet, and the neighbor is not listed
in P_next_hop_neighbor_list of the current tuple.
3. The neighbor is the same as P_prev_hop of the current tuple; this
case is only used for returning the packet to the previous hop,
in which case the RET flag MUST be set to 1.
11. Poisoning
When a packet is returned (i.e. a packet with RET=1 is received by a
node) or a link layer acknowledgment (ACK) has not been received for
a forwarded packet, the cost for the route MAY be increased, so that
future transmissions prefer other routes. For the case of a missing
link layer ACK, in addition to increasing the route cost, the link
cost to the neighbor may also be increased.
It is up to the implementation to decide by how much the route and
link cost should be increased and out of scope of this document.
Herberg, et al. Expires May 3, 2012 [Page 13]
Internet-Draft DFF October 2011
12. Proposed Values for Parameters and Constants
This section lists the parameters and constants used in the
specification of the protocol, and proposed values of each that MAY
be used when a single value of each is used.
o P_HOLD_TIME := 5 seconds
13. Security Considerations
The security of the underlying mesh routing protocol depends on the
integrity, authentication, and confidentiality of the control
messages. The security mechanisms for protecting the network can be
provided by link-layer technologies. Further details are presented
in the Security Considerations section of [RFC4944].
14. IANA Considerations
IANA is requested to allocate a value from the Dispatch Type Field
registry for LOWPAN_DFF.
15. Acknowledgements
Yuichi Igarashi (Hitachi), Kazuya Monden (Hitachi), Geoff Mulligan
(IPSO), Hiroki Satoh (Hitachi), and Ganesh Venkatesh (UC San Diego)
provided useful discussions which helped to improve this document.
16. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC4944] Montenegro, G., Kushalnagar, N., Hui, J., and D. Culler,
"Transmission of IPv6 Packets over IEEE 802.15.4
Networks", RFC 4944, September 2007.
[ieee802.15.4]
Computer Society, IEEE., "IEEE Std. 802.15.4-2003",
October 2003.
Appendix A. Examples
In this section, some example network topologies are depicted, using
Herberg, et al. Expires May 3, 2012 [Page 14]
Internet-Draft DFF October 2011
the DFF mechanism for data forwarding. In these examples, it is
assumed that the underlying routing protocol provides a list of
neighbors of each node, and a routing table with one or more next
hops to a destination, if the topology provides a path from the node
to the destination.
A.1. Example 1: Normal Delivery
Figure 2 depicts a network topology with seven nodes A to G, with
links between them as indicated by lines. It is assumed that node A
sends a packet to G, through B and D, according to the underlying
routing protocol.
+---+
+---+ D +-----+
| +---+ |
+---+ | |
+---+ B +---+ |
| +---+ | |
+-+-+ | +---+ +-+-+
| A | +---+ E +---+ G +
+-+-+ +---+ +-+-+
| +---+ |
+---+ C +---+ |
+---+ | |
| +---+ |
+---+ F +-----+
+---+
Figure 2: Example 1: normal delivery
If no link fails in this topology, and no loop occurs, then DFF will
not modify the usual data forwarding mechanism. Each node adds a
Processed Tuple for the incoming packet, and selects the next hop
according to Section 10, i.e. it will first select the next hop for
node G as determined by the underlying routing protocol.
A.2. Example 2: Forwarding with Link Failure
Figure 3 depicts the same topology as the Example 1, but both links
between B and D and between B and E are unavailable (e.g. because of
wireless link characteristics).
Herberg, et al. Expires May 3, 2012 [Page 15]
Internet-Draft DFF October 2011
+---+
XXX-+ D +-----+
X +---+ |
+---+ X |
+---+ B +---+ |
| +---+ X |
+-+-+ X +---+ +-+-+
| A | XXXX+ E +---+ G +
+-+-+ +---+ +-+-+
| +---+ |
+---+ C +---+ |
+---+ | |
| +---+ |
+---+ F +-----+
+---+
Figure 3: Example 2: link failure
When B receives the packet from node a, it adds a Processed Tuple,
and then tries to forward the packet to D. Once B detects that the
packet cannot be successfully delivered to D because it does not
receive link layer ACKs, it will follow the procedures listed in
Section 9, by setting the DUP flag to 1, selecting E as new next hop,
adding E to the list of next hops in the Processed Tuple, and then
forwarding the packet to E.
As the link to E also fails, B will again follow the procedure in
Section 9. As all possible next hops (D and E) are listed in the
Processed Tuple, B will set the RET flag in the packet and return it
to A.
A determines that it already has a Processed Tuple for the returned
packet, reset the RET flag of the packet and select a new next hop
for the packet. As B is already in the list of next hops in the
Processed Tuple, it will select C as next hop and forward the packet
to it. C will then forward the packet to F, and F delivers the
packet to its destination G.
A.3. Example 3: Forwarding with Missed Link Layer Acknowledgment
Figure 4 depicts the same topology as the Example 1, but the link
layer acknowledgments from C to A are lost (e.g. because the link is
uni-directional). It is assumed that A prefers a path to G through C
and F.
Herberg, et al. Expires May 3, 2012 [Page 16]
Internet-Draft DFF October 2011
+---+
+---+ D +-----+
| +---+ |
+---+ | |
+---+ B +---+ |
| +---+ | |
+-+-+ | +---+ +-+-+
| A | +---+ E +---+ G +
+-+-+ +---+ +-+-+
. +---+ |
+...+ C +---+ |
+---+ | |
| +---+ |
+---+ F +-----+
+---+
Figure 4: Example 3: missed link layer acknowledgment
While C successfully receives the packet from A, A does not receive
the ACK and assumes the packet has not been delivered to C.
Therefore, it sets the DUP flag of the packet to 1, in order to
indicate that this packet is a duplicate. Then, it forwards the
packet to B.
A.4. Example 4: Forwarding with a Loop
Figure 5 depicts the same topology as the Example 1, but there is a
loop from D to A, and A sends the packet through B and D.
+-----------------+
| |
| +-+-+
| +---+ D +
| | +---+
\|/ +---+ |
+---+ B +---+
| +---+ |
+-+-+ | +---+ +-+-+
| A | +---+ E +---+ G +
+-+-+ +---+ +-+-+
| +---+ |
+---+ C +---+ |
+---+ | |
| +---+ |
+---+ F +-----+
+---+
Figure 5: Example 4: loop
Herberg, et al. Expires May 3, 2012 [Page 17]
Internet-Draft DFF October 2011
When A receives the packet through the loop from D, it will find a
Processed Tuple for the packet. Node A will set the RET flag and
return the packet to D, which in turn will return it to B. B will
then select E as next hop, which will then forward it to G.
Authors' Addresses
Ulrich Herberg
Fujitsu Laboratories
1240 E. Arques Avenue, M/S 345
Sunnyvale, CA 94085
US
Phone: +1 408 530-4528
Email: ulrich.herberg@us.fujitsu.com
Alvaro A. Cardenas
Fujitsu Laboratories
1240 E. Arques Avenue, M/S 345
Sunnyvale, CA 94085
US
Phone: +1 408 530-4516
Email: alvaro.cardenas-mora@us.fujitsu.com
Sandra L. Cespedes
U. Icesi/U. of Waterloo
Calle 18 No. 122-135 Pance
Cali, Valle
Colombia
Phone: +1 (519) 8884567 x37448
Email: slcesped@bbcr.uwaterloo.ca
Tadashige Iwao
Fujitsu Limited
Shiodome City Center, 5-2, Higashi-shimbashi 1-chome, Minato-ku
Tokyo,
JP
Phone: +81-44-754-3343
Email: smartnetpro-iwao_std@ml.css.fujitsu.com
Herberg, et al. Expires May 3, 2012 [Page 18]