| < draft-ietf-roll-useofrplinfo-04.txt | draft-ietf-roll-useofrplinfo-05.txt > | |||
|---|---|---|---|---|
| ROLL Working Group M. Robles | ROLL Working Group M. Robles | |||
| Internet-Draft Ericsson | Internet-Draft Ericsson | |||
| Intended status: Informational M. Richardson | Intended status: Informational M. Richardson | |||
| Expires: October 7, 2016 SSW | Expires: December 12, 2016 SSW | |||
| P. Thubert | P. Thubert | |||
| Cisco | Cisco | |||
| April 5, 2016 | June 10, 2016 | |||
| When to use RFC 6553, 6554 and IPv6-in-IPv6 | When to use RFC 6553, 6554 and IPv6-in-IPv6 | |||
| draft-ietf-roll-useofrplinfo-04 | draft-ietf-roll-useofrplinfo-05 | |||
| Abstract | Abstract | |||
| This document looks at different data flows through LLN networks | This document looks at different data flows through LLN (Low-Power | |||
| where RPL is used to establish routing. The document enumerates the | and Lossy Networks) where RPL (IPv6 Routing Protocol for Low-Power | |||
| cases where RFC 6553, RFC 6554 and IPv6-in-IPv6 encapsulation is | and Lossy Networks) is used to establish routing. The document | |||
| required. This analysis provides the basis on which to design | enumerates the cases where RFC 6553, RFC 6554 and IPv6-in-IPv6 | |||
| efficient compression of these headers. | encapsulation is required. This analysis provides the basis on which | |||
| to design efficient compression of these headers. | ||||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on October 7, 2016. | This Internet-Draft will expire on December 12, 2016. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2016 IETF Trust and the persons identified as the | Copyright (c) 2016 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 2. Terminology and Requirements Language . . . . . . . . . . . . 3 | 2. Terminology and Requirements Language . . . . . . . . . . . . 3 | |||
| 3. Sample/reference topology . . . . . . . . . . . . . . . . . . 3 | 3. Sample/reference topology . . . . . . . . . . . . . . . . . . 4 | |||
| 4. Use cases . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 4. Use cases . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 5. Storing mode . . . . . . . . . . . . . . . . . . . . . . . . 8 | 5. Storing mode . . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 5.1. Example of Flow from RPL-aware-leaf to root . . . . . . . 9 | 5.1. Example of Flow from RPL-aware-leaf to root . . . . . . . 9 | |||
| 5.2. Example of Flow from root to RPL-aware-leaf . . . . . . . 9 | 5.2. Example of Flow from root to RPL-aware-leaf . . . . . . . 10 | |||
| 5.3. Example of Flow from root to not-RPL-aware-leaf . . . . . 10 | 5.3. Example of Flow from root to not-RPL-aware-leaf . . . . . 11 | |||
| 5.4. Example of Flow from not-RPL-aware-leaf to root . . . . . 11 | 5.4. Example of Flow from not-RPL-aware-leaf to root . . . . . 11 | |||
| 5.5. Example of Flow from RPL-aware-leaf to Internet . . . . . 11 | 5.5. Example of Flow from RPL-aware-leaf to Internet . . . . . 12 | |||
| 5.6. Example of Flow from Internet to RPL-aware-leaf . . . . . 12 | 5.6. Example of Flow from Internet to RPL-aware-leaf . . . . . 13 | |||
| 5.7. Example of Flow from not-RPL-aware-leaf to Internet . . . 12 | 5.7. Example of Flow from not-RPL-aware-leaf to Internet . . . 13 | |||
| 5.8. Example of Flow from Internet to non-RPL-aware-leaf . . . 13 | 5.8. Example of Flow from Internet to non-RPL-aware-leaf . . . 14 | |||
| 5.9. Example of Flow from RPL-aware-leaf to RPL-aware-leaf . . 14 | 5.9. Example of Flow from RPL-aware-leaf to RPL-aware-leaf . . 15 | |||
| 5.10. Example of Flow from RPL-aware-leaf to non-RPL-aware-leaf 15 | 5.10. Example of Flow from RPL-aware-leaf to non-RPL-aware-leaf 16 | |||
| 5.11. Example of Flow from not-RPL-aware-leaf to RPL-aware-leaf 17 | 5.11. Example of Flow from not-RPL-aware-leaf to RPL-aware-leaf 17 | |||
| 5.12. Example of Flow from not-RPL-aware-leaf to not-RPL-aware- | 5.12. Example of Flow from not-RPL-aware-leaf to not-RPL-aware- | |||
| leaf . . . . . . . . . . . . . . . . . . . . . . . . . . 18 | leaf . . . . . . . . . . . . . . . . . . . . . . . . . . 18 | |||
| 6. Non Storing mode . . . . . . . . . . . . . . . . . . . . . . 19 | 6. Non Storing mode . . . . . . . . . . . . . . . . . . . . . . 19 | |||
| 6.1. Example of Flow from RPL-aware-leaf to root . . . . . . . 19 | 6.1. Example of Flow from RPL-aware-leaf to root . . . . . . . 19 | |||
| 6.2. Example of Flow from root to RPL-aware-leaf . . . . . . . 20 | 6.2. Example of Flow from root to RPL-aware-leaf . . . . . . . 20 | |||
| 6.3. Example of Flow from root to not-RPL-aware-leaf . . . . . 20 | 6.3. Example of Flow from root to not-RPL-aware-leaf . . . . . 20 | |||
| 6.4. Example of Flow from not-RPL-aware-leaf to root . . . . . 21 | 6.4. Example of Flow from not-RPL-aware-leaf to root . . . . . 21 | |||
| 6.5. Example of Flow from RPL-aware-leaf to Internet . . . . . 22 | 6.5. Example of Flow from RPL-aware-leaf to Internet . . . . . 22 | |||
| 6.6. Example of Flow from Internet to RPL-aware-leaf . . . . . 22 | 6.6. Example of Flow from Internet to RPL-aware-leaf . . . . . 22 | |||
| 6.7. Example of Flow from not-RPL-aware-leaf to Internet . . . 23 | 6.7. Example of Flow from not-RPL-aware-leaf to Internet . . . 23 | |||
| 6.8. Example of Flow from Internet to non-RPL-aware-leaf . . . 23 | 6.8. Example of Flow from Internet to non-RPL-aware-leaf . . . 24 | |||
| 6.9. Example of Flow from RPL-aware-leaf to RPL-aware-leaf . . 24 | 6.9. Example of Flow from RPL-aware-leaf to RPL-aware-leaf . . 24 | |||
| 6.10. Example of Flow from RPL-aware-leaf to not-RPL-aware-leaf 25 | 6.10. Example of Flow from RPL-aware-leaf to not-RPL-aware-leaf 25 | |||
| 6.11. Example of Flow from not-RPL-aware-leaf to RPL-aware-leaf 26 | 6.11. Example of Flow from not-RPL-aware-leaf to RPL-aware-leaf 26 | |||
| 6.12. Example of Flow from not-RPL-aware-leaf to not-RPL-aware- | 6.12. Example of Flow from not-RPL-aware-leaf to not-RPL-aware- | |||
| leaf . . . . . . . . . . . . . . . . . . . . . . . . . . 26 | leaf . . . . . . . . . . . . . . . . . . . . . . . . . . 27 | |||
| 7. Observations about the problem . . . . . . . . . . . . . . . 27 | 7. Observations about the problem . . . . . . . . . . . . . . . 27 | |||
| 7.1. Storing mode . . . . . . . . . . . . . . . . . . . . . . 27 | 7.1. Storing mode . . . . . . . . . . . . . . . . . . . . . . 27 | |||
| 7.2. Non-Storing mode . . . . . . . . . . . . . . . . . . . . 28 | 7.2. Non-Storing mode . . . . . . . . . . . . . . . . . . . . 28 | |||
| 8. 6LoRH Compression cases . . . . . . . . . . . . . . . . . . . 28 | 8. 6LoRH Compression cases . . . . . . . . . . . . . . . . . . . 29 | |||
| 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 29 | 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 29 | |||
| 10. Security Considerations . . . . . . . . . . . . . . . . . . . 29 | 10. Security Considerations . . . . . . . . . . . . . . . . . . . 29 | |||
| 11. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 29 | 11. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 29 | |||
| 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 29 | 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 29 | |||
| 12.1. Normative References . . . . . . . . . . . . . . . . . . 29 | 12.1. Normative References . . . . . . . . . . . . . . . . . . 29 | |||
| 12.2. Informative References . . . . . . . . . . . . . . . . . 30 | 12.2. Informative References . . . . . . . . . . . . . . . . . 30 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 31 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 30 | ||||
| 1. Introduction | 1. Introduction | |||
| RPL [RFC6550] is a routing protocol for constrained networks. RFC | RPL (IPv6 Routing Protocol for Low-Power and Lossy Networks) | |||
| 6553 [RFC6553] defines the "RPL option" (RPI), carried within the | [RFC6550] is a routing protocol for constrained networks. RFC 6553 | |||
| IPv6 Hop-by-Hop header to quickly identify inconsistencies (loops) in | [RFC6553] defines the "RPL option" (RPI), carried within the IPv6 | |||
| the routing topology. RFC 6554 [RFC6554] defines the "RPL Source | Hop-by-Hop header to quickly identify inconsistencies (loops) in the | |||
| Route Header" (RH3), an IPv6 Extension Header to deliver datagrams | routing topology. RFC 6554 [RFC6554] defines the "RPL Source Route | |||
| within a RPL routing domain, particularly in non-storing mode. | Header" (RH3), an IPv6 Extension Header to deliver datagrams within a | |||
| RPL routing domain, particularly in non-storing mode. | ||||
| These various items are referred to as RPL artifacts, and they are | These various items are referred to as RPL artifacts, and they are | |||
| seen on all of the data-plane traffic that occurs in RPL routed | seen on all of the data-plane traffic that occurs in RPL routed | |||
| networks; they do not in general appear on the RPL control plane | networks; they do not in general appear on the RPL control plane | |||
| traffic at all which is mostly hop-by-hop traffic (one exception | traffic at all which is mostly hop-by-hop traffic (one exception | |||
| being DAO messages in non-storing mode). | being DAO messages in non-storing mode). | |||
| It has become clear from attempts to do multi-vendor | It has become clear from attempts to do multi-vendor | |||
| interoperability, and from a desire to compress as many of the above | interoperability, and from a desire to compress as many of the above | |||
| artifacts as possible that not all implementors agree when artifacts | artifacts as possible that not all implementors agree when artifacts | |||
| skipping to change at page 3, line 44 ¶ | skipping to change at page 3, line 45 ¶ | |||
| Option information and Routing Header type 3 (RFC6554) and an | Option information and Routing Header type 3 (RFC6554) and an | |||
| efficient IP-in-IP technique. Uses cases proposed for the | efficient IP-in-IP technique. Uses cases proposed for the | |||
| [Second6TischPlugtest] involving 6loRH. | [Second6TischPlugtest] involving 6loRH. | |||
| 2. Terminology and Requirements Language | 2. Terminology and Requirements Language | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
| document are to be interpreted as described in RFC 2119 [RFC2119]. | document are to be interpreted as described in RFC 2119 [RFC2119]. | |||
| Terminology defined in [RFC7102] | Terminology defined in [RFC7102] applies to this document: LBR, LLN, | |||
| RPL, RPL Domain and ROLL. | ||||
| 3. Sample/reference topology | 3. Sample/reference topology | |||
| A RPL network is composed of a 6LBR (6LoWPAN Border Router), Backbone | A RPL network is composed of a 6LBR (6LoWPAN Border Router), Backbone | |||
| Router (6BBR), 6LR (6LoWPAN Router) and 6LN (6LoWPAN Node) as leaf | Router (6BBR), 6LR (6LoWPAN Router) and 6LN (6LoWPAN Node) as leaf | |||
| logically organized in a DODAG structure (Destination Oriented | logically organized in a DODAG structure (Destination Oriented | |||
| Directed Acyclic Graph). | Directed Acyclic Graph). | |||
| RPL defines the RPL Control messages (control plane ), a new ICMPv6 | RPL defines the RPL Control messages (control plane), a new ICMPv6 | |||
| message with Type 155. DIS, DIO and DAO messages are all RPL Control | [RFC4443] message with Type 155. DIS (DODAG Information | |||
| messages but with different Code values. | Solicitation), DIO (DODAG Information Object) and DAO (Destination | |||
| Advertisement Object) messages are all RPL Control messages but with | ||||
| different Code values. | ||||
| RPL supports two modes of Downward traffic: in storing mode, it is | RPL supports two modes of Downward traffic: in storing mode (RPL-SM), | |||
| fully stateful or an in non-storing, it is fully source routed. A | it is fully stateful or an in non-storing (RPL-NSM), it is fully | |||
| RPL Instance is either fully storing or fully non-storing, i.e. a RPL | source routed. A RPL Instance is either fully storing or fully non- | |||
| Instance with a combination of storing and non-storing nodes is not | storing, i.e. a RPL Instance with a combination of storing and non- | |||
| supported with the current specifications. | storing nodes is not supported with the current specifications at the | |||
| time of writing this document. | ||||
| +--------------+ | +--------------+ | |||
| | Upper Layers | | | Upper Layers | | |||
| | | | | | | |||
| +--------------+ | +--------------+ | |||
| | RPL | | | RPL | | |||
| | | | | | | |||
| +--------------+ | +--------------+ | |||
| | ICMPv6 | | | ICMPv6 | | |||
| | | | | | | |||
| skipping to change at page 5, line 10 ¶ | skipping to change at page 5, line 10 ¶ | |||
| | | | | | | |||
| +--------------+ | +--------------+ | |||
| Figure 1: RPL Stack. | Figure 1: RPL Stack. | |||
| +---------+ | +---------+ | |||
| +---+Internet | | +---+Internet | | |||
| | +---------+ | | +---------+ | |||
| | | | | |||
| +----+--+ | +----+--+ | |||
| |DODAG | node:01 | | DODAG | node:01 | |||
| +---------+Root +----------+ | +---------+ Root +----------+ | |||
| | |6LBR | | | | | 6LBR | | | |||
| | +----+--+ | | | +----+--+ | | |||
| | | | | | | | | |||
| | | | | | | | | |||
| ... ... ... | ... ... ... | |||
| | | | | | | | | |||
| +-----+-+ +--+---+ +--+---+ | +-----+-+ +--+---+ +--+---+ | |||
| |6LR | | | | | | |6LR | | | | | | |||
| +-----+ | | | | | | +-----+ | | | | | | |||
| | | 11 | | 12 | | 13 +------+ | | | 11 | | 12 | | 13 +------+ | |||
| | +-----+-+ +-+----+ +-+----+ | | | +-----+-+ +-+----+ +-+----+ | | |||
| | | | | | | | | | | | | |||
| | | | | | | | | | | | | |||
| | 21 | 22 | 23 | 24 | 25 | | 21 | 22 | 23 | 24 | 25 | |||
| +-+---+ +-+---+ +--+--+ +- --+ +---+-+ | +-+---+ +-+---+ +--+--+ +- --+ +---+-+ | |||
| |Leaf | | | | | |Leaf| |Leaf | | |Leaf | | | | | |Leaf| |Leaf | | |||
| | 6LR | | | | | | 6LN| | 6LR | | | 6LN | | | | | | 6LN| | 6LN | | |||
| +-----+ +-----+ +-----+ +----+ +-----+ | +-----+ +-----+ +-----+ +----+ +-----+ | |||
| Figure 2: A reference RPL Topology. | Figure 2: A reference RPL Topology. | |||
| The numbers in or above the nodes are there so that they may be | The numbers in or above the nodes are there so that they may be | |||
| referenced in subsequent sections. The leaf marked 6LN (24) is a | referenced in subsequent sections. In the figure 2, 6LN can be a | |||
| device which does not speak RPL at all, but uses Router- | router or a host. The 6LN leaf marked as (21) and (25) are routers. | |||
| Advertisements, 6LowPAN DAR/DAC and efficient-ND only to participate | The leaf marked 6LN (24) is a device which does not speak RPL at all | |||
| in the network. | (not-RPL-aware), but uses Router-Advertisements, 6LowPAN DAR/DAC and | |||
| efficient-ND only to participate in the network [RFC6775]. In the | ||||
| document this leaf (24) is mentioned as well as IPv6 node. The 6LBR | ||||
| in the figure is the root of the Global DODAG. | ||||
| This document is in part motivated by the work that is ongoing at the | This document is in part motivated by the work that is ongoing at the | |||
| 6TiSCH working group. The 6TiSCH architecture | 6TiSCH working group. The 6TiSCH architecture | |||
| [I-D.ietf-6tisch-architecture] draft explains the network | [I-D.ietf-6tisch-architecture] draft explains the network | |||
| architecture of a 6TiSCH network. This architecture is used for the | architecture of a 6TiSCH network. This architecture is used for the | |||
| remainder of this document. | remainder of this document. | |||
| The scope of the 6TiSCH Architecture is a Backbone Link that | The scope of the 6TiSCH (IPv6 over the TSCH mode of IEEE 802.15.4e) | |||
| federates multiple LLNs (mesh) as a single IPv6 Multi-Link Subnet. | Architecture is a Backbone Link that federates multiple LLNs (mesh) | |||
| Each LLN in the subnet is anchored at a Backbone Router (6BBR). The | as a single IPv6 Multi-Link Subnet. Each LLN in the subnet is | |||
| Backbone Routers interconnect the LLNs over the Backbone Link and | anchored at a Backbone Router (6BBR). The Backbone Routers | |||
| emulate that the LLN nodes are present on the Backbone thus creating | interconnect the LLNs over the Backbone Link and emulate that the LLN | |||
| a so-called: Multi-Link Subnet. An LLN node can move freely from an | nodes are present on the Backbone thus creating a so-called: Multi- | |||
| LLN anchored at a Backbone Router to another LLN anchored at the same | Link Subnet. An LLN node can move freely from an LLN anchored at a | |||
| or a different Backbone Router inside the Multi-Link Subnet and | Backbone Router to another LLN anchored at the same or a different | |||
| conserve its addresses. | Backbone Router inside the Multi-Link Subnet and conserve its | |||
| addresses. Internet is connected through the 6BBR. For the | ||||
| following uses cases the 6BBR would be mapped to 6LBR and the | ||||
| Backbone router to 6LR. | ||||
| +---------+ | ||||
| +---+Internet | | ||||
| | +---------+ | ||||
| | | ||||
| | | | | |||
| +-----+ | +-----+ | |||
| | | Border Router to the RPL domain | | | Border Router to the RPL domain | |||
| | | (may be a RPL virtual root) | | | (may be a RPL virtual root) | |||
| +-----+ | +-----+ | |||
| | | | | |||
| | Backbone | | Backbone | |||
| +-------------------+-------------------+ | +-------------------+-------------------+ | |||
| | | | | | | | | |||
| +-----+ +-----+ +-----+ | +-----+ +-----+ +-----+ | |||
| skipping to change at page 6, line 28 ¶ | skipping to change at page 6, line 38 ¶ | |||
| | | router | | router | | router | | | router | | router | | router | |||
| +|---|+ +-|||-+ +-[_]-+ | +|---|+ +-|||-+ +-[_]-+ | |||
| | | PCI-exp / | \ USB | Ethernet | | | PCI-exp / | \ USB | Ethernet | |||
| ( ) ( ) ( )( )( ) (6LBR == RPL DODAG root) | ( ) ( ) ( )( )( ) (6LBR == RPL DODAG root) | |||
| o o o o o o o o o o o o | o o o o o o o o o o o o | |||
| o o o o o o o o o o o o o o o o | o o o o o o o o o o o o o o o o | |||
| o o o o o o o o o o 6LR == RPL router) o o | o o o o o o o o o o 6LR == RPL router) o o | |||
| o o o o o o o z | o o o o o o o z | |||
| o o o o o o (6LoWPAN Host) | o o o o o o (6LoWPAN Host) | |||
| <----------------------- RPL Instance ------------------------> | <----------------------- RPL Instances ------------------------> | |||
| Figure 3: RPL domain architecture | Figure 3: RPL domain architecture | |||
| 4. Use cases | 4. Use cases | |||
| In data plane context a combination of RFC6553, RFC6554 and IPv6-in- | In data plane context a combination of RFC6553, RFC6554 and IPv6-in- | |||
| IPv6 encapsulation is going to be analyzed for the following traffic | IPv6 encapsulation is going to be analyzed for the following traffic | |||
| flows: | flows: | |||
| RPL-aware-leaf to root | RPL-aware-leaf to root | |||
| skipping to change at page 6, line 39 ¶ | skipping to change at page 7, line 4 ¶ | |||
| Figure 3: RPL domain architecture | Figure 3: RPL domain architecture | |||
| 4. Use cases | 4. Use cases | |||
| In data plane context a combination of RFC6553, RFC6554 and IPv6-in- | In data plane context a combination of RFC6553, RFC6554 and IPv6-in- | |||
| IPv6 encapsulation is going to be analyzed for the following traffic | IPv6 encapsulation is going to be analyzed for the following traffic | |||
| flows: | flows: | |||
| RPL-aware-leaf to root | RPL-aware-leaf to root | |||
| root to RPL-aware-leaf | root to RPL-aware-leaf | |||
| not-RPL-aware-leaf to root | not-RPL-aware-leaf to root | |||
| root to not-RPL-aware-leaf | root to not-RPL-aware-leaf | |||
| RPL-aware-leaf to Internet | RPL-aware-leaf to Internet | |||
| Internet to RPL-aware-leaf | Internet to RPL-aware-leaf | |||
| not-RPL-aware-leaf to Internet | not-RPL-aware-leaf to Internet | |||
| Internet to not-RPL-aware-leaf | Internet to not-RPL-aware-leaf | |||
| RPL-aware-leaf to RPL-aware-leaf | RPL-aware-leaf to RPL-aware-leaf | |||
| RPL-aware-leaf to not-RPL-aware-leaf | RPL-aware-leaf to not-RPL-aware-leaf | |||
| not-RPL-aware-leaf to RPL-aware-leaf | not-RPL-aware-leaf to RPL-aware-leaf | |||
| not-RPL-aware-leaf to not-RPL-aware-leaf | not-RPL-aware-leaf to not-RPL-aware-leaf | |||
| This document assumes a rule that a Header cannot be inserted or | This document assumes a rule that a Header cannot be inserted or | |||
| removed on the fly inside an IPv6 packet that is being routed. This | removed on the fly inside an IPv6 packet that is being routed. This | |||
| is a fundamental precept of the IPv6 architecture as outlined in | is a fundamental precept of the IPv6 architecture as outlined in | |||
| [RFC2460] is that Extensions may not be added or removed except by | [RFC2460] is that Extensions may not be added or removed except by | |||
| the sender or the receiver. | the sender or the receiver. | |||
| Note: current discussions on [I-D.ietf-6man-rfc2460bis] related to | ||||
| extensions headers may affect some cases in this document (Ticket | ||||
| nro. 9) in 6man. [TO DO]. | ||||
| A second important thing is that packets with a Hop-by-Hop option | A second important thing is that packets with a Hop-by-Hop option | |||
| which are marked with option type 01 ([RFC2460] section 4.2) must be | which are marked with option type 01 ([RFC2460] section 4.2) must be | |||
| discarded if received by a host or router which does not understand | discarded if received by a host or router which does not understand | |||
| that option. This means that in general, any packet that leaves the | that option. This means that in general, any packet that leaves the | |||
| RPL domain of an LLN (or leaves the LLN entirely) is likely to be | RPL domain of an LLN (or leaves the LLN entirely) is likely to be | |||
| discarded if it still contains an [RFC6553] RPL Option Header known | discarded if it still contains an [RFC6553] RPL Option Header known | |||
| as the RPI. | as the RPI. | |||
| The combination of these two rules means that the arrangement of | The combination of these two rules means that the arrangement of | |||
| headers must be done so that traffic intended to exit the RPL domain | headers must be done so that traffic intended to exit the RPL domain | |||
| skipping to change at page 8, line 7 ¶ | skipping to change at page 8, line 21 ¶ | |||
| Both RPI and RH3 headers may be modified by routers on the path of | Both RPI and RH3 headers may be modified by routers on the path of | |||
| the packet without the need to add to remove an encapsulating header. | the packet without the need to add to remove an encapsulating header. | |||
| Both headers were designed with this modification in mind, and both | Both headers were designed with this modification in mind, and both | |||
| the RPL RH and the RPL option are marked mutable but recoverable, so | the RPL RH and the RPL option are marked mutable but recoverable, so | |||
| an IPsec AH security header can be applied across these headers, but | an IPsec AH security header can be applied across these headers, but | |||
| it may not secure all the values in those headers. | it may not secure all the values in those headers. | |||
| RPI should be present in every single RPL data packet. There is one | RPI should be present in every single RPL data packet. There is one | |||
| exception in non-storing mode: when a packet is going down from the | exception in non-storing mode: when a packet is going down from the | |||
| route. In a downward non-storing mode, the entire route is written, | root. In a downward non-storing mode, the entire route is written, | |||
| so there can be no loops by construction, nor any confusion about | so there can be no loops by construction, nor any confusion about | |||
| which forwarding table to use. There may be cases (such as in | which forwarding table to use. There may be cases (such as in | |||
| 6tisch) where the instanceID may still be needed to pick an | 6tisch) where the instanceID may still be needed to pick an | |||
| appropriate priority or channel at each hop. | appropriate priority or channel at each hop. | |||
| The applicability for storing (RPL-SN) and non-Storing (RPL-NSN) | The applicability for storing (RPL-SM) and non-Storing (RPL-NSM) | |||
| modes for the previous cases is showed as follows: | modes for the previous cases is showed as follows: | |||
| In tables, the term "RPL aware leaf" is has been shortened to "Raf", | In tables, the term "RPL aware leaf" is has been shortened to "Raf", | |||
| and "not-RPL aware leaf" has been shortened to "~Raf" to make the | and "not-RPL aware leaf" has been shortened to "~Raf" to make the | |||
| table fit in available space. | table fit in available space. | |||
| The earlier examples are more complete to make sure that the process | The earlier examples are more complete to make sure that the process | |||
| is clear, while later examples are more consise. | is clear, while later examples are more consise. | |||
| 5. Storing mode | 5. Storing mode | |||
| This table summarizes what headers are needed in the following | In storing mode (fully stateful), determinate whether the destination | |||
| scenarios, and indicates the IPIP header must be inserted on a hop- | is RPL capable is not currently discernible by the sender and thus | |||
| by-hop basis, and when it can target the destination node directly. | would need an IP-in-IP header. The IP-in-IP header needs to be | |||
| There are three possible situations: hop-by-hop necessary (indicated | addressed on a hop-by-hop basis so that the last 6LR can remove the | |||
| by "hop"), or destination address possible (indicated by "dst"). In | RPI header. Additionally, The sender can determine if the | |||
| all cases hop by hop can be used. In cases where no IPIP header is | destination is inside the LLN by looking if the destination address | |||
| needed, the column is left blank. | is matched by the DIO's PIO option. | |||
| +--------------+-------+-------+-----------+-----------+ | The following table summarizes what headers are needed in the | |||
| | Use Case | RPI | RH3 | IP-in-IP | IPIP dst | | following scenarios, and indicates the IP-in-IP header must be | |||
| +--------------+-------+-------+-----------+-----------+ | inserted on a hop-by-hop basis, and when it can target the | |||
| | Raf to root | Yes | No | No | -- | | destination node directly. There are three possible situations: hop- | |||
| | root to Raf | Yes | No | No | -- | | by-hop necessary (indicated by "hop"), or destination address | |||
| | root to ~Raf | Yes | No | Yes | hop | | possible (indicated by "dst"). In all cases hop by hop can be used. | |||
| | ~Raf to root | Yes | No | Yes | root | | ||||
| | Raf to Int | Yes | No | Yes | root | | In cases where no IP-in-IP header is needed, the column is left | |||
| | Int to Raf | Yes | No | Yes | raf | | blank. | |||
| | ~Raf to Int | Yes | No | Yes | root | | ||||
| | Int to ~Raf | Yes | No | Yes | hop | | The leaf can be a router 6LR or a host, both indicated as 6LN. | |||
| | Raf to Raf | Yes | No | No | -- | | ||||
| | Raf to ~Raf | Yes | No | Yes | hop | | +--------------+-------+-------+-----------+---------------+ | |||
| | ~Raf to Raf | Yes | No | Yes | dst | | | Use Case | RPI | RH3 | IP-in-IP | IP-in-IP dst | | |||
| | ~Raf to ~Raf | Yes | No | Yes | hop | | +--------------+-------+-------+-----------+---------------+ | |||
| +--------------+-------+-------+-----------+-----------+ | | Raf to root | Yes | No | No | -- | | |||
| | root to Raf | Yes | No | No | -- | | ||||
| | root to ~Raf | Yes | No | Yes | hop | | ||||
| | ~Raf to root | Yes | No | Yes | root | | ||||
| | Raf to Int | Yes | No | Yes | root | | ||||
| | Int to Raf | Yes | No | Yes | raf | | ||||
| | ~Raf to Int | Yes | No | Yes | root | | ||||
| | Int to ~Raf | Yes | No | Yes | hop | | ||||
| | Raf to Raf | Yes | No | No | -- | | ||||
| | Raf to ~Raf | Yes | No | Yes | hop | | ||||
| | ~Raf to Raf | Yes | No | Yes | dst | | ||||
| | ~Raf to ~Raf | Yes | No | Yes | hop | | ||||
| +--------------+-------+-------+-----------+---------------+ | ||||
| Table 1: Headers needed in Storing mode: RPI, RH3, IP-in-IP | Table 1: Headers needed in Storing mode: RPI, RH3, IP-in-IP | |||
| encapsulation | encapsulation | |||
| 5.1. Example of Flow from RPL-aware-leaf to root | 5.1. Example of Flow from RPL-aware-leaf to root | |||
| As states in Section 16.2 of [RFC6550] a RPL-aware-leaf node does | In storing mode, RFC 6553 (RPI) is used to send RPL Information | |||
| instanceID and rank information. | ||||
| As stated in Section 16.2 of [RFC6550] a RPL-aware-leaf node does | ||||
| not generally issue DIO messages; a leaf node accepts DIO messages | not generally issue DIO messages; a leaf node accepts DIO messages | |||
| from upstream. (When the inconsistency in routing occurs, a leaf | from upstream. (When the inconsistency in routing occurs, a leaf | |||
| node will generate a DIO with an infinite rank, to fix it). It may | node will generate a DIO with an infinite rank, to fix it). It may | |||
| issue DAO and DIS messages though it generally ignores DAO and DIS | issue DAO and DIS messages though it generally ignores DAO and DIS | |||
| messages. | messages. | |||
| In storing mode, it is suitable to use RFC 6553 (RPI) to send RPL | In storing mode, RFC 6553 (RPI) is used to send RPL Information | |||
| Information instanceID and rank information. | instanceID and rank information. | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| RPL-aware-leaf (6LN) --> 6LR --> 6LR,... --> root (6LBR) | RPL-aware-leaf (6LN) --> 6LR --> 6LR,... --> root (6LBR) | |||
| Note: In this document 6LRs, 6LBR are always full-fledge RPL routers, | As it was mentioned In this document 6LRs, 6LBR are always full- | |||
| and are the RPL root node. | fledge RPL routers, and are the RPL root node. | |||
| The 6LN inserts the RPI header, and send the packet to 6LR which | The 6LN inserts the RPI header, and sends the packet to 6LR which | |||
| decrement the rank in RPI and send the packet up. When the packet | decrements the rank in RPI and sends the packet up. When the packet | |||
| arrives to 6LBR, the RPI is removed and the packet is processed. | arrives at 6LBR, the RPI is removed and the packet is processed. | |||
| The RPI header can be removed by the 6LBR because the packet is | The RPI header can be removed by the 6LBR because the packet is | |||
| addressed to the 6LBR. The 6LN must know that it is communicating | addressed to the 6LBR. The 6LN must know that it is communicating | |||
| with the 6LBR in order to be able to make use of this scenario. The | with the 6LBR in order to be able to make use of this scenario. The | |||
| 6LN can know the address of the 6LBR because it knows the address of | 6LN can know the address of the 6LBR because it knows the address of | |||
| the root via the DODAGID in the DIO messages. | the root via the DODAGID in the DIO messages. | |||
| +-------------------+-----+------+------+ | +-------------------+-----+------+------+ | |||
| | Header | 6LN | 6LR | 6LBR | | | Header | 6LN | 6LR | 6LBR | | |||
| +-------------------+-----+------+------+ | +-------------------+-----+------+------+ | |||
| skipping to change at page 10, line 4 ¶ | skipping to change at page 10, line 32 ¶ | |||
| | Untouched headers | -- | -- | -- | | | Untouched headers | -- | -- | -- | | |||
| +-------------------+-----+------+------+ | +-------------------+-----+------+------+ | |||
| Storing: Summary of the use of headers from RPL-aware-leaf to root | Storing: Summary of the use of headers from RPL-aware-leaf to root | |||
| 5.2. Example of Flow from root to RPL-aware-leaf | 5.2. Example of Flow from root to RPL-aware-leaf | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| root (6LBR)--> 6LR --> RPL-aware-leaf (6LN) | root (6LBR)--> 6LR --> RPL-aware-leaf (6LN) | |||
| In this case the 6LBR insert RPI header and send the packet down, the | In this case the 6LBR insert RPI header and send the packet down, the | |||
| 6LR is going to increment the rank in RPI (examines instanceID for | 6LR is going to increment the rank in RPI (examines instanceID for | |||
| multiple tables), the packet is processed in 6LN and RPI removed. | multiple tables), the packet is processed in 6LN and RPI removed. | |||
| No IPIP header is required. | No IP-in-IP header is required. | |||
| +-------------------+------+-------+------+ | +-------------------+------+-------+------+ | |||
| | Header | 6LBR | 6LR | 6LN | | | Header | 6LBR | 6LR | 6LN | | |||
| +-------------------+------+-------+------+ | +-------------------+------+-------+------+ | |||
| | Inserted headers | RPI | -- | -- | | | Inserted headers | RPI | -- | -- | | |||
| | Removed headers | -- | -- | RPI | | | Removed headers | -- | -- | RPI | | |||
| | Re-added headers | -- | -- | -- | | | Re-added headers | -- | -- | -- | | |||
| | Modified headers | -- | RPI | -- | | | Modified headers | -- | RPI | -- | | |||
| | Untouched headers | -- | -- | -- | | | Untouched headers | -- | -- | -- | | |||
| +-------------------+------+-------+------+ | +-------------------+------+-------+------+ | |||
| Storing: Summary of the use of headers from root to RPL-aware-leaf | Storing: Summary of the use of headers from root to RPL-aware-leaf | |||
| 5.3. Example of Flow from root to not-RPL-aware-leaf | 5.3. Example of Flow from root to not-RPL-aware-leaf | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| root (6LBR)--> 6LR --> not-RPL-aware-leaf (6LN) | root (6LBR)--> 6LR --> not-RPL-aware-leaf (6LN) | |||
| It includes IPv6-in-IPv6 encapsulation to transmit information not | ||||
| related with the RPL domain. In the 6LBR the RPI header is inserted | ||||
| into an IPv6-in-IPv6 header addressed to the last 6LR, which removes | ||||
| the header before pass the packet to the IPv6 node. | ||||
| The question in this scenario is how the root knows how to address | The question in this scenario is how the root knows how to address | |||
| the IPv6-in-IPv6 header. It can not know that the destination isn't | the IPv6-in-IPv6 header. It can not know that the destination isn't | |||
| RPL aware, so it must insert an IPv6 that can be removed on the last | RPL aware, so it must insert an IPv6 header that can be removed on | |||
| RPL aware node. Since the root can not know in a storing network | the last RPL aware node. Since the root can not know in a storing | |||
| where the last RPL aware node is, the IPv6-in-IPv6 header must added | network where the last RPL aware node is, the IPv6-in-IPv6 header | |||
| hop-by-hop along the path from root to leaf. | must be added hop-by-hop along the path from root to leaf. | |||
| The root (6LBR) uses IPv6-in-IPv6 encapsulation to transmit | ||||
| information not related with the RPL domain. In the 6LBR the RPI | ||||
| header is inserted into an IPv6-in-IPv6 header addressed to the last | ||||
| 6LR, which removes the header before it passes the packet to the IPv6 | ||||
| node (6LN). | ||||
| An alternative option is to add an attribute in the RPL Target Option | An alternative option is to add an attribute in the RPL Target Option | |||
| to indicate that the target is not RPL aware: future work may explore | to indicate that the target is not RPL aware: future work may explore | |||
| this possibility. | this possibility. | |||
| +-------------------+-----------+-----------+------+ | +-------------------+---------------+---------------+------+ | |||
| | Header | 6LBR | 6LR | IPv6 | | | Header | 6LBR | 6LR | IPv6 | | |||
| +-------------------+-----------+-----------+------+ | +-------------------+---------------+---------------+------+ | |||
| | Inserted headers | IPIP(RPI) | -- | -- | | | Inserted headers | IP-in-IP(RPI) | -- | -- | | |||
| | Removed headers | -- | IPIP(RPI) | -- | | | Removed headers | -- | IP-in-IP(RPI) | -- | | |||
| | Re-added headers | -- | -- | -- | | | Re-added headers | -- | -- | -- | | |||
| | Modified headers | -- | -- | -- | | | Modified headers | -- | -- | -- | | |||
| | Untouched headers | -- | -- | -- | | | Untouched headers | -- | -- | -- | | |||
| +-------------------+-----------+-----------+------+ | +-------------------+---------------+---------------+------+ | |||
| Storing: Summary of the use of headers from root to not-RPL-aware- | Storing: Summary of the use of headers from root to not-RPL-aware- | |||
| leaf | leaf | |||
| 5.4. Example of Flow from not-RPL-aware-leaf to root | 5.4. Example of Flow from not-RPL-aware-leaf to root | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| not-RPL-aware-leaf (6LN) --> 6LR --> root (6LBR) | not-RPL-aware-leaf (6LN) --> 6LR --> root (6LBR) | |||
| When the packet arrives from IPv6 node to 6LR, the 6LR will insert an | When the packet arrives from IPv6 node to 6LR, the 6LR will insert an | |||
| RPI header, encapsuladed in a IPv6-in-IPv6 header. The IPv6-in-IPv6 | RPI header, encapsuladed in a IPv6-in-IPv6 header. The IPv6-in-IPv6 | |||
| header can be addressed to the next hop, or to the root. The root | header can be addressed to the next hop, or to the root. The root | |||
| removes the header and process the packet. | removes the header and processes the packet. | |||
| +-------------------+------+------------+-----------+ | +-------------------+------+----------------+---------------+ | |||
| | Header | IPv6 | 6LR | 6LBR | | | Header | IPv6 | 6LR | 6LBR | | |||
| +-------------------+------+------------+-----------+ | +-------------------+------+----------------+---------------+ | |||
| | Inserted headers | -- | IPIP(RPI) | -- | | | Inserted headers | -- | IP-in-IP(RPI) | -- | | |||
| | Removed headers | -- | -- | IPIP(RPI) | | | Removed headers | -- | -- | IP-in-IP(RPI) | | |||
| | Re-added headers | -- | -- | -- | | | Re-added headers | -- | -- | -- | | |||
| | Modified headers | -- | -- | -- | | | Modified headers | -- | -- | -- | | |||
| | Untouched headers | -- | -- | -- | | | Untouched headers | -- | -- | -- | | |||
| +-------------------+------+------------+-----------+ | +-------------------+------+----------------+---------------+ | |||
| Storing: Summary of the use of headers from not-RPL-aware-leaf to | Storing: Summary of the use of headers from not-RPL-aware-leaf to | |||
| root | root | |||
| 5.5. Example of Flow from RPL-aware-leaf to Internet | 5.5. Example of Flow from RPL-aware-leaf to Internet | |||
| RPL information from RFC 6553 should not go out to Internet as it | RPL information from RFC 6553 should not go out to Internet as it | |||
| will cause the packet to be discarded at the first non-RPI aware | will cause the packet to be discarded at the first non-RPI aware | |||
| router. The 6LBR must be able to take this information out before | router. The 6LBR must be able to take this information out before | |||
| sending the packet upwards to the Internet. This requires the RPI | sending the packet upwards to the Internet. This requires the RPI | |||
| header be placed in an IPIP header that the root can remove. | header be placed in an IP-in-IP header that the root can remove. | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| RPL-aware-leaf (6LN) --> 6LR --> root (6LBR) --> Internet | RPL-aware-leaf (6LN) --> 6LR --> root (6LBR) --> Internet | |||
| The 6LN will insert the RPI in a IPv6-in-IPv6 in a outer header, | The 6LN will insert the RPI in a IPv6-in-IPv6 in a outer header, | |||
| which may be addressed to the 6LBR (root), or alternatively, it could | which may be addressed to the 6LBR (root), or alternatively, it could | |||
| be addressed hop-by-hop. | be addressed hop-by-hop. | |||
| +-------------------+-----------+------+-----------+----------+ | +-----------------+---------------+------+---------------+----------+ | |||
| | Header | 6LN | 6LR | 6LBR | Internet | | | Header | 6LN | 6LR | 6LBR | Internet | | |||
| +-------------------+-----------+------+-----------+----------+ | +-----------------+---------------+------+---------------+----------+ | |||
| | Inserted headers | IPIP(RPI) | -- | -- | -- | | | Inserted | IP-in-IP(RPI) | -- | -- | -- | | |||
| | Removed headers | -- | -- | IPIP(RPI) | -- | | | headers | | | | | | |||
| | Re-added headers | -- | -- | -- | -- | | | Removed headers | -- | -- | IP-in-IP(RPI) | -- | | |||
| | Modified headers | -- | RPI | -- | -- | | | Re-added | -- | -- | -- | -- | | |||
| | Untouched headers | -- | -- | -- | -- | | | headers | | | | | | |||
| +-------------------+-----------+------+-----------+----------+ | | Modified | -- | RPI | -- | -- | | |||
| | headers | | | | | | ||||
| | Untouched | -- | -- | -- | -- | | ||||
| | headers | | | | | | ||||
| +-----------------+---------------+------+---------------+----------+ | ||||
| Storing: Summary of the use of headers from RPL-aware-leaf to | Storing: Summary of the use of headers from RPL-aware-leaf to | |||
| Internet | Internet | |||
| 5.6. Example of Flow from Internet to RPL-aware-leaf | 5.6. Example of Flow from Internet to RPL-aware-leaf | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| Internet --> root (6LBR) --> 6LR --> RPL-aware-leaf (6LN) | Internet --> root (6LBR) --> 6LR --> RPL-aware-leaf (6LN) | |||
| When the packet arrives from Internet to 6LBR the RPI header is added | When the packet arrives from Internet to 6LBR the RPI header is added | |||
| in a outer IPv6-in-IPv6 header and send to 6LR, which modifies the | in a outer IPv6-in-IPv6 header and sent to 6LR, which modifies the | |||
| rank in the RPI. When the packet arrives 6LN the RPI header is | rank in the RPI. When the packet arrives at 6LN the RPI header is | |||
| removed and the packet processed. | removed and the packet processed. | |||
| +-------------------+----------+------------+------+------------+ | +-----------------+----------+---------------+------+---------------+ | |||
| | Header | Internet | 6LBR | 6LR | 6LN | | | Header | Internet | 6LBR | 6LR | 6LN | | |||
| +-------------------+----------+------------+------+------------+ | +-----------------+----------+---------------+------+---------------+ | |||
| | Inserted headers | -- | IPIP(RPI) | -- | -- | | | Inserted | -- | IP-in-IP(RPI) | -- | -- | | |||
| | Removed headers | -- | -- | -- | IPIP(RPI) | | | headers | | | | | | |||
| | Re-added headers | -- | -- | -- | -- | | | Removed headers | -- | -- | -- | IP-in-IP(RPI) | | |||
| | Modified headers | -- | -- | RPI | -- | | | Re-added | -- | -- | -- | -- | | |||
| | Untouched headers | -- | -- | -- | -- | | | headers | | | | | | |||
| +-------------------+----------+------------+------+------------+ | | Modified | -- | -- | RPI | -- | | |||
| | headers | | | | | | ||||
| | Untouched | -- | -- | -- | -- | | ||||
| | headers | | | | | | ||||
| +-----------------+----------+---------------+------+---------------+ | ||||
| Storing: Summary of the use of headers from Internet to RPL-aware- | Storing: Summary of the use of headers from Internet to RPL-aware- | |||
| leaf | leaf | |||
| 5.7. Example of Flow from not-RPL-aware-leaf to Internet | 5.7. Example of Flow from not-RPL-aware-leaf to Internet | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| not-RPL-aware-leaf (6LN) --> 6LR --> root (6LBR) --> Internet | not-RPL-aware-leaf (6LN) --> 6LR --> root (6LBR) --> Internet | |||
| The 6LR node will add an IPIP(RPI) header addressed either to the | ||||
| The 6LR node will add an IP-in-IP(RPI) header addressed either to the | ||||
| root, or hop-by-hop such that the root can remove the RPI header | root, or hop-by-hop such that the root can remove the RPI header | |||
| before passing upwards. | before passing upwards. | |||
| The originating node will ideally leave the IPv6 flow label as zero | The originating node will ideally leave the IPv6 flow label as zero | |||
| so that it can be better compressed through the LLN, and the 6LBR | so that it can be better compressed through the LLN, and the 6LBR | |||
| will set the flow label to a non-zero value when sending to the | will set the flow label to a non-zero value when sending to the | |||
| Internet. | Internet. | |||
| +-------------------+------+------------+------------+----------+ | +-----------------+------+---------------+---------------+----------+ | |||
| | Header | 6LN | 6LR | 6LBR | Internet | | | Header | 6LN | 6LR | 6LBR | Internet | | |||
| +-------------------+------+------------+------------+----------+ | +-----------------+------+---------------+---------------+----------+ | |||
| | Inserted headers | -- | IPIP(RPI) | -- | -- | | | Inserted | -- | IP-in-IP(RPI) | -- | -- | | |||
| | Removed headers | -- | -- | IPIP(RPI) | -- | | | headers | | | | | | |||
| | Re-added headers | -- | -- | -- | -- | | | Removed headers | -- | -- | IP-in-IP(RPI) | -- | | |||
| | Modified headers | -- | -- | -- | -- | | | Re-added | -- | -- | -- | -- | | |||
| | Untouched headers | -- | -- | -- | -- | | | headers | | | | | | |||
| +-------------------+------+------------+------------+----------+ | | Modified | -- | -- | -- | -- | | |||
| | headers | | | | | | ||||
| | Untouched | -- | -- | -- | -- | | ||||
| | headers | | | | | | ||||
| +-----------------+------+---------------+---------------+----------+ | ||||
| Storing: Summary of the use of headers from not-RPL-aware-leaf to | Storing: Summary of the use of headers from not-RPL-aware-leaf to | |||
| Internet | Internet | |||
| 5.8. Example of Flow from Internet to non-RPL-aware-leaf | 5.8. Example of Flow from Internet to non-RPL-aware-leaf | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| Internet --> root (6LBR) --> 6LR --> not-RPL-aware-leaf (6LN) | Internet --> root (6LBR) --> 6LR --> not-RPL-aware-leaf (6LN) | |||
| The 6LBR will have to add an RPI header within an IPIP header. The | The 6LBR will have to add an RPI header within an IP-in-IP header. | |||
| IPIP will need to be addressed hop-by-hop along the path as in | The IP-in-IP will need to be addressed hop-by-hop along the path as | |||
| storing mode, the 6LBR has no idea if the 6LN is RPL aware or not, | in storing mode, the 6LBR has no idea if the 6LN is RPL aware or not, | |||
| nor what the closest attached 6LR node is. | nor what the closest attached 6LR node is. | |||
| The 6LBR MAY set the flow label on the inner IPIP header to zero in | The 6LBR MAY set the flow label on the inner IP-in-IP header to zero | |||
| order to aid in compression, as the packet will not emerge again from | in order to aid in compression, as the packet will not emerge again | |||
| the LLN. | from the LLN. | |||
| +-------------------+----------+------------+------------+------+ | +-----------------+----------+---------------+---------------+------+ | |||
| | Header | Internet | 6LBR | 6LR | IPv6 | | | Header | Internet | 6LBR | 6LR | IPv6 | | |||
| +-------------------+----------+------------+------------+------+ | +-----------------+----------+---------------+---------------+------+ | |||
| | Inserted headers | -- | IPIP(RPI) | -- | -- | | | Inserted | -- | IP-in-IP(RPI) | -- | -- | | |||
| | Removed headers | -- | -- | IPIP(RPI) | -- | | | headers | | | | | | |||
| | Re-added headers | -- | -- | -- | -- | | | Removed headers | -- | -- | IP-in-IP(RPI) | -- | | |||
| | Modified headers | -- | -- | -- | -- | | | Re-added | -- | -- | -- | -- | | |||
| | Untouched headers | -- | -- | -- | -- | | | headers | | | | | | |||
| +-------------------+----------+------------+------------+------+ | | Modified | -- | -- | -- | -- | | |||
| | headers | | | | | | ||||
| | Untouched | -- | -- | -- | -- | | ||||
| | headers | | | | | | ||||
| +-----------------+----------+---------------+---------------+------+ | ||||
| Storing: Summary of the use of headers from Internet to non-RPL- | Storing: Summary of the use of headers from Internet to non-RPL- | |||
| aware-leaf | aware-leaf | |||
| 5.9. Example of Flow from RPL-aware-leaf to RPL-aware-leaf | 5.9. Example of Flow from RPL-aware-leaf to RPL-aware-leaf | |||
| In [RFC6550] RPL allows a simple one-hop optimization for both | In [RFC6550] RPL allows a simple one-hop optimization for both | |||
| storing and non-storing networks. A node may send a packet destined | storing and non-storing networks. A node may send a packet destined | |||
| to a one-hop neighbor directly to that node. Section 9 in [RFC6550]. | to a one-hop neighbor directly to that node. Section 9 in [RFC6550]. | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| 6LN --> 6LR --> common parent (6LR) --> 6LR --> 6LN | 6LN --> 6LR --> common parent (6LR) --> 6LR --> 6LN | |||
| This case is assumed in the same RPL Domain. In the common parent, | This case is assumed in the same RPL Domain. In the common parent, | |||
| the direction of RPI is changed (from increasing to decreasing the | the direction of RPI is changed (from increasing to decreasing the | |||
| rank). | rank). | |||
| While the 6LR nodes will update the RPI, no node needs to add or | While the 6LR nodes will update the RPI, no node needs to add or | |||
| remove the RPI, so no IPIP headers are necessary. The ability to do | remove the RPI, so no IP-in-IP headers are necessary. The ability to | |||
| this depends upon the sending know that the destination is: a) inside | do this depends upon the sending know that the destination is: a) | |||
| the LLN, and b) RPL capable. | inside the LLN, and b) RPL capable. | |||
| The sender can determine if the destination is inside the LLN by | The sender can determine if the destination is inside the LLN by | |||
| looking if the destination address is matched by the DIO's PIO | looking if the destination address is matched by the DIO's PIO | |||
| option. This check may be modified by the use of backbone routers, | option. This check may be modified by the use of backbone routers, | |||
| but in this case it is assumed that the backbone routers are RPL | but in this case it is assumed that the backbone routers are RPL | |||
| capable and so can process the RPI header correctly. | capable and so can process the RPI header correctly. | |||
| The other check, that the destination is RPL capable is not currently | The other check, that the destination is RPL capable is not currently | |||
| discernible by the sender. This information is necessary to | discernible by the sender. This information is necessary to | |||
| distinguish this test case from Section 5.10. | distinguish this test case from Section 5.10. | |||
| skipping to change at page 15, line 32 ¶ | skipping to change at page 16, line 12 ¶ | |||
| Storing: Summary of the use of headers for RPL-aware-leaf to RPL- | Storing: Summary of the use of headers for RPL-aware-leaf to RPL- | |||
| aware-leaf | aware-leaf | |||
| 5.10. Example of Flow from RPL-aware-leaf to non-RPL-aware-leaf | 5.10. Example of Flow from RPL-aware-leaf to non-RPL-aware-leaf | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| 6LN --> 6LR --> common parent (6LR) --> 6LR --> not-RPL-aware 6LN | 6LN --> 6LR --> common parent (6LR) --> 6LR --> not-RPL-aware 6LN | |||
| The sender, being aware out of band, that the receiver is not RPL | The sender, being aware out of band, that the receiver is not RPL | |||
| aware, sends adds an RPI header inside an IPIP header. The IPIP | aware, sends adds an RPI header inside an IP-in-IP header. The IP- | |||
| header needs to be addressed on a hop-by-hop basis so that the last | in-IP header needs to be addressed on a hop-by-hop basis so that the | |||
| 6LR can remove the RPI header. | last 6LR can remove the RPI header. | |||
| ,---. | ,---. | |||
| / \ | / \ | |||
| ( 6LR2 ) IP3,RPI,IP,ULP | ( 6LR2 ) IP3,RPI,IP,ULP | |||
| ,-" . | ,-" . | |||
| ,-" `---' `. | ,-" `---' `. | |||
| ,' `. | ,' `. | |||
| ,---. ,-" `,---. | ,---. ,-" `,---. | |||
| / +" / \ | / +" / \ | |||
| ( 6LR1 ) Remove the IP3,RPI( 6LR3 ) | ( 6LR1 ) Remove the IP3,RPI( 6LR3 ) | |||
| skipping to change at page 16, line 30 ¶ | skipping to change at page 16, line 41 ¶ | |||
| / \ +--+----+ | / \ +--+----+ | |||
| ( 6LN ) | | | ( 6LN ) | | | |||
| \ / | IPv6 | IP,ULP | \ / | IPv6 | IP,ULP | |||
| `-----' | | | `-----' | | | |||
| IP1,RPI,IP,ULP +-------+ | IP1,RPI,IP,ULP +-------+ | |||
| Figure 4: Solution IPv6-in-IPv6 in each hop | Figure 4: Solution IPv6-in-IPv6 in each hop | |||
| Alternatively, if the definition of the Option Type field of RPL | Alternatively, if the definition of the Option Type field of RPL | |||
| Option '01' were changed so that it isn't a "discard if not | Option '01' were changed so that it isn't a "discard if not | |||
| recognized", then no IPIP header would be necessary. This change is | recognized", then no IP-in-IP header would be necessary. This change | |||
| an incompatible on-the-wire change and would require some kind of | is an incompatible on-the-wire change and would require some kind of | |||
| flag day, possibly a change that is done simultaenously with an | flag day, possibly a change that is done simultaenously with an | |||
| updated 6LoRH compress. | updated 6LoRH compress. | |||
| +-----------+-----------+-----------+------------+-----------+------+ | +--------+------------+------------+------------+------------+------+ | |||
| | Header | 6LN | 6LR | 6LR | 6LR | IPv6 | | | Header | 6LN | 6LR | 6LR | 6LR | IPv6 | | |||
| | | | | (common | | | | | | | | (common | | | | |||
| | | | | parent) | | | | | | | | parent) | | | | |||
| +-----------+-----------+-----------+------------+-----------+------+ | +--------+------------+------------+------------+------------+------+ | |||
| | Inserted | IPIP(RPI) | -- | -- | -- | -- | | | Insert | IP-in- | -- | -- | -- | -- | | |||
| | headers | | | | | | | | ed hea | IP(RPI) | | | | | | |||
| | Removed | -- | -- | -- | IPIP(RPI) | -- | | | ders | | | | | | | |||
| | headers | | | | | | | | Remove | -- | -- | -- | IP-in- | -- | | |||
| | Re-added | -- | -- | -- | -- | -- | | | d head | | | | IP(RPI) | | | |||
| | headers | | | | | | | | ers | | | | | | | |||
| | Modified | -- | IPIP(RPI) | IPIP(RPI) | -- | -- | | | Re- | -- | -- | -- | -- | -- | | |||
| | headers | | | | | | | | added | | | | | | | |||
| | Untouched | -- | -- | -- | -- | -- | | | header | | | | | | | |||
| | headers | | | | | | | | s | | | | | | | |||
| +-----------+-----------+-----------+------------+-----------+------+ | | Modifi | -- | IP-in- | IP-in- | -- | -- | | |||
| | ed hea | | IP(RPI) | IP(RPI) | | | | ||||
| | ders | | | | | | | ||||
| | Untouc | -- | -- | -- | -- | -- | | ||||
| | hed he | | | | | | | ||||
| | aders | | | | | | | ||||
| +--------+------------+------------+------------+------------+------+ | ||||
| Storing: Summary of the use of headers from RPL-aware-leaf to not- | Storing: Summary of the use of headers from RPL-aware-leaf to not- | |||
| RPL-aware-leaf | RPL-aware-leaf | |||
| 5.11. Example of Flow from not-RPL-aware-leaf to RPL-aware-leaf | 5.11. Example of Flow from not-RPL-aware-leaf to RPL-aware-leaf | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| not-RPL-aware 6LN --> 6LR --> common parent (6LR) --> 6LR --> 6LN | not-RPL-aware 6LN --> 6LR --> common parent (6LR) --> 6LR --> 6LN | |||
| The 6LR receives the packet from the the IPv6 node and inserts and | The 6LR receives the packet from the the IPv6 node and inserts and | |||
| the RPI header encapsulated in IPv6-in-IPv6 header. The IPIP header | the RPI header encapsulated in IPv6-in-IPv6 header. The IP-in-IP | |||
| could be addresses to the 6LN if the destination is known to the RPL | header could be addresses to the 6LN if the destination is known to | |||
| aware, otherwise must send the packet using a hop-by-hop IPIP header. | the RPL aware, otherwise must send the packet using a hop-by-hop IP- | |||
| Similar considerations apply from section Section 5.10. | in-IP header. Similar considerations apply from section | |||
| Section 5.10. | ||||
| +-----------+------+-----------+------------+-----------+-----------+ | +--------+------+------------+------------+------------+------------+ | |||
| | Header | IPv6 | 6LR | common | 6LR | 6LN | | | Header | IPv6 | 6LR | common | 6LR | 6LN | | |||
| | | | | parent | | | | | | | | parent | | | | |||
| | | | | (6LR) | | | | | | | | (6LR) | | | | |||
| +-----------+------+-----------+------------+-----------+-----------+ | +--------+------+------------+------------+------------+------------+ | |||
| | Inserted | -- | IPIP(RPI) | -- | -- | -- | | | Insert | -- | IP-in- | -- | -- | -- | | |||
| | headers | | | | | | | | ed hea | | IP(RPI) | | | | | |||
| | Removed | -- | -- | -- | -- | IPIP(RPI) | | | ders | | | | | | | |||
| | headers | | | | | | | | Remove | -- | -- | -- | -- | IP-in- | | |||
| | Re-added | -- | -- | -- | -- | -- | | | d head | | | | | IP(RPI) | | |||
| | headers | | | | | | | | ers | | | | | | | |||
| | Modified | -- | -- | IPIP(RPI) | IPIP(RPI) | -- | | | Re- | -- | -- | -- | -- | -- | | |||
| | headers | | | | | | | | added | | | | | | | |||
| | Untouched | -- | -- | -- | -- | -- | | | header | | | | | | | |||
| | headers | | | | | | | | s | | | | | | | |||
| +-----------+------+-----------+------------+-----------+-----------+ | | Modifi | -- | -- | IP-in- | IP-in- | -- | | |||
| | ed hea | | | IP(RPI) | IP(RPI) | | | ||||
| | ders | | | | | | | ||||
| | Untouc | -- | -- | -- | -- | -- | | ||||
| | hed he | | | | | | | ||||
| | aders | | | | | | | ||||
| +--------+------+------------+------------+------------+------------+ | ||||
| Storing: Summary of the use of headers from not-RPL-aware-leaf to | Storing: Summary of the use of headers from not-RPL-aware-leaf to | |||
| RPL-aware-leaf | RPL-aware-leaf | |||
| 5.12. Example of Flow from not-RPL-aware-leaf to not-RPL-aware-leaf | 5.12. Example of Flow from not-RPL-aware-leaf to not-RPL-aware-leaf | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| not-RPL-aware 6LN (IPv6 node)--> 6LR --> root (6LBR) --> 6LR --> not- | not-RPL-aware 6LN (IPv6 node)--> 6LR --> root (6LBR) --> 6LR --> not- | |||
| RPL-aware 6LN (IPv6 node) | RPL-aware 6LN (IPv6 node) | |||
| This flow combines the problems of the two previous sections. There | This flow combines the problems of the two previous sections. There | |||
| is no choice at the first 6LR: it must insert an RPI, and to do that | is no choice at the first 6LR: it must insert an RPI, and to do that | |||
| it must add an IPIP header. That IPIP header must be addressed on a | it must add an IP-in-IP header. That IP-in-IP header must be | |||
| hop-by-hop basis. | addressed on a hop-by-hop basis. | |||
| +-------------+--------+-----------+-----------+-----------+--------+ | +-----------+------+---------------+---------+---------------+------+ | |||
| | Header | IPv6 | 6LR | 6LR | 6LR | IPv6 | | | Header | IPv6 | 6LR | 6LR | 6LR | IPv6 | | |||
| | | src | | (common | | dst | | | | src | | (common | | dst | | |||
| | | | | parent) | | | | | | | | parent) | | | | |||
| +-------------+--------+-----------+-----------+-----------+--------+ | +-----------+------+---------------+---------+---------------+------+ | |||
| | Inserted | -- | IPIP(RPI) | -- | -- | -- | | | Inserted | -- | IP-in-IP(RPI) | -- | -- | -- | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| | Removed | -- | -- | -- | IPIP(RPI) | -- | | | Removed | -- | -- | -- | IP-in-IP(RPI) | -- | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| | Re-added | -- | -- | -- | -- | -- | | | Re-added | -- | -- | -- | -- | -- | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| | Modified | -- | -- | -- | -- | -- | | | Modified | -- | -- | -- | -- | -- | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| | Untouched | -- | -- | -- | -- | -- | | | Untouched | -- | -- | -- | -- | -- | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| +-------------+--------+-----------+-----------+-----------+--------+ | +-----------+------+---------------+---------+---------------+------+ | |||
| Storing: Summary of the use of headers from not-RPL-aware-leaf to | Storing: Summary of the use of headers from not-RPL-aware-leaf to | |||
| not-RPL-aware-leaf | not-RPL-aware-leaf | |||
| 6. Non Storing mode | 6. Non Storing mode | |||
| +--------------+------+------+-------+-----------+ | +--------------+------+------+-----------+---------------+ | |||
| | Use Case | RPI | RH3 | IPIP | IPIP dst | | | Use Case | RPI | RH3 | IP-in-IP | IP-in-IP dst | | |||
| +--------------+------+------+-------+-----------+ | +--------------+------+------+-----------+---------------+ | |||
| | Raf to root | Yes | No | No | -- | | | Raf to root | Yes | No | No | -- | | |||
| | root to Raf | Yes | Yes | No | -- | | | root to Raf | Yes | Yes | No | -- | | |||
| | root to ~Raf | No | Yes | Yes | 6LR | | | root to ~Raf | No | Yes | Yes | 6LR | | |||
| | ~Raf to root | Yes | No | Yes | root | | | ~Raf to root | Yes | No | Yes | root | | |||
| | Raf to Int | Yes | No | Yes | root | | | Raf to Int | Yes | No | Yes | root | | |||
| | Int to Raf | opt | Yes | Yes | dst | | | Int to Raf | opt | Yes | Yes | dst | | |||
| | ~Raf to Int | Yes | No | Yes | root | | | ~Raf to Int | Yes | No | Yes | root | | |||
| | Int to ~Raf | opt | Yes | Yes | 6LR | | | Int to ~Raf | opt | Yes | Yes | 6LR | | |||
| | Raf to Raf | Yes | Yes | Yes | root/dst | | | Raf to Raf | Yes | Yes | Yes | root/dst | | |||
| | Raf to ~Raf | Yes | Yes | Yes | root/6LR | | | Raf to ~Raf | Yes | Yes | Yes | root/6LR | | |||
| | ~Raf to Raf | Yes | Yes | Yes | root/6LN | | | ~Raf to Raf | Yes | Yes | Yes | root/6LN | | |||
| | ~Raf to ~Raf | Yes | Yes | Yes | root/6LR | | | ~Raf to ~Raf | Yes | Yes | Yes | root/6LR | | |||
| +--------------+------+------+-------+-----------+ | +--------------+------+------+-----------+---------------+ | |||
| Table 2: Headers needed in Non-Storing mode: RPI, RH3, IP-in-IP | Table 2: Headers needed in Non-Storing mode: RPI, RH3, IP-in-IP | |||
| encapsulation | encapsulation | |||
| 6.1. Example of Flow from RPL-aware-leaf to root | 6.1. Example of Flow from RPL-aware-leaf to root | |||
| In non-storing mode the leaf node uses default routing to send | In non-storing mode the leaf node uses default routing to send | |||
| traffic to the root. The RPI header must be included to avoid/detect | traffic to the root. The RPI header must be included to avoid/detect | |||
| loops. | loops. | |||
| skipping to change at page 20, line 29 ¶ | skipping to change at page 20, line 29 ¶ | |||
| Non Storing: Summary of the use of headers from RPL-aware-leaf to | Non Storing: Summary of the use of headers from RPL-aware-leaf to | |||
| root | root | |||
| 6.2. Example of Flow from root to RPL-aware-leaf | 6.2. Example of Flow from root to RPL-aware-leaf | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| root (6LBR)--> 6LR --> RPL-aware-leaf (6LN) | root (6LBR)--> 6LR --> RPL-aware-leaf (6LN) | |||
| The 6LBR will insert an RH3, and may optionally insert an RPI header. | The 6LBR will insert an RH3, and may optionally insert an RPI header. | |||
| No IPIP header is necessary as the traffic originates with an RPL | No IP-in-IP header is necessary as the traffic originates with an RPL | |||
| aware node. | aware node. | |||
| +-------------------+-----------------+------+----------+ | +-------------------+-----------------+------+----------+ | |||
| | Header | 6LBR | 6LR | 6LN | | | Header | 6LBR | 6LR | 6LN | | |||
| +-------------------+-----------------+------+----------+ | +-------------------+-----------------+------+----------+ | |||
| | Inserted headers | (opt: RPI), RH3 | -- | -- | | | Inserted headers | (opt: RPI), RH3 | -- | -- | | |||
| | Removed headers | -- | -- | RH3,RPI | | | Removed headers | -- | -- | RH3,RPI | | |||
| | Re-added headers | -- | -- | -- | | | Re-added headers | -- | -- | -- | | |||
| | Modified headers | -- | RH3 | -- | | | Modified headers | -- | RH3 | -- | | |||
| | Untouched headers | -- | -- | -- | | | Untouched headers | -- | -- | -- | | |||
| skipping to change at page 21, line 6 ¶ | skipping to change at page 21, line 6 ¶ | |||
| 6.3. Example of Flow from root to not-RPL-aware-leaf | 6.3. Example of Flow from root to not-RPL-aware-leaf | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| root (6LBR)--> 6LR --> not-RPL-aware-leaf (IPv6 node) | root (6LBR)--> 6LR --> not-RPL-aware-leaf (IPv6 node) | |||
| In 6LBR the RH3 is added, and modified in 6LR where it is fully | In 6LBR the RH3 is added, and modified in 6LR where it is fully | |||
| consumed, but left there. If the RPI is left present, the IPv6 node | consumed, but left there. If the RPI is left present, the IPv6 node | |||
| which does not understand it will drop it, therefore the RPI should | which does not understand it will drop it, therefore the RPI should | |||
| be removed before reaching the IPv6-only node. To permit removal, an | be removed before reaching the IPv6-only node. To permit removal, an | |||
| IPIP header (hop-by-hop) or addressed to the last 6LR is necessary. | IP-in-IP header (hop-by-hop) or addressed to the last 6LR is | |||
| Due the complete knowledge of the topology at the root, the 6LBR is | necessary. Due the complete knowledge of the topology at the root, | |||
| able to address the IPIP header to the last 6LR. | the 6LBR is able to address the IP-in-IP header to the last 6LR. | |||
| Omitting the RPI entirely is therefore a better solution, as no IPIP | Omitting the RPI entirely is therefore a better solution, as no IP- | |||
| header is necessary. | in-IP header is necessary. | |||
| +-------------------+------+-----+------+ | +-------------------+------+-----+------+ | |||
| | Header | 6LBR | 6LR | IPv6 | | | Header | 6LBR | 6LR | IPv6 | | |||
| +-------------------+------+-----+------+ | +-------------------+------+-----+------+ | |||
| | Inserted headers | RH3 | -- | -- | | | Inserted headers | RH3 | -- | -- | | |||
| | Removed headers | -- | -- | -- | | | Removed headers | -- | -- | -- | | |||
| | Re-added headers | -- | -- | -- | | | Re-added headers | -- | -- | -- | | |||
| | Modified headers | -- | RH3 | -- | | | Modified headers | -- | RH3 | -- | | |||
| | Untouched headers | -- | -- | -- | | | Untouched headers | -- | -- | -- | | |||
| +-------------------+------+-----+------+ | +-------------------+------+-----+------+ | |||
| skipping to change at page 21, line 33 ¶ | skipping to change at page 21, line 33 ¶ | |||
| Non Storing: Summary of the use of headers from root to not-RPL- | Non Storing: Summary of the use of headers from root to not-RPL- | |||
| aware-leaf | aware-leaf | |||
| 6.4. Example of Flow from not-RPL-aware-leaf to root | 6.4. Example of Flow from not-RPL-aware-leaf to root | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| IPv6-node --> 6LR1 --> 6LR2 --> root (6LBR) | IPv6-node --> 6LR1 --> 6LR2 --> root (6LBR) | |||
| In this case the RPI is added by the first 6LR, encapsulated in an | In this case the RPI is added by the first 6LR, encapsulated in an | |||
| IPIP header, and is not modified in the followings 6LRs. The RPI and | IP-in-IP header, and is not modified in the followings 6LRs. The RPI | |||
| entire packet is consumed by the root. | and entire packet is consumed by the root. | |||
| +-------------------+------+------------+------+------------+ | +-------------------+------+----------------+------+----------------+ | |||
| | Header | IPv6 | 6LR1 | 6LR2 | 6LBR | | | Header | IPv6 | 6LR1 | 6LR2 | 6LBR | | |||
| +-------------------+------+------------+------+------------+ | +-------------------+------+----------------+------+----------------+ | |||
| | Inserted headers | -- | IPIP(RPI) | -- | -- | | | Inserted headers | -- | IP-in-IP(RPI) | -- | -- | | |||
| | Removed headers | -- | -- | -- | IPIP(RPI) | | | Removed headers | -- | -- | -- | IP-in-IP(RPI) | | |||
| | Re-added headers | -- | -- | -- | -- | | | Re-added headers | -- | -- | -- | -- | | |||
| | Modified headers | -- | -- | -- | -- | | | Modified headers | -- | -- | -- | -- | | |||
| | Untouched headers | -- | IPIP(RPI) | -- | -- | | | Untouched headers | -- | IP-in-IP(RPI) | -- | -- | | |||
| +-------------------+------+------------+------+------------+ | +-------------------+------+----------------+------+----------------+ | |||
| Non Storing: Summary of the use of headers from not-RPL-aware-leaf to | Non Storing: Summary of the use of headers from not-RPL-aware-leaf to | |||
| root | root | |||
| 6.5. Example of Flow from RPL-aware-leaf to Internet | 6.5. Example of Flow from RPL-aware-leaf to Internet | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| RPL-aware-leaf (6LN) --> 6LR --> root (6LBR) --> Internet | RPL-aware-leaf (6LN) --> 6LR --> root (6LBR) --> Internet | |||
| This case requires that the RPI be added, but remoted by the 6LBR. | This case requires that the RPI be added, but remoted by the 6LBR. | |||
| The 6LN must therefore add the RPI inside an IPIP header, addressed | The 6LN must therefore add the RPI inside an IP-in-IP header, | |||
| to the root. This case is identical to storing-mode case. | addressed to the root. This case is identical to storing-mode case. | |||
| The IPv6 flow label should be set to zero to aid in compression, and | The IPv6 flow label should be set to zero to aid in compression, and | |||
| the 6LBR will set it to a non-zero value when sending towards the | the 6LBR will set it to a non-zero value when sending towards the | |||
| Internet. | Internet. | |||
| +-------------------+-----------+------+------------+----------+ | +-----------------+---------------+------+---------------+----------+ | |||
| | Header | 6LN | 6LR | 6LBR | Internet | | | Header | 6LN | 6LR | 6LBR | Internet | | |||
| +-------------------+-----------+------+------------+----------+ | +-----------------+---------------+------+---------------+----------+ | |||
| | Inserted headers | IPIP(RPI) | -- | -- | -- | | | Inserted | IP-in-IP(RPI) | -- | -- | -- | | |||
| | Removed headers | -- | -- | IPIP(RPI) | -- | | | headers | | | | | | |||
| | Re-added headers | -- | -- | -- | -- | | | Removed headers | -- | -- | IP-in-IP(RPI) | -- | | |||
| | Modified headers | -- | -- | -- | -- | | | Re-added | -- | -- | -- | -- | | |||
| | Untouched headers | -- | RPI | -- | -- | | | headers | | | | | | |||
| +-------------------+-----------+------+------------+----------+ | | Modified | -- | -- | -- | -- | | |||
| | headers | | | | | | ||||
| | Untouched | -- | RPI | -- | -- | | ||||
| | headers | | | | | | ||||
| +-----------------+---------------+------+---------------+----------+ | ||||
| Non Storing: Summary of the use of headers from RPL-aware-leaf to | Non Storing: Summary of the use of headers from RPL-aware-leaf to | |||
| Internet | Internet | |||
| 6.6. Example of Flow from Internet to RPL-aware-leaf | 6.6. Example of Flow from Internet to RPL-aware-leaf | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| Internet --> root (6LBR) --> 6LR --> RPL-aware-leaf (6LN) | Internet --> root (6LBR) --> 6LR --> RPL-aware-leaf (6LN) | |||
| The 6LBR must add an RH3 header. As the 6LBR will know the path and | The 6LBR must add an RH3 header. As the 6LBR will know the path and | |||
| address of the target not, it can address the IPIP header to that | address of the target not, it can address the IP-in-IP header to that | |||
| node. The 6LBR will zero the flow label upon entry in order to aid | node. The 6LBR will zero the flow label upon entry in order to aid | |||
| compression. | compression. | |||
| The RPI may be added or not. | The RPI may be added or not. | |||
| +----------------+----------+--------------------+------------+-----+ | +----------+----------+-----------------------+---------------+-----+ | |||
| | Header | Internet | 6LBR | 6LR | 6LN | | | Header | Internet | 6LBR | 6LR | 6LN | | |||
| +----------------+----------+--------------------+------------+-----+ | +----------+----------+-----------------------+---------------+-----+ | |||
| | Inserted | -- | IPIP(RH3,opt:RPI) | -- | -- | | | Inserted | -- | IP-in-IP(RH3,opt:RPI) | -- | -- | | |||
| | headers | | | | | | | headers | | | | | | |||
| | Removed | -- | -- | IPIP(RH3) | -- | | | Removed | -- | -- | IP-in-IP(RH3) | -- | | |||
| | headers | | | | | | | headers | | | | | | |||
| | Re-added | -- | -- | -- | -- | | | Re-added | -- | -- | -- | -- | | |||
| | headers | | | | | | | headers | | | | | | |||
| | Modified | -- | -- | IPIP(RH3) | -- | | | Modified | -- | -- | IP-in-IP(RH3) | -- | | |||
| | headers | | | | | | | headers | | | | | | |||
| | Untouched | -- | -- | -- | -- | | | Untouche | -- | -- | -- | -- | | |||
| | headers | | | | | | | d | | | | | | |||
| +----------------+----------+--------------------+------------+-----+ | | headers | | | | | | |||
| +----------+----------+-----------------------+---------------+-----+ | ||||
| Non Storing: Summary of the use of headers from Internet to RPL- | Non Storing: Summary of the use of headers from Internet to RPL- | |||
| aware-leaf | aware-leaf | |||
| 6.7. Example of Flow from not-RPL-aware-leaf to Internet | 6.7. Example of Flow from not-RPL-aware-leaf to Internet | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| not-RPL-aware-leaf (6LN) --> 6LR --> root (6LBR) --> Internet | not-RPL-aware-leaf (6LN) --> 6LR --> root (6LBR) --> Internet | |||
| In this case the flow label is recommended to be zero in the IPv6 | In this case the flow label is recommended to be zero in the IPv6 | |||
| node. As RPL headers are added in the IPv6 node, the first 6LN will | node. As RPL headers are added in the IPv6 node, the first 6LN will | |||
| add an RPI header inside a new IPIP header. The IPIP header will be | add an RPI header inside a new IP-in-IP header. The IP-in-IP header | |||
| addressed to the root. This case is identical to the storing-mode | will be addressed to the root. This case is identical to the | |||
| case. | storing-mode case. | |||
| +-------------------+------+-----------+------------+----------+ | +-----------------+------+---------------+---------------+----------+ | |||
| | Header | IPv6 | 6LR | 6LBR | Internet | | | Header | IPv6 | 6LR | 6LBR | Internet | | |||
| +-------------------+------+-----------+------------+----------+ | +-----------------+------+---------------+---------------+----------+ | |||
| | Inserted headers | -- | IPIP(RPI) | -- | -- | | | Inserted | -- | IP-in-IP(RPI) | -- | -- | | |||
| | Removed headers | -- | -- | IPIP(RPI) | -- | | | headers | | | | | | |||
| | Re-added headers | -- | -- | -- | -- | | | Removed headers | -- | -- | IP-in-IP(RPI) | -- | | |||
| | Modified headers | -- | -- | -- | -- | | | Re-added | -- | -- | -- | -- | | |||
| | Untouched headers | -- | -- | -- | -- | | | headers | | | | | | |||
| +-------------------+------+-----------+------------+----------+ | | Modified | -- | -- | -- | -- | | |||
| | headers | | | | | | ||||
| | Untouched | -- | -- | -- | -- | | ||||
| | headers | | | | | | ||||
| +-----------------+------+---------------+---------------+----------+ | ||||
| Non Storing: Summary of the use of headers from not-RPL-aware-leaf to | Non Storing: Summary of the use of headers from not-RPL-aware-leaf to | |||
| Internet | Internet | |||
| 6.8. Example of Flow from Internet to non-RPL-aware-leaf | 6.8. Example of Flow from Internet to non-RPL-aware-leaf | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| Internet --> root (6LBR) --> 6LR --> not-RPL-aware-leaf (6LN) | Internet --> root (6LBR) --> 6LR --> not-RPL-aware-leaf (6LN) | |||
| The 6LBR must add an RH3 header inside an IPIP header. The 6LBR will | ||||
| know the path, and will recognize that the final node is not an RPL | ||||
| capable node as it will have received the connectivity DAO from the | ||||
| nearest 6LR. The 6LBR can therefore make the IPIP header destination | ||||
| be the last 6LR. The 6LBR will zero the flow label upon entry in | ||||
| order to aid compression. | ||||
| +--------------+----------+-------------------+--------------+------+ | The 6LBR must add an RH3 header inside an IP-in-IP header. The 6LBR | |||
| | Header | Internet | 6LBR | 6LR | IPv6 | | will know the path, and will recognize that the final node is not an | |||
| +--------------+----------+-------------------+--------------+------+ | RPL capable node as it will have received the connectivity DAO from | |||
| | Inserted | -- | IPIP(RH3,opt:RPI) | -- | -- | | the nearest 6LR. The 6LBR can therefore make the IP-in-IP header | |||
| | headers | | | | | | destination be the last 6LR. The 6LBR will zero the flow label upon | |||
| | Removed | -- | -- | IPIP(RH3, | -- | | entry in order to aid compression. | |||
| | headers | | | RPI) | | | ||||
| | Re-added | -- | -- | -- | -- | | +----------+---------+-----------------------+---------------+------+ | |||
| | headers | | | | | | | Header | Interne | 6LBR | 6LR | IPv6 | | |||
| | Modified | -- | -- | -- | -- | | | | t | | | | | |||
| | headers | | | | | | +----------+---------+-----------------------+---------------+------+ | |||
| | Untouched | -- | -- | -- | -- | | | Inserted | -- | IP-in-IP(RH3,opt:RPI) | -- | -- | | |||
| | headers | | | | | | | headers | | | | | | |||
| +--------------+----------+-------------------+--------------+------+ | | Removed | -- | -- | IP-in-IP(RH3, | -- | | |||
| | headers | | | RPI) | | | ||||
| | Re-added | -- | -- | -- | -- | | ||||
| | headers | | | | | | ||||
| | Modified | -- | -- | -- | -- | | ||||
| | headers | | | | | | ||||
| | Untouche | -- | -- | -- | -- | | ||||
| | d | | | | | | ||||
| | headers | | | | | | ||||
| +----------+---------+-----------------------+---------------+------+ | ||||
| NonStoring: Summary of the use of headers from Internet to non-RPL- | NonStoring: Summary of the use of headers from Internet to non-RPL- | |||
| aware-leaf | aware-leaf | |||
| 6.9. Example of Flow from RPL-aware-leaf to RPL-aware-leaf | 6.9. Example of Flow from RPL-aware-leaf to RPL-aware-leaf | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| 6LN --> 6LR --> root (6LBR) --> 6LR --> 6LN | 6LN --> 6LR --> root (6LBR) --> 6LR --> 6LN | |||
| This case involves only nodes in same RPL Domain. The originating | This case involves only nodes in same RPL Domain. The originating | |||
| node will add an RPI header to the original packet, and send the | node will add an RPI header to the original packet, and send the | |||
| packet upwards. | packet upwards. | |||
| The originating node could put the RPI into an IPIP header addressed | The originating node could put the RPI into an IP-in-IP header | |||
| to the root, so that the 6LBR can remove that header. | addressed to the root, so that the 6LBR can remove that header. | |||
| The 6LBR will need to insert an RH3 header, which requires that it | The 6LBR will need to insert an RH3 header, which requires that it | |||
| add an IPIP header. It may be able to remove the RPI if it was | add an IP-in-IP header. It may be able to remove the RPI if it was | |||
| contained in an IPIP header addressed to it. Otherwise, there may be | contained in an IP-in-IP header addressed to it. Otherwise, there | |||
| an RPI header buried inside the inner IP header, which should get | may be an RPI header buried inside the inner IP header, which should | |||
| ignored. | get ignored. | |||
| Networks that use the RPL P2P extension [RFC6997] are essentially | Networks that use the RPL P2P extension [RFC6997] are essentially | |||
| non-storing DODAGs and fall into this scenario. | non-storing DODAGs and fall into this scenario. | |||
| +----------------+-----------+----------------+-----+---------------+ | +----------+---------------+--------------+-----+-------------------+ | |||
| | Header | 6LN src | 6LBR | 6LR | 6LN dst | | | Header | 6LN src | 6LBR | 6LR | 6LN dst | | |||
| +----------------+-----------+----------------+-----+---------------+ | +----------+---------------+--------------+-----+-------------------+ | |||
| | Inserted | IPIP(RPI) | IPIP(RH3 to | -- | -- | | | Inserted | IP-in-IP(RPI) | IP-in-IP(RH3 | -- | -- | | |||
| | headers | | 6LN,RPI) | | | | | headers | | to 6LN,RPI) | | | | |||
| | Removed | -- | -- | -- | IPIP(RH3,RPI) | | | Removed | -- | -- | -- | IP-in-IP(RH3,RPI) | | |||
| | headers | | | | | | | headers | | | | | | |||
| | Re-added | -- | -- | -- | -- | | | Re-added | -- | -- | -- | -- | | |||
| | headers | | | | | | | headers | | | | | | |||
| | Modified | -- | -- | -- | -- | | | Modified | -- | -- | -- | -- | | |||
| | headers | | | | | | | headers | | | | | | |||
| | Untouched | -- | -- | -- | -- | | | Untouche | -- | -- | -- | -- | | |||
| | headers | | | | | | | d | | | | | | |||
| +----------------+-----------+----------------+-----+---------------+ | | headers | | | | | | |||
| +----------+---------------+--------------+-----+-------------------+ | ||||
| Non Storing: Summary of the use of headers for RPL-aware-leaf to RPL- | Non Storing: Summary of the use of headers for RPL-aware-leaf to RPL- | |||
| aware-leaf | aware-leaf | |||
| 6.10. Example of Flow from RPL-aware-leaf to not-RPL-aware-leaf | 6.10. Example of Flow from RPL-aware-leaf to not-RPL-aware-leaf | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| 6LN --> 6LR --> root (6LBR) --> 6LR --> not-RPL-aware 6LN | 6LN --> 6LR --> root (6LBR) --> 6LR --> not-RPL-aware 6LN | |||
| As in the previous case, the 6LN will insert an RPI header which MUST | As in the previous case, the 6LN will insert an RPI header which MUST | |||
| be in an IPIP header addressed to the root so that the 6LBR can | be in an IP-in-IP header addressed to the root so that the 6LBR can | |||
| remove this RPI. The 6LBR will then insert an RH3 inside a new IPIP | remove this RPI. The 6LBR will then insert an RH3 inside a new IP- | |||
| header addressed to the 6LN above the destination node. | in-IP header addressed to the 6LN above the destination node. | |||
| +---------------+-----------+---------------+----------------+------+ | +-----------+---------------+---------------+----------------+------+ | |||
| | Header | 6LN | 6LBR | 6LR | IPv6 | | | Header | 6LN | 6LBR | 6LR | IPv6 | | |||
| +---------------+-----------+---------------+----------------+------+ | +-----------+---------------+---------------+----------------+------+ | |||
| | Inserted | IPIP(RPI) | IPIP(RH3, opt | -- | -- | | | Inserted | IP-in-IP(RPI) | IP-in-IP(RH3, | -- | -- | | |||
| | headers | | RPI) | | | | | headers | | opt RPI) | | | | |||
| | Removed | -- | IPIP(RPI) | IPIP(RH3, opt | -- | | | Removed | -- | IP-in-IP(RPI) | IP-in-IP(RH3, | -- | | |||
| | headers | | | RPI) | | | | headers | | | opt RPI) | | | |||
| | Re-added | -- | -- | -- | -- | | | Re-added | -- | -- | -- | -- | | |||
| | headers | | | | | | | headers | | | | | | |||
| | Modified | -- | -- | -- | -- | | | Modified | -- | -- | -- | -- | | |||
| | headers | | | | | | | headers | | | | | | |||
| | Untouched | -- | -- | -- | -- | | | Untouched | -- | -- | -- | -- | | |||
| | headers | | | | | | | headers | | | | | | |||
| +---------------+-----------+---------------+----------------+------+ | +-----------+---------------+---------------+----------------+------+ | |||
| Non Storing: Summary of the use of headers from RPL-aware-leaf to | Non Storing: Summary of the use of headers from RPL-aware-leaf to | |||
| not-RPL-aware-leaf | not-RPL-aware-leaf | |||
| 6.11. Example of Flow from not-RPL-aware-leaf to RPL-aware-leaf | 6.11. Example of Flow from not-RPL-aware-leaf to RPL-aware-leaf | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| not-RPL-aware 6LN --> 6LR --> root (6LBR) --> 6LR --> 6LN | not-RPL-aware 6LN --> 6LR --> root (6LBR) --> 6LR --> 6LN | |||
| This scenario is mostly identical to the previous one. The RPI is | This scenario is mostly identical to the previous one. The RPI is | |||
| added by the first 6LR inside an IPIP header addressed to the root. | added by the first 6LR inside an IP-in-IP header addressed to the | |||
| The 6LBR will remove this RPI, and add it's own IPIP header | root. The 6LBR will remove this RPI, and add it's own IP-in-IP | |||
| containing an RH3 header. | header containing an RH3 header. | |||
| +-------------------+------+------------+-----------+------------+ | +------------+------+---------------+---------------+---------------+ | |||
| | Header | IPv6 | 6LR | 6LBR | 6LN | | | Header | IPv6 | 6LR | 6LBR | 6LN | | |||
| +-------------------+------+------------+-----------+------------+ | +------------+------+---------------+---------------+---------------+ | |||
| | Inserted headers | -- | IPIP(RPI) | IPIP(RH3) | -- | | | Inserted | -- | IP-in-IP(RPI) | IP-in-IP(RH3) | -- | | |||
| | Removed headers | -- | IPIP(RPI) | -- | IPIP(RH3) | | | headers | | | | | | |||
| | Re-added headers | -- | -- | -- | -- | | | Removed | -- | IP-in-IP(RPI) | -- | IP-in-IP(RH3) | | |||
| | Modified headers | -- | -- | -- | -- | | | headers | | | | | | |||
| | Untouched headers | -- | -- | -- | -- | | | Re-added | -- | -- | -- | -- | | |||
| +-------------------+------+------------+-----------+------------+ | | headers | | | | | | |||
| | Modified | -- | -- | -- | -- | | ||||
| | headers | | | | | | ||||
| | Untouched | -- | -- | -- | -- | | ||||
| | headers | | | | | | ||||
| +------------+------+---------------+---------------+---------------+ | ||||
| Non Storing: Summary of the use of headers from not-RPL-aware-leaf to | Non Storing: Summary of the use of headers from not-RPL-aware-leaf to | |||
| RPL-aware-leaf | RPL-aware-leaf | |||
| 6.12. Example of Flow from not-RPL-aware-leaf to not-RPL-aware-leaf | 6.12. Example of Flow from not-RPL-aware-leaf to not-RPL-aware-leaf | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| not-RPL-aware 6LN --> 6LR --> root (6LBR) --> 6LR --> not-RPL-aware | not-RPL-aware 6LN --> 6LR --> root (6LBR) --> 6LR --> not-RPL-aware | |||
| 6LN | 6LN | |||
| This scenario is the combination of the previous two cases. | This scenario is the combination of the previous two cases. | |||
| +--------------+------+-----------+-----------+--------------+------+ | +----------+-----+-------------+--------------+--------------+------+ | |||
| | Header | IPv6 | 6LR | 6LBR | 6LR | IPv6 | | | Header | IPv | 6LR | 6LBR | 6LR | IPv6 | | |||
| +--------------+------+-----------+-----------+--------------+------+ | | | 6 | | | | | | |||
| | Inserted | -- | IPIP(RPI) | IPIP(RH3) | -- | -- | | +----------+-----+-------------+--------------+--------------+------+ | |||
| | headers | | | | | | | | Inserted | -- | IP-in- | IP-in- | -- | -- | | |||
| | Removed | -- | -- | IPIP(RPI) | IPIP(RH3, | -- | | | headers | | IP(RPI) | IP(RH3) | | | | |||
| | headers | | | | opt RPI) | | | | Removed | -- | -- | IP-in- | IP-in- | -- | | |||
| | Re-added | -- | -- | -- | -- | -- | | | headers | | | IP(RPI) | IP(RH3, opt | | | |||
| | headers | | | | | | | | | | | | RPI) | | | |||
| | Modified | -- | -- | -- | -- | -- | | | Re-added | -- | -- | -- | -- | -- | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| | Untouched | -- | -- | -- | -- | -- | | | Modified | -- | -- | -- | -- | -- | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| +--------------+------+-----------+-----------+--------------+------+ | | Untouche | -- | -- | -- | -- | -- | | |||
| | d | | | | | | | ||||
| | headers | | | | | | | ||||
| +----------+-----+-------------+--------------+--------------+------+ | ||||
| Non Storing: Summary of the use of headers from not-RPL-aware-leaf to | Non Storing: Summary of the use of headers from not-RPL-aware-leaf to | |||
| not-RPL-aware-leaf | not-RPL-aware-leaf | |||
| 7. Observations about the problem | 7. Observations about the problem | |||
| 7.1. Storing mode | 7.1. Storing mode | |||
| In the completely general storing case, which includes not-RPL aware | In the completely general storing case, which includes not-RPL aware | |||
| leaf nodes, it is not possible for a sending node to know if the | leaf nodes, it is not possible for a sending node to know if the | |||
| destination is RPL aware, and therefore it must always use hop-by-hop | destination is RPL aware, and therefore it must always use hop-by-hop | |||
| IPIP encapsulation, and it can never omit the IPIP encapsulation. | IP-in-IP encapsulation, and it can never omit the IP-in-IP | |||
| See table Table 1 | encapsulation. See table Table 1 | |||
| The simplest fully general stiaution for storing mode is to always | The simplest fully general stiaution for storing mode is to always | |||
| put in hop-by-hop IPIP headers. [I-D.ietf-roll-routing-dispatch] | put in hop-by-hop IP-in-IP headers. [I-D.ietf-roll-routing-dispatch] | |||
| shows that this hop-by-hop IPIP header can be compressed down to | shows that this hop-by-hop IP-in-IP header can be compressed down to | |||
| {TBD} bytes. | {TBD} bytes. | |||
| There are potential significant advantages to having a single code | There are potential significant advantages to having a single code | |||
| path that always processes IPIP headers with no options. | path that always processes IP-in-IP headers with no options. | |||
| If all RPL aware nodes can be told/configured that there are no non- | If all RPL aware nodes can be told/configured that there are no non- | |||
| RPL aware leaf nodes, then the only case where an IPIP header is | RPL aware leaf nodes, then the only case where an IP-in-IP header is | |||
| needed is when communicating outside the LLN. The 6LBR knows well | needed is when communicating outside the LLN. The 6LBR knows well | |||
| when the communication is from the outside, and the 6LN can tell by | when the communication is from the outside, and the 6LN can tell by | |||
| comparing the destination address to the prefix provided in the PIO. | comparing the destination address to the prefix provided in the PIO. | |||
| If it is known that there are no communications outside the RPL | If it is known that there are no communications outside the RPL | |||
| domain (noting that the RPL domain may well extend to outside the | domain (noting that the RPL domain may well extend to outside the | |||
| LLN), then RPI headers can be included in all packets, and IPIP | LLN), then RPI headers can be included in all packets, and IP-in-IP | |||
| headers are *never* needed. This may be significantly advantageous | headers are *never* needed. This may be significantly advantageous | |||
| in relatively closed systems such as in building or industrial | in relatively closed systems such as in building or industrial | |||
| automation. Again, there are advantages to having a single code | automation. Again, there are advantages to having a single code | |||
| path. | path. | |||
| In order to support the above two cases with full generality, the | In order to support the above two cases with full generality, the | |||
| different situations (always do IPIP vs never use IPIP) should be | different situations (always do IP-in-IP vs never use IP-in-IP) | |||
| signaled in the RPL protocol itself. | should be signaled in the RPL protocol itself. | |||
| 7.2. Non-Storing mode | 7.2. Non-Storing mode | |||
| This the non-storing case, dealing with non-RPL aware leaf nodes is | This the non-storing case, dealing with non-RPL aware leaf nodes is | |||
| much easier as the 6LBR (DODAG root) has complete knowledge about the | much easier as the 6LBR (DODAG root) has complete knowledge about the | |||
| connectivity of all nodes, and all traffic flows through the root | connectivity of all nodes, and all traffic flows through the root | |||
| node. | node. | |||
| The 6LBR can recognize non-RPL aware leaf nodes because it will | The 6LBR can recognize non-RPL aware leaf nodes because it will | |||
| receive a DAO about that node from the 6LN immediately above that | receive a DAO about that node from the 6LN immediately above that | |||
| node. This means that the non-storing mode case can avoid ever using | node. This means that the non-storing mode case can avoid ever using | |||
| hop-by-hop IPIP headers. | hop-by-hop IP-in-IP headers. | |||
| It is unclear what it would mean for an RH3 header to be present in a | It is unclear what it would mean for an RH3 header to be present in a | |||
| hop-by-hop IPIP header. The receiving node ought to consume the IPIP | hop-by-hop IP-in-IP header. The receiving node ought to consume the | |||
| header, and therefore consume the RH3 as well, and then attempt to | IP-in-IP header, and therefore consume the RH3 as well, and then | |||
| send the packet again. But intermediate 6LN nodes would not know how | attempt to send the packet again. But intermediate 6LN nodes would | |||
| to forward the packet, so the RH3 would need to be retained. This is | not know how to forward the packet, so the RH3 would need to be | |||
| a new kind of IPv6 packet processing. Therefore it may be that on | retained. This is a new kind of IPv6 packet processing. Therefore | |||
| the outbound leg of non-storing RPL networks, that hop-by-hop IPIP | it may be that on the outbound leg of non-storing RPL networks, that | |||
| header can NOT be used. | hop-by-hop IP-in-IP header can NOT be used. | |||
| [I-D.ietf-roll-routing-dispatch] shows how the destination=root, and | [I-D.ietf-roll-routing-dispatch] shows how the destination=root, and | |||
| destination=6LN IPIP header can be compressed down to {TBD} bytes. | destination=6LN IP-in-IP header can be compressed down to {TBD} | |||
| bytes. | ||||
| Unlike in the storing mode case, there are no need for all nodes to | Unlike in the storing mode case, there are no need for all nodes to | |||
| know about the existence of non-RPL aware nodes. Only the 6LBR needs | know about the existence of non-RPL aware nodes. Only the 6LBR needs | |||
| to change when there are non-RPL aware nodes. Further, in the non- | to change when there are non-RPL aware nodes. Further, in the non- | |||
| storing case, the 6LBR is informed by the DAOs when there are non-RPL | storing case, the 6LBR is informed by the DAOs when there are non-RPL | |||
| aware nodes. | aware nodes. | |||
| 8. 6LoRH Compression cases | 8. 6LoRH Compression cases | |||
| The [I-D.ietf-roll-routing-dispatch] proposes a compression method | The [I-D.ietf-roll-routing-dispatch] proposes a compression method | |||
| skipping to change at page 29, line 26 ¶ | skipping to change at page 29, line 36 ¶ | |||
| The security considerations covering of [RFC6553] and [RFC6554] apply | The security considerations covering of [RFC6553] and [RFC6554] apply | |||
| when the packets get into RPL Domain. | when the packets get into RPL Domain. | |||
| 11. Acknowledgments | 11. Acknowledgments | |||
| This work is partially funded by the FP7 Marie Curie Initial Training | This work is partially funded by the FP7 Marie Curie Initial Training | |||
| Network (ITN) METRICS project (grant agreement No. 607728). | Network (ITN) METRICS project (grant agreement No. 607728). | |||
| The authors would like to acknowledge the review, feedback, and | The authors would like to acknowledge the review, feedback, and | |||
| comments of Thomas Watteyne, Xavier Vilajosana, Robert Cragie and | comments of Thomas Watteyne, Xavier Vilajosana, Robert Cragie, Simon | |||
| Simon Duquennoy. | Duquennoy and Peter van der Stok. | |||
| 12. References | 12. References | |||
| 12.1. Normative References | 12.1. Normative References | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <http://www.rfc-editor.org/info/rfc2119>. | <http://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6 | [RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6 | |||
| (IPv6) Specification", RFC 2460, December 1998. | (IPv6) Specification", RFC 2460, DOI 10.17487/RFC2460, | |||
| December 1998, <http://www.rfc-editor.org/info/rfc2460>. | ||||
| [RFC6550] Winter, T., Ed., Thubert, P., Ed., Brandt, A., Hui, J., | [RFC6550] Winter, T., Ed., Thubert, P., Ed., Brandt, A., Hui, J., | |||
| Kelsey, R., Levis, P., Pister, K., Struik, R., Vasseur, | Kelsey, R., Levis, P., Pister, K., Struik, R., Vasseur, | |||
| JP., and R. Alexander, "RPL: IPv6 Routing Protocol for | JP., and R. Alexander, "RPL: IPv6 Routing Protocol for | |||
| Low-Power and Lossy Networks", RFC 6550, | Low-Power and Lossy Networks", RFC 6550, | |||
| DOI 10.17487/RFC6550, March 2012, | DOI 10.17487/RFC6550, March 2012, | |||
| <http://www.rfc-editor.org/info/rfc6550>. | <http://www.rfc-editor.org/info/rfc6550>. | |||
| [RFC6553] Hui, J. and JP. Vasseur, "The Routing Protocol for Low- | [RFC6553] Hui, J. and JP. Vasseur, "The Routing Protocol for Low- | |||
| Power and Lossy Networks (RPL) Option for Carrying RPL | Power and Lossy Networks (RPL) Option for Carrying RPL | |||
| skipping to change at page 30, line 19 ¶ | skipping to change at page 30, line 26 ¶ | |||
| <http://www.rfc-editor.org/info/rfc6553>. | <http://www.rfc-editor.org/info/rfc6553>. | |||
| [RFC6554] Hui, J., Vasseur, JP., Culler, D., and V. Manral, "An IPv6 | [RFC6554] Hui, J., Vasseur, JP., Culler, D., and V. Manral, "An IPv6 | |||
| Routing Header for Source Routes with the Routing Protocol | Routing Header for Source Routes with the Routing Protocol | |||
| for Low-Power and Lossy Networks (RPL)", RFC 6554, | for Low-Power and Lossy Networks (RPL)", RFC 6554, | |||
| DOI 10.17487/RFC6554, March 2012, | DOI 10.17487/RFC6554, March 2012, | |||
| <http://www.rfc-editor.org/info/rfc6554>. | <http://www.rfc-editor.org/info/rfc6554>. | |||
| 12.2. Informative References | 12.2. Informative References | |||
| [I-D.ietf-6man-rfc2460bis] | ||||
| Deering, S. and R. Hinden, "Internet Protocol, Version 6 | ||||
| (IPv6) Specification", draft-ietf-6man-rfc2460bis-04 (work | ||||
| in progress), March 2016. | ||||
| [I-D.ietf-6tisch-architecture] | [I-D.ietf-6tisch-architecture] | |||
| Thubert, P., "An Architecture for IPv6 over the TSCH mode | Thubert, P., "An Architecture for IPv6 over the TSCH mode | |||
| of IEEE 802.15.4", draft-ietf-6tisch-architecture-09 (work | of IEEE 802.15.4", draft-ietf-6tisch-architecture-10 (work | |||
| in progress), November 2015. | in progress), June 2016. | |||
| [I-D.ietf-roll-routing-dispatch] | [I-D.ietf-roll-routing-dispatch] | |||
| Thubert, P., Bormann, C., Toutain, L., and R. Cragie, | Thubert, P., Bormann, C., Toutain, L., and R. Cragie, | |||
| "6LoWPAN Routing Header", draft-ietf-roll-routing- | "6LoWPAN Routing Header", draft-ietf-roll-routing- | |||
| dispatch-00 (work in progress), March 2016. | dispatch-00 (work in progress), March 2016. | |||
| [RFC4443] Conta, A., Deering, S., and M. Gupta, Ed., "Internet | ||||
| Control Message Protocol (ICMPv6) for the Internet | ||||
| Protocol Version 6 (IPv6) Specification", RFC 4443, | ||||
| DOI 10.17487/RFC4443, March 2006, | ||||
| <http://www.rfc-editor.org/info/rfc4443>. | ||||
| [RFC6775] Shelby, Z., Ed., Chakrabarti, S., Nordmark, E., and C. | ||||
| Bormann, "Neighbor Discovery Optimization for IPv6 over | ||||
| Low-Power Wireless Personal Area Networks (6LoWPANs)", | ||||
| RFC 6775, DOI 10.17487/RFC6775, November 2012, | ||||
| <http://www.rfc-editor.org/info/rfc6775>. | ||||
| [RFC6997] Goyal, M., Ed., Baccelli, E., Philipp, M., Brandt, A., and | [RFC6997] Goyal, M., Ed., Baccelli, E., Philipp, M., Brandt, A., and | |||
| J. Martocci, "Reactive Discovery of Point-to-Point Routes | J. Martocci, "Reactive Discovery of Point-to-Point Routes | |||
| in Low-Power and Lossy Networks", RFC 6997, | in Low-Power and Lossy Networks", RFC 6997, | |||
| DOI 10.17487/RFC6997, August 2013, | DOI 10.17487/RFC6997, August 2013, | |||
| <http://www.rfc-editor.org/info/rfc6997>. | <http://www.rfc-editor.org/info/rfc6997>. | |||
| [RFC7102] Vasseur, JP., "Terms Used in Routing for Low-Power and | [RFC7102] Vasseur, JP., "Terms Used in Routing for Low-Power and | |||
| Lossy Networks", RFC 7102, DOI 10.17487/RFC7102, January | Lossy Networks", RFC 7102, DOI 10.17487/RFC7102, January | |||
| 2014, <http://www.rfc-editor.org/info/rfc7102>. | 2014, <http://www.rfc-editor.org/info/rfc7102>. | |||
| End of changes. 94 change blocks. | ||||
| 404 lines changed or deleted | 511 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||