<?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="no"?>
<?rfc subcompact="no"?>
<?rfc authorship="yes"?>
<?rfc tocappendix="yes"?>

<rfc category="std" ipr="trust200902" docName="draft-papadopoulos-roll-dis-mods-use-cases-01">


<front> 

    <title abbrev="DIS Modifications use cases">Use cases for DIS Modifications</title>
   
    <author fullname="Georgios Papadopoulos">
      <organization>IMT Atlantique</organization>
        <address>         
          <postal> 
           <street>2 rue de la Chataigneraie</street>
           <street>CS 17607</street>
           <city>Cesson-Sevigne Cedex</city>
            <code>35576</code>
            <country>France</country>
          </postal>
          <email>georgios.papadopoulos@imt-atlantique.fr</email>
        </address>
    </author>


   <date/>

   <workgroup>ROLL</workgroup>


<abstract>
	<t>
   		This document presents use-cases which call for DIS flags and options 
   		modifications.
	</t>
</abstract>
   

</front>

<middle>



<!--section title="TEMPORARY EDITORIAL NOTES">

   <t>
		This document is an Internet Draft, so it is work-in-progress by nature.
   		It contains the following work-in-progress elements:
   </t>	
     		 
   <t>
   	<list style="symbols">
		<t>"TODO" statements are elements which have not yet been written by the authors 
		for some reason (lack of time, ongoing discussions with no clear consensus, etc).
		The statement does indicate that the text will be written at some time.</t>
   	</list>
   </t>
   		 
</section --> 



<section title="Introduction">

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






