<?xml version='1.0'encoding='utf-8'?> <?rfc toc="yes"?> <?rfc tocompact="yes"?> <?rfc tocdepth="3"?> <?rfc tocindent="yes"?> <?rfc symrefs="yes"?> <?rfc sortrefs="yes"?> <?rfc comments="yes"?> <?rfc inline="yes"?> <?rfc compact="no"?> <?rfc subcompact="no"?> <?rfc authorship="yes"?> <?rfc tocappendix="yes"?>encoding='UTF-8'?> <!DOCTYPE rfc [ <!ENTITY nbsp " "> <!ENTITY zwsp "​"> <!ENTITY nbhy "‑"> <!ENTITY wj "⁠"> ]> <rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" ipr='trust200902' tocInclude="true" indexInclude="true" obsoletes="" consensus="true" submissionType="IETF" xml:lang="en" version="3" docName="draft-ietf-roll-dao-projection-40" number="9914" updates="6550, 6553,8138">8138" symRefs="true" sortRefs="false"> <front> <titleabbrev='DAO Projection'>Root-initiatedabbrev='Root-Initiated Routing State inRPL</title>RPL'>Root-Initiated Routing State in the Routing Protocol for Low-Power and Lossy Networks (RPL)</title> <seriesInfo name="RFC" value="9914"/> <author initials='P' surname='Thubert' fullname='Pascal Thubert' role='editor'><!-- <organization abbrev='Cisco Systems'>Cisco Systems, Inc</organization> --><organization>Independent</organization> <address> <postal> <city>Roquefort-les-Pins</city> <code>06330</code> <country>France</country> </postal> <email>pascal.thubert@gmail.com</email> </address> </author> <author fullname="Rahul Arvind Jadhav" initials="R.A." surname="Jadhav"> <organization>AccuKnox</organization> <address> <postal> <street>Kundalahalli Village,Whitefield,</street>Whitefield</street> <city>Bangalore</city> <region>Karnataka</region> <code>560037</code> <country>India</country> </postal> <phone>+91-080-49160700</phone> <email>rahul.ietf@gmail.com</email> </address> </author> <author fullname="Michael C. Richardson" initials="M." surname="Richardson"> <organization abbrev="Sandelman">Sandelman Software Works</organization> <address> <email>mcr+ietf@sandelman.ca</email> <uri>http://www.sandelman.ca/</uri> </address> </author><date/> <area>Routing</area> <workgroup>ROLL</workgroup><date month="March" year="2026"/> <area>RTG</area> <workgroup>roll</workgroup> <abstract><t> The<t>The Routing Protocol for Low-Power and Lossy Networks(RPL, RFC(RPL) (RFC 6550) enables data packet routing along a Destination-Oriented Directed Acyclic Graph.(DODAG). However, the default route establishment mechanism relies on hop-by-hop forwarding along the DODAG, which may not always provide optimal routing efficiency. This document introduces the concept ofDAODestination Advertisement Object (DAO) Projection, a mechanism that allows a RPLrootRoot or an external controller to install optimized routes within the RPL domain. DAO Projections enable the creation of optimized unicast or multicast routes that do not strictly follow the DODAG structure, thereby improving routing efficiency, reliability, availability, and resource utilization in the RPL domain.TheThis document specifies two types ofprojected routes—storing modeProjected Routes (P-Routes) -- Storing Mode and Non-Storing Mode -- andnon-storing mode projections—andoutlines the signaling procedures necessary to establish, maintain, and remove these routes. This documentextends RFCupdates RFCs 6550,RFC6553, andRFC8138. </t> </abstract> </front> <middle><!-- **************************************************************** --> <!-- **************************************************************** --> <!-- **************************************************************** --> <!-- **************************************************************** --><section anchor='introduction'><name>Introduction</name> <t>RPL, the <xref target='RFC6550'> "RoutingThe Routing Protocol forLow PowerLow-Power and LossyNetworks"</xref> (LLNs),Networks (RPL) <xref target='RFC6550'/>, is a Distance Vectorprotocol, whichprotocol that is well-suited for application in a variety oflow energylow-energy Internet of Things (IoT) networks where constrained nodes cannot maintain the full view of thetopology,topology and stretchedP2Ppaths are acceptablevs.(as opposed to the signaling and state overhead involved in maintaining the shortest pathsacross.across). Additionally, RPL is anisotropic, meaning that its operation depends on the orientation of the links, down from or up towards the Root, with the default route advertised down andmore specificmore-specific paths advertised up along a limited set of links. </t> <t> RPL formsDestination OrientedDestination-Oriented Directed Acyclic Graphs (DODAGs) in which the Root often acts as theBorderborder router to connect the RPL domain to the IP backbone. Routers inside the DODAG route alongthatthe graph up towards the Root for the default route and down towards destinations in the RPL domain formore specificmore-specific routes.ThisAs a prerequisite, this specification expectsas a pre-requisitea pre-existing RPL Instance with an associated DODAG and RPL Root, which are referred to as the main Instance, mainDODAGDODAG, and mainRootRoot, respectively. The main Instance is operated in RPL Non-Storing Mode of Operation (MOP). </t> <t> With this specification, an abstract routing function called a Path Computation Element (PCE) (e.g., located in a central controller or collocated with the main Root) interacts with the main Root to compute additional paths between nodes in the main Instance. In Non-Storing Mode, the base topological information to be passed to the PCE,that isi.e., the knowledge of the main DODAG, is already available at the Root. This specification introduces protocol extensions that enrich the topological information available to the Root with sibling relationships that are usable but not leveraged to form the main DODAG. </t> <t> Based on usage, path length, and knowledge of available resources such as battery levels and reservable buffers in the nodes, thePCE withPCE, which has a global visibility of thesystemsystem, can optimize the computed routes fortheapplication needs, including the capability to provide path redundancy. This specification also introduces protocol extensions that enable the Root to project (i.e., advertise from a remote location) the computed paths in the RPL domain as Projected Routes (a.k.a. P-Routes) on behalf of the PCE. </t> <t> A P-Route may be installed in either Storing or Non-Storing Mode, potentially resulting in hybrid situations where the Mode in which the P-Route operates is different from that of the RPL main Instance. P-Routes can be used as stand-alone segments meant to reduce the size of thesource routing headers,Source Routing Headers (SRHs), leveraging loose source routing operations down the main RPL DODAG. A P-Route can also be used as a protection path, and it can be combined and interleaved with other P-Routes to form aRecovery Graphrecovery graph called a Track. A Track is signaled as a separate RPL Instance that is associated with a main RPLInstance,Instance such that the RPL routers that form the Track are also members of the main DODAG. The Track provides underlay shortcuts using its own RIB,thatwhich is separate from the RIB of the main Instance and has a higher precedence. </t> </section><!-- **************************************************************** --> <!-- **************************************************************** --> <!-- **************************************************************** --> <!-- **************************************************************** --><section><name>Terminology</name> <section anchor='bcp'><name>Requirements Language</name> <t> The key words"MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY","<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", "<bcp14>MAY</bcp14>", and"OPTIONAL""<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as described inBCP 14BCP 14 <xref target="RFC2119"/> <xreftarget='RFC2119'/><xref target='RFC8174'/>target="RFC8174"/> when, and only when, they appear in all capitals, as shown here. </t> <t> In addition, the terms "Extends" and "Amends" are used as per <xreftarget="I-D.kuehlewind-update-tag" /> section 3. </t>section="3" sectionFormat="comma" target="I-D.kuehlewind-rswg-updates-tag" />.</t> </section><!-- end section "Requirements Language" --><sectionanchor='lo'><name>References</name>anchor='lo'><name>Terms and Concepts</name> <t> In this document, readers will encounter terms and concepts that are discussed in the<xref target='RFC6550'>"Routingfollowing: </t> <ul> <li> "RPL: IPv6 Routing Protocol forLow PowerLow-Power and LossyNetworks"</xref>, theNetworks" <xreftarget='RFC9030'> "6TiSCH Architecture"</xref>,target='RFC6550'></xref></li> <li>"An Architecture for IPv6 over the Time-Slotted Channel Hopping Mode of IEEE 802.15.4 (6TiSCH)" <xreftarget='RFC8655'> "Deterministictarget='RFC9030'></xref></li> <li>"Deterministic NetworkingArchitecture"</xref>, theArchitecture" <xreftarget='RFC9008'> "Usingtarget='RFC8655'></xref></li> <li>"Using RPI Option Type, Routing Header for Source Routes, andIP-in-IPIPv6-in-IPv6 Encapsulation in the RPL DataPlane"</xref>, thePlane" <xreftarget='I-D.ietf-raw-architecture'>"Reliabletarget='RFC9008'></xref></li> <li>"Reliable and Available Wireless (RAW)Architecture"</xref>, andArchitecture" <xreftarget='RFC7102'>"Terminologytarget='RFC9912'></xref></li> <li>"Terms Used inLow power AndRouting for Low-Power and LossyNetworks"</xref>.Networks" <xref target='RFC7102'></xref></li> </ul> <t> The6TiSCH6TiSCH, Deterministic Networking (DetNet), andDetNet/RAWRAW architectures utilize the terms "Track" and"Recovery Graph""recovery graph" to represent the same concept even though they are in different environments. This document uses "Track" to represent thatconcept,concept and only builds Tracks that are DODAGs, meaning that all links are oriented fromIngressingress toEgress.egress. This specification also utilizes the termssegment"segment" andprotection path that"protection path", which are also defined in the RAWArchitecture.architecture. </t> <t> As opposed to routing trees, RPL DODAGs are typically constructed to provide redundancy and dynamically adapt the forwarding operation to the state of theLLNLow-Power and Lossy Network (LLN) links. Note that the plain forwarding operation over DODAGs does not provide redundancy for all nodes, since at least the node nearest to the Root does not have an alternate feasible successor. </t> <t> RAW solves that problem by definingProtection Pathsprotection paths that can be interleaved to form new paths that can be activated dynamically upon failures. This requires additional control in order totakemake the routing decision early enough along the Track to route around the failure. </t> <t> RAW only uses single-ended DODAGs, meaning that they can be reversed in another DODAG by reversing all the links. TheIngressingress of the Track is the Root of the DODAG, whereas theEgressegress is the Root of the reversed DODAG. From the RAW perspective, single-ended DODAGs are special Tracks that only have forward links, and that can be leveraged to provideProtectionprotection services by defining destination-orientedProtection Pathsprotection paths within the DODAG. </t> </section><!-- end section "References" --><section anchor='gloss'><name>Glossary</name> <t> This document often uses the following abbreviations:</t><dl spacing='compact'></t> <dl spacing='normal' newline="false" indent="13"> <dt>6LoRH:</dt><dd> 6LoWPAN Routing Header</dd> <dt>6LR:</dt><dd> 6LoWPAN Router, e.g.,(e.g., a RPL router in anLLN </dd> <dt>6LoRH:</dt><dd> 6LoWPAN Routing Header</dd>LLN)</dd> <dt>ARQ:</dt><dd>Automatic RepeatRequest, inRequest (in otherwords retries</dd> <dt>FEC:</dt><dd>Forward Error Correction</dd> <dt>HARQ:</dt><dd> Hybrid Automatic Repeat Request, combining FEC and ARQ</dd>words, retries)</dd> <dt>CMO:</dt><dd>Control Message Option</dd><dt>DAO:</dt><dd>Destination Advertisement Object</dd><dt>DAG:</dt><dd>Directed Acyclic Graph</dd> <dt>DAO:</dt><dd>Destination Advertisement Object</dd> <dt>DIO:</dt><dd>DODAG Information Object</dd> <dt>DODAG:</dt><dd>Destination-Oriented Directed AcyclicGraph;Graph. A DAG with only one vertex (i.e., node) that has no outgoing edge (i.e.,link)</dd> <dt>GUA:</dt><dd>IPv6 Globallink).</dd> <dt>FEC:</dt><dd>Forward Error Correction</dd> <dt>GUA:</dt><dd>Global Unicast Address</dd> <dt>HARQ:</dt><dd> Hybrid Automatic Repeat Request (combines FEC and ARQ)</dd> <dt>LLN:</dt><dd>Low-Power and Lossy Network</dd><dt>MOP:</dt><dd>RPL Mode<dt>MOP:</dt><dd>Mode of Operation</dd> <dt>NSM-VIO:</dt><dd> Non-Storing Mode Via Information Option. Source-routed VIO used in Non-Storing Mode P-DAO messages.</dd> <dt>P-DAO:</dt><dd>Projected DAO </dd> <dt>P-DAO-ACK:</dt><dd>Projected DAO Acknowledgment</dd> <dt>P-DAO-REQ:</dt><dd>Projected DAO Request</dd> <dt>P-Route:</dt><dd>Projected Route</dd><dt>PDR:</dt><dd>P-DAO Request</dd><dt>PCE:</dt><dd>Path Computation Element</dd> <dt>PDR-ACK</dt><dd>Projected DAO Request Acknowledgment</dd> <dt>PLR:</dt><dd>Point of Local Repair</dd> <dt>RAL:</dt><dd>RPL-Aware Leaf</dd> <dt>RAN:</dt><dd>RPL-Aware Node (either a RPL router or a RPL-Aware Leaf)</dd><dt>RAL:</dt><dd>RPL-Aware Leaf</dd><dt>RH:</dt><dd>Routing Header</dd> <dt>RIB:</dt><dd>Routing InformationBase, i.e.,Base (i.e., the routingtable.table) </dd> <dt>RPI:</dt><dd>RPL Packet Information</dd><dt>RPL:</dt><dd>IPv6 Routing<dt>RPL:</dt><dd>Routing Protocol for Low-Power and Lossy Networks </dd> <dt>RTO:</dt><dd>RPL Target Option</dd> <dt>RUL:</dt><dd>RPL-Unaware Leaf</dd><dt>SIO:</dt><dd>RPL Sibling<dt>SIO:</dt><dd>Sibling Information Option</dd><dt>ULA:</dt><dd>IPv6 Unique Local Address</dd> <dt>NSM-VIO:</dt><dd>A Source-Routed<dt>SLO:</dt><dd>Service Level Objective</dd> <dt>SM-VIO:</dt><dd>Storing Mode Via InformationOption,Option. Strict VIO used inNon-StoringStoring Mode P-DAOmessages</dd> <!-- <dt>SubDAG:</dt><dd> A DODAG Rooted at a node which is a child of that node and a subset of a larger DAG</dd> --> <dt>SLO:</dt><dd>Service Level Objective</dd>messages.</dd> <dt>SRH:</dt><dd>Source RoutingHeader, i.e., theHeader (i.e., IPv6 RH type3,3); see <xreftarget="SRSRH"/></dd> <dt>SRH-6loRH:</dt><dd> Sourcetarget="SRSRH"/>.</dd> <dt>SRH-6LoRH:</dt><dd>Source Routing Header6LoRH, a6LoRH. A compressed form of SRH defined in "<xref format="title" target='RFC8138'/>" <xreftarget='RFC8138'> " IPv6 over Low-Power Wireless Personal Area Network (6LoWPAN) Routing Header"</xref>target="RFC8138"/>. </dd><dt>TIO:</dt><dd>RPL Transit<dt>TIO:</dt><dd>Transit Information Option</dd><dt>SM-VIO:</dt><dd>A strict Via Information Option, used in Storing Mode P-DAO messages</dd> <dt>VIO:</dt><dd>A Via<dt>ULA:</dt><dd>Unique Local Address</dd> <dt>VIO:</dt><dd>Via InformationOption; itOption. It can be an SM-VIO ora NSM-VIO</dd>NSM-VIO.</dd> </dl> </section><!-- Glossary --><section anchor='new'><name>Domain Terms</name> <t><!-- Removed reference from routing and 6tisch here to keep it simple -->This specification uses thefollowing terminology:terminology defined in the sections that follow. </t> <section><name>Projected Route</name><t> A RPL P-Route is a RPL route that is computed remotely by aPCE,PCE and installed and maintained by a RPL Root on behalf of the PCE. It is installed as a state that signals that destinations (i.e., Targets) are reachable via or along a sequence of nodes.</t> </section> <section><name>Projected DAO</name><t> A<t>A Projected DAO (P-DAO) is a DAO message that is used to install a P-Route. </t> </section> <section><name>Path</name> <t>Quoting (non-normatively)section 1.1.3the definition of path in <xreftarget="RFC1122"/>:</t>target="RFC1122" section="1.3.3"/>:</t> <blockquote> 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 that a path is uni-directional; it is not unusual to have different paths in the two directions between a given host pair. </blockquote> <t>Section 2 ofSee <xreftarget="I-D.irtf-panrg-path-properties"/> points tosection="3.1.1" target="RFC9912"/> for a longer, more modern definition ofpath, which begins as follows:</t> <blockquote> 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. </blockquote>path.</t> <t> It follows that the general acceptance of a path is a linear sequence of nodes, as opposed to a multi-dimensional graph. In the context of this document, a path is observed by following one copy of a packet that is injected in a Track and possibly replicated within. </t> </section> <section><name>Routing Stretch</name> <t> RPL is anisotropic, meaning that it isdirectional, ordirectional or, moreexactlyprecisely, polar. RPL does not behave the same way "downwards"(root(Root towards leaves) with <em>multicast</em>DIODODAG Information Object (DIO) messages that form the DODAGandversus "upwards" (leaves towardsroot)Root) with <em>unicast</em> DAO messages that follow the DODAG. This is in contrast with traditional IGPs that operate the same way in all directions and are thus called isotropic. </t> <t>The termRouting Stretch"routing stretch" denotes the length of a path, in comparison to the length of the shortest path, which can be an abstract concept in RPL when the metrics are statistical and dynamic, and the concept of distance varies with the Objective Function. </t> <t> The RPL DODAG optimizesthe P2MP (Point-to-Multipoint)Point-to-Multipoint (P2MP) paths (from the Root) andMP2P (Multipoint-to-Point)Multipoint-to-Point (MP2P) paths (towards theRoot) paths,Root), but theP2P (Point-to-Point)Point-to-Point (P2P) traffic has to follow the same DODAG. Following the DODAG, the RPL datapath passes via a common parent in Storing Mode and via the Root in Non-Storing Mode. This typically involves more hops and more latency than the minimum possible for a directional (i.e., forward) P2P path that an isotropic protocol would compute. We refer to this elongated path as stretched. </t> </section> <section><name>Track</name> <t> The concept of Track is inherited from the 6TiSCH architecture <xreftarget='RFC9030'> "6TiSCH Architecture"</xref>target='RFC9030'></xref> andmatchesequals that of aProtection Pathrecovery graph in the<xref target='I-D.ietf-raw-architecture'>RAWArchitecture"</xref>.architecture <xref target='RFC9912'></xref>. A Track is a networking graph that can be followed to transport packets with equivalent treatment; as opposed tothe definitionother definitions of a pathabove,(see <xref target="RFC1122" section="1.3.3"/> and <xref section="3.1.1" target="RFC9912"/>, a Track is not necessarily linear. It may contain multiple paths that may fork andrejoin,rejoin and that may enabletheRAW Packet ARQ, Replication, Elimination, and Overhearing (PAREO) operations. </t> <t> <xref target='TRK'/> illustrates the mapping of the DODAG with the generic concept of a Track, with the DODAG Root acting asIngressthe ingress for the Track, and the mapping of protection paths and segments,andi.e., only forward segments, meaning that they are directional and progressing towards the destination. Note that East is represented on the left since the packets are forwarded East-West. </t> <figure anchor='TRK'><name>A Track anditsIts Components</name> <artworkalign="center"><![CDATA[><![CDATA[ North East North West A ==> B ==> C -=- F ==> G ==> H T1I: Ingress/ \ / \ /E: EgressI O E -=- T2T1, T2, T3:\ / \ / \ExternalP ==> Q ==> R -=- T ==> U ==> V T3TargetsSouth East South WestII: ingress E: egress T1, T2, T3: external targets ]]></artwork> </figure> <t>Of note:</t> <dl newline="false" spacing="normal"> <dt>I ==> A ==> B ==>C : a SegmentC:</dt><dd>A segment to targets F andO IO</dd> <dt>I --> F -->E : aE:</dt><dd>A protection path to targets T1, T2,T3 I,T3</dd> <dt>I, A, B, C, F, G, H,E : aE:</dt><dd>A path to T1, T2,T3 ]]></artwork> </figure>T3</dd> </dl> <t> This specification builds Tracks that are DODAGs oriented towards a TrackIngress,ingress, and the forward direction for packets is from the TrackIngressingress to one of thepossiblypossible multiple TrackEgress Nodes,egress nodes, which is also down the DODAG. </t> <t> The Track 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. </t> <section><name>TrackID</name> <t> ARPL InstanceIDRPLInstanceID (typically of a Local Instance)thatidentifies a Track using the namespace owned by the TrackIngress.ingress. For Local Instances, the TrackID is associated with the IPv6Addressaddress of the TrackIngressingress that is used as the DODAGID, and together they form a unique identification of the Track (see the definition of DODAGID insection 2 of<xreftarget='RFC6550'/>.target='RFC6550' section="2"/>). </t> </section> <section><name>Namespace</name> <t> The termnamespace"namespace" is used to refer to the scope of the TrackID. The TrackID is locally significant within its namespace. For Local Instances, the namespace is identified by the DODAGID for theTrackTrack, and the tuple (DODAGID, TrackID) is globally unique. For Global Instances, the namespace is the whole RPL domain. </t> </section> <section><name>Complex Track</name> <t>A Complex Track is a Track that can be traversed via more than one path (e.g., a DODAG). </t> </section><section><name>Stand-Alone</name><section><name>Stand Alone</name> <t>RefersStand alone refers to a segment or a protection path that is installed with a single P-DAO that fully defines the path, e.g., a stand-alone segment is installed with a single Storing Mode Via InformationoptionOption (SM-VIO) all the way betweenIngressthe ingress andEgress.egress. </t> </section> <section><name>Stitching</name> <t> This specification uses the termstitching"stitching" to indicate that atrackTrack is piped to another one, meaning that traffic out of the firsttrackTrack is injected into the othertrack.Track. </t> </section> <section><name>Protection Path</name> <t> The concept of protection path is defined in the<xref target='I-D.ietf-raw-architecture'>RAWArchitecture"</xref>architecture <xref target='RFC9912'></xref> as an end-to-end forward serial path. With this specification, a protection path is installed by the Root of the main DODAG using a Non-Storing Mode P-DAO message, e.g., I --> F --> E in <xref target="TRK"/>. </t> <t> As the Non-Storing Mode Via InformationoptionOption (NSM-VIO) can only signal sequences of nodes, it takes one Non-Storing Mode P-DAO message per protection path to signal the structure of acomplexComplex Track. </t> <t> Each NSM-VIO for the same TrackID but with a differentSegment IDSegmentID signals a different protection path that the TrackIngressingress adds to the topology. </t> </section> <section><name>Segment</name> <t> A segment is a serial path formed by a strict sequence ofnodes,nodes along which a P-Route is installed, e.g., I ==> A ==> B ==> C in <xref target="TRK"/>. With this specification, a segment is typically installed by the Root of the main DODAG using Storing Mode P-DAO messages. A segment is used as the topological edge of a Track joining the loose steps along the protection paths that form the structure of acomplexComplex Track. The same segment may be leveraged by more than one protection path where the protection paths overlap. </t> <t> Since this specification builds only DODAGs, all segments are oriented fromIngressthe ingress (East) toEgressegress (West), as opposed to the general Track model in the<xref target='I-D.ietf-raw-architecture'>RAWArchitecture</xref>,architecture <xref target='RFC9912'/>, which allows North/South segments that can be bidirectional as well. </t> <section><name>Section of a Segment</name> <t>AThe section of a segment refers to a continuous subset of a segment that may be replaced while the segment remains. For instance, in segment A=>B=>C=>D=>E=>F, say that the link C to D might be misbehaving. The section B=>C=>D=>E in the segment may be replaced byB=>C’=>D’=>EB=>C'=>D'=>E to route around the problem. The segment becomesA=>B=>C’=>D’=>E=>F.A=>B=>C'=>D'=>E=>F. </t> </section> <section anchor='SRSRH'><name>Segment Routing and SRH</name> <t> In a Non-StoringmodeMode RPL domain, the IPv6RHRouting Header used forsource-routingsource routing is the(RPL) SRHRPL Source Route Header as defined in <xref target='RFC6554'/>. This specification operates in that context and uses the acronym SRH to meantheIPv6 RH type33, as opposed totheIPv6 RH type 4 defined in <xref target='RFC8754'/> fortheSegment Routing over IPv6 (SRv6) operation. </t> <t> If the network is a 6LoWPANNetwork,network, the expectation is that the SRH is compressed and encoded as a 6LoWPAN Routing Header (6LoRH), as specified insection 5 of<xreftarget='RFC8138'/>.target='RFC8138' section="5"/>. </t> <t> This specification uses the term "Segment Routing"generically,generically to refer to usingsource-routingsource routing to hop over segments. As such, forwarding along segments as specified hereafter can be seen as a form of Segment Routing <xreftarget='RFC8402'/>, but leveragingtarget='RFC8402'/> that leverages the(RPL) SRHRPL Source Route Header for its operation. </t> <t> Outside of LLNs, the RPLNetworknetwork may be less constrained and operated in Storing Mode, as discussed in <xref target='smmd'/>. In that case, this specification could be extended to accommodate the SRv6 RH. </t> </section><!-- end section "Segment Routing and SRH" --></section><!-- Segment --></section> </section><!-- end section "Domain Terms" --></section><!-- end section "Terminology" --><section anchor='context'><name>Context and Goal</name> <section anchor='onrpl'><name>RPL Applicability</name> <t> RPL is optimized for situations where the power is scarce, the bandwidth isconstrainedconstrained, and the transmissions are unreliable. This matches the use case of an IoT LLN where RPL is typically usedtoday, buttoday and also situations of high relative mobility between the nodes in the network (a.k.a. swarming), e.g., within a variable set of vehicles with a similar globalmotion,motion or a platoon of drones. In contrast, this specification only applies when the platoon has a relatively stable topology where the segments can be attributedareliability and availability for a certainlifetime,lifetime; see <xreftarget='I-D.ietf-raw-architecture'/>. </t><t>target='RFC9912'/>. </t> <t> To reach this goal, RPL is primarily designed to minimize the control planeactivity, that isactivity (i.e., the relative amount of routing protocol exchangesvs.versus datatraffic,traffic) and the amount of state that is maintained in each node. RPL does not need to converge, and it provides connectivity to most nodes most of the time. </t><t> RPL may form multiple topologies calledinstances.Instances. Instances can be created to enforce various optimizations throughobjective functions,Objective Functions or to reach out through different RootNodes.nodes. The concept ofobjective functionObjective Function allowsto adaptadapting the activity of the routing protocol to the use case, e.g., type, speed, and quality of the LLN links. </t><t> RPLinstancesInstances operate in parallel, unaware of one another. Yet, it is possible to define a model whereby if a route cannot be found in the currentinstanceInstance A where a packet is being forwarded, then the router maylookuplook up the routing table(RIB)(i.e., the RIB) inan instanceInstance B and forward alonginstanceInstance B if the route is found there. To avoid loops, this must happen in such a way that theinstancesInstances themselves form adirected acyclic graphDirected Acyclic Graph (DAG) leading to the last resortinstance thatInstance, which is the "lowest"instanceInstance ifinstanceInstance A is considered "higher" theninstanceInstance B. This specification uses underlay Tracks as "lower"instances,Instances, with the maininstanceInstance being the "highest" of all. </t><t> The RPL Root is responsible for selecting the RPL Instance that is used to forward a packet coming from theBackbonebackbone into the RPL domain and for setting the related RPL information in the packets. Each Instance creates its own routing table(RIB)(i.e., a RIB) in participating nodes, and the RIB associated to theinstanceInstance must be used end to end in the RPL domain. To that effect, RPL tags the packets with the Instance ID in a Hop-by-Hop extensionHeader.header. 6TiSCH leverages RPL for its distributed routing operations. </t><t> To reduce the routing exchanges, RPL leverages an anisotropic Distance Vector approach, which does not needaglobal knowledge of thetopology,topology and only optimizes the routes to and from the RPL Root, allowing P2P paths to be stretched. Although RPL installs its routes proactively, it only maintains them lazily, in reaction to actualtraffic,traffic or as a slow background activity. </t><t> This is simple and efficient in situations where the traffic is mostly directed from or to a central node, such as the control traffic between routers and a controller of aSoftware DefinedSoftware-Defined Networking (SDN) infrastructure or an Autonomic Control Plane (ACP). </t><t> But stretch in P2P routing is counter-productive to both reliability and latency as it introduces additional delay and chances of loss. As a result, <xref target='RFC6550'/> is not a good fit for the use cases listed in the RAW use cases document <xref target='RFC9450'/>, which demand high availability andreliability, andreliability and, as aconsequenceconsequence, require both short and diverse paths. </t> </section><!-- end section "RPL Applicability" --><section anchor='onrplroute'><name>Multi-Topology Routing and Loop Avoidance</name> <t> RPL first forms a default route in each node towards the Root, and those routes together coalesce as aDirected Acyclic GraphDAG oriented upwards. RPL then constructs routes to destinations signaled as Targets in the reverse direction, down the same DODAG. To do so, a RPL Instance can be operatedeitherin either RPL Storing or Non-StoringMode of Operation (MOP).MOP. The default route towards the Root is maintained aggressively and may change while a packet progresses without causing loops, so the packet will still reach the Root. </t> <t>In Non-Storing Mode, each node advertises itself as a Target directly to the Root, indicating the parents that may be used to reach itself. Recursively, the Root builds and maintains an image of the whole DODAG inmemory,memory and leverages that abstraction to compute source route paths for the packets to their destinations down the DODAG. When a node changes its point(s) of attachment to the DODAG, it takes a single unicast packet to the Root along the default route to update it, and the connectivity to the node is restored immediately; this mode is preferable for use cases where internet connectivity isdominant,dominant or when the Root controls the network activity in the nodes, which is the caseofin this specification. </t> <t> In Storing Mode, the routing information percolates upwards, and each node maintains the routes to the subDAG of its descendants down the DODAG. The maintenance islazy,lazy; it is either reactive upon receiving traffic orasa slow background process. Packets flow via the common parent and the routing stretch isreducedreduced, compared to the Non-Storing MOP, for better P2P connectivity. However, a new route takes a longer time to propagate to the Root, since it takes time for theDistance-VectorDistance Vector protocol to operatehop-by-hop,hop by hop, and the connectivity from theinternetInternet to the node is restored more slowly upon node movement. </t> <t> Either way, the RPL routes are injected by the Targetnodes,nodes in a distributed fashion. To complement RPL and eliminate routing stretch, this specification introduces a hybrid mode that combines Storing and Non-Storing operations to build and project routes onto the nodes where they should be installed. This specification uses the termProjected Route (P-Route)"P-Route" to refer to those routes. </t> <t> In the simplest mode of this specification,Storing-ModeStoring Mode P-Routes can be deployed tojoincomplete the path between the hops described in thedots of aloosesource routing header (SRH)SRH in the main DODAG. In that case, all the routes (source routed and P-Routes) belong to the Routing InformationbaseBase (RIB) associated with the main Instance.Storing-ModeStoring Mode P-Routes are referred to as segments in this specification. </t> <t>A set of P-Routes can also be projected to form a dotted-line underlay of the main Instance and provideTraffic EngineeredTraffic-Engineered paths for an application. In that case, the P-Routes are installed in Non-StoringModeMode, and the set of P-Routes is called a Track. A Track is associated with its own RPLInstance,Instance and, as any RPL Instance, with its ownRouting Information base (RIB).RIB. As a result, each Track defines a routing topology in the RPL domain. As for the main DODAG, segments associated to the Track Instance may be deployed tojoinestablish thedotscomplete path between loose source routing hops usingStoring-Modesegments expressed as Storing Mode P-Routes. </t> <t> Routing in a multi-topology domain may cause loops unless strict rules are applied. This specification defines two strict orders to ensure loop avoidance whenprojected routesP-Routes are used in a RPLdomain,domain: one between forwarding methods and one between RPL Instances,seen aswhich are routing topologies. </t> <t> The firstand strictorder is strict and complete and relates to the forwarding methodand theand, morespecificallyspecifically, the origin of the information used in the next-hop computation. The possible forwarding methods are: 1) to a direct next hop, 2) to an indirect neighbor via a common neighbor, 3) along a segment, and 4) along a nested Track. The methods are strictly ordered as listedabove,above; see more in <xref target = "routing"/>. A forwarding method may leverage any of thelower orderlower-order ones, but never one with a higher order; for instance, when forwarding a packet along a segment, the router may use direct or indirect neighbors but cannot use a Track. Thelower orderlower-order methods have a strict precedence, so the router will always prefer a direct neighbor over an indirectone,one or a segment within the current RPL Instancevs.over another Track. </t> <t> The second order is strict and partialorder isand applies between RPL Instances. It allows the RPL node to detect an error in the state installed by the PCE, e.g., after a desynchronization. That order must be defined by the administrator for the RPL domain and defines a DODAG ofunderlaysunderlay RPL Instances with the main Instance as the Root. The relation of RPLinstancesInstances may be represented as a DODAG ofinstancesInstances where the maininstanceInstance is the Root. The rule is that a RPL Instance may leverage another RPLinstanceInstance as an underlay if and only if that other Instance is one of its descendants in the graph. Supporting this method isOPTIONAL<bcp14>OPTIONAL</bcp14> for nested Tracks andREQUIRED<bcp14>REQUIRED</bcp14> between a TrackinstanceInstance and the maininstance. <!-- The way this graph is communicated to the RPL nodes is out of scope. -->Instance. It may be done using networkmanagement,management or future extensions to this specifications. Whenitthe DODAG of underlay Instances is notcommunicated, thenprovided, the RPL nodes consider by default that all TrackinstancesInstances are children of the maininstance,Instance, and they do not attempt to validate the order for nested Tracks, trusting the PCE implicitly. As a result, a packet that is being forwarded along the main Instance may be encapsulated in any Track, but a packet that was forwarded along a TrackMUST NOT<bcp14>MUST NOT</bcp14> be forwarded along the default route of the main Instance. </t> </section><!-- end section "Multi-Topology Routing and Loop Avoidance" --><section><name>Requirements</name> <section anchor='loose'><name>Loose Source Routing</name> <t>A RPL implementation operating in a very constrained LLN typically uses the Non-StoringMode of OperationMOP as represented in <xref target='nost'/>. 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 asource routedsource-routed path to a destination down the DODAG by recursively concatenating this information. </t> <figure anchor='nost'><name>RPL Non-Storing Mode ofoperationOperation </name><artwork><artwork><![CDATA[ +-----+ | | 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 oLLN </artwork>LLN]]></artwork> </figure> <t> Based on the parent-children relationships expressed in the Non- 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 applyasource 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. This results in the wireless bandwidth near the Root being the limiting factor for all transmissions towards or within the domain, andthatthe Root is a single point of failure for all connectivity to nodes within its domain. </t> <t> The RPL Root must add asource routing headerSource Routing Header to all downward packets. As a network grows, the size of thesource routing headerSource Routing Header increases with the depth of the network. In some use cases, a RPL network forms long lines along physical structuressuch aslike streetsforwith lighting. Limiting the packet size is beneficial to the energy budget, directly for the currenttransmission, buttransmission and also indirectly since it reduces the chances of frame loss and energy spent in retries, e.g., by ARQ over one hop atLayer-2,Layer 2 orend-to-endend to end at upper layers. Using smaller packets also reduces the chances of packet fragmentation, which is highly detrimental to the LLN operation, in particular when fragments are forwarded but notrecovered,recovered; see <xref target="RFC8930"/>vs.compared to <xref target="RFC8931"/> formore.more details. </t> <t> A limited amount of well-targeted routing state would allow the source routing operation to be loose as opposed tostrict,strict and would reduce the overhead of routing information in packets. Because the capability to store routing state in every node is limited, the decision of which route is installed where can only be optimized with global knowledge of the system, knowledge that the Root or an associated PCE may possess by means that are outside the scope of this specification. </t> <t> Beingon-pathon path for all packets in Non-Storingmode,Mode, the Root may determine the number of P2P packets in its RPL domain per source and destination, the latency incurred, and the amount of energy and bandwidth that is consumed to reach itself and then back down, including possible fragmentation when encapsulating larger packets. Enabling a shorter path that would not traverse the Root for select P2Psource/destinationssources/destinations may improve the latency, lower the consumption of constrained resources, free bandwidth at the bottleneck near the Root, improve the deliveryratioratio, and reduce the latency for those P2Pflows withflows; this would be a global benefit for all flows by reducing the load at the Root. </t> <t> To limit the need forsource route headersRPL Source Route Headers in deep networks, one possibility is to store a routing state associated with the main DODAG in select RPL routers down the path. The Root may elide the sequence of routers that is installed in the network from itssource route header,RPL Source Route Header, which therefore becomes loose, in contrast to being strict in <xref target="RFC6550"/>. </t> </section><!-- Loose Source Routing --> <section><name>forward<section><name>Forward Routes</name> <t> <xref target="RFC6550"/> optimizes P2MP routes from the Root, MP2P routes towards the Root, andas a consequenceroutes from/to the outside of the RPL domain when the Root also serves asBorder Router.the border router. All routes are installed North-South (a.k.a. up/down) along the RPL DODAG.Peer to Peer (P2P)Peer-to-Peer forward routes in a RPL network will generally experience elongated (stretched) pathsversusrather than direct (optimized) paths, since routing between two nodes always happens via a common parent, as illustrated in <xref target='stretch'/>: </t> <figure anchor='stretch'><name>Routing StretchbetweenBetween S and D viacommon parentCommon Parent XalongAlong North-South Paths</name><artwork><artwork><![CDATA[ ------+--------- | Internet +-----+ | | BorderrouterRouter | | (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 oLLN </artwork>LLN]]></artwork> </figure> <t>As described in <xref target="RFC9008" />, the amount of stretch depends on theMode of Operation:MOP: </t> <ul spacing='normal'> <li>inIn 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. </li> <li>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; atworse,worst, 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.</li> </ul> <t> It turns out that it is often beneficial to enable direct P2Proutes, eitherroutes if either the RPL route presents a stretch from the shortestpath,path orifthe new route is engineered with a different objective, and this is even more critical in Non-Storing Mode than it is in StoringMode,Mode because the routing stretch is wider. For that reason, earlier workatwithin the IETFintroducedwas introduced: the "<xref format="title" target='RFC6997'/>" <xreftarget='RFC6997'>"Reactive Discovery of Point-to-Point Routes in Low Power and Lossy Networks"</xref>,target="RFC6997"/>, which specifies a distributed method for establishing optimized P2P routes. This specification proposes an alternative based on centralized route computation. </t> <figure anchor='opti2'><name>Moredirect forwardDirect Forward RoutebetweenBetween S and D</name><artwork><artwork><![CDATA[ +-----+ | | 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 oLLN </artwork>LLN]]></artwork> </figure> <t> The requirement is to install additional routes in the RPL routers, to reduce the stretch of some P2P routes and maintain the characteristics within a givenSLO,Service Level Objective (SLO), e.g., in terms of latency and/or reliability. </t> </section> </section><!-- Requirements --><section anchor='tracks'><name>On Tracks</name> <section anchor='ctracks'><name>Building Tracks with RPL</name> <t> The concept of a Track was introduced in the 6TiSCH architecture <xreftarget='RFC9030'> "6TiSCH Architecture"</xref>,target='RFC9030'></xref> as a collection of potential protection paths that leverage redundant forwarding solutions along the way. This can be a DODAG or a more complex structure that is only partially acyclic (e.g., per packet). </t> <t> With this specification, a Track is shaped as a DODAG, and following the directed edges leads to a TrackIngress.ingress. Storing Mode P-DAO messages follow the direction of the edges to set up routes for traffic that flows the other way, towards the TrackEgress(es).egress(es). If there is a single TrackEgress,egress, then the Track is reversibleto formso that another DODAG may be formed by reversing the direction of each edge. A node at theIngressingress of more than one segment in a Track may use one or more of these segments to forward a packet inside the Track. </t> <t> A RPL Track is a collection of (one or more) parallel loosesource routedsource-routed sequences of nodes ordered fromIngressingress toEgress,egress, each forming a protection path. The nodes in a Track are directly connected, reachable via existing Tracks as illustrated in <xref target='nssr'/> or joined with strict segments of other nodes as shown in <xref target='srpdao'/>. The protection paths are expressed in RPL Non-Storing Mode and require an encapsulation to add a RPL Source Route Header, whereas the segments are expressed in RPL Storing Mode. </t> <t> A path provides only one path betweenIngressthe ingress andEgress.egress. It comprises exactly one protection path. AStand-Alonestand-alone segment implicitly defines a path from itsIngressingress toEgress.egress. </t> <t> AcomplexComplex Track forms a graph that provides a collection of potential paths to provide redundancy for the packets, either as a collection of protection paths that may be parallel or interleaved at certainpoints,points or as a more generic DODAG. </t></section><!-- Building Tracks --></section> <section anchor='stracks'><name>Tracks and RPL Instances</name> <t>Section 5.1. of<xreftarget='RFC6550'/>target='RFC6550' section="5.1"/> describes the RPL Instance and its encoding. There can be up to 128 Global RPL Instances, for which there can be one or more DODAGs, and there can be 64localLocal RPL Instances, with a namespace that is indexed by a DODAGID, where the DODAGID is a Unique Local Address (ULA) or a Global Unicast Address (GUA) of the Root of the DODAG. Bit 0 (most significant) is set to 1 to signal a Local RPLInstanceID, as shown in <xref target='rpid'/>. By extension, this specification expresses the value of the RPLInstanceID as a single integer between 128 and 191, representing both the Local RPLInstanceID in 0..63 in the rightmost bits andBitbit 0 set. </t> <figure anchor='rpid'><name>Local RPLInstanceID Encoding</name> <artworkalign="center">><![CDATA[ 0 1 2 3 4 5 6 7 +-+-+-+-+-+-+-+-+ |1|D| ID | Local RPLInstanceID in 0..63 +-+-+-+-+-+-+-+-+ | | \ \ \ Bit 1 is set to 0 inTrack IDsTrackIDs Bit 0 set to 1 signals alocal RPLInstanceID </artwork>Local RPLInstanceID]]></artwork> </figure> <t> A Track typically forms an underlay to the mainInstance,Instance and is associated with a Local RPL Instance from which the RPLInstanceID is used as the TrackID. When a packet is placed on a Track, it isencapsulatedIP-in-IP encapsulated with a RPL Option containinga RPI whichRPL Packet Information (RPI) that signals the RPLInstanceID. The encapsulating source IP address and RPI Instance are set to the TrackIngressingress IP address andlocalLocal RPLInstanceID,respectively,respectively; see more in <xref target='trkid'/>. </t> <t> A Track typically offers service protection across several protection paths. As a degraded form of a Track, a path made of a single protection path (i.e., offering no protection) can be used as an alternative to a segment for forwarding along a RPL Instance. In that case, instead of following native routes along theinstance,Instance, the packets are encapsulated to signal amore specificmore-specific source-routed path between the loose hops in the encapsulatedsource routing header.Source Routing Header. </t><t> If the encapsulated packet follows aglobal instance,Global Instance, then the protection path may be part of thatglobal instanceGlobal Instance as well,for instancee.g., theglobal instanceGlobal Instance of the main DODAG. This can only be done forglobal instancesGlobal Instances because theIngressingress node that encapsulates the packets over the protection path is not the Root of theinstance,Instance, so the source address of the encapsulated packet cannot be used to determine the Track along the way. </t></section><!-- Tracks and RPL Instances --> </section><!-- On tracks --> <section><name>path</section> </section> <section><name>Path Signaling</name> <t> This specification enables setting up a P-Route along either a protection path or a segment. A P-Route is installed and maintained by the Root of the main DODAG using an extended RPL DAO message called aProjected DAO (P-DAO),P-DAO, and a Track is composed of the combination of one or more P-Routes. In order to clarify the techniques that may be used to install a P-Route, this sectiontakesuses the simple case of the path illustrated in <xref target='reft'/>.SoThus, the goal is to build a path from node A to E for packets towards E's neighbors F and G along A, B, C,DD, and E as opposed to via the Root: </t> <figure anchor='reft'><name>Reference Track</name> <artworkalign="center"> /===>><![CDATA[ /===> F A===>===> B===>===> C===> D===>===> D===> E< \===> G </artwork>< \===> G]]></artwork> </figure> <t> A P-DAO message for a Track signals the TrackID in the RPLInstanceID field. In the case of alocalLocal RPL Instance, the address of the TrackIngressingress is used as the source to encapsulate packets along the Track. The Track is signaled in the DODAGID field of theProjected DAOP-DAO BaseObject,Object; see <xref target='p-dao-fmt'/>. </t><t> This specification introduces the Via Information Option (VIO) to signal a sequence of hops in a protection path or a segment in the P-DAO messages, either in Storing Mode (SM-VIO) or in Non-Storing Mode (NSM-VIO). One P-DAO message contains a single VIO, which is associated to one or more RPL Target Options that signal the destination IPv6 addresses that can reached along the Track(more(see more in <xref target='viof'/>). </t> <t> Before diving deeper into Track and segment signaling and operation, this section provides examples of how route projection works through variations of a simple example. This simple example illustrates the case of host routes, though RPL Targets can also be prefixes. </t> <t>ConventionallyConventionally, we use ==> to represent a strict hop and --> for a loose hop. We use "-to-", such as inC==>D==>E-to-FC==>D==>E-to-F, to representcoma-separatedcomma-separated Targets, e.g., F is a Target for segment C==>D==>E. Inthis example,the example below, A is the TrackIngressingress and E is the TrackEgress.egress. C is a stitching point. F and G are"external”"external" Targets for theTrack,Track and become reachable from A viatheTrack A(Ingress)(ingress) to E(Egress(egress and implicit Target in Non-StoringMode)Mode), leading to F and G (explicit Targets). </t> <t> In a generalmannermanner, the desired outcome is as follows: </t> <ul> <li>Targets are E, F, and G </li> <li>P-DAO 1 signals C==>D==>E</li> <li>P-DAO 2 signals A==>B==>C</li> <li>P-DAO 3 signals F and G via the A-->E Track</li> </ul> <t> P-DAO 3 may be omitted ifP-DAOP-DAOs 1 and 2 signal F and G as Targets. </t> <t> Loose sequences of hops are expressed in Non-Storing Mode; this is why P-DAO 3 containsaan NSM-VIO. With this specification: </t> <ul> <li>theThe DODAGID to be used by theIngressingress as the source address is signaled in the DAObase objectBase Object (see <xreftarget='p-dao-fmt'/>) .target='p-dao-fmt'/>). </li><li>theThe via list in the VIO is encoded as an SRH-6LoRH (see <xref target='viao'/>), and it starts with the address of thefirst hopfirst-hop node after theIngressingress node in the loose hop sequence. </li><li>theThe via list ends with the address of theEgressegress node. </li> </ul><t> Note well: </t> <blockquote><aside><t>Note 1: TheEgressegress of a Non-Storing Mode P-Route is implicitly a target; it is not listed in the RPL Target Options but is still accounted for as if it was. The only exception is when theEgressegress is the only address listed in the VIO, in which case it would indicate viaitselfitself, which would benon-sensical. </blockquote> <t> Also: </t> <blockquote>nonsensical.</t> </aside> <aside><t>Note 2: By design, the list of nodes in a VIO in Non-Storing Mode is exactly the list that shows in the encapsulation SRH. So in the cases detailed below, if the Mode of the P-DAO is Non-Storing, then the VIO row can be read as indicating the SRH aswell. </blockquote>well.</t></aside> <section anchor="usms"><name>Using Storing Mode Segments</name> <t> A==>B==>C and C==>D==>E are segments of the 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. </t> <section><name>Stitched Segments</name> <t>In this formulation:</t> <ul> <li>P-DAO 1 signals C==>D==>E-to-F,G</li> <li>P-DAO 2 signals A==>B==>C-to-F,G</li> </ul> <t>Storing Mode P-DAO 1 is sent toEE, and when it is successfully acknowledged, Storing Mode P-DAO 2 is sent toC,C as follows:</t> <table anchor="PDAOcase11"><name>P-DAO Messages</name> <thead><tr><th align='center'>Field</th> <th align='left'>P-DAO<tr><th>Field</th> <th>P-DAO 1 to E</th><th align='left'>P-DAO<th>P-DAO 2 to C</th></tr> </thead> <tbody><tr><td align='center'>Mode</td> <td align='left'>Storing</td> <td align='left'>Storing</td></tr> <tr><td align='center'>Track Ingress</td> <td align='left'>A</td> <td align='left'>A</td></tr> <tr><td align='center'>(DODAGID, TrackID)</td> <td align='left'>(A,<tr><th>Mode</th> <td>Storing</td> <td>Storing</td></tr> <tr><th>Track ingress</th> <td>A</td> <td>A</td></tr> <tr><th>(DODAGID, TrackID)</th> <td>(A, 129)</td><td align='left'>(A,<td>(A, 129)</td></tr><tr><td align='center'>SegmentID</td> <td align='left'>1</td> <td align='left'>2</td></tr> <tr><td align='center'>VIO</td> <td align='left'>C,<tr><th>SegmentID</th> <td>1</td> <td>2</td></tr> <tr><th>VIO</th> <td>C, D, E</td><td align='left'>A,<td>A, B, C</td></tr><tr><td align='center'>Targets</td> <td align='left'>F,<tr><th>Targets</th> <td>F, G</td><td align='left'>F,<td>F, G</td></tr> </tbody> </table> <t>As aresultresult, the RIBs are set as follows:</t><!-- COMMENT: The acronym for RIB is not defined AUTH: added --><table anchor="RIBcase11"><name>RIBsetting</name>Settings</name> <thead><tr><th align='center'>Node</th> <th align='left'>Destination</th> <th align='left'>Origin</th> <th align='left'>Next<tr><th>Node</th> <th>Destination</th> <th>Origin</th> <th>Next Hop(s)</th><th align='left'>TrackID</th></tr><th>TrackID</th></tr> </thead> <tbody><tr><td align='center'>E</td> <td align='left'>F,<tr><td>E</td> <td>F, G</td><td align='left'>P-DAO<td>P-DAO 1</td><td align='left'>Neighbor</td> <td align='left'>(A,<td>Neighbor</td> <td>(A, 129)</td></tr><tr><td align='center'>D</td> <td align='left'>E</td> <td align='left'>P-DAO<tr><td>D</td> <td>E</td> <td>P-DAO 1</td><td align='left'>Neighbor</td> <td align='left'>(A,<td>Neighbor</td> <td>(A, 129)</td></tr><tr><td align='center'>"</td> <td align='left'>F,<tr><td>"</td> <td>F, G</td><td align='left'>P-DAO<td>P-DAO 1</td><td align='left'>E</td> <td align='left'>(A,<td>E</td> <td>(A, 129)</td></tr><tr><td align='center'>C</td> <td align='left'>D</td> <td align='left'>P-DAO<tr><td>C</td> <td>D</td> <td>P-DAO 1</td><td align='left'>Neighbor</td> <td align='left'>(A,<td>Neighbor</td> <td>(A, 129)</td></tr><tr><td align='center'>"</td> <td align='left'>F,<tr><td>"</td> <td>F, G</td><td align='left'>P-DAO<td>P-DAO 1</td><td align='left'>D</td> <td align='left'>(A,<td>D</td> <td>(A, 129)</td></tr><tr><td align='center'>B</td> <td align='left'>C</td> <td align='left'>P-DAO<tr><td>B</td> <td>C</td> <td>P-DAO 2</td><td align='left'>Neighbor</td> <td align='left'>(A,<td>Neighbor</td> <td>(A, 129)</td></tr><tr><td align='center'>"</td> <td align='left'>F,<tr><td>"</td> <td>F, G</td><td align='left'>P-DAO<td>P-DAO 2</td><td align='left'>C</td> <td align='left'>(A,<td>C</td> <td>(A, 129)</td></tr><tr><td align='center'>A</td> <td align='left'>B</td> <td align='left'>P-DAO<tr><td>A</td> <td>B</td> <td>P-DAO 2</td><td align='left'>Neighbor</td> <td align='left'>(A,<td>Neighbor</td> <td>(A, 129)</td></tr><tr><td align='center'>"</td> <td align='left'>F,<tr><td>"</td> <td>F, G</td><td align='left'>P-DAO<td>P-DAO 2</td><td align='left'>B</td> <td align='left'>(A,<td>B</td> <td>(A, 129)</td></tr> </tbody> </table><t> Note: </t> <blockquote> the<aside><t>Note: The " sign is used throughoutthosethe tables in this document to indicate the same value as in the rowabove. </blockquote> <!-- COMMENT: What does the double quote (") stand for? "Same as above"? If yes, maybe it better to just be explicit and repeat the Node value. AUTH: yes that is what it means, and for the second point, I tried and that was really awful to read -->above.</t></aside> <t> Packets originating at A and going to F or G do not require 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: </t> <!--[rfced] We note that several of the tables have the same title; will this be confusing for readers? For instance, Tables 3, 6, 9, 15, 18, 19, and 20 are all titled "Packet Header Settings". Would you like to make these titles more descriptive like Table 12, which is titled "Packet Header Settings Between C and E"? If so, please provide the wording. If not, should the title of Table 12 be updated for consistency with the other titles (i.e., update as "Packet Header Settings")? Note that Tables 2, 5, 8, 11, 14, and 17 are all titled "RIB Settings", and Tables 1, 4, 7, 10, 13, and 16 are all titled "P-DAO Messages". --> <table anchor="Packetcase11"><name>Packet Header Settings</name> <thead> <tr><thalign='center'>Header</th>align="center">Header</th> <thalign='center'>IPv6align="center">IPv6 SourceAddr.</th>Address</th> <thalign='center'>IPv6 Dest. Addr.</th>align="center">IPv6 Destination Address</th> <thalign='center'>TrackIDalign="center">TrackID in RPI</th></tr> </thead> <tbody> <tr><tdalign='center'>Outer</td>align="center">Outer</td> <tdalign='center'>A</td>align="center">A</td> <tdalign='center'>Falign="center">F or G</td> <tdalign='center'>(A,align="center">(A, 129)</td></tr> <tr><tdalign='center'>Inner</td>align="center">Inner</td> <tdalign='center'>Anyalign="center">Any but A</td> <tdalign='center'>Falign="center">F or G</td> <tdalign='center'>N/A</td></tr>align="center">N/A</td></tr> </tbody> </table><!-- COMMENT: The X != A is not very clear. I would guess it means "anything else but A" but maybe a note will clarify this. AUTH: replaced with "Any but A" --><t> As an example, say that A has a packet for F. Using the RIB in <xref target='RIBcase11'/>: </t> <ul> <li>From P-DAO 2: A forwards toBB, and B forwards to C.</li> <li>From P-DAO 1: C forwards toDD, and D forwards to E.</li> <li>From Neighbor Cache Entry: E delivers the packet to F.</li> </ul></section><!-- Stitched Segments --></section> <section><name>External Routes</name> <t>In this example, we consider F and G as destinations that are external to the Track as a DODAG, as discussed insection 4.1.1. of<xreftarget='RFC9008'/>.target='RFC9008' section="4.1.1"/>. We then apply the directives for encapsulating in that case(more(see more in <xref target='routing'/>). </t> <t>In this formulation, we set up the protection path explicitly, which creates less routing state in intermediate hops at the expense of larger packets to accommodate source routing:</t> <ul> <li>P-DAO 1 signals C==>D==>E-to-E</li> <li>P-DAO 2 signals A==>B==>C-to-E</li> <li>P-DAO 3 signals F and G via the A-->E-to-F,G Track</li> </ul> <t>Storing ModeP-DAOP-DAOs 1 and2,2 and Non-Storing Mode P-DAO3,3 are sent to E,CC, and A, respectively, as follows:</t> <table anchor="PDAOcase12"><name>P-DAO Messages</name> <thead><tr><th align='center'><tr><th> </th><th align='left'>P-DAO<th>P-DAO 1 to E</th><th align='left'>P-DAO<th>P-DAO 2 to C</th><th align='left'>P-DAO<th>P-DAO 3 to A</th></tr> </thead> <tbody><tr><td align='center'>Mode</td> <td align='left'>Storing</td> <td align='left'>Storing</td> <td align='left'>Non-Storing</td></tr> <tr><td align='center'>Track Ingress</td> <td align='left'>A</td> <td align='left'>A</td> <td align='left'>A</td></tr> <tr><td align='center'>(DODAGID, TrackID)</td> <td align='left'>(A,<tr><th>Mode</th> <td>Storing</td> <td>Storing</td> <td>Non-Storing</td></tr> <tr><th>Track ingress</th> <td>A</td> <td>A</td> <td>A</td></tr> <tr><th>(DODAGID, TrackID)</th> <td>(A, 129)</td><td align='left'>(A,<td>(A, 129)</td><td align='left'>(A,<td>(A, 129)</td></tr><tr><td align='center'>SegmentID</td> <td align='left'>1</td> <td align='left'>2</td> <td align='left'>3</td></tr> <tr><td align='center'>VIO</td> <td align='left'>C,<tr><th>SegmentID</th> <td>1</td> <td>2</td> <td>3</td></tr> <tr><th>VIO</th> <td>C, D, E</td><td align='left'>A,<td>A, B, C</td><td align='left'>E</td></tr> <tr><td align='center'>Targets</td> <td align='left'>E</td> <td align='left'>E</td> <td align='left'>F,<td>E</td></tr> <tr><th>Targets</th> <td>E</td> <td>E</td> <td>F, G</td></tr> </tbody> </table> <t> Note in the above that E is not an implicit Target in Storingmode,Mode, so it must be added in theRTORPL Target Option (RTO) forP-DAOP-DAOs 1 and 2. E is not an implicit Target for P-DAO 3 either, since E is the only entry in the VIO. </t> <t>As aresultresult, the RIBs are set as follows:</t> <table anchor="RIBcase12"><name>RIBsetting</name>Settings</name> <thead><tr><th align='center'>Node</th> <th align='left'>Destination</th> <th align='left'>Origin</th> <th align='left'>Next<tr><th>Node</th> <th>Destination</th> <th>Origin</th> <th>Next Hop(s)</th><th align='left'>TrackID</th></tr><th>TrackID</th></tr> </thead> <tbody><tr><td align='center'>E</td> <td align='left'>F,<tr><td>E</td> <td>F, G</td><td align='left'>P-DAO<td>P-DAO 1</td><td align='left'>Neighbor</td> <td align='left'>(A,<td>Neighbor</td> <td>(A, 129)</td></tr><tr><td align='center'>D</td> <td align='left'>E</td> <td align='left'>P-DAO<tr><td>D</td> <td>E</td> <td>P-DAO 1</td><td align='left'>Neighbor</td> <td align='left'>(A,<td>Neighbor</td> <td>(A, 129)</td></tr><tr><td align='center'>C</td> <td align='left'>D</td> <td align='left'>P-DAO<tr><td>C</td> <td>D</td> <td>P-DAO 1</td><td align='left'>Neighbor</td> <td align='left'>(A,<td>Neighbor</td> <td>(A, 129)</td></tr><tr><td align='center'>"</td> <td align='left'>E</td> <td align='left'>P-DAO<tr><td>"</td> <td>E</td> <td>P-DAO 1</td><td align='left'>D</td> <td align='left'>(A,<td>D</td> <td>(A, 129)</td></tr><tr><td align='center'>B</td> <td align='left'>C</td> <td align='left'>P-DAO<tr><td>B</td> <td>C</td> <td>P-DAO 2</td><td align='left'>Neighbor</td> <td align='left'>(A,<td>Neighbor</td> <td>(A, 129)</td></tr><tr><td align='center'>"</td> <td align='left'>E</td> <td align='left'>P-DAO<tr><td>"</td> <td>E</td> <td>P-DAO 2</td><td align='left'>C</td> <td align='left'>(A,<td>C</td> <td>(A, 129)</td></tr><tr><td align='center'>A</td> <td align='left'>B</td> <td align='left'>P-DAO<tr><td>A</td> <td>B</td> <td>P-DAO 2</td><td align='left'>Neighbor</td> <td align='left'>(A,<td>Neighbor</td> <td>(A, 129)</td></tr><tr><td align='center'>"</td> <td align='left'>E</td> <td align='left'>P-DAO<tr><td>"</td> <td>E</td> <td>P-DAO 2</td><td align='left'>B</td> <td align='left'>(A,<td>B</td> <td>(A, 129)</td></tr><tr><td align='center'>"</td> <td align='left'>F,<tr><td>"</td> <td>F, G</td><td align='left'>P-DAO<td>P-DAO 3</td><td align='left'>E</td> <td align='left'>(A,<td>E</td> <td>(A, 129)</td></tr> </tbody> </table> <t> Packets from A to E do not require an encapsulation.This is why inIn the tables below, this is why E may show as an IPv6Destination Addressdestination address only if the IPv6Source Addresssource address X is different from A. Conversely, the encapsulation is always done when the IPv6Destination Addressdestination address is F or G. Other destination addresses do not match this P-Route and are not subject to encapsulation. </t><t> The outer headers of the packets that are forwarded along the Track have the following settings: </t> <table anchor="Packetcase12"><name>Packet Header Settings</name> <thead> <tr><thalign='center'>Header</th>align="center">Header</th> <thalign='center'>IPv6align="center">IPv6 SourceAddr.</th>Address</th> <thalign='center'>IPv6 Dest. Addr.</th>align="center">IPv6 Destination Address</th> <thalign='center'>TrackIDalign="center">TrackID in RPI</th></tr> </thead> <tbody> <tr><tdalign='center'>Outer</td>align="center">Outer</td> <tdalign='center'>A</td>align="center">A</td> <tdalign='center'>E</td>align="center">E</td> <tdalign='center'>(A,align="center">(A, 129)</td></tr> <tr><tdalign='center'>Inner</td>align="center">Inner</td> <tdalign='center'>X</td> <td align='center'>Eitheralign="center">X</td> <td>Either F or G. If X!=A,thenE is also permitted.</td> <tdalign='center'>N/A</td></tr>align="center">N/A</td></tr> </tbody> </table><!-- COMMENT: The E (X != A) is not very clear. What is X? AUTH: X was the node in the column left to this. Changed to "either E if(X != A), or F, or G" --><t> As an example, say that A has a packet for F. Using the RIB in <xref target='RIBcase12'/>: </t> <ul> <li>From P-DAO 3: A encapsulates the packet and sends it down the Track signaled by P-DAO 3, with the outer header above. Now the packet destination is E.</li> <li>From P-DAO 2: A forwards toBB, and B forwards to C.</li> <li>From P-DAO 1: C forwards toDD, and D forwards to E; E decapsulates the packet.</li> <li>From Neighbor Cache Entry: E delivers packets to F or G.</li> </ul></section><!-- External routes --></section> <section anchor="srpdao"><name>Segment Routing</name> <t>In thisformulationformulation, protection paths are leveraged to combine segments and form aGraph.graph. The packets are source routed from a segment to the next to adapt the path:</t> <ul> <li>P-DAO 1 signals C==>D==>E-to-E</li> <li>P-DAO 2 signals A==>B-to-B,C</li> <li>P-DAO 3 signals F and G via the A-->C-->E-to-(E),F,G Track</li> </ul> <t>Storing ModeP-DAOP-DAOs 1 and2,2 and Non-Storing Mode P-DAO3,3 are sent to E,BB, and A, respectively, as follows:</t> <table anchor="PDAOcase13"><name>P-DAO Messages</name> <thead><tr><th align='center'><tr><th> </th><th align='left'>P-DAO<th>P-DAO 1 to E</th><th align='left'>P-DAO<th>P-DAO 2 to B</th><th align='left'>P-DAO<th>P-DAO 3 to A</th></tr> </thead> <tbody><tr><td align='center'>Mode</td> <td align='left'>Storing</td> <td align='left'>Storing</td> <td align='left'>Non-Storing</td></tr> <tr><td align='center'>Track Ingress</td> <td align='left'>A</td> <td align='left'>A</td> <td align='left'>A</td></tr> <tr><td align='center'>(DODAGID, TrackID)</td> <td align='left'>(A,<tr><th>Mode</th> <td>Storing</td> <td>Storing</td> <td>Non-Storing</td></tr> <tr><th>Track ingress</th> <td>A</td> <td>A</td> <td>A</td></tr> <tr><th>(DODAGID, TrackID)</th> <td>(A, 129)</td><td align='left'>(A,<td>(A, 129)</td><td align='left'>(A,<td>(A, 129)</td></tr><tr><td align='center'>SegmentID</td> <td align='left'>1</td> <td align='left'>2</td> <td align='left'>3</td></tr> <tr><td align='center'>VIO</td> <td align='left'>C,<tr><th>SegmentID</th> <td>1</td> <td>2</td> <td>3</td></tr> <tr><th>VIO</th> <td>C, D, E</td><td align='left'>A,<td>A, B</td><td align='left'>C,<td>C, E</td></tr><tr><td align='center'>Targets</td> <td align='left'>E</td> <td align='left'>B,<tr><th>Targets</th> <td>E</td> <td>B, C</td><td align='left'>F,<td>F, G</td></tr> </tbody> </table> <t> Note in the table above that the segment can terminate at the loose hop as used in the example of P-DAO 1 or at the previous hop as done with P-DAO 2. Both methods are possible on any segment joined by a loose protection path. P-DAO 1 generates more signaling since E is the segmentEgressegress when D could be, buthas thea benefit is that it validates that the connectivity between D and E still exists. </t> <t>As aresultresult, the RIBs are set as follows:</t> <table anchor="RIBcase13"><name>RIBsetting</name>Settings</name> <thead><tr><th align='center'>Node</th> <th align='left'>Destination</th> <th align='left'>Origin</th> <th align='left'>Next<tr><th>Node</th> <th>Destination</th> <th>Origin</th> <th>Next Hop(s)</th><th align='left'>TrackID</th></tr><th>TrackID</th></tr> </thead> <tbody><tr><td align='center'>E</td> <td align='left'>F,<tr><td>E</td> <td>F, G</td><td align='left'>P-DAO<td>P-DAO 1</td><td align='left'>Neighbor</td> <td align='left'>(A,<td>Neighbor</td> <td>(A, 129)</td></tr><tr><td align='center'>D</td> <td align='left'>E</td> <td align='left'>P-DAO<tr><td>D</td> <td>E</td> <td>P-DAO 1</td><td align='left'>Neighbor</td> <td align='left'>(A,<td>Neighbor</td> <td>(A, 129)</td></tr><tr><td align='center'>C</td> <td align='left'>D</td> <td align='left'>P-DAO<tr><td>C</td> <td>D</td> <td>P-DAO 1</td><td align='left'>Neighbor</td> <td align='left'>(A,<td>Neighbor</td> <td>(A, 129)</td></tr><tr><td align='center'>"</td> <td align='left'>E</td> <td align='left'>P-DAO<tr><td>"</td> <td>E</td> <td>P-DAO 1</td><td align='left'>D</td> <td align='left'>(A,<td>D</td> <td>(A, 129)</td></tr><tr><td align='center'>B</td> <td align='left'>C</td> <td align='left'>P-DAO<tr><td>B</td> <td>C</td> <td>P-DAO 2</td><td align='left'>Neighbor</td> <td align='left'>(A,<td>Neighbor</td> <td>(A, 129)</td></tr><tr><td align='center'>A</td> <td align='left'>B</td> <td align='left'>P-DAO<tr><td>A</td> <td>B</td> <td>P-DAO 2</td><td align='left'>Neighbor</td> <td align='left'>(A,<td>Neighbor</td> <td>(A, 129)</td></tr><tr><td align='center'>"</td> <td align='left'>C</td> <td align='left'>P-DAO<tr><td>"</td> <td>C</td> <td>P-DAO 2</td><td align='left'>B</td> <td align='left'>(A,<td>B</td> <td>(A, 129)</td></tr><tr><td align='center'>"</td> <td align='left'>E,<tr><td>"</td> <td>E, F, G</td><td align='left'>P-DAO<td>P-DAO 3</td><td align='left'>C,<td>C, E</td><td align='left'>(A,<td>(A, 129)</td></tr> </tbody> </table> <t> Packets originated at A to E do not require an encapsulation, but they carryaan SRH via C. The outer headers of the packets that are forwarded along the Track have the following settings: </t> <table anchor="Packetcase13"><name>Packet Header Settings</name> <thead> <tr><thalign='center'>Header</th>align="center">Header</th> <thalign='center'>IPv6align="center">IPv6 SourceAddr.</th>Address</th> <thalign='center'>IPv6 Dest. Addr.</th>align="center">IPv6 Destination Address</th> <thalign='center'>TrackIDalign="center">TrackID in RPI</th></tr> </thead> <tbody> <tr><tdalign='center'>Outer</td>align="center">Outer</td> <tdalign='center'>A</td>align="center">A</td> <tdalign='center'>Calign="center">C until C then E</td> <tdalign='center'>(A,align="center">(A, 129)</td></tr> <tr><tdalign='center'>Inner</td> <td align='center'>X</td>align="center">Inner</td> <tdalign='center'>Eitheralign="center">X</td> <td>Either F or G. If X!=A,thenE is also permitted.</td> <tdalign='center'>N/A</td></tr>align="center">N/A</td></tr> </tbody> </table><!-- COMMENT: I know this may take some effort, sorry, but I think it would be really useful in the Packet Header Settings tables, here and further below, to also include a column indicating the contents of the SRH. The lack of this made it more complicated, especially in the more complicated cases further along, to understand what's going on. AUTH: actually that was easy. Because it's already there. I added at the beginning of the section Note well: by design, the list of nodes in a VIO in Non-Storing Mode is exactly the list that shows in the encapsulation SRH. So in the cases detailed below, if the Mode of the P-DAO is Non-Storing, then the VIO row can be read as indicating the SRH as well. --><t> As an example, say that A has a packet for F. Using the RIB in <xref target='RIBcase13'/>: </t> <ul> <li>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 IPv6Headerheader is C, andaan SRH signals that the final destination is E.</li> <li>From P-DAO 2: A forwards toBB, and B forwards to C.</li> <li>From P-DAO 3: C processes the SRH and sets the destination in the IPv6Headerheader to E.</li> <li>From P-DAO 1: C forwards toDD, and D forwards to E; E decapsulates the packet.</li> <li>From the Neighbor Cache Entry: E delivers packets to F or G.</li> </ul></section><!-- Segment Routing --> </section><!-- Using Storing Mode Segments --></section> </section> <section><name>Using Non-Storing ModejoiningJoining Tracks</name> <t>In this formulation:</t> <ul> <li>P-DAO 1 signals C==>D==>E-to-(E),F,G</li> <li>P-DAO 2 signals A==>B==>C-to-(C),E,F,G</li> </ul> <t> A==>B==>C and C==>D==>E are Tracks expressed as Non-Storing Mode P-DAOs. </t> <section><name>Stitched Tracks</name> <t> Non-Storing Mode P-DAO 1 and 2 are sent to C andAA, respectively, as follows: </t> <table anchor="PDAOcase21"><name>P-DAO Messages</name> <thead><tr><th align='center'><tr><th> </th><th align='left'>P-DAO<th>P-DAO 1 to C</th><th align='left'>P-DAO<th>P-DAO 2 to A</th></tr> </thead> <tbody><tr><td align='center'>Mode</td> <td align='left'>Non-Storing</td> <td align='left'>Non-Storing</td></tr> <tr><td align='center'>Track Ingress</td> <td align='left'>C</td> <td align='left'>A</td></tr> <tr><td align='center'>(DODAGID, TrackID)</td> <td align='left'>(C,<tr><th>Mode</th> <td>Non-Storing</td> <td>Non-Storing</td></tr> <tr><th>Track ingress</th> <td>C</td> <td>A</td></tr> <tr><th>(DODAGID, TrackID)</th> <td>(C, 131)</td><td align='left'>(A,<td>(A, 131)</td></tr><tr><td align='center'>SegmentID</td> <td align='left'>1</td> <td align='left'>1</td></tr> <tr><td align='center'>VIO</td> <td align='left'>D,<tr><th>SegmentID</th> <td>1</td> <td>1</td></tr> <tr><th>VIO</th> <td>D, E</td><td align='left'>B,<td>B, C</td></tr><tr><td align='center'>Targets</td> <td align='left'>F,<tr><th>Targets</th> <td>F, G</td><td align='left'>E,<td>E, F, G</td></tr> </tbody> </table> <t>As aresultresult, the RIBs are set as follows (usingND"ND" to indicate that the address is discovered by IPv6 Neighbor Discovery <xreftarget='RFC4861'/><xreftarget='RFC4861'/> <xref target='RFC8505'/> or an equivalentmethod:</t>method):</t> <table anchor="RIBcase21"><name>RIBsetting</name>Settings</name> <thead><tr><th align='center'>Node</th> <th align='left'>Destination</th> <th align='left'>Origin</th> <th align='left'>Next<tr><th>Node</th> <th>Destination</th> <th>Origin</th> <th>Next Hop(s)</th><th align='left'>TrackID</th></tr><th>TrackID</th></tr> </thead> <tbody><tr><td align='center'>E</td> <td align='left'>F,<tr><td>E</td> <td>F, G</td><td align='left'>ND</td> <td align='left'>Neighbor</td> <td align='left'>Any</td></tr> <tr><td align='center'>D</td> <td align='left'>E</td> <td align='left'>ND</td> <td align='left'>Neighbor</td> <td align='left'>Any</td></tr> <tr><td align='center'>C</td> <td align='left'>D</td> <td align='left'>ND</td> <td align='left'>Neighbor</td> <td align='left'>Any</td></tr> <tr><td align='center'>"</td> <td align='left'>E,<td>ND</td> <td>Neighbor</td> <td>Any</td></tr> <tr><td>D</td> <td>E</td> <td>ND</td> <td>Neighbor</td> <td>Any</td></tr> <tr><td>C</td> <td>D</td> <td>ND</td> <td>Neighbor</td> <td>Any</td></tr> <tr><td>"</td> <td>E, F, G</td><td align='left'>P-DAO<td>P-DAO 1</td><td align='left'>D,<td>D, E</td><td align='left'>(C,<td>(C, 131)</td></tr><tr><td align='center'>B</td> <td align='left'>C</td> <td align='left'>ND</td> <td align='left'>Neighbor</td> <td align='left'>Any</td></tr> <tr><td align='center'>A</td> <td align='left'>B</td> <td align='left'>ND</td> <td align='left'>Neighbor</td> <td align='left'>Any</td></tr> <tr><td align='center'>"</td> <td align='left'>C,<tr><td>B</td> <td>C</td> <td>ND</td> <td>Neighbor</td> <td>Any</td></tr> <tr><td>A</td> <td>B</td> <td>ND</td> <td>Neighbor</td> <td>Any</td></tr> <tr><td>"</td> <td>C, E, F, G</td><td align='left'>P-DAO<td>P-DAO 2</td><td align='left'>B,<td>B, C</td><td align='left'>(A,<td>(A, 131)</td></tr> </tbody> </table> <t> Packets originated at A to E,FF, and G could be generated with the RPI and theSRH,SRH and no encapsulation. Alternatively, A may generate a native packet to thetarget,target and then encapsulate it with an RPI and an SRH indicating the source-routed path leading to E, as it would for a packet that it routes coming from another node. This is effectively the same case as for packets generated by therootRoot in a RPL network in Non-Storingmode,Mode; seesection 8.1.3 of<xreftarget='RFC9008'/>.target='RFC9008' section="8.1.3"/>. The latter is often preferred since it leads to a single code path, and when the destinationwhen itis F or G, it does not need to understand and process the RPI or the SRH. Either way, the packets to E, F, or G carry an SRH via B and C, and when they reach C, C needs to encapsulate them again to add an SRH via D and E. The encapsulating headers of packets that are forwarded along the Track between C and E have the following settings: </t> <table anchor="Packetcase21"><name>Packet Header SettingsbetweenBetween C and E</name> <thead> <tr><thalign='center'>Header</th>align="center">Header</th> <thalign='center'>IPv6align="center">IPv6 SourceAddr.</th>Address</th> <thalign='center'>IPv6 Dest. Addr.</th>align="center">IPv6 Destination Address</th> <thalign='center'>TrackIDalign="center">TrackID in RPI</th></tr> </thead> <tbody> <tr><tdalign='center'>Outer</td>align="center">Outer</td> <tdalign='center'>C</td>align="center">C</td> <tdalign='center'>Dalign="center">D until D then E</td> <tdalign='center'>(C,align="center">(C, 131)</td></tr> <tr><tdalign='center'>Inner</td>align="center">Inner</td> <tdalign='center'>X</td>align="center">X</td> <tdalign='center'>E,align="center">E, F, or G</td> <tdalign='center'>N/A</td></tr>align="center">N/A</td></tr> </tbody> </table> <t>As an example, say that A has a packet for F. Using the RIB in <xref target='RIBcase21'/>:</t> <ul> <li>From P-DAO 2: A encapsulates the packet with a 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, andaan RPI indicating a TrackID of 131 from A's namespace, which is distinct from a TrackID of 131 from C's. </li> <li>From the SRH: Packets forwarded by B have source A, destination C, a consumed SRH, andaan RPI indicating a TrackID of 131 from A's namespace. C decapsulates. </li> <li> From P-DAO 1: C encapsulates the packet with a 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, andaan RPI indicating a TrackID of 131 from C's namespace. E decapsulates. </li> </ul></section><!-- Stitched Tracks --></section> <section><name>External Routes</name> <t>In this formulation:</t> <ul> <li>P-DAO 1 signals C==>D==>E-to-(E)</li> <li>P-DAO 2 signals A==>B==>C-to-(C),E</li> <li>P-DAO 3 signals F and G via the A-->E-to-F,G Track</li> </ul> <t> Non-Storing Mode P-DAO 1 is sent toCC, and Non-Storing ModeP-DAOP-DAOs 2 and 3 are sent to A, as follows: </t> <table anchor="PDAOcase22"><name>P-DAO Messages</name> <thead><tr><th align='center'><tr><th> </th><th align='left'>P-DAO<th>P-DAO 1 to C</th><th align='left'>P-DAO<th>P-DAO 2 to A</th><th align='left'>P-DAO<th>P-DAO 3 to A</th></tr> </thead> <tbody><tr><td align='center'>Mode</td> <td align='left'>Non-Storing</td> <td align='left'>Non-Storing</td> <td align='left'>Non-Storing</td></tr> <tr><td align='center'>Track Ingress</td> <td align='left'>C</td> <td align='left'>A</td> <td align='left'>A</td></tr> <tr><td align='center'>(DODAGID, TrackID)</td> <td align='left'>(C,<tr><th>Mode</th> <td>Non-Storing</td> <td>Non-Storing</td> <td>Non-Storing</td></tr> <tr><th>Track ingress</th> <td>C</td> <td>A</td> <td>A</td></tr> <tr><th>(DODAGID, TrackID)</th> <td>(C, 131)</td><td align='left'>(A,<td>(A, 129)</td><td align='left'>(A,<td>(A, 141)</td></tr><tr><td align='center'>SegmentID</td> <td align='left'>1</td> <td align='left'>1</td> <td align='left'>1</td></tr> <tr><td align='center'>VIO</td> <td align='left'>D,<tr><th>SegmentID</th> <td>1</td> <td>1</td> <td>1</td></tr> <tr><th>VIO</th> <td>D, E</td><td align='left'>B,<td>B, C</td><td align='left'>E</td></tr> <tr><td align='center'>Targets</td> <td align='left'></td> <td align='left'>E</td> <td align='left'>F,<td>E</td></tr> <tr><th>Targets</th> <td></td> <td>E</td> <td>F, G</td></tr> </tbody> </table> <t>Note in the table above that E is an implicit Target in P-DAO 1 and so is C in P-DAO 2. As Non-Storing ModeEgress nodesegress node addresses, they are not listed in the respective RTOs.</t> <t>As aresultresult, the RIBs are set as follows:</t> <table anchor="RIBcase22"><name>RIBsetting</name>Settings</name> <thead><tr><th align='center'>Node</th> <th align='left'>Destination</th> <th align='left'>Origin</th> <th align='left'>Next<tr><th>Node</th> <th>Destination</th> <th>Origin</th> <th>Next Hop(s)</th><th align='left'>TrackID</th></tr><th>TrackID</th></tr> </thead> <tbody><tr><td align='center'>E</td> <td align='left'>F,<tr><td>E</td> <td>F, G</td><td align='left'>ND</td> <td align='left'>Neighbor</td> <td align='left'>Any</td></tr> <tr><td align='center'>D</td> <td align='left'>E</td> <td align='left'>ND</td> <td align='left'>Neighbor</td> <td align='left'>Any</td></tr> <tr><td align='center'>C</td> <td align='left'>D</td> <td align='left'>ND</td> <td align='left'>Neighbor</td> <td align='left'>Any</td></tr> <tr><td align='center'>"</td> <td align='left'>E</td> <td align='left'>P-DAO<td>ND</td> <td>Neighbor</td> <td>Any</td></tr> <tr><td>D</td> <td>E</td> <td>ND</td> <td>Neighbor</td> <td>Any</td></tr> <tr><td>C</td> <td>D</td> <td>ND</td> <td>Neighbor</td> <td>Any</td></tr> <tr><td>"</td> <td>E</td> <td>P-DAO 1</td><td align='left'>D,<td>D, E</td><td align='left'>(C,<td>(C, 131)</td></tr><tr><td align='center'>B</td> <td align='left'>C</td> <td align='left'>ND</td> <td align='left'>Neighbor</td> <td align='left'>Any</td></tr> <tr><td align='center'>A</td> <td align='left'>B</td> <td align='left'>ND</td> <td align='left'>Neighbor</td> <td align='left'>Any</td></tr> <tr><td align='center'>"</td> <td align='left'>C,<tr><td>B</td> <td>C</td> <td>ND</td> <td>Neighbor</td> <td>Any</td></tr> <tr><td>A</td> <td>B</td> <td>ND</td> <td>Neighbor</td> <td>Any</td></tr> <tr><td>"</td> <td>C, E</td><td align='left'>P-DAO<td>P-DAO 2</td><td align='left'>B,<td>B, C</td><td align='left'>(A,<td>(A, 129)</td></tr><tr><td align='center'>"</td> <td align='left'>F,<tr><td>"</td> <td>F, G</td><td align='left'>P-DAO<td>P-DAO 3</td><td align='left'>E</td> <td align='left'>(A,<td>E</td> <td>(A, 141)</td></tr> </tbody> </table> <t> The encapsulating headers of packets that are forwarded along the Track between C and E have the following settings: </t> <table anchor="Packetcase22"><name>Packet Header Settings</name> <thead> <tr><thalign='center'>Header</th>align="center">Header</th> <thalign='center'>IPv6align="center">IPv6 SourceAddr.</th>Address</th> <thalign='center'>IPv6 Dest. Addr.</th>align="center">IPv6 Destination Address</th> <thalign='center'>TrackIDalign="center">TrackID in RPI</th></tr> </thead> <tbody> <tr><tdalign='center'>Outer</td>align="center">Outer</td> <tdalign='center'>C</td>align="center">C</td> <tdalign='center'>Dalign="center">D until D then E</td> <tdalign='center'>(C,align="center">(C, 131)</td></tr> <tr><tdalign='center'>Middle</td>align="center">Middle</td> <tdalign='center'>A</td>align="center">A</td> <tdalign='center'>E</td>align="center">E</td> <tdalign='center'>(A,align="center">(A, 141)</td></tr> <tr><tdalign='center'>Inner</td>align="center">Inner</td> <tdalign='center'>X</td>align="center">X</td> <tdalign='center'>E, Falign="center">E, F, or G</td> <tdalign='center'>N/A</td></tr>align="center">N/A</td></tr> </tbody> </table><!-- 1. non Storing Mode P-DAO 1 is sent to C. It has Root = C, SRVIO = D, E, Track ID 131 from C's namespace, Target = E 2. non Storing Mode P-DAO 2 is then sent to A. It has Root = A, SRVIO = B, C, Track ID 129 from A's namespace, Target = E 3. non Storing Mode P-DAO 3 is then sent to A. It has Root = A, SRVIO = E, Track ID 141 from A's namespace, Target = F, G >From P-DAO 3: A encapsulates packets with dest = F | G. The outer header has source = A, destination = E, and RPI = 141. This may recurse with: >From P-DAO 2: A encapsulates packets with dest = E. The outer header has source = A, destination = B, SRH = C and RPI = 129. Packets forwarded by B have source= A, destination = C , SRH =, and RPI = 129. C decapsulates. >From P-DAO 1: C encapsulates packets with dest = E. The outer header has source= C, destination = D, SRH = E and RPI = 131. E decapsulates if encapsulated. --><t>As an example, say that A has a packet for F. Using the RIB in <xref target='RIBcase22'/>:</t> <ul> <li> From P-DAO 3: A encapsulates the packet with a destination of F in the Track signaled by P-DAO 3. The outer header has source A, destination E, andaan RPI indicating a TrackID of 141 from A's namespace. This recurseswith:with the following. </li> <li> From P-DAO 2: A encapsulates the packet with a 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, andaan RPI indicating a TrackID of 129 from A's namespace. </li> <li> From the SRH: Packets forwarded by B have source A, destinationC ,C, a consumed SRH, andaan RPI indicating a TrackID of 129 from A's namespace. C decapsulates. </li> <li> From P-DAO 1: C encapsulates the packet with a destination of E in the Track signaled by P-DAO 1. The outer header has source C, destination D, an SRH that indicates E as the next loose hop, andaan RPI indicating a TrackID of 131 from C's namespace. E decapsulates. </li> </ul></section><!-- External routes --></section> <section anchor="nssr"><name>Segment Routing</name> <t>In this formulation:</t> <ul> <li>P-DAO 1 signals C==>D==>E-to-(E)</li> <li>P-DAO 2 signals A==>B-to-C</li> <li>P-DAO 3 signals F and G via the A-->C-->E-to-(E),F,G Track</li> </ul> <t> Non-Storing Mode P-DAO 1 is sent toCC, and Non-Storing ModeP-DAOP-DAOs 2 and 3 are sent to A, as follows: </t> <table anchor="PDAOcase23"><name>P-DAO Messages</name> <thead><tr><th align='center'><tr><th> </th><th align='left'>P-DAO<th>P-DAO 1 to C</th><th align='left'>P-DAO<th>P-DAO 2 to A</th><th align='left'>P-DAO<th>P-DAO 3 to A</th></tr> </thead> <tbody><tr><td align='center'>Mode</td> <td align='left'>Non-Storing</td> <td align='left'>Non-Storing</td> <td align='left'>Non-Storing</td></tr> <tr><td align='center'>Track Ingress</td> <td align='left'>C</td> <td align='left'>A</td> <td align='left'>A</td></tr> <tr><td align='center'>(DODAGID, TrackID)</td> <td align='left'>(C,<tr><th>Mode</th> <td>Non-Storing</td> <td>Non-Storing</td> <td>Non-Storing</td></tr> <tr><th>Track ingress</th> <td>C</td> <td>A</td> <td>A</td></tr> <tr><th>(DODAGID, TrackID)</th> <td>(C, 131)</td><td align='left'>(A,<td>(A, 129)</td><td align='left'>(A,<td>(A, 141)</td></tr><tr><td align='center'>SegmentID</td> <td align='left'>1</td> <td align='left'>1</td> <td align='left'>1</td></tr> <tr><td align='center'>VIO</td> <td align='left'>D,<tr><th>SegmentID</th> <td>1</td> <td>1</td> <td>1</td></tr> <tr><th>VIO</th> <td>D, E</td><td align='left'>B</td> <td align='left'>C,<td>B</td> <td>C, E</td></tr><tr><td align='center'>Targets</td> <td align='left'></td> <td align='left'>C</td> <td align='left'>F,<tr><th>Targets</th> <td></td> <td>C</td> <td>F, G</td></tr> </tbody> </table><!-- COMMENT: Is it correct that in the P-DAO 1 to C the target is empty? Maybe I misunderstood, but I would expect the target to be E. AUTH: this is NSM and in NSM the egress MUST be considered a target implicitly Quote from section 5.3 In the case of an NSM-VIO, the complete list can be loose and excludes the Ingress node, starting at the first loose hop and ending at a Track Egress; the Track Egress MUST be considered as an implicit Target, so it MUST NOT be signaled in a RPL Target Option. --><t>As aresultresult, the RIBs are set as follows:</t> <table anchor="RIBcase23"><name>RIBsetting</name>Settings</name> <thead><tr><th align='center'>Node</th> <th align='left'>Destination</th> <th align='left'>Origin</th> <th align='left'>Next<tr><th>Node</th> <th>Destination</th> <th>Origin</th> <th>Next Hop(s)</th><th align='left'>TrackID</th></tr><th>TrackID</th></tr> </thead> <tbody><tr><td align='center'>E</td> <td align='left'>F,<tr><td>E</td> <td>F, G</td><td align='left'>ND</td> <td align='left'>Neighbor</td> <td align='left'>Any</td></tr> <tr><td align='center'>D</td> <td align='left'>E</td> <td align='left'>ND</td> <td align='left'>Neighbor</td> <td align='left'>Any</td></tr> <tr><td align='center'>C</td> <td align='left'>D</td> <td align='left'>ND</td> <td align='left'>Neighbor</td> <td align='left'>Any</td></tr> <tr><td align='center'>"</td> <td align='left'>E</td> <td align='left'>P-DAO<td>ND</td> <td>Neighbor</td> <td>Any</td></tr> <tr><td>D</td> <td>E</td> <td>ND</td> <td>Neighbor</td> <td>Any</td></tr> <tr><td>C</td> <td>D</td> <td>ND</td> <td>Neighbor</td> <td>Any</td></tr> <tr><td>"</td> <td>E</td> <td>P-DAO 1</td><td align='left'>D,<td>D, E</td><td align='left'>(C,<td>(C, 131)</td></tr><tr><td align='center'>B</td> <td align='left'>C</td> <td align='left'>ND</td> <td align='left'>Neighbor</td> <td align='left'>Any</td></tr> <tr><td align='center'>A</td> <td align='left'>B</td> <td align='left'>ND</td> <td align='left'>Neighbor</td> <td align='left'>Any</td></tr> <tr><td align='center'>"</td> <td align='left'>B,<tr><td>B</td> <td>C</td> <td>ND</td> <td>Neighbor</td> <td>Any</td></tr> <tr><td>A</td> <td>B</td> <td>ND</td> <td>Neighbor</td> <td>Any</td></tr> <tr><td>"</td> <td>B, C</td><td align='left'>P-DAO<td>P-DAO 2</td><td align='left'>C</td> <td align='left'>(A,<td>C</td> <td>(A, 129)</td></tr><tr><td align='center'>"</td> <td align='left'>E,<tr><td>"</td> <td>E, F, G</td><td align='left'>P-DAO<td>P-DAO 3</td><td align='left'>C,<td>C, E</td><td align='left'>(A,<td>(A, 141)</td></tr> </tbody> </table> <t> The encapsulating headers of packets that are forwarded along the Track between A and B have the following settings: </t> <table anchor="Packetcase231"><name>Packet Header Settings</name> <thead> <tr><thalign='center'>Header</th>align="center">Header</th> <thalign='center'>IPv6align="center">IPv6 SourceAddr.</th>Address</th> <thalign='center'>IPv6 Dest. Addr.</th>align="center">IPv6 Destination Address</th> <thalign='center'>TrackIDalign="center">TrackID in RPI</th></tr> </thead> <tbody> <tr><tdalign='center'>Outer</td>align="center">Outer</td> <tdalign='center'>A</td>align="center">A</td> <tdalign='center'>Balign="center">B until D then E</td> <tdalign='center'>(A,align="center">(A, 129)</td></tr> <tr><tdalign='center'>Middle</td>align="center">Middle</td> <tdalign='center'>A</td>align="center">A</td> <tdalign='center'>C</td>align="center">C</td> <tdalign='center'>(A,align="center">(A, 141)</td></tr> <tr><tdalign='center'>Inner</td>align="center">Inner</td> <tdalign='center'>X</td>align="center">X</td> <tdalign='center'>E, Falign="center">E, F, or G</td> <tdalign='center'>N/A</td></tr>align="center">N/A</td></tr> </tbody> </table> <t> The encapsulating headers of packets that are forwarded along the Track between B and C have the following settings: </t> <table anchor="Packetcase232"><name>Packet Header Settings</name> <thead> <tr><thalign='center'>Header</th>align="center">Header</th> <thalign='center'>IPv6align="center">IPv6 SourceAddr.</th>Address</th> <thalign='center'>IPv6 Dest. Addr.</th>align="center">IPv6 Destination Address</th> <thalign='center'>TrackIDalign="center">TrackID in RPI</th></tr> </thead> <tbody> <tr><tdalign='center'>Outer</td>align="center">Outer</td> <tdalign='center'>A</td>align="center">A</td> <tdalign='center'>C</td>align="center">C</td> <tdalign='center'>(A,align="center">(A, 141)</td></tr> <tr><tdalign='center'>Inner</td>align="center">Inner</td> <tdalign='center'>X</td>align="center">X</td> <tdalign='center'>E, Falign="center">E, F, or G</td> <tdalign='center'>N/A</td></tr>align="center">N/A</td></tr> </tbody> </table> <t> The encapsulating headers of packets that are forwarded along the Track between C and E have the following settings: </t> <table anchor="Packetcase233"><name>Packet Header Settings</name> <thead> <tr><thalign='center'>Header</th>align="center">Header</th> <thalign='center'>IPv6align="center">IPv6 SourceAddr.</th>Address</th> <thalign='center'>IPv6 Dest. Addr.</th>align="center">IPv6 Destination Address</th> <thalign='center'>TrackIDalign="center">TrackID in RPI</th></tr> </thead> <tbody> <tr><tdalign='center'>Outer</td>align="center">Outer</td> <tdalign='center'>C</td>align="center">C</td> <tdalign='center'>Dalign="center">D until D then E</td> <tdalign='center'>(C,align="center">(C, 131)</td></tr> <tr><tdalign='center'>Middle</td>align="center">Middle</td> <tdalign='center'>A</td>align="center">A</td> <tdalign='center'>E</td>align="center">E</td> <tdalign='center'>(A,align="center">(A, 141)</td></tr> <tr><tdalign='center'>Inner</td>align="center">Inner</td> <tdalign='center'>X</td>align="center">X</td> <tdalign='center'>E, Falign="center">E, F, or G</td> <tdalign='center'>N/A</td></tr>align="center">N/A</td></tr> </tbody> </table><!-- 1. non Storing Mode P-DAO 1 is sent to C. It has Root = C, SRVIO = D, E, Track ID 131 from C's namespace, (Target = E is implicit) 2. non Storing Mode P-DAO 2 is then sent to A. It has Root = A, SRVIO = B, Track ID 129 from A's namespace, Target = C 3. non Storing Mode P-DAO 3 is then sent to A. It has Root = A, SRVIO = C, E, Track ID 141 from A's namespace, Target = F, G --><t>As an example, say that A has a packet for F. Usingthe<xref target='Packetcase231'/>:</t> <ul> <li>From P-DAO 3: A encapsulates the packet with a 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, andaan RPI indicating a TrackID of 141 from A's namespace. This recurseswith:with the following. </li> <li> From P-DAO 2: A encapsulates the packet with a destination of C in the Track signaled by P-DAO 2. The outer header has source A, destination B, andaan RPI indicating a TrackID of 129 from A's namespace. B decapsulates forwards to C based on a sibling connected route. </li> <li> From the SRH: C consumes the SRH and makes the destination E. </li> <li> From P-DAO 1: C encapsulates the packet with a destination of E in the Track signaled by P-DAO 1. The outer header has source C, destination D, an SRH that indicates E as the next loose hop, andaan RPI indicating a TrackID of 131 from C's namespace. E decapsulates. </li> </ul></section><!-- Segment Routing --> </section><!-- Using Non-Storing Mode joining Tracks --> </section><!-- Example Track Signaling --></section> </section> </section> <section anchor='concepts'><name>Complex Tracks</name> <t>To increase the reliability of the P2P transmission, this specification enables building a collection of protection paths between the sameIngressingress andEgressegress Nodes and combining them within the same TrackID, as shown in <xref target="FigLegs"/>. Protection paths may be interleaved at the edges of loose hops or remain parallel. </t><t> The segments that join the loose hops of a protection path are installed with the same TrackID as the protection path. But each individual protection path and segment has its own P-RouteIDwhichthat allows it to be managed separately. Two protection paths of the same Track may cross at a common node thatparticipates tois a member of a segment ofEacheach protectionpath,path or may be joined by additional segments. The final path of a packet may then be the result of interleaving those two (and possibly more) protection paths. In thatcasecase, the common node has more than one next hop in its RIB associated to theTrack,Track but no specific signal in the packet to indicate which segment is being followed. A next hop that can reach the loose hop is selected. </t> <figure anchor="FigLegs"> <name>Segments and Tracks</name> <artworkalign="center"name="" type=""alt=""> <![CDATA[alt=""><![CDATA[ < Controller Plane Functions > Southbound API _-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._- _-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._-._- +----------+ | RPL Root | +----------+ ( main DODAG ) ( all around ) <- Protection path 1 via B, E -> <--- Segment 1 A,B ---> <------- Segment 2 C,D,E -------> FWD -- Relay -- FWD -- FWD Target 1 /-- Node -- Node -- Node -- Node \ / --/ (A) (B) \ (C) (D) \ / Track \ Track Ingress Segment 5 Egress -- Target (I) \ -- (E) 2 \ \ / \ \ FWD -- FWD -- Relay -- FWD --/ \ Node -- Node -- Node -- Node Target 3 (F) (G) (H) (J) <------ Segment 3 F,G,H ------> <---- Segment 4 J,E ----> <- Protection path 2 via H, E -> <--- Segment 1 A,B ---> <- S5-> <---- Segment 4 J,E ----> <- Protection path 3 via B, H, E -> ) ( () ]]></artwork>)]]></artwork> </figure> <t> Note that while this specification enables building both segments inside a protection path, forinstanceinstance, segment 2 abovewhich(which is within protection path1,1) and Inter-protection-path segments (i.e.,North-South), for instanceNorth-South) such as segment 5 abovewhich(which joins protectionpathpaths 1 andprotection path 2,2), it does not signalto the Ingresswhich Inter-protection-path segments areavailable,available to the ingress, so the use of North-South segments and associated path redundancy functions is currently limited. The only possibility available at this time is to define overlapping protection paths as illustrated in <xref target="FigLegs"/>, with protection path 3 that is congruent with protection path 1 until node B and that is congruent with protection path 2 from node H on, abstracting segment 5 as a forward segment. </t> </section><!-- Complex Tracks --><section anchor='inandout'><name>Scope and Expectations</name> <section anchor='mtsch'><name>External Dependencies</name> <t> This specification expects that the 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 thePCE,PCE andenableenables the PCE to buildmore / bettermore/better paths that traverse those siblings. </t><t> 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 asOAM.Operations, Administration, and Maintenance (OAM). </t></section><!-- External Dependencies --></section> <sectionanchor='ietfr'><name>Positioning vs. Relatedanchor='ietfr'><name>Relationship to Other IETFStandards</name>Specifications</name> <section anchor='extdep'><name>Extending 6TiSCH</name> <t> The 6TiSCH architecture <xreftarget='RFC9030'> "6TiSCH Architecture"</xref>target='RFC9030'></xref> leverages a centralized model that is similar to that of the DetNet architecture <xreftarget='RFC8655'> "Deterministic Networking Architecture"</xref>,target='RFC8655'></xref>, whereby the device resources and capabilities are exposed to an external controllerwhichthat installs routing states into the network based on its ownobjective functionsObjective Functions that reside in that external entity. </t></section><!-- Extending 6TiSCH --></section> <section anchor='mdet'><name>Mapping to DetNet</name> <t> DetNetForwarding Nodesforwarding nodes only understand the simple 1-to-1 forwarding sublayer transport operation along a segment whereas the more sophisticatedRelayrelay nodes can also provide service sublayer functions such as Replication and Elimination. </t> <t> One possible mapping between DetNet and this specification is to signal theRelay Nodesrelay nodes as the hops of a protection path and the forwardingNodesnodes as the hops in a segment that join theRelayrelay nodes as illustrated in <xref target="FigLegs"/>. </t> </section><!-- Mapping to DetNet --><section anchor='pmce'><name>Leveraging PCE</name> <t> With DetNet and 6TiSCH, the component of the controller that is responsibleoffor computing routes is a PCE. The PCE computes its routes based on its ownobjective functions suchObjective Functions, as described in <xref target='RFC4655'/>, and typically controls the routes using the PCE Communication Protocol (PCEP)by<xref target='RFC5440'/>. While this specification expects aPCEPCE, 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. </t> <t> This specification also expects a single PCE with a full view of the network. Distributing the PCE function for a large network is out of scope. This specification uses the RPL Root as a proxy to the PCE. The PCE may be collocated with theRoot,Root or may reside in an external Controller. Inthatthe latter case, the protocol between the Root and the PCE is out of scope and mapped to RPL inside the DODAG; onepossibilitypossible control protocol between the Root and external PCE is for the Root to transmitto the PCEsthe information it received in the RPLDAOsDAOs, including all the SIOs that detail the parent/child and siblinginformation.information, to the PCEs. </t> <t> The algorithm to compute the paths, the protocol used by thePCEPCE, 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 reportedisare out of scope, but the expectation is that they are mostly of a long-term, statisticalnature,nature and provide visibility on link throughput, latency,stabilitystability, and availability over relatively long periods. </t> </section><!-- Leveraging PCE --><section anchor='mraw'><name>Providing for RAW</name> <t> The RAW architecture <xreftarget='I-D.ietf-raw-architecture'>RAW Architecture</xref>target='RFC9912'></xref> extends the definition ofTrack,Track as being composed of forward directional segments and North-South bidirectionalsegments,segments to enable additional pathdiversity,diversity using PacketARQ,Replication, Elimination, andOverhearing (PAREO) functionsOrdering Functions (PREOF) over the availablepaths, to providepaths. This provides 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 it only forms DODAGs, which are composed of aggregated end-to-end loosesource routedsource-routed protection paths, joined by strict routed segments, all oriented forward. </t> <t> The RAWArchitecturearchitecture defines adataplanedata plane extension of the PCE called the Point of Local Repair(PLR),(PLR) that adapts the use of the path redundancy within a Track to defeat the diverse causes of packet loss. The PLR controls the forwarding operation of the packets within a Track. This specification can use but does not impose a PLR and does not provide the policies that would select which packets are routed through which path within aTrack, inTrack (in other words, how the PLR may use the path redundancy within theTrack.Track). By default, the use of the available redundancy is limited to simple load balancing, and all the segments are forward unidirectional only. </t> <t> A Track may be set up to reduce the load around theRoot,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 providemore specificmore-specific routes to the Track Targets. </t> </section><!-- Providing for RAW --> </section><!-- Positioning vs. Related IETF Standards --> </section><!-- Scope and Expectations --></section> </section> </section><!-- Context and Goal -->> <section anchor='ext'><name>Extendingexistingand Amending Existing RFCs </name> <t> This section explains which changes are extensionsto existing specifications,and whichchangesare amendments to existing specifications. It is expected that extensions to existing specificationsdowill not cause existing code on legacy 6LRs to malfunction, as the extensions will simply be ignored. New code is required for an extension. Those 6LRs will be unable toparticipatefunction in the newmechanisms, butmechanisms and may alsocause projected DAOs to bemake the P-DAOs impossible to install. Amendments to existing specifications are situations where there are semantic changes required to existingcode,code andwhich may requirewhere new unit tests may be required to confirm that legacy operations will continue unaffected. </t> <section anchor='ext6550'><name>ExtendingRPLRFC 6550</name> <t> This specification Extends RPL <xref target='RFC6550'/> to enable the Root to install forward routes inside a main DODAG that is operated as Non-Storing Mode. The Root issues aProjected DAO (P-DAO)P-DAO message (see <xref target='extP-DAO'/>) to the TrackIngress;ingress; the P-DAO message contains a newVia Information Option (VIO)VIO that installs a strict or a loose sequence of hops to form a Track segment or a protection path, respectively. </t> <t> TheP-DAOProjected DAO Request(PDR)(P-DAO-REQ) is a new message detailed in <xref target='P-DAOreq'/>. As per <xref target="RFC6550"/> section 6,section="6"/>, if a node receives this message and it does not understand this newCode,code, itthendiscards the message. When the Root initiates communication to a node that it has not communicated with before andwhichthat it has not ascertained to implement this specification (by means such as capabilities), then the RootSHOULD<bcp14>SHOULD</bcp14> request aPDR-ACK.Projected DAO Request Acknowledgment (PDR-ACK). </t> <t> AP-DAO Request (PDR)P-DAO-REQ message enables a TrackIngressingress to request the Track from the Root. The resulting Track is also a DODAG for which the TrackIngressingress is the Root, and the owner is the address that serves as the DODAGID and is authoritative for the associated namespace from which the TrackID is selected. In the context of this specification, the installed route appears as amore specificmore-specific route to the Track Targets, and the TrackIngressingress forwards the packetstowardstoward the Targets via the Track using normal longest match IP forwarding. </t> <t> To ensure that thePDRP-DAO-REQ and P-DAO messages can flow at most times, it isRECOMMENDED<bcp14>RECOMMENDED</bcp14> that the nodes involved in a Track maintain multiple parents in the main DODAG, advertise them all to the Root, and use them in turn to retry similar packets. It is alsoRECOMMENDED<bcp14>RECOMMENDED</bcp14> that the Root uses diverse source route paths to retry similar messages to the nodes in the Track. </t> <section anchor='extP-DAO'><name>Projected DAO</name> <t>Section 6 of<xreftarget='RFC6550'/>target='RFC6550' section="6"/> introduces the RPL Control Message Options(CMO),(CMOs), including the RPL Target Option (RTO) and Transit Information Option (TIO), which can be placed in RPL messages such as thedestination Advertisement Object (DAO).DAO. A DAO message signals routing information to one or more Targets indicated inRTOs,the RTOs and provides one and only one via-node in the TIO, with the via-node being the tunnelend-pointendpoint to reach the targets. </t> <t> This document Amends the specification of the DAO to create the P-DAO message. This Amended DAO is signaled with a new "Projected DAO" (P)flag,flag; see <xref target= 'p-dao-fmt'/>. </t> <t> AProjected DAO (P-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 a collection of multiple P-Routes as expected by the 6TiSCHArchitecturearchitecture <xreftarget='RFC9030'/> as a collection of multiple P-Routes.target='RFC9030'/>. </t> <t> The RootMUST<bcp14>MUST</bcp14> source the P-DAO message with its address that serves as the DODAGID for the main DODAG. The receiverMUST NOT<bcp14>MUST NOT</bcp14> accept a P-DAO message that is not sent by the Root of its DODAG andMUST<bcp14>MUST</bcp14> ignore such messages silently. </t> <t> The 'P' flag is encoded in bit position 2(to be confirmed by IANA)of the Flags field in the DAO Base Object. The RootMUST<bcp14>MUST</bcp14> set it to 1 in aProjected DAOP-DAO message.OtherwiseOtherwise, itMUST<bcp14>MUST</bcp14> be set to 0. It is set to 0 inLegacylegacy implementations asspecified respectivelyspecified, respectively, in Sections20.11<xref target="RFC6550" sectionFormat="bare" section="20.11"/> and6.4<xref target="RFC6550" sectionFormat="bare" section="6.4"/> of <xref target='RFC6550'/>. </t> <t> The P-DAO is a part of control plane signaling and should not be stuck behind high traffic levels. The expectation is that the P-DAO messageisbe sent at a high QoS level, above that of data traffic, typically with the Network Control precedence. </t> <figure anchor='p-dao-fmt'><name>Projected DAO Base Object</name> <artworkalign="center">><![CDATA[ 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 is set to the | + IPv6Addressaddress of the TrackIngressingress + | used to source encapsulated packets | + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Option(s)...+-+-+-+-+-+-+-+-+ </artwork>+-+-+-+-+-+-+-+-+]]></artwork> </figure> <t> New fields:</t> <dl spacing='normal'> <dt>TrackID:</dt> <dd> ThelocalLocal orglobalGlobal RPLInstanceID of the DODAG that serves as the Track(more(see more in <xreftarget="trkid"/>). </dd>target="trkid"/>).</dd> <dt>P:</dt><dd> <t>1-bit flag (position to be confirmed by IANA).</t> <t> The<dd><t>1-bit flag.</t> <t>The 'P' flag is set to 1 by the Root to signal aProjected DAO, andP-DAO; otherwise, it is set to0 otherwise. </t> </dd>0.</t></dd> </dl> <t> TheD'D' flag is set toone1 to signal that the DODAGID field is present. It may be set tozero0 if and only if the destination address of theP-DAO-ACKProjected DAO Acknowledgment (P-DAO-ACK) message is set to the IPv6 address that serves asDODAGIDthe DODAGID, and itMUST<bcp14>MUST</bcp14> be set to one otherwise, meaning that the DODAGID fieldMUST<bcp14>MUST</bcp14> then be present. </t> <t> 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. The DAO message signals to the Root that a given parent can be used to reach a given child. The P-DAO message generalizes the DAO to signal to the TrackIngressingress that aTrackTrack, for whichitthe sender isRootthe Root, can be used to reach children and siblings of the TrackEgress.egress. In both cases, options may be factorized and multiple RTOs may be present to signal a collection of children that can be reached through the parent or the Track, respectively. </t> </section><!-- Projected DAO --><section anchor='extP-DAO-ACK'><name>ProjectedDAO-ACK</name>DAO Acknowledgment</name> <t> This document also Amends the DAO-ACK message. The newP'P' flag signals the projected form. </t> <t> The format of the P-DAO-ACK message is thusasillustrated in <xref target='p-dao-ack-fmt'/>: </t> <figureanchor='p-dao-ack-fmt'><name>Projected DAO-ACKanchor='p-dao-ack-fmt'><name>P-DAO-ACK Base Object</name> <artworkalign="center">><![CDATA[ 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 |D|P| Reserved | DAOSequence | Status | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | + + | DODAGID field is set to the | + IPv6Addressaddress of the TrackIngressingress + | used to source encapsulated packets | + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Option(s)...+-+-+-+-+-+-+-+-+ </artwork>+-+-+-+-+-+-+-+-+]]></artwork> </figure> <t> New fields:</t> <dl spacing='normal'> <dt>TrackID:</dt> <dd> ThelocalLocal orglobalGlobal RPLInstanceID of the DODAG that serves as the Track(more(see more in <xreftarget="trkid"/>). </dd>target="trkid"/>).</dd> <dt>P:</dt><dd> <t>1-bit flag (position to be confirmed by IANA).</t><dd><t>1-bit flag.</t> <t> The 'P' flag is set to 1 by the Root to signal aProjected DAO, andP-DAO; otherwise, it is set to0 otherwise. </t> </dd>0.</t></dd> </dl> <t> TheD'D' flag is set toone1 to signal that the DODAGID field is present. It may be set tozero0 if and only if the source address of the P-DAO-ACK message is set to the IPv6 address that serves asDODAGIDthe DODAGID, and itMUST<bcp14>MUST</bcp14> be set to one otherwise, meaning that the DODAGID fieldMUST<bcp14>MUST</bcp14> then be present. </t> </section><!-- Projected DAO-ACK --><section anchor='extVIO'><name>Via Information Option</name> <t> This document Extends the CMO to create new objects calledtheVia Information Options(VIO).(VIOs). The VIOs are themultihopmulti-hop alternative to theTIO (moreTIOs (see more in <xref target= 'viof'/>). 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 protection path at the TrackIngress,ingress, which uses that state to encapsulatea packetan IP-in-IP packet with a new Routing Header (RH) to the TrackEgress (moreegress (see more in <xref target= 'routing'/>). </t> <t> 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(see more in <xref target= 'P-DAO'/>). There are two modes of operation for theP-Routes, theP-Routes: Storing Mode andtheNon-StoringMode, seeMode (see more in Sections <xref target='sP-DAO'/>'sP-DAO' format="counter"/> and <xreftarget='nsP-DAO'/> respectively for more.target='nsP-DAO' format="counter"/>, respectively). </t> </section><!-- VIA Information Option --><section anchor='extSIO'><name>Sibling Information Option</name> <t> This specification Extends the CMO to create the Sibling Information Option (SIO). The SIO is used by aRPL AwareRPL-Aware Node (RAN) to advertise a selection of its candidate neighbors as siblings to the Root(more(see more in <xref target='rplsib'/>). The SIO is placed in DAO messages that are sent directly to the main Root, including multicast DAO (seesection 9.10 of<xreftarget='RFC6550'/>).target='RFC6550' section="9.10"/>). </t> <t> This specificationAMENDSAmends rules 1 and 2 listed insection 9.10 of<xreftarget='RFC6550'/>)target='RFC6550' section="9.10"/> for the multicast DAO operation as follows: </t> <t>OLD:</t> <blockquote> <ol><li> A<li>A nodeMAY<bcp14>MAY</bcp14> multicast a DAO message to the link-local scope all-RPL-nodes multicastaddress. </li> <li> Aaddress.</li> <li>A multicast DAO messageMUST<bcp14>MUST</bcp14> be used only to advertise information about the node itself, i.e., prefixes directly connected to or owned by the node, such as a multicast group that the node is subscribed to or a global address owned by thenode </li>node</li> </ol> </blockquote> <t>NEW:</t> <blockquote> <ol><li> A<li>A multicast DAO messageMUST<bcp14>MUST</bcp14> be used only to advertise information about the node (using the TargetOption),Option) and direct Link Neighbors such as learned by Neighbor Discovery (using theSibling Information Option). </li>SIO).</li> <li>The multicast DAO may be used to enable direct and indirect (via a common neighbor) P2P communication without needing the DODAG to relay the packets. The multicast DAO exposes the sender's addresses as Targets in RTOs and the sender's neighbors addresses as siblings in SIOs; this tells the sender's neighbors that the sender is willing to act as a relay between those of its neighbors that are too farapart. </li>apart.</li> </ol> </blockquote> </section><!-- Sibling Information Option --><section anchor='extPDR'><name>P-DAO Request</name> <t> The set of RPL Control Messages is Extended to include theP-DAO Request (PDR)P-DAO-REQ andP-DAO Request Acknowledgement (PDR-ACK).PDR-ACK. These two new RPL Control Messages enablean RPL-Aware Nodea RAN to request the establishment of a Track between itselfas(as the TrackIngress Nodeingress Node) and a TrackEgress.egress. The node makes its request by sending a newP-DAO Request (PDR) MessageP-DAO-REQ message to the Root. The Root confirms with a new PDR-ACK message back to the requesterRAN,RAN; see <xref target='P-DAOreq'/> for more. </t></section><!-- P-DAO Request --></section> <section anchor='extRPI'><name>Amending the RPI</name> <t> Sending aPacketpacket within a RPL Local Instance requires the presence of the abstractRPL Packet Information (RPI)RPI described insection 11.2. of<xreftarget='RFC6550'/>target='RFC6550' section="11.2"/> in the outer IPv6Headerheader chain (see <xref target='RFC9008'/>). The RPI carries alocalLocal RPLInstanceIDwhich,that, in association with either the source or the destination address in the IPv6Header,header, indicates the RPL Instance that the packet follows. </t> <t> This specification Amends <xref target='RFC6550'/> to create a new flag that signalsthatwhen a packet is forwarded along a P-Route. </t> <dl> <dt> Projected-Route 'P':</dt><dd> 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 DODAG (as a Track), including when the packet follows a segment that joins loose hops of the main DODAG. The flag is not mutableen-route.</dd>en route.</dd> </dl> <t>The encoding of the 'P' flag in native format is shown in <xref target='ext6553'/> while the compressed format is indicated in <xref target='ext8138'/>. </t> </section><!-- Extending the RPI --><section anchor='dflag'><name>Additional Flag in the RPL DODAG Configuration Option</name> <t> The DODAG ConfigurationOptionoption is defined inSection 6.7.6 of<xref target='RFC6550'/>.'RFC6550' section="6.7.6"/>. Its purpose is extended to distribute configuration information affecting the construction and maintenance of the DODAG, as well as operational parameters for RPL on the DODAG, through the DODAG. ThisOptionoption was originally designed with4four bit positions reserved for future use as Flags. </t> <figure anchor="RPLDCO"> <name>DODAG Configuration Option (Partial View) </name> <artworkalign="center"name="" type="" alt=""><![CDATA[ 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 = 0x04 |Opt Length = 14|D| | | |A| ... | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |4 bits| ]]></artwork>|]]></artwork> </figure> <t> This specification Amendsthe specification<xref target='RFC6550'/> to defineathe newflag"Projected Routes Support"(D).(D) flag. The 'D' flag is encoded in bit position 0 of the reserved Flags in the DODAG ConfigurationOptionoption (this is the most significantbit)(to be confirmed by IANA but there's little choice).bit). It is set to 0 in legacy implementations as specified respectively in Sections20.14<xref target='RFC6550' sectionFormat="bare" section="20.14"/> and6.7.6<xref target='RFC6550' sectionFormat="bare" section="6.7.6"/> of <xref target='RFC6550'/>. </t> <t> The 'D' flag is set to 1 to indicate that this specification is enabled in the network and that the Root will install the requested Tracks when feasible upon receiving aPDRP-DAO-REQ message. </t> <t>Section 4.1.2. of<xreftarget='RFC9008'/>target='RFC9008' section="4.1.2"/> Amends <xref target='RFC6550'/> to indicate that the definition of the Flags applies toMode of OperationMOP values from zero (0) to six (6) only. For a MOP value of 7, the implementationMUST<bcp14>MUST</bcp14> consider that the Root acceptsPDRP-DAO-REQ messages and will installProjected Routes.P-Routes. </t> <t> The RPL DODAG Configuration option is typically placed in aDODAG Information Object (DIO)DIO message. The DIO message propagates down the DODAG to form and then maintain its structure. The DODAG Configuration option is copied unmodified from parents to children. </t> <t> <xref target='RFC6550'/> states that: </t> <blockquote> Nodes other than the DODAG rootMUST NOT<bcp14>MUST NOT</bcp14> modify this information when propagating the DODAG Configuration option. </blockquote> <t> Therefore, a legacy parent propagates the 'D' flag as set by theroot,Root, and when the 'D' flag is set to 1, it is transparently flooded to all the nodes in the DODAG. </t></section><!-- New Flag in the RPL DODAG Configuration Option --></section><!-- Extending RFC 6550 --></section> <section anchor='ext6553'><name>ExtendingRPLRFC 6553</name> <t><xref target='RFC6553'>"The RPL"The Routing Protocol for Low-Power and Lossy Networks (RPL) Option for Carrying RPL Information in Data-PlaneDatagrams"</xref>Datagrams" <xref target="RFC6553"/> describes the RPL Option for use among RPL routers to include the abstractRPL Packet Information (RPI)RPI described insection 11.2. of<xreftarget='RFC6550'/>target='RFC6550' section="11.2"/> in data packets. </t> <t> The RPL Option is commonly referred to as the RPI even though the RPI is really the abstract information that is transported in the RPL Option. <xref target='RFC9008'/> updated the Option Type from 0x63 to 0x23. </t> <t> This specification Extends the RPL Option to encode the 'P' flag as follows: </t> <figure anchor='Rpifmt'><name>Amended RPL Option Format</name> <artworkalign="center">><![CDATA[ 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) |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ </artwork>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork> </figure> <dl spacing='normal'> <dt>Option Type:</dt><dd>0x23 or0x63,0x63; see <xreftarget='RFC9008'/>target='RFC9008'/>. </dd> <dt>Opt Data Len:</dt><dd> See <xreftarget='RFC6553'/>target='RFC6553'/>. </dd> <dt>'O','R''R', and 'F' flags:</dt><dd> See <xref target='RFC6553'/>.ThoseThese flagsMUST<bcp14>MUST</bcp14> be set to 0 by the sender and <bcp14>MUST</bcp14> be ignored by the receiver if the 'P' flag is set. </dd> <dt> Projected-Route 'P':</dt><dd> 1-bit flag as defined in <xref target='extRPI'/>. </dd> <dt>RPLInstanceID:</dt><dd> See <xref target='RFC6553'/>. Indicates the TrackID if the 'P' flag is set, as discussed in <xref target='extP-DAO'/>. </dd> <dt>SenderRank:</dt><dd> See <xref target='RFC6553'/>. This fieldMUST<bcp14>MUST</bcp14> be set to 0 by the sender and <bcp14>MUST</bcp14> be ignored by the receiver if the 'P' flag is set. </dd> </dl> </section><!-- Extending RFC 6553 --><section anchor='ext8138'><name>ExtendingRPLRFC 8138</name> <t> The<xref target='RFC8138'>6LoWPAN6LoWPAN RoutingHeader</xref>Header specification <xref target='RFC8138'/> introduces a newIPv6 over Low-Power Wireless Personal Area Network (6LoWPAN)6LoWPAN <xref target='RFC6282'/> dispatch type for use in 6LoWPAN route-over topologies, which initially covers the needs of RPL data packet compression. </t><t>Section 4 of <xref target='RFC8138'/><t><xref target='RFC8138' section="4"/> presents the generic formats of the6LoWPAN Routing Header (6LoRH) with6LoRH in twoforms, one Elective thatforms: Elective, which can be ignored and skipped when the router does not understand it, andone CriticalCritical, which causes the packet to be dropped when the router cannot process it. The 'E'Flagflag 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. </t> <t>Whenthecompression as described in <xref target='RFC8138'/>compressionis used, the Root of the main DODAG that sets up the Track also constructs the compressedrouting headerRouting Header (SRH-6LoRH) on behalf of the TrackIngress,ingress, whichsavesavoids the complexities of optimizingtheSRH-6LoRH encoding in constrained code.TheIn that case, the SRH-6LoRH is signaled in the NSM-VIO, and it is expressed in a fashion thatit is ready tocan be placed as is in the packet encapsulation by the TrackIngress.ingress. </t><t>Section 6.3 of <xref target='RFC8138'/><t><xref target='RFC8138' section="6.3"/> presents the formats of the 6LoWPANRouting HeaderRH 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 theO,R,F'O', 'R', and 'F' flags are not used and the Rank is unknown and ignored. </t><t> This specificationextendsExtends <xreftarget="RFC8138" />target="RFC8138"/> to introduce a new 6LoRH, theP-RPI-6LoRHP-RPI-6LoRH, that can be used in either Elective or Critical 6LoRHform,form; see Tables <xreftarget='elec6lorhtbl'/>target='elec6lorhtbl' format="counter"/> and <xreftarget='crit6lorhtbl'/>target='crit6lorhtbl' format="counter"/>, respectively. The new 6LoRHMUST<bcp14>MUST</bcp14> be used as a Critical 6LoRH, unless an SRH-6LoRH is present and controls the routing decision, in which case itMAY<bcp14>MAY</bcp14> be used in Elective form. </t> <t> The P-RPI-6LoRH is designed to compress the RPI along RPL P-Routes. Its format is as follows: </t> <figure anchor='PRpifmt'><name>P-RPI-6LoRH Format</name> <artworkalign="center">><![CDATA[ 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 |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ </artwork>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork> </figure> <dl spacing='normal'><dt><dt>6LoRH Type:</dt><dd> IANAis requested to definehas defined thesamevalueof the type8 for both the Elective and Critical forms.A type of 8 is suggested.</dd> <dt> Elective 'E':</dt><dd> See <xref target='RFC8138'/>. The 'E' flag is set to 1 to indicate an Elective 6LoRH, meaning that it can be ignored when forwarding. </dd> <dt> RPLInstanceID :</dt><dd> In the context of this specification, the RPLInstanceID field signals theTrackID,TrackID; see Sections <xreftarget='tracks'/>target='tracks' format="counter"/> and <xreftarget='trkid'/> .target='trkid' format="counter"/>. </dd> </dl> <t> <xref target='encompression'/> details how a TrackIngressingress leverages the P-RPI-6LoRHHeaderheader as part of the encapsulation of a packet to place it into a Track. </t> </section><!-- Extending RFC 8138 --> </section><!-- Extending existing RFCs --></section> <section anchor='rplccmo'><name>New RPL Control Messages and Options</name> <section anchor='P-DAOreq'><name>New P-DAO Request Control Message</name> <t> TheP-DAO Request (PDR)P-DAO-REQ message is sent by aNodenode in the main DODAG to the Root. It is a request to establish or refresh a Track where the node sending thePDRP-DAO-REQ is the TrackIngress,ingress, and it signals whether or not an acknowledgment called PDR-ACK isrequested or not.requested. A positive PDR-ACK indicates that the Track was built and that the Root commits to maintaining the Track for the negotiated lifetime. </t> <t> The main RootMAY<bcp14>MAY</bcp14> indicate to the TrackIngressingress that the Track was terminated before itstime andtime; to do so, itMUST<bcp14>MUST</bcp14> use an asynchronous PDR-ACK with a negative status. A status of "Transient Failure" (see <xref target= "iana-stats-rej"/>) is an indication that thePDRP-DAO-REQ may be retried after a reasonable time that depends on the deployment. Other negative status values indicate a permanent error; the attempt must be abandoned until a corrective action is taken at the application layer or through network management. </t> <t> The TrackIngress to-beingress to be of the requested Track is indicated in the source IPv6 address of thePDR,P-DAO-REQ, and the TrackID is indicated in the message itself. At least one RPL Target OptionMUST<bcp14>MUST</bcp14> be present in the message. If more than one RPL Target Option is present, the Root will provide a Track that reaches the first listed Target and a subset of the other Targets; the details of the subset selection are out of scope. The RTO signals the TrackEgress (moreegress (see more in <xref target='req'/>).<!-- TODO: A P-DAO parameter option MAY be present as well to provide additional information on the requested path. --></t> <t> The RPL Control Code for thePDRP-DAO-REQ is0x09, to be confirmed by IANA.0x09. The format ofPDRthe P-DAO-REQ Base Object is as follows: </t> <figure anchor='disupdfmt'><name>New P-DAO Request Format</name> <artworkalign="center">><![CDATA[ 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 ||PDAOReqSequence| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Option(s)...+-+-+-+-+-+-+-+-+ </artwork>+-+-+-+-+-+-+-+-+]]></artwork> </figure> <dl spacing='normal'> <dt>TrackID:</dt><dd>8-bit field. In the context of this specification, the TrackID field signals the RPLInstanceID of the DODAG formed by theTrack,Track; see Sections <xreftarget='tracks'/>target='tracks' format="counter"/> and <xreftarget='trkid'/>.target='trkid' format="counter"/>. To allocate a new Track, theIngressingress Node must provide a value that is not in use at this time. </dd> <dt>K:</dt><dd>The 'K' flag is set to indicate that the recipient is expected to send a PDR-ACK back. </dd> <dt>R:</dt><dd>The 'R' flag is set to request a Complex Track for redundancy. </dd> <dt>Flags:</dt><dd>Reserved. The Flags fieldMUST<bcp14>MUST</bcp14> be initialized to zero by the sender andMUST<bcp14>MUST</bcp14> be ignored by the receiver. </dd> <dt>ReqLifetime:</dt><dd> <t>8-bit unsigned integer. The requested lifetime for the Track expressed in Lifetime Units (obtained from the DODAG Configuration option). The value of 255 (0xFF) represents infinity (never time out). </t><t> APDRP-DAO-REQ with a fresherPDRSequencePDAOReqSequence refreshes the lifetime, and aPDRLifetimeReqLifetime of 0 indicates that the TrackMUST<bcp14>MUST</bcp14> be destroyed, e.g., when the application that requested the Track terminates. </t> </dd><dt>PDRSequence:</dt><dd><dt>PDAOReqSequence:</dt><dd> <t>8-bit wrapping sequence number, obeying the operation insection 7.2 of<xreftarget='RFC6550'/>.target='RFC6550' section="7.2"/>. ThePDRSequencePDAOReqSequence is used to correlate a PDR-ACK message with thePDRP-DAO-REQ message that triggered it. It is incremented at eachPDRP-DAO-REQ message and echoed in the PDR-ACK by the Root. </t> </dd> </dl> </section><!-- New P-DAO Request Control Message --><section anchor='rpldisackl'><name>New PDR-ACK Control Message</name> <t> The new PDR-ACK is sent as a response to aPDRP-DAO-REQ message with the 'K' flag set. The RPL Control Code for the PDR-ACK is0x0A, to be confirmed by IANA.0x0A. Its format is as follows: </t> <figure anchor='disackfmt'><name>New PDR-ACK Control Message Format</name> <artworkalign="center">><![CDATA[ 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 | TrackLifetime| PDRSequence |Lifetime|PDAOReqSequence| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | PDR-ACK Status| Reserved | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Option(s)...+-+-+-+-+-+-+-+ </artwork>+-+-+-+-+-+-+-+]]></artwork> </figure> <dl spacing='normal'> <dt>TrackID:</dt><dd> Set to the TrackID indicated in the TrackID field of thePDRP-DAO-REQ messages that this replies to. </dd> <dt>Flags:</dt><dd>Reserved. The Flags fieldMUST<bcp14>MUST</bcp14> be initialized to zero by the sender andMUST<bcp14>MUST</bcp14> be ignored by the receiver. </dd> <dt>Track Lifetime:</dt><dd> Indicates the remainingLifetimelifetime for the Track, expressed in LifetimeUnits;Units. The value of 255 (0xFF) represents infinity. The value of zero (0x00) indicates that the Track was destroyed or not created. </dd><dt>PDRSequence:</dt><dd><dt>PDAOReqSequence:</dt><dd> 8-bit wrapping sequence number. It is incremented at eachPDRP-DAO-REQ message and echoed in the PDR-ACK. </dd> <dt>PDR-ACK Status:</dt><dd> <t>8-bit field indicating the completion. The PDR-ACK Status is substructured as indicated in <xref target='rpst'/>:</t> <figure anchor='rpst' suppress-title='false'><name>PDR-ACKstatusStatus Format</name> <artworkalign="center"name="" type=""alt="">alt=""><![CDATA[ 0 1 2 3 4 5 6 7 +-+-+-+-+-+-+-+-+ |E|R| Value |+-+-+-+-+-+-+-+-+ </artwork>+-+-+-+-+-+-+-+-+]]></artwork> </figure> <dlspacing='compact'>spacing='normal'> <dt>E:</dt><dd> 1-bit flag. Set to indicate a rejection. When not set, a Value field that is set to 0 indicates Success/UnqualifiedAcceptanceAcceptance, and other values indicate "not an outright rejection".</dd> <dt>R:</dt><dd> 1-bit flag.Reserved, MUSTReserved; <bcp14>MUST</bcp14> be set to 0 by the sender and <bcp14>MUST</bcp14> be ignored by the receiver.</dd> <dt>Status Value:</dt><dd> 6-bit unsigned integer. Valuesdependingdepend on the setting of the 'E'flag,flag; see Tables <xreftarget='iana-ack-status'/>target='iana-ack-status' format="counter"/> and <xreftarget='iana-nack-status'/>.target='iana-nack-status' format="counter"/>. </dd> </dl> </dd> <dt>Reserved:</dt><dd>The Reserved fieldMUST<bcp14>MUST</bcp14> be initialized to zero by the sender andMUST<bcp14>MUST</bcp14> be ignored by the receiver. </dd> </dl> </section><!-- New PDR-ACK Control Message --><section anchor='viof'><name>Via Information Options</name> <t>A VIO signals the ordered list of IPv6 Via Addresses that constitutes the hops of either a protection path (using Non-Storing Mode) or a segment (using Storingmode)Mode) of a Track. A Storing Mode P-DAO contains oneStoring Mode VIO (SM-VIO)SM-VIO whereas a Non-Storing Mode P-DAO contains oneNon-Storing Mode VIO (NSM-VIO).NSM-VIO. </t><t> The duration of the validity of a VIO is indicated in asegmentSegment Lifetime field. A P-DAO message that contains a VIO with asegmentSegment Lifetime ofzero0 is referred as a No-Path P-DAO. </t><t> The VIO contains one or more SRH-6LoRHheader(s),headers, each formed ofaan SRH-6LoRH head and a collection of compressed Via Addresses, except in the case of a Non-Storing Mode No-Path P-DAO where the SRH-6LoRH header is not present. </t><t> In the case ofaan SM-VIO, or if <xref target='RFC8138'/> is not used in the data packets, then the RootMUST<bcp14>MUST</bcp14> use only one SRH-6LoRH per Via Information Option, and the compression is the same for all the addresses, as shown in <xref target='viao'/>, for simplicity. </t><t> In case of anNSM-VIONSM-VIO, and if <xref target='RFC8138'/> is in use in the main DODAG, the RootSHOULD<bcp14>SHOULD</bcp14> optimize the size of the NSM-VIO if using different SRH-6LoRH Types would make the VIO globally shorter; this means that more than one SRH-6LoRH may be present. </t> <t> The format of theVia Information OptionVIO is as follows: </t> <figure anchor='viao'><name>VIOformat</name>Format</name> <artworkalign="center">><![CDATA[ 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 | Option Length | Flags | P-RouteID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|Segm.| Seg. Sequence | Seg. Lifetime | SRH-6LoRH head | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | . Via Address 1 (compressed by RFC 8138) . | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | . .... . | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | . Via Address n (compressed by RFC 8138) . | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | . Additional SRH-6LoRHHeader(s)header(s) . | | . ..... </artwork>.]]></artwork> </figure> <dl spacing='normal'> <dt>OptionType:</dt><dd>0x0EType:</dt><dd>0x0F forSM-VIO, 0x0FSM-VIO and 0x10 for NSM-VIO(to be confirmed by IANA)(see <xref target="ianaRPLCtrlMsgopttbl"/>).</dd> <dt>Option Length:</dt><dd>8-bit unsigned integer, representing the length in octets of the option, not including the Option Type and Length fields (seesection 6.7.1. of<xref target='RFC6550'/>);'RFC6550' section="6.7.1"/>); the Option Length is variable, depending on the number of Via Addresses and the compression applied.</dd> <dt>Flags:</dt><dd>8-bit field. No flag is defined in this specification. The fieldMUST<bcp14>MUST</bcp14> be set to 0 by the sender and <bcp14>MUST</bcp14> be ignored by the receiver.</dd> <dt>P-RouteID:</dt><dd>8-bit field that identifies a component of a Track or the main DODAG as indicated by the TrackID field. The value of 0 is used to signal a path, i.e., made of a single segment/protection path. In an SM-VIO, the P-RouteID indicates aSegment ID.SegmentID. In an NSM-VIO, it indicates the ID of a protection path that is added (or updated) to the overall topology of the Track. </dd> <dt>Segment Sequence:</dt><dd> <t>8-bit unsigned integer. The Segment Sequence obeys the operation insection 7.2 of<xreftarget='RFC6550'/>target='RFC6550' section="7.2"/>, and the initial value is 255. </t><t> 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. </t><t> The segment information indicated in the VIO deprecates any state for the segment indicated by the P-RouteID within the indicated Track andsets upprovides the newinformation.information about the segment. </t><t> A VIO with a Segment Sequence that is not as fresh as the current one is ignored. </t><t> A VIO for a given DODAGID with the same (TrackID, P-RouteID, Segment Sequence) indicates a retry; itMUST NOT<bcp14>MUST NOT</bcp14> change the segment andMUST<bcp14>MUST</bcp14> be propagated or answered as the first copy. </t> </dd> <dt>Segment Lifetime:</dt><dd> <t>8-bit unsigned integer. The length of time in Lifetime Units (obtained from the Configuration option) that the segment is usable. </t><t> 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. </t> </dd> <dt>SRH-6LoRH head:</dt><dd>The first 2 bytes of the (first) SRH-6LoRH as shown in Figure 6 of <xref target='RFC8138'/>. As an example, a 6LoRHTypeof type 4 means that theVIAVia Addresses are provided in full with no compression. </dd> <dt>Via Address:</dt><dd> <t>An IPv6 ULA or GUA of a node along the segment. The VIO contains one or more IPv6 Via Addresses listed in the datapath order fromIngressingress toEgress.egress. The list is expressed in a compressed form as signaled by the preceding SRH-6LoRH header. </t><t> In a Storing Mode P-DAO that updates or removes a section of an already existing segment, the list in the SM-VIO may represent 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, the list in the VIOMUST<bcp14>MUST</bcp14> be complete. </t><t> In the case of an SM-VIO, the list indicates a sequential (strict) path through directneighbors,neighbors; the complete list starts atIngressthe ingress and ends atEgress,the egress, and the nodes listed in the VIO, including theEgress, MAYegress, <bcp14>MAY</bcp14> be considered as implicit Targets. </t><t> In the case of an NSM-VIO, the complete list can be loose and excludes theIngressingress node, starting at the first loose hop and ending at a TrackEgress;egress; the TrackEgress MUSTegress <bcp14>MUST</bcp14> be considered as an implicit Target, so itMUST NOT<bcp14>MUST NOT</bcp14> be signaled in a RPL Target Option. </t> </dd> </dl> </section><!-- Via Information Options --><section anchor='rplsib'><name>Sibling Information Option</name> <t> The Sibling Information Option (SIO) provides information about siblings that could be used by the Root to form P-Routes. One or moreSIO(s)SIOs may be placed in the DAO messages that are sent to the Root in Non-Storing Mode. </t> <t> To advertise a neighbor node, the routerMUST<bcp14>MUST</bcp14> have an active Address Registration from that siblingusingper <xreftarget='RFC8505'/>,target='RFC8505'/> for an address (ULA or GUA) that serves as an 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 to report the SIO, with theB'B' flag set, and the Root will assume symmetry. </t> <t> The SIO carries a flag (B) that is set when similar performance can be expected in bothdirections, sodirections; this flag indicates to the routingcan considerthat the information provided for one direction is valid for both. If the SIO is effectively received from bothsidessides, then theB'B' flagMUST<bcp14>MUST</bcp14> be ignored. The policy that describes the performancecriteria,criteria and how they are asserted is out of scope. In the absence of an external protocol to assert the link quality, the flagSHOULD NOT<bcp14>SHOULD NOT</bcp14> be set. </t> <t> The format of the SIO is as follows: </t> <figure anchor='siof'><name>Sibling Information Option Format</name> <artworkalign="center">><![CDATA[ 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 | Option Length |S|B|Flags|Comp.| Opaque | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Step in Rank | Reserved | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | + + . . . Sibling DODAGID (if the D flag is not set) . . . + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | + + . . . Sibling Address . . . + + | |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ </artwork>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork> </figure> <dl spacing='normal'> <dt>OptionType:</dt><dd>0x10Type:</dt><dd>0x11 for SIO(to be confirmed by IANA)(see <xref target="ianaRPLCtrlMsgopttbl"/>).</dd> <dt>Option Length:</dt><dd>8-bit unsigned integer, representing the length in octets of the option, not including the Option Type and Length fields (seesection 6.7.1. of<xref target='RFC6550'/>).</dd>'RFC6550' section="6.7.1"/>).</dd> <dt>Reserved forFlags:</dt><dd>MUSTFlags:</dt><dd><bcp14>MUST</bcp14> be set tozero0 by the sender andMUST<bcp14>MUST</bcp14> be ignored by the receiver. </dd> <dt>B:</dt><dd> 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 needs to report the SIO for the hop. If 'B' is notsetset, then the SIO only indicates connectivity from the sibling to this node, and it does not provide information on the hop from this node to the sibling. </dd> <dt>S:</dt><dd> 1-bit flag that is set to indicate that the sibling belongs to the same DODAG. When not set, the Sibling DODAGID is indicated. </dd> <dt>Flags:</dt><dd>Reserved. The Flags fieldMUST<bcp14>MUST</bcp14> be initialized to zero by the sender andMUST<bcp14>MUST</bcp14> be ignored by the receiver. </dd> <dt>Comp.:</dt><dd>CompressionType,Type; a 3-bit unsigned integer. This is the SRH-6LoRH Type as defined infigureFigure 7 insection 5.1 of<xreftarget='RFC8138'/>target='RFC8138' section="5.1"/> that corresponds to the compression used for the Sibling Address and its DODAGID if present. The Compression reference is the Root of the main DODAG. </dd><dt>Opaque:</dt><dd>MAY<dt>Opaque:</dt><dd><bcp14>MAY</bcp14> be used to carry information that the node and the Root understand, e.g., a particular representation of theLinklink properties such as a proprietary Link Quality Information for packets received from the sibling. In some scenarios such asthe case of anIndustrial Alliances thatusesuse RPL for a particularuse / environment,use/environment, this fieldMAY<bcp14>MAY</bcp14> be redefined to fit the needs ofthatthe case. </dd> <dt>Step in Rank:</dt><dd>16-bit unsigned integer. This is the Step in Rank <xref target='RFC6550'/> as computed by the Objective Function between this node and the sibling,thatwhich reflects the abstract Rank increment that would be computed by theOFObjective Function if the sibling was the preferred parent. </dd> <dt>Reserved:</dt><dd>The Reserved fieldMUST<bcp14>MUST</bcp14> be initialized to zero by the sender andMUST<bcp14>MUST</bcp14> be ignored by the receiver </dd> <dt>Sibling DODAGID:</dt><dd>2 to 16bytes, thebytes. The DODAGID of the sibling in a<xref target='RFC8138'/>compressed form <xref target='RFC8138'/> as indicated by the Compression Type field. This field is present if and only if theD'D' flag is not set. </dd> <dt>Sibling Address:</dt><dd>2 to 16bytes, anbytes. An IPv6Addressaddress of thesibling,sibling with a scope thatMUST<bcp14>MUST</bcp14> make it reachable from the Root, e.g., it cannot be a Link Local Address. The IPv6 address is encoded in the<xref target='RFC8138'/>compressed form <xref target='RFC8138'/> indicated by the Compression Type field. </dd> </dl> <t> An SIOMAY<bcp14>MAY</bcp14> be immediately followed by a DAG Metric Container. In thatcasecase, the DAG Metric Container provides additional metrics for the hop from the Sibling to this node. </t> </section><!-- Sibling Information Option --></section><!-- New RPL Control Messages and Options --><sectionanchor='P-DAO'><name>Root Initiatedanchor='P-DAO'><name>Root-Initiated Routing State</name> <section anchor='setup'><name>RPL Network Setup</name> <t> To avoid the need of Path MTU Discovery by 6LoWPANend-points,endpoints, 6LoWPAN links are normally defined withaan MTU of 1280 (seesection 4 of<xreftarget='RFC4944'/>).target='RFC4944' section="4"/>). Injecting packets in a Track typically involves an IP-in-IP encapsulation and additional IPv6Extension Headers.extension headers. This may cause fragmentation if the resulting packets exceed the MTU that is defined for the RPL domain. </t> <t> Though fragmentation is possible in a 6LoWPAN LLN, e.g., using <xref target='RFC4944'/>, <xref target='RFC8930'/>, and/or <xref target='RFC8931'/>, it isRECOMMENDED<bcp14>RECOMMENDED</bcp14> to define an MTU that is larger than 1280 between the RPL routers that form the main DODAG to allow for the necessary header additions, while still exposing 1280 to the 6LoWPANend-pointendpoint stacks. </t></section><!-- RPL Network Setup --></section> <section anchor='req'><name>Requesting a Track</name> <t> This specification introduces thePDRP-DAO-REQ message, which is used by an LLN node to request the formation of a new Track for whichthisthe LLN node is theIngress.ingress. Note that the namespace for the TrackID is owned by theIngressingress node, and in the absence of aPDR,P-DAO-REQ, there must be some procedure for the Root to assign TrackIDs in that namespace while avoiding collisions(more(see more in <xref target='trkid'/>). </t> <t> ThePDRP-DAO-REQ signals the desired TrackID and the duration for which the Track should be established. Upon aPDR,P-DAO-REQ, the RootMAY<bcp14>MAY</bcp14> install the Track as requested, in which case it answers with a PDR-ACK indicating the granted Track Lifetime. All the segmentsMUST<bcp14>MUST</bcp14> be ofathe same mode, either Storing or Non-Storing. All the segmentsMUST<bcp14>MUST</bcp14> be created with the same TrackID and the same DODAGID signaled in the P-DAO. </t> <t> The Root designs the Track as it seesbest,fit andupdates / changesupdates/changes the segments over time to serve the Track as needed. Note that there is no protocol element to notifytothe requesting TrackIngressingress when changes happen deeper down the Track, so they are transparent to the TrackIngress.ingress. If the main Root cannot maintain an expected service level, then it needs to tear down the Track completely. The Segment Lifetime in the P-DAO messages does not need to be aligned to the Requested Lifetime in thePDR,P-DAO-REQ or between P-DAO messages for different segments.E.g., TheFor example, the Root may use shorter lifetimes for the segments and renew them or change them during the lifetime of the Track. All the components (protection paths and segments) of a TrackMUST<bcp14>MUST</bcp14> be destroyed (or have their lifetime elapsed) before the TrackID can be reused. </t> <t> When the Track Lifetime is relatively close to elapse--- meaning in the order of the trip time from the node to the Root--- the requesting nodeSHOULD<bcp14>SHOULD</bcp14> resend aPDRP-DAO-REQ using the TrackID in the PDR-ACK to extend the lifetime of theTrack, elseTrack; otherwise, the Track will timeoutout, and the Root will tear down the whole structure. </t> <t> If the Track fails and cannot be restored, the Root notifies the requesting node asynchronously with a PDR-ACK with a Track Lifetime of 0, indicating that the Track has failed, and a PDR-ACKStatusStatus, indicating the reason of the fault. </t></section><!-- Requesting a Track --></section> <section anchor='trkid'><name>Identifying a Track</name> <t> RPL defines the concept of an Instance to signal an individual routing topology, and multiple topologies can coexist in the same network. The RPLInstanceID is tagged in the RPI of every packet to signal which topology the packet actually follows. </t> <t> This specification leverages the RPL Instance model as follows: </t> <ul spacing='normal'> <li> <t> The main RootMAY<bcp14>MAY</bcp14> use P-DAO messages to add better routes in the main Instance in conformance with the routing objectives in that Instance. </t> <t> To achieve this, the main RootMAY<bcp14>MAY</bcp14> install a segment along a path down the main DODAG, which is operated in Non-Storing Mode. This enablesaloose source routing and reduces the size of the RoutingHeader,Header; see <xref target='loose'/>. The main RootMAY<bcp14>MAY</bcp14> also install a protection path across the main DODAG to complement the routing topology. </t> <t> When adding a P-Route to the RPL main DODAG, the main RootMUST<bcp14>MUST</bcp14> set the RPLInstanceID field of the P-DAO Base Object (seesection 6.4.1. of<xreftarget='RFC6550'/>)target='RFC6550' section="6.4.1"/>) to the RPLInstanceID of the main DODAG, andMUST NOTit <bcp14>MUST NOT</bcp14> use the DODAGID field. A P-Route provides a longer match to the Target Address than the default route via the main Root, so it is preferred. </t> </li> <li> <t> The main RootMAY<bcp14>MAY</bcp14> also use P-DAO messages to install a Track as an independent routing topology (say, Traffic Engineered) to achieve particular routing characteristics froman Ingressingress toEgress Endpoints.egress endpoints. To achieve this, the main RootMUST<bcp14>MUST</bcp14> set up a Local RPL Instance (seesection 5 of<xreftarget='RFC6550'/>),target='RFC6550' section="5"/>), and the Local RPLInstanceID serves as the TrackID. The TrackIDMUST<bcp14>MUST</bcp14> be unique for the IPv6 ULA or GUA of the TrackIngressingress that serves as the DODAGID for the Track. </t> <t> This way, a Track is uniquely identified by the tuple (DODAGID, TrackID) where the TrackID is always represented with theD'D' flag set to 0 (see alsosection 5.1. of<xreftarget='RFC6550'/>),target='RFC6550' section="5.1"/>), indicating that when used in anRPI thatRPI, the source address of the IPv6 packet signals the DODAGID. </t> <t> The P-DAO Base ObjectMUST<bcp14>MUST</bcp14> indicate the tuple (DODAGID, TrackID) that identifies the Track as shown in <xref target='p-dao-fmt'/>, and the P-RouteID that identifies the P-RouteMUST<bcp14>MUST</bcp14> be signaled in the VIO as shown in <xref target='viao'/>. </t> <t> The TrackIngressingress is the Root of theDODAG IDDODAGID formed by thelocalLocal RPL Instance. It owns the namespace of its TrackIDs, so it can pick any unused value to request a new Track with aPDR.P-DAO-REQ. In a particular deployment wherePDRsP-DAO-REQs are not used, a portion of the namespace can be administratively delegated to the main Root, meaning that the main Root is authoritative for assigning the TrackIDs for the Tracks it creates. </t> <t> With this specification, the main Root is aware of all the active Tracks, so it can also pick any unused value to form Tracks without aPDR.P-DAO-REQ. To avoid a collision of the main Root and the TrackIngressingress picking the same value at the same time, it isRECOMMENDED<bcp14>RECOMMENDED</bcp14> that the TrackIngressingress starts allocating the ID value of the Local RPLInstanceID (seesection 5.1. of<xreftarget='RFC6550'/>)target='RFC6550' section="5.1"/>) used as TrackIDs with the value 0 incrementing, while the Root starts with 63 decrementing. </t> </li> </ul></section><!-- Identifying a Track --></section> <section anchor='inst'><name>Installing a Track</name> <t> A path can be installed by a single P-Route that signals the sequence of consecutivenodes,nodes either in Storing Mode as a single-segmentTrack,Track or in Non-Storing Mode as a single-protection-path Track. A single-protection-path Track can be installed as a loose Non-Storing Mode P-Route, in which case the next loose entry must recursively be reached over a path. </t> <t> A Complex Track can be installed as a collection of P-Routes with the same DODAGID andTrack ID.TrackID. TheIngressingress of a Non-Storing Mode P-Route is the owner and Root of the DODAGID. TheIngressingress of a Storing Mode P-Route must be either the owner of theDODAGID,DODAGID or a hop of a protection path of the same Track. In the latter case, the Targets of the P-Route must include the next hop of the protection path if there isone,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. </t> <t>A route along a Track for which the TrackID is not the RPLInstanceID of the main DODAGMUST<bcp14>MUST</bcp14> be installed with a higher precedence than the routes along the main DODAG, meaning that: </t> <ul><li>Longest<li>The longest matchMUST<bcp14>MUST</bcp14> be the prime comparison for routing. </li><li>In case of equal length<li>For an equal-length match, the route along the TrackMUST<bcp14>MUST</bcp14> be preferredvs.over the one along the main DODAG. </li> <li>ThereSHOULD NOT<bcp14>SHOULD NOT</bcp14> be2two different Tracks leading to the same Target from sameIngressingress node, unless there's a policy for selecting which packets use which Track; such a policy is out of scope. </li> <li>A packet that was routed along a TrackMUST NOT<bcp14>MUST NOT</bcp14> be routed along the main DODAG again; if the destination is not reachable as a neighbor by the node where the packet exits theTrackTrack, then the packetMUST<bcp14>MUST</bcp14> be dropped. </li> </ul> <section anchor='trkpdao'><name>Signaling a Projected Route</name> <t> This specification adds a capability whereby the Root of a main DODAG installs a Track as a collection of P-Routes, using aProjected-DAO (P-DAO)P-DAO message for each individual protection path or segment. The P-DAO signals a collection of Targets inthe RPL Target Option(s) (RTO).one or more RTOs. Those Targets can be reached via a sequence of routers indicated in a VIO. </t> <t> Like a classical DAO message, a P-DAO causes a change of state only if it is "new" persection 9.2.2. "GenerationSection <xref target="RFC6550" sectionFormat="bare" section="9.2.2"/> ("Generation of DAOMessages"Messages") of the<xref target='RFC6550'>RPLspecification</xref>;specification <xref target='RFC6550'></xref>; 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 theP-Routes, theP-Routes: Storing andthe Non-Storing Modes.Non-Storing. </t> <t> A P-DAO messageMUST<bcp14>MUST</bcp14> be sent from the address of the Root that serves as the DODAGID for the main DODAG. ItMUST<bcp14>MUST</bcp14> contain either exactly one sequence of one or more RTOs followed by oneVIO,VIO or any number of sequences of one or more RTOs followed by one or more TIOs. The former is the normal expression for this specification, whereas the latter corresponds to the variation for less-constrained environments described in <xref target='bfd'/>. </t> <t> A P-DAO that creates or updates a protection pathMUST<bcp14>MUST</bcp14> be sent to a GUA or a ULA of theIngressingress of the protection path; itMUST<bcp14>MUST</bcp14> contain the full list of hops in the protection path unless the protection path is being removed. A P-DAO that creates a new Track segmentMUST<bcp14>MUST</bcp14> be sent to a GUA or a ULA of the segmentEgressegress andMUST<bcp14>MUST</bcp14> signal the full list of hops in a segment; a P-DAO that updates (including deletes) a section of a segmentMUST<bcp14>MUST</bcp14> be sent to the first node after the modified segment and <bcp14>MUST</bcp14> signal the full list of hops in the section starting at the node that immediately precedes the modified section. </t> <t> In Non-Storing Mode, as discussed in <xref target='nsP-DAO'/>, the Root sends the P-DAO to the TrackIngressingress where thesource-routingsource routing state is applied, whereas in Storing Mode, the P-DAO is sent to the last node on the installed path and forwarded in the reverse direction, installing a Storing Mode state at each hop, as discussed in <xref target='sP-DAO'/>. In bothcasescases, the TrackIngressingress is the owner of the Track, and it generates the P-DAO-ACK when the installation is successful. </t> <t> If the 'K'Flagflag is present in the P-DAO, the P-DAOMUST<bcp14>MUST</bcp14> be acknowledged using aDAO-ACKP-DAO-ACK that is sent back to the address of the Root from which the P-DAO was received. In most cases, the first node of the protection path, segment, or updated section of the segment is the node that sends the acknowledgment. The exception to the rule is when an intermediate node in a segment fails to forward a Storing Mode P-DAO to the previous node in the SM-VIO. </t> <t> In a No-Path Non-Storing Mode P-DAO, the SRH-6LoRHMUST NOT<bcp14>MUST NOT</bcp14> be present in the NSM-VIO; the state in theIngressingress is erased regardless. In all other cases, a VIOMUST<bcp14>MUST</bcp14> contain at least one Via Address, and a Via AddressMUST NOT<bcp14>MUST NOT</bcp14> be present more than once, which would create a loop. </t> <t> A node that processes a VIOMAY<bcp14>MAY</bcp14> verify whether any of these conditions happen, and when one does, itMUST<bcp14>MUST</bcp14> ignore the P-DAO and reject it with a RPLRejection Statusrejection status of "Error in VIO" in theDAO-ACK,DAO-ACK; see <xref target='iana-stats-rpl-rej'/>. </t><t>Other errorsErrors, other than those discussedexplicitlyexplicitly, that prevent the installation of the route are acknowledged with a RPLRejection Statusrejection status of "Unqualified Rejection" in theDAO-ACK.P-DAO-ACK. </t></section><!-- Signaling a Projected Route --></section> <section anchor='sP-DAO'><name>Installing a Track Segment with a Storing Mode P-Route</name> <t>As illustrated in <xref target='sdf'/>, a Storing Mode P-DAO installs a route along the segment signaled by the SM-VIO towards the Targets indicated in the Target Options. The segment is to be included in a DODAG indicated by the P-DAO Base Object,thatwhich may be the one formed by the main DODAG, or a Track associated with alocalLocal RPL Instance. </t> <figure anchor='sdf'><name>Projecting aroute</name> <artwork>Route</name> <artwork><![CDATA[ ------+--------- | Internet | +-----+ | | BorderrouterRouter | | (RPL Root) +-----+ | ^ | | | DAO | ACK | o o o o | | | o o o o Ingress o o o | ^ | Projected . o o o o o \\ o o o | | DAO | Route . o o o o \\ o o o o | ^ | . o o o o o Egress o o v | DAO v . o o LLN o o o | o o o o o Loose Source Route Path | o o o ov </artwork>v]]></artwork> </figure> <t> In order to install the relevant routing state along thesegment ,segment, the Root sends a unicast P-DAO message to the TrackEgressegress router of the routing segment that is being installed. The P-DAO message containsaan SM-VIO withthea strict sequence of Via Addresses. The SM-VIO follows one or more RTOs indicating the Targets to which the Track leads. The SM-VIO contains a Segment Lifetime for which the state is to be maintained. </t><t> 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 the SM-VIO. This is how theEgressegress recognizes its role. In a similar fashion, the segmentIngressingress node recognizes its role because it matches the first Via Address in the SM-VIO. </t><t> TheEgressegress 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 its existing tables. If one of the Targets is not known, the nodeMUST<bcp14>MUST</bcp14> answer to the Root with aDAO-ACKP-DAO-ACK listing the unreachable Target(s) in an RTO and a rejection status of "Unreachable Target". </t><t> If theEgressegress node can reach all the Targets,thenit forwards the P-DAO with unchanged content to its predecessor in the segment as indicated in the list ofVia Information options,VIOs, andrecursivelythe message is recursively propagated unchanged along the sequence of routers indicated in the P-DAO, but in the reverse order, fromEgressegress toIngress.ingress. </t><t> The address of the predecessor to be used as the destination of the propagated DAO message is found in the Via Addresslist,list at the position preceding the one that contains the address of the propagating node, which is used as the source of the message. </t><t> Upon receiving a propagated DAO, all except theEgressegress routerMUST<bcp14>MUST</bcp14> install a route towards the DAO Target(s) via their successor in the SM-VIO. A router that cannot store the routes to all the Targets in a P-DAOMUST<bcp14>MUST</bcp14> reject the P-DAO by sending aDAO-ACKP-DAO-ACK to the Root with aRejection Statusrejection status of "Out of Resources" as opposed to forwarding the DAO to its predecessor in the list. The routerMAY<bcp14>MAY</bcp14> install additional routes towards the Via Addresses that appear in the SM-VIO after its own address, if any, but in case of a conflict or a lack of resource, the route(s) to the Target(s)are the ones that MUST<bcp14>MUST</bcp14> be installed in priority. </t> <t> If a router cannot reach its predecessor in the SM-VIO, the routerMUST<bcp14>MUST</bcp14> send theDAO-ACKP-DAO-ACK to the Root with aRejection Statusrejection status of "Predecessor Unreachable". </t> <t> The process continues until the P-DAO is propagated to theIngressingress router of the segment, which answers with aDAO-ACKP-DAO-ACK to the Root. The Root always expects aDAO-ACK,P-DAO-ACK, either from the TrackIngressingress with a positive status or from any node along the segment with a negative status. If theDAO-ACKP-DAO-ACK is not received, the Root may retry the DAO with the sameTID,TrackID or tear down the route. </t> </section><!-- Installing a Track segment with a Storing Mode P-Route --><section anchor='nsP-DAO'><name>Installing aprotection pathProtection Path with a Non-Storing Mode P-Route</name> <t>As illustrated in <xref target='nsdf'/>, a Non-Storing Mode P-DAO installs a source-routed path within the Track indicated by the P-DAO BaseObject,Object towards the Targets indicated in the Target Options. The source-routed path requires aSource-Routing headerSource Routing Header, which implies an IP-in-IP encapsulation is needed to add the SRH to an existing packet. It is sent to the TrackIngressingress, which creates a tunnel associated with theTrack,Track and connected routes over the tunnel to the Targets in the RTO. The tunnel encapsulationMUST<bcp14>MUST</bcp14> incorporate arouting headerRouting Header via the list addresses listed in the VIO in the same order. The content of the NSM-VIO starting at the first SRH-6LoRH headerMUST<bcp14>MUST</bcp14> be used verbatim by the TrackIngressingress when it encapsulates a packet to forward it over the Track. </t> <figure anchor='nsdf'><name>Projecting a Non-Storing Route</name><artwork><artwork><![CDATA[ ------+--------- | 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 XSourceSource- o o o o o o o o X o o X Routed o o°o o o o o X o X Segment o o o o o o o o X Egress X o o o o o | Target o o LLN o o o o oo </artwork>o]]></artwork> </figure> <t> The next entry in the source-routed path must be either a neighbor of the previousentry,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 sequenceis,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 protection path(s) of the same Track thatuseuses it, and stitched segments must be installed in order from the lastthat reachesto theTargetsfirst to reach thefirst.Targets. </t> <t> If the next entry in the loose sequence is reachable over a Storing Mode P-Route, itMUST<bcp14>MUST</bcp14> be the Target of a segment and theIngressingress of a next segment, which are both alreadysetup;set up; the segments are associated with the same Track, which avoidsthe need ofneeding an additional encapsulation. For instance, in <xref target="srpdao"/>, 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. </t> <t> 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 theIngressingress of a next Track, which requiresade- andare-encapsulation when switching the outer Tracks that join the loose hops. This isexamplifiedexemplified in <xref target="nssr"/> where Non-Storing ModeP-DAOP-DAOs 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. </t> </section><!-- Installing a Track Segment with a Storing Mode P-Route --> </section><!-- Installing a Track --></section> <section anchor='teardown'><name>Tearing Down a P-Route</name> <t> A P-DAO with a lifetime of 0 is interpreted as a No-PathDAO and results in cleaningDAO. Its function is to clean up an existing state as opposed to refreshingan existing oneit or installing a new one. To tear down a Track, the Root must tear down all the Track segments and protection paths that compose it one by one. </t> <t> Since thestate about aprotection path state of a Track is located only on theIngressingress Node, the Root cleans up the protection path by sending an NSM-VIO to theIngress indicatingingress to indicate the TrackID and the P-RouteID of the protection path being removed, a Segment Lifetime of00, and a newer Segment Sequence. The SRH-6LoRH withtheVia Addresses in the NSM-VIOareis not needed; itSHOULD NOT<bcp14>SHOULD NOT</bcp14> be placed in the message andMUST<bcp14>MUST</bcp14> be ignored by the receiver. Upon that NSM-VIO, theIngressingress node removes all state for thatTrackTrack, if any, and replies positively anyway. </t> <t> The Root cleans up a section of a segment by sending an SM-VIO to the last node of thesegment,segment withthean updated TrackID andthe P-RouteID of the segment being updated,P-RouteID, a Segment Lifetime ofzero (0)0, and a newer Segment Sequence. The Via Addresses in the SM-VIOindicatesindicate 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 totallyremoved,removed or a sequence of one or more nodes that have been bypassed by a segment update. </t> <t> 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 segmentstatestate, if any, as opposed to refreshing an existing one or installing a new one. </t></section><!-- Tearing Down a P-Route --></section> <section anchor='maintain'><name>Maintaining a Track</name> <t> Repathing a Track segment or protection path 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 <xreftarget='I-D.ietf-raw-architecture'/>target='RFC9912'/> over a highly redundant Track. This specification allowstothe use of more than one protection path for aTrack,Track and 1+N packet redundancy. </t> <t> 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 as well when thepacketsin-flight packets are forwarded along the newsection as well.section. </t> <section anchor='maintainS'><name>Maintaining a Track Segment</name> <t> To modify a section of a segment betweenathe first node and asecond,second downstream node (which can be theIngressingress andEgress, respectively),egress, respectively) while retaining those nodes in the segment, the Root sends an SM-VIO to the second node indicating the sequence of nodes in the new section of the segment. The SM-VIO indicates the TrackID and the P-RouteID of the segment beingupdated,updated and a newer Segment Sequence. The P-DAO is propagated from the second to the firstnodenode, and on the way, it updates the state on the nodes that are common to the old andthenew section of the segment and creates a state in the new nodes. </t> <t> When the state is updated in an intermediate node, that node might still receive packets that were in flight from theIngressingress 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. </t> <t> After a reasonabletime to enable the deprecated sections to drain their traffic,amount of time, the Root tears down the remaining section(s) of the old segments as described in <xreftarget='teardown'/>.target='teardown'/> to enable the deprecated sections to drain their traffic. </t> </section><!-- Maintaining a Track Segment --><section anchor='maintainT'><name>Maintaining aprotection path</name>Protection Path</name> <t>This specification allows the Root to add protection paths to a Track by sending a Non-Storing Mode P-DAO to theIngressingress associated to the sameTrackID,TrackID and a newSegment ID.SegmentID. If the protection path is loose, then the segments that join the hops must be created first. It makes sense to add a new protection path before removing one that is becoming excessivelylossy,lossy and switch to the new protection path before removing the old. Dropping a Track before the new one is installed would reroute the traffic via theroot;Root; this may increase the latency beyond acceptablethresholds,thresholds and overload the network near theroot.Root. This may also cause loops in the case of stitched Tracks:theThe packets that cannot be injected in the second Track might be routed back and reinjected at theIngressingress of thefirst.first Track. </t> <t> It is also possible to update a protection path by sending a Non-Storing Mode P-DAO to theIngressingress with the sameSegment ID,SegmentID, an incremented Segment Sequence, and the new complete list of hops in the NSM-VIO. Updating a live protection path means changing one or more of the intermediate loose hops, and it involves laying out new segments from and to the new loose hops before the NSM-VIO is issued for the new protectionpath is issued.path. </t> <t> Packets that are in flight over the old version of the protection path still follow the old source route path over the old segments. After a reasonabletime to enable the deprecated segments to drain their traffic,time, the Root tears down those segments as described in <xreftarget='teardown'/>.target='teardown'/> to enable the deprecated segments to drain their traffic. </t> </section><!-- Maintaining a protection path --></section><!-- Maintaining a Track --><section anchor='routing'><name>Encapsulating and Forwarding Along a Track</name> <t> When injecting a packet in a Track, theIngressingress router must encapsulate the packet using IP-in-IP to add the Source Routing Header with the final destination set to the TrackEgress.egress. </t> <t> All properties of a Track's operations are inheritedformfrom the main Instance that is used to install the Track. For instance, the use of compression per <xref target='RFC8138'/> is determined by whether it is used in the RPL main DODAG, e.g., by setting the"T"'T' flag <xref target= 'RFC9035'/> in the RPLconfigurationConfiguration option. </t> <t>TheWhen the TrackIngress thatingress places a packet in aTrackTrack, it encapsulates it with an additional IPv6 header, a Routing Header, and an IPv6 Hop-by-Hop Option Header that contains theRPL Packet Information (RPI)RPI as follows: </t> <ul> <li> In the uncompressed form, the source of the packet is the address that this router uses as the DODAGID for the Track, the destination is the first Via Address in the NSM-VIO, and the RH isa Source Routing Header (SRH)an SRH <xref target='RFC6554'/> that contains the list of the remaining Via Addresses, ending with the TrackEgress.egress. </li> <li> <t>The preferred alternative inIn a network where 6LoWPANHeader Compressionheader compression <xref target='RFC6282'/> isusedin use, it is preferred toleverage <xref target='RFC8025'>implement "IPv6 over Low-Power Wireless Personal Area Network (6LoWPAN) PagingDispatch"</xref> toDispatch" <xref target='RFC8025'/> and compress the RPL artifacts as indicated in <xref target='RFC8138'/>. </t> <t> In that case, thesource routed headerRPL Source Route Header is the exact copy of the (chain of) SRH-6LoRH found in the NSM-VIO, also ending with the TrackEgress.egress. The RPI-6LoRH is appended next, followed by an IP-in-IP 6LoRHHeaderheader that indicates theIngressingress router in the Encapsulator Addressfield,field; seeasa similar case in Figure 20 of <xref target='RFC8138'/>. </t> </li> </ul> <t> To signal the Track in the packet, this specification leverages the RPLForwardingforwarding model as follows: </t> <ul spacing='normal'> <li> <t> In the data packets, the Track DODAGID and the TrackIDMUST<bcp14>MUST</bcp14> be respectively signaled as the IPv6Source Addresssource address, and the RPLInstanceID field of the RPIthat MUST<bcp14>MUST</bcp14> be placed in the outer chain of IPv6Headers.headers. </t> <t> The RPI carries alocalLocal RPLInstanceID called the TrackID, which, in association with the DODAGID, indicates the Track along which the packet is forwarded. </t> <t> TheD'D' flag in the RPLInstanceIDMUST<bcp14>MUST</bcp14> be set to 0 to indicate that the source address in the IPv6 header is set to the DODAGID(more(see more in <xref target='trkid'/>). </t> </li> <li> <t> This specification conforms to the principles of <xref target='RFC9008'/> withregardsregard to packet forwarding and encapsulation along aTrack,Track as follows: </t> <ul> <li> With this specification, the Track is a RPL DODAG. From the perspective of that DODAG, the TrackIngressingress is the Root, the TrackEgressegress is a RPL-Aware 6LR, and neighbors of the TrackEgressegress 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 <xref target= 'RFC9008'/> apply. </li><li> If the TrackIngressingress is the originator of the packet and the TrackEgressegress is the destination of the packet, there is no need for an encapsulation. </li><li>SoThus, the TrackIngressingress must encapsulate the traffic that it did not originate, and it must include an RPI in the encapsulation to signal the TrackID. </li> </ul> <t> A packet that is being routed over the RPL Instance associated to a first Non-Storing Mode TrackMAY<bcp14>MAY</bcp14> be placed recursively in a second Track to cover one loose hop of the firstTrackTrack, as discussed in more detail in <xref target="nssr"/>. On the other hand, a Storing Mode segment must bestrictstrict, and a packet that it placed in a Storing Mode segmentMUST<bcp14>MUST</bcp14> follow that segment till the segmentEgress.egress. </t> </li> </ul> <t> It is known that a packet is forwarded along a Track by the source address and the RPI in the encapsulation. TheTrack IDTrackID is used to identify the RIB entries associated to that Track, which, in intermediate nodes, correspond to theP-routesP-Routes for the segments of the Track that the forwarding router is aware of.The packetPacket processing usesa precedence that favors self deliverythe following precedence: 1) self-delivery orrouting headerRouting Header handling when one is present,then2) delivery to direct neighbors,then3) delivery to indirect neighbors,then4) routing along a segment along the Track, andfinally as a last resort5) injecting the packet in anotherTrack.Track, as a last resort. </t><t> To achieve this, the packet handling logicMUST<bcp14>MUST</bcp14> happen in the following order: </t> <ul> <li> <t> If the destination of the packet is self: </t> <ol> <li>ifIf the header chain contains a RPL Source Route Header that is not fully consumed, then the packet is forwarded along the Track as prescribed by <xref target='RFC6554'/>, meaning that the next entry in therouting headerRouting Header becomes thedestination;destination. </li><li>otherwise:Otherwise, if the packet was encapsulated, then the packet is decapsulated and the forwarding process recurses;elseelse, the packet is delivered to the stack. </li> </ol><!-- If the only route in the RIB was created by an NSM-VIO, this is achieved by encapsulating the packet, else by forwarding and / or delivering the packet as indicated below. --></li> <li> <t>Otherwise, the packet is forwarded as follows: </t> <ol> <li> If the destination of the packet is a direct neighbor, e.g., installed by IPv6 Neighbor Discovery, then the packetMUST<bcp14>MUST</bcp14> be forwarded to thatneighbor;neighbor. </li><li>Else IfElse, if the destination of the packet is an indirect neighbor, e.g., installed by a multicast DAO message from a commonneighbor, seeneighbor (see <xreftarget='extSIO'/>,target='extSIO'/>), then the packetMUST<bcp14>MUST</bcp14> be forwarded to the commonneighbor;neighbor. </li><li> Else, if there is a RIB entry for the same Track (e.g., installed by an SM-VIO in a DAO message with the destination astarget),the target) and the next hop in the RIB entry is a direct neighbor, then the packet is passed to thatneighbor;neighbor. </li><li> Else, if there is a RIB entry for the different Track (e.g., installed by an NSM-VIO in a DAO message with the destination as the target), then the packet is encapsulated to be forwarded along that Track and the forwarding process recurses;otherwiseotherwise, the packet is dropped.<!-- </li><li> The longest match in the RIB indicates the next hop, and whether the route is installed by neighbor discovery (for direct neighbors), learned through an SIO in a multicast DAO message (for indirect neighbors see <xref target='extSIO'/>), as the target of a segment P-Route (meaning strict and Storing Mode). Forwarding of a packet along a track will fail if there is no such match in the RIB, meaning that the Track continuity is broken. --></li><li> To avoid loops, and as opposed to packets that were not encapsulated, a packet that was decapsulated from a TrackMUST NOT<bcp14>MUST NOT</bcp14> be routed along the default route of the main DODAG; this would mean that the end-to-end path is uncontrolled. The node that discovers the faultMUST<bcp14>MUST</bcp14> discard the packet. </li> </ol> </li> </ul> <t> The node that drops a packetfor eitherin any of thereasonssteps aboveMUST<bcp14>MUST</bcp14> send an ICMPv6Errorerror message <xref target='RFC4443'/> to the Root, with a newCodecode "Error in P-Route"(See(see <xref target='ICMPv6ErrPRoute'/>). The Root can then repair by updating the broken segment and/orTracks, and inTracks. In the case of a broken segment,removethe Root removes the leftover sections of the segment using SM-VIOs with a lifetime of00, indicating the sectiontowhere one or more nodes are being removed(See(see <xref target='maintain'/>). </t> <t>In case of a permanent forwarding error along aSource Routesource route path, the node that fails to forwardSHOULD<bcp14>SHOULD</bcp14> send an ICMP error withathe code "Error in Source Routing Header" back to the source of the packet, as described insection 11.2.2.3. of<xreftarget='RFC6550'/>.target='RFC6550' section="11.2.2.3"/>. Upon receiving this message, the encapsulating nodeSHOULD<bcp14>SHOULD</bcp14> stop using the source route path for a reasonable period oftimetime, which depends on the deployment, and itSHOULD<bcp14>SHOULD</bcp14> send an ICMP message witha Codethe code "Error in P-Route" to the Root. Failure to follow these steps may result in packet loss and wasted resources along the source route path that is broken. </t> <t> Either way, the ICMP messageMUST<bcp14>MUST</bcp14> be throttled in case of consecutive occurrences. ItMUST<bcp14>MUST</bcp14> be sourced at the ULA oraGUA that is used in this Track for the source node, so the Root can establish where the error happened. </t> <t> The portion of the invoking packet that is sent back in the ICMP messageSHOULD<bcp14>SHOULD</bcp14> record at least up to the RH if one is present, andthisthe hop of the RHSHOULD<bcp14>SHOULD</bcp14> be consumed by this node so that the destination in the IPv6 header is the next hop that this node could not reach. If a6LoWPAN Routing Header (6LoRH)6LoRH <xref target='RFC8138'/> is used to carry the IPv6 routing information in the outerheaderheader, thenthatthe whole 6LoRH informationSHOULD<bcp14>SHOULD</bcp14> be present in the ICMP message. </t></section><!-- Encapsulating and Forwarding along a Track --></section> <section anchor='encompression'><name>Compression oftheRPL Artifacts</name> <t> Whenusing <xref target='RFC8138'/> inthe main DODAG in a 6LoWPAN LLN is operated in Non-Storing Modein a 6LoWPAN LLN,and the data packets are compressed using <xref target='RFC8138'/>, a typical packet that circulates in the main DODAG is formatted as shown in <xref target='inner'/>, representing the case where an IP-in-IP encapsulation is needed (see Table 19 of <xref target='RFC9008'/>): </t> <figure anchor='inner'><name>A Packet as ForwardedalongAlong themainMain DODAG</name> <artworkalign="center">><![CDATA[ +-+ ... -+- ... -+- ... -+-+- ... +-+-+-+ ... +-+-+ ... -+ ... +-... |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 ==================== == </artwork>=]]></artwork> </figure> <t> Since there is no page switch between the encapsulated packet and the encapsulation, the first octet of the compressed packet that acts as the page selector is actually removed atencapsulation, soencapsulation; therefore, the inner packet used in the descriptions below starts with theSRH-6LoRH,SRH-6LoRH and is exactly the packet represented in <xref target='inner'/>, from the second octet onward. </t> <t>When encapsulatingthatthe inner packet to placeitin the Track, the first header that theIngressingress appends at the head of the inner packet is an IP-in-IP 6LoRHHeader;header; in that header, the encapsulator address, which maps to the IPv6 source address in the uncompressed form, contains a GUA or ULA IPv6 address of theIngressingress node that serves asDODAG IDthe DODAGID for the Track, expressed inthea compressed formandusing the DODAGID of the main DODAG ascompression reference.a reference for the compression. If the address is compressed to 2 bytes, the resulting value for the Length fieldshown(shown in <xreftarget='ipinip'/>target='ipinip'/>) is 3, meaning that the SRH-6LoRH as a whole is5-octets5 octets long. </t> <figure anchor='ipinip'><name>The IP-in-IP 6LoRH Header</name> <artworkalign="center">><![CDATA[ 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 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- ...-+ </artwork>-+]]></artwork> </figure> <t> At the head of the resulting sequence of bytes, thetrack IngressTrack ingress then addsthe RPI that carries the TrackID as RPLinstanceID asa P-RPI-6LoRHHeader,header to transport the RPI in its compressed form as illustrated in <xreftarget='PRpifmt'/>, usingtarget='PRpifmt'/>. The RPI carries the TrackID as RPLInstanceID.<!-- DB: I can't make sense of this sentence, too many "as". Looks like a quick edit gone bad. -->Combined with the IP-in-IP 6LoRHHeader,header, this allowsto identifyidentifying the Track without ambiguity. </t> <t> The SRH-6LoRH is then added at the head of the resulting sequence of bytes as a verbatim copy of the content of theSR-VIOSM-VIO that signaled the selected protection path. </t> <figure anchor='srh6lorh'><name>TheSRH 6LoRHSRH-6LoRH Header</name> <artworkalign="center">><![CDATA[ 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 </artwork>1]]></artwork> </figure> <t> The format of the resulting encapsulatedpacketpacket, which is in<xref target='RFC8138'/>compressed form per <xref target='RFC8138'/>, is illustrated in <xref target='respac'/>: </t> <figure anchor='respac'><name>A Packet as ForwardedalongAlong a Track</name> <artworkalign="center">><![CDATA[ +-+ ... -+-+-+- ... -+-+-+- ... -+-+-+-+-+- ... +-+-+-+-+-+-+- ... | Page 1 | SRH-6LoRH | P-RPI-6LoRH | IP-in-IP 6LoRH | Inner Packet +-+ ... -+-+-+- ... -+-+-+- ... -+-+-+-+-+- ... +-+-+-+-+-+-+- ... Signals : Loose Hops : TrackID : Track DODAGID: </artwork>:]]></artwork> </figure></section><!-- Compression of the RPL Artifacts --> </section><!-- Root Initiated Routing State --></section> </section> <section anchor="ov"><name>Less-Constrained Variations</name> <section anchor="smmd"><name>Storing ModemainMain DODAG</name> <t>This specification expects that the main DODAG is operated in Non-Storing Mode. The reasons for that limitation are mostly related to LLN operations,powerpower, and spectrum conservation:</t> <ul> <li>In Non-Storing Mode, the Root alreadyknownsknows the DODAG topology, so the additional topological information is reduced to the siblings. </li> <li>The downward 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.AlsoAlso, the Root can control the use ofthepath diversity in the DODAG to reach the LLN nodes. For both reasons, Non-Storing Mode provides better capabilities for the Root to maintain the P-Routes. </li> <li> When the main DODAG is operated in Non-Storing Mode, P-Routes enable looseSource Routing,source routing, which is only an advantage in that mode. Storing Mode does not use Source RoutingHeaders,Headers and does not derive the same benefits from this capability.<!-- DB: unclear to me what benefis and what capability are being referred to here. Can you be more explicit? --></li> </ul> <t>On the other hand, since RPL is aLayer-3Layer 3 routing protocol, its applicability extends beyond LLNs to a generic IP network. RPL requireslessfewer resources than alternative IGPslikesuch as OSPF,ISIS, EIGRP, BABELIS-IS, the Enhanced Interior Gateway Routing Protocol (EIGRP), BABEL, or RIPat the expense of a routewhen using routing stretchvs.rather than the shortest path routes to a destination that those protocols compute. P-Routes add the capability to install the shortest and/or constrained routes to special destinationssuchas discussed insection A.9.4.Appendix <xref section="A.9.4" sectionFormat="bare" target="RFC8994"/> ofthe ANIMA ACP"An Autonomic Control Plane (ACP)" <xreftarget='RFC8994'/>.target="RFC8994"/>. </t> <t> 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 theNon-Storing,Non-Storing Mode, as it reduces therouterouting stretch and lowers the load on the Root. In that case, the control path between the Root and the RPL nodes can be maintained more aggressively and with more redundancy than in LLNs, and the nodes can be reached to maintain the P-Routes at most times for a finer and more reactive control. </t> <t> This section specifies the additions that are needed to supportProjected RoutesP-Routes when the main DODAG is operated in Storing Mode. As long as the RPI can be processed adequately by thedataplane,data plane, the changestoin this specification are limited to the DAO message. The Track structure,routesroutes, and forwarding operations remain the same. Since there is no capability negotiation, the expectation is that all the nodes in the network support this specification in the samefashion,fashion or are configured the same way through management. </t> <t> In Storing Mode, the Root misses theChild to ParentChild-to-Parent relationship that forms the mainDODAG,DODAG as well as the sibling information. To provide thatknowledgeknowledge, the nodes in the networkMUST<bcp14>MUST</bcp14> send additional DAO messages that are unicast to the Root just like Non-Storing DAO messages are. </t> <t>In the DAO message, the originating router advertises a set of neighbor nodes usingSibling Information Options (SIO)s,SIOs, regardless of the relative position in the DODAG of the advertised nodevs.versus this router. </t> <t>The DAO messageMUST<bcp14>MUST</bcp14> be formed as follows: </t> <ul> <li> The originating router is identified by the source address of the DAO. That addressMUST<bcp14>MUST</bcp14> be the one that this router registers to the 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 oneTransit Information OptionTIO and one or moreSibling Information Options.SIOs. There is no RPL Target Option so that the Root is not confused into adding a Storing Mode route to the Target. </li> <li> The TIO is formed as in Storing Mode, and the Parent Address is not present. The Path Sequence and Path Lifetime fields are aligned with the values used in the Address Registration of the node(s) advertised in the SIO, as explained inSection 9.1. of<xreftarget='RFC9010'/>.target='RFC9010' section="9.1"/>. Having similar values in all nodes allowsfactorisingfactorizing the TIO for multiple SIOs as donewith <xref target='RFC6550'/>. </li> <!-- <li> The TIO is followed by one RPL Target Option that signals the router that sends the information. The Target Prefixinthe RTO contains the address in full and the "Advertiser address in Full" (F)<xreftarget='RFC9010'/> flag is set to 1.target='RFC6550'/>. </li>--><li>The TIO is followed by one or more SIOs that provide an address (ULA or GUA) of the advertised neighbor node. </li> </ul> <t>ButHowever, the RPL routing information headers may not be supported on alltypetypes of routed network infrastructures, especially not in high-speed routers. When the RPI is not supported in thedataplane,data plane, there cannot belocalLocal RPL Instances and RPL can only operate as a single topology (the main DODAG). The RPL Instance is the one thatofruns the mainDODAGDODAG, and theIngressingress node that encapsulates the RPL Instance is not the Root. The routes along the Tracks are alternate routes to those available along the main DODAG. TheyMAY<bcp14>MAY</bcp14> conflict with routes to children andMUST<bcp14>MUST</bcp14> take precedence in the routing table. The TargetsMUST<bcp14>MUST</bcp14> be adjacent to the TrackEgressegress to avoid loops that may form if the packet is reinjected in the main DODAG. </t></section><!-- Storing Mode main DODAG --></section> <section anchor="bfd"><name>A Track as a Full DODAG</name> <t>This specification builds Tracks with parallel or interleaved protection paths as opposed to a more complex DODAG with interconnections at any place desirable. The reason for that limitation is related to constrained nodeoperations,operations and the capability to store a large amount of topological information and compute complex paths:</t> <ul> <li>With this specification, the node in the LLN has no topologicalawareness,awareness and does not need to maintain dynamic information about the link quality and availability. </li> <li>The Root hasacomplete topological information and statistical metrics that allowitit, or itsPCEPCE, to perform a global optimization of all Tracks in its DODAG. Based on that information, the Root computes the protection path and produces the source route paths. </li> <li> The node merely selects one of the proposed paths and applies the associated pre-computedrouting headerRouting Header in the encapsulation. This alleviates both the complexity of computing a path and the compressed form of therouting header.Routing Header. </li> </ul> <t>The RAW architecture <xreftarget='I-D.ietf-raw-architecture'>RAW Architecture</xref>target='RFC9912'></xref> actually expects the PLR at the TrackIngressingress to react to changes in the forwarding conditions along theTrack,Track and reroute packets to maintain the required degree of reliability. To achieve this, the PLR needs the full richness of a DODAG to form any path that could meet theService Level Objective (SLO).SLO. </t> <t> This section specifies the additions that are needed to turn the Track into a full DODAG and enable the main Root to provide the necessary topological information to the TrackIngress.ingress. The expectation is that the PLR's metricsthat the PLR uses are of anwill be in a different orderotherthanthat ofthePCE, <!-- DB: not sure what "of an order other" means -->PCE's metrics because of the differenceof time scalein the timescale between routing andforwarding,forwarding; see more in <xreftarget='I-D.ietf-raw-architecture'/>.target='RFC9912'/>. It follows that the PLR will learn the metrics it needs from an alternate source, e.g., OAM frames. </t> <t> To pass the topological information to theIngress,ingress, the Root uses a P-DAOmessagesmessage that contains sequences ofTargetTargets andTransit Information optionsTIOs that collectively represent the Track, expressed in the same fashion as in classical Non-Storing Mode. The difference is that the Root is the source as opposed to the destination, and the Root can report information on many Targets, possibly the full Track, with one P-DAO. </t> <t>Note that the Path Sequence and Lifetime in the TIO are selected by theRoot,Root and that the Target/Transit information tuples in the P-DAO are not those received by the Root in the DAO messages about the said Targets. The Track may follow sibling routes and does not need to be congruent with the main DODAG. </t></section><!-- A Track as a Full DODAG --> </section><!-- Least Constrained Variations --></section> </section> <section anchor='prof'><name>Profiles</name> <t> 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 section describes profiles that can be implementedseparatelyseparately, e.g., using only a portion of this specification to meet a particular use case, and can be used to discriminate what an implementation can and cannot do.<!-- DB: the above sentence is grammatically incorrect and seems somewhat redundant with the one preceeding it. Was the preceeding one meant to superseede the second one? --> This section describes profiles that enable implementing only a portion of this specification to meet a particular use case.</t><t> Profiles 0 to 2 operate in the main Instance and do not require the support oflocalLocal RPL Instances or the indication of the RPL Instance in the data plane. Profile 3 and above leverage Local RPL Instances to build arbitrary TracksRootedrooted at the TrackIngress andingress, usingitsthe namespace of the Track ingress for the TrackID.</t><t></t> <t> Profiles 0 and 1 areREQUIRED<bcp14>REQUIRED</bcp14> by all implementations that may be used in LLNs; Profile 1 leverages Storing Mode to reduce the size of the RPL Source Route Header in the most common LLN deployments. Profile 2 isRECOMMENDED<bcp14>RECOMMENDED</bcp14> inhigh speed / wireda high-speed (e.g., wired) environment to enabletrafficTraffic Engineering and network automation. All the otherprofile / environmentprofile/environment combinations areOPTIONAL.<bcp14>OPTIONAL</bcp14>. </t><dl><dl newline="true"> <dt> Profile00: </dt><dd> Profile 0 is theLegacylegacy support of <xref target='RFC6550'/> Non-Storing Mode, with default routing Northwards (up) and strict source routing Southwards (down the main DODAG). It provides the minimal common functionality that must be implemented as a prerequisite to all the Track-supporting profiles. The otherProfilesprofiles extend Profile 0 with selected capabilities that this specificationintroduces on top.introduces. </dd> <dt> Profile 1 (Storing Mode P-Route segments along the mainDODAG)DODAG): </dt><dd> Profile 1 does not create new paths; compared to Profile 0, it combines Storing and Non-Storing Modes to balance the size of the Routing Header in the packet and the amount of state in the intermediate routers in a Non-Storing Mode RPL DODAG. </dd> <dt> Profile 2 (Non-Storing Mode P-Route segments along the mainDODAG)</dt><dd>DODAG):</dt><dd> Profile 2 extends Profile 0 withStrict Source-Routingstrict source-routed Non-Storing Mode P-Routes along the main DODAG, which is the same as Profile 1 but usingNSM VIOsNSM-VIOs as opposed toSM VIOs.SM-VIOs. Profile 2 provides the same capability to compress the SRH in packets down the main DODAG as Profile 1, but it requires anencapsulation,encapsulation in order to insert an additional SRH between the loose source routing hops.In that case,With Profile 2, the TracksMUST<bcp14>MUST</bcp14> be installed as subTracks of the main DODAG,<!-- DB: not sure what "In that case," refers to. Do you mean "With Profile 2,? -->and the main InstanceMUST<bcp14>MUST</bcp14> be used as the TrackID. Note that theIngressingress node encapsulates but is not the Root, as it does not own the DODAGID. </dd> <dt> Profile33: </dt><dd> In order to form the best path possible, thisProfileprofile requires the support ofSibling Information Optionan SIO to inform the Root of additional possible hops. Profile 3 extends Profile 1 with additional Storing Mode P-Routes that install segments that do not follow the main DODAG. If the segmentIngressingress (in the SM-VIO) is the same as the IPv6Addressaddress of the TrackIngressingress (in theprojectedProjected DAObaseBase Object), the P-DAO creates an implicit Track between the segmentIngressingress and the segmentEgress.egress. </dd> <dt> Profile44: </dt><dd> Profile 4 extends Profile 2 withStrict Source-Routingstrict source-routed Non-Storing Mode P-Routes to form forward Tracks that are inside the main DODAG but do not necessarily follow it. A Track is formed as one or more strictsource routedsource-routed paths between the Root that is the TrackIngress,ingress and the TrackEgressegress that is the last node. </dd> <dt> Profile55: </dt><dd> Profile 5Combinescombines Profile 4 with Profile 1 and enables loose source routing between theIngressingress and theEgressegress of the Track. As in Profile 1, Storing Mode P-Routes form the connections in the loose source route. </dd> <dt> Profile66: </dt><dd> Profile 6Combinescombines Profile 4 with Profile 2 andalsoenables loose source routing between theIngressingress and theEgressegress of the Track. </dd> <dt> Profile77: </dt><dd> Profile 7 implements Profile 5 in a main DODAG that is operated in Storing Mode as presented in <xref target='smmd'/>. As inProfileProfiles 1 and 2, the TrackID is the RPLInstanceID of the main DODAG. Longest match rules decide whether a packet is sent along the main DODAG or rerouted in atrack.Track. </dd> <dt> Profile88: </dt><dd> Profile 8 is offered in preparation of the RAWwork,work and for use cases where an arbitrary node in the network can afford the same code complexity as the RPL Root in a traditional deployment. It offers a full DODAG visibility to the TrackIngressingress, as specified in <xreftarget='bfd'/>target='bfd'/>, in a Non-Storing Mode main DODAG. </dd> <dt> Profile99: </dt><dd> Profile 9 combinesprofilesProfiles 7 and 8, operating the Track as a full DODAG within a Storing Mode main DODAG, using only the main DODAG RPLInstanceID as the TrackID. </dd> </dl></section><!-- Profiles --></section> <section anchor='back'><name>Backwards Compatibility</name> <t> This specification can operate in a mixed network where some nodes support it and some do not. There are restrictions, though. All nodes that need to process a P-DAOMUST<bcp14>MUST</bcp14> support this specification. As discussed in <xref target='mtsch'/>, how therootRoot knows the node capabilities and whether they support this specificationisare out of scope. </t> <t> This specification defines the 'D' flag in the RPL DODAG ConfigurationOptionoption (see <xref target='dflag'/>) to signal that the RPL nodes can request the creation of Tracks. The requester may not know whether the Track can effectively beconstructed, andconstructed or whether enough nodes along the preferred paths support this specification. Therefore, it makes sense to only set the 'D' flags in the DIO when the conditionsoffor success are in place, in particular when all the nodes that could be on the path oftracksthe Tracks are upgraded. </t></section><!-- Backwards Compatibility --></section> <section><name>Security Considerations</name> <t> It is worth noting thatwithper <xref target='RFC6550'/>, every node in the LLN is RPL-aware and can inject any RPL-based attack in the network. This specification uses messages that are already present in RPL <xref target='RFC6550'/> with optional secured versions. The same secured versions may be used with this specification, and whatever security is deployed for a given network also applies to the flows in this specification. </t> <t> The LLN nodes depend on the RPL Root andtheRANs for their operation. A trust model is necessary to ensure that the right devices are acting in these roles, avoiding sinkhole attacks (as is done in <xreftarget='RFC7416'/> section 7).target='RFC7416' section="7"/>). This trust model couldbebe, at aminimumminimum, based on aLayer-2 SecureLayer 2 secure joining andthe Link-Layerlink-layer security. This is a generic 6LoWPANrequirement,requirement; seeReq5.1Req-5.1 inAppendix B.5 of<xref section="B.5" target='RFC8505'/>. </t><t> In a general manner, the Security Considerations in <xreftarget='RFC6550'/>,target='RFC6550'/> and <xref target='RFC7416'/> apply to this specification as well.The Link-LayerIn particular, link-layer security is neededin particularto preventDenial-Of-Service attacksdenial-of-service attacks, whereby a rogue router creates a high churn in the RPL network by constantly injecting forged P-DAO messages and using up all the available storage in the attacked routers. </t><t> When applied to radio LLNs such as IEEEstdStd 802.15.4, the lower-layer frame protection can be leveraged with an appropriate join protocol. The 6TiSCHdefinedConstrained Join Protocol (CoJP) <xref target='RFC9031'/>withuses the RPL Rootactingas 6LBR. The join protocol could be extended to provide additional key material forpledgepledges to 6LBR communication when additional end-to-end security is desired beyond the hop-by-hop security from the lower layer. </t><t> With this specification, the RootMAY<bcp14>MAY</bcp14> generate P-DAO messages but other nodesMUST NOT<bcp14>MUST NOT</bcp14> do so.PDRP-DAO-REQ messagesMUST<bcp14>MUST</bcp14> be sent to the Root. This specification expects that the communication with the Root is authenticated but does not enforce which method is used. </t><t> 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. </t><t> This specification suggests some validation of the VIO to prevent basicloopsloops, i.e., by avoidingthata node that appears twice. But that is only a minimal protection. Arguably, an attacker that can inject P-DAOs can reroute any traffic and rapidly deplete critical resources such as the spectrum and battery in theLLN rapidly.LLN. </t> </section> <section anchor='IANAcon'><name>IANA Considerations</name> <section anchor="iana-d"><name>RPL DODAG Configuration Option Flag</name> <t> IANAis requested to assignhas assigned a flagfromin the "DODAG Configuration Option Flags for MOP 0..6"<xref target='RFC9010'/>registry <xref target='RFC9008'/> under theheading"Routing Protocol for Low Power and Lossy Networks (RPL)" registry group <xref target='IANA-RPL'/> as follows: </t> <table anchor="nexndopt"><name>New DODAG Configuration Option Flag</name> <thead><tr><td>Bit Number</td><td>Capability Description</td><td>Reference</td></tr><tr><th>Bit Number</th> <th>Capability Description</th><th>Reference</th></tr> </thead><tbody><tr><td>0 (suggested)</td><td>Projected<tr><td align="center">0</td> <td>Projected Routes Support(D)</td><td>THIS RFC</td></tr>(D)</td><td>RFC 9914</td></tr> </tbody> </table> <t> IANAis requested to add [THIS RFC]has added this RFC asaan additional reference for MOP 7 in theMode"Mode ofOperationOperation" registrythat is part ofunder theRouting"Routing Protocol for Low Power and Lossy Networks(RPL)(RPL)" registry group <xref target='IANA-RPL'/>. </t></section><!-- RPL DODAG Configuration Option Flag --></section> <section anchor='elec6lorh'><name>Elective 6LoWPAN Routing Header Type</name> <t> IANAis requested to updatehas updated the "Elective 6LoWPAN Routing Header Type" registrythat was created for<xref target='RFC8138'/> under theheading "Elective 6LoWPAN Routing Header Type" in the"IPv6 Low Power Personal Area Network Parameters" registry group <xref target='IANA-6LO'/>and assign the following value:as follows: </t> <table anchor="elec6lorhtbl"><name>New Elective 6LoWPAN Routing Header Type</name> <thead><tr><th align='center'>Value</th> <th align='left'>Description</th> <th align='left'>Reference</th></tr><tr><th>Value</th> <th>Description</th> <th>Reference</th></tr> </thead><tbody> <tr><tdalign='center'>8 (Suggested)</td> <td align='left'>P-RPI-6LoRH</td> <td align='left'>THIS RFC</td></tr>align="center">8</td> <td>P-RPI-6LoRH</td> <td>RFC 9914</td></tr> </tbody> </table></section><!-- Elective 6LoWPAN Routing Header Type --></section> <section anchor='crit6lorh'><name>Critical 6LoWPAN Routing Header Type</name> <t> IANAis requested to updatehas updated the "Critical 6LoWPAN Routing Header Type" registrythat was created for<xref target='RFC8138'/> under theheading "Critical 6LoWPAN Routing Header Type" in the"IPv6 Low Power Personal Area Network Parameters" registry group <xref target='IANA-6LO'/>and assign the following value:as follows: </t> <table anchor="crit6lorhtbl"><name>New Critical 6LoWPAN Routing Header Type</name> <thead><tr><th align='center'>Value</th> <th align='left'>Description</th> <th align='left'>Reference</th></tr><tr><th>Value</th> <th>Description</th> <th>Reference</th></tr> </thead><tbody> <tr><tdalign='center'>8 (Suggested)</td> <td align='left'>P-RPI-6LoRH</td> <td align='left'>THIS RFC</td></tr>align="center">8</td> <td>P-RPI-6LoRH</td> <td>RFC 9914</td></tr> </tbody> </table></section><!-- Critical 6LoWPAN Routing Header Type --></section> <section anchor='RPIIANA'><name>RegistryFor Thefor RPL Option Flags</name> <t> IANAis requested to create a registry forhas created the8-bit"RPL Option Flags"field,registry, for the 8-bit RPL Option flags field as detailed in <xref target='Rpifmt'/>, under theheading"Routing Protocol for Low Power and Lossy Networks (RPL)" registry group <xref target='IANA-RPL'/>. The bits are indexed from 0 (leftmost) to 7. Each bit is tracked with the following qualities: </t> <ul> <li>Bit number (counting from bit 0 as the most significant bit)</li> <li>IndicationWhen Set</li>when set</li> <li>Reference</li> </ul> <t>RegistrationThe registration procedure is"Standards Action"Standards Action <xref target='RFC8126'/>. The initial allocation is as indicated in <xref target='RPLoptFlagtbl'/>: </t> <table anchor="RPLoptFlagtbl"><name>InitialPDRP-DAO-REQ Flags</name> <thead><tr><th align='center'>Bit number</th> <th align='left'>Indication<tr><th>Bit Number</th> <th>Indication When Set</th><th align='left'>Reference</th></tr><th>Reference</th></tr> </thead><tbody> <tr><tdalign='center'>0</td> <td align='left'>Down 'O'</td> <td align='left'><xrefalign="center">0</td> <td>Down (O)</td> <td><xref target='RFC6553'/> </td></tr> <tr><tdalign='center'>1</td> <td align='left'>Rank-Erroralign="center">1</td> <td>Rank-Error (R)</td><td align='left'><xref<td><xref target='RFC6553'/> </td></tr> <tr><tdalign='center'>2</td> <td align='left'>Forwarding-Erroralign="center">2</td> <td>Forwarding-Error (F)</td><td align='left'><xref<td><xref target='RFC6553'/> </td></tr> <tr><tdalign='center'>3 (Suggested)</td> <td align='left'>Projected-Routealign="center">3</td> <td>Projected-Route (P)</td><td align='left'>THIS RFC</td></tr><td>RFC 9914</td></tr> <tr><tdalign='center'>4..255</td> <td align='left'>Unassigned</td> <td align='left'>align="center">4..255</td> <td>Unassigned</td> <td> </td></tr> </tbody> </table></section><!-- Registry For The RPL Option Flags --></section> <section anchor='RPLCtrlMsgReg'><name>RPL Control Codes</name> <t> IANAis requested to updatehas updated the "RPL Control Codes" registry under theheading"Routing Protocol for Low Power and Lossy Networks (RPL)" registry group <xref target='IANA-RPL'/> as indicated in <xref target="ianaRPLCtrlMsgtbl"/>:</t> <table anchor="ianaRPLCtrlMsgtbl"><name>New RPL Control Codes</name> <thead><tr><th align='center'>Code</th> <th align='left'>Description</th> <th align='left'>Reference</th></tr><tr><th>Code</th> <th>Description</th> <th>Reference</th></tr> </thead><tbody> <tr><tdalign='center'>0x09 (Suggested)</td> <td align='left'>Projectedalign="center">0x09</td> <td>Projected DAO Request(PDR)</td> <td align='left'>THIS RFC</td></tr>(P-DAO-REQ)</td> <td>RFC 9914</td></tr> <tr><tdalign='center'>0x0A (Suggested)</td> <td align='left'>PDR-ACK</td> <td align='left'>THIS RFC</td></tr>align="center">0x0A</td> <td>Projected DAO Request Acknowledgment (PDR-ACK)</td> <td>RFC 9914</td></tr> </tbody> </table> </section><!-- "RPL Control Codes" --><section anchor='RPLCtrlMsgOptionsReg'><name>RPL Control Message Options</name> <t> IANAis requested to updatehas updated the "RPL Control Message Options" registry under theheading"Routing Protocol for Low Power and Lossy Networks (RPL)" registry group <xref target='IANA-RPL'/> as indicated in <xref target="ianaRPLCtrlMsgopttbl"/>:</t> <table anchor="ianaRPLCtrlMsgopttbl"><name>RPL Control Message Options</name> <thead><tr><th align='center'>Value</th> <th align='left'>Meaning</th> <th align='left'>Reference</th></tr><tr><th>Value</th> <th>Meaning</th> <th>Reference</th></tr> </thead><tbody> <tr><tdalign='center'>0x0E (Suggested)</td> <td align='left'>Statefulalign="center">0x0F</td> <td>Stateful Storing Mode VIO (SM-VIO)</td><td align='left'>THIS RFC</td></tr><td>RFC 9914</td></tr> <tr><tdalign='center'>0x0F (Suggested)</td> <td align='left'>Source-Routedalign="center">0x10</td> <td>Source-Routed Non-Storing Mode VIO (NSM-VIO)</td><td align='left'>THIS RFC</td></tr><td>RFC 9914</td></tr> <tr><tdalign='center'>0x10 (Suggested)</td> <td align='left'>Siblingalign="center">0x11</td> <td>Sibling Informationoption</td> <td align='left'>THIS RFC</td></tr>Option (SIO)</td> <td>RFC 9914</td></tr> </tbody> </table> </section><!-- "RPL Control Message Options" --><section anchor='RPLPDRflagReg'><name>SubRegistry<name>Registry fortheProjected DAO Request Flags</name> <t> IANAis requested to create a registry forhas created the8-bit"Projected DAO Request(PDR)" field(P-DAO-REQ) Flags" registry under theheading"Routing Protocol for Low Power and Lossy Networks (RPL)" registry group <xref target='IANA-RPL'/>. The bits are indexed from 0 (leftmost) to 7. Each bit is tracked with the following qualities: </t> <ul> <li>Bit number (counting from bit 0 as the most significant bit)</li> <li>Capability description</li> <li>Reference</li> </ul> <t>RegistrationThe registration procedure is"Standards Action"Standards Action <xref target='RFC8126'/>. The initial allocation is as indicated in <xref target='RPLPDRflagRegtbl'/>: </t> <table anchor="RPLPDRflagRegtbl"><name>InitialPDRP-DAO-REQ Flags</name> <thead><tr><th align='center'>Bit number</th> <th align='left'>Capability description</th> <th align='left'>Reference</th></tr><tr><th>Bit Number</th> <th>Capability Description</th> <th>Reference</th></tr> </thead><tbody> <tr><tdalign='center'>0</td> <td align='left'>PDR-ACK requestalign="center">0</td> <td>PDR-ACK requested (K)</td><td align='left'>THIS RFC</td></tr><td>RFC 9914</td></tr> <tr><tdalign='center'>1</td> <td align='left'>Requestedalign="center">1</td> <td>Requested path should be redundant (R)</td><td align='left'>THIS RFC</td></tr><td>RFC 9914</td></tr> <tr><tdalign='center'>2..255</td> <td align='left'>Unassigned</td> <td align='left'></td></tr>align="center">2..255</td> <td>Unassigned</td> <td></td></tr> </tbody> </table> </section><!-- SubRegistry<section anchor='RPLPDRackflagReg'> <name>Registry fortheProjected DAO RequestFlags --> <section anchor='RPLPDRackflagReg'> <name>SubRegistry for the PDR-ACKAcknowledgment (PDR-ACK) Flags</name> <t> IANAis requested to create a registry forhas created the8-bit"PDR-ACK Flags"fieldregistry under theheading"Routing Protocol for Low Power and Lossy Networks (RPL)" registry group <xref target='IANA-RPL'/>. The bits are indexed from 0 (leftmost) to 7. Each bit is tracked with the following qualities: </t> <ul> <li>Bit number (counting from bit 0 as the most significant bit)</li> <li>Capability description</li> <li>Reference</li> </ul><t>Registration<t>The registration procedure is"Standards Action"Standards Action <xref target='RFC8126'/>.NoAt the time of publication of this document, no bitis currentlyhas been assignedfor the PDR-ACK Flags.in this registry. </t> </section><!-- SubRegistry for the PDR-ACK Flags --><section anchor='iana-stats-nonrej'> <name>Registry forthePDR-ACK Acceptance Status Values </name> <t> IANAis requested to create a registry forhas created the8-bit"PDR-ACK Acceptance Status Values" registry under theheading"Routing Protocol for Low Power and Lossy Networks (RPL)" registry group <xref target='IANA-RPL'/>. Each value is tracked with the following qualities: </t> <ul> <li>Value</li> <li>Meaning</li> <li>Reference</li> </ul> <t>theThe possible values are expressed as a 6-bit unsigned integer (0..63).theThe registration procedure is"Standards Action"Standards Action <xref target='RFC8126'/>.</t> <t>The(suggested)initial allocation is as indicated in <xref target='iana-ack-status'/>: </t> <table anchor='iana-ack-status'><name>AcceptancevaluesValues of the PDR-ACK Status</name> <thead><tr><td>Value</td><td>Meaning</td><td>Reference</td></tr><tr><th>Value</th> <th>Meaning</th><th>Reference</th></tr> </thead><tbody><tr><td>0</td><td>Unqualified Acceptance</td><td>THIS RFC</td></tr> <tr><td>1..63</td><td>Unassigned</td><td></td></tr><tr><td align="center">0</td> <td>Unqualified Acceptance</td><td>RFC 9914</td></tr> <tr><td align="center">1..63</td> <td>Unassigned</td><td></td></tr> </tbody> </table></section><!-- Registry for the PDR-ACK Acceptance Status Values --></section> <section anchor='iana-stats-rej'> <name>Registry forthePDR-ACK Rejection Status Values</name> <t> IANAis requested to create a registry forhas created the6-bit"PDR-ACK Rejection Status Values" registry under theheading"Routing Protocol for Low Power and Lossy Networks (RPL)" registry group <xref target='IANA-RPL'/>. Each value is tracked with the following qualities: </t> <ul> <li>Value</li> <li>Meaning</li> <li>Reference</li> </ul><t> the<t>The possible values are expressed as a 6-bit unsigned integer (0..63).theThe registration procedure is"Standards Action"Standards Action <xref target='RFC8126'/>.</t> <t>The(suggected)initial allocation is as indicated in <xref target='iana-nack-status'/>: </t> <tableanchor='iana-nack-status'><name>Rejection values of the PDR-ACK Status</name>anchor='iana-nack-status'><name>PDR-ACK Rejection Status Values</name> <thead><tr><td>Value</td><td>Meaning</td><td>Reference</td></tr><tr><th>Value</th><th>Meaning</th><th>Reference</th></tr> </thead><tbody><tr><td>0</td><td>Unqualified Rejection</td><td>THIS RFC</td></tr> <tr><td>1</td><td>Transient Failure</td><td>THIS RFC</td></tr> <tr><td>2..63</td><td>Unassigned</td><td></td></tr><tr><td align="center">0</td><td>Unqualified Rejection</td><td>RFC 9914</td></tr> <tr><td align="center">1</td><td>Transient Failure</td><td>RFC 9914</td></tr> <tr><td align="center">2..63</td><td>Unassigned</td><td></td></tr> </tbody> </table></section><!-- Registry for the PDR-ACK Rejection Status Values --></section> <section anchor='RPLVIOflagReg'><name>SubRegistry<name>Registry fortheVia Information Options Flags</name> <t> IANAis requested to create a registry forhas created the8-bit"Via Information Options (VIO) Flags"fieldregistry under theheading"Routing Protocol for Low Power and Lossy Networks (RPL)" registry group <xref target='IANA-RPL'/>. The bits are indexed from 0 (leftmost) to 7. Each bit is tracked with the following qualities: </t> <ul> <li>Bit number (counting from bit 0 as the most significant bit)</li> <li>Capability description</li> <li>Reference</li> </ul><t>Registration<t>The registration procedure is"Standards Action"Standards Action <xref target='RFC8126'/>.NoAt the time of publication of this document, no bitis currentlyhas been assignedfor the VIO Flags,in this registry (see more in <xreftarget="viof"/>.target="viof"/>). </t> </section><!-- SubRegistry for the Via Information Options Flags --><section anchor='RPLSIOflagReg'><name>SubRegistry<name>Registry fortheSibling Information Option Flags</name> <t> IANAis requested to create a registry forhas created the5-bit"Sibling Information Option (SIO) Flags"fieldregistry under theheading"Routing Protocol for Low Power and Lossy Networks (RPL)" registry group <xref target='IANA-RPL'/>. The bits are indexed from 0 (leftmost) to 4. Each bit is tracked with the following qualities: </t> <ul> <li>Bit number (counting from bit 0 as the most significant bit)</li> <li>Capability description</li> <li>Reference</li> </ul> <t>RegistrationThe registration procedure is"Standards Action"Standards Action <xref target='RFC8126'/>. The initial allocation is as indicated in <xreftarget='RPLSIORegtbl'/>,target='RPLSIORegtbl'/> (see more in <xreftarget="siof"/>:target="siof"/>): </t> <table anchor="RPLSIORegtbl"><name>Initial SIO Flags</name> <thead><tr><th align='center'>Bit number</th> <th align='left'>Capability description</th> <th align='left'>Reference</th></tr><tr><th>Bit Number</th> <th>Capability Description</th> <th>Reference</th></tr> </thead><tbody> <tr><tdalign='center'>0 (Suggested)</td> <td align='left'>"S"align="center">0</td> <td>'S' flag: Sibling in same DODAG asSelf</td> <td align='left'>THIS RFC</td></tr> <tr><td align='center'>1..4</td> <td align='left'>Unassigned</td> <td align='left'></td></tr>self</td> <td>RFC 9914</td></tr> <tr><td align="center">1..4</td> <td>Unassigned</td> <td></td></tr> </tbody> </table> </section><!-- SubRegistry for the Sibling Information Option Flags --><section anchor="iana-P-DAO"><name>Destination Advertisement Object Flag</name> <t> IANAis requested to updatehas updated the "Destination Advertisement Object (DAO) Flags"registryregistry, created inSection 20.11 of<xreftarget='RFC6550'/>target='RFC6550' section="20.11"/>, under theheading"Routing Protocol for Low Power and Lossy Networks (RPL)" registry group <xref target='IANA-RPL'/> as indicated in <xreftarget="iana-P-DAOtbl"/>,target="iana-P-DAOtbl"/> (see more in <xreftarget="extP-DAO"/>:target="extP-DAO"/>): </t> <table anchor="iana-P-DAOtbl"> <name>New Destination Advertisement Object (DAO) Flag</name> <thead><tr><td>Bit Number</td><td>Capability Description</td><td>Reference</td></tr><tr><th>Bit Number</th> <th>Capability Description</th><th>Reference</th></tr> </thead><tbody><tr><td>2 (Suggested)</td><td>Projected<tr><td align="center">2</td> <td>Projected DAO(P)</td><td>THIS RFC</td></tr>(P)</td><td>RFC 9914</td></tr> </tbody> </table> </section> <section anchor="iana-P-DAO-aCK"><name>Destination Advertisement Object Acknowledgment Flag</name> <t> IANAis requested to updatehas updated the "Destination Advertisement Object (DAO) Acknowledgment Flags"registryregistry, created inSection 20.12 of<xreftarget='RFC6550'/>target='RFC6550' section="20.12"/>, under theheading"Routing Protocol for Low Power and Lossy Networks (RPL)" registry group <xref target='IANA-RPL'/> as indicated in <xreftarget="iana-P-DAO-ACKtbl"/>,target="iana-P-DAO-ACKtbl"/> (see more in <xreftarget='extP-DAO-ACK'/>:target='extP-DAO-ACK'/>): </t> <table anchor="iana-P-DAO-ACKtbl"> <name>New Destination Advertisement Object Acknowledgment Flag</name> <thead><tr><td>Bit Number</td><td>Capability Description</td><td>Reference</td></tr><tr><th>Bit Number</th><th>Capability Description</th><th>Reference</th></tr> </thead><tbody><tr><td>1 (Suggested)</td><td>Projected DAO-ACK (P)</td><td>THIS RFC</td></tr><tr><td align="center">1</td><td>Projected DAO Acknowledgment (P)</td><td>RFC 9914</td></tr> </tbody> </table> </section> <section anchor='ICMPv6ErrPRoute'><name>New ICMPv6<name>ICMPv6 Error Code</name> <t>In somecasescases, RPL will return an ICMPv6 error message when a message cannot be forwarded along a P-Route.</t><t> This specification requires that a new code is allocated from<t>Per this specification, IANA has updated the'ICMPv6 "Code" Fields' heading of"Type 1 - Destination Unreachable" registry, in the "ICMPv6 'Code' Fields" registry, under the "Internet Control Message Protocol version 6 (ICMPv6) Parameters" registry group <xref target='IANA-ICMP'/>Registry for "Type 1 - Destination Unreachable", with a suggested code value of 9, to be confirmed by IANA to indicate an "Erroras indicated inP-Route".</t> </section> <!--"ICMPv6:<xref target="iana-ICMPv6_error_code"/>.</t> <table anchor="iana-ICMPv6_error_code"> <name>New ICMPv6 Error Code</name> <thead> <tr><th>Code</th> <th>Name</th><th>Reference</th></tr> </thead><tbody> <tr><td align="center">9</td> <td>Error ina P-Route" -->P-Route</td><td>RFC 9914</td></tr> </tbody> </table> </section> <section anchor='iana-stats-rpl-rej'><name>RPL Rejection StatusvaluesValues </name> <t> IANAis requested to updatehas updated the "RPL Rejection Status" registry under theheading"Routing Protocol for Low Power and Lossy Networks (RPL)" registry group <xref target='IANA-RPL'/> as indicated in <xref target="iana-nack-Status"/>: </t> <tableanchor='iana-nack-Status'><name>Rejection values of the RPLanchor='iana-nack-Status'><name>RPL Rejection Status Values </name> <thead><tr><td>Value</td><td>Meaning</td><td>Reference</td></tr><tr><th>Value</th><th>Meaning</th><th>Reference</th></tr> </thead><tbody><tr><td>2 (Suggested)</td><td>Out<tr><td align="center">2</td><td>Out ofResources</td><td>THIS RFC</td></tr> <tr><td>3 (Suggested)</td><td>Error in VIO</td><td>THIS RFC</td></tr> <tr><td>4 (Suggested)</td><td>Predecessor Unreachable</td><td>THIS RFCResources</td><td>RFC 9914</td></tr> <tr><td align="center">3</td><td>Error in VIO</td><td>RFC 9914</td></tr> <tr><td align="center">4</td><td>Predecessor Unreachable</td><td>RFC 9914 </td></tr><tr><td>5 (Suggested)</td><td>Unreachable Target</td><td>THIS RFC<tr><td align="center">5</td><td>Unreachable Target</td><td>RFC 9914 </td></tr><tr><td>6..63</td><td>Unassigned</td><td></td></tr><tr><td align="center">6..63</td><td>Unassigned</td><td></td></tr> </tbody> </table> </section><!-- Registry for RPL Rejection Status values --> </section> <!-- "IANA Considerations"--> <section><name>Acknowledgments</name> <t>The authors wish to acknowledge JP Vasseur, Remy Liubing, James Pylakutty, and Patrick Wetterwald for their contributions to the ideas developed here. Many thanks to Dominique Barthel and SVR Anand for their global contribution to 6TiSCH, RAW and this RFC, as well as text suggestions that were incorporated. Also special thanks to Remous-Aris Koutsiamanis, Li Zhao, Dominique Barthel, and Toerless Eckert for their in-depth reviews, with many excellent suggestions that improved the readability and well as the content of the specification. Many thanks to Remous-Aris Koutsiamanis for his review during WGLC and to Ines Robles for her shepherding and thorough review. Many thanks to Warren Kumari, Ran Chen, Murray Kucherawy, Roman Danyliw, Klaas Wierenga, Deb Cooley, Eric Vyncke, Gunter Van de Velde, Sue Hares and John Scudder for their comments and suggestions during the IETF last call and IESG review cycle. </t></section> </middle> <back> <displayreference target="RFC1122"to="INT-ARCHI"/>to="INT-ARCH"/> <displayreference target="RFC4944" to="6LoWPAN"/> <displayreference target="RFC6550" to="RPL"/> <displayreferencetarget="I-D.ietf-raw-architecture" to="RAW-ARCHI"/>target="I-D.kuehlewind-rswg-updates-tag" to="NEW-TAGS"/> <displayreference target="RFC9912" to="RAW-ARCH"/> <references> <name>References</name> <references> <name>Normative References</name> <xi:includehref='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml'/> <xi:include href='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4443.xml'/>href='https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml'/> <xi:includehref='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6282.xml'/>href='https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4443.xml'/> <xi:includehref='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6550.xml'/>href='https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6282.xml'/> <xi:includehref='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6553.xml'/>href='https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6550.xml'/> <xi:includehref='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6554.xml'/>href='https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6553.xml'/> <xi:includehref='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8126.xml'/>href='https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6554.xml'/> <xi:includehref='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8138.xml'/>href='https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8126.xml'/> <xi:includehref='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml'/>href='https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8138.xml'/> <xi:includehref='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.9008.xml'/>href='https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml'/> <xi:includehref='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.9030.xml'/>href='https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9008.xml'/> <xi:includehref='https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-raw-architecture.xml'/>href='https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9030.xml'/> <!-- [RAW-ARCHI] /[RFC9912] - in AUTH48 as of 2/9/2026 draft-ietf-raw-architecture-30 companion doc RFC 9912 --> <reference anchor="RFC9912" target="https://www.rfc-editor.org/info/rfc9912"> <front> <title>Reliable and Available Wireless (RAW) Architecture</title> <author initials="P." surname="Thubert" fullname="Pascal Thubert" role="editor"> <organization>Without Affiliation</organization> </author> <date month='February' year='2026'/> </front> <seriesInfo name="RFC" value="9912"/> <seriesInfo name="DOI" value="10.17487/RFC9912"/> </reference> </references><references> <name>Informative References</name> <xi:includehref='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.1122.xml'/>href='https://bib.ietf.org/public/rfc/bibxml/reference.RFC.1122.xml'/> <xi:includehref='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4655.xml'/>href='https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4655.xml'/> <xi:includehref='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4861.xml'/>href='https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4861.xml'/> <xi:includehref='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4944.xml'/>href='https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4944.xml'/> <xi:includehref='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5440.xml'/>href='https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5440.xml'/> <xi:includehref='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6997.xml'/>href='https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6997.xml'/> <xi:includehref='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7102.xml'/>href='https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7102.xml'/> <xi:includehref='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7416.xml'/>href='https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7416.xml'/> <xi:includehref='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8025.xml'/>href='https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8025.xml'/> <xi:includehref='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8402.xml'/>href='https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8402.xml'/> <xi:includehref='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8505.xml'/>href='https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8505.xml'/> <xi:includehref='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8754.xml'/>href='https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8754.xml'/> <xi:includehref='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8655.xml'/>href='https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8655.xml'/> <xi:includehref='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8930.xml'/>href='https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8930.xml'/> <xi:includehref='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8931.xml'/>href='https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8931.xml'/> <xi:includehref='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8994.xml'/>href='https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8994.xml'/> <xi:includehref='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.9010.xml'/>href='https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9010.xml'/> <xi:includehref='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.9031.xml'/>href='https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9031.xml'/> <xi:includehref='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.9035.xml'/>href='https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9035.xml'/> <xi:includehref='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.9450.xml'/>href='https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9450.xml'/> <!-- Note: Updated draft-irtf-panrg-path-properties-08 to RFC 9473 --> <!-- <xi:includehref='https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.kuehlewind-update-tag.xml'/>href='https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9473.xml'/>--> <!-- [I-D.kuehlewind-update-tag] draft-kuehlewind-update-tag-04 IESG State: Replaced by draft-kuehlewind-rswg-updates-tag --> <!--<xi:include href='https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.kuehlewind-update-tag.xml'/>--> <xi:includehref="http://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.irtf-panrg-path-properties.xml"/>href='https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.kuehlewind-rswg-updates-tag.xml'/> <reference anchor='IANA-6LO'target='https://www.iana.org/assignments/icmpv6-parameters/'>target='https://www.iana.org/assignments/_6lowpan-parameters'> <front> <title>IPv6 Low Power Personal Area NetworkParameters registry</title>Parameters</title> <author><organization>IETF</organization><organization>IANA</organization> </author> <date/> </front> </reference> <reference anchor='IANA-RPL' target='https://www.iana.org/assignments/rpl/'> <front> <title>Routing Protocol for Low Power and Lossy Networks(RPL) registry group</title>(RPL)</title> <author><organization>IETF</organization><organization>IANA</organization> </author> <date/> </front> </reference> <reference anchor='IANA-ICMP' target='https://www.iana.org/assignments/icmpv6-parameters/'> <front> <title>Internet Control Message Protocol version 6 (ICMPv6)Parameters registry group</title>Parameters</title> <author><organization>IETF</organization><organization>IANA</organization> </author> <date/> </front> </reference> </references> </references> <section numbered="false"> <name>Acknowledgments</name> <t>The authors wish to acknowledge <contact fullname="JP. Vasseur"/>, <contact fullname="Remy Liubing"/>, <contact fullname="James Pylakutty"/>, and <contact fullname="Patrick Wetterwald"/> for their contributions to the ideas developed here. Many thanks to <contact fullname="Dominique Barthel"/> and <contact fullname="S.V.R. Anand"/> for their global contribution to 6TiSCH, RAW, and this RFC, as well as text suggestions that were incorporated. Also, special thanks to <contact fullname="Remous-Aris Koutsiamanis"/>, <contact fullname="Li Zhao"/>, <contact fullname="Dominique Barthel"/>, and <contact fullname="Toerless Eckert"/> for their in-depth reviews, with many excellent suggestions that improved the readability and the content of the specification. Many thanks to <contact fullname="Remous-Aris Koutsiamanis"/> for his review during WG Last Call and to <contact fullname="Maria Ines Robles"/> for her thorough shepherd review. Many thanks to <contact fullname="Warren Kumari"/>, <contact fullname="Ran Chen"/>, <contact fullname="Murray Kucherawy"/>, <contact fullname="Roman Danyliw"/>, <contact fullname="Klaas Wierenga"/>, <contact fullname="Deb Cooley"/>, <contact fullname="Éric Vyncke"/>, <contact fullname="Gunter Van de Velde"/>, <contact fullname="Sue Hares"/>, and <contact fullname="John Scudder"/> for their comments and suggestions during the IETF Last Call and IESG review cycle. </t> </section> </back> <!-- [rfced] Abbreviations e) We note the following inconsistencies with the companion document. Please review and let us know if any changes to this document are necessary or if these variations are okay. "packet delivery ratio (PDR)" (in draft-ietf-raw-architecture-30) vs. "P-DAO Request (PDR)" (in this document) Pascal > I suggest we use PDAOReq and PDAOAck in this spec --> <!-- [rfced] Please review the "Inclusive Language" portion of the online Style Guide <https://www.rfc-editor.org/styleguide/part2/#inclusive_language> and let us know if any changes are needed. Updates of this nature typically result in more precise language, which is helpful for readers. For example, please consider whether the following should be updated: - native In addition, please consider whether "traditional" (2 instances) should be updated for clarity. While the NIST website <https://web.archive.org/web/20250214092458/https://www.nist.gov/ nist-research-library/nist-technical-series-publications-author-instructions#table1> indicates that this term is potentially biased, it is also ambiguous. "Tradition" is a subjective term, as it is not the same for everyone. Pascal > please leave as is. --> </rfc>