| < draft-ietf-roll-dao-projection-19.txt | draft-ietf-roll-dao-projection-20.txt > | |||
|---|---|---|---|---|
| ROLL P. Thubert, Ed. | ROLL P. Thubert, Ed. | |||
| Internet-Draft Cisco Systems | Internet-Draft Cisco Systems | |||
| Updates: 6554 (if approved) R.A. Jadhav | Intended status: Standards Track R.A. Jadhav | |||
| Intended status: Standards Track Huawei Tech | Expires: 25 March 2022 Huawei Tech | |||
| Expires: 28 January 2022 M. Gillmore | M. Gillmore | |||
| Itron | Itron | |||
| 27 July 2021 | 21 September 2021 | |||
| Root initiated routing state in RPL | Root initiated routing state in RPL | |||
| draft-ietf-roll-dao-projection-19 | draft-ietf-roll-dao-projection-20 | |||
| Abstract | Abstract | |||
| This document extends RFC 6550 and RFC 6553 to enable a RPL Root to | This document extends RFC 6550, RFC 6553,and RFC 8138 to enable a RPL | |||
| install and maintain Projected Routes within its DODAG, along a | Root to install and maintain Projected Routes within its DODAG, along | |||
| selected set of nodes that may or may not include self, for a chosen | a selected set of nodes that may or may not include self, for a | |||
| duration. This potentially enables routes that are more optimized or | chosen duration. This potentially enables routes that are more | |||
| resilient than those obtained with the classical distributed | optimized or resilient than those obtained with the classical | |||
| operation of RPL, either in terms of the size of a Routing Header or | distributed operation of RPL, either in terms of the size of a | |||
| in terms of path length, which impacts both the latency and the | Routing Header or in terms of path length, which impacts both 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. | |||
| 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 28 January 2022. | This Internet-Draft will expire on 25 March 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 Simplified BSD License text | |||
| as described in Section 4.e of the Trust Legal Provisions and are | as 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 Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2.1. Requirements Language . . . . . . . . . . . . . . . . . . 5 | 2.1. Requirements Language . . . . . . . . . . . . . . . . . . 4 | |||
| 2.2. Glossary . . . . . . . . . . . . . . . . . . . . . . . . 5 | 2.2. References . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2.3. Other Terms . . . . . . . . . . . . . . . . . . . . . . . 6 | 2.3. Glossary . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2.4. References . . . . . . . . . . . . . . . . . . . . . . . 6 | 2.4. Domain Terms . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 3. Extending RFC 6550 . . . . . . . . . . . . . . . . . . . . . 6 | 3. Context and Goal . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 3.1. Projected DAO . . . . . . . . . . . . . . . . . . . . . . 7 | 3.1. RPL Applicability . . . . . . . . . . . . . . . . . . . . 7 | |||
| 3.2. Sibling Information Option . . . . . . . . . . . . . . . 8 | 3.2. RPL Routing Modes . . . . . . . . . . . . . . . . . . . . 8 | |||
| 3.3. P-DAO Request . . . . . . . . . . . . . . . . . . . . . . 9 | 3.3. On Tracks . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 3.4. Extending the RPI . . . . . . . . . . . . . . . . . . . . 9 | 3.4. Serial Track Signaling . . . . . . . . . . . . . . . . . 10 | |||
| 4. Extending RFC 6553 . . . . . . . . . . . . . . . . . . . . . 9 | 3.4.1. Using Storing Mode Segments . . . . . . . . . . . . . 11 | |||
| 5. Extending RFC 8138 . . . . . . . . . . . . . . . . . . . . . 10 | 3.4.2. Using Non-Storing Mode joining Tracks . . . . . . . . 17 | |||
| 6. New RPL Control Messages and Options . . . . . . . . . . . . 11 | 3.5. Complex Tracks . . . . . . . . . . . . . . . . . . . . . 24 | |||
| 6.1. New P-DAO Request Control Message . . . . . . . . . . . . 11 | 3.6. Scope and Expectations . . . . . . . . . . . . . . . . . 26 | |||
| 6.2. New PDR-ACK Control Message . . . . . . . . . . . . . . . 12 | 4. Extending existing RFCs . . . . . . . . . . . . . . . . . . . 28 | |||
| 6.3. Via Information Options . . . . . . . . . . . . . . . . . 13 | 4.1. Extending RFC 6550 . . . . . . . . . . . . . . . . . . . 28 | |||
| 6.4. Sibling Information Option . . . . . . . . . . . . . . . 16 | 4.1.1. Projected DAO . . . . . . . . . . . . . . . . . . . . 28 | |||
| 7. Projected DAO . . . . . . . . . . . . . . . . . . . . . . . . 18 | 4.1.2. Via Information Option . . . . . . . . . . . . . . . 30 | |||
| 7.1. Requesting a Track . . . . . . . . . . . . . . . . . . . 19 | 4.1.3. Sibling Information Option . . . . . . . . . . . . . 30 | |||
| 7.2. Identifying a Track . . . . . . . . . . . . . . . . . . . 20 | 4.1.4. P-DAO Request . . . . . . . . . . . . . . . . . . . . 30 | |||
| 7.3. Installing a Track . . . . . . . . . . . . . . . . . . . 21 | 4.1.5. Extending the RPI . . . . . . . . . . . . . . . . . . 30 | |||
| 7.3.1. Storing-Mode P-Route . . . . . . . . . . . . . . . . 22 | 4.2. Extending RFC 6553 . . . . . . . . . . . . . . . . . . . 31 | |||
| 7.3.2. Non-Storing-Mode P-Route . . . . . . . . . . . . . . 24 | 4.3. Extending RFC 8138 . . . . . . . . . . . . . . . . . . . 32 | |||
| 7.4. Forwarding Along a Track . . . . . . . . . . . . . . . . 26 | 5. New RPL Control Messages and Options . . . . . . . . . . . . 33 | |||
| 8. Profiles . . . . . . . . . . . . . . . . . . . . . . . . . . 27 | 5.1. New P-DAO Request Control Message . . . . . . . . . . . . 33 | |||
| 9. Example Track Signaling . . . . . . . . . . . . . . . . . . . 28 | 5.2. New PDR-ACK Control Message . . . . . . . . . . . . . . . 34 | |||
| 9.1. Using Storing-Mode Segments . . . . . . . . . . . . . . . 29 | 5.3. Via Information Options . . . . . . . . . . . . . . . . . 36 | |||
| 9.1.1. Stitched Segments . . . . . . . . . . . . . . . . . . 29 | 5.4. Sibling Information Option . . . . . . . . . . . . . . . 39 | |||
| 9.1.2. External routes . . . . . . . . . . . . . . . . . . . 31 | 6. Root Initiated Routing State . . . . . . . . . . . . . . . . 41 | |||
| 9.1.3. Segment Routing . . . . . . . . . . . . . . . . . . . 32 | 6.1. Requesting a Track . . . . . . . . . . . . . . . . . . . 41 | |||
| 9.2. Using Non-Storing-Mode joining Tracks . . . . . . . . . . 34 | 6.2. Identifying a Track . . . . . . . . . . . . . . . . . . . 42 | |||
| 9.2.1. Stitched Tracks . . . . . . . . . . . . . . . . . . . 34 | 6.3. Installing a Track . . . . . . . . . . . . . . . . . . . 43 | |||
| 9.2.2. External routes . . . . . . . . . . . . . . . . . . . 36 | 6.3.1. Signaling a Projected Route . . . . . . . . . . . . . 44 | |||
| 9.2.3. Segment Routing . . . . . . . . . . . . . . . . . . . 38 | 6.3.2. Installing a Track Segment with a Storing Mode | |||
| 10. Security Considerations . . . . . . . . . . . . . . . . . . . 41 | P-Route . . . . . . . . . . . . . . . . . . . . . . . 45 | |||
| 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 41 | 6.3.3. Installing a Track Leg with a Non-Storing Mode | |||
| 11.1. New Elective 6LoWPAN Routing Header Type . . . . . . . . 41 | P-Route . . . . . . . . . . . . . . . . . . . . . . . 47 | |||
| 11.2. New Critical 6LoWPAN Routing Header Type . . . . . . . . 42 | 6.4. Tearing Down a P-Route . . . . . . . . . . . . . . . . . 49 | |||
| 11.3. New Subregistry For The RPL Option Flags . . . . . . . . 42 | 6.5. Maintaining a Track . . . . . . . . . . . . . . . . . . . 49 | |||
| 11.4. New RPL Control Codes . . . . . . . . . . . . . . . . . 43 | 6.5.1. Maintaining a Track Segment . . . . . . . . . . . . . 50 | |||
| 11.5. New RPL Control Message Options . . . . . . . . . . . . 43 | 6.5.2. Maintaining a Track Leg . . . . . . . . . . . . . . . 50 | |||
| 11.6. SubRegistry for the Projected DAO Request Flags . . . . 43 | 6.6. Encapsulating and Forwarding Along a Track . . . . . . . 51 | |||
| 11.7. SubRegistry for the PDR-ACK Flags . . . . . . . . . . . 44 | 6.7. Compression of the RPL Artifacts . . . . . . . . . . . . 53 | |||
| 11.8. Subregistry for the PDR-ACK Acceptance Status Values . . 44 | 7. Lesser Constrained Variations . . . . . . . . . . . . . . . . 55 | |||
| 11.9. Subregistry for the PDR-ACK Rejection Status Values . . 44 | 7.1. Storing Mode Main DODAG . . . . . . . . . . . . . . . . . 55 | |||
| 11.10. SubRegistry for the Via Information Options Flags . . . 45 | 7.2. A Track as a Full DODAG . . . . . . . . . . . . . . . . . 57 | |||
| 11.11. SubRegistry for the Sibling Information Option Flags . . 45 | 8. Profiles . . . . . . . . . . . . . . . . . . . . . . . . . . 58 | |||
| 11.12. New Destination Advertisement Object Flag . . . . . . . 46 | 9. Security Considerations . . . . . . . . . . . . . . . . . . . 60 | |||
| 11.13. Error in Projected Route ICMPv6 Code . . . . . . . . . . 46 | 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 60 | |||
| 12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 46 | 10.1. New Elective 6LoWPAN Routing Header Type . . . . . . . . 61 | |||
| 13. Normative References . . . . . . . . . . . . . . . . . . . . 46 | 10.2. New Critical 6LoWPAN Routing Header Type . . . . . . . . 61 | |||
| 14. Informative References . . . . . . . . . . . . . . . . . . . 47 | 10.3. New Subregistry For The RPL Option Flags . . . . . . . . 61 | |||
| Appendix A. Applications . . . . . . . . . . . . . . . . . . . . 49 | 10.4. New RPL Control Codes . . . . . . . . . . . . . . . . . 62 | |||
| A.1. Loose Source Routing . . . . . . . . . . . . . . . . . . 49 | 10.5. New RPL Control Message Options . . . . . . . . . . . . 62 | |||
| A.2. Transversal Routes . . . . . . . . . . . . . . . . . . . 51 | 10.6. SubRegistry for the Projected DAO Request Flags . . . . 63 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 52 | 10.7. SubRegistry for the PDR-ACK Flags . . . . . . . . . . . 63 | |||
| 10.8. Subregistry for the PDR-ACK Acceptance Status Values . . 63 | ||||
| 10.9. Subregistry for the PDR-ACK Rejection Status Values . . 64 | ||||
| 10.10. SubRegistry for the Via Information Options Flags . . . 64 | ||||
| 10.11. SubRegistry for the Sibling Information Option Flags . . 65 | ||||
| 10.12. New destination Advertisement Object Flag . . . . . . . 65 | ||||
| 10.13. New ICMPv6 Error Code . . . . . . . . . . . . . . . . . 65 | ||||
| 10.14. New RPL Rejection Status values . . . . . . . . . . . . 66 | ||||
| 11. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 66 | ||||
| 12. Normative References . . . . . . . . . . . . . . . . . . . . 66 | ||||
| 13. Informative References . . . . . . . . . . . . . . . . . . . 68 | ||||
| Appendix A. Applications . . . . . . . . . . . . . . . . . . . . 70 | ||||
| A.1. Loose Source Routing . . . . . . . . . . . . . . . . . . 70 | ||||
| A.2. East-West Routes . . . . . . . . . . . . . . . . . . . . 72 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 73 | ||||
| 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 a generic Distance Vector protocol that is well suited for | (LLNs), is an anisotropic Distance Vector protocol that is well- | |||
| application in a variety of low energy Internet of Things (IoT) | suited for application in a variety of low energy Internet of Things | |||
| networks. RPL forms Destination Oriented Directed Acyclic Graphs | (IoT) networks where stretched P2P paths are acceptable vs. the | |||
| (DODAGs) in which the Root often acts as the Border Router to connect | signaling and state overhead involved in maintaining shortest paths | |||
| the RPL domain to the Internet. The Root is responsible to select | across. | |||
| the RPL Instance that is used to forward a packet coming from the | ||||
| Internet into the RPL domain and set the related RPL information in | ||||
| the packets. 6TiSCH uses RPL for its routing operations. | ||||
| The "6TiSCH Architecture" [6TiSCH-ARCHI] also leverages the | ||||
| "Deterministic Networking Architecture" [RFC8655] centralized model | ||||
| whereby the device resources and capabilities are exposed to an | ||||
| external controller which installs routing states into the network | ||||
| based on some objective functions that reside in that external | ||||
| entity. With DetNet and 6TiSCH, the component of the controller that | ||||
| is responsible of computing routes is called a Path Computation | ||||
| Element ([PCE]). | ||||
| Based on heuristics of usage, path length, and knowledge of device | ||||
| capacity and available resources such as battery levels and | ||||
| reservable buffers, the PCE with a global visibility on the system | ||||
| can compute direct Peer to Peer (P2P) routes that are optimized for | ||||
| the needs expressed by an objective function. This document | ||||
| specifies protocol extensions to RPL [RPL] that enable the Root of a | ||||
| main DODAG to install centrally-computed routes inside the DODAG on | ||||
| behalf of a PCE. | ||||
| This specification expects that the main RPL Instance is operated in | ||||
| RPL Non-Storing Mode of Operation (MOP) to sustain the exchanges with | ||||
| the Root. In that Mode, the Root has enough information to build a | ||||
| basic DODAG topology based on parents and children, but lacks the | ||||
| knowledge of siblings. This document adds the capability for nodes | ||||
| to advertise sibling information in order to improve the topological | ||||
| awareness of the Root. | ||||
| As opposed to the classical RPL operations where routes are injected | ||||
| by the Target nodes, the protocol extensions enable the Root of a | ||||
| DODAG to project the routes that are needed onto the nodes where they | ||||
| should be installed. This specification uses the term Projected | ||||
| Route to refer to those routes. Projected Routes can be used to | ||||
| reduce the size of the source routing headers with loose source | ||||
| routing operations down the main RPL DODAG. Projected Routes can | ||||
| also be used to build transversal routes for route optimization and | ||||
| Traffic Engineering purposes, between nodes of the DODAG. | ||||
| A Projected Route may be installed in either Storing and Non-Storing | ||||
| Mode, potentially resulting in hybrid situations where the Mode of | ||||
| the Projected Route is different from that of the main RPL Instance. | ||||
| A Projected Route may be a stand-alone end-to-end path or a Segment | ||||
| in a more complex forwarding graph called a Track. | ||||
| The concept of a Track was introduced in the 6TiSCH architecture, as | ||||
| a potentially complex path with redundant forwarding solutions along | ||||
| the way. With this specification, a Track is a DODAG formed by a RPL | ||||
| local Instance that is rooted at the 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. | ||||
| The "Reliable and Available Wireless (RAW) Architecture/Framework" | ||||
| [RAW-ARCHI] defines the Path Selection Engine (PSE) that adapts the | ||||
| use of the path redundancy within a Track to defeat the diverse | ||||
| causes of packet loss. | ||||
| The PSE is a dataplane extension of the PCE; it controls the | ||||
| forwarding operation of the packets within a Track, using Packet ARQ, | ||||
| Replication, Elimination, and Overhearing (PAREO) functions over the | ||||
| Track segments, to provide a dynamic balance between the reliability | ||||
| and availability requirements of the flows and the need to conserve | ||||
| energy and spectrum. | ||||
| The time scale at which the PCE (re)computes the Track can be long, | ||||
| using long-term statistical metrics to perform global optimizations | ||||
| at the scale of the whole network. Conversely, the PSE makes | ||||
| forwarding decisions at the time scale of one or a small collection | ||||
| of packets, based on a knowledge that is limited in scope to the | ||||
| Track itself, so it can be refreshed at a fast pace. | ||||
| Projected Routes must be used with the parsimony to limit the amount | RPL forms destination Oriented Directed Acyclic Graphs (DODAGs) in | |||
| of state that is installed in each device to fit within the device | which the Root often acts as the Border router to connect the RPL | |||
| resources, and to maintain the amount of rerouted traffic within the | domain to the IP backbone and routes along that graph up, towards the | |||
| capabilities of the transmission links. The methods used to learn | Root, and down towards the nodes. | |||
| the node capabilities and the resources that are available in the | ||||
| devices and in the network are out of scope for this document. | ||||
| This specification uses the RPL Root as a proxy to the PCE. The PCE | With this specification, a Path Computation Element [PCE] in an | |||
| may be collocated with the Root, or may reside in an external | external controller interacts with the RPL Root to compute centrally | |||
| Controller. | shorter Peer to Peer (P2P) paths within a pre-existing RPL Main | |||
| DODAG. The topological information that is passed to the PCE is | ||||
| derived from the DODAG that is already available at the Root in RPL | ||||
| Non-Storing Mode. This specification introduces protocol extensions | ||||
| that enrich the topological information that is available at the Root | ||||
| and passed to the PCE. | ||||
| In that case, the PCE exchanges control messages with the Root over a | Based on usage, path length, and knowledge of available resources | |||
| Southbound API that is out of scope for this specification. The | such as battery levels and reservable buffers in the nodes, the PCE | |||
| algorithm to compute the paths and the protocol used by an external | with a global visibility on the system can optimize the computed | |||
| PCE to obtain the topology of the network from the Root are also out | routes for the application needs, including the capability to provide | |||
| of scope. | path redundancy. This specification also introduces protocol | |||
| extensions that enable the Root to translates the computed paths into | ||||
| RPL and install them as Projected Routes (aka P-Routes) inside the | ||||
| DODAG on behalf of a PCE. | ||||
| 2. Terminology | 2. Terminology | |||
| 2.1. Requirements Language | 2.1. Requirements Language | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in BCP | |||
| 14 [RFC2119][RFC8174] when, and only when, they appear in all | 14 [RFC2119][RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| 2.2. Glossary | 2.2. References | |||
| In this document, readers will encounter terms and concepts that are | ||||
| discussed in the "Routing Protocol for Low Power and Lossy Networks" | ||||
| [RPL], the "6TiSCH Architecture" [6TiSCH-ARCHI], the "Deterministic | ||||
| Networking Architecture" [RFC8655], the "Reliable and Available | ||||
| Wireless (RAW) Architecture/Framework" [RAW-ARCHI], and "Terminology | ||||
| in Low power And Lossy Networks" [RFC7102]. | ||||
| 2.3. Glossary | ||||
| This document often uses the following acronyms: | This document often uses the following acronyms: | |||
| CMO: Control Message Option | CMO: Control Message Option | |||
| DAO: Destination Advertisement Object | DAO: destination Advertisement Object | |||
| DAG: Directed Acyclic Graph | DAG: Directed Acyclic Graph | |||
| DODAG: Destination-Oriented Directed Acyclic Graph; A DAG with only | DODAG: destination-Oriented Directed Acyclic Graph; A DAG with only | |||
| one vertex (i.e., node) that has no outgoing edge (i.e., link) | one vertex (i.e., node) that has no outgoing edge (i.e., link) | |||
| GUA: IPv6 Global Unicast Address | ||||
| LLN: Low-Power and Lossy Network | LLN: Low-Power and Lossy Network | |||
| MOP: RPL Mode of Operation | MOP: RPL Mode of Operation | |||
| P-DAO: Projected DAO | P-DAO: Projected DAO | |||
| P-Route: Projected Route | P-Route: Projected Route | |||
| PDR: P-DAO Request | PDR: P-DAO Request | |||
| RAN: RPL-Aware Node (either a RPL Router or a RPL-Aware Leaf) | RAN: RPL-Aware Node (either a RPL router or a RPL-Aware Leaf) | |||
| RAL: RPL-Aware Leaf | RAL: RPL-Aware Leaf | |||
| RH: Routing Header | RH: Routing Header | |||
| RPI: RPL Packet Information | RPI: RPL Packet Information | |||
| RTO: RPL Target Option | RTO: RPL Target Option | |||
| RUL: RPL-Unaware Leaf | RUL: RPL-Unaware Leaf | |||
| SIO: RPL Sibling Information Option | SIO: RPL Sibling Information Option | |||
| SR-VIO: A Source-Routed Via Information Option, used in Non-Storing- | ULA: IPv6 Unique Local Address | |||
| NSM-VIO: A Source-Routed Via Information Option, used in Non-Storing | ||||
| Mode P-DAO messages. | Mode P-DAO messages. | |||
| TIO: RPL Transit Information Option | TIO: RPL Transit Information Option | |||
| SF-VIO: A 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 SF-VIO or an SR-VIO. | VIO: A Via Information Option; it can be a SM-VIO or an NSM-VIO. | |||
| 2.3. Other Terms | 2.4. Domain Terms | |||
| Projected Route: A RPL Projected Route is a RPL route that is | Projected Route: A RPL P-Route is a RPL route that is computed | |||
| computed remotely by a PCE, and installed and maintained by a RPL | remotely by a PCE, and installed and maintained by a RPL Root on | |||
| Root on behalf of the PCE. | behalf of the PCE. It is installed as a state that signals that | |||
| Segment: A strict sequence of node along which a route is installed. | destinations (aka Targets) are reachable along a sequence of | |||
| With this specification, a Segment is installed by the Root of the | nodes. | |||
| main DODAG using Storing-Mode P-DAO messages. | Projected DAO: A DAO message used to install a P-Route. | |||
| Projected DAO: A DAO message used to install a Projected Route. | Path: Quoting section 1.1.3 of [INT-ARCHI]: "At a given moment, all | |||
| Track: A DODAG that provides a complex path from or to a Root that | the IP datagrams from a particular source host to a particular | |||
| is the destination of the DODAG. The Root is the Track Ingress, | destination host will typically traverse the same sequence of | |||
| and the forward direction for packets is down the DODAG, from the | gateways. We use the term "path" for this sequence. Note that a | |||
| Track Ingress to one of the possibly multiple Track Egress Nodes. | path is uni-directional; it is not unusual to have different paths | |||
| The DODAG may be strictly connected, meaning that the vertices are | in the two directions between a given host pair.". | |||
| Section 2 of [I-D.irtf-panrg-path-properties] points to a longer, | ||||
| more modern definition of path, which begins as follows: " A | ||||
| sequence of adjacent path elements over which a packet can be | ||||
| transmitted, starting and ending with a node. A path is | ||||
| unidirectional. Paths are time-dependent, i.e., the sequence of | ||||
| path elements over which packets are sent from one node to another | ||||
| may change. A path is defined between two nodes. " | ||||
| It follows that the general acceptance of a path is a linear | ||||
| sequence of nodes, as opposed to a multi-dimensional graph. In | ||||
| the context of this document, a path is observed by following one | ||||
| copy of a packet that is injected in a Track and possibly | ||||
| replicated within. | ||||
| Track: A networking graph that can be followed to transport packets | ||||
| with equivalent treatment; as opposed to the definition of a path | ||||
| above, a Track 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. | ||||
| This specification builds Tracks that are DODAGs oriented towards | ||||
| a Track Ingress, and the forward direction for packets is East- | ||||
| West 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 | adjacent, or loosely connected, meaning that the vertices are | |||
| connected using Segments that are associated to the same Track. | connected using Segments that are associated to the same Track. | |||
| With this specification, a Track is installed by the Root of the | TrackID: A RPL Local InstanceID that identifies a Track using the | |||
| main DODAG using Non-Storing-Mode P-DAO messages. | namespace owned ny the Track Ingress. The TrackID is associated | |||
| TrackID: A RPL Local InstanceID with the D bit set to 0. The | with the IPv6 Address of the Track Ingress that is used as | |||
| TrackID is associated with the IPv6 Address of the Track Ingress | DODAGID, and together they form a unique identification of the | |||
| that is used to signal the DODAG Root, and together they form a | Track (see the definition of DODAGID in section 2 of [RPL]. | |||
| unique identification of the Track (see the definition of DODAGID | Serial Track: A Track that has only one path. | |||
| in section 2 of [RPL]. | 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). | ||||
| 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. | ||||
| Track 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. | ||||
| Track 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. References | 3. Context and Goal | |||
| 3.1. RPL Applicability | ||||
| In this document, readers will encounter terms and concepts that are | RPL is optimized for situations where the power is scarce, the | |||
| discussed in the "Routing Protocol for Low Power and Lossy Networks" | bandwidth constrained and the transmissions unreliable. This matches | |||
| [RPL] and "Terminology in Low power And Lossy Networks" [RFC7102]. | 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 | ||||
| network (aka swarming), e.g., within a variable set of vehicles with | ||||
| a similar global motion, or a toon of drones. | ||||
| 3. Extending RFC 6550 | To reach this goal, RPL is primarily designed to minimize the control | |||
| 3.1. Projected DAO | plane activity, that is the relative amount of routing protocol | |||
| exchanges vs. data traffic, and the amount of state that is | ||||
| maintained in each node. RPL does not need converge, and provides | ||||
| connectivity to most nodes most of the time. | ||||
| RPL may form multiple topologies called instances. Instances can be | ||||
| created to enforce various optimizations through objective functions, | ||||
| or to reach out through different Root Nodes. The concept of | ||||
| objective function allows to adapt the activity of the routing | ||||
| protocol to the use case, e.g., type, speed, and quality of the LLN | ||||
| links. | ||||
| RPL instances operate as ships in the night, unbeknownst of one | ||||
| another. The RPL Root is responsible to select the RPL Instance that | ||||
| is used to forward a packet coming from the Backbone into the RPL | ||||
| domain and set the related RPL information in the packets. 6TiSCH | ||||
| leverages RPL for its distributed routing operations. | ||||
| To reduce the routing exchanges, RPL leverages an anisotropic | ||||
| Distance Vector approach, which does not need a global knowledge of | ||||
| the topology, and only optimizes the routes to and from the RPL Root, | ||||
| allowing P2P paths to be stretched. Although RPL installs its routes | ||||
| proactively, it only maintains them lazily, in reaction to actual | ||||
| traffic, or as a slow background activity. | ||||
| This is simple and efficient in situations where the traffic is | ||||
| mostly directed from or to a central node, such as the control | ||||
| traffic between routers and a controller of a Software Defined | ||||
| Networking (SDN) infrastructure or an Autonomic Control Plane (ACP). | ||||
| But stretch in P2P routing is counter-productive to both reliability | ||||
| 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 | ||||
| RAW use cases document [USE-CASES], which demand high availability | ||||
| and reliability, and as a consequence require both short and diverse | ||||
| paths. | ||||
| 3.2. RPL Routing Modes | ||||
| RPL first forms a default route in each node towards the a Root, and | ||||
| those routes together coalesce as a Directed Acyclic Graph upwards. | ||||
| RPL then constructs routes to so-called Targets in the reverse | ||||
| direction, down the same DODAG. So do so, a RPL Instance can be | ||||
| operated either in RPL Storing or Non-Storing Mode of Operation (MOP) | ||||
| The default route towards the Root is maintained aggressively and may | ||||
| change while a packet progresses without causing loops, so the packet | ||||
| will still reach the Root. | ||||
| 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. | ||||
| Recursively, the Root builds and maintains an image of the whole | ||||
| DODAG in memory, and leverages that abstraction to compute source | ||||
| 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 | ||||
| single unicast packet to the Root along the default route to update | ||||
| it, and the connectivity is restored immediately; this mode is | ||||
| preferable for use cases where internet connectivity is dominant, or | ||||
| when, like here, the Root controls the network activity in the nodes. | ||||
| In Storing Mode, the routing information percolates upwards, and each | ||||
| node maintains the routes to the subDAG of its descendants down the | ||||
| DODAG. The maintenance is lazy, either reactive upon traffic or as a | ||||
| slow background process. Packets flow via the common parent and the | ||||
| routing stretch is reduced vs. Non-Storing, for a better P2P | ||||
| connectivity, while the internet connectivity is restored more | ||||
| slowly, time for the DV operation to operate hop-by-hop. | ||||
| Either way, the RPL routes are injected by the Target nodes, in a | ||||
| distributed fashion. To complement RPL and eliminate routing | ||||
| stretch, this specification introduces an hybrid mode that combines | ||||
| Storing and Non-Storing operations to build and project routes onto | ||||
| the nodes where they should be installed. This specification uses | ||||
| the term P-Route to refer to those routes. | ||||
| A P-Route may be installed in either Storing and Non-Storing Mode, | ||||
| 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 | ||||
| used as stand-alone segments to reduce the size of the source routing | ||||
| 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 | ||||
| complex forwarding graph called a Track. | ||||
| 3.3. On Tracks | ||||
| A Track is typically a collection of parallel loose source routed | ||||
| sequences of nodes from Ingress to Egress, forming so-called Track | ||||
| Legs, that are joined with strict Segments of other nodes. The Legs | ||||
| are expressed in RPL Non-Storing Modes and require an encapsulation | ||||
| to add a Source Route Header, whereas the Segments are expressed in | ||||
| Storing Mode. | ||||
| A Serial Track comprises provides only one path between Ingress and | ||||
| Egress. It comprises at most one Leg. A Stand-Alone Segment defines | ||||
| implicitly a Serial Track from its Ingress to Egress. | ||||
| A complex Track forms a graph that provides a collection of potential | ||||
| 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 | ||||
| generic DODAG. | ||||
| The concept of a Track was introduced in the "6TiSCH Architecture" | ||||
| [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. | ||||
| 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 | ||||
| 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 | ||||
| the DODAG. | ||||
| A Track is normally associated with a Local RPL Instance which | ||||
| RPLInstanceID is used as the TrackID, more in Section 6.2. A Track | ||||
| 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 | ||||
| main DODAG, which suffices to identify the routing topology. As | ||||
| opposed to local RPL instances, the Track Ingress that encapsulates | ||||
| the packets over a subtrack is not Root, and that the source address | ||||
| of the encapsulated packet is not used to determine the Track. | ||||
| 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 | ||||
| Ingress to be used as source to encapsulated packets along the Track | ||||
| is signaled in the DODAGID field of the Projected DAO Base Object; | ||||
| that field is elided in the case of the RPL Main DODAG, see Figure 3. | ||||
| 3.4. Serial Track Signaling | ||||
| This specification introduces the concept of a P-Route along either a | ||||
| Track Leg or a Segment. A P-Route is installed and maintained using | ||||
| an extended RPL DAO message called a Projected DAO (P-DAO), and a | ||||
| Track is composed of the combination of one or more P-Routes. This | ||||
| specification introduces the Via Information Option (VIO) to 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-VIO). One P-DAO | ||||
| messages contains a single VIO, associated to one or more RPL Target | ||||
| Options that signal the destination IPv6 addresses that can reached | ||||
| along the Track. | ||||
| Before diving deeper into Track Legs and Segments signaling and | ||||
| operation, this section provides examples of what how route | ||||
| projection works through variations of a simple example. In this | ||||
| simple example we show host routes though RPL Targets can be | ||||
| prefixes. Say we want to build a Serial Track from node A to E in | ||||
| Figure 1, so A can route packets to E's neighbors F and G along A, B, | ||||
| C, D and E as opposed to via the Root: | ||||
| /===> F | ||||
| A ===> B ===> C ===> D===> E < | ||||
| \===> G | ||||
| Figure 1: Reference Track | ||||
| 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- | ||||
| separated Targets, e.g., F is a Target for Segment C==>D==>E. 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 | ||||
| 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 | ||||
| Targets). | ||||
| In a general manner the desired outcome is as follows: | ||||
| * Targets are E, F, and G | ||||
| * P-DAO 1 signals C==>D==>E | ||||
| * P-DAO 2 signals A==>B==>C | ||||
| * P-DAO 3 signals F and G via the A-->E Track | ||||
| P-DAO 3 may be ommitted if P-DAO 1 and 2 signal F and G as Targets. | ||||
| Loose sequences of hops must be expressed in Non-Storing Mode, so | ||||
| P-DAO 3 contains a NSM-VIO. With this specification, the DODAGID to | ||||
| be used by the Ingress as source address is signaled if needed in the | ||||
| DAO base object, the via list starts at the first loose hop and | ||||
| matches the source route header, and the Egress of a Non-Storing Mode | ||||
| P-DAO is an implicit Target that is not listed in the RTO. | ||||
| 3.4.1. Using Storing Mode Segments | ||||
| A==>B==>C and C==>D==>E are segments of a same Track. Note that the | ||||
| Storing Mode signaling imposes strict continuity in a segment, since | ||||
| the P-DAO is passed hop by hop, as a classical DAO is, along the | ||||
| reverse datapath that it signals. One benefit of strict routing is | ||||
| that loops are avoided along the Track. | ||||
| 3.4.1.1. Stitched Segments | ||||
| In this formulation: | ||||
| * P-DAO 1 signals C==>D==>E-to-F,G | ||||
| * P-DAO 2 signals A==>B==>C-to-F,G | ||||
| Storing Mode P-DAO 1 is sent to E and when it is succesfully | ||||
| acknowledged, Storing Mode P-DAO 2 is sent to C, as follows: | ||||
| +====================+==============+==============+ | ||||
| | Field | P-DAO 1 to E | P-DAO 2 to C | | ||||
| +====================+==============+==============+ | ||||
| | Mode | Storing | Storing | | ||||
| +--------------------+--------------+--------------+ | ||||
| | Track Ingress | A | A | | ||||
| +--------------------+--------------+--------------+ | ||||
| | (DODAGID, TrackID) | (A, 129) | (A, 129) | | ||||
| +--------------------+--------------+--------------+ | ||||
| | SegmentID | 1 | 2 | | ||||
| +--------------------+--------------+--------------+ | ||||
| | VIO | C, D, E | A, B, C | | ||||
| +--------------------+--------------+--------------+ | ||||
| | Targets | F, G | F, G | | ||||
| +--------------------+--------------+--------------+ | ||||
| Table 1: P-DAO Messages | ||||
| As a result the RIBs are set as follows: | ||||
| +======+=============+=========+=============+==========+ | ||||
| | Node | destination | Origin | Next Hop(s) | TrackID | | ||||
| +======+=============+=========+=============+==========+ | ||||
| | E | F, G | P-DAO 1 | Neighbor | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | D | E | P-DAO 1 | Neighbor | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | " | F, G | P-DAO 1 | E | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | C | D | P-DAO 1 | Neighbor | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | " | F, G | P-DAO 1 | D | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | B | C | P-DAO 2 | Neighbor | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | " | F, G | P-DAO 2 | C | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | A | B | P-DAO 2 | Neighbor | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | " | F, G | P-DAO 2 | B | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| Table 2: RIB setting | ||||
| Packets originated by A to F or G do not require an encapsulation as | ||||
| the RPI can be placed in the native header chain. For packets that | ||||
| it routes, A must encapsulate to add the RPI that signals the | ||||
| trackID; the outer headers of the packets that are forwarded along | ||||
| the Track have the following settings: | ||||
| +========+===================+===================+================+ | ||||
| | Header | IPv6 Source Addr. | IPv6 Dest. Addr. | TrackID in RPI | | ||||
| +========+===================+===================+================+ | ||||
| | Outer | A | F or G | (A, 129) | | ||||
| +--------+-------------------+-------------------+----------------+ | ||||
| | Inner | X != A | F or G | N/A | | ||||
| +--------+-------------------+-------------------+----------------+ | ||||
| Table 3: Packet Header Settings | ||||
| 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 1: C forwards to D and D forwards to E. | ||||
| * From Neighbor Cache Entry: C delivers the packet to F. | ||||
| 3.4.1.2. External routes | ||||
| 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 | ||||
| [RFC9008]. We then apply the directives for encapsulating in that | ||||
| case, more in Section 6.6. | ||||
| In this formulation, we set up the Track Leg explicitly, which | ||||
| creates less routing state in intermediate hops at the expense of | ||||
| larger packets to accommodate source routing: | ||||
| * P-DAO 1 signals C==>D==>E-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 | ||||
| Storing Mode P-DAO 1 and 2, and Non-Storing Mode P-DAO 3, are sent to | ||||
| E, C and A, respectively, as follows: | ||||
| +====================+==============+==============+==============+ | ||||
| | | P-DAO 1 to E | P-DAO 2 to C | P-DAO 3 to A | | ||||
| +====================+==============+==============+==============+ | ||||
| | Mode | Storing | Storing | Non-Storing | | ||||
| +--------------------+--------------+--------------+--------------+ | ||||
| | Track Ingress | A | A | A | | ||||
| +--------------------+--------------+--------------+--------------+ | ||||
| | (DODAGID, TrackID) | (A, 129) | (A, 129) | (A, 129) | | ||||
| +--------------------+--------------+--------------+--------------+ | ||||
| | SegmentID | 1 | 2 | 3 | | ||||
| +--------------------+--------------+--------------+--------------+ | ||||
| | VIO | C, D, E | A, B, C | E | | ||||
| +--------------------+--------------+--------------+--------------+ | ||||
| | Targets | E | E | F, G | | ||||
| +--------------------+--------------+--------------+--------------+ | ||||
| Table 4: P-DAO Messages | ||||
| Note in the above that E is not an implicit Target in Storing mode, | ||||
| so it must be added in the RTO. | ||||
| As a result the RIBs are set as follows: | ||||
| +======+=============+=========+=============+==========+ | ||||
| | Node | destination | Origin | Next Hop(s) | TrackID | | ||||
| +======+=============+=========+=============+==========+ | ||||
| | E | F, G | P-DAO 1 | Neighbor | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | D | E | P-DAO 1 | Neighbor | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | C | D | P-DAO 1 | Neighbor | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | " | E | P-DAO 1 | D | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | B | C | P-DAO 2 | Neighbor | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | " | E | P-DAO 2 | C | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | A | B | P-DAO 2 | Neighbor | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | " | E | P-DAO 2 | B | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | " | F, G | P-DAO 3 | E | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| Table 5: RIB setting | ||||
| Packets from A to E do not require an encapsulation. The outer | ||||
| headers of the packets that are forwarded along the Track have the | ||||
| following settings: | ||||
| +========+===================+====================+================+ | ||||
| | Header | IPv6 Source Addr. | IPv6 Dest. Addr. | TrackID in RPI | | ||||
| +========+===================+====================+================+ | ||||
| | Outer | A | E | (A, 129) | | ||||
| +--------+-------------------+--------------------+----------------+ | ||||
| | Inner | X | E (X != A), F or G | N/A | | ||||
| +--------+-------------------+--------------------+----------------+ | ||||
| Table 6: Packet Header Settings | ||||
| As an example, say that A has a packet for F. Using the RIB above: | ||||
| * From P-DAO 3: A encapsulates the packet the Track signaled by | ||||
| P-DAO 3, with the outer header above. Now the packet destination | ||||
| is E. | ||||
| * 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 | ||||
| the packet. | ||||
| * From Neighbor Cache Entry: C delivers packets to F or G. | ||||
| 3.4.1.3. Segment Routing | ||||
| 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 | ||||
| adapt the path. As such, this can be seen as a form of Segment | ||||
| Routing [RFC8402]: | ||||
| * P-DAO 1 signals C==>D==>E-to-E | ||||
| * P-DAO 2 signals A==>B-to-B,C | ||||
| * P-DAO 3 signals F and G via the A-->C-->E-to-F,G Track | ||||
| Storing Mode P-DAO 1 and 2, and Non-Storing Mode P-DAO 3, are sent to | ||||
| E, B and A, respectively, as follows: | ||||
| +====================+==============+==============+==============+ | ||||
| | | P-DAO 1 to E | P-DAO 2 to B | P-DAO 3 to A | | ||||
| +====================+==============+==============+==============+ | ||||
| | Mode | Storing | Storing | Non-Storing | | ||||
| +--------------------+--------------+--------------+--------------+ | ||||
| | Track Ingress | A | A | A | | ||||
| +--------------------+--------------+--------------+--------------+ | ||||
| | (DODAGID, TrackID) | (A, 129) | (A, 129) | (A, 129) | | ||||
| +--------------------+--------------+--------------+--------------+ | ||||
| | SegmentID | 1 | 2 | 3 | | ||||
| +--------------------+--------------+--------------+--------------+ | ||||
| | VIO | C, D, E | A, B | C, E | | ||||
| +--------------------+--------------+--------------+--------------+ | ||||
| | Targets | E | C | F, G | | ||||
| +--------------------+--------------+--------------+--------------+ | ||||
| Table 7: P-DAO Messages | ||||
| Note in the above that the Segment can terminate at the loose hop as | ||||
| used in the example of P-DAO 1 or at the previous hop as done with | ||||
| P-DAO 2. Both methods are possible on any Segment joined by a loose | ||||
| Track Leg. P-DAO 1 generates more signaling since E is the Segment | ||||
| Egress when D could be, but has the benefit that it validates that | ||||
| the connectivity between D and E still exists. | ||||
| As a result the RIBs are set as follows: | ||||
| +======+=============+=========+=============+==========+ | ||||
| | Node | destination | Origin | Next Hop(s) | TrackID | | ||||
| +======+=============+=========+=============+==========+ | ||||
| | E | F, G | P-DAO 1 | Neighbor | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | D | E | P-DAO 1 | Neighbor | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | C | D | P-DAO 1 | Neighbor | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | " | E | P-DAO 1 | D | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | B | C | P-DAO 2 | Neighbor | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | A | B | P-DAO 2 | Neighbor | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | " | C | P-DAO 2 | B | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | " | E, F, G | P-DAO 3 | C, E | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| Table 8: RIB setting | ||||
| Packets originated at A to E do not require an encapsulation, but | ||||
| carry a SRH via C. The outer headers of the packets that are | ||||
| forwarded along the Track have the following settings: | ||||
| +========+===================+====================+================+ | ||||
| | Header | IPv6 Source Addr. | IPv6 Dest. Addr. | TrackID in RPI | | ||||
| +========+===================+====================+================+ | ||||
| | Outer | A | C till C then E | (A, 129) | | ||||
| +--------+-------------------+--------------------+----------------+ | ||||
| | Inner | X | E (X != A), F or G | N/A | | ||||
| +--------+-------------------+--------------------+----------------+ | ||||
| Table 9: Packet Header Settings | ||||
| As an example, say that A has a packet for F. Using the RIB above: | ||||
| * From P-DAO 3: A encapsulates the packet the Track signaled by | ||||
| P-DAO 3, with the outer header above. Now the destination in the | ||||
| 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 3: C processes the SRH and sets the destination in the | ||||
| IPv6 Header to E. | ||||
| * From P-DAO 1: C forwards to D and D forwards to E; E decapsulates | ||||
| the packet. | ||||
| * From the Neighbor Cache Entry: C delivers packets to F or G. | ||||
| 3.4.2. Using Non-Storing Mode joining Tracks | ||||
| In this formulation: | ||||
| * P-DAO 1 signals C==>D==>E-to-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. | ||||
| 3.4.2.1. Stitched Tracks | ||||
| Non-Storing Mode P-DAO 1 and 2 are sent to C and A respectively, as | ||||
| follows: | ||||
| +====================+==============+==============+ | ||||
| | | P-DAO 1 to C | P-DAO 2 to A | | ||||
| +====================+==============+==============+ | ||||
| | Mode | Non-Storing | Non-Storing | | ||||
| +--------------------+--------------+--------------+ | ||||
| | Track Ingress | C | A | | ||||
| +--------------------+--------------+--------------+ | ||||
| | (DODAGID, TrackID) | (C, 131) | (A, 131) | | ||||
| +--------------------+--------------+--------------+ | ||||
| | SegmentID | 1 | 1 | | ||||
| +--------------------+--------------+--------------+ | ||||
| | VIO | D, E | B, C | | ||||
| +--------------------+--------------+--------------+ | ||||
| | Targets | F, G | E, F, G | | ||||
| +--------------------+--------------+--------------+ | ||||
| Table 10: P-DAO Messages | ||||
| As a result the RIBs are set as follows: | ||||
| +======+=============+=========+=============+==========+ | ||||
| | Node | destination | Origin | Next Hop(s) | TrackID | | ||||
| +======+=============+=========+=============+==========+ | ||||
| | E | F, G | ND | Neighbor | Any | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | D | E | ND | Neighbor | Any | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | C | D | ND | Neighbor | Any | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | " | E, F, G | P-DAO 1 | D, E | (C, 131) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | B | C | ND | Neighbor | Any | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | A | B | ND | Neighbor | Any | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | " | C, E, F, G | P-DAO 2 | B, C | (A, 131) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| Table 11: RIB setting | ||||
| Packets originated at A to E, F and G do not require an | ||||
| encapsulation, though it is preferred that A encapsulates and C | ||||
| decapsulates. Either way, they carry a SRH via B and C, and C needs | ||||
| to encapsulate to E, F, or G to add an SRH via D and E. The | ||||
| encapsulating headers of packets that are forwarded along the Track | ||||
| between C and E have the following settings: | ||||
| +========+===================+===================+================+ | ||||
| | Header | IPv6 Source Addr. | IPv6 Dest. Addr. | TrackID in RPI | | ||||
| +========+===================+===================+================+ | ||||
| | Outer | C | D till D then E | (C, 131) | | ||||
| +--------+-------------------+-------------------+----------------+ | ||||
| | Inner | X | E, F, or G | N/A | | ||||
| +--------+-------------------+-------------------+----------------+ | ||||
| Table 12: Packet Header Settings between C and E | ||||
| As an example, say that A has a packet for F. Using the RIB above: | ||||
| * From P-DAO 2: A encapsulates the packet with destination of F in | ||||
| the Track signaled by P-DAO 2. The outer header has source A, | ||||
| destination B, an SRH that indicates C as the next loose hop, and | ||||
| a RPI indicating a TrackId of 131 from A's namespace, which is | ||||
| distinct from TrackId of 131 from C's. | ||||
| * From the SRH: Packets forwarded by B have source A, destination C, | ||||
| a consumed SRH, and a RPI indicating a TrackId of 131 from A's | ||||
| namespace. C decapsulates. | ||||
| * From P-DAO 1: C encapsulates the packet with destination of F in | ||||
| 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 | ||||
| a RPI indicating a TrackId of 131 from C's namespace. E | ||||
| decapsulates. | ||||
| 3.4.2.2. External routes | ||||
| In this formulation: | ||||
| * P-DAO 1 signals C==>D==>E-to-E | ||||
| * P-DAO 2 signals A==>B==>C-to-C,E | ||||
| * P-DAO 3 signals F and G via the A-->E-to-F,G Track | ||||
| Non-Storing Mode P-DAO 1 is sent to C and Non-Storing Mode P-DAO 2 | ||||
| and 3 are sent A, as follows: | ||||
| +====================+==============+==============+==============+ | ||||
| | | P-DAO 1 to C | P-DAO 2 to A | P-DAO 3 to A | | ||||
| +====================+==============+==============+==============+ | ||||
| | Mode | Non-Storing | Non-Storing | Non-Storing | | ||||
| +--------------------+--------------+--------------+--------------+ | ||||
| | Track Ingress | C | A | A | | ||||
| +--------------------+--------------+--------------+--------------+ | ||||
| | (DODAGID, TrackID) | (C, 131) | (A, 129) | (A, 141) | | ||||
| +--------------------+--------------+--------------+--------------+ | ||||
| | SegmentID | 1 | 1 | 1 | | ||||
| +--------------------+--------------+--------------+--------------+ | ||||
| | VIO | D, E | B, C | E | | ||||
| +--------------------+--------------+--------------+--------------+ | ||||
| | Targets | E | E | F, G | | ||||
| +--------------------+--------------+--------------+--------------+ | ||||
| Table 13: P-DAO Messages | ||||
| As a result the RIBs are set as follows: | ||||
| +======+=============+=========+=============+==========+ | ||||
| | Node | destination | Origin | Next Hop(s) | TrackID | | ||||
| +======+=============+=========+=============+==========+ | ||||
| | E | F, G | ND | Neighbor | Any | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | D | E | ND | Neighbor | Any | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | C | D | ND | Neighbor | Any | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | " | E | P-DAO 1 | D, E | (C, 131) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | B | C | ND | Neighbor | Any | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | A | B | ND | Neighbor | Any | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | " | C, E | P-DAO 2 | B, C | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | " | F, G | P-DAO 3 | E | (A, 141) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| Table 14: RIB setting | ||||
| The encapsulating headers of packets that are forwarded along the | ||||
| Track between C and E have the following settings: | ||||
| +========+===================+===================+================+ | ||||
| | Header | IPv6 Source Addr. | IPv6 Dest. Addr. | TrackID in RPI | | ||||
| +========+===================+===================+================+ | ||||
| | Outer | C | D till D then E | (C, 131) | | ||||
| +--------+-------------------+-------------------+----------------+ | ||||
| | Middle | A | E | (A, 141) | | ||||
| +--------+-------------------+-------------------+----------------+ | ||||
| | Inner | X | E, F or G | N/A | | ||||
| +--------+-------------------+-------------------+----------------+ | ||||
| Table 15: Packet Header Settings | ||||
| As an example, say that A has a packet for F. Using the RIB above: | ||||
| * From P-DAO 3: A encapsulates the packet with destination of F in | ||||
| the Track signaled by P-DAO 3. The outer header has source A, | ||||
| destination E, and a RPI indicating a TrackId of 141 from A's | ||||
| namespace. This recurses with: | ||||
| * From P-DAO 2: A encapsulates the packet with destination of E in | ||||
| the Track signaled by P-DAO 2. The outer header has source A, | ||||
| destination B, an SRH that indicates C as the next loose hop, and | ||||
| a RPI indicating a TrackId of 129 from A's namespace. | ||||
| * From the SRH: Packets forwarded by B have source A, destination C | ||||
| , a consumed SRH, and a RPI indicating a TrackId of 129 from A's | ||||
| namespace. C decapsulates. | ||||
| * From P-DAO 1: C encapsulates the packet with destination of E in | ||||
| 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 | ||||
| a RPI indicating a TrackId of 131 from C's namespace. E | ||||
| decapsulates. | ||||
| 3.4.2.3. Segment Routing | ||||
| In this formulation: | ||||
| * P-DAO 1 signals C==>D==>E-to-E | ||||
| * P-DAO 2 signals A==>B-to-C | ||||
| * P-DAO 3 signals F and G via the A-->C-->E-to-F,G Track | ||||
| Non-Storing Mode P-DAO 1 is sent to C and Non-Storing Mode P-DAO 2 | ||||
| and 3 are sent A, as follows: | ||||
| +====================+==============+==============+==============+ | ||||
| | | P-DAO 1 to C | P-DAO 2 to A | P-DAO 3 to A | | ||||
| +====================+==============+==============+==============+ | ||||
| | Mode | Non-Storing | Non-Storing | Non-Storing | | ||||
| +--------------------+--------------+--------------+--------------+ | ||||
| | Track Ingress | C | A | A | | ||||
| +--------------------+--------------+--------------+--------------+ | ||||
| | (DODAGID, TrackID) | (C, 131) | (A, 129) | (A, 141) | | ||||
| +--------------------+--------------+--------------+--------------+ | ||||
| | SegmentID | 1 | 1 | 1 | | ||||
| +--------------------+--------------+--------------+--------------+ | ||||
| | VIO | D, E | B | C, E | | ||||
| +--------------------+--------------+--------------+--------------+ | ||||
| | Targets | | C | F, G | | ||||
| +--------------------+--------------+--------------+--------------+ | ||||
| Table 16: P-DAO Messages | ||||
| As a result the RIBs are set as follows: | ||||
| +======+=============+=========+=============+==========+ | ||||
| | Node | destination | Origin | Next Hop(s) | TrackID | | ||||
| +======+=============+=========+=============+==========+ | ||||
| | E | F, G | ND | Neighbor | Any | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | D | E | ND | Neighbor | Any | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | C | D | ND | Neighbor | Any | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | " | E | P-DAO 1 | D, E | (C, 131) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | B | C | ND | Neighbor | Any | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | A | B | ND | Neighbor | Any | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | " | C | P-DAO 2 | B, C | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | " | E, F, G | P-DAO 3 | C, E | (A, 141) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| Table 17: RIB setting | ||||
| The encapsulating headers of packets that are forwarded along the | ||||
| Track between A and B have the following settings: | ||||
| +========+===================+===================+================+ | ||||
| | Header | IPv6 Source Addr. | IPv6 Dest. Addr. | TrackID in RPI | | ||||
| +========+===================+===================+================+ | ||||
| | Outer | A | B till D then E | (A, 129) | | ||||
| +--------+-------------------+-------------------+----------------+ | ||||
| | Middle | A | C | (A, 141) | | ||||
| +--------+-------------------+-------------------+----------------+ | ||||
| | Inner | X | E, F or G | N/A | | ||||
| +--------+-------------------+-------------------+----------------+ | ||||
| Table 18: Packet Header Settings | ||||
| The encapsulating headers of packets that are forwarded along the | ||||
| Track between B and C have the following settings: | ||||
| +========+===================+===================+================+ | ||||
| | Header | IPv6 Source Addr. | IPv6 Dest. Addr. | TrackID in RPI | | ||||
| +========+===================+===================+================+ | ||||
| | Outer | A | C | (A, 141) | | ||||
| +--------+-------------------+-------------------+----------------+ | ||||
| | Inner | X | E, F or G | N/A | | ||||
| +--------+-------------------+-------------------+----------------+ | ||||
| Table 19: Packet Header Settings | ||||
| The encapsulating headers of packets that are forwarded along the | ||||
| Track between C and E have the following settings: | ||||
| +========+===================+===================+================+ | ||||
| | Header | IPv6 Source Addr. | IPv6 Dest. Addr. | TrackID in RPI | | ||||
| +========+===================+===================+================+ | ||||
| | Outer | C | D till D then E | (C, 131) | | ||||
| +--------+-------------------+-------------------+----------------+ | ||||
| | Middle | A | E | (A, 141) | | ||||
| +--------+-------------------+-------------------+----------------+ | ||||
| | Inner | X | E, F or G | N/A | | ||||
| +--------+-------------------+-------------------+----------------+ | ||||
| Table 20: Packet Header Settings | ||||
| As an example, say that A has a packet for F. Using the RIB above: | ||||
| * From P-DAO 3: A encapsulates the packet with destination of F in | ||||
| the Track signaled by P-DAO 3. The outer header has source A, | ||||
| destination C, an SRH that indicates E as the next loose hop, and | ||||
| a RPI indicating a TrackId of 141 from A's namespace. This | ||||
| recurses with: | ||||
| * From P-DAO 2: A encapsulates the packet with destination of C in | ||||
| the Track signaled by P-DAO 2. The outer header has source A, | ||||
| destination B, and a RPI indicating a TrackId of 129 from A's | ||||
| namespace. B decapsulates forwards to C based on a sibling | ||||
| connected route. | ||||
| * From the SRH: C consumes the SRH and makes the destination E. | ||||
| * From P-DAO 1: C encapsulates the packet with destination of E in | ||||
| 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 | ||||
| a RPI indicating a TrackId of 131 from C's namespace. E | ||||
| decapsulates. | ||||
| 3.5. Complex Tracks | ||||
| To increase the reliability of the P2P transmission, this | ||||
| specification enables to build a collection of Legs between the same | ||||
| Ingress and Egress Nodes and combine them with the same TrackID, as | ||||
| shown in Figure 2. Legs may cross at loose hops edges or remain | ||||
| parallel. | ||||
| 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 | ||||
| own P-RouteID which allows to manage it separately. When Legs cross | ||||
| within respsective Segment, the next loose hop (the current | ||||
| destination of the packet) indicates which Leg is being followed and | ||||
| a Segment that can reach that next loose hop is selected. | ||||
| CPF CPF CPF CPF | ||||
| Southbound API | ||||
| _-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._- | ||||
| _-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._- | ||||
| +----------+ | ||||
| | RPL Root | | ||||
| +----------+ | ||||
| ( ) | ||||
| ( ) | ||||
| ( DODAG ) | ||||
| ( ) | ||||
| ( ) | ||||
| ) | ||||
| <- Leg 1 B, E -> | ||||
| <--- Segment 1 A,B ---> <------- Segment 2 C,D,E -------> | ||||
| FWD --z Relay --z FWD --z FWD Target 1 | ||||
| z-- Node z-- Node z-- Node z-- Node --z / | ||||
| --z (A) (B) \ (C) (D) z-- / | ||||
| Track \ Track | ||||
| Ingress Segment 5 Egress - Tgt 2 | ||||
| (I) \ (E) | ||||
| --z \ z-- \ | ||||
| z-- FWD --z FWD --z Relay --z FWD --z \ | ||||
| Node z-- Node z-- Node z-- Node Target 3 | ||||
| (F) (G) (H) (J) | ||||
| <------ Segment 3 F,G,H ------> <---- Segment 4 J,E ----> | ||||
| <- Leg 2 H, E -> | ||||
| <--- Segment 1 A,B ---> <- S5-> <---- Segment 4 J,E ----> | ||||
| <- Leg 3 B, H, E -> | ||||
| ) | ||||
| ( | ||||
| ( ) | ||||
| Figure 2: Segments and Tracks | ||||
| Note that while this specification enables to build both Segments | ||||
| 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 | ||||
| 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 | ||||
| Segments and associated PAREO functions is curently limited. The | ||||
| only possibility available at this time is to define overlapping Legs | ||||
| as illustrated in Figure 2, with Leg 3 that is congruent with Leg 1 | ||||
| till node B and congruent with Leg 2 from node H on, abstracting | ||||
| 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 2. | ||||
| 3.6. Scope and Expectations | ||||
| This specification expects that the RPL Main DODAG is operated in RPL | ||||
| Non-Storing Mode to sustain the exchanges with the Root. Based on | ||||
| its comprehensive knowledge of the parent-child relationship, the | ||||
| Root can form an abstracted view of the whole DODAG topology. This | ||||
| document adds the capability for nodes to advertise additional | ||||
| sibling information to complement the topological awareness of the | ||||
| Root to be passed on to the PCE, and enable the PCE to build more / | ||||
| better paths that traverse those siblings. | ||||
| 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 | ||||
| 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 | ||||
| transmission links. The methods used to learn the node capabilities | ||||
| and the resources that are available in the devices and in the | ||||
| network are out of scope for this document. The method to capture | ||||
| and report the LLN link capacity and reliability statistics are also | ||||
| out of scope. They may be fetched from the nodes through network | ||||
| management functions or other forms of telemetry such as OAM. | ||||
| The "6TiSCH Architecture" [6TiSCH-ARCHI] leverages a centralized | ||||
| model that is similar to that of "Deterministic Networking | ||||
| Architecture" [RFC8655], whereby the device resources and | ||||
| capabilities are exposed to an external controller which installs | ||||
| routing states into the network based on its own objective functions | ||||
| that reside in that external entity. 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 [RFC5551]. 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 | ||||
| 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. | ||||
| 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 | ||||
| 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 | ||||
| SIOs that detail the parent/child and sibling information. | ||||
| The algorithm to compute the paths and the protocol used by the PCE | ||||
| and the metrics and link statistics involved in the computation are | ||||
| 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 | ||||
| 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, | ||||
| statistical nature, and provide visibility on link throughput, | ||||
| latency, stability and availability over relatively long periods. | ||||
| The "Reliable and Available Wireless (RAW) Architecture/Framework" | ||||
| [RAW-ARCHI] extends the definition of Track, as being composed of | ||||
| East-West directional segments and North-South bidirectional | ||||
| segments, to enable additional path diversity, using Packet ARQ, | ||||
| Replication, Elimination, and Overhearing (PAREO) functions over the | ||||
| available paths, to provide a dynamic balance between the reliability | ||||
| and availability requirements of the flows and the need to conserve | ||||
| energy and spectrum.. This specification prepares for RAW by setting | ||||
| up the Tracks, but only forms DODAGs, which are composed of | ||||
| aggregated end-to-end loose source routed Legs, joined by strict | ||||
| routed Segments, all oriented East-West. | ||||
| The RAW Architecture defines a dataplane extension of the PCE called | ||||
| the Path Selection Engine (PSE), that adapts the use of the path | ||||
| redundancy within a Track to defeat the diverse causes of packet | ||||
| loss. The PSE controls the forwarding operation of the packets | ||||
| within a Track This specification can use but does not impose a PSE | ||||
| and does not provide the policies that wouldselect which packets are | ||||
| routed through which path within a Track, IOW, how the PSE may use | ||||
| the path redundancy within the Track. By default, the use of the | ||||
| available redundancy is limited to simple load balancing, and all the | ||||
| segments are East-West unidirectional only. | ||||
| A Track may be set up to reduce the load around the Root, or to | ||||
| enable urgent traffic to flow more directly. This specification does | ||||
| not provide the policies that would decide which flows are routed | ||||
| through which Track. In a Non-Storing Mode RPL Instance, the Main | ||||
| DODAG provides a default route via the Root, and the Tracks provide | ||||
| more specific routes to the Track Targets. | ||||
| 4. Extending existing RFCs | ||||
| 4.1. Extending RFC 6550 | ||||
| This specification extends RPL [RPL] to enable the Root to install | ||||
| 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 | ||||
| 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 | ||||
| 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 | ||||
| owns the address that serves as TrackID, as well as the associated | ||||
| namespace from which it selects the TrackID. In the context of this | ||||
| specification, the installed route appears as a more specific route | ||||
| to the Track Targets, and the Track Ingress routes the packets | ||||
| 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 | ||||
| is RECOMMENDED that the nodes involved in a Track mantain multiple | ||||
| 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 | ||||
| the Root uses diverse source route paths to retry similar messages ot | ||||
| the nodes in the Track. | ||||
| 4.1.1. Projected DAO | ||||
| Section 6 of [RPL] introduces the RPL Control Message Options (CMO), | Section 6 of [RPL] introduces the RPL Control Message Options (CMO), | |||
| including the RPL Target Option (RTO) and Transit Information Option | including the RPL Target Option (RTO) and Transit Information Option | |||
| (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). This specification extends the DAO | Advertisement Object (DAO). A DAO message signals routing | |||
| message with the Projected DAO (P-DAO); a P-DAO message signals a | information to one or more Targets indicated in RTOs, providing one | |||
| Projected Route to one or more Targets using the new CMOs presented | hop information at a time in the TIO. A Projected DAO (P-DAO) is a | |||
| therein. This specification enables to combine one or more Projected | special DAO message generated by the Root to install a P-Route formed | |||
| Routes into a DODAG called a Track, that is traversed to reach the | of multiple hops in its DODAG. This provides a RPL-based method to | |||
| Targets. | install the Tracks as expected by the 6TiSCH Architecture | |||
| [6TiSCH-ARCHI] as a collection of multiple P-Routes. | ||||
| The Track is assimilated with the DODAG formed for a Local RPL | The P-DAO is signaled with a new "Projected DAO" (P) flag, see | |||
| Instance. The local RPLInstanceID of the Track is called the | Figure 3. The 'P' flag is encoded in bit position 2 (to be confirmed | |||
| TrackID, more in Section 7.2. A P-DAO message for a Track signals | by IANA) of the Flags field in the DAO Base Object. The Root MUST | |||
| the TrackID in the RPLInstanceID field. The Track Ingress is | set it to 1 in a Projected DAO message. Otherwise it MUST be set to | |||
| signaled in the DODAGID field of the Projected DAO Base Object; that | 0. It is set to 0 in Legacy implementations as specified | |||
| field is elided in the case of the main RPL Instance. The Track | respectively in Sections 20.11 and 6.4 of [RPL] | |||
| Ingress is the Root of the Track, as shown in Figure 1. | ||||
| This specification defines the new "Projected DAO" (P) flag. The 'P' | The P-DAO is control plane signaling and should not be stuck behind | |||
| flag is encoded in bit position 2 (to be confirmed by IANA) of the | high traffic levels. The expectation is that the P-DAO message is | |||
| Flags field in the DAO Base Object. The Root MUST set it to 1 in a | sent as high QoS level, above that of data traffic, typically with | |||
| Projected DAO message. Otherwise it MUST be set to 0. It is set to | the Network Control precedence. | |||
| 0 in legacy implementations as specified respectively in Sections | ||||
| 20.11 and 6.4 of [RPL]. . | ||||
| 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|D|P| Flags | Reserved | DAOSequence | | | TrackID |K|D|P| Flags | Reserved | DAOSequence | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| + + | + + | |||
| | | | | DODAGID field set to the | | |||
| + IPv6 Address of the Track Ingress + | + IPv6 Address of the Track Ingress + | |||
| | | | | used to source encapsulated packets | | |||
| + + | + + | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Option(s)... | | Option(s)... | |||
| +-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
| Figure 1: Projected DAO Base Object | Figure 3: Projected DAO Base Object | |||
| New fields: | New fields: | |||
| TrackID: In the case of a P-DAO, the RPLInstanceID field is called | TrackID: The local or global RPLInstanceID of the DODAG that serves | |||
| TrackID. This is a naming convenience but does not change the | as Track, more in Section 6.2 | |||
| semantics and format of the RPLInstanceID that is used as TrackID. | ||||
| 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. Options may | |||
| be factorized; multiple RTOs may be present to signal a collection of | be factorized; multiple RTOs may be present to signal a collection of | |||
| children that can be reached via the parent(s) indicated in the | children that can be reached via the parent(s) indicated in the | |||
| TIO(s) that follows the RTOs. This specification generalizes the | TIO(s) that follows the RTOs. This specification generalizes the | |||
| case of a parent that can be used to reach a child with that of a | case of a parent that can be used to reach a child with that of a | |||
| whole Track through which both children and siblings of the Track | whole Track through which children and siblings of the Track Egress | |||
| Egress are reachable. | are reachable. | |||
| 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. One VIO | use in P-DAO messages as a multihop alternative to the TIO, more in | |||
| is the Stateful VIO (SF-VIO); the SF-VIO installs Storing-Mode | Section 5.3. One VIO is the stateful Storing Mode VIO (SM-VIO); an | |||
| Projected Route along a strict segment. The other is the Source- | SM-VIO installs a strict hop-by-hop P-Route called a Track Segment. | |||
| Routed VIO (SR-VIO); the SR-VIO installs a Non-Storing-Mode Projected | The other is the Non-Storing Mode VIO (NSM-VIO); the NSM-VIO installs | |||
| Route at the Track Ingress, which uses that state to encapsulate a | a loose source-routed P-Route called a Track Leg at the Track | |||
| packet with a Routing Header (RH) to the Track Egress. | Ingress, which uses that state to encapsulate a packet IPv6_in_IPv6 | |||
| with a new Routing Header (RH) to the Track Egress, more in | ||||
| Section 6.6. | ||||
| Like in a DAO message, the RTOs can be factorized in a P-DAO, but the | A P-DAO contains one or more RTOs to indicate the Target | |||
| Via Information Options cannot. A P-DAO contains one or more RTOs | (destinations) that can be reached via the P-Route, followed by | |||
| that indicate the destinations that can be reached via the Track, and | exactly one VIO that signals the sequence of nodes to be followed, | |||
| exactly one VIO that signals a sequence of nodes. In Non-Storing | more in Section 6. There are two modes of operation for the | |||
| Mode, the Root sends the P-DAO to the Track Ingress where the source- | P-Routes, the Storing Mode and the Non-Storing Mode, see | |||
| routing state is stored. In Storing Mode, the P-DAO is sent to the | Section 6.3.2 and Section 6.3.3 respectively for more. | |||
| Track Egress and forwarded along the Segment in the reverse | ||||
| direction, installing a Storing Mode state to the Track Egress at | ||||
| each hop. In both cases the Track Ingress is the owner of the Track, | ||||
| and it generates the P-DAO-ACK when the installation is successful. | ||||
| 3.2. 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 6.4. The sibling selection process is out of scope. The | Section 5.4. The SIO is placed in DAO messages that are sent | |||
| expectation is that a node reports a Sibling Address in a SIO based | directly to the Root of the main DODAG. | |||
| on an active address registration [RFC8505] from that sibling for | ||||
| that address with the 'R' flag not set in the EARO. The node may | ||||
| assess the liveliness of the sibling at any time by performing a | ||||
| registration for one of its own addresses, either a link local or a | ||||
| global one, depending on whether the node expects the sibling to | ||||
| perform a matching advertisement in its own SIO. | ||||
| 3.3. P-DAO Request | 4.1.4. P-DAO Request | |||
| Two new RPL Control Messages are also introduced, to enable a RAN to | Two new RPL Control Messages are also introduced, to enable a RPL- | |||
| request the establishment of a Track between self as the Track | Aware Node to request the establishment of a Track between self as | |||
| Ingress Node and a Track Egress. The RAN makes its request by | the Track Ingress Node and a Track Egress. The node makes its | |||
| sending a new P-DAO Request (PDR) Message to the Root. The Root | request by sending a new P-DAO Request (PDR) Message to the Root. | |||
| confirms with a new PDR-ACK message back to the requester RAN, see | The Root confirms with a new PDR-ACK message back to the requester | |||
| Section 6.1 for more. A positive PDR-ACK indicates that the Track | RAN, see Section 5.1 for more. | |||
| was built and that the Roots commits to maintain the Track for the | ||||
| negotiated lifetime. In the case of a complex Track, each Segment is | ||||
| maintained independently and asynchronously by the Root, with its own | ||||
| lifetime that may be shorter, the same, or longer than that of the | ||||
| Track. The Root may use an asynchronous PDR-ACK with an negative | ||||
| status to indicate that the Track was terminated before its time. | ||||
| 3.4. Extending the RPI | 4.1.5. Extending the RPI | |||
| Sending a Packet within a RPL Local Instance requires the presence of | Sending a Packet within a RPL Local Instance requires the presence of | |||
| the abstract RPL Packet Information (RPI) described in section 11.2. | the abstract RPL Packet Information (RPI) described in section 11.2. | |||
| of [RPL] in the outer IPv6 Header chain (see [USEofRPLinfo]). The | of [RPL] in the outer IPv6 Header chain (see [RFC9008]). The RPI | |||
| RPI carries a local RPLInstanceID which, in association with either | carries a local RPLInstanceID which, in association with either the | |||
| the source or the destination address in the IPv6 Header, indicates | source or the destination address in the IPv6 Header, indicates the | |||
| the RPL Instance that the packet follows. | RPL Instance that the packet follows. | |||
| This specification extends [RPL] to create a new flag that signals | This specification extends [RPL] to create a new flag that signals | |||
| that a packet is forwarded along a projected route. | that a packet is forwarded along a P-Route. | |||
| Projected-Route 'P': 1-bit flag. It is set to 1 if this packet is | Projected-Route 'P': 1-bit flag. It is set to 1 in the RPI that is | |||
| sent over a projected route and set to 0 otherwise. | 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, | ||||
| including when the packet follows a Segment that joins loose hops | ||||
| of the Main DODAG. The flag is not mutable en-route. | ||||
| 4. Extending RFC 6553 | 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. | ||||
| 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. [USEofRPLinfo] updated the Option Type from 0x63 to 0x23. | Option. [RFC9008] updated the Option Type from 0x63 to 0x23. | |||
| This specification modifies the RPL Option to encode the 'P' flag as | This specification modifies the RPL Option to encode the 'P' flag as | |||
| follows: | 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 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | 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 2: Extended RPL Option Format | Figure 4: Extended RPL Option Format | |||
| Option Type: 0x23 or 0x63, see [USEofRPLinfo] | 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 3.4. | Projected-Route 'P': 1-bit flag as defined in Section 4.1.5. | |||
| RPLInstanceID: See [RFC6553]. Indicates the TrackId if the 'P' flag | RPLInstanceID: See [RFC6553]. Indicates the TrackId if the 'P' flag | |||
| is set. | is set, as discussed in Section 4.1.1. | |||
| SenderRank: See [RFC6553]. This field MUST be set to 0 by the | SenderRank: See [RFC6553]. This field MUST be set to 0 by the | |||
| sender and ignored by the receiver if the 'P'flag is set. | sender and ignored by the receiver if the 'P'flag is set. | |||
| 5. Extending RFC 8138 | 4.3. Extending RFC 8138 | |||
| The 6LoWPAN Routing Header [RFC8138] specification introduces a new | ||||
| IPv6 over Low-Power Wireless Personal Area Network (6LoWPAN) | ||||
| [RFC6282] dispatch type for use in 6LoWPAN route-over topologies, | ||||
| which initially covers the needs of RPL data packet compression. | ||||
| Section 4 of [RFC8138] presents the generic formats of the 6LoWPAN | ||||
| Routing Header (6LoRH) with two forms, one Elective that can be | ||||
| ignored and skipped when the router does not understand it, and one | ||||
| Critical which causes the packet to be dropped when the router cannot | ||||
| process it. The 'E' Flag in the 6LoRH indicates its form. In order | ||||
| to skip the Elective 6LoRHs, their format imposes a fixed expression | ||||
| of the size, whereas the size of a Critical 6LoRH may be signaled in | ||||
| variable forms to enable additional optimizations. | ||||
| When the [RFC8138] compression is used, the Root of the Main DODAG | ||||
| that sets up the Track also constructs the compressed routing header | ||||
| (SRH-6LoRH) on behalf of the Track Ingress, which saves the | ||||
| complexities of optimizing the SRH-6LoRH encoding in constrained | ||||
| code. The SRH-6LoRH is signaled in the NSM-VIO, in a fashion that it | ||||
| is ready to be placed as is in the packet encapsulation by the Track | ||||
| 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 Projected | operation. The format of the RPI-6LoRH is not suited for P-Routes | |||
| 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, with a | This specification introduces a new 6LoRH, the P-RPI-6LoRH that can | |||
| type of 7. The P-RPI-6LoRH header is usually a a Critical 6LoWPAN | be used in either Elective or Critical 6LoRH form, see Table 21 and | |||
| Routing Header, but it can be elective as well if an SRH-6LoRH is | Table 22 respectively. The new 6LoRH MUST be used as a Critical | |||
| present and controls the routing decision. | 6LoRH, unless an SRH-6LoRH is present and controls the routing | |||
| decision, in which case it MAY be used in Elective form. | ||||
| The P-RPI-6LoRH is designed to compress the RPI along RPL Projected | The P-RPI-6LoRH is designed to compress the RPI along RPL P-Routes. | |||
| Routes. It sformat 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 7 | RPLInstanceID | | |1|0|E| Length | 6LoRH Type | RPLInstanceID | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 5: P-RPI-6LoRH Format | ||||
| Figure 3: P-RPI-6LoRH Format | Type: IANA is requested to define the same value of the type for | |||
| 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. | |||
| 6. New RPL Control Messages and Options | RPLInstanceID : In the context of this specification, the | |||
| RPLInstanceID field signals the TrackID, see Section 3.3 and | ||||
| Section 6.2 . | ||||
| 6.1. New P-DAO Request Control Message | Section 6.7 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 | ||||
| Track. | ||||
| The P-DAO Request (PDR) message is sent by a Node in the main DODAG | 5. New RPL Control Messages and Options | |||
| 5.1. New P-DAO Request Control Message | ||||
| 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. The source IPv6 address of the PDR | this node is Track Ingress, and signals whether an acknowledgment | |||
| signals the Track Ingress of the requested Track, and the TrackID is | called PDR-ACK is requested or not. A positive PDR-ACK indicates | |||
| indicated in the message itself. One and only one RPL Target Option | that the Track was built and that the Roots commits to maintain the | |||
| MUST be present in the message. The RTO signals the Track Egress, | Track for the negotiated lifetime. | |||
| more in Section 7.1. | ||||
| 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 | ||||
| "Transient Failure" (see Section 10.9) is an indication that the PDR | ||||
| may be retried after a reasonable time that depends on the | ||||
| deployment. Other negative status values indicate a permanent error; | ||||
| the tentative must be abandoned until a corrective action is taken at | ||||
| the application layer or through network management. | ||||
| 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 | ||||
| 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. | ||||
| 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 4: New P-DAO Request Format | Figure 6: New P-DAO Request Format | |||
| TrackID: 8-bit field indicating the RPLInstanceID associated with | TrackID: 8-bit field. In the context of this specification, the | |||
| the Track. | TrackID field signals the RPLInstanceID of the DODAG formed by the | |||
| Track, see Section 3.3 and Section 6.2. To allocate a new Track, | ||||
| the Ingress Node must provide a value that is not in use at this | ||||
| 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 | |||
| ReqLifetime: 8-bit unsigned integer. The requested lifetime for the | ReqLifetime: 8-bit unsigned integer. The requested lifetime for the | |||
| Track expressed in Lifetime Units (obtained from the DODAG | Track expressed in Lifetime Units (obtained from the DODAG | |||
| Configuration option). | Configuration option). | |||
| A PDR with a fresher PDRSequence refreshes the lifetime, and a | A PDR with a fresher PDRSequence refreshes the lifetime, and a | |||
| PDRLifetime of 0 indicates that the track should be destroyed. | PDRLifetime of 0 indicates that the Track should be destroyed, | |||
| e.g., when the application that requested the Track terminates. | ||||
| PDRSequence: 8-bit wrapping sequence number, obeying the operation | PDRSequence: 8-bit wrapping sequence number, obeying the operation | |||
| in section 7.2 of [RPL]. The PDRSequence is used to correlate a | in section 7.2 of [RPL]. The PDRSequence is used to correlate a | |||
| PDR-ACK message with the PDR message that triggered it. It is | PDR-ACK message with the PDR message that triggered it. It is | |||
| incremented at each PDR message and echoed in the PDR-ACK by the | incremented at each PDR message and echoed in the PDR-ACK by the | |||
| Root. | Root. | |||
| 6.2. New PDR-ACK Control Message | 5.2. New PDR-ACK Control Message | |||
| The new PDR-ACK is sent as a response to a PDR message with the 'K' | The new PDR-ACK is sent as a response to a PDR message with the 'K' | |||
| flag set. The RPL Control Code for the PDR-ACK is 0x0A, to be | flag set. The RPL Control Code for the PDR-ACK is 0x0A, to be | |||
| confirmed by IANA. Its format is as follows: | confirmed by IANA. Its format 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 | Flags | Track Lifetime| PDRSequence | | | TrackID | Flags | Track Lifetime| PDRSequence | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | PDR-ACK Status| Reserved | | | PDR-ACK Status| Reserved | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Option(s)... | | Option(s)... | |||
| +-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+ | |||
| Figure 5: New PDR-ACK Control Message Format | Figure 7: New PDR-ACK Control Message Format | |||
| TrackID: The RPLInstanceID of the Track that was created. The value | TrackID: Set to the TrackID indicated in the TrackID field of the | |||
| of 0x00 is used to when no Track was created. | 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 6: | Status is substructured as indicated in Figure 8: | |||
| 0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 | |||
| +-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
| |E|R| Value | | |E|R| Value | | |||
| +-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
| Figure 6: PDR-ACK status Format | Figure 8: 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 27 and Table 28. | |||
| 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 | |||
| 6.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 Serial Track or a Segment of a more Complex | the hops of either a Leg (using Non-Storing Mode) a Segment (using | |||
| Track. A VIO MUST contain at least one Via Address, and a Via | storing mode) of a Track. A Storing Mode P-DAO contains one Storing | |||
| Address MUST NOT be present more than once, otherwise the VIO MUST be | Mode VIO (SM-VIO) whereas a Non-Storing Mode P-DAO contains one Non- | |||
| ignored. The format of the Via Information Options is as follows: | Storing Mode VIO (NSM-VIO) | |||
| The duration of the validity of a VIO is indicated in a Segment | ||||
| Lifetime field. A P-DAO message that contains a VIO with a Segment | ||||
| 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 | ||||
| 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 | ||||
| header is not present. | ||||
| 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 | ||||
| Information Option, and the compression is the same forall the | ||||
| addresses, as shown in Figure 9, for simplicity. | ||||
| 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 | ||||
| SRH-6LoRH Types make the VIO globally shorter; this means that more | ||||
| than one SRH-6LoRH may be present. | ||||
| 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 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Type | Option Length | Flags | SegmentID | | | Type | Option Length | Flags | P-RouteID | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| |Segm. Sequence | Seg. Lifetime | SRH-6LoRH header | | |Segm. Sequence | Seg. Lifetime | SRH-6LoRH head | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| + + | . Via Address 1 (compressed by RFC 8138) . | |||
| . . | ||||
| . Via Address 1 . | ||||
| . . | ||||
| + + | ||||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| . .... . | . .... . | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| + + | . Via Address n (compressed by RFC 8138) . | |||
| . . | ||||
| . Via Address n . | ||||
| . . | ||||
| + + | ||||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | ||||
| . Additional SRH-6LoRH Header(s) . | ||||
| | | | ||||
| . .... . | ||||
| Figure 7: VIO format (uncompressed form) | Figure 9: VIO format (uncompressed form) | |||
| Option Type: 0x0B for SF-VIO, 0x0C for SR-VIO (to be confirmed by | Option Type: 0x0E for SM-VIO, 0x0F for NSM-VIO (to be confirmed by | |||
| IANA) | IANA), see =Table 25 | |||
| Option Length: In bytes; variable, depending on the number of Via | Option Length: 8-bit unsigned integer, representing the length in | |||
| Addresses and the compression. | octets of the option, not including the Option Type and Length | |||
| fields, see section 6.7.1. of [RPL]; the Option Length is | ||||
| variable, depending on the number of Via Addresses and the | ||||
| compression applied. | ||||
| SegmentID: 8-bit field that identifies a Segment within a Track or | P-RouteID: 8-bit field that identifies a component of a Track or the | |||
| the main DODAG as indicated by the TrackID field. The value of 0 | Main DODAG as indicated by the TrackID field. The value of 0 is | |||
| is used to signal a Serial Track, i.e., made of a single segment. | used to signal a Serial Track, i.e., made of a single segment/Leg. | |||
| In an SM-VIO, the P-RouteID indicates an actual Segment. In an an | ||||
| NSM-VIO, it indicates a Leg, that is a serial subTrack that is | ||||
| added to the overall topology of the Track. | ||||
| Segment Sequence: 8-bit unsigned integer. The Segment Sequence | Segment Sequence: 8-bit unsigned integer. The Segment Sequence | |||
| obeys the operation in section 7.2 of [RPL] and the lollipop | obeys the operation in section 7.2 of [RPL] and the lollipop | |||
| starts at 255. | starts at 255. | |||
| When the Root of the DODAG needs to refresh or update a Segment in | When the Root of the DODAG needs to refresh or update a Segment in | |||
| a Track, it increments the Segment Sequence individually for that | a Track, it increments the Segment Sequence individually for that | |||
| Segment. | Segment. | |||
| The Segment information indicated in the VIO deprecates any state | The Segment information indicated in the VIO deprecates any state | |||
| for the Segment indicated by the SegmentID within the indicated | for the Segment indicated by the P-RouteID within the indicated | |||
| Track and sets up the new information. | Track and sets up the new information. | |||
| A VIO with a Segment Sequence that is not as fresh as the current | A VIO with a Segment Sequence that is not as fresh as the current | |||
| one is ignored. | one is ignored. | |||
| A VIO for a given DODAGID with the same (TrackID, SegmentID, | A VIO for a given DODAGID with the same (TrackID, P-RouteID, | |||
| Segment Sequence) indicates a retry; it MUST NOT change the | Segment Sequence) indicates a retry; it MUST NOT change the | |||
| Segment and MUST be propagated or answered as the first copy. | Segment and MUST be propagated or answered as the first copy. | |||
| Segment Lifetime: 8-bit unsigned integer. The length of time in | Segment Lifetime: 8-bit unsigned integer. The length of time in | |||
| Lifetime Units (obtained from the Configuration option) that the | Lifetime Units (obtained from the Configuration option) that the | |||
| Segment is usable. | Segment is usable. | |||
| The period starts when a new Segment Sequence is seen. The value | The period starts when a new Segment Sequence is seen. The value | |||
| of 255 (0xFF) represents infinity. The value of zero (0x00) | of 255 (0xFF) represents infinity. The value of zero (0x00) | |||
| indicates a loss of reachability. | indicates a loss of reachability. | |||
| A P-DAO message that contains a VIO with a Segment Lifetime of | SRH-6LoRH head: The first 2 bytes of the (first) SRH-6LoRH as shown | |||
| zero is referred as a No-Path P-DAO in this document. | in Figure 6 of [RFC8138]. As an example, a 6LoRH Type of 4 means | |||
| that the VIA Addresses are provided in full with no compression. | ||||
| SRH-6LoRH header: The first 2 bytes of the (first) SRH-6LoRH as | ||||
| shown in Figure 6 of [RFC8138]. A 6LoRH Type of 4 means that the | ||||
| VIA Addresses are provided in full with no compression. | ||||
| Via Address: An IPv6 address along the Segment. | ||||
| In a SF-VIO, the list is a strict path between direct neighbors, | Via Address: An IPv6 ULA or GUA of a node along the Segment. The | |||
| from the Segment Ingress to Egress, both included. The router | VIO contains one or more IPv6 Via Addresses listed in the datapath | |||
| that processes an SF-VIO MAY create additional routing state | order from Ingress to Egress. The list is expressed in a | |||
| towards the nodes after self via the node immediately after self | compressed form as signaled by the preceding SRH-6LoRH header. | |||
| in the SF-VIO, but in case of memory shortage the routes to the | ||||
| Targets have precedence since they are the ones that the router | ||||
| commits to store. | ||||
| In an SR-VIO, the list includes the egress but not the ingress | In a Storing Mode P-DAO that updates or removes a section of an | |||
| node. It starts at the first hop and ends at a Track Egress. In | already existing Segment, the list in the SM-VIO may represent | |||
| that case, the Track Egress MUST be considered as an implicit | only the section of the Segment that is being updated; at the | |||
| Target, so it MUST NOT be listed it in a RPL Target Option. The | extreme, the SM-VIO updates only one node, in which case it | |||
| list in an SR-VIO may be loose, provided that each listed node has | contains only one IPv6 address. In all other cases, the list in | |||
| a path to the next listed node, e.g., via a segment or another | the VIO MUST be complete. | |||
| Track. | ||||
| In the case of a SF-VIO, or if [RFC8138] is not used in the data | In the case of an SM-VIO, the list indicates a sequential (strict) | |||
| packets, then the Root MUST use only one SRH-6LoRH per Via | path through direct neighbors, the complete list starts at Ingress | |||
| Information Option, and the compression is the same for all the | and ends at Egress, and the nodes listed in the VIO, including the | |||
| addresses, as shown in Figure 7. | Egress, MAY be considered as implicit Targets. | |||
| In case of an SR-VIO, and if [RFC8138] is in use in the main | In the case of an NSM-VIO, the complete list can be loose and | |||
| DODAG, then the Root SHOULD optimize the size of the SR-VIO; more | excludes the Ingress node, starting at the first loose hop and | |||
| than one SRH-6LoRH may be present, e.g., if the compression level | ending at a Track Egress; the Track Egress MUST be considered as | |||
| changes inside the Segment and different SRH-6LoRH Types are | an implicit Target, so it MUST NOT be signaled in a RPL Target | |||
| required. The content of the SR-VIO starting at the first SRH- | Option. | |||
| 6LoRH header is thus verbatim the one that the Track Ingress | ||||
| places in the packet encapsulation to reach the Track Ingress. | ||||
| 6.4. Sibling Information Option | 5.4. Sibling Information Option | |||
| The Sibling Information Option (SIO) provides indication on siblings | The Sibling Information Option (SIO) provides indication on siblings | |||
| that could be used by the Root to form Projected Routes. One or more | that could be used by the Root to form P-Routes. One or more SIO(s) | |||
| SIO(s) may be placed in the DAO messages that are sent to the Root in | may be placed in the DAO messages that are sent to the Root in Non- | |||
| Non-Storing Mode. | Storing Mode. | |||
| To advertise a neighbor node, the router MUST have an active Address | ||||
| Registration from that sibling using [RFC8505], for an address (ULA | ||||
| or GUA) that serves as identifier for the node. If this router also | ||||
| registers an address to that sibling, and the link has similar | ||||
| properties in both directions, only the router with the lowest | ||||
| Interface ID in its registered address needs report the SIO, and the | ||||
| 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 |Comp.|B|D|Flags| Opaque | | | Type | Option Length |D| Flags |Comp.| Opaque | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Step of Rank | Reserved | | | Step of Rank | Reserved | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| + + | + + | |||
| . . | . . | |||
| . Sibling DODAGID (if the D flag not set) . | . Sibling DODAGID (if the D flag not set) . | |||
| . . | . . | |||
| + + | + + | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| + + | + + | |||
| . . | . . | |||
| . Sibling Address . | . Sibling Address . | |||
| . . | . . | |||
| + + | + + | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 8: Sibling Information Option Format | Figure 10: Sibling Information Option Format | |||
| Option Type: 0x0D (to be confirmed by IANA) | ||||
| Option Length: In bytes, the size of the option. | Option Type: 0x10 for SIO (to be confirmed by IANA), see =Table 25 | |||
| Compression Type: 3-bit unsigned integer. This is the SRH-6LoRH | Option Length: 8-bit unsigned integer, representing the length in | |||
| Type as defined in figure 7 in section 5.1 of [RFC8138] that | octets of the option, not including the Option Type and Length | |||
| corresponds to the compression used for the Sibling Address and | fields, see section 6.7.1. of [RPL]. | |||
| its DODAGID if resent. The Compression reference is the Root of | ||||
| the main DODAG. | ||||
| 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. | |||
| B: 1-bit flag that is set to indicate that the connectivity to the | ||||
| sibling is bidirectional and roughly symmetrical. In that case, | ||||
| only one of the siblings may report the SIO for the hop. If 'B' | ||||
| is not set then the SIO only indicates connectivity from the | ||||
| sibling to this node, and does not provide information on the hop | ||||
| from this node to the sibling. | ||||
| D: 1-bit flag that is set to indicate that sibling belongs to the | D: 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. | |||
| 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 | |||
| Opaque: MAY be used to carry information that the node and the Root | Opaque: MAY be used to carry information that the node and the Root | |||
| understand, e.g., a particular representation of the Link | understand, e.g., a particular representation of the Link | |||
| properties such as a proprietary Link Quality Information for | properties such as a proprietary Link Quality Information for | |||
| 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 | ||||
| Type as defined in figure 7 in section 5.1 of [RFC8138] that | ||||
| corresponds to the compression used for the Sibling Address and | ||||
| its DODAGID if resent. The Compression reference is the Root of | ||||
| the Main DODAG. | ||||
| Step of Rank: 16-bit unsigned integer. This is the Step of Rank | Step of Rank: 16-bit unsigned integer. This is the Step of 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. | |||
| 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 | |||
| skipping to change at page 18, line 9 ¶ | skipping to change at page 41, line 9 ¶ | |||
| 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 | |||
| a scope that MUST be make it reachable from the Root, e.g., it | a scope that MUST be make it reachable from the Root, e.g., it | |||
| 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. | |||
| 7. Projected DAO | 6. Root Initiated Routing State | |||
| This draft adds a capability to RPL whereby the Root of a main DODAG | ||||
| installs a Track as a collection of Projected Routes, using a | ||||
| Projected-DAO (P-DAO) message to maintain each individual route. The | ||||
| P-DAO 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 VIO. A P-DAO message MUST contain exactly one VIO, | ||||
| which is either a SF-VIO or an SR-VIO, and MUST follow one or more | ||||
| RTOs. There can be at most one such sequence of RTO(s) and an Via | ||||
| Information Option. A track is identified by a tuple DODAGID, | ||||
| TrackID and each route within a Track is indexed by a SegmentID. | ||||
| A P-DAO MUST be sent from the address of the Root that serves as | ||||
| DODAGID for the main DODAG. It MUST be sent to a GUA or a ULA of | ||||
| either the ingress or the egress of the Segment, more below. If the | ||||
| 'K' Flag is present in the P-DAO, and unless the P-DAO does not reach | ||||
| it, the ingress of the Segment is the node that acknowledges the | ||||
| message, using a DAO-ACK that MUST be sent back to the address that | ||||
| serves as DODAGID for the main DODAG. | ||||
| 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 | ||||
| the RPL specification [RPL]; this is determined using the Segment | ||||
| Sequence information from the VIO as opposed to the Path Sequence | ||||
| from a TIO. Also, a Segment Lifetime of 0 in a VIO indicates that | ||||
| the projected route associated to the Segment is to be removed. | ||||
| There are two kinds of operation for the Projected Routes, the | ||||
| Storing Mode and the Non-Storing Mode. | ||||
| * The Non-Storing Mode is discussed in Section 7.3.2. A Non-Storing | ||||
| Mode P-DAO carries an SR-VIO with the loose list of Via Addresses | ||||
| that forms a source-routed Segment to the Track Egress. The | ||||
| recipient of the P-DAO is the Track Ingress; it MUST install a | ||||
| source-routed state to the Track Egress and reply to the Root | ||||
| directly using a DAO-ACK message if requested to. | ||||
| * The Storing Mode is discussed in Section 7.3.1. A Storing Mode | ||||
| P-DAO carries a SF-VIO with the strict list of Via Addresses from | ||||
| the ingress to the egress of the Segment in the data path order. | ||||
| The routers listed in the Via Addresses, except the egress, MUST | ||||
| install a routing state to the Target(s) via the next Via Address | ||||
| in the SF-VIO. In normal operations, the P-DAO is propagated | ||||
| along the chain of Via Routers from the egress router of the path | ||||
| till the ingress one, which confirms the installation to the Root | ||||
| with a DAO-ACK message. | ||||
| In case of a forwarding error along a Projected Route, an ICMP error | ||||
| is sent to the Root with a new Code "Error in Projected Route" (See | ||||
| Section 11.13). The Root can then modify or remove the Projected | ||||
| Route. The "Error in Projected Route" message has the same format as | ||||
| the "Destination Unreachable Message", as specified in RFC 4443 | ||||
| [RFC4443]. | ||||
| 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 | ||||
| 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 | ||||
| not reach. if a 6LoWPAN Routing Header (6LoRH) [RFC8138] is used to | ||||
| carry the IPv6 routing information in the outer header then that | ||||
| whole 6LoRH information SHOULD be present in the ICMP message. | ||||
| The sender and exact operation depend on the Mode and is described in | 6.1. Requesting a Track | |||
| Section 7.3.2 and Section 7.3.1 respectively. | ||||
| 7.1. Requesting a Track | 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. | ||||
| 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 | ||||
| Root to assign TrackIDs in that namespace while avoiding collisions, | ||||
| more in Section 6.2. | ||||
| A Node is free to ask the Root for a new Track for which it will be | The PDR signals the desired TrackID and the duration for which the | |||
| Ingress at any time. This is done with a PDR message, that indicates | Track should be established. Upon a PDR, the Root MAY install the | |||
| the desired TrackID and the duration for which the Track should be | Track as requested, in which case it answers with a PDR-ACK | |||
| established. Upon a PDR, the Root MAY install the necessary | indicating the granted Track Lifetime. All the Segments MUST be of a | |||
| Segments, in which case it answers with a PDR-ACK indicating the | same mode, either Storing or Non-Storing. All the Segments MUST be | |||
| granted Track Lifetime. All the Segments MUST be of a same mode, | created with the same TrackID and the same DODAGID signaled in the | |||
| either Storing or Non-Storing. All the Segments MUST be created with | P-DAO. | |||
| the same TrackID and the same DODAGID signaled in the P-DAO. | ||||
| The Root is free to design the Track as it wishes, and to change the | The Root designs the Track as it sees best, and updates / changes the | |||
| Segments overtime to serve the Track as needed, without notifying the | Segments overtime to serve the Track as needed. There is no | |||
| resquesting Node. The Segment Lifetime in the P-DAO messages does | notification to the requesting node when those changes happen. The | |||
| not need to be aligned to the Requested Lifetime in the PDR, or | Segment Lifetime in the P-DAO messages does not need to be aligned to | |||
| between P-DAO messages for different Segments. The Root may use | the Requested Lifetime in the PDR, or between P-DAO messages for | |||
| shorter lifetimes for the Segments and renew them faster than the | different Segments. The Root may use shorter lifetimes for the | |||
| Track is, or longer lifetimes in which case it will need to tear down | Segments and renew them faster than the Track is, or longer lifetimes | |||
| the Segments if the Track is not renewed. | in which case it will need to tear down the Segments if the Track is | |||
| not renewed. | ||||
| When the Track Lifetime that was returned in the PDR-ACK is close to | When the Track Lifetime that was returned in the PDR-ACK is close to | |||
| elapse, the resquesting Node needs to resend a PDR using the TrackID | elapse - vs. the trip time from the node to the Root, the requesting | |||
| in the PDR-ACK to extend the lifetime of the Track, else the Track | node SHOULD resend a PDR using the TrackID in the PDR-ACK to extend | |||
| will time out and the Root will tear down the whole structure. | the lifetime of the Track, else the Track will time out and the Root | |||
| 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 | |||
| resquesting 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. | |||
| 7.2. Identifying a Track | 6.2. 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 but does not have a concept of an administrative | routing topology, and multiple topologies can coexist in the same | |||
| distance, which exists in certain proprietary implementations to sort | network. The RPLInstanceID is tagged in the RPI of every packet to | |||
| out conflicts between multiple sources of routing information within | signal which topology the packet actually follows. | |||
| one routing topology. | ||||
| 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) Instance in conformance with the routing objectives in | (Global) RPL Instance in conformance with the routing objectives | |||
| that Instance. To achieve this, the Root MAY install an Storing- | in that Instance. | |||
| Mode P-Route along a path down the main Non-Storing Mode DODAG. | ||||
| This enables a loose source routing and reduces the size of the | ||||
| Routing Header, see Appendix A.1. | ||||
| When adding an Storing-Mode P-Route to the main RPL Instance, the | ||||
| Root MUST set the RPLInstanceID field of the P-DAO message (see | ||||
| section 6.4.1. of [RPL]) to the RPLInstanceID of the main DODAG, | ||||
| and MUST NOT use the DODAGID field. A Projected Route provides a | ||||
| longer match to the Target Address than the default route via the | ||||
| Root, so it is preferred. | ||||
| Once the Projected Route is installed, the intermediate nodes | To achieve this, the Root MAY install a Segment along a path down | |||
| listed in the SF-VIO after first one (i.e. The ingress) can be | the main Non-Storing Mode DODAG. This enables a loose source | |||
| elided from the RH in packets sent along the Segment signaled in | routing and reduces the size of the Routing Header, see | |||
| the P-DAO. The resulting loose source routing header indicates | Appendix A.1. The Root MAY also install a Track Leg across the | |||
| (one of) the Target(s) as the next entry after the ingress. | Main DODAG to complement the routing topology. | |||
| * The Root MAY also use P-DAO messages to install a specific (say, | When adding a P-Route to the RPL Main DODAG, the Root MUST set the | |||
| Traffic Engineered) path as a Serial or as a Complex Track, to a | RPLInstanceID field of the P-DAO Base Object (see section 6.4.1. | |||
| particular endpoint that is the Track Egress. In that case, the | of [RPL]) to the RPLInstanceID of the Main DODAG, and MUST NOT use | |||
| Root MUST install a Local RPL Instance (see section 5 of [RPL]), | the DODAGID field. A P-Route provides a longer match to the | |||
| and the Local RPLInstanceID is called TrackID. | Target Address than the default route via the Root, so it is | |||
| preferred. | ||||
| In that case, the TrackID MUST be unique for the Global Unique | * The Root MAY also use P-DAO messages to install a Track as an | |||
| IPv6 Address (GUA) or Unique-Local Address (ULA) of the Track | independent routing topology (say, Traffic Engineered) to achieve | |||
| Ingress that serves as DODAGID for the Track. The Track Ingress | particular routing characteristics from an Ingress to an Egress | |||
| owns the namespace of its TrackIDs, so it can pick any unused | Endpoints. To achieve this, the Root MUST set up a local RPL | |||
| value to request a new Track with a PDR. The Root is aware of all | Instance (see section 5 of [RPL]), and the Local RPLInstanceID | |||
| the active Tracks, so it can also pick any unused value to form | serves as TrackID. The TrackID MUST be unique for the IPv6 ULA or | |||
| Tracks without a PDR. To avoid a collision of the Root and the | GUA of the Track Ingress that serves as DODAGID for the Track. | |||
| Track Ingress picking the same value at the same time, it is | ||||
| RECOMMENDED that the Track Ingress starts allocating the ID value | ||||
| of the Local RPLInstanceID (see section 5.1. of [RPL]) used as | ||||
| TrackIDs with the value 0 incrementing, while the Root starts with | ||||
| 63 decrementing. | ||||
| 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. | 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 | ||||
| DODAGID. | ||||
| The Track Egress Address and the TrackID MUST be signaled in the | The P-DAO Base Object MUST indicate the tuple (DODAGID, TrackID) | |||
| P-DAO message as shown in Figure 1. | that identifies the Track as shown in Figure 3, and the P-RouteID | |||
| that identifies the P-Route MUST be signaled in the VIO as shown | ||||
| in Figure 9. | ||||
| 7.3. Installing a Track | 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 | ||||
| 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 | ||||
| delegated to the main Root, which can assign the TrackIDs for the | ||||
| Tracks it creates without collision. | ||||
| A Storing-Mode P-DAO contains an SF-VIO that signals the strict | With this specification, the Root is aware of all the active | |||
| sequence of consecutive nodes to form a segment between a segment | Tracks, so it can also pick any unused value to form Tracks | |||
| ingress and a segment egress (both included). It installs a route of | without a PDR. To avoid a collision of the Root and the Track | |||
| a higher precedence along the segment towards the Targets indicated | Ingress picking the same value at the same time, it is RECOMMENDED | |||
| in the Target Options. The segment is included in a DODAG indicated | that the Track Ingress starts allocating the ID value of the Local | |||
| by the P-DAO Base Object, that may be the one formed by the main RPL | RPLInstanceID (see section 5.1. of [RPL]) used as TrackIDs with | |||
| Instance, or a Track associated with a local RPL Instance. A Track | the value 0 incrementing, while the Root starts with 63 | |||
| Egress is signaled as a Target in the P-DAO, and as the last entry is | decrementing. | |||
| an SF-VIO of a last segment towards that Egress. | ||||
| A Non-Storing-Mode P-DAO signals a strict or loose sequence of nodes | 6.3. Installing a Track | |||
| between the Track Ingress (excluded) and a Track Egress (included). | ||||
| It installs a source-routed path of a higher precedence within the | ||||
| Track indicated by the P-DAO Base Object, towards the Targets | ||||
| indicated in the Target Options. The source-routed path requires a | ||||
| Source-Routing header which implies an encapsulation to add the SRH | ||||
| to an existing packet. | ||||
| The next entry in the sequence must be either a neighbor of the | A Serial Track can be installed by a single P-Route that signals the | |||
| previous entry, or reachable as a Target via another Projected Route, | sequence of consecutive nodes, either in Storing Mode as a single- | |||
| either Storing or Non-Storing. If it is reachable over a Storing | Segment Track, or in Non-Storing Mode as a single-Leg Track. A | |||
| Mode Projected Route, the next entry in the loose sequence is the | single-Leg Track can be installed as a loose Non-Storing Mode | |||
| Target of a previous segment and the ingress of a next segment; the | P-Route, in which case the next loose entry must recursively be | |||
| segments are associated with the same Track, which avoids the need of | reached over a Serial Track. | |||
| an encapsulation. Conversely, if it is reachable over a Non-Storing | ||||
| Mode Projected Route, the next loose source routed hop of the inner | ||||
| Track is a Target of a previous Track and the ingress of a next | ||||
| Track, which requires a de- and a re-encapsulation. | ||||
| A Serial Track is installed by a single Projected Routes that signals | A Complex Track can be installed as a collection of P-Routes with the | |||
| the sequence of consecutive nodes, either in Storing or Non-Storing | same DODAGID and Track ID. The Ingress of a Non-Storing Mode P-Route | |||
| Mode. If can be a loose Non-Storing Mode Projected Route, in which | is the owner and Root of the DODAGID. The Ingress of a Storing Mode | |||
| case the next loose entry must recursively be reached over a Serial | P-Route must be either the owner of the DODAGID, or a hop of a Leg of | |||
| the same Track. In the latter case, the Targets of the P-Route must | ||||
| include the next hop of the Leg if there is one, to ensure forwarding | ||||
| continuity. In the case of a Complex Track, each Segment is | ||||
| maintained independently and asynchronously by the Root, with its own | ||||
| lifetime that may be shorter, the same, or longer than that of the | ||||
| Track. | Track. | |||
| A Complex Track can be installed as a collection of Projected Routes | A route along a Track for which the TrackID is not the RPLInstanceID | |||
| with the same DODAGID and Track ID. The Ingress of a Non-Storing | of the Main DODAG MUST be installed with a higher precedence than the | |||
| Mode Projected Route must be the owner of the DODAGID. The Ingress | routes along the Main DODAG, meaning that: | |||
| of a Storing Mode Projected Route must be either the owner of the | ||||
| DODAGID, or the egress of a preceding Storing Mode Projected Route in | ||||
| the same Track. In the latter case, the Targets of the Projected | ||||
| Route must be Targets of the preceding Projected Route to ensure that | ||||
| they are visible from the track Ingress. | ||||
| 7.3.1. Storing-Mode P-Route | * Longest match MUST be the prime comparison for routing. | |||
| Profile 1 extends RPL operation in a Non-Storing Mode network with | * In case of equal length match, the route along the Track MUST be | |||
| Storing-Mode Projected Routes that install segments along the main | preferred vs. the one along the Main DODAG. | |||
| DODAG and enable to loose source routing between the Root and the | ||||
| targets. | ||||
| 7.3.1.1. Installing a Storing-Mode P-Route | * There SHOULD NOT be 2 different Tracks leading to the same Target | |||
| from same Ingress node, unless there's a policy for selecting | ||||
| which packets use which Track; such policy is out of scope. | ||||
| As illustrated in Figure 9, a P-DAO that carries a SF-VIO enables the | * A packet that was routed along a Track MUST NOT be routed along | |||
| Root to install a stateful route towards a collection of Targets | the main DODAG again; if the destination is not reachable as a | |||
| along a Segment between a Track Ingress and a Track Egress using a | neighbor by the node where the packet exits the Track then the | |||
| projected DAO Message. | packet MUST be dropped. | |||
| 6.3.1. Signaling a Projected Route | ||||
| 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 | ||||
| (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). | ||||
| Those Targets can be reached via a sequence of routers indicated in a | ||||
| VIO. | ||||
| 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 | ||||
| the RPL specification [RPL]; this is determined using the Segment | ||||
| Sequence information from the VIO as opposed to the Path Sequence | ||||
| from a TIO. Also, a Segment Lifetime of 0 in a VIO indicates that | ||||
| the P-Route associated to the Segment is to be removed. There are | ||||
| two Modes of operation for the P-Routes, the Storing and the Non- | ||||
| Storing Modes. | ||||
| A P-DAO message MUST be sent from the address of the Root that serves | ||||
| as DODAGID for the Main DODAG. It MUST contain either exactly one | ||||
| sequence of one or more RTOs followed one VIO, or any number of | ||||
| sequences of one or more RTOs followed by one or more TIOs. The | ||||
| former is the normal expression for this specification, where as the | ||||
| latter corresponds to the variation for lesser constrained | ||||
| environments described in Section 7.2. | ||||
| 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 | ||||
| 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 | ||||
| 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 | ||||
| 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 | ||||
| precedes the modified section. | ||||
| In Non-Storing Mode, as discussed in Section 6.3.3, the Root sends | ||||
| 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 | ||||
| on the installed path and forwarded in the reverse direction, | ||||
| 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 | ||||
| Track, and it generates the P-DAO-ACK when the installation is | ||||
| successful. | ||||
| 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 | ||||
| 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 that sends the acknowledgment. The exception to the rule is | ||||
| when an intermediate node in a Segment fails to forward a Storing | ||||
| 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 | ||||
| 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 | ||||
| Address, and a Via Address MUST NOT be present more than once, which | ||||
| would create a loop. | ||||
| 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 | ||||
| it with a RPL Rejection Status of "Error in VIO" in the DAO-ACK, see | ||||
| Section 10.14. | ||||
| Other errors than those discussed explicitely that prevent the | ||||
| installing the route are acknowledged with a RPL Rejection Status of | ||||
| "Unqualified Rejection" in the DAO-ACK. | ||||
| 6.3.2. Installing a Track Segment with a Storing Mode P-Route | ||||
| As illustrated in Figure 11, a Storing Mode P-DAO installs a route | ||||
| along the Segment signaled by the SM-VIO towards the Targets | ||||
| 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 | ||||
| by the RPL Main DODAG, or a Track associated with a local RPL | ||||
| Instance. | ||||
| ------+--------- | ------+--------- | |||
| | Internet | | Internet | |||
| | | | | |||
| +-----+ | +-----+ | |||
| | | Border Router | | | Border router | |||
| | | (RPL Root) | | | (RPL Root) | |||
| +-----+ | ^ | | +-----+ | ^ | | |||
| | | 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 From Root To Destination v | o o o o v | |||
| Figure 9: Projecting a route | Figure 11: 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 SF-VIO with the direct sequence of Via Addresses. The SF- | 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 SF-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. | |||
| In that P-DAO, the destination IP address matches the last Via | In that P-DAO, the destination IP address matches the last Via | |||
| Address in the SF-VIO. This is how the egress recognizes its role. | Address in the SM-VIO. This is how the Egress recognizes its role. | |||
| In a similar fashion, the ingress node recognizes its role as it | In a similar fashion, the Segment Ingress node recognizes its role as | |||
| matches first Via Address in the SF-VIO. | it matches first Via Address in the SM-VIO. | |||
| The Egress node of the Segment is the only node in the path that does | The Egress node of the Segment is the only node in the path that does | |||
| not install a route in response to the P-DAO; it is expected to be | not install a route in response to the P-DAO; it is expected to be | |||
| already able to route to the Target(s) on its own. If one of the | already able to route to the Target(s) based on its existing tables. | |||
| Targets is not known, the node MUST answer to the Root with a | If one of the Targets is not known, the node MUST answer to the Root | |||
| negative DAO-ACK listing the Target(s) that could not be located | with a DAO-ACK listing the unreachable Target(s) in an RTO and a | |||
| (suggested status 10 to be confirmed by IANA). | rejection status of "Unreachable Target". | |||
| If the egress node can reach all the Targets, then it forwards the | If the Egress node can reach all the Targets, then it forwards the | |||
| P-DAO with unchanged content to its loose predecessor in the Segment | P-DAO with unchanged content to its predecessor in the Segment as | |||
| as indicated in the list of Via Information options, and recursively | indicated in the list of Via Information options, and recursively the | |||
| the message is propagated unchanged along the sequence of routers | message is propagated unchanged along the sequence of routers | |||
| indicated in the P-DAO, but in the reverse order, from egress to | indicated in the P-DAO, but in the reverse order, from Egress to | |||
| ingress. | Ingress. | |||
| The address of the predecessor to be used as destination of the | The address of the predecessor to be used as destination of the | |||
| propagated DAO message is found in the Via Address the precedes the | propagated DAO message is found in the Via Address the precedes the | |||
| one that contain the address of the propagating node, which is used | one that contain the address of the propagating node, which is used | |||
| as source of the message. | as source of the message. | |||
| Upon receiving a propagated DAO, all except the Egress Router MUST | Upon receiving a propagated DAO, all except the Egress router MUST | |||
| install a route towards the DAO Target(s) via their successor in the | install a route towards the DAO Target(s) via their successor in the | |||
| SF-VIO. The router MAY install additional routes towards the VIA | SM-VIO. A router that cannot store the routes to all the Targets in | |||
| Addresses that are the SF-VIO after the next one, if any, but in case | a P-DAO MUST reject the P-DAO by sending a DAO-ACK to the Root with a | |||
| of a conflict or a lack of resource, the route(s) to the Target(s) | Rejection Status of "Out of Resources" as opposed to forwarding the | |||
| have precedence. | DAO to its predecessor in the list. The router MAY install | |||
| additional routes towards the VIA Addresses that are the SM-VIO after | ||||
| self, if any, but in case of a conflict or a lack of resource, the | ||||
| route(s) to the Target(s) are the ones that must be installed in | ||||
| priority. | ||||
| If a router cannot reach its predecessor in the SF-VIO, the router | If a router cannot reach its predecessor in the SM-VIO, the router | |||
| MUST answer to the Root with a negative DAO-ACK indicating the | MUST send the DAO-ACK to the Root with a Rejection Status of | |||
| successor that is unreachable (suggested status 11 to be confirmed by | "Predecessor Unreachable". | |||
| IANA). | ||||
| 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. | |||
| 7.3.1.2. Maintaining and Tearing Down a Storing-Mode P-Route | 6.3.3. Installing a Track Leg with a Non-Storing Mode P-Route | |||
| A Segment Lifetime of 0 in a VIO is used to clean up the state. The | ||||
| P-DAO is forwarded as described above, but the DAO is interpreted as | ||||
| a No-Path DAO and results in cleaning up existing state as opposed to | ||||
| refreshing an existing one or installing a new one. | ||||
| Note that the continuity of the segment may be broken; this happens | ||||
| if the bidirectional connectivity between contiguous hops of the | ||||
| segment is lost. In that case the Root needs to send the projected | ||||
| DAO to one or more intermediate node(s) as opposed to the egress | ||||
| node, indicating a portion of segment that is being replaced or | ||||
| cleaned up. At the extreme, the P-DAO updates only one node, in | ||||
| which case it contains only one VIO. | ||||
| In case of a forwarding error along an Storing-Mode P-Route, the node | ||||
| that fails to forward SHOULD send an ICMP error with a code "Error in | ||||
| Projected Route" to the Root. Failure to do so may result in packet | ||||
| loss and wasted resources along the Projected Route that is broken. | ||||
| 7.3.2. Non-Storing-Mode P-Route | ||||
| As illustrated in Figure 10, a P-DAO that carries an SR-VIO enables | As illustrated in Figure 12, a Non-Storing Mode P-DAO installs a | |||
| the Root to install a source-routed path from a Track Ingress towards | source-routed path within the Track indicated by the P-DAO Base | |||
| a Target along the main DODAG. | Object, towards the Targets indicated in the Target Options. The | |||
| 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 | ||||
| sent to the Track Ingress which creates a tunnel associated with the | ||||
| Track, and connected routes over the tunnel to the Targets in the | ||||
| RTO. The tunnel encapsulation MUST incorporate a routing header via | ||||
| 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 | ||||
| verbatim by the Track Ingress when it encapsulates a packet to | ||||
| forward it over the Track. | ||||
| ------+--------- | ------+--------- | |||
| | Internet | | Internet | |||
| | | | | |||
| +-----+ | +-----+ | |||
| | | Border Router | | | Border router | |||
| | | (RPL Root) | | | (RPL Root) | |||
| +-----+ | P ^ ACK | +-----+ | P ^ ACK | |||
| | Track | DAO | | | Track | DAO | | |||
| 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 Track X | o o o o o o o o X Egress X | |||
| o o o o o Egress | o o o o o | | |||
| Target | ||||
| o o o o | o o LLN o o | |||
| o o o o | o o o o | |||
| destination | ||||
| LLN | Figure 12: Projecting a Non-Storing Route | |||
| Figure 10: Projecting a Non-Storing Route | 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, | ||||
| 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 | ||||
| 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 | ||||
| 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. | ||||
| When forwarding a packet to a destination for which the router | If the next entry in the loose sequence is reachable over a Storing | |||
| determines that routing happens via a Track Target, the router | Mode P-Route, it MUST be the Target of a Segment and the Ingress of a | |||
| inserts the Source Routing Header in the packet with the final | next segment, both already setup; the segments are associated with | |||
| destination at the Track Egress. | the same Track, which avoids the need of an additional encapsulation. | |||
| For instance, in Section 3.4.1.3, Segments A==>B-to-C and | ||||
| C==>D==>E-to-F must be installed with Storing Mode P-DAO messages 1 | ||||
| and 2 before the Track A-->C-->E-to-F that joins them can be | ||||
| installed with Non-Storing Mode P-DAO 3. | ||||
| In order to signal the Segment, the router encapsulates the packet | Conversely, if it is reachable over a Non-Storing Mode P-Route, the | |||
| with an IP-in-IP header and a Routing Header as follows: | 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 | ||||
| requires a de- and a re-encapsulation when switching the outer Tracks | ||||
| that join the loose hops. This is examplified in Section 3.4.2.3 | ||||
| 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 | ||||
| are subject to double IP-in-IP encapsulation. | ||||
| * In the uncompressed form the source of the packet is this router, | 6.4. Tearing Down a P-Route | |||
| the destination is the first Via Address in the SR-VIO, and the RH | ||||
| is a Source Routing Header (SRH) [RFC6554] that contains the list | A P-DAO with a lifetime of 0 is interpreted as a No-Path DAO and | |||
| of the remaining Via Addresses terminating by the Track Egress. | 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 | ||||
| must tear down all the Track Segments and Legs that compose it one by | ||||
| one. | ||||
| Since the state about a Leg of a Track is located only 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 | ||||
| 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 | ||||
| omitted. Upon 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 | ||||
| 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 Sequence. The Via Addresses in the SM-VIO indicates the | ||||
| 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 | ||||
| totally removed, or a sequence of one or more nodes that have been | ||||
| bypassed by a Segment update. | ||||
| 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. | ||||
| This results in cleaning up the existing Segment state if any, as | ||||
| opposed to refreshing an existing one or installing a new one. | ||||
| 6.5. Maintaining a Track | ||||
| Repathing a Track Segment or Leg may cause jitter and packet | ||||
| misordering. For critical flows that require timely and/or in-order | ||||
| delivery, it might be necessary to deploy the PAREO functions | ||||
| [RAW-ARCHI] over a highly redundant Track.. This specification | ||||
| allows 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 | ||||
| to the operation itself. This is ensured by installing the new | ||||
| 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 | ||||
| the section have already installed their own. The disabled section | ||||
| is removed when the packets in-flight are forwarded along the new | ||||
| section as well. | ||||
| 6.5.1. Maintaining a Track Segment | ||||
| To modify a section of a Segment between a first node and a second, | ||||
| downstream node (which can be the Ingress and Egress), while | ||||
| 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 | ||||
| of the Segment. The SM-VIO indicates the TrackID and the P-RouteID | ||||
| 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, | ||||
| 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. | ||||
| When the state is updated in an intermediate node, that node might | ||||
| still receive packets that were in flight from the Ingress to self | ||||
| over the old section of the Segment. Since the remainder of the | ||||
| Segment is already updated, the packets are forwarded along the new | ||||
| version of the Segment from that node on. | ||||
| After a reasonable time to enable the deprecated sections to empty, | ||||
| the root tears down the remaining section(s) of the old segments are | ||||
| teared down as described in Section 6.4. | ||||
| 6.5.2. Maintaining a Track Leg | ||||
| This specification allows to add Legs to a Track by sending a Non- | ||||
| Storing Mode P-DAO to the Ingress associated to the same TrackID, and | ||||
| a new Segment ID. If the Leg is loose, then the Segments that join | ||||
| the hops must be created first. It makes sense to add a new Leg | ||||
| before removing one that is misbehaving, and switch to the new Leg | ||||
| before removing the old. | ||||
| 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 | ||||
| Segment Sequence, and the new complete listy of hops in the NSM-VIO. | ||||
| 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 before the NSM-VIO for the new Leg is issued. | ||||
| 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 | ||||
| a reasonable time to enable the deprecated Segments to empty, the | ||||
| root tears down those Segments as described in Section 6.4. | ||||
| 6.6. Encapsulating and Forwarding Along a Track | ||||
| When forwarding a packet to a destination for which a router | ||||
| determines that routing happens via a Track for which it is Ingress, | ||||
| the router must encapsulated the packet using IP-in-IP to add the | ||||
| 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 | ||||
| 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 | ||||
| RPL Main DODAG, e.g., by setting the "T" flag [TURN-ON_RFC8138] in | ||||
| the RPL configuration option. | ||||
| 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 | ||||
| Option Header that contains the RPL Packet Information (RPI) as | ||||
| follows: | ||||
| * In the uncompressed form the source of the packet is the address | ||||
| that this router uses as DODAGID for the Track, the destination is | ||||
| the first Via Address in the NSM-VIO, and the RH is a Source | ||||
| Routing Header (SRH) [RFC6554] that contains the list of the | ||||
| remaining Via Addresses terminating by the Track Egress. | ||||
| * The preferred alternate in a network where 6LoWPAN Header | * The preferred alternate in a network where 6LoWPAN Header | |||
| Compression [RFC6282] is used is to leverage "IPv6 over Low-Power | Compression [RFC6282] is used is to leverage "IPv6 over Low-Power | |||
| Wireless Personal Area Network (6LoWPAN) Paging Dispatch" | Wireless Personal Area Network (6LoWPAN) Paging Dispatch" | |||
| [RFC8025] to compress the RPL artifacts as indicated in [RFC8138]. | [RFC8025] to compress the RPL artifacts as indicated in [RFC8138]. | |||
| In that case, the source routed header is the exact copy of the | In that case, the source routed header is the exact copy of the | |||
| (chain of) SRH-6LoRH found in the SR-VIO, also terminating by the | (chain of) SRH-6LoRH found in the NSM-VIO, also terminating by the | |||
| Track Egress. The RPI-6LoRH is appended next, followed by an IP- | Track Egress. The RPI-6LoRH is appended next, followed by an IP- | |||
| in-IP 6LoRH Header that indicates the Ingress Router in the | in-IP 6LoRH Header that indicates the Ingress router in the | |||
| Encapsulator Address field, see as a similar case Figure 20 of | Encapsulator Address field, see as a similar case Figure 20 of | |||
| [TURN-ON_RFC8138]. | [TURN-ON_RFC8138]. | |||
| In the case of a loose source-routed path, there MUST be either a | To signal the Track in the packet, this specification leverages the | |||
| segment for the same Track to the loose next hop, on which case the | RPL Forwarding model follows: | |||
| packet is forwarded to the next hop along that segment, a common | ||||
| neighbor with the loose next hop, on which case the packet is | ||||
| forwarded to that neighbor, or another Track to the loose next hop | ||||
| for which this node or a neighbor is Ingress. In the latter case, | ||||
| another encapsulation takes place and the process possibly recurses; | ||||
| otherwise the packet is dropped. | ||||
| In case of a forwarding error along a Source Route path, 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 described | ||||
| in section 11.2.2.3. of [RPL]. Upon this message, the encapsulating | ||||
| node SHOULD stop using the source route path for a period of time and | ||||
| it SHOULD send an ICMP message with a Code "Error in Projected Route" | ||||
| to the Root. Failure to follow these steps may result in packet loss | ||||
| and wasted resources along the source route path that is broken. | ||||
| 7.4. Forwarding Along a Track | ||||
| This draft leverages the RPL Forwarding model follows: | ||||
| * In the data packets, the Track DODAGID and the TrackID MUST be | * In the data packets, the Track DODAGID and the TrackID MUST be | |||
| 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 7.4. | in Section 6.2. | |||
| * This draft conforms the principles of [USEofRPLinfo] with regards | * This draft conforms to the principles of [RFC9008] with regards to | |||
| to packet forwarding and encapsulation along a Track. | packet forwarding and encapsulation along a Track, as follows: | |||
| - In that case, the Track is the DODAG, the Track Ingress is the | - With this draft, the Track is a RPL DODAG. From the | |||
| Root, and the Track Egress is a RAL, and neighbors of the Track | perspective of that DODAG, the Track Ingress is the Root, the | |||
| Egress that can be reached via the Track are RULs. The | Track Egress is a RPL-Aware 6LR, and neighbors of the Track | |||
| encapsulation rules in [USEofRPLinfo] apply. | Egress that can be reached via the Track, but are external to | |||
| it, are external destinations and treated as RPL-Unaware Leaves | ||||
| (RULs). The encapsulation rules in [RFC9008] apply. | ||||
| - If the Track Ingress is the originator of the packet and the | - If the Track Ingress is the originator of the packet and the | |||
| Track Egress is the destination of the packet, there is no need | Track Egress is the destination of the packet, there is no need | |||
| for an encapsulation. | for an encapsulation. | |||
| - So the Track Ingress must encapsulate the traffic that it did | - So the Track Ingress must encapsulate the traffic that it did | |||
| not originate, and add an RPI in any fashion. | not originate, and add an RPI. | |||
| A packet that is being routed over the RPL Instance associated to | A packet that is being routed over the RPL Instance associated to | |||
| a first Non-Storing Mode Track MAY be placed (encapsulated) in a | a first Non-Storing Mode Track MAY be placed (encapsulated) in a | |||
| second Track to cover one loose hop of the first Track. On the | second Track to cover one loose hop of the first Track as | |||
| other hand, a Storing Mode Track must be strict and a packet that | discussed in more details Section 3.4.2.3. On the other hand, a | |||
| it placed in a Storing Mode Track MUST follow that Track till the | Storing Mode Track must be strict and a packet that it placed in a | |||
| Track Egress. | Storing Mode Track MUST follow that Track till the Track Egress. | |||
| When a Track Egress extracts a packet from a Track (decapsulates | ||||
| the packet), the Destination of the inner packet MUST be either | ||||
| this node or a direct neighbor, or a Target of another Segment of | ||||
| the same Track for which this node is ingress, otherwise the | ||||
| packet MUST be dropped. | ||||
| 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 | ||||
| compression per [RFC8138] is determined by whether it is used in the | ||||
| main instance, e.g., by setting the "T" flag [TURN-ON_RFC8138] in the | ||||
| RPL configuration option. | ||||
| 8. Profiles | ||||
| 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. | ||||
| This sections described profiles that can be implemented separately | ||||
| and can be used to discriminate what an implementation can and cannot | ||||
| do. | ||||
| Profile 0 Profile 0 is the legacy support of [RPL] Non-Storing Mode. | ||||
| It provides the minimal common functionality that must be | ||||
| implemented as a prerequisite to all the Track-supporting | ||||
| profiles. The other Profiles extend Profile 0 with selected | ||||
| capabilities that this specification introduces on top. | ||||
| Profile 1 (Storing-Mode P-Route Segments along the main DODAG) Profi | ||||
| le 1 does not create new paths; it combines Storing and Non- | ||||
| Storing Modes to balance the size of the routing header in the | ||||
| packet and the amount of state in the intermediate routers in a | ||||
| Non-Storing Mode RPL DODAG. | ||||
| Profile 2 (Non-Storing-Mode P-Route Segments along the main DODAG) P | ||||
| rofile 2 extends Profile 0 with Strict Source-Routing Non-Storing- | ||||
| Mode Projected Routes along the main DODAG. Profile 2 provides | ||||
| the same capability to compress the SRH in packets down the main | ||||
| DODAG as Profile 1, but it require an encapsulation, in order to | ||||
| insert an additional SRH between the loose source routing hops. | ||||
| Profile 3 Profile 3 and above build Tracks that do not necessarily | ||||
| follow the main DODAG. In order to form the best path possible, | ||||
| those Profiles require the support of Sibling Information Option | ||||
| to inform the Root of additional possible hops. Profile 3 extends | ||||
| Profile 1 with additional Storing-Mode Projected Routes that | ||||
| install segments that do not follow the main DODAG. If the | ||||
| Segment Ingress (in the SF-VIO) is the same as the IPv6 Address of | ||||
| the Track Ingress (in the projected DAO base Object), the P-DAO | ||||
| creates an implicit Track between the Segment Ingress and the | ||||
| Segment Egress. | ||||
| Profile 4 Profile 4 extends Profile 2 with Strict Source-Routing | ||||
| Non-Storing-Mode Projected Routes to form Tracks inside the main | ||||
| DODAG. A Track is formed as one or more strict source source | ||||
| routed paths between the Root that is the Track Ingress, and the | ||||
| Track Egress that is the last node | ||||
| Profile 5 Profile 5 Combines Profile 4 with Profile 1 and enables to | ||||
| loose source routing between the Ingress and the Egress of the | ||||
| Track. As in Profile 1, Storing-Mode Projected Routes connect the | ||||
| dots in the loose source route. | ||||
| Profile 6 Profile 6 Combines Profile 4 with Profile 2 and also | ||||
| enables to loose source routing between the Ingress and the Egress | ||||
| of the Track. | ||||
| 9. Example Track Signaling | ||||
| The remainder of the section provides an example of how a Track can | ||||
| be signaled | ||||
| ===> F | ||||
| A ===> B ===> C ===> D===> E < | ||||
| ===> G | ||||
| Figure 11: Reference Track | ||||
| A is Track ingress, E is track Egress. C is stitching point. F and | ||||
| G are E's neighbors, "external" to the Track, and reachable from A | ||||
| over the Track A->E. | ||||
| In a general manner we want: | ||||
| * P-DAO 1 signals C==>B==>E | ||||
| * P-DAO 2 signals A==>B==>C | ||||
| * P-DAO 3 signals F and G via the A==>E Track | ||||
| P-DAO 3 being loose, it can only be non-storing. Note that since the | ||||
| Root is always the ingress of a Track, and all SR-VIOs are now Track, | ||||
| the Root being signaled in the DAO base object can now be elided in | ||||
| the VIA list in SR-VIO. This enables the construction by the main | ||||
| root of the RFC 8138 optimized SRH-6LoRH in the SR-VIO, to be placed | ||||
| as is in the packet by the Root. | ||||
| 9.1. Using Storing-Mode Segments | ||||
| A==>B==>C and C==>D==>E are segments of a same Track. Note that the | ||||
| storing mode signaling imposes strict continuity in a segment. One | ||||
| benefit of strict routing is that loops are avoided along the Track. | ||||
| 9.1.1. Stitched Segments | ||||
| Storing-Mode P-DAO 1 and 2 are sent to E and C, as follows: | ||||
| +===============+==============+==============+ | ||||
| | Field | P-DAO 1 to E | P-DAO 2 to C | | ||||
| +===============+==============+==============+ | ||||
| | Mode | Storing | Storing | | ||||
| +---------------+--------------+--------------+ | ||||
| | Track Ingress | A | A | | ||||
| +---------------+--------------+--------------+ | ||||
| | TrackID | (A, 129) | (A, 129) | | ||||
| +---------------+--------------+--------------+ | ||||
| | VIO | C, D, E | A, B, C | | ||||
| +---------------+--------------+--------------+ | ||||
| | Targets | E, F, G | E, F, G | | ||||
| +---------------+--------------+--------------+ | ||||
| Table 1: P-DAO Messages | ||||
| As a result the RIBs are set as follows: | ||||
| +======+=============+=========+=============+==========+ | ||||
| | Node | Destination | Origin | Next Hop(s) | TrackID | | ||||
| +======+=============+=========+=============+==========+ | ||||
| | E | F, G | P-DAO 1 | Neighbor | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | D | E | P-DAO 1 | Neighbor | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | " | F, G | P-DAO 1 | E | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | C | D | P-DAO 1 | Neighbor | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | " | E, F, G | P-DAO 1 | D | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | B | C | P-DAO 2 | Neighbor | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | " | E, F, G | P-DAO 2 | C | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | A | B | P-DAO 2 | Neighbor | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | A | E, F, G | P-DAO 2 | B | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| Table 2: RIB setting | ||||
| E recognizes that it is the Track Egress because it is both a Target | ||||
| and a Segment Endpoint. | ||||
| Packets originated by A to E, F, or G, do not require an | ||||
| encapsulation. In any fashion, the outer headers of the packets that | ||||
| are forwarded along the Track have the following settings: | ||||
| +========+===================+===================+================+ | ||||
| | Header | IPv6 Source Addr. | IPv6 Dest. Addr. | TrackID in RPI | | ||||
| +========+===================+===================+================+ | ||||
| | Outer | A | E, F or G | (A, 129) | | ||||
| +--------+-------------------+-------------------+----------------+ | ||||
| | Inner | X != A | E, F or G | N/A | | ||||
| +--------+-------------------+-------------------+----------------+ | ||||
| Table 3: Packet header settings | ||||
| 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 1: C forwards to D and D forwards to E. | ||||
| * From Neighbor Cache Entry: C delivers the packet to F. | ||||
| 9.1.2. External routes | ||||
| Storing-Mode P-DAO 1 and 2, and Non-Storing-Mode P-DAO 3, are sent to | ||||
| E, C and A, respectively, as follows: | ||||
| +===============+==============+==============+==============+ | ||||
| | | P-DAO 1 to E | P-DAO 2 to C | P-DAO 3 to A | | ||||
| +===============+==============+==============+==============+ | ||||
| | Mode | Storing | Storing | Non-Storing | | ||||
| +---------------+--------------+--------------+--------------+ | ||||
| | Track Ingress | A | A | A | | ||||
| +---------------+--------------+--------------+--------------+ | ||||
| | TrackID | (A, 129) | (A, 129) | (A, 129) | | ||||
| +---------------+--------------+--------------+--------------+ | ||||
| | VIO | C, D, E | A, B, C | E | | ||||
| +---------------+--------------+--------------+--------------+ | ||||
| | Targets | E | E | F, G | | ||||
| +---------------+--------------+--------------+--------------+ | ||||
| Table 4: P-DAO Messages | ||||
| As a result the RIBs are set as follows: | ||||
| +======+=============+=========+=============+==========+ | ||||
| | Node | Destination | Origin | Next Hop(s) | TrackID | | ||||
| +======+=============+=========+=============+==========+ | ||||
| | E | F, G | P-DAO 1 | Neighbor | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | D | E | P-DAO 1 | Neighbor | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | C | D | P-DAO 1 | Neighbor | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | " | E | P-DAO 1 | D | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | B | C | P-DAO 2 | Neighbor | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | " | E | P-DAO 2 | C | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | A | B | P-DAO 2 | Neighbor | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | A | E | P-DAO 2 | B | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | A | F, G | P-DAO 3 | E | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| Table 5: RIB setting | ||||
| Packets from A to E do not require an encapsulation. In any fashion, | ||||
| the outer headers of the packets that are forwarded along the Track | ||||
| have the following settings: | ||||
| +========+===================+====================+================+ | ||||
| | Header | IPv6 Source Addr. | IPv6 Dest. Addr. | TrackID in RPI | | ||||
| +========+===================+====================+================+ | ||||
| | Outer | A | E | (A, 129) | | ||||
| +--------+-------------------+--------------------+----------------+ | ||||
| | Inner | X | E (X != A), F or G | N/A | | ||||
| +--------+-------------------+--------------------+----------------+ | ||||
| Table 6: Packet header settings | ||||
| As an example, say that A has a packet for F. Using the RIB above: | ||||
| * From P-DAO 3: A encapsulates the packet the Track signaled by | ||||
| P-DAO 3, with the outer header above. Now the packet destination | ||||
| is E. | ||||
| * 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 | ||||
| the packet. | ||||
| * From Neighbor Cache Entry: C delivers packets to F or G. | ||||
| 9.1.3. Segment Routing | ||||
| Storing-Mode P-DAO 1 and 2, and Non-Storing-Mode P-DAO 3, are sent to | ||||
| E, B and A, respectively, as follows: | ||||
| +===============+==============+==============+==============+ | ||||
| | | P-DAO 1 to E | P-DAO 2 to B | P-DAO 3 to A | | ||||
| +===============+==============+==============+==============+ | ||||
| | Mode | Storing | Storing | Non-Storing | | ||||
| +---------------+--------------+--------------+--------------+ | ||||
| | Track Ingress | A | A | A | | ||||
| +---------------+--------------+--------------+--------------+ | ||||
| | TrackID | (A, 129) | (A, 129) | (A, 129) | | ||||
| +---------------+--------------+--------------+--------------+ | ||||
| | VIO | C, D, E | A, B | C, E | | ||||
| +---------------+--------------+--------------+--------------+ | ||||
| | Targets | E | B, C | F, G | | ||||
| +---------------+--------------+--------------+--------------+ | ||||
| Table 7: P-DAO Messages | ||||
| As a result the RIBs are set as follows: | ||||
| +======+=============+=========+=============+==========+ | The forwarding of a packet along a track will fail if the Track | |||
| | Node | Destination | Origin | Next Hop(s) | TrackID | | continuity is broken,e.g.: | |||
| +======+=============+=========+=============+==========+ | ||||
| | E | F, G | P-DAO 1 | Neighbor | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | D | E | P-DAO 1 | Neighbor | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | C | D | P-DAO 1 | Neighbor | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | " | E | P-DAO 1 | D | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | B | C | P-DAO 2 | Neighbor | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | A | B | P-DAO 2 | Neighbor | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | " | C | P-DAO 2 | B | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | " | E, F, G | P-DAO 3 | C, E | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| Table 8: RIB setting | * In the case of a strict path along a Segment, if the next strict | |||
| hop is not reachable, the packet is dropped. | ||||
| Packets from A to E do not require an encapsulation, but carry a SRH | * In the case of a loose source-routed path, when the loose next hop | |||
| via C. In any fashion, the outer headers of the packets that are | is not a neighbor, there must be a Segment of the same Track to | |||
| forwarded along the Track have the following settings: | that loose next hop. When that is the case the packet is | |||
| forwarded to the next hop along that segment, or a common neighbor | ||||
| with the loose next hop, on which case the packet is forwarded to | ||||
| that neighbor, or another Track to the loose next hop for which | ||||
| this node or a neighbor is Ingress; in the last case, another | ||||
| encapsulation takes place and the process possibly recurses; | ||||
| otherwise the packet is dropped. | ||||
| +========+===================+====================+================+ | * When a Track Egress extracts a packet from a Track (decapsulates | |||
| | Header | IPv6 Source Addr. | IPv6 Dest. Addr. | TrackID in RPI | | the packet), the destination of the inner packet must be either | |||
| +========+===================+====================+================+ | this node or a direct neighbor, or a Target of another Segment of | |||
| | Outer | A | C till C then E | (A, 129) | | the same Track for which this node is Ingress, otherwise the | |||
| +--------+-------------------+--------------------+----------------+ | packet MUST be dropped. | |||
| | Inner | X | E (X != A), F or G | N/A | | ||||
| +--------+-------------------+--------------------+----------------+ | ||||
| Table 9: Packet header settings | 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 | ||||
| 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 | ||||
| updating the broken Segment and/or Tracks, and in the case of a | ||||
| 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 | ||||
| being removed (See Section 6.5). | ||||
| As an example, say that A has a packet for F. Using the RIB above: | 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 | ||||
| "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 | ||||
| encapsulating node SHOULD stop using the source route path for a | ||||
| 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 | ||||
| the Root. Failure to follow these steps may result in packet loss | ||||
| and wasted resources along the source route path that is broken. | ||||
| * From P-DAO 3: A encapsulates the packet the Track signaled by | Either way, the ICMP message MUST be throttled in case of consecutive | |||
| P-DAO 3, with the outer header above. Now the destination in the | occurrences. It MUST be sourced at the ULA or a GUA that is used in | |||
| IPv6 Header is C, and a SRH signals the final destination is E. | this Track for the source node, so the Root can establish where the | |||
| error happened. | ||||
| * From P-DAO 2: A forwards to B and B forwards to C. | 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 | ||||
| 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 | ||||
| not reach. if a 6LoWPAN Routing Header (6LoRH) [RFC8138] is used to | ||||
| carry the IPv6 routing information in the outer header then that | ||||
| whole 6LoRH information SHOULD be present in the ICMP message. | ||||
| * From P-DAO 3: C processes the SRH and sets the destination in the | 6.7. Compression of the RPL Artifacts | |||
| IPv6 Header to E. | ||||
| * From P-DAO 1: C forwards to D and D forwards to E; E decapsulates | When using [RFC8138] in the Main DODAG operated in Non-Storing Mode | |||
| the packet. | in a 6LoWPAN LLN, a typical packet that circulates in the Main DODAG | |||
| is formatted as shown in Figure 13, representing the case where : | ||||
| * From the Neighbor Cache Entry: C delivers packets to F or G. | +-+ ... -+- ... -+- ... -+-+- ... +-+-+-+ ... +-+-+ ... -+ ... +-... | |||
| |11110001| SRH- | RPI- | IP-in-IP | NH=1 |11110CPP| UDP | UDP | ||||
| | Page 1 | 6LoRH | 6LoRH | 6LoRH |LOWPAN_IPHC| UDP | hdr |Payld | ||||
| +-+ ... -+- ... -+- ... -+-+- ... +-+-+-+ ... +-+-+ ... -+ ... +-... | ||||
| <= RFC 6282 => | ||||
| <================ Inner packet ==================== = = | ||||
| 9.2. Using Non-Storing-Mode joining Tracks | Figure 13: A Packet as Forwarded along the Main DODAG | |||
| A==>B==>C and C==>D==>E are Tracks expressed as non-storing P-DAOs. | Since there is no page switch between the encapsulated packet and the | |||
| encapsulation, the first octet of the compressed packet that acts as | ||||
| page selector is actually removed at encapsulation, so the inner | ||||
| packet used in the descriptions below start with the SRH-6LoRH, and | ||||
| is verbatim the packet represented in Figure 13 from the second octet | ||||
| on. | ||||
| 9.2.1. Stitched Tracks | 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 | ||||
| is an IP-in-IP 6LoRH Header; in that header, the encapsulator | ||||
| address, which maps to the IPv6 source address in the uncompressed | ||||
| 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 | ||||
| and using the DODAGID of the Main DODAG as compression reference. If | ||||
| the address is compressed to 2 bytes, the resulting value for the | ||||
| Length field shown in Figure 14 is 3, meaning that the SRH-6LoRH as a | ||||
| whole is 5-octets long. | ||||
| Non-Storing Mode P-DAO 1 and 2 are sent to C and A respectively, as | 0 1 2 | |||
| follows: | 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 | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- ... -+ | ||||
| +===============+==============+==============+ | Figure 14: The IP-in-IP 6LoRH Header | |||
| | | P-DAO 1 to C | P-DAO 2 to A | | ||||
| +===============+==============+==============+ | ||||
| | Mode | Non-Storing | Non-Storing | | ||||
| +---------------+--------------+--------------+ | ||||
| | Track Ingress | C | A | | ||||
| +---------------+--------------+--------------+ | ||||
| | TrackID | (C, 131) | (A, 129) | | ||||
| +---------------+--------------+--------------+ | ||||
| | VIO | D, E | B, C | | ||||
| +---------------+--------------+--------------+ | ||||
| | Targets | F, G | E, F, G | | ||||
| +---------------+--------------+--------------+ | ||||
| Table 10: P-DAO Messages | 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- | ||||
| RPI-6LoRH Header, as illustrated in Figure 5, using the TrackID as | ||||
| RPLInstanceID. Combined with the IP-in-IP 6LoRH Header, this allows | ||||
| to identify the Track without ambiguity. | ||||
| As a result the RIBs are set as follows: | 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 | ||||
| the selected Track Leg. | ||||
| +======+=============+=========+=============+==========+ | 0 1 | |||
| | Node | Destination | Origin | Next Hop(s) | TrackID | | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 .. .. .. | |||
| +======+=============+=========+=============+==========+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- -+- -+ ... +- -+ | |||
| | E | F, G | ND | Neighbor | Any | | |1|0|0| Size |6LoRH Type 0..4| Hop1 | Hop2 | | HopN | | |||
| +------+-------------+---------+-------------+----------+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- -+- -+ ... +- -+ | |||
| | D | E | ND | Neighbor | Any | | Where N = Size + 1 | |||
| +------+-------------+---------+-------------+----------+ | ||||
| | C | D | ND | Neighbor | Any | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | " | E, F, G | P-DAO 1 | D, E | (C, 131) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | B | C | ND | Neighbor | Any | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | A | B | ND | Neighbor | Any | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | " | C, E, F, G | P-DAO 2 | B, C | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| Table 11: RIB setting | Figure 15: The SRH 6LoRH Header | |||
| Packets from A to E, F and G do not require an encapsulation, though | The format of the resulting encapsulated packet in [RFC8138] | |||
| it is preferred that A encapsulates and C decapsulates. Either way, | compressed form is illustrated in Figure 16: | |||
| they carry a SRH via B and C, and C needs to encapsulate to E, F, or | ||||
| G to add an SRH via D and E. The encapsulating headers of packets | ||||
| that are forwarded along the Track between C and E have the following | ||||
| settings: | ||||
| +========+===================+===================+================+ | +-+ ... -+-+-+- ... -+-+-+- ... -+-+-+-+-+- ... +-+-+-+-+-+-+- ... | |||
| | Header | IPv6 Source Addr. | IPv6 Dest. Addr. | TrackID in RPI | | | Page 1 | SRH-6LoRH | P-RPI-6LoRH | IP-in-IP 6LoRH | Inner Packet | |||
| +========+===================+===================+================+ | +-+ ... -+-+-+- ... -+-+-+- ... -+-+-+-+-+- ... +-+-+-+-+-+-+- ... | |||
| | Outer | C | D till D then E | (C, 131) | | ||||
| +--------+-------------------+-------------------+----------------+ | ||||
| | Inner | X | E, F, or G | N/A | | ||||
| +--------+-------------------+-------------------+----------------+ | ||||
| Table 12: Packet header settings | Signals : Loose Hops : TrackID : Track DODAGID : | |||
| As an example, say that A has a packet for F. Using the RIB above: | Figure 16: A Packet as Forwarded along a Track | |||
| * From P-DAO 2: A encapsulates the packet with destination of F in | 7. Lesser Constrained Variations | |||
| the Track signaled by P-DAO 2. The outer header has source A, | ||||
| destination B, an SRH that indicates C as the next loose hop, and | ||||
| a RPI indicating a TrackId of 129 from A's namespace. | ||||
| * From the SRH: Packets forwarded by B have source A, destination C | 7.1. Storing Mode Main DODAG | |||
| , a consumed SRH, and a RPI indicating a TrackId of 129 from A's | ||||
| namespace. C decapsulates. | ||||
| * From P-DAO 1: C encapsulates the packet with destination of F in | This specification expects that the Main DODAG is operated in Non- | |||
| the Track signaled by P-DAO 1. The outer header has source C, | Storing Mode. The reasons for that limitation are mostly related to | |||
| destination D, an SRH that indicates E as the next loose hop, and | LLN operations, power and spectrum conservation: | |||
| a RPI indicating a TrackId of 131 from C's namespace. E | ||||
| decapsulates. | ||||
| 9.2.2. External routes | * In Non-Storing Mode The Root already possesses the DODAG topology, | |||
| so the additional topological information is reduced to the | ||||
| siblings. | ||||
| Non-Storing Mode P-DAO 1 is sent to C and Non-Storing Mode P-DAO 2 | * The downwards routes are updated with unicast messages to the | |||
| and 3 are sent A, as follows: | Root, which ensures that the Root can reach back to the LLN nodes | |||
| after a repair faster than in the case of Storing Mode. Also the | ||||
| Root can control the use of the path diversity in the DODAG to | ||||
| reach to the LLN nodes. For both reasons, Non-Storing Mode | ||||
| provides better capabilities for the Root to maintain the | ||||
| P-Routes. | ||||
| +===============+==============+==============+==============+ | * When the Main DODAG is operated in Non-Storing Mode, P-Routes | |||
| | | P-DAO 1 to C | P-DAO 2 to A | P-DAO 3 to A | | enable loose Source Routing, which is only an advantage in that | |||
| +===============+==============+==============+==============+ | mode. Storing Mode does not use Source Routing Headers, and does | |||
| | Mode | Non-Storing | Non-Storing | Non-Storing | | not derive the same benefits from this capability. | |||
| +---------------+--------------+--------------+--------------+ | ||||
| | Track Ingress | C | A | A | | ||||
| +---------------+--------------+--------------+--------------+ | ||||
| | TrackID | (C, 131) | (A, 129) | (A, 141) | | ||||
| +---------------+--------------+--------------+--------------+ | ||||
| | VIO | D, E | B, C | E | | ||||
| +---------------+--------------+--------------+--------------+ | ||||
| | Targets | E | E | F, G | | ||||
| +---------------+--------------+--------------+--------------+ | ||||
| Table 13: P-DAO Messages | On the other hand, since RPL is a Layer-3 routing protocol, its | |||
| applicability extends beyond LLNs to a generic IP network. RPL | ||||
| requires fewer resources than alternative IGPs like OSPF, ISIS, | ||||
| EIGRP, BABEL or RIP at the expense of a route stretch vs. the | ||||
| shortest path routes to a destination that those protocols compute. | ||||
| P-Routes add the capability to install shortest and/or constrained | ||||
| routes to special destinations such as discussed in section A.9.4. of | ||||
| the ANIMA ACP [RFC8994]. | ||||
| As a result the RIBs are set as follows: | In a powered and wired network, when enough memory to store the | |||
| needed routes is available, the RPL Storing Mode proposes a better | ||||
| 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 | ||||
| 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. | ||||
| +======+=============+=========+=============+==========+ | This section specifies the additions that are needed to support | |||
| | Node | Destination | Origin | Next Hop(s) | TrackID | | Projected Routes when the Main DODAG is operated in Storing Mode. As | |||
| +======+=============+=========+=============+==========+ | long as the RPI can be processed adequately by the dataplane, the | |||
| | E | F, G | ND | Neighbor | Any | | changes to this specification are limited to the DAO message. The | |||
| +------+-------------+---------+-------------+----------+ | Track structure, routes and forwarding operations remain the same. | |||
| | D | E | ND | Neighbor | Any | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | C | D | ND | Neighbor | Any | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | " | E | P-DAO 1 | D, E | (C, 131) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | B | C | ND | Neighbor | Any | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | A | B | ND | Neighbor | Any | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | " | C, E | P-DAO 2 | B, C | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | " | F, G | P-DAO 3 | E | (A, 141) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| Table 14: RIB setting | In Storing Mode, the Root misses the Child to Parent relationship | |||
| that forms the Main DODAG, as well as the sibling information. To | ||||
| provide that knowledge the nodes in the network MUST send additional | ||||
| DAO messages that are unicast to the Root as Non-Storing DAO messages | ||||
| are. | ||||
| The encapsulating headers of packets that are forwarded along the | In the DAO message, the originating router advertises a set of | |||
| Track between C and E have the following settings: | neighbor nodes using Sibling Information Options (SIO)s, regardless | |||
| of the relative position in the DODAG of the advertised node vs. this | ||||
| router. | ||||
| +========+===================+===================+================+ | The DAO message MUST be formed as follows: | |||
| | Header | IPv6 Source Addr. | IPv6 Dest. Addr. | TrackID in RPI | | ||||
| +========+===================+===================+================+ | ||||
| | Outer | C | D till D then E | (C, 131) | | ||||
| +--------+-------------------+-------------------+----------------+ | ||||
| | Middle | A | E | (A, 141) | | ||||
| +--------+-------------------+-------------------+----------------+ | ||||
| | Inner | X | E, F or G | N/A | | ||||
| +--------+-------------------+-------------------+----------------+ | ||||
| Table 15: Packet header settings | * The originating router is identified by the source address of the | |||
| DAO. That address MUST be the one that this router registers to | ||||
| neighbor routers so the Root can correlate the DAOs from those | ||||
| routers when they advertise this router as their neighbor. The | ||||
| DAO contains one or more sequences of one Transit Information | ||||
| Option and one or more Sibling Information Options. There is no | ||||
| RPL Target Option so the Root is not confused into adding a | ||||
| Storing Mode route to the Target. | ||||
| As an example, say that A has a packet for F. Using the RIB above: | * The TIO is formed as in Storing Mode, and the Parent Address is | |||
| not present. The Path Sequence and Path Lifetime fields are | ||||
| aligned with the values used in the Address Registration of the | ||||
| node(s) advertised in the SIO, as explained in Section 9.1. of | ||||
| [RFC9010]. Having similar values in all nodes allows to factorise | ||||
| the TIO for multiple SIOs as done with [RPL]. | ||||
| * From P-DAO 3: A encapsulates the packet with destination of F in | * The TIO is followed by one or more SIOs that provide an address | |||
| the Track signaled by P-DAO 3. The outer header has source A, | (ULA or GUA) of the advertised neighbor node. | |||
| destination E, and a RPI indicating a TrackId of 141 from A's | ||||
| namespace. This recurses with: | ||||
| * From P-DAO 2: A encapsulates the packet with destination of E in | But the RPL routing information headers may not be supported on all | |||
| the Track signaled by P-DAO 2. The outer header has source A, | type of routed network infrastructures, especially not in high-speed | |||
| destination B, an SRH that indicates C as the next loose hop, and | routers. When the RPI is not be supported in the dataplane, there | |||
| a RPI indicating a TrackId of 129 from A's namespace. | 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 | ||||
| DODAG and the Ingress node that encapsulates is not the Root. The | ||||
| routes along the Tracks are alternate routes to those available along | ||||
| the Main DODAG. They MAY conflict with routes to children and MUST | ||||
| 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 | ||||
| reinjected in the Main DODAG. | ||||
| * From the SRH: Packets forwarded by B have source A, destination C | 7.2. A Track as a Full DODAG | |||
| , a consumed SRH, and a RPI indicating a TrackId of 129 from A's | ||||
| namespace. C decapsulates. | ||||
| * From P-DAO 1: C encapsulates the packet with destination of E in | This specification builds parallel or crossing Track Legs as opposed | |||
| the Track signaled by P-DAO 1. The outer header has source C, | to a more complex DODAG with interconnections at any place desirable. | |||
| destination D, an SRH that indicates E as the next loose hop, and | The reason for that limitation is related to constrained node | |||
| a RPI indicating a TrackId of 131 from C's namespace. E | operations, and capability to store large amount of topological | |||
| decapsulates. | information and compute complex paths: | |||
| 9.2.3. Segment Routing | * With this specification, the node in the LLN has no topological | |||
| awareness, and does not need to maintain dynamic information about | ||||
| the link quality and availability. | ||||
| Non-Storing Mode P-DAO 1 is sent to C and Non-Storing Mode P-DAO 2 | * The Root has a complete topological information and statistical | |||
| and 3 are sent A, as follows: | metrics that allow it or its PCE to perform a global optimization | |||
| of all Tracks in its DODAG. Based on that information, the Root | ||||
| computes the Track Leg and predigest the source route paths. | ||||
| +===============+==============+==============+==============+ | * The node merely selects one of the proposed paths and applies the | |||
| | | P-DAO 1 to C | P-DAO 2 to A | P-DAO 3 to A | | associated pre-computed routing header in the encapsulation. This | |||
| +===============+==============+==============+==============+ | alleviates both the complexity of computing a path and the | |||
| | Mode | Non-Storing | Non-Storing | Non-Storing | | compressed form of the routing header. | |||
| +---------------+--------------+--------------+--------------+ | ||||
| | Track Ingress | C | A | A | | ||||
| +---------------+--------------+--------------+--------------+ | ||||
| | TrackID | (C, 131) | (A, 129) | (A, 141) | | ||||
| +---------------+--------------+--------------+--------------+ | ||||
| | VIO | D, E | B | C, E | | ||||
| +---------------+--------------+--------------+--------------+ | ||||
| | Targets | | C | F, G | | ||||
| +---------------+--------------+--------------+--------------+ | ||||
| Table 16: P-DAO Messages | The "Reliable and Available Wireless (RAW) Architecture/Framework" | |||
| [RAW-ARCHI] actually expects the PSE at the Track Ingress to react to | ||||
| changes in the forwarding conditions along the Track, and reroute | ||||
| packets to maintain the required degree of reliability. To achieve | ||||
| this, the PSE need the full richness of a DODAG to form any path that | ||||
| could make meet the SLAs. | ||||
| As a result the RIBs are set as follows: | This section specifies the additions that are needed to turn the | |||
| Track into a full DODAG and enable the main Root to provide the | ||||
| necessary topological information to the Track Ingress. The | ||||
| expectation is that the metrics that the PSE uses are of an order | ||||
| other than that of the PCE, because of the difference of time scale | ||||
| between routing and forwarding, mor e in [RAW-ARCHI]. It follows | ||||
| that the PSE will learn the metrics it needs from an alternate | ||||
| source, e.g., OAM frames. | ||||
| +======+=============+=========+=============+==========+ | To pass the topological information to the Ingress, the Root uses a | |||
| | Node | Destination | Origin | Next Hop(s) | TrackID | | P-DAO messages that contains sequences of Target and Transit | |||
| +======+=============+=========+=============+==========+ | Information options that collectively represent the Track, expressed | |||
| | E | F, G | ND | Neighbor | Any | | in the same fashion as in classical Non-Storing Mode. The difference | |||
| +------+-------------+---------+-------------+----------+ | as that the Root is the source as opposed to the destination, and can | |||
| | D | E | ND | Neighbor | Any | | report information on many Targets, possibly the full Track, with one | |||
| +------+-------------+---------+-------------+----------+ | P-DAO. | |||
| | C | D | ND | Neighbor | Any | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | " | E | P-DAO 1 | D, E | (C, 131) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | B | C | ND | Neighbor | Any | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | A | B | ND | Neighbor | Any | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | " | C | P-DAO 2 | B, C | (A, 129) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| | " | E, F, G | P-DAO 3 | C, E | (A, 141) | | ||||
| +------+-------------+---------+-------------+----------+ | ||||
| Table 17: RIB setting | Note that the Path Sequence and Lifetime in the TIO are selected by | |||
| the Root, and that the Target/Transit information tupples in the | ||||
| P-DAO are not those received by the Root in the DAO messages about | ||||
| the said Targets. The Track may follow sibling routes and does not | ||||
| need to be congruent with the Main DODAG. | ||||
| The encapsulating headers of packets that are forwarded along the | 8. Profiles | |||
| Track between A and B have the following settings: | ||||
| +========+===================+===================+================+ | This document provides a set of tools that may or may not be needed | |||
| | Header | IPv6 Source Addr. | IPv6 Dest. Addr. | TrackID in RPI | | by an implementation depending on the type of application it serves. | |||
| +========+===================+===================+================+ | This sections described profiles that can be implemented separately | |||
| | Outer | A | B till D then E | (A, 129) | | and can be used to discriminate what an implementation can and cannot | |||
| +--------+-------------------+-------------------+----------------+ | do. This section describes profiles that enable to implement only a | |||
| | Middle | A | C | (A, 141) | | portion of this specification to meet a particular use case. | |||
| +--------+-------------------+-------------------+----------------+ | ||||
| | Inner | X | E, F or G | N/A | | ||||
| +--------+-------------------+-------------------+----------------+ | ||||
| Table 18: Packet header settings | 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 | ||||
| Instance in the data plane. Profile 3 and above leverage Local RPL | ||||
| Instances to build arbitrary Tracks rooted at the Track Ingress and | ||||
| using its namespace for TrackID. | ||||
| The encapsulating headers of packets that are forwarded along the | Profiles 0 and 1 are REQUIRED by all implementations that may be used | |||
| Track between B and C have the following settings: | 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 | ||||
| RECOMMENDED in high speed / wired environment to enable traffic | ||||
| Engineering and network automation. All the other profile / | ||||
| environment combinations are OPTIONAL. | ||||
| +========+===================+===================+================+ | Profile 0 Profile 0 is the Legacy support of [RPL] Non-Storing Mode, | |||
| | Header | IPv6 Source Addr. | IPv6 Dest. Addr. | TrackID in RPI | | with default routing Northwards (up) and strict source routing | |||
| +========+===================+===================+================+ | Southwards (down the main DOAG). It provides the minimal common | |||
| | Outer | A | C | (A, 141) | | functionality that must be implemented as a prerequisite to all | |||
| +--------+-------------------+-------------------+----------------+ | the Track-supporting profiles. The other Profiles extend Profile | |||
| | Inner | X | E, F or G | N/A | | 0 with selected capabilities that this specification introduces on | |||
| +--------+-------------------+-------------------+----------------+ | top. | |||
| Table 19: Packet header settings | Profile 1 (Storing Mode P-Route Segments along the Main DODAG) Profi | |||
| le 1 does not create new paths; compared to Profile 0, it combines | ||||
| Storing and Non-Storing Modes to balance the size of the Routing | ||||
| Header in the packet and the amount of state in the intermediate | ||||
| routers in a Non-Storing Mode RPL DODAG. | ||||
| The encapsulating headers of packets that are forwarded along the | Profile 2 (Non-Storing Mode P-Route Segments along the Main DODAG) P | |||
| Track between C and E have the following settings: | rofile 2 extends Profile 0 with Strict Source-Routing Non-Storing | |||
| Mode P-Routes along the Main DODAG, which is the same as Profile 1 | ||||
| but using NSM VIOs as opposed to SM VIOs. Profile 2 provides the | ||||
| same capability to compress the SRH in packets down the Main DODAG | ||||
| as Profile 1, but it require an encapsulation, in order to insert | ||||
| an additional SRH between the loose source routing hops. In that | ||||
| case, the Tracks MUST be installed as subTracks of the Main DODAG, | ||||
| the main RPL Instance MUST be used as TrackID, and the Ingress | ||||
| node that encapsulates is not the Root as it does not own the | ||||
| DODAGID. | ||||
| +========+===================+===================+================+ | Profile 3 In order to form the best path possible, those Profiles | |||
| | Header | IPv6 Source Addr. | IPv6 Dest. Addr. | TrackID in RPI | | require the support of Sibling Information Option to inform the | |||
| +========+===================+===================+================+ | Root of additional possible hops. Profile 3 extends Profile 1 | |||
| | Outer | C | D till D then E | (C, 131) | | with additional Storing Mode P-Routes that install segments that | |||
| +--------+-------------------+-------------------+----------------+ | do not follow the Main DODAG. If the Segment Ingress (in the SM- | |||
| | Middle | A | E | (A, 141) | | VIO) is the same as the IPv6 Address of the Track Ingress (in the | |||
| +--------+-------------------+-------------------+----------------+ | projected DAO base Object), the P-DAO creates an implicit Track | |||
| | Inner | X | E, F or G | N/A | | between the Segment Ingress and the Segment Egress. | |||
| +--------+-------------------+-------------------+----------------+ | ||||
| Table 20: Packet header settings | Profile 4 Profile 4 extends Profile 2 with Strict Source-Routing | |||
| Non-Storing Mode P-Routes to form East-West Tracks that are inside | ||||
| the Main DODAG but do not necessarily follow it. A Track is | ||||
| formed as one or more strict source source routed paths between | ||||
| the Root that is the Track Ingress, and the Track Egress that is | ||||
| the last node. | ||||
| As an example, say that A has a packet for F. Using the RIB above: | Profile 5 Profile 5 Combines Profile 4 with Profile 1 and enables to | |||
| loose source routing between the Ingress and the Egress of the | ||||
| Track. As in Profile 1, Storing Mode P-Routes connect the dots in | ||||
| the loose source route. | ||||
| * From P-DAO 3: A encapsulates the packet with destination of F in | Profile 6 Profile 6 Combines Profile 4 with Profile 2 and also | |||
| the Track signaled by P-DAO 3. The outer header has source A, | enables to loose source routing between the Ingress and the Egress | |||
| destination C, an SRH that indicates E as the next loose hop, and | of the Track. | |||
| a RPI indicating a TrackId of 141 from A's namespace. This | ||||
| recurses with: | ||||
| * From P-DAO 2: A encapsulates the packet with destination of C in | Profile 7 Profile 7 implements profile 5 in a Main DODAG that is | |||
| the Track signaled by P-DAO 2. The outer header has source A, | operated in Storing Mode as presented in Section 7.1. As in | |||
| destination B, and a RPI indicating a TrackId of 129 from A's | Profile 1 and 2, the TrackID is the RPLInstanceID of the Main | |||
| namespace. B decapsulates forwards to C based on a sibling | DODAG. Longest match rules decide whether a packet is sent along | |||
| connected route. | the Main DODAG or rerouted in a track. | |||
| * From the SRH: C consumes the SRH and makes the destination E. | Profile 8 Profile 8 is offered in preparation of the RAW work, and | |||
| for use cases where an arbitrary node in the network can afford | ||||
| the same code complexity as the RPL Root in a traditional | ||||
| deployment. It offers a full DODAG visibility to the Track | ||||
| Ingress as specified in Section 7.2 in a Non-Storing Mode Main | ||||
| DODAG. | ||||
| * From P-DAO 1: C encapsulates the packet with destination of E in | Profile 9 Profile 9 combines profiles 7 and 8, operating the Track | |||
| the Track signaled by P-DAO 1. The outer header has source C, | as a full DODAG within a Storing Mode Main DODAG, using only the | |||
| destination D, an SRH that indicates E as the next loose hop, and | Main DODAG RPLInstanceID as TrackID. | |||
| a RPI indicating a TrackId of 131 from C's namespace. E | ||||
| decapsulates. | ||||
| 10. Security Considerations | 9. 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 41, line 32 ¶ | skipping to change at page 60, line 43 ¶ | |||
| 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. | |||
| 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. | |||
| 11. IANA Considerations | This specification suggests some validation of the VIO to prevent | |||
| basic loops by avoiding that a node appears twice. But that is only | ||||
| a minimal protection. Arguably, an attacker tha can inject P-DAOs | ||||
| can reroute any traffic and deplete critical resources such as | ||||
| spectrum and battery in the LLN rapidly. | ||||
| 11.1. New Elective 6LoWPAN Routing Header Type | 10. IANA Considerations | |||
| 10.1. New 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 | | |||
| +=======+=============+===============+ | +===============+=============+===============+ | |||
| | 7 | P-RPI-6LoRH | This document | | | 8 (Suggested) | P-RPI-6LoRH | This document | | |||
| +-------+-------------+---------------+ | +---------------+-------------+---------------+ | |||
| Table 21: New Elective 6LoWPAN | Table 21: New Elective 6LoWPAN Routing | |||
| Routing Header Type | Header Type | |||
| 11.2. New Critical 6LoWPAN Routing Header Type | 10.2. New 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 | | |||
| +=======+=============+===============+ | +===============+=============+===============+ | |||
| | 7 | P-RPI-6LoRH | This document | | | 8 (Suggested) | P-RPI-6LoRH | This document | | |||
| +-------+-------------+---------------+ | +---------------+-------------+---------------+ | |||
| Table 22: New Critical 6LoWPAN | Table 22: New Critical 6LoWPAN Routing | |||
| Routing Header Type | Header Type | |||
| 11.3. New Subregistry For The RPL Option Flags | 10.3. New 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 2, under the "Routing Protocol for | Flags field, as detailed in Figure 4, under the "Routing Protocol for | |||
| Low Power and Lossy Networks (RPL)" registry. The bits are indexed | Low Power and Lossy Networks (RPL)" registry. The bits are indexed | |||
| from 0 (leftmost) to 7. Each bit is tracked with the following | from 0 (leftmost) to 7. 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) | |||
| * 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 26: | |||
| +============+======================+===============+ | +===============+======================+===============+ | |||
| | 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 | Projected-Route (P) | This document | | | 3 (Suggested) | Projected-Route (P) | This document | | |||
| +------------+----------------------+---------------+ | +---------------+----------------------+---------------+ | |||
| Table 23: Initial PDR Flags | Table 23: Initial PDR Flags | |||
| 11.4. New RPL Control Codes | 10.4. New 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 24: | |||
| +======+=============================+===============+ | +==================+=============================+===============+ | |||
| | Code | Description | Reference | | | Code | Description | Reference | | |||
| +======+=============================+===============+ | +==================+=============================+===============+ | |||
| | 0x09 | Projected DAO Request (PDR) | This document | | | 0x09 (Suggested) | Projected DAO Request (PDR) | This document | | |||
| +------+-----------------------------+---------------+ | +------------------+-----------------------------+---------------+ | |||
| | 0x0A | PDR-ACK | This document | | | 0x0A (Suggested) | PDR-ACK | This document | | |||
| +------+-----------------------------+---------------+ | +------------------+-----------------------------+---------------+ | |||
| Table 24: New RPL Control Codes | Table 24: New RPL Control Codes | |||
| 11.5. New RPL Control Message Options | 10.5. New 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 25: | |||
| +=======+============================+===============+ | +==================+=============================+===============+ | |||
| | Value | Meaning | Reference | | | Value | Meaning | Reference | | |||
| +=======+============================+===============+ | +==================+=============================+===============+ | |||
| | 0x0B | Stateful VIO (SF-VIO) | This document | | | 0x0E (Suggested) | Stateful VIO (SM-VIO) | This document | | |||
| +-------+----------------------------+---------------+ | +------------------+-----------------------------+---------------+ | |||
| | 0x0C | Source-Routed VIO (SR-VIO) | This document | | | 0x0F (Suggested) | Source-Routed VIO (NSM-VIO) | This document | | |||
| +-------+----------------------------+---------------+ | +------------------+-----------------------------+---------------+ | |||
| | 0x0D | Sibling Information option | This document | | | 0x10 (Suggested) | Sibling Information option | This document | | |||
| +-------+----------------------------+---------------+ | +------------------+-----------------------------+---------------+ | |||
| Table 25: RPL Control Message Options | Table 25: RPL Control Message Options | |||
| 11.6. SubRegistry for the Projected DAO Request Flags | 10.6. 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 26: | |||
| skipping to change at page 44, line 16 ¶ | skipping to change at page 63, line 31 ¶ | |||
| | 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 26: Initial PDR Flags | |||
| 11.7. SubRegistry for the PDR-ACK Flags | 10.7. 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. | |||
| 11.8. Subregistry for the PDR-ACK Acceptance Status Values | 10.8. 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 27: | |||
| +-------+------------------------+---------------+ | +-------+------------------------+---------------+ | |||
| | 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 27: Acceptance values of the PDR-ACK Status | |||
| 11.9. Subregistry for the PDR-ACK Rejection Status Values | 10.9. 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 28: | |||
| +-------+-----------------------+---------------+ | +-------+-----------------------+---------------+ | |||
| | Value | Meaning | Reference | | | Value | Meaning | Reference | | |||
| +-------+-----------------------+---------------+ | +-------+-----------------------+---------------+ | |||
| | 0 | Unqualified rejection | This document | | | 0 | Unqualified Rejection | This document | | |||
| +-------+-----------------------+---------------+ | ||||
| | 1 | Transient Failure | This document | | ||||
| +-------+-----------------------+---------------+ | +-------+-----------------------+---------------+ | |||
| Table 28: Rejection values of the PDR-ACK Status | Table 28: Rejection values of the PDR-ACK Status | |||
| 11.10. SubRegistry for the Via Information Options Flags | 10.10. 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. | |||
| 11.11. SubRegistry for the Sibling Information Option Flags | 10.11. 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 29: | |||
| +============+===================================+===============+ | +===============+========================+===========+ | |||
| | Bit number | Capability description | Reference | | | Bit number | Capability description | Reference | | |||
| +============+===================================+===============+ | +===============+========================+===========+ | |||
| | 0 | Connectivity is bidirectional (B) | This document | | | 0 (Suggested) | "D" flag: Sibling in | This | | |||
| +------------+-----------------------------------+---------------+ | | | same DODAG as Self | document | | |||
| +---------------+------------------------+-----------+ | ||||
| Table 29: Initial SIO Flags | Table 29: Initial SIO Flags | |||
| 11.12. New Destination Advertisement Object Flag | 10.12. New 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 3.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 30: New destination Advertisement Object | |||
| (DAO) Flag | (DAO) Flag | |||
| 11.13. Error in Projected Route ICMPv6 Code | 10.13. 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 Projected Route. This ICMPv6 error | cannot be forwarded along a P-Route. | |||
| message is "Error in Projected 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 Projected Route", with a suggested code value of 8, to be | in P-Route", with a suggested code value of 8, to be confirmed by | |||
| confirmed by IANA. | IANA. | |||
| 12. Acknowledgments | 10.14. New RPL Rejection Status values | |||
| This specification updates the Subregistry for the "RPL Rejection | ||||
| Status" values under the RPL registry, as follows: | ||||
| +---------------+-------------------------+-----------+ | ||||
| | Value | Meaning | Reference | | ||||
| +---------------+-------------------------+-----------+ | ||||
| | 2 (Suggested) | Out of Resources | THIS RFC | | ||||
| +---------------+-------------------------+-----------+ | ||||
| | 3 (Suggested) | Error in VIO | THIS RFC | | ||||
| +---------------+-------------------------+-----------+ | ||||
| | 4 (Suggested) | Predecessor Unreachable | THIS RFC | | ||||
| +---------------+-------------------------+-----------+ | ||||
| | 5 (Suggested) | Unreachable Target | THIS RFC | | ||||
| +---------------+-------------------------+-----------+ | ||||
| | 6..63 | Unassigned | | | ||||
| +---------------+-------------------------+-----------+ | ||||
| Table 31: Rejection values of the RPL Status | ||||
| 11. 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 ideas | Pylakutty, and Patrick Wetterwald for their contributions to the | |||
| developed here. | ideas developed here. Many thanks to Dominique Barthel and SVR Anand | |||
| for their global contribution to 6TiSCH, RAW and this document, as | ||||
| well as text suggestions that were incorporated, and to Michael | ||||
| Richardson for his useful recommendations based on his global view of | ||||
| the system. Also special thanks Toerless Eckert for his deep review, | ||||
| with many excellent suggestions that improved the readability and | ||||
| well as the content of the specification. | ||||
| 13. Normative References | 12. Normative References | |||
| [INT-ARCHI] | ||||
| Braden, R., Ed., "Requirements for Internet Hosts - | ||||
| Communication Layers", STD 3, RFC 1122, | ||||
| DOI 10.17487/RFC1122, October 1989, | ||||
| <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, | |||
| <https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC4443] Conta, A., Deering, S., and M. Gupta, Ed., "Internet | [RFC4443] Conta, A., Deering, S., and M. Gupta, Ed., "Internet | |||
| Control Message Protocol (ICMPv6) for the Internet | Control Message Protocol (ICMPv6) for the Internet | |||
| Protocol Version 6 (IPv6) Specification", STD 89, | Protocol Version 6 (IPv6) Specification", STD 89, | |||
| RFC 4443, DOI 10.17487/RFC4443, March 2006, | RFC 4443, DOI 10.17487/RFC4443, March 2006, | |||
| <https://www.rfc-editor.org/info/rfc4443>. | <https://www.rfc-editor.org/info/rfc4443>. | |||
| [RFC4655] Farrel, A., Vasseur, J.-P., and J. Ash, "A Path | ||||
| Computation Element (PCE)-Based Architecture", RFC 4655, | ||||
| DOI 10.17487/RFC4655, August 2006, | ||||
| <https://www.rfc-editor.org/info/rfc4655>. | ||||
| [RFC5551] Gellens, R., Ed., "Lemonade Notifications Architecture", | ||||
| RFC 5551, DOI 10.17487/RFC5551, August 2009, | ||||
| <https://www.rfc-editor.org/info/rfc5551>. | ||||
| [RFC6282] Hui, J., Ed. and P. Thubert, "Compression Format for IPv6 | [RFC6282] Hui, J., Ed. and P. Thubert, "Compression Format for IPv6 | |||
| Datagrams over IEEE 802.15.4-Based Networks", RFC 6282, | Datagrams over IEEE 802.15.4-Based Networks", RFC 6282, | |||
| DOI 10.17487/RFC6282, September 2011, | DOI 10.17487/RFC6282, September 2011, | |||
| <https://www.rfc-editor.org/info/rfc6282>. | <https://www.rfc-editor.org/info/rfc6282>. | |||
| [RPL] Winter, T., Ed., Thubert, P., Ed., Brandt, A., Hui, J., | [RPL] Winter, T., Ed., Thubert, P., Ed., Brandt, A., Hui, J., | |||
| Kelsey, R., Levis, P., Pister, K., Struik, R., Vasseur, | Kelsey, R., Levis, P., Pister, K., Struik, R., Vasseur, | |||
| JP., and R. Alexander, "RPL: IPv6 Routing Protocol for | JP., and R. Alexander, "RPL: IPv6 Routing Protocol for | |||
| Low-Power and Lossy Networks", RFC 6550, | Low-Power and Lossy Networks", RFC 6550, | |||
| DOI 10.17487/RFC6550, March 2012, | DOI 10.17487/RFC6550, March 2012, | |||
| skipping to change at page 47, line 49 ¶ | skipping to change at page 68, line 10 ¶ | |||
| [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>. | |||
| 14. Informative References | 13. Informative References | |||
| [6LoWPAN] Montenegro, G., Kushalnagar, N., Hui, J., and D. Culler, | ||||
| "Transmission of IPv6 Packets over IEEE 802.15.4 | ||||
| Networks", RFC 4944, DOI 10.17487/RFC4944, September 2007, | ||||
| <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>. | |||
| [RFC6997] Goyal, M., Ed., Baccelli, E., Philipp, M., Brandt, A., and | [RFC6997] Goyal, M., Ed., Baccelli, E., Philipp, M., Brandt, A., and | |||
| J. Martocci, "Reactive Discovery of Point-to-Point Routes | J. Martocci, "Reactive Discovery of Point-to-Point Routes | |||
| in Low-Power and Lossy Networks", RFC 6997, | in Low-Power and Lossy Networks", RFC 6997, | |||
| DOI 10.17487/RFC6997, August 2013, | DOI 10.17487/RFC6997, August 2013, | |||
| <https://www.rfc-editor.org/info/rfc6997>. | <https://www.rfc-editor.org/info/rfc6997>. | |||
| skipping to change at page 48, line 30 ¶ | skipping to change at page 68, line 42 ¶ | |||
| [6TiSCH-ARCHI] | [6TiSCH-ARCHI] | |||
| Thubert, P., Ed., "An Architecture for IPv6 over the Time- | Thubert, P., Ed., "An Architecture for IPv6 over the Time- | |||
| Slotted Channel Hopping Mode of IEEE 802.15.4 (6TiSCH)", | Slotted Channel Hopping Mode of IEEE 802.15.4 (6TiSCH)", | |||
| RFC 9030, DOI 10.17487/RFC9030, May 2021, | RFC 9030, DOI 10.17487/RFC9030, May 2021, | |||
| <https://www.rfc-editor.org/info/rfc9030>. | <https://www.rfc-editor.org/info/rfc9030>. | |||
| [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-00, | Progress, Internet-Draft, draft-ietf-raw-architecture-01, | |||
| 12 July 2021, <https://datatracker.ietf.org/doc/html/ | 28 July 2021, <https://datatracker.ietf.org/doc/html/ | |||
| draft-ietf-raw-architecture-00>. | draft-ietf-raw-architecture-01>. | |||
| [USE-CASES] | ||||
| Papadopoulos, G. Z., Thubert, P., Theoleyre, F., and C. J. | ||||
| Bernardos, "RAW use cases", Work in Progress, Internet- | ||||
| Draft, draft-ietf-raw-use-cases-02, 12 July 2021, | ||||
| <https://datatracker.ietf.org/doc/html/draft-ietf-raw-use- | ||||
| cases-02>. | ||||
| [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>. | |||
| [RFC8655] Finn, N., Thubert, P., Varga, B., and J. Farkas, | ||||
| "Deterministic Networking Architecture", RFC 8655, | ||||
| DOI 10.17487/RFC8655, October 2019, | ||||
| <https://www.rfc-editor.org/info/rfc8655>. | ||||
| [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, | [RFC8138] Thubert, P., Ed., Bormann, C., Toutain, L., and R. Cragie, | |||
| "IPv6 over Low-Power Wireless Personal Area Network | "IPv6 over Low-Power Wireless Personal Area Network | |||
| (6LoWPAN) Routing Header", RFC 8138, DOI 10.17487/RFC8138, | (6LoWPAN) Routing Header", RFC 8138, DOI 10.17487/RFC8138, | |||
| April 2017, <https://www.rfc-editor.org/info/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>. | |||
| [USEofRPLinfo] | [RFC8402] Filsfils, C., Ed., Previdi, S., Ed., Ginsberg, L., | |||
| Robles, M.I., Richardson, M., and P. Thubert, "Using RPI | Decraene, B., Litkowski, S., and R. Shakir, "Segment | |||
| Routing Architecture", RFC 8402, DOI 10.17487/RFC8402, | ||||
| July 2018, <https://www.rfc-editor.org/info/rfc8402>. | ||||
| [RFC8655] Finn, N., Thubert, P., Varga, B., and J. Farkas, | ||||
| "Deterministic Networking Architecture", RFC 8655, | ||||
| DOI 10.17487/RFC8655, October 2019, | ||||
| <https://www.rfc-editor.org/info/rfc8655>. | ||||
| [RFC8930] Watteyne, T., Ed., Thubert, P., Ed., and C. Bormann, "On | ||||
| Forwarding 6LoWPAN Fragments over a Multi-Hop IPv6 | ||||
| Network", RFC 8930, DOI 10.17487/RFC8930, November 2020, | ||||
| <https://www.rfc-editor.org/info/rfc8930>. | ||||
| [RFC8931] Thubert, P., Ed., "IPv6 over Low-Power Wireless Personal | ||||
| Area Network (6LoWPAN) Selective Fragment Recovery", | ||||
| RFC 8931, DOI 10.17487/RFC8931, November 2020, | ||||
| <https://www.rfc-editor.org/info/rfc8931>. | ||||
| [RFC8994] Eckert, T., Ed., Behringer, M., Ed., and S. Bjarnason, "An | ||||
| Autonomic Control Plane (ACP)", RFC 8994, | ||||
| DOI 10.17487/RFC8994, May 2021, | ||||
| <https://www.rfc-editor.org/info/rfc8994>. | ||||
| [RFC9008] Robles, M.I., Richardson, M., and P. Thubert, "Using RPI | ||||
| Option Type, Routing Header for Source Routes, and IPv6- | Option Type, Routing Header for Source Routes, and IPv6- | |||
| 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 | ||||
| (Routing Protocol for Low-Power and Lossy Networks) | ||||
| Leaves", RFC 9010, DOI 10.17487/RFC9010, April 2021, | ||||
| <https://www.rfc-editor.org/info/rfc9010>. | ||||
| [I-D.irtf-panrg-path-properties] | ||||
| Enghardt, T. and C. Krähenbühl, "A Vocabulary of Path | ||||
| Properties", Work in Progress, Internet-Draft, draft-irtf- | ||||
| panrg-path-properties-03, 9 July 2021, | ||||
| <https://datatracker.ietf.org/doc/html/draft-irtf-panrg- | ||||
| path-properties-03>. | ||||
| [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/>. | |||
| Appendix A. Applications | Appendix A. Applications | |||
| A.1. Loose Source Routing | A.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 12. | uses the Non-Storing Mode of Operation as represented in Figure 17. | |||
| 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. | |||
| ------+--------- | ------+--------- | |||
| | Internet | | Internet | |||
| | | | | |||
| +-----+ | +-----+ | |||
| | | 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 12: RPL Non-Storing Mode of operation | Figure 17: 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 about | |||
| the whole network, though this information is limited to the | 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 Root, or then some associated centralized | It results that the Root, or then some associated centralized | |||
| computation engine such as a PCE, can determine the amount of packets | computation engine such as a PCE, can determine the amount of packets | |||
| that reach a destination in the RPL domain, and thus the amount of | that reach a destination in the RPL domain, and thus the amount of | |||
| energy and bandwidth that is wasted for transmission, between itself | energy and bandwidth that is wasted for transmission, between itself | |||
| and the destination, as well as the risk of fragmentation, any | and the destination, as well as the risk of fragmentation, any | |||
| potential delays because of a paths longer than necessary (shorter | potential delays because of a paths longer than necessary (shorter | |||
| paths exist that would not traverse the Root). | paths exist that would not traverse the Root). | |||
| As a network gets deep, the size of the source routing header that | As a network gets deep, the size of the source routing header that | |||
| the Root must add to all the downward packets becomes an issue for | the Root must add to all the downward packets becomes an issue for | |||
| nodes that are many hops away. In some use cases, a RPL network | nodes that are many hops away. In some use cases, a RPL network | |||
| forms long lines and a limited amount of well-Targeted routing state | forms long lines and a limited amount of well-targeted routing state | |||
| would allow to make the source routing operation loose as opposed to | would allow to make the source routing operation loose as opposed to | |||
| strict, and save packet size. Limiting the packet size is directly | strict, and save packet size. Limiting the packet size is directly | |||
| beneficial to the energy budget, but, mostly, it reduces the chances | beneficial to the energy budget, but, mostly, it reduces the chances | |||
| of frame loss and/or packet fragmentation, which is highly | of frame loss and/or packet fragmentation, which is highly | |||
| detrimental to the LLN operation. Because the capability to store a | detrimental to the LLN operation. Because the capability to store a | |||
| routing state in every node is limited, the decision of which route | routing state in every node is limited, the decision of which route | |||
| is installed where can only be optimized with a global knowledge of | is installed where can only be optimized with a global knowledge of | |||
| the system, a knowledge that the Root or an associated PCE may | the system, a knowledge that the Root or an associated PCE may | |||
| possess by means that are outside of the scope of this specification. | possess by means that are outside of the scope of this specification. | |||
| This specification enables to store a Storing Mode state in | This specification enables to store a Storing Mode state in | |||
| intermediate routers, which enables to limit the excursion of the | intermediate routers, which enables to limit the excursion of the | |||
| source route headers in deep networks. Once a P-DAO exchange has | source route headers in deep networks. Once a P-DAO exchange has | |||
| taken place for a given Target, if the Root operates in non Storing | taken place for a given Target, if the Root operates in non Storing | |||
| Mode, then it may elide the sequence of routers that is installed in | Mode, then it may elide the sequence of routers that is installed in | |||
| the network from its source route headers to destination that are | the network from its source route headers to destination that are | |||
| reachable via that Target, and the source route headers effectively | reachable via that Target, and the source route headers effectively | |||
| become loose. | become loose. | |||
| A.2. Transversal Routes | A.2. East-West Routes | |||
| RPL is optimized for Point-to-Multipoint (P2MP) and Multipoint-to- | RPL is optimized for Point-to-Multipoint (P2MP) and Multipoint-to- | |||
| Point (MP2P), whereby routes are always installed along the RPL DODAG | Point (MP2P), whereby routes are always installed North-South (aka | |||
| respectively from and towards the DODAG Root. Transversal Peer to | up/down) along the RPL DODAG respectively from and towards the DODAG | |||
| Peer (P2P) routes in a RPL network will generally suffer from some | Root. Peer to Peer (P2P) East-West routes in a RPL network will | |||
| elongated (stretched) path versus the best possible path, since | generally suffer from some elongated (stretched) path versus a direct | |||
| routing between 2 nodes always happens via a common parent, as | (optimized) path, since routing between two nodes always happens via | |||
| illustrated in Figure 13: | a common parent, as illustrated in Figure 18: | |||
| * In Storing Mode, unless the destination is a child of the source, | ||||
| the packets will follow the default route up the DODAG as well. | ||||
| If the destination is in the same DODAG, they will eventually | ||||
| reach a common parent that has a route to the destination; at | ||||
| worse, the common parent may also be the Root. From that common | ||||
| parent, the packet will follow a path down the DODAG that is | ||||
| optimized for the Objective Function that was used to build the | ||||
| DODAG. | ||||
| * 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 | ||||
| same DODAG, the Root must encapsulate the packet to place an RH | ||||
| that has the strict source route information down the DODAG to the | ||||
| destination. This will be the case even if the destination is | ||||
| relatively close to the source and the Root is relatively far off. | ||||
| ------+--------- | ------+--------- | |||
| | 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 13: Routing Stretch between S and D via common parent X | Figure 18: Routing Stretch between S and D via common parent X | |||
| along North-South Paths | ||||
| It results that it is often beneficial to enable transversal P2P | * In Storing Mode, unless the destination is a child of the source, | |||
| the packets will follow the default route up the DODAG as well. | ||||
| If the destination is in the same DODAG, they will eventually | ||||
| reach a common parent that has a route to the destination; at | ||||
| worse, the common parent may also be the Root. From that common | ||||
| parent, the packet will follow a path down the DODAG that is | ||||
| optimized for the Objective Function that was used to build the | ||||
| DODAG. | ||||
| * 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 | ||||
| same DODAG, the Root must encapsulate the packet to place an RH | ||||
| that has the strict source route information down the DODAG to the | ||||
| destination. This will be the case even if the destination is | ||||
| relatively close to the source and the Root is relatively far off. | ||||
| It results that it is often beneficial to enable East-West P2P | ||||
| routes, either if the RPL route presents a stretch from shortest | routes, either if the RPL route presents a stretch from shortest | |||
| path, or if the new route is engineered with a different objective, | path, or if the new route is engineered with a different objective, | |||
| and that it is even more critical in Non-Storing Mode than it is in | and that it is even more critical in Non-Storing Mode than it is in | |||
| Storing Mode, because the routing stretch is wider. For that reason, | Storing Mode, because the routing stretch is wider. For that reason, | |||
| earlier work at the IETF introduced the "Reactive Discovery of | earlier work at the IETF introduced the "Reactive Discovery of | |||
| Point-to-Point Routes in Low Power and Lossy Networks" [RFC6997], | Point-to-Point Routes in Low Power and Lossy Networks" [RFC6997], | |||
| which specifies a distributed method for establishing optimized P2P | which specifies a distributed method for establishing optimized P2P | |||
| routes. This draft proposes an alternate based on a centralized | routes. This draft proposes an alternate based on a centralized | |||
| route computation. | route computation. | |||
| ------+--------- | ------+--------- | |||
| | Internet | | Internet | |||
| | | | | |||
| +-----+ | +-----+ | |||
| | | Border Router | | | Border router | |||
| | | (RPL Root) | | | (RPL Root) | |||
| +-----+ | +-----+ | |||
| | | | | |||
| o o o o | o o o o | |||
| o o o o o o o o o | o o o o o o o o o | |||
| o o o o o o o o o o | o o o o o o o o o o | |||
| o o o o o o o o o | o o o o o o o o o | |||
| 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 14: Projected Transversal Route | Figure 19: More direct East-West Route between S and D | |||
| This specification enables to store source-routed or Storing Mode | This specification enables to store source-routed or Storing Mode | |||
| state in intermediate routers, which enables to limit the stretch of | state in intermediate routers, which enables to limit the stretch of | |||
| a P2P route and maintain the characteristics within a given SLA. An | a P2P route and maintain the characteristics within a given SLA. An | |||
| example of service using this mechanism oculd be a control loop that | example of service using this mechanism oculd be a control loop that | |||
| would be installed in a network that uses classical RPL for | would be installed in a network that uses classical RPL for | |||
| asynchronous data collection. In that case, the P2P path may be | asynchronous data collection. In that case, the P2P path may be | |||
| installed in a different RPL Instance, with a different objective | installed in a different RPL Instance, with a different objective | |||
| function. | function. | |||
| End of changes. 277 change blocks. | ||||
| 1330 lines changed or deleted | 2304 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/ | ||||