<?xml version="1.0" encoding="US-ASCII"?>
<!-- This template is for creating an Internet Draft using xml2rfc,
     which is available here: http://xml.resource.org. -->
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!-- One method to get references from the online citation libraries.
     There has to be one entity for each item to be referenced.
     An alternate method (rfc include) is described in the references. -->
<!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 I-D.narten-iana-considerations-rfc2434bis SYSTEM
"http://xml.resource.org/public/rfc/bibxml3/reference.I-D.narten-iana-considerations-rfc2434bis.xml">

]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<!-- used by XSLT processors -->
<!-- For a complete list and description of processing instructions (PIs),
     please see http://xml.resource.org/authoring/README.html. -->
<!-- Below are generally applicable Processing Instructions (PIs) that most
     I-Ds might want to use.
     (Here they are set differently than their defaults in xml2rfc v1.32) -->
<?rfc strict="yes" ?>
<!-- give errors regarding ID-nits and DTD validation -->
<!-- control the table of contents (ToC) -->
<?rfc toc="yes"?>
<!-- generate a ToC -->
<?rfc tocdepth="4"?>
<!-- the number of levels of subsections in ToC. default: 3 -->
<!-- control references -->
<?rfc symrefs="yes"?>
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] -->
<?rfc sortrefs="yes" ?>
<!-- sort the reference entries alphabetically -->
<!-- control vertical white space
     (using these PIs as follows is recommended by the RFC Editor) -->
<?rfc compact="yes" ?>
<!-- do not start each main section on a new page -->
<?rfc subcompact="no" ?>
<!-- keep one blank line between list items -->
<!-- end of list of popular I-D processing instructions -->
<rfc category="std"
docName="draft-ietf-roll-aodv-rpl-02" ipr="trust200902">
  <!-- category values: std, bcp, info, exp, and historic
 http://umeeting.huawei.com/Portal/business.action?BMECID=1474233&BMETimestamp=1426658395147
	        ipr values: full3667, noModification3667, noDerivatives3667
     you can add the attributes updates="NNNN" and obsoletes="NNNN"
     they will automatically be output with "(if approved)" -->

  <!-- ***** FRONT MATTER ***** -->

<front>
    <!-- The abbreviated title is used in the page header - it is only
         necessary if the full title is longer than 39 characters -->

    <title abbrev="draft-ietf-ROLL-AODV-RPL">
    Asymmetric AODV-P2P-RPL in Low-Power and Lossy Networks (LLNs)</title>

    <!-- add 'role="editor"' below for the editors if appropriate -->

    <!-- Another author who claims to be an editor -->

    <author fullname="Satish Anamalamudi" initials="S." surname="Anamalamudi">
      <organization>Huaiyin Institute of Technology</organization>
      <address>
        <postal>
          <street>   No.89 North Beijing Road, Qinghe District</street>
          <!-- Reorder these if your country does things differently -->
          <city>Huaian</city>
          <region/>
          <code>223001</code>
          <country>China</country>
        </postal>
        <phone/>
       <email>satishnaidu80@gmail.com</email>
        <!-- uri and facsimile elements may also be added -->
      </address>
    </author>
    
	<author fullname="Mingui Zhang" initials="M." surname="Zhang">
      <organization>Huawei Technologies</organization>
      <address>
        <postal>
          <street>No. 156 Beiqing Rd. Haidian District</street>
          <!-- Reorder these if your country does things differently -->
          <city>Beijing</city>
          <region/>
          <code>100095</code>
          <country>China</country>
        </postal>
       <phone/>
      <email>zhangmingui@huawei.com</email>
      <!-- uri and facsimile elements may also be added -->
      </address>
     </author>
    
	<author fullname="Abdur Rashid Sangi" initials="AR." surname="Sangi">
      <organization>Huawei Technologies</organization>
       <address>
        <postal>
         <street>No.156 Beiqing Rd. Haidian District</street>
         <!-- Reorder these if your country does things differently -->
         <city>Beijing</city>
         <region/>
         <code>100095</code>
         <country>P.R. China</country>
       </postal>
     <phone/>
    <email>sangi_bahrian@yahoo.com</email>
    <!-- uri and facsimile elements may also be added -->
    </address>
    </author> 

    <author fullname="Charles E. Perkins" initials="C.E." surname="Perkins">
      <organization>Futurewei</organization>
      <address>
        <postal>
          <street>2330 Central Expressway</street>
          <!-- Reorder these if your country does things differently -->
          <city>Santa Clara</city>
          <region/>
          <code>95050</code>
          <country>Unites States</country>
        </postal>
        <phone/>
        <email>charliep@computer.org</email>
        <!-- uri and facsimile elements may also be added -->
      </address>
    </author>
      <author fullname="S.V.R Anand" initials="" surname="S.V.R.Anand">
      <organization>Indian Institute of Science</organization>
      <address>
        <postal>
          <street></street>
          <!-- Reorder these if your country does things differently -->
          <city>Bangalore</city>
          <region/>
          <code>560012</code>
          <country>India</country>
        </postal>
        <phone/>
        <email>anand@ece.iisc.ernet.in</email>
        <!-- uri and facsimile elements may also be added -->
      </address>
    </author>
      
    <date/>

    <!-- If the month and year are both specified and are the current ones,
         xml2rfc will fill in the current day for you. If only the current
         year is specified, xml2rfc will fill in the current day and month for
         you. If the year is not the current one, it is necessary to specify
         at least a month (xml2rfc assumes day="1" if not specified for the
	 purpose of calculating the expiry date).  With drafts it is normally
	 sufficient to specify just the year. -->

    <!-- Meta-data Declarations -->

    <area>Internet</area>

    <workgroup>ROLL</workgroup>

    <!-- WG name at the upperleft corner of the doc;
         IETF is fine for individual submissions.  If this element is not
         present, the default is "Network Working Group", which is used by
         the RFC Editor as a nod to the history of the IETF. -->

    <keyword>P2P-RPL, AODV</keyword>

    <!-- Keywords will be incorporated into HTML output
         files in a meta tag but they have no effect on text or nroff
         output. If you submit your draft to the RFC Editor, the
         keywords will be used for the search engine. -->

    <abstract>
    <t>	Route discovery for symmetric and asymmetric Point-to-Point (P2P)
        traffic flows is a desirable feature in Low power and Lossy Networks
	(LLNs).  For that purpose, this document specifies a reactive P2P route
	discovery mechanism for hop-by-hop routing (storing mode) based on Ad
	Hoc On-demand Distance Vector Routing (AODV) based RPL protocol. Two
        separate Instances are used to construct directional paths in case some
	of the links between source and target node are asymmetric.
    </t>
    </abstract>
