| < draft-ietf-roll-rpl | rfc6550.txt | |||
|---|---|---|---|---|
| ROLL T. Winter, Ed. | Internet Engineering Task Force (IETF) T. Winter, Ed. | |||
| Internet-Draft | Request for Comments: 6550 | |||
| Intended status: Standards Track P. Thubert, Ed. | Category: Standards Track P. Thubert, Ed. | |||
| Expires: September 14, 2011 Cisco Systems | ISSN: 2070-1721 Cisco Systems | |||
| A. Brandt | A. Brandt | |||
| Sigma Designs | Sigma Designs | |||
| T. Clausen | ||||
| LIX, Ecole Polytechnique | ||||
| J. Hui | J. Hui | |||
| Arch Rock Corporation | Arch Rock Corporation | |||
| R. Kelsey | R. Kelsey | |||
| Ember Corporation | Ember Corporation | |||
| P. Levis | P. Levis | |||
| Stanford University | Stanford University | |||
| K. Pister | K. Pister | |||
| Dust Networks | Dust Networks | |||
| R. Struik | R. Struik | |||
| Struik Security Consultancy | ||||
| JP. Vasseur | JP. Vasseur | |||
| Cisco Systems | Cisco Systems | |||
| March 13, 2011 | R. Alexander | |||
| Cooper Power Systems | ||||
| March 2012 | ||||
| RPL: IPv6 Routing Protocol for Low power and Lossy Networks | RPL: IPv6 Routing Protocol for Low-Power and Lossy Networks | |||
| draft-ietf-roll-rpl-19 | ||||
| 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 processing power, memory, and | typically operate with constraints on processing power, memory, and | |||
| energy (battery power). Their interconnects are characterized by | energy (battery power). Their interconnects are characterized by | |||
| high loss rates, low data rates, and instability. LLNs are comprised | high loss rates, low data rates, and instability. LLNs are comprised | |||
| of anything from a few dozen and up to thousands of routers. | of anything from a few dozen to thousands of routers. Supported | |||
| Supported traffic flows include point-to-point (between devices | traffic flows include point-to-point (between devices inside the | |||
| inside the LLN), point-to-multipoint (from a central control point to | LLN), point-to-multipoint (from a central control point to a subset | |||
| a subset of devices inside the LLN), and multipoint-to-point (from | of devices inside the LLN), and multipoint-to-point (from devices | |||
| devices inside the LLN towards a central control point). This | inside the LLN towards a central control point). This document | |||
| document specifies the IPv6 Routing Protocol for LLNs (RPL), which | specifies the IPv6 Routing Protocol for Low-Power and Lossy Networks | |||
| provides a mechanism whereby multipoint-to-point traffic from devices | (RPL), which provides a mechanism whereby multipoint-to-point traffic | |||
| inside the LLN towards a central control point, as well as point-to- | from devices inside the LLN towards a central control point as well | |||
| multipoint traffic from the central control point to the devices | as point-to-multipoint traffic from the central control point to the | |||
| inside the LLN, is supported. Support for point-to-point traffic is | devices inside the LLN are supported. Support for point-to-point | |||
| also available. | traffic is also available. | |||
| Status of this Memo | ||||
| This Internet-Draft is submitted in full conformance with the | Status of This Memo | |||
| provisions of BCP 78 and BCP 79. | ||||
| Internet-Drafts are working documents of the Internet Engineering | This is an Internet Standards Track document. | |||
| Task Force (IETF). Note that other groups may also distribute | ||||
| working documents as Internet-Drafts. The list of current Internet- | ||||
| Drafts is at http://datatracker.ietf.org/drafts/current/. | ||||
| Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
| and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
| time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
| material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
| Internet Standards is available in Section 2 of RFC 5741. | ||||
| This Internet-Draft will expire on September 14, 2011. | Information about the current status of this document, any errata, | |||
| and how to provide feedback on it may be obtained at | ||||
| http://www.rfc-editor.org/info/rfc6550. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2011 IETF Trust and the persons identified as the | Copyright (c) 2012 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 | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 8 | 1. Introduction ....................................................8 | |||
| 1.1. Design Principles . . . . . . . . . . . . . . . . . . . 8 | 1.1. Design Principles ..........................................8 | |||
| 1.2. Expectations of Link Layer Type . . . . . . . . . . . . 10 | 1.2. Expectations of Link-Layer Type ...........................10 | |||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 11 | 2. Terminology ....................................................10 | |||
| 3. Protocol Overview . . . . . . . . . . . . . . . . . . . . . . 14 | 3. Protocol Overview ..............................................13 | |||
| 3.1. Topology . . . . . . . . . . . . . . . . . . . . . . . . 14 | 3.1. Topologies ................................................13 | |||
| 3.1.1. Constructing Topologies . . . . . . . . . . . . . . . 14 | 3.1.1. Constructing Topologies ............................13 | |||
| 3.1.2. RPL Identifiers . . . . . . . . . . . . . . . . . . . 14 | 3.1.2. RPL Identifiers ....................................14 | |||
| 3.1.3. Instances, DODAGs, and DODAG Versions . . . . . . . . 15 | 3.1.3. Instances, DODAGs, and DODAG Versions ..............14 | |||
| 3.2. Upward Routes and DODAG Construction . . . . . . . . . . 17 | 3.2. Upward Routes and DODAG Construction ......................16 | |||
| 3.2.1. Objective Function (OF) . . . . . . . . . . . . . . . 17 | 3.2.1. Objective Function (OF) ............................17 | |||
| 3.2.2. DODAG Repair . . . . . . . . . . . . . . . . . . . . 17 | 3.2.2. DODAG Repair .......................................17 | |||
| 3.2.3. Security . . . . . . . . . . . . . . . . . . . . . . 18 | 3.2.3. Security ...........................................17 | |||
| 3.2.4. Grounded and Floating DODAGs . . . . . . . . . . . . 18 | 3.2.4. Grounded and Floating DODAGs .......................18 | |||
| 3.2.5. Local DODAGs . . . . . . . . . . . . . . . . . . . . 18 | 3.2.5. Local DODAGs .......................................18 | |||
| 3.2.6. Administrative Preference . . . . . . . . . . . . . . 19 | 3.2.6. Administrative Preference ..........................18 | |||
| 3.2.7. Datapath Validation and Loop Detection . . . . . . . 19 | 3.2.7. Data-Path Validation and Loop Detection ............18 | |||
| 3.2.8. Distributed Algorithm Operation . . . . . . . . . . . 19 | 3.2.8. Distributed Algorithm Operation ....................19 | |||
| 3.3. Downward Routes and Destination Advertisement . . . . . 20 | 3.3. Downward Routes and Destination Advertisement .............19 | |||
| 3.4. Local DODAGs Route Discovery . . . . . . . . . . . . . . 20 | 3.4. Local DODAGs Route Discovery ..............................20 | |||
| 3.5. Rank Properties . . . . . . . . . . . . . . . . . . . . 21 | 3.5. Rank Properties ...........................................20 | |||
| 3.5.1. Rank Comparison (DAGRank()) . . . . . . . . . . . . . 22 | 3.5.1. Rank Comparison (DAGRank()) ........................21 | |||
| 3.5.2. Rank Relationships . . . . . . . . . . . . . . . . . 23 | 3.5.2. Rank Relationships .................................22 | |||
| 3.6. Routing Metrics and Constraints Used By RPL . . . . . . 23 | 3.6. Routing Metrics and Constraints Used by RPL ...............23 | |||
| 3.7. Loop Avoidance . . . . . . . . . . . . . . . . . . . . . 24 | 3.7. Loop Avoidance ............................................24 | |||
| 3.7.1. Greediness and Instability . . . . . . . . . . . . . 25 | 3.7.1. Greediness and Instability .........................24 | |||
| 3.7.2. DODAG Loops . . . . . . . . . . . . . . . . . . . . . 27 | 3.7.2. DODAG Loops ........................................26 | |||
| 3.7.3. DAO Loops . . . . . . . . . . . . . . . . . . . . . . 27 | 3.7.3. DAO Loops ..........................................27 | |||
| 4. Traffic Flows Supported by RPL . . . . . . . . . . . . . . . 28 | 4. Traffic Flows Supported by RPL .................................27 | |||
| 4.1. Multipoint-to-Point Traffic . . . . . . . . . . . . . . 28 | 4.1. Multipoint-to-Point Traffic ...............................27 | |||
| 4.2. Point-to-Multipoint Traffic . . . . . . . . . . . . . . 28 | 4.2. Point-to-Multipoint Traffic ...............................27 | |||
| 4.3. Point-to-Point Traffic . . . . . . . . . . . . . . . . . 28 | 4.3. Point-to-Point Traffic ....................................27 | |||
| 5. RPL Instance . . . . . . . . . . . . . . . . . . . . . . . . 29 | 5. RPL Instance ...................................................28 | |||
| 5.1. RPL Instance ID . . . . . . . . . . . . . . . . . . . . 29 | 5.1. RPL Instance ID ...........................................29 | |||
| 6. ICMPv6 RPL Control Message . . . . . . . . . . . . . . . . . 31 | 6. ICMPv6 RPL Control Message .....................................30 | |||
| 6.1. RPL Security Fields . . . . . . . . . . . . . . . . . . 33 | 6.1. RPL Security Fields .......................................32 | |||
| 6.2. DODAG Information Solicitation (DIS) . . . . . . . . . . 38 | 6.2. DODAG Information Solicitation (DIS) ......................38 | |||
| 6.2.1. Format of the DIS Base Object . . . . . . . . . . . . 38 | 6.2.1. Format of the DIS Base Object ......................38 | |||
| 6.2.2. Secure DIS . . . . . . . . . . . . . . . . . . . . . 38 | 6.2.2. Secure DIS .........................................38 | |||
| 6.2.3. DIS Options . . . . . . . . . . . . . . . . . . . . . 38 | 6.2.3. DIS Options ........................................38 | |||
| 6.3. DODAG Information Object (DIO) . . . . . . . . . . . . . 38 | 6.3. DODAG Information Object (DIO) ............................38 | |||
| 6.3.1. Format of the DIO Base Object . . . . . . . . . . . . 39 | 6.3.1. Format of the DIO Base Object ......................39 | |||
| 6.3.2. Secure DIO . . . . . . . . . . . . . . . . . . . . . 41 | 6.3.2. Secure DIO .........................................41 | |||
| 6.3.3. DIO Options . . . . . . . . . . . . . . . . . . . . . 41 | 6.3.3. DIO Options ........................................41 | |||
| 6.4. Destination Advertisement Object (DAO) . . . . . . . . . 41 | 6.4. Destination Advertisement Object (DAO) ....................41 | |||
| 6.4.1. Format of the DAO Base Object . . . . . . . . . . . . 41 | 6.4.1. Format of the DAO Base Object ......................42 | |||
| 6.4.2. Secure DAO . . . . . . . . . . . . . . . . . . . . . 43 | 6.4.2. Secure DAO .........................................43 | |||
| 6.4.3. DAO Options . . . . . . . . . . . . . . . . . . . . . 43 | 6.4.3. DAO Options ........................................43 | |||
| 6.5. Destination Advertisement Object Acknowledgement | 6.5. Destination Advertisement Object Acknowledgement | |||
| (DAO-ACK) . . . . . . . . . . . . . . . . . . . . . . . 43 | (DAO-ACK) .................................................43 | |||
| 6.5.1. Format of the DAO-ACK Base Object . . . . . . . . . . 43 | 6.5.1. Format of the DAO-ACK Base Object ..................44 | |||
| 6.5.2. Secure DAO-ACK . . . . . . . . . . . . . . . . . . . 45 | 6.5.2. Secure DAO-ACK .....................................45 | |||
| 6.5.3. DAO-ACK Options . . . . . . . . . . . . . . . . . . . 45 | 6.5.3. DAO-ACK Options ....................................45 | |||
| 6.6. Consistency Check (CC) . . . . . . . . . . . . . . . . . 45 | 6.6. Consistency Check (CC) ....................................45 | |||
| 6.6.1. Format of the CC Base Object . . . . . . . . . . . . 45 | 6.6.1. Format of the CC Base Object .......................46 | |||
| 6.6.2. CC Options . . . . . . . . . . . . . . . . . . . . . 47 | 6.6.2. CC Options .........................................47 | |||
| 6.7. RPL Control Message Options . . . . . . . . . . . . . . 47 | 6.7. RPL Control Message Options ...............................47 | |||
| 6.7.1. RPL Control Message Option Generic Format . . . . . . 47 | 6.7.1. RPL Control Message Option Generic Format ..........47 | |||
| 6.7.2. Pad1 . . . . . . . . . . . . . . . . . . . . . . . . 48 | 6.7.2. Pad1 ...............................................48 | |||
| 6.7.3. PadN . . . . . . . . . . . . . . . . . . . . . . . . 48 | 6.7.3. PadN ...............................................48 | |||
| 6.7.4. Metric Container . . . . . . . . . . . . . . . . . . 49 | 6.7.4. DAG Metric Container ...............................49 | |||
| 6.7.5. Route Information . . . . . . . . . . . . . . . . . . 50 | 6.7.5. Route Information ..................................50 | |||
| 6.7.6. DODAG Configuration . . . . . . . . . . . . . . . . . 51 | 6.7.6. DODAG Configuration ................................52 | |||
| 6.7.7. RPL Target . . . . . . . . . . . . . . . . . . . . . 53 | 6.7.7. RPL Target .........................................54 | |||
| 6.7.8. Transit Information . . . . . . . . . . . . . . . . . 55 | 6.7.8. Transit Information ................................55 | |||
| 6.7.9. Solicited Information . . . . . . . . . . . . . . . . 58 | 6.7.9. Solicited Information ..............................58 | |||
| 6.7.10. Prefix Information . . . . . . . . . . . . . . . . . 59 | 6.7.10. Prefix Information ................................59 | |||
| 6.7.11. RPL Target Descriptor . . . . . . . . . . . . . . . . 62 | 6.7.11. RPL Target Descriptor .............................63 | |||
| 7. Sequence Counters . . . . . . . . . . . . . . . . . . . . . . 64 | 7. Sequence Counters ..............................................63 | |||
| 7.1. Sequence Counter Overview . . . . . . . . . . . . . . . 64 | 7.1. Sequence Counter Overview .................................63 | |||
| 7.2. Sequence Counter Operation . . . . . . . . . . . . . . . 65 | 7.2. Sequence Counter Operation ................................64 | |||
| 8. Upward Routes . . . . . . . . . . . . . . . . . . . . . . . . 67 | 8. Upward Routes ..................................................66 | |||
| 8.1. DIO Base Rules . . . . . . . . . . . . . . . . . . . . . 67 | 8.1. DIO Base Rules ............................................67 | |||
| 8.2. Upward Route Discovery and Maintenance . . . . . . . . . 68 | 8.2. Upward Route Discovery and Maintenance ....................67 | |||
| 8.2.1. Neighbors and Parents within a DODAG Version . . . . 68 | 8.2.1. Neighbors and Parents within a DODAG Version .......67 | |||
| 8.2.2. Neighbors and Parents across DODAG Versions . . . . . 69 | 8.2.2. Neighbors and Parents across DODAG Versions ........68 | |||
| 8.2.3. DIO Message Communication . . . . . . . . . . . . . . 74 | 8.2.3. DIO Message Communication ..........................73 | |||
| 8.3. DIO Transmission . . . . . . . . . . . . . . . . . . . . 74 | 8.3. DIO Transmission ..........................................74 | |||
| 8.3.1. Trickle Parameters . . . . . . . . . . . . . . . . . 75 | 8.3.1. Trickle Parameters .................................75 | |||
| 8.4. DODAG Selection . . . . . . . . . . . . . . . . . . . . 75 | 8.4. DODAG Selection ...........................................75 | |||
| 8.5. Operation as a Leaf Node . . . . . . . . . . . . . . . . 76 | 8.5. Operation as a Leaf Node ..................................75 | |||
| 8.6. Administrative Rank . . . . . . . . . . . . . . . . . . 77 | 8.6. Administrative Rank .......................................76 | |||
| 9. Downward Routes . . . . . . . . . . . . . . . . . . . . . . . 78 | 9. Downward Routes ................................................77 | |||
| 9.1. Destination Advertisement Parents . . . . . . . . . . . 78 | 9.1. Destination Advertisement Parents .........................77 | |||
| 9.2. Downward Route Discovery and Maintenance . . . . . . . . 79 | 9.2. Downward Route Discovery and Maintenance ..................78 | |||
| 9.2.1. Maintenance of Path Sequence . . . . . . . . . . . . 80 | 9.2.1. Maintenance of Path Sequence .......................79 | |||
| 9.2.2. Generation of DAO Messages . . . . . . . . . . . . . 80 | 9.2.2. Generation of DAO Messages .........................79 | |||
| 9.3. DAO Base Rules . . . . . . . . . . . . . . . . . . . . . 81 | 9.3. DAO Base Rules ............................................80 | |||
| 9.4. Structure of DAO Messages . . . . . . . . . . . . . . . 81 | 9.4. Structure of DAO Messages .................................80 | |||
| 9.5. DAO Transmission Scheduling . . . . . . . . . . . . . . 84 | 9.5. DAO Transmission Scheduling ...............................83 | |||
| 9.6. Triggering DAO Messages . . . . . . . . . . . . . . . . 84 | 9.6. Triggering DAO Messages ...................................83 | |||
| 9.7. Non-storing Mode . . . . . . . . . . . . . . . . . . . . 85 | 9.7. Non-Storing Mode ..........................................84 | |||
| 9.8. Storing Mode . . . . . . . . . . . . . . . . . . . . . . 86 | 9.8. Storing Mode ..............................................85 | |||
| 9.9. Path Control . . . . . . . . . . . . . . . . . . . . . . 87 | 9.9. Path Control ..............................................86 | |||
| 9.9.1. Path Control Example . . . . . . . . . . . . . . . . 88 | 9.9.1. Path Control Example ...............................88 | |||
| 9.10. Multicast Destination Advertisement Messages . . . . . . 90 | 9.10. Multicast Destination Advertisement Messages .............89 | |||
| 10. Security Mechanisms . . . . . . . . . . . . . . . . . . . . . 91 | 10. Security Mechanisms ...........................................90 | |||
| 10.1. Security Overview . . . . . . . . . . . . . . . . . . . 91 | 10.1. Security Overview ........................................90 | |||
| 10.2. Joining a Secure Network . . . . . . . . . . . . . . . . 92 | 10.2. Joining a Secure Network .................................91 | |||
| 10.3. Installing Keys . . . . . . . . . . . . . . . . . . . . 93 | 10.3. Installing Keys ..........................................92 | |||
| 10.4. Consistency Checks . . . . . . . . . . . . . . . . . . . 93 | 10.4. Consistency Checks .......................................93 | |||
| 10.5. Counters . . . . . . . . . . . . . . . . . . . . . . . . 94 | 10.5. Counters .................................................93 | |||
| 10.6. Transmission of Outgoing Packets . . . . . . . . . . . . 95 | 10.6. Transmission of Outgoing Packets .........................94 | |||
| 10.7. Reception of Incoming Packets . . . . . . . . . . . . . 96 | 10.7. Reception of Incoming Packets ............................95 | |||
| 10.7.1. Timestamp Key Checks . . . . . . . . . . . . . . . . 97 | 10.7.1. Timestamp Key Checks ..............................97 | |||
| 10.8. Coverage of Integrity and Confidentiality . . . . . . . 98 | 10.8. Coverage of Integrity and Confidentiality ................97 | |||
| 10.9. Cryptographic Mode of Operation . . . . . . . . . . . . 98 | 10.9. Cryptographic Mode of Operation ..........................98 | |||
| 10.9.1. CCM Nonce . . . . . . . . . . . . . . . . . . . . . . 98 | 10.9.1. CCM Nonce .........................................98 | |||
| 10.9.2. Signatures . . . . . . . . . . . . . . . . . . . . . 99 | 10.9.2. Signatures ........................................99 | |||
| 11. Packet Forwarding and Loop Avoidance/Detection . . . . . . . 101 | 11. Packet Forwarding and Loop Avoidance/Detection ................99 | |||
| 11.1. Suggestions for Packet Forwarding . . . . . . . . . . . 101 | 11.1. Suggestions for Packet Forwarding ........................99 | |||
| 11.2. Loop Avoidance and Detection . . . . . . . . . . . . . . 102 | 11.2. Loop Avoidance and Detection ............................101 | |||
| 11.2.1. Source Node Operation . . . . . . . . . . . . . . . . 103 | 11.2.1. Source Node Operation ............................102 | |||
| 11.2.2. Router Operation . . . . . . . . . . . . . . . . . . 103 | 11.2.2. Router Operation .................................102 | |||
| 12. Multicast Operation . . . . . . . . . . . . . . . . . . . . . 106 | 12. Multicast Operation ..........................................104 | |||
| 13. Maintenance of Routing Adjacency . . . . . . . . . . . . . . 108 | 13. Maintenance of Routing Adjacency .............................105 | |||
| 14. Guidelines for Objective Functions . . . . . . . . . . . . . 109 | 14. Guidelines for Objective Functions ...........................106 | |||
| 14.1. Objective Function Behavior . . . . . . . . . . . . . . 109 | 14.1. Objective Function Behavior .............................106 | |||
| 15. Suggestions for Interoperation with Neighbor Discovery . . . 111 | 15. Suggestions for Interoperation with Neighbor Discovery .......108 | |||
| 16. Summary of Requirements for Interoperable Implementations . . 112 | 16. Summary of Requirements for Interoperable Implementations ....109 | |||
| 16.1. Common Requirements . . . . . . . . . . . . . . . . . . 112 | 16.1. Common Requirements .....................................109 | |||
| 16.2. Operation as a RPL Leaf Node (only) . . . . . . . . . . 112 | 16.2. Operation as a RPL Leaf Node (Only) .....................110 | |||
| 16.3. Operation as a RPL Router . . . . . . . . . . . . . . . 113 | 16.3. Operation as a RPL Router ...............................110 | |||
| 16.3.1. Support for Upward Routes only . . . . . . . . . . . 113 | 16.3.1. Support for Upward Routes (Only) .................110 | |||
| 16.3.2. Support for Upward Routes and Downward Routes in | 16.3.2. Support for Upward Routes and Downward | |||
| Non-Storing mode . . . . . . . . . . . . . . . . . . 113 | Routes in Non-Storing ............................110 | |||
| 16.3.3. Support for Upward Routes and Downward Routes in | 16.3.3. Support for Upward Routes and Downward | |||
| Storing mode . . . . . . . . . . . . . . . . . . . . 114 | Routes in Storing Mode ...........................111 | |||
| 16.4. Items for Future Specification . . . . . . . . . . . . . 114 | 16.4. Items for Future Specification ..........................111 | |||
| 17. RPL Constants and Variables . . . . . . . . . . . . . . . . . 115 | 17. RPL Constants and Variables ..................................112 | |||
| 18. Manageability Considerations . . . . . . . . . . . . . . . . 117 | 18. Manageability Considerations .................................113 | |||
| 18.1. Introduction . . . . . . . . . . . . . . . . . . . . . . 117 | 18.1. Introduction ............................................114 | |||
| 18.2. Configuration Management . . . . . . . . . . . . . . . . 118 | 18.2. Configuration Management ................................115 | |||
| 18.2.1. Initialization Mode . . . . . . . . . . . . . . . . . 118 | 18.2.1. Initialization Mode ..............................115 | |||
| 18.2.2. DIO and DAO Base Message and Options Configuration . 119 | 18.2.2. DIO and DAO Base Message and Options | |||
| 18.2.3. Protocol Parameters to be configured on every | Configuration ....................................115 | |||
| router in the LLN . . . . . . . . . . . . . . . . . . 119 | 18.2.3. Protocol Parameters to Be Configured on | |||
| 18.2.4. Protocol Parameters to be configured on every | Every Router in the LLN ..........................116 | |||
| non-DODAG-root router in the LLN . . . . . . . . . . 120 | 18.2.4. Protocol Parameters to Be Configured on | |||
| 18.2.5. Parameters to be configured on the DODAG root . . . . 120 | Every Non-DODAG-Root .............................117 | |||
| 18.2.6. Configuration of RPL Parameters related to | 18.2.5. Parameters to Be Configured on the DODAG Root ....117 | |||
| DAO-based mechanisms . . . . . . . . . . . . . . . . 121 | 18.2.6. Configuration of RPL Parameters Related | |||
| to DAO-Based Mechanisms ..........................118 | ||||
| 18.2.7. Configuration of RPL Parameters related to | 18.2.7. Configuration of RPL Parameters Related | |||
| Security mechanisms . . . . . . . . . . . . . . . . . 122 | to Security Mechanisms ...........................119 | |||
| 18.2.8. Default Values . . . . . . . . . . . . . . . . . . . 123 | 18.2.8. Default Values ...................................119 | |||
| 18.3. Monitoring of RPL Operation . . . . . . . . . . . . . . 123 | 18.3. Monitoring of RPL Operation .............................120 | |||
| 18.3.1. Monitoring a DODAG parameters . . . . . . . . . . . . 123 | 18.3.1. Monitoring a DODAG Parameters ....................120 | |||
| 18.3.2. Monitoring a DODAG inconsistencies and loop | 18.3.2. Monitoring a DODAG Inconsistencies and | |||
| detection . . . . . . . . . . . . . . . . . . . . . . 124 | Loop Detection ...................................121 | |||
| 18.4. Monitoring of the RPL data structures . . . . . . . . . 125 | 18.4. Monitoring of the RPL Data Structures ...................121 | |||
| 18.4.1. Candidate Neighbor Data Structure . . . . . . . . . . 125 | 18.4.1. Candidate Neighbor Data Structure ................121 | |||
| 18.4.2. Destination Oriented Directed Acyclic Graph (DAG) | 18.4.2. Destination-Oriented Directed Acyclic | |||
| Table . . . . . . . . . . . . . . . . . . . . . . . . 125 | Graph (DODAG) Table ..............................122 | |||
| 18.4.3. Routing Table and DAO Routing Entries . . . . . . . . 126 | 18.4.3. Routing Table and DAO Routing Entries ............122 | |||
| 18.5. Fault Management . . . . . . . . . . . . . . . . . . . . 127 | 18.5. Fault Management ........................................123 | |||
| 18.6. Policy . . . . . . . . . . . . . . . . . . . . . . . . . 127 | 18.6. Policy ..................................................124 | |||
| 18.7. Fault Isolation . . . . . . . . . . . . . . . . . . . . 128 | 18.7. Fault Isolation .........................................125 | |||
| 18.8. Impact on Other Protocols . . . . . . . . . . . . . . . 129 | 18.8. Impact on Other Protocols ...............................125 | |||
| 18.9. Performance Management . . . . . . . . . . . . . . . . . 129 | 18.9. Performance Management ..................................126 | |||
| 18.10. Diagnostics . . . . . . . . . . . . . . . . . . . . . . 129 | 18.10. Diagnostics ............................................126 | |||
| 19. Security Considerations . . . . . . . . . . . . . . . . . . . 130 | 19. Security Considerations ......................................126 | |||
| 19.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 130 | 19.1. Overview ................................................126 | |||
| 20. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 132 | 20. IANA Considerations ..........................................128 | |||
| 20.1. RPL Control Message . . . . . . . . . . . . . . . . . . 132 | 20.1. RPL Control Message .....................................128 | |||
| 20.2. New Registry for RPL Control Codes . . . . . . . . . . . 132 | 20.2. New Registry for RPL Control Codes ......................128 | |||
| 20.3. New Registry for the Mode of Operation (MOP) . . . . . . 133 | 20.3. New Registry for the Mode of Operation (MOP) ............129 | |||
| 20.4. RPL Control Message Option . . . . . . . . . . . . . . . 134 | 20.4. RPL Control Message Option ..............................130 | |||
| 20.5. Objective Code Point (OCP) Registry . . . . . . . . . . 134 | 20.5. Objective Code Point (OCP) Registry .....................131 | |||
| 20.6. New Registry for the Security Section Algorithm . . . . 135 | 20.6. New Registry for the Security Section Algorithm .........131 | |||
| 20.7. New Registry for the Security Section Flags . . . . . . 135 | 20.7. New Registry for the Security Section Flags .............132 | |||
| 20.8. New Registry for Per-KIM Security Levels . . . . . . . . 136 | 20.8. New Registry for Per-KIM Security Levels ................132 | |||
| 20.9. New Registry for the DIS (DODAG Informational | 20.9. New Registry for DODAG Informational | |||
| Solicitation) Flags . . . . . . . . . . . . . . . . . . 137 | Solicitation (DIS) Flags ................................133 | |||
| 20.10. New Registry for the DODAG Information Object (DIO) | 20.10. New Registry for the DODAG Information Object | |||
| Flags . . . . . . . . . . . . . . . . . . . . . . . . . 138 | (DIO) Flags ............................................134 | |||
| 20.11. New Registry for the Destination Advertisement Object | 20.11. New Registry for the Destination Advertisement | |||
| (DAO) Flags . . . . . . . . . . . . . . . . . . . . . . 138 | Object (DAO) Flags .....................................134 | |||
| 20.12. New Registry for the Destination Advertisement Object | 20.12. New Registry for the Destination Advertisement | |||
| (DAO) Acknowledgement Flags . . . . . . . . . . . . . . 139 | Object (DAO) Flags .....................................135 | |||
| 20.13. New Registry for the Consistency Check (CC) Flags . . . 139 | 20.13. New Registry for the Consistency Check (CC) Flags ......135 | |||
| 20.14. New Registry for the DODAG Configuration Option Flags . 140 | 20.14. New Registry for the DODAG Configuration Option Flags ..136 | |||
| 20.15. New Registry for the RPL Target Option Flags . . . . . . 140 | 20.15. New Registry for the RPL Target Option Flags ...........136 | |||
| 20.16. New Registry for the Transit Information Option Flags . 141 | 20.16. New Registry for the Transit Information Option Flags ..137 | |||
| 20.17. New Registry for the Solicited Information Option | 20.17. New Registry for the Solicited Information | |||
| Flags . . . . . . . . . . . . . . . . . . . . . . . . . 141 | Option Flags ...........................................137 | |||
| 20.18. ICMPv6: Error in Source Routing Header . . . . . . . . . 142 | 20.18. ICMPv6: Error in Source Routing Header .................138 | |||
| 20.19. Link-Local Scope multicast address . . . . . . . . . . . 142 | 20.19. Link-Local Scope Multicast Address .....................138 | |||
| 21. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 143 | 21. Acknowledgements .............................................138 | |||
| 22. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 144 | 22. Contributors .................................................139 | |||
| 23. References . . . . . . . . . . . . . . . . . . . . . . . . . 145 | 23. References ...................................................139 | |||
| 23.1. Normative References . . . . . . . . . . . . . . . . . . 145 | 23.1. Normative References ....................................139 | |||
| 23.2. Informative References . . . . . . . . . . . . . . . . . 146 | 23.2. Informative References ..................................140 | |||
| Appendix A. Example Operation . . . . . . . . . . . . . . . . . 149 | Appendix A. Example Operation ....................................143 | |||
| A.1. Example Operation in Storing Mode With Node-owned | A.1. Example Operation in Storing Mode with Node-Owned | |||
| Prefixes . . . . . . . . . . . . . . . . . . . . . . . . 149 | Prefixes .................................................143 | |||
| A.1.1. DIO messages and PIO . . . . . . . . . . . . . . . . 150 | A.1.1. DIO Messages and PIO ..............................144 | |||
| A.1.2. DAO messages . . . . . . . . . . . . . . . . . . . . 151 | A.1.2. DAO Messages ......................................145 | |||
| A.1.3. Routing Information Base . . . . . . . . . . . . . . 151 | A.1.3. Routing Information Base ..........................145 | |||
| A.2. Example Operation in Storing Mode With Subnet-wide | A.2. Example Operation in Storing Mode with Subnet-Wide | |||
| Prefix . . . . . . . . . . . . . . . . . . . . . . . . . 152 | Prefix ...................................................146 | |||
| A.2.1. DIO messages and PIO . . . . . . . . . . . . . . . . 153 | A.2.1. DIO Messages and PIO ..............................147 | |||
| A.2.2. DAO messages . . . . . . . . . . . . . . . . . . . . 154 | A.2.2. DAO Messages ......................................148 | |||
| A.2.3. Routing Information Base . . . . . . . . . . . . . . 154 | A.2.3. Routing Information Base ..........................148 | |||
| A.3. Example Operation in Non-Storing Mode With Node-owned | A.3. Example Operation in Non-Storing Mode with Node-Owned | |||
| Prefixes . . . . . . . . . . . . . . . . . . . . . . . . 155 | Prefixes .................................................149 | |||
| A.3.1. DIO messages and PIO . . . . . . . . . . . . . . . . 156 | A.3.1. DIO Messages and PIO ..............................150 | |||
| A.3.2. DAO messages . . . . . . . . . . . . . . . . . . . . 156 | A.3.2. DAO Messages ......................................150 | |||
| A.3.3. Routing Information Base . . . . . . . . . . . . . . 157 | A.3.3. Routing Information Base ..........................151 | |||
| A.4. Example Operation in Non-Storing Mode With | A.4. Example Operation in Non-Storing Mode with | |||
| Subnet-wide Prefix . . . . . . . . . . . . . . . . . . . 157 | Subnet-Wide Prefix .......................................151 | |||
| A.4.1. DIO messages and PIO . . . . . . . . . . . . . . . . 158 | A.4.1. DIO Messages and PIO ..............................152 | |||
| A.4.2. DAO messages . . . . . . . . . . . . . . . . . . . . 159 | A.4.2. DAO Messages ......................................153 | |||
| A.4.3. Routing Information Base . . . . . . . . . . . . . . 159 | A.4.3. Routing Information Base ..........................153 | |||
| A.5. Example with External Prefixes . . . . . . . . . . . . . 160 | A.5. Example with External Prefixes ...........................154 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 162 | ||||
| 1. Introduction | 1. Introduction | |||
| Low power and Lossy Networks (LLNs) consist of largely of constrained | Low-power and Lossy Networks (LLNs) consist 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 or energy scavenging). These routers | when they are battery operated or energy scavenging). These routers | |||
| are interconnected by lossy links, typically supporting only low data | are interconnected by lossy links, typically supporting only low data | |||
| rates, that are usually unstable with relatively low packet delivery | rates, that are usually unstable with relatively low packet delivery | |||
| rates. Another characteristic of such networks is that the traffic | rates. Another characteristic of such networks is that the traffic | |||
| patterns are not simply point-to-point, but in many cases point-to- | patterns are not simply point-to-point, but in many cases point-to- | |||
| multipoint or multipoint-to-point. Furthermore such networks may | multipoint or multipoint-to-point. Furthermore, such networks may | |||
| potentially comprise up to thousands of nodes. These characteristics | potentially comprise up to thousands of nodes. These characteristics | |||
| offer unique challenges to a routing solution: the IETF ROLL Working | offer unique challenges to a routing solution: the IETF ROLL working | |||
| Group has defined application-specific routing requirements for a Low | group has defined application-specific routing requirements for a | |||
| power and Lossy Network (LLN) routing protocol, specified in | Low-power and Lossy Network (LLN) routing protocol, specified in | |||
| [RFC5867], [RFC5826], [RFC5673], and [RFC5548]. | [RFC5867], [RFC5826], [RFC5673], and [RFC5548]. | |||
| This document specifies the IPv6 Routing Protocol for Low power and | This document specifies the IPv6 Routing Protocol for LLNs (RPL). | |||
| lossy networks (RPL). Note that although RPL was specified according | Note that although RPL was specified according to the requirements | |||
| to the requirements set forth in the aforementioned requirement | set forth in the aforementioned requirement documents, its use is in | |||
| documents, its use is in no way limited to these applications. | 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 [RFC5867], [RFC5826], [RFC5673], and [RFC5548]. | out in [RFC5867], [RFC5826], [RFC5673], and [RFC5548]. | |||
| 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. | |||
| In order to be useful in a wide range of LLN application domains, RPL | In order to be useful in a wide range of LLN application domains, RPL | |||
| separates packet processing and forwarding from the routing | separates packet processing and forwarding from the routing | |||
| optimization objective. Examples of such objectives include | optimization objective. Examples of such objectives include | |||
| minimizing energy, minimizing latency, or satisfying constraints. | minimizing energy, minimizing latency, or satisfying constraints. | |||
| This document describes the mode of operation of RPL. Other | This document describes the mode of operation of RPL. Other | |||
| companion documents specify routing objective functions. A RPL | companion documents specify routing Objective Functions. A RPL | |||
| implementation, in support of a particular LLN application, will | implementation, in support of a particular LLN application, will | |||
| include the necessary objective function(s) as required by the | include the necessary Objective Function(s) as required by the | |||
| application. | application. | |||
| RPL operations require bidirectional links. In some LLN scenarios | RPL operations require bidirectional links. In some LLN scenarios, | |||
| those links may exhibit asymmetric properties. It is required that | those links may exhibit asymmetric properties. It is required that | |||
| the reachability of a router is verified before the router can be | the reachability of a router be verified before the router can be | |||
| used as a parent. RPL expects an external mechanism to be triggered | used as a parent. RPL expects an external mechanism to be triggered | |||
| during the parent selection phase in order to verify link properties | during the parent selection phase in order to verify link properties | |||
| and neighbor reachability. Neighbor Unreachability Detection (NUD) | and neighbor reachability. Neighbor Unreachability Detection (NUD) | |||
| is such a mechanism, but alternates are possible, including | is such a mechanism, but alternates are possible, including | |||
| Bidirectional Forwarding Detection [RFC5881] and hints from lower | Bidirectional Forwarding Detection (BFD) [RFC5881] and hints from | |||
| layers via L2 triggers like [RFC5184]. In a general fashion, a | lower layers via Layer 2 (L2) triggers like [RFC5184]. In a general | |||
| detection mechanism that is reactive to traffic is favored in order | fashion, a detection mechanism that is reactive to traffic is favored | |||
| to minimize the cost of monitoring links that are not being used. | in order to minimize the cost of monitoring links that are not being | |||
| used. | ||||
| RPL also expects an external mechanism to access and transport some | RPL also expects an external mechanism to access and transport some | |||
| control information, referred to as the "RPL Packet Information", in | control information, referred to as the "RPL Packet Information", in | |||
| data packets. The RPL Packet Information is defined in Section 11.2 | data packets. The RPL Packet Information is defined in Section 11.2 | |||
| and enables the association of a data packet with a RPL instance and | and enables the association of a data packet with a RPL Instance and | |||
| the validation of RPL routing states. The IPv6 Hop-by-Hop RPL Option | the validation of RPL routing states. The RPL option [RFC6553] is an | |||
| [I-D.ietf-6man-rpl-option] is an example of such mechanism. The | example of such mechanism. The mechanism is required for all packets | |||
| mechanism is required for all packets except when strict source | except when strict source routing is used (that is for packets going | |||
| routing is used (that is for packets going downward in non-storing | Downward in Non-Storing mode as detailed further in Section 9), which | |||
| mode as detailed further in Section 9), which by nature prevents | by nature prevents endless loops and alleviates the need for the RPL | |||
| endless loops and alleviates the need for the RPL Packet Information. | Packet Information. Future companion specifications may propose | |||
| Future companion specifications may propose alternate ways to carry | alternate ways to carry the RPL Packet Information in the IPv6 | |||
| the RPL Packet Information in the IPv6 packets and may extend the RPL | packets and may extend the RPL Packet Information to support | |||
| Packet Information to support additional features. | additional features. | |||
| RPL provides a mechanism to disseminate information over the | RPL provides a mechanism to disseminate information over the | |||
| dynamically-formed network topology. The dissemination enables | dynamically formed network topology. This dissemination enables | |||
| minimal configuration in the nodes, allowing nodes to operate mostly | minimal configuration in the nodes, allowing nodes to operate mostly | |||
| autonomously. This mechanism uses trickle [I-D.ietf-roll-trickle] to | autonomously. This mechanism uses Trickle [RFC6206] to optimize the | |||
| optimize the dissemination as described in Section 8.3. | dissemination as described in Section 8.3. | |||
| In some applications, RPL assembles topologies of routers that own | In some applications, RPL assembles topologies of routers that own | |||
| independent prefixes. Those prefixes may or may not be aggregatable | independent prefixes. Those prefixes may or may not be aggregatable | |||
| depending on the origin of the routers. A prefix that is owned by a | depending on the origin of the routers. A prefix that is owned by a | |||
| router is advertised as on-link. | router is advertised as on-link. | |||
| RPL also introduces the capability to bind a subnet together with a | RPL also introduces the capability to bind a subnet together with a | |||
| common prefix and to route within that subnet. A source can inject | common prefix and to route within that subnet. A source can inject | |||
| information about the subnet to be disseminated by RPL, and that | information about the subnet to be disseminated by RPL, and that | |||
| source is authoritative for that subnet. Because many LLN links have | source is authoritative for that subnet. Because many LLN links have | |||
| non-transitive properties, a common prefix that RPL disseminates over | non-transitive properties, a common prefix that RPL disseminates over | |||
| the subnet must not be advertised as on-link. | the subnet must not be advertised as on-link. | |||
| RPL may in particular disseminate IPv6 Neighbor Discovery (ND) | In particular, RPL may disseminate IPv6 Neighbor Discovery (ND) | |||
| information such as the [RFC4861] Prefix Information Option (PIO) and | information such as the [RFC4861] Prefix Information Option (PIO) and | |||
| the [RFC4191] Route Information Option (RIO). ND information that is | the [RFC4191] Route Information Option (RIO). ND information that is | |||
| disseminated by RPL conserves all its original semantics for router | disseminated by RPL conserves all its original semantics for router | |||
| to host, with limited extensions for router to router, though it is | to host, with limited extensions for router to router, though it is | |||
| not to be confused with routing advertisements and it is never to be | not to be confused with routing advertisements and it is never to be | |||
| directly redistributed in another routing protocol. A RPL node often | directly redistributed in another routing protocol. A RPL node often | |||
| combines host and router behaviors. As a host, it will process the | combines host and router behaviors. As a host, it will process the | |||
| options as specified in [RFC4191], [RFC4861], [RFC4862] and | options as specified in [RFC4191], [RFC4861], [RFC4862], and | |||
| [RFC3775]. As a router, the RPL node may advertise the information | [RFC6275]. As a router, the RPL node may advertise the information | |||
| from the options as required for the specific link, for instance in a | from the options as required for the specific link, for instance, in | |||
| ND RA message, though the exact operation is out of scope. | an ND Router Advertisement (RA) message, though the exact operation | |||
| is out of scope. | ||||
| 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 | |||
| In compliance with the layered architecture of IP, RPL does not rely | In compliance with the layered architecture of IP, RPL does not rely | |||
| on any particular features of a specific link layer technology. RPL | on any particular features of a specific link-layer technology. RPL | |||
| is designed to be able to operate over a variety of different link | is designed to be able to operate over a variety of different link | |||
| layers, including ones that are constrained, potentially lossy, or | layers, including ones that are constrained, potentially lossy, or | |||
| typically utilized in conjunction with highly constrained host or | typically utilized in conjunction with highly constrained host or | |||
| router devices, such as but not limited to, low power wireless or PLC | router devices, such as but not limited to, low-power wireless or PLC | |||
| (Power Line Communication) technologies. | (Power Line Communication) technologies. | |||
| Implementers may find [RFC3819] a useful reference when designing a | Implementers may find [RFC3819] a useful reference when designing a | |||
| link layer interface between RPL and a particular link layer | link-layer interface between RPL and a particular link-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 [ROLL-TERMS], and | |||
| [I-D.ietf-roll-terminology], and introduces the following | introduces the following terminology: | |||
| terminology: | ||||
| DAG: Directed Acyclic Graph. A directed graph having the property | DAG: Directed Acyclic Graph. A directed graph having the property | |||
| that all edges are oriented in such a way that no cycles exist. | that all edges are oriented in such a way that no cycles exist. | |||
| All edges are contained in paths oriented toward and | All edges are contained in paths oriented toward and | |||
| terminating at one or more root nodes. | terminating at one or more root nodes. | |||
| DAG root: A DAG root is a node within the DAG that has no outgoing | DAG root: A DAG root is a node within the DAG that has no outgoing | |||
| edge. Because the graph is acyclic, by definition all DAGs | edge. Because the graph is acyclic, by definition, all DAGs | |||
| must have at least one DAG root and all paths terminate at a | must have at least one DAG root and all paths terminate at a | |||
| DAG root. | DAG root. | |||
| Destination Oriented DAG (DODAG): A DAG rooted at a single | Destination-Oriented DAG (DODAG): A DAG rooted at a single | |||
| destination, i.e. at a single DAG root (the DODAG root) with no | destination, i.e., at a single DAG root (the DODAG root) with | |||
| outgoing edges. | no outgoing edges. | |||
| DODAG root: A DODAG root is the DAG root of a DODAG. The DODAG root | DODAG root: A DODAG root is the DAG root of a DODAG. The DODAG root | |||
| may act as a border router for the DODAG, and in particular it | may act as a border router for the DODAG; in particular, it may | |||
| may aggregate routes in the DODAG, and may redistribute DODAG | aggregate routes in the DODAG and may redistribute DODAG routes | |||
| routes into other routing protocols. | into other routing protocols. | |||
| Virtual DODAG root: A Virtual DODAG root is the result of two or | Virtual DODAG root: A Virtual DODAG root is the result of two or more | |||
| more RPL routers, for instance 6LoWPAN Border Routers (6LBRs), | RPL routers, for instance, 6LoWPAN Border Routers (6LBRs), | |||
| coordinating to synchronize DODAG state and act in concert as | coordinating to synchronize DODAG state and act in concert as | |||
| if they are a single DODAG root (with multiple interfaces), | if they are a single DODAG root (with multiple interfaces), | |||
| with respect to the LLN. The coordination most likely occurs | with respect to the LLN. The coordination most likely occurs | |||
| between powered devices over a reliable transit link, and the | between powered devices over a reliable transit link, and the | |||
| details of that scheme are out of scope for this specification | details of that scheme are out of scope for this specification | |||
| (to be defined in future companion specifications). | (to be defined in future companion specifications). | |||
| 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 DODAG edges. This follows the common terminology | following DODAG edges. This follows the common terminology | |||
| used in graphs and depth-first-search, where vertices further | used in graphs and depth-first-search, where vertices further | |||
| from the root are "deeper," or "down," and vertices closer to | from the root are "deeper" or "down" and vertices closer to the | |||
| the root are "shallower," or "up". | 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, in the reverse direction of DODAG edges. This follows | nodes, in the reverse direction of DODAG edges. This follows | |||
| the common terminology used in graphs and depth-first-search, | the common terminology used in graphs and depth-first-search, | |||
| where vertices further from the root are "deeper," or "down," | where vertices further from the root are "deeper" or "down" and | |||
| and vertices closer to the root are "shallower," or "up". | vertices closer to the root are "shallower" or "up". | |||
| Rank: A node's Rank defines the node's individual position relative | Rank: A node's Rank defines the node's individual position relative | |||
| to other nodes with respect to a DODAG root. Rank strictly | to other nodes with respect to a DODAG root. Rank strictly | |||
| increases in the Down direction and strictly decreases in the | increases in the Down direction and strictly decreases in the | |||
| Up direction. The exact way Rank is computed depends on the | Up direction. The exact way Rank is computed depends on the | |||
| DAG's Objective Function (OF). The Rank may analogously track | DAG's Objective Function (OF). The Rank may analogously track | |||
| a simple topological distance, may be calculated as a function | a simple topological distance, may be calculated as a function | |||
| of link metrics, and may consider other properties such as | of link metrics, and may consider other properties such as | |||
| constraints. | constraints. | |||
| Objective Function (OF): Defines how routing metrics, optimization | Objective Function (OF): An OF defines how routing metrics, | |||
| objectives, and related functions are used to compute Rank. | optimization objectives, and related functions are used to | |||
| Furthermore, the OF dictates how parents in the DODAG are | compute Rank. Furthermore, the OF dictates how parents in the | |||
| selected and thus the DODAG formation. | DODAG are selected and, thus, the DODAG formation. | |||
| Objective Code Point (OCP): An identifier that indicates which | Objective Code Point (OCP): An OCP is an identifier that indicates | |||
| Objective Function the DODAG uses. | which Objective Function the DODAG uses. | |||
| RPLInstanceID: A unique identifier within a network. DODAGs with | RPLInstanceID: A RPLInstanceID is a unique identifier within a | |||
| the same RPLInstanceID share the same Objective Function. | network. DODAGs with the same RPLInstanceID share the same | |||
| Objective Function. | ||||
| RPL Instance: A set of one or more DODAGs that share a | RPL Instance: A RPL Instance is a set of one or more DODAGs that | |||
| RPLInstanceID. A RPL node can belong to at most one DODAG in a | share a RPLInstanceID. At most, a RPL node can belong to one | |||
| RPL Instance. Each RPL Instance operates independently of | DODAG in a RPL Instance. Each RPL Instance operates | |||
| other RPL Instances. This document describes operation within | independently of other RPL Instances. This document describes | |||
| a single RPL Instance. | operation within a single RPL Instance. | |||
| DODAGID: The identifier of a DODAG root. The DODAGID is unique | DODAGID: A DODAGID is the identifier of a DODAG root. The DODAGID is | |||
| within the scope of a RPL Instance in the LLN. The tuple | unique within the scope of a RPL Instance in the LLN. The | |||
| (RPLInstanceID, DODAGID) uniquely identifies a DODAG. | tuple (RPLInstanceID, DODAGID) uniquely identifies a DODAG. | |||
| DODAG Version: A specific iteration ("Version") of a DODAG with a | DODAG Version: A DODAG Version is a specific iteration ("Version") of | |||
| given DODAGID. | a DODAG with a given DODAGID. | |||
| DODAGVersionNumber: A sequential counter that is incremented by the | DODAGVersionNumber: A DODAGVersionNumber is a sequential counter that | |||
| root to form a new Version of a DODAG. A DODAG Version is | is incremented by the root to form a new Version of a DODAG. A | |||
| identified uniquely by the (RPLInstanceID, DODAGID, | DODAG Version is identified uniquely by the (RPLInstanceID, | |||
| DODAGVersionNumber) tuple. | DODAGID, DODAGVersionNumber) tuple. | |||
| Goal: The Goal is an application specific goal that is defined | Goal: The Goal is an application-specific goal that is defined | |||
| outside the scope of RPL. Any node that roots a DODAG will | outside the scope of RPL. Any node that roots a DODAG will | |||
| need to know about this Goal to decide if the Goal can be | need to know about this Goal to decide whether or not the Goal | |||
| satisfied or not. A typical Goal is to construct the DODAG | can be satisfied. A typical Goal is to construct the DODAG | |||
| according to a specific objective function and to keep | according to a specific Objective Function and to keep | |||
| connectivity to a set of hosts (e.g. to use an objective | connectivity to a set of hosts (e.g., to use an Objective | |||
| function that minimizes a metric and to be connected to a | Function that minimizes a metric and is connected to a specific | |||
| specific database host to store the collected data). | database host to store the collected data). | |||
| Grounded: A DODAG is grounded when the DODAG root can satisfy the | Grounded: A DODAG is grounded when the DODAG root can satisfy the | |||
| Goal. | Goal. | |||
| Floating: A DODAG is floating if it is not Grounded. A floating | Floating: A DODAG is floating if it is not grounded. A floating | |||
| DODAG is not expected to have the properties required to | DODAG is not expected to have the properties required to | |||
| satisfy the goal. It may, however, provide connectivity to | satisfy the goal. It may, however, provide connectivity to | |||
| other nodes within the DODAG. | other nodes within the DODAG. | |||
| 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. A DODAG parent's Rank is lower than the node's. (See | root. A DODAG parent's Rank is lower than the node's. (See | |||
| Section 3.5.1). | Section 3.5.1). | |||
| Sub-DODAG The sub-DODAG of a node is the set of other nodes whose | Sub-DODAG: The sub-DODAG of a node is the set of other nodes whose | |||
| paths to the DODAG root pass through that node. Nodes in the | paths to the DODAG root pass through that node. Nodes in the | |||
| sub-DODAG of a node have a greater Rank than that node. (See | sub-DODAG of a node have a greater Rank than that node. (See | |||
| Section 3.5.1). | Section 3.5.1). | |||
| Local DODAG: Local DODAGs contain one and only one root node, and | Local DODAG: Local DODAGs contain one and only one root node, and | |||
| allows that single root node to allocate and manage a RPL | they allow that single root node to allocate and manage a RPL | |||
| Instance, identified by a local RPLInstanceID, without | Instance, identified by a local RPLInstanceID, without | |||
| coordination with other nodes. This is typically done in order | coordination with other nodes. Typically, this is done in | |||
| to optimize routes to a destination within the LLN. (See | order to optimize routes to a destination within the LLN. (See | |||
| Section 5). | Section 5). | |||
| Global DODAG: A Global DODAG uses a global RPLInstanceID that may be | Global DODAG: A Global DODAG uses a global RPLInstanceID that may be | |||
| coordinated among several other nodes. (See Section 5). | coordinated among several other nodes. (See Section 5). | |||
| DIO: DODAG Information Object (See Section 6.3) | DIO: DODAG Information Object (see Section 6.3) | |||
| DAO: Destination Advertisement Object (See Section 6.4) | DAO: Destination Advertisement Object (see Section 6.4) | |||
| DIS: DODAG Information Solicitation (See Section 6.2) | DIS: DODAG Information Solicitation (see Section 6.2) | |||
| CC: Consistency Check (See Section 6.6) | CC: Consistency Check (see Section 6.6) | |||
| 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 | |||
| The aim of this section is to describe RPL in the spirit of | The aim of this section is to describe RPL in the spirit of | |||
| [RFC4101]. Protocol details can be found in further sections. | [RFC4101]. Protocol details can be found in further sections. | |||
| 3.1. Topology | 3.1. Topologies | |||
| This section describes the basic RPL topologies that may be formed, | This section describes the basic RPL topologies that may be formed, | |||
| and the rules by which these are constructed, i.e. the rules | and the rules by which these are constructed, i.e., the rules | |||
| governing DODAG formation. | governing DODAG formation. | |||
| 3.1.1. Constructing Topologies | 3.1.1. Constructing Topologies | |||
| LLNs, such as Radio Networks, do not typically have a predefined | LLNs, such as Radio Networks, do not typically have predefined | |||
| topologies, for example those imposed by point to point wires, so RPL | topologies, for example, those imposed by point-to-point wires, so | |||
| has to discover links and then select peers sparingly. | RPL has to discover links and then select peers sparingly. | |||
| Because in many cases layer 2 ranges overlap only partially, RPL | In many cases, because Layer 2 ranges overlap only partially, RPL | |||
| forms non-transitive/NBMA network topologies upon which it computes | forms non-transitive / Non-Broadcast Multi-Access (NBMA) network | |||
| routes. | topologies upon which it computes routes. | |||
| RPL routes are optimized for traffic to or from one or more roots | RPL routes are optimized for traffic to or from one or more roots | |||
| that act as sinks for the topology. As a result, RPL organizes a | that act as sinks for the topology. As a result, RPL organizes a | |||
| topology as a Directed Acyclic Graph (DAG) that is partitioned into | topology as a Directed Acyclic Graph (DAG) that is partitioned into | |||
| one or more Destination Oriented DAGS (DODAGs), one DODAG per sink. | one or more Destination Oriented DAGs (DODAGs), one DODAG per sink. | |||
| If the DAG has multiple roots, then it is expected that the roots are | If the DAG has multiple roots, then it is expected that the roots are | |||
| federated by a common backbone such as a transit link. | federated by a common backbone, such as a transit link. | |||
| 3.1.2. RPL Identifiers | 3.1.2. RPL Identifiers | |||
| RPL uses four values to identify and maintain a topology: | RPL uses four values to identify and maintain a 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 Destination Oriented DAGs (DODAGs). A network may | one or more Destination Oriented DAGs (DODAGs). A network may | |||
| have multiple RPLInstanceIDs, each of which defines an independent | have multiple RPLInstanceIDs, each of which defines an independent | |||
| set of DODAGs, which may be optimized for different Objective | set of DODAGs, which may be optimized for different Objective | |||
| Functions (OFs) and/or applications. The set of DODAGs identified | Functions (OFs) and/or applications. The set of DODAGs identified | |||
| skipping to change at page 15, line 16 ¶ | skipping to change at page 14, line 40 ¶ | |||
| o The fourth is Rank. The scope of Rank is a DODAG Version. Rank | o The fourth is Rank. The scope of Rank is a DODAG Version. Rank | |||
| establishes a partial order over a DODAG Version, 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.3. Instances, DODAGs, and DODAG Versions | 3.1.3. Instances, DODAGs, and DODAG Versions | |||
| A RPL Instance contains one or more DODAG roots. A RPL Instance may | A RPL Instance contains one or more DODAG roots. A RPL Instance may | |||
| provide routes to certain destination prefixes, reachable via the | provide routes to certain destination prefixes, reachable via the | |||
| DODAG roots or alternate paths within the DODAG. These roots may | DODAG roots or alternate paths within the DODAG. These roots may | |||
| operate independently, or may coordinate over a network that is not | operate independently, or they may coordinate over a network that is | |||
| necessarily as constrained as a LLN. | not necessarily as constrained as an LLN. | |||
| 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. | |||
| o multiple uncoordinated DODAGs with independent roots (differing | o multiple uncoordinated DODAGs with independent roots (differing | |||
| DODAGIDs) | DODAGIDs) | |||
| * For example, multiple data collection points in an urban data | * For example, multiple data collection points in an urban data | |||
| collection application that do not have suitable connectivity | collection application that do not have suitable connectivity | |||
| to coordinate with each other, or that use the formation of | to coordinate with each other or that use the formation of | |||
| multiple DODAGs as a means to dynamically and autonomously | multiple DODAGs as a means to dynamically and autonomously | |||
| partition the network. | partition the network. | |||
| o a single DODAG with a virtual root that coordinates LLN sinks | o a single DODAG with a virtual root that coordinates LLN sinks | |||
| (with the same DODAGID) over a backbone network. | (with the same DODAGID) over a backbone network. | |||
| * For example, multiple border routers operating with a reliable | * For example, multiple border routers operating with a reliable | |||
| transit link, e.g. in support of a 6LowPAN application, that | transit link, e.g., in support of an IPv6 Low-Power Wireless | |||
| are capable to act as logically equivalent interfaces to the | Personal Area Network (6LoWPAN) application, that are capable | |||
| sink of the same DODAG. | of acting as logically equivalent interfaces to the sink of 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. | |||
| Each RPL packet is associated with a particular RPLInstanceID (see | Each RPL packet is associated with a particular RPLInstanceID (see | |||
| Section 11.2) and therefore RPL Instance (Section 5). The | Section 11.2) and, therefore, RPL Instance (Section 5). The | |||
| provisioning or automated discovery of a mapping between a | provisioning or automated discovery of a mapping between a | |||
| RPLInstanceID and a type or service of application traffic is out of | RPLInstanceID and a type or service of application traffic is out of | |||
| scope for this specification (to be defined in future companion | scope for this specification (to be defined in future companion | |||
| specifications). | specifications). | |||
| Figure 1 depicts an example of a RPL Instance comprising three DODAGs | Figure 1 depicts an example of a RPL Instance comprising three DODAGs | |||
| with DODAG Roots R1, R2, and R3. Each of these DODAG Roots | with DODAG roots R1, R2, and R3. Each of these DODAG roots | |||
| advertises the same RPLInstanceID. The lines depict connectivity | advertises the same RPLInstanceID. The lines depict connectivity | |||
| between parents and children. | between parents and children. | |||
| Figure 2 depicts how a DODAG Version number increment leads to a new | Figure 2 depicts how a DODAGVersionNumber increment leads to a new | |||
| DODAG Version. This depiction illustrates a DODAG Version number | DODAG Version. This depiction illustrates a DODAGVersionNumber | |||
| increment that results in a different DODAG topology. Note that a | increment that results in a different DODAG topology. Note that a | |||
| new DODAG Version does not always imply a different DODAG topology. | new DODAG Version does not always imply a different DODAG topology. | |||
| To accommodate certain topology changes requires a new DODAG Version, | To accommodate certain topology changes requires a new DODAG Version, | |||
| as described later in this specification. | as described later in this specification. | |||
| Please note that in the following examples tree-like structures are | In the following examples, please note that tree-like structures are | |||
| depicted for simplicity, although the DODAG structure allows for each | depicted for simplicity, although the DODAG structure allows for each | |||
| node to have multiple parents when the connectivity supports it. | node to have multiple parents when the connectivity supports it. | |||
| +----------------------------------------------------------------+ | +----------------------------------------------------------------+ | |||
| | | | | | | |||
| | +--------------+ | | | +--------------+ | | |||
| | | | | | | | | | | |||
| | | (R1) | (R2) (R3) | | | | (R1) | (R2) (R3) | | |||
| | | / \ | /| \ / | \ | | | | / \ | /| \ / | \ | | |||
| | | / \ | / | \ / | \ | | | | / \ | / | \ / | \ | | |||
| skipping to change at page 17, line 37 ¶ | skipping to change at page 17, line 11 ¶ | |||
| optimized according to an Objective Function (OF). RPL nodes | optimized according to an Objective Function (OF). RPL nodes | |||
| construct and maintain these DODAGs through DODAG Information Object | construct and maintain these DODAGs through DODAG Information Object | |||
| (DIO) messages. | (DIO) messages. | |||
| 3.2.1. Objective Function (OF) | 3.2.1. Objective Function (OF) | |||
| The Objective Function (OF) defines how RPL nodes select and optimize | The Objective Function (OF) defines how RPL nodes select and optimize | |||
| routes within a RPL Instance. The OF is identified by an Objective | routes within a RPL Instance. The OF is identified by an Objective | |||
| Code Point (OCP) within the DIO Configuration option. An OF defines | Code Point (OCP) within the DIO Configuration option. An OF defines | |||
| how nodes translate one or more metrics and constraints, which are | how nodes translate one or more metrics and constraints, which are | |||
| themselves defined in [I-D.ietf-roll-routing-metrics], into a value | themselves defined in [RFC6551], into a value called Rank, which | |||
| called Rank, which approximates the node's distance from a DODAG | approximates the node's distance from a DODAG root. An OF also | |||
| root. An OF also defines how nodes select parents. Further details | defines how nodes select parents. Further details may be found in | |||
| may be found in Section 14, [I-D.ietf-roll-routing-metrics], | Section 14, [RFC6551], [RFC6552], and related companion | |||
| [I-D.ietf-roll-of0], and related companion specifications. | specifications. | |||
| 3.2.2. DODAG Repair | 3.2.2. DODAG Repair | |||
| A DODAG Root institutes a global repair operation by incrementing the | A DODAG root institutes a global repair operation by incrementing the | |||
| DODAG Version Number. This initiates a new DODAG Version. Nodes in | DODAGVersionNumber. This initiates a new DODAG Version. Nodes in | |||
| the new DODAG Version can choose a new position whose Rank is not | the new DODAG Version can choose a new position whose Rank is not | |||
| constrained by their Rank within the old DODAG Version. | constrained by their Rank within the old DODAG Version. | |||
| RPL also supports mechanisms which may be used for local repair | RPL also supports mechanisms that may be used for local repair within | |||
| within the DODAG Version. The DIO message specifies the necessary | the DODAG Version. The DIO message specifies the necessary | |||
| parameters as configured from and controlled by policy at the DODAG | parameters as configured from and controlled by policy at the DODAG | |||
| root. | root. | |||
| 3.2.3. Security | 3.2.3. Security | |||
| RPL supports message confidentiality and integrity. It is designed | RPL supports message confidentiality and integrity. It is designed | |||
| such that link-layer mechanisms can be used when available and | such that link-layer mechanisms can be used when available and | |||
| appropriate, yet in their absence RPL can use its own mechanisms. | appropriate; yet, in their absence, RPL can use its own mechanisms. | |||
| RPL has three basic security modes. | RPL has three basic security modes. | |||
| In the first, called "unsecured," RPL control messages are sent | In the first, called "unsecured", RPL control messages are sent | |||
| without any additional security mechanisms. Unsecured mode does not | without any additional security mechanisms. Unsecured mode does not | |||
| imply that the RPL network is unsecure: it could be using other | imply that the RPL network is unsecure: it could be using other | |||
| present security primitives (e.g. link-layer security) to meet | present security primitives (e.g., link-layer security) to meet | |||
| application security requirements. | application security requirements. | |||
| In the second, called "pre-installed," nodes joining a RPL Instance | In the second, called "preinstalled", nodes joining a RPL Instance | |||
| have pre-installed keys that enable them to process and generate | have preinstalled keys that enable them to process and generate | |||
| secured RPL messages. | secured RPL messages. | |||
| The third mode is called "authenticated." In authenticated mode, | The third mode is called "authenticated". In authenticated mode, | |||
| nodes have pre-installed keys as in pre-installed mode, but the pre- | nodes have preinstalled keys as in preinstalled mode, but the | |||
| installed key may only be used to join a RPL Instance as a leaf. | preinstalled key may only be used to join a RPL Instance as a leaf. | |||
| Joining an authenticated RPL Instance as a router requires obtaining | Joining an authenticated RPL Instance as a router requires obtaining | |||
| a key from an authentication authority. The process by which this | a key from an authentication authority. The process by which this | |||
| key is obtained is out of scope for this specification. Note that | key is obtained is out of scope for this specification. Note that | |||
| this specification alone does not provide sufficient detail for a RPL | this specification alone does not provide sufficient detail for a RPL | |||
| implementation to securely operate in authenticated mode. For a RPL | implementation to securely operate in authenticated mode. For a RPL | |||
| implementation to operate securely in authenticated mode it is | implementation to operate securely in authenticated mode, it is | |||
| necessary for a future companion specification to detail the | necessary for a future companion specification to detail the | |||
| mechanisms by which a node obtains/requests the authentication | mechanisms by which a node obtains/requests the authentication | |||
| material (e.g. key, certificate), and to determine from where that | material (e.g., key, certificate) and to determine from where that | |||
| material should be obtained. See also Section 10.3. | material should be obtained. See also Section 10.3. | |||
| 3.2.4. Grounded and Floating DODAGs | 3.2.4. Grounded and Floating DODAGs | |||
| DODAGs can be grounded or floating: the DODAG root advertises which | DODAGs can be grounded or floating: the DODAG root advertises which | |||
| is the case. A grounded DODAG offers connectivity to hosts that are | is the case. A grounded DODAG offers connectivity to hosts that are | |||
| required for satisfying the application-defined goal. A floating | required for satisfying the application-defined goal. A floating | |||
| DODAG is not expected to satisfy the goal and in most cases only | DODAG is not expected to satisfy the goal; in most cases, it only | |||
| provides routes to nodes within the DODAG. Floating DODAGs may be | provides routes to nodes within the DODAG. Floating DODAGs may be | |||
| used, for example, to preserve inner connectivity during repair. | used, for example, to preserve interconnectivity during repair. | |||
| 3.2.5. Local DODAGs | 3.2.5. Local DODAGs | |||
| RPL nodes can optimize routes to a destination within an LLN by | RPL nodes can optimize routes to a destination within an LLN by | |||
| forming a local DODAG whose DODAG Root is the desired destination. | forming a Local DODAG whose DODAG root is the desired destination. | |||
| Unlike global DAGs, which can consist of multiple DODAGs, local DAGs | Unlike global DAGs, which can consist of multiple DODAGs, local DAGs | |||
| have one and only one DODAG and therefore one DODAG Root. Local | have one and only one DODAG and therefore one DODAG root. Local | |||
| DODAGs can be constructed on-demand. | DODAGs can be constructed on demand. | |||
| 3.2.6. Administrative Preference | 3.2.6. 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.2.7. Datapath Validation and Loop Detection | 3.2.7. Data-Path Validation and Loop Detection | |||
| The low-power and lossy nature of LLNs motivates RPL's use of on- | The low-power and lossy nature of LLNs motivates RPL's use of on- | |||
| demand loop detection using data packets. Because data traffic can | demand loop detection using data packets. Because data traffic can | |||
| be infrequent, maintaining a routing topology that is constantly up | be infrequent, maintaining a routing topology that is constantly up | |||
| to date with the physical topology can waste energy. Typical LLNs | to date with the physical topology can waste energy. Typical LLNs | |||
| exhibit variations in physical connectivity that are transient and | exhibit variations in physical connectivity that are transient and | |||
| innocuous to traffic, but that would be costly to track closely from | innocuous to traffic, but that would be costly to track closely from | |||
| the control plane. Transient and infrequent changes in connectivity | the control plane. Transient and infrequent changes in connectivity | |||
| need not be addressed by RPL until there is data to send. This | need not be addressed by RPL until there is data to send. This | |||
| aspect of RPL's design draws from existing, highly used LLN protocols | aspect of RPL's design draws from existing, highly used LLN protocols | |||
| as well as extensive experimental and deployment evidence on its | as well as extensive experimental and deployment evidence on its | |||
| efficacy. | efficacy. | |||
| The RPL Packet Information that is transported with data packets | The RPL Packet Information that is transported with data packets | |||
| includes the Rank of the transmitter. An inconsistency between the | includes the Rank of the transmitter. An inconsistency between the | |||
| routing decision for a packet (upward or downward) and the Rank | routing decision for a packet (Upward or Downward) and the Rank | |||
| relationship between the two nodes indicates a possible loop. On | relationship between the two nodes indicates a possible loop. On | |||
| receiving such a packet, a node institutes a local repair operation. | receiving such a packet, a node institutes a local repair operation. | |||
| For example, if a node receives a packet flagged as moving in the | For example, if a node receives a packet flagged as moving in the | |||
| upward direction, and if that packet records that the transmitter is | Upward direction, and if that packet records that the transmitter is | |||
| of a lower (lesser) Rank than the receiving node, then the receiving | of a lower (lesser) Rank than the receiving node, then the receiving | |||
| node is able to conclude that the packet has not progressed in the | node is able to conclude that the packet has not progressed in the | |||
| upward direction and that the DODAG is inconsistent. | Upward direction and that the DODAG is inconsistent. | |||
| 3.2.8. Distributed Algorithm Operation | 3.2.8. 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 | |||
| configurations. | configurations. | |||
| 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 to all-RPL-nodes. | messages to all-RPL-nodes. | |||
| 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 (thus selecting DODAG parents), or to maintain an existing | DODAG (thus, selecting DODAG parents), or to maintain an existing | |||
| DODAG, according to the specified Objective Function and Rank of | DODAG, according to the specified Objective Function and Rank of | |||
| their neighbors. | their neighbors. | |||
| o Nodes provision routing table entries, for the destinations | o Nodes provision routing table entries, for the destinations | |||
| specified by the DIO message, via their DODAG parents in the DODAG | specified by the DIO message, via their DODAG parents in the DODAG | |||
| Version. Nodes that decide to join a DODAG can provision one or | Version. Nodes that decide to join a DODAG can provision one or | |||
| more DODAG parents as the next-hop for the default route and a | more DODAG parents as the next hop for the default route and a | |||
| number of other external routes for the associated instance. | number of other external routes for the associated instance. | |||
| 3.3. Downward Routes and Destination Advertisement | 3.3. Downward Routes and Destination Advertisement | |||
| RPL uses Destination Advertisement Object (DAO) messages to establish | RPL uses Destination Advertisement Object (DAO) messages to establish | |||
| downward routes. DAO messages are an optional feature for | Downward routes. DAO messages are an optional feature for | |||
| applications that require P2MP or P2P traffic. RPL supports two | applications that require point-to-multipoint (P2MP) or point-to- | |||
| modes of downward traffic: storing (fully stateful) or non-storing | point (P2P) traffic. RPL supports two modes of Downward traffic: | |||
| (fully source routed). Any given RPL Instance is either storing or | Storing (fully stateful) or Non-Storing (fully source routed); see | |||
| non-storing. In both cases, P2P packets travel Up toward a DODAG | Section 9. Any given RPL Instance is either storing or non-storing. | |||
| Root then Down to the final destination (unless the destination is on | In both cases, P2P packets travel Up toward a DODAG root then Down to | |||
| the upward route). In the non-storing case the packet will travel | the final destination (unless the destination is on the Upward | |||
| all the way to a DODAG root before traveling Down. In the storing | route). In the Non-Storing case, the packet will travel all the way | |||
| case the packet may be directed Down towards the destination by a | to a DODAG root before traveling Down. In the Storing case, the | |||
| common ancestor of the source and the destination prior to reaching a | packet may be directed Down towards the destination by a common | |||
| DODAG Root. | ancestor of the source and the destination prior to reaching a DODAG | |||
| root. | ||||
| As of this specification no implementation is expected to support | As of the writing of this specification, no implementation is | |||
| both storing and non-storing modes of operation. Most | expected to support both Storing and Non-Storing modes of operation. | |||
| implementations are expected to support either no downward routes, | Most implementations are expected to support either no Downward | |||
| non-storing mode only, or storing mode only. Other modes of | routes, Non-Storing mode only, or Storing mode only. Other modes of | |||
| operation, such as a hybrid mix of storing and non-storing mode, are | operation, such as a hybrid mix of Storing and Non-Storing mode, are | |||
| out of scope for this specification and may be described in other | out of scope for this specification and may be described in other | |||
| companion specifications. | companion specifications. | |||
| This specification describes a basic mode of operation in support of | This specification describes a basic mode of operation in support of | |||
| P2P traffic. Note that more optimized P2P solutions may be described | P2P traffic. Note that more optimized P2P solutions may be described | |||
| in companion specifications. | in companion specifications. | |||
| 3.4. Local DODAGs Route Discovery | 3.4. Local DODAGs Route Discovery | |||
| A RPL network can optionally support on-demand discovery of DODAGs to | Optionally, a RPL network can support on-demand discovery of DODAGs | |||
| specific destinations within an LLN. Such local DODAGs behave | to specific destinations within an LLN. Such Local DODAGs behave | |||
| slightly differently than global DODAGs: they are uniquely defined by | slightly differently than Global DODAGs: they are uniquely defined by | |||
| the combination of DODAGID and RPLInstanceID. The RPLInstanceID | the combination of DODAGID and RPLInstanceID. The RPLInstanceID | |||
| denotes whether a DODAG is a local DODAG. | denotes whether a DODAG is a Local DODAG. | |||
| 3.5. Rank Properties | 3.5. 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 Version. 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. Even | calculation of the Rank is left to the Objective Function. Even | |||
| though the specific computation of the rank is left to the Objective | though the specific computation of the Rank is left to the Objective | |||
| Function, the rank must implement generic properties regardless of | Function, the Rank must implement generic properties regardless of | |||
| the Objective Function. | the Objective Function. | |||
| In particular, the rank of the nodes must monotonically decrease as | In particular, the Rank of the nodes must monotonically decrease as | |||
| the DODAG version is followed towards the DODAG destination. In that | the DODAG Version is followed towards the DODAG destination. In that | |||
| regard, the rank can be regarded as a scalar representation of the | regard, the Rank can be considered a scalar representation of the | |||
| location or radius of a node within a DODAG Version. | location or radius of a node within a DODAG Version. | |||
| The details of how the Objective Function computes rank are out of | The details of how the Objective Function computes Rank are out of | |||
| scope for this specification, although that computation may depend, | scope for this specification, although that computation may depend, | |||
| for example, on parents, link metrics, node metrics, and the node | for example, on parents, link metrics, node metrics, and the node | |||
| configuration and policies. See Section 14 for more information. | configuration and policies. See Section 14 for more information. | |||
| The rank is not a path cost, although its value can be derived from | The Rank is not a path cost, although its value can be derived from | |||
| and influenced by path metrics. The rank has properties of its own | and influenced by path metrics. The Rank has properties of its own | |||
| that are not necessarily those of all metrics: | that are not necessarily those of all metrics: | |||
| Type: The rank is an abstract numeric value. | Type: The Rank is an abstract numeric value. | |||
| Function: The rank is the expression of a relative position within a | Function: The Rank is the expression of a relative position within a | |||
| DODAG Version with regard to neighbors and is not necessarily | DODAG Version with regard to neighbors, and it is not | |||
| a good indication or a proper expression of a distance or a | necessarily a good indication or a proper expression of a | |||
| path cost to the root. | distance or a path 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 is RECOMMENDED | routing topology. Some dampening or filtering is RECOMMENDED | |||
| to keep the topology stable, and thus the rank does not | to keep the topology stable; thus, the Rank does not | |||
| necessarily change as fast as some link or node metrics | necessarily change as fast as some link or node metrics would. | |||
| would. A new DODAG Version would be a good opportunity to | A new DODAG Version would be a good opportunity to reconcile | |||
| reconcile the discrepancies that might form over time between | the discrepancies that might form over time between metrics and | |||
| metrics and ranks within a DODAG Version. | Ranks within a DODAG Version. | |||
| Properties: The rank is incremented in a strictly monotonic fashion, | Properties: The Rank is incremented in a strictly monotonic fashion, | |||
| and can be used to validate a progression from or towards the | and it can be used to validate a progression from or towards | |||
| root. A metric, like bandwidth or jitter, does not | the root. A metric, like bandwidth or jitter, does not | |||
| necessarily exhibit this property. | necessarily exhibit this property. | |||
| Abstract: The rank does not have a physical unit, but rather a range | Abstract: The Rank does not have a physical unit, but rather a range | |||
| of increment per hop, where the assignment of each increment | of increment per hop, where the assignment of each increment is | |||
| is to be determined by the Objective Function. | 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 | |||
| node's further options with regard to DODAG parent selection and | node's 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.5.1. Rank Comparison (DAGRank()) | 3.5.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 radix point between the integer part and the fractional part is | the radix 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. A | increase in Rank between a node and any of its DODAG parents. A | |||
| DODAG Root provisions MinHopRankIncrease. MinHopRankIncrease creates | DODAG root provisions MinHopRankIncrease. MinHopRankIncrease creates | |||
| a tradeoff between hop cost precision and the maximum number of hops | a trade-off between hop cost precision and the maximum number of hops | |||
| a network can support. A very large MinHopRankIncrease, for example, | a network can support. A very large MinHopRankIncrease, for example, | |||
| allows precise characterization of a given hop's affect on Rank but | allows precise characterization of a given hop's effect on Rank but | |||
| cannot support many hops. | cannot support many hops. | |||
| When an objective function computes rank, the objective function | When an Objective Function computes Rank, the Objective Function | |||
| operates on the entire (i.e. 16-bit) rank quantity. When rank is | operates on the entire (i.e., 16-bit) Rank quantity. When Rank is | |||
| compared, e.g. for determination of parent relationships or loop | compared, e.g., for determination of parent 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, where floor(x) is the function that evaluates to the | follows, where floor(x) is the function that evaluates to the | |||
| greatest integer less than or equal to x: | greatest integer less than or equal to x: | |||
| DAGRank(rank) = floor(rank/MinHopRankIncrease) | DAGRank(rank) = floor(rank/MinHopRankIncrease) | |||
| For example, if a 16-bit rank quantity is decimal 27, and the | For example, if a 16-bit Rank quantity is decimal 27, and the | |||
| MinHopRankIncrease is decimal 16, then DAGRank(27) = floor(1.6875) = | MinHopRankIncrease is decimal 16, then DAGRank(27) = floor(1.6875) = | |||
| 1. The integer part of the rank is 1 and the fractional part is | 1. The integer part of the Rank is 1 and the fractional part is | |||
| 11/16. | 11/16. | |||
| By convention in this document, using the macro DAGRank(node) may be | Following the conventions in this document, using the macro | |||
| interpreted as DAGRank(node.rank), where node.rank is the rank value | DAGRank(node) may be interpreted as DAGRank(node.rank), where | |||
| as maintained by the node. | node.rank is the Rank value 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.5.2. Rank Relationships | 3.5.2. Rank Relationships | |||
| Rank computations maintain the following properties for any nodes M | Rank computations maintain the following properties for any nodes M | |||
| and N that are neighbors in the LLN: | and N that are 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): | |||
| 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 | ||||
| creating a loop. Further, for a node N, all parents in the | ||||
| DODAG parent set must be of rank less than DAGRank(N). In | ||||
| other words, the rank presented by a node N MUST be greater | ||||
| than that presented by any of its parents. | ||||
| DAGRank(M) equals DAGRank(N): In this case the positions of M and N | In this case, the position of M is closer to the DODAG root than | |||
| within the DODAG and with respect to the DODAG root are | the position of N. Node M may safely be a DODAG parent for Node N | |||
| similar (identical). Routing through a node with equal Rank | without risk of creating a loop. Further, for a Node N, all | |||
| may cause a routing loop (i.e., if that node chooses to route | parents in the DODAG parent set must be of a Rank less than | |||
| through a node with equal Rank as well). | DAGRank(N). In other words, the Rank presented by a Node N MUST | |||
| be greater than that presented by any of its parents. | ||||
| DAGRank(M) is greater than DAGRank(N): In this case, the position of | DAGRank(M) equals DAGRank(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 | ||||
| node N selects node M as DODAG parent there is a risk to | ||||
| create a loop. | ||||
| As an example, the rank could be computed in such a way so as to | In this case, the positions of M and N within the DODAG and with | |||
| closely track ETX (Expected Transmission Count, a fairly common | respect to the DODAG root are similar or identical. Routing | |||
| routing metric used in LLN and defined in | through a node with equal Rank may cause a routing loop (i.e., if | |||
| [I-D.ietf-roll-routing-metrics]) when the metric that an objective | that node chooses to route through a node with equal Rank as | |||
| function minimizes is ETX, or latency, or in a more complicated way | well). | |||
| as appropriate to the objective function being used within the DODAG. | ||||
| 3.6. Routing Metrics and Constraints Used By RPL | 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. 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 of creating a loop. | ||||
| As an example, the Rank could be computed in such a way so as to | ||||
| closely track ETX (expected transmission count, a fairly common | ||||
| routing metric used in LLN and defined in [RFC6551]) when the metric | ||||
| that an Objective Function minimizes is ETX, or latency, or in a more | ||||
| complicated way as appropriate to the Objective Function being used | ||||
| within the DODAG. | ||||
| 3.6. 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. Some routing protocols support more than one | characteristics. Some routing protocols support more than one | |||
| metric: in the vast majority of the cases, one metric is used per | metric: in the vast majority of the cases, one metric is used per | |||
| (sub)topology. Less often, a second metric may be used as a tie- | (sub-)topology. Less often, a second metric may be used as a | |||
| breaker in the presence of Equal Cost Multiple Paths (ECMP). The | tiebreaker in the presence of Equal Cost Multiple Paths (ECMPs). The | |||
| optimization of multiple metrics is known as an NP complete problem | optimization of multiple metrics is known as an NP-complete problem | |||
| and is sometimes supported by some centralized path computation | and is sometimes supported by some 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 constraint-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 | |||
| neighbor set, thus leading to a constrained shortest path. | neighbor set, thus leading to a constrained shortest path. | |||
| An Objective Function specifies the objectives used to compute the | An Objective Function specifies the objectives used to compute the | |||
| (constrained) path. Furthermore, nodes are configured to support a | (constrained) path. Furthermore, nodes are configured to support a | |||
| set of metrics and constraints, and select their parents in the DODAG | set of metrics and constraints and select their parents in the DODAG | |||
| according to the metrics and constraints advertised in the DIO | according to the metrics and constraints advertised in the DIO | |||
| messages. Upstream and Downstream metrics may be merged or | messages. Upstream and Downstream metrics may be merged or | |||
| advertised separately depending on the OF and the metrics. When they | advertised separately depending on the OF and the metrics. When they | |||
| are advertised separately, it may happen that the set of DIO parents | 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 | 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 | which unicast DAO messages are sent). Yet, all are DODAG parents | |||
| with regards to the rules for Rank computation. | with regard to the rules for Rank computation. | |||
| The Objective Function is decoupled from the routing metrics and | The Objective Function is decoupled from the routing metrics and | |||
| constraints used by RPL. Indeed, whereas the OF dictates rules such | constraints used by RPL. Whereas the OF dictates rules such as DODAG | |||
| as DODAG parents selection, load balancing and so on, the set of | parent selection, load balancing, and so on, the set of metrics | |||
| metrics and/or constraints used, and thus determine the preferred | and/or constraints used, and thus those that determine the preferred | |||
| path, are based on the information carried within the DAG container | path, are based on the information carried within the DAG container | |||
| option in DIO messages. | option in DIO messages. | |||
| 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 [RFC6551]. | |||
| Example 1: Shortest path: path offering the shortest end-to-end | Example 1: Shortest path: path offering the shortest end-to-end | |||
| delay. | delay. | |||
| Example 2: Shortest Constrained path: the path that does not traverse | Example 2: Shortest Constrained 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.7. Loop Avoidance | 3.7. Loop Avoidance | |||
| RPL tries to avoid creating loops when undergoing topology changes | RPL tries to avoid creating loops when undergoing topology changes | |||
| and includes rank-based datapath validation mechanisms for detecting | and includes Rank-based data-path validation mechanisms for detecting | |||
| loops when they do occur (see Section 11 for more details). In | loops when they do occur (see Section 11 for more details). In | |||
| practice, this means that RPL guarantees neither loop free path | practice, this means that RPL guarantees neither loop-free path | |||
| selection nor tight delay convergence times, but can detect and | selection nor tight delay convergence times, but it can detect and | |||
| repair a loop as soon as it is used. RPL uses this loop detection to | repair a loop as soon as it is used. RPL uses this loop detection to | |||
| ensure that packets make forward progress within the DODAG Version | ensure that packets make forward progress within the DODAG Version | |||
| and trigger repairs when necessary. | and trigger repairs when necessary. | |||
| 3.7.1. Greediness and Instability | 3.7.1. Greediness and Instability | |||
| A node is greedy if it attempts to move deeper (increase Rank) in the | A node is greedy if it attempts to move deeper (increase Rank) in the | |||
| DODAG Version in order to increase the size of the parent set or | DODAG Version in order to increase the size of the parent set or | |||
| improve some other metric. Once a node has joined a DODAG Version, | improve some other metric. Once a node has joined a DODAG Version, | |||
| RPL disallows certain behaviors, including greediness, in order to | RPL disallows certain behaviors, including greediness, in order to | |||
| prevent resulting instabilities in the DODAG Version. | prevent resulting instabilities in the DODAG Version. | |||
| Suppose a node is willing to receive and process a DIO message from a | Suppose a node is willing to receive and process a DIO message from a | |||
| node in its own sub-DODAG, and in general a node deeper than itself. | 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 created, | In this case, a possibility exists that a feedback loop is created, | |||
| wherein two or more nodes continue to try and move in the DODAG | wherein two or more nodes continue to try and move in the DODAG | |||
| Version while attempting to optimize against each other. In some | Version while attempting to optimize against each other. In some | |||
| cases, this will result in instability. It is for this reason that | cases, this will result in instability. It is for this reason that | |||
| RPL limits the cases where a node may process DIO messages from | 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 form 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.7.1.1. Example: Greedy Parent Selection and Instability | 3.7.1.1. Example: Greedy Parent Selection and Instability | |||
| (A) (A) (A) | (A) (A) (A) | |||
| |\ |\ |\ | |\ |\ |\ | |||
| | `-----. | `-----. | `-----. | | `-----. | `-----. | `-----. | |||
| | \ | \ | \ | | \ | \ | \ | |||
| (B) (C) (B) \ | (C) | (B) (C) (B) \ | (C) | |||
| \ | | / | \ | | / | |||
| `-----. | | .-----' | `-----. | | .-----' | |||
| \| |/ | \| |/ | |||
| (C) (B) | (C) (B) | |||
| -1- -2- -3- | -1- -2- -3- | |||
| Figure 3: Greedy DODAG Parent Selection | Figure 3: Greedy DODAG Parent Selection | |||
| Figure 3 depicts a DODAG in 3 different configurations. A usable | Figure 3 depicts a DODAG in three different configurations. A usable | |||
| link between (B) and (C) exists in all 3 configurations. In | link between (B) and (C) exists in all three configurations. In | |||
| Figure 3-1, Node (A) is a DODAG parent for Nodes (B) and (C). In | Figure 3-1, Node (A) is a DODAG parent for Nodes (B) and (C). In | |||
| Figure 3-2, Node (A) is a DODAG parent for Nodes (B) and (C), and | Figure 3-2, Node (A) is a DODAG parent for Nodes (B) and (C), and | |||
| Node (B) is also a DODAG parent for Node (C). In Figure 3-3, Node | Node (B) is also a DODAG parent for Node (C). In Figure 3-3, Node | |||
| (A) is a DODAG parent for Nodes (B) and (C), and Node (C) is also a | (A) is a DODAG parent for Nodes (B) and (C), and Node (C) is also a | |||
| DODAG parent for Node (B). | DODAG parent for Node (B). | |||
| If a RPL node is too greedy, in that it attempts to optimize for an | If a RPL node is too greedy, in that it attempts to optimize for an | |||
| additional number of parents beyond its most preferred parents, then | additional number of parents beyond its most preferred parents, then | |||
| an instability can result. Consider the DODAG illustrated in | an instability can result. Consider the DODAG illustrated in | |||
| Figure 3-1. In this example, Nodes (B) and (C) may most prefer Node | Figure 3-1. In this example, Nodes (B) and (C) may most prefer Node | |||
| (A) as a DODAG parent, but we will consider the case when they are | (A) as a DODAG parent, but we will consider the case when they are | |||
| operating under the greedy condition that will try to optimize for 2 | operating under the greedy condition that will try to optimize for | |||
| parents. | two parents. | |||
| o Let Figure 3-1 be the initial condition. | o Let Figure 3-1 be the initial condition. | |||
| o Suppose Node (C) first is able to leave the DODAG and rejoin at a | o Suppose Node (C) first is able to leave the DODAG and rejoin at a | |||
| lower rank, taking both Nodes (A) and (B) as DODAG parents as | lower Rank, taking both Nodes (A) and (B) as DODAG parents as | |||
| depicted in Figure 3-2. Now Node (C) is deeper than both Nodes | depicted in Figure 3-2. Now Node (C) is deeper than both Nodes | |||
| (A) and (B), and Node (C) is satisfied to have 2 DODAG parents. | (A) and (B), and Node (C) is satisfied to have two DODAG parents. | |||
| o Suppose Node (B), in its greediness, is willing to receive and | o Suppose Node (B), in its greediness, is willing to receive and | |||
| process a DIO message from Node (C) (against the rules of RPL), | process a DIO message from Node (C) (against the rules of RPL), | |||
| and then Node (B) leaves the DODAG and rejoins at a lower rank, | and then Node (B) leaves the DODAG and rejoins at a lower Rank, | |||
| taking both Nodes (A) and (C) as DODAG parents. Now Node (B) is | taking both Nodes (A) and (C) as DODAG parents. Now Node (B) is | |||
| deeper than both Nodes (A) and (C) and is satisfied with 2 DAG | deeper than both Nodes (A) and (C) and is satisfied with two DAG | |||
| parents. | parents. | |||
| o Then Node (C), because it is also greedy, will leave and rejoin | o Then, Node (C), because it is also greedy, will leave and rejoin | |||
| deeper, to again get 2 parents and have a lower rank then both of | deeper, to again get two parents and have a lower Rank then both | |||
| them. | of them. | |||
| o Next Node (B) will again leave and rejoin deeper, to again get 2 | o Next, Node (B) will again leave and rejoin deeper, to again get | |||
| parents | two parents. | |||
| o And again Node (C) leaves and rejoins deeper... | o Again, Node (C) leaves and rejoins deeper. | |||
| o The process will repeat, and the DODAG will oscillate between | o The process will repeat, and the DODAG will oscillate between | |||
| Figure 3-2 and Figure 3-3 until the nodes count to infinity and | Figure 3-2 and Figure 3-3 until the nodes count to infinity and | |||
| restart the cycle again. | restart the cycle again. | |||
| o This cycle can be averted through mechanisms in RPL: | o This cycle can be averted through mechanisms in RPL: | |||
| * Nodes (B) and (C) stay at a rank sufficient to attach to their | * Nodes (B) and (C) stay at a Rank sufficient to attach to their | |||
| most preferred parent (A) and don't go for any deeper (worse) | most preferred parent (A) and don't go for any deeper (worse) | |||
| alternate parents (Nodes are not greedy) | alternate parents (Nodes are not greedy). | |||
| * Nodes (B) and (C) do not process DIO messages from nodes deeper | * Nodes (B) and (C) do not process DIO messages from nodes deeper | |||
| than themselves (because such nodes are possibly in their own | than themselves (because such nodes are possibly in their own | |||
| sub-DODAGs) | sub-DODAGs). | |||
| These mechanisms are further described in Section 8.2.2.4 | These mechanisms are further described in Section 8.2.2.4. | |||
| 3.7.2. DODAG Loops | 3.7.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. In particular, this | |||
| particular when DIO messages are missed. Strict use of the DODAG | may happen when DIO messages are missed. Strict use of the | |||
| Version Number can eliminate this type of loop, but this type of loop | DODAGVersionNumber can eliminate this type of loop, but this type of | |||
| may possibly be encountered when using some local repair mechanisms. | loop may possibly be encountered when using some local repair | |||
| mechanisms. | ||||
| For example, consider the local repair mechanism that allows a node | For example, consider the local repair mechanism that allows a node | |||
| to detach from the DODAG, advertise a rank of INFINITE_RANK (in order | to detach from the DODAG, advertise a Rank of INFINITE_RANK (in order | |||
| to poison its routes / inform its sub-DODAG), and then to re-attach | to poison its routes / inform its sub-DODAG), and then reattach to | |||
| to the DODAG. In that case the node may in some cases re-attach to | the DODAG. In some of these cases, the node may reattach to its own | |||
| its own prior-sub-DODAG, causing a DODAG loop, because the poisoning | prior-sub-DODAG, causing a DODAG loop, because the poisoning may fail | |||
| may fail if the INFINITE_RANK advertisements are lost in the LLN | if the INFINITE_RANK advertisements are lost in the LLN environment. | |||
| environment. (In this case the rank-based datapath validation | (In this case, the Rank-based data-path validation mechanisms would | |||
| mechanisms would eventually detect and trigger correction of the | eventually detect and trigger correction of the loop). | |||
| loop). | ||||
| 3.7.3. DAO Loops | 3.7.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-Path (a DAO message that invalidates a previously announced | when a No-Path (a DAO message that invalidates a previously announced | |||
| prefix) was missed and persists until all state has been cleaned up. | prefix, see Section 6.4.3) was missed and persists until all state | |||
| RPL includes an optional mechanism to acknowledge DAO messages, which | has been cleaned up. RPL includes an optional mechanism to | |||
| may mitigate the impact of a single DAO message being missed. RPL | acknowledge DAO messages, which may mitigate the impact of a single | |||
| includes loop detection mechanisms that mitigate the impact of DAO | DAO message being missed. RPL includes loop detection mechanisms | |||
| loops and trigger their repair. (See Section 11.2.2.3). | that mitigate the impact of DAO loops and trigger their repair. (See | |||
| Section 11.2.2.3.) | ||||
| 4. Traffic Flows Supported by RPL | 4. Traffic Flows Supported by RPL | |||
| RPL supports three basic traffic flows: Multipoint-to-Point (MP2P), | RPL supports three basic traffic flows: multipoint-to-point (MP2P), | |||
| Point-to-Multipoint (P2MP), and Point-to-Point (P2P). | point-to-multipoint (P2MP), and point-to-point (P2P). | |||
| 4.1. Multipoint-to-Point Traffic | 4.1. Multipoint-to-Point Traffic | |||
| Multipoint-to-Point (MP2P) is a dominant traffic flow in many LLN | Multipoint-to-point (MP2P) is a dominant traffic flow in many LLN | |||
| applications ([RFC5867], [RFC5826], [RFC5673], [RFC5548]). The | applications ([RFC5867], [RFC5826], [RFC5673], and [RFC5548]). The | |||
| destinations of MP2P flows are designated nodes that have some | destinations of MP2P flows are designated nodes that have some | |||
| application significance, such as providing connectivity to the | application significance, such as providing connectivity to the | |||
| larger Internet or core private IP network. RPL supports MP2P | larger Internet or core private IP network. RPL supports MP2P | |||
| traffic by allowing MP2P destinations to be reached via DODAG roots. | traffic by allowing MP2P destinations to be reached via DODAG roots. | |||
| 4.2. Point-to-Multipoint Traffic | 4.2. Point-to-Multipoint Traffic | |||
| Point-to-multipoint (P2MP) is a traffic pattern required by several | Point-to-multipoint (P2MP) is a traffic pattern required by several | |||
| LLN applications ([RFC5867], [RFC5826], [RFC5673], [RFC5548]). RPL | LLN applications ([RFC5867], [RFC5826], [RFC5673], and [RFC5548]). | |||
| supports P2MP traffic by using a destination advertisement mechanism | RPL supports P2MP traffic by using a destination advertisement | |||
| that provisions Down routes toward destinations (prefixes, addresses, | mechanism that provisions Down routes toward destinations (prefixes, | |||
| or multicast groups), and away from roots. Destination | addresses, or multicast groups), and away from roots. Destination | |||
| advertisements can update routing tables as the underlying DODAG | advertisements can update routing tables as the underlying DODAG | |||
| topology changes. | topology changes. | |||
| 4.3. Point-to-Point Traffic | 4.3. Point-to-Point Traffic | |||
| RPL DODAGs provide a basic structure for point-to-point (P2P) | RPL DODAGs provide a basic structure for point-to-point (P2P) | |||
| traffic. For a RPL network to support P2P traffic, a root must be | 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 | able to route packets to a destination. Nodes within the network may | |||
| also have routing tables to destinations. A packet flows towards a | also have routing tables to destinations. A packet flows towards a | |||
| root until it reaches an ancestor that has a known route to the | root until it reaches an ancestor that has a known route to the | |||
| destination. As pointed out later in this document, in the most | destination. As pointed out later in this document, in the most | |||
| constrained case (when nodes cannot store routes), that common | constrained case (when nodes cannot store routes), that common | |||
| ancestor may be the DODAG root. In other cases it may be a node | ancestor may be the DODAG root. In other cases, it may be a node | |||
| closer to both the source and destination. | closer to both the source and destination. | |||
| RPL also supports the case where a P2P destination is a 'one-hop' | RPL also supports the case where a P2P destination is a 'one-hop' | |||
| neighbor. | neighbor. | |||
| RPL neither specifies nor precludes additional mechanisms for | RPL neither specifies nor precludes additional mechanisms for | |||
| computing and installing potentially more optimal routes to support | computing and installing potentially more optimal routes to support | |||
| arbitrary P2P traffic. | arbitrary P2P traffic. | |||
| 5. RPL Instance | 5. RPL Instance | |||
| Within a given LLN, there may be multiple, logically independent RPL | Within a given LLN, there may be multiple, logically independent RPL | |||
| instances. A RPL node may belong to multiple RPL instances, and may | Instances. A RPL node may belong to multiple RPL Instances, and it | |||
| act as a router in some and as a leaf in others. This document | may act as a router in some and as a leaf in others. This document | |||
| describes how a single instance behaves. | describes how a single instance behaves. | |||
| There are two types of RPL Instances: local and global. RPL divides | There are two types of RPL Instances: Local and Global. RPL divides | |||
| the RPLInstanceID space between Global and Local instances to allow | the RPLInstanceID space between Global and Local instances to allow | |||
| for both coordinated and unilateral allocation of RPLInstanceIDs. | for both coordinated and unilateral allocation of RPLInstanceIDs. | |||
| Global RPL Instances are coordinated, have one or more DODAGs, and | Global RPL Instances are coordinated, have one or more DODAGs, and | |||
| are typically long-lived. Local RPL Instances are always a single | are typically long-lived. Local RPL Instances are always a single | |||
| DODAG whose singular root owns the corresponding DODAGID and | DODAG whose singular root owns the corresponding DODAGID and | |||
| allocates the Local RPLInstanceID in a unilateral manner. Local RPL | allocates the local RPLInstanceID in a unilateral manner. Local RPL | |||
| Instances can be used, for example, for constructing DODAGs in | Instances can be used, for example, for constructing DODAGs in | |||
| support of a future on-demand routing solution. The mode of | support of a future on-demand routing solution. The mode of | |||
| operation of Local RPL Instances is out of scope for this | operation of Local RPL Instances is out of scope for this | |||
| specification and may be described in other companion specifications. | specification and may be described in other companion specifications. | |||
| The definition and provisioning of RPL instances are out of scope for | The definition and provisioning of RPL Instances are out of scope for | |||
| this specification. Guidelines may be application and implementation | this specification. Guidelines may be application and implementation | |||
| specific, and are expected to be elaborated in future companion | specific, and they are expected to be elaborated in future companion | |||
| specifications. Those operations are expected to be such that data | specifications. Those operations are expected to be such that data | |||
| packets coming from the outside of the RPL network can unambiguously | packets coming from the outside of the RPL network can unambiguously | |||
| be associated to at least one RPL instance, and be safely routed over | be associated to at least one RPL Instance and be safely routed over | |||
| any instance that would match the packet. | any instance that would match the packet. | |||
| Control and data packets within RPL network are tagged to | Control and data packets within RPL network are tagged to | |||
| unambiguously identify what RPL Instance they are part of. | unambiguously identify of which RPL Instance they are a part. | |||
| Every RPL control message has a RPLInstanceID field. Some RPL | Every RPL control message has a RPLInstanceID field. Some RPL | |||
| control messages, when referring to a local RPLInstanceID as defined | control messages, when referring to a local RPLInstanceID as defined | |||
| below, may also include a DODAGID. | below, may also include a DODAGID. | |||
| Data packets that flow within the RPL network expose the | Data packets that flow within the RPL network expose the | |||
| RPLInstanceID as part of the RPL Packet Information that RPL | RPLInstanceID as part of the RPL Packet Information that RPL | |||
| requires, as further described in Section 11.2. For data packets | requires, as further described in Section 11.2. For data packets | |||
| coming from outside the RPL network, the ingress router determines | coming from outside the RPL network, the ingress router determines | |||
| the RPLInstanceID and places it into the resulting packet that it | the RPLInstanceID and places it into the resulting packet that it | |||
| injects into the RPL network. | injects into the RPL network. | |||
| 5.1. RPL Instance ID | 5.1. RPL Instance ID | |||
| A global RPLInstanceID MUST be unique to the whole LLN. Mechanisms | A global RPLInstanceID MUST be unique to the whole LLN. Mechanisms | |||
| for allocating and provisioning global RPLInstanceID are out of scope | for allocating and provisioning global RPLInstanceID are out of scope | |||
| for this specification. There can be up to 128 global instance in | for this specification. There can be up to 128 Global instance in | |||
| the whole network. Local instances are always used in conjunction | the whole network. Local instances are always used in conjunction | |||
| with a DODAGID (which is either given explicitly or implicitly in | with a DODAGID (which is either given explicitly or implicitly in | |||
| some cases), and up 64 local instances per DODAGID can be supported. | some cases), and up 64 Local instances per DODAGID can be supported. | |||
| Local instances are allocated and managed by the node that owns the | Local instances are allocated and managed by the node that owns the | |||
| DODAGID, without any explicit coordination with other nodes, as | DODAGID, without any explicit coordination with other nodes, as | |||
| further detailed below. | further detailed below. | |||
| A global RPLinstanceID is encoded in a RPLinstanceID field as | A global RPLInstanceID is encoded in a RPLInstanceID field as | |||
| follows: | follows: | |||
| 0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 | |||
| +-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
| |0| ID | Global RPLinstanceID in 0..127 | |0| ID | Global RPLInstanceID in 0..127 | |||
| +-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
| Figure 4: RPL Instance ID field format for global instances | Figure 4: RPLInstanceID Field Format for Global Instances | |||
| A local RPLInstanceID is autoconfigured by the node that owns the | A local RPLInstanceID is autoconfigured by the node that owns the | |||
| DODAGID and it MUST be unique for that DODAGID. The DODAGID used to | DODAGID and it MUST be unique for that DODAGID. The DODAGID used to | |||
| configure the local RPLInstanceID MUST be a reachable IPv6 address of | configure the local RPLInstanceID MUST be a reachable IPv6 address of | |||
| the node, and MUST be used as an endpoint of all communications | the node, and it MUST be used as an endpoint of all communications | |||
| within that local instance. | within that Local instance. | |||
| A local RPLinstanceID is encoded in a RPLinstanceID field as follows: | A local RPLInstanceID is encoded in a RPLInstanceID field as follows: | |||
| 0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 | |||
| +-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
| |1|D| ID | Local RPLInstanceID in 0..63 | |1|D| ID | Local RPLInstanceID in 0..63 | |||
| +-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
| Figure 5: RPL Instance ID field format for local instances | Figure 5: RPLInstanceID Field Format for Local Instances | |||
| The D flag in a Local RPLInstanceID is always set to 0 in RPL control | The 'D' flag in a local RPLInstanceID is always set to 0 in RPL | |||
| messages. It is used in data packets to indicate whether the DODAGID | control messages. It is used in data packets to indicate whether the | |||
| is the source or the destination of the packet. If the D flag is set | DODAGID is the source or the destination of the packet. If the 'D' | |||
| to 1 then the destination address of the IPv6 packet MUST be the | flag is set to 1, then the destination address of the IPv6 packet | |||
| DODAGID. If the D flag is cleared then the source address of the | MUST be the DODAGID. If the 'D' flag is cleared, then the source | |||
| IPv6 packet MUST be the DODAGID. | address of the IPv6 packet MUST be the DODAGID. | |||
| For example, consider a node A that is the DODAG Root of a local RPL | For example, consider a Node A that is the DODAG root of a Local RPL | |||
| Instance, and has allocated a local RPLInstanceID. By definition, | Instance, and has allocated a local RPLInstanceID. By definition, | |||
| all traffic traversing that local RPL Instance will either originate | all traffic traversing that Local RPL Instance will either originate | |||
| or terminate at node A. The DODAGID in this case will be the | or terminate at Node A. In this case, the DODAGID will be the | |||
| reachable IPv6 address of node A, and all traffic will contain the | reachable IPv6 address of Node A. All traffic will contain the | |||
| address of node A, thus the DODAGID, in either the source or | address of Node A, and thus the DODAGID, in either the source or | |||
| destination address. Thus the Local RPLInstanceID may indicate that | destination address. Thus, the local RPLInstanceID may indicate that | |||
| the DODAGID is equivalent to either the source address or the | the DODAGID is equivalent to either the source address or the | |||
| destination address by setting the D flag appropriately. | destination address by setting the 'D' flag appropriately. | |||
| 6. ICMPv6 RPL Control Message | 6. ICMPv6 RPL Control Message | |||
| This document defines the RPL Control Message, a new ICMPv6 [RFC4443] | This document defines the RPL control message, a new ICMPv6 [RFC4443] | |||
| message. A RPL Control Message is identified by a code, and composed | 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. | of a base that depends on the code (and a series of options). | |||
| Most RPL Control Message have the scope of a link. The only | Most RPL control messages have the scope of a link. The only | |||
| exception is for the DAO / DAO-ACK messages in non-storing mode, | exception is for the DAO / DAO-ACK messages in Non-Storing mode, | |||
| which are exchanged using a unicast address over multiple hops and | which are exchanged using a unicast address over multiple hops and | |||
| thus uses global or unique-local addresses for both the source and | thus uses global or unique-local addresses for both the source and | |||
| destination addresses. For all other RPL Control messages, the | destination addresses. For all other RPL control messages, the | |||
| source address is a link-local address, and the destination address | source address is a link-local address, and the destination address | |||
| is either the all-RPL-nodes multicast address or a link-local unicast | is either the all-RPL-nodes multicast address or a link-local unicast | |||
| address of the destination. The all-RPL-nodes multicast address is a | address of the destination. The all-RPL-nodes multicast address is a | |||
| new address with a requested value of FF02::1A (to be confirmed by | new address with a value of ff02::1a. | |||
| IANA). | ||||
| In accordance with [RFC4443], the RPL Control Message consists of an | In accordance with [RFC4443], the RPL Control Message consists of an | |||
| ICMPv6 header followed by a message body. The message body is | ICMPv6 header followed by a message body. The message body is | |||
| comprised of a message base and possibly a number of options as | comprised of a message base and possibly a number of options as | |||
| illustrated in Figure 6. | illustrated in Figure 6. | |||
| 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 | | |||
| skipping to change at page 31, line 43 ¶ | skipping to change at page 30, line 47 ¶ | |||
| . Base . | . Base . | |||
| . . | . . | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| . Option(s) . | . Option(s) . | |||
| . . | . . | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 6: RPL Control Message | Figure 6: 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 Type | |||
| requested Type of 155 (to be confirmed by IANA). | of 155. | |||
| The Code field identifies the type of RPL Control Message. This | The Code field identifies the type of RPL control message. This | |||
| document defines codes for the following RPL Control Message types | document defines codes for the following RPL control message types | |||
| (all codes are to be confirmed by IANA Section 20.2): | (see Section 20.2)): | |||
| o 0x00: DODAG Information Solicitation (Section 6.2) | o 0x00: DODAG Information Solicitation (Section 6.2) | |||
| o 0x01: DODAG Information Object (Section 6.3) | o 0x01: DODAG Information Object (Section 6.3) | |||
| o 0x02: Destination Advertisement Object (Section 6.4) | o 0x02: Destination Advertisement Object (Section 6.4) | |||
| o 0x03: Destination Advertisement Object Acknowledgment | o 0x03: Destination Advertisement Object Acknowledgment | |||
| (Section 6.5) | (Section 6.5) | |||
| skipping to change at page 32, line 30 ¶ | skipping to change at page 31, line 34 ¶ | |||
| o 0x83: Secure Destination Advertisement Object Acknowledgment | o 0x83: Secure Destination Advertisement Object Acknowledgment | |||
| (Section 6.5.2) | (Section 6.5.2) | |||
| o 0x8A: Consistency Check (Section 6.6) | o 0x8A: Consistency Check (Section 6.6) | |||
| If a node receives a RPL control message with an unknown Code field, | If a node receives a RPL control message with an unknown Code field, | |||
| the node MUST discard the message without any further processing, MAY | the node MUST discard the message without any further processing, MAY | |||
| raise a management alert, and MUST NOT send any messages in response. | raise a management alert, and MUST NOT send any messages in response. | |||
| The checksum is computed as specified in [RFC4443]. It is set to | The checksum is computed as specified in [RFC4443]. It is set to | |||
| zero for the RPL security operations specified below, and computed | zero for the RPL security operations specified below and computed | |||
| once the rest of the content of the RPL message including the | once the rest of the content of the RPL message including the | |||
| security fields is all set. | security fields is all set. | |||
| The high order bit (0x80) of the code denotes whether the RPL message | The high order bit (0x80) of the code denotes whether the RPL message | |||
| has security enabled. Secure RPL messages have a format to support | has security enabled. Secure RPL messages have a format to support | |||
| confidentiality and integrity, illustrated in Figure 7. | confidentiality and integrity, illustrated in Figure 7. | |||
| 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 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| skipping to change at page 33, line 26 ¶ | skipping to change at page 32, line 26 ¶ | |||
| . . | . . | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| . Option(s) . | . Option(s) . | |||
| . . | . . | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 7: Secure RPL Control Message | Figure 7: Secure RPL Control Message | |||
| The remainder of this section describes the currently defined RPL | The remainder of this section describes the currently defined RPL | |||
| Control Message Base formats followed by the currently defined RPL | control message Base formats followed by the currently defined RPL | |||
| Control Message Options. | Control Message options. | |||
| 6.1. RPL Security Fields | 6.1. RPL Security Fields | |||
| Each RPL message has a secure variant. The secure variants provide | Each RPL message has a secure variant. The secure variants provide | |||
| integrity and replay protection as well as optional confidentiality | integrity and replay protection as well as optional confidentiality | |||
| and delay protection. Because security covers the base message as | and delay protection. Because security covers the base message as | |||
| well as options, in secured messages the security information lies | well as options, in secured messages the security information lies | |||
| between the checksum and base, as shown in Figure 7. | between the checksum and base, as shown in Figure 7. | |||
| The level of security and the algorithms in use are indicated in the | The level of security and the algorithms in use are indicated in the | |||
| skipping to change at page 34, line 4 ¶ | skipping to change at page 33, line 16 ¶ | |||
| 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 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| |T| Reserved | Algorithm |KIM|Resvd| LVL | Flags | | |T| Reserved | Algorithm |KIM|Resvd| LVL | Flags | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Counter | | | Counter | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| . Key Identifier . | . Key Identifier . | |||
| . . | . . | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 8: Security Section | Figure 8: Security Section | |||
| Message authentication codes (MACs) and signatures provide | Message Authentication Codes (MACs) and signatures provide | |||
| authentication over the entire unsecured ICMPv6 RPL control message, | authentication over the entire unsecured ICMPv6 RPL control message, | |||
| including the Security section with all fields defined, but with the | including the Security section with all fields defined, but with the | |||
| ICMPv6 checksum temporarily set to zero. Encryption provides | ICMPv6 checksum temporarily set to zero. Encryption provides | |||
| confidentiality of the secured RPL ICMPv6 message starting at the | confidentiality of the secured RPL ICMPv6 message starting at the | |||
| first byte after the Security section and continuing to the last byte | first byte after the Security section and continuing to the last byte | |||
| of the packet. The security transformation yields a secured ICMPv6 | of the packet. The security transformation yields a secured ICMPv6 | |||
| RPL message with the inclusion of the cryptographic fields (MAC, | RPL message with the inclusion of the cryptographic fields (MAC, | |||
| signature, etc.). In other words, the security transformation itself | signature, etc.). In other words, the security transformation itself | |||
| (e.g. the Signature and/or Algorithm in use) will detail how to | (e.g., the Signature and/or Algorithm in use) will detail how to | |||
| incorporate the cryptographic fields into the secured packet. The | incorporate the cryptographic fields into the secured packet. The | |||
| Security section itself does not explicitly carry those cryptographic | Security section itself does not explicitly carry those cryptographic | |||
| fields. Use of the Security section is further detailed in | fields. Use of the Security section is further detailed in Sections | |||
| Section 19 and Section 10. | 19 and 10. | |||
| Counter is Time (T): If the Counter is Time flag is set then the | Counter is Time (T): If the counter's Time flag is set, then the | |||
| Counter field is a timestamp. If the flag is cleared then the | Counter field is a timestamp. If the flag is cleared, then the | |||
| Counter is an incrementing counter. Section 10.5 describes the | counter is an incrementing counter. Section 10.5 describes the | |||
| details of the 'T' flag and Counter field. | details of the 'T' flag and Counter field. | |||
| Reserved: 7-bit unused field. The field MUST be initialized to zero | Reserved: 7-bit unused field. The field MUST be initialized to zero | |||
| by the sender and MUST be ignored by the receiver. | by the sender and MUST be ignored by the receiver. | |||
| Security Algorithm (Algorithm): The Security Algorithm field | Security Algorithm (Algorithm): The Security Algorithm field | |||
| specifies the encryption, MAC, and signature scheme the network | specifies the encryption, MAC, and signature scheme the network | |||
| uses. Supported values of this field are as follows: | uses. Supported values of this field are as follows: | |||
| +-----------+-------------------+------------------------+ | +-----------+-------------------+------------------------+ | |||
| | Algorithm | Encryption/MAC | Signature | | | Algorithm | Encryption/MAC | Signature | | |||
| +-----------+-------------------+------------------------+ | +-----------+-------------------+------------------------+ | |||
| | 0 | CCM with AES-128 | RSA with SHA-256 | | | 0 | CCM with AES-128 | RSA with SHA-256 | | |||
| | 1-255 | Unassigned | Unassigned | | | 1-255 | Unassigned | Unassigned | | |||
| +-----------+-------------------+------------------------+ | +-----------+-------------------+------------------------+ | |||
| Figure 9: Security Algorithm (Algorithm) Encoding | Figure 9: Security Algorithm (Algorithm) Encoding | |||
| Section 10.9 describes the algorithms in greater detail. | Section 10.9 describes the algorithms in greater detail. | |||
| Key Identifier Mode (KIM): The Key Identifier Mode is a 2-bit field | Key Identifier Mode (KIM): The Key Identifier Mode is a 2-bit field | |||
| that indicates whether the key used for packet protection is | that indicates whether the key used for packet protection is | |||
| determined implicitly or explicitly and indicates the | determined implicitly or explicitly and indicates the | |||
| particular representation of the Key Identifier field. The Key | particular representation of the Key Identifier field. The Key | |||
| Identifier Mode is set one of the values from the table below: | Identifier Mode is set one of the values from the table below: | |||
| +------+-----+-----------------------------+------------+ | +------+-----+-----------------------------+------------+ | |||
| | Mode | KIM | Meaning | Key | | | Mode | KIM | Meaning | Key | | |||
| | | | | Identifier | | | | | | Identifier | | |||
| | | | | Length | | | | | | Length | | |||
| | | | | (octets) | | | | | | (octets) | | |||
| skipping to change at page 35, line 42 ¶ | skipping to change at page 35, line 42 ¶ | |||
| | 3 | 11 | Node's signature key used. | 0/9 | | | 3 | 11 | Node's signature key used. | 0/9 | | |||
| | | | If packet is encrypted, | | | | | If packet is encrypted, | | |||
| | | | it uses a group key, Key | | | | | | it uses a group key, Key | | | |||
| | | | Index and Key Source | | | | | | Index and Key Source | | | |||
| | | | specify key. | | | | | | specify key. | | | |||
| | | | | | | | | | | | | |||
| | | | Key Source may be present. | | | | | | Key Source may be present. | | | |||
| | | | Key Index may be present. | | | | | | Key Index may be present. | | | |||
| +------+-----+-----------------------------+------------+ | +------+-----+-----------------------------+------------+ | |||
| Figure 10: Key Identifier Mode (KIM) Encoding | Figure 10: Key Identifier Mode (KIM) Encoding | |||
| In Mode 3 (KIM=11), the presence or absence of the Key Source | In Mode 3 (KIM=11), the presence or absence of the Key Source and Key | |||
| and Key Identifier depends on the Security Level (LVL) | Identifier depends on the Security Level (LVL) described below. If | |||
| described below. If the Security Level indicates there is | the Security Level indicates there is encryption, then the fields are | |||
| encryption, then the fields are present; if it indicates there | present; if it indicates there is no encryption, then the fields are | |||
| is no encryption, then the fields are not present. | not present. | |||
| Resvd: 3-bit unused field. The field MUST be initialized to zero by | Resvd: 3-bit unused field. The field MUST be initialized to zero by | |||
| the sender and MUST be ignored by the receiver. | the sender and MUST be ignored by the receiver. | |||
| Security Level (LVL): The Security Level is a 3-bit field that | Security Level (LVL): The Security Level is a 3-bit field that | |||
| indicates the provided packet protection. This value can be | indicates the provided packet protection. This value can be | |||
| adapted on a per-packet basis and allows for varying levels of | adapted on a per-packet basis and allows for varying levels of | |||
| data authenticity and, optionally, for data confidentiality. | data authenticity and, optionally, for data confidentiality. | |||
| The KIM field indicates whether signatures are used and the | The KIM field indicates whether signatures are used and the | |||
| meaning of the Level field. Note that the assigned values of | meaning of the Level field. Note that the assigned values of | |||
| Security Level are not necessarily ordered-- a higher value of | Security Level are not necessarily ordered -- a higher value of | |||
| LVL does not necessarily equate to increased security. The | LVL does not necessarily equate to increased security. The | |||
| Security Level is set to one of the values in the tables below: | Security Level is set to one of the values in the tables below: | |||
| +---------------------------+ | +---------------------------+ | |||
| | KIM=0,1,2 | | | KIM=0,1,2 | | |||
| +-------+--------------------+------+ | +-------+--------------------+------+ | |||
| | LVL | Attributes | MAC | | | LVL | Attributes | MAC | | |||
| | | | Len | | | | | Len | | |||
| +-------+--------------------+------+ | +-------+--------------------+------+ | |||
| | 0 | MAC-32 | 4 | | | 0 | MAC-32 | 4 | | |||
| skipping to change at page 36, line 44 ¶ | skipping to change at page 36, line 41 ¶ | |||
| | LVL | Attributes | Sig | | | LVL | Attributes | Sig | | |||
| | | | Len | | | | | Len | | |||
| +-------+---------------+-----+ | +-------+---------------+-----+ | |||
| | 0 | Sign-3072 | 384 | | | 0 | Sign-3072 | 384 | | |||
| | 1 | ENC-Sign-3072 | 384 | | | 1 | ENC-Sign-3072 | 384 | | |||
| | 2 | Sign-2048 | 256 | | | 2 | Sign-2048 | 256 | | |||
| | 3 | ENC-Sign-2048 | 256 | | | 3 | ENC-Sign-2048 | 256 | | |||
| | 4-7 | Unassigned | N/A | | | 4-7 | Unassigned | N/A | | |||
| +-------+---------------+-----+ | +-------+---------------+-----+ | |||
| Figure 11: Security Level (LVL) Encoding | Figure 11: Security Level (LVL) Encoding | |||
| The MAC attribute indicates that the message has a Message | The MAC attribute indicates that the message has a MAC of the | |||
| Authentication Code of the specified length. The ENC attribute | specified length. The ENC attribute indicates that the message is | |||
| indicates that the message is encrypted. The Sign attribute | encrypted. The Sign attribute indicates that the message has a | |||
| indicates that the message has a signature of the specified | signature of the specified length. | |||
| length. | ||||
| Flags: 8-bit unused field reserved for flags. The field MUST be | Flags: 8-bit unused field reserved for flags. The field MUST be | |||
| initialized to zero by the sender and MUST be ignored by the | initialized to zero by the sender and MUST be ignored by the | |||
| receiver. | receiver. | |||
| Counter: The Counter field indicates the non-repeating 4-octet value | Counter: The Counter field indicates the non-repeating 4-octet value | |||
| used to construct the cryptographic mechanism that implements | used to construct the cryptographic mechanism that implements | |||
| packet protection and allows for the provision of semantic | packet protection and allows for the provision of semantic | |||
| security. See Section 10.9.1. | security. See Section 10.9.1. | |||
| Key Identifier: The Key Identifier field indicates which key was | Key Identifier: The Key Identifier field indicates which key was used | |||
| used to protect the packet. This field provides various levels | to protect the packet. This field provides various levels of | |||
| of granularity of packet protection, including peer-to-peer | granularity of packet protection, including peer-to-peer keys, | |||
| keys, group keys, and signature keys. This field is | group keys, and signature keys. This field is represented as | |||
| represented as indicated by the Key Identifier Mode field and | indicated by the Key Identifier Mode field and is formatted as | |||
| is formatted as follows: | 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 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| . Key Source . | . Key Source . | |||
| . . | . . | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| . Key Index . | . Key Index . | |||
| . . | . . | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 12: Key Identifier | Figure 12: Key Identifier | |||
| Key Source: The Key Source field, when present, indicates the | Key Source: The Key Source field, when present, indicates the logical | |||
| logical identifier of the originator of a group key. | identifier of the originator of a group key. When present, | |||
| When present this field is 8 bytes in length. | this field is 8 bytes in length. | |||
| Key Index: The Key Index field, when present, allows unique | Key Index: The Key Index field, when present, allows unique | |||
| identification of different keys with the same | identification of different keys with the same originator. It | |||
| originator. It is the responsibility of each key | is the responsibility of each key originator to make sure that | |||
| originator to make sure that actively used keys that it | actively used keys that it issues have distinct key indices and | |||
| issues have distinct key indices and that all key indices | that all key indices have a value unequal to 0x00. Value 0x00 | |||
| have a value unequal to 0x00. Value 0x00 is reserved for | is reserved for a preinstalled, shared key. When present this | |||
| a pre-installed, shared key. When present this field is | field is 1 byte in length. | |||
| 1 byte in length. | ||||
| Unassigned bits of the Security section are reserved. They MUST be | Unassigned bits of the Security section are reserved. They MUST be | |||
| set to zero on transmission and MUST be ignored on reception. | set to zero on transmission and MUST be ignored on reception. | |||
| 6.2. DODAG Information Solicitation (DIS) | 6.2. DODAG Information Solicitation (DIS) | |||
| The DODAG Information Solicitation (DIS) message may be used to | The DODAG Information Solicitation (DIS) message may be used to | |||
| solicit a DODAG Information Object from a RPL node. Its use is | solicit a DODAG Information Object from a RPL node. Its use is | |||
| analogous to that of a Router Solicitation as specified in IPv6 | analogous to that of a Router Solicitation as specified in IPv6 | |||
| Neighbor Discovery; a node may use DIS to probe its neighborhood for | Neighbor Discovery; a node may use DIS to probe its neighborhood for | |||
| skipping to change at page 38, line 23 ¶ | skipping to change at page 38, line 23 ¶ | |||
| 6.2.1. Format of the DIS Base Object | 6.2.1. Format of the DIS Base Object | |||
| 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 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Flags | Reserved | Option(s)... | | Flags | Reserved | Option(s)... | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 13: The DIS Base Object | Figure 13: The DIS Base Object | |||
| Flags: 8-bit unused field reserved for flags. The field MUST be | Flags: 8-bit unused field reserved for flags. The field MUST be | |||
| initialized to zero by the sender and MUST be ignored by the | initialized to zero by the sender and MUST be ignored by the | |||
| receiver. | receiver. | |||
| Reserved: 8-bit unused field. The field MUST be initialized to zero | Reserved: 8-bit unused field. The field MUST be initialized to zero | |||
| by the sender and MUST be ignored by the receiver. | by the sender and MUST be ignored by the receiver. | |||
| Unassigned bits of the DIS Base are reserved. They MUST be set to | Unassigned bits of the DIS Base are reserved. They MUST be set to | |||
| zero on transmission and MUST be ignored on reception. | zero on transmission and MUST be ignored on reception. | |||
| 6.2.2. Secure DIS | 6.2.2. Secure DIS | |||
| A Secure DIS message follows the format in Figure 7, where the base | A Secure DIS message follows the format in Figure 7, where the base | |||
| format is the DIS message shown in Figure 13. | format is the DIS message shown in Figure 13. | |||
| skipping to change at page 39, line 28 ¶ | skipping to change at page 39, line 28 ¶ | |||
| + DODAGID + | + DODAGID + | |||
| | | | | | | |||
| + + | + + | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Option(s)... | | Option(s)... | |||
| +-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
| Figure 14: The DIO Base Object | Figure 14: The DIO Base Object | |||
| Grounded (G): The Grounded (G) flag indicates whether the DODAG | Grounded (G): The Grounded 'G' flag indicates whether the DODAG | |||
| advertised can satisfy the application-defined goal. If the | advertised can satisfy the application-defined goal. If the | |||
| flag is set, the DODAG is grounded. If the flag is cleared, | flag is set, the DODAG is grounded. If the flag is cleared, | |||
| the DODAG is floating. | the DODAG is floating. | |||
| Mode of Operation (MOP): The Mode of Operation (MOP) field | Mode of Operation (MOP): The Mode of Operation (MOP) field identifies | |||
| identifies the mode of operation of the RPL Instance as | the mode of operation of the RPL Instance as administratively | |||
| administratively provisioned at and distributed by the DODAG | provisioned at and distributed by the DODAG root. All nodes | |||
| Root. All nodes who join the DODAG must be able to honor the | who join the DODAG must be able to honor the MOP in order to | |||
| MOP in order to fully participate as a router, or else they | fully participate as a router, or else they must only join as a | |||
| must only join as a leaf. MOP is encoded as in the figure | leaf. MOP is encoded as in the figure below: | |||
| below: | ||||
| +-----+-------------------------------------------------+ | +-----+-----------------------------------------------------+ | |||
| | MOP | Meaning | | | MOP | Description | | |||
| +-----+-------------------------------------------------+ | +-----+-----------------------------------------------------+ | |||
| | 0 | No downward routes maintained by RPL | | | 0 | No Downward routes maintained by RPL | | |||
| | 1 | Non storing mode | | | 1 | Non-Storing Mode of Operation | | |||
| | 2 | Storing without multicast support | | | 2 | Storing Mode of Operation with no multicast support | | |||
| | 3 | Storing with multicast support | | | 3 | Storing Mode of Operation with multicast support | | |||
| | | | | | | | | |||
| | | All other values are unassigned | | | | All other values are unassigned | | |||
| +-----+-------------------------------------------------+ | +-----+-----------------------------------------------------+ | |||
| A value of 0 indicates that destination advertisement messages | A value of 0 indicates that destination advertisement messages are | |||
| are disabled and the DODAG maintains only upward routes | disabled and the DODAG maintains only Upward routes. | |||
| Figure 15: Mode of Operation (MOP) Encoding | Figure 15: Mode of Operation (MOP) Encoding | |||
| DODAGPreference (Prf): A 3-bit unsigned integer that defines how | DODAGPreference (Prf): A 3-bit unsigned integer that defines how | |||
| preferable the root of this DODAG is compared to other DODAG | preferable the root of this DODAG is compared to other DODAG | |||
| roots within the instance. DAGPreference ranges from 0x00 | roots within the instance. DAGPreference ranges from 0x00 | |||
| (least preferred) to 0x07 (most preferred). The default is 0 | (least preferred) to 0x07 (most preferred). The default is 0 | |||
| (least preferred). Section 8.2 describes how DAGPreference | (least preferred). Section 8.2 describes how DAGPreference | |||
| affects DIO processing. | affects DIO processing. | |||
| Version Number: 8-bit unsigned integer set by the DODAG root to the | Version Number: 8-bit unsigned integer set by the DODAG root to the | |||
| DODAGVersionNumber. Section 8.2 describes the rules for DODAG | DODAGVersionNumber. Section 8.2 describes the rules for | |||
| Version numbers and how they affect DIO processing. | DODAGVersionNumbers and how 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 8.2 describes how Rank is set | sending the DIO message. Section 8.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 of | |||
| which RPL Instance the DODAG is part of. | which RPL Instance the DODAG is a part. | |||
| 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 9. | The details of this process are described in Section 9. | |||
| Flags: 8-bit unused field reserved for flags. The field MUST be | Flags: 8-bit unused field reserved for flags. The field MUST be | |||
| initialized to zero by the sender and MUST be ignored by the | initialized to zero by the sender and MUST be ignored by the | |||
| receiver. | receiver. | |||
| Reserved: 8-bit unused field. The field MUST be initialized to zero | Reserved: 8-bit unused field. The field MUST be initialized to zero | |||
| by the sender and MUST be ignored by the receiver. | by the sender and MUST be ignored by the receiver. | |||
| DODAGID: 128-bit IPv6 address set by a DODAG root which uniquely | DODAGID: 128-bit IPv6 address set by a DODAG root that uniquely | |||
| identifies a DODAG. The DODAGID MUST be a routable IPv6 | identifies a DODAG. The DODAGID MUST be a routable IPv6 | |||
| address belonging to the DODAG root. | address belonging to the DODAG root. | |||
| Unassigned bits of the DIO Base are reserved. They MUST be set to | Unassigned bits of the DIO Base are reserved. They MUST be set to | |||
| zero on transmission and MUST be ignored on reception. | zero on transmission and MUST be ignored on reception. | |||
| 6.3.2. Secure DIO | 6.3.2. Secure DIO | |||
| A Secure DIO message follows the format in Figure 7, where the base | A Secure DIO message follows the format in Figure 7, where the base | |||
| format is the DIO message shown in Figure 14. | format is the DIO message shown in Figure 14. | |||
| skipping to change at page 41, line 23 ¶ | skipping to change at page 41, line 23 ¶ | |||
| A Secure DIO message follows the format in Figure 7, where the base | A Secure DIO message follows the format in Figure 7, where the base | |||
| format is the DIO message shown in Figure 14. | format is the DIO message shown in Figure 14. | |||
| 6.3.3. DIO Options | 6.3.3. DIO Options | |||
| The DIO message MAY carry valid options. | The DIO message MAY carry valid options. | |||
| This specification allows for the DIO message to carry the following | This specification allows for the DIO message to carry the following | |||
| options: | options: | |||
| 0x00 Pad1 | 0x00 Pad1 | |||
| 0x01 PadN | 0x01 PadN | |||
| 0x02 Metric Container | 0x02 DAG Metric Container | |||
| 0x03 Routing Information | 0x03 Routing Information | |||
| 0x04 DODAG Configuration | 0x04 DODAG Configuration | |||
| 0x08 Prefix Information | 0x08 Prefix Information | |||
| 6.4. Destination Advertisement Object (DAO) | 6.4. Destination Advertisement Object (DAO) | |||
| The Destination Advertisement Object (DAO) is used to propagate | The Destination Advertisement Object (DAO) is used to propagate | |||
| destination information upwards along the DODAG. In storing mode the | destination information Upward along the DODAG. In Storing mode, the | |||
| DAO message is unicast by the child to the selected parent(s). In | DAO message is unicast by the child to the selected parent(s). In | |||
| non-storing mode the DAO message is unicast to the DODAG root. The | Non-Storing mode, the DAO message is unicast to the DODAG root. The | |||
| DAO message may optionally, upon explicit request or error, be | DAO message may optionally, upon explicit request or error, be | |||
| acknowledged by its destination with a Destination Advertisement | acknowledged by its destination with a Destination Advertisement | |||
| Acknowledgement (DAO-ACK) message back to the sender of the DAO. | Acknowledgement (DAO-ACK) message back to the sender of the DAO. | |||
| 6.4.1. Format of the DAO Base Object | 6.4.1. Format of the DAO Base Object | |||
| 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 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | RPLInstanceID |K|D| Flags | Reserved | DAOSequence | | | RPLInstanceID |K|D| Flags | Reserved | DAOSequence | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| + + | + + | |||
| | | | | | | |||
| + DODAGID* + | + DODAGID* + | |||
| | | | | | | |||
| skipping to change at page 42, line 25 ¶ | skipping to change at page 42, line 28 ¶ | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Option(s)... | | Option(s)... | |||
| +-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
| The '*' denotes that the DODAGID is not always present, as described | The '*' denotes that the DODAGID is not always present, as described | |||
| below. | below. | |||
| Figure 16: The DAO Base Object | Figure 16: The DAO Base Object | |||
| RPLInstanceID: 8-bit field indicating the topology instance | RPLInstanceID: 8-bit field indicating the topology instance | |||
| associated with the DODAG, as learned from the DIO. | associated with the DODAG, as learned from the DIO. | |||
| K: The 'K' flag indicates that the recipient is expected to send a | K: The 'K' flag indicates that the recipient is expected to send a | |||
| DAO-ACK back. (See Section 9.3 | DAO-ACK back. (See Section 9.3.) | |||
| D: The 'D' flag indicates that the DODAGID field is present. This | D: The 'D' flag indicates that the DODAGID field is present. This | |||
| flag MUST be set when a local RPLInstanceID is used. | flag MUST be set when a local RPLInstanceID is used. | |||
| Flags: The 6-bits remaining unused in the Flags field are reserved | Flags: The 6 bits remaining unused in the Flags field are reserved | |||
| for flags. The field MUST be initialized to zero by the sender | for flags. The field MUST be initialized to zero by the sender | |||
| and MUST be ignored by the receiver. | and MUST be ignored by the receiver. | |||
| Reserved: 8-bit unused field. The field MUST be initialized to zero | Reserved: 8-bit unused field. The field MUST be initialized to zero | |||
| by the sender and MUST be ignored by the receiver. | by the sender and MUST be ignored by the receiver. | |||
| DAOSequence: Incremented at each unique DAO message from a node and | DAOSequence: Incremented at each unique DAO message from a node and | |||
| echoed in the DAO-ACK message. | echoed in the DAO-ACK message. | |||
| DODAGID (optional): 128-bit unsigned integer set by a DODAG root | DODAGID (optional): 128-bit unsigned integer set by a DODAG root that | |||
| which uniquely identifies a DODAG. This field is only present | uniquely identifies a DODAG. This field is only present when | |||
| when the 'D' flag is set. This field is typically only present | the 'D' flag is set. This field is typically only present when | |||
| when a local RPLInstanceID is in use, in order to identify the | a local RPLInstanceID is in use, in order to identify the | |||
| DODAGID that is associated with the RPLInstanceID. When a | DODAGID that is associated with the RPLInstanceID. When a | |||
| global RPLInstanceID is in use this field need not be present. | global RPLInstanceID is in use, this field need not be present. | |||
| Unassigned bits of the DAO Base are reserved. They MUST be set to | Unassigned bits of the DAO Base are reserved. They MUST be set to | |||
| zero on transmission and MUST be ignored on reception. | zero on transmission and MUST be ignored on reception. | |||
| 6.4.2. Secure DAO | 6.4.2. Secure DAO | |||
| A Secure DAO message follows the format in Figure 7, where the base | A Secure DAO message follows the format in Figure 7, where the base | |||
| format is the DAO message shown in Figure 16. | format is the DAO message shown in Figure 16. | |||
| 6.4.3. DAO Options | 6.4.3. DAO Options | |||
| skipping to change at page 43, line 17 ¶ | skipping to change at page 43, line 19 ¶ | |||
| A Secure DAO message follows the format in Figure 7, where the base | A Secure DAO message follows the format in Figure 7, where the base | |||
| format is the DAO message shown in Figure 16. | format is the DAO message shown in Figure 16. | |||
| 6.4.3. DAO Options | 6.4.3. DAO Options | |||
| The DAO message MAY carry valid options. | The DAO message MAY carry valid options. | |||
| This specification allows for the DAO message to carry the following | This specification allows for the DAO message to carry the following | |||
| options: | options: | |||
| 0x00 Pad1 | 0x00 Pad1 | |||
| 0x01 PadN | 0x01 PadN | |||
| 0x05 RPL Target | 0x05 RPL Target | |||
| 0x06 Transit Information | 0x06 Transit Information | |||
| 0x09 RPL Target Descriptor | 0x09 RPL Target Descriptor | |||
| A special case of the DAO message, termed a No-Path, is used in | A special case of the DAO message, termed a No-Path, is used in | |||
| storing mode to clear downward routing state that has been | Storing mode to clear Downward routing state that has been | |||
| provisioned through DAO operation. The No-Path carries a Target | provisioned through DAO operation. The No-Path carries a Target | |||
| option and an associated Transit Information option with a lifetime | option and an associated Transit Information option with a lifetime | |||
| of 0x00000000 to indicate a loss of reachability to that Target. | of 0x00000000 to indicate a loss of reachability to that Target. | |||
| 6.5. Destination Advertisement Object Acknowledgement (DAO-ACK) | 6.5. Destination Advertisement Object Acknowledgement (DAO-ACK) | |||
| The DAO-ACK message is sent as a unicast packet by a DAO recipient (a | The DAO-ACK message is sent as a unicast packet by a DAO recipient (a | |||
| DAO parent or DODAG root) in response to a unicast DAO message. | DAO parent or DODAG root) in response to a unicast DAO message. | |||
| 6.5.1. Format of the DAO-ACK Base Object | 6.5.1. Format of the DAO-ACK Base Object | |||
| skipping to change at page 44, line 25 ¶ | skipping to change at page 44, line 28 ¶ | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Option(s)... | | Option(s)... | |||
| +-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
| The '*' denotes that the DODAGID is not always present, as described | The '*' denotes that the DODAGID is not always present, as described | |||
| below. | below. | |||
| Figure 17: The DAO ACK Base Object | Figure 17: The DAO ACK Base Object | |||
| RPLInstanceID: 8-bit field indicating the topology instance | RPLInstanceID: 8-bit field indicating the topology instance | |||
| associated with the DODAG, as learned from the DIO. | associated with the DODAG, as learned from the DIO. | |||
| D: The 'D' flag indicates that the DODAGID field is present. This | D: The 'D' flag indicates that the DODAGID field is present. This | |||
| would typically only be set when a local RPLInstanceID is used. | would typically only be set when a local RPLInstanceID is used. | |||
| Flags: The 7-bits remaining unused in the Flags field are reserved | Reserved: The 7-bit field, reserved for flags. | |||
| for flags. The field MUST be initialized to zero by the sender | ||||
| and MUST be ignored by the receiver. | ||||
| DAOSequence: Incremented at each DAO message from a node, and echoed | DAOSequence: Incremented at each DAO message from a node, and echoed | |||
| in the DAO-ACK by the recipient. The DAOSequence is used to | in the DAO-ACK by the recipient. The DAOSequence is used to | |||
| correlate a DAO message and a DAO ACK message and is not to be | correlate a DAO message and a DAO ACK message and is not to be | |||
| confused with the Transit Information option Path Sequence that | confused with the Transit Information option Path Sequence that | |||
| is associated to a given target Down the DODAG. | is associated to a given Target Down the DODAG. | |||
| Status: Indicates the completion. Status 0 is defined as | Status: Indicates the completion. Status 0 is defined as unqualified | |||
| unqualified acceptance in this specification. The remaining | acceptance in this specification. The remaining status values | |||
| status values are reserved as rejection codes. No rejection | are reserved as rejection codes. No rejection status codes are | |||
| status codes are defined in this specification, although status | defined in this specification, although status codes SHOULD be | |||
| codes SHOULD be allocated according to the following guidelines | allocated according to the following guidelines in future | |||
| in future specifications: | specifications: | |||
| 0: Unqualified acceptance (i.e. the node receiving the | ||||
| DAO-ACK is not rejected). | ||||
| 1-127: Not an outright rejection; the node sending the DAO- | 0: Unqualified acceptance (i.e., the node receiving the | |||
| ACK is willing to act as a Parent, but the receiving | DAO-ACK is not rejected). | |||
| node is suggested to find and use an alternate parent | ||||
| instead. | ||||
| 127-255: Rejection; the node sending the DAO-ACK is unwilling | ||||
| to act as a Parent. | ||||
| DODAGID (optional): 128-bit unsigned integer set by a DODAG root | 1-127: Not an outright rejection; the node sending the DAO-ACK | |||
| which uniquely identifies a DODAG. This field is only present | is willing to act as a parent, but the receiving node is | |||
| when the 'D' flag is set. This field is typically only present | suggested to find and use an alternate parent instead. | |||
| when a local RPLInstanceID is in use, in order to identify the | 127-255: Rejection; the node sending the DAO-ACK is unwilling to | |||
| DODAGID that is associated with the RPLInstanceID. When a | act as a parent. | |||
| global RPLInstanceID is in use this field need not be present. | ||||
| DODAGID (optional): 128-bit unsigned integer set by a DODAG root that | ||||
| uniquely identifies a DODAG. This field is only present | ||||
| when the 'D' flag is set. Typically, this field is 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-ACK Base are reserved. They MUST be set | Unassigned bits of the DAO-ACK Base are reserved. They MUST be set | |||
| to zero on transmission and MUST be ignored on reception. | to zero on transmission and MUST be ignored on reception. | |||
| 6.5.2. Secure DAO-ACK | 6.5.2. Secure DAO-ACK | |||
| A Secure DAO-ACK message follows the format in Figure 7, where the | A Secure DAO-ACK message follows the format in Figure 7, where the | |||
| base format is the DAO-ACK message shown in Figure 17. | base format is the DAO-ACK message shown in Figure 17. | |||
| 6.5.3. DAO-ACK Options | 6.5.3. DAO-ACK Options | |||
| This specification does not define any options to be carried by the | This specification does not define any options to be carried by the | |||
| DAO-ACK message. | DAO-ACK message. | |||
| 6.6. Consistency Check (CC) | 6.6. Consistency Check (CC) | |||
| The CC message is used to check secure message counters and issue | The CC message is used to check secure message counters and issue | |||
| challenge/responses. A CC message MUST be sent as a secured RPL | challenge-responses. A CC message MUST be sent as a secured RPL | |||
| message. | message. | |||
| 6.6.1. Format of the CC Base Object | 6.6.1. Format of the CC Base Object | |||
| 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 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | RPLInstanceID |R| Flags | CC Nonce | | | RPLInstanceID |R| Flags | CC Nonce | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| + + | + + | |||
| | | | | | | |||
| + DODAGID + | + DODAGID + | |||
| | | | | | | |||
| skipping to change at page 46, line 24 ¶ | skipping to change at page 46, line 27 ¶ | |||
| + + | + + | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Destination Counter | | | Destination Counter | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Option(s)... | | Option(s)... | |||
| +-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
| Figure 18: The CC Base Object | Figure 18: The CC Base Object | |||
| RPLInstanceID: 8-bit field indicating the topology instance | RPLInstanceID: 8-bit field indicating the topology instance | |||
| associated with the DODAG, as learned from the DIO. | associated with the DODAG, as learned from the DIO. | |||
| R: The 'R' flag indicates whether the CC message is a response. A | R: The 'R' flag indicates whether the CC message is a response. A | |||
| message with the 'R' flag cleared is a request; a message with | message with the 'R' flag cleared is a request; a message with | |||
| the 'R' flag set is a response. | the 'R' flag set is a response. | |||
| Flags: The 7-bits remaining unused in the Flags field are reserved | Flags: The 7 bits remaining unused in the Flags field are reserved | |||
| for flags. The field MUST be initialized to zero by the sender | for flags. The field MUST be initialized to zero by the sender | |||
| and MUST be ignored by the receiver. | and MUST be ignored by the receiver. | |||
| CC Nonce: 16-bit unsigned integer set by a CC request. The | CC Nonce: 16-bit unsigned integer set by a CC request. The | |||
| corresponding CC response includes the same CC nonce value as | corresponding CC response includes the same CC nonce value as | |||
| the request. | the request. | |||
| Destination Counter: 32-bit unsigned integer value indicating the | DODAGID: 128-bit field, contains the identifier of the DODAG root. | |||
| sender's estimate of the destination's current security Counter | ||||
| Destination Counter: 32-bit unsigned integer value indicating the | ||||
| sender's estimate of the destination's current security counter | ||||
| value. If the sender does not have an estimate, it SHOULD set | value. If the sender does not have an estimate, it SHOULD set | |||
| the Destination Counter field to zero. | the Destination Counter field to zero. | |||
| Unassigned bits of the CC Base are reserved. They MUST be set to | Unassigned bits of the CC Base are reserved. They MUST be set to | |||
| zero on transmission and MUST be ignored on reception. | zero on transmission and MUST be ignored on reception. | |||
| The Destination Counter value allows new or recovered nodes to | The Destination Counter value allows new or recovered nodes to | |||
| resynchronize through CC message exchanges. This is important to | resynchronize through CC message exchanges. This is important to | |||
| ensure that a Counter value is not repeated for a given security key | ensure that a Counter value is not repeated for a given security key | |||
| even in the event of devices recovering from a failure that created a | even in the event of devices recovering from a failure that created a | |||
| loss of Counter state. For example, where a CC request or other RPL | loss of Counter state. For example, where a CC request or other RPL | |||
| message is received with an initialized Counter within the message | message is received with an initialized counter within the message | |||
| security section, the provision of the Incoming Counter within the CC | Security section, the provision of the Incoming Counter within the CC | |||
| response message allows the requesting node to reset its Outgoing | response message allows the requesting node to reset its Outgoing | |||
| Counter to a value greater than the last value received by the | Counter to a value greater than the last value received by the | |||
| responding node; the Incoming Counter will also be updated from the | responding node; the Incoming Counter will also be updated from the | |||
| received CC response. | received CC response. | |||
| 6.6.2. CC Options | 6.6.2. CC Options | |||
| This specification allows for the CC message to carry the following | This specification allows for the CC message to carry the following | |||
| options: | options: | |||
| 0x00 Pad1 | 0x00 Pad1 | |||
| 0x01 PadN | 0x01 PadN | |||
| 6.7. RPL Control Message Options | 6.7. RPL Control Message Options | |||
| 6.7.1. RPL Control Message Option Generic Format | 6.7.1. RPL Control Message Option Generic Format | |||
| RPL Control Message Options all follow this 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 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - | |||
| | Option Type | Option Length | Option Data | | Option Type | Option Length | Option Data | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - | |||
| Figure 19: RPL Option Generic Format | Figure 19: RPL Option Generic Format | |||
| Option Type: 8-bit identifier of the type of option. The Option | Option Type: 8-bit identifier of the type of option. The Option Type | |||
| Type values are to be confirmed by IANA Section 20.4. | values are assigned by IANA (see Section 20.4.) | |||
| Option Length: 8-bit unsigned integer, representing the length in | Option Length: 8-bit unsigned integer, representing the length in | |||
| octets of the option, not including the Option Type and Length | octets of the option, not including the Option Type and Length | |||
| fields. | fields. | |||
| Option Data: A variable length field that contains data specific to | Option Data: A variable length field that contains data specific to | |||
| the option. | the option. | |||
| When processing a RPL message containing an option for which the | When processing a RPL message containing an option for which the | |||
| Option 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 option, correctly handling any remaining options in the | the following option, correctly handling any remaining options in the | |||
| message. | message. | |||
| RPL message options may have alignment requirements. Following the | RPL message options may have alignment requirements. Following the | |||
| convention in IPv6, options with alignment requirements are aligned | convention in IPv6, options with alignment requirements are aligned | |||
| skipping to change at page 48, line 15 ¶ | skipping to change at page 48, line 26 ¶ | |||
| of the header, for n = 1, 2, 4, or 8). | of the header, for n = 1, 2, 4, or 8). | |||
| 6.7.2. Pad1 | 6.7.2. Pad1 | |||
| The Pad1 option MAY be present in DIS, DIO, DAO, DAO-ACK, and CC | The Pad1 option MAY be present in DIS, DIO, DAO, DAO-ACK, and CC | |||
| messages, and its format is as follows: | 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 = 0x00 | | |||
| +-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
| Figure 20: Format of the Pad 1 Option | Figure 20: Format of the Pad1 Option | |||
| The Pad1 option is used to insert a single octet of padding into the | The Pad1 option is used to insert a single octet of padding into the | |||
| message to enable options alignment. If more than one octet of | message to enable options alignment. If more than one octet of | |||
| padding is required, the PadN option should be used rather than | padding is required, the PadN option should be used rather than | |||
| multiple Pad1 options. | 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. | |||
| 6.7.3. PadN | 6.7.3. PadN | |||
| The PadN option MAY be present in DIS, DIO, DAO, DAO-ACK, and CC | The PadN option MAY be present in DIS, DIO, DAO, DAO-ACK, and CC | |||
| messages, and its format is as follows: | 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 | Option Length | 0x00 Padding... | | Type = 0x01 | Option Length | 0x00 Padding... | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - | |||
| Figure 21: Format of the Pad N Option | Figure 21: Format of the Pad N Option | |||
| The PadN option is used to insert two or more octets of padding into | The PadN option is used to insert two or more octets of padding into | |||
| the message to enable options alignment. PadN Option data MUST be | the message to enable options alignment. PadN option data MUST be | |||
| ignored by the receiver. | ignored by the receiver. | |||
| Option Type: 0x01 (to be confirmed by IANA) | Option Type: 0x01 | |||
| Option Length: For N octets of padding, where 2 <= N <= 7, the | ||||
| Option Length field contains the value N-2. An Option Length | ||||
| of 0 indicates a total padding of 2 octets. An Option Length | ||||
| of 5 indicates a total padding of 7 octets, which is the | ||||
| maximum padding size allowed with the PadN option. | ||||
| Option Data: For N (N > 1) octets of padding, the Option Data | Option Length: For N octets of padding, where 2 <= N <= 7, the Option | |||
| Length field contains the value N-2. An Option Length of 0 | ||||
| indicates a total padding of 2 octets. An Option Length of 5 | ||||
| indicates a total padding of 7 octets, which is the maximum | ||||
| padding size allowed with the PadN option. | ||||
| Option Data: For N (N > 1) octets of padding, the Option Data | ||||
| consists of N-2 zero-valued octets. | consists of N-2 zero-valued octets. | |||
| 6.7.4. Metric Container | 6.7.4. DAG Metric Container | |||
| The Metric Container option MAY be present in DIO or DAO messages, | The DAG Metric Container option MAY be present in DIO or DAO | |||
| and its format is as follows: | 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 | Option Length | Metric Data | | Type = 0x02 | Option Length | Metric Data | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - | |||
| Figure 22: Format of the Metric Container Option | Figure 22: Format of the DAG Metric Container Option | |||
| The Metric Container is used to report metrics along the DODAG. The | The DAG Metric Container is used to report metrics along the DODAG. | |||
| Metric Container may contain a number of discrete node, link, and | The DAG Metric Container may contain a number of discrete node, link, | |||
| aggregate path metrics and constraints specified in | and aggregate path metrics and constraints specified in [RFC6551] as | |||
| [I-D.ietf-roll-routing-metrics] as chosen by the implementer. | chosen by the implementer. | |||
| The Metric Container MAY appear more than once in the same RPL | The DAG Metric Container MAY appear more than once in the same RPL | |||
| control message, for example to accommodate a use case where the | control message, for example, to accommodate a use case where the | |||
| Metric Data is longer than 256 bytes. More information is in | Metric Data is longer than 256 bytes. More information is in | |||
| [I-D.ietf-roll-routing-metrics]. | [RFC6551]. | |||
| The processing and propagation of the Metric Container is governed by | The processing and propagation of the DAG Metric Container is | |||
| implementation specific policy functions. | governed by implementation specific policy functions. | |||
| Option Type: 0x02 (to be confirmed by IANA) | Option Type: 0x02 | |||
| Option Length: The Option Length field contains the length in octets | Option Length: The Option Length field contains the length in octets | |||
| of the Metric Data. | of the Metric Data. | |||
| Metric Data: The order, content, and coding of the Metric Container | Metric Data: The order, content, and coding of the DAG Metric | |||
| data is as specified in [I-D.ietf-roll-routing-metrics]. | Container data is as specified in [RFC6551]. | |||
| 6.7.5. Route Information | 6.7.5. Route Information | |||
| The Route Information option MAY be present in DIO messages, and | The Route Information Option (RIO) MAY be present in DIO messages, | |||
| carries the same information as the IPv6 Neighbor Discovery (ND) | and it carries the same information as the IPv6 Neighbor Discovery | |||
| Route Information option as defined in [RFC4191]. The root of a | (ND) RIO as defined in [RFC4191]. The root of a DODAG is | |||
| DODAG is authoritative for setting that information and the | authoritative for setting that information and the information is | |||
| information is unchanged as propagated down the DODAG. A RPL router | unchanged as propagated down the DODAG. A RPL router may trivially | |||
| may trivially transform it back into a ND option to advertise in its | transform it back into an ND option to advertise in its own RAs so a | |||
| own RAs so a node attached to the RPL router will end up using the | node attached to the RPL router will end up using the DODAG for which | |||
| DODAG for which the root has the best preference for the destination | the root has the best preference for the destination of a packet. In | |||
| of a packet. In addition to the existing ND semantics, it is | addition to the existing ND semantics, it is possible for an | |||
| possible for an Objective function to use this information to favor a | Objective Function to use this information to favor a DODAG whose | |||
| DODAG which root is most preferred for a specific destination. The | root is most preferred for a specific destination. The format of the | |||
| format of the option is modified slightly (Type, Length, Prefix) in | option is modified slightly (Type, Length, Prefix) in order to be | |||
| order to be carried as a RPL option as follows: | 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 | Option Length | Prefix Length |Resvd|Prf|Resvd| | | Type = 0x03 | Option Length | Prefix Length |Resvd|Prf|Resvd| | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Route Lifetime | | | Route Lifetime | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| . Prefix (Variable Length) . | . Prefix (Variable Length) . | |||
| . . | . . | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 23: Format of the Route Information Option | Figure 23: Format of the Route Information Option | |||
| The Route Information option is used to indicate that connectivity to | The RIO is used to indicate that connectivity to the specified | |||
| the specified destination prefix is available from the DODAG root. | destination prefix is available from the DODAG root. | |||
| In the event that a RPL Control Message may need to specify | In the event that a RPL control message may need to specify | |||
| connectivity to more than one destination, the Route Information | connectivity to more than one destination, the RIO may be repeated. | |||
| option may be repeated. | ||||
| [RFC4191] should be consulted as the authoritative reference with | [RFC4191] should be consulted as the authoritative reference with | |||
| respect to the Route Information option. The field descriptions are | respect to the RIO. The field descriptions are transcribed here for | |||
| transcribed here for convenience: | convenience: | |||
| Option Type: 0x03 (to be confirmed by IANA) | ||||
| Option Length: Variable, length of the option in octets excluding | Option Type: 0x03 | |||
| the Type and Length fields. Note that this length is expressed | Option Length: Variable, length of the option in octets excluding the | |||
| in units of single-octets, unlike in IPv6 ND. | 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 | 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 that are valid. The value ranges from 0 to 128. | |||
| The Prefix field has the number of bytes inferred from the | The Prefix field has the number of bytes inferred from the | |||
| Option Length field, that must be at least the Prefix Length. | Option Length field, that must be at least the Prefix Length. | |||
| Note that in RPL this means that the Prefix field may have | Note that in RPL, this means that the Prefix field may have | |||
| lengths other than 0, 8, or 16. | lengths other than 0, 8, or 16. | |||
| Prf: 2-bit signed integer. The Route Preference indicates whether | Prf: 2-bit signed integer. The Route Preference indicates whether to | |||
| to prefer the router associated with this prefix over others, | prefer the router associated with this prefix over others, when | |||
| when multiple identical prefixes (for different routers) have | multiple identical prefixes (for different routers) have been | |||
| been received. If the Reserved (10) value is received, the | received. If the Reserved (10) value is received, the RIO MUST | |||
| Route Information Option MUST be ignored. As per [RFC4191], | be ignored. Per [RFC4191], the Reserved (10) value MUST NOT be | |||
| the Reserved (10) value MUST NOT be sent. ([RFC4191] restricts | sent. ([RFC4191] restricts the Preference to just three values | |||
| the Preference to just three values to reinforce that it is not | to reinforce that it is not a metric.) | |||
| a metric). | ||||
| Resvd: Two 3-bit unused fields. They MUST be initialized to zero by | Resvd: Two 3-bit unused fields. They MUST be initialized to zero by | |||
| the sender and MUST be ignored by the receiver. | the sender and MUST be ignored by the receiver. | |||
| Route Lifetime 32-bit unsigned integer. The length of time in | Route Lifetime: 32-bit unsigned integer. The length of time in | |||
| seconds (relative to the time the packet is sent) that the | seconds (relative to the time the packet is sent) that the | |||
| prefix is valid for route determination. A value of all one | prefix is valid for route determination. A value of all one | |||
| bits (0xffffffff) represents infinity. | bits (0xFFFFFFFF) represents infinity. | |||
| Prefix Variable-length field containing an IP address or a prefix of | Prefix: Variable-length field containing an IP address or a prefix of | |||
| an IPv6 address. The Prefix Length field contains the number | an IPv6 address. The Prefix Length field contains the number | |||
| of valid leading bits in the prefix. The bits in the prefix | of valid leading bits in the prefix. The bits in the prefix | |||
| after the prefix length (if any) are reserved and MUST be | after the prefix length (if any) are reserved and MUST be | |||
| initialized to zero by the sender and ignored by the receiver. | initialized to zero by the sender and ignored by the receiver. | |||
| Note that in RPL this field may have lengths other than 0, 8, | Note that in RPL, this field may have lengths other than 0, 8, | |||
| or 16. | or 16. | |||
| Unassigned bits of the Route Information option are reserved. They | Unassigned bits of the RIO are reserved. They MUST be set to zero on | |||
| MUST be set to zero on transmission and MUST be ignored on reception. | transmission and MUST be ignored on reception. | |||
| 6.7.6. DODAG Configuration | 6.7.6. DODAG Configuration | |||
| The DODAG Configuration option MAY be present in DIO messages, and | The DODAG Configuration option MAY be present in DIO messages, and | |||
| its format is as follows: | 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 |Opt Length = 14| Flags |A| PCS | DIOIntDoubl. | | | Type = 0x04 |Opt Length = 14| Flags |A| PCS | DIOIntDoubl. | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | DIOIntMin. | DIORedun. | MaxRankIncrease | | | DIOIntMin. | DIORedun. | MaxRankIncrease | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | MinHopRankIncrease | OCP | | | MinHopRankIncrease | OCP | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Reserved | Def. Lifetime | Lifetime Unit | | | Reserved | Def. Lifetime | Lifetime Unit | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 24: Format of the DODAG Configuration Option | Figure 24: Format of the DODAG Configuration Option | |||
| The DODAG Configuration option is used to distribute configuration | The DODAG Configuration option is used to distribute configuration | |||
| information for DODAG Operation through the DODAG. | information for DODAG Operation through the DODAG. | |||
| The information communicated in this option is generally static and | The information communicated in this option is generally static and | |||
| unchanging within the DODAG, therefore it is not necessary to include | unchanging within the DODAG, therefore it is not necessary to include | |||
| in every DIO. This information is configured at the DODAG Root and | in every DIO. This information is configured at the DODAG root and | |||
| distributed throughout the DODAG with the DODAG Configuration Option. | distributed throughout the DODAG with the DODAG Configuration option. | |||
| Nodes other than the DODAG Root MUST NOT modify this information when | Nodes other than the DODAG root MUST NOT modify this information when | |||
| propagating the DODAG Configuration option. This option MAY be | propagating the DODAG Configuration option. This option MAY be | |||
| included occasionally by the DODAG Root (as determined by the DODAG | 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 | root), and MUST be included in response to a unicast request, e.g. a | |||
| unicast DODAG Information Solicitation (DIS) message. | unicast DODAG Information Solicitation (DIS) message. | |||
| Option Type: 0x04 (to be confirmed by IANA) | Option Type: 0x04 | |||
| Option Length: 14 | Option Length: 14 | |||
| Flags: The 4-bits remaining unused in the Flags field are reserved | Flags: The 4-bits remaining unused in the Flags field are reserved | |||
| for flags. The field MUST be initialized to zero by the sender | for flags. The field MUST be initialized to zero by the sender | |||
| and MUST be ignored by the receiver. | and MUST be ignored by the receiver. | |||
| Authentication Enabled (A): One bit flag describing the security | Authentication Enabled (A): 1-bit flag describing the security mode | |||
| mode of the network. The bit describe whether a node must | of the network. The bit describes whether a node must | |||
| authenticate with a key authority before joining the network as | authenticate with a key authority before joining the network as | |||
| a router. If the DIO is not a secure DIO, the 'A' bit MUST be | a router. If the DIO is not a secure DIO, the 'A' bit MUST be | |||
| zero. | zero. | |||
| Path Control Size (PCS): 3-bit unsigned integer used to configure | Path Control Size (PCS): 3-bit unsigned integer used to configure the | |||
| the number of bits that may be allocated to the Path Control | number of bits that may be allocated to the Path Control field | |||
| field (see Section 9.9). Note that when PCS is consulted to | (see Section 9.9). Note that when PCS is consulted to | |||
| determine the width of the Path Control field a value of 1 is | determine the width of the Path Control field, a value of 1 is | |||
| added, i.e. a PCS value of 0 results in 1 active bit in the | added, i.e., a PCS value of 0 results in 1 active bit in the | |||
| Path Control field. The default value of PCS is | Path Control field. The default value of PCS is | |||
| DEFAULT_PATH_CONTROL_SIZE. | DEFAULT_PATH_CONTROL_SIZE. | |||
| DIOIntervalDoublings: 8-bit unsigned integer used to configure Imax | DIOIntervalDoublings: 8-bit unsigned integer used to configure Imax | |||
| of the DIO trickle timer (see Section 8.3.1). The default | of the DIO Trickle timer (see Section 8.3.1). The default | |||
| value of DIOIntervalDoublings is | value of DIOIntervalDoublings is | |||
| DEFAULT_DIO_INTERVAL_DOUBLINGS. | DEFAULT_DIO_INTERVAL_DOUBLINGS. | |||
| DIOIntervalMin: 8-bit unsigned integer used to configure Imin of the | DIOIntervalMin: 8-bit unsigned integer used to configure Imin of the | |||
| DIO trickle timer (see Section 8.3.1). The default value of | DIO Trickle timer (see Section 8.3.1). The default value of | |||
| DIOIntervalMin is DEFAULT_DIO_INTERVAL_MIN. | DIOIntervalMin is DEFAULT_DIO_INTERVAL_MIN. | |||
| DIORedundancyConstant: 8-bit unsigned integer used to configure k of | DIORedundancyConstant: 8-bit unsigned integer used to configure k of | |||
| the DIO trickle timer (see Section 8.3.1). The default value | the DIO Trickle timer (see Section 8.3.1). The default value | |||
| of DIORedundancyConstant is DEFAULT_DIO_REDUNDANCY_CONSTANT. | of DIORedundancyConstant is DEFAULT_DIO_REDUNDANCY_CONSTANT. | |||
| MaxRankIncrease: 16-bit unsigned integer used to configure | MaxRankIncrease: 16-bit unsigned integer used to configure | |||
| DAGMaxRankIncrease, the allowable increase in rank in support | DAGMaxRankIncrease, the allowable increase in Rank in support | |||
| of local repair. If DAGMaxRankIncrease is 0 then this | of local repair. If DAGMaxRankIncrease is 0, then this | |||
| mechanism is disabled. | mechanism is disabled. | |||
| MinHopRankInc 16-bit unsigned integer used to configure | MinHopRankIncrease: 16-bit unsigned integer used to configure | |||
| MinHopRankIncrease as described in Section 3.5.1. The default | MinHopRankIncrease as described in Section 3.5.1. The default | |||
| value of MinHopRankInc is DEFAULT_MIN_HOP_RANK_INCREASE. | value of MinHopRankInc is DEFAULT_MIN_HOP_RANK_INCREASE. | |||
| Default Lifetime: 8-bit unsigned integer. This is the lifetime that | Objective Code Point (OCP): 16-bit unsigned integer. The OCP field | |||
| identifies the OF and is managed by the IANA. | ||||
| Reserved: 7-bit unused field. The field MUST be initialized to zero | ||||
| by the sender and MUST be ignored by the receiver. | ||||
| Default Lifetime: 8-bit unsigned integer. This is the lifetime that | ||||
| is used as default for all RPL routes. It is expressed in | is used as default for all RPL routes. It is expressed in | |||
| units of Lifetime Units, e.g. the default lifetime in seconds | units of Lifetime Units, e.g., the default lifetime in seconds | |||
| is (Default Lifetime) * (Lifetime Unit). | is (Default Lifetime) * (Lifetime Unit). | |||
| Lifetime Unit: 16-bit unsigned integer. Provides the unit in | Lifetime Unit: 16-bit unsigned integer. Provides the unit in seconds | |||
| seconds that is used to express route lifetimes in RPL. For | that is used to express route lifetimes in RPL. For very | |||
| very stable networks, it can be hours to days. | stable networks, it can be hours to days. | |||
| Objective Code Point (OCP) 16-bit unsigned integer. The OCP field | ||||
| identifies the OF and is managed by the IANA. | ||||
| 6.7.7. RPL Target | 6.7.7. RPL Target | |||
| The RPL Target option MAY be present in DAO messages, and its format | The RPL Target option MAY be present in DAO messages, and its format | |||
| is as follows: | 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 = 5 | Option Length | Flags | Prefix Length | | | Type = 0x05 | Option Length | Flags | Prefix Length | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| + + | + + | |||
| | Target Prefix (Variable Length) | | | Target Prefix (Variable Length) | | |||
| . . | . . | |||
| . . | . . | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 25: Format of the RPL Target Option | Figure 25: Format of the RPL Target Option | |||
| The RPL Target Option is used to indicate a target IPv6 address, | The RPL Target option is used to indicate a Target IPv6 address, | |||
| prefix, or multicast group that is reachable or queried along the | prefix, or multicast group that is reachable or queried along the | |||
| DODAG. In a DAO, the RPL Target option indicates reachability. | DODAG. In a DAO, the RPL Target option indicates reachability. | |||
| A RPL Target Option May optionally be paired with a RPL Target | A RPL Target option MAY optionally be paired with a RPL Target | |||
| Descriptor Option (Figure 30) that qualifies the target. | Descriptor option (Figure 30) that qualifies the target. | |||
| A set of one or more Transit Information options (Section 6.7.8) MAY | A set of one or more Transit Information options (Section 6.7.8) MAY | |||
| directly follow a set of one or more Target option in a DAO message | directly follow a set of one or more Target options in a DAO message | |||
| (where each Target Option MAY be paired with a RPL Target Descriptor | (where each Target option MAY be paired with a RPL Target Descriptor | |||
| Option as above). The structure of the DAO message, detailing how | option as above). The structure of the DAO message, detailing how | |||
| Target options are used in conjunction with Transit Information | Target options are used in conjunction with Transit Information | |||
| options, is further described in Section 9.4. | options is further described in Section 9.4. | |||
| The RPL Target option may be repeated as necessary to indicate | The RPL Target option may be repeated as necessary to indicate | |||
| multiple targets. | multiple targets. | |||
| Option Type: 0x05 (to be confirmed by IANA) | Option Type: 0x05 | |||
| Option Length: Variable, length of the option in octets excluding | Option Length: Variable, length of the option in octets excluding the | |||
| the Type and Length fields. | Type and Length fields. | |||
| Flags: 8-bit unused field reserved for flags. The field MUST be | Flags: 8-bit unused field reserved for flags. The field MUST be | |||
| initialized to zero by the sender and MUST be ignored by the | initialized to zero by the sender and MUST be ignored by the | |||
| receiver. | receiver. | |||
| Prefix Length: 8-bit unsigned integer. Number of valid leading bits | Prefix Length: 8-bit unsigned integer. Number of valid leading bits | |||
| in the IPv6 Prefix. | in the IPv6 Prefix. | |||
| Target Prefix: Variable-length field identifying an IPv6 destination | Target Prefix: Variable-length field identifying an IPv6 destination | |||
| address, prefix, or multicast group. The Prefix Length field | address, prefix, or multicast group. The Prefix Length field | |||
| contains the number of valid leading bits in the prefix. The | contains the number of valid leading bits in the prefix. The | |||
| bits in the prefix after the prefix length (if any) are | bits in the prefix after the prefix length (if any) are | |||
| reserved and MUST be set to zero on transmission and MUST be | reserved and MUST be set to zero on transmission and MUST be | |||
| ignored on receipt. | ignored on receipt. | |||
| 6.7.8. Transit Information | 6.7.8. Transit Information | |||
| The Transit Information option MAY be present in DAO messages, and | The Transit Information option MAY be present in DAO messages, and | |||
| its format is as follows: | 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 = 6 | Option Length |E| Flags | Path Control | | | Type = 0x06 | Option Length |E| Flags | Path Control | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Path Sequence | Path Lifetime | | | | Path Sequence | Path Lifetime | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | |||
| | | | | | | |||
| + + | + + | |||
| | | | | | | |||
| + Parent Address* + | + Parent Address* + | |||
| | | | | | | |||
| + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| The '*' denotes that the Parent Address is not always present, as | The '*' denotes that the DODAG Parent Address subfield is not always | |||
| described below. | present, as described below. | |||
| Figure 26: Format of the Transit Information option | Figure 26: Format of the Transit Information Option | |||
| The Transit Information option is used for a node to indicate | The Transit Information option is used for a node to indicate | |||
| attributes for a path to one or more destinations. The destinations | attributes for a path to one or more destinations. The destinations | |||
| are indicated by one or more Target options that immediately precede | are indicated by one or more Target options that immediately precede | |||
| the Transit Information option(s). | the Transit Information option(s). | |||
| The Transit Information option can be used for a node to indicate its | The Transit Information option can be used for a node to indicate its | |||
| DODAG parents to an ancestor that is collecting DODAG routing | DODAG parents to an ancestor that is collecting DODAG routing | |||
| information, typically for the purpose of constructing source routes. | information, typically, for the purpose of constructing source | |||
| In the non-storing mode of operation this ancestor will be the DODAG | routes. In the Non-Storing mode of operation, this ancestor will be | |||
| Root, and this option is carried by the DAO message. In the storing | the DODAG root, and this option is carried by the DAO message. In | |||
| mode of operation the Parent Address is not needed, since the DAO | the Storing mode of operation, the DODAG Parent Address subfield is | |||
| message is sent directly to the parent. The option length is used to | not needed, since the DAO message is sent directly to the parent. | |||
| determine whether the Parent Address is present or not. | The option length is used to determine whether or not the DODAG | |||
| Parent Address subfield is present. | ||||
| A non-storing node that has more than one DAO parent MAY include a | 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- | Transit Information option for each DAO parent as part of the non- | |||
| storing destination advertisement operation. The node may distribute | storing destination advertisement operation. The node may distribute | |||
| the bits in the Path Control field among different groups of DAO | the bits in the Path Control field among different groups of DAO | |||
| parents in order to signal a preference among parents. That | parents in order to signal a preference among parents. That | |||
| preference may influence the decision of the DODAG root when | preference may influence the decision of the DODAG root when | |||
| selecting among the alternate parents/paths for constructing downward | selecting among the alternate parents/paths for constructing Downward | |||
| routes. | routes. | |||
| One or more Transit Information options MUST be preceded by one or | One or more Transit Information options MUST be preceded by one or | |||
| more RPL Target options. In this manner the RPL Target option | more RPL Target options. In this manner, the RPL Target option | |||
| indicates the child node, and the Transit Information option(s) | indicates the child node, and the Transit Information option(s) | |||
| enumerate the DODAG parents. The structure of the DAO message, | enumerates the DODAG parents. The structure of the DAO message, | |||
| further detailing how Target options are used in conjunction with | further detailing how Target options are used in conjunction with | |||
| Transit Information options, is further described in Section 9.4. | Transit Information options, is further described in Section 9.4. | |||
| A typical non-storing node will use multiple Transit Information | A typical non-storing node will use multiple Transit Information | |||
| options, and it will send the DAO message thus formed directly to the | options, and it will send the DAO message thus formed directly to the | |||
| root. A typical storing node will use one Transit Information option | root. A typical storing node will use one Transit Information option | |||
| with no parent field, and will send the DAO message thus formed, with | with no parent field and will send the DAO message thus formed, with | |||
| additional adjustments to Path Control as detailed later, to one or | additional adjustments, to Path Control as detailed later, to one or | |||
| multiple parents. | multiple parents. | |||
| For example, in a non-storing mode of operation let Tgt(T) denote a | For example, in a Non-Storing mode of operation let Tgt(T) denote a | |||
| Target option for a target T. Let Trnst(P) denote a Transit | Target option for a Target T. Let Trnst(P) denote a Transit | |||
| Information option that contains a parent address P. Consider the | Information option that contains a parent address P. Consider the | |||
| case of a non-storing node N that advertises the self-owned targets | case of a non-storing Node N that advertises the self-owned targets | |||
| N1 and N2 and has parents P1, P2, and P3. In that case the DAO | N1 and N2 and has parents P1, P2, and P3. In that case, the DAO | |||
| message would be expected to contain the sequence ( (Tgt(N1), | message would be expected to contain the sequence ((Tgt(N1), | |||
| Tgt(N2)), (Trnst(P1), Trnst(P2), Trnst(P3)) ), such that the group of | Tgt(N2)), (Trnst(P1), Trnst(P2), Trnst(P3))), such that the group of | |||
| Target options {N1, N2} are described by the Transit Information | Target options {N1, N2} is described by the Transit Information | |||
| options as having the parents {P1, P2, P3}. The non-storing node | options as having the parents {P1, P2, P3}. The non-storing node | |||
| would then address that DAO message directly to the DODAG root, and | would then address that DAO message directly to the DODAG root and | |||
| forward that DAO message through one of the DODAG parents P1, P2, or | forward that DAO message through one of the DODAG parents: P1, P2, or | |||
| P3. | P3. | |||
| Option Type: 0x06 (to be confirmed by IANA) | Option Type: 0x06 | |||
| Option Length: Variable, depending on whether or not Parent Address | Option Length: Variable, depending on whether or not the DODAG Parent | |||
| is present. | Address subfield is present. | |||
| External (E): 1-bit flag. The 'E' flag is set to indicate that the | External (E): 1-bit flag. The 'E' flag is set to indicate that the | |||
| parent router redistributes external targets into the RPL | parent router redistributes external targets into the RPL | |||
| network. An external target is a target that has been learned | network. An external Target is a Target that has been learned | |||
| through an alternate protocol. The external targets are listed | through an alternate protocol. The external targets are listed | |||
| in the target options that immediately precede the Transit | in the Target options that immediately precede the Transit | |||
| Information option. An external target is not expected to | Information option. An external Target is not expected to | |||
| support RPL messages and options. | support RPL messages and options. | |||
| Flags: The 7-bits remaining unused in the Flags field are reserved | Flags: The 7 bits remaining unused in the Flags field are reserved | |||
| for flags. The field MUST be initialized to zero by the sender | for flags. The field MUST be initialized to zero by the sender | |||
| and MUST be ignored by the receiver. | and MUST be ignored by the receiver. | |||
| Path Control: 8-bit bitfield. The Path Control field limits the | Path Control: 8-bit bit field. The Path Control field limits the | |||
| number of DAO-Parents to which a DAO message advertising | number of DAO parents to which a DAO message advertising | |||
| connectivity to a specific destination may be sent, as well as | connectivity to a specific destination may be sent, as well as | |||
| providing some indication of relative preference. The limit | providing some indication of relative preference. The limit | |||
| provides some bound on overall DAO message fan-out in the LLN. | provides some bound on overall DAO message fan-out in the LLN. | |||
| The assignment and ordering of the bits in the path control | The assignment and ordering of the bits in the Path Control | |||
| also serves to communicate preference. Not all of these bits | also serves to communicate preference. Not all of these bits | |||
| may be enabled as according to the PCS in the DODAG | may be enabled as according to the PCS in the DODAG | |||
| Configuration. The Path Control field is divided into four | Configuration. The Path Control field is divided into four | |||
| subfields which contain two bits each: PC1, PC2, PC3, and PC4, | subfields that contain two bits each: PC1, PC2, PC3, and PC4, | |||
| as illustrated in Figure 27. The subfields are ordered by | as illustrated in Figure 27. The subfields are ordered by | |||
| preference, with PC1 being the most preferred and PC4 being the | preference, with PC1 being the most preferred and PC4 being the | |||
| least preferred. Within a subfield there is no order of | least preferred. Within a subfield, there is no order of | |||
| preference. By grouping the parents (as in ECMP) and ordering | preference. By grouping the parents (as in ECMP) and ordering | |||
| them, the parents may be associated with specific bits in the | them, the parents may be associated with specific bits in the | |||
| Path Control field in a way that communicates preference. | Path Control field in a way that communicates preference. | |||
| 0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 | |||
| +-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
| |PC1|PC2|PC3|PC4| | |PC1|PC2|PC3|PC4| | |||
| +-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
| Figure 27: Path Control Preference Sub-field Encoding | Figure 27: Path Control Preference Subfield Encoding | |||
| Path Sequence: 8-bit unsigned integer. When a RPL Target option is | 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 | issued by the node that owns the Target prefix (i.e., in a DAO | |||
| message), that node sets the Path Sequence and increments the | message), that node sets the Path Sequence and increments the | |||
| Path Sequence each time it issues a RPL Target option with | Path Sequence each time it issues a RPL Target option with | |||
| updated information. | updated information. | |||
| Path Lifetime: 8-bit unsigned integer. The length of time in | Path Lifetime: 8-bit unsigned integer. The length of time in | |||
| Lifetime Units (obtained from the Configuration option) that | Lifetime Units (obtained from the Configuration option) that | |||
| the prefix is valid for route determination. The period starts | the prefix is valid for route determination. The period starts | |||
| when a new Path Sequence is seen. A value of all one bits | when a new Path Sequence is seen. A value of all one bits | |||
| (0xFF) represents infinity. A value of all zero bits (0x00) | (0xFF) represents infinity. A value of all zero bits (0x00) | |||
| indicates a loss of reachability. A DAO message that contains | indicates a loss of reachability. A DAO message that contains | |||
| a Transit Information option with a Path Lifetime of 0x00 for a | a Transit Information option with a Path Lifetime of 0x00 for a | |||
| Target is referred as a No-Path (for that Target) in this | Target is referred as a No-Path (for that Target) in this | |||
| document. | document. | |||
| Parent Address (optional): IPv6 Address of the DODAG Parent of the | Parent Address (optional): IPv6 address of the DODAG parent of the | |||
| node originally issuing the Transit Information Option. This | node originally issuing the Transit Information option. This | |||
| field may not be present, as according to the DODAG Mode of | field may not be present, as according to the DODAG Mode of | |||
| Operation (storing or non-storing) and indicated by the Transit | Operation (Storing or Non-Storing) and indicated by the Transit | |||
| Information option length. | Information option length. | |||
| Unassigned bits of the Transit Information option are reserved. They | Unassigned bits of the Transit Information option are reserved. They | |||
| MUST be set to zero on transmission and MUST be ignored on reception. | MUST be set to zero on transmission and MUST be ignored on reception. | |||
| 6.7.9. Solicited Information | 6.7.9. Solicited Information | |||
| The Solicited Information option MAY be present in DIS messages, and | The Solicited Information option MAY be present in DIS messages, and | |||
| its format is as follows: | 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 = 7 |Opt Length = 19| RPLInstanceID |V|I|D| Flags | | | Type = 0x07 |Opt Length = 19| RPLInstanceID |V|I|D| Flags | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| + + | + + | |||
| | | | | | | |||
| + DODAGID + | + DODAGID + | |||
| | | | | | | |||
| + + | + + | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| |Version Number | | |Version Number | | |||
| +-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
| Figure 28: Format of the Solicited Information Option | Figure 28: Format of the Solicited Information Option | |||
| The Solicited Information option is used for a node to request DIO | The Solicited Information option is used for a node to request DIO | |||
| messages from a subset of neighboring nodes. The Solicited | messages from a subset of neighboring nodes. The Solicited | |||
| Information option may specify a number of predicate criteria to be | Information option may specify a number of predicate criteria to be | |||
| matched by a receiving node. This is used by the requester to limit | matched by a receiving node. This is used by the requester to limit | |||
| the number of replies from "non-interesting" nodes. These predicates | the number of replies from "non-interesting" nodes. These predicates | |||
| affect whether a node resets its DIO trickle timer, as described in | affect whether a node resets its DIO Trickle timer, as described in | |||
| Section 8.3. | Section 8.3. | |||
| The Solicited Information option contains flags that indicate which | The Solicited Information option contains flags that indicate which | |||
| predicates a node should check when deciding whether to reset its | predicates a node should check when deciding whether to reset its | |||
| Trickle timer. A node resets its Trickle timer when all predicates | Trickle timer. A node resets its Trickle timer when all predicates | |||
| are true. If a flag is set, then the RPL node MUST check the | are true. If a flag is set, then the RPL node MUST check the | |||
| associated predicate. If a flag is cleared, then the RPL node MUST | associated predicate. If a flag is cleared, then the RPL node MUST | |||
| NOT check the associated predicate. (If a flag is cleared, the RPL | NOT check the associated predicate. (If a flag is cleared, the RPL | |||
| node assumes that the associated predicate is true). | node assumes that the associated predicate is true.) | |||
| Option Type: 0x07 | ||||
| Option Type: 0x07 (to be confirmed by IANA) | ||||
| Option Length: 19 | Option Length: 19 | |||
| V: The V flag is the Version predicate. The Version predicate is | V: The 'V' flag is the Version predicate. The Version predicate is | |||
| true if the receiver's DODAGVersionNumber matches the requested | true if the receiver's DODAGVersionNumber matches the requested | |||
| Version Number. If the V flag is cleared then the Version | Version Number. If the 'V' flag is cleared, then the Version | |||
| field is not valid and the Version field MUST be set to zero on | field is not valid and the Version field MUST be set to zero on | |||
| transmission and ignored upon receipt. | transmission and ignored upon receipt. | |||
| I: The I flag is the InstanceID predicate. The InstanceID | I: The 'I' flag is the InstanceID predicate. The InstanceID | |||
| predicate is true when the RPL node's current RPLInstanceID | predicate is true when the RPL node's current RPLInstanceID | |||
| matches the requested RPLInstanceID. If the I flag is cleared | matches the requested RPLInstanceID. If the 'I' flag is | |||
| then the RPLInstanceID field is not valid and the RPLInstanceID | cleared, then the RPLInstanceID field is not valid and the | |||
| field MUST be set to zero on transmission and ignored upon | RPLInstanceID field MUST be set to zero on transmission and | |||
| receipt. | ignored upon receipt. | |||
| D: The D flag is the DODAGID predicate. The DODAGID predicate is | D: The 'D' flag is the DODAGID predicate. The DODAGID predicate is | |||
| true if the RPL node's parent set has the same DODAGID as the | true if the RPL node's parent set has the same DODAGID as the | |||
| DODAGID field. If the D flag is cleared then the DODAGID field | DODAGID field. If the 'D' flag is cleared, then the DODAGID | |||
| is not valid and the DODAGID field MUST be set to zero on | field is not valid and the DODAGID field MUST be set to zero on | |||
| transmission and ignored upon receipt. | transmission and ignored upon receipt. | |||
| Flags: The 5-bits remaining unused in the Flags field are reserved | Flags: The 5 bits remaining unused in the Flags field are reserved | |||
| for flags. The field MUST be initialized to zero by the sender | for flags. The field MUST be initialized to zero by the sender | |||
| and MUST be ignored by the receiver. | and MUST be ignored by the receiver. | |||
| Version Number: 8-bit unsigned integer containing the value of | Version Number: 8-bit unsigned integer containing the value of | |||
| DODAGVersionNumber that is being solicited when valid. | DODAGVersionNumber that is being solicited when valid. | |||
| RPLInstanceID: 8-bit unsigned integer containing the RPLInstanceID | RPLInstanceID: 8-bit unsigned integer containing the RPLInstanceID | |||
| that is being solicited when valid. | that is being solicited when valid. | |||
| DODAGID: 128-bit unsigned integer containing the DODAGID that is | DODAGID: 128-bit unsigned integer containing the DODAGID that is | |||
| being solicited when valid. | being solicited when valid. | |||
| Unassigned bits of the Solicited Information option are reserved. | Unassigned bits of the Solicited Information option are reserved. | |||
| They MUST be set to zero on transmission and MUST be ignored on | They MUST be set to zero on transmission and MUST be ignored on | |||
| reception. | reception. | |||
| 6.7.10. Prefix Information | 6.7.10. Prefix Information | |||
| The Prefix Information option MAY be present in DIO messages, and | The Prefix Information Option (PIO) MAY be present in DIO messages, | |||
| carries the information that is specified for the IPv6 ND Prefix | and carries the information that is specified for the IPv6 ND Prefix | |||
| Information Option in [RFC4861], [RFC4862] and [RFC3775] for use by | Information option in [RFC4861], [RFC4862], and [RFC6275] for use by | |||
| RPL nodes and IPv6 hosts. In particular, a RPL node may use this | RPL nodes and IPv6 hosts. In particular, a RPL node may use this | |||
| option for the purpose of State-Less Address Auto-Configuration | option for the purpose of Stateless Address Autoconfiguration (SLAAC) | |||
| (SLAAC) from a prefix advertised by a parent as specified in | from a prefix advertised by a parent as specified in [RFC4862], and | |||
| [RFC4862], and advertise its own address as specified in [RFC3775]. | advertise its own address as specified in [RFC6275]. The root of a | |||
| The root of a DODAG is authoritative for setting that information. | DODAG is authoritative for setting that information. The information | |||
| The information is propagated down the DODAG unchanged, with the | is propagated down the DODAG unchanged, with the exception that a RPL | |||
| exception that a RPL router may overwrite the Interface ID if the 'R' | router may overwrite the Interface ID if the 'R' flag is set to | |||
| flag is set to indicate its full address in the PIO The format of the | indicate its full address in the PIO. The format of the option is | |||
| option is modified (Type, Length, Prefix) in order to be carried as a | modified (Type, Length, Prefix) in order to be carried as a RPL | |||
| RPL option as follows: | option as follows: | |||
| If the only desired effect of a received PIO in a DIO is to provide | ||||
| the global address of the parent node to the receiving node, then the | ||||
| sender resets the 'A' and 'L' bits and sets the 'R' bit. Upon | ||||
| receipt, the RPL will not autoconfigure an address or a connected | ||||
| route from the prefix [RFC4862]. As in all cases, when the 'L' bit | ||||
| is not set, the RPL node MAY include the prefix in PIOs it sends to | ||||
| its children. | ||||
| 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 = 8 |Opt Length = 30| Prefix Length |L|A|R|Reserved1| | | Type = 0x08 |Opt Length = 30| Prefix Length |L|A|R|Reserved1| | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Valid Lifetime | | | Valid Lifetime | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Preferred Lifetime | | | Preferred Lifetime | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Reserved2 | | | Reserved2 | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| + + | + + | |||
| | | | | | | |||
| + Prefix + | + Prefix + | |||
| | | | | | | |||
| + + | + + | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 29: Format of the Prefix Information Option | Figure 29: Format of the Prefix Information Option | |||
| The Prefix Information option may be used to distribute the prefix in | The PIO may be used to distribute the prefix in use inside the DODAG, | |||
| use inside the DODAG, e.g. for address autoconfiguration. | e.g., for address autoconfiguration. | |||
| [RFC4861] and [RFC3775] 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) | [RFC4861] and [RFC6275] should be consulted as the authoritative | |||
| reference with respect to the PIO. The field descriptions are | ||||
| transcribed here for convenience: | ||||
| Option Length: 30. Note that this length is expressed in units of | Option Type: 0x08 | |||
| single-octets, unlike in IPv6 ND. | 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 | 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 that are valid. The value ranges from 0 to | |||
| The prefix length field provides necessary information for on- | 128. The Prefix Length field provides necessary information | |||
| link determination (when combined with the L flag in the prefix | for on-link determination (when combined with the 'L' flag in | |||
| information option). It also assists with address | the PIO). It also assists with address autoconfiguration as | |||
| autoconfiguration as specified in [RFC4862], for which there | specified in [RFC4862], for which there may be more | |||
| may be more restrictions on the prefix length. | restrictions on the prefix length. | |||
| L 1-bit on-link flag. When set, indicates that this prefix can | L: 1-bit on-link flag. When set, it indicates that this prefix | |||
| be used for on-link determination. When not set the | can be used for on-link determination. When not set, the | |||
| advertisement makes no statement about on-link or off-link | advertisement makes no statement about on-link or off-link | |||
| properties of the prefix. In other words, if the L flag is not | properties of the prefix. In other words, if the 'L' flag is | |||
| set a RPL node MUST NOT conclude that an address derived from | not set, a RPL node MUST NOT conclude that an address derived | |||
| the prefix is off-link. That is, it MUST NOT update a previous | from the prefix is off-link. That is, it MUST NOT update a | |||
| indication that the address is on-link. A RPL node acting as a | previous indication that the address is on-link. A RPL node | |||
| router MUST NOT propagate a PIO with the L flag set. A RPL | acting as a router MUST NOT propagate a PIO with the 'L' flag | |||
| node acting as a router MAY propagate a PIO with the L flag not | set. A RPL node acting as a router MAY propagate a PIO with | |||
| set. | the 'L' flag not set. | |||
| A 1-bit autonomous address-configuration flag. When set | A: 1-bit autonomous address-configuration flag. When set, it | |||
| indicates that this prefix can be used for stateless address | indicates that this prefix can be used for stateless address | |||
| configuration as specified in [RFC4862]. When both protocols | configuration as specified in [RFC4862]. When both protocols | |||
| (ND RAs and RPL DIOs) are used to carry PIOs on the same link, | (ND RAs and RPL DIOs) are used to carry PIOs on the same link, | |||
| it is possible to use either one for SLAAC by a RPL node. It | it is possible to use either one for SLAAC by a RPL node. It | |||
| is also possible to make either protocol ineligible for SLAAC | is also possible to make either protocol ineligible for SLAAC | |||
| operation by forcing the A flag to 0 for PIOs carried in that | operation by forcing the 'A' flag to 0 for PIOs carried in that | |||
| protocol. | protocol. | |||
| R 1-bit Router address flag. When set, indicates that the Prefix | R: 1-bit router address flag. When set, it indicates that the | |||
| field contains a complete IPv6 address assigned to the sending | Prefix field contains a complete IPv6 address assigned to the | |||
| router that can be used as parent in a target option. The | sending router that can be used as parent in a target option. | |||
| indicated prefix is the first Prefix Length bits of the Prefix | The indicated prefix is the first prefix length bits of the | |||
| field. The router IPv6 address has the same scope and conforms | Prefix field. The router IPv6 address has the same scope and | |||
| to the same lifetime values as the advertised prefix. This use | conforms to the same lifetime values as the advertised prefix. | |||
| of the Prefix field is compatible with its use in advertising | This use of the Prefix field is compatible with its use in | |||
| the prefix itself, since Prefix Advertisement uses only the | advertising the prefix itself, since Prefix Advertisement uses | |||
| leading bits. Interpretation of this flag bit is thus | only the leading bits. Interpretation of this flag bit is thus | |||
| independent of the processing required for the On-Link (L) and | independent of the processing required for the on-link (L) and | |||
| Autonomous Address-Configuration (A) flag bits. | autonomous address-configuration (A) flag bits. | |||
| Reserved1 5-bit unused field. It MUST be initialized to zero by the | Reserved1: 5-bit unused field. It MUST be initialized to zero by the | |||
| sender and MUST be ignored by the receiver. | sender and MUST be ignored by the receiver. | |||
| Valid Lifetime 32-bit unsigned integer. The length of time in | Valid Lifetime: 32-bit unsigned integer. The length of time in | |||
| seconds (relative to the time the packet is sent) that the | seconds (relative to the time the packet is sent) that the | |||
| prefix is valid for the purpose of on-link determination. A | prefix is valid for the purpose of on-link determination. A | |||
| value of all one bits (0xffffffff) represents infinity. The | value of all one bits (0xFFFFFFFF) represents infinity. The | |||
| Valid Lifetime is also used by [RFC4862]. | Valid Lifetime is also used by [RFC4862]. | |||
| Preferred Lifetime 32-bit unsigned integer. The length of time in | Preferred Lifetime: 32-bit unsigned integer. The length of time in | |||
| seconds (relative to the time the packet is sent) that | seconds (relative to the time the packet is sent) that | |||
| addresses generated from the prefix via stateless address | addresses generated from the prefix via stateless address | |||
| autoconfiguration remain preferred [RFC4862]. A value of all | autoconfiguration remain preferred [RFC4862]. A value of all | |||
| one bits (0xffffffff) represents infinity. See [RFC4862]. | one bits (0xFFFFFFFF) represents infinity. See [RFC4862]. | |||
| Note that the value of this field MUST NOT exceed the Valid | Note that the value of this field MUST NOT exceed the Valid | |||
| Lifetime field to avoid preferring addresses that are no longer | Lifetime field to avoid preferring addresses that are no longer | |||
| valid. | valid. | |||
| Reserved2 This field is unused. It MUST be initialized to zero by | Reserved2: This field is unused. It MUST be initialized to zero by | |||
| the sender and MUST be ignored by the receiver. | the sender and MUST be ignored by the receiver. | |||
| Prefix An IPv6 address or a prefix of an IPv6 address. The Prefix | Prefix: An IPv6 address or a prefix of an IPv6 address. The Prefix | |||
| Length field contains the number of valid leading bits in the | Length field contains the number of valid leading bits in the | |||
| prefix. The bits in the prefix after the prefix length are | prefix. The bits in the prefix after the prefix length are | |||
| reserved and MUST be initialized to zero by the sender and | reserved and MUST be initialized to zero by the sender and | |||
| ignored by the receiver. A router SHOULD NOT send a prefix | ignored by the receiver. A router SHOULD NOT send a prefix | |||
| option for the link-local prefix and a host SHOULD ignore such | option for the link-local prefix, and a host SHOULD ignore such | |||
| a prefix option. A non-storing node SHOULD refrain from | a prefix option. A non-storing node SHOULD refrain from | |||
| advertising a prefix till it owns an address of that prefix, | advertising a prefix till it owns an address of that prefix, | |||
| and then it SHOULD advertise its full address in this field, | and then it SHOULD advertise its full address in this field, | |||
| with the 'R' flag set. The children of a node that so | with the 'R' flag set. The children of a node that so | |||
| advertises a full address with the 'R' flag set may then use | advertises a full address with the 'R' flag set may then use | |||
| that address to determine the content of the Parent Address | that address to determine the content of the DODAG Parent | |||
| field of the Transit Information Option. | Address subfield of the Transit Information option. | |||
| Unassigned bits of the Prefix Information option are reserved. They | Unassigned bits of the PIO are reserved. They MUST be set to zero on | |||
| MUST be set to zero on transmission and MUST be ignored on reception. | transmission and MUST be ignored on reception. | |||
| 6.7.11. RPL Target Descriptor | 6.7.11. RPL Target Descriptor | |||
| The RPL Target option MAY be immediately followed by one opaque | The RPL Target option MAY be immediately followed by one opaque | |||
| descriptor that qualifies that specific target. | descriptor that qualifies that specific target. | |||
| 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 = 9 |Opt Length = 4 | Descriptor | | Type = 0x09 |Opt Length = 4 | Descriptor | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Descriptor (cont.) | | Descriptor (cont.) | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 30: Format of the RPL Target Descriptor Option | Figure 30: Format of the RPL Target Descriptor Option | |||
| The RPL Target Descriptor Option is used to qualify a target, | The RPL Target Descriptor option is used to qualify a target, | |||
| something that is sometimes called tagging. | something that is sometimes called "tagging". | |||
| There can be at most one descriptor per target. The descriptor is | At most, there can be one descriptor per target. The descriptor is | |||
| set by the node that injects the target in the RPL network. It MUST | set by the node that injects the Target in the RPL network. It MUST | |||
| be copied but not modified by routers that propagate the target Up | be copied but not modified by routers that propagate the Target Up | |||
| the DODAG in DAO messages. | the DODAG in DAO messages. | |||
| Option Type: 0x09 (to be confirmed by IANA) | Option Type: 0x09 | |||
| Option Length: 4 | Option Length: 4 | |||
| Descriptor: 32-bit unsigned integer. Opaque. | Descriptor: 32-bit unsigned integer. Opaque. | |||
| 7. Sequence Counters | 7. Sequence Counters | |||
| This section describes the general scheme for bootstrap and operation | This section describes the general scheme for bootstrap and operation | |||
| of sequence counters in RPL, such as the DODAGVersionNumber in the | of sequence counters in RPL, such as the DODAGVersionNumber in the | |||
| DIO message, the DAOSequence in the DAO message, and the Path | DIO message, the DAOSequence in the DAO message, and the Path | |||
| Sequence in the Transit Information option. | Sequence in the Transit Information option. | |||
| 7.1. Sequence Counter Overview | 7.1. Sequence Counter Overview | |||
| This specification utilizes three different sequence numbers to | This specification utilizes three different sequence numbers to | |||
| validate the freshness and the synchronization of protocol | validate the freshness and the synchronization of protocol | |||
| information: | information: | |||
| DODAGVersionNumber: This sequence counter is present in the DIO | DODAGVersionNumber: This sequence counter is present in the DIO Base | |||
| base to indicate the Version of the DODAG being formed. The | to indicate the Version of the DODAG being formed. The | |||
| DODAGVersionNumber is monotonically incremented by the root | DODAGVersionNumber is monotonically incremented by the root | |||
| each time the root decides to form a new Version of the DODAG | each time the root decides to form a new Version of the DODAG | |||
| in order to revalidate the integrity and allow a global repairs | in order to revalidate the integrity and allow a global repair | |||
| to occur. The DODAGVersionNumber is propagated unchanged Down | to occur. The DODAGVersionNumber is propagated unchanged Down | |||
| the DODAG as routers join the new DODAG Version. The | the DODAG as routers join the new DODAG Version. The | |||
| DODAGVersionNumber is globally significant in a DODAG and | DODAGVersionNumber is globally significant in a DODAG and | |||
| indicates the Version of the DODAG that a router is operating | indicates the Version of the DODAG in which a router is | |||
| in. An older (lesser) value indicates that the originating | operating. An older (lesser) value indicates that the | |||
| router has not migrated to the new DODAG Version and can not be | originating router has not migrated to the new DODAG Version | |||
| used as a parent once the receiving node has migrated to the | and cannot be used as a parent once the receiving node has | |||
| newer DODAG Version. | migrated to the newer DODAG Version. | |||
| DAOSequence: This sequence counter is present in the DAO base to | DAOSequence: This sequence counter is present in the DAO Base to | |||
| correlate a DAO message and a DAO ACK message. The DAOSequence | correlate a DAO message and a DAO ACK message. The DAOSequence | |||
| number is locally significant to the node that issues a DAO | number is locally significant to the node that issues a DAO | |||
| message for its own consumption to detect the loss of a DAO | message for its own consumption to detect the loss of a DAO | |||
| message and enable retries. | message and enable retries. | |||
| Path Sequence: This sequence counter is present in the Transit | Path Sequence: This sequence counter is present in the Transit | |||
| Information option in a DAO message. The purpose of this | Information option in a DAO message. The purpose of this | |||
| counter is to differentiate a movement where a newer route | counter is to differentiate a movement where a newer route | |||
| supersedes a stale one from a route redundancy scenario where | supersedes a stale one from a route redundancy scenario where | |||
| multiple routes exist in parallel for a same target. The Path | multiple routes exist in parallel for the same target. The | |||
| Sequence is globally significant in a DODAG and indicates the | Path Sequence is globally significant in a DODAG and indicates | |||
| freshness of the route to the associated target. An older | the freshness of the route to the associated target. An older | |||
| (lesser) value received from an originating router indicates | (lesser) value received from an originating router indicates | |||
| that the originating router holds stale routing states and the | that the originating router holds stale routing states and the | |||
| originating router should not be considered anymore as a | originating router should not be considered anymore as a | |||
| potential next-hop for the target. The Path Sequence is | potential next hop for the target. The Path Sequence is | |||
| computed by the node that advertises the target, that is the | computed by the node that advertises the target, that is the | |||
| target itself or a router that advertises a target on behalf of | Target itself or a router that advertises a Target on behalf of | |||
| a host, and is unchanged as the DAO content is propagated | a host, and is unchanged as the DAO content is propagated | |||
| towards the root by parent routers. If a host does not pass a | towards the root by parent routers. If a host does not pass a | |||
| counter to its router, then the router is in charge of | counter to its router, then the router is in charge of | |||
| computing the Path Sequence on behalf of the host and the host | computing the Path Sequence on behalf of the host and the host | |||
| can only register to one router for that purpose. If a DAO | can only register to one router for that purpose. If a DAO | |||
| message containing a same target is issued to multiple parents | message containing the same Target is issued to multiple | |||
| at a given point of time for the purpose of route redundancy, | parents at a given point in time for the purpose of route | |||
| then the Path Sequence is the same in all the DAO messages for | redundancy, then the Path Sequence is the same in all the DAO | |||
| that same target. | messages for that same target. | |||
| 7.2. Sequence Counter Operation | 7.2. Sequence Counter Operation | |||
| RPL sequence counters are subdivided in a 'lollipop' fashion | RPL sequence counters are subdivided in a 'lollipop' fashion | |||
| ([Perlman83]), where the values from 128 and greater are used as a | [Perlman83], where the values from 128 and greater are used as a | |||
| linear sequence to indicate a restart and bootstrap the counter, and | linear sequence to indicate a restart and bootstrap the counter, and | |||
| the values less than or equal to 127 used as a circular sequence | the values less than or equal to 127 used as a circular sequence | |||
| number space of size 128 as in [RFC1982]. Consideration is given to | number space of size 128 as in [RFC1982]. Consideration is given to | |||
| the mode of operation when transitioning from the linear region to | the mode of operation when transitioning from the linear region to | |||
| the circular region. Finally, when operating in the circular region, | the circular region. Finally, when operating in the circular region, | |||
| if sequence numbers are detected to be too far apart then they are | if sequence numbers are detected to be too far apart, then they are | |||
| not comparable, as detailed below. | not comparable, as detailed below. | |||
| A window of comparison, SEQUENCE_WINDOW = 16, is configured based on | A window of comparison, SEQUENCE_WINDOW = 16, is configured based on | |||
| a value of 2^N, where N is defined to be 4 in this specification. | a value of 2^N, where N is defined to be 4 in this specification. | |||
| For a given sequence counter, | For a given sequence counter: | |||
| 1. The sequence counter SHOULD be initialized to an implementation | 1. The sequence counter SHOULD be initialized to an implementation | |||
| defined value which is 128 or greater prior to use. A | defined value, which is 128 or greater prior to use. A | |||
| recommended value is 240 (256 - SEQUENCE_WINDOW). | recommended value is 240 (256 - SEQUENCE_WINDOW). | |||
| 2. When a sequence counter increment would cause the sequence | 2. When a sequence counter increment would cause the sequence | |||
| counter to increment beyond its maximum value, the sequence | counter to increment beyond its maximum value, the sequence | |||
| counter MUST wrap back to zero. When incrementing a sequence | counter MUST wrap back to zero. When incrementing a sequence | |||
| counter greater than or equal to 128, the maximum value is 255. | counter greater than or equal to 128, the maximum value is 255. | |||
| When incrementing a sequence counter less than 128, the maximum | When incrementing a sequence counter less than 128, the maximum | |||
| value is 127. | value is 127. | |||
| 3. When comparing two sequence counters, the following rules MUST be | 3. When comparing two sequence counters, the following rules MUST be | |||
| skipping to change at page 66, line 7 ¶ | skipping to change at page 65, line 36 ¶ | |||
| 1. If (256 + B - A) is less than or equal to | 1. If (256 + B - A) is less than or equal to | |||
| SEQUENCE_WINDOW, then B is greater than A, A is less than | SEQUENCE_WINDOW, then B is greater than A, A is less than | |||
| B, and the two are not equal. | B, and the two are not equal. | |||
| 2. If (256 + B - A) is greater than SEQUENCE_WINDOW, then A | 2. If (256 + B - A) is greater than SEQUENCE_WINDOW, then A | |||
| is greater than B, B is less than A, and the two are not | is greater than B, B is less than A, and the two are not | |||
| equal. | equal. | |||
| For example, if A is 240, and B is 5, then (256 + 5 - 240) is | For example, if A is 240, and B is 5, then (256 + 5 - 240) is | |||
| 21. 21 is greater than SEQUENCE_WINDOW (16), thus 240 is | 21. 21 is greater than SEQUENCE_WINDOW (16); thus, 240 is | |||
| greater than 5. As another example, if A is 250 and B is 5, | greater than 5. As another example, if A is 250 and B is 5, | |||
| then (256 + 5 - 250) is 11. 11 is less than SEQUENCE_WINDOW | then (256 + 5 - 250) is 11. 11 is less than SEQUENCE_WINDOW | |||
| (16), thus 250 is less than 5. | (16); thus, 250 is less than 5. | |||
| 2. In the case where both sequence counters to be compared are | 2. In the case where both sequence counters to be compared are | |||
| less than or equal to 127, and in the case where both | less than or equal to 127, and in the case where both | |||
| sequence counters to be compared are greater than or equal to | sequence counters to be compared are greater than or equal to | |||
| 128: | 128: | |||
| 1. If the absolute magnitude of difference between the two | 1. If the absolute magnitude of difference between the two | |||
| sequence counters is less than or equal to | sequence counters is less than or equal to | |||
| SEQUENCE_WINDOW, then a comparison as described in | SEQUENCE_WINDOW, then a comparison as described in | |||
| [RFC1982] is used to determine the relationships greater | [RFC1982] is used to determine the relationships greater | |||
| than, less than, and equal. | than, less than, and equal. | |||
| 2. If the absolute magnitude of difference of the two | 2. If the absolute magnitude of difference of the two | |||
| sequence counters is greater than SEQUENCE_WINDOW, then a | sequence counters is greater than SEQUENCE_WINDOW, then a | |||
| desynchronization has occurred and the two sequence | desynchronization has occurred and the two sequence | |||
| numbers are not comparable. | numbers are not comparable. | |||
| 4. If two sequence numbers are determined to be not comparable, i.e. | 4. If two sequence numbers are determined not to be comparable, | |||
| the results of the comparison are not defined, then a node should | i.e., the results of the comparison are not defined, then a node | |||
| consider the comparison as if it has evaluated in such a way so | should consider the comparison as if it has evaluated in such a | |||
| as to give precedence to the sequence number that has most | way so as to give precedence to the sequence number that has most | |||
| recently been observed to increment. Failing this, the node | recently been observed to increment. Failing this, the node | |||
| should consider the comparison as if it has evaluated in such a | should consider the comparison as if it has evaluated in such a | |||
| way so as to minimize the resulting changes to its own state. | way so as to minimize the resulting changes to its own state. | |||
| 8. Upward Routes | 8. Upward Routes | |||
| This section describes how RPL discovers and maintains upward routes. | This section describes how RPL discovers and maintains Upward routes. | |||
| It describes the use of DODAG Information Objects (DIOs), the | It describes the use of DODAG Information Objects (DIOs), the | |||
| messages used to discover and maintain these routes. It specifies | messages used to discover and maintain these routes. It specifies | |||
| how RPL generates and responds to DIOs. It also describes DODAG | how RPL generates and responds to DIOs. It also describes DODAG | |||
| Information Solicitation (DIS) messages, which are used to trigger | Information Solicitation (DIS) messages, which are used to trigger | |||
| DIO transmissions. | DIO transmissions. | |||
| As mentioned in Section 3.2.8, nodes that decide to join a DODAG MUST | As mentioned in Section 3.2.8, nodes that decide to join a DODAG MUST | |||
| provision at least one DODAG parent as a default route for the | provision at least one DODAG parent as a default route for the | |||
| associated instance. This default route enables a packet to be | associated instance. This default route enables a packet to be | |||
| forwarded upwards until it eventually hits a common ancestor from | forwarded Upward until it eventually hits a common ancestor from | |||
| which it will be routed downwards to the destination. If the | which it will be routed Downward to the destination. If the | |||
| destination is not in the DODAG, then the DODAG root may be able to | destination is not in the DODAG, then the DODAG root may be able to | |||
| forward the packet using connectivity to the outside of the DODAG; if | forward the packet using connectivity to the outside of the DODAG; if | |||
| it can not forward the packet outside then the DODAG root has to drop | it cannot forward the packet outside, then the DODAG root has to drop | |||
| it. | it. | |||
| A DIO message can also transport explicit routing information: | A DIO message can also transport explicit routing information: | |||
| DODAGID The DODAGID is a Global or Unique Local IPv6 Address of the | DODAGID: The DODAGID is a Global or Unique Local IPv6 address of the | |||
| root. A node that joins a DODAG SHOULD provision a host route | root. A node that joins a DODAG SHOULD provision a host route | |||
| via a DODAG parent to the address used by the root as DODAGID. | via a DODAG parent to the address used by the root as the | |||
| DODAGID. | ||||
| RIO Prefix The root MAY place one or more Route Information options | RIO Prefix: The root MAY place one or more Route Information options | |||
| in a DIO message. The RIO is used to advertise an external | in a DIO message. The RIO is used to advertise an external | |||
| route that is reachable via the root, associated with a | route that is reachable via the root, associated with a | |||
| preference, as presented in Section 6.7.5, which incorporates | preference, as presented in Section 6.7.5, which incorporates | |||
| the RIO from [RFC4191]. It is interpreted as a capability of | the RIO from [RFC4191]. It is interpreted as a capability of | |||
| the root as opposed to a routing advertisement and it MUST NOT | the root as opposed to a routing advertisement, and it MUST NOT | |||
| be redistributed in another routing protocol though it SHOULD | be redistributed in another routing protocol though it SHOULD | |||
| be used by an ingress RPL router to select a DODAG when a | be used by an ingress RPL router to select a DODAG when a | |||
| packet is injected in a RPL domain from a node attached to that | packet is injected in a RPL domain from a node attached to that | |||
| RPL router. An Objective Function MAY use the routes | RPL router. An Objective Function MAY use the routes | |||
| advertised in RIO or the preference for those routes in order | advertised in RIO or the preference for those routes in order | |||
| to favor a DODAG versus another one for a same instance. | to favor a DODAG versus another one for the same instance. | |||
| 8.1. DIO Base Rules | 8.1. DIO Base Rules | |||
| 1. For the following DIO Base fields, a node that is not a DODAG | 1. For the following DIO Base fields, a node that is not a DODAG | |||
| root MUST advertise the same values as its preferred DODAG parent | root MUST advertise the same values as its preferred DODAG parent | |||
| (defined in Section 8.2.1). In this way these values will | (defined in Section 8.2.1). In this way, these values will | |||
| propagate Down the DODAG unchanged and advertised by every node | propagate Down the DODAG unchanged and advertised by every node | |||
| that has a route to that DODAG root. These fields are: | that has a route to that DODAG root. These fields are as | |||
| follows: | ||||
| 1. Grounded (G) | 1. Grounded (G) | |||
| 2. Mode of Operation (MOP) | 2. Mode of Operation (MOP) | |||
| 3. DAGPreference (Prf) | 3. DAGPreference (Prf) | |||
| 4. Version | 4. Version | |||
| 5. RPLInstanceID | 5. RPLInstanceID | |||
| 6. DODAGID | 6. DODAGID | |||
| 2. A node MAY update the following fields at each hop: | 2. A node MAY update the following fields at each hop: | |||
| 1. Rank | 1. Rank | |||
| 2. DTSN | 2. DTSN | |||
| 3. The DODAGID field each root sets MUST be unique within the RPL | 3. The DODAGID field each root sets MUST be unique within the RPL | |||
| Instance and MUST be a routable IPv6 address belonging to the | Instance and MUST be a routable IPv6 address belonging to the | |||
| root. | root. | |||
| 8.2. Upward Route Discovery and Maintenance | 8.2. Upward Route Discovery and Maintenance | |||
| Upward route discovery allows a node to join a DODAG by discovering | Upward route discovery allows a node to join a DODAG by discovering | |||
| neighbors that are members of the DODAG of interest and identifying a | neighbors that are members of the DODAG of interest and identifying a | |||
| set of parents. The exact policies for selecting neighbors and | set of parents. The exact policies for selecting neighbors and | |||
| parents is implementation-dependent and driven by the OF. This | parents is implementation dependent and driven by the OF. This | |||
| section specifies the set of rules those policies must follow for | section specifies the set of rules those policies must follow for | |||
| interoperability. | interoperability. | |||
| 8.2.1. Neighbors and Parents within a DODAG Version | 8.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 and OF | |||
| dependent and OF-dependent. Second, the parent set is a restricted | dependent. Second, the parent set is a restricted subset of the | |||
| subset of the candidate neighbor set. Finally, the preferred parent | candidate neighbor set. Finally, the preferred parent is a member of | |||
| is a member of the parent set that is the preferred next hop in | the parent set that is the preferred next hop in Upward routes. | |||
| upward routes. The preferred parent is conceptually a single parent | Conceptually, the preferred parent is a single parent; although, it | |||
| although it may be a set of multiple parents if those parents are | may be a set of multiple parents if those parents are equally | |||
| equally preferred and have identical rank. | preferred and have identical Rank. | |||
| More precisely: | More precisely: | |||
| 1. The DODAG parent set MUST be a subset of the candidate neighbor | 1. The DODAG parent set MUST be a subset of the candidate neighbor | |||
| set. | set. | |||
| 2. A DODAG root MUST have a DODAG parent set of size zero. | 2. A DODAG root MUST have a DODAG parent set of size zero. | |||
| 3. A node that is not a DODAG root MAY maintain a DODAG parent set | 3. A node that is not a DODAG root MAY maintain a DODAG parent set | |||
| of size greater than or equal to one. | of size greater than or equal to one. | |||
| 4. A node's preferred DODAG parent MUST be a member of its DODAG | 4. A node's preferred DODAG parent MUST be a member of its DODAG | |||
| 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) [RFC4861], or an | 6. When Neighbor Unreachability Detection (NUD) [RFC4861], or an | |||
| equivalent mechanism, determines that a neighbor is no longer | equivalent mechanism, determines that a neighbor is no longer | |||
| reachable, a RPL node MUST NOT consider this node in the | reachable, a RPL node MUST NOT consider this node in the | |||
| candidate neighbor set when calculating and advertising routes | candidate neighbor set when calculating and advertising routes | |||
| until it determines that it is again reachable. Routes through | until it determines that it is again reachable. Routes through | |||
| an unreachable neighbor MUST be removed from the routing table. | an unreachable 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. | free, as Rank decreases on each hop to the root. | |||
| The OF can guide candidate neighbor set and parent set selection, as | The OF can guide candidate neighbor set and parent set selection, as | |||
| discussed in [I-D.ietf-roll-of0]. | discussed in [RFC6552]. | |||
| 8.2.2. Neighbors and Parents across DODAG Versions | 8.2.2. Neighbors and Parents across DODAG Versions | |||
| The above rules govern a single DODAG Version. 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 | |||
| Versions: | Versions. | |||
| 8.2.2.1. DODAG Version | 8.2.2.1. DODAG Version | |||
| 1. The tuple (RPLInstanceID, DODAGID, DODAGVersionNumber) uniquely | 1. The tuple (RPLInstanceID, DODAGID, DODAGVersionNumber) uniquely | |||
| defines a DODAG Version. Every element of a node's DODAG parent | defines a DODAG Version. Every element of a node's DODAG parent | |||
| set, as conveyed by the last heard DIO message from each DODAG | set, as conveyed by the last heard DIO message from each DODAG | |||
| parent, MUST belong to the same DODAG Version. 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 | |||
| Versions. | Versions. | |||
| skipping to change at page 70, line 12 ¶ | skipping to change at page 69, line 27 ¶ | |||
| DODAGVersionNumber are described later in this section and in | DODAGVersionNumber are described later in this section and in | |||
| Section 18. | Section 18. | |||
| 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 DODAGVersionNumber higher than the highest | advertise a DODAGVersionNumber higher than the highest | |||
| DODAGVersionNumber it has heard. Higher is defined as the | DODAGVersionNumber it has heard. Higher is defined as the | |||
| greater-than operator in Section 7. | greater-than operator in Section 7. | |||
| 6. Once a node has advertised a DODAG Version by sending a DIO, it | 6. Once a node has advertised a DODAG Version by sending a DIO, it | |||
| MUST NOT be a member of a previous DODAG Version of the same | MUST NOT be a member of a previous DODAG Version of the same | |||
| DODAG (i.e. with the same RPLInstanceID, the same DODAGID, and a | DODAG (i.e., with the same RPLInstanceID, the same DODAGID, and a | |||
| lower DODAGVersionNumber). Lower is defined as the less-than | lower DODAGVersionNumber). Lower is defined as the less-than | |||
| operator in Section 7. | operator in Section 7. | |||
| 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 no longer | |||
| be associated with that DODAG), then the DODAG information should not | to be associated with that DODAG), then the DODAG information should | |||
| be suppressed until after the expiration of an implementation- | not be suppressed until after the expiration of an implementation- | |||
| specific local timer. During the interval prior to suppression of | specific local timer. During the interval prior to suppression of | |||
| the 'old' DODAG state, the node will be able to observe if the | the "old" DODAG state, the node will be able to observe if the | |||
| DODAGVersionNumber has been incremented should any new parents | DODAGVersionNumber has been incremented should any new parents | |||
| appear. This will help protect against the possibility of loops that | appear. This will help protect against the possibility of loops that | |||
| may occur if that node were to inadvertently rejoin the old DODAG | may occur if that node were to inadvertently rejoin the old DODAG | |||
| Version in its own prior sub-DODAG. | Version in its own prior sub-DODAG. | |||
| As the DODAGVersionNumber is incremented, a new DODAG Version spreads | As the DODAGVersionNumber is incremented, a new DODAG Version spreads | |||
| outward from the DODAG root. A parent that advertises the new | outward from the DODAG root. A parent that advertises the new | |||
| DODAGVersionNumber cannot belong to the sub-DODAG of a node | DODAGVersionNumber cannot belong to the sub-DODAG of a node | |||
| advertising an older DODAGVersionNumber. Therefore a node can safely | advertising an older DODAGVersionNumber. Therefore, a node can | |||
| add a parent of any Rank with a newer DODAGVersionNumber without | safely add a parent of any Rank with a newer DODAGVersionNumber | |||
| forming a loop. | without forming a loop. | |||
| For example, suppose that a node has left a DODAG with | For example, suppose that a node has left a DODAG with | |||
| DODAGVersionNumber N. Suppose that node had a sub-DODAG, and did | DODAGVersionNumber N. Suppose that a node had a sub-DODAG and did | |||
| attempt to poison that sub-DODAG by advertising a rank of | attempt to poison that sub-DODAG by advertising a Rank of | |||
| INFINITE_RANK, but those advertisements may have become lost in the | INFINITE_RANK, but those advertisements may have become lost in the | |||
| LLN. Then, if the node did observe a candidate neighbor advertising | LLN. Then, if the node did observe a candidate neighbor advertising | |||
| a position in that original DODAG at DODAGVersionNumber N, that | a position in that original DODAG at DODAGVersionNumber N, that | |||
| candidate neighbor could possibly have been in the node's former sub- | candidate neighbor could possibly have been in the node's former sub- | |||
| DODAG and there is a possible case where to add that candidate | DODAG, and there is a possible case where adding that candidate | |||
| neighbor as a parent could cause a loop. If that candidate neighbor | neighbor as a parent could cause a loop. In this case, if that | |||
| in this case is observed to advertise a DODAGVersionNumber N+1, then | candidate neighbor is observed to advertise a DODAGVersionNumber N+1, | |||
| that candidate neighbor is certain to be safe, since it is certain | then that candidate neighbor is certain to be safe, since it is | |||
| not to be in that original node's sub-DODAG as it has been able to | certain not to be in that original node's sub-DODAG, as it has been | |||
| increment the DODAGVersionNumber by hearing from the DODAG root while | able to increment the DODAGVersionNumber by hearing from the DODAG | |||
| that original node was detached. It is for this reason that it is | root while that original node was detached. For this reason, it is | |||
| useful for the detached node to remember the original DODAG | useful for the detached node to remember the original DODAG | |||
| information, including the DODAGVersionNumber N. | information, including the DODAGVersionNumber N. | |||
| Exactly when a DODAG Root increments the DODAGVersionNumber is | Exactly when a DODAG root increments the DODAGVersionNumber is | |||
| implementation dependent and out of scope for this specification. | implementation dependent and out of scope for this specification. | |||
| Examples include incrementing the DODAGVersionNumber periodically, | Examples include incrementing the DODAGVersionNumber periodically, | |||
| upon administrative intervention, or on application-level detection | upon administrative intervention, or on application-level detection | |||
| of lost connectivity or DODAG inefficiency. | of lost connectivity or DODAG inefficiency. | |||
| After a node transitions to and advertises a new DODAG Version, the | After a node transitions to and advertises a new DODAG Version, the | |||
| rules above make it unable to advertise the previous DODAG Version | rules above make it unable to advertise the previous DODAG Version | |||
| (prior DODAGVersionNumber) once it has committed to advertising the | (prior DODAGVersionNumber) once it has committed to advertising the | |||
| new DODAG Version. | new DODAG Version. | |||
| 8.2.2.2. DODAG Roots | 8.2.2.2. DODAG Roots | |||
| skipping to change at page 71, line 19 ¶ | skipping to change at page 70, line 33 ¶ | |||
| After a node transitions to and advertises a new DODAG Version, the | After a node transitions to and advertises a new DODAG Version, the | |||
| rules above make it unable to advertise the previous DODAG Version | rules above make it unable to advertise the previous DODAG Version | |||
| (prior DODAGVersionNumber) once it has committed to advertising the | (prior DODAGVersionNumber) once it has committed to advertising the | |||
| new DODAG Version. | new DODAG Version. | |||
| 8.2.2.2. DODAG Roots | 8.2.2.2. DODAG Roots | |||
| 1. A DODAG root without possibility to satisfy the application- | 1. A DODAG root without possibility to satisfy the application- | |||
| defined goal MUST NOT set the Grounded bit. | defined goal MUST NOT set the 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. | |||
| In a deployment that uses non-RPL links to federate a number of LLN | In a deployment that uses non-LLN links to federate a number of LLN | |||
| roots, it is possible to run RPL over those non-RPL links and use one | roots, it is possible to run RPL over those non-RPL links 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 the LLN root itself, expose a Rank | |||
| ROOT_RANK to the LLN. These virtual roots are part of the same DODAG | of ROOT_RANK to the LLN. These virtual roots are part of the same | |||
| and advertise the same DODAGID. They coordinate DODAGVersionNumbers | DODAG and advertise the same DODAGID. They coordinate | |||
| and other DODAG parameters with the virtual root over the backbone. | DODAGVersionNumbers and other DODAG parameters with the virtual root | |||
| The method of coordination is out of scope for this specification (to | over the backbone. The method of coordination is out of scope for | |||
| be defined in future companion specifications). | this specification (to be defined in future companion | |||
| specifications). | ||||
| 8.2.2.3. DODAG Selection | 8.2.2.3. DODAG Selection | |||
| The objective function and the set of advertised routing metrics and | The Objective Function and the set of advertised routing metrics and | |||
| constraints of a DAG determines how a node selects its neighbor set, | constraints of a DAG determine how a node selects its neighbor set, | |||
| parent set, and preferred parents. This selection implicitly also | parent set, and preferred parents. This selection implicitly also | |||
| determines the DODAG within a DAG. Such selection can include | determines the DODAG within a DAG. Such selection can include | |||
| administrative preference (Prf) as well as metrics or other | administrative preference (Prf) as well as metrics or other | |||
| considerations. | considerations. | |||
| If a node has the option to join a more preferred DODAG while still | If a node has the option to join a more preferred DODAG while still | |||
| meeting other optimization objectives, then the node will generally | meeting other optimization objectives, then the node will generally | |||
| seek to join the more preferred DODAG as determined by the OF. All | seek to join the more preferred DODAG as determined by the OF. All | |||
| else being equal, it is left to the implementation to determine which | else being equal, it is left to the implementation to determine which | |||
| DODAG is most preferred (since, as a reminder, a node must only join | DODAG is most preferred (since, as a reminder, a node must only join | |||
| one DODAG per RPL Instance). | one DODAG per RPL Instance). | |||
| 8.2.2.4. Rank and Movement within a DODAG Version | 8.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 Version. | 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 Version. | within the DODAG Version. | |||
| 3. Let L be the lowest rank within a DODAG Version that a given node | 3. Let L be the lowest Rank within a DODAG Version that a given node | |||
| has advertised. Within the same DODAG Version, that node MUST | has advertised. Within the same DODAG Version, that node 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 within a DODAG version | a node MAY advertise an INFINITE_RANK within a DODAG Version | |||
| without restriction. If a node's Rank were to be higher than | without restriction. If a node's Rank were to be higher than | |||
| allowed by L + DAGMaxRankIncrease, when it advertises Rank it | allowed by L + DAGMaxRankIncrease, when it advertises Rank, it | |||
| MUST advertise its Rank as INFINITE_RANK. | MUST advertise its Rank as INFINITE_RANK. | |||
| 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 Version of which this 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 DODAGVersionNumber | 5. A node MAY, at any time after hearing the next DODAGVersionNumber | |||
| advertised from suitable DODAG parents, choose to migrate to the | advertised from suitable DODAG parents, choose to migrate to the | |||
| next DODAG Version within the DODAG. | next DODAG Version within the DODAG. | |||
| Conceptually, an implementation is maintaining a DODAG parent set | Conceptually, an implementation is maintaining a DODAG parent set | |||
| within the DODAG Version. 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 Version, the DODAG parent set | When a node migrates to the next DODAG Version, the DODAG parent set | |||
| needs to be rebuilt for the new Version. An implementation could | needs to be rebuilt for the new Version. An implementation could | |||
| defer to migrate for some reasonable amount of time, to see if some | defer to migrate for some reasonable amount of time, to see if some | |||
| other neighbors with potentially better metrics but higher rank | other neighbors with potentially better metrics but higher Rank | |||
| announce themselves. Similarly, when a node jumps into a new DODAG | announce themselves. Similarly, when a node jumps into a new DODAG, | |||
| it needs to construct a new DODAG parent set for this new DODAG. | it needs to construct a new DODAG parent set for this new DODAG. | |||
| If a node needs to move Down a DODAG that it is attached to, | If a node needs to move Down a DODAG that it is attached to, | |||
| increasing its Rank, then it MAY poison its routes and delay before | increasing its Rank, then it MAY poison its routes and delay before | |||
| moving as described in Section 8.2.2.5. | moving as described in Section 8.2.2.5. | |||
| A node is allowed to join any DODAG Version that it has never been a | A node is allowed to join any DODAG Version that it has never been a | |||
| prior member of without any restrictions, but if the node has been a | prior member of without any restrictions, but if the node has been a | |||
| prior member of the DODAG Version then it must continue to observe | prior member of the DODAG Version, then it must continue to observe | |||
| the rule that it may not advertise a rank higher than | the rule that it may not advertise a Rank higher than | |||
| L+DAGMaxRankIncrease at any point in the life of the DODAG Version. | L+DAGMaxRankIncrease at any point in the life of the DODAG Version. | |||
| This rule must be observed so as not to create a loophole that would | This rule must be observed so as not to create a loophole that would | |||
| allow the node to effectively increment its rank all the way to | allow the node to effectively increment its Rank all the way to | |||
| INFINITE_RANK, which may have impact on other nodes and create a | INFINITE_RANK, which may have impact on other nodes and create a | |||
| resource-wasting count-to-infinity scenario. | resource-wasting count-to-infinity scenario. | |||
| 8.2.2.5. Poisoning | 8.2.2.5. Poisoning | |||
| 1. A node poisons routes by advertising a Rank of INFINITE_RANK. | 1. A node poisons routes by advertising a Rank of INFINITE_RANK. | |||
| 2. A node MUST NOT have any nodes with a Rank of INFINITE_RANK in | 2. A node MUST NOT have any nodes with a Rank of INFINITE_RANK in | |||
| its parent set. | its parent set. | |||
| Although an implementation may advertise INFINITE_RANK for the | Although an implementation may advertise INFINITE_RANK for the | |||
| purposes of poisoning, doing so is not the same as setting Rank to | purposes of poisoning, doing so is not the same as setting Rank to | |||
| INFINITE_RANK. For example, a node may continue to send data packets | INFINITE_RANK. For example, a node may continue to send data packets | |||
| whose RPL Packet Information includes a Rank that is not | whose RPL Packet Information includes a Rank that is not | |||
| INFINITE_RANK, yet still advertise INFINITE_RANK in its DIOs. | INFINITE_RANK, yet still advertise INFINITE_RANK in its DIOs. | |||
| When a (former) parent is observed to advertise a Rank of | When a (former) parent is observed to advertise a Rank of | |||
| INFINITE_RANK, that (former) parent has detached from the DODAG and | INFINITE_RANK, that (former) parent has detached from the DODAG and | |||
| is no longer able to act as a parent, nor is there any way that | is no longer able to act as a parent, nor is there any way that | |||
| another node may be considered to have a Rank greater-than | another node may be considered to have a Rank greater-than | |||
| INFINITE_RANK. Therefore that (former) parent cannot act as a parent | INFINITE_RANK. Therefore, that (former) parent cannot act as a | |||
| any longer and is removed from the parent set. | parent any longer and is removed from the parent set. | |||
| 8.2.2.6. Detaching | 8.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 | |||
| Version, i.e. that cannot retain non-empty parent set without | Version, i.e., that cannot retain non-empty parent set without | |||
| violating the rules of this specification, MAY detach from this | violating the rules of this specification, MAY detach from this | |||
| DODAG Version. A node that detaches becomes root of its own | DODAG Version. A node that detaches becomes the root of its own | |||
| floating DODAG and SHOULD immediately advertise this new | floating DODAG and SHOULD immediately advertise this new | |||
| situation in a DIO as an alternate to poisoning. | situation in a DIO as an alternate to poisoning. | |||
| 8.2.2.7. Following a Parent | 8.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 Version, or | A DODAG parent may have moved, migrated to the next DODAG Version, or | |||
| jumped to a different DODAG. A node ought to give some preference to | jumped to a different DODAG. A node ought to give some preference to | |||
| remaining in the current DODAG, if possible via an alternate parent, | remaining in the current DODAG, if possible via an alternate parent, | |||
| but ought to follow the parent if there are no other options. | but ought to follow the parent if there are no other options. | |||
| 8.2.3. DIO Message Communication | 8.2.3. DIO Message Communication | |||
| When an DIO message is received, the receiving node must first | When a 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 a node MUST silently discard | eligible for further processing and a node MUST silently discard | |||
| it. (See Section 18 for error logging). | it. (See Section 18 for error logging). | |||
| 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 and the DIO message is not malformed, the node MUST | neighbor set and the DIO message is not malformed, the node MUST | |||
| skipping to change at page 74, line 30 ¶ | skipping to change at page 74, line 7 ¶ | |||
| 8.2.3.1. DIO Message Processing | 8.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 8.2. When a node places a neighbor | discovery as described in Section 8.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 per an optimization | |||
| optimization objective, resulting in a more preferred parent at a | objective, resulting in a more preferred parent at a greater Rank.) | |||
| greater rank). | ||||
| 8.3. DIO Transmission | 8.3. DIO Transmission | |||
| RPL nodes transmit DIOs using a Trickle timer | RPL nodes transmit DIOs using a Trickle timer [RFC6206]. A DIO from | |||
| ([I-D.ietf-roll-trickle]). A DIO from a sender with a lesser DAGRank | a sender with a lesser DAGRank that causes no changes to the | |||
| that causes no changes to the recipient's parent set, preferred | recipient's parent set, preferred parent, or Rank SHOULD be | |||
| parent, or Rank SHOULD be considered consistent with respect to the | considered consistent with respect to the Trickle timer. | |||
| Trickle timer. | ||||
| The following packets and events MUST be considered inconsistencies | The following packets and events MUST be considered inconsistencies | |||
| with respect to the Trickle timer, and cause the Trickle timer to | with respect to the Trickle timer, and cause the Trickle timer to | |||
| reset: | 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 11.2. | detailed in Section 11.2. | |||
| o When a node receives a multicast DIS message without a Solicited | o When a node receives a multicast DIS message without a Solicited | |||
| Information option, unless a DIS flag restricts this behavior. | Information option, unless a DIS flag restricts this behavior. | |||
| o When a node receives a multicast DIS with a Solicited Information | o When a node receives a multicast DIS with a Solicited Information | |||
| option and the node matches all of the predicates in the Solicited | option and the node matches all of the predicates in the Solicited | |||
| Information option, unless a DIS flag restricts this behavior. | Information option, unless a DIS flag restricts this behavior. | |||
| o When a node joins a new DODAG Version (e.g. by updating its | o When a node joins a new DODAG Version (e.g., by updating its | |||
| DODAGVersionNumber, joining a new RPL Instance, etc.). | DODAGVersionNumber, joining a new RPL Instance, etc.). | |||
| Note that this list is not exhaustive, and an implementation MAY | Note that this list is not exhaustive, and an implementation MAY | |||
| consider other messages or events to be inconsistencies. | consider other messages or events to be inconsistencies. | |||
| A node SHOULD NOT reset its DIO trickle timer in response to unicast | A node SHOULD NOT reset its DIO Trickle timer in response to unicast | |||
| DIS messages. When a node receives a unicast DIS without a Solicited | DIS messages. When a node receives a unicast DIS without a Solicited | |||
| Information option, it MUST unicast a DIO to the sender in response. | Information option, it MUST unicast a DIO to the sender in response. | |||
| This DIO MUST include a DODAG Configuration option. When a node | This DIO MUST include a DODAG Configuration option. When a node | |||
| receives a unicast DIS message with a Solicited Information option | receives a unicast DIS message with a Solicited Information option | |||
| and matches the predicates of that Solicited Information option, it | and matches the predicates of that Solicited Information option, it | |||
| MUST unicast a DIO to the sender in response. This unicast DIO MUST | MUST unicast a DIO to the sender in response. This unicast DIO MUST | |||
| include a DODAG Configuration Option. Thus a node MAY transmit a | include a DODAG Configuration option. Thus, a node MAY transmit a | |||
| unicast DIS message to a potential DODAG parent in order to probe for | unicast DIS message to a potential DODAG parent in order to probe for | |||
| DODAG Configuration and other parameters. | DODAG Configuration and other parameters. | |||
| 8.3.1. Trickle Parameters | 8.3.1. Trickle Parameters | |||
| The configuration parameters of the trickle timer are specified as | The configuration parameters of the Trickle timer are specified as | |||
| follows: | follows: | |||
| Imin: learned from the DIO message as (2^DIOIntervalMin)ms. The | Imin: learned from the DIO message as (2^DIOIntervalMin) ms. The | |||
| default value of DIOIntervalMin is DEFAULT_DIO_INTERVAL_MIN. | default value of DIOIntervalMin is DEFAULT_DIO_INTERVAL_MIN. | |||
| Imax: learned from the DIO message as DIOIntervalDoublings. The | Imax: learned from the DIO message as DIOIntervalDoublings. The | |||
| default value of DIOIntervalDoublings is | default value of DIOIntervalDoublings is | |||
| DEFAULT_DIO_INTERVAL_DOUBLINGS. | DEFAULT_DIO_INTERVAL_DOUBLINGS. | |||
| k: learned from the DIO message as DIORedundancyConstant. The | k: learned from the DIO message as DIORedundancyConstant. The | |||
| default value of DIORedundancyConstant is | default value of DIORedundancyConstant is | |||
| DEFAULT_DIO_REDUNDANCY_CONSTANT. In RPL, when k has the value | DEFAULT_DIO_REDUNDANCY_CONSTANT. In RPL, when k has the value | |||
| of 0x00 this is to be treated as a redundancy constant of | of 0x00, this is to be treated as a redundancy constant of | |||
| infinity in RPL, i.e. Trickle never suppresses messages. | infinity in RPL, i.e., Trickle never suppresses messages. | |||
| 8.4. DODAG Selection | 8.4. DODAG Selection | |||
| The DODAG selection is implementation and OF dependent. In order to | The DODAG selection is implementation and OF dependent. In order to | |||
| limit erratic movements, and all metrics being equal, nodes SHOULD | limit erratic movements, and all metrics being equal, nodes SHOULD | |||
| keep their previous selection. Also, nodes SHOULD provide a means to | keep their previous selection. Also, nodes SHOULD provide a means to | |||
| filter out a parent whose availability is detected as fluctuating, at | filter out a parent whose availability is detected as fluctuating, at | |||
| least when more stable choices are available. | least when more stable choices are available. | |||
| When connection to a grounded DODAG 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. | |||
| 8.5. Operation as a Leaf Node | 8.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 or does | One example of such a case is when a node does not understand or does | |||
| not support (policy) the RPL Instance's OF or advertised metric/ | not support (policy) the RPL Instance's OF or advertised metric/ | |||
| constraint. As specified in Section 18.6 related to policy function, | constraint. As specified in Section 18.6, related to policy | |||
| the node may either join the DODAG as a leaf node or may not join the | function, the node may either join the DODAG as a leaf node or may | |||
| DODAG. As mentioned in Section 18.5, it is then recommended to log a | not join the DODAG. As mentioned in Section 18.5, it is then | |||
| fault. | recommended to log a fault. | |||
| A leaf node does not extend DODAG connectivity but in some cases the | A leaf node does not extend DODAG connectivity; however, in some | |||
| leaf node may still need to transmit DIOs on occasion, in particular | cases, the leaf node may still need to transmit DIOs on occasion, in | |||
| when the leaf node may not have always been acting as a leaf node and | particular, when the leaf node may not have always been acting as a | |||
| an inconsistency is detected. | leaf node and an inconsistency is detected. | |||
| A node operating as a leaf node must obey the following rules: | 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 suppress DIO transmission, unless the DIO transmission has | 3. It MAY suppress DIO transmission, unless the DIO transmission has | |||
| been triggered due to detection of inconsistency when a packet is | been triggered due to detection of inconsistency when a packet is | |||
| being forwarded or in response to a unicast DIS message, in which | being forwarded or in response to a unicast DIS message, in which | |||
| skipping to change at page 76, line 49 ¶ | skipping to change at page 76, line 32 ¶ | |||
| 5. It MAY transmit multicast DAOs to the '1 hop' neighborhood as | 5. It MAY transmit multicast DAOs to the '1 hop' neighborhood as | |||
| described in Section 9.10. | described in Section 9.10. | |||
| A particular case that requires a leaf node to send a DIO is if that | A particular case that requires a leaf node to send a DIO is if that | |||
| leaf node was a prior member of another DODAG and another node | leaf node was a prior member of another DODAG and another node | |||
| forwards a message assuming the old topology, triggering an | forwards a message assuming the old topology, triggering an | |||
| inconsistency. The leaf node needs to transmit a DIO in order to | inconsistency. The leaf node needs to transmit a DIO in order to | |||
| repair the inconsistency. Note that due to the lossy nature of LLNs, | repair the inconsistency. Note that due to the lossy nature of LLNs, | |||
| even though the leaf node may have optimistically poisoned its routes | even though the leaf node may have optimistically poisoned its routes | |||
| by advertising a rank of INFINITE_RANK in the old DODAG prior to | by advertising a Rank of INFINITE_RANK in the old DODAG prior to | |||
| becoming a leaf node, that advertisement may have become lost and a | becoming a leaf node, that advertisement may have become lost and a | |||
| leaf node must be capable to send a DIO later in order to repair the | leaf node must be capable to send a DIO later in order to repair the | |||
| inconsistency. | inconsistency. | |||
| In the general case, the leaf node MUST NOT advertise itself as a | In the general case, the leaf node MUST NOT advertise itself as a | |||
| router (i.e. send DIOs). | router (i.e., send DIOs). | |||
| 8.6. Administrative Rank | 8.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 | |||
| a node beyond that computed by the OF based on some implementation | by a node beyond that computed by the OF based on some | |||
| specific policy and properties of the node. For example, a node that | implementation-specific policy and properties of the node. For | |||
| has limited battery should be a leaf unless there is no other choice, | example, a node that has a limited battery should be a leaf unless | |||
| and may then augment the rank computation specified by the OF in | there is no other choice, and may then augment the Rank computation | |||
| order to expose an exaggerated rank. | specified by the OF in order to expose an exaggerated Rank. | |||
| 9. Downward Routes | 9. Downward Routes | |||
| This section describes how RPL discovers and maintains downward | This section describes how RPL discovers and maintains Downward | |||
| routes. RPL constructs and maintains downward routes with | routes. RPL constructs and maintains Downward routes with | |||
| Destination Advertisement Object (DAO) messages. Downward routes | Destination Advertisement Object (DAO) messages. Downward routes | |||
| support P2MP flows, from the DODAG roots toward the leaves. Downward | support P2MP flows, from the DODAG roots toward the leaves. Downward | |||
| routes also support P2P flows: P2P messages can flow toward a DODAG | routes also support P2P flows: P2P messages can flow toward a DODAG | |||
| Root (or a common ancestor) through an upward route, then away from | root (or a common ancestor) through an Upward route, then away from | |||
| the DODAG Root to a destination through a downward route. | the DODAG root to a destination through a Downward route. | |||
| This specification describes the two modes a RPL Instance may choose | This specification describes the two modes a RPL Instance may choose | |||
| from for maintaining downward routes. In the first mode, called | from for maintaining Downward routes. In the first mode, called | |||
| "storing", nodes store downward routing tables for their sub-DODAG. | "Storing", nodes store Downward routing tables for their sub-DODAG. | |||
| Each hop on a downward route in a storing network examines its | Each hop on a Downward route in a storing network examines its | |||
| routing table to decide on the next hop. In the second mode, called | routing table to decide on the next hop. In the second mode, called | |||
| "non-storing", nodes do not store downward routing tables. Downward | "Non-Storing", nodes do not store Downward routing tables. Downward | |||
| packets are routed with source routes populated by a DODAG Root | packets are routed with source routes populated by a DODAG root | |||
| [I-D.ietf-6man-rpl-routing-header]. | [RFC6554]. | |||
| RPL allows a simple one-hop P2P optimization for both storing and | RPL allows a simple one-hop P2P optimization for both storing and | |||
| non-storing networks. A node may send a P2P packet destined to a | non-storing networks. A node may send a P2P packet destined to a | |||
| one-hop neighbor directly to that node. | one-hop neighbor directly to that node. | |||
| 9.1. Destination Advertisement Parents | 9.1. Destination Advertisement Parents | |||
| To establish downward routes, RPL nodes send DAO messages upwards. | To establish Downward routes, RPL nodes send DAO messages Upward. | |||
| The next hop destinations of these DAO messages are called DAO | The next-hop destinations of these DAO messages are called "DAO | |||
| parents. The collection of a node's DAO parents is called the DAO | parents". The collection of a node's DAO parents is called the "DAO | |||
| parent set. | parent set". | |||
| 1. A node MAY send DAO messages using the all-RPL-nodes multicast | 1. A node MAY send DAO messages using the all-RPL-nodes multicast | |||
| address, which is an optimization to provision one-hop routing. | address, which is an optimization to provision one-hop routing. | |||
| The 'K' bit MUST be cleared on transmission of the multicast DAO. | The 'K' bit MUST be cleared on transmission of the multicast DAO. | |||
| 2. A node's DAO parent set MUST be a subset of its DODAG parent set. | 2. A node's DAO parent set MUST be a subset of its DODAG parent set. | |||
| 3. In storing mode operation, a node MUST NOT address unicast DAO | 3. In Storing mode operation, a node MUST NOT address unicast DAO | |||
| messages to nodes that are not DAO parents. | messages to nodes that are not DAO parents. | |||
| 4. In storing mode operation, the IPv6 source and destination | 4. In Storing mode operation, the IPv6 source and destination | |||
| addresses of a DAO message MUST be link-local addresses. | addresses of a DAO message MUST be link-local addresses. | |||
| 5. In non-storing mode operation, a node MUST NOT address unicast | 5. In Non-Storing mode operation, a node MUST NOT address unicast | |||
| DAO messages to nodes that are not DODAG roots. | DAO messages to nodes that are not DODAG roots. | |||
| 6. In non-storing mode operation, the IPv6 source and destination | 6. In Non-Storing mode operation, the IPv6 source and destination | |||
| addresses of a DAO message MUST be a unique-local or a global | addresses of a DAO message MUST be a unique-local or a global | |||
| addresses. | address. | |||
| The selection of DAO parents is implementation and objective function | The selection of DAO parents is implementation and Objective Function | |||
| specific. | specific. | |||
| 9.2. Downward Route Discovery and Maintenance | 9.2. Downward Route Discovery and Maintenance | |||
| Destination Advertisement may be configured to be entirely disabled, | Destination Advertisement may be configured to be entirely disabled, | |||
| or operate in either a storing or non-storing mode, as reported in | or operate in either a Storing or Non-Storing mode, as reported in | |||
| the MOP in the DIO message. | the MOP in the DIO message. | |||
| 1. All nodes who join a DODAG MUST abide by the MOP setting from the | 1. All nodes who join a DODAG MUST abide by the MOP setting from the | |||
| root. Nodes that do not have the capability to fully participate | root. Nodes that do not have the capability to fully participate | |||
| as a router, e.g. that does not match the advertised MOP, MAY | as a router, e.g., that do not match the advertised MOP, MAY join | |||
| join the DODAG as a leaf. | the DODAG as a leaf. | |||
| 2. If the MOP is 0, indicating no downward routing, nodes MUST NOT | 2. If the MOP is 0, indicating no Downward routing, nodes MUST NOT | |||
| transmit DAO messages, and MAY ignore DAO messages. | transmit DAO messages and MAY ignore DAO messages. | |||
| 3. In non-storing mode, the DODAG Root SHOULD store source routing | 3. In Non-Storing mode, the DODAG root SHOULD store source routing | |||
| table entries for destinations learned from DAOs. The DODAG Root | table entries for destinations learned from DAOs. The DODAG root | |||
| MUST be able to generate source routes for those destinations | MUST be able to generate source routes for those destinations | |||
| learned from DAOs which were stored. | learned from DAOs that were stored. | |||
| 4. In storing mode, all non-root, non-leaf nodes MUST store routing | 4. In Storing mode, all non-root, non-leaf nodes MUST store routing | |||
| table entries for destinations learned from DAOs. | table entries for destinations learned from DAOs. | |||
| A DODAG can have one of several possible modes of operation, as | A DODAG can have one of several possible modes of operation, as | |||
| defined by the MOP field. Either it does not support downward | defined by the MOP field. Either it does not support Downward | |||
| routes, it supports downward routes through source routing from DODAG | routes, it supports Downward routes through source routing from DODAG | |||
| Roots, or it supports downward routes through in-network routing | roots, or it supports Downward routes through in-network routing | |||
| tables. | tables. | |||
| When downward routes are supported through source routing from DODAG | When Downward routes are supported through source routing from DODAG | |||
| Roots, it is generally expected that the DODAG Root has stored the | roots, it is generally expected that the DODAG root has stored the | |||
| source routing information learned from DAOs in order to construct | source routing information learned from DAOs in order to construct | |||
| the source routes. If the DODAG Root fails to store some | the source routes. If the DODAG root fails to store some | |||
| information, then some destinations may be unreachable. | information, then some destinations may be unreachable. | |||
| When downward routes are supported through in-network routing tables, | When Downward routes are supported through in-network routing tables, | |||
| the multicast operation defined in this specification may or may not | the multicast operation defined in this specification may or may not | |||
| be supported, also as indicated by the MOP field. | be supported, also as indicated by the MOP field. | |||
| When downward routes are supported through in-network routing tables | When Downward routes are supported through in-network routing tables, | |||
| as described in this specification, it is expected that nodes acting | as described in this specification, it is expected that nodes acting | |||
| as routers have been provisioned sufficiently to hold the required | as routers have been provisioned sufficiently to hold the required | |||
| routing table state. If a node acting as a router is unable to hold | routing table state. If a node acting as a router is unable to hold | |||
| the full routing table state then the routing state is not complete, | the full routing table state then the routing state is not complete, | |||
| messages may be dropped as a consequence, and a fault may be logged | messages may be dropped as a consequence, and a fault may be logged | |||
| (Section 18.5). Future extensions to RPL may elaborate on refined | (Section 18.5). Future extensions to RPL may elaborate on refined | |||
| actions/behaviors to manage this case. | actions/behaviors to manage this case. | |||
| As of this specification RPL does not support mixed-mode operation, | As of the writing of this specification, RPL does not support mixed- | |||
| where some nodes source route and other store routing tables: future | mode operation, where some nodes source route and other store routing | |||
| extensions to RPL may support this mode of operation. | tables: future extensions to RPL may support this mode of operation. | |||
| 9.2.1. Maintenance of Path Sequence | 9.2.1. Maintenance of Path Sequence | |||
| For each Target that is associated with (owned by) a node, that node | For each Target that is associated with (owned by) a node, that node | |||
| is responsible to emit DAO messages in order to provision the | is responsible to emit DAO messages in order to provision the | |||
| downward routes. The Target+Transit information contained in those | Downward routes. The Target+Transit information contained in those | |||
| DAO messages subsequently propagates Up the DODAG. The Path Sequence | DAO messages subsequently propagates Up the DODAG. The Path Sequence | |||
| counter in the Transit information option is used to indicate | counter in the Transit information option is used to indicate | |||
| freshness and update stale downward routing information as described | freshness and update stale Downward routing information as described | |||
| in Section 7. | in Section 7. | |||
| For a Target that is associated with (owned by) a node, that node | For a Target that is associated with (owned by) a node, that node | |||
| MUST increment the Path Sequence counter, and generate a new DAO | MUST increment the Path Sequence counter, and generate a new DAO | |||
| message, when: | message, when: | |||
| 1. The Path Lifetime is to be updated (e.g. a refresh or a no-Path) | 1. the Path Lifetime is to be updated (e.g., a refresh or a no- | |||
| Path). | ||||
| 2. The Parent Address list is to be changed | 2. the DODAG Parent Address subfield list is to be changed. | |||
| For a Target that is associated with (owned by) a node, that node MAY | For a Target that is associated with (owned by) a node, that node MAY | |||
| increment the Path Sequence counter, and generate a new DAO message, | increment the Path Sequence counter, and generate a new DAO message, | |||
| on occasion in order to refresh the downward routing information. In | on occasion in order to refresh the Downward routing information. In | |||
| storing mode, the node generates such DAO to each of its DAO parents | Storing mode, the node generates such a DAO to each of its DAO | |||
| in order to enable multipath. All DAOs generated at the same time | parents in order to enable multipath. All DAOs generated at the same | |||
| for a same target MUST be sent with the same path sequence in the | time for the same Target MUST be sent with the same Path Sequence in | |||
| transit information. | the Transit Information. | |||
| 9.2.2. Generation of DAO Messages | 9.2.2. Generation of DAO Messages | |||
| A node might send DAO messages when it receives DAO messages, as a | A node might send DAO messages when it receives DAO messages, as a | |||
| result of changes in its DAO parent set, or in response to another | result of changes in its DAO parent set, or in response to another | |||
| event such as the expiry of a related prefix lifetime. In the case | event such as the expiry of a related prefix lifetime. In the case | |||
| of receiving DAOs, it matters whether the DAO message is "new," or | of receiving DAOs, it matters whether the DAO message is "new" or | |||
| contains new information. In non-storing mode, every DAO message a | contains new information. In Non-Storing mode, every DAO message a | |||
| node receives is "new." In storing mode, a DAO message is "new" if | node receives is "new". In Storing mode, a DAO message is "new" if | |||
| it satisfies any of these criteria for a contained Target: | it satisfies any of these criteria for a contained Target: | |||
| 1. it has a newer Path Sequence number, | 1. it has a newer Path Sequence number, | |||
| 2. it has additional Path Control bits, or | 2. it has additional Path Control bits, or | |||
| 3. it is a No-Path DAO message that removes the last Downward route | ||||
| 3. is a No-Path DAO message that removes the last downward route to | to a prefix. | |||
| a prefix. | ||||
| A node that receives a DAO message from its sub-DODAG MAY suppress | A node that receives a DAO message from its sub-DODAG MAY suppress | |||
| scheduling a DAO message transmission if that DAO message is not new. | scheduling a DAO message transmission if that DAO message is not new. | |||
| 9.3. DAO Base Rules | 9.3. DAO Base Rules | |||
| 1. If a node sends a DAO message with newer or different information | 1. If a node sends a DAO message with newer or different information | |||
| than the prior DAO message transmission, it MUST increment the | than the prior DAO message transmission, it MUST increment the | |||
| DAOSequence field by at least one. A DAO message transmission | DAOSequence field by at least one. A DAO message transmission | |||
| that is identical to the prior DAO message transmission MAY | that is identical to the prior DAO message transmission MAY | |||
| skipping to change at page 81, line 37 ¶ | skipping to change at page 80, line 39 ¶ | |||
| 5. A node that sets the 'K' flag in a unicast DAO message but does | 5. A node that sets the 'K' flag in a unicast DAO message but does | |||
| not receive a DAO-ACK in response MAY reschedule the DAO message | not receive a DAO-ACK in response MAY reschedule the DAO message | |||
| transmission for another attempt, up until an implementation- | transmission for another attempt, up until an implementation- | |||
| specific number of retries. | specific number of retries. | |||
| 6. Nodes SHOULD ignore DAOs without newer sequence numbers and MUST | 6. Nodes SHOULD ignore DAOs without newer sequence numbers and MUST | |||
| NOT process them further. | NOT process them further. | |||
| Unlike the Version field of a DIO, which is incremented only by a | Unlike the Version field of a DIO, which is incremented only by a | |||
| DODAG Root and repeated unchanged by other nodes, DAOSequence values | DODAG root and repeated unchanged by other nodes, DAOSequence values | |||
| are unique to each node. The sequence number space for unicast and | are unique to each node. The sequence number space for unicast and | |||
| multicast DAO messages can be either the same or distinct. It is | multicast DAO messages can be either the same or distinct. It is | |||
| RECOMMENDED to use the same sequence number space. | RECOMMENDED to use the same sequence number space. | |||
| 9.4. Structure of DAO Messages | 9.4. Structure of DAO Messages | |||
| DAOs follow a common structure in both storing and non-storing | DAOs follow a common structure in both storing and non-storing | |||
| networks. In the most general form, a DAO message may include | networks. In the most general form, a DAO message may include | |||
| several groups of options, where each group consists of one or more | several groups of options, where each group consists of one or more | |||
| Target options followed by one or more Transit Information options. | Target options followed by one or more Transit Information options. | |||
| skipping to change at page 81, line 48 ¶ | skipping to change at page 81, line 4 ¶ | |||
| are unique to each node. The sequence number space for unicast and | are unique to each node. The sequence number space for unicast and | |||
| multicast DAO messages can be either the same or distinct. It is | multicast DAO messages can be either the same or distinct. It is | |||
| RECOMMENDED to use the same sequence number space. | RECOMMENDED to use the same sequence number space. | |||
| 9.4. Structure of DAO Messages | 9.4. Structure of DAO Messages | |||
| DAOs follow a common structure in both storing and non-storing | DAOs follow a common structure in both storing and non-storing | |||
| networks. In the most general form, a DAO message may include | networks. In the most general form, a DAO message may include | |||
| several groups of options, where each group consists of one or more | several groups of options, where each group consists of one or more | |||
| Target options followed by one or more Transit Information options. | Target options followed by one or more Transit Information options. | |||
| The entire group of Transit Information options applies to the entire | The entire group of Transit Information options applies to the entire | |||
| group of Target options. Later sections describe further details for | group of Target options. Later sections describe further details for | |||
| each mode of operation. | each mode of operation. | |||
| 1. RPL nodes MUST include one or more RPL Target Options in each DAO | 1. RPL nodes MUST include one or more RPL Target options in each DAO | |||
| message they transmit. One RPL Target Option MUST have a prefix | message they transmit. One RPL Target option MUST have a prefix | |||
| that includes the node's IPv6 address if that node needs the | that includes the node's IPv6 address if that node needs the | |||
| DODAG to provision downward routes to that node. The RPL Target | DODAG to provision Downward routes to that node. The RPL Target | |||
| Option MAY be immediately followed by an opaque RPL Target | option MAY be immediately followed by an opaque RPL Target | |||
| Descriptor Option that qualifies it. | Descriptor option that qualifies it. | |||
| 2. When a node updates the information in a Transit Information | 2. When a node updates the information in a Transit Information | |||
| option for a Target option that covers one of its addresses, it | option for a Target option that covers one of its addresses, it | |||
| MUST increment the Path Sequence number in that Transit | MUST increment the Path Sequence number in that Transit | |||
| Information option. The Path Sequence number MAY be incremented | Information option. The Path Sequence number MAY be incremented | |||
| occasionally to cause a refresh to the downward routes. | occasionally to cause a refresh to the Downward routes. | |||
| 3. One or more RPL Target Option in a unicast DAO message MUST be | 3. One or more RPL Target options in a unicast DAO message MUST be | |||
| followed by one or more Transit Information Option. All the | followed by one or more Transit Information options. All the | |||
| transit options apply to all the target options that immediately | transit options apply to all the Target options that immediately | |||
| precede them. | precede them. | |||
| 4. Multicast DAOs MUST NOT include the Parent Address in Transit | 4. Multicast DAOs MUST NOT include the DODAG Parent Address subfield | |||
| Information options. | in Transit Information options. | |||
| 5. A node that receives and processes a DAO message containing | 5. A node that receives and processes a DAO message containing | |||
| information for a specific Target, and that has prior information | information for a specific Target, and that has prior information | |||
| for that Target, MUST use the Path Sequence number in the Transit | for that Target, MUST use the Path Sequence number in the Transit | |||
| Information option associated with that Target in order to | Information option associated with that Target in order to | |||
| determine whether or not the DAO message contains updated | determine whether or not the DAO message contains updated | |||
| information as per Section 7. | information per Section 7. | |||
| 6. If a node receives a DAO message that does not follow the above | 6. If a node receives a DAO message that does not follow the above | |||
| rules, it MUST discard the DAO message without further | rules, it MUST discard the DAO message without further | |||
| processing. | processing. | |||
| In non-storing mode, the root builds a strict source routing header, | In Non-Storing mode, the root builds a strict source routing header, | |||
| hop-by-hop, by recursively looking up one-hop information that ties a | hop-by-hop, by recursively looking up one-hop information that ties a | |||
| target (address or prefix) and a transit address together. In some | Target (address or prefix) and a transit address together. In some | |||
| cases, when a child address is derived from a prefix that is owned | cases, when a child address is derived from a prefix that is owned | |||
| and advertised by a parent, that parent-child relationship may be | and advertised by a parent, that parent-child relationship may be | |||
| inferred by the root for the purpose of constructing the source | inferred by the root for the purpose of constructing the source | |||
| routing header. In all other cases it is necessary to inform the | routing header. In all other cases, it is necessary to inform the | |||
| root of the transit-target relationship from a reachable target, so | root of the transit-Target relationship from a reachable target, so | |||
| as to later enable the recursive construction of the routing header. | as to later enable the recursive construction of the routing header. | |||
| An address that is advertised as target in a DAO message MUST be | An address that is advertised as a Target in a DAO message MUST be | |||
| collocated in the same router, or reachable onlink by the router that | collocated in the same router, or reachable on-link by the router | |||
| owns the address that is indicated in the associated transit | that owns the address that is indicated in the associated Transit | |||
| information. The following additional rules apply to ensure the | Information. The following additional rules apply to ensure the | |||
| continuity of the end-to-end source route path: | continuity of the end-to-end source route path: | |||
| 1. The address of a parent used in the transit option MUST be taken | 1. The address of a parent used in the transit option MUST be taken | |||
| from a PIO from that parent with the 'R' flag set. The 'R' flag | from a PIO from that parent with the 'R' flag set. The 'R' flag | |||
| in a PIO indicates that the prefix field actually contains the | in a PIO indicates that the prefix field actually contains the | |||
| full parent address but the child SHOULD NOT assume that the | full parent address but the child SHOULD NOT assume that the | |||
| parent address is onlink. | parent address is on-link. | |||
| 2. A PIO with a 'A' flag set indicates that the RPL child node may | 2. A PIO with an 'A' flag set indicates that the RPL child node may | |||
| use the prefix to autoconfigure an address. A parent that | use the prefix to autoconfigure an address. A parent that | |||
| advertises a prefix in a PIO with the 'A' flag set MUST ensure | advertises a prefix in a PIO with the 'A' flag set MUST ensure | |||
| that the address or the whole prefix in the PIO is reachable from | that the address or the whole prefix in the PIO is reachable from | |||
| the root by advertising it as a DAO target. If the parent also | the root by advertising it as a DAO target. If the parent also | |||
| sets the 'L' flag indicating that the prefix is onlink, then it | sets the 'L' flag indicating that the prefix is on-link, then it | |||
| MUST advertise the whole prefix as target in a DAO message. If | MUST advertise the whole prefix as Target in a DAO message. If | |||
| the 'L' flag is cleared, indicating a subnet operation, and the | the 'L' flag is cleared and the 'R' flag is set, indicating that | |||
| 'R' flag is set, indicating that the parent provides its own | the parent provides its own address in the PIO, then the parent | |||
| address in the PIO, then the parent MUST advertise that address | MUST advertise that address as a DAO target. | |||
| as a DAO target. | ||||
| 3. An address that is advertised as target in a DAO message MUST be | 3. An address that is advertised as Target in a DAO message MUST be | |||
| collocated in the same router or reachable onlink by the router | collocated in the same router or reachable on-link by the router | |||
| that owns the address that is indicated in the associated transit | that owns the address that is indicated in the associated Transit | |||
| information. | Information. | |||
| 4. In order to enable an optimum compression of the routing header, | 4. In order to enable an optimum compression of the routing header, | |||
| the parent SHOULD set the 'R' flag in all PIOs with the 'A' flag | the parent SHOULD set the 'R' flag in all PIOs with the 'A' flag | |||
| set and the 'L' flag cleared, and the child SHOULD prefer to use | set and the 'L' flag cleared, and the child SHOULD prefer to use | |||
| as transit the address of the parent that is found in the PIO | as transit the address of the parent that is found in the PIO | |||
| that is used to autoconfigure the address that is advertised as | that is used to autoconfigure the address that is advertised as | |||
| target in the DAO message. | Target in the DAO message. | |||
| 5. A router might have targets that are not known to be on-link for | 5. A router might have targets that are not known to be on-link for | |||
| a parent, either because they are addresses located on an | a parent, either because they are addresses located on an | |||
| alternate interface or because they belong to nodes that are | alternate interface or because they belong to nodes that are | |||
| external to RPL, for instance connected hosts. In order to | external to RPL, for instance connected hosts. In order to | |||
| inject such a target in the RPL network, the router MUST | inject such a Target in the RPL network, the router MUST | |||
| advertise itself as the Parent Address in the Transit Information | advertise itself as the DODAG Parent Address subfield in the | |||
| option for that target, using an address that is on-link for that | Transit Information option for that target, using an address that | |||
| nodes DAO parent. If the target belongs to an external node then | is on-link for that nodes DAO parent. If the Target belongs to | |||
| the router MUST set the External 'E' flag in the transit | an external node, then the router MUST set the External 'E' flag | |||
| information. | in the Transit Information. | |||
| A child node that has autoconfigured an address from a parent PIO | A child node that has autoconfigured an address from a parent PIO | |||
| with the 'L' flag set does not need to advertise that address as a | with the 'L' flag set does not need to advertise that address as a | |||
| DAO target since the parent insures that the whole prefix is already | DAO Target since the parent ensures that the whole prefix is already | |||
| reachable from the root. But if the 'L' flag is not set then it is | reachable from the root. However, if the 'L' flag is not set, then | |||
| necessary in non-storing mode for the child node to inform the root | it is necessary, in Non-Storing mode, for the child node to inform | |||
| of the parent-child relationship, using a reachable address of the | the root of the parent-child relationship, using a reachable address | |||
| parent, so as to enable the recursive construction of the routing | of the parent, so as to enable the recursive construction of the | |||
| header. This is done by associating an address of the parent as | routing header. This is done by associating an address of the parent | |||
| transit with the address of the child as target in a DAO message. | as transit with the address of the child as Target in a DAO message. | |||
| 9.5. DAO Transmission Scheduling | 9.5. DAO Transmission Scheduling | |||
| Because DAOs flow upwards, receiving a unicast DAO can trigger | Because DAOs flow Upward, receiving a unicast DAO can trigger sending | |||
| sending a unicast DAO to a DAO parent. | a unicast DAO to a DAO parent. | |||
| 1. On receiving a unicast DAO message with updated information, such | 1. On receiving a unicast DAO message with updated information, such | |||
| as containing a Transit Information option with a new Path | as containing a Transit Information option with a new Path | |||
| Sequence, a node SHOULD send a DAO. It SHOULD NOT send this DAO | Sequence, a node SHOULD send a DAO. It SHOULD NOT send this DAO | |||
| message immediately. It SHOULD delay sending the DAO message in | message immediately. It SHOULD delay sending the DAO message in | |||
| order to aggregate DAO information from other nodes for which it | order to aggregate DAO information from other nodes for which it | |||
| is a DAO parent. | is a DAO parent. | |||
| 2. A node SHOULD delay sending a DAO message with a timer | 2. A node SHOULD delay sending a DAO message with a timer | |||
| (DelayDAO). Receiving a DAO message starts the DelayDAO timer. | (DelayDAO). Receiving a DAO message starts the DelayDAO timer. | |||
| DAO messages received while the DelayDAO timer is active do not | DAO messages received while the DelayDAO timer is active do not | |||
| reset the timer. When the DelayDAO timer expires, the node sends | reset the timer. When the DelayDAO timer expires, the node sends | |||
| a DAO. | a DAO. | |||
| 3. When a node adds a node to its DAO parent set, it SHOULD schedule | 3. When a node adds a node to its DAO parent set, it SHOULD schedule | |||
| a DAO message transmission. | a DAO message transmission. | |||
| DelayDAO's value and calculation is implementation-dependent. A | DelayDAO's value and calculation is implementation dependent. A | |||
| default value of DEFAULT_DAO_DELAY is defined in this specification. | default value of DEFAULT_DAO_DELAY is defined in this specification. | |||
| 9.6. Triggering DAO Messages | 9.6. Triggering DAO Messages | |||
| Nodes can trigger their sub-DODAG to send DAO messages. Each node | Nodes can trigger their sub-DODAG to send DAO messages. Each node | |||
| maintains a DAO Trigger Sequence Number (DTSN), which it communicates | maintains a DAO Trigger Sequence Number (DTSN), which it communicates | |||
| through DIO messages. | through DIO messages. | |||
| 1. If a node hears one of its DAO parents increment its DTSN, the | 1. If a node hears one of its DAO parents increment its DTSN, the | |||
| node MUST schedule a DAO message transmission using rules in | node MUST schedule a DAO message transmission using rules in | |||
| Section 9.3 and Section 9.5. | Sections 9.3 and 9.5. | |||
| 2. In non-storing mode, if a node hears one of its DAO parents | 2. In Non-Storing mode, if a node hears one of its DAO parents | |||
| increment its DTSN, the node MUST increment its own DTSN. | increment its DTSN, the node MUST increment its own DTSN. | |||
| In a storing mode of operation, as part of routine routing table | In a Storing mode of operation, as part of routine routing table | |||
| updates and maintenance, a storing node MAY increment DTSN in order | updates and maintenance, a storing node MAY increment DTSN in order | |||
| to reliably trigger a set of DAO updates from its immediate children. | to reliably trigger a set of DAO updates from its immediate children. | |||
| In a storing mode of operation it is not necessary to trigger DAO | ||||
| In a Storing mode of operation, it is not necessary to trigger DAO | ||||
| updates from the entire sub-DODAG, since that state information will | updates from the entire sub-DODAG, since that state information will | |||
| propagate hop-by-hop Up the DODAG. | propagate hop-by-hop Up the DODAG. | |||
| In a non-storing mode of operation, a DTSN increment will also cause | In a Non-Storing mode of operation, a DTSN increment will also cause | |||
| the immediate children of a node to increment their DTSN in turn, | the immediate children of a node to increment their DTSN in turn, | |||
| triggering a set of DAO updates from the entire sub-DODAG. In a non- | triggering a set of DAO updates from the entire sub-DODAG. | |||
| storing mode of operation typically only the root would independently | Typically, in a Non-Storing mode of operation, only the root would | |||
| increment the DTSN when a DAO refresh is needed but a global repair | independently increment the DTSN when a DAO refresh is needed but a | |||
| (such as by incrementing DODAGVersionNumber) is not desired. In a | global repair (such as by incrementing DODAGVersionNumber) is not | |||
| non-storing mode of operation typically all non-root nodes would | desired. Typically, in a Non-Storing mode of operation, all non-root | |||
| increment their DTSN only when their parent(s) are observed to do so. | nodes would increment their DTSN only when their parent(s) are | |||
| observed to do so. | ||||
| In the general, a node may trigger DAO updates according to | In general, a node may trigger DAO updates according to | |||
| implementation specific logic, such as based on the detection of a | implementation-specific logic, such as based on the detection of a | |||
| downward route inconsistency or occasionally based upon an internal | Downward route inconsistency or occasionally based upon an internal | |||
| timer. | timer. | |||
| In the case of triggered DAOs, selecting a proper DAODelay can | In a storing network, selecting a proper DelayDAO for triggered DAOs | |||
| greatly reduce the number of DAOs transmitted. The trigger flows | can greatly reduce the number of DAOs transmitted. The trigger flows | |||
| Down the DODAG; in the best case the DAOs flow Up the DODAG such that | Down the DODAG; in the best case, the DAOs flow Up the DODAG such | |||
| leaves send DAOs first, with each node sending a DAO message only | that leaves send DAOs first, with each node sending a DAO message | |||
| once. Such a scheduling could be approximated by setting DAODelay | only once. Such a scheduling could be approximated by setting | |||
| inversely proportional to Rank. Note that this suggestion is | DelayDAO inversely proportional to Rank. Note that this suggestion | |||
| intended as an optimization to allow efficient aggregation (it is not | is intended as an optimization to allow efficient aggregation (it is | |||
| required for correct operation in the general case). | not required for correct operation in the general case). | |||
| 9.7. Non-storing Mode | 9.7. Non-Storing Mode | |||
| In non-storing mode, RPL routes messages downward using IP source | In Non-Storing mode, RPL routes messages Downward using IP source | |||
| routing. The following rule applies to nodes that are in non-storing | routing. The following rule applies to nodes that are in Non-Storing | |||
| mode. Storing mode has a separate set of rules, described in | mode. Storing mode has a separate set of rules, described in | |||
| Section 9.8. | Section 9.8. | |||
| 1. The Parent Address field of a Transit Information Option MUST | 1. The DODAG Parent Address subfield of a Transit Information option | |||
| contain one or more addresses. All of these addresses MUST be | MUST contain one or more addresses. All of these addresses MUST | |||
| addresses of DAO parents of the sender. | be addresses of DAO parents of the sender. | |||
| 2. DAOs are sent directly to the root along a default route | 2. DAOs are sent directly to the root along a default route | |||
| installed as part of the parent selection. | installed as part of the parent selection. | |||
| 3. When a node removes a node from its DAO parent set, it MAY | 3. When a node removes a node from its DAO parent set, it MAY | |||
| generate a new DAO message with an updated Transit Information | generate a new DAO message with an updated Transit Information | |||
| option. | option. | |||
| In non-storing mode, a node uses DAOs to report its DAO parents to | In Non-Storing mode, a node uses DAOs to report its DAO parents to | |||
| the DODAG Root. The DODAG Root can piece together a downward route | the DODAG root. The DODAG root can piece together a Downward route | |||
| to a node by using DAO parent sets from each node in the route. The | to a node by using DAO parent sets from each node in the route. The | |||
| Path Sequence information may be used to detect stale DAO | Path Sequence information may be used to detect stale DAO | |||
| information. The purpose of this per-hop route calculation is to | information. The purpose of this per-hop route calculation is to | |||
| minimize traffic when DAO parents change. If nodes reported complete | minimize traffic when DAO parents change. If nodes reported complete | |||
| source routes, then on a DAO parent change the entire sub-DODAG would | source routes, then on a DAO parent change, the entire sub-DODAG | |||
| have to send new DAOs to the DODAG Root. Therefore, in non-storing | would have to send new DAOs to the DODAG root. Therefore, in Non- | |||
| mode, a node can send a single DAO, although it might choose to send | Storing mode, a node can send a single DAO, although it might choose | |||
| more than one DAO message to each of multiple DAO parents. | to send more than one DAO message to each of multiple DAO parents. | |||
| Nodes pack DAOs by sending a single DAO message with multiple RPL | Nodes pack DAOs by sending a single DAO message with multiple RPL | |||
| Target Options. Each RPL Target Option has its own, immediately | Target options. Each RPL Target option has its own, immediately | |||
| following, Transit Information options. | following, Transit Information options. | |||
| 9.8. Storing Mode | 9.8. Storing Mode | |||
| In storing mode, RPL routes messages downward by the IPv6 destination | In Storing mode, RPL routes messages Downward by the IPv6 destination | |||
| address. The following rule apply to nodes that are in storing mode: | address. The following rules apply to nodes that are in Storing | |||
| mode: | ||||
| 1. The Parent Address field of a Transmit Information option MUST be | 1. The DODAG Parent Address subfield of a Transmit Information | |||
| empty. | option MUST be empty. | |||
| 2. On receiving a unicast DAO, a node MUST compute if the DAO would | 2. On receiving a unicast DAO, a node MUST compute if the DAO would | |||
| change the set of prefixes that the node itself advertises. This | change the set of prefixes that the node itself advertises. This | |||
| computation SHOULD include consultation of the Path Sequence | computation SHOULD include consultation of the Path Sequence | |||
| information in the Transit Information options associated with | information in the Transit Information options associated with | |||
| the DAO, to determine if the DAO message contains newer | the DAO, to determine if the DAO message contains newer | |||
| information that supersedes the information already stored at the | information that supersedes the information already stored at the | |||
| node. If so, the node MUST generate a new DAO message and | node. If so, the node MUST generate a new DAO message and | |||
| transmit it, following the rules in Section 9.5. Such a change | transmit it, following the rules in Section 9.5. Such a change | |||
| includes receiving a No-Path DAO. | includes receiving a No-Path DAO. | |||
| 3. When a node generates a new DAO, it SHOULD unicast it to each of | 3. When a node generates a new DAO, it SHOULD unicast it to each of | |||
| its DAO parents. It MUST NOT unicast the DAO message to nodes | its DAO parents. It MUST NOT unicast the DAO message to nodes | |||
| that are not DAO parents. | that are not DAO parents. | |||
| 4. When a node removes a node from its DAO parent set, it SHOULD | 4. When a node removes a node from its DAO parent set, it SHOULD | |||
| send a No-Path DAO message (Section 6.4.3) to that removed DAO | send a No-Path DAO message (Section 6.4.3) to that removed DAO | |||
| parent to invalidate the existing route. | parent to invalidate the existing route. | |||
| 5. If messages to an advertised downwards address suffer from a | 5. If messages to an advertised Downward address suffer from a | |||
| forwarding error, neighbor unreachable detected (NUD), or similar | forwarding error, Neighbor Unreachable Detection (NUD), or | |||
| failure, a node MAY mark the address as unreachable and generate | similar failure, a node MAY mark the address as unreachable and | |||
| an appropriate No-Path DAO. | generate an appropriate No-Path DAO. | |||
| DAOs advertise what destination addresses and prefixes a node has | DAOs advertise to which destination addresses and prefixes a node has | |||
| routes to. Unlike in non-storing mode, these DAOs do not communicate | routes. Unlike in Non-Storing mode, these DAOs do not communicate | |||
| information about the routes themselves: that information is stored | information about the routes themselves: that information is stored | |||
| within the network and is implicit from the IPv6 source address. | within the network and is implicit from the IPv6 source address. | |||
| When a storing node generates a DAO, it uses the stored state of DAOs | When a storing node generates a DAO, it uses the stored state of DAOs | |||
| it has received to produce a set of RPL Target options and their | it has received to produce a set of RPL Target options and their | |||
| associated Transmit Information options. | associated Transmit Information options. | |||
| Because this information is stored within each node's routing tables, | Because this information is stored within each node's routing tables, | |||
| in storing mode DAOs are communicated directly to DAO parents, who | in Storing mode, DAOs are communicated directly to DAO parents, who | |||
| store this information. | store this information. | |||
| 9.9. Path Control | 9.9. Path Control | |||
| A DAO message from a node contains one or more Target Options. Each | A DAO message from a node contains one or more Target options. Each | |||
| Target Option specifies either a prefix advertised by the node, a | Target option specifies either a prefix advertised by the node, a | |||
| prefix of addresses reachable outside the LLN, the address of | prefix of addresses reachable outside the LLN, the address of a | |||
| destination in the node's sub-DODAG, or a multicast group that a node | destination in the node's sub-DODAG, or a multicast group to which a | |||
| in the sub-DODAG is listening to. The Path Control field of the | node in the sub-DODAG is listening. The Path Control field of the | |||
| Transit Information option allows nodes to request or allow for | Transit Information option allows nodes to request or allow for | |||
| multiple downward routes. A node constructs the Path Control field | multiple Downward routes. A node constructs the Path Control field | |||
| of a Transit Information option as follows: | of a Transit Information option as follows: | |||
| 1. The bit width of the path control field MUST be equal to the | 1. The bit width of the Path Control field MUST be equal to the | |||
| value (PCS + 1), where PCS is specified in the control field of | value (PCS + 1), where PCS is specified in the control field of | |||
| the DODAG Configuration Option. Bits greater than or equal to | the DODAG Configuration option. Bits greater than or equal to | |||
| the value (PCS + 1) MUST be cleared on transmission and MUST be | the value (PCS + 1) MUST be cleared on transmission and MUST be | |||
| ignored on reception. Bits below that value are considered | ignored on reception. Bits below that value are considered | |||
| "active" bits. | "active" bits. | |||
| 2. The node MUST logically construct groupings of its DAO parents | 2. The node MUST logically construct groupings of its DAO parents | |||
| while populating the Path Control field, where each group | while populating the Path Control field, where each group | |||
| consists of DAO parents of equal preference. Those groups MUST | consists of DAO parents of equal preference. Those groups MUST | |||
| then be ordered according to preference, which allows for a | then be ordered according to preference, which allows for a | |||
| logical mapping of DAO parents onto Path Control subfields (See | logical mapping of DAO parents onto Path Control subfields (see | |||
| Figure 27). Groups MAY be repeated in order to extend over the | Figure 27). Groups MAY be repeated in order to extend over the | |||
| entire bit width of the patch control field, but the order, | entire bit width of the patch control field, but the order, | |||
| including repeated groups, MUST be retained so that preference is | including repeated groups, MUST be retained so that preference is | |||
| properly communicated. | properly communicated. | |||
| 3. For a RPL Target option describing a node's own address or a | 3. For a RPL Target option describing a node's own address or a | |||
| prefix outside the LLN, at least one active bit of the Path | prefix outside the LLN, at least one active bit of the Path | |||
| Control field MUST be set. More active bits of the Path Control | Control field MUST be set. More active bits of the Path Control | |||
| field MAY be set. | field MAY be set. | |||
| 4. If a node receives multiple DAOs with the same RPL Target option, | 4. If a node receives multiple DAOs with the same RPL Target option, | |||
| it MUST bitwise-OR the Path Control fields it receives. This | it MUST bitwise-OR the Path Control fields it receives. This | |||
| aggregated bitwise-OR represents the number of downward routes | aggregated bitwise-OR represents the number of Downward routes | |||
| the prefix requests. | the prefix requests. | |||
| 5. When a node sends a DAO message to one of its DAO parents, it | 5. When a node sends a DAO message to one of its DAO parents, it | |||
| MUST select one or more of the bits that are set active in the | MUST select one or more of the bits that are set active in the | |||
| subfield that is mapped to the group containing that DAO parent | subfield that is mapped to the group containing that DAO parent | |||
| from the aggregated Path Control field. A given bit can only be | from the aggregated Path Control field. A given bit can only be | |||
| presented as active to one parent. The DAO message it transmits | presented as active to one parent. The DAO message it transmits | |||
| to its parent MUST have these active bits set and all other | to its parent MUST have these active bits set and all other | |||
| active bits cleared. | active bits cleared. | |||
| 6. For the RPL Target option and DAOSequence number, the DAOs a node | 6. For the RPL Target option and DAOSequence number, the DAOs a node | |||
| sends to different DAO parents MUST have disjoint sets of active | sends to different DAO parents MUST have disjoint sets of active | |||
| Path Control bits. A node MUST NOT set the same active bit on | Path Control bits. A node MUST NOT set the same active bit on | |||
| DAOs to two different DAO parents. | DAOs to two different DAO parents. | |||
| 7. Path control bits SHOULD be allocated according to the preference | 7. Path Control bits SHOULD be allocated according to the preference | |||
| mapping of DAO parents onto Path Control subfields, such that the | mapping of DAO parents onto Path Control subfields, such that the | |||
| active Path Control bits, or groupings of bits, that belong to a | active Path Control bits, or groupings of bits, that belong to a | |||
| particular Path Control subfield are allocated to DAO parents | particular Path Control subfield are allocated to DAO parents | |||
| within the group that was mapped to that subfield. | within the group that was mapped to that subfield. | |||
| 8. In a non-storing mode of operation, a node MAY pass DAOs through | 8. In a Non-Storing mode of operation, a node MAY pass DAOs through | |||
| without performing any further processing on the Path Control | without performing any further processing on the Path Control | |||
| field. | field. | |||
| 9. A node MUST NOT unicast a DAO message that has no active bits in | 9. A node MUST NOT unicast a DAO message that has no active bits in | |||
| the Path Control field set. It is possible that, for a given | the Path Control field set. It is possible that, for a given | |||
| Target option, that a node does not have enough aggregate Path | Target option, a node does not have enough aggregate Path Control | |||
| Control bits to send a DAO message containing that Target to each | bits to send a DAO message containing that Target to each of its | |||
| of its DAO Parents, in which case those least preferred DAO | DAO parents, in which case those least preferred DAO Parents may | |||
| Parents may not get a DAO message for that Target. | not get a DAO message for that Target. | |||
| The Path Control field allows a node to bound how many downward | The Path Control field allows a node to bound how many Downward | |||
| routes will be generated to it. It sets a number of bits in the Path | routes will be generated to it. It sets a number of bits in the Path | |||
| Control field equal to the maximum number of downward routes it | Control field equal to the maximum number of Downward routes it | |||
| prefers. Each bit is sent to at most one DAO parent; clusters of | prefers. At most, each bit is sent to one DAO parent; clusters of | |||
| bits can be sent to a single DAO parent for it to divide among its | bits can be sent to a single DAO parent for it to divide among its | |||
| own DAO parents. | own DAO parents. | |||
| A node that provisions a DAO route for a Target that has an | A node that provisions a DAO route for a Target that has an | |||
| associated Path Control field SHOULD use the content of that Path | associated Path Control field SHOULD use the content of that Path | |||
| Control field in order to determine an order of preference among | Control field in order to determine an order of preference among | |||
| multiple alternative DAO routes for that Target. The Path Control | multiple alternative DAO routes for that Target. The Path Control | |||
| field assignment is derived from preference (of the DAO parents), as | field assignment is derived from preference (of the DAO parents), as | |||
| determined on the basis of this node's best knowledge of the "end-to- | determined on the basis of this node's best knowledge of the "end-to- | |||
| end" aggregated metrics in the "downward" direction as per the | end" aggregated metrics in the Downward direction as per the | |||
| objective function. In non storing mode the root can determine the | Objective Function. In Non-Storing mode the root can determine the | |||
| downward route by aggregating the information from each received DAO, | Downward route by aggregating the information from each received DAO, | |||
| which includes the Path Control indications of preferred DAO parents. | which includes the Path Control indications of preferred DAO parents. | |||
| 9.9.1. Path Control Example | 9.9.1. Path Control Example | |||
| Suppose that there is an LLN operating in storing mode that contains | Suppose that there is an LLN operating in Storing mode that contains | |||
| a Node N with four parents, P1, P2, P3, and P4. Let N have three | a Node N with four parents, P1, P2, P3, and P4. Let N have three | |||
| children, C1, C2, and C3 in its sub-DODAG. Let PCS be 7, such that | children, C1, C2, and C3 in its sub-DODAG. Let PCS be 7, such that | |||
| there will be 8 active bits in the Path Control field: 11111111b. | there will be 8 active bits in the Path Control field: 11111111b. | |||
| Consider the following example: | Consider the following example: | |||
| The Path Control field is split into 4 subfields, PC1 (11000000b), | The Path Control field is split into four subfields, PC1 (11000000b), | |||
| PC2 (00110000b), PC3 (00001100b), and PC4 (00000011b), such that | PC2 (00110000b), PC3 (00001100b), and PC4 (00000011b), such that | |||
| those 4 subfields represent 4 different levels of preference as per | those four subfields represent four different levels of preference | |||
| Figure 27. The implementation at Node N, in this example, groups | per Figure 27. The implementation at Node N, in this example, groups | |||
| {P1, P2} to be of equal preference to each other, and the most | {P1, P2} to be of equal preference to each other and the most | |||
| preferred group overall. {P3} is less preferred to {P1, P2}, and more | preferred group overall. {P3} is less preferred to {P1, P2}, and more | |||
| preferred to {P4}. Let Node N then perform its path control mapping | preferred to {P4}. Let Node N then perform its Path Control mapping | |||
| such that: | such that: | |||
| {P1, P2} -> PC1 (11000000b) in the Path Control field | {P1, P2} -> PC1 (11000000b) in the Path Control field | |||
| {P3} -> PC2 (00110000b) in the Path Control field | {P3} -> PC2 (00110000b) in the Path Control field | |||
| {P4} -> PC3 (00001100b) in the Path Control field | {P4} -> PC3 (00001100b) in the Path Control field | |||
| {P4} -> PC4 (00000011b) in the Path Control field | {P4} -> PC4 (00000011b) in the Path Control field | |||
| Note that the implementation repeated {P4} in order to get complete | Note that the implementation repeated {P4} in order to get complete | |||
| coverage of the Path Control field. | coverage of the Path Control field. | |||
| skipping to change at page 89, line 34 ¶ | skipping to change at page 88, line 46 ¶ | |||
| the Path Control field for C1 and Target T. | the Path Control field for C1 and Target T. | |||
| 2. Let C2 send a DAO containing a Target T with a Path Control | 2. Let C2 send a DAO containing a Target T with a Path Control | |||
| 00010000b. Node N stores an entry associating 00010000b with | 00010000b. Node N stores an entry associating 00010000b with | |||
| the Path Control field for C1 and Target T. | the Path Control field for C1 and Target T. | |||
| 3. Let C3 send a DAO containing a Target T with a Path Control | 3. Let C3 send a DAO containing a Target T with a Path Control | |||
| 00001100b. Node N stores an entry associating 00001100b with | 00001100b. Node N stores an entry associating 00001100b with | |||
| the Path Control field for C1 and Target T. | the Path Control field for C1 and Target T. | |||
| 4. At some later time, Node N generates a DAO for Target T. Node N | 4. At some later time, Node N generates a DAO for Target T. Node N | |||
| will construct an aggregate Path Control field by ORing together | will construct an aggregate Path Control field by ORing together | |||
| the contribution from each of its children that have given a DAO | the contribution from each of its children that have given a DAO | |||
| for Target T. The aggregate Path Control field thus has the | for Target T. Thus, the aggregate Path Control field has the | |||
| active bits set as: 10011100b. | active bits set as: 10011100b. | |||
| 5. Node N then distributes the aggregate Path Control bits among | 5. Node N then distributes the aggregate Path Control bits among | |||
| its parents P1, P2, P3, and P4 in order to prepare the DAO | its parents P1, P2, P3, and P4 in order to prepare the DAO | |||
| messages. | messages. | |||
| 6. P1 and P2 are eligible to receive active bits from the most | 6. P1 and P2 are eligible to receive active bits from the most | |||
| preferred subfield (11000000b). Those bits are 10000000b in the | preferred subfield (11000000b). Those bits are 10000000b in the | |||
| aggregate Path Control field. Node N must the bit to one of the | aggregate Path Control field. Node N must set the bit to one of | |||
| two parents only. In this case, Node P1 is allocated the bit, | the two parents only. In this case, Node P1 is allocated the | |||
| and gets the Path Control field 10000000b for its DAO. There | bit and gets the Path Control field 10000000b for its DAO. | |||
| are no bits left to allocate to Node P2, thus Node P2 would have | There are no bits left to allocate to Node P2; thus, Node P2 | |||
| a Path Control field of 00000000b and a DAO cannot be generated | would have a Path Control field of 00000000b and a DAO cannot be | |||
| to Node P2 since there are no active bits. | generated to Node P2 since there are no active bits. | |||
| 7. The second-most preferred subfield (00110000b) has the active | 7. The second-most preferred subfield (00110000b) has the active | |||
| bits 00010000b. Node N has mapped P3 to this subfield. Node N | bits 00010000b. Node N has mapped P3 to this subfield. Node N | |||
| may allocates the active bit to P3, constructing a DAO for P3 | may allocates the active bit to P3, constructing a DAO for P3 | |||
| containing Target T with a Path Control of 00010000b. | containing Target T with a Path Control of 00010000b. | |||
| 8. The third-most preferred subfield (00001100b) has the active | 8. The third-most preferred subfield (00001100b) has the active | |||
| bits 00001100b. Node N has mapped P4 to this subfield. Node N | bits 00001100b. Node N has mapped P4 to this subfield. Node N | |||
| may allocate both bits to P4, constructing a DAO for P4 | may allocate both bits to P4, constructing a DAO for P4 | |||
| containing Target T with a Path Control of 00001100b. | containing Target T with a Path Control of 00001100b. | |||
| 9. The least preferred subfield (00000011b) has no active bits. | 9. The least preferred subfield (00000011b) has no active bits. | |||
| Had there been active bits, those bits would have been added to | Had there been active bits, those bits would have been added to | |||
| the Path Control field of the DAO constructed for P4. | the Path Control field of the DAO constructed for P4. | |||
| 10. The process of populating the DAO messages destined for P1, P2, | 10. The process of populating the DAO messages destined for P1, P2, | |||
| P3, P4 with other targets (other than T) proceeds as according | P3, P4 with other targets (other than T) proceeds according to | |||
| the aggregate path control fields collected for those targets. | the aggregate Path Control fields collected for those targets. | |||
| 9.10. Multicast Destination Advertisement Messages | 9.10. 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 that 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- | |||
| RPL-nodes multicast address. | RPL-nodes multicast address. | |||
| 2. A multicast DAO message MUST be used only to advertise | 2. A multicast DAO message MUST be used only to advertise | |||
| information about the node itself, i.e. prefixes directly | information about the node itself, i.e., prefixes directly | |||
| connected to or owned by the node, such as a multicast group that | connected to or owned by the node, such as a multicast group that | |||
| the node is subscribed to or a global address owned by the node. | the node is subscribed to or a global address owned by the node. | |||
| 3. A multicast DAO message MUST NOT be used to relay connectivity | 3. A multicast DAO message MUST NOT be used to relay connectivity | |||
| information learned (e.g. through unicast DAO) from another node. | information learned (e.g., through unicast DAO) from another | |||
| node. | ||||
| 4. A node MUST NOT perform any other DAO related processing on a | 4. A node MUST NOT perform any other DAO-related processing on a | |||
| received multicast DAO message, in particular a node MUST NOT | received multicast DAO message; in particular, a node MUST NOT | |||
| perform the actions of a DAO parent upon receipt of a multicast | perform the actions of a DAO parent upon receipt of a multicast | |||
| DAO. | 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 DODAG to relay the packets. | without needing the DODAG to relay the packets. | |||
| 10. Security Mechanisms | 10. Security Mechanisms | |||
| This section describes the generation and processing of secure RPL | This section describes the generation and processing of secure RPL | |||
| messages. The high order bit of the RPL message code identifies | messages. The high-order bit of the RPL message code identifies | |||
| whether a RPL message is secure or not. In addition to secure | whether or not a RPL message is secure. In addition to secure | |||
| versions of basic control messages (DIS, DIO, DAO, DAO-ACK), RPL has | versions of basic control messages (DIS, DIO, DAO, DAO-ACK), RPL has | |||
| several messages which are relevant only in networks with security | several messages that are relevant only in networks that are security | |||
| enabled. | enabled. | |||
| Implementation complexity and size is a core concern for LLNs such | Implementation complexity and size is a core concern for LLNs such | |||
| that it may be economically or physically impossible to include | that it may be economically or physically impossible to include | |||
| sophisticated security provisions in a RPL implementation. | sophisticated security provisions in a RPL implementation. | |||
| Furthermore, many deployments can utilize link-layer or other | Furthermore, many deployments can utilize link-layer or other | |||
| security mechanisms to meet their security requirements without | security mechanisms to meet their security requirements without | |||
| requiring the use of security in RPL. | requiring the use of security in RPL. | |||
| Therefore, the security features described in this document are | Therefore, the security features described in this document are | |||
| OPTIONAL to implement. A given implementation MAY support a subset | OPTIONAL to implement. A given implementation MAY support a subset | |||
| (including the empty set) of the described security features, for | (including the empty set) of the described security features, for | |||
| example it could support integrity and confidentiality, but not | example, it could support integrity and confidentiality, but not | |||
| signatures. An implementation SHOULD clearly specify which security | signatures. An implementation SHOULD clearly specify which security | |||
| mechanisms are supported, and it is RECOMMENDED that implementers | mechanisms are supported, and it is RECOMMENDED that implementers | |||
| carefully consider security requirements and the availability of | carefully consider security requirements and the availability of | |||
| security mechanisms in their network. | security mechanisms in their network. | |||
| 10.1. Security Overview | 10.1. Security Overview | |||
| RPL supports three security modes: | RPL supports three security modes: | |||
| o Unsecured. In this security mode, RPL uses basic DIS, DIO, DAO, | o Unsecured. In this security mode, RPL uses basic DIS, DIO, DAO, | |||
| and DAO-ACK messages, which do not have security sections. As a | and DAO-ACK messages, which do not have Security sections. As a | |||
| network could be using other security mechanisms, such as link- | network could be using other security mechanisms, such as link- | |||
| layer security, unsecured mode does not imply all messages are | layer security, unsecured mode does not imply all messages are | |||
| sent without any protection. | sent without any protection. | |||
| o Pre-installed. In this security mode, RPL uses secure messages. | o Preinstalled. In this security mode, RPL uses secure messages. | |||
| To join a RPL Instance, a node must have a pre-installed key. | To join a RPL Instance, a node must have a preinstalled key. | |||
| Nodes use this to provide message confidentiality, integrity, and | Nodes use this to provide message confidentiality, integrity, and | |||
| authenticity. A node may, using this preinstalled key, join the | authenticity. A node may, using this preinstalled key, join the | |||
| RPL network as either a host or a router. | RPL network as either a host or a router. | |||
| o Authenticated. In this security mode, RPL uses secure messages. | o Authenticated. In this security mode, RPL uses secure messages. | |||
| To join a RPL Instance, a node must have a pre-installed key. | To join a RPL Instance, a node must have a preinstalled key. | |||
| Nodes use this key to provide message confidentiality, integrity, | Nodes use this key to provide message confidentiality, integrity, | |||
| and authenticity. Using this preinstalled key, a node may join | and authenticity. Using this preinstalled key, a node may join | |||
| the network as a host only. To join the network as a router, a | the network as a host only. To join the network as a router, a | |||
| node must obtain a second key from a key authority. This key | node must obtain a second key from a key authority. This key | |||
| authority can authenticate that the requester is allowed to be a | authority can authenticate that the requester is allowed to be a | |||
| router before providing it with the second key. Authenticated | router before providing it with the second key. Authenticated | |||
| mode cannot be supported by symmetric algorithms. As of this | mode cannot be supported by symmetric algorithms. As of the | |||
| specification, RPL supports only symmetric algorithms: | writing of this specification, RPL supports only symmetric | |||
| authenticated mode is included for the benefit of potential future | algorithms: authenticated mode is included for the benefit of | |||
| cryptographic primitives. See Section 10.3. | potential future cryptographic primitives. See Section 10.3. | |||
| Whether or not the RPL Instance uses unsecured mode is signaled by | Whether or not the RPL Instance uses unsecured mode is signaled by | |||
| whether it uses secure RPL messages. Whether a secured network uses | whether it uses secure RPL messages. Whether a secured network uses | |||
| the pre-installed or authenticated mode is signaled by the 'A' bit of | the preinstalled or authenticated mode is signaled by the 'A' bit of | |||
| the DAG Configuration option. | the DAG Configuration option. | |||
| This specification specifies CCM -- Counter with CBC-MAC (Cipher | This specification specifies CCM -- Counter with CBC-MAC (Cipher | |||
| Block Chaining Message Authentication Code) -- as the cryptographic | Block Chaining - Message Authentication Code) -- as the cryptographic | |||
| basis for RPL security[RFC3610]. In this specification, CCM uses | basis for RPL security [RFC3610]. In this specification, CCM uses | |||
| AES-128 as its underlying cryptographic algorithm. There are bits | AES-128 as its underlying cryptographic algorithm. There are bits | |||
| reserved in the security section to specify other algorithms in the | reserved in the Security section to specify other algorithms in the | |||
| future. | future. | |||
| All secured RPL messages have either a message authentication code | All secured RPL messages have either a MAC or a signature. | |||
| (MAC) or a signature. Secured RPL messages optionally also have | Optionally, secured RPL messages also have encryption protection for | |||
| encryption protection for confidentiality. Secured RPL message | confidentiality. Secured RPL message formats support both integrated | |||
| formats support both integrated encryption/authentication schemes | encryption/authentication schemes (e.g., CCM) as well as schemes that | |||
| (e.g., CCM) as well as schemes that separately encrypt and | separately encrypt and authenticate packets. | |||
| authenticate packets. | ||||
| 10.2. Joining a Secure Network | 10.2. Joining a Secure Network | |||
| RPL security assumes that a node wishing to join a secured network | RPL security assumes that a node wishing to join a secured network | |||
| has been preconfigured with a shared key for communicating with | has been pre-configured with a shared key for communicating with | |||
| neighbors and the RPL root. To join a secure RPL network, a node | neighbors and the RPL root. To join a secure RPL network, a node | |||
| either listens for secure DIOs or triggers secure DIOs by sending a | either listens for secure DIOs or triggers secure DIOs by sending a | |||
| secure DIS. In addition to the DIO/DIS rules in Section 8, secure | secure DIS. In addition to the DIO/DIS rules in Section 8, secure | |||
| DIO and DIS messages have these rules: | DIO and DIS messages have these rules: | |||
| 1. If sent, this initial secure DIS MUST set the Key Identifier Mode | 1. If sent, this initial secure DIS MUST set the Key Identifier Mode | |||
| field to 0 (00) and MUST set the Security Level field to 1 (001). | field to 0 (00) and MUST set the Security Level field to 1 (001). | |||
| The key used MUST be the preconfigured group key (Key Index | The key used MUST be the pre-configured group key (Key Index | |||
| 0x00). | 0x00). | |||
| 2. When a node resets its Trickle timer in response to a secure DIS | 2. When a node resets its Trickle timer in response to a secure DIS | |||
| (Section 8.3), the next DIO it transmits MUST be a secure DIO | (Section 8.3), the next DIO it transmits MUST be a secure DIO | |||
| with the same security configuration as the secure DIS. If a | with the same security configuration as the secure DIS. If a | |||
| node receives multiple secure DIS messages before it transmits a | node receives multiple secure DIS messages before it transmits a | |||
| DIO, the secure DIO MUST have the same security configuration as | DIO, the secure DIO MUST have the same security configuration as | |||
| the last DIS it is responding to. | the last DIS to which it is responding. | |||
| 3. When a node sends a DIO in response to a unicast secure DIS | 3. When a node sends a DIO in response to a unicast secure DIS | |||
| (Section 8.3), the DIO MUST be a secure DIO. | (Section 8.3), the DIO MUST be a secure DIO. | |||
| The above rules allow a node to join a secured RPL Instance using the | The above rules allow a node to join a secured RPL Instance using the | |||
| preconfigured shared key. Once a node has joined the DODAG using the | pre-configured shared key. Once a node has joined the DODAG using | |||
| preconfigured shared key, the 'A' bit of the Configuration option | the pre-configured shared key, the 'A' bit of the Configuration | |||
| determines its capabilities. If the 'A' bit of the Configuration is | option determines its capabilities. If the 'A' bit of the | |||
| cleared, then nodes can use this preinstalled, shared key to exchange | Configuration option is cleared, then nodes can use this | |||
| messages normally: it can issue DIOs, DAOs, etc. | preinstalled, shared key to exchange messages normally: it can issue | |||
| DIOs, DAOs, etc. | ||||
| If the 'A' bit of the Configuration option is set and the RPL | If the 'A' bit of the Configuration option is set and the RPL | |||
| Instance is operating in authenticated mode: | Instance is operating in authenticated mode: | |||
| 1. A node MUST NOT advertise a Rank besides INFINITE_RANK in secure | 1. A node MUST NOT advertise a Rank besides INFINITE_RANK in secure | |||
| DIOs secured with Key Index 0x00. When processing DIO messages | DIOs secured with Key Index 0x00. When processing DIO messages | |||
| secured with Key Index 0x00, a processing node MUST consider the | secured with Key Index 0x00, a processing node MUST consider the | |||
| advertised Rank to be INFINITE_RANK. Any other value results in | advertised Rank to be INFINITE_RANK. Any other value results in | |||
| the message being discarded. | the message being discarded. | |||
| 2. Secure DAOs using Key Index 0x00 MUST NOT have a RPL Target | 2. Secure DAOs using a Key Index 0x00 MUST NOT have a RPL Target | |||
| option with a prefix besides the node's address. If a node | option with a prefix besides the node's address. If a node | |||
| receives a secured DAO message using the preinstalled, shared key | receives a secured DAO message using the preinstalled, shared key | |||
| where the RPL Target option does not match the IPv6 source | where the RPL Target option does not match the IPv6 source | |||
| address, it MUST discard the secured DAO message without further | address, it MUST discard the secured DAO message without further | |||
| processing. | processing. | |||
| The above rules mean that in RPL Instances where the 'A' bit is set, | The above rules mean that in RPL Instances where the 'A' bit is set, | |||
| using Key Index 0x00 a node can join the RPL Instance as a host but | using Key Index 0x00, a node can join the RPL Instance as a host but | |||
| not a router. A node must communicate with a key authority to obtain | not a router. A node must communicate with a key authority to obtain | |||
| a key that will enable it to act as a router. | a key that will enable it to act as a router. | |||
| 10.3. Installing Keys | 10.3. Installing Keys | |||
| Authenticated mode requires a would-be router to dynamically install | Authenticated mode requires a would-be router to dynamically install | |||
| new keys once they have joined a network as a host. Having joined as | new keys once they have joined a network as a host. Having joined as | |||
| a host, the node uses standard IP messaging to communicate with an | a host, the node uses standard IP messaging to communicate with an | |||
| authorization server, which can provide new keys. | authorization server, which can provide new keys. | |||
| The protocol to obtain such keys is out of scope for this | The protocol to obtain such keys is out of scope for this | |||
| specification and to be elaborated in future specifications. That | specification and to be elaborated in future specifications. That | |||
| elaboration is required for RPL to securely operate in authenticated | elaboration is required for RPL to securely operate in authenticated | |||
| mode. | mode. | |||
| 10.4. Consistency Checks | 10.4. Consistency Checks | |||
| RPL nodes send Consistency Check (CC) messages to protect against | RPL nodes send Consistency Check (CC) messages to protect against | |||
| replay attacks and synchronize counters. | replay attacks and synchronize counters. | |||
| 1. If a node receives a unicast CC message with the R bit cleared, | 1. If a node receives a unicast CC message with the 'R' bit cleared, | |||
| and it is a member of or is in the process of joining the | and it is a member of or is in the process of joining the | |||
| associated DODAG, it SHOULD respond with a unicast CC message to | associated DODAG, it SHOULD respond with a unicast CC message to | |||
| the sender. This response MUST have the R bit set, and MUST have | the sender. This response MUST have the 'R' bit set, and it MUST | |||
| the same CC Nonce, RPLInstanceID and DODAGID fields as the | have the same CC nonce, RPLInstanceID, and DODAGID fields as the | |||
| message it received. | message it received. | |||
| 2. If a node receives a multicast CC message, it MUST discard the | 2. If a node receives a multicast CC message, it MUST discard the | |||
| message with no further processing. | message with no further processing. | |||
| Consistency Check messages allow nodes to issue a challenge-response | Consistency Check messages allow nodes to issue a challenge-response | |||
| to validate a node's current Counter value. Because the CC Nonce is | to validate a node's current counter value. Because the CC nonce is | |||
| generated by the challenger, an adversary replaying messages is | generated by the challenger, an adversary replaying messages is | |||
| unlikely to be able to generate a correct response. The Counter in | unlikely to be able to generate a correct response. The counter in | |||
| the Consistency Check response allows the challenger to validate the | the Consistency Check response allows the challenger to validate the | |||
| Counter values it hears. | counter values it hears. | |||
| 10.5. Counters | 10.5. Counters | |||
| In the simplest case, the Counter value is an unsigned integer that a | In the simplest case, the counter value is an unsigned integer that a | |||
| node increments by one or more on each secured RPL transmission. The | node increments by one or more on each secured RPL transmission. The | |||
| Counter MAY represent a timestamp that has the following properties: | counter MAY represent a timestamp that has the following properties: | |||
| 1. The timestamp MUST be at least six octets long. | 1. The timestamp MUST be at least six octets long. | |||
| 2. The timestamp MUST be in 1024Hz (binary millisecond) granularity. | 2. The timestamp MUST be in 1024 Hz (binary millisecond) | |||
| granularity. | ||||
| 3. The timestamp start time MUST be January 1, 1970, 12:00:00AM UTC. | 3. The timestamp start time MUST be January 1, 1970, 12:00:00AM UTC. | |||
| 4. If the Counter represents such as timestamp, the Counter value | 4. If the counter represents a timestamp, the counter value MUST be | |||
| MUST be a value computed as follows. Let T be the timestamp, S | a value computed as follows. Let T be the timestamp, S be the | |||
| be the start time of the key in use, and E be the end time of the | start time of the key in use, and E be the end time of the key in | |||
| key in use. Both S and E are represented using the same 3 rules | use. Both S and E are represented using the same three rules as | |||
| as the timestamp described above. If E > T < S, then the Counter | the timestamp described above. If E > T < S, then the counter is | |||
| is invalid and a node MUST NOT generate a packet. Otherwise, the | invalid and a node MUST NOT generate a packet. Otherwise, the | |||
| Counter value is equal to T-S. | counter value is equal to T-S. | |||
| 5. If the Counter represents such a timestamp, a node MAY set the | 5. If the counter represents such a timestamp, a node MAY set the | |||
| 'T' flag of the security section of secured RPL packets. | 'T' flag of the Security section of secured RPL packets. | |||
| 6. If the Counter field does not present such a timestamp, then a | 6. If the Counter field does not present such a timestamp, then a | |||
| node MUST NOT set the 'T' flag. | node MUST NOT set the 'T' flag. | |||
| 7. If a node does not have a local timestamp that satisfies the | 7. If a node does not have a local timestamp that satisfies the | |||
| above requirements, it MUST ignore the 'T' flag. | above requirements, it MUST ignore the 'T' flag. | |||
| If a node supports such timestamps and it receives a message with the | If a node supports such timestamps and it receives a message with the | |||
| 'T' flag set, it MAY apply the temporal check on the received message | 'T' flag set, it MAY apply the temporal check on the received message | |||
| described in Section 10.7.1. If a node receives a message without | described in Section 10.7.1. If a node receives a message without | |||
| skipping to change at page 95, line 14 ¶ | skipping to change at page 94, line 23 ¶ | |||
| messages without the 'T' flag set. | messages without the 'T' flag set. | |||
| The 'T' flag is present because many LLNs today already maintain | The 'T' flag is present because many LLNs today already maintain | |||
| global time synchronization at sub-millisecond granularity for | global time synchronization at sub-millisecond granularity for | |||
| security, application, and other reasons. Allowing RPL to leverage | security, application, and other reasons. Allowing RPL to leverage | |||
| this existing functionality when present greatly simplifies solutions | this existing functionality when present greatly simplifies solutions | |||
| to some security problems, such as delay protection. | to some security problems, such as delay protection. | |||
| 10.6. Transmission of Outgoing Packets | 10.6. Transmission of Outgoing Packets | |||
| Given an outgoing RPL control packet and required security | Given an outgoing RPL control packet and the required security | |||
| protection, this section describes how RPL generates the secured | protection, this section describes how RPL generates the secured | |||
| packet to transmit. It also describes the order of cryptographic | packet to transmit. It also describes the order of cryptographic | |||
| operations to provide the required protection. | operations to provide the required protection. | |||
| The requirement for security protection and the level of security to | The requirement for security protection and the level of security to | |||
| be applied to an outgoing RPL packet shall be determined by the | be applied to an outgoing RPL packet shall be determined by the | |||
| node's security policy database. The configuration of this security | node's security policy database. The configuration of this security | |||
| policy database for outgoing packet processing is implementation | policy database for outgoing packet processing is implementation | |||
| specific. | specific. | |||
| Where secured RPL messages are to be transmitted, a RPL node MUST set | Where secured RPL messages are to be transmitted, a RPL node MUST set | |||
| the security section (T, Sec, KIM, and LVL) in the outgoing RPL | the Security section (T, Sec, KIM, and LVL) in the outgoing RPL | |||
| packet to describe the protection level and security settings that | packet to describe the protection level and security settings that | |||
| are applied (see Section 6.1). The Security subfield bit of the RPL | are applied (see Section 6.1). The Security subfield bit of the RPL | |||
| message Code field MUST be set to indicate the secure RPL message. | Message Code field MUST be set to indicate the secure RPL message. | |||
| The Counter value used in constructing the AES-128 CCM Nonce | The counter value used in constructing the AES-128 CCM nonce | |||
| (Figure 31) to secure the outgoing packet MUST be an increment of the | (Figure 31) to secure the outgoing packet MUST be an increment of the | |||
| last Counter transmitted to the particular destination address. | last counter transmitted to the particular destination address. | |||
| Where security policy specifies the application of delay protection, | Where security policy specifies the application of delay protection, | |||
| the Timestamp Counter used in constructing the CCM Nonce to secure | the Timestamp counter used in constructing the CCM nonce to secure | |||
| the outgoing packet MUST be incremented according to the rules in | the outgoing packet MUST be incremented according to the rules in | |||
| Section 10.5. Where a Timestamp Counter is applied (indicated with | Section 10.5. Where a Timestamp counter is applied (indicated with | |||
| the 'T' flag set) the locally maintained Time Counter MUST be | the 'T' flag set), the locally maintained Timestamp counter MUST be | |||
| included as part of the transmitted secured RPL message. | included as part of the transmitted secured RPL message. | |||
| The cryptographic algorithm used in securing the outgoing packet | The cryptographic algorithm used in securing the outgoing packet | |||
| shall be specified by the node's security policy database and MUST be | shall be specified by the node's security policy database and MUST be | |||
| indicated in the value of the Sec field set within the outgoing | indicated in the value of the Sec field set within the outgoing | |||
| message. | message. | |||
| The security policy for the outgoing packet shall determine the | The security policy for the outgoing packet shall determine the | |||
| applicable Key Identifier Mode (KIM) and Key Identifier specifying | applicable KIM and Key Identifier specifying the security key to be | |||
| the security key to be used for the cryptographic packet processing, | used for the cryptographic packet processing, including the optional | |||
| including the optional use of signature keys (see Section 6.1). The | use of signature keys (see Section 6.1). The security policy will | |||
| security policy will also specify the algorithm (Algorithm) and level | also specify the algorithm (Algorithm) and level of protection | |||
| of protection (Level) in the form of authentication or authentication | (Level) in the form of authentication or authentication and | |||
| and encryption, and potential use of signatures that shall apply to | encryption, and potential use of signatures that shall apply to the | |||
| the outgoing packet. | outgoing packet. | |||
| Where encryption is applied, a node MUST replace the original packet | Where encryption is applied, a node MUST replace the original packet | |||
| payload with that payload encrypted using the security protection, | payload with that payload encrypted using the security protection, | |||
| key, and CCM nonce specified in the security section of the packet. | key, and CCM nonce specified in the Security section of the packet. | |||
| All secured RPL messages include integrity protection. In | All secured RPL messages include integrity protection. In | |||
| conjunction with the security algorithm processing, a node derives | conjunction with the security algorithm processing, a node derives | |||
| either a Message Authentication Code (MAC) or signature that MUST be | either a MAC or signature that MUST be included as part of the | |||
| included as part of the outgoing secured RPL packet. | outgoing secured RPL packet. | |||
| 10.7. Reception of Incoming Packets | 10.7. Reception of Incoming Packets | |||
| This section describes the reception and processing of a secured RPL | This section describes the reception and processing of a secured RPL | |||
| packet. Given an incoming secured RPL packet, where the Security | packet. Given an incoming secured RPL packet, where the Security | |||
| subfield bit of the RPL message Code field is set, this section | subfield bit of the RPL Message Code field is set, this section | |||
| describes how RPL generates an unencrypted variant of the packet and | describes how RPL generates an unencrypted variant of the packet and | |||
| validates its integrity. | validates its integrity. | |||
| The receiver uses the RPL security control fields to determine the | The receiver uses the RPL security control fields to determine the | |||
| necessary packet security processing. If the described level of | necessary packet security processing. If the described level of | |||
| security for the message type and originator is unknown or does not | security for the message type and originator is unknown or does not | |||
| meet locally maintained security policies, a node MUST discard the | meet locally maintained security policies, a node MUST discard the | |||
| packet without further processing, MAY raise a management alert, and | packet without further processing, MAY raise a management alert, and | |||
| MUST NOT send any messages in response. These policies can include | MUST NOT send any messages in response. These policies can include | |||
| security levels, keys used, source identifiers, or the lack of | security levels, keys used, source identifiers, or the lack of | |||
| timestamp-based counters (as indicated by the 'T' flag). The | timestamp-based counters (as indicated by the 'T' flag). The | |||
| configuration of the security policy database for incoming packet | configuration of the security policy database for incoming packet | |||
| processing is out of scope for this specification (it may, for | processing is out of scope for this specification (it may, for | |||
| example, be defined through DIO Configuration or through out-of-band | example, be defined through DIO Configuration or through out-of-band | |||
| administrative router configuration). | administrative router configuration). | |||
| Where the message security level (LVL) indicates an encrypted RPL | Where the message Security Level (LVL) indicates an encrypted RPL | |||
| message, the node uses the key information identified through the KIM | message, the node uses the key information identified through the KIM | |||
| field as well as the CCM Nonce as input to the message payload | field as well as the CCM nonce as input to the message payload | |||
| decryption processing. The CCM Nonce shall be derived from the | decryption processing. The CCM nonce shall be derived from the | |||
| message Counter field and other received and locally maintained | message Counter field and other received and locally maintained | |||
| information (see Section 10.9.1). The plaintext message contents | information (see Section 10.9.1). The plaintext message contents | |||
| shall be obtained by invoking the inverse cryptographic mode of | shall be obtained by invoking the inverse cryptographic mode of | |||
| operation specified by the Sec field of the received packet. | operation specified by the Sec field of the received packet. | |||
| The receiver shall use the CCM Nonce and identified key information | The receiver shall use the CCM nonce and identified key information | |||
| to check the integrity of the incoming packet. If the integrity | to check the integrity of the incoming packet. If the integrity | |||
| check fails against the received message authentication code (MAC), a | check fails against the received MAC, a node MUST discard the packet. | |||
| node MUST discard the packet. | ||||
| If the received message has an initialized (zero value) Counter value | If the received message has an initialized (zero value) counter value | |||
| and the receiver has an incoming Counter currently maintained for the | and the receiver has an incoming counter currently maintained for the | |||
| originator of the message, the receiver MUST initiate a Counter | originator of the message, the receiver MUST initiate a counter | |||
| resynchronization by sending a Consistency Check response message | resynchronization by sending a Consistency Check response message | |||
| (see Section 6.6) to the message source. The Consistency Check | (see Section 6.6) to the message source. The Consistency Check | |||
| response message shall be protected with the current full outgoing | response message shall be protected with the current full outgoing | |||
| Counter maintained for the particular node address. That outgoing | counter maintained for the particular node address. That outgoing | |||
| Counter will be included within the security section of the message | counter will be included within the security section of the message | |||
| while the incoming Counter will be included within the Consistency | while the incoming counter will be included within the Consistency | |||
| Check message payload. | Check message payload. | |||
| Based on the specified security policy a node MAY apply replay | Based on the specified security policy, a node MAY apply replay | |||
| protection for a received RPL message. The replay check SHOULD be | protection for a received RPL message. The replay check SHOULD be | |||
| performed before the authentication of the received packet. The | performed before the authentication of the received packet. The | |||
| Counter as obtained from the incoming packet shall be compared | counter, as obtained from the incoming packet, shall be compared | |||
| against the watermark of the incoming Counter maintained for the | against the watermark of the incoming counter maintained for the | |||
| given origination node address. If the received message Counter | given origination node address. If the received message counter | |||
| value is non-zero and less than the maintained incoming Counter | value is non-zero and less than the maintained incoming counter | |||
| watermark a potential packet replay is indicated and the node MUST | watermark, a potential packet replay is indicated and the node MUST | |||
| discard the incoming packet. | discard the incoming packet. | |||
| If delay protection is specified as part of the incoming packet | If delay protection is specified as part of the incoming packet | |||
| security policy checks, the Timestamp Counter is used to validate the | security policy checks, the Timestamp counter is used to validate the | |||
| timeliness of the received RPL message. If the incoming message | timeliness of the received RPL message. If the incoming message | |||
| Timestamp Counter value indicates a message transmission time prior | Timestamp counter value indicates a message transmission time prior | |||
| to the locally maintained transmission time Counter for the | to the locally maintained transmission time counter for the | |||
| originator address, a replay violation is indicated and the node MUST | originator address, a replay violation is indicated and the node MUST | |||
| discard the incoming packet. If the received Timestamp Counter value | discard the incoming packet. If the received Timestamp counter value | |||
| indicates a message transmission time that is earlier than the | indicates a message transmission time that is earlier than the | |||
| Current time less the acceptable packet delay, a delay violation is | Current time less the acceptable packet delay, a delay violation is | |||
| indicated and the node MUST discard the incoming packet. | indicated and the node MUST discard the incoming packet. | |||
| Once a message has been decrypted, where applicable, and has | Once a message has been decrypted, where applicable, and has | |||
| successfully passed its integrity check, replay, and optionally delay | successfully passed its integrity check, replay check, and optionally | |||
| protection checks, the node can update its local security | delay-protection checks, the node can update its local security | |||
| information, such as the source's expected Counter value for replay | information, such as the source's expected counter value for replay | |||
| comparison. | comparison. | |||
| A node MUST NOT update its security information on receipt of a | A node MUST NOT update its security information on receipt of a | |||
| message that fails security policy checks or other applied integrity, | message that fails security policy checks or other applied integrity, | |||
| replay, or delay checks. | replay, or delay checks. | |||
| 10.7.1. Timestamp Key Checks | 10.7.1. Timestamp Key Checks | |||
| If the 'T' flag of a message is set and a node has a local timestamp | If the 'T' flag of a message is set and a node has a local timestamp | |||
| that follows the requirements in Section 10.5, then a node MAY check | that follows the requirements in Section 10.5, then a node MAY check | |||
| the temporal consistency of the message. The node computes the | the temporal consistency of the message. The node computes the | |||
| transmit time of the message by adding the Counter value to the start | transmit time of the message by adding the counter value to the start | |||
| time of the associated key. If this transmit time is past the end | time of the associated key. If this transmit time is past the end | |||
| time of the key, the node MAY discard the message without further | time of the key, the node MAY discard the message without further | |||
| processing. If the transmit time is too far in the past or future | processing. If the transmit time is too far in the past or future | |||
| compared to the local time on the receiver, it MAY discard the | compared to the local time on the receiver, it MAY discard the | |||
| message without further processing. | message without further processing. | |||
| 10.8. Coverage of Integrity and Confidentiality | 10.8. Coverage of Integrity and Confidentiality | |||
| For a RPL ICMPv6 message, the entire packet is within the scope of | For a RPL ICMPv6 message, the entire packet is within the scope of | |||
| RPL security. | RPL security. | |||
| Message authentication codes (MAC) and signatures are calculated over | MACs and signatures are calculated over the entire unsecured IPv6 | |||
| the entire unsecured IPv6 packet. When computing MACs and | packet. When computing MACs and signatures, mutable IPv6 fields are | |||
| signatures, mutable IPv6 fields are considered to be filled with | considered to be filled with zeroes, following the rules in Section | |||
| zeroes, following the rules in Section 3.3.3.1 of [RFC4302] (IPSec | 3.3.3.1 of [RFC4302] (IPsec Authenticated Header). MAC and signature | |||
| Authenticated Header). MAC and signature calculations are performed | calculations are performed before any compression that lower layers | |||
| before any compression that lower layers may apply. | may apply. | |||
| When a RPL ICMPv6 message is encrypted, encryption starts at the | When a RPL ICMPv6 message is encrypted, encryption starts at the | |||
| first byte after the security section and continues to the last byte | first byte after the Security section and continues to the last byte | |||
| of the packet. The IPv6 header, ICMPv6 header, and RPL message up to | of the packet. The IPv6 header, ICMPv6 header, and RPL message up to | |||
| the end of the security section are not encrypted, as they are needed | the end of the Security section are not encrypted, as they are needed | |||
| to correctly decrypt the packet. | to correctly decrypt the packet. | |||
| For example, a node sending a message with LVL=1, KIM=0, and | For example, a node sending a message with LVL=1, KIM=0, and | |||
| Algorithm=0 uses the CCM algorithm [RFC3610] to create a packet with | Algorithm=0 uses the CCM algorithm [RFC3610] to create a packet with | |||
| attributes ENC-MAC-32: it encrypts the packet and appends a 32-bit | attributes ENC-MAC-32: it encrypts the packet and appends a 32-bit | |||
| MAC. The block cipher key is determined by the Key Index; the CCM | MAC. The block cipher key is determined by the Key Index. The CCM | |||
| Nonce is computed as described in Section 10.9.1; the message to | nonce is computed as described in Section 10.9.1; the message to | |||
| authenticate and encrypt is the RPL message starting at the first | authenticate and encrypt is the RPL message starting at the first | |||
| byte after the security section and ends with the last byte of the | byte after the Security section and ends with the last byte of the | |||
| packet; the additional authentication data starts with the beginning | packet. The additional authentication data starts with the beginning | |||
| of the IPv6 header and ends with the last byte of the RPL security | of the IPv6 header and ends with the last byte of the RPL Security | |||
| section. | section. | |||
| 10.9. Cryptographic Mode of Operation | 10.9. Cryptographic Mode of Operation | |||
| The cryptographic mode of operation described in this specification | The cryptographic mode of operation described in this specification | |||
| (Algorithm = 0) is based on CCM and the block-cipher AES- | (Algorithm = 0) is based on CCM and the block-cipher AES-128 | |||
| 128[RFC3610]. This mode of operation is widely supported by existing | [RFC3610]. This mode of operation is widely supported by existing | |||
| implementations. CCM mode requires a nonce (CCM nonce). | implementations. CCM mode requires a nonce (CCM nonce). | |||
| 10.9.1. CCM Nonce | 10.9.1. CCM Nonce | |||
| A RPL node constructs a CCM nonce as follows: | A RPL node constructs a CCM nonce 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 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| + Source Identifier + | + Source Identifier + | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Counter | | | Counter | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| |KIM|Resvd| LVL | | |KIM|Resvd| LVL | | |||
| +-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
| Figure 31: CCM Nonce | Figure 31: CCM Nonce | |||
| Source Identifier: 8 bytes. Source Identifier is set to the logical | Source Identifier: 8 bytes. Source Identifier is set to the logical | |||
| identifier of the originator of the protected packet. | identifier of the originator of the protected packet. | |||
| Counter: 4 bytes. Counter is set to the (uncompressed) value of the | Counter: 4 bytes. Counter is set to the (uncompressed) value of the | |||
| corresponding field in the Security option of the RPL control | corresponding field in the Security option of the RPL control | |||
| message. | message. | |||
| Key Identifier Mode (KIM): 2 bits. KIM is set to the value of the | Key Identifier Mode (KIM): 2 bits. KIM is set to the value of the | |||
| corresponding field in the Security option of the RPL control | corresponding field in the Security option of the RPL control | |||
| message. | message. | |||
| Security Level (LVL): 3 bits. Security Level is set to the value of | Security Level (LVL): 3 bits. Security Level is set to the value of | |||
| the corresponding field in the Security option of the RPL | the corresponding field in the Security option of the RPL | |||
| control message. | control message. | |||
| Unassigned bits of the CCM nonce are reserved. They MUST be set to | Unassigned bits of the CCM nonce are reserved. They MUST be set to | |||
| zero when constructing the CCM nonce. | zero when constructing the CCM nonce. | |||
| All fields of the CCM nonce are represented in most-significant-octet | All fields of the CCM nonce are represented in most significant octet | |||
| and most-significant-bit first order. | and most significant bit first order. | |||
| 10.9.2. Signatures | 10.9.2. Signatures | |||
| If the Key Identification Mode (KIM) mode indicates the use of | If the KIM indicates the use of signatures (a value of 3), then a | |||
| signatures (a value of 3), then a node appends a signature to the | node appends a signature to the data payload of the packet. The | |||
| data payload of the packet. The Security Level (LVL) field describes | Security Level (LVL) field describes the length of this signature. | |||
| the length of this signature. | ||||
| The signature scheme in RPL for Security Mode 3 is an instantiation | The signature scheme in RPL for Security Mode 3 is an instantiation | |||
| of the RSA algorithm (RSASSA-PSS) as defined in Section 8.1 of | of the RSA algorithm (RSASSA-PSS) as defined in Section 8.1 of | |||
| [RFC3447]. It uses as public key the pair (n,e), where n is a 2048- | [RFC3447]. As public key, it uses the pair (n,e), where n is a | |||
| bit or 3072-bit RSA modulus and where e=2^{16}+1. It uses CCM mode | 2048-bit or 3072-bit RSA modulus and where e=2^{16}+1. It uses CCM | |||
| [RFC3610] as the encryption scheme with M=0 (as a stream-cipher). | mode [RFC3610] as the encryption scheme with M=0 (as a stream- | |||
| cipher). Note that although [RFC3610] disallows the CCM mode with | ||||
| Note that although [RFC3610] disallows the CCM mode with M=0, RPL | M=0, RPL explicitly allows the CCM mode with M=0 when used in | |||
| explicitly allows the CCM mode with M=0 when used in conjunction with | conjunction with a signature, because the signature provides | |||
| a signature, because the signature provides sufficient data | sufficient data authentication. Here, the CCM mode with M=0 is | |||
| authentication. Here, the CCM mode with M=0 is specified as in | specified as in [RFC3610], but where the M' field in Section 2.2 MUST | |||
| [RFC3610], but where the M' field in Section 2.2 MUST be set to 0. | be set to 0. It uses the SHA-256 hash function specified in Section | |||
| It uses the SHA-256 hash function specified in Section 6.2 of | 6.2 of [FIPS180]. It uses the message encoding rules of Section 8.1 | |||
| [FIPS180]. It uses the message encoding rules of Section 8.1 of | of [RFC3447]. | |||
| [RFC3447]. | ||||
| Let 'a' be a concatenation of a six-byte representation of Counter | Let 'a' be a concatenation of a 6-byte representation of counter and | |||
| and the message header. The packet payload is the right- | the message header. The packet payload is the right-concatenation of | |||
| concatenation of packet data 'm' and the signature 's'. This | packet data 'm' and the signature 's'. This signature scheme is | |||
| signature scheme is invoked with the right-concatenation of the | invoked with the right-concatenation of the message parts a and m, | |||
| message parts a and m, whereas the signature verification is invoked | whereas the signature verification is invoked with the right- | |||
| with the right-concatenation of the message parts a and m, and with | concatenation of the message parts a and m and with signature s. | |||
| signature s. | ||||
| RSA signatures of this form provide sufficient protection for RPL | RSA signatures of this form provide sufficient protection for RPL | |||
| networks. If needed, alternative signature schemes which produce | networks. If needed, alternative signature schemes that produce more | |||
| more concise signatures is out of scope for this specification and | concise signatures is out of scope for this specification and may be | |||
| may be the subject of a future specification. | the subject of a future specification. | |||
| An implementation that supports RSA signing with either 2048-bit or | An implementation that supports RSA signing with either 2048-bit or | |||
| 3072-bit signatures SHOULD support verification of both 2048-bit and | 3072-bit signatures SHOULD support verification of both 2048-bit and | |||
| 3072-bit RSA signatures. This is in consideration of providing an | 3072-bit RSA signatures. This is in consideration of providing an | |||
| upgrade path for a RPL deployment. | upgrade path for a RPL deployment. | |||
| 11. Packet Forwarding and Loop Avoidance/Detection | 11. Packet Forwarding and Loop Avoidance/Detection | |||
| 11.1. Suggestions for Packet Forwarding | 11.1. Suggestions for Packet Forwarding | |||
| This document specifies a routing protocol. These non-normative | This document specifies a routing protocol. These non-normative | |||
| suggestions are provided to aid in the design of a forwarding | suggestions are provided to aid in the design of a forwarding | |||
| implementation by illustrating how such an implementation could work | implementation by illustrating how such an implementation could work | |||
| with RPL | with RPL. | |||
| 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. This specification only covers how a successor is selected from | 1. This specification only covers how a successor is selected from | |||
| the DODAG Version that matches the RPLInstanceID marked in the | the DODAG Version that matches the RPLInstanceID marked in the | |||
| IPv6 header of the packet being forwarded. Routing outside the | IPv6 header of the packet being forwarded. Routing outside the | |||
| instance can be done as long as additional rules are put in place | instance can be done as long as additional rules are put in place | |||
| such as strict ordering of instances and routing protocols to | such as strict ordering of instances and routing protocols to | |||
| protect against loops. Such rules may be defined in a separate | protect against loops. Such rules may be defined in a separate | |||
| document. | document. | |||
| 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 the packet header specifies a source route by including a RH4 | 3. If the packet header specifies a source route by including an RH4 | |||
| header as specified in [I-D.ietf-6man-rpl-routing-header], then | header as specified in [RFC6554], then use that route. If the | |||
| use that route. If the node fails to forward the packet with | node fails to forward the packet with that specified source | |||
| that specified source route, then that packet should be dropped. | route, then that packet should be dropped. The node MAY log an | |||
| The node MAY log an error. The node may send an ICMPv6 Error in | error. The node may send an ICMPv6 error in Source Routing | |||
| Source Routing Header message to the source of the packet (See | Header message to the source of the packet (see Section 20.18). | |||
| Section 20.18). | ||||
| 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 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. | |||
| 5. If there is an entry in the routing table matching the | 5. 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. If there are DAO Path Control | DODAG), then use that successor. If there are DAO Path Control | |||
| bits associated with multiple successors, then consult the Path | bits associated with multiple successors, then consult the Path | |||
| Control bits to order the successors by preference when choosing. | Control bits to order the successors by preference when choosing. | |||
| If, for a given DAO Path Control bit, multiple successors are | If, for a given DAO Path Control bit, multiple successors are | |||
| recorded as having asserted that bit, precedence should be given | recorded as having asserted that bit, precedence should be given | |||
| to the successor who most recently asserted that bit. | to the successor who most recently asserted that bit. | |||
| 6. If there is a DODAG Version offering a route to a prefix matching | 6. If there is a DODAG Version offering a route to a prefix matching | |||
| the destination, then select one of those DODAG parents as a | the destination, then select one of those DODAG parents as a | |||
| successor according to the OF and routing metrics. | successor according to the OF and routing metrics. | |||
| 7. Any other as-yet-unattempted DODAG parent may be chosen for the | 7. Any other as-yet-unattempted DODAG parent may be chosen for the | |||
| next attempt to forward a unicast packet when no better match | next attempt to forward a unicast packet when no better match | |||
| exists. | exists. | |||
| 8. Finally the packet is dropped. ICMP Destination Unreachable MAY | 8. Finally, the packet is dropped. ICMP Destination Unreachable MAY | |||
| be invoked (an inconsistency is detected). | be invoked (an inconsistency is detected). | |||
| Hop Limit MUST be decremented when forwarding as per [RFC2460]. | Hop Limit MUST be decremented when forwarding per [RFC2460]. | |||
| 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 upward to a downward | it is intended for the packet to change from an Upward to a Downward | |||
| direction, as determined by the routing table of the node making the | direction, as determined by the routing table of the node making the | |||
| change, such as switching from DIO routes to DAO routes as the | change, such as switching from DIO routes to DAO routes as the | |||
| destination is neared in order to continue traveling toward the | destination is neared in order to continue traveling toward the | |||
| destination. | destination. | |||
| 11.2. Loop Avoidance and Detection | 11.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, | |||
| e.g. control packet loss. RPL includes a reactive loop detection | e.g., control packet loss. RPL includes a reactive loop detection | |||
| technique that protects from meltdown and triggers repair of broken | technique that protects from meltdown and triggers repair of broken | |||
| paths. | paths. | |||
| RPL loop detection uses RPL Packet Information that is transported | RPL loop detection uses RPL Packet Information that is transported | |||
| within the data packets, relying on an external mechanism such as | within the data packets, relying on an external mechanism such as | |||
| [I-D.ietf-6man-rpl-option] that places in the RPL Packet Information | [RFC6553] that places in the RPL Packet Information in an IPv6 Hop- | |||
| in an IPv6 Hop-by-Hop Option header. | by-Hop option header. | |||
| The content of RPL Packet Information is defined as follows: | The content of RPL Packet Information is defined as follows: | |||
| Down 'O': 1-bit flag indicating whether the packet is expected to | Down 'O': 1-bit flag indicating whether the packet is expected to | |||
| progress Up or Down. A router sets the 'O' flag when the | progress Up or Down. A router sets the 'O' flag when the | |||
| packet is expected to progress Down (using DAO routes), and | packet is expected to progress Down (using DAO routes), and | |||
| clears it when forwarding toward the DODAG root (to a node with | clears it when forwarding toward the DODAG root (to a node with | |||
| a lower rank). A host or RPL leaf node MUST set the 'O' flag | a lower Rank). A host or RPL leaf node MUST set the 'O' flag | |||
| to 0. | to 0. | |||
| Rank-Error 'R': 1-bit flag indicating whether a rank error was | Rank-Error 'R': 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 or RPL leaf node MUST set the 'R' bit to 0. | bit. A host or RPL leaf node MUST set the 'R' bit to 0. | |||
| Forwarding-Error 'F': 1-bit flag indicating that this node can not | Forwarding-Error 'F': 1-bit flag indicating that this node cannot | |||
| forward the packet further towards the destination. The 'F' | forward the packet further towards the destination. The 'F' | |||
| bit might be set by a child node that does not have a route to | bit might be set by a child node that does not have a route to | |||
| destination for a packet with the Down 'O' bit set. A host or | destination for a packet with the Down 'O' bit set. A host or | |||
| RPL leaf node MUST set the 'F' bit to 0. | RPL leaf node MUST set the 'F' bit to 0. | |||
| 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. | |||
| SenderRank: 16-bit field set to zero by the source and to | SenderRank: 16-bit field set to zero by the source and to | |||
| DAGRank(rank) by a router that forwards inside the RPL network. | DAGRank(rank) by a router that forwards inside the RPL network. | |||
| 11.2.1. Source Node Operation | 11.2.1. Source Node Operation | |||
| 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 | |||
| packet, then it MUST set the RPLInstanceID field associated with the | packet, then it MUST set the RPLInstanceID field associated with the | |||
| packet accordingly, otherwise it MUST set it to the | packet accordingly; otherwise, it MUST set it to the | |||
| RPL_DEFAULT_INSTANCE. | RPL_DEFAULT_INSTANCE. | |||
| 11.2.2. Router Operation | 11.2.2. Router Operation | |||
| 11.2.2.1. Instance Forwarding | 11.2.2.1. Instance Forwarding | |||
| The RPLInstanceID is associated by the source with the packet. 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. The RPLInstanceID is | placed by any node, be it a host or router. The RPLInstanceID is | |||
| part of the RPL Packet Information. | part of the RPL Packet Information. | |||
| A RPL router that forwards a packet in the RPL network MUST check if | A RPL router that forwards a packet in the RPL network MUST check if | |||
| the packet includes the RPL Packet Information. If not, then the RPL | the packet includes the RPL Packet Information. If not, then the RPL | |||
| router MUST insert a RPL Packet Information. If the router is an | router MUST insert the RPL Packet Information. If the router is an | |||
| ingress router that injects the packet into the RPL network, the | ingress router that injects the packet into the RPL network, the | |||
| router MUST set the RPLInstanceID field in the RPL Packet | router MUST set the RPLInstanceID field in the RPL Packet | |||
| Information. The details of how that router determines the mapping | Information. The details of how that router determines the mapping | |||
| to a RPLInstanceID are out of scope for this specification and left | to a RPLInstanceID are out of scope for this specification and left | |||
| to future specification. | to future specification. | |||
| A router that forwards a packet to outside the RPL network MUST | A router that forwards a packet outside the RPL network MUST remove | |||
| remove the RPL Packet Information. | the RPL Packet Information. | |||
| 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 | |||
| value unchanged. | value unchanged. | |||
| If any node can not forward a packet along the DODAG associated to | If any node cannot forward a packet along the DODAG associated with | |||
| the RPLInstanceID, then the node SHOULD discard the packet and send | the RPLInstanceID, then the node SHOULD discard the packet and send | |||
| an ICMP error message. | an ICMP error message. | |||
| 11.2.2.2. DAG Inconsistency Loop Detection | 11.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 cleared (for Up) from a node of a lesser rank. | the 'O' bit cleared (for Up) from a node of a lower Rank. | |||
| When the DODAG root increments the DODAGVersionNumber, a temporary | When the DODAG root increments the DODAGVersionNumber, a temporary | |||
| rank discontinuity may form between the next DODAG Version and the | Rank discontinuity may form between the next DODAG Version and the | |||
| prior DODAG Version, in particular if nodes are adjusting their rank | prior DODAG Version, in particular, if nodes are adjusting their Rank | |||
| in the next DODAG Version and deferring their migration into the next | in the next DODAG Version and deferring their migration into the next | |||
| DODAG Version. A router that is still a member of the prior DODAG | DODAG Version. A router that is still a member of the prior DODAG | |||
| Version may choose to forward a packet to a (future) parent that is | Version may choose to forward a packet to a (future) parent that is | |||
| in the next DODAG Version. In some cases this could cause the parent | in the next DODAG Version. In some cases, this could cause the | |||
| to detect an inconsistency because the rank-ordering in the prior | parent to detect an inconsistency because the Rank-ordering in the | |||
| DODAG Version is not necessarily the same as in the next DODAG | prior DODAG Version is not necessarily the same as in the next DODAG | |||
| Version and the packet may be judged to not be making forward | Version, and the packet may be judged not to be making forward | |||
| progress. If the sending router is aware that the chosen successor | progress. If the sending router is aware that the chosen successor | |||
| has already joined the next DODAG Version, then the sending router | has already joined the next DODAG Version, then the sending router | |||
| MUST update the SenderRank to INFINITE_RANK as it forwards the | MUST update the SenderRank to INFINITE_RANK as it forwards the | |||
| packets across the discontinuity into the next DODAG Version in order | packets across the discontinuity into the next DODAG Version in order | |||
| to avoid a false detection of rank inconsistency. | to avoid a false detection of Rank inconsistency. | |||
| One inconsistency along the path is not considered a critical error | One inconsistency along the path is not considered a critical error | |||
| and the packet may continue. But a second detection along the path | and the packet may continue. However, a second detection along the | |||
| of a same packet should not occur and the packet MUST be dropped. | path of the same packet should not occur and the packet MUST be | |||
| dropped. | ||||
| This process is controlled by the Rank-Error bit associated with the | This process is controlled by the Rank-Error bit associated with the | |||
| packet. When an inconsistency is detected on a packet, if the Rank- | packet. When an inconsistency is detected on a packet, if the Rank- | |||
| Error bit was not set then the Rank-Error bit is set. If it was set | Error bit was not set, then the Rank-Error bit is set. If it was set | |||
| the packet MUST be discarded and the trickle timer MUST be reset. | the packet MUST be discarded and the Trickle timer MUST be reset. | |||
| 11.2.2.3. DAO Inconsistency Detection and Recovery | 11.2.2.3. DAO Inconsistency Detection and Recovery | |||
| DAO inconsistency loop recovery is a mechanism that applies to | DAO inconsistency loop recovery is a mechanism that applies to | |||
| storing mode of operation only. | Storing mode of operation only. | |||
| In non-storing mode, the packets are source routed to the destination | In Non-Storing mode, the packets are source routed to the | |||
| and DAO inconsistencies are not corrected locally. Instead, an ICMP | destination, and DAO inconsistencies are not corrected locally. | |||
| error with a new code "Error in Source Routing Header" is sent back | Instead, an ICMP error with a new code "Error in Source Routing | |||
| to the root. The "Error in Source Routing Header" message has the | Header" is sent back to the root. The "Error in Source Routing | |||
| same format as the "Destination Unreachable Message" as specified in | Header" message has the same format as the "Destination Unreachable | |||
| [RFC4443]. The portion of the invoking packet that is sent back in | Message", as specified in [RFC4443]. The portion of the invoking | |||
| the ICMP message should record at least up to the routing header, and | packet that is sent back in the ICMP message should record at least | |||
| the routing header should be consumed by this node so that the | up to the routing header, and the routing header should be consumed | |||
| destination in the IPv6 header is the next hop that this node could | by this node so that the destination in the IPv6 header is the next | |||
| not reach. | hop that this node could not reach. | |||
| A DAO inconsistency happens when a router has a downward route that | A DAO inconsistency happens when a router has a Downward route that | |||
| was previously learned from a DAO message via a child, but that | was previously learned from a DAO message via a child, but that | |||
| downward route is not longer valid in the child, e.g. because that | Downward route is not longer valid in the child, e.g., because that | |||
| related state in the child has been cleaned up. With DAO | related state in the child has been cleaned up. With DAO | |||
| inconsistency loop recovery, a packet can be used to recursively | inconsistency loop recovery, a packet can be used to recursively | |||
| explore and cleanup the obsolete DAO states along a sub-DODAG. | explore and clean up the obsolete DAO 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 back to the parent that passed it with | router SHOULD send the packet back to the parent that passed it with | |||
| the Forwarding-Error 'F' bit set and the 'O' bit left untouched. | the Forwarding-Error 'F' bit set and the 'O' bit left untouched. | |||
| Otherwise the router MUST silently discard the packet. | Otherwise, the router MUST silently discard the packet. | |||
| 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 be sent to an alternate neighbor, after | packet again. The packet may be sent to an alternate neighbor, after | |||
| the expiration of a user-configurable implementation specific timer. | the expiration of a user-configurable implementation-specific timer. | |||
| If that alternate neighbor still has an inconsistent DAO state via | If that alternate neighbor still has an inconsistent DAO state via | |||
| this node, the process will recurse, this node will set the | this node, the process will recurse, this node will set the | |||
| Forwarding-Error 'F' bit and the routing state in the alternate | Forwarding-Error 'F' bit, and the routing state in the alternate | |||
| neighbor will be cleaned up as well. | neighbor will be cleaned up as well. | |||
| 12. Multicast Operation | 12. Multicast Operation | |||
| This section describes further a multicast routing operation over an | This section describes a multicast routing operation over an IPv6 RPL | |||
| IPv6 RPL network, and specifically how unicast DAOs can be used to | network and, specifically, how unicast DAOs can be used to relay | |||
| relay group registrations up. The same DODAG construct can used to | group registrations. The same DODAG construct can be used to forward | |||
| forward unicast and multicast traffic. The registration uses DAO | unicast and multicast traffic. This section is limited to a | |||
| messages that are identical to unicast except for the type of address | description of how group registrations may be exchanged and how the | |||
| that is transported. The main difference is that the multicast | forwarding infrastructure operates. It does not provide a full | |||
| traffic going down is copied to all the children that have registered | description of multicast within an LLN and, in particular, does not | |||
| to the multicast group whereas unicast traffic is passed to one child | describe the generation of DODAGs specifically targeted at multicast | |||
| only. | or the details of operating RPL for multicast -- that will be the | |||
| subject of further specifications. | ||||
| Nodes that support the RPL storing mode of operation SHOULD also | The multicast group registration uses DAO messages that are identical | |||
| to unicast except for the type of address that is transported. The | ||||
| main difference is that the multicast traffic going down is copied to | ||||
| all the children that have registered with the multicast group, | ||||
| whereas unicast traffic is passed to one child only. | ||||
| Nodes that support the RPL Storing mode of operation SHOULD also | ||||
| support multicast DAO operations as described below. Nodes that only | support multicast DAO operations as described below. Nodes that only | |||
| support the non-storing mode of operation are not expected to support | support the Non-Storing mode of operation are not expected to support | |||
| this section. | this section. | |||
| The multicast operation is controlled by the MOP field in the DIO. | The multicast operation is controlled by the MOP field in the DIO. | |||
| o If the MOP field requires multicast support, then a node that | o If the MOP field requires multicast support, then a node that | |||
| joins the RPL network as a router must operate as described in | joins the RPL network as a router must operate as described in | |||
| this section for multicast signaling and forwarding within the RPL | this section for multicast signaling and forwarding within the RPL | |||
| network. A node that does not support the multicast operation | network. A node that does not support the multicast operation | |||
| required by the MOP field can only join as a leaf. | required by the MOP field can only join as a leaf. | |||
| o If the MOP field does not require multicast support, then | o If the MOP field does not require multicast support, then | |||
| multicast is handled by some other way that is out of scope for | multicast is handled by some other way that is out of scope for | |||
| this specification. (Examples may include a series of unicast | this specification. (Examples may include a series of unicast | |||
| copies or limited-scope flooding). | copies or limited-scope flooding). | |||
| A router might select to pass a listener registration DAO message to | A router might select to pass a listener registration DAO message to | |||
| its preferred parent only, in which case multicast packets coming | its preferred parent only; in which case, multicast packets coming | |||
| back might be lost for all of its sub-DODAG if the transmission fails | back might be lost for all of its sub-DODAGs if the transmission | |||
| over that link. Alternatively the router might select to copy | fails over that link. Alternatively, the router might select copying | |||
| additional parents as it would do for DAO messages advertising | additional parents as it would do for DAO messages advertising | |||
| unicast destinations, in which case there might be duplicates that | unicast destinations; in which case, there might be duplicates that | |||
| 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 DODAG root, enabling the root to | the way from the listeners to the DODAG root, enabling the root to | |||
| copy a multicast packet to all its children routers that had issued a | copy a multicast packet to all its children routers that had issued a | |||
| DAO message including a Target option for that multicast group. | DAO message including a Target option for that multicast group. | |||
| For a multicast packet sourced from inside the DODAG, the packet is | For a multicast packet sourced from inside the DODAG, the packet is | |||
| passed to the preferred parents, and if that fails then to the | passed to the preferred parents, and if that fails, then to the | |||
| alternates in the DODAG. The packet is also copied to all the | alternates in the DODAG. The packet is also copied to all the | |||
| registered children, except for the one that passed the packet. | registered children, except for the one that passed the packet. | |||
| Finally, if there is a listener in the external infrastructure then | Finally, if there is a listener in the external infrastructure, then | |||
| the DODAG root has to further propagate the packet into the external | the DODAG root has to further propagate the packet into the external | |||
| infrastructure. | 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 non-RPL domain | Point for the RPL network and as source towards the non-RPL domain | |||
| for all multicast flows started in the RPL domain. So regardless of | for all multicast flows started in the RPL domain. So, regardless of | |||
| whether the root is actually attached to a non-RPL domain, and | whether the root is actually attached to a non-RPL domain, and | |||
| regardless of whether the DODAG is grounded or floating, the root can | regardless of whether the DODAG is grounded or floating, the root can | |||
| serve inner multicast streams at all times. | serve inner multicast streams at all times. | |||
| 13. Maintenance of Routing Adjacency | 13. 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 | |||
| a routing adjacency involves the use of Keepalive mechanisms (Hellos) | of a routing adjacency involves the use of keepalive mechanisms | |||
| or other protocols such as the Bidirectional Forwarding Detection | (Hellos) or other protocols such as the Bidirectional Forwarding | |||
| [RFC5881] (BFD) and the MANET Neighborhood Discovery Protocol | Detection (BFD) [RFC5881] and the MANET Neighborhood Discovery | |||
| [I-D.ietf-manet-nhdp](NHDP) . Unfortunately, such a proactive | Protocol (NHDP) [RFC6130]. Unfortunately, such a proactive approach | |||
| approach is often not desirable in constrained environments where it | is often not desirable in constrained environments where it would | |||
| would lead to excessive control traffic in light of the data traffic | lead to excessive control traffic in light of the data traffic with a | |||
| with a negative impact on both link loads and nodes resources. | negative impact on both link loads and nodes resources. | |||
| By contrast with those routing protocols, RPL does not define any | By contrast with those routing protocols, RPL does not define any | |||
| 'keep-alive' mechanisms to detect routing adjacency failures: this is | keepalive mechanisms to detect routing adjacency failures: this is | |||
| because in many cases such a mechanism would be too expensive in | because in many cases, such a mechanism would be too expensive in | |||
| terms of bandwidth and even more importantly energy (a battery | terms of bandwidth and, even more importantly, energy (a battery- | |||
| operated device could not afford to send periodic Keep alive). Still | operated device could not afford to send periodic keepalives). Still | |||
| RPL requires an external mechanisms to detect that a neighbor is no | RPL requires an external mechanisms to detect that a neighbor is no | |||
| longer reachable. Such a mechanism should preferably be reactive to | longer reachable. Such a mechanism should preferably be reactive to | |||
| traffic in order to minimize the overhead to maintain the routing | traffic in order to minimize the overhead to maintain the routing | |||
| adjacency and focus on links that are actually being used. | adjacency and focus on links that are actually being used. | |||
| Example reactive mechanisms that can be used include: | Example reactive mechanisms that can be used include: | |||
| The Neighbor Unreachability Detection [RFC4861] mechanism. | The Neighbor Unreachability Detection [RFC4861] mechanism. | |||
| Layer 2 triggers [RFC5184] derived from events such as association | Layer 2 triggers [RFC5184] derived from events such as association | |||
| states and L2 acknowledgements. | states and L2 acknowledgements. | |||
| 14. Guidelines for Objective Functions | 14. Guidelines for Objective Functions | |||
| An Objective Function (OF), in conjunction with routing metrics and | An Objective Function (OF), in conjunction with routing metrics and | |||
| constraints, allows for the selection of a DODAG to join, and a | constraints, allows for the selection of a DODAG to join, and a | |||
| number of peers in that DODAG as parents. The OF is used to compute | 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 compute | an ordered list of parents. The OF is also responsible to compute | |||
| the rank of the device within the DODAG Version. | 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), and indicates the method that must be | Objective Code Point (OCP), and it indicates the method that must be | |||
| used to construct the DODAG. The Objective Code Points are specified | used to construct the DODAG. The Objective Code Points are specified | |||
| in [I-D.ietf-roll-of0], and related companion specifications. | in [RFC6552] and related companion specifications. | |||
| 14.1. Objective Function Behavior | 14.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 at a node: | behavior at a node: | |||
| 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, all | happen upon the reception of a DIO message, a timer elapse, all | |||
| DODAG parents are unavailable, or a trigger indicating that the | DODAG parents are unavailable, or a trigger indicating that the | |||
| state of a candidate neighbor has changed. | state of a candidate neighbor has changed. | |||
| o An OF scans all the interfaces on the node. Although there may | o An OF scans all the interfaces on the node. 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 for this specification. Finally an | dependent and are out of scope for this specification. Finally, | |||
| interface might or not match a required criterion for an Objective | an interface might or might not match a required criterion for an | |||
| Function, for instance a degree of security. As a result, some | Objective Function, for instance, a degree of security. As a | |||
| interfaces might be completely excluded from the computation, for | result, some interfaces might be completely excluded from the | |||
| example if those interfaces cannot satisfy some advertised | computation, for example, if those interfaces cannot satisfy some | |||
| constraints, while others might be more or less preferred. | advertised constraints, while others might be more or less | |||
| preferred. | ||||
| 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 many of them and a candidate neighbor might need to pass | |||
| pass some validation tests before it can be used. In particular, | some validation tests before it can be used. In particular, some | |||
| some link layers require experience on the activity with a router | link layers require experience on the activity with a router to | |||
| to enable the router as a next hop. | enable the router as a next hop. | |||
| o An OF computes rank of a node for comparison by adding to the rank | o An OF computes Rank of a node for comparison by adding to the Rank | |||
| of the candidate a value representing the relative locations of | of the candidate a value representing the relative locations of | |||
| the node and the candidate in the DODAG Version. | the node and the candidate in the DODAG Version. | |||
| * The increase in rank must be at least MinHopRankIncrease. | * The increase in Rank must be at least MinHopRankIncrease. | |||
| * 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 | |||
| the increase in rank can be made proportional to the increase | ETX, the increase in Rank can be made proportional to the | |||
| in the metric. | increase in the metric. | |||
| * Candidate neighbors that would cause the rank of the node to | * Candidate neighbors that would cause the Rank of the node to | |||
| increase are not considered for parent selection. | increase 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 OFs 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 equal for that relation then the next test | * If the routers are equal for that relation, then the next test | |||
| is attempted between the routers, | is attempted between the routers, | |||
| * Else the best of the two routers becomes the current best | * Else the best of the two routers becomes the current best | |||
| parent and the 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 the | o When the scan is complete, the preferred parent is elected and the | |||
| node's rank is computed as the preferred parent rank plus the step | node'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. In the next rounds: | parents. In the next rounds: | |||
| * Candidate neighbors that are not in the same DODAG are ignored. | * Candidate neighbors that are not in the same DODAG are ignored. | |||
| * Candidate neighbors that are of greater rank than the node are | * Candidate neighbors that are of greater Rank than the node are | |||
| ignored. | ignored. | |||
| * Candidate neighbors of an equal rank to the node are ignored | * Candidate neighbors of an equal Rank to the node are ignored | |||
| for parent selection. | for parent selection. | |||
| * Candidate neighbors of a lesser rank than the node are | * Candidate neighbors of a lesser Rank than the node are | |||
| preferred. | preferred. | |||
| 15. Suggestions for Interoperation with Neighbor Discovery | 15. Suggestions for Interoperation with Neighbor Discovery | |||
| This specification directly borrows the Prefix Information Option | This specification directly borrows the Prefix Information Option | |||
| (PIO) and the Routing Information Option (RIO) from IPv6 ND. It is | (PIO) and the Route Information Option (RIO) from IPv6 ND. It is | |||
| envisioned that, as future specifications build on this base, there | envisioned that, as future specifications build on this base, there | |||
| may be additional cause to leverage parts of IPv6 ND. This section | may be additional cause to leverage parts of IPv6 ND. This section | |||
| provides some suggestions for future specifications. | provides some suggestions for future specifications. | |||
| First and foremost RPL is a routing protocol. One should take great | First and foremost, RPL is a routing protocol. One should take great | |||
| care to preserve architecture when mapping functionalities between | care to preserve architecture when mapping functionalities between | |||
| RPL and ND. RPL is for routing only. That said, there may be | RPL and ND. RPL is for routing only. That said, there may be | |||
| persuading technical reasons to allow for sharing options between RPL | persuading technical reasons to allow for sharing options between RPL | |||
| and IPv6 ND in a particular implementation/deployment. | and IPv6 ND in a particular implementation/deployment. | |||
| In general the following guidelines apply: | In general, the following guidelines apply: | |||
| o RPL Type codes must be allocated from the RPL Control Message | o RPL Type codes must be allocated from the RPL Control Message | |||
| Options registry. | Options registry. | |||
| o RPL Length fields must be expressed in units of single octets, as | o RPL Length fields must be expressed in units of single octets, as | |||
| opposed to ND Length fields which are expressed in units of 8 | opposed to ND Length fields, which are expressed in units of 8 | |||
| octets. | octets. | |||
| o RPL Options are generally not required to be aligned to 8 octet | o RPL options are generally not required to be aligned to 8-octet | |||
| boundaries. | boundaries. | |||
| o When mapping/transposing an IPv6 ND option for redistribution as a | o When mapping/transposing an IPv6 ND option for redistribution as a | |||
| RPL option, any padding octets should be removed when possible. | RPL option, any padding octets should be removed when possible. | |||
| For example, the Prefix Length field in the PIO is sufficient to | For example, the Prefix Length field in the PIO is sufficient to | |||
| describe the length of the Prefix field. When mapping/transposing | describe the length of the Prefix field. When mapping/transposing | |||
| a RPL option for redistribution as an IPv6 ND option, any such | a RPL option for redistribution as an IPv6 ND option, any such | |||
| padding octets should be restored. This procedure must be | padding octets should be restored. This procedure must be | |||
| unambiguous. | unambiguous. | |||
| 16. Summary of Requirements for Interoperable Implementations | 16. Summary of Requirements for Interoperable Implementations | |||
| This section summarizes basic interoperability and references | This section summarizes basic interoperability and references | |||
| normative text for RPL implementations operating in one of three | normative text for RPL implementations operating in one of three | |||
| major modes. Implementations are expected to support either no | major modes. Implementations are expected to support either no | |||
| downward routes, non-storing mode only, or storing mode only. A | Downward routes, Non-Storing mode only, or Storing mode only. A | |||
| fourth mode, operation as a leaf, is also possible. | fourth mode, operation as a leaf, is also possible. | |||
| Implementations conforming to this specification may contain | Implementations conforming to this specification may contain | |||
| different subsets of capabilities as appropriate to the application | different subsets of capabilities as appropriate to the application | |||
| scenario. It is important for the implementer to support a level of | scenario. It is important for the implementer to support a level of | |||
| interoperability consistent with that required by the application | interoperability consistent with that required by the application | |||
| scenario. To this end, further guidance may be provided beyond this | scenario. To this end, further guidance may be provided beyond this | |||
| specification (e.g. as applicability statements), and it is | specification (e.g., as applicability statements), and it is | |||
| understood that in some cases such further guidance may override | understood that in some cases such further guidance may override | |||
| portions of this specification. | portions of this specification. | |||
| 16.1. Common Requirements | 16.1. Common Requirements | |||
| In a general case the greatest level of interoperability may be | In a general case, the greatest level of interoperability may be | |||
| achieved when all of the nodes in a RPL LLN are cooperating to use | achieved when all of the nodes in a RPL LLN are cooperating to use | |||
| the same MOP, OF, metrics, and constraints, and are thus able to act | the same MOP, OF, metrics, and constraints, and are thus able to act | |||
| as RPL Routers. When a node is not capable to be a RPL Router it may | as RPL routers. When a node is not capable of being a RPL router, it | |||
| be possible to interoperate in a more limited manner as a RPL leaf. | may be possible to interoperate in a more limited manner as a RPL | |||
| leaf. | ||||
| All RPL implementations need to support the use of RPL Packet | All RPL implementations need to support the use of RPL Packet | |||
| Information transported within data packets (Section 11.2). One such | Information transported within data packets (Section 11.2). One such | |||
| mechanism is described in [I-D.ietf-6man-rpl-option]. | mechanism is described in [RFC6553]. | |||
| RPL implementations will need to support the use of Neighbor | RPL implementations will need to support the use of Neighbor | |||
| Unreachability Detection (NUD), or an equivalent mechanism, to | Unreachability Detection (NUD), or an equivalent mechanism, to | |||
| maintain the reachability of neighboring RPL nodes (Section 8.2.1). | maintain the reachability of neighboring RPL nodes (Section 8.2.1). | |||
| Alternate mechanisms may be optimized to the constrained capabilities | Alternate mechanisms may be optimized to the constrained capabilities | |||
| of the implementation, such as hints from the link layer. | of the implementation, such as hints from the link layer. | |||
| This specification provides means to obtain a PIO and thus form an | This specification provides means to obtain a PIO and thus form an | |||
| IPv6 address. When that mechanism is used it may be necessary to | IPv6 address. When that mechanism is used, it may be necessary to | |||
| perform address resolution and duplicate address detection through an | perform address resolution and duplicate address detection through an | |||
| external process, such as IPv6 ND ([RFC4861]) or 6LoWPAN ND | external process, such as IPv6 ND [RFC4861] or 6LoWPAN ND | |||
| ([I-D.ietf-6lowpan-nd]). | [6LOWPAN-ND]. | |||
| 16.2. Operation as a RPL Leaf Node (only) | 16.2. Operation as a RPL Leaf Node (Only) | |||
| o An implementation of a Leaf Node (only) does not ever participate | o An implementation of a leaf node (only) does not ever participate | |||
| as a RPL Router. Interoperable implementations of leaf nodes | as a RPL router. Interoperable implementations of leaf nodes | |||
| behave as summarized in Section 8.5. | behave as summarized in Section 8.5. | |||
| o Support of a particular MOP encoding is not required, although if | o Support of a particular MOP encoding is not required, although if | |||
| the leaf node sends DAO messages to setup downward routes the leaf | the leaf node sends DAO messages to set up Downward routes, the | |||
| node should do so in a manner consistent with the mode of | leaf node should do so in a manner consistent with the mode of | |||
| operation described by the MOP. | operation indicated by the MOP. | |||
| o Support of a particular OF is not required. | o Support of a particular OF is not required. | |||
| o In brief summary, a leaf node does not generally issue DIO | ||||
| messages, it may issue DAO and DIS messages. A leaf node accepts | o In summary, a leaf node does not generally issue DIO messages, it | |||
| DIO messages though it generally ignores DAO and DIS messages. | may issue DAO and DIS messages. A leaf node accepts DIO messages | |||
| though it generally ignores DAO and DIS messages. | ||||
| 16.3. Operation as a RPL Router | 16.3. Operation as a RPL Router | |||
| If further guidance is not available then a RPL Router implementation | If further guidance is not available then a RPL router implementation | |||
| MUST at least support the metric-less OF0 [I-D.ietf-roll-of0]. | MUST at least support the metric-less OF0 [RFC6552]. | |||
| For consistent operation a RPL Router implementation needs to support | For consistent operation a RPL router implementation needs to support | |||
| the MOP in use by the DODAG. | the MOP in use by the DODAG. | |||
| All RPL Routers will need to implement Trickle | All RPL routers will need to implement Trickle [RFC6206]. | |||
| ([I-D.ietf-roll-trickle]) | ||||
| 16.3.1. Support for Upward Routes only | 16.3.1. Support for Upward Routes (Only) | |||
| An implementation of a RPL router that supports only Upward Routes | An implementation of a RPL router that supports only Upward routes | |||
| supports the following: | supports the following: | |||
| o Upward Routes (Section 8) | ||||
| o Upward routes (Section 8) | ||||
| o MOP encoding 0 (Section 20.3) | o MOP encoding 0 (Section 20.3) | |||
| o In brief summary DIO and DIS messages are issued, and DAO messages | ||||
| are not issued. DIO and DIS messages are accepted, and DAO | o In summary, DIO and DIS messages are issued, and DAO messages are | |||
| messages are ignored. | not issued. DIO and DIS messages are accepted, and DAO messages | |||
| are ignored. | ||||
| 16.3.2. Support for Upward Routes and Downward Routes in Non-Storing | 16.3.2. Support for Upward Routes and Downward Routes in Non-Storing | |||
| mode | Mode | |||
| An implementation of a RPL router that supports Upward routes and | ||||
| Downward routes in Non-Storing mode supports the following: | ||||
| o Upward routes (Section 8) | ||||
| o Downward routes (Non-Storing) (Section 9) | ||||
| An implementation of a RPL router that supports Upward Routes and | ||||
| Downward Routes in Non-Storing mode supports the following: | ||||
| o Upward Routes (Section 8) | ||||
| o Downward Routes (Non-Storing) (Section 9) | ||||
| o MOP encoding 1 (Section 20.3) | o MOP encoding 1 (Section 20.3) | |||
| o Source-routed downward traffic | ||||
| ([I-D.ietf-6man-rpl-routing-header]) | o Source-routed Downward traffic ([RFC6554]) | |||
| o In brief summary DIO and DIS messages are issued, and DAO messages | ||||
| are issued to the DODAG Root. DIO and DIS messages are accepted, | o In summary, DIO and DIS messages are issued, and DAO messages are | |||
| and DAO messages are ignored by nodes other than DODAG Roots. | issued to the DODAG root. DIO and DIS messages are accepted, and | |||
| DAO messages are ignored by nodes other than DODAG roots. | ||||
| Multicast is not supported through the means described in this | Multicast is not supported through the means described in this | |||
| specification, though it may be supported through some alternate | specification, though it may be supported through some alternate | |||
| means. | means. | |||
| 16.3.3. Support for Upward Routes and Downward Routes in Storing mode | 16.3.3. Support for Upward Routes and Downward Routes in Storing Mode | |||
| An implementation of a RPL router that supports Upward routes and | ||||
| Downward routes in Storing mode supports the following: | ||||
| o Upward routes (Section 8) | ||||
| o Downward routes (Storing) (Section 9) | ||||
| An implementation of a RPL router that supports Upward Routes and | ||||
| Downward Routes in Storing mode supports the following: | ||||
| o Upward Routes (Section 8) | ||||
| o Downward Routes (Storing) (Section 9) | ||||
| o MOP encoding 2 (Section 20.3) | o MOP encoding 2 (Section 20.3) | |||
| o In brief summary DIO, DIS, and DAO messages are issued. DIO, DIS, | ||||
| and DAO messages are accepted. Multicast is not supported through | ||||
| the means described in this specification, though it may be | ||||
| supported through some alternate means. | ||||
| 16.3.3.1. Optional support for basic multicast scheme | o In summary, DIO, DIS, and DAO messages are issued. DIO, DIS, and | |||
| DAO messages are accepted. Multicast is not supported through the | ||||
| means described in this specification, though it may be supported | ||||
| through some alternate means. | ||||
| 16.3.3.1. Optional Support for Basic Multicast Scheme | ||||
| A Storing mode implementation may be enhanced with basic multicast | A Storing mode implementation may be enhanced with basic multicast | |||
| support through the following additions: | support through the following additions: | |||
| o Basic Multicast Support (Section 12) | o Basic Multicast Support (Section 12) | |||
| o MOP encoding 3 (Section 20.3) | o MOP encoding 3 (Section 20.3) | |||
| 16.4. Items for Future Specification | 16.4. Items for Future Specification | |||
| A number of items are left to future specification, including but not | A number of items are left to future specification, including but not | |||
| limited to: | limited to the following: | |||
| o How to attach a non-RPL node such as an IPv6 host, e.g. to | ||||
| o How to attach a non-RPL node such as an IPv6 host, e.g., to | ||||
| consistently distribute at least PIO material to the attached | consistently distribute at least PIO material to the attached | |||
| node. | node. | |||
| o How to obtain authentication material in support if authenticated | o How to obtain authentication material in support if authenticated | |||
| mode is used (Section 10.3). | mode is used (Section 10.3). | |||
| o Details of operation over multiple simultaneous instances. | o Details of operation over multiple simultaneous instances. | |||
| o Advanced configuration mechanisms, such as provisioning of | ||||
| RPLInstanceIDs, parameterization of objective functions, and | o Advanced configuration mechanisms, such as the provisioning of | |||
| RPLInstanceIDs, parameterization of Objective Functions, and | ||||
| parameters to control security. (It is expected that such | parameters to control security. (It is expected that such | |||
| mechanisms might extend the DIO as a means to disseminate | mechanisms might extend the DIO as a means to disseminate | |||
| information across the DODAG). | information across the DODAG). | |||
| 17. RPL Constants and Variables | 17. RPL Constants and Variables | |||
| Following is a summary of RPL constants and variables: | The 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 MinHopRankIncrease (as advertised by the DODAG root), such | of MinHopRankIncrease (as advertised by the DODAG root), such | |||
| that DAGRank(ROOT_RANK) is 1. | 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 This is the default value used to | DEFAULT_PATH_CONTROL_SIZE: This is the default value used to | |||
| configure PCS in the DODAG Configuration Option, which dictates | configure PCS in the DODAG Configuration option, which dictates | |||
| the number of significant bits in the Path Control field of the | the number of significant bits in the Path Control field of the | |||
| Transit Information option. DEFAULT_PATH_CONTROL_SIZE has a | Transit Information option. DEFAULT_PATH_CONTROL_SIZE has a | |||
| value of 0. This configures the simplest case limiting the | value of 0. This configures the simplest case limiting the | |||
| fan-out to 1 and limiting a node to send a DAO message to only | fan-out to 1 and limiting a node to send a DAO message to only | |||
| one parent. | one parent. | |||
| DEFAULT_DIO_INTERVAL_MIN This is the default value used to configure | DEFAULT_DIO_INTERVAL_MIN: This is the default value used to configure | |||
| Imin for the DIO trickle timer. DEFAULT_DIO_INTERVAL_MIN has a | Imin for the DIO Trickle timer. DEFAULT_DIO_INTERVAL_MIN has a | |||
| value of 3. This configuration results in Imin of 8ms. | value of 3. This configuration results in Imin of 8 ms. | |||
| DEFAULT_DIO_INTERVAL_DOUBLINGS This is the default value used to | DEFAULT_DIO_INTERVAL_DOUBLINGS: This is the default value used to | |||
| configure Imax for the DIO trickle timer. | configure Imax for the DIO Trickle timer. | |||
| DEFAULT_DIO_INTERVAL_DOUBLINGS has a value of 20. This | DEFAULT_DIO_INTERVAL_DOUBLINGS has a value of 20. This | |||
| configuration results in a maximum interval of 2.3 hours. | configuration results in a maximum interval of 2.3 hours. | |||
| DEFAULT_DIO_REDUNDANCY_CONSTANT This is the default value used to | DEFAULT_DIO_REDUNDANCY_CONSTANT: This is the default value used to | |||
| configure k for the DIO trickle timer. | configure k for the DIO Trickle timer. | |||
| DEFAULT_DIO_REDUNDANCY_CONSTANT has a value of 10. This | DEFAULT_DIO_REDUNDANCY_CONSTANT has a value of 10. This | |||
| configuration is a conservative value for trickle suppression | configuration is a conservative value for Trickle suppression | |||
| mechanism. | mechanism. | |||
| DEFAULT_MIN_HOP_RANK_INCREASE This is the default value of | DEFAULT_MIN_HOP_RANK_INCREASE: This is the default value of | |||
| MinHopRankIncrease. DEFAULT_MIN_HOP_RANK_INCREASE has a value | MinHopRankIncrease. DEFAULT_MIN_HOP_RANK_INCREASE has a value | |||
| of 256. This configuration results in an 8-bit wide integer | of 256. This configuration results in an 8-bit wide integer | |||
| part of Rank. | part of Rank. | |||
| DEFAULT_DAO_DELAY This is the default value for the DelayDAO Timer. | DEFAULT_DAO_DELAY: This is the default value for the DelayDAO Timer. | |||
| DEFAULT_DAO_DELAY has value of 1 second. See Section 9.5. | DEFAULT_DAO_DELAY has a value of 1 second. See Section 9.5. | |||
| DIO Timer One instance per DODAG that a node is a member of. Expiry | DIO Timer: One instance per DODAG of which a node is a member. | |||
| triggers DIO message transmission. Trickle timer with variable | Expiry triggers DIO message transmission. A Trickle timer with | |||
| interval in [0, DIOIntervalMin..2^DIOIntervalDoublings]. See | variable interval in [0, | |||
| Section 8.3.1 | DIOIntervalMin..2^DIOIntervalDoublings]. See Section 8.3.1 | |||
| DAG Version Increment Timer Up to one instance per DODAG that the | DAG Version Increment Timer: Up to one instance per DODAG of which | |||
| node is acting as DODAG root of. May not be supported in all | the node is acting as DODAG root. May not be supported in all | |||
| implementations. Expiry triggers increment of | implementations. Expiry triggers increment of | |||
| DODAGVersionNumber, causing a new series of updated DIO message | DODAGVersionNumber, causing a new series of updated DIO 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 versus overhead). | |||
| DelayDAO Timer Up to one timer per DAO parent (the subset of DODAG | DelayDAO Timer: Up to one timer per DAO parent (the subset of DODAG | |||
| parents chosen to receive destination advertisements) per | 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 9.5 | parent. See Section 9.5 | |||
| RemoveTimer Up to one timer per DAO entry per neighbor (i.e. those | RemoveTimer: Up to one timer per DAO entry per neighbor (i.e., those | |||
| neighbors that have given DAO messages to this node as a DODAG | neighbors that have given DAO messages to this node as a DODAG | |||
| parent) Expiry may trigger No-Path advertisements or | parent). Expiry may trigger No-Path advertisements or | |||
| immediately deallocate the DAO entry if there are no DAO | immediately deallocate the DAO entry if there are no DAO | |||
| parents. | parents. | |||
| 18. Manageability Considerations | 18. 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 a LLN. The scope of this | of RPL, and how RPL will be operated in an LLN. The scope of this | |||
| section is to consider the following aspects of manageability: | section is to consider the following aspects of manageability: | |||
| configuration, monitoring, fault management, accounting, and | configuration, monitoring, fault management, accounting, and | |||
| performance of the protocol in light of the recommendations set forth | performance of the protocol in light of the recommendations set forth | |||
| in [RFC5706]. | in [RFC5706]. | |||
| 18.1. Introduction | 18.1. Introduction | |||
| Most of the existing IETF management standards are Structure of | Most of the existing IETF management standards are MIB modules (data | |||
| Management Information (SMI) based data models (MIB modules) to | models based on the Structure of Management Information (SMI)) to | |||
| monitor and manage networking devices. | monitor and manage networking devices. | |||
| For a number of protocols, the IETF community has used the IETF | For a number of protocols, the IETF community has used the IETF | |||
| Standard Management Framework, including the Simple Network | Standard Management Framework, including the Simple Network | |||
| Management Protocol [RFC3410], the Structure of Management | Management Protocol [RFC3410], the Structure of Management | |||
| Information [RFC2578], and MIB data models for managing new | Information [RFC2578], and MIB data models for managing new | |||
| protocols. | protocols. | |||
| As pointed out in [RFC5706], the common policy in terms of operation | As pointed out in [RFC5706], the common policy in terms of operation | |||
| and management has been expanded to a policy that is more open to a | and management has been expanded to a policy that is more open to a | |||
| set of tools and management protocols rather than strictly relying on | set of tools and management protocols rather than strictly relying on | |||
| a single protocol such as SNMP. | a single protocol such as SNMP. | |||
| In 2003, the Internet Architecture Board (IAB) held a workshop on | In 2003, the Internet Architecture Board (IAB) held a workshop on | |||
| Network Management [RFC3535] that discussed the strengths and | Network Management [RFC3535] that discussed the strengths and | |||
| weaknesses of some IETF network management protocols and compared | weaknesses of some IETF network management protocols and compared | |||
| them to operational needs, especially configuration. | them to operational needs, especially configuration. | |||
| One issue discussed was the user-unfriendliness of the binary format | One issue discussed was the user-unfriendliness of the binary format | |||
| of SNMP [RFC3410]. In the case of LLNs, it must be noted that at the | of SNMP [RFC3410]. In the case of LLNs, it must be noted that at the | |||
| time of writing, the CoRE Working Group is actively working on | time of writing, the CoRE working group is actively working on | |||
| resource management of devices in LLNs. Still, it is felt that this | resource management of devices in LLNs. Still, it is felt that this | |||
| section provides important guidance on how RPL should be deployed, | section provides important guidance on how RPL should be deployed, | |||
| operated, and managed. | operated, and managed. | |||
| As stated in [RFC5706], "A management information model should | As stated in [RFC5706]: | |||
| include a discussion of what is manageable, which aspects of the | ||||
| protocol need to be configured, what types of operations are allowed, | A management information model should include a discussion of what | |||
| what protocol-specific events might occur, which events can be | is manageable, which aspects of the protocol need to be | |||
| counted, and for which events an operator should be notified". These | configured, what types of operations are allowed, what protocol- | |||
| aspects are discussed in detail in the following sections. | specific events might occur, which events can be counted, and for | |||
| which events an operator should be notified. | ||||
| These aspects are discussed in detail in the following sections. | ||||
| RPL will be used on a variety of devices that may have resources such | RPL will be used on a variety of devices that may have resources such | |||
| as memory varying from a few Kbytes to several hundreds of Kbytes and | as memory varying from a few kilobytes to several hundreds of | |||
| even Mbytes. When memory is highly constrained, it may not be | kilobytes and even megabytes. When memory is highly constrained, it | |||
| possible to satisfy all the requirements listed in this section. | may not be possible to satisfy all the requirements listed in this | |||
| Still it is worth listing all of these in an exhaustive fashion, and | section. Still it is worth listing all of these in an exhaustive | |||
| implementers will then determine which of these requirements could be | fashion, and implementers will then determine which of these | |||
| satisfied according to the available resources on the device. | requirements could be satisfied according to the available resources | |||
| on the device. | ||||
| 18.2. Configuration Management | 18.2. Configuration Management | |||
| This section discusses the configuration management, listing the | This section discusses the configuration management, listing the | |||
| protocol parameters for which configuration management is relevant. | protocol parameters for which configuration management is relevant. | |||
| Some of the RPL parameters are optional. The requirements for | Some of the RPL parameters are optional. The requirements for | |||
| configuration are only applicable for the options that are used. | configuration are only applicable for the options that are used. | |||
| 18.2.1. Initialization Mode | 18.2.1. Initialization Mode | |||
| "Architectural Principles of the Internet" [RFC1958], Section 3.8, | "Architectural Principles of the Internet" [RFC1958], Section 3.8, | |||
| states: "Avoid options and parameters whenever possible. Any options | states: "Avoid options and parameters whenever possible. Any options | |||
| and parameters should be configured or negotiated dynamically rather | and parameters should be configured or negotiated dynamically rather | |||
| than manually." This is especially true in LLNs where the number of | than manually". This is especially true in LLNs where the number of | |||
| devices may be large and manual configuration is infeasible. This | devices may be large and manual configuration is infeasible. This | |||
| has been taken into account in the design of RPL whereby the DODAG | has been taken into account in the design of RPL whereby the DODAG | |||
| root provides a number of parameters to the devices joining the | root provides a number of parameters to the devices joining the | |||
| DODAG, thus avoiding cumbersome configuration on the routers and | DODAG, thus avoiding cumbersome configuration on the routers and | |||
| potential sources of misconfiguration (e.g. values of trickle timers, | potential sources of misconfiguration (e.g., values of Trickle | |||
| ...). Still there are additional RPL parameters that a RPL | timers, etc.). Still, there are additional RPL parameters that a RPL | |||
| implementation should allow to be configured, which are discussed in | implementation should allow to be configured, which are discussed in | |||
| this section. | this section. | |||
| 18.2.1.1. DIS mode of operation upon boot-up | 18.2.1.1. DIS Mode of Operation upon Boot-Up | |||
| When a node is first powered up: | When a node is first powered up: | |||
| 1. The node may decide to stay silent, waiting to receive DIO | 1. The node may decide to stay silent, waiting to receive DIO | |||
| messages from DODAG of interest (advertising a supported OF and | messages from DODAG of interest (advertising a supported OF and | |||
| metrics/constraints) and not send any multicast DIO messages | metrics/constraints) and not send any multicast DIO messages | |||
| until it has joined a DODAG. | until it has joined a DODAG. | |||
| 2. The node may decide to send one or more DIS messages (optionally | 2. The node may decide to send one or more DIS messages (optionally, | |||
| requesting DIO for a specific DODAG) as an initial probe for | requesting DIO for a specific DODAG) as an initial probe for | |||
| nearby DODAGs, and in the absence of DIO messages in reply after | nearby DODAGs, and in the absence of DIO messages in reply after | |||
| some configurable period of time, the node may decide to root a | some configurable period of time, the node may decide to root a | |||
| floating DODAG and start sending multicast DIO messages. | floating DODAG and start sending multicast DIO messages. | |||
| A RPL implementation SHOULD allow configuring the preferred mode of | A RPL implementation SHOULD allow configuring the preferred mode of | |||
| operation listed above along with the required parameters (in the | operation listed above along with the required parameters (in the | |||
| second mode: the number of DIS messages and related timer). | second mode: the number of DIS messages and related timer). | |||
| 18.2.2. DIO and DAO Base Message and Options Configuration | 18.2.2. DIO and DAO Base Message and Options Configuration | |||
| skipping to change at page 119, line 19 ¶ | skipping to change at page 116, line 12 ¶ | |||
| particular attention has been given to limiting the number of these | particular attention has been given to limiting the number of these | |||
| parameters that must be configured on each RPL router. Instead, a | parameters that must be configured on each RPL router. Instead, a | |||
| number of the default values can be used, and when required these | number of the default values can be used, and when required these | |||
| parameters can be provided by the DODAG root thus allowing for | parameters can be provided by the DODAG root thus allowing for | |||
| dynamic parameter setting. | dynamic parameter setting. | |||
| A RPL implementation SHOULD allow configuring the following routing | A RPL implementation SHOULD allow configuring the following routing | |||
| protocol parameters. As pointed out above, note that a large set of | protocol parameters. As pointed out above, note that a large set of | |||
| parameters is configured on the DODAG root. | parameters is configured on the DODAG root. | |||
| 18.2.3. Protocol Parameters to be configured on every router in the LLN | 18.2.3. Protocol Parameters to Be Configured on Every Router in the LLN | |||
| A RPL implementation MUST allow configuring the following RPL | A RPL implementation MUST allow configuring the following RPL | |||
| parameters: | parameters: | |||
| o RPLInstanceID [DIO message, in DIO base message]. Although the | o RPLInstanceID [DIO message, in DIO Base message]. Although the | |||
| RPLInstanceID must be configured on the DODAG root, it must also | RPLInstanceID must be configured on the DODAG root, it must also | |||
| be configured as a policy on every node in order to determine | be configured as a policy on every node in order to determine | |||
| whether or not the node should join a particular DODAG. Note that | whether or not the node should join a particular DODAG. Note that | |||
| a second RPLInstance can be configured on the node, should it | a second RPLInstanceID can be configured on the node, should it | |||
| become root of a floating DODAG. | become root of a floating DODAG. | |||
| o List of supported Objective Code Points (OCPs) | o List of supported Objective Code Points (OCPs) | |||
| o List of supported metrics: [I-D.ietf-roll-routing-metrics] | o List of supported metrics: [RFC6551] specifies a number of metrics | |||
| specifies a number of metrics and constraints used for the DODAG | and constraints used for the DODAG formation. Thus, a RPL | |||
| formation. Thus a RPL implementation should allow configuring the | implementation should allow configuring the list of metrics that a | |||
| list of metrics that a node can accept and understand. If a DIO | node can accept and understand. If a DIO is received with a | |||
| is received with a metric and/or constraint that is not understood | metric and/or constraint that is not understood or supported, as | |||
| or supported, as specified in Section 8.5, the node would join as | specified in Section 8.5, the node would join as a leaf node. | |||
| a leaf node. | ||||
| o Prefix information, along with valid and preferred lifetime and | o Prefix Information, along with valid and preferred lifetime and | |||
| the L and A flags. [DIO message, Prefix Information option]. A | the 'L' and 'A' flags. [DIO message, Prefix Information Option]. | |||
| RPL implementation SHOULD allow configuring if the Prefix | A RPL implementation SHOULD allow configuring if the Prefix | |||
| Information Option must be carried with the DIO message to | Information option must be carried with the DIO message to | |||
| distribute the prefix information for auto-configuration. In that | distribute the Prefix Information for autoconfiguration. In that | |||
| case, the RPL implementation MUST allow the list of prefixes to be | case, the RPL implementation MUST allow the list of prefixes to be | |||
| advertised in the Prefix Information Option along with the | advertised in the PIO along with the corresponding flags. | |||
| corresponding flags. | ||||
| o Solicited Information [DIS message, in Solicited Information | o Solicited Information [DIS message, in Solicited Information | |||
| option]. Note that an RPL implementation SHOULD allow configuring | option]. Note that a RPL implementation SHOULD allow configuring | |||
| when such messages should be sent and under which circumstances, | when such messages should be sent and under which circumstances, | |||
| along with the value of the RPLInstance ID, V/I/D flags. | along with the value of the RPLInstance ID, 'V'/'I'/'D' flags. | |||
| o 'K' flag: when a node should set the 'K' flag in a DAO message | o 'K' flag: when a node should set the 'K' flag in a DAO message | |||
| [DAO message, in DAO base message]. | [DAO message, in DAO Base message]. | |||
| o MOP (Mode of Operation) [DIO message, in DIO base message]. | o MOP (Mode of Operation) [DIO message, in DIO Base message]. | |||
| o Route Information (and preference) [DIO message, in Route | o Route Information (and preference) [DIO message, in Route | |||
| Information option] | Information option] | |||
| 18.2.4. Protocol Parameters to be configured on every non-DODAG-root | 18.2.4. Protocol Parameters to Be Configured on Every Non-DODAG-Root | |||
| router in the LLN | Router in the LLN | |||
| A RPL implementation MUST allow configuring the Target prefix [DAO | A RPL implementation MUST allow configuring the Target prefix [DAO | |||
| message, in RPL Target option]. | message, in RPL Target option]. | |||
| Furthermore, there are circumstances where a node may want to | Furthermore, there are circumstances where a node may want to | |||
| designate a Target to allow for specific processing of the Target | designate a Target to allow for specific processing of the Target | |||
| (prioritization, ...). Such processing rules are out of scope for | (prioritization, etc.). Such processing rules are out of scope for | |||
| this specification. When used, a RPL implementation SHOULD allow | this specification. When used, a RPL implementation SHOULD allow | |||
| configuring the Target Descriptor on a per-Target basis (for example | configuring the Target Descriptor on a per-Target basis (for example, | |||
| using access lists). | using access lists). | |||
| A node whose DODAG parent set is empty may become the DODAG root of a | 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 it is | floating DODAG. It may also set its DAGPreference such that it is | |||
| less preferred. Thus a RPL implementation MUST allow configuring the | less preferred. Thus, a RPL implementation MUST allow configuring | |||
| set of actions that the node should initiate in this case: | the set of actions that the node should initiate in this case: | |||
| o Start its own (floating) DODAG: the new DODAGID must be configured | o Start its own (floating) DODAG: the new DODAGID must be configured | |||
| in addition to its DAGPreference. | in addition to its DAGPreference. | |||
| o Poison the broken path (see procedure in Section 8.2.2.5). | o Poison the broken path (see procedure in Section 8.2.2.5). | |||
| o Trigger a local repair. | o Trigger a local repair. | |||
| 18.2.5. Parameters to be configured on the DODAG root | 18.2.5. Parameters to Be Configured on the DODAG Root | |||
| In addition, several other parameters are configured only on the | In addition, several other parameters are configured only on the | |||
| DODAG root and advertised in options carried in DIO messages. | DODAG root and advertised in options carried in DIO messages. | |||
| As specified in Section 8.3, a RPL implementation makes use of | As specified in Section 8.3, a RPL implementation makes use of | |||
| trickle timers to govern the sending of DIO messages. The operation | Trickle timers to govern the sending of DIO messages. The operation | |||
| of the trickle algorithm is determined by a set of configurable | of the Trickle algorithm is determined by a set of configurable | |||
| parameters, which MUST be configurable and that are then advertised | parameters, which MUST be configurable and that are then advertised | |||
| by the DODAG root along the DODAG in DIO messages. | by the DODAG root along the DODAG in DIO messages. | |||
| o DIOIntervalDoublings [DIO message, in DODAG configuration option] | o DIOIntervalDoublings [DIO message, in DODAG Configuration option] | |||
| o DIOIntervalMin [DIO message, in DODAG configuration option] | o DIOIntervalMin [DIO message, in DODAG Configuration option] | |||
| o DIORedundancyConstant [DIO message, in DODAG configuration option] | o DIORedundancyConstant [DIO message, in DODAG Configuration option] | |||
| In addition, a RPL implementation SHOULD allow for configuring the | In addition, a RPL implementation SHOULD allow for configuring the | |||
| following set of RPL parameters: | following set of RPL parameters: | |||
| o Path Control Size [DIO message, in DODAG configuration option] | o Path Control Size [DIO message, in DODAG Configuration option] | |||
| o MinHopRankIncrease [DIO message, in DODAG configuration option] | o MinHopRankIncrease [DIO message, in DODAG Configuration option] | |||
| o The DODAGPreference field [DIO message, DIO Base object] | o The DODAGPreference field [DIO message, DIO Base object] | |||
| o DODAGID [DIO message, in DIO base option] and [DAO message, when | o DODAGID [DIO message, in DIO Base option] and [DAO message, when | |||
| the 'D' flag of the DAO message is set] | the 'D' flag of the DAO message is set] | |||
| 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 floating DODAG root if it cannot join a grounded DODAG. For | act as a floating DODAG root if it cannot join a grounded DODAG. For | |||
| example a battery-operated node may not want to act as a floating | example, a battery-operated node may not want to act as a floating | |||
| DODAG root for a long period of time. Thus a RPL implementation MAY | DODAG root for a long period of time. Thus, a RPL implementation MAY | |||
| support the ability to configure whether or not a node could act as a | support the ability to configure whether or not a node could act as a | |||
| floating DODAG root for a configured period of time. | floating DODAG root for a configured period of time. | |||
| DAG Version Number Increment: a RPL implementation may allow by | DAG Version Number Increment: a RPL implementation may allow, by | |||
| configuration at the DODAG root to refresh the DODAG states by | configuration at the DODAG root, refreshing the DODAG states by | |||
| updating the DODAGVersionNumber. A RPL implementation SHOULD allow | updating the DODAGVersionNumber. A RPL implementation SHOULD allow | |||
| configuring whether or not periodic or event triggered mechanisms are | configuring whether or not periodic or event triggered mechanisms are | |||
| used by the DODAG root to control DODAGVersionNumber change (which | used by the DODAG root to control DODAGVersionNumber change (which | |||
| triggers a global repair as specified in Section 3.2.2. | triggers a global repair as specified in Section 3.2.2). | |||
| 18.2.6. Configuration of RPL Parameters related to DAO-based mechanisms | 18.2.6. Configuration of RPL Parameters Related to DAO-Based Mechanisms | |||
| DAO messages are optional and used in DODAGs that require downward | DAO messages are optional and used in DODAGs that require Downward | |||
| routing operation. This section deals with the set of parameters | routing operation. This section deals with the set of parameters | |||
| related to DAO messages and provides recommendations on their | related to DAO messages and provides recommendations on their | |||
| configuration. | configuration. | |||
| As stated in Section 9.5, it is recommended to delay the sending of | As stated in Section 9.5, it is recommended to delay the sending of | |||
| DAO message to DAO parents in order to maximize the chances to | DAO message to DAO parents in order to maximize the chances to | |||
| perform route aggregation. Upon receiving a DAO message, the node | perform route aggregation. Upon receiving a DAO message, the node | |||
| should thus start a DelayDAO timer. The default value is | should thus start a DelayDAO timer. The default value is | |||
| DEFAULT_DAO_DELAY. A RPL implementation MAY allow for configuring | DEFAULT_DAO_DELAY. A RPL implementation MAY allow for configuring | |||
| the DelayDAO timer. | the DelayDAO timer. | |||
| In a storing mode of operation, a storing node may increment DTSN in | In a Storing mode of operation, a storing node may increment DTSN in | |||
| order to reliably trigger a set of DAO updates from its immediate | order to reliably trigger a set of DAO updates from its immediate | |||
| children, as part of routine routing table updates and maintenance. | children, as part of routine routing table updates and maintenance. | |||
| A RPL implementation MAY allow for configuring a set of rules | A RPL implementation MAY allow for configuring a set of rules | |||
| specifying the triggers for DTSN increment (manual or event-based). | specifying the triggers for DTSN increment (manual or event-based). | |||
| When a DAO entry times out or is invalidated, a node SHOULD make a | When a DAO entry times out or is invalidated, a node SHOULD make a | |||
| reasonable attempt to report a No-Path to each of the DAO parents. | reasonable attempt to report a No-Path to each of the DAO parents. | |||
| That number of attempts MAY be configurable. | That number of attempts MAY be configurable. | |||
| An implementation should support rate-limiting the sending of DAO | An implementation should support rate-limiting the sending of DAO | |||
| messages. The related parameters MAY be configurable. | messages. The related parameters MAY be configurable. | |||
| 18.2.7. Configuration of RPL Parameters related to Security mechanisms | 18.2.7. Configuration of RPL Parameters Related to Security Mechanisms | |||
| As described in Section 10, the security features described in this | As described in Section 10, the security features described in this | |||
| document are optional to implement and a given implementation may | document are optional to implement and a given implementation may | |||
| support a subset (including the empty set) of the described security | support a subset (including the empty set) of the described security | |||
| features. | features. | |||
| To this end an implementation supporting described security features | To this end, an implementation supporting described security features | |||
| may conceptually implement a security policy database. In support of | may conceptually implement a security policy database. In support of | |||
| the security mechanisms, a RPL implementation SHOULD allow for | the security mechanisms, a RPL implementation SHOULD allow for | |||
| configuring a subset of the following parameters: | configuring a subset of the following parameters: | |||
| o Security Modes accepted [Unsecured mode, Pre-Installed mode, | o Security Modes accepted [Unsecured mode, Preinstalled mode, | |||
| Authenticated mode] | Authenticated mode] | |||
| o KIM values accepted [Secure RPL Control messages, in Security | o KIM values accepted [Secure RPL control messages, in Security | |||
| Section] | section] | |||
| o Level values accepted [Secure RPL Control messages, in Security | o Level values accepted [Secure RPL control messages, in Security | |||
| section] | section] | |||
| o Algorithm values accepted [Secure RPL Control messages, in | o Algorithm values accepted [Secure RPL control messages, in | |||
| Security section] | Security section] | |||
| o Key material in support of Authenticated or Pre-Installed key | o Key material in support of Authenticated or Preinstalled key | |||
| modes. | modes. | |||
| In addition, a RPL implementation SHOULD allow for configuring a | In addition, a RPL implementation SHOULD allow for configuring a | |||
| DODAG root with a subset of the following parameters: | DODAG root with a subset of the following parameters: | |||
| o Level values advertised [Secure DIO message, in Security Section] | o Level values advertised [Secure DIO message, in Security section] | |||
| o KIM value advertised [Secure DIO message, in Security Section] | o KIM value advertised [Secure DIO message, in Security section] | |||
| o Algorithm value advertised [Secure DIO message, in Security | o Algorithm value advertised [Secure DIO message, in Security | |||
| Section] | section] | |||
| 18.2.8. Default Values | 18.2.8. Default Values | |||
| This document specifies default values for the following set of RPL | This document specifies default values for the following set of RPL | |||
| variables: | variables: | |||
| DEFAULT_PATH_CONTROL_SIZE | DEFAULT_PATH_CONTROL_SIZE | |||
| DEFAULT_DIO_INTERVAL_MIN | DEFAULT_DIO_INTERVAL_MIN | |||
| DEFAULT_DIO_INTERVAL_DOUBLINGS | DEFAULT_DIO_INTERVAL_DOUBLINGS | |||
| DEFAULT_DIO_REDUNDANCY_CONSTANT | DEFAULT_DIO_REDUNDANCY_CONSTANT | |||
| DEFAULT_MIN_HOP_RANK_INCREASE | DEFAULT_MIN_HOP_RANK_INCREASE | |||
| DEFAULT_DAO_DELAY | DEFAULT_DAO_DELAY | |||
| It is recommended to specify default values in protocols; that being | It is recommended to specify default values in protocols; that being | |||
| said, as discussed in [RFC5706], default values may make less and | said, as discussed in [RFC5706], default values may make less and | |||
| less sense. RPL is a routing protocol that is expected to be used in | less sense. RPL is a routing protocol that is expected to be used in | |||
| a number of contexts where network characteristics such as the number | a number of contexts where network characteristics such as the number | |||
| of nodes, link and nodes types are expected to vary significantly. | of nodes and link and node types are expected to vary significantly. | |||
| Thus, these default values are likely to change with the context and | Thus, these default values are likely to change with the context and | |||
| as the technology will evolve. Indeed, LLNs' related technology | as the technology evolves. Indeed, LLNs' related technology (e.g., | |||
| (e.g. hardware, link layers) have been evolving dramatically over the | hardware, link layers) have been evolving dramatically over the past | |||
| past few years and such technologies are expected to change and | few years and such technologies are expected to change and evolve | |||
| evolve considerably in the coming years. | considerably in the coming years. | |||
| The proposed values are not based on extensive best current practices | The proposed values are not based on extensive best current practices | |||
| and are considered to be conservative. | and are considered to be conservative. | |||
| 18.3. Monitoring of RPL Operation | 18.3. Monitoring of RPL Operation | |||
| Several RPL parameters should be monitored to verify the correct | Several RPL parameters should be monitored to verify the correct | |||
| operation of the routing protocol and the network itself. This | operation of the routing protocol and the network itself. This | |||
| section lists the set of monitoring parameters of interest. | section lists the set of monitoring parameters of interest. | |||
| 18.3.1. Monitoring a DODAG parameters | 18.3.1. Monitoring a DODAG Parameters | |||
| A RPL implementation SHOULD provide information about the following | A RPL implementation SHOULD provide information about the following | |||
| parameters: | parameters: | |||
| o DODAG Version number [DIO message, in DIO base message] | o DODAG Version number [DIO message, in DIO Base message] | |||
| o Status of the G flag [DIO message, in DIO base message] | o Status of the 'G' flag [DIO message, in DIO Base message] | |||
| o Status of the MOP field [DIO message, in DIO base message] | o Status of the MOP field [DIO message, in DIO Base message] | |||
| o Value of the DTSN [DIO message, in DIO base message] | o Value of the DTSN [DIO message, in DIO Base message] | |||
| o Value of the rank [DIO message, in DIO base message] | o Value of the Rank [DIO message, in DIO Base message] | |||
| o DAOSequence: Incremented at each unique DAO message, echoed in the | o DAOSequence: Incremented at each unique DAO message, echoed in the | |||
| DAO-ACK message [DAO and DAO-ACK messages] | DAO-ACK message [DAO and DAO-ACK messages] | |||
| o Route Information [DIO message, Route Information option] (list of | o Route Information [DIO message, Route Information Option] (list of | |||
| IPv6 prefixes per parent along with lifetime and preference] | IPv6 prefixes per parent along with lifetime and preference] | |||
| o Trickle parameters: | o Trickle parameters: | |||
| * DIOIntervalDoublings [DIO message, in DODAG configuration | * DIOIntervalDoublings [DIO message, in DODAG Configuration | |||
| option] | option] | |||
| * DIOIntervalMin [DIO message, in DODAG configuration option] | * DIOIntervalMin [DIO message, in DODAG Configuration option] | |||
| * DIORedundancyConstant [DIO message, in DODAG configuration | * DIORedundancyConstant [DIO message, in DODAG Configuration | |||
| option] | option] | |||
| o Path Control Size [DIO message, in DODAG configuration option] | o Path Control Size [DIO message, in DODAG Configuration option] | |||
| o MinHopRankIncrease [DIO message, in DODAG configuration option] | o MinHopRankIncrease [DIO message, in DODAG Configuration option] | |||
| Values that may be monitored only on the DODAG root | Values that may be monitored only on the DODAG root: | |||
| o Transit Information [DAO, Transit Information option]: A RPL | o Transit Information [DAO, Transit Information option]: A RPL | |||
| implementation SHOULD allow configuring whether the set of | implementation SHOULD allow configuring whether the set of | |||
| received Transit Information options should be displayed on the | received Transit Information options should be displayed on the | |||
| DODAG root. In this case, the RPL database of received Transit | DODAG root. In this case, the RPL database of received Transit | |||
| Information should also contain: the path-sequence, path control, | Information should also contain the Path Sequence, Path Control, | |||
| path lifetime and parent address. | Path Lifetime, and Parent Address. | |||
| 18.3.2. Monitoring a DODAG inconsistencies and loop detection | 18.3.2. Monitoring a DODAG Inconsistencies and Loop Detection | |||
| Detection of DODAG inconsistencies is particularly critical in RPL | Detection of DODAG inconsistencies is particularly critical in RPL | |||
| networks. Thus it is recommended for a RPL implementation to provide | networks. Thus, it is recommended for a RPL implementation to | |||
| appropriate monitoring tools. A RPL implementation SHOULD provide a | provide appropriate monitoring tools. A RPL implementation SHOULD | |||
| counter reporting the number of a times the node has detected an | provide a counter reporting the number of a times the node has | |||
| inconsistency with respect to a DODAG parent, e.g. if the DODAGID has | detected an inconsistency with respect to a DODAG parent, e.g., if | |||
| changed. | the DODAGID has changed. | |||
| When possible more granular information about inconsistency detection | When possible more granular information about inconsistency detection | |||
| should be provided. A RPL implementation MAY provide counters | should be provided. A RPL implementation MAY provide counters | |||
| reporting the number of following inconsistencies: | reporting the number of following inconsistencies: | |||
| o Packets received with 'O' bit set (to Down) from a node with a | o Packets received with 'O' bit set (to Down) from a node with a | |||
| higher rank | higher Rank | |||
| o Packets received with 'O' bit cleared (to Up) from a node with a | o Packets received with 'O' bit cleared (to Up) from a node with a | |||
| lower rank | lower Rank | |||
| o Number of packets with the 'F' bit set | o Number of packets with the 'F' bit set | |||
| o Number of packets with the 'R' bit set | o Number of packets with the 'R' bit set | |||
| 18.4. Monitoring of the RPL data structures | 18.4. Monitoring of the RPL Data Structures | |||
| 18.4.1. Candidate Neighbor Data Structure | 18.4.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 a parent (with high | same means and qualified to potentially become a parent (with high | |||
| enough local confidence). A RPL implementation SHOULD provide a way | enough local confidence). A RPL implementation SHOULD provide a way | |||
| to allow for the candidate neighbor list to be monitored with some | to allow for the candidate neighbor list to be monitored with some | |||
| metric reflecting local confidence (the degree of stability of the | metric reflecting local confidence (the degree of stability of the | |||
| neighbors) as measured by some metrics. | neighbors) as 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 exceed the maximum authorized value. | |||
| 18.4.2. Destination Oriented Directed Acyclic Graph (DAG) Table | 18.4.2. Destination-Oriented Directed Acyclic Graph (DODAG) Table | |||
| For each DODAG, a RPL implementation is expected to keep track of the | For each DODAG, a RPL implementation is expected to keep track of the | |||
| following DODAG table values: | following DODAG table values: | |||
| o RPLInstanceID | o RPLInstanceID | |||
| o DODAGID | o DODAGID | |||
| o DODAGVersionNumber | o DODAGVersionNumber | |||
| o Rank | o Rank | |||
| o Objective Code Point | o Objective Code Point | |||
| o A set of DODAG Parents | o A set of DODAG parents | |||
| o A set of prefixes offered upwards along the DODAG | o A set of prefixes offered Upward along the DODAG | |||
| o Trickle timers used to govern the sending of DIO messages for the | o Trickle timers used to govern the sending of DIO messages for the | |||
| DODAG | DODAG | |||
| o List of DAO parents | o List of DAO parents | |||
| o DTSN | o DTSN | |||
| o Node status (router versus leaf) | o Node status (router versus leaf) | |||
| A RPL implementation SHOULD allow for monitoring the set of | A RPL implementation SHOULD allow for monitoring the set of | |||
| parameters listed above. | parameters listed above. | |||
| 18.4.3. Routing Table and DAO Routing Entries | 18.4.3. Routing Table and DAO Routing Entries | |||
| A RPL implementation maintains several information elements related | A RPL implementation maintains several information elements related | |||
| to the DODAG and the DAO entries (for storing nodes). In the case of | to the DODAG and the DAO entries (for storing nodes). In the case of | |||
| a non storing node, a limited amount of information is maintained | a non-storing node, a limited amount of information is maintained | |||
| (the routing table is mostly reduced to a set of DODAG parents along | (the routing table is mostly reduced to a set of DODAG parents along | |||
| with characteristics of the DODAG as mentioned above) whereas in the | with characteristics of the DODAG as mentioned above); whereas in the | |||
| case of storing nodes, this information is augmented with routing | case of storing nodes, this information is augmented with routing | |||
| entries. | entries. | |||
| A RPL implementation SHOULD allow for the following parameters to be | A RPL implementation SHOULD allow for the following parameters to be | |||
| monitored: | monitored: | |||
| o Next Hop (DODAG parent) | o Next Hop (DODAG parent) | |||
| o Next Hop Interface | o Next Hop Interface | |||
| o Path metrics value for each DODAG parent | o Path metrics value for each DODAG parent | |||
| A DAO Routing Table Entry conceptually contains the following | A DAO Routing Table entry conceptually contains the following | |||
| elements (for storing nodes only): | elements (for storing nodes only): | |||
| o Advertising Neighbor Information | o Advertising Neighbor Information | |||
| o IPv6 Address | o IPv6 address | |||
| o Interface ID to which DAO Parents has this entry been reported | o Interface ID 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 | |||
| * Path Sequence | * Path Sequence | |||
| * DAO Lifetime | * DAO Lifetime | |||
| * DAO Path Control | * DAO Path Control | |||
| o Destination Prefix (or Address or Mcast Group) | o Destination Prefix (or address or Mcast Group) | |||
| A RPL implementation SHOULD provide information about the state of | A RPL implementation SHOULD provide information about the state of | |||
| each DAO Routing Table entry states. | each DAO Routing Table entry states. | |||
| 18.5. Fault Management | 18.5. Fault Management | |||
| Fault management is a critical component used for troubleshooting, | Fault management is a critical component used for troubleshooting, | |||
| verification of the correct mode of operation of the protocol, | verification of the correct mode of operation of the protocol, and | |||
| network design, and is also a key component of network performance | network design; also, it is a key component of network performance | |||
| monitoring. A RPL implementation SHOULD allow providing the | monitoring. A RPL implementation SHOULD allow the provision of the | |||
| following information related to fault managements: | following information related to fault managements: | |||
| o Memory overflow along with the cause (e.g. routing tables | o Memory overflow along with the cause (e.g., routing tables | |||
| overflow, ...) | overflow, etc.) | |||
| o Number of times a packet could not be sent to a DODAG parent | o Number of times a packet could not be sent to a DODAG parent | |||
| flagged as valid | flagged as valid | |||
| o Number of times a packet has been received for which the router | o Number of times a packet has been received for which the router | |||
| did not have a corresponding RPLInstanceID | did not have a corresponding RPLInstanceID | |||
| o Number of times a local repair procedure was triggered | o Number of times a local repair procedure was triggered | |||
| o Number of times a global repair was triggered by the DODAG root | o Number of times a global repair was triggered by the DODAG root | |||
| o Number of received malformed messages | o Number of received malformed messages | |||
| o Number of seconds with packets to forward and no next hop (DODAG | o Number of seconds with packets to forward and no next hop (DODAG | |||
| parent) | parent) | |||
| o Number of seconds without next hop (DODAG parent) | o Number of seconds without next hop (DODAG parent) | |||
| o Number of times a node has joined a DODAG as a leaf because it | o Number of times a node has joined a DODAG as a leaf because it | |||
| received a DIO with metric/constraint not understood and it was | received a DIO with a metric/constraint that was not understood | |||
| configured to join as a leaf node in this case (see Section 18.6). | and it was configured to join as a leaf node in this case (see | |||
| Section 18.6) | ||||
| It is RECOMMENDED to report faults via at least error log messages. | It is RECOMMENDED to report faults via at least error log messages. | |||
| Other protocols may be used to report such faults. | Other protocols may be used to report such faults. | |||
| 18.6. Policy | 18.6. Policy | |||
| Policy rules can be used by a RPL implementation to determine whether | Policy rules can be used by a RPL implementation to determine whether | |||
| or not the node is allowed to join a particular DODAG advertised by a | or not the node is allowed to join a particular DODAG advertised by a | |||
| neighbor by means of DIO messages. | neighbor by means of DIO messages. | |||
| skipping to change at page 128, line 19 ¶ | skipping to change at page 125, line 5 ¶ | |||
| o List of supported routing metrics and constraints | o List of supported routing metrics and constraints | |||
| o Objective Function (OCP values) | o Objective Function (OCP values) | |||
| A RPL implementation MUST allow configuring these parameters and | A RPL implementation MUST allow configuring these parameters and | |||
| SHOULD specify whether the node must simply ignore the DIO if the | SHOULD specify whether the node must simply ignore the DIO if the | |||
| advertised DODAG is not compliant with the local policy or whether | advertised DODAG is not compliant with the local policy or whether | |||
| the node should join as the leaf node if only the list of supported | the node should join as the leaf node if only the list of supported | |||
| routing metrics and constraints, and the OF is not supported. | routing metrics and constraints, and the OF is not supported. | |||
| Additionally a RPL implementation SHOULD allow for the addition of | Additionally, a RPL implementation SHOULD allow for the addition of | |||
| the DODAGID as part of the policy. | the DODAGID as part of the policy. | |||
| 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 (OFs) referenced by their Objective | |||
| Codepoints (OCPs) for a node to join a DODAG, and what action should | Code Points (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, or if the advertised | configured allowable Objective Functions, or if the advertised | |||
| metrics/constraint is not understood/supported. Two actions can be | metrics/constraint is not understood/supported. Two actions can be | |||
| taken in this case: | taken in this case: | |||
| o The node joins the DODAG as a leaf node as specified in | o The node joins the DODAG as a leaf node as specified in | |||
| Section 8.5 | Section 8.5. | |||
| o The node does not join the DODAG | o The node does not join the DODAG. | |||
| 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. In this case, it is desirable to control, | |||
| administrative preference which route should be favored. An | via administrative preference, which route should be favored. An | |||
| implementation SHOULD allow for specifying an administrative | implementation SHOULD allow for the specification of an | |||
| preference for the routing protocol from which the route was learned. | administrative preference for the routing protocol from which the | |||
| route was learned. | ||||
| Internal Data Structures: some RPL implementations may limit the size | Internal Data Structures: some RPL implementations may limit the size | |||
| of the candidate neighbor list in order to bound the memory usage, in | of the candidate neighbor list in order to bound the memory usage; in | |||
| which case some otherwise viable candidate neighbors may not be | which case, some otherwise viable candidate neighbors may not be | |||
| considered and simply dropped from the candidate neighbor list. | considered and simply dropped 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. | |||
| 18.7. Fault Isolation | 18.7. Fault Isolation | |||
| It is RECOMMENDED to quarantine neighbors that start emitting | It is RECOMMENDED to quarantine neighbors that start emitting | |||
| malformed messages at unacceptable rates. | malformed messages at unacceptable rates. | |||
| 18.8. Impact on Other Protocols | 18.8. Impact on Other Protocols | |||
| RPL has very limited impact on other protocols. Where more than one | RPL has very limited impact on other protocols. Where more than one | |||
| routing protocol is required on a router such as a LBR, it is | routing protocol is required on a router, such as an LBR, it is | |||
| expected for the device to support routing redistribution functions | expected for the device to support routing redistribution functions | |||
| between the routing protocols to allow for reachability between the | between the routing protocols to allow for reachability between the | |||
| two routing domains. Such redistribution SHOULD be governed by the | two routing domains. Such redistribution SHOULD be governed by the | |||
| use of user configurable policy. | use of user configurable policy. | |||
| With regards to the impact in terms of traffic on the network, RPL | With regard to the impact in terms of traffic on the network, RPL has | |||
| has been designed to limit the control traffic thanks to mechanisms | been designed to limit the control traffic thanks to mechanisms such | |||
| such as Trickle timers (Section 8.3). Thus the impact of RPL on | as Trickle timers (Section 8.3). Thus, the impact of RPL on other | |||
| other protocols should be extremely limited. | protocols should be extremely limited. | |||
| 18.9. Performance Management | 18.9. Performance Management | |||
| Performance management is always an important aspect of a protocol | Performance management is always an important aspect of a protocol, | |||
| and RPL is not an exception. Several metrics of interest have been | and RPL is not an exception. Several metrics of interest have been | |||
| specified by the IP Performance Monitoring (IPPM) Working Group: that | specified by the IP Performance Monitoring (IPPM) working group: that | |||
| being said, they will be hardly applicable to LLN considering the | being said, they will be hardly applicable to LLN considering the | |||
| cost of monitoring these metrics in terms of resources on the devices | cost of monitoring these metrics in terms of resources on the devices | |||
| and required bandwidth. Still, RPL implementation MAY support some | and required bandwidth. Still, RPL implementations MAY support some | |||
| of these, and other parameters of interest are listed below: | of these, and other parameters of interest are listed below: | |||
| o Number of repairs and time to repair in seconds (average, | o Number of repairs and time to repair in seconds (average, | |||
| variance) | variance) | |||
| o Number of times and duration during which a devices could not | o Number of times and time period during which a devices could not | |||
| forward a packet because of a lack of reachable neighbor in its | forward a packet because of a lack of a reachable neighbor in its | |||
| routing table | routing table | |||
| o Monitoring of resources consumption by RPL in terms of bandwidth | o Monitoring of resources consumption by RPL in terms of bandwidth | |||
| and required memory | and required memory | |||
| o Number of RPL control messages sent and received | o Number of RPL control messages sent and received | |||
| 18.10. Diagnostics | 18.10. Diagnostics | |||
| There may be situations where a node should be placed in "verbose" | There may be situations where a node should be placed in "verbose" | |||
| mode to improve diagnostics. Thus a RPL implementation SHOULD | mode to improve diagnostics. Thus, a RPL implementation SHOULD | |||
| provide the ability to place a node in and out of verbose mode in | provide the ability to place a node in and out of verbose mode in | |||
| order to get additional diagnostic information. | order to get additional diagnostic information. | |||
| 19. Security Considerations | 19. Security Considerations | |||
| 19.1. Overview | 19.1. Overview | |||
| From a security perspective, RPL networks are no different from any | From a security perspective, RPL networks are no different from any | |||
| other network. They are vulnerable to passive eavesdropping attacks | other network. They are vulnerable to passive eavesdropping attacks | |||
| and potentially even active tampering when physical access to a wire | and, potentially, even active tampering when physical access to a | |||
| is not required to participate in communications. The very nature of | wire is not required to participate in communications. The very | |||
| ad hoc networks and their cost objectives impose additional security | nature of ad hoc networks and their cost objectives impose additional | |||
| constraints, which perhaps make these networks the most difficult | security constraints, which perhaps make these networks the most | |||
| environments to secure. Devices are low-cost and have limited | difficult environments to secure. Devices are low-cost and have | |||
| capabilities in terms of computing power, available storage, and | limited capabilities in terms of computing power, available storage, | |||
| power drain; and it cannot always be assumed they have a trusted | and power drain; it cannot always be assumed they have a trusted | |||
| computing base or a high-quality random number generator aboard. | computing base or a high-quality random number generator aboard. | |||
| Communications cannot rely on the online availability of a fixed | Communications cannot rely on the online availability of a fixed | |||
| infrastructure and might involve short-term relationships between | infrastructure and might involve short-term relationships between | |||
| devices that may never have communicated before. These constraints | devices that may never have communicated before. These constraints | |||
| might severely limit the choice of cryptographic algorithms and | might severely limit the choice of cryptographic algorithms and | |||
| protocols and influence the design of the security architecture | protocols and influence the design of the security architecture | |||
| because the establishment and maintenance of trust relationships | because the establishment and maintenance of trust relationships | |||
| between devices need to be addressed with care. In addition, battery | between devices need to be addressed with care. In addition, battery | |||
| lifetime and cost constraints put severe limits on the security | lifetime and cost constraints put severe limits on the security | |||
| overhead these networks can tolerate, something that is of far less | overhead these networks can tolerate, something that is of far less | |||
| concern with higher bandwidth networks. Most of these security | concern with higher bandwidth networks. Most of these security | |||
| skipping to change at page 130, line 36 ¶ | skipping to change at page 127, line 22 ¶ | |||
| lifetime and cost constraints put severe limits on the security | lifetime and cost constraints put severe limits on the security | |||
| overhead these networks can tolerate, something that is of far less | overhead these networks can tolerate, something that is of far less | |||
| concern with higher bandwidth networks. Most of these security | concern with higher bandwidth networks. Most of these security | |||
| architectural elements can be implemented at higher layers and may, | architectural elements can be implemented at higher layers and may, | |||
| therefore, be considered to be out of scope for this specification. | therefore, be considered to be out of scope for this specification. | |||
| Special care, however, needs to be exercised with respect to | Special care, however, needs to be exercised with respect to | |||
| interfaces to these higher layers. | interfaces to these higher layers. | |||
| The security mechanisms in this standard are based on symmetric-key | The security mechanisms in this standard are based on symmetric-key | |||
| and public-key cryptography and use keys that are to be provided by | and public-key cryptography and use keys that are to be provided by | |||
| higher layer processes. The establishment and maintenance of these | higher-layer processes. The establishment and maintenance of these | |||
| keys are out of scope for this specification. The mechanisms assume | keys are out of scope for this specification. The mechanisms assume | |||
| a secure implementation of cryptographic operations and secure and | a secure implementation of cryptographic operations and secure and | |||
| authentic storage of keying material. | authentic storage of keying material. | |||
| The security mechanisms specified provide particular combinations of | The security mechanisms specified provide particular combinations of | |||
| the following security services: | the following security services: | |||
| Data confidentiality: Assurance that transmitted information is only | Data confidentiality: Assurance that transmitted information is only | |||
| disclosed to parties for which it is intended. | disclosed to parties for which it is intended. | |||
| Data authenticity: Assurance of the source of transmitted | Data authenticity: Assurance of the source of transmitted information | |||
| information (and, hereby, that information was not | (and, hereby, that information was not modified in transit). | |||
| modified in transit). | ||||
| Replay protection: Assurance that a duplicate of transmitted | Replay protection: Assurance that a duplicate of transmitted | |||
| information is detected. | information is detected. | |||
| Timeliness (delay protection): Assurance that transmitted | Timeliness (delay protection): Assurance that transmitted | |||
| information was received in a timely manner. | information was received in a timely manner. | |||
| The actual protection provided can be adapted on a per-packet basis | The actual protection provided can be adapted on a per-packet basis | |||
| and allows for varying levels of data authenticity (to minimize | and allows for varying levels of data authenticity (to minimize | |||
| security overhead in transmitted packets where required) and for | security overhead in transmitted packets where required) and for | |||
| optional data confidentiality. When nontrivial protection is | optional data confidentiality. When nontrivial protection is | |||
| required, replay protection is always provided. | required, replay protection is always provided. | |||
| Replay protection is provided via the use of a non-repeating value | Replay protection is provided via the use of a non-repeating value | |||
| (CCM nonce) in the packet protection process and storage of some | (CCM nonce) in the packet protection process and storage of some | |||
| status information (originating device and the CCM nonce counter last | status information (originating device and the CCM nonce counter last | |||
| received from that device), which allows detection of whether this | received from that device), which allows detection of whether this | |||
| particular CCM nonce value was used previously by the originating | particular CCM nonce value was used previously by the originating | |||
| device. In addition, so-called delay protection is provided amongst | device. In addition, so-called delay protection is provided amongst | |||
| those devices that have a loosely synchronized clock on board. The | those devices that have a loosely synchronized clock on board. The | |||
| acceptable time delay can be adapted on a per-packet basis and allows | acceptable time delay can be adapted on a per-packet basis and allows | |||
| for varying latencies (to facilitate longer latencies in packets | for varying latencies (to facilitate longer latencies in packets | |||
| transmitted over a multi-hop communication path). | transmitted over a multi-hop communication path). | |||
| Cryptographic protection may use a key shared between two peer | Cryptographic protection may use a key shared between two peer | |||
| devices (link key) or a key shared among a group of devices (group | devices (link key) or a key shared among a group of devices (group | |||
| key), thus allowing some flexibility and application-specific | key), thus allowing some flexibility and application-specific trade- | |||
| tradeoffs between key storage and key maintenance costs versus the | offs between key storage and key maintenance costs versus the | |||
| cryptographic protection provided. If a group key is used for peer- | cryptographic protection provided. If a group key is used for peer- | |||
| to-peer communication, protection is provided only against outsider | to-peer communication, protection is provided only against outsider | |||
| devices and not against potential malicious devices in the key- | devices and not against potential malicious devices in the key- | |||
| sharing group. | sharing group. | |||
| Data authenticity may be provided using symmetric-key based or | Data authenticity may be provided using symmetric-key-based or | |||
| public-key based techniques. With public-key based techniques (via | public-key-based techniques. With public-key-based techniques (via | |||
| signatures), one corroborates evidence as to the unique originator of | signatures), one corroborates evidence as to the unique originator of | |||
| transmitted information, whereas with symmetric-key based techniques | transmitted information, whereas with symmetric-key-based techniques, | |||
| data authenticity is only provided relative to devices in a key- | data authenticity is only provided relative to devices in a key- | |||
| sharing group. Thus, public-key based authentication may be useful | sharing group. Thus, public-key-based authentication may be useful | |||
| in scenarios that require a more fine-grained authentication than can | in scenarios that require a more fine-grained authentication than can | |||
| be provided with symmetric-key based authentication techniques alone, | be provided with symmetric-key-based authentication techniques alone, | |||
| such as with group communications (broadcast, multicast), or in | such as with group communications (broadcast, multicast) or in | |||
| scenarios that require non-repudiation. | scenarios that require non-repudiation. | |||
| 20. IANA Considerations | 20. IANA Considerations | |||
| 20.1. RPL Control Message | 20.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 an ICMPv6 Type Number Registry. The suggested type | IANA has defined an ICMPv6 Type Number Registry. The type value for | |||
| value for the RPL Control Message is 155, to be confirmed by IANA. | the RPL control message is 155. | |||
| 20.2. New Registry for RPL Control Codes | 20.2. New Registry for RPL Control Codes | |||
| IANA is requested to create a registry, RPL Control Codes, for the | IANA has created a registry, RPL Control Codes, for the Code field of | |||
| Code field of the ICMPv6 RPL Control Message. | the ICMPv6 RPL control message. | |||
| New codes may be allocated only by an IETF Review. Each code should | New codes may be allocated only by an IETF Review. Each code is | |||
| be tracked with the following qualities: | tracked with the following qualities: | |||
| o Code | o Code | |||
| o Description | o Description | |||
| o Defining RFC | o Defining RFC | |||
| The following codes are currently defined: | The following codes are currently defined: | |||
| +------+----------------------------------------------+-------------+ | +------+----------------------------------------------+-------------+ | |||
| | Code | Description | Reference | | | Code | Description | Reference | | |||
| +------+----------------------------------------------+-------------+ | +------+----------------------------------------------+-------------+ | |||
| | 0x00 | DODAG Information Solicitation | This | | | 0x00 | DODAG Information Solicitation | This | | |||
| skipping to change at page 133, line 4 ¶ | skipping to change at page 129, line 30 ¶ | |||
| | | | document | | | | | document | | |||
| | | | | | | | | | | |||
| | 0x03 | Destination Advertisement Object | This | | | 0x03 | Destination Advertisement Object | This | | |||
| | | Acknowledgment | document | | | | Acknowledgment | document | | |||
| | | | | | | | | | | |||
| | 0x80 | Secure DODAG Information Solicitation | This | | | 0x80 | Secure DODAG Information Solicitation | This | | |||
| | | | document | | | | | document | | |||
| | | | | | | | | | | |||
| | 0x81 | Secure DODAG Information Object | This | | | 0x81 | Secure DODAG Information Object | This | | |||
| | | | document | | | | | document | | |||
| | | | | | ||||
| | 0x82 | Secure Destination Advertisement Object | This | | | 0x82 | Secure Destination Advertisement Object | This | | |||
| | | | document | | | | | document | | |||
| | | | | | | | | | | |||
| | 0x83 | Secure Destination Advertisement Object | This | | | 0x83 | Secure Destination Advertisement Object | This | | |||
| | | Acknowledgment | document | | | | Acknowledgment | document | | |||
| | | | | | | | | | | |||
| | 0x8A | Consistency Check | This | | | 0x8A | Consistency Check | This | | |||
| | | | document | | | | | document | | |||
| +------+----------------------------------------------+-------------+ | +------+----------------------------------------------+-------------+ | |||
| RPL Control Codes | RPL Control Codes | |||
| 20.3. New Registry for the Mode of Operation (MOP) | 20.3. New Registry for the Mode of Operation (MOP) | |||
| IANA is requested to create a registry for the 3-bit Mode of | IANA has created a registry for the 3-bit Mode of Operation (MOP), | |||
| Operation (MOP), which is contained in the DIO Base. | which is contained in the DIO Base. | |||
| New values may be allocated only by an IETF Review. Each value | New values may be allocated only by an IETF Review. Each value is | |||
| should be tracked with the following qualities: | tracked with the following qualities: | |||
| o Mode of Operation Value | o Mode of Operation Value | |||
| o Capability description | o Capability description | |||
| o Defining RFC | o Defining RFC | |||
| Four values are currently defined: | Four values are currently defined: | |||
| +----------+------------------------------------------+-------------+ | +----------+------------------------------------------+-------------+ | |||
| | MOP | Description | Reference | | | MOP | Description | Reference | | |||
| | value | | | | | value | | | | |||
| +----------+------------------------------------------+-------------+ | +----------+------------------------------------------+-------------+ | |||
| skipping to change at page 133, line 36 ¶ | skipping to change at page 130, line 14 ¶ | |||
| o Capability description | o Capability description | |||
| o Defining RFC | o Defining RFC | |||
| Four values are currently defined: | Four values are currently defined: | |||
| +----------+------------------------------------------+-------------+ | +----------+------------------------------------------+-------------+ | |||
| | MOP | Description | Reference | | | MOP | Description | Reference | | |||
| | value | | | | | value | | | | |||
| +----------+------------------------------------------+-------------+ | +----------+------------------------------------------+-------------+ | |||
| | 0 | No downward routes maintained by RPL | This | | | 0 | No Downward routes maintained by RPL | This | | |||
| | | | document | | | | | document | | |||
| | | | | | | | | | | |||
| | 1 | Non-Storing mode of operation | This | | | 1 | Non-Storing Mode of Operation | This | | |||
| | | | document | | | | | document | | |||
| | | | | | | | | | | |||
| | 2 | Storing mode of operation with no | This | | | 2 | Storing Mode of Operation with no | This | | |||
| | | multicast support | document | | | | multicast support | document | | |||
| | | | | | | | | | | |||
| | 3 | Storing mode of operation with multicast | This | | | 3 | Storing Mode of Operation with multicast | This | | |||
| | | support | document | | | | support | document | | |||
| +----------+------------------------------------------+-------------+ | +----------+------------------------------------------+-------------+ | |||
| DIO Mode of operation | DIO Mode of Operation | |||
| The rest of the range, decimal 4 to 7, is currently unassigned. | The rest of the range, decimal 4 to 7, is currently unassigned. | |||
| 20.4. RPL Control Message Option | 20.4. RPL Control Message Options | |||
| IANA is requested to create a registry for the RPL Control Message | IANA has created a registry for the RPL Control Message Options. | |||
| Options | ||||
| New values may be allocated only by an IETF Review. Each value | New values may be allocated only by an IETF Review. Each value is | |||
| should be tracked with the following qualities: | tracked with the following qualities: | |||
| o Value | o Value | |||
| o Meaning | o Meaning | |||
| o Defining RFC | o Defining RFC | |||
| +-------+-----------------------+---------------+ | +-------+-----------------------+---------------+ | |||
| | Value | Meaning | Reference | | | Value | Meaning | Reference | | |||
| +-------+-----------------------+---------------+ | +-------+-----------------------+---------------+ | |||
| | 0 | Pad1 | This document | | | 0x00 | Pad1 | This document | | |||
| | | | | | | | | | | |||
| | 1 | PadN | This document | | | 0x01 | PadN | This document | | |||
| | | | | | | | | | | |||
| | 2 | DAG Metric Container | This Document | | | 0x02 | DAG Metric Container | This Document | | |||
| | | | | | | | | | | |||
| | 3 | Routing Information | This Document | | | 0x03 | Routing Information | This Document | | |||
| | | | | | | | | | | |||
| | 4 | DODAG Configuration | This Document | | | 0x04 | DODAG Configuration | This Document | | |||
| | | | | | | | | | | |||
| | 5 | RPL Target | This Document | | | 0x05 | RPL Target | This Document | | |||
| | | | | | | | | | | |||
| | 6 | Transit Information | This Document | | | 0x06 | Transit Information | This Document | | |||
| | | | | | | | | | | |||
| | 7 | Solicited Information | This Document | | | 0x07 | Solicited Information | This Document | | |||
| | | | | | | | | | | |||
| | 8 | Prefix Information | This Document | | | 0x08 | Prefix Information | This Document | | |||
| | | | | | | | | | | |||
| | 9 | Target Descriptor | This Document | | | 0x09 | Target Descriptor | This Document | | |||
| +-------+-----------------------+---------------+ | +-------+-----------------------+---------------+ | |||
| RPL Control Message Options | RPL Control Message Options | |||
| 20.5. Objective Code Point (OCP) Registry | 20.5. Objective Code Point (OCP) Registry | |||
| IANA is requested to create a registry to manage the codespace of the | IANA has created a registry to manage the codespace of the Objective | |||
| Objective Code Point (OCP) field. | Code Point (OCP) field. | |||
| No OCP codepoints are defined in this specification. | No OCPs are defined in this specification. | |||
| New codes may be allocated only by an IETF Review. Each code should | New codes may be allocated only by an IETF Review. Each code is | |||
| be tracked with the following qualities: | tracked with the following qualities: | |||
| o OCP code | o Code | |||
| o Description | o Description | |||
| o Defining RFC | o Defining RFC | |||
| 20.6. New Registry for the Security Section Algorithm | 20.6. New Registry for the Security Section Algorithm | |||
| IANA is requested to create a registry for the values of 8-bit | IANA has created a registry for the values of the 8-bit Algorithm | |||
| Algorithm field in the Security Section. | field in the Security section. | |||
| New values may be allocated only by an IETF Review. Each value | New values may be allocated only by an IETF Review. Each value is | |||
| should be tracked with the following qualities: | tracked with the following qualities: | |||
| o Value | o Value | |||
| o Encryption/MAC | o Encryption/MAC | |||
| o Signature | o Signature | |||
| o Defining RFC | o Defining RFC | |||
| The following value is currently defined: | The following value is currently defined: | |||
| skipping to change at page 135, line 40 ¶ | skipping to change at page 132, line 28 ¶ | |||
| +-------+------------------+------------------+---------------+ | +-------+------------------+------------------+---------------+ | |||
| | Value | Encryption/MAC | Signature | Reference | | | Value | Encryption/MAC | Signature | Reference | | |||
| +-------+------------------+------------------+---------------+ | +-------+------------------+------------------+---------------+ | |||
| | 0 | CCM with AES-128 | RSA with SHA-256 | This document | | | 0 | CCM with AES-128 | RSA with SHA-256 | This document | | |||
| +-------+------------------+------------------+---------------+ | +-------+------------------+------------------+---------------+ | |||
| Security Section Algorithm | Security Section Algorithm | |||
| 20.7. New Registry for the Security Section Flags | 20.7. New Registry for the Security Section Flags | |||
| IANA is requested to create a registry for the 8-bit Security Section | IANA has created a registry for the 8-bit Security Section Flags | |||
| Flag Field. | field. | |||
| New bit numbers may be allocated only by an IETF Review. Each bit | New bit numbers may be allocated only by an IETF Review. Each bit is | |||
| should be tracked with the following qualities: | tracked with the following qualities: | |||
| o Bit number (counting from bit 0 as the most significant bit) | o Bit number (counting from bit 0 as the most significant bit) | |||
| o Capability description | o Capability description | |||
| o Defining RFC | o Defining RFC | |||
| No bit is currently defined for the Security Section Flags. | ||||
| No bit is currently defined for the Security Section Flags field. | ||||
| 20.8. New Registry for Per-KIM Security Levels | 20.8. New Registry for Per-KIM Security Levels | |||
| IANA is requested to create one registry for the 3-bit Security Level | IANA has created one registry for the 3-bit Security Level (LVL) | |||
| (LVL) Field per allocated KIM value. | field per allocated KIM value. | |||
| For a given KIM value, new levels may be allocated only by an IETF | For a given KIM value, new levels may be allocated only by an IETF | |||
| Review. Each level should be tracked with the following qualities: | Review. Each level is tracked with the following qualities: | |||
| o Level | o Level | |||
| o KIM value | o KIM value | |||
| o Description | o Description | |||
| o Defining RFC | o Defining RFC | |||
| The following levels pre KIM value are currently defined: | The following levels per KIM value are currently defined: | |||
| +-------+-----------+---------------+---------------+ | +-------+-----------+---------------+---------------+ | |||
| | Level | KIM value | Description | Reference | | | Level | KIM value | Description | Reference | | |||
| +-------+-----------+---------------+---------------+ | +-------+-----------+---------------+---------------+ | |||
| | 0 | 0 | See Figure 11 | This document | | | 0 | 0 | See Figure 11 | This document | | |||
| | | | | | | | | | | | | |||
| | 1 | 0 | See Figure 11 | This document | | | 1 | 0 | See Figure 11 | This document | | |||
| | | | | | | | | | | | | |||
| | 2 | 0 | See Figure 11 | This document | | | 2 | 0 | See Figure 11 | This document | | |||
| | | | | | | | | | | | | |||
| skipping to change at page 137, line 43 ¶ | skipping to change at page 133, line 48 ¶ | |||
| | | | | | | | | | | | | |||
| | 1 | 3 | See Figure 11 | This document | | | 1 | 3 | See Figure 11 | This document | | |||
| | | | | | | | | | | | | |||
| | 2 | 3 | See Figure 11 | This document | | | 2 | 3 | See Figure 11 | This document | | |||
| | | | | | | | | | | | | |||
| | 3 | 3 | See Figure 11 | This document | | | 3 | 3 | See Figure 11 | This document | | |||
| +-------+-----------+---------------+---------------+ | +-------+-----------+---------------+---------------+ | |||
| Per-KIM Security Levels | Per-KIM Security Levels | |||
| 20.9. New Registry for the DIS (DODAG Informational Solicitation) Flags | 20.9. New Registry for DODAG Informational Solicitation (DIS) Flags | |||
| IANA is requested to create a registry for the DIS (DODAG | IANA has created a registry for the DIS (DODAG Informational | |||
| Informational Solicitation) Flag Field. | Solicitation) Flags field. | |||
| New bit numbers may be allocated only by an IETF Review. Each bit | New bit numbers may be allocated only by an IETF Review. Each bit is | |||
| should be tracked with the following qualities: | tracked with the following qualities: | |||
| o Bit number (counting from bit 0 as the most significant bit) | o Bit number (counting from bit 0 as the most significant bit) | |||
| o Capability description | o Capability description | |||
| o Defining RFC | o Defining RFC | |||
| No bit is currently defined for the DIS (DODAG Informational | No bit is currently defined for the DIS (DODAG Informational | |||
| Solicitation) Flags. | Solicitation) Flags field. | |||
| 20.10. New Registry for the DODAG Information Object (DIO) Flags | 20.10. New Registry for the DODAG Information Object (DIO) Flags | |||
| IANA is requested to create a registry for the 8-bit DODAG | IANA has created a registry for the 8-bit DODAG Information Object | |||
| Information Object (DIO) Flag Field. | (DIO) Flags field. | |||
| New bit numbers may be allocated only by an IETF Review. Each bit | New bit numbers may be allocated only by an IETF Review. Each bit is | |||
| should be tracked with the following qualities: | tracked with the following qualities: | |||
| o Bit number (counting from bit 0 as the most significant bit) | o Bit number (counting from bit 0 as the most significant bit) | |||
| o Capability description | o Capability description | |||
| o Defining RFC | o Defining RFC | |||
| No bit is currently defined for the DIS (DODAG Informational | No bit is currently defined for the DIS (DODAG Informational | |||
| Solicitation) Flags. | Solicitation) Flags. | |||
| 20.11. New Registry for the Destination Advertisement Object (DAO) | 20.11. New Registry for the Destination Advertisement Object (DAO) | |||
| Flags | Flags | |||
| IANA is requested to create a registry for the 8-bit Destination | IANA has created a registry for the 8-bit Destination Advertisement | |||
| Advertisement Object (DAO) Flag Field. | Object (DAO) Flags field. | |||
| New bit numbers may be allocated only by an IETF Review. Each bit | New bit numbers may be allocated only by an IETF Review. Each bit is | |||
| should be tracked with the following qualities: | tracked with the following qualities: | |||
| o Bit number (counting from bit 0 as the most significant bit) | o Bit number (counting from bit 0 as the most significant bit) | |||
| o Capability description | o Capability description | |||
| o Defining RFC | o Defining RFC | |||
| The following bits are currently defined: | The following bits are currently defined: | |||
| +------------+------------------------------+---------------+ | +------------+------------------------------+---------------+ | |||
| | Bit number | Description | Reference | | | Bit number | Description | Reference | | |||
| +------------+------------------------------+---------------+ | +------------+------------------------------+---------------+ | |||
| | 0 | DAO-ACK request (K) | This document | | | 0 | DAO-ACK request (K) | This document | | |||
| | | | | | | | | | | |||
| | 1 | DODAGID field is present (D) | This document | | | 1 | DODAGID field is present (D) | This document | | |||
| +------------+------------------------------+---------------+ | +------------+------------------------------+---------------+ | |||
| skipping to change at page 139, line 18 ¶ | skipping to change at page 135, line 19 ¶ | |||
| | 0 | DAO-ACK request (K) | This document | | | 0 | DAO-ACK request (K) | This document | | |||
| | | | | | | | | | | |||
| | 1 | DODAGID field is present (D) | This document | | | 1 | DODAGID field is present (D) | This document | | |||
| +------------+------------------------------+---------------+ | +------------+------------------------------+---------------+ | |||
| DAO Base Flags | DAO Base Flags | |||
| 20.12. New Registry for the Destination Advertisement Object (DAO) | 20.12. New Registry for the Destination Advertisement Object (DAO) | |||
| Acknowledgement Flags | Acknowledgement Flags | |||
| IANA is requested to create a registry for the 8-bit Destination | IANA has created a registry for the 8-bit Destination Advertisement | |||
| Advertisement Object (DAO) Acknowledgement Flag Field. | Object (DAO) Acknowledgement Flags field. | |||
| New bit numbers may be allocated only by an IETF Review. Each bit | New bit numbers may be allocated only by an IETF Review. Each bit is | |||
| should be tracked with the following qualities: | tracked with the following qualities: | |||
| o Bit number (counting from bit 0 as the most significant bit) | o Bit number (counting from bit 0 as the most significant bit) | |||
| o Capability description | o Capability description | |||
| o Defining RFC | o Defining RFC | |||
| The following bit is currently defined: | The following bit is currently defined: | |||
| +------------+------------------------------+---------------+ | +------------+------------------------------+---------------+ | |||
| | Bit number | Description | Reference | | | Bit number | Description | Reference | | |||
| +------------+------------------------------+---------------+ | +------------+------------------------------+---------------+ | |||
| | 0 | DODAGID field is present (D) | This document | | | 0 | DODAGID field is present (D) | This document | | |||
| +------------+------------------------------+---------------+ | +------------+------------------------------+---------------+ | |||
| DAO-ACK Base Flags | DAO-ACK Base Flags | |||
| 20.13. New Registry for the Consistency Check (CC) Flags | 20.13. New Registry for the Consistency Check (CC) Flags | |||
| IANA is requested to create a registry for the 8-bit Consistency | IANA has created a registry for the 8-bit Consistency Check (CC) | |||
| Check (CC) Flag Field. | Flags field. | |||
| New bit numbers may be allocated only by an IETF Review. Each bit | New bit numbers may be allocated only by an IETF Review. Each bit is | |||
| should be tracked with the following qualities: | tracked with the following qualities: | |||
| o Bit number (counting from bit 0 as the most significant bit) | o Bit number (counting from bit 0 as the most significant bit) | |||
| o Capability description | o Capability description | |||
| o Defining RFC | o Defining RFC | |||
| The following bit is currently defined: | The following bit is currently defined: | |||
| +------------+-----------------+---------------+ | +------------+-----------------+---------------+ | |||
| | Bit number | Description | Reference | | | Bit number | Description | Reference | | |||
| +------------+-----------------+---------------+ | +------------+-----------------+---------------+ | |||
| | 0 | CC Response (R) | This document | | | 0 | CC Response (R) | This document | | |||
| +------------+-----------------+---------------+ | +------------+-----------------+---------------+ | |||
| Consistency Check Base Flags | Consistency Check Base Flags | |||
| 20.14. New Registry for the DODAG Configuration Option Flags | 20.14. New Registry for the DODAG Configuration Option Flags | |||
| IANA is requested to create a registry for the 8-bit DODAG | IANA has created a registry for the 8-bit DODAG Configuration Option | |||
| Configuration Option Flag Field. | Flags field. | |||
| New bit numbers may be allocated only by an IETF Review. Each bit | New bit numbers may be allocated only by an IETF Review. Each bit is | |||
| should be tracked with the following qualities: | tracked with the following qualities: | |||
| o Bit number (counting from bit 0 as the most significant bit) | o Bit number (counting from bit 0 as the most significant bit) | |||
| o Capability description | o Capability description | |||
| o Defining RFC | o Defining RFC | |||
| The following bits are currently defined: | The following bits are currently defined: | |||
| +------------+----------------------------+---------------+ | +------------+----------------------------+---------------+ | |||
| | Bit number | Description | Reference | | | Bit number | Description | Reference | | |||
| +------------+----------------------------+---------------+ | +------------+----------------------------+---------------+ | |||
| | 4 | Authentication Enabled (A) | This document | | | 4 | Authentication Enabled (A) | This document | | |||
| | | | | | ||||
| | 5-7 | Path Control Size (PCS) | This document | | | 5-7 | Path Control Size (PCS) | This document | | |||
| +------------+----------------------------+---------------+ | +------------+----------------------------+---------------+ | |||
| DODAG Configuration Option Flags | DODAG Configuration Option Flags | |||
| 20.15. New Registry for the RPL Target Option Flags | 20.15. New Registry for the RPL Target Option Flags | |||
| IANA is requested to create a registry for the 8-bit RPL Target | IANA has created a registry for the 8-bit RPL Target Option Flags | |||
| Option Flag Field. | field. | |||
| New bit numbers may be allocated only by an IETF Review. Each bit | New bit numbers may be allocated only by an IETF Review. Each bit is | |||
| should be tracked with the following qualities: | tracked with the following qualities: | |||
| o Bit number (counting from bit 0 as the most significant bit) | o Bit number (counting from bit 0 as the most significant bit) | |||
| o Capability description | o Capability description | |||
| o Defining RFC | o Defining RFC | |||
| No bit is currently defined for the RPL Target Option Flags. | No bit is currently defined for the RPL Target Option Flags. | |||
| 20.16. New Registry for the Transit Information Option Flags | 20.16. New Registry for the Transit Information Option Flags | |||
| IANA is requested to create a registry for the 8-bit Transit | IANA has created a registry for the 8-bit Transit Information Option | |||
| Information Option (RIO) Flag Field. | (TIO) Flags field. | |||
| New bit numbers may be allocated only by an IETF Review. Each bit | New bit numbers may be allocated only by an IETF Review. Each bit is | |||
| should be tracked with the following qualities: | tracked with the following qualities: | |||
| o Bit number (counting from bit 0 as the most significant bit) | o Bit number (counting from bit 0 as the most significant bit) | |||
| o Capability description | o Capability description | |||
| o Defining RFC | o Defining RFC | |||
| The following bits are currently defined: | The following bits are currently defined: | |||
| +------------+--------------+---------------+ | +------------+--------------+---------------+ | |||
| | Bit number | Description | Reference | | | Bit number | Description | Reference | | |||
| +------------+--------------+---------------+ | +------------+--------------+---------------+ | |||
| | 0 | External (E) | This document | | | 0 | External (E) | This document | | |||
| +------------+--------------+---------------+ | +------------+--------------+---------------+ | |||
| Transit Information Option Flags | Transit Information Option Flags | |||
| 20.17. New Registry for the Solicited Information Option Flags | 20.17. New Registry for the Solicited Information Option Flags | |||
| IANA is requested to create a registry for the 8-bit Solicited | IANA has created a registry for the 8-bit Solicited Information | |||
| Information Option (RIO) Flag Field. | Option (SIO) Flags field. | |||
| New bit numbers may be allocated only by an IETF Review. Each bit | New bit numbers may be allocated only by an IETF Review. Each bit is | |||
| should be tracked with the following qualities: | tracked with the following qualities: | |||
| o Bit number (counting from bit 0 as the most significant bit) | o Bit number (counting from bit 0 as the most significant bit) | |||
| o Capability description | o Capability description | |||
| o Defining RFC | o Defining RFC | |||
| The following bits are currently defined: | The following bits are currently defined: | |||
| +------------+--------------------------------+---------------+ | +------------+--------------------------------+---------------+ | |||
| | Bit number | Description | Reference | | | Bit number | Description | Reference | | |||
| +------------+--------------------------------+---------------+ | +------------+--------------------------------+---------------+ | |||
| | 0 | Version Predicate match (V) | This document | | | 0 | Version Predicate match (V) | This document | | |||
| | | | | | | | | | | |||
| | 1 | InstanceID Predicate match (I) | This document | | | 1 | InstanceID Predicate match (I) | This document | | |||
| | | | | | | | | | | |||
| | 2 | DODAGID Predicate match (D) | This document | | | 2 | DODAGID Predicate match (D) | This document | | |||
| skipping to change at page 142, line 25 ¶ | skipping to change at page 138, line 26 ¶ | |||
| Solicited Information Option Flags | Solicited Information Option Flags | |||
| 20.18. ICMPv6: Error in Source Routing Header | 20.18. ICMPv6: Error in Source Routing Header | |||
| In some cases RPL will return an ICMPv6 error message when a message | In some cases RPL will return an ICMPv6 error message when a message | |||
| cannot be delivered as specified by its source routing header. This | cannot be delivered as specified by its source routing header. This | |||
| ICMPv6 error message is "Error in Source Routing Header". | ICMPv6 error message is "Error in Source Routing Header". | |||
| IANA has defined an ICMPv6 "Code" Fields Registry for ICMPv6 Message | IANA has defined an ICMPv6 "Code" Fields Registry for ICMPv6 Message | |||
| Types. ICMPv6 Message Type 1 describes "Destination Unreachable" | Types. ICMPv6 Message Type 1 describes "Destination Unreachable" | |||
| codes. The "Error in Source Routing Header" code is suggested to be | codes. The "Error in Source Routing Header" code is has been | |||
| allocated from the ICMPv6 Code Fields Registry for ICMPv6 Message | allocated from the ICMPv6 Code Fields Registry for ICMPv6 Message | |||
| Type 1, with a suggested code value of 7, to be confirmed by IANA. | Type 1, with a code value of 7. | |||
| 20.19. Link-Local Scope multicast address | 20.19. Link-Local Scope Multicast Address | |||
| The rules for assigning new IPv6 multicast addresses are defined in | The rules for assigning new IPv6 multicast addresses are defined in | |||
| [RFC3307]. This specification requires the allocation of a new | [RFC3307]. This specification requires the allocation of a new | |||
| permanent multicast address with a link local scope for RPL nodes | permanent multicast address with a link-local scope for RPL nodes | |||
| called all-RPL-nodes, with a suggested value of FF02::1A, to be | called all-RPL-nodes, with a value of ff02::1a. | |||
| confirmed by IANA. | ||||
| 21. Acknowledgements | 21. Acknowledgements | |||
| The authors would like to acknowledge the review, feedback, and | The authors would like to acknowledge the review, feedback, and | |||
| comments from Roger Alexander, Emmanuel Baccelli, Dominique Barthel, | comments from Emmanuel Baccelli, Dominique Barthel, Yusuf Bashir, | |||
| Yusuf Bashir, Yoav Ben-Yehezkel, Phoebus Chen, Quynh Dang, Mischa | Yoav Ben-Yehezkel, Phoebus Chen, Quynh Dang, Mischa Dohler, Mathilde | |||
| Dohler, Mathilde Durvy, Joakim Eriksson, Omprakash Gnawali, Manhar | Durvy, Joakim Eriksson, Omprakash Gnawali, Manhar Goindi, Mukul | |||
| Goindi, Mukul Goyal, Ulrich Herberg, Anders Jagd, JeongGil (John) Ko, | Goyal, Ulrich Herberg, Anders Jagd, JeongGil (John) Ko, Ajay Kumar, | |||
| Ajay Kumar, Quentin Lampin, Jerry Martocci, Matteo Paris, Alexandru | Quentin Lampin, Jerry Martocci, Matteo Paris, Alexandru Petrescu, | |||
| Petrescu, Joseph Reddy, Michael Richardson, Don Sturek, Joydeep | Joseph Reddy, Michael Richardson, Don Sturek, Joydeep Tripathi, and | |||
| Tripathi, and Nicolas Tsiftes. | Nicolas Tsiftes. | |||
| 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, and the Area | by the ROLL Chairs, David Culler and JP. Vasseur, and the Area | |||
| Director Adrian Farrel. | Director, Adrian Farrel. | |||
| 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, | |||
| Jim Bound, Yanick Pouffary, Henning Rogge and Arsalan Tavakoli, whom | Jim Bound, Yanick Pouffary, Henning Rogge, and Arsalan Tavakoli, who | |||
| have provided useful design considerations to RPL. | have provided useful design considerations to RPL. | |||
| RPL Security Design, found in Section 10, Section 19, and elsewhere | RPL Security Design, found in Section 10, Section 19, and elsewhere | |||
| throughout the document, is primarily the contribution of the | throughout the document, is primarily the contribution of the | |||
| Security Design Team: Tzeta Tsao, Roger Alexander, Dave Ward, Philip | Security Design Team: Tzeta Tsao, Roger Alexander, Dave Ward, Philip | |||
| Levis, Kris Pister, Rene Struik, and Adrian Farrel. | Levis, Kris Pister, Rene Struik, and Adrian Farrel. | |||
| Thanks also to Jari Arkko and Ralph Droms for their attentive | Thanks also to Jari Arkko and Ralph Droms for their attentive | |||
| reviews, especially with respect to interoperability considerations | reviews, especially with respect to interoperability considerations | |||
| and integration with other IETF specifications. | and integration with other IETF specifications. | |||
| 22. Contributors | 22. Contributors | |||
| Stephen Dawson-Haggerty | Stephen Dawson-Haggerty | |||
| UC Berkeley | UC Berkeley | |||
| Soda Hall, UC Berkeley | Soda Hall | |||
| Berkeley, CA 94720 | Berkeley, CA 94720 | |||
| USA | USA | |||
| Email: stevedh@cs.berkeley.edu | EMail: stevedh@cs.berkeley.edu | |||
| 23. References | 23. References | |||
| 23.1. Normative References | 23.1. Normative References | |||
| [I-D.ietf-6man-rpl-option] | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Hui, J. and J. Vasseur, "RPL Option for Carrying RPL | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
| Information in Data-Plane Datagrams", | ||||
| draft-ietf-6man-rpl-option-02 (work in progress), | ||||
| February 2011. | ||||
| [I-D.ietf-6man-rpl-routing-header] | [RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version | |||
| Hui, J., Vasseur, J., Culler, D., and V. Manral, "An IPv6 | 6 (IPv6) Specification", RFC 2460, December 1998. | |||
| Routing Header for Source Routes with RPL", | ||||
| draft-ietf-6man-rpl-routing-header-02 (work in progress), | ||||
| March 2011. | ||||
| [I-D.ietf-roll-of0] | [RFC3447] Jonsson, J. and B. Kaliski, "Public-Key Cryptography | |||
| Thubert, P., "RPL Objective Function 0", | Standards (PKCS) #1: RSA Cryptography Specifications | |||
| draft-ietf-roll-of0-07 (work in progress), March 2011. | Version 2.1", RFC 3447, February 2003. | |||
| [I-D.ietf-roll-routing-metrics] | [RFC4191] Draves, R. and D. Thaler, "Default Router Preferences | |||
| Vasseur, J., Kim, M., Pister, K., Dejean, N., and D. | and More-Specific Routes", RFC 4191, November 2005. | |||
| Barthel, "Routing Metrics used for Path Calculation in Low | ||||
| Power and Lossy Networks", | ||||
| draft-ietf-roll-routing-metrics-19 (work in progress), | ||||
| March 2011. | ||||
| [I-D.ietf-roll-trickle] | [RFC4302] Kent, S., "IP Authentication Header", RFC 4302, | |||
| Levis, P., Clausen, T., Hui, J., Gnawali, O., and J. Ko, | December 2005. | |||
| "The Trickle Algorithm", draft-ietf-roll-trickle-08 (work | ||||
| in progress), January 2011. | ||||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC4443] Conta, A., Deering, S., and M. Gupta, "Internet Control | |||
| Requirement Levels", BCP 14, RFC 2119, March 1997. | Message Protocol (ICMPv6) for the Internet Protocol | |||
| Version 6 (IPv6) Specification", RFC 4443, March 2006. | ||||
| [RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6 | [RFC4861] Narten, T., Nordmark, E., Simpson, W., and H. Soliman, | |||
| (IPv6) Specification", RFC 2460, December 1998. | "Neighbor Discovery for IP version 6 (IPv6)", RFC 4861, | |||
| September 2007. | ||||
| [RFC3447] Jonsson, J. and B. Kaliski, "Public-Key Cryptography | [RFC4862] Thomson, S., Narten, T., and T. Jinmei, "IPv6 Stateless | |||
| Standards (PKCS) #1: RSA Cryptography Specifications | Address Autoconfiguration", RFC 4862, September 2007. | |||
| Version 2.1", RFC 3447, February 2003. | ||||
| [RFC3775] Johnson, D., Perkins, C., and J. Arkko, "Mobility Support | [RFC6206] Levis, P., Clausen, T., Hui, J., Gnawali, O., and J. | |||
| in IPv6", RFC 3775, June 2004. | Ko, "The Trickle Algorithm", RFC 6206, March 2011. | |||
| [RFC4191] Draves, R. and D. Thaler, "Default Router Preferences and | [RFC6275] Perkins, C., Johnson, D., and J. Arkko, "Mobility | |||
| More-Specific Routes", RFC 4191, November 2005. | Support in IPv6", RFC 6275, July 2011. | |||
| [RFC4302] Kent, S., "IP Authentication Header", RFC 4302, | [RFC6551] Vasseur, JP., Ed., Kim, M., Ed., Pister, K., Dejean, | |||
| December 2005. | N., and D. Barthel, "Routing Metrics Used for Path | |||
| Calculation in Low-Power and Lossy Networks", RFC 6551, | ||||
| March 2012. | ||||
| [RFC4443] Conta, A., Deering, S., and M. Gupta, "Internet Control | [RFC6552] Thubert, P., Ed., "Objective Function Zero for the | |||
| Message Protocol (ICMPv6) for the Internet Protocol | Routing Protocol for Low-Power and Lossy Networks | |||
| Version 6 (IPv6) Specification", RFC 4443, March 2006. | (RPL)", RFC 6552, March 2012. | |||
| [RFC4861] Narten, T., Nordmark, E., Simpson, W., and H. Soliman, | [RFC6553] Hui, J. and JP. Vasseur, "The Routing Protocol for Low- | |||
| "Neighbor Discovery for IP version 6 (IPv6)", RFC 4861, | Power and Lossy Networks (RPL) Option for Carrying RPL | |||
| September 2007. | Information in Data-Plane Datagrams", RFC 6553, | |||
| March 2012. | ||||
| [RFC4862] Thomson, S., Narten, T., and T. Jinmei, "IPv6 Stateless | [RFC6554] Hui, J., Vasseur, JP., Culler, D., and V. Manral, "An | |||
| Address Autoconfiguration", RFC 4862, September 2007. | IPv6 Routing Header for Source Routes with the Routing | |||
| Protocol for Low-Power and Lossy Networks (RPL)", | ||||
| RFC 6554, March 2012. | ||||
| 23.2. Informative References | 23.2. Informative References | |||
| [FIPS180] National Institute of Standards and Technology, "FIPS Pub | [6LOWPAN-ND] Shelby, Z., Ed., Chakrabarti, S., and E. Nordmark, | |||
| 180-3, Secure Hash Standard (SHS)", US Department of | "Neighbor Discovery Optimization for Low Power and | |||
| Commerce , February 2008, | Lossy Networks (6LoWPAN)", Work in Progress, | |||
| <http://www.nist.gov/itl/upload/fips180-3_final.pdf>. | October 2011. | |||
| [I-D.ietf-6lowpan-nd] | [FIPS180] National Institute of Standards and Technology, "FIPS | |||
| Shelby, Z., Chakrabarti, S., and E. Nordmark, "Neighbor | Pub 180-3, Secure Hash Standard (SHS)", US Department | |||
| Discovery Optimization for Low-power and Lossy Networks", | of Commerce , February 2008, | |||
| draft-ietf-6lowpan-nd-15 (work in progress), | <http://www.nist.gov/itl/upload/fips180-3_final.pdf>. | |||
| December 2010. | ||||
| [I-D.ietf-manet-nhdp] | [Perlman83] Perlman, R., "Fault-Tolerant Broadcast of Routing | |||
| Clausen, T., Dearlove, C., and J. Dean, "Mobile Ad Hoc | Information", North-Holland Computer Networks, | |||
| Network (MANET) Neighborhood Discovery Protocol (NHDP)", | Vol.7: p. 395-405, December 1983. | |||
| draft-ietf-manet-nhdp-15 (work in progress), | ||||
| December 2010. | ||||
| [I-D.ietf-roll-terminology] | [RFC1958] Carpenter, B., "Architectural Principles of the | |||
| Vasseur, J., "Terminology in Low power And Lossy | Internet", RFC 1958, June 1996. | |||
| Networks", draft-ietf-roll-terminology-04 (work in | ||||
| progress), September 2010. | ||||
| [Perlman83] | [RFC1982] Elz, R. and R. Bush, "Serial Number Arithmetic", | |||
| Perlman, R., "Fault-Tolerant Broadcast of Routing | RFC 1982, August 1996. | |||
| Information", North-Holland Computer Networks 7: 395-405, | ||||
| 1983, <http://www.cs.illinois.edu/~pbg/courses/cs598fa09/ | ||||
| readings/p83.pdf>. | ||||
| [RFC1958] Carpenter, B., "Architectural Principles of the Internet", | [RFC2578] McCloghrie, K., Ed., Perkins, D., Ed., and J. | |||
| RFC 1958, June 1996. | Schoenwaelder, Ed., "Structure of Management | |||
| Information Version 2 (SMIv2)", STD 58, RFC 2578, | ||||
| April 1999. | ||||
| [RFC1982] Elz, R. and R. Bush, "Serial Number Arithmetic", RFC 1982, | [RFC3307] Haberman, B., "Allocation Guidelines for IPv6 Multicast | |||
| August 1996. | Addresses", RFC 3307, August 2002. | |||
| [RFC2578] McCloghrie, K., Ed., Perkins, D., Ed., and J. | [RFC3410] Case, J., Mundy, R., Partain, D., and B. Stewart, | |||
| Schoenwaelder, Ed., "Structure of Management Information | "Introduction and Applicability Statements for | |||
| Version 2 (SMIv2)", STD 58, RFC 2578, April 1999. | Internet-Standard Management Framework", RFC 3410, | |||
| December 2002. | ||||
| [RFC3307] Haberman, B., "Allocation Guidelines for IPv6 Multicast | [RFC3535] Schoenwaelder, J., "Overview of the 2002 IAB Network | |||
| Addresses", RFC 3307, August 2002. | Management Workshop", RFC 3535, May 2003. | |||
| [RFC3410] Case, J., Mundy, R., Partain, D., and B. Stewart, | [RFC3610] Whiting, D., Housley, R., and N. Ferguson, "Counter | |||
| "Introduction and Applicability Statements for Internet- | with CBC-MAC (CCM)", RFC 3610, September 2003. | |||
| Standard Management Framework", RFC 3410, December 2002. | ||||
| [RFC3535] Schoenwaelder, J., "Overview of the 2002 IAB Network | [RFC3819] Karn, P., Bormann, C., Fairhurst, G., Grossman, D., | |||
| Management Workshop", RFC 3535, May 2003. | Ludwig, R., Mahdavi, J., Montenegro, G., Touch, J., and | |||
| L. Wood, "Advice for Internet Subnetwork Designers", | ||||
| BCP 89, RFC 3819, July 2004. | ||||
| [RFC3610] Whiting, D., Housley, R., and N. Ferguson, "Counter with | [RFC4101] Rescorla, E. and IAB, "Writing Protocol Models", | |||
| CBC-MAC (CCM)", RFC 3610, September 2003. | RFC 4101, June 2005. | |||
| [RFC3819] Karn, P., Bormann, C., Fairhurst, G., Grossman, D., | [RFC4915] Psenak, P., Mirtorabi, S., Roy, A., Nguyen, L., and P. | |||
| Ludwig, R., Mahdavi, J., Montenegro, G., Touch, J., and L. | Pillay-Esnault, "Multi-Topology (MT) Routing in OSPF", | |||
| Wood, "Advice for Internet Subnetwork Designers", BCP 89, | RFC 4915, June 2007. | |||
| RFC 3819, July 2004. | ||||
| [RFC4101] Rescorla, E. and IAB, "Writing Protocol Models", RFC 4101, | [RFC5120] Przygienda, T., Shen, N., and N. Sheth, "M-ISIS: Multi | |||
| June 2005. | Topology (MT) Routing in Intermediate System to | |||
| Intermediate Systems (IS-ISs)", RFC 5120, | ||||
| February 2008. | ||||
| [RFC4915] Psenak, P., Mirtorabi, S., Roy, A., Nguyen, L., and P. | [RFC5184] Teraoka, F., Gogo, K., Mitsuya, K., Shibui, R., and K. | |||
| Pillay-Esnault, "Multi-Topology (MT) Routing in OSPF", | Mitani, "Unified Layer 2 (L2) Abstractions for Layer 3 | |||
| RFC 4915, June 2007. | (L3)-Driven Fast Handover", RFC 5184, May 2008. | |||
| [RFC5120] Przygienda, T., Shen, N., and N. Sheth, "M-ISIS: Multi | [RFC5548] Dohler, M., Watteyne, T., Winter, T., and D. Barthel, | |||
| Topology (MT) Routing in Intermediate System to | "Routing Requirements for Urban Low-Power and Lossy | |||
| Intermediate Systems (IS-ISs)", RFC 5120, February 2008. | Networks", RFC 5548, May 2009. | |||
| [RFC5184] Teraoka, F., Gogo, K., Mitsuya, K., Shibui, R., and K. | [RFC5673] Pister, K., Thubert, P., Dwars, S., and T. Phinney, | |||
| Mitani, "Unified Layer 2 (L2) Abstractions for Layer 3 | "Industrial Routing Requirements in Low-Power and Lossy | |||
| (L3)-Driven Fast Handover", RFC 5184, May 2008. | Networks", RFC 5673, October 2009. | |||
| [RFC5548] Dohler, M., Watteyne, T., Winter, T., and D. Barthel, | [RFC5706] Harrington, D., "Guidelines for Considering Operations | |||
| "Routing Requirements for Urban Low-Power and Lossy | and Management of New Protocols and Protocol | |||
| Networks", RFC 5548, May 2009. | Extensions", RFC 5706, November 2009. | |||
| [RFC5673] Pister, K., Thubert, P., Dwars, S., and T. Phinney, | [RFC5826] Brandt, A., Buron, J., and G. Porcu, "Home Automation | |||
| "Industrial Routing Requirements in Low-Power and Lossy | Routing Requirements in Low-Power and Lossy Networks", | |||
| Networks", RFC 5673, October 2009. | RFC 5826, April 2010. | |||
| [RFC5706] Harrington, D., "Guidelines for Considering Operations and | [RFC5867] Martocci, J., De Mil, P., Riou, N., and W. Vermeylen, | |||
| Management of New Protocols and Protocol Extensions", | "Building Automation Routing Requirements in Low-Power | |||
| RFC 5706, November 2009. | and Lossy Networks", RFC 5867, June 2010. | |||
| [RFC5826] Brandt, A., Buron, J., and G. Porcu, "Home Automation | [RFC5881] Katz, D. and D. Ward, "Bidirectional Forwarding | |||
| Routing Requirements in Low-Power and Lossy Networks", | Detection (BFD) for IPv4 and IPv6 (Single Hop)", | |||
| RFC 5826, April 2010. | RFC 5881, June 2010. | |||
| [RFC5867] Martocci, J., De Mil, P., Riou, N., and W. Vermeylen, | [RFC6130] Clausen, T., Dearlove, C., and J. Dean, "Mobile Ad Hoc | |||
| "Building Automation Routing Requirements in Low-Power and | Network (MANET) Neighborhood Discovery Protocol | |||
| Lossy Networks", RFC 5867, June 2010. | (NHDP)", RFC 6130, April 2011. | |||
| [RFC5881] Katz, D. and D. Ward, "Bidirectional Forwarding Detection | [ROLL-TERMS] Vasseur, J., "Terminology in Low power And Lossy | |||
| (BFD) for IPv4 and IPv6 (Single Hop)", RFC 5881, | Networks", Work in Progress, September 2011. | |||
| June 2010. | ||||
| Appendix A. Example Operation | Appendix A. Example Operation | |||
| This appendix provides some examples to illustrate the dissemination | This appendix provides some examples to illustrate the dissemination | |||
| of addressing information and prefixes with RPL. The examples depict | of addressing information and prefixes with RPL. The examples depict | |||
| information being distributed with PIO and RIO options, and the use | information being distributed with PIOs and RIOs and the use of DIO | |||
| of DIO and DAO messages. Note that this appendix is not normative, | and DAO messages. Note that this appendix is not normative, and that | |||
| and that the specific details of a RPL addressing plan and | the specific details of a RPL addressing plan and autoconfiguration | |||
| autoconfiguration may vary according to specific implementations. | may vary according to specific implementations. RPL merely provides | |||
| RPL merely provides a vehicle for disseminating information that may | a vehicle for disseminating information that may be built upon and | |||
| be built upon and used by other mechanisms. | used by other mechanisms. | |||
| Note that these examples illustrate use of address autoconfiguration | Note that these examples illustrate use of address autoconfiguration | |||
| schemes supported by information distributed within RPL. However, if | schemes supported by information distributed within RPL. However, if | |||
| an implementation includes another address autoconfiguration scheme, | an implementation includes another address autoconfiguration scheme, | |||
| RPL nodes might be configured not to set the 'A' flag in PIO options, | RPL nodes might be configured not to set the 'A' flag in PIO options, | |||
| though the PIO can still be used to distribute prefix and addressing | though the PIO can still be used to distribute prefix and addressing | |||
| information. | information. | |||
| A.1. Example Operation in Storing Mode With Node-owned Prefixes | A.1. Example Operation in Storing Mode with Node-Owned Prefixes | |||
| Figure 32 illustrates the logical addressing architecture of a simple | Figure 32 illustrates the logical addressing architecture of a simple | |||
| RPL network operating in storing mode. In this example each node, A, | RPL network operating in Storing mode. In this example, each Node, | |||
| B, C, and D, owns its own prefix, and makes that prefix available for | A, B, C, and D, owns its own prefix and makes that prefix available | |||
| address autoconfiguration by on-link devices. (This is conveyed by | for address autoconfiguration by on-link devices. (This is conveyed | |||
| setting the 'A' flag and the 'L' flag in the PIO of the DIO | by setting the 'A' flag and the 'L' flag in the PIO of the DIO | |||
| messages). Node A owns the prefix A::/64, node B owns B::/64, and so | messages). Node A owns the prefix A::/64, Node B owns B::/64, and so | |||
| on. Node B autoconfigures an on-link address with respect to node A, | on. Node B autoconfigures an on-link address with respect to Node A, | |||
| A::B. Nodes C and D similarly autoconfigure on-link addresses from | A::B. Nodes C and D similarly autoconfigure on-link addresses from | |||
| Node B's prefix, B::C and B::D respectively. Nodes have the option | Node B's prefix, B::C and B::D, respectively. Nodes have the option | |||
| of setting the 'R' flag and publishing their address within the | of setting the 'R' flag and publishing their address within the | |||
| Prefix field of the PIO. | Prefix field of the PIO. | |||
| +-------------+ | +-------------+ | |||
| | Root | | | Root | | |||
| | | | | | | |||
| | Node A | | | Node A | | |||
| | | | | | | |||
| | A::A | | | A::A | | |||
| +------+------+ | +------+------+ | |||
| skipping to change at page 150, line 35 ¶ | skipping to change at page 144, line 35 ¶ | |||
| / \ | / \ | |||
| / \ | / \ | |||
| +------+------+ +------+------+ | +------+------+ +------+------+ | |||
| | B::C | | B::D | | | B::C | | B::D | | |||
| | | | | | | | | | | |||
| | Node C | | Node D | | | Node C | | Node D | | |||
| | | | | | | | | | | |||
| | C::C | | D::D | | | C::C | | D::D | | |||
| +-------------+ +-------------+ | +-------------+ +-------------+ | |||
| Figure 32: Storing Mode with Node-owned Prefixes | Figure 32: Storing Mode with Node-Owned Prefixes | |||
| A.1.1. DIO messages and PIO | A.1.1. DIO Messages and PIO | |||
| Node A, for example, will send DIO messages with a PIO as follows: | Node A, for example, will send DIO messages with a PIO as follows: | |||
| 'A' flag: Set | 'A' flag: Set | |||
| 'L' flag: Set | 'L' flag: Set | |||
| 'R' flag: Clear | 'R' flag: Clear | |||
| Prefix Length: 64 | Prefix Length: 64 | |||
| Prefix: A:: | Prefix: A:: | |||
| Node B, for example, will send DIO messages with a PIO as follows: | Node B, for example, will send DIO messages with a PIO as follows: | |||
| 'A' flag: Set | 'A' flag: Set | |||
| 'L' flag: Set | 'L' flag: Set | |||
| 'R' flag: Set | 'R' flag: Set | |||
| Prefix Length: 64 | Prefix Length: 64 | |||
| Prefix: B::B | Prefix: B::B | |||
| Node C, for example, will send DIO messages with a PIO as follows: | Node C, for example, will send DIO messages with a PIO as follows: | |||
| 'A' flag: Set | 'A' flag: Set | |||
| 'L' flag: Set | 'L' flag: Set | |||
| 'R' flag: Clear | 'R' flag: Clear | |||
| Prefix Length: 64 | Prefix Length: 64 | |||
| Prefix: C:: | Prefix: C:: | |||
| Node D, for example, will send DIO messages with a PIO as follows: | Node D, for example, will send DIO messages with a PIO as follows: | |||
| 'A' flag: Set | 'A' flag: Set | |||
| 'L' flag: Set | 'L' flag: Set | |||
| 'R' flag: Set | 'R' flag: Set | |||
| Prefix Length: 64 | Prefix Length: 64 | |||
| Prefix: D::D | Prefix: D::D | |||
| A.1.2. DAO messages | A.1.2. DAO Messages | |||
| Node B will send DAO messages to node A with the following | Node B will send DAO messages to Node A with the following | |||
| information: | information: | |||
| o Target B::/64 | o Target B::/64 | |||
| o Target C::/64 | o Target C::/64 | |||
| o Target D::/64 | o Target D::/64 | |||
| Node C will send DAO messages to node B with the following | Node C will send DAO messages to Node B with the following | |||
| information: | information: | |||
| o Target C::/64 | o Target C::/64 | |||
| Node D will send DAO messages to node B with the following | Node D will send DAO messages to Node B with the following | |||
| information: | information: | |||
| o Target D::/64 | o Target D::/64 | |||
| A.1.3. Routing Information Base | A.1.3. Routing Information Base | |||
| Node A will conceptually collect the following information into its | Node A will conceptually collect the following information into its | |||
| RIB: | Routing Information Base (RIB): | |||
| o A::/64 connected | o A::/64 connected | |||
| o B::/64 via B's link local | o B::/64 via B's link local | |||
| o C::/64 via B's link local | o C::/64 via B's link local | |||
| o D::/64 via B's link local | o D::/64 via B's link local | |||
| Node B will conceptually collect the following information into its | Node B will conceptually collect the following information into its | |||
| RIB: | RIB: | |||
| o ::/0 via A's link local | o ::/0 via A's link local | |||
| o B::/64 connected | o B::/64 connected | |||
| o C::/64 via C's link local | o C::/64 via C's link local | |||
| o D::/64 via D's link local | o D::/64 via D's link local | |||
| Node C will conceptually collect the following information into its | Node C will conceptually collect the following information into its | |||
| RIB: | RIB: | |||
| o ::/0 via B's link local | o ::/0 via B's link local | |||
| o C::/64 connected | o C::/64 connected | |||
| skipping to change at page 152, line 20 ¶ | skipping to change at page 146, line 15 ¶ | |||
| Node C will conceptually collect the following information into its | Node C will conceptually collect the following information into its | |||
| RIB: | RIB: | |||
| o ::/0 via B's link local | o ::/0 via B's link local | |||
| o C::/64 connected | o C::/64 connected | |||
| Node D will conceptually collect the following information into its | Node D will conceptually collect the following information into its | |||
| RIB: | RIB: | |||
| o ::/0 via B's link local | o ::/0 via B's link local | |||
| o D::/64 connected | o D::/64 connected | |||
| A.2. Example Operation in Storing Mode With Subnet-wide Prefix | A.2. Example Operation in Storing Mode with Subnet-Wide Prefix | |||
| Figure 33 illustrates the logical addressing architecture of a simple | Figure 33 illustrates the logical addressing architecture of a simple | |||
| RPL network operating in storing mode. In this example the root node | RPL network operating in Storing mode. In this example, the root | |||
| A sources a prefix which is used for address autoconfiguration over | Node A sources a prefix that is used for address autoconfiguration | |||
| the entire RPL subnet. (This is conveyed by setting the 'A' flag and | over the entire RPL subnet. (This is conveyed by setting the 'A' | |||
| clearing the 'L' flag in the PIO of the DIO messages). Nodes A, B, | flag and clearing the 'L' flag in the PIO of the DIO messages.) | |||
| C, and D all autoconfigure to the prefix A::/64. Nodes have the | Nodes A, B, C, and D all autoconfigure to the prefix A::/64. Nodes | |||
| option of setting the 'R' flag and publishing their address within | have the option of setting the 'R' flag and publishing their address | |||
| the Prefix field of the PIO. | within the Prefix field of the PIO. | |||
| +-------------+ | +-------------+ | |||
| | Root | | | Root | | |||
| | | | | | | |||
| | Node A | | | Node A | | |||
| | A::A | | | A::A | | |||
| | | | | | | |||
| +------+------+ | +------+------+ | |||
| | | | | |||
| | | | | |||
| skipping to change at page 153, line 33 ¶ | skipping to change at page 147, line 33 ¶ | |||
| .--------------+--------------. | .--------------+--------------. | |||
| / \ | / \ | |||
| / \ | / \ | |||
| +------+------+ +------+------+ | +------+------+ +------+------+ | |||
| | | | | | | | | | | |||
| | Node C | | Node D | | | Node C | | Node D | | |||
| | A::C | | A::D | | | A::C | | A::D | | |||
| | | | | | | | | | | |||
| +-------------+ +-------------+ | +-------------+ +-------------+ | |||
| Figure 33: Storing Mode with Subnet-wide Prefix | Figure 33: Storing Mode with Subnet-Wide Prefix | |||
| A.2.1. DIO messages and PIO | A.2.1. DIO Messages and PIO | |||
| Node A, for example, will send DIO messages with a PIO as follows: | Node A, for example, will send DIO messages with a PIO as follows: | |||
| 'A' flag: Set | 'A' flag: Set | |||
| 'L' flag: Clear | 'L' flag: Clear | |||
| 'R' flag: Clear | 'R' flag: Clear | |||
| Prefix Length: 64 | Prefix Length: 64 | |||
| Prefix: A:: | Prefix: A:: | |||
| Node B, for example, will send DIO messages with a PIO as follows: | Node B, for example, will send DIO messages with a PIO as follows: | |||
| 'A' flag: Set | 'A' flag: Set | |||
| 'L' flag: Clear | 'L' flag: Clear | |||
| 'R' flag: Set | 'R' flag: Set | |||
| Prefix Length: 64 | Prefix Length: 64 | |||
| Prefix: A::B | Prefix: A::B | |||
| Node C, for example, will send DIO messages with a PIO as follows: | Node C, for example, will send DIO messages with a PIO as follows: | |||
| 'A' flag: Set | 'A' flag: Set | |||
| 'L' flag: Clear | 'L' flag: Clear | |||
| 'R' flag: Clear | 'R' flag: Clear | |||
| Prefix Length: 64 | Prefix Length: 64 | |||
| Prefix: A:: | Prefix: A:: | |||
| Node D, for example, will send DIO messages with a PIO as follows: | Node D, for example, will send DIO messages with a PIO as follows: | |||
| 'A' flag: Set | 'A' flag: Set | |||
| 'L' flag: Clear | 'L' flag: Clear | |||
| 'R' flag: Set | 'R' flag: Set | |||
| Prefix Length: 64 | Prefix Length: 64 | |||
| Prefix: A::D | Prefix: A::D | |||
| A.2.2. DAO messages | A.2.2. DAO Messages | |||
| Node B will send DAO messages to node A with the following | Node B will send DAO messages to Node A with the following | |||
| information: | information: | |||
| o Target A::B/128 | o Target A::B/128 | |||
| o Target A::C/128 | o Target A::C/128 | |||
| o Target A::D/128 | o Target A::D/128 | |||
| Node C will send DAO messages to node B with the following | Node C will send DAO messages to Node B with the following | |||
| information: | information: | |||
| o Target A::C/128 | o Target A::C/128 | |||
| Node D will send DAO messages to node B with the following | Node D will send DAO messages to Node B with the following | |||
| information: | information: | |||
| o Target A::D/128 | o Target A::D/128 | |||
| A.2.3. Routing Information Base | A.2.3. Routing Information Base | |||
| Node A will conceptually collect the following information into its | Node A will conceptually collect the following information into its | |||
| RIB: | RIB: | |||
| o A::A/128 connected | o A::A/128 connected | |||
| o A::B/128 via B's link local | o A::B/128 via B's link local | |||
| o A::C/128 via B's link local | o A::C/128 via B's link local | |||
| skipping to change at page 155, line 20 ¶ | skipping to change at page 149, line 15 ¶ | |||
| Node C will conceptually collect the following information into its | Node C will conceptually collect the following information into its | |||
| RIB: | RIB: | |||
| o ::/0 via B's link local | o ::/0 via B's link local | |||
| o A::C/128 connected | o A::C/128 connected | |||
| Node D will conceptually collect the following information into its | Node D will conceptually collect the following information into its | |||
| RIB: | RIB: | |||
| o ::/0 via B's link local | o ::/0 via B's link local | |||
| o A::D/128 connected | o A::D/128 connected | |||
| A.3. Example Operation in Non-Storing Mode With Node-owned Prefixes | A.3. Example Operation in Non-Storing Mode with Node-Owned Prefixes | |||
| Figure 34 illustrates the logical addressing architecture of a simple | Figure 34 illustrates the logical addressing architecture of a simple | |||
| RPL network operating in non-storing mode. In this example each | RPL network operating in Non-Storing mode. In this example, each | |||
| node, A, B, C, and D, owns its own prefix, and makes that prefix | Node, A, B, C, and D, owns its own prefix, and makes that prefix | |||
| available for address autoconfiguration by on-link devices. (This is | available for address autoconfiguration by on-link devices. (This is | |||
| conveyed by setting the 'A' flag and the 'L' flag in the PIO of the | conveyed by setting the 'A' flag and the 'L' flag in the PIO of the | |||
| DIO messages). Node A owns the prefix A::/64, node B owns B::/64, | DIO messages.) Node A owns the prefix A::/64, Node B owns B::/64, | |||
| and so on. Node B autoconfigures an on-link address with respect to | and so on. Node B autoconfigures an on-link address with respect to | |||
| node A, A::B. Nodes C and D similarly autoconfigure on-link addresses | Node A, A::B. Nodes C and D similarly autoconfigure on-link | |||
| from Node B's prefix, B::C and B::D respectively. Nodes have the | addresses from Node B's prefix, B::C and B::D, respectively. Nodes | |||
| option of setting the 'R' flag and publishing their address within | have the option of setting the 'R' flag and publishing their address | |||
| the Prefix field of the PIO. | within the Prefix field of the PIO. | |||
| +-------------+ | +-------------+ | |||
| | Root | | | Root | | |||
| | | | | | | |||
| | Node A | | | Node A | | |||
| | | | | | | |||
| | A::A | | | A::A | | |||
| +------+------+ | +------+------+ | |||
| | | | | |||
| | | | | |||
| skipping to change at page 156, line 35 ¶ | skipping to change at page 150, line 35 ¶ | |||
| / \ | / \ | |||
| / \ | / \ | |||
| +------+------+ +------+------+ | +------+------+ +------+------+ | |||
| | B::C | | B::D | | | B::C | | B::D | | |||
| | | | | | | | | | | |||
| | Node C | | Node D | | | Node C | | Node D | | |||
| | | | | | | | | | | |||
| | C::C | | D::D | | | C::C | | D::D | | |||
| +-------------+ +-------------+ | +-------------+ +-------------+ | |||
| Figure 34: Non-storing Mode with Node-owned Prefixes | Figure 34: Non-Storing Mode with Node-Owned Prefixes | |||
| A.3.1. DIO messages and PIO | A.3.1. DIO Messages and PIO | |||
| The PIO contained in the DIO messages in the non-storing mode with | The PIO contained in the DIO messages in the Non-Storing mode with | |||
| node-owned prefixes can be considered to be identical to those in the | node-owned prefixes can be considered to be identical to those in the | |||
| storing mode with node-owned prefixes case (Appendix A.1.1). | Storing mode with node-owned prefixes case (Appendix A.1.1). | |||
| A.3.2. DAO messages | A.3.2. DAO Messages | |||
| Node B will send DAO messages to node A with the following | Node B will send DAO messages to Node A with the following | |||
| information: | information: | |||
| o Target B::/64, Transit A::B | o Target B::/64, Transit A::B | |||
| Node C will send DAO messages to node A with the following | Node C will send DAO messages to Node A with the following | |||
| information: | information: | |||
| o Target C::/64, Transit B::C | o Target C::/64, Transit B::C | |||
| Node D will send DAO messages to node A with the following | Node D will send DAO messages to Node A with the following | |||
| information: | information: | |||
| o Target D::/64, Transit B::D | o Target D::/64, Transit B::D | |||
| A.3.3. Routing Information Base | A.3.3. Routing Information Base | |||
| Node A will conceptually collect the following information into its | Node A will conceptually collect the following information into its | |||
| RIB. Note that Node A has enough information to construct source | RIB. Note that Node A has enough information to construct source | |||
| routes by doing recursive lookups into the RIB: | routes by doing recursive lookups into the RIB: | |||
| o A::/64 connected | o A::/64 connected | |||
| o B::/64 via A::B | o B::/64 via A::B | |||
| skipping to change at page 157, line 40 ¶ | skipping to change at page 151, line 34 ¶ | |||
| Node C will conceptually collect the following information into its | Node C will conceptually collect the following information into its | |||
| RIB: | RIB: | |||
| o ::/0 via B's link local | o ::/0 via B's link local | |||
| o C::/64 connected | o C::/64 connected | |||
| Node D will conceptually collect the following information into its | Node D will conceptually collect the following information into its | |||
| RIB: | RIB: | |||
| o ::/0 via B's link local | o ::/0 via B's link local | |||
| o D::/64 connected | o D::/64 connected | |||
| A.4. Example Operation in Non-Storing Mode With Subnet-wide Prefix | A.4. Example Operation in Non-Storing Mode with Subnet-Wide Prefix | |||
| Figure 35 illustrates the logical addressing architecture of a simple | Figure 35 illustrates the logical addressing architecture of a simple | |||
| RPL network operating in non-storing mode. In this example the root | RPL network operating in Non-Storing mode. In this example, the root | |||
| node A sources a prefix which is used for address autoconfiguration | Node A sources a prefix that is used for address autoconfiguration | |||
| over the entire RPL subnet. (This is conveyed by setting the 'A' | over the entire RPL subnet. (This is conveyed by setting the 'A' | |||
| flag and clearing the 'L' flag in the PIO of the DIO messages). | flag and clearing the 'L' flag in the PIO of the DIO messages.) | |||
| Nodes A, B, C, and D all autoconfigure to the prefix A::/64. Nodes | Nodes A, B, C, and D all autoconfigure to the prefix A::/64. Nodes | |||
| must set the 'R' flag and publishing their address within the Prefix | must set the 'R' flag and publish their address within the Prefix | |||
| field of the PIO, in order to inform their children which address to | field of the PIO, in order to inform their children which address to | |||
| use in the transit option. | use in the transit option. | |||
| +-------------+ | +-------------+ | |||
| | Root | | | Root | | |||
| | | | | | | |||
| | Node A | | | Node A | | |||
| | A::A | | | A::A | | |||
| | | | | | | |||
| +------+------+ | +------+------+ | |||
| skipping to change at page 158, line 33 ¶ | skipping to change at page 152, line 33 ¶ | |||
| .--------------+--------------. | .--------------+--------------. | |||
| / \ | / \ | |||
| / \ | / \ | |||
| +------+------+ +------+------+ | +------+------+ +------+------+ | |||
| | | | | | | | | | | |||
| | Node C | | Node D | | | Node C | | Node D | | |||
| | A::C | | A::D | | | A::C | | A::D | | |||
| | | | | | | | | | | |||
| +-------------+ +-------------+ | +-------------+ +-------------+ | |||
| Figure 35: Non-Storing Mode With Subnet-wide Prefix | Figure 35: Non-Storing Mode with Subnet-Wide Prefix | |||
| A.4.1. DIO messages and PIO | A.4.1. DIO Messages and PIO | |||
| Node A, for example, will send DIO messages with a PIO as follows: | Node A, for example, will send DIO messages with a PIO as follows: | |||
| 'A' flag: Set | 'A' flag: Set | |||
| 'L' flag: Clear | 'L' flag: Clear | |||
| 'R' flag: Set | 'R' flag: Set | |||
| Prefix Length: 64 | Prefix Length: 64 | |||
| Prefix: A::A | Prefix: A::A | |||
| Node B, for example, will send DIO messages with a PIO as follows: | Node B, for example, will send DIO messages with a PIO as follows: | |||
| 'A' flag: Set | 'A' flag: Set | |||
| 'L' flag: Clear | 'L' flag: Clear | |||
| 'R' flag: Set | 'R' flag: Set | |||
| Prefix Length: 64 | Prefix Length: 64 | |||
| Prefix: A::B | Prefix: A::B | |||
| Node C, for example, will send DIO messages with a PIO as follows: | Node C, for example, will send DIO messages with a PIO as follows: | |||
| 'A' flag: Set | 'A' flag: Set | |||
| 'L' flag: Clear | 'L' flag: Clear | |||
| 'R' flag: Set | 'R' flag: Set | |||
| Prefix Length: 64 | Prefix Length: 64 | |||
| Prefix: A::C | Prefix: A::C | |||
| Node D, for example, will send DIO messages with a PIO as follows: | Node D, for example, will send DIO messages with a PIO as follows: | |||
| 'A' flag: Set | 'A' flag: Set | |||
| 'L' flag: Clear | 'L' flag: Clear | |||
| 'R' flag: Set | 'R' flag: Set | |||
| Prefix Length: 64 | Prefix Length: 64 | |||
| Prefix: A::D | Prefix: A::D | |||
| A.4.2. DAO messages | A.4.2. DAO Messages | |||
| Node B will send DAO messages to node A with the following | Node B will send DAO messages to Node A with the following | |||
| information: | information: | |||
| o Target A::B/128, Transit A::A | o Target A::B/128, Transit A::A | |||
| Node C will send DAO messages to node A with the following | Node C will send DAO messages to Node A with the following | |||
| information: | information: | |||
| o Target A::C/128, Transit A::B | o Target A::C/128, Transit A::B | |||
| Node D will send DAO messages to node A with the following | Node D will send DAO messages to Node A with the following | |||
| information: | information: | |||
| o Target A::D/128, Transit A::B | o Target A::D/128, Transit A::B | |||
| A.4.3. Routing Information Base | A.4.3. Routing Information Base | |||
| Node A will conceptually collect the following information into its | Node A will conceptually collect the following information into its | |||
| RIB. Note that Node A has enough information to construct source | RIB. Note that Node A has enough information to construct source | |||
| routes by doing recursive lookups into the RIB: | routes by doing recursive lookups into the RIB: | |||
| o A::A/128 connected | o A::A/128 connected | |||
| o A::B/128 via A::A | o A::B/128 via A::A | |||
| skipping to change at page 160, line 21 ¶ | skipping to change at page 154, line 13 ¶ | |||
| o A::C/128 connected | o A::C/128 connected | |||
| Node D will conceptually collect the following information into its | Node D will conceptually collect the following information into its | |||
| RIB: | RIB: | |||
| o ::/0 via B's link local | o ::/0 via B's link local | |||
| o A::D/128 connected | o A::D/128 connected | |||
| A.5. Example with External Prefixes | A.5. Example with External Prefixes | |||
| Consider the simple network illustrated in Figure 36. In this | Consider the simple network illustrated in Figure 36. In this | |||
| example there are a group of routers participating in a RPL network: | example, there are a group of routers participating in a RPL network: | |||
| a DODAG Root, nodes A, Y, and Z. The DODAG Root and node Z also have | a DODAG root, Nodes A, Y, and Z. The DODAG root and Node Z also have | |||
| connectivity to different external network domains (i.e. external to | connectivity to different external network domains (i.e., external to | |||
| the RPL network). Note that those external networks could be RPL | the RPL network). Note that those external networks could be RPL | |||
| networks or another type of network altogether. | networks or another type of network altogether. | |||
| RPL Network +-------------------+ | RPL Network +-------------------+ | |||
| RPL::/64 | | | RPL::/64 | | | |||
| | External | | | External | | |||
| [RPL::Root] (Root)----------+ Prefix | | [RPL::Root] (Root)----------+ Prefix | | |||
| | | EXT_1::/64 | | | | EXT_1::/64 | | |||
| | | | | | | | | |||
| | +-------------------+ | | +-------------------+ | |||
| skipping to change at page 160, line 49 ¶ | skipping to change at page 154, line 41 ¶ | |||
| | +-------------------+ | | +-------------------+ | |||
| | | | | | | | | |||
| | | External | | | | External | | |||
| [RPL::Z] (Z)------------+ Prefix | | [RPL::Z] (Z)------------+ Prefix | | |||
| : | EXT_2::/64 | | : | EXT_2::/64 | | |||
| : | | | : | | | |||
| : +-------------------+ | : +-------------------+ | |||
| Figure 36: Simple Network Example | Figure 36: Simple Network Example | |||
| In this example the DODAG Root makes a prefix available to the RPL | In this example, the DODAG root makes a prefix available to the RPL | |||
| subnet for address autoconfiguration. Here the entire RPL subnet | subnet for address autoconfiguration. Here, the entire RPL subnet | |||
| uses that same prefix, RPL::/64, for address autoconfiguration, | uses that same prefix, RPL::/64, for address autoconfiguration, | |||
| though in other implementations more complex/hybrid schemes could be | though in other implementations more complex/hybrid schemes could be | |||
| employed. | employed. | |||
| The DODAG Root has connectivity to an external (with respect to that | The DODAG root has connectivity to an external (with respect to that | |||
| RPL network) prefix EXT_1::/64. The DODAG Root may have learned of | RPL network) prefix EXT_1::/64. The DODAG root may have learned of | |||
| connectivity to this prefix, for example, via explicit configuration | connectivity to this prefix, for example, via explicit configuration | |||
| or IPv6 ND on a non-RPL interface. The DODAG Root is configured to | or IPv6 ND on a non-RPL interface. The DODAG root is configured to | |||
| announce information on the connectivity to this prefix. | announce information on the connectivity to this prefix. | |||
| Similarly, Node Z has connectivity to an external prefix EXT_2::/64. | Similarly, Node Z has connectivity to an external prefix EXT_2::/64. | |||
| Node Z also has a sub-DODAG underneath of it. | Node Z also has a sub-DODAG underneath of it. | |||
| 1. The DODAG Root adds a RIO to its DIO messages. The RIO contains | 1. The DODAG root adds a RIO to its DIO messages. The RIO contains | |||
| the external prefix EXT_1::/64. This information may be repeated | the external prefix EXT_1::/64. This information may be repeated | |||
| in the DIO messages emitted by the other nodes within the DODAG. | in the DIO messages emitted by the other nodes within the DODAG. | |||
| Thus the reachability to the prefix EXT_1::/64 is disseminated | Thus, the reachability to the prefix EXT_1::/64 is disseminated | |||
| down the DODAG. | down the DODAG. | |||
| 2. Node Z may advertise reachability to the target network | 2. Node Z may advertise reachability to the Target network | |||
| EXT_2::/64 by sending DAO messages using EXT_2::/64 as a target | EXT_2::/64 by sending DAO messages using EXT_2::/64 as a Target | |||
| in the Target option and itself (Node Z) as a parent in the | in the Target option and itself (Node Z) as a parent in the | |||
| Transit Information option. (In storing mode that Transit | Transit Information option. (In Storing mode, that Transit | |||
| Information option does not need to contain the address of Node | Information option does not need to contain the address of Node | |||
| Z). A non-storing root then becomes aware of the 1-hop link | Z). A non-storing root then becomes aware of the 1-hop link | |||
| (Node Z -- EXT_2::/64) for use in constructing source routes. | (Node Z -- EXT_2::/64) for use in constructing source routes. | |||
| Node Z may additionally advertise its reachability to EXT_2::/64 | Node Z may additionally advertise its reachability to EXT_2::/64 | |||
| to nodes in its sub-DODAG by sending DIO messages with a PIO, | to nodes in its sub-DODAG by sending DIO messages with a PIO, | |||
| with the 'A' flag cleared. | with the 'A' flag cleared. | |||
| Authors' Addresses | Authors' Addresses | |||
| Tim Winter (editor) | Tim Winter (editor) | |||
| Email: wintert@acm.org | EMail: wintert@acm.org | |||
| Pascal Thubert (editor) | Pascal Thubert (editor) | |||
| Cisco Systems, Inc | 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 | |||
| Anders Brandt | Anders Brandt | |||
| Sigma Designs | Sigma Designs | |||
| Emdrupvej 26A, 1. | Emdrupvej 26A, 1. | |||
| Copenhagen DK-2100 | Copenhagen DK-2100 | |||
| Denmark | Denmark | |||
| Email: abr@sdesigns.dk | EMail: abr@sdesigns.dk | |||
| Thomas Heide Clausen | ||||
| LIX, Ecole Polytechnique, France | ||||
| Phone: +33 6 6058 9349 | ||||
| Email: T.Clausen@computer.org | ||||
| URI: http://www.ThomasClausen.org/ | ||||
| Jonathan W. Hui | Jonathan W. Hui | |||
| Arch Rock Corporation | Arch Rock Corporation | |||
| 501 2nd St. Ste. 410 | 501 2nd St., Suite 410 | |||
| San Francisco, CA 94107 | San Francisco, CA 94107 | |||
| USA | USA | |||
| Email: jhui@archrock.com | EMail: jhui@archrock.com | |||
| Richard Kelsey | Richard Kelsey | |||
| Ember Corporation | Ember Corporation | |||
| Boston, MA | Boston, MA | |||
| USA | USA | |||
| Phone: +1 617 951 1225 | Phone: +1 617 951 1225 | |||
| Email: kelsey@ember.com | EMail: kelsey@ember.com | |||
| Philip Levis | Philip Levis | |||
| Stanford University | Stanford University | |||
| 358 Gates Hall, Stanford University | 358 Gates Hall, Stanford University | |||
| Stanford, CA 94305-9030 | Stanford, CA 94305-9030 | |||
| USA | USA | |||
| Email: pal@cs.stanford.edu | EMail: pal@cs.stanford.edu | |||
| Kris Pister | Kris Pister | |||
| Dust Networks | Dust Networks | |||
| 30695 Huntwood Ave. | 30695 Huntwood Ave. | |||
| Hayward, CA 94544 | Hayward, CA 94544 | |||
| USA | USA | |||
| Email: kpister@dustnetworks.com | EMail: kpister@dustnetworks.com | |||
| Rene Struik | Rene Struik | |||
| Struik Security Consultancy | ||||
| Email: rstruik.ext@gmail.com | EMail: rstruik.ext@gmail.com | |||
| JP Vasseur | JP. Vasseur | |||
| Cisco Systems, Inc | Cisco Systems | |||
| 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 | |||
| Roger K. Alexander | ||||
| Cooper Power Systems | ||||
| 20201 Century Blvd., Suite 250 | ||||
| Germantown, MD 20874 | ||||
| USA | ||||
| Phone: +1 240 454 9817 | ||||
| EMail: roger.alexander@cooperindustries.com | ||||
| End of changes. 1036 change blocks. | ||||
| 2257 lines changed or deleted | 2277 lines changed or added | |||
This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||