<?xml version="1.0" encoding="US-ASCII"?>

<!-- xml2rfc v2 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [

<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC2629 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2629.xml">
<!ENTITY RFC3552 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3552.xml">
<!ENTITY RFC5095 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5095.xml">
<!ENTITY RFC6206 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6206.xml">
<!ENTITY RFC6550 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6550.xml">
<!ENTITY RFC6551 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6551.xml">
<!ENTITY RFC6552 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6552.xml">
<!ENTITY RFC6553 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6553.xml">
<!ENTITY RFC6554 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6554.xml">
<!ENTITY RFC5826 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5826.xml">
<!ENTITY RFC5867 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5867.xml">

]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>

<?rfc toc="yes"?>
<?rfc tocdepth="4"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes" ?>
<?rfc compact="yes" ?>
<?rfc subcompact="no" ?>
<?rfc rfcedstyle="yes"?>

<rfc category="exp" number="6997" ipr="trust200902" submissionType="IETF" consensus="yes">

  <front>

    <title abbrev="Reactive P2P Route Discovery: P2P-RPL">Reactive Discovery of Point-to-Point Routes in&nbsp;Low&nbhy;Power&nbsp;and&nbsp;Lossy&nbsp;Networks</title>

    <author fullname="Mukul Goyal" initials="M." surname="Goyal" role="editor">
            <organization abbrev="Univ. of Wisconsin Milwaukee">University of Wisconsin Milwaukee</organization>
            <address>
              <postal>
                <street>3200 N. Cramer St.</street>
                <city>Milwaukee</city>
                <region>WI</region>
                <code>53201</code>
                <country>USA</country>
               </postal>
               <phone>+1-414-229-5001</phone>
               <email>mukul@uwm.edu</email>
            </address>
    </author>

    <author initials="E." surname="Baccelli" fullname="Emmanuel Baccelli">
       <organization>INRIA</organization>
       <address>
       <phone>+33-169-335-511</phone>
       <email>Emmanuel.Baccelli@inria.fr</email>
       <uri>http://www.emmanuelbaccelli.org/</uri>
       </address>
    </author>
            
    <author initials="M." surname="Philipp" fullname="Matthias Philipp">
       <organization>INRIA</organization>
       <address>
       <phone>+33-169-335-511</phone>
       <email>matthias-philipp@gmx.de</email>
       </address>
    </author>

    <author initials="A." surname="Brandt" fullname="Anders Brandt">
       <organization>Sigma Designs</organization>
       <address>
          <postal>
            <street>Emdrupvej 26A, 1.</street>
            <city>Copenhagen</city>
            <region>Dk-2100</region>
            <country>Denmark</country>
          </postal>
       <phone>+45-29609501</phone>
       <email>abr@sdesigns.dk</email>
       </address>
     </author>

     <author initials="J." surname="Martocci" fullname="Jerald Martocci">
       <organization>Johnson Controls</organization>
       <address>
         <postal>
          <street>507 E. Michigan Street</street>
          <city>Milwaukee</city>
          <region>WI</region>
          <code>53202</code>
          <country>USA</country>
         </postal>
        <phone>+1-414-524-4010</phone>
        <email>jerald.p.martocci@jci.com</email>
        </address>
     </author>

    <date month="August" year="2013" />

    <area>Routing</area>

<workgroup>Internet Engineering Task Force</workgroup>

  <keyword>P2P Routing, RPL, ROLL</keyword>

