<?xml version="1.0" encoding="US-ASCII"?>
<!-- This template is for creating an Internet Draft using xml2rfc,
     which is available here: http://xml.resource.org. -->
<!DOCTYPE rfc    SYSTEM "rfc2629.dtd" [
]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>

<rfc category="std" ipr="trust200902" docName="draft-ietf-roll-dao-projection-02">

<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>

<?rfc sortrefs="yes"?>
<?rfc iprnotified="no" ?>
<?rfc authorship="yes"?>
<?rfc tocappendix="yes"?>
<?rfc strict="yes" ?>
<!-- give errors regarding ID-nits and DTD validation -->
<!-- control the table of contents (ToC) -->
<?rfc toc="yes"?>
<!-- generate a ToC -->
<?rfc tocdepth="4"?>
<!-- the number of levels of subsections in ToC. default: 3 -->
<!-- control references -->
<?rfc symrefs="yes"?>
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] -->
<?rfc sortrefs="yes" ?>
<!-- sort the reference entries alphabetically -->
<!-- control vertical white space
     (using these PIs as follows is recommended by the RFC Editor) -->
<?rfc compact="no" ?>

    <front>
        <title>Root initiated routing state in RPL</title>
        <author initials="P" surname="Thubert" fullname="Pascal Thubert" role="editor">
          <organization abbrev="Cisco">
             Cisco Systems
          </organization>
          <address>
            <postal>
             <street>Village d'Entreprises Green Side</street>
             <street>400, Avenue de Roumanille</street>
	     <street>Batiment T3</street>
             <city>Biot - Sophia Antipolis</city>
             <code>06410</code>
             <country>FRANCE</country>
            </postal>
            <phone>+33 4 97 23 26 34</phone>
            <email>pthubert@cisco.com</email>
	  </address>
        </author>
	<author fullname="James Pylakutty" initials="J.P." surname="Pylakutty">
          <organization abbrev="Cisco">
             Cisco Systems
          </organization>
          <address>
            <postal>
             <street>Cessna Business Park</street>
             <street>Kadubeesanahalli</street>
	     <street>Marathalli ORR</street>
             <city>Bangalore, Karnataka</city>
             <code>560087</code>
             <country>INDIA</country>
            </postal>
            <phone>+91 80 4426 4140</phone>
            <email>mundenma@cisco.com</email>
	  </address>
	</author>
        <date/>

	<area>Routing</area>

	<workgroup>ROLL</workgroup>

        <abstract>
	  <t>	
		This document proposes a  protocol extension to RPL that enables to
        install a limited amount of centrally-computed routes in a RPL graph,
        enabling loose source routing down a non-storing mode DODAG, or
        transversal routes inside the DODAG. 
        As opposed to the classical route injection in RPL that are injected
        by the end devices, this draft enables the root of the DODAG to 
        projects the routes that are needed on the nodes where they should be
        installed.
	  </t>
	</abstract>
    </front>

    <middle>

	<!-- **************************************************************** -->
	<!-- **************************************************************** -->
	<!-- **************************************************************** -->
	<!-- **************************************************************** -->
	<section anchor='introduction' title="Introduction">

	   <t> The <xref target="RFC6550">
	 "Routing Protocol for Low Power and Lossy Networks"</xref> (LLN)(RPL) 
     is a generic Distance Vector protocol that is well suited for application
     in a variety of low energy Internet of Things (IoT) networks.
      
     RPL forms Destination Oriented Directed Acyclic Graphs (DODAGs) in which
     the root often acts as the Border Router to connect the RPL domain to the
     Internet. The root is responsible to select the RPL Instance that is used
     to forward a packet coming from the Internet into the RPL domain and set
     the related RPL information in the packets.
	  </t>
	  
 
      
     <t>
      The  <xref target="I-D.ietf-6tisch-architecture"> 
      6TiSCH architecture </xref> leverages RPL for its routing operation and
      considers the <xref target="I-D.ietf-detnet-architecture">
      Deterministic Networking Architecture</xref> as one possible model
      whereby the device resources and capabilities are exposed to an external
      controller which installs routing states into the network based on some
      objective functions that reside in that external entity.
	  </t>
     <t>
     Based on heuristics of usage, path length, and knowledge of device capacity
     and available resources such as battery levels and reservable buffers, a
     Path Computation Element (<xref target="PCE"/>) with a global visibility
     on the system could install additional P2P routes that are more optimized
     for the current needs as expressed by the objective function.
	  </t>
     <t>
     This draft enables a RPL root, with optionally the assistance of a PCE, to
     install and maintain additional storing and non-storing mode routes within
     the RPL domain, along a selected set of nodes and for a selected duration,
     thus providing routes more suitable than those obtained with the 
     distributed operation of RPL.
     Those routes may be installed in either storing and non-storing modes RPL
     instances, resulting in potentially hybrid situations where the mode of the
     projected routes is different from that of the other routes in the instance.
	  </t>
      
    </section>

	<!-- **************************************************************** -->
	<!-- **************************************************************** -->
	<!-- **************************************************************** -->
	<!-- **************************************************************** -->

        <section title="Terminology">
            <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL",
            "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY",
            and "OPTIONAL" in this document are to be interpreted as
            described in <xref target="RFC2119"/>.</t>

      <t>The Terminology used in this document is consistent with and
      incorporates that described in "Terminology in Low power And Lossy
      Networks"<xref target="RFC7102"></xref>
	  and <xref target="RFC6550"/>.</t>
        </section>
	
    <section anchor="rplccmo" title="New RPL Control Message Options">
	<t>
	Section 6.7 of RPL <xref target="RFC6550"/> specifies Control Message Options (CMO)
   to be placed in RPL messages such as the Destination Advertisement Object
   (DAO) message. The RPL Target Option
   and the Transit Information Option (TIO) are such options; the former
   indicates a node to be reached and the latter specifies
   a parent that can be used to reach that node. Options may be factorized;
   one or more contiguous TIOs apply to the one or more contiguous Target
   options that immediately precede the TIOs in the RPL message.
   </t>
   <t>This specification introduces a new Control Message Option, the Via
    Information option (VIO). Like the TIO, the VIO MUST be preceded by
    one or more RPL Target options to which it applies. Unlike the TIO, the
    VIO are not factorized: multiple contiguous Via options indicate an ordered
    sequence of routers to reach the target(s), presented in the order of the
    packet stream, source to destination, and in which a routing state must
    be installed. </t>
   <t>
    The Via Information option MUST contain at least one Via Address. 
    </t>

    <section anchor="viaopt" title="Via Information Option">

    <t>The Via Information option MAY be present in DAO messages, and
   its format is as follows:
    </t> 
<figure anchor="viao" title="Via Information option format">
              <artwork>
     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 = 0x0A | Option Length | Path Sequence | Path Lifetime |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                                                               |
    +                                                               +
    .                                                               .
    .                     Via Address 1                             .
    .                                                               .
    +                                                               +
    |                                                               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                                                               |
    .                              ....                             .
    |                                                               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                                                               |
    +                                                               +
    .                                                               .
    .                     Via Address n                             .
    .                                                               .
    +                                                               +
    |                                                               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

 </artwork>
</figure>
	
          <t><list hangIndent="6" style="hanging">
              <t hangText="Option Type:">0x0A (to be confirmed by IANA)</t>

              <t hangText="Option Length:">In bytes; variable, depending on the number
              of Via Addresses.</t>

              <t hangText="Path Sequence:">8-bit unsigned integer. When a RPL
              Target option is issued by the root of the DODAG
              (i.e. in a DAO message), that root sets the Path Sequence and
              increments the Path Sequence each time it issues a RPL Target
              option with updated information. The indicated sequence
              deprecates any state for a given Target that was learned from a
              previous sequence and adds to any state that was learned for
              that sequence.</t>

              <t hangText="Path Lifetime:">8-bit unsigned integer. The length
              of time in Lifetime Units (obtained from the Configuration
              option) that the prefix is valid for route determination. The
              period starts when a new Path Sequence is seen. A value of all
              one bits (0xFF) represents infinity. A value of all zero bits
              (0x00) indicates a loss of reachability. A DAO message that
              contains a Via Information option with a Path Lifetime of
              0x00 for a Target is referred as a No-Path (for that Target) in
              this document.</t>

              <t hangText="Via Address:">16 bytes. IPv6 Address of the
              next hop towards the destination(s) indicated in the target option
              that immediately precede the VIO. TBD: See how the /64 prefix can be elided if
              it is the same as that of (all of) the target(s). In that case,
              the Next-Hop Address could be expressed as the 8-bytes suffix only,
              otherwise it is expressed as 16 bytes, at least in storing mode.</t>
            </list></t>
	</section>
    </section>
    
    
    <section anchor="pdao" title="Projected DAO">
    
    <t>
    This draft adds a capability to RPL whereby the root projects a route through
    an extended DAO message called a Projected-DAO (P-DAO) to an arbitrary router
    down the DODAG, indicating a next hop or a sequence of routers via which
    a certain destination indicated in the Target Information option may be reached. 
     </t> <t>
    A P-DAO message MUST contain at least a Target Information option and at 
    least one VIA Information option following it.
     </t> <t>
    Like a classical DAO message, a P-DAO is processed only if it is "new"
    per section 9.2.2. "Generation of DAO Messages" of the <xref target="RFC6550">
    RPL specification</xref>; this is determined using the Path Sequence
    information from the VIO as opposed to a TIO. Also, a Path Lifetime of 0 in
    a VIO indicates that a route is to be removed.
     </t> <t>
    There are two kinds of P-DAO, the storing mode and the non-storing mode ones. 
    <list> 
     <t>
    The non-storing mode P-DAO discussed in section <xref target="nspdao"/> 
    has a single VIO with one or more Via Addresses in it, the list of Via
    Addresses indicating the source-routed path to the target to be installed
    in the router that receives the message, which replies to the root directly
    with a DAO-ACK message.
     </t>
    <t>
    The storing mode P-DAO discussed in section <xref target="spdao"/> has at
    least two Via Information options with one Via Address each, for the ingress
    and the egress of the path, and more if there are intermediate routers.
    The Via Addresses indicate the routers in which the routing state to the
    target have to be installed via the next Via Address in the sequence of VIO.
    In normal operations, the P-DAO is propagated along the chain of Via Routers 
    from the egress router of the path till the ingress one, which confirms the
    installation to the root with a DAO-ACK message. 
    Note that the root may be the ingress and it may be the egress of the
    path, that it can also be neither but it cannot be both.
     </t> 
     </list>
     
     </t><t>
     The root is expected to use these mechanisms optimally and
     with required parsimony to limit the state installed in the devices
     to fit within their resources, but how the
     root figures the amount of resources that is available in each device
     is out of scope for this document.
    </t> 
    <t>
     In particular, the draft expects that the root has enough information about
     the capability
     for each node to store a number of routes, which can be discovered for
     instance using a Network Management System (NMS) and/or the RPL routing
     extensions specified in
      <xref target="RFC6551">"Routing for Path Calculation in LLNs"</xref>.
    </t>  
    <t>A route that is installed by a P-DAO is not necessarily installed along
    the DODAG, though how the root and the optional PCE obtain the additional
    topological information to compute other routes is out of scope for this
    document
    </t>
 
    
    <section anchor="nspdao"  title="Non-storing Mode Projected DAO">
    
      <t> As illustrated in <xref target="nsdf"/>, the non-storing mode P-DAO
      enables the root to install a source-routed path towards a target in any
      particular router; with this path information the router can add a source
      routed header reflecting the path to any packet for which the current
      destination either is the said target or can be reached via the target,
      for instance a loose source routed packet for which the next loose hop is 
      the target, or a packet for which the router has a routing state to the
      final destination via the target. 
      </t>
          <figure anchor="nsdf" title="Projecting a Non-Storing route">
            <artwork>
           ------+---------                           
                 |          Internet               
                 |                                     
              +-----+                                  
              |     | Border Router        
              |     |  (RPL Root)           
              +-----+                   |  P  ^            |
                 |                      | DAO | ACK        | Loose
           o    o   o    o     router   V     |            | Source
       o o   o  o   o  o  o      o  o            | P-DAO   . Route
      o  o o  o o    o   o   o  o  o             | Source  . Path
      o   o    o  o     o  o    o  o  o          | Route   . From 
     o  o   o  o   o         o   o o             | Path    . Root
        o  o  o  o             o    target       V         . To
       o       o               o    o                      | Desti-
     o          o             o     o                      | nation
                                   destination             V
     
                       LLN
                       </artwork>
          </figure>
          
        <t>  
      A router that receives a non-storing P-DAO installs a source routed path
      towards each of the consecutive targets via a source route path indicated
      in the following VIO.   </t>
    <t>
      When forwarding a packet to a destination for which the router determines
      that routing happens via the target, the router inserts the source routing
      header in the packet to reach the target. </t>
    <t>
      In order to do so, the router encapsulates the packet with an IP in IP
      header and a non-storing mode source routing header (SRH)
      <xref target="RFC6554"/>.</t>
    <t> In the uncompressed form the source of the
      packet would be self, the destination would be the first Via Address in the
      VIO, and the SRH would contain the list of the remaining Via Addresses and
      then the target.</t>
    <t>
      In practice, the router will normally use the <xref target="RFC8025">
      "IPv6 over Low-Power Wireless Personal Area Network (6LoWPAN) Paging
      Dispatch"</xref> to compress the RPL artifacts as indicated in the
      <xref target="RFC8138">"6LoWPAN Routing Header"
      </xref> specification. In that case, the router indicates self as
      encapsulator in an IP-in-IP 6LoRH Header, and places the list of Via
      Addresses in the order of the VIO and then the target in the SRH 6LoRH
      Header.
      </t>
      </section>
      
      
      
    <section anchor="spdao"  title="Storing-Mode Projected DAO">

    
      <t> As illustrated in <xref target="sdf"/>, the storing mode P-DAO enables
      the root to install a routing state towards a target in the routers along
      a segment between an ingress and an egress router; 
      this enables the routers to forward along that segment any packet for
      which the next loose hop is the said target, for instance a loose source
      routed packet for which the next loose hop is the target, or a packet for
      which the router has a routing state to the final destination via the target. 
      </t>
          <figure anchor="sdf" title="Projecting a route">
            <artwork>
           ------+---------                           
                 |          Internet               
                 |                                     
              +-----+                                  
              |     | Border Router        
              |     |  (RPL Root)           
              +-----+                      |     ^                   |
                 |                         | DAO | ACK               |
           o    o   o    o                 |     |                   |
       o o   o  o   o  o  o o   o          |  ^       | Projected    . 
      o  o o  o o    o   o   o  o  o       |  | DAO   | Route        .
      o   o    o  o     o  o    o  o  o    | ^        |              .
     o  o   o  o   o         o   o o       v | DAO    v              .
     o          o   LLN   o   o     o                                |
         o o   o        o     o              Loose Source Route Path |
      o       o      o    o                 From Root To Destination v 

      </artwork>
          </figure>
          

    <t>      
     Based on available topological, usage and capabilities node information,
     the root or an associated PCE computes which segment should be optimized
     and which relevant state should be installed in which nodes. The algorithm
     is out of scope but it is envisaged that the root could compute the ratio
     between the optimal path (existing path not traversing the root, and the
     current path), the application service level agreement (SLA) for specific
     flows that could benefit from shorter paths, the energy wasted in the
     network, local congestion on various links that would benefit from having
     flows routed along alternate paths.
    </t><t>
     In order to install the relevant routing state along the segment between an
     ingress and an egress routers,
     the root sends a unicast P-DAO message to the egress router of the routing 
     segment that must be installed. The P-DAO message contains the ordered list
     of hops along the segment as a direct sequence of Via Information options
     that are preceded by one or more RPL Target options to which they relate.
     Each Via Information option contains a Path Lifetime for which the state is
     to be maintained.
     </t><t> 
     The root sends the P-DAO directly to the egress node of the segment, which
     In that P-DAO, the destination IP address matches the Via Address in the
     last VIO. This is how the egress recognizes its role. In a similar fashion,
     the ingress node recognizes its role as it matches Via Address in the first
     VIO.
     </t><t> 
    
     The egress node of the segment is the only node in the path that does not
     install a route in response to the P-DAO; it is expected to be already able
     to route to the target(s) on its own. It may either be the target, or may 
     have some existing information to reach the target(s), such as a connected
     route or an already installed projected route. 
    <!-- If it cannot reach the target, then the egress node may lookup the address on the relevant interfaces. -->
     If one of the targets cannot be located, the node MUST answer to the root
     with a negative DAO-ACK listing the target(s) that could not be located
     (suggested status 10 to be confirmed by IANA).
    </t><t>
     If the egress node can reach all the targets, then it forwards the P-DAO
     with unchanged content to its loose predecessor in the segment as indicated
     in the list of Via Information options, and recursively the message is propagated 
     unchanged along the sequence of routers indicated in the P-DAO, but in the
     reverse order, from egress to ingress.
     </t><t>
     
     The address of the predecessor to be used as destination of the propagated
     DAO message is found in the Via Information option the precedes the one 
     that contain the address of the propagating node, which is used as source 
     of the packet.
     
    </t><t>
     Upon receiving a propagated DAO, an intermediate router as well as the
     ingress router install a route towards the DAO target(s) via its
     successor in the P-DAO; the router locates the VIO that contains its
     address, and uses as next hop the address found in the Via Address field
     in the following VIO. The router MAY install additional routes towards the
     addresses that are located in VIOs that are after the next one, if any, but
     in case of a conflict or a lack of resource, a route to a target installed 
     by the root has precedence.
     
    </t><t>
     The process recurses till the P-DAO is propagated to ingress router of
     the segment, which answers with a DAO-ACK to the root.
     </t>   
     <t>Also, the path indicated in a P-DAO may be loose, in which case the
     reachability to the next hop has to be asserted. Each router along the
     path indicated in a P-DAO is expected to be able to reach its successor,
     either with a connected route (direct neighbor), or by routing, for instance
     following a route installed previously by a DAO or a P-DAO message.
     If that route is not connected then a recursive lookup may take place at
     packet forwarding time to find the next hop to reach the target(s).
     If it does not and cannot reach the next router in the P-DAO,
     the router MUST answer to the root with a negative DAO-ACK 
     indicating the successor that is unreachable
     (suggested status 11 to be confirmed by IANA). 
    </t>
    <t>
     A Path Lifetime of 0 in a Via Information option is used to clean up the
     state. The P-DAO is forwarded as described above, but the DAO
     is interpreted as a No-Path DAO and results in cleaning up existing state 
     as opposed to refreshing an existing one or installing a new one. 
    </t>
      </section>
      
      </section>
	<section  title="Applications">
    <section title="Loose Source Routing in Non-storing Mode">
     
	  <t>A RPL implementation operating in a very constrained LLN typically uses
      the Non-Storing Mode of Operation as represented in <xref target="nost"/>.
      In that mode, a RPL node indicates a
      parent-child relationship to the root, using a Destination Advertisement
      Object (DAO) that is unicast from the node directly to the root,
      and the root typically builds a source routed path to a destination down
      the DODAG by recursively concatenating this information. 
      </t> 
   
          <figure  anchor="nost" title="RPL non-storing mode of operation ">
            <artwork>
           ------+---------                           
                 |          Internet               
                 |                                     
              +-----+                                  
              |     | Border Router        
              |     |  (RPL Root)          
              +-----+                      ^     |        |
                 |                         | DAO | ACK    | 
           o    o   o    o                 |     |        | Strict
       o o   o  o   o  o  o o   o          |     |        | Source
      o  o o  o o    o   o   o  o  o       |     |        | Route
      o   o    o  o     o  o    o  o  o    |     |        |
     o  o   o  o   o         o   o o       |     v        v
     o          o             o     o
                       LLN
                       </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 apply a source routing information to reach the destination
      if the destination is also in the DODAG.
      Similarly, a packet coming from the outside of the domain for a destination
      that is expected to be in a RPL domain reaches the root.
    </t>
    <t>
     It results that the root, or then some associated centralized computation
     engine such as a PCE, can determine the amount of packets that reach a
     destination in the
     RPL domain, and thus the amount of energy and bandwidth that is wasted for
     transmission, between itself and the destination, as well as the risk of
     fragmentation, any potential delays because of a paths longer than
     necessary (shorter paths exist that would not traverse the root).
    </t>
     <t>
     As a network gets deep, the size of the source routing header that the
      root must add to all the downward packets becomes an issue for nodes that
      are many hops away. In some use cases, a RPL network forms long lines and
      a limited amount of well-targeted routing state would allow to make the
      source routing operation loose as opposed to strict, and save packet size.
      Limiting the packet size is directly beneficial to the energy budget, but,
      mostly, it reduces the chances of frame loss and/or packet fragmentation,
      which is highly detrimental to the LLN operation. Because the capability
      to store a routing state in every node is limited, the decision of which
      route is installed where can only be optimized with a global knowledge of
      the system, a knowledge that the root or an associated PCE may possess by
      means that are outside of the scope of this specification.
      </t>
      
      <t> 
      This specification enables to store source-routed or storing mode state in
      intermediate routers, which enables to limit the excursion of the source
      route headers in deep networks.
      Once a P-DAO exchange has taken place for a given target, if the root
      operates in non storing mode, then it may elide the sequence of routers
      that is installed in the network from its source route headers to 
      destination that are reachable via that target, and the source route
      headers effectively become loose.
      </t>
      
      </section>
    <section title="Transversal Routes in storing and non-storing modes">
    
      <t>
      RPL is optimized for Point-to-Multipoint
      (P2MP), root to leaves and Multipoint-to-Point (MP2P) leaves to root operations,
      whereby routes are always installed along the RPL DODAG. Transversal
      Peer to Peer (P2P) routes in a RPL network will generally suffer from some
      stretch since routing between 2 peers always happens via a common parent,
      as illustrated in <xref target="stretch"/>:
        <list style="symbols">
        <t> in non-storing mode, all packets
     routed within the DODAG flow all the way up to the root of the DODAG. If
     the destination is in the same DODAG, the root must encapsulate the packet
     to place a Routing Header 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.
        </t>
        <t>In storing mode, unless the destination is a child of the source,
     the packets will follow the default route up the DODAG as well.
     If the destination is in the same DODAG, they will eventually reach a
     common parent that has a route to the destination; at worse, the common
     parent may also be the root. From that common parent, the packet will
     follow a path down the DODAG that is optimized for the Objective Function
     that was used to build the DODAG.</t>
        </list>
     </t>
     
     
       <figure  anchor="stretch" 
        title="Routing Stretch between S and D via common parent X">
            <artwork>
                   ------+---------
                    |          Internet
                    |
                 +-----+
                 |     | Border Router
                 |     |  (RPL Root)
                 +-----+                     
                    X                    
              ^    v   o    o                
          ^ o   o  v   o  o  o o   o          
         ^  o o  o v    o   o   o  o  o      
         ^   o    o  v     o  o    o  o  o   
        S  o   o  o   D         o   o o       
        o          o             o     o
                          LLN
       </artwork>
          </figure>

          
          <!--
      In NSM, all peer-to-peer routes travel all the way to the root, which adds
      a source routing header and forwards the packet down to the destination,
      resulting in the longest stretch and overload of the radio bandwidth near
      the root. A controller, for instance collocated with the RPL root, with
      enough topological awareness of the connectivity between nodes, would be
      able to compute more direct routes, avoiding the vicinity of the root
      whenever possible.
      </t>
      
      	  <t>With the initial specifications of RPL  <xref target="RFC6550"/>, the
     P2P path from a source to a destination is often stretched
          
          -->
     <t>
     It results that it is often beneficial to enable transversal P2P routes,
     either if the RPL route presents a stretch from shortest path, or if the
     new route is engineered with a different objective. 
     For that reason, earlier work at the IETF introduced the
     <xref target="RFC6997">"Reactive Discovery of Point-to-Point Routes in
     Low Power and Lossy Networks"</xref>, which specifies a distributed method for
     establishing optimized P2P routes. This draft proposes an alternate based
     on a centralized route computation.
     </t> 
    
        <figure  anchor="opti2" title="Projected Transversal Route">
            <artwork>
              ------+---------
                    |          Internet
                    |
                 +-----+
                 |     | Border Router
                 |     |  (RPL Root)
                 +-----+                     
                    |                    
              o    o   o    o                
          o o   o  o   o  o  o o   o          
         o  o o  o o    o   o   o  o  o      
         o   o    o  o     o  o    o  o  o   
        S>>A>>>B>>C>>>D         o   o o       
        o          o             o     o
                          LLN
       </artwork>
          </figure>
            <t> 
      This specification enables to store source-routed or storing mode state in
      intermediate routers, which enables to limit the stretch of a P2P route
      and maintain the characteristics within a given SLA. An example of service
      using this mechanism oculd be a control loop that would be installed in a
      network that uses classical RPL for asynchronous data collection. In that
      case, the P2P path may be installed in a different RPL Instance, with a
      different objective function.
      </t>
      </section>
      </section>
      
	
           
     
        <section title="RPL Instances">
     <t>
     It must be noted that RPL has a concept of instance but does not have a
     concept of an administrative distance, which exists in certain proprietary
     implementations to sort out conflicts between multiple sources of routing
     information. This draft conforms the instance model as follows:
     <list style="symbols">
     <t>
     If the PCE needs to influence a particular instance to add better routes
     in conformance with the routing objectives in that instance, it may do so.
     When the PCE modifies an existing instance then the added routes
     must not create a loop in that instance. This is achieved by always
     preferring a route obtained from the PCE over a route that is learned via
     RPL.</t>
     <t>
     If the PCE installs a more specific (say, Traffic Engineered) route between 
     a particular pair of nodes then it SHOULD use a Local Instance from the
     ingress node of that path. A packet associated with that instance will
     be routed along that path and MUST NOT be placed over a Global Instance
     again. A packet that is placed on a Global Instance may be injected in the
     Local Instance based on node policy and the Local Instance paramenters.
     <!-- TODO: add config parm to the local instance -->
     </t>
     </list>
     In all cases, the path is indicated by a new Via Information option, and
     the flow is similar to the flow used to obtain loose source routing.
   </t> 
    </section>
    
    
    <section title="Security Considerations">

	<t>This draft uses messages that are already present in RPL
     <xref target="RFC6550"/> with optional secured versions. The same secured
     versions may be used with this draft, and whatever security is deployed for
     a given network also applies to the flows in this draft.
   
	</t>
   </section>
   <section anchor="RPLCtrlMsgOptionsReg" title="IANA Considerations">

    <t>This document extends the IANA registry created by RFC 6550 for RPL
    Control Codes as follows:</t>

        <texttable title="RPL Control Codes">
          <ttcol align="center">Code</ttcol>

          <ttcol align="left">Description</ttcol>

          <ttcol align="left">Reference</ttcol>


          <c>0x0A</c>

          <c>Via</c>

          <c>This document</c>
        </texttable>
    


    <t>This document is updating the registry created by RFC 6550 for the RPL
        3-bit Mode of Operation (MOP) as follows:
        </t>

        <texttable title="DIO Mode of operation">
          <ttcol align="center">MOP value</ttcol>

          <ttcol align="left">Description</ttcol>

          <ttcol align="left">Reference</ttcol>

          <c>5</c>

          <c>Non-Storing mode of operation with Projected routes</c>

          <c>This document</c>

          <c>6</c>

          <c>Storing mode of operation with Projected routes</c>

          <c>This document</c>

        </texttable>
   </section>


