| rfc9914v1.txt | rfc9914.txt | |||
|---|---|---|---|---|
| Internet Engineering Task Force (IETF) P. Thubert, Ed. | Internet Engineering Task Force (IETF) P. Thubert, Ed. | |||
| Request for Comments: 9914 | Request for Comments: 9914 Independent | |||
| Updates: 6550, 6553, 8138 R.A. Jadhav | Updates: 6550, 6553, 8138 R.A. Jadhav | |||
| Category: Standards Track AccuKnox | Category: Standards Track AccuKnox | |||
| ISSN: 2070-1721 M. Richardson | ISSN: 2070-1721 M. Richardson | |||
| Sandelman | Sandelman | |||
| February 2026 | March 2026 | |||
| Root-Initiated Routing State in the Routing Protocol for Low-Power and | Root-Initiated Routing State in the Routing Protocol for Low-Power and | |||
| Lossy Networks (RPL) | Lossy Networks (RPL) | |||
| Abstract | Abstract | |||
| The Routing Protocol for Low-Power and Lossy Networks (RPL) (RFC | The Routing Protocol for Low-Power and Lossy Networks (RPL) (RFC | |||
| 6550) enables data packet routing along a Destination-Oriented | 6550) enables data packet routing along a Destination-Oriented | |||
| Directed Acyclic Graph (DODAG). However, the default route | Directed Acyclic Graph (DODAG). However, the default route | |||
| establishment mechanism relies on hop-by-hop forwarding along the | establishment mechanism relies on hop-by-hop forwarding along the | |||
| DODAG, which may not always provide optimal routing efficiency. This | DODAG, which may not always provide optimal routing efficiency. This | |||
| document introduces the concept of Destination Advertisement Object | document introduces the concept of Destination Advertisement Object | |||
| (DAO) Projection, a mechanism that allows a RPL root or an external | (DAO) Projection, a mechanism that allows a RPL Root or an external | |||
| controller to install optimized routes within the RPL domain. DAO | controller to install optimized routes within the RPL domain. DAO | |||
| Projections enable the creation of optimized unicast or multicast | Projections enable the creation of optimized unicast or multicast | |||
| routes that do not strictly follow the DODAG structure, thereby | routes that do not strictly follow the DODAG structure, thereby | |||
| improving routing efficiency, reliability, availability, and resource | improving routing efficiency, reliability, availability, and resource | |||
| utilization in the RPL domain. This document specifies two types of | utilization in the RPL domain. This document specifies two types of | |||
| Projected Routes (P-Routes) -- Storing Mode and Non-Storing Mode -- | Projected Routes (P-Routes) -- Storing Mode and Non-Storing Mode -- | |||
| and outlines the signaling procedures necessary to establish, | and outlines the signaling procedures necessary to establish, | |||
| maintain, and remove these routes. This document updates RFCs 6550, | maintain, and remove these routes. This document updates RFCs 6550, | |||
| 6553, and 8138. | 6553, and 8138. | |||
| skipping to change at line 66 ¶ | skipping to change at line 66 ¶ | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Revised BSD License text as described in Section 4.e of the | include Revised BSD License text as described in Section 4.e of the | |||
| Trust Legal Provisions and are provided without warranty as described | Trust Legal Provisions and are provided without warranty as described | |||
| in the Revised BSD License. | in the Revised BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction | 1. Introduction | |||
| 2. Terminology | 2. Terminology | |||
| 2.1. Requirements Language | 2.1. Requirements Language | |||
| 2.2. References | 2.2. Terms and Concepts | |||
| 2.3. Glossary | 2.3. Glossary | |||
| 2.4. Domain Terms | 2.4. Domain Terms | |||
| 2.4.1. Projected Route | 2.4.1. Projected Route | |||
| 2.4.2. Projected DAO | 2.4.2. Projected DAO | |||
| 2.4.3. Path | 2.4.3. Path | |||
| 2.4.4. Routing Stretch | 2.4.4. Routing Stretch | |||
| 2.4.5. Track | 2.4.5. Track | |||
| 3. Context and Goal | 3. Context and Goal | |||
| 3.1. RPL Applicability | 3.1. RPL Applicability | |||
| 3.2. Multi-Topology Routing and Loop Avoidance | 3.2. Multi-Topology Routing and Loop Avoidance | |||
| skipping to change at line 89 ¶ | skipping to change at line 89 ¶ | |||
| 3.3.2. Forward Routes | 3.3.2. Forward Routes | |||
| 3.4. On Tracks | 3.4. On Tracks | |||
| 3.4.1. Building Tracks with RPL | 3.4.1. Building Tracks with RPL | |||
| 3.4.2. Tracks and RPL Instances | 3.4.2. Tracks and RPL Instances | |||
| 3.5. Path Signaling | 3.5. Path Signaling | |||
| 3.5.1. Using Storing Mode Segments | 3.5.1. Using Storing Mode Segments | |||
| 3.5.2. Using Non-Storing Mode Joining Tracks | 3.5.2. Using Non-Storing Mode Joining Tracks | |||
| 3.6. Complex Tracks | 3.6. Complex Tracks | |||
| 3.7. Scope and Expectations | 3.7. Scope and Expectations | |||
| 3.7.1. External Dependencies | 3.7.1. External Dependencies | |||
| 3.7.2. Positioning Versus Related IETF Standards | 3.7.2. Relationship to Other IETF Specifications | |||
| 4. Extending Existing RFCs | 4. Extending and Amending Existing RFCs | |||
| 4.1. Extending RPL RFC 6550 | 4.1. Extending RFC 6550 | |||
| 4.1.1. Projected DAO | 4.1.1. Projected DAO | |||
| 4.1.2. Projected DAO-ACK | 4.1.2. Projected DAO-ACK | |||
| 4.1.3. Via Information Option | 4.1.3. Via Information Option | |||
| 4.1.4. Sibling Information Option | 4.1.4. Sibling Information Option | |||
| 4.1.5. P-DAO Request | 4.1.5. P-DAO Request | |||
| 4.1.6. Amending the RPI | 4.1.6. Amending the RPI | |||
| 4.1.7. Additional Flag in the RPL DODAG Configuration Option | 4.1.7. Additional Flag in the RPL DODAG Configuration Option | |||
| 4.2. Extending RPL RFC 6553 | 4.2. Extending RFC 6553 | |||
| 4.3. Extending RPL RFC 8138 | 4.3. Extending RFC 8138 | |||
| 5. New RPL Control Messages and Options | 5. New RPL Control Messages and Options | |||
| 5.1. New P-DAO Request Control Message | 5.1. New P-DAO Request Control Message | |||
| 5.2. New PDR-ACK Control Message | 5.2. New PDR-ACK Control Message | |||
| 5.3. Via Information Options | 5.3. Via Information Options | |||
| 5.4. Sibling Information Option | 5.4. Sibling Information Option | |||
| 6. Root-Initiated Routing State | 6. Root-Initiated Routing State | |||
| 6.1. RPL Network Setup | 6.1. RPL Network Setup | |||
| 6.2. Requesting a Track | 6.2. Requesting a Track | |||
| 6.3. Identifying a Track | 6.3. Identifying a Track | |||
| 6.4. Installing a Track | 6.4. Installing a Track | |||
| skipping to change at line 156 ¶ | skipping to change at line 156 ¶ | |||
| 12.2. Informative References | 12.2. Informative References | |||
| Acknowledgments | Acknowledgments | |||
| Authors' Addresses | Authors' Addresses | |||
| 1. Introduction | 1. Introduction | |||
| The Routing Protocol for Low-Power and Lossy Networks (RPL) [RPL], is | The Routing Protocol for Low-Power and Lossy Networks (RPL) [RPL], is | |||
| a Distance Vector protocol that is well-suited for application in a | a Distance Vector protocol that is well-suited for application in a | |||
| variety of low-energy Internet of Things (IoT) networks where | variety of low-energy Internet of Things (IoT) networks where | |||
| constrained nodes cannot maintain the full view of the topology and | constrained nodes cannot maintain the full view of the topology and | |||
| stretched P2P paths are acceptable (versus the signaling and state | stretched paths are acceptable (as opposed to the signaling and state | |||
| overhead involved in maintaining the shortest paths across). | overhead involved in maintaining the shortest paths across). | |||
| Additionally, RPL is anisotropic, meaning that its operation depends | Additionally, RPL is anisotropic, meaning that its operation depends | |||
| on the orientation of the links, down from or up towards the Root, | on the orientation of the links, down from or up towards the Root, | |||
| with the default route advertised down and more-specific paths | with the default route advertised down and more-specific paths | |||
| advertised up along a limited set of links. | advertised up along a limited set of links. | |||
| RPL forms Destination-Oriented Directed Acyclic Graphs (DODAGs) in | RPL forms Destination-Oriented Directed Acyclic Graphs (DODAGs) in | |||
| which the Root often acts as the border router to connect the RPL | which the Root often acts as the border router to connect the RPL | |||
| domain to the IP backbone. Routers inside the DODAG route along the | domain to the IP backbone. Routers inside the DODAG route along the | |||
| graph up towards the Root for the default route and down towards | graph up towards the Root for the default route and down towards | |||
| skipping to change at line 220 ¶ | skipping to change at line 220 ¶ | |||
| 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 | "OPTIONAL" in this document are to be interpreted as described in | |||
| BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| In addition, the terms "Extends" and "Amends" are used as per | In addition, the terms "Extends" and "Amends" are used as per | |||
| [NEW-TAGS], Section 3. | [NEW-TAGS], Section 3. | |||
| 2.2. References | 2.2. Terms and Concepts | |||
| In this document, readers will encounter terms and concepts that are | In this document, readers will encounter terms and concepts that are | |||
| discussed in "RPL: IPv6 Routing Protocol for Low-Power and Lossy | discussed in the following: | |||
| Networks" [RPL]; "An Architecture for IPv6 over the Time-Slotted | ||||
| Channel Hopping Mode of IEEE 802.15.4 (6TiSCH)" [RFC9030]; | * "RPL: IPv6 Routing Protocol for Low-Power and Lossy Networks" | |||
| "Deterministic Networking Architecture" [RFC8655]; "Using RPI Option | [RPL] | |||
| Type, Routing Header for Source Routes, and IPv6-in-IPv6 | ||||
| Encapsulation in the RPL Data Plane" [RFC9008]; "Reliable and | * "An Architecture for IPv6 over the Time-Slotted Channel Hopping | |||
| Available Wireless (RAW) Architecture" [RAW-ARCH]; and "Terms Used in | Mode of IEEE 802.15.4 (6TiSCH)" [RFC9030] | |||
| Routing for Low-Power and Lossy Networks" [RFC7102]. The 6TiSCH, | ||||
| Deterministic Networking (DetNet), and RAW architectures utilize the | * "Deterministic Networking Architecture" [RFC8655] | |||
| terms "Track" and "recovery graph" to represent the same concept even | ||||
| though they are in different environments. This document uses | * "Using RPI Option Type, Routing Header for Source Routes, and | |||
| "Track" to represent that concept and only builds Tracks that are | IPv6-in-IPv6 Encapsulation in the RPL Data Plane" [RFC9008] | |||
| DODAGs, meaning that all links are oriented from Ingress to Egress. | ||||
| This specification also utilizes the terms "segment" and "protection | * "Reliable and Available Wireless (RAW) Architecture" [RAW-ARCH] | |||
| path", which are also defined in the RAW architecture. | ||||
| * "Terms Used in Routing for Low-Power and Lossy Networks" [RFC7102] | ||||
| The 6TiSCH, Deterministic Networking (DetNet), and RAW architectures | ||||
| utilize the terms "Track" and "recovery graph" to represent the same | ||||
| concept even though they are in different environments. This | ||||
| document uses "Track" to represent that concept and only builds | ||||
| Tracks that are DODAGs, meaning that all links are oriented from | ||||
| ingress to egress. This specification also utilizes the terms | ||||
| "segment" and "protection path", which are also defined in the RAW | ||||
| architecture. | ||||
| As opposed to routing trees, RPL DODAGs are typically constructed to | As opposed to routing trees, RPL DODAGs are typically constructed to | |||
| provide redundancy and dynamically adapt the forwarding operation to | provide redundancy and dynamically adapt the forwarding operation to | |||
| the state of the Low-Power and Lossy Network (LLN) links. Note that | the state of the Low-Power and Lossy Network (LLN) links. Note that | |||
| the plain forwarding operation over DODAGs does not provide | the plain forwarding operation over DODAGs does not provide | |||
| redundancy for all nodes, since at least the node nearest to the Root | redundancy for all nodes, since at least the node nearest to the Root | |||
| does not have an alternate feasible successor. | does not have an alternate feasible successor. | |||
| RAW solves that problem by defining protection paths that can be | RAW solves that problem by defining protection paths that can be | |||
| interleaved to form new paths that can be activated dynamically upon | interleaved to form new paths that can be activated dynamically upon | |||
| failures. This requires additional control to take the routing | failures. This requires additional control in order to make the | |||
| decision early enough along the Track to route around the failure. | routing decision early enough along the Track to route around the | |||
| failure. | ||||
| RAW only uses single-ended DODAGs, meaning that they can be reversed | RAW only uses single-ended DODAGs, meaning that they can be reversed | |||
| in another DODAG by reversing all the links. The Ingress of the | in another DODAG by reversing all the links. The ingress of the | |||
| Track is the Root of the DODAG, whereas the Egress is the Root of the | Track is the Root of the DODAG, whereas the egress is the Root of the | |||
| reversed DODAG. From the RAW perspective, single-ended DODAGs are | reversed DODAG. From the RAW perspective, single-ended DODAGs are | |||
| special Tracks that only have forward links, and that can be | special Tracks that only have forward links, and that can be | |||
| leveraged to provide protection services by defining destination- | leveraged to provide protection services by defining destination- | |||
| oriented protection paths within the DODAG. | oriented protection paths within the DODAG. | |||
| 2.3. Glossary | 2.3. Glossary | |||
| This document often uses the following abbreviations: | This document often uses the following abbreviations: | |||
| 6LR: 6LoWPAN Router (e.g., a RPL router in an LLN) | ||||
| 6LoRH: 6LoWPAN Routing Header | 6LoRH: 6LoWPAN Routing Header | |||
| ARQ: Automatic Repeat Request (in other words, retries) | 6LR: 6LoWPAN Router (e.g., a RPL router in an LLN) | |||
| FEC: Forward Error Correction | ||||
| HARQ: Hybrid Automatic Repeat Request (combines FEC and ARQ) | ARQ: Automatic Repeat Request (in other words, retries) | |||
| CMO: Control Message Option | CMO: Control Message Option | |||
| DAG: Directed Acyclic Graph | ||||
| DAO: Destination Advertisement Object | DAO: Destination Advertisement Object | |||
| DAG: Directed Acyclic Graph | DIO: DODAG Information Object | |||
| DODAG: Destination-Oriented Directed Acyclic Graph. A DAG with | DODAG: Destination-Oriented Directed Acyclic Graph. A DAG with | |||
| only one vertex (i.e., node) that has no outgoing edge | only one vertex (i.e., node) that has no outgoing edge | |||
| (i.e., link). | (i.e., link). | |||
| FEC: Forward Error Correction | ||||
| GUA: Global Unicast Address | GUA: Global Unicast Address | |||
| HARQ: Hybrid Automatic Repeat Request (combines FEC and ARQ) | ||||
| LLN: Low-Power and Lossy Network | LLN: Low-Power and Lossy Network | |||
| MOP: Mode of Operation | MOP: Mode of Operation | |||
| NSM-VIO: Non-Storing Mode Via Information Option. Source-routed | ||||
| VIO used in Non-Storing Mode P-DAO messages. | ||||
| P-DAO: Projected DAO | P-DAO: Projected DAO | |||
| P-Route: Projected Route | P-Route: Projected Route | |||
| PDR: P-DAO Request | ||||
| PCE: Path Computation Element | PCE: Path Computation Element | |||
| PLR: Point of Local Repair | PDAOReq: P-DAO Request | |||
| RAN: RPL-Aware Node (either a RPL router or a RPL-Aware Leaf) | PLR: Point of Local Repair | |||
| RAL: RPL-Aware Leaf | RAL: RPL-Aware Leaf | |||
| RAN: RPL-Aware Node (either a RPL router or a RPL-Aware Leaf) | ||||
| RH: Routing Header | RH: Routing Header | |||
| RIB: Routing Information Base (i.e., the routing table) | RIB: Routing Information Base (i.e., the routing table) | |||
| RPI: RPL Packet Information | RPI: RPL Packet Information | |||
| RPL: Routing Protocol for Low-Power and Lossy Networks | RPL: Routing Protocol for Low-Power and Lossy Networks | |||
| RTO: RPL Target Option | RTO: RPL Target Option | |||
| RUL: RPL-Unaware Leaf | RUL: RPL-Unaware Leaf | |||
| SIO: Sibling Information Option | SIO: Sibling Information Option | |||
| ULA: Unique Local Address | ||||
| NSM-VIO: Non-Storing Mode Via Information Option. Source-routed | ||||
| VIO used in Non-Storing Mode P-DAO messages. | ||||
| SLO: Service Level Objective | SLO: Service Level Objective | |||
| SM-VIO: Storing Mode Via Information Option. Strict VIO used in | ||||
| Storing Mode P-DAO messages. | ||||
| SRH: Source Routing Header (i.e., IPv6 RH type 3); see | SRH: Source Routing Header (i.e., IPv6 RH type 3); see | |||
| Section 2.4.5.7.2. | Section 2.4.5.7.2. | |||
| SRH-6LoRH: Source Routing Header 6LoRH. A compressed form of SRH | SRH-6LoRH: Source Routing Header 6LoRH. A compressed form of SRH | |||
| defined in "IPv6 over Low-Power Wireless Personal Area | defined in "IPv6 over Low-Power Wireless Personal Area | |||
| Network (6LoWPAN) Routing Header" [RFC8138]. | Network (6LoWPAN) Routing Header" [RFC8138]. | |||
| TIO: Transit Information Option | TIO: Transit Information Option | |||
| SM-VIO: Storing Mode Via Information Option. Strict VIO used in | ULA: Unique Local Address | |||
| Storing Mode P-DAO messages. | ||||
| VIO: Via Information Option. It can be an SM-VIO or NSM-VIO. | VIO: Via Information Option. It can be an SM-VIO or NSM-VIO. | |||
| 2.4. Domain Terms | 2.4. Domain Terms | |||
| This specification uses the terminology defined in the sections that | This specification uses the terminology defined in the sections that | |||
| follow. | follow. | |||
| 2.4.1. Projected Route | 2.4.1. Projected Route | |||
| skipping to change at line 367 ¶ | skipping to change at line 380 ¶ | |||
| Quoting (non-normatively) the definition of path in Section 1.3.3 of | Quoting (non-normatively) the definition of path in Section 1.3.3 of | |||
| [INT-ARCH]: | [INT-ARCH]: | |||
| | At a given moment, all the IP datagrams from a particular source | | At a given moment, all the IP datagrams from a particular source | |||
| | host to a particular destination host will typically traverse the | | host to a particular destination host will typically traverse the | |||
| | same sequence of gateways. We use the term "path" for this | | same sequence of gateways. We use the term "path" for this | |||
| | sequence. Note that a path is uni-directional; it is not unusual | | sequence. Note that a path is uni-directional; it is not unusual | |||
| | to have different paths in the two directions between a given host | | to have different paths in the two directions between a given host | |||
| | pair. | | pair. | |||
| Section 2 of [RFC9473] points to a longer, more modern definition of | See Section 3.1.1 of [RAW-ARCH] for a longer, more modern definition | |||
| path: | of path. | |||
| | 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 | 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 | 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 | this document, a path is observed by following one copy of a packet | |||
| that is injected in a Track and possibly replicated within. | that is injected in a Track and possibly replicated within. | |||
| 2.4.4. Routing Stretch | 2.4.4. Routing Stretch | |||
| RPL is anisotropic, meaning that it is directional or, more | RPL is anisotropic, meaning that it is directional or, more | |||
| precisely, polar. RPL does not behave the same way "downwards" (root | precisely, polar. RPL does not behave the same way "downwards" (Root | |||
| towards leaves) with _multicast_ DODAG Information Object (DIO) | towards leaves) with _multicast_ DODAG Information Object (DIO) | |||
| messages that form the DODAG and "upwards" (leaves towards root) with | messages that form the DODAG versus "upwards" (leaves towards Root) | |||
| _unicast_ DAO messages that follow the DODAG. This is in contrast | with _unicast_ DAO messages that follow the DODAG. This is in | |||
| with traditional IGPs that operate the same way in all directions and | contrast with traditional IGPs that operate the same way in all | |||
| are thus called isotropic. | directions and are thus called isotropic. | |||
| The term "routing stretch" denotes the length of a path, in | The term "routing stretch" denotes the length of a path, in | |||
| comparison to the length of the shortest path, which can be an | comparison to the length of the shortest path, which can be an | |||
| abstract concept in RPL when the metrics are statistical and dynamic, | abstract concept in RPL when the metrics are statistical and dynamic, | |||
| and the concept of distance varies with the Objective Function. | and the concept of distance varies with the Objective Function. | |||
| The RPL DODAG optimizes Point-to-Multipoint (P2MP) paths (from the | The RPL DODAG optimizes Point-to-Multipoint (P2MP) paths (from the | |||
| Root) and Multipoint-to-Point (MP2P) paths (towards the Root), but | Root) and Multipoint-to-Point (MP2P) paths (towards the Root), but | |||
| the Point-to-Point (P2P) traffic has to follow the same DODAG. | the Point-to-Point (P2P) traffic has to follow the same DODAG. | |||
| Following the DODAG, the RPL datapath passes via a common parent in | Following the DODAG, the RPL datapath passes via a common parent in | |||
| skipping to change at line 411 ¶ | skipping to change at line 418 ¶ | |||
| involves more hops and more latency than the minimum possible for a | involves more hops and more latency than the minimum possible for a | |||
| directional (i.e., forward) P2P path that an isotropic protocol would | directional (i.e., forward) P2P path that an isotropic protocol would | |||
| compute. We refer to this elongated path as stretched. | compute. We refer to this elongated path as stretched. | |||
| 2.4.5. Track | 2.4.5. Track | |||
| The concept of Track is inherited from the 6TiSCH architecture | The concept of Track is inherited from the 6TiSCH architecture | |||
| [RFC9030] and matches that of a protection path in the RAW | [RFC9030] and matches that of a protection path in the RAW | |||
| architecture [RAW-ARCH]. A Track is a networking graph that can be | architecture [RAW-ARCH]. A Track is a networking graph that can be | |||
| followed to transport packets with equivalent treatment; as opposed | followed to transport packets with equivalent treatment; as opposed | |||
| to the definition of a path above, a Track is not necessarily linear. | to other definitions of a path (see Section 1.3.3 of [INT-ARCH] and | |||
| It may contain multiple paths that may fork and rejoin and that may | Section 3.1.1 of [RAW-ARCH], a Track is not necessarily linear. It | |||
| may contain multiple paths that may fork and rejoin and that may | ||||
| enable RAW Packet ARQ, Replication, Elimination, and Overhearing | enable RAW Packet ARQ, Replication, Elimination, and Overhearing | |||
| (PAREO) operations. | (PAREO) operations. | |||
| Figure 1 illustrates the mapping of the DODAG with the generic | Figure 1 illustrates the mapping of the DODAG with the generic | |||
| concept of a Track, with the DODAG Root acting as the Ingress for the | concept of a Track, with the DODAG Root acting as the ingress for the | |||
| Track, and the mapping of protection paths and segments, i.e., only | Track, and the mapping of protection paths and segments, i.e., only | |||
| forward segments, meaning that they are directional and progressing | forward segments, meaning that they are directional and progressing | |||
| towards the destination. Note that East is represented on the left | towards the destination. Note that East is represented on the left | |||
| since the packets are forwarded East-West. | since the packets are forwarded East-West. | |||
| North East North West | North East North West | |||
| A ==> B ==> C -=- F ==> G ==> H T1 | A ==> B ==> C -=- F ==> G ==> H T1 | |||
| / \ / \ / | / \ / \ / | |||
| I O E -=- T2 | I O E -=- T2 | |||
| \ / \ / \ | \ / \ / \ | |||
| P ==> Q ==> R -=- T ==> U ==> V T3 | P ==> Q ==> R -=- T ==> U ==> V T3 | |||
| South East South West | South East South West | |||
| I: Ingress | I: ingress | |||
| E: Egress | E: egress | |||
| T1, T2, T3: external targets | T1, T2, T3: external targets | |||
| Figure 1: A Track and Its Components | Figure 1: A Track and Its Components | |||
| Of note: | Of note: | |||
| I ==> A ==> B ==> C: A segment to targets F and O | I ==> A ==> B ==> C: A segment to targets F and O | |||
| I --> F --> E: A protection path to targets T1, T2, T3 | I --> F --> E: A protection path to targets T1, T2, T3 | |||
| I, A, B, C, F, G, H, E: A path to T1, T2, T3 | I, A, B, C, F, G, H, E: A path to T1, T2, T3 | |||
| This specification builds Tracks that are DODAGs oriented towards a | This specification builds Tracks that are DODAGs oriented towards a | |||
| Track Ingress, and the forward direction for packets is from the | Track ingress, and the forward direction for packets is from the | |||
| Track Ingress to one of the possible multiple Track Egress Nodes, | Track ingress to one of the possible multiple Track egress nodes, | |||
| which is also down the DODAG. | which is also down the DODAG. | |||
| The Track may be strictly connected, meaning that the vertices are | 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. | |||
| 2.4.5.1. TrackID | 2.4.5.1. TrackID | |||
| A RPLInstanceID (typically of a Local Instance) identifies a Track | A RPLInstanceID (typically of a Local Instance) identifies a Track | |||
| using the namespace owned by the Track Ingress. For Local Instances, | using the namespace owned by the Track ingress. For Local Instances, | |||
| the TrackID is associated with the IPv6 address of the Track Ingress | the TrackID is associated with the IPv6 address of the Track ingress | |||
| that is used as the DODAGID, and together they form a unique | that is used as the DODAGID, and together they form a unique | |||
| identification of the Track (see the definition of DODAGID in | identification of the Track (see the definition of DODAGID in | |||
| Section 2 of [RPL]). | Section 2 of [RPL]). | |||
| 2.4.5.2. Namespace | 2.4.5.2. Namespace | |||
| The term "namespace" is used to refer to the scope of the TrackID. | The term "namespace" is used to refer to the scope of the TrackID. | |||
| The TrackID is locally significant within its namespace. For Local | The TrackID is locally significant within its namespace. For Local | |||
| Instances, the namespace is identified by the DODAGID for the Track, | Instances, the namespace is identified by the DODAGID for the Track, | |||
| and the tuple (DODAGID, TrackID) is globally unique. For Global | and the tuple (DODAGID, TrackID) is globally unique. For Global | |||
| Instances, the namespace is the whole RPL domain. | Instances, the namespace is the whole RPL domain. | |||
| 2.4.5.3. Complex Track | 2.4.5.3. Complex Track | |||
| A complex Track is a Track that can be traversed via more than one | A Complex Track is a Track that can be traversed via more than one | |||
| path (e.g., a DODAG). | path (e.g., a DODAG). | |||
| 2.4.5.4. Stand Alone | 2.4.5.4. Stand Alone | |||
| Stand alone refers to a segment or a protection path that is | Stand alone refers to a segment or a protection path that is | |||
| installed with a single P-DAO that fully defines the path, e.g., a | installed with a single P-DAO that fully defines the path, e.g., a | |||
| stand-alone segment is installed with a single Storing Mode Via | stand-alone segment is installed with a single Storing Mode Via | |||
| Information Option (SM-VIO) all the way between the Ingress and | Information Option (SM-VIO) all the way between the ingress and | |||
| Egress. | egress. | |||
| 2.4.5.5. Stitching | 2.4.5.5. Stitching | |||
| This specification uses the term "stitching" to indicate that a Track | This specification uses the term "stitching" to indicate that a Track | |||
| is piped to another one, meaning that traffic out of the first Track | is piped to another one, meaning that traffic out of the first Track | |||
| is injected into the other Track. | is injected into the other Track. | |||
| 2.4.5.6. Protection Path | 2.4.5.6. Protection Path | |||
| The concept of protection path is defined in the RAW architecture | The concept of protection path is defined in the RAW architecture | |||
| [RAW-ARCH] as an end-to-end forward serial path. With this | [RAW-ARCH] as an end-to-end forward serial path. With this | |||
| specification, a protection path is installed by the Root of the main | specification, a protection path is installed by the Root of the main | |||
| DODAG using a Non-Storing Mode P-DAO message, e.g., I --> F --> E in | DODAG using a Non-Storing Mode P-DAO message, e.g., I --> F --> E in | |||
| Figure 1. | Figure 1. | |||
| As the Non-Storing Mode Via Information Option (NSM-VIO) can only | As the Non-Storing Mode Via Information Option (NSM-VIO) can only | |||
| signal sequences of nodes, it takes one Non-Storing Mode P-DAO | signal sequences of nodes, it takes one Non-Storing Mode P-DAO | |||
| message per protection path to signal the structure of a complex | message per protection path to signal the structure of a Complex | |||
| Track. | Track. | |||
| Each NSM-VIO for the same TrackID but with a different Segment ID | Each NSM-VIO for the same TrackID but with a different SegmentID | |||
| signals a different protection path that the Track Ingress adds to | signals a different protection path that the Track ingress adds to | |||
| the topology. | the topology. | |||
| 2.4.5.7. Segment | 2.4.5.7. Segment | |||
| A segment is a serial path formed by a strict sequence of nodes along | A segment is a serial path formed by a strict sequence of nodes along | |||
| which a P-Route is installed, e.g., I ==> A ==> B ==> C in Figure 1. | which a P-Route is installed, e.g., I ==> A ==> B ==> C in Figure 1. | |||
| With this specification, a segment is typically installed by the Root | With this specification, a segment is typically installed by the Root | |||
| of the main DODAG using Storing Mode P-DAO messages. A segment is | of the main DODAG using Storing Mode P-DAO messages. A segment is | |||
| used as the topological edge of a Track joining the loose steps along | used as the topological edge of a Track joining the loose steps along | |||
| the protection paths that form the structure of a complex Track. The | the protection paths that form the structure of a Complex Track. The | |||
| same segment may be leveraged by more than one protection path where | same segment may be leveraged by more than one protection path where | |||
| the protection paths overlap. | the protection paths overlap. | |||
| Since this specification builds only DODAGs, all segments are | Since this specification builds only DODAGs, all segments are | |||
| oriented from the Ingress (East) to Egress (West), as opposed to the | oriented from the ingress (East) to egress (West), as opposed to the | |||
| general Track model in the RAW architecture [RAW-ARCH], which allows | general Track model in the RAW architecture [RAW-ARCH], which allows | |||
| North/South segments that can be bidirectional as well. | North/South segments that can be bidirectional as well. | |||
| 2.4.5.7.1. Section of a Segment | 2.4.5.7.1. Section of a Segment | |||
| The section of a segment refers to a continuous subset of a segment | The section of a segment refers to a continuous subset of a segment | |||
| that may be replaced while the segment remains. For instance, in | that may be replaced while the segment remains. For instance, in | |||
| segment A=>B=>C=>D=>E=>F, say that the link C to D might be | segment A=>B=>C=>D=>E=>F, say that the link C to D might be | |||
| misbehaving. The section B=>C=>D=>E in the segment may be replaced | misbehaving. The section B=>C=>D=>E in the segment may be replaced | |||
| by B=>C'=>D'=>E to route around the problem. The segment becomes | by B=>C'=>D'=>E to route around the problem. The segment becomes | |||
| A=>B=>C'=>D'=>E=>F. | A=>B=>C'=>D'=>E=>F. | |||
| 2.4.5.7.2. Segment Routing and SRH | 2.4.5.7.2. Segment Routing and SRH | |||
| In a Non-Storing Mode RPL domain, the IPv6 RH used for source routing | In a Non-Storing Mode RPL domain, the IPv6 Routing Header used for | |||
| is the (RPL) SRH as defined in [RFC6554]. This specification | source routing is the RPL Source Route Header as defined in | |||
| operates in that context and uses the acronym SRH to mean IPv6 RH | [RFC6554]. This specification operates in that context and uses the | |||
| type 3, as opposed to IPv6 RH type 4 defined in [RFC8754] for Segment | acronym SRH to mean IPv6 RH type 3, as opposed to IPv6 RH type 4 | |||
| Routing over IPv6 (SRv6) operation. | defined in [RFC8754] for Segment Routing over IPv6 (SRv6) operation. | |||
| If the network is a 6LoWPAN network, the expectation is that the SRH | If the network is a 6LoWPAN network, the expectation is that the SRH | |||
| is compressed and encoded as a 6LoWPAN Routing Header (6LoRH), as | is compressed and encoded as a 6LoWPAN Routing Header (6LoRH), as | |||
| specified in Section 5 of [RFC8138]. | specified in Section 5 of [RFC8138]. | |||
| This specification uses the term "Segment Routing" generically to | This specification uses the term "Segment Routing" generically to | |||
| refer to using source routing to hop over segments. As such, | refer to using source routing to hop over segments. As such, | |||
| forwarding along segments as specified hereafter can be seen as a | forwarding along segments as specified hereafter can be seen as a | |||
| form of Segment Routing [RFC8402] that leverages the (RPL) SRH for | form of Segment Routing [RFC8402] that leverages the RPL Source Route | |||
| its operation. | Header for its operation. | |||
| Outside of LLNs, the RPL network may be less constrained and operated | Outside of LLNs, the RPL network may be less constrained and operated | |||
| in Storing Mode, as discussed in Section 7.1. In that case, this | in Storing Mode, as discussed in Section 7.1. In that case, this | |||
| specification could be extended to accommodate the SRv6 RH. | specification could be extended to accommodate the SRv6 RH. | |||
| 3. Context and Goal | 3. Context and Goal | |||
| 3.1. RPL Applicability | 3.1. RPL Applicability | |||
| RPL is optimized for situations where the power is scarce, the | RPL is optimized for situations where the power is scarce, the | |||
| bandwidth is constrained, and the transmissions are unreliable. This | bandwidth is constrained, and the transmissions are unreliable. This | |||
| matches the use case of an IoT LLN where RPL is typically used today | matches the use case of an IoT LLN where RPL is typically used today | |||
| and also situations of high relative mobility between the nodes in | and also situations of high relative mobility between the nodes in | |||
| the network (a.k.a. swarming), e.g., within a variable set of | the network (a.k.a. swarming), e.g., within a variable set of | |||
| vehicles with a similar global motion or a platoon of drones. In | vehicles with a similar global motion or a platoon of drones. In | |||
| contrast, this specification only applies when the platoon has a | contrast, this specification only applies when the platoon has a | |||
| relatively stable topology where the segments can be attributed | relatively stable topology where the segments can be attributed | |||
| reliability and availability for a certain lifetime; see [RAW-ARCH]. | reliability and availability for a certain lifetime; see [RAW-ARCH]. | |||
| To reach this goal, RPL is primarily designed to minimize the control | To reach this goal, RPL is primarily designed to minimize the control | |||
| plane activity, i.e., the relative amount of routing protocol | plane activity (i.e., the relative amount of routing protocol | |||
| exchanges versus data traffic, and the amount of state that is | exchanges versus data traffic) and the amount of state that is | |||
| maintained in each node. RPL does not need to converge, and it | maintained in each node. RPL does not need to converge, and it | |||
| provides connectivity to most nodes most of the time. | provides connectivity to most nodes most of the time. | |||
| RPL may form multiple topologies called instances. Instances can be | RPL may form multiple topologies called Instances. Instances can be | |||
| created to enforce various optimizations through objective functions | created to enforce various optimizations through Objective Functions | |||
| or to reach out through different Root Nodes. The concept of | or to reach out through different Root nodes. The concept of | |||
| objective function allows adapting the activity of the routing | Objective Function allows adapting the activity of the routing | |||
| protocol to the use case, e.g., type, speed, and quality of the LLN | protocol to the use case, e.g., type, speed, and quality of the LLN | |||
| links. | links. | |||
| RPL instances operate in parallel, unaware of one another. Yet, it | RPL Instances operate in parallel, unaware of one another. Yet, it | |||
| is possible to define a model whereby if a route cannot be found in | is possible to define a model whereby if a route cannot be found in | |||
| the current instance A where a packet is being forwarded, then the | the current Instance A where a packet is being forwarded, then the | |||
| router may look up the routing table (i.e., the RIB) in instance B | router may look up the routing table (i.e., the RIB) in Instance B | |||
| and forward along instance B if the route is found there. To avoid | and forward along Instance B if the route is found there. To avoid | |||
| loops, this must happen in such a way that the instances themselves | loops, this must happen in such a way that the Instances themselves | |||
| form a Directed Acyclic Graph (DAG) leading to the last resort | form a Directed Acyclic Graph (DAG) leading to the last resort | |||
| instance, which is the "lowest" instance if instance A is considered | Instance, which is the "lowest" Instance if Instance A is considered | |||
| "higher" then instance B. This specification uses underlay Tracks as | "higher" then Instance B. This specification uses underlay Tracks as | |||
| "lower" instances, with the main instance being the "highest" of all. | "lower" Instances, with the main Instance being the "highest" of all. | |||
| The RPL Root is responsible for selecting the RPL Instance that is | The RPL Root is responsible for selecting the RPL Instance that is | |||
| used to forward a packet coming from the backbone into the RPL domain | used to forward a packet coming from the backbone into the RPL domain | |||
| and for setting the related RPL information in the packets. Each | and for setting the related RPL information in the packets. Each | |||
| Instance creates its own routing table (i.e., a RIB) in participating | Instance creates its own routing table (i.e., a RIB) in participating | |||
| nodes, and the RIB associated to the instance must be used end to end | nodes, and the RIB associated to the Instance must be used end to end | |||
| in the RPL domain. To that effect, RPL tags the packets with the | in the RPL domain. To that effect, RPL tags the packets with the | |||
| Instance ID in a Hop-by-Hop extension header. 6TiSCH leverages RPL | Instance ID in a Hop-by-Hop extension header. 6TiSCH leverages RPL | |||
| for its distributed routing operations. | for its distributed routing operations. | |||
| To reduce the routing exchanges, RPL leverages an anisotropic | To reduce the routing exchanges, RPL leverages an anisotropic | |||
| Distance Vector approach, which does not need global knowledge of the | Distance Vector approach, which does not need global knowledge of the | |||
| topology and only optimizes the routes to and from the RPL Root, | topology and only optimizes the routes to and from the RPL Root, | |||
| allowing P2P paths to be stretched. Although RPL installs its routes | allowing P2P paths to be stretched. Although RPL installs its routes | |||
| proactively, it only maintains them lazily, in reaction to actual | proactively, it only maintains them lazily, in reaction to actual | |||
| traffic or as a slow background activity. | traffic or as a slow background activity. | |||
| skipping to change at line 628 ¶ | skipping to change at line 636 ¶ | |||
| RAW use cases document [RFC9450], which demand high availability and | RAW use cases document [RFC9450], which demand high availability and | |||
| reliability and, as a consequence, require both short and diverse | reliability and, as a consequence, require both short and diverse | |||
| paths. | paths. | |||
| 3.2. Multi-Topology Routing and Loop Avoidance | 3.2. Multi-Topology Routing and Loop Avoidance | |||
| RPL first forms a default route in each node towards the Root, and | RPL first forms a default route in each node towards the Root, and | |||
| those routes together coalesce as a DAG oriented upwards. RPL then | those routes together coalesce as a DAG oriented upwards. RPL then | |||
| constructs routes to destinations signaled as Targets in the reverse | constructs routes to destinations signaled as Targets in the reverse | |||
| direction, down the same DODAG. To do so, a RPL Instance can be | direction, down the same DODAG. To do so, a RPL Instance can be | |||
| operated in either RPL Storing Mode or Non-Storing Mode of Operation | operated in either RPL Storing or Non-Storing MOP. The default route | |||
| (MOP). The default route towards the Root is maintained aggressively | towards the Root is maintained aggressively and may change while a | |||
| and may change while a packet progresses without causing loops, so | packet progresses without causing loops, so the packet will still | |||
| the packet will still reach the Root. | reach the Root. | |||
| In Non-Storing Mode, each node advertises itself as a Target directly | In Non-Storing Mode, each node advertises itself as a Target directly | |||
| to the Root, indicating the parents that may be used to reach itself. | to the Root, indicating the parents that may be used to reach itself. | |||
| Recursively, the Root builds and maintains an image of the whole | Recursively, the Root builds and maintains an image of the whole | |||
| DODAG in memory and leverages that abstraction to compute source | DODAG in memory and leverages that abstraction to compute source | |||
| route paths for the packets to their destinations down the DODAG. | route paths for the packets to their destinations down the DODAG. | |||
| When a node changes its point(s) of attachment to the DODAG, it takes | When a node changes its point(s) of attachment to the DODAG, it takes | |||
| a single unicast packet to the Root along the default route to update | a single unicast packet to the Root along the default route to update | |||
| it, and the connectivity to the node is restored immediately; this | it, and the connectivity to the node is restored immediately; this | |||
| mode is preferable for use cases where internet connectivity is | mode is preferable for use cases where internet connectivity is | |||
| dominant or when the Root controls the network activity in the nodes, | dominant or when the Root controls the network activity in the nodes, | |||
| which is the case in this specification. | which is the case in this specification. | |||
| In Storing Mode, the routing information percolates upwards, and each | In Storing Mode, the routing information percolates upwards, and each | |||
| node maintains the routes to the subDAG of its descendants down the | node maintains the routes to the subDAG of its descendants down the | |||
| DODAG. The maintenance is lazy, either reactive upon traffic or as a | DODAG. The maintenance is lazy; it is either reactive upon receiving | |||
| slow background process. Packets flow via the common parent and the | traffic or a slow background process. Packets flow via the common | |||
| routing stretch is reduced, compared to the Non-Storing MOP, for | parent and the routing stretch is reduced, compared to the Non- | |||
| better P2P connectivity. However, a new route takes a longer time to | Storing MOP, for better P2P connectivity. However, a new route takes | |||
| propagate to the Root, since it takes time for the Distance Vector | a longer time to propagate to the Root, since it takes time for the | |||
| protocol to operate hop by hop, and the connectivity from the | Distance Vector protocol to operate hop by hop, and the connectivity | |||
| Internet to the node is restored more slowly upon node movement. | from the Internet to the node is restored more slowly upon node | |||
| movement. | ||||
| Either way, the RPL routes are injected by the Target nodes in a | Either way, the RPL routes are injected by the Target nodes in a | |||
| distributed fashion. To complement RPL and eliminate routing | distributed fashion. To complement RPL and eliminate routing | |||
| stretch, this specification introduces a hybrid mode that combines | stretch, this specification introduces a hybrid mode that combines | |||
| Storing and Non-Storing operations to build and project routes onto | Storing and Non-Storing operations to build and project routes onto | |||
| the nodes where they should be installed. This specification uses | the nodes where they should be installed. This specification uses | |||
| the term "P-Route" to refer to those routes. | the term "P-Route" to refer to those routes. | |||
| In the simplest mode of this specification, Storing Mode P-Routes can | In the simplest mode of this specification, Storing Mode P-Routes can | |||
| be deployed to join the dots of a loose SRH in the main DODAG. In | be deployed to complete the path between the hops described in the | |||
| that case, all the routes (source routed and P-Routes) belong to the | loose SRH in the main DODAG. In that case, all the routes (source | |||
| Routing Information Base (RIB) associated with the main Instance. | routed and P-Routes) belong to the Routing Information Base (RIB) | |||
| Storing Mode P-Routes are referred to as segments in this | associated with the main Instance. Storing Mode P-Routes are | |||
| specification. | referred to as segments in this specification. | |||
| A set of P-Routes can also be projected to form a dotted-line | A set of P-Routes can also be projected to form a dotted-line | |||
| underlay of the main Instance and provide Traffic-Engineered paths | underlay of the main Instance and provide Traffic-Engineered paths | |||
| for an application. In that case, the P-Routes are installed in Non- | for an application. In that case, the P-Routes are installed in Non- | |||
| Storing Mode, and the set of P-Routes is called a Track. A Track is | Storing Mode, and the set of P-Routes is called a Track. A Track is | |||
| associated with its own RPL Instance and, as any RPL Instance, with | associated with its own RPL Instance and, as any RPL Instance, with | |||
| its own RIB. As a result, each Track defines a routing topology in | its own RIB. As a result, each Track defines a routing topology in | |||
| the RPL domain. As for the main DODAG, segments associated to the | the RPL domain. As for the main DODAG, segments associated to the | |||
| Track Instance may be deployed to join the dots using Storing Mode | Track Instance may be deployed to establish the complete path between | |||
| loose source routing hops using segments expressed as Storing Mode | ||||
| P-Routes. | P-Routes. | |||
| Routing in a multi-topology domain may cause loops unless strict | Routing in a multi-topology domain may cause loops unless strict | |||
| rules are applied. This specification defines two strict orders to | rules are applied. This specification defines two strict orders to | |||
| ensure loop avoidance when P-Routes are used in a RPL domain: one | ensure loop avoidance when P-Routes are used in a RPL domain: one | |||
| between forwarding methods and one between RPL Instances, which are | between forwarding methods and one between RPL Instances, which are | |||
| routing topologies. | routing topologies. | |||
| The first and strict order relates to the forwarding method and, more | The first order is strict and complete and relates to the forwarding | |||
| specifically, the origin of the information used in the next-hop | method and, more specifically, the origin of the information used in | |||
| computation. The possible forwarding methods are: 1) to a direct | the next-hop computation. The possible forwarding methods are: 1) to | |||
| next hop, 2) to an indirect neighbor via a common neighbor, 3) along | a direct next hop, 2) to an indirect neighbor via a common neighbor, | |||
| a segment, and 4) along a nested Track. The methods are strictly | 3) along a segment, and 4) along a nested Track. The methods are | |||
| ordered as listed above; see more in Section 6.7. A forwarding | strictly ordered as listed above; see more in Section 6.7. A | |||
| method may leverage any of the lower-order ones, but never one with a | forwarding method may leverage any of the lower-order ones, but never | |||
| higher order; for instance, when forwarding a packet along a segment, | one with a higher order; for instance, when forwarding a packet along | |||
| the router may use direct or indirect neighbors but cannot use a | a segment, the router may use direct or indirect neighbors but cannot | |||
| Track. The lower-order methods have a strict precedence, so the | use a Track. The lower-order methods have a strict precedence, so | |||
| router will always prefer a direct neighbor over an indirect one or a | the router will always prefer a direct neighbor over an indirect one | |||
| segment within the current RPL Instance over another Track. | or a segment within the current RPL Instance over another Track. | |||
| The second strict and partial order is between RPL Instances. It | The second order is strict and partial and applies between RPL | |||
| allows the RPL node to detect an error in the state installed by the | Instances. It allows the RPL node to detect an error in the state | |||
| PCE, e.g., after a desynchronization. That order must be defined by | installed by the PCE, e.g., after a desynchronization. That order | |||
| the administrator for the RPL domain and defines a DODAG of underlays | must be defined by the administrator for the RPL domain and defines a | |||
| with the main Instance as Root. The relation of RPL instances may be | DODAG of underlay RPL Instances with the main Instance as the Root. | |||
| represented as a DODAG of instances where the main instance is the | The relation of RPL Instances may be represented as a DODAG of | |||
| Root. The rule is that a RPL Instance may leverage another RPL | Instances where the main Instance is the Root. The rule is that a | |||
| instance as an underlay if and only if that other Instance is one of | RPL Instance may leverage another RPL Instance as an underlay if and | |||
| its descendants in the graph. Supporting this method is OPTIONAL for | only if that other Instance is one of its descendants in the graph. | |||
| nested Tracks and REQUIRED between a Track instance and the main | Supporting this method is OPTIONAL for nested Tracks and REQUIRED | |||
| instance. It may be done using network management or future | between a Track Instance and the main Instance. It may be done using | |||
| extensions to this specifications. When it is not communicated, the | network management or future extensions to this specifications. When | |||
| RPL nodes consider by default that all Track instances are children | the DODAG of underlay Instances is not provided, the RPL nodes | |||
| of the main instance, and they do not attempt to validate the order | consider by default that all Track Instances are children of the main | |||
| for nested Tracks, trusting the PCE implicitly. As a result, a | Instance, and they do not attempt to validate the order for nested | |||
| packet that is being forwarded along the main Instance may be | Tracks, trusting the PCE implicitly. As a result, a packet that is | |||
| encapsulated in any Track, but a packet that was forwarded along a | being forwarded along the main Instance may be encapsulated in any | |||
| Track MUST NOT be forwarded along the default route of the main | Track, but a packet that was forwarded along a Track MUST NOT be | |||
| Instance. | forwarded along the default route of the main Instance. | |||
| 3.3. Requirements | 3.3. Requirements | |||
| 3.3.1. Loose Source Routing | 3.3.1. Loose Source Routing | |||
| A RPL implementation operating in a very constrained LLN typically | A RPL implementation operating in a very constrained LLN typically | |||
| uses the Non-Storing Mode of Operation as represented in Figure 2. | uses the Non-Storing MOP as represented in Figure 2. In that mode, a | |||
| In that mode, a RPL node indicates a parent-child relationship to the | RPL node indicates a parent-child relationship to the Root, using a | |||
| Root, using a Destination Advertisement Object (DAO) that is unicast | Destination Advertisement Object (DAO) that is unicast from the node | |||
| from the node directly to the Root, and the Root typically builds a | directly to the Root, and the Root typically builds a source-routed | |||
| source-routed path to a destination down the DODAG by recursively | path to a destination down the DODAG by recursively concatenating | |||
| concatenating this information. | this information. | |||
| +-----+ | +-----+ | |||
| | | Border Router | | | Border Router | |||
| | | (RPL Root) | | | (RPL Root) | |||
| +-----+ ^ | | | +-----+ ^ | | | |||
| | | DAO | ACK | | | | DAO | ACK | | |||
| o o o o | | | Strict | o o o o | | | Strict | |||
| o o o o o o o o o | | | Source | o o o o o o o o o | | | Source | |||
| o o o o o o o o o o | | | Route | o o o o o o o o o o | | | Route | |||
| o o o o o o o o o | | | | o o o o o o o o o | | | | |||
| skipping to change at line 758 ¶ | skipping to change at line 768 ¶ | |||
| 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 source routing information to reach the destination if | can then apply source routing information to reach the destination if | |||
| the destination is also in the DODAG. Similarly, a packet coming | 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. This results in the wireless | be in a RPL domain reaches the Root. This results in the wireless | |||
| bandwidth near the Root being the limiting factor for all | bandwidth near the Root being the limiting factor for all | |||
| transmissions towards or within the domain, and the Root is a single | transmissions towards or within the domain, and the Root is a single | |||
| point of failure for all connectivity to nodes within its domain. | point of failure for all connectivity to nodes within its domain. | |||
| The RPL Root must add a source routing header to all downward | The RPL Root must add a Source Routing Header to all downward | |||
| packets. As a network grows, the size of the source routing header | packets. As a network grows, the size of the Source Routing Header | |||
| increases with the depth of the network. In some use cases, a RPL | increases with the depth of the network. In some use cases, a RPL | |||
| network forms long lines along physical structures like streets with | network forms long lines along physical structures like streets with | |||
| lighting. Limiting the packet size is beneficial to the energy | lighting. Limiting the packet size is beneficial to the energy | |||
| budget, directly for the current transmission and also indirectly | budget, directly for the current transmission and also indirectly | |||
| since it reduces the chances of frame loss and energy spent in | since it reduces the chances of frame loss and energy spent in | |||
| retries, e.g., by ARQ over one hop at Layer 2 or end to end at upper | retries, e.g., by ARQ over one hop at Layer 2 or end to end at upper | |||
| layers. Using smaller packets also reduces the chances of packet | layers. Using smaller packets also reduces the chances of packet | |||
| fragmentation, which is highly detrimental to the LLN operation, in | fragmentation, which is highly detrimental to the LLN operation, in | |||
| particular when fragments are forwarded but not recovered; see | particular when fragments are forwarded but not recovered; see | |||
| [RFC8930] compared to [RFC8931] for more details. | [RFC8930] compared to [RFC8931] for more details. | |||
| skipping to change at line 792 ¶ | skipping to change at line 802 ¶ | |||
| destination, the latency incurred, and the amount of energy and | destination, the latency incurred, and the amount of energy and | |||
| bandwidth that is consumed to reach itself and then back down, | bandwidth that is consumed to reach itself and then back down, | |||
| including possible fragmentation when encapsulating larger packets. | including possible fragmentation when encapsulating larger packets. | |||
| Enabling a shorter path that would not traverse the Root for select | Enabling a shorter path that would not traverse the Root for select | |||
| P2P sources/destinations may improve the latency, lower the | P2P sources/destinations may improve the latency, lower the | |||
| consumption of constrained resources, free bandwidth at the | consumption of constrained resources, free bandwidth at the | |||
| bottleneck near the Root, improve the delivery ratio, and reduce the | bottleneck near the Root, improve the delivery ratio, and reduce the | |||
| latency for those P2P flows; this would be a global benefit for all | latency for those P2P flows; this would be a global benefit for all | |||
| flows by reducing the load at the Root. | flows by reducing the load at the Root. | |||
| To limit the need for source route headers in deep networks, one | To limit the need for RPL Source Route Headers in deep networks, one | |||
| possibility is to store a routing state associated with the main | possibility is to store a routing state associated with the main | |||
| DODAG in select RPL routers down the path. The Root may elide the | DODAG in select RPL routers down the path. The Root may elide the | |||
| sequence of routers that is installed in the network from its source | sequence of routers that is installed in the network from its RPL | |||
| route header, which therefore becomes loose, in contrast to being | Source Route Header, which therefore becomes loose, in contrast to | |||
| strict in [RPL]. | being strict in [RPL]. | |||
| 3.3.2. Forward Routes | 3.3.2. Forward Routes | |||
| [RPL] optimizes P2MP routes from the Root, MP2P routes towards the | [RPL] optimizes P2MP routes from the Root, MP2P routes towards the | |||
| Root, and routes from/to the outside of the RPL domain when the Root | Root, and routes from/to the outside of the RPL domain when the Root | |||
| also serves as the border router. All routes are installed North- | also serves as the border router. All routes are installed North- | |||
| South (a.k.a. up/down) along the RPL DODAG. Peer-to-Peer (P2P) | South (a.k.a. up/down) along the RPL DODAG. Peer-to-Peer forward | |||
| forward routes in a RPL network will generally experience elongated | routes in a RPL network will generally experience elongated | |||
| (stretched) paths rather than direct (optimized) paths, since routing | (stretched) paths rather than direct (optimized) paths, since routing | |||
| between two nodes always happens via a common parent, as illustrated | between two nodes always happens via a common parent, as illustrated | |||
| in Figure 3: | in Figure 3: | |||
| ------+--------- | ------+--------- | |||
| | Internet | | Internet | |||
| +-----+ | +-----+ | |||
| | | Border Router | | | Border Router | |||
| | | (RPL Root) | | | (RPL Root) | |||
| +-----+ | +-----+ | |||
| skipping to change at line 887 ¶ | skipping to change at line 897 ¶ | |||
| 3.4. On Tracks | 3.4. On Tracks | |||
| 3.4.1. Building Tracks with RPL | 3.4.1. Building Tracks with RPL | |||
| The concept of a Track was introduced in the 6TiSCH architecture | The concept of a Track was introduced in the 6TiSCH architecture | |||
| [RFC9030] as a collection of potential paths that leverage redundant | [RFC9030] as a collection of potential paths that leverage redundant | |||
| forwarding solutions along the way. This can be a DODAG or a more | forwarding solutions along the way. This can be a DODAG or a more | |||
| complex structure that is only partially acyclic (e.g., per packet). | complex structure that is only partially acyclic (e.g., per packet). | |||
| With this specification, a Track is shaped as a DODAG, and following | With this specification, a Track is shaped as a DODAG, and following | |||
| the directed edges leads to a Track Ingress. Storing Mode P-DAO | the directed edges leads to a Track ingress. Storing Mode P-DAO | |||
| messages follow the direction of the edges to set up routes for | messages follow the direction of the edges to set up routes for | |||
| traffic that flows the other way, towards the Track Egress(es). If | traffic that flows the other way, towards the Track egress(es). If | |||
| there is a single Track Egress, then the Track is reversible so that | there is a single Track egress, then the Track is reversible so that | |||
| another DODAG may be formed by reversing the direction of each edge. | another DODAG may be formed by reversing the direction of each edge. | |||
| A node at the Ingress of more than one segment in a Track may use one | 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. | or more of these segments to forward a packet inside the Track. | |||
| A RPL Track is a collection of (one or more) parallel loose source- | A RPL Track is a collection of (one or more) parallel loose source- | |||
| routed sequences of nodes ordered from Ingress to Egress, each | routed sequences of nodes ordered from ingress to egress, each | |||
| forming a protection path. The nodes in a Track are directly | forming a protection path. The nodes in a Track are directly | |||
| connected, reachable via existing Tracks as illustrated in | connected, reachable via existing Tracks as illustrated in | |||
| Section 3.5.2.3 or joined with strict segments of other nodes as | Section 3.5.2.3 or joined with strict segments of other nodes as | |||
| shown in Section 3.5.1.3. The protection paths are expressed in RPL | shown in Section 3.5.1.3. The protection paths are expressed in RPL | |||
| Non-Storing Mode and require an encapsulation to add a Source Route | Non-Storing Mode and require an encapsulation to add a RPL Source | |||
| Header, whereas the segments are expressed in RPL Storing Mode. | Route Header, whereas the segments are expressed in RPL Storing Mode. | |||
| A path provides only one path between the Ingress and Egress. It | A path provides only one path between the ingress and egress. It | |||
| comprises exactly one protection path. A stand-alone segment | comprises exactly one protection path. A stand-alone segment | |||
| implicitly defines a path from its Ingress to Egress. | implicitly defines a path from its ingress to egress. | |||
| A complex Track forms a graph that provides a collection of potential | A Complex Track forms a graph that provides a collection of potential | |||
| paths to provide redundancy for the packets, either as a collection | paths to provide redundancy for the packets, either as a collection | |||
| of protection paths that may be parallel or interleaved at certain | of protection paths that may be parallel or interleaved at certain | |||
| points or as a more generic DODAG. | points or as a more generic DODAG. | |||
| 3.4.2. Tracks and RPL Instances | 3.4.2. Tracks and RPL Instances | |||
| Section 5.1 of [RPL] describes the RPL Instance and its encoding. | Section 5.1 of [RPL] describes the RPL Instance and its encoding. | |||
| There can be up to 128 Global RPL Instances, for which there can be | There can be up to 128 Global RPL Instances, for which there can be | |||
| one or more DODAGs, and there can be 64 Local RPL Instances, with a | one or more DODAGs, and there can be 64 Local RPL Instances, with a | |||
| namespace that is indexed by a DODAGID, where the DODAGID is a Unique | namespace that is indexed by a DODAGID, where the DODAGID is a Unique | |||
| skipping to change at line 932 ¶ | skipping to change at line 942 ¶ | |||
| specification expresses the value of the RPLInstanceID as a single | specification expresses the value of the RPLInstanceID as a single | |||
| integer between 128 and 191, representing both the Local | integer between 128 and 191, representing both the Local | |||
| RPLInstanceID in 0..63 in the rightmost bits and bit 0 set. | RPLInstanceID in 0..63 in the rightmost bits and bit 0 set. | |||
| 0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 | |||
| +-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
| |1|D| ID | Local RPLInstanceID in 0..63 | |1|D| ID | Local RPLInstanceID in 0..63 | |||
| +-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| \ \ | \ \ | |||
| \ Bit 1 is set to 0 in Track IDs | \ Bit 1 is set to 0 in TrackIDs | |||
| Bit 0 set to 1 signals a Local RPLInstanceID | Bit 0 set to 1 signals a Local RPLInstanceID | |||
| Figure 5: Local RPLInstanceID Encoding | Figure 5: Local RPLInstanceID Encoding | |||
| A Track typically forms an underlay to the main Instance and is | A Track typically forms an underlay to the main Instance and is | |||
| associated with a Local RPL Instance from which the RPLInstanceID is | associated with a Local RPL Instance from which the RPLInstanceID is | |||
| used as the TrackID. When a packet is placed on a Track, it is IP- | used as the TrackID. When a packet is placed on a Track, it is IP- | |||
| in-IP encapsulated with a RPL Option containing RPL Packet | in-IP encapsulated with a RPL Option containing RPL Packet | |||
| Information (RPI) that signals the RPLInstanceID. The encapsulating | Information (RPI) that signals the RPLInstanceID. The encapsulating | |||
| source IP address and RPI Instance are set to the Track Ingress IP | source IP address and RPI Instance are set to the Track ingress IP | |||
| address and Local RPLInstanceID, respectively; see more in | address and Local RPLInstanceID, respectively; see more in | |||
| Section 6.3. | Section 6.3. | |||
| A Track typically offers service protection across several protection | A Track typically offers service protection across several protection | |||
| paths. As a degraded form of a Track, a path made of a single | paths. As a degraded form of a Track, a path made of a single | |||
| protection path (i.e., offering no protection) can be used as an | protection path (i.e., offering no protection) can be used as an | |||
| alternative to a segment for forwarding along a RPL Instance. In | alternative to a segment for forwarding along a RPL Instance. In | |||
| that case, instead of following native routes along the instance, the | that case, instead of following native routes along the Instance, the | |||
| packets are encapsulated to signal a more-specific source-routed path | packets are encapsulated to signal a more-specific source-routed path | |||
| between the loose hops in the encapsulated source routing header. | between the loose hops in the encapsulated Source Routing Header. | |||
| If the encapsulated packet follows a global instance, then the | If the encapsulated packet follows a Global Instance, then the | |||
| protection path may be part of that global instance as well, e.g., | protection path may be part of that Global Instance as well, e.g., | |||
| the global instance of the main DODAG. This can only be done for | the Global Instance of the main DODAG. This can only be done for | |||
| global instances because the Ingress node that encapsulates the | Global Instances because the ingress node that encapsulates the | |||
| packets over the protection path is not the Root of the instance, so | packets over the protection path is not the Root of the Instance, so | |||
| the source address of the encapsulated packet cannot be used to | the source address of the encapsulated packet cannot be used to | |||
| determine the Track along the way. | determine the Track along the way. | |||
| 3.5. Path Signaling | 3.5. Path Signaling | |||
| This specification enables setting up a P-Route along either a | This specification enables setting up a P-Route along either a | |||
| protection path or a segment. A P-Route is installed and maintained | protection path or a segment. A P-Route is installed and maintained | |||
| by the Root of the main DODAG using an extended RPL DAO message | by the Root of the main DODAG using an extended RPL DAO message | |||
| called a P-DAO, and a Track is composed of the combination of one or | called a P-DAO, and a Track is composed of the combination of one or | |||
| more P-Routes. In order to clarify the techniques that may be used | more P-Routes. In order to clarify the techniques that may be used | |||
| skipping to change at line 982 ¶ | skipping to change at line 992 ¶ | |||
| and E as opposed to via the Root: | and E as opposed to via the Root: | |||
| /===> F | /===> F | |||
| A ===> B ===> C ===> D===> E < | A ===> B ===> C ===> D===> E < | |||
| \===> G | \===> G | |||
| Figure 6: Reference Track | Figure 6: Reference Track | |||
| A P-DAO message for a Track signals the TrackID in the RPLInstanceID | A P-DAO message for a Track signals the TrackID in the RPLInstanceID | |||
| field. In the case of a Local RPL Instance, the address of the Track | field. In the case of a Local RPL Instance, the address of the Track | |||
| Ingress is used as the source to encapsulate packets along the Track. | ingress is used as the source to encapsulate packets along the Track. | |||
| The Track is signaled in the DODAGID field of the P-DAO Base Object; | The Track is signaled in the DODAGID field of the P-DAO Base Object; | |||
| see Figure 8. | see Figure 8. | |||
| This specification introduces the Via Information Option (VIO) to | This specification introduces the Via Information Option (VIO) to | |||
| signal a sequence of hops in a protection path or a segment in the | signal a sequence of hops in a protection path or a segment in the | |||
| P-DAO messages, either in Storing Mode (SM-VIO) or in Non-Storing | P-DAO messages, either in Storing Mode (SM-VIO) or in Non-Storing | |||
| Mode (NSM-VIO). One P-DAO message contains a single VIO, which is | Mode (NSM-VIO). One P-DAO message contains a single VIO, which is | |||
| associated to one or more RPL Target Options that signal the | associated to one or more RPL Target Options that signal the | |||
| destination IPv6 addresses that can reached along the Track (see more | destination IPv6 addresses that can reached along the Track (see more | |||
| in Section 5.3). | in Section 5.3). | |||
| Before diving deeper into Track and segment signaling and operation, | Before diving deeper into Track and segment signaling and operation, | |||
| this section provides examples of how route projection works through | this section provides examples of how route projection works through | |||
| variations of a simple example. This simple example illustrates the | variations of a simple example. This simple example illustrates the | |||
| case of host routes, though RPL Targets can also be prefixes. | case of host routes, though RPL Targets can also be prefixes. | |||
| Conventionally, we use ==> to represent a strict hop and --> for a | Conventionally, we use ==> to represent a strict hop and --> for a | |||
| loose hop. We use "-to-", such as in C==>D==>E-to-F, to represent | loose hop. We use "-to-", such as in C==>D==>E-to-F, to represent | |||
| coma-separated Targets, e.g., F is a Target for segment C==>D==>E. | comma-separated Targets, e.g., F is a Target for segment C==>D==>E. | |||
| In the example below, A is the Track Ingress and E is the Track | In the example below, A is the Track ingress and E is the Track | |||
| Egress. C is a stitching point. F and G are "external" Targets for | egress. C is a stitching point. F and G are "external" Targets for | |||
| the Track and become reachable from A via Track A (Ingress) to E | the Track and become reachable from A via Track A (ingress) to E | |||
| (Egress and implicit Target in Non-Storing Mode), leading to F and G | (egress and implicit Target in Non-Storing Mode), leading to F and G | |||
| (explicit Targets). | (explicit Targets). | |||
| In a general manner, the desired outcome is as follows: | In a general manner, the desired outcome is as follows: | |||
| * Targets are E, F, and G | * Targets are E, F, and G | |||
| * P-DAO 1 signals C==>D==>E | * P-DAO 1 signals C==>D==>E | |||
| * P-DAO 2 signals A==>B==>C | * P-DAO 2 signals A==>B==>C | |||
| * P-DAO 3 signals F and G via the A-->E Track | * P-DAO 3 signals F and G via the A-->E Track | |||
| P-DAO 3 may be omitted if P-DAOs 1 and 2 signal F and G as Targets. | P-DAO 3 may be omitted if P-DAOs 1 and 2 signal F and G as Targets. | |||
| Loose sequences of hops are expressed in Non-Storing Mode; this is | Loose sequences of hops are expressed in Non-Storing Mode; this is | |||
| why P-DAO 3 contains an NSM-VIO. With this specification: | why P-DAO 3 contains an NSM-VIO. With this specification: | |||
| * The DODAGID to be used by the Ingress as the source address is | * The DODAGID to be used by the ingress as the source address is | |||
| signaled in the DAO Base Object (see Figure 8). | signaled in the DAO Base Object (see Figure 8). | |||
| * The via list in the VIO is encoded as an SRH-6LoRH (see | * The via list in the VIO is encoded as an SRH-6LoRH (see | |||
| Figure 16), and it starts with the address of the first-hop node | Figure 16), and it starts with the address of the first-hop node | |||
| after the Ingress node in the loose hop sequence. | after the ingress node in the loose hop sequence. | |||
| * The via list ends with the address of the Egress node. | * The via list ends with the address of the egress node. | |||
| | Note 1: The Egress of a Non-Storing Mode P-Route is implicitly | | Note 1: The egress of a Non-Storing Mode P-Route is implicitly | |||
| | a target; it is not listed in the RPL Target Options but is | | a target; it is not listed in the RPL Target Options but is | |||
| | still accounted for as if it was. The only exception is when | | still accounted for as if it was. The only exception is when | |||
| | the Egress is the only address listed in the VIO, in which case | | the egress is the only address listed in the VIO, in which case | |||
| | it would indicate via itself, which would be nonsensical. | | it would indicate via itself, which would be nonsensical. | |||
| | Note 2: By design, the list of nodes in a VIO in Non-Storing | | Note 2: By design, the list of nodes in a VIO in Non-Storing | |||
| | Mode is exactly the list that shows in the encapsulation SRH. | | Mode is exactly the list that shows in the encapsulation SRH. | |||
| | So in the cases detailed below, if the Mode of the P-DAO is | | So in the cases detailed below, if the Mode of the P-DAO is | |||
| | Non-Storing, then the VIO row can be read as indicating the SRH | | Non-Storing, then the VIO row can be read as indicating the SRH | |||
| | as well. | | as well. | |||
| 3.5.1. Using Storing Mode Segments | 3.5.1. Using Storing Mode Segments | |||
| skipping to change at line 1068 ¶ | skipping to change at line 1078 ¶ | |||
| * P-DAO 2 signals A==>B==>C-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 successfully | Storing Mode P-DAO 1 is sent to E, and when it is successfully | |||
| acknowledged, Storing Mode P-DAO 2 is sent to C as follows: | acknowledged, Storing Mode P-DAO 2 is sent to C as follows: | |||
| +====================+==============+==============+ | +====================+==============+==============+ | |||
| | Field | P-DAO 1 to E | P-DAO 2 to C | | | Field | P-DAO 1 to E | P-DAO 2 to C | | |||
| +====================+==============+==============+ | +====================+==============+==============+ | |||
| | Mode | Storing | Storing | | | Mode | Storing | Storing | | |||
| +====================+--------------+--------------+ | +====================+--------------+--------------+ | |||
| | Track Ingress | A | A | | | Track ingress | A | A | | |||
| +====================+--------------+--------------+ | +====================+--------------+--------------+ | |||
| | (DODAGID, TrackID) | (A, 129) | (A, 129) | | | (DODAGID, TrackID) | (A, 129) | (A, 129) | | |||
| +====================+--------------+--------------+ | +====================+--------------+--------------+ | |||
| | SegmentID | 1 | 2 | | | SegmentID | 1 | 2 | | |||
| +====================+--------------+--------------+ | +====================+--------------+--------------+ | |||
| | VIO | C, D, E | A, B, C | | | VIO | C, D, E | A, B, C | | |||
| +====================+--------------+--------------+ | +====================+--------------+--------------+ | |||
| | Targets | F, G | F, G | | | Targets | F, G | F, G | | |||
| +====================+--------------+--------------+ | +====================+--------------+--------------+ | |||
| skipping to change at line 1162 ¶ | skipping to change at line 1172 ¶ | |||
| * P-DAO 3 signals F and G via the A-->E-to-F,G Track | * P-DAO 3 signals F and G via the A-->E-to-F,G Track | |||
| Storing Mode P-DAOs 1 and 2 and Non-Storing Mode P-DAO 3 are sent to | Storing Mode P-DAOs 1 and 2 and Non-Storing Mode P-DAO 3 are sent to | |||
| E, C, and A, respectively, as follows: | E, C, and A, respectively, as follows: | |||
| +====================+==============+==============+==============+ | +====================+==============+==============+==============+ | |||
| | | P-DAO 1 to E | P-DAO 2 to C | P-DAO 3 to A | | | | P-DAO 1 to E | P-DAO 2 to C | P-DAO 3 to A | | |||
| +====================+==============+==============+==============+ | +====================+==============+==============+==============+ | |||
| | Mode | Storing | Storing | Non-Storing | | | Mode | Storing | Storing | Non-Storing | | |||
| +====================+--------------+--------------+--------------+ | +====================+--------------+--------------+--------------+ | |||
| | Track Ingress | A | A | A | | | Track ingress | A | A | A | | |||
| +====================+--------------+--------------+--------------+ | +====================+--------------+--------------+--------------+ | |||
| | (DODAGID, TrackID) | (A, 129) | (A, 129) | (A, 129) | | | (DODAGID, TrackID) | (A, 129) | (A, 129) | (A, 129) | | |||
| +====================+--------------+--------------+--------------+ | +====================+--------------+--------------+--------------+ | |||
| | SegmentID | 1 | 2 | 3 | | | SegmentID | 1 | 2 | 3 | | |||
| +====================+--------------+--------------+--------------+ | +====================+--------------+--------------+--------------+ | |||
| | VIO | C, D, E | A, B, C | E | | | VIO | C, D, E | A, B, C | E | | |||
| +====================+--------------+--------------+--------------+ | +====================+--------------+--------------+--------------+ | |||
| | Targets | E | E | F, G | | | Targets | E | E | F, G | | |||
| +====================+--------------+--------------+--------------+ | +====================+--------------+--------------+--------------+ | |||
| skipping to change at line 1263 ¶ | skipping to change at line 1273 ¶ | |||
| * P-DAO 3 signals F and G via the A-->C-->E-to-(E),F,G Track | * P-DAO 3 signals F and G via the A-->C-->E-to-(E),F,G Track | |||
| Storing Mode P-DAOs 1 and 2 and Non-Storing Mode P-DAO 3 are sent to | Storing Mode P-DAOs 1 and 2 and Non-Storing Mode P-DAO 3 are sent to | |||
| E, B, and A, respectively, as follows: | E, B, and A, respectively, as follows: | |||
| +====================+==============+==============+==============+ | +====================+==============+==============+==============+ | |||
| | | P-DAO 1 to E | P-DAO 2 to B | P-DAO 3 to A | | | | P-DAO 1 to E | P-DAO 2 to B | P-DAO 3 to A | | |||
| +====================+==============+==============+==============+ | +====================+==============+==============+==============+ | |||
| | Mode | Storing | Storing | Non-Storing | | | Mode | Storing | Storing | Non-Storing | | |||
| +====================+--------------+--------------+--------------+ | +====================+--------------+--------------+--------------+ | |||
| | Track Ingress | A | A | A | | | Track ingress | A | A | A | | |||
| +====================+--------------+--------------+--------------+ | +====================+--------------+--------------+--------------+ | |||
| | (DODAGID, TrackID) | (A, 129) | (A, 129) | (A, 129) | | | (DODAGID, TrackID) | (A, 129) | (A, 129) | (A, 129) | | |||
| +====================+--------------+--------------+--------------+ | +====================+--------------+--------------+--------------+ | |||
| | SegmentID | 1 | 2 | 3 | | | SegmentID | 1 | 2 | 3 | | |||
| +====================+--------------+--------------+--------------+ | +====================+--------------+--------------+--------------+ | |||
| | VIO | C, D, E | A, B | C, E | | | VIO | C, D, E | A, B | C, E | | |||
| +====================+--------------+--------------+--------------+ | +====================+--------------+--------------+--------------+ | |||
| | Targets | E | B, C | F, G | | | Targets | E | B, C | F, G | | |||
| +====================+--------------+--------------+--------------+ | +====================+--------------+--------------+--------------+ | |||
| Table 7: P-DAO Messages | Table 7: P-DAO Messages | |||
| Note in the table above that the segment can terminate at the loose | Note in the table 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 | 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 | with P-DAO 2. Both methods are possible on any segment joined by a | |||
| loose protection path. P-DAO 1 generates more signaling since E is | loose protection path. P-DAO 1 generates more signaling since E is | |||
| the segment Egress when D could be, but a benefit is that it | the segment egress when D could be, but a benefit is that it | |||
| validates that the connectivity between D and E still exists. | validates that the connectivity between D and E still exists. | |||
| As a result, the RIBs are set as follows: | As a result, the RIBs are set as follows: | |||
| +======+=============+=========+=============+==========+ | +======+=============+=========+=============+==========+ | |||
| | Node | Destination | Origin | Next Hop(s) | TrackID | | | Node | Destination | Origin | Next Hop(s) | TrackID | | |||
| +======+=============+=========+=============+==========+ | +======+=============+=========+=============+==========+ | |||
| | E | F, G | P-DAO 1 | Neighbor | (A, 129) | | | E | F, G | P-DAO 1 | Neighbor | (A, 129) | | |||
| +------+-------------+---------+-------------+----------+ | +------+-------------+---------+-------------+----------+ | |||
| | D | E | P-DAO 1 | Neighbor | (A, 129) | | | D | E | P-DAO 1 | Neighbor | (A, 129) | | |||
| skipping to change at line 1363 ¶ | skipping to change at line 1373 ¶ | |||
| 3.5.2.1. Stitched Tracks | 3.5.2.1. Stitched Tracks | |||
| Non-Storing Mode P-DAO 1 and 2 are sent to C and A, respectively, as | Non-Storing Mode P-DAO 1 and 2 are sent to C and A, respectively, as | |||
| follows: | follows: | |||
| +====================+==============+==============+ | +====================+==============+==============+ | |||
| | | P-DAO 1 to C | P-DAO 2 to A | | | | P-DAO 1 to C | P-DAO 2 to A | | |||
| +====================+==============+==============+ | +====================+==============+==============+ | |||
| | Mode | Non-Storing | Non-Storing | | | Mode | Non-Storing | Non-Storing | | |||
| +====================+--------------+--------------+ | +====================+--------------+--------------+ | |||
| | Track Ingress | C | A | | | Track ingress | C | A | | |||
| +====================+--------------+--------------+ | +====================+--------------+--------------+ | |||
| | (DODAGID, TrackID) | (C, 131) | (A, 131) | | | (DODAGID, TrackID) | (C, 131) | (A, 131) | | |||
| +====================+--------------+--------------+ | +====================+--------------+--------------+ | |||
| | SegmentID | 1 | 1 | | | SegmentID | 1 | 1 | | |||
| +====================+--------------+--------------+ | +====================+--------------+--------------+ | |||
| | VIO | D, E | B, C | | | VIO | D, E | B, C | | |||
| +====================+--------------+--------------+ | +====================+--------------+--------------+ | |||
| | Targets | F, G | E, F, G | | | Targets | F, G | E, F, G | | |||
| +====================+--------------+--------------+ | +====================+--------------+--------------+ | |||
| skipping to change at line 1405 ¶ | skipping to change at line 1415 ¶ | |||
| | " | C, E, F, G | P-DAO 2 | B, C | (A, 131) | | | " | C, E, F, G | P-DAO 2 | B, C | (A, 131) | | |||
| +------+-------------+---------+-------------+----------+ | +------+-------------+---------+-------------+----------+ | |||
| Table 11: RIB Settings | Table 11: RIB Settings | |||
| Packets originated at A to E, F, and G could be generated with the | Packets originated at A to E, F, and G could be generated with the | |||
| RPI and the SRH and no encapsulation. Alternatively, A may generate | RPI and the SRH and no encapsulation. Alternatively, A may generate | |||
| a native packet to the target and then encapsulate it with an RPI and | a native packet to the target and then encapsulate it with an RPI and | |||
| an SRH indicating the source-routed path leading to E, as it would | an SRH indicating the source-routed path leading to E, as it would | |||
| for a packet that it routes coming from another node. This is | for a packet that it routes coming from another node. This is | |||
| effectively the same case as for packets generated by the root in a | effectively the same case as for packets generated by the Root in a | |||
| RPL network in Non-Storing Mode; see Section 8.1.3 of [RFC9008]. The | RPL network in Non-Storing Mode; see Section 8.1.3 of [RFC9008]. The | |||
| latter is often preferred since it leads to a single code path, and | latter is often preferred since it leads to a single code path, and | |||
| when the destination is F or G, it does not need to understand and | when the destination is F or G, it does not need to understand and | |||
| process the RPI or the SRH. Either way, the packets to E, F, or G | process the RPI or the SRH. Either way, the packets to E, F, or G | |||
| carry an SRH via B and C, and when they reach C, C needs to | carry an SRH via B and C, and when they reach C, C needs to | |||
| encapsulate them again to add an SRH via D and E. The encapsulating | encapsulate them again to add an SRH via D and E. The encapsulating | |||
| headers of packets that are forwarded along the Track between C and E | headers of packets that are forwarded along the Track between C and E | |||
| have the following settings: | have the following settings: | |||
| +========+=====================+==========================+=========+ | +========+=====================+==========================+=========+ | |||
| skipping to change at line 1464 ¶ | skipping to change at line 1474 ¶ | |||
| * P-DAO 3 signals F and G via the A-->E-to-F,G Track | * P-DAO 3 signals F and G via the A-->E-to-F,G Track | |||
| Non-Storing Mode P-DAO 1 is sent to C, and Non-Storing Mode P-DAOs 2 | Non-Storing Mode P-DAO 1 is sent to C, and Non-Storing Mode P-DAOs 2 | |||
| and 3 are sent to A, as follows: | and 3 are sent to A, as follows: | |||
| +====================+==============+==============+==============+ | +====================+==============+==============+==============+ | |||
| | | P-DAO 1 to C | P-DAO 2 to A | P-DAO 3 to A | | | | P-DAO 1 to C | P-DAO 2 to A | P-DAO 3 to A | | |||
| +====================+==============+==============+==============+ | +====================+==============+==============+==============+ | |||
| | Mode | Non-Storing | Non-Storing | Non-Storing | | | Mode | Non-Storing | Non-Storing | Non-Storing | | |||
| +====================+--------------+--------------+--------------+ | +====================+--------------+--------------+--------------+ | |||
| | Track Ingress | C | A | A | | | Track ingress | C | A | A | | |||
| +====================+--------------+--------------+--------------+ | +====================+--------------+--------------+--------------+ | |||
| | (DODAGID, TrackID) | (C, 131) | (A, 129) | (A, 141) | | | (DODAGID, TrackID) | (C, 131) | (A, 129) | (A, 141) | | |||
| +====================+--------------+--------------+--------------+ | +====================+--------------+--------------+--------------+ | |||
| | SegmentID | 1 | 1 | 1 | | | SegmentID | 1 | 1 | 1 | | |||
| +====================+--------------+--------------+--------------+ | +====================+--------------+--------------+--------------+ | |||
| | VIO | D, E | B, C | E | | | VIO | D, E | B, C | E | | |||
| +====================+--------------+--------------+--------------+ | +====================+--------------+--------------+--------------+ | |||
| | Targets | | E | F, G | | | Targets | | E | F, G | | |||
| +====================+--------------+--------------+--------------+ | +====================+--------------+--------------+--------------+ | |||
| Table 13: P-DAO Messages | Table 13: P-DAO Messages | |||
| Note in the table above that E is an implicit Target in P-DAO 1 and | Note in the table above that E is an implicit Target in P-DAO 1 and | |||
| so is C in P-DAO 2. As Non-Storing Mode Egress node addresses, they | so is C in P-DAO 2. As Non-Storing Mode egress node addresses, they | |||
| are not listed in the respective RTOs. | are not listed in the respective RTOs. | |||
| As a result, the RIBs are set as follows: | As a result, the RIBs are set as follows: | |||
| +======+=============+=========+=============+==========+ | +======+=============+=========+=============+==========+ | |||
| | Node | Destination | Origin | Next Hop(s) | TrackID | | | Node | Destination | Origin | Next Hop(s) | TrackID | | |||
| +======+=============+=========+=============+==========+ | +======+=============+=========+=============+==========+ | |||
| | E | F, G | ND | Neighbor | Any | | | E | F, G | ND | Neighbor | Any | | |||
| +------+-------------+---------+-------------+----------+ | +------+-------------+---------+-------------+----------+ | |||
| | D | E | ND | Neighbor | Any | | | D | E | ND | Neighbor | Any | | |||
| skipping to change at line 1564 ¶ | skipping to change at line 1574 ¶ | |||
| * P-DAO 3 signals F and G via the A-->C-->E-to-(E),F,G Track | * P-DAO 3 signals F and G via the A-->C-->E-to-(E),F,G Track | |||
| Non-Storing Mode P-DAO 1 is sent to C, and Non-Storing Mode P-DAOs 2 | Non-Storing Mode P-DAO 1 is sent to C, and Non-Storing Mode P-DAOs 2 | |||
| and 3 are sent to A, as follows: | and 3 are sent to A, as follows: | |||
| +====================+==============+==============+==============+ | +====================+==============+==============+==============+ | |||
| | | P-DAO 1 to C | P-DAO 2 to A | P-DAO 3 to A | | | | P-DAO 1 to C | P-DAO 2 to A | P-DAO 3 to A | | |||
| +====================+==============+==============+==============+ | +====================+==============+==============+==============+ | |||
| | Mode | Non-Storing | Non-Storing | Non-Storing | | | Mode | Non-Storing | Non-Storing | Non-Storing | | |||
| +====================+--------------+--------------+--------------+ | +====================+--------------+--------------+--------------+ | |||
| | Track Ingress | C | A | A | | | Track ingress | C | A | A | | |||
| +====================+--------------+--------------+--------------+ | +====================+--------------+--------------+--------------+ | |||
| | (DODAGID, TrackID) | (C, 131) | (A, 129) | (A, 141) | | | (DODAGID, TrackID) | (C, 131) | (A, 129) | (A, 141) | | |||
| +====================+--------------+--------------+--------------+ | +====================+--------------+--------------+--------------+ | |||
| | SegmentID | 1 | 1 | 1 | | | SegmentID | 1 | 1 | 1 | | |||
| +====================+--------------+--------------+--------------+ | +====================+--------------+--------------+--------------+ | |||
| | VIO | D, E | B | C, E | | | VIO | D, E | B | C, E | | |||
| +====================+--------------+--------------+--------------+ | +====================+--------------+--------------+--------------+ | |||
| | Targets | | C | F, G | | | Targets | | C | F, G | | |||
| +====================+--------------+--------------+--------------+ | +====================+--------------+--------------+--------------+ | |||
| skipping to change at line 1678 ¶ | skipping to change at line 1688 ¶ | |||
| * From P-DAO 1: C encapsulates the packet with a destination of E in | * From P-DAO 1: C encapsulates the packet with a destination of E in | |||
| the Track signaled by P-DAO 1. The outer header has source C, | the Track signaled by P-DAO 1. The outer header has source C, | |||
| destination D, an SRH that indicates E as the next loose hop, and | destination D, an SRH that indicates E as the next loose hop, and | |||
| an RPI indicating a TrackID of 131 from C's namespace. E | an RPI indicating a TrackID of 131 from C's namespace. E | |||
| decapsulates. | decapsulates. | |||
| 3.6. Complex Tracks | 3.6. Complex Tracks | |||
| To increase the reliability of the P2P transmission, this | To increase the reliability of the P2P transmission, this | |||
| specification enables building a collection of protection paths | specification enables building a collection of protection paths | |||
| between the same Ingress and Egress Nodes and combining them within | between the same ingress and egress Nodes and combining them within | |||
| the same TrackID, as shown in Figure 7. Protection paths may be | the same TrackID, as shown in Figure 7. Protection paths may be | |||
| interleaved at the edges of loose hops or remain parallel. | interleaved at the edges of loose hops or remain parallel. | |||
| The segments that join the loose hops of a protection path are | The segments that join the loose hops of a protection path are | |||
| installed with the same TrackID as the protection path. But each | installed with the same TrackID as the protection path. But each | |||
| individual protection path and segment has its own P-RouteID that | individual protection path and segment has its own P-RouteID that | |||
| allows it to be managed separately. Two protection paths of the same | allows it to be managed separately. Two protection paths of the same | |||
| Track may cross at a common node that participates to a segment of | Track may cross at a common node that is a member of a segment of | |||
| each protection path or that may be joined by additional segments. | each protection path or may be joined by additional segments. The | |||
| The final path of a packet may then be the result of interleaving | final path of a packet may then be the result of interleaving those | |||
| those two (and possibly more) protection paths. In that case, the | two (and possibly more) protection paths. In that case, the common | |||
| common node has more than one next hop in its RIB associated to the | node has more than one next hop in its RIB associated to the Track | |||
| Track but no specific signal in the packet to indicate which segment | but no specific signal in the packet to indicate which segment is | |||
| is being followed. A next hop that can reach the loose hop is | being followed. A next hop that can reach the loose hop is selected. | |||
| selected. | ||||
| < Controller Plane Functions > | < Controller Plane Functions > | |||
| Southbound API | Southbound API | |||
| _-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._- | _-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._- | |||
| _-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._- | _-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._- | |||
| +----------+ | +----------+ | |||
| | RPL Root | | | RPL Root | | |||
| skipping to change at line 1738 ¶ | skipping to change at line 1747 ¶ | |||
| <- Protection path 3 via B, H, E -> | <- Protection path 3 via B, H, E -> | |||
| ) | ) | |||
| ( | ( | |||
| ( ) | ( ) | |||
| Figure 7: Segments and Tracks | Figure 7: Segments and Tracks | |||
| Note that while this specification enables building both segments | Note that while this specification enables building both segments | |||
| inside a protection path, for instance segment 2 above which is | inside a protection path, for instance, segment 2 above (which is | |||
| within protection path 1, and Inter-protection-path segments (i.e., | within protection path 1) and Inter-protection-path segments (i.e., | |||
| North-South), for instance segment 5 above which joins protection | North-South) such as segment 5 above (which joins protection paths 1 | |||
| path 1 and protection path 2, it does not signal to the Ingress which | and 2), it does not signal which Inter-protection-path segments are | |||
| Inter-protection-path segments are available, so the use of North- | available to the ingress, so the use of North-South segments and | |||
| South segments and associated path redundancy functions is currently | associated path redundancy functions is currently limited. The only | |||
| limited. The only possibility available at this time is to define | possibility available at this time is to define overlapping | |||
| overlapping protection paths as illustrated in Figure 7, with | protection paths as illustrated in Figure 7, with protection path 3 | |||
| protection path 3 that is congruent with protection path 1 until node | that is congruent with protection path 1 until node B and that is | |||
| B and that is congruent with protection path 2 from node H on, | congruent with protection path 2 from node H on, abstracting segment | |||
| abstracting segment 5 as a forward segment. | 5 as a forward segment. | |||
| 3.7. Scope and Expectations | 3.7. Scope and Expectations | |||
| 3.7.1. External Dependencies | 3.7.1. External Dependencies | |||
| This specification expects that the main DODAG is operated in RPL | This specification expects that the main DODAG is operated in RPL | |||
| Non-Storing Mode to sustain the exchanges with the Root. Based on | Non-Storing Mode to sustain the exchanges with the Root. Based on | |||
| its comprehensive knowledge of the parent-child relationship, the | its comprehensive knowledge of the parent-child relationship, the | |||
| Root can form an abstracted view of the whole DODAG topology. This | Root can form an abstracted view of the whole DODAG topology. This | |||
| document adds the capability for nodes to advertise additional | document adds the capability for nodes to advertise additional | |||
| skipping to change at line 1775 ¶ | skipping to change at line 1784 ¶ | |||
| each node must be computed to fit within the node's memory, and the | each node must be computed to fit within the node's memory, and the | |||
| amount of rerouted traffic must fit within the capabilities of the | amount of rerouted traffic must fit within the capabilities of the | |||
| transmission links. The methods used to learn the node capabilities | transmission links. The methods used to learn the node capabilities | |||
| and the resources that are available in the devices and in the | and the resources that are available in the devices and in the | |||
| network are out of scope for this document. The method to capture | network are out of scope for this document. The method to capture | |||
| and report the LLN link capacity and reliability statistics are also | and report the LLN link capacity and reliability statistics are also | |||
| out of scope. They may be fetched from the nodes through network | out of scope. They may be fetched from the nodes through network | |||
| management functions or other forms of telemetry such as Operations, | management functions or other forms of telemetry such as Operations, | |||
| Administration, and Maintenance (OAM). | Administration, and Maintenance (OAM). | |||
| 3.7.2. Positioning Versus Related IETF Standards | 3.7.2. Relationship to Other IETF Specifications | |||
| 3.7.2.1. Extending 6TiSCH | 3.7.2.1. Extending 6TiSCH | |||
| The 6TiSCH architecture [RFC9030] leverages a centralized model that | The 6TiSCH architecture [RFC9030] leverages a centralized model that | |||
| is similar to that of the DetNet architecture [RFC8655], whereby the | is similar to that of the DetNet architecture [RFC8655], whereby the | |||
| device resources and capabilities are exposed to an external | device resources and capabilities are exposed to an external | |||
| controller that installs routing states into the network based on its | controller that installs routing states into the network based on its | |||
| own objective functions that reside in that external entity. | own Objective Functions that reside in that external entity. | |||
| 3.7.2.2. Mapping to DetNet | 3.7.2.2. Mapping to DetNet | |||
| DetNet Forwarding Nodes only understand the simple 1-to-1 forwarding | DetNet forwarding nodes only understand the simple 1-to-1 forwarding | |||
| sublayer transport operation along a segment whereas the more | sublayer transport operation along a segment whereas the more | |||
| sophisticated Relay nodes can also provide service sublayer functions | sophisticated relay nodes can also provide service sublayer functions | |||
| such as Replication and Elimination. | such as Replication and Elimination. | |||
| One possible mapping between DetNet and this specification is to | One possible mapping between DetNet and this specification is to | |||
| signal the Relay Nodes as the hops of a protection path and the | signal the relay nodes as the hops of a protection path and the | |||
| forwarding nodes as the hops in a segment that join the Relay nodes | forwarding nodes as the hops in a segment that join the relay nodes | |||
| as illustrated in Figure 7. | as illustrated in Figure 7. | |||
| 3.7.2.3. Leveraging PCE | 3.7.2.3. Leveraging PCE | |||
| With DetNet and 6TiSCH, the component of the controller that is | With DetNet and 6TiSCH, the component of the controller that is | |||
| responsible for computing routes is a PCE. The PCE computes its | responsible for computing routes is a PCE. The PCE computes its | |||
| routes based on its own objective functions, as described in | routes based on its own Objective Functions, as described in | |||
| [RFC4655], and typically controls the routes using the PCE | [RFC4655], and typically controls the routes using the PCE | |||
| Communication Protocol (PCEP) [RFC5440]. While this specification | Communication Protocol (PCEP) [RFC5440]. While this specification | |||
| expects a PCE, and while PCEP might effectively be used between the | 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 | Root and the PCE, the control protocol between the PCE and the Root | |||
| is out of scope. | is out of scope. | |||
| This specification also expects a single PCE with a full view of the | This specification also expects a single PCE with a full view of the | |||
| network. Distributing the PCE function for a large network is out of | network. Distributing the PCE function for a large network is out of | |||
| scope. This specification uses the RPL Root as a proxy to the PCE. | scope. This specification uses the RPL Root as a proxy to the PCE. | |||
| The PCE may be collocated with the Root or reside in an external | The PCE may be collocated with the Root or may reside in an external | |||
| controller. In that case, the protocol between the Root and the PCE | Controller. In the latter case, the protocol between the Root and | |||
| is out of scope and mapped to RPL inside the DODAG; one possibility | the PCE is out of scope and mapped to RPL inside the DODAG; one | |||
| is for the Root to transmit to the PCEs the information it received | possible control protocol between the Root and external PCE is for | |||
| in RPL DAOs including all the SIOs that detail the parent/child and | the Root to transmit the information it received in the RPL DAOs, | |||
| sibling information. | including all the SIOs that detail the parent/child and sibling | |||
| information, to the PCEs. | ||||
| The algorithm to compute the paths, the protocol used by the PCE, and | The algorithm to compute the paths, the protocol used by the PCE, and | |||
| the metrics and link statistics involved in the computation are also | the metrics and link statistics involved in the computation are also | |||
| out of scope. The effectiveness of the route computation by the PCE | 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 | depends on the quality of the metrics that are reported from the RPL | |||
| network. Which metrics are used and how they are reported are out of | network. Which metrics are used and how they are reported are out of | |||
| scope, but the expectation is that they are mostly of a long-term, | scope, but the expectation is that they are mostly of a long-term, | |||
| statistical nature and provide visibility on link throughput, | statistical nature and provide visibility on link throughput, | |||
| latency, stability, and availability over relatively long periods. | latency, stability, and availability over relatively long periods. | |||
| 3.7.2.4. Providing for RAW | 3.7.2.4. Providing for RAW | |||
| The RAW architecture [RAW-ARCH] extends the definition of Track, as | The RAW architecture [RAW-ARCH] extends the definition of Track as | |||
| being composed of forward directional segments and North-South | being composed of forward directional segments and North-South | |||
| bidirectional segments, to enable additional path diversity, using | bidirectional segments to enable additional path diversity using | |||
| PAREO functions over the available paths, to provide a dynamic | PREOF functions over the available paths. This provides a dynamic | |||
| balance between the reliability and availability requirements of the | balance between the reliability and availability requirements of the | |||
| flows and the need to conserve energy and spectrum. This | flows and the need to conserve energy and spectrum. This | |||
| specification prepares for RAW by setting up the Tracks, but it only | specification prepares for RAW by setting up the Tracks, but it only | |||
| forms DODAGs, which are composed of aggregated end-to-end loose | forms DODAGs, which are composed of aggregated end-to-end loose | |||
| source-routed protection paths, joined by strict routed segments, all | source-routed protection paths, joined by strict routed segments, all | |||
| oriented forward. | oriented forward. | |||
| The RAW architecture defines a data plane extension of the PCE called | The RAW architecture defines a data plane extension of the PCE called | |||
| the Point of Local Repair (PLR) that adapts the use of the path | the Point of Local Repair (PLR) that adapts the use of the path | |||
| redundancy within a Track to defeat the diverse causes of packet | redundancy within a Track to defeat the diverse causes of packet | |||
| skipping to change at line 1858 ¶ | skipping to change at line 1868 ¶ | |||
| of the available redundancy is limited to simple load balancing, and | of the available redundancy is limited to simple load balancing, and | |||
| all the segments are forward unidirectional only. | all the segments are forward unidirectional only. | |||
| A Track may be set up to reduce the load around the Root or to enable | 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 | urgent traffic to flow more directly. This specification does not | |||
| provide the policies that would decide which flows are routed through | provide the policies that would decide which flows are routed through | |||
| which Track. In a Non-Storing Mode RPL Instance, the main DODAG | which Track. In a Non-Storing Mode RPL Instance, the main DODAG | |||
| provides a default route via the Root, and the Tracks provide more- | provides a default route via the Root, and the Tracks provide more- | |||
| specific routes to the Track Targets. | specific routes to the Track Targets. | |||
| 4. Extending Existing RFCs | 4. Extending and Amending Existing RFCs | |||
| This section explains which changes are extensions and which are | This section explains which changes are extensions and which are | |||
| amendments to existing specifications. It is expected that | amendments to existing specifications. It is expected that | |||
| extensions to existing specifications will not cause existing code on | extensions to existing specifications will not cause existing code on | |||
| legacy 6LRs to malfunction, as the extensions will simply be ignored. | legacy 6LRs to malfunction, as the extensions will simply be ignored. | |||
| New code is required for an extension. Those 6LRs will be unable to | New code is required for an extension. Those 6LRs will be unable to | |||
| participate in the new mechanisms and may also cause P-DAOs to be | function in the new mechanisms and may also make the P-DAOs | |||
| impossible to install. Amendments to existing specifications are | impossible to install. Amendments to existing specifications are | |||
| situations where there are semantic changes required to existing code | situations where there are semantic changes required to existing code | |||
| and where new unit tests may be required to confirm that legacy | and where new unit tests may be required to confirm that legacy | |||
| operations will continue unaffected. | operations will continue unaffected. | |||
| 4.1. Extending RPL RFC 6550 | 4.1. Extending RFC 6550 | |||
| This specification Extends RPL [RPL] to enable the Root to install | This specification Extends RPL [RPL] to enable the Root to install | |||
| forward routes inside a main DODAG that is operated as Non-Storing | forward routes inside a main DODAG that is operated as Non-Storing | |||
| Mode. The Root issues a P-DAO message (see Section 4.1.1) to the | Mode. The Root issues a P-DAO message (see Section 4.1.1) to the | |||
| Track Ingress; the P-DAO message contains a new VIO that installs a | Track ingress; the P-DAO message contains a new VIO that installs a | |||
| strict or a loose sequence of hops to form a Track segment or a | strict or a loose sequence of hops to form a Track segment or a | |||
| protection path, respectively. | protection path, respectively. | |||
| The P-DAO Request (PDR) is a new message detailed in Section 5.1. As | The P-DAO Request (PDAOReq) is a new message detailed in Section 5.1. | |||
| per Section 6 of [RPL], if a node receives this message and it does | As per Section 6 of [RPL], if a node receives this message and it | |||
| not understand this new code, it discards the message. When the Root | does not understand this new code, it discards the message. When the | |||
| initiates communication to a node that it has not communicated with | Root initiates communication to a node that it has not communicated | |||
| before and that it has not ascertained to implement this | with before and that it has not ascertained to implement this | |||
| specification (by means such as capabilities), then the Root SHOULD | specification (by means such as capabilities), then the Root SHOULD | |||
| request a PDR-ACK. | request a P-DAO Request Acknowledgement (PDR-ACK). | |||
| A PDR message enables a Track Ingress to request the Track from the | A PDAOReq message enables a Track ingress to request the Track from | |||
| Root. The resulting Track is also a DODAG for which the Track | the Root. The resulting Track is also a DODAG for which the Track | |||
| Ingress is the Root, and the owner is the address that serves as the | ingress is the Root, and the owner is the address that serves as the | |||
| DODAGID and is authoritative for the associated namespace from which | DODAGID and is authoritative for the associated namespace from which | |||
| the TrackID is selected. In the context of this specification, the | the TrackID is selected. In the context of this specification, the | |||
| installed route appears as a more-specific route to the Track | installed route appears as a more-specific route to the Track | |||
| Targets, and the Track Ingress forwards the packets toward the | Targets, and the Track ingress forwards the packets toward the | |||
| Targets via the Track using normal longest match IP forwarding. | Targets via the Track using normal longest match IP forwarding. | |||
| To ensure that the PDR and P-DAO messages can flow at most times, it | To ensure that the PDAOReq and P-DAO messages can flow at most times, | |||
| is RECOMMENDED that the nodes involved in a Track maintain multiple | it is RECOMMENDED that the nodes involved in a Track maintain | |||
| parents in the main DODAG, advertise them all to the Root, and use | multiple parents in the main DODAG, advertise them all to the Root, | |||
| them in turn to retry similar packets. It is also RECOMMENDED that | and use them in turn to retry similar packets. It is also | |||
| the Root uses diverse source route paths to retry similar messages to | RECOMMENDED that the Root uses diverse source route paths to retry | |||
| the nodes in the Track. | similar messages to the nodes in the Track. | |||
| 4.1.1. Projected DAO | 4.1.1. Projected DAO | |||
| Section 6 of [RPL] introduces the RPL Control Message Options (CMOs), | Section 6 of [RPL] introduces the RPL Control Message Options (CMOs), | |||
| 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 DAO. A DAO | (TIO), which can be placed in RPL messages such as the DAO. A DAO | |||
| message signals routing information to one or more Targets indicated | message signals routing information to one or more Targets indicated | |||
| in the RTOs and provides one and only one via-node in the TIO, with | in the RTOs and provides one and only one via-node in the TIO, with | |||
| the via-node being the tunnel endpoint to reach the targets. | the via-node being the tunnel endpoint to reach the targets. | |||
| skipping to change at line 1946 ¶ | skipping to change at line 1956 ¶ | |||
| typically with the Network Control precedence. | typically with the Network Control precedence. | |||
| 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 is set to the | | | DODAGID field is set to the | | |||
| + IPv6 address of the Track Ingress + | + IPv6 address of the Track ingress + | |||
| | used to source encapsulated packets | | | used to source encapsulated packets | | |||
| + + | + + | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Option(s)... | | Option(s)... | |||
| +-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
| Figure 8: Projected DAO Base Object | Figure 8: Projected DAO Base Object | |||
| New fields: | New fields: | |||
| TrackID: The Local or Global RPLInstanceID of the DODAG that serves | TrackID: The Local or Global RPLInstanceID of the DODAG that serves | |||
| as the Track (see more in Section 6.3). | as the Track (see more in Section 6.3). | |||
| P: 1-bit flag. | P: 1-bit flag. | |||
| The 'P' flag is set to 1 by the Root to signal a P-DAO; otherwise, | The 'P' flag is set to 1 by the Root to signal a P-DAO; otherwise, | |||
| it is set to 0. | it is set to 0. | |||
| The D flag is set to 1 to signal that the DODAGID field is present. | The 'D' flag is set to 1 to signal that the DODAGID field is present. | |||
| It may be set to 0 if and only if the destination address of the P- | It may be set to 0 if and only if the destination address of the | |||
| DAO-ACK message is set to the IPv6 address that serves as the | Projected DAO-ACK (P-DAO-ACK) message is set to the IPv6 address that | |||
| DODAGID, and it MUST be set to one otherwise, meaning that the | serves as the DODAGID, and it MUST be set to one otherwise, meaning | |||
| DODAGID field MUST then be present. | that the DODAGID field MUST then be present. | |||
| 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. The DAO | are formed by the directed parent-child relationships. The DAO | |||
| message signals to the Root that a given parent can be used to reach | message signals to the Root that a given parent can be used to reach | |||
| a given child. The P-DAO message generalizes the DAO to signal to | a given child. The P-DAO message generalizes the DAO to signal to | |||
| the Track Ingress that a Track for which it is the Root can be used | the Track ingress that a Track, for which the sender is the Root, can | |||
| to reach children and siblings of the Track Egress. In both cases, | be used to reach children and siblings of the Track egress. In both | |||
| options may be factorized and multiple RTOs may be present to signal | cases, options may be factorized and multiple RTOs may be present to | |||
| a collection of children that can be reached through the parent or | signal a collection of children that can be reached through the | |||
| the Track, respectively. | parent or the Track, respectively. | |||
| 4.1.2. Projected DAO-ACK | 4.1.2. Projected DAO-ACK | |||
| This document also Amends the DAO-ACK message. The new P flag | This document also Amends the DAO-ACK message. The new 'P' flag | |||
| signals the projected form. | signals the projected form. | |||
| The format of the P-DAO-ACK message is thus illustrated in Figure 9: | The format of the P-DAO-ACK message is thus illustrated in Figure 9: | |||
| 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 |D|P| Reserved | DAOSequence | Status | | | TrackID |D|P| Reserved | DAOSequence | Status | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| + + | + + | |||
| | DODAGID field is set to the | | | DODAGID field is set to the | | |||
| + IPv6 address of the Track Ingress + | + IPv6 address of the Track ingress + | |||
| | used to source encapsulated packets | | | used to source encapsulated packets | | |||
| + + | + + | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Option(s)... | | Option(s)... | |||
| +-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
| Figure 9: Projected DAO-ACK Base Object | Figure 9: Projected DAO-ACK Base Object | |||
| New fields: | New fields: | |||
| TrackID: The Local or Global RPLInstanceID of the DODAG that serves | TrackID: The Local or Global RPLInstanceID of the DODAG that serves | |||
| as the Track (see more in Section 6.3). | as the Track (see more in Section 6.3). | |||
| P: 1-bit flag. | P: 1-bit flag. | |||
| The 'P' flag is set to 1 by the Root to signal a P-DAO; otherwise, | The 'P' flag is set to 1 by the Root to signal a P-DAO; otherwise, | |||
| it is set to 0. | it is set to 0. | |||
| The D flag is set to 1 to signal that the DODAGID field is present. | The 'D' flag is set to 1 to signal that the DODAGID field is present. | |||
| It may be set to 0 if and only if the source address of the P-DAO-ACK | It may be set to 0 if and only if the source address of the P-DAO-ACK | |||
| message is set to the IPv6 address that serves as the DODAGID, and it | message is set to the IPv6 address that serves as the DODAGID, and it | |||
| MUST be set to one otherwise, meaning that the DODAGID field MUST | MUST be set to one otherwise, meaning that the DODAGID field MUST | |||
| then be present. | then be present. | |||
| 4.1.3. Via Information Option | 4.1.3. Via Information Option | |||
| This document Extends the CMO to create new objects called Via | This document Extends the CMO to create new objects called Via | |||
| Information Options (VIOs). The VIOs are the multi-hop alternative | Information Options (VIOs). The VIOs are the multi-hop alternative | |||
| to the TIOs (see more in Section 5.3). One VIO is the stateful | to the TIOs (see more in Section 5.3). One VIO is the stateful | |||
| Storing Mode VIO (SM-VIO); an SM-VIO installs a strict hop-by-hop | Storing Mode VIO (SM-VIO); an SM-VIO installs a strict hop-by-hop | |||
| P-Route called a Track segment. The other is the Non-Storing Mode | P-Route called a Track segment. The other is the Non-Storing Mode | |||
| VIO (NSM-VIO); the NSM-VIO installs a loose source-routed P-Route | VIO (NSM-VIO); the NSM-VIO installs a loose source-routed P-Route | |||
| called a protection path at the Track Ingress, which uses that state | called a protection path at the Track ingress, which uses that state | |||
| to encapsulate an IP-in-IP packet with a new Routing Header (RH) to | to encapsulate an IP-in-IP packet with a new Routing Header (RH) to | |||
| the Track Egress (see more in Section 6.7). | the Track egress (see more in Section 6.7). | |||
| A P-DAO contains one or more RTOs to indicate the Target | A P-DAO contains one or more RTOs to indicate the Target | |||
| (destinations) that can be reached via the P-Route, followed by | (destinations) that can be reached via the P-Route, followed by | |||
| exactly one VIO that signals the sequence of nodes to be followed | exactly one VIO that signals the sequence of nodes to be followed | |||
| (see more in Section 6). There are two modes of operation for the | (see more in Section 6). There are two modes of operation for the | |||
| P-Routes: Storing Mode and Non-Storing Mode (see more in Sections | P-Routes: Storing Mode and Non-Storing Mode (see more in Sections | |||
| 6.4.2 and 6.4.3, respectively). | 6.4.2 and 6.4.3, respectively). | |||
| 4.1.4. Sibling Information Option | 4.1.4. Sibling Information Option | |||
| skipping to change at line 2083 ¶ | skipping to change at line 2093 ¶ | |||
| | 2. The multicast DAO may be used to enable direct and indirect | | 2. The multicast DAO may be used to enable direct and indirect | |||
| | (via a common neighbor) P2P communication without needing the | | (via a common neighbor) P2P communication without needing the | |||
| | DODAG to relay the packets. The multicast DAO exposes the | | DODAG to relay the packets. The multicast DAO exposes the | |||
| | sender's addresses as Targets in RTOs and the sender's | | sender's addresses as Targets in RTOs and the sender's | |||
| | neighbors addresses as siblings in SIOs; this tells the | | neighbors addresses as siblings in SIOs; this tells the | |||
| | sender's neighbors that the sender is willing to act as a | | sender's neighbors that the sender is willing to act as a | |||
| | relay between those of its neighbors that are too far apart. | | relay between those of its neighbors that are too far apart. | |||
| 4.1.5. P-DAO Request | 4.1.5. P-DAO Request | |||
| The set of RPL Control Messages is Extended to include the PDR and | The set of RPL Control Messages is Extended to include the PDAOReq | |||
| P-DAO Request Acknowledgement (PDR-ACK). These two new RPL Control | and PDR-ACK. These two new RPL Control Messages enable a RAN to | |||
| Messages enable a RAN to request the establishment of a Track between | request the establishment of a Track between itself (as the Track | |||
| itself (as the Track Ingress Node) and a Track Egress. The node | ingress Node) and a Track egress. The node makes its request by | |||
| makes its request by sending a new PDR message to the Root. The Root | sending a new PDAOReq message to the Root. The Root confirms with a | |||
| confirms with a new PDR-ACK message back to the requester RAN; see | new PDR-ACK message back to the requester RAN; see Section 5.1 for | |||
| Section 5.1 for more. | more. | |||
| 4.1.6. Amending the RPI | 4.1.6. Amending 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 RPI described in Section 11.2 of [RPL] in the outer IPv6 | the abstract RPI described in Section 11.2 of [RPL] in the outer IPv6 | |||
| header chain (see [RFC9008]). The RPI carries a Local RPLInstanceID | header chain (see [RFC9008]). The RPI carries a Local RPLInstanceID | |||
| that, in association with either the source or the destination | that, in association with either the source or the destination | |||
| address in the IPv6 header, indicates the RPL Instance that the | address in the IPv6 header, indicates the RPL Instance that the | |||
| packet follows. | packet follows. | |||
| skipping to change at line 2138 ¶ | skipping to change at line 2148 ¶ | |||
| Figure 10: DODAG Configuration Option (Partial View) | Figure 10: DODAG Configuration Option (Partial View) | |||
| This specification Amends [RPL] to define the new "Projected Routes | This specification Amends [RPL] to define the new "Projected Routes | |||
| Support" (D) flag. The 'D' flag is encoded in bit position 0 of the | Support" (D) flag. The 'D' flag is encoded in bit position 0 of the | |||
| reserved Flags in the DODAG Configuration option (this is the most | reserved Flags in the DODAG Configuration option (this is the most | |||
| significant bit). It is set to 0 in legacy implementations as | significant bit). It is set to 0 in legacy implementations as | |||
| specified respectively in Sections 20.14 and 6.7.6 of [RPL]. | specified respectively in Sections 20.14 and 6.7.6 of [RPL]. | |||
| The 'D' flag is set to 1 to indicate that this specification is | The 'D' flag is set to 1 to indicate that this specification is | |||
| enabled in the network and that the Root will install the requested | enabled in the network and that the Root will install the requested | |||
| Tracks when feasible upon receiving a PDR message. | Tracks when feasible upon receiving a PDAOReq message. | |||
| Section 4.1.2 of [RFC9008] Amends [RPL] to indicate that the | Section 4.1.2 of [RFC9008] Amends [RPL] to indicate that the | |||
| definition of the Flags applies to MOP values from zero (0) to six | definition of the Flags applies to MOP values from zero (0) to six | |||
| (6) only. For a MOP value of 7, the implementation MUST consider | (6) only. For a MOP value of 7, the implementation MUST consider | |||
| that the Root accepts PDR messages and will install P-Routes. | that the Root accepts PDAOReq messages and will install P-Routes. | |||
| The RPL DODAG Configuration option is typically placed in a DIO | The RPL DODAG Configuration option is typically placed in a DIO | |||
| message. The DIO message propagates down the DODAG to form and then | message. The DIO message propagates down the DODAG to form and then | |||
| maintain its structure. The DODAG Configuration option is copied | maintain its structure. The DODAG Configuration option is copied | |||
| unmodified from parents to children. | unmodified from parents to children. | |||
| [RPL] states that: | [RPL] states that: | |||
| | Nodes other than the DODAG root MUST NOT modify this information | | Nodes other than the DODAG root MUST NOT modify this information | |||
| | when propagating the DODAG Configuration option. | | when propagating the DODAG Configuration option. | |||
| Therefore, a legacy parent propagates the 'D' flag as set by the | Therefore, a legacy parent propagates the 'D' flag as set by the | |||
| root, and when the 'D' flag is set to 1, it is transparently flooded | Root, and when the 'D' flag is set to 1, it is transparently flooded | |||
| to all the nodes in the DODAG. | to all the nodes in the DODAG. | |||
| 4.2. Extending RPL RFC 6553 | 4.2. Extending RFC 6553 | |||
| "The Routing Protocol for Low-Power and Lossy Networks (RPL) Option | "The Routing Protocol for Low-Power and Lossy Networks (RPL) Option | |||
| for Carrying RPL Information in Data-Plane Datagrams" [RFC6553] | for Carrying RPL Information in Data-Plane Datagrams" [RFC6553] | |||
| describes the RPL Option for use among RPL routers to include the | describes the RPL Option for use among RPL routers to include the | |||
| abstract RPI described in Section 11.2 of [RPL] in data packets. | abstract RPI described in Section 11.2 of [RPL] in data packets. | |||
| The RPL Option is commonly referred to as the RPI even though the RPI | The RPL Option is commonly referred to as the RPI even though the RPI | |||
| is really the abstract information that is transported in the RPL | is really the abstract information that is transported in the RPL | |||
| Option. [RFC9008] updated the Option Type from 0x63 to 0x23. | Option. [RFC9008] updated the Option Type from 0x63 to 0x23. | |||
| skipping to change at line 2190 ¶ | skipping to change at line 2200 ¶ | |||
| | (sub-TLVs) | | | (sub-TLVs) | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 11: Amended RPL Option Format | Figure 11: Amended RPL Option Format | |||
| Option Type: 0x23 or 0x63; see [RFC9008]. | Option Type: 0x23 or 0x63; see [RFC9008]. | |||
| Opt Data Len: See [RFC6553]. | Opt Data Len: See [RFC6553]. | |||
| 'O', 'R', and 'F' flags: See [RFC6553]. These flags MUST be set to | 'O', 'R', and 'F' flags: See [RFC6553]. These flags MUST be set to | |||
| 0 by the sender and ignored by the receiver if the 'P' flag is | 0 by the sender and MUST be ignored by the receiver if the 'P' | |||
| set. | flag is set. | |||
| Projected-Route 'P': 1-bit flag as defined in Section 4.1.6. | Projected-Route 'P': 1-bit flag as defined in Section 4.1.6. | |||
| RPLInstanceID: See [RFC6553]. Indicates the TrackID if the 'P' flag | RPLInstanceID: See [RFC6553]. Indicates the TrackID if the 'P' flag | |||
| is set, as discussed in Section 4.1.1. | 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 MUST be ignored by the receiver if the 'P' flag is set. | |||
| 4.3. Extending RPL RFC 8138 | 4.3. Extending RFC 8138 | |||
| The 6LoWPAN Routing Header specification [RFC8138] introduces a new | The 6LoWPAN Routing Header specification [RFC8138] introduces a new | |||
| 6LoWPAN [RFC6282] dispatch type for use in 6LoWPAN route-over | 6LoWPAN [RFC6282] dispatch type for use in 6LoWPAN route-over | |||
| topologies, which initially covers the needs of RPL data packet | topologies, which initially covers the needs of RPL data packet | |||
| compression. | compression. | |||
| Section 4 of [RFC8138] presents the generic formats of the 6LoRH in | Section 4 of [RFC8138] presents the generic formats of the 6LoRH in | |||
| two forms: Elective, which can be ignored and skipped when the router | two forms: Elective, which can be ignored and skipped when the router | |||
| does not understand it, and Critical, which causes the packet to be | does not understand it, and Critical, which causes the packet to be | |||
| dropped when the router cannot process it. The 'E' flag in the 6LoRH | dropped when the router cannot process it. The 'E' flag in the 6LoRH | |||
| indicates its form. In order to skip the Elective 6LoRHs, their | indicates its form. In order to skip the Elective 6LoRHs, their | |||
| format imposes a fixed expression of the size, whereas the size of a | format imposes a fixed expression of the size, whereas the size of a | |||
| Critical 6LoRH may be signaled in variable forms to enable additional | Critical 6LoRH may be signaled in variable forms to enable additional | |||
| optimizations. | optimizations. | |||
| When compression as described in [RFC8138] is used, the Root of the | When compression as described in [RFC8138] is used, the Root of the | |||
| main DODAG that sets up the Track also constructs the compressed | main DODAG that sets up the Track also constructs the compressed | |||
| routing header (SRH-6LoRH) on behalf of the Track Ingress, which | Routing Header (SRH-6LoRH) on behalf of the Track ingress, which | |||
| avoids the complexities of optimizing SRH-6LoRH encoding in | avoids the complexities of optimizing SRH-6LoRH encoding in | |||
| constrained code. The SRH-6LoRH is signaled in the NSM-VIO, in a | constrained code. In that case, the SRH-6LoRH is signaled in the | |||
| fashion that it is ready to be placed as is in the packet | NSM-VIO, and it is expressed in a fashion that can be placed as is in | |||
| encapsulation by the Track Ingress. | the packet encapsulation by the Track ingress. | |||
| Section 6.3 of [RFC8138] presents the formats of the 6LoWPAN RH of | Section 6.3 of [RFC8138] presents the formats of the 6LoWPAN RH of | |||
| type 5 (RPI-6LoRH) that compresses the RPI for normal RPL operation. | type 5 (RPI-6LoRH) that compresses the RPI for normal RPL operation. | |||
| The format of the RPI-6LoRH is not suited for P-Routes since the O, | The format of the RPI-6LoRH is not suited for P-Routes since the 'O', | |||
| R, and F flags are not used and the Rank is unknown and ignored. | 'R', and 'F' flags are not used and the Rank is unknown and ignored. | |||
| This specification Extends [RFC8138] to introduce a new 6LoRH, the P- | This specification Extends [RFC8138] to introduce a new 6LoRH, the P- | |||
| RPI-6LoRH, that can be used in either Elective or Critical 6LoRH | RPI-6LoRH, that can be used in either Elective or Critical 6LoRH | |||
| form; see Tables 22 and 23, respectively. The new 6LoRH MUST be used | form; see Tables 22 and 23, respectively. The new 6LoRH MUST be used | |||
| as a Critical 6LoRH, unless an SRH-6LoRH is present and controls the | as a Critical 6LoRH, unless an SRH-6LoRH is present and controls the | |||
| routing decision, in which case it MAY be used in Elective form. | routing decision, in which case it MAY be used in Elective form. | |||
| The P-RPI-6LoRH is designed to compress the RPI along RPL P-Routes. | The P-RPI-6LoRH is designed to compress the RPI along RPL P-Routes. | |||
| Its format is as follows: | Its format is as follows: | |||
| skipping to change at line 2256 ¶ | skipping to change at line 2266 ¶ | |||
| 6LoRH Type: IANA has defined the value 8 for both the Elective and | 6LoRH Type: IANA has defined the value 8 for both the Elective and | |||
| Critical forms. | Critical forms. | |||
| Elective 'E': See [RFC8138]. The 'E' flag is set to 1 to indicate | Elective 'E': See [RFC8138]. The 'E' flag is set to 1 to indicate | |||
| an Elective 6LoRH, meaning that it can be ignored when forwarding. | an Elective 6LoRH, meaning that it can be ignored when forwarding. | |||
| RPLInstanceID : In the context of this specification, the | RPLInstanceID : In the context of this specification, the | |||
| RPLInstanceID field signals the TrackID; see Sections 3.4 and 6.3. | RPLInstanceID field signals the TrackID; see Sections 3.4 and 6.3. | |||
| Section 6.8 details how a Track Ingress leverages the P-RPI-6LoRH | Section 6.8 details how a Track ingress leverages the P-RPI-6LoRH | |||
| Header as part of the encapsulation of a packet to place it into a | header as part of the encapsulation of a packet to place it into a | |||
| Track. | Track. | |||
| 5. New RPL Control Messages and Options | 5. New RPL Control Messages and Options | |||
| 5.1. New P-DAO Request Control Message | 5.1. New P-DAO Request Control Message | |||
| The PDR message is sent by a node in the main DODAG to the Root. It | The PDAOReq message is sent by a node in the main DODAG to the Root. | |||
| is a request to establish or refresh a Track where the node sending | It is a request to establish or refresh a Track where the node | |||
| the PDR is the Track Ingress, and it signals whether or not an | sending the PDAOReq is the Track ingress, and it signals whether or | |||
| acknowledgment called PDR-ACK is requested. A positive PDR-ACK | not an acknowledgment called PDR-ACK is requested. A positive PDR- | |||
| indicates that the Track was built and that the Root commits to | ACK indicates that the Track was built and that the Root commits to | |||
| maintaining the Track for the negotiated lifetime. | maintaining the Track for the negotiated lifetime. | |||
| The main Root MAY indicate to the Track Ingress that the Track was | The main Root MAY indicate to the Track ingress that the Track was | |||
| terminated before its time; to do so, it MUST use an asynchronous | terminated before its time; to do so, it MUST use an asynchronous | |||
| PDR-ACK with a negative status. A status of "Transient Failure" (see | PDR-ACK with a negative status. A status of "Transient Failure" (see | |||
| Section 11.10) is an indication that the PDR may be retried after a | Section 11.10) is an indication that the PDAOReq may be retried after | |||
| reasonable time that depends on the deployment. Other negative | a reasonable time that depends on the deployment. Other negative | |||
| status values indicate a permanent error; the attempt must be | status values indicate a permanent error; the attempt must be | |||
| abandoned until a corrective action is taken at the application layer | abandoned until a corrective action is taken at the application layer | |||
| or through network management. | or through network management. | |||
| The Track Ingress to be of the requested Track is indicated in the | The Track ingress to be of the requested Track is indicated in the | |||
| source IPv6 address of the PDR, and the TrackID is indicated in the | source IPv6 address of the PDAOReq, and the TrackID is indicated in | |||
| message itself. At least one RPL Target Option MUST be present in | the message itself. At least one RPL Target Option MUST be present | |||
| the message. If more than one RPL Target Option is present, the Root | in the message. If more than one RPL Target Option is present, the | |||
| will provide a Track that reaches the first listed Target and a | Root will provide a Track that reaches the first listed Target and a | |||
| subset of the other Targets; the details of the subset selection are | subset of the other Targets; the details of the subset selection are | |||
| out of scope. The RTO signals the Track Egress (see more in | out of scope. The RTO signals the Track egress (see more in | |||
| Section 6.2). | Section 6.2). | |||
| The RPL Control Code for the PDR is 0x09. The format of the PDR Base | The RPL Control Code for the PDAOReq is 0x09. The format of the | |||
| Object is as follows: | PDAOReq 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 |PDAOReqSequence| | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Option(s)... | | Option(s)... | |||
| +-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
| Figure 13: New P-DAO Request Format | Figure 13: New P-DAO Request Format | |||
| TrackID: 8-bit field. In the context of this specification, the | TrackID: 8-bit field. In the context of this specification, the | |||
| TrackID field signals the RPLInstanceID of the DODAG formed by the | TrackID field signals the RPLInstanceID of the DODAG formed by the | |||
| Track; see Sections 3.4 and 6.3. To allocate a new Track, the | Track; see Sections 3.4 and 6.3. To allocate a new Track, the | |||
| Ingress Node must provide a value that is not in use at this time. | 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 be initialized to zero by the | Flags: Reserved. The Flags field MUST be 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). The value of 255 (0xFF) represents | Configuration option). The value of 255 (0xFF) represents | |||
| infinity (never time out). | infinity (never time out). | |||
| A PDR with a fresher PDRSequence refreshes the lifetime, and a | A PDAOReq with a fresher PDAOReqSequence refreshes the lifetime, | |||
| PDRLifetime of 0 indicates that the Track MUST be destroyed, e.g., | and a ReqLifetime of 0 indicates that the Track MUST be destroyed, | |||
| when the application that requested the Track terminates. | e.g., when the application that requested the Track terminates. | |||
| PDRSequence: 8-bit wrapping sequence number, obeying the operation | PDAOReqSequence: 8-bit wrapping sequence number, obeying the | |||
| in Section 7.2 of [RPL]. The PDRSequence is used to correlate a | operation in Section 7.2 of [RPL]. The PDAOReqSequence is used to | |||
| PDR-ACK message with the PDR message that triggered it. It is | correlate a PDR-ACK message with the PDAOReq message that | |||
| incremented at each PDR message and echoed in the PDR-ACK by the | triggered it. It is incremented at each PDAOReq message and | |||
| Root. | echoed in the PDR-ACK by the Root. | |||
| 5.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 PDAOReq message with the | |||
| flag set. The RPL Control Code for the PDR-ACK is 0x0A. Its format | 'K' flag set. The RPL Control Code for the PDR-ACK is 0x0A. Its | |||
| is as follows: | 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|PDAOReqSequence| | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | PDR-ACK Status| Reserved | | | PDR-ACK Status| Reserved | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Option(s)... | | Option(s)... | |||
| +-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+ | |||
| Figure 14: New PDR-ACK Control Message Format | Figure 14: New PDR-ACK Control Message Format | |||
| TrackID: Set to the TrackID indicated in the TrackID field of the | TrackID: Set to the TrackID indicated in the TrackID field of the | |||
| PDR messages that this replies to. | PDAOReq messages that this replies to. | |||
| Flags: Reserved. The Flags field MUST be initialized to zero by the | Flags: Reserved. The Flags field MUST be initialized to zero by the | |||
| sender and MUST be ignored by the receiver. | sender and MUST be ignored by the receiver. | |||
| Track Lifetime: Indicates the remaining lifetime for the Track, | Track Lifetime: Indicates the remaining lifetime for the Track, | |||
| expressed in Lifetime Units. The value of 255 (0xFF) represents | expressed in Lifetime Units. The value of 255 (0xFF) represents | |||
| infinity. The value of zero (0x00) indicates that the Track was | infinity. The value of zero (0x00) indicates that the Track was | |||
| destroyed or not created. | destroyed or not created. | |||
| PDRSequence: 8-bit wrapping sequence number. It is incremented at | PDAOReqSequence: 8-bit wrapping sequence number. It is incremented | |||
| each PDR message and echoed in the PDR-ACK. | at each PDAOReq 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 15: | Status is substructured as indicated in Figure 15: | |||
| 0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 | |||
| +-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
| |E|R| Value | | |E|R| Value | | |||
| +-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
| Figure 15: PDR-ACK Status Format | Figure 15: PDR-ACK Status Format | |||
| E: 1-bit flag. Set to indicate a rejection. When not set, a | E: 1-bit flag. Set to indicate a rejection. When not set, a | |||
| Value field that is set to 0 indicates Success/Unqualified | Value field that is set to 0 indicates Success/Unqualified | |||
| Acceptance, and other values indicate "not an outright | Acceptance, and other values indicate "not an outright | |||
| rejection". | 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 MUST | |||
| ignored by the receiver. | be ignored by the receiver. | |||
| Status Value: 6-bit unsigned integer. Values depend on the | Status Value: 6-bit unsigned integer. Values depend on the | |||
| setting of the 'E' flag; see Tables 28 and 29. | setting of the 'E' flag; see Tables 28 and 29. | |||
| Reserved: The Reserved field MUST be initialized to zero by the | Reserved: The Reserved field MUST be initialized to zero by the | |||
| sender and MUST be ignored by the receiver. | sender and MUST be ignored by the receiver. | |||
| 5.3. Via Information Options | 5.3. Via Information Options | |||
| A VIO signals the ordered list of IPv6 Via Addresses that constitutes | A VIO signals the ordered list of IPv6 Via Addresses that constitutes | |||
| skipping to change at line 2450 ¶ | skipping to change at line 2460 ¶ | |||
| Option Type: 0x0F for SM-VIO and 0x10 for NSM-VIO (see Table 26). | Option Type: 0x0F for SM-VIO and 0x10 for NSM-VIO (see Table 26). | |||
| Option Length: 8-bit unsigned integer, representing the length in | Option Length: 8-bit unsigned integer, representing the length in | |||
| octets of the option, not including the Option Type and Length | octets of the option, not including the Option Type and Length | |||
| fields (see Section 6.7.1 of [RPL]); the Option Length is | fields (see Section 6.7.1 of [RPL]); the Option Length is | |||
| variable, depending on the number of Via Addresses and the | variable, depending on the number of Via Addresses and the | |||
| compression applied. | compression applied. | |||
| Flags: 8-bit field. No flag is defined in this specification. The | Flags: 8-bit field. No flag is defined in this specification. The | |||
| field MUST be set to 0 by the sender and ignored by the receiver. | field MUST be set to 0 by the sender and MUST be ignored by the | |||
| receiver. | ||||
| P-RouteID: 8-bit field that identifies a component of a Track or the | P-RouteID: 8-bit field that identifies a component of a Track or the | |||
| main DODAG as indicated by the TrackID field. The value of 0 is | main DODAG as indicated by the TrackID field. The value of 0 is | |||
| used to signal a path, i.e., made of a single segment/protection | used to signal a path, i.e., made of a single segment/protection | |||
| path. In an SM-VIO, the P-RouteID indicates a Segment ID. In an | path. In an SM-VIO, the P-RouteID indicates a SegmentID. In an | |||
| NSM-VIO, it indicates the ID of a protection path that is added | NSM-VIO, it indicates the ID of a protection path that is added | |||
| (or updated) to the overall topology of the Track. | (or updated) 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 initial value | obeys the operation in Section 7.2 of [RPL], and the initial value | |||
| is 255. | is 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 P-RouteID within the indicated | for the segment indicated by the P-RouteID within the indicated | |||
| Track and sets up the new information. | Track and provides the new information about the segment. | |||
| 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, P-RouteID, | 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. | |||
| SRH-6LoRH head: The first 2 bytes of the (first) SRH-6LoRH as shown | SRH-6LoRH head: The first 2 bytes of the (first) SRH-6LoRH as shown | |||
| in Figure 6 of [RFC8138]. As an example, a 6LoRH Type of 4 means | in Figure 6 of [RFC8138]. As an example, a 6LoRH of type 4 means | |||
| that the Via Addresses are provided in full with no compression. | that the Via Addresses are provided in full with no compression. | |||
| Via Address: An IPv6 ULA or GUA of a node along the segment. The | Via Address: An IPv6 ULA or GUA of a node along the segment. The | |||
| VIO contains one or more IPv6 Via Addresses listed in the datapath | VIO contains one or more IPv6 Via Addresses listed in the datapath | |||
| order from Ingress to Egress. The list is expressed in a | order from ingress to egress. The list is expressed in a | |||
| compressed form as signaled by the preceding SRH-6LoRH header. | compressed form as signaled by the preceding SRH-6LoRH header. | |||
| In a Storing Mode P-DAO that updates or removes a section of an | In a Storing Mode P-DAO that updates or removes a section of an | |||
| already existing segment, the list in the SM-VIO may represent | already existing segment, the list in the SM-VIO may represent | |||
| only the section of the segment that is being updated; at the | only the section of the segment that is being updated; at the | |||
| extreme, the SM-VIO updates only one node, in which case it | extreme, the SM-VIO updates only one node, in which case it | |||
| contains only one IPv6 address. In all other cases, the list in | contains only one IPv6 address. In all other cases, the list in | |||
| the VIO MUST be complete. | the VIO MUST be complete. | |||
| In the case of an SM-VIO, the list indicates a sequential (strict) | In the case of an SM-VIO, the list indicates a sequential (strict) | |||
| path through direct neighbors; the complete list starts at the | path through direct neighbors; the complete list starts at the | |||
| Ingress and ends at the Egress, and the nodes listed in the VIO, | ingress and ends at the egress, and the nodes listed in the VIO, | |||
| including the Egress, MAY be considered as implicit Targets. | including the egress, MAY be considered as implicit Targets. | |||
| In the case of an NSM-VIO, the complete list can be loose and | In the case of an NSM-VIO, the complete list can be loose and | |||
| excludes the Ingress node, starting at the first loose hop and | excludes the ingress node, starting at the first loose hop and | |||
| ending at a Track Egress; the Track Egress MUST be considered as | ending at a Track egress; the Track egress MUST be considered as | |||
| an implicit Target, so it MUST NOT be signaled in a RPL Target | an implicit Target, so it MUST NOT be signaled in a RPL Target | |||
| Option. | Option. | |||
| 5.4. Sibling Information Option | 5.4. Sibling Information Option | |||
| The Sibling Information Option (SIO) provides information about | The Sibling Information Option (SIO) provides information about | |||
| siblings that could be used by the Root to form P-Routes. One or | siblings that could be used by the Root to form P-Routes. One or | |||
| more SIOs may be placed in the DAO messages that are sent to the Root | more SIOs may be placed in the DAO messages that are sent to the Root | |||
| in Non-Storing Mode. | in Non-Storing Mode. | |||
| To advertise a neighbor node, the router MUST have an active Address | To advertise a neighbor node, the router MUST have an active Address | |||
| Registration from that sibling per [RFC8505] for an address (ULA or | Registration from that sibling per [RFC8505] for an address (ULA or | |||
| GUA) that serves as an identifier for the node. If this router also | GUA) that serves as an identifier for the node. If this router also | |||
| registers an address to that sibling, and the link has similar | registers an address to that sibling, and the link has similar | |||
| properties in both directions, only the router with the lowest | properties in both directions, only the router with the lowest | |||
| Interface ID in its registered address needs to report the SIO, with | Interface ID in its registered address needs to report the SIO, with | |||
| the B flag set, and the Root will assume symmetry. | the 'B' flag set, and the Root will assume symmetry. | |||
| The SIO carries a flag (B) that is set when similar performance can | The SIO carries a flag (B) that is set when similar performance can | |||
| be expected in both directions, so the routing can consider that the | be expected in both directions; this flag indicates to the routing | |||
| information provided for one direction is valid for both. If the SIO | that the information provided for one direction is valid for both. | |||
| is effectively received from both sides, then the B flag MUST be | If the SIO is effectively received from both sides, then the 'B' flag | |||
| ignored. The policy that describes the performance criteria and how | MUST be ignored. The policy that describes the performance criteria | |||
| they are asserted is out of scope. In the absence of an external | and how they are asserted is out of scope. In the absence of an | |||
| protocol to assert the link quality, the flag SHOULD NOT be set. | external protocol to assert the link quality, the flag SHOULD NOT be | |||
| set. | ||||
| The format of the SIO is as follows: | The format of the SIO is as follows: | |||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Type | Option Length |S|B|Flags|Comp.| Opaque | | | Option Type | Option Length |S|B|Flags|Comp.| Opaque | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Step in Rank | Reserved | | | Step in Rank | Reserved | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| + + | + + | |||
| . . | . . | |||
| . Sibling DODAGID (if the D flag is not set) . | . Sibling DODAGID (if the D flag is not set) . | |||
| . . | . . | |||
| + + | + + | |||
| | | | | | | |||
| skipping to change at line 2611 ¶ | skipping to change at line 2623 ¶ | |||
| [RPL] as computed by the Objective Function between this node and | [RPL] as computed by the Objective Function between this node and | |||
| the sibling, which reflects the abstract Rank increment that would | the sibling, which reflects the abstract Rank increment that would | |||
| be computed by the Objective Function if the sibling was the | be computed by the Objective Function if the sibling was the | |||
| preferred parent. | preferred parent. | |||
| Reserved: The Reserved field MUST be initialized to zero by the | Reserved: The Reserved field MUST be initialized to zero by the | |||
| sender and MUST be ignored by the receiver | sender 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 | |||
| compressed form [RFC8138] as indicated by the Compression Type | compressed form [RFC8138] as indicated by the Compression Type | |||
| field. This field is present if and only if the D flag is not | field. This field is present if and only if the 'D' flag is not | |||
| set. | set. | |||
| Sibling Address: 2 to 16 bytes. An IPv6 address of the sibling with | Sibling Address: 2 to 16 bytes. An IPv6 address of the sibling with | |||
| a scope that MUST make it reachable from the Root, e.g., it cannot | a scope that MUST make it reachable from the Root, e.g., it cannot | |||
| be a Link Local Address. The IPv6 address is encoded in the | be a Link Local Address. The IPv6 address is encoded in the | |||
| compressed form [RFC8138] indicated by the Compression Type field. | compressed form [RFC8138] indicated by the Compression Type 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. | |||
| skipping to change at line 2642 ¶ | skipping to change at line 2654 ¶ | |||
| defined for the RPL domain. | defined for the RPL domain. | |||
| Though fragmentation is possible in a 6LoWPAN LLN, e.g., using | Though fragmentation is possible in a 6LoWPAN LLN, e.g., using | |||
| [6LoWPAN], [RFC8930], and/or [RFC8931], it is RECOMMENDED to define | [6LoWPAN], [RFC8930], and/or [RFC8931], it is RECOMMENDED to define | |||
| an MTU that is larger than 1280 between the RPL routers that form the | an MTU that is larger than 1280 between the RPL routers that form the | |||
| main DODAG to allow for the necessary header additions, while still | main DODAG to allow for the necessary header additions, while still | |||
| exposing 1280 to the 6LoWPAN endpoint stacks. | exposing 1280 to the 6LoWPAN endpoint stacks. | |||
| 6.2. Requesting a Track | 6.2. Requesting a Track | |||
| This specification introduces the PDR message, which is used by an | This specification introduces the PDAOReq message, which is used by | |||
| LLN node to request the formation of a new Track for which the LLN | an LLN node to request the formation of a new Track for which the LLN | |||
| node is the Ingress. Note that the namespace for the TrackID is | node is the ingress. Note that the namespace for the TrackID is | |||
| owned by the Ingress node, and in the absence of a PDR, there must be | owned by the ingress node, and in the absence of a PDAOReq, there | |||
| some procedure for the Root to assign TrackIDs in that namespace | must be some procedure for the Root to assign TrackIDs in that | |||
| while avoiding collisions (see more in Section 6.3). | namespace while avoiding collisions (see more in Section 6.3). | |||
| The PDR signals the desired TrackID and the duration for which the | The PDAOReq signals the desired TrackID and the duration for which | |||
| Track should be established. Upon a PDR, the Root MAY install the | the Track should be established. Upon a PDAOReq, the Root MAY | |||
| Track as requested, in which case it answers with a PDR-ACK | install the Track as requested, in which case it answers with a PDR- | |||
| indicating the granted Track Lifetime. All the segments MUST be of | ACK indicating the granted Track Lifetime. All the segments MUST be | |||
| the same mode, either Storing or Non-Storing. All the segments MUST | of the same mode, either Storing or Non-Storing. All the segments | |||
| be created with the same TrackID and the same DODAGID signaled in the | MUST be created with the same TrackID and the same DODAGID signaled | |||
| P-DAO. | in the P-DAO. | |||
| The Root designs the Track as it sees fit and updates/changes the | The Root designs the Track as it sees fit and updates/changes the | |||
| segments over time to serve the Track as needed. Note that there is | segments over time to serve the Track as needed. Note that there is | |||
| no protocol element to notify the requesting Track Ingress when | no protocol element to notify the requesting Track ingress when | |||
| changes happen deeper down the Track, so they are transparent to the | changes happen deeper down the Track, so they are transparent to the | |||
| Track Ingress. If the main Root cannot maintain an expected service | Track ingress. If the main Root cannot maintain an expected service | |||
| level, then it needs to tear down the Track completely. The Segment | level, then it needs to tear down the Track completely. The Segment | |||
| Lifetime in the P-DAO messages does not need to be aligned to the | Lifetime in the P-DAO messages does not need to be aligned to the | |||
| Requested Lifetime in the PDR or between P-DAO messages for different | Requested Lifetime in the PDAOReq or between P-DAO messages for | |||
| segments. For example, the Root may use shorter lifetimes for the | different segments. For example, the Root may use shorter lifetimes | |||
| segments and renew them or change them during the lifetime of the | for the segments and renew them or change them during the lifetime of | |||
| Track. All the components (protection paths and segments) of a Track | the Track. All the components (protection paths and segments) of a | |||
| MUST be destroyed (or have their lifetime elapsed) before the TrackID | Track MUST be destroyed (or have their lifetime elapsed) before the | |||
| can be reused. | TrackID can be reused. | |||
| When the Track Lifetime is relatively close to elapse -- meaning in | When the Track Lifetime is relatively close to elapse -- meaning in | |||
| the order of the trip time from the node to the Root -- the | the order of the trip time from the node to the Root -- the | |||
| requesting node SHOULD resend a PDR using the TrackID in the PDR-ACK | requesting node SHOULD resend a PDAOReq using the TrackID in the PDR- | |||
| to extend the lifetime of the Track; otherwise, the Track will time | ACK to extend the lifetime of the Track; otherwise, the Track will | |||
| out, and the Root will tear down the whole structure. | 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 | |||
| requesting node asynchronously with a PDR-ACK with a Track Lifetime | requesting node asynchronously with a PDR-ACK with a Track Lifetime | |||
| of 0, indicating that the Track has failed, and a PDR-ACK Status, | of 0, indicating that the Track has failed, and a PDR-ACK Status, | |||
| indicating the reason of the fault. | indicating the reason of the fault. | |||
| 6.3. Identifying a Track | 6.3. Identifying a Track | |||
| RPL defines the concept of an Instance to signal an individual | RPL defines the concept of an Instance to signal an individual | |||
| routing topology, and multiple topologies can coexist in the same | routing topology, and multiple topologies can coexist in the same | |||
| skipping to change at line 2711 ¶ | skipping to change at line 2723 ¶ | |||
| When adding a P-Route to the RPL main DODAG, the main Root MUST | When adding a P-Route to the RPL main DODAG, the main Root MUST | |||
| set the RPLInstanceID field of the P-DAO Base Object (see | set the RPLInstanceID field of the P-DAO Base Object (see | |||
| Section 6.4.1 of [RPL]) to the RPLInstanceID of the main DODAG, | Section 6.4.1 of [RPL]) to the RPLInstanceID of the main DODAG, | |||
| and it MUST NOT use the DODAGID field. A P-Route provides a | and it MUST NOT use the DODAGID field. A P-Route provides a | |||
| longer match to the Target Address than the default route via the | longer match to the Target Address than the default route via the | |||
| main Root, so it is preferred. | main Root, so it is preferred. | |||
| * The main Root MAY also use P-DAO messages to install a Track as an | * The main Root MAY also use P-DAO messages to install a Track as an | |||
| independent routing topology (say, Traffic Engineered) to achieve | independent routing topology (say, Traffic Engineered) to achieve | |||
| particular routing characteristics from Ingress to Egress | particular routing characteristics from ingress to egress | |||
| endpoints. To achieve this, the main Root MUST set up a Local RPL | endpoints. To achieve this, the main Root MUST set up a Local RPL | |||
| Instance (see Section 5 of [RPL]), and the Local RPLInstanceID | Instance (see Section 5 of [RPL]), and the Local RPLInstanceID | |||
| serves as the TrackID. The TrackID MUST be unique for the IPv6 | serves as the TrackID. The TrackID MUST be unique for the IPv6 | |||
| ULA or GUA of the Track Ingress that serves as the DODAGID for the | ULA or GUA of the Track ingress that serves as the DODAGID for the | |||
| Track. | Track. | |||
| This way, a Track is uniquely identified by the tuple (DODAGID, | This way, a Track is uniquely identified by the tuple (DODAGID, | |||
| TrackID) where the TrackID is always represented with the D flag | TrackID) where the TrackID is always represented with the 'D' flag | |||
| set to 0 (see also Section 5.1 of [RPL]), indicating that when | set to 0 (see also Section 5.1 of [RPL]), indicating that when | |||
| used in an RPI, the source address of the IPv6 packet signals the | used in an RPI, the source address of the IPv6 packet signals the | |||
| DODAGID. | DODAGID. | |||
| The P-DAO Base Object MUST indicate the tuple (DODAGID, TrackID) | The P-DAO Base Object MUST indicate the tuple (DODAGID, TrackID) | |||
| that identifies the Track as shown in Figure 8, and the P-RouteID | that identifies the Track as shown in Figure 8, and the P-RouteID | |||
| that identifies the P-Route MUST be signaled in the VIO as shown | that identifies the P-Route MUST be signaled in the VIO as shown | |||
| in Figure 16. | in Figure 16. | |||
| The Track Ingress is the Root of the DODAGID formed by the Local | The Track ingress is the Root of the DODAGID formed by the Local | |||
| RPL Instance. It owns the namespace of its TrackIDs, so it can | RPL Instance. It owns the namespace of its TrackIDs, so it can | |||
| pick any unused value to request a new Track with a PDR. In a | pick any unused value to request a new Track with a PDAOReq. In a | |||
| particular deployment where PDRs are not used, a portion of the | particular deployment where PDAOReqs are not used, a portion of | |||
| namespace can be administratively delegated to the main Root, | the namespace can be administratively delegated to the main Root, | |||
| meaning that the main Root is authoritative for assigning the | meaning that the main Root is authoritative for assigning the | |||
| TrackIDs for the Tracks it creates. | TrackIDs for the Tracks it creates. | |||
| With this specification, the main Root is aware of all the active | With this specification, the main Root is aware of all the active | |||
| Tracks, so it can also pick any unused value to form Tracks | Tracks, so it can also pick any unused value to form Tracks | |||
| without a PDR. To avoid a collision of the main Root and the | without a PDAOReq. To avoid a collision of the main Root and the | |||
| Track Ingress picking the same value at the same time, it is | Track ingress picking the same value at the same time, it is | |||
| RECOMMENDED that the Track Ingress starts allocating the ID value | RECOMMENDED that the Track ingress starts allocating the ID value | |||
| of the Local RPLInstanceID (see Section 5.1 of [RPL]) used as | of the Local RPLInstanceID (see Section 5.1 of [RPL]) used as | |||
| TrackIDs with the value 0 incrementing, while the Root starts with | TrackIDs with the value 0 incrementing, while the Root starts with | |||
| 63 decrementing. | 63 decrementing. | |||
| 6.4. Installing a Track | 6.4. Installing a Track | |||
| A path can be installed by a single P-Route that signals the sequence | A path can be installed by a single P-Route that signals the sequence | |||
| of consecutive nodes either in Storing Mode as a single-segment Track | of consecutive nodes either in Storing Mode as a single-segment Track | |||
| or in Non-Storing Mode as a single-protection-path Track. A single- | or in Non-Storing Mode as a single-protection-path Track. A single- | |||
| protection-path Track can be installed as a loose Non-Storing Mode | protection-path Track can be installed as a loose Non-Storing Mode | |||
| P-Route, in which case the next loose entry must recursively be | P-Route, in which case the next loose entry must recursively be | |||
| reached over a path. | reached over a path. | |||
| A Complex Track can be installed as a collection of P-Routes with the | A Complex Track can be installed as a collection of P-Routes with the | |||
| same DODAGID and Track ID. The Ingress of a Non-Storing Mode P-Route | same DODAGID and TrackID. The ingress of a Non-Storing Mode P-Route | |||
| is the owner and Root of the DODAGID. The Ingress of a Storing Mode | is the owner and Root of the DODAGID. The ingress of a Storing Mode | |||
| P-Route must be either the owner of the DODAGID or a hop of a | P-Route must be either the owner of the DODAGID or a hop of a | |||
| protection path of the same Track. In the latter case, the Targets | protection path of the same Track. In the latter case, the Targets | |||
| of the P-Route must include the next hop of the protection path if | of the P-Route must include the next hop of the protection path if | |||
| there is one to ensure forwarding continuity. In the case of a | there is one to ensure forwarding continuity. In the case of a | |||
| Complex Track, each segment is maintained independently and | Complex Track, each segment is maintained independently and | |||
| asynchronously by the Root, with its own lifetime that may be | asynchronously by the Root, with its own lifetime that may be | |||
| shorter, the same, or longer than that of the Track. | shorter, the same, or longer than that of the Track. | |||
| A route along a Track for which the TrackID is not the RPLInstanceID | A route along a Track for which the TrackID is not the RPLInstanceID | |||
| of the main DODAG MUST be installed with a higher precedence than the | of the main DODAG MUST be installed with a higher precedence than the | |||
| routes along the main DODAG, meaning that: | routes along the main DODAG, meaning that: | |||
| * The longest match MUST be the prime comparison for routing. | * The longest match MUST be the prime comparison for routing. | |||
| * For an equal-length match, the route along the Track MUST be | * For an equal-length match, the route along the Track MUST be | |||
| preferred over the one along the main DODAG. | preferred over the one along the main DODAG. | |||
| * There SHOULD NOT be two different Tracks leading to the same | * There SHOULD NOT be two different Tracks leading to the same | |||
| Target from same Ingress node, unless there's a policy for | Target from same ingress node, unless there's a policy for | |||
| selecting which packets use which Track; such a policy is out of | selecting which packets use which Track; such a policy is out of | |||
| scope. | scope. | |||
| * A packet that was routed along a Track MUST NOT be routed along | * A packet that was routed along a Track MUST NOT be routed along | |||
| the main DODAG again; if the destination is not reachable as a | the main DODAG again; if the destination is not reachable as a | |||
| neighbor by the node where the packet exits the Track, then the | neighbor by the node where the packet exits the Track, then the | |||
| packet MUST be dropped. | packet MUST be dropped. | |||
| 6.4.1. Signaling a Projected Route | 6.4.1. Signaling a Projected Route | |||
| skipping to change at line 2810 ¶ | skipping to change at line 2822 ¶ | |||
| A P-DAO message MUST be sent from the address of the Root that serves | A P-DAO message MUST be sent from the address of the Root that serves | |||
| as the DODAGID for the main DODAG. It MUST contain either exactly | as the DODAGID for the main DODAG. It MUST contain either exactly | |||
| one sequence of one or more RTOs followed by one VIO or any number of | one sequence of one or more RTOs followed by one VIO or any number of | |||
| sequences of one or more RTOs followed by one or more TIOs. The | sequences of one or more RTOs followed by one or more TIOs. The | |||
| former is the normal expression for this specification, whereas the | former is the normal expression for this specification, whereas the | |||
| latter corresponds to the variation for less-constrained environments | latter corresponds to the variation for less-constrained environments | |||
| described in Section 7.2. | described in Section 7.2. | |||
| A P-DAO that creates or updates a protection path MUST be sent to a | A P-DAO that creates or updates a protection path MUST be sent to a | |||
| GUA or a ULA of the Ingress of the protection path; it MUST contain | GUA or a ULA of the ingress of the protection path; it MUST contain | |||
| the full list of hops in the protection path unless the protection | the full list of hops in the protection path unless the protection | |||
| path is being removed. A P-DAO that creates a new Track segment MUST | path 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 | be sent to a GUA or a ULA of the segment egress and MUST signal the | |||
| full list of hops in a segment; a P-DAO that updates (including | full list of hops in a segment; a P-DAO that updates (including | |||
| deletes) a section of a segment MUST be sent to the first node after | 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 | the modified segment and MUST signal the full list of hops in the | |||
| starting at the node that immediately precedes the modified section. | section starting at the node that immediately precedes the modified | |||
| section. | ||||
| In Non-Storing Mode, as discussed in Section 6.4.3, the Root sends | In Non-Storing Mode, as discussed in Section 6.4.3, the Root sends | |||
| the P-DAO to the Track Ingress where the source routing state is | the P-DAO to the Track ingress where the source routing state is | |||
| applied, whereas in Storing Mode, the P-DAO is sent to the last node | applied, whereas in Storing Mode, the P-DAO is sent to the last node | |||
| on the installed path and forwarded in the reverse direction, | on the installed path and forwarded in the reverse direction, | |||
| installing a Storing Mode state at each hop, as discussed in | installing a Storing Mode state at each hop, as discussed in | |||
| Section 6.4.2. In both cases, the Track Ingress is the owner of the | Section 6.4.2. In both cases, the Track ingress is the owner of the | |||
| Track, and it generates the P-DAO-ACK when the installation is | Track, and it generates the P-DAO-ACK when the installation is | |||
| successful. | successful. | |||
| If the 'K' flag is present in the P-DAO, the P-DAO MUST be | If the 'K' flag is present in the P-DAO, the P-DAO MUST be | |||
| acknowledged using a DAO-ACK that is sent back to the address of the | acknowledged using a P-DAO-ACK that is sent back to the address of | |||
| Root from which the P-DAO was received. In most cases, the first | the Root from which the P-DAO was received. In most cases, the first | |||
| node of the protection path, segment, or updated section of the | node of the protection path, segment, or updated section of the | |||
| segment is the node that sends the acknowledgment. The exception to | 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 | 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. | 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 | In a No-Path Non-Storing Mode P-DAO, the SRH-6LoRH MUST NOT be | |||
| present in the NSM-VIO; the state in the Ingress is erased | present in the NSM-VIO; the state in the ingress is erased | |||
| regardless. In all other cases, a VIO MUST contain at least one Via | regardless. In all other cases, a VIO MUST contain at least one Via | |||
| Address, and a Via Address MUST NOT be present more than once, which | Address, and a Via Address MUST NOT be present more than once, which | |||
| would create a loop. | would create a loop. | |||
| A node that processes a VIO MAY verify whether any of these | A node that processes a VIO MAY verify whether any of these | |||
| conditions happen, and when one does, it MUST ignore the P-DAO and | conditions happen, and when one does, it MUST ignore the P-DAO and | |||
| reject it with a RPL Rejection Status of "Error in VIO" in the DAO- | reject it with a RPL rejection status of "Error in VIO" in the DAO- | |||
| ACK; see Section 11.16. | ACK; see Section 11.16. | |||
| Errors, other than those discussed explicitly, that prevent the | Errors, other than those discussed explicitly, that prevent the | |||
| installation of the route are acknowledged with a RPL Rejection | installation of the route are acknowledged with a RPL rejection | |||
| Status of "Unqualified Rejection" in the DAO-ACK. | status of "Unqualified Rejection" in the P-DAO-ACK. | |||
| 6.4.2. Installing a Track Segment with a Storing Mode P-Route | 6.4.2. Installing a Track Segment with a Storing Mode P-Route | |||
| As illustrated in Figure 18, a Storing Mode P-DAO installs a route | As illustrated in Figure 18, a Storing Mode P-DAO installs a route | |||
| along the segment signaled by the SM-VIO towards the Targets | along the segment signaled by the SM-VIO towards the Targets | |||
| indicated in the Target Options. The segment is to be included in a | indicated in the Target Options. The segment is to be included in a | |||
| DODAG indicated by the P-DAO Base Object, which may be the one formed | DODAG indicated by the P-DAO Base Object, which may be the one formed | |||
| by the main DODAG, or a Track associated with a Local RPL Instance. | by the main DODAG, or a Track associated with a Local RPL Instance. | |||
| ------+--------- | ------+--------- | |||
| skipping to change at line 2879 ¶ | skipping to change at line 2892 ¶ | |||
| o o o o o \\ o o o | | DAO | Route . | 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 Egress o o v | DAO v . | o o o o o Egress o o v | DAO v . | |||
| o o LLN o o o | | o o LLN o o o | | |||
| o o o o o Loose Source Route Path | | o o o o o Loose Source Route Path | | |||
| o o o o v | o o o o v | |||
| Figure 18: Projecting a Route | Figure 18: Projecting a Route | |||
| In order to install the relevant routing state along the segment, the | 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 contains | routing segment that is being installed. The P-DAO message contains | |||
| an SM-VIO with a strict sequence of Via Addresses. The SM-VIO | an SM-VIO with a strict sequence of Via Addresses. The SM-VIO | |||
| follows one or more RTOs indicating the Targets to which the Track | follows one or more RTOs indicating the Targets to which the Track | |||
| leads. The SM-VIO contains a Segment Lifetime for which the state is | leads. The SM-VIO contains a Segment Lifetime for which the state is | |||
| to be maintained. | 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 SM-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 segment Ingress node recognizes its role | In a similar fashion, the segment ingress node recognizes its role | |||
| because it matches the first Via Address in the SM-VIO. | because it matches the 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) based on its existing tables. | already able to route to the Target(s) based on its existing tables. | |||
| If one of the Targets is not known, the node MUST answer to the Root | If one of the Targets is not known, the node MUST answer to the Root | |||
| with a DAO-ACK listing the unreachable Target(s) in an RTO and a | with a P-DAO-ACK listing the unreachable Target(s) in an RTO and a | |||
| rejection status of "Unreachable Target". | rejection status of "Unreachable Target". | |||
| If the Egress node can reach all the Targets, it forwards the P-DAO | If the egress node can reach all the Targets, it forwards the P-DAO | |||
| with unchanged content to its predecessor in the segment as indicated | with unchanged content to its predecessor in the segment as indicated | |||
| in the list of VIOs, and the message is recursively propagated | in the list of VIOs, and the message is recursively propagated | |||
| unchanged along the sequence of routers indicated in the P-DAO, but | unchanged along the sequence of routers indicated in the P-DAO, but | |||
| in the reverse order, from Egress to Ingress. | in the reverse order, from egress to ingress. | |||
| The address of the predecessor to be used as the destination of the | The address of the predecessor to be used as the destination of the | |||
| propagated DAO message is found in the Via Address list at the | propagated DAO message is found in the Via Address list at the | |||
| position preceding the one that contains the address of the | position preceding the one that contains the address of the | |||
| propagating node, which is used as the source of the message. | propagating node, which is used as the 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 | |||
| SM-VIO. A router that cannot store the routes to all the Targets in | SM-VIO. A router that cannot store the routes to all the Targets in | |||
| a P-DAO MUST reject the P-DAO by sending a DAO-ACK to the Root with a | a P-DAO MUST reject the P-DAO by sending a P-DAO-ACK to the Root with | |||
| Rejection Status of "Out of Resources" as opposed to forwarding the | a rejection status of "Out of Resources" as opposed to forwarding the | |||
| DAO to its predecessor in the list. The router MAY install | DAO to its predecessor in the list. The router MAY install | |||
| additional routes towards the Via Addresses that appear in the SM-VIO | additional routes towards the Via Addresses that appear in the SM-VIO | |||
| after its own address, if any, but in case of a conflict or a lack of | after its own address, if any, but in case of a conflict or a lack of | |||
| resource, the route(s) to the Target(s) MUST be installed in | resource, the route(s) to the Target(s) MUST be installed in | |||
| priority. | priority. | |||
| If a router cannot reach its predecessor in the SM-VIO, the router | If a router cannot reach its predecessor in the SM-VIO, the router | |||
| MUST send the DAO-ACK to the Root with a Rejection Status of | MUST send the P-DAO-ACK to the Root with a rejection status of | |||
| "Predecessor Unreachable". | "Predecessor Unreachable". | |||
| The process continues until the P-DAO is propagated to the Ingress | The process continues until the P-DAO is propagated to the ingress | |||
| router of the segment, which answers with a DAO-ACK to the Root. The | router of the segment, which answers with a P-DAO-ACK to the Root. | |||
| Root always expects a DAO-ACK, either from the Track Ingress with a | The Root always expects a P-DAO-ACK, either from the Track ingress | |||
| positive status or from any node along the segment with a negative | with a positive status or from any node along the segment with a | |||
| status. If the DAO-ACK is not received, the Root may retry the DAO | negative status. If the P-DAO-ACK is not received, the Root may | |||
| with the same TID or tear down the route. | retry the DAO with the same TrackID or tear down the route. | |||
| 6.4.3. Installing a Protection Path with a Non-Storing Mode P-Route | 6.4.3. Installing a Protection Path with a Non-Storing Mode P-Route | |||
| As illustrated in Figure 19, a Non-Storing Mode P-DAO installs a | As illustrated in Figure 19, a Non-Storing Mode P-DAO installs a | |||
| source-routed path within the Track indicated by the P-DAO Base | source-routed path within the Track indicated by the P-DAO Base | |||
| Object towards the Targets indicated in the Target Options. The | Object towards the Targets indicated in the Target Options. The | |||
| source-routed path requires a Source Routing Header, which implies an | source-routed path requires a Source Routing Header, which implies an | |||
| IP-in-IP encapsulation is needed to add the SRH to an existing | IP-in-IP encapsulation is needed to add the SRH to an existing | |||
| packet. It is sent to the Track Ingress, which creates a tunnel | packet. It is sent to the Track ingress, which creates a tunnel | |||
| associated with the Track and connected routes over the tunnel to the | associated with the Track and connected routes over the tunnel to the | |||
| Targets in the RTO. The tunnel encapsulation MUST incorporate a | Targets in the RTO. The tunnel encapsulation MUST incorporate a | |||
| routing header via the list addresses listed in the VIO in the same | 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 | order. The content of the NSM-VIO starting at the first SRH-6LoRH | |||
| header MUST be used verbatim by the Track Ingress when it | header MUST be used verbatim by the Track ingress when it | |||
| encapsulates a packet to forward it over the Track. | 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 o X o X Segment | |||
| o o o o o o o o X Egress X | o o o o o o o o X Egress X | |||
| o o o o o | | o o o o o | | |||
| Target | Target | |||
| o o LLN o o | o o LLN o o | |||
| o o o o | o o o o | |||
| Figure 19: Projecting a Non-Storing Route | Figure 19: Projecting a Non-Storing Route | |||
| The next entry in the source-routed path must be either a neighbor of | The next entry in the source-routed path must be either a neighbor of | |||
| the previous entry or reachable as a Target via another P-Route, | the previous entry or reachable as a Target via another P-Route, | |||
| either Storing or Non-Storing, which implies that the nested P-Route | either Storing or Non-Storing, which implies that the nested P-Route | |||
| has to be installed before the loose sequence is and that P-Routes | has to be installed before the loose sequence is and that P-Routes | |||
| must be installed from the last to the first along the datapath. For | must be installed from the last to the first along the datapath. For | |||
| instance, a segment of a Track must be installed before the | instance, a segment of a Track must be installed before the | |||
| protection path(s) of the same Track that uses it, and stitched | protection path(s) of the same Track that uses it, and stitched | |||
| segments must be installed in order from the last to the first to | segments must be installed in order from the last to the first to | |||
| reach the Targets. | reach the Targets. | |||
| If the next entry in the loose sequence is reachable over a Storing | If the next entry in the loose sequence is reachable over a Storing | |||
| Mode P-Route, it MUST be the Target of a segment and the Ingress of a | Mode P-Route, it MUST be the Target of a segment and the ingress of a | |||
| next segment, which are both already set up; the segments are | next segment, which are both already set up; the segments are | |||
| associated with the same Track, which avoids needing an additional | associated with the same Track, which avoids needing an additional | |||
| encapsulation. For instance, in Section 3.5.1.3, segments A==>B-to-C | encapsulation. For instance, in Section 3.5.1.3, segments A==>B-to-C | |||
| and C==>D==>E-to-F must be installed with Storing Mode P-DAO messages | 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 | 1 and 2 before the Track A-->C-->E-to-F that joins them can be | |||
| installed with Non-Storing Mode P-DAO 3. | installed with Non-Storing Mode P-DAO 3. | |||
| Conversely, if it is reachable over a Non-Storing Mode P-Route, the | Conversely, if it is reachable over a Non-Storing Mode P-Route, the | |||
| next loose source-routed hop of the inner Track is a Target of a | next loose source-routed hop of the inner Track is a Target of a | |||
| previously installed Track and the Ingress of a next Track, which | previously installed Track and the ingress of a next Track, which | |||
| requires de- and re-encapsulation when switching the outer Tracks | requires de- and re-encapsulation when switching the outer Tracks | |||
| that join the loose hops. This is exemplified in Section 3.5.2.3 | that join the loose hops. This is exemplified in Section 3.5.2.3 | |||
| where Non-Storing Mode P-DAOs 1 and 2 install strict Tracks that Non- | where Non-Storing Mode P-DAOs 1 and 2 install strict Tracks that Non- | |||
| Storing Mode P-DAO 3 joins as a super Track. In such a case, packets | Storing Mode P-DAO 3 joins as a super Track. In such a case, packets | |||
| are subject to double IP-in-IP encapsulation. | are subject to double IP-in-IP encapsulation. | |||
| 6.5. Tearing Down a P-Route | 6.5. Tearing Down a P-Route | |||
| A P-DAO with a lifetime of 0 is interpreted as a No-Path DAO and | A P-DAO with a lifetime of 0 is interpreted as a No-Path DAO. Its | |||
| results in cleaning up existing state as opposed to refreshing an | function is to clean up an existing state as opposed to refreshing it | |||
| existing one or installing a new one. To tear down a Track, the Root | or installing a new one. To tear down a Track, the Root must tear | |||
| must tear down all the Track segments and protection paths that | down all the Track segments and protection paths that compose it one | |||
| compose it one by one. | by one. | |||
| Since the protection path state of a Track is located only on the | Since the protection path state of a Track is located only on the | |||
| Ingress Node, the Root cleans up the protection path by sending an | ingress Node, the Root cleans up the protection path by sending an | |||
| NSM-VIO to the Ingress to indicate the TrackID and the P-RouteID of | NSM-VIO to the ingress to indicate the TrackID and the P-RouteID of | |||
| the protection path being removed, a Segment Lifetime of 0, and a | the protection path being removed, a Segment Lifetime of 0, and a | |||
| newer Segment Sequence. The SRH-6LoRH with Via Addresses in the NSM- | newer Segment Sequence. The SRH-6LoRH with Via Addresses in the NSM- | |||
| VIO is not needed; it SHOULD NOT be placed in the message and MUST be | VIO is not needed; it SHOULD NOT be placed in the message and MUST be | |||
| ignored by the receiver. Upon that NSM-VIO, the Ingress node removes | ignored by the receiver. Upon that NSM-VIO, the ingress node removes | |||
| all state for that Track, if any, and replies positively anyway. | all state for that Track, if any, and replies positively anyway. | |||
| The Root cleans up a section of a segment by sending an SM-VIO to the | The Root cleans up a section of a segment by sending an SM-VIO to the | |||
| last node of the segment with an updated TrackID and P-RouteID, a | last node of the segment with an updated TrackID and P-RouteID, a | |||
| Segment Lifetime of 0, and a newer Segment Sequence. The Via | Segment Lifetime of 0, and a newer Segment Sequence. The Via | |||
| Addresses in the SM-VIO indicate the section of the segment being | Addresses in the SM-VIO indicate the section of the segment being | |||
| modified, from the first to the last node that is impacted. This can | 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 | 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. | more nodes that have been bypassed by a segment update. | |||
| skipping to change at line 3045 ¶ | skipping to change at line 3058 ¶ | |||
| to the operation itself. This is ensured by installing the new | to the operation itself. This is ensured by installing the new | |||
| section from its last node to the first, so when an intermediate node | section from its last node to the first, so when an intermediate node | |||
| installs a route along the new section, all the downstream nodes in | installs a route along the new section, all the downstream nodes in | |||
| the section have already installed their own. The disabled section | the section have already installed their own. The disabled section | |||
| is removed as well when the in-flight packets are forwarded along the | is removed as well when the in-flight packets are forwarded along the | |||
| new section. | new section. | |||
| 6.6.1. Maintaining a Track Segment | 6.6.1. Maintaining a Track Segment | |||
| To modify a section of a segment between the first node and a second | To modify a section of a segment between the first node and a second | |||
| downstream node (which can be the Ingress and Egress, respectively) | downstream node (which can be the ingress and egress, respectively) | |||
| while retaining those nodes in the segment, the Root sends an SM-VIO | while retaining those nodes in the segment, the Root sends an SM-VIO | |||
| to the second node indicating the sequence of nodes in the new | to the second node indicating the sequence of nodes in the new | |||
| section of the segment. The SM-VIO indicates the TrackID and the | section of the segment. The SM-VIO indicates the TrackID and the | |||
| P-RouteID of the segment being updated and a newer Segment Sequence. | 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 | 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 | way, it updates the state on the nodes that are common to the old and | |||
| new section of the segment and creates a state in the new nodes. | new section of the segment and creates a state in the new nodes. | |||
| When the state is updated in an intermediate node, that node might | When the state is updated in an intermediate node, that node might | |||
| still receive packets that were in flight from the Ingress to self | still receive packets that were in flight from the ingress to self | |||
| over the old section of the segment. Since the remainder of the | over the old section of the segment. Since the remainder of the | |||
| segment is already updated, the packets are forwarded along the new | segment is already updated, the packets are forwarded along the new | |||
| version of the segment from that node on. | version of the segment from that node on. | |||
| After a reasonable amount of time, the Root tears down the remaining | After a reasonable amount of time, the Root tears down the remaining | |||
| section(s) of the old segments as described in Section 6.5 to enable | section(s) of the old segments as described in Section 6.5 to enable | |||
| the deprecated sections to drain their traffic. | the deprecated sections to drain their traffic. | |||
| 6.6.2. Maintaining a Protection Path | 6.6.2. Maintaining a Protection Path | |||
| This specification allows the Root to add protection paths to a Track | This specification allows the Root to add protection paths to a Track | |||
| by sending a Non-Storing Mode P-DAO to the Ingress associated to the | by sending a Non-Storing Mode P-DAO to the ingress associated to the | |||
| same TrackID and a new Segment ID. If the protection path is loose, | same TrackID and a new SegmentID. If the protection path is loose, | |||
| then the segments that join the hops must be created first. It makes | then the segments that join the hops must be created first. It makes | |||
| sense to add a new protection path before removing one that is | sense to add a new protection path before removing one that is | |||
| becoming excessively lossy and switch to the new protection path | becoming excessively lossy and switch to the new protection path | |||
| before removing the old. Dropping a Track before the new one is | before removing the old. Dropping a Track before the new one is | |||
| installed would reroute the traffic via the root; this may increase | installed would reroute the traffic via the Root; this may increase | |||
| the latency beyond acceptable thresholds and overload the network | the latency beyond acceptable thresholds and overload the network | |||
| near the root. This may also cause loops in the case of stitched | near the Root. This may also cause loops in the case of stitched | |||
| Tracks: The packets that cannot be injected in the second Track might | Tracks: The packets that cannot be injected in the second Track might | |||
| be routed back and reinjected at the Ingress of the first Track. | be routed back and reinjected at the ingress of the first Track. | |||
| It is also possible to update a protection path by sending a Non- | It is also possible to update a protection path by sending a Non- | |||
| Storing Mode P-DAO to the Ingress with the same Segment ID, an | Storing Mode P-DAO to the ingress with the same SegmentID, an | |||
| incremented Segment Sequence, and the new complete list of hops in | incremented Segment Sequence, and the new complete list of hops in | |||
| the NSM-VIO. Updating a live protection path means changing one or | the NSM-VIO. Updating a live protection path means changing one or | |||
| more of the intermediate loose hops, and it involves laying out new | more of the intermediate loose hops, and it involves laying out new | |||
| segments from and to the new loose hops before the NSM-VIO is issued | segments from and to the new loose hops before the NSM-VIO is issued | |||
| for the new protection path. | for the new protection path. | |||
| Packets that are in flight over the old version of the protection | Packets that are in flight over the old version of the protection | |||
| path still follow the old source route path over the old segments. | path still follow the old source route path over the old segments. | |||
| After a reasonable time, the Root tears down those segments as | After a reasonable time, the Root tears down those segments as | |||
| described in Section 6.5 to enable the deprecated segments to drain | described in Section 6.5 to enable the deprecated segments to drain | |||
| their traffic. | their traffic. | |||
| 6.7. Encapsulating and Forwarding Along a Track | 6.7. Encapsulating and Forwarding Along a Track | |||
| When injecting a packet in a Track, the Ingress router must | When injecting a packet in a Track, the ingress router must | |||
| encapsulate the packet using IP-in-IP to add the Source Routing | encapsulate the packet using IP-in-IP to add the Source Routing | |||
| Header with the final destination set to the Track Egress. | Header with the final destination set to the Track egress. | |||
| All properties of a Track's operations are inherited from the main | All properties of a Track's operations are inherited from the main | |||
| Instance that is used to install the Track. For instance, the use of | Instance that is used to install the Track. For instance, the use of | |||
| compression per [RFC8138] is determined by whether it is used in the | compression per [RFC8138] is determined by whether it is used in the | |||
| RPL main DODAG, e.g., by setting the 'T' flag [RFC9035] in the RPL | RPL main DODAG, e.g., by setting the 'T' flag [RFC9035] in the RPL | |||
| configuration option. | Configuration option. | |||
| When the Track Ingress places a packet in a Track, it encapsulates it | When the Track ingress places a packet in a Track, it encapsulates it | |||
| with an additional IPv6 header, a Routing Header, and an IPv6 Hop-by- | with an additional IPv6 header, a Routing Header, and an IPv6 Hop-by- | |||
| Hop Option Header that contains the RPI as follows: | Hop Option Header that contains the RPI as follows: | |||
| * In the uncompressed form, the source of the packet is the address | * In the uncompressed form, the source of the packet is the address | |||
| that this router uses as the DODAGID for the Track, the | that this router uses as the DODAGID for the Track, the | |||
| destination is the first Via Address in the NSM-VIO, and the RH is | destination is the first Via Address in the NSM-VIO, and the RH is | |||
| an SRH [RFC6554] that contains the list of the remaining Via | an SRH [RFC6554] that contains the list of the remaining Via | |||
| Addresses, ending with the Track Egress. | Addresses, ending with the Track egress. | |||
| * To compress RPL artifacts in data packets as indicated in | * In a network where 6LoWPAN header compression [RFC6282] is in use, | |||
| [RFC8138], the preferred alternative in a network where 6LoWPAN | it is preferred to implement "IPv6 over Low-Power Wireless | |||
| header compression [RFC6282] is used is to implement "IPv6 over | Personal Area Network (6LoWPAN) Paging Dispatch" [RFC8025] and | |||
| Low-Power Wireless Personal Area Network (6LoWPAN) Paging | compress the RPL artifacts as indicated in [RFC8138]. | |||
| Dispatch" [RFC8025]. | ||||
| In that case, the source-routed header is the exact copy of the | In that case, the RPL Source Route Header is the exact copy of the | |||
| (chain of) SRH-6LoRH found in the NSM-VIO, also ending with the | (chain of) SRH-6LoRH found in the NSM-VIO, also ending with 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 a similar case in Figure 20 of | Encapsulator Address field; see a similar case in Figure 20 of | |||
| [RFC8138]. | [RFC8138]. | |||
| To signal the Track in the packet, this specification leverages the | To signal the Track in the packet, this specification leverages the | |||
| RPL Forwarding model as follows: | RPL forwarding model as 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 MUST be placed in the outer chain | RPLInstanceID field of the RPI MUST be placed in the outer chain | |||
| of IPv6 headers. | 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 | |||
| the source address in the IPv6 header is set to the DODAGID (see | that the source address in the IPv6 header is set to the DODAGID | |||
| more in Section 6.3). | (see more in Section 6.3). | |||
| * This specification conforms to the principles of [RFC9008] with | * This specification conforms to the principles of [RFC9008] with | |||
| regard to packet forwarding and encapsulation along a Track as | regard to packet forwarding and encapsulation along a Track as | |||
| follows: | follows: | |||
| - With this specification, the Track is a RPL DODAG. From the | - With this specification, the Track is a RPL DODAG. From the | |||
| perspective of that DODAG, the Track Ingress is the Root, the | perspective of that DODAG, the Track ingress is the Root, the | |||
| Track Egress is a RPL-Aware 6LR, and neighbors of the Track | Track egress is a RPL-Aware 6LR, and neighbors of the Track | |||
| Egress that can be reached via the Track, but are external to | egress that can be reached via the Track, but are external to | |||
| it, are external destinations and treated as RPL-Unaware Leaves | it, are external destinations and treated as RPL-Unaware Leaves | |||
| (RULs). The encapsulation rules in [RFC9008] apply. | (RULs). The encapsulation rules in [RFC9008] apply. | |||
| - 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. | |||
| - Thus, the Track Ingress must encapsulate the traffic that it | - Thus, the Track ingress must encapsulate the traffic that it | |||
| did not originate, and it must include an RPI in the | did not originate, and it must include an RPI in the | |||
| encapsulation to signal the TrackID. | encapsulation to signal the TrackID. | |||
| 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 recursively in a | a first Non-Storing Mode Track MAY be placed recursively in a | |||
| second Track to cover one loose hop of the first Track, as | second Track to cover one loose hop of the first Track, as | |||
| discussed in more detail in Section 3.5.2.3. On the other hand, a | discussed in more detail in Section 3.5.2.3. On the other hand, a | |||
| Storing Mode segment must be strict, and a packet that it placed | Storing Mode segment must be strict, and a packet that it placed | |||
| in a Storing Mode segment MUST follow that segment till the | in a Storing Mode segment MUST follow that segment till the | |||
| segment Egress. | segment egress. | |||
| It is known that a packet is forwarded along a Track by the source | It is known that a packet is forwarded along a Track by the source | |||
| address and the RPI in the encapsulation. The Track ID is used to | address and the RPI in the encapsulation. The TrackID is used to | |||
| identify the RIB entries associated to that Track, which, in | identify the RIB entries associated to that Track, which, in | |||
| intermediate nodes, correspond to the P-Routes for the segments of | intermediate nodes, correspond to the P-Routes for the segments of | |||
| the Track that the forwarding router is aware of. The packet | the Track that the forwarding router is aware of. Packet processing | |||
| processing uses a precedence that favors self-delivery or routing | uses the following precedence: 1) self-delivery or Routing Header | |||
| header handling when one is present, then delivery to direct | handling when one is present, 2) delivery to direct neighbors, 3) | |||
| neighbors, then to indirect neighbors, then routing along a segment | delivery to indirect neighbors, 4) routing along a segment along the | |||
| along the Track, and finally as a last resort injecting the packet in | Track, and 5) injecting the packet in another Track, as a last | |||
| another Track. | resort. | |||
| To achieve this, the packet handling logic MUST happen in the | To achieve this, the packet handling logic MUST happen in the | |||
| following order: | following order: | |||
| * If the destination of the packet is self: | * If the destination of the packet is self: | |||
| 1. If the header chain contains a RPL Source Route Header that is | 1. If the header chain contains a RPL Source Route Header that is | |||
| not fully consumed, then the packet is forwarded along the | not fully consumed, then the packet is forwarded along the | |||
| Track as prescribed by [RFC6554], meaning that the next entry | Track as prescribed by [RFC6554], meaning that the next entry | |||
| in the routing header becomes the destination. | in the Routing Header becomes the destination. | |||
| 2. Otherwise, if the packet was encapsulated, then the packet is | 2. Otherwise, if the packet was encapsulated, then the packet is | |||
| decapsulated and the forwarding process recurses; else, the | decapsulated and the forwarding process recurses; else, the | |||
| packet is delivered to the stack. | packet is delivered to the stack. | |||
| * Otherwise, the packet is forwarded as follows: | * Otherwise, the packet is forwarded as follows: | |||
| 1. If the destination of the packet is a direct neighbor, e.g., | 1. If the destination of the packet is a direct neighbor, e.g., | |||
| installed by IPv6 Neighbor Discovery, then the packet MUST be | installed by IPv6 Neighbor Discovery, then the packet MUST be | |||
| forwarded to that neighbor. | forwarded to that neighbor. | |||
| skipping to change at line 3224 ¶ | skipping to change at line 3236 ¶ | |||
| as the target), then the packet is encapsulated to be | as the target), then the packet is encapsulated to be | |||
| forwarded along that Track and the forwarding process | forwarded along that Track and the forwarding process | |||
| recurses; otherwise, the packet is dropped. | recurses; otherwise, the packet is dropped. | |||
| 5. To avoid loops, and as opposed to packets that were not | 5. To avoid loops, and as opposed to packets that were not | |||
| encapsulated, a packet that was decapsulated from a Track MUST | encapsulated, a packet that was decapsulated from a Track MUST | |||
| NOT be routed along the default route of the main DODAG; this | NOT be routed along the default route of the main DODAG; this | |||
| would mean that the end-to-end path is uncontrolled. The node | would mean that the end-to-end path is uncontrolled. The node | |||
| that discovers the fault MUST discard the packet. | that discovers the fault MUST discard the packet. | |||
| The node that drops a packet for either of the reasons above MUST | The node that drops a packet in any of the steps above MUST send an | |||
| send an ICMPv6 error message [RFC4443] to the Root, with the new code | ICMPv6 error message [RFC4443] to the Root, with a new code "Error in | |||
| "Error in P-Route" (see Section 11.15). The Root can then repair by | P-Route" (see Section 11.15). The Root can then repair by updating | |||
| updating the broken segment and/or Tracks, and in the case of a | the broken segment and/or Tracks. In the case of a broken segment, | |||
| broken segment, remove the leftover sections of the segment using SM- | the Root removes the leftover sections of the segment using SM-VIOs | |||
| VIOs with a lifetime of 0 indicating the section to one or more nodes | with a lifetime of 0, indicating the section where one or more nodes | |||
| being removed (see Section 6.6). | are being removed (see Section 6.6). | |||
| In case of a permanent forwarding error along a source route path, | In case of a permanent forwarding error along a source route path, | |||
| the node that fails to forward SHOULD send an ICMP error with the | the node that fails to forward SHOULD send an ICMP error with the | |||
| code "Error in Source Routing Header" back to the source of the | code "Error in Source Routing Header" back to the source of the | |||
| packet, as described in Section 11.2.2.3 of [RPL]. Upon receiving | packet, as described in Section 11.2.2.3 of [RPL]. Upon receiving | |||
| this message, the encapsulating node SHOULD stop using the source | this message, the encapsulating node SHOULD stop using the source | |||
| route path for a reasonable period of time, which depends on the | route path for a reasonable period of time, which depends on the | |||
| deployment, and it SHOULD send an ICMP message with the code "Error | deployment, and it SHOULD send an ICMP message with the code "Error | |||
| in P-Route" to the Root. Failure to follow these steps may result in | 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 | packet loss and wasted resources along the source route path that is | |||
| skipping to change at line 3258 ¶ | skipping to change at line 3270 ¶ | |||
| The portion of the invoking packet that is sent back in the ICMP | The portion of the invoking packet that is sent back in the ICMP | |||
| message SHOULD record at least up to the RH if one is present, and | message SHOULD record at least up to the RH if one is present, and | |||
| the hop of the RH SHOULD be consumed by this node so that the | the hop of the RH SHOULD be consumed by this node so that the | |||
| destination in the IPv6 header is the next hop that this node could | destination in the IPv6 header is the next hop that this node could | |||
| not reach. If a 6LoRH [RFC8138] is used to carry the IPv6 routing | not reach. If a 6LoRH [RFC8138] is used to carry the IPv6 routing | |||
| information in the outer header, then the whole 6LoRH information | information in the outer header, then the whole 6LoRH information | |||
| SHOULD be present in the ICMP message. | SHOULD be present in the ICMP message. | |||
| 6.8. Compression of RPL Artifacts | 6.8. Compression of RPL Artifacts | |||
| When using [RFC8138] in the main DODAG operated in Non-Storing Mode | When the main DODAG in a 6LoWPAN LLN is operated in Non-Storing Mode | |||
| in a 6LoWPAN LLN, a typical packet that circulates in the main DODAG | and the data packets are compressed using [RFC8138], a typical packet | |||
| is formatted as shown in Figure 20, representing the case where an | that circulates in the main DODAG is formatted as shown in Figure 20, | |||
| IP-in-IP encapsulation is needed (see Table 19 of [RFC9008]): | representing the case where an IP-in-IP encapsulation is needed (see | |||
| Table 19 of [RFC9008]): | ||||
| +-+ ... -+- ... -+- ... -+-+- ... +-+-+-+ ... +-+-+ ... -+ ... +-... | +-+ ... -+- ... -+- ... -+-+- ... +-+-+-+ ... +-+-+ ... -+ ... +-... | |||
| |11110001| SRH- | RPI- | IP-in-IP | NH=1 |11110CPP| UDP | UDP | |11110001| SRH- | RPI- | IP-in-IP | NH=1 |11110CPP| UDP | UDP | |||
| | Page 1 | 6LoRH | 6LoRH | 6LoRH |LOWPAN_IPHC| UDP | hdr |Payld | | Page 1 | 6LoRH | 6LoRH | 6LoRH |LOWPAN_IPHC| UDP | hdr |Payld | |||
| +-+ ... -+- ... -+- ... -+-+- ... +-+-+-+ ... +-+-+ ... -+ ... +-... | +-+ ... -+- ... -+- ... -+-+- ... +-+-+-+ ... +-+-+ ... -+ ... +-... | |||
| <= RFC 6282 => | <= RFC 6282 => | |||
| <================ Inner packet ==================== = = | <================ Inner packet ==================== = = | |||
| Figure 20: A Packet as Forwarded Along the Main DODAG | Figure 20: A Packet as Forwarded Along the Main DODAG | |||
| Since there is no page switch between the encapsulated packet and the | Since there is no page switch between the encapsulated packet and the | |||
| encapsulation, the first octet of the compressed packet that acts as | encapsulation, the first octet of the compressed packet that acts as | |||
| the page selector is actually removed at encapsulation; therefore, | the page selector is actually removed at encapsulation; therefore, | |||
| the inner packet used in the descriptions below starts with the SRH- | the inner packet used in the descriptions below starts with the SRH- | |||
| 6LoRH and is exactly the packet represented in Figure 20, from the | 6LoRH and is exactly the packet represented in Figure 20, from the | |||
| second octet onward. | second octet onward. | |||
| When encapsulating the inner packet to place in the Track, the first | When encapsulating the inner packet to place in the Track, the first | |||
| header that the Ingress appends at the head of the inner packet is an | 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, | IP-in-IP 6LoRH header; in that header, the encapsulator address, | |||
| which maps to the IPv6 source address in the uncompressed form, | 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 | contains a GUA or ULA IPv6 address of the ingress node that serves as | |||
| the DODAGID for the Track, expressed in a compressed form using the | the DODAGID for the Track, expressed in a compressed form using the | |||
| DODAGID of the main DODAG as a reference for the compression. If the | DODAGID of the main DODAG as a reference for the compression. If the | |||
| address is compressed to 2 bytes, the resulting value for the Length | address is compressed to 2 bytes, the resulting value for the Length | |||
| field (shown in Figure 21) is 3, meaning that the SRH-6LoRH as a | field (shown in Figure 21) is 3, meaning that the SRH-6LoRH as a | |||
| whole is 5 octets long. | whole is 5 octets long. | |||
| 0 1 2 | 0 1 2 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- ... -+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- ... -+ | |||
| |1|0|1| Length | 6LoRH Type 6 | Hop Limit | Track DODAGID | | |1|0|1| Length | 6LoRH Type 6 | Hop Limit | Track DODAGID | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- ... -+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- ... -+ | |||
| Figure 21: The IP-in-IP 6LoRH Header | Figure 21: The IP-in-IP 6LoRH Header | |||
| At the head of the resulting sequence of bytes, the Track Ingress | At the head of the resulting sequence of bytes, the Track ingress | |||
| then adds the RPI that carries the TrackID as RPLInstanceID as a P- | then adds a P-RPI-6LoRH header to transport the RPI in its compressed | |||
| RPI-6LoRH Header, as illustrated in Figure 12, using the TrackID as | form as illustrated in Figure 12. The RPI carries the TrackID as | |||
| RPLInstanceID. Combined with the IP-in-IP 6LoRH Header, this allows | RPLInstanceID. Combined with the IP-in-IP 6LoRH header, this allows | |||
| identifying the Track without ambiguity. | identifying the Track without ambiguity. | |||
| The SRH-6LoRH is then added at the head of the resulting sequence of | The SRH-6LoRH is then added at the head of the resulting sequence of | |||
| bytes as a verbatim copy of the content of the SM-VIO that signaled | bytes as a verbatim copy of the content of the SM-VIO that signaled | |||
| the selected protection path. | the selected protection path. | |||
| 0 1 | 0 1 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 .. .. .. | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 .. .. .. | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- -+- -+ ... +- -+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- -+- -+ ... +- -+ | |||
| |1|0|0| Size |6LoRH Type 0..4| Hop1 | Hop2 | | HopN | | |1|0|0| Size |6LoRH Type 0..4| Hop1 | Hop2 | | HopN | | |||
| skipping to change at line 3355 ¶ | skipping to change at line 3368 ¶ | |||
| * When the main DODAG is operated in Non-Storing Mode, P-Routes | * When the main DODAG is operated in Non-Storing Mode, P-Routes | |||
| enable loose source routing, which is only an advantage in that | enable loose source routing, which is only an advantage in that | |||
| mode. Storing Mode does not use Source Routing Headers and does | mode. Storing Mode does not use Source Routing Headers and does | |||
| not derive the same benefits from this capability. | not derive the same benefits from this capability. | |||
| On the other hand, since RPL is a Layer 3 routing protocol, its | On the other hand, since RPL is a Layer 3 routing protocol, its | |||
| applicability extends beyond LLNs to a generic IP network. RPL | applicability extends beyond LLNs to a generic IP network. RPL | |||
| requires fewer resources than alternative IGPs such as OSPF, IS-IS, | requires fewer resources than alternative IGPs such as OSPF, IS-IS, | |||
| the Enhanced Interior Gateway Routing Protocol (EIGRP), BABEL, or RIP | the Enhanced Interior Gateway Routing Protocol (EIGRP), BABEL, or RIP | |||
| at the expense of a route stretch versus the shortest path routes to | when using routing stretch rather than the shortest path routes to a | |||
| a destination that those protocols compute. P-Routes add the | destination that those protocols compute. P-Routes add the | |||
| capability to install the shortest and/or constrained routes to | capability to install the shortest and/or constrained routes to | |||
| special destinations as discussed in Appendix A.9.4 of the ANIMA ACP | special destinations as discussed in Appendix A.9.4 of "An Autonomic | |||
| [RFC8994]. | Control Plane (ACP)" [RFC8994]. | |||
| In a powered and wired network, when enough memory to store the | In a powered and wired network, when enough memory to store the | |||
| needed routes is available, the RPL Storing Mode proposes a better | needed routes is available, the RPL Storing Mode proposes a better | |||
| trade-off than the Non-Storing Mode, as it reduces the route stretch | trade-off than the Non-Storing Mode, as it reduces the routing | |||
| and lowers the load on the Root. In that case, the control path | stretch and lowers the load on the Root. In that case, the control | |||
| between the Root and the RPL nodes can be maintained more | path between the Root and the RPL nodes can be maintained more | |||
| aggressively and with more redundancy than in LLNs, and the nodes can | aggressively and with more redundancy than in LLNs, and the nodes can | |||
| be reached to maintain the P-Routes at most times for a finer and | be reached to maintain the P-Routes at most times for a finer and | |||
| more reactive control. | more reactive control. | |||
| This section specifies the additions that are needed to support | This section specifies the additions that are needed to support | |||
| P-Routes when the main DODAG is operated in Storing Mode. As long as | P-Routes when the main DODAG is operated in Storing Mode. As long as | |||
| the RPI can be processed adequately by the data plane, the changes in | the RPI can be processed adequately by the data plane, the changes in | |||
| this specification are limited to the DAO message. The Track | this specification are limited to the DAO message. The Track | |||
| structure, routes, and forwarding operations remain the same. Since | structure, routes, and forwarding operations remain the same. Since | |||
| there is no capability negotiation, the expectation is that all the | there is no capability negotiation, the expectation is that all the | |||
| skipping to change at line 3413 ¶ | skipping to change at line 3426 ¶ | |||
| [RFC9010]. Having similar values in all nodes allows factorizing | [RFC9010]. Having similar values in all nodes allows factorizing | |||
| the TIO for multiple SIOs as done in [RPL]. | the TIO for multiple SIOs as done in [RPL]. | |||
| * The TIO is followed by one or more SIOs that provide an address | * The TIO is followed by one or more SIOs that provide an address | |||
| (ULA or GUA) of the advertised neighbor node. | (ULA or GUA) of the advertised neighbor node. | |||
| However, the RPL routing information headers may not be supported on | However, the RPL routing information headers may not be supported on | |||
| all types of routed network infrastructures, especially not in high- | all types of routed network infrastructures, especially not in high- | |||
| speed routers. When the RPI is not supported in the data plane, | speed routers. When the RPI is not supported in the data plane, | |||
| there cannot be Local RPL Instances and RPL can only operate as a | there cannot be Local RPL Instances and RPL can only operate as a | |||
| single topology (the main DODAG). The RPL Instance is that of the | single topology (the main DODAG). The RPL Instance is the one that | |||
| main DODAG, and the Ingress node that encapsulates is not the Root. | runs the main DODAG, and the ingress node that encapsulates the RPL | |||
| The routes along the Tracks are alternate routes to those available | Instance is not the Root. The routes along the Tracks are alternate | |||
| along the main DODAG. They MAY conflict with routes to children and | routes to those available along the main DODAG. They MAY conflict | |||
| MUST take precedence in the routing table. The Targets MUST be | with routes to children and MUST take precedence in the routing | |||
| adjacent to the Track Egress to avoid loops that may form if the | table. The Targets MUST be adjacent to the Track egress to avoid | |||
| packet is reinjected in the main DODAG. | loops that may form if the packet is reinjected in the main DODAG. | |||
| 7.2. A Track as a Full DODAG | 7.2. A Track as a Full DODAG | |||
| This specification builds Tracks with parallel or interleaved | This specification builds Tracks with parallel or interleaved | |||
| protection paths as opposed to a more complex DODAG with | protection paths as opposed to a more complex DODAG with | |||
| interconnections at any place desirable. The reason for that | interconnections at any place desirable. The reason for that | |||
| limitation is related to constrained node operations and the | limitation is related to constrained node operations and the | |||
| capability to store a large amount of topological information and | capability to store a large amount of topological information and | |||
| compute complex paths: | compute complex paths: | |||
| skipping to change at line 3441 ¶ | skipping to change at line 3454 ¶ | |||
| awareness and does not need to maintain dynamic information about | awareness and does not need to maintain dynamic information about | |||
| the link quality and availability. | the link quality and availability. | |||
| * The Root has complete topological information and statistical | * The Root has complete topological information and statistical | |||
| metrics that allow it, or its PCE, to perform a global | metrics that allow it, or its PCE, to perform a global | |||
| optimization of all Tracks in its DODAG. Based on that | optimization of all Tracks in its DODAG. Based on that | |||
| information, the Root computes the protection path and produces | information, the Root computes the protection path and produces | |||
| the source route paths. | the source route paths. | |||
| * The node merely selects one of the proposed paths and applies the | * The node merely selects one of the proposed paths and applies the | |||
| associated pre-computed routing header in the encapsulation. This | associated pre-computed Routing Header in the encapsulation. This | |||
| alleviates both the complexity of computing a path and the | alleviates both the complexity of computing a path and the | |||
| compressed form of the routing header. | compressed form of the Routing Header. | |||
| The RAW architecture [RAW-ARCH] actually expects the PLR at the Track | The RAW architecture [RAW-ARCH] actually expects the PLR at the Track | |||
| Ingress to react to changes in the forwarding conditions along the | ingress to react to changes in the forwarding conditions along the | |||
| Track and reroute packets to maintain the required degree of | Track and reroute packets to maintain the required degree of | |||
| reliability. To achieve this, the PLR needs the full richness of a | reliability. To achieve this, the PLR needs the full richness of a | |||
| DODAG to form any path that could meet the SLO. | DODAG to form any path that could meet the SLO. | |||
| This section specifies the additions that are needed to turn the | This section specifies the additions that are needed to turn the | |||
| Track into a full DODAG and enable the main Root to provide the | Track into a full DODAG and enable the main Root to provide the | |||
| necessary topological information to the Track Ingress. The | necessary topological information to the Track ingress. The | |||
| expectation is that the metrics that the PLR uses are of an order | expectation is that the PLR's metrics will be in a different order | |||
| other than that of the PCE, because of the difference of timescale | than the PCE's metrics because of the difference in the timescale | |||
| between routing and forwarding; see more in [RAW-ARCH]. It follows | between routing and forwarding; see more in [RAW-ARCH]. It follows | |||
| that the PLR will learn the metrics it needs from an alternate | that the PLR will learn the metrics it needs from an alternate | |||
| source, e.g., OAM frames. | source, e.g., OAM frames. | |||
| To pass the topological information to the Ingress, the Root uses a | To pass the topological information to the ingress, the Root uses a | |||
| P-DAO message that contains sequences of Targets and TIOs that | P-DAO message that contains sequences of Targets and TIOs that | |||
| collectively represent the Track, expressed in the same fashion as in | collectively represent the Track, expressed in the same fashion as in | |||
| classical Non-Storing Mode. The difference is that the Root is the | classical Non-Storing Mode. The difference is that the Root is the | |||
| source as opposed to the destination, and the Root can report | source as opposed to the destination, and the Root can report | |||
| information on many Targets, possibly the full Track, with one P-DAO. | information on many Targets, possibly the full Track, with one P-DAO. | |||
| Note that the Path Sequence and Lifetime in the TIO are selected by | Note that the Path Sequence and Lifetime in the TIO are selected by | |||
| the Root and that the Target/Transit information tuples in the P-DAO | the Root and that the Target/Transit information tuples in the P-DAO | |||
| are not those received by the Root in the DAO messages about the said | 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 | Targets. The Track may follow sibling routes and does not need to be | |||
| congruent with the main DODAG. | congruent with the main DODAG. | |||
| 8. Profiles | 8. Profiles | |||
| This document provides a set of tools that may or may not be needed | This document provides a set of tools that may or may not be needed | |||
| by an implementation depending on the type of application it serves. | by an implementation depending on the type of application it serves. | |||
| This section describes profiles that can be implemented separately | This section describes profiles that can be implemented separately, | |||
| and can be used to discriminate what an implementation can and cannot | e.g., using only a portion of this specification to meet a particular | |||
| do. This section describes profiles that enable implementing only a | use case, and can be used to discriminate what an implementation can | |||
| portion of this specification to meet a particular use case. | and cannot do. | |||
| Profiles 0 to 2 operate in the main Instance and do not require the | Profiles 0 to 2 operate in the main Instance and do not require the | |||
| support of Local RPL Instances or the indication of the RPL Instance | support of Local RPL Instances or the indication of the RPL Instance | |||
| in the data plane. Profile 3 and above leverage Local RPL Instances | in the data plane. Profile 3 and above leverage Local RPL Instances | |||
| to build arbitrary Tracks rooted at the Track Ingress and using its | to build arbitrary Tracks rooted at the Track ingress, using the | |||
| namespace for the TrackID. | namespace of the Track ingress for the TrackID. | |||
| Profiles 0 and 1 are REQUIRED by all implementations that may be used | Profiles 0 and 1 are REQUIRED by all implementations that may be used | |||
| in LLNs; Profile 1 leverages Storing Mode to reduce the size of the | in LLNs; Profile 1 leverages Storing Mode to reduce the size of the | |||
| Source Route Header in the most common LLN deployments. Profile 2 is | RPL Source Route Header in the most common LLN deployments. Profile | |||
| RECOMMENDED in a high-speed or wired environment to enable Traffic | 2 is RECOMMENDED in a high-speed (e.g., wired) environment to enable | |||
| Engineering and network automation. All the other profile/ | Traffic Engineering and network automation. All the other profile/ | |||
| environment combinations are OPTIONAL. | environment combinations are OPTIONAL. | |||
| Profile 0: | Profile 0: | |||
| Profile 0 is the legacy support of [RPL] Non-Storing Mode, with | Profile 0 is the legacy support of [RPL] Non-Storing Mode, with | |||
| default routing Northwards (up) and strict source routing | default routing Northwards (up) and strict source routing | |||
| Southwards (down the main DODAG). It provides the minimal common | Southwards (down the main DODAG). It provides the minimal common | |||
| functionality that must be implemented as a prerequisite to all | functionality that must be implemented as a prerequisite to all | |||
| the Track-supporting profiles. The other profiles extend Profile | the Track-supporting profiles. The other profiles extend Profile | |||
| 0 with selected capabilities that this specification introduces on | 0 with selected capabilities that this specification introduces. | |||
| top. | ||||
| Profile 1 (Storing Mode P-Route segments along the main DODAG): | Profile 1 (Storing Mode P-Route segments along the main DODAG): | |||
| Profile 1 does not create new paths; compared to Profile 0, it | Profile 1 does not create new paths; compared to Profile 0, it | |||
| combines Storing and Non-Storing Modes to balance the size of the | combines Storing and Non-Storing Modes to balance the size of the | |||
| Routing Header in the packet and the amount of state in the | Routing Header in the packet and the amount of state in the | |||
| intermediate routers in a Non-Storing Mode RPL DODAG. | intermediate routers in a Non-Storing Mode RPL DODAG. | |||
| Profile 2 (Non-Storing Mode P-Route segments along the main | Profile 2 (Non-Storing Mode P-Route segments along the main | |||
| DODAG): | DODAG): | |||
| Profile 2 extends Profile 0 with strict source routing Non-Storing | Profile 2 extends Profile 0 with strict source-routed Non-Storing | |||
| Mode P-Routes along the main DODAG, which is the same as Profile 1 | 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 | 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 | same capability to compress the SRH in packets down the main DODAG | |||
| as Profile 1, but it requires an encapsulation in order to insert | as Profile 1, but it requires an encapsulation in order to insert | |||
| an additional SRH between the loose source routing hops. With | an additional SRH between the loose source routing hops. With | |||
| Profile 2, the Tracks MUST be installed as subTracks of the main | Profile 2, the Tracks MUST be installed as subTracks of the main | |||
| DODAG, and the main Instance MUST be used as the TrackID. Note | DODAG, and the main Instance MUST be used as the TrackID. Note | |||
| that the Ingress node encapsulates but is not the Root, as it does | that the ingress node encapsulates but is not the Root, as it does | |||
| not own the DODAGID. | not own the DODAGID. | |||
| Profile 3: | Profile 3: | |||
| In order to form the best path possible, this profile requires the | In order to form the best path possible, this profile requires the | |||
| support of an SIO to inform the Root of additional possible hops. | support of an SIO to inform the Root of additional possible hops. | |||
| Profile 3 extends Profile 1 with additional Storing Mode P-Routes | Profile 3 extends Profile 1 with additional Storing Mode P-Routes | |||
| that install segments that do not follow the main DODAG. If the | that install segments that do not follow the main DODAG. If the | |||
| segment Ingress (in the SM-VIO) is the same as the IPv6 address of | segment ingress (in the SM-VIO) is the same as the IPv6 address of | |||
| the Track Ingress (in the Projected DAO Base Object), the P-DAO | the Track ingress (in the Projected DAO Base Object), the P-DAO | |||
| creates an implicit Track between the segment Ingress and the | creates an implicit Track between the segment ingress and the | |||
| segment Egress. | segment egress. | |||
| Profile 4: | Profile 4: | |||
| Profile 4 extends Profile 2 with strict source routing Non-Storing | Profile 4 extends Profile 2 with strict source-routed Non-Storing | |||
| Mode P-Routes to form forward Tracks that are inside the main | Mode P-Routes to form forward Tracks that are inside the main | |||
| DODAG but do not necessarily follow it. A Track is formed as one | DODAG but do not necessarily follow it. A Track is formed as one | |||
| or more strict source-routed paths between the Root that is the | or more strict source-routed paths between the Root that is the | |||
| Track Ingress and the Track Egress that is the last node. | Track ingress and the Track egress that is the last node. | |||
| Profile 5: | Profile 5: | |||
| Profile 5 combines Profile 4 with Profile 1 and enables loose | Profile 5 combines Profile 4 with Profile 1 and enables loose | |||
| source routing between the Ingress and the Egress of the Track. | source routing between the ingress and the egress of the Track. | |||
| As in Profile 1, Storing Mode P-Routes form the connections in the | As in Profile 1, Storing Mode P-Routes form the connections in the | |||
| loose source route. | loose source route. | |||
| Profile 6: | Profile 6: | |||
| Profile 6 combines Profile 4 with Profile 2 and enables loose | Profile 6 combines Profile 4 with Profile 2 and enables loose | |||
| source routing between the Ingress and the Egress of the Track. | source routing between the ingress and the egress of the Track. | |||
| Profile 7: | Profile 7: | |||
| Profile 7 implements Profile 5 in a main DODAG that is operated in | Profile 7 implements Profile 5 in a main DODAG that is operated in | |||
| Storing Mode as presented in Section 7.1. As in Profiles 1 and 2, | Storing Mode as presented in Section 7.1. As in Profiles 1 and 2, | |||
| the TrackID is the RPLInstanceID of the main DODAG. Longest match | the TrackID is the RPLInstanceID of the main DODAG. Longest match | |||
| rules decide whether a packet is sent along the main DODAG or | rules decide whether a packet is sent along the main DODAG or | |||
| rerouted in a Track. | rerouted in a Track. | |||
| Profile 8: | Profile 8: | |||
| Profile 8 is offered in preparation of the RAW work and for use | 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 | cases where an arbitrary node in the network can afford the same | |||
| code complexity as the RPL Root in a traditional deployment. It | code complexity as the RPL Root in a traditional deployment. It | |||
| offers a full DODAG visibility to the Track Ingress, as specified | offers a full DODAG visibility to the Track ingress, as specified | |||
| in Section 7.2, in a Non-Storing Mode main DODAG. | in Section 7.2, in a Non-Storing Mode main DODAG. | |||
| Profile 9: | Profile 9: | |||
| Profile 9 combines Profiles 7 and 8, operating the Track as a full | Profile 9 combines Profiles 7 and 8, operating the Track as a full | |||
| DODAG within a Storing Mode main DODAG, using only the main DODAG | DODAG within a Storing Mode main DODAG, using only the main DODAG | |||
| RPLInstanceID as the TrackID. | RPLInstanceID as the TrackID. | |||
| 9. Backwards Compatibility | 9. Backwards Compatibility | |||
| This specification can operate in a mixed network where some nodes | This specification can operate in a mixed network where some nodes | |||
| support it and some do not. There are restrictions, though. All | support it and some do not. There are restrictions, though. All | |||
| nodes that need to process a P-DAO MUST support this specification. | nodes that need to process a P-DAO MUST support this specification. | |||
| As discussed in Section 3.7.1, how the root knows the node | As discussed in Section 3.7.1, how the Root knows the node | |||
| capabilities and whether they support this specification are out of | capabilities and whether they support this specification are out of | |||
| scope. | scope. | |||
| This specification defines the 'D' flag in the RPL DODAG | This specification defines the 'D' flag in the RPL DODAG | |||
| Configuration option (see Section 4.1.7) to signal that the RPL nodes | Configuration option (see Section 4.1.7) to signal that the RPL nodes | |||
| can request the creation of Tracks. The requester may not know | can request the creation of Tracks. The requester may not know | |||
| whether the Track can effectively be constructed or whether enough | whether the Track can effectively be constructed or whether enough | |||
| nodes along the preferred paths support this specification. | nodes along the preferred paths support this specification. | |||
| Therefore, it makes sense to only set the 'D' flags in the DIO when | Therefore, it makes sense to only set the 'D' flags in the DIO when | |||
| the conditions for success are in place, in particular when all the | the conditions for success are in place, in particular when all the | |||
| skipping to change at line 3612 ¶ | skipping to change at line 3624 ¶ | |||
| 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. In particular, link- | [RFC7416] apply to this specification as well. In particular, link- | |||
| layer security is needed to prevent denial-of-service attacks, | layer security is needed 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 injecting forged P-DAO messages and using up all the | constantly injecting forged P-DAO messages and using up all the | |||
| available storage in the attacked routers. | available storage in the attacked routers. | |||
| When applied to radio LLNs such as IEEE Std 802.15.4, the lower-layer | When applied to radio LLNs such as IEEE Std 802.15.4, the lower-layer | |||
| frame protection can be leveraged with an appropriate join protocol. | frame protection can be leveraged with an appropriate join protocol. | |||
| 6TiSCH defined [RFC9031] with the RPL Root acting as 6LBR. The join | The 6TiSCH Constrained Join Protocol (CoJP) [RFC9031] uses the RPL | |||
| protocol could be extended to provide additional key material for | Root as 6LBR. The join protocol could be extended to provide | |||
| pledges to 6LBR communication when additional end-to-end security is | additional key material for pledges to 6LBR communication when | |||
| desired beyond the hop-by-hop security from the lower layer. | additional end-to-end security is desired beyond the hop-by-hop | |||
| security from the lower layer. | ||||
| With this specification, the Root MAY generate P-DAO messages but | With this specification, the Root MAY generate P-DAO messages but | |||
| other nodes MUST NOT do so. PDR messages MUST be sent to the Root. | other nodes MUST NOT do so. PDAOReq messages MUST be sent to the | |||
| This specification expects that the communication with the Root is | Root. This specification expects that the communication with the | |||
| authenticated but does not enforce which method is used. | Root is authenticated but does not enforce which method is used. | |||
| Additionally, the trust model could include a role validation (e.g., | Additionally, the trust model could include a role validation (e.g., | |||
| using a role-based authorization) to ensure that the node that claims | using a role-based authorization) to ensure that the node that claims | |||
| to be a RPL Root is entitled to do so. That trust should propagate | to be a RPL Root is entitled to do so. That trust should propagate | |||
| from Egress to Ingress in the case of a Storing Mode P-DAO. | from egress to ingress in the case of a Storing Mode P-DAO. | |||
| This specification suggests some validation of the VIO to prevent | This specification suggests some validation of the VIO to prevent | |||
| basic loops by avoiding that a node appears twice. But that is only | basic loops, i.e., by avoiding a node that appears twice. But that | |||
| a minimal protection. Arguably, an attacker that can inject P-DAOs | is only a minimal protection. Arguably, an attacker that can inject | |||
| can reroute any traffic and rapidly deplete critical resources such | P-DAOs can reroute any traffic and rapidly deplete critical resources | |||
| as the spectrum and battery in the LLN. | such as the spectrum and battery in the LLN. | |||
| 11. IANA Considerations | 11. IANA Considerations | |||
| 11.1. RPL DODAG Configuration Option Flag | 11.1. RPL DODAG Configuration Option Flag | |||
| IANA has assigned a flag in the "DODAG Configuration Option Flags for | IANA has assigned a flag in the "DODAG Configuration Option Flags for | |||
| MOP 0..6" registry [RFC9008] under the "Routing Protocol for Low | MOP 0..6" registry [RFC9008] under the "Routing Protocol for Low | |||
| Power and Lossy Networks (RPL)" registry group [IANA-RPL] as follows: | Power and Lossy Networks (RPL)" registry group [IANA-RPL] as follows: | |||
| +============+==============================+===========+ | +============+==============================+===========+ | |||
| skipping to change at line 3714 ¶ | skipping to change at line 3727 ¶ | |||
| +------------+----------------------+-----------+ | +------------+----------------------+-----------+ | |||
| | 1 | Rank-Error (R) | [RFC6553] | | | 1 | Rank-Error (R) | [RFC6553] | | |||
| +------------+----------------------+-----------+ | +------------+----------------------+-----------+ | |||
| | 2 | Forwarding-Error (F) | [RFC6553] | | | 2 | Forwarding-Error (F) | [RFC6553] | | |||
| +------------+----------------------+-----------+ | +------------+----------------------+-----------+ | |||
| | 3 | Projected-Route (P) | RFC 9914 | | | 3 | Projected-Route (P) | RFC 9914 | | |||
| +------------+----------------------+-----------+ | +------------+----------------------+-----------+ | |||
| | 4..255 | Unassigned | | | | 4..255 | Unassigned | | | |||
| +------------+----------------------+-----------+ | +------------+----------------------+-----------+ | |||
| Table 24: Initial PDR Flags | Table 24: Initial PDAOReq Flags | |||
| 11.5. RPL Control Codes | 11.5. RPL Control Codes | |||
| IANA has updated the "RPL Control Codes" registry under the "Routing | IANA has updated the "RPL Control Codes" registry under the "Routing | |||
| Protocol for Low Power and Lossy Networks (RPL)" registry group | Protocol for Low Power and Lossy Networks (RPL)" registry group | |||
| [IANA-RPL] as indicated in Table 25: | [IANA-RPL] as indicated in Table 25: | |||
| +======+=============================+===========+ | +======+=================================+===========+ | |||
| | Code | Description | Reference | | | Code | Description | Reference | | |||
| +======+=============================+===========+ | +======+=================================+===========+ | |||
| | 0x09 | Projected DAO Request (PDR) | RFC 9914 | | | 0x09 | Projected DAO Request (PDAOReq) | RFC 9914 | | |||
| +------+-----------------------------+-----------+ | +------+---------------------------------+-----------+ | |||
| | 0x0A | PDR-ACK | RFC 9914 | | | 0x0A | PDR-ACK | RFC 9914 | | |||
| +------+-----------------------------+-----------+ | +------+---------------------------------+-----------+ | |||
| Table 25: New RPL Control Codes | Table 25: New RPL Control Codes | |||
| 11.6. RPL Control Message Options | 11.6. RPL Control Message Options | |||
| IANA has updated the "RPL Control Message Options" registry under the | IANA has updated the "RPL Control Message Options" registry under the | |||
| "Routing Protocol for Low Power and Lossy Networks (RPL)" registry | "Routing Protocol for Low Power and Lossy Networks (RPL)" registry | |||
| group [IANA-RPL] as indicated in Table 26: | group [IANA-RPL] as indicated in Table 26: | |||
| +=======+==================================+===========+ | +=======+==============================================+===========+ | |||
| | Value | Meaning | Reference | | | Value | Meaning | Reference | | |||
| +=======+==================================+===========+ | +=======+==============================================+===========+ | |||
| | 0x0F | Stateful VIO (SM-VIO) | RFC 9914 | | | 0x0F | Stateful Storing Mode VIO (SM-VIO) | RFC 9914 | | |||
| +-------+----------------------------------+-----------+ | +-------+----------------------------------------------+-----------+ | |||
| | 0x10 | Source-Routed VIO (NSM-VIO) | RFC 9914 | | | 0x10 | Source-Routed Non-Storing Mode VIO (NSM-VIO) | RFC 9914 | | |||
| +-------+----------------------------------+-----------+ | +-------+----------------------------------------------+-----------+ | |||
| | 0x11 | Sibling Information Option (SIO) | RFC 9914 | | | 0x11 | Sibling Information Option (SIO) | RFC 9914 | | |||
| +-------+----------------------------------+-----------+ | +-------+----------------------------------------------+-----------+ | |||
| Table 26: RPL Control Message Options | Table 26: RPL Control Message Options | |||
| 11.7. Registry for Projected DAO Request Flags | 11.7. Registry for Projected DAO Request Flags | |||
| IANA has created the "Projected DAO Request (PDR) Flags" registry | IANA has created the "Projected DAO Request (PDAOReq) Flags" registry | |||
| under the "Routing Protocol for Low Power and Lossy Networks (RPL)" | under the "Routing Protocol for Low Power and Lossy Networks (RPL)" | |||
| registry group [IANA-RPL]. The bits are indexed from 0 (leftmost) to | registry group [IANA-RPL]. The bits are indexed from 0 (leftmost) to | |||
| 7. Each bit is tracked with the following qualities: | 7. 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 | |||
| The registration procedure is Standards Action [RFC8126]. The | The registration procedure is Standards Action [RFC8126]. The | |||
| initial allocation is as indicated in Table 27: | initial allocation is as indicated in Table 27: | |||
| +============+========================================+===========+ | +============+========================================+===========+ | |||
| | Bit Number | Capability Description | Reference | | | Bit Number | Capability Description | Reference | | |||
| +============+========================================+===========+ | +============+========================================+===========+ | |||
| | 0 | PDR-ACK request (K) | RFC 9914 | | | 0 | PDR-ACK requested (K) | RFC 9914 | | |||
| +------------+----------------------------------------+-----------+ | +------------+----------------------------------------+-----------+ | |||
| | 1 | Requested path should be redundant (R) | RFC 9914 | | | 1 | Requested path should be redundant (R) | RFC 9914 | | |||
| +------------+----------------------------------------+-----------+ | +------------+----------------------------------------+-----------+ | |||
| | 2..255 | Unassigned | | | | 2..255 | Unassigned | | | |||
| +------------+----------------------------------------+-----------+ | +------------+----------------------------------------+-----------+ | |||
| Table 27: Initial PDR Flags | Table 27: Initial PDAOReq Flags | |||
| 11.8. Registry for PDR-ACK Flags | 11.8. Registry for PDR-ACK Flags | |||
| IANA has created the "PDR-ACK Flags" registry under the "Routing | IANA has created the "PDR-ACK Flags" registry under the "Routing | |||
| Protocol for Low Power and Lossy Networks (RPL)" registry group | Protocol for Low Power and Lossy Networks (RPL)" registry group | |||
| [IANA-RPL]. The bits are indexed from 0 (leftmost) to 7. Each bit | [IANA-RPL]. The bits are indexed from 0 (leftmost) to 7. 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) | |||
| skipping to change at line 4143 ¶ | skipping to change at line 4156 ¶ | |||
| 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>. | |||
| [RFC9450] Bernardos, CJ., Ed., Papadopoulos, G., Thubert, P., and F. | [RFC9450] Bernardos, CJ., Ed., Papadopoulos, G., Thubert, P., and F. | |||
| Theoleyre, "Reliable and Available Wireless (RAW) Use | Theoleyre, "Reliable and Available Wireless (RAW) Use | |||
| Cases", RFC 9450, DOI 10.17487/RFC9450, August 2023, | Cases", RFC 9450, DOI 10.17487/RFC9450, August 2023, | |||
| <https://www.rfc-editor.org/info/rfc9450>. | <https://www.rfc-editor.org/info/rfc9450>. | |||
| [RFC9473] Enghardt, R. and C. Krähenbühl, "A Vocabulary of Path | ||||
| Properties", RFC 9473, DOI 10.17487/RFC9473, September | ||||
| 2023, <https://www.rfc-editor.org/info/rfc9473>. | ||||
| [NEW-TAGS] Kühlewind, M. and S. Krishnan, "Definition of new tags for | [NEW-TAGS] Kühlewind, M. and S. Krishnan, "Definition of new tags for | |||
| relations between RFCs", Work in Progress, Internet-Draft, | relations between RFCs", Work in Progress, Internet-Draft, | |||
| draft-kuehlewind-rswg-updates-tag-02, 8 July 2024, | draft-kuehlewind-rswg-updates-tag-02, 8 July 2024, | |||
| <https://datatracker.ietf.org/doc/html/draft-kuehlewind- | <https://datatracker.ietf.org/doc/html/draft-kuehlewind- | |||
| rswg-updates-tag-02>. | rswg-updates-tag-02>. | |||
| [IANA-6LO] IANA, "IPv6 Low Power Personal Area Network Parameters", | [IANA-6LO] IANA, "IPv6 Low Power Personal Area Network Parameters", | |||
| <https://www.iana.org/assignments/_6lowpan-parameters>. | <https://www.iana.org/assignments/_6lowpan-parameters>. | |||
| [IANA-RPL] IANA, "Routing Protocol for Low Power and Lossy Networks | [IANA-RPL] IANA, "Routing Protocol for Low Power and Lossy Networks | |||
| skipping to change at line 4185 ¶ | skipping to change at line 4194 ¶ | |||
| his review during WG Last Call and to Maria Ines Robles for her | his review during WG Last Call and to Maria Ines Robles for her | |||
| thorough shepherd review. Many thanks to Warren Kumari, Ran Chen, | thorough shepherd review. Many thanks to Warren Kumari, Ran Chen, | |||
| Murray Kucherawy, Roman Danyliw, Klaas Wierenga, Deb Cooley, Éric | Murray Kucherawy, Roman Danyliw, Klaas Wierenga, Deb Cooley, Éric | |||
| Vyncke, Gunter Van de Velde, Sue Hares, and John Scudder for their | Vyncke, Gunter Van de Velde, Sue Hares, and John Scudder for their | |||
| comments and suggestions during the IETF Last Call and IESG review | comments and suggestions during the IETF Last Call and IESG review | |||
| cycle. | cycle. | |||
| Authors' Addresses | Authors' Addresses | |||
| Pascal Thubert (editor) | Pascal Thubert (editor) | |||
| Independent | ||||
| 06330 Roquefort-les-Pins | 06330 Roquefort-les-Pins | |||
| France | France | |||
| Email: pascal.thubert@gmail.com | Email: pascal.thubert@gmail.com | |||
| Rahul Arvind Jadhav | Rahul Arvind Jadhav | |||
| AccuKnox | AccuKnox | |||
| Kundalahalli Village, Whitefield | Kundalahalli Village, Whitefield | |||
| Bangalore 560037 | Bangalore 560037 | |||
| Karnataka | Karnataka | |||
| India | India | |||
| End of changes. 261 change blocks. | ||||
| 568 lines changed or deleted | 578 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||