rfc9866xml2.original.xml   rfc9866.xml 
<?xml version="1.0" encoding="utf-8"?> <?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" [ <!DOCTYPE rfc [
<!ENTITY RFC2119 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere <!ENTITY nbsp "&#160;">
nce.RFC.2119.xml"> <!ENTITY zwsp "&#8203;">
<!ENTITY RFC6206 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere <!ENTITY nbhy "&#8209;">
nce.RFC.6206.xml"> <!ENTITY wj "&#8288;">
<!ENTITY RFC6550 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere
nce.RFC.6550.xml">
<!ENTITY RFC6553 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere
nce.RFC.6553.xml">
<!ENTITY RFC6554 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere
nce.RFC.6554.xml">
<!ENTITY RFC8174 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere
nce.RFC.8174.xml">
<!ENTITY RFC4861 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere
nce.RFC.4861.xml">
<!ENTITY RFC5184 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere
nce.RFC.5184.xml">
<!ENTITY RFC6202 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere
nce.RFC.6202.xml">
<!ENTITY RFC7102 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere
nce.RFC.7102.xml">
<!ENTITY RFC7228 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere
nce.RFC.7228.xml">
<!ENTITY RFC7416 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere
nce.RFC.7416.xml">
]> ]>
<?rfc toc="yes"?> <rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft
<?rfc sortrefs="yes"?> -ietf-roll-rnfd-07" number="9866" consensus="true" category="std" obsoletes="" u
<?rfc symrefs="yes"?> pdates="" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true"
symRefs="true" version="3">
<rfc ipr="trust200902" docName="draft-ietf-roll-rnfd-07" category="std"> <!-- [rfced] FYI - This document contained many non-ASCII characters used for
punctuation, such as smart quotes and en dashes. We updated to use the
ASCII equivalents per the Web Portion of the Style Guide (see
https://www.rfc-editor.org/styleguide/part2/#nonascii).
<front> To help you with your review, we created the following alt-diff file that does
<title abbrev="RNFD">RNFD: Fast border router crash detection in RPL</title> not contain any of those changes (i.e., changes from non-ASCII punctuation to
ASCII equivalent):
https://www.rfc-editor.org/authors/rfc9866-alt-diff.html
This diff file includes all of changes:
https://www.rfc-editor.org/authors/rfc9866-diff.html
-->
<!-- [rfced] Please note that the title of the document has been updated as
follows. We expanded abbreviations per Section 3.6 of RFC 7322 ("RFC
Style Guide") and also revised "Fast Border Router Crash Detection" to
improve readability. Let us know any concerns.
Original:
RNFD: Fast border router crash detection in RPL
Current:
Root Node Failure Detector (RNFD): Fast Detection of Border Router Crashes
in the Routing Protocol for Low-Power and Lossy Networks (RPL)
-->
<front>
<title abbrev="RNFD">Root Node Failure Detector (RNFD): Fast Detection of
Border Router Crashes in the Routing Protocol for Low-Power and Lossy
Networks (RPL)</title>
<seriesInfo name="RFC" value="9866"/>
<author initials="K." surname="Iwanicki" fullname="Konrad Iwanicki"> <author initials="K." surname="Iwanicki" fullname="Konrad Iwanicki">
<organization>University of Warsaw</organization> <organization>University of Warsaw</organization>
<address> <address>
<postal> <postal>
<street>Banacha 2</street> <street>Banacha 2</street>
<city>Warszawa</city> <city>Warszawa</city>
<code>02-097</code> <code>02-097</code>
<country>Poland</country> <country>Poland</country>
</postal> </postal>
<phone>+48 22 55 44 428</phone> <phone>+48 22 55 44 428</phone>
<email>iwanicki@mimuw.edu.pl</email> <email>iwanicki@mimuw.edu.pl</email>
</address> </address>
</author> </author>
<date year="2025" month="September"/>
<date year="2025" month="March" day="08"/> <area>RTG</area>
<workgroup>roll</workgroup>
<area>Internet</area>
<workgroup>ROLL</workgroup>
<keyword>Internet-Draft</keyword>
<abstract> <!-- [rfced Please insert any keywords (beyond those that appear in
the title) for use on https://www.rfc-editor.org/search. -->
<t>By and large, a correct operation of a network running RPL (the IPv6 routing <keyword>example</keyword>
protocol for low-power and lossy networks) requires border routers to be up.
In many applications, it is beneficial for the nodes to detect a failure of a bo
rder router as soon as possible to trigger fallback actions.
This document specifies RNFD (the root node failure detector), an extension to R
PL that expedites border router crash detection 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 Con
trol Message Options for synchronizing this state among different nodes, and the
coordination algorithm itself.</t>
<abstract>
<t>By and large, correct operation of a network running the Routing
Protocol for Low-Power and Lossy Networks (RPL) requires border routers to
be
up. In many applications, it is beneficial for the nodes to detect a
failure of a border router as soon as possible to trigger fallback
actions. This document specifies the Root Node Failure Detector (RNFD),
an extension to RPL that expedites detection of border router crashes 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 Option for synchronizing this state
among different nodes, and the coordination algorithm itself.</t>
</abstract> </abstract>
</front> </front>
<middle> <middle>
<section anchor="intro" numbered="true" toc="default">
<name>Introduction</name>
<t>RPL is an IPv6 routing protocol for Low-Power and Lossy Networks
(LLNs) <xref target="RFC6550" format="default"/>. 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>
<section anchor="intro" title="Introduction"> <t>One of the main design principles adopted in RPL to minimize node
resource consumption is delegating much of the responsibility for
<t>RPL is an IPv6 routing protocol for low-power and lossy networks (LLNs) <xref routing to LLN Border Routers (LBRs). A network is organized into
target="RFC6550"/>. Destination-Oriented Directed Acyclic Graphs (DODAGs), each
Such networks are usually constrained in device energy and channel capacity. corresponding to an LBR and having all its paths terminate at the LBR.
They are formed largely of nodes that offer little processing power and memory, To this end, every node is dynamically assigned a rank representing its
and links that are of variable qualities and support low data rates. distance to a given LBR, measured in some metric, with the LBR having
Therefore, a significant challenge that a routing protocol for LLNs has to addre the minimal rank, which reflects its role as the DODAG root. The ranks
ss is minimizing resource consumption without sacrificing reaction time to netwo allow each non-LBR node to select from among its neighbors (i.e., nodes
rk changes.</t> to which the node has links) those that are closer to the LBR than the
node itself (i.e., the node's parents in the graph). The resulting DODAG
<t>One of the main design principles adopted in RPL to minimize node resource co paths, consisting of the node-parent links, are utilized for routing
nsumption is delegating much of the responsibility for routing to LLN border rou packets upward to the LBR and outside the LLN. They are also used by
ters (LBRs). nodes to periodically report their connectivity upward to the LBR, which
A network is organized into destination-oriented directed acyclic graphs (DODAGs allows for directing packets downward from the LBR to these
), each corresponding to an LBR and having all its paths terminate at the LBR. nodes (for instance, by means of source routing <xref target="RFC6554"
To this end, every node is dynamically assigned a rank representing its distance format="default"/>). All in all, not only do LBRs
, measured in some metric, to a given LBR, with the LBR having the minimal rank, participate in routing, but they also drive the process of DODAG construct
which reflects its role as the DODAG root. ion
The ranks allow each non-LBR node to select from among its neighbors (i.e., node and maintenance underlying the protocol.</t>
s to which the node has links) those that are closer to the LBR than the node it <t>To play this central role, LBRs are expected to be more capable than
self: the node’s parents in the graph. regular LLN nodes. They are assumed not to be constrained in computing
The resulting DODAG paths, consisting of the node-parent links, are utilized for power, memory, and energy, which often entails a more involved
routing packets upward: to the LBR and outside the LLN. hardware-software architecture and tethered power supply. However, this
They are also used by nodes to periodically report their connectivity upward to also makes them prone to failures, especially since
the LBR, which allows in turn for directing packets downward, from the LBR to th it is often difficult to ensure a backup power supply for every LBR in lar
ese nodes, for instance, by means of source routing <xref target="RFC6554"/>. ge deployments.</t>
All in all, not only do LBRs participate in routing but also drive the process o <section anchor="effects-of-lbr-crashes" numbered="true" toc="default">
f DODAG construction and maintenance underlying the protocol.</t> <name>Effects of LBR Crashes</name>
<t>When an LBR crashes, or more generally, fails in a way that
<t>To play this central role, LBRs are expected to be more capable than regular prevents other nodes in its DODAG from communicating with it, the
LLN nodes. nodes also lose the ability to communicate with other Internet hosts.
They are assumed not to be constrained in computing power, memory, and energy, w In addition, a significant fraction of DODAG paths interconnecting the
hich often entails a more involved hardware-software architecture and tethered p nodes become invalid, as they pass through the dead LBR. The others
ower supply. also degenerate as a result of DODAG repair attempts, which are bound
This, however, also makes them prone to failures, especially since in large depl to fail. In effect, routing inside the DODAG also becomes largely
oyments it is often difficult to ensure a backup power supply for every LBR.</t> impossible. Consequently, it is desirable that an LBR crash be
detected by the nodes fast, so that they can leave the broken DODAG
<section anchor="effects-of-lbr-crashes" title="Effects of LBR Crashes"> and join another one or trigger additional application- or
deployment-dependent fallback mechanisms, thereby minimizing the
<t>When an LBR crashes or, more generally, fails in a way that prevents other no negative impact of the disconnection.</t>
des in its DODAG from communicating with it, the nodes also lose the ability to <t>Since all DODAG paths lead to the corresponding LBR, detecting its
communicate with other Internet hosts. crash by a node entails dropping all parents and adopting an infinite
In addition, a significant fraction of DODAG paths interconnecting the nodes bec rank, which reflects the node's inability to reach the dead LBR.
ome invalid, as they pass through the dead LBR. Depending on the deployment settings, the node can then remain in such
The others also degenerate as a result of DODAG repair attempts, which are bound a state, join a different DODAG, or even become the root of a
to fail. floating DODAG. In any case, however, achieving this state for all
In effect, routing inside the DODAG also becomes largely impossible. nodes is slow, can generate heavy traffic, and is difficult to
Consequently, it is desirable that an LBR crash be detected by the nodes fast, s implement correctly <xref target="Iwanicki16" format="default"/> <xref
o that they can leave the broken DODAG and join another one or trigger additiona target="Paszkowska19" format="default"/> <xref target="Ciolkosz19"
l application- or deployment-dependent fallback mechanisms, thereby minimizing t format="default"/>.</t>
he 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 h
eavy 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 n
eighbors 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 fini
te 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 observe
d sufficiently many forwarding failures over the link.
Therefore, considering the low-data-rate applications of LLNs, the period from t
he crash to the moment of eliminating from the DODAG the last link to the dead L
BR may be long.
Subsequently learning by all nodes that none of their links can form any path le
ading to the dead LBR also adds latency, partly due to parent changes that the n
odes independently perform in attempts to repair their broken paths locally.
Since a non-LBR node has only local knowledge of the network, potentially incons
istent with that of other nodes, such parent changes often produce paths contain
ing 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"/>, th
is also requires traffic, and hence time.
Finally, switching a parent or discovering a loop can also generate cascaded bur
sts of control traffic, owing to the adaptive Trickle algorithm for exchanging D
ODAG information <xref target="RFC6202"/>.
Overall, the behavior of the network when handling an LBR crash is highly subopt
imal, thereby not being in line with RPL’s goals of minimizing resource consumpt
ion 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 Roo
t Node Failure Detector (RNFD).
To minimize the time and traffic required to handle an LBR crash, the RNFD algor
ithm 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 onl
y 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 c
rash 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 an
d largely independently (in the background), and introducing few additional assu
mptions.</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 posi
tives may occur, but they can be alleviated as well.
In any case, the principles also guarantee that RNFD can be deactivated at any t
ime, 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 conside
ring other solutions to the problem.
More specifically, power outages can be alleviated by provisioning redundant pow
er sources or emergency batteries.
Likewise, RPL’s so-called virtual DODAG roots can help tolerate 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 com
plement them.
In particular, the operation of RNFD with different variants of virtual DODAG ro
ots 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 d
ocument are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <x
ref target="RFC8174"/> when, and only when, they appear in all capitals, as show
n here.</t>
<t>The Terminology used in this document is consistent with and incorporates tha <!-- [rfced] We were unable to find the terms "control traffic", "Trickle
t described in “Terms Used in Routing for Low-Power and Lossy Networks (LLNs)” < algorithm", or "DODAG" in RFC 6202. Should this citation be updated to
xref target="RFC7102"/>, “RPL: IPv6 Routing Protocol for Low-Power and Lossy Net RFC 6206?
works” <xref target="RFC6550"/>, and “The Routing Protocol for Low-Power and Los
sy 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 Net
works” <xref target="RFC7228"/>.</t>
<t>In particular, the following acronyms appear in the document:</t> Original:
<t><list style="hanging"> Finally, switching a parent or discovering a loop can also generate
<t hangText='DIO'> cascaded bursts of control traffic, owing to the adaptive Trickle algorithm
DODAG Information Object (a RPL message)</t> for exchanging DODAG information [RFC6202].
<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>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 sufficiently observed 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 the last link to the dead LBR from the DODAG 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" format="default"/>, 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" format="default"/>. 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" numbered="true" toc="default">
<name>Design Principles</name>
<t>To address this issue, this document proposes an extension to RPL,
dubbed the "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>
<ol spacing="normal" type="1"><li>
<t>Explicitly coordinating LBR monitoring between nodes instead of
relying only on the emergent behavior resulting from their
independent operation.</t>
</li>
<li>
<t>Avoiding probing all links to the dead LBR so as to reduce the
tail latency when eliminating these links from the DODAG.</t>
</li>
<li>
<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>
</li>
<li>
<t>Minimizing changes to RPL's existing algorithms by operating in
parallel and largely independently (in the background) and by
introducing few additional assumptions.</t>
</li>
</ol>
<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" numbered="true" toc="default">
<name>Other Solutions</name>
<!-- [rfced] Is "if possible" needed here?
<t><list style="hanging"> Original:
<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 DOD
AG 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 Ver
sion, 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 d
efines a partial order on its values and supports element addition and union. Th
e union operation is order- and duplicate-insensitive, that is, idempotent, comm
utative, and associative.</t>
</list></t>
</section> Given the consequences of LBR failures, if possible, it is also worth
<section anchor="overview" title="Overview"> considering other solutions to the problem.
<t>As mentioned previously, LBRs are DODAG roots in RPL, and hence a crash of an Perhaps:
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 Given the consequences of LBR failures, it is also worth
status of its links (i.e., whether they are up or down), it can only be done by considering other solutions to the problem.
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 a 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>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 tolerate 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, RNFD 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"
format="default"/>.</t>
</section>
</section>
<section anchor="terms" numbered="true" toc="default">
<name>Terminology</name>
<t>
The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>",
"<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>
",
"<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>",
"<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to
be
interpreted as described in BCP&nbsp;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" <xref target="RFC7102" format="default"/>, "RPL:
IPv6 Routing Protocol for Low-Power and Lossy Networks" <xref
target="RFC6550" format="default"/>, and "The Routing Protocol for
Low-Power and Lossy Networks (RPL) Option for Carrying RPL Information
in Data-Plane Datagrams" <xref target="RFC6553" format="default"/>.
Other terms used in LLNs can be found in "Terminology for
Constrained-Node Networks" <xref target="RFC7228"
format="default"/>.</t>
<t>The possible values of LORS and transitions between them are depicted in <xre <t>In particular, the following acronyms appear in the document:</t>
f target="fig_state_machine"/>. <dl newline="false" spacing="normal">
States “UP” and “GLOBALLY DOWN” can be attained by both Sentinels and Acceptors; <dt>DIO:</dt>
states “SUSPECTED DOWN” and “LOCALLY DOWN” — by Sentinels only.</t> <dd>DODAG Information Object (a RPL message)</dd>
<dt>DIS:</dt>
<dd>DODAG Information Solicitation (a RPL message)</dd>
<dt>DODAG:</dt>
<dd>Destination-Oriented Directed Acyclic Graph</dd>
<dt>LLN:</dt>
<dd>Low-Power and Lossy Network</dd>
<dt>LBR:</dt>
<dd>LLN Border Router</dd>
</dl>
<t>In addition, the document introduces the following concepts:</t>
<dl newline="false" spacing="normal">
<dt>Sentinel:</dt>
<dd>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 a Sentinel.</dd>
<dt>Acceptor:</dt>
<dd>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
a Sentinel.</dd>
<dt>Locally Observed DODAG Root's State (LORS):</dt>
<dd>A node's local knowledge of the DODAG root's status, specifying in
particular whether the DODAG root is up.</dd>
<dt>Conflict-Free Replicated Counter (CFRC):</dt>
<dd>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.</dd>
</dl>
</section>
<section anchor="overview" numbered="true" toc="default">
<name>Overview</name>
<t>As mentioned previously, LBRs are DODAG roots in RPL; 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
can only 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 a DODAG root's neighbor that monitors its link with
the root. Thus, the DODAG root normally has multiple Sentinels, but being
its neighbor need not imply being a Sentinel. An Acceptor node is
a node that is not a 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"
format="default"/>.</t>
<figure title="RNFD States and Transitions" anchor="fig_state_machine"><artwork> <section anchor="protocol-state-machine" numbered="true" toc="default">
<![CDATA[ <name>Protocol State Machine</name>
<t>The possible values of LORS and transitions between them are
depicted in <xref target="fig_state_machine" format="default"/>.
States "UP" and "GLOBALLY DOWN" can be attained by both Sentinels and
Acceptors; states "SUSPECTED DOWN" and "LOCALLY DOWN" can be attained
by Sentinels only.</t>
<figure anchor="fig_state_machine">
<name>RNFD States and Transitions</name>
<artwork name="" type="" align="left" alt=""><![CDATA[
+---------------------------------------------------------+ +---------------------------------------------------------+
| |---------------------------+ 3a | | |---------------------------+ 3a |
| +-----------------+---------+ 3b | | | +-----------------+---------+ 3b | |
| | 2b | v v v | | 2b | v v v
+-+----+-+ 1 +---------+-+ +-----------+ +-+------+-+ +-+----+-+ 1 +---------+-+ +-----------+ +-+------+-+
| UP +---->+ SUSPECTED +---->+ LOCALLY +---->+ GLOBALLY | | UP +---->+ SUSPECTED +---->+ LOCALLY +---->+ GLOBALLY |
| +<----+ DOWN | 2a | DOWN | 3c | DOWN | | +<----+ DOWN | 2a | DOWN | 3c | DOWN |
+-+----+-+ 4a +-----------+ +-+---------+ +-+--------+ +-+----+-+ 4a +-----------+ +-+---------+ +-+--------+
^ ^ | | ^ ^ | |
| | 4b | | | | 4b | |
| +---------------------------+ 5 | | +---------------------------+ 5 |
+--------------------------------------------------+ +--------------------------------------------------+]]></artwork>
</figure>
]]></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
<t>To begin with, when any node joins a DODAG Version, the DODAG root must appea "UP". For a properly working DODAG root, the node remains in state
r alive, so the node initializes RNFD with its LORS equal to “UP”. "UP".</t>
For a properly working DODAG root, the node remains in state “UP”.</t> <t>However, when a node (acting as a Sentinel) starts suspecting that
the root may have crashed, it changes its LORS to "SUSPECTED DOWN"
<t>However, when a node — acting as Sentinel — starts suspecting that the root m (transition 1 in <xref target="fig_state_machine" format="default"/>).
ay have crashed, it changes its LORS to “SUSPECTED DOWN” (transition 1 in <xref The transition from "UP" to "SUSPECTED DOWN" can happen based on the
target="fig_state_machine"/>). node's observations at either the data plane (for instance, link-layer
The transition from “UP” to “SUSPECTED DOWN” can happen based on the node’s obse triggers about missing hop-by-hop acknowledgments for packets
rvations at either the data plane, for instance, link-layer triggers about missi forwarded over the node's link to the root) or at the control plane (for
ng hop-by-hop acknowledgments for packets forwarded over the node’s link to the example, a significant growth in the number of Sentinels already
root, or the control plane, for example, a significant growth in the number of S suspecting the root to be dead). In state "SUSPECTED DOWN", the
entinels already suspecting the root to be dead. Sentinel node may verify its suspicion and/or inform other nodes about
In state “SUSPECTED DOWN”, the Sentinel node may verify its suspicion and/or inf the suspicion. When this has been done, it changes its LORS to
orm other nodes about the suspicion. "LOCALLY DOWN" (transition 2a). In some cases, the verification need
When this has been done, it changes its LORS to “LOCALLY DOWN” (transition 2a). not be performed, and as an optimization, a direct transition from
In some cases, the verification need not be performed and, as an optimization, a "UP" to "LOCALLY DOWN" (transition 2b) can be done instead.</t>
direct transition from “UP” to “LOCALLY DOWN” (transition 2b) can be done inste <t>If a sufficient number of Sentinels have their LORS equal to "LOCALLY
ad.</t> DOWN", all nodes (Sentinels and Acceptors) consent globally that the
DODAG root must have crashed and set their LORS to "GLOBALLY DOWN",
<t>If sufficiently many Sentinels have their LORS equal to “LOCALLY DOWN”, all n irrespective of the previous value (transitions 3a, 3b, and 3c).
odes — Sentinels and Acceptors — consent globally that the DODAG root must have State "GLOBALLY DOWN" is terminal in that the only transition any node
crashed and set their LORS to “GLOBALLY DOWN”, irrespective of the previous valu can perform from this to another state (transition 5) takes place when
e (transitions 3a, 3b, and 3c). the node joins a new DODAG version. When a node is in state "GLOBALLY
State “GLOBALLY DOWN” is terminal in that the only transition any node can perfo DOWN", RNFD forces RPL to maintain an infinite rank and no parent,
rm from this to another state (transition 5) takes place when the node joins a n thereby preventing routing packets upward in the DODAG. In other
ew DODAG version. words, this state represents a situation in which all non-root nodes
When a node is in state “GLOBALLY DOWN”, RNFD forces RPL to maintain an infinite agree that the current DODAG version is unusable; hence, to
rank and no parent, thereby preventing routing packets upward in the DODAG. recover, the root has to give a proof of being alive by initiating a
In other words, this state represents a situation in which all non-root nodes ag new DODAG Version.</t>
ree that the current DODAG version is unusable, and hence, to recover, the root <t>In contrast, if a node (either a Sentinel or Acceptor) is in state
has to give a proof of being alive by initiating a new DODAG Version.</t> "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
<t>In contrast, if a node — either Sentinel or Acceptor — is in state “UP”, RNFD "SUSPECTED DOWN" and "LOCALLY DOWN", attainable only by Sentinels.
does not influence RPL’s packet forwarding: a node can route packets upward if Finally, while in any of the two states, a Sentinel node may observe
it has a parent. some activity of the DODAG root and hence decide that its suspicion
The same is true for states “SUSPECTED DOWN” and “LOCALLY DOWN”, attainable only is a mistake. In such a case, it returns to state "UP" (transitions
by Sentinels. 4a and 4b).</t>
Finally, while in any of the two states, a Sentinel node may observe some activi </section>
ty of the DODAG root, and hence decide that its suspicion is a mistake. <section anchor="counters-and-communication" numbered="true" toc="default"
In such a case, it returns to state “UP” (transitions 4a and 4b).</t> >
<name>Counters and Communication</name>
</section> <t>To enable arriving at a global conclusion that the DODAG root has
<section anchor="counters-and-communication" title="Counters and Communication"> crashed (i.e., transiting to state "GLOBALLY DOWN"), all nodes count
locally and synchronize among each other the number of Sentinels
<t>To enable arriving at a global conclusion that the DODAG root has crashed (i. considering the root to be dead (i.e., those in state "LOCALLY DOWN").
e., transiting to state “GLOBALLY DOWN”), all nodes count locally and synchroniz This process employs structures referred to as Conflict-Free
e among each other the number of Sentinels considering the root to be dead (i.e. Replicated Counters (CFRCs). They are stored and modified
, those in state “LOCALLY DOWN”). independently by each node and are disseminated throughout the network
This process employs structures referred to as conflict-free replicated counters in options added to RPL link-local control messages: DODAG Information
(CFRCs). Objects (DIOs) and DODAG Information Solicitations (DISs). Upon
They are stored and modified independently by each node and are disseminated thr reception of such an option from its neighbor, a node merges the
oughout the network in options added to RPL link-local control messages: DODAG I received counter with its local one, thereby obtaining a new content
nformation Objects (DIOs) and DODAG Information Solicitations (DISs). for its local counter.</t>
Upon reception of such an option from its neighbor, a node merges the received c <t>The merging operation is idempotent, commutative, and associative.
ounter with its local one, thereby obtaining a new content for its local counter Moreover, all possible counter values are partially ordered. This
.</t> enables ensuring eventual consistency of the counters across all
nodes, irrespective of the particular sequence of merges, shape of the
<t>The merging operation is idempotent, commutative, and associative. DODAG, or general network topology. In effect, as long as the network
Moreover, all possible counter values are partially ordered. is connected, all nodes will be able to arrive at the same conclusion
This enables ensuring eventual consistency of the counters across all nodes, irr regarding the DODAG root, in particular when no two Sentinels
espective of the particular sequence of merges, shape of the DODAG, or general n have a direct link with each other.</t>
etwork topology. <t>Each node in RNFD maintains two CFRCs for a DODAG:</t>
In effect, as long as the network is connected, all nodes will be able to arrive <dl>
at the same conclusion regarding the DODAG root, in particular, even when no tw <dt>PositiveCFRC:</dt><dd>Counts Sentinels that consider or have
o Sentinels have a direct link with each other.</t> previously considered the root node as alive in the current DODAG
Version.</dd>
<t>Each node in RNFD maintains two CFRCs for a DODAG:</t> <dt>NegativeCFRC:</dt><dd>Counts Sentinels that consider or have
previously considered the root node as dead in the current DODAG
<t><list style="symbols"> Version.</dd>
<t>PositiveCFRC, counting Sentinels that consider or have previously considere </dl>
d the root node as alive in the current DODAG Version,</t> <t>The PositiveCFRC is always greater than or equal to the NegativeCFRC
<t>NegativeCFRC, counting Sentinels that consider or have previously considere in
d the root node as dead in the current DODAG Version.</t> terms of the partial order defined for the counters. The difference
</list></t> between the value of the PositiveCFRC and the value of the NegativeCFRC
is
<t>PositiveCFRC is always greater than or equal to the NegativeCFRC in terms of thus nonnegative and estimates the number of Sentinels that still
the partial order defined for the counters. consider the DODAG root node as alive.</t>
The difference between the value of PositiveCFRC and the value of NegativeCFRC i </section>
s thus nonnegative and estimates the number of Sentinels that still consider the </section>
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 RP
L 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 count
ed 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 c
ounted 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 coun
ts 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 count
s 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 grea
ter 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"> <section anchor="the-rnfd-option" numbered="true" toc="default">
<t>idempotence: c1 = merge(c1, c1);</t> <name>The RNFD Option</name>
<t>commutativity: merge(c1, c2) = merge(c2, c1);</t> <t>RNFD state synchronization between nodes takes place through the RNFD
<t>associativity: merge(c1, merge(c2, c3)) = merge(merge(c1, c2), c3).</t> Option. It is a new type of RPL Control Message Option that is carried
</list></t> 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" numbered="true" toc="default">
<name>General CFRC Requirements</name>
<t>CFRCs in RNFD <bcp14>MUST</bcp14> support the following operations:</
t>
<dl newline="true" spacing="normal">
<dt>value(c)</dt>
<dd>Returns a nonnegative integer value corresponding to the number
of nodes counted by a given CFRC, c.</dd>
<dt>zero()</dt>
<dd>Returns a CFRC that counts no nodes, that is, has its value
equal to 0.</dd>
<dt>self()</dt>
<dd>Returns a CFRC that counts only the node executing the operation.<
/dd>
<dt>infinity()</dt>
<dd>Returns a CFRC that counts all possible nodes and represents a
special value, infinity.</dd>
<dt>merge(c1, c2)</dt>
<dd>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).</dd>
<dt>compare(c1, c2)</dt>
<dd>Returns the result of comparing c1 to c2.</dd>
<dt>saturated(c)</dt>
<dd>Returns TRUE if a given CFRC, c, is saturated (i.e., no more new
nodes should be counted by it); returns FALSE otherwise.</dd>
</dl>
<t>The partial ordering of CFRCs implies that the result of compare(c1,
c2) can be either:</t>
<ul spacing="normal">
<li>
<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>
</li>
<li>
<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>
</li>
<li>
<t>equal, if c1 and c2 are the same (i.e., they count the same nodes
); or</t>
</li>
<li>
<t>incomparable, otherwise.</t>
</li>
</ul>
<t>In particular, zero() is smaller than all other values, and infinity(
) is greater than any other value.</t>
<t>The properties of merging can be formalized as follows for
any c1, c2, and c3:</t>
<ul spacing="normal">
<li>
<t>idempotence: c1 = merge(c1, c1);</t>
</li>
<li>
<t>commutativity: merge(c1, c2) = merge(c2, c1); and</t>
</li>
<li>
<t>associativity: merge(c1, merge(c2, c3)) = merge(merge(c1, c2), c3
).</t>
</li>
</ul>
<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" format="default"/>.</t>
</section>
<t>In particular, merge(c, zero()) always equals c while merge(c, infinity()) al <section anchor="msg_format" numbered="true" toc="default">
ways equals infinity().</t> <name>Format of the Option</name>
<t>There are many algorithmic structures that can provide the aforementioned pro <!-- [rfced] Would including a reference for "generic format of RPL Control
perties of CFRC. Message Options" be helpful to readers?
Although in principle RNFD does not rely on any specific one, the option adopts
so-called linear counting <xref target="Whang90"/>.</t>
</section> Original:
<section anchor="msg_format" title="Format of the Option">
<t>The format of the RNFD Option conforms to the generic format of RPL Control M The format of the RNFD Option conforms to the generic format of RPL
essage Options:</t> Control Message Options:
-->
<figure title="Format of the RNFD Option" anchor="fig_opt_format"><artwork><![CD <t>The format of the RNFD Option conforms to the generic format of RPL C
ATA[ ontrol Message Options:</t>
<figure anchor="fig_opt_format">
<name>Format of the RNFD Option</name>
<artwork name="" type="" align="left" alt=""><![CDATA[
0 1 2 3 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 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 | | | Type = 0x0E | Option Length | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +
| | | |
+ + + +
| PosCFRC, NegCFRC (Variable Length*) | | PosCFRC, NegCFRC (Variable Length*) |
. . . .
. . . .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork>
</figure>
The '*' denotes that, if present, the fields have equal lengths. <t>The "*" denotes that, if present, the fields have equal lengths.</t>
]]></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 t
he Option Type and Option Length fields. Its value MUST be even. A value of 0 de
notes 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 PositiveCF
RC and NegativeCFRC, respectively.</t>
</list></t>
<t>The length of the arrays constituting the PosCFRC and NegCFRC fields is the s
ame and is derived from Option Length as follows.
The value of Option Length is divided by 2 to obtain the number of octets each o
f 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 th
an the upper bound is assumed.
For example, if the value of Option Length is 16, then each array occupies 8 oct
ets, and its actual bit length is 61, as this is the largest prime number less t
han 64.</t>
<t>Furthermore, for any bit equal to 1 in the NegCFRC, the bit with the same ind
ex 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 arra
ys) 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 foll
ows:</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"> <!-- [rfced] Section 4.2: We note that "Type" appears in Figure 2, but that it
<t>equal if each bit of c1 is equal to the corresponding bit of c2;</t> is defined as "Option Type" in the definition list that follows. Are any
<t>less if c1 and c2 are not equal and, for each bit equal to 1 in c1, the cor updates needed for consistency?
responding 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"> <dl newline="false" spacing="normal">
<t hangText='saturated(c)'> <dt>Option Type:</dt>
Returns TRUE, if more than RNFD_CFRC_SATURATION_THRESHOLD of the bits in c are <dd>0x0E</dd>
equal to 1, or FALSE, otherwise.</t> <dt>Option Length:</dt>
</list></t> <dd>8-bit unsigned integer. Denotes the length of the option in
octets, excluding the Option Type and Option Length fields. Its value
<bcp14>MUST</bcp14> be even. A value of 0 denotes that RNFD is
disabled in the current DODAG Version.</dd>
<dt>PosCFRC, NegCFRC:</dt>
<dd>Two variable-length, octet-aligned bit arrays carrying the
sender's PositiveCFRC and NegativeCFRC, respectively.</dd>
</dl>
<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 <bcp14>MUST</bcp14> also be equal to 1 in the PosCFRC.
Any unused bits (i.e., the bits beyond the actual bit length of each
of the arrays) <bcp14>MUST</bcp14> be equal to 0. Finally, if PosCFRC
has all its bits equal to 1, then NegCFRC <bcp14>MUST</bcp14> 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>
<dl newline="true" spacing="normal">
<dt>value(c)</dt>
<dd>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 c, and LT is
the bit length of the array.</dd>
<dt>zero()</dt>
<dd>Returns an array with all bits equal to 0.</dd>
<dt>self()</dt>
<dd>Returns an array with a single bit, selected uniformly at random,
equal to 1.</dd>
<dt>infinity()</dt>
<dd>Returns an array with all bits equal to 1.</dd>
<dt>merge(c1, c2)</dt>
<dd>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.</dd>
<dt>compare(c1, c2)</dt>
<dd><t>Returns:</t>
</section> <ul spacing="normal">
</section> <li>
<section anchor="rnfd_behavior" title="RPL Router Behavior"> <t>equal, if each bit of c1 is equal to the corresponding bit of
c2;</t>
</li>
<li>
<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>
</li>
<li>
<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; or</t>
</li>
<li>
<t>incomparable, otherwise.</t>
</li>
</ul>
</dd>
<dt>saturated(c)</dt>
<dd>Returns TRUE if more than RNFD_CFRC_SATURATION_THRESHOLD of the
bits in c are equal to 1; returns FALSE otherwise.</dd>
</dl>
</section>
</section>
<t>Although RNFD operates largely independently of RPL, it does need interact wi <section anchor="rnfd_behavior" numbered="true" toc="default">
th RPL and the overall protocol stack. <name>RPL Router Behavior</name>
These interactions are described next and can be realized, for instance, by mean <t>Although RNFD operates largely independently of RPL, it does need to
s of event triggers.</t> 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" numbered="true" toc="default">
<name>Joining a DODAG Version and Changing the RNFD Role</name>
<t>Whenever RPL is running at a node and joins a DODAG Version, RNFD (if
active) <bcp14>MUST</bcp14> assume the role of Acceptor for the node.
Accordingly, it <bcp14>MUST</bcp14> set its LORS to "UP" and its
PositiveCFRC and NegativeCFRC to zero().</t>
<section anchor="rnfd_behavior_roles" title="Joining a DODAG Version and Changin <t>The role may then change between Acceptor and Sentinel at any time.
g the RNFD Role"> However, while a switch from Sentinel to Acceptor has no
preconditions, in order for a switch from Acceptor to Sentinel to be pos
sible,
<em>all</em> of the following conditions <bcp14>MUST</bcp14> hold:</t>
<ol spacing="normal" type="1"><li>
<t>LORS is "UP";</t>
</li>
<li>
<t>saturated(PositiveCFRC) is FALSE;</t>
</li>
<li>
<t>a neighbor entry for the DODAG root is present in RPL's DODAG par
ent set; and</t>
</li>
<li>
<t>the neighbor is considered reachable via its link-local IPv6 addr
ess.</t>
</li>
</ol>
<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
<bcp14>MUST</bcp14> add itself to its PositiveCFRC as follows. It
<bcp14>MUST</bcp14> generate a new CFRC value, selfc = self(), and
it <bcp14>MUST</bcp14> 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>Whenever RPL running at a node joins a DODAG Version, RNFD — if active — MUST <!-- [rfced] We have updated this long sentence to be two sentences to improve
assume for the node the role of Acceptor. readability. Please review to confirm these updates do not change your
Accordingly, it MUST set its LORS to “UP” and its PositiveCFRC and NegativeCFRC intended meaning (in particular, our addition of another "MUST" in the
to zero().</t> second sentence).
<t>The role may then change between Acceptor and Sentinel at any time. Original:
However, while a switch from Sentinel to Acceptor has no preconditions, for a sw
itch from Acceptor to Sentinel to be possible, <spanx style="emph">all</spanx> o
f the following conditions MUST hold:</t>
<t><list style="numbers"> * for “UP” and “SUSPECTED DOWN”, the node MUST set its LORS to “UP”,
<t>LORS is “UP”;</t> MUST NOT modify it PositiveCFRC, but MUST add itself to
<t>saturated(PositiveCFRC) is FALSE;</t> NegativeCFRC, that is, replace its NegativeCFRC, denoted oldnc,
<t>a neighbor entry for the DODAG root is present in RPL’s DODAG parent set;</ with newnc = merge(oldnc, selfc), where selfc is the counter
t> generated with self() when the node last added itself to its
<t>the neighbor is considered reachable via its link-local IPv6 address.</t> PositiveCFRC.
</list></t>
<t>A role change also requires appropriate updates to LORS and CFRCs, so that th Current:
e node is properly accounted for.
More specifically, when changing its role from Acceptor to Sentinel, the node MU
ST add itself to its PositiveCFRC as follows.
It MUST generate a new CFRC value, selfc = self(), and MUST replace its Positive
CFRC, 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"> * For "UP" and "SUSPECTED DOWN", the node MUST set its LORS to "UP" and
<t>for “GLOBALLY DOWN”, the node MUST NOT modify its LORS, PositiveCFRC, and N MUST NOT modify its PositiveCFRC, but it MUST add itself to
egativeCFRC;</t> NegativeCFRC. That is, it MUST replace its NegativeCFRC (denoted oldnc)
<t>for “LOCALLY DOWN”, the node MUST set its LORS to “UP” but MUST NOT modify with newnc = merge(oldnc, selfc), where selfc is the counter
its PositiveCFRC and NegativeCFRC;</t> generated with self() when the node last added itself to its
<t>for “UP” and “SUSPECTED DOWN”, the node MUST set its LORS to “UP”, MUST NOT PositiveCFRC.
modify it PositiveCFRC, but MUST add itself to NegativeCFRC, that is, replace i -->
ts NegativeCFRC, denoted oldnc, with newnc = merge(oldnc, selfc), where selfc is
the counter generated with self() when the node last added itself to its Positi
veCFRC.</t>
</list></t>
</section> <ul spacing="normal">
<section anchor="rnfd_behavior_detection" title="Detecting and Verifying Problem <li>
s with the DODAG Root"> <t>For "GLOBALLY DOWN", the node <bcp14>MUST NOT</bcp14> modify
its LORS, PositiveCFRC, and NegativeCFRC.</t>
</li>
<li>
<t>For "LOCALLY DOWN", the node <bcp14>MUST</bcp14> set its LORS
to "UP" but <bcp14>MUST NOT</bcp14> modify its PositiveCFRC and
NegativeCFRC.</t>
</li>
<li>
<t>For "UP" and "SUSPECTED DOWN", the node <bcp14>MUST</bcp14> set
its LORS to "UP" and <bcp14>MUST NOT</bcp14> modify its PositiveCFRC
,
but it <bcp14>MUST</bcp14> add itself to NegativeCFRC. That is, it <
bcp14>MUST</bcp14>
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>
</li>
</ul>
</section>
<section anchor="rnfd_behavior_detection" numbered="true" toc="default">
<name>Detecting and Verifying Problems with the DODAG Root</name>
<t>Only nodes that are Sentinels take an active part in detecting crashe
s
of the DODAG root; Acceptors just disseminate their observations,
reflected in the CFRCs.</t>
<t>Only nodes that are Sentinels take active part in detecting crashes of the DO <t>The DODAG root monitoring <bcp14>SHOULD</bcp14> be based on both
DAG Root; Acceptors just disseminate their observations, reflected in the CFRCs. internal inputs, notably the values of CFRCs and LORS, and external
</t> inputs, such as triggers from RPL and other protocols. External input
monitoring <bcp14>SHOULD</bcp14> be performed preferably in a reactive
fashion, also independently of RPL, and at both the data plane and contr
ol
plane. In particular, it is <bcp14>RECOMMENDED</bcp14> that RNFD be
directly notified of events relevant to the routing adjacency
maintenance mechanisms on which RPL relies, such as Layer 2 (L2) trigger
s
<xref target="RFC5184" format="default"/> or the Neighbor
Unreachability Detection <xref target="RFC4861" format="default"/>
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 to 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,
it is <bcp14>RECOMMENDED</bcp14> 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 <bcp14>SHOULD</bcp14>
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>The DODAG root monitoring SHOULD be based on both internal inputs, notably th <!-- [rfced] We are having trouble understanding this sentence. We updated the
e values of CFRCs and LORS, and external inputs, such as triggers from RPL and o introductory clause ("Whenever...DODAG root") as follows. Please review
ther protocols. to ensure the updated text accurately conveys the intended meaning.
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 releva
nt to the routing adjacency maintenance mechanisms on which RPL relies, such as
Layer 2 triggers <xref target="RFC5184"/> or the Neighbor Unreachability Detecti
on <xref target="RFC4861"/> mechanism.
In addition, depending on the underlying protocol stack, there may be other pote
ntial 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 trans
mitted 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 d
etecting potential problems even when normally it would not exchange packets ove
r the link with the DODAG root during some period.
In particular, RNFD SHOULD conclude that there may be problems with the DODAG ro
ot, when the fraction value(NegativeCFRC)/value(PositiveCFRC) has grown by at le
ast 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 externa l or internal inputs — that there may be problems with the link with the DODAG r oot, it MUST set its LORS to either “SUSPECTED DOWN” or, as an optimization, to “LOCALLY DOWN”.</t> Original:
<t>The “SUSPECTED DOWN” value of LORS is temporary: its aim is to give RNFD an a Whenever having its LORS set to “UP” RNFD concludes — based on either
dditional opportunity to verify whether the link with the DODAG root is indeed d external or internal inputs — that there may be problems with the
own. link with the DODAG root, it MUST set its LORS to either “SUSPECTED
Depending on the outcome of such verification, RNFD MUST set its LORS to either DOWN” or, as an optimization, to “LOCALLY DOWN”.
“UP”, if the link has been confirmed not to be down, or “LOCALLY DOWN”, otherwis
e.
The verification can be performed, for example, by transmitting RPL DIS or ICMPv
6 Echo Request messages to the DODAG root’s link-local IPv6 address and expectin
g 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 simultan
eous probes, for instance, random backoffs can be employed to this end.
It is RECOMMENDED that the “SUSPECTED DOWN” value of LORS is attained and verifi
cation 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 CFR
C values.
In contrast, for direct observations, such as missing L2 acknowledgments, the ve
rification MAY be skipped, with the node’s LORS effectively changing from “UP” d
irectly to “LOCALLY DOWN”.</t>
<t>For consistency with RPL, when detecting potential problems with the DODAG ro Updated:
ot, RNFD also must make use of RPL’s independent knowledge.
More specifically, a node MUST switch its LORS from “UP” or “SUSPECTED DOWN” dir
ectly to “LOCALLY DOWN” if a neighbor entry for the DODAG root is removed from R
PL’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 ma Whenever its LORS is set to "UP" and RNFD concludes (based on either
ke an observation confirming that its link with the DODAG root is actually up. external or internal inputs) that there may be problems with the
In such a case, it SHOULD set its LORS back to “UP” but MUST NOT do this before link with the DODAG root, it MUST set its LORS either to "SUSPECTED
the previous conditions 2–4 necessary for a node to change its role from Accepto DOWN" or, as an optimization, to "LOCALLY DOWN".
r 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 DODA <t> Whenever its LORS is set to "UP" and RNFD concludes (based on either
G root, the aforementioned LORS transitions are accompanied by changes to the no external or internal inputs) that there may be problems with the link with
de’s local CFRCs as follows. the DODAG root, it <bcp14>MUST</bcp14> set its LORS either to "SUSPECTED DOWN"
Transitions between “UP” and “SUSPECTED DOWN” do not affect any of the two CFRCs or, as an optimization, to "LOCALLY DOWN".</t>
. <t>The "SUSPECTED DOWN" value of LORS is temporary: its aim is to give
During a switch from “UP” or “SUSPECTED DOWN” to “LOCALLY DOWN”, in turn, the no RNFD an additional opportunity to verify whether the link with the
de MUST add itself to its NegativeCFRC, as explained previously. DODAG root is indeed down. Depending on the outcome of such
By symmetry, if there is a transition from “LOCALLY DOWN” to “UP”, the node MUST verification, RNFD <bcp14>MUST</bcp14> set its LORS to either "UP", if
add itself to its PositiveCFRC, again, as explained previously.</t> 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 <bcp14>RECOMMENDED</bcp14> that the "SUSPECTED DOWN" value of LORS
be attained and verification take 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 <bcp14>MAY</bcp14> 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 <bcp14>MUST</bcp14> 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>Such changes to a node’s local CFRCs, if performed repeatedly due to incorrec <!-- [rfced] Would updating "previous conditions 2–4" as following make this
t decisions regarding the status of the node’s link with the DODAG root, may lea text easier for readers to follow?
d to those CFRCs becoming saturated.
An implementation should thus try to minimize false-positive transitions from “U
P” 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 confidenc
e of individual decisions, such as during the aforementioned verification in the
“SUSPECTED DOWN” state, or can limit the number of transitions per node, possib
ly in an adaptive fashion.</t>
</section> Original:
<section anchor="rnfd_behavior_consensus" title="Disseminating Observations and In such a case, it SHOULD set its LORS back to
Reaching Agreement"> “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 Section 5.1).
<t>Nodes disseminate their observations by exchanging CFRCs in the RNFD Options Perhaps:
embedded in link-local RPL control messages, notably DIOs and DISs. In such a case, it SHOULD set its LORS back to
When processing such a received option, a node — acting as Sentinel or Acceptor "UP" but MUST NOT do this before conditions 2-4 in Section 5.1, which are
— MUST update its PositiveCFRC and NegativeCFRC to respectively newpc = merge(ol necessary for a node to change its role from Acceptor to Sentinel, all
dpc, recvpc) and newnc = merge(oldnc, recvnc), where oldpc and oldnc are the val hold.
ues of the node’s PositiveCFRC and NegativeCFRC before the update, while recvpc -->
and recvnc are the received values of option fields PosCFRC and NegCFRC, respect
ively.</t>
<t>In effect, the node’s value of fraction value(NegativeCFRC)/value(PositiveCFR <t>Finally, while having its LORS already equal to "LOCALLY DOWN", a
C) may change. node may make an observation confirming that its link with the DODAG
If the fraction reaches at least RNFD_CONSENSUS_THRESHOLD (with value(PositiveCF root is actually up. In such a case, it <bcp14>SHOULD</bcp14> set its
RC) being greater than zero), then the node consents on the DODAG root being dow LORS back to "UP" but <bcp14>MUST NOT</bcp14> do this before the
n. previous conditions 2-4 necessary for a node
Accordingly, it MUST change its LORS to “GLOBALLY DOWN” and set its PositiveCFRC to change its role from Acceptor to Sentinel all hold (see <xref
and NegativeCFRC both to infinity().</t> target="rnfd_behavior_roles" format="default"/>).</t>
<t>The “GLOBALLY DOWN” value of LORS is terminal: the node MUST NOT change it an <!-- [rfced] Is "again" needed in these sentences?
d 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, Original:
updates to a node’s CFRCs may affect the sending schedule of these messages, wh
ich 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 contain
ing 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.
The minimal and maximal interval sizes of the dedicated timer SHOULD NOT be smal
ler than those of RPL’s original DIO Trickle timer.
In contrast, in the absence of the dedicated Trickle timer for RNFD, an implemen
tation SHOULD ensure that the RNFD Option is present in multicast DIO messages s
ufficiently 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 b
y RNFD — either the dedicated one or RPL’s original one, depending on the implem
entation — 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 i
s disseminated in the DODAG fast.
Likewise, a node SHOULD reset its Trickle timer when any of its local CFRCs chan
ges significantly.</t>
</section> By symmetry, if there is a transition from “LOCALLY
<section anchor="rnfd_behavior_root" title="DODAG Root’s Behavior"> DOWN” to “UP”, the node MUST add itself to its PositiveCFRC, again,
as explained previously.
...
In addition, if its LORS is “LOCALLY
DOWN”, then it MUST also add itself to its NegativeCFRC, again, as
explained previously.
...
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.
<t>The DODAG root node MUST assume the role of Acceptor in RNFD and MUST NOT eve Perhaps (remove "again"):
r switch this role.
It MUST also monitor its LORS and local CFRCs, so that it can react to various e
vents.</t>
<t>To start with, the DODAG root MUST generate a new DODAG Version, thereby rest By symmetry, if there is a transition from "LOCALLY
arting the protocol, if it changes its LORS to “GLOBALLY DOWN”, which may happen DOWN" to "UP", the node MUST add itself to its PositiveCFRC,
when the root has restarted after a crash or the nodes have falsely detected it as explained previously.
s crash. ...
It MAY also generate a new DODAG Version if fraction value(NegativeCFRC)/value(P In addition, if its LORS is "LOCALLY
ositiveCFRC) approaches RNFD_CONSENSUS_THRESHOLD, so as to avoid potential inter DOWN", then it MUST also add itself to its NegativeCFRC, as
ruptions to routing.</t> explained previously.
...
In this way, 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.
-->
<t>Furthermore, the DODAG root SHOULD either generate a new DODAG Version or inc <t>To appropriately account for the node's observations on the state
rease the bit length of its CFRCs if saturated(PositiveCFRC) becomes TRUE. of the DODAG root, the aforementioned LORS transitions are accompanied
This is a self-regulation mechanism that helps adjust the CFRCs to a potentially by changes to the node's local CFRCs as follows. Transitions between
large number of Sentinels (see <xref target="mgmnt_roles_and_cfrc_lens"/>).</t> "UP" and "SUSPECTED DOWN" do not affect either of the two CFRCs. During
a switch from "UP" or "SUSPECTED DOWN" to "LOCALLY DOWN", the
node <bcp14>MUST</bcp14> add itself to its NegativeCFRC, as explained
previously. By symmetry, if there is a transition from "LOCALLY DOWN"
to "UP", the node <bcp14>MUST</bcp14> 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>
<t>In general, issuing a new DODAG Version effectively restarts RNFD. <section anchor="rnfd_behavior_consensus" numbered="true" toc="default">
The DODAG root MAY thus perform this operation also in other situations.</t> <name>Disseminating Observations and Reaching Agreement</name>
<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 a
Sentinel or Acceptor) <bcp14>MUST</bcp14> update its PositiveCFRC and
NegativeCFRC to newpc = merge(oldpc, recvpc) and newnc =
merge(oldnc, recvnc), respectively. Here, 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 the 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 <bcp14>MUST</bcp14> 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 <bcp14>MUST
NOT</bcp14> change it and <bcp14>MUST NOT</bcp14> modify its CFRCs
until it joins a new DODAG Version. With this value of LORS, RNFD at
the node <bcp14>MUST</bcp14> 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" format="default"/>. It is <bcp14>RECOMMENDED</bcp14>
to use a dedicated Trickle timer for RNFD that is 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. The minimal and maximal interval sizes of the
dedicated timer <bcp14>SHOULD NOT</bcp14> be smaller than those of
RPL's original DIO Trickle timer. In contrast, in the absence of the
dedicated Trickle timer for RNFD, an implementation
<bcp14>SHOULD</bcp14> 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 <bcp14>MUST</bcp14>
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
<bcp14>SHOULD</bcp14> reset its Trickle timer when any of its local
CFRCs change significantly.</t>
</section>
</section> <section anchor="rnfd_behavior_root" numbered="true" toc="default">
<section anchor="rnfd_behavior_deactivation" title="Activating and Deactivating <name>DODAG Root's Behavior</name>
the Protocol on Demand"> <t>The DODAG root node <bcp14>MUST</bcp14> assume the role of Acceptor
in RNFD and <bcp14>MUST NOT</bcp14> ever switch this role. It
<bcp14>MUST</bcp14> also monitor its LORS and local CFRCs, so that it
can react to various events.</t>
<t>To start with, the DODAG root <bcp14>MUST</bcp14> 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
<bcp14>MAY</bcp14> also generate a new DODAG Version if the fraction
value(NegativeCFRC)/value(PositiveCFRC) approaches
RNFD_CONSENSUS_THRESHOLD, so as to avoid potential interruptions to
routing.</t>
<t>Furthermore, the DODAG root <bcp14>SHOULD</bcp14> 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"
format="default"/>).</t>
<t>In general, issuing a new DODAG Version effectively restarts RNFD.
Thus, the DODAG root <bcp14>MAY</bcp14> also perform this operation in
other situations.</t>
</section>
<t>RNFD can be activated and deactivated on demand, once per DODAG Version. <section anchor="rnfd_behavior_deactivation" numbered="true" toc="default"
The particular policies for activating and deactivating the protocol are outside >
the scope of this document. <name>Activating and Deactivating the Protocol on Demand</name>
However, the activation and deactivation MUST be done at the DODAG root node; ot <t>RNFD can be activated and deactivated on demand, once per DODAG
her nodes MUST comply.</t> Version. The particular policies for activating and deactivating the
protocol are outside the scope of this document. However, the
activation and deactivation <bcp14>MUST</bcp14> be done at the DODAG
root node; other nodes <bcp14>MUST</bcp14> comply.</t>
<t>More specifically, when a non-root node joins a DODAG Version, RNFD
at the node is initially inactive. The node <bcp14>MUST NOT</bcp14>
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
<bcp14>MUST</bcp14> 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
<bcp14>MUST</bcp14> 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 <bcp14>MUST
NOT</bcp14> 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 <bcp14>MUST</bcp14>
remain deactivated for the entire time the node belongs to the current
DODAG Version.</t>
<t>More specifically, when a non-root node joins a DODAG Version, RNFD at the no <!-- [rfced] We split this long sentence into two sentences and updated "for
de is initially inactive. example, replying" to "For example, it MAY reply". Please review
The node MUST NOT activate the protocol unless it receives for this DODAG Versio (especially our additon of another "MAY") and let us know any objections.
n a valid RNFD Option containing some CFRCs, that is, having its Option Length f
ield positive.
In particular, if the option accompanies the message that causes the node to joi
n 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 n
ode joins a new DODAG Version.
An explicit deactivation MUST take place when the node receives an RNFD Option f
or the DODAG Version with no CFRCs, that is, having its Option Length field equa
l 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 Le
ngth field equal to zero, the protocol MUST remain deactivated for the entire ti
me 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 Original:
NOT attach any RNFD Option to the messages it sends (in particular, because it m
ay 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 opt
ion to the link-local all-RPL-nodes multicast IPv6 address to allow its neighbor
s 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 opt
ion with some CFRCs, as such a neighbor appears not to have learned about the de
activation of RNFD.</t>
</section> In particular, it MAY reset its Trickle timer to this end but also MAY use
<section anchor="rnfd_behavior_cfrc_size" title="Processing CFRCs of Incompatibl some reactive mechanisms, for example, replying with a unicast DIO or DIS
e Lengths"> 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>The merge() and compare() operations on CFRCs require both arguments to be co Current:
mpatible, 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 deactivat
ing the protocol (see <xref target="rnfd_behavior_deactivation"/>), but also in
mechanisms for dynamic adjustments of CFRCs, which aim to enable deployment-spec
ific 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 NegativeC
FRC.
Assuming that it has RNFD active and that fields PosCFRC and NegCFRC in the opti
on 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 no In particular, it MAY reset its Trickle timer to this end but MAY also use
de’s local PositiveCFRC and NegativeCFRC, then the node MUST perform the merges, some reactive mechanisms. For example, it MAY reply with a unicast DIO or
as detailed previously (see <xref target="rnfd_behavior_consensus"/>).</t> 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>If the bit length of fields PosCFRC and NegCFRC is smaller than that of the n -->
ode’s local PositiveCFRC and NegativeCFRC, then the node MUST ignore the option <t>When RNFD at a node is initially inactive for a DODAG Version, the
and MAY reset its Trickle timer.</t> node <bcp14>MUST NOT</bcp14> 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" format="default"/>). When
the protocol has been explicitly deactivated, the node
<bcp14>MAY</bcp14> also decide not to attach the option to its
outgoing messages. However, it is <bcp14>RECOMMENDED</bcp14> that it
send a sufficient number of 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 <bcp14>MAY</bcp14> reset its Trickle timer to this end
but <bcp14>MAY</bcp14> also use some reactive mechanisms. For example, i
t <bcp14>MAY</bcp14>
reply 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" numbered="true" toc="default">
<name>Processing CFRCs of Incompatible Lengths</name>
<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" format="default"/>) 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" format="default"/>), but also in
mechanisms for dynamic adjustments of CFRCs, which aim to enable
deployment-specific policies (see <xref
target="mgmnt_roles_and_cfrc_lens" format="default"/>). 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
<bcp14>MUST</bcp14> 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
<bcp14>MUST</bcp14> perform the merges, as detailed previously (see
<xref target="rnfd_behavior_consensus" format="default"/>).</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
<bcp14>MUST</bcp14> ignore the option and <bcp14>MAY</bcp14> 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
<bcp14>MUST</bcp14> extend the bit length of its local CFRCs to be
equal to that in the option and set the CFRCs as follows:</t>
<ul spacing="normal">
<li>
<t>If the node's LORS is "GLOBALLY DOWN", then both of its local
CFRCs <bcp14>MUST</bcp14> be set to infinity().</t>
</li>
<li>
<t>Otherwise, they both <bcp14>MUST</bcp14> be set to zero(), and
the node <bcp14>MUST</bcp14> account for itself in so initialized
CFRCs. More specifically, if the node is a Sentinel, then it
<bcp14>MUST</bcp14> add itself to its PositiveCFRC, as detailed
previously. In addition, if its LORS is "LOCALLY DOWN", then it
<bcp14>MUST</bcp14> also add itself to its NegativeCFRC, again, as
explained previously. Finally, the node <bcp14>MUST</bcp14>
perform merges of its local CFRCs and the ones received in the
option (see <xref target="rnfd_behavior_consensus"
format="default"/>) and <bcp14>MAY</bcp14> reset its Trickle
timer.</t>
</li>
</ul>
<t>In contrast, if the node is unable to extend its local CFRCs, for
example, because it lacks resources, then it <bcp14>MUST</bcp14> stop
participating in RNFD. That is, until it joins a new DODAG Version, it
<bcp14>MUST NOT</bcp14> send the RNFD Option and <bcp14>MUST</bcp14>
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" format="default"/>). If it cannot
fulfill such a request, then it <bcp14>MUST NOT</bcp14> stop
participating in RNFD and <bcp14>SHOULD</bcp14> return an error to the
requester instead. Otherwise, since it is always an 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 different from or equal to "GLOBALLY DOWN", respectively. 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" format="default"/>), 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" numbered="true" t
oc="default">
<name>Summary of RNFD's Interactions with RPL</name>
<t>In summary, RNFD interacts with RPL in the following manner:</t>
<ul spacing="normal">
<li>
<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"
format="default"/>).</t>
</li>
<li>
<t>In some scenarios, RNFD triggers RPL to issue a new DODAG
Version (see <xref target="rnfd_behavior_root"
format="default"/>).</t>
</li>
<li>
<t>Depending on the implementation, RNFD may cause RPL's DIO
Trickle timer resets (see Sections <xref target="rnfd_behavior_conse
nsus"
format="counter"/>, <xref target="rnfd_behavior_deactivation"
format="counter"/>, and <xref target="rnfd_behavior_cfrc_size"
format="counter"/>).</t>
</li>
<li>
<t>RNFD monitors events relevant to routing adjacency maintenance
as well as those affecting RPL's DODAG parent set (see Sections <xre
f
target="rnfd_behavior_roles" format="counter"/> and <xref
target="rnfd_behavior_detection" format="counter"/>).</t>
</li>
<li>
<t>Using RNFD entails embedding the RNFD Option into link-local
RPL control messages (see <xref target="msg_format"
format="default"/>).</t>
</li>
</ul>
</section>
<t>If the bit length of fields PosCFRC and NegCFRC is greater than that of the n <section anchor="rnfd_behavior_constants" numbered="true" toc="default">
ode’s local PositiveCFRC and NegativeCFRC, then the node MUST extend the bit len <name>Summary of RNFD's Constants</name>
gth of its local CFRCs to be equal to that in the option and set the CFRCs as fo <t>The following is a summary of RNFD's constants:</t>
llows:</t>
<t><list style="symbols"> <!-- [rfced] May we rephrase these as follows to form complete sentences?
<t>If the node’s LORS is “GLOBALLY DOWN”, then both its local CFRCs MUST be se
t to infinity().</t>
<t>Otherwise, they both MUST be set to zero(), and the node MUST account for i
tself 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, ag
ain, 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_cons
ensus"/>) and MAY reset its Trickle timer.</t>
</list></t>
<t>In contrast, if the node is unable to extend its local CFRCs, for example, be cause it lacks resources, then it MUST stop participating in RNFD, that is, unti l it joins a new DODAG Version, it MUST NOT send the RNFD Option and MUST ignore this option in received messages.</t> Original:
<t>A DODAG root node can be requested to increase the bit length of its CFRCs ex In general, the higher the value the longer the detection period but the
ternally, as part of the management policies (see <xref target="mgmnt_roles_and_ lower the risk of false positives.
cfrc_lens"/>).
If it cannot fulfill such a request, then it is MUST NOT stop participating in R
FND and SHOULD return an error to the requester instead.
Otherwise, since it is always Acceptor, the above rules require it to extend bot
h CFRCs to the requested length and to set them both to either zero() or infinit
y(), 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 r
eaching 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, gene
rate 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 respons
e to an external request, the root also sets the CFRCs to zero().</t>
</section> The higher the value the longer the duration of detecting true crashes
<section anchor="summary-of-rnfds-interactions-with-rpl" title="Summary of RNFD’ but the lower the risk of increased traffic due to verifying false
s Interactions with RPL"> suspicions.
<t>In summary, RNFD interacts with RPL in the following manner:</t> 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 style="symbols"> Perhaps:
<t>While having its LORS equal to “GLOBALLY DOWN”, RNFD prevents RPL from rout
ing 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 <xre
f target="rnfd_behavior_root"/>).</t>
<t>Depending on the implementation, RNFD may cause RPL’s DIO Trickle timer res
ets (see <xref target="rnfd_behavior_consensus"/>, <xref target="rnfd_behavior_d
eactivation"/>, and <xref target="rnfd_behavior_cfrc_size"/>).</t>
<t>RNFD monitors events relevant to routing adjacency maintenance as well as t
hose 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 me
ssages (see <xref target="msg_format"/>).</t>
</list></t>
</section> In general, when the value is higher, the detection period is longer, but
<section anchor="rnfd_behavior_constants" title="Summary of RNFD’s Constants"> the risk of false positives is lower.
<t>The following is a summary of RNFD’s constants:</t> When the value is higher, the duration of detecting true crashes is longer,
but the risk of increased traffic due to verifying false
suspicions is lower.
<t><list style="hanging"> When the value is higher, the probability of bit collisions is higher, and
<t hangText='RNFD_CONSENSUS_THRESHOLD'> the results of function value(c) may thus be more erratic.
A threshold concerning the value of fraction value(NegativeCFRC)/value(Positiv
eCFRC). 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_cons
ensus"/>). The default value of the threshold is 0.51, which indicates that a ma
jority 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(Positiv
eCFRC). If the value at a Sentinel node grows at least by this threshold since t
he time the node’s LORS was last set to “UP”, then the node’s LORS is set to “SU
SPECTED DOWN” or “LOCALLY DOWN”, which implies that the node starts suspecting o
r 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 t
he lower the risk of increased traffic due to verifying false suspicions. The de
fault value of the threshold is 0.12, which in sparse networks (up to 8 neighbor
s per node) triggers a suspicion at a Sentinel node after just one other Sentine
l starts considering the root as dead, while being gradually more conservative i
n 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 pe
rcentage for c is equal to or greater than this threshold, then saturated(c) ret
urns TRUE, which hints the DODAG root to generate a new DODAG Version or increas
e the bit length of the CFRCs (see <xref target="rnfd_behavior_root"/>). The def
ault value of the threshold is 0.63. The higher the value is, the higher the pro
bability of bit collisions, and hence the more erratic the results of function v
alue(c) may be.</t>
</list></t>
<t>The means of configuring the constants at individual nodes are outside the sc ope of this document.</t> -->
</section> <dl newline="false" spacing="normal">
</section> <dt>RNFD_CONSENSUS_THRESHOLD:</dt>
<section anchor="mgmnt" title="Manageability Considerations"> <dd>A threshold concerning the value of the 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" format="default"/>). 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.</dd>
<dt>RNFD_SUSPICION_GROWTH_THRESHOLD:</dt>
<dd>A threshold concerning the value of the 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" format="default"/>). 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.</dd>
<dt>RNFD_CFRC_SATURATION_THRESHOLD:</dt>
<dd>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"
format="default"/>). The default value of the threshold is 0.63. The
higher the value, the higher the probability of bit collisions
and hence the more erratic the results of function value(c) may
be.</dd>
</dl>
<t>The means of configuring the constants at individual nodes are outsid
e the scope of this document.</t>
</section>
</section>
<section anchor="mgmnt" numbered="true" toc="default">
<name>Manageability Considerations</name>
<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 discusses the manageability issues.</t>
<section anchor="mgmnt_roles_and_cfrc_lens" numbered="true" toc="default">
<name>Role Assignment and CFRC Size Adjustment</name>
<!-- [rfced] Will readers understand what is being connected with the second
"and" in this sentence?
<t>RNFD is largely self-managed, with the exception of protocol activation and d Original:
eactivation, as well as node role assignment and the related CFRC size adjustmen
t, for which only the aforementioned mechanisms are defined, so as to enable ado
pting deployment-specific policies.
This section discusses the manageability issues.</t>
<section anchor="mgmnt_roles_and_cfrc_lens" title="Role Assignment and CFRC Size One approach to node role and CFRC size selection is to manually
Adjustment"> designate specific nodes as Sentinels in RNFD, assuming that they
will have chances to satisfy the necessary conditions for attaining
this role (see Section 5.1), and fixing the CFRC bit length to
accommodate these nodes.
<t>One approach to node role and CFRC size selection is to manually designate sp ecific nodes as Sentinels in RNFD, assuming that they will have chances to satis fy the necessary conditions for attaining this role (see <xref target="rnfd_beha vior_roles"/>), and fixing the CFRC bit length to accommodate these nodes.</t> Perhaps (to designate...and...to fix):
<t>Another approach is to automate the selection process: in principle, any node One approach to node role and CFRC size selection is to manually
satisfying the necessary conditions for becoming Sentinel (see <xref target="rn designate specific nodes as Sentinels in RNFD, assuming that they
fd_behavior_roles"/>) can attain this role. will have chances to satisfy the necessary conditions for attaining
However, in networks where the DODAG root node has many neighbors, this approach this role (see Section 5.1), and to fix the CFRC bit length to
may lead to saturated(PositiveCFRC) quickly becoming TRUE, which — without addi accommodate these nodes.
tional 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 DODA
G Version until PositiveCFRC is no longer quickly saturated.
Another solution is to increase, potentially multiple times the bit length of th
e CFRCs by the DODAG root if PositiveCFRC becomes saturated with little or no gr
owth in NegativeCFRC, which does not require issuing a new DODAG Version but len
gthens 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 res
ort 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 themse Or (for attaining...and...for fixing):
lves and have stable links to the DODAG root.
Otherwise, they may often exhibit LORS transitions between “UP” and “LOCALLY DOW
N” or switches between Acceptor and Sentinel roles, which gradually saturates CF
RCs.
Although as a mitigation the number of such transitions and switches per node MA
Y be limited, having Sentinels stable SHOULD be preferred.</t>
</section> One approach to node role and CFRC size selection is to manually
<section anchor="mgmnt_virt_dodag_roots" title="Virtual DODAG Roots"> designate specific nodes as Sentinels in RNFD, assuming that they
will have chances to satisfy the necessary conditions for attaining
this role (see Section 5.1) and for fixing the CFRC bit length to
accommodate these nodes.
-->
<t>RPL allows a DODAG to have a so-called virtual root, that is, a collection of <t>One approach to node role and CFRC size selection is to manually
nodes coordinating to act as a single root of the DODAG. designate specific nodes as Sentinels in RNFD, assuming that they will
The details of the coordination process are left open in the specification <xref have chances to satisfy the necessary conditions for attaining this
target="RFC6550"/> but, from RNFD’s perspective, two possible realizations are role (see <xref target="rnfd_behavior_roles" format="default"/>), and
worth consideration:</t> fixing the CFRC bit length to accommodate these nodes.</t>
<t><list style="symbols"> <t>Another approach is to automate the selection process. In
<t>Just a single (primary) node of the nodes comprising the virtual root acts principle, any node satisfying the necessary conditions for becoming
as the actual root of the DODAG. Only when this node fails, does another (backup a Sentinel (see <xref target="rnfd_behavior_roles" format="default"/>)
) node take over. As a result, at any time, at most one of the nodes comprising can attain this role. However, in networks where the DODAG root node
the virtual root is the actual root.</t> has many neighbors, this approach may lead to saturated(PositiveCFRC)
<t>More than one of the nodes comprising the virtual root act as actual roots quickly becoming TRUE, which may
of the DODAG, all advertising the same Rank in the DODAG. When some of the nodes degrade RNFD's performance without additional measures. This issue can
fail, the other nodes may or may not react in any specific way. In other words, be handled with a
at any time, more than one node can be the actual root.</t> probabilistic solution: if PositiveCFRC becomes saturated with little
</list></t> or no increase in NegativeCFRC, then a new DODAG Version can be issued,
and a node satisfying the necessary conditions can become a 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. This 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"
format="default"/>).</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. As a mitigation, the number of such
transitions and switches per node <bcp14>MAY</bcp14> be limited; however
,
having Sentinels be stable <bcp14>SHOULD</bcp14> be preferred.</t>
</section>
<section anchor="mgmnt_virt_dodag_roots" numbered="true" toc="default">
<name>Virtual DODAG Roots</name>
<t>In the first realization, RNFD’s operation is largely unaffected. <t>RPL allows a DODAG to have a so-called "virtual root", that is, a
The necessary conditions for a node to become Sentinel (<xref target="rnfd_behav collection of nodes coordinating to act as a single root of the DODAG.
ior_roles"/>) guarantee that only the current primary root node is monitored by The details of the coordination process are left open in
the protocol. <xref target="RFC6550" format="default"/>, but from
This SHOULD be taken into account in the policies for node role assignment, CFRC RNFD's perspective, two possible realizations are worth
size selection, and, possibly, the setting of the two thresholds (<xref target= consideration:</t>
"rnfd_behavior_constants"/>). <ul spacing="normal">
Moreover, when a new primary has been elected, to avoid polluting CFRCs with obs <li>
ervations on the previous primary, a new DODAG Version MUST be issued.</t> <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>
</li>
<li>
<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>
</li>
</ul>
<!-- [rfced] Section 5.8 appears to describe three thresholds. Should the text
below be updated accordingly?
<t>In the second realization, the fact that the virtual root consists of multipl Original:
e 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, du
e to global power outages.</t>
</section> This SHOULD be taken into account in the policies for node
<section anchor="mgmnt_monitoring" title="Monitoring"> role assignment, CFRC size selection, and, possibly, the setting of
the two thresholds (Section 5.8).
<t>For monitoring the operation of RNFD, its implementation SHOULD provide the f ollowing information about a node:</t> Perhaps:
<t><list style="symbols"> This SHOULD be taken into account in the policies for node role assignment,
<t>whether the protocol is active,</t> CFRC size selection, and, possibly, the setting of the three thresholds
<t>whether LORS is “GLOBALLY DOWN”,</t> (Section 5.8).
</list></t>
<t>accompanied by the recommended monitoring parameters provided by RPL itself < -->
xref target="RFC6550"/>, notably the DODAG Version number and the Rank. <t>In the first realization, RNFD's operation is largely unaffected.
To offer even finer-grained visibility into RNFD’s state at the node, the implem The necessary conditions for a node to become a Sentinel (<xref
entation MAY in addition provide:</t> target="rnfd_behavior_roles" format="default"/>) guarantee that only
the current primary root node is monitored by the protocol. This
<bcp14>SHOULD</bcp14> 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"
format="default"/>). Moreover, when a new primary has been elected,
a
new DODAG Version <bcp14>MUST</bcp14> be issued to avoid polluting CFRCs
with observations on the previous primary.</t>
<t><list style="symbols"> <t>In the second realization, the fact that the virtual root consists
<t>the assigned role (i.e., Sentinel or Acceptor),</t> of multiple nodes is transparent to RNFD. Therefore, employing RNFD
<t>the exact value of LORS (i.e., “UP”, “SUSPECTED DOWN”, “LOCALLY DOWN”, or in such a setting can be beneficial only if the nodes comprising the
“GLOBALLY DOWN”),</t> virtual root may suffer from correlated crashes, for instance, due to
<t>the two CFRCs (i.e., PositiveCFRC and NegativeCFRC),</t> global power outages.</t>
<t>the constants listed in <xref target="rnfd_behavior_constants"/>.</t> </section>
</list></t>
</section> <section anchor="mgmnt_monitoring" numbered="true" toc="default">
</section> <name>Monitoring</name>
<section anchor="security" title="Security Considerations"> <t>For monitoring the operation of RNFD, its implementation <bcp14>SHOUL
D</bcp14> provide the following information about a node:</t>
<ul spacing="normal">
<li>
<t>whether the protocol is active, and</t>
</li>
<li>
<t>whether LORS is "GLOBALLY DOWN".</t>
</li>
</ul>
<t>RNFD is an extension to RPL and is thus both vulnerable to and benefits from <!-- [rfced] We updated this text as follows to be a complete
the security issues and solutions described in <xref target="RFC6550"/> and <xre sentence. However, due to context (see text prior to this sentence),
f target="RFC7416"/>. should this read "This information SHOULD be" rather than the current
Its specification in this document does not introduce new traffic patterns or ne "This information is"?
w messages, for which specific mitigation techniques would be required beyond wh
at can already be adopted for RPL.</t>
<t>In particular, RNFD depends on information exchanged in the RNFD Option. Original:
If the contents of this option were compromised, then failure misdetection may o accompanied by the recommended monitoring parameters provided by RPL
ccur. itself [RFC6550], notably the DODAG Version number and the Rank.
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 ne
w DODAG Version is issued by the root.
Another possibility is that a crash of the DODAG root may not be detected by RNF
D, in which case RPL would have to rely on its own mechanisms.
Moreover, compromising the contents of the RNFD Option may also lead to increase
d 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. Current:
First, unless all neighbors of a DODAG root are compromised, a false positive ca This information is accompanied by the recommended monitoring parameters
n always be detected by the root based on its local CFRCs. provided by RPL
If the frequency of such false positives becomes problematic, RNFD can be disabl itself [RFC6550], notably the DODAG Version number and the Rank.
ed 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 conse
quences on RPL apart from the lack of improvement to its performance upon a DODA
G root’s crash, at least if RPL’s other components are not attacked as well.</t>
</section> Perhaps:
<section anchor="iana-considerations" title="IANA Considerations"> This information SHOULD be accompanied by the recommended monitoring
parameters provided by RPL
itself [RFC6550], notably the DODAG Version number and the Rank.
-->
<t>To represent the RNFD Option, IANA is requested to allocate the value TBD1 fr <t>This information is accompanied by the recommended monitoring paramet
om the <eref target="https://www.iana.org/assignments/rpl/rpl.xhtml#control-mess ers provided by
age-options">“RPL Control Message Options” registry</eref> of the “Routing Proto RPL itself <xref target="RFC6550" format="default"/>, notably the
col for Low Power and Lossy Networks (RPL)” registry group.</t> DODAG Version number and the Rank. To offer even finer-grained
visibility into RNFD's state at the node, the implementation
<bcp14>MAY</bcp14> also provide:</t>
<ul spacing="normal">
<li>
<t>the assigned role (i.e., Sentinel or Acceptor),</t>
</li>
<li>
<t>the exact value of LORS (i.e., "UP", "SUSPECTED DOWN", "LOCALLY
DOWN", or "GLOBALLY DOWN"),</t>
</li>
<li>
<t>the two CFRCs (i.e., PositiveCFRC and NegativeCFRC), and</t>
</li>
<li>
<t>the constants listed in <xref target="rnfd_behavior_constants"
format="default"/>.</t>
</li>
</ul>
</section>
</section>
<section anchor="security" numbered="true" toc="default">
<name>Security Considerations</name>
<t>RNFD is an extension to RPL and thus is vulnerable to and
benefits from the security issues and solutions described in <xref
target="RFC6550" format="default"/> and <xref target="RFC7416"
format="default"/>. 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 <bcp14>RECOMMENDED</bcp14> to use RPL
security mechanisms if there is a risk that control information might be
modified or spoofed.</t>
<t>In this context, two features of RNFD 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 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> <section anchor="iana-considerations" numbered="true" toc="default">
<section anchor="acknowledgements" title="Acknowledgements"> <name>IANA Considerations</name>
<t>IANA has allocated the following value
in the "RPL
Control Message Options" registry within the <eref
target="https://www.iana.org/assignments/rpl">"Routing Protocol for
Low Power and Lossy Networks (RPL)" registry group</eref>.</t>
<t>The authors would like to acknowledge Piotr Ciolkosz and Agnieszka Paszkowska <table anchor="options-iana">
. <name></name>
Agnieszka contributed to deeper understanding and formally proving various aspec <thead>
ts of RPL’s behavior upon an LBR crash. <tr>
Piotr in turn developed a prototype implementation of RNFD dedicated for RPL to <th>Value</th>
verify earlier performance claims.</t> <th>Meaning</th>
<th>Reference</th>
</tr>
</thead>
<tbody>
<tr>
<td>0x0E</td>
<td>RNFD Option</td>
<td>RFC 9866</td>
</tr>
</tbody>
</table>
</section> </section>
</middle> </middle>
<back> <back>
<references>
<name>References</name>
<references>
<name>Normative References</name>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2
119.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6
206.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6
550.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6
553.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6
554.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8
174.xml"/>
</references>
<references>
<name>Informative References</name>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4
861.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5
184.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6
202.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7
102.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7
228.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7
416.xml"/>
<references title='Normative References'> <reference anchor="Iwanicki16">
<front>
<title>RNFD: Routing-Layer Detection of DODAG (Root) Node Failures i
n Low-Power Wireless Networks</title>
<author initials="K." surname="Iwanicki" fullname="Konrad Iwanicki">
<organization/>
</author>
<date year="2016"/>
</front>
<refcontent>2016 15th ACM/IEEE International Conference on Information
Processing in Sensor Networks (IPSN), pp. 1-12</refcontent>
<seriesInfo name="DOI" value="10.1109/IPSN.2016.7460720"/>
</reference>
&RFC2119; <reference anchor="Ciolkosz19">
&RFC6206; <front>
&RFC6550; <title>Integration of the RNFD Algorithm for Border Router Failure D
&RFC6553; etection with the RPL Standard for Routing IPv6 Packets</title>
&RFC6554; <author initials="P." surname="Ciolkosz" fullname="Piotr Ciolkosz">
&RFC8174; <organization/>
</author>
<date year="2019"/>
</front>
<refcontent>Master's Thesis, University of Warsaw</refcontent>
</reference>
<reference anchor="Paszkowska19">
<front>
<title>Failure Handling in RPL Implementations: An Experimental Qual
itative Study</title>
<author initials="A." surname="Paszkowska" fullname="Agnieszka Paszk
owska">
<organization/>
</author>
<author initials="K." surname="Iwanicki" fullname="Konrad Iwanicki">
<organization/>
</author>
<date year="2019"/>
</front>
<refcontent>Mission-Oriented Sensor Networks and Systems: Art and Scie
nce, Springer International Publishing, pp. 49-95</refcontent>
<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 A
pplications</title>
<author initials="K.-Y." surname="Whang" fullname="Kyu-Young Whang">
<organization/>
</author>
<author initials="B.T." surname="Vander-Zanden" fullname="Brad T. Va
nder-Zanden">
<organization/>
</author>
<author initials="H.M." surname="Taylor" fullname="Howard M. Taylor"
>
<organization/>
</author>
<date year="1990"/>
</front>
<refcontent>ACM Transactions on Database Systems (TODS), vol. 15, no.
2, pp. 208-229</refcontent>
<seriesInfo name="DOI" value="10.1145/78922.78925"/>
</reference>
</references>
</references> </references>
<section anchor="acknowledgements" numbered="false" toc="default">
<name>Acknowledgements</name>
<t>The author would like to acknowledge <contact fullname="Piotr
Ciolkosz"/> and <contact fullname="Agnieszka Paszkowska"/>. Agnieszka
contributed to deeper understanding and formally proving various aspects
of RPL's behavior upon an LBR crash. Piotr developed a
prototype implementation of RNFD dedicated for RPL to verify earlier
performance claims.</t>
</section>
</back>
<references title='Informative References'> <!-- [rfced] Note that we removed several instances of "in turn" to improve
readability of the text. Please review those in the diff file and let us
know any concerns.
-->
&RFC4861; <!-- [rfced] We note that the terms below appear both capitalized and
&RFC5184; lowercase in this document. Should these be uniform? If so, please let us
&RFC6202; know which form is preferred.
&RFC7102;
&RFC7228;
&RFC7416;
<reference anchor="Iwanicki16" >
<front>
<title>RNFD: Routing-layer detection of DODAG (root) node failures in low-po
wer 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 Inter
national Conference on Information Processing in Sensor Networks, IEEE, pp. 1--1
2"/>
<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 Applicati
ons</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-Zan
den">
<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> DODAG Version v. DODAG version
Note: RFC 6550 uses the capitalized form.
</back> Rank v. rank
-->
<!-- ##markdown-source: <!-- [rfced] Please review the "Inclusive Language" portion of the online
H4sIAGO5zGcAA8V96XPbVpbvd/4VKPmDrQ7JSPKSWHn9ahQvHU3Ly0hOp/pN Style Guide <https://www.rfc-editor.org/styleguide/part2/#inclusive_language>
zXhAAqTQAgEOAEpW3H5/+zu/s9wFBGUl3VMvU9OmSOAu5559u5PJZDSvs6Ja and let us know if any changes are needed. Updates of this nature typically
HiebbjH5fjTqiq7Mj5O987evXx4nr9O2S2Z1k+VN0tSbjv6ZN2l7mWR5l8+7 result in more precise language, which is helpful for readers.
oq6SokrO35/tjdLZrMmvjxO8OMrqeZWuaJysSRfdpMhp8KYuy0lTLbLJwXej
LO3o16ODo6eTg8eTA5q4WDfHSdds2u7o4OD5wdEobfL0ODmtaNIq70Y3dXO1
pDWsaYp3Z2ejq/yWvsr8E5OXmGs0p5GXdXN7nLRdNho9oH/SKvuYlnVFM97m
7WhdHCf/3tXzcdLWTdfki5Y+3a7w4T9Go3TTXdbN8Sjh/yb6b0L7bI+TP0+T
05u0KuZXhftBNvrnumrSbPvXuiHY/lwV13nTFt1tUi+SX9KmTW/cEy0tIe+O
kx/TKp1fpsmR+2VOLxzz47+mN6n/us5owoOjycHz74IvN1WHXb+vS9qv+359
yfv+5sn3ydFR8vRp8uRJ8uTo+8Q9kK/SojxOCl34v6yK1eZmmmeb6bocEXbQ
qMVs0w2BRHb+pqBV52Vyjn+brK2rePMXtJy8XKVVclEvuhs61uQXOsu2v4LV
vPkGiPIvrb0wnaejHZO+T9t5WiYfLjezvOniCV8U7bxOLm7bLl9tzbLu5JV/
meOp6bxejUZV3azSjo4IWzx//eLo8PC5fnx2dPDMPj59euA/PvYfn+jH7w+/
o4+jolr0xnvy/bND/fj08Psnfugj/fjdof94dPS9fXxyyHMbTslfSRKT6DmR
JRHwpExviTo9XRKivXz38uRPyaOmrrv9pCKsSRYEg02Tt6Dasr6ZrOsbeumm
aPIyb9uEqAhk1u7xPEYJDwZJYS+ghb3e6ez1qEF+b/OmyFuAx1DptKJnT99f
vCVOQLtL3jf1PM/Bj1qsv7vMk8On3WVy8uLNt6evXr1SWk+xQTr9F3W1yJu8
mucJbfjU4E6feaCW5lpipxd5RZSevNXdjROMNU7W62lyOJkcHtnyX747PU4O
D6aHhwfPv8WypljW9Lsnzw6+Ozrgh4xvHT6jP18UdXlVt78KtviDwSqXTWrH
gG3grJKTkhhT0V2uElpp8qOw1XNhq6/lZJKX7gBv6El59/1ZcgEmRtTFb+qR
J6fvr58RJcyv8u5+R/Z+6ta8dWTvi7prej9vn9jeG5IIefOwJdKjX9rxHr06
xN72YnA9pz+JZn+9qm/aq7QPMNv8T7TJUg8Nuz5drct8lVcdw5J2cFIlrz6t
aVX8ZZn82yYti45pjUC0yW5jMAxD4WQaLGULDifLivb861U68ND/FAm8KQhX
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
vH2pIwn5k5oM/omV8CmJ/ujsXbgbt6iauWkYIecVs47iDXwOvFWilQ3BDN5d
sGTxuX7+vFququ4jnvyY1Vm6/MiPseU8epB84LhNXdZLsrwfIIrTfhmxo+yK
CArJkG2y9+bniw97Y/k3efuOP5+/+refT89fvcTni59Ozs7cB3vi4qd3P5+9
9J/8my/evXnz6u1LeZm+TXpfvTn5656w8r137z+cvnt7crYnJm2oMoFXCcTZ
SUgnrRRPJztvipkA4McX75PDJ6JlIgePPQiaWEefIRplKtYf5E9mJjBc00Y9
+PCCFx2RGfsZ20uwPCiVU4FVCEWOZGwtlk8ltmREVBGbX9ccJBXUiha/h4Hb
5Gcd0nK0OCJKVu57F6s94xjz2zjGvCc7RSIgrIg9orhjiVrbQO+jGOsdI+6F
8Wo9Gmz8Nw9Eiur7s30N5/PTL9KmubXkjzDfrpCslMn7MiVNHR+XTboKlvKY
LQahQoYTvUHQxz8cL1butWBXrUHTjomn9vGJCavVve0ib5IJZYBOvSKczpu6
uqXpPcawfqhHT1ruy9N3o2Ml0nCH72Z/gxr2KOW9ryTVYR/PXww+T8ICmrL8
sf0Wnsd7QdzXJX+9tLjvicZ9/4Rw4GhEgKJXzqKEhejE6JEfz/HI2ds4u3AU
u/PDLYfJHzGsoM7mZEsQUC44vpuXNHYQb6c5OShlyQbeDcrBKxAB8cRp8pp1
XYn3CqD+gmxBCSzY0C7YnAYcMvDyyRxqZPQjvg9bTXmZJuxsYn7j/ForWBPE
zN1cqsGFIePkJ/OhitG5Nb5bB7QItk7hEL3Vx21kiLQ5oFY3BCsXw/hnQqxK
bIYAZBLTFnHHiwsWdCauHsJgdeLJiOeyrwv2ET86e3d+sU9LPjHv+A7PzwDM
x6qW3HpzQKkPLFoFb/gmq1hrWhnydwm/u8nrhnS581y8f7RCzhCk9x69eH3+
Ast6Ibi4sQizpBxg55qbAIc8TQcFYM7uyJQ9+8pWQGUrjDxNTsG2FwSaVnwt
cF4lQiu1RNmu03ITZ8iQGaSqgNEQ/7qpYILyKfPHWInkMSf8YLbRnU3IFoa7
AGpxoJ6QDrgST9pYwnOS0Sq8m8ygel7wF1ADSA+A4+W6IGPp84NaP365Q5Vy
EeNI86jEW+FdUqGLuDKPuTjGhE2yZz1JNeYZRBRMEQ6jOmohB65fl0LmMwih
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
z80AAA==
Note that our script did not flag any words in particular, but this should
still be reviewed as a best practice.
--> -->
</rfc> </rfc>
 End of changes. 120 change blocks. 
1412 lines changed or deleted 1444 lines changed or added

This html diff was produced by rfcdiff 1.48.