| < draft-ietf-roll-rpl-07.txt | draft-ietf-roll-rpl-08.txt > | |||
|---|---|---|---|---|
| Networking Working Group T. Winter, Ed. | ROLL T. Winter, Ed. | |||
| Internet-Draft | Internet-Draft | |||
| Intended status: Standards Track P. Thubert, Ed. | Intended status: Standards Track P. Thubert, Ed. | |||
| Expires: September 9, 2010 Cisco Systems | Expires: November 29, 2010 Cisco Systems | |||
| ROLL Design Team | RPL Author Team | |||
| IETF ROLL WG | IETF ROLL WG | |||
| March 8, 2010 | May 28, 2010 | |||
| RPL: IPv6 Routing Protocol for Low power and Lossy Networks | RPL: IPv6 Routing Protocol for Low power and Lossy Networks | |||
| draft-ietf-roll-rpl-07 | draft-ietf-roll-rpl-08 | |||
| Abstract | Abstract | |||
| Low power and Lossy Networks (LLNs) are a class of network in which | Low power and Lossy Networks (LLNs) are a class of network in which | |||
| both the routers and their interconnect are constrained: LLN routers | both the routers and their interconnect are constrained: LLN routers | |||
| typically operate with constraints on (any subset of) processing | typically operate with constraints on (any subset of) processing | |||
| power, memory and energy (battery), and their interconnects are | power, memory and energy (battery), and their interconnects are | |||
| characterized by (any subset of) high loss rates, low data rates and | characterized by (any subset of) high loss rates, low data rates and | |||
| instability. LLNs are comprised of anything from a few dozen and up | instability. LLNs are comprised of anything from a few dozen and up | |||
| to thousands of LLN routers, and support point-to-point traffic | to thousands of routers, and support point-to-point traffic (between | |||
| (between devices inside the LLN), point-to-multipoint traffic (from a | devices inside the LLN), point-to-multipoint traffic (from a central | |||
| central control point to a subset of devices inside the LLN) and | control point to a subset of devices inside the LLN) and multipoint- | |||
| multipoint-to-point traffic (from devices inside the LLN towards a | to-point traffic (from devices inside the LLN towards a central | |||
| central control point). This document specifies the IPv6 Routing | control point). This document specifies the IPv6 Routing Protocol | |||
| Protocol for LLNs (RPL), which provides a mechanism whereby | for LLNs (RPL), which provides a mechanism whereby multipoint-to- | |||
| multipoint-to-point traffic from devices inside the LLN towards a | point traffic from devices inside the LLN towards a central control | |||
| central control point, as well as point-to-multipoint traffic from | point, as well as point-to-multipoint traffic from the central | |||
| the central control point to the devices inside the LLN, is | control point to the devices inside the LLN, is supported. Support | |||
| supported. Support for point-to-point traffic is also available. | for point-to-point traffic is also available. | |||
| Status of this Memo | Status of this Memo | |||
| This Internet-Draft is submitted to IETF in full conformance with the | This Internet-Draft is submitted to IETF in full conformance with the | |||
| provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF), its areas, and its working groups. Note that | Task Force (IETF), its areas, and its working groups. Note that | |||
| other groups may also distribute working documents as Internet- | other groups may also distribute working documents as Internet- | |||
| Drafts. | Drafts. | |||
| skipping to change at page 2, line 8 ¶ | skipping to change at page 2, line 8 ¶ | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| The list of current Internet-Drafts can be accessed at | The list of current Internet-Drafts can be accessed at | |||
| http://www.ietf.org/ietf/1id-abstracts.txt. | http://www.ietf.org/ietf/1id-abstracts.txt. | |||
| The list of Internet-Draft Shadow Directories can be accessed at | The list of Internet-Draft Shadow Directories can be accessed at | |||
| http://www.ietf.org/shadow.html. | http://www.ietf.org/shadow.html. | |||
| This Internet-Draft will expire on September 9, 2010. | This Internet-Draft will expire on November 29, 2010. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2010 IETF Trust and the persons identified as the | Copyright (c) 2010 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 | Provisions Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| skipping to change at page 3, line 13 ¶ | skipping to change at page 3, line 13 ¶ | |||
| described in the BSD License. | described in the BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 1.1. Design Principles . . . . . . . . . . . . . . . . . . . . 6 | 1.1. Design Principles . . . . . . . . . . . . . . . . . . . . 6 | |||
| 1.2. Expectations of Link Layer Type . . . . . . . . . . . . . 7 | 1.2. Expectations of Link Layer Type . . . . . . . . . . . . . 7 | |||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 3. Protocol Overview . . . . . . . . . . . . . . . . . . . . . . 9 | 3. Protocol Overview . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 3.1. Topology . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 3.1. Topology . . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 3.1.1. Topology Identifiers . . . . . . . . . . . . . . . . . 9 | 3.1.1. Topology Identifiers . . . . . . . . . . . . . . . . . 10 | |||
| 3.1.2. DODAG Information . . . . . . . . . . . . . . . . . . 10 | 3.2. Instances, DODAGs, and DODAG Versions . . . . . . . . . . 10 | |||
| 3.2. Instances, DODAGs, and DODAG Iterations . . . . . . . . . 11 | 3.3. Upward Routes and DODAG Construction . . . . . . . . . . . 12 | |||
| 3.3. Traffic Flows . . . . . . . . . . . . . . . . . . . . . . 13 | 3.3.1. DAG Repair . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 3.3.1. Multipoint-to-Point Traffic . . . . . . . . . . . . . 13 | 3.3.2. Grounded and Floating DODAGs . . . . . . . . . . . . . 12 | |||
| 3.3.2. Point-to-Multipoint Traffic . . . . . . . . . . . . . 13 | 3.3.3. Administrative Preference . . . . . . . . . . . . . . 13 | |||
| 3.3.3. Point-to-Point Traffic . . . . . . . . . . . . . . . . 13 | 3.3.4. Objective Function (OF) . . . . . . . . . . . . . . . 13 | |||
| 3.4. Upward Routes and DODAG Construction . . . . . . . . . . . 13 | 3.3.5. Distributed Algorithm Operation . . . . . . . . . . . 13 | |||
| 3.4.1. DODAG Information Object (DIO) . . . . . . . . . . . . 14 | 3.4. Downward Routes and Destination Advertisement . . . . . . 14 | |||
| 3.4.2. DAG Repair . . . . . . . . . . . . . . . . . . . . . . 14 | 3.5. Routing Metrics and Constraints Used By RPL . . . . . . . 14 | |||
| 3.4.3. Grounded and Floating DODAGs . . . . . . . . . . . . . 15 | 3.5.1. Loop Avoidance . . . . . . . . . . . . . . . . . . . . 15 | |||
| 3.4.4. Administrative Preference . . . . . . . . . . . . . . 15 | 3.5.2. Rank Properties . . . . . . . . . . . . . . . . . . . 16 | |||
| 3.4.5. Objective Function (OF) . . . . . . . . . . . . . . . 15 | 3.6. Traffic Flows Supported by RPL . . . . . . . . . . . . . . 19 | |||
| 3.4.6. Distributed Algorithm Operation . . . . . . . . . . . 15 | 3.6.1. Multipoint-to-Point Traffic . . . . . . . . . . . . . 19 | |||
| 3.5. Downward Routes and Destination Advertisement . . . . . . 16 | 3.6.2. Point-to-Multipoint Traffic . . . . . . . . . . . . . 19 | |||
| 3.5.1. Destination Advertisement Object (DAO) . . . . . . . . 16 | 3.6.3. Point-to-Point Traffic . . . . . . . . . . . . . . . . 19 | |||
| 3.6. Routing Metrics and Constraints Used By RPL . . . . . . . 17 | 4. RPL Instance . . . . . . . . . . . . . . . . . . . . . . . . . 20 | |||
| 3.6.1. Loop Avoidance . . . . . . . . . . . . . . . . . . . . 18 | 4.1. RPL Instance ID . . . . . . . . . . . . . . . . . . . . . 20 | |||
| 3.6.2. Rank Properties . . . . . . . . . . . . . . . . . . . 19 | 5. ICMPv6 RPL Control Message . . . . . . . . . . . . . . . . . . 21 | |||
| 4. ICMPv6 RPL Control Message . . . . . . . . . . . . . . . . . . 21 | 5.1. RPL Security Fields . . . . . . . . . . . . . . . . . . . 23 | |||
| 5. Upward Routes . . . . . . . . . . . . . . . . . . . . . . . . 22 | 5.2. DODAG Information Solicitation (DIS) . . . . . . . . . . . 26 | |||
| 5.1. DODAG Information Object (DIO) . . . . . . . . . . . . . . 22 | 5.2.1. Format of the DIS Base Object . . . . . . . . . . . . 26 | |||
| 5.1.1. DIO Base Format . . . . . . . . . . . . . . . . . . . 22 | 5.2.2. Secure DIS . . . . . . . . . . . . . . . . . . . . . . 27 | |||
| 5.1.2. DIO Base Rules . . . . . . . . . . . . . . . . . . . . 24 | 5.2.3. DIS Options . . . . . . . . . . . . . . . . . . . . . 27 | |||
| 5.1.3. DIO Suboptions . . . . . . . . . . . . . . . . . . . . 25 | 5.3. DODAG Information Object (DIO) . . . . . . . . . . . . . . 27 | |||
| 5.2. DODAG Information Solicitation (DIS) . . . . . . . . . . . 30 | 5.3.1. Format of the DIO Base Object . . . . . . . . . . . . 27 | |||
| 5.3. Upward Route Discovery and Maintenance . . . . . . . . . . 30 | 5.3.2. Secure DIO . . . . . . . . . . . . . . . . . . . . . . 29 | |||
| 5.3.1. RPL Instance . . . . . . . . . . . . . . . . . . . . . 30 | 5.3.3. DIO Options . . . . . . . . . . . . . . . . . . . . . 29 | |||
| 5.3.2. Neighbors and Parents within a DODAG Iteration . . . . 30 | 5.4. Destination Advertisement Object (DAO) . . . . . . . . . . 30 | |||
| 5.3.3. Neighbors and Parents across DODAG Iterations . . . . 31 | 5.4.1. Format of the DAO Base Object . . . . . . . . . . . . 30 | |||
| 5.3.4. DIO Message Communication . . . . . . . . . . . . . . 36 | 5.4.2. Secure DAO . . . . . . . . . . . . . . . . . . . . . . 31 | |||
| 5.3.5. DIO Transmission . . . . . . . . . . . . . . . . . . . 36 | 5.4.3. DAO Options . . . . . . . . . . . . . . . . . . . . . 31 | |||
| 5.3.6. DODAG Selection . . . . . . . . . . . . . . . . . . . 39 | 5.5. Destination Advertisement Object Acknowledgement | |||
| 5.4. Operation as a Leaf Node . . . . . . . . . . . . . . . . . 39 | (DAO-ACK) . . . . . . . . . . . . . . . . . . . . . . . . 31 | |||
| 5.5. Administrative Rank . . . . . . . . . . . . . . . . . . . 40 | 5.5.1. Format of the DAO-ACK Base Object . . . . . . . . . . 31 | |||
| 5.6. Collision . . . . . . . . . . . . . . . . . . . . . . . . 40 | 5.5.2. Secure DAO-ACK . . . . . . . . . . . . . . . . . . . . 32 | |||
| 6. Downward Routes . . . . . . . . . . . . . . . . . . . . . . . 40 | 5.5.3. DAO-ACK Options . . . . . . . . . . . . . . . . . . . 32 | |||
| 6.1. Destination Advertisement Object (DAO) . . . . . . . . . . 41 | 5.6. RPL Control Message Options . . . . . . . . . . . . . . . 32 | |||
| 6.1.1. DAO Suboptions . . . . . . . . . . . . . . . . . . . . 42 | 5.6.1. RPL Control Message Option Generic Format . . . . . . 32 | |||
| 6.2. Downward Route Discovery and Maintenance . . . . . . . . . 43 | 5.6.2. Pad1 . . . . . . . . . . . . . . . . . . . . . . . . . 33 | |||
| 6.2.1. Overview . . . . . . . . . . . . . . . . . . . . . . . 43 | 5.6.3. PadN . . . . . . . . . . . . . . . . . . . . . . . . . 33 | |||
| 6.2.2. Mode of Operation . . . . . . . . . . . . . . . . . . 44 | 5.6.4. Metric Container . . . . . . . . . . . . . . . . . . . 34 | |||
| 6.2.3. Destination Advertisement Parents . . . . . . . . . . 44 | 5.6.5. Route Information . . . . . . . . . . . . . . . . . . 35 | |||
| 6.2.4. Operation of DAO Storing Nodes . . . . . . . . . . . . 45 | 5.6.6. DODAG Configuration . . . . . . . . . . . . . . . . . 36 | |||
| 6.2.5. Operation of DAO Non-storing Nodes . . . . . . . . . . 48 | 5.6.7. RPL Target . . . . . . . . . . . . . . . . . . . . . . 37 | |||
| 6.2.6. Scheduling to Send DAO (or no-DAO) . . . . . . . . . . 49 | 5.6.8. Transit Information . . . . . . . . . . . . . . . . . 39 | |||
| 6.2.7. Triggering DAO Message from the Sub-DODAG . . . . . . 49 | 5.6.9. Solicited Information . . . . . . . . . . . . . . . . 40 | |||
| 6.2.8. Sending DAO Messages to DAO Parents . . . . . . . . . 51 | 5.6.10. Prefix Information . . . . . . . . . . . . . . . . . . 42 | |||
| 6.2.9. Multicast Destination Advertisement Messages . . . . . 52 | 6. Upward Routes . . . . . . . . . . . . . . . . . . . . . . . . 44 | |||
| 7. Packet Forwarding and Loop Avoidance/Detection . . . . . . . . 52 | 6.1. DIO Base Rules . . . . . . . . . . . . . . . . . . . . . . 45 | |||
| 7.1. Suggestions for Packet Forwarding . . . . . . . . . . . . 53 | 6.2. Upward Route Discovery and Maintenance . . . . . . . . . . 45 | |||
| 7.2. Loop Avoidance and Detection . . . . . . . . . . . . . . . 54 | 6.2.1. Neighbors and Parents within a DODAG Version . . . . . 45 | |||
| 7.2.1. Source Node Operation . . . . . . . . . . . . . . . . 55 | 6.2.2. Neighbors and Parents across DODAG Versions . . . . . 46 | |||
| 7.2.2. Router Operation . . . . . . . . . . . . . . . . . . . 55 | 6.2.3. DIO Message Communication . . . . . . . . . . . . . . 51 | |||
| 8. Multicast Operation . . . . . . . . . . . . . . . . . . . . . 57 | 6.3. DIO Transmission . . . . . . . . . . . . . . . . . . . . . 52 | |||
| 9. Maintenance of Routing Adjacency . . . . . . . . . . . . . . . 58 | 6.3.1. Trickle Parameters . . . . . . . . . . . . . . . . . . 52 | |||
| 10. Guidelines for Objective Functions . . . . . . . . . . . . . . 59 | 6.4. DODAG Selection . . . . . . . . . . . . . . . . . . . . . 53 | |||
| 11. RPL Constants and Variables . . . . . . . . . . . . . . . . . 61 | 6.5. Operation as a Leaf Node . . . . . . . . . . . . . . . . . 53 | |||
| 12. Manageability Considerations . . . . . . . . . . . . . . . . . 62 | 6.6. Administrative Rank . . . . . . . . . . . . . . . . . . . 53 | |||
| 12.1. Control of Function and Policy . . . . . . . . . . . . . . 62 | 7. Downward Routes . . . . . . . . . . . . . . . . . . . . . . . 54 | |||
| 12.1.1. Initialization Mode . . . . . . . . . . . . . . . . . 62 | 7.1. Downward Route Discovery and Maintenance . . . . . . . . . 54 | |||
| 12.1.2. DIO Base option . . . . . . . . . . . . . . . . . . . 63 | 7.1.1. Overview . . . . . . . . . . . . . . . . . . . . . . . 54 | |||
| 12.1.3. Trickle Timers . . . . . . . . . . . . . . . . . . . . 63 | 7.1.2. Mode of Operation . . . . . . . . . . . . . . . . . . 55 | |||
| 12.1.4. DAG Sequence Number Increment . . . . . . . . . . . . 64 | 7.1.3. Destination Advertisement Parents . . . . . . . . . . 56 | |||
| 12.1.5. Destination Advertisement Timers . . . . . . . . . . . 64 | 7.1.4. DAO Operation on Storing Nodes . . . . . . . . . . . . 56 | |||
| 12.1.6. Policy Control . . . . . . . . . . . . . . . . . . . . 64 | 7.1.5. Operation of DAO Non-storing Nodes . . . . . . . . . . 60 | |||
| 12.1.7. Data Structures . . . . . . . . . . . . . . . . . . . 65 | 7.1.6. Scheduling to Send DAO (or No-Path) . . . . . . . . . 61 | |||
| 12.2. Information and Data Models . . . . . . . . . . . . . . . 65 | 7.1.7. Triggering DAO Message from the Sub-DODAG . . . . . . 61 | |||
| 12.3. Liveness Detection and Monitoring . . . . . . . . . . . . 65 | 7.1.8. Sending DAO Messages to DAO Parents . . . . . . . . . 62 | |||
| 12.3.1. Candidate Neighbor Data Structure . . . . . . . . . . 65 | 7.1.9. Multicast Destination Advertisement Messages . . . . . 63 | |||
| 12.3.2. Directed Acyclic Graph (DAG) Table . . . . . . . . . . 65 | 8. Packet Forwarding and Loop Avoidance/Detection . . . . . . . . 64 | |||
| 12.3.3. Routing Table . . . . . . . . . . . . . . . . . . . . 66 | 8.1. Suggestions for Packet Forwarding . . . . . . . . . . . . 64 | |||
| 12.3.4. Other RPL Monitoring Parameters . . . . . . . . . . . 67 | 8.2. Loop Avoidance and Detection . . . . . . . . . . . . . . . 65 | |||
| 12.3.5. RPL Trickle Timers . . . . . . . . . . . . . . . . . . 67 | 8.2.1. Source Node Operation . . . . . . . . . . . . . . . . 66 | |||
| 12.4. Verifying Correct Operation . . . . . . . . . . . . . . . 67 | 8.2.2. Router Operation . . . . . . . . . . . . . . . . . . . 66 | |||
| 12.5. Requirements on Other Protocols and Functional | 9. Multicast Operation . . . . . . . . . . . . . . . . . . . . . 68 | |||
| Components . . . . . . . . . . . . . . . . . . . . . . . . 67 | 10. Maintenance of Routing Adjacency . . . . . . . . . . . . . . . 69 | |||
| 12.6. Impact on Network Operation . . . . . . . . . . . . . . . 67 | 11. Guidelines for Objective Functions . . . . . . . . . . . . . . 70 | |||
| 13. Security Considerations . . . . . . . . . . . . . . . . . . . 67 | 11.1. Objective Function Behavior . . . . . . . . . . . . . . . 70 | |||
| 14. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 67 | 12. RPL Constants and Variables . . . . . . . . . . . . . . . . . 72 | |||
| 14.1. RPL Control Message . . . . . . . . . . . . . . . . . . . 68 | 13. Manageability Considerations . . . . . . . . . . . . . . . . . 73 | |||
| 14.2. New Registry for RPL Control Codes . . . . . . . . . . . . 68 | 13.1. Control of Function and Policy . . . . . . . . . . . . . . 73 | |||
| 14.3. New Registry for the Control Field of the DIO Base . . . . 68 | 13.1.1. Initialization Mode . . . . . . . . . . . . . . . . . 73 | |||
| 14.4. DODAG Information Object (DIO) Suboption . . . . . . . . . 69 | 13.1.2. DIO Base option . . . . . . . . . . . . . . . . . . . 74 | |||
| 15. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 69 | 13.1.3. Trickle Timers . . . . . . . . . . . . . . . . . . . . 74 | |||
| 16. Contributors . . . . . . . . . . . . . . . . . . . . . . . . . 70 | 13.1.4. DAG Version Number Increment . . . . . . . . . . . . . 75 | |||
| 17. References . . . . . . . . . . . . . . . . . . . . . . . . . . 71 | 13.1.5. Destination Advertisement Timers . . . . . . . . . . . 75 | |||
| 17.1. Normative References . . . . . . . . . . . . . . . . . . . 71 | 13.1.6. Policy Control . . . . . . . . . . . . . . . . . . . . 75 | |||
| 17.2. Informative References . . . . . . . . . . . . . . . . . . 72 | 13.1.7. Data Structures . . . . . . . . . . . . . . . . . . . 75 | |||
| Appendix A. Requirements . . . . . . . . . . . . . . . . . . . . 74 | 13.2. Information and Data Models . . . . . . . . . . . . . . . 76 | |||
| A.1. Protocol Properties Overview . . . . . . . . . . . . . . . 74 | 13.3. Liveness Detection and Monitoring . . . . . . . . . . . . 76 | |||
| A.1.1. IPv6 Architecture . . . . . . . . . . . . . . . . . . 74 | 13.3.1. Candidate Neighbor Data Structure . . . . . . . . . . 76 | |||
| A.1.2. Typical LLN Traffic Patterns . . . . . . . . . . . . . 74 | 13.3.2. Directed Acyclic Graph (DAG) Table . . . . . . . . . . 76 | |||
| A.1.3. Constraint Based Routing . . . . . . . . . . . . . . . 74 | 13.3.3. Routing Table . . . . . . . . . . . . . . . . . . . . 77 | |||
| A.2. Deferred Requirements . . . . . . . . . . . . . . . . . . 75 | 13.3.4. Other RPL Monitoring Parameters . . . . . . . . . . . 77 | |||
| Appendix B. Examples . . . . . . . . . . . . . . . . . . . . . . 75 | 13.3.5. RPL Trickle Timers . . . . . . . . . . . . . . . . . . 78 | |||
| B.1. DAO Operation When Only the Root Node Stores DAO | 13.4. Verifying Correct Operation . . . . . . . . . . . . . . . 78 | |||
| Information . . . . . . . . . . . . . . . . . . . . . . . 75 | 13.5. Requirements on Other Protocols and Functional | |||
| B.2. DAO Operation When All Nodes Fully Store DAO | Components . . . . . . . . . . . . . . . . . . . . . . . . 78 | |||
| Information . . . . . . . . . . . . . . . . . . . . . . . 77 | 13.6. Impact on Network Operation . . . . . . . . . . . . . . . 78 | |||
| B.3. DAO Operation When Nodes Have Mixed Capabilities . . . . . 79 | 14. Security Considerations . . . . . . . . . . . . . . . . . . . 78 | |||
| Appendix C. Outstanding Issues . . . . . . . . . . . . . . . . . 81 | 14.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . . 78 | |||
| C.1. Additional Support for P2P Routing . . . . . . . . . . . . 81 | 14.2. Functional Description of Packet Protection . . . . . . . 80 | |||
| C.2. Destination Advertisement / DAO Fan-out . . . . . . . . . 81 | 14.2.1. Transmission of Outgoing Packets . . . . . . . . . . . 80 | |||
| C.3. Source Routing . . . . . . . . . . . . . . . . . . . . . . 81 | 14.2.2. Reception of Incoming Packets . . . . . . . . . . . . 81 | |||
| C.4. Address / Header Compression . . . . . . . . . . . . . . . 81 | 14.2.3. Cryptographic Mode of Operation . . . . . . . . . . . 81 | |||
| C.5. Managing Multiple Instances . . . . . . . . . . . . . . . 82 | 14.3. Protecting RPL ICMPv6 messages . . . . . . . . . . . . . . 82 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 82 | 14.4. Security State Machine . . . . . . . . . . . . . . . . . . 83 | |||
| 15. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 83 | ||||
| 15.1. RPL Control Message . . . . . . . . . . . . . . . . . . . 83 | ||||
| 15.2. New Registry for RPL Control Codes . . . . . . . . . . . . 84 | ||||
| 15.3. New Registry for the Mode of Operation (MOP) DIO | ||||
| Control Field . . . . . . . . . . . . . . . . . . . . . . 84 | ||||
| 15.4. RPL Control Message Option . . . . . . . . . . . . . . . . 85 | ||||
| 16. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 85 | ||||
| 17. Contributors . . . . . . . . . . . . . . . . . . . . . . . . . 86 | ||||
| 18. References . . . . . . . . . . . . . . . . . . . . . . . . . . 88 | ||||
| 18.1. Normative References . . . . . . . . . . . . . . . . . . . 88 | ||||
| 18.2. Informative References . . . . . . . . . . . . . . . . . . 88 | ||||
| Appendix A. Requirements . . . . . . . . . . . . . . . . . . . . 90 | ||||
| A.1. Protocol Properties Overview . . . . . . . . . . . . . . . 90 | ||||
| A.1.1. IPv6 Architecture . . . . . . . . . . . . . . . . . . 90 | ||||
| A.1.2. Typical LLN Traffic Patterns . . . . . . . . . . . . . 90 | ||||
| A.1.3. Constraint Based Routing . . . . . . . . . . . . . . . 91 | ||||
| A.2. Deferred Requirements . . . . . . . . . . . . . . . . . . 91 | ||||
| Appendix B. Outstanding Issues . . . . . . . . . . . . . . . . . 91 | ||||
| B.1. Additional Support for P2P Routing . . . . . . . . . . . . 91 | ||||
| B.2. Address / Header Compression . . . . . . . . . . . . . . . 91 | ||||
| B.3. Managing Multiple Instances . . . . . . . . . . . . . . . 92 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 92 | ||||
| 1. Introduction | 1. Introduction | |||
| Low power and Lossy Networks (LLNs) consist of largely of constrained | Low power and Lossy Networks (LLNs) consist of largely of constrained | |||
| nodes (with limited processing power, memory, and sometimes energy | nodes (with limited processing power, memory, and sometimes energy | |||
| when they are battery operated). These routers are interconnected by | when they are battery operated). These routers are interconnected by | |||
| lossy links, typically supporting only low data rates, that are | lossy links, typically supporting only low data rates, that are | |||
| usually unstable with relatively low packet delivery rates. Another | usually unstable with relatively low packet delivery rates. Another | |||
| characteristic of such networks is that the traffic patterns are not | characteristic of such networks is that the traffic patterns are not | |||
| simply unicast, but in many cases point-to-multipoint or multipoint- | simply point-to-point, but in many cases point-to-multipoint or | |||
| to-point. Furthermore such networks may potentially comprise up to | multipoint-to-point. Furthermore such networks may potentially | |||
| thousands of nodes. These characteristics offer unique challenges to | comprise up to thousands of nodes. These characteristics offer | |||
| a routing solution: the IETF ROLL Working Group has defined | unique challenges to a routing solution: the IETF ROLL Working Group | |||
| application-specific routing requirements for a Low power and Lossy | has defined application-specific routing requirements for a Low power | |||
| Network (LLN) routing protocol, specified in | and Lossy Network (LLN) routing protocol, specified in | |||
| [I-D.ietf-roll-building-routing-reqs], | [I-D.ietf-roll-building-routing-reqs], [RFC5826], [RFC5673], and | |||
| [I-D.ietf-roll-home-routing-reqs], [RFC5673], and [RFC5548]. This | [RFC5548]. | |||
| document specifies the IPv6 Routing Protocol for Low power and lossy | ||||
| networks (RPL). | This document specifies the IPv6 Routing Protocol for Low power and | |||
| lossy networks (RPL). Note that although RPL was specified according | ||||
| to the requirements set forth in the aforementioned requirement | ||||
| documents, its use is in no way limited to these applications. | ||||
| 1.1. Design Principles | 1.1. Design Principles | |||
| RPL was designed with the objective to meet the requirements spelled | RPL was designed with the objective to meet the requirements spelled | |||
| out in [I-D.ietf-roll-building-routing-reqs], | out in [I-D.ietf-roll-building-routing-reqs], [RFC5826], [RFC5673], | |||
| [I-D.ietf-roll-home-routing-reqs], [RFC5673], and [RFC5548]. Because | and [RFC5548]. | |||
| those requirements are heterogeneous and sometimes incompatible in | ||||
| nature, the approach is first taken to design a protocol capable of | ||||
| supporting a core set of functionalities corresponding to the | ||||
| intersection of the requirements. As the RPL design evolves optional | ||||
| features may be added to address some application specific | ||||
| requirements. This is a key protocol design decision providing a | ||||
| granular approach in order to restrict the core of the protocol to a | ||||
| minimal set of functionalities, and to allow each implementation of | ||||
| the protocol to be optimized differently. All "MUST" application | ||||
| requirements that cannot be satisfied by RPL will be specifically | ||||
| listed in the Appendix A, accompanied by a justification. | ||||
| A network may run multiple instances of RPL concurrently. Each such | A network may run multiple instances of RPL concurrently. Each such | |||
| instance may serve different and potentially antagonistic constraints | instance may serve different and potentially antagonistic constraints | |||
| or performance criteria. This document defines how a single instance | or performance criteria. This document defines how a single instance | |||
| operates. | operates. | |||
| RPL is a generic protocol that is to be deployed by instantiating the | In order to be useful in a wide range of LLN application domains, RPL | |||
| generic operation described in this document with a specific | separates packet processing and forwarding from the routing | |||
| objective function (OF) (which ties together metrics, constraints, | optimization objective. Examples of such objectives include | |||
| and an optimization objective) to realize a desired objective in a | minimizing energy, minimizing latency, or satisfying constraints. | |||
| given environment. | This document describes the mode of operation of RPL. Other | |||
| companion documents specify routing objective functions. A RPL | ||||
| implementation, in support of a particular LLN application, will | ||||
| include the necessary objective function(s) as required by the | ||||
| application. | ||||
| A set of companion documents to this specification will provide | A set of companion documents to this specification will provide | |||
| further guidance in the form of applicability statements specifying a | further guidance in the form of applicability statements specifying a | |||
| set of operating points appropriate to the Building Automation, Home | set of operating points appropriate to the Building Automation, Home | |||
| Automation, Industrial, and Urban application scenarios. | Automation, Industrial, and Urban application scenarios. | |||
| 1.2. Expectations of Link Layer Type | 1.2. Expectations of Link Layer Type | |||
| RPL does not rely on any particular features of a specific link layer | In compliance with the layered architecture of IP, RPL does not rely | |||
| technology. RPL is designed to be able to operate over a variety of | on any particular features of a specific link layer technology. RPL | |||
| different link layers, including but not limited to, low power | is designed to be able to operate over a variety of different link | |||
| wireless or PLC (Power Line Communication) technologies. | layers, including but not limited to, low power wireless or PLC | |||
| (Power Line Communication) technologies. | ||||
| Implementers may find RFC 3819 [RFC3819] a useful reference when | Implementers may find [RFC3819] a useful reference when designing a | |||
| designing a link layer interface between RPL and a particular link | link layer interface between RPL and a particular link layer | |||
| layer technology. | technology. | |||
| 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 RFC | "OPTIONAL" in this document are to be interpreted as described in RFC | |||
| 2119 [RFC2119]. | 2119 [RFC2119]. | |||
| Additionally, this document uses terminology from | Additionally, this document uses terminology from | |||
| [I-D.ietf-roll-terminology], and introduces the following | [I-D.ietf-roll-terminology], and introduces the following | |||
| skipping to change at page 8, line 9 ¶ | skipping to change at page 8, line 8 ¶ | |||
| Rank: The rank of a node in a DAG identifies the nodes position with | Rank: The rank of a node in a DAG identifies the nodes position with | |||
| respect to a DODAG root. The farther away a node is from a | respect to a DODAG root. The farther away a node is from a | |||
| DODAG root, the higher is the rank of that node. The rank of a | DODAG root, the higher is the rank of that node. The rank of a | |||
| node may be a simple topological distance, or may more commonly | node may be a simple topological distance, or may more commonly | |||
| be calculated as a function of other properties as described | be calculated as a function of other properties as described | |||
| later. | later. | |||
| DODAG parent: A parent of a node within a DODAG is one of the | DODAG parent: A parent of a node within a DODAG is one of the | |||
| immediate successors of the node on a path towards the DODAG | immediate successors of the node on a path towards the DODAG | |||
| root. The DODAG parent of a node will have a lower rank than | root. The DODAG parent of a node will have a lower rank than | |||
| the node itself. (See Section 3.6.2.1). | the node itself. (See Section 3.5.2.1). | |||
| DODAG sibling: A sibling of a node within a DODAG is defined in this | DODAG sibling: A sibling of a node within a DODAG is defined in this | |||
| specification to be any neighboring node which is located at | specification to be any neighboring node which is located at | |||
| the same rank within a DODAG. Note that siblings defined in | the same rank within a DODAG. Note that siblings defined in | |||
| this manner do not necessarily share a common DODAG parent. | this manner do not necessarily share a common DODAG parent. | |||
| (See Section 3.6.2.1). | (See Section 3.5.2.1). | |||
| Sub-DODAG The sub-DODAG of a node is the set of other nodes in the | Sub-DODAG The sub-DODAG of a node is the set of other nodes in the | |||
| DODAG that might use a path towards the DODAG root that | DODAG that might use a path towards the DODAG root that | |||
| contains that node. Nodes in the sub-DODAG of a node have a | contains that node. Nodes in the sub-DODAG of a node have a | |||
| greater rank than that node itself (although not all nodes of | greater rank than that node itself (although not all nodes of | |||
| greater rank are necessarily in the sub-DODAG of that node). | greater rank are necessarily in the sub-DODAG of that node). | |||
| (See Section 3.6.2.1). | (See Section 3.5.2.1). | |||
| DODAGID: The identifier of a DODAG root. The DODAGID must be unique | DODAGID: The identifier of a DODAG root. The DODAGID must be unique | |||
| within the scope of a RPL Instance in the LLN. | within the scope of a RPL Instance in the LLN. | |||
| DODAG Iteration: A specific sequence number iteration ("version") of | DODAG Version: A specific sequence number iteration ("version") of a | |||
| a DODAG with a given DODAGID. | DODAG with a given DODAGID. | |||
| RPL Instance: A set of possibly multiple DODAGs. A network may have | RPL Instance: A set of possibly multiple DODAGs. A network may have | |||
| more than one RPL Instance, and a RPL node can participate in | more than one RPL Instance, and a RPL node can participate in | |||
| multiple RPL Instances. Each RPL Instance operates | multiple RPL Instances. Each RPL Instance operates | |||
| independently of other RPL Instances. This document describes | independently of other RPL Instances. This document describes | |||
| operation within a single RPL Instance. In RPL, a node can | operation within a single RPL Instance. In RPL, a node can | |||
| belong to at most one DODAG per RPL Instance. The tuple | belong to at most one DODAG per RPL Instance. The tuple | |||
| (RPLInstanceID, DODAGID) uniquely identifies a DODAG. | (RPLInstanceID, DODAGID) uniquely identifies a DODAG. | |||
| RPLInstanceID: Unique identifier of a RPL Instance. | RPLInstanceID: Unique identifier of a RPL Instance. | |||
| DODAGSequenceNumber: A sequential counter that is incremented by the | DODAGVersionNumber: A sequential counter that is incremented by the | |||
| root to form a new Iteration of a DODAG. A DODAG Iteration is | root to form a new Version of a DODAG. A DODAG Version is | |||
| identified uniquely by the (RPLInstanceID, DODAGID, | identified uniquely by the (RPLInstanceID, DODAGID, | |||
| DODAGSequenceNumber) tuple. | DODAGVersionNumber) tuple. | |||
| Up: Up refers to the direction from leaf nodes towards DODAG roots, | Up: Up refers to the direction from leaf nodes towards DODAG roots, | |||
| following the orientation of the edges within the DODAG. | following the orientation of the edges within the DODAG. This | |||
| follows the common terminology used in graphs and depth-first- | ||||
| search, where vertices further from the root are "deeper," or | ||||
| "down," and vertices closer to the root are "shallower," or | ||||
| "up." | ||||
| Down: Down refers to the direction from DODAG roots towards leaf | Down: Down refers to the direction from DODAG roots towards leaf | |||
| nodes, going against the orientation of the edges within the | nodes, going against the orientation of the edges within the | |||
| DODAG. | DODAG. This follows the common terminology used in graphs and | |||
| depth-first-search, where vertices further from the root are | ||||
| "deeper," or "down," and vertices closer to the root are | ||||
| "shallower," or "up." | ||||
| Objective Code Point (OCP): An identifier, used to indicate which | Objective Code Point (OCP): An identifier, used to indicate which | |||
| Objective Function is in use for forming a DODAG. The | Objective Function is in use for forming a DODAG. The | |||
| Objective Code Point is further described in | Objective Code Point is further described in | |||
| [I-D.ietf-roll-routing-metrics]. | [I-D.ietf-roll-routing-metrics]. | |||
| Objective Function (OF): Defines which routing metrics, optimization | Objective Function (OF): Defines which routing metrics, optimization | |||
| objectives, and related functions are in use in a DODAG. The | objectives, and related functions are in use in a DODAG. | |||
| Objective Function is further described in | ||||
| [I-D.ietf-roll-routing-metrics]. | ||||
| Goal: The Goal is a host or set of hosts that satisfy a particular | Goal: The Goal is a host or set of hosts that satisfy a particular | |||
| application objective / OF. Whether or not a DODAG can provide | application objective (OF). Whether or not a DODAG can provide | |||
| connectivity to a goal is a property of the DODAG. For | connectivity to a goal is a property of the DODAG. For | |||
| example, a goal might be a host serving as a data collection | example, a goal might be a host serving as a data collection | |||
| point, or a gateway providing connectivity to an external | point, or a gateway providing connectivity to an external | |||
| infrastructure. | infrastructure. | |||
| Grounded: A DODAG is said to be grounded, when the root can reach | Grounded: A DODAG is said to be grounded, when the root can reach | |||
| the Goal of the objective function. | the Goal of the objective function. | |||
| Floating: A DODAG is floating if is not Grounded. A floating DODAG | Floating: A DODAG is floating if is not Grounded. A floating DODAG | |||
| is not expected to reach the Goal defined for the OF. | is not expected to reach the Goal defined for the OF. | |||
| Typically, a DAG that is only intended to provide inner | ||||
| connectivity is a Floating DAG. | ||||
| As they form networks, LLN devices often mix the roles of 'host' and | As they form networks, LLN devices often mix the roles of 'host' and | |||
| 'router' when compared to traditional IP networks. In this document, | 'router' when compared to traditional IP networks. In this document, | |||
| 'host' refers to an LLN device that can generate but does not forward | 'host' refers to an LLN device that can generate but does not forward | |||
| RPL traffic, 'router' refers to an LLN device that can forward as | RPL traffic, 'router' refers to an LLN device that can forward as | |||
| well as generate RPL traffic, and 'node' refers to any RPL device, | well as generate RPL traffic, and 'node' refers to any RPL device, | |||
| either a host or a router. | either a host or a router. | |||
| 3. Protocol Overview | 3. Protocol Overview | |||
| skipping to change at page 9, line 48 ¶ | skipping to change at page 10, line 7 ¶ | |||
| [RFC4101]. Protocol details can be found in further sections. | [RFC4101]. Protocol details can be found in further sections. | |||
| 3.1. Topology | 3.1. Topology | |||
| This section describes how the basic RPL topologies, and the rules by | This section describes how the basic RPL topologies, and the rules by | |||
| which these are constructed, i.e. the rules governing DODAG | which these are constructed, i.e. the rules governing DODAG | |||
| formation. | formation. | |||
| 3.1.1. Topology Identifiers | 3.1.1. Topology Identifiers | |||
| RPL uses four identifiers to track and control the topology: | RPL uses four identifiers to maintain the topology: | |||
| o The first is a RPLInstanceID. A RPLInstanceID identifies a set of | o The first is a RPLInstanceID. A RPLInstanceID identifies a set of | |||
| one or more DODAGs. All DODAGs in the same RPL Instance use the | one or more DODAGs. All DODAGs in the same RPL Instance use the | |||
| same OF. A network may have multiple RPLInstanceIDs, each of | same OF. A network may have multiple RPLInstanceIDs, each of | |||
| which defines an independent set of DODAGs, which may be optimized | which defines an independent set of DODAGs, which may be optimized | |||
| for different OFs and/or applications. The set of DODAGs | for different OFs and/or applications. The set of DODAGs | |||
| identified by a RPLInstanceID is called a RPL Instance. | identified by a RPLInstanceID is called a RPL Instance. | |||
| o The second is a DODAGID. The scope of a DODAGID is a RPL | o The second is a DODAGID. The scope of a DODAGID is a RPL | |||
| Instance. The combination of RPLInstanceID and DODAGID uniquely | Instance. The combination of RPLInstanceID and DODAGID uniquely | |||
| identifies a single DODAG in the network. A RPL Instance may have | identifies a single DODAG in the network. A RPL Instance may have | |||
| multiple DODAGs, each of which has an unique DODAGID. | multiple DODAGs, each of which has an unique DODAGID. | |||
| o The third is a DODAGSequenceNumber. The scope of a | o The third is a DODAGVersionNumber. The scope of a | |||
| DODAGSequenceNumber is a DODAG. A DODAG is sometimes | DODAGVersionNumber is a DODAG. A DODAG is sometimes reconstructed | |||
| reconstructed from the DODAG root, by incrementing the | from the DODAG root, by incrementing the DODAGVersionNumber. The | |||
| DODAGSequenceNumber. The combination of RPLInstanceID, DODAGID, | combination of RPLInstanceID, DODAGID, and DODAGVersionNumber | |||
| and DODAGSequenceNumber uniquely identifies a DODAG Iteration. | uniquely identifies a DODAG Version. | |||
| o The fourth is rank. The scope of rank is a DODAG Iteration. Rank | o The fourth is rank. The scope of rank is a DODAG Version. Rank | |||
| establishes a partial order over a DODAG Iteration, defining | establishes a partial order over a DODAG Version, defining | |||
| individual node positions with respect to the DODAG root. | individual node positions with respect to the DODAG root. | |||
| 3.1.2. DODAG Information | 3.2. Instances, DODAGs, and DODAG Versions | |||
| For each DODAG that a node is, or may become, a member of, the | ||||
| implementation should conceptually keep track of the following | ||||
| information. The data structures described in this section are | ||||
| intended to illustrate a possible implementation to aid in the | ||||
| description of the protocol, but are not intended to be normative. | ||||
| o RPLInstanceID | ||||
| o DODAGID | ||||
| o DODAGSequenceNumber | ||||
| o DAG Metric Container, including DAGObjectiveCodePoint | ||||
| o A set of Destination Prefixes offered by the DODAG root and | ||||
| available via paths upwards along the DODAG | ||||
| o A set of DODAG parents | ||||
| o A set of DODAG siblings | ||||
| o A timer to govern the sending of RPL control messages | ||||
| 3.2. Instances, DODAGs, and DODAG Iterations | ||||
| Each RPL Instance constructs a routing topology optimized for a | Each RPL Instance constructs a routing topology optimized for a | |||
| certain Objective Function (OF). A RPL Instance may provide routes | certain Objective Function (OF) and routing metrics | |||
| to certain destination prefixes, reachable via the DODAG roots. A | [I-D.ietf-roll-routing-metrics]. A RPL Instance may provide routes | |||
| single RPL Instance contains one or more Destination Oriented DAG | to certain destination prefixes, reachable via the DODAG roots or | |||
| (DODAG) roots. These roots may operate independently, or may | alternate paths within the DODAG. A single RPL Instance contains one | |||
| coordinate over a non-LLN backchannel. | or more Destination Oriented DAG (DODAG) roots. These roots may | |||
| operate independently, or may coordinate over a non-LLN backchannel. | ||||
| Each root has a unique identifier, the DODAGID. | Each root has a unique identifier, the DODAGID. | |||
| A RPL Instance may comprise: | A RPL Instance may comprise: | |||
| o a single DODAG with a single root | o a single DODAG with a single root | |||
| * For example, a DODAG optimized to minimize latency rooted at a | * For example, a DODAG optimized to minimize latency rooted at a | |||
| single centralized lighting controller in a home automation | single centralized lighting controller in a home automation | |||
| application. | application. | |||
| skipping to change at page 11, line 42 ¶ | skipping to change at page 11, line 23 ¶ | |||
| o a single DODAG with a single virtual root coordinating LLN sinks | o a single DODAG with a single virtual root coordinating LLN sinks | |||
| (with the same DODAGID) over some non-LLN backbone | (with the same DODAGID) over some non-LLN backbone | |||
| * For example, multiple border routers operating with a reliable | * For example, multiple border routers operating with a reliable | |||
| backbone, e.g. in support of a 6LowPAN application, that are | backbone, e.g. in support of a 6LowPAN application, that are | |||
| capable to act as logically equivalent sinks to the same DODAG. | capable to act as logically equivalent sinks to the same DODAG. | |||
| o a combination of the above as suited to some application scenario. | o a combination of the above as suited to some application scenario. | |||
| Traffic is bound to a specific RPL Instance by a marking in the flow | Traffic is bound to a specific RPL Instance by meta-data that is | |||
| label of the IPv6 header. Traffic originating in support of a | carried with the packet and associates the packet to a particular | |||
| particular application may be tagged to follow an appropriate RPL | RPLInstanceID (Section 8.2). The provisioning or automated discovery | |||
| instance which enables certain (path) properties, for example to | of a mapping between a RPLInstanceID and a type or service of | |||
| follow paths optimized for low latency or low energy. The | application traffic is beyond the scope of this specification. | |||
| provisioning or automated discovery of a mapping between a | ||||
| RPLInstanceID and a type or service of application traffic is beyond | ||||
| the scope of this specification. | ||||
| An example of a RPL Instance comprising a number of DODAGs is | An example of a RPL Instance comprising a number of DODAGs is | |||
| depicted in Figure 1. A DODAG Iteration (two "versions" of the same | depicted in Figure 1. Revision of a DODAG Version (two iterations of | |||
| DODAG) is depicted in Figure 2. | the same DODAG) is depicted in Figure 2. | |||
| +----------------------------------------------------------------+ | +----------------------------------------------------------------+ | |||
| | | | | | | |||
| | +--------------+ | | | +--------------+ | | |||
| | | | | | | | | | | |||
| | | (R1) | (R2) (Rn) | | | | (R1) | (R2) (Rn) | | |||
| | | / \ | /| \ / | \ | | | | / \ | /| \ / | \ | | |||
| | | / \ | / | \ / | \ | | | | / \ | / | \ / | \ | | |||
| | | (A) (B) | (C) | (D) ... (F) (G) (H) | | | | (A) (B) | (C) | (D) ... (F) (G) (H) | | |||
| | | /|\ |\ | / | |\ | | | | | | | /|\ |\ | / | |\ | | | | | |||
| skipping to change at page 12, line 40 ¶ | skipping to change at page 12, line 20 ¶ | |||
| | (A) (B) | \ | (A) | | | (A) (B) | \ | (A) | | |||
| | /|\ |\ | ------\ | /|\ | | | /|\ |\ | ------\ | /|\ | | |||
| | : : (C) : : | \ | : : (C) | | | : : (C) : : | \ | : : (C) | | |||
| | | / | \ | | | | / | \ | | |||
| | | ------/ | \ | | | | ------/ | \ | | |||
| | | / | (B) | | | | / | (B) | | |||
| | | | |\ | | | | | |\ | | |||
| | | | : : | | | | | : : | | |||
| | | | | | | | | | | |||
| +----------------+ +----------------+ | +----------------+ +----------------+ | |||
| Sequence N Sequence N+1 | Version N Version N+1 | |||
| Figure 2: DODAG Iteration | ||||
| 3.3. Traffic Flows | ||||
| 3.3.1. Multipoint-to-Point Traffic | ||||
| Multipoint-to-Point (MP2P) is a dominant traffic flow in many LLN | ||||
| applications ([I-D.ietf-roll-building-routing-reqs], | ||||
| [I-D.ietf-roll-home-routing-reqs], [RFC5673], [RFC5548]). The | ||||
| destinations of MP2P flows are designated nodes that have some | ||||
| application significance, such as providing connectivity to the | ||||
| larger Internet or core private IP network. RPL supports MP2P | ||||
| traffic by allowing MP2P destinations to be reached via DODAG roots. | ||||
| 3.3.2. Point-to-Multipoint Traffic | ||||
| Point-to-multipoint (P2MP) is a traffic pattern required by several | ||||
| LLN applications ([I-D.ietf-roll-building-routing-reqs], | ||||
| [I-D.ietf-roll-home-routing-reqs], [RFC5673], [RFC5548]). RPL | ||||
| supports P2MP traffic by using a destination advertisement mechanism | ||||
| that provisions routes toward destination prefixes and away from | ||||
| roots. Destination advertisements can update routing tables as the | ||||
| underlying DODAG topology changes. | ||||
| 3.3.3. Point-to-Point Traffic | ||||
| RPL DODAGs provide a basic structure for point-to-point (P2P) | ||||
| traffic. For a RPL network to support P2P traffic, a root must be | ||||
| able to route packets to a destination. Nodes within the network may | ||||
| also have routing tables to destinations. A packet flows towards a | ||||
| root until it reaches an ancestor that has a known route to the | ||||
| destination. | ||||
| RPL also supports the case where a P2P destination is a 'one-hop' | ||||
| neighbor. | ||||
| RPL neither specifies nor precludes additional mechanisms for | Figure 2: DODAG Version | |||
| computing and installing more optimal routes to support arbitrary P2P | ||||
| traffic. | ||||
| 3.4. Upward Routes and DODAG Construction | 3.3. Upward Routes and DODAG Construction | |||
| RPL provisions routes up towards DODAG roots, forming a DODAG | RPL provisions routes up towards DODAG roots, forming a DODAG | |||
| optimized according to the Objective Function (OF) in use. RPL nodes | optimized according to the Objective Function (OF) and routing | |||
| construct and maintain these DODAGs through exchange of DODAG | metrics/constraints in use. RPL nodes construct and maintain these | |||
| Information Object (DIO) messages. Undirected links between siblings | DODAGs through exchange of DODAG Information Object (DIO) messages. | |||
| are also identified during this process, which can be used to provide | Undirected links between siblings are also identified during this | |||
| additional diversity. | process, which can be used to provide additional diversity. | |||
| 3.4.1. DODAG Information Object (DIO) | ||||
| A DIO identifies the RPL Instance, the DODAGID, the values used to | ||||
| compute the RPL Instance's objective function, and the present DODAG | ||||
| Sequence Number. It can also include additional routing and | ||||
| configuration information. The DIO includes a measure derived from | ||||
| the position of the node within the DODAG, the rank, which is used | ||||
| for nodes to determine their positions relative to each other and to | ||||
| inform loop avoidance/detection procedures. RPL exchanges DIO | ||||
| messages to establish and maintain routes. | ||||
| RPL adapts the rate at which nodes send DIO messages. When a DODAG | ||||
| is detected to be inconsistent or needs repair, RPL sends DIO | ||||
| messages more frequently. As the DODAG stabilizes, the DIO message | ||||
| rate tapers off, reducing the maintenance cost of a steady and well- | ||||
| working DODAG. | ||||
| This document defines an ICMPv6 Message Type "RPL Control Message", | ||||
| which is capable of carrying a DIO. | ||||
| 3.4.2. DAG Repair | 3.3.1. DAG Repair | |||
| RPL supports global repair over the DODAG. A DODAG Root may | RPL supports global repair over the DODAG. A DODAG Root may | |||
| increment the DODAG Sequence Number, thereby initiating a new DODAG | increment the DODAG Version Number, thereby initiating a new DODAG | |||
| iteration. This institutes a global repair operation, revising the | version. This institutes a global repair operation, revising the | |||
| DODAG and allowing nodes to choose an arbitrary new position within | DODAG and allowing nodes to choose an arbitrary new position within | |||
| the new DODAG iteration. | the new DODAG version. Global repair can be seen as a global | |||
| reoptimization mechanism. | ||||
| RPL supports mechanisms which may be used for local repair within the | ||||
| DODAG iteration. The DIO message specifies the necessary parameters | ||||
| as configured from the DODAG root. Local repair options include the | ||||
| allowing a node, upon detecting a loss of connectivity to a DODAG it | ||||
| is a member of, to: | ||||
| o Poison its sub-DODAG by advertising an effective rank of INFINITY | ||||
| to its sub-DODAG, OR detach and form a floating DODAG in order to | ||||
| preserve inner connectivity within its sub-DODAG. | ||||
| o Move down within the DODAG iteration (i.e. increase its rank) in a | RPL also supports mechanisms which may be used for local repair | |||
| limited manner, no further than a bound configured by the DODAG | within the DODAG version. The DIO message specifies the necessary | |||
| root via the DIO so as not to count all the way to infinity. Such | parameters as configured from the DODAG root, as controlled by policy | |||
| a move may be undertaken after waiting an appropriate poisoning | at the root. | |||
| interval, and should allow the node to restore connectivity to the | ||||
| DODAG Iteration, if at all possible. | ||||
| 3.4.3. Grounded and Floating DODAGs | 3.3.2. Grounded and Floating DODAGs | |||
| DODAGs can be grounded or floating. A grounded DODAG offers | DODAGs can be grounded or floating. A grounded DODAG offers | |||
| connectivity to to a goal. A floating DODAG offers no such | connectivity to reach a goal. A floating DODAG offers no such | |||
| connectivity, and provides routes only to nodes within the DODAG. | connectivity, and provides routes only to nodes within the DODAG. | |||
| Floating DODAGs may be used, for example, to preserve inner | Floating DODAGs may be used, for example, to preserve inner | |||
| connectivity during repair. | connectivity during repair. | |||
| 3.4.4. Administrative Preference | 3.3.3. Administrative Preference | |||
| An implementation/deployment may specify that some DODAG roots should | An implementation/deployment may specify that some DODAG roots should | |||
| be used over others through an administrative preference. | be used over others through an administrative preference. | |||
| Administrative preference offers a way to control traffic and | Administrative preference offers a way to control traffic and | |||
| engineer DODAG formation in order to better support application | engineer DODAG formation in order to better support application | |||
| requirements or needs. | requirements or needs. | |||
| 3.4.5. Objective Function (OF) | 3.3.4. Objective Function (OF) | |||
| The Objective Function (OF) implements the optimization objectives of | The Objective Function (OF) implements the optimization objectives of | |||
| route selection within the RPL Instance. The OF is identified by an | route selection within the RPL Instance. The OF is identified by an | |||
| Objective Code Point (OCP) within the DIO, and its specification also | Objective Code Point (OCP) within the DIO. The OF also specifies the | |||
| indicates the metrics and constraints in use. The OF also specifies | procedure used to select parents and compute rank within a DODAG | |||
| the procedure used to compute rank within a DODAG iteration. Further | version along with potentially other DODAG characteristics. Further | |||
| details may be found in [I-D.ietf-roll-routing-metrics], | details may be found in Section 11, [I-D.ietf-roll-routing-metrics], | |||
| [I-D.ietf-roll-of0], and related companion specifications. | [I-D.ietf-roll-of0], and related companion specifications. | |||
| By using defined OFs that are understood by all nodes in a particular | 3.3.5. Distributed Algorithm Operation | |||
| deployment, and by referencing these in the DIO message, RPL nodes | ||||
| may work to build optimized LLN routes using a variety of application | ||||
| and implementation specific metrics and goals. | ||||
| In the case where a node is unable to encounter a suitable RPL | ||||
| Instance using a known Objective Function, it may be configured to | ||||
| join a RPL Instance using an unknown Objective Function - but in that | ||||
| case only acting as a leaf node. | ||||
| 3.4.6. Distributed Algorithm Operation | ||||
| A high level overview of the distributed algorithm which constructs | A high level overview of the distributed algorithm, which constructs | |||
| the DODAG is as follows: | the DODAG, is as follows: | |||
| o Some nodes are configured to be DODAG roots, with associated DODAG | o Some nodes are configured to be DODAG roots, with associated DODAG | |||
| configuration. | configuration. | |||
| o Nodes advertise their presence, affiliation with a DODAG, routing | o Nodes advertise their presence, affiliation with a DODAG, routing | |||
| cost, and related metrics by sending link-local multicast DIO | cost, and related metrics by sending link-local multicast DIO | |||
| messages. | messages. | |||
| o Nodes may adjust the rate at which DIO messages are sent in | o Nodes may adjust the rate at which DIO messages are sent in | |||
| response to stability or detection of routing inconsistencies. | response to stability or detection of routing inconsistencies from | |||
| both control or data packets (see Section 8.2 for more). | ||||
| o Nodes listen for DIOs and use their information to join a new | o Nodes listen for DIOs and use their information to join a new | |||
| DODAG, or to maintain an existing DODAG, as according to the | DODAG, or to maintain an existing DODAG, as according to the | |||
| specified Objective Function and rank-based loop avoidance rules. | specified Objective Function and rank-based loop avoidance rules. | |||
| o Nodes provision routing table entries, for the destinations | o Nodes provision routing table entries, for the destinations | |||
| specified by the DIO, via their DODAG parents in the DODAG | specified by the DIO, via their DODAG parents in the DODAG | |||
| iteration. Nodes may provision a DODAG parent as a default | version. Nodes MUST provision a DODAG parent as a default route | |||
| gateway. | for the associated instance. It is up to the end-to-end | |||
| application to select the RPL instance to be associated to its | ||||
| o Nodes may identify DODAG siblings within the DODAG iteration to | traffic (should there be more than one instance) and thus the | |||
| increase path diversity. | default route upwards when no longer-match exists. | |||
| o Using DIOs, and possibly information in data packets, RPL nodes | o Nodes may identify DODAG siblings within the DODAG version to | |||
| detect possible routing loops. When a RPL node detects a possible | increase path diversity and decrease convergence time during | |||
| routing loop, it may adapt its DIO transmission rate to apply a | repair. | |||
| local repair to the topology. | ||||
| 3.5. Downward Routes and Destination Advertisement | 3.4. Downward Routes and Destination Advertisement | |||
| RPL constructs and maintains DODAGs with DIO messages to establish | RPL constructs and maintains DODAGs with DIO messages to establish | |||
| upward routes: it uses Destination Advertisement Object (DAO) | upward routes: it uses Destination Advertisement Object (DAO) | |||
| messages to establish downward routes along the DODAG as well as | messages to establish downward routes along the DODAG as well as | |||
| other routes. DAO messages are an optional feature for applications | other P2P routes. DAO messages are an optional feature for | |||
| that require P2MP or P2P traffic. DIO messages advertise whether | applications that require P2MP or P2P traffic, in either storing | |||
| destination advertisements are enabled within a given DODAG. | (fully stateful) or non-storing (fully source routed | |||
| [I-D.hui-6man-rpl-routing-header]) mode. | ||||
| 3.5.1. Destination Advertisement Object (DAO) | ||||
| A Destination Advertisement Object (DAO) conveys destination | ||||
| information upwards along the DODAG so that a DODAG root (and other | ||||
| intermediate nodes) can provision downward routes. A DAO message | ||||
| includes prefix information to identify destinations, a capability to | ||||
| record routes in support of source routing, and information to | ||||
| determine the freshness of a particular advertisement. | ||||
| Nodes that are capable of maintaining routing state may aggregate | ||||
| routes from DAO messages that they receive before transmitting a DAO | ||||
| message. Nodes that are not capable of maintaining routing state may | ||||
| attach a next-hop address to the Reverse Route Stack contained within | ||||
| the DAO message. The Reverse Route Stack is subsequently used to | ||||
| generate piecewise source routes over regions of the LLN that are | ||||
| incapable of storing downward routing state. | ||||
| A special case of the DAO message, termed a no-DAO, is used to clear | ||||
| downward routing state that has been provisioned through DAO | ||||
| operation. | ||||
| This document defines an ICMPv6 Message Type "RPL Control Message", | ||||
| which is capable of carrying a DAO. | ||||
| 3.5.1.1. 'One-Hop' Neighbors | ||||
| In addition to sending DAOs toward DODAG roots, RPL nodes may | ||||
| occasionally emit a link-local multicast DAO message advertising | ||||
| available destination prefixes. This mechanism allow provisioning a | ||||
| trivial 'one-hop' route to local neighbors. | ||||
| 3.6. Routing Metrics and Constraints Used By RPL | 3.5. Routing Metrics and Constraints Used By RPL | |||
| Routing metrics are used by routing protocols to compute shortest | Routing metrics are used by routing protocols to compute shortest | |||
| paths. Interior Gateway Protocols (IGPs) such as IS-IS ([RFC5120]) | paths. Interior Gateway Protocols (IGPs) such as IS-IS ([RFC5120]) | |||
| and OSPF ([RFC4915]) use static link metrics. Such link metrics can | and OSPF ([RFC4915]) use static link metrics. Such link metrics can | |||
| simply reflect the bandwidth or can also be computed according to a | simply reflect the bandwidth or can also be computed according to a | |||
| polynomial function of several metrics defining different link | polynomial function of several metrics defining different link | |||
| characteristics; in all cases they are static metrics. Some routing | characteristics. Some routing protocols support more than one | |||
| protocols support more than one metric: in the vast majority of the | metric: in the vast majority of the cases, one metric is used per | |||
| cases, one metric is used per (sub)topology. Less often, a second | (sub)topology. Less often, a second metric may be used as a tie- | |||
| metric may be used as a tie-breaker in the presence of Equal Cost | breaker in the presence of Equal Cost Multiple Paths (ECMP). The | |||
| Multiple Paths (ECMP). The optimization of multiple metrics is known | optimization of multiple metrics is known as an NP complete problem | |||
| as an NP complete problem and is sometimes supported by some | and is sometimes supported by some centralized path computation | |||
| centralized path computation engine. | engine. | |||
| In contrast, LLNs do require the support of both static and dynamic | In contrast, LLNs do require the support of both static and dynamic | |||
| metrics. Furthermore, both link and node metrics are required. In | metrics. Furthermore, both link and node metrics are required. In | |||
| the case of RPL, it is virtually impossible to define one metric, or | the case of RPL, it is virtually impossible to define one metric, or | |||
| even a composite metric, that will satisfy all use cases. | even a composite metric, that will satisfy all use cases. | |||
| In addition, RPL supports constrained-based routing where constraints | In addition, RPL supports constrained-based routing where constraints | |||
| may be applied to both link and nodes. If a link or a node does not | may be applied to both link and nodes. If a link or a node does not | |||
| satisfy a required constraint, it is 'pruned' from the candidate | satisfy a required constraint, it is 'pruned' from the candidate | |||
| list, thus leading to a constrained shortest path. | list, thus leading to a constrained shortest path. | |||
| The set of supported link/node constraints and metrics is specified | The set of supported link/node constraints and metrics is specified | |||
| in [I-D.ietf-roll-routing-metrics]. | in [I-D.ietf-roll-routing-metrics]. | |||
| The role of the Objective Function is to specify which routing | An Objective Function specifies constraints in use, and how these are | |||
| metrics and constraints are in use, and how these are used, in | used, in addition to the objectives used to compute the (constrained) | |||
| addition to the objectives used to compute the (constrained) shortest | path. Upstream and Downstream metrics may be merged or advertised | |||
| path. | separately depending on the OF and the metrics. When they are | |||
| advertised separately, it may happen that the set of DIO parents is | ||||
| different from the set of DAO parents (a DAO parent is a node to | ||||
| which unicast DAO messages are sent). Yet, all are DODAG parents | ||||
| with regards to the rules for Rank computation. | ||||
| Example 1: Shortest path: path offering the shortest end-to-end delay | Example 1: Shortest path: path offering the shortest end-to-end delay | |||
| Example 2: Constrained shortest path: the path that does not traverse | Example 2: Constrained shortest path: the path that does not traverse | |||
| any battery-operated node and that optimizes the path | any battery-operated node and that optimizes the path | |||
| reliability | reliability | |||
| 3.6.1. Loop Avoidance | 3.5.1. Loop Avoidance | |||
| RPL guarantees neither loop free path selection nor strong global | RPL guarantees neither loop free path selection nor tight delay | |||
| convergence. In order to reduce control overhead, however, such as | convergence times. In order to reduce control overhead, however, | |||
| the cost of the count-to-infinity problem, RPL avoids creating loops | such as the cost of the count-to-infinity problem, RPL avoids | |||
| when undergoing topology changes. Furthermore, RPL includes rank- | creating loops when undergoing topology changes. Furthermore, RPL | |||
| based mechanisms for detecting loops when they do occur. RPL uses | includes rank-based datapath validation mechanisms for detecting | |||
| this loop detection to ensure that packets make forward progress | loops when they do occur. RPL uses this loop detection to ensure | |||
| within the DODAG iteration and trigger repairs when necessary. | that packets make forward progress within the DODAG version and | |||
| trigger repairs when necessary. | ||||
| 3.6.1.1. Greediness and Rank-based Instabilities | 3.5.1.1. Greediness and Rank-based Instabilities | |||
| Once a node has joined a DODAG iteration, RPL disallows certain | A node is greedy if it attempts to move deeper in the DODAG version, | |||
| behaviors, including greediness, in order to prevent resulting | in order to increase the size of the parent set or improve some other | |||
| instabilities in the DODAG iteration. | metric. Moving deeper in within a DODAG version in this manner could | |||
| result in instability and be detrimental to other nodes. | ||||
| If a node is allowed to be greedy and attempts to move deeper in the | Once a node has joined a DODAG version, RPL disallows certain | |||
| DODAG iteration, beyond its most preferred parent, in order to | behaviors, including greediness, in order to prevent resulting | |||
| increase the size of the parent set, then an instability can result. | instabilities in the DODAG version. | |||
| Suppose a node is willing to receive and process a DIO messages from | Suppose a node is willing to receive and process a DIO messages from | |||
| a node in its own sub-DODAG, and in general a node deeper than | a node in its own sub-DODAG, and in general a node deeper than | |||
| itself. In this case, a possibility exists that a feedback loop is | itself. In this case, a possibility exists that a feedback loop is | |||
| created, wherein two or more nodes continue to try and move in the | created, wherein two or more nodes continue to try and move in the | |||
| DODAG iteration while attempting to optimize against each other. In | DODAG version while attempting to optimize against each other. In | |||
| some cases, this will result in instability. It is for this reason | some cases, this will result in instability. It is for this reason | |||
| that RPL limits the cases where a node may process DIO messages from | that RPL limits the cases where a node may process DIO messages from | |||
| deeper nodes to some forms of local repair. This approach creates an | deeper nodes to some forms of local repair. This approach creates an | |||
| 'event horizon', whereby a node cannot be influenced beyond some | 'event horizon', whereby a node cannot be influenced beyond some | |||
| limit into an instability by the action of nodes that may be in its | limit into an instability by the action of nodes that may be in its | |||
| own sub-DODAG. | own sub-DODAG. | |||
| 3.6.1.2. DODAG Loops | 3.5.1.2. DODAG Loops | |||
| A DODAG loop may occur when a node detaches from the DODAG and | A DODAG loop may occur when a node detaches from the DODAG and | |||
| reattaches to a device in its prior sub-DODAG. This may happen in | reattaches to a device in its prior sub-DODAG. This may happen in | |||
| particular when DIO messages are missed. Strict use of the DAG | particular when DIO messages are missed. Strict use of the DODAG | |||
| sequence number can eliminate this type of loop, but this type of | Version Number can eliminate this type of loop, but this type of loop | |||
| loop may possibly be encountered when using some local repair | may possibly be encountered when using some local repair mechanisms. | |||
| mechanisms. | ||||
| 3.6.1.3. DAO Loops | 3.5.1.3. DAO Loops | |||
| A DAO loop may occur when the parent has a route installed upon | A DAO loop may occur when the parent has a route installed upon | |||
| receiving and processing a DAO message from a child, but the child | receiving and processing a DAO message from a child, but the child | |||
| has subsequently cleaned up the related DAO state. This loop happens | has subsequently cleaned up the related DAO state. This loop happens | |||
| when a no-DAO was missed and persists until all state has been | when a No-Path (a DAO message that invalidates a previously announced | |||
| cleaned up. RPL includes loop detection mechanisms that may mitigate | prefix) was missed and persists until all state has been cleaned up. | |||
| the impact of DAO loops and trigger their repair. | RPL includes an optional mechanism to acknowledge DAO messages, which | |||
| may mitigate the impact of a single DAO message being missed. RPL | ||||
| includes loop detection mechanisms that may mitigate the impact of | ||||
| DAO loops and trigger their repair. | ||||
| In the case where stateless DAO operation is used, i.e. source | In the case where stateless DAO operation is used, i.e. source | |||
| routing specifies the down routes, then DAO Loops should not occur on | routing specifies the down routes, then DAO Loops should not occur on | |||
| the stateless portions of the path. | the stateless portions of the path. | |||
| 3.6.1.4. Sibling Loops | 3.5.1.4. Sibling Loops | |||
| Sibling loops could occur if a group of siblings kept choosing | Sibling loops could occur if a group of siblings kept choosing | |||
| amongst themselves as successors such that a packet does not make | amongst themselves as successors such that a packet does not make | |||
| forward progress. This specification limits the number of times that | forward progress. This specification limits the number of times that | |||
| sibling forwarding may be used at a given rank, in order to prevent | sibling forwarding may be used at a given rank, in order to prevent | |||
| sibling loops. | sibling loops. | |||
| 3.6.2. Rank Properties | 3.5.2. Rank Properties | |||
| The rank of a node is a scalar representation of the location of that | The rank of a node is a scalar representation of the location of that | |||
| node within a DODAG iteration. The rank is used to avoid and detect | node within a DODAG version. The rank is used to avoid and detect | |||
| loops, and as such must demonstrate certain properties. The exact | loops, and as such must demonstrate certain properties. The exact | |||
| calculation of the rank is left to the Objective Function, and may | calculation of the rank is left to the Objective Function, and may | |||
| depend on parents, link metrics, and the node configuration and | depend on parents, link metrics, and the node configuration and | |||
| policies. | policies. | |||
| The rank is not a cost metric, although its value can be derived from | The rank is not a cost metric, although its value can be derived from | |||
| and influenced by metrics. The rank has properties of its own that | and influenced by metrics. The rank has properties of its own that | |||
| are not necessarily those of all metrics: | are not necessarily those of all metrics: | |||
| Type: Rank is an abstract scalar. Some metrics are boolean (e.g. | Type: The rank is an abstract decimal value. | |||
| grounded), others are statistical and better expressed as a | ||||
| tuple like an expected value and a variance. Some OCPs use | ||||
| not one but a set of metrics bound by a piece of logic. | ||||
| Function: Rank is the expression of a relative position within a | Function: The rank is the expression of a relative position within a | |||
| DODAG iteration with regard to neighbors and is not | DODAG version with regard to neighbors and is not necessarily | |||
| necessarily a good indication or a proper expression of a | a good indication or a proper expression of a distance or a | |||
| distance or a cost to the root. | cost to the root. | |||
| Stability: The stability of the rank determines the stability of the | Stability: The stability of the rank determines the stability of the | |||
| routing topology. Some dampening or filtering might be | routing topology. Some dampening or filtering might be | |||
| applied to keep the topology stable, and thus the rank does | applied to keep the topology stable, and thus the rank does | |||
| not necessarily change as fast as some physical metrics | not necessarily change as fast as some physical metrics | |||
| would. A new DODAG iteration would be a good opportunity to | would. A new DODAG version would be a good opportunity to | |||
| reconcile the discrepancies that might form over time between | reconcile the discrepancies that might form over time between | |||
| metrics and ranks within a DODAG iteration. | metrics and ranks within a DODAG version. | |||
| Granularity: Rank is coarse grained. A fine granularity would | Granularity: The portion of the rank that is used to define a node's | |||
| prevent the selection of siblings. | position in the DAG, DAGRank(node), is coarse grained. A | |||
| fine granularity would make the selection of siblings | ||||
| difficult, since siblings must have the exact same rank | ||||
| value. | ||||
| Properties: Rank is strictly monotonic, and can be used to validate | Properties: The rank is strictly monotonic, and can be used to | |||
| a progression from or towards the root. A metric, like | validate a progression from or towards the root. A metric, | |||
| bandwidth or jitter, does not necessarily exhibit this | like bandwidth or jitter, does not necessarily exhibit this | |||
| property. | property. | |||
| Abstract: Rank does not have a physical unit, but rather a range of | Abstract: The rank does not have a physical unit, but rather a range | |||
| increment per hop, where the assignment of each increment is | of increment per hop, where the assignment of each increment | |||
| to be determined by the implementation. | is to be determined by the Objective Function. | |||
| The rank value feeds into DODAG parent selection, according to the | The rank value feeds into DODAG parent selection, according to the | |||
| RPL loop-avoidance strategy. Once a parent has been added, and a | RPL loop-avoidance strategy. Once a parent has been added, and a | |||
| rank value for the node within the DODAG has been advertised, the | rank value for the node within the DODAG has been advertised, the | |||
| nodes further options with regard to DODAG parent selection and | nodes further options with regard to DODAG parent selection and | |||
| movement within the DODAG are restricted in favor of loop avoidance. | movement within the DODAG are restricted in favor of loop avoidance. | |||
| 3.6.2.1. Rank Comparison (DAGRank()) | 3.5.2.1. Rank Comparison (DAGRank()) | |||
| Rank may be thought of as a fixed point number, where the position of | Rank may be thought of as a fixed point number, where the position of | |||
| the decimal point between the integer part and the fractional part is | the decimal point between the integer part and the fractional part is | |||
| determined by MinHopRankIncrease. MinHopRankIncrease is the minimum | determined by MinHopRankIncrease. MinHopRankIncrease is the minimum | |||
| increase in rank between a node and any of its DODAG parents. When | increase in rank between a node and any of its DODAG parents. When | |||
| an objective function computes rank, the objective function operates | an objective function computes rank, the objective function operates | |||
| on the entire (i.e. 16-bit) rank quantity. When rank is compared, | on the entire (i.e. 16-bit) rank quantity. When rank is compared, | |||
| e.g. for determination of parent/sibling relationships or loop | e.g. for determination of parent/sibling relationships or loop | |||
| detection, the integer portion of the rank is to be used. The | detection, the integer portion of the rank is to be used. The | |||
| integer portion of the Rank is computed by the DAGRank() macro as | integer portion of the Rank is computed by the DAGRank() macro as | |||
| follows: | follows: | |||
| DAGRank(rank) = floor(rank/MinHopRankIncrease) | DAGRank(rank) = floor(rank/MinHopRankIncrease) | |||
| MinHopRankIncrease is provisioned at the DODAG Root and propagated in | MinHopRankIncrease is provisioned at the DODAG Root and propagated in | |||
| the DIO message. For efficient implementation the MinHopRankIncrease | the DIO message. For efficient implementation the MinHopRankIncrease | |||
| SHOULD be a power of 2. An implementation may configure a value | MUST be a power of 2. An implementation may configure a value | |||
| MinHopRankIncrease as appropriate to balance between the loop | MinHopRankIncrease as appropriate to balance between the loop | |||
| avoidance logic of RPL (i.e. selection of eligible parents and | avoidance logic of RPL (i.e. selection of eligible parents and | |||
| siblings) and the metrics in use. | siblings) and the metrics in use. | |||
| By convention in this document, using the macro DAGRank(node) may be | By convention in this document, using the macro DAGRank(node) may be | |||
| interpreted as DAGRank(node.rank), where node.rank is the rank value | interpreted as DAGRank(node.rank), where node.rank is the rank value | |||
| as maintained by the node. | as maintained by the node. | |||
| A node A has a rank less than the rank of a node B if DAGRank(A) is | A node A has a rank less than the rank of a node B if DAGRank(A) is | |||
| less than DAGRank(B). | less than DAGRank(B). | |||
| A node A has a rank equal to the rank of a node B if DAGRank(A) is | A node A has a rank equal to the rank of a node B if DAGRank(A) is | |||
| equal to DAGRank(B). | equal to DAGRank(B). | |||
| A node A has a rank greater than the rank of a node B if DAGRank(A) | A node A has a rank greater than the rank of a node B if DAGRank(A) | |||
| is greater than DAGRank(B). | is greater than DAGRank(B). | |||
| 3.6.2.2. Rank Relationships | 3.5.2.2. Rank Relationships | |||
| The computation of the rank MUST be done in such a way so as to | The computation of the rank MUST be done in such a way so as to | |||
| maintain the following properties for any nodes M and N that are | maintain the following properties for any nodes M and N that are | |||
| neighbors in the LLN: | neighbors in the LLN: | |||
| DAGRank(M) is less than DAGRank(N): In this case, the position of M | DAGRank(M) is less than DAGRank(N): In this case, the position of M | |||
| is closer to the DODAG root than the position of N. Node M | is closer to the DODAG root than the position of N. Node M | |||
| may safely be a DODAG parent for Node N without risk of | may safely be a DODAG parent for Node N without risk of | |||
| creating a loop. Further, for a node N, all parents in the | creating a loop. Further, for a node N, all parents in the | |||
| DODAG parent set must be of rank less than DAGRank(N). In | DODAG parent set must be of rank less than DAGRank(N). In | |||
| skipping to change at page 21, line 43 ¶ | skipping to change at page 18, line 50 ¶ | |||
| creating a loop (which must be detected and resolved by some | creating a loop (which must be detected and resolved by some | |||
| other means). | other means). | |||
| DAGRank(M) is greater than DAGRank(N): In this case, the position of | DAGRank(M) is greater than DAGRank(N): In this case, the position of | |||
| M is farther from the DODAG root than the position of N. | M is farther from the DODAG root than the position of N. | |||
| Further, Node M may in fact be in the sub-DODAG of Node N. If | Further, Node M may in fact be in the sub-DODAG of Node N. If | |||
| node N selects node M as DODAG parent there is a risk to | node N selects node M as DODAG parent there is a risk to | |||
| create a loop. | create a loop. | |||
| As an example, the rank could be computed in such a way so as to | As an example, the rank could be computed in such a way so as to | |||
| closely track ETX when the objective function is to minimize ETX, or | closely track ETX (Expected Transmission Count, a fairly common | |||
| latency when the objective function is to minimize latency, or in a | routing metric used in LLN and defined in | |||
| more complicated way as appropriate to the objective function being | ||||
| used within the DODAG. | ||||
| 4. ICMPv6 RPL Control Message | [I-D.ietf-roll-routing-metrics]) when the objective function is to | |||
| minimize ETX, or latency when the objective function is to minimize | ||||
| latency, or in a more complicated way as appropriate to the objective | ||||
| function being used within the DODAG. | ||||
| 3.6. Traffic Flows Supported by RPL | ||||
| 3.6.1. Multipoint-to-Point Traffic | ||||
| Multipoint-to-Point (MP2P) is a dominant traffic flow in many LLN | ||||
| applications ([I-D.ietf-roll-building-routing-reqs], [RFC5826], | ||||
| [RFC5673], [RFC5548]). The destinations of MP2P flows are designated | ||||
| nodes that have some application significance, such as providing | ||||
| connectivity to the larger Internet or core private IP network. RPL | ||||
| supports MP2P traffic by allowing MP2P destinations to be reached via | ||||
| DODAG roots. | ||||
| 3.6.2. Point-to-Multipoint Traffic | ||||
| Point-to-multipoint (P2MP) is a traffic pattern required by several | ||||
| LLN applications ([I-D.ietf-roll-building-routing-reqs], [RFC5826], | ||||
| [RFC5673], [RFC5548]). RPL supports P2MP traffic by using a | ||||
| destination advertisement mechanism that provisions routes toward | ||||
| destination prefixes and away from roots. Destination advertisements | ||||
| can update routing tables as the underlying DODAG topology changes. | ||||
| 3.6.3. Point-to-Point Traffic | ||||
| RPL DODAGs provide a basic structure for point-to-point (P2P) | ||||
| traffic. For a RPL network to support P2P traffic, a root must be | ||||
| able to route packets to a destination. Nodes within the network may | ||||
| also have routing tables to destinations. A packet flows towards a | ||||
| root until it reaches an ancestor that has a known route to the | ||||
| destination. As pointed out later in this document, in the most | ||||
| constrained case (when nodes cannot store routes), that common | ||||
| ancestor may be the DODAG root. In other cases it may be a node | ||||
| closer to both the source and destination. | ||||
| RPL also supports the case where a P2P destination is a 'one-hop' | ||||
| neighbor. | ||||
| RPL neither specifies nor precludes additional mechanisms for | ||||
| computing and installing potentially more optimal routes to support | ||||
| arbitrary P2P traffic. | ||||
| 4. RPL Instance | ||||
| Within a given LLN, there may be multiple, logically independent RPL | ||||
| instances. This document describes how a single instance behaves. | ||||
| A node may belong to multiple RPL Instances. | ||||
| An instance can be either local to a root or global. When the | ||||
| instance is local, the DAG is a single DODAG that is rooted at the | ||||
| node that owns the DODAGID. This is used in particular for the | ||||
| construction of a temporary DODAG in support of P2P traffic | ||||
| optimization between the root and some other nodes. | ||||
| Control and Data Packets that traverse a RPL network MUST be tagged | ||||
| in such a fashion that the instance is unambiguously identified (TBD | ||||
| flow label or RPL Hop-by-hop option ([I-D.hui-6man-rpl-option])). | ||||
| The identifiers include the RPLInstanceID and the DODAGID for local | ||||
| instances. | ||||
| 4.1. RPL Instance ID | ||||
| A global RPLInstanceID MUST be unique to the whole LLN. Mechanisms | ||||
| for allocating and provisioning global RPLInstanceID are out of scope | ||||
| for this document. There can be up to 128 global instance in the | ||||
| whole network, and up 64 local instances per DODAGID. | ||||
| A global RPLinstanceID is encoded in a RPLinstanceID field as | ||||
| follows: | ||||
| 0 1 2 3 4 5 6 7 | ||||
| +-+-+-+-+-+-+-+-+ | ||||
| |0| ID | Global RPLinstanceID in 0..127 | ||||
| +-+-+-+-+-+-+-+-+ | ||||
| Figure 3: RPL Instance ID field format for global instances | ||||
| A local RPLInstanceID is autoconfigured by the node that owns the | ||||
| DODAGID and it MUST be unique for that DODAGID. In that case, the | ||||
| DODAGID MUST be a valid address of the root that is used as an | ||||
| endpoint of all communications within that instance. | ||||
| A local RPLinstanceID is encoded in a RPLinstanceID field as follows: | ||||
| 0 1 2 3 4 5 6 7 | ||||
| +-+-+-+-+-+-+-+-+ | ||||
| |1|D| ID | Local RPLInstanceID in 0..63 | ||||
| +-+-+-+-+-+-+-+-+ | ||||
| Figure 4: RPL Instance ID field format for local instances | ||||
| The D flag in a Local RPLInstanceID is always set to 0 in RPL control | ||||
| messages. It is used in data packets to indicate whether the DODAGID | ||||
| is the source or the destination of the packet. If the D flag is set | ||||
| to 1 then the destination address of the IPv6 packet MUST be the | ||||
| DODAGID. If the D flag is clear then the source address of the IPv6 | ||||
| packet MUST be the DODAGID. | ||||
| 5. ICMPv6 RPL Control Message | ||||
| This document defines the RPL Control Message, a new ICMPv6 message. | This document defines the RPL Control Message, a new ICMPv6 message. | |||
| A RPL Control Message is identified by a code, and composed of a base | ||||
| that depends on the code, and a series of options. | ||||
| In accordance with [RFC4443], the RPL Control Message has the | A RPL Control Message has the scope of a link. The source address is | |||
| following format: | a link local address. The destination address is either all routers | |||
| multicast address (FF02::2) or a link local address. | ||||
| In accordance with [RFC4443], the RPL Control Message consists of an | ||||
| ICMPv6 header followed by a message body. The message body is | ||||
| comprised of a message base and possibly a number of options as | ||||
| illustrated in Figure 5. | ||||
| 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 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Type | Code | Checksum | | | Type | Code | Checksum | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| + Message Body + | . Base . | |||
| . . | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | | | | | | |||
| . Option(s) . | ||||
| . . | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Figure 3: RPL Control Message | Figure 5: RPL Control Message | |||
| The RPL Control message is an ICMPv6 information message with a | The RPL Control message is an ICMPv6 information message with a | |||
| requested Type of 155. | requested Type of 155 (to be confirmed by IANA). | |||
| The Code field identifies the type of RPL Control Message. This | The Code field identifies the type of RPL Control Message. This | |||
| document defines three codes for the following RPL Control Message | document defines codes for the following RPL Control Message types | |||
| types: | (all codes are to be confirmed by the IANA Section 15.2): | |||
| o 0x01: DODAG Information Solicitation (Section 5.2) | o 0x00: DODAG Information Solicitation (Section 5.2) | |||
| o 0x02: DODAG Information Object (Section 5.1) | o 0x01: DODAG Information Object (Section 5.3) | |||
| o 0x04: Destination Advertisement Object (Section 6.1) | o 0x02: Destination Advertisement Object (Section 5.4) | |||
| 5. Upward Routes | o 0x03: Destination Advertisement Object Acknowledgment | |||
| (Section 5.5) | ||||
| This section describes how RPL discovers and maintains upward routes. | o 0x80: Secure DODAG Information Solicitation (Section 5.2.2) | |||
| It describes DODAG Information Objects (DIOs), the messages used to | ||||
| discover and maintain these routes. It specifies how RPL generates | ||||
| and responds to DIOs. It also describes DODAG Information | ||||
| Solicitation (DIS) messages, which are used to trigger DIO | ||||
| transmissions. | ||||
| 5.1. DODAG Information Object (DIO) | o 0x81: Secure DODAG Information Object (Section 5.3.2) | |||
| o 0x82: Secure Destination Advertisement Object (Section 5.4.2) | ||||
| o 0x83: Secure Destination Advertisement Object Acknowledgment | ||||
| (Section 5.5.2) | ||||
| The high order bit (0x80) of the code denotes whether the RPL message | ||||
| has security enabled. Secure versions of RPL messages have a | ||||
| modified format to support confidentiality and integrity, illustrated | ||||
| in Figure Figure 6. | ||||
| 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 | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | Type | Code | Checksum | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | | | ||||
| . Security . | ||||
| . . | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | | | ||||
| . Base . | ||||
| . . | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | | | ||||
| . Option(s) . | ||||
| . . | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Figure 6: Secure RPL Control Message | ||||
| The remainder of this section describes the currently defined RPL | ||||
| Control Message Base formats followed by the currently defined RPL | ||||
| Control Message Options. | ||||
| 5.1. RPL Security Fields | ||||
| Each RPL message has a secure version. The secure versions provide | ||||
| integrity and confidentiality. Because security covers the base | ||||
| message as well as options, in secured messages the security | ||||
| information lies between the checksum and base, as shown in Figure | ||||
| Figure 6. | ||||
| The format of the security section is as follows: | ||||
| 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|0|C|KIM| LVL | | | ||||
| +-+-+-+-+-+-+-+-+ + | ||||
| | Counter | | ||||
| . . | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | | | ||||
| . Key Identifier . | ||||
| . . | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Security | ||||
| All fields are considered as packet payload from a security | ||||
| processing perspective. The exact placement and format of message | ||||
| integrity/authentication codes has not yet been determined. | ||||
| Use of the Security section is further detailed in Section 14. | ||||
| Security Control Field: The Security Control Field has one flag and | ||||
| two fields: | ||||
| Counter Compression (C): If the Counter Compression flag is | ||||
| set then the Counter field is compressed from 4 bytes | ||||
| into 1 byte. If the Counter Compression flag is clear | ||||
| then the Counter field is 4 bytes and uncompressed. | ||||
| Key Identifier Mode (KIM): The Key Identifier Mode field | ||||
| indicates whether the key used for packet protection is | ||||
| determined implicitly or explicitly and indicates the | ||||
| particular representation of the Key Identifier field. | ||||
| The Key Identifier Mode is set one of the non-reserved | ||||
| values from the table below: | ||||
| +------+-----+-----------------------------+------------+ | ||||
| | Mode | KIM | Meaning | Key | | ||||
| | | | | Identifier | | ||||
| | | | | Length | | ||||
| | | | | (octets) | | ||||
| +------+-----+-----------------------------+------------+ | ||||
| | 0 | 00 | Peer-to-peer key determined | 0 | | ||||
| | | | implicitly from originator | | | ||||
| | | | and recipient of packet. | | | ||||
| | | | | | | ||||
| | | | Key Source is not present. | | | ||||
| | | | Key Index is not present. | | | ||||
| +------+-----+-----------------------------+------------+ | ||||
| | 1 | 01 | Group key determined | 1 | | ||||
| | | | implicitly from Key Index | | | ||||
| | | | and side information. | | | ||||
| | | | | | | ||||
| | | | Key Source is not present. | | | ||||
| | | | Key Index is present. | | | ||||
| +------+-----+-----------------------------+------------+ | ||||
| | 2 | 10 | Signature key used; group | 0/9 | | ||||
| | | | key determined explicitly | | | ||||
| | | | if encryption used. | | | ||||
| | | | | | | ||||
| | | | Key Source may be present. | | | ||||
| | | | Key Index may be present. | | | ||||
| +------+-----+-----------------------------+------------+ | ||||
| | 3 | 11 | Group key determined | 9 | | ||||
| | | | explicitly from Key Source | | | ||||
| | | | Identifier and Key Index. | | | ||||
| | | | | | | ||||
| | | | Key Source is present. | | | ||||
| | | | Key Index is present. | | | ||||
| +------+-----+-----------------------------+------------+ | ||||
| Key Identifier Mode (KIM) Encoding | ||||
| Security Level (LVL): The Security Level field indicates the | ||||
| provided packet protection. This value can be adapted on | ||||
| a per-packet basis and allows for varying levels of data | ||||
| authenticity and, optionally, for data confidentiality. | ||||
| When nontrivial protection is provided, replay protection | ||||
| is always provided. The Security Level is set to one of | ||||
| the non-reserved values in the table below: | ||||
| +--------------------+-------------------+ | ||||
| | Without Signatures | With Signatures | | ||||
| +----+-----+-------------+------+-------------+-----+ | ||||
| | ID | LVL | Attributes | Auth | Attributes | Sig | | ||||
| | | | | Len | | Len | | ||||
| +----+-----+-------------+------+-------------+-----+ | ||||
| | 0 | 000 | None | 0 | None | 37 | | ||||
| | 1 | 001 | MIC-32 | 4 | Sign-32 | 37 | | ||||
| | 2 | 010 | MIC-64 | 8 | Sign-64 | 45 | | ||||
| | 3 | 011 | Rsvd | N/A | Rsvd | N/A | | ||||
| | 4 | 100 | ENC | 0 | ENC | 37 | | ||||
| | 5 | 101 | ENC-MIC-32 | 4 | ENC-Sign-32 | 41 | | ||||
| | 6 | 110 | ENC-MIC-64 | 8 | ENC-Sign-64 | 45 | | ||||
| | 7 | 111 | Rsvd | N/A | Reserved | N/A | | ||||
| +----+-----+-------------+------+-------------+-----+ | ||||
| Security Level (LVL) Encoding | ||||
| Counter: The Counter field indicates the non-repeating value (nonce) | ||||
| used with the cryptographic mechanism that implements packet | ||||
| protection and allows for the provision of semantic security. | ||||
| This value is compressed from 4 octets to 1 octet if the | ||||
| Counter Compression field of the Security Control Field is set | ||||
| to one. | ||||
| Key Identifier: The Key Identifier field indicates which key was | ||||
| used to protect the packet. This field provides various levels | ||||
| of granularity of packet protection, including peer-to-peer | ||||
| keys, group keys, and signature keys. This field is | ||||
| represented as indicated by the Key Identifier Mode field and | ||||
| is formatted as follows: | ||||
| 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 | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | | | ||||
| . Key Source . | ||||
| . . | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | | | ||||
| . Key Index . | ||||
| . . | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Key Identifier | ||||
| Key Source: The Key Source field, when present, indicates the | ||||
| logical identifier of the originator of a group key. | ||||
| When present this field is 8 bytes in length. | ||||
| Key Index: The Key Index field, when present, allows unique | ||||
| identification of different keys with the same | ||||
| originator. It is the responsibility of each key | ||||
| originator to make sure that actively used keys that it | ||||
| issues have distinct key indices and that all key indices | ||||
| have a value unequal to 0x00. When present this field is | ||||
| 1 byte in length. | ||||
| Unassigned bits of the Security section are reserved. They MUST be | ||||
| set to zero on transmission and MUST be ignored on reception. | ||||
| 5.2. DODAG Information Solicitation (DIS) | ||||
| The DODAG Information Solicitation (DIS) message may be used to | ||||
| solicit a DODAG Information Object from a RPL node. Its use is | ||||
| analogous to that of a Router Solicitation as specified in IPv6 | ||||
| Neighbor Discovery; a node may use DIS to probe its neighborhood for | ||||
| nearby DODAGs. Section 6.3 describes how nodes respond to a DIS. | ||||
| 5.2.1. Format of the DIS Base Object | ||||
| 0 1 2 | ||||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | Reserved | Option(s)... | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Figure 7: The DIS Base Object | ||||
| Unassigned bits of the DIS Base are reserved. They MUST be set to | ||||
| zero on transmission and MUST be ignored on reception. | ||||
| 5.2.2. Secure DIS | ||||
| A Secure DIS message follows the format in Figure Figure 6, where the | ||||
| base format is the DIS message shown in Figure Figure 7. | ||||
| 5.2.3. DIS Options | ||||
| The DIS message MAY carry valid options. | ||||
| This specification allows for the DIS message to carry the following | ||||
| options: | ||||
| 0x00 Pad1 | ||||
| 0x01 PadN | ||||
| 0x05 RPL Target | ||||
| 0x07 Solicited Information | ||||
| 5.3. DODAG Information Object (DIO) | ||||
| The DODAG Information Object carries information that allows a node | The DODAG Information Object carries information that allows a node | |||
| to discover a RPL Instance, learn its configuration parameters, | to discover a RPL Instance, learn its configuration parameters, | |||
| select a DODAG parent set, and maintain the upward routing topology. | select a DODAG parent set, and maintain the upward routing topology. | |||
| 5.1.1. DIO Base Format | 5.3.1. Format of the DIO Base Object | |||
| DIO Base is an always-present container option in a DIO message. | ||||
| Every DIO MUST include a DIO Base. | ||||
| 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 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| |G|A|T|S|0| Prf | Sequence | Rank | | | RPLInstanceID | Version | Rank | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| |G|A|T|MOP| Prf | DTSN | Reserved | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | RPLInstanceID | DTSN | | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | ||||
| | | | | | | |||
| + + | + + | |||
| | DODAGID | | | | | |||
| + DODAGID + | ||||
| | | | ||||
| + + | + + | |||
| | | | | | | |||
| + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | sub-option(s)... | | Option(s)... | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
| Figure 4: DIO Base | Figure 8: The DIO Base Object | |||
| Control Field: The DAG Control Field has three flags and one field: | Control Field: The DAG Control Field has three flags and two fields: | |||
| Grounded (G): The Grounded (G) flag indicates whether the | Grounded (G): The Grounded (G) flag indicates whether the | |||
| upward routes this node advertises provide connectivity | upward routes this node advertises provide connectivity | |||
| to the set of addresses which are application-defined | to the set of addresses which are application-defined | |||
| goals. If the flag is set, the DODAG is grounded and | goals. If the flag is set, the DODAG is grounded and | |||
| provides such connectivity. If the flag is cleared, the | provides such connectivity. If the flag is cleared, the | |||
| DODAG is floating and may not provide such connectivity. | DODAG is floating and may not provide such connectivity. | |||
| Destination Advertisement Supported (A): The Destination | Destination Advertisement Supported (A): The Destination | |||
| Advertisement Supported (A) flag indicates whether the | Advertisement Supported (A) flag indicates whether the | |||
| root of this DODAG can collect and use downward route | root of this DODAG can collect and use downward route | |||
| state. If the flag is set, nodes in the network are | state. If the flag is set, nodes in the network are | |||
| enabled to exchange destination advertisements messages | enabled to exchange destination advertisements messages | |||
| to build downward routes (Section 6). If the flag is | to build downward routes (Section 7). If the flag is | |||
| cleared, destination advertisement messages are disabled | cleared, destination advertisement messages are disabled | |||
| and the DODAG maintains only upward routes. | and the DODAG maintains only upward routes. | |||
| Destination Advertisement Trigger (T): The Destination | Destination Advertisement Trigger (T): The Destination | |||
| Advertisement Trigger (T) flag indicates a complete | Advertisement Trigger (T) flag indicates a complete | |||
| refresh of downward routes. If the flag is set, then a | refresh of downward routes. If the flag is set, then a | |||
| refresh of downward route state is to take place over the | refresh of downward route state is to take place over the | |||
| entire DODAG. If the flag is cleared, the downward route | entire DODAG. If the flag is cleared, the downward route | |||
| maintenance is in its normal mode of operation. The | maintenance is in its normal mode of operation. The | |||
| further details of this process are described in | further details of this process are described in | |||
| Section 6. | Section 7. | |||
| Destination Advertisements Stored (S): The Destination | Mode of Operation (MOP): The Mode of Operation (MOP) field | |||
| Advertisements Stored (S) flag is used to indicate that a | identifies the mode of operation of the RPL Instance as | |||
| non-root ancestor is storing routing table entries | administratively provisioned at and distributed by the | |||
| learned from DAO messaging. If the flag is set, then a | DODAG Root. All nodes who join the DODAG must be able to | |||
| non-root ancestor is known to be storing routing table | honor the MOP in order to fully participate as a router, | |||
| entries learned from DAO messages. If the flag is | or else they must only join as a leaf. MOP is encoded as | |||
| cleared, only the root node may be storing routing table | in the table below: | |||
| entries learned from DAO messaging. This flag is further | ||||
| described in Section 6. | +-----+-------------------------------------------------+ | |||
| | MOP | Meaning | | ||||
| +-----+-------------------------------------------------+ | ||||
| | 00 | Non-storing | | ||||
| | 01 | Storing | | ||||
| | 10 | Reserved for future specification of mixed-mode | | ||||
| | 11 | Reserved | | ||||
| +-----+-------------------------------------------------+ | ||||
| Mode of Operation (MOP) Encoding | ||||
| DODAGPreference (Prf): A 3-bit unsigned integer that defines | DODAGPreference (Prf): A 3-bit unsigned integer that defines | |||
| how preferable the root of this DODAG is compared to | how preferable the root of this DODAG is compared to | |||
| other DODAG roots within the instance. DAGPreference | other DODAG roots within the instance. DAGPreference | |||
| ranges from 0x00 (least preferred) to 0x07 (most | ranges from 0x00 (least preferred) to 0x07 (most | |||
| preferred). The default is 0 (least preferred). | preferred). The default is 0 (least preferred). | |||
| Section 5.3 describes how DAGPreference affects DIO | Section 6.2 describes how DAGPreference affects DIO | |||
| processing. | processing. | |||
| Unassigned bits of the Control Field are reserved. They MUST | Version Number: 8-bit unsigned integer set by the DODAG root. | |||
| be set to zero on transmission and MUST be ignored on | Section 6.2 describes the rules for version numbers and how | |||
| reception. | ||||
| Sequence Number: 8-bit unsigned integer set by the DODAG root. | ||||
| Section 5.3 describes the rules for sequence numbers and how | ||||
| they affect DIO processing. | they affect DIO processing. | |||
| Rank: 16-bit unsigned integer indicating the DODAG rank of the node | Rank: 16-bit unsigned integer indicating the DODAG rank of the node | |||
| sending the DIO message. Section 5.3 describes how Rank is set | sending the DIO message. Section 6.2 describes how Rank is set | |||
| and how it affects DIO processing. | and how it affects DIO processing. | |||
| RPLInstanceID: 8-bit field set by the DODAG root that indicates | RPLInstanceID: 8-bit field set by the DODAG root that indicates | |||
| which RPL Instance the DODAG is part of. | which RPL Instance the DODAG is part of. | |||
| Destination Advertisement Trigger Sequence Number (DTSN): 8-bit | Destination Advertisement Trigger Sequence Number (DTSN): 8-bit | |||
| unsigned integer set by the node issuing the DIO message. The | unsigned integer set by the node issuing the DIO message. The | |||
| Destination Advertisement Trigger Sequence Number (DTSN) flag | Destination Advertisement Trigger Sequence Number (DTSN) flag | |||
| is used as part of the procedure to maintain downward routes. | is used as part of the procedure to maintain downward routes. | |||
| The details of this process are described in Section 6. | The details of this process are described in Section 7. | |||
| DODAGID: 128-bit unsigned integer set by a DODAG root which uniquely | DODAGID: 128-bit unsigned integer set by a DODAG root which uniquely | |||
| identifies a DODAG. Possibly derived from the IPv6 address of | identifies a DODAG. Possibly derived from the IPv6 address of | |||
| the DODAG root. | the DODAG root. | |||
| 5.1.2. DIO Base Rules | Unassigned bits of the DIO Base are reserved. They MUST be set to | |||
| zero on transmission and MUST be ignored on reception. | ||||
| 1. If the 'A' flag of a DIO Base is cleared, the 'T' flag MUST also | 5.3.2. Secure DIO | |||
| be cleared. | ||||
| 2. For the following DIO Base fields, a node that is not a DODAG | A Secure DIO message follows the format in Figure Figure 6, where the | |||
| root MUST advertise the same values as its preferred DODAG parent | base format is the DIS message shown in Figure Figure 8. | |||
| (defined in Section 5.3.2). Therefore, if a DODAG root does not | ||||
| change these values, every node in a route to that DODAG root | ||||
| eventually advertises the same values for these fields. These | ||||
| fields are: | ||||
| 1. Grounded (G) | ||||
| 2. Destination Advertisement Supported (A) | ||||
| 3. Destination Advertisement Trigger (T) | ||||
| 4. DAGPreference (Prf) | ||||
| 5. Sequence | ||||
| 6. RPLInstanceID | ||||
| 7. DODAGID | ||||
| 3. A node MAY update the following fields at each hop: | 5.3.3. DIO Options | |||
| 1. Destination Advertisements Stored (S) | ||||
| 2. DAGRank | ||||
| 3. DTSN | ||||
| 4. The DODAGID field each root sets MUST be unique within the RPL | The DIO message MAY carry valid options. | |||
| Instance. | ||||
| 5.1.3. DIO Suboptions | This specification allows for the DIO message to carry the following | |||
| options: | ||||
| 0x00 Pad1 | ||||
| 0x01 PadN | ||||
| 0x02 Metric Container | ||||
| 0x03 Routing Information | ||||
| 0x04 DODAG Configuration | ||||
| 0x09 Prefix Information | ||||
| This section describes the format of DIO suboptions and the five | 5.4. Destination Advertisement Object (DAO) | |||
| suboptions this document defines: Pad 1, Pad N, DAG Metric Container, | ||||
| DAG Destination Prefix, and DAG Configuration. | ||||
| 5.1.3.1. DIO Suboption Format | The Destination Advertisement Object (DAO) is used to propagate | |||
| destination information upwards along the DODAG. The DAO message is | ||||
| unicast by the child to the selected parent(s). The DAO message may | ||||
| optionally, upon explicit request or error, be acknowledged by the | ||||
| parent with a Destination Advertisement Acknowledgement (DAO-ACK) | ||||
| message back to the child. | ||||
| The Pad N, DAG Metric Container, DAG Destination Prefix, and DAG | 5.4.1. Format of the DAO Base Object | |||
| Configuration suboptions all follow this format: | ||||
| 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 | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | RPLInstanceID |K|D| Reserved | DAOSequence | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | | | ||||
| + + | ||||
| | | | ||||
| + DODAGID* + | ||||
| | | | ||||
| + + | ||||
| | | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | Option(s)... | ||||
| +-+-+-+-+-+-+-+-+ | ||||
| Figure 9: The DAO Base Object | ||||
| RPLInstanceID: 8-bit field indicating the topology instance | ||||
| associated with the DODAG, as learned from the DIO. | ||||
| K: The 'K' flag indicates that the parent is expected to send a | ||||
| DAO-ACK back. | ||||
| D: The 'D' flag indicates that the DODAGID field is present. This | ||||
| would typically only be set when a local RPLInstanceID is used. | ||||
| DAOSequence: Incremented at each unique DAO message, echoed in the | ||||
| DAO-ACK message. | ||||
| DODAGID*: 128-bit unsigned integer set by a DODAG root which | ||||
| uniquely identifies a DODAG. This field is only present when | ||||
| the 'D' flag is set. This field is typically only present when | ||||
| a local RPLInstanceID is in use, in order to identify the | ||||
| DODAGID that is associated with the RPLInstanceID. When a | ||||
| global RPLInstanceID is in use this field need not be present. | ||||
| Unassigned bits of the DAO Base are reserved. They MUST be set to | ||||
| zero on transmission and MUST be ignored on reception. | ||||
| 5.4.2. Secure DAO | ||||
| A Secure DAO message follows the format in Figure Figure 6, where the | ||||
| base format is the DAO message shown in Figure Figure 9. | ||||
| 5.4.3. DAO Options | ||||
| The DAO message MAY carry valid options. | ||||
| This specification allows for the DAO message to carry the following | ||||
| options: | ||||
| 0x00 Pad1 | ||||
| 0x01 PadN | ||||
| 0x05 RPL Target | ||||
| 0x06 Transit Information | ||||
| A special case of the DAO message, termed a No-Path, is used to clear | ||||
| downward routing state that has been provisioned through DAO | ||||
| operation. The No-Path carries a RPL Transit Information option, | ||||
| which identifies the destination to which the DAO is associated, with | ||||
| a lifetime of 0x00000000 to indicate a loss of reachability. | ||||
| 5.5. Destination Advertisement Object Acknowledgement (DAO-ACK) | ||||
| The DAO-ACK message is sent as a unicast packet by a DAO parent in | ||||
| response to a unicast DAO message from a child. | ||||
| 5.5.1. Format of the DAO-ACK Base Object | ||||
| 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 | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | RPLInstanceID | Reserved | DAOSequence | Status | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | Option(s)... | ||||
| +-+-+-+-+-+-+-+-+ | ||||
| Figure 10: The DAO ACK Base Object | ||||
| RPLInstanceID: 8-bit field indicating the topology instance | ||||
| associated with the DODAG, as learned from the DIO. | ||||
| DAOSequence: Incremented at each DAO message from a given child, | ||||
| echoed in the DAO-ACK by the parent. The DAOSequence serves in | ||||
| the parent-child communication and is not to be confused with | ||||
| the Transit Information option Sequence that is associated to a | ||||
| given target down the DODAG. | ||||
| Status: Indicates the completion. 0 is unqualified acceptance, above | ||||
| 128 are rejection code indicating that the node should select | ||||
| an alternate parent. | ||||
| Unassigned bits of the DAO-ACK Base are reserved. They MUST be set | ||||
| to zero on transmission and MUST be ignored on reception. | ||||
| 5.5.2. Secure DAO-ACK | ||||
| A Secure DAO-ACK message follows the format in Figure Figure 6, where | ||||
| the base format is the DAO-ACK message shown in Figure Figure 10. | ||||
| 5.5.3. DAO-ACK Options | ||||
| This specification does not define any options to be carried by the | ||||
| DAO-ACK message. | ||||
| 5.6. RPL Control Message Options | ||||
| 5.6.1. RPL Control Message Option Generic Format | ||||
| RPL Control Message Options all follow this format: | ||||
| 0 1 2 | 0 1 2 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 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 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - | |||
| | Subopt. Type | Suboption Length | Suboption Data | | Option Type | Option Length | Option Data | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - | |||
| Figure 5: DIO Suboption Generic Format | ||||
| Suboption Type: 8-bit identifier of the type of suboption. | Figure 11: RPL Option Generic Format | |||
| Suboption Length: 16-bit unsigned integer, representing the length | Option Type: 8-bit identifier of the type of option. The Option | |||
| in octets of the suboption, not including the suboption Type | Type values are to be confirmed by the IANA Section 15.4. | |||
| and Length fields. | ||||
| Suboption Data: A variable length field that contains data specific | Option Length: 8-bit unsigned integer, representing the length in | |||
| to the option. | octets of the option, not including the Option Type and Length | |||
| fields. | ||||
| The following subsections specify the DIO message suboptions which | Option Data: A variable length field that contains data specific to | |||
| are currently defined for use in the DODAG Information Object. | the option. | |||
| When processing a DIO message containing a suboption for which the | When processing a RPL message containing an option for which the | |||
| Suboption Type value is not recognized by the receiver, the receiver | Option Type value is not recognized by the receiver, the receiver | |||
| MUST silently ignore the unrecognized option and continue to process | MUST silently ignore the unrecognized option and continue to process | |||
| the following suboption, correctly handling any remaining options in | the following option, correctly handling any remaining options in the | |||
| the message. | message. | |||
| DIO message suboptions may have alignment requirements. Following | RPL message options may have alignment requirements. Following the | |||
| the convention in IPv6, options with alignment requirements are | convention in IPv6, options with alignment requirements are aligned | |||
| aligned in a packet such that multi-octet values within the Option | in a packet such that multi-octet values within the Option Data field | |||
| Data field of each option fall on natural boundaries (i.e., fields of | of each option fall on natural boundaries (i.e., fields of width n | |||
| width n octets are placed at an integer multiple of n octets from the | octets are placed at an integer multiple of n octets from the start | |||
| start of the header, for n = 1, 2, 4, or 8). | of the header, for n = 1, 2, 4, or 8). | |||
| 5.1.3.2. Pad1 | 5.6.2. Pad1 | |||
| The Pad1 suboption format is as follows: | The Pad1 option may be present in DIS, DIO, DAO, and DAO-ACK | |||
| messages, and its format is as follows: | ||||
| 0 | 0 | |||
| 0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 | |||
| +-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
| | Type = 0 | | | Type = 0 | | |||
| +-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
| Figure 6: Pad 1 | Figure 12: Format of the Pad 1 Option | |||
| The Pad1 option is used to insert one or two octets of padding into | ||||
| the message to enable options alignment. If more than one octet of | ||||
| padding is required, the PadN option should be used rather than | ||||
| multiple Pad1 options. | ||||
| NOTE! the format of the Pad1 option is a special case - it has | NOTE! the format of the Pad1 option is a special case - it has | |||
| neither Option Length nor Option Data fields. | neither Option Length nor Option Data fields. | |||
| The Pad1 option is used to insert one or two octets of padding in the | 5.6.3. PadN | |||
| DIO message to enable suboptions alignment. If more than two octets | ||||
| of padding is required, the PadN option, described next, should be | ||||
| used rather than multiple Pad1 options. | ||||
| 5.1.3.3. PadN | ||||
| The PadN suboption format is as follows: | The PadN option may be present in DIS, DIO, DAO, and DAO-ACK | |||
| messages, and its format is as follows: | ||||
| 0 1 2 | 0 1 2 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 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 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - | |||
| | Type = 1 | Suboption Length | Suboption Data | | Type = 1 | Option Length | 0x00 Padding... | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - | |||
| Figure 7: Pad N | Figure 13: Format of the Pad N Option | |||
| The PadN suboption is used to insert three or more octets of padding | The PadN option is used to insert two or more octets of padding into | |||
| in the DIO message to enable suboptions alignment. For N (N > 2) | the message to enable options alignment. PadN Option data MUST be | |||
| octets of padding, the Suboption Length field contains the value N-3, | ignored by the receiver. | |||
| and the Option Data consists of N-3 zero-valued octets. PadN Option | ||||
| data MUST be ignored by the receiver. | ||||
| 5.1.3.4. Metric Container | Option Type: 0x01 (to be confirmed by IANA) | |||
| The Metric Container suboption format is as follows: | Option Length: For N (N > 1) octets of padding, the Option Length | |||
| field contains the value N-2. | ||||
| Option Data: For N (N > 1) octets of padding, the Option Data | ||||
| consists of N-2 zero-valued octets. | ||||
| 5.6.4. Metric Container | ||||
| The Metric Container option may be present in DIO messages, and its | ||||
| format is as follows: | ||||
| 0 1 2 | 0 1 2 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 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 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - | |||
| | Type = 2 | Suboption Length | Metric Data | | Type = 2 | Option Length | Metric Data | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - | |||
| Figure 8: Metric Container | Figure 14: Format of the Metric Container Option | |||
| The Metric Container is used to report metrics along the DODAG. The | The Metric Container is used to report metrics along the DODAG. The | |||
| Metric Container may contain a number of discrete node, link, and | Metric Container may contain a number of discrete node, link, and | |||
| aggregate path metrics as chosen by the implementer. The Suboption | aggregate path metrics and constraints specified in | |||
| Length field contains the length in octets of the Metric Data. The | [I-D.ietf-roll-routing-metrics] as chosen by the implementer. | |||
| order, content, and coding of the Metric Container data is as | ||||
| specified in [I-D.ietf-roll-routing-metrics]. | ||||
| The processing and propagation of the Metric Container is governed by | The processing and propagation of the Metric Container is governed by | |||
| implementation specific policy functions. | implementation specific policy functions. | |||
| 5.1.3.5. Destination Prefix | Option Type: 0x02 (to be confirmed by IANA) | |||
| The Destination Prefix suboption format is as follows: | Option Length: The Option Length field contains the length in octets | |||
| of the Metric Data. | ||||
| Metric Data: The order, content, and coding of the Metric Container | ||||
| data is as specified in [I-D.ietf-roll-routing-metrics]. | ||||
| 5.6.5. Route Information | ||||
| The Route Information option may be present in DIO messages, and is | ||||
| equivalent in function to the IPv6 ND Route Information option as | ||||
| defined in [RFC4191]. The format of the option is modified slightly | ||||
| (Type, Length) in order to be carried as a RPL option as follows: | ||||
| 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 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Type = 3 | Suboption Length |Resvd|Prf|Resvd| | | Type = 3 | Option Length | Prefix Length |Resvd|Prf|Resvd| | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Prefix Lifetime | | | Route Lifetime | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Prefix Length | | | | | | |||
| +-+-+-+-+-+-+-+-+ | | . Prefix (Variable Length) . | |||
| | Destination Prefix (Variable Length) | | . . | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Figure 15: Format of the Route Information Option | ||||
| The Route Information option is used to indicate that connectivity to | ||||
| the specified destination prefix is available from the DODAG root. | ||||
| In the event that a RPL Control Message may need to specify | ||||
| connectivity to more than one destination, the Route Information | ||||
| option may be repeated. | ||||
| [RFC4191] should be consulted as the authoritative reference with | ||||
| respect to the Route Information option. The field descriptions are | ||||
| transcribed here for convenience: | ||||
| Option Type: 0x03 (to be confirmed by IANA) | ||||
| Option Length: Variable, length of the option in octets excluding | ||||
| the Type and Length fields. Note that this length is expressed | ||||
| in units of single-octets, unlike in IPv6 ND. | ||||
| Prefix Length 8-bit unsigned integer. The number of leading bits in | ||||
| the Prefix that are valid. The value ranges from 0 to 128. | ||||
| The Prefix field is 0, 8, or 16 octets depending on Length. | ||||
| Prf: 2-bit signed integer. The Route Preference indicates whether | ||||
| to prefer the router associated with this prefix over others, | ||||
| when multiple identical prefixes (for different routers) have | ||||
| been received. If the Reserved (10) value is received, the | ||||
| Route Information Option MUST be ignored. | ||||
| Resvd: Two 3-bit unused fields. They MUST be initialized to zero by | ||||
| the sender and MUST be ignored by the receiver. | ||||
| Route Lifetime 32-bit unsigned integer. The length of time in | ||||
| seconds (relative to the time the packet is sent) that the | ||||
| prefix is valid for route determination. A value of all one | ||||
| bits (0xffffffff) represents infinity. | ||||
| Prefix Variable-length field containing an IP address or a prefix of | ||||
| an IP address. The Prefix Length field contains the number of | ||||
| valid leading bits in the prefix. The bits in the prefix after | ||||
| the prefix length (if any) are reserved and MUST be initialized | ||||
| to zero by the sender and ignored by the receiver. | ||||
| Unassigned bits of the Route Information option are reserved. They | ||||
| MUST be set to zero on transmission and MUST be ignored on reception. | ||||
| 5.6.6. DODAG Configuration | ||||
| The DODAG Configuration option may be present in DIO messages, and | ||||
| its format is as follows: | ||||
| 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 | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | Type = 4 | Option Length | Resvd | PCS | DIOIntDoubl. | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | DIOIntMin. | DIORedun. | MaxRankIncrease | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | MinHopRankIncrease | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Figure 16: Format of the DODAG Configuration Option | ||||
| The DODAG Configuration option is used to distribute configuration | ||||
| information for DODAG Operation through the DODAG. | ||||
| The information communicated in this option is generally static and | ||||
| unchanging within the DODAG, therefore it is not necessary to include | ||||
| in every DIO. This information is configured at the DODAG Root and | ||||
| distributed throughout the DODAG with the DODAG Configuration Option. | ||||
| Nodes other than the DODAG Root MUST NOT modify this information when | ||||
| propagating the DODAG Configuration option. This option MAY be | ||||
| included occasionally by the DODAG Root (as determined by the DODAG | ||||
| Root), and MUST be included in response to a unicast request, e.g. a | ||||
| unicast DODAG Information Solicitation (DIS) message. | ||||
| Option Type: 0x04 (to be confirmed by IANA) | ||||
| Option Length: 8 bytes | ||||
| Path Control Size (PCS): 3-bit unsigned integer used to configure | ||||
| the number of bits that may be allocated to the Path Control | ||||
| field (see Section 7.1.4.2). | ||||
| DIOIntervalDoublings: 8-bit unsigned integer used to configure Imax | ||||
| of the DIO trickle timer (see Section 6.3.1). | ||||
| DIOIntervalMin: 8-bit unsigned integer used to configure Imin of the | ||||
| DIO trickle timer (see Section 6.3.1). | ||||
| DIORedundancyConstant: 8-bit unsigned integer used to configure k of | ||||
| the DIO trickle timer (see Section 6.3.1). | ||||
| MaxRankIncrease: 16-bit unsigned integer used to configure | ||||
| DAGMaxRankIncrease, the allowable increase in rank in support | ||||
| of local repair. If DAGMaxRankIncrease is 0 then this | ||||
| mechanism is disabled. | ||||
| MinHopRankInc 16-bit unsigned integer used to configure | ||||
| MinHopRankIncrease as described in Section 3.5.2.1. | ||||
| 5.6.7. RPL Target | ||||
| The RPL Target option may be present in DAO messages, and its format | ||||
| is as follows: | ||||
| 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 | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | Type = 5 | Option Length | Reserved | Prefix Length | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | | | ||||
| + + | ||||
| | Target Prefix (Variable Length) | | ||||
| . . | . . | |||
| . . | . . | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 9: DAG Destination Prefix | Figure 17: Format of the RPL Target Option | |||
| The Destination Prefix suboption is used to indicate that | The RPL Target Option is used to indicate a target IPv6 address, | |||
| connectivity to the specified destination prefix is available from | prefix, or multicast group that is reachable or queried along the | |||
| the DODAG root, or from another node located upwards along the DODAG | DODAG. It is used in DIO to identify a resource that the root is | |||
| on the path to the DODAG root. This may be useful in cases where | trying to reach, and in a DAO to indicate reachability. It is used | |||
| more than one LBR is operating within the LLN and offering | in a DAO message to indicate reachability. A set of one or more | |||
| connectivity to different administrative domains, e.g. a home network | Transit Information options MAY directly follow the Target option in | |||
| and a utility network. In such cases, upon observing the Destination | a DAO message in support of constructing source routes in a non- | |||
| Prefixes offered by a particular DODAG, a node MAY decide to join | storing mode of operation [I-D.hui-6man-rpl-routing-header]. When | |||
| multiple DODAGs in support of a particular application. | the same set of Transit Information options apply equally to a set of | |||
| DODAG Target options, the group of Target options MUST appear first, | ||||
| followed by the Transit Information options which apply to those | ||||
| Targets. | ||||
| The Suboption Length is coded as the length of the suboption in | The RPL Target option may be repeated as necessary to indicate | |||
| octets, excluding the Type and Length fields. | multiple targets. | |||
| Prf is the Route Preference as in [RFC4191]. The reserved fields | Option Type: 0x05 (to be confirmed by IANA) | |||
| MUST be set to zero on transmission and MUST be ignored on receipt. | ||||
| The Prefix Lifetime is a 32-bit unsigned integer representing the | Option Length: Variable, length of the option in octets excluding | |||
| length of time in seconds (relative to the time the packet is sent) | the Type and Length fields. | |||
| that the Destination Prefix is valid for route determination. The | ||||
| lifetime is initially set by the node that owns the prefix and | ||||
| denotes the valid lifetime for that prefix (similar to | ||||
| AdvValidLifetime [RFC4861]). The value might be reduced by the | ||||
| originator and/or en-route nodes that will not provide connectivity | ||||
| for the whole valid lifetime. A value of all one bits (0xFFFFFFFF) | ||||
| represents infinity. A value of all zero bits (0x00000000) indicates | ||||
| a loss of reachability. | ||||
| The Prefix Length is an 8-bit unsigned integer that indicates the | Prefix Length: 8-bit unsigned integer. Number of valid leading bits | |||
| number of leading bits in the destination prefix. | in the IPv6 Prefix. | |||
| The Destination Prefix contains Prefix Length significant bits of the | Target Prefix: Variable-length field identifying an IPv6 destination | |||
| destination prefix. The remaining bits of the Destination Prefix, as | address, prefix, or multicast group. The Prefix Length field | |||
| required to complete the trailing octet, are set to 0. | contains the number of valid leading bits in the prefix. The | |||
| bits in the prefix after the prefix length (if any) are | ||||
| reserved and MUST be set to zero on transmission and MUST be | ||||
| ignored on receipt. | ||||
| In the event that a DIO message may need to specify connectivity to | 5.6.8. Transit Information | |||
| more than one destination, the Destination Prefix suboption may be | ||||
| repeated. | ||||
| 5.1.3.6. DODAG Configuration | The Transit Information option may be present in DAO messages, and | |||
| its format is as follows: | ||||
| The DODAG Configuration suboption format is as follows: | 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 | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | Type = 6 | Option Length | Path Sequence | Path Control | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | Path Lifetime | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | | | ||||
| + + | ||||
| | | | ||||
| + Parent Address* + | ||||
| | | | ||||
| + + | ||||
| | | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Figure 18: Format of the Transit Information option | ||||
| The Transit Information option is used for a node to indicate | ||||
| attributes for a path to one or more destinations. The destinations | ||||
| are indicated as by one or more Target options that immediately | ||||
| precede the Transit Information option(s). | ||||
| The Transit Information option can used for a node to indicate its | ||||
| DODAG parents to an ancestor that is collecting DODAG routing | ||||
| information, typically for the purpose of constructing source routes. | ||||
| In the non-storing mode of operation this ancestor will be the DODAG | ||||
| Root, and this option is carried by the DAO message. The option | ||||
| length is used to determine whether the Parent Address is present or | ||||
| not. | ||||
| A non-storing node that has more than one DAO parent MAY include a | ||||
| Transit Information option for each DAO parent as part of the non- | ||||
| storing Destination Advertisement operation. The node may code the | ||||
| Path Control field in order to signal a preference among parents. | ||||
| One or more Transit Information options MUST be preceded by one or | ||||
| more RPL Target options. In this manner the RPL Target option | ||||
| indicates the child node, and the Transit Information option(s) | ||||
| enumerate the DODAG parents. | ||||
| A typical non-storing node will use multiple Transit Information | ||||
| options, and it will send the DAO thus formed to only one parent that | ||||
| will forward it to the root. A typical storing node with use one | ||||
| Transit Information option with no parent field, and will send the | ||||
| DAO thus formed to multiple parents. | ||||
| Option Type: 0x06 (to be confirmed by IANA) | ||||
| Option Length: Variable, depending on whether or not Parent Address | ||||
| is present. | ||||
| Path-Sequence: 8-bit unsigned integer. When a RPL Target option is | ||||
| issued by the node that owns the Target Prefix (i.e. in a DAO | ||||
| message), that node sets the Path-Sequence and increments the | ||||
| Path-Sequence each time it issues a RPL Target option. | ||||
| Path Control: 8-bit bitfield. The Path Control field limits the | ||||
| number of DAO-Parents to which a DAO message advertising | ||||
| connectivity to a specific destination may be sent, as well as | ||||
| providing some indication of relative preference. The limit | ||||
| provides some bound on overall DAO fan-out in the LLN. The | ||||
| leftmost bit is associated with a path that contains a most- | ||||
| preferred link, and the subsequent bits are ordered down to the | ||||
| rightmost bit which is least preferred. | ||||
| Path Lifetime: 32-bit unsigned integer. The length of time in | ||||
| seconds (relative to the time the packet is sent) that the | ||||
| prefix is valid for route determination. A value of all one | ||||
| bits (0xFFFFFFFF) represents infinity. A value of all zero | ||||
| bits (0x00000000) indicates a loss of reachability. This is | ||||
| referred as a No-Path in this document. | ||||
| Parent Address (optional): IPv6 Address of the DODAG Parent of the | ||||
| node originally issuing the Transit Information Option. This | ||||
| field may not be present, as according to the DODAG Mode of | ||||
| Operation and indicated by the Transit Information option | ||||
| length. | ||||
| Unassigned bits of the Transit Information option are reserved. They | ||||
| MUST be set to zero on transmission and MUST be ignored on reception. | ||||
| 5.6.9. Solicited Information | ||||
| The Solicited Information option may be present in DIS messages, and | ||||
| its format is as follows: | ||||
| 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 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Type = 4 | Length | DIOIntDoubl. | | | Type = 7 | Option Length | RPLInstanceID |V|I|D| Rsvd | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | DIOIntMin. | DIORedun. | MaxRankInc | MinHopRankInc | | | | | |||
| + + | ||||
| | | | ||||
| + DODAGID + | ||||
| | | | ||||
| + + | ||||
| | | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Version | | ||||
| +-+-+-+-+-+-+-+-+ | ||||
| Figure 10: DODAG Configuration | Figure 19: Format of the Solicited Information Option | |||
| The DODAG Configuration suboption is used to distribute configuration | The Solicited Information option is used for a node to request a | |||
| information for DODAG Operation through the DODAG. The information | subset of neighboring nodes that meet the specified criteria to | |||
| communicated in this suboption is generally static and unchanging | respond to a DIS message. | |||
| within the DODAG, therefore it is not necessary to include in every | ||||
| DIO. This suboption MAY be included occasionally by the DODAG Root, | ||||
| and MUST be included in response to a unicast request, e.g. a unicast | ||||
| DODAG Information Solicitation (DIS) message. | ||||
| The Length is coded as 5. | The Solicited Information option may specify a number of predicate | |||
| criteria to be matched by a receiving node. If a node receiving a | ||||
| multicast DIS message containing a Solicited Information option | ||||
| matches ALL of the predicates, then it MUST reset its trickle timer | ||||
| in order to trigger a DIO response to the DIS message. When a node | ||||
| receives a DIS message containing a Solicited information option, and | ||||
| the DIS message is unicast OR the node does not match ALL the | ||||
| predicates, then the node MUST NOT reset the trickle timer. | ||||
| DIOIntervalDoublings is an 8-bit unsigned integer, configured on the | Option Type: 0x07 (to be confirmed by IANA) | |||
| DODAG root and used to configure the trickle timer (see | ||||
| Section 5.3.5.1 for details on trickle timers) governing when DIO | ||||
| message should be sent within the DODAG. DIOIntervalDoublings is the | ||||
| number of times that the DIOIntervalMin is allowed to be doubled | ||||
| during the trickle timer operation. | ||||
| DIOIntervalMin is an 8-bit unsigned integer, configured on the DODAG | Option Length: 19 bytes | |||
| root and used to configure the trickle timer governing when DIO | ||||
| message should be sent within the DODAG. The minimum configured | ||||
| interval for the DIO trickle timer in units of ms is | ||||
| 2^DIOIntervalMin. For example, a DIOIntervalMin value of 16ms is | ||||
| expressed as 4. | ||||
| DIORedundancyConstant is an 8-bit unsigned integer used to configure | Control Field: The Solicited Information option Control Field has | |||
| suppression of DIO transmissions. DIORedundancyConstant is the | three flags: | |||
| minimum number of relevant incoming DIOs required to suppress a DIO | ||||
| transmission. If the value is 0xFF then the suppression mechanism is | ||||
| disabled. | ||||
| MaxRankInc, 8-bit unsigned integer, is the DAGMaxRankIncrease. This | V: If the V flag is set then the Version field is valid and | |||
| is the allowable increase in rank in support of local repair. If | a node should only respond if its DODAGVersionNumber | |||
| DAGMaxRankIncrease is 0 then this mechanism is disabled. | matches the requested version. If the V flag is clear | |||
| then the Version field is not valid and the Version field | ||||
| MUST be set to zero on transmission and ignored upon | ||||
| receipt. | ||||
| MinHopRankInc, 8-bit unsigned integer, is the MinHopRankIncrease as | I: If the I flag is set then the RPLInstanceID field is | |||
| described in Section 3.6.2.1. | valid and a node should only respond if it matches the | |||
| requested RPLInstanceID. If the I flag is clear then the | ||||
| RPLInstanceID field is not valid and the RPLInstanceID | ||||
| field MUST be set to zero on transmission and ignored | ||||
| upon receipt. | ||||
| 5.2. DODAG Information Solicitation (DIS) | D: If the D flag is set then the DODAGID field is valid and | |||
| a node should only respond if it matches the requested | ||||
| DODAGID. If the D flag is clear then the DODAGID field | ||||
| is not valid and the DODAGID field MUST be set to zero on | ||||
| transmission and ignored upon receipt. | ||||
| The DODAG Information Solicitation (DIS) message may be used to | Version: 8-bit unsigned integer containing the DODAG Version number | |||
| solicit a DODAG Information Object from a RPL node. Its use is | that is being solicited when valid. | |||
| analogous to that of a Router Solicitation; a node may use DIS to | ||||
| probe its neighborhood for nearby DODAGs. The DODAG Information | ||||
| Solicitation carries no additional message body. Section 5.3.5 | ||||
| describes how nodes respond to a DIS. | ||||
| 5.3. Upward Route Discovery and Maintenance | RPLInstanceID: 8-bit unsigned integer containing the RPLInstanceID | |||
| that is being solicited when valid. | ||||
| Upward route discovery allows a node to join a DODAG by discovering | DODAGID: 128-bit unsigned integer containing the DODAGID that is | |||
| neighbors that are members of the DODAG and identifying a set of | being solicited when valid. | |||
| parents. The exact policies for selecting neighbors and parents is | ||||
| implementation-dependent. This section specifies the set of rules | ||||
| those policies must follow for interoperability. | ||||
| 5.3.1. RPL Instance | Unassigned bits of the Solicited Information option are reserved. | |||
| They MUST be set to zero on transmission and MUST be ignored on | ||||
| reception. | ||||
| A RPLInstanceID MUST be unique across an LLN. | 5.6.10. Prefix Information | |||
| A node MAY belong to multiple RPL Instances. | The Prefix Information option may be present in DIO messages, and is | |||
| equivalent in function to the IPv6 ND Prefix Information option as | ||||
| defined in [RFC4861]. The format of the option is modified slightly | ||||
| (Type, Length) in order to be carried as a RPL option as follows: | ||||
| Within a given LLN, there may be multiple, logically independent RPL | 0 1 2 3 | |||
| instances. This document describes how a single instance behaves. | 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 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | Type = 8 | Option Length | Prefix Length |L|A| Reserved1 | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | Valid Lifetime | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | Preferred Lifetime | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | Reserved2 | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | | | ||||
| + + | ||||
| | | | ||||
| + Prefix + | ||||
| | | | ||||
| + + | ||||
| | | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| 5.3.2. Neighbors and Parents within a DODAG Iteration | Figure 20: Format of the Prefix Information Option | |||
| The Prefix Information option may be used to distribute the prefix in | ||||
| use inside the DODAG, e.g. for address autoconfiguration. | ||||
| [RFC4861] should be consulted as the authoritative reference with | ||||
| respect to the Prefix Information option. The field descriptions are | ||||
| transcribed here for convenience: | ||||
| Option Type: 0x08 (to be confirmed by IANA) | ||||
| Option Length: 30. Note that this length is expressed in units of | ||||
| single-octets, unlike in IPv6 ND. | ||||
| Prefix Length 8-bit unsigned integer. The number of leading bits in | ||||
| the Prefix that are valid. The value ranges from 0 to 128. | ||||
| The prefix length field provides necessary information for on- | ||||
| link determination (when combined with the L flag in the prefix | ||||
| information option). It also assists with address | ||||
| autoconfiguration as specified in [RFC4862], for which there | ||||
| may be more restrictions on the prefix length. | ||||
| L 1-bit on-link flag. When set, indicates that this prefix can | ||||
| be used for on-link determination. When not set the | ||||
| advertisement makes no statement about on-link or off-link | ||||
| properties of the prefix. In other words, if the L flag is not | ||||
| set a host MUST NOT conclude that an address derived from the | ||||
| prefix is off-link. That is, it MUST NOT update a previous | ||||
| indication that the address is on-link. | ||||
| A 1-bit autonomous address-configuration flag. When set | ||||
| indicates that this prefix can be used for stateless address | ||||
| configuration as specified in [RFC4862]. | ||||
| Reserved1 6-bit unused field. It MUST be initialized to zero by the | ||||
| sender and MUST be ignored by the receiver. | ||||
| Valid Lifetime 32-bit unsigned integer. The length of time in | ||||
| seconds (relative to the time the packet is sent) that the | ||||
| prefix is valid for the purpose of on-link determination. A | ||||
| value of all one bits (0xffffffff) represents infinity. The | ||||
| Valid Lifetime is also used by [RFC4862]. | ||||
| Preferred Lifetime 32-bit unsigned integer. The length of time in | ||||
| seconds (relative to the time the packet is sent) that | ||||
| addresses generated from the prefix via stateless address | ||||
| autoconfiguration remain preferred [RFC4862]. A value of all | ||||
| one bits (0xffffffff) represents infinity. See [RFC4862]. | ||||
| Note that the value of this field MUST NOT exceed the Valid | ||||
| Lifetime field to avoid preferring addresses that are no longer | ||||
| valid. | ||||
| Reserved2 This field is unused. It MUST be initialized to zero by | ||||
| the sender and MUST be ignored by the receiver. | ||||
| Prefix An IP address or a prefix of an IP address. The Prefix | ||||
| Length field contains the number of valid leading bits in the | ||||
| prefix. The bits in the prefix after the prefix length are | ||||
| reserved and MUST be initialized to zero by the sender and | ||||
| ignored by the receiver. A router SHOULD NOT send a prefix | ||||
| option for the link-local prefix and a host SHOULD ignore such | ||||
| a prefix option. | ||||
| Unassigned bits of the Prefix Information option are reserved. They | ||||
| MUST be set to zero on transmission and MUST be ignored on reception. | ||||
| 6. Upward Routes | ||||
| This section describes how RPL discovers and maintains upward routes. | ||||
| It describes the use of DODAG Information Objects (DIOs), the | ||||
| messages used to discover and maintain these routes. It specifies | ||||
| how RPL generates and responds to DIOs. It also describes DODAG | ||||
| Information Solicitation (DIS) messages, which are used to trigger | ||||
| DIO transmissions. | ||||
| 6.1. DIO Base Rules | ||||
| 1. If the 'A' flag of a DIO Base is cleared, the 'T' flag MUST also | ||||
| be cleared. | ||||
| 2. For the following DIO Base fields, a node that is not a DODAG | ||||
| root MUST advertise the same values as its preferred DODAG parent | ||||
| (defined in Section 6.2.1). Therefore, if a DODAG root does not | ||||
| change these values, every node in a route to that DODAG root | ||||
| eventually advertises the same values for these fields. These | ||||
| fields are: | ||||
| 1. Grounded (G) | ||||
| 2. Destination Advertisement Supported (A) | ||||
| 3. Destination Advertisement Trigger (T) | ||||
| 4. DAGPreference (Prf) | ||||
| 5. Version | ||||
| 6. RPLInstanceID | ||||
| 7. DODAGID | ||||
| 3. A node MAY update the following fields at each hop: | ||||
| 1. Destination Advertisements Stored (S) | ||||
| 2. DAGRank | ||||
| 3. DTSN | ||||
| 4. The DODAGID field each root sets MUST be unique within the RPL | ||||
| Instance. | ||||
| 6.2. Upward Route Discovery and Maintenance | ||||
| Upward route discovery allows a node to join a DODAG by discovering | ||||
| neighbors that are members of the DODAG of interest and identifying a | ||||
| set of parents. The exact policies for selecting neighbors and | ||||
| parents is implementation-dependent and driven by the OF. This | ||||
| section specifies the set of rules those policies must follow for | ||||
| interoperability. | ||||
| 6.2.1. Neighbors and Parents within a DODAG Version | ||||
| RPL's upward route discovery algorithms and processing are in terms | RPL's upward route discovery algorithms and processing are in terms | |||
| of three logical sets of link-local nodes. First, the candidate | of three logical sets of link-local nodes. First, the candidate | |||
| neighbor set is a subset of the nodes that can be reached via link- | neighbor set is a subset of the nodes that can be reached via link- | |||
| local multicast. The selection of this set is implementation- | local multicast. The selection of this set is implementation- | |||
| dependent and OF-dependent. Second, the parent set is a restricted | dependent and OF-dependent. Second, the parent set is a restricted | |||
| subset of the candidate neighbor set. Finally, the preferred parent, | subset of the candidate neighbor set. Finally, the preferred parent, | |||
| a set of size one, is an element of the parent set that is the | a set of size one, is an element of the parent set that is the | |||
| preferred next hop in upward routes. | preferred next hop in upward routes. | |||
| skipping to change at page 31, line 24 ¶ | skipping to change at page 46, line 24 ¶ | |||
| parent set. | parent set. | |||
| 5. A node's rank MUST be greater than all elements of its DODAG | 5. A node's rank MUST be greater than all elements of its DODAG | |||
| parent set. | parent set. | |||
| 6. When Neighbor Unreachability Detection (NUD), or an equivalent | 6. When Neighbor Unreachability Detection (NUD), or an equivalent | |||
| mechanism, determines that a neighbor is no longer reachable, a | mechanism, determines that a neighbor is no longer reachable, a | |||
| RPL node MUST NOT consider this node in the candidate neighbor | RPL node MUST NOT consider this node in the candidate neighbor | |||
| set when calculating and advertising routes until it determines | set when calculating and advertising routes until it determines | |||
| that it is again reachable. Routes through an unreachable | that it is again reachable. Routes through an unreachable | |||
| neighbor MUST be eliminated from the routing table. | neighbor MUST be removed from the routing table. | |||
| These rules ensure that there is a consistent partial order on nodes | These rules ensure that there is a consistent partial order on nodes | |||
| within the DODAG. As long as node ranks do not change, following the | within the DODAG. As long as node ranks do not change, following the | |||
| above rules ensures that every node's route to a DODAG root is loop- | above rules ensures that every node's route to a DODAG root is loop- | |||
| free, as rank decreases on each hop to the root. The OF can guide | free, as rank decreases on each hop to the root. The OF can guide | |||
| candidate neighbor set and parent set selection, as discussed in | candidate neighbor set and parent set selection, as discussed in | |||
| [I-D.ietf-roll-routing-metrics]. | [I-D.ietf-roll-routing-metrics] and [I-D.ietf-roll-of0]. | |||
| 5.3.3. Neighbors and Parents across DODAG Iterations | 6.2.2. Neighbors and Parents across DODAG Versions | |||
| The above rules govern a single DODAG iteration. The rules in this | The above rules govern a single DODAG version. The rules in this | |||
| section define how RPL operates when there are multiple DODAG | section define how RPL operates when there are multiple DODAG | |||
| iterations: | versions: | |||
| 5.3.3.1. DODAG Iteration | 6.2.2.1. DODAG Version | |||
| 1. The tuple (RPLInstanceID, DODAGID, DODAGSequenceNumber) uniquely | 1. The tuple (RPLInstanceID, DODAGID, DODAGVersionNumber) uniquely | |||
| defines a DODAG Iteration. Every element of a node's DODAG | defines a DODAG Version. Every element of a node's DODAG parent | |||
| parent set, as conveyed by the last heard DIO from each DODAG | set, as conveyed by the last heard DIO message from each DODAG | |||
| parent, MUST belong to the same DODAG iteration. Elements of a | parent, MUST belong to the same DODAG version. Elements of a | |||
| node's candidate neighbor set MAY belong to different DODAG | node's candidate neighbor set MAY belong to different DODAG | |||
| Iterations. | Versions. | |||
| 2. A node is a member of a DODAG iteration if every element of its | 2. A node is a member of a DODAG version if every element of its | |||
| DODAG parent set belongs to that DODAG iteration, or if that node | DODAG parent set belongs to that DODAG version, or if that node | |||
| is the root of the corresponding DODAG. | is the root of the corresponding DODAG. | |||
| 3. A node MUST NOT send DIOs for DODAG iterations of which it is not | 3. A node MUST NOT send DIOs for DODAG versions of which it is not a | |||
| a member. | member. | |||
| 4. DODAG roots MAY increment the DODAGSequenceNumber that they | 4. DODAG roots MAY increment the DODAGVersionNumber that they | |||
| advertise and thus move to a new DODAG iteration. When a DODAG | advertise and thus move to a new DODAG version. When a DODAG | |||
| root increments its DODAGSequenceNumber, it MUST follow the | root increments its DODAGVersionNumber, it MUST follow the | |||
| conventions of Serial Number Arithmetic as described in | conventions of Serial Number Arithmetic as described in | |||
| [RFC1982]. | [RFC1982]. | |||
| 5. Within a given DODAG, a node that is a not a root MUST NOT | 5. Within a given DODAG, a node that is a not a root MUST NOT | |||
| advertise a DODAGSequenceNumber higher than the highest | advertise a DODAGVersionNumber higher than the highest | |||
| DODAGSequenceNumber it has heard. Higher is defined as the | DODAGVersionNumber it has heard. Higher is defined as the | |||
| greater-than operator in [RFC1982]. | greater-than operator in [RFC1982]. | |||
| 6. Once a node has advertised a DODAG iteration by sending a DIO, it | 6. Once a node has advertised a DODAG version by sending a DIO, it | |||
| MUST NOT be member of a previous DODAG iteration of the same | MUST NOT be member of a previous DODAG version of the same DODAG | |||
| DODAG (i.e. with the same RPLInstanceID, the same DODAGID, and a | (i.e. with the same RPLInstanceID, the same DODAGID, and a lower | |||
| lower DODAGSequenceNumber). Lower is defined as the less-than | DODAGVersionNumber). Lower is defined as the less-than operator | |||
| operator in [RFC1982]. | in [RFC1982]. | |||
| Within a particular implementation, a DODAG root may increment the | Within a particular implementation, a DODAG root may increment the | |||
| DODAGSequenceNumber periodically, at a rate that depends on the | DODAGVersionNumber periodically, at a rate that depends on the | |||
| deployment. In other implementations, loop detection may be | deployment, in order to trigger a global reoptimization of the DODAG. | |||
| considered sufficient to solve routing issues, and the DODAG root may | In other implementations, loop detection may be considered sufficient | |||
| increment the DODAGSequenceNumber only upon administrative | to solve routing issues by triggering local repair mechanisms, and | |||
| intervention. Another possibility is that nodes within the LLN have | the DODAG root may increment the DODAGVersionNumber only upon | |||
| some means by which they can signal detected routing inconsistencies | administrative intervention. Another possibility is that nodes | |||
| or suboptimalities to the DODAG root, in order to request an on- | within the LLN have some means by which they can signal detected | |||
| demand DODAGSequenceNumber increment (i.e. request a global repair of | routing inconsistencies or suboptimalities to the DODAG root, in | |||
| the DODAG). | order to request an on-demand DODAGVersionNumber increment (i.e. | |||
| request a global repair of the DODAG). Note that such a mechanism is | ||||
| for further study and out of the scope of this document. | ||||
| When the DODAG parent set becomes empty on a node that is not a root, | When the DODAG parent set becomes empty on a node that is not a root, | |||
| (i.e. the last parent has been removed, causing the node to no longer | (i.e. the last parent has been removed, causing the node to no longer | |||
| be associated with that DODAG), then the DODAG information should not | be associated with that DODAG), then the DODAG information should not | |||
| be suppressed until after the expiration of an implementation- | be suppressed until after the expiration of an implementation- | |||
| specific local timer in order to observe if the DODAGSequenceNumber | specific local timer in order to observe if the DODAGVersionNumber | |||
| has been incremented, should any new parents appear for the DODAG. | has been incremented, should any new parents appear for the DODAG. | |||
| This will help protect against the possibility of loops that may | ||||
| occur of that node were to inadvertently rejoin the old DODAG version | ||||
| in its own prior sub-DODAG. | ||||
| As the DODAGSequenceNumber is incremented, a new DODAG Iteration | As the DODAGVersionNumber is incremented, a new DODAG Version spreads | |||
| spreads outward from the DODAG root. Thus a parent that advertises | outward from the DODAG root. Thus a parent that advertises the new | |||
| the new DODAGSequenceNumber can not possibly belong to the sub-DODAG | DODAGVersionNumber cannot possibly belong to the sub-DODAG of a node | |||
| of a node that still advertises an older DODAGSequenceNumber. A node | that still advertises an older DODAGVersionNumber. A node may safely | |||
| may safely add such a parent, without risk of forming a loop, without | add such a parent, without risk of forming a loop, without regard to | |||
| regard to its relative rank in the prior DODAG Iteration. This is | its relative rank in the prior DODAG Version. This is equivalent to | |||
| equivalent to jumping to a different DODAG. | jumping to a different DODAG. | |||
| As a node transitions to new DODAG Iterations as a consequence of | As a node transitions to new DODAG Versions as a consequence of | |||
| following these rules, the node will be unable to advertise the | following these rules, the node will be unable to advertise the | |||
| previous DODAG Iteration (prior DODAGSequenceNumber) once it has | previous DODAG Version (prior DODAGVersionNumber) once it has | |||
| committed to advertising the new DODAG Iteration. | committed to advertising the new DODAG Version. | |||
| During transition to a new DODAG Iteration, a node may decide to | During transition to a new DODAG Version, a node may decide to | |||
| forward packets via 'future parents' that belong to the same DODAG | forward packets via 'future parents' that belong to the same DODAG | |||
| (same RPLInstanceID and DODAGID), but are observed to advertise a | (same RPLInstanceID and DODAGID), but are observed to advertise a | |||
| more recent (incremented) DODAGSequenceNumber. | more recent (incremented) DODAGVersionNumber. In that case, the node | |||
| MUST act as a leaf with regard to the new version for the purpose of | ||||
| loop detection as specified in Section 8.2. | ||||
| 5.3.3.2. DODAG Roots | 6.2.2.2. DODAG Roots | |||
| 1. A DODAG root that does not have connectivity to the set of | 1. A DODAG root that does not have connectivity to the set of | |||
| addresses described as application-level goals, MUST NOT set the | addresses described as application-level goals, MUST NOT set the | |||
| Grounded bit. | Grounded bit. | |||
| 2. A DODAG root MUST advertise a rank of ROOT_RANK. | 2. A DODAG root MUST advertise a rank of ROOT_RANK. | |||
| 3. A node whose DODAG parent set is empty MAY become the DODAG root | 3. A node whose DODAG parent set is empty MAY become the DODAG root | |||
| of a floating DODAG. It MAY also set its DAGPreference such that | of a floating DODAG. It MAY also set its DAGPreference such that | |||
| it is less preferred. | it is less preferred. | |||
| skipping to change at page 33, line 34 ¶ | skipping to change at page 48, line 41 ¶ | |||
| An LLN node that is a goal for the Objective Function is the root of | An LLN node that is a goal for the Objective Function is the root of | |||
| its own grounded DODAG, at rank ROOT_RANK. | its own grounded DODAG, at rank ROOT_RANK. | |||
| In a deployment that uses a backbone link to federate a number of LLN | In a deployment that uses a backbone link to federate a number of LLN | |||
| roots, it is possible to run RPL over that backbone and use one | roots, it is possible to run RPL over that backbone and use one | |||
| router as a "backbone root". The backbone root is the virtual root | router as a "backbone root". The backbone root is the virtual root | |||
| of the DODAG, and exposes a rank of BASE_RANK over the backbone. All | of the DODAG, and exposes a rank of BASE_RANK over the backbone. All | |||
| the LLN roots that are parented to that backbone root, including the | the LLN roots that are parented to that backbone root, including the | |||
| backbone root if it also serves as LLN root itself, expose a rank of | backbone root if it also serves as LLN root itself, expose a rank of | |||
| ROOT_RANK to the LLN, and are part of the same DODAG, coordinating | ROOT_RANK to the LLN, and are part of the same DODAG, coordinating | |||
| DODAGSequenceNumber and other DODAG root determined parameters with | DODAGVersionNumber and other DODAG root determined parameters with | |||
| the virtual root over the backbone. | the virtual root over the backbone. | |||
| 5.3.3.3. DODAG Selection | 6.2.2.3. DODAG Selection | |||
| The DODAGPreference (Prf) provides an administrative mechanism to | The DODAGPreference (Prf) provides an administrative mechanism to | |||
| engineer the self-organization of the LLN, for example indicating the | engineer the self-organization of the LLN, for example indicating the | |||
| most preferred LBR. If a node has the option to join a more | most preferred LBR. If a node has the option to join a more | |||
| preferred DODAG while still meeting other optimization objectives, | preferred DODAG while still meeting other optimization objectives, | |||
| then the node will generally seek to join the more preferred DODAG as | then the node will generally seek to join the more preferred DODAG as | |||
| determined by the OF. All else being equal, it is left to the | determined by the OF. All else being equal, it is left to the | |||
| implementation to determine which DODAG is most preferred, possibly | implementation to determine which DODAG is most preferred, possibly | |||
| based on additional criteria beyond Prf and the OF. | based on additional criteria beyond Prf and the OF. | |||
| 5.3.3.4. Rank and Movement within a DODAG Iteration | 6.2.2.4. Rank and Movement within a DODAG Version | |||
| 1. A node MUST NOT advertise a rank less than or equal to any member | 1. A node MUST NOT advertise a rank less than or equal to any member | |||
| of its parent set within the DODAG Iteration. | of its parent set within the DODAG Version. | |||
| 2. A node MAY advertise a rank lower than its prior advertisement | 2. A node MAY advertise a rank lower than its prior advertisement | |||
| within the DODAG Iteration. | within the DODAG Version. | |||
| 3. Let L be the lowest rank within a DODAG iteration that a given | 3. Let L be the lowest rank within a DODAG version that a given node | |||
| node has advertised. Within the same DODAG Iteration, that node | has advertised. Within the same DODAG Version, that node MUST | |||
| MUST NOT advertise an effective rank higher than L + | NOT advertise an effective rank higher than L + | |||
| DAGMaxRankIncrease. INFINITE_RANK is an exception to this rule: | DAGMaxRankIncrease. INFINITE_RANK is an exception to this rule: | |||
| a node MAY advertise an INFINITE_RANK at any time. (This | a node MAY advertise an INFINITE_RANK at any time. (This rule | |||
| corresponds to a limited rank increase for the purpose of local | corresponds to a limited rank increase for the purpose of local | |||
| repair within the DODAG Iteration.) | repair within the DODAG Version.) | |||
| 4. A node MAY, at any time, choose to join a different DODAG within | 4. A node MAY, at any time, choose to join a different DODAG within | |||
| a RPL Instance. Such a join has no rank restrictions, unless | a RPL Instance. Such a join has no rank restrictions, unless | |||
| that different DODAG is a DODAG Iteration of which that node has | that different DODAG is a DODAG Version of which this node has | |||
| previously been a member, in which case the rule of the previous | previously been a member, in which case the rule of the previous | |||
| bullet (3) must be observed. Until a node transmits a DIO | bullet (3) must be observed. Until a node transmits a DIO | |||
| indicating its new DODAG membership, it MUST forward packets | indicating its new DODAG membership, it MUST forward packets | |||
| along the previous DODAG. | along the previous DODAG. | |||
| 5. A node MAY, at any time after hearing the next | 5. A node MAY, at any time after hearing the next DODAGVersionNumber | |||
| DODAGSequenceNumber Iteration advertised from suitable DODAG | Version advertised from suitable DODAG parents, choose to migrate | |||
| parents, choose to migrate to the next DODAG Iteration within the | to the next DODAG Version within the DODAG. | |||
| DODAG. | ||||
| Conceptually, an implementation is maintaining a DODAG parent set | Conceptually, an implementation is maintaining a DODAG parent set | |||
| within the DODAG Iteration. Movement entails changes to the DODAG | within the DODAG Version. Movement entails changes to the DODAG | |||
| parent set. Moving up does not present the risk to create a loop but | parent set. Moving up does not present the risk to create a loop but | |||
| moving down might, so that operation is subject to additional | moving down might, so that operation is subject to additional | |||
| constraints. | constraints. | |||
| When a node migrates to the next DODAG Iteration, the DODAG parent | When a node migrates to the next DODAG Version, the DODAG parent and | |||
| and sibling sets need to be rebuilt for the new iteration. An | sibling sets need to be rebuilt for the new version. An | |||
| implementation could defer to migrate for some reasonable amount of | implementation could defer to migrate for some reasonable amount of | |||
| time, to see if some other neighbors with potentially better metrics | time, to see if some other neighbors with potentially better metrics | |||
| but higher rank announce themselves. Similarly, when a node jumps | but higher rank announce themselves. Similarly, when a node jumps | |||
| into a new DODAG it needs to construct new DODAG parent/sibling sets | into a new DODAG it needs to construct new DODAG parent/sibling sets | |||
| for this new DODAG. | for this new DODAG. | |||
| When a node moves to improve its position, it must conceptually | When a node moves to improve its position, it must conceptually | |||
| abandon all DODAG parents and siblings with a rank larger than | abandon all DODAG parents and siblings with a rank larger than | |||
| itself. As a consequence of the movement it may also add new | itself. As a consequence of the movement it may also add new | |||
| siblings. Such a movement may occur at any time to decrease the | siblings. Such a movement may occur at any time to decrease the | |||
| rank, as per the calculation indicated by the OF. Maintenance of the | rank, as per the calculation indicated by the OF. Maintenance of the | |||
| parent and sibling sets occurs as the rank of candidate neighbors is | parent and sibling sets occurs as the rank of candidate neighbors is | |||
| observed as reported in their DIOs. | observed as reported in their DIOs. | |||
| If a node needs to move down a DODAG that it is attached to, causing | If a node needs to move down a DODAG that it is attached to, causing | |||
| the rank to increase, then it MAY poison its routes and delay before | the rank to increase, then it MAY poison its routes and delay before | |||
| moving as described in Section 5.3.3.5. | moving as described in Section 6.2.2.5. | |||
| 5.3.3.5. Poisoning a Broken Path | 6.2.2.5. Poisoning a Broken Path | |||
| 1. A node MAY poison, in order to avoid being used as an ancestor by | 1. A node MAY poison, in order to avoid being used as an ancestor by | |||
| the nodes in its sub-DODAG, by advertising an effective rank of | the nodes in its sub-DODAG, by advertising an effective rank of | |||
| INFINITE_RANK and resetting the associated DIO trickle timer to | INFINITE_RANK and resetting the associated DIO trickle timer to | |||
| cause this INFINITE_RANK to be announced promptly. | cause this INFINITE_RANK to be announced promptly. | |||
| 2. The node MAY advertise an effective rank of INFINITE_RANK for an | 2. The node MAY advertise an effective rank of INFINITE_RANK for an | |||
| arbitrary number of DIO timer events, before announcing a new | arbitrary number of DIO timer events, before announcing a new | |||
| rank. | rank. | |||
| 3. As per Section 5.3.3.4, the node MUST advertise INFINITE_RANK | 3. As per Section 6.2.2.4, the node MUST advertise INFINITE_RANK | |||
| within the DODAG iteration in which it participates, if its | within the DODAG version in which it participates, if its | |||
| revision in rank would exceed the maximum rank increase. | revision in rank would exceed the maximum rank increase. | |||
| An implementation may choose to employ this poisoning mechanism when | An implementation may choose to employ this poisoning mechanism when | |||
| a node loses all of its current parents, i.e. the set of DODAG | a node loses all of its current parents, i.e. the set of DODAG | |||
| parents becomes depleted, and it can not jump to an alternate DODAG. | parents becomes depleted, and it can not jump to an alternate DODAG. | |||
| An alternate mechanism is to form a floating DODAG. | An alternate mechanism is to form a floating DODAG. | |||
| The motivation for delaying announcement of the revised route through | The motivation for delaying announcement of the revised route through | |||
| multiple DIO events is to (i) increase tolerance to DIO loss, (ii) | multiple DIO events is to (i) increase tolerance to DIO loss, (ii) | |||
| allow time for the poisoning action to propagate, and (iii) to | allow time for the poisoning action to propagate, and (iii) to | |||
| skipping to change at page 35, line 46 ¶ | skipping to change at page 51, line 5 ¶ | |||
| effect, since children with alternate parents should be able to | effect, since children with alternate parents should be able to | |||
| utilize those alternates and retain their rank while the detached | utilize those alternates and retain their rank while the detached | |||
| parent re-establishes its rank. | parent re-establishes its rank. | |||
| Although an implementation may advertise INFINITE_RANK for the | Although an implementation may advertise INFINITE_RANK for the | |||
| purposes of poisoning, it is not expected to be equivalent to setting | purposes of poisoning, it is not expected to be equivalent to setting | |||
| the rank to INFINITE_RANK, and an implementation would likely retain | the rank to INFINITE_RANK, and an implementation would likely retain | |||
| its rank value prior to the poisoning in some form, for purpose of | its rank value prior to the poisoning in some form, for purpose of | |||
| maintaining its effective position within (L + DAGMaxRankIncrease). | maintaining its effective position within (L + DAGMaxRankIncrease). | |||
| 5.3.3.6. Detaching | 6.2.2.6. Detaching | |||
| 1. A node unable to stay connected to a DODAG within a given DODAG | 1. A node unable to stay connected to a DODAG within a given DODAG | |||
| iteration MAY detach from this DODAG iteration. A node that | version MAY detach from this DODAG version. A node that detaches | |||
| detaches becomes root of its own floating DODAG and SHOULD | becomes root of its own floating DODAG and SHOULD immediately | |||
| immediately advertise this new situation in a DIO as an alternate | advertise this new situation in a DIO as an alternate to | |||
| to poisoning. | poisoning. | |||
| 5.3.3.7. Following a Parent | 6.2.2.7. Following a Parent | |||
| 1. If a node receives a DIO from one of its DODAG parents, | 1. If a node receives a DIO from one of its DODAG parents, | |||
| indicating that the parent has left the DODAG, that node SHOULD | indicating that the parent has left the DODAG, that node SHOULD | |||
| stay in its current DODAG through an alternative DODAG parent, if | stay in its current DODAG through an alternative DODAG parent, if | |||
| possible. It MAY follow the leaving parent. | possible. It MAY follow the leaving parent. | |||
| A DODAG parent may have moved, migrated to the next DODAG Iteration, | A DODAG parent may have moved, migrated to the next DODAG Version, or | |||
| or jumped to a different DODAG. A node should give some preference | jumped to a different DODAG. A node should give some preference to | |||
| to remaining in the current DODAG, if possible, but ought to follow | remaining in the current DODAG, if possible via an alternate parent, | |||
| the parent if there are no other options. | but ought to follow the parent if there are no other options. | |||
| 5.3.4. DIO Message Communication | 6.2.3. DIO Message Communication | |||
| When an DIO message is received, the receiving node must first | When an DIO message is received, the receiving node must first | |||
| determine whether or not the DIO message should be accepted for | determine whether or not the DIO message should be accepted for | |||
| further processing, and subsequently present the DIO message for | further processing, and subsequently present the DIO message for | |||
| further processing if eligible. | further processing if eligible. | |||
| 1. If the DIO message is malformed, then the DIO message is not | 1. If the DIO message is malformed, then the DIO message is not | |||
| eligible for further processing and is silently discarded. A RPL | eligible for further processing and MUST be silently discarded. | |||
| implementation MAY log the reception of a malformed DIO message. | A RPL implementation MAY log the reception of a malformed DIO | |||
| message. | ||||
| 2. If the sender of the DIO message is a member of the candidate | 2. If the sender of the DIO message is a member of the candidate | |||
| neighbor set, then the DIO is eligible for further processing. | neighbor set, then the DIO is eligible for further processing. | |||
| 5.3.4.1. DIO Message Processing | 6.2.3.1. DIO Message Processing | |||
| As DIO messages are received from candidate neighbors, the neighbors | As DIO messages are received from candidate neighbors, the neighbors | |||
| may be promoted to DODAG parents by following the rules of DODAG | may be promoted to DODAG parents by following the rules of DODAG | |||
| discovery as described in Section 5.3. When a node places a neighbor | discovery as described in Section 6.2. When a node places a neighbor | |||
| into the DODAG parent set, the node becomes attached to the DODAG | into the DODAG parent set, the node becomes attached to the DODAG | |||
| through the new DODAG parent node. | through the new DODAG parent node. | |||
| The most preferred parent should be used to restrict which other | The most preferred parent should be used to restrict which other | |||
| nodes may become DODAG parents. Some nodes in the DODAG parent set | nodes may become DODAG parents. Some nodes in the DODAG parent set | |||
| may be of a rank less than or equal to the most preferred DODAG | may be of a rank less than or equal to the most preferred DODAG | |||
| parent. (This case may occur, for example, if an energy constrained | parent. (This case may occur, for example, if an energy constrained | |||
| device is at a lesser rank but should be avoided as per an | device is at a lesser rank but should be avoided as per an | |||
| optimization objective, resulting in a more preferred parent at a | optimization objective, resulting in a more preferred parent at a | |||
| greater rank). | greater rank). | |||
| 5.3.5. DIO Transmission | 6.3. DIO Transmission | |||
| Each node maintains a timer, that governs when to multicast DIO | ||||
| messages. This timer is a trickle timer, as detailed in | ||||
| Section 5.3.5.1. The DIO Configuration Option includes the | ||||
| configuration of a RPL Instance's trickle timer. | ||||
| o When a node detects or causes an inconsistency, it MUST reset the | RPL nodes transmit DIOs using a Trickle timer | |||
| trickle timer. | ([I-D.ietf-roll-trickle]). A DIO from a sender with a lower DAGRank | |||
| that causes no changes to the recipient's parent set, preferred | ||||
| parent, or Rank SHOULD be considered consistent with respect to the | ||||
| Trickle timer. | ||||
| o When a node migrates to a new DODAG Iteration it MUST reset the | The following packets and events MUST be considered inconsistencies | |||
| trickle timer to its minimum value | with respect to the Trickle timer, and cause the Trickle timer to | |||
| reset: | ||||
| o When a node detects an inconsistency when forwarding a packet, as | o When a node detects an inconsistency when forwarding a packet, as | |||
| detailed in Section 7.2, the node MUST reset the trickle timer. | detailed in Section 8.2. | |||
| o When a node receives a multicast DIS message, it MUST reset the | ||||
| trickle timer to its minimum value. | ||||
| o When a node receives a unicast DIS message, it MUST unicast a DIO | ||||
| message in response, and the response MUST include the DODAG | ||||
| Configuration Object. This provides a means that an interrogating | ||||
| node may be guaranteed to receive the DODAG Configuration Object, | ||||
| which otherwise might not be included at the option of the sender. | ||||
| In this case the node SHOULD NOT reset the trickle timer. | ||||
| o If a node is not a member of a DODAG, it MUST suppress | ||||
| transmission of DIO messages. | ||||
| o When a node is initialized, it MAY be configured to remain silent | ||||
| and not multicast any DIO messages until it has encountered and | ||||
| joined a DODAG (perhaps initially probing for a nearby DODAG with | ||||
| an DIS message). Alternately, it MAY choose to root its own | ||||
| floating DODAG and begin multicasting DIO messages using a default | ||||
| trickle configuration. The second case may be advantageous if it | ||||
| is desired for independent nodes to begin aggregating into | ||||
| scattered floating DODAGs, in the absence of a grounded node, for | ||||
| example in support of LLN installation and commissioning. | ||||
| 5.3.5.1. Trickle Timer for DIO Transmission | o When a node receives a multicast DIS message whose constraints | |||
| (Solicited Information) it satisfies. | ||||
| RPL treats the construction of a DODAG as a consistency problem, and | o When a node joins a new DODAG Version (e.g. by updating its | |||
| uses a trickle timer [Levis08] to control the rate of control | DODAGVersionNumber, joining a new RPL Instance, etc.) | |||
| broadcasts. | ||||
| For each DODAG that a node is part of (i.e. one DODAG per RPL | Note that this list is not exhaustive, and an implementation MAY | |||
| Instance), the node must maintain a single trickle timer. The | consider other messages or events to be inconsistencies. | |||
| required state contains the following conceptual items: | ||||
| I: The current length of the communication interval | If a node receives a unicast DIS message whose constraints (Solicited | |||
| Information) it satisfies, it MUST unicast a DIO in response, and | ||||
| this DIO MUST include the RPL instance's DODAG Configuration object. | ||||
| T: A timer with a duration set to a random value in the range | 6.3.1. Trickle Parameters | |||
| [I/2, I] | ||||
| C: Redundancy Counter | The configuration parameters of the trickle timer are specified as | |||
| follows: | ||||
| I_min: The smallest communication interval in milliseconds. This | Imin: learned from the DIO message as (2^DIOIntervalMin)ms. The | |||
| value is learned from the DIO message as (2^DIOIntervalMin)ms. | default value of DIOIntervalMin is DEFAULT_DIO_INTERVAL_MIN. | |||
| The default value is DEFAULT_DIO_INTERVAL_MIN. | ||||
| I_doublings: The number of times I_min should be doubled before | Imax: learned from the DIO message as DIOIntervalDoublings. The | |||
| maintaining a constant rate, i.e. I_max = I_min * | default value of DIOIntervalDoublings is | |||
| 2^I_doublings. This value is learned from the DIO message as | ||||
| DIOIntervalDoublings. The default value is | ||||
| DEFAULT_DIO_INTERVAL_DOUBLINGS. | DEFAULT_DIO_INTERVAL_DOUBLINGS. | |||
| 5.3.5.1.1. Resetting the Trickle Timer | k: learned from the DIO message as DIORedundancyConstant. The | |||
| default value of DIORedundancyConstant is | ||||
| The trickle timer for a DODAG is reset by: | DEFAULT_DIO_REDUNDANCY_CONSTANT. In RPL, when k has the value | |||
| of 0x00 this is to be treated as a redundancy constant of | ||||
| 1. Setting I_min and I_doublings to the values learned from the | infinity in RPL, i.e. Trickle never suppresses messages. | |||
| DODAG root via a received DIO message. | ||||
| 2. Setting C to zero. | ||||
| 3. If I is not equal to I_min: | ||||
| 1. Setting I to I_min. | ||||
| 2. Setting T to a random value as described above. | ||||
| 3. Restarting the trickle timer to expire after a duration T | ||||
| When a node learns about a DODAG through a DIO message, and makes the | ||||
| decision to join this DODAG, it initializes the state of the trickle | ||||
| timer by resetting the trickle timer and listening. Each time it | ||||
| hears a redundant DIO message for this DODAG, it MAY increment C. The | ||||
| exact determination of what constitutes a redundant DIO message is | ||||
| left to an implementation; it could for example include DIOs that | ||||
| advertise the same rank. | ||||
| When the timer fires at time T, the node compares C to the redundancy | ||||
| constant, DIORedundancyConstant. If C is less than that value, or if | ||||
| the DIORedundancyConstant value is 0xFF, the node generates a new DIO | ||||
| message and multicasts it. When the communication interval I | ||||
| expires, the node doubles the interval I so long as it has previously | ||||
| doubled it fewer than I_doubling times, resets C, and chooses a new T | ||||
| value. | ||||
| 5.3.5.1.2. Determination of Inconsistency | ||||
| The trickle timer is reset whenever an inconsistency is detected | ||||
| within the DODAG, for example: | ||||
| o The node joins a new DODAG | ||||
| o The node moves within a DODAG | ||||
| o The node receives a DIO message from a DODAG parent that updates | ||||
| the information learned from a prior DIO message for that DODAG | ||||
| Parent | ||||
| o A DODAG parent forwards a packet intended to move up, indicating | ||||
| an inconsistency and possible loop. | ||||
| o A metric communicated in the DIO message is determined to be | ||||
| inconsistent, as according to a implementation specific path | ||||
| metric selection engine. | ||||
| o The rank of a DODAG parent has changed. | ||||
| 5.3.6. DODAG Selection | 6.4. DODAG Selection | |||
| The DODAG selection is implementation and algorithm dependent. Nodes | The DODAG selection is implementation and OF dependent. Nodes SHOULD | |||
| SHOULD prefer to join DODAGs for RPLInstanceIDs advertising OCPs and | prefer to join DODAGs for RPLInstanceIDs advertising OCPs and | |||
| destinations compatible with their implementation specific | destinations compatible with their implementation specific | |||
| objectives. In order to limit erratic movements, and all metrics | objectives. In order to limit erratic movements, and all metrics | |||
| being equal, nodes SHOULD keep their previous selection. Also, nodes | being equal, nodes SHOULD keep their previous selection. Also, nodes | |||
| SHOULD provide a means to filter out a parent whose availability is | SHOULD provide a means to filter out a parent whose availability is | |||
| detected as fluctuating, at least when more stable choices are | detected as fluctuating, at least when more stable choices are | |||
| available. | available. | |||
| When connection to a fixed network is not possible or preferable for | When connection to a grounded DODAG is not possible or preferable for | |||
| security or other reasons, scattered DODAGs MAY aggregate as much as | security or other reasons, scattered DODAGs MAY aggregate as much as | |||
| possible into larger DODAGs in order to allow connectivity within the | possible into larger DODAGs in order to allow connectivity within the | |||
| LLN. | LLN. | |||
| A node SHOULD verify that bidirectional connectivity and adequate | A node SHOULD verify that bidirectional connectivity and adequate | |||
| link quality is available with a candidate neighbor before it | link quality is available with a candidate neighbor before it | |||
| considers that candidate as a DODAG parent. | considers that candidate as a DODAG parent. | |||
| 5.4. Operation as a Leaf Node | 6.5. Operation as a Leaf Node | |||
| In some cases a RPL node may attach to a DODAG as a leaf node only. | In some cases a RPL node may attach to a DODAG as a leaf node only. | |||
| One example of such a case is when a node does not understand the RPL | One example of such a case is when a node does not understand the RPL | |||
| Instance's OF. A leaf node does not extend DODAG connectivity but | Instance's OF or advertised path metric. A leaf node does not extend | |||
| still needs to advertise its presence using DIOs. A node operating | DODAG connectivity but still needs to advertise its presence using | |||
| as a leaf node must obey the following rules: | DIOs. A node operating as a leaf node must obey the following rules: | |||
| 1. It MUST NOT transmit DIOs containing the DAG Metric Container. | 1. It MUST NOT transmit DIOs containing the DAG Metric Container. | |||
| 2. Its DIOs must advertise a DAGRank of INFINITE_RANK. | 2. Its DIOs must advertise a DAGRank of INFINITE_RANK. | |||
| 3. It MAY transmit unicast DAOs as described in Section 6.2. | 3. It MAY transmit unicast DAOs as described in Section 7.1. | |||
| 4. It MAY transmit multicast DAOs to the '1 hop' neighborhood as | 4. It MAY transmit multicast DAOs to the '1 hop' neighborhood as | |||
| described in Section 6.2.9. | described in Section 7.1.9. | |||
| 5.5. Administrative Rank | 6.6. Administrative Rank | |||
| In some cases it might be beneficial to adjust the rank advertised by | In some cases it might be beneficial to adjust the rank advertised by | |||
| a node beyond that computed by the OF based on some implementation | a node beyond that computed by the OF based on some implementation | |||
| specific policy and properties of the node. For example, a node that | specific policy and properties of the node. For example, a node that | |||
| has limited battery should be a leaf unless there is no other choice, | has limited battery should be a leaf unless there is no other choice, | |||
| and may then augment the rank computation specified by the OF in | and may then augment the rank computation specified by the OF in | |||
| order to expose an exaggerated rank. | order to expose an exaggerated rank. | |||
| 5.6. Collision | 7. Downward Routes | |||
| A race condition occurs if 2 nodes send DIO messages at the same time | ||||
| and then attempt to join each other. This might happen, for example, | ||||
| between nodes which act as DODAG root of their own DODAGs. In order | ||||
| to detect the situation, LLN Nodes time stamp the sending of DIO | ||||
| message. Any DIO message received within a short link-layer- | ||||
| dependent period introduces a risk. It left to the implementation to | ||||
| define the duration of the risk window. | ||||
| There is risk of a collision when a node receives and processes a DIO | ||||
| within the risk window. For example, it may occur that two nodes are | ||||
| associated with different DODAGs and near-simultaneously send DIO | ||||
| messages, which are received and processed by both, and possibly | ||||
| result in both nodes simultaneously deciding to attach to each other. | ||||
| As a remedy, in the face of a potential collision, as determined by | ||||
| receiving a DIO within the risk window, the DIO message is not | ||||
| processed. It is expected that subsequent DIOs would not cross. | ||||
| 6. Downward Routes | ||||
| This section describes how RPL discovers and maintains downward | This section describes how RPL discovers and maintains downward | |||
| routes. Messages containing the Destination Advertisement Object | routes. The use of messages containing the Destination Advertisement | |||
| (DAO), used to construct downward routes, are described. The | Object (DAO), used to construct downward routes, are described. The | |||
| downward routes are necessary in support of P2MP flows, from the | downward routes are necessary in support of P2MP flows, from the | |||
| DODAG roots toward the leaves. It specifies non-storing and storing | DODAG roots toward the leaves. It specifies non-storing and storing | |||
| behavior of nodes with respect to DAO messaging and DAO routing table | behavior of nodes with respect to DAO messaging and DAO routing table | |||
| entries. Nodes, as according to their resources and the | entries. Nodes, as according to their resources and the | |||
| implementation, may selectively store routing table entries learned | implementation, may selectively store routing table entries learned | |||
| from DAO messages, or may instead propagate the DAO information | from DAO messages, or may instead propagate the DAO information | |||
| upwards while adding source routing information. A further | upwards and independently source local topology information in a new | |||
| optimization is described whereby DAO messages may be used to | DAO message. information. A further optimization is described | |||
| populate routing table entries for the '1-hop' neighbors, which may | whereby DAO messages may be used to populate routing table entries | |||
| be useful in some cases as a shortcut for P2P flows. | for the '1-hop' neighbors, which may be useful in some cases as a | |||
| shortcut for P2P flows. | ||||
| 6.1. Destination Advertisement Object (DAO) | ||||
| The Destination Advertisement Object (DAO) is used to propagate | ||||
| destination information upwards along the DODAG. | ||||
| 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 | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | DAO Sequence | DAO Rank | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | RPLInstanceID | Route Tag | Prefix Length | RRCount | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | DAO Lifetime | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | Destination Prefix (Variable Length) | | ||||
| . . | ||||
| . . | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | Reverse Route Stack (Variable Length) | | ||||
| . . | ||||
| . . | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | sub-option(s)... | ||||
| +-+-+-+-+-+-+-+-+ | ||||
| Figure 11: The Destination Advertisement Object (DAO) | ||||
| DAO Sequence: 16-bit unsigned integer. Incremented by the node that | ||||
| owns the prefix for each new DAO message for that prefix. | ||||
| DAO Rank: 16-bit unsigned integer indicating the DAO Rank associated | ||||
| with the advertised Destination Prefix. The DAO Rank is | ||||
| analogous to the Rank in the DIO message in that it may be used | ||||
| to convey a relative distance to the Destination Prefix as | ||||
| computed by the Objective Function in use over the DODAG. It | ||||
| serves as a mechanism by which an ancestor node may order | ||||
| alternate DAO paths. | ||||
| RPLInstanceID: 8-bit field indicating the topology instance | ||||
| associated with the DODAG, as learned from the DIO. | ||||
| Route Tag: 8-bit unsigned integer. The Route Tag may be used to | ||||
| give a priority to prefixes that should be stored. This may be | ||||
| useful in cases where intermediate nodes are capable of storing | ||||
| a limited amount of routing state. The further specification | ||||
| of this field and its use is under investigation. | ||||
| Prefix Length: 8-bit unsigned integer. Number of valid leading bits | ||||
| in the IPv6 Prefix. | ||||
| RRCount: 8-bit unsigned integer. This counter is used to count the | ||||
| number of entries in the Reverse Route Stack. A value of '0' | ||||
| indicates that no Reverse Route Stack is present. | ||||
| DAO Lifetime: 32-bit unsigned integer. The length of time in | ||||
| seconds (relative to the time the packet is sent) that the | ||||
| prefix is valid for route determination. A value of all one | ||||
| bits (0xFFFFFFFF) represents infinity. A value of all zero | ||||
| bits (0x00000000) indicates a loss of reachability. | ||||
| Destination Prefix: Variable-length field identifying an IPv6 | ||||
| destination address, prefix, or multicast group. The Prefix | ||||
| Length field contains the number of valid leading bits in the | ||||
| prefix. The bits in the prefix after the prefix length (if | ||||
| any) are reserved and MUST be set to zero on transmission and | ||||
| MUST be ignored on receipt. | ||||
| Reverse Route Stack: Variable-length field containing a sequence of | ||||
| RRCount (possibly compressed) IPv6 addresses. A node that adds | ||||
| on to the Reverse Route Stack will append to the list and | ||||
| increment the RRCount. | ||||
| 6.1.1. DAO Suboptions | ||||
| The DAO message may optionally include a number of suboptions. | ||||
| The DAO suboptions are in the same format as the DIO Suboptions | ||||
| described in Section 6.1.1. | ||||
| In particular, a DAO message may include a DAG Metric Container | ||||
| suboption as described in Section 5.1.3.4. This suboption may be | ||||
| present in implementations where the DAO Rank is insufficient to | ||||
| optimize a path to the DAO Destination Prefix. | ||||
| 6.2. Downward Route Discovery and Maintenance | 7.1. Downward Route Discovery and Maintenance | |||
| 6.2.1. Overview | 7.1.1. Overview | |||
| Destination Advertisement operation produces DAO messages that flow | Destination Advertisement operation produces DAO messages that flow | |||
| up the DODAG, provisioning downward routing state for destination | up the DODAG, provisioning downward routing state for destination | |||
| prefixes available in the sub-DODAG of the DODAG root, and possibly | prefixes available in the sub-DODAG of the DODAG root, and possibly | |||
| other nodes. The routing state provisioned with this mechanism is in | other nodes. The routing state provisioned with this mechanism is in | |||
| the form of soft-state routing table entries. DAO messages are able | the form of soft-state routing table entries. DAO operation is | |||
| to record loose source routing information as by propagate up the | presently defined in two distinct modes of operation, non-storing and | |||
| DODAG. This mechanism is flexible to support the provisioning of | storing, and allowance is made for future expansion. | |||
| paths which consist of fully specified source routes, piecewise | ||||
| source routes, or hop-by-hop routes as according to the | ||||
| implementation and the capabilities of the nodes. | ||||
| Destination Advertisement may or may not be enabled over a DODAG | Destination Advertisement may or may not be enabled over a DODAG | |||
| rooted at a DODAG root. This is an a priori configuration determined | rooted at a DODAG root. This is an a priori configuration determined | |||
| by the implementation/deployment and not generally changed during the | by the implementation/deployment and not generally changed during the | |||
| operation of the RPL LLN. | operation of the RPL LLN. | |||
| When Destination Advertisement is enabled: | Destination Advertisement may be configured to operate in either a | |||
| storing or non-storing mode, as reported in the MOP in the DIO | ||||
| message. Every node in the network participating in Destination | ||||
| Advertisement must behave consistently with that configured mode of | ||||
| operation, or alternately behave only as a leaf node. Hybrid or | ||||
| mixed-mode operation is not currently specified. | ||||
| 1. Some nodes in the LLN MAY store at least one routing table entry | When Destination Advertisement is enabled: | |||
| for a particular destination learned from a DAO. Such a node is | ||||
| termed a 'storing node', with respect to that particular | ||||
| destination. | ||||
| 2. Some nodes are capable to store at least one routing table entry | 1. The RPL Instance will be configured a priori as appropriate to | |||
| for every unique destination observed from all DAOs that pass | satisfy the application to operate in either non-storing or | |||
| through. Such a node is termed a 'fully storing node'. | storing mode. | |||
| 3. DODAG roots nodes SHOULD be fully-storing nodes. | 2. All nodes who join the DODAG MUST abide with the MOP setting from | |||
| the root. Nodes that would not have the capability to fully | ||||
| participate as a router (e.g. to operate as a storing node) can | ||||
| still join as a leaf (i.e. host). | ||||
| 4. Other nodes in the DODAG are not required to store routing table | 3. In storing mode operation, all non-root nodes are expected to | |||
| entries for any particular destinations observed in DAOs. Nodes | either store routing table entries for ALL destinations learned | |||
| that do not store routing table entries from DAOs are termed | from DAO operation, or to act as a leaf node only. | |||
| 'non-storing nodes', with respect to a particular destination. | ||||
| 5. Non-storing nodes MUST participate in the construction of | 4. In non-storing mode operation, no node other than the DODAG Root | |||
| piecewise source routes as they propagate the DAO message, as | is expected to store routing table entries learned from DAO | |||
| described in Section 6.2.5. | messages. Each node is only responsible to report its own set of | |||
| parents to the DODAG Root. | ||||
| 6. Storing nodes MUST store any source route information received | 5. DODAG roots nodes SHOULD be capable to store routing table | |||
| from the DAO (RRStack) in the routing table entry entry. If a | entries learned from DAO operation when the RPL Instance is | |||
| node is not capable to do this then it must act as a non-storing | operated in a non-storing mode. | |||
| node with respect to that particular destination. | ||||
| 7. Storing nodes MUST use piecewise source routes in order to | 6. The mode of operation in the RPL Instance is signaled from the | |||
| forward data across a non-storing region of the LLN. The source | DODAG Root in the MOP control field of the DIO message. | |||
| routing mechanism is to be described in a companion | ||||
| specification. (If a node is not capable to do this, then that | ||||
| node MUST NOT operate as a storing node). | ||||
| 6.2.2. Mode of Operation | 7.1.2. Mode of Operation | |||
| o DAO Operation may not be required for all use cases. | o DAO Operation may not be required for all use cases. | |||
| o Some applications may only need support for collection/upward/MP2P | o Some applications may only need support for collection/upward/MP2P | |||
| flow with no acknowledgement/reciprocal traffic. | flow with no acknowledgement/reciprocal traffic. | |||
| o Some DODAGs may not support DAO Operation, which could mean that | o Some DODAGs may not support DAO Operation, which could mean that | |||
| DAO Operation is wasteful overhead. | DAO Operation is wasteful overhead. | |||
| o As a special case, multicast DAO operation may be used to populate | o As a special case, multicast DAO operation may be used to populate | |||
| 'one-hop' neighborhood routing table entries, and is distinct from | 'one-hop' neighborhood routing table entries, and is distinct from | |||
| the unicast DAO operation used to establish downward routes along | the unicast DAO operation used to establish downward routes along | |||
| the DODAG. | the DODAG. This special case is an exception to the RPL Instance | |||
| mode of operation as well. | ||||
| 1. The 'A' flag in the DIO as conveyed from the DODAG root serves to | 1. The 'A' flag in the DIO as conveyed from the DODAG root serves to | |||
| enable/disable DAO operation over the entire DODAG. This flag | enable/disable DAO operation over the entire DODAG. This flag | |||
| should be administratively provisioned a priori at the DODAG root | should be administratively provisioned a priori at the DODAG root | |||
| as a function of the implementation/deployment and not tend to | as a function of the implementation/deployment and not tend to | |||
| change. | change. | |||
| 2. When DAO Operation is disabled, a node SHOULD NOT emit DAOs. | 2. When DAO Operation is disabled, a node MUST NOT emit DAO | |||
| messages. | ||||
| 3. When DAO Operation is disabled, a node MAY ignore received DAOs. | 3. When DAO Operation is disabled, a node MAY ignore the MOP field. | |||
| 6.2.3. Destination Advertisement Parents | 4. When DAO Operation is disabled, a node MAY ignore received DAO | |||
| messages. | ||||
| o Nodes will select a subset of their DODAG Parents to whom DAOs | 7.1.3. Destination Advertisement Parents | |||
| will be sent | ||||
| o Nodes will select a subset of their DODAG Parents to whom DAO | ||||
| messages will be sent | ||||
| * This subset is the set of 'DAO Parents' | * This subset is the set of 'DAO Parents' | |||
| * Each DAO parent MUST be a DODAG Parent. (Not all DODAG parents | * Each DAO parent MUST be a DODAG Parent. (Not all DODAG parents | |||
| need to be DAO parents). | need to be DAO parents). | |||
| * Operation with more than DAO Parent requires consideration of | ||||
| such issues as DAO fan-out and path diversity, to be elaborated | ||||
| in a future version of this specification. | ||||
| o The selection of DAO parents is implementation specific and may be | o The selection of DAO parents is implementation specific and may be | |||
| based on selecting the DODAG Parents that offer the best upwards | based on selecting the DODAG Parents that offer the best upwards | |||
| cost (as opposed to downwards or mixed), as determined by the | cost (as opposed to downwards or mixed), as determined by the | |||
| metrics in use and the Objective Function. | metrics in use and the Objective Function. | |||
| o When DAO messages are unicast to the DAO Parent, the identity of | o When DAO messages are unicast to the DAO Parent, the identity of | |||
| the DAO Parent (DODAGID x DAGSequenceNumber) combined with the | the DAO Parent (DODAGID and DODAGVersionNumber) combined with the | |||
| RPLInstanceID in the DAO message unambiguously associates the DAO | RPLInstanceID in the DAO message unambiguously associates the DAO | |||
| message, and thus the particular destination prefix, with a DODAG | message, and thus the particular destination prefix, with a DODAG | |||
| Iteration. | Version. | |||
| o When DAO messages are unicast to the DAO Parent, the DAO Rank may | ||||
| be updated as according to the implementation and Objective | ||||
| Function in use to reflect the relative (aggregated) cost of | ||||
| reaching the Destination Prefix through that DAO parent. As a | ||||
| further extension, a DAO Suboption for the Metric Container may be | ||||
| included. | ||||
| 6.2.4. Operation of DAO Storing Nodes | 7.1.4. DAO Operation on Storing Nodes | |||
| 6.2.4.1. DAO Routing Table Entry | 7.1.4.1. DAO Routing Table Entry | |||
| A DAO Routing Table Entry conceptually contains the following | A DAO Routing Table Entry conceptually contains the following | |||
| elements: | elements: | |||
| o Advertising Neighbor Information | o Advertising Neighbor Information | |||
| * IPv6 Addr | * IPv6 Address | |||
| * Interface ID | * Interface ID | |||
| o To which DAO Parents has this entry been reported | o To which DAO Parents has this entry been reported | |||
| o Retry Counter | o Retry Counter | |||
| o Logical equivalent of DAO Content: | o Logical equivalent of DAO Content: | |||
| * DAO Sequence | * DAO Sequence | |||
| * DAO Rank | ||||
| * DAO Lifetime | * DAO Lifetime | |||
| * Route tag (used to prioritize which destination entries should | * DAO Path Control (as learned from each child) | |||
| be stored) | ||||
| * Destination Prefix (or Address or Mcast Group) | * Destination Prefix (or Address or Mcast Group) | |||
| * RR Stack* | ||||
| The DAO Routing Table Entry is logically associated with the | The DAO Routing Table Entry is logically associated with the | |||
| following states: | following states: | |||
| CONNECTED This entry is 'owned' by the node - it is manually | CONNECTED This entry is 'owned' by the node - it is manually | |||
| configured and is considered as a 'self' entry for DAO | configured and is considered as a 'self' entry for DAO | |||
| Operation | Operation | |||
| REACHABLE This entry has been reported from a neighbor of the node. | REACHABLE This entry has been reported from a neighbor of the node. | |||
| This state includes the following substates: | This state includes the following substates: | |||
| skipping to change at page 46, line 22 ¶ | skipping to change at page 57, line 29 ¶ | |||
| UNREACHABLE This entry is being cleaned up. This entry may be | UNREACHABLE This entry is being cleaned up. This entry may be | |||
| suppressed when the cleanup process is complete. | suppressed when the cleanup process is complete. | |||
| When an attempt is to be made to report the DAO entry to DAO Parents, | When an attempt is to be made to report the DAO entry to DAO Parents, | |||
| the DAO Entry record is logically marked to indicate that an attempt | the DAO Entry record is logically marked to indicate that an attempt | |||
| has not yet been made for each parent. As the unicast attempts are | has not yet been made for each parent. As the unicast attempts are | |||
| completed for each parent, this mark may be cleared. This mechanism | completed for each parent, this mark may be cleared. This mechanism | |||
| may serve to limit DAO entry updates for each parent to a subset that | may serve to limit DAO entry updates for each parent to a subset that | |||
| needs to be reported. | needs to be reported. | |||
| 6.2.4.1.1. DAO Routing Table Entry Management | 7.1.4.1.1. DAO Routing Table Entry Management | |||
| +---------------------------------+ | +---------------------------------+ | |||
| | | | | | | |||
| | REACHABLE | +-------------+ | | REACHABLE | +-------------+ | |||
| | | | | | | | | | | |||
| | +-----------+ | | CONNECTED | | | +-----------+ | | CONNECTED | | |||
| (*)----------->| |-------+ | | | | (*)----------->| |-------+ | | | | |||
| | | Confirmed | | | +-------------+ | | | Confirmed | | | +-------------+ | |||
| | +-->| |---+ | | | | +-->| |---+ | | | |||
| | | +-----------+ | | | | | | +-----------+ | | | | |||
| skipping to change at page 46, line 43 ¶ | skipping to change at page 58, line 4 ¶ | |||
| | | | | | | | | | | | | |||
| | | | | | | | | | | | | |||
| | | | | | | | | | | | | |||
| | | +-----------+ | | | +-------------+ | | | +-----------+ | | | +-------------+ | |||
| | | | |<--+ +-------->| | | | | | |<--+ +-------->| | | |||
| | +---| Pending | | | UNREACHABLE | | | +---| Pending | | | UNREACHABLE | | |||
| | | |---------------->| |--->(*) | | | |---------------->| |--->(*) | |||
| | +-----------+ | +-------------+ | | +-----------+ | +-------------+ | |||
| | | | | | | |||
| +---------------------------------+ | +---------------------------------+ | |||
| DAO Routing Table Entry FSM | DAO Routing Table Entry FSM | |||
| 6.2.4.1.1.1. Operation in the CONNECTED state | 7.1.4.1.1.1. Operation in the CONNECTED state | |||
| 1. CONNECTED DAO entries are to be provisioned outside of the | 1. CONNECTED DAO entries are to be provisioned outside of the | |||
| context of RPL, e.g. through a management API. An implementation | context of RPL, e.g. through a management API. An implementation | |||
| SHOULD provide a means to provision/manage CONNECTED DAO entries, | SHOULD provide a means to provision/manage CONNECTED DAO entries, | |||
| including whether they are to be redistributed in RPL. | including whether they are to be redistributed in RPL. | |||
| 6.2.4.1.1.2. Operation in the REACHABLE state | 7.1.4.1.1.2. Operation in the REACHABLE state | |||
| 1. When a REACHABLE(*) entry times out, i.e. the DAO Lifetime has | 1. When a REACHABLE(*) entry times out, i.e. the DAO Lifetime has | |||
| elapsed, the entry MUST be placed into the UNREACHABLE state and | elapsed, the entry MUST be placed into the UNREACHABLE state and | |||
| no-DAO SHOULD be scheduled to send to the node's DAO Parents. | No-Path SHOULD be scheduled to send to the node's DAO Parents. | |||
| 2. When a no-DAO for a REACHABLE(*) entry is received with a newer | 2. When a No-Path for a REACHABLE(*) entry is received with a newer | |||
| DAO Sequence Number, the entry MUST be placed into the | DAO Sequence Number, the entry MUST be placed into the | |||
| UNREACHABLE state and no-DAO SHOULD be scheduled to send to the | UNREACHABLE state and No-Path SHOULD be scheduled to send to the | |||
| node's DAO Parents. | node's DAO Parents. | |||
| 3. When a REACHABLE(*) entry is to be removed because NUD or | 3. When a REACHABLE(*) entry is to be removed because NUD or | |||
| equivalent has determined that the next-hop neighbor is no longer | equivalent has determined that the next-hop neighbor is no longer | |||
| reachable, the entry MUST be placed into the UNREACHABLE state | reachable, the entry MUST be placed into the UNREACHABLE state | |||
| and no-DAO SHOULD be scheduled to send to the node's DAO Parents. | and No-Path SHOULD be scheduled to send to the node's DAO | |||
| Parents. | ||||
| 4. When a REACHABLE(*) entry is to be removed because an associated | 4. When a REACHABLE(*) entry is to be removed because an associated | |||
| Forwarding Error has been returned by the next-hop neighbor, the | Forwarding Error has been returned by the next-hop neighbor, the | |||
| entry MUST be placed into the UNREACHABLE state and no-DAO SHOULD | entry MUST be placed into the UNREACHABLE state and No-Path | |||
| be scheduled to send to the node's DAO Parents. | SHOULD be scheduled to send to the node's DAO Parents. | |||
| 5. When a DAO (or no-DAO) for a REACHABLE(*) entry is received with | 5. When a DAO (or No-Path) for a REACHABLE(*) entry is received with | |||
| an older or unchanged DAO Sequence Number, then the DAO (or no- | an older or unchanged DAO Sequence Number, then the DAO (or No- | |||
| DAO) SHOULD be ignored and the associated entry MUST NOT be | Path) SHOULD be ignored and the associated entry MUST NOT be | |||
| updated with the stale information. | updated with the stale information. | |||
| 6.2.4.1.1.2.1. REACHABLE(Confirmed) | 7.1.4.1.1.2.1. REACHABLE(Confirmed) | |||
| 1. When a DAO for a previously unknown (or UNREACHABLE) destination | 1. When a DAO for a previously unknown (or UNREACHABLE) destination | |||
| is received and is to be stored, it MUST be entered into the | is received and is to be stored, it MUST be entered into the | |||
| routing table in the REACHABLE(Confirmed) state, and a DAO SHOULD | routing table in the REACHABLE(Confirmed) state, and a DAO SHOULD | |||
| be scheduled to send to the node's DAO Parents. Alternately the | be scheduled to send to the node's DAO Parents. | |||
| node may behave as a non-storing node with respect to this | ||||
| destination. | ||||
| 2. When a DAO for a REACHABLE(Confirmed) entry is received with a | 2. When a DAO for a REACHABLE(Confirmed) entry is received with a | |||
| newer DAO Sequence Number, the entry MUST be updated with the | newer DAO Sequence Number, the entry MUST be updated with the | |||
| logical equivalent of the DAO contents and a DAO SHOULD be | logical equivalent of the DAO contents and a DAO SHOULD be | |||
| scheduled to send to the node's DAO Parents. | scheduled to send to the node's DAO Parents. | |||
| 3. When a DAO for a REACHABLE(Confirmed) entry is expected, e.g. | 3. When a DAO for a REACHABLE(Confirmed) entry is expected, e.g. | |||
| because a DIO to request a DAO refresh is sent, then the DAO | because a DIO to request a DAO refresh is sent, then the DAO | |||
| entry MUST be placed in the REACHABLE(Pending) state and the | entry MUST be placed in the REACHABLE(Pending) state and the | |||
| associated Retry Counter MUST be set to 0. | associated Retry Counter MUST be set to 0. | |||
| 6.2.4.1.1.2.2. REACHABLE(Pending) | 7.1.4.1.1.2.2. REACHABLE(Pending) | |||
| 1. When a DAO for a REACHABLE(Pending) entry is received with a | 1. When a DAO for a REACHABLE(Pending) entry is received with a | |||
| newer DAO Sequence Number, the entry MUST be updated with the | newer DAO Sequence Number, the entry MUST be updated with the | |||
| logical equivalent of the DAO contents and the entry MUST be | logical equivalent of the DAO contents and the entry MUST be | |||
| placed in the REACHABLE(Confirmed) state. | placed in the REACHABLE(Confirmed) state. | |||
| 2. When a DAO for a REACHABLE(Pending) entry is expected, e.g. | 2. When a DAO for a REACHABLE(Pending) entry is expected, e.g. | |||
| because DAO has (again) been triggered with respect to that | because DAO has (again) been triggered with respect to that | |||
| neighbor, then the associated Retry Counter MUST be incremented. | neighbor, then the associated Retry Counter MUST be incremented. | |||
| 3. When the associated Retry Counter for a REACHABLE(Pending) entry | 3. When the associated Retry Counter for a REACHABLE(Pending) entry | |||
| reaches a maximum threshold, the entry MUST be placed into the | reaches a maximum threshold, the entry MUST be placed into the | |||
| UNREACHABLE state and no-DAO SHOULD be scheduled to send to the | UNREACHABLE state and No-Path SHOULD be scheduled to send to the | |||
| node's DAO Parents. | node's DAO Parents. | |||
| 6.2.4.1.1.3. Operation in the UNREACHABLE state | 7.1.4.1.1.3. Operation in the UNREACHABLE state | |||
| 1. An implementation SHOULD bound the time that the entry is | 1. An implementation SHOULD bound the time that the entry is | |||
| allocated in the UNREACHABLE state. Upon the equivalent expiry | allocated in the UNREACHABLE state. Upon the equivalent expiry | |||
| of the related timer (RemoveTimer), the entry SHOULD be | of the related timer (RemoveTimer), the entry SHOULD be | |||
| suppressed. | suppressed. | |||
| 2. While the entry is in the UNREACHABLE state a node SHOULD make a | 2. While the entry is in the UNREACHABLE state a node SHOULD make a | |||
| reasonable attempt to report a no-DAO to each of the DAO parents. | reasonable attempt to report a No-Path to each of the DAO | |||
| parents. | ||||
| 3. When the node has completed an attempt to report a no-DAO to each | 3. When the node has completed an attempt to report a No-Path to | |||
| of the DAO parents, the entry SHOULD be suppressed. | each of the DAO parents, the entry SHOULD be suppressed. | |||
| 6.2.5. Operation of DAO Non-storing Nodes | 7.1.4.2. Storing Mode DAO Message and Path Control | |||
| 1. When a DAO is received from a child by a node who will not store | In the storing mode of operation, a DAO message from a node will | |||
| a routing table entry for the DAO, the node MUST schedule to pass | contain one or more Target Options, each Target Option specifying | |||
| the DAO contents along to its DAO parents. Prior to passing the | either a CONNECTED destination or a destination in the sub-DODAG of | |||
| DAO along, the node MUST process the DAO as follows, in order | the node. | |||
| that information necessary to construct a loose source route may | ||||
| be accumulated within the DAO payload as it moves up the DODAG: | ||||
| 1. The most recent addition to the RRStack (the 'next waypoint') | For each attempt made to report the DAO entry to a set of DAO | |||
| is investigated to determine if the node already has a route | parents, the Path Control field will be constructed as follows: | |||
| provisioned to the waypoint. If the node already has such a | ||||
| route, then it is not necessary to add additional information | ||||
| to the RRStack. The node SHOULD NOT modify the RRStack | ||||
| further. | ||||
| 2. If the node does not have a route provisioned to the next | 1. The size of the path control field will be specified by the PCS | |||
| waypoint, then the node MUST append the address of the child | control field of the DODAG Configuration Option. The default | |||
| to the RRStack, and increment RRCount. | value is DEFAULT_PATH_CONTROL_SIZE. | |||
| 6.2.6. Scheduling to Send DAO (or no-DAO) | 2. For each unique destination to be reported that is CONNECTED, the | |||
| logical equivalent of a path control bitmap that is the size of | ||||
| the path control field shall be initialized with the leftmost | ||||
| bits set, where the number of leftmost bits corresponds to the | ||||
| size of the path control field as specified by PCS. | ||||
| 3. For each unique destination to be reported that is not CONNECTED, | ||||
| i.e. that destination is contained in the node's sub-DODAG, the | ||||
| logical equivalent of a path control bitmap that is the size of | ||||
| the path control field shall be initialized by ORing the content | ||||
| of all of the Path Control fields received in DAO messages from | ||||
| the node's children for that destination. | ||||
| 4. For each DAO Parent that the node shall attempt an update to, the | ||||
| node shall exclusively allocate 1 or more set bits from the path | ||||
| control bitmap to that DAO Parent. The path control bits SHOULD | ||||
| be allocated in order of preference, such that the most | ||||
| significant bits, or groupings of bits, are allocated to the most | ||||
| preferred DAO parents as determined by the node. Once a bit from | ||||
| the path control bitmap has been allocated to a DAO Parent for | ||||
| this attempt, the corresponding bit MUST be set in the Path | ||||
| Control field in the DAO message sent to that DAO Parent, and | ||||
| that bit MUST NOT be allocated to any other DAO Parent. | ||||
| 5. A unicast DAO message may be sent for DAO Parents that have a | ||||
| non-zero Path Control field. | ||||
| 6. If any DAO Parent is left without any bits set in its Path | ||||
| Control field, then that a unicast DAO message MUST NOT be sent | ||||
| to that DAO parent for this attempt. | ||||
| 7.1.5. Operation of DAO Non-storing Nodes | ||||
| 1. In the non-storing mode of operation, each node sending a DAO | ||||
| message to its DODAG Parents will include a RPL Target option to | ||||
| describe itself, followed by RPL Transit Information option(s) to | ||||
| describe its parents. This information is sufficient for the | ||||
| DODAG Root to collect the DODAG topology and construct source | ||||
| routes in the downward direction. | ||||
| 2. In the non-storing mode of operation, each node receiving a DAO | ||||
| message will arrange to pass the content of the DAO message along | ||||
| to the DODAG Root. When possible the content of DAO messages may | ||||
| be aggregated. | ||||
| 3. When a DAO is received from a child by a node who will not store | ||||
| a routing table entry for the DAO, the node MUST schedule to pass | ||||
| the DAO contents along to its DAO parents. | ||||
| 7.1.6. Scheduling to Send DAO (or No-Path) | ||||
| 1. An implementation SHOULD arrange to rate-limit the sending of | 1. An implementation SHOULD arrange to rate-limit the sending of | |||
| DAOs. | DAOs. | |||
| 2. When scheduling to send a DAO, an implementation SHOULD | 2. When scheduling to send a DAO, an implementation SHOULD | |||
| equivalently start a timer (DelayDAO) to delay sending the DAO. | equivalently start a timer (DelayDAO) to delay sending the DAO. | |||
| If the DelayDAO timer is already running then the DAO may be | If the DelayDAO timer is already running then the DAO may be | |||
| considered as already scheduled, and implementation SHOULD leave | considered as already scheduled, and implementation SHOULD leave | |||
| the timer running at its present duration. | the timer running at its present duration. | |||
| o When computing the delay before sending a DAO, in order to | o When computing the delay before sending a DAO, in order to | |||
| increase the effectiveness of aggregation, an implementation MAY | increase the effectiveness of aggregation, an implementation MAY | |||
| allow time to receive DAOs from its sub-DODAG prior to emitting | allow time to receive DAOs from its sub-DODAG prior to emitting | |||
| DAOs to its DAO Parents. | DAOs to its DAO Parents. | |||
| * The scheduled delay in such cases may be, for example, such | * Suppose there is an implementation parameter DAO_LATENCY which | |||
| that DAO_LATENCY/DAGRank(self_rank) <= DelayDAO < DAO_LATENCY/ | represents the maximum expected time for a DAO operation to | |||
| traverse the LLN from the farthest node to the root. The | ||||
| scheduled delay in such cases may be, for example, such that | ||||
| DAO_LATENCY/DAGRank(self_rank) <= DelayDAO < DAO_LATENCY/ | ||||
| DAGRank(parent_rank), where DAGRank() is defined as in | DAGRank(parent_rank), where DAGRank() is defined as in | |||
| Section 3.6.2, such that nodes deeper in the DODAG may tend to | Section 3.5.2, such that nodes deeper in the DODAG may tend to | |||
| report DAO messages first before their parent nodes will report | report DAO messages first before their parent nodes will report | |||
| DAO messages. Note that this suggestion is intended as an | DAO messages. Note that this suggestion is intended as an | |||
| optimization to allow efficient aggregation -- it is not | optimization to allow efficient aggregation -- it is not | |||
| required for correct operation in the general case. | required for correct operation in the general case. | |||
| 6.2.7. Triggering DAO Message from the Sub-DODAG | 7.1.7. Triggering DAO Message from the Sub-DODAG | |||
| Triggering DAO messages from the Sub-DODAG occurs by using the | Triggering DAO messages from the Sub-DODAG occurs by using the | |||
| following control fields with the rules described below: | following control fields with the rules described below: | |||
| The DTSN field from the DIO is a sequence number that is part of the | The DTSN field from the DIO is a sequence number that is part of the | |||
| mechanism to trigger DAO messages. The motivation to use a sequence | mechanism to trigger DAO messages. The motivation to use a sequence | |||
| number is to provide some means of reliable signaling to the sub- | number is to provide some means of reliable signaling to the sub- | |||
| DODAG-- whereas a control flag that is activated for a short time may | DODAG. Whereas a control flag that is activated for a short time may | |||
| be unobserved by the sub-DODAG if the triggering DIO messages are | be unobserved by the sub-DODAG if the triggering DIO messages are | |||
| lost, the DTSN increment may be observed later even if some DIO | lost, the DTSN increment may be observed later even if some | |||
| messages have been lost since the sequence number increment. | intervening DIO messages have been lost. | |||
| The 'T' flag provides a way to signal the refresh of DAO information | The 'T' flag provides a way to signal the refresh of DAO information | |||
| over the entire DODAG iteration. Whereas a DTSN increment may only | over the entire DODAG version. Whereas a DTSN increment may only | |||
| trigger a DAO refresh as far as the nearest storing node (because a | trigger a DAO refresh as far as the next storing node (because a | |||
| storing node will not increment its own DTSN in response, as | storing node will not increment its own DTSN in response, as | |||
| described in the rules below), the assertion of the 'T' flag in | described in the rules below), the assertion of the 'T' flag in | |||
| conjunction with an incremented DTSN will 'punch through' storing | conjunction with an incremented DTSN will result in a DAO refresh | |||
| nodes to elicit a DAO refresh from the entire DODAG Iteration. | from the entire DODAG. | |||
| The 'S' flag provides a way to signal to a sub-DODAG that there is at | ||||
| least one non-root node somewhere in the set of DODAG ancestors, | ||||
| where that non-root node is a storing node. This allows for an | ||||
| optimization-- when it is clear to a non-storing node that the root | ||||
| node can be the only storing ancestor, then that node does not | ||||
| necessarily need to trigger updates from its sub-DODAG when it | ||||
| modifies its DAO parent set. The motivation here is that the root | ||||
| node should be able to update its stored source routing information | ||||
| for the affected sub-DODAG based only on receiving DAO information | ||||
| concerning the link that changed. In the other case, when the 'S' | ||||
| flag is set, the non-storing node does not have a means to determine | ||||
| which DAO information may (or may not) need to be updated in the | ||||
| intermediate storing node so it must trigger DAO messages in order to | ||||
| update the intermediate storing node. Please note that some aspects | ||||
| of the proper use of the 'S' flag remain under investigation. | ||||
| Further examples of triggering DAO messages are contained in | ||||
| Appendix B. | ||||
| The control fields are used to trigger DAO messages as follows: | The control fields are used to trigger DAO messages as follows: | |||
| 1. The DODAG root MUST clear the 'S' flag when it emits DIO | 1. A DAO Trigger Sequence Number (DTSN) MUST be maintained by each | |||
| messages. | node per RPL Instance. The DTSN, in conjunction with the 'T' | |||
| flag from the DIO message, provides a means by which DAO messages | ||||
| 2. Non-root nodes that store routing table entries learned from | may be reliably triggered in the event of topology change. | |||
| DAOs MUST set the 'S' flag when they emit DIO messages. | ||||
| 3. A node that has any DAO Parent with the 'S' flag set MUST also | ||||
| set the 'S' flag when it emits DIO messages. | ||||
| 4. A node that has all DAO Parents with cleared 'S' flags, and does | ||||
| not store routing table entries learned from DAOs, MUST clear | ||||
| the 'S' flag when it emits DIO messages. | ||||
| 5. A DAO Trigger Sequence Number (DTSN) MUST be maintained by each | ||||
| node per RPL Instance. The DTSN, in conjunction with the 'T' | ||||
| flag from the DIO message, provides a means by which DAO | ||||
| messages may be reliably triggered in the event of topology | ||||
| change. | ||||
| 6. The DTSN MUST be advertised by the node in the DIO message. | ||||
| 7. A node keeps track of the DTSN that it has heard from the last | ||||
| DIO from each of its DAO Parents. Note that there is one DTSN | ||||
| maintained per DAO Parent- each DAO Parent may independently | ||||
| increment it at will. | ||||
| 8. A node that is not a fully-storing node SHOULD increment its own | ||||
| DTSN when it adds a new parent, that parent having the 'S' flag | ||||
| set, to its DAO Parent set. It MAY defer advertising the | ||||
| increment as long as it has a DAO parent that already provides | ||||
| adequate connectivity. | ||||
| 9. A node that is not a fully-storing node MUST increment its own | ||||
| DTSN when it receives a DIO from a DAO Parent that contains a | ||||
| newly incremented DTSN. (The newly incremented DTSN is detected | ||||
| by comparing the value received in the DIO with the value last | ||||
| recorded for that DAO parent). | ||||
| 10. A fully-storing node MUST increment its own DTSN when it | 2. The DTSN MUST be advertised by the node in the DIO message. | |||
| receives a DIO from a DAO Parent that contains a newly | ||||
| incremented DTSN and a set 'T' flag. | ||||
| 11. When a storing or non-storing node joins a new DODAG iteration, | 3. A node keeps track of the DTSN that it has heard from the last | |||
| it SHOULD increment its DTSN as if the 'T' flag has been set. | DIO from each of its DAO Parents. Note that there is one DTSN | |||
| maintained per DAO Parent- each DAO Parent may independently | ||||
| increment it at will. | ||||
| 12. DAO Transmission SHOULD be scheduled when a new parent is added | 4. DAO Transmission SHOULD be scheduled when a new parent is added | |||
| to the DAO Parent set. | to the DAO Parent set. | |||
| 13. A node that receives a newly incremented DTSN from a DAO Parent | 5. A node that receives a newly incremented DTSN from a DAO Parent | |||
| MUST schedule a DAO transmission. | MUST schedule a DAO transmission. | |||
| o When a node that is not fully-storing sees a DTSN increment, it | o In storing mode operation, when a node sees a DTSN increment, it | |||
| will increment its own DTSN. This will cause the DTSN increment | is caused to reissue its entire set of routing table entries | |||
| to extend down the DODAG to the first fully-storing node, which | learned from DAO messages (or an aggregated subset thereof), but | |||
| will send its DAOs back up, rebuilding source routes information | will not need to increment its own DTSN. | |||
| along the way to the first node that incremented the DTSN, who | ||||
| then may report the new DAO information to its new parent. | ||||
| o When a fully-storing node sees a DTSN increment, it is caused to | o In either storing or non-storing modes of operation, when a node | |||
| reissue its entire set of routing table entries learned from DAOs | sees a DTSN increment AND the 'T' flag is set, it does increment | |||
| (or an aggregated subset thereof), but will not need to increment | its own DTSN as well. The 'T' flag 'punches through' all nodes, | |||
| its own DTSN. The 'DTSN increment wave' stops when it encounters | causing all routing state from the entire sub-DODAG to be | |||
| fully-storing nodes. | refreshed. | |||
| o When a fully-storing node sees a DTSN increment AND the 'T' flag | 7.1.8. Sending DAO Messages to DAO Parents | |||
| is set, it does increment its own DTSN as well. The 'T' flag | ||||
| 'punches through' all nodes, causing all routing tables in the | ||||
| entire sub-DODAG to be refreshed. | ||||
| 6.2.8. Sending DAO Messages to DAO Parents | 1. DAO Messages sent to DAO Parents MUST be unicast. | |||
| 1. When storing nodes send DAO messages for stored entries the | * The IPv6 Source Address is a link local address of the node | |||
| RRStack SHOULD be cleared in the DAO message. | sending the DAO message. | |||
| 2. DAO Messages sent to DAO Parents MUST be unicast. | * The IPv6 Destination Address is a link local address of the | |||
| DAO parent. | ||||
| * The IPv6 Source Address is the node sending the DAO message. | 2. A node MUST send the DAO with the same sequence to all its DAO | |||
| parents that are to be used on the way back to the DAO target. | ||||
| * The IPv6 Destination Address is DAO parent. | 3. When using source routing, a Destination that builds the DAO also | |||
| indicates its parent in the DAO as a Transit Information option. | ||||
| If the node has multiple DAO parents, it MAY include one Transit | ||||
| Information Option per parent and pass the DAO to one or more | ||||
| parent. The Transit Information option indicates the preference | ||||
| for that parent encoded in the Path Control bitfield. | ||||
| 3. When the appointed time arrives (DelayDAO) for the transmission | 4. When the appointed time arrives (DelayDAO) for the transmission | |||
| of DAO messages (with jitter as appropriate) for the requested | of DAO messages (with jitter as appropriate) for the requested | |||
| entries, the implementation MAY aggregate the the entries into a | entries, the implementation MAY aggregate the the entries into a | |||
| reduced numbers of DAOs to be reported to each parent, and | reduced numbers of DAOs to be reported to each parent, and | |||
| perform compression if possible. | perform compression if possible. | |||
| 4. Note: it is NOT RECOMMENDED that a DAO Transmission (No-DAO) be | 5. Note: it is NOT RECOMMENDED that a DAO Transmission (No-Path) be | |||
| scheduled when a DAO Parent is removed from the DAO Parent set. | scheduled when a DAO Parent is removed from the DAO Parent set. | |||
| 6.2.9. Multicast Destination Advertisement Messages | 6. A node MAY set the K flag in a unicast DAO message to solicit a | |||
| unicast DAO-ACK in response in order to confirm the attempt. A | ||||
| node receiving a unicast DAO message with the K flag set SHOULD | ||||
| respond with a DAO-ACK. A node receiving a DAO message without | ||||
| the K flag set MAY respond with a DAO-ACK, especially to report | ||||
| an error condition. | ||||
| 7.1.9. Multicast Destination Advertisement Messages | ||||
| A special case of DAO operation, distinct from unicast DAO operation, | A special case of DAO operation, distinct from unicast DAO operation, | |||
| is multicast DAO operation which may be used to populate '1-hop' | is multicast DAO operation which may be used to populate '1-hop' | |||
| routing table entries. | routing table entries. | |||
| 1. A node MAY multicast a DAO message to the link-local scope all- | 1. A node MAY multicast a DAO message to the link-local scope all- | |||
| nodes multicast address FF02::1. | nodes multicast address FF02::1. | |||
| 2. A multicast DAO message MUST be used only to advertise | 2. A multicast DAO message MUST be used only to advertise | |||
| information about self, i.e. prefixes directly connected to or | information about self, i.e. prefixes directly connected to or | |||
| skipping to change at page 52, line 48 ¶ | skipping to change at page 64, line 5 ¶ | |||
| 5. A node MUST NOT perform any other DAO related processing on a | 5. A node MUST NOT perform any other DAO related processing on a | |||
| received multicast DAO, in particular a node MUST NOT perform the | received multicast DAO, in particular a node MUST NOT perform the | |||
| actions of a DAO parent upon receipt of a multicast DAO. | actions of a DAO parent upon receipt of a multicast DAO. | |||
| o The multicast DAO may be used to enable direct P2P communication, | o The multicast DAO may be used to enable direct P2P communication, | |||
| without needing the RPL routing structure to relay the packets. | without needing the RPL routing structure to relay the packets. | |||
| o The multicast DAO does not presume any DODAG relationship between | o The multicast DAO does not presume any DODAG relationship between | |||
| the emitter and the receiver. | the emitter and the receiver. | |||
| 7. Packet Forwarding and Loop Avoidance/Detection | 8. Packet Forwarding and Loop Avoidance/Detection | |||
| 7.1. Suggestions for Packet Forwarding | ||||
| 8.1. Suggestions for Packet Forwarding | ||||
| When forwarding a packet to a destination, precedence is given to | When forwarding a packet to a destination, precedence is given to | |||
| selection of a next-hop successor as follows: | selection of a next-hop successor as follows: | |||
| 1. In the scope of this specification, it is preferred to select a | 1. This specification only covers how a successor is selected from | |||
| successor from a DODAG iteration that matches the RPLInstanceID | the DODAG version that matches the RPLInstanceID marked in the | |||
| marked in the IPv6 header of the packet being forwarded. | IPv6 header of the packet being forwarded. Routing outside the | |||
| instance can be done as long as additional rules are put in place | ||||
| such as strict ordering of instances and routing protocols to | ||||
| protect against loops. | ||||
| 2. If a local administrative preference favors a route that has been | 2. If a local administrative preference favors a route that has been | |||
| learned from a different routing protocol than RPL, then use that | learned from a different routing protocol than RPL, then use that | |||
| successor. | successor. | |||
| 3. If there is an entry in the routing table matching the | 3. If there is an entry in the routing table matching the | |||
| destination that has been learned from a multicast destination | destination that has been learned from a multicast destination | |||
| advertisement (e.g. the destination is a one-hop neighbor), then | advertisement (e.g. the destination is a one-hop neighbor), then | |||
| use that successor. | use that successor. | |||
| 4. If there is an entry in the routing table matching the | 4. If there is an entry in the routing table matching the | |||
| destination that has been learned from a unicast destination | destination that has been learned from a unicast destination | |||
| advertisement (e.g. the destination is located down the sub- | advertisement (e.g. the destination is located down the sub- | |||
| DODAG), then use that successor. | DODAG), then use that successor. If there are DAO Path Control | |||
| bits associated with multiple successors, then consult the Path | ||||
| Control bits to order the successors by preference when choosing. | ||||
| 5. If there is a DODAG iteration offering a route to a prefix | 5. If there is a DODAG version offering a route to a prefix matching | |||
| matching the destination, then select one of those DODAG parents | the destination, then select one of those DODAG parents as a | |||
| as a successor. | successor according to the OF and routing metrics. | |||
| 6. If there is a DODAG parent offering a default route then select | 6. Any other as-yet-unattempted DODAG parent may be chosen for the | |||
| that DODAG parent as a successor. | next attempt to forward a unicast packet when no better match | |||
| exists. | ||||
| 7. If there is a DODAG iteration offering a route to a prefix | 7. If there is a DODAG version offering a route to a prefix matching | |||
| matching the destination, but all DODAG parents have been tried | the destination, but all DODAG parents have been tried and are | |||
| and are temporarily unavailable (as determined by the forwarding | temporarily unavailable (as determined by the forwarding | |||
| procedure), then select a DODAG sibling as a successor. | procedure), then select a DODAG sibling as a successor (after | |||
| appropriate packet marking for loop detection as described in | ||||
| Section 8.2. | ||||
| 8. Finally, if no DODAG siblings are available, the packet is | 8. Finally, if no DODAG siblings are available, the packet is | |||
| dropped. ICMP Destination Unreachable may be invoked. An | dropped. ICMP Destination Unreachable may be invoked (an | |||
| inconsistency is detected. | inconsistency is detected). | |||
| TTL MUST be decremented when forwarding. If the packet is being | TTL must be decremented when forwarding. If the packet is being | |||
| forwarded via a sibling, then the TTL MAY be decremented more | forwarded via a sibling, then the TTL may be decremented more | |||
| aggressively (by more than one) to limit the impact of possible | aggressively (by more than one) to limit the impact of possible | |||
| loops. | loops. | |||
| Note that the chosen successor MUST NOT be the neighbor that was the | Note that the chosen successor MUST NOT be the neighbor that was the | |||
| predecessor of the packet (split horizon), except in the case where | predecessor of the packet (split horizon), except in the case where | |||
| it is intended for the packet to change from an up to an down flow, | it is intended for the packet to change from an up to an down flow, | |||
| such as switching from DIO routes to DAO routes as the destination is | such as switching from DIO routes to DAO routes as the destination is | |||
| neared. | neared. | |||
| 7.2. Loop Avoidance and Detection | 8.2. Loop Avoidance and Detection | |||
| RPL loop avoidance mechanisms are kept simple and designed to | RPL loop avoidance mechanisms are kept simple and designed to | |||
| minimize churn and states. Loops may form for a number of reasons, | minimize churn and states. Loops may form for a number of reasons, | |||
| from control packet loss to sibling forwarding. RPL includes a | from control packet loss to sibling forwarding. RPL includes a | |||
| reactive loop detection technique that protects from meltdown and | reactive loop detection technique that protects from meltdown and | |||
| triggers repair of broken paths. | triggers repair of broken paths. | |||
| RPL loop detection uses information that is placed into the packet in | RPL loop detection uses information that is placed into the packet. | |||
| the IPv6 flow label. The IPv6 flow label is defined in [RFC2460] and | A future version of this specification will detail how this | |||
| its operation is further specified in [RFC3697]. For the purpose of | information is carried with the packet (e.g. a hop-by-hop option | |||
| RPL operations, the flow label is constructed as follows: | ([I-D.hui-6man-rpl-option]) or summarized somehow into the flow | |||
| label). For the purpose of RPL operations, the information carried | ||||
| with a packet is constructed follows: | ||||
| 0 1 2 | 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 | 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 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| |O|S|R|F| SenderRank | RPLInstanceID | | |O|S|R|F|0|0|0|0| RPLInstanceID | SenderRank | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 12: RPL Flow Label | RPL Packet Information | |||
| Down 'O' bit: 1-bit flag indicating whether the packet is expected | Down 'O' bit: 1-bit flag indicating whether the packet is expected | |||
| to progress up or down. A router sets the 'O' bit when the | to progress up or down. A router sets the 'O' bit when the | |||
| packet is expect to progress down (using DAO routes), and | packet is expect to progress down (using DAO routes), and | |||
| resets it when forwarding towards the root of the DODAG | resets it when forwarding towards the root of the DODAG | |||
| iteration. A host MUST set the bit to 0. | version. A host or RPL leaf node MUST set the bit to 0. | |||
| Sibling 'S' bit: 1-bit flag indicating whether the packet has been | Sibling 'S' bit: 1-bit flag indicating whether the packet has been | |||
| forwarded via a sibling at the present rank, and denotes a risk | forwarded via a sibling at the present rank, and denotes a risk | |||
| of a sibling loop. A host sets the bit to 0. | of a sibling loop. A host or RPL leaf node MUST set the bit to | |||
| 0. | ||||
| Rank-Error 'R' bit: 1-bit flag indicating whether a rank error was | Rank-Error 'R' bit: 1-bit flag indicating whether a rank error was | |||
| detected. A rank error is detected when there is a mismatch in | detected. A rank error is detected when there is a mismatch in | |||
| the relative ranks and the direction as indicated in the 'O' | the relative ranks and the direction as indicated in the 'O' | |||
| bit. A host MUST set the bit to 0. | bit. A host or RPL leaf node MUST set the bit to 0. | |||
| Forwarding-Error 'F' bit: 1-bit flag indicating that this node can | Forwarding-Error 'F' bit: 1-bit flag indicating that this node can | |||
| not forward the packet further towards the destination. The | not forward the packet further towards the destination. The | |||
| 'F' bit might be set by sibling that can not forward to a | 'F' bit might be set by sibling that can not forward to a | |||
| parent a packet with the Sibling 'S' bit set, or by a child | parent a packet with the Sibling 'S' bit set, or by a child | |||
| node that does not have a route to destination for a packet | node that does not have a route to destination for a packet | |||
| with the down 'O' bit set. A host MUST set the bit to 0. | with the down 'O' bit set. A host or RPL leaf node MUST set | |||
| the bit to 0. | ||||
| SenderRank: 8-bit field set to zero by the source and to | ||||
| DAGRank(rank) by a router that forwards inside the RPL network. | ||||
| (Note that the case where DAGRank(rank) does not fit into 8 | ||||
| bits is under investigation.) | ||||
| RPLInstanceID: 8-bit field indicating the DODAG instance along which | RPLInstanceID: 8-bit field indicating the DODAG instance along which | |||
| the packet is sent. | the packet is sent. | |||
| 7.2.1. Source Node Operation | SenderRank: 16-bit field set to zero by the source and to | |||
| DAGRank(rank) by a router that forwards inside the RPL network. | ||||
| A packet that is sourced at a node connected to a RPL network or | 8.2.1. Source Node Operation | |||
| destined to a node connected to a RPL network MUST be issued with the | ||||
| flow label zeroed out, but for the RPLInstanceID field. | ||||
| If the source is aware of the RPLInstanceID that is preferred for the | If the source is aware of the RPLInstanceID that is preferred for the | |||
| flow, then it MUST set the RPLInstanceID field in the flow label | packet, then it MUST set the RPLInstanceID field associated with the | |||
| accordingly, otherwise it MUST set it to the RPL_DEFAULT_INSTANCE. | packet accordingly, otherwise it MUST set it to the | |||
| RPL_DEFAULT_INSTANCE. | ||||
| If a compression mechanism such as 6LoWPAN is applied to the packet, | ||||
| the flow label MUST NOT be compressed even if it is set to all | ||||
| zeroes. | ||||
| 7.2.2. Router Operation | ||||
| 7.2.2.1. Conformance to RFC 3697 | ||||
| [RFC3697] mandates that the Flow Label value set by the source MUST | ||||
| be delivered unchanged to the destination node(s). | ||||
| In order to restore the flow label to its original value, an RPL | 8.2.2. Router Operation | |||
| router that delivers a packet to a destination connected to a RPL | ||||
| network or that routes a packet outside the RPL network MUST zero out | ||||
| all the fields but the RPLInstanceID field that must be delivered | ||||
| without a change. | ||||
| 7.2.2.2. Instance Forwarding | 8.2.2.1. Instance Forwarding | |||
| Instance IDs are used to avoid loops between DODAGs from different | Instance IDs are used to avoid loops between DODAGs from different | |||
| origins. DODAGs that constructed for antagonistic constraints might | origins. DODAGs that constructed for antagonistic constraints might | |||
| contain paths that, if mixed together, would yield loops. Those | contain paths that, if mixed together, would yield loops. Those | |||
| loops are avoided by forwarding a packet along the DODAG that is | loops are avoided by forwarding a packet along the DODAG that is | |||
| associated to a given instance. | associated to a given instance. | |||
| The RPLInstanceID is placed by the source in the flow label. This | The RPLInstanceID is associated by the source with the packet. This | |||
| RPLInstanceID MUST match the RPL Instance onto which the packet is | RPLInstanceID MUST match the RPL Instance onto which the packet is | |||
| placed by any node, be it a host or router. | placed by any node, be it a host or router. For traffic originating | |||
| outside of the RPL domain there may be a mapping occurring at the | ||||
| gateway into the RPL domain, possibly based on an encoding within the | ||||
| flow label. This aspect of RPL operation is to be clarified in a | ||||
| future version of this specification. | ||||
| When a router receives a packet that specifies a given RPLInstanceID | When a router receives a packet that specifies a given RPLInstanceID | |||
| and the node can forward the packet along the DODAG associated to | and the node can forward the packet along the DODAG associated to | |||
| that instance, then the router MUST do so and leave the RPLInstanceID | that instance, then the router MUST do so and leave the RPLInstanceID | |||
| flag unchanged. | value unchanged. | |||
| If any node can not forward a packet along the DODAG associated to | If any node can not forward a packet along the DODAG associated to | |||
| the RPLInstanceID in the flow label, then the node SHOULD discard the | the RPLInstanceID, then the node SHOULD discard the packet and send | |||
| packet. | an ICMP error message. | |||
| 7.2.2.3. DAG Inconsistency Loop Detection | 8.2.2.2. DAG Inconsistency Loop Detection | |||
| The DODAG is inconsistent if the direction of a packet does not match | The DODAG is inconsistent if the direction of a packet does not match | |||
| the rank relationship. A receiver detects an inconsistency if it | the rank relationship. A receiver detects an inconsistency if it | |||
| receives a packet with either: | receives a packet with either: | |||
| the 'O' bit set (to down) from a node of a higher rank. | the 'O' bit set (to down) from a node of a higher rank. | |||
| the 'O' bit reset (for up) from a node of a lesser rank. | the 'O' bit reset (for up) from a node of a lesser rank. | |||
| the 'S' bit set (to sibling) from a node of a different rank. | the 'S' bit set (to sibling) from a node of a different rank. | |||
| When the DODAG root increments the DODAGSequenceNumber a temporary | When the DODAG root increments the DODAGVersionNumber a temporary | |||
| rank discontinuity may form between the next iteration and the prior | rank discontinuity may form between the next version and the prior | |||
| iteration, in particular if nodes are adjusting their rank in the | version, in particular if nodes are adjusting their rank in the next | |||
| next iteration and deferring their migration into the next iteration. | version and deferring their migration into the next version. A | |||
| A router that is still a member of the prior iteration may choose to | router that is still a member of the prior version may choose to | |||
| forward a packet to a (future) parent that is in the next iteration. | forward a packet to a (future) parent that is in the next version. | |||
| In some cases this could cause the parent to detect an inconsistency | In some cases this could cause the parent to detect an inconsistency | |||
| because the rank-ordering in the prior iteration is not necessarily | because the rank-ordering in the prior version is not necessarily the | |||
| the same as in the next iteration and the packet may be judged to not | same as in the next version and the packet may be judged to not be | |||
| be making forward progress. If the sending router is aware that the | making forward progress. If the sending router is aware that the | |||
| chosen successor has already joined the next iteration, then the | chosen successor has already joined the next version, then the | |||
| sending router MUST update the SenderRank to INFINITE_RANK as it | sending router MUST update the SenderRank to INFINITE_RANK as it | |||
| forwards the packets across the discontinuity into the next DODAG | forwards the packets across the discontinuity into the next DODAG | |||
| iteration in order to avoid a false detection of rank inconsistency. | version in order to avoid a false detection of rank inconsistency. | |||
| One inconsistency along the path is not considered as a critical | One inconsistency along the path is not considered as a critical | |||
| error and the packet may continue. But a second detection along the | error and the packet may continue. But a second detection along the | |||
| path of a same packet should not occur and the packet is dropped. | path of a same packet should not occur and the packet is dropped. | |||
| This process is controlled by the Rank-Error bit in the Flow Label. | This process is controlled by the Rank-Error bit associated with the | |||
| When an inconsistency, is detected on a packet, if the Rank-Error bit | packet. When an inconsistency is detected on a packet, if the Rank- | |||
| was not set then the Rank-Error bit is set. If it was set the packet | Error bit was not set then the Rank-Error bit is set. If it was set | |||
| is discarded and the trickle timer is reset. | the packet is discarded and the trickle timer is reset. | |||
| 7.2.2.4. Sibling Loop Avoidance | 8.2.2.3. Sibling Loop Avoidance | |||
| When a packet is forwarded along siblings, it cannot be checked for | When a packet is forwarded along siblings, it cannot be checked for | |||
| forward progress and may loop between siblings. Experimental | forward progress and may loop between siblings. Experimental | |||
| evidence has shown that one sibling hop can be very useful but is | evidence has shown that one sibling hop can be very useful and is | |||
| generally sufficient to avoid loops. Based on that evidence, this | generally sufficient to avoid loops. Based on that evidence, this | |||
| specification enforces the simple rule that a packet may not make 2 | specification enforces the simple rule that a packet may not make 2 | |||
| sibling hops in a row. | sibling hops in a row. | |||
| When a host issues a packet or when a router forwards a packet to a | When a host issues a packet or when a router forwards a packet to a | |||
| non-sibling, the Sibling bit in the packet must be reset. When a | non-sibling, the Sibling bit in the packet must be reset. When a | |||
| router forwards to a sibling: if the Sibling bit was not set then the | router forwards to a sibling: if the Sibling bit was not set then the | |||
| Sibling bit is set. If the Sibling bit was set then then the router | Sibling bit is set. If the Sibling bit was set then then the router | |||
| SHOULD return the packet to the sibling that that passed it with the | SHOULD return the packet to the sibling that that passed it with the | |||
| Forwarding-Error 'F' bit set. | Forwarding-Error 'F' bit set and the 'S' bit left untouched. | |||
| 7.2.2.5. DAO Inconsistency Loop Detection and Recovery | 8.2.2.4. DAO Inconsistency Loop Detection and Recovery | |||
| A DAO inconsistency happens when router that has an down DAO route | A DAO inconsistency happens when router that has an down DAO route | |||
| via a child that is a remnant from an obsolete state that is not | via a child that is a remnant from an obsolete state that is not | |||
| matched in the child. With DAO inconsistency loop recovery, a packet | matched in the child. With DAO inconsistency loop recovery, a packet | |||
| can be used to recursively explore and cleanup the obsolete DAO | can be used to recursively explore and cleanup the obsolete DAO | |||
| states along a sub-DODAG. | states along a sub-DODAG. | |||
| In a general manner, a packet that goes down should never go up | In a general manner, a packet that goes down should never go up | |||
| again. If DAO inconsistency loop recovery is applied, then the | again. If DAO inconsistency loop recovery is applied, then the | |||
| router SHOULD send the packet to the parent that passed it with the | router SHOULD send the packet back to the parent that passed it with | |||
| Forwarding-Error 'F' bit set. Otherwise the router MUST silently | the Forwarding-Error 'F' bit set and the 'O' bit left untouched. | |||
| discard the packet. | Otherwise the router MUST silently discard the packet. | |||
| 7.2.2.6. Forward Path Recovery | 8.2.2.5. Forward Path Recovery | |||
| Upon receiving a packet with a Forwarding-Error bit set, the node | Upon receiving a packet with a Forwarding-Error bit set, the node | |||
| MUST remove the routing states that caused forwarding to that | MUST remove the routing states that caused forwarding to that | |||
| neighbor, clear the Forwarding-Error bit and attempt to send the | neighbor, clear the Forwarding-Error bit and attempt to send the | |||
| packet again. The packet may its way to an alternate neighbor. If | packet again. The packet may be sent to an alternate neighbor. If | |||
| that alternate neighbor still has an inconsistent DAO state via this | that alternate neighbor still has an inconsistent DAO state via this | |||
| node, the process will recurse, this node will set the Forwarding- | node, the process will recurse, this node will set the Forwarding- | |||
| Error 'F' bit and the routing state in the alternate neighbor will be | Error 'F' bit and the routing state in the alternate neighbor will be | |||
| cleaned up as well. | cleaned up as well. | |||
| 8. Multicast Operation | 9. Multicast Operation | |||
| This section describes further the multicast routing operations over | This section describes further the multicast routing operations over | |||
| an IPv6 RPL network, and specifically how unicast DAOs can be used to | an IPv6 RPL network, and specifically how unicast DAOs can be used to | |||
| relay group registrations up. Wherever the following text mentions | relay group registrations up. Wherever the following text mentions | |||
| Multicast Listener Discovery (MLD), one can read MLDv2 ([RFC3810]) or | Multicast Listener Discovery (MLD), one can read MLDv1 ([RFC2710]) or | |||
| v3. | MLDv2 ([RFC3810]). | |||
| As is traditional, a listener uses a protocol such as MLD with a | As is traditional, a listener uses a protocol such as MLD with a | |||
| router to register to a multicast group. | router to register to a multicast group. | |||
| Along the path between the router and the DODAG root, MLD requests | Along the path between the router and the DODAG root, MLD requests | |||
| are mapped and transported as DAO messages within the RPL protocol; | are mapped and transported as DAO messages within the RPL protocol; | |||
| each hop coalesces the multiple requests for a same group as a single | each hop coalesces the multiple requests for a same group as a single | |||
| DAO message to the parent(s), in a fashion similar to proxy IGMP, but | DAO message to the parent(s), in a fashion similar to proxy IGMP, but | |||
| recursively between child router and parent up to the root. | recursively between child router and parent up to the root. | |||
| skipping to change at page 58, line 27 ¶ | skipping to change at page 69, line 22 ¶ | |||
| the router will need to prune. | the router will need to prune. | |||
| As a result, multicast routing states are installed in each router on | As a result, multicast routing states are installed in each router on | |||
| the way from the listeners to the root, enabling the root to copy a | the way from the listeners to the root, enabling the root to copy a | |||
| multicast packet to all its children routers that had issued a DAO | multicast packet to all its children routers that had issued a DAO | |||
| message including a DAO for that multicast group, as well as all the | message including a DAO for that multicast group, as well as all the | |||
| attached nodes that registered over MLD. | attached nodes that registered over MLD. | |||
| For unicast traffic, it is expected that the grounded root of an | For unicast traffic, it is expected that the grounded root of an | |||
| DODAG terminates RPL and MAY redistribute the RPL routes over the | DODAG terminates RPL and MAY redistribute the RPL routes over the | |||
| external infrastructure using whatever routing protocol is used | external infrastructure using whatever routing protocol is used in | |||
| there. For multicast traffic, the root MAY proxy MLD for all the | the other routing domain. For multicast traffic, the root MAY proxy | |||
| nodes attached to the RPL routers (this would be needed if the | MLD for all the nodes attached to the RPL domain (this would be | |||
| multicast source is located in the external infrastructure). For | needed if the multicast source is located in the external | |||
| such a source, the packet will be replicated as it flows down the | infrastructure). For such a source, the packet will be replicated as | |||
| DODAG based on the multicast routing table entries installed from the | it flows down the DODAG based on the multicast routing table entries | |||
| DAO message. | installed from the DAO message. | |||
| For a source inside the DODAG, the packet is passed to the preferred | For a source inside the DODAG, the packet is passed to the preferred | |||
| parents, and if that fails then to the alternates in the DODAG. The | parents, and if that fails then to the alternates in the DODAG. The | |||
| packet is also copied to all the registered children, except for the | packet is also copied to all the registered children, except for the | |||
| one that passed the packet. Finally, if there is a listener in the | one that passed the packet. Finally, if there is a listener in the | |||
| external infrastructure then the DODAG root has to further propagate | external infrastructure then the DODAG root has to further propagate | |||
| the packet into the external infrastructure. | the packet into the external infrastructure. | |||
| As a result, the DODAG Root acts as an automatic proxy Rendezvous | As a result, the DODAG Root acts as an automatic proxy Rendezvous | |||
| Point for the RPL network, and as source towards the Internet for all | Point for the RPL network, and as source towards the Internet for all | |||
| multicast flows started in the RPL LLN. So regardless of whether the | multicast flows started in the RPL LLN. So regardless of whether the | |||
| root is actually attached to the Internet, and regardless of whether | root is actually attached to the Internet, and regardless of whether | |||
| the DODAG is grounded or floating, the root can serve inner multicast | the DODAG is grounded or floating, the root can serve inner multicast | |||
| streams at all times. | streams at all times. | |||
| 9. Maintenance of Routing Adjacency | 10. Maintenance of Routing Adjacency | |||
| The selection of successors, along the default paths up along the | The selection of successors, along the default paths up along the | |||
| DODAG, or along the paths learned from destination advertisements | DODAG, or along the paths learned from destination advertisements | |||
| down along the DODAG, leads to the formation of routing adjacencies | down along the DODAG, leads to the formation of routing adjacencies | |||
| that require maintenance. | that require maintenance. | |||
| In IGPs such as OSPF [RFC4915] or IS-IS [RFC5120], the maintenance of | In IGPs such as OSPF [RFC4915] or IS-IS [RFC5120], the maintenance of | |||
| a routing adjacency involves the use of Keepalive mechanisms (Hellos) | a routing adjacency involves the use of Keepalive mechanisms (Hellos) | |||
| or other protocols such as BFD ([I-D.ietf-bfd-base]) and MANET | or other protocols such as BFD ([I-D.ietf-bfd-base]) and MANET | |||
| Neighborhood Discovery Protocol (NHDP [I-D.ietf-manet-nhdp]). | Neighborhood Discovery Protocol (NHDP [I-D.ietf-manet-nhdp]). | |||
| skipping to change at page 59, line 30 ¶ | skipping to change at page 70, line 27 ¶ | |||
| Thus RPL makes use of a different approach consisting of probing the | Thus RPL makes use of a different approach consisting of probing the | |||
| neighbor using a Neighbor Solicitation message (see [RFC4861]). The | neighbor using a Neighbor Solicitation message (see [RFC4861]). The | |||
| reception of a Neighbor Advertisement (NA) message with the | reception of a Neighbor Advertisement (NA) message with the | |||
| "Solicited Flag" set is used to verify the validity of the routing | "Solicited Flag" set is used to verify the validity of the routing | |||
| adjacency. Such mechanism MAY be used prior to sending a data | adjacency. Such mechanism MAY be used prior to sending a data | |||
| packet. This allows for detecting whether or not the routing | packet. This allows for detecting whether or not the routing | |||
| adjacency is still valid, and should it not be the case, select | adjacency is still valid, and should it not be the case, select | |||
| another feasible successor to forward the packet. | another feasible successor to forward the packet. | |||
| 10. Guidelines for Objective Functions | 11. Guidelines for Objective Functions | |||
| An Objective Function (OF) allows for the selection of a DODAG to | An Objective Function (OF) allows for the selection of a DODAG to | |||
| join, and a number of peers in that DODAG as parents. The OF is used | join, and a number of peers in that DODAG as parents. The OF is used | |||
| to compute an ordered list of parents. The OF is also responsible to | to compute an ordered list of parents. The OF is also responsible to | |||
| compute the rank of the device within the DODAG iteration. | compute the rank of the device within the DODAG version. | |||
| The Objective Function is indicated in the DIO message using an | The Objective Function is indicated in the DIO message using an | |||
| Objective Code Point (OCP), as specified in | Objective Code Point (OCP), as specified in | |||
| [I-D.ietf-roll-routing-metrics], and indicates the method that must | [I-D.ietf-roll-routing-metrics], and indicates the method that must | |||
| be used to construct the DODAG (e.g. "minimize the path cost using | be used to construct the DODAG. The Objective Code Points are | |||
| the ETX metric and avoid 'Blue' links"). The Objective Code Points | specified in [I-D.ietf-roll-routing-metrics], [I-D.ietf-roll-of0], | |||
| are specified in [I-D.ietf-roll-routing-metrics], | and related companion specifications. | |||
| [I-D.ietf-roll-of0], and related companion specifications. | ||||
| 11.1. Objective Function Behavior | ||||
| Most Objective Functions are expected to follow the same abstract | Most Objective Functions are expected to follow the same abstract | |||
| behavior: | behavior: | |||
| o The parent selection is triggered each time an event indicates | o The parent selection is triggered each time an event indicates | |||
| that a potential next hop information is updated. This might | that a potential next hop information is updated. This might | |||
| happen upon the reception of a DIO message, a timer elapse, or a | happen upon the reception of a DIO message, a timer elapse, all | |||
| trigger indicating that the state of a candidate neighbor has | DODAG parents are unavailable, or a trigger indicating that the | |||
| changed. | state of a candidate neighbor has changed. | |||
| o An OF scans all the interfaces on the device. Although there may | o An OF scans all the interfaces on the device. Although there may | |||
| typically be only one interface in most application scenarios, | typically be only one interface in most application scenarios, | |||
| there might be multiple of them and an interface might be | there might be multiple of them and an interface might be | |||
| configured to be usable or not for RPL operation. An interface | configured to be usable or not for RPL operation. An interface | |||
| can also be configured with a preference or dynamically learned to | can also be configured with a preference or dynamically learned to | |||
| be better than another by some heuristics that might be link-layer | be better than another by some heuristics that might be link-layer | |||
| dependent and are out of scope. Finally an interface might or not | dependent and are out of scope. Finally an interface might or not | |||
| match a required criterion for an Objective Function, for instance | match a required criterion for an Objective Function, for instance | |||
| a degree of security. As a result some interfaces might be | a degree of security. As a result some interfaces might be | |||
| skipping to change at page 60, line 28 ¶ | skipping to change at page 71, line 26 ¶ | |||
| o An OF scans all the candidate neighbors on the possible interfaces | o An OF scans all the candidate neighbors on the possible interfaces | |||
| to check whether they can act as a router for a DODAG. There | to check whether they can act as a router for a DODAG. There | |||
| might be multiple of them and a candidate neighbor might need to | might be multiple of them and a candidate neighbor might need to | |||
| pass some validation tests before it can be used. In particular, | pass some validation tests before it can be used. In particular, | |||
| some link layers require experience on the activity with a router | some link layers require experience on the activity with a router | |||
| to enable the router as a next hop. | to enable the router as a next hop. | |||
| o An OF computes self's rank by adding to the rank of the candidate | o An OF computes self's rank by adding to the rank of the candidate | |||
| a value representing the relative locations of self and the | a value representing the relative locations of self and the | |||
| candidate in the DODAG iteration. | candidate in the DODAG version. | |||
| * The increase in rank must be at least MinHopRankIncrease. | * The increase in rank must be at least MinHopRankIncrease. | |||
| (This prevents the creation of a path of sibling links | ||||
| connecting a child with its parent.) | ||||
| * To keep loop avoidance and metric optimization in alignment, | * To keep loop avoidance and metric optimization in alignment, | |||
| the increase in rank should reflect any increase in the metric | the increase in rank should reflect any increase in the metric | |||
| value. For example, with a purely additive metric such as ETX, | value. For example, with a purely additive metric such as ETX, | |||
| the increase in rank can be made proportional to the increase | the increase in rank can be made proportional to the increase | |||
| in the metric. | in the metric. | |||
| * Candidate neighbors that would cause self's rank to increase | * Candidate neighbors that would cause self's rank to increase | |||
| are not considered for parent selection | are not considered for parent selection | |||
| o Candidate neighbors that advertise an OF incompatible with the set | o Candidate neighbors that advertise an OF incompatible with the set | |||
| of OF specified by the policy functions are ignored. | of OF specified by the policy functions are ignored. | |||
| o As it scans all the candidate neighbors, the OF keeps the current | o As it scans all the candidate neighbors, the OF keeps the current | |||
| best parent and compares its capabilities with the current | best parent and compares its capabilities with the current | |||
| candidate neighbor. The OF defines a number of tests that are | candidate neighbor. The OF defines a number of tests that are | |||
| critical to reach the objective. A test between the routers | critical to reach the objective. A test between the routers | |||
| determines an order relation. | determines an order relation. | |||
| * If the routers are roughly equal for that relation then the | * If the routers are equal for that relation then the next test | |||
| next test is attempted between the routers, | is attempted between the routers, | |||
| * Else the best of the 2 becomes the current best parent and the | * Else the best of the two routers becomes the current best | |||
| scan continues with the next candidate neighbor | parent and the scan continues with the next candidate neighbor | |||
| * Some OFs may include a test to compare the ranks that would | * Some OFs may include a test to compare the ranks that would | |||
| result if the node joined either router | result if the node joined either router | |||
| o When the scan is complete, the preferred parent is elected and | o When the scan is complete, the preferred parent is elected and | |||
| self's rank is computed as the preferred parent rank plus the step | self's rank is computed as the preferred parent rank plus the step | |||
| in rank with that parent. | in rank with that parent. | |||
| o Other rounds of scans might be necessary to elect alternate | o Other rounds of scans might be necessary to elect alternate | |||
| parents and siblings. In the next rounds: | parents and siblings. In the next rounds: | |||
| skipping to change at page 61, line 32 ¶ | skipping to change at page 72, line 26 ¶ | |||
| * Candidate neighbors that are of greater rank than self are | * Candidate neighbors that are of greater rank than self are | |||
| ignored | ignored | |||
| * Candidate neighbors of an equal rank to self (siblings) are | * Candidate neighbors of an equal rank to self (siblings) are | |||
| ignored for parent selection | ignored for parent selection | |||
| * Candidate neighbors of a lesser rank than self (non-siblings) | * Candidate neighbors of a lesser rank than self (non-siblings) | |||
| are preferred | are preferred | |||
| 11. RPL Constants and Variables | 12. RPL Constants and Variables | |||
| Following is a summary of RPL constants and variables. | Following is a summary of RPL constants and variables. | |||
| BASE_RANK This is the rank for a virtual root that might be used to | BASE_RANK This is the rank for a virtual root that might be used to | |||
| coordinate multiple roots. BASE_RANK has a value of 0. | coordinate multiple roots. BASE_RANK has a value of 0. | |||
| ROOT_RANK This is the rank for a DODAG root. ROOT_RANK has a value | ROOT_RANK This is the rank for a DODAG root. ROOT_RANK has a value | |||
| of 1. | of MinHopRankIncrease (as advertised by the DODAG root), such | |||
| that DAGRank(ROOT_RANK) is 1. | ||||
| INFINITE_RANK This is the constant maximum for the rank. | INFINITE_RANK This is the constant maximum for the rank. | |||
| INFINITE_RANK has a value of 0xFFFF. | INFINITE_RANK has a value of 0xFFFF. | |||
| RPL_DEFAULT_INSTANCE This is the RPLInstanceID that is used by this | RPL_DEFAULT_INSTANCE This is the RPLInstanceID that is used by this | |||
| protocol by a node without any overriding policy. | protocol by a node without any overriding policy. | |||
| RPL_DEFAULT_INSTANCE has a value of 0. | RPL_DEFAULT_INSTANCE has a value of 0. | |||
| DEFAULT_PATH_CONTROL_SIZE TBD (To be determined) | ||||
| DEFAULT_DIO_INTERVAL_MIN TBD (To be determined) | DEFAULT_DIO_INTERVAL_MIN TBD (To be determined) | |||
| DEFAULT_DIO_INTERVAL_DOUBLINGS TBD (To be determined) | DEFAULT_DIO_INTERVAL_DOUBLINGS TBD (To be determined) | |||
| DEFAULT_DIO_REDUNDANCY_CONSTANT TBD (To be determined) | DEFAULT_DIO_REDUNDANCY_CONSTANT TBD (To be determined) | |||
| DEFAULT_MIN_HOP_RANK_INCREASE TBD a power of two (To be determined) | ||||
| DIO Timer One instance per DODAG that a node is a member of. Expiry | DIO Timer One instance per DODAG that a node is a member of. Expiry | |||
| triggers DIO message transmission. Trickle timer with variable | triggers DIO message transmission. Trickle timer with variable | |||
| interval in [0, DIOIntervalMin..2^DIOIntervalDoublings]. See | interval in [0, DIOIntervalMin..2^DIOIntervalDoublings]. See | |||
| Section 5.3.5.1 | Section 6.3.1 | |||
| DAG Sequence Number Increment Timer Up to one instance per DODAG | DAG Version Increment Timer Up to one instance per DODAG that the | |||
| that the node is acting as DODAG root of. May not be supported | node is acting as DODAG root of. May not be supported in all | |||
| in all implementations. Expiry triggers revision of | implementations. Expiry triggers increment of | |||
| DODAGSequenceNumber, causing a new series of updated DIO | DODAGVersionNumber, causing a new series of updated DIO message | |||
| message to be sent. Interval should be chosen appropriate to | to be sent. Interval should be chosen appropriate to | |||
| propagation time of DODAG and as appropriate to application | propagation time of DODAG and as appropriate to application | |||
| requirements (e.g. response time vs. overhead). | requirements (e.g. response time vs. overhead). | |||
| DelayDAO Timer Up to one instance per DAO parent (the subset of | DelayDAO Timer Up to one instance per DAO parent (the subset of | |||
| DODAG parents chosen to receive destination advertisements) per | DODAG parents chosen to receive destination advertisements) per | |||
| DODAG. Expiry triggers sending of DAO message to the DAO | DODAG. Expiry triggers sending of DAO message to the DAO | |||
| parent. See Section 6.2.6 | parent. See Section 7.1.6 | |||
| RemoveTimer Up to one instance per DAO entry per neighbor (i.e. | RemoveTimer Up to one instance per DAO entry per neighbor (i.e. | |||
| those neighbors that have given DAO messages to this node as a | those neighbors that have given DAO messages to this node as a | |||
| DODAG parent) Expiry triggers a change in state for the DAO | DODAG parent) Expiry triggers a change in state for the DAO | |||
| entry, setting up to do unreachable (No-DAO) advertisements or | entry, setting up to do unreachable (No-Path) advertisements or | |||
| immediately deallocating the DAO entry if there are no DAO | immediately deallocating the DAO entry if there are no DAO | |||
| parents. See Section 6.2.4.1.1.3 | parents. See Section 7.1.4.1.1.3 | |||
| 12. Manageability Considerations | 13. Manageability Considerations | |||
| The aim of this section is to give consideration to the manageability | The aim of this section is to give consideration to the manageability | |||
| of RPL, and how RPL will be operated in LLN beyond the use of a MIB | of RPL, and how RPL will be operated in LLN beyond the use of a MIB | |||
| module. The scope of this section is to consider the following | module. The scope of this section is to consider the following | |||
| aspects of manageability: fault management, configuration, accounting | aspects of manageability: fault management, configuration, accounting | |||
| and performance. | and performance. | |||
| 12.1. Control of Function and Policy | 13.1. Control of Function and Policy | |||
| 12.1.1. Initialization Mode | 13.1.1. Initialization Mode | |||
| When a node is first powered up, it may either choose to stay silent | When a node is first powered up, it may either choose to stay silent | |||
| and not send any multicast DIO message until it has joined a DODAG, | and not send any multicast DIO message until it has joined a DODAG, | |||
| or to immediately root a transient DODAG and start sending multicast | or to immediately root a transient DODAG and start sending multicast | |||
| DIO messages. A RPL implementation SHOULD allow configuring whether | DIO messages. A RPL implementation SHOULD allow configuring whether | |||
| the node should stay silent or should start advertising DIO messages. | the node should stay silent or should start advertising DIO messages. | |||
| Furthermore, the implementation SHOULD to allow configuring whether | Furthermore, the implementation SHOULD to allow configuring whether | |||
| or not the node should start sending an DIS message as an initial | or not the node should start sending an DIS message as an initial | |||
| probe for nearby DODAGs, or should simply wait until it received DIO | probe for nearby DODAGs, or should simply wait until it received DIO | |||
| messages from other nodes that are part of existing DODAGs. | messages from other nodes that are part of existing DODAGs. | |||
| 12.1.2. DIO Base option | 13.1.2. DIO Base option | |||
| RPL specifies a number of protocol parameters. | RPL specifies a number of protocol parameters. | |||
| A RPL implementation SHOULD allow configuring the following routing | A RPL implementation SHOULD allow configuring the following routing | |||
| protocol parameters, which are further described in Section 5.1.1: | protocol parameters, which are further described in Section 5.3: | |||
| DAGPreference | DAGPreference | |||
| RPLInstanceID | RPLInstanceID | |||
| DAGObjectiveCodePoint | DAGObjectiveCodePoint | |||
| DODAGID | DODAGID | |||
| Destination Prefixes | Routing Information | |||
| Prefix Information | ||||
| DIOIntervalDoublings | DIOIntervalDoublings | |||
| DIOIntervalMin | DIOIntervalMin | |||
| DIORedundancyConstant | DIORedundancyConstant | |||
| DAG Root behavior: In some cases, a node may not want to permanently | DAG Root behavior: In some cases, a node may not want to permanently | |||
| act as a DODAG root if it cannot join a grounded DODAG. For | act as a DODAG root if it cannot join a grounded DODAG. For | |||
| example a battery-operated node may not want to act as a DODAG | example a battery-operated node may not want to act as a DODAG | |||
| root for a long period of time. Thus a RPL implementation MAY | root for a long period of time. Thus a RPL implementation MAY | |||
| support the ability to configure whether or not a node could | support the ability to configure whether or not a node could | |||
| act as a DODAG root for a configured period of time. | act as a DODAG root for a configured period of time. | |||
| DODAG Table Entry Suppression A RPL implementation SHOULD provide | DODAG Table Entry Suppression A RPL implementation SHOULD provide | |||
| the ability to configure a timer after the expiration of which | the ability to configure a timer after the expiration of which | |||
| logical equivalent of the DODAG table that contains all the | logical equivalent of the DODAG table that contains all the | |||
| records about a DODAG is suppressed, to be invoked if the DODAG | records about a DODAG is suppressed, to be invoked if the DODAG | |||
| parent set becomes empty. | parent set becomes empty. | |||
| 12.1.3. Trickle Timers | 13.1.3. Trickle Timers | |||
| A RPL implementation makes use of trickle timer to govern the sending | A RPL implementation makes use of trickle timer to govern the sending | |||
| of DIO message. Such an algorithm is determined a by a set of | of DIO message. Such an algorithm is determined a by a set of | |||
| configurable parameters that are then advertised by the DODAG root | configurable parameters that are then advertised by the DODAG root | |||
| along the DODAG in DIO messages. | along the DODAG in DIO messages. | |||
| For each DODAG, a RPL implementation MUST allow for the monitoring of | For each DODAG, a RPL implementation MUST allow for the monitoring of | |||
| the following parameters, further described in Section 5.3.5.1: | the following parameters, further described in Section 6.3.1: | |||
| I | I | |||
| T | T | |||
| C | C | |||
| I_min | I_min | |||
| I_doublings | I_doublings | |||
| A RPL implementation SHOULD provide a command (for example via API, | A RPL implementation SHOULD provide a command (for example via API, | |||
| CLI, or SNMP MIB) whereby any procedure that detects an inconsistency | CLI, or SNMP MIB) whereby any procedure that detects an inconsistency | |||
| may cause the trickle timer to reset. | may cause the trickle timer to reset. | |||
| 12.1.4. DAG Sequence Number Increment | 13.1.4. DAG Version Number Increment | |||
| A RPL implementation may allow by configuration at the DODAG root to | A RPL implementation may allow by configuration at the DODAG root to | |||
| refresh the DODAG states by updating the DODAGSequenceNumber. A RPL | refresh the DODAG states by updating the DODAGVersionNumber. A RPL | |||
| implementation SHOULD allow configuring whether or not periodic or | implementation SHOULD allow configuring whether or not periodic or | |||
| event triggered mechanism are used by the DODAG root to control | event triggered mechanism are used by the DODAG root to control | |||
| DODAGSequenceNumber change. | DODAGVersionNumber change. | |||
| 12.1.5. Destination Advertisement Timers | 13.1.5. Destination Advertisement Timers | |||
| The following set of parameters of the DAO messages SHOULD be | The following set of parameters of the DAO messages SHOULD be | |||
| configurable: | configurable: | |||
| o The DelayDAO timer | o The DelayDAO timer | |||
| o The Remove timer | o The Remove timer | |||
| 12.1.6. Policy Control | 13.1.6. Policy Control | |||
| DAG discovery enables nodes to implement different policies for | DAG discovery enables nodes to implement different policies for | |||
| selecting their DODAG parents. | selecting their DODAG parents. | |||
| A RPL implementation SHOULD allow configuring the set of acceptable | A RPL implementation SHOULD allow configuring the set of acceptable | |||
| or preferred Objective Functions (OF) referenced by their Objective | or preferred Objective Functions (OF) referenced by their Objective | |||
| Codepoints (OCPs) for a node to join a DODAG, and what action should | Codepoints (OCPs) for a node to join a DODAG, and what action should | |||
| be taken if none of a node's candidate neighbors advertise one of the | be taken if none of a node's candidate neighbors advertise one of the | |||
| configured allowable Objective Functions. | configured allowable Objective Functions. | |||
| A node in an LLN may learn routing information from different routing | A node in an LLN may learn routing information from different routing | |||
| protocols including RPL. It is in this case desirable to control via | protocols including RPL. It is in this case desirable to control via | |||
| administrative preference which route should be favored. An | administrative preference which route should be favored. An | |||
| implementation SHOULD allow for specifying an administrative | implementation SHOULD allow for specifying an administrative | |||
| preference for the routing protocol from which the route was learned. | preference for the routing protocol from which the route was learned. | |||
| A RPL implementation SHOULD allow for the configuration of the "Route | 13.1.7. Data Structures | |||
| Tag" field of the DAO messages according to a set of rules defined by | ||||
| policy. | ||||
| 12.1.7. Data Structures | ||||
| Some RPL implementation may limit the size of the candidate neighbor | Some RPL implementation may limit the size of the candidate neighbor | |||
| list in order to bound the memory usage, in which case some otherwise | list in order to bound the memory usage, in which case some otherwise | |||
| viable candidate neighbors may not be considered and simply dropped | viable candidate neighbors may not be considered and simply dropped | |||
| from the candidate neighbor list. | from the candidate neighbor list. | |||
| A RPL implementation MAY provide an indicator on the size of the | A RPL implementation MAY provide an indicator on the size of the | |||
| candidate neighbor list. | candidate neighbor list. | |||
| 12.2. Information and Data Models | 13.2. Information and Data Models | |||
| The information and data models necessary for the operation of RPL | The information and data models necessary for the operation of RPL | |||
| will be defined in a separate document specifying the RPL SNMP MIB. | will be defined in a separate document specifying the RPL SNMP MIB. | |||
| 12.3. Liveness Detection and Monitoring | 13.3. Liveness Detection and Monitoring | |||
| The aim of this section is to describe the various RPL mechanisms | The aim of this section is to describe the various RPL mechanisms | |||
| specified to monitor the protocol. | specified to monitor the protocol. | |||
| As specified in Section 3.1, an implementation is expected to | As specified in Section 3.1, an implementation is expected to | |||
| maintain a set of data structures in support of DODAG discovery: | maintain a set of data structures in support of DODAG discovery: | |||
| o The candidate neighbors data structure | o The candidate neighbors data structure | |||
| o For each DODAG: | o For each DODAG: | |||
| * A set of DODAG parents | * A set of DODAG parents | |||
| 12.3.1. Candidate Neighbor Data Structure | 13.3.1. Candidate Neighbor Data Structure | |||
| A node in the candidate neighbor list is a node discovered by the | A node in the candidate neighbor list is a node discovered by the | |||
| some means and qualified to potentially become of neighbor or a | some means and qualified to potentially become of neighbor or a | |||
| sibling (with high enough local confidence). A RPL implementation | sibling (with high enough local confidence). A RPL implementation | |||
| SHOULD provide a way monitor the candidate neighbors list with some | SHOULD provide a way monitor the candidate neighbors list with some | |||
| metric reflecting local confidence (the degree of stability of the | metric reflecting local confidence (the degree of stability of the | |||
| neighbors) measured by some metrics. | neighbors) measured by some metrics. | |||
| A RPL implementation MAY provide a counter reporting the number of | A RPL implementation MAY provide a counter reporting the number of | |||
| times a candidate neighbor has been ignored, should the number of | times a candidate neighbor has been ignored, should the number of | |||
| candidate neighbors exceeds the maximum authorized value. | candidate neighbors exceeds the maximum authorized value. | |||
| 12.3.2. Directed Acyclic Graph (DAG) Table | 13.3.2. Directed Acyclic Graph (DAG) Table | |||
| For each DAG, a RPL implementation is expected to keep track of the | For each DAG, a RPL implementation is expected to keep track of the | |||
| following DODAG table values: | following DODAG table values: | |||
| o DODAGID | o DODAGID | |||
| o DAGObjectiveCodePoint | o DAGObjectiveCodePoint | |||
| o A set of prefixes offered upwards along the DODAG | ||||
| o A set of Destination Prefixes offered upwards along the DODAG | ||||
| o A set of DODAG Parents | o A set of DODAG Parents | |||
| o timer to govern the sending of DIO messages for the DODAG | o timer to govern the sending of DIO messages for the DODAG | |||
| o DODAGSequenceNumber | o DODAGVersionNumber | |||
| The set of DODAG parents structure is itself a table with the | The set of DODAG parents structure is itself a table with the | |||
| following entries: | following entries: | |||
| o A reference to the neighboring device which is the DAG parent | o A reference to the neighboring device which is the DAG parent | |||
| o A record of most recent information taken from the DAG Information | o A record of most recent information taken from the DAG Information | |||
| Object last processed from the DODAG Parent | Object last processed from the DODAG Parent | |||
| o A flag reporting if the Parent is a DAO Parent as described in | o A flag reporting if the Parent is a DAO Parent as described in | |||
| Section 6 | Section 7 | |||
| 12.3.3. Routing Table | 13.3.3. Routing Table | |||
| For each route provisioned by RPL operation, a RPL implementation | For each route provisioned by RPL operation, a RPL implementation | |||
| MUST keep track of the following: | MUST keep track of the following: | |||
| o Destination Prefix | o Routing Information (prefix, prefix length, ...) | |||
| o Destination Prefix Length | ||||
| o Lifetime Timer | o Lifetime Timer | |||
| o Next Hop | o Next Hop | |||
| o Next Hop Interface | o Next Hop Interface | |||
| o Flag indicating that the route was provisioned from one of: | o Flag indicating that the route was provisioned from one of: | |||
| * Unicast DAO message | * Unicast DAO message | |||
| * DIO message | * DIO message | |||
| * Multicast DAO message | * Multicast DAO message | |||
| 12.3.4. Other RPL Monitoring Parameters | 13.3.4. Other RPL Monitoring Parameters | |||
| A RPL implementation SHOULD provide a counter reporting the number of | A RPL implementation SHOULD provide a counter reporting the number of | |||
| a times the node has detected an inconsistency with respect to a | a times the node has detected an inconsistency with respect to a | |||
| DODAG parent, e.g. if the DODAGID has changed. | DODAG parent, e.g. if the DODAGID has changed. | |||
| A RPL implementation MAY log the reception of a malformed DIO message | A RPL implementation MAY log the reception of a malformed DIO message | |||
| along with the neighbor identification if avialable. | along with the neighbor identification if avialable. | |||
| 12.3.5. RPL Trickle Timers | 13.3.5. RPL Trickle Timers | |||
| A RPL implementation operating on a DODAG root MUST allow for the | A RPL implementation operating on a DODAG root MUST allow for the | |||
| configuration of the following trickle parameters: | configuration of the following trickle parameters: | |||
| o The DIOIntervalMin expressed in ms | o The DIOIntervalMin expressed in ms | |||
| o The DIOIntervalDoublings | o The DIOIntervalDoublings | |||
| o The DIORedundancyConstant | o The DIORedundancyConstant | |||
| A RPL implementation MAY provide a counter reporting the number of | A RPL implementation MAY provide a counter reporting the number of | |||
| times an inconsistency (and thus the trickle timer has been reset). | times an inconsistency (and thus the trickle timer has been reset). | |||
| 12.4. Verifying Correct Operation | 13.4. Verifying Correct Operation | |||
| This section has to be completed in further revision of this document | This section has to be completed in further revision of this document | |||
| to list potential Operations and Management (OAM) tools that could be | to list potential Operations and Management (OAM) tools that could be | |||
| used for verifying the correct operation of RPL. | used for verifying the correct operation of RPL. | |||
| 12.5. Requirements on Other Protocols and Functional Components | 13.5. Requirements on Other Protocols and Functional Components | |||
| RPL does not have any impact on the operation of existing protocols. | RPL does not have any impact on the operation of existing protocols. | |||
| 12.6. Impact on Network Operation | 13.6. Impact on Network Operation | |||
| To be completed. | To be completed. | |||
| 13. Security Considerations | 14. Security Considerations | |||
| Security Considerations for RPL are to be developed in accordance | +----------------------------------------------------------------+ | |||
| with recommendations laid out in, for example, | | | | |||
| [I-D.tsao-roll-security-framework]. | | TBD | | |||
| | Under Construction | | ||||
| | Deference given to Security Design Team | | ||||
| | | | ||||
| +----------------------------------------------------------------+ | ||||
| 14. IANA Considerations | 14.1. Overview | |||
| 14.1. RPL Control Message | ||||
| From a security perspective, RPL networks are no different from any | ||||
| other network. They are vulnerable to passive eavesdropping attacks | ||||
| and potentially even active tampering when physical access to a wire | ||||
| is not required to participate in communications. The very nature of | ||||
| ad hoc networks and their cost objectives impose additional security | ||||
| constraints, which perhaps make these networks the most difficult | ||||
| environments to secure. Devices are low-cost and have limited | ||||
| capabilities in terms of computing power, available storage, and | ||||
| power drain; and it cannot always be assumed they have neither a | ||||
| trusted computing base nor a high-quality random number generator | ||||
| aboard. Communications cannot rely on the online availability of a | ||||
| fixed infrastructure and might involve short-term relationships | ||||
| between devices that may never have communicated before. These | ||||
| constraints might severely limit the choice of cryptographic | ||||
| algorithms and protocols and influence the design of the security | ||||
| architecture because the establishment and maintenance of trust | ||||
| relationships between devices need to be addressed with care. In | ||||
| addition, battery lifetime and cost constraints put severe limits on | ||||
| the security overhead these networks can tolerate, something that is | ||||
| of far less concern with higher bandwidth networks. Most of these | ||||
| security architectural elements can be implemented at higher layers | ||||
| and may, therefore, be considered to be outside the scope of this | ||||
| standard. Special care, however, needs to be exercised with respect | ||||
| to interfaces to these higher layers. | ||||
| The security mechanisms in this standard are based on symmetric-key | ||||
| and public-key cryptography and use keys that are to be provided by | ||||
| higher layer processes. The establishment and maintenance of these | ||||
| keys are outside the scope of this standard. The mechanisms assume a | ||||
| secure implementation of cryptographic operations and secure and | ||||
| authentic storage of keying material. | ||||
| The security mechanisms specified provide particular combinations of | ||||
| the following security services: | ||||
| Data confidentiality: Assurance that transmitted information is only | ||||
| disclosed to parties for which it is intended. | ||||
| Data authenticity: Assurance of the source of transmitted | ||||
| information (and, hereby, that information was not | ||||
| modified in transit). | ||||
| Replay protection: Assurance that a duplicate of transmitted | ||||
| information is detected. | ||||
| Timeliness (delay protection): Assurance that transmitted | ||||
| information was received in a timely manner. | ||||
| The actual protection provided can be adapted on a per-packet basis | ||||
| and allows for varying levels of data authenticity (to minimize | ||||
| security overhead in transmitted packets where required) and for | ||||
| optional data confidentiality. When nontrivial protection is | ||||
| required, replay protection is always provided. | ||||
| Replay protection is provided via the use of a non-repeating value | ||||
| (nonce) in the packet protection process and storage of some status | ||||
| information for each originating device on the receiving device, | ||||
| which allows detection of whether this particular nonce value was | ||||
| used previously by the originating device. In addition, so-called | ||||
| delay protection is provided amongst those devices that have a | ||||
| loosely synchronized clock on board. The acceptable time delay can | ||||
| be adapted on a per-packet basis and allows for varying latencies (to | ||||
| facilitate longer latencies in packets transmitted over a multi-hop | ||||
| communication path). | ||||
| Cryptographic protection may use a key shared between two peer | ||||
| devices (link key) or a key shared among a group of devices (group | ||||
| key), thus allowing some flexibility and application-specific | ||||
| tradeoffs between key storage and key maintenance costs versus the | ||||
| cryptographic protection provided. If a group key is used for peer- | ||||
| to-peer communication, protection is provided only against outsider | ||||
| devices and not against potential malicious devices in the key- | ||||
| sharing group. | ||||
| Data authenticity may be provided using symmetric-key based or | ||||
| public-key based techniques. With public-key based techniques (via | ||||
| signatures), one corroborates evidence as to the unique originator of | ||||
| transmitted information, whereas with symmetric-key based techniques | ||||
| data authenticity is only provided relative to devices in a key- | ||||
| sharing group. Thus, public-key based authentication may be useful | ||||
| in scenarios that require a more fine-grained authentication than can | ||||
| be provided with symmetric-key based authentication techniques alone, | ||||
| such as with group communications (broadcast, multicast), or in | ||||
| scenarios that require non-repudiation. | ||||
| 14.2. Functional Description of Packet Protection | ||||
| 14.2.1. Transmission of Outgoing Packets | ||||
| This section describes the transmission of secured RPL control | ||||
| packets. Give an outgoing RPL control packet and required security | ||||
| protection, this section describes how RPL generates the secured | ||||
| packet to transmit. It describes the order of cryptographic | ||||
| operations to provide the required protection. | ||||
| A RPL node MUST set the security section in the RPL packet to | ||||
| describes the required protection level. | ||||
| The Counter field of the security header MUST be an increment of the | ||||
| last Counter field transmitted. | ||||
| If the RPL packet is not a response to a Consistency Check message, | ||||
| the node MAY set the Counter Compression field of the security | ||||
| option. If the packet is a response to a Consistency Check message, | ||||
| the node MUST clear the Counter Compression field. | ||||
| A node sets the Key Identifier Mode (KIM) of the packet based on its | ||||
| understanding of what keys destinations have. | ||||
| A node MUST replaced the original packet payload with that payload | ||||
| encrypted using the security protection, key, and nonce specified in | ||||
| the security section. | ||||
| 14.2.2. Reception of Incoming Packets | ||||
| This section describes the reception of a secured RPL packet. Given | ||||
| an incoming RPL packet, this section describes now RPL generates an | ||||
| unencrypted version of the packet and validates its integrity. | ||||
| The receiver uses the security control field of the security section | ||||
| to determine what processing to do. If the described level of | ||||
| security does not meet locally maintained security policies, a node | ||||
| MAY discard the packet without further processing. These policies | ||||
| can include security levels, keys used, or source identifiers. | ||||
| Using a nonce derived from the Counter field and other information | ||||
| (as described in Section Figure 21), the receiver checks the | ||||
| integrity of the packet by comparing the received MAC with the | ||||
| computed MAC. If this integrity check does not pass, a node MUST | ||||
| discard the packet. | ||||
| RPL uses the key information described in a RPL message to decrypt | ||||
| its contents as necessary. Once a message has passed its integrity | ||||
| checks and been successfully decrypted, the node can update its local | ||||
| security information, such as the source's expected counter value for | ||||
| counter compression. A node MUST NOT update security information on | ||||
| receipt of a message that fails security policy checks, integrity | ||||
| checks, or decryption. | ||||
| 14.2.3. Cryptographic Mode of Operation | ||||
| The cryptographic mode of operation used is based on the CCM mode of | ||||
| operation specified with [TBDREF] and the block-cipher AES-128 | ||||
| [TBDREF]. This mode of operation is widely supported by existing | ||||
| implementations and coincides with the CCM* mode of operation | ||||
| specified with [TBDREF]. | ||||
| 14.2.3.1. Nonce | ||||
| The so-called nonce is constructed as follows: | ||||
| 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 | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | | | ||||
| + Source Identifier + | ||||
| | | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | Counter | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| |Reserved | LVL | | ||||
| +-+-+-+-+-+-+-+-+ | ||||
| Figure 21: CCM* Nonce | ||||
| Source Identifier: 8 bytes. Source Identifier is set to the logical | ||||
| identifier of the originator of the protected packet. | ||||
| Counter: 4 bytes. Counter is set to the (uncompressed) value of the | ||||
| corresponding field in the Security option of the RPL control | ||||
| message. | ||||
| Security Level (LVL): 3 bits. Security Level is set to the value of | ||||
| the corresponding field in the Security option of the RPL | ||||
| control message. | ||||
| Unassigned bits of the nonce are reserved. They MUST be set to zero | ||||
| when constructing the nonce. | ||||
| All fields of the nonce shall be represented is most-significant- | ||||
| octet and most-significant-bit first order. | ||||
| 14.3. Protecting RPL ICMPv6 messages | ||||
| For a RPL ICMPv6 message, the entire packet is within the scope of | ||||
| RPL security. The message authentication code is calculated over the | ||||
| entire IPv6 packet. This calculation is done before any compression | ||||
| that lower layers may apply. The IPv6 and ICMPv6 headers are never | ||||
| encrypted. The body of the RPL ICMPv6 message MAY be encrypted, | ||||
| starting from the first byte after the security information and | ||||
| continuing to the end of the packet. | ||||
| 14.4. Security State Machine | ||||
| A DAG root starting a DODAG sets the RPL routing security policy for | ||||
| the entire DODAG. | ||||
| A member of a secure DODAG MUST conform to the policy set by the DAG | ||||
| root. When starting a secure DODAG, the DAG root will send secure | ||||
| DIO messages. A node attempting to join the DODAG will send a secure | ||||
| Authentication Request (AREQ) to the DAG root. Nodes that are not | ||||
| authenticated in a secure DODAG will be unable to generate properly | ||||
| constructed secured RPL packets. These nodes are in state | ||||
| "unauthenticated". A member of a secure DODAG MUST forward an AREQ | ||||
| packet to the DAG root, and MUST NOT forward any other type of packet | ||||
| from an unauthenticated node. | ||||
| The DAG root may choose to respond to the AREQ with an ARSP packet. | ||||
| This packet will provide the authenticating node with the | ||||
| cryptographic materials necessary to participate in RPL routing. | ||||
| Some authentication flows may involve the exchange of more than one | ||||
| AREQ or ARSP packets. | ||||
| The simplest authentication flow will involve the use of a single | ||||
| pre-installed network-wide authentication key. The installation of | ||||
| this key is out of scope of this document. The authenticating node | ||||
| will use the pre-installed key to calculate a MIC for the AREQ | ||||
| packet. The DODAG root will verify the authenticity of the | ||||
| authenticating node using the same key. The DODAG root, having | ||||
| previously chosen a single random instance-wide shared key, will send | ||||
| this key, encrypted and authenticated with the pre-installed key, in | ||||
| the ARSP packet. The authenticating node, decoding this packet with | ||||
| the pre-installed key, will verify the authenticity of the DODAG | ||||
| root. | ||||
| It is assumed that additional authentication and key exchange | ||||
| mechanisms will be included in future drafts of the document. | ||||
| Periodic key updates will use the secure KU packet code. The | ||||
| responsibility for initiating key update will reside with the DODAG | ||||
| root, and is out of scope of this document. | ||||
| 15. IANA Considerations | ||||
| 15.1. RPL Control Message | ||||
| The RPL Control Message is an ICMP information message type that is | The RPL Control Message is an ICMP information message type that is | |||
| to be used carry DODAG Information Objects, DODAG Information | to be used carry DODAG Information Objects, DODAG Information | |||
| Solicitations, and Destination Advertisement Objects in support of | Solicitations, and Destination Advertisement Objects in support of | |||
| RPL operation. | RPL operation. | |||
| IANA has defined a ICMPv6 Type Number Registry. The suggested type | IANA has defined an ICMPv6 Type Number Registry. The suggested type | |||
| value for the RPL Control Message is 155, to be confirmed by IANA. | value for the RPL Control Message is 155, to be confirmed by IANA. | |||
| 14.2. New Registry for RPL Control Codes | 15.2. New Registry for RPL Control Codes | |||
| IANA is requested to create a registry, RPL Control Codes, for the | IANA is requested to create a registry, RPL Control Codes, for the | |||
| Code field of the ICMPv6 RPL Control Message. | Code field of the ICMPv6 RPL Control Message. | |||
| New codes may be allocated only by an IETF Consensus action. Each | New codes may be allocated only by an IETF Consensus action. Each | |||
| code should be tracked with the following qualities: | code should be tracked with the following qualities: | |||
| o Code | o Code | |||
| o Description | o Description | |||
| o Defining RFC | o Defining RFC | |||
| Three codes are currently defined: | Three codes are currently defined: | |||
| +------+----------------------------------+---------------+ | +------+----------------------------------------------+-------------+ | |||
| | Code | Description | Reference | | | Code | Description | Reference | | |||
| +------+----------------------------------+---------------+ | +------+----------------------------------------------+-------------+ | |||
| | 0x01 | DODAG Information Solicitation | This document | | | 0x00 | DODAG Information Solicitation | This | | |||
| | 0x02 | DODAG Information Object | This document | | | | | document | | |||
| | 0x04 | Destination Advertisement Object | This document | | | 0x01 | DODAG Information Object | This | | |||
| +------+----------------------------------+---------------+ | | | | document | | |||
| | 0x02 | Destination Advertisement Object | This | | ||||
| | | | document | | ||||
| | 0x80 | Secure DODAG Information Solicitation | This | | ||||
| | | | document | | ||||
| | 0x81 | Secure DODAG Information Object | This | | ||||
| | | | document | | ||||
| | 0x82 | Secure Destination Advertisement Object | This | | ||||
| | | | document | | ||||
| | 0x83 | Secure Destination Advertisement Object | This | | ||||
| | | Acknowledgment | document | | ||||
| +------+----------------------------------------------+-------------+ | ||||
| RPL Control Codes | RPL Control Codes | |||
| 14.3. New Registry for the Control Field of the DIO Base | 15.3. New Registry for the Mode of Operation (MOP) DIO Control Field | |||
| IANA is requested to create a registry for the Control field of the | IANA is requested to create a registry for the Mode of Operation | |||
| DIO Base. | (MOP) DIO Control Field, which is contained in the DIO Base. | |||
| New fields may be allocated only by an IETF Consensus action. Each | New fields may be allocated only by an IETF Consensus action. Each | |||
| field should be tracked with the following qualities: | field should be tracked with the following qualities: | |||
| o Bit number (counting from bit 0 as the most significant bit) | o Mode of Operation | |||
| o Capability description | o Capability description | |||
| o Defining RFC | o Defining RFC | |||
| Four groups are currently defined: | Two values are currently defined: | |||
| +-------+-----------------------------------------+---------------+ | +-----+-------------------------------+---------------+ | |||
| | Bit | Description | Reference | | | MOP | Description | Reference | | |||
| +-------+-----------------------------------------+---------------+ | +-----+-------------------------------+---------------+ | |||
| | 0 | Grounded DODAG (G) | This document | | | 00 | Non-Storing mode of operation | This document | | |||
| | 1 | Destination Advertisement Supported (A) | This document | | | 01 | Storing mode of operation | This document | | |||
| | 2 | Destination Advertisement Trigger (T) | This document | | +-----+-------------------------------+---------------+ | |||
| | 3 | Destination Advertisements Stored (S) | This document | | ||||
| | 5,6,7 | DODAG Preference (Prf) | This document | | ||||
| +-------+-----------------------------------------+---------------+ | ||||
| DIO Base Flags | DIO Base Flags | |||
| 14.4. DODAG Information Object (DIO) Suboption | 15.4. RPL Control Message Option | |||
| IANA is requested to create a registry for the DIO Base Suboptions | IANA is requested to create a registry for the RPL Control Message | |||
| Options | ||||
| +-------+------------------------------+---------------+ | +-------+-------------------------+---------------+ | |||
| | Value | Meaning | Reference | | | Value | Meaning | Reference | | |||
| +-------+------------------------------+---------------+ | +-------+-------------------------+---------------+ | |||
| | 0 | Pad1 - DIO Padding | This document | | | 0 | Pad1 | This document | | |||
| | 1 | PadN - DIO suboption padding | This document | | | 1 | PadN | This document | | |||
| | 2 | DAG Metric Container | This Document | | | 2 | DAG Metric Container | This Document | | |||
| | 3 | Destination Prefix | This Document | | | 3 | Routing Information | This Document | | |||
| | 4 | DAG Timer Configuration | This Document | | | 4 | DAG Timer Configuration | This Document | | |||
| +-------+------------------------------+---------------+ | | 5 | RPL Target | This Document | | |||
| | 6 | Transit Information | This Document | | ||||
| | 7 | Solicited Information | This Document | | ||||
| | 8 | Prefix Information | This Document | | ||||
| +-------+-------------------------+---------------+ | ||||
| DODAG Information Option (DIO) Base Suboptions | RPL Control Message Options | |||
| 15. Acknowledgements | 16. Acknowledgements | |||
| The authors would like to acknowledge the review, feedback, and | The authors would like to acknowledge the review, feedback, and | |||
| comments from Emmanuel Baccelli, Dominique Barthel, Yusuf Bashir, | comments from Roger Alexander, Emmanuel Baccelli, Dominique Barthel, | |||
| Phoebus Chen, Mathilde Durvy, Manhar Goindi, Mukul Goyal, Anders | Yusuf Bashir, Phoebus Chen, Mathilde Durvy, Manhar Goindi, Mukul | |||
| Jagd, Quentin Lampin, Jerry Martocci, Alexandru Petrescu, and Don | Goyal, Anders Jagd, JeongGil (John) Ko, Quentin Lampin, Jerry | |||
| Martocci, Matteo Paris, Alexandru Petrescu, Joseph Reddy, and Don | ||||
| Sturek. | Sturek. | |||
| The authors would like to acknowledge the guidance and input provided | The authors would like to acknowledge the guidance and input provided | |||
| by the ROLL Chairs, David Culler and JP Vasseur. | by the ROLL Chairs, David Culler and JP Vasseur. | |||
| The authors would like to acknowledge prior contributions of Robert | The authors would like to acknowledge prior contributions of Robert | |||
| Assimiti, Mischa Dohler, Julien Abeille, Ryuji Wakikawa, Teco Boot, | Assimiti, Mischa Dohler, Julien Abeille, Ryuji Wakikawa, Teco Boot, | |||
| Patrick Wetterwald, Bryan Mclaughlin, Carlos J. Bernardos, Thomas | Patrick Wetterwald, Bryan Mclaughlin, Carlos J. Bernardos, Thomas | |||
| Watteyne, Zach Shelby, Caroline Bontoux, Marco Molteni, Billy Moon, | Watteyne, Zach Shelby, Caroline Bontoux, Marco Molteni, Billy Moon, | |||
| and Arsalan Tavakoli, which have provided useful design | and Arsalan Tavakoli, which have provided useful design | |||
| considerations to RPL. | considerations to RPL. | |||
| 16. Contributors | 17. Contributors | |||
| RPL is the result of the contribution of the following members of the | RPL is the result of the contribution of the following members of the | |||
| ROLL Design Team, including the editors, and additional contributors | RPL Author Team, including the editors, and additional contributors | |||
| as listed below: | as listed below: | |||
| JP Vasseur | JP Vasseur | |||
| Cisco Systems, Inc | Cisco Systems, Inc | |||
| 11, Rue Camille Desmoulins | 11, Rue Camille Desmoulins | |||
| Issy Les Moulineaux, 92782 | Issy Les Moulineaux, 92782 | |||
| France | France | |||
| Email: jpv@cisco.com | Email: jpv@cisco.com | |||
| skipping to change at page 71, line 18 ¶ | skipping to change at page 87, line 26 ¶ | |||
| Kris Pister | Kris Pister | |||
| Dust Networks | Dust Networks | |||
| 30695 Huntwood Ave. | 30695 Huntwood Ave. | |||
| Hayward, 94544 | Hayward, 94544 | |||
| USA | USA | |||
| Email: kpister@dustnetworks.com | Email: kpister@dustnetworks.com | |||
| Anders Brandt | Anders Brandt | |||
| Zensys, Inc. | Sigma Designs | |||
| Emdrupvej 26 | Emdrupvej 26A, 1. | |||
| Copenhagen, DK-2100 | Copenhagen, DK-2100 | |||
| Denmark | Denmark | |||
| Email: abr@zen-sys.com | Email: abr@sdesigns.dk | |||
| Stephen Dawson-Haggerty | Stephen Dawson-Haggerty | |||
| UC Berkeley | UC Berkeley | |||
| Soda Hall, UC Berkeley | Soda Hall, UC Berkeley | |||
| Berkeley, CA 94720 | Berkeley, CA 94720 | |||
| USA | USA | |||
| Email: stevedh@cs.berkeley.edu | Email: stevedh@cs.berkeley.edu | |||
| 17. References | 18. References | |||
| 18.1. Normative References | ||||
| 17.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, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
| [RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6 | 18.2. Informative References | |||
| (IPv6) Specification", RFC 2460, December 1998. | ||||
| 17.2. Informative References | [I-D.hui-6man-rpl-option] | |||
| Hui, J. and J. Vasseur, "RPL Option for Carrying RPL | ||||
| Information in Data-Plane Datagrams", | ||||
| draft-hui-6man-rpl-option-00 (work in progress), | ||||
| March 2010. | ||||
| [I-D.hui-6man-rpl-routing-header] | ||||
| Hui, J., Vasseur, J., and D. Culler, "A Source Routing | ||||
| Header for RPL", draft-hui-6man-rpl-routing-header-00 | ||||
| (work in progress), May 2010. | ||||
| [I-D.ietf-bfd-base] | [I-D.ietf-bfd-base] | |||
| Katz, D. and D. Ward, "Bidirectional Forwarding | Katz, D. and D. Ward, "Bidirectional Forwarding | |||
| Detection", draft-ietf-bfd-base-11 (work in progress), | Detection", draft-ietf-bfd-base-11 (work in progress), | |||
| January 2010. | January 2010. | |||
| [I-D.ietf-manet-nhdp] | [I-D.ietf-manet-nhdp] | |||
| Clausen, T., Dearlove, C., and J. Dean, "Mobile Ad Hoc | Clausen, T., Dearlove, C., and J. Dean, "Mobile Ad Hoc | |||
| Network (MANET) Neighborhood Discovery Protocol (NHDP)", | Network (MANET) Neighborhood Discovery Protocol (NHDP)", | |||
| draft-ietf-manet-nhdp-11 (work in progress), October 2009. | draft-ietf-manet-nhdp-12 (work in progress), March 2010. | |||
| [I-D.ietf-roll-building-routing-reqs] | [I-D.ietf-roll-building-routing-reqs] | |||
| Martocci, J., Riou, N., Mil, P., and W. Vermeylen, | Martocci, J., Riou, N., Mil, P., and W. Vermeylen, | |||
| "Building Automation Routing Requirements in Low Power and | "Building Automation Routing Requirements in Low Power and | |||
| Lossy Networks", draft-ietf-roll-building-routing-reqs-09 | Lossy Networks", draft-ietf-roll-building-routing-reqs-09 | |||
| (work in progress), January 2010. | (work in progress), January 2010. | |||
| [I-D.ietf-roll-home-routing-reqs] | ||||
| Brandt, A. and J. Buron, "Home Automation Routing | ||||
| Requirements in Low Power and Lossy Networks", | ||||
| draft-ietf-roll-home-routing-reqs-11 (work in progress), | ||||
| January 2010. | ||||
| [I-D.ietf-roll-of0] | [I-D.ietf-roll-of0] | |||
| Thubert, P., "RPL Objective Function 0", | Thubert, P., "RPL Objective Function 0", | |||
| draft-ietf-roll-of0-01 (work in progress), February 2010. | draft-ietf-roll-of0-01 (work in progress), February 2010. | |||
| [I-D.ietf-roll-routing-metrics] | [I-D.ietf-roll-routing-metrics] | |||
| Vasseur, J. and D. Networks, "Routing Metrics used for | Vasseur, J., Kim, M., Networks, D., and H. Chong, "Routing | |||
| Path Calculation in Low Power and Lossy Networks", | Metrics used for Path Calculation in Low Power and Lossy | |||
| draft-ietf-roll-routing-metrics-04 (work in progress), | Networks", draft-ietf-roll-routing-metrics-06 (work in | |||
| December 2009. | progress), April 2010. | |||
| [I-D.ietf-roll-terminology] | [I-D.ietf-roll-terminology] | |||
| Vasseur, J., "Terminology in Low power And Lossy | Vasseur, J., "Terminology in Low power And Lossy | |||
| Networks", draft-ietf-roll-terminology-02 (work in | Networks", draft-ietf-roll-terminology-03 (work in | |||
| progress), October 2009. | progress), March 2010. | |||
| [I-D.tsao-roll-security-framework] | ||||
| Tsao, T., Alexander, R., Dohler, M., Daza, V., and A. | ||||
| Lozano, "A Security Framework for Routing over Low Power | ||||
| and Lossy Networks", draft-tsao-roll-security-framework-01 | ||||
| (work in progress), September 2009. | ||||
| [Levis08] Levis, P., Brewer, E., Culler, D., Gay, D., Madden, S., | [I-D.ietf-roll-trickle] | |||
| Patel, N., Polastre, J., Shenker, S., Szewczyk, R., and A. | Levis, P., Clausen, T., Hui, J., and J. Ko, "The Trickle | |||
| Woo, "The Emergence of a Networking Primitive in Wireless | Algorithm", draft-ietf-roll-trickle-01 (work in progress), | |||
| Sensor Networks", Communications of the ACM, v.51 n.7, | April 2010. | |||
| July 2008, | ||||
| <http://portal.acm.org/citation.cfm?id=1364804>. | ||||
| [RFC1982] Elz, R. and R. Bush, "Serial Number Arithmetic", RFC 1982, | [RFC1982] Elz, R. and R. Bush, "Serial Number Arithmetic", RFC 1982, | |||
| August 1996. | August 1996. | |||
| [RFC3697] Rajahalme, J., Conta, A., Carpenter, B., and S. Deering, | [RFC2710] Deering, S., Fenner, W., and B. Haberman, "Multicast | |||
| "IPv6 Flow Label Specification", RFC 3697, March 2004. | Listener Discovery (MLD) for IPv6", RFC 2710, | |||
| October 1999. | ||||
| [RFC3810] Vida, R. and L. Costa, "Multicast Listener Discovery | [RFC3810] Vida, R. and L. Costa, "Multicast Listener Discovery | |||
| Version 2 (MLDv2) for IPv6", RFC 3810, June 2004. | Version 2 (MLDv2) for IPv6", RFC 3810, June 2004. | |||
| [RFC3819] Karn, P., Bormann, C., Fairhurst, G., Grossman, D., | [RFC3819] Karn, P., Bormann, C., Fairhurst, G., Grossman, D., | |||
| Ludwig, R., Mahdavi, J., Montenegro, G., Touch, J., and L. | Ludwig, R., Mahdavi, J., Montenegro, G., Touch, J., and L. | |||
| Wood, "Advice for Internet Subnetwork Designers", BCP 89, | Wood, "Advice for Internet Subnetwork Designers", BCP 89, | |||
| RFC 3819, July 2004. | RFC 3819, July 2004. | |||
| [RFC4101] Rescorla, E. and IAB, "Writing Protocol Models", RFC 4101, | [RFC4101] Rescorla, E. and IAB, "Writing Protocol Models", RFC 4101, | |||
| skipping to change at page 73, line 36 ¶ | skipping to change at page 89, line 39 ¶ | |||
| More-Specific Routes", RFC 4191, November 2005. | More-Specific Routes", RFC 4191, November 2005. | |||
| [RFC4443] Conta, A., Deering, S., and M. Gupta, "Internet Control | [RFC4443] Conta, A., Deering, S., and M. Gupta, "Internet Control | |||
| Message Protocol (ICMPv6) for the Internet Protocol | Message Protocol (ICMPv6) for the Internet Protocol | |||
| Version 6 (IPv6) Specification", RFC 4443, March 2006. | Version 6 (IPv6) Specification", RFC 4443, March 2006. | |||
| [RFC4861] Narten, T., Nordmark, E., Simpson, W., and H. Soliman, | [RFC4861] Narten, T., Nordmark, E., Simpson, W., and H. Soliman, | |||
| "Neighbor Discovery for IP version 6 (IPv6)", RFC 4861, | "Neighbor Discovery for IP version 6 (IPv6)", RFC 4861, | |||
| September 2007. | September 2007. | |||
| [RFC4862] Thomson, S., Narten, T., and T. Jinmei, "IPv6 Stateless | ||||
| Address Autoconfiguration", RFC 4862, September 2007. | ||||
| [RFC4915] Psenak, P., Mirtorabi, S., Roy, A., Nguyen, L., and P. | [RFC4915] Psenak, P., Mirtorabi, S., Roy, A., Nguyen, L., and P. | |||
| Pillay-Esnault, "Multi-Topology (MT) Routing in OSPF", | Pillay-Esnault, "Multi-Topology (MT) Routing in OSPF", | |||
| RFC 4915, June 2007. | RFC 4915, June 2007. | |||
| [RFC5120] Przygienda, T., Shen, N., and N. Sheth, "M-ISIS: Multi | [RFC5120] Przygienda, T., Shen, N., and N. Sheth, "M-ISIS: Multi | |||
| Topology (MT) Routing in Intermediate System to | Topology (MT) Routing in Intermediate System to | |||
| Intermediate Systems (IS-ISs)", RFC 5120, February 2008. | Intermediate Systems (IS-ISs)", RFC 5120, February 2008. | |||
| [RFC5548] Dohler, M., Watteyne, T., Winter, T., and D. Barthel, | [RFC5548] Dohler, M., Watteyne, T., Winter, T., and D. Barthel, | |||
| "Routing Requirements for Urban Low-Power and Lossy | "Routing Requirements for Urban Low-Power and Lossy | |||
| Networks", RFC 5548, May 2009. | Networks", RFC 5548, May 2009. | |||
| [RFC5673] Pister, K., Thubert, P., Dwars, S., and T. Phinney, | [RFC5673] Pister, K., Thubert, P., Dwars, S., and T. Phinney, | |||
| "Industrial Routing Requirements in Low-Power and Lossy | "Industrial Routing Requirements in Low-Power and Lossy | |||
| Networks", RFC 5673, October 2009. | Networks", RFC 5673, October 2009. | |||
| [RFC5826] Brandt, A., Buron, J., and G. Porcu, "Home Automation | ||||
| Routing Requirements in Low-Power and Lossy Networks", | ||||
| RFC 5826, April 2010. | ||||
| Appendix A. Requirements | Appendix A. Requirements | |||
| A.1. Protocol Properties Overview | A.1. Protocol Properties Overview | |||
| RPL demonstrates the following properties, consistent with the | RPL demonstrates the following properties, consistent with the | |||
| requirements specified by the application-specific requirements | requirements specified by the application-specific requirements | |||
| documents. | documents. | |||
| A.1.1. IPv6 Architecture | A.1.1. IPv6 Architecture | |||
| skipping to change at page 75, line 4 ¶ | skipping to change at page 91, line 13 ¶ | |||
| different Objective Functions (OF). Details of RPL operation in | different Objective Functions (OF). Details of RPL operation in | |||
| support of multiple instances are beyond the scope of the present | support of multiple instances are beyond the scope of the present | |||
| specification. | specification. | |||
| A.1.3. Constraint Based Routing | A.1.3. Constraint Based Routing | |||
| The RPL design supports constraint based routing, based on a set of | The RPL design supports constraint based routing, based on a set of | |||
| routing metrics and constraints. The routing metrics and constraints | routing metrics and constraints. The routing metrics and constraints | |||
| for links and nodes with capabilities supported by RPL are specified | for links and nodes with capabilities supported by RPL are specified | |||
| in a companion document to this specification, | in a companion document to this specification, | |||
| [I-D.ietf-roll-routing-metrics]. RPL signals the metrics, | [I-D.ietf-roll-routing-metrics]. RPL signals the metrics, | |||
| constraints, and related Objective Functions (OFs) in use in a | constraints, and related Objective Functions (OFs) in use in a | |||
| particular implementation by means of an Objective Code Point (OCP). | particular implementation by means of an Objective Code Point (OCP). | |||
| Both the routing metrics, constraints, and the OF help determine the | Both the routing metrics, constraints, and the OF help determine the | |||
| construction of the Directed Acyclic Graphs (DAG) using a distributed | construction of the Directed Acyclic Graphs (DAG) using a distributed | |||
| path computation algorithm. | path computation algorithm. | |||
| A.2. Deferred Requirements | A.2. Deferred Requirements | |||
| NOTE: RPL is still a work in progress. At this time there remain | NOTE: RPL is still a work in progress. At this time there remain | |||
| several unsatisfied application requirements, but these are to be | several unsatisfied application requirements, but these are to be | |||
| addressed as RPL is further specified. | addressed as RPL is further specified. | |||
| Appendix B. Examples | Appendix B. Outstanding Issues | |||
| B.1. DAO Operation When Only the Root Node Stores DAO Information | ||||
| Consider the example of Figure 13. In this example only the root | ||||
| node, (LBR*), will store DAO information. This is not known, nor is | ||||
| it required to be known, to all nodes a priori. Rather, each node is | ||||
| able to observe from the state of the 'S' flag that no ancestor, with | ||||
| the exception of the root node, stores DAO information. | ||||
| (LBR*) | ||||
| / \ | ||||
| / \ | ||||
| / \ | ||||
| (11) (12) | ||||
| | | | ||||
| | | | ||||
| | | | ||||
| (21) (22) | ||||
| \ | ||||
| \ | ||||
| \ | ||||
| (31) | ||||
| / \ | ||||
| / \ | ||||
| / \ | ||||
| (41) (42) | ||||
| : : | ||||
| Figure 13: Only Root Node Stores DAOs | ||||
| In this example: | ||||
| o The 'S' flag is cleared in DIO messages emitted by (LBR*), because | ||||
| (LBR*) is the DODAG root. | ||||
| o The 'S' flag is cleared in all DIO messages emitted by all other | ||||
| nodes, because no other node stores DAO information. | ||||
| o (LBR*) has learned from DAO messages how to reach node (31) with a | ||||
| source route via {(11) (21)}. | ||||
| o All source routes to nodes in the sub-DODAG of node (31), | ||||
| including nodes (41), (42), and others will include the prefix | ||||
| {(11) (21) (31)} | ||||
| o Node (31) maintains a DTSN, (31).DTSN, that it will advertise in | ||||
| DIO messages. | ||||
| Suppose now that there is a topology change within the same DODAG | ||||
| iteration, causing node (31) to evict node (21) as a DAO parent and | ||||
| add node (22) as a DAO parent: | ||||
| 1. Node (31) will schedule a DAO transmission because it has added a | ||||
| new node (22) to its DAO parent set. | ||||
| 2. Node (31) need not increment (31).DTSN at this event, because in | ||||
| this example no DAO parents have the 'S' flag set. Specifically | ||||
| this indicates to Node (31) that there are no intermediate | ||||
| storing nodes that may need to be explicitly updated with DAO | ||||
| information from it's sub-DODAG. Hence nodes (41), (42), and by | ||||
| extension the sub-DODAG of node (31) will not subsequently | ||||
| observe an incremented (31).DTSN and the sub-DODAG will not emit | ||||
| DAOs. | ||||
| 3. A new flow of DAOs for node (31) reaches the (LBR*), updating the | ||||
| source route information for node (31) to include the new path | ||||
| {(12) (22)}. | ||||
| 4. (LBR*) may implicitly update all source routes that must transit | ||||
| node (31), i.e. the sub-DODAG of node (31), to use the updated | ||||
| source route prefix {(12) (22)} instead of {(11) (21)}. | ||||
| Thus the use of the 'S' flag in the case where only the root node | ||||
| stores DAO information has allowed an optimization whereby only a DAO | ||||
| update for the node that changed its DAO parent set, (31), needs to | ||||
| be sent to the DODAG root. | ||||
| B.2. DAO Operation When All Nodes Fully Store DAO Information | ||||
| Consider the example of Figure 14. In this example all nodes will | ||||
| fully store DAO information. | ||||
| (LBR*) | ||||
| / \ | ||||
| / \ | ||||
| / \ | ||||
| (11*) (12*) | ||||
| | | | ||||
| | | | ||||
| | | | ||||
| (21*) (22*) | ||||
| \ | ||||
| \ | ||||
| \ | ||||
| (31*) | ||||
| / \ | ||||
| / \ | ||||
| / \ | ||||
| (41*) (42*) | ||||
| : : | ||||
| Figure 14: All Nodes Store DAOs | ||||
| In this example: | ||||
| o The 'S' flag is cleared in DIO messages emitted by (LBR*), because | ||||
| (LBR*) is the DODAG root. | ||||
| o The 'S' flag is set in DIO messages emitted by all non-root nodes | ||||
| because each non-root node stores DAO information. | ||||
| o Source routing state is effectively not provisioned in this | ||||
| example, because each node has been able to store hop-by-hop | ||||
| routing state for each destination, possibly aggregated, as | ||||
| learned from DAOs. For example, node (11*) will have learned and | ||||
| stored information from a DAO to the effect that node (41*) is | ||||
| routable through a next hop of node (21*). Node (12*) on the | ||||
| other hand does not necessarily have a route provisioned to node | ||||
| (41*). | ||||
| Suppose now that there is a topology change within the same DODAG | ||||
| iteration, causing node (31*) to evict node (21*) as a DAO parent and | ||||
| add node (22*) as a DAO parent: | ||||
| 1. Node (31*) will schedule a DAO transmission because it has added | ||||
| a new node (22*) to its DAO parent set. | ||||
| 2. Node (31) need not increment (31).DTSN, because it is a fully | ||||
| storing node and does not need to trigger DAO information from | ||||
| its sub-DODAG. | ||||
| 3. Node (31) gives a DAO Update to node (22*). Presuming that node | ||||
| (22*) has received the update, node (22*) will store the new | ||||
| entries for routes including the sub-DODAG of node (31*), | ||||
| including nodes (41*) and (42*). Node (22*) will schedule a DAO | ||||
| transmission for the new entries. | ||||
| 4. Similarly, node (22*) updates node (12*) and node (12*) updates | ||||
| (LBR*). Hop-by-hop routing state for the sub-DODAG of node (31*) | ||||
| is now provisioned at nodes (12*) and (22*). | ||||
| Thus the addition to the DAO Parent set at the fully storing node | ||||
| (31*) does not elicit additional DAO-related traffic from its sub- | ||||
| DODAG. The intermediate nodes along the 'new' downward path are | ||||
| updated by DAO messages along the new path. | ||||
| Suppose next that the DODAG root triggers a refresh of DAO | ||||
| information over the same DODAG Iteration. (Note that the DODAG root | ||||
| might also trigger a DAO refresh but allow other topology changes at | ||||
| the same time by incrementing the DODAG Sequence Number to cause a | ||||
| move to the next DODAG Iteration).: | ||||
| 1. (LBR*) will increment its DTSN and issue a DIO with the 'T' flag | ||||
| set. | ||||
| 2. Nodes (11*) and (12*) will increment their own DTSNs in response | ||||
| to observing in the DIO from LBR a new DTSN and the 'T' flag | ||||
| being set. They will reset their trickle timers to cause the | ||||
| issue of new DIOs with the 'T' flag set. These nodes will also | ||||
| schedule a DAO transmission in response to observing a new DTSN | ||||
| from their DAO Parent, (LBR*). (This DAO transmission may be | ||||
| scheduled with a sufficient delay computed based on rank to allow | ||||
| a chance for the sub-DODAGs of the nodes to report DAO messages | ||||
| prior to the nodes reporting their own DAO information to (LBR*). | ||||
| This is implementation specific and may allow a chance for DAO | ||||
| aggregation.). | ||||
| 3. Node (21*) receives a DIO from node (11*) and observes the new | ||||
| (11*).DTSN as well as the set 'T' flag. Node (21*) increments | ||||
| its own DTSN, resets the trickle timer, and schedules a DAO | ||||
| transmission. | ||||
| 4. Similarly, as each node observes the incremented DTSN with the | ||||
| 'T' flag set from each of its parents, each node will increment | ||||
| its own DTSN, reset the DIO trickle timer, and schedule a DAO | ||||
| transmission. | ||||
| Thus the entire DODAG iteration has been re-armed to send DAO | ||||
| messages based on the (LBR*)'s assertion of the 'T' flag. Note that | ||||
| normally a DTSN increment would cause no further action in a sub- | ||||
| DODAG beyond the first fully storing node that is encountered, but | ||||
| that in this case the 'T' flag effectively provides a means to 'punch | ||||
| through' all fully storing nodes. | ||||
| B.3. DAO Operation When Nodes Have Mixed Capabilities | ||||
| Consider the example of Figure 15. In this example some nodes are | ||||
| capable of storing DAO information and some are not. | ||||
| (LBR*) | ||||
| / \ | ||||
| / \ | ||||
| / \ | ||||
| (11) (12*) | ||||
| | | | ||||
| | | | ||||
| | | | ||||
| (21) (22) | ||||
| \ | ||||
| \ | ||||
| \ | ||||
| (31) | ||||
| / \ | ||||
| / \ | ||||
| / \ | ||||
| (41) (42*) | ||||
| : : | ||||
| Figure 15: Mixed Capability DAO Operation | ||||
| In this example: | ||||
| o The 'S' flag is cleared in DIO messages emitted by (LBR*), because | ||||
| (LBR*) is the DODAG root. | ||||
| o The 'S' flag is set in DIO messages emitted by (12*), because it | ||||
| is a storing node. | ||||
| o The 'S' flag will be set in DIO messages emitted by nodes that | ||||
| contain node (12*) (or more generally any non-root storing node) | ||||
| as a DAO parent/ancestor. This indicates that somewhere along the | ||||
| DAO path there is a non-root storing node that may need to have | ||||
| its state updated (by a DAO refresh) in certain conditions. | ||||
| Suppose that there is a topology change within the same DODAG | ||||
| iteration, causing node (31) to add node (22) as a DAO parent: | ||||
| 1. Node (31) will schedule a DAO transmission because it has added a | ||||
| new node (22) to its DAO parent set. Node (31) will increment | ||||
| (31).DTSN because node (22) has set the 'S' flag in its DIO | ||||
| messages. Node (31) will reset its DIO trickle timer. | ||||
| 2. Node (31)'s trickle timer will then expire and a DIO is issued | ||||
| and received by node's (41) and (42*). | ||||
| 3. Node (41) is a non-storing node. It will increment (41).DTSN in | ||||
| response to observing the increment in (31).DTSN, and reset its | ||||
| trickle timer. This results finally in the reliable (thanks to | ||||
| the DTSN) triggering of a DAO update from node (41)'s sub-DODAG. | ||||
| 4. As node (41) receives DAO updates from its sub-DODAG it updates | ||||
| the DAOs with source routing information as necessary and passes | ||||
| them on to node (31), along with its own (node (41)) DAO update. | ||||
| 5. Meanwhile, node (42*) is a fully storing node. It observes the | ||||
| increment to (31).DTSN and schedules a DAO update. Node (42*) | ||||
| does not need to increment (42*).DTSN, since it is a fully | ||||
| storing node it does not need to solicit DAO updates from its | ||||
| sub-DODAG in this case. At the scheduled time Node (42*) | ||||
| reissues its DAO information to node (31). | ||||
| 6. Node (31) receives the DAO messages from its sub-DODAG, adds | ||||
| source routing information as necessary, and issues DAO updates | ||||
| to node (22). | ||||
| 7. Node (22) similarly receives DAO messages from node (31), updates | ||||
| source routing information as necessary, and issues DAO updates | ||||
| to node (12*). | ||||
| 8. The intermediate storing node (12*) has now received from DAO | ||||
| messages the information necessary to provision routing state for | ||||
| node (31) and its sub-DODAG. As downwards traffic is routed | ||||
| through node (12*) it is able to consult source routing | ||||
| information that was learned from the DAO messages as needed to | ||||
| specify routes down the DAG across the non-storing nodes (22), | ||||
| (31), ... | ||||
| Appendix C. Outstanding Issues | ||||
| This section enumerates some outstanding issues that are to be | This section enumerates some outstanding issues that are to be | |||
| addressed in future revisions of the RPL specification. | addressed in future revisions of the RPL specification. | |||
| C.1. Additional Support for P2P Routing | B.1. Additional Support for P2P Routing | |||
| In some situations the baseline mechanism to support arbitrary P2P | In some situations the baseline mechanism to support arbitrary P2P | |||
| traffic, by flowing upwards along the DODAG until a common ancestor | traffic, by flowing upwards along the DODAG until a common ancestor | |||
| is reached and then flowing down, may not be suitable for all | is reached and then flowing down, may not be suitable for all | |||
| application scenarios. A related scenario may occur when the down | application scenarios. A related scenario may occur when the down | |||
| paths setup along the DODAG by the destination advertisement | paths setup along the DODAG by the destination advertisement | |||
| mechanism are not the most desirable downward paths for the specific | mechanism are not the most desirable downward paths for the specific | |||
| application scenario (in part because the DODAG links may not be | application scenario (in part because the DODAG links may not be | |||
| symmetric). It may be desired to support within RPL the discovery | symmetric). It may be desired to support within RPL the discovery | |||
| and installation of more direct routes 'across' the DAG. Such | and installation of more direct routes 'across' the DAG. Such | |||
| mechanisms need to be investigated. | mechanisms need to be investigated. | |||
| C.2. Destination Advertisement / DAO Fan-out | B.2. Address / Header Compression | |||
| When DAO messages are relayed to more than one DODAG parent, in some | ||||
| cases a situation may be created where a large number of DAO messages | ||||
| conveying information about the same destination flow upwards along | ||||
| the DAG. It is desirable to bound/limit the multiplication/fan-out | ||||
| of DAO messages in this manner. Some aspects of the Destination | ||||
| Advertisement mechanism remain under investigation, such as behavior | ||||
| in the face of links that may not be symmetric. | ||||
| In general, the utility of providing redundancy along downwards | ||||
| routes by sending DAO messages to more than one parent is under | ||||
| investigation. | ||||
| C.3. Source Routing | ||||
| In support of nodes that maintain minimal routing state, and to make | ||||
| use of the collection of piecewise source routes from the destination | ||||
| advertisement mechanism, there needs to be some investigation of a | ||||
| mechanism to specify, attach, and follow source routes for packets | ||||
| traversing the LLN. | ||||
| C.4. Address / Header Compression | ||||
| In order to minimize overhead within the LLN it is desirable to | In order to minimize overhead within the LLN it is desirable to | |||
| perform some sort of address and/or header compression, perhaps via | perform some sort of address and/or header compression, perhaps via | |||
| labels, addresses aggregation, or some other means. This is still | labels, addresses aggregation, or some other means. This is still | |||
| under investigation. | under investigation. | |||
| C.5. Managing Multiple Instances | B.3. Managing Multiple Instances | |||
| A network may run multiple instances of RPL concurrently. Such a | A network may run multiple instances of RPL concurrently. Such a | |||
| network will require methods for assigning and otherwise managing | network will require methods for assigning and otherwise managing | |||
| RPLInstanceIDs. This will likely be addressed in a separate | RPLInstanceIDs. This will likely be addressed in a separate | |||
| document. | document. | |||
| Authors' Addresses | Authors' Addresses | |||
| Tim Winter (editor) | Tim Winter (editor) | |||
| skipping to change at page 82, line 29 ¶ | skipping to change at page 92, line 29 ¶ | |||
| Cisco Systems | Cisco Systems | |||
| Village d'Entreprises Green Side | Village d'Entreprises Green Side | |||
| 400, Avenue de Roumanille | 400, Avenue de Roumanille | |||
| Batiment T3 | Batiment T3 | |||
| Biot - Sophia Antipolis 06410 | Biot - Sophia Antipolis 06410 | |||
| FRANCE | FRANCE | |||
| Phone: +33 497 23 26 34 | Phone: +33 497 23 26 34 | |||
| Email: pthubert@cisco.com | Email: pthubert@cisco.com | |||
| ROLL Design Team | RPL Author Team | |||
| IETF ROLL WG | IETF ROLL WG | |||
| Email: rpl-authors@external.cisco.com | Email: rpl-authors@external.cisco.com | |||
| End of changes. 437 change blocks. | ||||
| 1722 lines changed or deleted | 2192 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||