rfc9008xml2.original.xml | rfc9008.xml | |||
---|---|---|---|---|
<?xml version="1.0"?> | <?xml version='1.0' encoding='utf-8'?> | |||
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [ | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" docName="draft-ietf-roll-useofrp | ||||
linfo-44" number="9008" ipr="trust200902" updates="6550, 6553, 8138" obsoletes=" | ||||
" submissionType="IETF" category="std" consensus="true" xml:lang="en" tocInclude | ||||
="true" tocDepth="4" symRefs="true" sortRefs="true" version="3"> | ||||
<!ENTITY RFC6550 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | <!-- xml2rfc v2v3 conversion 3.5.0 --> | |||
.6550.xml"> | ||||
<!ENTITY RFC8138 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
.8138.xml"> | ||||
<!ENTITY RFC8200 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
.8200.xml"> | ||||
<!ENTITY RFC6553 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
.6553.xml"> | ||||
<!ENTITY RFC6554 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
.6554.xml"> | ||||
<!ENTITY RFC6040 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
.6040.xml"> | ||||
<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
.2119.xml"> | ||||
<!ENTITY RFC7102 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
.7102.xml"> | ||||
<!ENTITY RFC4443 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
.4443.xml"> | ||||
<!ENTITY RFC6775 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
.6775.xml"> | ||||
<!ENTITY RFC2473 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
.2473.xml"> | ||||
<!ENTITY RFC4302 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
.4302.xml"> | ||||
<!ENTITY RFC4301 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
.4301.xml"> | ||||
<!ENTITY RFC4303 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
.4303.xml"> | ||||
<!ENTITY RFC7321 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
.7321.xml"> | ||||
<!ENTITY RFC7416 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
.7416.xml"> | ||||
<!ENTITY RFC8180 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
.8180.xml"> | ||||
<!ENTITY RFC8505 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
.8505.xml"> | ||||
<!ENTITY RFC2460 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
.2460.xml"> | ||||
<!ENTITY RFC6437 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
.6437.xml"> | ||||
]> | ||||
<!-- --> | ||||
<!--<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?> --> | ||||
<!-- used by XSLT processors --> | ||||
<!-- For a complete list and description of processing instructions (PIs), | ||||
please see http://xml.resource.org/authoring/README.html. --> | ||||
<!-- Below are generally applicable Processing Instructions (PIs) that most I-Ds | ||||
might want to use. | ||||
(Here they are set differently than their defaults in xml2rfc v1.32) --> | ||||
<?rfc strict="no" ?> | ||||
<!-- give errors regarding ID-nits and DTD validation --> | ||||
<!-- control the table of contents (ToC) --> | ||||
<?rfc toc="yes"?> | ||||
<!-- generate a ToC --> | ||||
<?rfc tocdepth="4"?> | ||||
<!-- the number of levels of subsections in ToC. default: 3 --> | ||||
<!-- control references --> | ||||
<?rfc symrefs="yes"?> | ||||
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] --> | ||||
<?rfc sortrefs="yes" ?> | ||||
<!-- sort the reference entries alphabetically --> | ||||
<!-- control vertical white space | ||||
(using these PIs as follows is recommended by the RFC Editor) --> | ||||
<?rfc compact="yes" ?> | ||||
<!-- do not start each main section on a new page --> | ||||
<?rfc subcompact="no" ?> | ||||
<!-- keep one blank line between list items --> | ||||
<!-- end of list of popular I-D processing instructions --> | ||||
<rfc category="std" docName="draft-ietf-roll-useofrplinfo-44" ipr="trust200902" | ||||
updates="6553, 6550, 8138"> | ||||
<!-- category values: std, bcp, info, exp, and historic | ||||
ipr values: trust200902, noModificationTrust200902, noDerivativesTrust200902 | ||||
, | ||||
or pre5378Trust200902 | ||||
you can add the attributes updates="NNNN" and obsoletes="NNNN" | ||||
they will automatically be output with "(if approved)" --> | ||||
<!-- ***** FRONT MATTER ***** --> | <!-- [rfced] FYI There are [auth] comments included throughout | |||
the file. We have left them in for now, in case you want to review. | ||||
However, please note that these will be removed from the XML file | ||||
prior to publication. | ||||
--> | ||||
-> | ||||
<front> | <front> | |||
<!-- The abbreviated title is used in the page header - it is only necessary | ||||
if the | ||||
full title is longer than 39 characters --> | ||||
<title abbrev="RPL-data-plane">Using RPI Option Type, Routing Header for Sour | ||||
ce Routes and IPv6-in-IPv6 encapsulation in the RPL Data Plane</title> | ||||
<author initials="M.I." surname="Robles" fullname="Maria Ines Robles"> | <title abbrev="RPL Data Plane">Using RPI Option Type, Routing Header for Sour | |||
<organization abbrev="UTN-FRM/Aalto"> | ce Routes, and IPv6-in-IPv6 Encapsulation in the RPL Data Plane</title> | |||
<seriesInfo name="RFC" value="9008"/> | ||||
<author initials="M.I." surname="Robles" fullname="Maria Ines Robles"> | ||||
<organization abbrev="UTN-FRM/Aalto"> | ||||
Universidad Tecno. Nac.(UTN)-FRM, Argentina /Aalto University Finland | Universidad Tecno. Nac.(UTN)-FRM, Argentina /Aalto University Finland | |||
</organization> | </organization> | |||
<address> | <address> | |||
<postal> | ||||
<street>Coronel Rodríguez 273</street> | ||||
<city>Mendoza</city> | ||||
<region>Provincia de Mendoza</region> | ||||
<code>M5500</code> | ||||
<country>Argentina</country> | ||||
</postal> | ||||
<email>mariainesrobles@gmail.com</email> | ||||
</address> | ||||
</author> | ||||
<author initials="M." surname="Richardson" fullname="Michael C. Richardson"> | ||||
<organization abbrev="SSW">Sandelman Software Works</organization> | ||||
<address> | ||||
<postal> | <postal> | |||
<street>470 Dawson Avenue</street> | <street>Coronel Rodríguez 273</street> | |||
<city>Ottawa</city> | <city>Mendoza</city> | |||
<region>ON</region> | <region>Provincia de Mendoza</region> | |||
<code>K1Z 5V7</code> | <code>M5500</code> | |||
<country>CA</country> | <country>Argentina</country> | |||
</postal> | ||||
<email>mariainesrobles@gmail.com</email> | ||||
</address> | ||||
</author> | ||||
<author initials="M." surname="Richardson" fullname="Michael C. Richardson"> | ||||
<organization abbrev="SSW">Sandelman Software Works</organization> | ||||
<address> | ||||
<postal> | ||||
<street>470 Dawson Avenue</street> | ||||
<city>Ottawa</city> | ||||
<region>ON</region> | ||||
<code>K1Z 5V7</code> | ||||
<country>Canada</country> | ||||
</postal> | </postal> | |||
<email>mcr+ietf@sandelman.ca</email> | <email>mcr+ietf@sandelman.ca</email> | |||
<uri>http://www.sandelman.ca/mcr/</uri> | <uri>http://www.sandelman.ca/mcr/</uri> | |||
</address> | </address> | |||
</author> | ||||
</author> | ||||
<author initials="P" surname="Thubert" fullname="Pascal Thubert"> | <author initials="P" surname="Thubert" fullname="Pascal Thubert"> | |||
<organization abbrev="Cisco">Cisco Systems, Inc</organization> | <organization abbrev="Cisco">Cisco Systems, Inc</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>Building D</street> | <extaddr>Building D</extaddr> | |||
<street>45 Allee des Ormes - BP1200 </street> | <street>45 Allee des Ormes - BP1200 </street> | |||
<city>MOUGINS - Sophia Antipolis</city> | <city>MOUGINS - Sophia Antipolis</city> | |||
<code>06254</code> | <code>06254</code> | |||
<country>FRANCE</country> | <country>France</country> | |||
</postal> | </postal> | |||
<phone>+33 497 23 26 34</phone> | <phone>+33 497 23 26 34</phone> | |||
<email>pthubert@cisco.com</email> | <email>pthubert@cisco.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<date year="2021" month="March"/> | ||||
<date /> | <area>Internet</area> | |||
<workgroup>ROLL Working Group</workgroup> | ||||
<area>Internet</area> | <keyword>RPL Option</keyword> | |||
<keyword>6LoWPAN</keyword> | ||||
<workgroup>ROLL Working Group</workgroup> | <keyword>RFC 6553</keyword> | |||
<abstract> | ||||
<keyword>RPL Option</keyword> | ||||
<keyword>6LoWPAN</keyword> | ||||
<keyword>RFC 6553</keyword> | ||||
<abstract> | ||||
<t> | <t> | |||
This document looks at different data flows through LLN (Low-Power and L ossy Networks) where RPL | This document looks at different data flows through Low-Power and Lossy Networks (LLN) where RPL | |||
(IPv6 Routing Protocol for Low-Power and Lossy Networks) is used to esta blish routing. | (IPv6 Routing Protocol for Low-Power and Lossy Networks) is used to esta blish routing. | |||
The document enumerates the cases where RFC6553 (RPI Option Type), RFC65 | The document enumerates the cases where RPL Packet Information (RPI) Opt | |||
54 (Routing Header for Source Routes) | ion Type (RFC 6553), | |||
and IPv6-in-IPv6 encapsulation is required in data plane. | RPL Source Route Header (RFC 6554), | |||
This analysis provides the basis on which to design efficient compressio | and IPv6-in-IPv6 encapsulation are required in the data plane. | |||
n of these headers. | This analysis provides the basis upon which to design efficient compress | |||
This document updates RFC6553 adding a change to the RPI Option Type. Ad | ion of these headers. | |||
ditionally, this document updates | This document updates RFC 6553 by adding a change to the RPI Option Type | |||
RFC6550 defining a flag in the DIO Configuration option to indicate abou | . Additionally, this document updates | |||
t this change and | RFC 6550 by defining a flag in the DODAG Information Object (DIO) Config | |||
updates RFC8138 as well to consider the new Option Type when the RPL Opt | uration option to indicate this change and | |||
ion is decompressed. | updates RFC 8138 as well to consider the new Option Type when the RPL Op | |||
tion is decompressed. | ||||
</t> | </t> | |||
</abstract> | </abstract> | |||
</front> | </front> | |||
<middle> | ||||
<middle> | <section numbered="true" toc="default"> | |||
<section title="Introduction"> | <name>Introduction</name> | |||
<t> | <t> | |||
RPL (IPv6 Routing Protocol for Low-Power and Lossy Networks) | RPL (IPv6 Routing Protocol for Low-Power and Lossy Networks) | |||
<xref target="RFC6550"/> is a routing protocol for | <xref target="RFC6550" format="default"/> is a routing protocol f | |||
constrained networks. <xref target="RFC6553"/> | or | |||
defines the RPL Option carried within the IPv6 Hop-by-Hop | constrained networks. <xref target="RFC6553" format="default"/> | |||
Header to carry the RPLInstanceID and quickly identify inconsist | defines the RPL Option carried within the IPv6 Hop-by-Hop Option | |||
encies (loops) in the routing topology. | s | |||
header to carry the RPLInstanceID and quickly identify inconsist | ||||
encies (loops) in the routing topology. | ||||
The RPL Option is commonly referred to as the RPL Packet Informa tion | The RPL Option is commonly referred to as the RPL Packet Informa tion | |||
(RPI) though the RPI is the routing information that is defined | (RPI), although the RPI is the routing information that is defin | |||
in <xref target="RFC6550"/> and transported in the RPL Option. | ed | |||
RFC6554 <xref target="RFC6554"/> defines the "RPL Source Route H | in <xref target="RFC6550" format="default"/> and transported in | |||
eader" (RH3), an | the RPL Option. | |||
IPv6 Extension Header to deliver datagrams within a RPL | RFC 6554 <xref target="RFC6554" format="default"/> defines the " | |||
routing domain, particularly in non-storing mode. | RPL Source Route Header" (RH3), an | |||
</t> | IPv6 extension header to deliver datagrams within a RPL | |||
<t> | routing domain, particularly in Non-Storing mode. | |||
</t> | ||||
<t> | ||||
These various items are referred to as RPL artifacts, and | These various items are referred to as RPL artifacts, and | |||
they are seen on all of the data-plane traffic that occurs in | they are seen on all of the data plane traffic that occurs in | |||
RPL routed networks; they do not in general appear on the RPL | RPL-routed networks; they do not, in general, appear on the RPL | |||
control plane traffic at all which is mostly Hop-by-Hop | control plane at all, which is mostly hop-by-hop | |||
traffic (one exception being DAO messages in non-storing mode). | traffic (one exception being Destination Advertisement Object (D | |||
</t> | AO) messages in Non-Storing mode). | |||
<t> | </t> | |||
<t> | ||||
It has become clear from attempts to do multi-vendor | It has become clear from attempts to do multi-vendor | |||
interoperability, and from a desire to compress as many of | interoperability, and from a desire to compress as many of | |||
the above artifacts as possible that not all implementers | the above artifacts as possible, that not all implementers | |||
agree when artifacts are necessary, or when they can be safely | agree when artifacts are necessary, or when they can be safely | |||
omitted, or removed. | omitted, or removed. | |||
</t> | </t> | |||
<t> | ||||
<t> | The ROLL (Routing Over Low power and Lossy networks) Working Grou | |||
The ROLL WG analyzed how <xref target="RFC2460" /> rules apply to | p | |||
storing and | analyzed how IPv6 rules <xref target="RFC2460" format="default"/> | |||
non-storing use of RPL. The result was 24 data plane use | apply to the Storing and | |||
Non-Storing use of RPL. The result was 24 data-plane use | ||||
cases. They are exhaustively outlined here in order to be | cases. They are exhaustively outlined here in order to be | |||
completely unambiguous. During the processing of this | completely unambiguous. During the processing of this | |||
document, new rules were published as | document, new rules were published as | |||
<xref target="RFC8200"/>, and this document was updated | <xref target="RFC8200" format="default"/>, and this document was updated | |||
to reflect the normative changes in that document. | to reflect the normative changes in that document. | |||
</t> | </t> | |||
<t> | <t> | |||
This document updates <xref target="RFC6553"/>, changing the valu | This document updates <xref target="RFC6553" format="default"/>, | |||
e of the Option Type of the RPL Option | changing the value of the Option Type of the RPL Option | |||
to make <xref target="RFC8200"/> routers ignore this option when | to make routers compliant with <xref target="RFC8200" format="def | |||
not recognized. | ault"/> ignore this option when it is not recognized. | |||
</t> | </t> | |||
<t> | <t> | |||
A Routing Header Dispatch for 6LoWPAN (6LoRH)(<xref target="RFC81 | A Routing Header Dispatch for IPv6 over Low-Power Wireless Person | |||
38" />) | al Area Networks (6LoWPAN) (6LoRH) <xref target="RFC8138" format="default"/> | |||
defines a mechanism for compressing RPL Option information and R outing Header type 3 (RH3) | defines a mechanism for compressing RPL Option information and R outing Header type 3 (RH3) | |||
<xref target="RFC6554"/>, as well as an efficient IPv6-in-IPv6 t | <xref target="RFC6554" format="default"/>, as well as an efficie | |||
echnique. | nt IPv6-in-IPv6 technique. | |||
</t><t> | </t> | |||
<t> | ||||
Most of the use cases described herein require the use of IPv6-i n-IPv6 packet encapsulation. | Most of the use cases described herein require the use of IPv6-i n-IPv6 packet encapsulation. | |||
When encapsulating and decapsulating packets, <xref target="RFC6 040"/> MUST be applied to map the | When encapsulating and decapsulating packets, <xref target="RFC6 040" format="default"/> <bcp14>MUST</bcp14> be applied to map the | |||
setting of the explicit congestion notification (ECN) field betw een inner and outer headers. | setting of the explicit congestion notification (ECN) field betw een inner and outer headers. | |||
Additionally, <xref target="I-D.ietf-intarea-tunnels"/> is recom mended reading to explain | Additionally, <xref target="I-D.ietf-intarea-tunnels" format="de fault"/> is recommended reading to explain | |||
the relationship of IP tunnels to existing protocol layers and t he challenges | the relationship of IP tunnels to existing protocol layers and t he challenges | |||
in supporting IP tunneling. | in supporting IP tunneling. | |||
</t> | </t> | |||
<t> | ||||
Non-constrained uses of RPL are not in scope of this document, a | ||||
nd | ||||
applicability statements for those uses may provide different | ||||
advice, E.g. <xref target="I-D.ietf-anima-autonomic-control-plan | ||||
e" />. | ||||
</t> | ||||
<section title="Overview"> | ||||
<t> | ||||
The rest of the document is organized as follows: Section 2 descr | ||||
ibes the used terminology. | ||||
Section 3 provides a RPL Overview. | ||||
Section 4 describes the updates to RFC6553, RFC6550 and RFC 8138. | ||||
Section 5 provides the reference topology used for the uses cases | ||||
. | ||||
Section 6 describes the use cases included. | ||||
Section 7 describes the storing mode cases and section 8 the non- | ||||
storing mode cases. | ||||
Section 9 describes the operational considerations of supporting | ||||
RPL-unaware-leaves. | ||||
Section 10 depicts operational considerations for the proposed ch | ||||
ange on RPI Option Type, section 11 the | ||||
IANA considerations and then section 12 describes the security | ||||
aspects. | ||||
</t> | ||||
</section> | ||||
</section> | ||||
<section title="Terminology and Requirements Language"> | ||||
<t> | <t> | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL | Unconstrained uses of RPL are not in scope of this document, and | |||
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", | applicability statements for those uses may provide different | |||
"MAY", and "OPTIONAL" in this document are to be interpreted as | advice, e.g., <xref target="I-D.ietf-anima-autonomic-control-pla | |||
described in BCP 14 | ne" format="default"/>. | |||
<xref target="RFC2119" /> | ||||
<xref target="RFC8174" /> when, and only when, they | ||||
appear in all capitals, as shown here. | ||||
</t> | </t> | |||
<section numbered="true" toc="default"> | ||||
<name>Overview</name> | ||||
<t> | <t> | |||
Terminology defined in <xref target="RFC7102"/> applies to this document | The rest of the document is organized as follows: <xref target="s | |||
: LLN, RPL, RPL domain and ROLL. | ec_terms" format="default"/> describes the terminology that is used. | |||
<xref target="sec_rpl_overview" format="default"/> provides a RPL | ||||
overview. | ||||
<xref target="updateRFCs_section" format="default"/> describes the | ||||
updates to RFC 6553, RFC 6550, and RFC 8138. | ||||
<xref target="sec_ref_topo" format="default"/> provides the refer | ||||
ence topology used for the use cases. | ||||
<xref target="sec_use_cases" format="default"/> describes the use | ||||
cases included. | ||||
<xref target="sec_sm" format="default"/> describes the Storing mo | ||||
de cases and <xref target="sec_non-sm" format="default"/> the Non-Storing mode c | ||||
ases. | ||||
<xref target="notrplaware" format="default"/> describes the opera | ||||
tional considerations of supporting RPL-unaware leaves. | ||||
<xref target="sec_op_con_0x23" format="default"/> depicts operati | ||||
onal considerations for the proposed change on RPI Option Type, <xref target="ia | ||||
na" format="default"/> the | ||||
IANA considerations, and then <xref target="Security" format="def | ||||
ault"/> describes the security | ||||
aspects. | ||||
</t> | </t> | |||
</section> | ||||
</section> | ||||
<section anchor="sec_terms" numbered="true" toc="default"> | ||||
<name>Terminology and Requirements Language</name> | ||||
<t> | <t> | |||
Consumed: A Routing Header is consumed when the Segments Left field is z | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQU | |||
ero, which indicates that the | IRED</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 14 <xref target="RFC2119"/> <xref target="RFC8174"/> | ||||
when, and only when, they appear in all capitals, as shown here. | ||||
</t> | ||||
<t> | ||||
The following terminology defined in <xref target="RFC7102" format="defa | ||||
ult"/> applies to this document: LLN, RPL, RPL domain, and ROLL. | ||||
</t> | ||||
<dl> | ||||
<dt> | ||||
Consumed:</dt><dd>A Routing Header is consumed when the Segments Left fi | ||||
eld is zero, which indicates that the | ||||
destination in the IPv6 header is the final destination of the packet an d that the hops in the Routing Header | destination in the IPv6 header is the final destination of the packet an d that the hops in the Routing Header | |||
have been traversed. | have been traversed. | |||
</t> | </dd> | |||
<t> | <dt> | |||
RPL Leaf: An IPv6 host that is attached to a RPL router and obtains conn | RPL Leaf:</dt><dd>An IPv6 host that is attached to a RPL router and obta | |||
ectivity | ins connectivity | |||
through a RPL Destination Oriented Directed Acyclic Graph (DODAG). As an | through a RPL Destination-Oriented Directed Acyclic Graph (DODAG). As an | |||
IPv6 node, | IPv6 node, | |||
a RPL Leaf is expected to ignore a consumed Routing Header and as an IPv | a RPL leaf is expected to ignore a consumed Routing Header, and as an IP | |||
6 host, it | v6 host, it | |||
is expected to ignore a Hop-by-Hop header. It results that a RPL Leaf ca | is expected to ignore a Hop-by-Hop Options header. Thus, a RPL leaf can | |||
n correctly | correctly | |||
receive a packet with RPL artifacts. On the other hand, a RPL Leaf is no | receive a packet with RPL artifacts. On the other hand, a RPL leaf is no | |||
t expected | t expected | |||
to generate RPL artifacts or to support IP-in-IP encapsulation. For simp lification, | to generate RPL artifacts or to support IP-in-IP encapsulation. For simp lification, | |||
this document uses the standalone term leaf to mean a RPL leaf. | this document uses the standalone term leaf to mean a RPL leaf. | |||
</t> | </dd> | |||
<t> | <dt> | |||
RPL Packet Information (RPI): | RPL Packet Information (RPI):</dt><dd> | |||
The information defined abstractly in <xref target="RFC6550"/> to be pla | The information defined abstractly in <xref target="RFC6550" format="def | |||
ced in IP packets. | ault"/> to be placed in IP packets. | |||
The term is commonly used, including in this document, to refer to the R | The term is commonly used, including in this document, to refer to the R | |||
PL Option <xref target="RFC6553"/> | PL Option <xref target="RFC6553" format="default"/> | |||
that transports that abstract information in an IPv6 Hop-by-Hop Header. | that transports that abstract information in an IPv6 Hop-by-Hop Options | |||
<xref target="RFC8138"/> provides | header. <xref target="RFC8138" format="default"/> provides | |||
an alternate (more compressed) formating for the same abstract informati | an alternate (more compressed) formatting for the same abstract informa | |||
on. | tion. | |||
</t> | </dd> | |||
<t> | <dt> | |||
RPL-aware-node (RAN): A device which implements RPL. Please note that th | RPL-Aware Node (RAN):</dt><dd>A device that implements RPL. Please note | |||
e device can be found inside the LLN or outside LLN. | that the device can be found inside the LLN or outside LLN. | |||
</t> | </dd> | |||
<t> | <dt> | |||
RPL-Aware-Leaf(RAL): A RPL-aware-node that is also a RPL Leaf. | RPL-Aware Leaf (RAL):</dt><dd>A RPL-aware node that is also a RPL leaf. | |||
</t> | </dd> | |||
<t> | <dt> | |||
RPL-unaware-node: A device which does not implement RPL, thus the device | RPL-Unaware Node:</dt><dd>A device that does not implement RPL, thus the | |||
is not-RPL-aware. | device is RPL unaware. | |||
Please note that the device can be found inside the LLN. | Please note that the device can be found inside the LLN. | |||
</t> | </dd> | |||
<t> | <dt> | |||
RPL-Unaware-Leaf(RUL): A RPL-unaware-node that is also a RPL Leaf. | RPL-Unaware Leaf (RUL):</dt><dd>A RPL-unaware node that is also a RPL le | |||
</t> | af. | |||
</dd> | ||||
<!-- Note: blockquote could be used here, but it doesn't work in <dd/>: | ||||
https://trac.tools.ietf.org/tools/xml2rfc/trac/ticket/570 | ||||
<t> | Check status of this before pub. | |||
6LoWPAN Node (6LN): <xref target="RFC6775"/> defines it as: "A 6LoWPA | ||||
N node is any host or router participating in a LoWPAN. | And since there are three places where it can't be used in the terminology, | |||
it seemed odd to use it in Section 4.2, which is just a fragment of a quote. | ||||
--> | ||||
<dt> | ||||
6LoWPAN Node (6LN):</dt><dd><xref target="RFC6775" format="default"/> | ||||
defines it as the following: | ||||
"A 6LoWPAN node is any host or router participating in a LoWPAN. | ||||
This term is used when referring to situations in which either a | This term is used when referring to situations in which either a | |||
host or router can play the role described.". In this document, a 6LN acts | host or router can play the role described." In this document, a 6LN acts | |||
as a leaf. | as a leaf. | |||
</t> | </dd> | |||
<t> | <dt> | |||
6LoWPAN Router (6LR): <xref target="RFC6775"/> defines it as:" An intermed | 6LoWPAN Router (6LR):</dt><dd><xref target="RFC6775" format="default"/> de | |||
iate router in the LoWPAN that is able to send and | fines it as the following: | |||
"An intermediate router in the LoWPAN that is able to send and | ||||
receive Router Advertisements (RAs) and Router Solicitations (RSs) | receive Router Advertisements (RAs) and Router Solicitations (RSs) | |||
as well as forward and route IPv6 packets. 6LoWPAN routers are | as well as forward and route IPv6 packets. 6LoWPAN routers are | |||
present only in route-over topologies." | present only in route-over topologies." | |||
</t> | </dd> | |||
<t> | <dt> | |||
6LoWPAN Border Router (6LBR): <xref target="RFC6775"/> defines it as:"A bo | 6LoWPAN Border Router (6LBR):</dt><dd><xref target="RFC6775" format="defau | |||
rder router located at the junction of separate 6LoWPAN | lt"/> defines it as the following: | |||
"A border router located at the junction of separate 6LoWPAN | ||||
networks or between a 6LoWPAN network and another IP network. | networks or between a 6LoWPAN network and another IP network. | |||
There may be one or more 6LBRs at the 6LoWPAN network boundary. A | There may be one or more 6LBRs at the 6LoWPAN network boundary. A | |||
6LBR is the responsible authority for IPv6 prefix propagation for | 6LBR is the responsible authority for IPv6 prefix propagation for | |||
the 6LoWPAN network it is serving. An isolated LoWPAN also | the 6LoWPAN network it is serving. An isolated LoWPAN also | |||
contains a 6LBR in the network, which provides the prefix(es) for | contains a 6LBR in the network, which provides the prefix(es) for | |||
the isolated network." | the isolated network." | |||
</t> | </dd> | |||
<t> | ||||
Flag Day: A Flag Day is caused when a network is reconfigured in a way | <dt> | |||
that nodes running the older configuration can not communicate with nodes runni | Flag Day:</dt><dd>A flag day is caused when a network is reconfigured | |||
ng the new configuration. For instance, when the ARPANET changed from IP versio | in a way that nodes running the older configuration cannot communicate with node | |||
n 3 to IP version 4 on January 1, 1983 (<xref target="RFC0801" />). | s running the new configuration. An example of a flag day is when the ARPANET c | |||
In the context of this document, a switch from RPI Option Type (0x63) | hanged from IP version 3 to IP version 4 on January 1, 1983 <xref target="RFC080 | |||
and Option Type (0x23) presents as a disruptive changeover. In order to reduce | 1" format="default"/>. | |||
the amount of time for such a changeover, <xref target="update6550" /> provides | In the context of this document, a switch from RPI Option Type (0x63) | |||
a mechanism to allow nodes to be incrementally upgraded. | to Option Type (0x23) presents as a disruptive changeover. In order to reduce t | |||
</t> | he amount of time for such a changeover, <xref target="update6550" format="defau | |||
<t> | lt"/> provides a mechanism to allow nodes to be incrementally upgraded. | |||
Non-Storing Mode (Non-SM): RPL mode of operation in which the RPL- | </dd> | |||
aware-nodes send information to the root about their parents. Thus, the | <dt> | |||
root knows the topology. | Non-Storing Mode (Non-SM):</dt><dd>A RPL mode of operation in which t | |||
Because the root knows the topology, the intermediate 6LRs do not maintai | he RPL-aware | |||
n routing state and | nodes send information to the root about their parents. Thus, the root k | |||
nows the topology. | ||||
Because the root knows the topology, the intermediate 6LRs do not maintai | ||||
n routing state, and | ||||
source routing is needed. | source routing is needed. | |||
</t> | </dd> | |||
<t> | <dt> | |||
Storing Mode (SM): RPL mode of operation in which RPL-aware-nodes (6LRs) | Storing Mode (SM):</dt><dd>A RPL mode of operation in which RPL-aware no | |||
maintain routing | des (6LRs) maintain routing | |||
state (of the children) so that source routing is not needed. | state (of the children) so that source routing is not needed. | |||
</t> <t> | </dd> | |||
Note: Due to lack of space in some figures (tables) we refer to IPv6-in- | </dl> | |||
IPv6 as IP6-IP6. | <aside><t> | |||
</t> | Note: Due to lack of space in some tables, we refer to IPv6-in-IPv6 as I | |||
</section> | P6-IP6. | |||
<section title="RPL Overview"> | </t></aside> | |||
<t> | </section> | |||
RPL defines the RPL Control messages (control plane), a new | <section anchor="sec_rpl_overview" numbered="true" toc="default"> | |||
ICMPv6 <xref target="RFC4443"/> message with Type 155. | <name>RPL Overview</name> | |||
DIS (DODAG Information Solicitation), DIO (DODAG Information Object) | <t> | |||
RPL defines the RPL control message (control plane), which is an | ||||
ICMPv6 message <xref target="RFC4443" format="default"/> with a Type of | ||||
155. | ||||
DIS (DODAG Information Solicitation), DIO (DODAG Information Object), | ||||
and DAO (Destination Advertisement Object) messages are | and DAO (Destination Advertisement Object) messages are | |||
all RPL Control messages but with different Code values. | all RPL control messages but with different Code values. | |||
A RPL Stack is shown in <xref target="fig_RPLStack"/>. | A RPL stack is shown in <xref target="fig_RPLStack" format="default"/>. | |||
</t> | </t> | |||
<t> | <figure anchor="fig_RPLStack"> | |||
<figure title="RPL Stack." anchor="fig_RPLStack" align="center"> | <name>RPL Stack</name> | |||
<artwork><![CDATA[ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
+--------------+ | +--------------+ | |||
| Upper Layers | | | Upper Layers | | |||
| | | | | | |||
+--------------+ | +--------------+ | |||
| RPL | | | RPL | | |||
| | | | | | |||
+--------------+ | +--------------+ | |||
| ICMPv6 | | | ICMPv6 | | |||
| | | | | | |||
+--------------+ | +--------------+ | |||
| IPv6 | | | IPv6 | | |||
| | | | | | |||
+--------------+ | +--------------+ | |||
| 6LoWPAN | | | 6LoWPAN | | |||
| | | | | | |||
+--------------+ | +--------------+ | |||
| PHY-MAC | | | PHY-MAC | | |||
| | | | | | |||
+--------------+ | +--------------+ | |||
]]></artwork></figure> | ]]></artwork> | |||
</t> | </figure> | |||
<t> | <t> | |||
RPL supports two modes of Downward internal traffic: in storing mode (SM | RPL supports two modes of Downward internal traffic: in Storing mode (SM | |||
), | ), | |||
it is fully stateful; in non-storing mode (Non-SM), it is fully source | it is fully stateful; in Non-Storing mode (non-SM), it is fully source | |||
routed. A RPL Instance is either fully storing or fully | routed. A RPL Instance is either fully Storing or fully | |||
non-storing, i.e. a RPL Instance with a combination of a fully | Non-Storing, i.e., a RPL Instance with a combination of fully | |||
storing and non-storing nodes is not supported with the | Storing and Non-Storing nodes is not supported with the | |||
current specifications at the time of writing this document. | current specifications at the time of writing this document. | |||
External routes are advertised with non-storing-mode messaging | External routes are advertised with non-SM messaging | |||
even in a storing mode network, see <xref target="nnstext"/> | even in an SM network, see <xref target="nnstext" format="default"/> | |||
</t> | </t> | |||
</section> | ||||
</section> | <section anchor="updateRFCs_section" numbered="true" toc="default"> | |||
<name>Updates to RFC 6550, RFC 6553, and RFC 8138</name> | ||||
<section anchor="updateRFCs_section" title="Updates to RFC6550, RFC6553 | <section anchor="updateRFC_section6550" numbered="true" toc="default"> | |||
and RFC8138"> | <name>Updates to RFC 6550</name> | |||
<section anchor="nnstext" numbered="true" toc="default"> | ||||
<section anchor="updateRFC_section6550" title="Updates to RFC6550"> | <name>Advertising External Routes with Non-Storing Mode Signaling</nam | |||
e> | ||||
<section anchor="nnstext" title="Advertising External Routes with Non | ||||
-Storing Mode Signaling."> | ||||
<t> | <t> | |||
Section 6.7.8. of <xref target="RFC6550"/> introduces the 'E' flag tha t | <xref target="RFC6550" section="6.7.8" sectionFormat="of" format="defa ult"/> introduces the 'E' flag that | |||
is set to indicate that the 6LR that generates the DAO redistributes | is set to indicate that the 6LR that generates the DAO redistributes | |||
external targets into the RPL network. An external Target is a Target | external targets into the RPL network. An external target is a target | |||
that has been learned through an alternate protocol, for instance a | that has been learned through an alternate protocol, for instance, a | |||
route to a prefix that is outside the RPL domain but reachable via a | route to a prefix that is outside the RPL domain but reachable via a | |||
6LR. Being outside of the RPL domain, a node that is reached via an | 6LR. Being outside of the RPL domain, a node that is reached via an | |||
external target cannot be guaranteed to ignore the RPL artifacts and | external target cannot be guaranteed to ignore the RPL artifacts and | |||
cannot be expected to process the <xref target="RFC8138"/> compression | cannot be expected to process the compression defined in <xref target= "RFC8138" format="default"/> | |||
correctly. This means that the RPL artifacts should be contained in an | correctly. This means that the RPL artifacts should be contained in an | |||
IP-in-IP encapsulation that is removed by the 6LR, and that any | IP-in-IP encapsulation that is removed by the 6LR, and that any | |||
remaining compression should be expanded by the 6LR before it forwards | remaining compression should be expanded by the 6LR before it forwards | |||
a packet outside the RPL domain. | a packet outside the RPL domain. | |||
</t><t> | </t> | |||
This specification updates <xref target="RFC6550"/> to RECOMMEND that | <t> | |||
external targets are advertised using Non-Storing Mode DAO messaging | This specification updates <xref target="RFC6550" format="default"/> t | |||
even in a Storing-Mode network. This way, external routes are not | o say that advertising external | |||
advertised within the DODAG and all packets to an external target | targets using Non-Storing mode DAO messaging even in a Storing mode | |||
reach the Root like normal Non-Storing Mode traffic. The Non-Storing | network is <bcp14>RECOMMENDED</bcp14>. This way, external routes are | |||
Mode DAO informs the Root of the address of the 6LR that injects the | not | |||
advertised within the DODAG, and all packets to an external target | ||||
reach the root like normal Non-Storing mode traffic. The Non-Storing | ||||
mode DAO informs the root of the address of the 6LR that injects the | ||||
external route, and the root uses IP-in-IP encapsulation to that 6LR, | external route, and the root uses IP-in-IP encapsulation to that 6LR, | |||
which terminates the IP-in-IP tunnel and forwards the original packet | which terminates the IP-in-IP tunnel and forwards the original packet | |||
outside the RPL domain free of RPL artifacts. | outside the RPL domain free of RPL artifacts. | |||
</t><t> | </t> | |||
<t> | ||||
In the other direction, | In the other direction, | |||
for traffic coming from an external target into the LLN, the parent | for traffic coming from an external target into the LLN, the parent | |||
(6LR) that injects the traffic always encapsulates to the root. | (6LR) that injects the traffic always encapsulates to the root. | |||
This whole operation is | This whole operation is | |||
transparent to intermediate routers that only see traffic between the | transparent to intermediate routers that only see traffic between the | |||
6LR and the Root, and only the Root and the 6LRs that inject external | 6LR and the root, and only the root and the 6LRs that inject external | |||
routes in the network need to be upgraded to add this function to the | routes in the network need to be upgraded to add this function to the | |||
network. | network. | |||
</t><t> | </t> | |||
<t> | ||||
A RUL is a special case of external target when the target is actually | A RUL is a special case of external target when the target is actually | |||
a host and it is known to support a consumed Routing Header and to | a host, and it is known to support a consumed Routing Header and to | |||
ignore a Hop-by-Hop header as prescribed by <xref target="RFC8200"/>. | ignore a Hop-by-Hop Options header as prescribed by <xref target="RFC8 | |||
200" format="default"/>. | ||||
The target may have been learned through an external routing protocol or may have | The target may have been learned through an external routing protocol or may have | |||
been registered to the 6LR using <xref target="RFC8505"/>. | been registered to the 6LR using <xref target="RFC8505" format="defaul | |||
</t><t> | t"/>. | |||
</t> | ||||
<t> | ||||
In order to enable IP-in-IP all the way to a 6LN, it is beneficial | In order to enable IP-in-IP all the way to a 6LN, it is beneficial | |||
that the 6LN supports decapsulating IP-in-IP, but that is not assumed | that the 6LN supports decapsulating IP-in-IP, but that is not assumed | |||
by <xref target="RFC8504"/>. | by <xref target="RFC8504" format="default"/>. | |||
If the 6LN is a RUL, the Root that encapsulates a packet SHOULD | If the 6LN is a RUL, the root that encapsulates a packet <bcp14>SHOULD | |||
terminate the tunnel at a parent 6LR unless it is aware that the RUL | </bcp14> | |||
supports IP-in-IP decapsulation. | terminate the tunnel at a parent 6LR. The root may encapsulate all the | |||
</t><t> | way to the RUL if it is aware that the RUL supports IP-in-IP decapsula | |||
tion | ||||
and the artifacts in the outer header chain. | ||||
</t> | ||||
<t> | ||||
A node that is reachable over an external route is not expected to | A node that is reachable over an external route is not expected to | |||
support <xref target="RFC8138"/>. Whether a decapsulation took place | support <xref target="RFC8138" format="default"/>. Whether a decapsula tion took place | |||
or not and even when the 6LR is delivering the packet to a RUL, the | or not and even when the 6LR is delivering the packet to a RUL, the | |||
6LR that injected an external route MUST uncompress the packet before | 6LR that injected an external route <bcp14>MUST</bcp14> undo the <xref target="RFC8138" format="default"/> compression on the packet before | |||
forwarding over that external route. | forwarding over that external route. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="mopchanges" title="Configuration Options and Mode | <section anchor="mopchanges" numbered="true" toc="default"> | |||
of Operation"> | <name>Configuration Options and Mode of Operation</name> | |||
<t> | <t> | |||
Section 6.7.6 of RFC6550 describes the DODAG Configuration Option | <xref target="RFC6550" section="6.7.6" sectionFormat="of" format=" | |||
as | default"/> describes the DODAG Configuration option as | |||
containing a series of Flags in the first octet of the payload. | containing a series of flags in the first octet of the payload. | |||
</t> | </t> | |||
<t> | <t> | |||
Anticipating future work to revise RPL relating to how the LLN and DODAG | Anticipating future work to revise RPL relating to how the LLN and DODAG | |||
are configured, this document renames the DODAG Configuration Opti | are configured, this document renames the IANA "DODAG Configuratio | |||
on | n Option | |||
Flags registry so that it applies to Mode of Operation (MOP) value | Flags" subregistry so that it applies to Mode of Operation (MOP) v | |||
s zero | alues zero | |||
(0) to six (6) only, leaving the flags unassigned for MOP value se | (0) through six (6) only, leaving the flags unassigned for MOP val | |||
ven | ue seven | |||
(7).The MOP is described in RFC6550 section 6.3.1. | (7). The MOP is described in <xref target="RFC6550" section="6.3.1 | |||
" sectionFormat="comma" format="default"/>. | ||||
</t> | </t> | |||
<t> | <t> | |||
In addition, this document reserves MOP value 7 for future expansi on. | In addition, this document reserves MOP value 7 for future expansi on. | |||
</t> | </t> | |||
<t> | <t> | |||
See Sections 11.2 and 11.3. | See Sections <xref target="sec_op_flags_reg" format="counter"/> and <xref target="sec_mop_val_change" format="counter"/>. | |||
</t> | </t> | |||
</section> | </section> | |||
<section title="Indicating the new RPI in the | <section anchor="update6550" numbered="true" toc="default"> | |||
DODAG Configuration option Flag. " anchor="update6550" | <name>Indicating the New RPI in the DODAG Configuration Option Flag</n | |||
> | ame> | |||
<t> | <t> | |||
In order to avoid a Flag Day caused by lack of interoperation | In order to avoid a flag day caused by lack of interoperation | |||
between new RPI Option Type (0x23) and old RPI Option Type (0x63) no | between nodes of the new RPI Option Type (0x23) and old RPI Option T | |||
des, this section | ype (0x63), this section | |||
defines a flag in the DIO Configuration option, to indicate when | defines a flag in the DODAG Configuration option, to indicate when | |||
the new RPI Option Type can be safely used. This means, the flag is | the new RPI Option Type can be safely used. This means that the flag | |||
going | is going | |||
to indicate the value of Option Type that the network will be using for the RPL Option. Thus, when a | to indicate the value of Option Type that the network will be using for the RPL Option. Thus, when a | |||
node joins to a network it will know which value to use. | node joins to a network, it will know which value to use. | |||
With this, RPL-capable nodes know if it is safe to use 0x23 when cre ating a new RPL Option. | With this, RPL-capable nodes know if it is safe to use 0x23 when cre ating a new RPL Option. | |||
A node that forwards a packet with an RPI MUST NOT modify the Option Type of the RPL Option. | A node that forwards a packet with an RPI <bcp14>MUST NOT</bcp14> mo dify the Option Type of the RPL Option. | |||
</t> | </t> | |||
<t> | <t> | |||
This is done using a DODAG Configuration option flag which will | This is done using a DODAG Configuration option flag that will | |||
signal "RPI 0x23 enable" and propagate through the network. | signal "RPI 0x23 enable" and propagate through the network. | |||
Section 6.3.1. of <xref target="RFC6550"/> defines a 3-bit Mode of | <xref target="RFC6550" section="6.3.1" sectionFormat="of" format=" default"/> defines a 3-bit Mode of | |||
Operation (MOP) in the DIO Base Object. The flag is defined only | Operation (MOP) in the DIO Base Object. The flag is defined only | |||
for MOP value between 0 to 6. | for MOP value between 0 to 6. | |||
</t> | </t> | |||
<t> | <t> | |||
For a MOP value of 7, a node MUST use the RPI 0x23 option. | For a MOP value of 7, a node <bcp14>MUST</bcp14> use the RPI 0x23 | |||
</t> | option. | |||
<t> | </t> | |||
As stated in <xref target="RFC6550"/> the DODAG Configuration opti | <t> | |||
on is present in DIO messages. | As stated in <xref target="RFC6550" format="default"/>, the DODAG | |||
Configuration option is present in DIO messages. | ||||
The DODAG Configuration option distributes configuration | The DODAG Configuration option distributes configuration | |||
information. It is generally static, and does not change within | information. It is generally static, and it does not change withi n | |||
the DODAG. | the DODAG. | |||
This information is configured at the DODAG root and distributed | This information is configured at the DODAG root and distributed | |||
throughout the DODAG with the DODAG Configuration option. | throughout the DODAG with the DODAG Configuration option. | |||
Nodes other than the DODAG root do not modify this information whe n | Nodes other than the DODAG root do not modify this information whe n | |||
propagating the DODAG Configuration option. | propagating the DODAG Configuration option. | |||
</t> | </t> | |||
<t> | <t> | |||
Currently, the DODAG Configuration option in <xref target="RFC6550 | Currently, the DODAG Configuration option in <xref target="RFC6550 | |||
"/> states: | " format="default"/> states | |||
"the unused bits MUST be initialized to zero by the sender | that the unused bits "<bcp14>MUST</bcp14> be initialized to zero b | |||
and MUST be ignored by the receiver". If the flag is received wi | y the sender | |||
th a | and <bcp14>MUST</bcp14> be ignored by the receiver." If the flag i | |||
value zero (which is the default), then new nodes will remain in | s received with a | |||
RFC6553 Compatible Mode; originating traffic with the old-RPI Opti | value zero, which is the default, then new nodes will remain compati | |||
on Type (0x63) value. | ble with | |||
RFC 6553 -- originating traffic with the old RPI Option Type value | ||||
(0x63). | ||||
If the flag is received with a value of 1, then the value for the | If the flag is received with a value of 1, then the value for the | |||
RPL Option MUST be set to 0x23. | RPL Option <bcp14>MUST</bcp14> be set to 0x23. | |||
</t> | </t> | |||
<t> | <t> | |||
Bit number three of the flag field in the DODAG Configuration optio | Bit number three of the Flags field in the DODAG Configuration opti | |||
n | on | |||
is to be used as shown in <xref target="fig_RPIflagday2"/> (which i | is to be used as shown in <xref target="fig_RPIflagday2" format="de | |||
s the same as <xref target="fig_RPIflagdayConfOption"/> | fault"/> (which is the same as <xref target="fig_RPIflagdayConfOption" format="d | |||
in <xref target="iana"/> and is shown here for convenience): | efault"/> | |||
</t> | in <xref target="iana" format="default"/> and is shown here for con | |||
<t> | venience): | |||
<figure title="DODAG Configuration option Flag to indicate the RPI-fla | </t> | |||
g-day." anchor="fig_RPIflagday2" align="center"> | ||||
<artwork> <![CDATA[ | ||||
+------------+-----------------+---------------+ | ||||
| Bit number | Description | Reference | | ||||
+------------+-----------------+---------------+ | ||||
| 3 | RPI 0x23 enable | This document | | ||||
+------------+-----------------+---------------+ | ||||
]]></artwork></figure> | <table anchor="fig_RPIflagday2"> | |||
</t> | <name>DODAG Configuration Option Flag to Indicate the RPI Flag Day</name> | |||
<t> | <thead> | |||
<tr> | ||||
<th align="center">Bit number</th> | ||||
<th align="center">Description</th> | ||||
<th align="center">Reference</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td align="center">3</td> | ||||
<td align="center">RPI 0x23 enable</td> | ||||
<td align="center">This document</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<t> | ||||
In the case of reboot, the node (6LN or 6LR) does not remember the | In the case of reboot, the node (6LN or 6LR) does not remember the | |||
RPI Option Type (i.e., whether or not the flag is set), so the nod e will not trigger DIO | RPI Option Type (i.e., whether or not the flag is set), so the nod e will not trigger DIO | |||
messages until a DIO message is received indicating the RPI | messages until a DIO message is received that indicates the RPI | |||
value to be used. The node will use the value 0x23 if the network supports this feature. | value to be used. The node will use the value 0x23 if the network supports this feature. | |||
</t> | </t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section title="Updates to RFC6553: Indicating the new RPI Option Type | <section numbered="true" toc="default"> | |||
."> | <name>Updates to RFC 6553: Indicating the New RPI Option Type</name> | |||
<t> | <t> | |||
This modification is required in order to be able to send, for example , | This modification is required in order to be able to send, for example , | |||
IPv6 packets from a RPL-Aware-Leaf to a RPL-unaware node through Inter net (see <xref target="sm-Ral2i" />), | IPv6 packets from a RPL-aware leaf to a RPL-unaware node through the I nternet (see <xref target="sm-Ral2i" format="default"/>) | |||
without requiring IPv6-in-IPv6 encapsulation. | without requiring IPv6-in-IPv6 encapsulation. | |||
</t> | </t> | |||
<t> | <t> | |||
<xref target="RFC6553"/> (Section 6, Page 7) states as shown in <xref | <xref target="RFC6553" section="6" sectionFormat="of" format="default" | |||
target="fig_RPIOption" />, | /> states, as shown in <xref target="fig_RPIOption" format="default"/>, | |||
that in the Option Type field of the RPL Option, | that in the Option Type field of the RPL Option, | |||
the two high order bits must be set to '01' and the third bit is equal to '1'. | the two high-order bits must be set to '01' and the third bit is equal to '1'. | |||
The first two bits indicate that the IPv6 node must discard the packet | The first two bits indicate that the IPv6 node must discard the packet | |||
if it doesn't recognize the Option Type, | if it doesn't recognize the Option Type, | |||
and the third bit indicates that the Option Data may change in route. | and the third bit indicates that the Option Data may change in route. | |||
The remaining bits serve as the Option Type. | The remaining bits serve as the Option Type. | |||
</t> | </t> | |||
<t> | <table anchor="fig_RPIOption"> | |||
<figure title="Option Type in RPL Option." anchor="fig_RPIOption" alig | <name>Option Type in RPL Option</name> | |||
n="center"> | <thead> | |||
<artwork> <![CDATA[ | <tr> | |||
+-------+-------------------+----------------+-----------+ | <th rowspan="2" colspan="1" align="center">Hex Value</th> | |||
| Hex | Binary Value | Description | Reference | | <th rowspan="1" colspan="3" align="center">Binary Value</th> | |||
+ Value +-------------------+ + + | <th rowspan="2" colspan="1" align="center">Description</th> | |||
| | act | chg | rest | | | | <th rowspan="2" colspan="1" align="center">Reference</th> | |||
+-------+-----+-----+-------+----------------+-----------+ | </tr> | |||
| 0x63 | 01 | 1 | 00011 | RPL Option | [RFC6553] | | <tr> | |||
+-------+-----+-----+-------+----------------+-----------+ | <th align="center">act</th> | |||
]]></artwork></figure> | <th align="center">chg</th> | |||
</t> | <th align="center">rest</th> | |||
<t> | </tr> | |||
This document illustrates that it is not always possible to know for s | </thead> | |||
ure at the source that a packet will only travel within the RPL domain or may le | <tbody> | |||
ave it. | <tr> | |||
<td align="center">0x63</td> | ||||
<td align="center">01</td> | ||||
<td align="center">1</td> | ||||
<td align="center">00011</td> | ||||
<td align="center">RPL Option</td> | ||||
<td align="center"><xref target="RFC6553" format="default"/></td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<t> | ||||
This document illustrates that it is not always possible to know for s | ||||
ure at the source whether a packet will travel only within the RPL domain or whe | ||||
ther it will leave it. | ||||
</t><t> | </t> | |||
At the time <xref target="RFC6553"/> was published, leaking a Hop-by-H | <t> | |||
op header in the outer IPv6 header | At the time <xref target="RFC6553" format="default"/> was published, l | |||
chain could potentially impact core routers in the internet. So at tha | eaking a Hop-by-Hop Options header in the outer IPv6 header | |||
t time, it was decided to encapsulate | chain could potentially impact core routers in the Internet. So at tha | |||
t time, it was decided to encapsulate | ||||
any packet with a RPL Option using IPv6-in-IPv6 in all cases where it was unclear whether the packet would | any packet with a RPL Option using IPv6-in-IPv6 in all cases where it was unclear whether the packet would | |||
remain within the RPL domain. In the exception case where a packet wou ld still leak, the Option Type would | remain within the RPL domain. In the exception case where a packet wou ld still leak, the Option Type would | |||
ensure that the first router in the Internet that does not recognize t he option would drop the packet and | ensure that the first router in the Internet that does not recognize t he option would drop the packet and | |||
protect the rest of the network. | protect the rest of the network. | |||
</t><t> | </t> | |||
Even with <xref target="RFC8138"/>, where the IPv6-in-IPv6 header is c | <t> | |||
ompressed, this approach yields extra bytes | Even with <xref target="RFC8138" format="default"/>, where the IPv6-in | |||
in a packet; this means consuming more energy, more bandwidth, incurri | -IPv6 header is compressed, this approach yields extra bytes | |||
ng higher chances of loss and possibly | in a packet; this means consuming more energy and more bandwidth, incu | |||
rring higher chances of loss, and possibly | ||||
causing a fragmentation at the 6LoWPAN level. This impacts the daily o peration of constrained devices for a case | causing a fragmentation at the 6LoWPAN level. This impacts the daily o peration of constrained devices for a case | |||
that generally does not happen and would not heavily impact the core anyway. | that generally does not happen and would not heavily impact the core anyway. | |||
</t><t> | </t> | |||
<t> | ||||
While intention was and remains that the Hop-by-Hop header with a RPL Option should be confined within the | While the intention was and remains that the Hop-by-Hop Options header with a RPL Option should be confined within the | |||
RPL domain, this specification modifies this behavior in order to redu ce the dependency on IPv6-in-IPv6 and | RPL domain, this specification modifies this behavior in order to redu ce the dependency on IPv6-in-IPv6 and | |||
protect the constrained devices. Section 4 of <xref target="RFC8200"/> clarifies the behaviour of routers in | protect the constrained devices. <xref target="RFC8200" section="4" se ctionFormat="of" format="default"/> clarifies the behavior of routers in | |||
the Internet as follows: "it is now expected that nodes along a packet 's delivery path only examine and process | the Internet as follows: "it is now expected that nodes along a packet 's delivery path only examine and process | |||
the Hop-by-Hop Options header if explicitly configured to do so". | the Hop-by-Hop Options header if explicitly configured to do so."</t> | |||
</t><t> | <t> | |||
When unclear about the travel of a packet, it becomes preferable for a source not to encapsulate, accepting | When unclear about the travel of a packet, it becomes preferable for a source not to encapsulate, accepting | |||
the fact that the packet may leave the RPL domain on its way to its de stination. In that event, the packet | the fact that the packet may leave the RPL domain on its way to its de stination. In that event, the packet | |||
should reach its destination and should not be discarded by the first node that does not recognize the RPL Option. | should reach its destination and should not be discarded by the first node that does not recognize the RPL Option. | |||
But with the current value of the Option Type, if a node in the Inter | However, with the current value of the Option Type, if a node in the | |||
net is configured to process the Hop-by-Hop | Internet is configured to process the Hop-by-Hop Options | |||
header, and if such node encounters an option with the first two bits | header, and if such a node encounters an Option Type with the first t | |||
set to 01 and conforms to <xref target="RFC8200"/>, | wo bits set to 01 and the node conforms to <xref target="RFC8200" format="defaul | |||
t"/>, | ||||
it will drop the packet. Host systems should do the same, irrespecti ve of the configuration. | it will drop the packet. Host systems should do the same, irrespecti ve of the configuration. | |||
</t> | </t> | |||
<t> | <t> | |||
Thus, this document updates the Option Type of the RPL Option <xref t | Thus, this document updates the Option Type of the RPL Option <xref t | |||
arget="RFC6553"/>, | arget="RFC6553" format="default"/>, | |||
naming it RPI Option Type for simplicity, | naming it RPI Option Type for simplicity | |||
to (<xref target="fig_RPIOption_new"/>): | (<xref target="fig_RPIOption_new" format="default"/>): | |||
the two high order bits MUST be set to '00' | the two high order bits <bcp14>MUST</bcp14> be set to '00', | |||
and the third bit is equal to '1'. | and the third bit is equal to '1'. | |||
The first two bits indicate that the IPv6 node MUST | The first two bits indicate that the IPv6 node <bcp14>MUST</bcp14> | |||
skip over this option and continue processing the header | skip over this option and continue processing the header | |||
(<xref target="RFC8200"/> Section 4.2) | (<xref target="RFC8200" section="4.2" sectionFormat="comma" format="d efault"/>) | |||
if it doesn't recognize the Option Type, | if it doesn't recognize the Option Type, | |||
and the third bit continues to be set to indicate that the Option | and the third bit continues to be set to indicate that the Option | |||
Data may change en route. The rightmost five bits remain at 0x3(00011 ). | Data may change en route. The rightmost five bits remain at 0x3(00011 ). | |||
This ensures that a packet that leaves the RPL domain of an LLN (or t hat | This ensures that a packet that leaves the RPL domain of an LLN (or t hat | |||
leaves the LLN entirely) will not be discarded when it contains the R PL Option. | leaves the LLN entirely) will not be discarded when it contains the R PL Option. | |||
</t> | </t> | |||
<t> | <t> | |||
With the new Option Type, if an IPv6 (intermediate) node (RPL-not-capa | With the new Option Type, if an IPv6 (intermediate) node (RPL unaware) | |||
ble) receives a packet with a | receives a packet with a | |||
RPL Option, it should ignore the Hop-by-Hop RPL Option | RPL Option, it should ignore the Hop-by-Hop RPL Option | |||
(skip over this option and continue processing the header). This is re levant, as it was mentioned previously, in the case that | (skip over this option and continue processing the header). This is re levant, as it was mentioned previously, in the case that | |||
there is a flow from RAL to Internet (see <xref target="sm-Ral2i" />). | there is a flow from RAL to Internet (see <xref target="sm-Ral2i" form | |||
</t> | at="default"/>). | |||
<t> | </t> | |||
This is a significant update to <xref target="RFC6553"/>. | <t> | |||
</t> | This is a significant update to <xref target="RFC6553" format="defaul | |||
<t> | t"/>. | |||
<figure title="Revised Option Type in RPL Option. (*)represents this d | </t> | |||
ocument" anchor="fig_RPIOption_new" align="center"> | <table anchor="fig_RPIOption_new"> | |||
<artwork> <![CDATA[ | <name>Revised Option Type in RPL Option</name> | |||
+-------+-------------------+-------------+------------+ | <thead> | |||
| Hex | Binary Value | Description | Reference | | <tr> | |||
+ Value +-------------------+ + + | <th rowspan="2" colspan="1" align="center">Hex Value</th> | |||
| | act | chg | rest | | | | <th rowspan="1" colspan="3" align="center">Binary Value</th> | |||
+-------+-----+-----+-------+-------------+------------+ | <th rowspan="2" colspan="1" align="center">Description</th> | |||
| 0x23 | 00 | 1 | 00011 | RPL Option |[RFCXXXX](*)| | <th rowspan="2" colspan="1" align="center">Reference</th> | |||
+-------+-----+-----+-------+-------------+------------+ | </tr> | |||
]]></artwork></figure> | <tr> | |||
</t> | <th align="center">act</th> | |||
<t> | <th align="center">chg</th> | |||
Without the signaling described below, this change would otherwise c | <th align="center">rest</th> | |||
reate a lack of interoperation (flag day) for existing networks which are | </tr> | |||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td align="center">0x23</td> | ||||
<td align="center">00</td> | ||||
<td align="center">1</td> | ||||
<td align="center">00011</td> | ||||
<td align="center">RPL Option</td> | ||||
<td align="center">This document</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<t> | ||||
Without the signaling described below, this change would otherwise c | ||||
reate a lack of interoperation (flag day) for existing networks that are | ||||
currently using 0x63 as the RPI Option Type value. A move to 0x23 w ill not | currently using 0x63 as the RPI Option Type value. A move to 0x23 w ill not | |||
be understood by those networks. It is suggested that | be understood by those networks. It is suggested that | |||
RPL implementations accept both 0x63 and 0x23 when | RPL implementations accept both 0x63 and 0x23 when | |||
processing the header. | processing the header. | |||
</t> | </t> | |||
<t> | <t> | |||
When forwarding packets, implementations SHOULD use the same value o | When forwarding packets, implementations <bcp14>SHOULD</bcp14> use t | |||
f RPI Type | he same value of RPI Type | |||
as was received. This is required because the RPI Option Type does n ot change en route | as was received. This is required because the RPI Option Type does n ot change en route | |||
(<xref target="RFC8200"/> - Section 4.2). It allows the network to b e incrementally | (<xref target="RFC8200" section="4.2" sectionFormat="comma" format=" default"/>). It allows the network to be incrementally | |||
upgraded and allows the DODAG root to know which parts of the | upgraded and allows the DODAG root to know which parts of the | |||
network have been upgraded. | network have been upgraded. | |||
</t> | </t> | |||
<t> | <t> | |||
When originating new packets, | When originating new packets, | |||
implementations should have an option to determine which value to | implementations should have an option to determine which value to | |||
originate with, this option is controlled by the DIO Configuration o | originate with. This option is controlled by the DODAG Configuration | |||
ption (Section <xref target="update6550"/>). | option (<xref target="update6550" format="default"/>). | |||
</t> | </t> | |||
<!-- | <!-- [auth] | |||
A network which is switching from straight 6LoWPAN compression | A network which is switching from straight 6LoWPAN compression | |||
mechanism to those described in | mechanism to those described in | |||
<xref target="RFC8138" /> | <xref target="RFC8138" /> | |||
will experience a flag day in the data compression anyway, and if | will experience a flag day in the data compression anyway, and if | |||
possible this change can be deployed at the same time. | possible this change can be deployed at the same time. | |||
</t--> | </t--> | |||
<t> | <t> | |||
The change of RPI Option Type from 0x63 to 0x23, makes all | The change of RPI Option Type from 0x63 to 0x23 makes all nodes that a | |||
<xref target="RFC8200"/> Section 4.2 compliant nodes tolerant of the R | re compliant with | |||
PL artifacts. There | <xref target="RFC8200" section="4.2" sectionFormat="of" format="defaul | |||
t"/> tolerant of the RPL artifacts. There | ||||
is no longer a need to remove the artifacts when | is no longer a need to remove the artifacts when | |||
sending traffic to the Internet. This change clarifies when | sending traffic to the Internet. This change clarifies when | |||
to use IPv6-in-IPv6 headers, and how to address them: | to use IPv6-in-IPv6 headers and how to address them: | |||
The Hop-by-Hop Options header containing the RPI MUST always | the Hop-by-Hop Options header containing the RPI <bcp14>MUST</bcp14> a | |||
lways | ||||
be added when 6LRs originate packets (without IPv6-in-IPv6 | be added when 6LRs originate packets (without IPv6-in-IPv6 | |||
headers), and IPv6-in-IPv6 headers MUST always be added | headers), and IPv6-in-IPv6 headers <bcp14>MUST</bcp14> always be added | |||
when a 6LR finds that it needs to insert a Hop-by-Hop Options header | when a 6LR finds that it needs to insert a Hop-by-Hop Options header | |||
containing the RPL Option. The IPv6-in-IPv6 header is to | containing the RPL Option. The IPv6-in-IPv6 header is to | |||
be addressed to the | be addressed to the | |||
RPL root when on the way up, and to the end-host when on the way down. | RPL root when on the way up, and to the end host when on the way down. | |||
</t> | </t> | |||
<t> | <t> | |||
In the non-storing case, dealing with not-RPL aware leaf nodes | In the Non-Storing case, dealing with RPL-unaware leaf nodes | |||
is much easier as the 6LBR (DODAG root) has complete knowledge | is much easier as the 6LBR (DODAG root) has complete knowledge | |||
about the connectivity of all DODAG nodes, and all traffic flows | about the connectivity of all DODAG nodes, and all traffic flows | |||
through the root node. | through the root node. | |||
</t> | </t> | |||
<t> | <t> | |||
The 6LBR can recognize not-RPL aware leaf nodes because it will | The 6LBR can recognize RPL-unaware leaf nodes because it will | |||
receive a DAO about that node from the 6LR immediately above that | receive a DAO about that node from the 6LR immediately above that | |||
not-RPL aware node. | RPL-unaware node. | |||
</t> | </t> | |||
<t> | <t> | |||
The non-storing mode case does not require the type change from | The Non-Storing mode case does not require the Type change from | |||
0x63 to 0x23, as the root can always create the right packet. | 0x63 to 0x23, as the root can always create the right packet. | |||
The type change does not adversely affect the non-storing case.(see < xref target="update6550"/>) | The Type change does not adversely affect the Non-Storing case (see < xref target="update6550" format="default"/>). | |||
</t> | </t> | |||
<!-- [auth] <t> | ||||
<!-- <t> | ||||
In general, any packet that leaves the RPL domain | In general, any packet that leaves the RPL domain | |||
of an LLN (or leaves the LLN entirely) will NOT be discarded, when it has the <xref target="RFC6553" /> RPL Option | of an LLN (or leaves the LLN entirely) will NOT be discarded, when it has the <xref target="RFC6553" /> RPL Option | |||
Header known as the RPI or <xref target="RFC6554" /> RH33 Extension He ader (S)RH3. | Header known as the RPI or <xref target="RFC6554" /> RH33 Extension He ader (S)RH3. | |||
Because of <xref target="RFC8200"/> the RPI Hop-by-Hop option | Because of <xref target="RFC8200"/> the RPI Hop-by-Hop option | |||
MAY be left in place even if the end host does not | <bcp14>MAY</bcp14> be left in place even if the end host does not | |||
understand it. | understand it. | |||
</t> | </t> | |||
--> | --> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="Updates to RFC8138: Indicating the way to decompress wit | <name>Updates to RFC 8138: Indicating the Way to Decompress with the New | |||
h the new RPI Option Type."> | RPI Option Type</name> | |||
<t> | <t> | |||
This modification is required in order to be able to decompress the RP L Option | This modification is required in order to be able to decompress the RP L Option | |||
with the new Option Type of 0x23. | with the new Option Type of 0x23. | |||
</t> | </t> | |||
<t> | <t> | |||
RPI-6LoRH header provides a compressed form for the RPL RPI; see | The RPI-6LoRH header provides a compressed form for the RPL RPI; see | |||
<xref target="RFC8138"/>, Section 6. A node that is decompressing th | <xref target="RFC8138" section="6" sectionFormat="comma" format="def | |||
is header | ault"/>. A node that is decompressing this header | |||
MUST decompress using the RPI Option Type that is currently active: | <bcp14>MUST</bcp14> decompress using the RPI Option Type that is cur | |||
that | rently active, that | |||
is, a choice between 0x23 (new) and 0x63 (old). The node will know | is, a choice between 0x23 (new) and 0x63 (old). The node will know w | |||
which to | hich to | |||
use based upon the presence of the flag in the DODAG Configuration o ption defined in | use based upon the presence of the flag in the DODAG Configuration o ption defined in | |||
<xref target="update6550" />. E.g. If the network is in 0x23 mode (b y DIO option), | <xref target="update6550" format="default"/>. For example, if the ne twork is in 0x23 mode (by DIO option), | |||
then it should be decompressed to 0x23. | then it should be decompressed to 0x23. | |||
</t> | </t> | |||
<t> | <t> | |||
<xref target="RFC8138" /> section 7 documents how to compress | <xref target="RFC8138" section="7" sectionFormat="of" format="default" /> documents how to compress | |||
the IPv6-in-IPv6 header. | the IPv6-in-IPv6 header. | |||
</t> | </t> | |||
<t> | <t> | |||
There are potential significant advantages to having a single | There are potential significant advantages to having a single | |||
code path that always processes IPv6-in-IPv6 headers with no | code path that always processes IPv6-in-IPv6 headers with no | |||
conditional branches. | conditional branches. | |||
</t> | </t> | |||
<t> | <t> | |||
In Storing Mode, the scenarios where the flow goes from RAL to RUL a | In Storing mode, the scenarios where the flow goes from RAL to RUL a | |||
nd RUL | nd RUL | |||
to RUL include compression of the IPv6-in-IPv6 and RPI headers. The | to RUL include compression of the IPv6-in-IPv6 and RPI headers. Th | |||
use | e | |||
of the IPv6-in-IPv6 header is MANDATORY in this case, and | IPv6-in-IPv6 header <bcp14>MUST</bcp14> be used in this case, and | |||
it SHOULD be compressed with <xref target="RFC8138"/> section 7. | it <bcp14>SHOULD</bcp14> be compressed as specified in | |||
<xref target="rtghc"/> | <xref target="RFC8138" section="7" sectionFormat="comma" format="def | |||
ault"/>. | ||||
<xref target="rtghc" format="default"/> | ||||
illustrates the case in Storing mode where the packet is received f rom the Internet, then the | illustrates the case in Storing mode where the packet is received f rom the Internet, then the | |||
root encapsulates the packet to insert the RPI. In that example, | root encapsulates the packet to insert the RPI. In that example, | |||
the leaf is not known to support RFC 8138, and the packet is | the leaf is not known to support RFC 8138, and the packet is | |||
encapsulated to the 6LR that is the parent and last hop to the | encapsulated to the 6LR that is the parent and last hop to the | |||
final destination. | final destination. | |||
</t> | </t> | |||
<figure title="RPI Inserted by the Root in Storing Mode" anchor="rtghc"> | <figure anchor="rtghc"> | |||
<artwork><![CDATA[ | <name>RPI Inserted by the Root in Storing Mode</name> | |||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
+-+ ... -+-+ ... +-+- ... -+-+- +-+-+-+ ... +-+-+ ... -+++ ... +-... | +-+ ... -+-+ ... +-+- ... -+-+- +-+-+-+ ... +-+-+ ... -+++ ... +-... | |||
|11110001|SRH-6LoRH| RPI- |IP-in-IP| NH=1 |11110CPP| UDP | UDP | |11110001|SRH-6LoRH| RPI- |IP-in-IP| NH=1 |11110CPP| UDP | UDP | |||
|Page 1 |Type1 S=0| 6LoRH |6LoRH |LOWPAN_IPHC| UDP | hdr |Payld | |Page 1 |Type1 S=0| 6LoRH |6LoRH |LOWPAN_IPHC| UDP | hdr |Payld | |||
+-+ ... -+-+ ... +-+- ... -+-+-.+-+-+-+-+ ... +-+-+ ... -+ ... +-... | +-+ ... -+-+ ... +-+- ... -+-+-.+-+-+-+-+ ... +-+-+ ... -+ ... +-... | |||
<-4bytes-> <- RFC 6282 -> | <-4bytes-> <- RFC 6282 -> | |||
No RPL artifact | No RPL artifact | |||
]]></artwork></figure> | ]]></artwork> | |||
</figure> | ||||
<t> | <t> | |||
In <xref target="rtghc"/>, the source of the IPv6-in-IPv6 encapsulatio | In <xref target="rtghc" format="default"/>, the source of the IPv6-in- | |||
n is | IPv6 encapsulation is | |||
the Root, so it is elided in the IP-in-IP 6LoRH. The destination is | the root, so it is elided in the IP-in-IP 6LoRH. The destination is | |||
the parent 6LR of the destination of the inner packet so it cannot be | the parent 6LR of the destination of the inner packet so it cannot be | |||
elided. It is placed as the single entry in an SRH-6LoRH as the first | elided. It is placed as the single entry in a Source Route Header 6LoR | |||
6LoRH. There is a single entry so the SRH-6LoRH Size is 0. In that | H (SRH-6LoRH) as the first | |||
example, the type is 1 so the 6LR address is compressed to 2 bytes. | 6LoRH. There is a single entry so the SRH-6LoRH Size is zero. In that | |||
It results that the total length of the SRH-6LoRH is 4 bytes. | example, the Type is 1 so the 6LR address is compressed to two bytes. | |||
Follows the RPI-6LoRH and then the IP-in-IP 6LoRH. When the | This results in the total length of the SRH-6LoRH being four bytes. | |||
The RPI-6LoRH and then the IP-in-IP 6LoRH follow. When the | ||||
IP-in-IP 6LoRH is removed, all the router headers that precede it are | IP-in-IP 6LoRH is removed, all the router headers that precede it are | |||
also removed. | also removed. | |||
The Paging Dispatch <xref target="RFC8025"/> may also be removed if | The Paging Dispatch <xref target="RFC8025" format="default"/> may also be removed if | |||
there was no previous Page change to a Page other than 0 or 1, since | there was no previous Page change to a Page other than 0 or 1, since | |||
and in Page 1. The resulting packet to the destination is the inner | and in Page 1. The resulting packet to the destination is the inner | |||
packet compressed with <xref target="RFC6282"/>. | packet compressed with <xref target="RFC6282" format="default"/>. | |||
</t> | </t> | |||
</section> | ||||
</section> | </section> | |||
</section> | <section anchor="sec_ref_topo" numbered="true" toc="default"> | |||
<name>Reference Topology</name> | ||||
<section title="Sample/reference topology"> | <t> | |||
<t> | ||||
A RPL network in general is composed of a 6LBR, | A RPL network in general is composed of a 6LBR, | |||
a Backbone Router (6BBR), a 6LR and a 6LN as a leaf logically or | a Backbone Router (6BBR), a 6LR, and a 6LN as a leaf logically o | |||
ganized in a DODAG structure. | rganized in a DODAG structure. | |||
</t> | </t> | |||
<t> | <t> | |||
<xref target="fig_CommonTopology"/> shows the reference RPL Topol | <xref target="fig_CommonTopology" format="default"/> shows the re | |||
ogy for this document. The | ference RPL topology for this document. The | |||
letters above the nodes are there so that | nodes are labeled with letters so that | |||
they may be referenced in subsequent sections. In the figure, | they may be referenced in subsequent sections. In the figure, | |||
6LR represents a full router node. | 6LR represents a full router node. | |||
The 6LN is a RPL aware router, or host (as a leaf). | The 6LN is a RPL-aware router or host (as a leaf). | |||
Additionally, for simplification purposes, | Additionally, for simplification purposes, | |||
it is supposed that the 6LBR has direct access to Internet and is the root of the DODAG, thus the 6BBR | it is supposed that the 6LBR has direct access to Internet and is the root of the DODAG, thus the 6BBR | |||
is not present in the figure. | is not present in the figure. | |||
</t> | </t> | |||
<t> | ||||
<t> | The 6LN leaves marked as RAL (F, H, and I) are RPL nodes with no chi | |||
The 6LN leaves (RAL) | ldren hosts. | |||
marked as (F, H and I) are RPL nodes with no children hosts. | </t> | |||
</t> | <t> | |||
<t> | ||||
The leaves marked as RUL (G and J) are | The leaves marked as RUL (G and J) are | |||
devices that do not speak RPL at all (not-RPL-aware), | devices that do not speak RPL at all (RPL unaware), | |||
but use Router-Advertisements, 6LowPAN DAR/DAC and | but use Router Advertisements, 6LoWPAN Duplicate Address Request and | |||
6LoWPAN ND only to participate in the network <xref target="RFC8505" | Duplicate Address Confirmation (DAR/DAC), and | |||
/>. | 6LoWPAN Neighbor Discovery (ND) only to participate in the network < | |||
In the document these leaves (G and J) are also referred to as | xref target="RFC8505" format="default"/>. | |||
In the document, these leaves (G and J) are also referred to as | ||||
a RUL. | a RUL. | |||
</t> | </t> | |||
<t> | <t> | |||
The 6LBR ("A") in the figure is the root of the Global DODAG. | The 6LBR (A) in the figure is the root of the Global DODAG. | |||
</t> | </t> | |||
<t> | <figure anchor="fig_CommonTopology"> | |||
<figure title="A reference RPL Topology." anchor="fig_CommonTopolog | <name>A Reference RPL Topology</name> | |||
y" align="center"> | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
<artwork><![CDATA[ | ||||
+------------+ | +------------+ | |||
| INTERNET ----------+ | | INTERNET ----------+ | |||
| | | | | | | | |||
+------------+ | | +------------+ | | |||
| | | | |||
| | | | |||
| | | | |||
A | | A | | |||
+-------+ | +-------+ | |||
|6LBR | | |6LBR | | |||
skipping to change at line 790 ¶ | skipping to change at line 792 ¶ | |||
| | | | | | | | | | | | |||
| | +--+ | | | | | +--+ | | | |||
| | | | | | | | | | | | |||
| | | | | | | | | | | | |||
| | | I | J | | | | | I | J | | |||
F | | G | H | | | F | | G | H | | | |||
+-----+-+ +-|-----+ +---|--+ +---|---+ +---|---+ | +-----+-+ +-|-----+ +---|--+ +---|---+ +---|---+ | |||
| RAL | | RUL | | RAL | | RAL | | RUL | | | RAL | | RUL | | RAL | | RAL | | RUL | | |||
| 6LN | | 6LN | | 6LN | | 6LN | | 6LN | | | 6LN | | 6LN | | 6LN | | 6LN | | 6LN | | |||
+-------+ +-------+ +------+ +-------+ +-------+ | +-------+ +-------+ +------+ +-------+ +-------+ | |||
]]> | ]]></artwork> | |||
</artwork></figure> | </figure> | |||
</t> | </section> | |||
<section anchor="sec_use_cases" numbered="true" toc="default"> | ||||
</section> | <name>Use Cases</name> | |||
<t> | ||||
<section title="Use cases"> | In the data plane, a combination of RFC 6553, RFC 6554, and | |||
<t> | ||||
In the data plane a combination of RFC6553, RFC6554 and | ||||
IPv6-in-IPv6 encapsulation are going to be analyzed for a number of | IPv6-in-IPv6 encapsulation are going to be analyzed for a number of | |||
representative traffic flows. | representative traffic flows. | |||
</t> | </t> | |||
<t> | <t> | |||
The use cases describe the communication in the following cases: | The use cases describe the communication in the following cases: | |||
- Between RPL-aware-nodes with the root (6LBR) | </t> | |||
- Between RPL-aware-nodes with the Internet | <ul> | |||
- Between RUL nodes within the LLN (e.g. see <xref target="sm-nRal2roo | <li>Between RPL-aware nodes with the root (6LBR)</li> | |||
t" />) | <li>Between RPL-aware nodes with the Internet</li> | |||
- Inside of the LLN when the final destination address resides outside | <li>Between RUL nodes within the LLN (e.g., see <xref target="sm-nRal2 | |||
of the LLN (e.g. see <xref target="sm-nRal2i" />). | root" format="default"/>)</li> | |||
</t> | <li>Inside of the LLN when the final destination address resides outsi | |||
<t> | de | |||
of the LLN (e.g., see <xref target="sm-nRal2i" format="default"/>)</ | ||||
li> | ||||
</ul> | ||||
<t> | ||||
The use cases are as follows: | The use cases are as follows: | |||
</t> | </t> | |||
<t> | <ul empty="true" spacing="normal"> | |||
Interaction between Leaf and Root: | <li><t> | |||
</t> | Interaction between leaf and root: | |||
<t> | </t> | |||
<list> | <ul empty="true" spacing="normal"> | |||
<t> | <li> | |||
RAL to root | RAL to root | |||
</t> | </li> | |||
<t> | <li> | |||
root to RAL | root to RAL | |||
</t> | </li> | |||
<t> | <li> | |||
RUL to root | RUL to root | |||
</t> | </li> | |||
<t> | <li> | |||
root to RUL | root to RUL | |||
</t> | </li> | |||
</list> | </ul></li> | |||
</t> | <li><t> | |||
<t> | Interaction between leaf and Internet: | |||
Interaction between Leaf and Internet: | </t> | |||
</t> | <ul empty="true" spacing="normal"> | |||
<t> | <li> | |||
<list> | ||||
<t> | ||||
RAL to Internet | RAL to Internet | |||
</t> | </li> | |||
<t> | <li> | |||
Internet to RAL | Internet to RAL | |||
</t> | </li> | |||
<t> | <li> | |||
RUL to Internet | RUL to Internet | |||
</t> | </li> | |||
<t> | <li> | |||
Internet to RUL | Internet to RUL | |||
</t> | </li> | |||
</list> | </ul></li> | |||
</t> | <li> <t> | |||
<t> | ||||
Interaction between leaves: | Interaction between leaves: | |||
</t> | </t> | |||
<t> | <ul empty="true" spacing="normal"> | |||
<list> | <li> | |||
<t> | ||||
RAL to RAL | RAL to RAL | |||
</t> | </li> | |||
<t> | <li> | |||
RAL to RUL | RAL to RUL | |||
</t> | </li> | |||
<t> | <li> | |||
RUL to RAL | RUL to RAL | |||
</t> | </li> | |||
<t> | <li> | |||
RUL to RUL | RUL to RUL | |||
</t> | </li> | |||
</list> | </ul></li> | |||
</t> | </ul> | |||
<t> | <t> | |||
This document is consistent with the rule that a Header cannot be | This document is consistent with the rule that a header cannot be | |||
inserted or removed on the fly inside an IPv6 packet that is | inserted or removed on the fly inside an IPv6 packet that is | |||
being routed. | being routed. | |||
This is a fundamental precept of the IPv6 architecture as | This is a fundamental precept of the IPv6 architecture as | |||
outlined in <xref target="RFC8200" />. | outlined in <xref target="RFC8200" format="default"/>. | |||
</t> | </t> | |||
<!-- | <!-- [auth] | |||
<t> | <t> | |||
However, unlike <xref target="RFC6553" />, the Hop-by-Hop Option | However, unlike <xref target="RFC6553" />, the Hop-by-Hop Option | |||
Header used for the RPI artifact has the first two bits set to | Header used for the RPI artifact has the first two bits set to | |||
'00'. | '00'. | |||
This means that the RPI artifact will be ignored when received by a host | This means that the RPI artifact will be ignored when received by a host | |||
or router that does not understand that option | or router that does not understand that option | |||
( Section 4.2 <xref target="RFC8200" />). | ( Section 4.2 <xref target="RFC8200" />). | |||
</t> | </t> | |||
<t> | <t> | |||
This means that when the no-drop RPI option code 0x23 is used, a | This means that when the no-drop RPI option code 0x23 is used, a | |||
skipping to change at line 903 ¶ | skipping to change at line 901 ¶ | |||
</t> | </t> | |||
<t> | <t> | |||
NOTE: No clear attack has been described when the RPI information is released to the Internet. | NOTE: No clear attack has been described when the RPI information is released to the Internet. | |||
At a minimum, it is clear that the RPI option would waste some netwo rk bandwidth when it escapes. | At a minimum, it is clear that the RPI option would waste some netwo rk bandwidth when it escapes. | |||
This is traded off against the savings in the LLN by not having to e ncapsulate the packet | This is traded off against the savings in the LLN by not having to e ncapsulate the packet | |||
in order to remove the artifact. Please check the Security Considera tions sections | in order to remove the artifact. Please check the Security Considera tions sections | |||
<xref target="Security"/> for further details. | <xref target="Security"/> for further details. | |||
</t> | </t> | |||
--> | --> | |||
<t> | <t> | |||
As the rank information in the RPI artifact is changed at each | As the Rank information in the RPI artifact is changed at each | |||
hop, it will typically be zero when it arrives at the DODAG | hop, it will typically be zero when it arrives at the DODAG | |||
root. The DODAG root MUST force it to zero when passing the | root. The DODAG root <bcp14>MUST</bcp14> force it to zero when pass ing the | |||
packet out to the Internet. The Internet will therefore not see | packet out to the Internet. The Internet will therefore not see | |||
any SenderRank information. | any SenderRank information. | |||
</t> | </t> | |||
<t> | <t> | |||
Despite being legal to leave the RPI artifact in place, | Despite being legal to leave the RPI artifact in place, | |||
an intermediate router that needs to add an extension header | an intermediate router that needs to add an extension header | |||
(e.g. RH3 or RPL Option) MUST still encapsulate the packet in an | (e.g., RH3 or RPL Option) <bcp14>MUST</bcp14> still encapsulate the packet in an | |||
(additional) outer IP header. The new header is placed after | (additional) outer IP header. The new header is placed after | |||
this new outer IP header. | this new outer IP header. | |||
</t> | </t> | |||
<t> | <t> | |||
A corollary is that an | A corollary is that an | |||
intermediate router can remove an RH3 or RPL Option only | intermediate router can remove an RH3 or RPL Option only | |||
if it is placed in an encapsulating IPv6 | if it is placed in an encapsulating IPv6 | |||
Header that is addressed TO this intermediate router. | header that is addressed <em>to</em> this intermediate router. | |||
When doing the above, the whole encapsulating header must be | When doing the above, the whole encapsulating header must be | |||
removed. (A replacement may be added). This sometimes can | removed. (A replacement may be added.) | |||
result in outer IP headers being addressed to the next hop | </t> | |||
router using link-local address. | <t> | |||
</t> | ||||
<t> | ||||
Both the RPL Option and the RH3 headers may be modified in very spec ific ways | Both the RPL Option and the RH3 headers may be modified in very spec ific ways | |||
by routers on the path of the packet without the need to add and | by routers on the path of the packet without the need to add and | |||
remove an encapsulating header. Both headers were designed with | remove an encapsulating header. Both headers were designed with | |||
this modification in | this modification in | |||
mind, and both the RPL RH3 and the RPL Option are marked mutable | mind, and both the RPL RH3 and the RPL Option are marked mutable | |||
but recoverable: so an IPsec AH security header can be applied | but recoverable: so an IPsec Authentication Header (AH) can be appli | |||
across these headers, but it can not secure the values which mutate. | ed | |||
</t> | across these headers, but it cannot secure the values that mutate. | |||
</t> | ||||
<t> | <t> | |||
The RPI MUST be present in every single RPL data packet. | The RPI <bcp14>MUST</bcp14> be present in every single RPL data pack | |||
</t> | et. | |||
</t> | ||||
<t> | <t> | |||
Prior to <xref target="RFC8138" />, there was significant | Prior to <xref target="RFC8138" format="default"/>, there was signif | |||
interest in creating an exception to this rule and removing the RPI | icant | |||
for downward flows in non-storing | interest in creating an exception to this rule and removing the RPI | |||
for Downward flows in Non-Storing | ||||
mode. This exception covered a very small number of cases, and | mode. This exception covered a very small number of cases, and | |||
caused significant interoperability challenges while adding | caused significant interoperability challenges while adding | |||
significant interest in the code and tests. The ability to compress | significant interest in the code and tests. The ability to compress | |||
the RPI down to three bytes or less removes much of the pressure | the RPI down to three bytes or less removes much of the pressure | |||
to optimize this any further <xref target="I-D.ietf-anima-autonomic- | to optimize this any further. | |||
control-plane" />. | </t> | |||
</t> | <t> | |||
<t> | Throughout the following subsections, the examples are described in | |||
Throughout the following subsections, the examples are described in | more detail in the first subsections, | |||
more details in the first subsections, | ||||
and more concisely in the later ones. | and more concisely in the later ones. | |||
</t> | </t> | |||
<t> | ||||
<t> | The use cases are delineated based on the following IPV6 and RPL m | |||
The uses cases are delineated based on the following IPV6 and RPL | andates: | |||
mandates: | </t> | |||
</t> | <ul empty="true" spacing="normal"> | |||
<t> | <li> | |||
<list> | <t>The RPI has to be in every packet that traverses the LLN.</t> | |||
<t> | <ul spacing="normal"> | |||
The RPI has to be in every packet that traverses the LLN. | <li> | |||
</t> | Because of the above requirement, packets from the Internet have | |||
<t> | to be encapsulated. | |||
- Because of the above requirement, packets from the Internet h | </li> | |||
ave to be encapsulated. | <li> | |||
</t> | A header cannot be inserted or removed on the fly inside an IPv6 | |||
<t> | packet that is being routed. | |||
- A Header cannot be inserted or removed on the fly inside an IP | </li> | |||
v6 packet that is being routed. | <li> | |||
</t> | Extension headers may not be added or removed except by the send | |||
<t> | er or the receiver. | |||
- Extension headers may not be added or removed except by the se | </li> | |||
nder or the receiver. | <li> | |||
</t> | RPI and RH3 headers may be modified by routers on the path of th | |||
<t> | e packet without the need to add and remove an encapsulating header. | |||
- RPI and RH3 headers may be modified by routers on the path of | </li> | |||
the packet without the need to add and remove an encapsulating header. | <li> | |||
</t> | An RH3 or RPL Option can only be removed by an intermediate rout | |||
<t> | er if it is placed in an encapsulating IPv6 header, which is addressed to the in | |||
- an RH3 or RPL Option can only be removed by an intermediate ro | termediate router. | |||
uter if it is placed in an encapsulating IPv6 Header, which is addressed to the | </li> | |||
intermediate router. | <li> | |||
</t> | The Non-Storing mode requires downstream encapsulation by the ro | |||
<t> | ot for RH3. | |||
- Non-storing mode requires downstream encapsulation by root for | </li> | |||
RH3. | </ul> | |||
</t> | </li> | |||
</list> | </ul> | |||
</t> | <t> | |||
The use cases are delineated based on the following assumptions: | ||||
<t> | </t> | |||
The uses cases are delineated based on the following assumptions: | <ul empty="true" spacing="normal"> | |||
</t> | <li> | |||
<t> | <t>This document assumes that the LLN is using the no-drop RPI Op | |||
<list> | tion Type (0x23).</t> | |||
<t> | <ul spacing="normal"> | |||
This document assumes that the LLN is using the no-drop RPI Optio | <li> | |||
n Type (0x23). | Each IPv6 node (including Internet routers) obeys <xref target=" | |||
</t> | RFC8200" format="default"/>, so that the 0x23 RPI Option Type can be safely inse | |||
<t> | rted. | |||
- Each IPv6 node (including Internet routers) obeys <xref target | </li> | |||
="RFC8200"/>, so that 0x23 RPI Option Type can be safely inserted. | <li> | |||
</t> | All 6LRs obey <xref target="RFC8200" format="default"/>. | |||
<t> | </li> | |||
- All 6LRs obey <xref target="RFC8200"/>. | <li> | |||
</t> | The RPI is ignored at the IPv6 destination (dst) node (RUL). | |||
<t> | </li> | |||
- The RPI is ignored at the IPv6 dst node (RUL). | <li> | |||
</t> | In the use cases, we assume that the RAL supports IP-in-IP encap | |||
<t> | sulation. | |||
- In the uses cases, we assume that the RAL supports IP-in-IP en | </li> | |||
capsulation. | <li> | |||
</t> | In the use cases, we don't assume that the RUL supports IP-in-IP | |||
<t> | encapsulation. | |||
- In the uses cases, we don't assume that the RUL supports IP-in | </li> | |||
-IP encapsulation. | <li> | |||
</t> | For traffic leaving a RUL, if the RUL adds an opaque RPI, then t | |||
<t> | he 6LR as a RPL Border Router <bcp14>SHOULD</bcp14> rewrite | |||
- For traffic leaving a RUL, if the RUL adds an opaque RPI then | ||||
the 6LR as a RPL border router SHOULD rewrite | ||||
the RPI to indicate the selected Instance and set the flags. | the RPI to indicate the selected Instance and set the flags. | |||
</t> | </li> | |||
<t> | <li> | |||
- The description for RALs applies to RAN in general. | The description for RALs applies to RAN in general. | |||
</t> | </li> | |||
<t> | <li> | |||
- Non-constrained uses of RPL are not in scope of this document. | Unconstrained uses of RPL are not in scope of this document. | |||
</t> | </li> | |||
<t> | <li> | |||
- Compression is based on <xref target="RFC8138"/>. | Compression is based on <xref target="RFC8138" format="default"/> | |||
</t> | . | |||
<t> | </li> | |||
- The flow label <xref target="RFC6437"/> is not needed in RPL. | <li> | |||
</t> | The flow label <xref target="RFC6437" format="default"/> is not n | |||
</list> | eeded in RPL. | |||
</t> | </li> | |||
</section> | </ul> | |||
</li> | ||||
<section title="Storing mode"> | </ul> | |||
</section> | ||||
<t> | <section anchor="sec_sm" numbered="true" toc="default"> | |||
In storing mode (SM) (fully stateful), the sender can determine | <name>Storing Mode</name> | |||
if | <t> | |||
In Storing mode (SM) (fully stateful), the sender can determine | ||||
if | ||||
the destination is inside the LLN by | the destination is inside the LLN by | |||
looking if the destination address is matched by the DIO's Prefix In formation Option (PIO) option. | looking if the destination address is matched by the DIO's Prefix In formation Option (PIO) option. | |||
</t> | </t> | |||
<t> | <t> | |||
The following table (<xref target="fig_EncStoMode"/>) itemizes which | <xref target="fig_EncStoMode" format="default"/> itemizes which head | |||
headers are needed in each of the following scenarios. | ers are needed in each of the following scenarios. | |||
It indicates whether an IPv6-in-IPv6 header must be added and what d | It indicates whether an IPv6-in-IPv6 header must be added and to whi | |||
estination it must be addressed to: | ch destination it must be addressed: | |||
(1) the final destination (the RAL node that is the target (tgt)), | </t> | |||
(2) the "root", | <ol> | |||
or (3) the 6LR parent of a RUL. | <li> the final destination (the RAL node that is the target (tgt)),</ | |||
</t> | li> | |||
<t> | <li> the "root", or </li> | |||
<li>the 6LR parent of a RUL.</li> | ||||
</ol> | ||||
<t> | ||||
In cases where no IPv6-in-IPv6 header is needed, the column states " No", and the destination is N/A (Not Applicable). | In cases where no IPv6-in-IPv6 header is needed, the column states " No", and the destination is N/A (Not Applicable). | |||
If the IPv6-in-IPv6 header is needed, the column shows "must". | If the IPv6-in-IPv6 header is needed, the column shows "must". | |||
</t> | </t> | |||
<t> | <t> | |||
In all cases, the RPI is needed, since it identifies | In all cases, the RPI is needed, since it identifies | |||
inconsistencies (loops) in the routing topology. | inconsistencies (loops) in the routing topology. | |||
In general, the RH3 is not needed because it is not used in storing | In general, the RH3 is not needed because it is not used in Storing | |||
mode. However, there is one scenario (from the root to the RUL in SM) | mode. However, there is one scenario (from the root to the RUL in SM) | |||
where the RH3 can be used to point at the RUL (<xref target="Storing | where the RH3 can be used to point at the RUL (<xref target="Storing | |||
-root2notrplnoIPIP"/>). | -root2notrplnoIPIP" format="default"/>). | |||
</t> | </t> | |||
<t> | <t> | |||
The leaf can be a router 6LR or a host, both indicated as 6LN. The r oot refers to the 6LBR | The leaf can be a router 6LR or a host, both indicated as 6LN. The r oot refers to the 6LBR | |||
(see <xref target="fig_CommonTopology" />). | (see <xref target="fig_CommonTopology" format="default"/>). | |||
</t> | </t> | |||
<t> | <table anchor="fig_EncStoMode"> | |||
<figure title="Table of IPv6-in-IPv6 encapsulation in Storing mode." anch | <name>IPv6-in-IPv6 Encapsulation in Storing Mode</name> | |||
or="fig_EncStoMode" align="center"> | <thead> | |||
<artwork><![CDATA[ | <tr> | |||
+---------------------+--------------+------------+----------------+ | <th align="center">Interaction between</th> | |||
| Interaction between | Use Case |IPv6-in-IPv6|IPv6-in-IPv6 dst| | <th align="center">Use Case</th> | |||
+---------------------+--------------+------------+----------------+ | <th align="center">IPv6-in-IPv6</th> | |||
| | RAL to root | No | N/A | | <th align="center">IPv6-in-IPv6 dst</th> | |||
+ +--------------+------------+----------------+ | </tr> | |||
| Leaf - Root | root to RAL | No | N/A | | </thead> | |||
+ +--------------+------------+----------------+ | <tbody> | |||
| | root to RUL | must | 6LR | | <tr> | |||
+ +--------------+------------+----------------+ | <th align="center" rowspan="4">Leaf - Root</th> | |||
| | RUL to root | must | root | | <td align="center">RAL to root</td> | |||
+---------------------+--------------+------------+----------------+ | <td align="center">No</td> | |||
| | RAL to Int | may | root | | <td align="center">N/A</td> | |||
+ +--------------+------------+----------------+ | </tr> | |||
| Leaf - Internet | Int to RAL | must | RAL (tgt) | | <tr> | |||
+ +--------------+------------+----------------+ | <td align="center">root to RAL</td> | |||
| | RUL to Int | must | root | | <td align="center">No</td> | |||
+ +--------------+------------+----------------+ | <td align="center">N/A</td> | |||
| | Int to RUL | must | 6LR | | </tr> | |||
+---------------------+--------------+------------+----------------+ | <tr> | |||
| | RAL to RAL | No | N/A | | <td align="center">root to RUL</td> | |||
| Leaf - Leaf +--------------+------------+----------------+ | <td align="center">must</td> | |||
| | RAL to RUL | No(up) | N/A | | <td align="center">6LR</td> | |||
| + +------------+----------------+ | </tr> | |||
| | | must(down) | 6LR | | <tr> | |||
| +--------------+------------+----------------+ | <td align="center">RUL to root</td> | |||
| | RUL to RAL | must(up) | root | | <td align="center">must</td> | |||
| | +------------+----------------+ | <td align="center">root</td> | |||
| | | must(down) | RAL | | </tr> | |||
| +--------------+------------+----------------+ | <tr> | |||
| | RUL to RUL | must(up) | root | | <th align="center" rowspan="4">Leaf - Internet</th> | |||
| | +------------+----------------+ | <td align="center">RAL to Int</td> | |||
| | | must(down) | 6LR | | <td align="center">may</td> | |||
|---------------------+--------------+------------+----------------+ | <td align="center">root</td> | |||
]]></artwork></figure> | </tr> | |||
</t> | <tr> | |||
<section title="Storing Mode: Interaction between Leaf and Root"> | <td align="center">Int to RAL</td> | |||
<td align="center">must</td> | ||||
<t> | <td align="center">RAL (tgt)</td> | |||
In this section is described the communication flow | </tr> | |||
in storing mode (SM) between, | <tr> | |||
</t> | <td align="center">RUL to Int</td> | |||
<t> | <td align="center">must</td> | |||
<list> | <td align="center">root</td> | |||
<t> | </tr> | |||
<tr> | ||||
<td align="center">Int to RUL</td> | ||||
<td align="center">must</td> | ||||
<td align="center">6LR</td> | ||||
</tr> | ||||
<tr> | ||||
<th align="center" rowspan="7">Leaf - Leaf</th> | ||||
<td align="center">RAL to RAL</td> | ||||
<td align="center">No</td> | ||||
<td align="center">N/A</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="center" rowspan="2">RAL to RUL</td> | ||||
<td align="center">No(up)</td> | ||||
<td align="center">N/A</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="center">must(down)</td> | ||||
<td align="center">6LR</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="center" rowspan="2">RUL to RAL</td> | ||||
<td align="center">must(up)</td> | ||||
<td align="center">root</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="center">must(down)</td> | ||||
<td align="center">RAL</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="center" rowspan="2">RUL to RUL</td> | ||||
<td align="center">must(up)</td> | ||||
<td align="center">root</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="center">must(down)</td> | ||||
<td align="center">6LR</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<section numbered="true" toc="default"> | ||||
<name>Storing Mode: Interaction between Leaf and Root</name> | ||||
<t> | ||||
This section describes the communication flow | ||||
in Storing mode (SM) between the following: | ||||
</t> | ||||
<ul empty="true" spacing="normal"> | ||||
<li> | ||||
RAL to root | RAL to root | |||
</t> | </li> | |||
<t> | <li> | |||
root to RAL | root to RAL | |||
</t> | </li> | |||
<t> | <li> | |||
RUL to root | RUL to root | |||
</t> | </li> | |||
<t> | <li> | |||
root to RUL | root to RUL | |||
</t> | </li> | |||
</list> | </ul> | |||
</t> | <section numbered="true" toc="default"> | |||
<!-- 5.1. Example of Flow from RAL to root !--> | <name>SM: Example of Flow from RAL to Root</name> | |||
<section title="SM: Example of Flow from RAL to Root"> | <t> | |||
In Storing mode, RPI <xref target="RFC6553" format="defa | ||||
<t> | ult"/> is used | |||
In storing mode, RFC 6553 (RPI) is used | to send the RPLInstanceID and Rank | |||
to send RPL Information instanceID and rank | ||||
information. | information. | |||
</t> | </t> | |||
<t> | <t> | |||
In this case the flow comprises: | In this case, the flow comprises: | |||
</t> | </t> | |||
<t> | <t> | |||
RAL (6LN) --> 6LR_i --> root(6LBR) | RAL (6LN) --> 6LR_i --> root (6LBR) | |||
</t> | </t> | |||
<t> | <t> | |||
For example, a communication flow could be: Node F (6LN) | For example, a communication flow could be: | |||
--> Node D (6LR_i) --> Node B (6LR_i)--> Node A root(6LBR) | Node F (6LN) --> Node D (6LR_i) --> Node B (6LR_i) --> Node A root (6LB | |||
</t> | R) | |||
<t> | </t> | |||
<t> | ||||
The RAL (Node F) inserts the RPI, and sends the | The RAL (Node F) inserts the RPI, and sends the | |||
packet to 6LR (Node D) which decrements the rank in t he RPI and | packet to the 6LR (Node D), which decrements the Rank in the RPI and | |||
sends the packet up. When the packet arrives at | sends the packet up. When the packet arrives at | |||
6LBR (Node A), the RPI is removed and the packet is | the 6LBR (Node A), the RPI is removed and the packet is | |||
processed. | processed. | |||
</t> | </t> | |||
<t> | <t> | |||
No IPv6-in-IPv6 header is required. | No IPv6-in-IPv6 header is required. | |||
</t> | </t> | |||
<t> The RPI can be removed by the 6LBR | ||||
<t> The RPI can be removed by the 6LBR | ||||
because the packet is addressed to the 6LBR. The | because the packet is addressed to the 6LBR. The | |||
RAL must know that it is communicating with the 6LBR | RAL must know that it is communicating with the 6LBR | |||
to make use of this scenario. | to make use of this scenario. | |||
The RAL can know the address of the 6LBR because it | The RAL can know the address of the 6LBR because it | |||
knows the address of the root via the DODAGID in the | knows the address of the root via the DODAGID in the | |||
DIO messages. | DIO messages. | |||
</t> | </t> | |||
<t> | <t> | |||
The <xref target="Storing-summary-headers"/> summarizes | <xref target="Storing-summary-headers" format="default" | |||
what headers are needed for this use case. | /> summarizes which headers are needed for this use case. | |||
</t> | </t> | |||
<t> | <table anchor="Storing-summary-headers"> | |||
<figure title="SM: Summary of the use of headers from R | <name>SM: Summary of the Use of Headers from RAL to Root</name> | |||
AL to root" anchor="Storing-summary-headers" align="center"> | <thead> | |||
<artwork><![CDATA[ | <tr> | |||
+-----------+-----+-------+------+ | <th align="center">Header</th> | |||
| Header | RAL | 6LR_i | 6LBR | | <th align="center">RAL src</th> | |||
| | src | | dst | | <th align="center">6LR_i</th> | |||
+-----------+-----+-------+------+ | <th align="center">6LBR dst</th> | |||
| Added | RPI | -- | -- | | </tr> | |||
| headers | | | | | </thead> | |||
+-----------+-----+-------+------+ | <tbody> | |||
| Modified | -- | RPI | -- | | <tr> | |||
| headers | | | | | <th align="center">Added headers</th> | |||
+-----------+-----+-------+------+ | <td align="center">RPI</td> | |||
| Removed | -- | -- | RPI | | <td align="center">--</td> | |||
| headers | | | | | <td align="center">--</td> | |||
+-----------+-----+-------+------+ | </tr> | |||
| Untouched | -- | -- | -- | | <tr> | |||
| headers | | | | | <th align="center">Modified headers</th> | |||
+-----------+-----+-------+------+ | <td align="center">--</td> | |||
]]></artwork></figure> | <td align="center">RPI</td> | |||
</t> | <td align="center">--</td> | |||
</section> | </tr> | |||
<tr> | ||||
<!-- section 7.2. !--> | <th align="center">Removed headers</th> | |||
<td align="center">--</td> | ||||
<section title="SM: Example of Flow from Root to RAL" anchor="Sto | <td align="center">--</td> | |||
ring-root2ral"> | <td align="center">RPI</td> | |||
</tr> | ||||
<tr> | ||||
<th align="center">Untouched headers</th> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | ||||
<t> | <section anchor="Storing-root2ral" numbered="true" toc="default"> | |||
In this case the flow comprises: | <name>SM: Example of Flow from Root to RAL</name> | |||
</t> | <t> | |||
<t> | In this case, the flow comprises: | |||
</t> | ||||
<t> | ||||
root (6LBR) --> 6LR_i --> RAL (6LN) | root (6LBR) --> 6LR_i --> RAL (6LN) | |||
</t> | </t> | |||
<t> | <t> | |||
For example, a communication flow could be: Node A root( | For example, a communication flow could be: | |||
6LBR) --> Node B (6LR_i) --> Node D (6LR_i) --> Node F (6LN) | Node A root (6LBR) --> Node B (6LR_i) --> Node D (6LR_i) --> Node F (6L | |||
</t> | N) | |||
<t> | </t> | |||
In this case the 6LBR inserts RPI and | <t> | |||
sends the packet down, the 6LR is going to | In this case, the 6LBR inserts RPI and | |||
increment the rank in RPI (it examines the | sends the packet down. The 6LR | |||
increments the Rank in the RPI (it examines the | ||||
RPLInstanceID to identify the right forwarding | RPLInstanceID to identify the right forwarding | |||
table), | table). | |||
the packet | The packet | |||
is processed in the RAL and the RPI removed. | is processed in the RAL, and the RPI is removed. | |||
</t> | </t> | |||
<t> | <t> | |||
No IPv6-in-IPv6 header is required. | No IPv6-in-IPv6 header is required. | |||
</t> | </t> | |||
<t> | <t> | |||
The <xref target="Storing-root2leaf"/> summarizes what h | <xref target="Storing-root2leaf" format="default"/> summ | |||
eaders are needed for this use case. | arizes which headers are needed for this use case. | |||
</t> | </t> | |||
<t> | <table anchor="Storing-root2leaf"> | |||
<figure title="SM: Summary of the use of headers from roo | <name>SM: Summary of the Use of Headers from Root to RAL</name> | |||
t to RAL" anchor="Storing-root2leaf" align="center"> | <thead> | |||
<artwork><![CDATA[ | <tr> | |||
+-----------+------+-------+-----+ | <th align="center">Header</th> | |||
| Header | 6LBR | 6LR_i | RAL | | <th align="center">6LBR src</th> | |||
| | src | | dst | | <th align="center">6LR_i</th> | |||
+-----------+------+-------+-----+ | <th align="center">RAL dst</th> | |||
| Added | RPI | -- | -- | | </tr> | |||
| headers | | | | | </thead> | |||
+-----------+------+-------+-----+ | <tbody> | |||
| Modified | -- | RPI | -- | | <tr> | |||
| headers | | | | | <th align="center">Added headers</th> | |||
+-----------+------+-------+-----+ | <td align="center">RPI</td> | |||
| Removed | -- | -- | RPI | | <td align="center">--</td> | |||
| headers | | | | | <td align="center">--</td> | |||
+-----------+------+-------+-----+ | </tr> | |||
| Untouched | -- | -- | -- | | <tr> | |||
| headers | | | | | <th align="center">Modified headers</th> | |||
+-----------+------+-------+-----+ | <td align="center">--</td> | |||
]]></artwork></figure> | <td align="center">RPI</td> | |||
</t> | <td align="center">--</td> | |||
</section> | </tr> | |||
<tr> | ||||
<!-- section 7.3. !--> | <th align="center">Removed headers</th> | |||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">RPI</td> | ||||
</tr> | ||||
<tr> | ||||
<th align="center">Untouched headers</th> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | ||||
<section title="SM: Example of Flow from Root to RUL"> | <section numbered="true" toc="default"> | |||
<t> | <name>SM: Example of Flow from Root to RUL</name> | |||
In this case the flow comprises: | <t> | |||
</t> | In this case, the flow comprises: | |||
<t> | </t> | |||
root (6LBR) --> 6LR_i --> RUL (IPv6 dst node) | <t> | |||
</t> | root (6LBR) --> 6LR_i --> RUL (IPv6 dst no | |||
<t> | de) | |||
For example, a communication flow could be: Node A (6LBR | </t> | |||
) --> Node B (6LR_i) --> Node E (6LR_n) --> Node G (RUL) | <t> | |||
</t> | For example, a communication flow could be: | |||
<t> | Node A (6LBR) --> Node B (6LR_i) --> Node E (6LR_n) --> Node G (RUL) | |||
</t> | ||||
<t> | ||||
6LR_i (Node B) represents the intermediate routers fro m the source (6LBR) to the destination (RUL), | 6LR_i (Node B) represents the intermediate routers fro m the source (6LBR) to the destination (RUL), | |||
1 <= i <= n, where n is the total number of rout | and 1 <= i <= n, where n is the total number of | |||
ers (6LR) | routers (6LR) | |||
that the packet goes through from the 6LBR (Node A) to | that the packet goes through, from the 6LBR (Node A) t | |||
the RUL (Node G). | o the RUL (Node G). | |||
</t> | </t> | |||
<t> | <t> | |||
The 6LBR will encapsulate the packet in an IPv6-in-IPv6 | The 6LBR will encapsulate the packet in an IPv6-in-IPv6 | |||
header, and prepend an RPI. The IPv6-in-IPv6 | header and prepend an RPI. The IPv6-in-IPv6 | |||
header is addressed to the 6LR parent of the RUL (6LR_n) . | header is addressed to the 6LR parent of the RUL (6LR_n) . | |||
The 6LR parent of the RUL removes the header and sends t he packet to the RUL. | The 6LR parent of the RUL removes the header and sends t he packet to the RUL. | |||
</t> | </t> | |||
<t> | <t> | |||
The <xref target="Storing-root2notrpl"/> summarizes what | <xref target="Storing-root2notrpl" format="default"/> su | |||
headers are needed for this use case. | mmarizes which headers are needed for this use case. | |||
</t> | </t> | |||
<t> | <table anchor="Storing-root2notrpl"> | |||
<figure title="SM: Summary of the use of headers from roo | <name>SM: Summary of the Use of Headers from Root to RUL</name> | |||
t to RUL" anchor="Storing-root2notrpl" align="center"> | <thead> | |||
<artwork><![CDATA[ | <tr> | |||
+-----------+---------+---------+---------+-----+ | <th align="center">Header</th> | |||
| Header | 6LBR | 6LR_i | 6LR_n | RUL | | <th align="center">6LBR src</th> | |||
| | src | | | dst | | <th align="center">6LR_i</th> | |||
+-----------+---------+---------+---------+-----+ | <th align="center">6LR_n</th> | |||
| Added | IP6-IP6 | -- | -- | -- | | <th align="center">RUL dst</th> | |||
| headers | RPI | | | | | </tr> | |||
+-----------+---------+---------+---------+-----+ | </thead> | |||
| Modified | -- | | -- | -- | | <tbody> | |||
| headers | | RPI | | | | <tr> | |||
+-----------+---------+---------+---------+-----+ | <th align="center">Added headers</th> | |||
| Removed | -- | -- | IP6-IP6 | -- | | <td align="center">IP6-IP6 (RPI)</td> | |||
| headers | | | RPI | | | <td align="center">--</td> | |||
+-----------+---------+---------+---------+-----+ | <td align="center">--</td> | |||
| Untouched | -- | IP6-IP6 | -- | -- | | <td align="center">--</td> | |||
| headers | | | | | | </tr> | |||
+-----------+---------+---------+---------+-----+ | <tr> | |||
]]></artwork></figure> | <th align="center">Modified headers</th> | |||
</t> | <td align="center">--</td> | |||
<t> | <td align="center">RPI</td> | |||
IP-in-IP encapsulation may be avoided for Root to RUL com | <td align="center">--</td> | |||
munication. | <td align="center">--</td> | |||
In SM, it can be replaced by a loose RH3 header that indi | </tr> | |||
cates the RUL, | <tr> | |||
in which case the packet is routed to the 6LR as a normal | <th align="center">Removed headers</th> | |||
SM operation, | <td align="center">--</td> | |||
then the 6LR forwards to the RUL based on the RH3, and th | <td align="center">--</td> | |||
e RUL ignores | <td align="center">IP6-IP6 (RPI)</td> | |||
both the consumed RH3 and the RPI, as in Non-Storing Mode | <td align="center">--</td> | |||
. | </tr> | |||
</t> | <tr> | |||
<t> | <th align="center">Untouched headers</th> | |||
The <xref target="Storing-root2notrplnoIPIP"/> summarizes | <td align="center">--</td> | |||
what headers are needed for this scenario. | <td align="center">IP6-IP6</td> | |||
</t> | <td align="center">--</td> | |||
<t> | <td align="center">--</td> | |||
<figure title="SM: Summary of the use of headers from roo | </tr> | |||
t to RUL without encapsulation" anchor="Storing-root2notrplnoIPIP" align="center | </tbody> | |||
"> | </table> | |||
<artwork><![CDATA[ | ||||
+-----------+----------+--------------+----------------+----------+ | ||||
| Header | 6LBR | 6LR_i | 6LR_n | RUL | | ||||
| | src | i=(1,..,n-1) | | dst | | ||||
| | | | | | | ||||
+-----------+----------+--------------+----------------+----------+ | ||||
| Added | RPI, RH3 | -- | -- | -- | | ||||
| headers | | | | | | ||||
+-----------+----------+--------------+----------------+----------+ | ||||
| Modified | -- | RPI | RPI | -- | | ||||
| headers | | | RH3(consumed) | | | ||||
+-----------+----------+--------------+----------------+----------+ | ||||
| Removed | -- | -- | -- | -- | | ||||
| headers | | | | | | ||||
+-----------+----------+--------------+----------------+----------+ | ||||
| Untouched | -- | RH3 | -- | RPI, RH3 | | ||||
| headers | | | | (both | | ||||
| | | | | ignored) | | ||||
+-----------+----------+--------------+----------------+----------+ | ||||
]]></artwork></figure> | ||||
</t> | ||||
</section> | <t> | |||
IP-in-IP encapsulation may be avoided for root-to-RUL com | ||||
munication. | ||||
In SM, it can be replaced by a loose RH3 header that indi | ||||
cates the RUL. | ||||
In which case, the packet is routed to the 6LR as a norma | ||||
l SM operation, | ||||
then the 6LR forwards to the RUL based on the RH3, and th | ||||
e RUL ignores | ||||
both the consumed RH3 and the RPI, as in Non-Storing mode | ||||
. | ||||
</t> | ||||
<t> | ||||
<xref target="Storing-root2notrplnoIPIP" format="default" | ||||
/> summarizes which headers are needed for this scenario. | ||||
</t> | ||||
<table anchor="Storing-root2notrplnoIPIP"> | ||||
<name>SM: Summary of the Use of Headers from Root to RUL without Encapsulatio | ||||
n</name> | ||||
<thead> | ||||
<tr> | ||||
<th align="center">Header</th> | ||||
<th align="center">6LBR src</th> | ||||
<th align="center">6LR_i<br/>i=(1,..,n-1)</th> | ||||
<th align="center">6LR_n</th> | ||||
<th align="center">RUL dst</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<th align="center">Added headers</th> | ||||
<td align="center">RPI, RH3</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
<tr> | ||||
<th align="center">Modified headers</th> | ||||
<td align="center">--</td> | ||||
<td align="center">RPI</td> | ||||
<td align="center">RPI, RH3(consumed)</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
<tr> | ||||
<th align="center">Removed headers</th> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
<tr> | ||||
<th align="center">Untouched headers</th> | ||||
<td align="center">--</td> | ||||
<td align="center">RH3</td> | ||||
<td align="center">--</td> | ||||
<td align="center">RPI, RH3 (both ignored)</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<section anchor="sm-nRal2root" title="SM: Example of Flow from RU | </section> | |||
L to Root"> | <section anchor="sm-nRal2root" numbered="true" toc="default"> | |||
<t> | <name>SM: Example of Flow from RUL to Root</name> | |||
In this case the flow comprises: | <t> | |||
</t> | In this case, the flow comprises: | |||
<t> | </t> | |||
<t> | ||||
RUL (IPv6 src node) --> 6LR_1 --> 6LR_i --> root | RUL (IPv6 src node) --> 6LR_1 --> 6LR_i -- | |||
(6LBR) | > root (6LBR) | |||
</t> | </t> | |||
<t> | <t> | |||
For example, a communication flow could be: Node G (RUL) | For example, a communication flow could be: | |||
--> Node E (6LR_1)--> Node B (6LR_i)--> Node A root(6LBR) | Node G (RUL) --> Node E (6LR_1) --> Node B (6LR_i) --> Node A root (6L | |||
</t> | BR) | |||
<t> | </t> | |||
<t> | ||||
6LR_i represents the intermediate routers from the sou rce (RUL) to the destination (6LBR), | 6LR_i represents the intermediate routers from the sou rce (RUL) to the destination (6LBR), | |||
1 <= i <= n, where n is the total number of rout | and 1 <= i <= n, where n is the total number of | |||
ers (6LR) | routers (6LR) | |||
that the packet goes through from the RUL to the 6LBR. | that the packet goes through, from the RUL to the 6LBR | |||
</t> | . | |||
<t> | </t> | |||
<t> | ||||
When the packet arrives from the RUL (Node G) to | When the packet arrives from the RUL (Node G) to | |||
6LR_1 (Node E), the 6LR_1 will encapsulate the packet | 6LR_1 (Node E), the 6LR_1 will encapsulate the packet | |||
in an IPv6-in-IPv6 header with an RPI. The IPv6-in-IPv6 | in an IPv6-in-IPv6 header with an RPI. The IPv6-in-IPv6 | |||
header is addressed to the root (Node A). The root remo ves the header and processes | header is addressed to the root (Node A). The root remo ves the header and processes | |||
the packet. | the packet. | |||
</t> | </t> | |||
<t> | <t> | |||
The <xref target="Storing-notrpl2root"/> shows the table | <xref target="Storing-notrpl2root" format="default"/> su | |||
that summarizes what headers are needed for this use case | mmarizes which headers are needed for this use case | |||
where the IPv6-in-IPv6 header is addressed to the root ( Node A). | where the IPv6-in-IPv6 header is addressed to the root ( Node A). | |||
</t> | </t> | |||
<t> | <table anchor="Storing-notrpl2root"> | |||
<figure title="SM: Summary of the use of headers from RU | <name>SM: Summary of the Use of Headers from RUL to Root</name> | |||
L to root." anchor="Storing-notrpl2root" align="center"> | <thead> | |||
<artwork><![CDATA[ | <tr> | |||
+-----------+------+--------------+----------------+-----------------+ | <th align="center">Header</th> | |||
| Header | RUL | 6LR_1 | 6LR_i | 6LBR dst | | <th align="center">RUL src</th> | |||
| | src | | | | | <th align="center">6LR_1</th> | |||
| | node | | | | | <th align="center">6LR_i</th> | |||
+-----------+------+--------------+----------------+-----------------+ | <th align="center">6LBR dst</th> | |||
| Added | -- | IP6-IP6 | | -- | | </tr> | |||
| headers | | RPI | -- | | | </thead> | |||
+-----------+------+--------------+----------------+-----------------+ | <tbody> | |||
| Modified | -- | -- | RPI | -- | | <tr> | |||
| headers | | | | | | <th align="center">Added headers</th> | |||
+-----------+------+--------------+----------------+-----------------+ | <td align="center">--</td> | |||
| Removed | -- | -- | --- | IP6-IP6 | | <td align="center">IP6-IP6 (RPI)</td> | |||
| headers | | | | RPI | | <td align="center">--</td> | |||
+-----------+------+--------------+----------------+-----------------+ | <td align="center">--</td> | |||
| Untouched | -- | -- | IP6-IP6 | -- | | </tr> | |||
| headers | | | | | | <tr> | |||
+-----------+------+--------------+----------------+-----------------+ | <th align="center">Modified headers</th> | |||
]]></artwork></figure> | <td align="center">--</td> | |||
</t> | <td align="center">--</td> | |||
</section> | <td align="center">RPI</td> | |||
</section> | <td align="center">--</td> | |||
<section title=" SM: Interaction between Leaf and Internet."> | </tr> | |||
<tr> | ||||
<t> | <th align="center">Removed headers</th> | |||
In this section is described the communication flow | <td align="center">--</td> | |||
in storing mode (SM) between, | <td align="center">--</td> | |||
</t> | <td align="center">--</td> | |||
<t> | <td align="center">IP6-IP6 (RPI)</td> | |||
<list> | </tr> | |||
<t> | <tr> | |||
<th align="center">Untouched headers</th> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">IP6-IP6</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | ||||
</section> | ||||
<section numbered="true" toc="default"> | ||||
<name>SM: Interaction between Leaf and Internet</name> | ||||
<t> | ||||
This section describes the communication flow | ||||
in Storing mode (SM) between the following: | ||||
</t> | ||||
<ul empty="true" spacing="normal"> | ||||
<li> | ||||
RAL to Internet | RAL to Internet | |||
</t> | </li> | |||
<t> | <li> | |||
Internet to RAL | Internet to RAL | |||
</t> | </li> | |||
<t> | <li> | |||
RUL to Internet | RUL to Internet | |||
</t> | </li> | |||
<t> | <li> | |||
Internet to RUL | Internet to RUL | |||
</t> | </li> | |||
</list> | </ul> | |||
</t> | <section anchor="sm-Ral2i" numbered="true" toc="default"> | |||
<name>SM: Example of Flow from RAL to Internet</name> | ||||
<section anchor="sm-Ral2i" title="SM: Example of Flow from RAL t | <t> | |||
o Internet"> | In this case, the flow comprises: | |||
<t> | </t> | |||
In this case the flow comprises: | <t> | |||
</t> | ||||
<t> | ||||
RAL (6LN) --> 6LR_i --> root (6LBR) --> Internet | RAL (6LN) --> 6LR_i --> root (6LBR) --> | |||
</t> | Internet | |||
<t> | </t> | |||
For example, the communication flow could be: Node F (RA | <t> | |||
L) --> Node D (6LR_i)--> Node B (6LR_i)--> Node A root(6LBR) --> Internet | For example, the communication flow could be: | |||
</t> | Node F (RAL) --> Node D (6LR_i) --> Node B (6LR_i) --> Node A root (6LB | |||
<t> | R) --> Internet | |||
</t> | ||||
<t> | ||||
6LR_i represents the intermediate routers from the sou rce (RAL) to the root (6LBR), | 6LR_i represents the intermediate routers from the sou rce (RAL) to the root (6LBR), | |||
1 <= i <= n, where n is the total number of rout | and 1 <= i <= n, where n is the total number of | |||
ers (6LR) | routers (6LR) | |||
that the packet goes through from the RAL to the 6LBR. | that the packet goes through, from the RAL to the 6LBR | |||
</t> | . | |||
<t> | </t> | |||
<t> | ||||
RPL information from RFC 6553 may go out to | RPL information from RFC 6553 may go out to | |||
Internet as it will be ignored by nodes which have | Internet as it will be ignored by nodes that have | |||
not been configured to be RPI aware. No IPv6-in-IPv6 head | not been configured to be RPL aware. No IPv6-in-IPv6 head | |||
er is required. | er is required. | |||
<!-- Beginning of Section 6 says | <!-- [auth] Beginning of Section 6 says | |||
"The DODAG root MUST force it to zero when passing | "The DODAG root <bcp14>MUST</bcp14> force it to zer | |||
the packet out to the Internet." | o when passing the packet out to the Internet." | |||
--> | --> | |||
</t> | </t> | |||
<t> | <t> | |||
On the other hand, the RAL may insert the RPI encapsulate | On the other hand, the RAL may insert the RPI encapsulate | |||
d in a IPv6-in-IPv6 header to the root. | d in an IPv6-in-IPv6 header to the root. | |||
Thus, the root removes the RPI and send the packet to the | Thus, the root removes the RPI and sends the packet to th | |||
Internet. | e Internet. | |||
</t> | </t> | |||
<t> | <aside><t> | |||
Note: In this use case, it is used a node as a leaf, b | Note: In this use case, a leaf node is used, but this | |||
ut this use case can be also | use case | |||
applicable to any RPL-aware-node type (e.g. 6LR) | can also be applicable to any RPL-aware node type (e.g | |||
</t> | ., 6LR). | |||
<t> | </t> </aside> | |||
The <xref target="Storing-rpl2int"/> summarizes what hea | <t> | |||
ders are needed for this use case when there is no encapsulation. | <xref target="Storing-rpl2int" format="default"/> summar | |||
Note that the RPI is modified by 6LBR to set the SenderR | izes which headers are needed for this use case when there is no encapsulation. | |||
ank to zero in case that it is not already zero. | Note that the RPI is modified by 6LBR to set the SenderR | |||
The <xref target="Storing-rpl2intIPIP"/> summarizes what | ank to zero in the case that it is not already zero. | |||
headers are needed when encapsulation to the root takes place. | <xref target="Storing-rpl2intIPIP" format="default"/> su | |||
</t> | mmarizes which headers are needed when encapsulation to the root takes place. | |||
</t> | ||||
<t> | <table anchor="Storing-rpl2int"> | |||
<figure title="SM: Summary of the use of headers from RA | <name>SM: Summary of the Use of Headers from RAL to Internet with No Encapsul | |||
L to Internet with no encapsulation" anchor="Storing-rpl2int" align="center"> | ation</name> | |||
<artwork><![CDATA[ | <thead> | |||
+-----------+-----+-------+------+-----------+ | <tr> | |||
| Header | RAL | 6LR_i | 6LBR | Internet | | <th align="center">Header</th> | |||
| | src | | | dst | | <th align="center">RAL src</th> | |||
+-----------+-----+-------+------+-----------+ | <th align="center">6LR_i</th> | |||
| Added | RPI | -- | -- | -- | | <th align="center">6LBR</th> | |||
| headers | | | | | | <th align="center">Internet dst</th> | |||
+-----------+-----+-------+------+-----------+ | </tr> | |||
| Modified | -- | RPI | RPI | -- | | </thead> | |||
| headers | | | | | | <tbody> | |||
+-----------+-----+-------+------+-----------+ | <tr> | |||
| Removed | -- | -- | -- | -- | | <th align="center">Added headers</th> | |||
| headers | | | | | | <td align="center">RPI</td> | |||
+-----------+-----+-------+------+-----------+ | <td align="center">--</td> | |||
| Untouched | -- | -- | -- | RPI | | <td align="center">--</td> | |||
| headers | | | | (Ignored) | | <td align="center">--</td> | |||
+-----------+-----+-------+------+-----------+ | </tr> | |||
]]></artwork></figure> | <tr> | |||
<!-- RPI touched by 6LBR? set DagRank to 0? --> | <th align="center">Modified headers</th> | |||
</t> | <td align="center">--</td> | |||
<t> | <td align="center">RPI</td> | |||
<figure title="SM: Summary of the use of headers from RA | <td align="center">RPI</td> | |||
L to Internet with encapsulation to the root (6LBR)." | <td align="center">--</td> | |||
anchor="Storing-rpl2intIPIP" align="center"> | </tr> | |||
<artwork><![CDATA[ | <tr> | |||
+-----------+----------+--------------+--------------+--------------+ | <th align="center">Removed headers</th> | |||
| Header | RAL | 6LR_i | 6LBR | Internet dst | | <td align="center">--</td> | |||
| | src | | | | | <td align="center">--</td> | |||
+-----------+----------+--------------+--------------+--------------+ | <td align="center">--</td> | |||
| Added | IP6-IP6 | -- | -- | -- | | <td align="center">--</td> | |||
| headers | RPI | | | | | </tr> | |||
+-----------+----------+--------------+--------------+--------------+ | <tr> | |||
| Modified | -- | RPI | -- | -- | | <th align="center">Untouched headers</th> | |||
| headers | | | | | | <td align="center">--</td> | |||
+-----------+----------+--------------+--------------+--------------+ | <td align="center">--</td> | |||
| Removed | -- | -- | IP6-IP6 | -- | | <td align="center">--</td> | |||
| headers | | | RPI | | | <td align="center">RPI (Ignored)</td> | |||
+-----------+----------+--------------+--------------+--------------+ | </tr> | |||
| Untouched | -- | IP6-IP6 | -- | -- | | </tbody> | |||
| headers | | | | | | </table> | |||
+-----------+----------+--------------+--------------+--------------+ | ||||
]]></artwork></figure> | ||||
</t> | ||||
</section> | ||||
<!-- section 7.6 --> | <t> | |||
<section title="SM: Example of Flow from Internet to RAL"> | <!-- [auth] RPI touched by 6LBR? set DagRank to 0? --> | |||
<t> | </t> | |||
In this case the flow comprises: | <table anchor="Storing-rpl2intIPIP"> | |||
</t> | <name>SM: Summary of the Use of Headers from RAL to Internet with Encapsulati | |||
<t> | on to the Root (6LBR)</name> | |||
<thead> | ||||
<tr> | ||||
<th align="center">Header</th> | ||||
<th align="center">RAL src</th> | ||||
<th align="center">6LR_i</th> | ||||
<th align="center">6LBR</th> | ||||
<th align="center">Internet dst</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<th align="center">Added headers</th> | ||||
<td align="center">IP6-IP6 (RPI)</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
<tr> | ||||
<th align="center">Modified headers</th> | ||||
<td align="center">--</td> | ||||
<td align="center">RPI</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
<tr> | ||||
<th align="center">Removed headers</th> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">IP6-IP6 (RPI)</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
<tr> | ||||
<th align="center">Untouched headers</th> | ||||
<td align="center">--</td> | ||||
<td align="center">IP6-IP6</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | ||||
<section numbered="true" toc="default"> | ||||
<name>SM: Example of Flow from Internet to RAL</name> | ||||
<t> | ||||
In this case, the flow comprises: | ||||
</t> | ||||
<t> | ||||
Internet --> root (6LBR) --> 6LR_i --> RAL (6LN) | Internet --> root (6LBR) --> 6LR_i --> | |||
</t> | RAL (6LN) | |||
<t> | </t> | |||
For example, a communication flow could be: Internet --> | <t> | |||
Node A root(6LBR) --> Node B (6LR_1) --> Node D (6LR_n) --> Node F (RAL) | For example, a communication flow could be: | |||
</t> | Internet --> Node A root (6LBR) --> Node B (6LR_1) --> Node D (6LR_n) - | |||
<t> | -> Node F (RAL) | |||
</t> | ||||
<t> | ||||
When the packet arrives from Internet to 6LBR | When the packet arrives from Internet to 6LBR, | |||
the RPI is added in a outer | the RPI is added in a outer | |||
IPv6-in-IPv6 header (with the IPv6-in-IPv6 desti | IPv6-in-IPv6 header (with the IPv6-in-IPv6 desti | |||
nation address set to the RAL) and sent to 6LR, which | nation address set to the RAL) and sent to the 6LR, which | |||
modifies the rank in the RPI. When the packet | modifies the Rank in the RPI. When the packet | |||
arrives at the RAL, the packet is decapsulated, which removes the RPI before the | arrives at the RAL, the packet is decapsulated, which removes the RPI before the | |||
packet is processed. | packet is processed. | |||
</t> | </t> | |||
<t> | <t> | |||
The <xref target="Storing-int2rpl"/> shows the table tha | <xref target="Storing-int2rpl" format="default"/> summar | |||
t summarizes what headers are needed for this use case. | izes which headers are needed for this use case. | |||
</t> | ||||
<t> | ||||
<figure title="SM: Summary of the use of headers from In | ||||
ternet to RAL." | ||||
anchor="Storing-int2rpl" align="center"> | ||||
<artwork><![CDATA[ | ||||
+-----------+----------+--------------+--------------+--------------+ | ||||
| Header | Internet | 6LBR | 6LR_i | RAL dst | | ||||
| | src | | | | | ||||
+-----------+----------+--------------+--------------+--------------+ | ||||
| Added | -- | IP6-IP6(RPI) | -- | -- | | ||||
| headers | | | | | | ||||
+-----------+----------+--------------+--------------+--------------+ | ||||
| Modified | -- | -- | RPI | -- | | ||||
| headers | | | | | | ||||
+-----------+----------+--------------+--------------+--------------+ | ||||
| Removed | -- | -- | -- | IP6-IP6(RPI) | | ||||
| headers | | | | | | ||||
+-----------+----------+--------------+--------------+--------------+ | ||||
| Untouched | -- | -- | -- | -- | | ||||
| headers | | | | | | ||||
+-----------+----------+--------------+--------------+--------------+ | ||||
]]></artwork></figure> | ||||
</t> | ||||
</section> | ||||
<!-- section 7.6 --> | </t> | |||
<section anchor="sm-nRal2i" title="SM: Example of Flow from RUL t | <table anchor="Storing-int2rpl"> | |||
o Internet"> | <name>SM: Summary of the Use of Headers from Internet to RAL</name> | |||
<t> | <thead> | |||
In this case the flow comprises: | <tr> | |||
</t> | <th align="center">Header</th> | |||
<t> | <th align="center">Internet src</th> | |||
RUL (IPv6 src node) --> 6LR_1 --> 6LR_i -->root (6LBR) --> In | <th align="center">6LBR</th> | |||
ternet | <th align="center">6LR_i</th> | |||
</t> | <th align="center"> RAL dst</th> | |||
<t> | </tr> | |||
For example, a communication flow could be: Node G (RUL)--> Nod | </thead> | |||
e E (6LR_1)--> Node B (6lR_i) --> Node A root(6LBR) --> Internet | <tbody> | |||
</t> | <tr> | |||
<t> | <th align="center">Added headers</th> | |||
The node 6LR_1 (i=1) will add an IPv6-in-IPv6(RPI) header add | <td align="center">--</td> | |||
ressed to the root such that the root can remove | <td align="center">IP6-IP6 (RPI)</td> | |||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
<tr> | ||||
<th align="center">Modified headers</th> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">RPI</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
<tr> | ||||
<th align="center">Removed headers</th> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">IP6-IP6 (RPI)</td> | ||||
</tr> | ||||
<tr> | ||||
<th align="center">Untouched headers</th> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | ||||
<section anchor="sm-nRal2i" numbered="true" toc="default"> | ||||
<name>SM: Example of Flow from RUL to Internet</name> | ||||
<t> | ||||
In this case, the flow comprises: | ||||
</t> | ||||
<t> | ||||
RUL (IPv6 src node) --> 6LR_1 --> 6LR_i --> root (6L | ||||
BR) --> Internet | ||||
</t> | ||||
<t> | ||||
For example, a communication flow could be: | ||||
Node G (RUL) --> Node E (6LR_1) --> Node B (6lR_i) --> Node A root (6LB | ||||
R) --> Internet | ||||
</t> | ||||
<t> | ||||
The node 6LR_1 (i=1) will add an IPv6-in-IPv6 (RPI) header ad | ||||
dressed to the root such that the root can remove | ||||
the RPI before passing upwards. | the RPI before passing upwards. | |||
In the intermediate 6LR, the rank in the RPI is modified. | In the intermediate 6LR, the Rank in the RPI is modified. | |||
</t> | </t> | |||
<t> | <t> | |||
The originating node will ideally leave the IPv6 flow | The originating node will ideally leave the IPv6 flow | |||
label as zero so that the packet can be better compressed thr ough | label as zero so that the packet can be better compressed thr ough | |||
the LLN. The 6LBR will set the flow label of the packet to a | the LLN. The 6LBR will set the flow label of the packet to a | |||
non-zero value when sending to the Internet, for details chec | non-zero value when sending to the Internet. For details, che | |||
k <xref target="RFC6437"/>. | ck <xref target="RFC6437" format="default"/>. | |||
</t> | </t> | |||
<t> | <t> | |||
The <xref target="Storing-notrpl2int"/> shows the table that su | <xref target="Storing-notrpl2int" format="default"/> summarizes | |||
mmarizes what headers are needed for this use case. | which headers are needed for this use case. | |||
</t> | </t> | |||
<t> | <table anchor="Storing-notrpl2int"> | |||
<figure title="SM: Summary of the use of headers from RUL to In | <name>SM: Summary of the Use of Headers from RUL to Internet</name> | |||
ternet." anchor="Storing-notrpl2int" align="center"> | <thead> | |||
<artwork><![CDATA[ | <tr> | |||
+---------+-------+------------+-------------+-------------+--------+ | <th align="center">Header</th> | |||
| Header | IPv6 | 6LR_1 | 6LR_i | 6LBR |Internet| | <th align="center">IPv6 src (RUL)</th> | |||
| | src | | [i=2,...,n] | | dst | | <th align="center">6LR_1</th> | |||
| | node | | | | | | <th align="center">6LR_i i=(2,..,n)</th> | |||
| | (RUL) | | | | | | <th align="center">6LBR</th> | |||
+---------+-------+------------+-------------+-------------+--------+ | <th align="center">Internet dst</th> | |||
| Added | -- |IP6-IP6(RPI)| -- | -- | -- | | </tr> | |||
| headers | | | | | | | </thead> | |||
+---------+-------+------------+-------------+-------------+--------+ | <tbody> | |||
| Modified| -- | -- | RPI | -- | -- | | <tr> | |||
| headers | | | | | | | <th align="center">Added headers</th> | |||
+---------+-------+------------+-------------+-------------+--------+ | <td align="center">--</td> | |||
| Removed | -- | -- | -- | IP6-IP6(RPI)| -- | | <td align="center">IP6-IP6 (RPI)</td> | |||
| headers | | | | | | | <td align="center">--</td> | |||
+---------+-------+------------+-------------+-------------+--------+ | <td align="center">--</td> | |||
|Untouched| -- | -- | -- | -- | -- | | <td align="center">--</td> | |||
| headers | | | | | | | </tr> | |||
+---------+-------+------------+-------------+-------------+--------+ | <tr> | |||
]]></artwork></figure> | <th align="center">Modified headers</th> | |||
</t> | <td align="center">--</td> | |||
</section> | <td align="center">--</td> | |||
<td align="center">RPI</td> | ||||
<section title="SM: Example of Flow from Internet to RUL. | <td align="center">--</td> | |||
"> | <td align="center">--</td> | |||
<t> | </tr> | |||
In this case the flow comprises: | <tr> | |||
</t> | <th align="center">Removed headers</th> | |||
<t> | <td align="center">--</td> | |||
Internet --> root (6LBR) --> 6LR_i --> RUL (IPv6 | <td align="center">--</td> | |||
dst node) | <td align="center">--</td> | |||
</t> | <td align="center">IP6-IP6 (RPI)</td> | |||
<t> | <td align="center">--</td> | |||
For example, a communication flow could be: Internet --> | </tr> | |||
Node A root(6LBR) --> Node B (6LR_i)--> Node E (6LR_n) --> Node G (RUL) | <tr> | |||
</t> | <th align="center">Untouched headers</th> | |||
<t> | <td align="center">--</td> | |||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | ||||
<section numbered="true" toc="default"> | ||||
<name>SM: Example of Flow from Internet to RUL</name> | ||||
<t> | ||||
In this case, the flow comprises: | ||||
</t> | ||||
<t> | ||||
Internet --> root (6LBR) --> 6LR_i --> | ||||
RUL (IPv6 dst node) | ||||
</t> | ||||
<t> | ||||
For example, a communication flow could be: | ||||
Internet --> Node A root (6LBR) --> Node B (6LR_i) --> Node E (6LR_n) - | ||||
-> Node G (RUL) | ||||
</t> | ||||
<t> | ||||
The 6LBR will have to add an RPI within an | The 6LBR will have to add an RPI within an | |||
IPv6-in-IPv6 header. The IPv6-in-IPv6 is addressed | IPv6-in-IPv6 header. The IPv6-in-IPv6 encapsulating he ader is addressed | |||
to the 6LR parent of the RUL. | to the 6LR parent of the RUL. | |||
</t> | </t> | |||
<t> | <t> | |||
Further details about this are mentioned in <xref targ | Further details about this are mentioned in <xref targ | |||
et="I-D.ietf-roll-unaware-leaves"/>, | et="RFC9010" format="default"/>, | |||
which specifies RPL routing for a 6LN acting as a plai | which specifies RPL routing for a 6LN acting as a plai | |||
n host and not being aware of RPL. | n host and being unaware of RPL. | |||
</t> | </t> | |||
<t> | <t> | |||
The 6LBR may set the flow label on the inner IPv6-in-I Pv6 | The 6LBR may set the flow label on the inner IPv6-in-I Pv6 | |||
header to zero in order to aid in compression <xref ta | header to zero in order to aid in compression <xref ta | |||
rget="RFC8138"/><xref target="RFC6437"/>. | rget="RFC8138" format="default"/> <xref target="RFC6437" format="default"/>. | |||
</t> | </t> | |||
<t> | <t> | |||
The <xref target="Storing-int2notrpl"/> shows the table t | <xref target="Storing-int2notrpl" format="default"/> summ | |||
hat summarizes what headers are needed for this use case. | arizes which headers are needed for this use case. | |||
</t> | </t> | |||
<t> | <table anchor="Storing-int2notrpl"> | |||
<figure title=" SM: Summary of the use of headers from In | <name>SM: Summary of the Use of Headers from Internet to RUL</name> | |||
ternet to RUL." | <thead> | |||
anchor="Storing-int2notrpl" align="center"> | <tr> | |||
<artwork><![CDATA[ | <th align="center">Header</th> | |||
+---------+-------+------------+--------------+-------------+-------+ | <th align="center">Internet src</th> | |||
| Header |Inter- | 6LBR | 6LR_i | 6LR_n | RUL | | <th align="center">6LBR</th> | |||
| | net | |[i=1,..,n-1] | | dst | | <th align="center">6LR_i i=(1,..,n-1)</th> | |||
| | src | | | | | | <th align="center">6LR_n</th> | |||
| | | | | | | | <th align="center">RUL dst</th> | |||
+---------+-------+------------+--------------+-------------+-------+ | </tr> | |||
| Inserted| -- |IP6-IP6(RPI)| -- | -- | -- | | </thead> | |||
| headers | | | | | | | <tbody> | |||
+---------+-------+------------+--------------+-------------+-------+ | <tr> | |||
| Modified| -- | -- | RPI | -- | -- | | <th align="center">Added headers</th> | |||
| headers | | | | | | | <td align="center">--</td> | |||
+---------+-------+------------+--------------+-------------+-------+ | <td align="center">IP6-IP6 (RPI)</td> | |||
| Removed | -- | -- | -- | IP6-IP6(RPI)| -- | | <td align="center">--</td> | |||
| headers | | | | | | | <td align="center">--</td> | |||
+---------+-------+------------+--------------+-------------+-------+ | <td align="center">--</td> | |||
|Untouched| -- | -- | -- | -- | -- | | </tr> | |||
| headers | | | | | | | <tr> | |||
+---------+-------+------------+--------------+-------------+-------+ | <th align="center">Modified headers</th> | |||
]]></artwork></figure> | <td align="center">--</td> | |||
</t> | <td align="center">--</td> | |||
</section> | <td align="center">RPI</td> | |||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
<tr> | ||||
<th align="center">Removed headers</th> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">IP6-IP6 (RPI)</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
<tr> | ||||
<th align="center">Untouched headers</th> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | ||||
</section> | </section> | |||
<section title="SM: Interaction between Leaf and Leaf"> | <section numbered="true" toc="default"> | |||
<name>SM: Interaction between Leaf and Leaf</name> | ||||
<t> | <t> | |||
In this section is described the communication flow | This section describes the communication flow | |||
in storing mode (SM) between, | in Storing mode (SM) between the following: | |||
</t> | </t> | |||
<t> | <ul empty="true" spacing="normal"> | |||
<list> | <li> | |||
<t> | ||||
RAL to RAL | RAL to RAL | |||
</t> | </li> | |||
<t> | <li> | |||
RAL to RUL | RAL to RUL | |||
</t> | </li> | |||
<t> | <li> | |||
RUL to RAL | RUL to RAL | |||
</t> | </li> | |||
<t> | <li> | |||
RUL to RUL | RUL to RUL | |||
</t> | </li> | |||
</list> | </ul> | |||
</t> | <section anchor="storingRALtoRAL" numbered="true" toc="default"> | |||
<!-- section 7.9 --> | <name>SM: Example of Flow from RAL to RAL</name> | |||
<section anchor="storingRALtoRAL" title="SM: Example of Flow from | <t> | |||
RAL to RAL"> | In <xref target="RFC6550" format="default"/>, RPL allows a si | |||
<t> | mple, one-hop | |||
In <xref target="RFC6550"/> RPL allows a simple one-hop | optimization for both Storing and Non-Storing | |||
optimization for both storing and non-storing | ||||
networks. | networks. | |||
A node may send a packet destined to a one-hop | A node may send a packet destined to a one-hop | |||
neighbor directly to that node. See section 9 in <xref | neighbor directly to that node. See <xref target="RFC6550" se | |||
target="RFC6550"/>. | ction="9" sectionFormat="of" format="default"/>. | |||
</t> | </t> | |||
<t> | <t> | |||
When the nodes are not directly connected, then in storing | When the nodes are not directly connected, then | |||
mode, the flow comprises: | the flow comprises the following in the Storing mode: | |||
</t> | </t> | |||
<t> | <t> | |||
RAL src (6LN) --> 6LR_ia --> common parent (6LR_x) --> 6LR_id | RAL src (6LN) --> 6LR_ia --> common parent (6LR_x) --&g | |||
--> RAL dst (6LN) | t; 6LR_id --> RAL dst (6LN) | |||
</t> | </t> | |||
<t> | <t> | |||
For example, a communication flow could be: Node F (RAL src)--> | For example, a communication flow could be: | |||
Node D (6LR_ia)--> Node B (6LR_x) --> Node E (6LR_id) --> Node H (RAL dst) | Node F (RAL src) --> Node D (6LR_ia) --> Node B (6LR_x) --> Node E (6LR | |||
</t> | _id) --> Node H (RAL dst) | |||
<t> | </t> | |||
6LR_ia (Node D) represents the intermediate routers from sour | <t> | |||
ce to the common parent (6LR_x) (Node B), | 6LR_ia (Node D) represents the intermediate routers from the | |||
1 <= ia <= n, where n is the total number of routers (6 | source to the common parent 6LR_x (Node B), | |||
LR) | and 1 <= ia <= n, where n is the total number of router | |||
that the packet goes through from RAL (Node F) to the common | s (6LR) | |||
parent 6LR_x (Node B). | that the packet goes through, from the RAL (Node F) to the co | |||
</t> | mmon parent 6LR_x (Node B). | |||
<t> | </t> | |||
6LR_id (Node E) represents the intermediate routers from the | <t> | |||
common parent (6LR_x) (Node B) to destination RAL (Node H), | 6LR_id (Node E) represents the intermediate routers from the | |||
1 <= id <= m, where m is the total number of routers ( | common parent 6LR_x (Node B) to the destination RAL (Node H), | |||
6LR) | and 1 <= id <= m, where m is the total number of route | |||
that the packet goes through from the common parent (6LR_x) t | rs (6LR) | |||
o destination RAL (Node H). | that the packet goes through, from the common parent (6LR_x) | |||
</t> | to the destination RAL (Node H). | |||
<t> | </t> | |||
<t> | ||||
It is assumed that the two nodes are in the same RPL domain | It is assumed that the two nodes are in the same RPL domain | |||
(that they share the same DODAG root). At the | (that they share the same DODAG root). At the | |||
common parent (Node B), the direction flag ('O' flag) of the RPI is changed (from decreasing ranks to increasing ranks). | common parent (Node B), the direction flag ('O' flag) of the RPI is changed (from decreasing ranks to increasing ranks). | |||
</t> | </t> | |||
<t> | <t> | |||
While the 6LR nodes will update the RPI, no node needs to | While the 6LR nodes will update the RPI, no node needs to | |||
add or remove the RPI, so no IPv6-in-IPv6 headers are | add or remove the RPI, so no IPv6-in-IPv6 headers are | |||
necessary. | necessary. | |||
</t> | </t> | |||
<t> | <t> | |||
The <xref target="Storing-rpl2rpl"/> summarizes what headers are | <xref target="Storing-rpl2rpl" format="default"/> summarizes whi | |||
needed for this use case. | ch headers are needed for this use case. | |||
</t> | </t> | |||
<t> | <table anchor="Storing-rpl2rpl"> | |||
<figure title="SM: Summary of the Use of Headers from RAL to RAL | <name>SM: Summary of the Use of Headers from RAL to RAL</name> | |||
" anchor="Storing-rpl2rpl" align="center"> | <thead> | |||
<artwork><![CDATA[ | <tr> | |||
+-----------+-----+--------+---------+--------+-----+ | <th align="center">Header</th> | |||
| Header | RAL | 6LR_ia | 6LR_x | 6LR_id | RAL | | <th align="center">RAL src</th> | |||
| | src | | (common | | dst | | <th align="center">6LR_ia</th> | |||
| | | | parent) | | | | <th align="center">6LR_x (common parent)</th> | |||
+-----------+-----+--------+---------+--------+-----+ | <th align="center">6LR_id</th> | |||
| Added | RPI | -- | -- | -- | -- | | <th align="center">RAL dst</th> | |||
| headers | | | | | | | </tr> | |||
+-----------+-----+--------+---------+--------+-----+ | </thead> | |||
| Modified | -- | RPI | RPI | RPI | -- | | <tbody> | |||
| headers | | | | | | | <tr> | |||
+-----------+-----+--------+---------+--------+-----+ | <th align="center">Added headers</th> | |||
| Removed | -- | -- | -- | -- | RPI | | <td align="center">RPI</td> | |||
| headers | | | | | | | <td align="center">--</td> | |||
+-----------+-----+--------+---------+--------+-----+ | <td align="center">--</td> | |||
| Untouched | -- | -- | -- | -- | -- | | <td align="center">--</td> | |||
| headers | | | | | | | <td align="center">--</td> | |||
+-----------+-----+--------+---------+--------+-----+ | </tr> | |||
]]></artwork></figure> | <tr> | |||
</t> | <th align="center">Modified headers</th> | |||
</section> | <td align="center">--</td> | |||
<td align="center">RPI</td> | ||||
<!-- section 7.10 --> | <td align="center">RPI</td> | |||
<section anchor="storingRALtononRAL" title="SM: Example of Flow f | <td align="center">RPI</td> | |||
rom RAL to RUL"> | <td align="center">--</td> | |||
<t> | </tr> | |||
In this case the flow comprises: | <tr> | |||
</t> | <th align="center">Removed headers</th> | |||
<t> | <td align="center">--</td> | |||
RAL src (6LN) --> 6LR_ia --> common parent (6LBR - The | <td align="center">--</td> | |||
root-) --> 6LR_id --> RUL (IPv6 dst node) | <td align="center">--</td> | |||
</t> | <td align="center">--</td> | |||
<t> | <td align="center">RPI</td> | |||
For example, a communication flow could be: Node F (RAL) | </tr> | |||
--> Node D --> Node B--> Node A -->Node B --> Node E --> Node G (RUL) | <tr> | |||
</t> | <th align="center">Untouched headers</th> | |||
<t> | <td align="center">--</td> | |||
6LR_ia represents the intermediate routers from source | <td align="center">--</td> | |||
(RAL) to the | <td align="center">--</td> | |||
common parent (the Root), 1 <= ia <= n, where n | <td align="center">--</td> | |||
is the total number of | <td align="center">--</td> | |||
routers (6LR) that the packet goes through from RAL to | </tr> | |||
the Root. | </tbody> | |||
</t> | </table> | |||
<t> | </section> | |||
6LR_id (Node E) represents the intermediate routers fr | <section anchor="storingRALtononRAL" numbered="true" toc="default | |||
om the Root | "> | |||
(Node B) to destination RUL (Node G). In this case, 1 | <name>SM: Example of Flow from RAL to RUL</name> | |||
<= id <= m, | <t> | |||
In this case, the flow comprises: | ||||
</t> | ||||
<t> | ||||
RAL src (6LN) --> 6LR_ia --> common parent (6LBR, | ||||
the root) --> 6LR_id --> RUL (IPv6 dst node) | ||||
</t> | ||||
<t> | ||||
For example, a communication flow could be: | ||||
Node F (RAL) --> Node D --> Node B --> Node A --> Node B --> Node | ||||
E --> Node G (RUL) | ||||
</t> | ||||
<t> | ||||
6LR_ia represents the intermediate routers from the so | ||||
urce (RAL) to the | ||||
common parent (the root), and 1 <= ia <= n, wher | ||||
e n is the total number of | ||||
routers (6LR) that the packet goes through, from the R | ||||
AL to the root. | ||||
</t> | ||||
<t> | ||||
6LR_id (Node E) represents the intermediate routers fr | ||||
om the root | ||||
(Node B) to the destination RUL (Node G). In this cas | ||||
e, 1 <= id <= m, | ||||
where m is the total number of routers (6LR) that the packet goes | where m is the total number of routers (6LR) that the packet goes | |||
through from the Root down to the destination RUL. | through, from the root down to the destination RUL. | |||
</t> | </t> | |||
<t> | <t> | |||
In this case, the packet from the RAL goes to 6LBR bec | In this case, the packet from the RAL goes to the 6LBR | |||
ause the route to the RUL is not injected into the RPL-SM. | because the route to the RUL is not injected into the RPL SM. | |||
Thus, the RAL inserts an RPI (RPI1) addressed to the r | Thus, the RAL inserts an RPI (RPI1) addressed to the r | |||
oot(6LBR). The root does not remove the RPI1 | oot (6LBR). The root does not remove the RPI1 | |||
(the root cannot remove an RPI if there is no encapsul | (the root cannot remove an RPI if there is no encapsul | |||
ation). The root inserts an IPv6-IPv6 encapsulation with an RPI2 | ation). The root inserts an IPv6-in-IPv6 encapsulation with an RPI2 | |||
and sends it to the 6LR parent of the RUL, which remov es the encapsulation and RPI2 before passing the packet to the RUL. | and sends it to the 6LR parent of the RUL, which remov es the encapsulation and RPI2 before passing the packet to the RUL. | |||
</t> | </t> | |||
<!-- section 7.10 | <!-- [auth] section 7.10 | |||
This situation is identical to the previous situation | This situation is identical to the previous situation | |||
<xref target="storingRALtoRAL" /> | <xref target="storingRALtoRAL" /> | |||
</t> --> | </t> --> | |||
<t> | <t> | |||
The <xref target="Storing-rpl2nrpl"/> summarizes what he | <xref target="Storing-rpl2nrpl" format="default"/> summa | |||
aders are needed for this use case. | rizes which headers are needed for this use case. | |||
</t> | </t> | |||
<t> | <table anchor="Storing-rpl2nrpl"> | |||
<figure title="SM: Summary of the Use of Headers from R | <name>SM: Summary of the Use of Headers from RAL to RUL</name> | |||
AL to RUL" anchor="Storing-rpl2nrpl" align="center"> | <thead> | |||
<artwork><![CDATA[ | <tr> | |||
+----------+-------+-------+---------+---------+---------+---------+ | <th align="center">Header</th> | |||
| Header | RAL |6LR_ia | 6LBR | 6LR_id | 6LR_m | RUL | | <th align="center">RAL src</th> | |||
| | src | | | | | dst | | <th align="center">6LR_ia</th> | |||
| | node | | | | | node | | <th align="center">6LBR</th> | |||
+----------+-------+-------+---------+---------+---------+---------+ | <th align="center">6LR_id</th> | |||
| Added | | | IP6-IP6 | -- | -- | -- | | <th align="center">6LR_m</th> | |||
| headers | RPI1 | -- | (RPI2) | | | | | <th align="center">RUL dst</th> | |||
| | | | | | | | | </tr> | |||
+----------+-------+-------+---------+---------+---------+---------+ | </thead> | |||
| Modified | -- | | -- | | | -- | | <tbody> | |||
| headers | | RPI1 | | RPI2 | -- | | | <tr> | |||
| | | | | | | | | <th align="center">Added headers</th> | |||
+----------+-------+-------+---------+---------+---------+---------+ | <td align="center">RPI1</td> | |||
| Removed | -- | -- | | -- | IP6-IP6 | -- | | <td align="center">--</td> | |||
| headers | | | -- | | (RPI2) | | | <td align="center">IP6-IP6 (RPI2)</td> | |||
| | | | | | | | | <td align="center">--</td> | |||
+----------+-------+-------+---------+---------+---------+---------+ | <td align="center">--</td> | |||
|Untouched | -- | -- | RPI1 | RPI1 | RPI1 | RPI1 | | <td align="center">--</td> | |||
| headers | | | | | |(Ignored)| | </tr> | |||
| | | | | | | | | <tr> | |||
+----------+-------+-------+---------+---------+---------+---------+ | <th align="center">Modified headers</th> | |||
]]></artwork></figure> | <td align="center">--</td> | |||
</t> | <td align="center">RPI1</td> | |||
</section> | <td align="center">--</td> | |||
<td align="center">RPI2</td> | ||||
<section anchor="storingnotRALtoRAL" title="SM: Example of Flow f | <td align="center">--</td> | |||
rom RUL to RAL"> | <td align="center">--</td> | |||
<t> | </tr> | |||
In this case the flow comprises: | <tr> | |||
</t> | <th align="center">Removed headers</th> | |||
<t> | <td align="center">--</td> | |||
RUL (IPv6 src node) --> 6LR_ia --> 6LBR --> 6LR_id --> RAL d | <td align="center">--</td> | |||
st (6LN) | <td align="center">--</td> | |||
</t> | <td align="center">--</td> | |||
<t> | <td align="center">IP6-IP6 (RPI2)</td> | |||
For example, a communication flow could be: Node G (RUL)--> Nod | <td align="center">--</td> | |||
e E --> Node B --> Node A --> Node B --> Node D --> Node F (RAL) | </tr> | |||
</t> | <tr> | |||
<t> | <th align="center">Untouched headers</th> | |||
6LR_ia (Node E) represents the intermediate routers from sour | <td align="center">--</td> | |||
ce (RUL) (Node G) to the root (Node A). | <td align="center">--</td> | |||
<td align="center">RPI1</td> | ||||
<td align="center">RPI1</td> | ||||
<td align="center">RPI1</td> | ||||
<td align="center">RPI1 (ignored)</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | ||||
<section anchor="storingnotRALtoRAL" numbered="true" toc="default"> | ||||
<name>SM: Example of Flow from RUL to RAL</name> | ||||
<t> | ||||
In this case, the flow comprises: | ||||
</t> | ||||
<t> | ||||
RUL (IPv6 src node) --> 6LR_ia --> 6LBR --> 6LR_id - | ||||
-> RAL dst (6LN) | ||||
</t> | ||||
<t> | ||||
For example, a communication flow could be: | ||||
Node G (RUL) --> Node E --> Node B --> Node A --> Node B --> Node | ||||
D --> Node F (RAL) | ||||
</t> | ||||
<t> | ||||
6LR_ia (Node E) represents the intermediate routers from the | ||||
source (RUL) (Node G) to the root (Node A). | ||||
In this case, 1 <= ia <= n, where n is the total number of routers (6LR) | In this case, 1 <= ia <= n, where n is the total number of routers (6LR) | |||
that the packet goes through from source to the root. | that the packet goes through, from the source to the root. | |||
</t> | </t> | |||
<t> | <t> | |||
6LR_id represents the intermediate routers from the root (Nod | 6LR_id represents the intermediate routers from the root (Nod | |||
e A) to destination RAL (Node F). | e A) to the destination RAL (Node F). | |||
In this case, 1 <= id <= m, where m is the total number of routers (6LR) | In this case, 1 <= id <= m, where m is the total number of routers (6LR) | |||
that the packet goes through from the root to the destination | that the packet goes through, from the root to the destinatio | |||
RAL. | n RAL. | |||
</t> | </t> | |||
<t> | <t> | |||
The 6LR_1 (Node E) receives the packet from the RUL (Node G) and | The 6LR_1 (Node E) receives the packet from the RUL (Node G) and | |||
inserts the RPI (RPI1) encapsulated in a IPv6-in-IPv6 header to the root. | inserts the RPI (RPI1) encapsulated in an IPv6-in-IPv6 header to the root. | |||
The root removes the outer header including the RPI (RPI1) an d | The root removes the outer header including the RPI (RPI1) an d | |||
inserts a new RPI (RPI2) addressed to the destination RAL (No de F). | inserts a new RPI (RPI2) addressed to the destination RAL (No de F). | |||
</t> | </t> | |||
<t> | <t> | |||
The <xref target="Storing-notrpl2rpl"/> shows the table that su | <xref target="Storing-notrpl2rpl" format="default"/> summarizes | |||
mmarizes what headers are needed for this use case. | which headers are needed for this use case. | |||
</t> | </t> | |||
<t> | <table anchor="Storing-notrpl2rpl"> | |||
<figure title="SM: Summary of the use of headers from RUL to RA | <name>SM: Summary of the Use of Headers from RUL to RAL</name> | |||
L." anchor="Storing-notrpl2rpl" align="center"> | <thead> | |||
<artwork><![CDATA[ | <tr> | |||
+-----------+------+---------+---------+---------+---------+---------+ | <th align="center">Header</th> | |||
| Header | RUL | 6LR_1 | 6LR_ia | 6LBR | 6LR_id | RAL | | <th align="center">RUL src</th> | |||
| | src | | | | | dst | | <th align="center">6LR_1</th> | |||
| | node | | | | | node | | <th align="center">6LR_ia</th> | |||
+-----------+------+---------+---------+---------+---------+---------+ | <th align="center">6LBR</th> | |||
| Added | -- | IP6-IP6 | -- | IP6-IP6 | -- | -- | | <th align="center">6LR_id</th> | |||
| headers | | (RPI1) | | (RPI2) | | | | <th align="center">RAL dst</th> | |||
| | | | | | | | | </tr> | |||
+-----------+------+---------+---------+---------+---------+---------+ | </thead> | |||
| Modified | -- | | | -- | | -- | | <tbody> | |||
| headers | | -- | RPI1 | | RPI2 | | | <tr> | |||
| | | | | | | | | <th align="center">Added headers</th> | |||
+-----------+------+---------+---------+---------+---------+---------+ | <td align="center">--</td> | |||
| Removed | -- | | -- | IP6-IP6 | -- | IP6-IP6 | | <td align="center">IP6-IP6 (RPI1)</td> | |||
| headers | | -- | | (RPI1) | | (RPI2) | | <td align="center">--</td> | |||
| | | | | | | | | <td align="center">IP6-IP6 (RPI2)</td> | |||
+-----------+------+---------+---------+---------+---------+---------+ | <td align="center">--</td> | |||
| Untouched | -- | -- | -- | -- | -- | -- | | <td align="center">--</td> | |||
| headers | | | | | | | | </tr> | |||
+-----------+------+---------+---------+---------+---------+---------+ | <tr> | |||
]]></artwork></figure> | <th align="center">Modified headers</th> | |||
</t> | <td align="center">--</td> | |||
</section> | <td align="center">--</td> | |||
<td align="center">RPI1</td> | ||||
<section title="SM: Example of Flow from RUL to RUL"> | <td align="center">--</td> | |||
<t> | <td align="center">RPI2</td> | |||
In this case the flow comprises: | <td align="center">--</td> | |||
</t> | </tr> | |||
<t> | <tr> | |||
RUL (IPv6 src node)--> 6LR_1--> 6LR_ia --> 6LBR --> 6LR_id -- | <th align="center">Removed headers</th> | |||
> RUL (IPv6 dst node) | <td align="center">--</td> | |||
</t> | <td align="center">--</td> | |||
<t> | <td align="center">--</td> | |||
For example, a communication flow could be: Node G (RUL src)--> | <td align="center">IP6-IP6 (RPI1)</td> | |||
Node E --> Node B --> Node A (root) --> Node C --> Node J (RUL dst) | <td align="center">--</td> | |||
</t> | <td align="center">IP6-IP6 (RPI2)</td> | |||
<t> | </tr> | |||
Internal nodes 6LR_ia (e.g: Node E or Node B) is the | <tr> | |||
<th align="center">Untouched headers</th> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | ||||
<section numbered="true" toc="default"> | ||||
<name>SM: Example of Flow from RUL to RUL</name> | ||||
<t> | ||||
In this case, the flow comprises: | ||||
</t> | ||||
<t> | ||||
RUL (IPv6 src node) --> 6LR_1 --> 6LR_ia --> 6LBR -- | ||||
> 6LR_id --> RUL (IPv6 dst node) | ||||
</t> | ||||
<t> | ||||
For example, a communication flow could be: | ||||
Node G (RUL src) --> Node E --> Node B --> Node A (root) --> Node C | ||||
--> Node J (RUL dst) | ||||
</t> | ||||
<t> | ||||
Internal nodes 6LR_ia (e.g., Node E or Node B) is the | ||||
intermediate router from the RUL source (Node G) | intermediate router from the RUL source (Node G) | |||
to the root (6LBR) (Node A). | to the root (6LBR) (Node A). | |||
In this case, 1 <= ia <= n, where n is the total number of routers (6LR) | In this case, 1 <= ia <= n, where n is the total number of routers (6LR) | |||
that the packet goes through from the RUL to the root. 6LR_1 | that the packet goes through, from the RUL to the root. 6LR_1 | |||
refers when ia=1. | applies when ia=1. | |||
</t> | </t> | |||
<t> | <t> | |||
6LR_id (Node C) represents the intermediate routers from the root | 6LR_id (Node C) represents the intermediate routers from the root | |||
(Node A) to the destination RUL dst node (Node J). | (Node A) to the destination RUL (Node J). | |||
In this case, 1 <= id <= m, where m is the total number of routers (6LR) | In this case, 1 <= id <= m, where m is the total number of routers (6LR) | |||
that the packet goes through from the root to destination RU L. | that the packet goes through, from the root to the destinatio n RUL. | |||
</t> | </t> | |||
<t> | <t> | |||
The 6LR_1 (Node E) receives the packet from the | The 6LR_1 (Node E) receives the packet from the | |||
RUL (Node G) and inserts the RPI (RPI), | RUL (Node G) and adds the RPI (RPI1) | |||
encapsulated in an IPv6-in-IPv6 header directed to the root. | in an IPv6-in-IPv6 encapsulation directed to the root. | |||
The root removes the outer header including the RPI (RPI1) an d | The root removes the outer header including the RPI (RPI1) an d | |||
inserts a new RPI (RPI2) addressed to the 6LR father of the R | inserts a new RPI (RPI2) addressed to the 6LR parent of the R | |||
UL. | UL. | |||
</t> | </t> | |||
<t> | <t> | |||
The <xref target="Storing-notrpl2notrpl"/> shows the table that | <xref target="Storing-notrpl2notrpl" format="default"/> summari | |||
summarizes what headers are needed for this use case. | zes which headers are needed for this use case. | |||
</t> | ||||
<t> | ||||
<figure title="SM: Summary of the use of headers from RUL to R | ||||
UL" anchor="Storing-notrpl2notrpl" align="center"> | ||||
<artwork><![CDATA[ | ||||
+---------+----+-------------+--------+---------+--------+-------+---+ | ||||
| Header |RUL | 6LR_1 | 6LR_ia | 6LBR | 6LR_id |6LR_n |RUL| | ||||
| |src | | | | | |dst| | ||||
| | | | | | | | | | ||||
+---------+----+-------------+--------+---------+--------+-------+---+ | ||||
| Added | -- |IP6-IP6(RPI1)| -- | IP6-IP6 | -- | -- | --| | ||||
| Headers | | | | (RPI2) | | | | | ||||
+---------+----+-------------+--------+---------+--------+-------+---+ | ||||
|Modified | -- | -- | | -- | | -- | --| | ||||
|headers | | | RPI1 | | RPI2 | | | | ||||
+---------+----+-------------+--------+---------+--------+-------+---+ | ||||
| Removed | -- | -- | -- | IP6-IP6 | -- |IP6-IP6| --| | ||||
| headers | | | | (RPI1) | | (RPI2)| | | ||||
+---------+----+-------------+--------+---------+--------+-------+---+ | ||||
|Untouched| -- | -- | -- | -- | -- | -- | --| | ||||
| headers | | | | | | | | | ||||
+---------+----+-------------+--------+---------+--------+-------+---+ | ||||
]]></artwork></figure> | ||||
</t> | ||||
</section> | ||||
</section> | ||||
</section> | ||||
<section title="Non Storing mode"> | ||||
<t> | </t> | |||
In Non Storing Mode (Non-SM) (fully source routed), | <table anchor="Storing-notrpl2notrpl"> | |||
<name>SM: Summary of the Use of Headers from RUL to RUL</name> | ||||
<thead> | ||||
<tr> | ||||
<th align="center">Header</th> | ||||
<th align="center">RUL src</th> | ||||
<th align="center">6LR_1</th> | ||||
<th align="center">6LR_ia</th> | ||||
<th align="center">6LBR</th> | ||||
<th align="center">6LR_id</th> | ||||
<th align="center">6LR_n</th> | ||||
<th align="center">RUL dst</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<th align="center">Added headers</th> | ||||
<td align="center">--</td> | ||||
<td align="center">IP6-IP6 (RPI1)</td> | ||||
<td align="center">--</td> | ||||
<td align="center">IP6-IP6 (RPI1)</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
<tr> | ||||
<th align="center">Modified headers</th> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">RPI1</td> | ||||
<td align="center">--</td> | ||||
<td align="center">RPI2</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
<tr> | ||||
<th align="center">Removed headers</th> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">IP6-IP6 (RPI1)</td> | ||||
<td align="center">--</td> | ||||
<td align="center">IP6-IP6 (RPI2)</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
<tr> | ||||
<th align="center">Untouched headers</th> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | ||||
</section> | ||||
</section> | ||||
<section anchor="sec_non-sm" numbered="true" toc="default"> | ||||
<name>Non-Storing Mode</name> | ||||
<t> | ||||
In Non-Storing mode (Non-SM) (fully source routed), | ||||
the 6LBR (DODAG root) has complete knowledge about the | the 6LBR (DODAG root) has complete knowledge about the | |||
connectivity of all DODAG nodes, and all traffic flows | connectivity of all DODAG nodes and all traffic flows | |||
through the root node. Thus, there is no need for all nodes to | through the root node. Thus, there is no need for all nodes to | |||
know about the existence of RPL-unaware nodes. | know about the existence of RPL-unaware nodes. | |||
Only the 6LBR needs to act if compensation is necessary for not-RPL | Only the 6LBR needs to act if compensation is necessary for | |||
aware receivers. | RPL-unaware receivers. | |||
</t> | </t> | |||
<t> | <t> | |||
The table (<xref target="fig_table_non-storing" />) summarizes what h | <xref target="fig_table_non-storing" format="default"/> summarizes wh | |||
eaders are needed in the following | ich headers are needed in the following | |||
scenarios, and indicates when the RPI, RH3 and IPv6-in-IPv6 header | scenarios and indicates when the RPI, RH3, and IPv6-in-IPv6 header | |||
are to be inserted. The last column depicts the | are to be inserted. The last column depicts the | |||
target destination of the IPv6-in-IPv6 header: 6LN (indicated by "RAL "), 6LR (parent of a RUL) or the root. | target destination of the IPv6-in-IPv6 header: 6LN (indicated by "RAL "), 6LR (parent of a RUL), or the root. | |||
In cases where no IPv6-in-IPv6 header is needed, the column indicates "No". | In cases where no IPv6-in-IPv6 header is needed, the column indicates "No". | |||
There is no expectation on RPL that RPI can be omitted, because it is needed for routing, quality of service and compression. | There is no expectation on RPL that RPI can be omitted because it is needed for routing, quality of service, and compression. | |||
This specification expects that an RPI is always present. | This specification expects that an RPI is always present. | |||
The term "may(up)" means that the IPv6-in-IPv6 header may be necessar | The term "may(up)" means that the IPv6-in-IPv6 header may be necessar | |||
y in the upwards direction. | y in the Upward direction. | |||
The term "must(up)" means that the IPv6-in-IPv6 header must be presen | The term "must(up)" means that the IPv6-in-IPv6 header must be presen | |||
t in the upwards direction. | t in the Upward direction. | |||
The term "must(down)" means that the IPv6-in-IPv6 header must be pres | The term "must(down)" means that the IPv6-in-IPv6 header must be pres | |||
ent in the downward direction. | ent in the Downward direction. | |||
</t> | </t> | |||
<t> | <t> | |||
The leaf can be a router 6LR or a host, both indicated as 6LN (<xref | The leaf can be a router 6LR or a host, both indicated as 6LN (<xref | |||
target="fig_CommonTopology"/>). In the table (<xref target="fig_table_non-storin | target="fig_CommonTopology" format="default"/>). In <xref target="fig_table_non- | |||
g" />) the | storing" format="default"/>, the | |||
(1) indicates a 6tisch case <xref target="RFC8180"/>, where the RPI m | (1) indicates a 6TiSCH case <xref target="RFC8180" format="default"/> | |||
ay still be needed | , where the RPI may still be needed | |||
for the RPLInstanceID to be available for priority/channel selection a t each hop. | for the RPLInstanceID to be available for priority/channel selection a t each hop. | |||
</t> | </t> | |||
<t> | <table anchor="fig_table_non-storing"> | |||
<name>Headers Needed in Non-Storing Mode: RPI, RH3, IPv6-in-IPv6 Encapsulatio | ||||
<figure title="Table that shows headers needed in Non-Storing mode: RP | n</name> | |||
I, RH3, IPv6-in-IPv6 encapsulation." anchor="fig_table_non-storing" align="cente | <thead> | |||
r"> | <tr> | |||
<artwork><![CDATA[ | <th align="center">Interaction between</th> | |||
+--- ------------+-------------+-----+-----+--------------+----------+ | <th align="center">Use Case</th> | |||
| Interaction | Use Case | RPI | RH3 | IPv6-in-IPv6 | IP-in-IP | | <th align="center">RPI</th> | |||
| between | | | | | dst | | <th align="center">RH3</th> | |||
+----------------+-------------+-----+-----+--------------+----------+ | <th align="center">IPv6-in-IPv6</th> | |||
| | RAL to root | Yes | No | No | No | | <th align="center">IP-in-IP dst</th> | |||
| +-------------+-----+-----+--------------+----------+ | </tr> | |||
| Leaf - Root | root to RAL | Yes | Yes | No | No | | </thead> | |||
| +-------------+-----+-----+--------------+----------+ | <tbody> | |||
| | root to RUL | Yes | Yes | No | 6LR | | <tr> | |||
| | | (1) | | | | | <th align="center" rowspan="4">Leaf - Root</th> | |||
| +-------------+-----+-----+--------------+----------+ | <td align="center">RAL to root</td> | |||
| | RUL to root | Yes | No | must | root | | <td align="center">Yes</td> | |||
+----------------+-------------+-----+-----+--------------+----------+ | <td align="center">No</td> | |||
| | RAL to Int | Yes | No | may(up) | root | | <td align="center">No</td> | |||
| +-------------+-----+-----+--------------+----------+ | <td align="center">No</td> | |||
|Leaf - Internet | Int to RAL | Yes | Yes | must | RAL | | </tr> | |||
| +-------------+-----+-----+--------------+----------+ | <tr> | |||
| | RUL to Int | Yes | No | must | root | | <td align="center">root to RAL</td> | |||
| +-------------+-----+-----+--------------+----------+ | <td align="center">Yes</td> | |||
| | Int to RUL | Yes | Yes | must | 6LR | | <td align="center">Yes</td> | |||
+----------------+-------------+-----+-----+--------------+----------+ | <td align="center">No</td> | |||
| | RAL to RAL | Yes | Yes | may(up) | root | | <td align="center">No</td> | |||
| | | | +--------------+----------+ | </tr> | |||
| | | | | must(down) | RAL | | <tr> | |||
| Leaf - Leaf +-------------+-----+-----+--------------+----------+ | <td align="center">root to RUL</td> | |||
| | RAL to RUL | Yes | Yes | may(up) | root | | <td align="center">Yes (1)</td> | |||
| | | | +--------------+----------+ | <td align="center">Yes</td> | |||
| | | | | must(down) | 6LR | | <td align="center">No</td> | |||
| +-------------+-----+-----+--------------+----------+ | <td align="center">6LR</td> | |||
| | RUL to RAL | Yes | Yes | must(up) | root | | </tr> | |||
| | | | +--------------+----------+ | <tr> | |||
| | | | | must(down) | RAL | | <td align="center">RUL to root</td> | |||
| +-------------+-----+-----+--------------+----------+ | <td align="center">Yes</td> | |||
| | RUL to RUL | Yes | Yes | must(up) | root | | <td align="center">No</td> | |||
| | | | +--------------+----------+ | <td align="center">must</td> | |||
| | | | | must(down) | 6LR | | <td align="center">root</td> | |||
+----------------+-------------+-----+-----+--------------+----------+ | </tr> | |||
]]></artwork></figure> | <tr> | |||
</t> | <th align="center" rowspan="4">Leaf - Internet</th> | |||
<td align="center">RAL to Int</td> | ||||
<section title="Non-Storing Mode: Interaction between Leaf and Root"> | <td align="center">Yes</td> | |||
<td align="center">No</td> | ||||
<t> | <td align="center">may(up)</td> | |||
In this section is described the communication flow | <td align="center">root</td> | |||
in Non Storing Mode (Non-SM) between, | </tr> | |||
</t> | <tr> | |||
<t> | <td align="center">Int to RAL</td> | |||
<list> | <td align="center">Yes</td> | |||
<t> | <td align="center">Yes</td> | |||
<td align="center">must</td> | ||||
<td align="center">RAL</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="center">RUL to Int</td> | ||||
<td align="center">Yes</td> | ||||
<td align="center">No</td> | ||||
<td align="center">must</td> | ||||
<td align="center">root</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="center">Int to RUL</td> | ||||
<td align="center">Yes</td> | ||||
<td align="center">Yes</td> | ||||
<td align="center">must</td> | ||||
<td align="center">6LR</td> | ||||
</tr> | ||||
<tr> | ||||
<th align="center" rowspan="8">Leaf - Leaf</th> | ||||
<td align="center" rowspan="2">RAL to RAL</td> | ||||
<td align="center" rowspan="2">Yes</td> | ||||
<td align="center" rowspan="2">Yes</td> | ||||
<td align="center">may(up)</td> | ||||
<td align="center">root</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="center">must(down)</td> | ||||
<td align="center">RAL</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="center" rowspan="2">RAL to RUL</td> | ||||
<td align="center" rowspan="2">Yes</td> | ||||
<td align="center" rowspan="2">Yes</td> | ||||
<td align="center">may(up)</td> | ||||
<td align="center">root</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="center">must(down)</td> | ||||
<td align="center">6LR</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="center" rowspan="2">RUL to RAL</td> | ||||
<td align="center" rowspan="2">Yes</td> | ||||
<td align="center" rowspan="2">Yes</td> | ||||
<td align="center">must(up)</td> | ||||
<td align="center">root</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="center">must(down)</td> | ||||
<td align="center">RAL</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="center" rowspan="2">RUL to RUL</td> | ||||
<td align="center" rowspan="2">Yes</td> | ||||
<td align="center" rowspan="2">Yes</td> | ||||
<td align="center">must(up)</td> | ||||
<td align="center">root</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="center">must(down)</td> | ||||
<td align="center">6LR</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<section numbered="true" toc="default"> | ||||
<name>Non-Storing Mode: Interaction between Leaf and Root</name> | ||||
<t> | ||||
This section describes the communication flow | ||||
in Non-Storing mode (Non-SM) between the following: | ||||
</t> | ||||
<ul empty="true" spacing="normal"> | ||||
<li> | ||||
RAL to root | RAL to root | |||
</t> | </li> | |||
<t> | <li> | |||
root to RAL | root to RAL | |||
</t> | </li> | |||
<t> | <li> | |||
RUL to root | RUL to root | |||
</t> | </li> | |||
<t> | <li> | |||
root to RUL | root to RUL | |||
</t> | </li> | |||
</list> | </ul> | |||
</t> | <section numbered="true" toc="default"> | |||
<name>Non-SM: Example of Flow from RAL to Root</name> | ||||
<section title="Non-SM: Example of Flow from RAL to root"> | <t> | |||
<t> | In Non-Storing mode, the leaf node uses default | |||
In non-storing mode the leaf node uses default | ||||
routing to send traffic to the root. The RPI must be included | routing to send traffic to the root. The RPI must be included | |||
since it contains the rank information, which is used to | since it contains the Rank information, which is used to | |||
avoid/detect loops. | avoid and/or detect loops. | |||
</t> | </t> | |||
<t> | ||||
<t> | RAL (6LN) --> 6LR_i --> root(6LBR) | |||
RAL (6LN) --> 6LR_i --> root(6LBR) | </t> | |||
</t> | <t> | |||
<t> | For example, a communication flow could be: | |||
For example, a communication flow could be: Node F --> Node D | Node F --> Node D --> Node B --> Node A (root) | |||
--> Node B --> Node A (root) | </t> | |||
</t> | <t> | |||
<t> | 6LR_i represents the intermediate routers from the source to | |||
6LR_i represents the intermediate routers from source to dest | the destination. | |||
ination. | ||||
In this case, 1 <= i <= n, where n is the total number of routers (6LR) | In this case, 1 <= i <= n, where n is the total number of routers (6LR) | |||
that the packet goes through from source (RAL) to destination | that the packet goes through, from the source (RAL) to the de | |||
(6LBR). | stination (6LBR). | |||
</t> | </t> | |||
<t> | <t> | |||
This situation is the same case as storing mode. | This situation is the same case as Storing mode. | |||
</t> | </t> | |||
<t> | <t> | |||
The <xref target="NonStoring-summary-headers"/> summarizes what | <xref target="NonStoring-summary-headers" format="default"/> su | |||
headers are needed for this use case. | mmarizes which headers are needed for this use case. | |||
</t> | </t> | |||
<table anchor="NonStoring-summary-headers"> | ||||
<t> | <name>Non-SM: Summary of the Use of Headers from RAL to Root</name> | |||
<figure title="Non-SM: Summary of the use of headers from RAL t | <thead> | |||
o root" anchor="NonStoring-summary-headers" align="center"> | <tr> | |||
<artwork><![CDATA[ | <th align="center">Header</th> | |||
+-----------+-----+-------+------+ | <th align="center">RAL src</th> | |||
| Header | RAL | 6LR_i | 6LBR | | <th align="center">6LR_i</th> | |||
| | src | | dst | | <th align="center">6LBR dst</th> | |||
+-----------+-----+-------+------+ | </tr> | |||
| Added | RPI | -- | -- | | </thead> | |||
| headers | | | | | <tbody> | |||
+-----------+-----+-------+------+ | <tr> | |||
| Modified | -- | RPI | -- | | <th align="center">Added headers</th> | |||
| headers | | | | | <td align="center">RPI</td> | |||
+-----------+-----+-------+------+ | <td align="center">--</td> | |||
| Removed | -- | -- | RPI | | <td align="center">--</td> | |||
| headers | | | | | </tr> | |||
+-----------+-----+-------+------+ | <tr> | |||
| Untouched | -- | -- | -- | | <th align="center">Modified headers</th> | |||
| headers | | | | | <td align="center">--</td> | |||
+-----------+-----+-------+------+ | <td align="center">RPI</td> | |||
]]></artwork></figure> | <td align="center">--</td> | |||
</t> | </tr> | |||
</section> | <tr> | |||
<th align="center">Removed headers</th> | ||||
<section anchor="nsroottoRAL" title=" Non-SM: Example of Flow fro | <td align="center">--</td> | |||
m root to RAL"> | <td align="center">--</td> | |||
<t> | <td align="center">RPI</td> | |||
In this case the flow comprises: | </tr> | |||
</t> | <tr> | |||
<t> | <th align="center">Untouched headers</th> | |||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | ||||
<section anchor="nsroottoRAL" numbered="true" toc="default"> | ||||
<name>Non-SM: Example of Flow from Root to RAL</name> | ||||
<t> | ||||
In this case, the flow comprises: | ||||
</t> | ||||
<t> | ||||
root (6LBR) --> 6LR_i --> RAL (6LN) | root (6LBR) --> 6LR_i --> RAL (6LN) | |||
</t> | </t> | |||
<t> | <t> | |||
For example, a communication flow could be: Node A (root) --> N | For example, a communication flow could be: | |||
ode B --> Node D --> Node F | Node A (root) --> Node B --> Node D --> Node F | |||
</t> | </t> | |||
<t> | <t> | |||
6LR_i represents the intermediate routers from source to dest | 6LR_i represents the intermediate routers from the source to | |||
ination. | the destination. | |||
In this case, 1 <= i <= n, where n is the total number of routers (6LR) | In this case, 1 <= i <= n, where n is the total number of routers (6LR) | |||
that the packet goes through from source (6LBR) to destinatio | that the packet goes through, from the source (6LBR) to the d | |||
n (RAL). | estination (RAL). | |||
</t> | </t> | |||
<t> | <t> | |||
The 6LBR inserts an RH3, and an RPI. | The 6LBR inserts an RH3 and an RPI. | |||
No IPv6-in-IPv6 header is necessary as the traffic | No IPv6-in-IPv6 header is necessary as the traffic | |||
originates with a RPL aware node, the 6LBR. | originates with a RPL-aware node, the 6LBR. | |||
The destination is known to be RPL-aware because the root | The destination is known to be RPL aware because the root | |||
knows the whole topology in non-storing mode. | knows the whole topology in Non-Storing mode. | |||
</t> | </t> | |||
<t> | <t> | |||
The <xref target="NonStoring-root2rpl"/> summarizes what header | <xref target="NonStoring-root2rpl" format="default"/> summarize | |||
s are needed for this use case. | s which headers are needed for this use case. | |||
</t> | </t> | |||
<table anchor="NonStoring-root2rpl"> | ||||
<t> | <name>Non-SM: Summary of the Use of Headers from Root to RAL</name> | |||
<figure title="Non-SM: Summary of the use of headers from root | <thead> | |||
to RAL" anchor="NonStoring-root2rpl" align="center"> | <tr> | |||
<artwork><![CDATA[ | <th align="center">Header</th> | |||
+-----------+----------+----------+----------+ | <th align="center">6LBR src</th> | |||
| Header | 6LBR | 6LR_i | RAL | | <th align="center">6LR_i</th> | |||
| | src | | dst | | <th align="center">RAL dst</th> | |||
+-----------+----------+----------+----------+ | </tr> | |||
| Added | RPI, RH3 | -- | -- | | </thead> | |||
| headers | | | | | <tbody> | |||
+-----------+----------+----------+----------+ | <tr> | |||
| Modified | -- | RPI, RH3 | -- | | <th align="center">Added headers</th> | |||
| headers | | | | | <td align="center">RPI, RH3</td> | |||
+-----------+----------+----------+----------+ | <td align="center">--</td> | |||
| Removed | -- | -- | RPI, RH3 | | <td align="center">--</td> | |||
| headers | | | | | </tr> | |||
+-----------+----------+----------+----------+ | <tr> | |||
| Untouched | -- | -- | -- | | <th align="center">Modified headers</th> | |||
| headers | | | | | <td align="center">--</td> | |||
+-----------+----------+----------+----------+ | <td align="center">RPI, RH3</td> | |||
]]></artwork></figure> | <td align="center">--</td> | |||
</t> | </tr> | |||
</section> | <tr> | |||
<th align="center">Removed headers</th> | ||||
<section title=" Non-SM: Example of Flow from root to RUL"> | <td align="center">--</td> | |||
<t> | <td align="center">--</td> | |||
In this case the flow comprises: | <td align="center">RPI, RH3</td> | |||
</t> | </tr> | |||
<t> | <tr> | |||
root (6LBR) --> 6LR_i --> RUL (IPv6 dst node) | <th align="center">Untouched headers</th> | |||
</t> | <td align="center">--</td> | |||
<t> | <td align="center">--</td> | |||
For example, a communication flow could be: Node A (root | <td align="center">--</td> | |||
) --> Node B --> Node E --> Node G (RUL) | </tr> | |||
</t> | </tbody> | |||
<t> | </table> | |||
6LR_i represents the intermediate routers from source | </section> | |||
to destination. | <section numbered="true" toc="default"> | |||
<name>Non-SM: Example of Flow from Root to RUL</name> | ||||
<t> | ||||
In this case, the flow comprises: | ||||
</t> | ||||
<t> | ||||
root (6LBR) --> 6LR_i --> RUL (IPv6 dst no | ||||
de) | ||||
</t> | ||||
<t> | ||||
For example, a communication flow could be: | ||||
Node A (root) --> Node B --> Node E --> Node G (RUL) | ||||
</t> | ||||
<t> | ||||
6LR_i represents the intermediate routers from the sou | ||||
rce to the destination. | ||||
In this case, 1 <= i <= n, where n is the total number of routers (6LR) | In this case, 1 <= i <= n, where n is the total number of routers (6LR) | |||
that the packet goes through from source (6LBR) to des | that the packet goes through, from the source (6LBR) t | |||
tination (RUL). | o the destination (RUL). | |||
</t> | </t> | |||
<t> | <t> | |||
In the 6LBR, the RH3 is added; it is then modified at each | In the 6LBR, the RH3 is added; it is then modified at each | |||
intermediate 6LR (6LR_1 and so on), and it is fully co nsumed in the | intermediate 6LR (6LR_1 and so on), and it is fully co nsumed in the | |||
last 6LR (6LR_n) but is left in place. When the RPI i s added, the | last 6LR (6LR_n) but is left in place. When the RPI i s added, the | |||
RUL, which does not understand the RPI, will ignore it (per | RUL, which does not understand the RPI, will ignore it (per | |||
<xref target="RFC8200"/>); thus, encapsulation is not | <xref target="RFC8200" format="default"/>); thus, enca | |||
necessary. | psulation is not necessary. | |||
</t> | </t> | |||
<t> | <t> | |||
The <xref target="NonStoring-root2notrpl"/> depicts the | <xref target="NonStoring-root2notrpl" format="default"/> | |||
table that summarizes what headers are needed for this use case. | summarizes which headers are needed for this use case. | |||
</t> | </t> | |||
<t> | <table anchor="NonStoring-root2notrpl"> | |||
<figure title=" Non-SM: Summary of the use of headers fr | <name>Non-SM: Summary of the Use of Headers from Root to RUL</name> | |||
om root to RUL" anchor="NonStoring-root2notrpl" align="center"> | <thead> | |||
<artwork><![CDATA[ | <tr> | |||
+-----------+----------+--------------+----------------+----------+ | <th align="center">Header</th> | |||
| Header | 6LBR | 6LR_i | 6LR_n | RUL | | <th align="center">6LBR src</th> | |||
| | src | i=(1,..,n-1) | | dst | | <th align="center">6LR_i i=(1,..,n-1)</th> | |||
| | | | | | | <th align="center">6LR_n</th> | |||
+-----------+----------+--------------+----------------+----------+ | <th align="center">RUL dst</th> | |||
| Added | RPI, RH3 | -- | -- | -- | | </tr> | |||
| headers | | | | | | </thead> | |||
+-----------+----------+--------------+----------------+----------+ | <tbody> | |||
| Modified | -- | RPI, RH3 | RPI, | -- | | <tr> | |||
| headers | | | RH3(consumed) | | | <th align="center">Added headers</th> | |||
+-----------+----------+--------------+----------------+----------+ | <td align="center">RPI, RH3</td> | |||
| Removed | -- | -- | -- | -- | | <td align="center">--</td> | |||
| headers | | | | | | <td align="center">--</td> | |||
+-----------+----------+--------------+----------------+----------+ | <td align="center">--</td> | |||
| Untouched | -- | -- | -- | RPI, RH3 | | </tr> | |||
| headers | | | | (both | | <tr> | |||
| | | | | ignored) | | <th align="center">Modified headers</th> | |||
+-----------+----------+--------------+----------------+----------+ | <td align="center">--</td> | |||
]]></artwork></figure> | <td align="center">RPI, RH3</td> | |||
</t> | <td align="center">RPI, RH3(consumed)</td> | |||
</section> | <td align="center">--</td> | |||
</tr> | ||||
<section title="Non-SM: Example of Flow from RUL to root"> | <tr> | |||
<t> | <th align="center">Removed headers</th> | |||
In this case the flow comprises: | <td align="center">--</td> | |||
</t> | <td align="center">--</td> | |||
<t> | <td align="center">--</td> | |||
<td align="center">--</td> | ||||
</tr> | ||||
<tr> | ||||
<th align="center">Untouched headers</th> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">RPI, RH3 (both ignored)</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | ||||
<section numbered="true" toc="default"> | ||||
<name>Non-SM: Example of Flow from RUL to Root</name> | ||||
<t> | ||||
In this case, the flow comprises: | ||||
</t> | ||||
<t> | ||||
RUL (IPv6 src node) --> 6LR_1 --> 6LR_i --> root | RUL (IPv6 src node) --> 6LR_1 --> 6LR_i -- | |||
(6LBR) dst | > root (6LBR) dst | |||
</t> | </t> | |||
<t> | <t> | |||
For example, a communication flow could be: Node G --> N | For example, a communication flow could be: | |||
ode E --> Node B --> Node A (root) | Node G --> Node E --> Node B --> Node A (root) | |||
</t> | </t> | |||
<t> | <t> | |||
6LR_i represents the intermediate routers from source | 6LR_i represents the intermediate routers from the sou | |||
to destination. | rce to the destination. | |||
In this case, 1 <= i <= n, where n is the total number of routers (6LR) | In this case, 1 <= i <= n, where n is the total number of routers (6LR) | |||
that the packet goes through from source (RUL) to dest ination (6LBR). | that the packet goes through, from the source (RUL) to the destination (6LBR). | |||
For example, 6LR_1 (i=1) is the router that receives t he packets from the | For example, 6LR_1 (i=1) is the router that receives t he packets from the | |||
RUL. | RUL. | |||
</t> | </t> | |||
<t> | <t> | |||
In this case, the RPI is added by the first 6LR (6LR_1 ) (Node E), | In this case, the RPI is added by the first 6LR (6LR_1 ) (Node E), | |||
encapsulated in an IPv6-in-IPv6 header, and modified i n the | encapsulated in an IPv6-in-IPv6 header, and modified i n the | |||
subsequent 6LRs in the flow. The RPI and the | subsequent 6LRs in the flow. The RPI and the | |||
entire packet are consumed by the root. | entire packet are consumed by the root. | |||
</t> | </t> | |||
<t> | <t> | |||
The <xref target="NonStoring-notrpl2root"/> shows the ta | <xref target="NonStoring-notrpl2root" format="default"/> | |||
ble that summarizes what headers are needed for this use case. | summarizes which headers are needed for this use case. | |||
</t> | </t> | |||
<t> | <table anchor="NonStoring-notrpl2root"> | |||
<figure title="Non-SM: Summary of the use of headers fro | <name>Non-SM: Summary of the Use of Headers from RUL to Root</name> | |||
m RUL to root" anchor="NonStoring-notrpl2root" align="center"> | <thead> | |||
<artwork><![CDATA[ | <tr> | |||
+---------+----+-----------------+-----------------+-----------------+ | <th align="center">Header</th> | |||
| |RUL | | | | | <th align="center">RUL src</th> | |||
| Header |src | 6LR_1 | 6LR_i | 6LBR dst | | <th align="center">6LR_1</th> | |||
| |node| | | | | <th align="center">6LR_i</th> | |||
+---------+----+-----------------+-----------------+-----------------+ | <th align="center">6LBR dst</th> | |||
| Added | -- |IPv6-in-IPv6(RPI)| -- | -- | | </tr> | |||
| headers | | | | | | </thead> | |||
+---------+----+-----------------+-----------------+-----------------+ | <tbody> | |||
| Modified| -- | -- | RPI | -- | | <tr> | |||
| headers | | | | | | <th align="center">Added headers</th> | |||
+---------+----+-----------------+-----------------+-----------------+ | <td align="center">--</td> | |||
| Removed | -- | -- | -- |IPv6-in-IPv6(RPI)| | <td align="center">IPv6-in-IPv6 (RPI)</td> | |||
| headers | | | | | | <td align="center">--</td> | |||
+---------+----+-----------------+-----------------+-----------------+ | <td align="center">--</td> | |||
|Untouched| -- | -- | -- | -- | | </tr> | |||
| headers | | | | | | <tr> | |||
+---------+----+-----------------+-----------------+-----------------+ | <th align="center">Modified headers</th> | |||
]]></artwork></figure> | <td align="center">--</td> | |||
</t> | <td align="center">--</td> | |||
</section> | <td align="center">RPI</td> | |||
</section> | <td align="center">--</td> | |||
</tr> | ||||
<section title="Non-Storing Mode: Interaction between Leaf and In | <tr> | |||
ternet"> | <th align="center">Removed headers</th> | |||
<td align="center">--</td> | ||||
<t> | <td align="center">--</td> | |||
This section will describe the communication flow in Non Stor | <td align="center">--</td> | |||
ing Mode (Non-SM) between: | <td align="center">IPv6-in-IPv6 (RPI)</td> | |||
</t> | </tr> | |||
<t> | <tr> | |||
<list> | <th align="center">Untouched headers</th> | |||
<t> | <td align="center">--</td> | |||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | ||||
</section> | ||||
<section numbered="true" toc="default"> | ||||
<name>Non-Storing Mode: Interaction between Leaf and Internet</name> | ||||
<t> | ||||
This section describes the communication flow in Non-Storing | ||||
mode (Non-SM) between the following: | ||||
</t> | ||||
<ul empty="true" spacing="normal"> | ||||
<li> | ||||
RAL to Internet | RAL to Internet | |||
</t> | </li> | |||
<t> | <li> | |||
Internet to RAL | Internet to RAL | |||
</t> | </li> | |||
<t> | <li> | |||
RUL to Internet | RUL to Internet | |||
</t> | </li> | |||
<t> | <li> | |||
Internet to RUL | Internet to RUL | |||
</t> | </li> | |||
</list> | </ul> | |||
</t> | <section numbered="true" toc="default"> | |||
<name>Non-SM: Example of Flow from RAL to Internet</name> | ||||
<section title="Non-SM: Example of Flow from RAL to Internet"> | <t> | |||
<t> | In this case, the flow comprises: | |||
In this case the flow comprises: | </t> | |||
</t> | <t> | |||
<t> | RAL (6LN) src --> 6LR_i --> root (6LBR) -- | |||
RAL (6LN) src --> 6LR_i --> root (6LBR) --> Inte | > Internet dst | |||
rnet dst | </t> | |||
</t> | <t> | |||
<t> | For example, a communication flow could be: | |||
For example, a communication flow could be: Node F (RAL) | Node F (RAL) --> Node D --> Node B --> Node A --> Internet. | |||
--> Node D --> Node B --> Node A --> Internet. | ||||
Having the RAL information about the RPL domain, the pac ket may be encapsulated to the root when the destination is not in the RPL domai n of the RAL. | Having the RAL information about the RPL domain, the pac ket may be encapsulated to the root when the destination is not in the RPL domai n of the RAL. | |||
</t> | </t> | |||
<t> | <t> | |||
6LR_i represents the intermediate routers from source | 6LR_i represents the intermediate routers from the sou | |||
to destination, | rce to the destination, | |||
1 <= i <= n, where n is the total number of rout | and 1 <= i <= n, where n is the total number of | |||
ers (6LR) | routers (6LR) | |||
that the packet goes through from source (RAL) to 6LBR | that the packet goes through, from the source (RAL) to | |||
. | the 6LBR. | |||
</t> | </t> | |||
<t> | <t> | |||
In this case, the encapsulation from the RAL to th e root is optional. | In this case, the encapsulation from the RAL to th e root is optional. | |||
The simplest case is when the RPI gets to the Inte rnet (as the <xref target="NonStoring-rpl2int"/> shows it), knowing that the Int ernet is | The simplest case is when the RPI gets to the Inte rnet (as the <xref target="NonStoring-rpl2int" format="default"/> shows it), kno wing that the Internet is | |||
going to ignore it. | going to ignore it. | |||
</t> | </t> | |||
<t> | <t> | |||
The IPv6 flow label should be set to zero to aid | The IPv6 flow label should be set to zero to aid | |||
in compression <xref target="RFC8138"/>, and the 6LBR | in compression <xref target="RFC8138" format="default" | |||
will set it to a | />, and the 6LBR will set it to a | |||
non-zero value when sending towards the Internet <xre | non-zero value when sending towards the Internet <xre | |||
f target="RFC6437"/>. | f target="RFC6437" format="default"/>. | |||
</t> | </t> | |||
<t> | <t> | |||
The <xref target="NonStoring-rpl2int"/> summarizes what | <xref target="NonStoring-rpl2int" format="default"/> sum | |||
headers are needed for this use case | marizes which headers are needed for this use case | |||
when no encapsulation is used. | when no encapsulation is used. | |||
The <xref target="NonStoring-rpl2intwithIPIP"/> summariz es what headers are needed | <xref target="NonStoring-rpl2intwithIPIP" format="defaul t"/> summarizes which headers are needed | |||
for this use case when encapsulation to the root is used . | for this use case when encapsulation to the root is used . | |||
</t> | </t> | |||
<t> | <table anchor="NonStoring-rpl2int"> | |||
<figure title="Non-SM: Summary of the use of headers fro | <name>Non-SM: Summary of the Use of Headers from RAL to Internet with No Enca | |||
m RAL to Internet with no encapsulation" anchor="NonStoring-rpl2int" align="cent | psulation</name> | |||
er"> | <thead> | |||
<artwork><![CDATA[ | <tr> | |||
+-----------+-----+-------+------+-----------+ | <th align="center">Header</th> | |||
| Header | RAL | 6LR_i | 6LBR | Internet | | <th align="center">RAL src</th> | |||
| | src | | | dst | | <th align="center">6LR_i</th> | |||
+-----------+-----+-------+------+-----------+ | <th align="center">6LBR</th> | |||
| Added | RPI | -- | -- | -- | | <th align="center">Internet dst</th> | |||
| headers | | | | | | </tr> | |||
+-----------+-----+-------+------+-----------+ | </thead> | |||
| Modified | -- | RPI | RPI | -- | | <tbody> | |||
| headers | | | | | | <tr> | |||
+-----------+-----+-------+------+-----------+ | <th align="center">Added headers</th> | |||
| Removed | -- | -- | -- | -- | | <td align="center">RPI</td> | |||
| headers | | | | | | <td align="center">--</td> | |||
+-----------+-----+-------+------+-----------+ | <td align="center">--</td> | |||
| Untouched | -- | -- | -- | RPI | | <td align="center">--</td> | |||
| headers | | | | (Ignored) | | </tr> | |||
+-----------+-----+-------+------+-----------+ | <tr> | |||
]]></artwork></figure> | <th align="center">Modified headers</th> | |||
</t> | <td align="center">--</td> | |||
<td align="center">RPI</td> | ||||
<t> | <td align="center">RPI</td> | |||
<figure title="Non-SM: Summary of the use of headers fro | <td align="center">--</td> | |||
m RAL to Internet with encapsulation to the root" anchor="NonStoring-rpl2intwith | </tr> | |||
IPIP" align="center"> | <tr> | |||
<artwork><![CDATA[ | <th align="center">Removed headers</th> | |||
+-----------+--------------+--------------+--------------+----------+ | <td align="center">--</td> | |||
| Header | RAL | 6LR_i | 6LBR | Internet | | <td align="center">--</td> | |||
| | src | | | dst | | <td align="center">--</td> | |||
+-----------+--------------+--------------+--------------+----------+ | <td align="center">--</td> | |||
| Added | IPv6-in-IPv6 | -- | -- | -- | | </tr> | |||
| headers | (RPI) | | | | | <tr> | |||
+-----------+--------------+--------------+--------------+----------+ | <th align="center">Untouched headers</th> | |||
| Modified | -- | | -- | -- | | <td align="center">--</td> | |||
| headers | | RPI | | | | <td align="center">--</td> | |||
+-----------+--------------+--------------+--------------+----------+ | <td align="center">--</td> | |||
| Removed | -- | -- | IPv6-in-IPv6 | -- | | <td align="center">RPI (Ignored)</td> | |||
| headers | | | (RPI) | | | </tr> | |||
+-----------+--------------+--------------+--------------+----------+ | </tbody> | |||
| Untouched | -- | -- | -- | -- | | </table> | |||
| headers | | | | | | ||||
+-----------+--------------+--------------+--------------+----------+ | ||||
]]></artwork></figure> | ||||
</t> | ||||
</section> | ||||
<section title="Non-SM: Example of Flow from Internet to RAL"> | <table anchor="NonStoring-rpl2intwithIPIP"> | |||
<t> | <name>Non-SM: Summary of the Use of Headers from RAL to Internet with Encapsu | |||
In this case the flow comprises: | lation to the Root</name> | |||
</t> | <thead> | |||
<t> | <tr> | |||
<th align="center">Header</th> | ||||
<th align="center">RAL src</th> | ||||
<th align="center">6LR_i</th> | ||||
<th align="center">6LBR</th> | ||||
<th align="center">Internet dst</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<th align="center">Added headers</th> | ||||
<td align="center">IP6v6-in-IPv6 (RPI)</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
<tr> | ||||
<th align="center">Modified headers</th> | ||||
<td align="center">--</td> | ||||
<td align="center">RPI</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
<tr> | ||||
<th align="center">Removed headers</th> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">IPv6-in-IPv6 (RPI)</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
<tr> | ||||
<th align="center">Untouched headers</th> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | ||||
<section numbered="true" toc="default"> | ||||
<name>Non-SM: Example of Flow from Internet to RAL</name> | ||||
<t> | ||||
In this case, the flow comprises: | ||||
</t> | ||||
<t> | ||||
Internet --> root (6LBR) --> 6LR_i --> RAL dst ( | Internet --> root (6LBR) --> 6LR_i --> | |||
6LN) | RAL dst (6LN) | |||
</t> | </t> | |||
<t> | <t> | |||
For example, a communication flow could be: Internet --> | For example, a communication flow could be: | |||
Node A (root) --> Node B --> Node D --> Node F (RAL) | Internet --> Node A (root) --> Node B --> Node D --> Node F (RAL) | |||
</t> | </t> | |||
<t> | <t> | |||
6LR_i represents the intermediate routers from source to destination, | 6LR_i represents the intermediate routers from source to destination, | |||
1 <= i <= n, where n is the total number of rout | and 1 <= i <= n, where n is the total number of | |||
ers (6LR) | routers (6LR) | |||
that the packet goes through from 6LBR to destination | that the packet goes through, from the 6LBR to the des | |||
(RAL). | tination (RAL). | |||
</t> | </t> | |||
<t> | <t> | |||
The 6LBR must add an RH3 header. As the 6LBR will | The 6LBR must add an RH3 header. As the 6LBR will | |||
know the path and address of the target node, it can | know the path and address of the target node, it can | |||
address the IPv6-in-IPv6 header to that node. | address the IPv6-in-IPv6 header to that node. | |||
The 6LBR will zero the flow label upon entry in | The 6LBR will zero the flow label upon entry in | |||
order to aid compression <xref target="RFC8138"/>. | order to aid compression <xref target="RFC8138" format | |||
</t> | ="default"/>. | |||
<t> | </t> | |||
The <xref target="NonStoring-int2rpl"/> summarizes what | <t> | |||
headers are needed for this use case. | <xref target="NonStoring-int2rpl" format="default"/> sum | |||
</t> | marizes which headers are needed for this use case. | |||
<t> | </t> | |||
<figure title="Non-SM: Summary of the use of headers fro | <table anchor="NonStoring-int2rpl"> | |||
m Internet to RAL" anchor="NonStoring-int2rpl" align="center"> | <name>Non-SM: Summary of the Use of Headers from Internet to RAL</name> | |||
<artwork><![CDATA[ | <thead> | |||
+-----------+----------+--------------+--------------+--------------+ | <tr> | |||
| Header | Internet | 6LBR | 6LR_i | RAL | | <th align="center">Header</th> | |||
| | src | | | dst | | <th align="center">Internet src</th> | |||
+-----------+----------+--------------+--------------+--------------+ | <th align="center">6LBR</th> | |||
| Added | -- | IPv6-in-IPv6 | -- | -- | | <th align="center">6LR_i</th> | |||
| headers | | (RH3, RPI) | | | | <th align="center">RAL dst</th> | |||
+-----------+----------+--------------+--------------+--------------+ | </tr> | |||
| Modified | -- | -- | IPv6-in-IPv6 | -- | | </thead> | |||
| headers | | | (RH3, RPI) | | | <tbody> | |||
+-----------+----------+--------------+--------------+--------------+ | <tr> | |||
| Removed | -- | -- | -- | IPv6-in-IPv6 | | <th align="center">Added headers</th> | |||
| headers | | | | (RH3, RPI) | | <td align="center">--</td> | |||
+-----------+----------+--------------+--------------+--------------+ | <td align="center">IPv6-in-IPv6 (RH3, RPI)</td> | |||
| Untouched | -- | -- | -- | -- | | <td align="center">--</td> | |||
| headers | | | | | | <td align="center">--</td> | |||
+-----------+----------+--------------+--------------+--------------+ | </tr> | |||
]]></artwork></figure> | <tr> | |||
</t> | <th align="center">Modified headers</th> | |||
</section> | <td align="center">--</td> | |||
<td align="center">--</td> | ||||
<section title="Non-SM: Example of Flow from RUL to Internet"> | <td align="center">IPv6-in-IPv6 (RH3, RPI)</td> | |||
<t> | <td align="center">--</td> | |||
In this case the flow comprises: | </tr> | |||
</t> | <tr> | |||
<t> | <th align="center">Removed headers</th> | |||
RUL (IPv6 src node) --> 6LR_1 --> 6LR_i -->root (6LBR) | <td align="center">--</td> | |||
--> Internet dst | <td align="center">--</td> | |||
</t> | <td align="center">--</td> | |||
<t> | <td align="center">IPv6-in-IPv6 (RH3, RPI)</td> | |||
For example, a communication flow could be: Node G --> N | </tr> | |||
ode E --> Node B --> Node A --> Internet | <tr> | |||
</t> | <th align="center">Untouched headers</th> | |||
<t> | <td align="center">--</td> | |||
6LR_i represents the intermediate routers from source | <td align="center">--</td> | |||
to destination, | <td align="center">--</td> | |||
1 <= i <= n, where n is the total number of rout | <td align="center">--</td> | |||
ers (6LRs) that the | </tr> | |||
packet goes through from the source (RUL) to the 6LBR, | </tbody> | |||
e.g., 6LR_1 (i=1). | </table> | |||
</t> | </section> | |||
<t> | <section numbered="true" toc="default"> | |||
In this case the flow label is recommended to | <name>Non-SM: Example of Flow from RUL to Internet</name> | |||
<t> | ||||
In this case, the flow comprises: | ||||
</t> | ||||
<t> | ||||
RUL (IPv6 src node) --> 6LR_1 --> 6LR_i --> r | ||||
oot (6LBR) --> Internet dst | ||||
</t> | ||||
<t> | ||||
For example, a communication flow could be: | ||||
Node G --> Node E --> Node B --> Node A --> Internet | ||||
</t> | ||||
<t> | ||||
6LR_i represents the intermediate routers from the sou | ||||
rce to the destination, | ||||
and 1 <= i <= n, where n is the total number of | ||||
routers (6LRs) that the | ||||
packet goes through, from the source (RUL) to the 6LBR | ||||
, e.g., 6LR_1 (i=1). | ||||
</t> | ||||
<t> | ||||
In this case, the flow label is recommended to | ||||
be zero in the RUL. As the RUL parent adds RPL headers in the RUL packet, | be zero in the RUL. As the RUL parent adds RPL headers in the RUL packet, | |||
the first 6LR (6LR_1) will add an RPI inside a n ew IPv6-in-IPv6 header. | the first 6LR (6LR_1) will add an RPI inside a n ew IPv6-in-IPv6 header. | |||
The IPv6-in-IPv6 header will be addressed to the | The IPv6-in-IPv6 header will be addressed to the | |||
root. This case is identical to the | root. This case is identical to the | |||
storing-mode case (see <xref target="sm-nRal2i" | Storing mode case (see <xref target="sm-nRal2i" | |||
/>). | format="default"/>). | |||
</t> | </t> | |||
<t> | <t> | |||
The <xref target="NonStoring-notrpl2int"/> shows the tab | <xref target="NonStoring-notrpl2int" format="default"/> | |||
le that summarizes what headers are needed for this use case. | summarizes which headers are needed for this use case. | |||
</t> | ||||
<t> | ||||
<figure title="Non-SM: Summary of the use of headers fro | ||||
m RUL to Internet" anchor="NonStoring-notrpl2int" align="center"> | ||||
<artwork><![CDATA[ | ||||
+---------+----+-------------+--------------+--------------+--------+ | ||||
| Header |RUL | 6LR_1 | 6LR_i | 6LBR |Internet| | ||||
| |src | | [i=2,..,n] | | dst | | ||||
| |node| | | | | | ||||
+---------+----+-------------+--------------+--------------+--------+ | ||||
| Added | -- |IP6-IP6(RPI) | -- | -- | -- | | ||||
| headers | | | | | | | ||||
+---------+----+-------------+--------------+--------------+--------+ | ||||
| Modified| -- | -- | RPI | -- | -- | | ||||
| headers | | | | | | | ||||
+---------+----+-------------+--------------+--------------+--------+ | ||||
| Removed | -- | -- | -- | IP6-IP6(RPI) | -- | | ||||
| headers | | | | | | | ||||
+---------+----+-------------+--------------+--------------+--------+ | ||||
|Untouched| -- | -- | -- | -- | -- | | ||||
| headers | | | | | | | ||||
+---------+----+-------------+--------------+--------------+--------+ | ||||
]]></artwork></figure> | ||||
</t> | ||||
</section> | ||||
<section title="Non-SM: Example of Flow from Internet to RUL"> | ||||
<t> | ||||
In this case the flow comprises: | ||||
</t> | ||||
<t> | ||||
Internet src --> root (6LBR) --> 6LR_i --> RUL ( | </t> | |||
IPv6 dst node) | <table anchor="NonStoring-notrpl2int"> | |||
</t> | <name>Non-SM: Summary of the Use of Headers from RUL to Internet</name> | |||
<t> | <thead> | |||
For example, a communication flow could be: Internet --> | <tr> | |||
Node A (root) --> Node B --> Node E --> Node G | <th align="center">Header</th> | |||
</t> | <th align="center">RUL src</th> | |||
<t> | <th align="center">6LR_1</th> | |||
6LR_i represents the intermediate routers from source | <th align="center">6LR_i i=(2,..,n)</th> | |||
to destination, | <th align="center">6LBR</th> | |||
1 <= i <= n, where n is the total number of rout | <th align="center">Internet dst</th> | |||
ers (6LR) | </tr> | |||
that the packet goes through from 6LBR to RUL. | </thead> | |||
</t> | <tbody> | |||
<tr> | ||||
<th align="center">Added headers</th> | ||||
<td align="center">--</td> | ||||
<td align="center">IP6-IP6 (RPI)</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
<tr> | ||||
<th align="center">Modified headers</th> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">RPI</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
<tr> | ||||
<th align="center">Removed headers</th> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">IP6-IP6 (RPI)</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
<tr> | ||||
<th align="center">Untouched headers</th> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | ||||
<section numbered="true" toc="default"> | ||||
<name>Non-SM: Example of Flow from Internet to RUL</name> | ||||
<t> | ||||
In this case, the flow comprises: | ||||
</t> | ||||
<t> | ||||
<t> | Internet src --> root (6LBR) --> 6LR_i --& | |||
gt; RUL (IPv6 dst node) | ||||
</t> | ||||
<t> | ||||
For example, a communication flow could be: | ||||
Internet --> Node A (root) --> Node B --> Node E --> Node G | ||||
</t> | ||||
<t> | ||||
6LR_i represents the intermediate routers from the sou | ||||
rce to the destination, | ||||
and 1 <= i <= n, where n is the total number of | ||||
routers (6LR) | ||||
that the packet goes through, from the 6LBR to the RUL | ||||
. | ||||
</t> | ||||
<t> | ||||
The 6LBR must add an RH3 header inside an IPv6-in-IPv6 | The 6LBR must add an RH3 header inside an IPv6-in-IPv6 | |||
header. | header. | |||
The 6LBR will know the path, and will recognize | The 6LBR will know the path and will recognize | |||
that the final node is not a RPL capable node as | that the final node is not a RPL-capable node as | |||
it will have received the connectivity DAO from the | it will have received the connectivity DAO from the | |||
nearest 6LR. The 6LBR can therefore make the IPv6-in- IPv6 | nearest 6LR. The 6LBR can therefore make the IPv6-in- IPv6 | |||
header destination be the last 6LR. | header destination be the last 6LR. | |||
The 6LBR will set to zero the flow label upon entry in | The 6LBR will set to zero the flow label upon entry in | |||
order to aid compression <xref target="RFC8138"/>. | order to aid compression <xref target="RFC8138" format | |||
</t> | ="default"/>. | |||
<t> | </t> | |||
The <xref target="NonStoring-int2notrpl"/> shows the tab | <t> | |||
le that summarizes what headers are needed for this use case. | <xref target="NonStoring-int2notrpl" format="default"/> | |||
</t> | summarizes which headers are needed for this use case. | |||
<t> | </t> | |||
<figure title="Non-SM: Summary of the use of headers fro | <table anchor="NonStoring-int2notrpl"> | |||
m Internet to RUL." anchor="NonStoring-int2notrpl" align="center"> | <name>Non-SM: Summary of the Use of Headers from Internet to RUL</name> | |||
<artwork><![CDATA[ | <thead> | |||
+----------+--------+------------------+-----------+-----------+-----+ | <tr> | |||
| Header |Internet| 6LBR | 6LR_i | 6LR_n | RUL | | <th align="center">Header</th> | |||
| | src | | | | dst | | <th align="center">Internet src</th> | |||
+----------+--------+------------------+-----------+-----------+-----+ | <th align="center">6LBR</th> | |||
| Added | -- | IP6-IP6(RH3,RPI) | -- | -- | -- | | <th align="center">6LR_i</th> | |||
| headers | | | | | | | <th align="center">6LR_n</th> | |||
+----------+--------+------------------+-----------+-----------+-----+ | <th align="center">RUL dst</th> | |||
| Modified | -- | -- | IP6-IP6 | -- | -- | | </tr> | |||
| headers | | | (RH3,RPI) | | | | </thead> | |||
+----------+--------+------------------+-----------+-----------+-----+ | <tbody> | |||
| Removed | -- | -- | -- | IP6-IP6 | -- | | <tr> | |||
| headers | | | | (RH3,RPI) | | | <th align="center">Added headers</th> | |||
+----------+--------+------------------+-----------+-----------+-----+ | <td align="center">--</td> | |||
|Untouched | -- | -- | -- | -- | -- | | <td align="center">IP6-IP6 (RH3, RPI)</td> | |||
| headers | | | | | | | <td align="center">--</td> | |||
+----------+--------+------------------+-----------+-----------+-----+ | <td align="center">--</td> | |||
]]></artwork></figure> | <td align="center">--</td> | |||
</t> | </tr> | |||
</section> | <tr> | |||
<th align="center">Modified headers</th> | ||||
</section> | <td align="center">--</td> | |||
<td align="center">--</td> | ||||
<section title="Non-SM: Interaction between leaves"> | <td align="center">IP6-IP6 (RH3, RPI)</td> | |||
<td align="center">--</td> | ||||
<t> | <td align="center">--</td> | |||
In this section is described the communication flow | </tr> | |||
in Non Storing Mode (Non-SM) between, | <tr> | |||
</t> | <th align="center">Removed headers</th> | |||
<t> | <td align="center">--</td> | |||
<list> | <td align="center">--</td> | |||
<t> | <td align="center">--</td> | |||
<td align="center">IP6-IP6 (RH3, RPI)</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
<tr> | ||||
<th align="center">Untouched headers</th> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | ||||
</section> | ||||
<section numbered="true" toc="default"> | ||||
<name>Non-SM: Interaction between Leaves</name> | ||||
<t> | ||||
This section describes the communication flow | ||||
in Non-Storing mode (Non-SM) between the following: | ||||
</t> | ||||
<ul empty="true" spacing="normal"> | ||||
<li> | ||||
RAL to RAL | RAL to RAL | |||
</t> | </li> | |||
<t> | <li> | |||
RAL to RUL | RAL to RUL | |||
</t> | </li> | |||
<t> | <li> | |||
RUL to RAL | RUL to RAL | |||
</t> | </li> | |||
<t> | <li> | |||
RUL to RUL | RUL to RUL | |||
</t> | </li> | |||
</list> | </ul> | |||
</t> | <section numbered="true" toc="default"> | |||
<name>Non-SM: Example of Flow from RAL to RAL</name> | ||||
<section title="Non-SM: Example of Flow from RAL to RAL"> | <t> | |||
<t> | In this case, the flow comprises: | |||
In this case the flow comprises: | </t> | |||
</t> | <t> | |||
<t> | RAL src --> 6LR_ia --> root (6LBR) --> 6LR_id | |||
RAL src --> 6LR_ia --> root (6LBR) --> 6LR_id --> RAL | --> RAL dst | |||
dst | </t> | |||
</t> | <t> | |||
<t> | For example, a communication flow could be: | |||
For example, a communication flow could be: Node F (RAL | Node F (RAL src) --> Node D --> Node B --> Node A (root) --> Node B | |||
src)--> Node D --> Node B --> Node A (root) --> Node B --> Node E --> Node H (RA | --> Node E --> Node H (RAL dst) | |||
L dst) | </t> | |||
</t> | <t> | |||
<t> | 6LR_ia represents the intermediate routers from the so | |||
6LR_ia represents the intermediate routers from source | urce to the root, | |||
to the root, | and 1 <= ia <= n, where n is the total number of | |||
1 <= ia <= n, where n is the total number of rou | routers (6LR) | |||
ters (6LR) | that the packet goes through, from the RAL to the root | |||
that the packet goes through from RAL to the root. | . | |||
</t> | </t> | |||
<t> | <t> | |||
6LR_id represents the intermediate routers from the ro ot to the destination, | 6LR_id represents the intermediate routers from the ro ot to the destination, | |||
1 <= id <= m, where m is the total number of the | and 1 <= id <= m, where m is the total number of the | |||
intermediate routers (6LR). | intermediate routers (6LR). | |||
</t> | </t> | |||
<t> | <t> | |||
This case involves only nodes in same RPL domain. | This case involves only nodes in same RPL domain. | |||
The originating node will add an RPI to the | The originating node will add an RPI to the | |||
original packet, and send the packet upwards. | original packet and send the packet Upward. | |||
</t> | </t> | |||
<t> | <t> | |||
The originating node may put the RPI (RPI1) into an IP v6-in-IPv6 | The originating node may put the RPI (RPI1) into an IP v6-in-IPv6 | |||
header addressed to the root, so that the 6LBR can rem ove that | header addressed to the root so that the 6LBR can remo ve that | |||
header. If it does not, then the RPI1 is forwarded do wn from the | header. If it does not, then the RPI1 is forwarded do wn from the | |||
root in the inner header to no avail. | root in the inner header to no avail. | |||
</t> | </t> | |||
<t> | <t> | |||
The 6LBR will need to insert an RH3 header, which | The 6LBR will need to insert an RH3 header, which | |||
requires that it add an IPv6-in-IPv6 header. | requires that it add an IPv6-in-IPv6 header. | |||
It removes the RPI(RPI1), as it was contained in an | It removes the RPI (RPI1), as it was contained in an | |||
IPv6-in-IPv6 header addressed to it. Otherwise, there may | IPv6-in-IPv6 header addressed to it. Otherwise, there may | |||
be an RPI buried inside the inner IP header, | be an RPI buried inside the inner IP header, | |||
which should get ignored. The root inserts an RPI (RPI | which should be ignored. The root inserts an RPI (RPI2 | |||
2) alongside the RH3. | ) alongside the RH3. | |||
</t> | </t> | |||
<t> | ||||
<t> | Networks that use the RPL point-to-point extension <xref targ | |||
Networks that use the RPL P2P extension <xref target="RFC6997 | et="RFC6997" format="default"/> | |||
" /> | are essentially Non-Storing DODAGs and fall into this | |||
are essentially non-storing DODAGs and fall into this | scenario or the scenario given in <xref target="nsroottoRAL" | |||
scenario or scenario <xref target="nsroottoRAL"/>, with | format="default"/>, with | |||
the originating node acting as 6LBR. | the originating node acting as a 6LBR. | |||
</t> | </t> | |||
<t> | <t> | |||
The <xref target="NonStoring-rpl2rpl"/> shows the table that su | <xref target="NonStoring-rpl2rpl" format="default"/> summarizes | |||
mmarizes what headers | which headers | |||
are needed for this use case when encapsulation to the root tak es place. | are needed for this use case when encapsulation to the root tak es place. | |||
</t> | </t> | |||
<t> | <t> | |||
The <xref target="NonStoring-rpl2rplnoIPIP"/> shows the table t | <xref target="NonStoring-rpl2rplnoIPIP" format="default"/> summ | |||
hat summarizes what headers | arizes which headers | |||
are needed for this use case when there is no encapsulation to the root. | are needed for this use case when there is no encapsulation to the root. | |||
Note that in the Modified headers row, going up in each 6LR_ia only the RPI1 is changed. | Note that in the Modified headers row, going up in each 6LR_ia only the RPI1 is changed. | |||
Going down, in each 6LR_id the IPv6 header is swapped with the | Going down, in each 6LR_id the IPv6 header is swapped with the | |||
RH3 so both are changed alongside with the RPI2. | RH3 so both are changed alongside with the RPI2. | |||
</t> | </t> | |||
<t> | <table anchor="NonStoring-rpl2rpl"> | |||
<figure title="Non-SM: Summary of the Use of Headers from RAL t | <name>Non-SM: Summary of the Use of Headers from RAL to RAL with Encapsulatio | |||
o RAL with encapsulation to the root." anchor="NonStoring-rpl2rpl" align="center | n to the Root</name> | |||
"> | <thead> | |||
<artwork><![CDATA[ | <tr> | |||
+---------+-------+----------+------------+----------+------------+ | <th align="center">Header</th> | |||
| Header | RAL | 6LR_ia | 6LBR | 6LR_id | RAL | | <th align="center">RAL src</th> | |||
| | src | | | | dst | | <th align="center">6LR_ia</th> | |||
+---------+-------+----------+------------+----------+------------+ | <th align="center">6LBR</th> | |||
| Added |IP6-IP6| | IP6-IP6 | -- | -- | | <th align="center">6LR_id</th> | |||
| headers |(RPI1) | -- |(RH3-> RAL, | | | | <th align="center">RAL dst</th> | |||
| | | | RPI2) | | | | </tr> | |||
+---------+-------+----------+------------+----------+------------+ | </thead> | |||
| Modified| -- | | -- | IP6-IP6 | -- | | <tbody> | |||
| headers | | RPI1 | |(RH3,RPI2)| | | <tr> | |||
+---------+-------+----------+------------+----------+------------+ | <th align="center">Added headers</th> | |||
| Removed | -- | -- | IP6-IP6 | -- | IP6-IP6 | | <td align="center">IP6-IP6 (RPI1)</td> | |||
| headers | | | (RPI1) | | (RH3, | | <td align="center">--</td> | |||
| | | | | | RPI2) | | <td align="center">IP6-IP6 (RH3 -> RAL, RPI2)</td> | |||
+---------+-------+----------+------------+----------+------------+ | <td align="center">--</td> | |||
|Untouched| -- | -- | -- | -- | -- | | <td align="center">--</td> | |||
| headers | | | | | | | </tr> | |||
+---------+-------+----------+------------+----------+------------+ | <tr> | |||
]]></artwork></figure> | <th align="center">Modified headers</th> | |||
</t> | <td align="center">--</td> | |||
<t> | <td align="center">RPI1</td> | |||
<figure title="Non-SM: Summary of the Use of Headers from RAL t | <td align="center">--</td> | |||
o RAL without encapsulation | <td align="center">IP6-IP6 (RH3, RPI2)</td> | |||
to the root." anchor="NonStoring-rpl2rplnoIPIP" align="cente | <td align="center">--</td> | |||
r"> | </tr> | |||
<artwork><![CDATA[ | <tr> | |||
+-----------+------+--------+---------+---------+---------+ | <th align="center">Removed headers</th> | |||
| Header | RAL | 6LR_ia | 6LBR | 6LR_id | RAL | | <td align="center">--</td> | |||
+-----------+------+--------+---------+---------+---------+ | <td align="center">--</td> | |||
| Inserted | RPI1 | -- | IP6-IP6 | -- | -- | | <td align="center">IP6-IP6 (RPI1)</td> | |||
| headers | | | (RH3, | | | | <td align="center">--</td> | |||
| | | | RPI2) | | | | <td align="center">IP6-IP6 (RH3, RPI2)</td> | |||
+-----------+------+--------+---------+---------+---------+ | </tr> | |||
| Modified | -- | RPI1 | -- | IP6-IP6 | -- | | <tr> | |||
| headers | | | | (RH3, | | | <th align="center">Untouched headers</th> | |||
| | | | | RPI2) | | | <td align="center">--</td> | |||
+-----------+------+--------+---------+---------+---------+ | <td align="center">--</td> | |||
| Removed | -- | -- | -- | -- | IP6-IP6 | | <td align="center">--</td> | |||
| headers | | | | | (RH3, | | <td align="center">--</td> | |||
| | | | | | RPI2) | | <td align="center">--</td> | |||
| | | | | | | | </tr> | |||
+-----------+------+--------+---------+---------+---------+ | </tbody> | |||
| Untouched | -- | -- | RPI1 | RPI1 | RPI1 | | </table> | |||
| headers | | | | |(Ignored)| | <table anchor="NonStoring-rpl2rplnoIPIP"> | |||
+-----------+------+--------+---------+---------+---------+ | <name>Non-SM: Summary of the Use of Headers from RAL to RAL without Encapsula | |||
]]></artwork></figure> | tion to the Root</name> | |||
</t> | <thead> | |||
</section> | <tr> | |||
<th align="center">Header</th> | ||||
<section title="Non-SM: Example of Flow from RAL to RUL"> | <th align="center">RAL src</th> | |||
<t> | <th align="center">6LR_ia</th> | |||
In this case the flow comprises: | <th align="center">6LBR</th> | |||
</t> | <th align="center">6LR_id</th> | |||
<t> | <th align="center">RAL dst</th> | |||
RAL --> 6LR_ia --> root (6LBR) --> 6LR_id --> RUL (IPv | </tr> | |||
6 dst node) | </thead> | |||
</t> | <tbody> | |||
<t> | <tr> | |||
For example, a communication flow could be: Node F (RAL) | <th align="center">Added headers</th> | |||
--> Node D --> Node B --> Node A (root) --> Node B --> Node E --> Node G (RUL) | <td align="center">RPI1</td> | |||
</t> | <td align="center">--</td> | |||
<t> | <td align="center">IP6-IP6 (RH3, RPI2)</td> | |||
6LR_ia represents the intermediate routers from source | <td align="center">--</td> | |||
to the root, | <td align="center">--</td> | |||
1 <= ia <= n, where n is the total number of int | </tr> | |||
ermediate routers (6LR) | <tr> | |||
</t> | <th align="center">Modified headers</th> | |||
<t> | <td align="center">--</td> | |||
<td align="center">RPI1</td> | ||||
<td align="center">--</td> | ||||
<td align="center">IP6-IP6 (RH3, RPI2)</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
<tr> | ||||
<th align="center">Removed headers</th> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">IP6-IP6 (RH3, RPI2)</td> | ||||
</tr> | ||||
<tr> | ||||
<th align="center">Untouched headers</th> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">RPI1</td> | ||||
<td align="center">RPI1</td> | ||||
<td align="center">RPI1 (Ignored)</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | ||||
<section numbered="true" toc="default"> | ||||
<name>Non-SM: Example of Flow from RAL to RUL</name> | ||||
<t> | ||||
In this case, the flow comprises: | ||||
</t> | ||||
<t> | ||||
RAL --> 6LR_ia --> root (6LBR) --> 6LR_id --&g | ||||
t; RUL (IPv6 dst node) | ||||
</t> | ||||
<t> | ||||
For example, a communication flow could be: | ||||
Node F (RAL) --> Node D --> Node B --> Node A (root) --> Node B --&g | ||||
t; Node E --> Node G (RUL) | ||||
</t> | ||||
<t> | ||||
6LR_ia represents the intermediate routers from the so | ||||
urce to the root, | ||||
and 1 <= ia <= n, where n is the total number of | ||||
intermediate routers (6LR). | ||||
</t> | ||||
<t> | ||||
6LR_id represents the intermediate routers from the ro ot to the destination, | 6LR_id represents the intermediate routers from the ro ot to the destination, | |||
1 <= id <= m, where m is the total number of th e | and 1 <= id <= m, where m is the total number o f the | |||
intermediate routers (6LRs). | intermediate routers (6LRs). | |||
</t> | </t> | |||
<t> | <t> | |||
As in the previous case, the RAL (6LN) may insert an R PI (RPI1) | As in the previous case, the RAL (6LN) may insert an R PI (RPI1) | |||
header which must be in an IPv6-in-IPv6 header address ed to | header, which must be in an IPv6-in-IPv6 header addres sed to | |||
the root so that the 6LBR can remove this RPI. | the root so that the 6LBR can remove this RPI. | |||
The 6LBR will then insert an RH3 inside a new IPv6-in- IPv6 | The 6LBR will then insert an RH3 inside a new IPv6-in- IPv6 | |||
header addressed to the last 6LR_id (6LR_id = m) along side the insertion of RPI2. | header addressed to the last 6LR_id (6LR_id = m) along side the insertion of RPI2. | |||
</t> | </t> | |||
<t> | <t> | |||
If the originating node does not put the RPI (RPI1) in to an IPv6-in-IPv6 | If the originating node does not put the RPI (RPI1) in to an IPv6-in-IPv6 | |||
header addressed to the root. Then, the RPI1 is forwar ded down from the | header addressed to the root, then the RPI1 is forward ed down from the | |||
root in the inner header to no avail. | root in the inner header to no avail. | |||
</t> | </t> | |||
<t> | <t> | |||
The <xref target="NonStoring-rpl2notrpl"/> shows the tab | <xref target="NonStoring-rpl2notrpl" format="default"/> | |||
le that summarizes what headers | summarizes which headers | |||
are needed for this use case when encapsulation to the r oot takes place. | are needed for this use case when encapsulation to the r oot takes place. | |||
The <xref target="NonStoring-rpl2notrplnoIPIP"/> shows t he table that summarizes what headers | <xref target="NonStoring-rpl2notrplnoIPIP" format="defau lt"/> summarizes which headers | |||
are needed for this use case when no encapsulation to th e root takes place. | are needed for this use case when no encapsulation to th e root takes place. | |||
</t> | </t> | |||
<t> | <table anchor="NonStoring-rpl2notrpl"> | |||
<figure title="Non-SM: Summary of the use of headers fr | <name>Non-SM: Summary of the Use of Headers from RAL to RUL with Encapsulatio | |||
om RAL | n to the Root</name> | |||
to RUL with encapsulation to the root." anchor="NonStori | <thead> | |||
ng-rpl2notrpl" align="center"> | <tr> | |||
<artwork><![CDATA[ | <th align="center">Header</th> | |||
+-----------+---------+---------+---------+---------+---------+------+ | <th align="center">RAL src</th> | |||
| Header | RAL | 6LR_ia | 6LBR | 6LR_id | 6LR_m | RUL | | <th align="center">6LR_ia</th> | |||
| | src | | | | | dst | | <th align="center">6LBR</th> | |||
| | node | | | | | node | | <th align="center">6LR_id</th> | |||
+-----------+---------+---------+---------+---------+---------+------+ | <th align="center">6LR_m</th> | |||
| Added | IP6-IP6 | | IP6-IP6 | -- | -- | -- | | <th align="center">RUL dst</th> | |||
| headers | (RPI1) | -- | (RH3, | | | | | </tr> | |||
| | | | RPI2) | | | | | </thead> | |||
+-----------+---------+---------+---------+---------+---------+------+ | <tbody> | |||
| Modified | -- | | -- | IP6-IP6 | | -- | | <tr> | |||
| headers | | RPI1 | | (RH3, | -- | | | <th align="center">Added headers</th> | |||
| | | | | RPI2) | | | | <td align="center">IP6-IP6 (RPI1)</td> | |||
+-----------+---------+---------+---------+---------+---------+------+ | <td align="center">--</td> | |||
| Removed | -- | -- | IP6-IP6 | -- | IP6-IP6 | -- | | <td align="center">IP6-IP6 (RH3, RPI2)</td> | |||
| headers | | | (RPI1) | | (RH3, | | | <td align="center">--</td> | |||
| | | | | | RPI2) | | | <td align="center">--</td> | |||
+-----------+---------+---------+---------+---------+---------+------+ | <td align="center">--</td> | |||
| Untouched | -- | -- | -- | -- | -- | -- | | </tr> | |||
| headers | | | | | | | | <tr> | |||
+-----------+---------+---------+---------+---------+---------+------+ | <th align="center">Modified headers</th> | |||
]]></artwork></figure> | <td align="center">--</td> | |||
</t> | <td align="center">RPI1</td> | |||
<t> | <td align="center">--</td> | |||
<figure title="Non-SM: Summary of the use of headers fr | <td align="center">IP6-IP6 (RH3, RPI2)</td> | |||
om RAL | <td align="center">--</td> | |||
to RUL without encapsulation to the root." anchor="NonSt | <td align="center">--</td> | |||
oring-rpl2notrplnoIPIP" align="center"> | </tr> | |||
<artwork><![CDATA[ | <tr> | |||
+-----------+------+--------+---------+---------+---------+---------+ | <th align="center">Removed headers</th> | |||
| Header | RAL | 6LR_ia | 6LBR | 6LR_id | 6LR_n | RUL | | <td align="center">--</td> | |||
| | src | | | | | dst | | <td align="center">--</td> | |||
| | node | | | | | node | | <td align="center">IP6-IP6 (RPI1)</td> | |||
+-----------+------+--------+---------+---------+---------+---------+ | <td align="center">--</td> | |||
| Inserted | RPI1 | -- | IP6-IP6 | -- | -- | -- | | <td align="center">IP6-IP6 (RH3, RPI2)</td> | |||
| headers | | | (RH3, | | | | | <td align="center">--</td> | |||
| | | | RPI2) | | | | | </tr> | |||
+-----------+------+--------+---------+---------+---------+---------+ | <tr> | |||
| Modified | -- | RPI1 | -- | IP6-IP6 | -- | -- | | <th align="center">Untouched headers</th> | |||
| headers | | | | (RH3, | | | | <td align="center">--</td> | |||
| | | | | RPI2) | | | | <td align="center">--</td> | |||
+-----------+------+--------+---------+---------+---------+---------+ | <td align="center">--</td> | |||
| Removed | -- | -- | -- | -- | IP6-IP6 | -- | | <td align="center">--</td> | |||
| headers | | | | | (RH3, | | | <td align="center">--</td> | |||
| | | | | | RPI2) | | | <td align="center">--</td> | |||
+-----------+------+--------+---------+---------+---------+---------+ | </tr> | |||
| Untouched | -- | -- | RPI1 | RPI1 | RPI1 | RPI1 | | </tbody> | |||
| headers | | | | | |(Ignored)| | </table> | |||
+-----------+------+--------+---------+---------+---------+---------+ | <table anchor="NonStoring-rpl2notrplnoIPIP"> | |||
<name>Non-SM: Summary of the Use of Headers from RAL to RUL without Encapsula | ||||
]]></artwork></figure> | tion to the Root</name> | |||
</t> | <thead> | |||
<tr> | ||||
</section> | <th align="center">Header</th> | |||
<th align="center">RAL src</th> | ||||
<section title="Non-SM: Example of Flow from RUL to RAL"> | <th align="center">6LR_ia</th> | |||
<th align="center">6LBR</th> | ||||
<t> | <th align="center">6LR_id</th> | |||
In this case the flow comprises: | <th align="center">6LR_n</th> | |||
</t> | <th align="center">RUL dst</th> | |||
<t> | </tr> | |||
RUL (IPv6 src node) --> 6LR_1 --> 6LR_ia --> root (6LBR | </thead> | |||
) --> 6LR_id --> RAL dst (6LN) | <tbody> | |||
</t> | <tr> | |||
<t> | <th align="center">Added headers</th> | |||
For example, a communication flow could be: Node G (RUL) | <td align="center">RPI1</td> | |||
--> Node E --> Node B --> Node A (root) --> Node B --> Node E --> Node H (RAL) | <td align="center">--</td> | |||
</t> | <td align="center">IP6-IP6 (RH3, RPI2)</td> | |||
<t> | <td align="center">--</td> | |||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
<tr> | ||||
<th align="center">Modified headers</th> | ||||
<td align="center">--</td> | ||||
<td align="center">RPI1</td> | ||||
<td align="center">--</td> | ||||
<td align="center">IP6-IP6 (RH3, RPI2)</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
<tr> | ||||
<th align="center">Removed headers</th> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">IP6-IP6 (RH3, RPI2)</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
<tr> | ||||
<th align="center">Untouched headers</th> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">RPI1</td> | ||||
<td align="center">RPI1</td> | ||||
<td align="center">RPI1</td> | ||||
<td align="center">RPI1 (ignored)</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | ||||
<section numbered="true" toc="default"> | ||||
<name>Non-SM: Example of Flow from RUL to RAL</name> | ||||
<t> | ||||
In this case, the flow comprises: | ||||
</t> | ||||
<t> | ||||
RUL (IPv6 src node) --> 6LR_1 --> 6LR_ia --> r | ||||
oot (6LBR) --> 6LR_id --> RAL dst (6LN) | ||||
</t> | ||||
<t> | ||||
For example, a communication flow could be: | ||||
Node G (RUL) --> Node E --> Node B --> Node A (root) --> Node B --&g | ||||
t; Node E --> Node H (RAL) | ||||
</t> | ||||
<t> | ||||
6LR_ia represents the intermediate routers from source to the root, | 6LR_ia represents the intermediate routers from source to the root, | |||
1 <= ia <= n, where n is the total number of int | and 1 <= ia <= n, where n is the total number of | |||
ermediate routers (6LR) | intermediate routers (6LR). | |||
</t> | </t> | |||
<t> | <t> | |||
6LR_id represents the intermediate routers from the ro ot to the destination, | 6LR_id represents the intermediate routers from the ro ot to the destination, | |||
1 <= id <= m, where m is the total number of the | and 1 <= id <= m, where m is the total number of the | |||
intermediate routers (6LR). | intermediate routers (6LR). | |||
</t> | </t> | |||
<t> | <t> | |||
In this scenario the RPI (RPI1) is added by the first | In this scenario, the RPI (RPI1) is added by the first | |||
6LR (6LR_1) inside an | 6LR (6LR_1) inside an | |||
IPv6-in-IPv6 header addressed to the root. The 6LBR w ill | IPv6-in-IPv6 header addressed to the root. The 6LBR w ill | |||
remove this RPI, and add its own IPv6-in-IPv6 header | remove this RPI and add its own IPv6-in-IPv6 header | |||
containing an RH3 header and an RPI (RPI2). | containing an RH3 header and an RPI (RPI2). | |||
</t> | </t> | |||
<t> | <t> | |||
The <xref target="NonStoring-notrpl2rpl"/> shows the tab | <xref target="NonStoring-notrpl2rpl" format="default"/> | |||
le that summarizes what headers are needed for this use case. | summarizes which headers are needed for this use case. | |||
</t> | ||||
<t> | ||||
<figure title="Non-SM: Summary of the use of headers fro | ||||
m RUL to RAL." anchor="NonStoring-notrpl2rpl" align="center"> | ||||
<artwork><![CDATA[ | ||||
+----------+------+---------+---------+---------+---------+---------+ | ||||
| Header | RUL | 6LR_1 | 6LR_ia | 6LBR | 6LR_id | RAL | | ||||
| | src | | | | | dst | | ||||
| | node | | | | | node | | ||||
+----------+------+---------+---------+---------+---------+---------+ | ||||
| Added | -- | IP6-IP6 | -- | IP6-IP6 | -- | -- | | ||||
| headers | | (RPI1) | | (RH3, | | | | ||||
| | | | | RPI2) | | | | ||||
+----------+------+---------+---------+---------+---------+---------+ | ||||
| Modified | -- | | | -- | IP6-IP6 | -- | | ||||
| headers | | -- | RPI1 | | (RH3, | | | ||||
| | | | | | RPI2) | | | ||||
+----------+------+---------+---------+---------+---------+---------+ | ||||
| Removed | -- | | -- | IP6-IP6 | -- | IP6-IP6 | | ||||
| headers | | -- | | (RPI1) | | (RH3, | | ||||
| | | | | | | RPI2) | | ||||
+----------+------+---------+---------+---------+---------+---------+ | ||||
|Untouched | -- | -- | -- | -- | -- | -- | | ||||
| headers | | | | | | | | ||||
+----------+------+---------+---------+---------+---------+---------+ | ||||
]]></artwork></figure> | ||||
</t> | ||||
</section> | ||||
<section title="Non-SM: Example of Flow from RUL to RUL"> | ||||
<t> | </t> | |||
In this case the flow comprises: | <table anchor="NonStoring-notrpl2rpl"> | |||
</t> | <name>Non-SM: Summary of the Use of Headers from RUL to RAL</name> | |||
<t> | <thead> | |||
RUL (IPv6 src node) --> 6LR_1 --> 6LR_ia --> root (6LBR | <tr> | |||
) --> 6LR_id --> RUL (IPv6 dst node) | <th align="center">Header</th> | |||
</t> | <th align="center">RUL src</th> | |||
<t> | <th align="center">6LR_1</th> | |||
For example, a communication flow could be: Node G --> N | <th align="center">6LR_ia</th> | |||
ode E --> Node B --> Node A (root) --> Node C --> Node J | <th align="center">6LBR</th> | |||
</t> | <th align="center">6LR_id</th> | |||
<t> | <th align="center">RAL dst</th> | |||
6LR_ia represents the intermediate routers from source | </tr> | |||
to the root, | </thead> | |||
1 <= ia <= n, where n is the total number of int | <tbody> | |||
ermediate routers (6LR) | <tr> | |||
</t> | <th align="center">Added headers</th> | |||
<t> | <td align="center">--</td> | |||
<td align="center">IP6-IP6 (RPI1)</td> | ||||
<td align="center">--</td> | ||||
<td align="center">IP6-IP6 (RH3, RPI2)</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
<tr> | ||||
<th align="center">Modified headers</th> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">RPI1</td> | ||||
<td align="center">--</td> | ||||
<td align="center">IP6-IP6 (RH3, RPI2)</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
<tr> | ||||
<th align="center">Removed headers</th> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">IP6-IP6 (RPI1)</td> | ||||
<td align="center">--</td> | ||||
<td align="center">IP6-IP6 (RH3, RPI2)</td> | ||||
</tr> | ||||
<tr> | ||||
<th align="center">Untouched headers</th> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | ||||
<section numbered="true" toc="default"> | ||||
<name>Non-SM: Example of Flow from RUL to RUL</name> | ||||
<t> | ||||
In this case, the flow comprises: | ||||
</t> | ||||
<t> | ||||
RUL (IPv6 src node) --> 6LR_1 --> 6LR_ia --> r | ||||
oot (6LBR) --> 6LR_id --> RUL (IPv6 dst node) | ||||
</t> | ||||
<t> | ||||
For example, a communication flow could be: | ||||
Node G --> Node E --> Node B --> Node A (root) --> Node C --> Nod | ||||
e J | ||||
</t> | ||||
<t> | ||||
6LR_ia represents the intermediate routers from the so | ||||
urce to the root, | ||||
and 1 <= ia <= n, where n is the total number of | ||||
intermediate routers (6LR). | ||||
</t> | ||||
<t> | ||||
6LR_id represents the intermediate routers from the ro ot to the destination, | 6LR_id represents the intermediate routers from the ro ot to the destination, | |||
1 <= id <= m, where m is the total number of the | and 1 <= id <= m, where m is the total number of the | |||
intermediate routers (6LR). | intermediate routers (6LR). | |||
</t> | </t> | |||
<t> | <t> | |||
This scenario is the combination of the previous two c ases. | This scenario is the combination of the previous two c ases. | |||
</t> | </t> | |||
<t> | <t> | |||
The <xref target="NonStoring-notrpl2notrpl"/> shows the | <xref target="NonStoring-notrpl2notrpl" format="default" | |||
table that summarizes what headers are needed for this use case. | /> summarizes which headers are needed for this use case. | |||
</t> | ||||
<t> | ||||
<figure title="Non-SM: Summary of the use of headers fro | ||||
m RUL to RUL" anchor="NonStoring-notrpl2notrpl" align="center"> | ||||
<artwork><![CDATA[ | ||||
+---------+------+-------+-------+---------+-------+---------+------+ | ||||
| Header | RUL | 6LR_1 | 6LR_ia| 6LBR |6LR_id | 6LR_m | RUL | | ||||
| | src | | | | | | dst | | ||||
| | node | | | | | | node | | ||||
+---------+------+-------+-------+---------+-------+---------+------+ | ||||
| Added | -- |IP6-IP6| -- | IP6-IP6 | -- | -- | -- | | ||||
| headers | | (RPI1)| | (RH3, | | | | | ||||
| | | | | RPI2) | | | | | ||||
+---------+------+-------+-------+---------+-------+---------+------+ | ||||
| Modified| -- | -- | | -- |IP6-IP6| -- | -- | | ||||
| headers | | | RPI1 | | (RH3, | | | | ||||
| | | | | | RPI2)| | | | ||||
+---------+------+-------+-------+---------+-------+---------+------+ | ||||
| Removed | -- | -- | -- | IP6-IP6 | -- | IP6-IP6 | -- | | ||||
| headers | | | | (RPI1) | | (RH3, | | | ||||
| | | | | | | RPI2) | | | ||||
+---------+------+-------+-------+---------+-------+---------+------+ | ||||
|Untouched| -- | -- | -- | -- | -- | -- | -- | | ||||
| headers | | | | | | | | | ||||
+---------+------+-------+-------+---------+-------+---------+------+ | ||||
]]></artwork></figure> | ||||
</t> | ||||
</section> | ||||
</section> | ||||
</section> | ||||
<section title="Operational Considerations of supporting | </t> | |||
RUL-leaves" anchor="notrplaware"> | <table anchor="NonStoring-notrpl2notrpl"> | |||
<t> | <name>Non-SM: Summary of the Use of Headers from RUL to RUL</name> | |||
<thead> | ||||
<tr> | ||||
<th align="center">Header</th> | ||||
<th align="center">RUL src</th> | ||||
<th align="center">6LR_1</th> | ||||
<th align="center">6LR_ia</th> | ||||
<th align="center">6LBR</th> | ||||
<th align="center">6LR_id</th> | ||||
<th align="center">6LR_m</th> | ||||
<th align="center">RUL dst</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<th align="center">Added headers</th> | ||||
<td align="center">--</td> | ||||
<td align="center">IP6-IP6 (RPI1)</td> | ||||
<td align="center">--</td> | ||||
<td align="center">IP6-IP6 (RH3, RPI2)</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
<tr> | ||||
<th align="center">Modified headers</th> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">RPI1</td> | ||||
<td align="center">--</td> | ||||
<td align="center">IP6-IP6 (RH3, RPI2)</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
<tr> | ||||
<th align="center">Removed headers</th> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">IP6-IP6 (RPI1)</td> | ||||
<td align="center">--</td> | ||||
<td align="center">IP6-IP6 (RH3, RPI2)</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
<tr> | ||||
<th align="center">Untouched headers</th> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
<td align="center">--</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | ||||
</section> | ||||
</section> | ||||
<section anchor="notrplaware" numbered="true" toc="default"> | ||||
<name>Operational Considerations of Supporting RULs</name> | ||||
<t> | ||||
Roughly half of the situations described in this document | Roughly half of the situations described in this document | |||
involve leaf ("host") nodes that do not speak RPL. These nodes | involve leaf ("host") nodes that do not speak RPL. These nodes | |||
fall into two further categories: ones that drop a packet | fall into two further categories: ones that drop a packet | |||
that have RPI or RH3 headers, and ones that continue to | that have RPI or RH3 headers, and ones that continue to | |||
process a packet that has RPI and/or RH3 headers. | process a packet that has RPI and/or RH3 headers. | |||
</t> | </t> | |||
<t> | <t> | |||
<xref target="RFC8200" /> provides for new rules that suggest | <xref target="RFC8200" format="default"/> provides for new rules t | |||
hat suggest | ||||
that nodes that have not been configured (explicitly) to | that nodes that have not been configured (explicitly) to | |||
examine Hop-by-Hop headers, should ignore those headers, and | examine Hop-by-Hop Options headers should ignore those headers and | |||
continue processing the packet. Despite this, and despite the | continue processing the packet. Despite this, and despite the | |||
switch from 0x63 to 0x23, there may be nodes that are pre-RFC8200, | switch from 0x63 to 0x23, there may be nodes that predate RFC 8200 | |||
or simply intolerant. Those nodes will drop packets that | or are simply intolerant. Those nodes will drop packets that | |||
continue to have RPL artifacts in them. In general, such | continue to have RPL artifacts in them. In general, such | |||
nodes can not be easily supported in RPL LLNs. | nodes cannot be easily supported in RPL LLNs. | |||
</t> | </t> | |||
<t> | <t> | |||
There are some specific cases where it is possible to remove | There are some specific cases where it is possible to remove | |||
the RPL artifacts prior to forwarding the packet to the leaf | the RPL artifacts prior to forwarding the packet to the leaf | |||
host. The critical thing is that the artifacts have been | host. The critical thing is that the artifacts have been | |||
inserted by the RPL root inside an IPv6-in-IPv6 header, and | inserted by the RPL root inside an IPv6-in-IPv6 header, and | |||
that the header has been addressed to the 6LR immediately prior | that the header has been addressed to the 6LR immediately prior | |||
to the leaf node. In that case, in the process of removing the | to the leaf node. In that case, in the process of removing the | |||
IPv6-in-IPv6 header, the artifacts can also be removed. | IPv6-in-IPv6 header, the artifacts can also be removed. | |||
</t> | </t> | |||
<t> | <t> | |||
The above case occurs whenever traffic originates from the | The above case occurs whenever traffic originates from the | |||
outside the LLN (the "Internet" cases above), and non-storing | outside the LLN (the "Internet" cases above), and Non-Storing | |||
mode is used. In non-storing mode, the RPL root knows the exact t | mode is used. In Non-Storing mode, the RPL root knows the exact t | |||
opology | opology | |||
(as it must create the RH3 header) and therefore knows which 6LR i s prior to the | (as it must create the RH3 header) and therefore knows which 6LR i s prior to the | |||
leaf. For example, in <xref target="fig_CommonTopology"/>, Node E is the 6LR prior to leaf | leaf. For example, in <xref target="fig_CommonTopology" format="d efault"/>, Node E is the 6LR prior to leaf | |||
Node G, or Node C is the 6LR prior to leaf Node J. | Node G, or Node C is the 6LR prior to leaf Node J. | |||
</t> | </t> | |||
<t> | <t> | |||
Traffic originating from the RPL root (such as when the data | Traffic originating from the RPL root (such as when the data | |||
collection system is co-located on the RPL root), does not | collection system is co-located on the RPL root), does not | |||
require an IPv6-in-IPv6 header (in storing or non-storing mode), a s the packet | require an IPv6-in-IPv6 header (in Storing or Non-Storing mode), a s the packet | |||
is originating at the root, and the root can insert the RPI | is originating at the root, and the root can insert the RPI | |||
and RH3 headers directly into the packet, as it is formed. | and RH3 headers directly into the packet as it is formed. | |||
Such a packet is slightly smaller, but only can be sent to | Such a packet is slightly smaller, but can only be sent to | |||
nodes (whether RPL aware or not), that will tolerate the | nodes (whether RPL aware or not) that will tolerate the | |||
RPL artifacts. | RPL artifacts. | |||
</t> | </t> | |||
<t> | <t> | |||
An operator that finds itself with a high amount of traffic from t he | An operator that finds itself with a high amount of traffic from t he | |||
RPL root to RPL-not-aware-leaves, will have to do IPv6-in-IPv6 | RPL root to RPL-unaware leaves will have to do IPv6-in-IPv6 | |||
encapsulation if the leaf is not tolerant of the RPL artifacts. | encapsulation if the leaf is not tolerant of the RPL artifacts. | |||
Such an operator could otherwise omit this unnecessary header | Such an operator could otherwise omit this unnecessary header | |||
if it was certain of the properties of the leaf. | if it was certain of the properties of the leaf. | |||
</t> | </t> | |||
<t> | <t> | |||
As storing mode can not know the final path of the traffic, | As the Storing mode cannot know the final path of the traffic, | |||
intolerant (that drop packets with RPL artifacts) leaf nodes | intolerant leaf nodes, which drop packets with RPL artifacts, | |||
can not be supported. | cannot be supported. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="sec_op_con_0x23" numbered="true" toc="default"> | ||||
<section title="Operational considerations of introducing 0x23"> | <name>Operational Considerations of Introducing 0x23</name> | |||
<t> | <t> | |||
This section describes the operational considerations of introducing the new RPI Option Type of 0x23. | This section describes the operational considerations of introducing the new RPI Option Type of 0x23. | |||
</t> | </t> | |||
<t> | ||||
<t> | During bootstrapping, the node receives the DIO with the informatio | |||
During bootstrapping the node gets the DIO with the information of | n of RPI Option Type, indicating | |||
RPI Option Type, indicating | the new RPI in the DODAG Configuration option flag. | |||
the new RPI in the DODAG Configuration option Flag. | The DODAG root is in charge of configuring the current network with | |||
The DODAG root is in charge to configure the current network to the | the new value, through DIO | |||
new value, through DIO | messages, and determining when all the nodes have been set with the | |||
messages and when all the nodes are set with the new value. The DOD | new value. The DODAG should change to a new DODAG version. | |||
AG should change to a new DODAG version. | ||||
In case of rebooting, the node does not remember the RPI Option Typ e. | In case of rebooting, the node does not remember the RPI Option Typ e. | |||
Thus, the DIO is sent with a flag indicating the new RPI Option Typ e. | Thus, the DIO is sent with a flag indicating the new RPI Option Typ e. | |||
</t> | </t> | |||
<t> | <t> | |||
The DODAG Configuration option is contained in a RPL DIO message, whi | The DODAG Configuration option is contained in a RPL DIO message, whi | |||
ch contains a unique DTSN counter. | ch contains a unique Destination Advertisement Trigger Sequence Number (DTSN) co | |||
unter. | ||||
The leaf nodes respond to this message with DAO messages containing t he same DTSN. | The leaf nodes respond to this message with DAO messages containing t he same DTSN. | |||
This is a normal part of RPL routing; the RPL root therefore knows wh en the updated | This is a normal part of RPL routing; the RPL root therefore knows wh en the updated | |||
DODAG Configuration option has been seen by all nodes. | DODAG Configuration option has been seen by all nodes. | |||
</t> | </t> | |||
<t> | <t> | |||
Before the migration happens, all the RPL-aware nodes should suppor | Before the migration happens, all the RPL-aware nodes should suppor | |||
t both values . | t both values. | |||
The migration procedure is triggered when the DIO is sent with the flag | The migration procedure is triggered when the DIO is sent with the flag | |||
indicating the new RPI Option Type. | indicating the new RPI Option Type. | |||
Namely, it remains at 0x63 until it is sure that the network is cap able of 0x23, then it abruptly changes to 0x23. | Namely, it remains at 0x63 until it is sure that the network is cap able of 0x23, then it abruptly changes to 0x23. | |||
The 0x23 RPI Option allows to send packets to not-RPL nodes. The no | The 0x23 RPI Option allows the sending of packets to non-RPL nodes. | |||
t-RPL nodes should ignore the option and continue processing the packets. | The non-RPL nodes should ignore the option and continue processing the packets. | |||
</t> | </t> | |||
<t> | <t> | |||
As mentioned previously, indicating the new RPI in the DODAG Config uration option flag is a way to avoid the flag day | As mentioned previously, indicating the new RPI in the DODAG Config uration option flag is a way to avoid the flag day | |||
(abrupt changeover) in a network using 0x63 as the RPI Option Type value. It is suggested that RPL implementations | (abrupt changeover) in a network using 0x63 as the RPI Option Type value. It is suggested that RPL implementations | |||
accept both 0x63 and 0x23 RPI Option type values when processing th | accept both 0x63 and 0x23 RPI Option Type values when processing th | |||
e header to enable interoperability. | e header to enable interoperability. | |||
</t> | </t> | |||
</section> | ||||
<section anchor="iana" numbered="true" toc="default"> | ||||
<name>IANA Considerations</name> | ||||
<section numbered="true" toc="default"> | ||||
<name>Option Type in RPL Option</name> | ||||
<t> | ||||
This document updates the registration made in the | ||||
"Destination Options and Hop-by-Hop Options" subregistry <xref targe | ||||
t="RFC6553" format="default"/> from 0x63 to 0x23 | ||||
as shown in <xref target="fig_IanaRPIOption" format="default"/>. | ||||
</t> | ||||
<table anchor="fig_IanaRPIOption"> | ||||
<name>Option Type in RPL Option</name> | ||||
<thead> | ||||
<tr> | ||||
<th rowspan="2" colspan="1" align="center">Hex Value</th> | ||||
<th rowspan="1" colspan="3" align="center">Binary Value</th> | ||||
<th rowspan="2" colspan="1" align="center">Description</th> | ||||
<th rowspan="2" colspan="1" align="center">Reference</th> | ||||
</tr> | ||||
<tr> | ||||
<th align="center">act</th> | ||||
<th align="center">chg</th> | ||||
<th align="center">rest</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td align="center">0x23</td> | ||||
<td align="center">00</td> | ||||
<td align="center">1</td> | ||||
<td align="center">00011</td> | ||||
<td align="center">RPL Option</td> | ||||
<td align="center">This document</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="center">0x63</td> | ||||
<td align="center">01</td> | ||||
<td align="center">1</td> | ||||
<td align="center">00011</td> | ||||
<td align="center">RPL Option (DEPRECATED)</td> | ||||
<td align="center"><xref target="RFC6553" format="default"/>, this docu | ||||
ment</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<t> The "DODAG Configuration | ||||
Option Flags for MOP 0..6" subregistry is updated as follows (<xref ta | ||||
rget="fig_RPIflagdayConfOption" format="default"/>): | ||||
</t> | ||||
<table anchor="fig_RPIflagdayConfOption"> | ||||
<name>DODAG Configuration Option Flag to Indicate the RPI Flag Day</name> | ||||
<thead> | ||||
<tr> | ||||
<th align="center">Bit Number</th> | ||||
<th align="center">Capability Description</th> | ||||
<th align="center">Reference</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td align="center">3</td> | ||||
<td align="center">RPI 0x23 enable</td> | ||||
<td align="center">This document</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | </section> | |||
<section anchor="sec_op_flags_reg" numbered="true" toc="default"> | ||||
<section title="IANA Considerations" anchor="iana"> | <name>Change to the "DODAG Configuration Option Flags" Subregistry</name | |||
<section title="Option Type in RPL Option"> | > | |||
<t> | <t> | |||
This document updates the registration made in <xref target="RFC6553 | IANA has changed the name of the "DODAG | |||
"/> | Configuration Option Flags" subregistry to "DODAG Configuration Opti | |||
Destination Options and Hop-by-Hop Options registry from 0x63 to 0x2 | on Flags | |||
3 | ||||
as shown in <xref target="fig_IanaRPIOption"/>. | ||||
</t> | ||||
<t> | ||||
<figure title="Option Type in RPL Option.(*)represents this document | ||||
" anchor="fig_IanaRPIOption" align="center"> | ||||
<artwork> <![CDATA[ | ||||
+-------+-------------------+------------------------+---------- -+ | ||||
| Hex | Binary Value | Description | Reference | | ||||
+ Value +-------------------+ + + | ||||
| | act | chg | rest | | | | ||||
+-------+-----+-----+-------+------------------------+------------+ | ||||
| 0x23 | 00 | 1 | 00011 | RPL Option |[RFCXXXX](*)| | ||||
+-------+-----+-----+-------+------------------------+------------+ | ||||
| 0x63 | 01 | 1 | 00011 | RPL Option(DEPRECATED) | [RFC6553] | | ||||
| | | | | |[RFCXXXX](*)| | ||||
+-------+-----+-----+-------+------------------------+------------+ | ||||
]]></artwork></figure> | ||||
</t> | ||||
<t> DODAG Configuration | ||||
option is updated as follows (<xref target="fig_RPIflagdayConfOption"/ | ||||
>): | ||||
</t> | ||||
<t> | ||||
<figure title="DODAG Configuration option Flag to indicate the RPI-f | ||||
lag-day." anchor="fig_RPIflagdayConfOption" align="center"> | ||||
<artwork> <![CDATA[ | ||||
+------------+-----------------+---------------+ | ||||
| Bit number | Description | Reference | | ||||
+------------+-----------------+---------------+ | ||||
| 3 | RPI 0x23 enable | This document | | ||||
+------------+-----------------+---------------+ | ||||
]]></artwork></figure> | ||||
</t> | ||||
</section> | ||||
<section title="Change to the DODAG Configuration Options Flags registry | ||||
"> | ||||
<t> | ||||
This document requests IANA to change the name of the "DODAG | ||||
Configuration Option Flags" registry to "DODAG Configuration Option | ||||
Flags | ||||
for MOP 0..6". | for MOP 0..6". | |||
</t> | </t> | |||
<t>The subregistry references this document for this change.</t> | ||||
<t>This document requests to be mentioned as a reference for this chan | ||||
ge.</t> | ||||
</section> | ||||
<section title="Change MOP value 7 to Reserved"> | ||||
<t> | ||||
This document requests the changing the registration status of value | ||||
7 in | ||||
the Mode of Operation registry from Unassigned to Reserved. This ch | ||||
ange | ||||
is in support of future work. | ||||
</t> | ||||
<t> | ||||
This document requests to be mentioned as a reference for this entry | ||||
in | ||||
the registry. | ||||
</t> | ||||
</section> | ||||
</section> | </section> | |||
<section anchor="sec_mop_val_change" numbered="true" toc="default"> | ||||
<name>Change MOP Value 7 to Reserved</name> | ||||
<t> | ||||
IANA has changed the registration status of value 7 in | ||||
the "Mode of Operation" subregistry from Unassigned to Reserved. Th | ||||
is change | ||||
is in support of future work. | ||||
</t> | ||||
<section anchor="Security" title="Security Considerations"> | <t> | |||
<t> | This document is listed as a reference for this entry in | |||
The security considerations covered in <xref target="RFC6553"/> and | the subregistry. | |||
<xref target="RFC6554"/> apply when the packets are in the RPL | </t> | |||
</section> | ||||
</section> | ||||
<section anchor="Security" numbered="true" toc="default"> | ||||
<name>Security Considerations</name> | ||||
<t> | ||||
The security considerations covered in <xref target="RFC6553" forma | ||||
t="default"/> and | ||||
<xref target="RFC6554" format="default"/> apply when the packets ar | ||||
e in the RPL | ||||
Domain. | Domain. | |||
</t> | </t> | |||
<t> | <t> | |||
The IPv6-in-IPv6 mechanism described in this document is much more | The IPv6-in-IPv6 mechanism described in this document is much more | |||
limited than the general mechanism described in <xref | limited than the general mechanism described in <xref target="RFC247 | |||
target="RFC2473"/>. The willingness of each node in the LLN to | 3" format="default"/>. The willingness of each node in the LLN to | |||
decapsulate packets and forward them could be exploited by nodes to | decapsulate packets and forward them could be exploited by nodes to | |||
disguise the origin of an attack. | disguise the origin of an attack. | |||
</t> | </t> | |||
<t> | ||||
<t> | ||||
While a typical LLN may be a very poor origin for attack traffic | While a typical LLN may be a very poor origin for attack traffic | |||
(as the networks tend to be very slow, | (as the networks tend to be very slow, | |||
and the nodes often have very low duty cycles), given enough | and the nodes often have very low duty cycles), given enough | |||
nodes, LLNs could still have a | nodes, LLNs could still have a | |||
significant impact, particularly if the attack is targeting another LLN. | significant impact, particularly if the attack is targeting another LLN. | |||
Additionally, some uses of RPL involve large backbone ISP scale | Additionally, some uses of RPL involve large-backbone, ISP-scale | |||
equipment <xref target="I-D.ietf-anima-autonomic-control-plane"/>, | equipment <xref target="I-D.ietf-anima-autonomic-control-plane" form | |||
which may be equipped with multiple 100Gb/s interfaces. | at="default"/>, | |||
</t> | which may be equipped with multiple 100 Gb/s interfaces. | |||
<t> | </t> | |||
<t> | ||||
Blocking or careful filtering of IPv6-in-IPv6 traffic entering the L LN as | Blocking or careful filtering of IPv6-in-IPv6 traffic entering the L LN as | |||
described above will make sure that any attack that is mounted | described above will make sure that any attack that is mounted | |||
must originate from compromised nodes within the LLN. | must originate from compromised nodes within the LLN. | |||
The use of BCP38 <xref target="BCP38"/> filtering at the RPL root on | The use of network ingress filtering <xref target="BCP38" format="de | |||
egress traffic will | fault"/> on egress traffic at | |||
both alert the operator to the existence of the attack, as well | the RPL root will alert the operator to the existence of the attack | |||
as drop the attack traffic. As the RPL network is typically | as well as drop the attack traffic. As the RPL network is typically | |||
numbered from a single prefix, which is itself assigned by RPL, | numbered from a single prefix, which is itself assigned by RPL, | |||
BCP38 filtering involves a single prefix comparison and should be | network ingress filtering <xref target="BCP38" format="default"/> in volves a single prefix comparison and should be | |||
trivial to automatically configure. | trivial to automatically configure. | |||
</t> | </t> | |||
<t> | <t> | |||
There are some scenarios where IPv6-in-IPv6 traffic should be allowe d to | There are some scenarios where IPv6-in-IPv6 traffic should be allowe d to | |||
pass through the RPL root, such as the IPv6-in-IPv6 mediated | pass through the RPL root, such as the IPv6-in-IPv6 mediated | |||
communications between a new Pledge and the Join | communications between a new pledge and the Join | |||
Registrar/Coordinator (JRC) when | Registrar/Coordinator (JRC) when | |||
using <xref target="I-D.ietf-anima-bootstrapping-keyinfra" /> and | using <xref target="I-D.ietf-anima-bootstrapping-keyinfra" format="d | |||
<xref target="I-D.ietf-6tisch-dtsecurity-zerotouch-join" />. This is | efault"/> and | |||
<xref target="I-D.ietf-6tisch-dtsecurity-zerotouch-join" format="def | ||||
ault"/>. This is | ||||
the case for the RPL root to do careful filtering: it occurs only | the case for the RPL root to do careful filtering: it occurs only | |||
when the Join Coordinator is not co-located inside the RPL root. | when the Join Coordinator is not co-located inside the RPL root. | |||
</t> | </t> | |||
<t> | ||||
<t> | ||||
With the above precautions, an attack using IPv6-in-IPv6 tunnels can only be | With the above precautions, an attack using IPv6-in-IPv6 tunnels can only be | |||
by a node within the LLN on another node within the LLN. Such an | by a node within the LLN on another node within the LLN. Such an | |||
attack could, of course, be done directly. An attack of this | attack could, of course, be done directly. An attack of this | |||
kind is meaningful only if the source addresses are either fake | kind is meaningful only if the source addresses are either fake | |||
or if the point is to amplify return traffic. | or if the point is to amplify return traffic. | |||
Such an attack, could also be done without the use of IPv6-in-IPv6 | Such an attack could also be done without the use of IPv6-in-IPv6 | |||
headers using forged source addresses. | headers, by using forged source addresses instead. | |||
If the attack requires bi-directional communication, then IPv6-in-IP | If the attack requires bidirectional communication, then IPv6-in-IPv | |||
v6 | 6 | |||
provides no advantages. | provides no advantages. | |||
</t> | </t> | |||
<t> | <t> | |||
Whenever IPv6-in-IPv6 headers are being proposed, there is a concern | Whenever IPv6-in-IPv6 headers are being proposed, there is a concern | |||
about creating security issues. In the Security Considerations | about creating security issues. In the Security Considerations | |||
section of <xref target="RFC2473"/>, it was suggested that tunnel en try and exit | section of <xref target="RFC2473" format="default"/> (Section <xref target="RFC2473" section="9" sectionFormat="bare" format="default"/>), it was su ggested that tunnel entry and exit | |||
points can be secured by securing the IPv6 path between them. This | points can be secured by securing the IPv6 path between them. This | |||
recommendation is not practical for RPL networks. <xref target="RFC | recommendation is not practical for RPL networks. | |||
5406" /> goes | <xref target="RFC5406" format="default"/> provides guidance on what | |||
into some detail on what additional details would be needed in order | on what additional details are needed in order to "Use IPsec". | |||
to "Use IPsec". Use of ESP would | While the use of Encapsulating Security Payload (ESP) would prevent | |||
prevent <xref target="RFC8138"/> compression (compression must occur | source address | |||
before | forgeries, in order to use it with <xref target="RFC8138" format="de | |||
encryption), and <xref target="RFC8138"/> compression is lossy in a | fault"/>, compression would have to occur | |||
way that prevents | before encryption, as the <xref target="RFC8138" format="default"/> | |||
use of AH. These are minor issues. The major issue is how to | compression is lossy. Once encrypted, | |||
establish trust enough such that IKEv2 could be used. This would | there would be no further redundancy to compress. These are minor i | |||
ssues. The major issue is how to | ||||
establish trust enough such that Internet Key Exchange Protocol Vers | ||||
ion 2 (IKEv2) could be used. This would | ||||
require a system of certificates to be present in every single node, | require a system of certificates to be present in every single node, | |||
including any Internet nodes that might need to communicate with the | including any Internet nodes that might need to communicate with the | |||
LLN. Thus, using IPsec requires a global PKI in the general case. | LLN. Thus, using IPsec requires a global PKI in the general case. | |||
</t> | </t> | |||
<t> | <t> | |||
More significantly, the use of IPsec tunnels to protect the IPv6-in- IPv6 | More significantly, the use of IPsec tunnels to protect the IPv6-in- IPv6 | |||
headers would in the general case scale with the square of the | headers would, in the general case, scale with the square of the | |||
number of nodes. This is a lot of resource for a constrained | number of nodes. This is a lot of resources for a constrained | |||
nodes on a constrained network. In the end, the IPsec tunnels | nodes on a constrained network. In the end, the IPsec tunnels | |||
would be providing only BCP38-like origin authentication! | would be providing only BCP38-like origin authentication! | |||
That is, IPsec provides a transitive guarantee to the tunnel exit po int | That is, IPsec provides a transitive guarantee to the tunnel exit po int | |||
that the tunnel entry point did BCP38 on traffic going in. | that the tunnel entry point did network ingress filtering <xref targ et="BCP38" format="default"/> on traffic going in. | |||
Just doing origin filtering per BCP 38 at the entry and | Just doing origin filtering per BCP 38 at the entry and | |||
exit of the LLN provides a similar level of security without all the | exit of the LLN provides a similar level of security without all the | |||
scaling and trust problems related to IPv6 tunnels as discussed in | scaling and trust problems related to IPv6 tunnels as discussed in | |||
RFC 2473. IPsec is not recommended. | <xref target="RFC2473" format="default"/>. IPsec is not recommended. | |||
</t> | </t> | |||
<t> | <t> | |||
An LLN with hostile nodes within it would not be protected against | An LLN with hostile nodes within it would not be protected against | |||
impersonation with the LLN by entry/exit filtering. | impersonation within the LLN by entry/exit filtering. | |||
</t> | </t> | |||
<t> | ||||
<t> | ||||
The RH3 header usage described here can be abused in equivalent | The RH3 header usage described here can be abused in equivalent | |||
ways. An external attacker may form a packet with an RH3 that is | ways. An external attacker may form a packet with an RH3 that is | |||
not fully consumed and encapsulate it to hide the RH3 from | not fully consumed and encapsulate it to hide the RH3 from | |||
intermediate nodes and disguise the origin of | intermediate nodes and disguise the origin of | |||
traffic. As such, the attacker's RH3 header will not be seen by | traffic. As such, the attacker's RH3 header will not be seen by | |||
the network until it reaches the destination, which will decapsulate | the network until it reaches the destination, which will decapsulate | |||
it. As indicated in section 4.2 of <xref target="RFC6554"/>, RPL | it. As indicated in <xref target="RFC6554" section="4.2" sectionForm at="of" format="default"/>, RPL | |||
routers are responsible for ensuring that an SRH is only used | routers are responsible for ensuring that an SRH is only used | |||
between RPL routers. As such, if there is an RH3 that is not fully | between RPL routers. As such, if there is an RH3 that is not fully | |||
consumed in the encapsulated packet, the node that decapsulates it | consumed in the encapsulated packet, the node that decapsulates it | |||
MUST ensure that the outer packet was originated in the RPL domain | <bcp14>MUST</bcp14> ensure that the outer packet was originated in t he RPL domain | |||
and drop the packet otherwise. | and drop the packet otherwise. | |||
</t> | </t> | |||
<t> | <t> | |||
Also, as indicated by section 2 of | Also, as indicated by | |||
<xref target="RFC6554"/>, RPL Border Routers "do not allow datagrams | <xref target="RFC6554" section="2" sectionFormat="of" format="defaul | |||
carrying an SRH header to enter or exit a RPL routing domain". This | t"/>, RPL Border Routers | |||
"do not allow datagrams | ||||
carrying an SRH header to enter or exit a RPL routing domain." | ||||
This | ||||
sentence must be understood as concerning non-fully-consumed packets . | sentence must be understood as concerning non-fully-consumed packets . | |||
A consumed (inert) | A consumed (inert) | |||
RH3 header could be present in a packet that flows from one LLN, | RH3 header could be present in a packet that flows from one LLN, | |||
crosses the Internet, and enters another LLN. As per the | crosses the Internet, and enters another LLN. Per the | |||
discussion in this document, such headers do not need to be | discussion in this document, such headers do not need to be | |||
removed. However, there is no case described in this document | removed. However, there is no case described in this document | |||
where an RH3 is inserted in a non-storing network on traffic that | where an RH3 is inserted in a Non-Storing network on traffic that | |||
is leaving the LLN, but this document should not preclude such a | is leaving the LLN, but this document should not preclude such a | |||
future innovation. | future innovation. | |||
</t> | </t> | |||
<t> | <t> | |||
In short, a packet that crosses the border of the RPL domain MAY | In short, a packet that crosses the border of the RPL domain <bcp14> | |||
carry and RH3, and if so, that RH3 MUST be fully consumed. | MAY</bcp14> | |||
</t> | carry an RH3, and if so, that RH3 <bcp14>MUST</bcp14> be fully consu | |||
<t> | med. | |||
</t> | ||||
<t> | ||||
The RPI, if permitted to enter the LLN, could be used by | The RPI, if permitted to enter the LLN, could be used by | |||
an attacker to change the priority of a packet by selecting a | an attacker to change the priority of a packet by selecting a | |||
different RPLInstanceID, perhaps one with a higher energy cost, | different RPLInstanceID, perhaps one with a higher energy cost, | |||
for instance. It could also be that not all nodes are reachable | for instance. It could also be that not all nodes are reachable | |||
in an LLN using the default RPLInstanceID, but a change of | in an LLN using the default RPLInstanceID, but a change of | |||
RPLInstanceID would permit an attacker to bypass such filtering. | RPLInstanceID would permit an attacker to bypass such filtering. | |||
Like the RH3, an RPI is to be inserted by the RPL root on | Like the RH3, an RPI is to be inserted by the RPL root on | |||
traffic entering the LLN by first inserting an IPv6-in-IPv6 header. The | traffic entering the LLN by first inserting an IPv6-in-IPv6 header. The | |||
attacker's RPI therefore will not be seen by the network. | attacker's RPI therefore will not be seen by the network. | |||
Upon reaching the destination node the RPI has no further | Upon reaching the destination node, the RPI has no further | |||
meaning and is just skipped; the presence of a second RPI | meaning and is just skipped; the presence of a second RPI | |||
will have no meaning to the end node as the packet has already | will have no meaning to the end node as the packet has already | |||
been identified as being at it's final destination. | been identified as being at its final destination. | |||
</t> | </t> | |||
<t> | <t> | |||
For traffic leaving a RUL, if the RUL adds an opaque RPI then the 6L | For traffic leaving a RUL, if the RUL adds an uninitialized RPI (e.g | |||
R as a RPL border | ., with a value of zero), then the 6LR as a RPL Border | |||
router SHOULD rewrite the RPI to indicate the selected Instance and | Router <bcp14>SHOULD</bcp14> rewrite the RPI to indicate the selecte | |||
set the flags. | d Instance and set the flags. | |||
This is done in order to avoid: 1) The leaf is an external router th | This is done in order to avoid the following scenarios: 1) The leaf | |||
at | is an external router that | |||
passes a packet that it did not generate and that carries an unrelat | passes a packet that it did not generate and that carries an unrelat | |||
ed RPI | ed RPI, | |||
and 2) The leaf is an attacker or presents misconfiguration and | and 2) The leaf is an attacker or presents misconfiguration and | |||
tries to inject traffic in a protected instance. | tries to inject traffic in a protected Instance. | |||
Also, this applies in the case where the leaf is aware of the RPL in | Also, this applies to the case where the leaf is aware of the RPL In | |||
stance and passes a correct RPI; | stance and passes a correct RPI; | |||
the 6LR needs a configuration that allows that leaf to inject in tha t instance. | the 6LR needs a configuration that allows that leaf to inject in tha t instance. | |||
</t> | </t> | |||
<t> | <t> | |||
The RH3 and RPIs could be abused by an attacker inside of | The RH3 and RPIs could be abused by an attacker inside of | |||
the network to route packets on non-obvious ways, perhaps eluding | the network to route packets in nonobvious ways, perhaps eluding | |||
observation. This usage appears consistent with a normal operation of | observation. This usage appears consistent with a normal operation of | |||
<xref target="RFC6997" /> and can not be restricted at all. This | <xref target="RFC6997" format="default"/> and cannot be restricted a t all. This | |||
is a feature, not a bug. | is a feature, not a bug. | |||
</t> | </t> | |||
<t> | <t> | |||
<xref target="RFC7416"/> deals with many other threats to LLNs | <xref target="RFC7416" format="default"/> deals with many other thre | |||
ats to LLNs | ||||
not directly related to the use of IPv6-in-IPv6 headers, and this | not directly related to the use of IPv6-in-IPv6 headers, and this | |||
document does not change that analysis. | document does not change that analysis. | |||
</t> | </t> | |||
<t> | <t> | |||
Nodes within the LLN can use the IPv6-in-IPv6 mechanism to mount an | Nodes within the LLN can use the IPv6-in-IPv6 mechanism to mount an | |||
attack on another part of the LLN, while disguising the origin of | attack on another part of the LLN, while disguising the origin of | |||
the attack. The mechanism can even be abused to make it appear | the attack. The mechanism can even be abused to make it appear | |||
that the attack is coming from outside the LLN, and unless | that the attack is coming from outside the LLN, and unless | |||
countered, this could be used to mount a Distributed Denial Of | countered, this could be used to mount a DDOS | |||
Service attack upon nodes elsewhere in the Internet. See <xref | attack upon nodes elsewhere in the Internet. See <xref target="DDOS- | |||
target="DDOS-KREBS" /> for an example of such attacks already | KREBS" format="default"/> for an example of such attacks already | |||
seen in the real world. | seen in the real world. | |||
</t> | </t> | |||
<t> | <t> | |||
If an attack comes from inside of LLN, it can be alleviated with SAV I | If an attack comes from inside of LLN, it can be alleviated with SAV I | |||
(Source Address Validation Improvement) using <xref target="RFC8505" | (Source Address Validation Improvement) using <xref target="RFC8505" | |||
/> with | format="default"/> with | |||
<xref target="I-D.ietf-6lo-ap-nd"/>. The attacker will not | <xref target="RFC8928" format="default"/>. The attacker will not | |||
be able to source traffic with an address that is not registered, an d the registration process | be able to source traffic with an address that is not registered, an d the registration process | |||
checks for topological correctness. Notice that there is an L2 authe | checks for topological correctness. Notice that there is Layer 2 aut | |||
ntication | hentication | |||
in most of the cases. If an attack comes from outside LLN IPv6-in- | in most of the cases. If an attack comes from outside LLN, IPv6-in- | |||
IPv6 can be used to hide inner routing headers, but by construction, | IPv6 | |||
the RH3 can typically only address nodes within the | can be used to hide inner routing headers, but by construction, the | |||
LLN. That is, an RH3 with a CmprI less than 8 , should be considere | RH3 can typically only address nodes within the | |||
d an attack (see RFC6554, section 3). | LLN. That is, an RH3 with a CmprI less than 8 should be considered | |||
</t> | an attack (see <xref target="RFC6554" section="3" sectionFormat="of" format="def | |||
<t> | ault"/>). | |||
</t> | ||||
<t> | ||||
Nodes outside of the LLN will need to pass IPv6-in-IPv6 traffic | Nodes outside of the LLN will need to pass IPv6-in-IPv6 traffic | |||
through the RPL root to perform this attack. To counter, the RPL | through the RPL root to perform this attack. To counter, the RPL | |||
root SHOULD either restrict ingress of IPv6-in-IPv6 packets (the | root <bcp14>SHOULD</bcp14> either restrict ingress of IPv6-in-IPv6 p | |||
simpler solution), or it SHOULD walk the IP header extension chain u | ackets (the | |||
ntil it can inspect the | simpler solution), or it <bcp14>SHOULD</bcp14> walk the IP header ex | |||
upper-layer-payload as described in <xref target="RFC7045" />. | tension chain until it can inspect the | |||
In particular, the RPL root SHOULD do <xref | upper-layer payload as described in <xref target="RFC7045" format="d | |||
target="BCP38" /> processing on the source addresses of all IP | efault"/>. | |||
In particular, the RPL root <bcp14>SHOULD</bcp14> do network ingress | ||||
filtering <xref target="BCP38" format="default"/> on the source addresses of al | ||||
l IP | ||||
headers that it examines in both directions. | headers that it examines in both directions. | |||
</t> | </t> | |||
<t> | <t> | |||
Note: there are some situations where a prefix will spread | Note: there are some situations where a prefix will spread | |||
across multiple LLNs via mechanisms such as the one described in | across multiple LLNs via mechanisms such as the one described in | |||
<xref target="I-D.ietf-6lo-backbone-router" />. | <xref target="RFC8929" format="default"/>. | |||
In this case the BCP38 filtering needs to take this into account, | In this case, the network ingress filtering <xref target="BCP38" for | |||
either by exchanging detailed routing information on each LLN, | mat="default"/> needs to take this into account, | |||
or by moving the BCP38 filtering further towards the Internet, | either by exchanging detailed routing information on each LLN | |||
or by moving the network ingress filtering <xref target="BCP38" form | ||||
at="default"/> further towards the Internet, | ||||
so that the details of the multiple LLNs do not matter. | so that the details of the multiple LLNs do not matter. | |||
</t> | </t> | |||
</section> | ||||
</section> | ||||
<section anchor="Acknowledgments" title="Acknowledgments"> | ||||
<t> | ||||
This work is done thanks to the grant given by the StandICT.eu projec | ||||
t. | ||||
</t> | ||||
<t> | ||||
A special BIG thanks to C. M. Heard for the help with the <xref targ | ||||
et="updateRFCs_section" />. | ||||
Much of the redaction in that section is based on his comments. | ||||
</t> | ||||
<t> | ||||
Additionally, the authors would like to acknowledge the review, feedb | ||||
ack, and | ||||
comments of (alphabetical order): Dominique Barthel, Robert Cragie, S | ||||
imon Duquennoy, Ralph Droms, | ||||
Cenk Gündogan, Rahul Jadhav, Benjamin Kaduk, Matthias Kovatsch, Gusta | ||||
vo Mercado, Subramanian Moonesamy, | ||||
Marcela Orbiscay, Charlie Perkins, Cristian Perez, Alvaro Retana, Pet | ||||
er van der Stok, | ||||
Xavier Vilajosana, Éric Vyncke and Thomas Watteyne. | ||||
</t> | ||||
</section> | ||||
</middle> | ||||
<back> | ||||
<references title="Normative References"> | ||||
&RFC6553; | </middle> | |||
&RFC6554; | <back> | |||
&RFC2119; | ||||
&RFC6040; | ||||
<?rfc include="reference.RFC.8174.xml" ?> | <displayreference target="I-D.ietf-intarea-tunnels" to="TUNNELS"/> | |||
<displayreference target="I-D.ietf-6tisch-dtsecurity-zerotouch-join" to="ZEROTOU | ||||
CH-JOIN"/> | ||||
<displayreference target="I-D.ietf-anima-bootstrapping-keyinfra" to="BRSKI"/> | ||||
<displayreference target="I-D.ietf-anima-autonomic-control-plane" to="ACP"/> | ||||
<references> | ||||
<name>References</name> | ||||
<references> | ||||
<name>Normative References</name> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.6553.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.6554.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.2119.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.6040.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8174.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8200.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8025.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8138.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.6282.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.6550.xml"/> | ||||
<?rfc include="reference.RFC.8200.xml" ?> | <referencegroup anchor="BCP38" target="https://rfc-editor.org/info/bcp38"> | |||
<?rfc include="reference.RFC.8025.xml" ?> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
FC.2827.xml"/> | ||||
</referencegroup> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.7045.xml"/> | ||||
</references> | ||||
<references> | ||||
<name>Informative References</name> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.0801.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8504.xml"/> | ||||
<?rfc include="reference.RFC.8138.xml" ?> | <!-- [I-D.ietf-6lo-ap-nd] Published as RFC 8928 --> | |||
<?rfc include="reference.RFC.6282.xml" ?> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
FC.8928.xml"/> | ||||
&RFC6550; | <!-- [I-D.ietf-intarea-tunnels] IESG state Expired --> | |||
<xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D | ||||
.ietf-intarea-tunnels.xml"/> | ||||
<reference anchor='BCP38' target='https://www.rfc-editor.org/info/bcp38'> | <!-- [I-D.ietf-roll-unaware-leaves] companion document RFC 9010 --> | |||
<front> | <reference anchor="RFC9010"> | |||
<title>Network Ingress Filtering: Defeating Denial of Service Attacks which | <front> | |||
employ IP Source Address Spoofing</title> | <title>Routing for RPL (Routing Protocol for Low-Power and Lossy Netwo | |||
<author initials='P.' surname='Ferguson' fullname='P. Ferguson'><organizati | rks) Leaves</title> | |||
on /></author> | ||||
<author initials='D.' surname='Senie' fullname='D. Senie'><organization />< | ||||
/author> | ||||
<date year='2000' month='May' /> | ||||
<abstract><t>This paper discusses a simple, effective, and straightforward | ||||
method for using ingress traffic filtering to prohibit DoS (Denial of Service) a | ||||
ttacks which use forged IP addresses to be propagated from 'behind' an Internet | ||||
Service Provider's (ISP) aggregation point. This document specifies an Internet | ||||
Best Current Practices for the Internet Community, and requests discussion and | ||||
suggestions for improvements.</t></abstract> | ||||
</front> | ||||
<seriesInfo name='BCP' value='38'/> | ||||
<seriesInfo name='RFC' value='2827'/> | ||||
<seriesInfo name='DOI' value='10.17487/RFC2827'/> | ||||
</reference> | ||||
<?rfc include="reference.RFC.7045.xml" ?> | <author initials="P" surname="Thubert" fullname="Pascal Thubert" role="editor"> | |||
<organization/> | ||||
</author> | ||||
</references> | <author initials="M" surname="Richardson" fullname="Michael Richardson"> | |||
<organization/> | ||||
</author> | ||||
<references title="Informative References"> | <date month="March" year="2021"/> | |||
<?rfc include="reference.RFC.0801.xml" ?> | </front> | |||
<?rfc include="reference.RFC.8504.xml" ?> | <seriesInfo name="RFC" value="9010"/> | |||
<seriesInfo name="DOI" value="10.17487/RFC9010"/> | ||||
</reference> | ||||
<?rfc include="reference.I-D.ietf-6lo-ap-nd.xml"?> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
FC.6775.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.6437.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.7416.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.4443.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.7102.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8180.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.2473.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8505.xml"/> | ||||
<!-- RFC2460 obsoleted by RFC8200, mentioned for historical background --> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.2460.xml"/> | ||||
<?rfc include="reference.I-D.ietf-intarea-tunnels.xml"?> | <!-- [I-D.ietf-anima-autonomic-control-plane] in REF state as of 02 Feb 21 --> | |||
<xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D | ||||
.ietf-anima-autonomic-control-plane.xml"/> | ||||
<?rfc include="reference.I-D.ietf-roll-unaware-leaves.xml" ?> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R FC.5406.xml"/> | |||
&RFC6775; | <!-- [I-D.ietf-anima-bootstrapping-keyinfra] in EDIT state as of 02 Feb 21 --> | |||
&RFC6437; | <xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D | |||
&RFC7416; | .ietf-anima-bootstrapping-keyinfra.xml"/> | |||
&RFC4443; | ||||
&RFC7102; | ||||
&RFC8180; | ||||
&RFC2473; | ||||
&RFC8505; | ||||
&RFC2460; | ||||
<?rfc include="reference.I-D.ietf-anima-autonomic-control-plane.xml" ?> | <!-- [I-D.ietf-6tisch-dtsecurity-zerotouch-join] IESG state Expired --> | |||
<?rfc include="reference.RFC.5406.xml" ?> | <xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D | |||
.ietf-6tisch-dtsecurity-zerotouch-join.xml"/> | ||||
<?rfc include="reference.I-D.ietf-anima-bootstrapping-keyinfra.xml" ?> | <!-- [I-D.ietf-6lo-backbone-router] Published as RFC 8929 --> | |||
<?rfc include="reference.I-D.ietf-6tisch-dtsecurity-zerotouch-join.xml" ?> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
<?rfc include="reference.I-D.ietf-6lo-backbone-router.xml" ?> | FC.8929.xml"/> | |||
<?rfc include="reference.RFC.6997.xml" ?> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R FC.6997.xml"/> | |||
<reference anchor="DDOS-KREBS" target="http://arstechnica.com/security/2016 | <!-- [DDOS-KREBS] http://arstechnica.com/security/2016/09/botnet-of-145k- camera | |||
/09/botnet-of-145k-cameras-reportedly-deliver-internets-biggest-ddos-ever/"> | s-reportedly-deliver-internets-biggest-ddos-ever/ | |||
<front> | redirects to https://arstechnica.com/information-technology/2016/09/botnet- | |||
<title>Record-breaking DDoS reportedly delivered by >145k hacked cameras | of-145k-cameras-reportedly-deliver-internets-biggest-ddos-ever/--> | |||
</title> | <reference anchor="DDOS-KREBS" target="https://arstechnica.com/informati | |||
<author initials="D." surname="Goodin"> <organization></organization> < | on-technology/2016/09/botnet-of-145k-cameras-reportedly-deliver-internets-bigges | |||
/author> | t-ddos-ever/"> | |||
<date year="2016" month="September"/> | <front> | |||
</front> | <title>Record-breaking DDoS reportedly delivered by >145k hacked | |||
</reference> | cameras</title> | |||
<author initials="D." surname="Goodin"> | ||||
<organization/> | ||||
</author> | ||||
<date year="2016" month="September"/> | ||||
</front> | ||||
</reference> | ||||
</references> | ||||
</references> | ||||
<section anchor="Acknowledgments" numbered="false" toc="default"> | ||||
<name>Acknowledgments</name> | ||||
<t> | ||||
This work is done thanks to the grant given by the StandICT.eu projec | ||||
t. | ||||
</t> | ||||
<t> | ||||
A special BIG thanks to <contact fullname="C. M. Heard"/> for the he | ||||
lp with <xref target="updateRFCs_section" format="default"/>. | ||||
Much of the editing in that section is based on his comments. | ||||
</t> | ||||
<t> | ||||
Additionally, the authors would like to acknowledge the review, feedb | ||||
ack, and | ||||
comments of the following (in alphabetical order): <contact fullname= | ||||
"Dominique Barthel"/>, <contact fullname="Robert Cragie"/>, <contact fullname="R | ||||
alph Droms"/>, <contact fullname="Simon Duquennoy"/>, | ||||
<contact fullname="Cenk Guendogan"/>, <contact fullname="Rahul Jadhav | ||||
"/>, <contact fullname="Benjamin Kaduk"/>, <contact fullname="Matthias Kovatsch" | ||||
/>, <contact fullname="Gustavo Mercado"/>, <contact fullname="Subramanian Moones | ||||
amy"/>, | ||||
<contact fullname="Marcela Orbiscay"/>, <contact fullname="Cristian P | ||||
erez"/>, <contact fullname="Charlie Perkins"/>, <contact fullname="Alvaro Retana | ||||
"/>, <contact fullname="Peter van der Stok"/>, | ||||
<contact fullname="Xavier Vilajosana"/>, <contact fullname="Éric Vync | ||||
ke"/>, and <contact fullname="Thomas Watteyne"/>. | ||||
</t> | ||||
</section> | ||||
</references> | </back> | |||
</back> | ||||
</rfc> | </rfc> | |||
End of changes. 372 change blocks. | ||||
2925 lines changed or deleted | 3764 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |