ROLL P. Thubert, Ed. Internet-Draft Cisco SystemsUpdates: 6554 (if approved) R.A. JadhavIntended status: Standards TrackHuawei TechR.A. Jadhav Expires:28 January25 March 2022 Huawei Tech M. Gillmore Itron27 July21 September 2021 Root initiated routing state in RPLdraft-ietf-roll-dao-projection-19draft-ietf-roll-dao-projection-20 Abstract This document extends RFC6550 and6550, RFC65536553,and RFC 8138 to enable a RPL Root to install and maintain Projected Routes within its DODAG, along a selected set of nodes that may or may not include self, for a chosen duration. This potentially enables routes that are more optimized or resilient than those obtained with the classical distributed operation of RPL, either in terms of the size of a Routing Header or in terms of path length, which impacts both the latency and the packet delivery ratio. Status of This Memo This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet- Drafts is at https://datatracker.ietf.org/drafts/current/. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress." This Internet-Draft will expire on28 January25 March 2022. Copyright Notice Copyright (c) 2021 IETF Trust and the persons identified as the document authors. All rights reserved. This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/ license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License. Table of Contents 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . .54 2.1. Requirements Language . . . . . . . . . . . . . . . . . .54 2.2.Glossary .References . . . . . . . . . . . . . . . . . . . . . . .54 2.3.Other TermsGlossary . . . . . . . . . . . . . . . . . . . . . . .6 2.4. References. 4 2.4. Domain Terms . . . . . . . . . . . . . . . . . . . . . .65 3.Extending RFC 6550Context and Goal . . . . . . . . . . . . . . . . . . . . . . 6 3.1.Projected DAO . .RPL Applicability . . . . . . . . . . . . . . . . . . . . 7 3.2.Sibling Information OptionRPL Routing Modes . . . . . . . . . . . . . . . . . . . . 8 3.3.P-DAO RequestOn Tracks . . . . . . . . . . . . . . . . . . . . . . . . 9 3.4.Extending the RPISerial Track Signaling . . . . . . . . . . . . . . . . . 10 3.4.1. Using Storing Mode Segments . . . . .9. . . . . . . . 11 3.4.2. Using Non-Storing Mode joining Tracks . . . . . . . . 17 3.5. Complex Tracks . . . . . . . . . . . . . . . . . . . . . 24 3.6. Scope and Expectations . . . . . . . . . . . . . . . . . 26 4. Extending existing RFCs . . . . . . . . . . . . . . . . . . . 28 4.1. Extending RFC65536550 . . . . . . . . . . . . . . . . . . . 28 4.1.1. Projected DAO . .9 5.. . . . . . . . . . . . . . . . . . 28 4.1.2. Via Information Option . . . . . . . . . . . . . . . 30 4.1.3. Sibling Information Option . . . . . . . . . . . . . 30 4.1.4. P-DAO Request . . . . . . . . . . . . . . . . . . . . 30 4.1.5. Extending the RPI . . . . . . . . . . . . . . . . . . 30 4.2. Extending RFC81386553 . . . . . . . . . . . . . . . . . . . 31 4.3. Extending RFC 8138 . . .10 6.. . . . . . . . . . . . . . . . 32 5. New RPL Control Messages and Options . . . . . . . . . . . .11 6.1.33 5.1. New P-DAO Request Control Message . . . . . . . . . . . .11 6.2.33 5.2. New PDR-ACK Control Message . . . . . . . . . . . . . . .12 6.3.34 5.3. Via Information Options . . . . . . . . . . . . . . . . .13 6.4.36 5.4. Sibling Information Option . . . . . . . . . . . . . . .16 7. Projected DAO . . . . . . . .39 6. Root Initiated Routing State . . . . . . . . . . . . . . . .18 7.1.41 6.1. Requesting a Track . . . . . . . . . . . . . . . . . . .19 7.2.41 6.2. Identifying a Track . . . . . . . . . . . . . . . . . . .20 7.3.42 6.3. Installing a Track . . . . . . . . . . . . . . . . . . .21 7.3.1. Storing-Mode P-Route . . .43 6.3.1. Signaling a Projected Route . . . . . . . . . . . . .22 7.3.2. Non-Storing-Mode44 6.3.2. Installing a Track Segment with a Storing Mode P-Route . . . . . . . . . . . . . .24 7.4. Forwarding Along a Track . . . . . . . .. . . . . . . .26 8. Profiles. 45 6.3.3. Installing a Track Leg with a Non-Storing Mode P-Route . . . . . . . . . . . . . . . . . . . . . . . 47 6.4. Tearing Down a P-Route . .27 9. Example Track Signaling. . . . . . . . . . . . . . . 49 6.5. Maintaining a Track . . . .28 9.1. Using Storing-Mode Segments. . . . . . . . . . . . . . .29 9.1.1. Stitched Segments49 6.5.1. Maintaining a Track Segment . . . . . . . . . . . . . 50 6.5.2. Maintaining a Track Leg . . . . .29 9.1.2. External routes. . . . . . . . . . 50 6.6. Encapsulating and Forwarding Along a Track . . . . . . . 51 6.7. Compression of the RPL Artifacts . .31 9.1.3. Segment Routing. . . . . . . . . . 53 7. Lesser Constrained Variations . . . . . . . . .32 9.2. Using Non-Storing-Mode joining Tracks. . . . . . . 55 7.1. Storing Mode Main DODAG . . .34 9.2.1. Stitched Tracks. . . . . . . . . . . . . . 55 7.2. A Track as a Full DODAG . . . . .34 9.2.2. External routes. . . . . . . . . . . . 57 8. Profiles . . . . . . .36 9.2.3. Segment Routing. . . . . . . . . . . . . . . . . . .38 10.58 9. Security Considerations . . . . . . . . . . . . . . . . . . .41 11.60 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . .41 11.1.60 10.1. New Elective 6LoWPAN Routing Header Type . . . . . . . .41 11.2.61 10.2. New Critical 6LoWPAN Routing Header Type . . . . . . . .42 11.3.61 10.3. New Subregistry For The RPL Option Flags . . . . . . . .42 11.4.61 10.4. New RPL Control Codes . . . . . . . . . . . . . . . . .43 11.5.62 10.5. New RPL Control Message Options . . . . . . . . . . . .43 11.6.62 10.6. SubRegistry for the Projected DAO Request Flags . . . .43 11.7.63 10.7. SubRegistry for the PDR-ACK Flags . . . . . . . . . . .44 11.8.63 10.8. Subregistry for the PDR-ACK Acceptance Status Values . .44 11.9.63 10.9. Subregistry for the PDR-ACK Rejection Status Values . .44 11.10.64 10.10. SubRegistry for the Via Information Options Flags . . .45 11.11.64 10.11. SubRegistry for the Sibling Information Option Flags . .45 11.12.65 10.12. NewDestinationdestination Advertisement Object Flag . . . . . . .46 11.13. Error in Projected Route65 10.13. New ICMPv6 Error Code . . . . . . . . . .46 12.. . . . . . . 65 10.14. New RPL Rejection Status values . . . . . . . . . . . . 66 11. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . .46 13.66 12. Normative References . . . . . . . . . . . . . . . . . . . .46 14.66 13. Informative References . . . . . . . . . . . . . . . . . . .4768 Appendix A. Applications . . . . . . . . . . . . . . . . . . . .4970 A.1. Loose Source Routing . . . . . . . . . . . . . . . . . .4970 A.2.TransversalEast-West Routes . . . . . . . . . . . . . . . . . . .51. 72 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . .5273 1. Introduction RPL, the "Routing Protocol for Low Power and Lossy Networks" [RPL] (LLNs), isa generican anisotropic Distance Vector protocol that iswellwell- suited for application in a variety of low energy Internet of Things (IoT)networks.networks where stretched P2P paths are acceptable vs. the signaling and state overhead involved in maintaining shortest paths across. RPL formsDestinationdestination Oriented Directed Acyclic Graphs (DODAGs) in which the Root often acts as the BorderRouterrouter to connect the RPL domain to theInternet. The Root is responsible to select the RPL InstanceIP backbone and routes along thatis used to forward a packet coming from the Internet intograph up, towards theRPL domainRoot, andsetdown towards therelated RPL informationnodes. With this specification, a Path Computation Element [PCE] in an external controller interacts with thepackets. 6TiSCH usesRPLfor its routing operations.Root to compute centrally shorter Peer to Peer (P2P) paths within a pre-existing RPL Main DODAG. The"6TiSCH Architecture" [6TiSCH-ARCHI] also leverages the "Deterministic Networking Architecture" [RFC8655] centralized model whereby the device resources and capabilities are exposedtopological information that is passed toan external controller which installs routing states intothenetwork based on some objective functionsPCE is derived from the DODAG thatresideis already available at the Root in RPL Non-Storing Mode. This specification introduces protocol extensions thatexternal entity. With DetNet and 6TiSCH, the component ofenrich thecontrollertopological information that isresponsible of computing routes is called a Path Computation Element ([PCE]).available at the Root and passed to the PCE. Based onheuristics ofusage, path length, and knowledge ofdevice capacity andavailable resources such as battery levels and reservablebuffers,buffers in the nodes, the PCE with a global visibility on the system cancompute direct Peer to Peer (P2P)optimize the computed routesthat are optimizedfor theneeds expressed by an objective function. This document specifies protocol extensions to RPL [RPL] that enableapplication needs, including theRoot of a main DODAGcapability toinstall centrally-computed routes inside the DODAG on behalf of a PCE.provide path redundancy. This specificationexpects that the main RPL Instance is operated in RPL Non-Storing Mode of Operation (MOP) to sustain the exchanges with the Root. In that Mode, the Root has enough information to build a basic DODAG topology based on parents and children, but lacks the knowledge of siblings. This document adds the capability for nodes to advertise sibling information in order to improve the topological awareness of the Root. As opposed to the classical RPL operations where routes are injected by the Target nodes, thealso introduces protocol extensions that enable the Rootof a DODAGtoproject the routes that are needed onto the nodes where they should be installed. This specification uses the term Projected Route to refer to those routes. Projected Routes can be used to reduce the size of the source routing headers with loose source routing operations downtranslates themaincomputed paths into RPLDODAG. Projected Routes can also be used to build transversal routes for route optimization and Traffic Engineering purposes, between nodes of the DODAG. A Projected Route may be installed in either StoringandNon-Storing Mode, potentially resulting in hybrid situations where the Mode of the Projected Route is different from that of the main RPL Instance. A Projected Route may be a stand-alone end-to-end path or a Segment in a more complex forwarding graph called a Track. The concept of a Track was introduced in the 6TiSCH architecture,install them asa potentially complex path with redundant forwarding solutions along the way. With this specification, a Track is a DODAG formed by a RPL local Instance that is rooted at the Track Ingress. If there is a single Track Egress, then the Track is reversible to form another DODAG by reversing the direction of each edge. A node at the ingress of more than one Segment in a Track may use one or more of these Segments to forward a packet inside the Track. The "Reliable and Available Wireless (RAW) Architecture/Framework" [RAW-ARCHI] defines the Path Selection Engine (PSE) that adapts the use of the path redundancy within a Track to defeat the diverse causes of packet loss. The PSE is a dataplane extension of the PCE; it controls the forwarding operation of the packets within a Track, using Packet ARQ, Replication, Elimination, and Overhearing (PAREO) functions over the Track segments, to provide a dynamic balance between the reliability and availability requirements of the flows and the need to conserve energy and spectrum. The time scale at which the PCE (re)computes the Track can be long, using long-term statistical metrics to perform global optimizations at the scale of the whole network. Conversely, the PSE makes forwarding decisions at the time scale of one or a small collection of packets, based on a knowledge that is limited in scope to the Track itself, so it can be refreshed at a fast pace.Projected Routesmust be used with the parsimony to limit the amount of state that is installed in each device to fit within the device resources, and to maintain the amount of rerouted traffic within the capabilities of the transmission links. The methods used to learn the node capabilities and the resources that are available in the devices and in(aka P-Routes) inside thenetwork are outDODAG on behalf ofscope for this document. This specification uses the RPL Root asaproxy to thePCE.The PCE may be collocated with the Root, or may reside in an external Controller. In that case, the PCE exchanges control messages with the Root over a Southbound API that is out of scope for this specification. The algorithm to compute the paths and the protocol used by an external PCE to obtain the topology of the network from the Root are also out of scope.2. Terminology 2.1. Requirements Language The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119][RFC8174] when, and only when, they appear in all capitals, as shown here. 2.2. References In this document, readers will encounter terms and concepts that are discussed in the "Routing Protocol for Low Power and Lossy Networks" [RPL], the "6TiSCH Architecture" [6TiSCH-ARCHI], the "Deterministic Networking Architecture" [RFC8655], the "Reliable and Available Wireless (RAW) Architecture/Framework" [RAW-ARCHI], and "Terminology in Low power And Lossy Networks" [RFC7102]. 2.3. Glossary This document often uses the following acronyms: CMO: Control Message Option DAO:Destinationdestination Advertisement Object DAG: Directed Acyclic Graph DODAG:Destination-Orienteddestination-Oriented Directed Acyclic Graph; A DAG with only one vertex (i.e., node) that has no outgoing edge (i.e., link) GUA: IPv6 Global Unicast Address LLN: Low-Power and Lossy Network MOP: RPL Mode of Operation P-DAO: Projected DAO P-Route: Projected Route PDR: P-DAO Request RAN: RPL-Aware Node (either a RPLRouterrouter or a RPL-Aware Leaf) RAL: RPL-Aware Leaf RH: Routing Header RPI: RPL Packet Information RTO: RPL Target Option RUL: RPL-Unaware Leaf SIO: RPL Sibling Information OptionSR-VIO:ULA: IPv6 Unique Local Address NSM-VIO: A Source-Routed Via Information Option, used inNon-Storing-Non-Storing Mode P-DAO messages. TIO: RPL Transit Information OptionSF-VIO:SM-VIO: A strict Via Information Option, used inStoring-ModeStoring Mode P-DAO messages. VIO: A Via Information Option; it can be aSF-VIOSM-VIO or anSR-VIO. 2.3. OtherNSM-VIO. 2.4. Domain Terms Projected Route: A RPLProjected RouteP-Route is a RPL route that is computed remotely by a PCE, and installed and maintained by a RPL Root on behalf of the PCE.Segment: A strict sequence of node along which a route is installed. With this specification, a SegmentIt is installedby the Rootas a state that signals that destinations (aka Targets) are reachable along a sequence ofthe main DODAG using Storing-Mode P-DAO messages.nodes. Projected DAO: A DAO message used to install aProjected Route. Track: A DODAGP-Route. Path: Quoting section 1.1.3 of [INT-ARCHI]: "At a given moment, all the IP datagrams from a particular source host to a particular destination host will typically traverse the same sequence of gateways. We use the term "path" for this sequence. Note thatprovidesacomplexpathfrom oris uni-directional; it is not unusual to have different paths in the two directions between a given host pair.". Section 2 of [I-D.irtf-panrg-path-properties] points to aRootlonger, more modern definition of path, which begins as follows: " A sequence of adjacent path elements over which a packet can be transmitted, starting and ending with a node. A path is unidirectional. Paths are time-dependent, i.e., the sequence of path elements over which packets are sent from one node to another may change. A path is defined between two nodes. " It follows that the general acceptance of a path is a linear sequence of nodes, as opposed to a multi-dimensional graph. In thedestinationcontext of this document, a path is observed by following one copy of a packet that is injected in a Track and possibly replicated within. Track: A networking graph that can be followed to transport packets with equivalent treatment; as opposed to theDODAG. The Rootdefinition of a path above, a Track Track is not necessarily linear. It may contain multiple paths that may fork and rejoin, and may enable the RAW Packet ARQ, Replication, Elimination, and Overhearing (PAREO) operations. This specification builds Tracks that are DODAGs oriented towards a Track Ingress, and the forward direction for packets isdown the DODAG,East- West from the Track Ingress to one of the possibly multiple Track EgressNodes.Nodes, which is also down the DODAG. TheDODAGTrack may be strictly connected, meaning that the vertices are adjacent, or loosely connected, meaning that the vertices are connected using Segments that are associated to the same Track.With this specification, a Track is installed by the Root of the main DODAG using Non-Storing-Mode P-DAO messages.TrackID: A RPL Local InstanceIDwiththat identifies a Track using theD bit set to 0.namespace owned ny the Track Ingress. The TrackID is associated with the IPv6 Address of the Track Ingress that is usedto signal the DODAG Root,as DODAGID, and together they form a unique identification of the Track (see the definition of DODAGID in section 2 of [RPL].2.4. References In this document, readers will encounter terms and conceptsSerial Track: A Track thatare discussed in the "Routing Protocol for Low Power and Lossy Networks" [RPL] and "Terminology in Low power And Lossy Networks" [RFC7102]. 3. Extending RFC 6550 3.1. Projected DAO Section 6 of [RPL] introduces the RPL Control Message Options (CMO), includinghas only one path. Stand-Alone: A single P-DAO that fully defines a Track, e.g., a Serial Track installed with a single Storing Mode Via Information option (SM-VIO). subTrack: A Track within a Track. As theRPL Target Option (RTO) and TransitNon-Storing Mode Via InformationOption (TIO), whichoption (NSM-VIO) canbe placed in RPL messages such as the Destination Advertisement Object (DAO). This specification extends the DAO message with the Projected DAO (P-DAO);only signal aP-DAO message signalsloose sequence of nodes, it takes aProjected Routenumber of them toone or more Targets usingsignal a complex Track. Each NSM-VIO for thenew CMOs presented therein. This specification enables to combine one or more Projected Routes intosame TrackId but aDODAG calleddifferent Segment ID signals aTrack,different subTracks thatis traversed to reachtheTargets. TheTrackis assimilated withIngress adds to theDODAG formed fortopology. Track Leg: An end-to-end East-West serial path that can be aLocal RPL Instance. The local RPLInstanceID of theTrack by itself or a subTrack of a complex Track. With this specification, a Leg iscalledis installed by theTrackID, more in Section 7.2. ARoot of the main DODAG using Non-Storing Mode P-DAOmessage formessages, and it is expressed as a loose sequence of nodes that are joined by Tracksignals the TrackID in the RPLInstanceID field. TheSegments. TrackIngressSegment: A serial path formed by a strict sequence of nodes, along which a P-Route issignaled ininstalled. With this specification, a Segment is typically installed by theDODAGID fieldRoot of theProjected DAO Base Object; that field is elided inmain DODAG using Storing Mode P-DAO messages. A Segment used as thecasetopological edge of a Track. Since this specification builds only DODAGs, all Segments are oriented from Ingress (East) to Egress (West), as opposed to themaingeneral RAW model, which allows North/South Segments that can be bidirectional. 3. Context and Goal 3.1. RPLInstance. The Track IngressApplicability RPL is optimized for situations where the power is scarce, theRoot ofbandwidth constrained and theTrack, as shown in Figure 1.transmissions unreliable. Thisspecification definesmatches thenew "Projected DAO" (P) flag. The 'P' flaguse case of an IoT LLN where RPL isencoded in bit position 2 (to be confirmed by IANA)typically used today, but also situations of high relative mobility between theFlags fieldnodes in theDAO Base Object. The Root MUST set it to 1 innetwork (aka swarming), e.g., within aProjected DAO message. Otherwise it MUST be set to 0. It isvariable setto 0 in legacy implementations as specified respectively in Sections 20.11 and 6.4of[RPL]. . 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 |K|D|P| Flags | Reserved | DAOSequence | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | + + | | + IPv6 Addressvehicles with a similar global motion, or a toon of drones. To reach this goal, RPL is primarily designed to minimize theTrack Ingress + | | + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Option(s)... +-+-+-+-+-+-+-+-+ Figure 1: Projected DAO Base Object New fields: TrackID: Incontrol plane activity, that is thecaserelative amount ofa P-DAO,routing protocol exchanges vs. data traffic, and theRPLInstanceID field is called TrackID. Thisamount of state that isa naming convenience butmaintained in each node. RPL does notchange the semanticsneed converge, andformatprovides connectivity to most nodes most of theRPLInstanceID that is used as TrackID. P: 1-bit flag (position totime. RPL may form multiple topologies called instances. Instances can beconfirmed by IANA).created to enforce various optimizations through objective functions, or to reach out through different Root Nodes. The'P' flag is setconcept of objective function allows to1 byadapt theRootactivity of the routing protocol tosignal a Projected DAO,the use case, e.g., type, speed, anditquality of the LLN links. RPL instances operate as ships in the night, unbeknownst of one another. The RPL Root issetresponsible to0 otherwise. In RPL Non-Storing Mode,select theTIO and RTO are combined in a DAO messageRPL Instance that is used toinformforward a packet coming from theDODAG Root of allBackbone into theedgesRPL domain and set the related RPL information in theDODAG, which are formed bypackets. 6TiSCH leverages RPL for its distributed routing operations. To reduce thedirected parent-child relationships. Options may be factorized; multiple RTOs may be present to signalrouting exchanges, RPL leverages an anisotropic Distance Vector approach, which does not need acollectionglobal knowledge ofchildren that can be reached viatheparent(s) indicated intopology, and only optimizes theTIO(s) that followsroutes to and from theRTOs.RPL Root, allowing P2P paths to be stretched. Although RPL installs its routes proactively, it only maintains them lazily, in reaction to actual traffic, or as a slow background activity. Thisspecification generalizesis simple and efficient in situations where thecase of a parent that can be usedtraffic is mostly directed from or toreachachild with thatcentral node, such as the control traffic between routers and a controller of awhole Track through whichSoftware Defined Networking (SDN) infrastructure or an Autonomic Control Plane (ACP). But stretch in P2P routing is counter-productive to bothchildrenreliability andsiblingslatency as it introduces additional delay and chances of loss. As a result, [RPL] is not a good fit for theTrack Egress are reachable. New CMOs calleduse cases listed in theVia Information Options (VIO) are introduced forRAW use cases document [USE-CASES], which demand high availability and reliability, and as a consequence require both short and diverse paths. 3.2. RPL Routing Modes RPL first forms a default route inP-DAO messageseach node towards the a Root, and those routes together coalesce as amultihop alternativeDirected Acyclic Graph upwards. RPL then constructs routes to so-called Targets in theTIO. One VIO is the Stateful VIO (SF-VIO);reverse direction, down theSF-VIO installs Storing-Mode Projected Route alongsame DODAG. So do so, astrict segment.RPL Instance can be operated either in RPL Storing or Non-Storing Mode of Operation (MOP) Theother is the Source- Routed VIO (SR-VIO);default route towards theSR-VIO installsRoot is maintained aggressively and may change while aNon-Storing-Mode Projected Route atpacket progresses without causing loops, so theTrack Ingress, which uses that state to encapsulate apacketwithwill still reach the Root. In Non-Storing Mode, each node advertises itself as aRouting Header (RH)Target directly to theTrack Egress. Like in a DAO message,Root, indicating theRTOs canparents that may befactorized in a P-DAO, butused to reach self. Recursively, theVia Information Options cannot. A P-DAO contains one or more RTOsRoot builds and maintains an image of the whole DODAG in memory, and leverages thatindicateabstraction to compute source route paths for the packets to their destinationsthat can be reached viadown theTrack, and exactly one VIO that signalsDODAG. When asequencenode changes its point(s) ofnodes. In Non-Storing Mode,attachment to the DODAG, it takes single unicast packet to the Rootsendsalong theP-DAOdefault route to update it, and theTrack Ingress where the source- routing stateconnectivity isstored. In Storing Mode, the P-DAOrestored immediately; this mode issent topreferable for use cases where internet connectivity is dominant, or when, like here, theTrack Egress and forwarded alongRoot controls theSegmentnetwork activity in thereverse direction, installing anodes. In StoringMode state toMode, theTrack Egress atrouting information percolates upwards, and eachhop. In both casesnode maintains theTrack Ingress isroutes to theownersubDAG of its descendants down theTrack, and it generatesDODAG. The maintenance is lazy, either reactive upon traffic or as a slow background process. Packets flow via theP-DAO-ACK whencommon parent and theinstallationrouting stretch issuccessful. 3.2. Sibling Information Option This specification adds another CMO calledreduced vs. Non-Storing, for a better P2P connectivity, while theSibling Information Option (SIO) thatinternet connectivity isusedrestored more slowly, time for the DV operation to operate hop-by-hop. Either way, the RPL routes are injected by the Target nodes, in a distributed fashion. To complement RPLAware Node (RAN) to advertise a selection of its candidate neighbors as siblingsand eliminate routing stretch, this specification introduces an hybrid mode that combines Storing and Non-Storing operations to build and project routes onto theRoot, morenodes where they should be installed. This specification uses the term P-Route to refer to those routes. A P-Route may be installed inSection 6.4. The sibling selection process is outeither Storing and Non-Storing Mode, potentially resulting in hybrid situations where the Mode ofscope. The expectationthe P- Route isthat a node reports a Sibling Address in a SIO based on an active address registration [RFC8505]different from thatsibling for that address with the 'R' flag not set inof theEARO. The node may assessRPL Main DODAG. P-Routes can be used as stand-alone segments to reduce thelivelinesssize of thesibling at any time by performingsource routing headers with loose source routing operations down the main RPL DODAG. P-Routes can also be combined with other P-Routes to form aregistration for one of its own addresses, eithermore complex forwarding graph called alink local orTrack. 3.3. On Tracks A Track is typically aglobal one, depending on whether the node expects the siblingcollection of parallel loose source routed sequences of nodes from Ingress toperform a matching advertisementEgress, forming so-called Track Legs, that are joined with strict Segments of other nodes. The Legs are expressed inits own SIO. 3.3. P-DAO Request Two newRPLControl Messages are also introduced,Non-Storing Modes and require an encapsulation toenableadd aRAN to requestSource Route Header, whereas theestablishment of aSegments are expressed in Storing Mode. A Serial Track comprises provides only one path betweenself as the TrackIngressNodeand Egress. It comprises at most one Leg. A Stand-Alone Segment defines implicitly a Serial TrackEgress. The RAN makesfrom itsrequest by sending a new P-DAO Request (PDR) Message to the Root. The Root confirms with a new PDR-ACK message backIngress tothe requester RAN, see Section 6.1 for more.Egress. Apositive PDR-ACK indicates that thecomplex Trackwas built andforms a graph thatthe Roots commitsprovides a collection of potential paths tomaintain the Trackprovide redundancy for thenegotiated lifetime. In the case ofpackets, either as acomplex Track, each Segment is maintained independently and asynchronously by the Root, with its own lifetimecollection of Legs that may beshorter, the same,parallel orlonger than thatcross at certain points, or as a more generic DODAG. The concept of a Track was introduced in theTrack. The Root may use an asynchronous PDR-ACK with an negative status to indicate"6TiSCH Architecture" [6TiSCH-ARCHI], as a collection of potential paths that leverage redundant forwarding solutions along the way. With this specification, a Trackwas terminated before its time. 3.4. Extending the RPI Sendingforms DODAG that is directed towards aPacket withinTrack Ingress. If there is aRPL Local Instance requiressingle Track Egress, then thepresenceTrack is reversible to form another DODAG by reversing the direction of each edge. A node at theabstract RPL Packet Information (RPI) described in section 11.2.Ingress of[RPL]more than one Segment inthe outer IPv6 Header chain (see [USEofRPLinfo]). The RPI carriesalocal RPLInstanceID which, in association with either the sourceTrack may use one or more of these Segments to forward a packet inside thedestination address in the IPv6 Header, indicatesTrack. Section 5.1. of [RPL] describes the RPL Instancethat the packet follows. This specification extends [RPL]and its encoding. There can be up tocreate128 global RPL Instances, for which there can be one or more DODAGs, and there can be 64 local RPL Instances, with anew flag that signalsnamespace thata packetisforwarded alongindexed by aprojected route. Projected-Route 'P': 1-bit flag. It is set to 1 if this packetDODAGID, where the DODAGID issent overaprojected route and set to 0 otherwise. 4. Extending RFC 6553 "The RPL Option for Carrying RPL Information in Data-Plane Datagrams" [RFC6553]describes the RPL Option for use among RPL routers to includeUnique Local Address (ULA) or a Global Unicast Address (GUA) of theabstract RPL Packet Information (RPI) described in section 11.2.Root of[RPL] in data packets. Thethe DODAG. A Track is normally associated with a Local RPLOptionInstance which RPLInstanceID iscommonly referred toused as theRPI though the RPI is really the abstract information that is transportedTrackID, more in Section 6.2. A Track Leg may also be used as a subTrack that extends the RPLOption. [USEofRPLinfo] updated the Option Type from 0x63 to 0x23. This specification modifiesmain DODAG. In that case, theRPL OptionTrackID is set toencodethe'P' flag 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Option Type | Opt Data Len | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |O|R|F|P|0|0|0|0|global RPLInstanceID| SenderRank | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | (sub-TLVs) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Figure 2: Extended RPL Option Format Option Type: 0x23 or 0x63, see [USEofRPLinfo] Opt Data Len: See [RFC6553] 'O', 'R' and 'F' flags: See [RFC6553]. Those flags MUST be setof the main DODAG, which suffices to0 byidentify thesender and ignored byrouting topology. As opposed to local RPL instances, thereceiver ifTrack Ingress that encapsulates the'P' flagpackets over a subtrack isset. Projected-Route 'P': 1-bit flag as defined in Section 3.4. RPLInstanceID: See [RFC6553]. Indicatesnot Root, and that theTrackId ifsource address of the'P' flagencapsulated packet isset. SenderRank: See [RFC6553]. This field MUST be setnot used to0 bydetermine thesender and ignored byTrack. A P-DAO message for a Track signals thereceiver ifTrackID in the'P'flag is set. 5. Extending RFC 8138 Section 6.3 of [RFC8138] presentsRPLInstanceID field. In theformatscase of a local RPL Instance, the6LoWPAN Routing Headeraddress oftype 5 (RPI-6LoRH) that compressestheRPI for normal RPL operation. The format ofTrack Ingress to be used as source to encapsulated packets along theRPI-6LoRHTrack isnot suited for Projected routes sincesignaled in theO,R,F flags are not used andDODAGID field of theRankProjected DAO Base Object; that field isunknown and ignored.elided in the case of the RPL Main DODAG, see Figure 3. 3.4. Serial Track Signaling This specification introducesa new 6LoRH,theP-RPI-6LoRH, with a typeconcept of7. The P-RPI-6LoRH header is usuallya P-Route along either aCritical 6LoWPAN Routing Header, but it can be elective as well if an SRH-6LoRHTrack Leg or a Segment. A P-Route ispresentinstalled andcontrols the routing decision. The P-RPI-6LoRH is designed to compress the RPI along RPL Projected Routes. It sformat is as follows: 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|E| Length | 6LoRH Type 7 | RPLInstanceID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Figure 3: P-RPI-6LoRH Format Elective 'E': See [RFC8138]. The 'E' flag is set to 1 to indicatemaintained using anElective 6LoRH, meaning that it can be ignored when forwarding. 6. Newextended RPLControl Messages and Options 6.1. New P-DAO Request Control Message The P-DAO Request (PDR)DAO messageis sent by a Node in the main DODAG to the Root. It iscalled arequest to establish or refreshProjected DAO (P-DAO), and a Trackwhere this nodeisTrack Ingress. The source IPv6 addresscomposed of thePDR signals the Track Ingresscombination of one or more P-Routes. This specification introduces therequested Track, and the TrackID is indicatedVia Information Option (VIO) to signal a sequence of hops in a Leg or a Segment in themessage itself.P-DAO messages, either in Storing Mode (SM-VIO) or NON-Storing Mode (NSM-VIO). Oneand onlyP-DAO messages contains a single VIO, associated to one or more RPL TargetOption MUST be present inOptions that signal themessage. The RTO signalsdestination IPv6 addresses that can reached along the Track. Before diving deeper into TrackEgress, more in Section 7.1. The RPL Control CodeLegs and Segments signaling and operation, this section provides examples of what how route projection works through variations of a simple example. In this simple example we show host routes though RPL Targets can be prefixes. Say we want to build a Serial Track from node A to E in Figure 1, so A can route packets to E's neighbors F and G along A, B, C, D and E as opposed to via the Root: /===> F A ===> B ===> C ===> D===> E < \===> G Figure 1: Reference Track Conventionally we use ==> to represent a strict hop and --> for a loose hop. We use -to- like in C==>D==>E-to-F to represent coma- separated Targets, e.g., F is a Target for Segment C==>D==>E. In this example, A is Track Ingress, E is Track Egress. C is a stitching point. F and G are "external" Targets for the Track, and become reachable from A via the Track A(ingress) to E (Egress and implicit Target in Non-Storing Mode) leading to F and G (explicit Targets). In a general manner the desired outcome is as follows: * Targets are E, F, and G * P-DAO 1 signals C==>D==>E * P-DAO 2 signals A==>B==>C * P-DAO 3 signals F and G via the A-->E Track P-DAO 3 may be ommitted if P-DAO 1 and 2 signal F and G as Targets. Loose sequences of hops must be expressed in Non-Storing Mode, so P-DAO 3 contains a NSM-VIO. With this specification, the DODAGID to be used by the Ingress as source address is signaled if needed in the DAO base object, the via list starts at the first loose hop and matches the source route header, and the Egress of a Non-Storing Mode P-DAO is an implicit Target that is not listed in the RTO. 3.4.1. Using Storing Mode Segments A==>B==>C and C==>D==>E are segments of a same Track. Note that the Storing Mode signaling imposes strict continuity in a segment, since the P-DAO is passed hop by hop, as a classical DAO is, along the reverse datapath that it signals. One benefit of strict routing is that loops are avoided along the Track. 3.4.1.1. Stitched Segments In this formulation: * P-DAO 1 signals C==>D==>E-to-F,G * P-DAO 2 signals A==>B==>C-to-F,G Storing Mode P-DAO 1 is sent to E and when it is succesfully acknowledged, Storing Mode P-DAO 2 is sent to C, as follows: +====================+==============+==============+ | Field | P-DAO 1 to E | P-DAO 2 to C | +====================+==============+==============+ | Mode | Storing | Storing | +--------------------+--------------+--------------+ | Track Ingress | A | A | +--------------------+--------------+--------------+ | (DODAGID, TrackID) | (A, 129) | (A, 129) | +--------------------+--------------+--------------+ | SegmentID | 1 | 2 | +--------------------+--------------+--------------+ | VIO | C, D, E | A, B, C | +--------------------+--------------+--------------+ | Targets | F, G | F, G | +--------------------+--------------+--------------+ Table 1: P-DAO Messages As a result the RIBs are set as follows: +======+=============+=========+=============+==========+ | Node | destination | Origin | Next Hop(s) | TrackID | +======+=============+=========+=============+==========+ | E | F, G | P-DAO 1 | Neighbor | (A, 129) | +------+-------------+---------+-------------+----------+ | D | E | P-DAO 1 | Neighbor | (A, 129) | +------+-------------+---------+-------------+----------+ | " | F, G | P-DAO 1 | E | (A, 129) | +------+-------------+---------+-------------+----------+ | C | D | P-DAO 1 | Neighbor | (A, 129) | +------+-------------+---------+-------------+----------+ | " | F, G | P-DAO 1 | D | (A, 129) | +------+-------------+---------+-------------+----------+ | B | C | P-DAO 2 | Neighbor | (A, 129) | +------+-------------+---------+-------------+----------+ | " | F, G | P-DAO 2 | C | (A, 129) | +------+-------------+---------+-------------+----------+ | A | B | P-DAO 2 | Neighbor | (A, 129) | +------+-------------+---------+-------------+----------+ | " | F, G | P-DAO 2 | B | (A, 129) | +------+-------------+---------+-------------+----------+ Table 2: RIB setting Packets originated by A to F or G do not require an encapsulation as the RPI can be placed in the native header chain. For packets that it routes, A must encapsulate to add the RPI that signals the trackID; the outer headers of the packets that are forwarded along the Track have the following settings: +========+===================+===================+================+ | Header | IPv6 Source Addr. | IPv6 Dest. Addr. | TrackID in RPI | +========+===================+===================+================+ | Outer | A | F or G | (A, 129) | +--------+-------------------+-------------------+----------------+ | Inner | X != A | F or G | N/A | +--------+-------------------+-------------------+----------------+ Table 3: Packet Header Settings As an example, say that A has a packet for F. Using the RIB above: * From P-DAO 2: A forwards to B and B forwards to C. * From P-DAO 1: C forwards to D and D forwards to E. * From Neighbor Cache Entry: C delivers the packet to F. 3.4.1.2. External routes In this example, we consider F and G as destinations that are external to the Track as a DODAG, as discussed in section 4.1.1. of [RFC9008]. We then apply the directives for encapsulating in that case, more in Section 6.6. In this formulation, we set up the Track Leg explicitly, which creates less routing state in intermediate hops at the expense of larger packets to accommodate source routing: * P-DAO 1 signals C==>D==>E-to-E * P-DAO 2 signals A==>B==>C-to-E * P-DAO 3 signals F and G via the A-->E-to-F,G Track Storing Mode P-DAO 1 and 2, and Non-Storing Mode P-DAO 3, are sent to E, C and A, respectively, as follows: +====================+==============+==============+==============+ | | P-DAO 1 to E | P-DAO 2 to C | P-DAO 3 to A | +====================+==============+==============+==============+ | Mode | Storing | Storing | Non-Storing | +--------------------+--------------+--------------+--------------+ | Track Ingress | A | A | A | +--------------------+--------------+--------------+--------------+ | (DODAGID, TrackID) | (A, 129) | (A, 129) | (A, 129) | +--------------------+--------------+--------------+--------------+ | SegmentID | 1 | 2 | 3 | +--------------------+--------------+--------------+--------------+ | VIO | C, D, E | A, B, C | E | +--------------------+--------------+--------------+--------------+ | Targets | E | E | F, G | +--------------------+--------------+--------------+--------------+ Table 4: P-DAO Messages Note in the above that E is not an implicit Target in Storing mode, so it must be added in the RTO. As a result the RIBs are set as follows: +======+=============+=========+=============+==========+ | Node | destination | Origin | Next Hop(s) | TrackID | +======+=============+=========+=============+==========+ | E | F, G | P-DAO 1 | Neighbor | (A, 129) | +------+-------------+---------+-------------+----------+ | D | E | P-DAO 1 | Neighbor | (A, 129) | +------+-------------+---------+-------------+----------+ | C | D | P-DAO 1 | Neighbor | (A, 129) | +------+-------------+---------+-------------+----------+ | " | E | P-DAO 1 | D | (A, 129) | +------+-------------+---------+-------------+----------+ | B | C | P-DAO 2 | Neighbor | (A, 129) | +------+-------------+---------+-------------+----------+ | " | E | P-DAO 2 | C | (A, 129) | +------+-------------+---------+-------------+----------+ | A | B | P-DAO 2 | Neighbor | (A, 129) | +------+-------------+---------+-------------+----------+ | " | E | P-DAO 2 | B | (A, 129) | +------+-------------+---------+-------------+----------+ | " | F, G | P-DAO 3 | E | (A, 129) | +------+-------------+---------+-------------+----------+ Table 5: RIB setting Packets from A to E do not require an encapsulation. The outer headers of the packets that are forwarded along the Track have the following settings: +========+===================+====================+================+ | Header | IPv6 Source Addr. | IPv6 Dest. Addr. | TrackID in RPI | +========+===================+====================+================+ | Outer | A | E | (A, 129) | +--------+-------------------+--------------------+----------------+ | Inner | X | E (X != A), F or G | N/A | +--------+-------------------+--------------------+----------------+ Table 6: Packet Header Settings As an example, say that A has a packet for F. Using the RIB above: * From P-DAO 3: A encapsulates the packet the Track signaled by P-DAO 3, with the outer header above. Now the packet destination is E. * From P-DAO 2: A forwards to B and B forwards to C. * From P-DAO 1: C forwards to D and D forwards to E; E decapsulates the packet. * From Neighbor Cache Entry: C delivers packets to F or G. 3.4.1.3. Segment Routing In this formulation leverages Track Legs to combine Segments and form a Graph. The packets are source routed from a Segment to the next to adapt the path. As such, this can be seen as a form of Segment Routing [RFC8402]: * P-DAO 1 signals C==>D==>E-to-E * P-DAO 2 signals A==>B-to-B,C * P-DAO 3 signals F and G via the A-->C-->E-to-F,G Track Storing Mode P-DAO 1 and 2, and Non-Storing Mode P-DAO 3, are sent to E, B and A, respectively, as follows: +====================+==============+==============+==============+ | | P-DAO 1 to E | P-DAO 2 to B | P-DAO 3 to A | +====================+==============+==============+==============+ | Mode | Storing | Storing | Non-Storing | +--------------------+--------------+--------------+--------------+ | Track Ingress | A | A | A | +--------------------+--------------+--------------+--------------+ | (DODAGID, TrackID) | (A, 129) | (A, 129) | (A, 129) | +--------------------+--------------+--------------+--------------+ | SegmentID | 1 | 2 | 3 | +--------------------+--------------+--------------+--------------+ | VIO | C, D, E | A, B | C, E | +--------------------+--------------+--------------+--------------+ | Targets | E | C | F, G | +--------------------+--------------+--------------+--------------+ Table 7: P-DAO Messages Note in the above that the Segment can terminate at the loose hop as used in the example of P-DAO 1 or at the previous hop as done with P-DAO 2. Both methods are possible on any Segment joined by a loose Track Leg. P-DAO 1 generates more signaling since E is the Segment Egress when D could be, but has the benefit that it validates that the connectivity between D and E still exists. As a result the RIBs are set as follows: +======+=============+=========+=============+==========+ | Node | destination | Origin | Next Hop(s) | TrackID | +======+=============+=========+=============+==========+ | E | F, G | P-DAO 1 | Neighbor | (A, 129) | +------+-------------+---------+-------------+----------+ | D | E | P-DAO 1 | Neighbor | (A, 129) | +------+-------------+---------+-------------+----------+ | C | D | P-DAO 1 | Neighbor | (A, 129) | +------+-------------+---------+-------------+----------+ | " | E | P-DAO 1 | D | (A, 129) | +------+-------------+---------+-------------+----------+ | B | C | P-DAO 2 | Neighbor | (A, 129) | +------+-------------+---------+-------------+----------+ | A | B | P-DAO 2 | Neighbor | (A, 129) | +------+-------------+---------+-------------+----------+ | " | C | P-DAO 2 | B | (A, 129) | +------+-------------+---------+-------------+----------+ | " | E, F, G | P-DAO 3 | C, E | (A, 129) | +------+-------------+---------+-------------+----------+ Table 8: RIB setting Packets originated at A to E do not require an encapsulation, but carry a SRH via C. The outer headers of the packets that are forwarded along the Track have the following settings: +========+===================+====================+================+ | Header | IPv6 Source Addr. | IPv6 Dest. Addr. | TrackID in RPI | +========+===================+====================+================+ | Outer | A | C till C then E | (A, 129) | +--------+-------------------+--------------------+----------------+ | Inner | X | E (X != A), F or G | N/A | +--------+-------------------+--------------------+----------------+ Table 9: Packet Header Settings As an example, say that A has a packet for F. Using the RIB above: * From P-DAO 3: A encapsulates the packet the Track signaled by P-DAO 3, with the outer header above. Now the destination in the IPv6 Header is C, and a SRH signals the final destination is E. * From P-DAO 2: A forwards to B and B forwards to C. * From P-DAO 3: C processes the SRH and sets the destination in the IPv6 Header to E. * From P-DAO 1: C forwards to D and D forwards to E; E decapsulates the packet. * From the Neighbor Cache Entry: C delivers packets to F or G. 3.4.2. Using Non-Storing Mode joining Tracks In this formulation: * P-DAO 1 signals C==>D==>E-to-F,G * P-DAO 2 signals A==>B==>C-to-C,F,G A==>B==>C and C==>D==>E are Tracks expressed as Non-Storing P-DAOs. 3.4.2.1. Stitched Tracks Non-Storing Mode P-DAO 1 and 2 are sent to C and A respectively, as follows: +====================+==============+==============+ | | P-DAO 1 to C | P-DAO 2 to A | +====================+==============+==============+ | Mode | Non-Storing | Non-Storing | +--------------------+--------------+--------------+ | Track Ingress | C | A | +--------------------+--------------+--------------+ | (DODAGID, TrackID) | (C, 131) | (A, 131) | +--------------------+--------------+--------------+ | SegmentID | 1 | 1 | +--------------------+--------------+--------------+ | VIO | D, E | B, C | +--------------------+--------------+--------------+ | Targets | F, G | E, F, G | +--------------------+--------------+--------------+ Table 10: P-DAO Messages As a result the RIBs are set as follows: +======+=============+=========+=============+==========+ | Node | destination | Origin | Next Hop(s) | TrackID | +======+=============+=========+=============+==========+ | E | F, G | ND | Neighbor | Any | +------+-------------+---------+-------------+----------+ | D | E | ND | Neighbor | Any | +------+-------------+---------+-------------+----------+ | C | D | ND | Neighbor | Any | +------+-------------+---------+-------------+----------+ | " | E, F, G | P-DAO 1 | D, E | (C, 131) | +------+-------------+---------+-------------+----------+ | B | C | ND | Neighbor | Any | +------+-------------+---------+-------------+----------+ | A | B | ND | Neighbor | Any | +------+-------------+---------+-------------+----------+ | " | C, E, F, G | P-DAO 2 | B, C | (A, 131) | +------+-------------+---------+-------------+----------+ Table 11: RIB setting Packets originated at A to E, F and G do not require an encapsulation, though it is preferred that A encapsulates and C decapsulates. Either way, they carry a SRH via B and C, and C needs to encapsulate to E, F, or G to add an SRH via D and E. The encapsulating headers of packets that are forwarded along the Track between C and E have the following settings: +========+===================+===================+================+ | Header | IPv6 Source Addr. | IPv6 Dest. Addr. | TrackID in RPI | +========+===================+===================+================+ | Outer | C | D till D then E | (C, 131) | +--------+-------------------+-------------------+----------------+ | Inner | X | E, F, or G | N/A | +--------+-------------------+-------------------+----------------+ Table 12: Packet Header Settings between C and E As an example, say that A has a packet for F. Using the RIB above: * From P-DAO 2: A encapsulates the packet with destination of F in the Track signaled by P-DAO 2. The outer header has source A, destination B, an SRH that indicates C as the next loose hop, and a RPI indicating a TrackId of 131 from A's namespace, which is distinct from TrackId of 131 from C's. * From the SRH: Packets forwarded by B have source A, destination C, a consumed SRH, and a RPI indicating a TrackId of 131 from A's namespace. C decapsulates. * From P-DAO 1: C encapsulates the packet with destination of F in the Track signaled by P-DAO 1. The outer header has source C, destination D, an SRH that indicates E as the next loose hop, and a RPI indicating a TrackId of 131 from C's namespace. E decapsulates. 3.4.2.2. External routes In this formulation: * P-DAO 1 signals C==>D==>E-to-E * P-DAO 2 signals A==>B==>C-to-C,E * P-DAO 3 signals F and G via the A-->E-to-F,G Track Non-Storing Mode P-DAO 1 is sent to C and Non-Storing Mode P-DAO 2 and 3 are sent A, as follows: +====================+==============+==============+==============+ | | P-DAO 1 to C | P-DAO 2 to A | P-DAO 3 to A | +====================+==============+==============+==============+ | Mode | Non-Storing | Non-Storing | Non-Storing | +--------------------+--------------+--------------+--------------+ | Track Ingress | C | A | A | +--------------------+--------------+--------------+--------------+ | (DODAGID, TrackID) | (C, 131) | (A, 129) | (A, 141) | +--------------------+--------------+--------------+--------------+ | SegmentID | 1 | 1 | 1 | +--------------------+--------------+--------------+--------------+ | VIO | D, E | B, C | E | +--------------------+--------------+--------------+--------------+ | Targets | E | E | F, G | +--------------------+--------------+--------------+--------------+ Table 13: P-DAO Messages As a result the RIBs are set as follows: +======+=============+=========+=============+==========+ | Node | destination | Origin | Next Hop(s) | TrackID | +======+=============+=========+=============+==========+ | E | F, G | ND | Neighbor | Any | +------+-------------+---------+-------------+----------+ | D | E | ND | Neighbor | Any | +------+-------------+---------+-------------+----------+ | C | D | ND | Neighbor | Any | +------+-------------+---------+-------------+----------+ | " | E | P-DAO 1 | D, E | (C, 131) | +------+-------------+---------+-------------+----------+ | B | C | ND | Neighbor | Any | +------+-------------+---------+-------------+----------+ | A | B | ND | Neighbor | Any | +------+-------------+---------+-------------+----------+ | " | C, E | P-DAO 2 | B, C | (A, 129) | +------+-------------+---------+-------------+----------+ | " | F, G | P-DAO 3 | E | (A, 141) | +------+-------------+---------+-------------+----------+ Table 14: RIB setting The encapsulating headers of packets that are forwarded along the Track between C and E have the following settings: +========+===================+===================+================+ | Header | IPv6 Source Addr. | IPv6 Dest. Addr. | TrackID in RPI | +========+===================+===================+================+ | Outer | C | D till D then E | (C, 131) | +--------+-------------------+-------------------+----------------+ | Middle | A | E | (A, 141) | +--------+-------------------+-------------------+----------------+ | Inner | X | E, F or G | N/A | +--------+-------------------+-------------------+----------------+ Table 15: Packet Header Settings As an example, say that A has a packet for F. Using the RIB above: * From P-DAO 3: A encapsulates the packet with destination of F in the Track signaled by P-DAO 3. The outer header has source A, destination E, and a RPI indicating a TrackId of 141 from A's namespace. This recurses with: * From P-DAO 2: A encapsulates the packet with destination of E in the Track signaled by P-DAO 2. The outer header has source A, destination B, an SRH that indicates C as the next loose hop, and a RPI indicating a TrackId of 129 from A's namespace. * From the SRH: Packets forwarded by B have source A, destination C , a consumed SRH, and a RPI indicating a TrackId of 129 from A's namespace. C decapsulates. * From P-DAO 1: C encapsulates the packet with destination of E in the Track signaled by P-DAO 1. The outer header has source C, destination D, an SRH that indicates E as the next loose hop, and a RPI indicating a TrackId of 131 from C's namespace. E decapsulates. 3.4.2.3. Segment Routing In this formulation: * P-DAO 1 signals C==>D==>E-to-E * P-DAO 2 signals A==>B-to-C * P-DAO 3 signals F and G via the A-->C-->E-to-F,G Track Non-Storing Mode P-DAO 1 is sent to C and Non-Storing Mode P-DAO 2 and 3 are sent A, as follows: +====================+==============+==============+==============+ | | P-DAO 1 to C | P-DAO 2 to A | P-DAO 3 to A | +====================+==============+==============+==============+ | Mode | Non-Storing | Non-Storing | Non-Storing | +--------------------+--------------+--------------+--------------+ | Track Ingress | C | A | A | +--------------------+--------------+--------------+--------------+ | (DODAGID, TrackID) | (C, 131) | (A, 129) | (A, 141) | +--------------------+--------------+--------------+--------------+ | SegmentID | 1 | 1 | 1 | +--------------------+--------------+--------------+--------------+ | VIO | D, E | B | C, E | +--------------------+--------------+--------------+--------------+ | Targets | | C | F, G | +--------------------+--------------+--------------+--------------+ Table 16: P-DAO Messages As a result the RIBs are set as follows: +======+=============+=========+=============+==========+ | Node | destination | Origin | Next Hop(s) | TrackID | +======+=============+=========+=============+==========+ | E | F, G | ND | Neighbor | Any | +------+-------------+---------+-------------+----------+ | D | E | ND | Neighbor | Any | +------+-------------+---------+-------------+----------+ | C | D | ND | Neighbor | Any | +------+-------------+---------+-------------+----------+ | " | E | P-DAO 1 | D, E | (C, 131) | +------+-------------+---------+-------------+----------+ | B | C | ND | Neighbor | Any | +------+-------------+---------+-------------+----------+ | A | B | ND | Neighbor | Any | +------+-------------+---------+-------------+----------+ | " | C | P-DAO 2 | B, C | (A, 129) | +------+-------------+---------+-------------+----------+ | " | E, F, G | P-DAO 3 | C, E | (A, 141) | +------+-------------+---------+-------------+----------+ Table 17: RIB setting The encapsulating headers of packets that are forwarded along the Track between A and B have the following settings: +========+===================+===================+================+ | Header | IPv6 Source Addr. | IPv6 Dest. Addr. | TrackID in RPI | +========+===================+===================+================+ | Outer | A | B till D then E | (A, 129) | +--------+-------------------+-------------------+----------------+ | Middle | A | C | (A, 141) | +--------+-------------------+-------------------+----------------+ | Inner | X | E, F or G | N/A | +--------+-------------------+-------------------+----------------+ Table 18: Packet Header Settings The encapsulating headers of packets that are forwarded along the Track between B and C have the following settings: +========+===================+===================+================+ | Header | IPv6 Source Addr. | IPv6 Dest. Addr. | TrackID in RPI | +========+===================+===================+================+ | Outer | A | C | (A, 141) | +--------+-------------------+-------------------+----------------+ | Inner | X | E, F or G | N/A | +--------+-------------------+-------------------+----------------+ Table 19: Packet Header Settings The encapsulating headers of packets that are forwarded along the Track between C and E have the following settings: +========+===================+===================+================+ | Header | IPv6 Source Addr. | IPv6 Dest. Addr. | TrackID in RPI | +========+===================+===================+================+ | Outer | C | D till D then E | (C, 131) | +--------+-------------------+-------------------+----------------+ | Middle | A | E | (A, 141) | +--------+-------------------+-------------------+----------------+ | Inner | X | E, F or G | N/A | +--------+-------------------+-------------------+----------------+ Table 20: Packet Header Settings As an example, say that A has a packet for F. Using the RIB above: * From P-DAO 3: A encapsulates the packet with destination of F in the Track signaled by P-DAO 3. The outer header has source A, destination C, an SRH that indicates E as the next loose hop, and a RPI indicating a TrackId of 141 from A's namespace. This recurses with: * From P-DAO 2: A encapsulates the packet with destination of C in the Track signaled by P-DAO 2. The outer header has source A, destination B, and a RPI indicating a TrackId of 129 from A's namespace. B decapsulates forwards to C based on a sibling connected route. * From the SRH: C consumes the SRH and makes the destination E. * From P-DAO 1: C encapsulates the packet with destination of E in the Track signaled by P-DAO 1. The outer header has source C, destination D, an SRH that indicates E as the next loose hop, and a RPI indicating a TrackId of 131 from C's namespace. E decapsulates. 3.5. Complex Tracks To increase the reliability of the P2P transmission, this specification enables to build a collection of Legs between the same Ingress and Egress Nodes and combine them with the same TrackID, as shown in Figure 2. Legs may cross at loose hops edges or remain parallel. The Segments that join the loose hops of a Leg are installed with the same TrackID as the Leg. But each individual Leg and Segment has its own P-RouteID which allows to manage it separately. When Legs cross within respsective Segment, the next loose hop (the current destination of the packet) indicates which Leg is being followed and a Segment that can reach that next loose hop is selected. CPF CPF CPF CPF Southbound API _-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._- _-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._- +----------+ | RPL Root | +----------+ ( ) ( ) ( DODAG ) ( ) ( ) ) <- Leg 1 B, E -> <--- Segment 1 A,B ---> <------- Segment 2 C,D,E -------> FWD --z Relay --z FWD --z FWD Target 1 z-- Node z-- Node z-- Node z-- Node --z / --z (A) (B) \ (C) (D) z-- / Track \ Track Ingress Segment 5 Egress - Tgt 2 (I) \ (E) --z \ z-- \ z-- FWD --z FWD --z Relay --z FWD --z \ Node z-- Node z-- Node z-- Node Target 3 (F) (G) (H) (J) <------ Segment 3 F,G,H ------> <---- Segment 4 J,E ----> <- Leg 2 H, E -> <--- Segment 1 A,B ---> <- S5-> <---- Segment 4 J,E ----> <- Leg 3 B, H, E -> ) ( ( ) Figure 2: Segments and Tracks Note that while this specification enables to build both Segments inside a Leg (aka East-West), such as Segment 2 above which is within Leg 1, and Inter-Leg Segments (aka North-South), such as Segment 2 above which joins Leg 1 and Leg 2, it does not signal to the Ingress which Inter-Leg Segments are available, so the use of North-South Segments and associated PAREO functions is curently limited. The only possibility available at this time is to define overlapping Legs as illustrated in Figure 2, with Leg 3 that is congruent with Leg 1 till node B and congruent with Leg 2 from node H on, abstracting Segment 5 as an East-West Segment. DetNet Forwarding Nodes only understand the simple 1-to-1 forwarding sublayer transport operation along a segment whereas the more sophisticated Relay nodes can also provide service sublayer functions such as Replication and Elimination. One possible mapping between DetNet and this specification is to signal the Relay Nodes as the hops of a Leg and the forwarding Nodes as the hops in a Segment that join the Relay nodes as illustrated in Figure 2. 3.6. Scope and Expectations This specification expects that the RPL Main DODAG is operated in RPL Non-Storing Mode to sustain the exchanges with the Root. Based on its comprehensive knowledge of the parent-child relationship, the Root can form an abstracted view of the whole DODAG topology. This document adds the capability for nodes to advertise additional sibling information to complement the topological awareness of the Root to be passed on to the PCE, and enable the PCE to build more / better paths that traverse those siblings. P-Routes require resources such as routing table space in the routers and bandwidth on the links; the amount of state that is installed in each node must be computed to fit within the node's memory, and the amount of rerouted traffic must fit within the capabilities of the transmission links. The methods used to learn the node capabilities and the resources that are available in the devices and in the network are out of scope for this document. The method to capture and report the LLN link capacity and reliability statistics are also out of scope. They may be fetched from the nodes through network management functions or other forms of telemetry such as OAM. The "6TiSCH Architecture" [6TiSCH-ARCHI] leverages a centralized model that is similar to that of "Deterministic Networking Architecture" [RFC8655], whereby the device resources and capabilities are exposed to an external controller which installs routing states into the network based on its own objective functions that reside in that external entity. With DetNet and 6TiSCH, the component of the controller that is responsible of computing routes is a PCE. The PCE computes its routes based on its own objective functions such as described in [RFC4655], and typically controls the routes using the PCE Protocol (PCEP) by [RFC5551]. While this specification expects a PCE and while PCEP might effectively be used between the Root and the PCE, the control protocol between the PCE and the Root is out of scope. This specification expects a single PCE with a full view of the network. Distributing the PCE function for a large network is out of scope. This specification uses the RPL Root as a proxy to the PCE. The PCE may be collocated with the Root, or may reside in an external Controller. In that case, the protocol between the Root and the PCE is out of scope and abstracted by / mapped to RPL inside the DODAG; one possibility is for the Root to transmit the RPL DAOs with the SIOs that detail the parent/child and sibling information. The algorithm to compute the paths and the protocol used by the PCE and the metrics and link statistics involved in the computation are also out of scope. The effectiveness of the route computation by the PCE depends on the quality of the metrics that are reported from the RPL network. Which metrics are used and how they are reported is out of scope, but the expectation is that they are mostly of long-term, statistical nature, and provide visibility on link throughput, latency, stability and availability over relatively long periods. The "Reliable and Available Wireless (RAW) Architecture/Framework" [RAW-ARCHI] extends the definition of Track, as being composed of East-West directional segments and North-South bidirectional segments, to enable additional path diversity, using Packet ARQ, Replication, Elimination, and Overhearing (PAREO) functions over the available paths, to provide a dynamic balance between the reliability and availability requirements of the flows and the need to conserve energy and spectrum.. This specification prepares for RAW by setting up the Tracks, but only forms DODAGs, which are composed of aggregated end-to-end loose source routed Legs, joined by strict routed Segments, all oriented East-West. The RAW Architecture defines a dataplane extension of the PCE called the Path Selection Engine (PSE), that adapts the use of the path redundancy within a Track to defeat the diverse causes of packet loss. The PSE controls the forwarding operation of the packets within a Track This specification can use but does not impose a PSE and does not provide the policies that wouldselect which packets are routed through which path within a Track, IOW, how the PSE may use the path redundancy within the Track. By default, the use of the available redundancy is limited to simple load balancing, and all the segments are East-West unidirectional only. A Track may be set up to reduce the load around the Root, or to enable urgent traffic to flow more directly. This specification does not provide the policies that would decide which flows are routed through which Track. In a Non-Storing Mode RPL Instance, the Main DODAG provides a default route via the Root, and the Tracks provide more specific routes to the Track Targets. 4. Extending existing RFCs 4.1. Extending RFC 6550 This specification extends RPL [RPL] to enable the Root to install East-West routes inside a Main DODAG that is operated as non-Storing Mode. A Projected DAO (P-DAO) message (see Section 4.1.1) contains a new Via Information Option that installs a strict or a loose sequence of hops to form respectively a Track Segment or a Track Leg. A new P-DAO Request (PDR) message (see Section 5.1) enables a Track Ingress to request the Track from the Root for which it is the Root and it owns the address that serves as TrackID, as well as the associated namespace from which it selects the TrackID. In the context of this specification, the installed route appears as a more specific route to the Track Targets, and the Track Ingress routes the packets towards the Targets via the Track using the longest match as usual. To ensure that the PDR and P-DAO messages can flow at most times, it is RECOMMENDED that the nodes involved in a Track mantain multiple parents in the Main DODAG, advertise them all to the Root, and use them in turn to retry similar packets. It is also RECOMMENDED that the Root uses diverse source route paths to retry similar messages ot the nodes in the Track. 4.1.1. Projected DAO Section 6 of [RPL] introduces the RPL Control Message Options (CMO), including the RPL Target Option (RTO) and Transit Information Option (TIO), which can be placed in RPL messages such as the destination Advertisement Object (DAO). A DAO message signals routing information to one or more Targets indicated in RTOs, providing one hop information at a time in the TIO. A Projected DAO (P-DAO) is a special DAO message generated by the Root to install a P-Route formed of multiple hops in its DODAG. This provides a RPL-based method to install the Tracks as expected by the 6TiSCH Architecture [6TiSCH-ARCHI] as a collection of multiple P-Routes. The P-DAO is signaled with a new "Projected DAO" (P) flag, see Figure 3. The 'P' flag is encoded in bit position 2 (to be confirmed by IANA) of the Flags field in the DAO Base Object. The Root MUST set it to 1 in a Projected DAO message. Otherwise it MUST be set to 0. It is set to 0 in Legacy implementations as specified respectively in Sections 20.11 and 6.4 of [RPL] The P-DAO is control plane signaling and should not be stuck behind high traffic levels. The expectation is that the P-DAO message is sent as high QoS level, above that of data traffic, typically with the Network Control precedence. 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 |K|D|P| Flags | Reserved | DAOSequence | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | + + | DODAGID field set to the | + IPv6 Address of the Track Ingress + | used to source encapsulated packets | + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Option(s)... +-+-+-+-+-+-+-+-+ Figure 3: Projected DAO Base Object New fields: TrackID: The local or global RPLInstanceID of the DODAG that serves as Track, more in Section 6.2 P: 1-bit flag (position to be confirmed by IANA). The 'P' flag is set to 1 by the Root to signal a Projected DAO, and it is set to 0 otherwise. In RPL Non-Storing Mode, the TIO and RTO are combined in a DAO message to inform the DODAG Root of all the edges in the DODAG, which are formed by the directed parent-child relationships. Options may be factorized; multiple RTOs may be present to signal a collection of children that can be reached via the parent(s) indicated in the TIO(s) that follows the RTOs. This specification generalizes the case of a parent that can be used to reach a child with that of a whole Track through which children and siblings of the Track Egress are reachable. 4.1.2. Via Information Option New CMOs called the Via Information Options (VIO) are introduced for use in P-DAO messages as a multihop alternative to the TIO, more in Section 5.3. One VIO is the stateful Storing Mode VIO (SM-VIO); an SM-VIO installs a strict hop-by-hop P-Route called a Track Segment. The other is the Non-Storing Mode VIO (NSM-VIO); the NSM-VIO installs a loose source-routed P-Route called a Track Leg at the Track Ingress, which uses that state to encapsulate a packet IPv6_in_IPv6 with a new Routing Header (RH) to the Track Egress, more in Section 6.6. A P-DAO contains one or more RTOs to indicate the Target (destinations) that can be reached via the P-Route, followed by exactly one VIO that signals the sequence of nodes to be followed, more in Section 6. There are two modes of operation for the P-Routes, the Storing Mode and the Non-Storing Mode, see Section 6.3.2 and Section 6.3.3 respectively for more. 4.1.3. Sibling Information Option This specification adds another CMO called the Sibling Information Option (SIO) that is used by a RPL Aware Node (RAN) to advertise a selection of its candidate neighbors as siblings to the Root, more in Section 5.4. The SIO is placed in DAO messages that are sent directly to the Root of the main DODAG. 4.1.4. P-DAO Request Two new RPL Control Messages are also introduced, to enable a RPL- Aware Node to request the establishment of a Track between self as the Track Ingress Node and a Track Egress. The node makes its request 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, see Section 5.1 for more. 4.1.5. Extending the RPI Sending a Packet within a RPL Local Instance requires the presence of the abstract RPL Packet Information (RPI) described in section 11.2. of [RPL] in the outer IPv6 Header chain (see [RFC9008]). The RPI carries a local RPLInstanceID which, in association with either the source or the destination address in the IPv6 Header, indicates the RPL Instance that the packet follows. This specification extends [RPL] to create a new flag that signals that a packet is forwarded along a P-Route. Projected-Route 'P': 1-bit flag. It is set to 1 in the RPI that is added in the encapsulation when a packet is sent over a Track. It is set to 0 when a packet is forwarded along the main Track, including when the packet follows a Segment that joins loose hops of the Main DODAG. The flag is not mutable en-route. The encoding of the 'P' flag in native format is shown in Section 4.2 while the compressed format is indicated in Section 4.3. 4.2. Extending RFC 6553 "The RPL Option for Carrying RPL Information in Data-Plane Datagrams" [RFC6553]describes the RPL Option for use among RPL routers to include the abstract RPL Packet Information (RPI) described in section 11.2. of [RPL] in data packets. The RPL Option is commonly referred to as the RPI though the RPI is really the abstract information that is transported in the RPL Option. [RFC9008] updated the Option Type from 0x63 to 0x23. This specification modifies the RPL Option to encode the 'P' flag 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Option Type | Opt Data Len | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |O|R|F|P|0|0|0|0| RPLInstanceID | SenderRank | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | (sub-TLVs) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Figure 4: Extended RPL Option Format Option Type: 0x23 or 0x63, see [RFC9008] Opt Data Len: See [RFC6553] 'O', 'R' and 'F' flags: See [RFC6553]. Those flags MUST be set to 0 by the sender and ignored by the receiver if the 'P' flag is set. Projected-Route 'P': 1-bit flag as defined in Section 4.1.5. RPLInstanceID: See [RFC6553]. Indicates the TrackId if the 'P' flag is set, as discussed in Section 4.1.1. SenderRank: See [RFC6553]. This field MUST be set to 0 by the sender and ignored by the receiver if the 'P'flag is set. 4.3. Extending RFC 8138 The 6LoWPAN Routing Header [RFC8138] specification introduces a new IPv6 over Low-Power Wireless Personal Area Network (6LoWPAN) [RFC6282] dispatch type for use in 6LoWPAN route-over topologies, which initially covers the needs of RPL data packet compression. Section 4 of [RFC8138] presents the generic formats of the 6LoWPAN Routing Header (6LoRH) with two forms, one Elective that can be ignored and skipped when the router does not understand it, and one Critical which causes the packet to be dropped when the router cannot process it. The 'E' Flag in the 6LoRH indicates its form. In order to skip the Elective 6LoRHs, their format imposes a fixed expression of the size, whereas the size of a Critical 6LoRH may be signaled in variable forms to enable additional optimizations. When the [RFC8138] compression is used, the Root of the Main DODAG that sets up the Track also constructs the compressed routing header (SRH-6LoRH) on behalf of the Track Ingress, which saves the complexities of optimizing the SRH-6LoRH encoding in constrained code. The SRH-6LoRH is signaled in the NSM-VIO, in a fashion that it is ready to be placed as is in the packet encapsulation by the Track Ingress. Section 6.3 of [RFC8138] presents the formats of the 6LoWPAN Routing Header of type 5 (RPI-6LoRH) that compresses the RPI for normal RPL operation. The format of the RPI-6LoRH is not suited for P-Routes since the O,R,F flags are not used and the Rank is unknown and ignored. This specification introduces a new 6LoRH, the P-RPI-6LoRH that can be used in either Elective or Critical 6LoRH form, see Table 21 and Table 22 respectively. The new 6LoRH MUST be used as a Critical 6LoRH, unless an SRH-6LoRH is present and controls the routing decision, in which case it MAY be used in Elective form. The P-RPI-6LoRH is designed to compress the RPI along RPL P-Routes. Its format is as follows: 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|E| Length | 6LoRH Type | RPLInstanceID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Figure 5: P-RPI-6LoRH Format Type: IANA is requested to define the same value of the type for both Elective and Critical forms. A type of 8 is suggested. Elective 'E': See [RFC8138]. The 'E' flag is set to 1 to indicate an Elective 6LoRH, meaning that it can be ignored when forwarding. RPLInstanceID : In the context of this specification, the RPLInstanceID field signals the TrackID, see Section 3.3 and Section 6.2 . Section 6.7 details how a a Track Ingress leverages the P-RPI-6LoRH Header as part of the encapsulation of a packet to place it into a Track. 5. New RPL Control Messages and Options 5.1. New P-DAO Request Control Message The P-DAO Request (PDR) message is sent by a Node in the Main DODAG to the Root. It is a request to establish or refresh a Track where this node is Track Ingress, and signals whether an acknowledgment called PDR-ACK is requested or not. A positive PDR-ACK indicates that the Track was built and that the Roots commits to maintain the Track for the negotiated lifetime. The Root may use an asynchronous PDR-ACK with an negative status to indicate that the Track was terminated before its time. A status of "Transient Failure" (see Section 10.9) is an indication that the PDR may be retried after a reasonable time that depends on the deployment. Other negative status values indicate a permanent error; the tentative must be abandoned until a corrective action is taken at the application layer or through network management. The source IPv6 address of the PDR signals the Track Ingress to-be of the requested Track, and the TrackID is indicated in the message itself. One and only one RPL Target Option MUST be present in the message. The RTO signals the Track Egress, more in Section 6.1. The RPL Control Code for the PDR is 0x09, to be confirmed by IANA. The format of 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | TrackID |K|R| Flags | ReqLifetime | PDRSequence | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Option(s)... +-+-+-+-+-+-+-+-+ Figure4:6: New P-DAO Request Format TrackID: 8-bit field. In the context of this specification, the TrackID fieldindicatingsignals the RPLInstanceIDassociated withof theTrack.DODAG formed by the Track, see Section 3.3 and Section 6.2. To allocate a new Track, the Ingress Node must provide a value that is not in use at this time. K: The 'K' flag is set to indicate that the recipient is expected to send a PDR-ACK back. R: The 'R' flag is set to request a Complex Track for redundancy. Flags: Reserved. The Flags field MUST initialized to zero by the sender and MUST be ignored by the receiver ReqLifetime: 8-bit unsigned integer. The requested lifetime for the Track expressed in Lifetime Units (obtained from the DODAG Configuration option). A PDR with a fresher PDRSequence refreshes the lifetime, and a PDRLifetime of 0 indicates that thetrackTrack should bedestroyed.destroyed, e.g., when the application that requested the Track terminates. PDRSequence: 8-bit wrapping sequence number, obeying the operation in section 7.2 of [RPL]. The PDRSequence is used to correlate a PDR-ACK message with the PDR message that triggered it. It is incremented at each PDR message and echoed in the PDR-ACK by the Root.6.2.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. The RPL Control Code for the PDR-ACK is 0x0A, to be confirmed by IANA. 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 | Flags | Track Lifetime| PDRSequence | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | PDR-ACK Status| Reserved | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Option(s)... +-+-+-+-+-+-+-+ Figure5:7: New PDR-ACK Control Message Format TrackID:The RPLInstanceIDSet to the TrackID indicated in the TrackID field of theTrackPDR messages thatwas created. The value of 0x00 is used to when no Track was created.this replies to. Flags: Reserved. The Flags field MUST initialized to zero by the sender and MUST be ignored by the receiver Track Lifetime: Indicates that remaining Lifetime for the Track, expressed in Lifetime Units; the value of zero (0x00) indicates that 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. PDR-ACK Status: 8-bit field indicating the completion. The PDR-ACK Status is substructured as indicated in Figure6:8: 0 1 2 3 4 5 6 7 +-+-+-+-+-+-+-+-+ |E|R| Value | +-+-+-+-+-+-+-+-+ Figure6:8: PDR-ACK status Format E: 1-bit flag. Set to indicate a rejection. When not set, the value of 0 indicates Success/UnqualifiedacceptanceAcceptance and other values indicate "not an outright rejection". R: 1-bit flag. Reserved, MUST be set to 0 by the sender and ignored by the receiver. Status Value: 6-bit unsigned integer. Values depending on the setting of the 'E' flag, see Table 27 and Table 28. Reserved: The Reserved field MUST initialized to zero by the sender and MUST be ignored by the receiver6.3.5.3. Via Information Options A VIO signals the ordered list of IPv6 Via Addresses that constitutes the hops of either aSerial Track orLeg (using Non-Storing Mode) a Segment (using storing mode) of amore ComplexTrack. A Storing Mode P-DAO contains one Storing Mode VIOMUST contain at least(SM-VIO) whereas a Non-Storing Mode P-DAO contains oneVia Address,Non- Storing Mode VIO (NSM-VIO) The duration of the validity of a VIO is indicated in a Segment Lifetime field. A P-DAO message that contains a VIO with a Segment Lifetime of zero is referred as a No-Path P-DAO. The VIO contains one or more SRH-6LoRH header(s), each formed of a SRH-6LoRH head and a collection of compressed ViaAddressAddresses, except in the case of a Non-Storing Mode No-Path P-DAO where the SRH-6LoRH header is not present. In the case of a SM-VIO, or if [RFC8138] is not used in the data packets, then the Root MUSTNOT be present more than once, otherwiseuse only one SRH-6LoRH per Via Information Option, and the compression is the same forall the addresses, as shown in Figure 9, for simplicity. In case of an NSM-VIO and if [RFC8138] is in use in the Main DODAG, the Root SHOULD optimize the size of the NSM-VIO if using different SRH-6LoRH Types make the VIOMUSTglobally shorter; this means that more than one SRH-6LoRH may beignored.present. The format of the Via Information Options 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type | Option Length | Flags |SegmentIDP-RouteID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Segm. Sequence | Seg. Lifetime | SRH-6LoRHheaderhead | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |+ + . .. Via Address 1 (compressed by RFC 8138) .. . + +| | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | . .... . | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |+ + . .. Via Address n (compressed by RFC 8138) . | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | . Additional SRH-6LoRH Header(s) .+ +| |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+. .... . Figure7:9: VIO format (uncompressed form) Option Type:0x0B0x0E forSF-VIO, 0x0CSM-VIO, 0x0F forSR-VIONSM-VIO (to be confirmed byIANA)IANA), see =Table 25 Option Length:In bytes;8-bit unsigned integer, representing the length in octets of the option, not including the Option Type and Length fields, see section 6.7.1. of [RPL]; the Option Length is variable, depending on the number of Via Addresses and thecompression. SegmentID:compression applied. P-RouteID: 8-bit field that identifies aSegment withincomponent of a Track or themainMain DODAG as indicated by the TrackID field. The value of 0 is used to signal a Serial Track, i.e., made of a singlesegment.segment/Leg. In an SM-VIO, the P-RouteID indicates an actual Segment. In an an NSM-VIO, it indicates a Leg, that is a serial subTrack that is added to the overall topology of the Track. Segment Sequence: 8-bit unsigned integer. The Segment Sequence obeys the operation in section 7.2 of [RPL] and the lollipop starts at 255. When the Root of the DODAG needs to refresh or update a Segment in a Track, it increments the Segment Sequence individually for that Segment. The Segment information indicated in the VIO deprecates any state for the Segment indicated by theSegmentIDP-RouteID within the indicated Track and sets up the new information. A VIO with a Segment Sequence that is not as fresh as the current one is ignored. A VIO for a given DODAGID with the same (TrackID,SegmentID,P-RouteID, Segment Sequence) indicates a retry; it MUST NOT change the Segment and MUST be propagated or answered as the first copy. Segment Lifetime: 8-bit unsigned integer. The length of time in Lifetime Units (obtained from the Configuration option) that the Segment is usable. The period starts when a new Segment Sequence is seen. The value of 255 (0xFF) represents infinity. The value of zero (0x00) indicates a loss of reachability.A P-DAO message that contains a VIO with a Segment Lifetime of zero is referred as a No-Path P-DAO in this document.SRH-6LoRHheader:head: The first 2 bytes of the (first) SRH-6LoRH as shown in Figure 6 of [RFC8138].AAs an example, a 6LoRH Type of 4 means that the VIA Addresses are provided in full with no compression. Via Address: An IPv6addressULA or GUA of a node along the Segment.In a SF-VIO,The VIO contains one or more IPv6 Via Addresses listed in thelist is a strict path between direct neighbors,datapath order fromthe SegmentIngress toEgress, both included.Egress. Therouterlist is expressed in a compressed form as signaled by the preceding SRH-6LoRH header. In a Storing Mode P-DAO thatprocessesupdates or removes a section of anSF-VIO MAY create additional routing state towardsalready existing Segment, thenodes after self vialist in thenode immediately after selfSM-VIO may represent only the section of the Segment that is being updated; at the extreme, the SM-VIO updates only one node, in which case it contains only one IPv6 address. In all other cases, theSF-VIO, butlist in the VIO MUST be complete. In the case ofmemory shortagean SM-VIO, theroutes tolist indicates a sequential (strict) path through direct neighbors, theTargets have precedence since they arecomplete list starts at Ingress and ends at Egress, and theones thatnodes listed in therouter commits to store.VIO, including the Egress, MAY be considered as implicit Targets. In the case of anSR-VIO,NSM-VIO, the complete listincludes the egress but notcan be loose and excludes theingress node. It startsIngress node, starting at the first loose hop andendsending at a TrackEgress. In that case,Egress; the Track Egress MUST be considered as an implicit Target, so it MUST NOT belisted itsignaled in a RPL Target Option.The list in an SR-VIO may be loose, provided that each listed node has a path to the next listed node, e.g., via a segment or another Track. In the case of a SF-VIO, or if [RFC8138] is not used in the data packets, then the Root MUST use only one SRH-6LoRH per Via Information Option, and the compression is the same for all the addresses, as shown in Figure 7. In case of an SR-VIO, and if [RFC8138] is in use in the main DODAG, then the Root SHOULD optimize the size of the SR-VIO; more than one SRH-6LoRH may be present, e.g., if the compression level changes inside the Segment and different SRH-6LoRH Types are required. The content of the SR-VIO starting at the first SRH- 6LoRH header is thus verbatim the one that the Track Ingress places in the packet encapsulation to reach the Track Ingress. 6.4.5.4. Sibling Information Option The Sibling Information Option (SIO) provides indication on siblings that could be used by the Root to formProjected Routes.P-Routes. One or more SIO(s) may be placed in the DAO messages that are sent to the Root inNon-StoringNon- Storing Mode. To advertise a neighbor node, the router MUST have an active Address Registration from that sibling using [RFC8505], for an address (ULA or GUA) that serves as identifier for the node. If this router also registers an address to that sibling, and the link has similar properties in both directions, only the router with the lowest Interface ID in its registered address needs report the SIO, and the Root will assume symmetry. The format of the SIO is as follows: 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type | Option Length|Comp.|B|D|Flags||D| Flags |Comp.| Opaque | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Step of Rank | Reserved | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | + + . . . Sibling DODAGID (if the D flag not set) . . . + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | + + . . . Sibling Address . . . + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Figure8:10: Sibling Information Option Format Option Type:0x0D0x10 for SIO (to be confirmed byIANA)IANA), see =Table 25 Option Length:In bytes, the size of the option. Compression Type: 3-bit8-bit unsignedinteger. This isinteger, representing theSRH-6LoRH Type as defined in figure 7length insection 5.1octets of[RFC8138] that corresponds tothecompression used foroption, not including theSibling AddressOption Type andits DODAGID if resent. The Compression reference is the RootLength fields, see section 6.7.1. ofthe main DODAG.[RPL]. Reserved for Flags: MUST be set to zero by the sender and MUST be ignored by the receiver.B: 1-bit flag that is set to indicate that the connectivity to the sibling is bidirectional and roughly symmetrical. In that case, only one of the siblings may report the SIO for the hop. If 'B' is not set then the SIO only indicates connectivity from the sibling to this node, and does not provide information on the hop from this node to the sibling.D: 1-bit flag that is set to indicate that sibling belongs to the same DODAG. When not set, the Sibling DODAGID is indicated. Flags: Reserved. The Flags field MUST initialized to zero by the sender and MUST be ignored by the receiver 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 industrial Alliance that uses RPL for a particular use / environment MAY redefine the use of this field to fit its needs. Compression Type: 3-bit unsigned integer. This is the SRH-6LoRH Type as defined in figure 7 in section 5.1 of [RFC8138] that corresponds to the compression used for the Sibling Address and its DODAGID if resent. The Compression reference is the Root of the Main DODAG. Step of Rank: 16-bit unsigned integer. This is the Step of Rank [RPL] as computed by the Objective Function between this node and the sibling. Reserved: The Reserved field MUST initialized to zero by the sender and MUST be ignored by the receiver Sibling DODAGID: 2 to 16 bytes, the DODAGID of the sibling in a [RFC8138] compressed form as indicated by the Compression Type field. This field is present if and only if the D flag is not set. Sibling Address: 2 to 16 bytes, an IPv6 Address of the sibling, with a scope that MUST be make it reachable from the Root, e.g., it cannot be a Link Local Address. The IPv6 address is encoded in the [RFC8138] compressed form indicated by the Compression Type field. 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.7. Projected DAO This draft adds a capability to RPL whereby the6. Rootof a main DODAG installsInitiated Routing State 6.1. Requesting a Trackas a collection of Projected Routes, using a Projected-DAO (P-DAO) message to maintain each individual route. The P-DAO signals a collection of Targets inThis specification introduces theRPL Target Option(s) (RTO). Those Targets can be reached via a sequence of routers indicated in a VIO. A P-DAO message MUST contain exactly one VIO, which is either a SF-VIO or an SR-VIO, and MUST follow one or more RTOs. There can be at most one such sequence of RTO(s) and an Via Information Option. A track is identified by a tuple DODAGID, TrackID and each route within a Track is indexedPDR message, used bya SegmentID. A P-DAO MUST be sent from the address of the Root that serves as DODAGID for the main DODAG. It MUST be sentan LLN node toa GUA or a ULA of either the ingress or the egress of the Segment, more below. If the 'K' Flag is present in the P-DAO, and unless the P-DAO does not reach it,request theingressformation ofthe Segment is the node that acknowledges the message, usingaDAO-ACK that MUST be sent back to the address that serves as DODAGIDnew Track forthe main DODAG. Like a classical DAO message, a P-DAO causes a change of state only if it is "new" per section 9.2.2. "Generation of DAO Messages" of the RPL specification [RPL];which this node isdetermined using the Segment Sequence information from the VIO as opposed to the Path Sequence from a TIO. Also, a Segment Lifetime of 0 in a VIO indicatesIngress. Note that theprojected route associated to the Segment is to be removed. There are two kinds of operationnamespace for theProjected Routes, the Storing Mode and the Non-Storing Mode. * The Non-Storing Mode is discussed in Section 7.3.2. A Non-Storing Mode P-DAO carries an SR-VIO with the loose list of Via Addresses that forms a source-routed Segment to the Track Egress. The recipient of the P-DAOTrackID is owned by theTrack Ingress; it MUST install a source-routed state to the Track EgressIngress node, andreply to the Root directly using a DAO-ACK message if requested to. * The Storing Mode is discussed in Section 7.3.1. A Storing Mode P-DAO carries a SF-VIO with the strict list of Via Addresses from the ingress to the egress of the Segment in the data path order. The routers listed in the Via Addresses, except the egress, MUST install a routing state to the Target(s) via the next Via Addressin theSF-VIO. In normal operations, the P-DAO is propagated along the chain of Via Routers from the egress router of the path till the ingress one, which confirms the installation to the Root with a DAO-ACK message. In caseabsence of aforwarding error along a Projected Route, an ICMP error is sent to the Root with a new Code "Error in Projected Route" (See Section 11.13). The Root can then modify or remove the Projected Route. The "Error in Projected Route" message has the same format as the "Destination Unreachable Message", as specified in RFC 4443 [RFC4443]. The portion of the invoking packet that is sent back in the ICMP message SHOULD record at least up to the RH if one is present, and this hop of the RH SHOULDPDR, there must beconsumed by this node so that the destination in the IPv6 header issome procedure for thenext hop that this node could not reach. if a 6LoWPAN Routing Header (6LoRH) [RFC8138] is usedRoot tocarry the IPv6 routing informationassign TrackIDs inthe outer header thenthatwhole 6LoRH information SHOULD be present in the ICMP message. The sender and exact operation depend on the Mode and is describednamespace while avoiding collisions, more in Section7.3.2 and Section 7.3.1 respectively. 7.1. Requesting a Track A Node is free to ask the Root for a new Track for which it will be Ingress at any time. This is done with a6.2. The PDRmessage, that indicatessignals the desired TrackID and the duration for which the Track should be established. Upon a PDR, the Root MAY install thenecessary Segments,Track as requested, in which case it answers with a PDR-ACK indicating the granted Track Lifetime. All the Segments MUST be of a same mode, either Storing or Non-Storing. All the Segments MUST be created with the same TrackID and the same DODAGID signaled in the P-DAO. The Rootis free to designdesigns the Track as itwishes,sees best, andto changeupdates / changes the Segments overtime to serve the Track asneeded, without notifyingneeded. There is no notification to theresquesting Node.requesting node when those changes happen. The Segment Lifetime in the P-DAO messages does not need to be aligned to the Requested Lifetime in the PDR, or between P-DAO messages for different Segments. The Root may use shorter lifetimes for the Segments and renew them faster than the Track is, or longer lifetimes in which case it will need to tear down the Segments if the Track is not renewed. When the Track Lifetime that was returned in the PDR-ACK is close toelapse,elapse - vs. theresquesting Node needstrip time from the node to the Root, the requesting node SHOULD resend a PDR using the TrackID in the PDR-ACK to extend the lifetime of the Track, else the Track will time out and the Root will tear down the whole structure. If the Track fails and cannot be restored, the Root notifies theresquesting Noderequesting node asynchronously with a PDR-ACK with a Track Lifetime of 0, indicating that the Track has failed, and a PDR-ACK Status indicating the reason of the fault.7.2.6.2. Identifying a Track RPL defines the concept of an Instance to signal an individual routingtopology but does not have a concept of an administrative distance, which exists in certain proprietary implementations to sort out conflicts betweentopology, and multiplesourcestopologies can coexist in the same network. The RPLInstanceID is tagged in the RPI ofrouting information within one routing topology.every packet to signal which topology the packet actually follows. This draft leverages the RPL Instance model as follows: * The Root MAY use P-DAO messages to add better routes in the main (Global) RPL Instance in conformance with the routing objectives in that Instance. To achieve this, the Root MAY installan Storing- Mode P-Routea Segment along a path down the main Non-Storing Mode DODAG. This enables a loose source routing and reduces the size of the Routing Header, see Appendix A.1. The Root MAY also install a Track Leg across the Main DODAG to complement the routing topology. When addingan Storing-Modea P-Route to themainRPLInstance,Main DODAG, the Root MUST set the RPLInstanceID field of the P-DAOmessageBase Object (see section 6.4.1. of [RPL]) to the RPLInstanceID of themainMain DODAG, and MUST NOT use the DODAGID field. AProjected RouteP-Route provides a longer match to the Target Address than the default route via the Root, so it is preferred.Once the Projected Route is installed, the intermediate nodes listed in the SF-VIO after first one (i.e. The ingress) can be elided from the RH in packets sent along the Segment signaled in the P-DAO. The resulting loose source routing header indicates (one of) the Target(s) as the next entry after the ingress.* The Root MAY also use P-DAO messages to install aspecificTrack as an independent routing topology (say, Traffic Engineered)path as a Serial or as a Complex Track,toaachieve particularendpoint that is the Track Egress. In that case,routing characteristics from an Ingress to an Egress Endpoints. To achieve this, the Root MUSTinstallset up aLocallocal RPL Instance (see section 5 of [RPL]), and the Local RPLInstanceIDis calledserves as TrackID.In that case, theThe TrackID MUST be unique for theGlobal UniqueIPv6Address (GUA)ULA orUnique-Local Address (ULA)GUA of the Track Ingress that serves as DODAGID for the Track. This way, a Track is uniquely identified by the tuple (DODAGID, TrackID) where the TrackID is always represented with the D flag set to 0 (see also section 5.1. of [RPL]), indicating when used in an RPI that the source address of the IPv6 packet signals the DODAGID. The P-DAO Base Object MUST indicate the tuple (DODAGID, TrackID) that identifies the Track as shown in Figure 3, and the P-RouteID that identifies the P-Route MUST be signaled in the VIO as shown in Figure 9. The Track Ingress is the root of the DODAG ID formed by the local RPL Instance. It owns the namespace of its TrackIDs, so it can pick any unused value to request a new Track with a PDR.TheIn a particular deployment where PDR are not used, the namespace can be delegated to the main Root, which can assign the TrackIDs for the Tracks it creates without collision. With this specification, the Root is aware of all the active Tracks, so it can also pick any unused value to form Tracks without a PDR. To avoid a collision of the Root and the Track Ingress picking the same value at the same time, it is RECOMMENDED that the Track Ingress starts allocating the ID value of the Local RPLInstanceID (see section 5.1. of[RPL]) used as TrackIDs with the value 0 incrementing, while the Root starts with 63 decrementing. This way, a Track is uniquely identified[RPL]) used as TrackIDs with the value 0 incrementing, while the Root starts with 63 decrementing. 6.3. Installing a Track A Serial Track can be installed by a single P-Route that signals the sequence of consecutive nodes, either in Storing Mode as a single- Segment Track, or in Non-Storing Mode as a single-Leg Track. A single-Leg Track can be installed as a loose Non-Storing Mode P-Route, in which case the next loose entry must recursively be reached over a Serial Track. A Complex Track can be installed as a collection of P-Routes with the same DODAGID and Track ID. The Ingress of a Non-Storing Mode P-Route is the owner and Root of the DODAGID. The Ingress of a Storing Mode P-Route must be either the owner of the DODAGID, or a hop of a Leg of the same Track. In the latter case, the Targets of the P-Route must include the next hop of the Leg if there is one, to ensure forwarding continuity. In the case of a Complex Track, each Segment is maintained independently and asynchronously by the Root, with its own lifetime that may be shorter, the same, or longer than that of the Track. A route along a Track for which the TrackID is not the RPLInstanceID of the Main DODAG MUST be installed with a higher precedence than the routes along the Main DODAG, meaning that: * Longest match MUST be the prime comparison for routing. * In case of equal length match, the route along the Track MUST be preferred vs. the one along the Main DODAG. * There SHOULD NOT be 2 different Tracks leading to the same Target from same Ingress node, unless there's a policy for selecting which packets use which Track; such policy is out of scope. * A packet that was routed along a Track MUST NOT be routed along the main DODAG again; if the destination is not reachable as a neighbor by the node where the packet exits the Track then the packet MUST be dropped. 6.3.1. Signaling a Projected Route This draft adds a capability whereby the Root of a main RPL DODAG installs a Track as a collection of P-Routes, using a Projected-DAO (P-DAO) message for each individual Track Leg or Segment. The P-DAO signals a collection of Targets in the RPL Target Option(s) (RTO). Those Targets can be reached via a sequence of routers indicated in a VIO. Like a classical DAO message, a P-DAO causes a change of state only if it is "new" per section 9.2.2. "Generation of DAO Messages" of the RPL specification [RPL]; this is determined using the Segment Sequence information from the VIO as opposed to the Path Sequence from a TIO. Also, a Segment Lifetime of 0 in a VIO indicates that the P-Route associated to the Segment is to be removed. There are two Modes of operation for the P-Routes, the Storing and the Non- Storing Modes. A P-DAO message MUST be sent from the address of the Root that serves as DODAGID for the Main DODAG. It MUST contain either exactly one sequence of one or more RTOs followed one VIO, or any number of sequences of one or more RTOs followed by one or more TIOs. The former is thetuple (DODAGID, TrackID)normal expression for this specification, where as theTrackID is always represented with the D flag setlatter corresponds to0. The Track Egress Address and the TrackID MUST be signaled intheP-DAO message as shownvariation for lesser constrained environments described inFigure 1. 7.3. Installing a TrackSection 7.2. AStoring-ModeP-DAOcontains an SF-VIOthatsignals the strict sequence of consecutive nodes to form a segment betweencreates or updates asegment ingress andTrack Leg MUST be sent to asegment egress (both included). It installsGUA or arouteULA ofa higher precedence alongthesegment towardsIngress of theTargets indicated inLeg; it must contain theTarget Options. The segment is includedfull list of hops ina DODAG indicated bythe Leg unless the Leg is being removed. A P-DAOBase Object,thatmay be the one formed by the main RPL Instance, orcreates a new Trackassociated withSegment MUST be sent to alocal RPL Instance. A Track Egress is signaled asGUA or aTarget inULA of theP-DAO,Segment Egress andasMUST signal thelast entry is an SF-VIOfull list of hops in Segment; alast segment towards that Egress. A Non-Storing-ModeP-DAOsignalsthat updates (including deletes) astrict or loose sequencesection ofnodes betweena Segment MUST be sent to theTrack Ingress (excluded)first node after the modified Segment anda Track Egress (included). It installs a source-routed pathsignal the full list ofa higher precedence withinhops in theTrack indicated bysection starting at theP-DAO Base Object, towardsnode that immediately precedes theTargets indicatedmodified section. In Non-Storing Mode, as discussed in Section 6.3.3, theTarget Options. The source-routed path requires a Source-Routing header which implies an encapsulation to addRoot sends theSRHP-DAO toan existing packet. The next entry inthesequence must be either a neighbor ofTrack Ingress where theprevious entry, or reachable as a Target via another Projected Route, either Storing or Non-Storing. If itsource-routing state isreachable over a Storing Mode Projected Route, the next entryapplied, whereas in Storing Mode, theloose sequenceP-DAO is sent to theTarget of a previous segment and the ingress of a next segment; the segments are associated withlast node on thesame Track, which avoidsinstalled path and forwarded in theneed of an encapsulation. Conversely, if it is reachable overreverse direction, installing aNon-StoringStoring ModeProjected Route, the next loose source routed hop ofstate at each hop, as discussed in Section 6.3.2. In both cases theinnerTrack Ingress isa Target of a previous Track andtheingressowner ofa nextthe Track,which requires a de-anda re-encapsulation. A Serial Track is installed by a single Projected Routes that signalsit generates thesequence of consecutive nodes, either in Storing or Non-Storing Mode.P-DAO-ACK when the installation is successful. Ifcan be a loose Non-Storing Mode Projected Route,the 'K' Flag is present inwhich casethenext loose entryP-DAO, the P-DAO mustrecursively be reached over a Serial Track. A Complex Track canbeinstalled asacknowledged using acollection of Projected Routes withDAO-ACK that is sent back to thesame DODAGID and Track ID. The Ingressaddress ofa Non-Storing Mode Projected Route must betheowner ofRoot from which theDODAGID. The Ingress of a Storing Mode Projected Route must be eitherP-DAO was received. In most cases, theownerfirst node of theDODAGID,Leg, Segment, orthe egressupdated section of the Segment is the node that sends the acknowledgment. The exception to the rule is when an intermediate node in a Segment fails to forward aprecedingStoring ModeProjected RouteP-DAO to the previous node in thesame Track.SM-VIO. In a No-Path Non-Storing Mode P-DAO, thelatter case,SRH-6LoRH MUST NOT be present in theTargets ofNSM-VIO; theProjected Route must be Targets ofstate in thepreceding Projected Route to ensureIngress is erased regardless. In all other cases, a VIO MUST contain at least one Via Address, and a Via Address MUST NOT be present more than once, which would create a loop. A node thatthey are visible fromprocesses a VIO MAY verify whether one of these conditions happen, and when so, it MUST ignore thetrack Ingress. 7.3.1. Storing-Mode P-Route Profile 1 extendsP-DAO and reject it with a RPLoperationRejection Status of "Error ina Non-Storing Mode network with Storing-Mode Projected RoutesVIO" in the DAO-ACK, see Section 10.14. Other errors than those discussed explicitely thatinstall segments alongprevent themain DODAG and enable to loose source routing betweeninstalling theRoot androute are acknowledged with a RPL Rejection Status of "Unqualified Rejection" in thetargets. 7.3.1.1.DAO-ACK. 6.3.2. Installing aStoring-ModeTrack Segment with a Storing Mode P-Route As illustrated in Figure9,11, a Storing Mode P-DAOthat carries a SF-VIO enables the Root to installinstalls astatefulroute along the Segment signaled by the SM-VIO towardsa collection ofthe Targetsalong aindicated in the Target Options. The Segmentbetweenis to be included in aTrack Ingress andDODAG indicated by the P-DAO Base Object, that may be the one formed by the RPL Main DODAG, or a TrackEgress usingassociated with aprojected DAO Message.local RPL Instance. ------+--------- | Internet | +-----+ | | BorderRouterrouter | | (RPL Root) +-----+ | ^ | | | DAO | ACK | o o o o | | | 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 o o o o o o o v | DAO v . o o LLN o o o | o o o o o Loose Source Route Path | o o o oFrom Root To Destinationv Figure9:11: Projecting a route In order to install the relevant routing state along the Segment , the Root sends a unicast P-DAO message to the Track Egress router of the routing Segment that is being installed. The P-DAO message contains aSF-VIOSM-VIO with thedirectstrict sequence of Via Addresses. TheSF-SM- VIO follows one or more RTOs indicating the Targets to which the Track leads. TheSF-VIOSM-VIO contains a Segment Lifetime for which the state is to be maintained. The Root sends the P-DAO directly to theegressEgress node of the Segment. In that P-DAO, the destination IP address matches the last Via Address in theSF-VIO.SM-VIO. This is how theegressEgress recognizes its role. In a similar fashion, theingressSegment Ingress node recognizes its role as it matches first Via Address in theSF-VIO.SM-VIO. 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 already able to route to the Target(s) based on itsown.existing tables. If one of the Targets is not known, the node MUST answer to the Root with anegativeDAO-ACK listing the unreachable Target(s)that could not be located (suggestedin an RTO and a rejection status10 to be confirmed by IANA).of "Unreachable Target". If theegressEgress node can reach all the Targets, then it forwards the P-DAO with unchanged content to itsloosepredecessor in the Segment as indicated in the list of Via Information options, and recursively the message is propagated unchanged along the sequence of routers indicated in the P-DAO, but in the reverse order, fromegressEgress toingress.Ingress. The address of the predecessor to be used as destination of the propagated DAO message is found in the Via Address the precedes the one that contain the address of the propagating node, which is used as source of the message. Upon receiving a propagated DAO, all except the EgressRouterrouter MUST install a route towards the DAO Target(s) via their successor in theSF-VIO.SM-VIO. A router that cannot store the routes to all the Targets in a P-DAO MUST reject the P-DAO by sending a DAO-ACK to the Root with a Rejection Status of "Out of Resources" as opposed to forwarding the DAO to its predecessor in the list. The router MAY install additional routes towards the VIA Addresses that are theSF-VIOSM-VIO afterthe next one,self, if any, but in case of a conflict or a lack of resource, the route(s) to the Target(s)have precedence.are the ones that must be installed in priority. If a router cannot reach its predecessor in theSF-VIO,SM-VIO, the router MUSTanswersend the DAO-ACK to the Root with anegative DAO-ACK indicating the successor that is unreachable (suggested status 11 to be confirmed by IANA).Rejection Status of "Predecessor Unreachable". The process continues till the P-DAO is propagated toingressIngress router of the Segment, which answers with a DAO-ACK to the Root. The Root always expects a DAO-ACK, either from the Track Ingress with a positive status or from any node along the segment with a negative status. If the DAO-ACK is not received, the Root may retry the DAO with the same TID, or tear down the route.7.3.1.2. Maintaining and Tearing Down6.3.3. Installing a Track Leg with aStoring-ModeNon-Storing Mode P-RouteA Segment Lifetime of 0As illustrated in Figure 12, aVIO is used to clean up the state. TheNon-Storing Mode P-DAOis forwarded as described above, but the DAO is interpreted as a No-Path DAO and results in cleaning up existing state as opposed to refreshing an existing one or installinginstalls anew one. Note that the continuity ofsource-routed path within thesegment may be broken; this happens ifTrack indicated by thebidirectional connectivity between contiguous hops ofP-DAO Base Object, towards thesegment is lost. In that caseTargets indicated in theRoot needsTarget Options. The source-routed path requires a Source-Routing header which implies an IP-in-IP encapsulation tosendadd theprojected DAOSRH toone or more intermediate node(s) as opposedan existing packet. It is sent to theegress node, indicatingTrack Ingress which creates aportion of segment that is being replaced or cleaned up. Attunnel associated with theextreme,Track, and connected routes over theP-DAO updates only one node,tunnel to the Targets inwhich case it contains only one VIO. In case of a forwarding error along an Storing-Mode P-Route,thenode that fails to forward SHOULD send an ICMP error withRTO. The tunnel encapsulation MUST incorporate acode "Error in Projected Route" torouting header via theRoot. Failure to do so may resultlist addresses listed inpacket loss and wasted resources alongtheProjected Route that is broken. 7.3.2. Non-Storing-Mode P-Route As illustratedVIO inFigure 10, a P-DAO that carries an SR-VIO enablestheRoot to install a source-routed path from asame order. The content of the NSM-VIO starting at the first SRH-6LoRH header MUST be used verbatim by the Track Ingresstowardswhen it encapsulates aTarget alongpacket to forward it over themain DODAG.Track. ------+--------- | Internet | +-----+ | | BorderRouterrouter | | (RPL Root) +-----+ | P ^ ACK | Track | DAO | o o o o Ingress X V | X o o o o o o o X o X Source o o o o o o o o X o o X Routed o o ° o o o o X o X Segment o o o o o o o o XTrackEgress X o o o o oEgress| Target o o LLN o o o o o odestination LLNFigure10:12: Projecting a Non-Storing Route The next entry in the source-routed path must be either a neighbor of the previous entry, or reachable as a Target via another P-Route, either Storing or Non-Storing, which implies that the nested P-Route has to be installed before the loose sequence is, and that P-Routes must be installed from the last to the first along the datapath. For instance, a Segment of a Track must be installed before the Leg(s) of the same Track that use it, and stitched Segments must be installed in order from the last that reaches to the Targets to the first. If the next entry in the loose sequence is reachable over a Storing Mode P-Route, it MUST be the Target of a Segment and the Ingress of a next segment, both already setup; the segments are associated with the same Track, which avoids the need of an additional encapsulation. For instance, in Section 3.4.1.3, Segments A==>B-to-C and C==>D==>E-to-F must be installed with Storing Mode P-DAO messages 1 and 2 before the Track A-->C-->E-to-F that joins them can be installed with Non-Storing Mode P-DAO 3. Conversely, if it is reachable over a Non-Storing Mode P-Route, the next loose source-routed hop of the inner Track is a Target of a previously installed Track and the Ingress of a next Track, which requires a de- and a re-encapsulation when switching the outer Tracks that join the loose hops. This is examplified in Section 3.4.2.3 where Non-Storing Mode P-DAO 1 and 2 install strict Tracks that Non- Storing Mode P-DAO 3 joins as a super Track. In such a case, packets are subject to double IP-in-IP encapsulation. 6.4. Tearing Down a P-Route A P-DAO with a lifetime of 0 is interpreted as a No-Path DAO and results in cleaning up existing state as opposed to refreshing an existing one or installing a new one. To tear down a Track, the Root must tear down all the Track Segments and Legs that compose it one by one. Since the state about a Leg of a Track is located only the Ingress Node, the Root cleans up the Leg by sending an NSM-VIO to the Ingress indicating the TrackID and the P-RouteID of the Leg being removed, a Segment Lifetime of 0 and a newer Segment Sequence. The SRH-6LoRH with the Via Addresses in the NSM-VIO are not needed and MUST be omitted. Upon that NSM-VIO, the Ingress node removes all state for that Track if any, and replies positively anyway. The Root cleans up a section of a Segment by sending an SM-VIO to the last node of the Segment, with the TrackID and the P-RouteID of the Segment being updated, a Segment Lifetime of zero (0) and a newer Segment Sequence. The Via Addresses in the SM-VIO indicates the section of the Segment being modified, from the first to the last node that is impacted. This can be the whole Segment if it is totally removed, or a sequence of one or more nodes that have been bypassed by a Segment update. The No-Path P-DAO is forwarded normally along the reverse list, even if the intermediate node does not find a Segment state to clean up. This results in cleaning up the existing Segment state if any, as opposed to refreshing an existing one or installing a new one. 6.5. Maintaining a Track Repathing a Track Segment or Leg may cause jitter and packet misordering. For critical flows that require timely and/or in-order delivery, it might be necessary to deploy the PAREO functions [RAW-ARCHI] over a highly redundant Track.. This specification allows to use more than one Leg for a Track, and 1+N packet redundancy. This section provides the steps to ensure that no packet is lost due to the operation itself. This is ensured by installing the new section from its last node to the first, so when an intermediate node installs a route along the new section, all the downstream nodes in the section have already installed their own. The disabled section is removed when the packets in-flight are forwarded along the new section as well. 6.5.1. Maintaining a Track Segment To modify a section of a Segment between a first node and a second, downstream node (which can be the Ingress and Egress), while conserving those nodes in the Segment, the Root sends an SM-VIO to the second node indicating the sequence of nodes in the new section of the Segment. The SM-VIO indicates the TrackID and the P-RouteID of the Segment being updated, and a newer Segment Sequence. The P-DAO is propagated from the second to the first node and on the way, it updates the state on the nodes that are common to the old and the new section of the Segment and creates a state in the new nodes. When the state is updated in an intermediate node, that node might still receive packets that were in flight from the Ingress to self over the old section of the Segment. Since the remainder of the Segment is already updated, the packets are forwarded along the new version of the Segment from that node on. After a reasonable time to enable the deprecated sections to empty, the root tears down the remaining section(s) of the old segments are teared down as described in Section 6.4. 6.5.2. Maintaining a Track Leg This specification allows to add Legs to a Track by sending a Non- Storing Mode P-DAO to the Ingress associated to the same TrackID, and a new Segment ID. If the Leg is loose, then the Segments that join the hops must be created first. It makes sense to add a new Leg before removing one that is misbehaving, and switch to the new Leg before removing the old. It is also possible to update a Track Leg by sending a Non-Storing Mode P-DAO to the Ingress with the same Segment ID, an incremented Segment Sequence, and the new complete listy of hops in the NSM-VIO. Updating a live Leg means changing one or more of the intermediate loose hops, and involves laying out new Segments from and to the new loose hops before the NSM-VIO for the new Leg is issued. Packets that are in flight over the old version of the Track Leg still follow the old source route path over the old Segments. After a reasonable time to enable the deprecated Segments to empty, the root tears down those Segments as described in Section 6.4. 6.6. Encapsulating and Forwarding Along a Track When forwarding a packet to a destination for whichthea router determines that routing happens via a TrackTarget,for which it is Ingress, the routerinsertsmust encapsulated the packet using IP-in-IP to add the Source Routing Headerin the packetwith the final destinationatset to the Track Egress.In orderThough fragmentation is possible in a 6LoWPAN LLN, e.g., using [6LoWPAN], [RFC8930], and/or [RFC8931], it is RECOMMENDED tosignalallow an MTU that is larger than 1280 in theSegment,main DODAG and allows for therouter encapsulatesadditional headers while exposing only 1280 to the 6LoWPAN Nodes as indicated by section 4 of [6LoWPAN]. All properties of a Track operations are inherited form the main RPL Instance that is used to install the Track. For instance, the use of compression per [RFC8138] is determined by whether it is used in the RPL Main DODAG, e.g., by setting the "T" flag [TURN-ON_RFC8138] in the RPL configuration option. The Track Ingress that places a packet in a Track encapsulates it with an IP-in-IPheader andheader, a Routing Header, and an IPv6 Hop-by-Hop Option Header that contains the RPL Packet Information (RPI) as follows: * In the uncompressed form the source of the packet is the address that thisrouter,router uses as DODAGID for the Track, the destination is the first Via Address in theSR-VIO,NSM-VIO, and the RH is a Source Routing Header (SRH) [RFC6554] that contains the list of the remaining Via Addresses terminating by the Track Egress. * The preferred alternate in a network where 6LoWPAN Header Compression [RFC6282] is used is to leverage "IPv6 over Low-Power Wireless Personal Area Network (6LoWPAN) Paging Dispatch" [RFC8025] to compress the RPL artifacts as indicated in [RFC8138]. In that case, the source routed header is the exact copy of the (chain of) SRH-6LoRH found in theSR-VIO,NSM-VIO, also terminating by the Track Egress. The RPI-6LoRH is appended next, followed by an IP- in-IP 6LoRH Header that indicates the IngressRouterrouter in the Encapsulator Address field, see as a similar case Figure 20 of [TURN-ON_RFC8138]. To signal the Track in the packet, this specification leverages the RPL Forwarding model follows: * In the data packets, the Track DODAGID and the TrackID MUST be respectively signaled as the IPv6 Source Address and the RPLInstanceID field of the RPI that MUST be placed in the outer chain of IPv6 Headers. The RPI carries a local RPLInstanceID called the TrackID, which, in association with the DODAGID, indicates the Track along which the packet is forwarded. The D flag in the RPLInstanceID MUST be set to 0 to indicate that the source address in the IPv6 header is set ot the DODAGID, more in Section 6.2. * This draft conforms to the principles of [RFC9008] with regards to packet forwarding and encapsulation along a Track, as follows: - With this draft, the Track is a RPL DODAG. From the perspective of that DODAG, the Track Ingress is the Root, the Track Egress is a RPL-Aware 6LR, and neighbors of the Track Egress that can be reached via the Track, but are external to it, are external destinations and treated as RPL-Unaware Leaves (RULs). The encapsulation rules in [RFC9008] apply. - If the Track Ingress is the originator of the packet and the Track Egress is the destination of the packet, there is no need for an encapsulation. - So the Track Ingress must encapsulate the traffic that it did not originate, and add an RPI. A packet that is being routed over the RPL Instance associated to a first Non-Storing Mode Track MAY be placed (encapsulated) in a second Track to cover one loose hop of the first Track as discussed in more details Section 3.4.2.3. On the other hand, a Storing Mode Track must be strict and a packet that it placed in a Storing Mode Track MUST follow that Track till the Track Egress. The forwarding of a packet along a track will fail if the Track continuity is broken,e.g.: * In the case of a strict path along a Segment, if the next strict hop is not reachable, the packet is dropped. * In the case of a loose source-routed path, when the loose next hop is not a neighbor, thereMUSTmust beeitherasegment forSegment of the same Track tothethat loose nexthop, on whichhop. When that is the case the packet is forwarded to the next hop along that segment, or a common neighbor with the loose next hop, on which case the packet is forwarded to that neighbor, or another Track to the loose next hop for which this node or a neighbor isIngress. InIngress; in thelatterlast case, another encapsulation takes place and the process possibly recurses; otherwise the packet is dropped. * When a Track Egress extracts a packet from a Track (decapsulates the packet), the destination of the inner packet must be either this node or a direct neighbor, or a Target of another Segment of the same Track for which this node is Ingress, otherwise the packet MUST be dropped. In case of a failure forwarding a packet along a Segment, e.g., the next hop is unreachable, the node that discovers the fault MUST send an ICMPv6 Error message [RFC4443] to the Root, with a new Code "Error in P-Route" (See Section 10.13). The Root can then repair by updating the broken Segment and/or Tracks, and in the case of a broken Segment, remove the leftover sections of the segment using SM- VIOs with a lifetime of 0 indicating the section ot one or more nodes being removed (See Section 6.5). In case of a permanent forwarding error along a Source Route path, the node that fails to forward SHOULD send an ICMP error with a code "Error in Source Routing Header" back to the source of the packet, as described in section 11.2.2.3. of [RPL]. Upon this message, the encapsulating node SHOULD stop using the source route path for a reasonable period of time which duration depends on the deployment, and it SHOULD send an ICMP message with a Code "Error inProjected Route"P-Route" to the Root. Failure to follow these steps may result in packet loss and wasted resources along the source route path that is broken.7.4. Forwarding AlongEither way, the ICMP message MUST be throttled in case of consecutive occurrences. It MUST be sourced at the ULA or a GUA that is used in this TrackThis draft leveragesfor theRPL Forwarding model follows: * Insource node, so thedata packets,Root can establish where theTrack DODAGIDerror happened. The portion of the invoking packet that is sent back in the ICMP message SHOULD record at least up to the RH if one is present, and this hop of theTrackID MUSTRH SHOULD berespectively signaled asconsumed by this node so that the destination in the IPv6Source Address andheader is theRPLInstanceID field ofnext hop that this node could not reach. if a 6LoWPAN Routing Header (6LoRH) [RFC8138] is used to carry theRPIIPv6 routing information in the outer header then thatMUSTwhole 6LoRH information SHOULD beplacedpresent in theouter chainICMP message. 6.7. Compression ofIPv6 Headers. The RPI carries a local RPLInstanceID calledtheTrackID, which,RPL Artifacts When using [RFC8138] inassociation withtheDODAGID, indicatesMain DODAG operated in Non-Storing Mode in a 6LoWPAN LLN, a typical packet that circulates in theTrackMain DODAG is formatted as shown in Figure 13, representing the case where : +-+ ... -+- ... -+- ... -+-+- ... +-+-+-+ ... +-+-+ ... -+ ... +-... |11110001| SRH- | RPI- | IP-in-IP | NH=1 |11110CPP| UDP | UDP | Page 1 | 6LoRH | 6LoRH | 6LoRH |LOWPAN_IPHC| UDP | hdr |Payld +-+ ... -+- ... -+- ... -+-+- ... +-+-+-+ ... +-+-+ ... -+ ... +-... <= RFC 6282 => <================ Inner packet ==================== = = Figure 13: A Packet as Forwarded alongwhichthe Main DODAG Since there is no page switch between the encapsulated packet and the encapsulation, the first octet of the compressed packet that acts as page selector isforwarded. The D flagactually removed at encapsulation, so the inner packet used in theRPLInstanceID MUST be set to 0descriptions below start with the SRH-6LoRH, and is verbatim the packet represented in Figure 13 from the second octet on. When encapsulating that inner packet toindicateplace it in the Track, the first header that the Ingress appends at the head of the inner packet is an IP-in-IP 6LoRH Header; in that header, the encapsulator address, which maps to the IPv6 source address in the uncompressed form, contains a GUA or ULA IPv6headeraddress of the Ingress node that serves as DODAG ID for the Track, expressed in the compressed form and using the DODAGID of the Main DODAG as compression reference. If the address isset otcompressed to 2 bytes, theDODAGID, moreresulting value for the Length field shown inSection 7.4. * This draft conformsFigure 14 is 3, meaning that theprinciplesSRH-6LoRH as a whole is 5-octets long. 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 6 | Hop Limit | Track DODAGID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- ... -+ Figure 14: The IP-in-IP 6LoRH Header At the head of the resulting sequence of[USEofRPLinfo]bytes, the track Ingress then adds the RPI that carries the TrackID as RPLinstanceID as a P- RPI-6LoRH Header, as illustrated in Figure 5, using the TrackID as RPLInstanceID. Combined withregardsthe IP-in-IP 6LoRH Header, this allows to identify the Track without ambiguity. The SRH-6LoRH is then added at the head of the resulting sequence of bytes as a verbatim copy of the content of the SR-VIO that signaled the selected Track Leg. 0 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 .. .. .. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- -+- -+ ... +- -+ |1|0|0| Size |6LoRH Type 0..4| Hop1 | Hop2 | | HopN | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- -+- -+ ... +- -+ Where N = Size + 1 Figure 15: The SRH 6LoRH Header The format of the resulting encapsulated packetforwarding and encapsulationin [RFC8138] compressed form is illustrated in Figure 16: +-+ ... -+-+-+- ... -+-+-+- ... -+-+-+-+-+- ... +-+-+-+-+-+-+- ... | Page 1 | SRH-6LoRH | P-RPI-6LoRH | IP-in-IP 6LoRH | Inner Packet +-+ ... -+-+-+- ... -+-+-+- ... -+-+-+-+-+- ... +-+-+-+-+-+-+- ... Signals : Loose Hops : TrackID : Track DODAGID : Figure 16: A Packet as Forwarded along aTrack. - InTrack 7. Lesser Constrained Variations 7.1. Storing Mode Main DODAG This specification expects thatcase,theTrackMain DODAG is operated in Non- Storing Mode. The reasons for that limitation are mostly related to LLN operations, power and spectrum conservation: * In Non-Storing Mode The Root already possesses theDODAG,DODAG topology, so theTrack Ingressadditional topological information is reduced to the siblings. * The downwards routes are updated with unicast messages to the Root, which ensures that the Root can reach back to the LLN nodes after a repair faster than in the case of Storing Mode. Also the Root can control the use of the path diversity in the DODAG to reach to the LLN nodes. For both reasons, Non-Storing Mode provides better capabilities for the Root to maintain the P-Routes. * When the Main DODAG is operated in Non-Storing Mode, P-Routes enable loose Source Routing, which is only an advantage in that mode. Storing Mode does not use Source Routing Headers, and does not derive theTrack Egresssame benefits from this capability. On the other hand, since RPL is aRAL, and neighborsLayer-3 routing protocol, its applicability extends beyond LLNs to a generic IP network. RPL requires fewer resources than alternative IGPs like OSPF, ISIS, EIGRP, BABEL or RIP at the expense of a route stretch vs. theTrack Egressshortest path routes to a destination that those protocols compute. P-Routes add the capability to install shortest and/or constrained routes to special destinations such as discussed in section A.9.4. of the ANIMA ACP [RFC8994]. In a powered and wired network, when enough memory to store the needed routes is available, the RPL Storing Mode proposes a better trade-off than the Non-Storing, as it reduces the route stretch and lowers the load on the Root. In that case, the control path between the Root and the LLN nodes is highly available compared to LLNs, and the nodes can be reachedviato maintain the P-Routes at most times. This section specifies the additions that are needed to support Projected Routes when the Main DODAG is operated in Storing Mode. As long as the RPI can be processed adequately by the dataplane, the changes to this specification are limited to the DAO message. The Track structure, routes and forwarding operations remain the same. In Storing Mode, the Root misses the Child to Parent relationship that forms the Main DODAG, as well as the sibling information. To provide that knowledge the nodes in the network MUST send additional DAO messages that areRULs.unicast to the Root as Non-Storing DAO messages are. In the DAO message, the originating router advertises a set of neighbor nodes using Sibling Information Options (SIO)s, regardless of the relative position in the DODAG of the advertised node vs. this router. Theencapsulation rulesDAO message MUST be formed as follows: * The originating router is identified by the source address of the DAO. That address MUST be the one that this router registers to neighbor routers so the Root can correlate the DAOs from those routers when they advertise this router as their neighbor. The DAO contains one or more sequences of one Transit Information Option and one or more Sibling Information Options. There is no RPL Target Option so the Root is not confused into adding a Storing Mode route to the Target. * The TIO is formed as in[USEofRPLinfo] apply. - IfStoring Mode, and theTrack IngressParent Address is not present. The Path Sequence and Path Lifetime fields are aligned with theoriginatorvalues used in the Address Registration of thepacketnode(s) advertised in the SIO, as explained in Section 9.1. of [RFC9010]. Having similar values in all nodes allows to factorise the TIO for multiple SIOs as done with [RPL]. * The TIO is followed by one or more SIOs that provide an address (ULA or GUA) of the advertised neighbor node. But the RPL routing information headers may not be supported on all type of routed network infrastructures, especially not in high-speed routers. When the RPI is not be supported in the dataplane, there cannot be local RPL Instances and RPL can only operate as a single topology (the Main DODAG). The RPL Instance is that of the Main DODAG and the Ingress node that encapsulates is not the Root. The routes along the Tracks are alternate routes to those available along the Main DODAG. They MAY conflict with routes to children and MUST take precedence in the routing table. The Targets MUST be adjacent to the Track Egress to avoid loops that may form if the packet is reinjected in thedestinationMain DODAG. 7.2. A Track as a Full DODAG This specification builds parallel or crossing Track Legs as opposed to a more complex DODAG with interconnections at any place desirable. The reason for that limitation is related to constrained node operations, and capability to store large amount of topological information and compute complex paths: * With this specification, thepacket, there isnode in the LLN has no topological awareness, and does not needfor anto maintain dynamic information about the link quality and availability. * The Root has a complete topological information and statistical metrics that allow it or its PCE to perform a global optimization of all Tracks in its DODAG. Based on that information, the Root computes the Track Leg and predigest the source route paths. * The node merely selects one of the proposed paths and applies the associated pre-computed routing header in the encapsulation.- SoThis alleviates both the complexity of computing a path and the compressed form of the routing header. The "Reliable and Available Wireless (RAW) Architecture/Framework" [RAW-ARCHI] actually expects the PSE at the Track Ingressmust encapsulateto react to changes in thetraffic that it did not originate,forwarding conditions along the Track, andadd an RPI inreroute packets to maintain the required degree of reliability. To achieve this, the PSE need the full richness of a DODAG to form anyfashion. A packetpath thatis being routed overcould make meet the SLAs. This section specifies theRPL Instance associatedadditions that are needed toa first Non-Storing Modeturn the TrackMAY be placed (encapsulated) ininto asecond Trackfull DODAG and enable the main Root tocover one loose hop ofprovide thefirst Track. Onnecessary topological information to theother hand, a Storing ModeTrackmust be strict and a packetIngress. The expectation is thatit placedthe metrics that the PSE uses are of an order other than that of the PCE, because of the difference of time scale between routing and forwarding, mor e ina Storing Mode Track MUST follow[RAW-ARCHI]. It follows thatTrack tilltheTrack Egress. When a Track Egress extracts a packetPSE will learn the metrics it needs froma Track (decapsulatesan alternate source, e.g., OAM frames. To pass thepacket),topological information to theDestination ofIngress, theinner packet MUST be either this node or a direct neighbor, orRoot uses aTarget of another SegmentP-DAO messages that contains sequences of Target and Transit Information options that collectively represent the Track, expressed in the sameTrack for which this nodefashion as in classical Non-Storing Mode. The difference as that the Root isingress, otherwisethepacket MUST be dropped. All properties of a Track operations are inherited formsource as opposed to themain RPL Instancedestination, and can report information on many Targets, possibly the full Track, with one P-DAO. Note thatis used to installtheTrack. For instance,Path Sequence and Lifetime in theuse of compression per [RFC8138] is determinedTIO are selected bywhether it is usedthe Root, and that the Target/Transit information tupples in themain instance, e.g.,P-DAO are not those received bysettingthe"T" flag [TURN-ON_RFC8138]Root in theRPL configuration option.DAO messages about the said Targets. The Track may follow sibling routes and does not need to be congruent with the Main DODAG. 8. Profiles This document provides a set of tools that may or may not be needed by an implementation depending on the type of application it serves. This sections described profiles that can be implemented separately and can be used to discriminate what an implementation can and cannot do. This section describes profiles that enable to implement only a portion of this specification to meet a particular use case. Profiles 0 to 2 operate in the Main RPL Instance and do not require the support of local RPL Instances or the indication of the RPL Instance in the data plane. Profile 3 and above leverage Local RPL Instances to build arbitrary Tracks rooted at the Track Ingress and using its namespace for TrackID. Profiles 0 and 1 are REQUIRED by all implementations that may be used in LLNs; this enables to use Storing Mode to reduce the size of the Source Route Header in the most common LLN deployments. Profile 2 is RECOMMENDED in high speed / wired environment to enable traffic Engineering and network automation. All the other profile / environment combinations are OPTIONAL. Profile 0 Profile 0 is thelegacyLegacy support of [RPL] Non-StoringMode.Mode, with default routing Northwards (up) and strict source routing Southwards (down the main DOAG). It provides the minimal common functionality that must be implemented as a prerequisite to all the Track-supporting profiles. The other Profiles extend Profile 0 with selected capabilities that this specification introduces on top. Profile 1(Storing-Mode(Storing Mode P-Route Segments along themainMain DODAG) Profi le 1 does not create new paths; compared to Profile 0, it combines Storing andNon- StoringNon-Storing Modes to balance the size of therouting headerRouting Header in the packet and the amount of state in the intermediate routers in a Non-Storing Mode RPL DODAG. Profile 2(Non-Storing-Mode(Non-Storing Mode P-Route Segments along themainMain DODAG) P rofile 2 extends Profile 0 with Strict Source-RoutingNon-Storing-Non-Storing ModeProjected RoutesP-Routes along themain DODAG.Main DODAG, which is the same as Profile 1 but using NSM VIOs as opposed to SM VIOs. Profile 2 provides the same capability to compress the SRH in packets down themainMain DODAG as Profile 1, but it require an encapsulation, in order to insert an additional SRH between the loose source routing hops.Profile 3 Profile 3 and above buildIn that case, the Tracks MUST be installed as subTracks of the Main DODAG, the main RPL Instance MUST be used as TrackID, and the Ingress node thatdoencapsulates is notnecessarily followthemain DODAG.Root as it does not own the DODAGID. Profile 3 In order to form the best path possible, those Profiles require the support of Sibling Information Option to inform the Root of additional possible hops. Profile 3 extends Profile 1 with additionalStoring-Mode Projected RoutesStoring Mode P-Routes that install segments that do not follow themainMain DODAG. If the Segment Ingress (in theSF-VIO)SM- VIO) is the same as the IPv6 Address of the Track Ingress (in the projected DAO base Object), the P-DAO creates an implicit Track between the Segment Ingress and the Segment Egress. Profile 4 Profile 4 extends Profile 2 with Strict Source-RoutingNon-Storing-Mode Projected RoutesNon-Storing Mode P-Routes to form East-West Tracks that are inside themain DODAG.Main DODAG but do not necessarily follow it. A Track is formed as one or more strict source source routed paths between the Root that is the Track Ingress, and the Track Egress that is the lastnodenode. Profile 5 Profile 5 Combines Profile 4 with Profile 1 and enables to loose source routing between the Ingress and the Egress of the Track. As in Profile 1,Storing-Mode Projected RoutesStoring Mode P-Routes connect the dots in the loose source route. Profile 6 Profile 6 Combines Profile 4 with Profile 2 and also enables to loose source routing between the Ingress and the Egress of the Track.9. Example Track Signaling The remainder of the section provides an example of how a Track can be signaled ===> F A ===> B ===> C ===> D===> E < ===> G Figure 11: Reference Track A is Track ingress, E is track Egress. C is stitching point. F and G are E's neighbors, "external" to the Track, and reachable from A over the Track A->E. In a general manner we want: * P-DAO 1 signals C==>B==>E * P-DAO 2 signals A==>B==>C * P-DAO 3 signals F and G via the A==>E Track P-DAO 3 being loose, it can only be non-storing. Note that since the Root is always the ingress of a Track, and all SR-VIOs are now Track, the Root being signaled in the DAO base object can now be elided in the VIA list in SR-VIO. This enables the construction by the main root of the RFC 8138 optimized SRH-6LoRH in the SR-VIO, to be placed as isProfile 7 Profile 7 implements profile 5 inthe packet by the Root. 9.1. Using Storing-Mode Segments A==>B==>C and C==>D==>E are segments ofasame Track. NoteMain DODAG thatthe storing mode signaling imposes strict continuity in a segment. One benefit of strict routingisthat loops are avoided along the Track. 9.1.1. Stitched Segments Storing-Mode P-DAO 1 and 2 are sent to E and C, as follows: +===============+==============+==============+ | Field | P-DAO 1 to E | P-DAO 2 to C | +===============+==============+==============+ | Mode | Storing |operated in Storing| +---------------+--------------+--------------+ | Track Ingress | A | A | +---------------+--------------+--------------+ | TrackID | (A, 129) | (A, 129) | +---------------+--------------+--------------+ | VIO | C, D, E | A, B, C | +---------------+--------------+--------------+ | Targets | E, F, G | E, F, G | +---------------+--------------+--------------+ Table 1: P-DAO Messages As a result the RIBs are setMode asfollows: +======+=============+=========+=============+==========+ | Node | Destination | Origin | Next Hop(s) | TrackID | +======+=============+=========+=============+==========+ | E | F, G | P-DAO 1 | Neighbor | (A, 129) | +------+-------------+---------+-------------+----------+ | D | E | P-DAO 1 | Neighbor | (A, 129) | +------+-------------+---------+-------------+----------+ | " | F, G | P-DAO 1 | E | (A, 129) | +------+-------------+---------+-------------+----------+ | C | D | P-DAO 1 | Neighbor | (A, 129) | +------+-------------+---------+-------------+----------+ | " | E, F, G | P-DAO 1 | D | (A, 129) | +------+-------------+---------+-------------+----------+ | B | C | P-DAO 2 | Neighbor | (A, 129) | +------+-------------+---------+-------------+----------+ | " | E, F, G | P-DAO 2 | C | (A, 129) | +------+-------------+---------+-------------+----------+ | A | B | P-DAO 2 | Neighbor | (A, 129) | +------+-------------+---------+-------------+----------+ | A | E, F, G | P-DAO 2 | B | (A, 129) | +------+-------------+---------+-------------+----------+ Table 2: RIB setting E recognizes that it is the Track Egress because it is both a Target and a Segment Endpoint. Packets originated by A to E, F, or G, do not require an encapsulation. In any fashion, the outer headers of the packets that are forwarded along the Track have the following settings: +========+===================+===================+================+ | Header | IPv6 Source Addr. | IPv6 Dest. Addr. | TrackIDpresented inRPI | +========+===================+===================+================+ | Outer | A | E, F or G | (A, 129) | +--------+-------------------+-------------------+----------------+ | Inner | X != A | E, F or G | N/A | +--------+-------------------+-------------------+----------------+ Table 3: Packet header settingsSection 7.1. Asan example, say that A has a packet for F. Using the RIB above: * From P-DAO 2: A forwards to B and B forwards to C. * From P-DAO 1: C forwards to D and D forwards to E. * From Neighbor Cache Entry: C delivers the packet to F. 9.1.2. External routes Storing-Mode P-DAOin Profile 1 and 2,and Non-Storing-Mode P-DAO 3, are sent to E, C and A, respectively, as follows: +===============+==============+==============+==============+ | | P-DAO 1 to E | P-DAO 2 to C | P-DAO 3 to A | +===============+==============+==============+==============+ | Mode | Storing | Storing | Non-Storing | +---------------+--------------+--------------+--------------+ | Track Ingress | A | A | A | +---------------+--------------+--------------+--------------+ | TrackID | (A, 129) | (A, 129) | (A, 129) | +---------------+--------------+--------------+--------------+ | VIO | C, D, E | A, B, C | E | +---------------+--------------+--------------+--------------+ | Targets | E | E | F, G | +---------------+--------------+--------------+--------------+ Table 4: P-DAO Messages As a resulttheRIBs are set as follows: +======+=============+=========+=============+==========+ | Node | Destination | Origin | Next Hop(s) |TrackID| +======+=============+=========+=============+==========+ | E | F, G | P-DAO 1 | Neighbor | (A, 129) | +------+-------------+---------+-------------+----------+ | D | E | P-DAO 1 | Neighbor | (A, 129) | +------+-------------+---------+-------------+----------+ | C | D | P-DAO 1 | Neighbor | (A, 129) | +------+-------------+---------+-------------+----------+ | " | E | P-DAO 1 | D | (A, 129) | +------+-------------+---------+-------------+----------+ | B | C | P-DAO 2 | Neighbor | (A, 129) | +------+-------------+---------+-------------+----------+ | " | E | P-DAO 2 | C | (A, 129) | +------+-------------+---------+-------------+----------+ | A | B | P-DAO 2 | Neighbor | (A, 129) | +------+-------------+---------+-------------+----------+ | A | E | P-DAO 2 | B | (A, 129) | +------+-------------+---------+-------------+----------+ | A | F, G | P-DAO 3 | E | (A, 129) | +------+-------------+---------+-------------+----------+ Table 5: RIB setting Packets from A to E do not require an encapsulation. In any fashion,is theouter headersRPLInstanceID of thepackets that are forwarded along the Track have the following settings: +========+===================+====================+================+ | Header | IPv6 Source Addr. | IPv6 Dest. Addr. | TrackID in RPI | +========+===================+====================+================+ | Outer | A | E | (A, 129) | +--------+-------------------+--------------------+----------------+ | Inner | X | E (X != A), F or G | N/A | +--------+-------------------+--------------------+----------------+ Table 6: Packet header settings As an example, say that A hasMain DODAG. Longest match rules decide whether a packetfor F. Using the RIB above: * From P-DAO 3: A encapsulates the packet the Track signaled by P-DAO 3, with the outer header above. Now the packet destinationisE. * From P-DAO 2: A forwards to B and B forwards to C. * From P-DAO 1: C forwards to D and D forwards to E; E decapsulates the packet. * From Neighbor Cache Entry: C delivers packets to F or G. 9.1.3. Segment Routing Storing-Mode P-DAO 1 and 2, and Non-Storing-Mode P-DAO 3, aresentto E, B and A, respectively, as follows: +===============+==============+==============+==============+ | | P-DAO 1 to E | P-DAO 2 to B | P-DAO 3 to A | +===============+==============+==============+==============+ | Mode | Storing | Storing | Non-Storing | +---------------+--------------+--------------+--------------+ | Track Ingress | A | A | A | +---------------+--------------+--------------+--------------+ | TrackID | (A, 129) | (A, 129) | (A, 129) | +---------------+--------------+--------------+--------------+ | VIO | C, D, E | A, B | C, E | +---------------+--------------+--------------+--------------+ | Targets | E | B, C | F, G | +---------------+--------------+--------------+--------------+ Table 7: P-DAO Messages As a result the RIBs are set as follows: +======+=============+=========+=============+==========+ | Node | Destination | Origin | Next Hop(s) | TrackID | +======+=============+=========+=============+==========+ | E | F, G | P-DAO 1 | Neighbor | (A, 129) | +------+-------------+---------+-------------+----------+ | D | E | P-DAO 1 | Neighbor | (A, 129) | +------+-------------+---------+-------------+----------+ | C | D | P-DAO 1 | Neighbor | (A, 129) | +------+-------------+---------+-------------+----------+ | " | E | P-DAO 1 | D | (A, 129) | +------+-------------+---------+-------------+----------+ | B | C | P-DAO 2 | Neighbor | (A, 129) | +------+-------------+---------+-------------+----------+ | A | B | P-DAO 2 | Neighbor | (A, 129) | +------+-------------+---------+-------------+----------+ | " | C | P-DAO 2 | B | (A, 129) | +------+-------------+---------+-------------+----------+ | " | E, F, G | P-DAO 3 | C, E | (A, 129) | +------+-------------+---------+-------------+----------+ Table 8: RIB setting Packets from A to E do not require an encapsulation, but carry a SRH via C. In any fashion, the outer headers of the packets that are forwardedalong theTrack have the following settings: +========+===================+====================+================+ | Header | IPv6 Source Addr. | IPv6 Dest. Addr. | TrackID in RPI | +========+===================+====================+================+ | Outer | A | C till C then E | (A, 129) | +--------+-------------------+--------------------+----------------+ | Inner | X | E (X != A), FMain DODAG orG | N/A | +--------+-------------------+--------------------+----------------+ Table 9: Packet header settings As an example, say that A has a packet for F. Using the RIB above: * From P-DAO 3: A encapsulates the packet the Track signaled by P-DAO 3, with the outer header above. Now the destinationrerouted inthe IPv6 Header is C, andaSRH signals the final destinationtrack. Profile 8 Profile 8 isE. * From P-DAO 2: A forwards to B and B forwards to C. * From P-DAO 3: C processes the SRH and sets the destinationoffered inthe IPv6 Header to E. * From P-DAO 1: C forwards to D and D forwards to E; E decapsulates the packet. * From the Neighbor Cache Entry: C delivers packets to F or G. 9.2. Using Non-Storing-Mode joining Tracks A==>B==>C and C==>D==>E are Tracks expressed as non-storing P-DAOs. 9.2.1. Stitched Tracks Non-Storing Mode P-DAO 1 and 2 are sent to C and A respectively, as follows: +===============+==============+==============+ | | P-DAO 1 to C | P-DAO 2 to A | +===============+==============+==============+ | Mode | Non-Storing | Non-Storing | +---------------+--------------+--------------+ | Track Ingress | C | A | +---------------+--------------+--------------+ | TrackID | (C, 131) | (A, 129) | +---------------+--------------+--------------+ | VIO | D, E | B, C | +---------------+--------------+--------------+ | Targets | F, G | E, F, G | +---------------+--------------+--------------+ Table 10: P-DAO Messages As a result the RIBs are set as follows: +======+=============+=========+=============+==========+ | Node | Destination | Origin | Next Hop(s) | TrackID | +======+=============+=========+=============+==========+ | E | F, G | ND | Neighbor | Any | +------+-------------+---------+-------------+----------+ | D | E | ND | Neighbor | Any | +------+-------------+---------+-------------+----------+ | C | D | ND | Neighbor | Any | +------+-------------+---------+-------------+----------+ | " | E, F, G | P-DAO 1 | D, E | (C, 131) | +------+-------------+---------+-------------+----------+ | B | C | ND | Neighbor | Any | +------+-------------+---------+-------------+----------+ | A | B | ND | Neighbor | Any | +------+-------------+---------+-------------+----------+ | " | C, E, F, G | P-DAO 2 | B, C | (A, 129) | +------+-------------+---------+-------------+----------+ Table 11: RIB setting Packets from A to E, F and G do not require an encapsulation, though it is preferred that A encapsulates and C decapsulates. Either way, they carry a SRH via B and C, and C needs to encapsulate to E, F, or G to add an SRH via D and E. The encapsulating headerspreparation ofpackets that are forwarded alongtheTrack between CRAW work, andE have the following settings: +========+===================+===================+================+ | Header | IPv6 Source Addr. | IPv6 Dest. Addr. | TrackID in RPI | +========+===================+===================+================+ | Outer | C | D till D then E | (C, 131) | +--------+-------------------+-------------------+----------------+ | Inner | X | E, F, or G | N/A | +--------+-------------------+-------------------+----------------+ Table 12: Packet header settings As an example, say that A has a packetforF. Using the RIB above: * From P-DAO 2: A encapsulates the packet with destination of F in the Track signaled by P-DAO 2. The outer header has source A, destination B,use cases where anSRH that indicates C as the next loose hop, and a RPI indicating a TrackId of 129 from A's namespace. * From the SRH: Packets forwarded by B have source A, destination C , a consumed SRH, and a RPI indicating a TrackId of 129 from A's namespace. C decapsulates. * From P-DAO 1: C encapsulates the packet with destination of Farbitrary node in theTrack signaled by P-DAO 1. The outer header has source C, destination D, an SRH that indicates E as the next loose hop, and a RPI indicating a TrackId of 131 from C's namespace. E decapsulates. 9.2.2. External routes Non-Storing Mode P-DAO 1 is sent to C and Non-Storing Mode P-DAO 2 and 3 are sent A, as follows: +===============+==============+==============+==============+ | | P-DAO 1 to C | P-DAO 2 to A | P-DAO 3 to A | +===============+==============+==============+==============+ | Mode | Non-Storing | Non-Storing | Non-Storing | +---------------+--------------+--------------+--------------+ | Track Ingress | C | A | A | +---------------+--------------+--------------+--------------+ | TrackID | (C, 131) | (A, 129) | (A, 141) | +---------------+--------------+--------------+--------------+ | VIO | D, E | B, C | E | +---------------+--------------+--------------+--------------+ | Targets | E | E | F, G | +---------------+--------------+--------------+--------------+ Table 13: P-DAO Messages As a resultnetwork can afford theRIBs are setsame code complexity asfollows: +======+=============+=========+=============+==========+ | Node | Destination | Origin | Next Hop(s) | TrackID | +======+=============+=========+=============+==========+ | E | F, G | ND | Neighbor | Any | +------+-------------+---------+-------------+----------+ | D | E | ND | Neighbor | Any | +------+-------------+---------+-------------+----------+ | C | D | ND | Neighbor | Any | +------+-------------+---------+-------------+----------+ | " | E | P-DAO 1 | D, E | (C, 131) | +------+-------------+---------+-------------+----------+ | B | C | ND | Neighbor | Any | +------+-------------+---------+-------------+----------+ | A | B | ND | Neighbor | Any | +------+-------------+---------+-------------+----------+ | " | C, E | P-DAO 2 | B, C | (A, 129) | +------+-------------+---------+-------------+----------+ | " | F, G | P-DAO 3 | E | (A, 141) | +------+-------------+---------+-------------+----------+ Table 14: RIB setting The encapsulating headers of packets that are forwarded along the Track between C and E have the following settings: +========+===================+===================+================+ | Header | IPv6 Source Addr. | IPv6 Dest. Addr. | TrackID in RPI | +========+===================+===================+================+ | Outer | C | D till D then E | (C, 131) | +--------+-------------------+-------------------+----------------+ | Middle | A | E | (A, 141) | +--------+-------------------+-------------------+----------------+ | Inner | X | E, F or G | N/A | +--------+-------------------+-------------------+----------------+ Table 15: Packet header settings As an example, say that A has a packet for F. Using the RIB above: * From P-DAO 3: A encapsulatesthepacket with destination of FRPL Root inthe Track signaled by P-DAO 3. The outer header has source A, destination E, andaRPI indicatingtraditional deployment. It offers aTrackId of 141 from A's namespace. This recurses with: * From P-DAO 2: A encapsulates the packet with destination of E infull DODAG visibility to the Tracksignaled by P-DAO 2. The outer header has source A, destination B, an SRH that indicates CIngress asthe next loose hop, and a RPI indicating a TrackId of 129 from A's namespace. * From the SRH: Packets forwarded by B have source A, destination C , a consumed SRH, and a RPI indicating a TrackId of 129 from A's namespace. C decapsulates. * From P-DAO 1: C encapsulates the packet with destination of Especified in Section 7.2 inthe Track signaled by P-DAO 1. The outer header has source C, destination D, an SRH that indicates E as the next loose hop, and a RPI indicatingaTrackId of 131 from C's namespace. E decapsulates. 9.2.3. Segment Routing Non-Storing Mode P-DAO 1 is sent to C andNon-Storing ModeP-DAO 2 and 3 are sent A, as follows: +===============+==============+==============+==============+ | | P-DAO 1 to C | P-DAO 2 to A | P-DAO 3 to A | +===============+==============+==============+==============+ | Mode | Non-Storing | Non-Storing | Non-Storing | +---------------+--------------+--------------+--------------+ | Track Ingress | C | A | A | +---------------+--------------+--------------+--------------+ | TrackID | (C, 131) | (A, 129) | (A, 141) | +---------------+--------------+--------------+--------------+ | VIO | D, E | B | C, E | +---------------+--------------+--------------+--------------+ | Targets | | C | F, G | +---------------+--------------+--------------+--------------+ Table 16: P-DAO Messages As a result the RIBs are set as follows: +======+=============+=========+=============+==========+ | Node | Destination | Origin | Next Hop(s) | TrackID | +======+=============+=========+=============+==========+ | E | F, G | ND | Neighbor | Any | +------+-------------+---------+-------------+----------+ | D | E | ND | Neighbor | Any | +------+-------------+---------+-------------+----------+ | C | D | ND | Neighbor | Any | +------+-------------+---------+-------------+----------+ | " | E | P-DAO 1 | D, E | (C, 131) | +------+-------------+---------+-------------+----------+ | B | C | ND | Neighbor | Any | +------+-------------+---------+-------------+----------+ | A | B | ND | Neighbor | Any | +------+-------------+---------+-------------+----------+ | " | C | P-DAO 2 | B, C | (A, 129) | +------+-------------+---------+-------------+----------+ | " | E, F, G | P-DAO 3 | C, E | (A, 141) | +------+-------------+---------+-------------+----------+ Table 17: RIB setting The encapsulating headers of packets that are forwarded along the Track between A and B have the following settings: +========+===================+===================+================+ | Header | IPv6 Source Addr. | IPv6 Dest. Addr. | TrackID in RPI | +========+===================+===================+================+ | Outer | A | B till D then E | (A, 129) | +--------+-------------------+-------------------+----------------+ | Middle | A | C | (A, 141) | +--------+-------------------+-------------------+----------------+ | Inner | X | E, F or G | N/A | +--------+-------------------+-------------------+----------------+ Table 18: Packet header settings The encapsulating headers of packets that are forwarded along the Track between B and C have the following settings: +========+===================+===================+================+ | Header | IPv6 Source Addr. | IPv6 Dest. Addr. | TrackID in RPI | +========+===================+===================+================+ | Outer | A | C | (A, 141) | +--------+-------------------+-------------------+----------------+ | Inner | X | E, F or G | N/A | +--------+-------------------+-------------------+----------------+ Table 19: Packet header settings The encapsulating headers of packets that are forwarded along the Track between CMain DODAG. Profile 9 Profile 9 combines profiles 7 andE have the following settings: +========+===================+===================+================+ | Header | IPv6 Source Addr. | IPv6 Dest. Addr. | TrackID in RPI | +========+===================+===================+================+ | Outer | C | D till D then E | (C, 131) | +--------+-------------------+-------------------+----------------+ | Middle | A | E | (A, 141) | +--------+-------------------+-------------------+----------------+ | Inner | X | E, F or G | N/A | +--------+-------------------+-------------------+----------------+ Table 20: Packet header settings As an example, say that A has a packet for F. Using the RIB above: * From P-DAO 3: A encapsulates the packet with destination of F in8, operating the Tracksignaled by P-DAO 3. The outer header has source A, destination C, an SRH that indicates Easthe next loose hop, and a RPI indicating a TrackId of 141 from A's namespace. This recurses with: * From P-DAO 2: A encapsulates the packet with destination of C in the Track signaled by P-DAO 2. The outer header has source A, destination B, andaRPI indicating a TrackId of 129 from A's namespace. B decapsulates forwards to C based onfull DODAG within asibling connected route. * From the SRH: C consumes the SRH and makes the destination E. * From P-DAO 1: C encapsulates the packet with destination of E inStoring Mode Main DODAG, using only theTrack signaled by P-DAO 1. The outer header has source C, destination D, an SRH that indicates EMain DODAG RPLInstanceID asthe next loose hop, and a RPI indicating a TrackId of 131 from C's namespace. E decapsulates. 10.TrackID. 9. Security Considerations It is worth noting that with [RPL], every node in the LLN is RPL- aware and can inject any RPL-based attack in the network. This draft uses messages that are already present in RPL [RPL] with optional secured versions. The same secured versions may be used with this draft, and whatever security is deployed for a given network also applies to the flows in this draft. The LLN nodes depend on the 6LBR and the RPL participants for their operation. A trust model must be put in place to ensure that the right devices are acting in these roles, so as to avoid threats such as black-holing, (see [RFC7416] section 7). This trust model could be at a minimum based on a Layer-2 Secure joining and the Link-Layer security. This is a generic 6LoWPAN requirement, see Req5.1 in Appendix B.5 of [RFC8505]. In a general manner, the Security Considerations in [RPL], and [RFC7416] apply to this specification as well. The Link-Layer security is needed in particular to prevent Denial-Of-Service attacks whereby a rogue router creates a high churn in the RPL network by constantly injected forged P-DAO messages and using up all the available storage in the attacked routers. Additionally, the trust model could include a role validation (e.g., using a role-based authorization) to ensure that the node that claims to be a RPL Root is entitled to do so. That trust should propagate fromegressEgress toingressIngress in the case of a Storing Mode P-DAO.11.This specification suggests some validation of the VIO to prevent basic loops by avoiding that a node appears twice. But that is only a minimal protection. Arguably, an attacker tha can inject P-DAOs can reroute any traffic and deplete critical resources such as spectrum and battery in the LLN rapidly. 10. IANA Considerations11.1.10.1. New Elective 6LoWPAN Routing Header Type This document updates the IANA registry titled "Elective 6LoWPAN Routing Header Type" that was created for [RFC8138] and assigns the following value:+=======+=============+===============++===============+=============+===============+ | Value | Description | Reference |+=======+=============+===============++===============+=============+===============+ |78 (Suggested) | P-RPI-6LoRH | This document |+-------+-------------+---------------++---------------+-------------+---------------+ Table 21: New Elective 6LoWPAN Routing Header Type11.2.10.2. New Critical 6LoWPAN Routing Header Type This document updates the IANA registry titled "Critical 6LoWPAN Routing Header Type" that was created for [RFC8138] and assigns the following value:+=======+=============+===============++===============+=============+===============+ | Value | Description | Reference |+=======+=============+===============++===============+=============+===============+ |78 (Suggested) | P-RPI-6LoRH | This document |+-------+-------------+---------------++---------------+-------------+---------------+ Table 22: New Critical 6LoWPAN Routing Header Type11.3.10.3. New Subregistry For The RPL Option Flags IANA is required to create a subregistry for the 8-bit RPL Option Flags field, as detailed in Figure2,4, under the "Routing Protocol for Low Power and Lossy Networks (RPL)" registry. The bits are indexed from 0 (leftmost) to 7. Each bit istrackedTracked with the following qualities: * Bit number (counting from bit 0 as the most significant bit) * Indication When Set * Reference Registration procedure is "Standards Action" [RFC8126]. The initial allocation is as indicated in Table 26:+============+======================+===============++===============+======================+===============+ | Bit number | Indication When Set | Reference |+============+======================+===============++===============+======================+===============+ | 0 | Down 'O' | [RFC6553] |+------------+----------------------+---------------++---------------+----------------------+---------------+ | 1 | Rank-Error (R) | [RFC6553] |+------------+----------------------+---------------++---------------+----------------------+---------------+ | 2 | Forwarding-Error (F) | [RFC6553] |+------------+----------------------+---------------++---------------+----------------------+---------------+ | 3 (Suggested) | Projected-Route (P) | This document |+------------+----------------------+---------------++---------------+----------------------+---------------+ Table 23: Initial PDR Flags11.4.10.4. New RPL Control Codes This document extends the IANA Subregistry created by RFC 6550 for RPL Control Codes as indicated in Table 24:+======+=============================+===============++==================+=============================+===============+ | Code | Description | Reference |+======+=============================+===============++==================+=============================+===============+ | 0x09 (Suggested) | Projected DAO Request (PDR) | This document |+------+-----------------------------+---------------++------------------+-----------------------------+---------------+ | 0x0A (Suggested) | PDR-ACK | This document |+------+-----------------------------+---------------++------------------+-----------------------------+---------------+ Table 24: New RPL Control Codes11.5.10.5. New RPL Control Message Options This document extends the IANA Subregistry created by RFC 6550 for RPL Control Message Options as indicated in Table 25:+=======+============================+===============++==================+=============================+===============+ | Value | Meaning | Reference |+=======+============================+===============++==================+=============================+===============+ |0x0B0x0E (Suggested) | Stateful VIO(SF-VIO)(SM-VIO) | This document |+-------+----------------------------+---------------++------------------+-----------------------------+---------------+ |0x0C0x0F (Suggested) | Source-Routed VIO(SR-VIO)(NSM-VIO) | This document |+-------+----------------------------+---------------++------------------+-----------------------------+---------------+ |0x0D0x10 (Suggested) | Sibling Information option | This document |+-------+----------------------------+---------------++------------------+-----------------------------+---------------+ Table 25: RPL Control Message Options11.6.10.6. SubRegistry for the Projected DAO Request Flags IANA is required to create a registry for the 8-bit Projected DAO Request (PDR) Flags field. Each bit istrackedTracked with the following qualities: * Bit number (counting from bit 0 as the most significant bit) * Capability description * Reference Registration procedure is "Standards Action" [RFC8126]. The initial allocation is as indicated in Table 26: +============+========================+===============+ | Bit number | Capability description | Reference | +============+========================+===============+ | 0 | PDR-ACK request (K) | This document | +------------+------------------------+---------------+ | 1 | Requested path should | This document | | | be redundant (R) | | +------------+------------------------+---------------+ Table 26: Initial PDR Flags11.7.10.7. SubRegistry for the PDR-ACK Flags IANA is required to create an subregistry for the 8-bit PDR-ACK Flags field. Each bit istrackedTracked with the following qualities: * Bit number (counting from bit 0 as the most significant bit) * Capability description * Reference Registration procedure is "Standards Action" [RFC8126]. No bit is currently defined for the PDR-ACK Flags.11.8.10.8. Subregistry for the PDR-ACK Acceptance Status Values IANA is requested to create a Subregistry for the PDR-ACK Acceptance Status values. * Possible values are 6-bit unsigned integers (0..63). * Registration procedure is "Standards Action" [RFC8126]. * Initial allocation is as indicated in Table 27: +-------+------------------------+---------------+ | Value | Meaning | Reference | +-------+------------------------+---------------+ | 0 | UnqualifiedacceptanceAcceptance | This document | +-------+------------------------+---------------+ Table 27: Acceptance values of the PDR-ACK Status11.9.10.9. Subregistry for the PDR-ACK Rejection Status Values IANA is requested to create a Subregistry for the PDR-ACK Rejection Status values. * Possible values are 6-bit unsigned integers (0..63). * Registration procedure is "Standards Action" [RFC8126]. * Initial allocation is as indicated in Table 28: +-------+-----------------------+---------------+ | Value | Meaning | Reference | +-------+-----------------------+---------------+ | 0 | UnqualifiedrejectionRejection | This document | +-------+-----------------------+---------------+ | 1 | Transient Failure | This document | +-------+-----------------------+---------------+ Table 28: Rejection values of the PDR-ACK Status11.10.10.10. SubRegistry for the Via Information Options Flags IANA is requested to create a Subregistry for the 5-bit Via Information Options (Via Information Option) Flags field. Each bit istrackedTracked with the following qualities: * Bit number (counting from bit 0 as the most significant bit) * Capability description * Reference Registration procedure is "Standards Action" [RFC8126]. No bit is currently defined for the Via Information Options (Via Information Option) Flags.11.11.10.11. SubRegistry for the Sibling Information Option Flags IANA is required to create a registry for the 5-bit Sibling Information Option (SIO) Flags field. Each bit istrackedTracked with the following qualities: * Bit number (counting from bit 0 as the most significant bit) * Capability description * Reference Registration procedure is "Standards Action" [RFC8126]. The initial allocation is as indicated in Table 29:+============+===================================+===============++===============+========================+===========+ | Bit number | Capability description | Reference |+============+===================================+===============++===============+========================+===========+ | 0 (Suggested) |Connectivity is bidirectional (B)"D" flag: Sibling in | This | | | same DODAG as Self | document |+------------+-----------------------------------+---------------++---------------+------------------------+-----------+ Table 29: Initial SIO Flags11.12.10.12. NewDestinationdestination Advertisement Object Flag This document modifies the"Destination"destination Advertisement Object (DAO) Flags" registry initially created in Section 20.11 of [RPL] . Section3.14.1.1 also defines one new entry in the Registry as follows: +---------------+------------------------+-----------+ | Bit Number | Capability Description | Reference | +---------------+------------------------+-----------+ | 2(suggested)(Suggested) | Projected DAO (P) | THIS RFC | +---------------+------------------------+-----------+ Table 30: NewDestinationdestination Advertisement Object (DAO) Flag11.13. Error in Projected Route10.13. New ICMPv6 Error Code In some cases RPL will return an ICMPv6 error message when a message cannot be forwarded along aProjected Route. This ICMPv6 error message is "Error in Projected Route".P-Route. IANA has defined an ICMPv6 "Code" Fields Registry for ICMPv6 Message Types. ICMPv6 Message Type 1 describes"Destination"destination Unreachable" codes. This specification requires that a new code is allocated from the ICMPv6 Code Fields Registry for ICMPv6 Message Type 1, for "Error inProjected Route",P-Route", with a suggested code value of 8, to be confirmed by IANA.12.10.14. New RPL Rejection Status values This specification updates the Subregistry for the "RPL Rejection Status" values under the RPL registry, as follows: +---------------+-------------------------+-----------+ | Value | Meaning | Reference | +---------------+-------------------------+-----------+ | 2 (Suggested) | Out of Resources | THIS RFC | +---------------+-------------------------+-----------+ | 3 (Suggested) | Error in VIO | THIS RFC | +---------------+-------------------------+-----------+ | 4 (Suggested) | Predecessor Unreachable | THIS RFC | +---------------+-------------------------+-----------+ | 5 (Suggested) | Unreachable Target | THIS RFC | +---------------+-------------------------+-----------+ | 6..63 | Unassigned | | +---------------+-------------------------+-----------+ Table 31: Rejection values of the RPL Status 11. Acknowledgments The authors wish to acknowledge JP Vasseur, Remy Liubing, JamesPylakuttyPylakutty, and Patrick Wetterwald for their contributions to the ideas developed here.13.Many thanks to Dominique Barthel and SVR Anand for their global contribution to 6TiSCH, RAW and this document, as well as text suggestions that were incorporated, and to Michael Richardson for his useful recommendations based on his global view of the system. Also special thanks Toerless Eckert for his deep review, with many excellent suggestions that improved the readability and well as the content of the specification. 12. Normative References [INT-ARCHI] Braden, R., Ed., "Requirements for Internet Hosts - Communication Layers", STD 3, RFC 1122, DOI 10.17487/RFC1122, October 1989, <https://www.rfc-editor.org/info/rfc1122>. [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997, <https://www.rfc-editor.org/info/rfc2119>. [RFC4443] Conta, A., Deering, S., and M. Gupta, Ed., "Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification", STD 89, RFC 4443, DOI 10.17487/RFC4443, March 2006, <https://www.rfc-editor.org/info/rfc4443>. [RFC4655] Farrel, A., Vasseur, J.-P., and J. Ash, "A Path Computation Element (PCE)-Based Architecture", RFC 4655, DOI 10.17487/RFC4655, August 2006, <https://www.rfc-editor.org/info/rfc4655>. [RFC5551] Gellens, R., Ed., "Lemonade Notifications Architecture", RFC 5551, DOI 10.17487/RFC5551, August 2009, <https://www.rfc-editor.org/info/rfc5551>. [RFC6282] Hui, J., Ed. and P. Thubert, "Compression Format for IPv6 Datagrams over IEEE 802.15.4-Based Networks", RFC 6282, DOI 10.17487/RFC6282, September 2011, <https://www.rfc-editor.org/info/rfc6282>. [RPL] Winter, T., Ed., Thubert, P., Ed., Brandt, A., Hui, J., Kelsey, R., Levis, P., Pister, K., Struik, R., Vasseur, JP., and R. Alexander, "RPL: IPv6 Routing Protocol for Low-Power and Lossy Networks", RFC 6550, DOI 10.17487/RFC6550, March 2012, <https://www.rfc-editor.org/info/rfc6550>. [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 Routing Header for Source Routes with the Routing Protocol for Low-Power and Lossy Networks (RPL)", RFC 6554, DOI 10.17487/RFC6554, March 2012, <https://www.rfc-editor.org/info/rfc6554>. [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017, <https://www.rfc-editor.org/info/rfc8174>. [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for Writing an IANA Considerations Section in RFCs", BCP 26, RFC 8126, DOI 10.17487/RFC8126, June 2017, <https://www.rfc-editor.org/info/rfc8126>.14.13. Informative References [6LoWPAN] Montenegro, G., Kushalnagar, N., Hui, J., and D. Culler, "Transmission of IPv6 Packets over IEEE 802.15.4 Networks", RFC 4944, DOI 10.17487/RFC4944, September 2007, <https://www.rfc-editor.org/info/rfc4944>. [RFC7102] Vasseur, JP., "Terms Used in Routing for Low-Power and 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 J. Martocci, "Reactive Discovery of Point-to-Point Routes in Low-Power and Lossy Networks", RFC 6997, DOI 10.17487/RFC6997, August 2013, <https://www.rfc-editor.org/info/rfc6997>. [RFC7416] Tsao, T., Alexander, R., Dohler, M., Daza, V., Lozano, A., and M. Richardson, Ed., "A Security Threat Analysis for the Routing Protocol for Low-Power and Lossy Networks (RPLs)", RFC 7416, DOI 10.17487/RFC7416, January 2015, <https://www.rfc-editor.org/info/rfc7416>. [6TiSCH-ARCHI] Thubert, P., Ed., "An Architecture for IPv6 over the Time- Slotted Channel Hopping Mode of IEEE 802.15.4 (6TiSCH)", RFC 9030, DOI 10.17487/RFC9030, May 2021, <https://www.rfc-editor.org/info/rfc9030>. [RAW-ARCHI] Thubert, P., Papadopoulos, G. Z., and L. Berger, "Reliable and Available Wireless Architecture/Framework", Work in Progress, Internet-Draft,draft-ietf-raw-architecture-00, 12draft-ietf-raw-architecture-01, 28 July 2021, <https://datatracker.ietf.org/doc/html/draft-ietf-raw-architecture-00>.draft-ietf-raw-architecture-01>. [USE-CASES] Papadopoulos, G. Z., Thubert, P., Theoleyre, F., and C. J. Bernardos, "RAW use cases", Work in Progress, Internet- Draft, draft-ietf-raw-use-cases-02, 12 July 2021, <https://datatracker.ietf.org/doc/html/draft-ietf-raw-use- cases-02>. [TURN-ON_RFC8138] Thubert, P., Ed. and L. Zhao, "A Routing Protocol for Low- Power and Lossy Networks (RPL) Destination-Oriented Directed Acyclic Graph (DODAG) Configuration Option for the 6LoWPAN Routing Header", RFC 9035, DOI 10.17487/RFC9035, April 2021, <https://www.rfc-editor.org/info/rfc9035>.[RFC8655] Finn, N., Thubert, P., Varga, B., and J. Farkas, "Deterministic Networking Architecture", RFC 8655, DOI 10.17487/RFC8655, October 2019, <https://www.rfc-editor.org/info/rfc8655>.[RFC8025] Thubert, P., Ed. and R. Cragie, "IPv6 over Low-Power Wireless Personal Area Network (6LoWPAN) Paging Dispatch", RFC 8025, DOI 10.17487/RFC8025, November 2016, <https://www.rfc-editor.org/info/rfc8025>. [RFC8138] Thubert, P., Ed., Bormann, C., Toutain, L., and R. Cragie, "IPv6 over Low-Power Wireless Personal Area Network (6LoWPAN) Routing Header", RFC 8138, DOI 10.17487/RFC8138, April 2017, <https://www.rfc-editor.org/info/rfc8138>. [RFC8505] Thubert, P., Ed., Nordmark, E., Chakrabarti, S., and C. Perkins, "Registration Extensions for IPv6 over Low-Power Wireless Personal Area Network (6LoWPAN) Neighbor Discovery", RFC 8505, DOI 10.17487/RFC8505, November 2018, <https://www.rfc-editor.org/info/rfc8505>.[USEofRPLinfo][RFC8402] Filsfils, C., Ed., Previdi, S., Ed., Ginsberg, L., Decraene, B., Litkowski, S., and R. Shakir, "Segment Routing Architecture", RFC 8402, DOI 10.17487/RFC8402, July 2018, <https://www.rfc-editor.org/info/rfc8402>. [RFC8655] Finn, N., Thubert, P., Varga, B., and J. Farkas, "Deterministic Networking Architecture", RFC 8655, DOI 10.17487/RFC8655, October 2019, <https://www.rfc-editor.org/info/rfc8655>. [RFC8930] Watteyne, T., Ed., Thubert, P., Ed., and C. Bormann, "On Forwarding 6LoWPAN Fragments over a Multi-Hop IPv6 Network", RFC 8930, DOI 10.17487/RFC8930, November 2020, <https://www.rfc-editor.org/info/rfc8930>. [RFC8931] Thubert, P., Ed., "IPv6 over Low-Power Wireless Personal Area Network (6LoWPAN) Selective Fragment Recovery", RFC 8931, DOI 10.17487/RFC8931, November 2020, <https://www.rfc-editor.org/info/rfc8931>. [RFC8994] Eckert, T., Ed., Behringer, M., Ed., and S. Bjarnason, "An Autonomic Control Plane (ACP)", RFC 8994, DOI 10.17487/RFC8994, May 2021, <https://www.rfc-editor.org/info/rfc8994>. [RFC9008] Robles, M.I., Richardson, M., and P. Thubert, "Using RPI Option Type, Routing Header for Source Routes, and IPv6- in-IPv6 Encapsulation in the RPL Data Plane", RFC 9008, DOI 10.17487/RFC9008, April 2021, <https://www.rfc-editor.org/info/rfc9008>. [RFC9010] Thubert, P., Ed. and M. Richardson, "Routing for RPL (Routing Protocol for Low-Power and Lossy Networks) Leaves", RFC 9010, DOI 10.17487/RFC9010, April 2021, <https://www.rfc-editor.org/info/rfc9010>. [I-D.irtf-panrg-path-properties] Enghardt, T. and C. Krähenbühl, "A Vocabulary of Path Properties", Work in Progress, Internet-Draft, draft-irtf- panrg-path-properties-03, 9 July 2021, <https://datatracker.ietf.org/doc/html/draft-irtf-panrg- path-properties-03>. [PCE] IETF, "Path Computation Element",<https://datatracker.ietf.org/doc/charter-ietf-pce/>.<https://dataTracker.ietf.org/doc/charter-ietf-pce/>. Appendix A. Applications A.1. Loose Source Routing A RPL implementation operating in a very constrained LLN typically uses the Non-Storing Mode of Operation as represented in Figure12.17. In that mode, a RPL node indicates a parent-child relationship to the Root, using aDestinationdestination Advertisement Object (DAO) that is unicast from the node directly to the Root, and the Root typically builds a source routed path to a destination down the DODAG by recursively concatenating this information. ------+--------- | Internet | +-----+ | | BorderRouterrouter | | (RPL Root) +-----+ ^ | | | | DAO | ACK | o o o o | | | Strict 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 o o o o o o o | v v o o o o LLN Figure12:17: RPL Non-Storing Mode of operation Based on the parent-children relationships expressed in thenon- storingNon- Storing DAO messages,the Root possesses topological information about the whole network, though this information is limited to the structure of the DODAG for which it is the destination. A packet that is generated within the domain will always reach the Root, which can then apply a source routing information to reach the destination 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 be in a RPL domain reaches the Root. It results that the Root, or then some associated centralized 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 energy and bandwidth that is wasted for transmission, between itself and the destination, as well as the risk of fragmentation, any potential delays because of a paths longer than necessary (shorter paths exist that would not traverse the Root). 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 nodes that are many hops away. In some use cases, a RPL network forms long lines and a limited amount ofwell-Targetedwell-targeted routing state would allow to make the source routing operation loose as opposed to strict, and save packet size. Limiting the packet size is directly beneficial to the energy budget, but, mostly, it reduces the chances of frame loss and/or packet fragmentation, which is highly detrimental to the LLN operation. Because the capability to store a routing state in every node is limited, the decision of which route is installed where can only be optimized with a global knowledge of the system, a knowledge that the Root or an associated PCE may possess by means that are outside of the scope of this specification. This specification enables to store a Storing Mode state in intermediate routers, which enables to limit the excursion 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 Storing Mode, then it may elide the sequence of routers that is installed in the network from its source route headers to destination that are reachable via that Target, and the source route headers effectively become loose. A.2.TransversalEast-West Routes RPL is optimized for Point-to-Multipoint (P2MP) and Multipoint-to- Point (MP2P), whereby routes are always installed North-South (aka up/down) along the RPL DODAG respectively from and towards the DODAG Root.TransversalPeer to Peer (P2P) East-West routes in a RPL network will generally suffer from some elongated (stretched) path versusthe best possiblea direct (optimized) path, since routing between2two nodes always happens via a common parent, as illustrated in Figure13:18: ------+--------- | Internet | +-----+ | | Border router | | (RPL Root) +-----+ X ^ v o o ^ o o v o o o o o ^ o o o v o o o o o ^ o o v o o o o o S o o o D o o o o o o o LLN Figure 18: Routing Stretch between S and D via common parent X along North-South Paths * In Storing Mode, unless the destination is a child of the source, the packets will follow the default route up the DODAG as well. If the destination is in the same DODAG, they will eventually reach a common parent that has a route to the destination; at worse, the common parent may also be the Root. From that common parent, the packet will follow a path down the DODAG that is optimized for the Objective Function that was used to build the DODAG. * in Non-Storing Mode, all packets routed within the DODAG flow all the way up to the Root of the DODAG. If the destination is in the same DODAG, the Root must encapsulate the packet to place an RH that has the strict source route information down the DODAG to the destination. This will be the case even if the destination is relatively close to the source and the Root is relatively far off.------+--------- | Internet | +-----+ | | Border Router | | (RPL Root) +-----+ X ^ v o o ^ o o v o o o o o ^ o o o v o o o o o ^ o o v o o o o o S o o o D o o o o o o o LLN Figure 13: Routing Stretch between S and D via common parent XIt results that it is often beneficial to enabletransversalEast-West P2P routes, either if the RPL route presents a stretch from shortest path, or if the new route is engineered with a different objective, and that it is even more critical in Non-Storing Mode than it is in Storing Mode, because the routing stretch is wider. For that reason, earlier work at the IETF introduced the "Reactive Discovery of Point-to-Point Routes in Low Power and Lossy Networks" [RFC6997], which specifies a distributed method for establishing optimized P2P routes. This draft proposes an alternate based on a centralized route computation. ------+--------- | Internet | +-----+ | | BorderRouterrouter | | (RPL Root) +-----+ | o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o S>>A>>>B>>C>>>D o o o o o o o LLN Figure14: Projected Transversal19: More direct East-West Route between S and D This specification enables to store source-routed or Storing Mode state in intermediate routers, which enables to limit the stretch of a P2P route and maintain the characteristics within a given SLA. An example of service using this mechanism oculd be a control loop that would be installed in a network that uses classical RPL for asynchronous data collection. In that case, the P2P path may be installed in a different RPL Instance, with a different objective function. Authors' Addresses Pascal Thubert (editor) Cisco Systems, Inc Building D 45 Allee des Ormes - BP1200 06254 Mougins - Sophia Antipolis France Phone: +33 497 23 26 34 Email: pthubert@cisco.com Rahul Arvind Jadhav Huawei Tech Kundalahalli Village, Whitefield, Bangalore 560037 Karnataka India Phone: +91-080-49160700 Email: rahul.ietf@gmail.com Matthew Gillmore Itron, Inc Building D 2111 N Molter Road Liberty Lake, 99019 United States Phone: +1.800.635.5461 Email: matthew.gillmore@itron.com