<!-- [rfced] FYI, we have used xml2rfc v2 (available from 
http://xml.resource.org) to convert this document to text. -->

    <abstract>
            <t>This document specifies a point-to-point route discovery
mechanism, complementary to the Routing Protocol for Low-power and Lossy
Networks (RPL) core functionality. This mechanism allows an IPv6 router to
discover "on demand" routes to one or more IPv6 routers in a Low-power and
Lossy Network (LLN) such that the discovered routes meet specified metrics
constraints.</t>
    </abstract>
  </front>

  <middle>
<section title="Introduction">

        <t>Targeting Low-power and Lossy Networks (LLNs), the IPv6 Routing Protocol for LLNs (RPL) <xref target="RFC6550"/>
        provides paths along a Directed Acyclic Graph (DAG) rooted at a single router in the network. Establishment and
        maintenance of a DAG are performed by routers in the LLN using Destination-Oriented DAG (DODAG) Information Object
                (DIO) messages. When two arbitrary routers (neither of which is the DAG's root) need to communicate, the data packets
                are restricted to travel only along the links in the DAG. Such point-to-point (P2P) routing functionality may not be
                sufficient for several home automation <xref target="RFC5826"/>
and building automation <xref target="RFC5867"/> applications, due
               to the following reasons:
            <list style="symbols">
            <t>The need to pre-establish routes: Each potential destination in the network must declare itself as such ahead of the time
        a source needs to reach it.</t>
            <t>The need to route only along the links in the DAG: A DAG is built to optimize the routing cost to reach the root. Restricting
        P2P routes to use only the in-DAG links may result in significantly suboptimal routes and severe traffic
        congestion near the DAG root.</t>
        </list></t>

       <t>This document describes an extension to core RPL (i.e., the RPL functionality described in <xref target="RFC6550"/>) that enables an
               IPv6 router in the LLN to discover routes to one or more IPv6 routers in the LLN "on demand". The discovered routes 
               may not be the best available but are guaranteed to meet the specified routing metric constraints. Thus, such routes are
               considered "good enough" from the application's perspective. This reactive P2P route discovery mechanism is henceforth referred
              to as P2P&nbhy;RPL.</t>

<t>A mechanism to measure the end-to-end cost of an existing route is specified
in <xref target="RFC6998"/>.
        As discussed in <xref target="app"/>, measuring the end-to-end cost of
an existing route may help in deciding whether to initiate the
       discovery of a better route using P2P&nbhy;RPL and the metric constraints to
be used for this purpose.</t>
</section>

<section title="The Use Cases"> 

        <t>One use case, common in home <xref target="RFC5826"/> and commercial building <xref target="RFC5867"/> environments, involves a device
        (say, a remote control) that suddenly needs to communicate with another device (say, a lamp)
        to which it does not already have a route (and whose network address it
knows a priori). In this case, the remote control must be able
               to discover a route to the lamp "on demand".</t>

       <t>Another use case, common in a commercial building environment, involves a large LLN deployment where P2P communication along a
               particular DAG among hundreds (or thousands) of routers creates severe traffic congestion near that DAG's root. In this case, it is
               desirable to discover direct routes between various source-destination pairs that do not pass through the DAG's root.</t>

      <t>Other use cases involve scenarios where energy or latency constraints are not satisfied by the P2P routes along an existing DAG because
             they involve traversing many more routers than necessary to reach the destination.</t> 

</section>

<section anchor="terms" title="Terminology">
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED",
        "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in <xref target="RFC2119"/>.</t>

        <t>Additionally, this document uses terminology from <xref
target="RFC6550"/> and <xref target="RFC6554"/>. Further terminology may be found
in <xref target="ROLL-TERMS"/>. This document introduces the following terms:</t>

      <t><list style="hanging">
        <t hangText="Origin:">The IPv6 router initiating the P2P&nbhy;RPL route
        discovery.</t>
        <t hangText="Target:">The IPv6 router at the other end point of the P2P
        route(s) to be discovered. A P2P&nbhy;RPL route discovery can discover
        routes to multiple Targets at the same time.</t>
        <t hangText="Intermediate Router:">An IPv6 router that is neither the
        Origin nor a Target.</t>
        <t hangText="Forward direction:">The direction from the Origin to the
        Target.</t>
        <t hangText="Reverse direction:">The direction from the Target to the
        Origin.</t>
        <t hangText="Forward Route:">A route in the Forward direction.</t>
        <t hangText="Reverse Route:">A route in the Reverse direction.</t>
        <t hangText="Bidirectional Route:">A route that can be used in both
        Forward and Reverse directions.</t>
        <t hangText="Ingress-only Interface:">A network interface that can only
        receive packets.</t>
        <t hangText="Egress-only Interface:">A network interface that can only
        send packets.</t>
        <t hangText="Source Route:">A complete and ordered list of routers that
        can be used by a packet to travel from a source to a destination
        node.</t>
        <t hangText="Hop-by-hop Route:">The route characterized by each router
        on the route using its routing table to determine the next hop on
        the route.</t>
        <t hangText="RPL Security Configuration:">The values for the
        Counter is Time, Security Algorithm, Key Identifier Mode,
        and Security Level fields, as defined in Section 6.1
        of <xref target="RFC6550"/>, inside the Security section of a
        secure RPL control message.</t>
     </list></t>
      
</section>

<section anchor="app" title="Applicability">

        <t>A route discovery using P2P&nbhy;RPL may be performed by an Origin when no route exists between itself and
        the Target(s) or when the existing routes do not satisfy the application requirements. P2P&nbhy;RPL is designed
        to discover Hop-by-hop or Source Routes to one or more Targets such that the discovered routes meet
               the specified constraints. In some application contexts, the constraints that
               the discovered routes must satisfy are intrinsically known or can be specified by
               the application. For example, an Origin that expects its Targets to be less than 5 hops away may use
               "hop-count &lt; 5" as the constraint. In other application contexts, the Origin may need to measure
               the cost of the existing route to a Target to determine the constraints. For example, an Origin that
               measures the total expected transmission count (ETX) along its current route to a Target to be 20 may use "ETX &lt; x*20", where x is
               a fraction that the Origin chooses, as the constraint. A mechanism to measure the cost of an existing
               route between two IPv6 routers is specified in <xref target="RFC6998"/>.
               If there is no existing route between the Origin and the Target(s) or the cost measurement for the existing routes
               fails, the Origin will have to guess the constraints to be used in the initial route discovery. Once the initial
               route discovery succeeds or fails, the Origin will have a better estimate for the constraints to be used
              in the subsequent route discovery.</t>

       <t>P2P&nbhy;RPL may result in discovery of better P2P routes than those available along
               a global DAG designed to optimize routing cost to the DAG's root. The improvement in route quality
               depends on a number of factors, including the network topology, the "distance" between the Origin and the
               Target (in terms of the routing metrics in use), and the prevalent conditions in the network. In general,
               a P2P&nbhy;RPL route may be better than the one along a global DAG if the Origin and the Target are nearby.
              Similarly, a P2P&nbhy;RPL route may not be much better than the one along a global DAG if the Origin
               and the Target are far apart. Note that even when P2P&nbhy;RPL routes are not much better than those along a global DAG,
               P2P&nbhy;RPL routes may still be able to avoid congestion that might occur near the root if the routing takes place only
               along a global DAG. In general, the cost associated with a
P2P&nbhy;RPL route discovery (in terms of the control messages --
               mostly DIOs -- generated) increases with the distance between the Origin and the Target. However, it is possible to
               limit the cost of route discovery by carefully setting the routing constraints, the Trickle parameters (which govern 
               DIO generation), and the time duration for which a router maintains its membership in the temporary DAG created for the route
               discovery. A network designer may take into consideration both the benefits (potentially better routes; no need to maintain routes
               proactively; avoid congestion near the global DAG's root) and costs when using P2P&nbhy;RPL. The latency associated with a P2P&nbhy;RPL route
              discovery again depends on the distance between the Origin and
the Target and on the Trickle parameters.</t>

       <t>Like core RPL <xref target="RFC6550"/>, P2P&nbhy;RPL operation
requires that links have bidirectional reachability. For this reason, the routers
              participating in a P2P&nbhy;RPL route discovery must ensure that <list style="symbols">
               <t>Links that do not have bidirectional reachability do not become part of the route being discovered; and</t>
               <t>IPv6 addresses belonging to Ingress-only (or Egress-only) Interfaces do not become part of the route being
        discovered.
               </t></list></t>

</section>

<section anchor="func" title="Functional Overview">

        <t>This section contains a high-level description of P2P&nbhy;RPL.</t>

        <t>A P2P&nbhy;RPL route discovery takes place by forming a DAG rooted at the Origin. As is the case with core RPL, P2P&nbhy;RPL uses
        IPv6 link-local multicast DIO messages to establish a DAG. However, unlike core RPL, this DAG is temporary in nature.
        The routes are discovered and installed while the DAG is alive. Once the specified duration of their membership in the DAG
        is over, the routers leave the DAG, and hence the DAG ceases to exist. However, the installed routes are retained for their specified
        lifetime (which is different than the specified duration of a router's membership in the DAG) even though the DAG that caused their
               installation no longer exists. In P2P&nbhy;RPL, the sole purpose of
DAG creation is to discover routes to the Target(s),
        and DIOs serve as the route discovery messages. Each router joining
the DAG determines a rank for itself in the DAG and ignores
        the subsequent DIOs received from lower-ranked (higher in numerical value) neighbors. Thus, the route discovery messages propagate
               away from the Origin rather than return to it. As in core RPL, DIO generation at a router is controlled
        by a Trickle timer <xref target="RFC6206"/>, which allows a router to avoid generating unnecessary messages
        while providing protection against packet loss. P2P&nbhy;RPL also uses the
routing metrics <xref target="RFC6551"/>, Objective Functions, and
packet-forwarding framework <xref target="RFC6554"/> <xref target="RFC6553"/> developed for core RPL.</t>

       <t>An Origin may use P2P&nbhy;RPL to discover routes to one or more Targets
identified by one or more unicast/multicast addresses.
               P2P&nbhy;RPL allows for the discovery of one Hop-by-hop Route or up to four Source Routes per Target. The discovered routes are
               guaranteed to meet the specified routing metric constraints but may not be the best available. P2P&nbhy;RPL may fail to discover
               any route if the specified routing constraints are overly strict.</t>
        
       <t>The Origin initiates a P2P&nbhy;RPL route discovery by forming a temporary DAG rooted at itself. The DIOs used to create
               the temporary DAG are identified by a new Mode of Operation (P2P Route Discovery mode, defined in <xref target="mop_p2p"/>).
               The DIOs listing the P2P Route Discovery mode as the Mode of Operation are henceforth referred to as the P2P mode DIOs.
               A P2P mode DIO always carries exactly one P2P Route Discovery Option (P2P&nbhy;RDO, defined in <xref target="rdo"/>) in which the Origin
              specifies the following information: <list style="symbols">
              <t>The IPv6 address of a Target. This could be a unicast address or a multicast address. Any additional Targets may be
        specified by including one or more RPL Target options <xref target="RFC6550"/> inside the DIO.</t>
              <t>The nature of the route(s) to be discovered: Hop-by-hop or Source Routes. This specification allows for
               the discovery of one Hop&nbhy;by&nbhy;hop Route or up to four Source Routes per Target.</t>
              <t>The desired number of routes (if Source Routes are being discovered).</t>
              <t>Whether the Target(s) should send P2P Discovery Reply Object (P2P&nbhy;DRO) messages (defined in <xref target="dro"/>) back
               to the Origin on receiving a DIO message. A P2P&nbhy;DRO message carries a discovered Source Route back to the Origin
               or establishes a Hop-by-hop Route between the Origin and the Target.</t></list>
              A P2P&nbhy;RDO also includes the best route from the Origin that the router, generating the P2P mode DIO, has seen so far.</t>

      <t>A P2P mode DIO MAY also carry: <list style="symbols">
              <t>One or more Metric Container options to specify:<list style="symbols">
              <t>The relevant routing metrics.</t>
              <t>The constraints that the discovered route must satisfy. These constraints also limit how
               far the DIO messages may travel.</t></list></t>
              <t>One or more RPL Target options to specify additional unicast or multicast Targets.</t></list></t>

     <t>As the routers join the temporary DAG, they keep track of the best route(s) (so far from the Origin) they have seen and advertise
             these routes, along with the corresponding routing metrics, in their P2P mode DIOs. A router, including the Target(s), discards a
             received P2P mode DIO if the aggregated routing metrics on the route advertised by the DIO do not satisfy the listed constraints.
             These constraints can be used to limit the propagation of P2P mode DIO messages. A router may also discard a received P2P mode DIO
            if it does not wish to be a part of the discovered route due to limited resources or due to policy reasons.</t>

    <t>When a Target receives a P2P mode DIO, it contains inside the P2P&nbhy;RDO a complete Source Route from the Origin to this Target. Since the links
            in the discovered route have bidirectional reachability (<xref target="rdo"/>), the Target may use the discovered route to reach the Origin.
            Thus, a router that provides a particular service in the LLN (e.g., an outside temperature server) could initiate a P2P&nbhy;RPL route discovery
            listing all its potential clients as Targets, thereby allowing the clients to discover a Source Route back to the server. In this case, the
            Origin (the server) might want to disable the generation of P2P&nbhy;DRO
messages by the Targets (the clients). If the Origin has requested that
            P2P&nbhy;DRO messages be sent back, the Target may select the discovered route in the received DIO for further processing, as described next.
            This document does not specify a particular method for the Target to use to select a route for further processing. Example methods include
           selecting any route that meets the constraints or selecting the best route(s) discovered over a certain time period.</t>

   <t>If one or more Source Routes are being discovered, the Target sends the selected Source Route(s) to the Origin via P2P&nbhy;DRO messages, with one P2P&nbhy;DRO
          message carrying one discovered route. On receiving a P2P&nbhy;DRO message, the Origin stores the discovered route in its
          memory. This specification allows the Origin to discover up to four Source Routes per Target, thereby allowing the Origin
          to have sufficient ready-to-use alternatives should one or more of these routes fail. If a Hop-by-hop Route is being discovered, the
         Target sends a P2P&nbhy;DRO message containing the selected route to the Origin. The P2P&nbhy;DRO
        message travels back to the Origin along the selected route, establishing state for the Forward Route in the routers on the path.</t>

<t>The Target may request that the Origin acknowledge the receipt of a P2P&nbhy;DRO message by sending back a P2P&nbhy;DRO Acknowledgement
               (P2P&nbhy;DRO&nbhy;ACK) message (defined in <xref target="dro-ack"/>). The Origin unicasts a P2P&nbhy;DRO&nbhy;ACK message to the Target.
        If the Target does not receive the requested P2P&nbhy;DRO&nbhy;ACK within a certain time interval of sending a P2P&nbhy;DRO,
       it resends the P2P&nbhy;DRO message (up to a certain number of times) carrying the same route as before.</t>

<t>The use of Trickle timers to delay the propagation of DIO messages may cause some nodes to generate these messages even when the desired
        routes have already been discovered. In order to preempt the generation of such unnecessary messages, the Target may set a "Stop"
        flag in the P2P&nbhy;DRO message to let the nodes in the LLN know about the
completion of the route discovery process. The routers receiving
        such a P2P&nbhy;DRO should not generate any more DIOs for this temporary
DAG, nor should they process any received DIOs for this temporary
       DAG in the future. However, such routers must still process the P2P&nbhy;DROs
received for this temporary DAG.</t>

</section>

<section anchor="mop_p2p" title="P2P Route Discovery Mode of Operation">
        <t>This section specifies a new RPL Mode of Operation (MOP), P2P Route Discovery mode (or P2P mode, for short), with value 4.
               A DIO message listing P2P mode as the MOP is identified as performing a P2P&nbhy;RPL route discovery
        by creating a temporary DAG. A P2P mode DIO MUST carry exactly one P2P Route Discovery Option (P2P&nbhy;RDO, specified in <xref target="rdo"/>).</t>

<section anchor="dioWithP2PMode" title="Setting a P2P Mode DIO">

<t>The Base object in a P2P mode DIO message MUST be set in the following manner:<list style="symbols">
        <t>RPLInstanceID: RPLInstanceID MUST be a local value as described in Section 5.1 of <xref target="RFC6550"/>. The Origin chooses
            the RPLInstanceID to be used for a particular route discovery in accordance with the following rules:
            <list style="symbols">

        <t>The Origin SHOULD NOT reuse a RPLInstanceID for a route discovery if some routers might still maintain membership
            in the DAG that the Origin had initiated for the previous route discovery using this RPLInstanceID. As described in
            <xref target="rdo"/>, a router's membership in a DAG created for a P2P&nbhy;RPL route discovery lasts for the time
            duration (say, 't' seconds) indicated by the L field inside the P2P&nbhy;RDO. In general, there is no upper bound on
            the time duration by when all the routers have left the DAG created for a P2P&nbhy;RPL route discovery. In the specific
            case where the discovered route must be at most 'n' hops in length, all the routers must have left the DAG
            "(n+1)*t" seconds after its initiation by the Origin. In practice, all the routers should have joined the DAG
            within 't' seconds of its initiation (since the route discovery must complete while the Origin still belongs to
            the DAG), and hence all the routers should have left the DAG within "2*t" seconds of its initiation. Hence, it is
            usually sufficient that the Origin wait for twice the duration indicated by the L field inside the P2P&nbhy;RDO used for
            the previous route discovery before reusing the RPLInstanceID for a new route discovery. Individual P2P&nbhy;RPL
            deployments are encouraged to share their experience with various RPLInstanceID reuse policies to help guide the
               development of a Standards Track version of the protocol.</t>

        <t>When initiating a new route discovery to a particular Target, the Origin MUST NOT reuse the RPLInstanceID used in a
               previous route discovery to this Target if the state created during the previous route discovery might still exist
               in some routers. Note that it is possible that the previous route discovery did not succeed yet some routers still
               ended up creating state. The Default Lifetime and Lifetime Unit parameters in the DODAG Configuration Option specify
               the lifetime of the state that the routers, including the Origin
and the Target, maintain for a Hop-by-hop or Source Route
 discovered using P2P&nbhy;RPL. Suppose this lifetime is 'X' seconds. As discussed above, any state created during
               the previous route discovery was likely created within "2*t" seconds of its initiation. Hence, it is sufficient that
               the Origin lets a time duration equal to "X+2*t" seconds pass since the initiation of the previous route discovery
               before initiating a new route discovery to the same Target using the same RPLInstanceID.</t>
              </list></t>
               <t>Version Number: This field MUST be set to zero. The temporary DAG used for P2P&nbhy;RPL route discovery does not exist long enough to have
               new versions.</t>
               <t>Grounded (G) Flag: This flag MUST be set to one. Unlike a global RPL instance, the concept of a floating DAG,
               used to provide connectivity within a sub-DAG detached from a grounded DAG, does not apply to a local RPL instance.
               Hence, an Origin MUST always set the G flag to one when initiating a P2P&nbhy;RPL route discovery. Further, item 3 of
               Section 8.2.2.2 in <xref target="RFC6550"/> does not apply, and a node MUST NOT initiate a new DAG if it does not
               have any parent left in a P2P&nbhy;RPL DAG.</t>
        <t>Mode of Operation (MOP): This field MUST be set to four, corresponding to P2P Route Discovery mode.</t>
        <t>Destination Advertisement Trigger Sequence Number (DTSN): This field
MUST be set to zero on transmission and ignored on reception.</t>
        <t>DODAGPreference (Prf): This field MUST be set to zero (least preferred).</t>
        <t>DODAGID: This field MUST be set to an IPv6 address of the Origin.</t>
        <t>The other fields in the DIO Base object can be set in the desired fashion as per the rules described in
            <xref target="RFC6550"/>.</t></list> A received P2P mode DIO MUST be discarded if it does not follow the
       above-listed rules regarding the RPLInstanceID, Version Number,
G&nbsp;flag, MOP, and Prf fields inside the Base object.</t>

       <t>The DODAG Configuration Option inside a P2P mode DIO MUST be set in the following manner:
               <list style="symbols">
               <t>The Origin MUST set the MaxRankIncrease parameter to zero to disable local repair of the temporary DAG. A
        received P2P mode DIO MUST be discarded if the MaxRankIncrease parameter inside the DODAG Configuration Option is not
               zero.</t>
               <t>The Origin SHOULD set the Trickle parameters (DIOIntervalDoublings, DIOIntervalMin, DIORedundancyConstant) as
        recommended in <xref target="trickle"/>.</t>
               <t>The Origin sets the Default Lifetime and Lifetime Unit parameters to indicate the lifetime of
        the state that the routers, including the Origin and the Target(s), maintain for a Hop-by-hop or Source Route
               discovered using P2P&nbhy;RPL.</t>
             <t>The Origin sets the other fields in the DODAG Configuration
Option, including the Objective Code Point (OCP) identifying the Objective Function,
         in the desired fashion as per the rules described in <xref
         target="RFC6550"/>.</t>

         <t>As discussed in <xref target="Security"/>,
     P2P&nbhy;RPL does not distinguish between the "preinstalled" and
     "authenticated" security modes described in
     <xref target="RFC6550"/>.  Consequently, the Origin MUST set the
     Authentication Enabled (A) flag to zero.  A received P2P mode DIO MUST be
     discarded if the A flag inside the DODAG Configuration Option is
     not zero.</t>

             <t>An Intermediate Router (or a Target) MUST set various fields in the DODAG Configuration Option in the outgoing P2P mode
        DIOs to the values they had in the incoming P2P mode DIOs for this
        DAG.</t>
   </list></t>

       <t>A default DODAG Configuration Option takes effect if a P2P mode DIO does not carry an explicit one. The
               default DODAG Configuration Option has the following parameter values:<list style="symbols">
               <t>Authentication Enabled: 0</t>
               <t>DIOIntervalMin: 6, which translates to 64 ms as the value for
the Imin parameter in a Trickle
        operation. This value is roughly one order of magnitude larger than the typical transmission delay on IEEE 802.15.4
        links and corresponds to the recommendation in <xref target="trickle"/> for well-connected topologies.</t>
               <t>DIORedundancyConstant: 1. See the discussion in <xref target="trickle"/>.</t>
               <t>MaxRankIncrease: 0 (to disable local repair of the temporary DAG).</t>
               <t>Default Lifetime: 0xFF, to correspond to infinity.</t>
               <t>Lifetime Unit: 0xFFFF, to correspond to infinity.</t>
               <t>Objective Code Point: 0, i.e., OF0 <xref target="RFC6552"/>
is the default Objective Function (OF).</t>
              <t>The remaining parameters have default values as specified in <xref target="RFC6550"/>.</t></list>Individual P2P&nbhy;RPL
              deployments are encouraged to share their experience with these
default values to help guide the development of a Standards Track version
of the protocol.</t>

     <t>The routing metrics and constraints <xref target="RFC6551"/> used in P2P&nbhy;RPL route
             discovery are included in one or more Metric Container options <xref target="RFC6550"/>
             inside the P2P mode DIO. Note that a DIO need not include a Metric Container if OF0 is the Objective
             Function in effect. In that case, a P2P mode DIO may still specify an upper limit on the maximum rank, that
             a router may have in the temporary DAG, inside the P2P&nbhy;RDO.</t>

<t>A P2P mode DIO:<list style = "symbols">
        <t>MUST carry one (and only one) P2P&nbhy;RDO. The P2P&nbhy;RDO allows for the specification of one unicast or multicast address for the Target.
               A received P2P mode DIO MUST be discarded if it does not contain exactly one P2P&nbhy;RDO.</t>
               <t>MAY carry one or more RPL Target options to specify additional unicast/multicast addresses for the Target. If a unicast address is
               specified, it MUST be a global address or a unique-local address.</t> 
               <t>MAY carry one or more Metric Container options to specify routing metrics and constraints.</t>
               <t>MAY carry one or more Route Information Options <xref target="RFC6550"/>. In the context of P2P&nbhy;RPL, a Route Information Option
               advertises to the Target(s) the Origin's connectivity to the
prefix specified in the option.</t>
               <t>
               MAY carry one DODAG Configuration Option.  If a P2P mode DIO
               does not carry an explicit DODAG Configuration Option, the
               default DODAG Configuration Option defined in this section
               is considered to be in effect.
</t></list>
       A RPL option other than those listed above MUST be ignored when found inside a received P2P mode DIO and MUST NOT be included in the P2P mode
       DIOs that the receiving router generates.</t>

<t>In accordance with core RPL, a P2P mode DIO MUST propagate via link-local multicast. The IPv6 source address in a P2P mode DIO MUST be a link-local
        address, and the IPv6 destination address MUST be the link-local multicast address all-RPL-nodes <xref target="RFC6550"/>. A P2P mode DIO MUST
       be transmitted on all interfaces the router has in this
 RPL routing domain <xref target="RFC6554"/>.</t>
       
</section>
</section>

<section anchor="rdo" title="P2P Route Discovery Option (P2P-RDO)">
        <t>This section defines a new RPL control message option: the P2P Route Discovery Option (P2P&nbhy;RDO).</t>


<figure anchor="route-discovery-option-fig" align="center" title="Format of the
P2P Route Discovery Option (P2P-RDO)"> <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 |R|H| N | Compr | L |MaxRank/NH |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|                                                               |
|                         TargetAddr                            |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                       Address[1..n]                           |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork> </figure>

<t>The format of a P2P Route Discovery Option (P2P&nbhy;RDO) is illustrated in <xref
target="route-discovery-option-fig"/>. A P2P mode DIO and a P2P&nbhy;DRO message
        (defined in <xref target="dro"/>) MUST carry exactly one P2P&nbhy;RDO. A P2P&nbhy;RDO consists of the following fields:<list style="symbols">
        <t>Option Type: 0x0a.</t>
        <t>Option Length: This field is an 8-bit unsigned integer representing
the length in octets of the option, not including the Option Type and Option
Length fields. </t>
               <t>Reply (R): The Origin sets this flag to one to allow the
Target(s) to send P2P&nbhy;DRO messages back to the Origin. If this flag is set to
zero, a Target MUST NOT generate any P2P&nbhy;DRO messages.</t>
               <t>Hop-by-hop (H): This flag is valid only if the R flag is set to one. The Origin sets this flag to one if it desires Hop-by-hop Routes.
               The Origin sets this flag to zero if it desires Source Routes. This specification allows for the establishment of one Hop-by-hop
               Route or up to four Source Routes per Target. The Hop&nbhy;by&nbhy;hop Route is established in the Forward direction, i.e., from the
               Origin to the Target. This specification does not allow for the establishment of Hop-by-hop Routes in the Reverse direction.</t>
               <t>Number of Routes (N): This field is valid only if the R flag
is set to one and the H flag is set to zero, i.e., the Targets are allowed to generate
               P2P&nbhy;DRO messages carrying discovered Source Routes back to the Origin. In this case, the value in the N field plus one indicates the
               number of Source Routes that each Target should convey to the Origin. When Hop-by-hop Routes are being discovered, the N field MUST
              be set to zero on transmission and ignored on reception.</t> 
               <t>Compr: This field is a 4-bit unsigned integer indicating the number of prefix octets that are elided from the Target field and the Address vector.
              For example, the Compr value will be zero if full IPv6 addresses are carried in the Target field and the Address vector.</t>
              <t>Lifetime (L): This is a 2-bit field that indicates the
exact duration that a router joining the temporary DAG, including the Origin and the Target(s),
              MUST maintain its membership in the DAG. A router MUST leave the temporary DAG once the time elapsed since it joined reaches the value
              indicated by this field. The mapping between the value in this field and the duration of the router's membership in
             the temporary DAG is as follows:
              <list style="symbols">
        <t>0x00: 1 second</t>
        <t>0x01: 4 seconds</t>
        <t>0x02: 16 seconds</t>
        <t>0x03: 64 seconds</t></list>
            The Origin sets this field based on its expectation regarding the time required for the route discovery to complete, which
            includes the time required for the DIOs to reach the Target(s) and the P2P&nbhy;DROs to travel back to the Origin. The time required
            for the DIOs to reach the Target(s) would in turn depend on the Trickle parameters (Imin and the redundancy constant) as well
            as the expected distance (in terms of hops and/or ETX) to the
Target(s). While deciding on the value in this field, the Origin should
               also take into account the fact that all routers joining the temporary DAG would need to stay in the DAG for this much time.</t> 
        <t>MaxRank/NH: <list style="symbols">
        <t>When a P2P&nbhy;RDO is included in a P2P mode DIO, this field indicates the upper limit on the integer portion
            of the rank (calculated using the DAGRank() macro defined in <xref target="RFC6550"/>) that
               a router may have in the temporary DAG being created. An Intermediate Router MUST NOT join a temporary DAG
               being created by a P2P mode DIO if the integer portion of its rank would be equal to or higher (in numerical
               value) than the MaxRank limit. A Target can join the temporary DAG at a rank whose integer portion is equal to
              the MaxRank. A router MUST discard a received P2P mode DIO if the integer part of the advertised rank
            equals or exceeds the MaxRank limit. A value of 0 in this field indicates that the MaxRank is infinity.</t>
        <t>When a P2P&nbhy;RDO is included in a P2P&nbhy;DRO message, this field
indicates the index of the next-hop (NH) address inside the
               Address vector.</t></list></t>
        <t>TargetAddr: This is an IPv6 address of the Target after eliding Compr number of prefix octets. When the P2P&nbhy;RDO is included in a P2P mode DIO,
            this field may contain a unicast address or a multicast address. If a unicast address is specified, it MUST be a global address
            or a unique-local address. Any additional Target addresses can be specified by including one or more RPL Target options
            <xref target="RFC6550"/> in the DIO. When the P2P&nbhy;RDO is
included in a P2P&nbhy;DRO, this field MUST contain a unicast global or
unique-local IPv6 address of the Target generating the P2P&nbhy;DRO.</t>
        <t>Address[1..n]: This is a vector of IPv6 addresses representing a complete route so far in the Forward direction:<list style="symbols">
        <t>Each element in the Address vector has size (16 - Compr) octets and MUST contain a valid global or unique-local
            IPv6 address with the first Compr octets elided.</t>
        <t>The total number of elements inside the Address vector is given by
              n = (Option Length - 2 - (16 - Compr))/(16 - Compr).</t>
               <t>The IPv6 address that a router adds to the vector MUST belong to the interface on which the router received
              the DIO containing this P2P&nbhy;RDO. Further, this interface MUST NOT be an Ingress-only Interface. This allows
              the route accumulated in the Address vector to be a Bidirectional Route that can be used by a Target to send
             a P2P&nbhy;DRO message to the Origin.</t>
               <t>The Address vector MUST carry the accumulated route in the Forward direction, i.e., the first element in the
             Address vector must contain the IPv6 address of the router next to the Origin, and so on.</t>
        <t>The Origin and Target addresses MUST NOT be included in the Address vector.</t>
        <t>A router adding its address to the vector MUST ensure that 
none of its addresses already exist in the vector.
               A Target specifying a complete route in the Address vector MUST ensure that the vector does not contain
               any address more than once.</t>
        <t>The Address vector MUST NOT contain any multicast addresses.</t>
        </list></t>
      </list></t>

</section>

<section anchor="dro" title="The P2P Discovery Reply Object (P2P-DRO)">
     
        <t>This section defines two new RPL control message types: the P2P
Discovery Reply Object (P2P&nbhy;DRO), with code 0x04; and the Secure P2P&nbhy;DRO,
with code 0x84. A P2P&nbhy;DRO serves one of the following functions:
<list style="symbols">
            <t>carries a discovered Source Route from a Target to the Origin;</t>
               <t>establishes a Hop-by-hop Route as it travels from a Target to the Origin.</t></list>
        A P2P&nbhy;DRO message can also serve the function of letting the routers in the LLN know that a P2P&nbhy;RPL route discovery
        is complete and no more DIO messages need to be generated for the corresponding temporary DAG. A P2P&nbhy;DRO message MUST
        carry one (and only one) P2P&nbhy;RDO whose TargetAddr field MUST contain a unicast IPv6 address of the Target that generates the P2P&nbhy;DRO. A P2P&nbhy;DRO message
        MUST travel from the Target to the Origin via link-local multicast along the route specified inside the Address vector in the P2P&nbhy;RDO, as included
        in the P2P&nbhy;DRO. The IPv6 source address in a P2P&nbhy;DRO message MUST be a
link-local address, and the IPv6 destination address MUST be the link-local
multicast
       address all-RPL-nodes <xref target="RFC6550"/>. A P2P&nbhy;DRO message
MUST be transmitted on all interfaces the router has in this RPL routing domain
       <xref target="RFC6554"/>.</t>
       
     
<figure anchor="discovery-reply-fig" align="center" title="Format of the Base
P2P Discovery Reply Object (P2P-DRO)"> <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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RPLInstanceID |    Version    |S|A|Seq|     Reserved          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                         DODAGID                               |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Option(s)...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+...
</artwork> </figure>

<t>The format of the base P2P Discovery Reply Object (P2P&nbhy;DRO) is shown in <xref target="discovery-reply-fig"/>. A base P2P&nbhy;DRO consists of 
               the following fields:<list style="symbols">
              <t>RPLInstanceID: This field provides the RPLInstanceID of the
temporary DAG used for route discovery.</t>
              <t>Version: This field provides the Version of the temporary DAG
used for route discovery. Since a temporary DAG always has
              value zero for the Version, this field MUST always be set to zero.</t>
            <t>Stop (S): This flag, when set to one by a Target, indicates that the P2P&nbhy;RPL route discovery is over. All
            the routers receiving such a P2P&nbhy;DRO, including those not listed
in the route carried inside a P2P&nbhy;RDO, <list style="symbols">
            <t>SHOULD NOT process any more DIOs received for this temporary DAG;</t>
            <t>SHOULD NOT generate any more DIOs for this temporary DAG;</t>
            <t>SHOULD cancel any pending DIO transmissions for this temporary DAG.</t></list>
            Note that the Stop flag serves to stop further DIO generation/processing for a P2P&nbhy;RPL route discovery but does not affect the processing
            of P2P&nbhy;DRO messages at either the Origin or the Intermediate Routers. In other words, a router (the Origin or an Intermediate Router)
            MUST continue to process the P2P&nbhy;DRO messages even if an earlier P2P&nbhy;DRO message (with the same RPLInstanceID and DODAGID fields) had the Stop
           flag set to one. When set to zero, this flag does not imply anything
and MUST be ignored on reception.</t>

             <t>Ack Required (A): This flag, when set to one by the Target, indicates that the Origin MUST unicast a P2P&nbhy;DRO&nbhy;ACK message
            (defined in <xref target="dro-ack"/>) to the Target when it receives the P2P&nbhy;DRO.</t> 
             <t>Sequence Number (Seq): This 2-bit field indicates the sequence number for the P2P&nbhy;DRO. This field is relevant when the A flag
             is set to one, i.e., the Target requests an acknowledgement from the Origin for a received P2P&nbhy;DRO. The Origin includes the RPLInstanceID,
             the DODAGID, and the Sequence Number of the received P2P&nbhy;DRO inside the P2P&nbhy;DRO&nbhy;ACK message it sends back to the Target.</t> 
        <t>Reserved: These bits are reserved for future use. These bits MUST be set to zero on transmission and MUST be ignored on reception.</t>
              <t>DODAGID: This field provides the DODAGID of the temporary DAG
used for route discovery. The DODAGID also identifies the Origin.
              The RPLInstanceID, the Version, and the DODAGID together uniquely identify the temporary DAG used for route discovery
             and can be copied from the DIO message advertising the temporary DAG.</t>
             <t>Options: The P2P&nbhy;DRO message:<list style="symbols">
         <t>MUST carry one (and only one) P2P&nbhy;RDO that MUST specify a complete route between the Target and the Origin. A received
            P2P&nbhy;DRO message MUST be discarded if it does not contain exactly one P2P&nbhy;RDO.</t>
         <t>MAY carry one or more Metric Container options that contain the aggregated routing metrics values for
             the route specified in the P2P&nbhy;RDO.</t></list>
            A RPL option other than those listed above MUST be ignored when found inside a received P2P&nbhy;DRO message.</t>
     </list></t>

<section anchor="secureP2P-DRO" title="Secure P2P-DRO">

        <t>A Secure P2P&nbhy;DRO message follows the format shown in Figure 7 of <xref target="RFC6550"/>, where the base format is the base P2P&nbhy;DRO
               shown in <xref target="discovery-reply-fig"/>.</t>

</section>

<section anchor="droWithRouteDiscoveryOption" title="Setting a P2P-RDO Carried in a P2P Discovery Reply Object">

        <t>A P2P Discovery Reply Object MUST carry one (and only one) P2P&nbhy;RDO, which MUST be set as defined in <xref target="rdo"/>. Specifically, the following
               fields MUST be set as follows:<list style="symbols">
        <t>Reply (R): This flag MUST be set to zero on transmission and ignored on reception.</t> 
        <t>Hop-by-Hop (H): The H flag in the P2P&nbhy;RDO included in a P2P&nbhy;DRO message MUST have the same value as the H flag in the P2P&nbhy;RDO
               inside the corresponding DIO message.</t>
               <t>Number of Routes (N): This field MUST be set to zero on transmission and ignored on reception.</t> 
               <t>Lifetime (L): This field MUST be set to zero on transmission and ignored on reception.</t> 
               <t>MaxRank/NH: This field indicates the index of the next-hop address in the Address vector. When a Target generates
               a P2P&nbhy;DRO message, the NH field is set to n = (Option Length - 2 - (16 - Compr))/(16 - Compr).</t>
        <t>TargetAddr: This field MUST contain a unicast global or unique-local IPv6 address of the Target generating the P2P&nbhy;DRO.</t>
              <t>Address[1..n]: The Address vector MUST contain a complete route between the Origin and the Target such that
              the first element in the vector contains the IPv6 address of the router next to the Origin and the last
             element contains the IPv6 address of the router next to the Target.</t></list></t>

</section>
</section>

<section anchor="propDiscovery" title="P2P-RPL Route Discovery by Creating a Temporary DAG">

<t>This section details the P2P&nbhy;RPL route discovery operation.</t>

<section anchor="joinDAG" title="Joining a Temporary DAG">

        <t>All the routers participating in a P2P&nbhy;RPL route discovery, including the Origin and the Target(s), MUST join
        the temporary DAG being created for that purpose. When a router joins a temporary DAG advertised by
        a P2P mode DIO, it MUST maintain its membership in the temporary DAG for the duration indicated by the L field
        inside the P2P&nbhy;RDO. The only purpose of a temporary DAG's existence is to facilitate
        the P2P&nbhy;RPL route discovery process. The temporary DAG MUST NOT be used to route data packets. In other words,
        joining a temporary DAG does not allow a router to provision routing table entries listing the router's parents
        in the temporary DAG as the next hops (i.e., the last bullet point in Section 3.2.8 of <xref target="RFC6550"/> is not
        applicable when the DAG is a temporary DAG created for the purpose of a P2P&nbhy;RPL route discovery).</t>

        <t>Given the nature of a temporary DAG created for a P2P&nbhy;RPL route discovery, this document disallows the solicitation of P2P mode DIOs
        using DODAG Information Solicitation (DIS) messages as described in <xref target="RFC6550"/>. A router participating
        in a P2P&nbhy;RPL route discovery MUST NOT reset its Trickle timer, which controls the transmission of P2P mode DIOs in response to a
               multicast DIS. Also, the router MUST NOT send a P2P mode DIO in response to a unicast DIS. In other words, the rules in Section 8.3 of
        <xref target="RFC6550"/> regarding a router's response to a multicast/unicast DIS are not applicable for P2P mode DIOs.</t>

        <t>A router MUST detach from the temporary DAG created for a P2P&nbhy;RPL route discovery once the duration of its membership in the DAG has
        reached the value indicated by the L field inside the P2P&nbhy;RDO. After receiving a P2P&nbhy;DRO with the Stop flag set to one, a router
               SHOULD NOT send or process any more DIOs for this temporary DAG and SHOULD also cancel any pending DIO transmissions.</t>

</section>

<section anchor="trickle" title="Trickle Operation for P2P Mode DIOs">

        <t>A RPL router uses a Trickle timer <xref target="RFC6206"/> to control DIO transmissions. The Trickle control
        of DIO transmissions provides quick resolution of any "inconsistency" while avoiding redundant DIO
        transmissions. The Trickle algorithm also imparts protection against loss of DIOs due to inherent
        lack of reliability in LLNs. When controlling the transmissions of a P2P mode DIO,
               a Trickle timer SHOULD follow the following rules:<list style="symbols">
               <t>The receipt of a P2P mode DIO that allows the router to advertise a better route
        (in terms of the routing metrics and the OF in use) than before is considered
               "inconsistent" and hence resets the Trickle timer. Note that the first receipt
               of a P2P mode DIO advertising a particular temporary DAG is always considered
               an "inconsistent" event.</t>
             <t>The receipt of a P2P mode DIO from a parent in the temporary DAG is considered neither
         "consistent" nor "inconsistent" if it does not allow the router to advertise a better
         route than before. Thus, the receipt of such DIOs has no impact on the Trickle operation.
         Note that this document does not impose any requirements on how a router might choose its
         parents in the temporary DAG.</t>
             <t>The receipt of a P2P mode DIO is considered "consistent" if the source of the DIO is not
        a parent in the temporary DAG and either of the following conditions is true:
        <list style="symbols">
            <t>The DIO advertises a better route than the router but does not allow
        the router to advertise a better route itself; or</t>
            <t>The DIO advertises a route as good as the route (to be) advertised by the router.</t>
            </list>Note that the Trickle algorithm's DIO suppression rules are in effect at all times. Hence,
            a P2P&nbhy;RPL router may suppress a DIO transmission even if it has not made any DIO transmissions yet.</t>
        <t>The receipt of a P2P mode DIO that advertises a worse route than what the router advertises
            (or would advertise when it gets a chance to generate its DIO) is considered
            neither "consistent" nor "inconsistent", i.e., the receipt of such a DIO has no
           impact on the Trickle operation.</t>
        <t>The Imin parameter SHOULD be set taking into account the connectivity within the network. For highly
            connected networks, a small Imin value (on the order of the typical transmission delay for
            a DIO) may lead to congestion in the network as a large number of routers reset their Trickle
            timers in response to the first receipt of a DIO from the Origin. These routers would generate
            their DIOs within the Imin interval and cause additional routers to reset their Trickle timers
            and generate more DIOs. Thus, for highly connected networks, the Imin parameter SHOULD be
            set to a value at least one order of magnitude larger than the typical transmission delay for
            a DIO. For sparsely connected networks, the Imin parameter can be set to a value that is a small
            multiple of the typical transmission delay for a DIO. Note that the Imin value has a direct
            impact on the time required for a P2P&nbhy;RPL route discovery to complete. In general, the time
            required for a P2P&nbhy;RPL route discovery would increase approximately linearly with the value of
            the Imin parameter. Since the route discovery must complete while the Origin still belongs to the temporary
            DAG created for that purpose, the Origin should set the time
duration for which a router maintains its membership in the
            temporary DAG (indicated by the L field inside the P2P&nbhy;RDO) to a large enough value, taking into
               account the Imin value as well as the expected distance (in terms of hops and/or ETX) to the Target(s).</t>
        <t>The Imax parameter SHOULD be set to a large value (several orders of magnitude higher than the Imin value)
            and is unlikely to be critical for P2P&nbhy;RPL operation. This is because the first receipt of
            a P2P mode DIO for a particular temporary DAG is considered an inconsistent event and would
            lead to the resetting of the Trickle timer duration to the Imin value. Given the temporary nature of
               the DAGs used in P2P&nbhy;RPL, the Trickle timer may not get a chance to increase much.</t>
        <t>The recommended value of redundancy constant "k" is 1. With this value of "k", a DIO
            transmission will be suppressed if the router receives even a single "consistent"
            DIO during a timer interval. This setting for the redundancy constant is designed
            to reduce the number of messages generated during a route discovery process and is suitable for
               environments with low or moderate packet loss rates. However, this setting may result in
               an increase in the time required for the route discovery process to complete. A higher value for the redundancy
               constant may be more suitable in <list style="symbols">
        <t>environments with high packet loss rates; or</t>
        <t>deployments where the time required for the route discovery process to complete needs to be as small as possible;
               or</t>
        <t>deployments where specific destinations are reachable only through specific Intermediate Routers (and hence these
               Intermediate Routers should not suppress their DIOs).</t></list>
              A particular deployment should take into account the
above-mentioned factors when deciding on the value of the redundancy constant.</t></list></t>

<t>Individual P2P&nbhy;RPL deployments are encouraged to share their experience with these rules to help
        guide the development of a Standards Track version of the protocol. Applicability Statements that specify the use of P2P&nbhy;RPL
       MUST provide guidance for setting Trickle parameters, particularly Imin and the redundancy constant.</t>

</section>

<section anchor="processing" title="Processing a P2P Mode DIO">
        <t>The rules for DIO processing and transmission as described in Section 8 of RPL <xref target="RFC6550"/>
        apply to P2P mode DIOs as well, except as modified in this document. In particular, in accordance with Section 8.2.3 of
        RPL <xref target="RFC6550"/>, a received P2P mode DIO MUST be discarded if it is malformed, according to the rules specified
        in this document and in <xref target="RFC6550"/>.</t>

       <t>The following rules for processing a received P2P mode DIO apply to both Intermediate Routers and the Target.</t>

       <t>A router SHOULD discard a received P2P mode DIO with no further processing if it does not have bidirectional
               reachability with the neighbor that generated the received DIO. Note that bidirectional reachability does
               not mean that the link must have the same values for a routing metric in both directions. A router SHOULD
               calculate the values of the link-level routing metrics included in the received DIO, taking into account the
               metric's value in both Forward and Reverse directions. Bidirectional reachability along a discovered route
               allows the Target to use this route to reach the Origin. In particular, the P2P&nbhy;DRO messages travel from the Target
              to the Origin along a discovered route.</t>

      <t>A router MUST discard a received P2P mode DIO with no further processing:<list style="symbols">
              <t>if the DIO advertises INFINITE_RANK as defined in Section 17 of <xref target="RFC6550"/></t>
              <t>if the integer part of the rank advertised in the DIO equals or exceeds the MaxRank
         limit listed in the P2P Route Discovery Option</t>
             <t>if the routing metric values do not satisfy one or more of the mandatory route constraints listed in the DIO 
         or if the router cannot evaluate the mandatory route constraints, e.g., if the router does not support the
        metrics used in the constraints</t>
             <t>if the router previously received a P2P&nbhy;DRO message with the same RPLInstanceID and DODAGID as the received DIO and
        with the Stop flag set to one</t> 
     </list></t>

     <t>The router MUST check the Target addresses listed in the P2P&nbhy;RDO and any RPL Target options included in the received DIO. If one of
             its IPv6 addresses is listed as a Target address or if it belongs to the multicast group specified as one of the Target addresses,
             the router considers itself a Target and processes the received DIO as specified in <xref target="processingAtTarget"/>.
             Otherwise, the router considers itself an Intermediate Router and processes the received DIO as specified in
             <xref target="processingIntermediate"/>.</t>
</section>

<section anchor="processingIntermediate" title="Additional Processing of a P2P Mode DIO at an Intermediate Router">

        <t>An Intermediate Router MUST discard a received P2P mode DIO with no further processing <list style="symbols">
            <t>if the DIO is received on an Ingress-only Interface; or</t>
            <t>if the receiving interface does not have a global or unique-local IPv6 address configured with the address prefix
        implied by the Compr field in the P2P&nbhy;RDO inside the received DIO; or</t>
            <t>if the router cannot uniquely identify the address prefix implied by the Compr field in the P2P&nbhy;RDO (this might happen
        if the receiving interface has multiple global/unique-local IPv6 addresses, each configured with a different address
        prefix); or</t>
            <t>if adding its IPv6 address to the route in the Address vector inside the P2P&nbhy;RDO would result in the route
        containing multiple addresses belonging to this router.</t>
       </list></t>

        <t>On receiving a P2P mode DIO, an Intermediate Router MUST do the following. The router MUST determine whether this DIO advertises a better
        route than the router itself and whether the receipt of the DIO would allow the router to advertise a better route than before.
        Accordingly, the router SHOULD consider this DIO as
consistent/inconsistent from the Trickle perspective, as described in
        <xref target="trickle"/>. Note that the route comparison in a P2P&nbhy;RPL route discovery is performed using the parent selection rules of
        the OF in use as specified in Section 14 of RPL <xref target="RFC6550"/>. If the received DIO would allow the router to advertise a
        better route, the router MUST add a unicast IPv6 address of the receiving interface (after eliding Compr prefix octets) to the route
               in the Address vector inside the P2P&nbhy;RDO and remember this route for inclusion in its future DIOs.</t>

        <t>When an Intermediate Router adds an IPv6 address to a route, it MUST ensure that <list style="symbols">
            <t>the IPv6 address is a unicast global or unique-local IPv6 address assigned to the interface on which the DIO containing the
        route was received;</t>
               <t>the IPv6 address was configured with the address prefix implied by the Compr field in the P2P&nbhy;RDO inside the received
               DIO.</t></list>
              To improve the diversity of the routes being discovered, an Intermediate Router SHOULD keep track of multiple routes (as long as
              all these routes are the best seen so far), one of which SHOULD be selected in a uniform random manner for inclusion in the P2P&nbhy;RDO
              inside the router's next DIO. Note that the route accumulation in a P2P mode DIO MUST take place even if the Origin does not want any P2P&nbhy;DRO
              messages to be generated (i.e., the R flag inside the P2P&nbhy;RDO is set to zero). This is because the Target may still be able to use the
             accumulated route as a Source Route to reach the Origin.</t>

</section>

<section anchor="processingAtTarget" title="Additional Processing of a P2P Mode DIO at the Target">

       <t>The Target MAY remember the discovered route contained in the P2P&nbhy;RDO in the received DIO for use as a Source Route to reach the Origin.
               The lifetime of this Source Route is specified by the Default Lifetime and Lifetime Unit parameters
               inside the DODAG Configuration Option currently in effect. This lifetime can be extended (or shortened) appropriately,
               following a hint from an upper-layer protocol.</t>

       <t>If the Reply flag inside the P2P&nbhy;RDO in the received DIO is set to one, the Target MUST select one or more discovered routes and
               send one or more P2P&nbhy;DRO messages, carrying one discovered route each, back to the Origin. If the H flag inside the P2P&nbhy;RDO is set to one,
               the Target needs to select one route and send a P2P&nbhy;DRO message along this route back to the Origin. As this P2P&nbhy;DRO message travels back
               to the Origin, the routers on the path establish a hop-by-hop routing state, thereby establishing a Hop-by-hop Route in the Forward direction.
               If the H flag is set to zero, the number of Source Routes to be selected (and the number of P2P&nbhy;DRO messages to be
               sent back) is given by one plus the value of the N field in the P2P&nbhy;RDO. The Target may select the discovered route inside the received DIO
              as one or more of the routes that would be carried inside a P2P&nbhy;DRO message back to the Origin. This document does not prescribe a particular
        method for the Target to select the routes. Example methods include selecting each route that meets the specified routing
        constraints until the desired number of routes has been selected, or selecting the best routes discovered over a certain time period.
        If multiple routes are to be selected, the Target SHOULD avoid selecting routes that have large segments in common.</t>

       <t>If the Target selects the route contained in the P2P&nbhy;RDO in the received DIO, it sends a P2P&nbhy;DRO message back to the Origin
              (identified by the DODAGID field in the DIO). The P2P&nbhy;DRO message MUST include a P2P&nbhy;RDO that contains the selected route inside the
              Address vector. Various fields inside the P2P&nbhy;RDO MUST be set as specified in <xref target="droWithRouteDiscoveryOption"/>.
              The Target MAY set the A flag inside the P2P&nbhy;DRO message to one if it desires the Origin to send back a P2P&nbhy;DRO&nbhy;ACK message on receiving
              the P2P&nbhy;DRO. In this case, the Target waits for the duration of 
P2P_DRO_ACK_WAIT_TIME for the P2P&nbhy;DRO&nbhy;ACK message to arrive. Failure
to receive the
              P2P&nbhy;DRO&nbhy;ACK message within this time duration causes the Target to retransmit the P2P&nbhy;DRO message. The Target MAY retransmit the P2P&nbhy;DRO
              message in this fashion up to MAX_P2P_DRO_RETRANSMISSIONS times. Both P2P_DRO_ACK_WAIT_TIME and MAX_P2P_DRO_RETRANSMISSIONS are configurable
             parameters to be chosen based on the characteristics of individual deployments. Note that all P2P&nbhy;DRO transmissions and retransmissions
              MUST take place while the Target is still a part of the temporary DAG created for the route discovery. A Target MUST NOT transmit a P2P&nbhy;DRO
              if it no longer belongs to this DAG.</t>

      <t>The Target MAY set the Stop flag inside the P2P&nbhy;DRO message to one if<list style="symbols">
              <t>this router is the only Target specified in the corresponding DIO, i.e., the corresponding DIO specified a unicast
               address of the router as the TargetAddr inside the P2P&nbhy;RDO
with no additional Targets specified via RPL Target options; and</t>
              <t>the Target has already selected the desired number of routes.</t></list></t>

      <t>The Target MAY include a Metric Container option in the P2P&nbhy;DRO message. This Metric Container contains the end-to-end routing metric
              values for the route specified in the P2P&nbhy;RDO. The Target MUST transmit the P2P&nbhy;DRO message via a link-local multicast.</t>

     <t>A Target MUST NOT forward a P2P mode DIO any further if no other Targets are to be discovered, i.e., if a unicast IPv6 address (of this Target)
             is specified as the TargetAddr inside the P2P&nbhy;RDO and no additional Targets are specified via RPL Target options inside the DIOs for this route
             discovery. Otherwise, the Target MUST generate DIOs for this route discovery as an Intermediate Router would.</t>

</section>

<section anchor="processingP2P-DRO" title="Processing a P2P-DRO at an Intermediate Router">


        <t>If the DODAGID field in the received P2P&nbhy;DRO does not list a router's own IPv6 address, the router considers itself an Intermediate Router and
        MUST process the received message in the following manner:<list style="symbols">
            <t>The router MUST discard the received P2P&nbhy;DRO with no further processing if it does not belong to the
        temporary DAG identified by the RPLInstanceID and the DODAGID fields in the P2P&nbhy;DRO.</t>
            <t>If the Stop flag inside the received P2P&nbhy;DRO is set to one, the router SHOULD NOT send or receive any more DIOs for this
        temporary DAG and SHOULD cancel any pending DIO transmissions.</t>
            <t>The router MUST ignore any Metric Container options contained in the P2P&nbhy;DRO message.</t> 
            <t>If an Address[NH] element inside the P2P&nbhy;RDO lists the router's own unicast IPv6 address, the router
        is a part of the route carried in the P2P&nbhy;RDO. In this case, the router MUST do the following:
        <list style="symbols">
            <t>To prevent loops, the router MUST discard the P2P&nbhy;DRO message with no further processing
            if the Address vector in the P2P&nbhy;RDO includes multiple IPv6 addresses assigned to the
        router's interfaces.</t>
            <t>If the H flag inside the P2P&nbhy;RDO is set to one, the router MUST store the state for the Forward Hop-by-hop
            Route carried inside the P2P&nbhy;RDO. This state consists of: <list style="symbols">
        <t>the RPLInstanceID and the DODAGID fields of the P2P&nbhy;DRO</t>
        <t>the route's destination, the Target (identified by the TargetAddr
field inside the P2P&nbhy;RDO)</t>
        <t>the IPv6 address of the next hop, Address[NH+1] (unless the 
NH value equals the number of elements in the Address vector, in which case the
Target itself is the next hop)</t>
            </list>This Hop-by-hop routing state MUST expire at the end of the lifetime
            specified by the Default Lifetime and Lifetime Unit parameters inside the DODAG Configuration Option
            used in P2P mode DIOs for this route discovery.</t>
               <t>If the router already maintains a Hop-by-hop state listing
the Target as the destination and carrying the same
        RPLInstanceID and DODAGID fields as the received P2P&nbhy;DRO, and the
next-hop information in the state does not
        match the next hop indicated in the received P2P&nbhy;DRO, the router MUST
discard the P2P&nbhy;DRO message with no
        further processing. Note that this situation would occur in the
following two cases:<list style="symbols">
        <t>When the route listed in the Address vector inside the P2P&nbhy;RDO contains a previously undetected
               loop. In this case, this rule causes the P2P&nbhy;DRO messages to be discarded.</t>
        <t>When a Hop-by-hop Route between the Origin and the Target, previously established using the same
               RPLInstanceID and DODAGID as the route currently being established, still exists and at least
               partially overlaps the route currently being established.</t>
               </list></t>
               <t>The router MUST decrement the NH field inside the P2P&nbhy;RDO and
send the P2P&nbhy;DRO message further via link-local multicast.</t>
        </list></t>
        </list></t>

</section>

<section anchor="processingP2P-DRO_origin" title="Processing a P2P-DRO at the Origin">

        <t>When a router receives a P2P&nbhy;DRO message that lists its IPv6 address in the DODAGID field, the router recognizes itself
        as the Origin for the corresponding P2P&nbhy;RPL route discovery, notes the
Target that originated this message (from the
               TargetAddr field inside the P2P&nbhy;RDO), and processes the message in the following manner:
        <list style="symbols">
            <t>The Origin MUST discard the received P2P&nbhy;DRO with no further processing if it no longer belongs to the
        temporary DAG identified by the RPLInstanceID and the DODAGID fields in the P2P&nbhy;DRO.</t>
            <t>If the Stop flag inside the received P2P&nbhy;DRO is set to one, the Origin SHOULD NOT generate any more DIOs for this temporary DAG
        and SHOULD cancel any pending DIO transmissions.</t>
            <t>If the P2P&nbhy;RDO inside the P2P&nbhy;DRO has the H flag set to zero, the Address vector inside the P2P&nbhy;RDO contains a Source Route to this
        Target. The Origin MUST set the lifetime of this Source Route to the value specified by the Default Lifetime and Lifetime
        Unit parameters inside the DODAG Configuration Option in the P2P mode DIOs used for this route discovery. This lifetime
        could be extended (or shortened) appropriately, following a hint from an upper-layer protocol.</t>
               <t>If the P2P&nbhy;RDO inside the P2P&nbhy;DRO has the H flag set to one, the P2P&nbhy;DRO message is establishing a Hop-by-hop Route to this Target, and
        the Origin MUST store in its memory the state for this Hop&nbhy;by&nbhy;hop Route in the manner described in
        <xref target="processingP2P-DRO"/>. This Hop-by-hop routing state MUST expire at the end of the lifetime specified by the
        Default Lifetime and Lifetime Unit parameters inside the DODAG Configuration Option used in P2P mode DIOs for this route
        discovery. A Standards Track version of P2P&nbhy;RPL may consider specifying a signaling mechanism that will allow the Origin
               to extend (or shorten) the lifetime of a P2P&nbhy;RPL Hop-by-hop Route, following a suitable hint from an upper-layer protocol.</t>
            <t>If the received P2P&nbhy;DRO message contains one or more Metric Container options, the Origin MAY store the values of the
        routing metrics associated with the discovered route in its memory. This information may be useful in formulating
        the constraints for any future P2P&nbhy;RPL route discovery to this Target.</t>
            <t>If the A flag is set to one in the received P2P&nbhy;DRO message, the Origin MUST generate a P2P&nbhy;DRO&nbhy;ACK message as described in
        <xref target="dro-ack"/> and unicast the message to the Target. The Origin MAY use the route just discovered to
        send the P2P&nbhy;DRO&nbhy;ACK message to the Target. <xref target="forward"/> describes how a packet may be forwarded along a
        Source/Hop-by-hop Route discovered using P2P&nbhy;RPL.</t>
       </list></t>
</section>

</section>

<section anchor="dro-ack" title="The P2P Discovery Reply Object Acknowledgement (P2P-DRO-ACK)">
     
<figure anchor="dro-ack-fig" align="center" title="Format of the Base P2P
Discovery Reply Object Acknowledgement (P2P-DRO-ACK)"> <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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RPLInstanceID |    Version    |Seq|        Reserved           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                         DODAGID                               |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork> </figure>

<t>A P2P&nbhy;DRO message may fail to reach the Origin due to a number of
reasons. Unlike the DIO messages, which benefit from Trickle-controlled retransmissions,
        the P2P&nbhy;DRO messages are prone to loss due to unreliable packet transmission in LLNs. Since a P2P&nbhy;DRO message travels via link-local
        multicast, it cannot use link-level acknowledgements to improve the reliability of its transmission. Also, an Intermediate Router may
        drop the P2P&nbhy;DRO message (e.g., because of its inability to store
the state for the Hop-by-hop Route that the P2P&nbhy;DRO is establishing). To protect against
        the potential failure of a P2P&nbhy;DRO message to reach the Origin, the
Target MAY request that the Origin send back a P2P&nbhy;DRO Acknowledgement
        (P2P&nbhy;DRO&nbhy;ACK) message on receiving a P2P&nbhy;DRO message. Failure to receive such an acknowledgement within the P2P_DRO_ACK_WAIT_TIME interval of
       sending the P2P&nbhy;DRO message forces the Target to resend the message (as described in <xref target="processingAtTarget"/>).</t>

<t>This section defines two new RPL control message types: the P2P&nbhy;DRO
Acknowledgement (P2P&nbhy;DRO&nbhy;ACK), with code 0x05; and the Secure P2P&nbhy;DRO&nbhy;ACK,
with code 0x85. A P2P&nbhy;DRO&nbhy;ACK message MUST travel as a unicast message from the Origin to the Target. The IPv6 source and destination addresses
        used in a P2P&nbhy;DRO&nbhy;ACK message MUST be global or unique-local. The format of a base P2P&nbhy;DRO&nbhy;ACK message is shown in <xref target="dro-ack-fig"/>.
        Various fields in a P2P&nbhy;DRO&nbhy;ACK message MUST have the same values as the corresponding fields in the P2P&nbhy;DRO message. The field marked as "Reserved"
        MUST be set to zero on transmission and MUST be ignored on reception. A
Secure P2P&nbhy;DRO&nbhy;ACK message follows the format shown in Figure 7 of
       <xref target="RFC6550"/>, where the base format is the same as the base P2P&nbhy;DRO&nbhy;ACK shown in <xref target="dro-ack-fig"/>.</t>

</section>

<section anchor="secureOperation" title="Secure P2P-RPL Operation">

        <t>Each RPL control message type, including those defined in this document, has a secure version. A secure RPL control message is identified
        by the value 1 in the most significant bit of the Code field. Each
secure RPL control message contains a Security section (see Figures 7 and 8
        of <xref target="RFC6550"/>) whose contents are described in Section 6.1 of <xref target="RFC6550"/>. Sections 6.1, 10, and 19 of
        <xref target="RFC6550"/> describe core RPL's security apparatus.

 These sections are applicable to P2P&nbhy;RPL's secure operation as well,
except as constrained in this section.</t>

        <t>Core RPL allows a router to decide locally on a per-packet basis whether to use security and, if yes, what Security Configuration
        (see definition in <xref target="terms"/>) to use (the only exception being the requirement to send a Secure DIO in response to a
        Secure DIS; see Section 10.2 of <xref target="RFC6550"/>). In contrast,
this document requires that routers participating in a P2P&nbhy;RPL
        route discovery follow the Origin's lead regarding security. The Origin decides whether to use security, and the particular Security
               Configuration to be used for this purpose. All the routers participating in this route discovery MUST generate
        only secure control messages if the Origin so decides and MUST use for this purpose the Security Configuration that the Origin chose.
        The Origin MUST NOT set the "Key Identifier Mode" field inside the
chosen Security Configuration to value 1, since this setting indicates
               the use of a per-pair key, which is not suitable for securing
messages that travel by (link-local) multicast (e.g., DIOs) or that travel
               over multiple hops (e.g., P2P&nbhy;DROs). The Origin MUST use the
chosen Security Configuration to secure all the control messages (DIOs and
       P2P&nbhy;DRO&nbhy;ACKs) it generates.</t>

        <t>A router MUST NOT join the temporary DAG being created for a P2P&nbhy;RPL route discovery if:
        <list style="symbols">
            <t>it receives both secure and unsecure DIOs or Secure DIOs with different Security Configurations pertaining to this
        route discovery (i.e., referring to the same RPLInstanceID and DODAGID combination) prior to joining; or</t>
            <t>it cannot use the Security Configuration found in the Secure DIOs pertaining to this route discovery.</t>
        </list>When a router (an Intermediate Router or a Target) joins a temporary DAG being created using Secure DIOs, it MUST remember the
        common Security Configuration used in the received Secure DIOs and MUST use this configuration to secure all the control messages (DIOs
               and P2P&nbhy;DROs) it generates.</t>

       <t>If an Intermediate Router (or a Target) encounters a control message (a DIO or a P2P&nbhy;DRO or a P2P&nbhy;DRO&nbhy;ACK) pertaining
               to this route discovery that is either not secure or does not follow the Security Configuration the router remembers for this route
               discovery, the router MUST enter the "lock down" mode for the remainder of its stay in this temporary DAG. An Intermediate Router
               (or a Target) in the "lock down" mode MUST NOT generate or process any control messages (irrespective of the Security Configuration used)
               pertaining to this route discovery. If the Origin receives a control message (a P2P&nbhy;DRO) that does not follow the Security Configuration
               the Origin has chosen for this route discovery, it MUST discard the received message with no further processing.</t>
</section>

<section anchor="forward" title="Packet Forwarding along a Route Discovered Using P2P-RPL">

        <t>An Origin uses the Source Routing Header (SRH) <xref target="RFC6554"/> to send a packet along a Source Route discovered using P2P&nbhy;RPL.</t>

        <t>Travel along a Hop-by-hop Route, established using P2P&nbhy;RPL, requires specifying the RPLInstanceID and the DODAGID (of the temporary
        DAG used for the route discovery) to identify the route. This is because a P2P&nbhy;RPL route discovery does not use globally unique
        RPLInstanceID values, and hence both the RPLInstanceID (a local value assigned by the Origin) and the DODAGID (an IPv6 address of
               the Origin) are required to uniquely identify a P2P&nbhy;RPL Hop-by-hop Route to a particular destination.</t>

        <t>An Origin includes a RPL option <xref target="RFC6553"/> inside the IPv6 Hop-by-Hop Options header of a packet
        to send it along a Hop-by-hop Route established using P2P&nbhy;RPL. For this purpose, the Origin MUST set the DODAGID of the temporary DAG
        used for the route discovery as the source IPv6 address of the packet. Further, the Origin MUST specify inside the RPL option the
               RPLInstanceID of the temporary DAG used for the route discovery and set the O flag inside the RPL option to one.
               On receiving this packet, an Intermediate Router checks the O flag and correctly infers the source IPv6 address of the packet
               as the DODAGID of the Hop-by-hop Route. The router then uses the DODAGID, the RPLInstanceID, and the destination address to identify
              the routing state to be used to forward the packet further.</t>
</section>

<section anchor="interop" title="Interoperability with Core RPL">

        <t>This section describes how RPL routers that implement P2P&nbhy;RPL interact with RPL routers that do not. In general, P2P&nbhy;RPL operation
        does not affect core RPL operation, and vice versa. However, core RPL does allow a router to join a DAG as a leaf node even if it
        does not understand the Mode of Operation (MOP) used in the DAG. Thus, a RPL router that does not implement P2P&nbhy;RPL may
        conceivably join a temporary DAG being created for a P2P&nbhy;RPL route discovery as a leaf node and maintain its membership even
        though the DAG no longer exists. This may impose a drain on the router's memory. However, such RPL-only leaf nodes do not
        interfere with P2P&nbhy;RPL route discovery, since a leaf node may only generate a DIO advertising an INFINITE_RANK and all routers
        implementing P2P&nbhy;RPL are required to discard such DIOs. Note that
core RPL does not require that a router join a DAG whose MOP
        it does not understand. Moreover, RPL routers in a particular deployment may have strict restrictions on the DAGs they may join,
               thereby mitigating the problem.</t>

        <t>The P2P&nbhy;RPL mechanism described in this document works best when all the RPL routers in the LLN implement P2P&nbhy;RPL. In general, the ability to
        discover routes, as well as the quality of discovered routes, would deteriorate with the fraction of RPL routers that
        implement P2P&nbhy;RPL.</t>

</section>

<section anchor="Security" title="Security Considerations">

        <t>In general, the security considerations for the operation of P2P&nbhy;RPL are similar to those for the operation of RPL (as described
        in Section 19 of the RPL specification <xref target="RFC6550"/>). Sections 6.1 and 10 of <xref target="RFC6550"/> describe RPL's security
        framework, which provides data confidentiality, authentication, replay protection, and delay protection services. This security framework
        can also be used in P2P&nbhy;RPL after taking into account the constraints
specified in <xref target="secureOperation"/>. P2P&nbhy;RPL requires that
        all routers participating in a secure route discovery use the Security Configuration chosen by the Origin. The intention is to avoid
        compromising the overall security of a route discovery due to some
routers using a weaker Security Configuration. With the "lock down"
        mechanism as described in <xref target="secureOperation"/> in effect, it is unlikely that an Origin would accept a route discovered
        under a Security Configuration other than the one it intended. Any attempt to use a different Security Configuration (than the one the
        Origin intended) is likely to result, in the worst case, in the failure of the route discovery process. In the best-case scenario, any such
        attempt by a rogue router would result in its neighbors entering the "lock down" mode and acting as firewalls to allow the route discovery
        to proceed in the remaining network.</t>

        <t>The RPL specification <xref target="RFC6550"/> describes three modes of security: unsecured,
preinstalled, and authenticated. In the unsecured mode, secure control
messages
        are not used, and the only available security is the security provided by the link-layer protocols. In the preinstalled mode, all the nodes use a
        preinstalled group key to join a secure DAG as the "routers" or "hosts", where the term "router" means a node that is capable of
        forwarding packets received from its parents or children in the DAG, and the term "host" refers to nodes that cannot function as "routers".
        In the authenticated mode, the nodes can join a secure DAG as "hosts" using the preinstalled key but then need to authenticate themselves
               to a key server to obtain the key that will allow them to work as "routers". The temporary DAG created for a P2P&nbhy;RPL discovery cannot
               be used for routing packets. Hence, it is not meaningful to say
that a node joins this DAG as a "router" or a "host" in the sense defined
               above. Hence, in P2P&nbhy;RPL, there is no distinction between the preinstalled and authenticated modes. A router can join a temporary DAG
               created for a secure P2P&nbhy;RPL route discovery only if it can support the Security Configuration in use, which also specifies the key in use.
               It does not matter whether the key is preinstalled or dynamically acquired. The router must have the key in use before it can join
               the DAG being created for a secure P2P&nbhy;RPL route discovery.</t>

       <t>If a rogue router can support the Security Configuration in use (in
particular, if it knows the key in use), it can join the secure P2P&nbhy;RPL
               route discovery and cause various types of damage. Such a rogue router could advertise false information in its DIOs in order to include
               itself in the discovered route(s). It could generate bogus P2P&nbhy;DRO messages carrying bad routes or maliciously modify genuine P2P&nbhy;DRO
               messages it receives. A rogue router acting as the Origin could launch denial-of-service attacks against the LLN deployment
               by initiating fake P2P&nbhy;RPL route discoveries; in this type
of scenario, RPL's
authenticated mode of operation, where a node can obtain the
               key to use for a P2P&nbhy;RPL route discovery only after proper
authentication, would be useful.</t>

       <t>Since a P2P&nbhy;DRO message travels along a Source Route specified inside the message, some of the security concerns that led to the deprecation
               of Type 0 routing headers <xref target="RFC5095"/> may apply. To avoid the possibility of a P2P&nbhy;DRO message traveling in a routing loop,
               this document requires that each Intermediate Router confirm that the Source Route listed inside the message does not contain any routing
               loop involving itself before the router could forward the message further. As specified in <xref target="processingP2P-DRO"/>,
        this check involves the router making sure that its IPv6 addresses do not appear multiple times inside the Source Route with
               one or more other IPv6 addresses in between.</t>

</section>

<section anchor="iana" title="IANA Considerations">

<section anchor="iana_p2p_mop" title="Additions to Mode of Operation">

        <t>This document defines a new Mode of Operation, entitled "P2P Route
Discovery Mode of Operation" (see <xref target="mop_p2p"/>), assigned
        a value of 4 from the "Mode of Operation" space
        <xref target="RFC6550"/>.</t>

      <texttable>
        <ttcol align='center'>Value</ttcol>
        <ttcol align='center'>Description</ttcol>
        <ttcol align='center'>Reference</ttcol>
        <c>4</c>
        <c>P2P Route Discovery Mode of Operation</c>
        <c>This document</c>
        <postamble>Mode of Operation</postamble>
      </texttable>
</section>

<section anchor="iana2" title="Additions to RPL Control Message Options">

        <t>This document defines a new RPL option: "P2P Route Discovery"
(see <xref target="rdo"/>), assigned a value of 0x0a from the
        "RPL Control Message Options" space
        <xref target="RFC6550"/>.</t>

     <texttable>
        <ttcol align='center'>Value</ttcol>
        <ttcol align='center'>Meaning</ttcol>
        <ttcol align='center'>Reference</ttcol>
        <c>0x0a</c>
        <c>P2P Route Discovery</c>
        <c>This document</c>
        <postamble>RPL Control Message Options</postamble>
     </texttable>

</section>

<section anchor="iana1" title="Additions to RPL Control Codes">

        <t>This document defines the following new RPL messages: 

<list style="symbols">
            <t>"P2P Discovery Reply Object" (see <xref target="dro"/>),
assigned a value of 0x04 from the "RPL Control Codes" space
        <xref target="RFC6550"/>.
</t>
            <t>"Secure P2P Discovery Reply Object" (see <xref
target="secureP2P-DRO"/>), assigned a value of 0x84 from the "RPL Control Codes"
        space <xref target="RFC6550"/>.
</t>
            <t>"P2P Discovery Reply Object Acknowledgement" (see <xref
target="dro-ack"/>), assigned a value of 0x05 from the "RPL Control Codes"
        space <xref target="RFC6550"/>.
</t>
            <t>"Secure P2P Discovery Reply Object Acknowledgement" (see <xref
target="dro-ack"/>), assigned a value of 0x85 from the
        "RPL Control Codes" space <xref target="RFC6550"/>.
</t>
       </list></t>

      <texttable>
        <ttcol align='center'>Code</ttcol>
        <ttcol align='center'>Description</ttcol>
        <ttcol align='center'>Reference</ttcol>
        <c>0x04</c>
        <c>P2P Discovery Reply Object</c>
        <c>This document</c>
        <c>0x84</c>
        <c>Secure P2P Discovery Reply Object</c>
        <c>This document</c>
        <c>0x05</c>
        <c>P2P Discovery Reply Object Acknowledgement</c>
        <c>This document</c>
        <c>0x85</c>
        <c>Secure P2P Discovery Reply Object Acknowledgement</c>
        <c>This document</c>
        <postamble>RPL Control Codes</postamble>
      </texttable>
</section>

</section>

<section title="Known Issues and Future Work">
<t>This document is presented as an Experimental specification to facilitate P2P&nbhy;RPL's deployment in LLN scenarios where reactive P2P
        route discovery is considered useful or necessary. It is anticipated that, once sufficient operational experience has
        been gained, this specification will be revised to progress it on to the Standards Track. Experience reports regarding P2P&nbhy;RPL
        implementation and deployment are encouraged, particularly with respect to:<list style="symbols">
        <t>Secure P2P&nbhy;RPL operation (<xref target="secureOperation"/>);</t>
        <t>Rules governing Trickle operation (<xref target="trickle"/>);</t>
        <t>Values in the default DODAG Configuration Option (<xref target="dioWithP2PMode"/>);</t>
        <t>The RPLInstanceID reuse policy (<xref target="dioWithP2PMode"/>);</t>
        <t>Utility and implementation complexity of allowing multiple Target addresses in a P2P&nbhy;RPL route discovery.</t></list></t>
</section>

<section title="Acknowledgements">

        <t>The authors gratefully acknowledge the contributions of the
following individuals (in alphabetical order) in the development of this
document: Dominique Barthel, Jakob Buron, Cedric Chauvenet, Thomas Clausen,
Robert Cragie, Ralph Droms, Adrian Farrel, Stephen Farrell, Brian Haberman,
Ted Humpal, Richard Kelsey, Phil Levis, Charles Perkins, Joseph Reddy,
Michael Richardson, Zach Shelby, Martin Stiemerling, Pascal Thubert,
Hristo Valev, and JP Vasseur.</t>
</section>

</middle>

  <back>

    <references title="Normative References">
      &RFC2119;
      &RFC6206;
      &RFC6550;
      &RFC6551;
      &RFC6554;
      
    </references>

    <references title="Informative References">

<!-- draft-ietf-roll-terminology (Waiting for AD Go-Ahead::Revised I-D Needed) -->
<reference anchor="ROLL-TERMS">
<front>
<title>Terminology in Low power And Lossy Networks</title>
<author initials='JP' surname='Vasseur' fullname='JP Vasseur'>
    <organization />
</author>
<date month='March' year='2013' />
</front>
<seriesInfo name='Work in' value='Progress'/>
</reference>

<!-- draft-ietf-roll-p2p-measurement (RFC 6998) -->
<reference anchor="RFC6998">
<front>
<title>A Mechanism to Measure the Routing Metrics along a Point-to-Point Route in a Low-Power and Lossy Network</title>
<author initials='M' surname='Goyal' fullname='Mukul Goyal' role='editor'>
    <organization />
</author>
<author initials='E' surname='Baccelli' fullname='Emmanuel Baccelli'>
    <organization />
</author>
<author initials='A' surname='Brandt' fullname='Anders Brandt'>
    <organization />
</author>
<author initials='J' surname='Martocci' fullname='Jerry Martocci'>
    <organization />
</author>
<date month='August' year='2013' />
</front>
<seriesInfo name='RFC' value='6998' />
</reference>

      &RFC5826;
      &RFC5867;
      &RFC6553;
      &RFC6552;
      &RFC5095;

    </references>
  </back>
</rfc>


