<?xml version="1.0" encoding="utf-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version  -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY RFC2119 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC6206 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6206.xml">
<!ENTITY RFC6550 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6550.xml">
<!ENTITY RFC6553 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6553.xml">
<!ENTITY RFC6554 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6554.xml">
<!ENTITY RFC8174 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC4861 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4861.xml">
<!ENTITY RFC5184 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5184.xml">
<!ENTITY RFC6202 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6202.xml">
<!ENTITY RFC7102 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7102.xml">
<!ENTITY RFC7228 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7228.xml">
<!ENTITY RFC7416 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7416.xml">
]>

<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>

<rfc ipr="trust200902" docName="draft-ietf-roll-rnfd-06" category="std">

  <front>
    <title abbrev="RNFD">RNFD: Fast border router crash detection in RPL</title>

    <author initials="K." surname="Iwanicki" fullname="Konrad Iwanicki">
      <organization>University of Warsaw</organization>
      <address>
        <postal>
          <street>Banacha 2</street>
          <city>Warszawa</city>
          <code>02-097</code>
          <country>Poland</country>
        </postal>
        <phone>+48 22 55 44 428</phone>
        <email>iwanicki@mimuw.edu.pl</email>
      </address>
    </author>

    <date year="2025" month="February" day="20"/>

    <area>Internet</area>
    <workgroup>ROLL</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>By and large, a correct operation of a RPL network requires border routers to be up.
In many applications, it is beneficial for the nodes to detect a crash of a border router as soon as possible to trigger fallback actions.
This document describes RNFD, an extension to RPL that expedites border router failure detection, even by an order of magnitude, by having nodes collaboratively monitor the status of a given border router.
The extension introduces an additional state at each node, a new type of RPL Control Message Options for synchronizing this state among different nodes, and the coordination algorithm itself.</t>



    </abstract>


  </front>

  <middle>


<section anchor="intro" title="Introduction">

<t>RPL is an IPv6 routing protocol for low-power and lossy networks (LLNs) <xref target="RFC6550"/>.
Such networks are usually constrained in device energy and channel capacity.
They are formed largely of nodes that offer little processing power and memory, and links that are of variable qualities and support low data rates.
Therefore, a significant challenge that a routing protocol for LLNs has to address is minimizing resource consumption without sacrificing reaction time to network changes.</t>

<t>One of the main design principles adopted in RPL to minimize node resource consumption is delegating much of the responsibility for routing to LLN border routers (LBRs).
A network is organized into destination-oriented directed acyclic graphs (DODAGs), each corresponding to an LBR and having all its paths terminate at the LBR.
To this end, every node is dynamically assigned a rank representing its distance, measured in some metric, to a given LBR, with the LBR having the minimal rank, which reflects its role as the DODAG root.
The ranks allow each non-LBR node to select from among its neighbors (i.e., nodes to which the node has links) those ones that are closer to the LBR than the node itself: the node’s parents in the graph.
The resulting DODAG paths, consisting of the node-parent links, are utilized for routing packets upward: to the LBR and outside the LLN.
They are also used by nodes to periodically report their connectivity upward to the LBR, which allows in turn for directing packets downward, from the LBR to these nodes, for instance, by means of source routing <xref target="RFC6554"/>.
All in all, not only do LBRs participate in routing but also drive the process of DODAG construction and maintenance underlying the protocol.</t>

<t>To play this central role, LBRs are expected to be more capable than regular LLN nodes.
They are assumed not to be constrained in computing power, memory, and energy, which often entails a more involved hardware-software architecture and tethered power supply.
This, however, also makes them prone to failures, especially since in large deployments it is often difficult to ensure a backup power supply for every LBR.</t>

<section anchor="effects-of-lbr-crashes" title="Effects of LBR Crashes">

<t>When an LBR crashes, the nodes in its DODAG lose the ability to communicate with other Internet hosts.
In addition, a significant fraction of DODAG paths interconnecting the nodes become invalid, as they pass through the dead LBR.
The others also degenerate as a result of DODAG repair attempts, which are bound to fail.
In effect, routing inside the DODAG also becomes largely impossible.
Consequently, it is desirable that an LBR crash be detected by the nodes fast, so that they can leave the broken DODAG and join another one or trigger additional application- or deployment-dependent fallback mechanisms, thereby minimizing the negative impact of the disconnection.</t>

<t>Since all DODAG paths lead to the corresponding LBR, detecting its crash by a node entails dropping all parents and adopting an infinite rank, which reflects the node’s inability to reach the dead LBR.
Depending on the deployment settings, the node can then remain in such a state, join a different DODAG, or even become itself the root of a floating DODAG.
In any case, however, achieving this state for all nodes is slow, can generate heavy traffic, and is difficult to implement correctly <xref target="Iwanicki16"/> <xref target="Paszkowska19"/> <xref target="Ciolkosz19"/>.</t>

<t>To start with, tearing down all DODAG paths requires each of the dead LBR’s neighbors to detect that its link with the LBR is no longer up.
Otherwise, any of the neighbors unaware of this fact can keep advertising a finite rank and can thus be other nodes’ parent or ancestor in the DODAG: such nodes will incorrectly believe they have a valid path to the dead LBR.
Detecting a crash of a link by a node normally happens when the node has observed sufficiently many forwarding failures over the link.
Therefore, considering the low-data-rate applications of LLNs, the period from the crash to the moment of eliminating from the DODAG the last link to the dead LBR may be long.
Subsequently learning by all nodes that none of their links can form any path leading to the dead LBR also adds latency, partly due to parent changes that the nodes independently perform in attempts to repair their broken paths locally.
Since a non-LBR node has only local knowledge of the network, potentially inconsistent with that of other nodes, such parent changes often produce paths containing loops, which have to be broken before all nodes can conclude that no path to the dead LBR exists globally.
Even with RPL’s dedicated loop detection mechanisms <xref target="RFC6553"/>, this also requires traffic, and hence time.
Finally, switching a parent or discovering a loop can also generate cascaded bursts of control traffic, owing to the adaptive Trickle algorithm for exchanging DODAG information <xref target="RFC6202"/>.
Overall, the behavior of the network when handling an LBR crash is highly suboptimal, thereby not being in line with RPL’s goals of minimizing resource consumption and reaction latencies.</t>

</section>
<section anchor="design-principles" title="Design Principles">

<t>To address this issue, this document proposes an extension to RPL, dubbed Root Node Failure Detector (RNFD).
To minimize the time and traffic required to handle an LBR crash, the RNFD algorithm adopts the following design principles, derived directly from the previous observations:</t>

<t><list style="numbers">
  <t>Explicitly coordinating LBR monitoring between nodes instead of relying only on the emergent behavior resulting from their independent operation.</t>
  <t>Avoiding probing all links to the dead LBR so as to reduce the tail latency when eliminating these links from the DODAG.</t>
  <t>Exploiting concurrency by prompting proactive checking for a possible LBR crash when some nodes suspect such a failure may have taken place, which aims to further reduce the overall latency.</t>
  <t>Minimizing changes to RPL’s existing algorithms by operating in parallel and largely independently (in the background), and introducing few additional assumptions.</t>
</list></t>

<t>While these principles do improve RPL’s performance under a wide range of LBR crashes, their probabilistic nature precludes hard guarantees for all possible corner cases.
In particular, in some scenarios, RNFD’s operation may result in false negatives, but these situations are peculiar and will eventually be handled by RPL’s own aforementioned mechanisms.
Likewise, in some scenarios, notably involving highly unstable links, false positives may occur, but they can be alleviated as well.
In any case, the principles also guarantee that RNFD can be deactivated at any time, if needed, in which case RPL’s operation is unaffected.</t>

</section>
<section anchor="other-solutions" title="Other Solutions">

<t>Given the consequences of LBR failures, if possible, it is also worth considering other solutions to the problem.
More specifically, power outages can be alleviated by provisioning redundant power sources or emergency batteries.
Likewise, RPL’s so-called virtual DODAG roots can help tolerating some failures of individual LBRs.</t>

<t>As mentioned previously, RNFD has been designed to be largely independent of those solutions, that is, rather than aiming to be their replacement, it can complement them.
In particular, the operation of RNFD with different variants of virtual DODAG roots is covered in <xref target="mgmnt_virt_dodag_roots"/>.</t>

</section>
</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 BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all capitals, as shown here.</t>

<t>The Terminology used in this document is consistent with and incorporates that described in “Terms Used in Routing for Low-Power and Lossy Networks (LLNs)” <xref target="RFC7102"/>, “RPL: IPv6 Routing Protocol for Low-Power and Lossy Networks” <xref target="RFC6550"/>, and “The Routing Protocol for Low-Power and Lossy Networks (RPL) Option for Carrying RPL Information in Data-Plane Datagrams” <xref target="RFC6553"/>.
Other terms in use in LLNs can be found in “Terminology for Constrained-Node Networks” <xref target="RFC7228"/>.</t>

<t>In particular, the following acronyms appear in the document:</t>

<t><list style="hanging">
  <t hangText='DIO'>
  DODAG Information Object (a RPL message)</t>
  <t hangText='DIS'>
  DODAG Information Solicitation (a RPL message)</t>
  <t hangText='DODAG'>
  Destination-Oriented Directed Acyclic Graph</t>
  <t hangText='LLN'>
  Low-power and Lossy Network</t>
  <t hangText='LBR'>
  LLN Border Router</t>
</list></t>

<t>In addition, the document introduces the following concepts:</t>

<t><list style="hanging">
  <t hangText='Sentinel'>
  One of the two roles that a node can play in RNFD. For a given DODAG Version, a Sentinel node is a DODAG root’s neighbor that monitors the DODAG root’s status. There are normally multiple Sentinels for a DODAG root. However, being the DODAG root’s neighbor need not imply being Sentinel.</t>
  <t hangText='Acceptor'>
  The other of the two roles that a node can play in RNFD. For a given DODAG Version, an Acceptor node is a node that is not Sentinel.</t>
  <t hangText='Locally Observed DODAG Root’s State (LORS)'>
  A node’s local knowledge of the DODAG root’s status, specifying in particular whether the DODAG root is up.</t>
  <t hangText='Conflict-Free Replicated Counter (CFRC)'>
  Conceptually represents a dynamic set whose cardinality can be estimated. It defines a partial order on its values and supports element addition and union. The union operation is order- and duplicate-insensitive, that is, idempotent, commutative, and associative.</t>
</list></t>

</section>
<section anchor="overview" title="Overview">

<t>As mentioned previously, LBRs are DODAG roots in RPL, and hence a crash of an LBR is global in that it affects all nodes in the corresponding DODAG.
Therefore, each node running RNFD for a given DODAG explicitly tracks the DODAG root’s current condition, which is referred to as Locally Observed DODAG Root’s State (LORS), and synchronizes its local knowledge with other nodes.</t>

<t>Since monitoring the condition of the DODAG root is performed by tracking the status of its links (i.e., whether they are up or down), it must be done by the root’s neighbors; other nodes must accept their observations.
Consequently, depending on their roles, non-root nodes are divided in RNFD into two disjoint groups: Sentinels and Acceptors.
A Sentinel node is the DODAG root’s neighbor that monitors its link with the root.
The DODAG root thus normally has multiple Sentinels but being its neighbor need not imply being Sentinel.
An Acceptor node is in turn a node that is not Sentinel.
Acceptors thus mainly collect and propagate Sentinels’ observations.
More information on Sentinel selection can be found in <xref target="mgmnt_roles_and_cfrc_lens"/>.</t>

<section anchor="protocol-state-machine" title="Protocol State Machine">

<t>The possible values of LORS and transitions between them are depicted in <xref target="fig_state_machine"/>.
States “UP” and “GLOBALLY DOWN” can be attained by both Sentinels and Acceptors; states “SUSPECTED DOWN” and “LOCALLY DOWN” — by Sentinels only.</t>

<figure title="RNFD States and Transitions" anchor="fig_state_machine"><artwork><![CDATA[
  +---------------------------------------------------------+
  |                      |---------------------------+   3a |
  |    +-----------------+---------+              3b |      |
  |    | 2b              |         v                 v      v
+-+----+-+   1 +---------+-+     +-----------+     +-+------+-+
|   UP   +---->+ SUSPECTED +---->+  LOCALLY  +---->+ GLOBALLY |
|        +<----+    DOWN   | 2a  |    DOWN   | 3c  |   DOWN   |
+-+----+-+  4a +-----------+     +-+---------+     +-+--------+
  ^    ^                           |                 |
  |    |                        4b |                 |
  |    +---------------------------+               5 |
  +--------------------------------------------------+

]]></artwork></figure>

<t>To begin with, when any node joins a DODAG Version, the DODAG root must appear alive, so the node initializes RNFD with its LORS equal to “UP”.
For a properly working DODAG root, the node remains in state “UP”.</t>

<t>However, when a node — acting as Sentinel — starts suspecting that the root may have crashed, it changes its LORS to “SUSPECTED DOWN” (transition 1 in <xref target="fig_state_machine"/>).
The transition from “UP” to “SUSPECTED DOWN” can happen based on the node’s observations at either the data plane, for instance, link-layer triggers about missing hop-by-hop acknowledgments for packets forwarded over the node’s link to the root, or the control plane, for example, a significant growth in the number of Sentinels already suspecting the root to be dead.
In state “SUSPECTED DOWN”, the Sentinel node may verify its suspicion and/or inform other nodes about the suspicion.
When this has been done, it changes its LORS to “LOCALLY DOWN” (transition 2a).
In some cases, the verification need not be performed and, as an optimization, a direct transition from “UP” to “LOCALLY DOWN” (transition 2b) can be done instead.</t>

<t>If sufficiently many Sentinels have their LORS equal to “LOCALLY DOWN”, all nodes — Sentinels and Acceptors — consent globally that the DODAG root must have crashed and set their LORS to “GLOBALLY DOWN”, irrespective of the previous value (transitions 3a, 3b, and 3c).
State “GLOBALLY DOWN” is terminal in that the only transition any node can perform from this to another state (transition 5) takes place when the node joins a new DODAG version.
When a node is in state “GLOBALLY DOWN”, RNFD forces RPL to maintain an infinite rank and no parent, thereby preventing routing packets upward in the DODAG.
In other words, this state represents a situation in which all non-root nodes agree that the current DODAG version is unusable, and hence, to recover, the root has to give a proof of being alive by initiating a new DODAG Version.</t>

<t>In contrast, if a node — either Sentinel or Acceptor — is in state “UP”, RNFD does not influence RPL’s packet forwarding: a node can route packets upward if it has a parent.
The same is true for states “SUSPECTED DOWN” and “LOCALLY DOWN”, attainable only by Sentinels.
Finally, while in any of the two states, a Sentinel node may observe some activity of the DODAG root, and hence decide that its suspicion is a mistake.
In such a case, it returns to state “UP” (transitions 4a and 4b).</t>

</section>
<section anchor="counters-and-communication" title="Counters and Communication">

<t>To enable arriving at a global conclusion that the DODAG root has crashed (i.e., transiting to state “GLOBALLY DOWN”), all nodes count locally and synchronize among each other the number of Sentinels considering the root to be dead (i.e., those in state “LOCALLY DOWN”).
This process employs structures referred to as conflict-free replicated counters (CFRCs).
They are stored and modified independently by each node and are disseminated throughout the network in options added to RPL link-local control messages: DODAG Information Objects (DIOs) and DODAG Information Solicitations (DISs).
Upon reception of such an option from its neighbor, a node merges the received counter with its local one, thereby obtaining a new content for its local counter.</t>

<t>The merging operation is idempotent, commutative, and associative.
Moreover, all possible counter values are partially ordered.
This enables ensuring eventual consistency of the counters across all nodes, irrespective of the particular sequence of merges, shape of the DODAG, or general network topology.
In effect, as long as the network is connected, all nodes will be able to arrive at the same conclusion regarding the DODAG root, in particular, even when no two Sentinels have a direct link with each other.</t>

<t>Each node in RNFD maintains two CFRCs for a DODAG:</t>

<t><list style="symbols">
  <t>PositiveCFRC, counting Sentinels that consider or have previously considered the root node as alive in the current DODAG Version,</t>
  <t>NegativeCFRC, counting Sentinels that consider or have previously considered the root node as dead in the current DODAG Version.</t>
</list></t>

<t>PositiveCFRC is always greater than or equal to the NegativeCFRC in terms of the partial order defined for the counters.
The difference between the value of PositiveCFRC and the value of NegativeCFRC is thus nonnegative and estimates the number of Sentinels that still consider the DODAG root node as alive.</t>

</section>
</section>
<section anchor="the-rnfd-option" title="The RNFD Option">

<t>RNFD state synchronization between nodes takes place through the RNFD Option.
It is a new type of RPL Control Message Options that is carried in link-local RPL control messages, notably DIOs and DISs.
Its main task is allowing the receivers to merge their two CFRCs with the sender’s CFRCs.</t>

<section anchor="general-cfrc-requirements" title="General CFRC Requirements">

<t>CFRCs in RNFD MUST support the following operations:</t>

<t><list style="hanging">
  <t hangText='value(c)'>
  Returns a nonnegative integer value corresponding to the number of nodes counted by a given CFRC, c.</t>
  <t hangText='zero()'>
  Returns a CFRC that counts no nodes, that is, has its value equal to 0.</t>
  <t hangText='self()'>
  Returns a CFRC that counts only the node executing the operation.</t>
  <t hangText='infinity()'>
  Returns a CFRC that counts all possible nodes and represents a special value, infinity.</t>
  <t hangText='merge(c1, c2)'>
  Returns a CFRC that is a union of c1 and c2 (i.e., counts all nodes that are counted by either c1, c2, or both c1 and c2).</t>
  <t hangText='compare(c1, c2)'>
  Returns the result of comparing c1 to c2.</t>
  <t hangText='saturated(c)'>
  Returns TRUE if a given CFRC, c, is saturated (i.e., no more new nodes should be counted by it) or FALSE otherwise.</t>
</list></t>

<t>The partial ordering of CFRCs implies that the result of compare(c1, c2) can be either:</t>

<t><list style="symbols">
  <t>smaller, if c1 is ordered before c2 (i.e., c2 counts all nodes that c1 counts and at least one node that c1 does not count);</t>
  <t>greater, if c1 is ordered after c2 (i.e., c1 counts all nodes that c2 counts and at least one node that c2 does not count);</t>
  <t>equal, if c1 and c2 are the same (i.e., they count the same nodes);</t>
  <t>incomparable, otherwise.</t>
</list></t>

<t>In particular, zero() is smaller than all other values and infinity() is greater than any other value.</t>

<t>The properties of merging in turn can be formalized as follows for any c1, c2, and c3:</t>

<t><list style="symbols">
  <t>idempotence: c1 = merge(c1, c1);</t>
  <t>commutativity: merge(c1, c2) = merge(c2, c1);</t>
  <t>associativity: merge(c1, merge(c2, c3)) = merge(merge(c1, c2), c3).</t>
</list></t>

<t>In particular, merge(c, zero()) always equals c while merge(c, infinity()) always equals infinity().</t>

<t>There are many algorithmic structures that can provide the aforementioned properties of CFRC.
Although in principle RNFD does not rely on any specific one, the option adopts so-called linear counting <xref target="Whang90"/>.</t>

</section>
<section anchor="msg_format" title="Format of the Option">

<t>The format of the RNFD Option conforms to the generic format of RPL Control Message Options:</t>

<figure title="Format of the RNFD Option" anchor="fig_opt_format"><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 = TBD1 | Option Length |                               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               +
  |                                                               |
  +                                                               +
  |               PosCFRC, NegCFRC (Variable Length*)             |
  .                                                               .
  .                                                               .
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

The '*' denotes that, if present, the fields have equal lengths.
]]></artwork></figure>

<t><list style="hanging">
  <t hangText='Option Type'>
  TBD1</t>
  <t hangText='Option Length'>
  8-bit unsigned integer. Denotes the length of the option in octets excluding the Option Type and Option Length fields. Its value MUST be even. A value of 0 denotes that RNFD is disabled in the current DODAG Version.</t>
  <t hangText='PosCFRC, NegCFRC'>
  Two variable-length, octet-aligned bit arrays carrying the sender’s PositiveCFRC and NegativeCFRC, respectively.</t>
</list></t>

<t>The length of the arrays constituting the PosCFRC and NegCFRC fields is the same and is derived from Option Length as follows.
The value of Option Length is divided by 2 to obtain the number of octets each of the two arrays occupies.
The resulting number of octets is multiplied by 8 which yields an upper bound on the number of bits in each array.
As the actual bit length of each of the arrays, the largest prime number less than the upper bound is assumed.
For example, if the value of Option Length is 16, then each array occupies 8 octets, and its actual bit length is 61, as this is the largest prime number less than 64.</t>

<t>Furthermore, for any bit equal to 1 in the NegCFRC, the bit with the same index MUST be equal to 1 also in the PosCFRC.
Any unused bits (i.e., the bits beyond the actual bit length of each of the arrays) MUST be equal to 0.
Finally, if PosCFRC has all its bits equal to 1, then NegCFRC MUST also have all its bits equal to 1.</t>

<t>The CFRC operations are defined for such bit arrays of a given length as follows:</t>