<!-- INTEREST OF OAM          -->
<section title="Applications">
	<t>
		This section details some use cases that require DIS modifications compared to the behaviour currently defined in  <xref target="RFC6550"/>.
   		The first use case is thatof a new leaf node joining an established DAG in an energy 
   		efficient manner.
   		The second use case describes why node might want to use DIS to identify defunct DAGs for which it 
   		still maintains state.
		The third use case describes the need for adjacency probing and how DIS can used for that.
	</t>



	<section title="A Leaf Node Joining a DAG">
                <t>
			This use case is typically of a smart meter being replaced in the field,
			while a RPL network is operating and stable.
			The new smart meter must join the network quickly, without draining the energy of the surrounding
			nodes, be they battery-operated RPL routers or leaf nodes.
			In this use case, the issues with the current RPL specification are
		    <list style="symbols">
            	    <t>
                    Just waiting for a gratuitous DIO may take a long time if the Trickle timers have relaxed to the steady state.
	            A technician who has just installed the new meter needs to positively assess that the meter has joined the network
	            before it leaves the premise. It is not economically viable to ask the technician to standby the meter until
	            a gratuitous DIO has arrived, which may take hours.
                    </t>
                
                    <t>
                    If the meter sends a DIS, it needs to do so using multicast, because it has no knowledge of its surroundings.
	            Sending a multicast DIS is considered an inconsistency by the nearby RPL routers.
	            They will reset their Trickle timer to the shortest period.
		    This will trigger sending a stream of DIOs until the Trickle timers relax again.
	            The DIOs will be sent in multicast, which will trigger energy expenditure at nearby nodes,
		    which had no need for the DIOs.
                    </t>
                
                    </list>
		</t>
		<t>
			A proposed solution could be the following.
			A new leaf node that joins an established LLN runs an iterative
   			algorithm in which it requests (using multicast DIS) DIOs from
   			routers belonging to the desired DAG.
		</t>
		
		<t>
			The DIS message has the "No Inconsistency" flag set to prevent resetting of 
			Trickle timer in responding routers, thereby keeping the aggregated number of 
			transmissions low.  
			It also has the "DIO Type" flag set to make responding routers send unicast 
			DIOs back, thereby not triggering full reception in nearby nodes that have 
			state-of-the- art radio receivers with hardware-based address filtering.
		</t>
		
		<t>
			The DIS message can include a Response Spreading option prescribing a
   			suitable spreading interval based on the expected density of nearby
   			routers and on the expected Layer 2 technology.
		</t>
		
		<t>
			The DIS will likely include a Metric Container listing the routing
   			constraints that the responding routers must satisfy in order to be
   			allowed to respond <xref target="RFC6551"/>.
		</t>

		<t>
			At each iteration, the node multicasts such a DIS and waits for forthcoming 
			DIOs.
   			After a time equal to the spreading interval, the node considers the current 
   			iteration to be unsuccessful.  
   			The node consequently relaxes the routing constraints somewhat and proceeds to
   			the next iteration.
		</t>
		
		<t>
			The cycle repeats until the node receives one or more DIOs or until it has 
			relaxed the constraints to the lowest acceptable values.
		</t>
		
		<t>
			This algorithm has been proven in the field to be extremely energy-efficient, 
			especially when routers have a wide communication range.
		</t>
	</section>



	<section title="Identifying A Defunct DAG">
		<t>
			A RPL node may remove a neighbor from its parent set for a DAG for a number 
			of reasons:
			
			<list style="symbols">
            	<t>
                    The neighbor is no longer reachable, as determined using a mechanism 
                    such as Neighbor Unreachanility Detection (NUD) <xref target="RFC4861"/>, 
                    Bidirectional Forwarding Detection (BFD) <xref target="RFC5881"/> or L2 triggers <xref target="RFC5184"/>; or
                </t>
                
                <t>
                    The neighbor advertises an infinite rank in the DAG; or
                </t>
                
                <t>
                    Keeping the neighbor as a parent would required the node to increase 
                    its rank beyond L + DAGMaxRankIncrease, where L is the minimum rank 
                    the node has had in this DAG; or
                </t>
                
                <t>
                    The neighbor advertises membership in a different DAG within the same 
                    RPL Instance, where a different DAG is recognised by a different 
                    DODAGID or a different DODAGVersionNumber.
                </t>
            </list>
		</t>
		
		
		<t>
			Even if the conditions listed above exist, a RPL node may fail to remove a 
			neighbor from its parent set because:
			
			<list style="symbols">
            	<t>
                    The node may fail to receive the neighbor's DIOs advertising an 
                    increased rank or the neighbor's membership in a different DAG;
                </t>
                
                <t>
                    The node may not check, and hence may not detect, the neighbor's 
                    unreachability for a long time.  
                    For example, the node may not have any data to send to this neighbor 
                    and hence may not encounter any event (such as failure to send data to 
                    this neighbor) that would trigger a check for the neighbor's reachability.
                </t>
            </list>
		</t>


		<t>
			In such cases, a node would continue to consider itself attached to a DAG even 
			if all its parents in the DAG are unreachable or have moved to different DAGs. 
			Such a DAG can be characterized as being defunct from the node's perspective.  
			If the node maintains state about a large number of defunct DAGs, such state 
			may prevent a considerable portion of the total memory in the node from being 
			available for more useful purposes.
		</t>
		
		
		<t>
			To alleviate the problem described above, a RPL node may invoke the following 
			procedure to identify a defunct DAG and delete the state it maintains for 
			this DAG. 
			Note that, given the proactive nature of RPL protocol, the lack of data 
			traffic using a DAG can not be considered a reliable indication of the DAG's 
			defunction.  
			Further, the Trickle timer based control of DIO transmissions means the 
			possibility of an indefinite delay in the receipt of a new DIO from a 
			functional DAG parent. 
			Hence, the mechanism described here is based on the use of a DIS message to 
			solicit DIOs about a DAG suspected of defunction.
			Further, a multicast DIS is used so as to avoid the need to query each parent 
			individually and also to discover other neighbor routers that may serve as 
			the node's new parents in the DAG.
		</t>
		
		
		<t>
			When a RPL node has not received a DIO from any of its parents in a DAG for 
			more than a locally configured time duration:
		</t>
		
		
		<t>
			<list style="symbols">
				<t>
					The node generates a multicast DIS message with:
					<list style="symbols">
						<t>
							the "No Inconsistency" flag set so that the responding routers
         					do not reset their Trickle timers.
						</t>
						<t>
							the "DIO Type" flag not set so that the responding routers send 
							multicast DIOs and other nodes in the vicinity do not need to 
							invoke this procedure.
						</t>
						<t>
							a Solicited Information option to identify the DAG in question. 
							This option must have the I and D flags set and the 
							RPLInstanceID/DODAGID fields must be set to values identifying 
							the DAG. 
							The V flag inside the Solicited Information option should not 
							be set so as to allow the neighbors to send DIOs advertising 
							the latest version of the DAG.
						</t>
						<t>
							a Response Spreading option specifying a suitable time interval 
							over which the DIO responses may arrive.
						</t>												
         			</list>
				</t>
			</list>
		</t>
		
		
		<t>
			<list style="symbols">
				<t>
					After sending the DIS, the node waits for the duration specified inside 
					the Response Spreading option to receive the DIOs generated by its 
					neighbors.  
					At the conclusion of the wait duration:
					<list style="symbols">
						<t>
							If the node has received one or more DIOs advertising newer 
							version(s) of the DAG, it joins the latest version of the DAG, 
							selects a new parent set among the neighbors advertising the 
							latest DAG version and marks the DAG status as functional.
						</t>
						<t>
							Otherwise, if the node has not received a DIO advertising the
         					current version of the DAG from a neighbor in the parent set,
         					it removes that neighbor from the parent set.  
         					As a result, if the node has no parent left in the DAG, it 
         					marks the DAG as defunct and schedule the deletion of the 
         					state it has maintained for the DAG after a locally configured 
         					"hold" duration.  
         					(This is because, as per RPL specification, when a node no 
         					longer has any parents left in a DAG, it is still required to 
         					remember the DAG's identity (RPLInstanceID, DODAGID, 
         					DODAGVersionNumber), the lowest rank (L) it has had in this 
         					DAG and the DAGMaxRankIncrease value for the DAG for a certain 
         					time interval to ensure that the node does not join an earlier 
         					version of the DAG and does not rejoin the current version of 
         					the DAG at a rank higher than L + DAGMaxRankIncrease.)
						</t>												
         			</list>
				</t>
			</list>
		</t>
	</section>
	
	
	
	<section title="Adjacencies probing with RPL">
		<t>
			RPL avoids periodic hello messaging as compared to other distance vector 
			protocols.
			It uses trickle timer based mechanism to update configuration parameters.
			This significantly reduces the RPL control overhead.
			One of the fallout of this design choice is that, in the absence of regular 
			traffic, the adjacencies could not be tested and repaired if broken.
		</t>
		
		<t>
		   RPL provides a mechanism in the form of unicast DIS to query a particular node 
		   for its DIO.
		   A node receiving a unicast DIS MUST respond with a unicast DIO with 
		   Configuration Option.
		   This mechanism could as well be made use of for probing adjacencies and certain 
		   implementations such as Contiki uses this.
		   The periodicity of the probing is implementation dependent, but the node is 
		   expected to invoke probing only when
		</t>

        <t>		
			<list style="symbols">
        		<t>
					There is no data traffic based on which the links could be tested.
            	</t> 
            	
            	<t>
            		There is no L2 feedback.  In some case, L2 might provide periodic 
            		beacons at link layer and the absence of beacons could be used for 
            		link tests.
            	</t>
        	</list>
        </t>

		<section title="Deliberations">
        	<t>
				<list style="symbols">
					<t>
						Should the probing scheme be standardized?  
						In some cases using multicast based probing may prove advantageous.
					</t>
					
					<t>
						In some cases using multicast based probing may prove advantageous.
						Currently RPL does not have multicast based probing.
						Multicast DIS/DIO may not be suitable for probing because it 
						could possibly lead to change of states.
					</t>
				</list>
			</t>
		</section>
	</section>
		
</section>




      
      
</middle>

<back>
   
   <!--
    <references title="Normative References">
    </references>
    -->
   
   <references title="Informative References">
		<?rfc include='reference.RFC.2119'?> <!-- Terminology -->
		<?rfc include='reference.RFC.6550'?> <!-- RPL base -->
		<?rfc include='reference.RFC.4861'?> <!-- RPL 4861 -->
		<?rfc include='reference.RFC.5881'?> <!-- RPL 5881 -->
		<?rfc include='reference.RFC.5184'?> <!-- RPL 5184 -->		
		<?rfc include='reference.RFC.6551'?> <!-- RPL metrics -->  
   </references>
   
   
   

</back>

</rfc>


























