| rfc9854.original | rfc9854.txt | |||
|---|---|---|---|---|
| ROLL C.E. Perkins | Internet Engineering Task Force (IETF) C.E. Perkins | |||
| Internet-Draft Blue Meadow Networks | Request for Comments: 9854 Blue Meadow Networks | |||
| Intended status: Standards Track S.V.R.Anand | Category: Standards Track S.V.R. Anand | |||
| Expires: 3 September 2025 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 | |||
| 2 March 2025 | October 2025 | |||
| Supporting Asymmetric Links in Low Power Networks: AODV-RPL | AODV-RPL: The Routing Protocol for Low-Power and Lossy Networks (RPL) | |||
| draft-ietf-roll-aodv-rpl-20 | 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 Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
| provisions of BCP 78 and BCP 79. | ||||
| Internet-Drafts are working documents of the Internet Engineering | ||||
| Task Force (IETF). Note that other groups may also distribute | ||||
| working documents as Internet-Drafts. The list of current Internet- | ||||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
| Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
| and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
| time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
| material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
| Internet Standards is available in Section 2 of RFC 7841. | ||||
| This Internet-Draft will expire on 3 September 2025. | Information about the current status of this document, any errata, | |||
| and how to provide feedback on it may be obtained at | ||||
| https://www.rfc-editor.org/info/rfc9854. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2025 IETF Trust and the persons identified as the | Copyright (c) 2025 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
| license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
| and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
| extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
| described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
| provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
| in the Revised BSD License. | ||||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 2. Terminology | |||
| 3. Overview of AODV-RPL . . . . . . . . . . . . . . . . . . . . 7 | 3. Overview of AODV-RPL | |||
| 4. AODV-RPL DIO Options . . . . . . . . . . . . . . . . . . . . 9 | 4. AODV-RPL DIO Options | |||
| 4.1. AODV-RPL RREQ Option . . . . . . . . . . . . . . . . . . 9 | 4.1. AODV-RPL RREQ Option | |||
| 4.2. AODV-RPL RREP Option . . . . . . . . . . . . . . . . . . 11 | 4.2. AODV-RPL RREP Option | |||
| 4.3. AODV-RPL Target Option . . . . . . . . . . . . . . . . . 13 | 4.3. AODV-RPL Target Option | |||
| 5. Symmetric and Asymmetric Routes . . . . . . . . . . . . . . . 14 | 5. Symmetric and Asymmetric Routes | |||
| 6. AODV-RPL Operation . . . . . . . . . . . . . . . . . . . . . 17 | 6. AODV-RPL Operation | |||
| 6.1. Route Request Generation . . . . . . . . . . . . . . . . 17 | 6.1. Generating RREQ | |||
| 6.2. Receiving and Forwarding RREQ messages . . . . . . . . . 18 | 6.2. Receiving and Forwarding RREQ Messages | |||
| 6.2.1. Step 1: RREQ reception and evaluation . . . . . . . . 18 | 6.2.1. Step 1: RREQ Reception and Evaluation | |||
| 6.2.2. Step 2: TargNode and Intermediate Router | 6.2.2. Step 2: TargNode and Intermediate Router Determination | |||
| determination . . . . . . . . . . . . . . . . . . . . 18 | 6.2.3. Step 3: Intermediate Router RREQ Processing | |||
| 6.2.3. Step 3: Intermediate Router RREQ processing . . . . . 19 | ||||
| 6.2.4. Step 4: Symmetric Route Processing at an Intermediate | 6.2.4. Step 4: Symmetric Route Processing at an Intermediate | |||
| Router . . . . . . . . . . . . . . . . . . . . . . . 20 | Router | |||
| 6.2.5. Step 5: RREQ propagation at an Intermediate Router . 20 | 6.2.5. Step 5: RREQ Propagation at an Intermediate Router | |||
| 6.2.6. Step 6: RREQ reception at TargNode . . . . . . . . . 21 | 6.2.6. Step 6: RREQ Reception at TargNode | |||
| 6.3. Generating Route Reply (RREP) at TargNode . . . . . . . . 21 | 6.3. Generating RREP at TargNode | |||
| 6.3.1. RREP-DIO for Symmetric route . . . . . . . . . . . . 21 | 6.3.1. RREP-DIO for Symmetric Route | |||
| 6.3.2. RREP-DIO for Asymmetric Route . . . . . . . . . . . . 22 | 6.3.2. RREP-DIO for Asymmetric Route | |||
| 6.3.3. RPLInstanceID Pairing . . . . . . . . . . . . . . . . 22 | 6.3.3. RPLInstanceID Pairing | |||
| 6.4. Receiving and Forwarding Route Reply . . . . . . . . . . 23 | 6.4. Receiving and Forwarding RREP | |||
| 6.4.1. Step 1: Receiving and Evaluation . . . . . . . . . . 23 | 6.4.1. Step 1: Receiving and Evaluation | |||
| 6.4.2. Step 2: OrigNode or Intermediate Router . . . . . . . 23 | 6.4.2. Step 2: OrigNode or Intermediate Router | |||
| 6.4.3. Step 3: Build Route to TargNode . . . . . . . . . . . 23 | 6.4.3. Step 3: Build Route to TargNode | |||
| 6.4.4. Step 4: RREP Propagation . . . . . . . . . . . . . . 24 | 6.4.4. Step 4: RREP Propagation | |||
| 7. Gratuitous RREP . . . . . . . . . . . . . . . . . . . . . . . 24 | 7. Gratuitous RREP | |||
| 8. Operation of Trickle Timer . . . . . . . . . . . . . . . . . 25 | 8. Operation of Trickle Timer | |||
| 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 25 | 9. IANA Considerations | |||
| 10. Security Considerations . . . . . . . . . . . . . . . . . . . 26 | 10. Security Considerations | |||
| 11. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 27 | 11. References | |||
| 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 27 | 11.1. Normative References | |||
| 12.1. Normative References . . . . . . . . . . . . . . . . . . 27 | 11.2. Informative References | |||
| 12.2. Informative References . . . . . . . . . . . . . . . . . 28 | Appendix A. Example: Using ETX/RSSI Values to Determine Value of S | |||
| Bit | ||||
| Appendix A. Example: Using ETX/RSSI Values to determine value of S | Appendix B. Some Example AODV-RPL Message Flows | |||
| bit . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 | B.1. Example Control Message Flows in Symmetric and Asymmetric | |||
| Appendix B. Some Example AODV-RPL Message Flows . . . . . . . . 32 | Networks | |||
| B.1. Example control message flows in symmetric and asymmetric | B.2. Example RREP_WAIT Handling | |||
| networks . . . . . . . . . . . . . . . . . . . . . . . . 32 | B.3. Example G-RREP Handling | |||
| B.2. Example RREP_WAIT handling . . . . . . . . . . . . . . . 34 | Acknowledgements | |||
| B.3. Example G-RREP handling . . . . . . . . . . . . . . . . . 35 | Contributors | |||
| Appendix C. Changelog . . . . . . . . . . . . . . . . . . . . . 36 | Authors' Addresses | |||
| C.1. Changes from version 19 to version 20 . . . . . . . . . . 36 | ||||
| C.2. Changes from version 18 to version 19 . . . . . . . . . . 37 | ||||
| C.3. Changes from version 17 to version 18 . . . . . . . . . . 37 | ||||
| C.4. Changes from version 16 to version 17 . . . . . . . . . . 37 | ||||
| C.5. Changes from version 15 to version 16 . . . . . . . . . . 38 | ||||
| C.6. Changes from version 14 to version 15 . . . . . . . . . . 38 | ||||
| C.7. Changes from version 13 to version 14 . . . . . . . . . . 39 | ||||
| C.8. Changes from version 12 to version 13 . . . . . . . . . . 40 | ||||
| C.9. Changes from version 11 to version 12 . . . . . . . . . . 40 | ||||
| C.10. Changes from version 10 to version 11 . . . . . . . . . . 41 | ||||
| C.11. Changes from version 09 to version 10 . . . . . . . . . . 42 | ||||
| C.12. Changes from version 08 to version 09 . . . . . . . . . . 42 | ||||
| C.13. Changes from version 07 to version 08 . . . . . . . . . . 43 | ||||
| C.14. Changes from version 06 to version 07 . . . . . . . . . . 44 | ||||
| C.15. Changes from version 05 to version 06 . . . . . . . . . . 44 | ||||
| C.16. Changes from version 04 to version 05 . . . . . . . . . . 44 | ||||
| C.17. Changes from version 03 to version 04 . . . . . . . . . . 44 | ||||
| C.18. Changes from version 02 to version 03 . . . . . . . . . . 44 | ||||
| Appendix D. Contributors . . . . . . . . . . . . . . . . . . . . 45 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 46 | ||||
| 1. Introduction | 1. Introduction | |||
| Routing Protocol for Low-Power and Lossy Networks (RPL) [RFC6550] is | The Routing Protocol for Low-Power and Lossy Networks (RPL) [RFC6550] | |||
| an IPv6 distance vector routing protocol designed to support multiple | is an IPv6 distance vector routing protocol designed to support | |||
| traffic flows through a root-based Destination-Oriented Directed | multiple traffic flows through a root-based Destination-Oriented | |||
| Acyclic Graph (DODAG). Typically, a router does not have routing | Directed Acyclic Graph (DODAG). Typically, a router does not have | |||
| information for destinations attached to most other routers. | routing information for destinations attached to most other routers. | |||
| Consequently, for traffic between routers within the DODAG (i.e., | Consequently, for traffic between routers within the DODAG (i.e., P2P | |||
| Peer-to-Peer (P2P) traffic) data packets either have to traverse the | traffic), data packets either have to traverse the root in non- | |||
| root in non-storing mode, or traverse a common ancestor in storing | storing mode or traverse a common ancestor in storing mode. Such P2P | |||
| mode. Such P2P traffic is thereby likely to traverse longer routes | traffic is thereby likely to traverse longer routes and may suffer | |||
| and may suffer severe congestion near the root (for more information | severe congestion near the root (for more information, see [RFC6687], | |||
| see [RFC6687], [RFC6997], [RFC6998], [RFC9010]). The network | [RFC6997], [RFC6998], and [RFC9010]). The network environment that | |||
| environment that is considered in this document is assumed to be the | is considered in this document is assumed to be the same as that | |||
| same as described in Section 1 of [RFC6550]. Each radio interface/ | described in Section 1 of [RFC6550]. Each radio interface/link and | |||
| link and the associated address should be treated as an independent | the associated address should be treated as an independent | |||
| intermediate router. Such routers have different links and the rules | intermediate router. Such routers have different links, and the | |||
| for the link symmetry apply independently for each of these. | rules for link symmetry apply independently for each of these. | |||
| The route discovery process in AODV-RPL is modeled on the analogous | The route discovery process in AODV-RPL is modeled on the analogous | |||
| peer-to-peer procedure specified in AODV [RFC3561]. The on-demand | P2P procedure specified in AODV [RFC3561]. The on-demand property of | |||
| property of AODV route discovery is useful for the needs of routing | AODV route discovery is useful for the needs of routing in RPL-based | |||
| in RPL-based LLNs when routes are needed but aren't yet established. | LLNs when routes are needed but aren't yet established. P2P routing | |||
| Peer-to-peer routing is desirable to discover shorter routes, and | is desirable to discover shorter routes, especially when it is | |||
| especially when it is desired to avoid directing additional traffic | desired to avoid directing additional traffic through a root or | |||
| through a root or gateway node of the network. It may happen that | gateway node of the network. It may happen that some routes need to | |||
| some routes need to be established proactively when known beforehand | be established proactively when known beforehand and when AODV-RPL's | |||
| and when AODV-RPL's route discovery process introduces unwanted delay | route discovery process introduces unwanted delay when the | |||
| at the time 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. AODV-RPL | namely "RREQ" for "Route Request", and "RREP" for "Route Reply". | |||
| currently omits some features compared to AODV -- in particular, | AODV-RPL currently omits some features compared to AODV -- in | |||
| flagging Route Errors, "blacklisting" unidirectional links | particular, flagging route errors, blocking the use of unidirectional | |||
| ([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 basic messages RREQ and RREP as | non-storing modes. AODV-RPL adds the basic messages RREQ and RREP as | |||
| part of RPL DODAG Information Object (DIO) control message, which go | part of the RPL DODAG Information Object (DIO) control message, which | |||
| 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 discover P2P | three new options for the DIO message, dedicated to discovering P2P | |||
| routes. These P2P routes may differ from routes discoverable by | routes. These P2P routes may differ from routes discoverable by RPL | |||
| native RPL. Since AODV-RPL uses newly defined Options and a newly | [RFC6550]. Since AODV-RPL uses newly defined options and a newly | |||
| allocated multicast group (see Section 9), there is no conflict with | allocated multicast group (see Section 9), there is no conflict with | |||
| P2P-RPL [RFC6997], a previous document using the same MOP. AODV-RPL | P2P-RPL [RFC6997], a previous document using the same MOP. AODV-RPL | |||
| can be operated whether or not P2P-RPL or native RPL is running | can be operated whether or not P2P-RPL or RPL [RFC6550] is also | |||
| otherwise. AODV-RPL could be used for networks in which routes are | running. AODV-RPL could be used for networks in which routes are | |||
| needed with Objective Functions that cannot be satisfied by routes | needed with OFs that cannot be satisfied by routes that are | |||
| that are constrained to traverse the root of the network or other | constrained to traverse the root of the network or other common | |||
| common ancestors. P2P routes often require fewer hops and therefore | ancestors. P2P routes often require fewer hops and therefore consume | |||
| consume less resources than routes that traverse the root or other | less resources than routes that traverse the root or other common | |||
| common ancestors. Similar in cost to base RPL [RFC6550], the cost | ancestors. Similar in cost to base RPL [RFC6550], the cost will | |||
| will depend on many factors such as the proximity of the OrigNode and | depend on many factors such as the proximity of the OrigNode and | |||
| TargNodes and distribution of symmetric/asymmetric P2P links. | TargNodes and distribution of symmetric/asymmetric P2P links. | |||
| Experience with AODV [aodv-tot] suggests that AODV-RPL will often | Experience with AODV [aodv-tot] suggests that AODV-RPL will often | |||
| find routes with improved rank compared to routes constrained to | find routes with improved Rank compared to routes constrained to | |||
| traverse a common ancestor of the source and destination nodes. | traverse a common ancestor of the source and destination nodes. | |||
| 2. Terminology | 2. Terminology | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in | |||
| 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. | |||
| AODV-RPL reuses names for messages and data structures, including | AODV-RPL reuses names for messages and data structures, including | |||
| 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: | ||||
| AODV | AODV | |||
| Ad Hoc On-demand Distance Vector Routing [RFC3561]. | Ad hoc On-Demand Distance Vector [RFC3561]. | |||
| ART option | ART option | |||
| AODV-RPL Target option: a 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. | |||
| Bi-directional 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) | |||
| RPL Instance built using the DIO with RREQ option; used for | A 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) | |||
| RPL Instance built using the DIO with RREP option; used for | A 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 | |||
| An Objective Function as defined in [RFC6550]. | Objective Function (as defined in [RFC6550]). | |||
| OrigNode | OrigNode | |||
| The IPv6 router (Originating Node) initiating the AODV-RPL route | The IPv6 router (originating node) initiating the AODV-RPL route | |||
| discovery to obtain a route to TargNode. | discovery to obtain a route to TargNode. | |||
| Paired DODAGs | Paired DODAGs | |||
| Two DODAGs for a single route discovery process between OrigNode | Two DODAGs for a single route discovery process between OrigNode | |||
| and TargNode. | and TargNode. | |||
| P2P | P2P | |||
| Peer-to-Peer -- in other words, not constrained a priori to | Peer-to-Peer (in other words, not constrained a priori to traverse | |||
| 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), | |||
| where Targ_RPLInstanceID is the local RPLInstanceID allocated by | where Targ_RPLInstanceID is the local RPLInstanceID allocated by | |||
| TargNode, and TargNode-IPaddr is an IP address of TargNode. The | TargNode and TargNode-IPaddr is an IP address of TargNode. The | |||
| RREP-InstanceID uniquely identifies the RREP-Instance. The | RREP-InstanceID uniquely identifies the RREP-Instance. The | |||
| RPLInstanceID in the RREP message along with the Delta value | RPLInstanceID in the RREP message along with the Delta value | |||
| indicates the associated RREQ-InstanceID. The InstanceIDs are | indicates the associated RREQ-InstanceID. The InstanceIDs are | |||
| matched by mechanism explained in Section 6.3.3 | matched by the mechanism explained in Section 6.3.3. | |||
| Source routing | Source routing | |||
| A mechanism by which the source supplies a vector of addresses | A mechanism by which the source supplies a vector of addresses | |||
| towards the destination node along with each data packet | towards the destination node along with each data packet | |||
| [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 "on-demand" routing protocols. Such protocols are also | example of an "on-demand" routing protocol. Such protocols are also | |||
| known as "reactive" routing protocols since their operations are | known as "reactive" routing protocols since their operations are | |||
| triggered in reaction to a determination that a new route is needed. | triggered in reaction to a determination that a new route is needed. | |||
| AODV-RPL works without requiring the use of RPL or any other routing | AODV-RPL works without requiring the use of RPL or any other routing | |||
| protocol. | protocol. | |||
| The routes discovered by AODV-RPL are not constrained to traverse a | The routes discovered by AODV-RPL are not constrained to traverse a | |||
| common ancestor. AODV-RPL can enable asymmetric communication paths | common ancestor. AODV-RPL can enable asymmetric communication paths | |||
| in networks with bidirectional asymmetric links. For this purpose, | in networks with bidirectional asymmetric links. For this purpose, | |||
| AODV-RPL enables discovery of two routes: namely, one from OrigNode | AODV-RPL enables discovery of two routes: namely, one from OrigNode | |||
| to TargNode, and another from TargNode to OrigNode. AODV-RPL also | to TargNode and another from TargNode to OrigNode. AODV-RPL also | |||
| enables discovery of symmetric routes along Paired DODAGs, when | enables discovery of symmetric routes along paired DODAGs, when | |||
| symmetric routes are possible (see Section 5). | symmetric routes are possible (see Section 5). | |||
| In AODV-RPL, routes are discovered by first forming a temporary DAG | In AODV-RPL, routes are discovered by first forming a temporary | |||
| rooted at the OrigNode. Paired DODAGs (Instances) are constructed | Directed Acyclic Graph (DAG) rooted at the OrigNode. Paired DODAGs | |||
| during route formation between the OrigNode and TargNode. The RREQ- | (Instances) are constructed during route formation between the | |||
| Instance is formed by route control messages from OrigNode to | OrigNode and TargNode. The RREQ-Instance is formed by route control | |||
| TargNode whereas the RREP-Instance is formed by route control | messages from OrigNode to TargNode, whereas the RREP-Instance is | |||
| messages from TargNode to OrigNode. The route discovered in the | formed by route control messages from TargNode to OrigNode. The | |||
| RREQ-Instance is used for transmitting data from TargNode to | route discovered in the RREQ-Instance is used for transmitting data | |||
| OrigNode, and the route discovered in RREP-Instance is used for | from TargNode to OrigNode, and the route discovered in RREP-Instance | |||
| 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: "The Rank is the expression of a relative | Rank as defined in [RFC6550]: | |||
| position within a DODAG Version with regard to neighbors, and it is | ||||
| not necessarily a good indication or a proper expression of a | | The Rank is the expression of a relative position within a DODAG | |||
| distance or a path cost to the root." The Rank measurements provided | | Version with regard to neighbors, and it is not necessarily a good | |||
| in AODV messages do not indicate a distance or a path cost to the | | indication or a proper expression of a distance or a path cost to | |||
| root. | | the root. | |||
| The Rank measurements provided in AODV messages do not indicate a | ||||
| 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 | |||
| from OrigNode toward TargNode, containing the RREQ option as | from OrigNode toward TargNode, containing the RREQ option as | |||
| specified in Section 4.1. The RREQ-InstanceID is formed as the | specified in Section 4.1. The RREQ-InstanceID is formed as the | |||
| ordered pair (Orig_RPLInstanceID, OrigNode-IPaddr), where | ordered pair (Orig_RPLInstanceID, OrigNode-IPaddr), where | |||
| Orig_RPLInstanceID is the local RPLInstanceID allocated by OrigNode, | Orig_RPLInstanceID is the local RPLInstanceID allocated by OrigNode | |||
| and OrigNode-IPaddr is the IP address of OrigNode. A node receiving | and OrigNode-IPaddr is the IP address of OrigNode. A node receiving | |||
| the RREQ-DIO can use the RREQ-InstanceID to identify the proper OF | the RREQ-DIO can use the RREQ-InstanceID to identify the proper OF | |||
| whenever that node receives a data packet with Source Address == | whenever that node receives a data packet with Source Address == | |||
| OrigNode-IPaddr and IPv6 RPL Option having the RPLInstanceID == | OrigNode-IPaddr and IPv6 RPL Option having the RPLInstanceID == | |||
| Orig_RPLInstanceID. The 'D' bit of the RPLInstanceID field is set to | Orig_RPLInstanceID. The D bit of the RPLInstanceID field is set to 0 | |||
| 0 to indicate that the source address of the IPv6 packet is the | to indicate that the source address of the IPv6 packet is the | |||
| DODAGID. | DODAGID. | |||
| Similarly, "RREP-DIO message" means the DIO message from TargNode | Similarly, "RREP-DIO message" means the DIO message from TargNode | |||
| toward OrigNode, containing the RREP option as specified in | toward OrigNode, containing the RREP option as specified in | |||
| Section 4.2. The RREP-InstanceID is formed as the ordered pair | Section 4.2. The RREP-InstanceID is formed as the ordered pair | |||
| (Targ_RPLInstanceID, TargNode-IPaddr), where Targ_RPLInstanceID is | (Targ_RPLInstanceID, TargNode-IPaddr), where Targ_RPLInstanceID is | |||
| the local RPLInstanceID allocated by TargNode, and TargNode-IPaddr is | the local RPLInstanceID allocated by TargNode and TargNode-IPaddr is | |||
| the IP address of TargNode. A node receiving the RREP-DIO can use | the IP address of TargNode. A node receiving the RREP-DIO can use | |||
| the RREP-InstanceID to identify the proper OF whenever that node | the RREP-InstanceID to identify the proper OF whenever that node | |||
| receives a data packet with Source Address == TargNode-IPaddr and | receives a data packet with Source Address == TargNode-IPaddr and | |||
| IPv6 RPL Option having the RPLInstanceID == Targ_RPLInstanceID along | IPv6 RPL Option having the RPLInstanceID == Targ_RPLInstanceID along | |||
| 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 | | | |||
| +-+-+-+-+-+-+-+-+ | | +-+-+-+-+-+-+-+-+ | | |||
| | | | | | | |||
| | Address Vector (Optional, Variable Length) | | | Address Vector (Optional, Variable Length) | | |||
| . . | . . | |||
| . . | . . | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ . . . | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ . . . | |||
| 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 (TBD2) | 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. Variable due to the | octets, excluding the Option Type and Option Length fields. It is | |||
| presence of the address vector and the number of octets elided | variable due to the presence of the Address Vector and the number | |||
| 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. | |||
| X | X | |||
| Reserved; MUST be initialized to zero and ignored upon reception. | Reserved. This field MUST be initialized to zero and ignored upon | |||
| reception. | ||||
| Compr | Compr | |||
| 4-bit unsigned integer. When Compr is nonzero, exactly that | 4-bit unsigned integer. When Compr is nonzero, exactly that | |||
| number of prefix octets MUST be elided from each address before | number of prefix octets MUST be elided from each address before | |||
| storing it in the Address Vector. The octets elided are shared | storing it in the Address Vector. The octets elided are shared | |||
| with the IPv6 address in the DODAGID. This field is only used in | with the IPv6 address in the DODAGID. This field is only used in | |||
| source routing mode (H=0). In hop-by-hop mode (H=1), this field | source routing mode (H=0). In hop-by-hop mode (H=1), this field | |||
| MUST be set to zero and ignored upon reception. | MUST be set to zero and ignored upon reception. | |||
| L | L | |||
| 2-bit unsigned integer determining the time duration that a node | 2-bit unsigned integer determining the time duration that a node | |||
| is able to belong to the RREQ-Instance (a temporary DAG including | is able to belong to the RREQ-Instance (a temporary DAG including | |||
| the OrigNode and the TargNode). Once the time is reached, a node | the OrigNode and the TargNode). Once the time is reached, a node | |||
| SHOULD leave the RREQ-Instance and stop sending or receiving any | SHOULD leave the RREQ-Instance and stop sending or receiving any | |||
| more DIOs for the RREQ-Instance; otherwise memory and network | more DIOs for the RREQ-Instance; otherwise, memory and network | |||
| resources are likely to be consumed unnecessarily. This naturally | resources are likely to be consumed unnecessarily. This naturally | |||
| depends on the node's ability to keep track of time. Once a node | depends on the node's ability to keep track of time. Once a node | |||
| leaves an RREQ-Instance, it MUST NOT rejoin the same RREQ-Instance | leaves an RREQ-Instance, it MUST NOT rejoin the same RREQ-Instance | |||
| for at least the time interval specified by the configuration | for at least the time interval specified by the configuration | |||
| variable REJOIN_REENABLE. L is independent from the route | variable REJOIN_REENABLE. L is independent from the route | |||
| lifetime, which is defined in the DODAG configuration option. | lifetime, which is defined in the DODAG configuration option. | |||
| * 0x00: No time limit imposed. | * 0x00: No time limit imposed | |||
| * 0x01: 16 seconds | * 0x01: 16 seconds | |||
| * 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 | 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| | | |||
| +-+-+-+-+-+-+-+-+ | | +-+-+-+-+-+-+-+-+ | | |||
| | | | | | | |||
| | | | | | | |||
| | Address Vector (Optional, Variable Length) | | | Address Vector (Optional, Variable Length) | | |||
| . . | . . | |||
| . . | . . | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ . . . | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ . . . | |||
| 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 (TBD3) | 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. Variable due to the | octets, excluding the Option Type and Option Length fields. It is | |||
| presence of the address vector and the number of octets elided | variable due to the presence of the Address Vector and the number | |||
| 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 RREQ option. It requests either source routing (H=0) or | bit in the RREQ option. It requests either source routing (H=0) | |||
| hop-by-hop (H=1) for the downstream route. | or hop-by-hop (H=1) for the downstream route. | |||
| X | X | |||
| 1-bit Reserved field; MUST be initialized to zero and ignored upon | 1-bit Reserved field. This field MUST be initialized to zero and | |||
| reception. | ignored upon reception. | |||
| Compr | Compr | |||
| 4-bit unsigned integer. Same definition as in RREQ option. | 4-bit unsigned integer. This field has the same definition as in | |||
| the RREQ option. | ||||
| L | L | |||
| 2-bit unsigned integer defined as in RREQ option. The lifetime of | 2-bit unsigned integer defined as in the RREQ option. The | |||
| the RREP-Instance SHOULD be no greater than the lifetime of the | lifetime of the RREP-Instance SHOULD be no greater than the | |||
| RREQ-Instance to which it is paired, so that the memory required | lifetime of the RREQ-Instance to which it is paired, so that the | |||
| to store the RREP-Instance can be reclaimed when no longer needed. | memory required to store the RREP-Instance can be reclaimed when | |||
| no longer needed. | ||||
| 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, similarly to RankLimit in the RREQ message. | portion of the Rank, similarly to RankLimit in the RREQ message. | |||
| A value of 0 in this field indicates the limit is infinity. | A value of 0 in this field indicates the limit is infinity. | |||
| Delta | Delta | |||
| 6-bit unsigned integer. TargNode uses the Delta field so that | 6-bit unsigned integer. TargNode uses the Delta field so that | |||
| nodes receiving its RREP message can identify the RREQ-InstanceID | nodes receiving its RREP message can identify the RREQ-InstanceID | |||
| of the RREQ message that triggered the transmission of the RREP | of the RREQ message that triggered the transmission of the RREP | |||
| (see Section 6.3.3). | (see Section 6.3.3). | |||
| X X | X X | |||
| 2-bit Reserved field; MUST be initialized to zero and ignored upon | 2-bit Reserved field. This field MUST be initialized to zero and | |||
| reception. | ignored upon reception. | |||
| Address Vector | Address Vector | |||
| Only present when the H bit is set to 0. The prefix of each | Only present when the H bit is set to 0. The prefix of each | |||
| address is elided according to the Compr field. For an asymmetric | address is elided according to the Compr field. For an asymmetric | |||
| route, the Address Vector represents the IPv6 addresses of the | route, the Address Vector represents the IPv6 addresses of the | |||
| path through the network the RREP-DIO has passed. In contrast, | path through the network the RREP-DIO has passed. In contrast, | |||
| for a symmetric route, it is the Address Vector when the RREQ-DIO | for a symmetric route, it is the Address Vector when the RREQ-DIO | |||
| arrives at the TargNode, unchanged during the transmission to the | arrives at the TargNode, unchanged during the transmission to the | |||
| OrigNode. | OrigNode. | |||
| 4.3. AODV-RPL Target Option | 4.3. AODV-RPL Target Option | |||
| The AODV-RPL Target (ART) Option is based on the Target Option in | The AODV-RPL Target (ART) option is based on the Target option in the | |||
| core RPL [RFC6550]. The Flags field is replaced by the Destination | core RPL specification [RFC6550]. The Flags field is replaced by the | |||
| Sequence Number of the TargNode and the Prefix Length field is | Destination Sequence Number of the TargNode, and the Prefix Length | |||
| reduced to 7 bits so that the value is limited to be no greater than | field is reduced to 7 bits so that the value is limited to be no | |||
| 127. | greater than 127. | |||
| A RREQ-DIO message MUST carry at least one ART Option. A RREP-DIO | An RREQ-DIO message MUST carry at least one ART option. An RREP-DIO | |||
| message MUST carry exactly one ART Option. Otherwise, the message | message MUST carry exactly one ART option. Otherwise, the message | |||
| MUST be dropped. | MUST be dropped. | |||
| OrigNode can include multiple TargNode addresses via multiple AODV- | OrigNode can include multiple TargNode addresses via multiple ART | |||
| RPL Target Options in the RREQ-DIO, for routes that share the same | options in the RREQ-DIO, for routes that share the same requirement | |||
| requirement on metrics. This reduces the cost to building only one | on metrics. This reduces the cost to building only one DODAG for | |||
| DODAG for multiple targets. | multiple targets. | |||
| 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 | Dest SeqNo |X|Prefix Length| | | Option Type | Option Length | Dest SeqNo |X|Prefix Length| | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| + | | + | | |||
| | Target Prefix / Address (Variable Length) | | | Target Prefix / Address (Variable Length) | | |||
| . . | . . | |||
| . . | . . | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ . . . | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ . . . | |||
| 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 (TBD4) | 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 | |||
| A one-bit reserved field. This field MUST be initialized to zero | 1-bit Reserved field. This field MUST be initialized to zero by | |||
| 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 | |||
| an IPv6 address, not a prefix. | an IPv6 address, not a prefix. | |||
| Target Prefix / Address | Target Prefix / Address | |||
| (variable-length field) An IPv6 destination address or prefix. | A variable-length field with an IPv6 destination address or | |||
| The length of the Target Prefix / Address field is the least | prefix. The length of the Target Prefix / Address field is the | |||
| number of octets that can represent all of the bits of the Prefix, | least number of octets that can represent all of the bits of the | |||
| in other words Ceil(Prefix Length/8) octets. When Prefix Length | Prefix, in other words, Ceil(Prefix Length/8) octets. When Prefix | |||
| is not equal to 8*Ceil(Prefix Length/8) and nonzero, the Target | Length is not equal to 8*Ceil(Prefix Length/8) and nonzero, the | |||
| Prefix / Address field will contain some initial bits that are not | Target Prefix / Address field will contain some initial bits that | |||
| part of the Target Prefix. Those initial bits (if any) MUST be | are not part of the Target Prefix. Those initial bits (if any) | |||
| set to zero on transmission and MUST be ignored on receipt. If | MUST be set to zero on transmission and MUST be ignored on | |||
| Prefix Length is zero, the Address field is 128 bits. | receipt. If Prefix Length is zero, the Address field is 128 bits. | |||
| 5. Symmetric and Asymmetric Routes | 5. Symmetric and Asymmetric Routes | |||
| Links are considered symmetric until indication to the contrary is | Links are considered symmetric until indication to the contrary is | |||
| received. In Figure 4 and Figure 5, BR is the Border Router, O is | received. In Figures 4 and 5, BR is the Border Router, O is the | |||
| the OrigNode, each R is an intermediate router, and T is the | OrigNode, each R is an intermediate router, and T is the TargNode. | |||
| TargNode. In this example, the use of BR is only for illustrative | In these examples, the use of BR is only for illustrative purposes; | |||
| purposes; AODV does not depend on the use of border routers for its | AODV does not depend on the use of border routers for its operation. | |||
| operation. If the RREQ-DIO arrives over an interface that is known | If the RREQ-DIO arrives over an interface that is known to be | |||
| to be symmetric, and the S bit is set to 1, then it remains as 1, as | symmetric and the S bit is set to 1, then it remains as 1, as | |||
| illustrated in Figure 4. If an intermediate router sends out RREQ- | illustrated in Figure 4. If an intermediate router sends out RREQ- | |||
| DIO with the S bit set to 1, then each link en route from the | DIO with the S bit set to 1, then each link en route from the | |||
| OrigNode O to this router has met the requirements of route | OrigNode O to this router has met the requirements of route | |||
| discovery, and the route can be used symmetrically. | discovery, and the route can be used symmetrically. | |||
| BR | BR | |||
| /----+----\ | /----+----\ | |||
| / | \ | / | \ | |||
| / | \ | / | \ | |||
| R R R | R R R | |||
| skipping to change at page 15, line 28 ¶ | 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', 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 which 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) or | knowledge (e.g., link quality according to previous communication), | |||
| use 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, OAM techniques for evaluating link state (see [RFC7548], | operation, Operations, Administration, and Maintenance (OAM) | |||
| [RFC7276], [co-ioam]) MAY be used (at regular intervals appropriate | techniques for evaluating link state (see [RFC7548], [RFC7276], and | |||
| for the LLN). The evaluation procedures are out of scope for AODV- | [co-ioam]) MAY be used (at regular intervals appropriate for the | |||
| RPL. For further information on this topic, see [Link_Asymmetry], | LLN). The evaluation procedures are out of scope for AODV-RPL. For | |||
| further information on this topic, see [Link_Asymmetry], | ||||
| [low-power-wireless], and [empirical-study]. | [low-power-wireless], and [empirical-study]. | |||
| Appendix A describes an example method using the upstream Expected | Appendix A describes an example method using the upstream Expected | |||
| Number of Transmissions (ETX) and downstream Received Signal Strength | Transmission Count (ETX) and downstream Received Signal Strength | |||
| Indicator (RSSI) to estimate whether the link is symmetric in terms | Indicator (RSSI) to estimate whether the link is symmetric in terms | |||
| of link quality using an averaging technique. | of link quality using an averaging technique. | |||
| BR | BR | |||
| /----+----\ | /----+----\ | |||
| / | \ | / | \ | |||
| / | \ | / | \ | |||
| R R R | R R R | |||
| / \ | / \ | / \ | / \ | |||
| / \ | / \ | / \ | / \ | |||
| skipping to change at page 17, line 8 ¶ | skipping to change at line 703 ¶ | |||
| <--S=0-- <--S=0-- <--S=0-- <--S=0-- <--S=0-- | <--S=0-- <--S=0-- <--S=0-- <--S=0-- <--S=0-- | |||
| >---- 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 5: AODV-RPL with Asymmetric Paired Instances | Figure 5: AODV-RPL with Asymmetric Paired Instances | |||
| As illustrated in Figure 5, an intermediate router determines the S | As illustrated in Figure 5, an intermediate router determines the S | |||
| 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 | OrigNode has data to be transmitted to the TargNode but does not have | |||
| have a route that satisfies the Objective Function for the target of | a route that satisfies the OF for the target of the application's | |||
| the 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 L field such that the DODAG will | Instance. OrigNode needs to set the L field such that the DODAG will | |||
| not prematurely timeout during data transfer with the TargNode. For | not prematurely timeout during data transfer with the TargNode. For | |||
| setting this value, it has to consider factors such as Trickle timer, | setting this value, it has to consider factors such as the Trickle | |||
| TargNode hop distance, network size, link behavior, expected data | timer, TargNode hop distance, network size, link behavior, expected | |||
| usage time, and so on. | data usage time, and so on. | |||
| 6.2. Receiving and Forwarding RREQ messages | 6.2. Receiving and Forwarding RREQ Messages | |||
| 6.2.1. Step 1: RREQ reception and evaluation | 6.2.1. Step 1: RREQ Reception and Evaluation | |||
| When a router X receives a RREQ message over a link from a neighbor | When a router X receives an RREQ message over a link from a neighbor | |||
| Y, X first determines whether or not the RREQ is valid. If so, X | Y, X first determines whether or not the RREQ is valid. If valid, X | |||
| then determines whether or not it has sufficient resources available | then determines whether or not it has sufficient resources available | |||
| to maintain the RREQ-Instance and the value of the 'S' bit needed to | to maintain the RREQ-Instance and the value of the S bit needed to | |||
| process an eventual RREP, if the RREP were to be received. If not, | process an eventual RREP, if the RREP were to be received. If not | |||
| then X MUST either free up sufficient resources (the means for this | valid, then X MUST either free up sufficient resources (the means for | |||
| are beyond the scope of this document), or drop the packet and | this are beyond the scope of this document), or drop the packet and | |||
| discontinue processing of the RREQ. Otherwise, X next determines | discontinue processing of the RREQ. Otherwise, X next determines | |||
| whether the RREQ advertises a usable route to OrigNode, by checking | whether the RREQ advertises a usable route to OrigNode, by checking | |||
| whether the link to Y can be used to transmit packets to OrigNode. | whether the link to Y can be used to transmit packets to OrigNode. | |||
| When H=0 in the incoming RREQ, the router MUST drop the RREQ-DIO if | When H=0 in the incoming RREQ, the router MUST drop the RREQ-DIO if | |||
| one of its addresses is present in the Address Vector. When H=1 in | one of its addresses is present in the Address Vector. When H=1 in | |||
| the incoming RREQ, the router MUST drop the RREQ message if 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, or 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 | |||
| with lower Rank values in the same RREQ-Instance with different lists | with lower Rank values in the same RREQ-Instance with different lists | |||
| of Target Options. For the purposes of determining the intersection | of Target options. For the purposes of determining the intersection | |||
| with previous incoming RREQ-DIOs, the intermediate router maintains a | with previous incoming RREQ-DIOs, the intermediate router maintains a | |||
| 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 it | reached, and the router MUST NOT transmit any RREQ-DIO. Otherwise, | |||
| 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 be re-inserted back into the | the RREQ. Those deleted nodes are not to be reinserted back into the | |||
| list of destinations. | list of destinations. | |||
| 6.2.3. Step 3: Intermediate Router RREQ processing | 6.2.3. Step 3: Intermediate Router RREQ Processing | |||
| 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 respectively can be learned from the DODAGID and the | RPLInstanceID can be learned from the DODAGID and the RPLInstanceID | |||
| RPLInstanceID of the RREQ-DIO. 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, 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 (i.e., | 0. Otherwise, the router MUST determine whether the downward | |||
| towards the TargNode) direction of the incoming link satisfies the | direction (i.e., towards the TargNode) of the incoming link satisfies | |||
| OF. If so, the S bit of the RREQ-DIO to be transmitted is set to 1. | the OF. If it does, the S bit of the RREQ-DIO to be transmitted is | |||
| Otherwise the S bit of the RREQ-DIO to be transmitted is set to 0. | set to 1. Otherwise, the S bit of the RREQ-DIO to be transmitted is | |||
| 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 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. If, in addition, the | receiving the RREQ-DIO into the Address Vector. In addition, if the | |||
| address of the router's interface transmitting the RREQ-DIO is not | address of the router's interface transmitting the RREQ-DIO is not | |||
| the same as the address of the interface receiving the RREQ-DIO, the | the same as the address of the interface receiving the RREQ-DIO, the | |||
| router MUST also append the transmitting interface address into the | router MUST also append the transmitting interface address into the | |||
| address vector. | Address Vector. | |||
| 6.2.6. Step 6: RREQ reception at TargNode | 6.2.6. Step 6: RREQ Reception at TargNode | |||
| If the router is a TargNode and was already associated with the RREQ- | If the router is a TargNode and was already associated with the RREQ- | |||
| Instance, it takes no further action and does not send an RREP-DIO. | Instance, it takes no further action and does not send an RREP-DIO. | |||
| If TargNode is not already associated with the RREQ-Instance, it | If TargNode is not already associated with the RREQ-Instance, it | |||
| prepares and transmits a RREP-DIO, possibly after waiting for | prepares and transmits an RREP-DIO, possibly after waiting for | |||
| RREP_WAIT_TIME, as detailed in (Section 6.3). | RREP_WAIT_TIME, as detailed in (Section 6.3). | |||
| 6.3. Generating Route Reply (RREP) at TargNode | 6.3. Generating RREP at TargNode | |||
| When a TargNode receives a RREQ message over a link from a neighbor | When a TargNode receives an RREQ message over a link from a neighbor | |||
| Y, TargNode first follows the procedures in Section 6.2. If the link | Y, TargNode first follows the procedures in Section 6.2. If the link | |||
| to Y can be used to transmit packets to OrigNode, TargNode generates | to Y can be used to transmit packets to OrigNode, TargNode generates | |||
| a RREP according to the steps below. Otherwise TargNode drops the | an RREP according to Sections 6.3.1 and 6.3.2. Otherwise, TargNode | |||
| RREQ and does not generate a RREP. | drops the RREQ and does not generate an RREP. | |||
| If the L field is not 0, the TargNode MAY delay transmitting the | If the L field is not 0, the TargNode MAY delay transmitting the | |||
| RREP-DIO for duration RREP_WAIT_TIME to await a route with a lower | RREP-DIO for the duration RREP_WAIT_TIME to await a route with a | |||
| Rank. The value of RREP_WAIT_TIME is set by default to 1/4 of the | lower Rank. The value of RREP_WAIT_TIME is set by default to 1/4 of | |||
| duration determined by the L field. For L == 0, RREP_WAIT_TIME is | the duration determined by the L field. For L == 0, RREP_WAIT_TIME | |||
| set by default to 0. Depending upon the application, RREP_WAIT_TIME | is set by default to 0. Depending upon the application, | |||
| may be set to other values. Smaller values enable quicker formation | RREP_WAIT_TIME may be set to other values. Smaller values enable | |||
| for the P2P route. Larger values enable formation of P2P routes with | quicker formation for the P2P route. Larger values enable formation | |||
| 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. In case the H bit is set to 0, the address vector | Section 6.3.3. If the H bit is set to 0, the Address Vector from the | |||
| 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 TargNode, | between the same pair of OrigNode and TargNode, there can be multiple | |||
| there can be multiple AODV-RPL route discovery instances. So that | AODV-RPL route discovery instances. So that OrigNode and TargNode | |||
| OrigNode and Targnode can avoid any mismatch, they MUST pair the | can avoid any mismatch, they MUST pair the RREQ-Instance and the | |||
| RREQ-Instance and the RREP-Instance in the same route discovery by | RREP-Instance in the same route discovery by using the RPLInstanceID. | |||
| 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 which 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 re-used for two distinct DODAGs originated with the same DODAGID | were reused for two distinct DODAGs originated with the same DODAGID | |||
| (TargNode address), intermediate routers could not distinguish | (TargNode address), intermediate routers could not distinguish | |||
| between these DODAGs (and their associated Objective Functions). | between these DODAGs (and their associated OFs). Instead, the | |||
| Instead, the RPLInstanceID MUST be replaced by another value so that | RPLInstanceID MUST be replaced by another value so that the two RREP- | |||
| the two RREP-instances can be distinguished. In the RREP-DIO option, | Instances can be distinguished. In the RREP-DIO option, the Delta | |||
| the Delta field of the RREP-DIO message (Figure 2) indicates the | field of the RREP-DIO message (Figure 2) indicates the value that | |||
| value that TargNode adds to the RPLInstanceID in the RREQ-DIO that it | TargNode adds to the RPLInstanceID in the RREQ-DIO that it received, | |||
| received, to obtain the value of the RPLInstanceID it uses in the | to obtain the value of the RPLInstanceID it uses in the RREP-DIO | |||
| RREP-DIO message. 0 indicates that the RREQ-InstanceID has the same | message. 0 indicates that the RREQ-InstanceID has the same value as | |||
| value as the RPLInstanceID of the RREP message. When the new | the RPLInstanceID of the RREP message. When the new RPLInstanceID | |||
| RPLInstanceID after incrementation exceeds 255, it rolls over | after incrementation exceeds 255, it rolls over starting at 0. For | |||
| starting at 0. For example, if the RREQ-InstanceID is 252, and | example, if the RREQ-InstanceID is 252 and incremented by 6, the new | |||
| incremented by 6, the new RPLInstanceID will be 2. Related | RPLInstanceID will be 2. Related operations can be found in | |||
| operations can be found in Section 6.4. RPLInstanceID collisions do | Section 6.4. RPLInstanceID collisions do not occur across RREQ-DIOs; | |||
| not occur across RREQ-DIOs; the DODAGID equals the OrigNode address | the DODAGID equals the OrigNode address and is sufficient to | |||
| and is sufficient to disambiguate between DODAGs. | disambiguate between DODAGs. | |||
| 6.4. Receiving and Forwarding Route Reply | 6.4. Receiving and Forwarding RREP | |||
| Upon receiving a RREP-DIO, a router which already belongs to the | Upon receiving an RREP-DIO, a router that already belongs to the | |||
| RREP-Instance SHOULD drop the RREP-DIO. Otherwise the router | RREP-Instance SHOULD drop the RREP-DIO. Otherwise, the router | |||
| performs 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 the router's Rank would not exceed the RankLimit. If | whether the router's Rank would not exceed the RankLimit. If these | |||
| so, the router joins the DODAG of the RREP-Instance. The router that | are true, the router joins the DODAG of the RREP-Instance. The | |||
| transmitted the received RREP-DIO is selected as the preferred | router that transmitted the received RREP-DIO is selected as the | |||
| parent. Afterwards, other RREP-DIO messages can be received; AODV- | preferred parent. Afterwards, other RREP-DIO messages can be | |||
| RPL does not specify any action to be taken in such cases. | received; AODV-RPL does not specify any action to be 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 which 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 same source and destination address, same | A route entry with the same source and destination address and the | |||
| RPLInstanceID, but 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 | |||
| 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 case of an asymmetric route, | local route entry (H=1). Otherwise, in the case of an asymmetric | |||
| the intermediate router transmits the RREP-DIO to multicast group | route, the intermediate router transmits the RREP-DIO to multicast | |||
| all-AODV-RPL-nodes. The RPLInstanceID in the transmitted RREP-DIO is | group all-AODV-RPL-nodes. The RPLInstanceID in the transmitted RREP- | |||
| 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 message back to OrigNode | message MAY unicast a Gratuitous RREP-DIO (G-RREP-DIO) message back | |||
| before continuing the transmission of the RREQ-DIO towards TargNode. | to OrigNode before continuing the transmission of the RREQ-DIO | |||
| The Gratuitous RREP allows the OrigNode to start transmitting data to | towards TargNode. The Gratuitous RREP (G-RREP) allows the OrigNode | |||
| TargNode sooner. The G bit of the RREP option is provided to | to start transmitting data to TargNode sooner. The G bit of the RREP | |||
| distinguish the Gratuitous RREP-DIO (G=1) sent by the Intermediate | option is provided to distinguish the G-RREP-DIO (G=1) sent by the | |||
| router from the RREP-DIO sent by TargNode (G=0). | intermediate router from the RREP-DIO sent by TargNode (G=0). | |||
| The gratuitous RREP-DIO MAY be sent out when the Intermediate router | The G-RREP-DIO MAY be sent out when the intermediate router receives | |||
| receives a RREQ-DIO for a TargNode, and the router has a pair of | an RREQ-DIO for a TargNode and the router has a pair of downward and | |||
| downward and upward routes to the TargNode which also satisfy the | upward routes to the TargNode that also satisfy the OF and for which | |||
| Objective Function and for which the destination sequence number is | the Destination Sequence Number is at least as large as the Sequence | |||
| at least as large as the sequence number in the RREQ-DIO message. | Number in the RREQ-DIO message. After unicasting the G-RREP to the | |||
| After unicasting the Gratuitous RREP to the OrigNode, the | OrigNode, the intermediate router then unicasts the RREQ towards | |||
| Intermediate router then unicasts the RREQ towards TargNode, so that | TargNode, so that TargNode will have the advertised route towards | |||
| TargNode will have the advertised route towards OrigNode along with | OrigNode along with the RREQ-InstanceID for the RREQ-Instance. An | |||
| the RREQ-InstanceID for the RREQ-Instance. An upstream intermediate | upstream intermediate router that receives such a G-RREP MUST also | |||
| router that receives such a G-RREP MUST also generate a G-RREP and | generate a G-RREP and send it further upstream towards OrigNode. | |||
| send it further 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 Gratuitous | Address Vector between the OrigNode and itself in the G-RREP. It | |||
| RREP. It also includes the address vector in the unicast RREQ-DIO | also includes the Address Vector in the unicast RREQ-DIO towards | |||
| towards TargNode. Upon reception of the unicast RREQ-DIO, the | TargNode. Upon reception of the unicast RREQ-DIO, the TargNode will | |||
| TargNode will have a route address vector from itself to the | have a route Address Vector from itself to the OrigNode. Then, the | |||
| OrigNode. Then the router MUST include the address vector from the | router MUST include the Address Vector from the TargNode to the | |||
| TargNode to the router itself in the gratuitous RREP-DIO to be | router itself in the G-RREP-DIO to be transmitted. | |||
| 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 | |||
| Trickle control of these DIO transmissions follows the procedures | Trickle control of these DIO transmissions follows the procedures | |||
| described in the Section 8.3 of [RFC6550] entitled "DIO | described in Section 8.3 of [RFC6550] entitled "DIO Transmission". | |||
| Transmission". If the route is symmetric, the RREP DIO does not need | If the route is symmetric, the RREP-DIO does not need the Trickle | |||
| the Trickle timer mechanism. | timer mechanism. | |||
| 9. IANA Considerations | 9. IANA Considerations | |||
| Note to RFC editor: | AODV-RPL uses the "P2P Route Discovery Mode of Operation" (MOP == 4), | |||
| with new options as specified in this document. This document has | ||||
| The sentence "The parenthesized numbers are only suggestions." is to | been added as an additional reference for "P2P Route Discovery Mode | |||
| be removed prior publication. | of Operation" in the "Mode of Operation" registry within the "Routing | |||
| Protocol for Low Power and Lossy Networks (RPL)" registry group. | ||||
| A Subregistry in this section refers to a named sub-registry of the | IANA has assigned the three new AODV-RPL options described in Table 1 | |||
| "Routing Protocol for Low Power and Lossy Networks (RPL)" registry. | in the "RPL Control Message Options" registry within the "Routing | |||
| Protocol for Low Power and Lossy Networks (RPL)" registry group. | ||||
| AODV-RPL uses the "P2P Route Discovery Mode of Operation" (MOP == 4) | +=======+=========+===========+ | |||
| with new Options as specified in this document. Please cite AODV-RPL | | Value | Meaning | Reference | | |||
| and this document as one of the protocols using MOP 4. | +=======+=========+===========+ | |||
| | 0x0B | RREQ | RFC 9854 | | ||||
| +-------+---------+-----------+ | ||||
| | 0x0C | RREP | RFC 9854 | | ||||
| +-------+---------+-----------+ | ||||
| | 0x0D | ART | RFC 9854 | | ||||
| +-------+---------+-----------+ | ||||
| IANA is asked to assign three new AODV-RPL options "RREQ", "RREP" and | Table 1: AODV-RPL Options | |||
| "ART", as described in Figure 6 from the "RPL Control Message | ||||
| Options" Subregistry. The parenthesized numbers are only | ||||
| suggestions. | ||||
| +-------------+------------------------+---------------+ | IANA has allocated the permanent multicast address with link-local | |||
| | Value | Meaning | Reference | | scope in Table 2 for nodes implementing this specification. This | |||
| +-------------+------------------------+---------------+ | allocation has been made in the "Local Network Control Block | |||
| | TBD2 (0x0B) | RREQ Option | This document | | (224.0.0.0 - 224.0.0.255 (224.0.0/24))" registry within the "IPv4 | |||
| +-------------+------------------------+---------------+ | Multicast Address Space Registry" registry group. | |||
| | TBD3 (0x0C) | RREP Option | This document | | ||||
| +-------------+------------------------+---------------+ | ||||
| | TBD4 (0x0D) | ART Option | This document | | ||||
| +-------------+------------------------+---------------+ | ||||
| Figure 6: AODV-RPL Options | +=============+====================+============+ | |||
| | Address(es) | Description | References | | ||||
| +=============+====================+============+ | ||||
| | 224.0.0.69 | all-AODV-RPL-nodes | RFC 9854 | | ||||
| +-------------+--------------------+------------+ | ||||
| IANA is requested to allocate a new permanent multicast address with | Table 2: Permanent Multicast Address with | |||
| link-local scope called all-AODV-RPL-nodes for nodes implementing | Link-Local Scope | |||
| this specification from the "Local Network Control Block (224.0.0.0 - | ||||
| 224.0.0.255 (224.0.0/24))" registry in the "IPv4 Multicast Address | ||||
| Space Registry" group. | ||||
| 10. Security Considerations | 10. Security Considerations | |||
| The security considerations for the operation of AODV-RPL are similar | The security considerations for the operation of AODV-RPL are similar | |||
| to those for the operation of RPL (as described in Section 19 of the | to those for the operation of RPL (as described in Section 19 of the | |||
| RPL specification [RFC6550]). Sections 6.1 and 10 of [RFC6550] | RPL specification [RFC6550]). Sections 6.1 and 10 of [RFC6550] | |||
| describe RPL's optional security framework, which AODV-RPL relies on | describe RPL's optional security framework, which AODV-RPL relies on | |||
| to provide data confidentiality, authentication, replay protection, | to provide data confidentiality, authentication, replay protection, | |||
| and delay protection services. Additional analysis for the security | and delay protection services. Additional analysis for the security | |||
| threats to RPL can be found in [RFC7416]. | threats to RPL can be found in [RFC7416]. | |||
| skipping to change at page 26, line 44 ¶ | skipping to change at line 1159 ¶ | |||
| discovery only if it can support the security configuration in use | discovery only if it can support the security configuration in use | |||
| (see Section 6.1 of [RFC6550]), which also specifies the key in use. | (see Section 6.1 of [RFC6550]), which also specifies the key in use. | |||
| It does not matter whether the key is preinstalled or dynamically | It does not matter whether the key is preinstalled or dynamically | |||
| acquired. The router must have the key in use before it can join the | acquired. The router must have the key in use before it can join the | |||
| DAG being created for secure route discovery. | DAG being created for secure route discovery. | |||
| If a rogue router knows the key for the security configuration in | If a rogue router knows the key for the security configuration in | |||
| use, it can join the secure AODV-RPL route discovery and cause | use, it can join the secure AODV-RPL route discovery and cause | |||
| 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 gratuitous RREP, it could mount | ||||
| denial-of-service attacks. | ||||
| 11. Acknowledgements | ||||
| The authors thank Pascal Thubert, Rahul Jadhav, and Lijo Thomas for | ||||
| their support and valuable inputs. The authors specially thank | ||||
| Lavanya H.M for implementing AODV-RPl in Contiki and conducting | ||||
| extensive simulation studies. | ||||
| The authors would like to acknowledge the review, feedback and | If a rogue router is able to forge a G-RREP, it could mount denial- | |||
| comments from the following people, in alphabetical order: Roman | of-service attacks. | |||
| Danyliw, Lars Eggert, Benjamin Kaduk, Tero Kivinen, Erik Kline, | ||||
| Murray Kucherawy, Warren Kumari, Francesca Palombini, Alvaro Retana, | ||||
| Ines Robles, John Scudder, Meral Shirazipour, Peter Van der Stok, | ||||
| Eric Vyncke, and Robert Wilton. | ||||
| 12. References | 11. References | |||
| 12.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, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC6206] Levis, P., Clausen, T., Hui, J., Gnawali, O., and J. Ko, | [RFC6206] Levis, P., Clausen, T., Hui, J., Gnawali, O., and J. Ko, | |||
| "The Trickle Algorithm", RFC 6206, DOI 10.17487/RFC6206, | "The Trickle Algorithm", RFC 6206, DOI 10.17487/RFC6206, | |||
| March 2011, <https://www.rfc-editor.org/info/rfc6206>. | March 2011, <https://www.rfc-editor.org/info/rfc6206>. | |||
| skipping to change at page 28, line 9 ¶ | skipping to change at line 1205 ¶ | |||
| [RFC6551] Vasseur, JP., Ed., Kim, M., Ed., Pister, K., Dejean, N., | [RFC6551] Vasseur, JP., Ed., Kim, M., Ed., Pister, K., Dejean, N., | |||
| and D. Barthel, "Routing Metrics Used for Path Calculation | and D. Barthel, "Routing Metrics Used for Path Calculation | |||
| in Low-Power and Lossy Networks", RFC 6551, | in Low-Power and Lossy Networks", RFC 6551, | |||
| DOI 10.17487/RFC6551, March 2012, | DOI 10.17487/RFC6551, March 2012, | |||
| <https://www.rfc-editor.org/info/rfc6551>. | <https://www.rfc-editor.org/info/rfc6551>. | |||
| [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>. | |||
| 12.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 , | Workshop on Mobile Computing Systems and Applications, pp. | |||
| February 1999. | 90-100, DOI 10.1109/MCSA.1999.749281, February 1999, | |||
| <https://ieeexplore.ieee.org/document/749281>. | ||||
| [co-ioam] Rashmi Ballamajalu, Anand, S.V.R., and Malati Hegde, "Co- | [co-ioam] Ballamajalu, R., Anand, S.V.R., and M. Hegde, "Co-iOAM: | |||
| 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] Contiki contributors, "The Contiki Open Source OS for the | [contiki] "The Contiki Open Source OS for the Internet of Things | |||
| Internet of Things (Contiki Version 2.7)", 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 contributors, "Contiki-NG: The OS for Next | "Contiki-NG: The OS for Next Generation IoT Devices | |||
| Generation IoT Devices (Contiki-NG Version 4.6)", December | (Contiki-NG Version 4.6)", commit 3b0bc6a, December 2020, | |||
| 2020, <https://github.com/contiki-ng/contiki-ng>. | <https://github.com/contiki-ng/contiki-ng>. | |||
| [cooja] Contiki/Cooja contributors, "Cooja Simulator for Wireless | [cooja] "Cooja Simulator for Wireless Sensor Networks (Contiki/ | |||
| Sensor Networks (Contiki/Cooja Version 2.7)", November | Cooja Version 2.7)", commit 7635906, November 2013, | |||
| 2013, <https://github.com/contiki- | <https://github.com/contiki-os/contiki/tree/master/tools/ | |||
| os/contiki/tree/master/tools/cooja>. | cooja>. | |||
| [empirical-study] | [empirical-study] | |||
| Prasant Misra, Nadeem Ahmed, and Sanjay Jha, "An empirical | Misra, P., Ahmed, N., and S. Jha, "An empirical study of | |||
| study of asymmetry in low-power wireless links", IEEE | asymmetry in low-power wireless links", IEEE | |||
| Communications Magazine (Volume: 50, Issue: 7), July 2012. | Communications Magazine, vol. 50, no. 7, pp. 137-146, | |||
| DOI 10.1109/MCOM.2012.6231290, July 2012, | ||||
| <https://ieeexplore.ieee.org/document/6231290>. | ||||
| [Link_Asymmetry] | [Link_Asymmetry] | |||
| Lifeng Sang, Anish Arora, and Hongwei Zhang, "On Link | Sang, L., Arora, A., and H. Zhang, "On Link Asymmetry and | |||
| Asymmetry and One-way Estimation in Wireless Sensor | One-way Estimation in Wireless Sensor Networks", ACM | |||
| Networks", ACM Transactions on Sensor Networks, Volume 6 | Transactions on Sensor Networks, vol. 6, no. 2, pp. 1-25, | |||
| Issue 2 pp.1-25, February 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] | |||
| Kannan Srinivasan, Prabal Dutta, Arsalan Tavakoli, and | Srinivasan, K., Dutta, P., Tavakoli, A., and P. Levis, "An | |||
| Philip Levis, "An empirical study of low-power wireless", | empirical study of low-power wireless", ACM Transactions | |||
| ACM Transactions on Sensor Networks (Volume 6 Issue 2 | on Sensor Networks, vol. 6, no. 2, pp. 1-49, | |||
| pp.1-49), February 2010, | DOI 10.1145/1689239.1689246, March 2010, | |||
| <https://doi.org/10.1145/1689239.1689246>. | <https://doi.org/10.1145/1689239.1689246>. | |||
| [RFC3561] Perkins, C., Belding-Royer, E., and S. Das, "Ad hoc On- | [RFC3561] Perkins, C., Belding-Royer, E., and S. Das, "Ad hoc On- | |||
| Demand Distance Vector (AODV) Routing", RFC 3561, | Demand Distance Vector (AODV) Routing", RFC 3561, | |||
| DOI 10.17487/RFC3561, July 2003, | DOI 10.17487/RFC3561, July 2003, | |||
| <https://www.rfc-editor.org/info/rfc3561>. | <https://www.rfc-editor.org/info/rfc3561>. | |||
| [RFC6687] Tripathi, J., Ed., de Oliveira, J., Ed., and JP. Vasseur, | [RFC6687] Tripathi, J., Ed., de Oliveira, J., Ed., and JP. Vasseur, | |||
| Ed., "Performance Evaluation of the Routing Protocol for | Ed., "Performance Evaluation of the Routing Protocol for | |||
| Low-Power and Lossy Networks (RPL)", RFC 6687, | Low-Power and Lossy Networks (RPL)", RFC 6687, | |||
| skipping to change at page 30, line 5 ¶ | skipping to change at line 1296 ¶ | |||
| and M. Richardson, Ed., "A Security Threat Analysis for | and M. Richardson, Ed., "A Security Threat Analysis for | |||
| the Routing Protocol for Low-Power and Lossy Networks | the Routing Protocol for Low-Power and Lossy Networks | |||
| (RPLs)", RFC 7416, DOI 10.17487/RFC7416, January 2015, | (RPLs)", RFC 7416, DOI 10.17487/RFC7416, January 2015, | |||
| <https://www.rfc-editor.org/info/rfc7416>. | <https://www.rfc-editor.org/info/rfc7416>. | |||
| [RFC7548] Ersue, M., Ed., Romascanu, D., Schoenwaelder, J., and A. | [RFC7548] Ersue, M., Ed., Romascanu, D., Schoenwaelder, J., and A. | |||
| Sehgal, "Management of Networks with Constrained Devices: | Sehgal, "Management of Networks with Constrained Devices: | |||
| Use Cases", RFC 7548, DOI 10.17487/RFC7548, May 2015, | Use Cases", RFC 7548, DOI 10.17487/RFC7548, May 2015, | |||
| <https://www.rfc-editor.org/info/rfc7548>. | <https://www.rfc-editor.org/info/rfc7548>. | |||
| [RFC7991] Hoffman, P., "The "xml2rfc" Version 3 Vocabulary", | ||||
| RFC 7991, DOI 10.17487/RFC7991, December 2016, | ||||
| <https://www.rfc-editor.org/info/rfc7991>. | ||||
| [RFC9010] Thubert, P., Ed. and M. Richardson, "Routing for RPL | [RFC9010] Thubert, P., Ed. and M. Richardson, "Routing for RPL | |||
| (Routing Protocol for Low-Power and Lossy Networks) | (Routing Protocol for Low-Power and Lossy Networks) | |||
| Leaves", RFC 9010, DOI 10.17487/RFC9010, April 2021, | Leaves", RFC 9010, DOI 10.17487/RFC9010, April 2021, | |||
| <https://www.rfc-editor.org/info/rfc9010>. | <https://www.rfc-editor.org/info/rfc9010>. | |||
| [RFC9030] Thubert, P., Ed., "An Architecture for IPv6 over the Time- | [RFC9030] Thubert, P., Ed., "An Architecture for IPv6 over the Time- | |||
| Slotted Channel Hopping Mode of IEEE 802.15.4 (6TiSCH)", | Slotted Channel Hopping Mode of IEEE 802.15.4 (6TiSCH)", | |||
| RFC 9030, DOI 10.17487/RFC9030, May 2021, | RFC 9030, DOI 10.17487/RFC9030, May 2021, | |||
| <https://www.rfc-editor.org/info/rfc9030>. | <https://www.rfc-editor.org/info/rfc9030>. | |||
| Appendix A. Example: Using ETX/RSSI Values to determine value of S bit | Appendix A. Example: Using ETX/RSSI Values to Determine Value of S Bit | |||
| The combination of Received Signal Strength Indication(downstream) | The combination of the downstream Received Signal Strength Indicator | |||
| (RSSI) and Expected Number of Transmissions(upstream) (ETX) has been | (RSSI) and the upstream Expected Transmission Count (ETX) has been | |||
| tested to determine whether a link is symmetric or asymmetric at | tested to determine whether a link is symmetric or asymmetric at | |||
| intermediate routers. We present two methods to obtain an ETX value | intermediate routers. We present two methods to obtain an ETX value | |||
| from RSSI measurement. | from RSSI measurement. | |||
| Method 1: In the first method, we constructed a table measuring RSSI | Method 1: In the first method, we constructed a table measuring RSSI | |||
| vs ETX using the Cooja simulation [cooja] setup in the Contiki OS | versus ETX using the Cooja simulation [cooja] setup in the Contiki | |||
| environment[contiki]. We used Contiki-2.7 running 6LoWPAN/RPL | OS environment [contiki]. We used Contiki-2.7 running the | |||
| protocol stack for the simulations. For approximating the number | 6LoWPAN/RPL protocol stack for the simulations. For approximating | |||
| of packet drops based on the RSSI values, we implemented simple | the number of packet drops based on the RSSI values, we | |||
| logic that drops transmitted packets with certain pre-defined | implemented simple logic that drops transmitted packets with | |||
| ratios before handing over the packets to the receiver. The | certain predefined ratios before handing over the packets to the | |||
| packet drop ratio is implemented as a table lookup of RSSI ranges | receiver. The packet drop ratio is implemented as a table lookup | |||
| mapping to different packet drop ratios with lower RSSI ranges | of RSSI ranges mapping to different packet drop ratios with lower | |||
| resulting in higher values. While this table has been defined for | RSSI ranges resulting in higher values. While this table has been | |||
| the purpose of capturing the overall link behavior, it is highly | defined for the purpose of capturing the overall link behavior, in | |||
| recommended to conduct physical radio measurement experiments, in | general, it is highly recommended to conduct physical radio | |||
| general. By keeping the receiving node at different distances, we | measurement experiments. By keeping the receiving node at | |||
| let the packets experience different packet drops as per the | different distances, we let the packets experience different | |||
| described method. The ETX value computation is done by another | packet drops as per the described method. The ETX value | |||
| module which is part of RPL Objective Function implementation. | computation is done by another module that is part of RPL OF | |||
| Since ETX value is reflective of the extent of packet drops, it | implementation. Since the ETX value is reflective of the extent | |||
| allowed us to prepare a useful ETX vs RSSI table. ETX versus RSSI | of packet drops, it allowed us to prepare a useful table | |||
| correlating ETX and RSSI values (see Table 3). ETX and RSSI | ||||
| values obtained in this way may be used as explained below: | values obtained in this way may be used as explained below: | |||
| Source -------> NodeA -------> NodeB -----> Destination | Source -------> NodeA -------> NodeB -----> Destination | |||
| Figure 7: Communication link from Source to Destination | Figure 6: Communication Link from Source to Destination | |||
| +=========================+========================================+ | +=========================+=======================+ | |||
| | RSSI at NodeA for NodeB | Expected ETX at NodeA for NodeB->NodeA | | | RSSI at NodeA for NodeB | Expected ETX at NodeA | | |||
| +=========================+========================================+ | | | for NodeB->NodeA | | |||
| | > -60 | 150 | | +=========================+=======================+ | |||
| +-------------------------+----------------------------------------+ | | > -60 | 150 | | |||
| | -70 to -60 | 192 | | +-------------------------+-----------------------+ | |||
| +-------------------------+----------------------------------------+ | | -70 to -60 | 192 | | |||
| | -80 to -70 | 226 | | +-------------------------+-----------------------+ | |||
| +-------------------------+----------------------------------------+ | | -80 to -70 | 226 | | |||
| | -90 to -80 | 662 | | +-------------------------+-----------------------+ | |||
| +-------------------------+----------------------------------------+ | | -90 to -80 | 662 | | |||
| | -100 to -90 | 3840 | | +-------------------------+-----------------------+ | |||
| +-------------------------+----------------------------------------+ | | -100 to -90 | 3840 | | |||
| +-------------------------+-----------------------+ | ||||
| Table 1: Selection of S bit based on Expected ETX value | Table 3: Selection of S Bit Based on Expected | |||
| ETX Value | ||||
| Method 2: One could also make use of the function | Method 2: One could also make use of the function | |||
| guess_etx_from_rssi() defined in the 6LoWPAN/RPL protocol stack of | guess_etx_from_rssi() defined in the 6LoWPAN/RPL protocol stack of | |||
| Contiki-ng OS [Contiki-ng] to obtain RSSI-ETX mapping. This | Contiki-ng OS [Contiki-ng] to obtain RSSI-ETX mapping. This | |||
| function outputs ETX value ranging between 128 and 3840 for -60 <= | function outputs an ETX value ranging between 128 and 3840 for -60 | |||
| rssi <= -89. The function description is beyond the scope of this | <= rssi <= -89. The function description is beyond the scope of | |||
| document. | this document. | |||
| We tested the operations in this specification by making the | We tested the operations in this specification by making the | |||
| following experiment, using the above parameters. In our experiment, | following experiment, using the above parameters. In our experiment, | |||
| a communication link is considered as symmetric if the ETX value of | a communication link is considered as symmetric if the ETX value of | |||
| NodeA->NodeB and NodeB->NodeA (see Figure 7) are within, say, a 1:3 | NodeA->NodeB and NodeB->NodeA (see Figure 6) are within, say, a 1:3 | |||
| ratio. This ratio should be understood as determining the link's | ratio. This ratio should be understood as determining the link's | |||
| symmetric/asymmetric nature. NodeA can typically know the ETX value | symmetric/asymmetric nature. NodeA can typically know the ETX value | |||
| in the direction of NodeA -> NodeB but it has no direct way of | in the direction of NodeA->NodeB, but it has no direct way of knowing | |||
| knowing the value of ETX from NodeB->NodeA. Using physical testbed | the value of ETX from NodeB->NodeA. Using physical testbed | |||
| experiments and realistic wireless channel propagation models, one | experiments and realistic wireless channel propagation models, one | |||
| can determine a relationship between RSSI and ETX representable as an | can determine a relationship between RSSI and ETX representable as an | |||
| expression or a mapping table. Such a relationship in turn can be | expression or a mapping table. Such a relationship, in turn, can be | |||
| used to estimate ETX value at nodeA for link NodeB--->NodeA from the | used to estimate the ETX value at NodeA for link NodeB->NodeA from | |||
| received RSSI from NodeB. Whenever nodeA determines that the link | the received RSSI from NodeB. Whenever NodeA determines that the | |||
| towards the nodeB is bi-directional asymmetric then the S bit is set | link towards the NodeB is bidirectional asymmetric, then the S bit is | |||
| to 0. Afterwards, the link from NodeA to Destination remains | set to 0. Afterwards, the link from NodeA to Destination remains | |||
| designated as asymmetric and the S bit remains set to 0. | designated as asymmetric, and the S bit remains set to 0. | |||
| Determination of asymmetry versus bidirectionality remains a topic of | Determination of asymmetry versus bidirectionality remains a topic of | |||
| lively discussion in the IETF. | lively discussion in the IETF. | |||
| Appendix B. Some Example AODV-RPL Message Flows | Appendix B. Some Example AODV-RPL Message Flows | |||
| This appendix provides some example message flows showing RREQ and | This appendix provides some example message flows showing RREQ and | |||
| RREP establishing symmetric and asymmetric routes. Also, examples | RREP establishing symmetric and asymmetric routes. Also, examples | |||
| for the use of RREP_WAIT and G-RREP are included. In the examples, | for the use of RREP_WAIT and G-RREP are included. In the examples, | |||
| router (O) is to be understood as performing the role of OrigNode. | router (O) is to be understood as performing the role of OrigNode. | |||
| Router (T) is to be understood as performing the role of TargNode. | Router (T) is to be understood as performing the role of TargNode. | |||
| Routers (R) are intermediate routers that are performing AODV-RPL | Routers (R) are intermediate routers that are performing AODV-RPL | |||
| functions in order to discover one or more suitable routes between | functions in order to discover one or more suitable routes between | |||
| (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 ^ | |||
| | \ (S=1) (S=0) (S=0) | | | \ (S=1) (S=0) (S=0) | | |||
| | \ / | | \ / | |||
| RREQ | \ RREQ (S=1) RREQ (S=0) | RREQ | \ RREQ (S=1) RREQ (S=0) | |||
| (S=0) | \ / | (S=0) | \ / | |||
| v \ RREQ (S=0) / | v \ RREQ (S=0) / | |||
| (R) ---->(R)------>(R)----.....--->(R) | (R) ---->(R)------>(R)----.....--->(R) | |||
| Figure 8: AODV-RPL RREQ message flow example when symmetric path | Figure 7: AODV-RPL RREQ Message Flow Example When Symmetric Path | |||
| available | Available | |||
| In the following diagram which results from the above RREQ message | In the following diagram, which results from the above RREQ message | |||
| transmission, a symmetric route is available from (T) to router (O) | transmission, a symmetric route is available from (T) to router (O) | |||
| via the routers in the top half of the diagram. RREP messages are | via the routers in the top half of the diagram. RREP messages are | |||
| sent via unicast along the symmetric route. Since the RREP message | sent via unicast along the symmetric route. Since the RREP message | |||
| is transmitted via unicast, no RREP messages are sent by router (T) | is transmitted via unicast, no RREP messages are sent by router (T) | |||
| to the routers in the bottom half of the diagram. | to the routers in the bottom half of the diagram. | |||
| (R)<------RREP----- (R)<------RREP----- (R) | (R)<------RREP----- (R)<------RREP----- (R) | |||
| | ^ | | ^ | |||
| | | | | | | |||
| RREP RREP | RREP RREP | |||
| skipping to change at page 33, line 27 ¶ | skipping to change at line 1448 ¶ | |||
| v | | v | | |||
| (O) ----------(R) ----------(R) --------(T) | (O) ----------(R) ----------(R) --------(T) | |||
| / \ | | / \ | | |||
| | \ | | | \ | | |||
| | \ (no RREP messages sent) / | | \ (no RREP messages sent) / | |||
| | \ / | | \ / | |||
| | \ / | | \ / | |||
| | \ / | | \ / | |||
| (R) -----(R)-------(R)----.....----(R) | (R) -----(R)-------(R)----.....----(R) | |||
| Figure 9: AODV-RPL RREP message flow example when symmetric path | Figure 8: AODV-RPL RREP Message Flow Example When Symmetric Path | |||
| available | Available | |||
| 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) as before. As | in order to discover routes to and from router (T) as before. As | |||
| shown, no symmetric route is available from (O) to (T). | shown, no symmetric route is available from (O) to (T). | |||
| (R) ---RREQ(S=0)--->(R) ---RREQ(S=0)--->(R) | (R) ---RREQ(S=0)--->(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) | | | |||
| | \ / | | | \ / | | |||
| | 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 10: 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 10, Router (T) then prepares to | Upon receiving the RREQ in Figure 9, router (T) then prepares to send | |||
| send a RREP that would enable router (O) to send packets to router | an RREP that would enable router (O) to send packets to router (T). | |||
| (T). In Figure 10, since no symmetric route is available from (T) to | In Figure 9, since no symmetric route is available from (T) to router | |||
| router (O), RREP messages are sent via multicast to all neighboring | (O), RREP messages are sent via multicast to all neighboring routers. | |||
| routers. | ||||
| (R)<------RREP----- (R)<------RREP----- (R) | (R)<------RREP----- (R)<------RREP----- (R) | |||
| | | | | | | |||
| | | | | | | |||
| RREP RREP | RREP RREP | |||
| | | | | | | |||
| | | | | | | |||
| v v | v v | |||
| (O)<--------- (R)<--------- (R)<------- (T) | (O)<--------- (R)<--------- (R)<------- (T) | |||
| ^ \ RREP RREP RREP | \ | ^ \ RREP RREP RREP | \ | |||
| | \ | |RREP | | \ | |RREP | |||
| | \ / | | | \ / | | |||
| RREP | \ RREP RREP / (R) | RREP | \ RREP RREP / (R) | |||
| | \ / | | | \ / | | |||
| | \ / / | | \ / / | |||
| (R)<----- (R)<----- (R)<---.....---- (R)< - RREP | (R)<----- (R)<----- (R)<---.....---- (R)< - RREP | |||
| RREP RREP RREP | RREP RREP RREP | |||
| Figure 11: AODV-RPL RREQ and RREP Instances for Asymmetric Links | Figure 10: AODV-RPL RREQ and RREP-Instances for Asymmetric Links | |||
| B.2. Example RREP_WAIT handling | B.2. Example RREP_WAIT Handling | |||
| In Figure 12, the first RREQ arrives at (T). This triggers TargNode | In Figure 11, the first RREQ arrives at (T). This triggers TargNode | |||
| to start RREP_WAIT_TIME timer. | to start the RREP_WAIT_TIME timer. | |||
| (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) | |||
| Figure 12: TargNode starts RREP_WAIT | Figure 11: TargNode Starts RREP_WAIT | |||
| In Figure 13, another RREQ arrives before RREP_WAIT_TIME timer is | In Figure 12, another RREQ arrives before the RREP_WAIT_TIME timer is | |||
| expired. It could be preferable compared the previously received | expired. It could be preferable compared the previously received | |||
| RREP that caused the RREP_WAIT_TIME timer to be set. | RREP that caused the RREP_WAIT_TIME timer to be set. | |||
| (O) (T) | (O) (T) | |||
| / \ ^ | / \ ^ | |||
| | \ | | | \ | | |||
| | \ / | | \ / | |||
| RREQ | \ RREQ (S=1) RREQ (S=0) | RREQ | \ RREQ (S=1) RREQ (S=0) | |||
| (S=0) | \ / | (S=0) | \ / | |||
| v \ RREQ (S=0) / | v \ RREQ (S=0) / | |||
| (R) ---->(R)------>(R)----.....--->(R) | (R) ---->(R)------>(R)----.....--->(R) | |||
| Figure 13: Waiting TargNode receives preferable RREQ | Figure 12: Waiting TargNode Receives Preferable RREQ | |||
| In Figure 14, the RREP_WAIT_TIME timer expires. TargNode selects the | In Figure 13, the RREP_WAIT_TIME timer expires. TargNode selects the | |||
| path with S=1. | path with S=1. | |||
| (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) (T) | (O) (T) | |||
| Figure 14: 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 15, R* has upward and downward routes to TargNode (T) that | In Figure 14, R* has upward and downward routes to TargNode (T) that | |||
| satisfies OF of RPL Instance originated by OrigNode (O) and | satisfy the OF of the RPL Instance originated by OrigNode (O), and | |||
| 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) | | |||
| | \ / | | \ / | |||
| RREQ | \ RREQ (S=1) / | RREQ | \ RREQ (S=1) / | |||
| (S=0) | \ / | (S=0) | \ / | |||
| v \ v | v \ v | |||
| (R) ---->(R*)<------>(R)<----....--->(R) | (R) ---->(R*)<------>(R)<----....--->(R) | |||
| Figure 15: RREP triggers G-RREP at Intermediate Node | Figure 14: RREP Triggers G-RREP at Intermediate Node | |||
| In Figure 16, R* transmits the G-RREP DIO back to OrigNode (O) and | In Figure 15, R* transmits the G-RREP-DIO back to OrigNode (O) and | |||
| forwards the incoming RREQ towards (T). | forwards the incoming RREQ towards (T). | |||
| (O) (T) | (O) (T) | |||
| \ ^ | \ ^ | |||
| \ | | \ | | |||
| \ (RREQ) / | \ (RREQ) / | |||
| \ G-RREP DIO / | \ G-RREP-DIO / | |||
| \ / | \ / | |||
| \ (RREQ) (RREQ) / | \ (RREQ) (RREQ) / | |||
| (R*)------>(R)----....--->(R) | (R*)------>(R)----....--->(R) | |||
| Figure 16: Intermediate Node initiates G-RREP | Figure 15: Intermediate Node Initiates G-RREP | |||
| Appendix C. Changelog | ||||
| Note to the RFC Editor: please remove this section before | ||||
| publication. | ||||
| C.1. Changes from version 19 to version 20 | ||||
| * Changed Option Format drawings to avoid suggesting that the Option | ||||
| Length is a multiple of 4 bytes for AODV-RPL options. | ||||
| * Deleted the terms "on-demand routing" and "reactive routing" from | ||||
| the Terminology list. In the overview, explained those two terms | ||||
| as an illustration for the protocol design goals. | ||||
| * In Section 9, to improve readability, explicitly named the "Local | ||||
| Network Control Block (224.0.0.0 - 224.0.0.255 (224.0.0/24))" | ||||
| registry in the "IPv4 Multicast Address Space Registry" as the | ||||
| relevant registries. | ||||
| * Changed "must" to "MUST", so that "the selected address MUST | ||||
| encompass the domain where the route is built". | ||||
| * Inserted language allowing a node X to free up sufficient | ||||
| resources for a particular RREQ instead of dropping it, when | ||||
| resources are not already available upon reception of that RREQ. | ||||
| * New author's address, minor editorial. | ||||
| C.2. Changes from version 18 to version 19 | ||||
| * Observed the difference in address ordering in the Address Vector, | ||||
| depending on whether or not the RREP is returning a symmetric | ||||
| route. Specified that the prefix of each address is elided | ||||
| according to the Compr field. | ||||
| * Added length specification for byte-sized message fields, which | ||||
| had previously relied on implicit length specification from the | ||||
| message's packet format diagram. | ||||
| * Added clarifying language for handling of initial zero bits in | ||||
| some cases for the Target Prefix / Address field. | ||||
| * Updated specification regarding the need for a router to ensure | ||||
| the availability of RREQ state information when processing a | ||||
| corresponding RREP. | ||||
| * Replaced GRREP by G-RREP when describing Gratuitous RREP. | ||||
| * Updated affiliations for Charles Perkins, Abdur Rashid Sangi and | ||||
| email address for S.V.R. Anand. | ||||
| * Corrected misspellings, typos. | ||||
| C.3. Changes from version 17 to version 18 | ||||
| * Replaced "on-demand nature of AODV route discovery is natural" by | ||||
| "on-demand property of AODV route discovery is useful" in | ||||
| Section 1. | ||||
| * In Section 6.2.4, instead of describing an option to "associate | ||||
| the Address Vector of the symmetric route ..." to the RREQ- | ||||
| Instance, reformulated the description as an option to "include | ||||
| the Address Vector of the symmetric route ..." as part of the | ||||
| RREQ-Instance in Section 6.2.4. | ||||
| * Changed from v2-style RFC citations to using Xinclude as specified | ||||
| in [RFC7991]. | ||||
| C.4. Changes from version 16 to version 17 | ||||
| * Added new Terminology definitions for RREQ, RREP, OF. | ||||
| * Added clarifying detail about some kinds of improved routes | ||||
| discoverable by AODV-RPL. | ||||
| * Added forward reference explaining how RREP-InstanceID is matched | ||||
| with the proper RREQ-InstanceID. | ||||
| * Added explanation about the function of the 'D' bit of the | ||||
| RPLInstanceID. | ||||
| * Provided detail about why a node should leave the RREQ-Instance | ||||
| after the specified amount of time. | ||||
| * Specified that "An upstream intermediate router that receives such | ||||
| a G-RREP MUST also generate a G-RREP and send it further upstream | ||||
| towards OrigNode." | ||||
| * Added more illustrative diagrams in new Appendix B. Example | ||||
| diagrams show control message flows for RREQ and for RREP in cases | ||||
| when symmetric route is either available or not available. The | ||||
| use of RREP_WAIT and G-RREP is also illustrated in other new | ||||
| diagrams. | ||||
| * Included the reasoning for using intersections of RREQ target | ||||
| lists in Section 6.2.2. | ||||
| * Various editorial improvements and clarifications. | ||||
| C.5. Changes from version 15 to version 16 | ||||
| * Modified language to be more explicit about when AODV-RPL is | ||||
| likely to produce preferable routes compared to routing protocols | ||||
| that are constrained to traverse common ancestors. | ||||
| * Added explanation that the way AODV-RPL uses the Rank function | ||||
| does not express a distance or a path cost to the root. | ||||
| * Added a citation suggesting AODV-RPL's likely improvements in | ||||
| routing costs. | ||||
| C.6. Changes from version 14 to version 15 | ||||
| * Clarified that AODV-RPL treats the addresses of multiple | ||||
| interfaces on the same router as the addresses of independent | ||||
| routers. | ||||
| * Added details about cases when proactive route establishment is | ||||
| preferable to AODV-RPL's reactive route establishment. | ||||
| * Various editorial stylistic improvements. | ||||
| * Added citations about techniques that can be used for evaluating a | ||||
| link's state. | ||||
| * Clarified that the determination of TargNode status and | ||||
| determination of a usable route to OrigNode does not depend on | ||||
| whether or not S == 0. | ||||
| * Clarified that AODV-RPL does not specify any action to be taken | ||||
| when multiple RREP-DIO messages are received and the S-bit of the | ||||
| RREQ-Instance is 0. | ||||
| C.7. Changes from version 13 to version 14 | ||||
| * Provided more details about scenarios naturally supporting the | ||||
| choice of AODV-RPL as a routing protocol | ||||
| * Added new informative references [RFC6687], [RFC9010]) that | ||||
| describe the value provided by peer-to-peer routing. | ||||
| * Requested IANA to allocate a new multicast group to enable clean | ||||
| separation of AODV-RPL operation from previous routing protocols | ||||
| in the RPL family. | ||||
| * Cited [RFC6550] as the origination of the definition of DIO | ||||
| * Defined "hop-by-hop route" as a route created using RPL's storing | ||||
| mode. | ||||
| * Defined new configuration variable REJOIN_REENABLE. | ||||
| * Improved definition for RREQ-InstanceID. Created analogous | ||||
| definition for RREP-InstanceID=(RPLInstanceID, TargNode_IPaddr) | ||||
| * Improved definition of source routing | ||||
| * Clarified that the Border Router (BR) in Figure 4 does not imply | ||||
| that AODV does not a require a BR as a protocol entity. | ||||
| * Provided more guidelines about factors to be considered by | ||||
| OrigNode when selecting a value for the 'L' field. | ||||
| * Described the disadvantage of not keeping track of the Address | ||||
| Vector in the RREQ-Instance. | ||||
| * Specified that in non-storing mode an intermediate node has to | ||||
| record the IP addresses of both incoming and outgoing interfaces | ||||
| into the Address Vector, when those interfaces have different IP | ||||
| addresses. | ||||
| * Added three informative references to describe relevant details | ||||
| about evaluating link asymmetry. | ||||
| * Clarified details about Gratuitous RREP. | ||||
| C.8. Changes from version 12 to version 13 | ||||
| * Changed name of "Shift" field to be the "Delta" field. | ||||
| * Specified that if a node does not have resources, it MUST drop the | ||||
| RREQ. | ||||
| * Changed name of MaxUseRank to MaxUsefulRank. | ||||
| * Revised a sentence that was not clear about when a TargNode can | ||||
| delay transmission of the RREP in response to a RREQ. | ||||
| * Provided advice about running AODV-RPL at same time as P2P-RPL or | ||||
| native RPL. | ||||
| * Small reorganization and enlargement of the description of Trickle | ||||
| time operation in Section 8. | ||||
| * Added definition for "RREQ-InstanceID" to Terminology section. | ||||
| * Specified that once a node leaves an RREQ-Instance, it MUST NOT | ||||
| rejoin the same RREQ-Instance. | ||||
| C.9. Changes from version 11 to version 12 | ||||
| * Defined RREP_WAIT_TIME for asymmetric as well as symmetric | ||||
| handling of RREP-DIO. | ||||
| * Clarified link-local multicast transmission to use link-local | ||||
| multicast group all-RPL nodes. | ||||
| * Identified some security threats more explicitly. | ||||
| * Specified that the pairing between RREQ-DIO and RREP-DIO happens | ||||
| at OrigNode and TargNode. Intermediate routers do not necessarily | ||||
| maintain the pairing. | ||||
| * When RREQ-DIO is received with H=0 and S=1, specified that | ||||
| intermediate routers MAY store symmetric Address Vector | ||||
| information for possible use when a matching RREP-DIO is received. | ||||
| * Specified that AODV-RPL uses the "P2P Route Discovery Mode of | ||||
| Operation" (MOP == 4), instead of requesting the allocation of a | ||||
| new MOP. Clarified that there is no conflict with [RFC6997]. | ||||
| * Fixed several important typos and improved language in numerous | ||||
| places. | ||||
| * Reorganized the steps in the specification for handling RREQ and | ||||
| RREP at an intermediate router, to more closely follow the order | ||||
| of processing actions to be taken by the router. | ||||
| C.10. Changes from version 10 to version 11 | ||||
| * Numerous editorial improvements. | ||||
| * Replace Floor((7+(Prefix Length))/8) by Ceil(Prefix Length/8) for | ||||
| simplicity and ease of understanding. | ||||
| * Use "L field" instead of "L bit" since L is a two-bit field. | ||||
| * Improved the procedures in section 6.2.1. | ||||
| * Define the S bit of the data structure a router uses to represent | ||||
| whether or not the RREQ instance is for a symmetric or an | ||||
| asymmetric route. This replaces text in the document that was a | ||||
| holdover from earlier versions in which the RREP had an S bit for | ||||
| that purpose. | ||||
| * Quote terminology from AODV that has been identified as possibly | ||||
| originating in language reflecting various kinds of bias against | ||||
| certain cultures. | ||||
| * Clarified the relationship of AODV-RPL to RPL. | ||||
| * Eliminated the "Point-to-Point" terminology to avoid suggesting | ||||
| only a single link. | ||||
| * Modified certain passages to better reflect the possibility that a | ||||
| router might have multiple IP addresses. | ||||
| * "Rsv" replaced by "X X" for reserved field. | ||||
| * Added mandates for reserved fields, and replaces some ambiguous | ||||
| language phraseology by mandates. | ||||
| * Replaced "retransmit" terminology by more correct "propagate" | ||||
| terminology. | ||||
| * Added text about determining link symmetry near Figure 5. | ||||
| * Mandated checking the Address Vector to avoid routing loops. | ||||
| * Improved specification for use of the Delta value in | ||||
| Section 6.3.3. | ||||
| * Corrected the wrong use of RREQ-Instance to be RREP-Instance. | ||||
| * Referred to Subregistry values instead of Registry values in | ||||
| Section 9. | ||||
| * Sharpened language in Section 10, eliminated misleading use of | ||||
| capitalization in the words "Security Configuration". | ||||
| * Added acknowledgements and contributors. | ||||
| C.11. Changes from version 09 to version 10 | ||||
| * Changed the title for brevity and to remove acronyms. | ||||
| * Added "Note to the RFC Editor" in Section 9. | ||||
| * Expanded DAO and P2MP in Section 1. | ||||
| * Reclassified [RFC6998] and [RFC7416] as Informational. | ||||
| * SHOULD changed to MUST in Section 4.1 and Section 4.2. | ||||
| * Several editorial improvements and clarifications. | ||||
| C.12. Changes from version 08 to version 09 | ||||
| * Removed section "Link State Determination" and put some of the | ||||
| relevant material into Section 5. | ||||
| * Cited security section of [RFC6550] as part of the RREP-DIO | ||||
| message description in Section 2. | ||||
| * SHOULD has been changed to MUST in Section 4.2. | ||||
| * Expanded the terms ETX and RSSI in Section 5. | ||||
| * Section 6.4 has been expanded to provide a more precise | ||||
| explanation of the handling of route reply. | ||||
| * Added [RFC7416] in the Security Considerations (Section 10) for | ||||
| RPL security threats. Cited [RFC6550] for authenticated mode of | ||||
| operation. | ||||
| * Appendix A has been mostly re-written to describe methods to | ||||
| determine whether or not the S bit should be set to 1. | ||||
| * For consistency, adjusted several mandates from SHOULD to MUST and | ||||
| from SHOULD NOT to MUST NOT. | ||||
| * Numerous editorial improvements and clarifications. | ||||
| C.13. Changes from version 07 to version 08 | ||||
| * Instead of describing the need for routes to "fulfill the | ||||
| requirements", specify that routes need to "satisfy the Objective | ||||
| Function". | ||||
| * Removed all normative dependencies on [RFC6997] | ||||
| * Rewrote Section 10 to avoid duplication of language in cited | ||||
| specifications. | ||||
| * Added a new section "Link State Determination" with text and | ||||
| citations to more fully describe how implementations determine | ||||
| whether links are symmetric. | ||||
| * Modified text comparing AODV-RPL to other protocols to emphasize | ||||
| the need for AODV-RPL instead of the problems with the other | ||||
| protocols. | ||||
| * Clarified that AODV-RPL uses some of the base RPL specification | ||||
| but does not require an instance of RPL to run. | ||||
| * Improved capitalization, quotation, and spelling variations. | ||||
| * Specified behavior upon reception of a RREQ-DIO or RREP-DIO | ||||
| message for an already existing DODAGID (e.g, Section 6.4). | ||||
| * Fixed numerous language issues in IANA Considerations Section 9. | ||||
| * For consistency, adjusted several mandates from SHOULD to MUST and | ||||
| from SHOULD NOT to MUST NOT. | ||||
| * Numerous editorial improvements and clarifications. | ||||
| C.14. Changes from version 06 to version 07 | ||||
| * Added definitions for all fields of the ART option (see | ||||
| Section 4.3). Modified definition of Prefix Length to prohibit | ||||
| Prefix Length values greater than 127. | ||||
| * Modified the language from [RFC6550] Target Option definition so | ||||
| that the trailing zero bits of the Prefix Length are no longer | ||||
| described as "reserved". | ||||
| * Reclassified [RFC3561] and [RFC6998] as Informative. | ||||
| * Added citation for [RFC8174] to Terminology section. | ||||
| C.15. Changes from version 05 to version 06 | ||||
| * Added Security Considerations based on the security mechanisms | ||||
| defined in [RFC6550]. | ||||
| * Clarified the nature of improvements due to P2P route discovery | ||||
| versus bidirectional asymmetric route discovery. | ||||
| * Editorial improvements and corrections. | ||||
| C.16. Changes from version 04 to version 05 | ||||
| * Add description for sequence number operations. | ||||
| * Extend the residence duration L in section 4.1. | ||||
| * Change AODV-RPL Target option to ART option. | ||||
| C.17. Changes from version 03 to version 04 | ||||
| * Updated RREP option format. Remove the T bit in RREP option. | ||||
| * Using the same RPLInstanceID for RREQ and RREP, no need to update | ||||
| [RFC6550]. | ||||
| * Explanation of Delta field in RREP. | ||||
| * Multiple target options handling during transmission. | ||||
| C.18. Changes from version 02 to version 03 | ||||
| * Include the support for source routing. | ||||
| * Import some features from [RFC6997], e.g., choice between hop-by- | ||||
| hop and source routing, the L field which determines the duration | ||||
| of residence in the DAG, RankLimit, etc. | ||||
| * Define new target option for AODV-RPL, including the Destination | ||||
| Sequence Number in it. Move the TargNode address in RREQ option | ||||
| and the OrigNode address in RREP option into ADOV-RPL Target | ||||
| Option. | ||||
| * Support route discovery for multiple targets in one RREQ-DIO. | ||||
| * New RPLInstanceID pairing mechanism. | ||||
| Appendix D. Contributors | ||||
| Abdur Rashid Sangi | ||||
| Wenzhou-Kean University | ||||
| 88 Daxue Rd, Ouhai, | ||||
| Wenzhou, Zhejiang Province | ||||
| P.R. China 325060 | ||||
| Kean University | ||||
| 1000 Morris Avenue | ||||
| Union, New Jersey 07083 | ||||
| USA | ||||
| Email: sangi_bahrian@yahoo.com | ||||
| Malati Hegde | ||||
| Indian Institute of Science | ||||
| Bangalore 560012 | ||||
| India | Acknowledgements | |||
| Email: malati@iisc.ac.in | The authors thank Pascal Thubert, Rahul Jadhav, and Lijo Thomas for | |||
| their support and valuable input. The authors specially thank | ||||
| Lavanya H.M. for implementing AODV-RPL in Contiki and conducting | ||||
| extensive simulation studies. | ||||
| Mingui Zhang | The authors would like to acknowledge the reviews, feedback, and | |||
| comments from the following people, in alphabetical order: Roman | ||||
| Danyliw, Lars Eggert, Benjamin Kaduk, Tero Kivinen, Erik Kline, | ||||
| Murray Kucherawy, Warren Kumari, Francesca Palombini, Alvaro Retana, | ||||
| Ines Robles, John Scudder, Meral Shirazipour, Peter Van der Stok, | ||||
| Éric Vyncke, and Robert Wilton. | ||||
| Huawei Technologies | Contributors | |||
| No. 156 Beiqing Rd. Haidian District | ||||
| Beijing 100095 | Abdur Rashid Sangi | |||
| Wenzhou-Kean University | ||||
| 88 Daxue Rd, Ouhai | ||||
| Wenzhou | ||||
| Zhejiang Province, 325060 | ||||
| Kean University | ||||
| 1000 Morris Avenue | ||||
| Union, New Jersey 07083 | ||||
| United States of America | ||||
| China | ||||
| Email: sangi_bahrian@yahoo.com | ||||
| P.R. China | Malati Hegde | |||
| Indian Institute of Science | ||||
| Bangalore 560012 | ||||
| India | ||||
| Email: malati@iisc.ac.in | ||||
| Email: zhangmingui@huawei.com | Mingui Zhang | |||
| Huawei Technologies | ||||
| No. 156 Beiqing Rd. | ||||
| Haidian District | ||||
| Beijing | ||||
| 100095 | ||||
| China | ||||
| Email: zhangmingui@huawei.com | ||||
| Authors' Addresses | Authors' Addresses | |||
| Charles E. Perkins | Charles E. Perkins | |||
| Blue Meadow Networks | Blue Meadow Networks | |||
| Saratoga, 95070 | Saratoga, CA 95070 | |||
| United States | United States of America | |||
| Email: charliep@lupinlodge.com | Email: charliep@lupinlodge.com | |||
| S.V.R Anand | S.V.R. Anand | |||
| Indian Institute of Science | Indian Institute of Science | |||
| Bangalore 560012 | Bangalore 560012 | |||
| India | India | |||
| Email: anandsvr@iisc.ac.in | Email: anandsvr@iisc.ac.in | |||
| Satish Anamalamudi | Satish Anamalamudi | |||
| SRM University-AP | SRM University-AP | |||
| Amaravati Campus | Amaravati Campus | |||
| Amaravati, Andhra Pradesh 522 502 | Amaravati, Andhra Pradesh 522 502 | |||
| India | India | |||
| Email: satishnaidu80@gmail.com | Email: satishnaidu80@gmail.com | |||
| Bing Liu | Bing Liu | |||
| Huawei Technologies | Huawei Technologies | |||
| No. 156 Beiqing Rd. Haidian District | No. 156 Beiqing Rd. | |||
| Haidian District | ||||
| Beijing | Beijing | |||
| 100095 | 100095 | |||
| China | China | |||
| Email: remy.liubing@huawei.com | Email: remy.liubing@huawei.com | |||
| End of changes. 223 change blocks. | ||||
| 1082 lines changed or deleted | 641 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||