rfc9010v3.txt | rfc9010.txt | |||
---|---|---|---|---|
Internet Engineering Task Force (IETF) P. Thubert, Ed. | Internet Engineering Task Force (IETF) P. Thubert, Ed. | |||
Request for Comments: 9010 Cisco Systems | Request for Comments: 9010 Cisco Systems | |||
Updates: 6550, 6775, 8505 M. Richardson | Updates: 6550, 6775, 8505 M. Richardson | |||
Category: Standards Track Sandelman | Category: Standards Track Sandelman | |||
ISSN: 2070-1721 March 2021 | ISSN: 2070-1721 April 2021 | |||
Routing for RPL (Routing Protocol for Low-Power | Routing for RPL (Routing Protocol for Low-Power | |||
and Lossy Networks) Leaves | and Lossy Networks) Leaves | |||
Abstract | Abstract | |||
This specification provides a mechanism for a host that implements a | This specification provides a mechanism for a host that implements a | |||
routing-agnostic interface based on IPv6 over Low-Power Wireless | routing-agnostic interface based on IPv6 over Low-Power Wireless | |||
Personal Area Network (6LoWPAN) Neighbor Discovery to obtain | Personal Area Network (6LoWPAN) Neighbor Discovery to obtain | |||
reachability services across a network that leverages RFC 6550 for | reachability services across a network that leverages RFC 6550 for | |||
skipping to change at line 80 ¶ | skipping to change at line 80 ¶ | |||
6.1. Updated RPL Target Option | 6.1. Updated RPL Target Option | |||
6.2. Additional Flag in the RPL DODAG Configuration Option | 6.2. Additional Flag in the RPL DODAG Configuration Option | |||
6.3. Updated RPL Status | 6.3. Updated RPL Status | |||
7. Enhancements to RFC 9009 | 7. Enhancements to RFC 9009 | |||
8. Enhancements to RFCs 6775 and 8505 | 8. Enhancements to RFCs 6775 and 8505 | |||
9. Protocol Operations for Unicast Addresses | 9. Protocol Operations for Unicast Addresses | |||
9.1. General Flow | 9.1. General Flow | |||
9.2. Detailed Operation | 9.2. Detailed Operation | |||
9.2.1. Perspective of the 6LN Acting as a RUL | 9.2.1. Perspective of the 6LN Acting as a RUL | |||
9.2.2. Perspective of the 6LR Acting as a Border Router | 9.2.2. Perspective of the 6LR Acting as a Border Router | |||
9.2.3. Perspective of the RPL Root | 9.2.3. Perspective of the RPL DODAG Root | |||
9.2.4. Perspective of the 6LBR | 9.2.4. Perspective of the 6LBR | |||
10. Protocol Operations for Multicast Addresses | 10. Protocol Operations for Multicast Addresses | |||
11. Security Considerations | 11. Security Considerations | |||
12. IANA Considerations | 12. IANA Considerations | |||
12.1. Fixing the Address Registration Option Flags | 12.1. Fixing the Address Registration Option Flags | |||
12.2. Resizing the ARO Status Values | 12.2. Resizing the ARO Status Values | |||
12.3. New RPL DODAG Configuration Option Flag | 12.3. New RPL DODAG Configuration Option Flag | |||
12.4. RPL Target Option Flags Registry | 12.4. RPL Target Option Flags Registry | |||
12.5. New Subregistry for RPL Non-Rejection Status Values | 12.5. New Subregistry for RPL Non-Rejection Status Values | |||
12.6. New Subregistry for RPL Rejection Status Values | 12.6. New Subregistry for RPL Rejection Status Values | |||
skipping to change at line 107 ¶ | skipping to change at line 107 ¶ | |||
1. Introduction | 1. Introduction | |||
The design of Low-Power and Lossy Networks (LLNs) is generally | The design of Low-Power and Lossy Networks (LLNs) is generally | |||
focused on saving energy, which is the most constrained resource of | focused on saving energy, which is the most constrained resource of | |||
all. Other design constraints, such as a limited memory capacity, | all. Other design constraints, such as a limited memory capacity, | |||
duty cycling of the LLN devices, and low-power lossy transmissions, | duty cycling of the LLN devices, and low-power lossy transmissions, | |||
derive from that primary concern. | derive from that primary concern. | |||
The IETF produced "RPL: IPv6 Routing Protocol for Low-Power and Lossy | The IETF produced "RPL: IPv6 Routing Protocol for Low-Power and Lossy | |||
Networks" [RFC6550] to provide IPv6 routing services [RFC8200] within | Networks" [RFC6550] to provide routing services for IPv6 [RFC8200] | |||
such constraints. RPL belongs to the class of distance-vector | within such constraints. RPL belongs to the class of distance-vector | |||
protocols -- which, compared to link-state protocols, limit the | protocols -- which, compared to link-state protocols, limit the | |||
amount of topological knowledge that needs to be installed and | amount of topological knowledge that needs to be installed and | |||
maintained in each node -- and does not require convergence to avoid | maintained in each node -- and does not require convergence to avoid | |||
micro-loops. | micro-loops. | |||
To save signaling and routing state in constrained networks, RPL | To save signaling and routing state in constrained networks, RPL | |||
allows a path stretch (see [RFC6687]), whereby routing is only | allows a path stretch (see [RFC6687]), whereby routing is only | |||
performed along a Destination-Oriented Directed Acyclic Graph (DODAG) | performed along a Destination-Oriented Directed Acyclic Graph (DODAG) | |||
that is optimized to reach a root node, as opposed to along the | that is optimized to reach a root node, as opposed to along the | |||
shortest path between two peers, whatever that would mean in a given | shortest path between two peers, whatever that would mean in a given | |||
LLN. This trades the quality of peer-to-peer (P2P) paths for a | LLN. This trades the quality of peer-to-peer (P2P) paths for a | |||
vastly reduced amount of control traffic and routing state that would | vastly reduced amount of control traffic and routing state that would | |||
be required to operate an any-to-any shortest-path protocol. | be required to operate an any-to-any shortest-path protocol. | |||
Additionally, broken routes may be fixed lazily and on demand, based | Additionally, broken routes may be fixed lazily and on demand, based | |||
on data-plane inconsistency discovery, which avoids wasting energy in | on data-plane inconsistency discovery, which avoids wasting energy in | |||
the proactive repair of unused paths. | the proactive repair of unused paths. | |||
For many of the nodes, though not all, the DODAG provides multiple | For many of the nodes, though not all, the DODAG provides multiple | |||
forwarding solutions towards the Root of the topology via so-called | forwarding solutions towards the root of the topology via so-called | |||
parents. RPL installs the routes proactively, but to adapt to fuzzy | parents. RPL installs the routes proactively, but to adapt to fuzzy | |||
connectivity -- whereby the physical topology cannot be expected to | connectivity -- whereby the physical topology cannot be expected to | |||
reach a stable state -- it uses a lazy route maintenance operation | reach a stable state -- it uses a lazy route maintenance operation | |||
that may only fix them reactively, upon actual traffic. The result | that may only fix them reactively, upon actual traffic. The result | |||
is that RPL provides reachability for most of the LLN nodes, most of | is that RPL provides reachability for most of the LLN nodes, most of | |||
the time, but may not converge in the classical sense. | the time, but may not converge in the classical sense. | |||
RPL can be deployed in conjunction with IPv6 Neighbor Discovery (ND) | RPL can be deployed in conjunction with IPv6 Neighbor Discovery (ND) | |||
[RFC4861] [RFC4862] and IPv6 over Low-Power Wireless Personal Area | [RFC4861] [RFC4862] and IPv6 over Low-Power Wireless Personal Area | |||
Network (6LoWPAN) ND [RFC6775] [RFC8505] to maintain reachability | Network (6LoWPAN) ND [RFC6775] [RFC8505] to maintain reachability | |||
skipping to change at line 176 ¶ | skipping to change at line 176 ¶ | |||
leverage 6LoWPAN ND to obtain the routing services from the router. | leverage 6LoWPAN ND to obtain the routing services from the router. | |||
In that model, the RUL is also a 6LoWPAN Node (6LN) and the RPL-aware | In that model, the RUL is also a 6LoWPAN Node (6LN) and the RPL-aware | |||
router is also a 6LoWPAN Router (6LR). Using the 6LoWPAN ND Address | router is also a 6LoWPAN Router (6LR). Using the 6LoWPAN ND Address | |||
Registration mechanism, the RUL signals that the router must inject a | Registration mechanism, the RUL signals that the router must inject a | |||
host route for the Registered Address. | host route for the Registered Address. | |||
------+--------- | ------+--------- | |||
| Internet | | Internet | |||
| | | | |||
+-----+ | +-----+ | |||
| | <------------- 6LBR / RPL Root | | | <------------- 6LBR / RPL DODAG Root | |||
+-----+ ^ | +-----+ ^ | |||
| | | | | | |||
o o o o | RPL | o o o o | RPL | |||
o o o o o o o o | | o o o o o o o o | | |||
o o o o o o o o o o | + | o o o o o o o o o o | + | |||
o o o o o o o | | o o o o o o o | | |||
o o o o o o o o o | 6LoWPAN ND | o o o o o o o o o | 6LoWPAN ND | |||
o o o o o o | | o o o o o o | | |||
o o o o v | o o o o v | |||
o o o <------------- 6LR / RPL Border Router | o o o <------------- 6LR / RPL Border Router | |||
^ | ^ | |||
| 6LoWPAN ND only | | 6LoWPAN ND only | |||
v | v | |||
u <------------- 6LN / RPL-Unaware Leaf | u <------------- 6LN / RPL-Unaware Leaf | |||
Figure 1: Injecting Routes on Behalf of RULs | Figure 1: Injecting Routes on Behalf of RULs | |||
The RPL Non-Storing mode mechanism is used to extend the routing | The RPL Non-Storing mode mechanism is used to extend the routing | |||
state with connectivity to the RULs even when the DODAG is operated | state with connectivity to the RULs even when the DODAG is operated | |||
in Storing mode. The unicast packet-forwarding operation by the 6LR | in Storing mode. The unicast packet-forwarding operation by the 6LR | |||
serving a RUL is described in Section 4.1 of [RFC9008]. | serving a RUL is described in Section 4.1.1 of [RFC9008]. | |||
Examples of possible RULs include severely energy-constrained sensors | Examples of possible RULs include severely energy-constrained sensors | |||
such as window smash sensors (alarm system) and kinetically powered | such as window smash sensors (alarm system) and kinetically powered | |||
light switches. Other applications of this specification may include | light switches. Other applications of this specification may include | |||
a smart grid network that controls appliances -- such as washing | a smart grid network that controls appliances -- such as washing | |||
machines or the heating system -- in the home. Appliances may not | machines or the heating system -- in the home. Appliances may not | |||
participate in the RPL protocol operated in the smart grid network | participate in the RPL protocol operated in the smart grid network | |||
but can still interact with the smart grid for control and/or | but can still interact with the smart grid for control and/or | |||
metering. | metering. | |||
This specification can be deployed incrementally in a network that | This specification can be deployed incrementally in a network that | |||
implements [RFC9008]. Only the Root and the 6LRs that connect the | implements [RFC9008]. Only the root and the 6LRs that connect the | |||
RULs need to be upgraded. The RPL routers on the path will only see | RULs need to be upgraded. The RPL routers on the path will only see | |||
unicast IPv6 traffic between the Root and the 6LR. | unicast IPv6 traffic between the root and the 6LR. | |||
This document is organized as follows: | This document is organized as follows: | |||
* Sections 3 and 4 present in a non-normative fashion the salient | * Sections 3 and 4 present in a non-normative fashion the salient | |||
aspects of RPL and 6LoWPAN ND, respectively, that are leveraged in | aspects of RPL and 6LoWPAN ND, respectively, that are leveraged in | |||
this specification to provide connectivity to a 6LN acting as a | this specification to provide connectivity to a 6LN acting as a | |||
RUL across a RPL network. | RUL across a RPL network. | |||
* Section 5 lists the requirements that a RUL needs to match in | * Section 5 lists the requirements that a RUL needs to match in | |||
order to be served by a RPL router that complies with this | order to be served by a RPL router that complies with this | |||
specification. | specification. | |||
* Section 6 presents the changes made to [RFC6550]; a new behavior | * Section 6 presents the changes made to [RFC6550]; a new behavior | |||
is introduced whereby the 6LR advertises the 6LN's addresses in a | is introduced whereby the 6LR advertises the 6LN's addresses in a | |||
RPL Destination Advertisement Object (DAO) message based on the ND | RPL Destination Advertisement Object (DAO) message based on the ND | |||
registration by the 6LN, and the RPL root performs the Extended | registration by the 6LN, and the RPL DODAG root performs the | |||
Duplicate Address Request / Extended Duplicate Address | Extended Duplicate Address Request / Extended Duplicate Address | |||
Confirmation (EDAR/EDAC) exchange with the 6LoWPAN Border Router | Confirmation (EDAR/EDAC) exchange with the 6LoWPAN Border Router | |||
(6LBR) on behalf of the 6LR; modifications are introduced to some | (6LBR) on behalf of the 6LR; modifications are introduced to some | |||
RPL options and to the RPL Status to facilitate the integration of | RPL options and to the RPL Status to facilitate the integration of | |||
the protocols. | the protocols. | |||
* Section 7 presents the changes made to [RFC9009]; the use of the | * Section 7 presents the changes made to [RFC9009]; the use of the | |||
Destination Cleanup Object (DCO) message is extended to the Non- | Destination Cleanup Object (DCO) message is extended to the Non- | |||
Storing RPL Mode of Operation (MOP) to report asynchronous issues | Storing RPL Mode of Operation (MOP) to report asynchronous issues | |||
from the Root to the 6LR. | from the root to the 6LR. | |||
* Section 8 presents the changes made to [RFC6775] and [RFC8505]; | * Section 8 presents the changes made to [RFC6775] and [RFC8505]; | |||
the range of the Address Registration Option / Extended Address | the range of the Address Registration Option / Extended Address | |||
Registration Option (ARO/EARO) Status values is reduced to 64 | Registration Option (ARO/EARO) Status values is reduced to 64 | |||
values, and the remaining bits in the original status field are | values, and the remaining bits in the original status field are | |||
now reserved. | now reserved. | |||
* Sections 9 and 10 present the operation of this specification for | * Sections 9 and 10 present the operation of this specification for | |||
unicast and multicast flows, respectively, and Section 11 presents | unicast and multicast flows, respectively, and Section 11 presents | |||
associated security considerations. | associated security considerations. | |||
skipping to change at line 355 ¶ | skipping to change at line 355 ¶ | |||
6LoWPAN ND: "Neighbor Discovery Optimization for IPv6 over Low-Power | 6LoWPAN ND: "Neighbor Discovery Optimization for IPv6 over Low-Power | |||
Wireless Personal Area Networks (6LoWPANs)" [RFC6775], | Wireless Personal Area Networks (6LoWPANs)" [RFC6775], | |||
"Registration Extensions for IPv6 over Low-Power Wireless Personal | "Registration Extensions for IPv6 over Low-Power Wireless Personal | |||
Area Network (6LoWPAN) Neighbor Discovery" [RFC8505], | Area Network (6LoWPAN) Neighbor Discovery" [RFC8505], | |||
"Address-Protected Neighbor Discovery for Low-Power and Lossy | "Address-Protected Neighbor Discovery for Low-Power and Lossy | |||
Networks" [RFC8928], and "IPv6 Backbone Router" [RFC8929]. | Networks" [RFC8928], and "IPv6 Backbone Router" [RFC8929]. | |||
3. RPL External Routes and Data-Plane Artifacts | 3. RPL External Routes and Data-Plane Artifacts | |||
RPL was initially designed to build stub networks whereby the only | RPL was initially designed to build stub networks whereby the only | |||
border router would be the RPL root (typically co-located with the | border router would be the RPL DODAG root (typically co-located with | |||
6LBR) and all the nodes in the stub would be RPL aware. But | the 6LBR) and all the nodes in the stub would be RPL aware. But | |||
[RFC6550] was also prepared to be extended for external routes | [RFC6550] was also prepared to be extended for external routes | |||
("targets" in RPL parlance), via the External ('E') flag in the | ("targets" in RPL parlance), via the External ('E') flag in the | |||
Transit Information Option (TIO). External targets provide the | Transit Information Option (TIO). External targets provide the | |||
ability to reach destinations that are outside the RPL domain and | ability to reach destinations that are outside the RPL domain and | |||
connected to the RPL domain via RPL border routers that are not the | connected to the RPL domain via RPL border routers that are not the | |||
Root. Section 4.1 of [RFC9008] provides a set of rules (summarized | root. Section 4.1 of [RFC9008] provides a set of rules (summarized | |||
below) that must be followed for routing packets to and from an | below) that must be followed for routing packets to and from an | |||
external destination. A RUL is a special case of an external target | external destination. A RUL is a special case of an external target | |||
that is also a host directly connected to the RPL domain. | that is also a host directly connected to the RPL domain. | |||
A 6LR that acts as a border router for external routes advertises | A 6LR that acts as a border router for external routes advertises | |||
them using Non-Storing mode DAO messages that are unicast directly to | them using Non-Storing mode DAO messages that are unicast directly to | |||
the Root, even if the DODAG is operated in Storing mode. Non-Storing | the root, even if the DODAG is operated in Storing mode. Non-Storing | |||
mode routes are not visible inside the RPL domain, and all packets | mode routes are not visible inside the RPL domain, and all packets | |||
are routed via the Root. The RPL root tunnels the data packets | are routed via the root. The RPL DODAG root tunnels the data packets | |||
directly to the 6LR that advertised the external route, which | directly to the 6LR that advertised the external route, which | |||
decapsulates and forwards the original (inner) packets. | decapsulates and forwards the original (inner) packets. | |||
The RPL Non-Storing MOP signaling and the associated IPv6-in-IPv6 | The RPL Non-Storing MOP signaling and the associated IPv6-in-IPv6 | |||
encapsulated packets appear as normal traffic to the intermediate | encapsulated packets appear as normal traffic to the intermediate | |||
routers. Support of external routes only impacts the Root and the | routers. Support of external routes only impacts the root and the | |||
6LR. It can be operated with legacy intermediate routers and does | 6LR. It can be operated with legacy intermediate routers and does | |||
not add to the amount of state that must be maintained in those | not add to the amount of state that must be maintained in those | |||
routers. A RUL is an example of a destination that is reachable via | routers. A RUL is an example of a destination that is reachable via | |||
an external route that happens to also be a host route. | an external route that happens to also be a host route. | |||
The RPL data packets typically carry a Hop-by-Hop Header with a RPL | The RPL data packets typically carry a Hop-by-Hop Header with a RPL | |||
Option [RFC6553] that contains the RPI (the RPL Packet Information, | Option [RFC6553] that contains the RPI (the RPL Packet Information, | |||
as defined in Section 11.2 of [RFC6550]). Unless the RUL already | as defined in Section 11.2 of [RFC6550]). Unless the RUL already | |||
placed a RPL Option in the outer header chain, the packets from and | placed a RPL Option in the outer header chain, the packets from and | |||
to the RUL are encapsulated using an IPv6-in-IPv6 tunnel between the | to the RUL are encapsulated using an IPv6-in-IPv6 tunnel between the | |||
Root and the 6LR that serves the RUL (see Sections 7 and 8 of | root and the 6LR that serves the RUL (see Sections 7 and 8 of | |||
[RFC9008] for details). If the packet from the RUL has an RPI, the | [RFC9008] for details). If the packet from the RUL has an RPI, the | |||
6LR acting as a RPL border router rewrites the RPI to indicate the | 6LR acting as a RPL border router rewrites the RPI to indicate the | |||
selected RPL Instance and set the flags, but it does not need to | selected RPL Instance and set the flags, but it does not need to | |||
encapsulate the packet (see Section 9.2.2). | encapsulate the packet (see Section 9.2.2). | |||
In Non-Storing mode, packets going down the DODAG carry a Source | In Non-Storing mode, packets going down the DODAG carry a Source | |||
Routing Header (SRH). The IPv6-in-IPv6 encapsulation, the RPI, and | Routing Header (SRH). The IPv6-in-IPv6 encapsulation, the RPI, and | |||
the SRH are collectively called the "RPL artifacts" and can be | the SRH are collectively called the "RPL artifacts" and can be | |||
compressed using the method defined in [RFC8138]. Appendix A | compressed using the method defined in [RFC8138]. Appendix A | |||
presents an example compressed format for a packet forwarded by the | presents an example compressed format for a packet forwarded by the | |||
Root to a RUL in a Storing mode DODAG. | root to a RUL in a Storing mode DODAG. | |||
The inner packet that is forwarded to the RUL may carry some RPL | The inner packet that is forwarded to the RUL may carry some RPL | |||
artifacts, e.g., an RPI if the original packet was generated with it, | artifacts, e.g., an RPI if the original packet was generated with it, | |||
and an SRH in a Non-Storing mode DODAG. [RFC9008] expects the RUL to | and an SRH in a Non-Storing mode DODAG. [RFC9008] expects the RUL to | |||
support the basic IPv6 node requirements per [RFC8504] and, in | support the basic IPv6 node requirements per [RFC8504] and, in | |||
particular, the mandates in Sections 4.2 and 4.4 of [RFC8200]. As | particular, the mandates in Sections 4.2 and 4.4 of [RFC8200]. As | |||
such, the RUL is expected to ignore the RPL artifacts that may be | such, the RUL is expected to ignore the RPL artifacts that may be | |||
left over -- either an SRH whose Segments Left is zero or a RPL | left over -- either an SRH whose Segments Left is zero or a RPL | |||
Option in the Hop-by-Hop Header (which can be skipped when not | Option in the Hop-by-Hop Header (which can be skipped when not | |||
recognized; see Section 5.3 for details). | recognized; see Section 5.3 for details). | |||
skipping to change at line 524 ¶ | skipping to change at line 524 ¶ | |||
protection against spoofing. | protection against spoofing. | |||
"Address-Protected Neighbor Discovery for Low-Power and Lossy | "Address-Protected Neighbor Discovery for Low-Power and Lossy | |||
Networks" [RFC8928] leverages the ROVR field as a cryptographic proof | Networks" [RFC8928] leverages the ROVR field as a cryptographic proof | |||
of ownership to prevent a rogue third party from registering an | of ownership to prevent a rogue third party from registering an | |||
address that is already owned. The use of the ROVR field enables the | address that is already owned. The use of the ROVR field enables the | |||
6LR to block traffic that is not sourced at an owned address. | 6LR to block traffic that is not sourced at an owned address. | |||
This specification does not address how the protection offered by | This specification does not address how the protection offered by | |||
[RFC8928] could be extended for use in RPL. On the other hand, it | [RFC8928] could be extended for use in RPL. On the other hand, it | |||
adds the ROVR to the DAO to build the proxied EDAR at the Root (see | adds the ROVR to the DAO to build the proxied EDAR at the root (see | |||
Section 6.1), which means that nodes that are aware of the host route | Section 6.1), which means that nodes that are aware of the host route | |||
are also aware of the ROVR associated to the Target Address. | are also aware of the ROVR associated to the Target Address. | |||
4.3. EDAR/EDAC per RFC 8505 | 4.3. EDAR/EDAC per RFC 8505 | |||
[RFC8505] updates the DAR/DAC messages to EDAR/EDAC messages to carry | [RFC8505] updates the DAR/DAC messages to EDAR/EDAC messages to carry | |||
the ROVR field. The EDAR/EDAC exchange takes place between the 6LR | the ROVR field. The EDAR/EDAC exchange takes place between the 6LR | |||
and the 6LBR. It is triggered by an NS(EARO) message from a 6LN to | and the 6LBR. It is triggered by an NS(EARO) message from a 6LN to | |||
create, refresh, and delete the corresponding state in the 6LBR. The | create, refresh, and delete the corresponding state in the 6LBR. The | |||
exchange is protected by the retry mechanism specified in | exchange is protected by the retry mechanism specified in | |||
Section 8.2.6 of [RFC6775], though in an LLN, a duration longer than | Section 8.2.6 of [RFC6775], though in an LLN, a duration longer than | |||
the default value of the RetransTimer (RETRANS_TIMER) [RFC4861] of 1 | the default value of the RetransTimer (RETRANS_TIMER) [RFC4861] of 1 | |||
second may be necessary to cover the round-trip delay between the 6LR | second may be necessary to cover the round-trip delay between the 6LR | |||
and the 6LBR. | and the 6LBR. | |||
RPL [RFC6550] specifies a periodic DAO from the 6LN all the way to | RPL [RFC6550] specifies a periodic DAO from the 6LN all the way to | |||
the Root that maintains the routing state in the RPL network for the | the root that maintains the routing state in the RPL network for the | |||
lifetime indicated by the source of the DAO. This means that for | lifetime indicated by the source of the DAO. This means that for | |||
each address, there are two keep-alive messages that traverse the | each address, there are two keep-alive messages that traverse the | |||
whole network: one to the Root and one to the 6LBR. | whole network: one to the root and one to the 6LBR. | |||
This specification avoids the periodic EDAR/EDAC exchange across the | This specification avoids the periodic EDAR/EDAC exchange across the | |||
LLN. The 6LR turns the periodic NS(EARO) from the RUL into a DAO | LLN. The 6LR turns the periodic NS(EARO) from the RUL into a DAO | |||
message to the Root on every refresh, but it only generates the EDAR | message to the root on every refresh, but it only generates the EDAR | |||
upon the first registration, for the purpose of DAD, which must be | upon the first registration, for the purpose of DAD, which must be | |||
verified before the address is injected in RPL. Upon the DAO | verified before the address is injected in RPL. Upon the DAO | |||
message, the Root proxies the EDAR exchange to refresh the state at | message, the root proxies the EDAR exchange to refresh the state at | |||
the 6LBR on behalf of the 6LR, as illustrated in Figure 8 in | the 6LBR on behalf of the 6LR, as illustrated in Figure 8 in | |||
Section 9.1. | Section 9.1. | |||
4.3.1. Capability Indication Option per RFC 7400 | 4.3.1. Capability Indication Option per RFC 7400 | |||
"6LoWPAN-GHC: Generic Header Compression for IPv6 over Low-Power | "6LoWPAN-GHC: Generic Header Compression for IPv6 over Low-Power | |||
Wireless Personal Area Networks (6LoWPANs)" [RFC7400] defines the | Wireless Personal Area Networks (6LoWPANs)" [RFC7400] defines the | |||
6LoWPAN Capability Indication Option (6CIO), which enables a node to | 6LoWPAN Capability Indication Option (6CIO), which enables a node to | |||
expose its capabilities in Router Advertisement (RA) messages. | expose its capabilities in Router Advertisement (RA) messages. | |||
skipping to change at line 632 ¶ | skipping to change at line 632 ¶ | |||
5.2. Support of IPv6 Encapsulation | 5.2. Support of IPv6 Encapsulation | |||
Section 4.1.1 of [RFC9008] defines the rules for signaling an | Section 4.1.1 of [RFC9008] defines the rules for signaling an | |||
external destination (e.g., a RUL) and tunneling to its attachment | external destination (e.g., a RUL) and tunneling to its attachment | |||
router (designated as a 6LR). In order to terminate the IPv6-in-IPv6 | router (designated as a 6LR). In order to terminate the IPv6-in-IPv6 | |||
tunnel, the RUL, as an IPv6 host, would have to be capable of | tunnel, the RUL, as an IPv6 host, would have to be capable of | |||
decapsulating the tunneled packet and either drop the encapsulated | decapsulating the tunneled packet and either drop the encapsulated | |||
packet if it is not the final destination or pass it to the upper | packet if it is not the final destination or pass it to the upper | |||
layer for further processing. As indicated in Section 4.1 of | layer for further processing. As indicated in Section 4.1 of | |||
[RFC9008], this is not mandated by [RFC8504], and the IPv6-in-IPv6 | [RFC9008], this is not mandated by [RFC8504], and the IPv6-in-IPv6 | |||
tunnel from the Root is terminated at the parent 6LR. It is thus not | tunnel from the root is terminated at the parent 6LR. It is thus not | |||
necessary for a RUL to support IPv6-in-IPv6 decapsulation. | necessary for a RUL to support IPv6-in-IPv6 decapsulation. | |||
5.3. Support of the Hop-by-Hop Header | 5.3. Support of the Hop-by-Hop Header | |||
A RUL is expected to process an Option Type in a Hop-by-Hop Header as | A RUL is expected to process an Option Type in a Hop-by-Hop Header as | |||
prescribed by Section 4.2 of [RFC8200]. An RPI with an Option Type | prescribed by Section 4.2 of [RFC8200]. An RPI with an Option Type | |||
of 0x23 [RFC9008] is thus skipped when not recognized. | of 0x23 [RFC9008] is thus skipped when not recognized. | |||
5.4. Support of the Routing Header | 5.4. Support of the Routing Header | |||
skipping to change at line 657 ¶ | skipping to change at line 657 ¶ | |||
packet and sends an ICMP Parameter Problem message with Code 0 to the | packet and sends an ICMP Parameter Problem message with Code 0 to the | |||
packet's source address, pointing to the unrecognized Routing Type. | packet's source address, pointing to the unrecognized Routing Type. | |||
6. Enhancements to RFC 6550 | 6. Enhancements to RFC 6550 | |||
This document specifies a new behavior whereby a 6LR injects DAO | This document specifies a new behavior whereby a 6LR injects DAO | |||
messages for unicast addresses (see Section 9) and multicast | messages for unicast addresses (see Section 9) and multicast | |||
addresses (see Section 10) on behalf of leaves that are not aware of | addresses (see Section 10) on behalf of leaves that are not aware of | |||
RPL. The RUL addresses are exposed as external targets [RFC6550]. | RPL. The RUL addresses are exposed as external targets [RFC6550]. | |||
Conforming to [RFC9008], IPv6-in-IPv6 encapsulation between the 6LR | Conforming to [RFC9008], IPv6-in-IPv6 encapsulation between the 6LR | |||
and the RPL root is used to carry the RPL artifacts and remove them | and the RPL DODAG root is used to carry the RPL artifacts and remove | |||
when forwarding outside the RPL domain, e.g., to a RUL. | them when forwarding outside the RPL domain, e.g., to a RUL. | |||
This document also synchronizes the liveness monitoring at the Root | This document also synchronizes the liveness monitoring at the root | |||
and the 6LBR. The same lifetime value is used for both, and a single | and the 6LBR. The same lifetime value is used for both, and a single | |||
keep-alive message, the RPL DAO, traverses the RPL network. Another | keep-alive message, the RPL DAO, traverses the RPL network. Another | |||
new behavior is introduced whereby the RPL root proxies the EDAR | new behavior is introduced whereby the RPL DODAG root proxies the | |||
message to the 6LBR on behalf of the 6LR (see Section 8), for any | EDAR message to the 6LBR on behalf of the 6LR (see Section 8), for | |||
leaf node that implements the 6LN functionality described in | any leaf node that implements the 6LN functionality described in | |||
[RFC8505]. | [RFC8505]. | |||
Section 6.7.7 of [RFC6550] introduces the RPL Target option, which | Section 6.7.7 of [RFC6550] introduces the RPL Target option, which | |||
can be used in RPL control messages such as the DAO message to signal | can be used in RPL control messages such as the DAO message to signal | |||
a destination prefix. This document adds capabilities for | a destination prefix. This document adds capabilities for | |||
transporting the ROVR field (see Section 4.2.3) and the IPv6 address | transporting the ROVR field (see Section 4.2.3) and the IPv6 address | |||
of the prefix advertiser when the Target is a shorter prefix. Their | of the prefix advertiser when the Target is a shorter prefix. Their | |||
use is signaled by a new ROVR Size field being non-zero and a new | use is signaled by a new ROVR Size field being non-zero and a new | |||
"Advertiser address in Full (F)" flag set to 1, respectively; see | "Advertiser address in Full (F)" flag set to 1, respectively; see | |||
Section 6.1. | Section 6.1. | |||
skipping to change at line 687 ¶ | skipping to change at line 687 ¶ | |||
This specification defines a new flag, "Root Proxies EDAR/EDAC (P)", | This specification defines a new flag, "Root Proxies EDAR/EDAC (P)", | |||
in the RPL DODAG Configuration option; see Section 6.2. | in the RPL DODAG Configuration option; see Section 6.2. | |||
Furthermore, this specification provides the ability to carry the | Furthermore, this specification provides the ability to carry the | |||
EARO Status defined for 6LoWPAN ND in RPL DAO and DCO messages, | EARO Status defined for 6LoWPAN ND in RPL DAO and DCO messages, | |||
embedded in a RPL Status; see Section 6.3. | embedded in a RPL Status; see Section 6.3. | |||
Section 12 of [RFC6550] details RPL support for multicast flows when | Section 12 of [RFC6550] details RPL support for multicast flows when | |||
the RPL Instance is operated with a MOP setting of 3 ("Storing Mode | the RPL Instance is operated with a MOP setting of 3 ("Storing Mode | |||
of Operation with multicast support"). This specification extends | of Operation with multicast support"). This specification extends | |||
the RPL root operation to proxy-relay the MLDv2 operation [RFC3810] | the RPL DODAG root operation to proxy-relay the MLDv2 operation | |||
between the RUL and the 6LR; see Section 10. | [RFC3810] between the RUL and the 6LR; see Section 10. | |||
6.1. Updated RPL Target Option | 6.1. Updated RPL Target Option | |||
This specification updates the RPL Target option to transport the | This specification updates the RPL Target option to transport the | |||
ROVR that was also defined for 6LoWPAN ND messages. This enables the | ROVR that was also defined for 6LoWPAN ND messages. This enables the | |||
RPL root to generate the proxied EDAR message to the 6LBR. | RPL DODAG root to generate the proxied EDAR message to the 6LBR. | |||
The Target Prefix of the RPL Target option is left (high bit) | The Target Prefix of the RPL Target option is left (high bit) | |||
justified and contains the advertised prefix; its size may be smaller | justified and contains the advertised prefix; its size may be smaller | |||
than 128 when it indicates a prefix route. The Prefix Length field | than 128 when it indicates a prefix route. The Prefix Length field | |||
signals the number of bits that correspond to the advertised prefix; | signals the number of bits that correspond to the advertised prefix; | |||
it is 128 for a host route or less in the case of a prefix route. | it is 128 for a host route or less in the case of a prefix route. | |||
This remains unchanged. | This remains unchanged. | |||
This specification defines the new 'F' flag. When it is set to 1, | This specification defines the new 'F' flag. When it is set to 1, | |||
the size of the Target Prefix field MUST be 128 bits and it MUST | the size of the Target Prefix field MUST be 128 bits and it MUST | |||
skipping to change at line 754 ¶ | skipping to change at line 754 ¶ | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
Figure 4: Updated Target Option | Figure 4: Updated Target Option | |||
New fields: | New fields: | |||
F: 1-bit flag. Set to 1 to indicate that the Target Prefix field | F: 1-bit flag. Set to 1 to indicate that the Target Prefix field | |||
contains the complete (128-bit) IPv6 address of the advertising | contains the complete (128-bit) IPv6 address of the advertising | |||
node. | node. | |||
X: 1-bit flag. Set to 1 to request that the Root perform a proxy | X: 1-bit flag. Set to 1 to request that the root perform a proxy | |||
EDAR/EDAC exchange. | EDAR/EDAC exchange. | |||
The 'X' flag can only be set to 1 if the DODAG is operating in | The 'X' flag can only be set to 1 if the DODAG is operating in | |||
Non-Storing mode and if the Root sets the "Root Proxies EDAR/EDAC | Non-Storing mode and if the root sets the "Root Proxies EDAR/EDAC | |||
(P)" flag to 1 in the DODAG Configuration option; see | (P)" flag to 1 in the DODAG Configuration option; see | |||
Section 6.2. | Section 6.2. | |||
The 'X' flag can be set for host routes to RULs and RANs; it can | The 'X' flag can be set for host routes to RULs and RANs; it can | |||
also be set for internal prefix routes if the 'F' flag is set, | also be set for internal prefix routes if the 'F' flag is set, | |||
using the node's address in the Target Prefix field to form the | using the node's address in the Target Prefix field to form the | |||
EDAR, but it cannot be used otherwise. | EDAR, but it cannot be used otherwise. | |||
Flg (Flags): The 2 bits remaining unused in the Flags field are | Flg (Flags): The 2 bits remaining unused in the Flags field are | |||
reserved for flags. The field MUST be initialized to 0 by the | reserved for flags. The field MUST be initialized to 0 by the | |||
skipping to change at line 811 ¶ | skipping to change at line 811 ¶ | |||
|4 bits | | |4 bits | | |||
Figure 5: DODAG Configuration Option (Partial View) | Figure 5: DODAG Configuration Option (Partial View) | |||
This specification defines a new flag, "Root Proxies EDAR/EDAC (P)". | This specification defines a new flag, "Root Proxies EDAR/EDAC (P)". | |||
The 'P' flag is encoded in bit position 1 of the reserved flags in | The 'P' flag is encoded in bit position 1 of the reserved flags in | |||
the DODAG Configuration option (counting from bit 0 as the most | the DODAG Configuration option (counting from bit 0 as the most | |||
significant bit), and it is set to 0 in legacy implementations as | significant bit), and it is set to 0 in legacy implementations as | |||
specified in Sections 20.14 and 6.7.6 of [RFC6550], respectively. | specified in Sections 20.14 and 6.7.6 of [RFC6550], respectively. | |||
The 'P' flag is set to 1 to indicate that the Root performs the proxy | The 'P' flag is set to 1 to indicate that the root performs the proxy | |||
operation, which implies that it supports this specification and the | operation, which implies that it supports this specification and the | |||
updated RPL Target option (see Section 6.1). | updated RPL Target option (see Section 6.1). | |||
Section 4.1.3 of [RFC9008] updates [RFC6550] to indicate that the | Section 4.1.3 of [RFC9008] updates [RFC6550] to indicate that the | |||
definition of the flags applies to MOP values from zero (0) to six | definition of the flags applies to MOP values from zero (0) to six | |||
(6) only. For a MOP value of 7, the implementation MUST assume that | (6) only. For a MOP value of 7, the implementation MUST assume that | |||
the Root performs the proxy operation. | the root performs the proxy operation. | |||
The RPL DODAG Configuration option is typically placed in a DODAG | The RPL DODAG Configuration option is typically placed in a DODAG | |||
Information Object (DIO) message. The DIO message propagates down | Information Object (DIO) message. The DIO message propagates down | |||
the DODAG to form and then maintain its structure. The DODAG | the DODAG to form and then maintain its structure. The DODAG | |||
Configuration option is copied unmodified from parents to children. | Configuration option is copied unmodified from parents to children. | |||
[RFC6550] states that "Nodes other than the DODAG root MUST NOT | [RFC6550] states that "Nodes other than the DODAG root MUST NOT | |||
modify this information when propagating the DODAG Configuration | modify this information when propagating the DODAG Configuration | |||
option." Therefore, a legacy parent propagates the 'P' flag as set | option." Therefore, a legacy parent propagates the 'P' flag as set | |||
by the Root, and when the 'P' flag is set to 1, it is transparently | by the root, and when the 'P' flag is set to 1, it is transparently | |||
flooded to all the nodes in the DODAG. | flooded to all the nodes in the DODAG. | |||
6.3. Updated RPL Status | 6.3. Updated RPL Status | |||
The RPL Status is defined in Section 6.5.1 of [RFC6550] for use in | The RPL Status is defined in Section 6.5.1 of [RFC6550] for use in | |||
the DAO-ACK message. Values are assigned as follows: | the DAO-ACK message. Values are assigned as follows: | |||
+---------+----------------------------------+ | +---------+----------------------------------+ | |||
| Range | Meaning | | | Range | Meaning | | |||
+---------+----------------------------------+ | +---------+----------------------------------+ | |||
skipping to change at line 886 ¶ | skipping to change at line 886 ¶ | |||
Status Value: 6-bit unsigned integer. | Status Value: 6-bit unsigned integer. | |||
If the 'A' flag is set to 1, this field transports a value | If the 'A' flag is set to 1, this field transports a value | |||
defined for the 6LoWPAN ND EARO Status. | defined for the 6LoWPAN ND EARO Status. | |||
When the 'A' flag is set to 0, this field transports a Status | When the 'A' flag is set to 0, this field transports a Status | |||
value defined for RPL. | value defined for RPL. | |||
When building a DCO or a DAO-ACK message upon an IPv6 ND NA or an | When building a DCO or a DAO-ACK message upon an IPv6 ND NA or an | |||
EDAC message, the RPL root MUST copy the 6LoWPAN ND status code | EDAC message, the RPL DODAG root MUST copy the 6LoWPAN ND status code | |||
unchanged in the RPL Status Value field and set the 'A' flag to 1. | unchanged in the RPL Status Value field and set the 'A' flag to 1. | |||
The RPL root MUST set the 'U' flag to 1 for all rejection and unknown | The RPL DODAG root MUST set the 'U' flag to 1 for all rejection and | |||
status codes. The status codes in the 1-10 range [RFC8505] are all | unknown status codes. The status codes in the 1-10 range [RFC8505] | |||
considered rejections. | are all considered rejections. | |||
Reciprocally, upon a DCO or a DAO-ACK message from the RPL root with | Reciprocally, upon a DCO or a DAO-ACK message from the RPL DODAG root | |||
a RPL Status that has the 'A' flag set, the 6LR MUST copy the RPL | with a RPL Status that has the 'A' flag set, the 6LR MUST copy the | |||
Status value unchanged in the Status field of the EARO when | RPL Status value unchanged in the Status field of the EARO when | |||
generating an NA to the RUL. | generating an NA to the RUL. | |||
7. Enhancements to RFC 9009 | 7. Enhancements to RFC 9009 | |||
[RFC9009] defines the DCO message for RPL Storing mode only, with a | [RFC9009] defines the DCO message for RPL Storing mode only, with a | |||
link-local scope. All nodes in the RPL network are expected to | link-local scope. All nodes in the RPL network are expected to | |||
support the specification, since the message is processed hop by hop | support the specification, since the message is processed hop by hop | |||
along the path that is being cleaned up. | along the path that is being cleaned up. | |||
This specification extends the use of the DCO message to the Non- | This specification extends the use of the DCO message to the Non- | |||
Storing MOP, whereby the DCO is sent end to end by the Root directly | Storing MOP, whereby the DCO is sent end to end by the root directly | |||
to the RAN that injected the DAO message for the considered target. | to the RAN that injected the DAO message for the considered target. | |||
In that case, intermediate nodes do not need to support [RFC9009]; | In that case, intermediate nodes do not need to support [RFC9009]; | |||
they forward the DCO message as a plain IPv6 packet between the Root | they forward the DCO message as a plain IPv6 packet between the root | |||
and the RAN. | and the RAN. | |||
In the case of a RUL, the 6LR that serves the RUL acts as the RAN | In the case of a RUL, the 6LR that serves the RUL acts as the RAN | |||
that receives the Non-Storing DCO. This specification leverages the | that receives the Non-Storing DCO. This specification leverages the | |||
Non-Storing DCO between the Root and the 6LR that serves as the | Non-Storing DCO between the root and the 6LR that serves as the | |||
attachment router for a RUL. A 6LR and a Root that support this | attachment router for a RUL. A 6LR and a root that support this | |||
specification MUST implement the Non-Storing DCO. | specification MUST implement the Non-Storing DCO. | |||
8. Enhancements to RFCs 6775 and 8505 | 8. Enhancements to RFCs 6775 and 8505 | |||
This document updates [RFC6775] and [RFC8505] to reduce the range of | This document updates [RFC6775] and [RFC8505] to reduce the range of | |||
the ARO/EARO Status values to 64 values. The two most significant | the ARO/EARO Status values to 64 values. The two most significant | |||
(leftmost) bits of the original ND Status field are now reserved; | (leftmost) bits of the original ND Status field are now reserved; | |||
they MUST be set to 0 by the sender and ignored by the receiver. | they MUST be set to 0 by the sender and ignored by the receiver. | |||
This document also updates the behavior of a 6LR acting as a RPL | This document also updates the behavior of a 6LR acting as a RPL | |||
router and of a 6LN acting as a RUL in the 6LoWPAN ND Address | router and of a 6LN acting as a RUL in the 6LoWPAN ND Address | |||
Registration as follows: | Registration as follows: | |||
* If the RPL root advertises the ability to proxy the EDAR/EDAC | * If the RPL DODAG root advertises the ability to proxy the EDAR/ | |||
exchange to the 6LBR, the 6LR refrains from sending the keep-alive | EDAC exchange to the 6LBR, the 6LR refrains from sending the keep- | |||
EDAR message. If it is separated from the 6LBR, the Root | alive EDAR message. If it is separated from the 6LBR, the root | |||
regenerates the EDAR message to the 6LBR periodically, upon a DAO | regenerates the EDAR message to the 6LBR periodically, upon a DAO | |||
message that signals the liveliness of the address. | message that signals the liveliness of the address. | |||
* The use of the R flag is extended to the NA(EARO) to confirm | * The use of the R flag is extended to the NA(EARO) to confirm | |||
whether the route was installed. | whether the route was installed. | |||
9. Protocol Operations for Unicast Addresses | 9. Protocol Operations for Unicast Addresses | |||
The description below assumes that the Root sets the 'P' flag in the | The description below assumes that the root sets the 'P' flag in the | |||
DODAG Configuration option and performs the EDAR proxy operation | DODAG Configuration option and performs the EDAR proxy operation | |||
presented in Section 4.3. | presented in Section 4.3. | |||
If the 'P' flag is set to 0, the 6LR MUST generate the periodic EDAR | If the 'P' flag is set to 0, the 6LR MUST generate the periodic EDAR | |||
messages and process the returned status as specified in [RFC8505]. | messages and process the returned status as specified in [RFC8505]. | |||
If the EDAC indicates success, the rest of the flow takes place as | If the EDAC indicates success, the rest of the flow takes place as | |||
presented but without the proxied EDAR/EDAC exchange. | presented but without the proxied EDAR/EDAC exchange. | |||
Section 9.1 provides an overview of the route injection in RPL, | Section 9.1 provides an overview of the route injection in RPL, | |||
whereas Section 9.2 offers more details from the perspective of the | whereas Section 9.2 offers more details from the perspective of the | |||
different nodes involved in the flow. | different nodes involved in the flow. | |||
9.1. General Flow | 9.1. General Flow | |||
This specification eliminates the need to exchange keep-alive EDAR | This specification eliminates the need to exchange keep-alive EDAR | |||
and EDAC messages all the way from a 6LN to the 6LBR across a RPL | and EDAC messages all the way from a 6LN to the 6LBR across a RPL | |||
mesh. Instead, the EDAR/EDAC exchange with the 6LBR is proxied by | mesh. Instead, the EDAR/EDAC exchange with the 6LBR is proxied by | |||
the RPL root upon the DAO message that refreshes the RPL routing | the RPL DODAG root upon the DAO message that refreshes the RPL | |||
state. The first EDAR upon a new Address Registration cannot be | routing state. The first EDAR upon a new Address Registration cannot | |||
proxied, though, as it is generated for the purpose of DAD, which | be proxied, though, as it is generated for the purpose of DAD, which | |||
must be verified before the address is injected in RPL. | must be verified before the address is injected in RPL. | |||
In a RPL network where the function is enabled, refreshing the state | In a RPL network where the function is enabled, refreshing the state | |||
in the 6LBR is the responsibility of the Root. Consequently, only | in the 6LBR is the responsibility of the root. Consequently, only | |||
addresses that are injected in RPL will be kept alive at the 6LBR by | addresses that are injected in RPL will be kept alive at the 6LBR by | |||
the RPL root. Since RULs are advertised using Non-Storing mode, the | the RPL DODAG root. Since RULs are advertised using Non-Storing | |||
DAO message flow and the keep-alive EDAR/EDAC can be nested within | mode, the DAO message flow and the keep-alive EDAR/EDAC can be nested | |||
the Address (re)Registration flow. Figure 7 illustrates that, for | within the Address (re)Registration flow. Figure 7 illustrates that, | |||
the first Address Registration, both the DAD and the keep-alive | for the first Address Registration, both the DAD and the keep-alive | |||
EDAR/EDAC exchanges happen in the same sequence. | EDAR/EDAC exchanges happen in the same sequence. | |||
6LN/RUL 6LR <6LR*> Root 6LBR | 6LN/RUL 6LR <6LR*> Root 6LBR | |||
|<---Using ND--->|<--Using RPL->|<-----Using ND---->| | |<---Using ND--->|<--Using RPL->|<-----Using ND---->| | |||
| |<-----------Using ND------------->| | | |<-----------Using ND------------->| | |||
| | | | | | | | | | |||
| NS(EARO) | | | | | NS(EARO) | | | | |||
|--------------->| | | |--------------->| | | |||
| | EDAR | | | | EDAR | | |||
| |--------------------------------->| | | |--------------------------------->| | |||
skipping to change at line 1031 ¶ | skipping to change at line 1031 ¶ | |||
| | |------------------>| | | | |------------------>| | |||
| | | EDAC | | | | | EDAC | | |||
| | |<------------------| | | | |<------------------| | |||
| | DAO-ACK | | | | | DAO-ACK | | | |||
| |<-------------| | | | |<-------------| | | |||
| NA(EARO) | | | | | NA(EARO) | | | | |||
|<---------------| | | | |<---------------| | | | |||
Figure 8: Next RUL Registration Flow | Figure 8: Next RUL Registration Flow | |||
This is what causes the RPL root to refresh the state in the 6LBR, | This is what causes the RPL DODAG root to refresh the state in the | |||
using an EDAC message. In the case of an error in the proxied EDAR | 6LBR, using an EDAC message. In the case of an error in the proxied | |||
flow, the error is returned in the DAO-ACK using a RPL Status with | EDAR flow, the error is returned in the DAO-ACK using a RPL Status | |||
the 'A' flag set to 1, which embeds a 6LoWPAN Status value as | with the 'A' flag set to 1, which embeds a 6LoWPAN Status value as | |||
discussed in Section 6.3. | discussed in Section 6.3. | |||
The 6LR may receive a requested DAO-ACK after it received an | The 6LR may receive a requested DAO-ACK after it received an | |||
asynchronous Non-Storing DCO, but the non-zero status in the DCO | asynchronous Non-Storing DCO, but the non-zero status in the DCO | |||
supersedes a positive status in the DAO-ACK, regardless of the order | supersedes a positive status in the DAO-ACK, regardless of the order | |||
in which they are received. Upon the DAO-ACK -- or the DCO, if one | in which they are received. Upon the DAO-ACK -- or the DCO, if one | |||
arrives first -- the 6LR responds to the RUL with an NA(EARO). | arrives first -- the 6LR responds to the RUL with an NA(EARO). | |||
An issue may be detected later, e.g., the address moves to a | An issue may be detected later, e.g., the address moves to a | |||
different DODAG with the 6LBR attached to a different 6LoWPAN | different DODAG with the 6LBR attached to a different 6LoWPAN | |||
Backbone Router (6BBR); see Figure 5 in Section 3.3 of [RFC8929]. | Backbone Router (6BBR); see Figure 5 in Section 3.3 of [RFC8929]. | |||
The 6BBR may send a negative ND Status, e.g., in an asynchronous | The 6BBR may send a negative ND Status, e.g., in an asynchronous | |||
NA(EARO) to the 6LBR. | NA(EARO) to the 6LBR. | |||
[RFC8929] expects that the 6LBR is co-located with the RPL root, but | [RFC8929] expects that the 6LBR is co-located with the RPL DODAG | |||
if not, the 6LBR MUST forward the status code to the originator of | root, but if not, the 6LBR MUST forward the status code to the | |||
the EDAR -- either the 6LR or the RPL root that proxies for it. The | originator of the EDAR -- either the 6LR or the RPL DODAG root that | |||
ND status code is mapped in a RPL Status value by the RPL root, and | proxies for it. The ND status code is mapped in a RPL Status value | |||
then back to an ND Status by the 6LR to the 6LN. Note that a legacy | by the RPL DODAG root, and then back to an ND Status by the 6LR to | |||
RAN that receives a Non-Storing DCO that it does not support will | the 6LN. Note that a legacy RAN that receives a Non-Storing DCO that | |||
ignore it silently, as specified in Section 6 of [RFC6550]. The | it does not support will ignore it silently, as specified in | |||
result is that it will remain unaware that it is no longer reachable | Section 6 of [RFC6550]. The result is that it will remain unaware | |||
until its next RPL exchange happens. This situation will be cleared | that it is no longer reachable until its next RPL exchange happens. | |||
upon the next Non-Storing DAO exchange if the error is returned in a | This situation will be cleared upon the next Non-Storing DAO exchange | |||
DAO-ACK. | if the error is returned in a DAO-ACK. | |||
Figure 9 illustrates this in the case where the 6LBR and the Root are | Figure 9 illustrates this in the case where the 6LBR and the root are | |||
not co-located, and the Root proxies the EDAR/EDAC flow. | not co-located, and the root proxies the EDAR/EDAC flow. | |||
6LN/RUL <-ND-> 6LR <-RPL-> Root <-ND-> 6LBR <-ND-> 6BBR | 6LN/RUL <-ND-> 6LR <-RPL-> Root <-ND-> 6LBR <-ND-> 6BBR | |||
| | | | | | | | | | | | |||
| | | | NA(EARO) | | | | | | NA(EARO) | | |||
| | | |<------------| | | | | |<------------| | |||
| | | EDAC | | | | | | EDAC | | | |||
| | |<-------------| | | | | |<-------------| | | |||
| | DCO | | | | | | DCO | | | | |||
| |<------------| | | | | |<------------| | | | |||
| NA(EARO) | | | | | | NA(EARO) | | | | | |||
|<-------------| | | | | |<-------------| | | | | |||
| | | | | | | | | | | | |||
Figure 9: Asynchronous Issue | Figure 9: Asynchronous Issue | |||
If the Root does not proxy, then the EDAC with a non-zero status | If the root does not proxy, then the EDAC with a non-zero status | |||
reaches the 6LR directly. In that case, the 6LR MUST clean up the | reaches the 6LR directly. In that case, the 6LR MUST clean up the | |||
route using a DAO with a Lifetime of 0, and it MUST propagate the | route using a DAO with a Lifetime of 0, and it MUST propagate the | |||
status back to the RUL in an NA(EARO) with the R flag set to 0. | status back to the RUL in an NA(EARO) with the R flag set to 0. | |||
The RUL may terminate the registration at any time by using a | The RUL may terminate the registration at any time by using a | |||
Registration Lifetime of 0. This specification requires that the RPL | Registration Lifetime of 0. This specification requires that the RPL | |||
Target option transport the ROVR. This way, the same flow as the | Target option transport the ROVR. This way, the same flow as the | |||
heartbeat flow is sufficient to inform the 6LBR using the Root as a | heartbeat flow is sufficient to inform the 6LBR using the root as a | |||
proxy, as illustrated in Figure 8. | proxy, as illustrated in Figure 8. | |||
All or any combination of the 6LR, the Root, and the 6LBR might be | All or any combination of the 6LR, the root, and the 6LBR might be | |||
collapsed in a single node. | collapsed in a single node. | |||
9.2. Detailed Operation | 9.2. Detailed Operation | |||
The following sections specify the behavior of (1) the 6LN acting as | The following sections specify the behavior of (1) the 6LN acting as | |||
a RUL, (2) the 6LR acting as a border router and serving the 6LN, | a RUL, (2) the 6LR acting as a border router and serving the 6LN, | |||
(3) the RPL root, and (4) the 6LBR in the control flows that enable | (3) the RPL DODAG root, and (4) the 6LBR in the control flows that | |||
RPL routing back to the RUL, respectively. | enable RPL routing back to the RUL, respectively. | |||
9.2.1. Perspective of the 6LN Acting as a RUL | 9.2.1. Perspective of the 6LN Acting as a RUL | |||
This specification builds on the operation of a 6LoWPAN ND-compliant | This specification builds on the operation of a 6LoWPAN ND-compliant | |||
6LN/RUL, which is expected to operate as follows: | 6LN/RUL, which is expected to operate as follows: | |||
1. The 6LN selects a 6LR that provides reachability services for a | 1. The 6LN selects a 6LR that provides reachability services for a | |||
RUL. This is signaled by a 6CIO in the RA messages with the L, | RUL. This is signaled by a 6CIO in the RA messages with the L, | |||
P, and E flags set to 1 as prescribed by [RFC8505]. | P, and E flags set to 1 as prescribed by [RFC8505]. | |||
skipping to change at line 1196 ¶ | skipping to change at line 1196 ¶ | |||
If the R flag is set to 1 in the NS(EARO), the 6LR SHOULD inject the | If the R flag is set to 1 in the NS(EARO), the 6LR SHOULD inject the | |||
host route in RPL, unless this is barred for other reasons, such as | host route in RPL, unless this is barred for other reasons, such as | |||
the saturation of the RPL parents. The 6LR MUST use RPL Non-Storing | the saturation of the RPL parents. The 6LR MUST use RPL Non-Storing | |||
mode signaling and the updated Target option (see Section 6.1). To | mode signaling and the updated Target option (see Section 6.1). To | |||
avoid a redundant EDAR/EDAC flow to the 6LBR, the 6LR SHOULD refrain | avoid a redundant EDAR/EDAC flow to the 6LBR, the 6LR SHOULD refrain | |||
from setting the 'X' flag. The 6LR MUST request a DAO-ACK by setting | from setting the 'X' flag. The 6LR MUST request a DAO-ACK by setting | |||
the 'K' flag in the DAO message. Successfully injecting the route to | the 'K' flag in the DAO message. Successfully injecting the route to | |||
the RUL's address will be indicated via the 'U' flag set to 0 in the | the RUL's address will be indicated via the 'U' flag set to 0 in the | |||
RPL Status of the DAO-ACK message. | RPL Status of the DAO-ACK message. | |||
For the registration refreshes, if the RPL root sets the 'P' flag in | For the registration refreshes, if the RPL DODAG root sets the 'P' | |||
the DODAG Configuration option to 1, then the 6LR MUST refrain from | flag in the DODAG Configuration option to 1, then the 6LR MUST | |||
sending the keep-alive EDAR; instead, it MUST set the 'X' flag to 1 | refrain from sending the keep-alive EDAR; instead, it MUST set the | |||
in the Target option of the DAO messages, to request that the Root | 'X' flag to 1 in the Target option of the DAO messages, to request | |||
proxy the keep-alive EDAR/EDAC exchange with the 6LBR (see | that the root proxy the keep-alive EDAR/EDAC exchange with the 6LBR | |||
Section 6); if the 'P' flag is set to 0, then the 6LR MUST set the | (see Section 6); if the 'P' flag is set to 0, then the 6LR MUST set | |||
'X' flag to 0 and handle the EDAR/EDAC flow itself. | the 'X' flag to 0 and handle the EDAR/EDAC flow itself. | |||
The Opaque field in the EARO provides a means to signal which RPL | The Opaque field in the EARO provides a means to signal which RPL | |||
Instance is to be used for the DAO advertisements and the forwarding | Instance is to be used for the DAO advertisements and the forwarding | |||
of packets sourced at the Registered Address when there is no RPI in | of packets sourced at the Registered Address when there is no RPI in | |||
the packet. | the packet. | |||
As described in [RFC8505], if the "I" field is 0, then the Opaque | As described in [RFC8505], if the "I" field is 0, then the Opaque | |||
field is expected to carry the RPLInstanceID suggested by the 6LN; | field is expected to carry the RPLInstanceID suggested by the 6LN; | |||
otherwise, there is no suggested RPL Instance. If the 6LR | otherwise, there is no suggested RPL Instance. If the 6LR | |||
participates in the suggested RPL Instance, then the 6LR MUST use | participates in the suggested RPL Instance, then the 6LR MUST use | |||
skipping to change at line 1247 ¶ | skipping to change at line 1247 ¶ | |||
4. The Path Lifetime in the TIO is computed from the Registration | 4. The Path Lifetime in the TIO is computed from the Registration | |||
Lifetime in the EARO. This operation converts seconds to the | Lifetime in the EARO. This operation converts seconds to the | |||
Lifetime Units used in the RPL operation. This creates the | Lifetime Units used in the RPL operation. This creates the | |||
deployment constraint that the Lifetime Unit is reasonably | deployment constraint that the Lifetime Unit is reasonably | |||
compatible with the expression of the Registration Lifetime; | compatible with the expression of the Registration Lifetime; | |||
e.g., a Lifetime Unit of 0x4000 maps the most significant byte of | e.g., a Lifetime Unit of 0x4000 maps the most significant byte of | |||
the Registration Lifetime to the Path Lifetime. | the Registration Lifetime to the Path Lifetime. | |||
In that operation, the Path Lifetime must be set to ensure that | In that operation, the Path Lifetime must be set to ensure that | |||
the path has a longer lifetime than the registration and also | the path has a longer lifetime than the registration and also | |||
covers the round-trip time to the Root. | covers the round-trip time to the root. | |||
Note that if the Registration Lifetime is 0, then the Path | Note that if the Registration Lifetime is 0, then the Path | |||
Lifetime is also 0 and the DAO message becomes a No-Path DAO, | Lifetime is also 0 and the DAO message becomes a No-Path DAO, | |||
which cleans up the routes down to the RUL's address; this also | which cleans up the routes down to the RUL's address; this also | |||
causes the Root as a proxy to send an EDAR message to the 6LBR | causes the root as a proxy to send an EDAR message to the 6LBR | |||
with a Lifetime of 0. | with a Lifetime of 0. | |||
5. The Path Sequence in the TIO is set to the TID value found in the | 5. The Path Sequence in the TIO is set to the TID value found in the | |||
EARO. | EARO. | |||
Upon receiving or timing out the DAO-ACK after an implementation- | Upon receiving or timing out the DAO-ACK after an implementation- | |||
specific number of retries, the 6LR MUST send the corresponding | specific number of retries, the 6LR MUST send the corresponding | |||
NA(EARO) to the RUL. Upon receiving an asynchronous DCO message, it | NA(EARO) to the RUL. Upon receiving an asynchronous DCO message, it | |||
MUST send an asynchronous NA(EARO) to the RUL immediately but still | MUST send an asynchronous NA(EARO) to the RUL immediately but still | |||
be capable of processing the DAO-ACK if one is pending. | be capable of processing the DAO-ACK if one is pending. | |||
skipping to change at line 1373 ¶ | skipping to change at line 1373 ¶ | |||
NS(EARO) with the R flag set to 1 the 6LR was injecting the host | NS(EARO) with the R flag set to 1 the 6LR was injecting the host | |||
route to the Registered Address in RPL using DAO messages, then the | route to the Registered Address in RPL using DAO messages, then the | |||
6LR MUST invalidate the host route in RPL using a DAO with a Path | 6LR MUST invalidate the host route in RPL using a DAO with a Path | |||
Lifetime of 0. It is up to the registering 6LN to maintain the | Lifetime of 0. It is up to the registering 6LN to maintain the | |||
corresponding route from then on, by either (1) keeping it active via | corresponding route from then on, by either (1) keeping it active via | |||
a different 6LR or (2) acting as a RAN and managing its own | a different 6LR or (2) acting as a RAN and managing its own | |||
reachability. | reachability. | |||
When forwarding a packet from the RUL into the RPL domain, if the | When forwarding a packet from the RUL into the RPL domain, if the | |||
packet does not have an RPI, the 6LR MUST encapsulate the packet to | packet does not have an RPI, the 6LR MUST encapsulate the packet to | |||
the Root and add an RPI. If there is an RPI in the packet, the 6LR | the root and add an RPI. If there is an RPI in the packet, the 6LR | |||
MUST rewrite the RPI, but it does not need to encapsulate. | MUST rewrite the RPI, but it does not need to encapsulate. | |||
9.2.3. Perspective of the RPL Root | 9.2.3. Perspective of the RPL DODAG Root | |||
A RPL root MUST set the 'P' flag to 1 in the RPL DODAG Configuration | A RPL DODAG root MUST set the 'P' flag to 1 in the RPL DODAG | |||
option of the DIO messages that it generates (see Section 6) to | Configuration option of the DIO messages that it generates (see | |||
signal that it proxies the EDAR/EDAC exchange and supports the | Section 6) to signal that it proxies the EDAR/EDAC exchange and | |||
updated RPL Target option. | supports the updated RPL Target option. | |||
Upon reception of a DAO message, for each updated RPL Target option | Upon reception of a DAO message, for each updated RPL Target option | |||
(see Section 6.1) with the 'X' flag set to 1, the Root MUST notify | (see Section 6.1) with the 'X' flag set to 1, the root MUST notify | |||
the 6LBR by using a proxied EDAR/EDAC exchange; if the RPL root and | the 6LBR by using a proxied EDAR/EDAC exchange; if the RPL DODAG root | |||
the 6LBR are integrated, an internal API can be used instead. | and the 6LBR are integrated, an internal API can be used instead. | |||
The EDAR message MUST be constructed as follows: | The EDAR message MUST be constructed as follows: | |||
1. The target IPv6 address from the RPL Target option is placed in | 1. The target IPv6 address from the RPL Target option is placed in | |||
the Registered Address field of the EDAR message; | the Registered Address field of the EDAR message; | |||
2. The Registration Lifetime is adapted from the Path Lifetime in | 2. The Registration Lifetime is adapted from the Path Lifetime in | |||
the TIO by converting the Lifetime Units used in RPL into units | the TIO by converting the Lifetime Units used in RPL into units | |||
of 60 seconds used in the 6LoWPAN ND messages; | of 60 seconds used in the 6LoWPAN ND messages; | |||
3. The TID value is set to the Path Sequence in the TIO and | 3. The TID value is set to the Path Sequence in the TIO and | |||
indicated with an ICMP code of 1 in the EDAR message; | indicated with an ICMP code of 1 in the EDAR message; | |||
4. The ROVR in the RPL Target option is copied as is in the EDAR, | 4. The ROVR in the RPL Target option is copied as is in the EDAR, | |||
and the ICMP Code Suffix is set to the appropriate value as shown | and the ICMP Code Suffix is set to the appropriate value as shown | |||
in Table 4 of [RFC8505], depending on the size of the ROVR field. | in Table 4 of [RFC8505], depending on the size of the ROVR field. | |||
Upon receiving an EDAC message from the 6LBR, if a DAO is pending, | Upon receiving an EDAC message from the 6LBR, if a DAO is pending, | |||
then the Root MUST send a DAO-ACK back to the 6LR. Otherwise, if the | then the root MUST send a DAO-ACK back to the 6LR. Otherwise, if the | |||
status in the EDAC message is not "Success", then it MUST send an | status in the EDAC message is not "Success", then it MUST send an | |||
asynchronous DCO to the 6LR. | asynchronous DCO to the 6LR. | |||
In either case, the EDAC Status is embedded in the RPL Status with | In either case, the EDAC Status is embedded in the RPL Status with | |||
the 'A' flag set to 1. | the 'A' flag set to 1. | |||
The proxied EDAR/EDAC exchange MUST be protected with a timer whose | The proxied EDAR/EDAC exchange MUST be protected with a timer whose | |||
appropriate duration and number of retries (1) are implementation | appropriate duration and number of retries (1) are implementation | |||
dependent and (2) SHOULD be configurable, since the Root and the 6LBR | dependent and (2) SHOULD be configurable, since the root and the 6LBR | |||
are typically nodes with a higher capacity and manageability than | are typically nodes with a higher capacity and manageability than | |||
6LRs. Upon timing out, the Root MUST send an error back to the 6LR | 6LRs. Upon timing out, the root MUST send an error back to the 6LR | |||
as above, using either a DAO-ACK or a DCO, as appropriate, with the | as above, using either a DAO-ACK or a DCO, as appropriate, with the | |||
'A' and 'U' flags set to 1 in the RPL Status, and a RPL Status value | 'A' and 'U' flags set to 1 in the RPL Status, and a RPL Status value | |||
of "6LBR Registry Saturated" [RFC8505]. | of "6LBR Registry Saturated" [RFC8505]. | |||
9.2.4. Perspective of the 6LBR | 9.2.4. Perspective of the 6LBR | |||
The 6LBR is unaware that the RPL root is not the new attachment 6LR | The 6LBR is unaware that the RPL DODAG root is not the new attachment | |||
of the RUL, so it is not impacted by this specification. | 6LR of the RUL, so it is not impacted by this specification. | |||
Upon reception of an EDAR message, the 6LBR behaves as prescribed by | Upon reception of an EDAR message, the 6LBR behaves as prescribed by | |||
[RFC8505] and returns an EDAC message to the sender. | [RFC8505] and returns an EDAC message to the sender. | |||
10. Protocol Operations for Multicast Addresses | 10. Protocol Operations for Multicast Addresses | |||
Section 12 of [RFC6550] details RPL support for multicast flows. | Section 12 of [RFC6550] details RPL support for multicast flows. | |||
This support is activated by setting the MOP value to 3 ("Storing | This support is activated by setting the MOP value to 3 ("Storing | |||
Mode of Operation with multicast support") in the DIO messages that | Mode of Operation with multicast support") in the DIO messages that | |||
form the DODAG. This section also applies if and only if the MOP of | form the DODAG. This section also applies if and only if the MOP of | |||
skipping to change at line 1480 ¶ | skipping to change at line 1480 ¶ | |||
This specification does not change MLD but will operate more | This specification does not change MLD but will operate more | |||
efficiently if the asynchronous messages for unsolicited Report and | efficiently if the asynchronous messages for unsolicited Report and | |||
Done are sent by the 6LN as Layer 2 unicast to the 6LR, particularly | Done are sent by the 6LN as Layer 2 unicast to the 6LR, particularly | |||
on wireless. | on wireless. | |||
The 6LR acts as a generic MLD querier and generates a DAO with the | The 6LR acts as a generic MLD querier and generates a DAO with the | |||
multicast address as the Target Prefix as described in Section 12 of | multicast address as the Target Prefix as described in Section 12 of | |||
[RFC6550]. As for the unicast host routes, the Path Lifetime | [RFC6550]. As for the unicast host routes, the Path Lifetime | |||
associated to the Target is mapped from the Query Interval and is set | associated to the Target is mapped from the Query Interval and is set | |||
to be larger, to account for variable propagation delays to the Root. | to be larger, to account for variable propagation delays to the root. | |||
The Root proxies the MLD exchange as a listener with the 6LBR acting | The root proxies the MLD exchange as a listener with the 6LBR acting | |||
as the querier, so as to get packets from a source external to the | as the querier, so as to get packets from a source external to the | |||
RPL domain. | RPL domain. | |||
Upon a DAO with a Target option for a multicast address, the RPL root | Upon a DAO with a Target option for a multicast address, the RPL | |||
checks to see if it is already registered as a listener for that | DODAG root checks to see if it is already registered as a listener | |||
address, and if not, it performs its own unsolicited Report for the | for that address, and if not, it performs its own unsolicited Report | |||
multicast address as described in Section 6.1 of [RFC3810]. The | for the multicast address as described in Section 6.1 of [RFC3810]. | |||
Report is source independent, so there is no source address listed. | The Report is source independent, so there is no source address | |||
listed. | ||||
The equivalent of the registration refresh is pulled periodically by | The equivalent of the registration refresh is pulled periodically by | |||
the 6LR acting as the querier. Upon the timing out of the Query | the 6LR acting as the querier. Upon the timing out of the Query | |||
Interval, the 6LR sends a Multicast Address Specific Query to each of | Interval, the 6LR sends a Multicast Address Specific Query to each of | |||
its listeners, for each multicast address. The listeners respond | its listeners, for each multicast address. The listeners respond | |||
with a Report. Based on the Reports, the 6LR maintains the | with a Report. Based on the Reports, the 6LR maintains the | |||
aggregated list of all the multicast addresses for which there is a | aggregated list of all the multicast addresses for which there is a | |||
listener and advertises them using DAO messages as specified in | listener and advertises them using DAO messages as specified in | |||
Section 12 of [RFC6550]. Optionally, the 6LR MAY send a General | Section 12 of [RFC6550]. Optionally, the 6LR MAY send a General | |||
Query, where the Multicast Address field is set to 0. In that case, | Query, where the Multicast Address field is set to 0. In that case, | |||
the multicast packet is passed as a Layer 2 unicast to each of the | the multicast packet is passed as a Layer 2 unicast to each of the | |||
interested children. | interested children. | |||
Upon a Report, the 6LR generates a DAO with as many Target options as | Upon a Report, the 6LR generates a DAO with as many Target options as | |||
there are Multicast Address Records in the Report message, copying | there are Multicast Address Records in the Report message, copying | |||
the Multicast Address field in the Target Prefix of the RPL Target | the Multicast Address field in the Target Prefix of the RPL Target | |||
option. The DAO message is a Storing mode DAO, passed to a selection | option. The DAO message is a Storing mode DAO, passed to a selection | |||
of the 6LR's parents. | of the 6LR's parents. | |||
Asynchronously to this, a similar procedure happens between the Root | Asynchronously to this, a similar procedure happens between the root | |||
and a router, such as the 6LBR, that serves multicast flows on the | and a router, such as the 6LBR, that serves multicast flows on the | |||
link where the Root is located. Again, the Query and Report messages | link where the root is located. Again, the Query and Report messages | |||
are source independent. The Root lists exactly once each multicast | are source independent. The root lists exactly once each multicast | |||
address for which it has at least one active multicast DAO state, | address for which it has at least one active multicast DAO state, | |||
copying the multicast address in the DAO state in the Multicast | copying the multicast address in the DAO state in the Multicast | |||
Address field of the Multicast Address Records in the Report message. | Address field of the Multicast Address Records in the Report message. | |||
This is illustrated in Figure 12: | This is illustrated in Figure 12: | |||
6LN/RUL 6LR Root 6LBR | 6LN/RUL 6LR Root 6LBR | |||
| | | | | | | | | | |||
| Query | | | | | Query | | | | |||
|<-------------------| | | | |<-------------------| | | | |||
skipping to change at line 1537 ¶ | skipping to change at line 1538 ¶ | |||
| | DAO-ACK | | | | | DAO-ACK | | | |||
| |<--------------| | | | |<--------------| | | |||
| | | Query | | | | | Query | | |||
| | |<-------------------| | | | |<-------------------| | |||
| | | Report | | | | | Report | | |||
| | |------------------->| | | | |------------------->| | |||
| | | | | | | | | | |||
Figure 12: Next Registration Flow | Figure 12: Next Registration Flow | |||
Note that all or any combination of the 6LR, the Root, and the 6LBR | Note that all or any combination of the 6LR, the root, and the 6LBR | |||
might be collapsed in a single node, in which case the flow above | might be collapsed in a single node, in which case the flow above | |||
happens internally, and possibly through internal API calls as | happens internally, and possibly through internal API calls as | |||
opposed to messaging. | opposed to messaging. | |||
11. Security Considerations | 11. Security Considerations | |||
It is worth noting that with [RFC6550], every node in the LLN is RPL | It is worth noting that with [RFC6550], every node in the LLN is RPL | |||
aware and can inject any RPL-based attack in the network. This | aware and can inject any RPL-based attack in the network. This | |||
specification improves this situation by isolating edge nodes that | specification improves this situation by isolating edge nodes that | |||
can only interact with the RPL routers using 6LoWPAN ND, meaning that | can only interact with the RPL routers using 6LoWPAN ND, meaning that | |||
skipping to change at line 1587 ¶ | skipping to change at line 1588 ¶ | |||
Address and can be used to provide proof of ownership of the | Address and can be used to provide proof of ownership of the | |||
Registered Addresses. Once an address is registered with the | Registered Addresses. Once an address is registered with the | |||
Crypto-ID and proof of ownership is provided, only the owner of that | Crypto-ID and proof of ownership is provided, only the owner of that | |||
address can modify the registration information, thereby enforcing | address can modify the registration information, thereby enforcing | |||
SAVI. [RFC8928] reduces even further the attack perimeter that is | SAVI. [RFC8928] reduces even further the attack perimeter that is | |||
available to the edge nodes, and its use is suggested in this | available to the edge nodes, and its use is suggested in this | |||
specification. | specification. | |||
Additionally, the trust model could include role validation (e.g., | Additionally, the trust model could include role validation (e.g., | |||
using role-based authorization) to ensure that the node that claims | using role-based authorization) to ensure that the node that claims | |||
to be a 6LBR or a RPL root is entitled to do so. | to be a 6LBR or a RPL DODAG root is entitled to do so. | |||
The Opaque field in the EARO enables the RUL to suggest a | The Opaque field in the EARO enables the RUL to suggest a | |||
RPLInstanceID where its traffic is placed. It is also possible for | RPLInstanceID where its traffic is placed. It is also possible for | |||
an attacker RUL to include an RPI in the packet. This opens the door | an attacker RUL to include an RPI in the packet. This opens the door | |||
to attacks where a RPL Instance would be reserved for critical | to attacks where a RPL Instance would be reserved for critical | |||
traffic, e.g., with a specific bandwidth reservation, that the | traffic, e.g., with a specific bandwidth reservation, that the | |||
additional traffic generated by a rogue may disrupt. The attack may | additional traffic generated by a rogue may disrupt. The attack may | |||
be alleviated by traditional access control and traffic-shaping | be alleviated by traditional access control and traffic-shaping | |||
mechanisms where the 6LR controls the incoming traffic from the 6LN. | mechanisms where the 6LR controls the incoming traffic from the 6LN. | |||
More importantly, the 6LR is the node that injects the traffic in the | More importantly, the 6LR is the node that injects the traffic in the | |||
RPL domain, so it has the final word on which RPL Instance is to be | RPL domain, so it has the final word on which RPL Instance is to be | |||
used for the traffic coming from the RUL, per its own policy. In | used for the traffic coming from the RUL, per its own policy. In | |||
particular, a policy can override the formal language that forces the | particular, a policy can override the formal language that forces the | |||
use of the Opaque field or the rewriting of the RPI provided by the | use of the Opaque field or the rewriting of the RPI provided by the | |||
RUL, in a situation where the network administrator finds it | RUL, in a situation where the network administrator finds it | |||
relevant. | relevant. | |||
At the time of this writing, RPL does not have a route ownership | At the time of this writing, RPL does not have a route ownership | |||
validation model whereby it is possible to validate the origin of an | validation model whereby it is possible to validate the origin of an | |||
address that is injected in a DAO. This specification makes a first | address that is injected in a DAO. This specification makes a first | |||
step in that direction by allowing the Root to challenge the RUL via | step in that direction by allowing the root to challenge the RUL via | |||
the 6LR that serves it. | the 6LR that serves it. | |||
Section 6.1 indicates that when the length of the ROVR field is | Section 6.1 indicates that when the length of the ROVR field is | |||
unknown, the RPL Target option must be passed on as received in RPL | unknown, the RPL Target option must be passed on as received in RPL | |||
Storing mode. This creates a possible opening for using DAO messages | Storing mode. This creates a possible opening for using DAO messages | |||
as a covert channel. Note that DAO messages are rare, and overusing | as a covert channel. Note that DAO messages are rare, and overusing | |||
that channel could be detected. An implementation SHOULD notify the | that channel could be detected. An implementation SHOULD notify the | |||
network management system when a RPL Target option is received with | network management system when a RPL Target option is received with | |||
an unknown ROVR field size, to ensure that the network administrator | an unknown ROVR field size, to ensure that the network administrator | |||
is aware of the situation. | is aware of the situation. | |||
skipping to change at line 1804 ¶ | skipping to change at line 1805 ¶ | |||
<https://www.rfc-editor.org/info/rfc8505>. | <https://www.rfc-editor.org/info/rfc8505>. | |||
[RFC8928] Thubert, P., Ed., Sarikaya, B., Sethi, M., and R. Struik, | [RFC8928] Thubert, P., Ed., Sarikaya, B., Sethi, M., and R. Struik, | |||
"Address-Protected Neighbor Discovery for Low-Power and | "Address-Protected Neighbor Discovery for Low-Power and | |||
Lossy Networks", RFC 8928, DOI 10.17487/RFC8928, November | Lossy Networks", RFC 8928, DOI 10.17487/RFC8928, November | |||
2020, <https://www.rfc-editor.org/info/rfc8928>. | 2020, <https://www.rfc-editor.org/info/rfc8928>. | |||
[RFC9008] Robles, M.I., Richardson, M., and P. Thubert, "Using RPI | [RFC9008] Robles, M.I., Richardson, M., and P. Thubert, "Using RPI | |||
Option Type, Routing Header for Source Routes, and IPv6- | Option Type, Routing Header for Source Routes, and IPv6- | |||
in-IPv6 Encapsulation in the RPL Data Plane", RFC 9008, | in-IPv6 Encapsulation in the RPL Data Plane", RFC 9008, | |||
DOI 10.17487/RFC9008, March 2021, | DOI 10.17487/RFC9008, April 2021, | |||
<https://www.rfc-editor.org/info/rfc9008>. | <https://www.rfc-editor.org/info/rfc9008>. | |||
[RFC9009] Jadhav, R., Ed., Thubert, P., Sahoo, R., and Z. Cao, | [RFC9009] Jadhav, R., Ed., Thubert, P., Sahoo, R., and Z. Cao, | |||
"Efficient Route Invalidation", RFC 9009, | "Efficient Route Invalidation", RFC 9009, | |||
DOI 10.17487/RFC9009, March 2021, | DOI 10.17487/RFC9009, April 2021, | |||
<https://www.rfc-editor.org/info/rfc9009>. | <https://www.rfc-editor.org/info/rfc9009>. | |||
13.2. Informative References | 13.2. Informative References | |||
[RFC4862] Thomson, S., Narten, T., and T. Jinmei, "IPv6 Stateless | [RFC4862] Thomson, S., Narten, T., and T. Jinmei, "IPv6 Stateless | |||
Address Autoconfiguration", RFC 4862, | Address Autoconfiguration", RFC 4862, | |||
DOI 10.17487/RFC4862, September 2007, | DOI 10.17487/RFC4862, September 2007, | |||
<https://www.rfc-editor.org/info/rfc4862>. | <https://www.rfc-editor.org/info/rfc4862>. | |||
[RFC4919] Kushalnagar, N., Montenegro, G., and C. Schumacher, "IPv6 | [RFC4919] Kushalnagar, N., Montenegro, G., and C. Schumacher, "IPv6 | |||
skipping to change at line 1893 ¶ | skipping to change at line 1894 ¶ | |||
RFC 8415, DOI 10.17487/RFC8415, November 2018, | RFC 8415, DOI 10.17487/RFC8415, November 2018, | |||
<https://www.rfc-editor.org/info/rfc8415>. | <https://www.rfc-editor.org/info/rfc8415>. | |||
[RFC8929] Thubert, P., Ed., Perkins, C.E., and E. Levy-Abegnoli, | [RFC8929] Thubert, P., Ed., Perkins, C.E., and E. Levy-Abegnoli, | |||
"IPv6 Backbone Router", RFC 8929, DOI 10.17487/RFC8929, | "IPv6 Backbone Router", RFC 8929, DOI 10.17487/RFC8929, | |||
November 2020, <https://www.rfc-editor.org/info/rfc8929>. | November 2020, <https://www.rfc-editor.org/info/rfc8929>. | |||
Appendix A. Example Compression | Appendix A. Example Compression | |||
Figure 13 illustrates the case in Storing mode where the packet is | Figure 13 illustrates the case in Storing mode where the packet is | |||
received from the Internet, then the Root encapsulates the packet to | received from the Internet, then the root encapsulates the packet to | |||
insert the RPI and deliver it to the 6LR that is the parent and last | insert the RPI and deliver it to the 6LR that is the parent and last | |||
hop to the final destination, which is not known to support | hop to the final destination, which is not known to support | |||
[RFC8138]. | [RFC8138]. | |||
+-+ ... -+-+ ... +-+- ... -+-+ ... -+-+-+ ... +-+-+ ... -+ ... +-... | +-+ ... -+-+ ... +-+- ... -+-+ ... -+-+-+ ... +-+-+ ... -+ ... +-... | |||
|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 | |||
+-+ ... -+-+ ... +-+- ... -+-+ ... -+-+-+ ... +-+-+ ... -+ ... +-... | +-+ ... -+-+ ... +-+- ... -+-+ ... -+-+-+ ... +-+-+ ... -+ ... +-... | |||
<-4 bytes-> <- RFC 6282 -> | <-4 bytes-> <- RFC 6282 -> | |||
<- No RPL artifact ... | <- No RPL artifact ... | |||
skipping to change at line 1916 ¶ | skipping to change at line 1917 ¶ | |||
The difference from the example presented in Figure 19 of [RFC8138] | The difference from the example presented in Figure 19 of [RFC8138] | |||
is the addition of an SRH-6LoRH before the RPI-6LoRH to transport the | is the addition of an SRH-6LoRH before the RPI-6LoRH to transport the | |||
compressed address of the 6LR as the destination address of the outer | compressed address of the 6LR as the destination address of the outer | |||
IPv6 header. In Figure 19 of [RFC8138], the destination IP of the | IPv6 header. In Figure 19 of [RFC8138], the destination IP of the | |||
outer header was elided and was implicitly the same address as the | outer header was elided and was implicitly the same address as the | |||
destination of the inner header. Type 1 was arbitrarily chosen, and | destination of the inner header. Type 1 was arbitrarily chosen, and | |||
the size of 0 denotes a single address in the SRH. | the size of 0 denotes a single address in the SRH. | |||
In Figure 13, the source of the IPv6-in-IPv6 encapsulation is the | In Figure 13, the source of the IPv6-in-IPv6 encapsulation is the | |||
Root, so it is elided in the IPv6-in-IPv6 6LoRH. The destination is | root, so it is elided in the IPv6-in-IPv6 6LoRH. The destination is | |||
the parent 6LR of the destination of the encapsulated packet, so it | the parent 6LR of the destination of the encapsulated packet, so it | |||
cannot be elided. If the DODAG is operated in Storing mode, it is | cannot be elided. If the DODAG is operated in Storing mode, it is | |||
the single entry in the SRH-6LoRH and the SRH-6LoRH Size is encoded | the single entry in the SRH-6LoRH and the SRH-6LoRH Size is encoded | |||
as 0. The SRH-6LoRH is the first 6LoRH in the chain. In this | as 0. The SRH-6LoRH is the first 6LoRH in the chain. In this | |||
particular example, the 6LR address can be compressed to 2 bytes, so | particular example, the 6LR address can be compressed to 2 bytes, so | |||
a Type of 1 is used. The result is that the total length of the SRH- | a Type of 1 is used. The result is that the total length of the SRH- | |||
6LoRH is 4 bytes. | 6LoRH is 4 bytes. | |||
In Non-Storing mode, the encapsulation from the Root would be similar | In Non-Storing mode, the encapsulation from the root would be similar | |||
to that represented in Figure 13 with possibly more hops in the | to that represented in Figure 13 with possibly more hops in the | |||
SRH-6LoRH and possibly multiple SRH-6LoRHs if the various addresses | SRH-6LoRH and possibly multiple SRH-6LoRHs if the various addresses | |||
in the routing header are not compressed to the same format. Note | in the routing header are not compressed to the same format. Note | |||
that on the last hop to the parent 6LR, the RH3 is consumed and | that on the last hop to the parent 6LR, the RH3 is consumed and | |||
removed from the compressed form, so the use of Non-Storing mode | removed from the compressed form, so the use of Non-Storing mode | |||
vs. Storing mode is indistinguishable from the packet format. | vs. Storing mode is indistinguishable from the packet format. | |||
The SRH-6LoRHs are followed by the RPI-6LoRH and then the IPv6-in- | The SRH-6LoRHs are followed by the RPI-6LoRH and then the IPv6-in- | |||
IPv6 6LoRH. When the IPv6-in-IPv6 6LoRH is removed, all the 6LoRH | IPv6 6LoRH. When the IPv6-in-IPv6 6LoRH is removed, all the 6LoRH | |||
Headers that precede it are also removed. The Paging Dispatch | Headers that precede it are also removed. The Paging Dispatch | |||
End of changes. 74 change blocks. | ||||
126 lines changed or deleted | 127 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/ |