<t><list style="hanging">
  <t hangText='value(c)'>
  Returns the smallest integer value not less than -LT*ln(L0/LT), where ln() is the natural logarithm function, L0 is the number of bits equal to 0 in the array corresponding to <spanx style="verb">c</spanx> and LT is the bit length of the array.</t>
  <t hangText='zero()'>
  Returns an array with all bits equal to 0.</t>
  <t hangText='self()'>
  Returns an array with a single bit, selected uniformly at random, equal to 1.</t>
  <t hangText='infinity()'>
  Returns an array with all bits equal to 1.</t>
  <t hangText='merge(c1, c2)'>
  Returns a bit array that constitutes a bitwise OR of c1 and c2, that is, a bit in the resulting array is equal to 0 only if the same bit is equal to 0 in both c1 and c2.</t>
  <t hangText='compare(c1, c2)'>
  Returns:</t>
</list></t>

<t><list style="symbols">
  <t>equal if each bit of c1 is equal to the corresponding bit of c2;</t>
  <t>less if c1 and c2 are not equal and, for each bit equal to 1 in c1, the corresponding bit in c2 is also equal to 1;</t>
  <t>greater if c1 and c2 are not equal and, for each bit equal to 1 in c2, the corresponding bit in c1 is also equal to 1;</t>
  <t>incomparable, otherwise.</t>
</list></t>

<t><list style="hanging">
  <t hangText='saturated(c)'>
  Returns TRUE, if more than RNFD_CFRC_SATURATION_THRESHOLD of the bits in c are equal to 1, or FALSE, otherwise.</t>
</list></t>

</section>
</section>
<section anchor="rnfd_behavior" title="RPL Router Behavior">

<t>Although RNFD operates largely independently of RPL, it does need interact with RPL and the overall protocol stack.
These interactions are described next and can be realized, for instance, by means of event triggers.</t>

<section anchor="rnfd_behavior_roles" title="Joining a DODAG Version and Changing the RNFD Role">

<t>Whenever RPL running at a node joins a DODAG Version, RNFD — if active — MUST assume for the node the role of Acceptor.
Accordingly, it MUST set its LORS to “UP” and its PositiveCFRC and NegativeCFRC to zero().</t>

<t>The role may then change between Acceptor and Sentinel at any time.
However, while a switch from Sentinel to Acceptor has no preconditions, for a switch from Acceptor to Sentinel to be possible, <spanx style="emph">all</spanx> of the following conditions MUST hold:</t>

<t><list style="numbers">
  <t>LORS is “UP”;</t>
  <t>saturated(PositiveCFRC) is FALSE;</t>
  <t>a neighbor entry for the DODAG root is present in RPL’s DODAG parent set;</t>
  <t>the neighbor is considered reachable via its link-local IPv6 address.</t>
</list></t>

<t>A role change also requires appropriate updates to LORS and CFRCs, so that the node is properly accounted for.
More specifically, when changing its role from Acceptor to Sentinel, the node MUST add itself to its PositiveCFRC as follows.
It MUST generate a new CFRC value, selfc = self(), and MUST replace its PositiveCFRC, denoted oldpc, with newpc = merge(oldpc, selfc).
In contrast, the effects of a switch from Sentinel to Acceptor vary depending on the node’s value of LORS before the switch:</t>

<t><list style="symbols">
  <t>for “GLOBALLY DOWN”, the node MUST NOT modify its LORS, PositiveCFRC, and NegativeCFRC;</t>
  <t>for “LOCALLY DOWN”, the node MUST set its LORS to “UP” but MUST NOT modify its PositiveCFRC and NegativeCFRC;</t>
  <t>for “UP” and “SUSPECTED DOWN”, the node MUST set its LORS to “UP”, MUST NOT modify it PositiveCFRC, but MUST add itself to NegativeCFRC, that is, replace its NegativeCFRC, denoted oldnc, with newnc = merge(oldnc, selfc), where selfc is the counter generated with self() when the node last added itself to its PositiveCFRC.</t>
</list></t>

</section>
<section anchor="rnfd_behavior_detection" title="Detecting and Verifying Problems with the DODAG Root">

<t>Only nodes that are Sentinels take active part in detecting crashes of the DODAG Root; Acceptors just disseminate their observations, reflected in the CFRCs.</t>

<t>The DODAG root monitoring SHOULD be based on both internal inputs, notably the values of CFRCs and LORS, and external inputs, such as triggers from RPL and other protocols.
External input monitoring SHOULD be performed preferably in a reactive fashion, also independently of RPL, and at both data plane and control plane.
In particular, it is RECOMMENDED that RNFD be directly notified of events relevant to the routing adjacency maintenance mechanisms on which RPL relies, such as Layer 2 triggers <xref target="RFC5184"/> or the Neighbor Unreachability Detection <xref target="RFC4861"/> mechanism.
In addition, depending on the underlying protocol stack, there may be other potential sources of such events, for instance, neighbor communication overhearing.
In any case, only events concerning the DODAG root need be monitored.
For example, RNFD can conclude that there may be problems with the DODAG root if it observes a lack of multiple consecutive L2 acknowledgments for packets transmitted by the node via the link to the DODAG root.
Internally, in turn, it is RECOMMENDED that RNFD take action whenever there is a change to its local CFRCs, so that a node can have a chance to participate in detecting potential problems even when normally it would not exchange packets over the link with the DODAG root during some period.
In particular, RNFD SHOULD conclude that there may be problems with the DODAG root, when the fraction value(NegativeCFRC)/value(PositiveCFRC) has grown by at least RNFD_SUSPICION_GROWTH_THRESHOLD since the node last set its LORS to “UP”.</t>

<t>Whenever having its LORS set to “UP” RNFD concludes — based on either external or internal inputs — that there may be problems with the link with the DODAG root, it MUST set its LORS to either “SUSPECTED DOWN” or, as an optimization, to “LOCALLY DOWN”.</t>

<t>The “SUSPECTED DOWN” value of LORS is temporary: its aim is to give RNFD an additional opportunity to verify whether the link with the DODAG root is indeed down.
Depending on the outcome of such verification, RNFD MUST set its LORS to either “UP”, if the link has been confirmed not to be down, or “LOCALLY DOWN”, otherwise.
The verification can be performed, for example, by transmitting RPL DIS or ICMPv6 Echo Request messages to the DODAG root’s link-local IPv6 address and expecting replies confirming that the root is up and reachable through the link.
Care SHOULD be taken not to overload the DODAG root with traffic due to simultaneous probes, for instance, random backoffs can be employed to this end.
It is RECOMMENDED that the “SUSPECTED DOWN” value of LORS is attained and verification takes place if RNFD’s conclusion on the state of the DODAG root is based only on indirect observations, for example, the aforementioned growth of the CFRC values.
In contrast, for direct observations, such as missing L2 acknowledgments, the verification MAY be skipped, with the node’s LORS effectively changing from “UP” directly to “LOCALLY DOWN”.</t>

<t>For consistency with RPL, when detecting potential problems with the DODAG root, RNFD also MUST make use of RPL’s independent knowledge.
More specifically, a node MUST switch its LORS from “UP” or “SUSPECTED DOWN” directly to “LOCALLY DOWN” if a neighbor entry for the DODAG root is removed from RPL’s DODAG parent set or the neighbor ceases to be considered reachable via its link-local IPv6 address.</t>

<t>Finally, while having its LORS already equal to “LOCALLY DOWN”, a node may make an observation confirming that its link with the DODAG root is actually up.
In such a case, it SHOULD set its LORS back to “UP” but MUST NOT do this before the previous conditions 2–4 necessary for a node to change its role from Acceptor to Sentinel all hold (see <xref target="rnfd_behavior_roles"/>).</t>

