rfc9854v2.txt   rfc9854.txt 
skipping to change at line 136 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 also running. can be operated whether or not P2P-RPL or RPL [RFC6550] is also
AODV-RPL could be used for networks in which routes are needed with running. AODV-RPL could be used for networks in which routes are
Objective Functions that cannot be satisfied by routes that are needed with OFs that cannot be satisfied by routes that are
constrained to traverse the root of the network or other common constrained to traverse the root of the network or other common
ancestors. P2P routes often require fewer hops and therefore consume ancestors. P2P routes often require fewer hops and therefore consume
less resources than routes that traverse the root or other common less resources than routes that traverse the root or other common
ancestors. Similar in cost to base RPL [RFC6550], the cost will ancestors. Similar in cost to base RPL [RFC6550], the cost 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 189 skipping to change at line 189
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
skipping to change at line 327 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 369 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 395 skipping to change at line 395
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 Option Type and Option Length fields. It is octets, excluding the Option Type and Option Length fields. It is
variable due to the presence of the address vector and the number variable due to the presence of the Address Vector and the number
of octets 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 444 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 489 skipping to change at line 489
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ . . . +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ . . .
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 Option Type and Option Length fields. It is octets, excluding the Option Type and Option Length fields. It is
variable due to the presence of the address vector and the number variable due to the presence of the Address Vector and the number
of octets 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.
skipping to change at line 581 skipping to change at line 581
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 Option Type and Option 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 643 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 715 skipping to change at line 715
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. Generating RREQ 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 valid, 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
valid, then X MUST either free up sufficient resources (the means for valid, then X MUST either free up sufficient resources (the means for
this 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 817 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 843 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 it does, the S bit of the RREQ-DIO to be transmitted is the OF. If it does, the S bit of the RREQ-DIO to be transmitted is
set to 1. Otherwise, the S bit of the RREQ-DIO to be transmitted is set to 1. Otherwise, the S bit of the RREQ-DIO to be transmitted is
skipping to change at line 883 skipping to change at line 883
useful if the router later receives an RREP-DIO that is paired with useful if the router later receives an RREP-DIO that is paired with
the RREQ-Instance. If the router does NOT include the Address the RREQ-Instance. If the router does NOT include the Address
Vector, then it has to rely on multicast for the RREP. The multicast Vector, then it has to rely on multicast for the RREP. The multicast
can impose a 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 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 Sections 6.3.1 and 6.3.2. Otherwise, TargNode an RREP according to Sections 6.3.1 and 6.3.2. Otherwise, TargNode
drops the 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 RREP 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 these are true, the router joins the DODAG of the are true, the router joins the DODAG of the RREP-Instance. The
RREP-Instance. The router that transmitted the received RREP-DIO is router that transmitted the received RREP-DIO is selected as the
selected as the preferred parent. Afterwards, other RREP-DIO preferred parent. Afterwards, other RREP-DIO messages can be
messages can be received; AODV-RPL does not specify any action to be received; AODV-RPL does not specify any action to be taken in such
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 it checks if one of its addresses is included in the ART option. If it
is included, this router is the OrigNode of the route discovery. is included, this router is the OrigNode of the route discovery.
Otherwise, it is 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 1170 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 1213 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 1328 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 table correlating ETX and RSSI values (see Table 3). ETX correlating ETX and RSSI values (see Table 3). ETX and RSSI
and RSSI values obtained in this way may be used as explained values obtained in this way may be used as explained below:
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 1403 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 1473 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 1539 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. 66 change blocks. 
150 lines changed or deleted 150 lines changed or added

This html diff was produced by rfcdiff 1.48.