| 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 151 ¶ | skipping to change at line 153 ¶ | |||
| 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 | |||
| native RPL. Since AODV-RPL uses newly defined options and a newly | native RPL. 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 native RPL is also running. | |||
| otherwise. AODV-RPL could be used for networks in which routes are | AODV-RPL could be used for networks in which routes are needed with | |||
| needed with Objective Functions that cannot be satisfied by routes | Objective Functions 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 | |||
| 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 Objective | |||
| Function during route discovery. | Function during 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 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 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 | |||
| 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 Objective Function for the target of the | |||
| application's data. In this case, the OrigNode builds a local | application's data. In this case, the OrigNode builds a local | |||
| RPLInstance and a DODAG rooted at itself. Then, it transmits a DIO | RPLInstance and a DODAG rooted at itself. Then, it transmits a DIO | |||
| message containing exactly one RREQ option (see Section 4.1) to | message containing exactly one RREQ option (see Section 4.1) to | |||
| multicast group all-AODV-RPL-nodes. The RREQ-DIO MUST contain at | multicast group all-AODV-RPL-nodes. The RREQ-DIO MUST contain at | |||
| least one ART option (see Section 4.3), which indicates the TargNode. | least one ART option (see Section 4.3), which indicates the TargNode. | |||
| The S bit in RREQ-DIO sent out by the OrigNode is set to 1. | The S bit in RREQ-DIO sent out by the OrigNode is set to 1. | |||
| skipping to change at line 752 ¶ | skipping to change at line 754 ¶ | |||
| will not prematurely timeout during data transfer with the TargNode. | will not prematurely timeout during data transfer with the TargNode. | |||
| For setting this value, it has to consider factors such as the | For setting this value, it has to consider factors such as the | |||
| Trickle timer, TargNode hop distance, network size, link behavior, | Trickle timer, TargNode hop distance, network size, link behavior, | |||
| expected data usage time, and so on. | expected 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 a 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 | |||
| skipping to change at line 856 ¶ | skipping to change at line 858 ¶ | |||
| 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 a 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 a 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 | a 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 a 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. | |||
| skipping to change at line 979 ¶ | skipping to change at line 981 ¶ | |||
| received, to obtain the value of the RPLInstanceID it uses in the | received, to obtain the value of the RPLInstanceID it uses in the | |||
| RREP-DIO message. 0 indicates that the RREQ-InstanceID has the same | RREP-DIO message. 0 indicates that the RREQ-InstanceID has the same | |||
| value as the RPLInstanceID of the RREP message. When the new | value as the RPLInstanceID of the RREP message. When the new | |||
| RPLInstanceID after incrementation exceeds 255, it rolls over | RPLInstanceID after incrementation exceeds 255, it rolls over | |||
| starting at 0. For example, if the RREQ-InstanceID is 252 and | starting at 0. For example, if the RREQ-InstanceID is 252 and | |||
| incremented by 6, the new RPLInstanceID will be 2. Related | incremented by 6, the new RPLInstanceID will be 2. Related | |||
| operations can be found in Section 6.4. RPLInstanceID collisions do | operations can be found in Section 6.4. RPLInstanceID collisions do | |||
| not occur across RREQ-DIOs; the DODAGID equals the OrigNode address | not occur across RREQ-DIOs; the DODAGID equals the OrigNode address | |||
| and is sufficient to disambiguate between DODAGs. | and is sufficient to 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 a RREP-DIO, a router that already belongs to the RREP- | |||
| Instance SHOULD drop the RREP-DIO. Otherwise, the router performs | Instance SHOULD drop the RREP-DIO. Otherwise, the router performs | |||
| the steps in the following subsections. | 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 Objective Function is not satisfied, the router MUST NOT join | |||
| the DODAG; the router MUST discard the RREP-DIO and does not execute | the DODAG; the router MUST discard the RREP-DIO and does not execute | |||
| the remaining steps in this section. An Intermediate Router MUST | the remaining steps in this section. An Intermediate Router MUST | |||
| discard a RREP if one of its addresses is present in the Address | discard a RREP if one of its addresses is present in the Address | |||
| Vector and does not execute the remaining steps in this section. | Vector and does not 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 Objective | |||
| Function and whether the router's Rank would not exceed the | Function and whether the router's Rank would not exceed the | |||
| RankLimit. If so, the router joins the DODAG of the RREP-Instance. | RankLimit. If these are true, the router joins the DODAG of the | |||
| The router that transmitted the received RREP-DIO is selected as the | RREP-Instance. The router that transmitted the received RREP-DIO is | |||
| preferred parent. Afterwards, other RREP-DIO messages can be | selected as the preferred parent. Afterwards, other RREP-DIO | |||
| received; AODV-RPL does not specify any action to be taken in such | messages can be received; AODV-RPL does not specify any action to be | |||
| cases. | taken in such 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 | |||
| skipping to change at line 1112 ¶ | skipping to change at line 1114 ¶ | |||
| 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 1329 ¶ | skipping to change at line 1331 ¶ | |||
| 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 | |||
| Objective Function implementation. Since the ETX value is | Objective Function implementation. Since the ETX value is | |||
| reflective of the extent of packet drops, it allowed us to prepare | reflective of the extent of packet drops, it allowed us to prepare | |||
| a useful ETX versus RSSI table. ETX versus RSSI values obtained | a useful table correlating ETX and RSSI values (see Table 3). ETX | |||
| in this way may be used as explained below: | and RSSI 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 | | |||
| End of changes. 30 change blocks. | ||||
| 73 lines changed or deleted | 76 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||