| < draft-ietf-roll-useofrplinfo-36.txt | draft-ietf-roll-useofrplinfo-37.txt > | |||
|---|---|---|---|---|
| ROLL Working Group M. Robles | ROLL Working Group M. Robles | |||
| Internet-Draft UTN-FRM/Aalto | Internet-Draft UTN-FRM/Aalto | |||
| Updates: 6553, 6550, 8138 (if approved) M. Richardson | Updates: 6553, 6550, 8138 (if approved) M. Richardson | |||
| Intended status: Standards Track SSW | Intended status: Standards Track SSW | |||
| Expires: August 29, 2020 P. Thubert | Expires: September 15, 2020 P. Thubert | |||
| Cisco | Cisco | |||
| February 26, 2020 | March 14, 2020 | |||
| Using RPI option Type, Routing Header for Source Routes and IPv6-in-IPv6 | Using RPI Option Type, Routing Header for Source Routes and IPv6-in-IPv6 | |||
| encapsulation in the RPL Data Plane | encapsulation in the RPL Data Plane | |||
| draft-ietf-roll-useofrplinfo-36 | draft-ietf-roll-useofrplinfo-37 | |||
| 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 RFC6553 (RPI option Type), RFC6554 | enumerates the cases where RFC6553 (RPI Option Type), RFC6554 | |||
| (Routing Header for Source Routes) and IPv6-in-IPv6 encapsulation is | (Routing Header for Source Routes) and IPv6-in-IPv6 encapsulation is | |||
| required in data plane. This analysis provides the basis on which to | required in data plane. This analysis provides the basis on which to | |||
| design efficient compression of these headers. This document updates | design efficient compression of these headers. This document updates | |||
| RFC6553 adding a change to the RPI option Type. Additionally, this | RFC6553 adding a change to the RPI Option Type. Additionally, this | |||
| document updates RFC6550 defining a flag in the DIO Configuration | document updates RFC6550 defining a flag in the DIO Configuration | |||
| option to indicate about this change and updates RFC8138 as well to | option to indicate about this change and updates [RFC8138] as well to | |||
| consider the new Option Type when the RPL Option is decompressed. | consider the new Option Type when the RPL Option is decompressed. | |||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://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 August 29, 2020. | This Internet-Draft will expire on September 15, 2020. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2020 IETF Trust and the persons identified as the | Copyright (c) 2020 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 | |||
| (https://trustee.ietf.org/license-info) in effect on the date of | (https://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 | |||
| skipping to change at page 2, line 29 ¶ | skipping to change at page 2, line 29 ¶ | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 1.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2. Terminology and Requirements Language . . . . . . . . . . . . 5 | 2. Terminology and Requirements Language . . . . . . . . . . . . 5 | |||
| 3. RPL Overview . . . . . . . . . . . . . . . . . . . . . . . . 6 | 3. RPL Overview . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 4. Updates to RFC6553, RFC6550 and RFC8138 . . . . . . . . . . . 7 | 4. Updates to RFC6553, RFC6550 and RFC8138 . . . . . . . . . . . 7 | |||
| 4.1. Updates to RFC6550: Advertising External Routes with Non- | 4.1. Updates to RFC6550: Advertising External Routes with Non- | |||
| Storing Mode Signaling. . . . . . . . . . . . . . . . . . 7 | Storing Mode Signaling. . . . . . . . . . . . . . . . . . 7 | |||
| 4.2. Updates to RFC6553: Indicating the new RPI option Type. . 8 | 4.2. Updates to RFC6553: Indicating the new RPI Option Type. . 8 | |||
| 4.3. Updates to RFC6550: Indicating the new RPI in the | 4.3. Updates to RFC6550: Indicating the new RPI in the | |||
| DODAG Configuration option Flag. . . . . . . . . . . . . 11 | DODAG Configuration option Flag. . . . . . . . . . . . . 11 | |||
| 4.4. Updates to RFC8138: Indicating the way to decompress with | 4.4. Updates to RFC8138: Indicating the way to decompress with | |||
| the new RPI option Type. . . . . . . . . . . . . . . . . 13 | the new RPI Option Type. . . . . . . . . . . . . . . . . 13 | |||
| 5. Sample/reference topology . . . . . . . . . . . . . . . . . . 14 | 5. Sample/reference topology . . . . . . . . . . . . . . . . . . 14 | |||
| 6. Use cases . . . . . . . . . . . . . . . . . . . . . . . . . . 16 | 6. Use cases . . . . . . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 7. Storing mode . . . . . . . . . . . . . . . . . . . . . . . . 19 | 7. Storing mode . . . . . . . . . . . . . . . . . . . . . . . . 19 | |||
| 7.1. Storing Mode: Interaction between Leaf and Root . . . . . 20 | 7.1. Storing Mode: Interaction between Leaf and Root . . . . . 20 | |||
| 7.1.1. SM: Example of Flow from RAL to root . . . . . . . . 20 | 7.1.1. SM: Example of Flow from RAL to root . . . . . . . . 21 | |||
| 7.1.2. SM: Example of Flow from root to RAL . . . . . . . . 21 | 7.1.2. SM: Example of Flow from root to RAL . . . . . . . . 21 | |||
| 7.1.3. SM: Example of Flow from root to RUL . . . . . . . . 22 | 7.1.3. SM: Example of Flow from root to RUL . . . . . . . . 22 | |||
| 7.1.4. SM: Example of Flow from RUL to root . . . . . . . . 22 | 7.1.4. SM: Example of Flow from RUL to root . . . . . . . . 23 | |||
| 7.2. SM: Interaction between Leaf and Internet. . . . . . . . 23 | 7.2. SM: Interaction between Leaf and Internet. . . . . . . . 24 | |||
| 7.2.1. SM: Example of Flow from RAL to Internet . . . . . . 23 | 7.2.1. SM: Example of Flow from RAL to Internet . . . . . . 24 | |||
| 7.2.2. SM: Example of Flow from Internet to RAL . . . . . . 24 | 7.2.2. SM: Example of Flow from Internet to RAL . . . . . . 26 | |||
| 7.2.3. SM: Example of Flow from RUL to Internet . . . . . . 25 | 7.2.3. SM: Example of Flow from RUL to Internet . . . . . . 26 | |||
| 7.2.4. SM: Example of Flow from Internet to RUL. . . . . . . 26 | 7.2.4. SM: Example of Flow from Internet to RUL. . . . . . . 27 | |||
| 7.3. SM: Interaction between Leaf and Leaf . . . . . . . . . . 27 | 7.3. SM: Interaction between Leaf and Leaf . . . . . . . . . . 28 | |||
| 7.3.1. SM: Example of Flow from RAL to RAL . . . . . . . . . 27 | 7.3.1. SM: Example of Flow from RAL to RAL . . . . . . . . . 28 | |||
| 7.3.2. SM: Example of Flow from RAL to RUL . . . . . . . . . 28 | 7.3.2. SM: Example of Flow from RAL to RUL . . . . . . . . . 30 | |||
| 7.3.3. SM: Example of Flow from RUL to RAL . . . . . . . . . 29 | 7.3.3. SM: Example of Flow from RUL to RAL . . . . . . . . . 31 | |||
| 7.3.4. SM: Example of Flow from RUL to RUL . . . . . . . . . 30 | 7.3.4. SM: Example of Flow from RUL to RUL . . . . . . . . . 32 | |||
| 8. Non Storing mode . . . . . . . . . . . . . . . . . . . . . . 31 | 8. Non Storing mode . . . . . . . . . . . . . . . . . . . . . . 33 | |||
| 8.1. Non-Storing Mode: Interaction between Leaf and Root . . . 33 | 8.1. Non-Storing Mode: Interaction between Leaf and Root . . . 35 | |||
| 8.1.1. Non-SM: Example of Flow from RAL to root . . . . . . 34 | 8.1.1. Non-SM: Example of Flow from RAL to root . . . . . . 36 | |||
| 8.1.2. Non-SM: Example of Flow from root to RAL . . . . . . 34 | 8.1.2. Non-SM: Example of Flow from root to RAL . . . . . . 36 | |||
| 8.1.3. Non-SM: Example of Flow from root to RUL . . . . . . 35 | 8.1.3. Non-SM: Example of Flow from root to RUL . . . . . . 37 | |||
| 8.1.4. Non-SM: Example of Flow from RUL to root . . . . . . 36 | 8.1.4. Non-SM: Example of Flow from RUL to root . . . . . . 38 | |||
| 8.2. Non-Storing Mode: Interaction between Leaf and Internet . 37 | 8.2. Non-Storing Mode: Interaction between Leaf and Internet . 39 | |||
| 8.2.1. Non-SM: Example of Flow from RAL to Internet . . . . 37 | 8.2.1. Non-SM: Example of Flow from RAL to Internet . . . . 39 | |||
| 8.2.2. Non-SM: Example of Flow from Internet to RAL . . . . 38 | 8.2.2. Non-SM: Example of Flow from Internet to RAL . . . . 40 | |||
| 8.2.3. Non-SM: Example of Flow from RUL to Internet . . . . 39 | 8.2.3. Non-SM: Example of Flow from RUL to Internet . . . . 41 | |||
| 8.2.4. Non-SM: Example of Flow from Internet to RUL . . . . 40 | 8.2.4. Non-SM: Example of Flow from Internet to RUL . . . . 42 | |||
| 8.3. Non-SM: Interaction between leaves . . . . . . . . . . . 41 | 8.3. Non-SM: Interaction between leaves . . . . . . . . . . . 43 | |||
| 8.3.1. Non-SM: Example of Flow from RAL to RAL . . . . . . . 41 | 8.3.1. Non-SM: Example of Flow from RAL to RAL . . . . . . . 43 | |||
| 8.3.2. Non-SM: Example of Flow from RAL to RUL . . . . . . . 44 | 8.3.2. Non-SM: Example of Flow from RAL to RUL . . . . . . . 46 | |||
| 8.3.3. Non-SM: Example of Flow from RUL to RAL . . . . . . . 46 | 8.3.3. Non-SM: Example of Flow from RUL to RAL . . . . . . . 48 | |||
| 8.3.4. Non-SM: Example of Flow from RUL to RUL . . . . . . . 47 | 8.3.4. Non-SM: Example of Flow from RUL to RUL . . . . . . . 49 | |||
| 9. Operational Considerations of supporting | 9. Operational Considerations of supporting | |||
| RUL-leaves . . . . . . . . . . . . . . . . . . . . . . . . . 48 | RUL-leaves . . . . . . . . . . . . . . . . . . . . . . . . . 50 | |||
| 10. Operational considerations of introducing 0x23 . . . . . . . 49 | 10. Operational considerations of introducing 0x23 . . . . . . . 51 | |||
| 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 49 | 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 51 | |||
| 12. Security Considerations . . . . . . . . . . . . . . . . . . . 50 | 12. Security Considerations . . . . . . . . . . . . . . . . . . . 52 | |||
| 13. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 53 | 13. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 55 | |||
| 14. References . . . . . . . . . . . . . . . . . . . . . . . . . 54 | 14. References . . . . . . . . . . . . . . . . . . . . . . . . . 56 | |||
| 14.1. Normative References . . . . . . . . . . . . . . . . . . 54 | 14.1. Normative References . . . . . . . . . . . . . . . . . . 56 | |||
| 14.2. Informative References . . . . . . . . . . . . . . . . . 55 | 14.2. Informative References . . . . . . . . . . . . . . . . . 57 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 57 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 59 | |||
| 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. [RFC6553] | [RFC6550] is a routing protocol for constrained networks. [RFC6553] | |||
| defines the RPL Option carried within the IPv6 Hop-by-Hop Header to | defines the RPL Option carried within the IPv6 Hop-by-Hop Header to | |||
| carry the RPLInstanceID and quickly identify inconsistencies (loops) | carry the RPLInstanceID and quickly identify inconsistencies (loops) | |||
| in the routing topology. The RPL Option is commonly referred to as | in the routing topology. The RPL Option is commonly referred to as | |||
| the RPL Packet Information (RPI) though the RPI is really the | the RPL Packet Information (RPI) though the RPI is really the | |||
| abstract information that is defined in [RFC6550] and transported in | abstract information that is defined in [RFC6550] and transported in | |||
| skipping to change at page 4, line 14 ¶ | skipping to change at page 4, line 14 ¶ | |||
| artifacts as possible that not all implementers agree when artifacts | artifacts as possible that not all implementers 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. | |||
| The ROLL WG analysized how [RFC2460] rules apply to storing and non- | The ROLL WG analysized how [RFC2460] rules apply to storing and non- | |||
| storing use of RPL. The result was 24 data plane use cases. They | storing use of RPL. The result was 24 data plane use cases. They | |||
| are exhaustively outlined here in order to be completely unambiguous. | are exhaustively outlined here in order to be completely unambiguous. | |||
| During the processing of this document, new rules were published as | During the processing of this document, new rules were published as | |||
| [RFC8200], and this document was updated to reflect the normative | [RFC8200], and this document was updated to reflect the normative | |||
| changes in that document. | changes in that document. | |||
| This document updates RFC6553, changing the value of the Option Type | This document updates [RFC6553], changing the value of the Option | |||
| of the RPL Option to make RFC8200 routers ignore this option when not | Type of the RPL Option to make [RFC8200] routers ignore this option | |||
| recognized. | when not recognized. | |||
| A Routing Header Dispatch for 6LoWPAN (6LoRH)([RFC8138]) defines a | A Routing Header Dispatch for 6LoWPAN (6LoRH)([RFC8138]) defines a | |||
| mechanism for compressing RPL Option information and Routing Header | mechanism for compressing RPL Option information and Routing Header | |||
| type 3 (RH3) [RFC6554], as well as an efficient IPv6-in-IPv6 | type 3 (RH3) [RFC6554], as well as an efficient IPv6-in-IPv6 | |||
| technique. | technique. | |||
| Since some of the uses cases here described, use IPv6-in-IPv6 | Since some of the uses cases here described, use IPv6-in-IPv6 | |||
| encapsulation. It MUST take in consideration, when encapsulation is | encapsulation. It MUST take in consideration, when encapsulation is | |||
| applied, the RFC6040 [RFC6040], which defines how the explicit | applied, the RFC6040 [RFC6040], which defines how the explicit | |||
| congestion notification (ECN) field of the IP header should be | congestion notification (ECN) field of the IP header should be | |||
| skipping to change at page 4, line 47 ¶ | skipping to change at page 4, line 47 ¶ | |||
| 1.1. Overview | 1.1. Overview | |||
| The rest of the document is organized as follows: Section 2 describes | The rest of the document is organized as follows: Section 2 describes | |||
| the used terminology. Section 3 provides a RPL Overview. Section 4 | the used terminology. Section 3 provides a RPL Overview. Section 4 | |||
| describes the updates to RFC6553, RFC6550 and RFC 8138. Section 5 | describes the updates to RFC6553, RFC6550 and RFC 8138. Section 5 | |||
| provides the reference topology used for the uses cases. Section 6 | provides the reference topology used for the uses cases. Section 6 | |||
| describes the uses cases included. Section 7 describes the storing | describes the uses cases included. Section 7 describes the storing | |||
| mode cases and section 8 the non-storing mode cases. Section 9 | mode cases and section 8 the non-storing mode cases. Section 9 | |||
| describes the operational considerations of supporting RPL-unaware- | describes the operational considerations of supporting RPL-unaware- | |||
| leaves. Section 10 depicts operational considerations for the | leaves. Section 10 depicts operational considerations for the | |||
| proposed change on RPI option Type, section 11 the IANA | proposed change on RPI Option Type, section 11 the IANA | |||
| considerations and then section 12 describes the security aspects. | considerations and then section 12 describes the security aspects. | |||
| 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", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in BCP | |||
| 14 [RFC2119] [RFC8174] when, and only when, they appear in all | 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| skipping to change at page 6, line 13 ¶ | skipping to change at page 6, line 13 ¶ | |||
| route-over topologies." | route-over topologies." | |||
| 6LoWPAN Border Router (6LBR): [RFC6775] defines it as:"A border | 6LoWPAN Border Router (6LBR): [RFC6775] defines it as:"A border | |||
| router located at the junction of separate 6LoWPAN networks or | router located at the junction of separate 6LoWPAN networks or | |||
| between a 6LoWPAN network and another IP network. There may be one | between a 6LoWPAN network and another IP network. There may be one | |||
| or more 6LBRs at the 6LoWPAN network boundary. A 6LBR is the | or more 6LBRs at the 6LoWPAN network boundary. A 6LBR is the | |||
| responsible authority for IPv6 prefix propagation for the 6LoWPAN | responsible authority for IPv6 prefix propagation for the 6LoWPAN | |||
| network it is serving. An isolated LoWPAN also contains a 6LBR in | network it is serving. An isolated LoWPAN also contains a 6LBR in | |||
| the network, which provides the prefix(es) for the isolated network." | the network, which provides the prefix(es) for the isolated network." | |||
| Flag Day: A transition that involves having a network with different | Flag Day: A transition that involves having a network with different | |||
| values of RPI option Type. Thus the network does not work correctly | values of RPI Option Type. Thus the network does not work correctly | |||
| (Lack of interoperation). | (Lack of interoperation). | |||
| Hop-by-Hop re-encapsulation: The term "Hop-by-Hop re-encapsulation" | Hop-by-Hop re-encapsulation: The term "Hop-by-Hop re-encapsulation" | |||
| header refers to adding a header that originates from a node to an | header refers to adding a header that originates from a node to an | |||
| adjacent node, using the addresses (usually the Global Unicast | adjacent node, using the addresses (usually the Global Unicast | |||
| Address (GUA) or Unique Local Address (ULA) but could also use the | Address (GUA) or Unique Local Address (ULA) but could also use the | |||
| link-local addresses) of each node. If the packet must traverse | link-local addresses) of each node. If the packet must traverse | |||
| multiple hops, then it must be decapsulated at each hop, and then re- | multiple hops, then it must be decapsulated at each hop, and then re- | |||
| encapsulated again in a similar fashion. | encapsulated again in a similar fashion. | |||
| Non-Storing Mode (Non-SM): RPL mode of operation in which the RPL- | Non-Storing Mode (Non-SM): RPL mode of operation in which the RPL- | |||
| aware-nodes send information to the root about its parents. Thus, | aware-nodes send information to the root about their parents. Thus, | |||
| the root know the topology. Because the root knows the topology, the | the root knows the topology. Because the root knows the topology, | |||
| intermediate 6LRs do not maintain routing state then source routing | the intermediate 6LRs do not maintain routing state and source | |||
| is needed. | routing is needed. | |||
| Storing Mode (SM): RPL mode of operation in which RPL-aware-nodes | Storing Mode (SM): RPL mode of operation in which RPL-aware-nodes | |||
| (6LRs) maintain routing state (of the children) so that source | (6LRs) maintain routing state (of the children) so that source | |||
| routing is not needed. | routing is not needed. | |||
| Note: Due to lack of space in some figures (tables) we refers IPv6- | Note: Due to lack of space in some figures (tables) we refer to IPv6- | |||
| in-IPv6 as IP6-IP6. | in-IPv6 as IP6-IP6. | |||
| 3. RPL Overview | 3. RPL Overview | |||
| 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 shown in Figure 1. | different Code values. A RPL Stack is shown in Figure 1. | |||
| skipping to change at page 8, line 41 ¶ | skipping to change at page 8, line 41 ¶ | |||
| by [RFC8504]. If the 6LN is a RUL, the Root that encapsulates a | by [RFC8504]. If the 6LN is a RUL, the Root that encapsulates a | |||
| packet SHOULD terminate the tunnel at a parent 6LR unless it is aware | packet SHOULD terminate the tunnel at a parent 6LR unless it is aware | |||
| that the RUL supports IP-in-IP decapsulation. | that the RUL supports IP-in-IP decapsulation. | |||
| A node that is reachable over an external route is not expected to | A node that is reachable over an external route is not expected to | |||
| support [RFC8138]. Whether a decapsulation took place or not and | support [RFC8138]. Whether a decapsulation took place or not and | |||
| even when the 6LR is delivering the packet to a RUL, the 6LR that | even when the 6LR is delivering the packet to a RUL, the 6LR that | |||
| injected an external route MUST uncompress the packet before | injected an external route MUST uncompress the packet before | |||
| forwarding over that external route. | forwarding over that external route. | |||
| 4.2. Updates to RFC6553: Indicating the new RPI option Type. | 4.2. Updates to RFC6553: Indicating the new RPI Option Type. | |||
| This modification is required in order to be able to send, for | This modification is required in order to be able to send, for | |||
| example, IPv6 packets from a RPL-Aware-Leaf to a RPL-unaware node | example, IPv6 packets from a RPL-Aware-Leaf to a RPL-unaware node | |||
| through Internet (see Section 7.2.1), without requiring IPv6-in-IPv6 | through Internet (see Section 7.2.1), without requiring IPv6-in-IPv6 | |||
| encapsulation. | encapsulation. | |||
| [RFC6553] (Section 6, Page 7) states as shown in Figure 2, that in | [RFC6553] (Section 6, Page 7) states as shown in Figure 2, that in | |||
| the Option Type field of the RPL Option, the two high order bits must | the Option Type field of the RPL Option, the two high order bits must | |||
| be set to '01' and the third bit is equal to '1'. The first two bits | 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 | indicate that the IPv6 node must discard the packet if it doesn't | |||
| skipping to change at page 9, line 17 ¶ | skipping to change at page 9, line 17 ¶ | |||
| +-------+-------------------+----------------+-----------+ | +-------+-------------------+----------------+-----------+ | |||
| | Hex | Binary Value | Description | Reference | | | Hex | Binary Value | Description | Reference | | |||
| + Value +-------------------+ + + | + Value +-------------------+ + + | |||
| | | act | chg | rest | | | | | | act | chg | rest | | | | |||
| +-------+-----+-----+-------+----------------+-----------+ | +-------+-----+-----+-------+----------------+-----------+ | |||
| | 0x63 | 01 | 1 | 00011 | RPL Option | [RFC6553] | | | 0x63 | 01 | 1 | 00011 | RPL Option | [RFC6553] | | |||
| +-------+-----+-----+-------+----------------+-----------+ | +-------+-----+-----+-------+----------------+-----------+ | |||
| Figure 2: Option Type in RPL Option. | Figure 2: Option Type in RPL Option. | |||
| This document illustrates that is is not always possible to know for | This document illustrates that it is not always possible to know for | |||
| sure at the source that a packet will only travel within the RPL | sure at the source that a packet will only travel within the RPL | |||
| domain or may leave it. | domain or may leave it. | |||
| At the time [RFC6553] was published, leaking a Hop-by-Hop header in | At the time [RFC6553] was published, leaking a Hop-by-Hop header in | |||
| the outer IPv6 header chain could potentially impact core routers in | the outer IPv6 header chain could potentially impact core routers in | |||
| the internet. So at that time, it was decided to encapsulate any | the internet. So at that time, it was decided to encapsulate any | |||
| packet with a RPL Option using IPv6-in-IPv6 in all cases where it was | packet with a RPL Option using IPv6-in-IPv6 in all cases where it was | |||
| unclear whether the packet would remain within the RPL domain. In | unclear whether the packet would remain within the RPL domain. In | |||
| the exception case where a packet would still leak, the Option Type | the exception case where a packet would still leak, the Option Type | |||
| would ensure that the first router in the Internet that does not | would ensure that the first router in the Internet that does not | |||
| recognize the option would drop the packet and protect the rest of | recognize the option would drop the packet and protect the rest of | |||
| the network. | the network. | |||
| Even with [RFC8138], where the IPv6-in-IPv6 header is compressed, | Even with [RFC8138], where the IPv6-in-IPv6 header is compressed, | |||
| this approach yields extra bytes in a packet which means consuming | this approach yields extra bytes in a packet; this means consuming | |||
| more energy, more bandwidth, incurring higher chances of loss and | more energy, more bandwidth, incurring higher chances of loss and | |||
| possibly causing a fragmentation at the 6LoWPAN level. This impacts | possibly causing a fragmentation at the 6LoWPAN level. This impacts | |||
| the daily operation of constrained devices for a case that generally | the daily operation of constrained devices for a case that generally | |||
| does not happen and would not heavily impact the core anyway. | does not happen and would not heavily impact the core anyway. | |||
| While intention was and remains that the Hop-by-Hop header with a RPL | While intention was and remains that the Hop-by-Hop header with a RPL | |||
| Option should be confined within the RPL domain, this specification | Option should be confined within the RPL domain, this specification | |||
| modifies this behavior in order to reduce the dependency on IPv6-in- | modifies this behavior in order to reduce the dependency on IPv6-in- | |||
| IPv6 and protect the constrained devices. Section 4 of [RFC8200] | IPv6 and protect the constrained devices. Section 4 of [RFC8200] | |||
| clarifies the behaviour of routers in the Internet as follows: "it is | clarifies the behaviour of routers in the Internet as follows: "it is | |||
| skipping to change at page 10, line 11 ¶ | skipping to change at page 10, line 11 ¶ | |||
| leave the RPL domain on its way to its destination. In that event, | leave the RPL domain on its way to its destination. In that event, | |||
| the packet should reach its destination and should not be discarded | the packet should reach its destination and should not be discarded | |||
| by the first node that does not recognize the RPL Option. But with | by the first node that does not recognize the RPL Option. But with | |||
| the current value of the Option Type, if a node in the Internet is | the current value of the Option Type, if a node in the Internet is | |||
| configured to process the Hop-by-Hop header, and if such node | configured to process the Hop-by-Hop header, and if such node | |||
| encounters an option with the first two bits set to 01 and conforms | encounters an option with the first two bits set to 01 and conforms | |||
| to [RFC8200], it will drop the packet. Host systems should do the | to [RFC8200], it will drop the packet. Host systems should do the | |||
| same, irrespective of the configuration. | same, irrespective of the configuration. | |||
| Thus, this document updates the Option Type of the RPL Option | Thus, this document updates the Option Type of the RPL Option | |||
| [RFC6553], abusively naming it RPI option Type for simplicity, to | [RFC6553], abusively naming it RPI Option Type for simplicity, to | |||
| (Figure 3): the two high order bits MUST be set to '00' and the third | (Figure 3): the two high order bits MUST be set to '00' and the third | |||
| bit is equal to '1'. The first two bits indicate that the IPv6 node | bit is equal to '1'. The first two bits indicate that the IPv6 node | |||
| MUST skip over this option and continue processing the header | MUST skip over this option and continue processing the header | |||
| ([RFC8200] Section 4.2) if it doesn't recognize the Option Type, and | ([RFC8200] Section 4.2) if it doesn't recognize the Option Type, and | |||
| the third bit continues to be set to indicate that the Option Data | the third bit continues to be set to indicate that the Option Data | |||
| may change en route. The five rightmost bits remain at 0x3(00011). | may change en route. The rightmost five bits remain at 0x3(00011). | |||
| This ensures that a packet that leaves the RPL domain of an LLN (or | This ensures that a packet that leaves the RPL domain of an LLN (or | |||
| that leaves the LLN entirely) will not be discarded when it contains | that leaves the LLN entirely) will not be discarded when it contains | |||
| the RPL Option. | the RPL Option. | |||
| With the new Option Type, if an IPv6 (intermediate) node (RPL-not- | With the new Option Type, if an IPv6 (intermediate) node (RPL-not- | |||
| capable) receives a packet with an RPL Option, it should ignore the | capable) receives a packet with an RPL Option, it should ignore the | |||
| Hop-by-Hop RPL Option (skip over this option and continue processing | Hop-by-Hop RPL Option (skip over this option and continue processing | |||
| the header). This is relevant, as it was mentioned previously, in | the header). This is relevant, as it was mentioned previously, in | |||
| the case that there is a flow from RAL to Internet (see | the case that there is a flow from RAL to Internet (see | |||
| Section 7.2.1). | Section 7.2.1). | |||
| skipping to change at page 10, line 44 ¶ | skipping to change at page 10, line 44 ¶ | |||
| | | act | chg | rest | | | | | | act | chg | rest | | | | |||
| +-------+-----+-----+-------+-------------+------------+ | +-------+-----+-----+-------+-------------+------------+ | |||
| | 0x23 | 00 | 1 | 00011 | RPL Option |[RFCXXXX](*)| | | 0x23 | 00 | 1 | 00011 | RPL Option |[RFCXXXX](*)| | |||
| +-------+-----+-----+-------+-------------+------------+ | +-------+-----+-----+-------+-------------+------------+ | |||
| Figure 3: Revised Option Type in RPL Option. (*)represents this | Figure 3: Revised Option Type in RPL Option. (*)represents this | |||
| document | document | |||
| Without the signaling described below, this change would otherwise | Without the signaling described below, this change would otherwise | |||
| create a lack of interoperation (flag day) for existing networks | create a lack of interoperation (flag day) for existing networks | |||
| which are currently using 0x63 as the RPI option Type value. A move | which are currently using 0x63 as the RPI Option Type value. A move | |||
| to 0x23 will not be understood by those networks. It is suggested | to 0x23 will not be understood by those networks. It is suggested | |||
| that RPL implementations accept both 0x63 and 0x23 when processing | that RPL implementations accept both 0x63 and 0x23 when processing | |||
| the header. | the header. | |||
| When forwarding packets, implementations SHOULD use the same value of | When forwarding packets, implementations SHOULD use the same value of | |||
| RPI Type as it was received. This is required because the RPI option | RPI Type as was received. This is required because the RPI Option | |||
| Type does not change en route ([RFC8200] - Section 4.2). It allows | Type does not change en route ([RFC8200] - Section 4.2). It allows | |||
| the network to be incrementally upgraded and allows the DODAG root to | the network to be incrementally upgraded and allows the DODAG root to | |||
| know which parts of the network have been upgraded. | know which parts of the network have been upgraded. | |||
| When originating new packets, implementations SHOULD have an option | When originating new packets, implementations SHOULD have an option | |||
| to determine which value to originate with, this option is controlled | to determine which value to originate with, this option is controlled | |||
| by the DIO option described below. | by the DIO option described below. | |||
| The change of RPI option Type from 0x63 to 0x23, makes all [RFC8200] | The change of RPI Option Type from 0x63 to 0x23, makes all [RFC8200] | |||
| Section 4.2 compliant nodes tolerant of the RPL artifacts. There is | Section 4.2 compliant nodes tolerant of the RPL artifacts. There is | |||
| therefore no longer a necessity to remove the artifacts when sending | therefore no longer a necessity to remove the artifacts when sending | |||
| traffic to the Internet. This change clarifies when to use IPv6-in- | traffic to the Internet. This change clarifies when to use IPv6-in- | |||
| IPv6 headers, and how to address them: The Hop-by-Hop Options header | IPv6 headers, and how to address them: The Hop-by-Hop Options header | |||
| containing the RPI MUST always be added when 6LRs originate packets | containing the RPI MUST always be added when 6LRs originate packets | |||
| (without IPv6-in-IPv6 headers), and IPv6-in-IPv6 headers MUST always | (without IPv6-in-IPv6 headers), and IPv6-in-IPv6 headers MUST always | |||
| be added when a 6LR find that it needs to insert a Hop-by-Hop Options | be added when a 6LR finds that it needs to insert a Hop-by-Hop | |||
| header containing the RPL Option. The IPv6-in-IPv6 header is to be | Options header containing the RPL Option. The IPv6-in-IPv6 header is | |||
| addressed to the RPL root when on the way up, and to the end-host | to be addressed to the RPL root when on the way up, and to the end- | |||
| when on the way down. | host when on the way down. | |||
| In the non-storing case, dealing with not-RPL aware leaf nodes is | In the non-storing case, dealing with not-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 not-RPL aware leaf nodes because it will | The 6LBR can recognize not-RPL aware leaf nodes because it will | |||
| receive a DAO about that node from the 6LR immediately above that | receive a DAO about that node from the 6LR immediately above that | |||
| not-RPL aware node. This means that the non-storing mode case can | not-RPL aware node. This means that the non-storing mode case can | |||
| avoid ever using Hop-by-Hop re-encapsulation headers for traffic | avoid ever using Hop-by-Hop re-encapsulation headers for traffic | |||
| originating from the root to the leaves. | originating from the root to the leaves. | |||
| The non-storing mode case does not require the type change from 0x63 | The non-storing mode case does not require the type change from 0x63 | |||
| to 0x23, as the root can always create the right packet. The type | to 0x23, as the root can always create the right packet. The type | |||
| change does not adversely affect the non-storing case. | change does not adversely affect the non-storing case. | |||
| 4.3. Updates to RFC6550: Indicating the new RPI in the DODAG | 4.3. Updates to RFC6550: Indicating the new RPI in the DODAG | |||
| Configuration option Flag. | Configuration option Flag. | |||
| In order to avoid a Flag Day caused by lack of interoperation between | In order to avoid a Flag Day caused by lack of interoperation between | |||
| new RPI option Type (0x23) and old RPI option Type (0x63) nodes, this | new RPI Option Type (0x23) and old RPI Option Type (0x63) nodes, this | |||
| section defines a flag in the DIO Configuration option, to indicate | section defines a flag in the DIO Configuration option, to indicate | |||
| when then new RPI option Type can be safely used. This means, the | when the new RPI Option Type can be safely used. This means, the | |||
| flag is going to indicate the value of Option Type that the network | flag is going to indicate the value of Option Type that the network | |||
| is using for the RPL Option. Thus, when a node join to a network | will be using for the RPL Option. Thus, when a node joins to a | |||
| will know which value to use. With this, RPL-capable nodes know if | network will know which value to use. With this, RPL-capable nodes | |||
| it is safe to use 0x23 when creating a new RPL Option. A node that | know if it is safe to use 0x23 when creating a new RPL Option. A | |||
| forwards a packet with a RPI MUST NOT modify the Option Type of the | node that forwards a packet with an RPI MUST NOT modify the Option | |||
| RPL Option. | Type of the RPL Option. | |||
| This is done using a DODAG Configuration option flag which will | This is done using a DODAG Configuration option flag which will | |||
| signal "RPI 0x23 enable" and propagate through the network. | signal "RPI 0x23 enable" and propagate through the network. | |||
| Section 6.3.1. of [RFC6550] defines a 3-bit Mode of Operation (MOP) | Section 6.3.1. of [RFC6550] defines a 3-bit Mode of Operation (MOP) | |||
| in the DIO Base Object. The flag is defined only for MOP value | in the DIO Base Object. The flag is defined only for MOP value | |||
| between 0 to 6. For a MOP value of 7 or above, the flag MAY indicate | between 0 to 6. For a MOP value of 7 or above, the flag MAY indicate | |||
| something different and MUST NOT be interpreted as "RPI 0x23 enable" | something different and MUST NOT be interpreted as "RPI 0x23 enable" | |||
| unless the specification of the MOP indicates to do so. | unless the specification of the MOP indicates to do so. | |||
| As stated in [RFC6550] the DODAG Configuration option is present in | As stated in [RFC6550] the DODAG Configuration option is present in | |||
| skipping to change at page 12, line 25 ¶ | skipping to change at page 12, line 25 ¶ | |||
| configuration information. It is generally static, and does not | configuration information. It is generally static, and does not | |||
| change within the DODAG. This information is configured at the DODAG | change within the DODAG. This information is configured at the DODAG | |||
| root and distributed throughout the DODAG with the DODAG | root and distributed throughout the DODAG with the DODAG | |||
| Configuration option. Nodes other than the DODAG root do not modify | Configuration option. Nodes other than the DODAG root do not modify | |||
| this information when propagating the DODAG Configuration option. | this information when propagating the DODAG Configuration option. | |||
| Currently, the DODAG Configuration option in [RFC6550] states: "the | Currently, the DODAG Configuration option in [RFC6550] states: "the | |||
| unused bits MUST be initialize to zero by the sender and MUST be | unused bits MUST be initialize to zero by the sender and MUST be | |||
| ignored by the receiver". If the flag is received with a value zero | ignored by the receiver". If the flag is received with a value zero | |||
| (which is the default), then new nodes will remain in RFC6553 | (which is the default), then new nodes will remain in RFC6553 | |||
| Compatible Mode; originating traffic with the old-RPI option Type | Compatible Mode; originating traffic with the old-RPI Option Type | |||
| (0x63) value. If the flag is received with a value of 1, then the | (0x63) value. If the flag is received with a value of 1, then the | |||
| option value for the RPL Option MUST be set to 0x23. | value for the RPL Option MUST be set to 0x23. | |||
| Bit number three of the flag field in the DODAG Configuration option | Bit number three of the flag field in the DODAG Configuration option | |||
| is to be used as shown in Figure 4 (which is the same as Figure 26 in | is to be used as shown in Figure 4 (which is the same as Figure 29 in | |||
| Section 11 and is shown here for convenience): | Section 11 and is shown here for convenience): | |||
| +------------+-----------------+---------------+ | +------------+-----------------+---------------+ | |||
| | Bit number | Description | Reference | | | Bit number | Description | Reference | | |||
| +------------+-----------------+---------------+ | +------------+-----------------+---------------+ | |||
| | 3 | RPI 0x23 enable | This document | | | 3 | RPI 0x23 enable | This document | | |||
| +------------+-----------------+---------------+ | +------------+-----------------+---------------+ | |||
| Figure 4: DODAG Configuration option Flag to indicate the RPI-flag- | Figure 4: DODAG Configuration option Flag to indicate the RPI-flag- | |||
| day. | day. | |||
| In the case of rebooting, the node (6LN or 6LR) does not remember the | In the case of reboot, the node (6LN or 6LR) does not remember the | |||
| RPL Option Type (i.e., whether or not the flag is set), so DIO | RPI Option Type (i.e., whether or not the flag is set), so the node | |||
| messages sent by the node would be sent with the flag unset until a | will not trigger DIO messages until a DIO message is received | |||
| DIO message is received with the flag set, indicating the new RPI | indicating the RPI value to be used. The node will use the value | |||
| value. The node will use the value 0x23 if it supports this feature. | 0x23 if the network supports this feature | |||
| 4.4. Updates to RFC8138: Indicating the way to decompress with the new | 4.4. Updates to RFC8138: Indicating the way to decompress with the new | |||
| RPI option Type. | RPI Option Type. | |||
| This modification is required in order to be able to decompress the | This modification is required in order to be able to decompress the | |||
| RPL Option with the new Option Type of 0x23. | RPL Option with the new Option Type of 0x23. | |||
| RPI-6LoRH header provides a compressed form for the RPL RPI; see | RPI-6LoRH header provides a compressed form for the RPL RPI; see | |||
| [RFC8138], Section 6. A node that is decompressing this header MUST | [RFC8138], Section 6. A node that is decompressing this header MUST | |||
| decompress using the RPI option Type that is currently active: that | decompress using the RPI Option Type that is currently active: that | |||
| is, a choice between 0x23 (new) and 0x63 (old). The node will know | is, a choice between 0x23 (new) and 0x63 (old). The node will know | |||
| which to use based upon the presence of the flag in the DODAG | which to use based upon the presence of the flag in the DODAG | |||
| Configuration option defined in Section 4.3. E.g. If the network is | Configuration option defined in Section 4.3. E.g. If the network is | |||
| in 0x23 mode (by DIO option), then it should be decompressed to 0x23. | in 0x23 mode (by DIO option), then it should be decompressed to 0x23. | |||
| [RFC8138] section 7 documents how to compress the IPv6-in-IPv6 | [RFC8138] section 7 documents how to compress the IPv6-in-IPv6 | |||
| header. | header. | |||
| There are potential significant advantages to having a single code | There are potential significant advantages to having a single code | |||
| path that always processes IPv6-in-IPv6 headers with no conditional | path that always processes IPv6-in-IPv6 headers with no conditional | |||
| skipping to change at page 14, line 13 ¶ | skipping to change at page 14, line 13 ¶ | |||
| Follows the RPI-6LoRH and then the IP-in-IP 6LoRH. When the IP-in-IP | Follows the RPI-6LoRH and then the IP-in-IP 6LoRH. When the IP-in-IP | |||
| 6LoRH is removed, all the router headers that precede it are also | 6LoRH is removed, all the router headers that precede it are also | |||
| removed. The Paging Dispatch [RFC8025] may also be removed if there | removed. The Paging Dispatch [RFC8025] may also be removed if there | |||
| was no previous Page change to a Page other than 0 or 1, since the | was no previous Page change to a Page other than 0 or 1, since the | |||
| LOWPAN_IPHC is encoded in the same fashion in the default Page 0 and | LOWPAN_IPHC is encoded in the same fashion in the default Page 0 and | |||
| in Page 1. The resulting packet to the destination is the inner | in Page 1. The resulting packet to the destination is the inner | |||
| packet compressed with [RFC6282]. | packet compressed with [RFC6282]. | |||
| 5. Sample/reference topology | 5. Sample/reference topology | |||
| A RPL network in general is composed of a 6LBR, Backbone Router | A RPL network in general is composed of a 6LBR, a Backbone Router | |||
| (6BBR), 6LR and 6LN as a leaf logically organized in a DODAG | (6BBR), a 6LR and a 6LN as a leaf logically organized in a DODAG | |||
| structure. | structure. | |||
| Figure 6 shows the reference RPL Topology for this document. The | Figure 6 shows the reference RPL Topology for this document. The | |||
| letters above the nodes are there so that they may be referenced in | letters above the nodes are there so that they may be referenced in | |||
| subsequent sections. In the figure, 6LR represents a full router | subsequent sections. In the figure, 6LR represents a full router | |||
| node. The 6LN is a RPL aware router, or host (as a leaf). | node. The 6LN is a RPL aware router, or host (as a leaf). | |||
| Additionally, for simplification purposes, it is supposed that the | Additionally, for simplification purposes, it is supposed that the | |||
| 6LBR has direct access to Internet and is the root of the DODAG, thus | 6LBR has direct access to Internet and is the root of the DODAG, thus | |||
| the 6BBR is not present in the figure. | the 6BBR is not present in the figure. | |||
| skipping to change at page 16, line 11 ¶ | skipping to change at page 16, line 11 ¶ | |||
| +-------+ +-------+ +------+ +-------+ +-------+ | +-------+ +-------+ +------+ +-------+ +-------+ | |||
| Figure 6: A reference RPL Topology. | Figure 6: A reference RPL Topology. | |||
| 6. Use cases | 6. Use cases | |||
| In the data plane a combination of RFC6553, RFC6554 and IPv6-in-IPv6 | In the data plane a combination of RFC6553, RFC6554 and IPv6-in-IPv6 | |||
| encapsulation are going to be analyzed for a number of representative | encapsulation are going to be analyzed for a number of representative | |||
| traffic flows. | traffic flows. | |||
| This document assumes that the LLN is using the no-drop RPI option | This document assumes that the LLN is using the no-drop RPI Option | |||
| Type of 0x23. | Type of 0x23. | |||
| The use cases describe the communication in the following cases: - | The use cases describe the communication in the following cases: - | |||
| Between RPL-aware-nodes with the root (6LBR) - Between RPL-aware- | Between RPL-aware-nodes with the root (6LBR) - Between RPL-aware- | |||
| nodes with the Internet - Between RUL nodes within the LLN (e.g. see | nodes with the Internet - Between RUL nodes within the LLN (e.g. see | |||
| Section 7.1.4) - Inside of the LLN when the final destination address | Section 7.1.4) - Inside of the LLN when the final destination address | |||
| resides outside of the LLN (e.g. see Section 7.2.3). | resides outside of the LLN (e.g. see Section 7.2.3). | |||
| The uses cases are as follows: | The uses cases are as follows: | |||
| skipping to change at page 17, line 22 ¶ | skipping to change at page 17, line 22 ¶ | |||
| DODAG root MUST force it to zero when passing the packet out to the | DODAG root MUST force it to zero when passing the packet out to the | |||
| Internet. The Internet will therefore not see any SenderRank | Internet. The Internet will therefore not see any SenderRank | |||
| information. | information. | |||
| Despite being legal to leave the RPI artifact in place, an | Despite being legal to leave the RPI artifact in place, an | |||
| intermediate router that needs to add an extension header (e.g. RH3 | intermediate router that needs to add an extension header (e.g. RH3 | |||
| or RPL Option) MUST still encapsulate the packet in an (additional) | or RPL Option) MUST still encapsulate the packet in an (additional) | |||
| outer IP header. The new header is placed after this new outer IP | outer IP header. The new header is placed after this new outer IP | |||
| header. | header. | |||
| A corollary is that a RH3 or RPL Option can only be removed by an | A corollary is that an RH3 or RPL Option can only be removed by an | |||
| intermediate router if it is placed in an encapsulating IPv6 Header, | intermediate router if it is placed in an encapsulating IPv6 Header, | |||
| which is addressed TO the intermediate router. When it does so, the | which is addressed TO the intermediate router. When it does so, the | |||
| whole encapsulating header must be removed. (A replacement may be | whole encapsulating header must be removed. (A replacement may be | |||
| added). This sometimes can result in outer IP headers being | added). This sometimes can result in outer IP headers being | |||
| addressed to the next hop router using link-local address. | addressed to the next hop router using link-local address. | |||
| Both the RPL Option and the RH3 headers may be modified in very | Both the RPL Option and the RH3 headers may be modified in very | |||
| specific ways by routers on the path of the packet without the need | specific ways by routers on the path of the packet without the need | |||
| to add and remove an encapsulating header. Both headers were | to add and remove an encapsulating header. Both headers were | |||
| designed with this modification in mind, and both the RPL RH3 and the | designed with this modification in mind, and both the RPL RH3 and the | |||
| RPL Option are marked mutable but recoverable: so an IPsec AH | RPL Option are marked mutable but recoverable: so an IPsec AH | |||
| security header can be applied across these headers, but it can not | security header can be applied across these headers, but it can not | |||
| secure the values which mutate. | secure the values which mutate. | |||
| The RPI MUST be present in every single RPL data packet. | The RPI MUST be present in every single RPL data packet. | |||
| Prior to [RFC8138], there was significant interest in removing the | Prior to [RFC8138], there was significant interest in creating an | |||
| RPI for downward flows in non-storing mode. The exception covered a | exception to this rule and removing the RPI for downward flows in | |||
| very small number of cases, and causes significant interoperability | non-storing mode. This exception covered a very small number of | |||
| challenges, yet costed significant code and testing complexity. The | cases, and caused significant interoperability challenges while | |||
| ability to compress the RPI down to three bytes or less removes much | adding significant in the code and tests. The ability to compress | |||
| of the pressure to optimize this any further | the RPI down to three bytes or less removes much of the pressure to | |||
| [I-D.ietf-anima-autonomic-control-plane]. | optimize this any further [I-D.ietf-anima-autonomic-control-plane]. | |||
| 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. | |||
| The uses cases are delineated based on the following requirements: | The uses cases are delineated based on the following requirements: | |||
| The RPIhas to be in every packet that traverses the LLN. | The RPI has to be in every packet that traverses the LLN. | |||
| - Because of the previous requirement, packets from the Internet | - Because of the above requirement, packets from the Internet have | |||
| have to be encapsulated. | to be encapsulated. | |||
| - A Header cannot be inserted or removed on the fly inside an IPv6 | - A Header cannot be inserted or removed on the fly inside an IPv6 | |||
| packet that is being routed. | packet that is being routed. | |||
| - Extension headers may not be added or removed except by the | - Extension headers may not be added or removed except by the | |||
| sender or the receiver. | sender or the receiver. | |||
| - RPI and RH3 headers may be modified by routers on the path of | - RPI and RH3 headers may be modified by routers on the path of | |||
| the packet without the need to add and remove an encapsulating | the packet without the need to add and remove an encapsulating | |||
| header. | header. | |||
| - a RH3 or RPL Option can only be removed by an intermediate | - an RH3 or RPL Option can only be removed by an intermediate | |||
| router if it is placed in an encapsulating IPv6 Header, which is | router if it is placed in an encapsulating IPv6 Header, which is | |||
| addressed to the intermediate router. | addressed to the intermediate router. | |||
| - Non-storing mode requires downstream encapsulation by root for | - Non-storing mode requires downstream encapsulation by root for | |||
| RH3. | RH3. | |||
| The uses cases are delineated based on the following assumptions: | The uses cases are delineated based on the following assumptions: | |||
| This document assumes that the LLN is using the no-drop RPI option | This document assumes that the LLN is using the no-drop RPI Option | |||
| Type (0x23). | Type (0x23). | |||
| - Each IPv6 node (including Internet routers) obeys [RFC8200] RFC | - Each IPv6 node (including Internet routers) obeys [RFC8200], so | |||
| 8200, so that 0x23 RPI option Type can be safely inserted. | that 0x23 RPI Option Type can be safely inserted. | |||
| - All 6LRs obey RFC 8200 [RFC8200]. | - All 6LRs obey [RFC8200]. | |||
| - The RPI is ignored at the IPv6 dst node (RUL). | - The RPI is ignored at the IPv6 dst node (RUL). | |||
| - In the uses cases, we assume that the RAL supports IP-in-IP | - In the uses cases, we assume that the RAL supports IP-in-IP | |||
| encapsulation. | encapsulation. | |||
| - In the uses cases, we dont assume that the RUL supports IP-in-IP | - In the uses cases, we dont assume that the RUL supports IP-in-IP | |||
| encapsulation. | encapsulation. | |||
| - For traffic leaving a RUL, if the RUL adds an opaque RPI then | ||||
| the description of the RAL applies. | ||||
| - The description for RALs applies to RAN in general. | ||||
| - Non-constrained uses of RPL are not in scope of this document. | - Non-constrained uses of RPL are not in scope of this document. | |||
| - Compression is based on [RFC8138]. | - Compression is based on [RFC8138]. | |||
| - The flow label [RFC6437] is not needed in RPL. | - The flow label [RFC6437] is not needed in RPL. | |||
| 7. Storing mode | 7. Storing mode | |||
| In storing mode (SM) (fully stateful), the sender can determine if | In storing mode (SM) (fully stateful), the sender can determine if | |||
| the destination is inside the LLN by looking if the destination | the destination is inside the LLN by looking if the destination | |||
| address is matched by the DIO's Prefix Information Option (PIO) | address is matched by the DIO's Prefix Information Option (PIO) | |||
| option. | option. | |||
| The following table (Figure 7) itemizes which headers are needed in | The following table (Figure 7) itemizes which headers are needed in | |||
| each of the following scenarios. It indicates whether (1) the IPv6- | each of the following scenarios. It indicates whether an IPv6-in- | |||
| in-IPv6 header that is added must be addressed to the final | IPv6 header must be added and what destination it must be addressed | |||
| destination (the RAL node that is the target (tgt)), (2) the IPv6-in- | to: (1) the final destination (the RAL node that is the target | |||
| IPv6 header that is added must be addressed to the "root", or (3) the | (tgt)), (2) the "root", or (3) the 6LR parent of a RUL. | |||
| 6LR parent of a RUL. | ||||
| In cases where no IPv6-in-IPv6 header is needed, the column states as | In cases where no IPv6-in-IPv6 header is needed, the column states as | |||
| "No". If the IPv6-in-IPv6 header is needed is a "must". | "No". If the IPv6-in-IPv6 header is needed, the column shows "must". | |||
| In all cases the RPI is needed, since it identifies inconsistencies | In all cases, the RPI is needed, since it identifies inconsistencies | |||
| (loops) in the routing topology. In all cases the RH3 is not needed | (loops) in the routing topology. In all cases, the RH3 is not needed | |||
| because it is not used in storing mode. | because it is not used in storing mode. | |||
| In each case, 6LR_i represents the intermediate routers from source | ||||
| to destination. "1 <= i <= n", n is the number of routers (6LR) that | ||||
| the packet goes through from source (6LN) to destination. | ||||
| The leaf can be a router 6LR or a host, both indicated as 6LN. The | The leaf can be a router 6LR or a host, both indicated as 6LN. The | |||
| root refers to the 6LBR (see Figure 6). | root refers to the 6LBR (see Figure 6). | |||
| +---------------------+--------------+------------+----------------+ | +---------------------+--------------+------------+----------------+ | |||
| | Interaction between | Use Case |IPv6-in-IPv6|IPv6-in-IPv6 dst| | | Interaction between | Use Case |IPv6-in-IPv6|IPv6-in-IPv6 dst| | |||
| +---------------------+--------------+------------+----------------+ | +---------------------+--------------+------------+----------------+ | |||
| | | RAL to root | No | No | | | | RAL to root | No | No | | |||
| + +--------------+------------+----------------+ | + +--------------+------------+----------------+ | |||
| | Leaf - Root | root to RAL | No | No | | | Leaf - Root | root to RAL | No | No | | |||
| + +--------------+------------+----------------+ | + +--------------+------------+----------------+ | |||
| | | root to RUL | No | No | | | | root to RUL | must | 6LR | | |||
| + +--------------+------------+----------------+ | + +--------------+------------+----------------+ | |||
| | | RUL to root | must | root | | | | RUL to root | must | root | | |||
| +---------------------+--------------+------------+----------------+ | +---------------------+--------------+------------+----------------+ | |||
| | | RAL to Int | No | No | | | | RAL to Int | may | root | | |||
| + +--------------+------------+----------------+ | + +--------------+------------+----------------+ | |||
| | Leaf - Internet | Int to RAL | must | RAL (tgt) | | | Leaf - Internet | Int to RAL | must | RAL (tgt) | | |||
| + +--------------+------------+----------------+ | + +--------------+------------+----------------+ | |||
| | | RUL to Int | must | root | | | | RUL to Int | must | root | | |||
| + +--------------+------------+----------------+ | + +--------------+------------+----------------+ | |||
| | | Int to RUL | must | 6LR | | | | Int to RUL | must | 6LR | | |||
| +---------------------+--------------+------------+----------------+ | +---------------------+--------------+------------+----------------+ | |||
| | | RAL to RAL | No | No | | | | RAL to RAL | No | No | | |||
| + +--------------+------------+----------------+ | | Leaf - Leaf +--------------+------------+----------------+ | |||
| | | RAL to RUL | No | No | | | | RAL to RUL | must(down) | 6LR | | |||
| + Leaf - Leaf +--------------+------------+----------------+ | | +--------------+------------+----------------+ | |||
| | | RUL to RAL | must | root | | | | RUL to RAL | must(up) | root | | |||
| + +--------------+------------+----------------+ | | | +------------+----------------+ | |||
| | | RUL to RUL | must | root | | | | | must(down) | RAL | | |||
| +---------------------+--------------+------------+----------------+ | | +--------------+------------+----------------+ | |||
| | | RUL to RUL | must(up) | root | | ||||
| | | +------------+----------------+ | ||||
| | | | must(down) | 6LR | | ||||
| |---------------------+--------------+------------+----------------+ | ||||
| Figure 7: Table of IPv6-in-IPv6 encapsulation in Storing mode. | Figure 7: Table of IPv6-in-IPv6 encapsulation in Storing mode. | |||
| 7.1. Storing Mode: Interaction between Leaf and Root | 7.1. Storing Mode: Interaction between Leaf and Root | |||
| In this section is described the communication flow in storing mode | In this section is described the communication flow in storing mode | |||
| (SM) between, | (SM) between, | |||
| RAL to root | RAL to root | |||
| skipping to change at page 22, line 25 ¶ | skipping to change at page 22, line 31 ¶ | |||
| Table 2: SM: Summary of the use of headers from root to RAL | Table 2: SM: Summary of the use of headers from root to RAL | |||
| 7.1.3. SM: Example of Flow from root to RUL | 7.1.3. SM: Example of Flow from root to RUL | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| root (6LBR) --> 6LR_i --> RUL (IPv6 dst node) | root (6LBR) --> 6LR_i --> RUL (IPv6 dst node) | |||
| For example, a communication flow could be: Node A (6LBR) --> Node B | For example, a communication flow could be: Node A (6LBR) --> Node B | |||
| (6LR_i) --> Node E (6LR_i) --> Node G (RUL) | (6LR_i) --> Node E (6LR_n) --> Node G (RUL) | |||
| As the RPI extension can be ignored by the RUL, this situation is | 6LR_i (Node B) represents the intermediate routers from the source | |||
| identical to the previous scenario. | (6LBR) to the destination (RUL), 1 <= i <= n, where n is the total | |||
| number of routers (6LR) that the packet goes through from the 6LBR | ||||
| (Node A) to the RUL (Node G). | ||||
| The Table 3 summarizes what headers are needed for this use case. | The 6LBR will insert an RPI, encapsulated in a IPv6-in-IPv6 header. | |||
| The IPv6-in-IPv6 header is addressed to the 6LR parent of the RUL | ||||
| (6LR_n). The 6LR parent of the RUL removes the header and sends the | ||||
| packet to the RUL. | ||||
| +-------------------+----------+-------+----------------------+ | The Figure 8 summarizes what headers are needed for this use case. | |||
| | Header | 6LBR src | 6LR_i | RUL (IPv6 dst node) | | ||||
| +-------------------+----------+-------+----------------------+ | ||||
| | Added headers | RPI | -- | -- | | ||||
| | Modified headers | -- | RPI | -- | | ||||
| | Removed headers | -- | -- | -- | | ||||
| | Untouched headers | -- | -- | RPI (Ignored) | | ||||
| +-------------------+----------+-------+----------------------+ | ||||
| Table 3: SM: Summary of the use of headers from root to RUL | +-----------+---------+---------+---------+-----+ | |||
| | Header | 6LBR | 6LR_i | 6LR_n | RUL | | ||||
| | | src | | | dst | | ||||
| +-----------+---------+---------+---------+-----+ | ||||
| | Added | IP6-IP6 | -- | -- | -- | | ||||
| | headers | (RPI) | | | | | ||||
| +-----------+---------+---------+---------+-----+ | ||||
| | Modified | -- | IP6-IP6 | -- | -- | | ||||
| | headers | | (RPI) | | | | ||||
| +-----------+---------+---------+---------+-----+ | ||||
| | Removed | -- | -- | IP6-IP6 | -- | | ||||
| | headers | | | (RPI) | | | ||||
| +-----------+---------+---------+---------+-----+ | ||||
| | Untouched | -- | -- | -- | -- | | ||||
| | headers | | | | | | ||||
| +-----------+---------+---------+---------+-----+ | ||||
| Figure 8: SM: Summary of the use of headers from root to RUL | ||||
| 7.1.4. SM: Example of Flow from RUL to root | 7.1.4. SM: Example of Flow from RUL to root | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| RUL (IPv6 src node) --> 6LR_1 --> 6LR_i --> root (6LBR) | RUL (IPv6 src node) --> 6LR_1 --> 6LR_i --> root (6LBR) | |||
| For example, a communication flow could be: Node G (RUL) --> Node E | For example, a communication flow could be: Node G (RUL) --> Node E | |||
| (6LR_1)--> Node B (6LR_i)--> Node A root(6LBR) | (6LR_1)--> Node B (6LR_i)--> Node A root(6LBR) | |||
| 6LR_i represents the intermediate routers from the source (RUL) to | ||||
| the destination (6LBR), 1 <= i <= n, where n is the total number of | ||||
| routers (6LR) that the packet goes through from the RUL to the 6LBR. | ||||
| When the packet arrives from IPv6 node (Node G) to 6LR_1 (Node E), | When the packet arrives from IPv6 node (Node G) to 6LR_1 (Node E), | |||
| the 6LR_1 will insert a RPI, encapsulated in a IPv6-in-IPv6 header. | the 6LR_1 will insert an RPI, encapsulated in a IPv6-in-IPv6 header. | |||
| The IPv6-in-IPv6 header is addressed to the root (Node A). The root | The IPv6-in-IPv6 header is addressed to the root (Node A). The root | |||
| removes the header and processes the packet. | removes the header and processes the packet. | |||
| The Figure 8 shows the table that summarizes what headers are needed | The Figure 9 shows the table that summarizes what headers are needed | |||
| for this use case where the IPv6-in-IPv6 header is addressed to the | for this use case where the IPv6-in-IPv6 header is addressed to the | |||
| root (Node A). | root (Node A). | |||
| +-----------+------+--------------+----------------+-----------------+ | +-----------+------+--------------+----------------+-----------------+ | |||
| | Header | RUL | 6LR_1 | 6LR_i | 6LBR dst | | | Header | RUL | 6LR_1 | 6LR_i | 6LBR dst | | |||
| | | src | | | | | | | src | | | | | |||
| | | node | | | | | | | node | | | | | |||
| +-----------+------+--------------+----------------+-----------------+ | +-----------+------+--------------+----------------+-----------------+ | |||
| | Added | -- | IP6-IP6(RPI) | | -- | | | Added | -- | IP6-IP6(RPI) | | -- | | |||
| | headers | | | -- | | | | headers | | | -- | | | |||
| skipping to change at page 23, line 31 ¶ | skipping to change at page 24, line 23 ¶ | |||
| | Modified | -- | -- | IP6-IP6(RPI) | -- | | | Modified | -- | -- | IP6-IP6(RPI) | -- | | |||
| | headers | | | | | | | headers | | | | | | |||
| +-----------+------+--------------+----------------+-----------------+ | +-----------+------+--------------+----------------+-----------------+ | |||
| | Removed | -- | -- | --- | IP6-IP6(RPI) | | | Removed | -- | -- | --- | IP6-IP6(RPI) | | |||
| | headers | | | | | | | headers | | | | | | |||
| +-----------+------+--------------+----------------+-----------------+ | +-----------+------+--------------+----------------+-----------------+ | |||
| | Untouched | -- | -- | -- | -- | | | Untouched | -- | -- | -- | -- | | |||
| | headers | | | | | | | headers | | | | | | |||
| +-----------+------+--------------+----------------+-----------------+ | +-----------+------+--------------+----------------+-----------------+ | |||
| Figure 8: SM: Summary of the use of headers from RUL to root. | Figure 9: SM: Summary of the use of headers from RUL to root. | |||
| 7.2. SM: Interaction between Leaf and Internet. | 7.2. SM: Interaction between Leaf and Internet. | |||
| In this section is described the communication flow in storing mode | In this section is described the communication flow in storing mode | |||
| (SM) between, | (SM) between, | |||
| RAL to Internet | RAL to Internet | |||
| Internet to RAL | Internet to RAL | |||
| RUL to Internet | RUL to Internet | |||
| Internet to RUL | Internet to RUL | |||
| 7.2.1. SM: Example of Flow from RAL to Internet | 7.2.1. SM: Example of Flow from RAL to Internet | |||
| 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. | ||||
| In this case the flow comprises: | In this case the flow comprises: | |||
| RAL (6LN) --> 6LR_i --> root (6LBR) --> Internet | RAL (6LN) --> 6LR_i --> root (6LBR) --> Internet | |||
| For example, the communication flow could be: Node F (RAL) --> Node D | For example, the communication flow could be: Node F (RAL) --> Node D | |||
| (6LR_i)--> Node B (6LR_i)--> Node A root(6LBR) --> Internet | (6LR_i)--> Node B (6LR_i)--> Node A root(6LBR) --> Internet | |||
| 6LR_i represents the intermediate routers from the source (RAL) to | ||||
| the root (6LBR), 1 <= i <= n, where n is the total number of routers | ||||
| (6LR) that the packet goes through from the RAL to the 6LBR. | ||||
| 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. No | ||||
| IPv6-in-IPv6 header is required. | ||||
| On the other hand, the RAL may insert the RPI encapsulated in a IPv6- | ||||
| in-IPv6 header to the root. Thus, the root removes the RPI and send | ||||
| the packet to the Internet. | ||||
| No IPv6-in-IPv6 header is required. | No IPv6-in-IPv6 header is required. | |||
| Note: In this use case, it is used a node as a leaf, but this use | Note: In this use case, it is used a node as a leaf, but this use | |||
| case can be also applicable to any RPL-aware-node type (e.g. 6LR) | case can be also applicable to any RPL-aware-node type (e.g. 6LR) | |||
| The Table 4 summarizes what headers are needed for this use case. | The Table 3 summarizes what headers are needed for this use case when | |||
| there is no encapsulation. The Figure 10 summarizes what headers are | ||||
| needed when encapsulation to the root takes place. | ||||
| +-------------------+---------+-------+------+----------------+ | +-------------------+---------+-------+------+----------------+ | |||
| | Header | RAL src | 6LR_i | 6LBR | Internet dst | | | Header | RAL src | 6LR_i | 6LBR | Internet dst | | |||
| +-------------------+---------+-------+------+----------------+ | +-------------------+---------+-------+------+----------------+ | |||
| | Added headers | RPI | -- | -- | -- | | | Added headers | RPI | -- | -- | -- | | |||
| | Modified headers | -- | RPI | -- | -- | | | Modified headers | -- | RPI | -- | -- | | |||
| | Removed headers | -- | -- | -- | -- | | | Removed headers | -- | -- | -- | -- | | |||
| | Untouched headers | -- | -- | RPI | RPI (Ignored) | | | Untouched headers | -- | -- | RPI | RPI (Ignored) | | |||
| +-------------------+---------+-------+------+----------------+ | +-------------------+---------+-------+------+----------------+ | |||
| Table 4: SM: Summary of the use of headers from RAL to Internet | Table 3: SM: Summary of the use of headers from RAL to Internet with | |||
| no encapsulation | ||||
| +-----------+----------+--------------+--------------+--------------+ | ||||
| | Header | RAL | 6LR_i | 6LBR | Internet dst | | ||||
| | | src | | | | | ||||
| +-----------+----------+--------------+--------------+--------------+ | ||||
| | Added |IP6-IP6 | -- | -- | -- | | ||||
| | headers | (RPI) | | | | | ||||
| +-----------+----------+--------------+--------------+--------------+ | ||||
| | Modified | -- |IP6-IP6(RPI) | -- | -- | | ||||
| | headers | | | | | | ||||
| +-----------+----------+--------------+--------------+--------------+ | ||||
| | Removed | -- | -- |IP6-IP6(RPI) | -- | | ||||
| | headers | | | | | | ||||
| +-----------+----------+--------------+--------------+--------------+ | ||||
| | Untouched | -- | -- | -- | -- | | ||||
| | headers | | | | | | ||||
| +-----------+----------+--------------+--------------+--------------+ | ||||
| Figure 10: SM: Summary of the use of headers from RAL to Internet | ||||
| with encapsulation to the root (6LBR). | ||||
| 7.2.2. SM: Example of Flow from Internet to RAL | 7.2.2. SM: Example of Flow from Internet to RAL | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| Internet --> root (6LBR) --> 6LR_i --> RAL (6LN) | Internet --> root (6LBR) --> 6LR_i --> RAL (6LN) | |||
| For example, a communication flow could be: Internet --> Node A | For example, a communication flow could be: Internet --> Node A | |||
| root(6LBR) --> Node B (6LR_1) --> Node D (6LR_n) --> Node F (RAL) | root(6LBR) --> Node B (6LR_1) --> Node D (6LR_n) --> Node F (RAL) | |||
| When the packet arrives from Internet to 6LBR the RPI is added in a | When the packet arrives from Internet to 6LBR the RPI is added in a | |||
| outer IPv6-in-IPv6 header (with the IPv6-in-IPv6 destination address | outer IPv6-in-IPv6 header (with the IPv6-in-IPv6 destination address | |||
| set to the RAL) and sent to 6LR, which modifies the rank in the RPI. | set to the RAL) and sent to 6LR, which modifies the rank in the RPI. | |||
| When the packet arrives at the RAL the RPI is removed and the packet | When the packet arrives at the RAL the RPI is removed and the packet | |||
| processed. | processed. | |||
| The Figure 9 shows the table that summarizes what headers are needed | The Figure 11 shows the table that summarizes what headers are needed | |||
| for this use case. | for this use case. | |||
| +-----------+----------+--------------+--------------+--------------+ | +-----------+----------+--------------+--------------+--------------+ | |||
| | Header | Internet | 6LBR | 6LR_i | RAL dst | | | Header | Internet | 6LBR | 6LR_i | RAL dst | | |||
| | | src | | | | | | | src | | | | | |||
| +-----------+----------+--------------+--------------+--------------+ | +-----------+----------+--------------+--------------+--------------+ | |||
| | Added | -- | IP6-IP6(RPI) | -- | -- | | | Added | -- | IP6-IP6(RPI) | -- | -- | | |||
| | headers | | | | | | | headers | | | | | | |||
| +-----------+----------+--------------+--------------+--------------+ | +-----------+----------+--------------+--------------+--------------+ | |||
| | Modified | -- | -- | IP6-IP6(RPI) | -- | | | Modified | -- | -- | IP6-IP6(RPI) | -- | | |||
| | headers | | | | | | | headers | | | | | | |||
| +-----------+----------+--------------+--------------+--------------+ | +-----------+----------+--------------+--------------+--------------+ | |||
| | Removed | -- | -- | -- | IP6-IP6(RPI) | | | Removed | -- | -- | -- | IP6-IP6(RPI) | | |||
| | headers | | | | | | | headers | | | | | | |||
| +-----------+----------+--------------+--------------+--------------+ | +-----------+----------+--------------+--------------+--------------+ | |||
| | Untouched | -- | -- | -- | -- | | | Untouched | -- | -- | -- | -- | | |||
| | headers | | | | | | | headers | | | | | | |||
| +-----------+----------+--------------+--------------+--------------+ | +-----------+----------+--------------+--------------+--------------+ | |||
| Figure 9: SM: Summary of the use of headers from Internet to RAL. | Figure 11: SM: Summary of the use of headers from Internet to RAL. | |||
| 7.2.3. SM: Example of Flow from RUL to Internet | 7.2.3. SM: Example of Flow from RUL to Internet | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| RUL (IPv6 src node) --> 6LR_1 --> 6LR_i -->root (6LBR) --> Internet | RUL (IPv6 src node) --> 6LR_1 --> 6LR_i -->root (6LBR) --> Internet | |||
| For example, a communication flow could be: Node G (RUL)--> Node E | For example, a communication flow could be: Node G (RUL)--> Node E | |||
| (6LR_1)--> Node B (6lR_i) --> Node A root(6LBR) --> Internet | (6LR_1)--> Node B (6lR_i) --> Node A root(6LBR) --> Internet | |||
| The node 6LR_1 (i=1) will add an IPv6-in-IPv6(RPI) header addressed | The node 6LR_1 (i=1) will add an IPv6-in-IPv6(RPI) header addressed | |||
| to the root such that the root can remove the RPI before passing | to the root such that the root can remove the RPI before passing | |||
| upwards. The IPv6-in-IPv6 addressed to the root cause less | upwards. In the intermediate 6LR, the rank in the RPI is modified. | |||
| processing overhead. In the intermindiate 6LR the rank in the RPI is | ||||
| modified. | ||||
| 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 | |||
| 6LBR will set the flow label of the packet to a non-zero value when | 6LBR will set the flow label of the packet to a non-zero value when | |||
| sending to the Internet, for details check [RFC6437]. | sending to the Internet, for details check [RFC6437]. | |||
| The Figure 10 shows the table that summarizes what headers are needed | The Figure 12 shows the table that summarizes what headers are needed | |||
| for this use case. | for this use case. | |||
| +---------+-------+------------+-------------+-------------+--------+ | +---------+-------+------------+-------------+-------------+--------+ | |||
| | Header | IPv6 | 6LR_1 | 6LR_i | 6LBR |Internet| | | Header | IPv6 | 6LR_1 | 6LR_i | 6LBR |Internet| | |||
| | | src | | [i=2,...,n] | | dst | | | | src | | [i=2,...,n] | | dst | | |||
| | | node | | | | | | | | node | | | | | | |||
| | | (RUL) | | | | | | | | (RUL) | | | | | | |||
| +---------+-------+------------+-------------+-------------+--------+ | +---------+-------+------------+-------------+-------------+--------+ | |||
| | Added | -- |IP6-IP6(RPI)| -- | -- | -- | | | Added | -- |IP6-IP6(RPI)| -- | -- | -- | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| skipping to change at page 26, line 24 ¶ | skipping to change at page 27, line 35 ¶ | |||
| | Modified| -- | -- |IP6-IP6(RPI) | -- | -- | | | Modified| -- | -- |IP6-IP6(RPI) | -- | -- | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| +---------+-------+------------+-------------+-------------+--------+ | +---------+-------+------------+-------------+-------------+--------+ | |||
| | Removed | -- | -- | -- | IP6-IP6(RPI)| -- | | | Removed | -- | -- | -- | IP6-IP6(RPI)| -- | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| +---------+-------+------------+-------------+-------------+--------+ | +---------+-------+------------+-------------+-------------+--------+ | |||
| |Untouched| -- | -- | -- | -- | -- | | |Untouched| -- | -- | -- | -- | -- | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| +---------+-------+------------+-------------+-------------+--------+ | +---------+-------+------------+-------------+-------------+--------+ | |||
| Figure 10: SM: Summary of the use of headers from RUL to Internet. | Figure 12: SM: Summary of the use of headers from RUL to Internet. | |||
| 7.2.4. SM: Example of Flow from Internet to RUL. | 7.2.4. SM: Example of Flow from Internet to RUL. | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| Internet --> root (6LBR) --> 6LR_i --> RUL (IPv6 dst node) | Internet --> root (6LBR) --> 6LR_i --> RUL (IPv6 dst node) | |||
| For example, a communication flow could be: Internet --> Node A | For example, a communication flow could be: Internet --> Node A | |||
| root(6LBR) --> Node B (6LR_i)--> Node E (6LR_n) --> Node G (RUL) | root(6LBR) --> Node B (6LR_i)--> Node E (6LR_n) --> Node G (RUL) | |||
| The 6LBR will have to add a RPI within an IPv6-in-IPv6 header. The | The 6LBR will have to add an RPI within an IPv6-in-IPv6 header. The | |||
| IPv6-in-IPv6 is addressed to the 6LR parent of the RUL. | IPv6-in-IPv6 is addressed to the 6LR parent of the RUL. | |||
| Further details about this are mentioned in | Further details about this are mentioned in | |||
| [I-D.ietf-roll-unaware-leaves], which specifies RPL routing for a 6LN | [I-D.ietf-roll-unaware-leaves], which specifies RPL routing for a 6LN | |||
| acting as a plain host and not being aware of RPL. | acting as a plain host and not being aware of RPL. | |||
| The 6LBR may set the flow label on the inner IPv6-in-IPv6 header to | The 6LBR may set the flow label on the inner IPv6-in-IPv6 header to | |||
| zero in order to aid in compression [RFC8138][RFC6437]. | zero in order to aid in compression [RFC8138][RFC6437]. | |||
| The Figure 11 shows the table that summarizes what headers are needed | The Figure 13 shows the table that summarizes what headers are needed | |||
| for this use case. | for this use case. | |||
| +---------+-------+------------+--------------+-------------+-------+ | +---------+-------+------------+--------------+-------------+-------+ | |||
| | Header |Inter- | 6LBR | 6LR_i | 6LR_n | RUL | | | Header |Inter- | 6LBR | 6LR_i | 6LR_n | RUL | | |||
| | | net | |[i=1,..,n-1] | | dst | | | | net | |[i=1,..,n-1] | | dst | | |||
| | | src | | | | | | | | src | | | | | | |||
| | | | | | | | | | | | | | | | | |||
| +---------+-------+------------+--------------+-------------+-------+ | +---------+-------+------------+--------------+-------------+-------+ | |||
| | Inserted| -- |IP6-IP6(RPI)| -- | -- | -- | | | Inserted| -- |IP6-IP6(RPI)| -- | -- | -- | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| skipping to change at page 27, line 24 ¶ | skipping to change at page 28, line 30 ¶ | |||
| | Modified| -- | -- | IP6-IP6(RPI) | -- | -- | | | Modified| -- | -- | IP6-IP6(RPI) | -- | -- | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| +---------+-------+------------+--------------+-------------+-------+ | +---------+-------+------------+--------------+-------------+-------+ | |||
| | Removed | -- | -- | -- | IP6-IP6(RPI)| -- | | | Removed | -- | -- | -- | IP6-IP6(RPI)| -- | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| +---------+-------+------------+--------------+-------------+-------+ | +---------+-------+------------+--------------+-------------+-------+ | |||
| |Untouched| -- | -- | -- | -- | -- | | |Untouched| -- | -- | -- | -- | -- | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| +---------+-------+------------+--------------+-------------+-------+ | +---------+-------+------------+--------------+-------------+-------+ | |||
| Figure 11: SM: Summary of the use of headers from Internet to RUL. | Figure 13: SM: Summary of the use of headers from Internet to RUL. | |||
| 7.3. SM: Interaction between Leaf and Leaf | 7.3. SM: Interaction between Leaf and Leaf | |||
| In this section is described the communication flow in storing mode | In this section is described the communication flow in storing mode | |||
| (SM) between, | (SM) between, | |||
| RAL to RAL | RAL to RAL | |||
| RAL to RUL | RAL to RUL | |||
| skipping to change at page 28, line 4 ¶ | skipping to change at page 29, line 10 ¶ | |||
| 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. See section 9 in | to a one-hop neighbor directly to that node. See section 9 in | |||
| [RFC6550]. | [RFC6550]. | |||
| When the nodes are not directly connected, then in storing mode, the | When the nodes are not directly connected, then in storing mode, the | |||
| flow comprises: | flow comprises: | |||
| RAL src (6LN) --> 6LR_ia --> common parent (6LR_x) --> 6LR_id --> RAL | RAL src (6LN) --> 6LR_ia --> common parent (6LR_x) --> 6LR_id --> RAL | |||
| dst (6LN) | dst (6LN) | |||
| For example, a communication flow could be: Node F (RAL src)--> Node | For example, a communication flow could be: Node F (RAL src)--> Node | |||
| D (6LR_ia)--> Node B (6LR_x) --> Node E (6LR_id) --> Node H (RAL dst) | D (6LR_ia)--> Node B (6LR_x) --> Node E (6LR_id) --> Node H (RAL dst) | |||
| 6LR_ia (Node D) represents the intermediate routers from source to | 6LR_ia (Node D) represents the intermediate routers from source to | |||
| the common parent (6LR_x) (Node B). In this case, 1 <= ia <= n, n is | the common parent (6LR_x) (Node B), 1 <= ia <= n, where n is the | |||
| the number of routers (6LR) that the packet goes through from RAL | total number of routers (6LR) that the packet goes through from RAL | |||
| (Node F) to the common parent 6LR_x (Node B). | (Node F) to the common parent 6LR_x (Node B). | |||
| 6LR_id (Node E) represents the intermediate routers from the common | 6LR_id (Node E) represents the intermediate routers from the common | |||
| parent (6LR_x) (Node B) to destination RAL (Node H). In this case, 1 | parent (6LR_x) (Node B) to destination RAL (Node H), 1 <= id <= m, | |||
| <= id <= m, m is the number of routers (6LR) that the packet goes | where m is the total number of routers (6LR) that the packet goes | |||
| through from the common parent (6LR_x) to destination RAL (Node H). | through from the common parent (6LR_x) to destination RAL (Node H). | |||
| It is assumed that the two nodes are in the same RPL domain (that | It is assumed that the two nodes are in the same RPL domain (that | |||
| they share the same DODAG root). At the common parent (Node B), the | they share the same DODAG root). At the common parent (Node B), the | |||
| direction of RPI is changed (from decreasing to increasing the rank). | direction flag ('O' flag) of the RPI is changed (from decreasing | |||
| ranks to increasing ranks). | ||||
| 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 IPv6-in-IPv6 headers are necessary. | remove the RPI, so no IPv6-in-IPv6 headers are necessary. | |||
| The Table 5 summarizes what headers are needed for this use case. | The Table 4 summarizes what headers are needed for this use case. | |||
| +---------------+--------+--------+---------------+--------+--------+ | +---------------+--------+--------+---------------+--------+--------+ | |||
| | Header | RAL | 6LR_ia | 6LR_x (common | 6LR_id | RAL | | | Header | RAL | 6LR_ia | 6LR_x (common | 6LR_id | RAL | | |||
| | | src | | parent) | | dst | | | | src | | parent) | | dst | | |||
| +---------------+--------+--------+---------------+--------+--------+ | +---------------+--------+--------+---------------+--------+--------+ | |||
| | Added headers | RPI | -- | -- | -- | -- | | | Added headers | RPI | -- | -- | -- | -- | | |||
| | Modified | -- | RPI | RPI | RPI | -- | | | Modified | -- | RPI | RPI | RPI | -- | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| | Removed | -- | -- | -- | -- | RPI | | | Removed | -- | -- | -- | -- | RPI | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| | Untouched | -- | -- | -- | -- | -- | | | Untouched | -- | -- | -- | -- | -- | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| +---------------+--------+--------+---------------+--------+--------+ | +---------------+--------+--------+---------------+--------+--------+ | |||
| Table 5: SM: Summary of the Use of Headers from RAL to RAL | Table 4: SM: Summary of the Use of Headers from RAL to RAL | |||
| 7.3.2. SM: Example of Flow from RAL to RUL | 7.3.2. SM: Example of Flow from RAL to RUL | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| RAL src (6LN) --> 6LR_ia --> common parent (6LR_x) --> 6LR_id --> RUL | RAL src (6LN) --> 6LR_ia --> common parent (6LR_x) --> 6LR_id --> RUL | |||
| (IPv6 dst node) | (IPv6 dst node) | |||
| For example, a communication flow could be: Node F (RAL)--> Node D | For example, a communication flow could be: Node F (RAL)--> Node D | |||
| --> Node B --> Node E --> Node G (RUL) | --> Node B --> Node E --> Node G (RUL) | |||
| skipping to change at page 29, line 4 ¶ | skipping to change at page 30, line 14 ¶ | |||
| 7.3.2. SM: Example of Flow from RAL to RUL | 7.3.2. SM: Example of Flow from RAL to RUL | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| RAL src (6LN) --> 6LR_ia --> common parent (6LR_x) --> 6LR_id --> RUL | RAL src (6LN) --> 6LR_ia --> common parent (6LR_x) --> 6LR_id --> RUL | |||
| (IPv6 dst node) | (IPv6 dst node) | |||
| For example, a communication flow could be: Node F (RAL)--> Node D | For example, a communication flow could be: Node F (RAL)--> Node D | |||
| --> Node B --> Node E --> Node G (RUL) | --> Node B --> Node E --> Node G (RUL) | |||
| 6LR_ia represents the intermediate routers from source (RAL) to the | 6LR_ia represents the intermediate routers from source (RAL) to the | |||
| common parent (6LR_x) In this case, 1 <= ia <= n, n is the number of | common parent (6LR_x), 1 <= ia <= n, where n is the total number of | |||
| routers (6LR) that the packet goes through from RAL to the common | routers (6LR) that the packet goes through from RAL to the common | |||
| parent (6LR_x). | parent (6LR_x). | |||
| 6LR_id (Node E) represents the intermediate routers from the common | 6LR_id (Node E) represents the intermediate routers from the common | |||
| parent (6LR_x) (Node B) to destination RUL (Node G). In this case, 1 | parent (6LR_x) (Node B) to destination RUL (Node G). In this case, 1 | |||
| <= id <= m, m is the number of routers (6LR) that the packet goes | <= id <= m, where m is the total number of routers (6LR) that the | |||
| through from the common parent (6LR_x) to destination RUL. The | packet goes through from the common parent (6LR_x) to destination | |||
| packet from the RAL goes to 6LBR because the route to the RUL is not | RUL. | |||
| injected into the RPL-SM. | ||||
| The Table 6 summarizes what headers are needed for this use case. | In this case, the packet from the RAL goes to 6LBR because the route | |||
| to the RUL is not injected into the RPL-SM. Thus, the RAL inserts an | ||||
| RPI (RPI1) addressed to the root(6LBR). The root removes the RPI1 | ||||
| and inserts an RPI2 encapsulated to the 6LR parent of the RUL, which | ||||
| removes the RPI2 before pasing the packet to the RUL. | ||||
| +-----------------+---------+--------+------+--------+--------------+ | The Figure 14 summarizes what headers are needed for this use case. | |||
| | Header | RAL src | 6LR_ia | 6LBR | 6LR_id | RUL dst | | ||||
| +-----------------+---------+--------+------+--------+--------------+ | ||||
| | Added headers | RPI | -- | -- | -- | -- | | ||||
| | Modified | -- | RPI | RPI | RPI | -- | | ||||
| | headers | | | | | | | ||||
| | Removed headers | -- | -- | -- | -- | -- | | ||||
| | Untouched | -- | -- | -- | -- | RPI(Ignored) | | ||||
| | headers | | | | | | | ||||
| +-----------------+---------+--------+------+--------+--------------+ | ||||
| Table 6: SM: Summary of the Use of Headers from RAL to RUL | +-----------+---------+---------+---------+---------+---------+------+ | |||
| | Header | RAL | 6LR_ia | 6LBR | 6LR_id | 6LR_m | RUL | | ||||
| | | src | | | | | dst | | ||||
| | | node | | | | | node | | ||||
| +-----------+---------+---------+---------+---------+---------+------+ | ||||
| | Added | | | IP6-IP6 | -- | -- | -- | | ||||
| | headers | RPI1 | -- | (RPI2) | | | | | ||||
| | | | | | | | | | ||||
| +-----------+---------+---------+---------+---------+---------+------+ | ||||
| | Modified | -- | | -- | IP6-IP6 | | -- | | ||||
| | headers | | RPI1 | | (RPI2) | -- | | | ||||
| | | | | | | | | | ||||
| +-----------+---------+---------+---------+---------+---------+------+ | ||||
| | Removed | -- | -- | | -- | IP6-IP6 | -- | | ||||
| | headers | | | RPI1 | | (RPI2) | | | ||||
| | | | | | | | | | ||||
| +-----------+---------+---------+---------+---------+---------+------+ | ||||
| | Untouched | -- | -- | -- | -- | -- | -- | | ||||
| | headers | | | | | | | | ||||
| +-----------+---------+---------+---------+---------+---------+------+ | ||||
| Figure 14: SM: Summary of the Use of Headers from RAL to RUL | ||||
| 7.3.3. SM: Example of Flow from RUL to RAL | 7.3.3. SM: Example of Flow from RUL to RAL | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| RUL (IPv6 src node) --> 6LR_ia --> 6LBR --> 6LR_id --> RAL dst (6LN) | RUL (IPv6 src node) --> 6LR_ia --> 6LBR --> 6LR_id --> RAL dst (6LN) | |||
| For example, a communication flow could be: Node G (RUL)--> Node E | For example, a communication flow could be: Node G (RUL)--> Node E | |||
| --> Node B --> Node A --> Node B --> Node D --> Node F (RAL) | --> Node B --> Node A --> Node B --> Node D --> Node F (RAL) | |||
| 6LR_ia (Node E) represents the intermediate routers from source (RUL) | 6LR_ia (Node E) represents the intermediate routers from source (RUL) | |||
| (Node G) to the root (Node A). In this case, 1 <= ia <= n, n is the | (Node G) to the root (Node A). In this case, 1 <= ia <= n, where n | |||
| number of routers (6LR) that the packet goes through from source to | is the total number of routers (6LR) that the packet goes through | |||
| the root. | from source to the root. | |||
| 6LR_id represents the intermediate routers from the root (Node A) to | 6LR_id represents the intermediate routers from the root (Node A) to | |||
| destination RAL (Node F). In this case, 1 <= id <= m, m is the | destination RAL (Node F). In this case, 1 <= id <= m, where m is the | |||
| number of routers (6LR) that the packet goes through from the root to | total number of routers (6LR) that the packet goes through from the | |||
| the destination RAL. | root to the destination RAL. | |||
| The 6LR_ia (ia=1) (Node E) receives the packet from the RUL (Node G) | The 6LR_ia (ia=1) (Node E) receives the packet from the RUL (Node G) | |||
| and inserts the RPI (RPI1) encapsulated in a IPv6-in-IPv6 header to | and inserts the RPI (RPI1) encapsulated in a IPv6-in-IPv6 header to | |||
| the root. The root removes the outer header including the RPI (RPI1) | the root. The root removes the outer header including the RPI (RPI1) | |||
| and inserts a new RPI (RPI2) addressed to the destination RAL (Node | and inserts a new RPI (RPI2) addressed to the destination RAL (Node | |||
| F). | F). | |||
| The Figure 12 shows the table that summarizes what headers are needed | The Figure 15 shows the table that summarizes what headers are needed | |||
| for this use case. | for this use case. | |||
| +-----------+------+---------+---------+---------+---------+---------+ | +-----------+------+---------+---------+---------+---------+---------+ | |||
| | Header | RUL | 6LR_1 | 6LR_ia | 6LBR | 6LR_id | RAL | | | Header | RUL | 6LR_1 | 6LR_ia | 6LBR | 6LR_id | RAL | | |||
| | | src | | | | | dst | | | | src | | | | | dst | | |||
| | | node | | | | | node | | | | node | | | | | node | | |||
| +-----------+------+---------+---------+---------+---------+---------+ | +-----------+------+---------+---------+---------+---------+---------+ | |||
| | Added | -- | IP6-IP6 | -- | IP6-IP6 | -- | -- | | | Added | -- | IP6-IP6 | -- | IP6-IP6 | -- | -- | | |||
| | headers | | (RPI1) | | (RPI2) | | | | | headers | | (RPI1) | | (RPI2) | | | | |||
| | | | | | | | | | | | | | | | | | | |||
| skipping to change at page 30, line 32 ¶ | skipping to change at page 32, line 29 ¶ | |||
| | | | | | | | | | | | | | | | | | | |||
| +-----------+------+---------+---------+---------+---------+---------+ | +-----------+------+---------+---------+---------+---------+---------+ | |||
| | Removed | -- | | -- | IP6-IP6 | -- | IP6-IP6 | | | Removed | -- | | -- | IP6-IP6 | -- | IP6-IP6 | | |||
| | headers | | -- | | (RPI1) | | (RPI2) | | | headers | | -- | | (RPI1) | | (RPI2) | | |||
| | | | | | | | | | | | | | | | | | | |||
| +-----------+------+---------+---------+---------+---------+---------+ | +-----------+------+---------+---------+---------+---------+---------+ | |||
| | Untouched | -- | -- | -- | -- | -- | -- | | | Untouched | -- | -- | -- | -- | -- | -- | | |||
| | headers | | | | | | | | | headers | | | | | | | | |||
| +-----------+------+---------+---------+---------+---------+---------+ | +-----------+------+---------+---------+---------+---------+---------+ | |||
| Figure 12: SM: Summary of the use of headers from RUL to RAL. | Figure 15: SM: Summary of the use of headers from RUL to RAL. | |||
| 7.3.4. SM: Example of Flow from RUL to RUL | 7.3.4. SM: Example of Flow from RUL to RUL | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| RUL (IPv6 src node)--> 6LR_1--> 6LR_ia --> 6LBR --> 6LR_id --> RUL | RUL (IPv6 src node)--> 6LR_1--> 6LR_ia --> 6LBR --> 6LR_id --> RUL | |||
| (IPv6 dst node) | (IPv6 dst node) | |||
| For example, a communication flow could be: Node G (RUL src)--> Node | For example, a communication flow could be: Node G (RUL src)--> Node | |||
| E --> Node B --> Node A (root) --> Node C --> Node J (RUL dst) | E --> Node B --> Node A (root) --> Node C --> Node J (RUL dst) | |||
| Internal nodes 6LR_ia (e.g: Node E or Node B) is the intermediate | Internal nodes 6LR_ia (e.g: Node E or Node B) is the intermediate | |||
| router from the RUL source (Node G) to the root (6LBR) (Node A). In | router from the RUL source (Node G) to the root (6LBR) (Node A). In | |||
| this case, 1 <= ia <= n, n is the number of routers (6LR) that the | this case, 1 <= ia <= n, where n is the total number of routers (6LR) | |||
| packet goes through from the RUL to the root. 6LR_1 refers when ia=1. | that the packet goes through from the RUL to the root. 6LR_1 refers | |||
| when ia=1. | ||||
| 6LR_id (Node C) represents the intermediate routers from the root | 6LR_id (Node C) represents the intermediate routers from the root | |||
| (Node A) to the destination RUL dst node (Node J). In this case, 1 | (Node A) to the destination RUL dst node (Node J). In this case, 1 | |||
| <= id <= m, m is the number of routers (6LR) that the packet goes | <= id <= m, where m is the total number of routers (6LR) that the | |||
| through from the root to destination RUL. | packet goes through from the root to destination RUL. | |||
| The RPI is ignored at the RUL dst node. | The RPI is ignored at the RUL dst node. | |||
| The 6LR_1 (Node E) receives the packet from the RUL (Node G) and | The 6LR_1 (Node E) receives the packet from the RUL (Node G) and | |||
| inserts the RPI (RPI), encapsulated in an IPv6-in-IPv6 header | inserts the RPI (RPI), encapsulated in an IPv6-in-IPv6 header | |||
| directed to the root. The root removes the outer header including | directed to the root. The root removes the outer header including | |||
| the RPI (RPI1) and inserts a new RPI (RPI2) addressed to the 6LR | the RPI (RPI1) and inserts a new RPI (RPI2) addressed to the 6LR | |||
| father of the RUL. | father of the RUL. | |||
| The Figure 13 shows the table that summarizes what headers are needed | The Figure 16 shows the table that summarizes what headers are needed | |||
| for this use case. | for this use case. | |||
| +---------+----+-------------+--------+---------+--------+-------+---+ | +---------+----+-------------+--------+---------+--------+-------+---+ | |||
| | Header |RUL | 6LR_1 | 6LR_ia | 6LBR | 6LR_id |6LR_n |RUL| | | Header |RUL | 6LR_1 | 6LR_ia | 6LBR | 6LR_id |6LR_n |RUL| | |||
| | |src | | | | | |dst| | | |src | | | | | |dst| | |||
| | | | | | | | | | | | | | | | | | | | | |||
| +---------+----+-------------+--------+---------+--------+-------+---+ | +---------+----+-------------+--------+---------+--------+-------+---+ | |||
| | Added | -- |IP6-IP6(RPI1)| -- | IP6-IP6 | -- | -- | --| | | Added | -- |IP6-IP6(RPI1)| -- | IP6-IP6 | -- | -- | --| | |||
| | Headers | | | | (RPI2) | | | | | | Headers | | | | (RPI2) | | | | | |||
| +---------+----+-------------+--------+---------+--------+-------+---+ | +---------+----+-------------+--------+---------+--------+-------+---+ | |||
| |Modified | -- | -- |IP6-IP6 | -- |IP6-IP6 | -- | --| | |Modified | -- | -- |IP6-IP6 | -- |IP6-IP6 | -- | --| | |||
| |headers | | | (RPI1) | | (RPI2) | | | | |headers | | | (RPI1) | | (RPI2) | | | | |||
| +---------+----+-------------+--------+---------+--------+-------+---+ | +---------+----+-------------+--------+---------+--------+-------+---+ | |||
| | Removed | -- | -- | -- | IP6-IP6 | -- |IP6-IP6| --| | | Removed | -- | -- | -- | IP6-IP6 | -- |IP6-IP6| --| | |||
| | headers | | | | (RPI1) | | (RPI2)| | | | headers | | | | (RPI1) | | (RPI2)| | | |||
| +---------+----+-------------+--------+---------+--------+-------+---+ | +---------+----+-------------+--------+---------+--------+-------+---+ | |||
| |Untouched| -- | -- | -- | -- | -- | -- | --| | |Untouched| -- | -- | -- | -- | -- | -- | --| | |||
| | headers | | | | | | | | | | headers | | | | | | | | | |||
| +---------+----+-------------+--------+---------+--------+-------+---+ | +---------+----+-------------+--------+---------+--------+-------+---+ | |||
| Figure 13: SM: Summary of the use of headers from RUL to RUL | Figure 16: SM: Summary of the use of headers from RUL to RUL | |||
| 8. Non Storing mode | 8. Non Storing mode | |||
| In Non Storing Mode (Non-SM) (fully source routed), the 6LBR (DODAG | In Non Storing Mode (Non-SM) (fully source routed), the 6LBR (DODAG | |||
| root) has complete knowledge about the connectivity of all DODAG | root) has complete knowledge about the connectivity of all DODAG | |||
| nodes, and all traffic flows through the root node. Thus, there is | nodes, and all traffic flows through the root node. Thus, there is | |||
| no need for all nodes to know about the existence of RPL-unaware | no need for all nodes to know about the existence of RPL-unaware | |||
| nodes. Only the 6LBR needs to act if compensation is necessary for | nodes. Only the 6LBR needs to act if compensation is necessary for | |||
| not-RPL aware receivers. | not-RPL aware receivers. | |||
| The table (Figure 14) summarizes what headers are needed in the | The table (Figure 17) summarizes what headers are needed in the | |||
| following scenarios, and indicates when the RPI, RH3 and IPv6-in-IPv6 | following scenarios, and indicates when the RPI, RH3 and IPv6-in-IPv6 | |||
| header are to be inserted. It depicts the target destination address | header are to be inserted. The last column depicts the target | |||
| possible to a 6LN (indicated by "RAL"), to a 6LR (parent of a RUL) or | destination of the IPv6-in-IPv6 header: 6LN (indicated by "RAL"), 6LR | |||
| to the root. In cases where no IPv6-in-IPv6 header is needed, the | (parent of a RUL) or the root. In cases where no IPv6-in-IPv6 header | |||
| column states as "No". There is no expectation on RPL that RPI can | is needed, the column indicates "No". There is no expectation on RPL | |||
| be omitted, because it is needed for routing, quality of service and | that RPI can be omitted, because it is needed for routing, quality of | |||
| compression. This specification expects that is always a RPI | service and compression. This specification expects that an RPI is | |||
| Present. The term "may(up)" refers that the IPv6-in-IPv6 header may | always present. The term "may(up)" means that the IPv6-in-IPv6 | |||
| be necessary in the upwards direction. The term "must(up)" refers | header may be necessary in the upwards direction. The term | |||
| that the IPv6-in-IPv6 header must be present in the upwards | "must(up)" means that the IPv6-in-IPv6 header must be present in the | |||
| direction. The term "must(down)" refers that the IPv6-in-IPv6 header | upwards direction. The term "must(down)" means that the IPv6-in-IPv6 | |||
| must be present in the downward direction. | header must be present in the downward direction. | |||
| 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 6). In the table (Figure 14) the (1) indicates a 6tisch case | (Figure 6). In the table (Figure 17) the (1) indicates a 6tisch case | |||
| [RFC8180], where the RPI may still be needed for the RPLInstanceID to | [RFC8180], where the RPI may still be needed for the RPLInstanceID to | |||
| be available for priority/channel selection at each hop. | be available for priority/channel selection at each hop. | |||
| The root always have to encapuslate on the way down | The root always have to encapuslate on the way down | |||
| +--- ------------+-------------+-----+-----+--------------+----------+ | +--- ------------+-------------+-----+-----+--------------+----------+ | |||
| | Interaction | Use Case | RPI | RH3 | IPv6-in-IPv6 | IP-in-IP | | | Interaction | Use Case | RPI | RH3 | IPv6-in-IPv6 | IP-in-IP | | |||
| | between | | | | | dst | | | between | | | | | dst | | |||
| +----------------+-------------+-----+-----+--------------+----------+ | +----------------+-------------+-----+-----+--------------+----------+ | |||
| | | RAL to root | Yes | No | No | No | | | | RAL to root | Yes | No | No | No | | |||
| skipping to change at page 33, line 43 ¶ | skipping to change at page 35, line 43 ¶ | |||
| | +-------------+-----+-----+--------------+----------+ | | +-------------+-----+-----+--------------+----------+ | |||
| | | RUL to RAL | Yes | Yes | must(up) | root | | | | RUL to RAL | Yes | Yes | must(up) | root | | |||
| | | | | +--------------+----------+ | | | | | +--------------+----------+ | |||
| | | | | | must(down) | RAL | | | | | | | must(down) | RAL | | |||
| | +-------------+-----+-----+--------------+----------+ | | +-------------+-----+-----+--------------+----------+ | |||
| | | RUL to RUL | Yes | Yes | must(up) | root | | | | RUL to RUL | Yes | Yes | must(up) | root | | |||
| | | | | +--------------+----------+ | | | | | +--------------+----------+ | |||
| | | | | | must(down) | 6LR | | | | | | | must(down) | 6LR | | |||
| +----------------+-------------+-----+-----+--------------+----------+ | +----------------+-------------+-----+-----+--------------+----------+ | |||
| Figure 14: Table that shows headers needed in Non-Storing mode: RPI, | Figure 17: Table that shows headers needed in Non-Storing mode: RPI, | |||
| RH3, IPv6-in-IPv6 encapsulation. | RH3, IPv6-in-IPv6 encapsulation. | |||
| 8.1. Non-Storing Mode: Interaction between Leaf and Root | 8.1. Non-Storing Mode: Interaction between Leaf and Root | |||
| In this section is described the communication flow in Non Storing | In this section is described the communication flow in Non Storing | |||
| Mode (Non-SM) between, | Mode (Non-SM) between, | |||
| RAL to root | RAL to root | |||
| root to RAL | root to RAL | |||
| skipping to change at page 34, line 22 ¶ | skipping to change at page 36, line 22 ¶ | |||
| 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 must be included since it contains the | traffic to the root. The RPI must be included since it contains the | |||
| rank information, which is used to avoid/detect loops. | rank information, which is used to avoid/detect loops. | |||
| RAL (6LN) --> 6LR_i --> root(6LBR) | RAL (6LN) --> 6LR_i --> root(6LBR) | |||
| For example, a communication flow could be: Node F --> Node D --> | For example, a communication flow could be: Node F --> Node D --> | |||
| Node B --> Node A (root) | Node B --> Node A (root) | |||
| 6LR_i represents the intermediate routers from source to destination. | 6LR_i represents the intermediate routers from source to destination. | |||
| In this case, 1 <= i <= n, n is the number of routers (6LR) that the | In this case, 1 <= i <= n, where n is the total number of routers | |||
| packet goes through from source (RAL) to destination (6LBR). | (6LR) that the packet goes through from source (RAL) to destination | |||
| (6LBR). | ||||
| This situation is the same case as storing mode. | This situation is the same case as storing mode. | |||
| The Table 7 summarizes what headers are needed for this use case. | The Table 5 summarizes what headers are needed for this use case. | |||
| +-------------------+---------+-------+----------+ | +-------------------+---------+-------+----------+ | |||
| | Header | RAL src | 6LR_i | 6LBR dst | | | Header | RAL src | 6LR_i | 6LBR dst | | |||
| +-------------------+---------+-------+----------+ | +-------------------+---------+-------+----------+ | |||
| | Added headers | RPI | -- | -- | | | Added headers | RPI | -- | -- | | |||
| | Modified headers | -- | RPI | -- | | | Modified headers | -- | RPI | -- | | |||
| | Removed headers | -- | -- | RPI | | | Removed headers | -- | -- | RPI | | |||
| | Untouched headers | -- | -- | -- | | | Untouched headers | -- | -- | -- | | |||
| +-------------------+---------+-------+----------+ | +-------------------+---------+-------+----------+ | |||
| Table 7: Non-SM: Summary of the use of headers from RAL to root | Table 5: Non-SM: Summary of the use of headers from RAL to root | |||
| 8.1.2. Non-SM: Example of Flow from root to RAL | 8.1.2. Non-SM: Example of Flow from root to RAL | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| root (6LBR) --> 6LR_i --> RAL (6LN) | root (6LBR) --> 6LR_i --> RAL (6LN) | |||
| For example, a communication flow could be: Node A (root) --> Node B | For example, a communication flow could be: Node A (root) --> Node B | |||
| --> Node D --> Node F | --> Node D --> Node F | |||
| 6LR_i represents the intermediate routers from source to destination. | 6LR_i represents the intermediate routers from source to destination. | |||
| In this case, 1 <= i <= n, n is the number of routers (6LR) that the | In this case, 1 <= i <= n, where n is the total number of routers | |||
| packet goes through from source (6LBR) to destination (RAL). | (6LR) that the packet goes through from source (6LBR) to destination | |||
| (RAL). | ||||
| The 6LBR inserts a RH3, and a RPI. No IPv6-in-IPv6 header is | The 6LBR inserts an RH3, and an RPI. No IPv6-in-IPv6 header is | |||
| necessary as the traffic originates with a RPL aware node, the 6LBR. | necessary as the traffic originates with a RPL aware node, the 6LBR. | |||
| The destination is known to be RPL-aware because the root knows the | The destination is known to be RPL-aware because the root knows the | |||
| whole topology in non-storing mode. | whole topology in non-storing mode. | |||
| The Table 8 summarizes what headers are needed for this use case. | The Table 6 summarizes what headers are needed for this use case. | |||
| +-------------------+----------+-----------+-----------+ | +-------------------+----------+-----------+-----------+ | |||
| | Header | 6LBR src | 6LR_i | RAL dst | | | Header | 6LBR src | 6LR_i | RAL dst | | |||
| +-------------------+----------+-----------+-----------+ | +-------------------+----------+-----------+-----------+ | |||
| | Added headers | RPI, RH3 | -- | -- | | | Added headers | RPI, RH3 | -- | -- | | |||
| | Modified headers | -- | RPI, RH3 | -- | | | Modified headers | -- | RPI, RH3 | -- | | |||
| | Removed headers | -- | -- | RH3, RPI | | | Removed headers | -- | -- | RH3, RPI | | |||
| | Untouched headers | -- | -- | -- | | | Untouched headers | -- | -- | -- | | |||
| +-------------------+----------+-----------+-----------+ | +-------------------+----------+-----------+-----------+ | |||
| Table 8: Non-SM: Summary of the use of headers from root to RAL | Table 6: Non-SM: Summary of the use of headers from root to RAL | |||
| 8.1.3. Non-SM: Example of Flow from root to RUL | 8.1.3. Non-SM: Example of Flow from root to RUL | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| root (6LBR) --> 6LR_i --> RUL (IPv6 dst node) | root (6LBR) --> 6LR_i --> RUL (IPv6 dst node) | |||
| For example, a communication flow could be: Node A (root) --> Node B | For example, a communication flow could be: Node A (root) --> Node B | |||
| --> Node E --> Node G (RUL) | --> Node E --> Node G (RUL) | |||
| 6LR_i represents the intermediate routers from source to destination. | 6LR_i represents the intermediate routers from source to destination. | |||
| In this case, 1 <= i <= n, n is the number of routers (6LR) that the | In this case, 1 <= i <= n, where n is the total number of routers | |||
| packet goes through from source (6LBR) to destination (RUL). | (6LR) that the packet goes through from source (6LBR) to destination | |||
| (RUL). | ||||
| In the 6LBR, the RH3 is added; it is then modified at each | In the 6LBR, the RH3 is added; it is then modified at each | |||
| intermediate 6LR (6LR_1 and so on), and it is fully consumed in the | intermediate 6LR (6LR_1 and so on), and it is fully consumed in the | |||
| last 6LR (6LR_n) but is left in place. When the RPI is added, the | last 6LR (6LR_n) but is left in place. When the RPI is added, the | |||
| IPv6 node, which does not understand the RPI, will ignore it (per | IPv6 node, which does not understand the RPI, will ignore it (per | |||
| RFC8200); thus, encapsulation is not necessary. | [RFC8200]); thus, encapsulation is not necessary. | |||
| The Figure 15 depicts the table that summarizes what headers are | The Figure 18 depicts the table that summarizes what headers are | |||
| needed for this use case. | needed for this use case. | |||
| +-----------+----------+--------------+----------------+----------+ | +-----------+----------+--------------+----------------+----------+ | |||
| | Header | 6LBR | 6LR_i | 6LR_n | RUL | | | Header | 6LBR | 6LR_i | 6LR_n | RUL | | |||
| | | src | i=(1,..,n-1) | | dst | | | | src | i=(1,..,n-1) | | dst | | |||
| | | | | | | | | | | | | | | |||
| +-----------+----------+--------------+----------------+----------+ | +-----------+----------+--------------+----------------+----------+ | |||
| | Added | RPI, RH3 | -- | -- | -- | | | Added | RPI, RH3 | -- | -- | -- | | |||
| | headers | | | | | | | headers | | | | | | |||
| +-----------+----------+--------------+----------------+----------+ | +-----------+----------+--------------+----------------+----------+ | |||
| skipping to change at page 36, line 24 ¶ | skipping to change at page 38, line 24 ¶ | |||
| | headers | | | RH3(consumed) | | | | headers | | | RH3(consumed) | | | |||
| +-----------+----------+--------------+----------------+----------+ | +-----------+----------+--------------+----------------+----------+ | |||
| | Removed | -- | -- | -- | -- | | | Removed | -- | -- | -- | -- | | |||
| | headers | | | | | | | headers | | | | | | |||
| +-----------+----------+--------------+----------------+----------+ | +-----------+----------+--------------+----------------+----------+ | |||
| | Untouched | -- | -- | -- | RPI, RH3 | | | Untouched | -- | -- | -- | RPI, RH3 | | |||
| | headers | | | | (both | | | headers | | | | (both | | |||
| | | | | | ignored) | | | | | | | ignored) | | |||
| +-----------+----------+--------------+----------------+----------+ | +-----------+----------+--------------+----------------+----------+ | |||
| Figure 15: Non-SM: Summary of the use of headers from root to RUL | Figure 18: Non-SM: Summary of the use of headers from root to RUL | |||
| 8.1.4. Non-SM: Example of Flow from RUL to root | 8.1.4. Non-SM: Example of Flow from RUL to root | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| RUL (IPv6 src node) --> 6LR_1 --> 6LR_i --> root (6LBR) dst | RUL (IPv6 src node) --> 6LR_1 --> 6LR_i --> root (6LBR) dst | |||
| For example, a communication flow could be: Node G --> Node E --> | For example, a communication flow could be: Node G --> Node E --> | |||
| Node B --> Node A (root) | Node B --> Node A (root) | |||
| 6LR_i represents the intermediate routers from source to destination. | 6LR_i represents the intermediate routers from source to destination. | |||
| In this case, 1 <= i <= n, n is the number of routers (6LR) that the | In this case, 1 <= i <= n, where n is the total number of routers | |||
| packet goes through from source (RUL) to destination (6LBR). For | (6LR) that the packet goes through from source (RUL) to destination | |||
| example, 6LR_1 (i=1) is the router that receives the packets from the | (6LBR). For example, 6LR_1 (i=1) is the router that receives the | |||
| IPv6 node. | packets from the IPv6 node. | |||
| In this case, the RPI is added by the first 6LR (6LR_1) (Node E), | In this case, the RPI is added by the first 6LR (6LR_1) (Node E), | |||
| encapsulated in an IPv6-in-IPv6 header, and modified in the | encapsulated in an IPv6-in-IPv6 header, and modified in the | |||
| subsequent 6LRs in the flow. The RPI and the entire packet is | subsequent 6LRs in the flow. The RPI and the entire packet are | |||
| consumed by the root. | consumed by the root. | |||
| The Figure 16 shows the table that summarizes what headers are needed | The Figure 19 shows the table that summarizes what headers are needed | |||
| for this use case. | for this use case. | |||
| +---------+----+-----------------+-----------------+-----------------+ | +---------+----+-----------------+-----------------+-----------------+ | |||
| | |RUL | | | | | | |RUL | | | | | |||
| | Header |src | 6LR_1 | 6LR_i | 6LBR dst | | | Header |src | 6LR_1 | 6LR_i | 6LBR dst | | |||
| | |node| | | | | | |node| | | | | |||
| +---------+----+-----------------+-----------------+-----------------+ | +---------+----+-----------------+-----------------+-----------------+ | |||
| | Added | -- |IPv6-in-IPv6(RPI)| -- | -- | | | Added | -- |IPv6-in-IPv6(RPI)| -- | -- | | |||
| | headers | | | | | | | headers | | | | | | |||
| +---------+----+-----------------+-----------------+-----------------+ | +---------+----+-----------------+-----------------+-----------------+ | |||
| | Modified| -- | -- |IPv6-in-IPv6(RPI)| -- | | | Modified| -- | -- |IPv6-in-IPv6(RPI)| -- | | |||
| | headers | | | | | | | headers | | | | | | |||
| +---------+----+-----------------+-----------------+-----------------+ | +---------+----+-----------------+-----------------+-----------------+ | |||
| | Removed | -- | -- | -- |IPv6-in-IPv6(RPI)| | | Removed | -- | -- | -- |IPv6-in-IPv6(RPI)| | |||
| | headers | | | | | | | headers | | | | | | |||
| +---------+----+-----------------+-----------------+-----------------+ | +---------+----+-----------------+-----------------+-----------------+ | |||
| |Untouched| -- | -- | -- | -- | | |Untouched| -- | -- | -- | -- | | |||
| | headers | | | | | | | headers | | | | | | |||
| +---------+----+-----------------+-----------------+-----------------+ | +---------+----+-----------------+-----------------+-----------------+ | |||
| Figure 16: Non-SM: Summary of the use of headers from RUL to root | Figure 19: Non-SM: Summary of the use of headers from RUL to root | |||
| 8.2. Non-Storing Mode: Interaction between Leaf and Internet | 8.2. Non-Storing Mode: Interaction between Leaf and Internet | |||
| This section will describe the communication flow in Non Storing Mode | This section will describe the communication flow in Non Storing Mode | |||
| (Non-SM) between: | (Non-SM) between: | |||
| RAL to Internet | RAL to Internet | |||
| Internet to RAL | Internet to RAL | |||
| skipping to change at page 37, line 47 ¶ | skipping to change at page 39, line 47 ¶ | |||
| 8.2.1. Non-SM: Example of Flow from RAL to Internet | 8.2.1. Non-SM: Example of Flow from RAL to Internet | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| RAL (6LN) src --> 6LR_i --> root (6LBR) --> Internet dst | RAL (6LN) src --> 6LR_i --> root (6LBR) --> Internet dst | |||
| For example, a communication flow could be: Node F (RAL) --> Node D | For example, a communication flow could be: Node F (RAL) --> Node D | |||
| --> Node B --> Node A --> Internet | --> Node B --> Node A --> Internet | |||
| 6LR_i represents the intermediate routers from source to destination. | 6LR_i represents the intermediate routers from source to destination, | |||
| In this case, 1 <= i <= n, n is the number of routers (6LR) that the | 1 <= i <= n, where n is the total number of routers (6LR) that the | |||
| packet goes through from source (RAL) to 6LBR. | packet goes through from source (RAL) to 6LBR. | |||
| In this case, the encapsulation from the RAL to the root is optional. | In this case, the encapsulation from the RAL to the root is optional. | |||
| The simplest case is when the RPI gets to the Internet (as the table | The simplest case is when the RPI gets to the Internet (as the | |||
| show it), knowing that the Internet is going to ignore it. | Table 7 shows it), knowing that the Internet is going to ignore it. | |||
| The IPv6 flow label should be set to zero to aid in compression | The IPv6 flow label should be set to zero to aid in compression | |||
| [RFC8138], and the 6LBR will set it to a non-zero value when sending | [RFC8138], and the 6LBR will set it to a non-zero value when sending | |||
| towards the Internet [RFC6437]. | towards the Internet [RFC6437]. | |||
| The Table 9 summarizes what headers are needed for this use case when | The Table 7 summarizes what headers are needed for this use case when | |||
| no encapsulation is used. The Table 10 summarizes what headers are | no encapsulation is used. The Table 8 summarizes what headers are | |||
| needed for this use case when encapsulation to the root is used. | needed for this use case when encapsulation to the root is used. | |||
| +-------------------+---------+-------+------+----------------+ | +-------------------+---------+-------+------+----------------+ | |||
| | Header | RAL src | 6LR_i | 6LBR | Internet dst | | | Header | RAL src | 6LR_i | 6LBR | Internet dst | | |||
| +-------------------+---------+-------+------+----------------+ | +-------------------+---------+-------+------+----------------+ | |||
| | Added headers | RPI | -- | -- | -- | | | Added headers | RPI | -- | -- | -- | | |||
| | Modified headers | -- | RPI | -- | -- | | | Modified headers | -- | RPI | -- | -- | | |||
| | Removed headers | -- | -- | -- | -- | | | Removed headers | -- | -- | -- | -- | | |||
| | Untouched headers | -- | -- | RPI | RPI (Ignored) | | | Untouched headers | -- | -- | RPI | RPI (Ignored) | | |||
| +-------------------+---------+-------+------+----------------+ | +-------------------+---------+-------+------+----------------+ | |||
| Table 9: Non-SM: Summary of the use of headers from RAL to Internet | Table 7: Non-SM: Summary of the use of headers from RAL to Internet | |||
| with no encapsulation | with no encapsulation | |||
| +-----------+--------------+--------------+--------------+----------+ | +-----------+--------------+--------------+--------------+----------+ | |||
| | Header | RAL src | 6LR_i | 6LBR | Internet | | | Header | RAL src | 6LR_i | 6LBR | Internet | | |||
| | | | | | dst | | | | | | | dst | | |||
| +-----------+--------------+--------------+--------------+----------+ | +-----------+--------------+--------------+--------------+----------+ | |||
| | Added | IPv6-in-IPv6 | -- | -- | -- | | | Added | IPv6-in-IPv6 | -- | -- | -- | | |||
| | headers | (RPI) | | | | | | headers | (RPI) | | | | | |||
| | Modified | -- | IPv6-in-IPv6 | -- | -- | | | Modified | -- | IPv6-in-IPv6 | -- | -- | | |||
| | headers | | (RPI) | | | | | headers | | (RPI) | | | | |||
| | Removed | -- | -- | IPv6-in-IPv6 | -- | | | Removed | -- | -- | IPv6-in-IPv6 | -- | | |||
| | headers | | | (RPI) | | | | headers | | | (RPI) | | | |||
| | Untouched | -- | -- | -- | -- | | | Untouched | -- | -- | -- | -- | | |||
| | headers | | | | | | | headers | | | | | | |||
| +-----------+--------------+--------------+--------------+----------+ | +-----------+--------------+--------------+--------------+----------+ | |||
| Table 10: Non-SM: Summary of the use of headers from RAL to Internet | Table 8: Non-SM: Summary of the use of headers from RAL to Internet | |||
| with encapsulation to the root | with encapsulation to the root | |||
| 8.2.2. Non-SM: Example of Flow from Internet to RAL | 8.2.2. Non-SM: Example of Flow from Internet to RAL | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| Internet --> root (6LBR) --> 6LR_i --> RAL dst (6LN) | Internet --> root (6LBR) --> 6LR_i --> RAL dst (6LN) | |||
| For example, a communication flow could be: Internet --> Node A | For example, a communication flow could be: Internet --> Node A | |||
| (root) --> Node B --> Node D --> Node F (RAL) | (root) --> Node B --> Node D --> Node F (RAL) | |||
| 6LR_i represents the intermediate routers from source to destination. | 6LR_i represents the intermediate routers from source to destination, | |||
| In this case, 1 <= i <= n, n is the number of routers (6LR) that the | 1 <= i <= n, where n is the total number of routers (6LR) that the | |||
| packet goes through from 6LBR to destination (RAL). | packet goes through from 6LBR to destination (RAL). | |||
| The 6LBR must add a 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 IPv6-in-IPv6 header to | address of the target node, it can address the IPv6-in-IPv6 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 [RFC8138]. | aid compression [RFC8138]. | |||
| The Table 11 summarizes what headers are needed for this use case. | The Table 9 summarizes what headers are needed for this use case. | |||
| +-----------+----------+--------------+--------------+--------------+ | +-----------+----------+--------------+--------------+--------------+ | |||
| | Header | Internet | 6LBR | 6LR_i | RAL dst | | | Header | Internet | 6LBR | 6LR_i | RAL dst | | |||
| | | src | | | | | | | src | | | | | |||
| +-----------+----------+--------------+--------------+--------------+ | +-----------+----------+--------------+--------------+--------------+ | |||
| | Added | -- | IPv6-in-IPv6 | -- | -- | | | Added | -- | IPv6-in-IPv6 | -- | -- | | |||
| | headers | | (RH3,RPI) | | | | | headers | | (RH3,RPI) | | | | |||
| | Modified | -- | -- | IPv6-in-IPv6 | -- | | | Modified | -- | -- | IPv6-in-IPv6 | -- | | |||
| | headers | | | (RH3,RPI) | | | | headers | | | (RH3,RPI) | | | |||
| | Removed | -- | -- | -- | IPv6-in-IPv6 | | | Removed | -- | -- | -- | IPv6-in-IPv6 | | |||
| | headers | | | | (RH3,RPI) | | | headers | | | | (RH3,RPI) | | |||
| | Untouched | -- | -- | -- | -- | | | Untouched | -- | -- | -- | -- | | |||
| | headers | | | | | | | headers | | | | | | |||
| +-----------+----------+--------------+--------------+--------------+ | +-----------+----------+--------------+--------------+--------------+ | |||
| Table 11: Non-SM: Summary of the use of headers from Internet to RAL | Table 9: Non-SM: Summary of the use of headers from Internet to RAL | |||
| 8.2.3. Non-SM: Example of Flow from RUL to Internet | 8.2.3. Non-SM: Example of Flow from RUL to Internet | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| RUL (IPv6 src node) --> 6LR_1 --> 6LR_i -->root (6LBR) --> Internet | RUL (IPv6 src node) --> 6LR_1 --> 6LR_i -->root (6LBR) --> Internet | |||
| dst | dst | |||
| For example, a communication flow could be: Node G --> Node E --> | For example, a communication flow could be: Node G --> Node E --> | |||
| Node B --> Node A --> Internet | 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, 1 <= i | |||
| this case, "1 <= i <= n", where n is the number of routers (6LRs) | <= n, where n is the total number of routers (6LRs) that the packet | |||
| that the packet goes through from the source (RUL) to the 6LBR, e.g., | goes through from the source (RUL) to the 6LBR, e.g., 6LR_1 (i=1). | |||
| 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 packet, the first | node. As RPL headers are added in the IPv6 node packet, the first | |||
| 6LR (6LR_1) will add a RPI inside a new IPv6-in-IPv6 header. The | 6LR (6LR_1) will add an RPI inside a new IPv6-in-IPv6 header. The | |||
| IPv6-in-IPv6 header will be addressed to the root. This case is | IPv6-in-IPv6 header will be addressed to the root. This case is | |||
| identical to the storing-mode case (see Section 7.2.3). | identical to the storing-mode case (see Section 7.2.3). | |||
| The Figure 17 shows the table that summarizes what headers are needed | The Figure 20 shows the table that summarizes what headers are needed | |||
| for this use case. | for this use case. | |||
| +---------+----+-------------+--------------+--------------+--------+ | +---------+----+-------------+--------------+--------------+--------+ | |||
| | Header |RUL | 6LR_1 | 6LR_i | 6LBR |Internet| | | Header |RUL | 6LR_1 | 6LR_i | 6LBR |Internet| | |||
| | |src | | [i=2,..,n] | | dst | | | |src | | [i=2,..,n] | | dst | | |||
| | |node| | | | | | | |node| | | | | | |||
| +---------+----+-------------+--------------+--------------+--------+ | +---------+----+-------------+--------------+--------------+--------+ | |||
| | Added | -- |IP6-IP6(RPI) | -- | -- | -- | | | Added | -- |IP6-IP6(RPI) | -- | -- | -- | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| +---------+----+-------------+--------------+--------------+--------+ | +---------+----+-------------+--------------+--------------+--------+ | |||
| | Modified| -- | -- | IP6-IP6(RPI) | -- | -- | | | Modified| -- | -- | IP6-IP6(RPI) | -- | -- | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| +---------+----+-------------+--------------+--------------+--------+ | +---------+----+-------------+--------------+--------------+--------+ | |||
| | Removed | -- | -- | -- | IP6-IP6(RPI) | -- | | | Removed | -- | -- | -- | IP6-IP6(RPI) | -- | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| +---------+----+-------------+--------------+--------------+--------+ | +---------+----+-------------+--------------+--------------+--------+ | |||
| |Untouched| -- | -- | -- | -- | -- | | |Untouched| -- | -- | -- | -- | -- | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| +---------+----+-------------+--------------+--------------+--------+ | +---------+----+-------------+--------------+--------------+--------+ | |||
| Figure 17: Non-SM: Summary of the use of headers from RUL to Internet | Figure 20: Non-SM: Summary of the use of headers from RUL to Internet | |||
| 8.2.4. Non-SM: Example of Flow from Internet to RUL | 8.2.4. Non-SM: Example of Flow from Internet to RUL | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| Internet src --> root (6LBR) --> 6LR_i --> RUL (IPv6 dst node) | Internet src --> root (6LBR) --> 6LR_i --> RUL (IPv6 dst node) | |||
| For example, a communication flow could be: Internet --> Node A | For example, a communication flow could be: Internet --> Node A | |||
| (root) --> Node B --> Node E --> Node G | (root) --> Node B --> Node E --> Node G | |||
| 6LR_i represents the intermediate routers from source to destination. | 6LR_i represents the intermediate routers from source to destination, | |||
| In this case, 1 <= i <= n, n is the number of routers (6LR) that the | 1 <= i <= n, where n is the total number of routers (6LR) that the | |||
| packet goes through from 6LBR to RUL. | packet goes through from 6LBR to RUL. | |||
| The 6LBR must add a RH3 header inside an IPv6-in-IPv6 header. The | The 6LBR must add an RH3 header inside an IPv6-in-IPv6 header. The | |||
| 6LBR will know the path, and will recognize that the final node is | 6LBR will know the path, and will recognize that the final node is | |||
| not a RPL capable node as it will have received the connectivity DAO | not a RPL capable node as it will have received the connectivity DAO | |||
| from the nearest 6LR. The 6LBR can therefore make the IPv6-in-IPv6 | from the nearest 6LR. The 6LBR can therefore make the IPv6-in-IPv6 | |||
| header destination be the last 6LR. The 6LBR will set to zero the | header destination be the last 6LR. The 6LBR will set to zero the | |||
| flow label upon entry in order to aid compression [RFC8138]. | flow label upon entry in order to aid compression [RFC8138]. | |||
| The Figure 18 shows the table that summarizes what headers are needed | The Figure 21 shows the table that summarizes what headers are needed | |||
| for this use case. | for this use case. | |||
| +----------+--------+------------------+-----------+-----------+-----+ | +----------+--------+------------------+-----------+-----------+-----+ | |||
| | Header |Internet| 6LBR | 6LR_i | 6LR_n | RUL | | | Header |Internet| 6LBR | 6LR_i | 6LR_n | RUL | | |||
| | | src | | | | dst | | | | src | | | | dst | | |||
| +----------+--------+------------------+-----------+-----------+-----+ | +----------+--------+------------------+-----------+-----------+-----+ | |||
| | Added | -- | IP6-IP6(RH3,RPI) | -- | -- | -- | | | Added | -- | IP6-IP6(RH3,RPI) | -- | -- | -- | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| +----------+--------+------------------+-----------+-----------+-----+ | +----------+--------+------------------+-----------+-----------+-----+ | |||
| | Modified | -- | -- | IP6-IP6 | -- | -- | | | Modified | -- | -- | IP6-IP6 | -- | -- | | |||
| | headers | | | (RH3,RPI) | | | | | headers | | | (RH3,RPI) | | | | |||
| +----------+--------+------------------+-----------+-----------+-----+ | +----------+--------+------------------+-----------+-----------+-----+ | |||
| | Removed | -- | -- | -- | IP6-IP6 | -- | | | Removed | -- | -- | -- | IP6-IP6 | -- | | |||
| | headers | | | | (RH3,RPI) | | | | headers | | | | (RH3,RPI) | | | |||
| +----------+--------+------------------+-----------+-----------+-----+ | +----------+--------+------------------+-----------+-----------+-----+ | |||
| |Untouched | -- | -- | -- | -- | -- | | |Untouched | -- | -- | -- | -- | -- | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| +----------+--------+------------------+-----------+-----------+-----+ | +----------+--------+------------------+-----------+-----------+-----+ | |||
| Figure 18: Non-SM: Summary of the use of headers from Internet to | Figure 21: Non-SM: Summary of the use of headers from Internet to | |||
| RUL. | RUL. | |||
| 8.3. Non-SM: Interaction between leaves | 8.3. Non-SM: Interaction between leaves | |||
| In this section is described the communication flow in Non Storing | In this section is described the communication flow in Non Storing | |||
| Mode (Non-SM) between, | Mode (Non-SM) between, | |||
| RAL to RAL | RAL to RAL | |||
| RAL to RUL | RAL to RUL | |||
| skipping to change at page 41, line 48 ¶ | skipping to change at page 43, line 48 ¶ | |||
| 8.3.1. Non-SM: Example of Flow from RAL to RAL | 8.3.1. Non-SM: Example of Flow from RAL to RAL | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| RAL src --> 6LR_ia --> root (6LBR) --> 6LR_id --> RAL dst | RAL src --> 6LR_ia --> root (6LBR) --> 6LR_id --> RAL dst | |||
| For example, a communication flow could be: Node F (RAL src)--> Node | For example, a communication flow could be: Node F (RAL src)--> Node | |||
| D --> Node B --> Node A (root) --> Node B --> Node E --> Node H (RAL | D --> Node B --> Node A (root) --> Node B --> Node E --> Node H (RAL | |||
| dst) | dst) | |||
| 6LR_ia represents the intermediate routers from source to the root In | 6LR_ia represents the intermediate routers from source to the root, 1 | |||
| this case, 1 <= ia <= n, n is the number of routers (6LR) that the | <= ia <= n, where n is the total number of routers (6LR) that the | |||
| packet goes through from RAL to the root. | packet goes through from RAL to the root. | |||
| 6LR_id represents the intermediate routers from the root to the | 6LR_id represents the intermediate routers from the root to the | |||
| destination. In this case, 1 <= id <= m, m is the number of the | destination, 1 <= id <= m, where m is the total number of the | |||
| intermediate routers (6LR). | intermediate 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 a RPI to the original packet, and send the packet | node will add an RPI to the original packet, and send the packet | |||
| upwards. | upwards. | |||
| The originating node may put the RPI (RPI1) into an IPv6-in-IPv6 | The originating node may put the RPI (RPI1) into an IPv6-in-IPv6 | |||
| header addressed to the root, so that the 6LBR can remove that | header addressed to the root, so that the 6LBR can remove that | |||
| header. If it does not, then the RPI1 is forwarded down from the | header. If it does not, then the RPI1 is forwarded down from the | |||
| root in the inner header to no avail. | root in the inner header to no avail. | |||
| The 6LBR will need to insert a RH3 header, which requires that it add | The 6LBR will need to insert an RH3 header, which requires that it | |||
| an IPv6-in-IPv6 header. It should be able to remove the RPI(RPI1), | add an IPv6-in-IPv6 header. It should be able to remove the | |||
| as it was contained in an IPv6-in-IPv6 header addressed to it. | RPI(RPI1), as it was contained in an IPv6-in-IPv6 header addressed to | |||
| Otherwise, there may be a RPI buried inside the inner IP header, | it. Otherwise, there may be an RPI buried inside the inner IP | |||
| which should get ignored. The root inserts a RPI (RPI2) alongside | header, which should get ignored. The root inserts an RPI (RPI2) | |||
| the RH3. | alongside the RH3. | |||
| 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 8.1.2, with the originating node acting as 6LBR. | Section 8.1.2, with the originating node acting as 6LBR. | |||
| The Figure 19 shows the table that summarizes what headers are needed | The Figure 22 shows the table that summarizes what headers are needed | |||
| for this use case when encapsulation to the root takes place. | for this use case when encapsulation to the root takes place. | |||
| The Figure 20 shows the table that summarizes what headers are needed | The Figure 23 shows the table that summarizes what headers are needed | |||
| for this use case when there is no encapsulation to the root. | for this use case when there is no encapsulation to the root. | |||
| +---------+-------+----------+------------+----------+------------+ | +---------+-------+----------+------------+----------+------------+ | |||
| | Header | RAL | 6LR_ia | 6LBR | 6LR_id | RAL | | | Header | RAL | 6LR_ia | 6LBR | 6LR_id | RAL | | |||
| | | src | | | | dst | | | | src | | | | dst | | |||
| +---------+-------+----------+------------+----------+------------+ | +---------+-------+----------+------------+----------+------------+ | |||
| | Added |IP6-IP6| | IP6-IP6 | -- | -- | | | Added |IP6-IP6| | IP6-IP6 | -- | -- | | |||
| | headers |(RPI1) | -- |(RH3-> RAL, | | | | | headers |(RPI1) | -- |(RH3-> RAL, | | | | |||
| | | | | RPI2) | | | | | | | | RPI2) | | | | |||
| +---------+-------+----------+------------+----------+------------+ | +---------+-------+----------+------------+----------+------------+ | |||
| skipping to change at page 43, line 24 ¶ | skipping to change at page 45, line 24 ¶ | |||
| | headers | | (RPI1) | |(RH3,RPI) | | | | headers | | (RPI1) | |(RH3,RPI) | | | |||
| +---------+-------+----------+------------+----------+------------+ | +---------+-------+----------+------------+----------+------------+ | |||
| | Removed | -- | -- | IP6-IP6 | -- | IP6-IP6 | | | Removed | -- | -- | IP6-IP6 | -- | IP6-IP6 | | |||
| | headers | | | (RPI1) | | (RH3, | | | headers | | | (RPI1) | | (RH3, | | |||
| | | | | | | RPI2) | | | | | | | | RPI2) | | |||
| +---------+-------+----------+------------+----------+------------+ | +---------+-------+----------+------------+----------+------------+ | |||
| |Untouched| -- | -- | -- | -- | -- | | |Untouched| -- | -- | -- | -- | -- | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| +---------+-------+----------+------------+----------+------------+ | +---------+-------+----------+------------+----------+------------+ | |||
| Figure 19: Non-SM: Summary of the Use of Headers from RAL to RAL with | Figure 22: Non-SM: Summary of the Use of Headers from RAL to RAL with | |||
| encapsulation to the root. | encapsulation to the root. | |||
| +-----------+------+--------+---------+---------+---------+ | +-----------+------+--------+---------+---------+---------+ | |||
| | Header | RAL | 6LR_ia | 6LBR | 6LR_id | RAL | | | Header | RAL | 6LR_ia | 6LBR | 6LR_id | RAL | | |||
| +-----------+------+--------+---------+---------+---------+ | +-----------+------+--------+---------+---------+---------+ | |||
| | Inserted | RPI1 | -- | IP6-IP6 | -- | -- | | | Inserted | RPI1 | -- | IP6-IP6 | -- | -- | | |||
| | headers | | | (RH3, | | | | | headers | | | (RH3, | | | | |||
| | | | | RPI2) | | | | | | | | RPI2) | | | | |||
| +-----------+------+--------+---------+---------+---------+ | +-----------+------+--------+---------+---------+---------+ | |||
| | Modified | -- | RPI1 | -- | IP6-IP6 | -- | | | Modified | -- | RPI1 | -- | IP6-IP6 | -- | | |||
| skipping to change at page 43, line 47 ¶ | skipping to change at page 45, line 47 ¶ | |||
| +-----------+------+--------+---------+---------+---------+ | +-----------+------+--------+---------+---------+---------+ | |||
| | Removed | -- | -- | -- | -- | IP6-IP6 | | | Removed | -- | -- | -- | -- | IP6-IP6 | | |||
| | headers | | | | | (RH3, | | | headers | | | | | (RH3, | | |||
| | | | | | | RPI2) | | | | | | | | RPI2) | | |||
| | | | | | | RPI1 | | | | | | | | RPI1 | | |||
| +-----------+------+--------+---------+---------+---------+ | +-----------+------+--------+---------+---------+---------+ | |||
| | Untouched | -- | -- | RPI1 | RPI1 | -- | | | Untouched | -- | -- | RPI1 | RPI1 | -- | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| +-----------+------+--------+---------+---------+---------+ | +-----------+------+--------+---------+---------+---------+ | |||
| Figure 20: Non-SM: Summary of the Use of Headers from RAL to RAL | Figure 23: Non-SM: Summary of the Use of Headers from RAL to RAL | |||
| without encapsulation to the root. | without encapsulation to the root. | |||
| 8.3.2. Non-SM: Example of Flow from RAL to RUL | 8.3.2. Non-SM: Example of Flow from RAL to RUL | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| RAL --> 6LR_ia --> root (6LBR) --> 6LR_id --> RUL (IPv6 dst node) | RAL --> 6LR_ia --> root (6LBR) --> 6LR_id --> RUL (IPv6 dst node) | |||
| For example, a communication flow could be: Node F (RAL) --> Node D | For example, a communication flow could be: Node F (RAL) --> Node D | |||
| --> Node B --> Node A (root) --> Node B --> Node E --> Node G (RUL) | --> Node B --> Node A (root) --> Node B --> Node E --> Node G (RUL) | |||
| 6LR_ia represents the intermediate routers from source to the root In | 6LR_ia represents the intermediate routers from source to the root, 1 | |||
| this case, 1 <= ia <= n, n is the number of intermediate routers | <= ia <= n, where n is the total number of intermediate routers (6LR) | |||
| (6LR) | ||||
| 6LR_id represents the intermediate routers from the root to the | 6LR_id represents the intermediate routers from the root to the | |||
| destination. In this case, 1 <= id <= m, m is the number of the | destination, 1 <= id <= m, where m is the total number of the | |||
| intermediate routers (6LRs). | intermediate routers (6LRs). | |||
| As in the previous case, the RAL (6LN) may insert a RPI (RPI1) header | As in the previous case, the RAL (6LN) may insert an RPI (RPI1) | |||
| which must be in an IPv6-in-IPv6 header addressed to the root so that | header which must be in an IPv6-in-IPv6 header addressed to the root | |||
| the 6LBR can remove this RPI. The 6LBR will then insert a RH3 inside | so that the 6LBR can remove this RPI. The 6LBR will then insert an | |||
| a new IPv6-in-IPv6 header addressed to the last 6LR_id (6LR_id = m) | RH3 inside a new IPv6-in-IPv6 header addressed to the last 6LR_id | |||
| alongside the insertion of RPI2. | (6LR_id = m) alongside the insertion of RPI2. | |||
| If the originating node does not not put the RPI (RPI1) into an IPv6- | If the originating node does not not put the RPI (RPI1) into an IPv6- | |||
| in-IPv6 header addressed to the root. Then, the RPI1 is forwarded | in-IPv6 header addressed to the root. Then, the RPI1 is forwarded | |||
| down from the root in the inner header to no avail. | down from the root in the inner header to no avail. | |||
| The Figure 21 shows the table that summarizes what headers are needed | The Figure 24 shows the table that summarizes what headers are needed | |||
| for this use case when encapsulation to the root takes place. The | for this use case when encapsulation to the root takes place. The | |||
| Figure 22 shows the table that summarizes what headers are needed for | Figure 25 shows the table that summarizes what headers are needed for | |||
| this use case when no encapsulation to the root takes place. | this use case when no encapsulation to the root takes place. | |||
| +-----------+---------+---------+---------+---------+---------+------+ | +-----------+---------+---------+---------+---------+---------+------+ | |||
| | Header | RAL | 6LR_ia | 6LBR | 6LR_id | 6LR_m | RUL | | | Header | RAL | 6LR_ia | 6LBR | 6LR_id | 6LR_m | RUL | | |||
| | | src | | | | | dst | | | | src | | | | | dst | | |||
| | | node | | | | | node | | | | node | | | | | node | | |||
| +-----------+---------+---------+---------+---------+---------+------+ | +-----------+---------+---------+---------+---------+---------+------+ | |||
| | Added | IP6-IP6 | | IP6-IP6 | -- | -- | -- | | | Added | IP6-IP6 | | IP6-IP6 | -- | -- | -- | | |||
| | headers | (RPI1) | -- | (RH3, | | | | | | headers | (RPI1) | -- | (RH3, | | | | | |||
| | | | | RPI2) | | | | | | | | | RPI2) | | | | | |||
| skipping to change at page 45, line 26 ¶ | skipping to change at page 47, line 26 ¶ | |||
| | | | | | RPI2) | | | | | | | | | RPI2) | | | | |||
| +-----------+---------+---------+---------+---------+---------+------+ | +-----------+---------+---------+---------+---------+---------+------+ | |||
| | Removed | -- | -- | IP6-IP6 | -- | IP6-IP6 | -- | | | Removed | -- | -- | IP6-IP6 | -- | IP6-IP6 | -- | | |||
| | headers | | | (RPI1) | | (RH3, | | | | headers | | | (RPI1) | | (RH3, | | | |||
| | | | | | | RPI2) | | | | | | | | | RPI2) | | | |||
| +-----------+---------+---------+---------+---------+---------+------+ | +-----------+---------+---------+---------+---------+---------+------+ | |||
| | Untouched | -- | -- | -- | -- | -- | -- | | | Untouched | -- | -- | -- | -- | -- | -- | | |||
| | headers | | | | | | | | | headers | | | | | | | | |||
| +-----------+---------+---------+---------+---------+---------+------+ | +-----------+---------+---------+---------+---------+---------+------+ | |||
| Figure 21: Non-SM: Summary of the use of headers from RAL to RUL with | Figure 24: Non-SM: Summary of the use of headers from RAL to RUL with | |||
| encapsulation to the root. | encapsulation to the root. | |||
| +-----------+------+--------+---------+---------+---------+---------+ | +-----------+------+--------+---------+---------+---------+---------+ | |||
| | Header | RAL | 6LR_ia | 6LBR | 6LR_id | 6LR_n | RUL | | | Header | RAL | 6LR_ia | 6LBR | 6LR_id | 6LR_n | RUL | | |||
| | | src | | | | | dst | | | | src | | | | | dst | | |||
| | | node | | | | | node | | | | node | | | | | node | | |||
| +-----------+------+--------+---------+---------+---------+---------+ | +-----------+------+--------+---------+---------+---------+---------+ | |||
| | Inserted | RPI1 | -- | IP6-IP6 | -- | -- | -- | | | Inserted | RPI1 | -- | IP6-IP6 | -- | -- | -- | | |||
| | headers | | | (RH3, | | | | | | headers | | | (RH3, | | | | | |||
| | | | | RPI2) | | | | | | | | | RPI2) | | | | | |||
| skipping to change at page 45, line 50 ¶ | skipping to change at page 47, line 50 ¶ | |||
| | | | | | RPI2) | | | | | | | | | RPI2) | | | | |||
| +-----------+------+--------+---------+---------+---------+---------+ | +-----------+------+--------+---------+---------+---------+---------+ | |||
| | Removed | -- | -- | -- | -- | IP6-IP6 | -- | | | Removed | -- | -- | -- | -- | IP6-IP6 | -- | | |||
| | headers | | | | | (RH3, | | | | headers | | | | | (RH3, | | | |||
| | | | | | | RPI2) | | | | | | | | | RPI2) | | | |||
| +-----------+------+--------+---------+---------+---------+---------+ | +-----------+------+--------+---------+---------+---------+---------+ | |||
| | Untouched | -- | -- | RPI1 | RPI1 | RPI1 | RPI1 | | | Untouched | -- | -- | RPI1 | RPI1 | RPI1 | RPI1 | | |||
| | headers | | | | | |(Ignored)| | | headers | | | | | |(Ignored)| | |||
| +-----------+------+--------+---------+---------+---------+---------+ | +-----------+------+--------+---------+---------+---------+---------+ | |||
| Figure 22: Non-SM: Summary of the use of headers from RAL to RUL | Figure 25: Non-SM: Summary of the use of headers from RAL to RUL | |||
| without encapsulation to the root. | without encapsulation to the root. | |||
| 8.3.3. Non-SM: Example of Flow from RUL to RAL | 8.3.3. Non-SM: Example of Flow from RUL to RAL | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| RUL (IPv6 src node) --> 6LR_1 --> 6LR_ia --> root (6LBR) --> 6LR_id | RUL (IPv6 src node) --> 6LR_1 --> 6LR_ia --> root (6LBR) --> 6LR_id | |||
| --> RAL dst (6LN) | --> RAL dst (6LN) | |||
| For example, a communication flow could be: Node G (RUL)--> Node E | For example, a communication flow could be: Node G (RUL)--> Node E | |||
| --> Node B --> Node A (root) --> Node B --> Node E --> Node H (RAL) | --> Node B --> Node A (root) --> Node B --> Node E --> Node H (RAL) | |||
| 6LR_ia represents the intermediate routers from source to the root. | 6LR_ia represents the intermediate routers from source to the root, 1 | |||
| In this case, 1 <= ia <= n, n is the number of intermediate routers | <= ia <= n, where n is the total number of intermediate routers (6LR) | |||
| (6LR) | ||||
| 6LR_id represents the intermediate routers from the root to the | 6LR_id represents the intermediate routers from the root to the | |||
| destination. In this case, 1 <= id <= m, m is the number of the | destination, 1 <= id <= m, where m is the total number of the | |||
| intermediate routers (6LR). | intermediate routers (6LR). | |||
| In this scenario the RPI (RPI1) is added by the first 6LR (6LR_1) | In this scenario the RPI (RPI1) is added by the first 6LR (6LR_1) | |||
| inside an IPv6-in-IPv6 header addressed to the root. The 6LBR will | inside an IPv6-in-IPv6 header addressed to the root. The 6LBR will | |||
| remove this RPI, and add it's own IPv6-in-IPv6 header containing a | remove this RPI, and add it's own IPv6-in-IPv6 header containing an | |||
| RH3 header and a RPI (RPI2). | RH3 header and an RPI (RPI2). | |||
| The Figure 23 shows the table that summarizes what headers are needed | The Figure 26 shows the table that summarizes what headers are needed | |||
| for this use case. | for this use case. | |||
| +----------+------+---------+---------+---------+---------+---------+ | +----------+------+---------+---------+---------+---------+---------+ | |||
| | Header | RUL | 6LR_1 | 6LR_ia | 6LBR | 6LR_id | RAL | | | Header | RUL | 6LR_1 | 6LR_ia | 6LBR | 6LR_id | RAL | | |||
| | | src | | | | | dst | | | | src | | | | | dst | | |||
| | | node | | | | | node | | | | node | | | | | node | | |||
| +----------+------+---------+---------+---------+---------+---------+ | +----------+------+---------+---------+---------+---------+---------+ | |||
| | Added | -- | IP6-IP6 | -- | IP6-IP6 | -- | -- | | | Added | -- | IP6-IP6 | -- | IP6-IP6 | -- | -- | | |||
| | headers | | (RPI1) | | (RH3, | | | | | headers | | (RPI1) | | (RH3, | | | | |||
| | | | | | RPI2) | | | | | | | | | RPI2) | | | | |||
| skipping to change at page 46, line 52 ¶ | skipping to change at page 48, line 51 ¶ | |||
| | | | | | | RPI2) | | | | | | | | | RPI2) | | | |||
| +----------+------+---------+---------+---------+---------+---------+ | +----------+------+---------+---------+---------+---------+---------+ | |||
| | Removed | -- | | -- | IP6-IP6 | -- | IP6-IP6 | | | Removed | -- | | -- | IP6-IP6 | -- | IP6-IP6 | | |||
| | headers | | -- | | (RPI1) | | (RH3, | | | headers | | -- | | (RPI1) | | (RH3, | | |||
| | | | | | | | RPI2) | | | | | | | | | RPI2) | | |||
| +----------+------+---------+---------+---------+---------+---------+ | +----------+------+---------+---------+---------+---------+---------+ | |||
| |Untouched | -- | -- | -- | -- | -- | -- | | |Untouched | -- | -- | -- | -- | -- | -- | | |||
| | headers | | | | | | | | | headers | | | | | | | | |||
| +----------+------+---------+---------+---------+---------+---------+ | +----------+------+---------+---------+---------+---------+---------+ | |||
| Figure 23: Non-SM: Summary of the use of headers from RUL to RAL. | Figure 26: Non-SM: Summary of the use of headers from RUL to RAL. | |||
| 8.3.4. Non-SM: Example of Flow from RUL to RUL | 8.3.4. Non-SM: Example of Flow from RUL to RUL | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| RUL (IPv6 src node) --> 6LR_1 --> 6LR_ia --> root (6LBR) --> 6LR_id | RUL (IPv6 src node) --> 6LR_1 --> 6LR_ia --> root (6LBR) --> 6LR_id | |||
| --> RUL (IPv6 dst node) | --> RUL (IPv6 dst node) | |||
| For example, a communication flow could be: Node G --> Node E --> | For example, a communication flow could be: Node G --> Node E --> | |||
| Node B --> Node A (root) --> Node C --> Node J | Node B --> Node A (root) --> Node C --> Node J | |||
| 6LR_ia represents the intermediate routers from source to the root. | 6LR_ia represents the intermediate routers from source to the root, 1 | |||
| In this case, 1 <= ia <= n, n is the number of intermediate routers | <= ia <= n, where n is the total number of intermediate routers (6LR) | |||
| (6LR) | ||||
| 6LR_id represents the intermediate routers from the root to the | 6LR_id represents the intermediate routers from the root to the | |||
| destination. In this case, 1 <= id <= m, m is the number of the | destination, 1 <= id <= m, where m is the total number of the | |||
| intermediate routers (6LR). | intermediate routers (6LR). | |||
| This scenario is the combination of the previous two cases. | This scenario is the combination of the previous two cases. | |||
| The Figure 24 shows the table that summarizes what headers are needed | The Figure 27 shows the table that summarizes what headers are needed | |||
| for this use case. | for this use case. | |||
| +---------+------+-------+-------+---------+-------+---------+------+ | +---------+------+-------+-------+---------+-------+---------+------+ | |||
| | Header | RUL | 6LR_1 | 6LR_ia| 6LBR |6LR_id | 6LR_m | RUL | | | Header | RUL | 6LR_1 | 6LR_ia| 6LBR |6LR_id | 6LR_m | RUL | | |||
| | | src | | | | | | dst | | | | src | | | | | | dst | | |||
| | | node | | | | | | node | | | | node | | | | | | node | | |||
| +---------+------+-------+-------+---------+-------+---------+------+ | +---------+------+-------+-------+---------+-------+---------+------+ | |||
| | Added | -- |IP6-IP6| -- | IP6-IP6 | -- | -- | -- | | | Added | -- |IP6-IP6| -- | IP6-IP6 | -- | -- | -- | | |||
| | headers | | (RPI1)| | (RH3, | | | | | | headers | | (RPI1)| | (RH3, | | | | | |||
| | | | | | RPI2) | | | | | | | | | | RPI2) | | | | | |||
| skipping to change at page 47, line 49 ¶ | skipping to change at page 49, line 48 ¶ | |||
| | | | | | | RPI2)| | | | | | | | | | RPI2)| | | | |||
| +---------+------+-------+-------+---------+-------+---------+------+ | +---------+------+-------+-------+---------+-------+---------+------+ | |||
| | Removed | -- | -- | -- | IP6-IP6 | -- | IP6-IP6 | -- | | | Removed | -- | -- | -- | IP6-IP6 | -- | IP6-IP6 | -- | | |||
| | headers | | | | (RPI1) | | (RH3, | | | | headers | | | | (RPI1) | | (RH3, | | | |||
| | | | | | | | RPI2) | | | | | | | | | | RPI2) | | | |||
| +---------+------+-------+-------+---------+-------+---------+------+ | +---------+------+-------+-------+---------+-------+---------+------+ | |||
| |Untouched| -- | -- | -- | -- | -- | -- | -- | | |Untouched| -- | -- | -- | -- | -- | -- | -- | | |||
| | headers | | | | | | | | | | headers | | | | | | | | | |||
| +---------+------+-------+-------+---------+-------+---------+------+ | +---------+------+-------+-------+---------+-------+---------+------+ | |||
| Figure 24: Non-SM: Summary of the use of headers from RUL to RUL | Figure 27: Non-SM: Summary of the use of headers from RUL to RUL | |||
| 9. Operational Considerations of supporting RUL-leaves | 9. Operational Considerations of supporting RUL-leaves | |||
| Roughly half of the situations described in this document involve | Roughly half of the situations described in this document involve | |||
| leaf ("host") nodes that do not speak RPL. These nodes fall into two | leaf ("host") nodes that do not speak RPL. These nodes fall into two | |||
| further categories: ones that drop a packet that have RPI or RH3 | further categories: ones that drop a packet that have RPI or RH3 | |||
| headers, and ones that continue to process a packet that has RPI and/ | headers, and ones that continue to process a packet that has RPI and/ | |||
| or RH3 headers. | or RH3 headers. | |||
| [RFC8200] provides for new rules that suggest that nodes that have | [RFC8200] provides for new rules that suggest that nodes that have | |||
| skipping to change at page 49, line 8 ¶ | skipping to change at page 51, line 8 ¶ | |||
| could otherwise omit this unnecessary header if it was certain of the | could otherwise omit this unnecessary header if it was certain of the | |||
| properties of the leaf. | properties of the leaf. | |||
| As storing mode can not know the final path of the traffic, | As storing mode can not know the final path of the traffic, | |||
| intolerant (that drop packets with RPL artifacts) leaf nodes can not | intolerant (that drop packets with RPL artifacts) leaf nodes can not | |||
| be supported. | be supported. | |||
| 10. Operational considerations of introducing 0x23 | 10. Operational considerations of introducing 0x23 | |||
| This section describes the operational considerations of introducing | This section describes the operational considerations of introducing | |||
| the new RPI option Type of 0x23. | the new RPI Option Type of 0x23. | |||
| During bootstrapping the node gets the DIO with the information of | During bootstrapping the node gets the DIO with the information of | |||
| RPI option Type, indicating the new RPI in the DODAG Configuration | RPI Option Type, indicating the new RPI in the DODAG Configuration | |||
| option Flag. The DODAG root is in charge to configure the current | option Flag. The DODAG root is in charge to configure the current | |||
| network to the new value, through DIO messages and when all the nodes | network to the new value, through DIO messages and when all the nodes | |||
| are set with the new value. The DODAG should change to a new DODAG | are set with the new value. The DODAG should change to a new DODAG | |||
| version. In case of rebooting, the node does not remember the RPI | version. In case of rebooting, the node does not remember the RPI | |||
| option Type. Thus, the DIO is sent with a flag indicating the new | Option Type. Thus, the DIO is sent with a flag indicating the new | |||
| RPI option Type. | RPI Option Type. | |||
| The DODAG Configuration option is contained in a RPL DIO message, | The DODAG Configuration option is contained in a RPL DIO message, | |||
| which contains a unique DTSN counter. The leaf nodes respond to this | which contains a unique DTSN counter. The leaf nodes respond to this | |||
| message with DAO messages containing the same DTSN. This is a normal | message with DAO messages containing the same DTSN. This is a normal | |||
| part of RPL routing; the RPL root therefore knows when the updated | part of RPL routing; the RPL root therefore knows when the updated | |||
| DODAG Configuration option has been seen by all nodes. | DODAG Configuration option has been seen by all nodes. | |||
| Before the migration happens, all the RPL-aware nodes should support | Before the migration happens, all the RPL-aware nodes should support | |||
| both values . The migration procedure it is triggered when the DIO | both values . The migration procedure it is triggered when the DIO | |||
| is sent with the flag indicating the new RPI option Type. Namely, it | is sent with the flag indicating the new RPI Option Type. Namely, it | |||
| remains at 0x63 until it is sure that the network is capable of 0x23, | remains at 0x63 until it is sure that the network is capable of 0x23, | |||
| then it abruptly change to 0x23. This options allows to send packets | then it abruptly change to 0x23. This options allows to send packets | |||
| to not-RPL nodes, which should ignore the option and continue | to not-RPL nodes, which should ignore the option and continue | |||
| processing the packets. | processing the packets. | |||
| In case that a node join to a network that only process 0x63, it | In case that a node join to a network that only process 0x63, it | |||
| would produce a flag day as was mentioned previously. Indicating the | would produce a flag day as was mentioned previously. Indicating the | |||
| new RPI in the DODAG Configuration option Flag is a way to avoid the | new RPI in the DODAG Configuration option Flag is a way to avoid the | |||
| flag day in a network. It is recommended that a network process both | flag day in a network. It is recommended that a network process both | |||
| options to enable interoperability. | options to enable interoperability. | |||
| 11. IANA Considerations | 11. IANA Considerations | |||
| This document updates the registration made in [RFC6553] Destination | This document updates the registration made in [RFC6553] Destination | |||
| Options and Hop-by-Hop Options registry from 0x63 to 0x23 as shown in | Options and Hop-by-Hop Options registry from 0x63 to 0x23 as shown in | |||
| Figure 25. | Figure 28. | |||
| +-------+-------------------+------------------------+---------- -+ | +-------+-------------------+------------------------+---------- -+ | |||
| | Hex | Binary Value | Description | Reference | | | Hex | Binary Value | Description | Reference | | |||
| + Value +-------------------+ + + | + Value +-------------------+ + + | |||
| | | act | chg | rest | | | | | | act | chg | rest | | | | |||
| +-------+-----+-----+-------+------------------------+------------+ | +-------+-----+-----+-------+------------------------+------------+ | |||
| | 0x23 | 00 | 1 | 00011 | RPL Option |[RFCXXXX](*)| | | 0x23 | 00 | 1 | 00011 | RPL Option |[RFCXXXX](*)| | |||
| +-------+-----+-----+-------+------------------------+------------+ | +-------+-----+-----+-------+------------------------+------------+ | |||
| | 0x63 | 01 | 1 | 00011 | RPL Option(DEPRECATED) | [RFC6553] | | | 0x63 | 01 | 1 | 00011 | RPL Option(DEPRECATED) | [RFC6553] | | |||
| | | | | | |[RFCXXXX](*)| | | | | | | |[RFCXXXX](*)| | |||
| +-------+-----+-----+-------+------------------------+------------+ | +-------+-----+-----+-------+------------------------+------------+ | |||
| Figure 25: Option Type in RPL Option.(*)represents this document | Figure 28: Option Type in RPL Option.(*)represents this document | |||
| DODAG Configuration option is updated as follows (Figure 26): | DODAG Configuration option is updated as follows (Figure 29): | |||
| +------------+-----------------+---------------+ | +------------+-----------------+---------------+ | |||
| | Bit number | Description | Reference | | | Bit number | Description | Reference | | |||
| +------------+-----------------+---------------+ | +------------+-----------------+---------------+ | |||
| | 3 | RPI 0x23 enable | This document | | | 3 | RPI 0x23 enable | This document | | |||
| +------------+-----------------+---------------+ | +------------+-----------------+---------------+ | |||
| Figure 26: DODAG Configuration option Flag to indicate the RPI-flag- | Figure 29: DODAG Configuration option Flag to indicate the RPI-flag- | |||
| day. | day. | |||
| 12. Security Considerations | 12. Security Considerations | |||
| The security considerations covered in [RFC6553] and [RFC6554] apply | The security considerations covered in [RFC6553] and [RFC6554] apply | |||
| when the packets are in the RPL Domain. | when the packets are in the RPL Domain. | |||
| The IPv6-in-IPv6 mechanism described in this document is much more | The IPv6-in-IPv6 mechanism described in this document is much more | |||
| limited than the general mechanism described in [RFC2473]. The | limited than the general mechanism described in [RFC2473]. The | |||
| willingness of each node in the LLN to decapsulate packets and | willingness of each node in the LLN to decapsulate packets and | |||
| forward them could be exploited by nodes to disguise the origin of an | forward them could be exploited by nodes to disguise the origin of an | |||
| attack. | attack. | |||
| While a typical LLN may be a very poor origin for attack traffic (as | While a typical LLN may be a very poor origin for attack traffic (as | |||
| the networks tend to be very slow, and the nodes often have very low | the networks tend to be very slow, and the nodes often have very low | |||
| duty cycles) given enough nodes, they could still have a significant | duty cycles), given enough nodes, LLNs could still have a significant | |||
| impact, particularly if attack is targeting another LLN. | impact, particularly if attack is targeting another LLN. | |||
| Additionally, some uses of RPL involve large backbone ISP scale | Additionally, some uses of RPL involve large backbone ISP scale | |||
| equipment [I-D.ietf-anima-autonomic-control-plane], which may be | equipment [I-D.ietf-anima-autonomic-control-plane], which may be | |||
| equipped with multiple 100Gb/s interfaces. | equipped with multiple 100Gb/s interfaces. | |||
| Blocking or careful filtering of IPv6-in-IPv6 traffic entering the | Blocking or careful filtering of IPv6-in-IPv6 traffic entering the | |||
| LLN as described above will make sure that any attack that is mounted | LLN as described above will make sure that any attack that is mounted | |||
| must originate from compromised nodes within the LLN. The use of | must originate from compromised nodes within the LLN. The use of | |||
| BCP38 [BCP38] filtering at the RPL root on egress traffic will both | BCP38 [BCP38] filtering at the RPL root on egress traffic will both | |||
| alert the operator to the existence of the attack, as well as drop | alert the operator to the existence of the attack, as well as drop | |||
| skipping to change at page 51, line 34 ¶ | skipping to change at page 53, line 34 ¶ | |||
| be done without the use of IPv6-in-IPv6 headers using forged source | be done without the use of IPv6-in-IPv6 headers using forged source | |||
| addresses. If the attack requires bi-directional communication, then | addresses. If the attack requires bi-directional communication, then | |||
| IPv6-in-IPv6 provides no advantages. | IPv6-in-IPv6 provides no advantages. | |||
| Whenever IPv6-in-IPv6 headers are being proposed, there is a concern | Whenever IPv6-in-IPv6 headers are being proposed, there is a concern | |||
| about creating security issues. In the Security Considerations | about creating security issues. In the Security Considerations | |||
| section of [RFC2473], it was suggested that tunnel entry and exit | section of [RFC2473], it was suggested that tunnel entry and exit | |||
| points can be secured by securing the IPv6 path between them. This | points can be secured by securing the IPv6 path between them. This | |||
| recommendation is not practical for RPL networks. [RFC5406] goes | recommendation is not practical for RPL networks. [RFC5406] goes | |||
| into some detail on what additional details would be needed in order | into some detail on what additional details would be needed in order | |||
| to "Use IPsec". Use of ESP would prevent RFC8138 compression | to "Use IPsec". Use of ESP would prevent [RFC8138] compression | |||
| (compression must occur before encryption), and RFC8138 compression | (compression must occur before encryption), and [RFC8138] compression | |||
| is lossy in a way that prevents use of AH. These are minor issues. | is lossy in a way that prevents use of AH. These are minor issues. | |||
| The major issue is how to establish trust enough such that IKEv2 | The major issue is how to establish trust enough such that IKEv2 | |||
| could be used. This would require a system of certificates to be | could be used. This would require a system of certificates to be | |||
| present in every single node, including any Internet nodes that might | present in every single node, including any Internet nodes that might | |||
| need to communicate with the LLN. Thus, using IPsec requires a | need to communicate with the LLN. Thus, using IPsec requires a | |||
| global PKI in the general case. | global PKI in the general case. | |||
| More significantly, the use of IPsec tunnels to protect the IPv6-in- | More significantly, the use of IPsec tunnels to protect the IPv6-in- | |||
| IPv6 headers would in the general case scale with the square of the | IPv6 headers would in the general case scale with the square of the | |||
| number of nodes. This is a lot of resource for a constrained nodes | number of nodes. This is a lot of resource for a constrained nodes | |||
| skipping to change at page 52, line 15 ¶ | skipping to change at page 54, line 15 ¶ | |||
| recommended. | recommended. | |||
| An LLN with hostile nodes within it would not be protected against | An LLN with hostile nodes within it would not be protected against | |||
| impersonation with the LLN by entry/exit filtering. | impersonation with the LLN by entry/exit filtering. | |||
| 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 disguise the origin of traffic and attack other nodes) with an | (to disguise the origin of traffic and attack other nodes) with an | |||
| IPv6-in-IPv6 header to add the needed RH3 header. As such, the | IPv6-in-IPv6 header to add the needed RH3 header. As such, the | |||
| attacker's RH3 header will not be seen by the network until it | attacker's RH3 header will not be seen by the network until it | |||
| reaches the end host, which will decapsulate it. An end-host should | reaches the end host, which will decapsulate it. An end-host should | |||
| be suspicious about a RH3 header which has additional hops which have | be suspicious about an RH3 header which has additional hops which | |||
| not yet been processed, and SHOULD ignore such a second RH3 header. | have not yet been processed, and SHOULD ignore such a second RH3 | |||
| header. | ||||
| In addition, the LLN will likely use [RFC8138] to compress the IPv6- | In addition, the LLN will likely use [RFC8138] to compress the IPv6- | |||
| in-IPv6 and RH3 headers. As such, the compressor at the RPL-root | in-IPv6 and RH3 headers. As such, the compressor at the RPL-root | |||
| will see the second RH3 header and MAY choose to discard the packet | will see the second RH3 header and MAY choose to discard the packet | |||
| if the RH3 header has not been completely consumed. A consumed | if the RH3 header has not been completely consumed. A consumed | |||
| (inert) RH3 header could be present in a packet that flows from one | (inert) RH3 header could be present in a packet that flows from one | |||
| LLN, crosses the Internet, and enters another LLN. As per the | LLN, crosses the Internet, and enters another LLN. As per the | |||
| discussion in this document, such headers do not need to be removed. | discussion in this document, such headers do not need to be removed. | |||
| However, there is no case described in this document where a RH3 is | However, there is no case described in this document where an RH3 is | |||
| inserted in a non-storing network on traffic that is leaving the LLN, | inserted in a non-storing network on traffic that is leaving the LLN, | |||
| but this document should not preclude such a future innovation. It | but this document should not preclude such a future innovation. It | |||
| should just be noted that an incoming RH3 must be fully consumed, or | should just be noted that an incoming RH3 must be fully consumed, or | |||
| very carefully inspected. | very carefully inspected. | |||
| The RPI, if permitted to enter the LLN, could be used by an attacker | The RPI, if permitted to enter the LLN, could be used by an attacker | |||
| to change the priority of a packet by selecting a different | to change the priority of a packet by selecting a different | |||
| RPLInstanceID, perhaps one with a higher energy cost, for instance. | RPLInstanceID, perhaps one with a higher energy cost, for instance. | |||
| It could also be that not all nodes are reachable in an LLN using the | It could also be that not all nodes are reachable in an LLN using the | |||
| default RPLInstanceID, but a change of RPLInstanceID would permit an | default RPLInstanceID, but a change of RPLInstanceID would permit an | |||
| attacker to bypass such filtering. Like the RH3, a RPI is to be | attacker to bypass such filtering. Like the RH3, an RPI is to be | |||
| inserted by the RPL root on traffic entering the LLN by first | inserted by the RPL root on traffic entering the LLN by first | |||
| inserting an IPv6-in-IPv6 header. The attacker's RPI therefore will | inserting an IPv6-in-IPv6 header. The attacker's RPI therefore will | |||
| not be seen by the network. Upon reaching the destination node the | not be seen by the network. Upon reaching the destination node the | |||
| RPI has no further meaning and is just skipped; the presence of a | RPI has no further meaning and is just skipped; the presence of a | |||
| second RPI will have no meaning to the end node as the packet has | second RPI will have no meaning to the end node as the packet has | |||
| already been identified as being at it's final destination. | already been identified as being at it's final destination. | |||
| The RH3 and RPIs could be abused by an attacker inside of the network | The RH3 and RPIs could be abused by an attacker inside of the network | |||
| to route packets on non-obvious ways, perhaps eluding observation. | to route packets on non-obvious ways, perhaps eluding observation. | |||
| This usage is in fact part of [RFC6997] and can not be restricted at | This usage appears consistent with a normal operation of [RFC6997] | |||
| all. This is a feature, not a bug. | and can not be 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 IPv6-in-IPv6 headers, and this document does not change | to the use of IPv6-in-IPv6 headers, and this document does not change | |||
| that analysis. | that analysis. | |||
| Nodes within the LLN can use the IPv6-in-IPv6 mechanism to mount an | Nodes within the LLN can use the IPv6-in-IPv6 mechanism to mount an | |||
| attack on another part of the LLN, while disguising the origin of the | attack on another part of the LLN, while disguising the origin of the | |||
| attack. The mechanism can even be abused to make it appear that the | attack. The mechanism can even be abused to make it appear that the | |||
| attack is coming from outside the LLN, and unless countered, this | attack is coming from outside the LLN, and unless countered, this | |||
| could be used to mount a Distributed Denial Of Service attack upon | could be used to mount a Distributed Denial Of Service attack upon | |||
| skipping to change at page 53, line 21 ¶ | skipping to change at page 55, line 25 ¶ | |||
| such attacks already seen in the real world. | such attacks already seen in the real world. | |||
| If an attack comes from inside of LLN, it can be alleviated with SAVI | If an attack comes from inside of LLN, it can be alleviated with SAVI | |||
| (Source Address Validation Improvement) using [RFC8505] with | (Source Address Validation Improvement) using [RFC8505] with | |||
| [I-D.ietf-6lo-ap-nd]. The attacker will not be able to source | [I-D.ietf-6lo-ap-nd]. The attacker will not be able to source | |||
| traffic with an address that is not registered, and the registration | traffic with an address that is not registered, and the registration | |||
| process checks for topological correctness. Notice that there is an | process checks for topological correctness. Notice that there is an | |||
| L2 authentication in most of the cases. If an attack comes from | L2 authentication in most of the cases. If an attack comes from | |||
| outside LLN IPv6-in- IPv6 can be used to hide inner routing headers, | outside LLN IPv6-in- IPv6 can be used to hide inner routing headers, | |||
| but by construction, the RH3 can typically only address nodes within | but by construction, the RH3 can typically only address nodes within | |||
| the LLN. That is, a RH3 with a CmprI less than 8 , should be | the LLN. That is, an RH3 with a CmprI less than 8 , should be | |||
| considered an attack (see RFC6554, section 3). | considered an attack (see RFC6554, section 3). | |||
| Nodes outside of the LLN will need to pass IPv6-in-IPv6 traffic | Nodes outside of the LLN will need to pass IPv6-in-IPv6 traffic | |||
| through the RPL root to perform this attack. To counter, the RPL | through the RPL root to perform this attack. To counter, the RPL | |||
| root SHOULD either restrict ingress of IPv6-in-IPv6 packets (the | root SHOULD either restrict ingress of IPv6-in-IPv6 packets (the | |||
| simpler solution), or it SHOULD walk the IP header extension chain | simpler solution), or it SHOULD walk the IP header extension chain | |||
| until it can inspect the upper-layer-payload as described in | until it can inspect the upper-layer-payload as described in | |||
| [RFC7045]. In particular, the RPL root SHOULD do [BCP38] processing | [RFC7045]. In particular, the RPL root SHOULD do [BCP38] processing | |||
| on the source addresses of all IP headers that it examines in both | on the source addresses of all IP headers that it examines in both | |||
| directions. | directions. | |||
| skipping to change at page 53, line 51 ¶ | skipping to change at page 56, line 6 ¶ | |||
| 13. Acknowledgments | 13. Acknowledgments | |||
| This work is done thanks to the grant given by the StandICT.eu | This work is done thanks to the grant given by the StandICT.eu | |||
| project. | project. | |||
| A special BIG thanks to C. M. Heard for the help with the | A special BIG thanks to C. M. Heard for the help with the | |||
| Section 4. Much of the redaction in that section is based on his | Section 4. Much of the redaction in that section is based on his | |||
| comments. | comments. | |||
| Additionally, the authors would like to acknowledge the review, | Additionally, the authors would like to acknowledge the review, | |||
| feedback, and comments of (alphabetical order): Robert Cragie, Simon | feedback, and comments of (alphabetical order): Dominique Barthel, | |||
| Duquennoy, Ralph Droms, Cenk Guendogan, Rahul Jadhav, Benjamin Kaduk, | Robert Cragie, Simon Duquennoy, Ralph Droms, Cenk Guendogan, Rahul | |||
| Matthias Kovatsch, Charlie Perkins, Alvaro Retana, Peter van der | Jadhav, Benjamin Kaduk, Matthias Kovatsch, Charlie Perkins, Alvaro | |||
| Stok, Xavier Vilajosana, Eric Vyncke and Thomas Watteyne. | Retana, Peter van der Stok, Xavier Vilajosana, Eric Vyncke and Thomas | |||
| Watteyne. | ||||
| 14. References | 14. References | |||
| 14.1. Normative References | 14.1. Normative References | |||
| [BCP38] Ferguson, P. and D. Senie, "Network Ingress Filtering: | [BCP38] 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, DOI 10.17487/RFC2827, | Address Spoofing", BCP 38, RFC 2827, DOI 10.17487/RFC2827, | |||
| May 2000, <https://www.rfc-editor.org/info/bcp38>. | May 2000, <https://www.rfc-editor.org/info/bcp38>. | |||
| skipping to change at page 55, line 44 ¶ | skipping to change at page 57, line 44 ¶ | |||
| [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-ap-nd] | [I-D.ietf-6lo-ap-nd] | |||
| Thubert, P., Sarikaya, B., Sethi, M., and R. Struik, | Thubert, P., Sarikaya, B., Sethi, M., and R. Struik, | |||
| "Address Protected Neighbor Discovery for Low-power and | "Address Protected Neighbor Discovery for Low-power and | |||
| Lossy Networks", draft-ietf-6lo-ap-nd-19 (work in | Lossy Networks", draft-ietf-6lo-ap-nd-20 (work in | |||
| progress), February 2020. | progress), March 2020. | |||
| [I-D.ietf-6lo-backbone-router] | [I-D.ietf-6lo-backbone-router] | |||
| Thubert, P., Perkins, C., and E. Levy-Abegnoli, "IPv6 | Thubert, P., Perkins, C., and E. Levy-Abegnoli, "IPv6 | |||
| Backbone Router", draft-ietf-6lo-backbone-router-17 (work | Backbone Router", draft-ietf-6lo-backbone-router-19 (work | |||
| in progress), February 2020. | in progress), March 2020. | |||
| [I-D.ietf-6tisch-dtsecurity-zerotouch-join] | [I-D.ietf-6tisch-dtsecurity-zerotouch-join] | |||
| Richardson, M., "6tisch Zero-Touch Secure Join protocol", | Richardson, M., "6tisch Zero-Touch Secure Join protocol", | |||
| draft-ietf-6tisch-dtsecurity-zerotouch-join-04 (work in | draft-ietf-6tisch-dtsecurity-zerotouch-join-04 (work in | |||
| progress), July 2019. | progress), July 2019. | |||
| [I-D.ietf-anima-autonomic-control-plane] | [I-D.ietf-anima-autonomic-control-plane] | |||
| Eckert, T., Behringer, M., and S. Bjarnason, "An Autonomic | Eckert, T., Behringer, M., and S. Bjarnason, "An Autonomic | |||
| Control Plane (ACP)", draft-ietf-anima-autonomic-control- | Control Plane (ACP)", draft-ietf-anima-autonomic-control- | |||
| plane-22 (work in progress), February 2020. | plane-24 (work in progress), March 2020. | |||
| [I-D.ietf-anima-bootstrapping-keyinfra] | [I-D.ietf-anima-bootstrapping-keyinfra] | |||
| Pritikin, M., Richardson, M., Eckert, T., Behringer, M., | Pritikin, M., Richardson, M., Eckert, T., Behringer, M., | |||
| and K. Watsen, "Bootstrapping Remote Secure Key | and K. Watsen, "Bootstrapping Remote Secure Key | |||
| Infrastructures (BRSKI)", draft-ietf-anima-bootstrapping- | Infrastructures (BRSKI)", draft-ietf-anima-bootstrapping- | |||
| keyinfra-35 (work in progress), February 2020. | keyinfra-38 (work in progress), March 2020. | |||
| [I-D.ietf-intarea-tunnels] | [I-D.ietf-intarea-tunnels] | |||
| Touch, J. and M. Townsley, "IP Tunnels in the Internet | Touch, J. and M. Townsley, "IP Tunnels in the Internet | |||
| Architecture", draft-ietf-intarea-tunnels-10 (work in | Architecture", draft-ietf-intarea-tunnels-10 (work in | |||
| progress), September 2019. | progress), September 2019. | |||
| [I-D.ietf-roll-unaware-leaves] | [I-D.ietf-roll-unaware-leaves] | |||
| Thubert, P. and M. Richardson, "Routing for RPL Leaves", | Thubert, P. and M. Richardson, "Routing for RPL Leaves", | |||
| draft-ietf-roll-unaware-leaves-09 (work in progress), | draft-ietf-roll-unaware-leaves-11 (work in progress), | |||
| January 2020. | March 2020. | |||
| [RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6 | [RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6 | |||
| (IPv6) Specification", RFC 2460, DOI 10.17487/RFC2460, | (IPv6) Specification", RFC 2460, DOI 10.17487/RFC2460, | |||
| December 1998, <https://www.rfc-editor.org/info/rfc2460>. | December 1998, <https://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, <https://www.rfc-editor.org/info/rfc2473>. | December 1998, <https://www.rfc-editor.org/info/rfc2473>. | |||
| [RFC4443] Conta, A., Deering, S., and M. Gupta, Ed., "Internet | [RFC4443] Conta, A., Deering, S., and M. Gupta, Ed., "Internet | |||
| End of changes. 177 change blocks. | ||||
| 328 lines changed or deleted | 401 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/ | ||||