<t>To appropriately account for the node’s observations on the state of the DODAG root, the aforementioned LORS transitions are accompanied by changes to the node’s local CFRCs as follows.
Transitions between “UP” and “SUSPECTED DOWN” do not affect any of the two CFRCs.
During a switch from “UP” or “SUSPECTED DOWN” to “LOCALLY DOWN”, in turn, the node MUST add itself to its NegativeCFRC, as explained previously.
By symmetry, if there is a transition from “LOCALLY DOWN” to “UP”, the node MUST add itself to its PositiveCFRC, again, as explained previously.</t>

<t>Such changes to a node’s local CFRCs, if performed repeatedly due to incorrect decisions regarding the status of the node’s link with the DODAG root, may lead to those CFRCs becoming saturated.
An implementation SHOULD thus try to minimize false-positive transitions from “UP” and “SUSPECTED DOWN” to “LOCALLY DOWN”.
The exact approach depends on the specific solutions employed for assessing the state of a link.
For instance, one can utilize additional mechanisms for increasing the confidence of individual decisions, such as during the aforementioned verification in the “SUSPECTED DOWN” state, or can limit the number of transitions per node, possibly in an adaptive fashion.</t>

</section>
<section anchor="rnfd_behavior_consensus" title="Disseminating Observations and Reaching Agreement">

<t>Nodes disseminate their observations by exchanging CFRCs in the RNFD Options embedded in link-local RPL control messages, notably DIOs and DISs.
When processing such a received option, a node — acting as Sentinel or Acceptor — MUST update its PositiveCFRC and NegativeCFRC to respectively newpc = merge(oldpc, recvpc) and newnc = merge(oldnc, recvnc), where oldpc and oldnc are the values of the node’s PositiveCFRC and NegativeCFRC before the update, while recvpc and recvnc are the received values of option fields PosCFRC and NegCFRC, respectively.</t>

<t>In effect, the node’s value of fraction value(NegativeCFRC)/value(PositiveCFRC) may change.
If the fraction reaches at least RNFD_CONSENSUS_THRESHOLD (with value(PositiveCFRC) being greater than zero), then the node consents on the DODAG root being down.
Accordingly, it MUST change its LORS to “GLOBALLY DOWN” and set its PositiveCFRC and NegativeCFRC both to infinity().</t>

<t>The “GLOBALLY DOWN” value of LORS is terminal: the node MUST NOT change it and MUST NOT modify its CFRCs until it joins a new DODAG Version.
With this value of LORS, RNFD at the node MUST also prevent RPL from having any DODAG parent and advertising any Rank other than INFINITE_RANK.</t>

<t>Since the RNFD Option is embedded, among others, in RPL DIO control messages, updates to a node’s CFRCs may affect the sending schedule of these messages, which is driven by the DIO Trickle timer <xref target="RFC6206"/>.
It is RECOMMENDED to use for RNFD a dedicated Trickle timer, different from RPL’s original DIO Trickle timer.
In such a setting, whenever the dedicated timer fires and no DIO message containing the RNFD Option has been sent to the link-local all-RPL-nodes multicast IPv6 address since the previous firing, the node sends a DIO message containing the RNFD Option to the address.
In contrast, in the absence of the dedicated Trickle timer for RNFD, an implementation SHOULD ensure that the RNFD Option is present in multicast DIO messages sufficiently often to quickly propagate changes to the node’s CFRCs, and notably as soon as possible after a reset of the timer triggered by RNFD.
In the remainder of this document, we will refer to the Trickle timer utilized by RNFD — either the dedicated one or RPL’s original one, depending on the implementation — simply as “Trickle timer”.
In particular, a node MUST reset its Trickle timer when it changes its LORS to “GLOBALLY DOWN”, so that information about the detected crash of the DODAG root is disseminated in the DODAG fast.
Likewise, a node SHOULD reset its Trickle timer when any of its local CFRCs changes significantly.</t>

</section>
<section anchor="rnfd_behavior_root" title="DODAG Root’s Behavior">

<t>The DODAG root node MUST assume the role of Acceptor in RNFD and MUST NOT ever switch this role.
It MUST also monitor its LORS and local CFRCs, so that it can react to various events.</t>

<t>To start with, the DODAG root MUST generate a new DODAG Version, thereby restarting the protocol, if it changes its LORS to “GLOBALLY DOWN”, which may happen when the root has restarted after a crash or the nodes have falsely detected its crash.
It MAY also generate a new DODAG Version if fraction value(NegativeCFRC)/value(PositiveCFRC) approaches RNFD_CONSENSUS_THRESHOLD, so as to avoid potential interruptions to routing.</t>

<t>Furthermore, the DODAG root SHOULD either generate a new DODAG Version or increase the bit length of its CFRCs if saturated(PositiveCFRC) becomes TRUE.
This is a self-regulation mechanism that helps adjust the CFRCs to a potentially large number of Sentinels (see <xref target="mgmnt_roles_and_cfrc_lens"/>).</t>

<t>In general, issuing a new DODAG Version effectively restarts RNFD.
The DODAG root MAY thus perform this operation also in other situations.</t>

</section>
<section anchor="rnfd_behavior_deactivation" title="Activating and Deactivating the Protocol on Demand">

<t>RNFD can be activated and deactivated on demand, once per DODAG Version.
The particular policies for activating and deactivating the protocol are outside the scope of this document.
However, the activation and deactivation SHOULD be done at the DODAG root node; other nodes MUST comply.</t>

<t>More specifically, when a non-root node joins a DODAG Version, RNFD at the node is initially inactive.
The node MUST NOT activate the protocol unless it receives for this DODAG Version a valid RNFD Option containing some CFRCs, that is, having its Option Length field positive.
In particular, if the option accompanies the message that causes the node to join the DODAG Version, the protocol MUST be active from the moment of the joining.
RNFD then remains active at the node until it is explicitly deactivated or the node joins a new DODAG Version.
An explicit deactivation MUST take place when the node receives an RNFD Option for the DODAG Version with no CFRCs, that is, having its Option Length field equal to zero.
When explicitly deactivated, RNFD MUST NOT be reactivated unless the node joins a new DODAG Version.
In particular, when the first RNFD Option received by the node has its Option Length field equal to zero, the protocol MUST remain deactivated for the entire time the node belongs to the current DODAG Version.</t>

<t>When RNFD at a node is initially inactive for a DODAG Version, the node MUST NOT attach any RNFD Option to the messages it sends (in particular, because it may not know the desired CFRC length — see <xref target="rnfd_behavior_cfrc_size"/>).
When the protocol has been explicitly deactivated, the node MAY also decide not to attach the option to its outgoing messages.
However, it is RECOMMENDED that it sends sufficiently many messages with the option to the link-local all-RPL-nodes multicast IPv6 address to allow its neighbors to learn that RNFD has been deactivated in the current DODAG version.
In particular, it MAY reset its Trickle timer to this end but also MAY use some reactive mechanisms, for example, replying with a unicast DIO or DIS containing the RNFD Option with no CFRCs to a message from a neighbor that contains the option with some CFRCs, as such a neighbor appears not to have learned about the deactivation of RNFD.</t>

</section>
<section anchor="rnfd_behavior_cfrc_size" title="Processing CFRCs of Incompatible Lengths">

<t>The merge() and compare() operations on CFRCs require both arguments to be compatible, that is, to have the same bit length.
However, the processing rules for the RNFD Option (see <xref target="msg_format"/>) do not necessitate this.
This fact is made use of not only in the mechanisms for activating and deactivating the protocol (see <xref target="rnfd_behavior_deactivation"/>), but also in mechanisms for dynamic adjustments of CFRCs, which aim to enable deployment-specific policies (see <xref target="mgmnt_roles_and_cfrc_lens"/>).
A node thus MUST be prepared to receive the RNFD Option with fields PosCFRC and NegCFRC of a different bit length than the node’s own PositiveCFRC and NegativeCFRC.
Assuming that it has RNFD active and that fields PosCFRC and NegCFRC in the option have a positive length, the node MUST react as follows.</t>

<t>If the bit length of fields PosCFRC and NegCFRC is the same as that of the node’s local PositiveCFRC and NegativeCFRC, then the node MUST perform the merges, as detailed previously (see <xref target="rnfd_behavior_consensus"/>).</t>

<t>If the bit length of fields PosCFRC and NegCFRC is smaller than that of the node’s local PositiveCFRC and NegativeCFRC, then the node MUST ignore the option and MAY reset its Trickle timer.</t>

<t>If the bit length of fields PosCFRC and NegCFRC is greater than that of the node’s local PositiveCFRC and NegativeCFRC, then the node MUST extend the bit length of its local CFRCs to be equal to that in the option and set the CFRCs as follows:</t>

<t><list style="symbols">
  <t>If the node’s LORS is “GLOBALLY DOWN”, then both its local CFRCs MUST be set to infinity().</t>
  <t>Otherwise, they both MUST be set to zero(), and the node MUST account for itself in so initialized CFRCs. More specifically, if the node is Sentinel, then it MUST add itself to its PositiveCFRC, as detailed previously. In addition, if its LORS is “LOCALLY DOWN”, then it MUST also add itself to its NegativeCFRC, again, as explained previously. Finally, the node MUST perform merges of its local CFRCs and the ones received in the option (see <xref target="rnfd_behavior_consensus"/>) and MAY reset its Trickle timer.</t>
</list></t>

<t>In contrast, if the node is unable to extend its local CFRCs, for example, because it lacks resources, then it MUST stop participating in RNFD, that is, until it joins a new DODAG Version, it MUST NOT send the RNFD Option and MUST ignore this option in received messages.</t>

<t>A DODAG root node can be requested to increase the bit length of its CFRCs externally, as part of the management policies (see <xref target="mgmnt_roles_and_cfrc_lens"/>).
If it cannot fulfill such a request, then it is MUST NOT stop participating in RFND and SHOULD return an error to the requester instead.
Otherwise, since it is always Acceptor, the above rules require it to extend both CFRCs to the requested length and to set them both to either zero() or infinity(), depending on whether its LORS is, respectively, different from or equal to “GLOBALLY DOWN”.
In the latter case, given the earlier rules governing the root’s behavior upon reaching the “GLOBALLY DOWN” state (cf. <xref target="rnfd_behavior_root"/>), the root is also bound to eventually set its CFRCs to zero() and, in addition, generate a new DODAG Version and change its LORS back to “UP”.
Therefore, these two steps can be optimized into one, meaning that effectively, irrespective of its LORS, when increasing the bit length of its CFRCs in response to an external request, the root also sets the CFRCs to zero().</t>

</section>
<section anchor="summary-of-rnfds-interactions-with-rpl" title="Summary of RNFD’s Interactions with RPL">

<t>In summary, RNFD interacts with RPL in the following manner:</t>

<t><list style="symbols">
  <t>While having its LORS equal to “GLOBALLY DOWN”, RNFD prevents RPL from routing packets and advertising upward routes in the corresponding DODAG (see <xref target="rnfd_behavior_consensus"/>).</t>
  <t>In some scenarios, RNFD triggers RPL to issue a new DODAG Version (see <xref target="rnfd_behavior_root"/>).</t>
  <t>Depending on the implementation, RNFD may cause RPL’s DIO Trickle timer resets (see <xref target="rnfd_behavior_consensus"/>, <xref target="rnfd_behavior_deactivation"/>, and <xref target="rnfd_behavior_cfrc_size"/>).</t>
  <t>RNFD monitors events relevant to routing adjacency maintenance as well as those affecting RPL’s DODAG parent set (see <xref target="rnfd_behavior_roles"/> and <xref target="rnfd_behavior_detection"/>).</t>
  <t>Using RNFD entails embedding the RNFD Option into link-local RPL control messages (see <xref target="msg_format"/>).</t>
</list></t>

</section>
<section anchor="rnfd_behavior_constants" title="Summary of RNFD’s Constants">

<t>The following is a summary of RNFD’s constants:</t>

<t><list style="hanging">
  <t hangText='RNFD_CONSENSUS_THRESHOLD'>
  A threshold concerning the value of fraction value(NegativeCFRC)/value(PositiveCFRC). If the value at a Sentinel or Acceptor node reaches the threshold, then the node’s LORS is set to “GLOBALLY DOWN”, which implies that consensus has been reached on the DODAG root node being down (see <xref target="rnfd_behavior_consensus"/>). The default value of the threshold is 0.51, which indicates that a majority of Sentinels must consider the root to be down to reach the consensus. In general, the higher the value the longer the detection period but the lower the risk of false positives.</t>
  <t hangText='RNFD_SUSPICION_GROWTH_THRESHOLD'>
  A threshold concerning the value of fraction value(NegativeCFRC)/value(PositiveCFRC). If the value at a Sentinel node grows at least by this threshold since the time the node’s LORS was last set to “UP”, then the node’s LORS is set to “SUSPECTED DOWN” or “LOCALLY DOWN”, which implies that the node starts suspecting or assumes a crash of the DODAG root (see <xref target="rnfd_behavior_detection"/>). The higher the value the longer the duration of detecting true crashes but the lower the risk of increased traffic due to verifying false suspicions. The default value of the threshold is 0.12, which in sparse networks (up to 8 neighbors per node) triggers a suspicion at a Sentinel node after just one other Sentinel starts considering the root as dead, while being gradually more conservative in denser networks.</t>
  <t hangText='RNFD_CFRC_SATURATION_THRESHOLD'>
  A threshold concerning the percentage of bits set to 1 in a CFRC, c. If the percentage for c is equal to or greater than this threshold, then saturated(c) returns TRUE, which hints the DODAG root to generate a new DODAG Version or increase the bit length of the CFRCs (see <xref target="rnfd_behavior_root"/>). The default value of the threshold is 0.63. The higher the value is, the higher the probability of bit collisions, and hence the more erratic the results of function value(c) may be.</t>
</list></t>

<t>The means of configuring the constants at individual nodes are outside the scope of this document.</t>

</section>
</section>
<section anchor="mgmnt" title="Manageability Considerations">

<t>RNFD is largely self-managed, with the exception of protocol activation and deactivation, as well as node role assignment and the related CFRC size adjustment, for which only the aforementioned mechanisms are defined, so as to enable adopting deployment-specific policies.
This section outlines some of the possible policies.</t>

<section anchor="mgmnt_roles_and_cfrc_lens" title="Role Assignment and CFRC Size Adjustment">

