rfc9854v1.txt | rfc9854.txt | |||
---|---|---|---|---|
Internet Engineering Task Force (IETF) C.E. Perkins | Internet Engineering Task Force (IETF) C.E. Perkins | |||
Request for Comments: 9854 Blue Meadow Networks | Request for Comments: 9854 Blue Meadow Networks | |||
Category: Standards Track S.V.R. Anand | Category: Standards Track S.V.R. Anand | |||
ISSN: 2070-1721 Indian Institute of Science | ISSN: 2070-1721 Indian Institute of Science | |||
S. Anamalamudi | S. Anamalamudi | |||
SRM University-AP | SRM University-AP | |||
B. Liu | B. Liu | |||
Huawei Technologies | Huawei Technologies | |||
August 2025 | September 2025 | |||
Supporting Asymmetric Links in Low-Power Networks: AODV-RPL | AODV-RPL: The Routing Protocol for Low-Power and Lossy Networks (RPL) | |||
Based on Ad Hoc On-Demand Distance Vector (AODV) Routing | ||||
Abstract | Abstract | |||
Route discovery for symmetric and asymmetric Peer-to-Peer (P2P) | Route discovery for symmetric and asymmetric Peer-to-Peer (P2P) | |||
traffic flows is a desirable feature in Low-Power and Lossy Networks | traffic flows is a desirable feature in Low-Power and Lossy Networks | |||
(LLNs). For that purpose, this document specifies a reactive P2P | (LLNs). For that purpose, this document specifies AODV-RPL -- the | |||
route discovery mechanism for both hop-by-hop routes and source | Routing Protocol for Low-Power and Lossy Networks (RPL) based on Ad | |||
routing: Ad Hoc On-demand Distance Vector Routing (AODV) based RPL | hoc On-demand Distance Vector (AODV) routing. AODV-RPL is a reactive | |||
protocol (AODV-RPL). Paired instances are used to construct | P2P route discovery mechanism for both hop-by-hop routes and source | |||
directional paths for cases where there are asymmetric links between | routing. Paired instances are used to construct directional paths | |||
source and target nodes. | for cases where there are asymmetric links between source and target | |||
nodes. | ||||
Status of This Memo | Status of This Memo | |||
This is an Internet Standards Track document. | This is an Internet Standards Track document. | |||
This document is a product of the Internet Engineering Task Force | This document is a product of the Internet Engineering Task Force | |||
(IETF). It represents the consensus of the IETF community. It has | (IETF). It represents the consensus of the IETF community. It has | |||
received public review and has been approved for publication by the | received public review and has been approved for publication by the | |||
Internet Engineering Steering Group (IESG). Further information on | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | Internet Standards is available in Section 2 of RFC 7841. | |||
skipping to change at line 65 ¶ | skipping to change at line 67 ¶ | |||
1. Introduction | 1. Introduction | |||
2. Terminology | 2. Terminology | |||
3. Overview of AODV-RPL | 3. Overview of AODV-RPL | |||
4. AODV-RPL DIO Options | 4. AODV-RPL DIO Options | |||
4.1. AODV-RPL RREQ Option | 4.1. AODV-RPL RREQ Option | |||
4.2. AODV-RPL RREP Option | 4.2. AODV-RPL RREP Option | |||
4.3. AODV-RPL Target Option | 4.3. AODV-RPL Target Option | |||
5. Symmetric and Asymmetric Routes | 5. Symmetric and Asymmetric Routes | |||
6. AODV-RPL Operation | 6. AODV-RPL Operation | |||
6.1. Route Request Generation | 6.1. Generating RREQ | |||
6.2. Receiving and Forwarding RREQ Messages | 6.2. Receiving and Forwarding RREQ Messages | |||
6.2.1. Step 1: RREQ Reception and Evaluation | 6.2.1. Step 1: RREQ Reception and Evaluation | |||
6.2.2. Step 2: TargNode and Intermediate Router Determination | 6.2.2. Step 2: TargNode and Intermediate Router Determination | |||
6.2.3. Step 3: Intermediate Router RREQ Processing | 6.2.3. Step 3: Intermediate Router RREQ Processing | |||
6.2.4. Step 4: Symmetric Route Processing at an Intermediate | 6.2.4. Step 4: Symmetric Route Processing at an Intermediate | |||
Router | Router | |||
6.2.5. Step 5: RREQ Propagation at an Intermediate Router | 6.2.5. Step 5: RREQ Propagation at an Intermediate Router | |||
6.2.6. Step 6: RREQ Reception at TargNode | 6.2.6. Step 6: RREQ Reception at TargNode | |||
6.3. Generating Route Reply (RREP) at TargNode | 6.3. Generating RREP at TargNode | |||
6.3.1. RREP-DIO for Symmetric Route | 6.3.1. RREP-DIO for Symmetric Route | |||
6.3.2. RREP-DIO for Asymmetric Route | 6.3.2. RREP-DIO for Asymmetric Route | |||
6.3.3. RPLInstanceID Pairing | 6.3.3. RPLInstanceID Pairing | |||
6.4. Receiving and Forwarding Route Reply | 6.4. Receiving and Forwarding RREP | |||
6.4.1. Step 1: Receiving and Evaluation | 6.4.1. Step 1: Receiving and Evaluation | |||
6.4.2. Step 2: OrigNode or Intermediate Router | 6.4.2. Step 2: OrigNode or Intermediate Router | |||
6.4.3. Step 3: Build Route to TargNode | 6.4.3. Step 3: Build Route to TargNode | |||
6.4.4. Step 4: RREP Propagation | 6.4.4. Step 4: RREP Propagation | |||
7. Gratuitous RREP | 7. Gratuitous RREP | |||
8. Operation of Trickle Timer | 8. Operation of Trickle Timer | |||
9. IANA Considerations | 9. IANA Considerations | |||
10. Security Considerations | 10. Security Considerations | |||
11. References | 11. References | |||
11.1. Normative References | 11.1. Normative References | |||
skipping to change at line 134 ¶ | skipping to change at line 136 ¶ | |||
is desirable to discover shorter routes, especially when it is | is desirable to discover shorter routes, especially when it is | |||
desired to avoid directing additional traffic through a root or | desired to avoid directing additional traffic through a root or | |||
gateway node of the network. It may happen that some routes need to | gateway node of the network. It may happen that some routes need to | |||
be established proactively when known beforehand and when AODV-RPL's | be established proactively when known beforehand and when AODV-RPL's | |||
route discovery process introduces unwanted delay when the | route discovery process introduces unwanted delay when the | |||
application is launched. | application is launched. | |||
AODV terminology has been adapted for use with AODV-RPL messages, | AODV terminology has been adapted for use with AODV-RPL messages, | |||
namely "RREQ" for "Route Request", and "RREP" for "Route Reply". | namely "RREQ" for "Route Request", and "RREP" for "Route Reply". | |||
AODV-RPL currently omits some features compared to AODV -- in | AODV-RPL currently omits some features compared to AODV -- in | |||
particular, flagging route errors, "blacklisting" unidirectional | particular, flagging route errors, blocking the use of unidirectional | |||
links [RFC3561], multihoming, and handling unnumbered interfaces. | links [RFC3561], multihoming, and handling unnumbered interfaces. | |||
AODV-RPL reuses and extends the core RPL functionality to support | AODV-RPL reuses and extends the core RPL functionality to support | |||
routes with bidirectional asymmetric links. It retains RPL's DODAG | routes with bidirectional asymmetric links. It retains RPL's DODAG | |||
formation, RPL Instance and the associated Objective Function | formation, RPL Instance and the associated Objective Function (OF) | |||
(defined in [RFC6551]), Trickle timers, and support for storing and | (defined in [RFC6551]), Trickle timers, and support for storing and | |||
non-storing modes. AODV-RPL adds the basic messages RREQ and RREP as | non-storing modes. AODV-RPL adds the basic messages RREQ and RREP as | |||
part of the RPL DODAG Information Object (DIO) control message, which | part of the RPL DODAG Information Object (DIO) control message, which | |||
go in separate (paired) RPL instances. AODV-RPL does not utilize the | go in separate (paired) RPL Instances. AODV-RPL does not utilize the | |||
Destination Advertisement Object (DAO) control message of RPL. AODV- | Destination Advertisement Object (DAO) control message of RPL. AODV- | |||
RPL uses the "P2P Route Discovery Mode of Operation" (MOP == 4) with | RPL uses the "P2P Route Discovery Mode of Operation" (MOP == 4) with | |||
three new options for the DIO message, dedicated to discovering P2P | three new options for the DIO message, dedicated to discovering P2P | |||
routes. These P2P routes may differ from routes discoverable by | routes. These P2P routes may differ from routes discoverable by RPL | |||
native RPL. Since AODV-RPL uses newly defined options and a newly | [RFC6550]. Since AODV-RPL uses newly defined options and a newly | |||
allocated multicast group (see Section 9), there is no conflict with | allocated multicast group (see Section 9), there is no conflict with | |||
P2P-RPL [RFC6997], a previous document using the same MOP. AODV-RPL | P2P-RPL [RFC6997], a previous document using the same MOP. AODV-RPL | |||
can be operated whether or not P2P-RPL or native RPL is running | can be operated whether or not P2P-RPL or RPL [RFC6550] is also | |||
otherwise. AODV-RPL could be used for networks in which routes are | running. AODV-RPL could be used for networks in which routes are | |||
needed with Objective Functions that cannot be satisfied by routes | needed with OFs that cannot be satisfied by routes that are | |||
that are constrained to traverse the root of the network or other | constrained to traverse the root of the network or other common | |||
common ancestors. P2P routes often require fewer hops and therefore | ancestors. P2P routes often require fewer hops and therefore consume | |||
consume less resources than routes that traverse the root or other | less resources than routes that traverse the root or other common | |||
common ancestors. Similar in cost to base RPL [RFC6550], the cost | ancestors. Similar in cost to base RPL [RFC6550], the cost will | |||
will depend on many factors such as the proximity of the OrigNode and | depend on many factors such as the proximity of the OrigNode and | |||
TargNodes and distribution of symmetric/asymmetric P2P links. | TargNodes and distribution of symmetric/asymmetric P2P links. | |||
Experience with AODV [aodv-tot] suggests that AODV-RPL will often | Experience with AODV [aodv-tot] suggests that AODV-RPL will often | |||
find routes with improved rank compared to routes constrained to | find routes with improved Rank compared to routes constrained to | |||
traverse a common ancestor of the source and destination nodes. | traverse a common ancestor of the source and destination nodes. | |||
2. Terminology | 2. Terminology | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
skipping to change at line 183 ¶ | skipping to change at line 185 ¶ | |||
Rank, DODAG, and DODAGID, as defined in RPL [RFC6550]. | Rank, DODAG, and DODAGID, as defined in RPL [RFC6550]. | |||
This document also uses the following terms: | This document also uses the following terms: | |||
AODV | AODV | |||
Ad hoc On-Demand Distance Vector [RFC3561]. | Ad hoc On-Demand Distance Vector [RFC3561]. | |||
ART option | ART option | |||
The AODV-RPL Target option defined in this document. | The AODV-RPL Target option defined in this document. | |||
Asymmetric Route | Asymmetric route | |||
The route from the OrigNode to the TargNode can traverse different | The route from the OrigNode to the TargNode can traverse different | |||
nodes than the route from the TargNode to the OrigNode. An | nodes than the route from the TargNode to the OrigNode. An | |||
asymmetric route may result from the asymmetry of links, such that | asymmetric route may result from the asymmetry of links, such that | |||
only one direction of the series of links satisfies the Objective | only one direction of the series of links satisfies the OF during | |||
Function during route discovery. | route discovery. | |||
Bidirectional Asymmetric Link | Bidirectional asymmetric link | |||
A link that can be used in both directions but with different link | A link that can be used in both directions but with different link | |||
characteristics. | characteristics. | |||
DIO | DIO | |||
DODAG Information Object (as defined in [RFC6550]). | DODAG Information Object (as defined in [RFC6550]). | |||
DODAG RREQ-Instance (or simply RREQ-Instance) | DODAG RREQ-Instance (or simply RREQ-Instance) | |||
An RPL Instance built using the DIO with RREQ option; used for | An RPL Instance built using the DIO with RREQ option; used for | |||
transmission of control messages from OrigNode to TargNode, thus | transmission of control messages from OrigNode to TargNode, thus | |||
enabling data transmission from TargNode to OrigNode. | enabling data transmission from TargNode to OrigNode. | |||
DODAG RREP-Instance (or simply RREP-Instance) | DODAG RREP-Instance (or simply RREP-Instance) | |||
An RPL Instance built using the DIO with RREP option; used for | An RPL Instance built using the DIO with RREP option; used for | |||
transmission of control messages from TargNode to OrigNode, thus | transmission of control messages from TargNode to OrigNode, thus | |||
enabling data transmission from OrigNode to TargNode. | enabling data transmission from OrigNode to TargNode. | |||
Downward Direction | Downward direction | |||
The direction from the OrigNode to the TargNode. | The direction from the OrigNode to the TargNode. | |||
Downward Route | Downward route | |||
A route in the downward direction. | A route in the downward direction. | |||
Hop-by-hop route | Hop-by-hop route | |||
A route for which each router along the routing path stores | A route for which each router along the routing path stores | |||
routing information about the next hop. A hop-by-hop route is | routing information about the next hop. A hop-by-hop route is | |||
created using RPL's "storing mode". | created using RPL's "storing mode". | |||
OF | OF | |||
Objective Function (as defined in [RFC6550]). | Objective Function (as defined in [RFC6550]). | |||
skipping to change at line 240 ¶ | skipping to change at line 242 ¶ | |||
Peer-to-Peer (in other words, not constrained a priori to traverse | Peer-to-Peer (in other words, not constrained a priori to traverse | |||
a common ancestor). | a common ancestor). | |||
REJOIN_REENABLE | REJOIN_REENABLE | |||
The duration during which a node is prohibited from joining a | The duration during which a node is prohibited from joining a | |||
DODAG with a particular RREQ-InstanceID, after it has left a DODAG | DODAG with a particular RREQ-InstanceID, after it has left a DODAG | |||
with the same RREQ-InstanceID. The default value of | with the same RREQ-InstanceID. The default value of | |||
REJOIN_REENABLE is 15 minutes. | REJOIN_REENABLE is 15 minutes. | |||
RREQ | RREQ | |||
A RREQ-DIO message. | Route Request. | |||
RREQ-DIO message | RREQ-DIO message | |||
A DIO message containing the RREQ option. The RPLInstanceID in | A DIO message containing the RREQ option. The RPLInstanceID in | |||
RREQ-DIO is assigned locally by the OrigNode. The RREQ-DIO | RREQ-DIO is assigned locally by the OrigNode. The RREQ-DIO | |||
message has a secure variant as noted in [RFC6550]. | message has a secure variant as noted in [RFC6550]. | |||
RREQ-InstanceID | RREQ-InstanceID | |||
The RPLInstanceID for the RREQ-Instance. The RREQ-InstanceID is | The RPLInstanceID for the RREQ-Instance. The RREQ-InstanceID is | |||
formed as the ordered pair (Orig_RPLInstanceID, OrigNode-IPaddr), | formed as the ordered pair (Orig_RPLInstanceID, OrigNode-IPaddr), | |||
where Orig_RPLInstanceID is the local RPLInstanceID allocated by | where Orig_RPLInstanceID is the local RPLInstanceID allocated by | |||
OrigNode and OrigNode-IPaddr is an IP address of OrigNode. The | OrigNode and OrigNode-IPaddr is an IP address of OrigNode. The | |||
RREQ-InstanceID uniquely identifies the RREQ-Instance. | RREQ-InstanceID uniquely identifies the RREQ-Instance. | |||
RREP | RREP | |||
A RREP-DIO message. | Route Reply. | |||
RREP-DIO message | RREP-DIO message | |||
A DIO message containing the RREP option. OrigNode pairs the | A DIO message containing the RREP option. OrigNode pairs the | |||
RPLInstanceID in RREP-DIO to the one in the associated RREQ-DIO | RPLInstanceID in RREP-DIO to the one in the associated RREQ-DIO | |||
message (i.e., the RREQ-InstanceID) as described in Section 6.3.2. | message (i.e., the RREQ-InstanceID) as described in Section 6.3.2. | |||
The RREP-DIO message has a secure variant as noted in [RFC6550]. | The RREP-DIO message has a secure variant as noted in [RFC6550]. | |||
RREP-InstanceID | RREP-InstanceID | |||
The RPLInstanceID for the RREP-Instance. The RREP-InstanceID is | The RPLInstanceID for the RREP-Instance. The RREP-InstanceID is | |||
formed as the ordered pair (Targ_RPLInstanceID, TargNode-IPaddr), | formed as the ordered pair (Targ_RPLInstanceID, TargNode-IPaddr), | |||
skipping to change at line 286 ¶ | skipping to change at line 288 ¶ | |||
[RFC6550]. | [RFC6550]. | |||
Symmetric route | Symmetric route | |||
The upstream and downstream routes traverse the same routers and | The upstream and downstream routes traverse the same routers and | |||
over the same links. | over the same links. | |||
TargNode | TargNode | |||
The IPv6 router (target node) for which OrigNode requires a route | The IPv6 router (target node) for which OrigNode requires a route | |||
and initiates route discovery within the LLN. | and initiates route discovery within the LLN. | |||
Upward Direction | Upward direction | |||
The direction from the TargNode to the OrigNode. | The direction from the TargNode to the OrigNode. | |||
Upward Route | Upward route | |||
A route in the upward direction. | A route in the upward direction. | |||
3. Overview of AODV-RPL | 3. Overview of AODV-RPL | |||
With AODV-RPL, routes from OrigNode to TargNode within the LLN do not | With AODV-RPL, routes from OrigNode to TargNode within the LLN do not | |||
become established until they are needed. The route discovery | become established until they are needed. The route discovery | |||
mechanism in AODV-RPL is invoked when OrigNode has data for delivery | mechanism in AODV-RPL is invoked when OrigNode has data for delivery | |||
to a TargNode, but existing routes do not satisfy the application's | to a TargNode, but existing routes do not satisfy the application's | |||
requirements. For this reason, AODV-RPL is considered to be an | requirements. For this reason, AODV-RPL is considered to be an | |||
example of an "on-demand" routing protocol. Such protocols are also | example of an "on-demand" routing protocol. Such protocols are also | |||
skipping to change at line 325 ¶ | skipping to change at line 327 ¶ | |||
(Instances) are constructed during route formation between the | (Instances) are constructed during route formation between the | |||
OrigNode and TargNode. The RREQ-Instance is formed by route control | OrigNode and TargNode. The RREQ-Instance is formed by route control | |||
messages from OrigNode to TargNode, whereas the RREP-Instance is | messages from OrigNode to TargNode, whereas the RREP-Instance is | |||
formed by route control messages from TargNode to OrigNode. The | formed by route control messages from TargNode to OrigNode. The | |||
route discovered in the RREQ-Instance is used for transmitting data | route discovered in the RREQ-Instance is used for transmitting data | |||
from TargNode to OrigNode, and the route discovered in RREP-Instance | from TargNode to OrigNode, and the route discovered in RREP-Instance | |||
is used for transmitting data from OrigNode to TargNode. | is used for transmitting data from OrigNode to TargNode. | |||
Intermediate routers join the DODAGs based on the Rank [RFC6550] as | Intermediate routers join the DODAGs based on the Rank [RFC6550] as | |||
calculated from the DIO messages. AODV-RPL uses the same notion of | calculated from the DIO messages. AODV-RPL uses the same notion of | |||
rank as defined in [RFC6550]: | Rank as defined in [RFC6550]: | |||
| The Rank is the expression of a relative position within a DODAG | | The Rank is the expression of a relative position within a DODAG | |||
| Version with regard to neighbors, and it is not necessarily a good | | Version with regard to neighbors, and it is not necessarily a good | |||
| indication or a proper expression of a distance or a path cost to | | indication or a proper expression of a distance or a path cost to | |||
| the root. | | the root. | |||
The Rank measurements provided in AODV messages do not indicate a | The Rank measurements provided in AODV messages do not indicate a | |||
distance or a path cost to the root. | distance or a path cost to the root. | |||
Henceforth in this document, "RREQ-DIO message" means the DIO message | Henceforth in this document, "RREQ-DIO message" means the DIO message | |||
skipping to change at line 367 ¶ | skipping to change at line 369 ¶ | |||
with D == 0 as above. | with D == 0 as above. | |||
4. AODV-RPL DIO Options | 4. AODV-RPL DIO Options | |||
4.1. AODV-RPL RREQ Option | 4.1. AODV-RPL RREQ Option | |||
OrigNode selects one of its IPv6 addresses and sets it in the DODAGID | OrigNode selects one of its IPv6 addresses and sets it in the DODAGID | |||
field of the RREQ-DIO message. The address scope of the selected | field of the RREQ-DIO message. The address scope of the selected | |||
address MUST encompass the domain where the route is built (e.g, not | address MUST encompass the domain where the route is built (e.g, not | |||
link-local); otherwise, the route discovery will fail. Exactly one | link-local); otherwise, the route discovery will fail. Exactly one | |||
RREQ option MUST be present in a RREQ-DIO message; otherwise, the | RREQ option MUST be present in an RREQ-DIO message; otherwise, the | |||
message MUST be dropped. | message MUST be dropped. | |||
0 1 2 3 | 0 1 2 3 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Option Type | Option Length |S|H|X| Compr | L | RankLimit | | | Option Type | Option Length |S|H|X| Compr | L | RankLimit | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Orig SeqNo | | | | Orig SeqNo | | | |||
+-+-+-+-+-+-+-+-+ | | +-+-+-+-+-+-+-+-+ | | |||
| | | | | | |||
skipping to change at line 392 ¶ | skipping to change at line 394 ¶ | |||
Figure 1: Format for AODV-RPL RREQ Option | Figure 1: Format for AODV-RPL RREQ Option | |||
OrigNode supplies the following information in the RREQ option: | OrigNode supplies the following information in the RREQ option: | |||
Option Type | Option Type | |||
8-bit unsigned integer specifying the type of the option (0x0B). | 8-bit unsigned integer specifying the type of the option (0x0B). | |||
Option Length | Option Length | |||
8-bit unsigned integer specifying the length of the option in | 8-bit unsigned integer specifying the length of the option in | |||
octets, excluding the Type and Length fields. It is variable due | octets, excluding the Option Type and Option Length fields. It is | |||
to the presence of the address vector and the number of octets | variable due to the presence of the Address Vector and the number | |||
elided according to the Compr value. | of octets elided according to the Compr value. | |||
S | S | |||
Symmetric bit indicating a symmetric route from the OrigNode to | Symmetric bit indicating a symmetric route from the OrigNode to | |||
the router transmitting this RREQ-DIO. See Section 5. | the router transmitting this RREQ-DIO. See Section 5. | |||
H | H | |||
Set to one for a hop-by-hop route. Set to zero for a source | Set to one for a hop-by-hop route. Set to zero for a source | |||
route. This flag controls both the downstream route and upstream | route. This flag controls both the downstream route and upstream | |||
route. | route. | |||
skipping to change at line 442 ¶ | skipping to change at line 444 ¶ | |||
* 0x02: 64 seconds | * 0x02: 64 seconds | |||
* 0x03: 256 seconds | * 0x03: 256 seconds | |||
RankLimit | RankLimit | |||
8-bit unsigned integer specifying the upper limit on the integer | 8-bit unsigned integer specifying the upper limit on the integer | |||
portion of the Rank (calculated using the DAGRank() macro defined | portion of the Rank (calculated using the DAGRank() macro defined | |||
in [RFC6550]). A value of 0 in this field indicates the limit is | in [RFC6550]). A value of 0 in this field indicates the limit is | |||
infinity. | infinity. | |||
Orig SeqNo | Orig SeqNo | |||
8-bit unsigned integer specifying the sequence Number of OrigNode. | 8-bit unsigned integer specifying the Sequence Number of OrigNode. | |||
See Section 6.1. | See Section 6.1. | |||
Address Vector | Address Vector | |||
A vector of IPv6 addresses representing the route that the RREQ- | A vector of IPv6 addresses representing the route that the RREQ- | |||
DIO has passed. It is only present when the H bit is set to 0. | DIO has passed. It is only present when the H bit is set to 0. | |||
The prefix of each address is elided according to the Compr field. | The prefix of each address is elided according to the Compr field. | |||
TargNode can join the RREQ-Instance at a Rank whose integer portion | TargNode can join the RREQ-Instance at a Rank whose integer portion | |||
is less than or equal to the RankLimit. Any other node MUST NOT join | is less than or equal to the RankLimit. Any other node MUST NOT join | |||
a RREQ-Instance if its own Rank would be equal to or higher than the | an RREQ-Instance if its own Rank would be equal to or higher than the | |||
RankLimit. A router MUST discard a received RREQ if the integer part | RankLimit. A router MUST discard a received RREQ if the integer part | |||
of the advertised Rank equals or exceeds the RankLimit. | of the advertised Rank equals or exceeds the RankLimit. | |||
4.2. AODV-RPL RREP Option | 4.2. AODV-RPL RREP Option | |||
TargNode sets one of its IPv6 addresses in the DODAGID field of the | TargNode sets one of its IPv6 addresses in the DODAGID field of the | |||
RREP-DIO message. The address scope of the selected address must | RREP-DIO message. The address scope of the selected address must | |||
encompass the domain where the route is built (e.g, not link-local). | encompass the domain where the route is built (e.g, not link-local). | |||
Exactly one RREP option MUST be present in a RREP-DIO message, | Exactly one RREP option MUST be present in an RREP-DIO message, | |||
otherwise, the message MUST be dropped. TargNode supplies the | otherwise, the message MUST be dropped. TargNode supplies the | |||
following information in the RREP option: | following information in the RREP option: | |||
0 1 2 3 | 0 1 2 3 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Option Type | Option Length |G|H|X| Compr | L | RankLimit | | | Option Type | Option Length |G|H|X| Compr | L | RankLimit | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Delta |X X| | | | Delta |X X| | | |||
+-+-+-+-+-+-+-+-+ | | +-+-+-+-+-+-+-+-+ | | |||
skipping to change at line 486 ¶ | skipping to change at line 488 ¶ | |||
. . | . . | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ . . . | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ . . . | |||
Figure 2: Format for AODV-RPL RREP Option | Figure 2: Format for AODV-RPL RREP Option | |||
Option Type | Option Type | |||
8-bit unsigned integer specifying the type of the option (0x0C). | 8-bit unsigned integer specifying the type of the option (0x0C). | |||
Option Length | Option Length | |||
8-bit unsigned integer specifying the length of the option in | 8-bit unsigned integer specifying the length of the option in | |||
octets, excluding the Type and Length fields. It is variable due | octets, excluding the Option Type and Option Length fields. It is | |||
to the presence of the address vector and the number of octets | variable due to the presence of the Address Vector and the number | |||
elided according to the Compr value. | of octets elided according to the Compr value. | |||
G | G | |||
Gratuitous RREP (see Section 7). | Gratuitous RREP (see Section 7). | |||
H | H | |||
The H bit in the RREP option MUST be set to be the same as the H | The H bit in the RREP option MUST be set to be the same as the H | |||
bit in the RREQ option. It requests either source routing (H=0) | bit in the RREQ option. It requests either source routing (H=0) | |||
or hop-by-hop (H=1) for the downstream route. | or hop-by-hop (H=1) for the downstream route. | |||
X | X | |||
skipping to change at line 573 ¶ | skipping to change at line 575 ¶ | |||
. . | . . | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ . . . | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ . . . | |||
Figure 3: ART Option Format for AODV-RPL | Figure 3: ART Option Format for AODV-RPL | |||
Option Type | Option Type | |||
8-bit unsigned integer specifying the type of the option (0x0D). | 8-bit unsigned integer specifying the type of the option (0x0D). | |||
Option Length | Option Length | |||
8-bit unsigned integer specifying the length of the option in | 8-bit unsigned integer specifying the length of the option in | |||
octets, excluding the Type and Length fields. | octets, excluding the Option Type and Option Length fields. | |||
Dest SeqNo | Dest SeqNo | |||
8-bit unsigned integer. In RREQ-DIO, if nonzero, it is the | 8-bit unsigned integer. In RREQ-DIO, if nonzero, it is the | |||
Sequence Number for the last route that OrigNode stored to the | Sequence Number for the last route that OrigNode stored to the | |||
TargNode for which a route is desired. In RREP-DIO, it is the | TargNode for which a route is desired. In RREP-DIO, it is the | |||
destination sequence number associated to the route. Zero is used | Destination Sequence Number associated to the route. Zero is used | |||
if there is no known information about the sequence number of | if there is no known information about the Sequence Number of | |||
TargNode and not used otherwise. | TargNode and not used otherwise. | |||
X | X | |||
1-bit Reserved field. This field MUST be initialized to zero by | 1-bit Reserved field. This field MUST be initialized to zero by | |||
the sender and MUST be ignored by the receiver. | the sender and MUST be ignored by the receiver. | |||
Prefix Length | Prefix Length | |||
7-bit unsigned integer. The Prefix Length field contains the | 7-bit unsigned integer. The Prefix Length field contains the | |||
number of valid leading bits in the prefix. If Prefix Length is | number of valid leading bits in the prefix. If Prefix Length is | |||
0, then the value in the Target Prefix / Address field represents | 0, then the value in the Target Prefix / Address field represents | |||
skipping to change at line 641 ¶ | skipping to change at line 643 ¶ | |||
/ \ / \ / \ / \ | / \ / \ / \ / \ | |||
/ \ / \ / \ / \ | / \ / \ / \ / \ | |||
/ \ / \ / \ / \ | / \ / \ / \ / \ | |||
R ----- R ----------- R ----- R ----- R ----- R ---- R----- R | R ----- R ----------- R ----- R ----- R ----- R ---- R----- R | |||
>---- RREQ-Instance (Control: O-->T; Data: T-->O) -------> | >---- RREQ-Instance (Control: O-->T; Data: T-->O) -------> | |||
<---- RREP-Instance (Control: T-->O; Data: O-->T) -------< | <---- RREP-Instance (Control: T-->O; Data: O-->T) -------< | |||
Figure 4: AODV-RPL with Symmetric Instances | Figure 4: AODV-RPL with Symmetric Instances | |||
Upon receiving a RREQ-DIO with the S bit set to 1, a node determines | Upon receiving an RREQ-DIO with the S bit set to 1, a node determines | |||
whether the link over which it was received can be used | whether the link over which it was received can be used | |||
symmetrically, i.e., both directions meet the requirements of data | symmetrically, i.e., both directions meet the requirements of data | |||
transmission. If the RREQ-DIO arrives over an interface that is not | transmission. If the RREQ-DIO arrives over an interface that is not | |||
known to be symmetric or is known to be asymmetric, the S bit is set | known to be symmetric or is known to be asymmetric, the S bit is set | |||
to 0. If the S bit arrives already set to be 0, then it is set to be | to 0. If the S bit arrives already set to be 0, then it is set to be | |||
0 when the RREQ-DIO is propagated (Figure 5). For an asymmetric | 0 when the RREQ-DIO is propagated (Figure 5). For an asymmetric | |||
route, there is at least one hop that doesn't satisfy the Objective | route, there is at least one hop that doesn't satisfy the OF. Based | |||
Function. Based on the S bit received in RREQ-DIO, TargNode T | on the S bit received in RREQ-DIO, TargNode T determines whether or | |||
determines whether or not the route is symmetric before transmitting | not the route is symmetric before transmitting the RREP-DIO message | |||
the RREP-DIO message upstream towards the OrigNode O. | upstream towards the OrigNode O. | |||
It is beyond the scope of this document to specify the criteria used | It is beyond the scope of this document to specify the criteria used | |||
when determining whether or not each link is symmetric. As an | when determining whether or not each link is symmetric. As an | |||
example, intermediate routers can use local information (e.g., bit | example, intermediate routers can use local information (e.g., bit | |||
rate, bandwidth, number of cells used in 6tisch [RFC9030]), a priori | rate, bandwidth, number of cells used in 6TiSCH [RFC9030]), a priori | |||
knowledge (e.g., link quality according to previous communication), | knowledge (e.g., link quality according to previous communication), | |||
or averaging techniques as appropriate to the application. Other | or averaging techniques as appropriate to the application. Other | |||
link metric information can be acquired before AODV-RPL operation, by | link metric information can be acquired before AODV-RPL operation, by | |||
executing evaluation procedures; for instance, test traffic can be | executing evaluation procedures; for instance, test traffic can be | |||
generated between nodes of the deployed network. During AODV-RPL | generated between nodes of the deployed network. During AODV-RPL | |||
operation, Operations, Administration, and Maintenance (OAM) | operation, Operations, Administration, and Maintenance (OAM) | |||
techniques for evaluating link state (see [RFC7548], [RFC7276], and | techniques for evaluating link state (see [RFC7548], [RFC7276], and | |||
[co-ioam]) MAY be used (at regular intervals appropriate for the | [co-ioam]) MAY be used (at regular intervals appropriate for the | |||
LLN). The evaluation procedures are out of scope for AODV-RPL. For | LLN). The evaluation procedures are out of scope for AODV-RPL. For | |||
further information on this topic, see [Link_Asymmetry], | further information on this topic, see [Link_Asymmetry], | |||
skipping to change at line 709 ¶ | skipping to change at line 711 ¶ | |||
bit value that the RREQ-DIO should carry using link asymmetry | bit value that the RREQ-DIO should carry using link asymmetry | |||
detection methods as discussed earlier in this section. In many | detection methods as discussed earlier in this section. In many | |||
cases, the intermediate router has already made the link asymmetry | cases, the intermediate router has already made the link asymmetry | |||
decision by the time RREQ-DIO arrives. | decision by the time RREQ-DIO arrives. | |||
See Appendix B for examples illustrating RREQ and RREP transmissions | See Appendix B for examples illustrating RREQ and RREP transmissions | |||
in some networks with symmetric and asymmetric links. | in some networks with symmetric and asymmetric links. | |||
6. AODV-RPL Operation | 6. AODV-RPL Operation | |||
6.1. Route Request Generation | 6.1. Generating RREQ | |||
The route discovery process is initiated when an application at the | The route discovery process is initiated when an application at the | |||
OrigNode has data to be transmitted to the TargNode but does not have | OrigNode has data to be transmitted to the TargNode but does not have | |||
a route that satisfies the Objective Function for the target of the | a route that satisfies the OF for the target of the application's | |||
application's data. In this case, the OrigNode builds a local | data. In this case, the OrigNode builds a local RPL Instance and a | |||
RPLInstance and a DODAG rooted at itself. Then, it transmits a DIO | DODAG rooted at itself. Then, it transmits a DIO message containing | |||
message containing exactly one RREQ option (see Section 4.1) to | exactly one RREQ option (see Section 4.1) to multicast group all- | |||
multicast group all-AODV-RPL-nodes. The RREQ-DIO MUST contain at | AODV-RPL-nodes. The RREQ-DIO MUST contain at least one ART option | |||
least one ART option (see Section 4.3), which indicates the TargNode. | (see Section 4.3), which indicates the TargNode. The S bit in RREQ- | |||
The S bit in RREQ-DIO sent out by the OrigNode is set to 1. | DIO sent out by the OrigNode is set to 1. | |||
Each node maintains a sequence number; the operation is specified in | Each node maintains a Sequence Number; the operation is specified in | |||
Section 7.2 of [RFC6550]. When the OrigNode initiates a route | Section 7.2 of [RFC6550]. When the OrigNode initiates a route | |||
discovery process, it MUST increase its own sequence number to avoid | discovery process, it MUST increase its own Sequence Number to avoid | |||
conflicts with previously established routes. The sequence number is | conflicts with previously established routes. The Sequence Number is | |||
carried in the Orig SeqNo field of the RREQ option. | carried in the Orig SeqNo field of the RREQ option. | |||
The Target Prefix / Address in the ART option can be a unicast IPv6 | The Target Prefix / Address in the ART option can be a unicast IPv6 | |||
address or a prefix. The OrigNode can initiate the route discovery | address or a prefix. The OrigNode can initiate the route discovery | |||
process for multiple targets simultaneously by including multiple ART | process for multiple targets simultaneously by including multiple ART | |||
options. Within a RREQ-DIO, the Objective Function for the routes to | options. Within an RREQ-DIO, the OF for the routes to different | |||
different TargNodes MUST be the same. | TargNodes MUST be the same. | |||
OrigNode can maintain different RPLInstances to discover routes with | OrigNode can maintain different RPL Instances to discover routes with | |||
different requirements to the same targets. Using the RPLInstanceID | different requirements to the same targets. Using the RPLInstanceID | |||
pairing mechanism (see Section 6.3.3), route replies (RREP-DIOs) for | pairing mechanism (see Section 6.3.3), route replies (RREP-DIOs) for | |||
different RPLInstances can be generated. | different RPL Instances can be generated. | |||
The transmission of RREQ-DIO obeys the Trickle timer [RFC6206]. If | The transmission of RREQ-DIO obeys the Trickle timer [RFC6206]. If | |||
the duration specified by the L field has elapsed, the OrigNode MUST | the duration specified by the L field has elapsed, the OrigNode MUST | |||
leave the DODAG and stop sending RREQ-DIOs in the related | leave the DODAG and stop sending RREQ-DIOs in the related RPL | |||
RPLInstance. OrigNode needs to set the L field such that the DODAG | Instance. OrigNode needs to set the L field such that the DODAG will | |||
will not prematurely timeout during data transfer with the TargNode. | not prematurely timeout during data transfer with the TargNode. For | |||
For setting this value, it has to consider factors such as the | setting this value, it has to consider factors such as the Trickle | |||
Trickle timer, TargNode hop distance, network size, link behavior, | timer, TargNode hop distance, network size, link behavior, expected | |||
expected data usage time, and so on. | data usage time, and so on. | |||
6.2. Receiving and Forwarding RREQ Messages | 6.2. Receiving and Forwarding RREQ Messages | |||
6.2.1. Step 1: RREQ Reception and Evaluation | 6.2.1. Step 1: RREQ Reception and Evaluation | |||
When a router X receives a RREQ message over a link from a neighbor | When a router X receives an RREQ message over a link from a neighbor | |||
Y, X first determines whether or not the RREQ is valid. If so, X | Y, X first determines whether or not the RREQ is valid. If valid, X | |||
then determines whether or not it has sufficient resources available | then determines whether or not it has sufficient resources available | |||
to maintain the RREQ-Instance and the value of the S bit needed to | to maintain the RREQ-Instance and the value of the S bit needed to | |||
process an eventual RREP, if the RREP were to be received. If not, | process an eventual RREP, if the RREP were to be received. If not | |||
then X MUST either free up sufficient resources (the means for this | valid, then X MUST either free up sufficient resources (the means for | |||
are beyond the scope of this document) or drop the packet and | this are beyond the scope of this document), or drop the packet and | |||
discontinue processing of the RREQ. Otherwise, X next determines | discontinue processing of the RREQ. Otherwise, X next determines | |||
whether the RREQ advertises a usable route to OrigNode, by checking | whether the RREQ advertises a usable route to OrigNode, by checking | |||
whether the link to Y can be used to transmit packets to OrigNode. | whether the link to Y can be used to transmit packets to OrigNode. | |||
When H=0 in the incoming RREQ, the router MUST drop the RREQ-DIO if | When H=0 in the incoming RREQ, the router MUST drop the RREQ-DIO if | |||
one of its addresses is present in the Address Vector. When H=1 in | one of its addresses is present in the Address Vector. When H=1 in | |||
the incoming RREQ, the router MUST drop the RREQ message if the Orig | the incoming RREQ, the router MUST drop the RREQ message if the Orig | |||
SeqNo field of the RREQ is older than the SeqNo value that X has | SeqNo field of the RREQ is older than the SeqNo value that X has | |||
stored for a route to OrigNode. Otherwise, the router determines | stored for a route to OrigNode. Otherwise, the router determines | |||
whether to propagate the RREQ-DIO. It does this by determining | whether to propagate the RREQ-DIO. It does this by determining | |||
whether or not a route to OrigNode using the upstream direction of | whether or not a route to OrigNode using the upstream direction of | |||
the incoming link satisfies the Objective Function (OF). In order to | the incoming link satisfies the Objective Function (OF). In order to | |||
evaluate the OF, the router first determines the maximum useful rank | evaluate the OF, the router first determines the maximum useful Rank | |||
(MaxUsefulRank). If the router has previously joined the RREQ- | (MaxUsefulRank). If the router has previously joined the RREQ- | |||
Instance associated with the RREQ-DIO, then MaxUsefulRank is set to | Instance associated with the RREQ-DIO, then MaxUsefulRank is set to | |||
be the Rank value that was stored when the router processed the best | be the Rank value that was stored when the router processed the best | |||
previous RREQ for the DODAG with the given RREQ-Instance. Otherwise, | previous RREQ for the DODAG with the given RREQ-Instance. Otherwise, | |||
MaxUsefulRank is set to be RankLimit. If OF cannot be satisfied | MaxUsefulRank is set to be RankLimit. If OF cannot be satisfied | |||
(i.e., the Rank evaluates to a value greater than MaxUsefulRank), the | (i.e., the Rank evaluates to a value greater than MaxUsefulRank), the | |||
RREQ-DIO MUST be dropped, and the following steps are not processed. | RREQ-DIO MUST be dropped, and the following steps are not processed. | |||
Otherwise, the router MUST join the RREQ-Instance and prepare to | Otherwise, the router MUST join the RREQ-Instance and prepare to | |||
propagate the RREQ-DIO, as follows. The upstream neighbor router | propagate the RREQ-DIO, as follows. The upstream neighbor router | |||
that transmitted the received RREQ-DIO is selected as the preferred | that transmitted the received RREQ-DIO is selected as the preferred | |||
parent in the RREQ-Instance. | parent in the RREQ-Instance. | |||
6.2.2. Step 2: TargNode and Intermediate Router Determination | 6.2.2. Step 2: TargNode and Intermediate Router Determination | |||
After determining that a received RREQ provides a usable route to | After determining that a received RREQ provides a usable route to | |||
OrigNode, a router determines whether it is a TargNode, a possible | OrigNode, a router determines whether it is a TargNode, a possible | |||
intermediate router between OrigNode and a TargNode, or both. The | intermediate router between OrigNode and a TargNode, or both. The | |||
router is a TargNode if it finds one of its own addresses in a Target | router is a TargNode if it finds one of its own addresses in a Target | |||
option in the RREQ. After possibly propagating the RREQ according to | option in the RREQ. After possibly propagating the RREQ according to | |||
the procedures in Steps 3, 4, and 5, the TargNode generates a RREP as | the procedures in Steps 3, 4, and 5, the TargNode generates an RREP | |||
specified in Section 6.3. If S=0, the determination of TargNode | as specified in Section 6.3. If S=0, the determination of TargNode | |||
status and determination of a usable route to OrigNode is the same. | status and determination of a usable route to OrigNode is the same. | |||
If the OrigNode tries to reach multiple TargNodes in a single RREQ- | If the OrigNode tries to reach multiple TargNodes in a single RREQ- | |||
Instance, one of the TargNodes can be an intermediate router to other | Instance, one of the TargNodes can be an intermediate router to other | |||
TargNodes. In this case, before transmitting the RREQ-DIO to | TargNodes. In this case, before transmitting the RREQ-DIO to | |||
multicast group all-AODV-RPL-nodes, a TargNode MUST delete the Target | multicast group all-AODV-RPL-nodes, a TargNode MUST delete the Target | |||
option encapsulating its own address, so that downstream routers with | option encapsulating its own address, so that downstream routers with | |||
higher Rank values do not try to create a route to this TargNode. | higher Rank values do not try to create a route to this TargNode. | |||
An intermediate router could receive several RREQ-DIOs from routers | An intermediate router could receive several RREQ-DIOs from routers | |||
skipping to change at line 815 ¶ | skipping to change at line 817 ¶ | |||
record of the targets that have been requested for a given RREQ- | record of the targets that have been requested for a given RREQ- | |||
Instance. An incoming RREQ-DIO message having multiple ART options | Instance. An incoming RREQ-DIO message having multiple ART options | |||
coming from a router with higher Rank than the Rank of the stored | coming from a router with higher Rank than the Rank of the stored | |||
targets is ignored. When transmitting the RREQ-DIO, the intersection | targets is ignored. When transmitting the RREQ-DIO, the intersection | |||
of all received lists MUST be included if it is nonempty after | of all received lists MUST be included if it is nonempty after | |||
TargNode has deleted the Target option encapsulating its own address. | TargNode has deleted the Target option encapsulating its own address. | |||
If the intersection is empty, it means that all the targets have been | If the intersection is empty, it means that all the targets have been | |||
reached, and the router MUST NOT transmit any RREQ-DIO. Otherwise, | reached, and the router MUST NOT transmit any RREQ-DIO. Otherwise, | |||
it proceeds to Section 6.2.3. | it proceeds to Section 6.2.3. | |||
For example, suppose two RREQ-DIOs are received with the same | For example, suppose two RREQ-DIOs are received with the same RPL | |||
RPLInstance and OrigNode. Suppose further that the first RREQ has | Instance and OrigNode. Suppose further that the first RREQ has (T1, | |||
(T1, T2) as the targets, and the second one has (T2, T4) as targets. | T2) as the targets, and the second one has (T2, T4) as targets. | |||
Then, only T2 needs to be included in the generated RREQ-DIO. | Then, only T2 needs to be included in the generated RREQ-DIO. | |||
The reasoning for using the intersection of the lists in the RREQs is | The reasoning for using the intersection of the lists in the RREQs is | |||
as follows. When two or more RREQs are received with the same Orig | as follows. When two or more RREQs are received with the same Orig | |||
SeqNo, they were transmitted by OrigNode with the same destinations | SeqNo, they were transmitted by OrigNode with the same destinations | |||
and OF. When an intermediate node receives two RREQs with the same | and OF. When an intermediate node receives two RREQs with the same | |||
Orig SeqNo but different lists of destinations, that means that some | Orig SeqNo but different lists of destinations, that means that some | |||
intermediate nodes retransmitting the RREQs have already deleted | intermediate nodes retransmitting the RREQs have already deleted | |||
themselves from the list of destinations before they retransmitted | themselves from the list of destinations before they retransmitted | |||
the RREQ. Those deleted nodes are not to be reinserted back into the | the RREQ. Those deleted nodes are not to be reinserted back into the | |||
skipping to change at line 841 ¶ | skipping to change at line 843 ¶ | |||
The intermediate router establishes itself as a viable node for a | The intermediate router establishes itself as a viable node for a | |||
route to OrigNode as follows. If the H bit is set to 1, for a hop- | route to OrigNode as follows. If the H bit is set to 1, for a hop- | |||
by-hop route, then the router MUST build or update its upward route | by-hop route, then the router MUST build or update its upward route | |||
entry towards OrigNode, which includes at least the following items: | entry towards OrigNode, which includes at least the following items: | |||
Source Address, RPLInstanceID, Destination Address, Next Hop, | Source Address, RPLInstanceID, Destination Address, Next Hop, | |||
Lifetime, and Sequence Number. The Destination Address and the | Lifetime, and Sequence Number. The Destination Address and the | |||
RPLInstanceID can be learned from the DODAGID and the RPLInstanceID | RPLInstanceID can be learned from the DODAGID and the RPLInstanceID | |||
of the RREQ-DIO, respectively. The Source Address is the address | of the RREQ-DIO, respectively. The Source Address is the address | |||
used by the router to send data to the Next Hop, i.e., the preferred | used by the router to send data to the Next Hop, i.e., the preferred | |||
parent. The lifetime is set according to DODAG configuration (not | parent. The Lifetime is set according to DODAG configuration (not | |||
the L field) and can be extended when the route is actually used. | the L field) and can be extended when the route is actually used. | |||
The Sequence Number represents the freshness of the route entry; it | The Sequence Number represents the freshness of the route entry; it | |||
is copied from the Orig SeqNo field of the RREQ option. A route | is copied from the Orig SeqNo field of the RREQ option. A route | |||
entry with the same source and destination address and the same | entry with the same source and destination address and the same | |||
RPLInstanceID, but a stale Sequence Number (i.e., incoming sequence | RPLInstanceID, but a stale Sequence Number (i.e., incoming Sequence | |||
number is less than the currently stored Sequence Number of the route | Number is less than the currently stored Sequence Number of the route | |||
entry), MUST be deleted. | entry), MUST be deleted. | |||
6.2.4. Step 4: Symmetric Route Processing at an Intermediate Router | 6.2.4. Step 4: Symmetric Route Processing at an Intermediate Router | |||
If the S bit of the incoming RREQ-DIO is 0, then the route cannot be | If the S bit of the incoming RREQ-DIO is 0, then the route cannot be | |||
symmetric, and the S bit of the RREQ-DIO to be transmitted is set to | symmetric, and the S bit of the RREQ-DIO to be transmitted is set to | |||
0. Otherwise, the router MUST determine whether the downward | 0. Otherwise, the router MUST determine whether the downward | |||
direction (i.e., towards the TargNode) of the incoming link satisfies | direction (i.e., towards the TargNode) of the incoming link satisfies | |||
the OF. If so, the S bit of the RREQ-DIO to be transmitted is set to | the OF. If it does, the S bit of the RREQ-DIO to be transmitted is | |||
1. Otherwise, the S bit of the RREQ-DIO to be transmitted is set to | set to 1. Otherwise, the S bit of the RREQ-DIO to be transmitted is | |||
0. | set to 0. | |||
When a router joins the RREQ-Instance, it also associates within its | When a router joins the RREQ-Instance, it also associates within its | |||
data structure for the RREQ-Instance the information about whether or | data structure for the RREQ-Instance the information about whether or | |||
not the RREQ-DIO to be transmitted has the S bit set to 1. This | not the RREQ-DIO to be transmitted has the S bit set to 1. This | |||
information associated to RREQ-Instance is known as the S bit of the | information associated to RREQ-Instance is known as the S bit of the | |||
RREQ-Instance. It will be used later during the RREP-DIO message | RREQ-Instance. It will be used later during the RREP-DIO message | |||
processing (see Section 6.3.2). | processing (see Section 6.3.2). | |||
Suppose a router has joined the RREQ-Instance, and H=0, and the S bit | Suppose a router has joined the RREQ-Instance, the H bit is set to 0, | |||
of the RREQ-Instance is set to 1. In this case, the router MAY | and the S bit of the RREQ-Instance is set to 1. In this case, the | |||
optionally include the Address Vector of the symmetric route back to | router MAY optionally include the Address Vector of the symmetric | |||
OrigNode as part of the RREQ-Instance data. This is useful if the | route back to OrigNode as part of the RREQ-Instance data. This is | |||
router later receives an RREP-DIO that is paired with the RREQ- | useful if the router later receives an RREP-DIO that is paired with | |||
Instance. If the router does NOT include the Address Vector, then it | the RREQ-Instance. If the router does NOT include the Address | |||
has to rely on multicast for the RREP. The multicast can impose a | Vector, then it has to rely on multicast for the RREP. The multicast | |||
substantial performance penalty. | can impose a substantial performance penalty. | |||
6.2.5. Step 5: RREQ Propagation at an Intermediate Router | 6.2.5. Step 5: RREQ Propagation at an Intermediate Router | |||
If the router is an intermediate router, then it transmits the RREQ- | If the router is an intermediate router, then it transmits the RREQ- | |||
DIO to the multicast group all-AODV-RPL-nodes; if the H bit is set to | DIO to the multicast group all-AODV-RPL-nodes; if the H bit is set to | |||
0, the intermediate router MUST append the address of its interface | 0, the intermediate router MUST append the address of its interface | |||
receiving the RREQ-DIO into the address vector. In addition, if the | receiving the RREQ-DIO into the Address Vector. In addition, if the | |||
address of the router's interface transmitting the RREQ-DIO is not | address of the router's interface transmitting the RREQ-DIO is not | |||
the same as the address of the interface receiving the RREQ-DIO, the | the same as the address of the interface receiving the RREQ-DIO, the | |||
router MUST also append the transmitting interface address into the | router MUST also append the transmitting interface address into the | |||
address vector. | Address Vector. | |||
6.2.6. Step 6: RREQ Reception at TargNode | 6.2.6. Step 6: RREQ Reception at TargNode | |||
If the router is a TargNode and was already associated with the RREQ- | If the router is a TargNode and was already associated with the RREQ- | |||
Instance, it takes no further action and does not send an RREP-DIO. | Instance, it takes no further action and does not send an RREP-DIO. | |||
If TargNode is not already associated with the RREQ-Instance, it | If TargNode is not already associated with the RREQ-Instance, it | |||
prepares and transmits a RREP-DIO, possibly after waiting for | prepares and transmits an RREP-DIO, possibly after waiting for | |||
RREP_WAIT_TIME, as detailed in (Section 6.3). | RREP_WAIT_TIME, as detailed in (Section 6.3). | |||
6.3. Generating Route Reply (RREP) at TargNode | 6.3. Generating RREP at TargNode | |||
When a TargNode receives a RREQ message over a link from a neighbor | When a TargNode receives an RREQ message over a link from a neighbor | |||
Y, TargNode first follows the procedures in Section 6.2. If the link | Y, TargNode first follows the procedures in Section 6.2. If the link | |||
to Y can be used to transmit packets to OrigNode, TargNode generates | to Y can be used to transmit packets to OrigNode, TargNode generates | |||
a RREP according to the steps below. Otherwise, TargNode drops the | an RREP according to Sections 6.3.1 and 6.3.2. Otherwise, TargNode | |||
RREQ and does not generate a RREP. | drops the RREQ and does not generate an RREP. | |||
If the L field is not 0, the TargNode MAY delay transmitting the | If the L field is not 0, the TargNode MAY delay transmitting the | |||
RREP-DIO for the duration RREP_WAIT_TIME to await a route with a | RREP-DIO for the duration RREP_WAIT_TIME to await a route with a | |||
lower Rank. The value of RREP_WAIT_TIME is set by default to 1/4 of | lower Rank. The value of RREP_WAIT_TIME is set by default to 1/4 of | |||
the duration determined by the L field. For L == 0, RREP_WAIT_TIME | the duration determined by the L field. For L == 0, RREP_WAIT_TIME | |||
is set by default to 0. Depending upon the application, | is set by default to 0. Depending upon the application, | |||
RREP_WAIT_TIME may be set to other values. Smaller values enable | RREP_WAIT_TIME may be set to other values. Smaller values enable | |||
quicker formation for the P2P route. Larger values enable formation | quicker formation for the P2P route. Larger values enable formation | |||
of P2P routes with better Rank values. | of P2P routes with better Rank values. | |||
The address of the OrigNode MUST be encapsulated in the ART option | The address of the OrigNode MUST be encapsulated in the ART option | |||
and included in this RREP-DIO message along with the SeqNo of | and included in this RREP-DIO message along with the SeqNo of | |||
TargNode. | TargNode. | |||
6.3.1. RREP-DIO for Symmetric Route | 6.3.1. RREP-DIO for Symmetric Route | |||
If the RREQ-Instance corresponding to the RREQ-DIO that arrived at | If the RREQ-Instance corresponding to the RREQ-DIO that arrived at | |||
TargNode has the S bit set to 1, there is a symmetric route, both of | TargNode has the S bit set to 1, there is a symmetric route, both of | |||
whose directions satisfy the Objective Function. Other RREQ-DIOs | whose directions satisfy the OF. Other RREQ-DIOs might later provide | |||
might later provide better upward routes. The method of selection | better upward routes. The method of selection between a qualified | |||
between a qualified symmetric route and an asymmetric route that | symmetric route and an asymmetric route that might have better | |||
might have better performance is implementation specific and out of | performance is implementation specific and out of scope. | |||
scope. | ||||
For a symmetric route, the RREP-DIO message is unicast to the next | For a symmetric route, the RREP-DIO message is unicast to the Next | |||
hop according to the Address Vector (H=0) or the route entry (H=1); | Hop according to the Address Vector (H=0) or the route entry (H=1); | |||
the DODAG in RREP-Instance does not need to be built. The | the DODAG in RREP-Instance does not need to be built. The | |||
RPLInstanceID in the RREP-Instance is paired as defined in | RPLInstanceID in the RREP-Instance is paired as defined in | |||
Section 6.3.3. If the H bit is set to 0, the address vector from the | Section 6.3.3. If the H bit is set to 0, the Address Vector from the | |||
RREQ-DIO MUST be included in the RREP-DIO. | RREQ-DIO MUST be included in the RREP-DIO. | |||
6.3.2. RREP-DIO for Asymmetric Route | 6.3.2. RREP-DIO for Asymmetric Route | |||
When a RREQ-DIO arrives at a TargNode with the S bit set to 0, the | When an RREQ-DIO arrives at a TargNode with the S bit set to 0, the | |||
TargNode MUST build a DODAG in the RREP-Instance corresponding to the | TargNode MUST build a DODAG in the RREP-Instance corresponding to the | |||
RREQ-DIO rooted at itself, in order to provide OrigNode with a | RREQ-DIO rooted at itself, in order to provide OrigNode with a | |||
downstream route to the TargNode. The RREP-DIO message is | downstream route to the TargNode. The RREP-DIO message is | |||
transmitted to multicast group all-AODV-RPL-nodes. | transmitted to multicast group all-AODV-RPL-nodes. | |||
6.3.3. RPLInstanceID Pairing | 6.3.3. RPLInstanceID Pairing | |||
Since the RPLInstanceID is assigned locally (i.e., there is no | Since the RPLInstanceID is assigned locally (i.e., there is no | |||
coordination between routers in the assignment of RPLInstanceID), the | coordination between routers in the assignment of RPLInstanceID), the | |||
tuple (OrigNode, TargNode, RPLInstanceID) is needed to uniquely | tuple (OrigNode, TargNode, RPLInstanceID) is needed to uniquely | |||
identify a discovered route. It is possible that multiple route | identify a discovered route. It is possible that multiple route | |||
discoveries with dissimilar Objective Functions are initiated | discoveries with dissimilar OFs are initiated simultaneously. Thus, | |||
simultaneously. Thus, between the same pair of OrigNode and | between the same pair of OrigNode and TargNode, there can be multiple | |||
TargNode, there can be multiple AODV-RPL route discovery instances. | AODV-RPL route discovery instances. So that OrigNode and TargNode | |||
So that OrigNode and TargNode can avoid any mismatch, they MUST pair | can avoid any mismatch, they MUST pair the RREQ-Instance and the | |||
the RREQ-Instance and the RREP-Instance in the same route discovery | RREP-Instance in the same route discovery by using the RPLInstanceID. | |||
by using the RPLInstanceID. | ||||
When preparing the RREP-DIO, a TargNode could find the RPLInstanceID | When preparing the RREP-DIO, a TargNode could find the RPLInstanceID | |||
candidate for the RREP-Instance is already occupied by another RPL | candidate for the RREP-Instance is already occupied by another RPL | |||
Instance from an earlier route discovery operation that is still | Instance from an earlier route discovery operation that is still | |||
active. This unlikely case might happen if two distinct OrigNodes | active. This unlikely case might happen if two distinct OrigNodes | |||
need routes to the same TargNode, and they happen to use the same | need routes to the same TargNode, and they happen to use the same | |||
RPLInstanceID for RREQ-Instance. In such cases, the RPLInstanceID of | RPLInstanceID for RREQ-Instance. In such cases, the RPLInstanceID of | |||
an already active RREP-Instance MUST NOT be used again for assigning | an already active RREP-Instance MUST NOT be used again for assigning | |||
RPLInstanceID for the later RREP-Instance. If the same RPLInstanceID | RPLInstanceID for the later RREP-Instance. If the same RPLInstanceID | |||
were reused for two distinct DODAGs originated with the same DODAGID | were reused for two distinct DODAGs originated with the same DODAGID | |||
(TargNode address), intermediate routers could not distinguish | (TargNode address), intermediate routers could not distinguish | |||
between these DODAGs (and their associated Objective Functions). | between these DODAGs (and their associated OFs). Instead, the | |||
Instead, the RPLInstanceID MUST be replaced by another value so that | RPLInstanceID MUST be replaced by another value so that the two RREP- | |||
the two RREP-Instances can be distinguished. In the RREP-DIO option, | Instances can be distinguished. In the RREP-DIO option, the Delta | |||
the Delta field of the RREP-DIO message (Figure 2) indicates the | field of the RREP-DIO message (Figure 2) indicates the value that | |||
value that TargNode adds to the RPLInstanceID in the RREQ-DIO that it | TargNode adds to the RPLInstanceID in the RREQ-DIO that it received, | |||
received, to obtain the value of the RPLInstanceID it uses in the | to obtain the value of the RPLInstanceID it uses in the RREP-DIO | |||
RREP-DIO message. 0 indicates that the RREQ-InstanceID has the same | message. 0 indicates that the RREQ-InstanceID has the same value as | |||
value as the RPLInstanceID of the RREP message. When the new | the RPLInstanceID of the RREP message. When the new RPLInstanceID | |||
RPLInstanceID after incrementation exceeds 255, it rolls over | after incrementation exceeds 255, it rolls over starting at 0. For | |||
starting at 0. For example, if the RREQ-InstanceID is 252 and | example, if the RREQ-InstanceID is 252 and incremented by 6, the new | |||
incremented by 6, the new RPLInstanceID will be 2. Related | RPLInstanceID will be 2. Related operations can be found in | |||
operations can be found in Section 6.4. RPLInstanceID collisions do | Section 6.4. RPLInstanceID collisions do not occur across RREQ-DIOs; | |||
not occur across RREQ-DIOs; the DODAGID equals the OrigNode address | the DODAGID equals the OrigNode address and is sufficient to | |||
and is sufficient to disambiguate between DODAGs. | disambiguate between DODAGs. | |||
6.4. Receiving and Forwarding Route Reply | 6.4. Receiving and Forwarding RREP | |||
Upon receiving a RREP-DIO, a router that already belongs to the RREP- | Upon receiving an RREP-DIO, a router that already belongs to the | |||
Instance SHOULD drop the RREP-DIO. Otherwise, the router performs | RREP-Instance SHOULD drop the RREP-DIO. Otherwise, the router | |||
the steps in the following subsections. | performs the steps in the following subsections. | |||
6.4.1. Step 1: Receiving and Evaluation | 6.4.1. Step 1: Receiving and Evaluation | |||
If the Objective Function is not satisfied, the router MUST NOT join | If the OF is not satisfied, the router MUST NOT join the DODAG; the | |||
the DODAG; the router MUST discard the RREP-DIO and does not execute | router MUST discard the RREP-DIO and does not execute the remaining | |||
the remaining steps in this section. An Intermediate Router MUST | steps in this section. An intermediate router MUST discard an RREP | |||
discard a RREP if one of its addresses is present in the Address | if one of its addresses is present in the Address Vector and does not | |||
Vector and does not execute the remaining steps in this section. | execute the remaining steps in this section. | |||
If the S bit of the associated RREQ-Instance is set to 1, the router | If the S bit of the associated RREQ-Instance is set to 1, the router | |||
MUST proceed to Section 6.4.2. | MUST proceed to Section 6.4.2. | |||
If the S bit of the RREQ-Instance is set to 0, the router MUST | If the S bit of the RREQ-Instance is set to 0, the router MUST | |||
determine whether the downward direction of the link (towards the | determine whether the downward direction of the link (towards the | |||
TargNode) over which the RREP-DIO is received satisfies the Objective | TargNode) over which the RREP-DIO is received satisfies the OF and | |||
Function and whether the router's Rank would not exceed the | whether the router's Rank would not exceed the RankLimit. If these | |||
RankLimit. If so, the router joins the DODAG of the RREP-Instance. | are true, the router joins the DODAG of the RREP-Instance. The | |||
The router that transmitted the received RREP-DIO is selected as the | router that transmitted the received RREP-DIO is selected as the | |||
preferred parent. Afterwards, other RREP-DIO messages can be | preferred parent. Afterwards, other RREP-DIO messages can be | |||
received; AODV-RPL does not specify any action to be taken in such | received; AODV-RPL does not specify any action to be taken in such | |||
cases. | cases. | |||
6.4.2. Step 2: OrigNode or Intermediate Router | 6.4.2. Step 2: OrigNode or Intermediate Router | |||
The router updates its stored value of the TargNode's sequence number | The router updates its stored value of the TargNode's Sequence Number | |||
according to the value provided in the ART option. The router next | according to the value provided in the ART option. The router next | |||
checks if one of its addresses is included in the ART option. If so, | checks if one of its addresses is included in the ART option. If it | |||
this router is the OrigNode of the route discovery. Otherwise, it is | is included, this router is the OrigNode of the route discovery. | |||
an intermediate router. | Otherwise, it is an intermediate router. | |||
6.4.3. Step 3: Build Route to TargNode | 6.4.3. Step 3: Build Route to TargNode | |||
If the H bit is set to 1, then the router (OrigNode or intermediate) | If the H bit is set to 1, then the router (OrigNode or intermediate) | |||
MUST build a downward route entry towards TargNode that includes at | MUST build a downward route entry towards TargNode that includes at | |||
least the following items: OrigNode Address, RPLInstanceID, TargNode | least the following items: OrigNode Address, RPLInstanceID, TargNode | |||
Address as destination, Next Hop, Lifetime, and Sequence Number. For | Address as destination, Next Hop, Lifetime, and Sequence Number. For | |||
a symmetric route, the Next Hop in the route entry is the router from | a symmetric route, the Next Hop in the route entry is the router from | |||
which the RREP-DIO is received. For an asymmetric route, the Next | which the RREP-DIO is received. For an asymmetric route, the Next | |||
Hop is the preferred parent in the DODAG of RREP-Instance. The | Hop is the preferred parent in the DODAG of RREP-Instance. The | |||
RPLInstanceID in the route entry MUST be the RREQ-InstanceID (i.e., | RPLInstanceID in the route entry MUST be the RREQ-InstanceID (i.e., | |||
after subtracting the Delta field value from the value of the | after subtracting the Delta field value from the value of the | |||
RPLInstanceID). The source address is learned from the ART option, | RPLInstanceID). The source address is learned from the ART option, | |||
and the destination address is learned from the DODAGID. The | and the destination address is learned from the DODAGID. The | |||
lifetime is set according to DODAG configuration (i.e., not the L | Lifetime is set according to DODAG configuration (i.e., not the L | |||
field) and can be extended when the route is actually used. The | field) and can be extended when the route is actually used. The | |||
sequence number represents the freshness of the route entry and is | Sequence Number represents the freshness of the route entry and is | |||
copied from the Dest SeqNo field of the ART option of the RREP-DIO. | copied from the Dest SeqNo field of the ART option of the RREP-DIO. | |||
A route entry with the same source and destination address and the | A route entry with the same source and destination address and the | |||
same RPLInstanceID, but a stale sequence number, MUST be deleted. | same RPLInstanceID, but a stale Sequence Number, MUST be deleted. | |||
6.4.4. Step 4: RREP Propagation | 6.4.4. Step 4: RREP Propagation | |||
If the receiver is the OrigNode, it can start transmitting the | If the receiver is the OrigNode, it can start transmitting the | |||
application data to TargNode along the path as provided in RREP- | application data to TargNode along the path as provided in RREP- | |||
Instance, and processing for the RREP-DIO is complete. Otherwise, | Instance, and processing for the RREP-DIO is complete. Otherwise, | |||
the RREP will be propagated towards OrigNode. If H=0, the | the RREP will be propagated towards OrigNode. If H=0, the | |||
intermediate router MUST include the address of the interface | intermediate router MUST include the address of the interface | |||
receiving the RREP-DIO into the address vector. If H=1, according to | receiving the RREP-DIO into the Address Vector. If H=1, according to | |||
the previous step, the intermediate router has set up a route entry | the previous step, the intermediate router has set up a route entry | |||
for TargNode. If the intermediate router has a route to OrigNode, it | for TargNode. If the intermediate router has a route to OrigNode, it | |||
uses that route to unicast the RREP-DIO to OrigNode. Otherwise, in | uses that route to unicast the RREP-DIO to OrigNode. Otherwise, in | |||
the case of a symmetric route, the RREP-DIO message is unicast to the | the case of a symmetric route, the RREP-DIO message is unicast to the | |||
Next Hop according to the address vector in the RREP-DIO (H=0) or the | Next Hop according to the Address Vector in the RREP-DIO (H=0) or the | |||
local route entry (H=1). Otherwise, in the case of an asymmetric | local route entry (H=1). Otherwise, in the case of an asymmetric | |||
route, the intermediate router transmits the RREP-DIO to multicast | route, the intermediate router transmits the RREP-DIO to multicast | |||
group all-AODV-RPL-nodes. The RPLInstanceID in the transmitted RREP- | group all-AODV-RPL-nodes. The RPLInstanceID in the transmitted RREP- | |||
DIO is the same as the value in the received RREP-DIO. | DIO is the same as the value in the received RREP-DIO. | |||
7. Gratuitous RREP | 7. Gratuitous RREP | |||
In some cases, an Intermediate router that receives a RREQ-DIO | In some cases, an intermediate router that receives an RREQ-DIO | |||
message MAY unicast a Gratuitous RREP-DIO (G-RREP-DIO) message back | message MAY unicast a Gratuitous RREP-DIO (G-RREP-DIO) message back | |||
to OrigNode before continuing the transmission of the RREQ-DIO | to OrigNode before continuing the transmission of the RREQ-DIO | |||
towards TargNode. The Gratuitous RREP (G-RREP) allows the OrigNode | towards TargNode. The Gratuitous RREP (G-RREP) allows the OrigNode | |||
to start transmitting data to TargNode sooner. The G bit of the RREP | to start transmitting data to TargNode sooner. The G bit of the RREP | |||
option is provided to distinguish the G-RREP-DIO (G=1) sent by the | option is provided to distinguish the G-RREP-DIO (G=1) sent by the | |||
Intermediate router from the RREP-DIO sent by TargNode (G=0). | intermediate router from the RREP-DIO sent by TargNode (G=0). | |||
The G-RREP-DIO MAY be sent out when the Intermediate router receives | The G-RREP-DIO MAY be sent out when the intermediate router receives | |||
a RREQ-DIO for a TargNode and the router has a pair of downward and | an RREQ-DIO for a TargNode and the router has a pair of downward and | |||
upward routes to the TargNode that also satisfy the Objective | upward routes to the TargNode that also satisfy the OF and for which | |||
Function and for which the destination sequence number is at least as | the Destination Sequence Number is at least as large as the Sequence | |||
large as the sequence number in the RREQ-DIO message. After | Number in the RREQ-DIO message. After unicasting the G-RREP to the | |||
unicasting the G-RREP to the OrigNode, the Intermediate router then | OrigNode, the intermediate router then unicasts the RREQ towards | |||
unicasts the RREQ towards TargNode, so that TargNode will have the | TargNode, so that TargNode will have the advertised route towards | |||
advertised route towards OrigNode along with the RREQ-InstanceID for | OrigNode along with the RREQ-InstanceID for the RREQ-Instance. An | |||
the RREQ-Instance. An upstream intermediate router that receives | upstream intermediate router that receives such a G-RREP MUST also | |||
such a G-RREP MUST also generate a G-RREP and send it further | generate a G-RREP and send it further upstream towards OrigNode. | |||
upstream towards OrigNode. | ||||
In case of source routing, the intermediate router MUST include the | In case of source routing, the intermediate router MUST include the | |||
address vector between the OrigNode and itself in the G-RREP. It | Address Vector between the OrigNode and itself in the G-RREP. It | |||
also includes the address vector in the unicast RREQ-DIO towards | also includes the Address Vector in the unicast RREQ-DIO towards | |||
TargNode. Upon reception of the unicast RREQ-DIO, the TargNode will | TargNode. Upon reception of the unicast RREQ-DIO, the TargNode will | |||
have a route address vector from itself to the OrigNode. Then, the | have a route Address Vector from itself to the OrigNode. Then, the | |||
router MUST include the address vector from the TargNode to the | router MUST include the Address Vector from the TargNode to the | |||
router itself in the G-RREP-DIO to be transmitted. | router itself in the G-RREP-DIO to be transmitted. | |||
For establishing hop-by-hop routes, the intermediate router MUST | For establishing hop-by-hop routes, the intermediate router MUST | |||
unicast the received RREQ-DIO to the Next Hop on the route. The Next | unicast the received RREQ-DIO to the next hop on the route. The next | |||
Hop router along the route MUST build new route entries with the | hop router along the route MUST build new route entries with the | |||
related RPLInstanceID and DODAGID in the downward direction. This | related RPLInstanceID and DODAGID in the downward direction. This | |||
process repeats at each node until the RREQ-DIO arrives at the | process repeats at each node until the RREQ-DIO arrives at the | |||
TargNode. Then, the TargNode and each router along the path towards | TargNode. Then, the TargNode and each router along the path towards | |||
OrigNode MUST unicast the RREP-DIO hop-by-hop towards OrigNode as | OrigNode MUST unicast the RREP-DIO hop-by-hop towards OrigNode as | |||
specified in Section 6.3. | specified in Section 6.3. | |||
8. Operation of Trickle Timer | 8. Operation of Trickle Timer | |||
RREQ-Instance/RREP-Instance multicast uses Trickle timer operations | RREQ-Instance/RREP-Instance multicast uses Trickle timer operations | |||
[RFC6206] to control RREQ-DIO and RREP-DIO transmissions. The | [RFC6206] to control RREQ-DIO and RREP-DIO transmissions. The | |||
skipping to change at line 1112 ¶ | skipping to change at line 1111 ¶ | |||
AODV-RPL uses the "P2P Route Discovery Mode of Operation" (MOP == 4), | AODV-RPL uses the "P2P Route Discovery Mode of Operation" (MOP == 4), | |||
with new options as specified in this document. This document has | with new options as specified in this document. This document has | |||
been added as an additional reference for "P2P Route Discovery Mode | been added as an additional reference for "P2P Route Discovery Mode | |||
of Operation" in the "Mode of Operation" registry within the "Routing | of Operation" in the "Mode of Operation" registry within the "Routing | |||
Protocol for Low Power and Lossy Networks (RPL)" registry group. | Protocol for Low Power and Lossy Networks (RPL)" registry group. | |||
IANA has assigned the three new AODV-RPL options described in Table 1 | IANA has assigned the three new AODV-RPL options described in Table 1 | |||
in the "RPL Control Message Options" registry within the "Routing | in the "RPL Control Message Options" registry within the "Routing | |||
Protocol for Low Power and Lossy Networks (RPL)" registry group. | Protocol for Low Power and Lossy Networks (RPL)" registry group. | |||
+=======+=============+===========+ | +=======+=========+===========+ | |||
| Value | Meaning | Reference | | | Value | Meaning | Reference | | |||
+=======+=============+===========+ | +=======+=========+===========+ | |||
| 0x0B | RREQ Option | RFC 9854 | | | 0x0B | RREQ | RFC 9854 | | |||
+-------+-------------+-----------+ | +-------+---------+-----------+ | |||
| 0x0C | RREP Option | RFC 9854 | | | 0x0C | RREP | RFC 9854 | | |||
+-------+-------------+-----------+ | +-------+---------+-----------+ | |||
| 0x0D | ART Option | RFC 9854 | | | 0x0D | ART | RFC 9854 | | |||
+-------+-------------+-----------+ | +-------+---------+-----------+ | |||
Table 1: AODV-RPL Options | Table 1: AODV-RPL Options | |||
IANA has allocated the permanent multicast address with link-local | IANA has allocated the permanent multicast address with link-local | |||
scope in Table 2 for nodes implementing this specification. This | scope in Table 2 for nodes implementing this specification. This | |||
allocation has been made in the "Local Network Control Block | allocation has been made in the "Local Network Control Block | |||
(224.0.0.0 - 224.0.0.255 (224.0.0/24))" registry within the "IPv4 | (224.0.0.0 - 224.0.0.255 (224.0.0/24))" registry within the "IPv4 | |||
Multicast Address Space Registry" registry group. | Multicast Address Space Registry" registry group. | |||
+=============+====================+============+ | +=============+====================+============+ | |||
skipping to change at line 1168 ¶ | skipping to change at line 1167 ¶ | |||
various types of damage. Such a rogue router could advertise false | various types of damage. Such a rogue router could advertise false | |||
information in its DIOs in order to include itself in the discovered | information in its DIOs in order to include itself in the discovered | |||
route(s). It could generate bogus RREQ-DIO and RREP-DIO messages | route(s). It could generate bogus RREQ-DIO and RREP-DIO messages | |||
carrying bad routes or maliciously modify genuine RREP-DIO messages | carrying bad routes or maliciously modify genuine RREP-DIO messages | |||
it receives. A rogue router acting as the OrigNode could launch | it receives. A rogue router acting as the OrigNode could launch | |||
denial-of-service attacks against the LLN deployment by initiating | denial-of-service attacks against the LLN deployment by initiating | |||
fake AODV-RPL route discoveries. When rogue routers might be | fake AODV-RPL route discoveries. When rogue routers might be | |||
present, RPL's preinstalled mode of operation, where the key to use | present, RPL's preinstalled mode of operation, where the key to use | |||
for route discovery is preinstalled, SHOULD be used. | for route discovery is preinstalled, SHOULD be used. | |||
When a RREQ-DIO message uses the source routing option by setting the | When an RREQ-DIO message uses the source routing option by setting | |||
H bit to 0, a rogue router may populate the Address Vector field with | the H bit to 0, a rogue router may populate the Address Vector field | |||
a set of addresses that may result in the RREP-DIO traveling in a | with a set of addresses that may result in the RREP-DIO traveling in | |||
routing loop. | a routing loop. | |||
If a rogue router is able to forge a G-RREP, it could mount denial- | If a rogue router is able to forge a G-RREP, it could mount denial- | |||
of-service attacks. | of-service attacks. | |||
11. References | 11. References | |||
11.1. Normative References | 11.1. Normative References | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
skipping to change at line 1211 ¶ | skipping to change at line 1210 ¶ | |||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
11.2. Informative References | 11.2. Informative References | |||
[aodv-tot] Perkins, C.E. and E.M. Royer, "Ad-hoc On-demand Distance | [aodv-tot] Perkins, C.E. and E.M. Royer, "Ad-hoc On-demand Distance | |||
Vector Routing", Proceedings WMCSA'99. Second IEEE | Vector Routing", Proceedings WMCSA'99. Second IEEE | |||
Workshop on Mobile Computing Systems and Applications, pp. | Workshop on Mobile Computing Systems and Applications, pp. | |||
90-100, February 1999. | 90-100, DOI 10.1109/MCSA.1999.749281, February 1999, | |||
<https://ieeexplore.ieee.org/document/749281>. | ||||
[co-ioam] Ballamajalu, R., Anand, S.V.R., and M. Hegde, "Co-iOAM: | [co-ioam] Ballamajalu, R., Anand, S.V.R., and M. Hegde, "Co-iOAM: | |||
In-situ Telemetry Metadata Transport for Resource | In-situ Telemetry Metadata Transport for Resource | |||
Constrained Networks within IETF Standards Framework", | Constrained Networks within IETF Standards Framework", | |||
2018 10th International Conference on Communication | 2018 10th International Conference on Communication | |||
Systems & Networks (COMSNETS), pp. 573-576, January 2018. | Systems & Networks (COMSNETS), pp. 573-576, | |||
DOI 10.1109/COMSNETS.2018.8328276, January 2018, | ||||
<https://ieeexplore.ieee.org/document/8328276>. | ||||
[contiki] "The Contiki Open Source OS for the Internet of Things | [contiki] "The Contiki Open Source OS for the Internet of Things | |||
(Contiki Version 2.7)", commit 7635906, November 2013, | (Contiki Version 2.7)", commit 7635906, November 2013, | |||
<https://github.com/contiki-os/contiki>. | <https://github.com/contiki-os/contiki>. | |||
[Contiki-ng] | [Contiki-ng] | |||
"Contiki-NG: The OS for Next Generation IoT Devices | "Contiki-NG: The OS for Next Generation IoT Devices | |||
(Contiki-NG Version 4.6)", commit 3b0bc6a, December 2020, | (Contiki-NG Version 4.6)", commit 3b0bc6a, December 2020, | |||
<https://github.com/contiki-ng/contiki-ng>. | <https://github.com/contiki-ng/contiki-ng>. | |||
[cooja] "Cooja Simulator for Wireless Sensor Networks (Contiki/ | [cooja] "Cooja Simulator for Wireless Sensor Networks (Contiki/ | |||
Cooja Version 2.7)", commit 7635906, November 2013, | Cooja Version 2.7)", commit 7635906, November 2013, | |||
<https://github.com/contiki-os/contiki/tree/master/tools/ | <https://github.com/contiki-os/contiki/tree/master/tools/ | |||
cooja>. | cooja>. | |||
[empirical-study] | [empirical-study] | |||
Misra, P., Ahmed, N., and S. Jha, "An empirical study of | Misra, P., Ahmed, N., and S. Jha, "An empirical study of | |||
asymmetry in low-power wireless links", IEEE | asymmetry in low-power wireless links", IEEE | |||
Communications Magazine, vol. 50, no. 7, pp. 137-146, July | Communications Magazine, vol. 50, no. 7, pp. 137-146, | |||
2012. | DOI 10.1109/MCOM.2012.6231290, July 2012, | |||
<https://ieeexplore.ieee.org/document/6231290>. | ||||
[Link_Asymmetry] | [Link_Asymmetry] | |||
Sang, L., Arora, A., and H. Zhang, "On Link Asymmetry and | Sang, L., Arora, A., and H. Zhang, "On Link Asymmetry and | |||
One-way Estimation in Wireless Sensor Networks", ACM | One-way Estimation in Wireless Sensor Networks", ACM | |||
Transactions on Sensor Networks, vol. 6, no. 2, pp. 1-25, | Transactions on Sensor Networks, vol. 6, no. 2, pp. 1-25, | |||
DOI 10.1145/1689239.1689242, March 2010, | DOI 10.1145/1689239.1689242, March 2010, | |||
<https://doi.org/10.1145/1689239.1689242>. | <https://doi.org/10.1145/1689239.1689242>. | |||
[low-power-wireless] | [low-power-wireless] | |||
Srinivasan, K., Dutta, P., Tavakoli, A., and P. Levis, "An | Srinivasan, K., Dutta, P., Tavakoli, A., and P. Levis, "An | |||
skipping to change at line 1326 ¶ | skipping to change at line 1329 ¶ | |||
implemented simple logic that drops transmitted packets with | implemented simple logic that drops transmitted packets with | |||
certain predefined ratios before handing over the packets to the | certain predefined ratios before handing over the packets to the | |||
receiver. The packet drop ratio is implemented as a table lookup | receiver. The packet drop ratio is implemented as a table lookup | |||
of RSSI ranges mapping to different packet drop ratios with lower | of RSSI ranges mapping to different packet drop ratios with lower | |||
RSSI ranges resulting in higher values. While this table has been | RSSI ranges resulting in higher values. While this table has been | |||
defined for the purpose of capturing the overall link behavior, in | defined for the purpose of capturing the overall link behavior, in | |||
general, it is highly recommended to conduct physical radio | general, it is highly recommended to conduct physical radio | |||
measurement experiments. By keeping the receiving node at | measurement experiments. By keeping the receiving node at | |||
different distances, we let the packets experience different | different distances, we let the packets experience different | |||
packet drops as per the described method. The ETX value | packet drops as per the described method. The ETX value | |||
computation is done by another module that is part of RPL | computation is done by another module that is part of RPL OF | |||
Objective Function implementation. Since the ETX value is | implementation. Since the ETX value is reflective of the extent | |||
reflective of the extent of packet drops, it allowed us to prepare | of packet drops, it allowed us to prepare a useful table | |||
a useful ETX versus RSSI table. ETX versus RSSI values obtained | correlating ETX and RSSI values (see Table 3). ETX and RSSI | |||
in this way may be used as explained below: | values obtained in this way may be used as explained below: | |||
Source -------> NodeA -------> NodeB -----> Destination | Source -------> NodeA -------> NodeB -----> Destination | |||
Figure 6: Communication Link from Source to Destination | Figure 6: Communication Link from Source to Destination | |||
+=========================+=======================+ | +=========================+=======================+ | |||
| RSSI at NodeA for NodeB | Expected ETX at NodeA | | | RSSI at NodeA for NodeB | Expected ETX at NodeA | | |||
| | for NodeB->NodeA | | | | for NodeB->NodeA | | |||
+=========================+=======================+ | +=========================+=======================+ | |||
| > -60 | 150 | | | > -60 | 150 | | |||
skipping to change at line 1400 ¶ | skipping to change at line 1403 ¶ | |||
(O) and (T). | (O) and (T). | |||
B.1. Example Control Message Flows in Symmetric and Asymmetric Networks | B.1. Example Control Message Flows in Symmetric and Asymmetric Networks | |||
In the following diagram, RREQ messages are multicast from router (O) | In the following diagram, RREQ messages are multicast from router (O) | |||
in order to discover routes to and from router (T). The RREQ control | in order to discover routes to and from router (T). The RREQ control | |||
messages flow outward from (O). Each router along the way | messages flow outward from (O). Each router along the way | |||
establishes a single RREQ-Instance identified by RREQ-InstanceID even | establishes a single RREQ-Instance identified by RREQ-InstanceID even | |||
if multiple RREQs are received with the same RREQ-InstanceID. In the | if multiple RREQs are received with the same RREQ-InstanceID. In the | |||
top half of the diagram, the routers are able to offer a symmetric | top half of the diagram, the routers are able to offer a symmetric | |||
route at each hop of the path from (O) to (T). When (T) receives a | route at each hop of the path from (O) to (T). When (T) receives an | |||
RREQ, it is then able to transmit data packets to (O). Router (T) | RREQ, it is then able to transmit data packets to (O). Router (T) | |||
then prepares to send a RREP along the symmetric path that would | then prepares to send an RREP along the symmetric path that would | |||
enable router (O) to send packets to router (T). | enable router (O) to send packets to router (T). | |||
(R) ---RREQ(S=1)--->(R) ---RREQ(S=1)--->(R) | (R) ---RREQ(S=1)--->(R) ---RREQ(S=1)--->(R) | |||
^ | | ^ | | |||
| | | | | | |||
RREQ(S=1) RREQ(S=1) | RREQ(S=1) RREQ(S=1) | |||
| | | | | | |||
| v | | v | |||
(O) --------->(R) --------->(R)-------->(T) | (O) --------->(R) --------->(R)-------->(T) | |||
/ \ RREQ RREQ RREQ ^ | / \ RREQ RREQ RREQ ^ | |||
skipping to change at line 1470 ¶ | skipping to change at line 1473 ¶ | |||
| \ (S=1) (S=0) (S=0) | | | | \ (S=1) (S=0) (S=0) | | | |||
| \ / | | | \ / | | |||
| RREQ (S=1) RREQ (S=0) / (R) | | RREQ (S=1) RREQ (S=0) / (R) | |||
| \ / | | | \ / | | |||
| \ RREQ (S=0) / / | | \ RREQ (S=0) / / | |||
(R) ---->(R)------>(R)----.....----->(R)--- | (R) ---->(R)------>(R)----.....----->(R)--- | |||
Figure 9: AODV-RPL RREQ Message Flow When Symmetric Path Unavailable | Figure 9: AODV-RPL RREQ Message Flow When Symmetric Path Unavailable | |||
Upon receiving the RREQ in Figure 9, router (T) then prepares to send | Upon receiving the RREQ in Figure 9, router (T) then prepares to send | |||
a RREP that would enable router (O) to send packets to router (T). | an RREP that would enable router (O) to send packets to router (T). | |||
In Figure 9, since no symmetric route is available from (T) to router | In Figure 9, since no symmetric route is available from (T) to router | |||
(O), RREP messages are sent via multicast to all neighboring routers. | (O), RREP messages are sent via multicast to all neighboring routers. | |||
(R)<------RREP----- (R)<------RREP----- (R) | (R)<------RREP----- (R)<------RREP----- (R) | |||
| | | | | | |||
| | | | | | |||
RREP RREP | RREP RREP | |||
| | | | | | |||
| | | | | | |||
v v | v v | |||
skipping to change at line 1536 ¶ | skipping to change at line 1539 ¶ | |||
| | | | | | |||
| v | | v | |||
(O) (T) | (O) (T) | |||
Figure 13: RREP_WAIT Expires at TargNode | Figure 13: RREP_WAIT Expires at TargNode | |||
B.3. Example G-RREP Handling | B.3. Example G-RREP Handling | |||
In Figure 14, R* has upward and downward routes to TargNode (T) that | In Figure 14, R* has upward and downward routes to TargNode (T) that | |||
satisfy the OF of the RPL Instance originated by OrigNode (O), and | satisfy the OF of the RPL Instance originated by OrigNode (O), and | |||
the destination sequence number is at least as large as the sequence | the Destination Sequence Number is at least as large as the Sequence | |||
number in the RREQ message. | Number in the RREQ message. | |||
(R) ---RREQ(S=1)--->(R) ---RREQ(S=0)--->(R) | (R) ---RREQ(S=1)--->(R) ---RREQ(S=0)--->(R) | |||
^ | | ^ | | |||
| | | | | | |||
RREQ(S=1) RREQ(S=0) | RREQ(S=1) RREQ(S=0) | |||
| | | | | | |||
| v | | v | |||
(O) --------->(R) --------->(R)-------->(T) | (O) --------->(R) --------->(R)-------->(T) | |||
/ \ RREQ RREQ RREQ ^ | / \ RREQ RREQ RREQ ^ | |||
| \ (S=1) (S=0) (S=0) | | | \ (S=1) (S=0) (S=0) | | |||
End of changes. 89 change blocks. | ||||
205 lines changed or deleted | 208 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |