<?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 authorship="yes"?>
<?rfc tocappendix="yes"?>
<rfc category="std" docName="draft-ko-roll-mix-network-pathology-01" ipr="trust200902">

  <front>

    <title abbrev="draft-ko-roll-mix-network-pathology">RPL Routing
    Pathology In a Network With a Mix of Nodes Operating in Storing
    and Non-Storing Modes</title>

    <author fullname="JeongGil Ko" initials="J.K." surname="Ko">
      <organization>Electronics and Telecommunications Research Institute</organization>
      <address>
	<postal>      
          <street>218 Gajeong-Ro</street>
          <city>Yuseong-Gu</city>
          <region>Daejeon</region>
          <code>305-700</code>
	  <country>Korea</country>    
	</postal>
	<phone>+82-42-860-5824</phone>
	<email>jeonggil.ko@etri.re.kr</email>
      </address>
    </author>
    
    <author fullname="Jongsoo Jeong" initials="J.J." surname="Jeong">
      <organization>Electronics and Telecommunications Research Institute</organization>
      <address>
	<postal>      
          <street>218 Gajeong-Ro</street>
          <city>Yuseong-Gu</city>
          <region>Daejeon</region>
          <code>305-700</code>
	  <country>Korea</country>    
	</postal>
	<phone>+82-42-860-1806</phone>
	<email>jsjeong@etri.re.kr</email>
      </address>
    </author>

    <author fullname="Jongjun Park" initials="J.P." surname="Park">
      <organization>Electronics and Telecommunications Research Institute</organization>
      <address>
	<postal>      
	  <street>218 Gajeong-Ro</street>
	  <city>Yuseong-Gu</city>
	  <region>Daejeon</region>
	  <code>305-700</code>
	  <country>Korea</country>    
	</postal>
	<phone>+82-42-860-5413</phone>
	<email>juny@etri.re.kr</email>
      </address>
    </author>

    <author fullname="Jong Arm Jun" initials="J.J." surname="Jun">
      <organization>Electronics and Telecommunications Research Institute</organization>
      <address>
	<postal>      
          <street>218 Gajeong-Ro</street>
          <city>Yuseong-Gu</city>
          <region>Daejeon</region>
          <code>305-700</code>
	  <country>Korea</country>    
	</postal>
	<phone>+82-42-860-4835</phone>
	<email>jajun@etri.re.kr</email>
      </address>
    </author>

    <author fullname="Naesoo Kim" initials="N.K." surname="Kim">
      <organization>Electronics and Telecommunications Research Institute</organization>
      <address>
	<postal>      
          <street>218 Gajeong-Ro</street>
          <city>Yuseong-Gu</city>
          <region>Daejeon</region>
          <code>305-700</code>
	  <country>Korea</country>    
	</postal>
	<phone>+82-42-860-5214</phone>
	<email>nskim@etri.re.kr</email>
      </address>
    </author>

    <author fullname="Omprakash Gnawali" initials="O.G." surname="Gnawali">
      <organization>University of Houston</organization>
      <address>
        <postal>
          <street>PGH 577, University of Houston</street>
          <city>Houston</city>
          <region>TX</region>
          <code>77204</code>
          <country>USA</country>
        </postal>
        <phone>+1-713-743-3356</phone>
        <email>gnawali@cs.uh.edu</email>
      </address>
    </author>

    <date day="20" month="Oct" year="2012" />
    <area>Routing Area</area>
    <workgroup>Networking Working Group</workgroup>
    <keyword>Draft</keyword>

    <abstract>
        <t>The RPL specification allows nodes running with storing or
        non-storing modes to operate in the same network. We describe
        how such a mix can result in network partitioning even when
        there are plenty of physical links available in the network.
        The partitioning affects both upwards (nodes to root) and
        downwards (root to leaf) traffic. This routing pathology stems
        from a recommendation made in the RPL specification forcing
        nodes with different modes of operation to join the RPL
        network as leaf nodes only. We propose a solution that
        modifies RPL by mandating that all the nodes parse and
        interpret source routing headers and storing mode nodes to
        sometimes act like a non-storing mode root by attaching source
        routing headers.</t> </abstract>

  </front>

  <middle>

    <section title="Introduction">

      <t>RPL <xref target="RFC6550"></xref> can operate in storing and
      non-storing modes. These modes introduce two different ways to
      perform downward routing. Downward routing is used when a node
      needs to send a packet to an arbitrary node (e.g., non-DODAG
      root node) in the network: the packet can go from a node
      "upward" towards the root and "downwards" to the final
      destination.</t>

      <t>The RPL specification allows operating a network with a mix
      of storing and non-storing modes. RFC 6550 describes special
      rules to operate such a network: a node that operates with a
      different Mode of Operation (MOP) than the DODAG root will act
      as a leaf node in the network. The consensus was that it is
      unknown if the network would work properly because no one had
      designed such a network and was left to be explored in the
      future.</t>

      <t>In this draft, we document a case in which we allow a mix of
      nodes operating in storing and non-storing modes to form a
      single network (e.g, despite having different MOPs) and
      introduce that RPL's two downwards routing modes, as it is, can
      cause a routing pathology. This pathology can partition the
      network, i.e., it can result in scenarios where nodes cannot
      send packets to the root and the root cannot send packets to the
      nodes even though these nodes have plenty of physical
      connectivity in the network.</t>

      <t>We propose one approach of modifying RPL to prevent this
      routing pathology. The methodology, introducing a new mode of
      operation (MOP), has been implemented and tested on an LLN
      testbed and in process of publication. It is possible there are
      more elegant approaches to prevent the pathology described.</t>

    </section>

    <section 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">RFC 2119</xref>.</t>

      <t>The terminologies used in this document are consistent with
      the terminologies described in <xref
      target="I-D.ietf-roll-terminology"></xref>, <xref
      target="RFC6551"></xref>, and <xref
      target="RFC6550"></xref>.</t>


    </section>


    <section title="Storing and Non-storing modes">

    <t>Before we describe the routing pathology that arises due to the
    existence of a mix of nodes operating in storing and non-storing
    modes, we review the storing and non-storing downwards routing
    modes that RPL introduces.</t>

    <t>In Storing mode, a node keeps a (not necessarily) complete list
    of (nodid, nexthop) for nodes in its subtree. When a node receives
    a packet, it forwards the packet to the nexthop if the node finds
    the destination in the list. If it does not find the destination
    in the list, it forwards the packet to the preferred parent.</t>

    <t>In Non-storing mode, if a packet does not have routing path in
    the header, it forwards the packet to the preferred parent. The
    root in this mode collects and maintains topology information of
    the network. If the packet makes it to the root, the root computes
    the path to the destination based on this topology information.
    The root puts this path in the header and sends it to the next
    hop. The nodes, upon receiving a packet with a path in the header,
    forward the packet to the next hop as indicated in the path in the
    header.</t>


    </section>

    <section title="Routing Pathology">

    <t>We first examine the effect of this routing pathology for
    routing collection traffic packets. Lets consider the following
    network topology.</t>

    <t>A -> B -> N -> S -> Root (Storing)</t>

    <t>Note that RPL indicates that, storing mode nodes and
    non-storing mode nodes use a different mode of operation (MOP)
    field. Furthermore, if the MOP supported from a DODAG root is not
    supported at a RPL node, the node can only participate in the RPL
    network as a leaf node. Say that the Root of the topology is a
    storing mode node. In this case, S (e.g., a storing mode node) can
    connect to the Root (a storing mode root) properly as a RPL router
    node. On the other hand, using the DIOs initiated at the Root, N
    (e.g., a non-storing mode node) will notice that the Root's MOP
    and its MOP is different; therefore, will only connect join the
    RPL network as a leaf node. As a result, A and B, which physically
    have connections to the root will not be able to join the RPL
    network. Thus, there is needless network partitioning. While this
    is an extreme case, other cases where using routes that
    non-storing mode nodes provide can help optimize the collection
    routes that RPL nodes form.</t>

    <t>Next, we examine the routing pathology for downwards traffic
    packets. Lets consider the same topology as above.</t>

    <t> Say that we eliminate the rule that RPL introduces of forcing
    nodes with different MOPs to act as leaf nodes (e.g., no other
    modifications). In this case, A and B will be able to forward
    their collection traffic using N. Nevertheless, think of the case
    where N wants to send a packet to A. Since N is a non-storing mode
    node, N sends this packet to S because S is the preferred
    parent. S is operating in storing mode so it looks up node A in
    its forwarding table and finds that the next hop to reach A is
    using node N. With the assumption that node N will also know how
    to reach node A it will forward the packet back to node N. N is
    operating in non-storing mode so without a source routing header,
    it will forward the packet back to S. Thus the packet bounces
    between N and S.  Optionally, when using the RPL routing headers,
    an ICMPv6 error message will be initiated.</t>

    <t>With the increasing diversity of applications we can envision a
    network where a part of the network consists of computationally
    powerful nodes with route storing capabilities and the other part
    of the network with low-resource nodes that use a non-storing mode
    and operate together in a single RPL network. Furthermore, on a
    practical perspective, it is meaningful to use nodes that can
    contribute in constructing a more efficient DODAG that optimizes
    the data collection process rather than ignoring a node just
    because it supports a different MOP. Unfortunately, in such cases,
    the pathology that we discuss above can arise and cause downwards
    packets to be dropped and even more, restrict the formation of
    efficient collection routes.</t>

    </section>

    <section title="Fixing the Pathology">

    <t>We describe one way to fix RPL to prevent the pathology
    described above, while acknowledging that there might be more
    elegant solutions. In this approach, we acknowledge the fact that
    non-storing mode nodes are more likely to have strict resource
    limitations compared to nodes implementing the storing
    mode. Therefore, we make sure that the most of the required
    additional capabilities occur at the storing mode nodes rather
    than the non-storing mode nodes.</t>

    <t><list style="numbers">

      <t>A new mode of operation (MOP) that allows a node to choose
      either to implement the storing or non-storing features, or
      both. The changes below are made compared to the original
      storing and non-storing modes.</t>

      <t>Require storing and non-storing nodes to implement source
      routing header parsing capabilities.</t>

      <t>RPL DODAG Root nodes supporting this MOP should have the
      capability to store routes (similar to the non-storing mode
      option) and also identify storing mode node children nodes.</t>

      <t>Non-storing nodes send hop-by-hop DAO.</t>

      <t>Storing nodes keep a table of all the DAO senders and a flag
      indicating if each of those sender is operating in storing or
      non-storing mode. This requires allocating one of the bits in
      the DAO message for a node to indicate if it is operating in
      storing or non-storing mode.</t>

      <t>Change the forwarding mechanism in the storing mode node when
      it receives a downward bound packet:</t>

      <t><list style="numbers">

	<t>If packet does not have source routing header and the next
	hop is a storing-mode node, forward as in <xref
	target="RFC6550"></xref>. If the next hop is a non-storing
	node, insert the source routing header <xref
	target="RFC6554"></xref> into the packet and forward, i.e.,
	act like a non-storing root.</t>

	<t>Using the flag indicating the storing status of nodes in
	its sub-DODAG, a node constructing a source routing header MAY
	choose to construct a source routing header only up to the
	next storing mode node.</t>

	<t>If the incoming packet has a source routing header, a
	storing mode node SHOULD obey the route specified in the
	source routing header to comply with the strict source routing
	requirements in <xref target="RFC6554"></xref>.</t>

	<!--
	<t>If the packet has a source routing header and the next hop
	is a storing mode node, the node can keep the header intact
	and forward or remove the source routing header from the
	packet and forward.</t>

	<t>If the packet has a source routing header and the next hop
	is a non-storing node, then either retain the received source
	routing header or create a new source routing header and
	forward the packet.</t>
	-->

      </list></t>
    </list></t>

    <t>If there is a mix of storing and non-storing nodes, we should
    also be more aggressive about loop detection. More aggressive loop
    detection will quickly remove the looping packets from the
    network. Even with the implementation of this suggestion, nodes
    beyond storing / non-storing nodes will still remain
    unreachable.</t>
    </section>



    <section anchor="Acknowledgements" title="Acknowledgements">
      <t></t>
    </section>

    <section anchor="IANA" title="IANA Considerations">
      <t> </t>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>Future work.</t>

    </section>
  </middle>

  <!--  *****BACK MATTER ***** -->

  <back>
    <references title="Normative References">
      <?rfc include="reference.RFC.2119"?>
      <?rfc include="reference.RFC.6550"?>
      <?rfc include='reference.RFC.6551'?>
      <?rfc include="reference.RFC.6554"?>
    </references>

    <references title="Informative References">
      <?rfc include='reference.I-D.draft-ietf-roll-terminology-05.xml'?>
</references>


  </back>
</rfc>
