<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<?rfc subcompact="no"?>
<?rfc authorship="yes"?>
<?rfc tocappendix="yes"?>

<rfc category="std" docName="draft-thubert-roll-asymlink-01" ipr="trust200902">
  <front>
    <title abbrev="draft-thubert-roll-asymlink">RPL adaptation for asymmetrical links</title>


    <author fullname="Pascal Thubert" initials="P" role="editor"
            surname="Thubert">
      <organization abbrev="Cisco Systems">Cisco Systems</organization>

      <address>
        <postal>
          <street>Village d'Entreprises Green Side</street>

          <street>400, Avenue de Roumanille</street>

          <street>Batiment T3</street>

          <city>Biot - Sophia Antipolis</city>

          <code>06410</code>

          <country>FRANCE</country>
        </postal>

        <phone>+33 497 23 26 34</phone>

        <email>pthubert@cisco.com</email>
      </address>
    </author>
    <date />

    <area>Routing Area</area>

    <workgroup>ROLL</workgroup>

    <keyword>Draft</keyword>

    <abstract>
      <t>The Routing Protocol for Low Power and Lossy Networks
	  defines a generic Distance Vector protocol for Low Power and 
	  Lossy Networks, many of which exhibit strongly asymmetrical
	  characteristics. This draft proposes an extension for that 
	  optimizes RPL operations whereby upwards and downwards direction-optimized
	  RPL instances are associated.
	</t>
    </abstract>

    <note title="Requirements Language">
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
      "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
      document are to be interpreted as described in <xref
      target="RFC2119">RFC 2119</xref>.</t>
    </note>
  </front>

  <middle>
    <section title="Introduction">
		<t>The IETF ROLL Working Group has defined
		application-specific routing requirements for a Low Power and Lossy
		Network (LLN) routing protocol, specified in 
		<xref      target="RFC5548"></xref>,  
		<xref      target="RFC5673"></xref>, 
		<xref      target="RFC5826"></xref>, and 
		<xref      target="RFC5867"></xref>,
		many of which explicitly or implicitly refer to links with
		asymmetrical properties.
		</t>
		<t>Upon those requirements, the <xref target="I-D.ietf-roll-rpl"> 
		Routing Protocol for Low Power and Lossy Network</xref> 
		was designed as a platform that can be extended by further specifications or
		guidances, by adding new metrics, Objective Functions, or additional options.</t>
	  
		<t>RPL forms Destination Oriented Directed Acyclic Graphs (DODAGs) within instances
		of the protocol. Each instance is associated with an Objective Function that is 
		designed to solve the problem that is addressed by that instance.</t>
	
		<t>In one hand, RPL requires bi-directional links for the control, but on the other,
		there is no requirement that the properties of a link are the same in both directions.
		In fact, a perfect symmetry is rarely present in Low Power and Lossy Networks (LLNs),
		whether links are based on radios or power-line.</t>
	
		<t>Some initial implementations require that the quality of both directions of a link
		is evaluated as very good so that the link can be used for control and data in both
		directions. This eliminates asymmetrical links that are very good in one direction, 
		but only good enough for scarce activity in the other direction.</t>
	
		<t>In practice, a DAG that is built to optimize upwards traffic is generally not 
		congruent with a DAG that is built to optimize downwards traffic. This is why
		this specification is designed to enable asymmetrical routing DAGs that are bound 
		together to get the maximum benefits of all types of bi-directional links.</t>
 
    </section>

    <section anchor="Terminology" title="Terminology">
      <t>The terminology used in this document is consistent with and
      incorporates that described in `Terminology in Low power And Lossy
      Networks' <xref target="I-D.ietf-roll-terminology"></xref>
	  and <xref target="I-D.ietf-roll-rpl"/>.</t>
	  <t>The term upwards qualifies a link, a DODAG or an instance that is optimal for 
	  sending traffic in the general direction of the root, 
	  though may be usable but suboptimal for traffic coming form the
	  direction of the root. The term downwards
	  qualifies the same words for the opposite direction.</t>
	  
	  <t>The term parenting applied to instances refers to the directional association 
	  of two instances. The meta graph formed by parented instances must be a DAG. Traffic
	  may be transferred from an instance onto a parent instance under specified 
	  circumstances.
	  </t>
	  <t> The draft also uses the following terminology:
	  <!--
	  
	o	bi-directional
			(traffic confirmed possible in both direction)

	o	uni-directional
			(traffic confirmed possible only in one direction)

	o	symmetric
			(bi-directional, with identical link characteristics in both directions)

	o	asymmetric
			(bi-directional, with different link characteristics in both directions)


	  -->
	  <list style="hanging">
            <t hangText="bi-directional:"> A link is bi-directional when traffic confirmed possible in both direction,
			in a fashion that is sufficient to operate RPL control.
			</t>
            <!--t hangText="uni-directional:">traffic confirmed possible only in one direction
			</t>
            <t hangText="symmetric:">bi-directional, with identical link characteristics in both directions
			</t -->
            <t hangText="asymmetric:"> A link is assymetric if it is bi-directional, but exhibits important differences
			in link characteristics for both directions.
			</t>
	  </list>
	  </t>
	  
    </section>
	
    <section title="The asymmetrical link problem">
		  
    </section>
	
	
    <section title="Solution Overview">
		  
		<t>With the core RPL specification, <xref target="I-D.ietf-roll-rpl"/>
		each instance is a separate routing topology, and packets must 
		be forwarded within the same topology / same instance.  One direct
		consequence of that design choice is that a topology must be very
		good for both upwards and downwards traffic; otherwise, traffic between
		two nodes in the instance may suffer.
		</t>
		   
		<t>RPL is designed to operate on bi-directional links. When 
		the link properties do not widely differ between the upwards
		and the downwards directions, a single DAG is adequate as the routing 
		topology for both upwards and downwards traffic. In that case,
		an asymmetrical link, that can only be used for traffic in one direction,
		can not participate to the routing topology. This results in an
		unoptimized use of bandwidth and/or a reduction of the possible path diversity.
		</t>
		<t>
		This issue can be addressed with <xref target="I-D.ietf-roll-rpl"/>,
		by constructing two DAGs, one that is used for upwards traffic and one
		that is used for downwards traffic. This solves the issue for all traffic
		that transits through the root of the DODAG, whether it is originated
		in the DODAG going out or is injected into the DODAG from the outside,
		since in both cases a packet will mostly use the asymmetric links in the
		appropriate direction.
		</t>
		<t>OTOH, with RPL as it is specified, a packet follows the topology that
		is generated for its instance all the way through a DAG, and transferring
		a packet from an instance to another is not permitted.
		As a result, the 2 DAGs solution would penalize Peer to peer traffic that would
		have to go through the root in order to leave the upward instance and then reenter
		at the root in order to join the downwards instance.
		This is not an issue in non-storing mode since the 	packet has to go through the
		root to load the routing header downwards anyway, but going through the root 
		stretches the path in storing mode.
		</t>
		<t>In order to benefit from both instances and yet avoid extra stretch through the
		root in storing mode, it is required to extend RPL rules so as to allow traffic to be
		transferred from one instance to the next before reaching the root on the way up.
		This document specifies conditions under which 2 instances can be bound together
		so that a node may transfer traffic from an instance onto another.
		</t>
		   
		<t>It can be noted at this point that with <xref target="I-D.ietf-roll-rpl"/>,
		traffic that goes down does not generally go back up again, whereas P2P 
		traffic within a DODAG might go up to a common parent and then down
		to the destination. In terms of instance relationship, this means
		that when an upwards and a downwards instances are bound together,
		traffic from the former may be transferred to the latter, but not
		the other way around.  In other words, there is an order, a
		parent-child relationship, between the two instances.
		</t>
		
		<t>Additionally, if there is no next-hop for a packet going down within 
		the instance, then with <xref target="I-D.ietf-roll-rpl"/> the packet 
		will be dropped or sent back with an error along the wrong direction
		of an asymmetric link. In order to avoid those unwanted behaviors, it is
		tempting though inefficient to lower the constraints that are applied
		to build the topology. It can be more efficient to actually keep the
		constraints as they should be, but, instead, enable a less constrained,
		more spanning, fall-back topology into which traffic can be transferred.
		</t>
		
		<t>For that reason, this solution allows for more complex instance
		relationships than plain child-parent associations.  In order to
		avoids loops which could be created when transferring packets from
		one instance to the next, this solution requires that the instances
		be themselves organized as a Directed Acyclic Graph, and
		enforce that inter-DAG transfers occur only within that meta DAG.
		</t>
		
	</section>
		
		
	   <section anchor="DAGInformationObject"
             title="Modified DODAG Information Object (DIO)">
        <t>The DODAG Information Object  <xref target="I-D.ietf-roll-rpl"/> 
		carries information that allows a node to discover a RPL Instance, 
		learn its configuration parameters, select a DODAG parent set, and 
		maintain the DODAG. This specification defines a new flag bit to 
		indicate that the DAG is directional.</t>

          <t><figure anchor="DIObase" title="The DIO Base Object">
              <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|D| MOP | Prf |     DTSN      |     Flags     |   Reserved    |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                                                               |
    +                                                               +
    |                                                               |
    +                            DODAGID                            +
    |                                                               |
    +                                                               +
    |                                                               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |   Option(s)...
    +-+-+-+-+-+-+-+-+
]]></artwork>
            </figure></t>

        <t><list hangIndent="6" style="hanging">
            <t hangText="Directional (D):">The Directional (D) flag is set
            to indicate that the instance is intended for directional operation,
			and reset otherwise. When it is set, a MOP of 0 indicates the
			upwards direction whereas any other value specified in
			<xref target="I-D.ietf-roll-rpl"/> indicates downwards.
			All other values of MOP will be considered downwards unless
			explicitly specified otherwise.</t>

        </list></t>

    </section>

		
    <section title="Operations">
		<t>This specification allows an organization of Instances as follows:
		<list>
			<t>Instances MUST be organized as a Directed Acyclic Graph. This
			information MUST be commissioned into the devices so they know both
			which instances they should participate in, and which  direction of 
			transfer is allowed between instances.</t>
			
			<t>A spanning instance using OF0 <xref target="I-D.ietf-roll-of0"/> 
			MAY be used as root in that instance DAG.</t>
		</list>
		
		</t>
		<t>This specification defines a new bit in the 
		<xref target="I-D.ietf-roll-rpl">RPL</xref>
		DODAG Information Object (DIO) with the Directional (D) flag that 
		indicates a directional operation for a given instance.
		An implementation that does not support that new bit will not be able to
		propagate it. </t>
		<t>In case of a directional operation, 
		<list>
			<t>The direction is indicated by the MOP field, a MOP of 0 means upwards
			and otherwise is downwards.</t>
			<t>Links are still REQUIRED to allow bidirectional operations</t>
			<t>Only the metrics that correspond to the DAG direction are used for
			the parent selection. </t>
			<t>An upward instance SHOULD install routes that lead to the root and beyond - 
			typically the default route. </t>
			<t>A downwards instance MAY ONLY install more specific routes that are
			injected by nodes in the DODAG through the DAO process.</t>
			<t>P2P operations are achieved by associating a child upwards instance with
			a parent downwards instance.</t>
			<t>A packet MUST NOT be transferred from a parent instance to a child instance. </t>
			<t>A packet MAY be transferred from a child instance to its parent instance 
			if and only if the child instance does not provide a route to the destination, 
			or the parent instance provides a more specific route (longer match) to the
			destination.
			</t>
			<t>Transferring from an upwards instance to a downwards instance if generally
			desirable. Other forms of transfers are generally not desirable. Policies
			MAY be put in place to ovreride that general guidance.
			</t>
			
		</list>
		</t>
    </section>
	
 
	
    <section anchor="back" title="Backward compatibility">
		<t>An OF is generally designed to compute a Rank of a directional
		link in a fashion that is diffent from a bidirectional link, and 
		in particular will not use the same metrics and thusobtain different
		ranks for a same situation. For that 
		reason, it is important that the OF is aware that an instance is
		supposed to define a directional DODAG, and it is RECOMMENDED that 
		only devices that support directional DODAGs are allowed in a directional
		instance. </t>
		<t>It might happen that for some purposes like higher availability,
		an implementation that does not support directional links is administratively 
		allowed to join a directional DODAG. In that case, the extension of the DODAG that starts
		at that device will not be directional, but the instance will still be functional. </t>
		<t>In that case, it might also happen that a device that supports directional DODAGs
		per this specification sees candidate neighbors that expose the Directional flag
		and some others that do not. An OF that supports directional links
		SHOULD favor directional links over non directional links, in a fashion
		that is to be specified with the OF. In the case of <xref target="I-D.ietf-roll-of0">
		OF0 </xref>, the 'D' flag should be accounted for before the computation of item 8
		in the "Selection Of The Preferred Parent" section 4.2.1., that is before Ranks and
		be calculated and compared.
		</t>
    </section>	
 
	
    <section anchor="IANA" title="IANA Considerations">
	<t>This specification requires that a bit in DIO be assigned to
    indicate directional link operations as specified in section </t>
	
        </section>
		
    <section anchor="Sec" title="Security Considerations">
      <t>Security Considerations for this proposal are to be developed in accordance
      with recommendations laid out in, for example, <xref
      target="I-D.tsao-roll-security-framework"></xref>.</t>
    </section>
    <section anchor="Acknowledgements" title="Acknowledgements">

      <t>The author wishes to recognize Richard Kelsey, JP Vasseur, Tom Phinney, Robert Assimiti,
	  Don Sturek, Thomas Clausen and Yoav Ben-Yehezkel for their various contributions.</t>
    </section>

  </middle>

  <back>
    <references title="Normative References">
      <?rfc include="reference.RFC.2119"?>
      <?rfc include='reference.I-D.ietf-roll-rpl.xml'?>
      <?rfc include='reference.I-D.ietf-roll-terminology.xml'?>
    </references>

    <references title="Informative References">

      <?rfc include='reference.I-D.ietf-roll-of0.xml'?>

      <?rfc include="reference.RFC.5548"?>
      <?rfc include="reference.RFC.5673"?>
      <?rfc include="reference.RFC.5826"?>
      <?rfc include="reference.RFC.5867"?>
	  
      <?rfc include='reference.I-D.tsao-roll-security-framework.xml'?>


    </references>


  </back>
</rfc>