</front>

<middle>
  <section title="Introduction">
   <t>
	RPL<xref target="RFC6550"/>, the IPv6 distance vector routing protocol
	for Low-power and Lossy Networks (LLNs), is designed to support
	multiple traffic flows through a root-based Destination-Oriented
	Directed Acyclic Graph (DODAG).  For traffic flows between routers
	within the DODAG (i.e., Point-to-Point (P2P) traffic), this means that
	data packets either have to traverse the
	root in non-storing mode (source routing), or traverse a common
	ancestor in storing mode (hop-by-hop routing).  Such P2P traffic
	is thereby likely to flow along sub-optimal routes and
	may suffer severe traffic congestion near the DAG root
	<xref target="RFC6997"/>, <xref target="RFC6998"/>.
   </t>

   <t>
	To discover optimal paths for P2P traffic flows in RPL, P2P-RPL
	<xref target="RFC6997"/> specifies a temporary DODAG where the
	source acts as temporary root.  The source initiates "P2P Route
	Discovery mode (P2P-RDO)" with an address vector for both non-storing
	mode (H=0) and storing mode (H=1).  Subsequently, each intermediate
	router adds its IP address and multicasts the P2P-RDO message,
	until the message reaches the target node (TargNode).  TargNode sends
	the "Discovery Reply" option.  P2P-RPL is efficient for source routing,
	but much less efficient for hop-by-hop routing due to the extra address
	vector overhead. In fact, when the P2P-RDO message is being
	multicast from the source hop-by-hop, receiving nodes are able to
	determine a next hop towards the source in symmetric links.
	When TargNode subsequently replies to the source along the
	established forward route, receiving nodes can determine the
	next hop towards TargNode.  In other words, it is efficient
	to use only routing tables for P2P-RDO message instead of "Address
	vector" for hop-by-hop routes (H=1) in symmetric links.
    </t>

    <t>
	RPL and P2P-RPL both specify the use of a single DODAG in networks of
	symmetric links.  But, application-specific routing requirements that
	are defined in IETF ROLL Working Group <xref target="RFC5548"/>,
	<xref target="RFC5673"/>, <xref target="RFC5826"/> and
	<xref target="RFC5867"/> may need routing metrics and constraints
	enabling use of asymmetric bidirectional links.  For this purpose,
	<xref target="I-D.thubert-roll-asymlink"/> describes bidirectional
	asymmetric links for RPL <xref target="RFC6550"/> with Paired DODAGs,
	for which the DAG root (DODAGID) is common for two Instances.  This
	can satisfy application-specific routing requirements for bidirectional
	asymmetric links in base RPL <xref target="RFC6550"/>.
	P2P-RPL for Paired DODAGs, on the other hand, requires two DAG roots:
	one for the source and another for the target node due to
	temporary DODAG formation.  For networks composed of bidirectional
	asymmetric links (see <xref target="channel"/>), AODV-RPL specifies
	P2P route discovery, utilizing RPL with a new MoP.  AODV-RPL makes use
	of two multicast messages to discover possibly asymmetric routes.
	AODV-RPL eliminates the need for address vector control overhead,
	significantly reducing the control packet size which is important for
	Constrained LLN networks.  Both discovered routes meet the application
	specific metrics and constraints that are defined in the
        Objective Function for each Instance <xref target="RFC6552"/>.
    </t>

    <t>
	The route discovery process in AODV-RPL is modeled on the analogous
	process that has been specified in AODV <xref target="RFC6550"/>.
	The on-demand nature of AODV route discovery is natural for the needs
	of peer-to-peer routing as envisioned for RPL-based LLNs.
	Similar terminology has been adopted for use with the discovery
	messages, namely RREQ for Route Request, and RREP for Route Reply.
	AODV-RPL is, at heart, a simpler protocol than AODV, since there are
	no analogous operations for flagging Route Errors, blacklisting
	unidirectional links, multihoming, or handling unnumbered interfaces.
	Some of the simpler features of AODV, on the other hand, have been
	imported into AODV-RPL -- for instance, prefix advertisement
	is allowed on RREP and RREQ message where appropriate.
    </t>
  </section>	<!-- End of section "Introduction" -->

  <section anchor="acronyms_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"/>.

     Additionally, this document uses the following terms:</t>

      <t><list style="hanging">

        <t hangText="AODV"><vspace />
        	Ad Hoc On-demand Distance Vector
        	Routing<xref target="RFC3561"/>.</t>
        <t hangText="AODV-Instance"><vspace />
        	Either the RREQ-Instance or RREP-Instance</t>
	<t hangText="Bi-directional Asymmetric Link"><vspace />
		A link that can be used in both directions but with different
		link characteristics (see
		<xref target="I-D.thubert-roll-asymlink"/>). </t>
	<t hangText="DODAG RREQ-Instance (or simply RREQ-Instance)"><vspace />
		AODV Instance built using the RREQ option; used for control
		transmission from OrigNode to TargNode, thus enabling data
		transmission from TargNode to OrigNode.</t>
	<t hangText="DODAG RREP-Instance (or simply RREP-Instance)"><vspace />
		AODV Instance built using the RREP option; used for control
		transmission from TargNode to OrigNode thus enabling data
		transmission from OrigNode to TargNode.</t>
        <t hangText="downstream"><vspace />
        	Routing along the direction from OrigNode to TargNode.</t>
	<t hangText="hop-by-hop routing"><vspace />
		Routing when each node stores routing information
		about the next hop.</t>
        <t hangText="OrigNode"><vspace />
        	The IPv6 router (Originating Node) initiating the AODV-RPL
        	route discovery to obtain a route to TargNode.</t>
	<t hangText="Paired DODAGs"><vspace />
		Two DODAGs for a single application.</t>
	<t hangText="P2P"><vspace />
		Point-to-Point -- in other words, not constrained to
		traverse a common ancestor.</t>
	
	<t hangText="RREQ message"><vspace />
		An AODV-RPL MoP DIO message containing the RREQ option. The
		InstanceID in the DIO object of the RREQ option MUST be always
		an odd number.</t>
	<t hangText="RREP message"><vspace />
		An AODV-RPL MoP DIO message containing the RREP option. The
		InstanceID in the DIO object of the RREP option MUST be always
		an even number (usually, InstanceID of RREQ-Instance+1).</t>
	<t hangText="source routing"><vspace />
		The mechanism by which the source supplies the complete route
		towards the target node along with each data packet.
	 	<xref target="RFC6997"/>.</t>
	<t hangText="TargNode"><vspace />
		The IPv6 router (Target Node) for which OrigNode requires a
		route and initiates Route Discovery within the LLN network.</t>
        <t hangText="upstream"><vspace />
        	Routing along the direction from TargNode to OrigNode.</t>
	</list></t>
  </section>	<!-- End of section "Terminology" -->

<section title="Overview of AODV-RPL">
    <t>	With AODV-RPL, routes from OrigNode to TargNode within the LLN
	network established are "on-demand".  In other words, the route
	discovery mechanism in AODV-RPL is invoked reactively when OrigNode
	has data for delivery to the TargNode but existing routes do not
	satisfy the application's requirements.  The routes discovered by
	AODV-RPL are point-to-point; in other words the routes are not
	constrained to traverse a common ancestor.  Unlike base RPL
	<xref target="RFC6550"/> and P2P-RPL <xref target="RFC6997"/>,
	AODV-RPL can enable asymmetric communication paths in networks with
	bidirectional asymmetric links. For this purpose, AODV-RPL enables
	discovery of two routes: namely, one from OrigNode to TargNode, and
	another from TargNode to OrigNode.  When possible, AODV-RPL also
	enables symmetric routing along Paired
	DODAGs (see <xref target="channel"/>).
    </t>
</section>	<!-- End of section "Overview of AODV-RPL" -->

<section anchor="channel" title="AODV-RPL Mode of Operation (MoP)">
  <t>
	In AODV-RPL, route discovery is initiated by forming a temporary DAG
	rooted at the OrigNode. Paired DODAGs (Instances) are constructed
	according to a new AODV-RPL Mode of Operation (MoP)
	<!-- CEP: would it be possible to do this without a new MoP? -->
	during route formation between the OrigNode and TargNode.
	The RREQ-Instance is formed by route control messages from OrigNode to
	TargNode whereas the RREP-Instance is formed by route control
	messages from TargNode to OrigNode (as shown in
	<xref target="figPaired-a"/>).  Intermediate routers
	join the Paired DODAGs based on the rank as calculated from the DIO
	message. Henceforth in this document, the RREQ-Instance
	message means the AODV-RPL DIO message from OrigNode to TargNode,
	containing the RREQ option.  Similarly, the RREP-Instance message
	means the AODV-RPL DIO message from TargNode to OrigNode,
	containing the RREP option.  Subsequently, the RREQ-Instance is used
	for data transmission from TargNode to OrigNode and RREP-Instance is
	used for Data transmission from OrigNode to TargNode.
    </t>

    <t>
	The AODV-RPL Mode of Operation defines a new bit, the Symmetric bit
	('S'), which is added to the base DIO message as illustrated in
	<xref target="figDIO"/>.  OrigNode sets the the 'S' bit to 1 in the
	RREQ-Instance message when initiating route discovery.
	<figure anchor="figDIO"
		title="DIO modification to support asymmetric route discovery">
	<artwork><![CDATA[
    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    | RPLInstanceID |Version Number |             Rank              |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |G|0| MOP | Prf |     DTSN      |S|    Flags    |   Reserved    |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                                                               |
    +                                                               +
    |                                                               |
    +                            DODAGID                            +
    |                                                               |
    +                                                               +
    |                                                               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |   Option(s)...                                    ]]></artwork>
	</figure></t>

  <t>
	A device originating a AODV-RPL message supplies the following
	information in the DIO header of the message: </t>

	<t><list style="hanging">

	<t hangText="'S' bit"><vspace/></t>
		<t> Symmetric bit in the DIO base object
		</t>

        <t hangText="MOP"><vspace /></t>
		<t> MOP operation in the DIO object MUST be set to "5(TBD1)"
		    for AODV-RPL DIO messages
		</t>

	<t hangText="RPLInstanceID"><vspace /></t>
		<t> RPLInstanceID in the DIO object MUST be the InstanceID of
		    AODV-Instance(RREQ-Instance). The InstanceID for
		    RREQ-Instance MUST be always an odd number.  </t>

	<t hangText="DODAGID"><vspace /></t>
		<t> For RREQ-Instance : </t>
		 <t>   DODAGID in the DIO object MUST be the IPv6 address of
		       the device that initiates the RREQ-Instance. </t>
			<t> For RREP-Instance </t>
			<t> DODAGID in the DIO object MUST be the IPv6 address
			    of the device that initiates the RREP-Instance.</t>
	<!-- CEP: Isn't compression allowed? -->

	<t hangText="Rank"><vspace /></t>
		<t> Rank in the DIO object MUST be the the rank of
		    the AODV-Instance (RREQ-Instance).
		</t>

	<t hangText="Metric Container Options"><vspace /></t>
		<t> AODV-Instance(RREQ-Instance) messages MAY carry one or
		    more Metric Container options to indicate the relevant
	            routing metrics.  </t>
	</list>

	The 'S' bit is set to mean that the route is symmetric. If the
	RREQ-Instance arrives over an interface that is known to be symmetric,
	and the 'S' bit is set to 1, then it remains set at 1,
	as illustrated in <xref target="figPaired-a"/>. In
	<xref target="figPaired-a"/> and <xref target="figPaired-b"/>, BR is
	the BorderRouter, S is the OrigNode,
	R is an intermediate node, and D is the TargNode.

  <figure anchor="figPaired-a" title="AODV-RPL with Symmetric Paired Instances">
  <artwork><![CDATA[

                                 BR 
                             /    |    \
                           /      |      \
                         /        |         \
                        R         R           R
                     /   \        |          /  \
                    /     \       |         /     \
                   /       \      |        /        \
                 R -------- R --- R ----- R -------- R
              /   \   <--s=1-->  / \    <--s=1-->   /  \
        <--s=1-->  \            /   \             /   <--s=1-->
          /         \          /     \          /         \
        S ---------- R ------ R------ R ----- R ----------- D
       / \                   / \             / \           / \
      /   \                 /   \           /   \         /   \
     /     \               /     \         /     \       /     \
    R ----- R ----------- R ----- R ----- R ----- R ---- R----- R

     >---- RREQ-Instance (Control: S-->D;  Data: D-->S) ------->
     <---- RREP-Instance (Control: D-->S;  Data: S-->D) -------< ]]></artwork>
  </figure>

	If the RREQ-Instance arrives over an interface that is not known to be
	symmetric, or is known to be asymmetric, the 'S' bit is set to be 0.
	Moreover, if the 'S' bit arrives already set to be '0', it is set to
	be '0' on retransmission (<xref target="figPaired-b"/>).  Based
	on the 'S' bit received in RREQ-Instance, the TargNode decides
	whether or not the route is symmetric before transmitting the
	RREP-Instance message upstream towards the OrigNode. 
	
	The metric used to determine symmetry (i.e., set the "S" bit to be
	"1" (Symmetric) or "0" (asymmetric)) is implementation specific.
	We used ETX/RSSI to verify the feasibility of the protocol operations
	in this draft, as discussed in <xref target="appendix-a"/>.
  <figure anchor="figPaired-b"
  	title="AODV-RPL with Asymmetric Paired Instances">
  <artwork><![CDATA[
                                  BR 
                              /    |    \
                            /      |      \
                          /        |        \
                        R          R          R 
                      / \          |        /   \
                    /     \        |       /      \
                  /         \      |      /         \
                 R --------- R --- R ---- R --------- R
               /  \   --s=1-->   / \    --s=0-->   /   \
         --s=1-->   \           /    \            /   --s=0-->
          /          \        /       \         /         \
        S ---------- R ------ R------ R ----- R ----------- D
       / \                   / \             / \           / \
      /  <--s=0--           /   \           /   \         / <--s=0--
     /     \               /     \         /     \       /     \
    R ----- R ----------- R ----- R ----- R ----- R ---- R----- R
                <--s=0--   <--s=0-- <--s=0-- <--s=0--    <--s=0--

     >---- RREQ-Instance (Control: S-->D;  Data: D-->S) ------->
     <---- RREP-Instance (Control: D-->S;  Data: S-->D) -------< ]]></artwork>
  </figure>
  </t>
