| < draft-ietf-roll-dao-projection-13.txt | draft-ietf-roll-dao-projection-14.txt > | |||
|---|---|---|---|---|
| ROLL P. Thubert, Ed. | ROLL P. Thubert, Ed. | |||
| Internet-Draft Cisco Systems | Internet-Draft Cisco Systems | |||
| Updates: 6550 (if approved) R.A. Jadhav | Updates: 6550 (if approved) R.A. Jadhav | |||
| Intended status: Standards Track Huawei Tech | Intended status: Standards Track Huawei Tech | |||
| Expires: 2 April 2021 M. Gillmore | Expires: 5 April 2021 M. Gillmore | |||
| Itron | Itron | |||
| 29 September 2020 | 2 October 2020 | |||
| Root initiated routing state in RPL | Root initiated routing state in RPL | |||
| draft-ietf-roll-dao-projection-13 | draft-ietf-roll-dao-projection-14 | |||
| Abstract | Abstract | |||
| This document updates RFC 6550 to enable a RPL Root to install and | This document updates RFC 6550 to enable a RPL Root to install and | |||
| maintain Projected Routes within its DODAG, along a selected set of | maintain Projected Routes within its DODAG, along a selected set of | |||
| nodes that may or may not include self, for a chosen duration. This | nodes that may or may not include self, for a chosen duration. This | |||
| potentially enables routes that are more optimized or resilient than | potentially enables routes that are more optimized or resilient than | |||
| those obtained with the classical distributed operation of RPL, | those obtained with the classical distributed operation of RPL, | |||
| either in terms of the size of a source-route header or in terms of | either in terms of the size of a Routing Header or in terms of path | |||
| path length, which impacts both the latency and the packet delivery | length, which impacts both the latency and the packet delivery ratio. | |||
| ratio. | ||||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on 2 April 2021. | This Internet-Draft will expire on 5 April 2021. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2020 IETF Trust and the persons identified as the | Copyright (c) 2020 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents (https://trustee.ietf.org/ | |||
| license-info) in effect on the date of publication of this document. | license-info) in effect on the date of publication of this document. | |||
| Please review these documents carefully, as they describe your rights | Please review these documents carefully, as they describe your rights | |||
| and restrictions with respect to this document. Code Components | and restrictions with respect to this document. Code Components | |||
| extracted from this document must include Simplified BSD License text | extracted from this document must include Simplified BSD License text | |||
| as described in Section 4.e of the Trust Legal Provisions and are | as described in Section 4.e of the Trust Legal Provisions and are | |||
| provided without warranty as described in the Simplified BSD License. | provided without warranty as described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 2.1. Requirements Language . . . . . . . . . . . . . . . . . . 5 | 2.1. Requirements Language . . . . . . . . . . . . . . . . . . 5 | |||
| 2.2. Glossary . . . . . . . . . . . . . . . . . . . . . . . . 5 | 2.2. Glossary . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 2.3. Other Terms . . . . . . . . . . . . . . . . . . . . . . . 5 | 2.3. Other Terms . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 2.4. References . . . . . . . . . . . . . . . . . . . . . . . 6 | 2.4. References . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 3. Updating RFC 6550 . . . . . . . . . . . . . . . . . . . . . . 6 | 3. Updating RFC 6550 . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 4. Identifying a Track . . . . . . . . . . . . . . . . . . . . . 8 | 4. New RPL Control Messages and Options . . . . . . . . . . . . 8 | |||
| 5. New RPL Control Messages and Options . . . . . . . . . . . . 9 | 4.1. New P-DAO Request Control Message . . . . . . . . . . . . 8 | |||
| 5.1. New P-DAO Request Control Message . . . . . . . . . . . . 9 | 4.2. New PDR-ACK Control Message . . . . . . . . . . . . . . . 9 | |||
| 5.2. New PDR-ACK Control Message . . . . . . . . . . . . . . . 10 | 4.3. Route Projection Options . . . . . . . . . . . . . . . . 10 | |||
| 5.3. Route Projection Options . . . . . . . . . . . . . . . . 12 | 4.4. Sibling Information Option . . . . . . . . . . . . . . . 12 | |||
| 5.4. Sibling Information Option . . . . . . . . . . . . . . . 14 | 5. Projected DAO . . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 6. Projected DAO . . . . . . . . . . . . . . . . . . . . . . . . 16 | 5.1. Requesting a Track . . . . . . . . . . . . . . . . . . . 15 | |||
| 6.1. Requesting a Track . . . . . . . . . . . . . . . . . . . 17 | 5.2. Identifying a Track . . . . . . . . . . . . . . . . . . . 16 | |||
| 6.2. Routing over a Track . . . . . . . . . . . . . . . . . . 18 | 5.3. Forwarding Along a Track . . . . . . . . . . . . . . . . 17 | |||
| 6.3. Non-Storing Mode Projected Route . . . . . . . . . . . . 18 | 5.4. Non-Storing Mode Projected Route . . . . . . . . . . . . 18 | |||
| 6.4. Storing Mode Projected Route . . . . . . . . . . . . . . 20 | 5.5. Storing Mode Projected Route . . . . . . . . . . . . . . 19 | |||
| 7. Security Considerations . . . . . . . . . . . . . . . . . . . 22 | 6. Security Considerations . . . . . . . . . . . . . . . . . . . 21 | |||
| 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 22 | 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 21 | |||
| 8.1. New RPL Control Codes . . . . . . . . . . . . . . . . . . 22 | 7.1. New RPL Control Codes . . . . . . . . . . . . . . . . . . 21 | |||
| 8.2. New RPL Control Message Options . . . . . . . . . . . . . 22 | 7.2. New RPL Control Message Options . . . . . . . . . . . . . 22 | |||
| 8.3. SubRegistry for the Projected DAO Request Flags . . . . . 23 | 7.3. SubRegistry for the Projected DAO Request Flags . . . . . 22 | |||
| 8.4. SubRegistry for the PDR-ACK Flags . . . . . . . . . . . . 23 | 7.4. SubRegistry for the PDR-ACK Flags . . . . . . . . . . . . 23 | |||
| 8.5. Subregistry for the PDR-ACK Acceptance Status Values . . 24 | 7.5. Subregistry for the PDR-ACK Acceptance Status Values . . 23 | |||
| 8.6. Subregistry for the PDR-ACK Rejection Status Values . . . 24 | 7.6. Subregistry for the PDR-ACK Rejection Status Values . . . 23 | |||
| 8.7. SubRegistry for the Route Projection Options Flags . . . 24 | 7.7. SubRegistry for the Route Projection Options Flags . . . 24 | |||
| 8.8. SubRegistry for the Sibling Information Option Flags . . 25 | 7.8. SubRegistry for the Sibling Information Option Flags . . 24 | |||
| 8.9. Error in Projected Route ICMPv6 Code . . . . . . . . . . 25 | 7.9. Error in Projected Route ICMPv6 Code . . . . . . . . . . 25 | |||
| 9. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 25 | 8. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 25 | |||
| 10. Normative References . . . . . . . . . . . . . . . . . . . . 26 | 9. Normative References . . . . . . . . . . . . . . . . . . . . 25 | |||
| 11. Informative References . . . . . . . . . . . . . . . . . . . 26 | 10. Informative References . . . . . . . . . . . . . . . . . . . 26 | |||
| Appendix A. Applications . . . . . . . . . . . . . . . . . . . . 28 | Appendix A. Applications . . . . . . . . . . . . . . . . . . . . 27 | |||
| A.1. Loose Source Routing . . . . . . . . . . . . . . . . . . 28 | A.1. Loose Source Routing . . . . . . . . . . . . . . . . . . 27 | |||
| A.2. Transversal Routes . . . . . . . . . . . . . . . . . . . 29 | A.2. Transversal Routes . . . . . . . . . . . . . . . . . . . 29 | |||
| Appendix B. Examples . . . . . . . . . . . . . . . . . . . . . . 31 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 31 | |||
| B.1. Using Storing Mode P-DAO in Non-Storing Mode MOP . . . . 31 | ||||
| B.2. Projecting a Storing Mode transversal route . . . . . . . 32 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 34 | ||||
| 1. Introduction | 1. Introduction | |||
| RPL, the "Routing Protocol for Low Power and Lossy Networks" [RPL] | RPL, the "Routing Protocol for Low Power and Lossy Networks" [RPL] | |||
| (LLNs), is a generic Distance Vector protocol that is well suited for | (LLNs), is a generic Distance Vector protocol that is well suited for | |||
| application in a variety of low energy Internet of Things (IoT) | application in a variety of low energy Internet of Things (IoT) | |||
| networks. RPL forms Destination Oriented Directed Acyclic Graphs | networks. RPL forms Destination Oriented Directed Acyclic Graphs | |||
| (DODAGs) in which the Root often acts as the Border Router to connect | (DODAGs) in which the Root often acts as the Border Router to connect | |||
| the RPL domain to the Internet. The Root is responsible to select | the RPL domain to the Internet. The Root is responsible to select | |||
| the RPL Instance that is used to forward a packet coming from the | the RPL Instance that is used to forward a packet coming from the | |||
| skipping to change at page 5, line 25 ¶ | skipping to change at page 5, line 25 ¶ | |||
| 2.2. Glossary | 2.2. Glossary | |||
| This document often uses the following acronyms: | This document often uses the following acronyms: | |||
| CMO: Control Message Option | CMO: Control Message Option | |||
| DAO: Destination Advertisement Object | DAO: Destination Advertisement Object | |||
| DAG: Directed Acyclic Graph | DAG: Directed Acyclic Graph | |||
| DODAG: Destination-Oriented Directed Acyclic Graph; A DAG with only | DODAG: Destination-Oriented Directed Acyclic Graph; A DAG with only | |||
| one vertex (i.e., node) that has no outgoing edge (i.e., link) | one vertex (i.e., node) that has no outgoing edge (i.e., link) | |||
| LLN: Low-Power and Lossy Network | LLN: Low-Power and Lossy Network | |||
| NMPR: Non-Storing Mode Projected Route | ||||
| MOP: RPL Mode of Operation | MOP: RPL Mode of Operation | |||
| P-DAO: Projected DAO | P-DAO: Projected DAO | |||
| PDR: P-DAO Request | PDR: P-DAO Request | |||
| RAN: RPL-Aware Node (either a RPL Router or a RPL-Aware Leaf) | RAN: RPL-Aware Node (either a RPL Router or a RPL-Aware Leaf) | |||
| RAL: RPL-Aware Leaf | RAL: RPL-Aware Leaf | |||
| RH: Routing Header | ||||
| RPI: RPL Packet Information | RPI: RPL Packet Information | |||
| RPL: IPv6 Routing Protocol for LLNs [RPL] | ||||
| RPO: A Route Projection Option; it can be a VIO or an SRVIO. | RPO: A Route Projection Option; it can be a VIO or an SRVIO. | |||
| RTO: RPL Target Option | RTO: RPL Target Option | |||
| RUL: RPL-Unaware Leaf | RUL: RPL-Unaware Leaf | |||
| SIO: RPL Sibling Information Option | SIO: RPL Sibling Information Option | |||
| SRVIO: A Source-Routed Via Information Option, used in Non-Storing | SRVIO: A Source-Routed Via Information Option, used in Non-Storing | |||
| Mode P-DAO messages. | Mode P-DAO messages. | |||
| SubDAG: A DODAG rooted at a node which is a child of that node and a | SMPR: Storing Mode Projected Route | |||
| subset of a larger DAG | ||||
| TIO: RPL Transit Information Option | TIO: RPL Transit Information Option | |||
| VIO: A Via Information Option, used in Storing Mode P-DAO messages. | VIO: A Via Information Option, used in Storing Mode P-DAO messages. | |||
| 2.3. Other Terms | 2.3. Other Terms | |||
| Projected Route: A Projected Route is a path segment that is | Projected Route: A Projected Route is a path segment that is | |||
| computed remotely, and installed and maintained by a RPL Root. | computed remotely, and installed and maintained by a RPL Root. | |||
| Projected DAO: A DAO message used to install a Projected Route. | Projected DAO: A DAO message used to install a Projected Route. | |||
| Track: A complex path with redundant Segments to a destination. | Track: A complex path with redundant Segments to a destination. | |||
| TrackID: A RPL Local InstanceID with the 'D' bit set. The TrackID | TrackID: A RPL Local InstanceID with the 'D' bit set. The TrackID | |||
| skipping to change at page 6, line 17 ¶ | skipping to change at page 6, line 17 ¶ | |||
| In this document, readers will encounter terms and concepts that are | In this document, readers will encounter terms and concepts that are | |||
| discussed in the "Routing Protocol for Low Power and Lossy Networks" | discussed in the "Routing Protocol for Low Power and Lossy Networks" | |||
| [RPL] and "Terminology in Low power And Lossy Networks" [RFC7102]. | [RPL] and "Terminology in Low power And Lossy Networks" [RFC7102]. | |||
| 3. Updating RFC 6550 | 3. Updating RFC 6550 | |||
| Section 6 of [RPL] introduces the RPL Control Message Options (CMO), | Section 6 of [RPL] introduces the RPL Control Message Options (CMO), | |||
| including the RPL Target Option (RTO) and Transit Information Option | including the RPL Target Option (RTO) and Transit Information Option | |||
| (TIO), which can be placed in RPL messages such as the Destination | (TIO), which can be placed in RPL messages such as the Destination | |||
| Advertisement Object (DAO). This specification extends the DAO | Advertisement Object (DAO). This specification extends the DAO | |||
| message with the Projected DAO (P-DAO); a P-DAO message signals a | message with the Projected DAO (P-DAO); a P-DAO message signals one | |||
| Projected Route using new CMOs presented therein. | or more Projected Route(s) using the new CMOs presented therein. | |||
| A Projected Route can be an additional route of higher precedence | A Projected Route can be an additional route of higher precedence | |||
| within the main DODAG, in which case it is installed with the | within the main DODAG. In that case, it is installed with a P-DAO | |||
| RPLInstanceID and DODAGID of the main DODAG. | using the parameters of the main DODAG, typically a global | |||
| RPLInstanceID and the DODAGID field elided as shown in Section 6.4.1. | ||||
| of [RPL]. | ||||
| A Projected Route can also be a Segment within a Track. A stand- | A Projected Route can also be a Segment within a Track. A stand- | |||
| alone Segment can be used as a Serial (end-to-end) Track. Segments | alone Segment can be used as a Serial Track. Segments can also be | |||
| can also be combined to form a Complex Track. The Root uses a local | combined to form a Complex Track. The Root uses a local RPL Instance | |||
| RPL Instance rooted at the Track Egress to establish and maintain the | rooted at the Track Egress to signal the Track. The local | |||
| Track. The local RPLInstanceID of the Track is called the TrackID, | RPLInstanceID of the Track is called the TrackID, more in | |||
| more in Section 4. | Section 5.2. A P-DAO message for a Track signals the IPv6 Address of | |||
| the Track Egress in the DODAGID field of the DAO Base Object, and the | ||||
| TrackID in the RPLInstanceID field, as shown in Figure 1. | ||||
| 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| Flags | Reserved | DAOSequence | | | TrackID |K|D| Flags | Reserved | DAOSequence | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| + + | + + | |||
| | | | | | | |||
| + IPv6 Address of the Track Egress + | + IPv6 Address of the Track Egress + | |||
| | | | | | | |||
| + + | + + | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Option(s)... | | Option(s)... | |||
| +-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
| Figure 1: Projected DAO Format for a Track | Figure 1: Projected DAO Format for a Track | |||
| A P-DAO message signals the IPv6 Address of the Track Egress in the | ||||
| DODAGID field of the DAO Base Object, and the TrackID in the | ||||
| RPLInstanceID field, as shown in Figure 1. | ||||
| In RPL Non-Storing Mode, the TIO and RTO are combined in a DAO | In RPL Non-Storing Mode, the TIO and RTO are combined in a DAO | |||
| message to inform the DODAG Root of all the edges in the DODAG, which | message to inform the DODAG Root of all the edges in the DODAG, which | |||
| are formed by the directed parent-child relationships. Options may | are formed by the directed parent-child relationships. Options may | |||
| be factorized; multiple RTOs may be present to signal a collection of | be factorized; multiple RTOs may be present to signal a collection of | |||
| children that can be reached via the parent(s) indicated in the | children that can be reached via the parent(s) indicated in the | |||
| TIO(s) that follows the RTOs. | TIO(s) that follows the RTOs. This specification generalizes the | |||
| case of a parent that can be used to reach a child with that of a | ||||
| This specification generalizes the case of a parent that can be used | whole Track through which both children and siblings of the Track | |||
| to reach a child with that of a whole Track through which both | Egress are reachable. | |||
| children and siblings may be reached. | ||||
| New CMOs called the Route Projection Options (RPO) are introduced for | New CMOs called the Route Projection Options (RPO) are introduced for | |||
| use in P-DAO messages as a multihop alternative to the TIO. One RPO | use in P-DAO messages as a multihop alternative to the TIO. One RPO | |||
| is the Via Information Option (VIO); the VIO installs a state at each | is the Via Information Option (VIO); the VIO installs a state at each | |||
| hop along a Storing Mode Projected Route. The other is the Source- | hop along a Storing Mode Projected Route (SMPR). The other is the | |||
| Routed VIO (SRVIO); the SRVIO installs a source-routing state at the | Source-Routed VIO (SRVIO); the SRVIO installs a source-routing state | |||
| Segment ingress, which uses that state to encapsulate a packet with a | at the Segment ingress, which uses that state to encapsulate a packet | |||
| Source-Routing Header along a Non-Storing Mode Projected Route. | with a Routing Header (RH) along a Non-Storing Mode Projected Route | |||
| (NMPR). | ||||
| Like in a DAO message, the RTOs can be factorized in a P-DAO, but the | Like in a DAO message, the RTOs can be factorized in a P-DAO, but the | |||
| CMOs cannot. A P-DAO contains one or more RTOs that indicate the | RPOs cannot. A P-DAO contains one or more RTOs that indicate the | |||
| destinations that can be reached via the Track, and either one SRVIO | destinations that can be reached via the Track, and exactly one RPO | |||
| or one VIO signal the sequence of hops between the Track Ingress and | that signals the sequence of nodes between the Track Ingress and the | |||
| the (penultimate) node before the Track Egress. In Non-Storing Mode, | Track Egress, both included. In Non-Storing Mode, the Root sends the | |||
| the Root sends the P-DAO to the Track Ingress where the source- | P-DAO to the Track Ingress where the source-routing state is stored. | |||
| routing state is stored. In Storing Mode, the P-DAO is sent to the | In Storing Mode, the P-DAO is sent to the Track Egress and forwarded | |||
| Track Egress and forwarded along the Segment in the reverse | along the Segment in the reverse direction, installing a Storing Mode | |||
| direction, installing a Storing Mode state at each hop. | state at each hop. In both cases the Track Ingress generates the P- | |||
| DAO-ACK when the installation is successful. | ||||
| This specification adds another CMO called the Sibling Information | This specification adds another CMO called the Sibling Information | |||
| Option (SIO) that is used by a RPL Aware Node (RAN) to advertise a | Option (SIO) that is used by a RPL Aware Node (RAN) to advertise a | |||
| selection of its candidate neighbors as siblings to the Root, more in | selection of its candidate neighbors as siblings to the Root, more in | |||
| Section 5.4. The sibling selection process is out of scope. | Section 4.4. The sibling selection process is out of scope. | |||
| Two new RPL Control Messages are also introduced, to enable a RAN to | Two new RPL Control Messages are also introduced, to enable a RAN to | |||
| request the establishment of a Track between self as the Track | request the establishment of a Track between self as the Track | |||
| Ingress Node and a Track Egress. The RAN makes its request by | Ingress Node and a Track Egress. The RAN makes its request by | |||
| sending a new P-DAO Request (PDR) Message to the Root. The Root | sending a new P-DAO Request (PDR) Message to the Root. The Root | |||
| confirms with a new PDR-ACK message back to the requester RAN, see | confirms with a new PDR-ACK message back to the requester RAN, see | |||
| Section 5.1 for more. A positive PDR-ACK indicates that the Track | Section 4.1 for more. A positive PDR-ACK indicates that the Track | |||
| was built and that the Roots commits to maintain the Track for a | was built and that the Roots commits to maintain the Track for the | |||
| negotiated lifetime. | negotiated lifetime. In the case of a complex Track, each Segment is | |||
| maintained independently and asynchronously by the Root, with its own | ||||
| In the case of a complex Track, each Segment is maintained | lifetime that may be shorter, the same, or longer than that of the | |||
| independently and asynchronously by the Root, with its own lifetime | Track. The Root may use an asynchronous PDR-ACK with an negative | |||
| that may be shorter, the same, or longer than that of the Track. The | status to indicate that the Track was terminated before its time. | |||
| Root may use an asynchronous PDR-ACK with an negative status to | ||||
| indicate that the Track was terminated before its time. | ||||
| 4. Identifying a Track | ||||
| RPL defines the concept of an Instance to signal an individual | ||||
| routing topology but does not have a concept of an administrative | ||||
| distance, which exists in certain proprietary implementations to sort | ||||
| out conflicts between multiple sources of routing information within | ||||
| one routing topology. | ||||
| This draft conforms the RPL Instance model as follows: | ||||
| * The PCE MAY use P-DAO messages to add better routes in the main | ||||
| (Global) Instance in conformance with the routing objectives in | ||||
| that Instance. To achieve this, the PCE MAY install a Storing | ||||
| Mode Projected Route along a path down the main (Non-Storing Mode) | ||||
| DODAG. This enables a loose source routing and reduces the size | ||||
| of the Source Routing Header, see Appendix A.1. | ||||
| When adding a Storing Mode Projected Route to the main RPL | ||||
| Instance, the Root MUST set the RPLInstanceID field of the DAO | ||||
| message (see section 6.4.1. of [RPL]) to the RPLInstanceID of the | ||||
| main DODAG, and set the DODAGID field to the Segment Egress. The | ||||
| Projected Route provides a longer match to the Egress than the | ||||
| default route via the Root, so it is preferred. Once the | ||||
| Projected Route is installed, the intermediate nodes listed in the | ||||
| VIO between the first (excluded) and the last (included) can be | ||||
| elided in a Source-Route Header that signals that Segment. | ||||
| * The Root MAY also use P-DAO messages to install a specific (say, | ||||
| Traffic Engineered) path as a Serial of a Complex Track, to a | ||||
| particular endpoint that is the Track Egress. In that case, the | ||||
| Root MUST use a Local RPL Instance (see section 5 of [RPL]) as | ||||
| TrackID. | ||||
| The TrackID MUST be unique for the Global Unique IPv6 Address | ||||
| (GUA) or Unique-Local Address (ULA) of the Track Egress that | ||||
| serves as DODAGID for the Track. This way, a Track is uniquely | ||||
| identified by the tuple (Track Egress Address, TrackID) where the | ||||
| TrackID is always represented with the 'D' flag set. The Track | ||||
| Egress Address and the TrackID are signaled in the P-DAO message | ||||
| as shown in Figure 1. | ||||
| * In the data packets, the Track Egress Address and the TrackID are | ||||
| respectively signaled in IPv6 Address of the final destination and | ||||
| the RPLInstanceID field of the RPL Packet Information (RPI) (see | ||||
| [USEofRPLinfo]) in the outer chain of IPv6 Headers. | ||||
| If the outer chain of IPv6 Headers contains a Source-Routing | ||||
| Header that is not fully consumed, then the final destination is | ||||
| the last entry in the Source-Routing Header; else it is the | ||||
| Destination Address in the IPv6 Header. When using the [RFC8138] | ||||
| compression, it is the last hop of the last SRH-6LoRH of the outer | ||||
| header in either case. | ||||
| The 'D' flag in the RPLInstanceID MUST be set to indicate that the | ||||
| final destination address in the IPv6 header owns the local | ||||
| RPLInstanceID, more in Section 6.2. | ||||
| * A packet that is being routed over the RPL Instance associated to | ||||
| a first Non-Storing Mode Track MAY be placed (encapsulated) in a | ||||
| second Track to cover one loose hop of the first Track. On the | ||||
| other hand, a Storing Mode Track must be strict and a packet that | ||||
| it placed in a Storing Mode Track MUST follow that Track till the | ||||
| Track Egress. | ||||
| When a Track Egress extracts a packet from a Track (decapsulates | ||||
| the packet), the Destination of the inner packet MUST be either | ||||
| this node or a direct neighbor, otherwise the packet MUST be | ||||
| dropped. That Destination may be the next Hop in a Non-Storing | ||||
| Mode Track. | ||||
| All properties of a Track operations are inherited form the main RPL | ||||
| Instance that is used to install the Track. For instance, the use of | ||||
| compression per [RFC8138] is determined by whether it is used in the | ||||
| main instance, e.g., by setting the "T" flag [TURN-ON_RFC8138] in the | ||||
| RPL configuration option. | ||||
| 5. New RPL Control Messages and Options | 4. New RPL Control Messages and Options | |||
| 5.1. New P-DAO Request Control Message | 4.1. New P-DAO Request Control Message | |||
| The P-DAO Request (PDR) message is sent to the Root to request a new | The P-DAO Request (PDR) message is sent by a Node in the main DODAG | |||
| that the PCE establishes a new a projected route from self to the | to the Root. It is a request to establish or refresh a Track. | |||
| Track Egress indicated in the TIO as a full path of a collection of | Exactly one RTO MUST be present in a PDR. The RTO signals the Track | |||
| Segments in a Track. Exactly one TIO MUST be present, more in | Egress, more in Section 5.1. | |||
| Section 6.1. | ||||
| The RPL Control Code for the PDR is 0x09, to be confirmed by IANA. | The RPL Control Code for the PDR is 0x09, to be confirmed by IANA. | |||
| The format of PDR Base Object is as follows: | The format of PDR Base Object is as follows: | |||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | TrackID |K|R| Flags | ReqLifetime | PDRSequence | | | TrackID |K|R| Flags | ReqLifetime | PDRSequence | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Option(s)... | | Option(s)... | |||
| skipping to change at page 10, line 23 ¶ | skipping to change at page 8, line 35 ¶ | |||
| Figure 2: New P-DAO Request Format | Figure 2: New P-DAO Request Format | |||
| TrackID: 8-bit field indicating the RPLInstanceID associated with | TrackID: 8-bit field indicating the RPLInstanceID associated with | |||
| the Track. It is set to zero upon the first request for a new | the Track. It is set to zero upon the first request for a new | |||
| Track and then to the TrackID once the Track was created, to | Track and then to the TrackID once the Track was created, to | |||
| either renew it of destroy it. | either renew it of destroy it. | |||
| 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 indicate that the Requested path should be | R: The 'R' flag is set to request a Complex Track for redundancy. | |||
| redundant. | ||||
| Flags: Reserved. The Flags field MUST initialized to zero by the | Flags: Reserved. The Flags field MUST initialized to zero by the | |||
| sender and MUST be ignored by the receiver | sender and MUST be ignored by the receiver | |||
| ReqLifetime: 8-bit unsigned integer. | ReqLifetime: 8-bit unsigned integer. The requested lifetime for the | |||
| Track expressed in Lifetime Units (obtained from the DODAG | ||||
| The requested lifetime for the Track expressed in Lifetime Units | Configuration option). | |||
| (obtained from the DODAG Configuration option). | ||||
| A PDR with a fresher PDRSequence refreshes the lifetime, and a | A PDR with a fresher PDRSequence refreshes the lifetime, and a | |||
| PDRLifetime of 0 indicates that the track should be destroyed. | PDRLifetime of 0 indicates that the track should be destroyed. | |||
| PDRSequence: 8-bit wrapping sequence number, obeying the operation | PDRSequence: 8-bit wrapping sequence number, obeying the operation | |||
| in section 7.2 of [RPL]. | in section 7.2 of [RPL]. The PDRSequence is used to correlate a | |||
| PDR-ACK message with the PDR message that triggered it. It is | ||||
| The PDRSequence is used to correlate a PDR-ACK message with the | incremented at each PDR message and echoed in the PDR-ACK by the | |||
| PDR message that triggered it. It is incremented at each PDR | Root. | |||
| message and echoed in the PDR-ACK by the Root. | ||||
| 5.2. New PDR-ACK Control Message | 4.2. New PDR-ACK Control Message | |||
| The new PDR-ACK is sent as a response to a PDR message with the 'K' | The new PDR-ACK is sent as a response to a PDR message with the 'K' | |||
| flag set. The RPL Control Code for the PDR-ACK is 0x0A, to be | flag set. The RPL Control Code for the PDR-ACK is 0x0A, to be | |||
| confirmed by IANA. Its format is as follows: | confirmed by IANA. Its format is as follows: | |||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | TrackID | Flags | Track Lifetime| PDRSequence | | | TrackID | Flags | Track Lifetime| PDRSequence | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| skipping to change at page 11, line 24 ¶ | skipping to change at page 9, line 30 ¶ | |||
| Figure 3: New PDR-ACK Control Message Format | Figure 3: New PDR-ACK Control Message Format | |||
| TrackID: The RPLInstanceID of the Track that was created. The value | TrackID: The RPLInstanceID of the Track that was created. The value | |||
| of 0x00 is used to when no Track was created. | of 0x00 is used to when no Track was created. | |||
| Flags: Reserved. The Flags field MUST initialized to zero by the | Flags: Reserved. The Flags field MUST initialized to zero by the | |||
| sender and MUST be ignored by the receiver | sender and MUST be ignored by the receiver | |||
| Track Lifetime: Indicates that remaining Lifetime for the Track, | Track Lifetime: Indicates that remaining Lifetime for the Track, | |||
| expressed in Lifetime Units; a value of zero (0x00) indicates that | expressed in Lifetime Units; the value of zero (0x00) indicates | |||
| the Track was destroyed or not created. | that the Track was destroyed or not created. | |||
| PDRSequence: 8-bit wrapping sequence number. It is incremented at | PDRSequence: 8-bit wrapping sequence number. It is incremented at | |||
| each PDR message and echoed in the PDR-ACK. | each PDR message and echoed in the PDR-ACK. | |||
| PDR-ACK Status: 8-bit field indicating the completion. | PDR-ACK Status: 8-bit field indicating the completion. The PDR-ACK | |||
| Status is substructured as indicated in Figure 4: | ||||
| The PDR-ACK Status is substructured as indicated in Figure 4: | ||||
| 0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 | |||
| +-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
| |E|R| Value | | |E|R| Value | | |||
| +-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
| Figure 4: PDR-ACK status Format | Figure 4: 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, the | |||
| value of 0 indicates Success/Unqualified acceptance and other | value of 0 indicates Success/Unqualified acceptance and other | |||
| values indicate "not an outright rejection". | values indicate "not an outright rejection". | |||
| R: 1-bit flag. Reserved, MUST be set to 0 by the sender and | R: 1-bit flag. Reserved, MUST be set to 0 by the sender and | |||
| ignored by the receiver. | ignored by the receiver. | |||
| Status Value: 6-bit unsigned integer. Values depending on the | Status Value: 6-bit unsigned integer. Values depending on the | |||
| setting of the 'E' flag as indicated respectively in Table 4 | setting of the 'E' flag, see Table 4 and Table 5. | |||
| and Table 5. | ||||
| Reserved: The Reserved field MUST initialized to zero by the sender | Reserved: The Reserved field MUST initialized to zero by the sender | |||
| and MUST be ignored by the receiver | and MUST be ignored by the receiver | |||
| 5.3. Route Projection Options | 4.3. Route Projection Options | |||
| The RPOs indicate a series of IPv6 addresses that can be compressed | ||||
| using the method defined in the "6LoWPAN Routing Header" [RFC8138] | ||||
| specification using the address of the Root found in the DODAGID | ||||
| field of DIO messages as Compression Reference. | ||||
| An RPO indicates a Projected Route that can be a Serial Track in full | ||||
| or a Segment of a more Complex Track. In Non-Storing Mode, multiple | ||||
| RPO may be placed after a TIO to reflect different Segments | ||||
| originated at this node. The Track is identified by a TrackID that | ||||
| is a Local RPLInstanceID to the Track Egress of the Track. | ||||
| The format of RPOs is as follows: | An RPO signals the ordered list of IPv6 Via Addresses that | |||
| constitutes the hops of either a Serial Track or a Segment of a more | ||||
| Complex Track. An RPO MUST contain at least one Via Address, and a | ||||
| Via Address MUST NOT be present more than once, otherwise the RPO | ||||
| MUST be ignored. The format of the RPOs is as follows: | ||||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Type | Option Length | Flags | SegmentID | | | Type | Option Length | Flags | SegmentID | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| |Segm. Sequence | Seg. Lifetime | SRH-6LoRH header | | |Segm. Sequence | Seg. Lifetime | SRH-6LoRH header | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| + + | + + | |||
| skipping to change at page 13, line 10 ¶ | skipping to change at page 10, line 51 ¶ | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 5: Route Projection Option format (uncompressed form) | Figure 5: Route Projection Option format (uncompressed form) | |||
| Option Type: 0x0B for VIO, 0x0C for SRVIO (to be confirmed by IANA) | Option Type: 0x0B for VIO, 0x0C for SRVIO (to be confirmed by IANA) | |||
| Option Length: In bytes; variable, depending on the number of Via | Option Length: In bytes; variable, depending on the number of Via | |||
| Addresses and the compression. | Addresses and the compression. | |||
| Flags: Reserved. The Flags field MUST initialized to zero by the | ||||
| sender and MUST be ignored by the receiver | ||||
| SegmentID: 8-bit field that identifies a Segment within a Track or | SegmentID: 8-bit field that identifies a Segment within a Track or | |||
| the main DODAG as indicated by the TrackID field. A Value of 0 is | the main DODAG as indicated by the TrackID field. The value of 0 | |||
| used to signal a Serial Track, i.e., made of a single segment. | is used to signal a Serial Track, i.e., made of a single segment. | |||
| Segment Sequence: 8-bit unsigned integer. The Segment Sequence | Segment Sequence: 8-bit unsigned integer. The Segment Sequence | |||
| obeys the operation in section 7.2 of [RPL] and the lollipop | obeys the operation in section 7.2 of [RPL] and the lollipop | |||
| starts at 255. When the Root of the DODAG needs to refresh or | starts at 255. | |||
| update a Segment in a Track, it increments the Segment Sequence | ||||
| individually for that Segment. The Segment information indicated | When the Root of the DODAG needs to refresh or update a Segment in | |||
| in the RTO deprecates any state for the Segment indicated by the | a Track, it increments the Segment Sequence individually for that | |||
| SegmentID within the indicated Track and sets up the new | Segment. | |||
| information. A RTO with a Segment Sequence that is not as fresh | ||||
| as the current one is ignored. a RTO for a given Track Egress | The Segment information indicated in the RPO deprecates any state | |||
| with the same (TrackID, SegmentID, Segment Sequence) indicates a | for the Segment indicated by the SegmentID within the indicated | |||
| retry; it MUST NOT change the Segment and MUST be propagated or | Track and sets up the new information. | |||
| answered as the first copy. | ||||
| An RPO with a Segment Sequence that is not as fresh as the current | ||||
| one is ignored. | ||||
| An RPO for a given Track Egress with the same (TrackID, SegmentID, | ||||
| Segment Sequence) indicates a retry; it MUST NOT change the | ||||
| 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. The period starts when a new Segment Sequence | Segment is usable. | |||
| is seen. A value of 255 (0xFF) represents infinity. A value of | ||||
| zero (0x00) indicates a loss of reachability. A DAO message that | ||||
| contains a Via Information option with a Segment Lifetime of zero | ||||
| for a Track Egress is referred as a No-Path (for that Track | ||||
| Egress) in this document. | ||||
| SRH-6LoRH header: The first 2 bytes of the SRH-6LoRH as shown in | The period starts when a new Segment Sequence is seen. The value | |||
| Figure 6 of [RFC8138]. A 6LoRH Type of 4 means that the VIA | of 255 (0xFF) represents infinity. The value of zero (0x00) | |||
| Addresses are provided in full with no compression. | indicates a loss of reachability. | |||
| Via Address: A Luistof Via Addresses along one Segment, indicated in | A P-DAO message that contains a Via Information option with a | |||
| the order of the path from the ingress to the egress nodes. | Segment Lifetime of zero for a Track Egress is referred as a No- | |||
| Path (for that Track Egress) in this document. | ||||
| SRH-6LoRH header: The first 2 bytes of the (first) SRH-6LoRH as | ||||
| shown in Figure 6 of [RFC8138]. A 6LoRH Type of 4 means that the | ||||
| VIA Addresses are provided in full with no compression. | ||||
| Via Address: An IPv6 addresse along the Segment. | ||||
| In a VIO, the list is a strict path between direct neighbors, | In a VIO, the list is a strict path between direct neighbors, | |||
| whereas for an SRVIO, the list may be loose, provided that each | whereas for an SRVIO, the list may be loose, provided that each | |||
| listed node has a path to the next listed node, e.g., via another | listed node has a path to the next listed node, e.g., via another | |||
| Track. | Track. | |||
| In the case of a VIO, or if [RFC8138] is turned off, then the Root | In the case of a SMPR, or if [RFC8138] is not used in the data | |||
| MUST use only one SRH-6LoRH per RPO, and the compression is the | packets, then the Root MUST use only one SRH-6LoRH per RPO, and | |||
| same for all the addresses, as shown in Figure 5. | the compression is the same for all the addresses, as shown in | |||
| Figure 5. | ||||
| If [RFC8138] is turned on, then the Root SHOULD optimize the size | ||||
| of the SRVIO; in that case, more than one SRH-6LoRH may be needed | ||||
| if the compression of the addresses changes inside the Segment and | ||||
| different SRH-6LoRH Types are used. | ||||
| An RPO MUST contain at least one Via Address, and a Via Address MUST | In case of a NMPR, and if [RFC8138] is in use in the main DODAG, | |||
| NOT be present more than once, otherwise the RPO MUST be ignored. | then the Root SHOULD optimize the size of the SRVIO; more than one | |||
| SRH-6LoRH may be present, e.g., if the compression level changes | ||||
| inside the Segment and different SRH-6LoRH Types are required. | ||||
| 5.4. Sibling Information Option | 4.4. Sibling Information Option | |||
| The Sibling Information Option (SIO) provides indication on siblings | The Sibling Information Option (SIO) provides indication on siblings | |||
| that could be used by the Root to form Projected Routes. The format | that could be used by the Root to form Projected Routes. One or more | |||
| of SIOs is as follows: | SIO(s) may be placed in the DAO messages that are sent to the Root in | |||
| Non-Storing Mode. | ||||
| The format of the SIO is as follows: | ||||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Type | Option Length |Comp.|B|D|Flags| Opaque | | | Type | Option Length |Comp.|B|D|Flags| Opaque | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Step of Rank | Reserved | | | Step of Rank | Reserved | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| + + | + + | |||
| skipping to change at page 14, line 51 ¶ | skipping to change at page 12, line 52 ¶ | |||
| . Sibling Address . | . Sibling Address . | |||
| . . | . . | |||
| + + | + + | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 6: Sibling Information Option Format | Figure 6: Sibling Information Option Format | |||
| Option Type: 0x0D (to be confirmed by IANA) | Option Type: 0x0D (to be confirmed by IANA) | |||
| Option Length: In bytes; variable, depending on the number of Via | Option Length: In bytes, the size of the option. | |||
| Addresses. | ||||
| Compression Type: 3-bit unsigned integer. This is the SRH-6LoRH | Compression Type: 3-bit unsigned integer. This is the SRH-6LoRH | |||
| Type as defined in figure 7 in section 5.1 of [RFC8138] that | Type as defined in figure 7 in section 5.1 of [RFC8138] that | |||
| corresponds to the compression used for the Sibling Address. | corresponds to the compression used for the Sibling Address and | |||
| its DODAGID if resent. The Compression refernce is the Root of | ||||
| the main DODAG. | ||||
| Reserved for Flags: MUST be set to zero by the sender and MUST be | Reserved for Flags: MUST be set to zero by the sender and MUST be | |||
| ignored by the receiver. | ignored by the receiver. | |||
| B: 1-bit flag that is set to indicate that the connectivity to the | B: 1-bit flag that is set to indicate that the connectivity to the | |||
| sibling is bidirectional and roughly symmetrical. In that case, | sibling is bidirectional and roughly symmetrical. In that case, | |||
| only one of the siblings may report the SIO for the hop. If 'B' | only one of the siblings may report the SIO for the hop. If 'B' | |||
| is not set then the SIO only indicates connectivity from the | is not set then the SIO only indicates connectivity from the | |||
| sibling to this node, and does not provide information on the hop | sibling to this node, and does not provide information on the hop | |||
| from this node to the sibling. | from this node to the sibling. | |||
| D: 1-bit flag that is set to indicate that sibling belongs to the | D: 1-bit flag that is set to indicate that sibling belongs to the | |||
| same DODAG. When not set, the Sibling DODAGID is indicated. | same DODAG. When not set, the Sibling DODAGID is indicated. | |||
| Flags: Reserved. The Flags field MUST initialized to zero by the | Flags: Reserved. The Flags field MUST initialized to zero by the | |||
| sender and MUST be ignored by the receiver | sender and MUST be ignored by the receiver | |||
| Opaque: MAY be used to carry information that the node and the Root | Opaque: MAY be used to carry information that the node and the Root | |||
| understand, e.g., a particular representation of the Link | understand, e.g., a particular representation of the Link | |||
| properties such as a proprietary Link Quality Information for | properties such as a proprietary Link Quality Information for | |||
| packets received from the sibling. An industraial Alliance that | packets received from the sibling. An industrial Alliance that | |||
| uses RPL for a particular use / environment MAY redefine the use | uses RPL for a particular use / environment MAY redefine the use | |||
| of this field to fit its needs. | of this field to fit its needs. | |||
| Step of Rank: 16-bit unsigned integer. This is the Step of Rank | Step of Rank: 16-bit unsigned integer. This is the Step of Rank | |||
| [RPL] as computed by the Objective Function between this node and | [RPL] as computed by the Objective Function between this node and | |||
| the sibling. | the sibling. | |||
| Reserved: The Reserved field MUST initialized to zero by the sender | Reserved: The Reserved field MUST initialized to zero by the sender | |||
| and MUST be ignored by the receiver | and MUST be ignored by the receiver | |||
| skipping to change at page 16, line 5 ¶ | skipping to change at page 14, line 5 ¶ | |||
| field. This field is present when the 'D' flag is not set. | field. This field is present when the 'D' flag is not set. | |||
| Sibling Address: 2 to 16 bytes, the IPv6 Address of the sibling in a | Sibling Address: 2 to 16 bytes, the IPv6 Address of the sibling in a | |||
| [RFC8138] compressed form as indicated by the Compression Type | [RFC8138] compressed form as indicated by the Compression Type | |||
| field. | field. | |||
| An SIO MAY be immediately followed by a DAG Metric Container. In | An SIO MAY be immediately followed by a DAG Metric Container. In | |||
| that case the DAG Metric Container provides additional metrics for | that case the DAG Metric Container provides additional metrics for | |||
| the hop from the Sibling to this node. | the hop from the Sibling to this node. | |||
| 6. Projected DAO | 5. Projected DAO | |||
| This draft adds a capability to RPL whereby the Root of a DODAG | This draft adds a capability to RPL whereby the Root of a DODAG | |||
| projects a Track by sending one or more extended DAO message called | projects a Track by sending one or more Projected-DAO (P-DAO) | |||
| Projected-DAO (P-DAO) messages to chosen routers in the DODAG, | messages to selected routers in the DODAG. The P-DAO signals a | |||
| indicating one or more sequence(s) of routers inside the DODAG via | collection of Targets in the RPL Target Option(s) (RTO). Those | |||
| which the Target(s) indicated in the RPL Target Option(s) (RTO) can | Targets can be reached via a sequence of routers indicated in a Route | |||
| be reached. | Projection Option (RPO). A P-DAO message MUST contain exactly one | |||
| RPO, which is either a VIO or an SRVIO, and MUST follow one or more | ||||
| A P-DAO is sent from a global address of the Root to a global address | RTOs. There can be at most one such sequence of RTO(s) and an RPO. | |||
| of the recipient, and MUST be confirmed by a DAO-ACK, which is sent | ||||
| back to a global address of the Root. | ||||
| A P-DAO message MUST contain exactly one RTO and either one VIO or | A P-DAO MUST be sent from the address of the Root that serves as | |||
| one or more SRVIOs following it. There can be at most one such | DODAGID for the main DODAG. It MUST be sent to a GUA or a ULA of | |||
| sequence of RTOs and then RPOs. | either the ingress or the egress of the Segment, more below. If the | |||
| 'K' Flag is present in the P-DAO, and unless the P-DAO does not reach | ||||
| it, the ingress of the Segment is the node that acknowledges the | ||||
| message, using a DAO-ACK that MUST be sent back to the address that | ||||
| serves as DODAGID for the main DODAG. | ||||
| Like a classical DAO message, a P-DAO causes a change of state only | Like a classical DAO message, a P-DAO causes a change of state only | |||
| if it is "new" per section 9.2.2. "Generation of DAO Messages" of | if it is "new" per section 9.2.2. "Generation of DAO Messages" of | |||
| the RPL specification [RPL]; this is determined using the Segment | the RPL specification [RPL]; this is determined using the Segment | |||
| Sequence information from the RPO as opposed to the Path Sequence | Sequence information from the RPO as opposed to the Path Sequence | |||
| from a TIO. Also, a Segment Lifetime of 0 in an RPO indicates that | from a TIO. Also, a Segment Lifetime of 0 in an RPO indicates that | |||
| the projected route associated to the Segment is to be removed. | the projected route associated to the Segment is to be removed. | |||
| There are two kinds of operation for the Projected Routes, the | There are two kinds of operation for the Projected Routes, the | |||
| Storing Mode and the Non-Storing Mode. | Storing Mode and the Non-Storing Mode. | |||
| * The Non-Storing Mode is discussed in Section 6.3. It uses an | * The Non-Storing Mode is discussed in Section 5.4. A Non-Storing | |||
| SRVIO that carries a list of Via Addresses to be used as a source- | Mode P-DAO carries an SRVIO with the loose list of Via Addresses | |||
| routed Segment to the Track Egress. The recipient of the P-DAO is | that forms a source-routed Segment to the Track Egress. The | |||
| the ingress router of the source-routed Segment. Upon a Non- | recipient of the P-DAO is the ingress router of the source-routed | |||
| Storing Mode P-DAO, the ingress router installs a source-routed | Segment. The ingress router MUST install a source-routed state to | |||
| state to the Track Egress and replies to the Root directly with a | the Track Egress and reply to the Root directly using a DAO-ACK | |||
| DAO-ACK message. | message if requested to. | |||
| * The Storing Mode is discussed in Section 6.4. It uses a single | * The Storing Mode is discussed in Section 5.5. A Storing Mode | |||
| VIO, within which are signaled one Via Address per consecutive | P-DAO carries a VIO with the strict list of Via Addresses from the | |||
| hop, from the ingress to the egress of the path, including the | ingress to the egress of the Segment in the data path order. The | |||
| list of all intermediate routers in the data path order. The Via | routers listed in the Via Addresses, except the egress, MUST | |||
| Addresses indicate the routers in which the routing state to the | install a routing state to the Target(s) via the next Via Address | |||
| Track Egress have to be installed via the next Via Address in the | in the VIO. In normal operations, the P-DAO is propagated along | |||
| VIO. In normal operations, the P-DAO is propagated along the | the chain of Via Routers from the egress router of the path till | |||
| chain of Via Routers from the egress router of the path till the | the ingress one, which confirms the installation to the Root with | |||
| ingress one, which confirms the installation to the Root with a | a DAO-ACK message. Note that the Root may be the ingress and it | |||
| DAO-ACK message. Note that the Root may be the ingress and it may | may be the egress of the Segment, that it can also be neither but | |||
| be the egress of the path, that it can also be neither but it | it cannot be both. | |||
| cannot be both. | ||||
| In case of a forwarding error along a Projected Route, an ICMP error | In case of a forwarding error along a Projected Route, an ICMP error | |||
| is sent to the Root with a new Code "Error in Projected Route" (See | is sent to the Root with a new Code "Error in Projected Route" (See | |||
| Section 8.9). The Root can then modify or remove the Projected | Section 7.9). The Root can then modify or remove the Projected | |||
| Route. The "Error in Projected Route" message has the same format as | Route. The "Error in Projected Route" message has the same format as | |||
| the "Destination Unreachable Message", as specified in RFC 4443 | the "Destination Unreachable Message", as specified in RFC 4443 | |||
| [RFC4443]. The portion of the invoking packet that is sent back in | [RFC4443]. | |||
| the ICMP message SHOULD record at least up to the routing header if | ||||
| one is present, and the routing header SHOULD be consumed by this | ||||
| node so that the destination in the IPv6 header is the next hop that | ||||
| this node could not reach. if a 6LoWPAN Routing Header (6LoRH) | ||||
| [RFC8138] is used to carry the IPv6 routing information in the outter | ||||
| header then that whole 6LoRH information SHOULD be present in the | ||||
| ICMP message. The sender and exact operation depend on the Mode and | ||||
| is described in Section 6.3 and Section 6.4 respectively. | ||||
| 6.1. Requesting a Track | The portion of the invoking packet that is sent back in the ICMP | |||
| message SHOULD record at least up to the RH if one is present, and | ||||
| this hop of the RH SHOULD be consumed by this node so that the | ||||
| destination in the IPv6 header is the next hop that this node could | ||||
| not reach. if a 6LoWPAN Routing Header (6LoRH) [RFC8138] is used to | ||||
| carry the IPv6 routing information in the outer header then that | ||||
| whole 6LoRH information SHOULD be present in the ICMP message. | ||||
| A Node is free to ask the Root for a new Track with a PDR message, | The sender and exact operation depend on the Mode and is described in | |||
| for a duration indicated in a Requested Lifetime field. Upon that | Section 5.4 and Section 5.5 respectively. | |||
| Request, the Root install the necessary Segments and answers with a | ||||
| PDR-ACK indicated the granted Track Lifetime. When the Track | ||||
| Lifetime returned in the PDR-ACK is close to elapse, the resquesting | ||||
| Node needs to resend a PDR using the TrackID in the PDR-ACK to get | ||||
| the lifetime of the Track prolonged, else the Track will time out and | ||||
| the Root will tear down the whole structure. | ||||
| The Segment Lifetime in the P-DAO messages does not need to be | 5.1. Requesting a Track | |||
| aligned to the Requested Lifetime in the PDR, or between P-DAO | ||||
| messages for different Segments. The Root may use shorter lifetimes | ||||
| for the Segments and renew them faster than the Track is, or longer | ||||
| lifetimes in which case it will need to tear down the Segments if the | ||||
| Track is not renewed. | ||||
| The Root is free to install which ever Segments it wants, and change | A Node is free to ask the Root for a new Track at any time. This is | |||
| them overtime, to serve the Track as needed, without notifying the | done with a PDR message, that indicates in the Requested Lifetime | |||
| resquesting Node. If the Track fails and cannot be reestablished, | field the duration for which the Track should be established. Upon a | |||
| the Root notifies the resquesting Node asynchronously with a PDR-ACK | PDR, the Root MAY install the necessary Segments, in which case it | |||
| with a Track Lifetime of 0, indicating that the Track has failed, and | answers with a PDR-ACK indicating the granted Track Lifetime. All | |||
| a PDR-ACK Status indicating the reason of the fault. | the Segments MUST be of a same mode, either Storing or Non-Storing. | |||
| All the Segments MUST be created with the same TrackID and the same | ||||
| Track Egress signaled in the P-DAO. | ||||
| All the Segments MUST be of a same mode, either Storing or Non- | The Root is free to design the Track as it wishes, and to change the | |||
| Storing. All the Segments MUST be created with the same TrackID and | Segments overtime to serve the Track as needed, without notifying the | |||
| Track Egress in the P-DAO. | resquesting Node. The Segment 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 Segments. The Root may use | ||||
| shorter lifetimes for the Segments and renew them faster than the | ||||
| Track is, or longer lifetimes in which case it will need to tear down | ||||
| the Segments if the Track is not renewed. | ||||
| 6.2. Routing over a Track | When the Track Lifetime that was returned in the PDR-ACK is close to | |||
| elapse, the resquesting Node needs to resend a PDR using the TrackID | ||||
| in the PDR-ACK to extend the lifetime of the Track, else the Track | ||||
| will time out and the Root will tear down the whole structure. | ||||
| Sending a packet over a Track implies the addition of a RPI to | If the Track fails and cannot be restored, the Root notifies the | |||
| indicate the Track, in association with the IPv6 destination. In | resquesting Node asynchronously with a PDR-ACK with a Track Lifetime | |||
| case of a Non-Storing Mode Projected Route, a Source Routing Header | of 0, indicating that the Track has failed, and a PDR-ACK Status | |||
| is needed as well. | indicating the reason of the fault. | |||
| The Destination IPv6 Address of a packet that is placed in a Track | 5.2. Identifying a Track | |||
| MUST be that of the Track Egress of Track. The outer header of the | ||||
| packet MUST contain an RPI that indicates the TrackID as RPL Instance | ||||
| ID. | ||||
| If the Track Ingress is the originator of the packet and the Track | RPL defines the concept of an Instance to signal an individual | |||
| Egress is the destination of the packet, there is no need for an | routing topology but does not have a concept of an administrative | |||
| encapsulation. Else, i.e., if the Track Ingress is forwarding a | distance, which exists in certain proprietary implementations to sort | |||
| packet into the Track, or if the the final destination is reached via | out conflicts between multiple sources of routing information within | |||
| is not the Track Egress, but reached over the Track via the Track | one routing topology. | |||
| Egress, then an IP-in-IP encapsulation is needed. | ||||
| 6.3. Non-Storing Mode Projected Route | This draft leverages the RPL Instance model as follows: | |||
| * The Root MAY use P-DAO messages to add better routes in the main | ||||
| (Global) Instance in conformance with the routing objectives in | ||||
| that Instance. To achieve this, the Root MAY install an SMPR | ||||
| along a path down the main Non-Storing Mode DODAG. This enables a | ||||
| loose source routing and reduces the size of the Routing Header, | ||||
| see Appendix A.1. | ||||
| When adding an SMPR to the main RPL Instance, the Root MUST set | ||||
| the RPLInstanceID field of the P-DAO message (see section 6.4.1. | ||||
| of [RPL]) to the RPLInstanceID of the main DODAG, and MUST NOT use | ||||
| the DODAGID field. A Projected Route provides a longer match to | ||||
| the Target Address than the default route via the Root, so it is | ||||
| preferred. | ||||
| Once the Projected Route is installed, the intermediate nodes | ||||
| listed in the VIO after first one (i.e. The ingress) can be | ||||
| elided from the RH in packets sent along the Segment signaled in | ||||
| the P-DAO. The resulting loose source routing header indicates | ||||
| (one of) the Target(s) as the next entry after the ingress. | ||||
| * The Root MAY also use P-DAO messages to install a specific (say, | ||||
| Traffic Engineered) path as a Serial or as a Complex Track, to a | ||||
| particular endpoint that is the Track Egress. In that case, the | ||||
| Root MUST install a Local RPL Instance (see section 5 of [RPL]). | ||||
| In a that case, the TrackID MUST be unique for the Global Unique | ||||
| IPv6 Address (GUA) or Unique-Local Address (ULA) of the Track | ||||
| Egress that serves as DODAGID for the Track. This way, a Track is | ||||
| uniquely identified by the tuple (Track Egress Address, TrackID) | ||||
| where the TrackID is always represented with the 'D' flag set. | ||||
| The Track Egress Address and the TrackID MUST be signaled in the | ||||
| P-DAO message as shown in Figure 1. | ||||
| 5.3. Forwarding Along a Track | ||||
| Sending a Packet within a RPL Local Instance requires the presence of | ||||
| an RPL Packet Information (RPI) (see [USEofRPLinfo]) in the outer | ||||
| IPv6 Header chain. The RPI carries a local RPLInstanceID which, in | ||||
| association with the IPv6 final destination, indicates the RPL | ||||
| Instance that the packet follows. | ||||
| This draft leverages the RPL Forwarding model follows: | ||||
| * The RPI carries a local RPLInstanceID called the TrackID, which, | ||||
| in association with the IPv6 final destination, indicates the | ||||
| Track along which the packet is forwarded. The 'D' flag in the | ||||
| RPLInstanceID MUST be set to indicate that the final destination | ||||
| address in the IPv6 header owns the local RPLInstanceID, more in | ||||
| Section 5.3. | ||||
| In the data packets, the Track Egress Address and the TrackID MUST | ||||
| be respectively signaled as the IPv6 Address of the final | ||||
| destination and the RPLInstanceID field of the RPI that MUST be | ||||
| placed in the outer chain of IPv6 Headers. | ||||
| In case of a NMPR, the outer chain of IPv6 Headers contains an | ||||
| IPv6 RH as well. If it is not fully consumed, then the final | ||||
| destination is the last entry in the RH; else it is the | ||||
| Destination Address in the IPv6 Header. When using the [RFC8138] | ||||
| compression, it is the last hop of the last SRH-6LoRH of the outer | ||||
| header in either case. | ||||
| * If the Track Ingress is the originator of the packet and the Track | ||||
| Egress is the destination of the packet, there is no need for an | ||||
| encapsulation. Else, i.e., if the Track Ingress is forwarding a | ||||
| packet into the Track, or if the the final destination is reached | ||||
| over the Track via the Track Egress but is located beyond it, then | ||||
| an IP-in-IP encapsulation is needed. | ||||
| A packet that is being routed over the RPL Instance associated to | ||||
| a first Non-Storing Mode Track MAY be placed (encapsulated) in a | ||||
| second Track to cover one loose hop of the first Track. On the | ||||
| other hand, a Storing Mode Track must be strict and a packet that | ||||
| it placed in a Storing Mode Track MUST follow that Track till the | ||||
| Track Egress. | ||||
| When a Track Egress extracts a packet from a Track (decapsulates | ||||
| the packet), the Destination of the inner packet MUST be either | ||||
| this node or a direct neighbor, or a Target of another Segment of | ||||
| the same Track for which this node is ingress, otherwise the | ||||
| packet MUST be dropped. | ||||
| All properties of a Track operations are inherited form the main RPL | ||||
| Instance that is used to install the Track. For instance, the use of | ||||
| compression per [RFC8138] is determined by whether it is used in the | ||||
| main instance, e.g., by setting the "T" flag [TURN-ON_RFC8138] in the | ||||
| RPL configuration option. | ||||
| 5.4. Non-Storing Mode Projected Route | ||||
| As illustrated in Figure 7, a P-DAO that carries an SRVIO enables the | As illustrated in Figure 7, a P-DAO that carries an SRVIO enables the | |||
| Root to install a source-routed path towards a Track Egress in any | Root to install a source-routed path towards a Track Egress in any | |||
| particular router; with this path information the router can add a | particular router. | |||
| source routed header reflecting the Projected Route to any packet for | ||||
| which the current destination either is the said Track Egress or can | ||||
| be reached via the Track Egress. | ||||
| ------+--------- | ------+--------- | |||
| | Internet | | Internet | |||
| | | | | |||
| +-----+ | +-----+ | |||
| | | Border Router | | | Border Router | |||
| | | (RPL Root) | | | (RPL Root) | |||
| +-----+ | P ^ | | +-----+ | P ^ ACK | |||
| | | DAO | ACK | Loose | | Track | DAO | | |||
| o o o o router V | | Source | o o o o Ingress X V | X | |||
| o o o o o o o o o | P-DAO . Route | o o o o o o o X o X Source | |||
| o o o o o o o o o o | Source . Path | o o o o o o o o X o o X Routed | |||
| o o o o o o o o o | Route . From | o o ° o o o o X o X Segment | |||
| o o o o o o o o | Path . Root | o o o o o o o o X Track X | |||
| o o o o o Track Egress V . To | o o o o o Egress | |||
| o o o o | Desti- | ||||
| o o o o | nation | o o o o | |||
| destination V | o o o o | |||
| destination | ||||
| LLN | LLN | |||
| Figure 7: Projecting a Non-Storing Route | Figure 7: Projecting a Non-Storing Route | |||
| A route indicated by an SRVIO may be loose, meaning that the node | A route indicated by an SRVIO may be loose, meaning that the node | |||
| that owns the next listed Via Address is not necessarily a neighbor. | that owns the next listed Via Address is not necessarily a neighbor. | |||
| Without proper loop avoidance mechanisms, the interaction of loose | Without proper loop avoidance mechanisms, the interaction of loose | |||
| source routing and other mechanisms may effectively cause loops. In | source routing and other mechanisms may effectively cause loops. | |||
| order to avoid those loops, if the router that installs a Projected | ||||
| Route does not have a connected route (a direct adjacency) to the | ||||
| next soure routed hop and fails to locate it as a neighbor or a | ||||
| neighbor of a neighbor, then it MUST ensure that it has another | ||||
| Projected Route to the next loose hop under the control of the same | ||||
| route computation system, otherwise the P-DAO is rejected. | ||||
| When forwarding a packet to a destination for which the router | When forwarding a packet to a destination for which the router | |||
| determines that routing happens via the Track Egress, the router | determines that routing happens via the Track Egress, the router | |||
| inserts the source routing header in the packet with the destination | inserts the source routing header in the packet with the destination | |||
| set to the Track Egress. In order to add a source-routing header, | set to the Track Egress. | |||
| the router encapsulates the packet with an IP-in-IP header and a Non- | ||||
| Storing Mode source routing header (SRH) [RFC6554]. In the | In order to signal the Segment, the router encapsulates the packet | |||
| uncompressed form the source of the packet would be self, the | with an IP-in-IP header and a Routing Header as follows: | |||
| destination would be the first Via Address in the SRVIO, and the SRH | ||||
| would contain the list of the remaining Via Addresses and then the | * In the uncompressed form the source of the packet is this router, | |||
| Track Egress. | the destination is the first Via Address in the SRVIO, and the RH | |||
| is a Source Routing Header (SRH) [RFC6554] that contains the list | ||||
| of the remaining Via Addresses terminating by the Track Egress. | ||||
| * The preferred alternate in a network where 6LoWPAN Header | ||||
| Compression [RFC6282] is used is to leverage "IPv6 over Low-Power | ||||
| Wireless Personal Area Network (6LoWPAN) Paging Dispatch" | ||||
| [RFC8025] to compress the RPL artifacts as indicated in [RFC8138]. | ||||
| In that case, the source routed header is the exact copy of the | ||||
| (chain of) SRH-6LoRH found in the SRVIO, also terminating by the | ||||
| Track Egress. The RPI-6LoRH is appended next, followed by an IP- | ||||
| in-IP 6LoRH Header that indicates the Ingress Router in the | ||||
| Encapsulator Address field, see as a similar case Figure 20 of | ||||
| [TURN-ON_RFC8138]. | ||||
| In the case of a loose source-routed path, there MUST be either a | In the case of a loose source-routed path, there MUST be either a | |||
| neighbor that is adjacent to the loose next hop, on which case the | neighbor that is adjacent to the loose next hop, on which case the | |||
| packet is forwarded to that neighbor, or a source-routed path to the | packet is forwarded to that neighbor, or another Track to the loose | |||
| loose next hop; in the latter case, another encapsulation takes place | next hop for which this node is Ingress; in the latter case, another | |||
| and the process possibly recurses; otherwise the packet is dropped. | encapsulation takes place and the process possibly recurses; | |||
| otherwise the packet is dropped. | ||||
| In practice, the router will normally use the "IPv6 over Low-Power | ||||
| Wireless Personal Area Network (6LoWPAN) Paging Dispatch" [RFC8025] | ||||
| to compress the RPL artifacts as indicated in [RFC8138]. In that | ||||
| case, the router indicates self as encapsulator in an IP-in-IP 6LoRH | ||||
| Header, and places the list of Via Addresses in the order of the | ||||
| SRVIO and then the Track Egress in the SRH 6LoRH Header. | ||||
| In case of a forwarding error along a Source Route path, the node | In case of a forwarding error along a Source Route path, the node | |||
| that fails to forward SHOULD send an ICMP error with a code "Error in | that fails to forward SHOULD send an ICMP error with a code "Error in | |||
| Source Routing Header" back to the source of the packet, as described | Source Routing Header" back to the source of the packet, as described | |||
| in section 11.2.2.3. of [RPL]. Upon this message, the encapsulating | in section 11.2.2.3. of [RPL]. Upon this message, the encapsulating | |||
| node SHOULD stop using the source route path for a period of time and | node SHOULD stop using the source route path for a period of time and | |||
| it SHOULD send an ICMP message with a Code "Error in Projected Route" | it SHOULD send an ICMP message with a Code "Error in Projected Route" | |||
| to the Root. Failure to follow these steps may result in packet loss | to the Root. Failure to follow these steps may result in packet loss | |||
| and wasted resources along the source route path that is broken. | and wasted resources along the source route path that is broken. | |||
| 6.4. Storing Mode Projected Route | 5.5. Storing Mode Projected Route | |||
| As illustrated in Figure 8, the Storing Mode route projection is used | As illustrated in Figure 8, a P-DAO that carries a VIO enables the | |||
| by the Root to install a routing state in the routers along a Segment | Root to install a stateful route towards a collection of Targets | |||
| between an Ingress and an Egress router this enables the routers to | along a Segment between a Track Ingress and a Track Egress. | |||
| forward along that Segment any packet for which the next loose hop is | ||||
| the Egress node, for instance a loose source routed packet for which | ||||
| the next loose hop is the Egress node, or a packet for which the | ||||
| router has a routing state to the final destination via the Egress | ||||
| node. | ||||
| ------+--------- | ------+--------- | |||
| | Internet | | Internet | |||
| | | | | |||
| +-----+ | +-----+ | |||
| | | Border Router | | | Border Router | |||
| | | (RPL Root) | | | (RPL Root) | |||
| +-----+ | ^ | | +-----+ | ^ | | |||
| | | DAO | ACK | | | | DAO | ACK | | |||
| o o o o | | | | o o o o | | | | |||
| o o o o o o o o o | ^ | Projected . | o o o o o o o o o | ^ | Projected . | |||
| o o o o o o o o o o | | DAO | Route . | o o o o o o o o o o | | DAO | Route . | |||
| o o o o o o o o o | ^ | . | o o o o o o o o o | ^ | . | |||
| o o o o o o o o v | DAO v . | o o o o o o o o v | DAO v . | |||
| o o LLN o o o | | o o LLN o o o | | |||
| o o o o o Loose Source Route Path | | o o o o o Loose Source Route Path | | |||
| o o o o From Root To Destination v | o o o o From Root To Destination v | |||
| Figure 8: Projecting a route | Figure 8: Projecting a route | |||
| In order to install the relevant routing state along the Segment | In order to install the relevant routing state along the Segment , | |||
| between an ingress and an egress routers, the Root sends a unicast | the Root sends a unicast P-DAO message to the Track Egress router of | |||
| P-DAO message to the egress router of the routing Segment that must | the routing Segment that is being installed. The P-DAO message | |||
| be installed. The P-DAO message contains the ordered list of hops | contains a VIO with the direct sequence of Via Addresses. The VIO | |||
| along the Segment as a direct sequence of Via Information options | follows one or more RTOs indicating the Targets to which the Track | |||
| that are preceded by one or more RPL Target options to which they | leads. The VIO contains a Segment Lifetime for which the state is to | |||
| relate. Each Via Information option contains a Segment Lifetime for | be maintained. | |||
| which the state is to be maintained. | ||||
| The Root sends the P-DAO directly to the egress node of the Segment. | The Root sends the P-DAO directly to the egress node of the Segment. | |||
| In that P-DAO, the destination IP address matches the last Via | In that P-DAO, the destination IP address matches the last Via | |||
| Address in the VIO. This is how the egress recognizes its role. In | Address in the VIO. This is how the egress recognizes its role. In | |||
| a similar fashion, the ingress node recognizes its role as it matches | a similar fashion, the ingress node recognizes its role as it matches | |||
| first Via Address in the VIO. | first Via Address in the VIO. | |||
| The Egress node of the Segment is the only node in the path that does | The Egress node of the Segment is the only node in the path that does | |||
| not install a route in response to the P-DAO; it is expected to be | not install a route in response to the P-DAO; it is expected to be | |||
| already able to route to the Target(s) on its own. It may either be | already able to route to the Target(s) on its own. If one of the | |||
| the Target, or may have some existing information to reach the | Targets is not known, the node MUST answer to the Root with a | |||
| Target(s), such as a connected route or an already installed | negative DAO-ACK listing the Target(s) that could not be located | |||
| Projected Route. If one of the Targets cannot be located, the node | (suggested status 10 to be confirmed by IANA). | |||
| MUST answer to the Root with a negative DAO-ACK listing the Target(s) | ||||
| that could not be located (suggested status 10 to be confirmed by | ||||
| IANA). | ||||
| If the egress node can reach all the Targets, then it forwards the | If the egress node can reach all the Targets, then it forwards the | |||
| P-DAO with unchanged content to its loose predecessor in the Segment | P-DAO with unchanged content to its loose predecessor in the Segment | |||
| as indicated in the list of Via Information options, and recursively | as indicated in the list of Via Information options, and recursively | |||
| the message is propagated unchanged along the sequence of routers | the message is propagated unchanged along the sequence of routers | |||
| indicated in the P-DAO, but in the reverse order, from egress to | indicated in the P-DAO, but in the reverse order, from egress to | |||
| ingress. | ingress. | |||
| The address of the predecessor to be used as destination of the | The address of the predecessor to be used as destination of the | |||
| propagated DAO message is found in the Via Information option the | propagated DAO message is found in the Via Address the precedes the | |||
| precedes the one that contain the address of the propagating node, | one that contain the address of the propagating node, which is used | |||
| which is used as source of the packet. | as source of the message. | |||
| Upon receiving a propagated DAO, an intermediate router as well as | Upon receiving a propagated DAO, all except the Egress Router MUST | |||
| the ingress router install a route towards the DAO Target(s) via its | install a route towards the DAO Target(s) via their successor in the | |||
| successor in the P-DAO; the router locates its address in the VIO, | VIO. The router MAY install additional routes towards the VIA | |||
| and uses as next hop the address found in the previous Via Address | Addresses that are the VIO after the next one, if any, but in case of | |||
| field in the VIO. The router MAY install additional routes towards | a conflict or a lack of resource, the route(s) to the Target(s) have | |||
| the VIA Addresses that are the VIO after the next one, if any, but in | precedence. | |||
| case of a conflict or a lack of resource, the route(s) to the | ||||
| Target(s) have precedence. | ||||
| The process recurses till the P-DAO is propagated to ingress router | If a router cannot reach its predecessor in the VIO, the router MUST | |||
| of the Segment, which answers with a DAO-ACK to the Root. | answer to the Root with a negative DAO-ACK indicating the successor | |||
| that is unreachable (suggested status 11 to be confirmed by IANA). | ||||
| Also, the path indicated in a P-DAO may be loose, in which case the | The process continues till the P-DAO is propagated to ingress router | |||
| reachability to the next hop has to be asserted. Each router along | of the Segment, which answers with a DAO-ACK to the Root. | |||
| the path indicated in a P-DAO is expected to be able to reach its | ||||
| successor, either with a connected route (direct neighbor), or by | ||||
| routing, for Instance following a route installed previously by a DAO | ||||
| or a P-DAO message. If that route is not connected then a recursive | ||||
| lookup may take place at packet forwarding time to find the next hop | ||||
| to reach the Target(s). If it does not and cannot reach the next | ||||
| router in the P-DAO, the router MUST answer to the Root with a | ||||
| negative DAO-ACK indicating the successor that is unreachable | ||||
| (suggested status 11 to be confirmed by IANA). | ||||
| A Segment Lifetime of 0 in a Via Information option is used to clean | A Segment Lifetime of 0 in a Via Information option is used to clean | |||
| up the state. The P-DAO is forwarded as described above, but the DAO | up the state. The P-DAO is forwarded as described above, but the DAO | |||
| is interpreted as a No-Path DAO and results in cleaning up existing | is interpreted as a No-Path DAO and results in cleaning up existing | |||
| state as opposed to refreshing an existing one or installing a new | state as opposed to refreshing an existing one or installing a new | |||
| one. | one. | |||
| In case of a forwarding error along a Storing Mode Projected Route, | In case of a forwarding error along an SMPR, the node that fails to | |||
| the node that fails to forward SHOULD send an ICMP error with a code | forward SHOULD send an ICMP error with a code "Error in Projected | |||
| "Error in Projected Route" to the Root. Failure to do so may result | Route" to the Root. Failure to do so may result in packet loss and | |||
| in packet loss and wasted resources along the Projected Route that is | wasted resources along the Projected Route that is broken. | |||
| broken. | ||||
| 7. Security Considerations | 6. Security Considerations | |||
| This draft uses messages that are already present in RPL [RPL] with | This draft uses messages that are already present in RPL [RPL] with | |||
| optional secured versions. The same secured versions may be used | optional secured versions. The same secured versions may be used | |||
| with this draft, and whatever security is deployed for a given | with this draft, and whatever security is deployed for a given | |||
| network also applies to the flows in this draft. | network also applies to the flows in this draft. | |||
| TODO: should probably consider how P-DAO messages could be abused by | TODO: should probably consider how P-DAO messages could be abused by | |||
| a) rogue nodes b) via replay of messages c) if use of P-DAO messages | a) rogue nodes b) via replay of messages c) if use of P-DAO messages | |||
| could in fact deal with any threats? | could in fact deal with any threats? | |||
| 8. IANA Considerations | 7. IANA Considerations | |||
| 8.1. New RPL Control Codes | 7.1. New RPL Control Codes | |||
| This document extends the IANA Subregistry created by RFC 6550 for | This document extends the IANA Subregistry created by RFC 6550 for | |||
| RPL Control Codes as indicated in Table 1: | RPL Control Codes as indicated in Table 1: | |||
| +======+=============================+===============+ | +======+=============================+===============+ | |||
| | Code | Description | Reference | | | Code | Description | Reference | | |||
| +======+=============================+===============+ | +======+=============================+===============+ | |||
| | 0x09 | Projected DAO Request (PDR) | This document | | | 0x09 | Projected DAO Request (PDR) | This document | | |||
| +------+-----------------------------+---------------+ | +------+-----------------------------+---------------+ | |||
| | 0x0A | PDR-ACK | This document | | | 0x0A | PDR-ACK | This document | | |||
| +------+-----------------------------+---------------+ | +------+-----------------------------+---------------+ | |||
| Table 1: New RPL Control Codes | Table 1: New RPL Control Codes | |||
| 8.2. New RPL Control Message Options | 7.2. New RPL Control Message Options | |||
| This document extends the IANA Subregistry created by RFC 6550 for | This document extends the IANA Subregistry created by RFC 6550 for | |||
| RPL Control Message Options as indicated in Table 2: | RPL Control Message Options as indicated in Table 2: | |||
| +=======+======================================+===============+ | +=======+======================================+===============+ | |||
| | Value | Meaning | Reference | | | Value | Meaning | Reference | | |||
| +=======+======================================+===============+ | +=======+======================================+===============+ | |||
| | 0x0B | Via Information option | This document | | | 0x0B | Via Information option | This document | | |||
| +-------+--------------------------------------+---------------+ | +-------+--------------------------------------+---------------+ | |||
| | 0x0C | Source-Routed Via Information option | This document | | | 0x0C | Source-Routed Via Information option | This document | | |||
| +-------+--------------------------------------+---------------+ | +-------+--------------------------------------+---------------+ | |||
| | 0x0D | Sibling Information option | This document | | | 0x0D | Sibling Information option | This document | | |||
| +-------+--------------------------------------+---------------+ | +-------+--------------------------------------+---------------+ | |||
| Table 2: RPL Control Message Options | Table 2: RPL Control Message Options | |||
| 8.3. SubRegistry for the Projected DAO Request Flags | 7.3. SubRegistry for the Projected DAO Request Flags | |||
| IANA is required to create a registry for the 8-bit Projected DAO | IANA is required to create a registry for the 8-bit Projected DAO | |||
| Request (PDR) Flags field. Each bit is tracked with the following | Request (PDR) Flags field. Each bit is tracked with the following | |||
| qualities: | qualities: | |||
| * Bit number (counting from bit 0 as the most significant bit) | * Bit number (counting from bit 0 as the most significant bit) | |||
| * Capability description | * Capability description | |||
| * Reference | * Reference | |||
| skipping to change at page 23, line 43 ¶ | skipping to change at page 23, line 16 ¶ | |||
| | Bit number | Capability description | Reference | | | Bit number | Capability description | Reference | | |||
| +============+========================+===============+ | +============+========================+===============+ | |||
| | 0 | PDR-ACK request (K) | This document | | | 0 | PDR-ACK request (K) | This document | | |||
| +------------+------------------------+---------------+ | +------------+------------------------+---------------+ | |||
| | 1 | Requested path should | This document | | | 1 | Requested path should | This document | | |||
| | | be redundant (R) | | | | | be redundant (R) | | | |||
| +------------+------------------------+---------------+ | +------------+------------------------+---------------+ | |||
| Table 3: Initial PDR Flags | Table 3: Initial PDR Flags | |||
| 8.4. SubRegistry for the PDR-ACK Flags | 7.4. SubRegistry for the PDR-ACK Flags | |||
| IANA is required to create an subregistry for the 8-bit PDR-ACK Flags | IANA is required to create an subregistry for the 8-bit PDR-ACK Flags | |||
| field. Each bit is tracked with the following qualities: | field. Each bit is tracked with the following qualities: | |||
| * Bit number (counting from bit 0 as the most significant bit) | * Bit number (counting from bit 0 as the most significant bit) | |||
| * Capability description | * Capability description | |||
| * Reference | * Reference | |||
| Registration procedure is "Standards Action" [RFC8126]. No bit is | Registration procedure is "Standards Action" [RFC8126]. No bit is | |||
| currently defined for the PDR-ACK Flags. | currently defined for the PDR-ACK Flags. | |||
| 8.5. Subregistry for the PDR-ACK Acceptance Status Values | 7.5. Subregistry for the PDR-ACK Acceptance Status Values | |||
| IANA is requested to create a Subregistry for the PDR-ACK Acceptance | IANA is requested to create a Subregistry for the PDR-ACK Acceptance | |||
| Status values. | Status values. | |||
| * Possible values are 6-bit unsigned integers (0..63). | * Possible values are 6-bit unsigned integers (0..63). | |||
| * Registration procedure is "Standards Action" [RFC8126]. | * Registration procedure is "Standards Action" [RFC8126]. | |||
| * Initial allocation is as indicated in Table 4: | * Initial allocation is as indicated in Table 4: | |||
| +-------+------------------------+---------------+ | +-------+------------------------+---------------+ | |||
| | Value | Meaning | Reference | | | Value | Meaning | Reference | | |||
| +-------+------------------------+---------------+ | +-------+------------------------+---------------+ | |||
| | 0 | Unqualified acceptance | This document | | | 0 | Unqualified acceptance | This document | | |||
| +-------+------------------------+---------------+ | +-------+------------------------+---------------+ | |||
| Table 4: Acceptance values of the PDR-ACK Status | Table 4: Acceptance values of the PDR-ACK Status | |||
| 8.6. Subregistry for the PDR-ACK Rejection Status Values | 7.6. Subregistry for the PDR-ACK Rejection Status Values | |||
| IANA is requested to create a Subregistry for the PDR-ACK Rejection | IANA is requested to create a Subregistry for the PDR-ACK Rejection | |||
| Status values. | Status values. | |||
| * Possible values are 6-bit unsigned integers (0..63). | * Possible values are 6-bit unsigned integers (0..63). | |||
| * Registration procedure is "Standards Action" [RFC8126]. | * Registration procedure is "Standards Action" [RFC8126]. | |||
| * Initial allocation is as indicated in Table 5: | * Initial allocation is as indicated in Table 5: | |||
| +-------+-----------------------+---------------+ | +-------+-----------------------+---------------+ | |||
| | Value | Meaning | Reference | | | Value | Meaning | Reference | | |||
| +-------+-----------------------+---------------+ | +-------+-----------------------+---------------+ | |||
| | 0 | Unqualified rejection | This document | | | 0 | Unqualified rejection | This document | | |||
| +-------+-----------------------+---------------+ | +-------+-----------------------+---------------+ | |||
| Table 5: Rejection values of the PDR-ACK Status | Table 5: Rejection values of the PDR-ACK Status | |||
| 8.7. SubRegistry for the Route Projection Options Flags | 7.7. SubRegistry for the Route Projection Options Flags | |||
| IANA is requested to create a Subregistry for the 5-bit Route | IANA is requested to create a Subregistry for the 5-bit Route | |||
| Projection Options (RPO) Flags field. Each bit is tracked with the | Projection Options (RPO) Flags field. Each bit is tracked with the | |||
| following qualities: | following qualities: | |||
| * Bit number (counting from bit 0 as the most significant bit) | * Bit number (counting from bit 0 as the most significant bit) | |||
| * Capability description | * Capability description | |||
| * Reference | * Reference | |||
| Registration procedure is "Standards Action" [RFC8126]. No bit is | Registration procedure is "Standards Action" [RFC8126]. No bit is | |||
| currently defined for the Route Projection Options (RPO) Flags. | currently defined for the Route Projection Options (RPO) Flags. | |||
| 8.8. SubRegistry for the Sibling Information Option Flags | 7.8. SubRegistry for the Sibling Information Option Flags | |||
| IANA is required to create a registry for the 5-bit Sibling | IANA is required to create a registry for the 5-bit Sibling | |||
| Information Option (SIO) Flags field. Each bit is tracked with the | Information Option (SIO) Flags field. Each bit is tracked with the | |||
| following qualities: | following qualities: | |||
| * Bit number (counting from bit 0 as the most significant bit) | * Bit number (counting from bit 0 as the most significant bit) | |||
| * Capability description | * Capability description | |||
| * Reference | * Reference | |||
| skipping to change at page 25, line 34 ¶ | skipping to change at page 25, line 13 ¶ | |||
| allocation is as indicated in Table 6: | allocation is as indicated in Table 6: | |||
| +============+===================================+===============+ | +============+===================================+===============+ | |||
| | Bit number | Capability description | Reference | | | Bit number | Capability description | Reference | | |||
| +============+===================================+===============+ | +============+===================================+===============+ | |||
| | 0 | Connectivity is bidirectional (B) | This document | | | 0 | Connectivity is bidirectional (B) | This document | | |||
| +------------+-----------------------------------+---------------+ | +------------+-----------------------------------+---------------+ | |||
| Table 6: Initial SIO Flags | Table 6: Initial SIO Flags | |||
| 8.9. Error in Projected Route ICMPv6 Code | 7.9. Error in Projected Route ICMPv6 Code | |||
| In some cases RPL will return an ICMPv6 error message when a message | In some cases RPL will return an ICMPv6 error message when a message | |||
| cannot be forwarded along a Projected Route. This ICMPv6 error | cannot be forwarded along a Projected Route. This ICMPv6 error | |||
| message is "Error in Projected Route". | message is "Error in Projected Route". | |||
| IANA has defined an ICMPv6 "Code" Fields Registry for ICMPv6 Message | IANA has defined an ICMPv6 "Code" Fields Registry for ICMPv6 Message | |||
| Types. ICMPv6 Message Type 1 describes "Destination Unreachable" | Types. ICMPv6 Message Type 1 describes "Destination Unreachable" | |||
| codes. This specification requires that a new code is allocated from | codes. This specification requires that a new code is allocated from | |||
| the ICMPv6 Code Fields Registry for ICMPv6 Message Type 1, for "Error | the ICMPv6 Code Fields Registry for ICMPv6 Message Type 1, for "Error | |||
| in Projected Route", with a suggested code value of 8, to be | in Projected Route", with a suggested code value of 8, to be | |||
| confirmed by IANA. | confirmed by IANA. | |||
| 9. Acknowledgments | 8. Acknowledgments | |||
| The authors wish to acknowledge JP Vasseur, Remy Liubing, James | The authors wish to acknowledge JP Vasseur, Remy Liubing, James | |||
| Pylakutty and Patrick Wetterwald for their contributions to the ideas | Pylakutty and Patrick Wetterwald for their contributions to the ideas | |||
| developed here. | developed here. | |||
| 10. Normative References | 9. Normative References | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC4443] Conta, A., Deering, S., and M. Gupta, Ed., "Internet | [RFC4443] Conta, A., Deering, S., and M. Gupta, Ed., "Internet | |||
| Control Message Protocol (ICMPv6) for the Internet | Control Message Protocol (ICMPv6) for the Internet | |||
| Protocol Version 6 (IPv6) Specification", STD 89, | Protocol Version 6 (IPv6) Specification", STD 89, | |||
| RFC 4443, DOI 10.17487/RFC4443, March 2006, | RFC 4443, DOI 10.17487/RFC4443, March 2006, | |||
| <https://www.rfc-editor.org/info/rfc4443>. | <https://www.rfc-editor.org/info/rfc4443>. | |||
| [RFC6282] Hui, J., Ed. and P. Thubert, "Compression Format for IPv6 | ||||
| Datagrams over IEEE 802.15.4-Based Networks", RFC 6282, | ||||
| DOI 10.17487/RFC6282, September 2011, | ||||
| <https://www.rfc-editor.org/info/rfc6282>. | ||||
| [RPL] Winter, T., Ed., Thubert, P., Ed., Brandt, A., Hui, J., | [RPL] Winter, T., Ed., Thubert, P., Ed., Brandt, A., Hui, J., | |||
| Kelsey, R., Levis, P., Pister, K., Struik, R., Vasseur, | Kelsey, R., Levis, P., Pister, K., Struik, R., Vasseur, | |||
| JP., and R. Alexander, "RPL: IPv6 Routing Protocol for | JP., and R. Alexander, "RPL: IPv6 Routing Protocol for | |||
| Low-Power and Lossy Networks", RFC 6550, | Low-Power and Lossy Networks", RFC 6550, | |||
| DOI 10.17487/RFC6550, March 2012, | DOI 10.17487/RFC6550, March 2012, | |||
| <https://www.rfc-editor.org/info/rfc6550>. | <https://www.rfc-editor.org/info/rfc6550>. | |||
| [RFC6554] Hui, J., Vasseur, JP., Culler, D., and V. Manral, "An IPv6 | [RFC6554] Hui, J., Vasseur, JP., Culler, D., and V. Manral, "An IPv6 | |||
| Routing Header for Source Routes with the Routing Protocol | Routing Header for Source Routes with the Routing Protocol | |||
| for Low-Power and Lossy Networks (RPL)", RFC 6554, | for Low-Power and Lossy Networks (RPL)", RFC 6554, | |||
| skipping to change at page 26, line 40 ¶ | skipping to change at page 26, line 23 ¶ | |||
| [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
| May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
| [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | |||
| Writing an IANA Considerations Section in RFCs", BCP 26, | Writing an IANA Considerations Section in RFCs", BCP 26, | |||
| RFC 8126, DOI 10.17487/RFC8126, June 2017, | RFC 8126, DOI 10.17487/RFC8126, June 2017, | |||
| <https://www.rfc-editor.org/info/rfc8126>. | <https://www.rfc-editor.org/info/rfc8126>. | |||
| 11. Informative References | 10. Informative References | |||
| [RFC7102] Vasseur, JP., "Terms Used in Routing for Low-Power and | [RFC7102] Vasseur, JP., "Terms Used in Routing for Low-Power and | |||
| Lossy Networks", RFC 7102, DOI 10.17487/RFC7102, January | Lossy Networks", RFC 7102, DOI 10.17487/RFC7102, January | |||
| 2014, <https://www.rfc-editor.org/info/rfc7102>. | 2014, <https://www.rfc-editor.org/info/rfc7102>. | |||
| [RFC6997] Goyal, M., Ed., Baccelli, E., Philipp, M., Brandt, A., and | [RFC6997] Goyal, M., Ed., Baccelli, E., Philipp, M., Brandt, A., and | |||
| J. Martocci, "Reactive Discovery of Point-to-Point Routes | J. Martocci, "Reactive Discovery of Point-to-Point Routes | |||
| in Low-Power and Lossy Networks", RFC 6997, | in Low-Power and Lossy Networks", RFC 6997, | |||
| DOI 10.17487/RFC6997, August 2013, | DOI 10.17487/RFC6997, August 2013, | |||
| <https://www.rfc-editor.org/info/rfc6997>. | <https://www.rfc-editor.org/info/rfc6997>. | |||
| skipping to change at page 27, line 21 ¶ | skipping to change at page 27, line 6 ¶ | |||
| [RAW-ARCHI] | [RAW-ARCHI] | |||
| Thubert, P., Papadopoulos, G., and R. Buddenberg, | Thubert, P., Papadopoulos, G., and R. Buddenberg, | |||
| "Reliable and Available Wireless Architecture/Framework", | "Reliable and Available Wireless Architecture/Framework", | |||
| Work in Progress, Internet-Draft, draft-pthubert-raw- | Work in Progress, Internet-Draft, draft-pthubert-raw- | |||
| architecture-04, 6 July 2020, | architecture-04, 6 July 2020, | |||
| <https://tools.ietf.org/html/draft-pthubert-raw- | <https://tools.ietf.org/html/draft-pthubert-raw- | |||
| architecture-04>. | architecture-04>. | |||
| [TURN-ON_RFC8138] | [TURN-ON_RFC8138] | |||
| Thubert, P. and L. Zhao, "Configuration option for RFC | Thubert, P. and L. Zhao, "A RPL DODAG Configuration Option | |||
| 8138", Work in Progress, Internet-Draft, draft-thubert- | for the 6LoWPAN Routing Header", Work in Progress, | |||
| roll-turnon-rfc8138-03, 8 July 2019, | Internet-Draft, draft-ietf-roll-turnon-rfc8138-17, 30 | |||
| <https://tools.ietf.org/html/draft-thubert-roll-turnon- | September 2020, <https://tools.ietf.org/html/draft-ietf- | |||
| rfc8138-03>. | roll-turnon-rfc8138-17>. | |||
| [RFC8655] Finn, N., Thubert, P., Varga, B., and J. Farkas, | [RFC8655] Finn, N., Thubert, P., Varga, B., and J. Farkas, | |||
| "Deterministic Networking Architecture", RFC 8655, | "Deterministic Networking Architecture", RFC 8655, | |||
| DOI 10.17487/RFC8655, October 2019, | DOI 10.17487/RFC8655, October 2019, | |||
| <https://www.rfc-editor.org/info/rfc8655>. | <https://www.rfc-editor.org/info/rfc8655>. | |||
| [RFC8025] Thubert, P., Ed. and R. Cragie, "IPv6 over Low-Power | [RFC8025] Thubert, P., Ed. and R. Cragie, "IPv6 over Low-Power | |||
| Wireless Personal Area Network (6LoWPAN) Paging Dispatch", | Wireless Personal Area Network (6LoWPAN) Paging Dispatch", | |||
| RFC 8025, DOI 10.17487/RFC8025, November 2016, | RFC 8025, DOI 10.17487/RFC8025, November 2016, | |||
| <https://www.rfc-editor.org/info/rfc8025>. | <https://www.rfc-editor.org/info/rfc8025>. | |||
| [RFC8138] Thubert, P., Ed., Bormann, C., Toutain, L., and R. Cragie, | [RFC8138] Thubert, P., Ed., Bormann, C., Toutain, L., and R. Cragie, | |||
| "IPv6 over Low-Power Wireless Personal Area Network | "IPv6 over Low-Power Wireless Personal Area Network | |||
| (6LoWPAN) Routing Header", RFC 8138, DOI 10.17487/RFC8138, | (6LoWPAN) Routing Header", RFC 8138, DOI 10.17487/RFC8138, | |||
| April 2017, <https://www.rfc-editor.org/info/rfc8138>. | April 2017, <https://www.rfc-editor.org/info/rfc8138>. | |||
| [USEofRPLinfo] | [USEofRPLinfo] | |||
| Robles, I., Richardson, M., and P. Thubert, "Using RPI | Robles, I., Richardson, M., and P. Thubert, "Using RPI | |||
| Option Type, Routing Header for Source Routes and IPv6-in- | Option Type, Routing Header for Source Routes and IPv6-in- | |||
| IPv6 encapsulation in the RPL Data Plane", Work in | IPv6 encapsulation in the RPL Data Plane", Work in | |||
| Progress, Internet-Draft, draft-ietf-roll-useofrplinfo-40, | Progress, Internet-Draft, draft-ietf-roll-useofrplinfo-41, | |||
| 25 June 2020, <https://tools.ietf.org/html/draft-ietf- | 21 September 2020, <https://tools.ietf.org/html/draft- | |||
| roll-useofrplinfo-40>. | ietf-roll-useofrplinfo-41>. | |||
| [PCE] IETF, "Path Computation Element", | [PCE] IETF, "Path Computation Element", | |||
| <https://datatracker.ietf.org/doc/charter-ietf-pce/>. | <https://datatracker.ietf.org/doc/charter-ietf-pce/>. | |||
| Appendix A. Applications | Appendix A. Applications | |||
| A.1. Loose Source Routing | A.1. Loose Source Routing | |||
| A RPL implementation operating in a very constrained LLN typically | A RPL implementation operating in a very constrained LLN typically | |||
| uses the Non-Storing Mode of Operation as represented in Figure 9. | uses the Non-Storing Mode of Operation as represented in Figure 9. | |||
| skipping to change at page 29, line 19 ¶ | skipping to change at page 29, line 19 ¶ | |||
| would allow to make the source routing operation loose as opposed to | would allow to make the source routing operation loose as opposed to | |||
| strict, and save packet size. Limiting the packet size is directly | strict, and save packet size. Limiting the packet size is directly | |||
| beneficial to the energy budget, but, mostly, it reduces the chances | beneficial to the energy budget, but, mostly, it reduces the chances | |||
| of frame loss and/or packet fragmentation, which is highly | of frame loss and/or packet fragmentation, which is highly | |||
| detrimental to the LLN operation. Because the capability to store a | detrimental to the LLN operation. Because the capability to store a | |||
| routing state in every node is limited, the decision of which route | routing state in every node is limited, the decision of which route | |||
| is installed where can only be optimized with a global knowledge of | is installed where can only be optimized with a global knowledge of | |||
| the system, a knowledge that the Root or an associated PCE may | the system, a knowledge that the Root or an associated PCE may | |||
| possess by means that are outside of the scope of this specification. | possess by means that are outside of the scope of this specification. | |||
| This specification enables to store source-routed or Storing Mode | This specification enables to store a Storing Mode state in | |||
| state in intermediate routers, which enables to limit the excursion | intermediate routers, which enables to limit the excursion of the | |||
| of the source route headers in deep networks. Once a P-DAO exchange | source route headers in deep networks. Once a P-DAO exchange has | |||
| has taken place for a given Target, if the Root operates in non | taken place for a given Target, if the Root operates in non Storing | |||
| Storing Mode, then it may elide the sequence of routers that is | Mode, then it may elide the sequence of routers that is installed in | |||
| installed in the network from its source route headers to destination | the network from its source route headers to destination that are | |||
| that are reachable via that Target, and the source route headers | reachable via that Target, and the source route headers effectively | |||
| effectively become loose. | become loose. | |||
| A.2. Transversal Routes | A.2. Transversal Routes | |||
| RPL is optimized for Point-to-Multipoint (P2MP) and Multipoint-to- | RPL is optimized for Point-to-Multipoint (P2MP) and Multipoint-to- | |||
| Point (MP2P), whereby routes are always installed along the RPL DODAG | Point (MP2P), whereby routes are always installed along the RPL DODAG | |||
| respectively from and towards the DODAG Root. Transversal Peer to | respectively from and towards the DODAG Root. Transversal Peer to | |||
| Peer (P2P) routes in a RPL network will generally suffer from some | Peer (P2P) routes in a RPL network will generally suffer from some | |||
| elongated (stretched) path versus the best possible path, since | elongated (stretched) path versus the best possible path, since | |||
| routing between 2 nodes always happens via a common parent, as | routing between 2 nodes always happens via a common parent, as | |||
| illustrated in Figure 10: | illustrated in Figure 10: | |||
| skipping to change at page 30, line 7 ¶ | skipping to change at page 29, line 49 ¶ | |||
| the packets will follow the default route up the DODAG as well. | the packets will follow the default route up the DODAG as well. | |||
| If the destination is in the same DODAG, they will eventually | If the destination is in the same DODAG, they will eventually | |||
| reach a common parent that has a route to the destination; at | reach a common parent that has a route to the destination; at | |||
| worse, the common parent may also be the Root. From that common | worse, the common parent may also be the Root. From that common | |||
| parent, the packet will follow a path down the DODAG that is | parent, the packet will follow a path down the DODAG that is | |||
| optimized for the Objective Function that was used to build the | optimized for the Objective Function that was used to build the | |||
| DODAG. | DODAG. | |||
| * in Non-Storing Mode, all packets routed within the DODAG flow all | * in Non-Storing Mode, all packets routed within the DODAG flow all | |||
| the way up to the Root of the DODAG. If the destination is in the | the way up to the Root of the DODAG. If the destination is in the | |||
| same DODAG, the Root must encapsulate the packet to place a | same DODAG, the Root must encapsulate the packet to place an RH | |||
| Routing Header that has the strict source route information down | that has the strict source route information down the DODAG to the | |||
| the DODAG to the destination. This will be the case even if the | destination. This will be the case even if the destination is | |||
| destination is relatively close to the source and the Root is | relatively close to the source and the Root is relatively far off. | |||
| relatively far off. | ||||
| ------+--------- | ------+--------- | |||
| | Internet | | Internet | |||
| | | | | |||
| +-----+ | +-----+ | |||
| | | Border Router | | | Border Router | |||
| | | (RPL Root) | | | (RPL Root) | |||
| +-----+ | +-----+ | |||
| X | X | |||
| ^ v o o | ^ v o o | |||
| skipping to change at page 31, line 32 ¶ | skipping to change at page 31, line 14 ¶ | |||
| This specification enables to store source-routed or Storing Mode | This specification enables to store source-routed or Storing Mode | |||
| state in intermediate routers, which enables to limit the stretch of | state in intermediate routers, which enables to limit the stretch of | |||
| a P2P route and maintain the characteristics within a given SLA. An | a P2P route and maintain the characteristics within a given SLA. An | |||
| example of service using this mechanism oculd be a control loop that | example of service using this mechanism oculd be a control loop that | |||
| would be installed in a network that uses classical RPL for | would be installed in a network that uses classical RPL for | |||
| asynchronous data collection. In that case, the P2P path may be | asynchronous data collection. In that case, the P2P path may be | |||
| installed in a different RPL Instance, with a different objective | installed in a different RPL Instance, with a different objective | |||
| function. | function. | |||
| Appendix B. Examples | ||||
| B.1. Using Storing Mode P-DAO in Non-Storing Mode MOP | ||||
| In Non-Storing Mode, the DAG Root maintains the knowledge of the | ||||
| whole DODAG topology, so when both the source and the destination of | ||||
| a packet are in the DODAG, the Root can determine the common parent | ||||
| that would have been used in Storing Mode, and thus the list of nodes | ||||
| in the path between the common parent and the destination. For | ||||
| Instance in the diagram shown in Figure 12, if the source is node 41 | ||||
| and the destination is node 52, then the common parent is node 22. | ||||
| ------+--------- | ||||
| | Internet | ||||
| | | ||||
| +-----+ | ||||
| | | Border Router | ||||
| | | (RPL Root) | ||||
| +-----+ | ||||
| | \ \____ | ||||
| / \ \ | ||||
| o 11 o 12 o 13 | ||||
| / | / \ | ||||
| o 22 o 23 o 24 o 25 | ||||
| / \ | \ \ | ||||
| o 31 o 32 o o o 35 | ||||
| / / | \ | \ | ||||
| o 41 o 42 o o o 45 o 46 | ||||
| | | | | \ | | ||||
| o 51 o 52 o 53 o o 55 o 56 | ||||
| LLN | ||||
| Figure 12: Example DODAG forming a logical tree topology | ||||
| With this draft, the Root can install a Storing Mode routing states | ||||
| along a Segment that is either from itself to the destination, or | ||||
| from one or more common parents for a particular source/destination | ||||
| pair towards that destination (in this particular example, this would | ||||
| be the Segment made of nodes 22, 32, 42). | ||||
| In the example below, say that there is a lot of traffic to nodes 55 | ||||
| and 56 and the Root decides to reduce the size of routing headers to | ||||
| those destinations. The Root can first send a DAO to node 45 | ||||
| indicating Target 55 and a Via Segment (35, 45), as well as another | ||||
| DAO to node 46 indicating Target 56 and a Via Segment (35, 46). This | ||||
| will save one entry in the routing header on both sides. The Root | ||||
| may then send a DAO to node 35 indicating Targets 55 and 56 a Via | ||||
| Segment (13, 24, 35) to fully optimize that path. | ||||
| Alternatively, the Root may send a DAO to node 45 indicating Target | ||||
| 55 and a Via Segment (13, 24, 35, 45) and then a DAO to node 46 | ||||
| indicating Target 56 and a Via Segment (13, 24, 35, 46), indicating | ||||
| the same DAO Sequence. | ||||
| B.2. Projecting a Storing Mode transversal route | ||||
| In this example, say that a PCE determines that a path must be | ||||
| installed between node I and node D via routers A, B and E, in order | ||||
| to serve the needs of a particular application. | ||||
| The Root sends a P-DAO to node E, with an RTO indicating the | ||||
| destination D, a TIO optionally indicating the Track Egress in the | ||||
| Parent Address field, and a sequence of Via Information options | ||||
| indicating the hops, one for S, which is the ingress router of the | ||||
| Segment, one for A, and then one for B, which are respectively the | ||||
| intermediate and penultimate routers. | ||||
| ------+--------- | ||||
| | Internet | ||||
| | | ||||
| +-----+ | ||||
| | | Border Router | ||||
| | | (RPL Root) | ||||
| +-----+ | ||||
| | P-DAO message to C | ||||
| o | o o | ||||
| o o o | o o o o o | ||||
| o o o | o o o o o o | ||||
| o o V o o o o o o | ||||
| S A B E D o o o | ||||
| o o o o | ||||
| LLN | ||||
| Figure 13: P-DAO from Root | ||||
| Upon reception of the P-DAO, C validates that it can reach D, e.g. | ||||
| using IPv6 Neighbor Discovery, and if so, propagates the P-DAO | ||||
| unchanged to B. | ||||
| B checks that it can reach C and of so, installs a route towards D | ||||
| via C. Then it propagates the P-DAO to A. | ||||
| The process recurses till the P-DAO reaches S, the ingress of the | ||||
| Segment, which installs a route to D via A and sends a DAO-ACK to the | ||||
| Root. | ||||
| ------+--------- | ||||
| | Internet | ||||
| | | ||||
| +-----+ | ||||
| | | Border Router | ||||
| | | (RPL Root) | ||||
| +-----+ | ||||
| ^ P-DAO-ACK from S | ||||
| / o o o | ||||
| / o o o o o o o | ||||
| | o o o o o o o o o | ||||
| | o o o o o o o o | ||||
| S A B C D o o o | ||||
| o o o o | ||||
| LLN | ||||
| Figure 14: P-DAO-ACK to Root | ||||
| As a result, a transversal route is installed that does not need to | ||||
| follow the DODAG structure. | ||||
| ------+--------- | ||||
| | Internet | ||||
| | | ||||
| +-----+ | ||||
| | | Border Router | ||||
| | | (RPL Root) | ||||
| +-----+ | ||||
| | | ||||
| o o o o | ||||
| o o o o o o o o o | ||||
| o o o o o o o o o o | ||||
| o o o o o o o o o | ||||
| S>>A>>>B>>C>>>D o o o | ||||
| o o o o | ||||
| LLN | ||||
| Figure 15: Projected Transversal Route | ||||
| Authors' Addresses | Authors' Addresses | |||
| Pascal Thubert (editor) | Pascal Thubert (editor) | |||
| Cisco Systems, Inc | Cisco Systems, Inc | |||
| Building D | Building D | |||
| 45 Allee des Ormes - BP1200 | 45 Allee des Ormes - BP1200 | |||
| 06254 Mougins - Sophia Antipolis | 06254 Mougins - Sophia Antipolis | |||
| France | France | |||
| Phone: +33 497 23 26 34 | Phone: +33 497 23 26 34 | |||
| Email: pthubert@cisco.com | Email: pthubert@cisco.com | |||
| Rahul Arvind Jadhav | Rahul Arvind Jadhav | |||
| Huawei Tech | Huawei Tech | |||
| Kundalahalli Village, Whitefield, | Kundalahalli Village, Whitefield, | |||
| Bangalore 560037 | Bangalore 560037 | |||
| Karnataka | Karnataka | |||
| India | India | |||
| End of changes. 103 change blocks. | ||||
| 588 lines changed or deleted | 434 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||