| < draft-ietf-roll-useofrplinfo-14.txt | draft-ietf-roll-useofrplinfo-15.txt > | |||
|---|---|---|---|---|
| ROLL Working Group M. Robles | ROLL Working Group M. Robles | |||
| Internet-Draft Ericsson | Internet-Draft Ericsson | |||
| Updates: 6550 (if approved) M. Richardson | Updates: 6553, 6550 (if approved) M. Richardson | |||
| Intended status: Standards Track SSW | Intended status: Standards Track SSW | |||
| Expires: October 7, 2017 P. Thubert | Expires: December 31, 2017 P. Thubert | |||
| Cisco | Cisco | |||
| April 5, 2017 | June 29, 2017 | |||
| When to use RFC 6553, 6554 and IPv6-in-IPv6 | When to use RFC 6553, 6554 and IPv6-in-IPv6 | |||
| draft-ietf-roll-useofrplinfo-14 | draft-ietf-roll-useofrplinfo-15 | |||
| Abstract | Abstract | |||
| This document looks at different data flows through LLN (Low-Power | This document looks at different data flows through LLN (Low-Power | |||
| and Lossy Networks) where RPL (IPv6 Routing Protocol for Low-Power | and Lossy Networks) where RPL (IPv6 Routing Protocol for Low-Power | |||
| and Lossy Networks) is used to establish routing. The document | and Lossy Networks) is used to establish routing. The document | |||
| enumerates the cases where RFC 6553, RFC 6554 and IPv6-in-IPv6 | enumerates the cases where RFC 6553, RFC 6554 and IPv6-in-IPv6 | |||
| encapsulation is required. This analysis provides the basis on which | encapsulation is required. This analysis provides the basis on which | |||
| to design efficient compression of these headers. | to design efficient compression of these headers. | |||
| skipping to change at page 1, line 38 ¶ | skipping to change at page 1, line 38 ¶ | |||
| 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, 2017. | This Internet-Draft will expire on December 31, 2017. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2017 IETF Trust and the persons identified as the | Copyright (c) 2017 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 . . . . . . . . . . . . 4 | |||
| 2.1. hop-by-hop IPv6-in-IPv6 headers . . . . . . . . . . . . . 4 | 2.1. hop-by-hop IPv6-in-IPv6 headers . . . . . . . . . . . . . 4 | |||
| 3. Sample/reference topology . . . . . . . . . . . . . . . . . . 4 | 3. Updates to RFC6553 and RFC 6550 . . . . . . . . . . . . . . . 5 | |||
| 4. Use cases . . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 3.1. Updates to RFC 6553 . . . . . . . . . . . . . . . . . . . 5 | |||
| 5. Storing mode . . . . . . . . . . . . . . . . . . . . . . . . 9 | 3.2. Updates to RFC 6550 . . . . . . . . . . . . . . . . . . . 6 | |||
| 5.1. Example of Flow from RPL-aware-leaf to root . . . . . . . 10 | 4. Sample/reference topology . . . . . . . . . . . . . . . . . . 6 | |||
| 5.2. Example of Flow from root to RPL-aware-leaf . . . . . . . 11 | 5. Use cases . . . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 5.3. Example of Flow from root to not-RPL-aware-leaf . . . . . 12 | 6. Storing mode . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 5.4. Example of Flow from not-RPL-aware-leaf to root . . . . . 12 | 6.1. Storing Mode: Interaction between Leaf and Root . . . . . 12 | |||
| 5.5. Example of Flow from RPL-aware-leaf to Internet . . . . . 13 | 6.1.1. SM: Example of Flow from RPL-aware-leaf to root . . . 13 | |||
| 5.6. Example of Flow from Internet to RPL-aware-leaf . . . . . 14 | 6.1.2. SM: Example of Flow from root to RPL-aware-leaf . . . 14 | |||
| 5.7. Example of Flow from not-RPL-aware-leaf to Internet . . . 14 | 6.1.3. SM: Example of Flow from root to not-RPL-aware-leaf . 14 | |||
| 5.8. Example of Flow from Internet to non-RPL-aware-leaf . . . 15 | 6.1.4. SM: Example of Flow from not-RPL-aware-leaf to root . 15 | |||
| 5.9. Example of Flow from RPL-aware-leaf to RPL-aware-leaf . . 16 | 6.2. Storing Mode: Interaction between Leaf and Internet . . . 16 | |||
| 5.10. Example of Flow from RPL-aware-leaf to non-RPL-aware-leaf 17 | 6.2.1. SM: Example of Flow from RPL-aware-leaf to Internet . 16 | |||
| 5.11. Example of Flow from not-RPL-aware-leaf to RPL-aware-leaf 18 | 6.2.2. SM: Example of Flow from Internet to RPL-aware-leaf . 17 | |||
| 5.12. Example of Flow from not-RPL-aware-leaf to not-RPL-aware- | 6.2.3. SM: Example of Flow from not-RPL-aware-leaf to | |||
| leaf . . . . . . . . . . . . . . . . . . . . . . . . . . 19 | Internet . . . . . . . . . . . . . . . . . . . . . . 18 | |||
| 6. Non Storing mode . . . . . . . . . . . . . . . . . . . . . . 20 | 6.2.4. SM: Example of Flow from Internet to non-RPL-aware- | |||
| 6.1. Example of Flow from RPL-aware-leaf to root . . . . . . . 21 | leaf . . . . . . . . . . . . . . . . . . . . . . . . 19 | |||
| 6.2. Example of Flow from root to RPL-aware-leaf . . . . . . . 22 | 6.3. Storing Mode: Interaction between Leaf and Leaf . . . . . 20 | |||
| 6.3. Example of Flow from root to not-RPL-aware-leaf . . . . . 22 | 6.3.1. SM: Example of Flow from RPL-aware-leaf to RPL-aware- | |||
| 6.4. Example of Flow from not-RPL-aware-leaf to root . . . . . 23 | leaf . . . . . . . . . . . . . . . . . . . . . . . . 20 | |||
| 6.5. Example of Flow from RPL-aware-leaf to Internet . . . . . 24 | 6.3.2. SM: Example of Flow from RPL-aware-leaf to non-RPL- | |||
| 6.6. Example of Flow from Internet to RPL-aware-leaf . . . . . 25 | aware-leaf . . . . . . . . . . . . . . . . . . . . . 21 | |||
| 6.7. Example of Flow from not-RPL-aware-leaf to Internet . . . 25 | 6.3.3. SM: Example of Flow from not-RPL-aware-leaf to RPL- | |||
| 6.8. Example of Flow from Internet to not-RPL-aware-leaf . . . 26 | aware-leaf . . . . . . . . . . . . . . . . . . . . . 22 | |||
| 6.9. Example of Flow from RPL-aware-leaf to RPL-aware-leaf . . 27 | 6.3.4. SM: Example of Flow from not-RPL-aware-leaf to not- | |||
| 6.10. Example of Flow from RPL-aware-leaf to not-RPL-aware-leaf 28 | RPL-aware-leaf . . . . . . . . . . . . . . . . . . . 23 | |||
| 6.11. Example of Flow from not-RPL-aware-leaf to RPL-aware-leaf 29 | 7. Non Storing mode . . . . . . . . . . . . . . . . . . . . . . 25 | |||
| 6.12. Example of Flow from not-RPL-aware-leaf to not-RPL-aware- | 7.1. Non-Storing Mode: Interaction between Leaf and Root . . . 26 | |||
| leaf . . . . . . . . . . . . . . . . . . . . . . . . . . 30 | 7.1.1. Non-SM: Example of Flow from RPL-aware-leaf to root . 27 | |||
| 7. Observations about the cases . . . . . . . . . . . . . . . . 31 | 7.1.2. on-SM: Example of Flow from root to RPL-aware-leaf . 27 | |||
| 7.1. Storing mode . . . . . . . . . . . . . . . . . . . . . . 31 | 7.1.3. Non-SM: Example of Flow from root to not-RPL-aware- | |||
| 7.2. Non-Storing mode . . . . . . . . . . . . . . . . . . . . 32 | leaf . . . . . . . . . . . . . . . . . . . . . . . . 28 | |||
| 8. 6LoRH Compression cases . . . . . . . . . . . . . . . . . . . 32 | 7.1.4. Non-SM: Example of Flow from not-RPL-aware-leaf to | |||
| 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 32 | root . . . . . . . . . . . . . . . . . . . . . . . . 29 | |||
| 10. Security Considerations . . . . . . . . . . . . . . . . . . . 32 | 7.2. Non-Storing Mode: Interaction between Leaf and Internet . 30 | |||
| 11. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 35 | 7.2.1. Non-SM: Example of Flow from RPL-aware-leaf to | |||
| 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 35 | Internet . . . . . . . . . . . . . . . . . . . . . . 30 | |||
| 12.1. Normative References . . . . . . . . . . . . . . . . . . 35 | ||||
| 12.2. Informative References . . . . . . . . . . . . . . . . . 36 | 7.2.2. Non-SM: Example of Flow from Internet to RPL-aware- | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 38 | leaf . . . . . . . . . . . . . . . . . . . . . . . . 31 | |||
| 7.2.3. Non-SM: Example of Flow from not-RPL-aware-leaf to | ||||
| Internet . . . . . . . . . . . . . . . . . . . . . . 32 | ||||
| 7.2.4. Non-SM: Example of Flow from Internet to not-RPL- | ||||
| aware-leaf . . . . . . . . . . . . . . . . . . . . . 33 | ||||
| 7.3. Non-Storing Mode: Interaction between Leafs . . . . . . . 34 | ||||
| 7.3.1. Non-SM: Example of Flow from RPL-aware-leaf to RPL- | ||||
| aware-leaf . . . . . . . . . . . . . . . . . . . . . 34 | ||||
| 7.3.2. Non-SM: Example of Flow from RPL-aware-leaf to not- | ||||
| RPL-aware-leaf . . . . . . . . . . . . . . . . . . . 36 | ||||
| 7.3.3. Non-SM: Example of Flow from not-RPL-aware-leaf to | ||||
| RPL-aware-leaf . . . . . . . . . . . . . . . . . . . 37 | ||||
| 7.3.4. Non-SM: Example of Flow from not-RPL-aware-leaf to | ||||
| not-RPL-aware-leaf . . . . . . . . . . . . . . . . . 38 | ||||
| 8. Observations about the cases . . . . . . . . . . . . . . . . 39 | ||||
| 8.1. Storing mode . . . . . . . . . . . . . . . . . . . . . . 39 | ||||
| 8.2. Non-Storing mode . . . . . . . . . . . . . . . . . . . . 40 | ||||
| 9. 6LoRH Compression cases . . . . . . . . . . . . . . . . . . . 40 | ||||
| 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 40 | ||||
| 11. Security Considerations . . . . . . . . . . . . . . . . . . . 40 | ||||
| 12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 43 | ||||
| 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 43 | ||||
| 13.1. Normative References . . . . . . . . . . . . . . . . . . 43 | ||||
| 13.2. Informative References . . . . . . . . . . . . . . . . . 44 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 46 | ||||
| 1. Introduction | 1. Introduction | |||
| RPL (IPv6 Routing Protocol for Low-Power and Lossy Networks) | RPL (IPv6 Routing Protocol for Low-Power and Lossy Networks) | |||
| [RFC6550] is a routing protocol for constrained networks. RFC 6553 | [RFC6550] is a routing protocol for constrained networks. RFC 6553 | |||
| [RFC6553] defines the "RPL option" (RPI), carried within the IPv6 | [RFC6553] defines the "RPL option" (RPI), carried within the IPv6 | |||
| Hop-by-Hop header to quickly identify inconsistencies (loops) in the | Hop-by-Hop header to quickly identify inconsistencies (loops) in the | |||
| routing topology. RFC 6554 [RFC6554] defines the "RPL Source Route | routing topology. RFC 6554 [RFC6554] defines the "RPL Source Route | |||
| Header" (RH3), an IPv6 Extension Header to deliver datagrams within a | Header" (RH3), an IPv6 Extension Header to deliver datagrams within a | |||
| RPL routing domain, particularly in non-storing mode. | RPL routing domain, particularly in non-storing mode. | |||
| skipping to change at page 3, line 31 ¶ | skipping to change at page 4, line 7 ¶ | |||
| 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 | |||
| are necessary, or when they can be safely omitted, or removed. | are necessary, or when they can be safely omitted, or removed. | |||
| An interim meeting went through the 24 cases defined here to discover | An interim meeting went through the 24 cases defined here to discover | |||
| if there were any shortcuts, and this document is the result of that | if there were any shortcuts, and this document is the result of that | |||
| discussion. This document should not be defining anything new, but | discussion. This document clarify what is correct and incorrect | |||
| it may clarify what is correct and incorrect behaviour. | behaviour. | |||
| The related document A Routing Header Dispatch for 6LoWPAN (6LoRH) | The related document A Routing Header Dispatch for 6LoWPAN (6LoRH) | |||
| [I-D.ietf-roll-routing-dispatch] defines a method to compress RPL | [I-D.ietf-roll-routing-dispatch] defines a method to compress RPL | |||
| Option information and Routing Header type 3 [RFC6554], an efficient | Option information and Routing Header type 3 [RFC6554], an efficient | |||
| IP-in-IP technique, and use cases proposed for the | IP-in-IP technique, and use cases proposed for the | |||
| [Second6TischPlugtest] involving 6loRH. | [Second6TischPlugtest] involving 6loRH. | |||
| The related document updates [RFC6550]. In general, any packet that | ||||
| leaves the RPL domain of an LLN (or leaves the LLN entirely) will NOT | ||||
| be discarded, when it has the [RFC6553] RPL Option Header known as | ||||
| the RPI or [RFC6554] SRH3 Extension Header (S)RH3. Due to changes to | ||||
| [I-D.ietf-6man-rfc2460bis] the RPI Hop-by-Hop option MAY be left in | ||||
| place even if the end host does not understand it. | ||||
| 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] applies to this document: LBR, LLN, | Terminology defined in [RFC7102] applies to this document: LBR, LLN, | |||
| RPL, RPL Domain and ROLL. | RPL, RPL Domain and ROLL. | |||
| RPL-node: It is device which implements RPL, thus we can say that the | RPL-node: It is device which implements RPL, thus we can say that the | |||
| device is RPL-capable or RPL-aware. Please note that the device can | device is RPL-capable or RPL-aware. Please note that the device can | |||
| be found inside the LLN or outside LLN. In this document a RPL-node | be found inside the LLN or outside LLN. In this document a RPL-node | |||
| which is a leaf of a DODAG is called RPL-aware-leaf. | which is a leaf of a DODAG is called RPL-aware-leaf. | |||
| RPL-not-capable: It is device which do not implement RPL, thus we can | RPL-not-capable: It is device which do not implement RPL, thus we can | |||
| say that the device is not-RPL-aware. Please note that the device | say that the device is not-RPL-aware. Please note that the device | |||
| can be found inside the LLN. In this document a not-RPL-node which | can be found inside the LLN. In this document a not-RPL-aware node | |||
| is a leaf of a DODAG is called not-RPL-aware-leaf. | which is a leaf of a DODAG is called not-RPL-aware-leaf. | |||
| pledge: a new device which seeks admission to a network. (from | pledge: a new device which seeks admission to a network. (from | |||
| [I-D.ietf-anima-bootstrapping-keyinfra]) | [I-D.ietf-anima-bootstrapping-keyinfra]) | |||
| Join Registrar and Coordinator (JRC): a device which brings new nodes | Join Registrar and Coordinator (JRC): a device which brings new nodes | |||
| (pledges) into a network. (from | (pledges) into a network. (from | |||
| [I-D.ietf-anima-bootstrapping-keyinfra]) | [I-D.ietf-anima-bootstrapping-keyinfra]) | |||
| Flag day: A "flag day" is a procedure in which the network, or a part | ||||
| of it, is changed during a planned outage, or suddenly, causing an | ||||
| outage while the network recovers [RFC4192] | ||||
| 2.1. hop-by-hop IPv6-in-IPv6 headers | 2.1. hop-by-hop IPv6-in-IPv6 headers | |||
| The term "hop-by-hop IPv6-in-IPv6" header refers to: adding a header | The term "hop-by-hop IPv6-in-IPv6" header refers to: adding a header | |||
| that originates from a node to an adjacent node, using the addresses | that originates from a node to an adjacent node, using the addresses | |||
| (usually the GUA or ULA, but could use the link-local addresses) of | (usually the GUA or ULA, but could use the link-local addresses) of | |||
| each node. If the packet must traverse multiple hops, then it must | each node. If the packet must traverse multiple hops, then it must | |||
| be decapsulated at each hop, and then re-encapsulated again in a | be decapsulated at each hop, and then re-encapsulated again in a | |||
| similar fashion. | similar fashion. | |||
| 3. Sample/reference topology | 3. Updates to RFC6553 and RFC 6550 | |||
| 3.1. Updates to RFC 6553 | ||||
| [RFC6553] states that in the Option Type field of the RPL Option | ||||
| header, the two high order bits MUST be set to '01' and the third bit | ||||
| is equal to '1'. The first two bits indicate that the IPv6 node MUST | ||||
| discard the packet if it doesn't recognize the option type, and the | ||||
| third bit indicates that the Option Data may change en route. The | ||||
| remaining bits serve as the option type. | ||||
| Recent changes in [I-D.ietf-6man-rfc2460bis], state: "it is now | ||||
| expected that nodes along a packet's delivery path only examine and | ||||
| process the Hop-by-Hop Options header if explicitly configured to do | ||||
| so". That means that nodes that do not understand a particular Hop- | ||||
| by-Hop Option in a received packet are unlikely to be configured to | ||||
| process it. | ||||
| Thus, if an IPv6 node (RPL-not-capable) receives a packet with an RPL | ||||
| Option, it should ignore the HBH option. To further solidify the | ||||
| desire for the RPL options to be ignored, this document updates the | ||||
| Option Type field to: the two high order bits MUST be set to '00' and | ||||
| the third bit is equal to '1'. | ||||
| These two high order bits indicate that the IPv6 node MUST skip over | ||||
| this option and continue processing the header if it doesn't | ||||
| recognize the option type. | ||||
| The third bit continues to be set to indicate that the Option Data | ||||
| may change en route. The remaining bits serve as the option type and | ||||
| remain as 0x3. This an update to [RFC6553]. | ||||
| This change creates a flag day for existing networks which are | ||||
| currently using 0x63 as the RPI value. A move to 0x43 will not be | ||||
| understood by those networks. It is suggested that implementations | ||||
| accept both 0x63 and 0x43 when processing. When forwarding packets, | ||||
| implementations SHOULD use the same value as we received. When | ||||
| originating new packets, implementations SHOULD have an option to | ||||
| determine which value to originate with, this option is controlled by | ||||
| the DAO option described below. | ||||
| A network which is switching from straight 6lowpan compression | ||||
| mechanism to those described in [I-D.ietf-roll-routing-dispatch] will | ||||
| experience a flag day in the data compression anyway, and if possible | ||||
| this change can be deployed at the same time. | ||||
| In general, any packet that leaves the RPL domain of an LLN (or | ||||
| leaves the LLN entirely) will NOT be discarded, when it has the | ||||
| [RFC6553] RPL Option Header known as the RPI or [RFC6554] SRH3 | ||||
| Extension Header (S)RH3. Because of [I-D.ietf-6man-rfc2460bis] the | ||||
| RPI Hop-by-Hop option MAY be left in place even if the end host does | ||||
| not understand it. | ||||
| 3.2. Updates to RFC 6550 | ||||
| In order to avoid a flag day caused by lack of interoperation between | ||||
| new RPI (0x43) and old RPI (0x63) nodes, the new nodes need to be | ||||
| told that there are old RPI nodes present. This can be done via a | ||||
| new DIO Option which will propogate through the network. Failure to | ||||
| receive this flag will cause dual mode nodes to originate traffic | ||||
| with the old-RPI (0x63) value. | ||||
| DIO Option: 0x05 RPI 0x43 enable MCRXXX | ||||
| Flags: 8-bit unused field reserved for flags. The field MUST be | ||||
| initialized to zero by the sender and MUST be ignored by the | ||||
| receiver. | ||||
| We propose to use a bit flag as follows: | ||||
| +----+----+----+----+----+----+----+----+ | ||||
| | | | | | | | | | | ||||
| | | | | | | | | FR | | ||||
| | | | | | | | | | | ||||
| +----+----+----+----+----+----+----+----+ | ||||
| Figure 1: A DIO Flag to indicate the RPI-flag-day. | ||||
| FR(RPI-flag-day): the flag with values of 1 indicates that RPL Option | ||||
| field is set to "00", values of 0 indicates that RPL Option field is | ||||
| set to "01" | ||||
| 4. 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 | |||
| [RFC4443] message with Type 155. DIS (DODAG Information | [RFC4443] message with Type 155. DIS (DODAG Information | |||
| Solicitation), DIO (DODAG Information Object) and DAO (Destination | Solicitation), DIO (DODAG Information Object) and DAO (Destination | |||
| Advertisement Object) messages are all RPL Control messages but with | Advertisement Object) messages are all RPL Control messages but with | |||
| different Code values. A RPL Stack is showed in Figure 1. | different Code values. A RPL Stack is showed in Figure 1. | |||
| RPL supports two modes of Downward traffic: in storing mode (RPL-SM), | RPL supports two modes of Downward traffic: in storing mode (RPL-SM), | |||
| it is fully stateful or an in non-storing (RPL-NSM), it is fully | it is fully stateful or an in non-storing (RPL-NSM), it is fully | |||
| skipping to change at page 5, line 25 ¶ | skipping to change at page 7, line 38 ¶ | |||
| | IPv6 | | | IPv6 | | |||
| | | | | | | |||
| +--------------+ | +--------------+ | |||
| | 6LoWPAN | | | 6LoWPAN | | |||
| | | | | | | |||
| +--------------+ | +--------------+ | |||
| | PHY-MAC | | | PHY-MAC | | |||
| | | | | | | |||
| +--------------+ | +--------------+ | |||
| Figure 1: RPL Stack. | Figure 2: RPL Stack. | |||
| +---------+ | +------------+ | |||
| +---+Internet | | | INTERNET ----------+ | |||
| | +---------+ | | | | | |||
| | | +------------+ | | |||
| +----+--+ | | | |||
| | DODAG | node:01 | | | |||
| +---------+ Root +----------+ | | | |||
| | | 6LBR | | | A | | |||
| | +----+--+ | | +-------+ | |||
| | | | | |6LBR | | |||
| | | | | +-----------|(root) |-------+ | |||
| ... ... ... | | +-------+ | | |||
| | | | | | | | |||
| +-----+-+ +--+---+ +--+---+ | | | | |||
| |6LR | | | | | | | | | |||
| +-----+ | | | | | | | | | |||
| | | 11 | | 12 | | 13 +------+ | | B |C | |||
| | +-----+-+ +-+----+ +-+----+ | | +---|---+ +---|---+ | |||
| | | | | | | | 6LR | | 6LR | | |||
| | | | | | | +-------->| |--+ +--- ---+ | |||
| | 21 | 22 | 23 | 24 | 25 | | +-------+ | | +-------+ | | |||
| +-+---+ +-+---+ +--+--+ +- --+ +---+-+ | | | | | | |||
| |Leaf | | | | | |Leaf| |Leaf | | | | | | | |||
| | 6LN | | | | | | 6LN| | 6LN | | | | | | | |||
| +-----+ +-----+ +-----+ +----+ +-----+ | | | | | | |||
| | D | E | | | ||||
| +-|-----+ +---|---+ | | | ||||
| | 6LR | | 6LR | | | | ||||
| | | +------ | | | | ||||
| +---|---+ | +---|---+ | | | ||||
| | | | | | | ||||
| | | +--+ | | | ||||
| | | | | | | ||||
| | | | | | | ||||
| | | | I | J | | ||||
| F | | G | H | | | ||||
| +-----+-+ +-|-----+ +---|--+ +---|---+ +---|---+ | ||||
| | Raf | | ~Raf | | Raf | | Raf | | ~Raf | | ||||
| | 6LN | | 6LN | | 6LN | | 6LN | | 6LN | | ||||
| +-------+ +-------+ +------+ +-------+ +-------+ | ||||
| Figure 2: A reference RPL Topology. | Figure 3: A reference RPL Topology. | |||
| Figure 2 shows the reference RPL Topology for this document. The | Figure 2 shows the reference RPL Topology for this document. The | |||
| numbers in or above the nodes are there so that they may be | letters above the nodes are there so that they may be referenced in | |||
| referenced in subsequent sections. In the figure, a 6LN can be a | subsequent sections. In the figure, a 6LR is a router. A 6LN can be | |||
| router or a host. The 6LN leafs marked as (21) is a RPL host that | a router or a host. The 6LN leaves (Raf - "RPL aware leaf"-) marked | |||
| does not have forwarding capability and (25) is a RPL router. The | as (F and I) are RPL hosts that does not have forwarding capability. | |||
| leaf marked 6LN (24) is a device which does not speak RPL at all | The 6LN leaf (H) is a RPL router. The leafs marked as ~Raf "not-RPL | |||
| (not-RPL-aware), but uses Router-Advertisements, 6LowPAN DAR/DAC and | aware leaf" (G and J) are devices which do not speak RPL at all (not- | |||
| RPL-aware), but uses Router-Advertisements, 6LowPAN DAR/DAC and | ||||
| efficient-ND only to participate in the network [RFC6775]. In the | efficient-ND only to participate in the network [RFC6775]. In the | |||
| document this leaf (24) is often named IPv6 node. The 6LBR in the | document these leafs (G and J) are often named IPv6 node. The 6LBR | |||
| figure is the root of the Global DODAG. | in the figure is the root of the Global DODAG. | |||
| This document is in part motivated by the work that is ongoing at the | ||||
| 6TiSCH working group. The 6TiSCH architecture | ||||
| [I-D.ietf-6tisch-architecture] draft explains the network | ||||
| architecture of a 6TiSCH network. | ||||
| 4. Use cases | 5. Use cases | |||
| In data plane context a combination of RFC6553, RFC6554 and IPv6-in- | In the data plane a combination of RFC6553, RFC6554 and IPv6-in-IPv6 | |||
| IPv6 encapsulation is going to be analyzed for the following traffic | encapsulation is going to be analyzed for a number of representative | |||
| flows. | traffic flows. | |||
| This version of the document assumes the changes in | While this document assumes the HbH changes in | |||
| [I-D.ietf-6man-rfc2460bis] are passed (at the time to write this | [I-D.ietf-6man-rfc2460bis] proceed, and/or that the LLN is using the | |||
| specification, the draft is on version 05). | no-drop RPI option (0x43). | |||
| The uses cases describe the communication between RPL-aware-nodes, | The uses cases describe the communication between RPL-aware-nodes, | |||
| with the root (6LBR), and with Internet. This document also describe | with the root (6LBR), and with Internet. This document also describe | |||
| the communication between nodes acting as leaf that does not | the communication between nodes acting as leaf that does not | |||
| understand RPL and they are part of hte LLN. We name these nodes as | understand RPL and they are part of hte LLN. We name these nodes as | |||
| not-RPL-aware-leaf.(e.g. section 5.4- Flow from not-RPL-aware-leaf to | not-RPL-aware-leaf.(e.g. section 5.4- Flow from not-RPL-aware-leaf to | |||
| root) We describe also how is the communication inside of the LLN | root) We describe also how is the communication inside of the LLN | |||
| when it has the final destination addressed outside of the LLN e.g. | when it has the final destination addressed outside of the LLN e.g. | |||
| with destination to Internet. (e.g. section 5.7- Flow from not-RPL- | with destination to Internet. (e.g. section 5.7- Flow from not-RPL- | |||
| aware-leaf to Internet) | aware-leaf to Internet) | |||
| The uses cases comprise as follow: | The uses cases comprise as follow: | |||
| Interaction between Leaf and Root: | ||||
| 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 | |||
| Interaction between Leaf and Internet: | ||||
| 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 | |||
| Interaction between Leafs: | ||||
| RPL-aware-leaf to RPL-aware-leaf (storing and non-storing) | RPL-aware-leaf to RPL-aware-leaf (storing and non-storing) | |||
| RPL-aware-leaf to not-RPL-aware-leaf (non-storing) | RPL-aware-leaf to not-RPL-aware-leaf (non-storing) | |||
| not-RPL-aware-leaf to RPL-aware-leaf (storing and non-storing) | not-RPL-aware-leaf to RPL-aware-leaf (storing and non-storing) | |||
| not-RPL-aware-leaf to not-RPL-aware-leaf (non-storing) | not-RPL-aware-leaf to not-RPL-aware-leaf (non-storing) | |||
| This document assumes the rule that a Header cannot be inserted or | This document assumes the 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 | |||
| skipping to change at page 9, line 15 ¶ | skipping to change at page 11, line 29 ¶ | |||
| where the instanceID portion of the RPI header may still be needed to | where the instanceID portion of the RPI header may still be needed to | |||
| pick an appropriate priority or channel at each hop. | pick an appropriate priority or channel at each hop. | |||
| In the tables present in this document, the term "RPL aware leaf" is | In the tables present in this document, the term "RPL aware leaf" is | |||
| has been shortened to "Raf", and "not-RPL aware leaf" has been | has been shortened to "Raf", and "not-RPL aware leaf" has been | |||
| shortened to "~Raf" to make the table fit in available space. | shortened to "~Raf" to make the table fit in available space. | |||
| The earlier examples are more extensive to make sure that the process | The earlier examples are more extensive to make sure that the process | |||
| is clear, while later examples are more concise. | is clear, while later examples are more concise. | |||
| 5. Storing mode | 6. Storing mode | |||
| In storing mode (fully stateful), the sender cannot determine whether | In storing mode (fully stateful), the sender cannot determine whether | |||
| the destination is RPL-capable and thus would need an IP-in-IP | the destination is RPL-capable and thus would need an IP-in-IP | |||
| header. The IP-in-IP header needs to be addressed on a hop-by-hop | header. The IP-in-IP header needs to be addressed on a hop-by-hop | |||
| basis so that the last 6LR can remove the RPI header. Additionally, | basis so that the last 6LR can remove the RPI header. Additionally, | |||
| 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. | option. | |||
| The following table summarizes what headers are needed in the | The following table summarizes what headers are needed in the | |||
| following scenarios, and indicates when the IP-in-IP header must be | following scenarios, and indicates when the IP-in-IP header must be | |||
| inserted on a hop-by-hop basis, and when it can target the | inserted on a hop-by-hop basis, and when it can target the | |||
| destination node directly. There are these possible situations: hop- | destination node directly. There are these possible situations: hop- | |||
| by-hop necessary (indicated by "hop"), or destination address | by-hop necessary (indicated by "hop"), or destination address | |||
| possible (indicated by "dst"). In all cases hop by hop can be used. | possible (indicated by "dst"). In all cases hop by hop can be used. | |||
| In cases where no IP-in-IP header is needed, the column is left | In cases where no IP-in-IP header is needed, the column is left | |||
| blank. | blank. | |||
| In all cases the RPI headers are needed, since it identifies | In all cases the RPI headers are needed, since it identifies | |||
| inconsistencies (loops) in the routing topology. In all cases the | inconsistencies (loops) in the routing topology. In all cases the | |||
| RH3 is not need because we do not indicate the route in stroing mode. | RH3 is not need because we do not indicate the route in storing mode. | |||
| The leaf can be a router 6LR or a host, both indicated as 6LN | The leaf can be a router 6LR or a host, both indicated as 6LN | |||
| (Figure 2). | (Figure 2). | |||
| +--------------+-----------+---------------+ | +---------------------+--------------+----------+--------------+ | |||
| | Use Case | IP-in-IP | IP-in-IP dst | | | Interaction between | Use Case | IP-in-IP | IP-in-IP dst | | |||
| +--------------+-----------+---------------+ | +---------------------+--------------+----------+--------------+ | |||
| | Raf to root | No | -- | | | | Raf to root | No | -- | | |||
| | root to Raf | No | -- | | + +--------------+----------+--------------+ | |||
| | root to ~Raf | No | -- | | | Leaf - Root | root to Raf | No | -- | | |||
| | ~Raf to root | Yes | root | | + +--------------+----------+--------------+ | |||
| | Raf to Int | No | -- | | | | root to ~Raf | No | -- | | |||
| | Int to Raf | Yes | raf | | + +--------------+----------+--------------+ | |||
| | ~Raf to Int | root | raf | | | | ~Raf to root | Yes | root | | |||
| | ~Raf to Int | Yes | root | | +---------------------+--------------+----------+--------------+ | |||
| | Int to ~Raf | Yes | hop | | | | Raf to Int | No | -- | | |||
| | Raf to Raf | No | -- | | + +--------------+----------+--------------+ | |||
| | Raf to ~Raf | No | -- | | | Leaf - Internet | Int to Raf | Yes | Raf | | |||
| | ~Raf to Raf | Yes | dst | | + +--------------+----------+--------------+ | |||
| | ~Raf to ~Raf | Yes | hop | | | | ~Raf to Int | Yes | root | | |||
| +--------------+-----------+---------------+ | + +--------------+----------+--------------+ | |||
| | | Int to ~Raf | Yes | hop | | ||||
| +---------------------+--------------+----------+--------------+ | ||||
| | | Raf to Raf | No | -- | | ||||
| + +--------------+----------+--------------+ | ||||
| | | Raf to ~Raf | No | -- | | ||||
| + Leaf - Leaf +--------------+----------+--------------+ | ||||
| | | ~Raf to Raf | Yes | dst | | ||||
| + +--------------+----------+--------------+ | ||||
| | | ~Raf to ~Raf | Yes | hop | | ||||
| +---------------------+--------------+----------+--------------+ | ||||
| Table 1: IP-in-IP encapsulation in Storing mode | Figure 4: IP-in-IP encapsulation in Storing mode. | |||
| 5.1. Example of Flow from RPL-aware-leaf to root | 6.1. Storing Mode: Interaction between Leaf and Root | |||
| In this section we are going to describe the communication flow in | ||||
| storing mode (SM) between, | ||||
| RPL-aware-leaf to root | ||||
| root to RPL-aware-leaf | ||||
| not-RPL-aware-leaf to root | ||||
| root to not-RPL-aware-leaf | ||||
| 6.1.1. SM: Example of Flow from RPL-aware-leaf to root | ||||
| In storing mode, RFC 6553 (RPI) is used to send RPL Information | In storing mode, RFC 6553 (RPI) is used to send RPL Information | |||
| instanceID and rank information. | instanceID and rank information. | |||
| As stated in Section 16.2 of [RFC6550] a RPL-aware-leaf node does | 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 this case the flow comprises: | In this case the flow comprises: | |||
| RPL-aware-leaf (6LN) --> 6LR_i --> root(6LBR) | RPL-aware-leaf (6LN) --> 6LR_i --> root(6LBR) | |||
| 6LR_i are the intermediate routers from source to destination. In | For example, the communication flow would be: Node F --> Node E --> | |||
| this case, "1 <= i >= n", n is the number of routers (6LR) that the | Node B --> Node A root(6LBR) | |||
| packet go through from source (6LN) to destination (6LBR). | ||||
| 6LR_i (Node E and Node B) are the intermediate routers from source to | ||||
| destination. In this case, "1 <= i >= n", n is the number of routers | ||||
| (6LR) that the packet go through from source (6LN) to destination | ||||
| (6LBR). | ||||
| As it was mentioned In this document 6LRs, 6LBR are always full- | As it was mentioned In this document 6LRs, 6LBR are always full- | |||
| fledge RPL routers. | fledge RPL routers. | |||
| The 6LN inserts the RPI header, and sends the packet to 6LR which | The 6LN (Node F) inserts the RPI header, and sends the packet to 6LR | |||
| decrements the rank in RPI and sends the packet up. When the packet | (Node E) which decrements the rank in RPI and sends the packet up. | |||
| arrives at 6LBR, the RPI is removed and the packet is processed. | When the packet arrives at 6LBR (Node A), the RPI is removed and the | |||
| packet is processed. | ||||
| No IP-in-IP header is required. | No IP-in-IP header is required. | |||
| 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 to make use of this scenario. The 6LN can know the | with the 6LBR to make use of this scenario. The 6LN can know the | |||
| address of the 6LBR because it knows the address of the root via the | address of the 6LBR because it knows the address of the root via the | |||
| DODAGID in the DIO messages. | DODAGID in the DIO messages. | |||
| +-------------------+-----+-------+------+ | +-------------------+-----+-------+------+ | |||
| skipping to change at page 11, line 23 ¶ | skipping to change at page 14, line 17 ¶ | |||
| +-------------------+-----+-------+------+ | +-------------------+-----+-------+------+ | |||
| | 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 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 | 6.1.2. SM: Example of Flow from root to RPL-aware-leaf | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| root (6LBR) --> 6LR_i --> RPL-aware-leaf (6LN) | root (6LBR) --> 6LR_i --> RPL-aware-leaf (6LN) | |||
| For example, the communication flow would be: Node A root(6LBR) --> | ||||
| Node B --> Node D --> Node F | ||||
| 6LR_i are the intermediate routers from source to destination. In | 6LR_i are the intermediate routers from source to destination. In | |||
| this case, "1 <= i >= n", n is the number of routers (6LR) that the | this case, "1 <= i >= n", n is the number of routers (6LR) that the | |||
| packet go through from source (6LBR) to destination (6LN). | packet go through from source (6LBR) to destination (6LN). | |||
| In this case the 6LBR inserts RPI header and sends the packet down, | In this case the 6LBR inserts RPI header and sends the packet down, | |||
| the 6LR is going to increment the rank in RPI (examines instanceID | the 6LR is going to increment the rank in RPI (examines instanceID | |||
| for multiple tables), the packet is processed in 6LN and RPI removed. | for multiple tables), the packet is processed in 6LN and RPI removed. | |||
| No IP-in-IP header is required. | No IP-in-IP header is required. | |||
| skipping to change at page 12, line 5 ¶ | skipping to change at page 14, line 48 ¶ | |||
| +-------------------+------+-------+------+ | +-------------------+------+-------+------+ | |||
| | 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 | 6.1.3. SM: 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_i --> not-RPL-aware-leaf (IPv6) | root (6LBR) --> 6LR_i --> not-RPL-aware-leaf (IPv6) | |||
| For example, the communication flow would be: Node A root(6LBR) --> | ||||
| Node B --> Node E --> Node G | ||||
| 6LR_i are the intermediate routers from source to destination. In | 6LR_i are the intermediate routers from source to destination. In | |||
| this case, "1 <= i >= n", n is the number of routers (6LR) that the | this case, "1 <= i >= n", n is the number of routers (6LR) that the | |||
| packet go through from source (6LBR) to destination (IPv6). | packet go through from source (6LBR) to destination (IPv6). | |||
| As the RPI extension can be ignored by the not-RPL-aware leaf, this | As the RPI extension can be ignored by the not-RPL-aware leaf, this | |||
| situation is identical to the previous scenario. | situation is identical to the previous scenario. | |||
| +-------------------+------+-------+----------------+ | +-------------------+------+-------+----------------+ | |||
| | Header | 6LBR | 6LR_i | IPv6 | | | Header | 6LBR | 6LR_i | IPv6 | | |||
| skipping to change at page 12, line 31 ¶ | skipping to change at page 15, line 27 ¶ | |||
| | Inserted headers | RPI | -- | -- | | | Inserted headers | RPI | -- | -- | | |||
| | Removed headers | -- | -- | -- | | | Removed headers | -- | -- | -- | | |||
| | Re-added headers | -- | -- | -- | | | Re-added headers | -- | -- | -- | | |||
| | Modified headers | -- | RPI | -- | | | Modified headers | -- | RPI | -- | | |||
| | Untouched headers | -- | -- | RPI (Ignored) | | | Untouched headers | -- | -- | RPI (Ignored) | | |||
| +-------------------+------+-------+----------------+ | +-------------------+------+-------+----------------+ | |||
| 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 | 6.1.4. SM: 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 (IPv6) --> 6LR_1 --> 6LR_i --> root (6LBR) | not-RPL-aware-leaf (IPv6) --> 6LR_1 --> 6LR_i --> root (6LBR) | |||
| For example, the communication flow would be: Node G --> Node E --> | ||||
| Node B --> Node A root(6LBR) | ||||
| 6LR_i are the intermediate routers from source to destination. In | 6LR_i are the intermediate routers from source to destination. In | |||
| this case, "1 < i >= n", n is the number of routers (6LR) that the | this case, "1 < i >= n", n is the number of routers (6LR) that the | |||
| packet go through from source (IPv6) to destination (6LBR). For | packet go through from source (IPv6) to destination (6LBR). For | |||
| example, 6LR_1 (i=1) is the router that receives the packets from the | example, 6LR_1 (i=1) is the router that receives the packets from the | |||
| IPv6 node. | IPv6 node (Node G). | |||
| When the packet arrives from IPv6 node to 6LR_1, the 6LR_1 will | When the packet arrives from IPv6 node (Node G) to 6LR_1 (Node E), | |||
| insert a RPI header, encapsuladed in a IPv6-in-IPv6 header. The | the 6LR_1 will insert a RPI header, encapsuladed in a IPv6-in-IPv6 | |||
| IPv6-in-IPv6 header can be addressed to the next hop, or to the root. | header. The IPv6-in-IPv6 header can be addressed to the next hop | |||
| The root removes the header and processes the packet. | (Node B), or to the root (Node A). The root removes the header and | |||
| processes the packet. | ||||
| +------------+------+---------------+---------------+---------------+ | +------------+------+---------------+---------------+---------------+ | |||
| | Header | IPv6 | 6LR_1 | 6LR_i | 6LBR | | | Header | IPv6 | 6LR_1 | 6LR_i | 6LBR | | |||
| +------------+------+---------------+---------------+---------------+ | +------------+------+---------------+---------------+---------------+ | |||
| | Inserted | -- | IP-in-IP(RPI) | -- | -- | | | Inserted | -- | IP-in-IP(RPI) | -- | -- | | |||
| | headers | | | | | | | headers | | | | | | |||
| | Removed | -- | -- | -- | IP-in-IP(RPI) | | | Removed | -- | -- | -- | IP-in-IP(RPI) | | |||
| | headers | | | | | | | headers | | | | | | |||
| | Re-added | -- | -- | -- | -- | | | Re-added | -- | -- | -- | -- | | |||
| | headers | | | | | | | headers | | | | | | |||
| | Modified | -- | -- | IP-in-IP(RPI) | -- | | | Modified | -- | -- | IP-in-IP(RPI) | -- | | |||
| | 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 | |||
| root | root | |||
| 5.5. Example of Flow from RPL-aware-leaf to Internet | 6.2. Storing Mode: Interaction between Leaf and Internet | |||
| In this section we are going to describe the communication flow in | ||||
| storing mode (SM) between, | ||||
| RPL-aware-leaf to Internet | ||||
| Internet to RPL-aware-leaf | ||||
| not-RPL-aware-leaf to Internet | ||||
| Internet to not-RPL-aware-leaf | ||||
| 6.2.1. SM: Example of Flow from RPL-aware-leaf to Internet | ||||
| RPL information from RFC 6553 MAY go out to Internet as it will be | RPL information from RFC 6553 MAY go out to Internet as it will be | |||
| ignored by nodes which have not been configured to be RPI aware. | ignored by nodes which have not been configured to be RPI aware. | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| RPL-aware-leaf (6LN) --> 6LR_i --> root (6LBR) --> Internet | RPL-aware-leaf (6LN) --> 6LR_i --> root (6LBR) --> Internet | |||
| For example, the communication flow could be: Node F --> Node D --> | ||||
| Node B --> Node A root(6LBR) --> Internet | ||||
| 6LR_i are the intermediate routers from source to destination. In | 6LR_i are the intermediate routers from source to destination. In | |||
| this case, "1 <= i >= n", n is the number of routers (6LR) that the | this case, "1 <= i >= n", n is the number of routers (6LR) that the | |||
| packet go through from source (6LN) to 6LBR. | packet go through from source (6LN) to 6LBR. | |||
| No IP-in-IP header is required. | No IP-in-IP header is required. | |||
| Note: In this use case we use a node as leaf, but this use case can | Note: In this use case we use a node as leaf, but this use case can | |||
| be also applicable to any RPL-node type (e.g. 6LR) | be also applicable to any RPL-node type (e.g. 6LR) | |||
| +-------------------+------+-------+------+----------------+ | +-------------------+------+-------+------+----------------+ | |||
| skipping to change at page 14, line 5 ¶ | skipping to change at page 17, line 21 ¶ | |||
| | Inserted headers | RPI | -- | -- | -- | | | Inserted headers | RPI | -- | -- | -- | | |||
| | Removed headers | -- | -- | -- | -- | | | Removed headers | -- | -- | -- | -- | | |||
| | Re-added headers | -- | -- | -- | -- | | | Re-added headers | -- | -- | -- | -- | | |||
| | Modified headers | -- | RPI | -- | -- | | | Modified headers | -- | RPI | -- | -- | | |||
| | Untouched headers | -- | -- | RPI | RPI (Ignored) | | | Untouched headers | -- | -- | RPI | RPI (Ignored) | | |||
| +-------------------+------+-------+------+----------------+ | +-------------------+------+-------+------+----------------+ | |||
| 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 | 6.2.2. SM: 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_i --> RPL-aware-leaf (6LN) | Internet --> root (6LBR) --> 6LR_i --> RPL-aware-leaf (6LN) | |||
| For example, the communication flow could be: Internet --> Node A | ||||
| root(6LBR) --> Node B --> Node D --> Node F | ||||
| 6LR_i are the intermediate routers from source to destination. In | 6LR_i are the intermediate routers from source to destination. In | |||
| this case, "1 <= i >= n", n is the number of routers (6LR) that the | this case, "1 <= i >= n", n is the number of routers (6LR) that the | |||
| packet go through from 6LBR to destination(6LN). | packet go through from 6LBR to destination(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 sent 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 at 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. | |||
| +----------+---------+--------------+---------------+---------------+ | +----------+---------+--------------+---------------+---------------+ | |||
| skipping to change at page 14, line 40 ¶ | skipping to change at page 18, line 25 ¶ | |||
| | Modified | -- | -- | IP-in-IP(RPI) | -- | | | Modified | -- | -- | IP-in-IP(RPI) | -- | | |||
| | headers | | | | | | | headers | | | | | | |||
| | Untouche | -- | -- | -- | -- | | | Untouche | -- | -- | -- | -- | | |||
| | d | | | | | | | d | | | | | | |||
| | headers | | | | | | | 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 | 6.2.3. SM: 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 (IPv6) --> 6LR_1 --> 6LR_i -->root (6LBR) --> | not-RPL-aware-leaf (IPv6) --> 6LR_1 --> 6LR_i -->root (6LBR) --> | |||
| Internet | Internet | |||
| For example, the communication flow could be: Node G --> Node E --> | ||||
| Node B --> Node A root(6LBR) --> Internet | ||||
| 6LR_i are the intermediate routers from source to destination. In | 6LR_i are the intermediate routers from source to destination. In | |||
| this case, "1 < i >= n", n is the number of routers (6LR) that the | this case, "1 < i >= n", n is the number of routers (6LR) that the | |||
| packet go through from source(IPv6) to 6LBR. | packet go through from source(IPv6) to 6LBR. | |||
| The 6LR_1 (i=1) node will add an IP-in-IP(RPI) header addressed | The 6LR_1 (i=1) 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 | either to the root, or hop-by-hop such that the root can remove the | |||
| RPI header before passing upwards. | RPI header 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 the packet can be better compressed through the LLN. The | so that the packet can be better compressed through the LLN. The | |||
| skipping to change at page 15, line 37 ¶ | skipping to change at page 19, line 28 ¶ | |||
| | d | | | IP(RPI) | | | | | d | | | IP(RPI) | | | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| | Untouch | -- | -- | -- | -- | -- | | | Untouch | -- | -- | -- | -- | -- | | |||
| | ed | | | | | | | | ed | | | | | | | |||
| | 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 | |||
| Internet | Internet | |||
| 5.8. Example of Flow from Internet to non-RPL-aware-leaf | 6.2.4. SM: 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_i --> not-RPL-aware-leaf (IPv6) | Internet --> root (6LBR) --> 6LR_i --> not-RPL-aware-leaf (IPv6) | |||
| For example, the communication flow could be: Internet --> Node A | ||||
| root(6LBR) --> Node B --> Node E --> Node G | ||||
| 6LR_i are the intermediate routers from source to destination. In | 6LR_i are the intermediate routers from source to destination. In | |||
| this case, "1 < i >= n", n is the number of routers (6LR) that the | this case, "1 < i >= n", n is the number of routers (6LR) that the | |||
| packet go through from 6LBR to not-RPL-aware-leaf (IPv6). 6LR_i | packet go through from 6LBR to not-RPL-aware-leaf (IPv6). 6LR_i | |||
| updates the rank in the RPI. | updates the rank in the RPI. | |||
| The 6LBR will have to add an RPI header within an IP-in-IP header. | The 6LBR will have to add an RPI header within an IP-in-IP header. | |||
| The IP-in-IP can be addressed to the not-RPL-aware-leaf, leaving the | The IP-in-IP can be addressed to the not-RPL-aware-leaf, leaving the | |||
| RPI inside. | RPI inside. | |||
| The 6LBR MAY set the flow label on the inner IP-in-IP header to zero | The 6LBR MAY set the flow label on the inner IP-in-IP header to zero | |||
| skipping to change at page 16, line 26 ¶ | skipping to change at page 20, line 23 ¶ | |||
| | headers | | | | | | | headers | | | | | | |||
| | Modified | -- | -- | IP-in-IP(RPI) | -- | | | Modified | -- | -- | IP-in-IP(RPI) | -- | | |||
| | headers | | | | | | | headers | | | | | | |||
| | Untouched | -- | -- | -- | RPI | | | Untouched | -- | -- | -- | RPI | | |||
| | headers | | | | (Ignored) | | | headers | | | | (Ignored) | | |||
| +-----------+----------+---------------+---------------+------------+ | +-----------+----------+---------------+---------------+------------+ | |||
| 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 | 6.3. Storing Mode: Interaction between Leaf and Leaf | |||
| In this section we are going to describe the communication flow in | ||||
| storing mode (SM) between, | ||||
| RPL-aware-leaf to RPL-aware-leaf | ||||
| RPL-aware-leaf to not-RPL-aware-leaf | ||||
| not-RPL-aware-leaf to RPL-aware-leaf | ||||
| not-RPL-aware-leaf to not-RPL-aware-leaf | ||||
| 6.3.1. SM: 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_ia --> common parent (6LR_x) --> 6LR_id --> 6LN | 6LN --> 6LR_ia --> common parent (6LR_x) --> 6LR_id --> 6LN | |||
| 6LR_ia are the intermediate routers from source to the common parent | For example, the communication flow could be: Node F --> Node D --> | |||
| (6LR_x) In this case, "1 <= ia >= n", n is the number of routers | Node B --> Node E --> Node H | |||
| (6LR) that the packet go through from 6LN to the common parent | ||||
| (6LR_x). | ||||
| 6LR_id are the intermediate routers from the common parent (6LR_x) to | 6LR_ia (Node D) are the intermediate routers from source to the | |||
| destination 6LN. In this case, "1 <= id >= m", m is the number of | common parent (6LR_x) (Node B) In this case, "1 <= ia >= n", n is the | |||
| routers (6LR) that the packet go through from the common parent | number of routers (6LR) that the packet go through from 6LN (Node F) | |||
| (6LR_x) to destination 6LN. | to the common parent (6LR_x). | |||
| This case is assumed in the same RPL Domain. In the common parent, | 6LR_id (Node E) are the intermediate routers from the common parent | |||
| the direction of RPI is changed (from increasing to decreasing the | (6LR_x) (Node B) to destination 6LN (Node H). In this case, "1 <= id | |||
| rank). | >= m", m is the number of routers (6LR) that the packet go through | |||
| from the common parent (6LR_x) to destination 6LN. | ||||
| This case is assumed in the same RPL Domain. In the common parent | ||||
| (Node B), the direction of RPI is changed (from increasing to | ||||
| decreasing the 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 IP-in-IP headers are necessary. This may be | remove the RPI, so no IP-in-IP headers are necessary. This may be | |||
| done regardless of where the destination is, as the included RPI will | done regardless of where the destination is, as the included RPI will | |||
| be ignored by the receiver. | be ignored by the receiver. | |||
| +---------------+--------+--------+---------------+--------+--------+ | +---------------+--------+--------+---------------+--------+--------+ | |||
| | Header | 6LN | 6LR_ia | 6LR_x (common | 6LR_id | 6LN | | | Header | 6LN | 6LR_ia | 6LR_x (common | 6LR_id | 6LN | | |||
| | | src | | parent) | | dst | | | | src | | parent) | | dst | | |||
| +---------------+--------+--------+---------------+--------+--------+ | +---------------+--------+--------+---------------+--------+--------+ | |||
| skipping to change at page 17, line 26 ¶ | skipping to change at page 21, line 38 ¶ | |||
| | headers | | | | | | | | headers | | | | | | | |||
| | Modified | -- | RPI | RPI | RPI | -- | | | Modified | -- | RPI | RPI | RPI | -- | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| | Untouched | -- | -- | -- | -- | -- | | | Untouched | -- | -- | -- | -- | -- | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| +---------------+--------+--------+---------------+--------+--------+ | +---------------+--------+--------+---------------+--------+--------+ | |||
| 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 | 6.3.2. SM: 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_ia --> common parent (6LR_x) --> 6LR_id --> not-RPL-aware | 6LN --> 6LR_ia --> common parent (6LR_x) --> 6LR_id --> not-RPL-aware | |||
| 6LN (IPv6) | 6LN (IPv6) | |||
| For example, the communication flow could be: Node F --> Node D --> | ||||
| Node B --> Node E --> Node G | ||||
| 6LR_ia are the intermediate routers from source (6LN) to the common | 6LR_ia are the intermediate routers from source (6LN) to the common | |||
| parent (6LR_x) In this case, "1 <= ia >= n", n is the number of | parent (6LR_x) In this case, "1 <= ia >= n", n is the number of | |||
| routers (6LR) that the packet go through from 6LN to the common | routers (6LR) that the packet go through from 6LN to the common | |||
| parent (6LR_x). | parent (6LR_x). | |||
| 6LR_id are the intermediate routers from the common parent (6LR_x) to | 6LR_id (Node E) are the intermediate routers from the common parent | |||
| destination not-RPL-aware 6LN (IPv6). In this case, "1 <= id >= m", | (6LR_x) (Node B) to destination not-RPL-aware 6LN (IPv6) (Node G). | |||
| m is the number of routers (6LR) that the packet go through from the | In this case, "1 <= id >= m", m is the number of routers (6LR) that | |||
| common parent (6LR_x) to destination 6LN. | the packet go through from the common parent (6LR_x) to destination | |||
| 6LN. | ||||
| This situation is identical to the previous situation Section 6.3.1 | ||||
| This situation is identical to the previous situation Section 5.9 | ||||
| +-----------+------+--------+---------------+--------+--------------+ | +-----------+------+--------+---------------+--------+--------------+ | |||
| | Header | 6LN | 6LR_ia | 6LR_x(common | 6LR_id | IPv6 | | | Header | 6LN | 6LR_ia | 6LR_x(common | 6LR_id | IPv6 | | |||
| | | src | | parent) | | | | | | src | | parent) | | | | |||
| +-----------+------+--------+---------------+--------+--------------+ | +-----------+------+--------+---------------+--------+--------------+ | |||
| | Inserted | RPI | -- | -- | -- | -- | | | Inserted | RPI | -- | -- | -- | -- | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| | Removed | -- | -- | -- | -- | RPI | | | Removed | -- | -- | -- | -- | RPI | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| | Re-added | -- | -- | -- | -- | -- | | | Re-added | -- | -- | -- | -- | -- | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| | Modified | -- | RPI | RPI | RPI | -- | | | Modified | -- | RPI | RPI | RPI | -- | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| | Untouched | -- | -- | -- | -- | RPI(Ignored) | | | Untouched | -- | -- | -- | -- | RPI(Ignored) | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| +-----------+------+--------+---------------+--------+--------------+ | +-----------+------+--------+---------------+--------+--------------+ | |||
| 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 non-RPL- | |||
| aware-leaf | aware-leaf | |||
| 5.11. Example of Flow from not-RPL-aware-leaf to RPL-aware-leaf | 6.3.3. SM: 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 (IPv6) --> 6LR_ia --> common parent (6LR_x) --> | not-RPL-aware 6LN (IPv6) --> 6LR_ia --> common parent (6LR_x) --> | |||
| 6LR_id --> 6LN | 6LR_id --> 6LN | |||
| 6LR_ia are the intermediate routers from source (not-RPL-aware 6LN | For example, the communication flow could be: Node G --> Node E --> | |||
| (IPv6)) to the common parent (6LR_x) In this case, "1 <= ia >= n", n | Node B --> Node D --> Node F | |||
| is the number of routers (6LR) that the packet go through from source | ||||
| to the common parent. | ||||
| 6LR_id are the intermediate routers from the common parent (6LR_x) to | 6LR_ia (Node E) are the intermediate routers from source (not-RPL- | |||
| destination 6LN. In this case, "1 <= id >= m", m is the number of | aware 6LN (IPv6)) (Node G) to the common parent (6LR_x) (Node B) In | |||
| routers (6LR) that the packet go through from the common parent | this case, "1 <= ia >= n", n is the number of routers (6LR) that the | |||
| (6LR_x) to destination 6LN. | packet go through from source to the common parent. | |||
| The 6LR_ia (ia=1) receives the packet from the the IPv6 node and | 6LR_id (Node D) are the intermediate routers from the common parent | |||
| inserts and the RPI header encapsulated in IPv6-in-IPv6 header. The | (6LR_x) (Node B) to destination 6LN (Node F). In this case, "1 <= id | |||
| IP-in-IP header is addressed to the destination 6LN. | >= m", m is the number of routers (6LR) that the packet go through | |||
| from the common parent (6LR_x) to destination 6LN. | ||||
| The 6LR_ia (ia=1) (Node E) receives the packet from the the IPv6 node | ||||
| (Node G) and inserts and the RPI header encapsulated in IPv6-in-IPv6 | ||||
| header. The IP-in-IP header is addressed to the destination 6LN | ||||
| (Node F). | ||||
| +--------+------+------------+------------+------------+------------+ | +--------+------+------------+------------+------------+------------+ | |||
| | Header | IPv6 | 6LR_ia | common | 6LR_id | 6LN | | | Header | IPv6 | 6LR_ia | common | 6LR_id | 6LN | | |||
| | | | | parent | | | | | | | | parent | | | | |||
| | | | | (6LRx) | | | | | | | | (6LRx) | | | | |||
| +--------+------+------------+------------+------------+------------+ | +--------+------+------------+------------+------------+------------+ | |||
| | Insert | -- | IP-in- | -- | -- | -- | | | Insert | -- | IP-in- | -- | -- | -- | | |||
| | ed hea | | IP(RPI) | | | | | | ed hea | | IP(RPI) | | | | | |||
| | ders | | | | | | | | ders | | | | | | | |||
| | Remove | -- | -- | -- | -- | IP-in- | | | Remove | -- | -- | -- | -- | IP-in- | | |||
| skipping to change at page 19, line 31 ¶ | skipping to change at page 23, line 36 ¶ | |||
| | ed hea | | | IP(RPI) | IP(RPI) | | | | ed hea | | | IP(RPI) | IP(RPI) | | | |||
| | ders | | | | | | | | ders | | | | | | | |||
| | Untouc | -- | -- | -- | -- | -- | | | Untouc | -- | -- | -- | -- | -- | | |||
| | hed he | | | | | | | | hed he | | | | | | | |||
| | aders | | | | | | | | 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 | 6.3.4. SM: 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 src)--> 6LR_1--> 6LR_ia --> root (6LBR) --> | not-RPL-aware 6LN (IPv6 src)--> 6LR_1--> 6LR_ia --> root (6LBR) --> | |||
| 6LR_id --> not-RPL-aware 6LN (IPv6 dst) | 6LR_id --> not-RPL-aware 6LN (IPv6 dst) | |||
| 6LR_ia are the intermediate routers from source (not-RPL-aware 6LN | For example, the communication flow could be: Node G --> Node E --> | |||
| (IPv6 src)) to the root (6LBR) In this case, "1 < ia >= n", n is the | Node B --> Node A (root) --> Node C --> Node J | |||
| number of routers (6LR) that the packet go through from IPv6 src to | ||||
| the root. | ||||
| 6LR_id are the intermediate routers from the root to destination | Internet 6LR_ia (Node E and Node B) are the intermediate routers from | |||
| (IPv6 dst). In this case, "1 <= id >= m", m is the number of routers | source (not-RPL-aware 6LN (IPv6 src))(Node G) to the root (6LBR) | |||
| (6LR) that the packet go through from the root to destination (IPv6 | (Node A) In this case, "1 < ia >= n", n is the number of routers | |||
| dst). | (6LR) that the packet go through from IPv6 src to the root. | |||
| This flow is identical to Section 5.11 | 6LR_id (C) are the intermediate routers from the root (Node A) to | |||
| destination (IPv6 dst) (Node J). In this case, "1 <= id >= m", m is | ||||
| the number of routers (6LR) that the packet go through from the root | ||||
| to destination (IPv6 dst). | ||||
| The 6LR_1 receives the packet from the the IPv6 node and inserts the | This flow is identical to Section 6.3.3 | |||
| RPI header (RPIa) encapsulated in IPv6-in-IPv6 header. The IPv6-in- | ||||
| IPv6 header is addressed to the 6LBR. The 6LBR remove the IPv6-in- | The 6LR_1 (Node E) receives the packet from the the IPv6 node (Node | |||
| IPv6 header and insert another one (RPIb) with destination to 6LR_m | G) and inserts the RPI header (RPIa) encapsulated in IPv6-in-IPv6 | |||
| node. | header. The IPv6-in-IPv6 header is addressed to the 6LBR. The 6LBR | |||
| remove the IPv6-in-IPv6 header and insert another one (RPIb) with | ||||
| destination to 6LR_m (Node C) node. | ||||
| One of the side-effects of inserting IP-in-IP RPI header at 6LR_1, is | One of the side-effects of inserting IP-in-IP RPI header at 6LR_1, is | |||
| that now all the packets will go through the 6LBR, even though there | that now all the packets will go through the 6LBR, even though there | |||
| exists a shorter P2P path to the destination 6LN in storing mode. | exists a shorter P2P path to the destination 6LN in storing mode. | |||
| One possible solution is given by the work in | One possible solution is given by the work in | |||
| [I-D.ietf-roll-dao-projection]. Once we have route projection, the | [I-D.ietf-roll-dao-projection]. Once we have route projection, the | |||
| root can find that this traffic deserves optimization (based on | root can find that this traffic deserves optimization (based on | |||
| volume and path length, or additional knowledge on that particular | volume and path length, or additional knowledge on that particular | |||
| flow) and project a DAO into 6LR_1. | flow) and project a DAO into 6LR_1. | |||
| skipping to change at page 20, line 45 ¶ | skipping to change at page 25, line 34 ¶ | |||
| | s | | | | | | | | | s | | | | | | | | |||
| | Untou | -- | -- | -- | -- | -- | -- | | | Untou | -- | -- | -- | -- | -- | -- | | |||
| | ched | | | | | | | | | ched | | | | | | | | |||
| | heade | | | | | | | | | heade | | | | | | | | |||
| | rs | | | | | | | | | rs | | | | | | | | |||
| +-------+-----+-----------+-----------+-----------+-----------+-----+ | +-------+-----+-----------+-----------+-----------+-----------+-----+ | |||
| 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 | |||
| non-RPL-aware-leaf | non-RPL-aware-leaf | |||
| 6. Non Storing mode | 7. Non Storing mode | |||
| +--------------+------+------+-----------+---------------+ | ||||
| | Use Case | RPI | RH3 | IP-in-IP | IP-in-IP dst | | ||||
| +--------------+------+------+-----------+---------------+ | ||||
| | Raf to root | Yes | No | No | -- | | ||||
| | root to Raf | Opt | Yes | No | -- | | ||||
| | root to ~Raf | No | Yes | Yes | 6LR | | ||||
| | ~Raf to root | Yes | No | Yes | root | | ||||
| | Raf to Int | Yes | No | Yes | root | | ||||
| | Int to Raf | Opt | Yes | Yes | dst | | ||||
| | ~Raf to Int | Yes | No | Yes | root | | ||||
| | Int to ~Raf | Opt | Yes | Yes | 6LR | | ||||
| | Raf to Raf | Yes | Yes | Yes | root/dst | | ||||
| | Raf to ~Raf | Yes | Yes | Yes | root/6LR | | ||||
| | ~Raf to Raf | Yes | Yes | Yes | root/6LN | | ||||
| | ~Raf to ~Raf | Yes | Yes | Yes | root/6LR | | ||||
| +--------------+------+------+-----------+---------------+ | ||||
| Table 2: Headers needed in Non-Storing mode: RPI, RH3, IP-in-IP | In Non Storing Mode (Non SM) (fully source routed), the 6LBR (DODAG | |||
| encapsulation | root) has complete knowledge about the connectivity of all DODAG | |||
| nodes, and all traffic flows through the root node. Thus, there is | ||||
| no need for all nodes to know about the existence of non-RPL aware | ||||
| nodes. Only the 6LBR needs to change when there are non-RPL aware | ||||
| nodes. | ||||
| 6.1. Example of Flow from RPL-aware-leaf to root | The following table summarizes what headers are needed in the | |||
| following scenarios, and indicates when the RPI, RH3 and IP-in-IP | ||||
| header must be inserted. There are these possible situations: | ||||
| destination address possible (indicated by "dst"), to a 6LR, to a 6LN | ||||
| or to the root. In cases where no IP-in-IP header is needed, the | ||||
| column is left blank. | ||||
| The leaf can be a router 6LR or a host, both indicated as 6LN | ||||
| (Figure 3). | ||||
| +-----------------+--------------+-----+-----+----------+----------+ | ||||
| | Interaction | Use Case | RPI | RH3 | IP-in-IP | IP-in-IP | | ||||
| | between | | | | | dst | | ||||
| +-----------------+--------------+-----+-----+----------+----------+ | ||||
| | | Raf to root | Yes | No | No | -- | | ||||
| + +--------------+-----+-----+----------+----------+ | ||||
| | Leaf - Root | root to Raf | Opt | Yes | No | -- | | ||||
| + +--------------+-----+-----+----------+----------+ | ||||
| | | root to ~Raf | No | Yes | Yes | 6LR | | ||||
| + +--------------+-----+-----+----------+----------+ | ||||
| | | ~Raf to root | Yes | No | Yes | root | | ||||
| +-----------------+--------------+-----+-----+----------+----------+ | ||||
| | | Raf to Int | Yes | No | Yes | root | | ||||
| + +--------------+-----+-----+----------+----------+ | ||||
| | Leaf - Internet | Int to Raf | Opt | Yes | Yes | dst | | ||||
| + +--------------+-----+-----+----------+----------+ | ||||
| | | ~Raf to Int | Yes | No | Yes | root | | ||||
| + +--------------+-----+-----+----------+----------+ | ||||
| | | Int to ~Raf | Opt | Yes | Yes | 6LR | | ||||
| +-----------------+--------------+-----+-----+----------+----------+ | ||||
| | | Raf to Raf | Yes | Yes | Yes | root/dst | | ||||
| + +--------------+-----+-----+----------+----------+ | ||||
| | | Raf to ~Raf | Yes | Yes | Yes | root/6LR | | ||||
| + Leaf - Leaf +--------------+-----+-----+----------+----------+ | ||||
| | | ~Raf to Raf | Yes | Yes | Yes | root/6LN | | ||||
| + +--------------+-----+-----+----------+----------+ | ||||
| | | ~Raf to ~Raf | Yes | Yes | Yes | root/6LR | | ||||
| +-----------------+--------------+-----+-----+----------+----------+ | ||||
| Figure 5: Headers needed in Non-Storing mode: RPI, RH3, IP-in-IP | ||||
| encapsulation. | ||||
| 7.1. Non-Storing Mode: Interaction between Leaf and Root | ||||
| In this section we are going to describe the communication flow in | ||||
| Non Storing Mode (Non-SM) between, | ||||
| RPL-aware-leaf to root | ||||
| root to RPL-aware-leaf | ||||
| not-RPL-aware-leaf to root | ||||
| root to not-RPL-aware-leaf | ||||
| 7.1.1. Non-SM: 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. | |||
| RPL-aware-leaf (6LN) --> 6LR_i --> root(6LBR) | RPL-aware-leaf (6LN) --> 6LR_i --> root(6LBR) | |||
| For example, the communication flow could be: Node F --> Node D --> | ||||
| Node B --> Node A (root) | ||||
| 6LR_i are the intermediate routers from source to destination. In | 6LR_i are the intermediate routers from source to destination. In | |||
| this case, "1 <= i >= n", n is the number of routers (6LR) that the | this case, "1 <= i >= n", n is the number of routers (6LR) that the | |||
| packet go through from source (6LN) to destination (6LBR). | packet go through from source (6LN) to destination (6LBR). | |||
| This situation is the same case as storing mode. | This situation is the same case as storing mode. | |||
| +-------------------+-----+-------+------+ | +-------------------+-----+-------+------+ | |||
| | Header | 6LN | 6LR_i | 6LBR | | | Header | 6LN | 6LR_i | 6LBR | | |||
| +-------------------+-----+-------+------+ | +-------------------+-----+-------+------+ | |||
| | 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 | -- | -- | -- | | |||
| +-------------------+-----+-------+------+ | +-------------------+-----+-------+------+ | |||
| 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 | 7.1.2. on-SM: Example of Flow from root to RPL-aware-leaf | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| root (6LBR) --> 6LR_i --> RPL-aware-leaf (6LN) | root (6LBR) --> 6LR_i --> RPL-aware-leaf (6LN) | |||
| For example, the communication flow could be: Node A (root) --> Node | ||||
| B --> Node D --> Node F | ||||
| 6LR_i are the intermediate routers from source to destination. In | 6LR_i are the intermediate routers from source to destination. In | |||
| this case, "1 <= i >= n", n is the number of routers (6LR) that the | this case, "1 <= i >= n", n is the number of routers (6LR) that the | |||
| packet go through from source (6LBR) to destination (6LN). | packet go through from source (6LBR) to destination (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 IP-in-IP 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, the 6LBR. The destination is known to RPL-aware because, | aware node, the 6LBR. The destination is known to RPL-aware because, | |||
| the root knows the whole topology in non-storing mode. | the root knows the whole topology in non-storing mode. | |||
| +-------------------+-----------------+-------+----------+ | +-------------------+-----------------+-------+----------+ | |||
| skipping to change at page 22, line 33 ¶ | skipping to change at page 28, line 18 ¶ | |||
| | 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 | -- | -- | -- | | |||
| +-------------------+-----------------+-------+----------+ | +-------------------+-----------------+-------+----------+ | |||
| Non Storing: Summary of the use of headers from root to RPL-aware- | Non Storing: Summary of the use of headers from root to RPL-aware- | |||
| leaf | leaf | |||
| 6.3. Example of Flow from root to not-RPL-aware-leaf | 7.1.3. Non-SM: 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_i --> not-RPL-aware-leaf (IPv6) | root (6LBR) --> 6LR_i --> not-RPL-aware-leaf (IPv6) | |||
| For example, the communication flow could be: Node A (root) --> Node | ||||
| B --> Node E --> Node G | ||||
| 6LR_i are the intermediate routers from source to destination. In | 6LR_i are the intermediate routers from source to destination. In | |||
| this case, "1 <= i >= n", n is the number of routers (6LR) that the | this case, "1 <= i >= n", n is the number of routers (6LR) that the | |||
| packet go through from source (6LBR) to destination (IPv6). | packet go through from source (6LBR) to destination (IPv6). | |||
| In 6LBR the RH3 is added, modified in each intermediate 6LR (6LR_1 | In 6LBR the RH3 is added, modified in each intermediate 6LR (6LR_1 | |||
| and so on) and it is fully consumed in the last 6LR (6LR_n), but left | and so on) and it is fully consumed in the last 6LR (6LR_n), but left | |||
| there. If RPI is left present, the IPv6 node which does not | there. If RPI is left present, the IPv6 node which does not | |||
| understand it will ignore it (following 2460bis), thus encapsulation | understand it will ignore it (following 2460bis), thus encapsulation | |||
| is not necesary. Due the complete knowledge of the topology at the | is not necesary. Due the complete knowledge of the topology at the | |||
| root, the 6LBR is able to address the IP-in-IP header to the last | root, the 6LBR is able to address the IP-in-IP header to the last | |||
| skipping to change at page 23, line 23 ¶ | skipping to change at page 29, line 23 ¶ | |||
| | headers | | | | | | | headers | | | | | | |||
| | Modified | -- | (opt: RPI), | (opt: RPI), | -- | | | Modified | -- | (opt: RPI), | (opt: RPI), | -- | | |||
| | headers | | RH3 | RH3 | | | | headers | | RH3 | RH3 | | | |||
| | Untouched | -- | -- | -- | RPI | | | Untouched | -- | -- | -- | RPI | | |||
| | headers | | | | | | | headers | | | | | | |||
| +---------------+-------------+---------------+--------------+------+ | +---------------+-------------+---------------+--------------+------+ | |||
| 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 | 7.1.4. Non-SM: 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 (IPv6) --> 6LR_1 --> 6LR_i --> root (6LBR) | not-RPL-aware-leaf (IPv6) --> 6LR_1 --> 6LR_i --> root (6LBR) | |||
| For example, the communication flow could be: Node G --> Node E --> | ||||
| Node B --> Node A (root) | ||||
| 6LR_i are the intermediate routers from source to destination. In | 6LR_i are the intermediate routers from source to destination. In | |||
| this case, "1 < i >= n", n is the number of routers (6LR) that the | this case, "1 < i >= n", n is the number of routers (6LR) that the | |||
| packet go through from source (IPv6) to destination (6LBR). For | packet go through from source (IPv6) to destination (6LBR). For | |||
| example, 6LR_1 (i=1) is the router that receives the packets from the | example, 6LR_1 (i=1) is the router that receives the packets from the | |||
| IPv6 node. | IPv6 node. | |||
| In this case the RPI is added by the first 6LR (6LR1), encapsulated | In this case the RPI is added by the first 6LR (6LR1) (Node E), | |||
| in an IP-in-IP header, and is modified in the followings 6LRs. The | encapsulated in an IP-in-IP header, and is modified in the followings | |||
| RPI and entire packet is consumed by the root. | 6LRs. The RPI and entire packet is consumed by the root. | |||
| +------------+------+---------------+---------------+---------------+ | +------------+------+---------------+---------------+---------------+ | |||
| | Header | IPv6 | 6LR_1 | 6LR_i | 6LBR | | | Header | IPv6 | 6LR_1 | 6LR_i | 6LBR | | |||
| +------------+------+---------------+---------------+---------------+ | +------------+------+---------------+---------------+---------------+ | |||
| | Inserted | -- | IP-in-IP(RPI) | -- | -- | | | Inserted | -- | IP-in-IP(RPI) | -- | -- | | |||
| | headers | | | | | | | headers | | | | | | |||
| | Removed | -- | -- | -- | IP-in-IP(RPI) | | | Removed | -- | -- | -- | IP-in-IP(RPI) | | |||
| | headers | | | | | | | headers | | | | | | |||
| | Re-added | -- | -- | -- | -- | | | Re-added | -- | -- | -- | -- | | |||
| | headers | | | | | | | headers | | | | | | |||
| | Modified | -- | -- | IP-in-IP(RPI) | -- | | | Modified | -- | -- | IP-in-IP(RPI) | -- | | |||
| | headers | | | | | | | headers | | | | | | |||
| | Untouched | -- | -- | -- | -- | | | Untouched | -- | -- | -- | -- | | |||
| | headers | | | | | | | 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 | |||
| root | root | |||
| 6.5. Example of Flow from RPL-aware-leaf to Internet | 7.2. Non-Storing Mode: Interaction between Leaf and Internet | |||
| In this section we are going to describe the communication flow in | ||||
| Non Storing Mode (Non-SM) between, | ||||
| RPL-aware-leaf to Internet | ||||
| Internet to RPL-aware-leaf | ||||
| not-RPL-aware-leaf to Internet | ||||
| Internet to not-RPL-aware-leaf | ||||
| 7.2.1. Non-SM: 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_i --> root (6LBR) --> Internet | RPL-aware-leaf (6LN) --> 6LR_i --> root (6LBR) --> Internet | |||
| For example, the communication flow could be: Node F --> Node D --> | ||||
| Node B --> Node A --> Internet | ||||
| 6LR_i are the intermediate routers from source to destination. In | 6LR_i are the intermediate routers from source to destination. In | |||
| this case, "1 <= i >= n", n is the number of routers (6LR) that the | this case, "1 <= i >= n", n is the number of routers (6LR) that the | |||
| packet go through from source (6LN) to 6LBR. | packet go through from source (6LN) to 6LBR. | |||
| This case is identical to storing-mode case. | 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. | |||
| skipping to change at page 25, line 5 ¶ | skipping to change at page 31, line 22 ¶ | |||
| | Inserted headers | RPI | -- | -- | -- | | | Inserted headers | RPI | -- | -- | -- | | |||
| | Removed headers | -- | -- | -- | -- | | | Removed headers | -- | -- | -- | -- | | |||
| | Re-added headers | -- | -- | -- | -- | | | Re-added headers | -- | -- | -- | -- | | |||
| | Modified headers | -- | RPI | -- | -- | | | Modified headers | -- | RPI | -- | -- | | |||
| | Untouched headers | -- | -- | RPI | RPI (Ignored) | | | Untouched headers | -- | -- | RPI | RPI (Ignored) | | |||
| +-------------------+------+-------+------+----------------+ | +-------------------+------+-------+------+----------------+ | |||
| 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 | 7.2.2. Non-SM: 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_i --> RPL-aware-leaf (6LN) | Internet --> root (6LBR) --> 6LR_i --> RPL-aware-leaf (6LN) | |||
| For example, the communication flow could be: Internet --> Node A | ||||
| (root) --> Node B --> Node D --> Node F | ||||
| 6LR_i are the intermediate routers from source to destination. In | 6LR_i are the intermediate routers from source to destination. In | |||
| this case, "1 <= i >= n", n is the number of routers (6LR) that the | this case, "1 <= i >= n", n is the number of routers (6LR) that the | |||
| packet go through from 6LBR to destination(6LN). | packet go through from 6LBR to destination(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 node, it can address the IP-in-IP header to | address of the target node, it can address the IP-in-IP header to | |||
| that node. The 6LBR will zero the flow label upon entry in order to | that node. The 6LBR will zero the flow label upon entry in order to | |||
| aid compression. | aid compression. | |||
| The RPI may be added or not, it is optional. | The RPI may be added or not, it is optional. | |||
| skipping to change at page 25, line 47 ¶ | skipping to change at page 32, line 30 ¶ | |||
| | ed hea | | | pt:RPI) | | | | ed hea | | | pt:RPI) | | | |||
| | ders | | | | | | | ders | | | | | | |||
| | Untouc | -- | -- | -- | -- | | | Untouc | -- | -- | -- | -- | | |||
| | hed he | | | | | | | hed he | | | | | | |||
| | aders | | | | | | | aders | | | | | | |||
| +--------+-------+----------------+----------------+----------------+ | +--------+-------+----------------+----------------+----------------+ | |||
| 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 | 7.2.3. Non-SM: 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 (IPv6) --> 6LR_1 --> 6LR_i -->root (6LBR) --> | not-RPL-aware-leaf (IPv6) --> 6LR_1 --> 6LR_i -->root (6LBR) --> | |||
| Internet | Internet | |||
| For example, the communication flow could be: Node G --> Node E --> | ||||
| Node B --> Node A --> Internet | ||||
| 6LR_i are the intermediate routers from source to destination. In | 6LR_i are the intermediate routers from source to destination. In | |||
| this case, "1 < i >= n", n is the number of routers (6LR) that the | this case, "1 < i >= n", n is the number of routers (6LR) that the | |||
| packet go through from source(IPv6) to 6LBR. e.g 6LR_1 (i=1). | packet go through from source(IPv6) to 6LBR. e.g 6LR_1 (i=1). | |||
| 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 6LR | node. As RPL headers are added in the IPv6 node, the first 6LR | |||
| (6LR_1) will add an RPI header inside a new IP-in-IP header. The IP- | (6LR_1) will add an RPI header inside a new IP-in-IP header. The IP- | |||
| in-IP header will be addressed to the root. This case is identical | in-IP header will be addressed to the root. This case is identical | |||
| to the storing-mode case (Section 5.7). | to the storing-mode case (Section 5.7). | |||
| skipping to change at page 26, line 37 ¶ | skipping to change at page 33, line 28 ¶ | |||
| | d | | | IP(RPI) | | | | | d | | | IP(RPI) | | | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| | Untouch | -- | -- | -- | -- | -- | | | Untouch | -- | -- | -- | -- | -- | | |||
| | ed | | | | | | | | ed | | | | | | | |||
| | headers | | | | | | | | 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 not-RPL-aware-leaf | 7.2.4. Non-SM: Example of Flow from Internet to not-RPL-aware-leaf | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| Internet --> root (6LBR) --> 6LR_i --> not-RPL-aware-leaf (IPv6) | Internet --> root (6LBR) --> 6LR_i --> not-RPL-aware-leaf (IPv6) | |||
| For example, the communication flow could be: Internet --> Node A | ||||
| (root) --> Node B --> Node E --> Node G | ||||
| 6LR_i are the intermediate routers from source to destination. In | 6LR_i are the intermediate routers from source to destination. In | |||
| this case, "1 < i >= n", n is the number of routers (6LR) that the | this case, "1 < i >= n", n is the number of routers (6LR) that the | |||
| packet go through from 6LBR to not-RPL-aware-leaf (IPv6). | packet go through from 6LBR to not-RPL-aware-leaf (IPv6). | |||
| The 6LBR must add an RH3 header inside an IP-in-IP header. The 6LBR | The 6LBR must add an RH3 header inside an IP-in-IP header. The 6LBR | |||
| will know the path, and will recognize that the final node is not an | 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 | RPL capable node as it will have received the connectivity DAO from | |||
| the nearest 6LR. The 6LBR can therefore make the IP-in-IP header | the nearest 6LR. The 6LBR can therefore make the IP-in-IP header | |||
| destination be the last 6LR. The 6LBR will set to zero the flow | destination be the last 6LR. The 6LBR will set to zero the flow | |||
| label upon entry in order to aid compression. | label upon entry in order to aid compression. | |||
| skipping to change at page 27, line 32 ¶ | skipping to change at page 34, line 30 ¶ | |||
| | ed hea | | | IP(RH3, | IP(RH3, | | | | ed hea | | | IP(RH3, | IP(RH3, | | | |||
| | ders | | | RPI) | RPI) | | | | ders | | | RPI) | RPI) | | | |||
| | Untouc | -- | -- | -- | -- | RPI | | | Untouc | -- | -- | -- | -- | RPI | | |||
| | hed he | | | | | | | | hed he | | | | | | | |||
| | aders | | | | | | | | aders | | | | | | | |||
| +--------+-------+----------------+------------+-------------+------+ | +--------+-------+----------------+------------+-------------+------+ | |||
| 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 | 7.3. Non-Storing Mode: Interaction between Leafs | |||
| In this section we are going to describe the communication flow in | ||||
| Non Storing Mode (Non-SM) between, | ||||
| RPL-aware-leaf to RPL-aware-leaf | ||||
| RPL-aware-leaf to not-RPL-aware-leaf | ||||
| not-RPL-aware-leaf to RPL-aware-leaf | ||||
| not-RPL-aware-leaf to not-RPL-aware-leaf | ||||
| 7.3.1. Non-SM: Example of Flow from RPL-aware-leaf to RPL-aware-leaf | ||||
| In this case the flow comprises: | In this case the flow comprises: | |||
| 6LN src --> 6LR_ia --> root (6LBR) --> 6LR_id --> 6LN dst | 6LN src --> 6LR_ia --> root (6LBR) --> 6LR_id --> 6LN dst | |||
| For example, the communication flow could be: Node F --> Node D --> | ||||
| Node B --> Node A (root) --> Node B --> Node E --> Node H | ||||
| 6LR_ia are the intermediate routers from source to the root In this | 6LR_ia are the intermediate routers from source to the root In this | |||
| case, "1 <= ia >= n", n is the number of routers (6LR) that the | case, "1 <= ia >= n", n is the number of routers (6LR) that the | |||
| packet go through from 6LN to the root. | packet go through from 6LN to the root. | |||
| 6LR_id are the intermediate routers from the root to the destination. | 6LR_id are the intermediate routers from the root to the destination. | |||
| In this case, "1 <= ia >= m", m is the number of the intermediate | In this case, "1 <= ia >= m", m is the number of the intermediate | |||
| routers (6LR). | routers (6LR). | |||
| 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 | |||
| skipping to change at page 28, line 15 ¶ | skipping to change at page 35, line 29 ¶ | |||
| carry the useless RPI option. | carry the useless RPI option. | |||
| 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 IP-in-IP header. It SHOULD be able to remove the RPI, as it | add an IP-in-IP header. It SHOULD be able to remove the RPI, as it | |||
| was contained in an IP-in-IP header addressed to it. Otherwise, | was contained in an IP-in-IP header addressed to it. Otherwise, | |||
| there MAY be an RPI header buried inside the inner IP header, which | there MAY be an RPI header buried inside the inner IP header, which | |||
| should get ignored. | should 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 or scenario | non-storing DODAGs and fall into this scenario or scenario | |||
| Section 6.2, with the originating node acting as 6LBR. | Section 7.1.2, with the originating node acting as 6LBR. | |||
| +---------+-------------+------+--------------+-------+-------------+ | +---------+-------------+------+--------------+-------+-------------+ | |||
| | Header | 6LN src | 6LR_ | 6LBR | 6LR_i | 6LN dst | | | Header | 6LN src | 6LR_ | 6LBR | 6LR_i | 6LN dst | | |||
| | | | ia | | d | | | | | | ia | | d | | | |||
| +---------+-------------+------+--------------+-------+-------------+ | +---------+-------------+------+--------------+-------+-------------+ | |||
| | Inserte | IP-in- | -- | IP-in-IP(RH3 | -- | -- | | | Inserte | IP-in- | -- | IP-in-IP(RH3 | -- | -- | | |||
| | d | IP(RPI1) | | to 6LN, opt | | | | | d | IP(RPI1) | | to 6LN, opt | | | | |||
| | headers | | | RPI2) | | | | | headers | | | RPI2) | | | | |||
| | Removed | -- | -- | IP-in- | -- | IP-in- | | | Removed | -- | -- | IP-in- | -- | IP-in- | | |||
| | headers | | | IP(RPI1) | | IP(RH3, opt | | | headers | | | IP(RPI1) | | IP(RH3, opt | | |||
| skipping to change at page 28, line 41 ¶ | skipping to change at page 36, line 29 ¶ | |||
| | d | | | | | | | | d | | | | | | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| | Untouch | -- | -- | -- | -- | -- | | | Untouch | -- | -- | -- | -- | -- | | |||
| | ed | | | | | | | | ed | | | | | | | |||
| | headers | | | | | | | | 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 | 7.3.2. Non-SM: 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_ia --> root (6LBR) --> 6LR_id --> not-RPL-aware (IPv6) | 6LN --> 6LR_ia --> root (6LBR) --> 6LR_id --> not-RPL-aware (IPv6) | |||
| For example, the communication flow could be: Node F --> Node D --> | ||||
| Node B --> Node A (root) --> Node B --> Node E --> Node G | ||||
| 6LR_ia are the intermediate routers from source to the root In this | 6LR_ia are the intermediate routers from source to the root In this | |||
| case, "1 <= ia >= n", n is the number of intermediate routers (6LR) | case, "1 <= ia >= n", n is the number of intermediate routers (6LR) | |||
| 6LR_id are the intermediate routers from the root to the destination. | 6LR_id are the intermediate routers from the root to the destination. | |||
| In this case, "1 <= ia >= m", m is the number of the intermediate | In this case, "1 <= ia >= m", m is the number of the intermediate | |||
| routers (6LR). | routers (6LR). | |||
| As in the previous case, the 6LN will insert an RPI (RPI_1) header | As in the previous case, the 6LN will insert an RPI (RPI_1) header | |||
| which MUST be in an IP-in-IP header addressed to the root so that the | which MUST 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 | 6LBR can remove this RPI. The 6LBR will then insert an RH3 inside a | |||
| new IP-in-IP header addressed to the 6LN destination node. The RPI | new IP-in-IP header addressed to the 6LN destination node. The RPI | |||
| is optional from 6LBR to 6LR_id (RPI_2). | is optional from 6LBR to 6LR_id (RPI_2). | |||
| skipping to change at page 29, line 38 ¶ | skipping to change at page 37, line 29 ¶ | |||
| | ed hea | | IP(RPI_1) | | IP(RH3, | | | | ed hea | | IP(RPI_1) | | IP(RH3, | | | |||
| | ders | | | | opt RPI_2) | | | | ders | | | | opt RPI_2) | | | |||
| | Untouc | -- | -- | -- | -- | opt | | | Untouc | -- | -- | -- | -- | opt | | |||
| | hed he | | | | | RPI_ | | | hed he | | | | | RPI_ | | |||
| | aders | | | | | 2 | | | aders | | | | | 2 | | |||
| +--------+-----------+------------+-------------+------------+------+ | +--------+-----------+------------+-------------+------------+------+ | |||
| 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 | 7.3.3. Non-SM: 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 (IPv6) --> 6LR_ia --> root (6LBR) --> 6LR_id --> | not-RPL-aware 6LN (IPv6) --> 6LR_ia --> root (6LBR) --> 6LR_id --> | |||
| 6LN | 6LN | |||
| For example, the communication flow could be: Node G --> Node E --> | ||||
| Node B --> Node A (root) --> Node B --> Node E --> Node H | ||||
| 6LR_ia are the intermediate routers from source to the root In this | 6LR_ia are the intermediate routers from source to the root In this | |||
| case, "1 <= ia >= n", n is the number of intermediate routers (6LR) | case, "1 <= ia >= n", n is the number of intermediate routers (6LR) | |||
| 6LR_id are the intermediate routers from the root to the destination. | 6LR_id are the intermediate routers from the root to the destination. | |||
| In this case, "1 <= ia >= m", m is the number of the intermediate | In this case, "1 <= ia >= m", m is the number of the intermediate | |||
| routers (6LR). | routers (6LR). | |||
| 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 (6LR_1) inside an IP-in-IP header addressed to | added by the first 6LR (6LR_1) inside an IP-in-IP header addressed to | |||
| the root. The 6LBR will remove this RPI, and add it's own IP-in-IP | the root. The 6LBR will remove this RPI, and add it's own IP-in-IP | |||
| skipping to change at page 30, line 35 ¶ | skipping to change at page 38, line 30 ¶ | |||
| | ed hea | | | | IP(RH3, | | | | ed hea | | | | IP(RH3, | | | |||
| | ders | | | | opt RPI_2) | | | | ders | | | | opt RPI_2) | | | |||
| | Untouc | -- | -- | -- | -- | -- | | | Untouc | -- | -- | -- | -- | -- | | |||
| | hed he | | | | | | | | hed he | | | | | | | |||
| | aders | | | | | | | | aders | | | | | | | |||
| +--------+-----+------------+-------------+------------+------------+ | +--------+-----+------------+-------------+------------+------------+ | |||
| 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 | 7.3.4. Non-SM: 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 src)--> 6LR_ia --> root (6LBR) --> 6LR_id --> | not-RPL-aware 6LN (IPv6 src)--> 6LR_ia --> root (6LBR) --> 6LR_id --> | |||
| not-RPL-aware (IPv6 dst) | not-RPL-aware (IPv6 dst) | |||
| For example, the communication flow could be: Node G --> Node E --> | ||||
| Node B --> Node A (root) --> Node C --> Node J | ||||
| 6LR_ia are the intermediate routers from source to the root In this | 6LR_ia are the intermediate routers from source to the root In this | |||
| case, "1 <= ia >= n", n is the number of intermediate routers (6LR) | case, "1 <= ia >= n", n is the number of intermediate routers (6LR) | |||
| 6LR_id are the intermediate routers from the root to the destination. | 6LR_id are the intermediate routers from the root to the destination. | |||
| In this case, "1 <= ia >= m", m is the number of the intermediate | In this case, "1 <= ia >= m", m is the number of the intermediate | |||
| routers (6LR). | routers (6LR). | |||
| This scenario is the combination of the previous two cases. | This scenario is the combination of the previous two cases. | |||
| +---------+-----+--------------+---------------+-------------+------+ | +---------+-----+--------------+---------------+-------------+------+ | |||
| skipping to change at page 31, line 30 ¶ | skipping to change at page 39, line 30 ¶ | |||
| | d | | | | | | | | d | | | | | | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| | Untouch | -- | -- | -- | -- | -- | | | Untouch | -- | -- | -- | -- | -- | | |||
| | ed | | | | | | | | ed | | | | | | | |||
| | headers | | | | | | | | 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 cases | 8. Observations about the cases | |||
| 7.1. Storing mode | 8.1. Storing mode | |||
| [I-D.ietf-roll-routing-dispatch] shows that the hop-by-hop IP-in-IP | [I-D.ietf-roll-routing-dispatch] shows that the hop-by-hop IP-in-IP | |||
| header can be compressed using IP-in-IP 6LoRH (IP-in-IP-6LoRH) header | header can be compressed using IP-in-IP 6LoRH (IP-in-IP-6LoRH) header | |||
| as described in Section 7 of the document. | as described in Section 7 of the document. | |||
| There are potential significant advantages to having a single code | There are potential significant advantages to having a single code | |||
| path that always processes IP-in-IP headers with no options. | path that always processes IP-in-IP headers with no options. | |||
| Thanks to the relaxation of the RFC2460 rule about discarding unknown | Thanks to the relaxation of the RFC2460 rule about discarding unknown | |||
| Hop-by-Hop options, there is no longer any uncertainty about when to | Hop-by-Hop options, there is no longer any uncertainty about when to | |||
| use an IPIP header in the storing mode case. The RPI header SHOULD | use an IPIP header in the storing mode case. The RPI header SHOULD | |||
| always be added when 6LRs originate packets (without IPIP headers), | always be added when 6LRs originate packets (without IPIP headers), | |||
| and IPIP headers should always be added (addressed to the root when | and IPIP headers should always be added (addressed to the root when | |||
| on the way up, to the end-host when on the way down) when a 6LR finds | on the way up, to the end-host when on the way down) when a 6LR finds | |||
| it needs to insert an RPI header. | it needs to insert an RPI header. | |||
| 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 IP-in-IP vs never use IP-in-IP) | different situations (always do IP-in-IP vs never use IP-in-IP) | |||
| should be signaled in the RPL protocol itself. | should be signaled in the RPL protocol itself. | |||
| 7.2. Non-Storing mode | 8.2. Non-Storing mode | |||
| In the non-storing case, dealing with non-RPL aware leaf nodes is | In 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 DODAG nodes, and all traffic flows through the | connectivity of all DODAG nodes, and all traffic flows through the | |||
| root node. | root 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 IP-in-IP headers. | hop-by-hop IP-in-IP headers. | |||
| Unlike in the storing mode case, there is no need for all nodes to | Unlike in the storing mode case, there is 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 | 9. 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 | |||
| for RPI, RH3 and IPv6-in-IPv6. | for RPI, RH3 and IPv6-in-IPv6. | |||
| In Storing Mode, for the examples of Flow from RPL-aware-leaf to non- | In Storing Mode, for the examples of Flow from RPL-aware-leaf to non- | |||
| RPL-aware-leaf and non-RPL-aware-leaf to non-RPL-aware-leaf comprise | RPL-aware-leaf and non-RPL-aware-leaf to non-RPL-aware-leaf comprise | |||
| an IP-in-IP and RPI compression headers. The type of this case is | an IP-in-IP and RPI compression headers. The type of this case is | |||
| critical since IP-in-IP is encapsulating a RPI header. | critical since IP-in-IP is encapsulating a RPI header. | |||
| +--+-----+---+--------------+-----------+-------------+-------------+ | +--+-----+---+--------------+-----------+-------------+-------------+ | |||
| |1 | 0|0 |TSE| 6LoRH Type 6 | Hop Limit | RPI - 6LoRH | LOWPAN IPHC | | |1 | 0|0 |TSE| 6LoRH Type 6 | Hop Limit | RPI - 6LoRH | LOWPAN IPHC | | |||
| +--+-----+---+--------------+-----------+-------------+-------------+ | +--+-----+---+--------------+-----------+-------------+-------------+ | |||
| Figure 3: Critical IP-in-IP (RPI). | Figure 6: Critical IP-in-IP (RPI). | |||
| 9. IANA Considerations | 10. IANA Considerations | |||
| There are no IANA considerations related to this document. | This document updates the registration made in [RFC6553] to the IPv6 | |||
| Hop-by-Hop Registry from 0x43 to 0x63. | ||||
| 10. Security Considerations | 11. Security Considerations | |||
| 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. | |||
| The IPIP mechanism described in this document is much more limited | The IPIP mechanism described in this document is much more limited | |||
| than the general mechanism described in [RFC2473]. The willingness | than the general mechanism described in [RFC2473]. The willingness | |||
| of each node in the LLN to decapsulate packets and forward them could | of each node in the LLN to decapsulate packets and forward them could | |||
| be exploited by nodes to disguise the origin of an attack. | be exploited by nodes to disguise the origin of an attack. | |||
| Nodes outside of the LLN will need to pass IPIP traffic through the | Nodes outside of the LLN will need to pass IPIP traffic through the | |||
| skipping to change at page 34, line 27 ¶ | skipping to change at page 42, line 27 ¶ | |||
| via the "Use IPsec". This solution has all the problems that | via the "Use IPsec". This solution has all the problems that | |||
| [RFC5406] goes into. In an LLN such a solution would degenerate into | [RFC5406] goes into. In an LLN such a solution would degenerate into | |||
| every node having a tunnel with every other node. It would provide a | every node having a tunnel with every other node. It would provide a | |||
| small amount of origin address authentication at a very high cost; | small amount of origin address authentication at a very high cost; | |||
| doing BCP38 at every node (linking layer-3 addresses to layer-2 | doing BCP38 at every node (linking layer-3 addresses to layer-2 | |||
| addresses, and to already present layer-2 cryptographic mechanisms) | addresses, and to already present layer-2 cryptographic mechanisms) | |||
| would be cheaper should RPL be run in an environment where hostile | would be cheaper should RPL be run in an environment where hostile | |||
| nodes are likely to be a part of the LLN. | nodes are likely to be a part of the LLN. | |||
| The RH3 header usage described here can be abused in equivalent ways | The RH3 header usage described here can be abused in equivalent ways | |||
| to the IPIP header. In non-storing networks where an RH3 may be | with an IPIP header to add the needed RH3 header. As such, the | |||
| acted upon, packets arriving into the LLN will be encapsulated with | attacker's RH3 header will not be seen by the network until it | |||
| an IPIP header to add the needed RH3 header. As such, the attacker's | reaches the end host, which will decapsulate it. An end-host SHOULD | |||
| RH3 header will not be seen by the network until it reaches the end | be suspicious about a RH3 header which has additional hops which have | |||
| host, which will decapsulate it. An end-host SHOULD be suspicious | not yet been processed, and SHOULD ignore such a second RH3 header. | |||
| about a RH3 header which has additional hops which have not yet been | ||||
| processed, and SHOULD ignore such a second RH3 header. | ||||
| In addition, the LLN will likely use [I-D.ietf-roll-routing-dispatch] | In addition, the LLN will likely use [I-D.ietf-roll-routing-dispatch] | |||
| to compress the IPIP and RH3 headers. As such, the compressor at the | to compress the IPIP and RH3 headers. As such, the compressor at the | |||
| RPL-root will see the second RH3 header and MAY choose to discard the | RPL-root will see the second RH3 header and MAY choose to discard the | |||
| packet if the RH3 header has not been completely consumed. A | packet if the RH3 header has not been completely consumed. A | |||
| consumed (inert) RH3 header could be present in a packet that flows | consumed (inert) RH3 header could be present in a packet that flows | |||
| from one LLN, crosses the Internet, and enters another LLN. As per | from one LLN, crosses the Internet, and enters another LLN. As per | |||
| the discussion in this document, such headers do not need to be | the discussion in this document, such headers do not need to be | |||
| removed. However, there is no case described in this document where | removed. However, there is no case described in this document where | |||
| an RH3 is inserted in a non-storing network on traffic that is | an RH3 is inserted in a non-storing network on traffic that is | |||
| skipping to change at page 35, line 23 ¶ | skipping to change at page 43, line 21 ¶ | |||
| The RH3 and RPI headers could be abused by an attacker inside of the | The RH3 and RPI headers could be abused by an attacker inside of the | |||
| network to route packets on non-obvious ways, perhaps eluding | network to route packets on non-obvious ways, perhaps eluding | |||
| observation. This usage is in fact part of [RFC6997] and can not be | observation. This usage is in fact part of [RFC6997] and can not be | |||
| restricted at all. This is a feature, not a bug. | restricted at all. This is a feature, not a bug. | |||
| [RFC7416] deals with many other threats to LLNs not directly related | [RFC7416] deals with many other threats to LLNs not directly related | |||
| to the use of IPIP headers, and this document does not change that | to the use of IPIP headers, and this document does not change that | |||
| analysis. | analysis. | |||
| 11. Acknowledgments | 12. 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 (alphabetical order): Robert Cragie, Simon Duquennoy, | comments of (alphabetical order): Robert Cragie, Simon Duquennoy, | |||
| Cenk Guendogan, Rahul Jadhav, Peter van der Stok, Xavier Vilajosana | Cenk Guendogan, C. M. Heard, Rahul Jadhav, Peter van der Stok, | |||
| and Thomas Watteyne. | Xavier Vilajosana and Thomas Watteyne. | |||
| 12. References | 13. References | |||
| 12.1. Normative References | 13.1. Normative References | |||
| [I-D.ietf-6man-rfc2460bis] | [I-D.ietf-6man-rfc2460bis] | |||
| <>, S. and R. Hinden, "Internet Protocol, Version 6 (IPv6) | Deering, S. and R. Hinden, "Internet Protocol, Version 6 | |||
| Specification", draft-ietf-6man-rfc2460bis-09 (work in | (IPv6) Specification", draft-ietf-6man-rfc2460bis-13 (work | |||
| progress), March 2017. | in progress), May 2017. | |||
| [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>. | ||||
| [RFC2473] Conta, A. and S. Deering, "Generic Packet Tunneling in | [RFC2473] Conta, A. and S. Deering, "Generic Packet Tunneling in | |||
| IPv6 Specification", RFC 2473, DOI 10.17487/RFC2473, | IPv6 Specification", RFC 2473, DOI 10.17487/RFC2473, | |||
| December 1998, <http://www.rfc-editor.org/info/rfc2473>. | December 1998, <http://www.rfc-editor.org/info/rfc2473>. | |||
| [RFC2827] Ferguson, P. and D. Senie, "Network Ingress Filtering: | [RFC2827] Ferguson, P. and D. Senie, "Network Ingress Filtering: | |||
| Defeating Denial of Service Attacks which employ IP Source | Defeating Denial of Service Attacks which employ IP Source | |||
| Address Spoofing", BCP 38, RFC 2827, May 2000. | Address Spoofing", BCP 38, RFC 2827, DOI 10.17487/RFC2827, | |||
| May 2000, <http://www.rfc-editor.org/info/rfc2827>. | ||||
| [RFC5406] Bellovin, S., "Guidelines for Specifying the Use of IPsec | [RFC5406] Bellovin, S., "Guidelines for Specifying the Use of IPsec | |||
| Version 2", BCP 146, RFC 5406, February 2009. | Version 2", BCP 146, RFC 5406, DOI 10.17487/RFC5406, | |||
| February 2009, <http://www.rfc-editor.org/info/rfc5406>. | ||||
| [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 36, line 46 ¶ | skipping to change at page 44, line 44 ¶ | |||
| of IPv6 Extension Headers", RFC 7045, | of IPv6 Extension Headers", RFC 7045, | |||
| DOI 10.17487/RFC7045, December 2013, | DOI 10.17487/RFC7045, December 2013, | |||
| <http://www.rfc-editor.org/info/rfc7045>. | <http://www.rfc-editor.org/info/rfc7045>. | |||
| [RFC7416] Tsao, T., Alexander, R., Dohler, M., Daza, V., Lozano, A., | [RFC7416] Tsao, T., Alexander, R., Dohler, M., Daza, V., Lozano, A., | |||
| and M. Richardson, Ed., "A Security Threat Analysis for | and M. Richardson, Ed., "A Security Threat Analysis for | |||
| the Routing Protocol for Low-Power and Lossy Networks | the Routing Protocol for Low-Power and Lossy Networks | |||
| (RPLs)", RFC 7416, DOI 10.17487/RFC7416, January 2015, | (RPLs)", RFC 7416, DOI 10.17487/RFC7416, January 2015, | |||
| <http://www.rfc-editor.org/info/rfc7416>. | <http://www.rfc-editor.org/info/rfc7416>. | |||
| 12.2. Informative References | 13.2. Informative References | |||
| [DDOS-KREBS] | [DDOS-KREBS] | |||
| Goodin, D., "Record-breaking DDoS reportedly delivered by | Goodin, D., "Record-breaking DDoS reportedly delivered by | |||
| >145k hacked cameras", September 2016, | >145k hacked cameras", September 2016, | |||
| <http://arstechnica.com/security/2016/09/botnet-of-145k- | <http://arstechnica.com/security/2016/09/botnet-of-145k- | |||
| cameras-reportedly-deliver-internets-biggest-ddos-ever/>. | cameras-reportedly-deliver-internets-biggest-ddos-ever/>. | |||
| [I-D.ietf-6lo-backbone-router] | [I-D.ietf-6lo-backbone-router] | |||
| Thubert, P., "IPv6 Backbone Router", draft-ietf-6lo- | Thubert, P., "IPv6 Backbone Router", draft-ietf-6lo- | |||
| backbone-router-03 (work in progress), January 2017. | backbone-router-03 (work in progress), January 2017. | |||
| skipping to change at page 37, line 28 ¶ | skipping to change at page 45, line 28 ¶ | |||
| [I-D.ietf-anima-autonomic-control-plane] | [I-D.ietf-anima-autonomic-control-plane] | |||
| Behringer, M., Eckert, T., and S. Bjarnason, "An Autonomic | Behringer, M., Eckert, T., and S. Bjarnason, "An Autonomic | |||
| Control Plane", draft-ietf-anima-autonomic-control- | Control Plane", draft-ietf-anima-autonomic-control- | |||
| plane-06 (work in progress), March 2017. | plane-06 (work in progress), March 2017. | |||
| [I-D.ietf-anima-bootstrapping-keyinfra] | [I-D.ietf-anima-bootstrapping-keyinfra] | |||
| Pritikin, M., Richardson, M., Behringer, M., Bjarnason, | Pritikin, M., Richardson, M., Behringer, M., Bjarnason, | |||
| S., and K. Watsen, "Bootstrapping Remote Secure Key | S., and K. Watsen, "Bootstrapping Remote Secure Key | |||
| Infrastructures (BRSKI)", draft-ietf-anima-bootstrapping- | Infrastructures (BRSKI)", draft-ietf-anima-bootstrapping- | |||
| keyinfra-05 (work in progress), March 2017. | keyinfra-06 (work in progress), May 2017. | |||
| [I-D.ietf-roll-dao-projection] | [I-D.ietf-roll-dao-projection] | |||
| Thubert, P. and J. Pylakutty, "Root initiated routing | Thubert, P. and J. Pylakutty, "Root initiated routing | |||
| state in RPL", draft-ietf-roll-dao-projection-01 (work in | state in RPL", draft-ietf-roll-dao-projection-01 (work in | |||
| progress), March 2017. | progress), March 2017. | |||
| [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-05 (work in progress), October 2016. | dispatch-05 (work in progress), October 2016. | |||
| [RFC4192] Baker, F., Lear, E., and R. Droms, "Procedures for | ||||
| Renumbering an IPv6 Network without a Flag Day", RFC 4192, | ||||
| DOI 10.17487/RFC4192, September 2005, | ||||
| <http://www.rfc-editor.org/info/rfc4192>. | ||||
| [RFC4443] Conta, A., Deering, S., and M. Gupta, Ed., "Internet | [RFC4443] Conta, A., Deering, S., and M. Gupta, Ed., "Internet | |||
| Control Message Protocol (ICMPv6) for the Internet | Control Message Protocol (ICMPv6) for the Internet | |||
| Protocol Version 6 (IPv6) Specification", RFC 4443, | Protocol Version 6 (IPv6) Specification", RFC 4443, | |||
| DOI 10.17487/RFC4443, March 2006, | DOI 10.17487/RFC4443, March 2006, | |||
| <http://www.rfc-editor.org/info/rfc4443>. | <http://www.rfc-editor.org/info/rfc4443>. | |||
| [RFC6775] Shelby, Z., Ed., Chakrabarti, S., Nordmark, E., and C. | [RFC6775] Shelby, Z., Ed., Chakrabarti, S., Nordmark, E., and C. | |||
| Bormann, "Neighbor Discovery Optimization for IPv6 over | Bormann, "Neighbor Discovery Optimization for IPv6 over | |||
| Low-Power Wireless Personal Area Networks (6LoWPANs)", | Low-Power Wireless Personal Area Networks (6LoWPANs)", | |||
| RFC 6775, DOI 10.17487/RFC6775, November 2012, | RFC 6775, DOI 10.17487/RFC6775, November 2012, | |||
| End of changes. 115 change blocks. | ||||
| 256 lines changed or deleted | 582 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/ | ||||