<t>One approach to node role and CFRC size selection is to manually designate specific nodes as Sentinels in RNFD, assuming that they will have chances to satisfy the necessary conditions for attaining this role (see <xref target="rnfd_behavior_roles"/>), and fixing the CFRC bit length to accommodate these nodes.</t>

<t>Another approach is to automate the selection process: in principle, any node satisfying the necessary conditions for becoming Sentinel (see <xref target="rnfd_behavior_roles"/>) can attain this role.
However, in networks where the DODAG root node has many neighbors, this approach may lead to saturated(PositiveCFRC) quickly becoming TRUE, which — without additional measures — may degrade RNFD’s performance.
This issue can be handled with a probabilistic solution: if PositiveCFRC becomes saturated with little or no increase in NegativeCFRC, then a new DODAG Version can be issued and a node satisfying the necessary conditions can become Sentinel in this version only with probability 1/2.
This process can be continued with the probability being halved in each new DODAG Version until PositiveCFRC is no longer quickly saturated.
Another solution is to increase, potentially multiple times the bit length of the CFRCs by the DODAG root if PositiveCFRC becomes saturated with little or no growth in NegativeCFRC, which does not require issuing a new DODAG Version but lengthens the RNFD Option.
In this way, again, a sufficient bit length can be dynamically discovered or the root can conclude that a given bit length is excessive for (some) nodes and resort to the previous solution.
Increasing the bit length can be done, for instance, by doubling it, respecting the condition that it has to be a prime number (see <xref target="msg_format"/>).</t>

<t>In either of the solutions, Sentinel nodes SHOULD preferably be stable themselves and have stable links to the DODAG root.
Otherwise, they may often exhibit LORS transitions between “UP” and “LOCALLY DOWN” or switches between Acceptor and Sentinel roles, which gradually saturates CFRCs.
Although as a mitigation the number of such transitions and switches per node MAY be limited, having Sentinels stable SHOULD be preferred.</t>

</section>
<section anchor="mgmnt_virt_dodag_roots" title="Virtual DODAG Roots">

<t>RPL allows a DODAG to have a so-called virtual root, that is, a collection of nodes coordinating to act as a single root of the DODAG.
The details of the coordination process are left open in the specification <xref target="RFC6550"/> but, from RNFD’s perspective, two possible realizations are worth consideration:</t>

<t><list style="symbols">
  <t>Just a single (primary) node of the nodes comprising the virtual root acts as the actual root of the DODAG. Only when this node fails, does another (backup) node take over. As a result, at any time, at most one of the nodes comprising the virtual root is the actual root.</t>
  <t>More than one of the nodes comprising the virtual root act as actual roots of the DODAG, all advertising the same Rank in the DODAG. When some of the nodes fail, the other nodes may or may not react in any specific way. In other words, at any time, more than one node can be the actual root.</t>
</list></t>

<t>In the first realization, RNFD’s operation is largely unaffected.
The necessary conditions for a node to become Sentinel (<xref target="rnfd_behavior_roles"/>) guarantee that only the current primary root node is monitored by the protocol.
This SHOULD be taken into account in the policies for node role assignment, CFRC size selection, and, possibly, the setting of the two thresholds (<xref target="rnfd_behavior_constants"/>).
Moreover, when a new primary has been elected, to avoid polluting CFRCs with observations on the previous primary, it is RECOMMENDED to issue a new DODAG Version, especially if the new primary has different neighbors compared to the old one.</t>

<t>In the second realization, the fact that the virtual root consists of multiple nodes is transparent to RNFD.
Therefore, employing RNFD is such a setting can be beneficial only if the nodes comprising the virtual root may suffer from correlated crashes, for instance, due to global power outages.</t>

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

<t>RNFD is an extension to RPL and is thus both vulnerable to and benefits from the security issues and solutions described in <xref target="RFC6550"/> and <xref target="RFC7416"/>.
Its specification in this document does not introduce new traffic patterns or new messages, for which specific mitigation techniques would be required beyond what can already be adopted for RPL.</t>

<t>In particular, RNFD depends on information exchanged in the RNFD Option.
If the contents of this option were compromised, then failure misdetection may occur.
One possibility is that the DODAG root may be falsely detected as crashed, which would result in an inability of the nodes to route packets, at least until a new DODAG Version is issued by the root.
Another possibility is that a crash of the DODAG root may not be detected by RNFD, in which case RPL would have to rely on its own mechanisms.
Moreover, compromising the contents of the RNFD Option may also lead to increased DIO traffic due to Trickle timer resets.
Consequently, RNFD deployments are RECOMMENDED to use RPL security mechanisms if there is a risk that control information might be modified or spoofed.</t>

<t>In this context, RNFD’s two features are worth highlighting.
First, unless all neighbors of a DODAG root are compromised, a false positive can always be detected by the root based on its local CFRCs.
If the frequency of such false positives becomes problematic, RNFD can be disabled altogether, for instance, until the problem has been diagnosed.
This procedure can be largely automated at LBRs.
Second, some types of false negatives can also be detected this way.
Those that pass undetected, in turn, are likely not to have major negative consequences on RPL apart from the lack of improvement to its performance upon a DODAG root’s crash, at least if RPL’s other components are not attacked as well.</t>

</section>
<section anchor="iana-considerations" title="IANA Considerations">

<t>To represent the RNFD Option, IANA is requested to allocate the value TBD1 from the <eref target="https://www.iana.org/assignments/rpl/rpl.xhtml#control-message-options">“RPL Control Message Options” registry</eref> of the “Routing Protocol for Low Power and Lossy Networks (RPL)” registry group.</t>

</section>
<section anchor="acknowledgements" title="Acknowledgements">

<t>The authors would like to acknowledge Piotr Ciolkosz and Agnieszka Paszkowska.
Agnieszka contributed to deeper understanding and formally proving various aspects of RPL’s behavior upon an LBR crash.
Piotr in turn developed a prototype implementation of RNFD dedicated for RPL to verify earlier performance claims.</t>

</section>


  </middle>

  <back>

    <references title='Normative References'>

&RFC2119;
&RFC6206;
&RFC6550;
&RFC6553;
&RFC6554;
&RFC8174;


    </references>

    <references title='Informative References'>

&RFC4861;
&RFC5184;
&RFC6202;
&RFC7102;
&RFC7228;
&RFC7416;
<reference anchor="Iwanicki16" >
  <front>
    <title>RNFD: Routing-layer detection of DODAG (root) node failures in low-power wireless networks</title>
    <author initials="K." surname="Iwanicki" fullname="Konrad Iwanicki">
      <organization></organization>
    </author>
    <date year="2016"/>
  </front>
  <seriesInfo name="In" value="IPSN 2016: Proceedings of the 15th ACM/IEEE International Conference on Information Processing in Sensor Networks, IEEE, pp. 1--12"/>
  <seriesInfo name="DOI" value="10.1109/IPSN.2016.7460720"/>
</reference>
<reference anchor="Ciolkosz19" >
  <front>
    <title>Integration of the RNFD Algorithm for Border Router Failure Detection with the RPL Standard for Routing IPv6 Packets</title>
    <author initials="P." surname="Ciolkosz" fullname="Piotr Ciolkosz">
      <organization></organization>
    </author>
    <date year="2019"/>
  </front>
  <seriesInfo name="Master's Thesis," value="University of Warsaw"/>
</reference>
<reference anchor="Paszkowska19" >
  <front>
    <title>Failure Handling in RPL Implementations: An Experimental Qualitative Study</title>
    <author initials="A." surname="Paszkowska" fullname="Agnieszka Paszkowska">
      <organization></organization>
    </author>
    <author initials="K." surname="Iwanicki" fullname="Konrad Iwanicki">
      <organization></organization>
    </author>
    <date year="2019"/>
  </front>
  <seriesInfo name="In" value="Mission-Oriented Sensor Networks and Systems: Art and Science (Habib M. Ammari ed.), Springer International Publishing,  pp. 49--95"/>
  <seriesInfo name="DOI" value="10.1007/978-3-319-91146-5_3"/>
</reference>
<reference anchor="Whang90" >
  <front>
    <title>A Linear-time Probabilistic Counting Algorithm for Database Applications</title>
    <author initials="K.-Y." surname="Whang" fullname="Kyu-Young Whang">
      <organization></organization>
    </author>
    <author initials="B.T." surname="Vander-Zanden" fullname="Brad T. Vander-Zanden">
      <organization></organization>
    </author>
    <author initials="H.M." surname="Taylor" fullname="Howard M. Taylor">
      <organization></organization>
    </author>
    <date year="1990"/>
  </front>
  <seriesInfo name="In" value="ACM Transactions on Database Systems"/>
  <seriesInfo name="DOI" value="10.1145/78922.78925"/>
</reference>


    </references>



  </back>

<!-- ##markdown-source:
H4sIAEGWt2cAA8V96XPbVpbvd/4VKOVDrA7JWPKSWHn9ahQvHU3Ly0hOp/pN
zXhAAqTQAgEOAEpm3H5/+zu/s9wFBGUl3VMvU9OmSOAu5559u5PJZDSvs6Ja
niSbbjH5fjTqiq7MT5KDizevXpwkr9K2S2Z1k+VN0tSbjv6ZN2l7lWR5l8+7
oq6Sokou3p0fjNLZrMlvThK8OMrqeZWuaJysSRfdpMhp8KYuy0lTLbLJw6ej
LO3o1+OHx08mD48nxw9Ho2LdnCRds2m744cPnz08HqVNnp4kZxVNWuXd6LZu
rpe0hjVN8fb8fHSdb+mrzD8xeYG5RnMaeVk325Ok7bLR6Cv6J62yD2lZVzTj
Nm9H6+Ik+feuno+Ttm66Jl+09Gm7wof/GI3STXdVNyejhP+b6L8J7bM9Sf48
Tc5u06qYXxfuB9non+uqSbPdX+uGYPtzVdzkTVt026ReJL+kTZveuidaWkLe
nSQ/plU6v0qTY/fLnF444cd/TW9T/3Wd0YQEtofPvgu+3FQddv2uLmm/7vv1
Fe/7m8ffJ8fHyZMnyePHyePj7xP3QL5Ki/IkKXTh/7IqVpvbaZ5tputyRNhB
oxazTTcEEtn564JWnZfJBf5tsrau4s1f0nLycpVWyWW96G7pWJNf6Czb/gpW
8+YbIMq/tPbCdJ6O9kz6Lm3naZm8v9rM8qaLJ3xetPM6udy2Xb7amWXdySv/
MsdT03m9Go2qulmlHR0Rtnjx6vnx0dEz/fj0+OFT+/jkyUP/8ZH/+Fg/fn/0
HX0cFdWiN97j758e6ccnR98/9kMf68fvjvzH4+Pv7ePjI57bcEr+SpKYRC+I
LImAJ2W6Jer0dEmI9uLti9M/JQ+auu4Ok4qwJlkQDDZN3oJqy/p2sq5v6aXb
osnLvG0ToiKQWXvA8xglfDVICgcBLRz0TuegRw3ye5s3Rd4CPIZKZxU9e/bu
8g1xAtpd8q6p53kOftRi/d1Vnhw96a6S0+evvz17+fKl0nqKDdLpP6+rRd7k
1TxPaMNnBnf6zAO1NNcSO73MK6L05I3ubpxgrHGyXk+To8nk6NiW/+Lt2Uly
9HB6dPTw2bdY1hTLmn73+OnD74hF4RHjW0dP6c/nRV1e1+2vgi3+YLDKZZPa
MWAbOKvktCTGVHRXq4RWmvwobPVC2OorOZnkhTvAW3pS3n13nlyCiRF18Zt6
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
JpfCCkxvycLOHDIbS0tEfDpvyc2wvL746ZN2zXLx3lds15lOpvmAn75atcsP
YvJpGuoiei7QQNgUrpuVS2xme4IW59+4Qx05iYJQSZI8HAiWHQ18dzzw3SMZ
4Ih+fJQ8Tp4kT5Pvku+TZ7/lu5HE//6h/9Mw3ntoY39M3v/44oj+Vmid59WS
xNLewGAQCvziPF8Y446w873/43X8g2MMrYMUdhGUpJuzHvDgL9ZySCD0h8Od
dUz/wXVM/0lj/OP4wRT19R++JquHaFs5h9QUiEqlua1FXmZq2ooWWDJsSEEe
iNwS6SvJWtj21T6aRdBW8RFIinRGQlL3nZwAffv9ZFZ0KAKRDH1Vj6fJC7fs
XJdkkygjgj9q3sG3m39EqY2pn8GkLFxiopD9Io/PdF/W7KGnkGY1TU69Sfcw
Ap3mIHErIeDQfYzZCP0AAbJKrO3VRDY1lk1MSFDy/gEMspogJOaWLR1ZLztm
aGy2e48Np5e834GeDY586KLzWrsu14bkz4ocmjXFmogV92sBIHvcYgh7WS92
tYNn/BhDUhK8SBs9BmcXZ1vPBLIzDsr4YdzpNlAYtC60gUxQ+7fzfuESswqZ
8XuNrWxljyRRybjLG+33UfeXMSsk65HXwZNPkTLJEJ2zbw0n50EdrlfWKvTG
tSctykBRr6njl1Iyqp2YwnXAapGGOJJy4OLNxSL2P+wA9+gpTxiu2EGLNi9g
0TI6qLM7m6Axnh5pt5XCIcEX1v/0MSHdKykdXHHepul7GNmZmUdGPIppWgZc
dIG5zhEZQvqPnkL961wHpWMo5iJhbsvxLiGjNlCo5e9Zvq3Vb3PPMzvcnfth
ENEpFo5sOKSkDc14Mr9YPQcjKh6R1y/+xOGXlHb5De9g0Ew378ZiB3jAM4Lm
imWfHIe9EwxrthDaruecgE7oj3Zy/v4PZfXg/OG35+8POWeF1kJfHBpqcOUj
BEi9TLUkfFNpG8nzh+6pmKQ8XO04BVV3HCP/Nf8vqVh4byPFh+deHfSJVDqs
VOOUZX/yQbdH/BIaNy1LnnasCZA5J3FDICK61CFcnNWrcXyMwy6QLyzo6E6v
hjtw75JlXp7rj7AIk7cXkaMj8P3IAApuzzNlxCI6E/bzKK9hipxJHWJ8bLEX
5C4nCNt58nKhBIcRazPII9dujAP23DHsOkbLHVMaCCsjcO4IJ+jYFDHvmQtV
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
Er+FXTjKAAA=

-->

</rfc>