</section>	<!-- End of section "AODV-RPL Mode of Operation" -->

<section anchor="RREQmsg" title="RREQ Message">

    <t>
  <figure anchor="figRREQ" title="DIO RREQ option format for AODV-RPL MoP">
  <artwork><![CDATA[
    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |     Type      |      Orig SeqNo       |      Dest SeqNo       |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                                                               |
    |                     TargNode IPv6 Address                     |
    |                                                               |
    |                                                               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  ]]></artwork>
  </figure>
    OrigNode supplies the following information in
    the RREQ option of the RREQ-Instance message: </t>

    <t><list style="hanging">

    <t hangText="Type"><vspace /></t>
	<t>The type of the RREQ option(see <xref target="Option"/>).</t>
    <t hangText="Orig SeqNo"><vspace /></t>
	<t> Sequence Number of OrigNode.</t>
    <t hangText="Dest SeqNo"><vspace /></t>
	<t> If nonzero, the last known Sequence Number for TargNode
	    for which a route is desired.</t>
    <t hangText="TargNode IPv6 Address"><vspace /></t>
	<t> IPv6 address of the TargNode that receives
	    RREQ-Instance message.</t>
	<!-- CEP: Compression should be allowed here also. -->
    </list>
	In order to establish the upstream route from TargNode to OrigNode,
	OrigNode multicasts the RREQ-Instance message (see
	<xref target="figRREQ"/>) to its one-hop neighbours.  In order to
	enable intermediate nodes R_i to associate a future RREP message
	to an incoming RREQ message, the InstanceID of RREQ-Instance MUST 
	assign an odd number.
    </t>

    <t>
	Each intermediate
	node R_i computes the rank for RREQ-Instance and creates a routing
	table entry for the upstream route towards the source if the routing
	metrics/constraints are satisfied.  For this purpose R_i must use the
	asymmetric link metric measured in the upstream direction, from R_i to
	its upstream neighbor that multicasted the RREQ-Instance message.
    </t>

    <t>
	When an intermediate node R_i receives a RREQ message in storing
	mode, it MUST store the OrigNode's InstanceID (RREQ-Instance) 
	along with the other routing information needed to establish the
	route back to the OrigNode. This will enable R_i to determine that
	a future RREP message (containing a paired InstanceID for the TargNode)
	must be transmitted back to the OrigNode's IP address.
    </t>

    <t>
	If the paths to and from TargNode are not known, the intermediate node
	multicasts the RREQ-Instance message with updated rank to its
	next-hop neighbors until the message reaches TargNode
	(<xref target="figPaired-a"/>). Based on the 'S' bit in the received
	RREQ message, the TargNode will decide whether to unicast or
	multicast the RREP message back to OrigNode.
    </t>

    <t>
	As described in <xref target="GRREP"/>, in certain circumstances
	R_i MAY unicast a Gratuitous RREP towards OrigNode, thereby helping
	to minimize multicast overhead during the Route Discovery process.
    </t>
