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]