| < draft-ietf-roll-dao-projection-06.txt | draft-ietf-roll-dao-projection-07.txt > | |||
|---|---|---|---|---|
| ROLL P. Thubert, Ed. | ROLL P. Thubert, Ed. | |||
| Internet-Draft Cisco Systems | Internet-Draft Cisco Systems | |||
| Updates: 6550, 6553, 8138 (if approved) R. Jadhav | Updates: 6550 (if approved) R.A. Jadhav | |||
| Intended status: Standards Track Huawei Tech | Intended status: Standards Track Huawei Tech | |||
| Expires: November 25, 2019 M. Gillmore | Expires: 6 May 2020 M. Gillmore | |||
| Itron | Itron | |||
| J. Pylakutty | 3 November 2019 | |||
| Cisco | ||||
| May 24, 2019 | ||||
| Root initiated routing state in RPL | Root initiated routing state in RPL | |||
| draft-ietf-roll-dao-projection-06 | draft-ietf-roll-dao-projection-07 | |||
| Abstract | Abstract | |||
| This document extends RFC 6550, RFC 6553 and RFC 8138 and enable to | This document proposes a protocol extension to RPL that enables to | |||
| install a limited amount of centrally-computed routes in a RPL graph, | install a limited amount of centrally-computed routes in a RPL graph, | |||
| enabling loose source routing down a non-storing mode DODAG, or | enabling loose source routing down a non-storing mode DODAG, or | |||
| transversal routes inside the DODAG. In constrast with classical | transversal routes inside the DODAG. As opposed to the classical | |||
| routes in RPL that are injected by the end devices, this draft | route injection in RPL that are injected by the end devices, this | |||
| enables the root of the DODAG to projects the routes that are needed | draft enables the Root of the DODAG to projects the routes that are | |||
| on the nodes where they should be installed. | needed on the nodes where they should be installed. | |||
| 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 November 25, 2019. | This Internet-Draft will expire on 6 May 2020. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2019 IETF Trust and the persons identified as the | Copyright (c) 2019 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents (https://trustee.ietf.org/ | |||
| (https://trustee.ietf.org/license-info) in effect on the date of | license-info) in effect on the date of publication of this document. | |||
| publication of this document. Please review these documents | Please review these documents carefully, as they describe your rights | |||
| carefully, as they describe your rights and restrictions with respect | and restrictions with respect to this document. Code Components | |||
| to this document. Code Components extracted from this document must | extracted from this document must include Simplified BSD License text | |||
| include Simplified BSD License text as described in Section 4.e of | as described in Section 4.e of the Trust Legal Provisions and are | |||
| the Trust Legal Provisions and are provided without warranty as | provided without warranty as described in the Simplified BSD License. | |||
| described in the Simplified BSD License. | ||||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 2.1. BCP 14 . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 2.1. BCP 14 . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2.2. New Terms . . . . . . . . . . . . . . . . . . . . . . . . 4 | 2.2. Subset of a 6LoWPAN Glossary . . . . . . . . . . . . . . 4 | |||
| 2.3. References . . . . . . . . . . . . . . . . . . . . . . . 4 | 2.3. Other Terms . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 3. Extending RFC 6550 . . . . . . . . . . . . . . . . . . . . . 4 | 2.4. References . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 3.1. RPL Instances . . . . . . . . . . . . . . . . . . . . . . 5 | 3. Extending RFC 6550 . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 3.2. New RPL Control Message Options . . . . . . . . . . . . . 5 | 4. Identifying a Path . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 3.3. RPI for Projected Routes . . . . . . . . . . . . . . . . 7 | 5. New RPL Control Messages and Options . . . . . . . . . . . . 7 | |||
| 3.4. Projected DAO . . . . . . . . . . . . . . . . . . . . . . 7 | 5.1. New P-DAO Request Control Message . . . . . . . . . . . . 7 | |||
| 3.4.1. Non-Storing Mode P-Route . . . . . . . . . . . . . . 9 | 5.2. New PDR-ACK Control Message . . . . . . . . . . . . . . . 8 | |||
| 3.4.2. Storing-Mode P-Route . . . . . . . . . . . . . . . . 10 | 5.3. Route Projection Options . . . . . . . . . . . . . . . . 8 | |||
| 4. Extending RFC 8138 . . . . . . . . . . . . . . . . . . . . . 13 | 5.4. Sibling Information Option . . . . . . . . . . . . . . . 10 | |||
| 4.1. Elective RPI 6LoRH . . . . . . . . . . . . . . . . . . . 13 | 6. Projected DAO . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 5. Extending RFC 6553 . . . . . . . . . . . . . . . . . . . . . 13 | 6.1. Non-Storing Mode Projected Route . . . . . . . . . . . . 13 | |||
| 5.1. Uncompressed RPL Option . . . . . . . . . . . . . . . . . 13 | 6.2. Storing-Mode Projected Route . . . . . . . . . . . . . . 15 | |||
| 6. Security Considerations . . . . . . . . . . . . . . . . . . . 14 | 7. Security Considerations . . . . . . . . . . . . . . . . . . . 17 | |||
| 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 14 | 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 17 | |||
| 7.1. New Elective 6LoWPAN Routing Header Type . . . . . . . . 14 | 8.1. New RPL Control Codes . . . . . . . . . . . . . . . . . . 17 | |||
| 7.2. New RPL Control Codes . . . . . . . . . . . . . . . . . . 15 | 8.2. Error in Projected Route ICMPv6 Code . . . . . . . . . . 18 | |||
| 7.3. Error in Projected Route ICMPv6 Code . . . . . . . . . . 15 | 9. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 18 | |||
| 8. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 16 | 10. Normative References . . . . . . . . . . . . . . . . . . . . 18 | |||
| 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 16 | 11. Informative References . . . . . . . . . . . . . . . . . . . 19 | |||
| 9.1. Normative References . . . . . . . . . . . . . . . . . . 16 | Appendix A. Applications . . . . . . . . . . . . . . . . . . . . 20 | |||
| 9.2. Informative References . . . . . . . . . . . . . . . . . 17 | A.1. Loose Source Routing in Non-storing Mode . . . . . . . . 20 | |||
| Appendix A. Applications . . . . . . . . . . . . . . . . . . . . 18 | A.2. Transversal Routes in storing and non-storing | |||
| A.1. Loose Source Routing in Non-storing Mode . . . . . . . . 18 | modes . . . . . . . . . . . . . . . . . . . . . . . . . . 22 | |||
| A.2. Transversal Routes in storing and non-storing modes . . . 19 | Appendix B. Examples . . . . . . . . . . . . . . . . . . . . . . 23 | |||
| Appendix B. Examples . . . . . . . . . . . . . . . . . . . . . . 21 | B.1. Using storing mode P-DAO in non-storing mode MOP . . . . 23 | |||
| B.1. Using storing mode P-DAO in non-storing mode MOP . . . . 21 | B.2. Projecting a storing-mode transversal route . . . . . . . 24 | |||
| B.2. Projecting a storing-mode transversal route . . . . . . . 22 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 26 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 24 | ||||
| 1. Introduction | 1. Introduction | |||
| The "Routing Protocol for Low Power and Lossy Networks" [RFC6550] | The "Routing Protocol for Low Power and Lossy Networks" [RFC6550] | |||
| (LLN)(RPL) is a generic Distance Vector protocol that is well suited | (LLN)(RPL) is a generic Distance Vector protocol that is well suited | |||
| low energy Internet of Things (IoT) networks. RPL forms Destination | for application in a variety of low energy Internet of Things (IoT) | |||
| Oriented Directed Acyclic Graphs (DODAGs) in which the root often | networks. RPL forms Destination Oriented Directed Acyclic Graphs | |||
| acts as the Border Router to connect the RPL domain to the Internet. | (DODAGs) in which the Root often acts as the Border Router to connect | |||
| The root is responsible to select the RPL Instance that is used to | the RPL domain to the Internet. The Root is responsible to select | |||
| forward a packet coming from the Internet into the RPL domain and set | the RPL Instance that is used to forward a packet coming from the | |||
| the related RPL information in the packets. | Internet into the RPL domain and set the related RPL information in | |||
| the packets. | ||||
| The 6TiSCH architecture [I-D.ietf-6tisch-architecture] leverages RPL | The 6TiSCH architecture [6TiSCH-ARCHI] leverages RPL for its routing | |||
| for its routing operation and considers the Deterministic Networking | operation and considers the Deterministic Networking Architecture | |||
| Architecture [I-D.ietf-detnet-architecture] as one possible model | [RFC8655] as one possible model whereby the device resources and | |||
| whereby the device resources and capabilities are exposed to an | capabilities are exposed to an external controller which installs | |||
| external controller which installs routing states into the network | routing states into the network based on some objective functions | |||
| based on some objective functions that reside in that external | that reside in that external entity. | |||
| entity. | ||||
| Based on heuristics of usage, path length, and knowledge of device | Based on heuristics of usage, path length, and knowledge of device | |||
| capacity and available resources such as battery levels and | capacity and available resources such as battery levels and | |||
| reservable buffers, a Path Computation Element ([PCE]) with a global | reservable buffers, a Path Computation Element ([PCE]) with a global | |||
| visibility on the system could install additional P2P routes that are | visibility on the system could install additional P2P routes that are | |||
| more optimized for the current needs as expressed by the objective | more optimized for the current needs as expressed by the objective | |||
| function. | function. | |||
| This draft enables a RPL root to install and maintain projected | This draft enables a RPL Root to install and maintain Projected | |||
| routes (P-Routes) within its DODAG, along a selected set of nodes | Routes within its DODAG, along a selected set of nodes that may or | |||
| that may or may not include self, for a chosen duration. This | may not include self, for a chosen duration. This potentially | |||
| potentially enables routes that are more optimized than those | enables routes that are more optimized than those obtained with the | |||
| obtained with the distributed operation of RPL, either in terms of | distributed operation of RPL, either in terms of the size of a | |||
| the size of a source-route header or in terms of path length, which | source-route header or in terms of path length, which impacts both | |||
| impacts both the latency and the packet delivery ratio. P-routes may | the latency and the packet delivery ratio. Projected Routes may be | |||
| be installed in either Storing and Non-Storing Modes Instances of the | installed in either Storing and Non-Storing Modes Instances of the | |||
| classical RPL operation, resulting in potentially hybrid situations | classical RPL operation, resulting in potentially hybrid situations | |||
| where the mode of some P-routes is different from that of the other | where the mode of some Projected Routes is different from that of the | |||
| routes in the RPL Instance. | other routes in the RPL Instance. | |||
| P-Routes must be used with the parsimony to limit the amount of state | Projected Routes must be used with the parsimony to limit the amount | |||
| that is installed in each device to fit within its resources, and to | of state that is installed in each device to fit within its | |||
| limit the amount of rerouted traffic to fit within the capabilities | resources, and to limit the amount of rerouted traffic to fit within | |||
| of the transmission links. The algorithm used to compute the paths | the capabilities of the transmission links. The algorithm used to | |||
| and the protocol used to learn the topology of the network and the | compute the paths and the protocol used to learn the topology of the | |||
| resources that are available in devices and in the network are out of | network and the resources that are available in devices and in the | |||
| scope for this document. Possibly with the assistance of a Path | network are out of scope for this document. Possibly with the | |||
| Computation Element ([PCE]) that could have a better visibility on | assistance of a Path Computation Element ([PCE]) that could have a | |||
| the larger system, the root computes which segment could be optimized | better visibility on the larger system, the Root computes which | |||
| and uses this draft to install the corresponding P-Routes. | segment could be optimized and uses this draft to install the | |||
| corresponding Projected Routes. | ||||
| 2. Terminology | A Projected Route may be a stand-alone path to a Target or a segment | |||
| in a complex Track [6TiSCH-ARCHI] that provides redundant forwarding | ||||
| solutions to a destination to improve reliability and availability of | ||||
| the wireless transmissions [RAW-PS]. | ||||
| 2. Terminology | ||||
| 2.1. BCP 14 | 2.1. BCP 14 | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in BCP | |||
| 14 [RFC2119][RFC8174] when, and only when, they appear in all | 14 [RFC2119][RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| 2.2. New Terms | 2.2. Subset of a 6LoWPAN Glossary | |||
| P-Route: A route that is installed remotely by a RPL root. | This document often uses the following acronyms: | |||
| 2.3. References | 6BBR: 6LoWPAN Backbone Router | |||
| 6LBR: 6LoWPAN Border Router | ||||
| 6LN: 6LoWPAN Node | ||||
| 6LR: 6LoWPAN Router | ||||
| DAD: Duplicate Address Detection | ||||
| DODAG: Destination-Oriented Directed Acyclic Graph | ||||
| LLN: Low-Power and Lossy Network | ||||
| NA: Neighbor Advertisement | ||||
| NCE: Neighbor Cache Entry | ||||
| ND: Neighbor Discovery | ||||
| NDP: Neighbor Discovery Protocol | ||||
| NS: Neighbor Solicitation | ||||
| RPL: IPv6 Routing Protocol for LLNs [RFC6550] | ||||
| CMO: Control Message Option | ||||
| DAO: Destination Advertisement Object | ||||
| VIO: A Via Information Option, used in Storing Mode P-DAO messages. | ||||
| SRVIO: A Source-Routed Via Information Option, used in Non-Storing | ||||
| Mode P-DAO messages. | ||||
| RPO: A Route Projection Option; it can be a VIO or an SRVIO. | ||||
| P-DAO: A Projected DAO is a DAO message sent by the RPL Root to | ||||
| install a Projected Route. | ||||
| RTO: RPL Target Option | ||||
| RAN: RPL-Aware Node | ||||
| RA: Router Advertisement | ||||
| RS: Router Solicitation | ||||
| 2.3. Other Terms | ||||
| Projected Route: A Projected Route is a serial path that is computed | ||||
| and installed remotely by a RPL Root. | ||||
| Track: The term Track is used in this document to refer to a complex | ||||
| path, e.g., a DODAG, that incorporates redundant Projected Routes | ||||
| towards a destination for increased reliability, high availability | ||||
| and load balancing. | ||||
| 2.4. References | ||||
| 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 following documents: | discussed in the following documents: | |||
| o "Routing Protocol for Low Power and Lossy Networks" [RFC6550], and | * "Routing Protocol for Low Power and Lossy Networks" [RFC6550], and | |||
| o "Terminology in Low power And Lossy Networks" [RFC7102]. | * "Terminology in Low power And Lossy Networks" [RFC7102]. | |||
| 3. Extending RFC 6550 | 3. Extending RFC 6550 | |||
| Section 6.7 of RPL [RFC6550] specifies Control Message Options (CMO) | This specification introduces two new RPL Control Messages to enable | |||
| to be placed in RPL messages such as the Destination Advertisement | a RPL Aware Node (RAN) to request the establisment of a path from | |||
| Object (DAO) message. The RPL Target Option and the Transit | self to a Target. A RAN may request the installation of a path by | |||
| 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 with a | ||||
| completion status once it is done installing the path. See | ||||
| Section 5.1 for more. | ||||
| Section 6.7 of [RFC6550] specifies Control Message Options (CMO) to | ||||
| be placed in RPL messages such as the Destination Advertisement | ||||
| Object (DAO) message. The RPL Target Option (RTO) and the Transit | ||||
| Information Option (TIO) are such options. In Non-Storing Mode, the | Information Option (TIO) are such options. In Non-Storing Mode, the | |||
| TIO option is used in the DAO message to indicate the immediate | TIO option is used in the DAO message to indicate a parent within a | |||
| parent of a given path. The TIO applies to the Target options that | DODAG. The TIO applies to the RTOs that immedially preceed it in the | |||
| immedially preceed it. Options may be factorized; multiple TIOs may | message. Options may be factorized; multiple TIOs may be present to | |||
| be present to indicate multiple routes to the one or more contiguous | indicate multiple routes to the one or more contiguous addresses | |||
| addressed indicated in the Target Options that immediately precede | indicated in the RTOs that immediately precede the TIOs in the RPL | |||
| the TIOs in the RPL message. | message. | |||
| This specification introduces two new Control Message Options | This specification introduces two new CMOs referred to as Route | |||
| referred to as Route Projection Options (RPO). One RPO is the | Projection Options (RPO) to install Projected Routes. One RPO is the | |||
| Information option (VIO) and the other is the Source-Routed VIO | Via Information Option (VIO) and the other is the Source-Routed VIO | |||
| (SRVIO). The VIO installs a route on each hop along a P-Route (in a | (SRVIO). The VIO installs a route on each hop along a Projected | |||
| fashion analogous to RPL Storing Mode) whereas the SRVIO installs a | Route (in a fashion analogous to RPL Storing Mode) whereas the SRVIO | |||
| source-routing state at the ingress node, which uses it to insert a | installs a source-routing state at the ingress node, which uses that | |||
| routing header in a fashion similar to Non-Storing Mode. | state to insert a routing header in a fashion similar to Non-Storing | |||
| Mode. Like the TIO, the RPOs MUST be preceded by one or more RTOs to | ||||
| which they apply, and they can be factorized: multiple contiguous | ||||
| RPOs indicate alternate paths to the Target(s), more in Section 5.3. | ||||
| Like the TIO, the RPOs MUST be preceded by one or more RPL Target | This specification also introduces a new CMO to enable a RPL Router | |||
| Options to which they apply, and they can be factorized: multiple | to indicate its siblings to the Root, more in Figure 4. | |||
| contiguous RPOs indicate alternate paths to the target(s). | ||||
| 3.1. RPL Instances | 4. Identifying a Path | |||
| It must be noted that RPL has a concept of instance but does not have | It must be noted that RPL has a concept of Instance to represent | |||
| a concept of an administrative distance, which exists in certain | different routing topologies but does not have a concept of an | |||
| proprietary implementations to sort out conflicts between multiple | administrative distance, which exists in certain proprietary | |||
| sources of routing information. This draft conforms the instance | implementations to sort out conflicts between multiple sources of | |||
| model as follows: | routing information within one routing topology. This draft conforms | |||
| the Instance model as follows: | ||||
| o If the PCE needs to influence a particular instance to add better | * If the PCE needs to influence a particular Instance to add better | |||
| routes in conformance with the routing objectives in that | routes in conformance with the routing objectives in that | |||
| instance, it may do so. When the PCE modifies an existing | Instance, it may do so as long as it does not create a loop. A | |||
| instance then the added routes must not create a loop in that | Projected Route is always preferred over a route that is learned | |||
| instance. This is achieved by always preferring a route obtained | via RPL. This specification uses the RPL Root as a proxy to the | |||
| from the PCE over a route that is learned via RPL. | PCE. If the actual PCE is a separate entity, then a protocol that | |||
| is out of scope for this specification is needed to relay the | ||||
| control elements between the RPL Root and the PCE. | ||||
| o If the PCE installs a more specific (say, Traffic Engineered) | * A PCE that installs a more specific (say, Traffic Engineered) and | |||
| route between a particular pair of nodes then it SHOULD use a | possibly complex path (aka a Track) towards a particular Target | |||
| Local Instance from the ingress node of that path. A packet | MUST use a Local RPL Instance (see section 5 of [RFC6550]) | |||
| associated with that instance will be routed along that path and | associated to that Target to identify the path. We refer to that | |||
| MUST NOT be placed over a Global Instance again. A packet that is | Local RPLInstanceID as TrackID. A projected path is uniquely | |||
| placed on a Global Instance may be injected in the Local Instance | identified within the RPL domain by the tuple (Target address, | |||
| based on node policy and the Local Instance paramenters. | TrackID). When packet is placed on a Track, a RPL Packet | |||
| Information (RPI) is added with the TrackID as RPLInstanceID. The | ||||
| RPLInstanceID has the 'D' flag set, indicating that the | ||||
| destination address in the IPv6 header is the Target that is used | ||||
| to identify the Track. | ||||
| In all cases, the path is indicated by a new Via Information option, | * A packet that is routed over a projected path MUST NOT be placed | |||
| and the flow is similar to the flow used to obtain loose source | over a different RPL Instance again. A packet that is placed on a | |||
| routing. | Global Instance MAY be injected in a Local Instance based on a | |||
| network policy and the Local Instance configuration. | ||||
| 3.2. New RPL Control Message Options | A Projected Route is a serial path that may the whole path or a | |||
| segment in a complex Track, in which case multiple Projected Routes | ||||
| are installed with the stuple (Target address, TrackID), and a node | ||||
| that is present on more than one segment in a Track may be able to | ||||
| use either of the Projected Routes to forward towards the Target. | ||||
| The selection of the best route in a Track at forwarding time is out | ||||
| of scope for this document. [RAW-PS] elaborates on that particular | ||||
| problem. | ||||
| 5. New RPL Control Messages and Options | ||||
| 5.1. New P-DAO Request Control Message | ||||
| The PDR is sent to the Root to request a new Path. Exactly one | ||||
| Target Options MUST be present. | ||||
| The format of P-DAO Request (PDR) Base Object is as follows: | ||||
| 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 | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | RPLInstanceID |K|R| Flags | PDRLifetime | PDRSequence | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | Option(s)... | ||||
| +-+-+-+-+-+-+-+-+ | ||||
| Figure 1: New P-DAO Request Format | ||||
| TrackID: 8-bit field indicating the topology Instance associated | ||||
| with 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 | ||||
| either renew it of destroy it. | ||||
| K: The 'K' flag is set to indicate that the recipient is expected to | ||||
| send a PDR-ACK back. | ||||
| R: The 'R' flag is set to indicate that the Requested path should be | ||||
| redundant. | ||||
| PDRLifetime: 8-bit unsigned integer. The requested lifetime for the | ||||
| Track expressed in Lifetime Units (obtained from the Configuration | ||||
| option). A PDR with a fresher PDRSequence refreshes the lifetime, | ||||
| and a PDRLifetime of 0 indicates that the track should be | ||||
| destroyed. | ||||
| PDRSequence: 8-bit wrapping sequence number. The PDRSequence obeys | ||||
| the operation in section 7.2 of [RFC6550]. It is incremented at | ||||
| each PDR message and echoed in the PDR-ACK by the Root. The | ||||
| PDRSequence is used to correlate a PDR-ACK message with the PDR | ||||
| message that triggeted it. | ||||
| 5.2. New PDR-ACK Control Message | ||||
| The new PDR-ACK is sent as a response to a PDR message with the 'K' | ||||
| flag set. Its format is as follows: | ||||
| 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 | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | TrackID | PDR-ACK Status| Flags | Track Lifetime| | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | PDRSequence | Reserved | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | Option(s)... | ||||
| +-+-+-+-+-+-+-+ | ||||
| Figure 2: New PDR-ACK Control Message Format | ||||
| TrackID: The RPLInstanceID of the Track that was created. Set to 0 | ||||
| when no Track is created. | ||||
| PDR-ACK Status: Indicates the completion. A value up to 127 means | ||||
| acceptance Values of 128 and above are used for rejection codes; | ||||
| Track Lifetime: Indicates that remaining Lifetime for the Track, 0 | ||||
| if the Track was destroyed or not created. | ||||
| PDRSequence: 8-bit wrapping sequence number. It is incremented at | ||||
| each PDR message and echoed in the PDR-ACK. | ||||
| 5.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. The Track is identified by a | ||||
| RPLInstanceID that is either Global or local to the Target of the | ||||
| Track. | ||||
| The format of RPOs is as follows: | The format of 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 | Path Sequence | Path Lifetime | | | Type | Option Length |Comp.| Flags | TrackID | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | Path Lifetime | Path Sequence | Reserved | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| + + | + + | |||
| . . | . . | |||
| . Via Address 1 . | . Via Address 1 . | |||
| . . | . . | |||
| + + | + + | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| skipping to change at page 6, line 31 ¶ | skipping to change at page 9, line 40 ¶ | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| + + | + + | |||
| . . | . . | |||
| . Via Address n . | . Via Address n . | |||
| . . | . . | |||
| + + | + + | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 1: Via Information option format | Figure 3: Via Information option format | |||
| Option Type: 0x0A for VIO, 0x0B for SRVIO (to be confirmed by IANA) | Option Type: 0x0A for VIO, 0x0B 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. | Addresses. | |||
| Path Sequence: 8-bit unsigned integer. When a RPL Target option is | Compression Type: 16-bit unsigned integer. This is the SRH-6LoRH | |||
| issued by the root of the DODAG (i.e. in a DAO message), that | Type as defined in figure 7 in section 5.1 of [RFC8138] that | |||
| root sets the Path Sequence and increments the Path Sequence | corresponds to the compression used for all the Via Addresses. | |||
| each time it issues a RPL Target option with updated | ||||
| information. The indicated sequence deprecates any state for a | TrackID: 8-bit field indicating the topology Instance associated | |||
| given Target that was learned from a previous sequence and adds | with the Track. | |||
| to any state that was learned for that sequence. | ||||
| Path Lifetime: 8-bit unsigned integer. The length of time in | Path Lifetime: 8-bit unsigned integer. The length of time in | |||
| Lifetime Units (obtained from the Configuration option) that | Lifetime Units (obtained from the Configuration option) that the | |||
| the prefix is valid for route determination. The period starts | prefix is valid for route determination. The period starts when a | |||
| when a new Path Sequence is seen. A value of 255 (0xFF) | new Path Sequence is seen. A value of 255 (0xFF) represents | |||
| represents infinity. A value of zero (0x00) indicates a loss | infinity. A value of zero (0x00) indicates a loss of | |||
| of reachability. A DAO message that contains a Via Information | reachability. A DAO message that contains a Via Information | |||
| option with a Path Lifetime of zero for a Target is referred as | option with a Path Lifetime of zero for a Target is referred as a | |||
| a No-Path (for that Target) in this document. | No-Path (for that Target) in this document. | |||
| Via Address: 16 bytes. IPv6 Address of the next hop towards the | Path Sequence: 8-bit unsigned integer. When a RPL Target option is | |||
| destination(s) indicated in the target option that immediately | issued by the Root of the DODAG (i.e. in a DAO message), that Root | |||
| precede the RPO. Via Addresses are indicated in the order of | sets the Path Sequence and increments the Path Sequence each time | |||
| the data path from the ingress to the egress nodes. | it issues a RPL Target option with updated information. The | |||
| indicated sequence deprecates any state for a given Target that | ||||
| was learned from a previous sequence and adds to any state that | ||||
| was learned for that sequence. | ||||
| Via Address: 2 to 16 bytes, a compressed IPv6 Address. A Via | ||||
| Address indicates the next hop within the path towards the | ||||
| destination(s) that is indicated in the Target option that | ||||
| immediately precede the RPO in the DAO message. Via Addresses are | ||||
| indicated in the order of the path from the ingress to the egress | ||||
| nodes. All Via addresses are expressed in the same size as | ||||
| indicated by the Compression Type. | ||||
| An RPO MUST contain at least one Via Address, and a Via Address MUST | 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. | NOT be present more than once, otherwise the RPO MUST be ignored. | |||
| 3.3. RPI for Projected Routes | 5.4. Sibling Information Option | |||
| RPL [RFC6550], Section 11.2, specifies the RPL Packet Information | The Sibling Information Option (SIO) provides indication on siblings | |||
| (RPI) as a set of fields that are placed by RPL routers in IP packets | that could be used by the Root to form Projected Routes. The format | |||
| to identify the RPL Instance, detect anomalies and trigger corrective | of SIOs is as follows: | |||
| actions. | ||||
| In particular, the SenderRank, which is the scalar metric computed by | 0 1 2 3 | |||
| a specialized Objective Function such as described in [RFC6552], | 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 | |||
| indicates the Rank of the sender and is modified at each hop. The | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| SenderRank field is used to validate that the packet progresses in | | Type | Option Length |Comp.|B| Flags | Opaque | | |||
| the expected direction, either upwards or downwards, along the DODAG. | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Step of Rank | Reserved | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | | | ||||
| + + | ||||
| . . | ||||
| . Sibling Address . | ||||
| . . | ||||
| + + | ||||
| | | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| RPL defines the "RPL Option for Carrying RPL Information in Data- | Figure 4: Sibling Information Option Format | |||
| Plane Datagrams" [RFC6553] to transport the RPI, which is carried in | ||||
| an IPv6 Hop-by-Hop Options Header [RFC8200], typically consuming | ||||
| eight bytes per packet. | ||||
| This specification updates [RFC6550] as follows. When using | Option Type: 0x0C (to be confirmed by IANA) | |||
| projected routes, the Rank is useless and SHOULD be set to 0 in the | ||||
| non-compressed form, and can be elided in the compressed form (see | ||||
| Section 4.1). In a same fashion, the O, R, and F flags that are | ||||
| defined in Section 11.2 of [RFC6550] are not used for packets that | ||||
| follow a projected route and they MUST be reset. A new flag is | ||||
| added, the P flag that indicates that the packet is injected along a | ||||
| projected route. | ||||
| 3.4. Projected DAO | Option Length: In bytes; variable, depending on the number of Via | |||
| Addresses. | ||||
| This draft adds a capability to RPL whereby the root of a DODAG | Compression Type: 16-bit unsigned integer. This is the SRH-6LoRH | |||
| Type as defined in figure 7 in section 5.1 of [RFC8138] that | ||||
| corresponds to the compression used for the Sibling Address. | ||||
| B: 1-bit flag that is set to indicate that the connectivity to the | ||||
| sibling is bidirectional and roughly symmetrical. In that case, | ||||
| only one of the siblings may report the SIO for the hop. If 'B' | ||||
| is not set then the SIO only indicates connectivity from the | ||||
| sibling to this node, and does not provide information on the hop | ||||
| from this node to the sibling. | ||||
| Opaque: MAY be used to carry information that the node and the Root | ||||
| understand, e.g., a particular representation of the Link | ||||
| properties such as a proprietary Link Quality Information for | ||||
| packets received from the sibling. An industraial Alliance that | ||||
| uses RPL for a particular use / environment MAY redefine the use | ||||
| of this field to fit its needs. | ||||
| Step of Rank: 16-bit unsigned integer. This is the Step of Rank | ||||
| [RFC6550] as computed by the Objective Function between this node | ||||
| and the sibling. | ||||
| Reserved: MUST be set to zero by the sender and MUST be ignored by | ||||
| the receiver. | ||||
| Sibling Address: 2 to 16 bytes, a compressed IPv6 Address. a Via | ||||
| Address indicates the next hop towards the destination(s) that is | ||||
| indicated in the Target option that immediately precede the RPO in | ||||
| the DAO message. Via Addresses are indicated in the order of the | ||||
| data path from the ingress to the egress nodes. All Via addresses | ||||
| are expressed in the same size as indicated by the Compression | ||||
| Type | ||||
| An SIO MAY be immediately followed by a DAG Metric Container. In | ||||
| that case the DAG Metric Container provides additional metrics for | ||||
| the hop from the Sibling to this node. | ||||
| 6. Projected DAO | ||||
| This draft adds a capability to RPL whereby the Root of a DODAG | ||||
| projects a route by sending an extended DAO message called a | projects a route by sending an extended DAO message called a | |||
| Projected-DAO (P-DAO) to an arbitrary router in the DODAG, indicating | Projected-DAO (P-DAO) to an arbitrary router in the DODAG, indicating | |||
| one or more sequence(s) of routers inside the DODAG via which the | one or more sequence(s) of routers inside the DODAG via which the | |||
| target(s) indicated in the Target Information Option(s) (TIO) can be | Target(s) indicated in the RPL Target Option(s) (RTO) can be reached. | |||
| reached. | ||||
| A P-DAO is sent from a global address of the root to a global address | A P-DAO is sent from a global address of the Root to a global address | |||
| of the recipient, and MUST be confirmed by a DAO-ACK, which is sent | of the recipient, and MUST be confirmed by a DAO-ACK, which is sent | |||
| back to a global address of the root. | back to a global address of the Root. | |||
| A P-DAO message MUST contain at least one TIO and at least one RPO | A P-DAO message MUST contain at least one RTO and at least one RPO | |||
| following it. There can be at most one such sequence of TIOs and | following it. There can be at most one such sequence of RTOs and | |||
| then RPOs. | then RPOs. | |||
| Like a classical DAO message, a P-DAO is processed only if it is | Like a classical DAO message, a P-DAO is processed only if it is | |||
| "new" per section 9.2.2. "Generation of DAO Messages" of the RPL | "new" per section 9.2.2. "Generation of DAO Messages" of the RPL | |||
| specification [RFC6550]; this is determined using the Path Sequence | specification [RFC6550]; this is determined using the Path Sequence | |||
| information from the RPO as opposed to a TIO. Also, a Path Lifetime | information from the RPO as opposed to a TIO. Also, a Path Lifetime | |||
| of 0 in an RPO indicates that a route is to be removed. | of 0 in an RPO indicates that a route is to be removed. | |||
| There are two kinds of operation for the P-Routes, the Storing Mode | There are two kinds of operation for the Projected Routes, the | |||
| and the Non-Storing Mode. | Storing Mode and the Non-Storing Mode. | |||
| o The Non-Storing Mode is discussed in Section 3.4.1. It uses an | * The Non-Storing Mode is discussed in Section 6.1. It uses an | |||
| SRVIO that carries a list of Via Addresses to be used as a source- | SRVIO that carries a list of Via Addresses to be used as a source- | |||
| routed path to the target. The recipient of the P-DAO is the | routed path to the Target. The recipient of the P-DAO is the | |||
| ingress router of the source-routed path. Upon a Non-Storing Mode | ingress router of the source-routed path. Upon a Non-Storing Mode | |||
| P-DAO, the ingress router installs a source-routed state to the | P-DAO, the ingress router installs a source-routed state to the | |||
| target and replies to the root directly with a DAO-ACK message. | Target and replies to the Root directly with a DAO-ACK message. | |||
| o The Storing Mode is discussed in Section 3.4.2. It uses a VIO | * The Storing Mode is discussed in Section 6.2. It uses a VIO with | |||
| with one Via Address per consecutive hop, from the ingress to the | one Via Address per consecutive hop, from the ingress to the | |||
| egress of the path, including the list of all intermediate routers | egress of the path, including the list of all intermediate routers | |||
| in the data path order. The Via Addresses indicate the routers in | in the data path order. The Via Addresses indicate the routers in | |||
| which the routing state to the target have to be installed via the | which the routing state to the Target have to be installed via the | |||
| next Via Address in the VIO. In normal operations, the P-DAO is | next Via Address in the VIO. In normal operations, the P-DAO is | |||
| propagated along the chain of Via Routers from the egress router | propagated along the chain of Via Routers from the egress router | |||
| of the path till the ingress one, which confirms the installation | of the path till the ingress one, which confirms the installation | |||
| to the root with a DAO-ACK message. Note that the root may be the | to the Root with a DAO-ACK message. Note that the Root may be the | |||
| ingress and it may be the egress of the path, that it can also be | ingress and it may be the egress of the path, that it can also be | |||
| neither but it cannot be both. | neither but it cannot be both. | |||
| In case of a forwarding error along a P-Route, an ICMP error is sent | In case of a forwarding error along a Projected Route, an ICMP error | |||
| 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 7.3). The root can then modify or remove the P-Route. The | Section 8.2). The Root can then modify or remove the Projected | |||
| "Error in Projected Route" message has the same format as the | Route. The "Error in Projected Route" message has the same format as | |||
| "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 portion of the invoking packet that is sent back in | |||
| the ICMP message SHOULD record at least up to the routing header if | 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 | 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 | 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) | this node could not reach. if a 6LoWPAN Routing Header (6LoRH) | |||
| [RFC8138] is used to carry the IPv6 routing information in the outter | [RFC8138] is used to carry the IPv6 routing information in the outter | |||
| header then that whole 6LoRH information SHOULD be present in the | header then that whole 6LoRH information SHOULD be present in the | |||
| ICMP message. The sender and exact operation depend on the Mode and | ICMP message. The sender and exact operation depend on the Mode and | |||
| is described in Section 3.4.1 and Section 3.4.2 respectively. | is described in Section 6.1 and Section 6.2 respectively. | |||
| 3.4.1. Non-Storing Mode P-Route | 6.1. Non-Storing Mode Projected Route | |||
| As illustrated in Figure 2, a P-DAO that carries an SRVIO enables the | As illustrated in Figure 5, a P-DAO that carries an SRVIO enables the | |||
| root to install a source-routed path towards a target in any | Root to install a source-routed path towards a Target in any | |||
| particular router; with this path information the router can add a | particular router; with this path information the router can add a | |||
| source routed header reflecting the P-route to any packet for which | source routed header reflecting the Projected Route to any packet for | |||
| the current destination either is the said target or can be reached | which the current destination either is the said Target or can be | |||
| via the target. | reached via the Target. | |||
| ------+--------- | ------+--------- | |||
| | Internet | | Internet | |||
| | | | | |||
| +-----+ | +-----+ | |||
| | | Border Router | | | Border Router | |||
| | | (RPL Root) | | | (RPL Root) | |||
| +-----+ | P ^ | | +-----+ | P ^ | | |||
| | | DAO | ACK | Loose | | | DAO | ACK | Loose | |||
| o o o o router V | | Source | o o o o router V | | Source | |||
| o o o o o o o o o | P-DAO . Route | o o o o o o o o o | P-DAO . Route | |||
| o o o o o o o o o o | Source . Path | o o o o o o o o o o | Source . Path | |||
| o o o o o o o o o | Route . From | o o o o o o o o o | Route . From | |||
| o o o o o o o o | Path . Root | o o o o o o o o | Path . Root | |||
| o o o o o target V . To | o o o o o Target V . To | |||
| o o o o | Desti- | o o o o | Desti- | |||
| o o o o | nation | o o o o | nation | |||
| destination V | destination V | |||
| LLN | LLN | |||
| Figure 2: Projecting a Non-Storing Route | Figure 5: 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. In | |||
| order to avoid those loops, if the router that installs a P-route | order to avoid those loops, if the router that installs a Projected | |||
| does not have a connected route (a direct adjacency) to the next | Route does not have a connected route (a direct adjacency) to the | |||
| soure routed hop and fails to locate it as a neighbor or a neighbor | next soure routed hop and fails to locate it as a neighbor or a | |||
| of a neighbor, then it MUST ensure that it has another P-Route to the | neighbor of a neighbor, then it MUST ensure that it has another | |||
| next loose hop under the control of the same route computation | Projected Route to the next loose hop under the control of the same | |||
| system, otherwise the P-DAO is rejected. | 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 target, the router inserts | determines that routing happens via the Target, the router inserts | |||
| the source routing header in the packet to reach the target. In the | the source routing header in the packet to reach the Target. In the | |||
| case of a loose source-routed path, there MUST be either a neighbor | 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 packet s | that is adjacent to the loose next hop, on which case the packet s | |||
| forwarded to that neighbor, or a source-routed path to the loose next | forwarded to that neighbor, or a source-routed path to the loose next | |||
| hop; in the latter case, another encapsulation takes place and the | hop; in the latter case, another encapsulation takes place and the | |||
| process possibly recurses; otherwise the packet is dropped. | process possibly recurses; otherwise the packet is dropped. | |||
| In order to add a source-routing header, the router encapsulates the | In order to add a source-routing header, the router encapsulates the | |||
| packet with an IP-in-IP header and a non-storing mode source routing | packet with an IP-in-IP header and a non-storing mode source routing | |||
| header (SRH) [RFC6554]. In the uncompressed form the source of the | header (SRH) [RFC6554]. In the uncompressed form the source of the | |||
| packet would be self, the destination would be the first Via Address | packet would be self, the destination would be the first Via Address | |||
| in the SRVIO, and the SRH would contain the list of the remaining Via | in the SRVIO, and the SRH would contain the list of the remaining Via | |||
| Addresses and then the target. | Addresses and then the Target. | |||
| In practice, the router will normally use the "IPv6 over Low-Power | In practice, the router will normally use the "IPv6 over Low-Power | |||
| Wireless Personal Area Network (6LoWPAN) Paging Dispatch" [RFC8025] | Wireless Personal Area Network (6LoWPAN) Paging Dispatch" [RFC8025] | |||
| to compress the RPL artifacts as indicated in the "6LoWPAN Routing | to compress the RPL artifacts as indicated in [RFC8138]. In that | |||
| Header" [RFC8138] specification. In that case, the router indicates | case, the router indicates self as encapsulator in an IP-in-IP 6LoRH | |||
| self as encapsulator in an IP-in-IP 6LoRH Header, and places the list | Header, and places the list of Via Addresses in the order of the VIO | |||
| of Via Addresses in the order of the VIO and then the target in the | and then the Target in the SRH 6LoRH Header. | |||
| SRH 6LoRH Header. | ||||
| +-+ ... -+-+ ... +-+- ... -+-+- ... -+-+-+- ... -+-+ ... | ||||
| |11110001|SRH-6LoRH| ERPI- | IP-in-IP Encap | NH=1 |11110CPP| | ||||
| |Page 1 |Type1 S=2| 6LoRH | 6LoRH sulator |LOWPAN_IPHC| UDP | | ||||
| +-+ ... -+-+ ... +-+- ... -+-+- ... -+-+-+- ... -+-+ ... | ||||
| <-RFC8138-><-This-><----RFC 8138----><-----RFC 6282-------> | ||||
| RFC 5 to 19 bytes No RPL artifact | ||||
| Figure 3: Example Compressed Packet with SRH. | ||||
| 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 [RFC6550]. Upon this message, the | in section 11.2.2.3. of [RFC6550]. Upon this message, the | |||
| encapsulating node SHOULD stop using the source route path for a | encapsulating node SHOULD stop using the source route path for a | |||
| period of time and it SHOULD send an ICMP message with a Code "Error | period of time and it SHOULD send an ICMP message with a Code "Error | |||
| in Projected Route" to the root. Failure to follow these steps may | in Projected Route" to the Root. Failure to follow these steps may | |||
| result in packet loss and wasted resources along the source route | result in packet loss and wasted resources along the source route | |||
| path that is broken. | path that is broken. | |||
| 3.4.2. Storing-Mode P-Route | 6.2. Storing-Mode Projected Route | |||
| As illustrated in Figure 4, the Storing Mode projected iq used by the | As illustrated in Figure 6, the Storing Mode route projection is used | |||
| root to install a routing state towards a target in the routers along | by the Root to install a routing state towards a Target in the | |||
| a segment between an ingress and an egress router; this enables the | routers along a segment between an ingress and an egress router; this | |||
| routers to forward along that segment any packet for which the next | enables the routers to forward along that segment any packet for | |||
| loose hop is the said target, for instance a loose source routed | which the next loose hop is the said Target, for Instance a loose | |||
| packet for which the next loose hop is the target, or a packet for | source routed packet for which the next loose hop is the Target, or a | |||
| which the router has a routing state to the final destination via the | packet for which the router has a routing state to the final | |||
| target. | destination via the Target. | |||
| ------+--------- | ------+--------- | |||
| | 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 4: Projecting a route | Figure 6: 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 | between an ingress and an egress routers, the Root sends a unicast | |||
| P-DAO message to the egress router of the routing segment that must | P-DAO message to the egress router of the routing segment that must | |||
| be installed. The P-DAO message contains the ordered list of hops | be installed. The P-DAO message contains the ordered list of hops | |||
| along the segment as a direct sequence of Via Information options | along the segment as a direct sequence of Via Information options | |||
| that are preceded by one or more RPL Target options to which they | that are preceded by one or more RPL Target options to which they | |||
| relate. Each Via Information option contains a Path Lifetime for | relate. Each Via Information option contains a Path Lifetime for | |||
| which the state is to 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 Via Address in | In that P-DAO, the destination IP address matches the Via Address in | |||
| the last VIO. This is how the egress recognizes its role. In a | the last VIO. This is how the egress recognizes its role. In a | |||
| similar fashion, the ingress node recognizes its role as it matches | similar fashion, the ingress node recognizes its role as it matches | |||
| Via Address in the first VIO. | Via Address in the first 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. It may either be | |||
| the target, or may have some existing information to reach the | the Target, or may have some existing information to reach the | |||
| target(s), such as a connected route or an already installed P-Route. | Target(s), such as a connected route or an already installed | |||
| If one of the targets cannot be located, the node MUST answer to the | Projected Route. If one of the Targets cannot be located, the node | |||
| root with a negative DAO-ACK listing the target(s) that could not be | MUST answer to the Root with a negative DAO-ACK listing the Target(s) | |||
| located (suggested status 10 to be confirmed by IANA). | 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 Information option the | |||
| precedes the one that contain the address of the propagating node, | precedes the one that contain the address of the propagating node, | |||
| which is used as source of the packet. | which is used as source of the packet. | |||
| Upon receiving a propagated DAO, an intermediate router as well as | Upon receiving a propagated DAO, an intermediate router as well as | |||
| the ingress router install a route towards the DAO target(s) via its | the ingress router install a route towards the DAO Target(s) via its | |||
| successor in the P-DAO; the router locates the VIO that contains its | successor in the P-DAO; the router locates the VIO that contains its | |||
| address, and uses as next hop the address found in the Via Address | address, and uses as next hop the address found in the Via Address | |||
| field in the following VIO. The router MAY install additional routes | field in the following VIO. The router MAY install additional routes | |||
| towards the addresses that are located in VIOs that are after the | towards the addresses that are located in VIOs that are after the | |||
| next one, if any, but in case of a conflict or a lack of resource, a | next one, if any, but in case of a conflict or a lack of resource, a | |||
| route to a target installed by the root has precedence. | route to a Target installed by the Root has precedence. | |||
| The process recurses till the P-DAO is propagated to ingress router | The process recurses till the P-DAO is propagated to ingress router | |||
| of the segment, which answers with a DAO-ACK to the root. | of the segment, which answers with a DAO-ACK to the Root. | |||
| Also, the path indicated in a P-DAO may be loose, in which case the | Also, the path indicated in a P-DAO may be loose, in which case the | |||
| reachability to the next hop has to be asserted. Each router along | reachability to the next hop has to be asserted. Each router along | |||
| the path indicated in a P-DAO is expected to be able to reach its | 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 | successor, either with a connected route (direct neighbor), or by | |||
| routing, for instance following a route installed previously by a DAO | 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 | 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 | 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 | 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 | router in the P-DAO, the router MUST answer to the Root with a | |||
| negative DAO-ACK indicating the successor that is unreachable | negative DAO-ACK indicating the successor that is unreachable | |||
| (suggested status 11 to be confirmed by IANA). | (suggested status 11 to be confirmed by IANA). | |||
| A Path Lifetime of 0 in a Via Information option is used to clean up | A Path 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 is | 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 | 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 P-Route, the node | In case of a forwarding error along a Storing Mode Projected Route, | |||
| that fails to forward SHOULD send an ICMP error with a code "Error in | the node that fails to forward SHOULD send an ICMP error with a code | |||
| Projected Route" to the root. Failure to do so may result in packet | "Error in Projected Route" to the Root. Failure to do so may result | |||
| loss and wasted resources along the P-Route that is broken. | in packet loss and wasted resources along the Projected Route that is | |||
| broken. | ||||
| 4. Extending RFC 8138 | ||||
| 4.1. Elective RPI 6LoRH | ||||
| [RFC8138] defines a Critical 6LoRH to compress the RPL RPI found in | ||||
| normal packets inside a RPL domain, the RPI-6LoRH. | ||||
| this specification introduces the ERPI-6LoRH header that MUST be used | ||||
| to compress the RPI in packets that follow a projected route. As | ||||
| discussed in Section 3.3, the Rank and the O, R, anf F flags are | ||||
| always set to 0 and can be elided. The new P flag is always set and | ||||
| can also be elided. It results that in general only the RPL | ||||
| InstanceID is necessary in the compressed form. | ||||
| This specification adds an optimization whereby the local | ||||
| RPLInstanceID 0 for the source of the packet (the encapsulator when | ||||
| using IP in IP) can be elided. This is the case where the | ||||
| RPLInstanceID is encoded as binary b10000000, decimal 128, in the | ||||
| non-compressed form. | ||||
| The ERPI-6LoRH header is Elective since it does not contain | ||||
| information that is critical to the routing and it can be ignored | ||||
| when not understood. The resulting format is illustrated in Figure 5 | ||||
| below: | ||||
| 0 1 2 | ||||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| |1|0|1| Length | 6LoRH Type 5 | RPLInstanceID | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Figure 5: A ERPI-6LoRH carrying a RPLInstanceID | ||||
| The ERPI-6LoRH header is identifies by a 6LoRH Type of 5 (to be | ||||
| confirmed by IANA), which is the same value as the RPI-6LoRH but in | ||||
| the Elective namespace.If the RPLInstanceID is a local RPLInstanceID | ||||
| 0 for the source of the packet then it MUST be elided and the length | ||||
| MUST be set to 0. Else the length MUST be set to 1 to indicate that | ||||
| the ERPI-6LoRH carries a RPLinstanceID. | ||||
| 5. Extending RFC 6553 | ||||
| 5.1. Uncompressed RPL Option | ||||
| [RFC6553] defines a format for the RPI that is suitable for | ||||
| transporting in the IPv6 Hop-by-Hop Header [RFC8200]. This | ||||
| specification introduces a new flag in the RPI that must be encoded | ||||
| in any format includeing uncompressed. | ||||
| The updated format for the RPL Option is presented in Figure 6. | ||||
| 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 | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | Option Type | Opt Data Len | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| |O|R|F|P|0|0|0|0| RPLInstanceID | SenderRank | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | (sub-TLVs) | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Figure 6: RPL Option | ||||
| New fields: | ||||
| P: 1-bit flag; indicates that the packet is routed along | ||||
| a projected route. | ||||
| 6. Security Considerations | 7. Security Considerations | |||
| This draft uses messages that are already present in RPL [RFC6550] | This draft uses messages that are already present in RPL [RFC6550] | |||
| with optional secured versions. The same secured versions may be | with optional secured versions. The same secured versions may be | |||
| used with this draft, and whatever security is deployed for a given | used 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? | |||
| 7. IANA Considerations | 8. IANA Considerations | |||
| 7.1. New Elective 6LoWPAN Routing Header Type | ||||
| This specification assigns a new value (to be confirmed by IANA) in | ||||
| the Elective 6LoWPAN Routing Header Type Registry created for RFC | ||||
| 8138 as below: | ||||
| +---------------+-------------+----------------+ | ||||
| | Value | Meaning | Defining Spec | | ||||
| +---------------+-------------+----------------+ | ||||
| | 5 (suggested) | ERPI-6LoRH | This document | | ||||
| +---------------+-------------+----------------+ | ||||
| Table 1: New Elective 6LoWPAN Routing Header Type | ||||
| 7.2. New RPL Control Codes | 8.1. New RPL Control Codes | |||
| This document extends the IANA registry created by RFC 6550 for RPL | This document extends the IANA registry created by RFC 6550 for RPL | |||
| Control Codes as follows: | Control Codes as follows: | |||
| +------+-------------------+---------------+ | +------+--------------------------------------+---------------+ | |||
| | Code | Description | Reference | | | Code | Description | Reference | | |||
| +------+-------------------+---------------+ | +======+======================================+===============+ | |||
| | 0x0A | Via | This document | | | 0x0A | Via Information option | This document | | |||
| | | | | | +------+--------------------------------------+---------------+ | |||
| | 0x0B | Source-Routed Via | This document | | | 0x0B | Source-Routed Via Information option | This document | | |||
| +------+-------------------+---------------+ | +------+--------------------------------------+---------------+ | |||
| RPL Control Codes | Table 1: RPL Control Codes | |||
| This document is updating the registry created by RFC 6550 for the | This document is updating the registry created by RFC 6550 for the | |||
| RPL 3-bit Mode of Operation (MOP) as follows: | RPL 3-bit Mode of Operation (MOP) as follows: | |||
| +-----------+----------------------------------------+--------------+ | +-----------+-------------------------------+-----------+ | |||
| | MOP value | Description | Reference | | | MOP value | Description | Reference | | |||
| +-----------+----------------------------------------+--------------+ | +===========+===============================+===========+ | |||
| | 5 | Non-Storing mode of operation with | This | | | 5 | Non-Storing mode of operation | This | | |||
| | | P-Routes | document | | | | with Projected Routes | document | | |||
| | | | | | +-----------+-------------------------------+-----------+ | |||
| | 6 | Storing mode of operation with | This | | | 6 | Storing mode of operation | This | | |||
| | | P-Routes | document | | | | with Projected Routes | document | | |||
| +-----------+----------------------------------------+--------------+ | +-----------+-------------------------------+-----------+ | |||
| DIO Mode of operation | Table 2: DIO Mode of operation | |||
| 7.3. Error in Projected Route ICMPv6 Code | 8.2. 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 P-Route. This ICMPv6 error message is | cannot be forwarded along a Projected Route. This ICMPv6 error | |||
| "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. | |||
| 8. Acknowledgments | 9. Acknowledgments | |||
| The authors wish to acknowledge JP Vasseur and Patrick Wetterwald for | ||||
| their contributions to the ideas developed here. | ||||
| 9. References | The authors wish to acknowledge JP Vasseur, James Pylakutty and | |||
| Patrick Wetterwald for their contributions to the ideas developed | ||||
| here. | ||||
| 9.1. Normative References | 10. 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>. | |||
| [RFC6550] Winter, T., Ed., Thubert, P., Ed., Brandt, A., Hui, J., | [RFC6550] 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>. | |||
| [RFC6552] Thubert, P., Ed., "Objective Function Zero for the Routing | ||||
| Protocol for Low-Power and Lossy Networks (RPL)", | ||||
| RFC 6552, DOI 10.17487/RFC6552, March 2012, | ||||
| <https://www.rfc-editor.org/info/rfc6552>. | ||||
| [RFC6553] Hui, J. and JP. Vasseur, "The Routing Protocol for Low- | ||||
| Power and Lossy Networks (RPL) Option for Carrying RPL | ||||
| Information in Data-Plane Datagrams", RFC 6553, | ||||
| DOI 10.17487/RFC6553, March 2012, | ||||
| <https://www.rfc-editor.org/info/rfc6553>. | ||||
| [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, | |||
| DOI 10.17487/RFC6554, March 2012, | DOI 10.17487/RFC6554, March 2012, | |||
| <https://www.rfc-editor.org/info/rfc6554>. | <https://www.rfc-editor.org/info/rfc6554>. | |||
| [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>. | |||
| [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>. | |||
| [RFC8200] Deering, S. and R. Hinden, "Internet Protocol, Version 6 | 11. Informative References | |||
| (IPv6) Specification", STD 86, RFC 8200, | ||||
| DOI 10.17487/RFC8200, July 2017, | ||||
| <https://www.rfc-editor.org/info/rfc8200>. | ||||
| 9.2. Informative References | ||||
| [I-D.ietf-6tisch-architecture] | ||||
| Thubert, P., "An Architecture for IPv6 over the TSCH mode | ||||
| of IEEE 802.15.4", draft-ietf-6tisch-architecture-20 (work | ||||
| in progress), March 2019. | ||||
| [I-D.ietf-detnet-architecture] | ||||
| Finn, N., Thubert, P., Varga, B., and J. Farkas, | ||||
| "Deterministic Networking Architecture", draft-ietf- | ||||
| detnet-architecture-13 (work in progress), May 2019. | ||||
| [PCE] IETF, "Path Computation Element", | [RFC7102] Vasseur, JP., "Terms Used in Routing for Low-Power and | |||
| <https://datatracker.ietf.org/doc/charter-ietf-pce/>. | Lossy Networks", RFC 7102, DOI 10.17487/RFC7102, January | |||
| 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>. | |||
| [RFC7102] Vasseur, JP., "Terms Used in Routing for Low-Power and | [6TiSCH-ARCHI] | |||
| Lossy Networks", RFC 7102, DOI 10.17487/RFC7102, January | Thubert, P., "An Architecture for IPv6 over the TSCH mode | |||
| 2014, <https://www.rfc-editor.org/info/rfc7102>. | of IEEE 802.15.4", Work in Progress, Internet-Draft, | |||
| draft-ietf-6tisch-architecture-27, 18 October 2019, | ||||
| <https://tools.ietf.org/html/draft-ietf-6tisch- | ||||
| architecture-27>. | ||||
| [RAW-PS] Thubert, P. and G. Papadopoulos, "Reliable and Available | ||||
| Wireless Problem Statement", Work in Progress, Internet- | ||||
| Draft, draft-pthubert-raw-problem-statement-04, 23 October | ||||
| 2019, <https://tools.ietf.org/html/draft-pthubert-raw- | ||||
| problem-statement-04>. | ||||
| [RFC8655] Finn, N., Thubert, P., Varga, B., and J. Farkas, | ||||
| "Deterministic Networking Architecture", RFC 8655, | ||||
| DOI 10.17487/RFC8655, October 2019, | ||||
| <https://www.rfc-editor.org/info/rfc8655>. | ||||
| [PCE] IETF, "Path Computation Element", November 2019, | ||||
| <https://datatracker.ietf.org/doc/charter-ietf-pce/>. | ||||
| Appendix A. Applications | Appendix A. Applications | |||
| A.1. Loose Source Routing in Non-storing Mode | A.1. Loose Source Routing in Non-storing Mode | |||
| 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 7. | uses the Non-Storing Mode of Operation as represented in Figure 7. | |||
| In that mode, a RPL node indicates a parent-child relationship to the | In that mode, a RPL node indicates a parent-child relationship to the | |||
| root, using a Destination Advertisement Object (DAO) that is unicast | Root, using a Destination Advertisement Object (DAO) that is unicast | |||
| from the node directly to the root, and the root typically builds a | from the node directly to the Root, and the Root typically builds a | |||
| source routed path to a destination down the DODAG by recursively | source routed path to a destination down the DODAG by recursively | |||
| concatenating this information. | concatenating this information. | |||
| ------+--------- | ------+--------- | |||
| | Internet | | Internet | |||
| | | | | |||
| +-----+ | +-----+ | |||
| | | Border Router | | | Border Router | |||
| | | (RPL Root) | | | (RPL Root) | |||
| +-----+ ^ | | | +-----+ ^ | | | |||
| skipping to change at page 18, line 36 ¶ | skipping to change at page 21, line 8 ¶ | |||
| o o o o o o o o o | | | Source | o o o o o o o o o | | | Source | |||
| o o o o o o o o o o | | | Route | o o o o o o o o o o | | | Route | |||
| o o o o o o o o o | | | | o o o o o o o o o | | | | |||
| o o o o o o o o | v v | o o o o o o o o | v v | |||
| o o o o | o o o o | |||
| LLN | LLN | |||
| Figure 7: RPL non-storing mode of operation | Figure 7: RPL non-storing mode of operation | |||
| Based on the parent-children relationships expressed in the non- | Based on the parent-children relationships expressed in the non- | |||
| storing DAO messages,the root possesses topological information about | storing DAO messages,the Root possesses topological information about | |||
| the whole network, though this information is limited to the | the whole network, though this information is limited to the | |||
| structure of the DODAG for which it is the destination. A packet | structure of the DODAG for which it is the destination. A packet | |||
| that is generated within the domain will always reach the root, which | that is generated within the domain will always reach the Root, which | |||
| can then apply a source routing information to reach the destination | can then apply a source routing information to reach the destination | |||
| if the destination is also in the DODAG. Similarly, a packet coming | if the destination is also in the DODAG. Similarly, a packet coming | |||
| from the outside of the domain for a destination that is expected to | from the outside of the domain for a destination that is expected to | |||
| be in a RPL domain reaches the root. | be in a RPL domain reaches the Root. | |||
| It results that the root, or then some associated centralized | It results that the Root, or then some associated centralized | |||
| computation engine such as a PCE, can determine the amount of packets | computation engine such as a PCE, can determine the amount of packets | |||
| that reach a destination in the RPL domain, and thus the amount of | that reach a destination in the RPL domain, and thus the amount of | |||
| energy and bandwidth that is wasted for transmission, between itself | energy and bandwidth that is wasted for transmission, between itself | |||
| and the destination, as well as the risk of fragmentation, any | and the destination, as well as the risk of fragmentation, any | |||
| potential delays because of a paths longer than necessary (shorter | potential delays because of a paths longer than necessary (shorter | |||
| paths exist that would not traverse the root). | paths exist that would not traverse the Root). | |||
| As a network gets deep, the size of the source routing header that | As a network gets deep, the size of the source routing header that | |||
| the root must add to all the downward packets becomes an issue for | the Root must add to all the downward packets becomes an issue for | |||
| nodes that are many hops away. In some use cases, a RPL network | nodes that are many hops away. In some use cases, a RPL network | |||
| forms long lines and a limited amount of well-targeted routing state | forms long lines and a limited amount of well-Targeted routing state | |||
| would allow to make the source routing operation loose as opposed to | would allow to make the source routing operation loose as opposed to | |||
| strict, and save packet size. Limiting the packet size is directly | strict, and save packet size. Limiting the packet size is directly | |||
| beneficial to the energy budget, but, mostly, it reduces the chances | beneficial to the energy budget, but, mostly, it reduces the chances | |||
| of frame loss and/or packet fragmentation, which is highly | of frame loss and/or packet fragmentation, which is highly | |||
| detrimental to the LLN operation. Because the capability to store a | detrimental to the LLN operation. Because the capability to store a | |||
| routing state in every node is limited, the decision of which route | routing state in every node is limited, the decision of which route | |||
| is installed where can only be optimized with a global knowledge of | is installed where can only be optimized with a global knowledge of | |||
| the system, a knowledge that the root or an associated PCE may | the system, a knowledge that the Root or an associated PCE may | |||
| possess by means that are outside of the scope of this specification. | possess by means that are outside of the scope of this specification. | |||
| This specification enables to store source-routed or storing mode | This specification enables to store source-routed or storing mode | |||
| state in intermediate routers, which enables to limit the excursion | state in intermediate routers, which enables to limit the excursion | |||
| of the source route headers in deep networks. Once a P-DAO exchange | of the source route headers in deep networks. Once a P-DAO exchange | |||
| has taken place for a given target, if the root operates in non | has taken place for a given Target, if the Root operates in non | |||
| storing mode, then it may elide the sequence of routers that is | storing mode, then it may elide the sequence of routers that is | |||
| installed in the network from its source route headers to destination | installed in the network from its source route headers to destination | |||
| that are reachable via that target, and the source route headers | that are reachable via that Target, and the source route headers | |||
| effectively become loose. | effectively become loose. | |||
| A.2. Transversal Routes in storing and non-storing modes | A.2. Transversal Routes in storing and non-storing modes | |||
| 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 8: | illustrated in Figure 8: | |||
| o 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 a | |||
| Routing Header that has the strict source route information down | Routing Header that has the strict source route information down | |||
| the DODAG to the destination. This will be the case even if the | the DODAG to the destination. This will be the case even if the | |||
| destination is relatively close to the source and the root is | destination is relatively close to the source and the Root is | |||
| relatively far off. | relatively far off. | |||
| o In storing mode, unless the destination is a child of the source, | * In storing mode, unless the destination is a child of the source, | |||
| the packets will follow the default route up the DODAG as well. | the packets will follow the default route up the DODAG as well. | |||
| 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. | |||
| ------+--------- | ------+--------- | |||
| | Internet | | Internet | |||
| | | | | |||
| +-----+ | +-----+ | |||
| | | Border Router | | | Border Router | |||
| | | (RPL Root) | | | (RPL Root) | |||
| skipping to change at page 21, line 18 ¶ | skipping to change at page 23, line 42 ¶ | |||
| 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 | Appendix B. Examples | |||
| B.1. Using storing mode P-DAO in non-storing mode MOP | B.1. Using storing mode P-DAO in non-storing mode MOP | |||
| In non-storing mode, the DAG root maintains the knowledge of the | In non-storing mode, the DAG Root maintains the knowledge of the | |||
| whole DODAG topology, so when both the source and the destination of | 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 | 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 | 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 | in the path between the common parent and the destination. For | |||
| instance in the diagram shown in Figure 10, if the source is node 41 | Instance in the diagram shown in Figure 10, if the source is node 41 | |||
| and the destination is node 52, then the common parent is node 22. | and the destination is node 52, then the common parent is node 22. | |||
| ------+--------- | ------+--------- | |||
| | Internet | | Internet | |||
| | | | | |||
| +-----+ | +-----+ | |||
| | | Border Router | | | Border Router | |||
| | | (RPL Root) | | | (RPL Root) | |||
| +-----+ | +-----+ | |||
| | \ \____ | | \ \____ | |||
| skipping to change at page 21, line 47 ¶ | skipping to change at page 24, line 26 ¶ | |||
| o 22 o 23 o 24 o 25 | o 22 o 23 o 24 o 25 | |||
| / \ | \ \ | / \ | \ \ | |||
| o 31 o 32 o o o 35 | o 31 o 32 o o o 35 | |||
| / / | \ | \ | / / | \ | \ | |||
| o 41 o 42 o o o 45 o 46 | o 41 o 42 o o o 45 o 46 | |||
| | | | | \ | | | | | | \ | | |||
| o 51 o 52 o 53 o o 55 o 56 | o 51 o 52 o 53 o o 55 o 56 | |||
| LLN | LLN | |||
| Figure 10: Example DODAG forming a logical tree topology | Figure 10: Example DODAG forming a logical tree topology | |||
| With this draft, the root can install a storing mode routing states | With this draft, the Root can install a storing mode routing states | |||
| along a segment that is either from itself to the destination, or | along a segment that is either from itself to the destination, or | |||
| from one or more common parents for a particular source/destination | from one or more common parents for a particular source/destination | |||
| pair towards that destination (in this particular example, this would | pair towards that destination (in this particular example, this would | |||
| be the segment made of nodes 22, 32, 42). | be the segment made of nodes 22, 32, 42). | |||
| In the example below, say that there is a lot of traffic to nodes 55 | 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 | 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 | 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 | 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 | 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 | 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 | may then send a DAO to node 35 indicating Targets 55 and 56 a Via | |||
| segment (13, 24, 35) to fully optimize that path. | segment (13, 24, 35) to fully optimize that path. | |||
| Alternatively, the root may send a DAO to node 45 indicating target | 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 | 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 | indicating Target 56 and a Via segment (13, 24, 35, 46), indicating | |||
| the same DAO Sequence. | the same DAO Sequence. | |||
| B.2. Projecting a storing-mode transversal route | B.2. Projecting a storing-mode transversal route | |||
| In this example, say that a PCE determines that a path must be | In this example, say that a PCE determines that a path must be | |||
| installed between node S and node D via routers A, B and C, in order | installed between node S and node D via routers A, B and C, in order | |||
| to serve the needs of a particular application. | to serve the needs of a particular application. | |||
| The root sends a P-DAO with a target option indicating the | The Root sends a P-DAO with a Target option indicating the | |||
| destination D and a sequence Via Information option, one for S, which | destination D and a sequence Via Information option, one for S, which | |||
| is the ingress router of the segment, one for A and then for B, which | is the ingress router of the segment, one for A and then for B, which | |||
| are an intermediate routers, and one for C, which is the egress | are an intermediate routers, and one for C, which is the egress | |||
| router. | router. | |||
| ------+--------- | ------+--------- | |||
| | Internet | | Internet | |||
| | | | | |||
| +-----+ | +-----+ | |||
| | | Border Router | | | Border Router | |||
| skipping to change at page 22, line 49 ¶ | skipping to change at page 25, line 27 ¶ | |||
| +-----+ | +-----+ | |||
| | P-DAO message to C | | 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 | |||
| 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 | o o V o o o o o o | |||
| S A B C D o o o | S A B C D o o o | |||
| o o o o | o o o o | |||
| LLN | LLN | |||
| Figure 11: P-DAO from root | Figure 11: P-DAO from Root | |||
| Upon reception of the P-DAO, C validates that it can reach D, e.g. | 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 | using IPv6 Neighbor Discovery, and if so, propagates the P-DAO | |||
| unchanged to B. | unchanged to B. | |||
| B checks that it can reach C and of so, installs a route towards D | 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. | via C. Then it propagates the P-DAO to A. | |||
| The process recurses till the P-DAO reaches S, the ingress of the | 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 | segment, which installs a route to D via A and sends a DAO-ACK to the | |||
| root. | Root. | |||
| ------+--------- | ------+--------- | |||
| | Internet | | Internet | |||
| | | | | |||
| +-----+ | +-----+ | |||
| | | Border Router | | | Border Router | |||
| | | (RPL Root) | | | (RPL Root) | |||
| +-----+ | +-----+ | |||
| ^ P-DAO-ACK from S | ^ 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 o o | | o o o o o o o o o | |||
| | o o o o o o o o | | o o o o o o o o | |||
| S A B C D o o o | S A B C D o o o | |||
| o o o o | o o o o | |||
| LLN | LLN | |||
| Figure 12: P-DAO-ACK to root | Figure 12: P-DAO-ACK to Root | |||
| As a result, a transversal route is installed that does not need to | As a result, a transversal route is installed that does not need to | |||
| follow the DODAG structure. | follow the DODAG structure. | |||
| ------+--------- | ------+--------- | |||
| | Internet | | Internet | |||
| | | | | |||
| +-----+ | +-----+ | |||
| | | Border Router | | | Border Router | |||
| | | (RPL Root) | | | (RPL Root) | |||
| +-----+ | +-----+ | |||
| | | | | |||
| o o o o | o o o o | |||
| o o o o o o o o o | o o o o o o o o o | |||
| o o o o o o o o o o | o o o o o o o o o o | |||
| o o o o o o o o o | o o o o o o o o o | |||
| S>>A>>>B>>C>>>D o o o | S>>A>>>B>>C>>>D o o o | |||
| o o o o | o o o o | |||
| LLN | LLN | |||
| Figure 13: Projected Transversal Route | Figure 13: Projected Transversal Route | |||
| Authors' Addresses | Authors' Addresses | |||
| Pascal Thubert (editor) | Pascal Thubert (editor) | |||
| Cisco Systems | Cisco Systems, Inc | |||
| Village d'Entreprises Green Side | Building D, 45 Allee des Ormes - BP1200 | |||
| 400, Avenue de Roumanille | 06254 Mougins - Sophia Antipolis | |||
| Batiment T3 | France | |||
| Biot - Sophia Antipolis 06410 | ||||
| FRANCE | ||||
| Phone: +33 4 97 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, Karnataka 560037 | Bangalore 560037 | |||
| Karnataka | ||||
| India | India | |||
| Phone: +91-080-49160700 | Phone: +91-080-49160700 | |||
| Email: rahul.ietf@gmail.com | Email: rahul.ietf@gmail.com | |||
| Matthew Gillmore | Matthew Gillmore | |||
| Itron, Inc | Itron, Inc | |||
| Building D | Building D, 2111 N Molter Road | |||
| 2111 N Molter Road | Liberty Lake, 99019 | |||
| Liberty Lake 99019 | ||||
| United States | United States | |||
| Phone: +1.800.635.5461 | Phone: +1.800.635.5461 | |||
| Email: matthew.gillmore@itron.com | Email: matthew.gillmore@itron.com | |||
| James Pylakutty | ||||
| Cisco Systems | ||||
| Cessna Business Park | ||||
| Kadubeesanahalli | ||||
| Marathalli ORR | ||||
| Bangalore, Karnataka 560087 | ||||
| INDIA | ||||
| Phone: +91 80 4426 4140 | ||||
| Email: mundenma@cisco.com | ||||
| End of changes. 133 change blocks. | ||||
| 464 lines changed or deleted | 581 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/ | ||||