</section>	<!-- End of section "RREQ Message" -->

<section anchor="RREPmsg" title="RREP Message">
    <t> The TargNode supplies the following information in the RREP message:

  <figure anchor="figRREP" title="DIO RREP option format for AODV-RPL MoP">
  <artwork><![CDATA[
   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |     Type      |      Dest SeqNo       | Prefix Sz |T|G| Rsvd  |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                                                               |
  |              TargNode IPv6 Address (when present)             |
  |                                                               |
  |                                                               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  ]]></artwork>
  </figure>
  <list style="hanging">
    <t hangText="Type"><vspace /></t>
	<t> The type of the RREP option (see <xref target="Option"/>)</t>
    <t hangText="Dest SeqNo"><vspace /></t>
	<t> The Sequence Number for the TargNode for which a route is
	    established.</t>
    <t hangText="Prefix Sz"><vspace /></t>
	<t> The size of the prefix which the route to the TargNode is
	    available.  This allows routing to other nodes on the same
	    subnet as the TargNode.</t>
    <t hangText="'T' bit"><vspace /></t>
	<t>'T' is set to true to indicate that the TargNode IPv6 Address
	    field is present</t>
    <t hangText="'G' bit"><vspace /></t>
	<t>(see <xref target="GRREP"/>)</t>
    <t hangText="TargNode IPv6 Address"> (when present)<vspace /></t>
	<t>IPv6 address of the TargNode that receives RREP-Instance message.
	</t>
	</list>
	In order to reduce the need for the TargNode IPv6 Address to be
	included with the RREP message, the InstanceID of the RREP-Instance 
	is paired, whenever possible, with the InstanceID from the RREQ
	message, which is always an odd number.  The pairing is accomplished
	by adding one to the InstanceID from the RREQ message and using that,
	whenever possible, as the InstanceID for the RREP message.  If this
	is not possible (for instance because the incremented InstanceID is
	still a valid InstanceID for another route to the TargNode from
	an earlier Route Discovery operation), then the 'T' bit is set and
	an alternative even number is chosen for the InstanceID of RREP from
	TargNode.

    </t>
    <t>
	The OrigNode IP address for RREQ-Instance is available as the DODAGID 
	in the DIO base message (see <xref target="figDIO"/>).  When TargNode 
	receives a RREQ message with the 'S' bit set to 1 (as illustrated in
	<xref target="figPaired-a"/>), it unicasts the RREP message with the
	'S' bit set to 1. In this case, route control messages and application
	data between OrigNode and TargNode for both RREQ-Instance and
	RREP-Instance are transmitted along symmetric links.  When the 'T' bit
	is set to "1" in the RREP-Instance, then the TargNode IPv6 Address is
	transmitted in the RREP option.  Otherwise, the TargNode IPv6
	Address is elided in the RREP option.
