| < draft-ietf-roll-dao-projection-21.txt | draft-ietf-roll-dao-projection-22.txt > | |||
|---|---|---|---|---|
| ROLL P. Thubert, Ed. | ROLL P. Thubert, Ed. | |||
| Internet-Draft Cisco Systems | Internet-Draft Cisco Systems | |||
| Intended status: Standards Track R.A. Jadhav | Intended status: Standards Track R.A. Jadhav | |||
| Expires: 31 March 2022 Huawei Tech | Expires: 29 May 2022 Huawei Tech | |||
| M. Gillmore | M. Gillmore | |||
| Itron | Itron | |||
| 27 September 2021 | 25 November 2021 | |||
| Root initiated routing state in RPL | Root initiated routing state in RPL | |||
| draft-ietf-roll-dao-projection-21 | draft-ietf-roll-dao-projection-22 | |||
| Abstract | Abstract | |||
| This document extends RFC 6550, RFC 6553,and RFC 8138 to enable a RPL | This document extends RFC 6550, RFC 6553, and RFC 8138 to enable a | |||
| Root to install and maintain Projected Routes within its DODAG, along | RPL Root to install and maintain Projected Routes within its DODAG, | |||
| a selected set of nodes that may or may not include self, for a | along a selected set of nodes that may or may not include self, for a | |||
| chosen duration. This potentially enables routes that are more | chosen duration. This potentially enables routes that are more | |||
| optimized or resilient than those obtained with the classical | optimized or resilient than those obtained with the classical | |||
| distributed operation of RPL, either in terms of the size of a | distributed operation of RPL, either in terms of the size of a | |||
| Routing Header or in terms of path length, which impacts both the | Routing Header or in terms of path length, which impacts both the | |||
| latency and the packet delivery ratio. | latency and the packet delivery ratio. | |||
| 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. | |||
| skipping to change at page 1, line 40 ¶ | skipping to change at page 1, line 40 ¶ | |||
| 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 31 March 2022. | This Internet-Draft will expire on 29 May 2022. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2021 IETF Trust and the persons identified as the | Copyright (c) 2021 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 (https://trustee.ietf.org/ | Provisions Relating to IETF Documents (https://trustee.ietf.org/ | |||
| license-info) in effect on the date of publication of this document. | license-info) in effect on the date of publication of this document. | |||
| Please review these documents carefully, as they describe your rights | Please review these documents carefully, as they describe your rights | |||
| and restrictions with respect to this document. Code Components | and restrictions with respect to this document. Code Components | |||
| extracted from this document must include Simplified BSD License text | extracted from this document must include Revised BSD License text as | |||
| as described in Section 4.e of the Trust Legal Provisions and are | described in Section 4.e of the Trust Legal Provisions and are | |||
| provided without warranty as described in the Simplified BSD License. | provided without warranty as described in the Revised BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2.1. Requirements Language . . . . . . . . . . . . . . . . . . 4 | 2.1. Requirements Language . . . . . . . . . . . . . . . . . . 4 | |||
| 2.2. References . . . . . . . . . . . . . . . . . . . . . . . 4 | 2.2. References . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 2.3. Glossary . . . . . . . . . . . . . . . . . . . . . . . . 4 | 2.3. Glossary . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 2.4. Domain Terms . . . . . . . . . . . . . . . . . . . . . . 5 | 2.4. Domain Terms . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 3. Context and Goal . . . . . . . . . . . . . . . . . . . . . . 6 | 2.4.1. Projected Route . . . . . . . . . . . . . . . . . . . 6 | |||
| 3.1. RPL Applicability . . . . . . . . . . . . . . . . . . . . 7 | 2.4.2. Projected DAO . . . . . . . . . . . . . . . . . . . . 6 | |||
| 3.2. RPL Routing Modes . . . . . . . . . . . . . . . . . . . . 8 | 2.4.3. Path . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 3.3. Requirements . . . . . . . . . . . . . . . . . . . . . . 9 | 2.4.4. Routing Stretch . . . . . . . . . . . . . . . . . . . 6 | |||
| 3.3.1. Loose Source Routing . . . . . . . . . . . . . . . . 9 | 2.4.5. Track . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 3.3.2. East-West Routes . . . . . . . . . . . . . . . . . . 10 | 3. Context and Goal . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 3.4. On Tracks . . . . . . . . . . . . . . . . . . . . . . . . 12 | 3.1. RPL Applicability . . . . . . . . . . . . . . . . . . . . 9 | |||
| 3.5. Serial Track Signaling . . . . . . . . . . . . . . . . . 13 | 3.2. RPL Routing Modes . . . . . . . . . . . . . . . . . . . . 10 | |||
| 3.5.1. Using Storing Mode Segments . . . . . . . . . . . . . 14 | 3.3. Requirements . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 3.5.2. Using Non-Storing Mode joining Tracks . . . . . . . . 20 | 3.3.1. Loose Source Routing . . . . . . . . . . . . . . . . 11 | |||
| 3.6. Complex Tracks . . . . . . . . . . . . . . . . . . . . . 27 | 3.3.2. East-West Routes . . . . . . . . . . . . . . . . . . 13 | |||
| 3.7. Scope and Expectations . . . . . . . . . . . . . . . . . 29 | 3.4. On Tracks . . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 4. Extending existing RFCs . . . . . . . . . . . . . . . . . . . 31 | 3.4.1. Building Tracks With RPL . . . . . . . . . . . . . . 15 | |||
| 4.1. Extending RFC 6550 . . . . . . . . . . . . . . . . . . . 31 | 3.4.2. Tracks and RPL Instances . . . . . . . . . . . . . . 15 | |||
| 4.1.1. Projected DAO . . . . . . . . . . . . . . . . . . . . 31 | 3.5. Serial Track Signaling . . . . . . . . . . . . . . . . . 16 | |||
| 4.1.2. Via Information Option . . . . . . . . . . . . . . . 33 | 3.5.1. Using Storing Mode Segments . . . . . . . . . . . . . 17 | |||
| 4.1.3. Sibling Information Option . . . . . . . . . . . . . 33 | 3.5.2. Using Non-Storing Mode joining Tracks . . . . . . . . 24 | |||
| 4.1.4. P-DAO Request . . . . . . . . . . . . . . . . . . . . 33 | 3.6. Complex Tracks . . . . . . . . . . . . . . . . . . . . . 31 | |||
| 4.1.5. Extending the RPI . . . . . . . . . . . . . . . . . . 33 | 3.7. Scope and Expectations . . . . . . . . . . . . . . . . . 33 | |||
| 4.2. Extending RFC 6553 . . . . . . . . . . . . . . . . . . . 34 | 3.7.1. External Dependencies . . . . . . . . . . . . . . . . 33 | |||
| 4.3. Extending RFC 8138 . . . . . . . . . . . . . . . . . . . 35 | 3.7.2. Positioning vs. Related IETF Standards . . . . . . . 33 | |||
| 5. New RPL Control Messages and Options . . . . . . . . . . . . 36 | 4. Extending existing RFCs . . . . . . . . . . . . . . . . . . . 35 | |||
| 5.1. New P-DAO Request Control Message . . . . . . . . . . . . 36 | 4.1. Extending RFC 6550 . . . . . . . . . . . . . . . . . . . 35 | |||
| 5.2. New PDR-ACK Control Message . . . . . . . . . . . . . . . 37 | 4.1.1. Projected DAO . . . . . . . . . . . . . . . . . . . . 36 | |||
| 5.3. Via Information Options . . . . . . . . . . . . . . . . . 39 | 4.1.2. Via Information Option . . . . . . . . . . . . . . . 37 | |||
| 5.4. Sibling Information Option . . . . . . . . . . . . . . . 42 | 4.1.3. Sibling Information Option . . . . . . . . . . . . . 37 | |||
| 6. Root Initiated Routing State . . . . . . . . . . . . . . . . 44 | 4.1.4. P-DAO Request . . . . . . . . . . . . . . . . . . . . 38 | |||
| 6.1. Requesting a Track . . . . . . . . . . . . . . . . . . . 44 | 4.1.5. Extending the RPI . . . . . . . . . . . . . . . . . . 38 | |||
| 6.2. Identifying a Track . . . . . . . . . . . . . . . . . . . 45 | 4.1.6. Additional Flag in the RPL DODAG Configuration | |||
| 6.3. Installing a Track . . . . . . . . . . . . . . . . . . . 46 | Option . . . . . . . . . . . . . . . . . . . . . . . 38 | |||
| 6.3.1. Signaling a Projected Route . . . . . . . . . . . . . 47 | 4.2. Extending RFC 6553 . . . . . . . . . . . . . . . . . . . 39 | |||
| 6.3.2. Installing a Track Segment with a Storing Mode | 4.3. Extending RFC 8138 . . . . . . . . . . . . . . . . . . . 40 | |||
| P-Route . . . . . . . . . . . . . . . . . . . . . . . 48 | 5. New RPL Control Messages and Options . . . . . . . . . . . . 41 | |||
| 5.1. New P-DAO Request Control Message . . . . . . . . . . . . 42 | ||||
| 6.3.3. Installing a Track Leg with a Non-Storing Mode | 5.2. New PDR-ACK Control Message . . . . . . . . . . . . . . . 43 | |||
| P-Route . . . . . . . . . . . . . . . . . . . . . . . 50 | 5.3. Via Information Options . . . . . . . . . . . . . . . . . 44 | |||
| 6.4. Tearing Down a P-Route . . . . . . . . . . . . . . . . . 52 | 5.4. Sibling Information Option . . . . . . . . . . . . . . . 47 | |||
| 6.5. Maintaining a Track . . . . . . . . . . . . . . . . . . . 52 | 6. Root Initiated Routing State . . . . . . . . . . . . . . . . 49 | |||
| 6.5.1. Maintaining a Track Segment . . . . . . . . . . . . . 53 | 6.1. RPL Network Setup . . . . . . . . . . . . . . . . . . . . 49 | |||
| 6.5.2. Maintaining a Track Leg . . . . . . . . . . . . . . . 53 | 6.2. Requesting a Track . . . . . . . . . . . . . . . . . . . 49 | |||
| 6.6. Encapsulating and Forwarding Along a Track . . . . . . . 54 | 6.3. Identifying a Track . . . . . . . . . . . . . . . . . . . 50 | |||
| 6.7. Compression of the RPL Artifacts . . . . . . . . . . . . 56 | 6.4. Installing a Track . . . . . . . . . . . . . . . . . . . 51 | |||
| 7. Lesser Constrained Variations . . . . . . . . . . . . . . . . 58 | 6.4.1. Signaling a Projected Route . . . . . . . . . . . . . 52 | |||
| 7.1. Storing Mode Main DODAG . . . . . . . . . . . . . . . . . 58 | 6.4.2. Installing a Track Segment with a Storing Mode | |||
| 7.2. A Track as a Full DODAG . . . . . . . . . . . . . . . . . 60 | P-Route . . . . . . . . . . . . . . . . . . . . . . . 53 | |||
| 8. Profiles . . . . . . . . . . . . . . . . . . . . . . . . . . 61 | 6.4.3. Installing a Track Leg with a Non-Storing Mode | |||
| 9. Security Considerations . . . . . . . . . . . . . . . . . . . 63 | P-Route . . . . . . . . . . . . . . . . . . . . . . . 55 | |||
| 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 63 | 6.5. Tearing Down a P-Route . . . . . . . . . . . . . . . . . 57 | |||
| 10.1. New Elective 6LoWPAN Routing Header Type . . . . . . . . 64 | 6.6. Maintaining a Track . . . . . . . . . . . . . . . . . . . 57 | |||
| 10.2. New Critical 6LoWPAN Routing Header Type . . . . . . . . 64 | 6.6.1. Maintaining a Track Segment . . . . . . . . . . . . . 58 | |||
| 10.3. New Subregistry For The RPL Option Flags . . . . . . . . 64 | 6.6.2. Maintaining a Track Leg . . . . . . . . . . . . . . . 58 | |||
| 10.4. New RPL Control Codes . . . . . . . . . . . . . . . . . 65 | 6.7. Encapsulating and Forwarding Along a Track . . . . . . . 59 | |||
| 10.5. New RPL Control Message Options . . . . . . . . . . . . 65 | 6.8. Compression of the RPL Artifacts . . . . . . . . . . . . 61 | |||
| 10.6. SubRegistry for the Projected DAO Request Flags . . . . 66 | 7. Lesser Constrained Variations . . . . . . . . . . . . . . . . 63 | |||
| 10.7. SubRegistry for the PDR-ACK Flags . . . . . . . . . . . 66 | 7.1. Storing Mode Main DODAG . . . . . . . . . . . . . . . . . 63 | |||
| 10.8. Subregistry for the PDR-ACK Acceptance Status Values . . 66 | 7.2. A Track as a Full DODAG . . . . . . . . . . . . . . . . . 65 | |||
| 10.9. Subregistry for the PDR-ACK Rejection Status Values . . 67 | 8. Profiles . . . . . . . . . . . . . . . . . . . . . . . . . . 66 | |||
| 10.10. SubRegistry for the Via Information Options Flags . . . 67 | 9. Backwards Compatibility . . . . . . . . . . . . . . . . . . . 68 | |||
| 10.11. SubRegistry for the Sibling Information Option Flags . . 68 | 10. Security Considerations . . . . . . . . . . . . . . . . . . . 69 | |||
| 10.12. New destination Advertisement Object Flag . . . . . . . 68 | 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 69 | |||
| 10.13. New ICMPv6 Error Code . . . . . . . . . . . . . . . . . 68 | 11.1. RPL DODAG Configuration Option Flag . . . . . . . . . . 69 | |||
| 10.14. New RPL Rejection Status values . . . . . . . . . . . . 69 | 11.2. Elective 6LoWPAN Routing Header Type . . . . . . . . . . 70 | |||
| 11. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 69 | 11.3. Critical 6LoWPAN Routing Header Type . . . . . . . . . . 70 | |||
| 12. Normative References . . . . . . . . . . . . . . . . . . . . 69 | 11.4. Subregistry For The RPL Option Flags . . . . . . . . . . 70 | |||
| 13. Informative References . . . . . . . . . . . . . . . . . . . 71 | 11.5. RPL Control Codes . . . . . . . . . . . . . . . . . . . 71 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 73 | 11.6. RPL Control Message Options . . . . . . . . . . . . . . 71 | |||
| 11.7. SubRegistry for the Projected DAO Request Flags . . . . 72 | ||||
| 11.8. SubRegistry for the PDR-ACK Flags . . . . . . . . . . . 72 | ||||
| 11.9. Subregistry for the PDR-ACK Acceptance Status Values . . 73 | ||||
| 11.10. Subregistry for the PDR-ACK Rejection Status Values . . 73 | ||||
| 11.11. SubRegistry for the Via Information Options Flags . . . 73 | ||||
| 11.12. SubRegistry for the Sibling Information Option Flags . . 74 | ||||
| 11.13. destination Advertisement Object Flag . . . . . . . . . 74 | ||||
| 11.14. New ICMPv6 Error Code . . . . . . . . . . . . . . . . . 75 | ||||
| 11.15. RPL Rejection Status values . . . . . . . . . . . . . . 75 | ||||
| 12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 76 | ||||
| 13. Normative References . . . . . . . . . . . . . . . . . . . . 76 | ||||
| 14. Informative References . . . . . . . . . . . . . . . . . . . 77 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 80 | ||||
| 1. Introduction | 1. Introduction | |||
| RPL, the "Routing Protocol for Low Power and Lossy Networks" [RPL] | RPL, the "Routing Protocol for Low Power and Lossy Networks" [RPL] | |||
| (LLNs), is an anisotropic Distance Vector protocol that is well- | (LLNs), is an anisotropic Distance Vector protocol that is well- | |||
| suited for application in a variety of low energy Internet of Things | suited for application in a variety of low energy Internet of Things | |||
| (IoT) networks where stretched P2P paths are acceptable vs. the | (IoT) networks where stretched P2P paths are acceptable vs. the | |||
| signaling and state overhead involved in maintaining shortest paths | signaling and state overhead involved in maintaining shortest paths | |||
| across. | across. | |||
| RPL forms destination Oriented Directed Acyclic Graphs (DODAGs) in | RPL forms destination Oriented Directed Acyclic Graphs (DODAGs) in | |||
| which the Root often acts as the Border router to connect the RPL | which the Root often acts as the Border router to connect the RPL | |||
| domain to the IP backbone and routes along that graph up, towards the | domain to the IP backbone and routes along that graph up, towards the | |||
| Root, and down towards the nodes. | Root, and down towards the nodes. | |||
| With this specification, a Path Computation Element [PCE] in an | With this specification, an abstract routing function called a Path | |||
| external controller interacts with the RPL Root to compute centrally | Computation Element [PCE] (e.g., located in an central controller or | |||
| shorter Peer to Peer (P2P) paths within a pre-existing RPL Main | collocated with the Root) interacts with the RPL Root to compute Peer | |||
| DODAG. The topological information that is passed to the PCE is | to Peer (P2P) paths within a pre-existing RPL Main DODAG. The | |||
| derived from the DODAG that is already available at the Root in RPL | topological information that is passed to the PCE is derived from the | |||
| Non-Storing Mode. This specification introduces protocol extensions | DODAG that is already available at the Root in RPL Non-Storing Mode. | |||
| that enrich the topological information that is available at the Root | This specification introduces protocol extensions that enrich the | |||
| and passed to the PCE. | topological information that is available at the Root and passed to | |||
| the PCE. | ||||
| Based on usage, path length, and knowledge of available resources | Based on usage, path length, and knowledge of available resources | |||
| such as battery levels and reservable buffers in the nodes, the PCE | such as battery levels and reservable buffers in the nodes, the PCE | |||
| with a global visibility on the system can optimize the computed | with a global visibility on the system can optimize the computed | |||
| routes for the application needs, including the capability to provide | routes for the application needs, including the capability to provide | |||
| path redundancy. This specification also introduces protocol | path redundancy. This specification also introduces protocol | |||
| extensions that enable the Root to translates the computed paths into | extensions that enable the Root to translates the computed paths into | |||
| RPL and install them as Projected Routes (aka P-Routes) inside the | RPL and install them as Projected Routes (aka P-Routes) inside the | |||
| DODAG on behalf of a PCE. | DODAG on behalf of a PCE. | |||
| skipping to change at page 5, line 26 ¶ | skipping to change at page 5, line 47 ¶ | |||
| NSM-VIO: A Source-Routed Via Information Option, used in Non-Storing | NSM-VIO: A Source-Routed Via Information Option, used in Non-Storing | |||
| Mode P-DAO messages. | Mode P-DAO messages. | |||
| SLO: Service Level Objective | SLO: Service Level Objective | |||
| TIO: RPL Transit Information Option | TIO: RPL Transit Information Option | |||
| SM-VIO: A strict Via Information Option, used in Storing Mode P-DAO | SM-VIO: A strict Via Information Option, used in Storing Mode P-DAO | |||
| messages. | messages. | |||
| VIO: A Via Information Option; it can be a SM-VIO or an NSM-VIO. | VIO: A Via Information Option; it can be a SM-VIO or an NSM-VIO. | |||
| 2.4. Domain Terms | 2.4. Domain Terms | |||
| Projected Route: A RPL P-Route is a RPL route that is computed | This specification uses the following terminology: | |||
| remotely by a PCE, and installed and maintained by a RPL Root on | ||||
| behalf of the PCE. It is installed as a state that signals that | 2.4.1. Projected Route | |||
| destinations (aka Targets) are reachable along a sequence of | ||||
| nodes. | A RPL P-Route is a RPL route that is computed remotely by a PCE, and | |||
| Projected DAO: A DAO message used to install a P-Route. | installed and maintained by a RPL Root on behalf of the PCE. It is | |||
| Path: Quoting section 1.1.3 of [INT-ARCHI]: "At a given moment, all | installed as a state that signals that destinations (aka Targets) are | |||
| the IP datagrams from a particular source host to a particular | reachable along a sequence of nodes. | |||
| destination host will typically traverse the same sequence of | ||||
| gateways. We use the term "path" for this sequence. Note that a | 2.4.2. Projected DAO | |||
| path is uni-directional; it is not unusual to have different paths | ||||
| in the two directions between a given host pair.". | A DAO message used to install a P-Route. | |||
| Section 2 of [I-D.irtf-panrg-path-properties] points to a longer, | ||||
| more modern definition of path, which begins as follows: " A | 2.4.3. Path | |||
| sequence of adjacent path elements over which a packet can be | ||||
| transmitted, starting and ending with a node. A path is | Quoting section 1.1.3 of [INT-ARCHI]: | |||
| unidirectional. Paths are time-dependent, i.e., the sequence of | ||||
| path elements over which packets are sent from one node to another | | At a given moment, all the IP datagrams from a particular source | |||
| may change. A path is defined between two nodes. " | | host to a particular destination host will typically traverse the | |||
| It follows that the general acceptance of a path is a linear | | same sequence of gateways. We use the term "path" for this | |||
| sequence of nodes, as opposed to a multi-dimensional graph. In | | sequence. Note that a path is uni-directional; it is not unusual | |||
| the context of this document, a path is observed by following one | | to have different paths in the two directions between a given host | |||
| copy of a packet that is injected in a Track and possibly | | pair. | |||
| replicated within. | ||||
| Track: A networking graph that can be followed to transport packets | Section 2 of [I-D.irtf-panrg-path-properties] points to a longer, | |||
| with equivalent treatment; as opposed to the definition of a path | more modern definition of path, which begins as follows: | |||
| above, a Track Track is not necessarily linear. It may contain | ||||
| multiple paths that may fork and rejoin, and may enable the RAW | | A sequence of adjacent path elements over which a packet can be | |||
| Packet ARQ, Replication, Elimination, and Overhearing (PAREO) | | transmitted, starting and ending with a node. A path is | |||
| operations. | | unidirectional. Paths are time-dependent, i.e., the sequence of | |||
| This specification builds Tracks that are DODAGs oriented towards | | path elements over which packets are sent from one node to another | |||
| a Track Ingress, and the forward direction for packets is East- | | may change. A path is defined between two nodes. | |||
| West from the Track Ingress to one of the possibly multiple Track | ||||
| Egress Nodes, which is also down the DODAG. | It follows that the general acceptance of a path is a linear sequence | |||
| The Track may be strictly connected, meaning that the vertices are | of nodes, as opposed to a multi-dimensional graph. In the context of | |||
| adjacent, or loosely connected, meaning that the vertices are | this document, a path is observed by following one copy of a packet | |||
| connected using Segments that are associated to the same Track. | that is injected in a Track and possibly replicated within. | |||
| TrackID: A RPL Local InstanceID that identifies a Track using the | ||||
| namespace owned ny the Track Ingress. The TrackID is associated | 2.4.4. Routing Stretch | |||
| with the IPv6 Address of the Track Ingress that is used as | ||||
| DODAGID, and together they form a unique identification of the | RPL is anisotropic, meaning that it is directional, or more exactly | |||
| Track (see the definition of DODAGID in section 2 of [RPL]. | polar. RPL does not behave the same way "down" with multicast DIO | |||
| Serial Track: A Track that has only one path. | messages that form the DODAG and "up" with unicast DAO messages that | |||
| Stand-Alone: A single P-DAO that fully defines a Track, e.g., a | follow the DODAG. This is in contrast with traditional IGPs that | |||
| Serial Track installed with a single Storing Mode Via Information | operate the same in all directions and are thus called isotropic. | |||
| option (SM-VIO). | ||||
| subTrack: A Track within a Track. As the Non-Storing Mode Via | The term Routing Stretch denotes the length of a path, as compared | |||
| Information option (NSM-VIO) can only signal a loose sequence of | with a shortest path, which can be a abstract concepts in RPL when | |||
| nodes, it takes a number of them to signal a complex Track. Each | the metrics are statistical and dynamic, and the concept of short | |||
| NSM-VIO for the same TrackId but a different Segment ID signals a | varies with the Objective Function. | |||
| different subTracks that the Track Ingress adds to the topology. | ||||
| Track Leg: An end-to-end East-West serial path that can be a Track | The RPL DODAG optimizes the P2MP (from Root) and MP2P (to Root) | |||
| by itself or a subTrack of a complex Track. With this | paths, but the P2P (node to node) traffic has to follow the same | |||
| specification, a Leg is is installed by the Root of the main DODAG | DODAG. Following the DODAG, the RPL datapath passes via a common | |||
| using Non-Storing Mode P-DAO messages, and it is expressed as a | parent in Storing Mode and via the Root in Non-Storing Mode. This | |||
| loose sequence of nodes that are joined by Track Segments. | typically involves more hops and more latency than the minimum | |||
| Track Segment: A serial path formed by a strict sequence of nodes, | possible for a direct P2P path that an isotropic protocol would | |||
| along which a P-Route is installed. With this specification, a | compute. We refer to this elongated path as stretched. | |||
| Segment is typically installed by the Root of the main DODAG using | ||||
| Storing Mode P-DAO messages. A Segment used as the topological | 2.4.5. Track | |||
| edge of a Track. Since this specification builds only DODAGs, all | ||||
| Segments are oriented from Ingress (East) to Egress (West), as | A networking graph that can be followed to transport packets with | |||
| opposed to the general RAW model, which allows North/South | equivalent treatment; as opposed to the definition of a path above, a | |||
| Segments that can be bidirectional. | Track is not necessarily linear. It may contain multiple paths that | |||
| may fork and rejoin, and may enable the RAW Packet ARQ, Replication, | ||||
| Elimination, and Overhearing (PAREO) operations. | ||||
| A ==> B ==> C -=- F ==> G ==> H T1 I: Ingress | ||||
| / \ / \ / E: Egress | ||||
| I O E -=- T2 T1, T2, T3: | ||||
| \ / \ / \ External | ||||
| P ==> Q ==> R -=- T ==> U ==> V T3 Targets | ||||
| I ==> A ==> B ==> C : a segment to targets F and O | ||||
| I --> F --> E : a leg to targets T1, T2, T3 | ||||
| I, A, B, C, F, G, H, E : a path to T1, T2, T3 | ||||
| Figure 1: A Track and its Components | ||||
| This specification builds Tracks that are DODAGs oriented towards a | ||||
| Track Ingress, and the forward direction for packets (aka East-West) | ||||
| is from the Track Ingress to one of the possibly multiple Track | ||||
| Egress Nodes, which is also down the DODAG. | ||||
| The Track may be strictly connected, meaning that the vertices are | ||||
| adjacent, or loosely connected, meaning that the vertices are | ||||
| connected using Segments that are associated to the same Track. | ||||
| 2.4.5.1. TrackID | ||||
| A RPL Local InstanceID that identifies a Track using the namespace | ||||
| owned by the Track Ingress. The TrackID is associated with the IPv6 | ||||
| Address of the Track Ingress that is used as DODAGID, and together | ||||
| they form a unique identification of the Track (see the definition of | ||||
| DODAGID in section 2 of [RPL]. | ||||
| 2.4.5.2. namespace | ||||
| The term namespace is used to refer to the scope of the TrackID. The | ||||
| TrackID is locally significant within its namespace. The namespace | ||||
| is identified by the DODAGID for the Track. The tuple (DODAGID, | ||||
| TrackID) is globally unique. | ||||
| 2.4.5.3. Serial Track | ||||
| A Track that has only one path. | ||||
| 2.4.5.4. Stand-Alone | ||||
| A single P-DAO that fully defines a Track, e.g., a Serial Track | ||||
| installed with a single Storing Mode Via Information option (SM-VIO). | ||||
| 2.4.5.5. Stitching | ||||
| This specification using the term stitching to indicate that a track | ||||
| is piped to another one, meaning that traffic out of the first is | ||||
| injected in the other. | ||||
| 2.4.5.6. subTrack | ||||
| A Track within a Track. As the Non-Storing Mode Via Information | ||||
| option (NSM-VIO) can only signal a loose sequence of nodes, it takes | ||||
| a number of them to signal a complex Track. Each NSM-VIO for the | ||||
| same TrackId but a different Segment ID signals a different subTracks | ||||
| that the Track Ingress adds to the topology. | ||||
| 2.4.5.7. Leg | ||||
| An end-to-end East-West serial path that can be a Track by itself or | ||||
| a subTrack of a complex Track. With this specification, a Leg is is | ||||
| installed by the Root of the main DODAG using Non-Storing Mode P-DAO | ||||
| messages, and it is expressed as a loose sequence of nodes that are | ||||
| joined by Track Segments. | ||||
| 2.4.5.8. Segment | ||||
| A serial path formed by a strict sequence of nodes, along which a | ||||
| P-Route is installed. With this specification, a Segment is | ||||
| typically installed by the Root of the main DODAG using Storing Mode | ||||
| P-DAO messages. A Segment used as the topological edge of a Track. | ||||
| Since this specification builds only DODAGs, all Segments are | ||||
| oriented from Ingress (East) to Egress (West), as opposed to the | ||||
| general RAW model, which allows North/South Segments that can be | ||||
| bidirectional. | ||||
| 2.4.5.8.1. Section of a Segment | ||||
| A continuous subset of a segment that may be replaced while the | ||||
| segment remains. for instance, in segment A=>B=>C=>D=>E=>F, say that | ||||
| the link C to D might be misbehaving. The section B=>C=>D=>E in the | ||||
| segment may be replaced by B=>C'=>D'=>E to route around the problem. | ||||
| The segment becomes A=>B=>C'=>D'=>E=>F. | ||||
| 2.4.5.8.2. Segment Routing and SRH | ||||
| The terms Segment Routing and SRH refer to using source-routing to | ||||
| hop over segments. In a Non-Storing mode RPL domain, the SRH is | ||||
| typically a RPL Source Route Header (the IPv6 RH of type 3) as | ||||
| defined in [RFC6554]. | ||||
| If the network is a 6LoWPAN Network, the expectation is that the SRH | ||||
| is compressed and encoded as a 6LoWPAN Routing Header (6LoRH), as | ||||
| specified in section 5 of [RFC8138]. | ||||
| On the other hand, if the RPL Network is less constrained and | ||||
| operated in Storing Mode, as discussed in Section 7.1, the Segment | ||||
| Routing operation and the SRH could be as specified in [RFC8754]. | ||||
| This specification applies equally to both forms of source routing | ||||
| and SRH. | ||||
| 3. Context and Goal | 3. Context and Goal | |||
| 3.1. RPL Applicability | 3.1. RPL Applicability | |||
| RPL is optimized for situations where the power is scarce, the | RPL is optimized for situations where the power is scarce, the | |||
| bandwidth constrained and the transmissions unreliable. This matches | bandwidth constrained and the transmissions unreliable. This matches | |||
| the use case of an IoT LLN where RPL is typically used today, but | the use case of an IoT LLN where RPL is typically used today, but | |||
| also situations of high relative mobility between the nodes in the | also situations of high relative mobility between the nodes in the | |||
| network (aka swarming), e.g., within a variable set of vehicles with | network (aka swarming), e.g., within a variable set of vehicles with | |||
| a similar global motion, or a toon of drones. | a similar global motion, or a toon of drones. | |||
| To reach this goal, RPL is primarily designed to minimize the control | To reach this goal, RPL is primarily designed to minimize the control | |||
| skipping to change at page 7, line 26 ¶ | skipping to change at page 10, line 5 ¶ | |||
| maintained in each node. RPL does not need converge, and provides | maintained in each node. RPL does not need converge, and provides | |||
| connectivity to most nodes most of the time. | connectivity to most nodes most of the time. | |||
| RPL may form multiple topologies called instances. Instances can be | RPL may form multiple topologies called instances. Instances can be | |||
| created to enforce various optimizations through objective functions, | created to enforce various optimizations through objective functions, | |||
| or to reach out through different Root Nodes. The concept of | or to reach out through different Root Nodes. The concept of | |||
| objective function allows to adapt the activity of the routing | objective function allows to adapt the activity of the routing | |||
| protocol to the use case, e.g., type, speed, and quality of the LLN | protocol to the use case, e.g., type, speed, and quality of the LLN | |||
| links. | links. | |||
| RPL instances operate as ships in the night, unbeknownst of one | RPL instances operate as ships passing in the night, unbeknownst of | |||
| another. The RPL Root is responsible to select the RPL Instance that | one another. The RPL Root is responsible to select the RPL Instance | |||
| is used to forward a packet coming from the Backbone into the RPL | that is used to forward a packet coming from the Backbone into the | |||
| domain and set the related RPL information in the packets. 6TiSCH | RPL domain and set the related RPL information in the packets. 6TiSCH | |||
| leverages RPL for its distributed routing operations. | leverages RPL for its distributed routing operations. | |||
| To reduce the routing exchanges, RPL leverages an anisotropic | To reduce the routing exchanges, RPL leverages an anisotropic | |||
| Distance Vector approach, which does not need a global knowledge of | Distance Vector approach, which does not need a global knowledge of | |||
| the topology, and only optimizes the routes to and from the RPL Root, | the topology, and only optimizes the routes to and from the RPL Root, | |||
| allowing P2P paths to be stretched. Although RPL installs its routes | allowing P2P paths to be stretched. Although RPL installs its routes | |||
| proactively, it only maintains them lazily, in reaction to actual | proactively, it only maintains them lazily, in reaction to actual | |||
| traffic, or as a slow background activity. | traffic, or as a slow background activity. | |||
| This is simple and efficient in situations where the traffic is | This is simple and efficient in situations where the traffic is | |||
| skipping to change at page 8, line 9 ¶ | skipping to change at page 10, line 34 ¶ | |||
| and latency as it introduces additional delay and chances of loss. | and latency as it introduces additional delay and chances of loss. | |||
| As a result, [RPL] is not a good fit for the use cases listed in the | As a result, [RPL] is not a good fit for the use cases listed in the | |||
| RAW use cases document [USE-CASES], which demand high availability | RAW use cases document [USE-CASES], which demand high availability | |||
| and reliability, and as a consequence require both short and diverse | and reliability, and as a consequence require both short and diverse | |||
| paths. | paths. | |||
| 3.2. RPL Routing Modes | 3.2. RPL Routing Modes | |||
| RPL first forms a default route in each node towards the a Root, and | RPL first forms a default route in each node towards the a Root, and | |||
| those routes together coalesce as a Directed Acyclic Graph upwards. | those routes together coalesce as a Directed Acyclic Graph upwards. | |||
| RPL then constructs routes to so-called Targets in the reverse | RPL then constructs routes to destinations signaled as Targets in the | |||
| direction, down the same DODAG. So do so, a RPL Instance can be | reverse direction, down the same DODAG. So do so, a RPL Instance can | |||
| operated either in RPL Storing or Non-Storing Mode of Operation (MOP) | be operated either in RPL Storing or Non-Storing Mode of Operation | |||
| The default route towards the Root is maintained aggressively and may | (MOP). The default route towards the Root is maintained aggressively | |||
| change while a packet progresses without causing loops, so the packet | and may change while a packet progresses without causing loops, so | |||
| will still reach the Root. | the packet will still reach the Root. | |||
| In Non-Storing Mode, each node advertises itself as a Target directly | In Non-Storing Mode, each node advertises itself as a Target directly | |||
| to the Root, indicating the parents that may be used to reach self. | to the Root, indicating the parents that may be used to reach self. | |||
| Recursively, the Root builds and maintains an image of the whole | Recursively, the Root builds and maintains an image of the whole | |||
| DODAG in memory, and leverages that abstraction to compute source | DODAG in memory, and leverages that abstraction to compute source | |||
| route paths for the packets to their destinations down the DODAG. | route paths for the packets to their destinations down the DODAG. | |||
| When a node changes its point(s) of attachment to the DODAG, it takes | When a node changes its point(s) of attachment to the DODAG, it takes | |||
| single unicast packet to the Root along the default route to update | single unicast packet to the Root along the default route to update | |||
| it, and the connectivity is restored immediately; this mode is | it, and the connectivity is restored immediately; this mode is | |||
| preferable for use cases where internet connectivity is dominant, or | preferable for use cases where internet connectivity is dominant, or | |||
| when, like here, the Root controls the network activity in the nodes. | when, like here, the Root controls the network activity in the nodes. | |||
| In Storing Mode, the routing information percolates upwards, and each | In Storing Mode, the routing information percolates upwards, and each | |||
| node maintains the routes to the subDAG of its descendants down the | node maintains the routes to the subDAG of its descendants down the | |||
| DODAG. The maintenance is lazy, either reactive upon traffic or as a | DODAG. The maintenance is lazy, either reactive upon traffic or as a | |||
| slow background process. Packets flow via the common parent and the | slow background process. Packets flow via the common parent and the | |||
| routing stretch is reduced vs. Non-Storing, for a better P2P | routing stretch is reduced vs. Non-Storing, for a better P2P | |||
| connectivity, while the internet connectivity is restored more | connectivity. On the other hand, a new route takes a longer time to | |||
| slowly, time for the DV operation to operate hop-by-hop. | propagate to the Root, time for the Distance-Vector protocol to | |||
| operate hop-by-hop, and the Internet connectivity is restored more | ||||
| slowly upon movement. | ||||
| Either way, the RPL routes are injected by the Target nodes, in a | Either way, the RPL routes are injected by the Target nodes, in a | |||
| distributed fashion. To complement RPL and eliminate routing | distributed fashion. To complement RPL and eliminate routing | |||
| stretch, this specification introduces an hybrid mode that combines | stretch, this specification introduces an hybrid mode that combines | |||
| Storing and Non-Storing operations to build and project routes onto | Storing and Non-Storing operations to build and project routes onto | |||
| the nodes where they should be installed. This specification uses | the nodes where they should be installed. This specification uses | |||
| the term P-Route to refer to those routes. | the term Projected Route (P-Route) to refer to those routes. | |||
| A P-Route may be installed in either Storing and Non-Storing Mode, | A P-Route may be installed in either Storing and Non-Storing Mode, | |||
| potentially resulting in hybrid situations where the Mode of the P- | potentially resulting in hybrid situations where the Mode of the P- | |||
| Route is different from that of the RPL Main DODAG. P-Routes can be | Route is different from that of the RPL Main DODAG. P-Routes can be | |||
| used as stand-alone segments to reduce the size of the source routing | used as stand-alone segments to reduce the size of the source routing | |||
| headers with loose source routing operations down the main RPL DODAG. | headers with loose source routing operations down the main RPL DODAG. | |||
| P-Routes can also be combined with other P-Routes to form a more | P-Routes can also be combined with other P-Routes to form a more | |||
| complex forwarding graph called a Track. | complex forwarding graph called a Track. | |||
| 3.3. Requirements | 3.3. Requirements | |||
| 3.3.1. Loose Source Routing | 3.3.1. Loose Source Routing | |||
| A RPL implementation operating in a very constrained LLN typically | A RPL implementation operating in a very constrained LLN typically | |||
| uses the Non-Storing Mode of Operation as represented in Figure 1. | uses the Non-Storing Mode of Operation as represented in Figure 2. | |||
| In that mode, a RPL node indicates a parent-child relationship to the | In that mode, a RPL node indicates a parent-child relationship to the | |||
| Root, using a destination Advertisement Object (DAO) that is unicast | Root, using a destination Advertisement Object (DAO) that is unicast | |||
| from the node directly to the Root, and the Root typically builds a | from the node directly to the Root, and the Root typically builds a | |||
| source routed path to a destination down the DODAG by recursively | source routed path to a destination down the DODAG by recursively | |||
| concatenating this information. | concatenating this information. | |||
| +-----+ | +-----+ | |||
| | | Border router | | | Border router | |||
| | | (RPL Root) | | | (RPL Root) | |||
| +-----+ ^ | | | +-----+ ^ | | | |||
| | | DAO | ACK | | | | DAO | ACK | | |||
| o o o o | | | Strict | o o o o | | | Strict | |||
| o o o o o o o o o | | | Source | o o o o o o o o o | | | Source | |||
| o o o o o o o o o o | | | Route | o o o o o o o o o o | | | Route | |||
| o o o o o o o o o | | | | o o o o o o o o o | | | | |||
| o o o o o o o o | v v | o o o o o o o o | v v | |||
| o o o o | o o o o | |||
| LLN | LLN | |||
| Figure 1: RPL Non-Storing Mode of operation | Figure 2: RPL Non-Storing Mode of operation | |||
| Based on the parent-children relationships expressed in the Non- | Based on the parent-children relationships expressed in the Non- | |||
| Storing DAO messages,the Root possesses topological information about | Storing DAO messages, the Root possesses topological information | |||
| the whole network, though this information is limited to the | about the whole network, though this information is limited to the | |||
| structure of the DODAG for which it is the destination. A packet | structure of the DODAG for which it is the destination. A packet | |||
| that is generated within the domain will always reach the Root, which | that is generated within the domain will always reach the Root, which | |||
| can then apply a source routing information to reach the destination | can then apply a source routing information to reach the destination | |||
| if the destination is also in the DODAG. Similarly, a packet coming | if the destination is also in the DODAG. Similarly, a packet coming | |||
| from the outside of the domain for a destination that is expected to | from the outside of the domain for a destination that is expected to | |||
| be in a RPL domain reaches the Root. | be in a RPL domain reaches the Root. It results that the wireless | |||
| bandwidth near the Root is the gating factor for all transmissions | ||||
| towards or within the domain, and that the Root is a single point of | ||||
| failure for all connectivity to nodes within its domain. | ||||
| It results that the Root, or then some associated centralized | The RPL Root must add a source routing header to all downward | |||
| computation engine such as a PCE, can determine the amount of packets | packets. As a network grows, the size of the source routing header | |||
| that reach a destination in the RPL domain, and thus the amount of | augments with the depth of the nodes. In some use cases, a RPL | |||
| energy and bandwidth that is wasted for transmission, between itself | network forms long lines along physical structures such as streets | |||
| and the destination, as well as the risk of fragmentation, any | for lighting. Limiting the packet size is directly beneficial to the | |||
| potential delays because of a paths longer than necessary (shorter | energy budget, but, mostly, it reduces the chances of frame loss and | |||
| paths exist that would not traverse the Root). | packet fragmentation, which are highly detrimental to the LLN | |||
| operation. A limited amount of well-targeted routing state would | ||||
| allow the source routing operation to be loose as opposed to strict, | ||||
| and save packet size. Because the capability to store a routing | ||||
| state in every node is limited, the decision of which route is | ||||
| installed where can only be optimized with a global knowledge of the | ||||
| system, a knowledge that the Root or an associated PCE may possess by | ||||
| means that are outside of the scope of this specification. | ||||
| As a network gets deep, the size of the source routing header that | Being on path for all packets in Non-Storing mode, the Root may | |||
| the Root must add to all the downward packets becomes an issue for | determine the number of P2P packets in its RPL domain per source and | |||
| nodes that are many hops away. In some use cases, a RPL network | destination, the latency incurred, and the amount of energy and | |||
| forms long lines and a limited amount of well-targeted routing state | bandwidth that is consumed to reach the self and then down, including | |||
| would allow to make the source routing operation loose as opposed to | a possible fragmentation when encapsulating larger packets. Enabling | |||
| strict, and save packet size. Limiting the packet size is directly | a shorter path that would not traverse the Root for select P2P | |||
| beneficial to the energy budget, but, mostly, it reduces the chances | source/destinations may improve the latency, lower the consumption of | |||
| of frame loss and/or packet fragmentation, which is highly | constrained resources, free bandwidth at the bottleneck near the | |||
| detrimental to the LLN operation. Because the capability to store a | Root, improve the delivery ratio and reduce the latency for those P2P | |||
| routing state in every node is limited, the decision of which route | flows with a global benefit for all flows of reducing the load at the | |||
| is installed where can only be optimized with a global knowledge of | Root. | |||
| the system, a knowledge that the Root or an associated PCE may | ||||
| possess by means that are outside of the scope of this specification. | ||||
| This requirement is to store a routing state associated with the Main | This requirement is to store a routing state associated with the Main | |||
| DODAG in selected RPL routers, to limit the excursion of the source | DODAG in selected RPL routers, to limit the excursion of the source | |||
| route headers in deep networks. The Root may elide the sequence of | route headers in deep networks. The Root may elide the sequence of | |||
| routers that is installed in the network from its source route | routers that is installed in the network from its source route | |||
| header, which becomes loose while it is strict in [RPL]. | header, which becomes loose while it is strict in [RPL]. | |||
| 3.3.2. East-West Routes | 3.3.2. East-West Routes | |||
| RPL is optimized for INternet access, with Point-to-Multipoint (P2MP) | [RPL] optimizes Point-to-Multipoint (P2MP) routes from the Root, | |||
| and Multipoint-to-Point (MP2P), whereby routes are always installed | Multipoint-to-Point (MP2P) routes to the DODAG Root, and Internet | |||
| North-South (aka up/down) along the RPL DODAG respectively from and | access when the Root also serves as Border Router. All routes are | |||
| towards the Border Router that also serves as DODAG Root. Peer to | installed North-South (aka up/down) along the RPL DODAG. Peer to | |||
| Peer (P2P) East-West routes in a RPL network will generally suffer | Peer (P2P) East-West routes in a RPL network will generally suffer | |||
| from some elongated (stretched) path versus a direct (optimized) | from some elongated (stretched) path versus a direct (optimized) | |||
| path, since routing between two nodes always happens via a common | path, since routing between two nodes always happens via a common | |||
| parent, as illustrated in Figure 2: | parent, as illustrated in Figure 3: | |||
| ------+--------- | ------+--------- | |||
| | Internet | | Internet | |||
| +-----+ | +-----+ | |||
| | | Border router | | | Border router | |||
| | | (RPL Root) | | | (RPL Root) | |||
| +-----+ | +-----+ | |||
| X | X | |||
| ^ v o o | ^ v o o | |||
| ^ o o v o o o o o | ^ o o v o o o o o | |||
| ^ o o o v o o o o o | ^ o o o v o o o o o | |||
| ^ o o v o o o o o | ^ o o v o o o o o | |||
| S o o o D o o o | S o o o D o o o | |||
| o o o o | o o o o | |||
| LLN | LLN | |||
| Figure 2: Routing Stretch between S and D via common parent X | Figure 3: Routing Stretch between S and D via common parent X | |||
| along North-South Paths | along North-South Paths | |||
| The amount of stretch depends on the Mode of Operation: | As described in [RFC9008], the amount of stretch depends on the Mode | |||
| of Operation: | ||||
| * in Non-Storing Mode, all packets routed within the DODAG flow all | * in Non-Storing Mode, all packets routed within the DODAG flow all | |||
| the way up to the Root of the DODAG. If the destination is in the | the way up to the Root of the DODAG. If the destination is in the | |||
| same DODAG, the Root must encapsulate the packet to place an RH | same DODAG, the Root must encapsulate the packet to place an RH | |||
| that has the strict source route information down the DODAG to the | that has the strict source route information down the DODAG to the | |||
| destination. This will be the case even if the destination is | destination. This will be the case even if the destination is | |||
| relatively close to the source and the Root is relatively far off. | relatively close to the source and the Root is relatively far off. | |||
| * In Storing Mode, unless the destination is a child of the source, | * In Storing Mode, unless the destination is a child of the source, | |||
| the packets will follow the default route up the DODAG as well. | the packets will follow the default route up the DODAG as well. | |||
| skipping to change at page 11, line 45 ¶ | skipping to change at page 14, line 41 ¶ | |||
| +-----+ | +-----+ | |||
| | | | | |||
| o o o o | o o o o | |||
| o o o o o o o o o | o o o o o o o o o | |||
| o o o o o o o o o o | o o o o o o o o o o | |||
| o o o o o o o o o | o o o o o o o o o | |||
| S>>A>>>B>>C>>>D o o o | S>>A>>>B>>C>>>D o o o | |||
| o o o o | o o o o | |||
| LLN | LLN | |||
| Figure 3: More direct East-West Route between S and D | Figure 4: More direct East-West Route between S and D | |||
| The requirement is to install additional routes in the RPL routers, | The requirement is to install additional routes in the RPL routers, | |||
| to reduce the stretch of some P2P routes and maintain the | to reduce the stretch of some P2P routes and maintain the | |||
| characteristics within a given SLO, e.g., in terms of latency and/or | characteristics within a given SLO, e.g., in terms of latency and/or | |||
| reliability. | reliability. | |||
| 3.4. On Tracks | 3.4. On Tracks | |||
| 3.4.1. Building Tracks With RPL | ||||
| A Track is typically a collection of parallel loose source routed | The concept of a Track was introduced in the "6TiSCH Architecture" | |||
| sequences of nodes from Ingress to Egress, forming so-called Track | [6TiSCH-ARCHI], as a collection of potential paths that leverage | |||
| Legs, that are joined with strict Segments of other nodes. The Legs | redundant forwarding solutions along the way. This can be a DODAG or | |||
| are expressed in RPL Non-Storing Modes and require an encapsulation | a more complex structure that is only partially acyclic (e.g., per | |||
| to add a Source Route Header, whereas the Segments are expressed in | packet). | |||
| Storing Mode. | ||||
| With this specification, a Track is shaped as a DODAG, and following | ||||
| the directed edges leads to a Track Ingress. Storing Mode P-DAO | ||||
| messages follow the direction of the edges to set up routes for | ||||
| traffic that flows the other way, towards the Track Egress(es). If | ||||
| there is a single Track Egress, then the Track is reversible to form | ||||
| another DODAG by reversing the direction of each edge. A node at the | ||||
| Ingress of more than one Segment in a Track may use one or more of | ||||
| these Segments to forward a packet inside the Track. | ||||
| A RPL Track is a collection of (one or more) parallel loose source | ||||
| routed sequences of nodes ordered from Ingress to Egress, each | ||||
| forming a Track Leg. The nodes that are directly connected, | ||||
| reachable via existing Tracks as illustrated in Section 3.5.2.3 or | ||||
| joined with strict Segments of other nodes as shown in | ||||
| Section 3.5.1.3. The Legs are expressed in RPL Non-Storing Mode and | ||||
| require an encapsulation to add a Source Route Header, whereas the | ||||
| Segments are expressed in RPL Storing Mode. | ||||
| A Serial Track comprises provides only one path between Ingress and | A Serial Track comprises provides only one path between Ingress and | |||
| Egress. It comprises at most one Leg. A Stand-Alone Segment defines | Egress. It comprises at most one Leg. A Stand-Alone Segment | |||
| implicitly a Serial Track from its Ingress to Egress. | implicitly defines a Serial Track from its Ingress to Egress. | |||
| A complex Track forms a graph that provides a collection of potential | A complex Track forms a graph that provides a collection of potential | |||
| paths to provide redundancy for the packets, either as a collection | paths to provide redundancy for the packets, either as a collection | |||
| of Legs that may be parallel or cross at certain points, or as a more | of Legs that may be parallel or cross at certain points, or as a more | |||
| generic DODAG. | generic DODAG. | |||
| The concept of a Track was introduced in the "6TiSCH Architecture" | 3.4.2. Tracks and RPL Instances | |||
| [6TiSCH-ARCHI], as a collection of potential paths that leverage | ||||
| redundant forwarding solutions along the way. With this | ||||
| specification, a Track forms DODAG that is directed towards a Track | ||||
| Ingress. If there is a single Track Egress, then the Track is | ||||
| reversible to form another DODAG by reversing the direction of each | ||||
| edge. A node at the Ingress of more than one Segment in a Track may | ||||
| use one or more of these Segments to forward a packet inside the | ||||
| Track. | ||||
| Section 5.1. of [RPL] describes the RPL Instance and its encoding. | Section 5.1. of [RPL] describes the RPL Instance and its encoding. | |||
| There can be up to 128 global RPL Instances, for which there can be | There can be up to 128 global RPL Instances, for which there can be | |||
| one or more DODAGs, and there can be 64 local RPL Instances, with a | one or more DODAGs, and there can be 64 local RPL Instances, with a | |||
| namespace that is indexed by a DODAGID, where the DODAGID is a Unique | namespace that is indexed by a DODAGID, where the DODAGID is a Unique | |||
| Local Address (ULA) or a Global Unicast Address (GUA) of the Root of | Local Address (ULA) or a Global Unicast Address (GUA) of the Root of | |||
| the DODAG. | the DODAG. Bit 0 (most significant) is set to 1 to signal a Local | |||
| RPLInstanceID, as shown in Figure 5. By extension, this | ||||
| specification expresses the value of the RPLInstanceID as a single | ||||
| integer between 128 and 191, representing both the Local | ||||
| RPLInstanceID in 0..63 and Bit 0 set. | ||||
| 0 1 2 3 4 5 6 7 | ||||
| +-+-+-+-+-+-+-+-+ | ||||
| |1|D| ID | Local RPLInstanceID in 0..63 | ||||
| +-+-+-+-+-+-+-+-+ | ||||
| Figure 5: Local RPLInstanceID Encoding | ||||
| A Track is normally associated with a Local RPL Instance which | A Track is normally associated with a Local RPL Instance which | |||
| RPLInstanceID is used as the TrackID, more in Section 6.2. A Track | RPLInstanceID is used as the TrackID, more in Section 6.3. A Track | |||
| Leg may also be used as a subTrack that extends the RPL main DODAG. | Leg may also be used as a subTrack that extends the RPL main DODAG. | |||
| In that case, the TrackID is set to the global RPLInstanceID of the | In that case, the TrackID is set to the global RPLInstanceID of the | |||
| main DODAG, which suffices to identify the routing topology. As | main DODAG, which suffices to identify the routing topology. As | |||
| opposed to local RPL instances, the Track Ingress that encapsulates | opposed to local RPL instances, the Track Ingress that encapsulates | |||
| the packets over a subtrack is not Root, and that the source address | the packets over a subtrack is not Root, and that the source address | |||
| of the encapsulated packet is not used to determine the Track. | of the encapsulated packet is not used to determine the Track. | |||
| 3.5. Serial Track Signaling | 3.5. Serial Track Signaling | |||
| This specification enables to set up a P-Route along either a Track | This specification enables to set up a P-Route along either a Track | |||
| Leg or a Segment. A P-Route is installed and maintained using an | Leg or a Segment. A P-Route is installed and maintained by the Root | |||
| extended RPL DAO message called a Projected DAO (P-DAO), and a Track | of the main DODAG using an extended RPL DAO message called a | |||
| is composed of the combination of one or more P-Routes. | Projected DAO (P-DAO), and a Track is composed of the combination of | |||
| one or more P-Routes. | ||||
| A P-DAO message for a Track signals the TrackID in the RPLInstanceID | A P-DAO message for a Track signals the TrackID in the RPLInstanceID | |||
| field. In the case of a local RPL Instance, the address of the Track | field. In the case of a local RPL Instance, the address of the Track | |||
| Ingress is used as source to encapsulated packets along the Track is | Ingress is used as source to encapsulate packets along the Track. | |||
| signaled in the DODAGID field of the Projected DAO Base Object, see | The Track is signaled in the DODAGID field of the Projected DAO Base | |||
| Figure 6. | Object, see Figure 8. | |||
| This specification introduces the Via Information Option (VIO) to | This specification introduces the Via Information Option (VIO) to | |||
| signal a sequence of hops in a Leg or a Segment in the P-DAO | signal a sequence of hops in a Leg or a Segment in the P-DAO | |||
| messages, either in Storing Mode (SM-VIO) or NON-Storing Mode (NSM- | messages, either in Storing Mode (SM-VIO) or Non-Storing Mode (NSM- | |||
| VIO). One P-DAO messages contains a single VIO, associated to one or | VIO). One P-DAO messages contains a single VIO, associated to one or | |||
| more RPL Target Options that signal the destination IPv6 addresses | more RPL Target Options that signal the destination IPv6 addresses | |||
| that can reached along the Track, more in Section 5.3. | that can reached along the Track, more in Section 5.3. | |||
| Before diving deeper into Track Legs and Segments signaling and | Before diving deeper into Track Legs and Segments signaling and | |||
| operation, this section provides examples of what how route | operation, this section provides examples of what how route | |||
| projection works through variations of a simple example. This simple | projection works through variations of a simple example. This simple | |||
| example illustrates the case of host routes, though RPL Targets can | example illustrates the case of host routes, though RPL Targets can | |||
| be prefixes. | be prefixes. | |||
| Say we want to build a Serial Track from node A to E in Figure 4, so | Say we want to build a Serial Track from node A to E in Figure 6, so | |||
| A can route packets to E's neighbors F and G along A, B, C, D and E | A can route packets to E's neighbors F and G along A, B, C, D and E | |||
| as opposed to via the Root: | as opposed to via the Root: | |||
| /===> F | /===> F | |||
| A ===> B ===> C ===> D===> E < | A ===> B ===> C ===> D===> E < | |||
| \===> G | \===> G | |||
| Figure 4: Reference Track | Figure 6: Reference Track | |||
| Conventionally we use ==> to represent a strict hop and --> for a | Conventionally we use ==> to represent a strict hop and --> for a | |||
| loose hop. We use -to- like in C==>D==>E-to-F to represent coma- | loose hop. We use "-to-", such as in C==>D==>E-to-F to represent | |||
| separated Targets, e.g., F is a Target for Segment C==>D==>E. In | coma-separated Targets, e.g., F is a Target for Segment C==>D==>E. | |||
| this example, A is Track Ingress, E is Track Egress. C is a | In this example, A is Track Ingress, E is Track Egress. C is a | |||
| stitching point. F and G are "external" Targets for the Track, and | stitching point. F and G are "external" Targets for the Track, and | |||
| become reachable from A via the Track A(ingress) to E (Egress and | become reachable from A via the Track A(ingress) to E (Egress and | |||
| implicit Target in Non-Storing Mode) leading to F and G (explicit | implicit Target in Non-Storing Mode) leading to F and G (explicit | |||
| Targets). | Targets). | |||
| Figure 5 depicts the format of the RPLInstanceID encoding for a local | ||||
| RPLInstanceID . | ||||
| In a general manner the desired outcome is as follows: | In a general manner the desired outcome is as follows: | |||
| * Targets are E, F, and G | * Targets are E, F, and G | |||
| * P-DAO 1 signals C==>D==>E | * P-DAO 1 signals C==>D==>E | |||
| * P-DAO 2 signals A==>B==>C | * P-DAO 2 signals A==>B==>C | |||
| * P-DAO 3 signals F and G via the A-->E Track | * P-DAO 3 signals F and G via the A-->E Track | |||
| skipping to change at page 16, line 27 ¶ | skipping to change at page 19, line 51 ¶ | |||
| +--------+-------------------+-------------------+----------------+ | +--------+-------------------+-------------------+----------------+ | |||
| Table 3: Packet Header Settings | Table 3: Packet Header Settings | |||
| As an example, say that A has a packet for F. Using the RIB above: | As an example, say that A has a packet for F. Using the RIB above: | |||
| * From P-DAO 2: A forwards to B and B forwards to C. | * From P-DAO 2: A forwards to B and B forwards to C. | |||
| * From P-DAO 1: C forwards to D and D forwards to E. | * From P-DAO 1: C forwards to D and D forwards to E. | |||
| * From Neighbor Cache Entry: C delivers the packet to F. | * From Neighbor Cache Entry: E delivers the packet to F. | |||
| 3.5.1.2. External routes | 3.5.1.2. External routes | |||
| In this example, we consider F and G as destinations that are | In this example, we consider F and G as destinations that are | |||
| external to the Track as a DODAG, as discussed in section 4.1.1. of | external to the Track as a DODAG, as discussed in section 4.1.1. of | |||
| [RFC9008]. We then apply the directives for encapsulating in that | [RFC9008]. We then apply the directives for encapsulating in that | |||
| case, more in Section 6.6. | case, more in Section 6.7. | |||
| In this formulation, we set up the Track Leg explicitly, which | In this formulation, we set up the Track Leg explicitly, which | |||
| creates less routing state in intermediate hops at the expense of | creates less routing state in intermediate hops at the expense of | |||
| larger packets to accommodate source routing: | larger packets to accommodate source routing: | |||
| * P-DAO 1 signals C==>D==>E-to-E | * P-DAO 1 signals C==>D==>E-to-E | |||
| * P-DAO 2 signals A==>B==>C-to-E | * P-DAO 2 signals A==>B==>C-to-E | |||
| * P-DAO 3 signals F and G via the A-->E-to-F,G Track | * P-DAO 3 signals F and G via the A-->E-to-F,G Track | |||
| skipping to change at page 18, line 30 ¶ | skipping to change at page 22, line 5 ¶ | |||
| * From P-DAO 3: A encapsulates the packet the Track signaled by | * From P-DAO 3: A encapsulates the packet the Track signaled by | |||
| P-DAO 3, with the outer header above. Now the packet destination | P-DAO 3, with the outer header above. Now the packet destination | |||
| is E. | is E. | |||
| * From P-DAO 2: A forwards to B and B forwards to C. | * From P-DAO 2: A forwards to B and B forwards to C. | |||
| * From P-DAO 1: C forwards to D and D forwards to E; E decapsulates | * From P-DAO 1: C forwards to D and D forwards to E; E decapsulates | |||
| the packet. | the packet. | |||
| * From Neighbor Cache Entry: C delivers packets to F or G. | * From Neighbor Cache Entry: E delivers packets to F or G. | |||
| 3.5.1.3. Segment Routing | 3.5.1.3. Segment Routing | |||
| In this formulation leverages Track Legs to combine Segments and form | In this formulation leverages Track Legs to combine Segments and form | |||
| a Graph. The packets are source routed from a Segment to the next to | a Graph. The packets are source routed from a Segment to the next to | |||
| adapt the path. As such, this can be seen as a form of Segment | adapt the path. As such, this can be seen as a form of Segment | |||
| Routing [RFC8402]: | Routing [RFC8402]: | |||
| * P-DAO 1 signals C==>D==>E-to-E | * P-DAO 1 signals C==>D==>E-to-E | |||
| skipping to change at page 20, line 33 ¶ | skipping to change at page 24, line 8 ¶ | |||
| IPv6 Header is C, and a SRH signals the final destination is E. | IPv6 Header is C, and a SRH signals the final destination is E. | |||
| * From P-DAO 2: A forwards to B and B forwards to C. | * From P-DAO 2: A forwards to B and B forwards to C. | |||
| * From P-DAO 3: C processes the SRH and sets the destination in the | * From P-DAO 3: C processes the SRH and sets the destination in the | |||
| IPv6 Header to E. | IPv6 Header to E. | |||
| * From P-DAO 1: C forwards to D and D forwards to E; E decapsulates | * From P-DAO 1: C forwards to D and D forwards to E; E decapsulates | |||
| the packet. | the packet. | |||
| * From the Neighbor Cache Entry: C delivers packets to F or G. | * From the Neighbor Cache Entry: E delivers packets to F or G. | |||
| 3.5.2. Using Non-Storing Mode joining Tracks | 3.5.2. Using Non-Storing Mode joining Tracks | |||
| In this formulation: | In this formulation: | |||
| * P-DAO 1 signals C==>D==>E-to-F,G | * P-DAO 1 signals C==>D==>E-to-F,G | |||
| * P-DAO 2 signals A==>B==>C-to-C,F,G | * P-DAO 2 signals A==>B==>C-to-C,F,G | |||
| A==>B==>C and C==>D==>E are Tracks expressed as Non-Storing P-DAOs. | A==>B==>C and C==>D==>E are Tracks expressed as Non-Storing P-DAOs. | |||
| skipping to change at page 27, line 24 ¶ | skipping to change at page 31, line 10 ¶ | |||
| the Track signaled by P-DAO 1. The outer header has source C, | the Track signaled by P-DAO 1. The outer header has source C, | |||
| destination D, an SRH that indicates E as the next loose hop, and | destination D, an SRH that indicates E as the next loose hop, and | |||
| a RPI indicating a TrackId of 131 from C's namespace. E | a RPI indicating a TrackId of 131 from C's namespace. E | |||
| decapsulates. | decapsulates. | |||
| 3.6. Complex Tracks | 3.6. Complex Tracks | |||
| To increase the reliability of the P2P transmission, this | To increase the reliability of the P2P transmission, this | |||
| specification enables to build a collection of Legs between the same | specification enables to build a collection of Legs between the same | |||
| Ingress and Egress Nodes and combine them with the same TrackID, as | Ingress and Egress Nodes and combine them with the same TrackID, as | |||
| shown in Figure 5. Legs may cross at loose hops edges or remain | shown in Figure 7. Legs may cross at the edges of loose hops or | |||
| parallel. | remain parallel. | |||
| The Segments that join the loose hops of a Leg are installed with the | The Segments that join the loose hops of a Leg are installed with the | |||
| same TrackID as the Leg. But each individual Leg and Segment has its | same TrackID as the Leg. But each individual Leg and Segment has its | |||
| own P-RouteID which allows to manage it separately. When Legs cross | own P-RouteID which allows it to be managed separately. When Legs | |||
| within respsective Segment, the next loose hop (the current | cross within respective Segment, the next loose hop (the current | |||
| destination of the packet) indicates which Leg is being followed and | destination of the packet) indicates which Leg is being followed and | |||
| a Segment that can reach that next loose hop is selected. | a Segment that can reach that next loose hop is selected. | |||
| CPF CPF CPF CPF | CPF CPF CPF CPF | |||
| Southbound API | Southbound API | |||
| _-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._- | _-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._- | |||
| _-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._- | _-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._- | |||
| skipping to change at page 28, line 44 ¶ | skipping to change at page 32, line 44 ¶ | |||
| <------ Segment 3 F,G,H ------> <---- Segment 4 J,E ----> | <------ Segment 3 F,G,H ------> <---- Segment 4 J,E ----> | |||
| <- Leg 2 H, E -> | <- Leg 2 H, E -> | |||
| <--- Segment 1 A,B ---> <- S5-> <---- Segment 4 J,E ----> | <--- Segment 1 A,B ---> <- S5-> <---- Segment 4 J,E ----> | |||
| <- Leg 3 B, H, E -> | <- Leg 3 B, H, E -> | |||
| ) | ) | |||
| ( | ( | |||
| ( ) | ( ) | |||
| Figure 5: Segments and Tracks | Figure 7: Segments and Tracks | |||
| Note that while this specification enables to build both Segments | Note that while this specification enables to build both Segments | |||
| inside a Leg (aka East-West), such as Segment 2 above which is within | inside a Leg (aka East-West), such as Segment 2 above which is within | |||
| Leg 1, and Inter-Leg Segments (aka North-South), such as Segment 2 | Leg 1, and Inter-Leg Segments (aka North-South), such as Segment 2 | |||
| above which joins Leg 1 and Leg 2, it does not signal to the Ingress | above which joins Leg 1 and Leg 2, it does not signal to the Ingress | |||
| which Inter-Leg Segments are available, so the use of North-South | which Inter-Leg Segments are available, so the use of North-South | |||
| Segments and associated PAREO functions is curently limited. The | Segments and associated PAREO functions is curently limited. The | |||
| only possibility available at this time is to define overlapping Legs | only possibility available at this time is to define overlapping Legs | |||
| as illustrated in Figure 5, with Leg 3 that is congruent with Leg 1 | as illustrated in Figure 7, with Leg 3 that is congruent with Leg 1 | |||
| till node B and congruent with Leg 2 from node H on, abstracting | till node B and congruent with Leg 2 from node H on, abstracting | |||
| Segment 5 as an East-West Segment. | Segment 5 as an East-West Segment. | |||
| DetNet Forwarding Nodes only understand the simple 1-to-1 forwarding | ||||
| sublayer transport operation along a segment whereas the more | ||||
| sophisticated Relay nodes can also provide service sublayer functions | ||||
| such as Replication and Elimination. One possible mapping between | ||||
| DetNet and this specification is to signal the Relay Nodes as the | ||||
| hops of a Leg and the forwarding Nodes as the hops in a Segment that | ||||
| join the Relay nodes as illustrated in Figure 5. | ||||
| 3.7. Scope and Expectations | 3.7. Scope and Expectations | |||
| 3.7.1. External Dependencies | ||||
| This specification expects that the RPL Main DODAG is operated in RPL | This specification expects that the RPL Main DODAG is operated in RPL | |||
| Non-Storing Mode to sustain the exchanges with the Root. Based on | Non-Storing Mode to sustain the exchanges with the Root. Based on | |||
| its comprehensive knowledge of the parent-child relationship, the | its comprehensive knowledge of the parent-child relationship, the | |||
| Root can form an abstracted view of the whole DODAG topology. This | Root can form an abstracted view of the whole DODAG topology. This | |||
| document adds the capability for nodes to advertise additional | document adds the capability for nodes to advertise additional | |||
| sibling information to complement the topological awareness of the | sibling information to complement the topological awareness of the | |||
| Root to be passed on to the PCE, and enable the PCE to build more / | Root to be passed on to the PCE, and enable the PCE to build more / | |||
| better paths that traverse those siblings. | better paths that traverse those siblings. | |||
| P-Routes require resources such as routing table space in the routers | P-Routes require resources such as routing table space in the routers | |||
| and bandwidth on the links; the amount of state that is installed in | and bandwidth on the links; the amount of state that is installed in | |||
| each node must be computed to fit within the node's memory, and the | each node must be computed to fit within the node's memory, and the | |||
| amount of rerouted traffic must fit within the capabilities of the | amount of rerouted traffic must fit within the capabilities of the | |||
| transmission links. The methods used to learn the node capabilities | transmission links. The methods used to learn the node capabilities | |||
| and the resources that are available in the devices and in the | and the resources that are available in the devices and in the | |||
| network are out of scope for this document. The method to capture | network are out of scope for this document. The method to capture | |||
| and report the LLN link capacity and reliability statistics are also | and report the LLN link capacity and reliability statistics are also | |||
| out of scope. They may be fetched from the nodes through network | out of scope. They may be fetched from the nodes through network | |||
| management functions or other forms of telemetry such as OAM. | management functions or other forms of telemetry such as OAM. | |||
| 3.7.2. Positioning vs. Related IETF Standards | ||||
| 3.7.2.1. Extending 6TiSCH | ||||
| The "6TiSCH Architecture" [6TiSCH-ARCHI] leverages a centralized | The "6TiSCH Architecture" [6TiSCH-ARCHI] leverages a centralized | |||
| model that is similar to that of "Deterministic Networking | model that is similar to that of "Deterministic Networking | |||
| Architecture" [RFC8655], whereby the device resources and | Architecture" [RFC8655], whereby the device resources and | |||
| capabilities are exposed to an external controller which installs | capabilities are exposed to an external controller which installs | |||
| routing states into the network based on its own objective functions | routing states into the network based on its own objective functions | |||
| that reside in that external entity. With DetNet and 6TiSCH, the | that reside in that external entity. | |||
| component of the controller that is responsible of computing routes | ||||
| is a PCE. The PCE computes its routes based on its own objective | ||||
| functions such as described in [RFC4655], and typically controls the | ||||
| routes using the PCE Protocol (PCEP) by [RFC5440]. While this | ||||
| specification expects a PCE and while PCEP might effectively be used | ||||
| between the Root and the PCE, the control protocol between the PCE | ||||
| and the Root is out of scope. | ||||
| This specification expects a single PCE with a full view of the | 3.7.2.2. Mapping to DetNet | |||
| DetNet Forwarding Nodes only understand the simple 1-to-1 forwarding | ||||
| sublayer transport operation along a segment whereas the more | ||||
| sophisticated Relay nodes can also provide service sublayer functions | ||||
| such as Replication and Elimination. | ||||
| One possible mapping between DetNet and this specification is to | ||||
| signal the Relay Nodes as the hops of a Leg and the forwarding Nodes | ||||
| as the hops in a Segment that join the Relay nodes as illustrated in | ||||
| Figure 7. | ||||
| 3.7.2.3. Leveraging PCE | ||||
| With DetNet and 6TiSCH, the component of the controller that is | ||||
| responsible of computing routes is a PCE. The PCE computes its | ||||
| routes based on its own objective functions such as described in | ||||
| [RFC4655], and typically controls the routes using the PCE Protocol | ||||
| (PCEP) by [RFC5440]. While this specification expects a PCE and | ||||
| while PCEP might effectively be used between the Root and the PCE, | ||||
| the control protocol between the PCE and the Root is out of scope. | ||||
| This specification also expects a single PCE with a full view of the | ||||
| network. Distributing the PCE function for a large network is out of | network. Distributing the PCE function for a large network is out of | |||
| scope. This specification uses the RPL Root as a proxy to the PCE. | scope. This specification uses the RPL Root as a proxy to the PCE. | |||
| The PCE may be collocated with the Root, or may reside in an external | The PCE may be collocated with the Root, or may reside in an external | |||
| Controller. In that case, the protocol between the Root and the PCE | Controller. In that case, the protocol between the Root and the PCE | |||
| is out of scope and abstracted by / mapped to RPL inside the DODAG; | is out of scope and abstracted by / mapped to RPL inside the DODAG; | |||
| one possibility is for the Root to transmit the RPL DAOs with the | one possibility is for the Root to transmit the RPL DAOs with the | |||
| SIOs that detail the parent/child and sibling information. | SIOs that detail the parent/child and sibling information. | |||
| The algorithm to compute the paths and the protocol used by the PCE | The algorithm to compute the paths and the protocol used by the PCE | |||
| and the metrics and link statistics involved in the computation are | and the metrics and link statistics involved in the computation are | |||
| also out of scope. The effectiveness of the route computation by the | also out of scope. The effectiveness of the route computation by the | |||
| PCE depends on the quality of the metrics that are reported from the | PCE depends on the quality of the metrics that are reported from the | |||
| RPL network. Which metrics are used and how they are reported is out | RPL network. Which metrics are used and how they are reported is out | |||
| of scope, but the expectation is that they are mostly of long-term, | of scope, but the expectation is that they are mostly of long-term, | |||
| statistical nature, and provide visibility on link throughput, | statistical nature, and provide visibility on link throughput, | |||
| latency, stability and availability over relatively long periods. | latency, stability and availability over relatively long periods. | |||
| 3.7.2.4. Providing for RAW | ||||
| The "Reliable and Available Wireless (RAW) Architecture/Framework" | The "Reliable and Available Wireless (RAW) Architecture/Framework" | |||
| [RAW-ARCHI] extends the definition of Track, as being composed of | [RAW-ARCHI] extends the definition of Track, as being composed of | |||
| East-West directional segments and North-South bidirectional | East-West directional segments and North-South bidirectional | |||
| segments, to enable additional path diversity, using Packet ARQ, | segments, to enable additional path diversity, using Packet ARQ, | |||
| Replication, Elimination, and Overhearing (PAREO) functions over the | Replication, Elimination, and Overhearing (PAREO) functions over the | |||
| available paths, to provide a dynamic balance between the reliability | available paths, to provide a dynamic balance between the reliability | |||
| and availability requirements of the flows and the need to conserve | and availability requirements of the flows and the need to conserve | |||
| energy and spectrum. This specification prepares for RAW by setting | energy and spectrum. This specification prepares for RAW by setting | |||
| up the Tracks, but only forms DODAGs, which are composed of | up the Tracks, but only forms DODAGs, which are composed of | |||
| aggregated end-to-end loose source routed Legs, joined by strict | aggregated end-to-end loose source routed Legs, joined by strict | |||
| skipping to change at page 31, line 10 ¶ | skipping to change at page 35, line 28 ¶ | |||
| not provide the policies that would decide which flows are routed | not provide the policies that would decide which flows are routed | |||
| through which Track. In a Non-Storing Mode RPL Instance, the Main | through which Track. In a Non-Storing Mode RPL Instance, the Main | |||
| DODAG provides a default route via the Root, and the Tracks provide | DODAG provides a default route via the Root, and the Tracks provide | |||
| more specific routes to the Track Targets. | more specific routes to the Track Targets. | |||
| 4. Extending existing RFCs | 4. Extending existing RFCs | |||
| 4.1. Extending RFC 6550 | 4.1. Extending RFC 6550 | |||
| This specification extends RPL [RPL] to enable the Root to install | This specification extends RPL [RPL] to enable the Root to install | |||
| East-West routes inside a Main DODAG that is operated as non-Storing | East-West routes inside a Main DODAG that is operated as Non-Storing | |||
| Mode. A Projected DAO (P-DAO) message (see Section 4.1.1) contains a | Mode. A Projected DAO (P-DAO) message (see Section 4.1.1) contains a | |||
| new Via Information Option that installs a strict or a loose sequence | new Via Information Option that installs a strict or a loose sequence | |||
| of hops to form respectively a Track Segment or a Track Leg. A new | of hops to form respectively a Track Segment or a Track Leg. A new | |||
| P-DAO Request (PDR) message (see Section 5.1) enables a Track Ingress | P-DAO Request (PDR) message (see Section 5.1) enables a Track Ingress | |||
| to request the Track from the Root for which it is the Root and it | to request the Track from the Root. The resulting Track is also a | |||
| owns the address that serves as TrackID, as well as the associated | DODAG for which the Track Ingress is the Root, the owner the address | |||
| namespace from which it selects the TrackID. In the context of this | that serves as DODAGID and authoritative for the associated namespace | |||
| from which the TrackID is selected. In the context of this | ||||
| specification, the installed route appears as a more specific route | specification, the installed route appears as a more specific route | |||
| to the Track Targets, and the Track Ingress routes the packets | to the Track Targets, and the Track Ingress routes the packets | |||
| towards the Targets via the Track using the longest match as usual. | towards the Targets via the Track using the longest match as usual. | |||
| To ensure that the PDR and P-DAO messages can flow at most times, it | To ensure that the PDR and P-DAO messages can flow at most times, it | |||
| is RECOMMENDED that the nodes involved in a Track mantain multiple | is RECOMMENDED that the nodes involved in a Track mantain multiple | |||
| parents in the Main DODAG, advertise them all to the Root, and use | parents in the Main DODAG, advertise them all to the Root, and use | |||
| them in turn to retry similar packets. It is also RECOMMENDED that | them in turn to retry similar packets. It is also RECOMMENDED that | |||
| the Root uses diverse source route paths to retry similar messages ot | the Root uses diverse source route paths to retry similar messages ot | |||
| the nodes in the Track. | the nodes in the Track. | |||
| skipping to change at page 31, line 43 ¶ | skipping to change at page 36, line 19 ¶ | |||
| (TIO), which can be placed in RPL messages such as the destination | (TIO), which can be placed in RPL messages such as the destination | |||
| Advertisement Object (DAO). A DAO message signals routing | Advertisement Object (DAO). A DAO message signals routing | |||
| information to one or more Targets indicated in RTOs, providing one | information to one or more Targets indicated in RTOs, providing one | |||
| hop information at a time in the TIO. A Projected DAO (P-DAO) is a | hop information at a time in the TIO. A Projected DAO (P-DAO) is a | |||
| special DAO message generated by the Root to install a P-Route formed | special DAO message generated by the Root to install a P-Route formed | |||
| of multiple hops in its DODAG. This provides a RPL-based method to | of multiple hops in its DODAG. This provides a RPL-based method to | |||
| install the Tracks as expected by the 6TiSCH Architecture | install the Tracks as expected by the 6TiSCH Architecture | |||
| [6TiSCH-ARCHI] as a collection of multiple P-Routes. | [6TiSCH-ARCHI] as a collection of multiple P-Routes. | |||
| The P-DAO is signaled with a new "Projected DAO" (P) flag, see | The P-DAO is signaled with a new "Projected DAO" (P) flag, see | |||
| Figure 6. The 'P' flag is encoded in bit position 2 (to be confirmed | Figure 8. The 'P' flag is encoded in bit position 2 (to be confirmed | |||
| by IANA) of the Flags field in the DAO Base Object. The Root MUST | by IANA) of the Flags field in the DAO Base Object. The Root MUST | |||
| set it to 1 in a Projected DAO message. Otherwise it MUST be set to | set it to 1 in a Projected DAO message. Otherwise it MUST be set to | |||
| 0. It is set to 0 in Legacy implementations as specified | 0. It is set to 0 in Legacy implementations as specified | |||
| respectively in Sections 20.11 and 6.4 of [RPL] | respectively in Sections 20.11 and 6.4 of [RPL] | |||
| The P-DAO is control plane signaling and should not be stuck behind | The P-DAO is control plane signaling and should not be stuck behind | |||
| high traffic levels. The expectation is that the P-DAO message is | high traffic levels. The expectation is that the P-DAO message is | |||
| sent as high QoS level, above that of data traffic, typically with | sent as high QoS level, above that of data traffic, typically with | |||
| the Network Control precedence. | the Network Control precedence. | |||
| skipping to change at page 32, line 21 ¶ | skipping to change at page 36, line 46 ¶ | |||
| + + | + + | |||
| | DODAGID field set to the | | | DODAGID field set to the | | |||
| + IPv6 Address of the Track Ingress + | + IPv6 Address of the Track Ingress + | |||
| | used to source encapsulated packets | | | used to source encapsulated packets | | |||
| + + | + + | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Option(s)... | | Option(s)... | |||
| +-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
| Figure 6: Projected DAO Base Object | Figure 8: Projected DAO Base Object | |||
| New fields: | New fields: | |||
| TrackID: The local or global RPLInstanceID of the DODAG that serves | TrackID: The local or global RPLInstanceID of the DODAG that serves | |||
| as Track, more in Section 6.2 | as Track, more in Section 6.3 | |||
| P: 1-bit flag (position to be confirmed by IANA). | P: 1-bit flag (position to be confirmed by IANA). | |||
| The 'P' flag is set to 1 by the Root to signal a Projected DAO, | The 'P' flag is set to 1 by the Root to signal a Projected DAO, | |||
| and it is set to 0 otherwise. | and it is set to 0 otherwise. | |||
| In RPL Non-Storing Mode, the TIO and RTO are combined in a DAO | In RPL Non-Storing Mode, the TIO and RTO are combined in a DAO | |||
| message to inform the DODAG Root of all the edges in the DODAG, which | message to inform the DODAG Root of all the edges in the DODAG, which | |||
| are formed by the directed parent-child relationships. Options may | are formed by the directed parent-child relationships. The DAO | |||
| be factorized; multiple RTOs may be present to signal a collection of | message signals to the Root that a given parent can be used to reach | |||
| children that can be reached via the parent(s) indicated in the | a given child. The P-DAO message generalizes the DAO to signal to | |||
| TIO(s) that follows the RTOs. This specification generalizes the | the Track Ingress that a Track for which it is Root can be used to | |||
| case of a parent that can be used to reach a child with that of a | reach children and siblings of the Track Egress. In both cases, | |||
| whole Track through which children and siblings of the Track Egress | options may be factorized and multiple RTOs may be present to signal | |||
| are reachable. | a collection of children that can be reached through the parent or | |||
| the Track, respectively. | ||||
| 4.1.2. Via Information Option | 4.1.2. Via Information Option | |||
| New CMOs called the Via Information Options (VIO) are introduced for | New CMOs called the Via Information Options (VIO) are introduced for | |||
| use in P-DAO messages as a multihop alternative to the TIO, more in | use in P-DAO messages as a multihop alternative to the TIO, more in | |||
| Section 5.3. One VIO is the stateful Storing Mode VIO (SM-VIO); an | Section 5.3. One VIO is the stateful Storing Mode VIO (SM-VIO); an | |||
| SM-VIO installs a strict hop-by-hop P-Route called a Track Segment. | SM-VIO installs a strict hop-by-hop P-Route called a Track Segment. | |||
| The other is the Non-Storing Mode VIO (NSM-VIO); the NSM-VIO installs | The other is the Non-Storing Mode VIO (NSM-VIO); the NSM-VIO installs | |||
| a loose source-routed P-Route called a Track Leg at the Track | a loose source-routed P-Route called a Track Leg at the Track | |||
| Ingress, which uses that state to encapsulate a packet IPv6_in_IPv6 | Ingress, which uses that state to encapsulate a packet IPv6_in_IPv6 | |||
| with a new Routing Header (RH) to the Track Egress, more in | with a new Routing Header (RH) to the Track Egress, more in | |||
| Section 6.6. | Section 6.7. | |||
| A P-DAO contains one or more RTOs to indicate the Target | A P-DAO contains one or more RTOs to indicate the Target | |||
| (destinations) that can be reached via the P-Route, followed by | (destinations) that can be reached via the P-Route, followed by | |||
| exactly one VIO that signals the sequence of nodes to be followed, | exactly one VIO that signals the sequence of nodes to be followed, | |||
| more in Section 6. There are two modes of operation for the | more in Section 6. There are two modes of operation for the | |||
| P-Routes, the Storing Mode and the Non-Storing Mode, see | P-Routes, the Storing Mode and the Non-Storing Mode, see | |||
| Section 6.3.2 and Section 6.3.3 respectively for more. | Section 6.4.2 and Section 6.4.3 respectively for more. | |||
| 4.1.3. Sibling Information Option | 4.1.3. Sibling Information Option | |||
| This specification adds another CMO called the Sibling Information | This specification adds another CMO called the Sibling Information | |||
| Option (SIO) that is used by a RPL Aware Node (RAN) to advertise a | Option (SIO) that is used by a RPL Aware Node (RAN) to advertise a | |||
| selection of its candidate neighbors as siblings to the Root, more in | selection of its candidate neighbors as siblings to the Root, more in | |||
| Section 5.4. The SIO is placed in DAO messages that are sent | Section 5.4. The SIO is placed in DAO messages that are sent | |||
| directly to the Root of the main DODAG. | directly to the Root of the main DODAG. | |||
| 4.1.4. P-DAO Request | 4.1.4. P-DAO Request | |||
| skipping to change at page 34, line 14 ¶ | skipping to change at page 38, line 35 ¶ | |||
| Projected-Route 'P': 1-bit flag. It is set to 1 in the RPI that is | Projected-Route 'P': 1-bit flag. It is set to 1 in the RPI that is | |||
| added in the encapsulation when a packet is sent over a Track. It | added in the encapsulation when a packet is sent over a Track. It | |||
| is set to 0 when a packet is forwarded along the main Track, | is set to 0 when a packet is forwarded along the main Track, | |||
| including when the packet follows a Segment that joins loose hops | including when the packet follows a Segment that joins loose hops | |||
| of the Main DODAG. The flag is not mutable en-route. | of the Main DODAG. The flag is not mutable en-route. | |||
| The encoding of the 'P' flag in native format is shown in Section 4.2 | The encoding of the 'P' flag in native format is shown in Section 4.2 | |||
| while the compressed format is indicated in Section 4.3. | while the compressed format is indicated in Section 4.3. | |||
| 4.1.6. Additional Flag in the RPL DODAG Configuration Option | ||||
| The DODAG Configuration Option is defined in Section 6.7.6 of [RPL]. | ||||
| Its purpose is extended to distribute configuration information | ||||
| affecting the construction and maintenance of the DODAG, as well as | ||||
| operational parameters for RPL on the DODAG, through the DODAG. This | ||||
| Option was originally designed with 4 bit positions reserved for | ||||
| future use as Flags. | ||||
| 0 1 2 3 | ||||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | Type = 0x04 |Opt Length = 14|D| | | |A| ... | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | ||||
| |4 bits | | ||||
| Figure 9: DODAG Configuration Option (Partial View) | ||||
| This specification defines a new flag "Projected Routes Support" (D). | ||||
| The 'D' flag is encoded in bit position 0 of the reserved Flags in | ||||
| the DODAG Configuration Option (this is the most significant bit)(to | ||||
| be confirmed by IANA but there's little choice). It is set to 0 in | ||||
| legacy implementations as specified respectively in Sections 20.14 | ||||
| and 6.7.6 of [RPL]. | ||||
| The 'D' flag is set to 1 to indicate that this specification is | ||||
| enabled in the network and that the Root will install the requested | ||||
| Tracks when feasible upon a PDR message. | ||||
| Section 4.1.2. of [RFC9008] updates [RPL] to indicate that the | ||||
| definition of the Flags applies to Mode of Operation values from zero | ||||
| (0) to six (6) only. For a MOP value of 7, the implementation MUST | ||||
| consider that the Root accepts PDR messages and will install | ||||
| Projected Routes. | ||||
| The RPL DODAG Configuration option is typically placed in a DODAG | ||||
| Information Object (DIO) message. The DIO message propagates down | ||||
| the DODAG to form and then maintain its structure. The DODAG | ||||
| Configuration option is copied unmodified from parents to children. | ||||
| xref target='RFC6550'/> states that: | ||||
| | Nodes other than the DODAG root MUST NOT modify this information | ||||
| | when propagating the DODAG Configuration option. | ||||
| Therefore, a legacy parent propagates the 'D' flag as set by the | ||||
| root, and when the 'D' flag is set to 1, it is transparently flooded | ||||
| to all the nodes in the DODAG. | ||||
| 4.2. Extending RFC 6553 | 4.2. Extending RFC 6553 | |||
| "The RPL Option for Carrying RPL Information in Data-Plane Datagrams" | "The RPL Option for Carrying RPL Information in Data-Plane Datagrams" | |||
| [RFC6553]describes the RPL Option for use among RPL routers to | [RFC6553]describes the RPL Option for use among RPL routers to | |||
| include the abstract RPL Packet Information (RPI) described in | include the abstract RPL Packet Information (RPI) described in | |||
| section 11.2. of [RPL] in data packets. | section 11.2. of [RPL] in data packets. | |||
| The RPL Option is commonly referred to as the RPI though the RPI is | The RPL Option is commonly referred to as the RPI though the RPI is | |||
| really the abstract information that is transported in the RPL | really the abstract information that is transported in the RPL | |||
| Option. [RFC9008] updated the Option Type from 0x63 to 0x23. | Option. [RFC9008] updated the Option Type from 0x63 to 0x23. | |||
| skipping to change at page 34, line 38 ¶ | skipping to change at page 40, line 15 ¶ | |||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Option Type | Opt Data Len | | | Option Type | Opt Data Len | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| |O|R|F|P|0|0|0|0| RPLInstanceID | SenderRank | | |O|R|F|P|0|0|0|0| RPLInstanceID | SenderRank | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | (sub-TLVs) | | | (sub-TLVs) | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 7: Extended RPL Option Format | Figure 10: Extended RPL Option Format | |||
| Option Type: 0x23 or 0x63, see [RFC9008] | Option Type: 0x23 or 0x63, see [RFC9008] | |||
| Opt Data Len: See [RFC6553] | Opt Data Len: See [RFC6553] | |||
| 'O', 'R' and 'F' flags: See [RFC6553]. Those flags MUST be set to 0 | 'O', 'R' and 'F' flags: See [RFC6553]. Those flags MUST be set to 0 | |||
| by the sender and ignored by the receiver if the 'P' flag is set. | by the sender and ignored by the receiver if the 'P' flag is set. | |||
| Projected-Route 'P': 1-bit flag as defined in Section 4.1.5. | Projected-Route 'P': 1-bit flag as defined in Section 4.1.5. | |||
| skipping to change at page 35, line 37 ¶ | skipping to change at page 41, line 20 ¶ | |||
| is ready to be placed as is in the packet encapsulation by the Track | is ready to be placed as is in the packet encapsulation by the Track | |||
| Ingress. | Ingress. | |||
| Section 6.3 of [RFC8138] presents the formats of the 6LoWPAN Routing | Section 6.3 of [RFC8138] presents the formats of the 6LoWPAN Routing | |||
| Header of type 5 (RPI-6LoRH) that compresses the RPI for normal RPL | Header of type 5 (RPI-6LoRH) that compresses the RPI for normal RPL | |||
| operation. The format of the RPI-6LoRH is not suited for P-Routes | operation. The format of the RPI-6LoRH is not suited for P-Routes | |||
| since the O,R,F flags are not used and the Rank is unknown and | since the O,R,F flags are not used and the Rank is unknown and | |||
| ignored. | ignored. | |||
| This specification introduces a new 6LoRH, the P-RPI-6LoRH that can | This specification introduces a new 6LoRH, the P-RPI-6LoRH that can | |||
| be used in either Elective or Critical 6LoRH form, see Table 21 and | be used in either Elective or Critical 6LoRH form, see Table 22 and | |||
| Table 22 respectively. The new 6LoRH MUST be used as a Critical | Table 23 respectively. The new 6LoRH MUST be used as a Critical | |||
| 6LoRH, unless an SRH-6LoRH is present and controls the routing | 6LoRH, unless an SRH-6LoRH is present and controls the routing | |||
| decision, in which case it MAY be used in Elective form. | decision, in which case it MAY be used in Elective form. | |||
| The P-RPI-6LoRH is designed to compress the RPI along RPL P-Routes. | The P-RPI-6LoRH is designed to compress the RPI along RPL P-Routes. | |||
| Its format is as follows: | Its format is as follows: | |||
| 0 1 2 | 0 1 2 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| |1|0|E| Length | 6LoRH Type | RPLInstanceID | | |1|0|E| Length | 6LoRH Type | RPLInstanceID | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 8: P-RPI-6LoRH Format | ||||
| Figure 11: P-RPI-6LoRH Format | ||||
| Type: IANA is requested to define the same value of the type for | Type: IANA is requested to define the same value of the type for | |||
| both Elective and Critical forms. A type of 8 is suggested. | both Elective and Critical forms. A type of 8 is suggested. | |||
| Elective 'E': See [RFC8138]. The 'E' flag is set to 1 to indicate | Elective 'E': See [RFC8138]. The 'E' flag is set to 1 to indicate | |||
| an Elective 6LoRH, meaning that it can be ignored when forwarding. | an Elective 6LoRH, meaning that it can be ignored when forwarding. | |||
| RPLInstanceID : In the context of this specification, the | RPLInstanceID : In the context of this specification, the | |||
| RPLInstanceID field signals the TrackID, see Section 3.4 and | RPLInstanceID field signals the TrackID, see Section 3.4 and | |||
| Section 6.2 . | Section 6.3 . | |||
| Section 6.7 details how a a Track Ingress leverages the P-RPI-6LoRH | Section 6.8 details how a a Track Ingress leverages the P-RPI-6LoRH | |||
| Header as part of the encapsulation of a packet to place it into a | Header as part of the encapsulation of a packet to place it into a | |||
| Track. | Track. | |||
| 5. New RPL Control Messages and Options | 5. New RPL Control Messages and Options | |||
| 5.1. New P-DAO Request Control Message | 5.1. New P-DAO Request Control Message | |||
| The P-DAO Request (PDR) message is sent by a Node in the Main DODAG | The P-DAO Request (PDR) message is sent by a Node in the Main DODAG | |||
| to the Root. It is a request to establish or refresh a Track where | to the Root. It is a request to establish or refresh a Track where | |||
| this node is Track Ingress, and signals whether an acknowledgment | this node is Track Ingress, and signals whether an acknowledgment | |||
| called PDR-ACK is requested or not. A positive PDR-ACK indicates | called PDR-ACK is requested or not. A positive PDR-ACK indicates | |||
| that the Track was built and that the Roots commits to maintain the | that the Track was built and that the Roots commits to maintain the | |||
| Track for the negotiated lifetime. | Track for the negotiated lifetime. | |||
| The Root may use an asynchronous PDR-ACK with an negative status to | The Root may use an asynchronous PDR-ACK with an negative status to | |||
| indicate that the Track was terminated before its time. A status of | indicate that the Track was terminated before its time. A status of | |||
| "Transient Failure" (see Section 10.9) is an indication that the PDR | "Transient Failure" (see Section 11.10) is an indication that the PDR | |||
| may be retried after a reasonable time that depends on the | may be retried after a reasonable time that depends on the | |||
| deployment. Other negative status values indicate a permanent error; | deployment. Other negative status values indicate a permanent error; | |||
| the tentative must be abandoned until a corrective action is taken at | the tentative must be abandoned until a corrective action is taken at | |||
| the application layer or through network management. | the application layer or through network management. | |||
| The source IPv6 address of the PDR signals the Track Ingress to-be of | The source IPv6 address of the PDR signals the Track Ingress to-be of | |||
| the requested Track, and the TrackID is indicated in the message | the requested Track, and the TrackID is indicated in the message | |||
| itself. One and only one RPL Target Option MUST be present in the | itself. One and only one RPL Target Option MUST be present in the | |||
| message. The RTO signals the Track Egress, more in Section 6.1. | message. The RTO signals the Track Egress, more in Section 6.2. | |||
| The RPL Control Code for the PDR is 0x09, to be confirmed by IANA. | The RPL Control Code for the PDR is 0x09, to be confirmed by IANA. | |||
| The format of PDR Base Object is as follows: | The format of PDR Base Object is as follows: | |||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | TrackID |K|R| Flags | ReqLifetime | PDRSequence | | | TrackID |K|R| Flags | ReqLifetime | PDRSequence | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Option(s)... | | Option(s)... | |||
| +-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
| Figure 9: New P-DAO Request Format | Figure 12: New P-DAO Request Format | |||
| TrackID: 8-bit field. In the context of this specification, the | TrackID: 8-bit field. In the context of this specification, the | |||
| TrackID field signals the RPLInstanceID of the DODAG formed by the | TrackID field signals the RPLInstanceID of the DODAG formed by the | |||
| Track, see Section 3.4 and Section 6.2. To allocate a new Track, | Track, see Section 3.4 and Section 6.3. To allocate a new Track, | |||
| the Ingress Node must provide a value that is not in use at this | the Ingress Node must provide a value that is not in use at this | |||
| time. | time. | |||
| K: The 'K' flag is set to indicate that the recipient is expected to | K: The 'K' flag is set to indicate that the recipient is expected to | |||
| send a PDR-ACK back. | send a PDR-ACK back. | |||
| R: The 'R' flag is set to request a Complex Track for redundancy. | R: The 'R' flag is set to request a Complex Track for redundancy. | |||
| Flags: Reserved. The Flags field MUST initialized to zero by the | Flags: Reserved. The Flags field MUST initialized to zero by the | |||
| sender and MUST be ignored by the receiver | sender and MUST be ignored by the receiver | |||
| skipping to change at page 38, line 15 ¶ | skipping to change at page 43, line 35 ¶ | |||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | TrackID | Flags | Track Lifetime| PDRSequence | | | TrackID | Flags | Track Lifetime| PDRSequence | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | PDR-ACK Status| Reserved | | | PDR-ACK Status| Reserved | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Option(s)... | | Option(s)... | |||
| +-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+ | |||
| Figure 10: New PDR-ACK Control Message Format | Figure 13: New PDR-ACK Control Message Format | |||
| TrackID: Set to the TrackID indicated in the TrackID field of the | TrackID: Set to the TrackID indicated in the TrackID field of the | |||
| PDR messages that this replies to. | PDR messages that this replies to. | |||
| Flags: Reserved. The Flags field MUST initialized to zero by the | Flags: Reserved. The Flags field MUST initialized to zero by the | |||
| sender and MUST be ignored by the receiver | sender and MUST be ignored by the receiver | |||
| Track Lifetime: Indicates that remaining Lifetime for the Track, | Track Lifetime: Indicates that remaining Lifetime for the Track, | |||
| expressed in Lifetime Units; the value of zero (0x00) indicates | expressed in Lifetime Units; the value of zero (0x00) indicates | |||
| that the Track was destroyed or not created. | that the Track was destroyed or not created. | |||
| PDRSequence: 8-bit wrapping sequence number. It is incremented at | PDRSequence: 8-bit wrapping sequence number. It is incremented at | |||
| each PDR message and echoed in the PDR-ACK. | each PDR message and echoed in the PDR-ACK. | |||
| PDR-ACK Status: 8-bit field indicating the completion. The PDR-ACK | PDR-ACK Status: 8-bit field indicating the completion. The PDR-ACK | |||
| Status is substructured as indicated in Figure 11: | Status is substructured as indicated in Figure 14: | |||
| 0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 | |||
| +-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
| |E|R| Value | | |E|R| Value | | |||
| +-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
| Figure 11: PDR-ACK status Format | Figure 14: PDR-ACK status Format | |||
| E: 1-bit flag. Set to indicate a rejection. When not set, the | E: 1-bit flag. Set to indicate a rejection. When not set, the | |||
| value of 0 indicates Success/Unqualified Acceptance and other | value of 0 indicates Success/Unqualified Acceptance and other | |||
| values indicate "not an outright rejection". | values indicate "not an outright rejection". | |||
| R: 1-bit flag. Reserved, MUST be set to 0 by the sender and | R: 1-bit flag. Reserved, MUST be set to 0 by the sender and | |||
| ignored by the receiver. | ignored by the receiver. | |||
| Status Value: 6-bit unsigned integer. Values depending on the | Status Value: 6-bit unsigned integer. Values depending on the | |||
| setting of the 'E' flag, see Table 27 and Table 28. | setting of the 'E' flag, see Table 28 and Table 29. | |||
| Reserved: The Reserved field MUST initialized to zero by the sender | Reserved: The Reserved field MUST initialized to zero by the sender | |||
| and MUST be ignored by the receiver | and MUST be ignored by the receiver | |||
| 5.3. Via Information Options | 5.3. Via Information Options | |||
| A VIO signals the ordered list of IPv6 Via Addresses that constitutes | A VIO signals the ordered list of IPv6 Via Addresses that constitutes | |||
| the hops of either a Leg (using Non-Storing Mode) a Segment (using | the hops of either a Leg (using Non-Storing Mode) a Segment (using | |||
| storing mode) of a Track. A Storing Mode P-DAO contains one Storing | storing mode) of a Track. A Storing Mode P-DAO contains one Storing | |||
| Mode VIO (SM-VIO) whereas a Non-Storing Mode P-DAO contains one Non- | Mode VIO (SM-VIO) whereas a Non-Storing Mode P-DAO contains one Non- | |||
| skipping to change at page 39, line 25 ¶ | skipping to change at page 44, line 43 ¶ | |||
| Lifetime of zero is referred as a No-Path P-DAO. | Lifetime of zero is referred as a No-Path P-DAO. | |||
| The VIO contains one or more SRH-6LoRH header(s), each formed of a | The VIO contains one or more SRH-6LoRH header(s), each formed of a | |||
| SRH-6LoRH head and a collection of compressed Via Addresses, except | SRH-6LoRH head and a collection of compressed Via Addresses, except | |||
| in the case of a Non-Storing Mode No-Path P-DAO where the SRH-6LoRH | in the case of a Non-Storing Mode No-Path P-DAO where the SRH-6LoRH | |||
| header is not present. | header is not present. | |||
| In the case of a SM-VIO, or if [RFC8138] is not used in the data | In the case of a SM-VIO, or if [RFC8138] is not used in the data | |||
| packets, then the Root MUST use only one SRH-6LoRH per Via | packets, then the Root MUST use only one SRH-6LoRH per Via | |||
| Information Option, and the compression is the same forall the | Information Option, and the compression is the same forall the | |||
| addresses, as shown in Figure 12, for simplicity. | addresses, as shown in Figure 15, for simplicity. | |||
| In case of an NSM-VIO and if [RFC8138] is in use in the Main DODAG, | In case of an NSM-VIO and if [RFC8138] is in use in the Main DODAG, | |||
| the Root SHOULD optimize the size of the NSM-VIO if using different | the Root SHOULD optimize the size of the NSM-VIO if using different | |||
| SRH-6LoRH Types make the VIO globally shorter; this means that more | SRH-6LoRH Types make the VIO globally shorter; this means that more | |||
| than one SRH-6LoRH may be present. | than one SRH-6LoRH may be present. | |||
| The format of the Via Information Options is as follows: | The format of the Via Information Options is as follows: | |||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| skipping to change at page 40, line 29 ¶ | skipping to change at page 45, line 29 ¶ | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| . Via Address n (compressed by RFC 8138) . | . Via Address n (compressed by RFC 8138) . | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| . Additional SRH-6LoRH Header(s) . | . Additional SRH-6LoRH Header(s) . | |||
| | | | | | | |||
| . .... . | . .... . | |||
| Figure 12: VIO format (uncompressed form) | Figure 15: VIO format (uncompressed form) | |||
| Option Type: 0x0E for SM-VIO, 0x0F for NSM-VIO (to be confirmed by | Option Type: 0x0E for SM-VIO, 0x0F for NSM-VIO (to be confirmed by | |||
| IANA), see =Table 25 | IANA), see =Table 26 | |||
| Option Length: 8-bit unsigned integer, representing the length in | Option Length: 8-bit unsigned integer, representing the length in | |||
| octets of the option, not including the Option Type and Length | octets of the option, not including the Option Type and Length | |||
| fields, see section 6.7.1. of [RPL]; the Option Length is | fields, see section 6.7.1. of [RPL]; the Option Length is | |||
| variable, depending on the number of Via Addresses and the | variable, depending on the number of Via Addresses and the | |||
| compression applied. | compression applied. | |||
| P-RouteID: 8-bit field that identifies a component of a Track or the | P-RouteID: 8-bit field that identifies a component of a Track or the | |||
| Main DODAG as indicated by the TrackID field. The value of 0 is | Main DODAG as indicated by the TrackID field. The value of 0 is | |||
| used to signal a Serial Track, i.e., made of a single segment/Leg. | used to signal a Serial Track, i.e., made of a single segment/Leg. | |||
| skipping to change at page 42, line 33 ¶ | skipping to change at page 47, line 33 ¶ | |||
| Interface ID in its registered address needs report the SIO, and the | Interface ID in its registered address needs report the SIO, and the | |||
| Root will assume symmetry. | Root will assume symmetry. | |||
| The format of the SIO is as follows: | The format of the SIO is as follows: | |||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Type | Option Length |S| Flags |Comp.| Opaque | | | Type | Option Length |S| Flags |Comp.| Opaque | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Step of Rank | Reserved | | | Step in Rank | Reserved | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| + + | + + | |||
| . . | . . | |||
| . Sibling DODAGID (if the D flag not set) . | . Sibling DODAGID (if the D flag not set) . | |||
| . . | . . | |||
| + + | + + | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| + + | + + | |||
| . . | . . | |||
| . Sibling Address . | . Sibling Address . | |||
| . . | . . | |||
| + + | + + | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 13: Sibling Information Option Format | Figure 16: Sibling Information Option Format | |||
| Option Type: 0x10 for SIO (to be confirmed by IANA), see =Table 25 | Option Type: 0x10 for SIO (to be confirmed by IANA), see =Table 26 | |||
| Option Length: 8-bit unsigned integer, representing the length in | Option Length: 8-bit unsigned integer, representing the length in | |||
| octets of the option, not including the Option Type and Length | octets of the option, not including the Option Type and Length | |||
| fields, see section 6.7.1. of [RPL]. | fields, see section 6.7.1. of [RPL]. | |||
| Reserved for Flags: MUST be set to zero by the sender and MUST be | Reserved for Flags: MUST be set to zero by the sender and MUST be | |||
| ignored by the receiver. | ignored by the receiver. | |||
| S: 1-bit flag that is set to indicate that sibling belongs to the | S: 1-bit flag that is set to indicate that sibling belongs to the | |||
| same DODAG. When not set, the Sibling DODAGID is indicated. | same DODAG. When not set, the Sibling DODAGID is indicated. | |||
| skipping to change at page 43, line 33 ¶ | skipping to change at page 48, line 33 ¶ | |||
| packets received from the sibling. An industrial Alliance that | packets received from the sibling. An industrial Alliance that | |||
| uses RPL for a particular use / environment MAY redefine the use | uses RPL for a particular use / environment MAY redefine the use | |||
| of this field to fit its needs. | of this field to fit its needs. | |||
| Compression Type: 3-bit unsigned integer. This is the SRH-6LoRH | Compression Type: 3-bit unsigned integer. This is the SRH-6LoRH | |||
| Type as defined in figure 7 in section 5.1 of [RFC8138] that | Type as defined in figure 7 in section 5.1 of [RFC8138] that | |||
| corresponds to the compression used for the Sibling Address and | corresponds to the compression used for the Sibling Address and | |||
| its DODAGID if resent. The Compression reference is the Root of | its DODAGID if resent. The Compression reference is the Root of | |||
| the Main DODAG. | the Main DODAG. | |||
| Step of Rank: 16-bit unsigned integer. This is the Step of Rank | Step in Rank: 16-bit unsigned integer. This is the Step in Rank | |||
| [RPL] as computed by the Objective Function between this node and | [RPL] as computed by the Objective Function between this node and | |||
| the sibling. | the sibling, that reflects the abstract Rank increment that would | |||
| be computed by the OF if the sibling was the preferred parent. | ||||
| Reserved: The Reserved field MUST initialized to zero by the sender | Reserved: The Reserved field MUST initialized to zero by the sender | |||
| and MUST be ignored by the receiver | and MUST be ignored by the receiver | |||
| Sibling DODAGID: 2 to 16 bytes, the DODAGID of the sibling in a | Sibling DODAGID: 2 to 16 bytes, the DODAGID of the sibling in a | |||
| [RFC8138] compressed form as indicated by the Compression Type | [RFC8138] compressed form as indicated by the Compression Type | |||
| field. This field is present if and only if the D flag is not | field. This field is present if and only if the D flag is not | |||
| set. | set. | |||
| Sibling Address: 2 to 16 bytes, an IPv6 Address of the sibling, with | Sibling Address: 2 to 16 bytes, an IPv6 Address of the sibling, with | |||
| skipping to change at page 44, line 11 ¶ | skipping to change at page 49, line 11 ¶ | |||
| cannot be a Link Local Address. The IPv6 address is encoded in | cannot be a Link Local Address. The IPv6 address is encoded in | |||
| the [RFC8138] compressed form indicated by the Compression Type | the [RFC8138] compressed form indicated by the Compression Type | |||
| field. | field. | |||
| An SIO MAY be immediately followed by a DAG Metric Container. In | An SIO MAY be immediately followed by a DAG Metric Container. In | |||
| that case the DAG Metric Container provides additional metrics for | that case the DAG Metric Container provides additional metrics for | |||
| the hop from the Sibling to this node. | the hop from the Sibling to this node. | |||
| 6. Root Initiated Routing State | 6. Root Initiated Routing State | |||
| 6.1. Requesting a Track | 6.1. RPL Network Setup | |||
| To avoid the need of Path MTU Discovery, 6LoWPAN links are normally | ||||
| defined with a MTU of 1280 (see section 4 of [6LoWPAN]). Injecting | ||||
| packets in a Track typically involves an IP-in-IP encapsulation and | ||||
| additional IPv6 Extension Headers. This may cause a fragmentation if | ||||
| the resulting packets exceeds the MTU that is defined for the RPL | ||||
| domain. | ||||
| Though fragmentation is possible in a 6LoWPAN LLN, e.g., using | ||||
| [6LoWPAN], [RFC8930], and/or [RFC8931], it is RECOMMENDED to allow an | ||||
| MTU that is larger than 1280 in the main DODAG and allows for the | ||||
| additional headers while exposing only 1280 to the 6LoWPAN Nodes. | ||||
| 6.2. Requesting a Track | ||||
| This specification introduces the PDR message, used by an LLN node to | This specification introduces the PDR message, used by an LLN node to | |||
| request the formation of a new Track for which this node is Ingress. | request the formation of a new Track for which this node is Ingress. | |||
| Note that the namespace for the TrackID is owned by the Ingress node, | Note that the namespace for the TrackID is owned by the Ingress node, | |||
| and in the absence of a PDR, there must be some procedure for the | and in the absence of a PDR, there must be some procedure for the | |||
| Root to assign TrackIDs in that namespace while avoiding collisions, | Root to assign TrackIDs in that namespace while avoiding collisions, | |||
| more in Section 6.2. | more in Section 6.3. | |||
| The PDR signals the desired TrackID and the duration for which the | The PDR signals the desired TrackID and the duration for which the | |||
| Track should be established. Upon a PDR, the Root MAY install the | Track should be established. Upon a PDR, the Root MAY install the | |||
| Track as requested, in which case it answers with a PDR-ACK | Track as requested, in which case it answers with a PDR-ACK | |||
| indicating the granted Track Lifetime. All the Segments MUST be of a | indicating the granted Track Lifetime. All the Segments MUST be of a | |||
| same mode, either Storing or Non-Storing. All the Segments MUST be | same mode, either Storing or Non-Storing. All the Segments MUST be | |||
| created with the same TrackID and the same DODAGID signaled in the | created with the same TrackID and the same DODAGID signaled in the | |||
| P-DAO. | P-DAO. | |||
| The Root designs the Track as it sees best, and updates / changes the | The Root designs the Track as it sees best, and updates / changes the | |||
| skipping to change at page 45, line 5 ¶ | skipping to change at page 50, line 16 ¶ | |||
| elapse - vs. the trip time from the node to the Root, the requesting | elapse - vs. the trip time from the node to the Root, the requesting | |||
| node SHOULD resend a PDR using the TrackID in the PDR-ACK to extend | node SHOULD resend a PDR using the TrackID in the PDR-ACK to extend | |||
| the lifetime of the Track, else the Track will time out and the Root | the lifetime of the Track, else the Track will time out and the Root | |||
| will tear down the whole structure. | will tear down the whole structure. | |||
| If the Track fails and cannot be restored, the Root notifies the | If the Track fails and cannot be restored, the Root notifies the | |||
| requesting node asynchronously with a PDR-ACK with a Track Lifetime | requesting node asynchronously with a PDR-ACK with a Track Lifetime | |||
| of 0, indicating that the Track has failed, and a PDR-ACK Status | of 0, indicating that the Track has failed, and a PDR-ACK Status | |||
| indicating the reason of the fault. | indicating the reason of the fault. | |||
| 6.2. Identifying a Track | 6.3. Identifying a Track | |||
| RPL defines the concept of an Instance to signal an individual | RPL defines the concept of an Instance to signal an individual | |||
| routing topology, and multiple topologies can coexist in the same | routing topology, and multiple topologies can coexist in the same | |||
| network. The RPLInstanceID is tagged in the RPI of every packet to | network. The RPLInstanceID is tagged in the RPI of every packet to | |||
| signal which topology the packet actually follows. | signal which topology the packet actually follows. | |||
| This draft leverages the RPL Instance model as follows: | This draft leverages the RPL Instance model as follows: | |||
| * The Root MAY use P-DAO messages to add better routes in the main | * The Root MAY use P-DAO messages to add better routes in the main | |||
| (Global) RPL Instance in conformance with the routing objectives | (Global) RPL Instance in conformance with the routing objectives | |||
| skipping to change at page 45, line 46 ¶ | skipping to change at page 51, line 12 ¶ | |||
| serves as TrackID. The TrackID MUST be unique for the IPv6 ULA or | serves as TrackID. The TrackID MUST be unique for the IPv6 ULA or | |||
| GUA of the Track Ingress that serves as DODAGID for the Track. | GUA of the Track Ingress that serves as DODAGID for the Track. | |||
| This way, a Track is uniquely identified by the tuple (DODAGID, | This way, a Track is uniquely identified by the tuple (DODAGID, | |||
| TrackID) where the TrackID is always represented with the D flag | TrackID) where the TrackID is always represented with the D flag | |||
| set to 0 (see also section 5.1. of [RPL]), indicating when used in | set to 0 (see also section 5.1. of [RPL]), indicating when used in | |||
| an RPI that the source address of the IPv6 packet signals the | an RPI that the source address of the IPv6 packet signals the | |||
| DODAGID. | DODAGID. | |||
| The P-DAO Base Object MUST indicate the tuple (DODAGID, TrackID) | The P-DAO Base Object MUST indicate the tuple (DODAGID, TrackID) | |||
| that identifies the Track as shown in Figure 6, and the P-RouteID | that identifies the Track as shown in Figure 8, and the P-RouteID | |||
| that identifies the P-Route MUST be signaled in the VIO as shown | that identifies the P-Route MUST be signaled in the VIO as shown | |||
| in Figure 12. | in Figure 15. | |||
| The Track Ingress is the root of the DODAG ID formed by the local | The Track Ingress is the Root of the DODAG ID formed by the local | |||
| RPL Instance. It owns the namespace of its TrackIDs, so it can | RPL Instance. It owns the namespace of its TrackIDs, so it can | |||
| pick any unused value to request a new Track with a PDR. In a | pick any unused value to request a new Track with a PDR. In a | |||
| particular deployment where PDR are not used, the namespace can be | particular deployment where PDR are not used, the namespace can be | |||
| delegated to the main Root, which can assign the TrackIDs for the | delegated to the main Root, which can assign the TrackIDs for the | |||
| Tracks it creates without collision. | Tracks it creates without collision. | |||
| With this specification, the Root is aware of all the active | With this specification, the Root is aware of all the active | |||
| Tracks, so it can also pick any unused value to form Tracks | Tracks, so it can also pick any unused value to form Tracks | |||
| without a PDR. To avoid a collision of the Root and the Track | without a PDR. To avoid a collision of the Root and the Track | |||
| Ingress picking the same value at the same time, it is RECOMMENDED | Ingress picking the same value at the same time, it is RECOMMENDED | |||
| that the Track Ingress starts allocating the ID value of the Local | that the Track Ingress starts allocating the ID value of the Local | |||
| RPLInstanceID (see section 5.1. of [RPL]) used as TrackIDs with | RPLInstanceID (see section 5.1. of [RPL]) used as TrackIDs with | |||
| the value 0 incrementing, while the Root starts with 63 | the value 0 incrementing, while the Root starts with 63 | |||
| decrementing. | decrementing. | |||
| 6.3. Installing a Track | 6.4. Installing a Track | |||
| A Serial Track can be installed by a single P-Route that signals the | A Serial Track can be installed by a single P-Route that signals the | |||
| sequence of consecutive nodes, either in Storing Mode as a single- | sequence of consecutive nodes, either in Storing Mode as a single- | |||
| Segment Track, or in Non-Storing Mode as a single-Leg Track. A | Segment Track, or in Non-Storing Mode as a single-Leg Track. A | |||
| single-Leg Track can be installed as a loose Non-Storing Mode | single-Leg Track can be installed as a loose Non-Storing Mode | |||
| P-Route, in which case the next loose entry must recursively be | P-Route, in which case the next loose entry must recursively be | |||
| reached over a Serial Track. | reached over a Serial Track. | |||
| A Complex Track can be installed as a collection of P-Routes with the | A Complex Track can be installed as a collection of P-Routes with the | |||
| same DODAGID and Track ID. The Ingress of a Non-Storing Mode P-Route | same DODAGID and Track ID. The Ingress of a Non-Storing Mode P-Route | |||
| skipping to change at page 47, line 10 ¶ | skipping to change at page 52, line 23 ¶ | |||
| * There SHOULD NOT be 2 different Tracks leading to the same Target | * There SHOULD NOT be 2 different Tracks leading to the same Target | |||
| from same Ingress node, unless there's a policy for selecting | from same Ingress node, unless there's a policy for selecting | |||
| which packets use which Track; such policy is out of scope. | which packets use which Track; such policy is out of scope. | |||
| * A packet that was routed along a Track MUST NOT be routed along | * A packet that was routed along a Track MUST NOT be routed along | |||
| the main DODAG again; if the destination is not reachable as a | the main DODAG again; if the destination is not reachable as a | |||
| neighbor by the node where the packet exits the Track then the | neighbor by the node where the packet exits the Track then the | |||
| packet MUST be dropped. | packet MUST be dropped. | |||
| 6.3.1. Signaling a Projected Route | 6.4.1. Signaling a Projected Route | |||
| This draft adds a capability whereby the Root of a main RPL DODAG | This draft adds a capability whereby the Root of a main RPL DODAG | |||
| installs a Track as a collection of P-Routes, using a Projected-DAO | installs a Track as a collection of P-Routes, using a Projected-DAO | |||
| (P-DAO) message for each individual Track Leg or Segment. The P-DAO | (P-DAO) message for each individual Track Leg or Segment. The P-DAO | |||
| signals a collection of Targets in the RPL Target Option(s) (RTO). | signals a collection of Targets in the RPL Target Option(s) (RTO). | |||
| Those Targets can be reached via a sequence of routers indicated in a | Those Targets can be reached via a sequence of routers indicated in a | |||
| VIO. | VIO. | |||
| Like a classical DAO message, a P-DAO causes a change of state only | Like a classical DAO message, a P-DAO causes a change of state only | |||
| if it is "new" per section 9.2.2. "Generation of DAO Messages" of | if it is "new" per section 9.2.2. "Generation of DAO Messages" of | |||
| skipping to change at page 48, line 5 ¶ | skipping to change at page 53, line 10 ¶ | |||
| A P-DAO that creates or updates a Track Leg MUST be sent to a GUA or | A P-DAO that creates or updates a Track Leg MUST be sent to a GUA or | |||
| a ULA of the Ingress of the Leg; it must contain the full list of | a ULA of the Ingress of the Leg; it must contain the full list of | |||
| hops in the Leg unless the Leg is being removed. A P-DAO that | hops in the Leg unless the Leg is being removed. A P-DAO that | |||
| creates a new Track Segment MUST be sent to a GUA or a ULA of the | creates a new Track Segment MUST be sent to a GUA or a ULA of the | |||
| Segment Egress and MUST signal the full list of hops in Segment; a | Segment Egress and MUST signal the full list of hops in Segment; a | |||
| P-DAO that updates (including deletes) a section of a Segment MUST be | P-DAO that updates (including deletes) a section of a Segment MUST be | |||
| sent to the first node after the modified Segment and signal the full | sent to the first node after the modified Segment and signal the full | |||
| list of hops in the section starting at the node that immediately | list of hops in the section starting at the node that immediately | |||
| precedes the modified section. | precedes the modified section. | |||
| In Non-Storing Mode, as discussed in Section 6.3.3, the Root sends | In Non-Storing Mode, as discussed in Section 6.4.3, the Root sends | |||
| the P-DAO to the Track Ingress where the source-routing state is | the P-DAO to the Track Ingress where the source-routing state is | |||
| applied, whereas in Storing Mode, the P-DAO is sent to the last node | applied, whereas in Storing Mode, the P-DAO is sent to the last node | |||
| on the installed path and forwarded in the reverse direction, | on the installed path and forwarded in the reverse direction, | |||
| installing a Storing Mode state at each hop, as discussed in | installing a Storing Mode state at each hop, as discussed in | |||
| Section 6.3.2. In both cases the Track Ingress is the owner of the | Section 6.4.2. In both cases the Track Ingress is the owner of the | |||
| Track, and it generates the P-DAO-ACK when the installation is | Track, and it generates the P-DAO-ACK when the installation is | |||
| successful. | successful. | |||
| If the 'K' Flag is present in the P-DAO, the P-DAO must be | If the 'K' Flag is present in the P-DAO, the P-DAO must be | |||
| acknowledged using a DAO-ACK that is sent back to the address of the | acknowledged using a DAO-ACK that is sent back to the address of the | |||
| Root from which the P-DAO was received. In most cases, the first | Root from which the P-DAO was received. In most cases, the first | |||
| node of the Leg, Segment, or updated section of the Segment is the | node of the Leg, Segment, or updated section of the Segment is the | |||
| node that sends the acknowledgment. The exception to the rule is | node that sends the acknowledgment. The exception to the rule is | |||
| when an intermediate node in a Segment fails to forward a Storing | when an intermediate node in a Segment fails to forward a Storing | |||
| Mode P-DAO to the previous node in the SM-VIO. | Mode P-DAO to the previous node in the SM-VIO. | |||
| In a No-Path Non-Storing Mode P-DAO, the SRH-6LoRH MUST NOT be | In a No-Path Non-Storing Mode P-DAO, the SRH-6LoRH MUST NOT be | |||
| present in the NSM-VIO; the state in the Ingress is erased | present in the NSM-VIO; the state in the Ingress is erased | |||
| regardless. In all other cases, a VIO MUST contain at least one Via | regardless. In all other cases, a VIO MUST contain at least one Via | |||
| Address, and a Via Address MUST NOT be present more than once, which | Address, and a Via Address MUST NOT be present more than once, which | |||
| would create a loop. | would create a loop. | |||
| A node that processes a VIO MAY verify whether one of these | A node that processes a VIO MAY verify whether one of these | |||
| conditions happen, and when so, it MUST ignore the P-DAO and reject | conditions happen, and when so, it MUST ignore the P-DAO and reject | |||
| it with a RPL Rejection Status of "Error in VIO" in the DAO-ACK, see | it with a RPL Rejection Status of "Error in VIO" in the DAO-ACK, see | |||
| Section 10.14. | Section 11.15. | |||
| Other errors than those discussed explicitely that prevent the | Other errors than those discussed explicitely that prevent the | |||
| installing the route are acknowledged with a RPL Rejection Status of | installing the route are acknowledged with a RPL Rejection Status of | |||
| "Unqualified Rejection" in the DAO-ACK. | "Unqualified Rejection" in the DAO-ACK. | |||
| 6.3.2. Installing a Track Segment with a Storing Mode P-Route | 6.4.2. Installing a Track Segment with a Storing Mode P-Route | |||
| As illustrated in Figure 14, a Storing Mode P-DAO installs a route | As illustrated in Figure 17, a Storing Mode P-DAO installs a route | |||
| along the Segment signaled by the SM-VIO towards the Targets | along the Segment signaled by the SM-VIO towards the Targets | |||
| indicated in the Target Options. The Segment is to be included in a | indicated in the Target Options. The Segment is to be included in a | |||
| DODAG indicated by the P-DAO Base Object, that may be the one formed | DODAG indicated by the P-DAO Base Object, that may be the one formed | |||
| by the RPL Main DODAG, or a Track associated with a local RPL | by the RPL Main DODAG, or a Track associated with a local RPL | |||
| Instance. | Instance. | |||
| ------+--------- | ------+--------- | |||
| | Internet | | Internet | |||
| | | | | |||
| +-----+ | +-----+ | |||
| skipping to change at page 49, line 22 ¶ | skipping to change at page 54, line 22 ¶ | |||
| | | DAO | ACK | | | | DAO | ACK | | |||
| o o o o | | | | o o o o | | | | |||
| o o o o o o o o o | ^ | Projected . | o o o o o o o o o | ^ | Projected . | |||
| o o o o o o o o o o | | DAO | Route . | o o o o o o o o o o | | DAO | Route . | |||
| o o o o o o o o o | ^ | . | o o o o o o o o o | ^ | . | |||
| o o o o o o o o v | DAO v . | o o o o o o o o v | DAO v . | |||
| o o LLN o o o | | o o LLN o o o | | |||
| o o o o o Loose Source Route Path | | o o o o o Loose Source Route Path | | |||
| o o o o v | o o o o v | |||
| Figure 14: Projecting a route | Figure 17: Projecting a route | |||
| In order to install the relevant routing state along the Segment , | In order to install the relevant routing state along the Segment , | |||
| the Root sends a unicast P-DAO message to the Track Egress router of | the Root sends a unicast P-DAO message to the Track Egress router of | |||
| the routing Segment that is being installed. The P-DAO message | the routing Segment that is being installed. The P-DAO message | |||
| contains a SM-VIO with the strict sequence of Via Addresses. The SM- | contains a SM-VIO with the strict sequence of Via Addresses. The SM- | |||
| VIO follows one or more RTOs indicating the Targets to which the | VIO follows one or more RTOs indicating the Targets to which the | |||
| Track leads. The SM-VIO contains a Segment Lifetime for which the | Track leads. The SM-VIO contains a Segment Lifetime for which the | |||
| state is to be maintained. | state is to be maintained. | |||
| The Root sends the P-DAO directly to the Egress node of the Segment. | The Root sends the P-DAO directly to the Egress node of the Segment. | |||
| skipping to change at page 50, line 32 ¶ | skipping to change at page 55, line 32 ¶ | |||
| MUST send the DAO-ACK to the Root with a Rejection Status of | MUST send the DAO-ACK to the Root with a Rejection Status of | |||
| "Predecessor Unreachable". | "Predecessor Unreachable". | |||
| The process continues till the P-DAO is propagated to Ingress router | The process continues till the P-DAO is propagated to Ingress router | |||
| of the Segment, which answers with a DAO-ACK to the Root. The Root | of the Segment, which answers with a DAO-ACK to the Root. The Root | |||
| always expects a DAO-ACK, either from the Track Ingress with a | always expects a DAO-ACK, either from the Track Ingress with a | |||
| positive status or from any node along the segment with a negative | positive status or from any node along the segment with a negative | |||
| status. If the DAO-ACK is not received, the Root may retry the DAO | status. If the DAO-ACK is not received, the Root may retry the DAO | |||
| with the same TID, or tear down the route. | with the same TID, or tear down the route. | |||
| 6.3.3. Installing a Track Leg with a Non-Storing Mode P-Route | 6.4.3. Installing a Track Leg with a Non-Storing Mode P-Route | |||
| As illustrated in Figure 15, a Non-Storing Mode P-DAO installs a | As illustrated in Figure 18, a Non-Storing Mode P-DAO installs a | |||
| source-routed path within the Track indicated by the P-DAO Base | source-routed path within the Track indicated by the P-DAO Base | |||
| Object, towards the Targets indicated in the Target Options. The | Object, towards the Targets indicated in the Target Options. The | |||
| source-routed path requires a Source-Routing header which implies an | source-routed path requires a Source-Routing header which implies an | |||
| IP-in-IP encapsulation to add the SRH to an existing packet. It is | IP-in-IP encapsulation to add the SRH to an existing packet. It is | |||
| sent to the Track Ingress which creates a tunnel associated with the | sent to the Track Ingress which creates a tunnel associated with the | |||
| Track, and connected routes over the tunnel to the Targets in the | Track, and connected routes over the tunnel to the Targets in the | |||
| RTO. The tunnel encapsulation MUST incorporate a routing header via | RTO. The tunnel encapsulation MUST incorporate a routing header via | |||
| the list addresses listed in the VIO in the same order. The content | the list addresses listed in the VIO in the same order. The content | |||
| of the NSM-VIO starting at the first SRH-6LoRH header MUST be used | of the NSM-VIO starting at the first SRH-6LoRH header MUST be used | |||
| verbatim by the Track Ingress when it encapsulates a packet to | verbatim by the Track Ingress when it encapsulates a packet to | |||
| skipping to change at page 51, line 23 ¶ | skipping to change at page 56, line 23 ¶ | |||
| o o o o Ingress X V | X | o o o o Ingress X V | X | |||
| o o o o o o o X o X Source | o o o o o o o X o X Source | |||
| o o o o o o o o X o o X Routed | o o o o o o o o X o o X Routed | |||
| o o ° o o o o X o X Segment | o o ° o o o o X o X Segment | |||
| o o o o o o o o X Egress X | o o o o o o o o X Egress X | |||
| o o o o o | | o o o o o | | |||
| Target | Target | |||
| o o LLN o o | o o LLN o o | |||
| o o o o | o o o o | |||
| Figure 15: Projecting a Non-Storing Route | Figure 18: Projecting a Non-Storing Route | |||
| The next entry in the source-routed path must be either a neighbor of | The next entry in the source-routed path must be either a neighbor of | |||
| the previous entry, or reachable as a Target via another P-Route, | the previous entry, or reachable as a Target via another P-Route, | |||
| either Storing or Non-Storing, which implies that the nested P-Route | either Storing or Non-Storing, which implies that the nested P-Route | |||
| has to be installed before the loose sequence is, and that P-Routes | has to be installed before the loose sequence is, and that P-Routes | |||
| must be installed from the last to the first along the datapath. For | must be installed from the last to the first along the datapath. For | |||
| instance, a Segment of a Track must be installed before the Leg(s) of | instance, a Segment of a Track must be installed before the Leg(s) of | |||
| the same Track that use it, and stitched Segments must be installed | the same Track that use it, and stitched Segments must be installed | |||
| in order from the last that reaches to the Targets to the first. | in order from the last that reaches to the Targets to the first. | |||
| skipping to change at page 52, line 5 ¶ | skipping to change at page 57, line 5 ¶ | |||
| Conversely, if it is reachable over a Non-Storing Mode P-Route, the | Conversely, if it is reachable over a Non-Storing Mode P-Route, the | |||
| next loose source-routed hop of the inner Track is a Target of a | next loose source-routed hop of the inner Track is a Target of a | |||
| previously installed Track and the Ingress of a next Track, which | previously installed Track and the Ingress of a next Track, which | |||
| requires a de- and a re-encapsulation when switching the outer Tracks | requires a de- and a re-encapsulation when switching the outer Tracks | |||
| that join the loose hops. This is examplified in Section 3.5.2.3 | that join the loose hops. This is examplified in Section 3.5.2.3 | |||
| where Non-Storing Mode P-DAO 1 and 2 install strict Tracks that Non- | where Non-Storing Mode P-DAO 1 and 2 install strict Tracks that Non- | |||
| Storing Mode P-DAO 3 joins as a super Track. In such a case, packets | Storing Mode P-DAO 3 joins as a super Track. In such a case, packets | |||
| are subject to double IP-in-IP encapsulation. | are subject to double IP-in-IP encapsulation. | |||
| 6.4. Tearing Down a P-Route | 6.5. Tearing Down a P-Route | |||
| A P-DAO with a lifetime of 0 is interpreted as a No-Path DAO and | A P-DAO with a lifetime of 0 is interpreted as a No-Path DAO and | |||
| results in cleaning up existing state as opposed to refreshing an | results in cleaning up existing state as opposed to refreshing an | |||
| existing one or installing a new one. To tear down a Track, the Root | existing one or installing a new one. To tear down a Track, the Root | |||
| must tear down all the Track Segments and Legs that compose it one by | must tear down all the Track Segments and Legs that compose it one by | |||
| one. | one. | |||
| Since the state about a Leg of a Track is located only the Ingress | Since the state about a Leg of a Track is located only on the Ingress | |||
| Node, the Root cleans up the Leg by sending an NSM-VIO to the Ingress | Node, the Root cleans up the Leg by sending an NSM-VIO to the Ingress | |||
| indicating the TrackID and the P-RouteID of the Leg being removed, a | indicating the TrackID and the P-RouteID of the Leg being removed, a | |||
| Segment Lifetime of 0 and a newer Segment Sequence. The SRH-6LoRH | Segment Lifetime of 0 and a newer Segment Sequence. The SRH-6LoRH | |||
| with the Via Addresses in the NSM-VIO are not needed and MUST be | with the Via Addresses in the NSM-VIO are not needed; it SHOULD not | |||
| omitted. Upon that NSM-VIO, the Ingress node removes all state for | be placed in the message and MUST be ignored by the receiver. Upon | |||
| that Track if any, and replies positively anyway. | that NSM-VIO, the Ingress node removes all state for that Track if | |||
| any, and replies positively anyway. | ||||
| The Root cleans up a section of a Segment by sending an SM-VIO to the | The Root cleans up a section of a Segment by sending an SM-VIO to the | |||
| last node of the Segment, with the TrackID and the P-RouteID of the | last node of the Segment, with the TrackID and the P-RouteID of the | |||
| Segment being updated, a Segment Lifetime of zero (0) and a newer | Segment being updated, a Segment Lifetime of zero (0) and a newer | |||
| Segment Sequence. The Via Addresses in the SM-VIO indicates the | Segment Sequence. The Via Addresses in the SM-VIO indicates the | |||
| section of the Segment being modified, from the first to the last | section of the Segment being modified, from the first to the last | |||
| node that is impacted. This can be the whole Segment if it is | node that is impacted. This can be the whole Segment if it is | |||
| totally removed, or a sequence of one or more nodes that have been | totally removed, or a sequence of one or more nodes that have been | |||
| bypassed by a Segment update. | bypassed by a Segment update. | |||
| The No-Path P-DAO is forwarded normally along the reverse list, even | The No-Path P-DAO is forwarded normally along the reverse list, even | |||
| if the intermediate node does not find a Segment state to clean up. | if the intermediate node does not find a Segment state to clean up. | |||
| This results in cleaning up the existing Segment state if any, as | This results in cleaning up the existing Segment state if any, as | |||
| opposed to refreshing an existing one or installing a new one. | opposed to refreshing an existing one or installing a new one. | |||
| 6.5. Maintaining a Track | 6.6. Maintaining a Track | |||
| Repathing a Track Segment or Leg may cause jitter and packet | Repathing a Track Segment or Leg may cause jitter and packet | |||
| misordering. For critical flows that require timely and/or in-order | misordering. For critical flows that require timely and/or in-order | |||
| delivery, it might be necessary to deploy the PAREO functions | delivery, it might be necessary to deploy the PAREO functions | |||
| [RAW-ARCHI] over a highly redundant Track. This specification allows | [RAW-ARCHI] over a highly redundant Track. This specification allows | |||
| to use more than one Leg for a Track, and 1+N packet redundancy. | to use more than one Leg for a Track, and 1+N packet redundancy. | |||
| This section provides the steps to ensure that no packet is lost due | This section provides the steps to ensure that no packet is lost due | |||
| to the operation itself. This is ensured by installing the new | to the operation itself. This is ensured by installing the new | |||
| section from its last node to the first, so when an intermediate node | section from its last node to the first, so when an intermediate node | |||
| installs a route along the new section, all the downstream nodes in | installs a route along the new section, all the downstream nodes in | |||
| the section have already installed their own. The disabled section | the section have already installed their own. The disabled section | |||
| is removed when the packets in-flight are forwarded along the new | is removed when the packets in-flight are forwarded along the new | |||
| section as well. | section as well. | |||
| 6.5.1. Maintaining a Track Segment | 6.6.1. Maintaining a Track Segment | |||
| To modify a section of a Segment between a first node and a second, | To modify a section of a Segment between a first node and a second, | |||
| downstream node (which can be the Ingress and Egress), while | downstream node (which can be the Ingress and Egress), while | |||
| conserving those nodes in the Segment, the Root sends an SM-VIO to | conserving those nodes in the Segment, the Root sends an SM-VIO to | |||
| the second node indicating the sequence of nodes in the new section | the second node indicating the sequence of nodes in the new section | |||
| of the Segment. The SM-VIO indicates the TrackID and the P-RouteID | of the Segment. The SM-VIO indicates the TrackID and the P-RouteID | |||
| of the Segment being updated, and a newer Segment Sequence. The | of the Segment being updated, and a newer Segment Sequence. The | |||
| P-DAO is propagated from the second to the first node and on the way, | P-DAO is propagated from the second to the first node and on the way, | |||
| it updates the state on the nodes that are common to the old and the | it updates the state on the nodes that are common to the old and the | |||
| new section of the Segment and creates a state in the new nodes. | new section of the Segment and creates a state in the new nodes. | |||
| When the state is updated in an intermediate node, that node might | When the state is updated in an intermediate node, that node might | |||
| still receive packets that were in flight from the Ingress to self | still receive packets that were in flight from the Ingress to self | |||
| over the old section of the Segment. Since the remainder of the | over the old section of the Segment. Since the remainder of the | |||
| Segment is already updated, the packets are forwarded along the new | Segment is already updated, the packets are forwarded along the new | |||
| version of the Segment from that node on. | version of the Segment from that node on. | |||
| After a reasonable time to enable the deprecated sections to empty, | After a reasonable time to enable the deprecated sections to empty, | |||
| the root tears down the remaining section(s) of the old segments are | the Root tears down the remaining section(s) of the old segments are | |||
| teared down as described in Section 6.4. | teared down as described in Section 6.5. | |||
| 6.5.2. Maintaining a Track Leg | 6.6.2. Maintaining a Track Leg | |||
| This specification allows to add Legs to a Track by sending a Non- | This specification allows the Root to add Legs to a Track by sending | |||
| Storing Mode P-DAO to the Ingress associated to the same TrackID, and | a Non-Storing Mode P-DAO to the Ingress associated to the same | |||
| a new Segment ID. If the Leg is loose, then the Segments that join | TrackID, and a new Segment ID. If the Leg is loose, then the | |||
| the hops must be created first. It makes sense to add a new Leg | Segments that join the hops must be created first. It makes sense to | |||
| before removing one that is misbehaving, and switch to the new Leg | add a new Leg before removing one that is becoming excessively lossy, | |||
| before removing the old. | and switch to the new Leg before removing the old. Dropping a Track | |||
| before the new one is installed would reroute the traffic via the | ||||
| root; this may augment the latency beyond acceptable thresholds, and | ||||
| load the network near the root. This may also cause loops in the | ||||
| case of stitched Tracks; the packets that cannot be injected in the | ||||
| second Track may be routed back at reinjected at the Ingress of the | ||||
| first. | ||||
| It is also possible to update a Track Leg by sending a Non-Storing | It is also possible to update a Track Leg by sending a Non-Storing | |||
| Mode P-DAO to the Ingress with the same Segment ID, an incremented | Mode P-DAO to the Ingress with the same Segment ID, an incremented | |||
| Segment Sequence, and the new complete listy of hops in the NSM-VIO. | Segment Sequence, and the new complete list of hops in the NSM-VIO. | |||
| Updating a live Leg means changing one or more of the intermediate | Updating a live Leg means changing one or more of the intermediate | |||
| loose hops, and involves laying out new Segments from and to the new | loose hops, and involves laying out new Segments from and to the new | |||
| loose hops before the NSM-VIO for the new Leg is issued. | loose hops before the NSM-VIO for the new Leg is issued. | |||
| Packets that are in flight over the old version of the Track Leg | Packets that are in flight over the old version of the Track Leg | |||
| still follow the old source route path over the old Segments. After | still follow the old source route path over the old Segments. After | |||
| a reasonable time to enable the deprecated Segments to empty, the | a reasonable time to enable the deprecated Segments to empty, the | |||
| root tears down those Segments as described in Section 6.4. | Root tears down those Segments as described in Section 6.5. | |||
| 6.6. Encapsulating and Forwarding Along a Track | 6.7. Encapsulating and Forwarding Along a Track | |||
| When forwarding a packet to a destination for which a router | When injecting a packet in a Track, the Ingress router must | |||
| determines that routing happens via a Track for which it is Ingress, | encapsulate the packet using IP-in-IP to add the Source Routing | |||
| the router must encapsulated the packet using IP-in-IP to add the | Header with the final destination set to the Track Egress. | |||
| Source Routing Header with the final destination set to the Track | ||||
| Egress. Though fragmentation is possible in a 6LoWPAN LLN, e.g., | ||||
| using [6LoWPAN], [RFC8930], and/or [RFC8931], it is RECOMMENDED to | ||||
| allow an MTU that is larger than 1280 in the main DODAG and allows | ||||
| for the additional headers while exposing only 1280 to the 6LoWPAN | ||||
| Nodes as indicated by section 4 of [6LoWPAN]. | ||||
| All properties of a Track operations are inherited form the main RPL | All properties of a Track operations are inherited form the main RPL | |||
| Instance that is used to install the Track. For instance, the use of | Instance that is used to install the Track. For instance, the use of | |||
| compression per [RFC8138] is determined by whether it is used in the | compression per [RFC8138] is determined by whether it is used in the | |||
| RPL Main DODAG, e.g., by setting the "T" flag [TURN-ON_RFC8138] in | RPL Main DODAG, e.g., by setting the "T" flag [TURN-ON_RFC8138] in | |||
| the RPL configuration option. | the RPL configuration option. | |||
| The Track Ingress that places a packet in a Track encapsulates it | The Track Ingress that places a packet in a Track encapsulates it | |||
| with an IP-in-IP header, a Routing Header, and an IPv6 Hop-by-Hop | with an IP-in-IP header, a Routing Header, and an IPv6 Hop-by-Hop | |||
| Option Header that contains the RPL Packet Information (RPI) as | Option Header that contains the RPL Packet Information (RPI) as | |||
| skipping to change at page 55, line 11 ¶ | skipping to change at page 60, line 7 ¶ | |||
| respectively signaled as the IPv6 Source Address and the | respectively signaled as the IPv6 Source Address and the | |||
| RPLInstanceID field of the RPI that MUST be placed in the outer | RPLInstanceID field of the RPI that MUST be placed in the outer | |||
| chain of IPv6 Headers. | chain of IPv6 Headers. | |||
| The RPI carries a local RPLInstanceID called the TrackID, which, | The RPI carries a local RPLInstanceID called the TrackID, which, | |||
| in association with the DODAGID, indicates the Track along which | in association with the DODAGID, indicates the Track along which | |||
| the packet is forwarded. | the packet is forwarded. | |||
| The D flag in the RPLInstanceID MUST be set to 0 to indicate that | The D flag in the RPLInstanceID MUST be set to 0 to indicate that | |||
| the source address in the IPv6 header is set ot the DODAGID, more | the source address in the IPv6 header is set ot the DODAGID, more | |||
| in Section 6.2. | in Section 6.3. | |||
| * This draft conforms to the principles of [RFC9008] with regards to | * This draft conforms to the principles of [RFC9008] with regards to | |||
| packet forwarding and encapsulation along a Track, as follows: | packet forwarding and encapsulation along a Track, as follows: | |||
| - With this draft, the Track is a RPL DODAG. From the | - With this draft, the Track is a RPL DODAG. From the | |||
| perspective of that DODAG, the Track Ingress is the Root, the | perspective of that DODAG, the Track Ingress is the Root, the | |||
| Track Egress is a RPL-Aware 6LR, and neighbors of the Track | Track Egress is a RPL-Aware 6LR, and neighbors of the Track | |||
| Egress that can be reached via the Track, but are external to | Egress that can be reached via the Track, but are external to | |||
| it, are external destinations and treated as RPL-Unaware Leaves | it, are external destinations and treated as RPL-Unaware Leaves | |||
| (RULs). The encapsulation rules in [RFC9008] apply. | (RULs). The encapsulation rules in [RFC9008] apply. | |||
| skipping to change at page 56, line 14 ¶ | skipping to change at page 61, line 14 ¶ | |||
| * When a Track Egress extracts a packet from a Track (decapsulates | * When a Track Egress extracts a packet from a Track (decapsulates | |||
| the packet), the destination of the inner packet must be either | the packet), the destination of the inner packet must be either | |||
| this node or a direct neighbor, or a Target of another Segment of | this node or a direct neighbor, or a Target of another Segment of | |||
| the same Track for which this node is Ingress, otherwise the | the same Track for which this node is Ingress, otherwise the | |||
| packet MUST be dropped. | packet MUST be dropped. | |||
| In case of a failure forwarding a packet along a Segment, e.g., the | In case of a failure forwarding a packet along a Segment, e.g., the | |||
| next hop is unreachable, the node that discovers the fault MUST send | next hop is unreachable, the node that discovers the fault MUST send | |||
| an ICMPv6 Error message [RFC4443] to the Root, with a new Code "Error | an ICMPv6 Error message [RFC4443] to the Root, with a new Code "Error | |||
| in P-Route" (See Section 10.13). The Root can then repair by | in P-Route" (See Section 11.14). The Root can then repair by | |||
| updating the broken Segment and/or Tracks, and in the case of a | updating the broken Segment and/or Tracks, and in the case of a | |||
| broken Segment, remove the leftover sections of the segment using SM- | broken Segment, remove the leftover sections of the segment using SM- | |||
| VIOs with a lifetime of 0 indicating the section ot one or more nodes | VIOs with a lifetime of 0 indicating the section ot one or more nodes | |||
| being removed (See Section 6.5). | being removed (See Section 6.6). | |||
| In case of a permanent forwarding error along a Source Route path, | In case of a permanent forwarding error along a Source Route path, | |||
| the node that fails to forward SHOULD send an ICMP error with a code | the node that fails to forward SHOULD send an ICMP error with a code | |||
| "Error in Source Routing Header" back to the source of the packet, as | "Error in Source Routing Header" back to the source of the packet, as | |||
| described in section 11.2.2.3. of [RPL]. Upon this message, the | described in section 11.2.2.3. of [RPL]. Upon this message, the | |||
| encapsulating node SHOULD stop using the source route path for a | encapsulating node SHOULD stop using the source route path for a | |||
| reasonable period of time which duration depends on the deployment, | reasonable period of time which duration depends on the deployment, | |||
| and it SHOULD send an ICMP message with a Code "Error in P-Route" to | and it SHOULD send an ICMP message with a Code "Error in P-Route" to | |||
| the Root. Failure to follow these steps may result in packet loss | the Root. Failure to follow these steps may result in packet loss | |||
| and wasted resources along the source route path that is broken. | and wasted resources along the source route path that is broken. | |||
| skipping to change at page 56, line 43 ¶ | skipping to change at page 61, line 43 ¶ | |||
| error happened. | error happened. | |||
| The portion of the invoking packet that is sent back in the ICMP | The portion of the invoking packet that is sent back in the ICMP | |||
| message SHOULD record at least up to the RH if one is present, and | message SHOULD record at least up to the RH if one is present, and | |||
| this hop of the RH SHOULD be consumed by this node so that the | this hop of the RH SHOULD be consumed by this node so that the | |||
| destination in the IPv6 header is the next hop that this node could | destination in the IPv6 header is the next hop that this node could | |||
| not reach. if a 6LoWPAN Routing Header (6LoRH) [RFC8138] is used to | not reach. if a 6LoWPAN Routing Header (6LoRH) [RFC8138] is used to | |||
| carry the IPv6 routing information in the outer header then that | carry the IPv6 routing information in the outer header then that | |||
| whole 6LoRH information SHOULD be present in the ICMP message. | whole 6LoRH information SHOULD be present in the ICMP message. | |||
| 6.7. Compression of the RPL Artifacts | 6.8. Compression of the RPL Artifacts | |||
| When using [RFC8138] in the Main DODAG operated in Non-Storing Mode | When using [RFC8138] in the Main DODAG operated in Non-Storing Mode | |||
| in a 6LoWPAN LLN, a typical packet that circulates in the Main DODAG | in a 6LoWPAN LLN, a typical packet that circulates in the Main DODAG | |||
| is formatted as shown in Figure 16, representing the case where : | is formatted as shown in Figure 19, representing the case where : | |||
| +-+ ... -+- ... -+- ... -+-+- ... +-+-+-+ ... +-+-+ ... -+ ... +-... | +-+ ... -+- ... -+- ... -+-+- ... +-+-+-+ ... +-+-+ ... -+ ... +-... | |||
| |11110001| SRH- | RPI- | IP-in-IP | NH=1 |11110CPP| UDP | UDP | |11110001| SRH- | RPI- | IP-in-IP | NH=1 |11110CPP| UDP | UDP | |||
| | Page 1 | 6LoRH | 6LoRH | 6LoRH |LOWPAN_IPHC| UDP | hdr |Payld | | Page 1 | 6LoRH | 6LoRH | 6LoRH |LOWPAN_IPHC| UDP | hdr |Payld | |||
| +-+ ... -+- ... -+- ... -+-+- ... +-+-+-+ ... +-+-+ ... -+ ... +-... | +-+ ... -+- ... -+- ... -+-+- ... +-+-+-+ ... +-+-+ ... -+ ... +-... | |||
| <= RFC 6282 => | <= RFC 6282 => | |||
| <================ Inner packet ==================== = = | <================ Inner packet ==================== = = | |||
| Figure 16: A Packet as Forwarded along the Main DODAG | Figure 19: A Packet as Forwarded along the Main DODAG | |||
| Since there is no page switch between the encapsulated packet and the | Since there is no page switch between the encapsulated packet and the | |||
| encapsulation, the first octet of the compressed packet that acts as | encapsulation, the first octet of the compressed packet that acts as | |||
| page selector is actually removed at encapsulation, so the inner | page selector is actually removed at encapsulation, so the inner | |||
| packet used in the descriptions below start with the SRH-6LoRH, and | packet used in the descriptions below start with the SRH-6LoRH, and | |||
| is verbatim the packet represented in Figure 16 from the second octet | is verbatim the packet represented in Figure 19 from the second octet | |||
| on. | on. | |||
| When encapsulating that inner packet to place it in the Track, the | When encapsulating that inner packet to place it in the Track, the | |||
| first header that the Ingress appends at the head of the inner packet | first header that the Ingress appends at the head of the inner packet | |||
| is an IP-in-IP 6LoRH Header; in that header, the encapsulator | is an IP-in-IP 6LoRH Header; in that header, the encapsulator | |||
| address, which maps to the IPv6 source address in the uncompressed | address, which maps to the IPv6 source address in the uncompressed | |||
| form, contains a GUA or ULA IPv6 address of the Ingress node that | form, contains a GUA or ULA IPv6 address of the Ingress node that | |||
| serves as DODAG ID for the Track, expressed in the compressed form | serves as DODAG ID for the Track, expressed in the compressed form | |||
| and using the DODAGID of the Main DODAG as compression reference. If | and using the DODAGID of the Main DODAG as compression reference. If | |||
| the address is compressed to 2 bytes, the resulting value for the | the address is compressed to 2 bytes, the resulting value for the | |||
| Length field shown in Figure 17 is 3, meaning that the SRH-6LoRH as a | Length field shown in Figure 20 is 3, meaning that the SRH-6LoRH as a | |||
| whole is 5-octets long. | whole is 5-octets long. | |||
| 0 1 2 | 0 1 2 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- ... -+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- ... -+ | |||
| |1|0|1| Length | 6LoRH Type 6 | Hop Limit | Track DODAGID | | |1|0|1| Length | 6LoRH Type 6 | Hop Limit | Track DODAGID | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- ... -+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- ... -+ | |||
| Figure 17: The IP-in-IP 6LoRH Header | Figure 20: The IP-in-IP 6LoRH Header | |||
| At the head of the resulting sequence of bytes, the track Ingress | At the head of the resulting sequence of bytes, the track Ingress | |||
| then adds the RPI that carries the TrackID as RPLinstanceID as a P- | then adds the RPI that carries the TrackID as RPLinstanceID as a P- | |||
| RPI-6LoRH Header, as illustrated in Figure 8, using the TrackID as | RPI-6LoRH Header, as illustrated in Figure 11, using the TrackID as | |||
| RPLInstanceID. Combined with the IP-in-IP 6LoRH Header, this allows | RPLInstanceID. Combined with the IP-in-IP 6LoRH Header, this allows | |||
| to identify the Track without ambiguity. | to identify the Track without ambiguity. | |||
| The SRH-6LoRH is then added at the head of the resulting sequence of | The SRH-6LoRH is then added at the head of the resulting sequence of | |||
| bytes as a verbatim copy of the content of the SR-VIO that signaled | bytes as a verbatim copy of the content of the SR-VIO that signaled | |||
| the selected Track Leg. | the selected Track Leg. | |||
| 0 1 | 0 1 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 .. .. .. | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 .. .. .. | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- -+- -+ ... +- -+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- -+- -+ ... +- -+ | |||
| |1|0|0| Size |6LoRH Type 0..4| Hop1 | Hop2 | | HopN | | |1|0|0| Size |6LoRH Type 0..4| Hop1 | Hop2 | | HopN | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- -+- -+ ... +- -+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- -+- -+ ... +- -+ | |||
| Where N = Size + 1 | Where N = Size + 1 | |||
| Figure 18: The SRH 6LoRH Header | Figure 21: The SRH 6LoRH Header | |||
| The format of the resulting encapsulated packet in [RFC8138] | The format of the resulting encapsulated packet in [RFC8138] | |||
| compressed form is illustrated in Figure 19: | compressed form is illustrated in Figure 22: | |||
| +-+ ... -+-+-+- ... -+-+-+- ... -+-+-+-+-+- ... +-+-+-+-+-+-+- ... | +-+ ... -+-+-+- ... -+-+-+- ... -+-+-+-+-+- ... +-+-+-+-+-+-+- ... | |||
| | Page 1 | SRH-6LoRH | P-RPI-6LoRH | IP-in-IP 6LoRH | Inner Packet | | Page 1 | SRH-6LoRH | P-RPI-6LoRH | IP-in-IP 6LoRH | Inner Packet | |||
| +-+ ... -+-+-+- ... -+-+-+- ... -+-+-+-+-+- ... +-+-+-+-+-+-+- ... | +-+ ... -+-+-+- ... -+-+-+- ... -+-+-+-+-+- ... +-+-+-+-+-+-+- ... | |||
| Signals : Loose Hops : TrackID : Track DODAGID : | Signals : Loose Hops : TrackID : Track DODAGID : | |||
| Figure 19: A Packet as Forwarded along a Track | Figure 22: A Packet as Forwarded along a Track | |||
| 7. Lesser Constrained Variations | 7. Lesser Constrained Variations | |||
| 7.1. Storing Mode Main DODAG | 7.1. Storing Mode Main DODAG | |||
| This specification expects that the Main DODAG is operated in Non- | This specification expects that the Main DODAG is operated in Non- | |||
| Storing Mode. The reasons for that limitation are mostly related to | Storing Mode. The reasons for that limitation are mostly related to | |||
| LLN operations, power and spectrum conservation: | LLN operations, power and spectrum conservation: | |||
| * In Non-Storing Mode The Root already possesses the DODAG topology, | * In Non-Storing Mode The Root already possesses the DODAG topology, | |||
| skipping to change at page 59, line 22 ¶ | skipping to change at page 64, line 22 ¶ | |||
| trade-off than the Non-Storing, as it reduces the route stretch and | trade-off than the Non-Storing, as it reduces the route stretch and | |||
| lowers the load on the Root. In that case, the control path between | lowers the load on the Root. In that case, the control path between | |||
| the Root and the LLN nodes is highly available compared to LLNs, and | the Root and the LLN nodes is highly available compared to LLNs, and | |||
| the nodes can be reached to maintain the P-Routes at most times. | the nodes can be reached to maintain the P-Routes at most times. | |||
| This section specifies the additions that are needed to support | This section specifies the additions that are needed to support | |||
| Projected Routes when the Main DODAG is operated in Storing Mode. As | Projected Routes when the Main DODAG is operated in Storing Mode. As | |||
| long as the RPI can be processed adequately by the dataplane, the | long as the RPI can be processed adequately by the dataplane, the | |||
| changes to this specification are limited to the DAO message. The | changes to this specification are limited to the DAO message. The | |||
| Track structure, routes and forwarding operations remain the same. | Track structure, routes and forwarding operations remain the same. | |||
| Since there is no capability negotiation, the expectation is that all | ||||
| the nodes in the network support this specification in the same | ||||
| fashion, or are configured the same way through management. | ||||
| In Storing Mode, the Root misses the Child to Parent relationship | In Storing Mode, the Root misses the Child to Parent relationship | |||
| that forms the Main DODAG, as well as the sibling information. To | that forms the Main DODAG, as well as the sibling information. To | |||
| provide that knowledge the nodes in the network MUST send additional | provide that knowledge the nodes in the network MUST send additional | |||
| DAO messages that are unicast to the Root as Non-Storing DAO messages | DAO messages that are unicast to the Root as Non-Storing DAO messages | |||
| are. | are. | |||
| In the DAO message, the originating router advertises a set of | In the DAO message, the originating router advertises a set of | |||
| neighbor nodes using Sibling Information Options (SIO)s, regardless | neighbor nodes using Sibling Information Options (SIO)s, regardless | |||
| of the relative position in the DODAG of the advertised node vs. this | of the relative position in the DODAG of the advertised node vs. this | |||
| skipping to change at page 60, line 10 ¶ | skipping to change at page 65, line 17 ¶ | |||
| aligned with the values used in the Address Registration of the | aligned with the values used in the Address Registration of the | |||
| node(s) advertised in the SIO, as explained in Section 9.1. of | node(s) advertised in the SIO, as explained in Section 9.1. of | |||
| [RFC9010]. Having similar values in all nodes allows to factorise | [RFC9010]. Having similar values in all nodes allows to factorise | |||
| the TIO for multiple SIOs as done with [RPL]. | the TIO for multiple SIOs as done with [RPL]. | |||
| * The TIO is followed by one or more SIOs that provide an address | * The TIO is followed by one or more SIOs that provide an address | |||
| (ULA or GUA) of the advertised neighbor node. | (ULA or GUA) of the advertised neighbor node. | |||
| But the RPL routing information headers may not be supported on all | But the RPL routing information headers may not be supported on all | |||
| type of routed network infrastructures, especially not in high-speed | type of routed network infrastructures, especially not in high-speed | |||
| routers. When the RPI is not be supported in the dataplane, there | routers. When the RPI is not supported in the dataplane, there | |||
| cannot be local RPL Instances and RPL can only operate as a single | cannot be local RPL Instances and RPL can only operate as a single | |||
| topology (the Main DODAG). The RPL Instance is that of the Main | topology (the Main DODAG). The RPL Instance is that of the Main | |||
| DODAG and the Ingress node that encapsulates is not the Root. The | DODAG and the Ingress node that encapsulates is not the Root. The | |||
| routes along the Tracks are alternate routes to those available along | routes along the Tracks are alternate routes to those available along | |||
| the Main DODAG. They MAY conflict with routes to children and MUST | the Main DODAG. They MAY conflict with routes to children and MUST | |||
| take precedence in the routing table. The Targets MUST be adjacent | take precedence in the routing table. The Targets MUST be adjacent | |||
| to the Track Egress to avoid loops that may form if the packet is | to the Track Egress to avoid loops that may form if the packet is | |||
| reinjected in the Main DODAG. | reinjected in the Main DODAG. | |||
| 7.2. A Track as a Full DODAG | 7.2. A Track as a Full DODAG | |||
| skipping to change at page 61, line 35 ¶ | skipping to change at page 66, line 47 ¶ | |||
| This document provides a set of tools that may or may not be needed | This document provides a set of tools that may or may not be needed | |||
| by an implementation depending on the type of application it serves. | by an implementation depending on the type of application it serves. | |||
| This sections described profiles that can be implemented separately | This sections described profiles that can be implemented separately | |||
| and can be used to discriminate what an implementation can and cannot | and can be used to discriminate what an implementation can and cannot | |||
| do. This section describes profiles that enable to implement only a | do. This section describes profiles that enable to implement only a | |||
| portion of this specification to meet a particular use case. | portion of this specification to meet a particular use case. | |||
| Profiles 0 to 2 operate in the Main RPL Instance and do not require | Profiles 0 to 2 operate in the Main RPL Instance and do not require | |||
| the support of local RPL Instances or the indication of the RPL | the support of local RPL Instances or the indication of the RPL | |||
| Instance in the data plane. Profile 3 and above leverage Local RPL | Instance in the data plane. Profile 3 and above leverage Local RPL | |||
| Instances to build arbitrary Tracks rooted at the Track Ingress and | Instances to build arbitrary Tracks Rooted at the Track Ingress and | |||
| using its namespace for TrackID. | using its namespace for TrackID. | |||
| Profiles 0 and 1 are REQUIRED by all implementations that may be used | Profiles 0 and 1 are REQUIRED by all implementations that may be used | |||
| in LLNs; this enables to use Storing Mode to reduce the size of the | in LLNs; this enables to use Storing Mode to reduce the size of the | |||
| Source Route Header in the most common LLN deployments. Profile 2 is | Source Route Header in the most common LLN deployments. Profile 2 is | |||
| RECOMMENDED in high speed / wired environment to enable traffic | RECOMMENDED in high speed / wired environment to enable traffic | |||
| Engineering and network automation. All the other profile / | Engineering and network automation. All the other profile / | |||
| environment combinations are OPTIONAL. | environment combinations are OPTIONAL. | |||
| Profile 0 Profile 0 is the Legacy support of [RPL] Non-Storing Mode, | Profile 0 Profile 0 is the Legacy support of [RPL] Non-Storing Mode, | |||
| skipping to change at page 63, line 16 ¶ | skipping to change at page 68, line 29 ¶ | |||
| for use cases where an arbitrary node in the network can afford | for use cases where an arbitrary node in the network can afford | |||
| the same code complexity as the RPL Root in a traditional | the same code complexity as the RPL Root in a traditional | |||
| deployment. It offers a full DODAG visibility to the Track | deployment. It offers a full DODAG visibility to the Track | |||
| Ingress as specified in Section 7.2 in a Non-Storing Mode Main | Ingress as specified in Section 7.2 in a Non-Storing Mode Main | |||
| DODAG. | DODAG. | |||
| Profile 9 Profile 9 combines profiles 7 and 8, operating the Track | Profile 9 Profile 9 combines profiles 7 and 8, operating the Track | |||
| as a full DODAG within a Storing Mode Main DODAG, using only the | as a full DODAG within a Storing Mode Main DODAG, using only the | |||
| Main DODAG RPLInstanceID as TrackID. | Main DODAG RPLInstanceID as TrackID. | |||
| 9. Security Considerations | 9. Backwards Compatibility | |||
| This specification can operate in a mixed network where some nodes | ||||
| support it and some do not. There are restructions, though. All | ||||
| nodes that need to process a P-DAO must support this specification. | ||||
| As discussed in Section 3.7.1, how the root knows whether the nodes | ||||
| capabilities and whether it support this specification is out of | ||||
| scope. | ||||
| This specification defines the 'D' flag in the RPL DODAG | ||||
| Configuration Option (see Section 4.1.6) to signal that the RPL nodes | ||||
| can request the creation of Tracks. The requester may not know | ||||
| whether the Track can effectively be constructed, and whether enough | ||||
| nodes along the preferred paths support this specification. | ||||
| Therefore it makes sense to only set the 'D' flags in DIO when the | ||||
| conditions of success are in place, in particular when all the nodes | ||||
| that could be on path of tracks are upgraded. | ||||
| 10. Security Considerations | ||||
| It is worth noting that with [RPL], every node in the LLN is RPL- | It is worth noting that with [RPL], every node in the LLN is RPL- | |||
| aware and can inject any RPL-based attack in the network. This draft | aware and can inject any RPL-based attack in the network. This draft | |||
| uses messages that are already present in RPL [RPL] with optional | uses messages that are already present in RPL [RPL] with optional | |||
| secured versions. The same secured versions may be used with this | secured versions. The same secured versions may be used with this | |||
| draft, and whatever security is deployed for a given network also | draft, and whatever security is deployed for a given network also | |||
| applies to the flows in this draft. | applies to the flows in this draft. | |||
| The LLN nodes depend on the 6LBR and the RPL participants for their | The LLN nodes depend on the 6LBR and the RPL participants for their | |||
| operation. A trust model must be put in place to ensure that the | operation. A trust model must be put in place to ensure that the | |||
| skipping to change at page 63, line 40 ¶ | skipping to change at page 69, line 29 ¶ | |||
| security. This is a generic 6LoWPAN requirement, see Req5.1 in | security. This is a generic 6LoWPAN requirement, see Req5.1 in | |||
| Appendix B.5 of [RFC8505]. | Appendix B.5 of [RFC8505]. | |||
| In a general manner, the Security Considerations in [RPL], and | In a general manner, the Security Considerations in [RPL], and | |||
| [RFC7416] apply to this specification as well. The Link-Layer | [RFC7416] apply to this specification as well. The Link-Layer | |||
| security is needed in particular to prevent Denial-Of-Service attacks | security is needed in particular to prevent Denial-Of-Service attacks | |||
| whereby a rogue router creates a high churn in the RPL network by | whereby a rogue router creates a high churn in the RPL network by | |||
| constantly injected forged P-DAO messages and using up all the | constantly injected forged P-DAO messages and using up all the | |||
| available storage in the attacked routers. | available storage in the attacked routers. | |||
| With this specification, only the Root may generate P-DAO messages. | ||||
| PDR messages may only be sent to the Root. This specification | ||||
| expects that the communication with the Root is authenticated but | ||||
| does enforce which method is used. | ||||
| Additionally, the trust model could include a role validation (e.g., | Additionally, the trust model could include a role validation (e.g., | |||
| using a role-based authorization) to ensure that the node that claims | using a role-based authorization) to ensure that the node that claims | |||
| to be a RPL Root is entitled to do so. That trust should propagate | to be a RPL Root is entitled to do so. That trust should propagate | |||
| from Egress to Ingress in the case of a Storing Mode P-DAO. | from Egress to Ingress in the case of a Storing Mode P-DAO. | |||
| This specification suggests some validation of the VIO to prevent | This specification suggests some validation of the VIO to prevent | |||
| basic loops by avoiding that a node appears twice. But that is only | basic loops by avoiding that a node appears twice. But that is only | |||
| a minimal protection. Arguably, an attacker tha can inject P-DAOs | a minimal protection. Arguably, an attacker tha can inject P-DAOs | |||
| can reroute any traffic and deplete critical resources such as | can reroute any traffic and deplete critical resources such as | |||
| spectrum and battery in the LLN rapidly. | spectrum and battery in the LLN rapidly. | |||
| 10. IANA Considerations | 11. IANA Considerations | |||
| 10.1. New Elective 6LoWPAN Routing Header Type | ||||
| 11.1. RPL DODAG Configuration Option Flag | ||||
| IANA is requested to assign a flag from the "DODAG Configuration | ||||
| Option Flags for MOP 0..6" [RFC9010] registry as follows: | ||||
| +---------------+------------------------------+-----------+ | ||||
| | Bit Number | Capability Description | Reference | | ||||
| +---------------+------------------------------+-----------+ | ||||
| | 0 (suggested) | Projected Routes Support (D) | THIS RFC | | ||||
| +---------------+------------------------------+-----------+ | ||||
| Table 21: New DODAG Configuration Option Flag | ||||
| IANA is requested to add [THIS RFC] as a reference for MOP 7 in the | ||||
| RPL Mode of Operation registry. | ||||
| 11.2. Elective 6LoWPAN Routing Header Type | ||||
| This document updates the IANA registry titled "Elective 6LoWPAN | This document updates the IANA registry titled "Elective 6LoWPAN | |||
| Routing Header Type" that was created for [RFC8138] and assigns the | Routing Header Type" that was created for [RFC8138] and assigns the | |||
| following value: | following value: | |||
| +===============+=============+===============+ | +===============+=============+===============+ | |||
| | Value | Description | Reference | | | Value | Description | Reference | | |||
| +===============+=============+===============+ | +===============+=============+===============+ | |||
| | 8 (Suggested) | P-RPI-6LoRH | This document | | | 8 (Suggested) | P-RPI-6LoRH | This document | | |||
| +---------------+-------------+---------------+ | +---------------+-------------+---------------+ | |||
| Table 21: New Elective 6LoWPAN Routing | Table 22: New Elective 6LoWPAN Routing | |||
| Header Type | Header Type | |||
| 10.2. New Critical 6LoWPAN Routing Header Type | 11.3. Critical 6LoWPAN Routing Header Type | |||
| This document updates the IANA registry titled "Critical 6LoWPAN | This document updates the IANA registry titled "Critical 6LoWPAN | |||
| Routing Header Type" that was created for [RFC8138] and assigns the | Routing Header Type" that was created for [RFC8138] and assigns the | |||
| following value: | following value: | |||
| +===============+=============+===============+ | +===============+=============+===============+ | |||
| | Value | Description | Reference | | | Value | Description | Reference | | |||
| +===============+=============+===============+ | +===============+=============+===============+ | |||
| | 8 (Suggested) | P-RPI-6LoRH | This document | | | 8 (Suggested) | P-RPI-6LoRH | This document | | |||
| +---------------+-------------+---------------+ | +---------------+-------------+---------------+ | |||
| Table 22: New Critical 6LoWPAN Routing | Table 23: New Critical 6LoWPAN Routing | |||
| Header Type | Header Type | |||
| 10.3. New Subregistry For The RPL Option Flags | 11.4. Subregistry For The RPL Option Flags | |||
| IANA is required to create a subregistry for the 8-bit RPL Option | IANA is required to create a subregistry for the 8-bit RPL Option | |||
| Flags field, as detailed in Figure 7, under the "Routing Protocol for | Flags field, as detailed in Figure 10, under the "Routing Protocol | |||
| Low Power and Lossy Networks (RPL)" registry. The bits are indexed | for Low Power and Lossy Networks (RPL)" registry. The bits are | |||
| from 0 (leftmost) to 7. Each bit is Tracked with the following | indexed from 0 (leftmost) to 7. Each bit is Tracked with the | |||
| qualities: | following qualities: | |||
| * Bit number (counting from bit 0 as the most significant bit) | * Bit number (counting from bit 0 as the most significant bit) | |||
| * Indication When Set | * Indication When Set | |||
| * Reference | * Reference | |||
| Registration procedure is "Standards Action" [RFC8126]. The initial | Registration procedure is "Standards Action" [RFC8126]. The initial | |||
| allocation is as indicated in Table 26: | allocation is as indicated in Table 27: | |||
| +===============+======================+===============+ | +===============+======================+===============+ | |||
| | Bit number | Indication When Set | Reference | | | Bit number | Indication When Set | Reference | | |||
| +===============+======================+===============+ | +===============+======================+===============+ | |||
| | 0 | Down 'O' | [RFC6553] | | | 0 | Down 'O' | [RFC6553] | | |||
| +---------------+----------------------+---------------+ | +---------------+----------------------+---------------+ | |||
| | 1 | Rank-Error (R) | [RFC6553] | | | 1 | Rank-Error (R) | [RFC6553] | | |||
| +---------------+----------------------+---------------+ | +---------------+----------------------+---------------+ | |||
| | 2 | Forwarding-Error (F) | [RFC6553] | | | 2 | Forwarding-Error (F) | [RFC6553] | | |||
| +---------------+----------------------+---------------+ | +---------------+----------------------+---------------+ | |||
| | 3 (Suggested) | Projected-Route (P) | This document | | | 3 (Suggested) | Projected-Route (P) | This document | | |||
| +---------------+----------------------+---------------+ | +---------------+----------------------+---------------+ | |||
| Table 23: Initial PDR Flags | Table 24: Initial PDR Flags | |||
| 10.4. New RPL Control Codes | 11.5. RPL Control Codes | |||
| This document extends the IANA Subregistry created by RFC 6550 for | This document extends the IANA Subregistry created by RFC 6550 for | |||
| RPL Control Codes as indicated in Table 24: | RPL Control Codes as indicated in Table 25: | |||
| +==================+=============================+===============+ | +==================+=============================+===============+ | |||
| | Code | Description | Reference | | | Code | Description | Reference | | |||
| +==================+=============================+===============+ | +==================+=============================+===============+ | |||
| | 0x09 (Suggested) | Projected DAO Request (PDR) | This document | | | 0x09 (Suggested) | Projected DAO Request (PDR) | This document | | |||
| +------------------+-----------------------------+---------------+ | +------------------+-----------------------------+---------------+ | |||
| | 0x0A (Suggested) | PDR-ACK | This document | | | 0x0A (Suggested) | PDR-ACK | This document | | |||
| +------------------+-----------------------------+---------------+ | +------------------+-----------------------------+---------------+ | |||
| Table 24: New RPL Control Codes | Table 25: New RPL Control Codes | |||
| 10.5. New RPL Control Message Options | 11.6. RPL Control Message Options | |||
| This document extends the IANA Subregistry created by RFC 6550 for | This document extends the IANA Subregistry created by RFC 6550 for | |||
| RPL Control Message Options as indicated in Table 25: | RPL Control Message Options as indicated in Table 26: | |||
| +==================+=============================+===============+ | +==================+=============================+===============+ | |||
| | Value | Meaning | Reference | | | Value | Meaning | Reference | | |||
| +==================+=============================+===============+ | +==================+=============================+===============+ | |||
| | 0x0E (Suggested) | Stateful VIO (SM-VIO) | This document | | | 0x0E (Suggested) | Stateful VIO (SM-VIO) | This document | | |||
| +------------------+-----------------------------+---------------+ | +------------------+-----------------------------+---------------+ | |||
| | 0x0F (Suggested) | Source-Routed VIO (NSM-VIO) | This document | | | 0x0F (Suggested) | Source-Routed VIO (NSM-VIO) | This document | | |||
| +------------------+-----------------------------+---------------+ | +------------------+-----------------------------+---------------+ | |||
| | 0x10 (Suggested) | Sibling Information option | This document | | | 0x10 (Suggested) | Sibling Information option | This document | | |||
| +------------------+-----------------------------+---------------+ | +------------------+-----------------------------+---------------+ | |||
| Table 25: RPL Control Message Options | Table 26: RPL Control Message Options | |||
| 10.6. SubRegistry for the Projected DAO Request Flags | 11.7. SubRegistry for the Projected DAO Request Flags | |||
| IANA is required to create a registry for the 8-bit Projected DAO | IANA is required to create a registry for the 8-bit Projected DAO | |||
| Request (PDR) Flags field. Each bit is Tracked with the following | Request (PDR) Flags field. Each bit is Tracked with the following | |||
| qualities: | qualities: | |||
| * Bit number (counting from bit 0 as the most significant bit) | * Bit number (counting from bit 0 as the most significant bit) | |||
| * Capability description | * Capability description | |||
| * Reference | * Reference | |||
| Registration procedure is "Standards Action" [RFC8126]. The initial | Registration procedure is "Standards Action" [RFC8126]. The initial | |||
| allocation is as indicated in Table 26: | allocation is as indicated in Table 27: | |||
| +============+========================+===============+ | +============+========================+===============+ | |||
| | Bit number | Capability description | Reference | | | Bit number | Capability description | Reference | | |||
| +============+========================+===============+ | +============+========================+===============+ | |||
| | 0 | PDR-ACK request (K) | This document | | | 0 | PDR-ACK request (K) | This document | | |||
| +------------+------------------------+---------------+ | +------------+------------------------+---------------+ | |||
| | 1 | Requested path should | This document | | | 1 | Requested path should | This document | | |||
| | | be redundant (R) | | | | | be redundant (R) | | | |||
| +------------+------------------------+---------------+ | +------------+------------------------+---------------+ | |||
| Table 26: Initial PDR Flags | Table 27: Initial PDR Flags | |||
| 10.7. SubRegistry for the PDR-ACK Flags | 11.8. SubRegistry for the PDR-ACK Flags | |||
| IANA is required to create an subregistry for the 8-bit PDR-ACK Flags | IANA is required to create an subregistry for the 8-bit PDR-ACK Flags | |||
| field. Each bit is Tracked with the following qualities: | field. Each bit is Tracked with the following qualities: | |||
| * Bit number (counting from bit 0 as the most significant bit) | * Bit number (counting from bit 0 as the most significant bit) | |||
| * Capability description | * Capability description | |||
| * Reference | * Reference | |||
| Registration procedure is "Standards Action" [RFC8126]. No bit is | Registration procedure is "Standards Action" [RFC8126]. No bit is | |||
| currently defined for the PDR-ACK Flags. | currently defined for the PDR-ACK Flags. | |||
| 10.8. Subregistry for the PDR-ACK Acceptance Status Values | 11.9. Subregistry for the PDR-ACK Acceptance Status Values | |||
| IANA is requested to create a Subregistry for the PDR-ACK Acceptance | IANA is requested to create a Subregistry for the PDR-ACK Acceptance | |||
| Status values. | Status values. | |||
| * Possible values are 6-bit unsigned integers (0..63). | * Possible values are 6-bit unsigned integers (0..63). | |||
| * Registration procedure is "Standards Action" [RFC8126]. | * Registration procedure is "Standards Action" [RFC8126]. | |||
| * Initial allocation is as indicated in Table 27: | * Initial allocation is as indicated in Table 28: | |||
| +-------+------------------------+---------------+ | +-------+------------------------+---------------+ | |||
| | Value | Meaning | Reference | | | Value | Meaning | Reference | | |||
| +-------+------------------------+---------------+ | +-------+------------------------+---------------+ | |||
| | 0 | Unqualified Acceptance | This document | | | 0 | Unqualified Acceptance | This document | | |||
| +-------+------------------------+---------------+ | +-------+------------------------+---------------+ | |||
| Table 27: Acceptance values of the PDR-ACK Status | Table 28: Acceptance values of the PDR-ACK Status | |||
| 10.9. Subregistry for the PDR-ACK Rejection Status Values | 11.10. Subregistry for the PDR-ACK Rejection Status Values | |||
| IANA is requested to create a Subregistry for the PDR-ACK Rejection | IANA is requested to create a Subregistry for the PDR-ACK Rejection | |||
| Status values. | Status values. | |||
| * Possible values are 6-bit unsigned integers (0..63). | * Possible values are 6-bit unsigned integers (0..63). | |||
| * Registration procedure is "Standards Action" [RFC8126]. | * Registration procedure is "Standards Action" [RFC8126]. | |||
| * Initial allocation is as indicated in Table 28: | * Initial allocation is as indicated in Table 29: | |||
| +-------+-----------------------+---------------+ | +-------+-----------------------+---------------+ | |||
| | Value | Meaning | Reference | | | Value | Meaning | Reference | | |||
| +-------+-----------------------+---------------+ | +-------+-----------------------+---------------+ | |||
| | 0 | Unqualified Rejection | This document | | | 0 | Unqualified Rejection | This document | | |||
| +-------+-----------------------+---------------+ | +-------+-----------------------+---------------+ | |||
| | 1 | Transient Failure | This document | | | 1 | Transient Failure | This document | | |||
| +-------+-----------------------+---------------+ | +-------+-----------------------+---------------+ | |||
| Table 28: Rejection values of the PDR-ACK Status | Table 29: Rejection values of the PDR-ACK Status | |||
| 10.10. SubRegistry for the Via Information Options Flags | 11.11. SubRegistry for the Via Information Options Flags | |||
| IANA is requested to create a Subregistry for the 5-bit Via | IANA is requested to create a Subregistry for the 5-bit Via | |||
| Information Options (Via Information Option) Flags field. Each bit | Information Options (Via Information Option) Flags field. Each bit | |||
| is Tracked with the following qualities: | is Tracked with the following qualities: | |||
| * Bit number (counting from bit 0 as the most significant bit) | * Bit number (counting from bit 0 as the most significant bit) | |||
| * Capability description | * Capability description | |||
| * Reference | * Reference | |||
| Registration procedure is "Standards Action" [RFC8126]. No bit is | Registration procedure is "Standards Action" [RFC8126]. No bit is | |||
| currently defined for the Via Information Options (Via Information | currently defined for the Via Information Options (Via Information | |||
| Option) Flags. | Option) Flags. | |||
| 10.11. SubRegistry for the Sibling Information Option Flags | 11.12. SubRegistry for the Sibling Information Option Flags | |||
| IANA is required to create a registry for the 5-bit Sibling | IANA is required to create a registry for the 5-bit Sibling | |||
| Information Option (SIO) Flags field. Each bit is Tracked with the | Information Option (SIO) Flags field. Each bit is Tracked with the | |||
| following qualities: | following qualities: | |||
| * Bit number (counting from bit 0 as the most significant bit) | * Bit number (counting from bit 0 as the most significant bit) | |||
| * Capability description | * Capability description | |||
| * Reference | * Reference | |||
| Registration procedure is "Standards Action" [RFC8126]. The initial | Registration procedure is "Standards Action" [RFC8126]. The initial | |||
| allocation is as indicated in Table 29: | allocation is as indicated in Table 30: | |||
| +===============+========================+===========+ | +===============+========================+===========+ | |||
| | Bit number | Capability description | Reference | | | Bit number | Capability description | Reference | | |||
| +===============+========================+===========+ | +===============+========================+===========+ | |||
| | 0 (Suggested) | "S" flag: Sibling in | This | | | 0 (Suggested) | "S" flag: Sibling in | This | | |||
| | | same DODAG as Self | document | | | | same DODAG as Self | document | | |||
| +---------------+------------------------+-----------+ | +---------------+------------------------+-----------+ | |||
| Table 29: Initial SIO Flags | Table 30: Initial SIO Flags | |||
| 10.12. New destination Advertisement Object Flag | 11.13. destination Advertisement Object Flag | |||
| This document modifies the "destination Advertisement Object (DAO) | This document modifies the "destination Advertisement Object (DAO) | |||
| Flags" registry initially created in Section 20.11 of [RPL] . | Flags" registry initially created in Section 20.11 of [RPL] . | |||
| Section 4.1.1 also defines one new entry in the Registry as follows: | Section 4.1.1 also defines one new entry in the Registry as follows: | |||
| +---------------+------------------------+-----------+ | +---------------+------------------------+-----------+ | |||
| | Bit Number | Capability Description | Reference | | | Bit Number | Capability Description | Reference | | |||
| +---------------+------------------------+-----------+ | +---------------+------------------------+-----------+ | |||
| | 2 (Suggested) | Projected DAO (P) | THIS RFC | | | 2 (Suggested) | Projected DAO (P) | THIS RFC | | |||
| +---------------+------------------------+-----------+ | +---------------+------------------------+-----------+ | |||
| Table 30: New destination Advertisement Object | Table 31: New destination Advertisement Object | |||
| (DAO) Flag | (DAO) Flag | |||
| 10.13. New ICMPv6 Error Code | 11.14. New ICMPv6 Error Code | |||
| In some cases RPL will return an ICMPv6 error message when a message | In some cases RPL will return an ICMPv6 error message when a message | |||
| cannot be forwarded along a P-Route. | cannot be forwarded along a P-Route. | |||
| IANA has defined an ICMPv6 "Code" Fields Registry for ICMPv6 Message | IANA has defined an ICMPv6 "Code" Fields Registry for ICMPv6 Message | |||
| Types. ICMPv6 Message Type 1 describes "destination Unreachable" | Types. ICMPv6 Message Type 1 describes "destination Unreachable" | |||
| codes. This specification requires that a new code is allocated from | codes. This specification requires that a new code is allocated from | |||
| the ICMPv6 Code Fields Registry for ICMPv6 Message Type 1, for "Error | the ICMPv6 Code Fields Registry for ICMPv6 Message Type 1, for "Error | |||
| in P-Route", with a suggested code value of 8, to be confirmed by | in P-Route", with a suggested code value of 8, to be confirmed by | |||
| IANA. | IANA. | |||
| 10.14. New RPL Rejection Status values | 11.15. RPL Rejection Status values | |||
| This specification updates the Subregistry for the "RPL Rejection | This specification updates the Subregistry for the "RPL Rejection | |||
| Status" values under the RPL registry, as follows: | Status" values under the RPL registry, as follows: | |||
| +---------------+-------------------------+-----------+ | +---------------+-------------------------+-----------+ | |||
| | Value | Meaning | Reference | | | Value | Meaning | Reference | | |||
| +---------------+-------------------------+-----------+ | +---------------+-------------------------+-----------+ | |||
| | 2 (Suggested) | Out of Resources | THIS RFC | | | 2 (Suggested) | Out of Resources | THIS RFC | | |||
| +---------------+-------------------------+-----------+ | +---------------+-------------------------+-----------+ | |||
| | 3 (Suggested) | Error in VIO | THIS RFC | | | 3 (Suggested) | Error in VIO | THIS RFC | | |||
| +---------------+-------------------------+-----------+ | +---------------+-------------------------+-----------+ | |||
| | 4 (Suggested) | Predecessor Unreachable | THIS RFC | | | 4 (Suggested) | Predecessor Unreachable | THIS RFC | | |||
| +---------------+-------------------------+-----------+ | +---------------+-------------------------+-----------+ | |||
| | 5 (Suggested) | Unreachable Target | THIS RFC | | | 5 (Suggested) | Unreachable Target | THIS RFC | | |||
| +---------------+-------------------------+-----------+ | +---------------+-------------------------+-----------+ | |||
| | 6..63 | Unassigned | | | | 6..63 | Unassigned | | | |||
| +---------------+-------------------------+-----------+ | +---------------+-------------------------+-----------+ | |||
| Table 31: Rejection values of the RPL Status | Table 32: Rejection values of the RPL Status | |||
| 11. Acknowledgments | 12. Acknowledgments | |||
| The authors wish to acknowledge JP Vasseur, Remy Liubing, James | The authors wish to acknowledge JP Vasseur, Remy Liubing, James | |||
| Pylakutty, and Patrick Wetterwald for their contributions to the | Pylakutty, and Patrick Wetterwald for their contributions to the | |||
| ideas developed here. Many thanks to Dominique Barthel and SVR Anand | ideas developed here. Many thanks to Dominique Barthel and SVR Anand | |||
| for their global contribution to 6TiSCH, RAW and this document, as | for their global contribution to 6TiSCH, RAW and this document, as | |||
| well as text suggestions that were incorporated, and to Michael | well as text suggestions that were incorporated, and to Michael | |||
| Richardson for his useful recommendations based on his global view of | Richardson for his useful recommendations based on his global view of | |||
| the system. Also special thanks Toerless Eckert for his deep review, | the system. Also special thanks Toerless Eckert for his deep review, | |||
| with many excellent suggestions that improved the readability and | with many excellent suggestions that improved the readability and | |||
| well as the content of the specification. | well as the content of the specification. | |||
| 12. Normative References | 13. Normative References | |||
| [INT-ARCHI] | [INT-ARCHI] | |||
| Braden, R., Ed., "Requirements for Internet Hosts - | Braden, R., Ed., "Requirements for Internet Hosts - | |||
| Communication Layers", STD 3, RFC 1122, | Communication Layers", STD 3, RFC 1122, | |||
| DOI 10.17487/RFC1122, October 1989, | DOI 10.17487/RFC1122, October 1989, | |||
| <https://www.rfc-editor.org/info/rfc1122>. | <https://www.rfc-editor.org/info/rfc1122>. | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| skipping to change at page 71, line 10 ¶ | skipping to change at page 77, line 33 ¶ | |||
| [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
| May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
| [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | |||
| Writing an IANA Considerations Section in RFCs", BCP 26, | Writing an IANA Considerations Section in RFCs", BCP 26, | |||
| RFC 8126, DOI 10.17487/RFC8126, June 2017, | RFC 8126, DOI 10.17487/RFC8126, June 2017, | |||
| <https://www.rfc-editor.org/info/rfc8126>. | <https://www.rfc-editor.org/info/rfc8126>. | |||
| 13. Informative References | [RFC8138] Thubert, P., Ed., Bormann, C., Toutain, L., and R. Cragie, | |||
| "IPv6 over Low-Power Wireless Personal Area Network | ||||
| (6LoWPAN) Routing Header", RFC 8138, DOI 10.17487/RFC8138, | ||||
| April 2017, <https://www.rfc-editor.org/info/rfc8138>. | ||||
| [RFC8754] Filsfils, C., Ed., Dukes, D., Ed., Previdi, S., Leddy, J., | ||||
| Matsushima, S., and D. Voyer, "IPv6 Segment Routing Header | ||||
| (SRH)", RFC 8754, DOI 10.17487/RFC8754, March 2020, | ||||
| <https://www.rfc-editor.org/info/rfc8754>. | ||||
| 14. Informative References | ||||
| [6LoWPAN] Montenegro, G., Kushalnagar, N., Hui, J., and D. Culler, | [6LoWPAN] Montenegro, G., Kushalnagar, N., Hui, J., and D. Culler, | |||
| "Transmission of IPv6 Packets over IEEE 802.15.4 | "Transmission of IPv6 Packets over IEEE 802.15.4 | |||
| Networks", RFC 4944, DOI 10.17487/RFC4944, September 2007, | Networks", RFC 4944, DOI 10.17487/RFC4944, September 2007, | |||
| <https://www.rfc-editor.org/info/rfc4944>. | <https://www.rfc-editor.org/info/rfc4944>. | |||
| [RFC7102] Vasseur, JP., "Terms Used in Routing for Low-Power and | [RFC7102] Vasseur, JP., "Terms Used in Routing for Low-Power and | |||
| Lossy Networks", RFC 7102, DOI 10.17487/RFC7102, January | Lossy Networks", RFC 7102, DOI 10.17487/RFC7102, January | |||
| 2014, <https://www.rfc-editor.org/info/rfc7102>. | 2014, <https://www.rfc-editor.org/info/rfc7102>. | |||
| skipping to change at page 71, line 49 ¶ | skipping to change at page 78, line 33 ¶ | |||
| [RAW-ARCHI] | [RAW-ARCHI] | |||
| Thubert, P., Papadopoulos, G. Z., and L. Berger, "Reliable | Thubert, P., Papadopoulos, G. Z., and L. Berger, "Reliable | |||
| and Available Wireless Architecture/Framework", Work in | and Available Wireless Architecture/Framework", Work in | |||
| Progress, Internet-Draft, draft-ietf-raw-architecture-01, | Progress, Internet-Draft, draft-ietf-raw-architecture-01, | |||
| 28 July 2021, <https://datatracker.ietf.org/doc/html/ | 28 July 2021, <https://datatracker.ietf.org/doc/html/ | |||
| draft-ietf-raw-architecture-01>. | draft-ietf-raw-architecture-01>. | |||
| [USE-CASES] | [USE-CASES] | |||
| Papadopoulos, G. Z., Thubert, P., Theoleyre, F., and C. J. | Papadopoulos, G. Z., Thubert, P., Theoleyre, F., and C. J. | |||
| Bernardos, "RAW use cases", Work in Progress, Internet- | Bernardos, "RAW use cases", Work in Progress, Internet- | |||
| Draft, draft-ietf-raw-use-cases-02, 12 July 2021, | Draft, draft-ietf-raw-use-cases-03, 20 October 2021, | |||
| <https://datatracker.ietf.org/doc/html/draft-ietf-raw-use- | <https://datatracker.ietf.org/doc/html/draft-ietf-raw-use- | |||
| cases-02>. | cases-03>. | |||
| [TURN-ON_RFC8138] | [TURN-ON_RFC8138] | |||
| Thubert, P., Ed. and L. Zhao, "A Routing Protocol for Low- | Thubert, P., Ed. and L. Zhao, "A Routing Protocol for Low- | |||
| Power and Lossy Networks (RPL) Destination-Oriented | Power and Lossy Networks (RPL) Destination-Oriented | |||
| Directed Acyclic Graph (DODAG) Configuration Option for | Directed Acyclic Graph (DODAG) Configuration Option for | |||
| the 6LoWPAN Routing Header", RFC 9035, | the 6LoWPAN Routing Header", RFC 9035, | |||
| DOI 10.17487/RFC9035, April 2021, | DOI 10.17487/RFC9035, April 2021, | |||
| <https://www.rfc-editor.org/info/rfc9035>. | <https://www.rfc-editor.org/info/rfc9035>. | |||
| [RFC8025] Thubert, P., Ed. and R. Cragie, "IPv6 over Low-Power | [RFC8025] Thubert, P., Ed. and R. Cragie, "IPv6 over Low-Power | |||
| Wireless Personal Area Network (6LoWPAN) Paging Dispatch", | Wireless Personal Area Network (6LoWPAN) Paging Dispatch", | |||
| RFC 8025, DOI 10.17487/RFC8025, November 2016, | RFC 8025, DOI 10.17487/RFC8025, November 2016, | |||
| <https://www.rfc-editor.org/info/rfc8025>. | <https://www.rfc-editor.org/info/rfc8025>. | |||
| [RFC8138] Thubert, P., Ed., Bormann, C., Toutain, L., and R. Cragie, | ||||
| "IPv6 over Low-Power Wireless Personal Area Network | ||||
| (6LoWPAN) Routing Header", RFC 8138, DOI 10.17487/RFC8138, | ||||
| April 2017, <https://www.rfc-editor.org/info/rfc8138>. | ||||
| [RFC8505] Thubert, P., Ed., Nordmark, E., Chakrabarti, S., and C. | [RFC8505] Thubert, P., Ed., Nordmark, E., Chakrabarti, S., and C. | |||
| Perkins, "Registration Extensions for IPv6 over Low-Power | Perkins, "Registration Extensions for IPv6 over Low-Power | |||
| Wireless Personal Area Network (6LoWPAN) Neighbor | Wireless Personal Area Network (6LoWPAN) Neighbor | |||
| Discovery", RFC 8505, DOI 10.17487/RFC8505, November 2018, | Discovery", RFC 8505, DOI 10.17487/RFC8505, November 2018, | |||
| <https://www.rfc-editor.org/info/rfc8505>. | <https://www.rfc-editor.org/info/rfc8505>. | |||
| [RFC8402] Filsfils, C., Ed., Previdi, S., Ed., Ginsberg, L., | [RFC8402] Filsfils, C., Ed., Previdi, S., Ed., Ginsberg, L., | |||
| Decraene, B., Litkowski, S., and R. Shakir, "Segment | Decraene, B., Litkowski, S., and R. Shakir, "Segment | |||
| Routing Architecture", RFC 8402, DOI 10.17487/RFC8402, | Routing Architecture", RFC 8402, DOI 10.17487/RFC8402, | |||
| July 2018, <https://www.rfc-editor.org/info/rfc8402>. | July 2018, <https://www.rfc-editor.org/info/rfc8402>. | |||
| skipping to change at page 73, line 17 ¶ | skipping to change at page 79, line 48 ¶ | |||
| in-IPv6 Encapsulation in the RPL Data Plane", RFC 9008, | in-IPv6 Encapsulation in the RPL Data Plane", RFC 9008, | |||
| DOI 10.17487/RFC9008, April 2021, | DOI 10.17487/RFC9008, April 2021, | |||
| <https://www.rfc-editor.org/info/rfc9008>. | <https://www.rfc-editor.org/info/rfc9008>. | |||
| [RFC9010] Thubert, P., Ed. and M. Richardson, "Routing for RPL | [RFC9010] Thubert, P., Ed. and M. Richardson, "Routing for RPL | |||
| (Routing Protocol for Low-Power and Lossy Networks) | (Routing Protocol for Low-Power and Lossy Networks) | |||
| Leaves", RFC 9010, DOI 10.17487/RFC9010, April 2021, | Leaves", RFC 9010, DOI 10.17487/RFC9010, April 2021, | |||
| <https://www.rfc-editor.org/info/rfc9010>. | <https://www.rfc-editor.org/info/rfc9010>. | |||
| [I-D.irtf-panrg-path-properties] | [I-D.irtf-panrg-path-properties] | |||
| Enghardt, T. and C. Krähenbühl, "A Vocabulary of Path | Enghardt, T. and C. Kraehenbuehl, "A Vocabulary of Path | |||
| Properties", Work in Progress, Internet-Draft, draft-irtf- | Properties", Work in Progress, Internet-Draft, draft-irtf- | |||
| panrg-path-properties-03, 9 July 2021, | panrg-path-properties-04, 25 October 2021, | |||
| <https://datatracker.ietf.org/doc/html/draft-irtf-panrg- | <https://datatracker.ietf.org/doc/html/draft-irtf-panrg- | |||
| path-properties-03>. | path-properties-04>. | |||
| [PCE] IETF, "Path Computation Element", | [PCE] IETF, "Path Computation Element", | |||
| <https://dataTracker.ietf.org/doc/charter-ietf-pce/>. | <https://dataTracker.ietf.org/doc/charter-ietf-pce/>. | |||
| Authors' Addresses | Authors' Addresses | |||
| Pascal Thubert (editor) | Pascal Thubert (editor) | |||
| Cisco Systems, Inc | Cisco Systems, Inc | |||
| Building D | Building D | |||
| 45 Allee des Ormes - BP1200 | 45 Allee des Ormes - BP1200 | |||
| End of changes. 175 change blocks. | ||||
| 406 lines changed or deleted | 692 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/ | ||||