<section title="Acknowledgments">
<t>The authors wish to acknowledge JP Vasseur and Patrick Wetterwald for their
 contributions to the ideas developed here.</t>
</section>

    </middle>

    <back>
    <references title='Normative References'>
	  <?rfc include="reference.RFC.2119"?>
	  <?rfc include="reference.RFC.6550"?>
	  <?rfc include="reference.RFC.6551"?>
	  <?rfc include="reference.RFC.6554"?>
	  <?rfc include="reference.RFC.8025"?>
	  <?rfc include="reference.RFC.8138"?>

     
    </references>
    <references title='Informative References'>

	  <?rfc include="reference.RFC.7102"?>
	   <?rfc include="reference.RFC.6997"?>
      <?rfc include='reference.I-D.ietf-6tisch-architecture'?>
      <?rfc include='reference.I-D.ietf-detnet-architecture'?>
      <reference anchor="PCE"
          target="https://datatracker.ietf.org/doc/charter-ietf-pce/">
         <front>
            <title>Path Computation Element</title>
            <author>
               <organization>IETF</organization>
            </author>
            <date></date>
         </front>
      </reference>

    </references>
    
    
    <section  title="Examples">
    
        <section title="Using storing mode P-DAO in non-storing mode MOP">
<t>
    In non-storing mode, the DAG root maintains the knowledge of the whole DODAG 
    topology, so when both the source and the destination
    of a packet are in the DODAG, the root can determine the common
    parent that would have been used in storing mode, and thus the list of nodes
    in the path between the common parent and the destination. For instance in
    the diagram shown in <xref target="exmp"/>, if the source is node 41
    and the destination is node 52, then the common parent is node 22.
    </t>
       <figure anchor="exmp" title="Example DODAG forming a logical tree topology">
            <artwork>
           ------+---------                           
                 |          Internet               
                 |                                     
              +-----+                                  
              |     | Border Router   
              |     |  (RPL Root)     
              +-----+                 
               | \  \____                
              /   \       \
            o 11   o 12     o  13   
           /       |       /  \
         o 22      o 23   o 24  o 25
        /  \       | \      \
      o 31   o 32  o   o     o 35 
     /      /      |    \    |    \
    o 41   o 42    o     o   o 45   o 46   
    |      |       |     |    \     |
    o 51   o 52    o 53  o     o 55 o 56
    
                       LLN
       </artwork>
          </figure>
    
    
    
    <t>
     With this draft, the root can install a storing mode routing states along a
     segment that is either from itself to the destination, or from one or more
     common parents for a particular source/destination pair towards that
     destination (in this particular
     example, this would be the segment made of nodes 22, 32, 42).
    </t><!--t>
     If the predecessor can route to the successor node, then it installs a
     route to the targets via the successor. If that route is not connected then
     a recursive lookup will take place to reach the target(s). From there, 
     the node strips the last Via Information option and either answers to the
     root with a positive DAO-ACK that contains the list of targets that could
     be routed to, or propagates the DAO to its own predecessor.
    </t-->
    <t> In the example below, say that there is a lot of traffic to nodes 55 and
    56 and the root decides to reduce the size of routing headers to those
    destinations. The root can first send a DAO to node 45 indicating target 55
    and a Via segment (35, 45), as well as another DAO to node 46 indicating 
    target 56 and a Via segment (35, 46). This will save one entry in the 
    routing header on both sides. The root may then send a DAO to node 35 
    indicating targets 55 and 56 a Via segment (13, 24, 35) to fully optimize
    that path.</t>
    <t>
    Alternatively, the root may send a DAO to node 45 indicating target 55
    and a Via segment (13, 24, 35, 45) and then a DAO to node 46 indicating
    target 56 and a Via segment (13, 24, 35, 46), indicating the same DAO 
    Sequence.
    </t>
    <!--
    <t>
    It may happen that the nodes along the path do not have enough resources
    to store an additional route to the destination (node 46). As the root has a
    complete knowledge of the DAG, some nodes may have more compute and storing
    resources so that they can be elected as specific nodes (it is the case of
    node 35 for instance). Let's take the case where node
    45 send packets to node 56. node 46 is unable to store any route.

    </t><t>
    In this case the root send the new DAO message to node 35 (well known node
    for its compute and storing capabilities) with the routing header to node
    56 (segment 35 - 46).

    </t><t>
    When 35 receives from its child a packet to node 56, it adds the routing
    header to node 56 in the packet header. In this case nothing changes for
    the node 46 acting as non storing mode.

    </t><t> 
      The life time of the DAO may be dynamically changed by the root. 
      Once the routing state expires, and packets are router back to their 
      original mode (through the root), the root may accordingly decide to 
      refresh the state if the conditions that triggered the decision to install
      the state still holds, after potentially adjusting the life time.
    </t>
    -->

          
    </section> 

    
    <section title="Projecting a storing-mode transversal route">
    
          
   <t>In this example, say that a PCE determines that a path must be installed 
   between node S and node D via routers A, B and C, in order to serve the needs
   of a particular application.
   </t><t>
   The root sends a P-DAO with a target option indicating the destination D and
   a sequence Via Information option, one for S, which is the ingress router of
   the segment, one for A and then for B, which are an intermediate routers, and
   one for C, which is the egress router. 
   </t>   
       <figure  anchor="pdao2" title="Projected DAO from root">
            <artwork>
              ------+---------
                    |          Internet
                    |
                 +-----+
                 |     | Border Router
                 |     |  (RPL Root)
                 +-----+                     
                    | Projected DAO message to C                  
              o    |   o    o                
          o o   o |    o  o  o o   o          
         o  o o  | o    o   o   o  o  o      
         o   o   V  o     o  o    o  o  o   
        S  A  B  C   D         o   o o       
        o          o             o     o
                          LLN
       </artwork>
          </figure>
          
   <t>Upon reception of the P-DAO, C validates that it can reach D, e.g. using 
   IPv6 Neighbor Discovery, and if so, propagates the P-DAO unchanged to B.
   </t><t>
   B checks that it can reach C and of so, installs a route towards D via C.
   Then it propagates the P-DAO to A.
   </t><t>
   The process recurses till the P-DAO reaches S, the ingress of the segment, 
   which installs a route to D via A and sends a DAO-ACK to the root.
    </t>

          <figure  anchor="pdao3" title="Projected DAO-ACK to root">
            <artwork>
              ------+---------
                    |          Internet
                    |
                 +-----+
                 |     | Border Router
                 |     |  (RPL Root)
                 +-----+                     
                  ^ Projected DAO-ACK from S                  
              /    o   o    o                
           /   o o    o  o  o o   o          
         |  o o  o o    o   o   o  o  o      
         |   o   o  o     o  o    o  o  o   
        S  A  B  C   D         o   o o       
        o          o             o     o
                          LLN
       </artwork>
          </figure>
          
             <t>
   As a result, a transversal route is installed that does not need to follow
   the DODAG structure.
   </t>
       <figure  anchor="opti" title="Projected Transversal Route">
            <artwork>
              ------+---------
                    |          Internet
                    |
                 +-----+
                 |     | Border Router
                 |     |  (RPL Root)
                 +-----+                     
                    |                    
              o    o   o    o                
          o o   o  o   o  o  o o   o          
         o  o o  o o    o   o   o  o  o      
         o   o    o  o     o  o    o  o  o   
        S>>A>>>B>>C>>>D         o   o o       
        o          o             o     o
                          LLN
       </artwork>
          </figure>
    </section>
          
    </section> 
    </back>
    
          


</rfc>