<!-- The first sentence conflicts with the description for DODAGID:

             DODAGID in the DIO object MUST be the IPv6 address of the device
             that initiates the AODV-Instance.
SAT :  DODAGID in the DIO object MUST be the IPv6 address of the device
             that initiates the AODV-Instance.
			 -->
    </t>
    <t>	When (as illustrated in <xref target="figPaired-b"/>) the TargNode
	receives RREQ message with the 'S' bit set to 0, it also multicasts
	the RREP message with the 'S' bit set to 0. Intermediate nodes create
	a routing table entry for the path towards the TargNode while
	processing the RREP message to OrigNode. Once OrigNode receives the
	RREP message, it starts transmitting the application data to TargNode
	along the path as discovered through RREP messages. On the other hand,
	application data from TargNode to OrigNode is transmitted through
	the path that is discovered from RREQ message.
    </t>
</section>	<!-- End of section "RREP Message" -->

<section anchor="GRREP" title="Gratuitous RREP">
    <t>
	Under some circumstances, an Intermediate Node that receives a RREQ
	message MAY transmit a "Gratuitous" RREP message back to OrigNode
	instead of continuing to multicast the RREQ message towards TargNode.
	For these circumstances, the 'G' bit of the RREP option is provided
	to distinguish the Gratuitous RREP sent by the Intermediate node
	from the RREP sent by TargNode.
    </t>
    <t>	
	When an Intermediate node R receives a RREQ message and has recent
	information about the cost of an upstream route from TargNode to R,
	then R MAY unicast the Gratuitous RREP (GRREP) message to OrigNode.
	R determines whether its information is sufficiently recent by
	comparing the value it has stored for the Sequence Number
	of TargNode against the DestSeqno in the incoming RREQ message.
	R also must have information about the metric information of the
	upstream route from TargNode.
	The GRREP message MUST have PrefixSz == 0 and the 'G' bit set to 1.
	R SHOULD also unicast the RREQ message to TargNode, to make sure that
	TargNode will have a route to OrigNode.
    </t>
</section>	<!-- End of section "Gratuitous RREP" -->
<section anchor="Resource1" title="Operation of Trickle Timer">
    <t> The trickle timer operation to control RREQ-Instance/RREP-Instance
	multicast is similar to that in P2P-RPL <xref target="RFC6997"/>.
    </t>
