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.