</section>	<!-- End of section "Operation of Trickle Timer" -->
<section anchor="IANA1" title="IANA Considerations">
  <section anchor="AODV-MoP" title="New Mode of Operation: AODV-RPL">
    <t>	IANA is required to assign a new Mode of Operation, named "AODV-RPL"
	for Point-to-Point(P2P) hop-by-hop routing under the RPL registry.
	The value of TBD1 is assigned from the "Mode of Operation" space
	<xref target="RFC6550"/>.
    <figure anchor="figMoP" title="Mode of Operation"><artwork><![CDATA[
         +-------------+---------------+---------------+
         |    Value    |  Description  |   Reference   |
         +-------------+---------------+---------------+
         |   TBD1 (5)  |   AODV-RPL    | This document |
         +-------------+---------------+---------------+
    ]]></artwork></figure></t>
  </section>	<!-- End of section "New Mode of Operation: AODV-RPL" -->

  <section anchor="Option" title="AODV-RPL Options: RREQ and RREP">
  <t>
	Two entries are required for new AODV-RPL options
	"RREQ-Instance" and "RREQ-Instance", with
	values of TBD2 (0x0A) and TBD3 (0x0B) from the "RPL Control Message
	Options" space <xref target="RFC6550"/>.
        <figure anchor="figCtlMsg" title="AODV-RPL Options">
        <artwork><![CDATA[
          +-------------+---------------------+---------------+
          |    Value    |       Meaning       |   Reference   |
          +-------------+---------------------+---------------+
          | TBD2 (0x0A) |     RREQ Option     | This document |
          +-------------+---------------------+---------------+
          | TBD3 (0x0B) |     RREP Option     | This document |
          +-------------+---------------------+---------------+
        ]]></artwork> </figure></t>
  </section>	<!-- End of section "AODV-RPL Options: RREQ and RREP" -->
</section>	<!-- End of section "IANA Considerations" -->

<section anchor="Security" title="Security Considerations">
  <t>	This document does not introduce additional security issues compared
	to base RPL. For general RPL security considerations,
	see <xref target="RFC6550"/>.</t>
     	<!-- Need to consider security implications of G-RREP -->
</section>	<!-- End of section "Security Considerations" -->

<section anchor="future" title="Future Work">
    <t>	It may become feasible in the future to design a non-storing version
	of AODV-RPL's route discovery protocol.  Under the current assumption
	of route asymmetry across bidirectional links, the specification
	is expected to be straightforward.  It should be possible to re-use the
	same methods of incremental construction for source routes within
	analogous fields within AODV-RPL's RREQ and RREP messages as is
	currently done for DAO messages -- in other words the RPL
	messages for DODAG construction.
    </t>
    <t>	There has been some discussion about how to determine the initial
	state of a link after an AODV-RPL-based network has begun operation.
	The current draft operates as if the links are symmetric until
	additional metric information is collected.  The means for making
	link metric information is considered out of scope for AODV-RPL.
	In the future, RREQ and RREP messages could be equipped with new
	fields for use in verifying link metrics.  In particular, it is
	possible to identify unidirectional links; an RREQ received across
	a unidirectional link has to be dropped, since the destination node
	cannot make use of the received DODAG to route packets back to
	the source node that originated the route discovery operation.
	This is roughly the same as considering a unidirectional link to
	present an infinite cost metric that automatically disqualifies it
	for use in the reverse direction.
    </t>
</section>	<!-- End of section "Future Work" -->

</middle>

<back>		<!--  *****BACK MATTER ***** -->
    <!-- References split into informative and normative -->

    <!-- There are 2 ways to insert reference entries from the citation
         libraries:
         1. define an ENTITY at the top, and use "ampersand character" RFC2629;
            here (as shown)
         2. simply use a PI "less than character"?rfc
            include="reference.RFC.2119.xml"?> here
            (for I-Ds:
             include="reference.I-D.narten-iana-considerations-rfc2434bis.xml")

     Both are cited textually in the same manner: by using xref elements.
     If you use the PI option, xml2rfc will, by default, try to find included
     files in the same directory as the including file. You can also define
     the XML_LIBRARY environment variable with a value containing a set of
     directories to search.  These can be either in the local filing system
     or remote ones accessed by http (http://domain/dir/... ).-->

<references title="Normative References">
	<?rfc include='reference.RFC.2119'?>
	<?rfc include='reference.RFC.3561'?>
	<?rfc include='reference.RFC.5548'?>
	<?rfc include='reference.RFC.5673'?>
	<?rfc include='reference.RFC.5826'?>
	<?rfc include='reference.RFC.5867'?>
	<?rfc include='reference.RFC.6550'?>
	<?rfc include='reference.RFC.6552'?>
	<?rfc include='reference.RFC.6997'?>
	<?rfc include='reference.RFC.6998'?>
</references>

<references title="Informative References">
	<?rfc include="reference.I-D.thubert-roll-asymlink" ?>
</references>

<section anchor="appendix-a" title="ETX/RSSI Values to select S bit">
	<t> We have tested the combination of "RSSI(downstream)" and
	    "ETX (upstream)" to decide whether the link is symmetric or
	    asymmetric at the intermediate nodes.  The example of how the ETX
	    and RSSI values are used in conjuction is explained below:
   
	<figure anchor="communication-link"
		title="Communication link from Source to Destination">
        <artwork><![CDATA[
 Source---------->NodeA---------->NodeB------->Destination
        ]]></artwork> </figure></t>
	

	<texttable anchor="table_ETX_RSSI"
		title="Selection of 'S' bit based on Expected ETX value">
	<ttcol align='center'>RSSI at NodeA for NodeB</ttcol>
	<ttcol align='center'>Expected ETX at NodeA for nodeB->nodeA</ttcol>
		
		<c>&gt; -15</c>
		<c>150</c>
		
		<c>-25 to -15</c>
		<c>192</c>
		
		<c>-35 to -25</c>
		<c>226</c>
		
		<c>-45 to -35</c>
		<c>662</c>
		
		<c>-55 to -45</c>
		<c>993</c>
	</texttable>	

<t> We tested the operations in this specification by making the following
    experiment, using the above parameters.
    In our experiment, a communication link is considered as
    symmetric if the ETX value of NodeA->NodeB and NodeB->NodeA (See
    Figure.8) are, say, within 1:3 ratio. This ratio should be taken 
    as a notional metric for deciding link symmetric/asymmetric nature,
    and precise definition of the ratio is beyond the scope of the draft.
    In general, NodeA can only know the ETX value in the direction of
    NodeA -> NodeB but it has no direct way of knowing the value of ETX from
    NodeB->NodeA. Using physical testbed experiments and realistic wireless
    channel propagation models, one can determine a relationship between
    RSSI and ETX representable as an expression or a mapping table.
    Such a relationship in turn can be used to estimate ETX value at nodeA for
    link NodeB--->NodeA from the received RSSI from NodeB.  Whenever nodeA
    determines that the link towards the nodeB is bi-directional asymmetric
    then the "S" bit is set to "S=0".  Later on, the link from NodeA to
    Destination is asymmetric with "S" bit remains to "0".  </t>
</section>
</back>

</rfc>

<!--
    Discussion about Gratuitous RREP.

	There are two routes being discovered, not just one.  So we have to
	decide which route is served by the G-RREP.

	Since the route OrigNode - - -> TargNode is established only
	after the control messages have already reached the TargNode,
	it won't help very much to have any control message optimization
	for the RREP-Instance.  So, the G-RREP should only be used for the
	RREQ-Instance.

	When an intermediate node receives the RREQ message it might indeed
	have a route to the TargNode.  But, the RREQ message is being used
	to establish a route from TargNode - -> OrigNode.
	For the Intermediate Node to send Gratuitous RREP to the OrigNode would
	only make sense if the Intermediate Node knows that the TargNode
	has a route to the Intermediate Node, along with the metric for that
	route.  Since the RREQ message is not being used to establish a
	route from OrigNode - - -> TargNode it does not help if the
	Intermediate Node has a route to the TargNode.
	We should discuss if we want to make the the assumption:
		if A has a route to B, the A knows that B has a route to A.
	Even so, this does not enable G-RREP unless the Intermediate Node A can
	determine the metric for the route from the TargNode Node B to A.
	If A can indeed know the backwards metric, then we have to say how.
  -->
<!--
	More discussion about Gratuitous RREP...

	When the intermediate node R gets a multicast RREQ, then:
	- if R has a route TO the TargNode, then it MAY offer the route
	  to OrigNode.  In this case, R _SHOULD_ also inform TargNode about
	  the route to OrigNode because TargNode may not have a route to
	  OrigNode.
	- if R has a route TO the OrigNode, should it MAY offer the route
	  to TargNode?  BUT: R *always* has a route to OrigNode...?
	  (a) forget about this case.  (b) specify something about whether
	  R has an *improved* route.
	
  -->
<!--
    Things to do:
     - Organize into sections for:
     	- Modified DIO message
	- RREQ option
	- RREP option
	- - - -
     - Explain that the IP address has to be an IPv6 address.
     - Explain 12-bit sequence numbers
     - Organize G-RREP into symmetric and asymmetric cases.
     - Make sure it's O.K. to have a single AODV MoP
     - Make sure it's O.K. to have two "subtypes" of the AODV-instance
     - Address compression between the DODAGID and OrigNode or Dest IP address?
     - Should we have two sections for the DIO message (seems wasteful!)
       -> once for DIO transmitted by OrigNode
       -> once for DIO transmitted by TargNode
     -->
