| < draft-ietf-roll-efficient-npdao-09.txt | draft-ietf-roll-efficient-npdao-10.txt > | |||
|---|---|---|---|---|
| ROLL R. Jadhav, Ed. | ROLL R. Jadhav, Ed. | |||
| Internet-Draft Huawei | Internet-Draft Huawei | |||
| Intended status: Standards Track P. Thubert | Intended status: Standards Track P. Thubert | |||
| Expires: April 17, 2019 Cisco | Expires: October 29, 2019 Cisco | |||
| R. Sahoo | R. Sahoo | |||
| Z. Cao | Z. Cao | |||
| Huawei | Huawei | |||
| October 14, 2018 | April 27, 2019 | |||
| Efficient Route Invalidation | Efficient Route Invalidation | |||
| draft-ietf-roll-efficient-npdao-09 | draft-ietf-roll-efficient-npdao-10 | |||
| Abstract | Abstract | |||
| This document describes the problems associated with NPDAO messaging | This document describes the problems associated with No-Path | |||
| used in RPL for route invalidation and signaling changes to improve | Destination Advertisement Object (NPDAO) messaging used in Routing | |||
| route invalidation efficiency. | Protocol for Low power and lossy networks (RPL) for route | |||
| invalidation and signaling changes to improve route invalidation | ||||
| efficiency. | ||||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on April 17, 2019. | This Internet-Draft will expire on October 29, 2019. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2018 IETF Trust and the persons identified as the | Copyright (c) 2019 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 | |||
| (https://trustee.ietf.org/license-info) in effect on the date of | (https://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 . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 1.1. Requirements Language and Terminology . . . . . . . . . . 3 | 1.1. Requirements Language and Terminology . . . . . . . . . . 3 | |||
| 1.2. Current NPDAO messaging . . . . . . . . . . . . . . . . . 4 | 1.2. Current NPDAO messaging . . . . . . . . . . . . . . . . . 4 | |||
| 1.3. Why NPDAO is important? . . . . . . . . . . . . . . . . . 5 | 1.3. Why NPDAO is important? . . . . . . . . . . . . . . . . . 5 | |||
| 2. Problems with current NPDAO messaging . . . . . . . . 5 | 2. Problems with current NPDAO messaging . . . . . . . . 6 | |||
| 2.1. Lost NPDAO due to link break to the previous parent . . . 5 | 2.1. Lost NPDAO due to link break to the previous parent . . . 6 | |||
| 2.2. Invalidate routes of dependent nodes . . . . . . . . . . 5 | 2.2. Invalidate routes of dependent nodes . . . . . . . . . . 6 | |||
| 2.3. Possible route downtime caused by async operation of | 2.3. Possible route downtime caused by async operation of | |||
| NPDAO and DAO . . . . . . . . . . . . . . . . . . . . . . 6 | NPDAO and DAO . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 3. Requirements for the NPDAO Optimization . . . . . . . . . . . 6 | 3. Requirements for the NPDAO Optimization . . . . . . . . . . . 6 | |||
| 3.1. Req#1: Remove messaging dependency on link to the | 3.1. Req#1: Remove messaging dependency on link to the | |||
| previous parent . . . . . . . . . . . . . . . 6 | previous parent . . . . . . . . . . . . . . . 6 | |||
| 3.2. Req#2: Dependent nodes route invalidation on parent | 3.2. Req#2: Dependent nodes route invalidation on parent | |||
| switching . . . . . . . . . . . . . . . . . . . . . . . . 6 | switching . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 3.3. Req#3: Route invalidation should not impact data traffic 6 | 3.3. Req#3: Route invalidation should not impact data traffic 7 | |||
| 4. Proposed changes to RPL signaling . . . . . . . . . . . . . . 6 | 4. Changes to RPL signaling . . . . . . . . . . . . . . . . . . 7 | |||
| 4.1. Change in RPL route invalidation semantics . . . . . . . 6 | 4.1. Change in RPL route invalidation semantics . . . . . . . 7 | |||
| 4.2. Transit Information Option changes . . . . . . . . . . . 7 | 4.2. Transit Information Option changes . . . . . . . . . . . 8 | |||
| 4.3. Destination Cleanup Object (DCO) . . . . . . . . . . . . 8 | 4.3. Destination Cleanup Object (DCO) . . . . . . . . . . . . 9 | |||
| 4.3.1. Secure DCO . . . . . . . . . . . . . . . . . . . . . 10 | 4.3.1. Secure DCO . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 4.3.2. DCO Options . . . . . . . . . . . . . . . . . . . . . 10 | 4.3.2. DCO Options . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 4.3.3. Path Sequence number in the DCO . . . . . . . . . . . 10 | 4.3.3. Path Sequence number in the DCO . . . . . . . . . . . 10 | |||
| 4.3.4. Destination Cleanup Option Acknowledgement (DCO-ACK) 10 | 4.3.4. Destination Cleanup Option Acknowledgement (DCO-ACK) 11 | |||
| 4.3.5. Secure DCO-ACK . . . . . . . . . . . . . . . . . . . 11 | 4.3.5. Secure DCO-ACK . . . . . . . . . . . . . . . . . . . 12 | |||
| 4.4. Other considerations . . . . . . . . . . . . . . . . . . 12 | 4.4. DCO Base Rules . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 4.4.1. Dependent Nodes invalidation . . . . . . . . . . . . 12 | 4.5. Other considerations . . . . . . . . . . . . . . . . . . 12 | |||
| 4.4.2. NPDAO and DCO in the same network . . . . . . . . . . 12 | 4.5.1. Dependent Nodes invalidation . . . . . . . . . . . . 12 | |||
| 4.4.3. DCO with multiple preferred parents . . . . . . . . . 12 | 4.5.2. NPDAO and DCO in the same network . . . . . . . . . . 13 | |||
| 5. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 13 | 4.5.3. DCO with multiple preferred parents . . . . . . . . . 13 | |||
| 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 13 | 5. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 7. Security Considerations . . . . . . . . . . . . . . . . . . . 13 | 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 8. Normative References . . . . . . . . . . . . . . . . . . . . 14 | 6.1. New Registry for the Destination Cleanup Object (DCO) | |||
| Appendix A. Example Messaging . . . . . . . . . . . . . . . . . 14 | Flags . . . . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
| A.1. Example DCO Messaging . . . . . . . . . . . . . . . . . . 14 | 6.2. New Registry for the Destination Cleanup Object | |||
| A.2. Example DCO Messaging with multiple preferred parents . . 15 | Acknowledgement (DCO-ACK) Status field . . . . . . . . . 15 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 16 | 6.3. New Registry for the Destination Cleanup Object (DCO) | |||
| Acknowledgement Flags . . . . . . . . . . . . . . . . . . 16 | ||||
| 7. Security Considerations . . . . . . . . . . . . . . . . . . . 16 | ||||
| 8. Normative References . . . . . . . . . . . . . . . . . . . . 17 | ||||
| Appendix A. Example Messaging . . . . . . . . . . . . . . . . . 18 | ||||
| A.1. Example DCO Messaging . . . . . . . . . . . . . . . . . . 18 | ||||
| A.2. Example DCO Messaging with multiple preferred parents . . 19 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 20 | ||||
| 1. Introduction | 1. Introduction | |||
| RPL [RFC6550] (Routing Protocol for Low power and lossy networks) | RPL [RFC6550] (Routing Protocol for Low power and lossy networks) | |||
| specifies a proactive distance-vector based routing scheme. RPL has | specifies a proactive distance-vector based routing scheme. RPL has | |||
| an optional messaging in the form of DAO (Destination Advertisement | an optional messaging in the form of DAO (Destination Advertisement | |||
| Object) messages using which the 6LBR (6Lo Border Router) and 6LR | Object) messages, which the 6LBR (6Lo Border Router) and 6LR (6Lo | |||
| (6Lo Router) can learn route towards the downstream nodes. In | Router) can use to learn a route towards the downstream nodes. In | |||
| storing mode, DAO messages would result in routing entries been | storing mode, DAO messages would result in routing entries being | |||
| created on all intermediate 6LRs from the node's parent all the way | created on all intermediate 6LRs from the node's parent all the way | |||
| towards the 6LBR. | towards the 6LBR. | |||
| RPL allows use of No-Path DAO (NPDAO) messaging to invalidate a | RPL allows the use of No-Path DAO (NPDAO) messaging to invalidate a | |||
| routing path corresponding to the given target, thus releasing | routing path corresponding to the given target, thus releasing | |||
| resources utilized on that path. A NPDAO is a DAO message with route | resources utilized on that path. A NPDAO is a DAO message with route | |||
| lifetime of zero, originates at the target node and always flows | lifetime of zero, originates at the target node and always flows | |||
| upstream towards the 6LBR. This document explains the problems | upstream towards the 6LBR. This document explains the problems | |||
| associated with the current use of NPDAO messaging and also discusses | associated with the current use of NPDAO messaging and also discusses | |||
| the requirements for an optimized route invalidation messaging | the requirements for an optimized route invalidation messaging | |||
| scheme. Further a new pro-active route invalidation message called | scheme. Further a new pro-active route invalidation message called | |||
| as "Destination Cleanup Object (DCO)" is specified which fulfills | as "Destination Cleanup Object" (DCO) is specified which fulfills | |||
| requirements of an optimized route invalidation messaging. | requirements of an optimized route invalidation messaging. | |||
| The document only caters to the RPL's storing mode of operation | The document only caters to the RPL's storing mode of operation | |||
| (MOP). The non-storing MOP does not require use of NPDAO for route | (MOP). The non-storing MOP does not require use of NPDAO for route | |||
| invalidation since routing entries are not maintained on 6LRs. | invalidation since routing entries are not maintained on 6LRs. | |||
| 1.1. Requirements Language and Terminology | 1.1. Requirements Language and 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", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| document are to be interpreted as described in RFC 2119 [RFC2119]. | "OPTIONAL" in this document are to be interpreted as described in BCP | |||
| 14 [RFC2119] [RFC8174] when, and only when, they appear in all | ||||
| 6LR: 6LoWPAN Router. This is an intermediate 6lowpan router which | capitals, as shown here. | |||
| allows traffic routing through itself in a multihop 6lo network. | ||||
| DAG: Directed Acyclic Graph. A directed graph having the property | ||||
| that all edges are oriented in such a way that no cycles exist. | ||||
| DODAG: Destination-oriented DAG. A DAG rooted at a single | ||||
| destination, i.e., at a single DAG root with no outgoing edges. | ||||
| 6LBR: 6LoWPAN Border Router. A border router which is a DODAG root | ||||
| and is the edge node for traffic flowing in and out of the 6lo | ||||
| network. | ||||
| DAO: Destination Advertisement Object. DAO messaging allows | ||||
| downstream routes to the nodes to be established. | ||||
| DIO: DODAG Information Object. DIO messaging allows upstream routes | ||||
| to the 6LBR to be established. DIO messaging is initiated at the DAO | ||||
| root. | ||||
| Common Ancestor node: 6LR/6LBR node which is the first common node | ||||
| between two paths of a target node. | ||||
| NPDAO: No-Path DAO. A DAO message which has target with lifetime 0. | ||||
| DCO: Destination Cleanup Object, A new RPL control message type | ||||
| defined by this draft. DCO messaging improves proactive route | ||||
| invalidation in RPL. | ||||
| Regular DAO: A DAO message with non-zero lifetime. | ||||
| LLN: Low Power and Lossy Networks. | This specification requires readers to be familiar with all the terms | |||
| and concepts that are discussed in "RPL: IPv6 Routing Protocol for | ||||
| Low-Power and Lossy Networks" [RFC6550]. | ||||
| Target Node: The node switching its parent whose routing adjacencies | 6LoWPAN Router (6LR): | |||
| are updated (created/removed). | An intermediate router that is able to send and receive Router | |||
| Advertisements (RAs) and Router Solicitations (RSs) as well as | ||||
| forward and route IPv6 packets. | ||||
| Directed Acyclic Graph (DAG): | ||||
| A directed graph having the property that all edges are oriented | ||||
| in such a way that no cycles exist. | ||||
| This document also uses terminology described in [RFC6550]. | Destination-Oriented DAG (DODAG): | |||
| A DAG rooted at a single destination, i.e., at a single DAG root | ||||
| with no outgoing edges. | ||||
| 6LoWPAN Border Router (6LBR): | ||||
| A border router which is a DODAG root and is the edge node for | ||||
| traffic flowing in and out of the 6LoWPAN network. | ||||
| Destination Advertisement Object (DAO): | ||||
| DAO messaging allows downstream routes to the nodes to be | ||||
| established. | ||||
| DODAG Information Object (DIO): | ||||
| DIO messaging allows upstream routes to the 6LBR to be | ||||
| established. DIO messaging is initiated at the DAO root. | ||||
| Common Ancestor node | ||||
| 6LR/6LBR node which is the first common node between two paths of | ||||
| a target node. | ||||
| No-Path DAO (NPDAO): | ||||
| A DAO message which has target with lifetime 0 used for the | ||||
| purpose of route invalidation. | ||||
| Destination Cleanup Object (DCO): | ||||
| A new RPL control message type defined by this document. DCO | ||||
| messaging improves proactive route invalidation in RPL. | ||||
| Regular DAO: | ||||
| A DAO message with non-zero lifetime. Routing adjacencies are | ||||
| created or updated based on this message. | ||||
| Target node: | ||||
| The node switching its parent whose routing adjacencies are | ||||
| updated (created/removed). | ||||
| 1.2. Current NPDAO messaging | 1.2. Current NPDAO messaging | |||
| RPL uses NPDAO messaging in the storing mode so that the node | RPL uses NPDAO messaging in the storing mode so that the node | |||
| changing it routing adjacencies can invalidate the previous route. | changing it routing adjacencies can invalidate the previous route. | |||
| This is needed so that nodes along previous path can release any | This is needed so that nodes along the previous path can release any | |||
| resources (such as the routing entry) it maintains on behalf of | resources (such as the routing entry) it maintains on behalf of | |||
| target node. | target node. | |||
| For the rest of this document consider the following topology: | For the rest of this document consider the following topology: | |||
| (6LBR) | (6LBR) | |||
| | | | | |||
| | | | | |||
| | | | | |||
| (A) | (A) | |||
| skipping to change at page 5, line 16 ¶ | skipping to change at page 5, line 40 ¶ | |||
| path via (C) towards the 6LBR. Node (A) is the common ancestor for | path via (C) towards the 6LBR. Node (A) is the common ancestor for | |||
| (D) for paths through (B)-(G) and (C)-(H). When (D) switches from | (D) for paths through (B)-(G) and (C)-(H). When (D) switches from | |||
| (B) to (C), RPL allows sending NPDAO to (B) and regular DAO to (C). | (B) to (C), RPL allows sending NPDAO to (B) and regular DAO to (C). | |||
| 1.3. Why NPDAO is important? | 1.3. Why NPDAO is important? | |||
| Nodes in LLNs may be resource constrained. There is limited memory | Nodes in LLNs may be resource constrained. There is limited memory | |||
| available and routing entry records are one of the primary elements | available and routing entry records are one of the primary elements | |||
| occupying dynamic memory in the nodes. Route invalidation helps 6LR | occupying dynamic memory in the nodes. Route invalidation helps 6LR | |||
| nodes to decide which entries could be discarded to better achieve | nodes to decide which entries could be discarded to better achieve | |||
| resource utilization. Thus it becomes necessary to have efficient | resource utilization. Thus it becomes necessary to have an efficient | |||
| route invalidation mechanism. Also note that a single parent switch | route invalidation mechanism. Also note that a single parent switch | |||
| may result in a "sub-tree" switching from one parent to another. | may result in a "sub-tree" switching from one parent to another. | |||
| Thus the route invalidation needs to be done on behalf of the sub- | Thus the route invalidation needs to be done on behalf of the sub- | |||
| tree and not the switching node alone. In the above example, when | tree and not the switching node alone. In the above example, when | |||
| Node (D) switches parent, the route updates needs to be done for the | Node (D) switches parent, the route updates needs to be done for the | |||
| routing tables entries of (C),(H),(A),(G), and (B) with destination | routing tables entries of (C),(H),(A),(G), and (B) with destination | |||
| (D),(E) and (F). Without efficient route invalidation, a 6LR may | (D),(E) and (F). Without efficient route invalidation, a 6LR may | |||
| have to hold a lot of stale route entries. | have to hold a lot of stale route entries. | |||
| 2. Problems with current NPDAO messaging | 2. Problems with current NPDAO messaging | |||
| skipping to change at page 5, line 38 ¶ | skipping to change at page 6, line 17 ¶ | |||
| 2.1. Lost NPDAO due to link break to the previous parent | 2.1. Lost NPDAO due to link break to the previous parent | |||
| When a node switches its parent, the NPDAO is to be sent to its | When a node switches its parent, the NPDAO is to be sent to its | |||
| previous parent and a regular DAO to its new parent. In cases where | previous parent and a regular DAO to its new parent. In cases where | |||
| the node switches its parent because of transient or permanent parent | the node switches its parent because of transient or permanent parent | |||
| link/node failure then the NPDAO message is bound to fail. | link/node failure then the NPDAO message is bound to fail. | |||
| 2.2. Invalidate routes of dependent nodes | 2.2. Invalidate routes of dependent nodes | |||
| RPL does not specify how route invalidation will work for dependent | RPL does not specify how route invalidation will work for dependent | |||
| nodes rooted at switching node, resulting in stale routing entries of | nodes rooted at the switching node, resulting in stale routing | |||
| the dependent nodes. The only way for 6LR to invalidate the route | entries of the dependent nodes. The only way for 6LR to invalidate | |||
| entries for dependent nodes would be to use route lifetime expiry | the route entries for dependent nodes would be to use route lifetime | |||
| which could be substantially high for LLNs. | expiry which could be substantially high for LLNs. | |||
| In the example topology, when Node (D) switches its parent, Node (D) | In the example topology, when Node (D) switches its parent, Node (D) | |||
| generates an NPDAO on its behalf. There is no NPDAO generated by the | generates an NPDAO on its behalf. There is no NPDAO generated by the | |||
| dependent child nodes (E) and (F), through the previous path via (D) | dependent child nodes (E) and (F), through the previous path via (D) | |||
| to (B) and (G), resulting in stale entries on nodes (B) and (G) for | to (B) and (G), resulting in stale entries on nodes (B) and (G) for | |||
| nodes (E) and (F). | nodes (E) and (F). | |||
| 2.3. Possible route downtime caused by async operation of NPDAO and DAO | 2.3. Possible route downtime caused by async operation of NPDAO and DAO | |||
| A switching node may generate both an NPDAO and DAO via two different | A switching node may generate both an NPDAO and DAO via two different | |||
| paths at almost the same time. There is a possibility that an NPDAO | paths at almost the same time. There is a possibility that an NPDAO | |||
| generated may invalidate the previous route and the regular DAO sent | generated may invalidate the previous route and the regular DAO sent | |||
| via the new path gets lost on the way. This may result in route | via the new path gets lost on the way. This may result in route | |||
| downtime impacting downward traffic for the switching node. | downtime impacting downward traffic for the switching node. | |||
| In the example topology, consider Node (D) switches from parent (B) | In the example topology, consider Node (D) switches from parent (B) | |||
| to (C). An NPDAO sent via previous route may invalidate the previous | to (C). An NPDAO sent via the previous route may invalidate the | |||
| route whereas there is no way to determine whether the new DAO has | previous route whereas there is no way to determine whether the new | |||
| successfully updated the route entries on the new path. | DAO has successfully updated the route entries on the new path. | |||
| 3. Requirements for the NPDAO Optimization | 3. Requirements for the NPDAO Optimization | |||
| 3.1. Req#1: Remove messaging dependency on link to the previous parent | 3.1. Req#1: Remove messaging dependency on link to the previous parent | |||
| When the switching node sends the NPDAO message to the previous | When the switching node sends the NPDAO message to the previous | |||
| parent, it is normal that the link to the previous parent is prone to | parent, it is normal that the link to the previous parent is prone to | |||
| failure (thats why the node decided to switch). Therefore, it is | failure (that's why the node decided to switch). Therefore, it is | |||
| required that the route invalidation does not depend on the previous | required that the route invalidation does not depend on the previous | |||
| link which is prone to failure. The previous link referred here | link which is prone to failure. The previous link referred here | |||
| represents the link between the node and its previous parent (from | represents the link between the node and its previous parent (from | |||
| whom the node is now disassociating). | whom the node is now disassociating). | |||
| 3.2. Req#2: Dependent nodes route invalidation on parent switching | 3.2. Req#2: Dependent nodes route invalidation on parent switching | |||
| It should be possible to do route invalidation for dependent nodes | It should be possible to do route invalidation for dependent nodes | |||
| rooted at the switching node. | rooted at the switching node. | |||
| 3.3. Req#3: Route invalidation should not impact data traffic | 3.3. Req#3: Route invalidation should not impact data traffic | |||
| While sending the NPDAO and DAO messages, it is possible that the | While sending the NPDAO and DAO messages, it is possible that the | |||
| NPDAO successfully invalidates the previous path, while the newly | NPDAO successfully invalidates the previous path, while the newly | |||
| sent DAO gets lost (new path not set up successfully). This will | sent DAO gets lost (new path not set up successfully). This will | |||
| result in downstream unreachability to the node switching paths. | result in downstream unreachability to the node switching paths. | |||
| Therefore, it is desirable that the route invalidation is | Therefore, it is desirable that the route invalidation is | |||
| synchronized with the DAO to avoid the risk of route downtime. | synchronized with the DAO to avoid the risk of route downtime. | |||
| 4. Proposed changes to RPL signaling | 4. Changes to RPL signaling | |||
| 4.1. Change in RPL route invalidation semantics | 4.1. Change in RPL route invalidation semantics | |||
| As described in Section 1.2, the NPDAO originates at the node | As described in Section 1.2, the NPDAO originates at the node | |||
| switching the parent and traverses upstream towards the root. In | changing to a new parent and traverses upstream towards the root. In | |||
| order to solve the problems as mentioned in Section 2, the draft adds | order to solve the problems as mentioned in Section 2, the document | |||
| new pro-active route invalidation message called as "Destination | adds a new pro-active route invalidation message called "Destination | |||
| Cleanup Object" (DCO) that originates at a common ancestor node | Cleanup Object" (DCO) that originates at a common ancestor node and | |||
| between the new and old path. The common ancestor node generates a | flows downstream between the new and old path. The common ancestor | |||
| DCO in response to the change in the next-hop on receiving a regular | node generates a DCO in response to the change in the next-hop on | |||
| DAO with updated path sequence for the target. | receiving a regular DAO with updated Path Sequence for the target. | |||
| The 6LRs in the path for DCO take action such as route invalidation | ||||
| based on the DCO information and subsequently send another DCO with | ||||
| the same information downstream to the next hop. This operation is | ||||
| similar to how the DAOs are handled on intermediate 6LRs in storing | ||||
| MOP in [RFC6550]. Just like DAO in storing MOP, the DCO is sent | ||||
| using link-local unicast source and destination IPv6 address. Unlike | ||||
| DAO, which always travels upstream, the DCO always travels | ||||
| downstream. | ||||
| In Figure 1, when node D decides to switch the path from B to C, it | In Figure 1, when node D decides to switch the path from B to C, it | |||
| sends a regular DAO to node C with reachability information | sends a regular DAO to node C with reachability information | |||
| containing target as address of D and a incremented path sequence | containing target as address of D and an incremented Path Sequence. | |||
| number. Node C will update the routing table based on the | Node C will update the routing table based on the reachability | |||
| reachability information in DAO and in turn generate another DAO with | information in the DAO and in turn generate another DAO with the same | |||
| the same reachability information and forward it to H. Node H also | reachability information and forward it to H. Node H also follows | |||
| follows the same procedure as Node C and forwards it to node A. When | the same procedure as Node C and forwards it to node A. When node A | |||
| node A receives the regular DAO, it finds that it already has a | receives the regular DAO, it finds that it already has a routing | |||
| routing table entry on behalf of the target address of node D. It | table entry on behalf of the target address of node D. It finds | |||
| finds however that the next hop information for reaching node D has | however that the next hop information for reaching node D has changed | |||
| changed i.e. the node D has decided to change the paths. In this | i.e. node D has decided to change the paths. In this case, Node A | |||
| case, Node A which is the common ancestor node for node D along the | which is the common ancestor node for node D along the two paths | |||
| two paths (previous and new), should generate a DCO which traverses | (previous and new), should generate a DCO which traverses downwards | |||
| downwards in the network. | in the network. | |||
| 4.2. Transit Information Option changes | 4.2. Transit Information Option changes | |||
| Every RPL message is divided into base message fields and additional | Every RPL message is divided into base message fields and additional | |||
| Options. The base fields apply to the message as a whole and options | Options as described in Section 6 of [RFC6550]. The base fields | |||
| are appended to add message/use-case specific attributes. As an | apply to the message as a whole and options are appended to add | |||
| example, a DAO message may be attributed by one or more "RPL Target" | message/use-case specific attributes. As an example, a DAO message | |||
| options which specify the reachability information for the given | may be attributed by one or more "RPL Target" options which specify | |||
| targets. Similarly, a Transit Information option may be associated | the reachability information for the given targets. Similarly, a | |||
| with a set of RPL Target options. | Transit Information option may be associated with a set of RPL Target | |||
| options. | ||||
| The draft proposes a change in Transit Information option to contain | This document specifies a change in the Transit Information Option to | |||
| "Invalidate previous route" (I) bit. This I-bit signals the common | contain the "Invalidate previous route" (I) bit. This I-bit signals | |||
| ancestor node to generate a DCO on behalf of the target node. The | the common ancestor node to generate a DCO on behalf of the target | |||
| I-bit is carried in the transit information option which augments the | node. The I-bit is carried in the Transit Information Option which | |||
| reachability information for a given set of RPL Target(s). Transit | augments the reachability information for a given set of RPL | |||
| information option should be carried in the DAO message with I-bit | Target(s). Transit Information Option should be carried in the DAO | |||
| set in case route invalidation is sought for the correspondig | message with I-bit set in case route invalidation is sought for the | |||
| target(s). | corresponding target(s). | |||
| 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 = 0x06 | Option Length |E|I| Flags | Path Control | | | Type = 0x06 | Option Length |E|I| Flags | Path Control | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Path Sequence | Path Lifetime | | | | Path Sequence | Path Lifetime | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | |||
| | | | | | | |||
| + + | + + | |||
| | | | | | | |||
| + Parent Address* + | + Parent Address + | |||
| | | | | | | |||
| + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 2: Updated Transit Information Option (New I flag added) | Figure 2: Updated Transit Information Option (New I flag added) | |||
| I (Invalidate previous route) bit: 1 bit flag. The 'I' flag is set | I (Invalidate previous route) bit: The 'I' flag is set by the target | |||
| by the target node to indicate that it wishes to invalidate the | node to indicate to the common ancestor node that it wishes to | |||
| previous route by a common ancestor node between the two paths. | invalidate any previous route between the two paths. | |||
| The common ancestor node SHOULD generate a DCO message in response to | The common ancestor node SHOULD generate a DCO message in response to | |||
| this I-bit when it sees that the routing adjacencies have changed for | this I-bit when it sees that the routing adjacencies have changed for | |||
| the target. I-bit governs the ownership of the DCO message in a way | the target. I-bit governs the ownership of the DCO message in a way | |||
| that the target node is still in control of its own route | that the target node is still in control of its own route | |||
| invalidation. | invalidation. | |||
| 4.3. Destination Cleanup Object (DCO) | 4.3. Destination Cleanup Object (DCO) | |||
| A new ICMPv6 RPL control message type is defined by this | A new ICMPv6 RPL control message type is defined by this | |||
| skipping to change at page 9, line 26 ¶ | skipping to change at page 9, line 37 ¶ | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Option(s)... | | Option(s)... | |||
| +-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
| Figure 3: DCO base object | Figure 3: DCO 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 of DCO message is | |||
| DCO-ACK back. If the DCO-ACK is not received even after setting the | expected to send a DCO-ACK back. If the DCO-ACK is not received even | |||
| 'K', an implementation may choose to retry the DCO at a later time. | after setting the 'K' flag, an implementation may retry the DCO at a | |||
| The number of retries are implementation and deployment dependent. | later time. The number of retries are implementation and deployment | |||
| This document recommends using retries similar to what will be set | dependent. A node receiving a DCO message without the 'K' flag set | |||
| for DAO-ACK handling. | MAY respond with a DCO-ACK, especially to report an error condition. | |||
| An example error condition could be that the node sending the DCO-ACK | ||||
| does not find the routing entry for the indicated target. | ||||
| 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 future use. These bits MUST be initialized to zero by the sender | for future use. These bits 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. | |||
| DCOSequence: Incremented at each unique DCO message from a node and | DCOSequence: Incremented at each unique DCO message from a node and | |||
| echoed in the DCO-ACK message. The initial DCOSequence can be chosen | echoed in the DCO-ACK message. The initial DCOSequence can be chosen | |||
| randomly by the node. | randomly by the node. | |||
| DODAGID (optional): 128-bit unsigned integer set by a DODAG root that | DODAGID (optional): 128-bit unsigned integer set by a DODAG root that | |||
| uniquely identifies a DODAG. This field is only present when the 'D' | uniquely identifies a DODAG. This field MUST be present when the 'D' | |||
| flag is set. This field is typically only present when a local | flag is set. DODAGID is used when a local RPLInstanceID is in use, | |||
| RPLInstanceID is in use, in order to identify the DODAGID that is | in order to identify the DODAGID that is associated with the | |||
| associated with the RPLInstanceID. When a global RPLInstanceID is in | RPLInstanceID. | |||
| use, this field need not be present. Unassigned bits of the DCO Base | ||||
| are reserved. They MUST be set to zero on transmission and MUST be | ||||
| ignored on reception. | ||||
| 4.3.1. Secure DCO | 4.3.1. Secure DCO | |||
| A Secure DCO message follows the format in [RFC6550] figure 7, where | A Secure DCO message follows the format in [RFC6550] Figure 7, where | |||
| the base message format is the DCO message shown in Figure 3. | the base message format is the DCO message shown in Figure 3. | |||
| 4.3.2. DCO Options | 4.3.2. DCO Options | |||
| The DCO message MAY carry valid options. This specification allows | The DCO message MUST carry atleast one RPL Target and the Transit | |||
| for the DCO message to carry the following options: | Information Option and MAY carry other valid options. This | |||
| specification allows for the DCO message to carry the following | ||||
| 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 | |||
| The DCO carries a Target option and an associated Transit Information | The DCO carries an RPL Target Option and an associated Transit | |||
| option with a lifetime of 0x00000000 to indicate a loss of | Information Option with a lifetime of 0x00000000 to indicate a loss | |||
| reachability to that Target. | of reachability to that Target. The lifetime indicated in the | |||
| Transit Information Option of the DCO message MUST be set to | ||||
| 0x00000000. | ||||
| 4.3.3. Path Sequence number in the DCO | 4.3.3. Path Sequence number in the DCO | |||
| A DCO message may contain a Path Sequence in the transit information | A DCO message may contain a Path Sequence in the Transit Information | |||
| option to identify the freshness of the DCO message. The Path | Option to identify the freshness of the DCO message. The Path | |||
| Sequence in the DCO MUST use the same Path Sequence number present in | Sequence in the DCO MUST use the same Path Sequence number present in | |||
| the regular DAO message when the DCO is generated in response to DAO | the regular DAO message when the DCO is generated in response to a | |||
| message. The DAO and DCO path sequence are picked from the same | DAO message. The Path Sequence present in the Transit Information | |||
| sequence number set. Thus if a DCO is received by a 6LR and | Option of the DAO and the correspondingly triggered DCO MUST be same. | |||
| subsequently a DAO is received with old seqeunce number, then the DAO | Thus if a DCO is received by a 6LR and subsequently a DAO is received | |||
| should be ignored. | with an old seqeunce number, then the DAO MUST be ignored. | |||
| 4.3.4. Destination Cleanup Option Acknowledgement (DCO-ACK) | 4.3.4. Destination Cleanup Option Acknowledgement (DCO-ACK) | |||
| The DCO-ACK message may be sent as a unicast packet by a DCO | The DCO-ACK message SHOULD be sent as a unicast packet by a DCO | |||
| recipient in response to a unicast DCO message. | recipient in response to a unicast DCO message with 'K' flag set. If | |||
| 'K' flag is not set then the receiver of the DCO message MAY send a | ||||
| DCO-ACK to signal an error condition. | ||||
| 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 |D| Reserved | DCOSequence | Status | | | RPLInstanceID |D| Reserved | DCOSequence | Status | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| + + | + + | |||
| | | | | | | |||
| + DODAGID(optional) + | + DODAGID(optional) + | |||
| skipping to change at page 11, line 34 ¶ | skipping to change at page 11, line 41 ¶ | |||
| 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. | |||
| 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. | |||
| DCOSequence: The DCOSequence in DCO-ACK is copied from the | DCOSequence: The DCOSequence in DCO-ACK is copied from the | |||
| DCOSequence received in the DCO message. | DCOSequence received in the DCO message. | |||
| Status: Indicates the completion. Status 0 is defined as unqualified | Status: Indicates the completion. Status 0 is defined as unqualified | |||
| acceptance in this specification. The remaining status values are | acceptance in this specification. Status 1 is defined as "No | |||
| routing-entry for the Target found". The remaining status values are | ||||
| reserved as rejection codes. | reserved as rejection codes. | |||
| DODAGID (optional): 128-bit unsigned integer set by a DODAG root that | DODAGID (optional): 128-bit unsigned integer set by a DODAG root that | |||
| uniquely identifies a DODAG. This field is only present when the 'D' | uniquely identifies a DODAG. This field MUST be present when the 'D' | |||
| flag is set. This field is typically only present when a local | flag is set. DODAGID is used when a local RPLInstanceID is in use, | |||
| RPLInstanceID is in use, in order to identify the DODAGID that is | in order to identify the DODAGID that is associated with the | |||
| associated with the RPLInstanceID. When a global RPLInstanceID is in | RPLInstanceID. | |||
| use, this field need not be present. Unassigned bits of the DCO-Ack | ||||
| Base are reserved. They MUST be set to zero on transmission and MUST | ||||
| be ignored on reception. | ||||
| 4.3.5. Secure DCO-ACK | 4.3.5. Secure DCO-ACK | |||
| A Secure DCO-ACK message follows the format in [RFC6550] figure 7, | A Secure DCO-ACK message follows the format in [RFC6550] Figure 7, | |||
| where the base message format is the DCO-ACK message shown in | where the base message format is the DCO-ACK message shown in | |||
| Figure 4. | Figure 4. | |||
| 4.4. Other considerations | 4.4. DCO Base Rules | |||
| 4.4.1. Dependent Nodes invalidation | 1. If a node sends a DCO message with newer or different information | |||
| than the prior DCO message transmission, it MUST increment the | ||||
| DCOSequence field by at least one. A DCO message transmission | ||||
| that is identical to the prior DCO message transmission MAY | ||||
| increment the DCOSequence field. | ||||
| 2. The RPLInstanceID and DODAGID fields of a DCO message MUST be the | ||||
| same value as that of the DAO message in response to which the | ||||
| DCO is generated on the common ancestor node. | ||||
| 3. A node MAY set the 'K' flag in a unicast DCO message to solicit a | ||||
| unicast DCO-ACK in response in order to confirm the attempt. | ||||
| 4. A node receiving a unicast DCO message with the 'K' flag set | ||||
| SHOULD respond with a DCO-ACK. A node receiving a DCO message | ||||
| without the 'K' flag set MAY respond with a DCO-ACK, especially | ||||
| to report an error condition. | ||||
| 5. A node receiving a unicast DCO message MUST verify the stored | ||||
| Path Sequence in context to the given target. If the stored Path | ||||
| Sequence is more fresh i.e. newer than the Path Sequence received | ||||
| in the DCO, then the DCO MUST be dropped. | ||||
| 6. A node that sets the 'K' flag in a unicast DCO message but does | ||||
| not receive DCO-ACK in response MAY reschedule the DCO message | ||||
| transmission for another attempt, up until an implementation | ||||
| specific number of retries. | ||||
| 7. A node receiving a unicast DCO message with its own address in | ||||
| the RPL Target Option MUST strip-off that Target Option. If this | ||||
| Target Option is the only one in the DCO message then the DCO | ||||
| message MUST be dropped. | ||||
| The scope of DCOSequence values is unique to each node. | ||||
| 4.5. Other considerations | ||||
| 4.5.1. Dependent Nodes invalidation | ||||
| Current RPL [RFC6550] does not provide a mechanism for route | Current RPL [RFC6550] does not provide a mechanism for route | |||
| invalidation for dependent nodes. This document allows the dependent | invalidation for dependent nodes. This document allows the dependent | |||
| nodes invalidation. Dependent nodes will generate their respective | nodes invalidation. Dependent nodes will generate their respective | |||
| DAOs to update their paths, and the previous route invalidation for | DAOs to update their paths, and the previous route invalidation for | |||
| those nodes should work in the similar manner described for switching | those nodes should work in the similar manner described for switching | |||
| node. The dependent node may set the I-bit in the transit | node. The dependent node may set the I-bit in the Transit | |||
| information option as part of regular DAO so as to request | Information Option as part of regular DAO so as to request | |||
| invalidation of previous route from the common ancestor node. | invalidation of previous route from the common ancestor node. | |||
| 4.4.2. NPDAO and DCO in the same network | Dependent nodes do not have any indication regarding if any of its | |||
| parent nodes in turn have decided to switch their parent. Thus for | ||||
| route invalidation the dependent nodes may choose to always set the | ||||
| 'I' bit in all its DAO message's Transit Information Option. Note | ||||
| that setting the I-bit is not counter productive even if there is no | ||||
| previous route to be invalidated. | ||||
| 4.5.2. NPDAO and DCO in the same network | ||||
| Even with the changed semantics, the current NPDAO mechanism in | Even with the changed semantics, the current NPDAO mechanism in | |||
| [RFC6550] can still be used, for example, when the route lifetime | [RFC6550] can still be used, for example, when the route lifetime | |||
| expiry of the target happens or when the node simply decides to | expiry of the target happens or when the node simply decides to | |||
| gracefully terminate the RPL session on graceful node shutdown. | gracefully terminate the RPL session on graceful node shutdown. | |||
| Moreover a deployment can have a mix of nodes supporting the proposed | Moreover a deployment can have a mix of nodes supporting the DCO and | |||
| DCO and the existing NPDAO mechanism. | the existing NPDAO mechanism. It is also possible that the same node | |||
| supports both the NPDAO and DCO signalling. | ||||
| 4.4.3. DCO with multiple preferred parents | Section 9.8 of [RFC6550] states, "When a node removes a node from its | |||
| DAO parent set, it SHOULD send a No-Path DAO message to that removed | ||||
| DAO parent to invalidate the existing router". This document | ||||
| introduces an alternate and more optimized way of route invalidation | ||||
| but it also allows existing NPDAO messaging to work. Thus an | ||||
| implementation has two choices to make when a route invalidation is | ||||
| to be initiated: | ||||
| 1. Use NPDAO to invalidate the previous route and send regular DAO | ||||
| on the new path. | ||||
| 2. Send regular DAO on the new path with the 'I' bit set in the | ||||
| Transit Information Option such that the common ancestor node | ||||
| initiates the DCO message downstream to invalidate the previous | ||||
| route. | ||||
| This document recommends using option 2 for reasons specified in | ||||
| Section 3 in this document. | ||||
| 4.5.3. DCO with multiple preferred parents | ||||
| [RFC6550] allows a node to select multiple preferred parents for | [RFC6550] allows a node to select multiple preferred parents for | |||
| route establishment. Section 9.2.1 of [RFC6550] specifies, "All DAOs | route establishment. Section 9.2.1 of [RFC6550] specifies, "All DAOs | |||
| generated at the same time for the same Target MUST be sent with the | generated at the same time for the same Target MUST be sent with the | |||
| same Path Sequence in the Transit Information". Thus a DAO message | same Path Sequence in the Transit Information". Subsequently when | |||
| with the same path sequence MUST be sent to all the parents. | route invalidation has to be initiated, RPL mentions use of NPDAO | |||
| Subsequently when route invalidation has to be initiated, RPL | which can be initiated with an updated Path Sequence to all the | |||
| mentions that an NPDAO must be initiated with updated path sequence | parent nodes through which the route is to be invalidated. | |||
| to all the routes to be invalidated. | ||||
| With DCO, the Target node itself does not initiate the route | With DCO, the Target node itself does not initiate the route | |||
| invalidation and it is left to the common ancestor node. A common | invalidation and it is left to the common ancestor node. A common | |||
| ancestor node when it discovers an updated DAO from a new next-hop, | ancestor node when it discovers an updated DAO from a new next-hop, | |||
| it initiates a DCO. With multiple preferred parents, this handling | it initiates a DCO. With multiple preferred parents, this handling | |||
| does not change. But in this case it is recommended that an | does not change. But in this case it is recommended that an | |||
| implementation initiates a DCO after a time period such that the | implementation initiates a DCO after a time period (DelayDCO) such | |||
| common ancestor node may receive updated DAOs from all possible next- | that the common ancestor node may receive updated DAOs from all | |||
| hops. This will help to reduce DCO control overhead i.e., the common | possible next-hops. This will help to reduce DCO control overhead | |||
| ancestor can wait for updated DAOs from all possible directions | i.e., the common ancestor can wait for updated DAOs from all possible | |||
| before initiating a DCO for route invalidation. The time period for | directions before initiating a DCO for route invalidation. After | |||
| initiating a DCO could be based on the depth of the network. After | ||||
| timeout, the DCO needs to be generated for all the next-hops for whom | timeout, the DCO needs to be generated for all the next-hops for whom | |||
| the route invalidation needs to be done. | the route invalidation needs to be done. | |||
| This documents recommends using a DelayDCO timer value of 1sec. This | ||||
| value is inspired by the default DelayDAO value of 1sec in [RFC6550]. | ||||
| Here the hypothesis is that the DAOs from all possible parent set | ||||
| would be received on the common ancestor within this time period. | ||||
| Note that there is no requirement of synchronization between DCO and | ||||
| DAOs. The DelayDCO timer simply ensures that the DCO control | ||||
| overhead can be reduced and is only needed when the network contains | ||||
| nodes using multiple preferred parent. | ||||
| 5. Acknowledgements | 5. Acknowledgements | |||
| Many thanks to Cenk Gundogan, Simon Duquennoy, Georgios | Many thanks to Alvaro Retana, Cenk Gundogan, Simon Duquennoy, | |||
| Papadopoulous, Peter Van Der Stok for their review and comments. | Georgios Papadopoulous, Peter Van Der Stok for their review and | |||
| comments. Alvaro Retana helped shape this document's final version | ||||
| with critical review comments. | ||||
| 6. IANA Considerations | 6. IANA Considerations | |||
| IANA is requested to allocate new ICMPv6 RPL control codes in RPL | IANA is requested to allocate new codes for the DCO and DCO-ACK | |||
| [RFC6550] for DCO and DCO-ACK messages. | messages from the RPL Control Codes registry. | |||
| +------+---------------------------------------------+--------------+ | +------+---------------------------------------------+--------------+ | |||
| | Code | Description | Reference | | | Code | Description | Reference | | |||
| +------+---------------------------------------------+--------------+ | +------+---------------------------------------------+--------------+ | |||
| | 0x04 | Destination Cleanup Object | This | | | TBD1 | Destination Cleanup Object | This | | |||
| | | | document | | | | | document | | |||
| | 0x05 | Destination Cleanup Object Acknowledgement | This | | | TBD2 | Destination Cleanup Object Acknowledgement | This | | |||
| | | | document | | | | | document | | |||
| | 0x84 | Secure Destination Cleanup Object | This | | | TBD3 | Secure Destination Cleanup Object | This | | |||
| | | | document | | | | | document | | |||
| | 0x85 | Secure Destination Cleanup Object | This | | | TBD4 | Secure Destination Cleanup Object | This | | |||
| | | Acknowledgement | document | | | | Acknowledgement | document | | |||
| +------+---------------------------------------------+--------------+ | +------+---------------------------------------------+--------------+ | |||
| IANA is requested to allocate bit 1 from the Transit Information | ||||
| Option Flags registry for the I-bit (Section 4.2) | ||||
| IANA is requested to allocate bit 18 in the Transit Information | 6.1. New Registry for the Destination Cleanup Object (DCO) Flags | |||
| Option defined in RPL [RFC6550] section 6.7.8 for Invalidate route | ||||
| 'I' flag. | IANA has created a registry for the 8-bit Destination Cleanup Object | |||
| (DCO) Flags field. | ||||
| New bit numbers may be allocated only by an IETF Review. Each bit is | ||||
| tracked with the following qualities: | ||||
| oBit number (counting from bit 0 as the most significant bit) | ||||
| oCapability description | ||||
| oDefining RFC | ||||
| The following bits are currently defined: | ||||
| +------------+------------------------------+---------------+ | ||||
| | Bit number | Description | Reference | | ||||
| +------------+------------------------------+---------------+ | ||||
| | 0 | DCO-ACK request (K) | This document | | ||||
| | 1 | DODAGID field is present (D) | This document | | ||||
| +------------+------------------------------+---------------+ | ||||
| DCO Base Flags | ||||
| 6.2. New Registry for the Destination Cleanup Object Acknowledgement | ||||
| (DCO-ACK) Status field | ||||
| IANA has created a registry for the 8-bit Destination Cleanup Object | ||||
| Acknowledgement (DCO-ACK) Status field. | ||||
| New Status values may be allocated only by an IETF Review. Each | ||||
| value is tracked with the following qualities: | ||||
| oStatus Code | ||||
| oDescription | ||||
| oDefining RFC | ||||
| The following bits are currently defined: | ||||
| +------------+----------------------------------------+-------------+ | ||||
| | Status | Description | Reference | | ||||
| | Code | | | | ||||
| +------------+----------------------------------------+-------------+ | ||||
| | 0 | Unqualified acceptance | This | | ||||
| | | | document | | ||||
| | 1 | No routing-entry for the indicated | This | | ||||
| | | Target found | document | | ||||
| +------------+----------------------------------------+-------------+ | ||||
| DCO Status Codes | ||||
| 6.3. New Registry for the Destination Cleanup Object (DCO) | ||||
| Acknowledgement Flags | ||||
| IANA has created a registry for the 8-bit Destination Cleanup Object | ||||
| (DCO) Acknowledgement Flags field. | ||||
| New bit numbers may be allocated only by an IETF Review. Each bit is | ||||
| tracked with the following qualities: | ||||
| oBit number (counting from bit 0 as the most significant bit) | ||||
| oCapability description | ||||
| oDefining RFC | ||||
| The following bits are currently defined: | ||||
| +------------+------------------------------+---------------+ | ||||
| | Bit number | Description | Reference | | ||||
| +------------+------------------------------+---------------+ | ||||
| | 0 | DODAGID field is present (D) | This document | | ||||
| +------------+------------------------------+---------------+ | ||||
| DCO-ACK Base Flags | ||||
| 7. Security Considerations | 7. Security Considerations | |||
| This document introduces the ability for a common ancestor node to | ||||
| invalidate a route on behalf of the target node. The common ancestor | ||||
| node is directed to do so by the target node using the 'I' bit in | ||||
| DCO's Transit Information Option. However, the common ancestor node | ||||
| is in a position to unilaterally initiate the route invalidation | ||||
| since it possesses all the required state information namely, the | ||||
| Target address and the correspond Path Sequence. Thus a rogue common | ||||
| ancestor node could initiate such an invalidation and impact the | ||||
| traffic to the target node. This document assumes that the security | ||||
| mechanisms as defined in [RFC6550] are followed, which means that the | ||||
| common ancestor node is part of the RPL network because it has the | ||||
| required credentials. | ||||
| All RPL messages support a secure version of messages which allows | All RPL messages support a secure version of messages which allows | |||
| integrity protection using either a MAC or a signature. Optionally, | integrity protection using either a MAC or a signature. Optionally, | |||
| secured RPL messages also have encryption protection for | secured RPL messages also have encryption protection for | |||
| confidentiality. | confidentiality. | |||
| The document adds new messages (DCO, DCO-ACK) which are syntactically | The document adds new messages (DCO, DCO-ACK) which are syntactically | |||
| similar to existing RPL messages such as DAO, DAO-ACK. Secure | similar to existing RPL messages such as DAO, DAO-ACK. Secure | |||
| versions of DCO and DCO-ACK are added similar to other RPL messages | versions of DCO and DCO-ACK are added similar to other RPL messages | |||
| (such as DAO, DAO-ACK). | (such as DAO, DAO-ACK). | |||
| RPL supports three security modes as mentioned in Section 10.1 of | RPL supports three security modes as mentioned in Section 10.1 of | |||
| [RFC6550]: | [RFC6550]: | |||
| 1. Unsecured: In this mode, it is expected that the RPL control | 1. Unsecured: In this mode, it is expected that the RPL control | |||
| messages are secured by other security mechanisms, such as link- | messages are secured by other security mechanisms, such as link- | |||
| layer security. In this mode, the RPL control messages, | layer security. In this mode, the RPL control messages, | |||
| including DCO, DCO-ACK, do not have Security sections. | including DCO, DCO-ACK, do not have Security sections. A DCO and | |||
| DCO-ACK message which is not encrypted at link-layer MUST not be | ||||
| handled by the RPL layer. Also all the DCO and DCO-ACK messages | ||||
| that are transmitted MUST be link-layer encrypted. | ||||
| 2. Preinstalled: In this mode, RPL uses secure messages. Thus | 2. Preinstalled: In this mode, RPL uses secure messages. Thus | |||
| secure versions of DCO, DCO-ACK MUST be used in this mode. | secure versions of DCO, DCO-ACK MUST be used in this mode. | |||
| 3. Authenticated: In this mode, RPL uses secure messages. Thus | 3. Authenticated: In this mode, RPL uses secure messages. Thus | |||
| secure versions of DCO, DCO-ACK MUST be used in this mode. | secure versions of DCO, DCO-ACK MUST be used in this mode. | |||
| 8. Normative References | 8. Normative References | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC6550] Winter, T., Ed., Thubert, P., Ed., Brandt, A., Hui, J., | [RFC6550] Winter, T., Ed., Thubert, P., Ed., Brandt, A., Hui, J., | |||
| Kelsey, R., Levis, P., Pister, K., Struik, R., Vasseur, | Kelsey, R., Levis, P., Pister, K., Struik, R., Vasseur, | |||
| JP., and R. Alexander, "RPL: IPv6 Routing Protocol for | JP., and R. Alexander, "RPL: IPv6 Routing Protocol for | |||
| Low-Power and Lossy Networks", RFC 6550, | Low-Power and Lossy Networks", RFC 6550, | |||
| DOI 10.17487/RFC6550, March 2012, | DOI 10.17487/RFC6550, March 2012, | |||
| <https://www.rfc-editor.org/info/rfc6550>. | <https://www.rfc-editor.org/info/rfc6550>. | |||
| [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | ||||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | ||||
| May 2017, <https://www.rfc-editor.org/info/rfc8174>. | ||||
| Appendix A. Example Messaging | Appendix A. Example Messaging | |||
| A.1. Example DCO Messaging | A.1. Example DCO Messaging | |||
| In Figure 1, node (D) switches its parent from (B) to (C). The | In Figure 1, node (D) switches its parent from (B) to (C). This | |||
| sequence of actions is as follows: | example assumes that Node D has already established its own route via | |||
| Node B-G-A-6LBR using pathseq=x. The example uses DAO and DCO | ||||
| messaging convention and specifies only the required parameters to | ||||
| explain the example namely, the parameter 'tgt', which stands for | ||||
| Target Option and value of this parameter specifies the address of | ||||
| the target node. The parameter 'pathseq', which specifies the Path | ||||
| Sequence value carried in the Transit Information Option. The | ||||
| parameter 'I_flag' specifies the 'I' bit in the Transit Information | ||||
| Option. sequence of actions is as follows: | ||||
| 1. Node D switches its parent from node B to node C | 1. Node D switches its parent from node B to node C | |||
| 2. D sends a regular DAO(tgt=D,pathseq=x+1,I_flag=1) in the updated | 2. D sends a regular DAO(tgt=D,pathseq=x+1,I_flag=1) in the updated | |||
| path to C | path to C | |||
| 3. C checks for routing entry on behalf of D, since it cannot find | 3. C checks for a routing entry on behalf of D, since it cannot find | |||
| an entry on behalf of D it creates a new routing entry and | an entry on behalf of D it creates a new routing entry and | |||
| forwards the reachability information of the target D to H in a | forwards the reachability information of the target D to H in a | |||
| DAO. | DAO(tgt=D,pathseq=x+1,I_flag=1). | |||
| 4. Similar to C, node H checks for routing entry on behalf of D, | 4. Similar to C, node H checks for a routing entry on behalf of D, | |||
| cannot find an entry and hence creates a new routing entry and | cannot find an entry and hence creates a new routing entry and | |||
| forwards the reachability information of the target D to H in a | forwards the reachability information of the target D to A in a | |||
| DAO. | DAO(tgt=D,pathseq=x+1,I_flag=1). | |||
| 5. Node A receives the DAO, and checks for routing entry on behalf | 5. Node A receives the DAO(tgt=D,pathseq=x+1,I_flag=1), and checks | |||
| of D. It finds a routing entry but checks that the next hop for | for a routing entry on behalf of D. It finds a routing entry but | |||
| target D is now changed. Node A checks the I_flag and generates | checks that the next hop for target D is different (i.e. Node | |||
| DCO(tgt=D,pathseq=pathseq(DAO)) to previous next hop for target D | G). Node A checks the I_flag and generates | |||
| which is G. Subsequently, A updates the routing entry and | DCO(tgt=D,pathseq=x+1) to previous next hop for target D which is | |||
| forwards the reachability information of target D upstream | G. Subsequently, Node A updates the routing entry and forwards | |||
| DAO(tgt=D,pathseq=x+1,I_flag=x) (the I_flag carries no | the reachability information of target D upstream | |||
| significance henceforth). | DAO(tgt=D,pathseq=x+1,I_flag=1). | |||
| 6. Node G receives the DCO and invalidates routing entry of target D | 6. Node G receives the DCO(tgt=D,pathseq=x+1). It checks if the | |||
| and forwards the (un)reachability information downstream to B. | received path sequence is latest as compared to the stored path | |||
| 7. Similarly, B processes the DCO by invalidating the routing entry | sequence. If it is latest, Node G invalidates routing entry of | |||
| of target D and forwards the (un)reachability information | target D and forwards the (un)reachability information downstream | |||
| downstream to D. | to B in DCO(tgt=D,pathseq=x+1). | |||
| 7. Similarly, B processes the DCO(tgt=D,pathseq=x+1) by invalidating | ||||
| 8. D ignores the DCO since the target is itself. | the routing entry of target D and forwards the (un)reachability | |||
| information downstream to D. | ||||
| 8. D ignores the DCO(tgt=D,pathseq=x+1) since the target is itself. | ||||
| 9. The propagation of the DCO will stop at any node where the node | 9. The propagation of the DCO will stop at any node where the node | |||
| does not have an routing information associated with the target. | does not have an routing information associated with the target. | |||
| If the routing information is present and the pathseq associated | If the routing information is present and its Path Sequence is | |||
| is not older, then still the DCO is dropped. | higher, then still the DCO is dropped. | |||
| A.2. Example DCO Messaging with multiple preferred parents | A.2. Example DCO Messaging with multiple preferred parents | |||
| (6LBR) | (6LBR) | |||
| | | | | |||
| | | | | |||
| | | | | |||
| (N11) | (N11) | |||
| / \ | / \ | |||
| / \ | / \ | |||
| skipping to change at page 15, line 36 ¶ | skipping to change at page 19, line 30 ¶ | |||
| : | / | : | / | |||
| : | / | : | / | |||
| : | / | : | / | |||
| (N41) | (N41) | |||
| Figure 5: Sample topology 2 | Figure 5: Sample topology 2 | |||
| In Figure 5, node (N41) selects multiple preferred parents (N32) and | In Figure 5, node (N41) selects multiple preferred parents (N32) and | |||
| (N33). The sequence of actions is as follows: | (N33). The sequence of actions is as follows: | |||
| 1. (N41) sends DAO(tgt=N41,PS=x,I_flag=1) to (N32) and (N33). Here | 1. (N41) sends DAO(tgt=N41,PS=x,I_flag=1) to (N32) and (N33). Here | |||
| I_flag refers to the Invalidation flag and PS refers to Path | I_flag refers to the Invalidation flag and PS refers to Path | |||
| Sequence in Transit Information option. | Sequence in Transit Information option. | |||
| 2. (N32) sends DAO(tgt=N41,PS=x,I_flag=1) to (N22). (N33) also | 2. (N32) sends DAO(tgt=N41,PS=x,I_flag=1) to (N22). (N33) also | |||
| sends DAO(tgt=N41,PS=x,I_flag=1) to (N22). (N22) learns multiple | sends DAO(tgt=N41,PS=x,I_flag=1) to (N22). (N22) learns | |||
| routes for the same destination (N41) through multiple next-hops. | multiple routes for the same destination (N41) through multiple | |||
| The route table at N22 should contain (Dst,NextHop,PS): { | next-hops. (N22) may receive the DAOs from (N32) and (N33) in | |||
| (N41,N32,x), (N41,N33,x) }. | any order with the I_flag set. The implementation should use | |||
| 3. (N22) sends DAO(tgt=N41,PS=x,I_flag=1) to (N11). | the DelayDCO timer to wait to initiate the DCO. If (N22) | |||
| 4. (N11) sends DAO(tgt=N41,PS=x,I_flag=1) to (6LBR). Thus the | receives an updated DAO from all the paths then the DCO need not | |||
| complete path is established. | be initiated in this case. Thus the route table at N22 should | |||
| 5. (N41) decides to change preferred parent set from { N32, N33 } to | contain (Dst,NextHop,PS): { (N41,N32,x), (N41,N33,x) }. | |||
| { N31, N32 }. | 3. (N22) sends DAO(tgt=N41,PS=x,I_flag=1) to (N11). | |||
| 6. (N41) sends DAO(tgt=N41,PS=x+1,I_flag=1) to (N32). (N41) sends | 4. (N11) sends DAO(tgt=N41,PS=x,I_flag=1) to (6LBR). Thus the | |||
| DAO(tgt=N41,PS=x+1,I_flag=1) to (N31). | complete path is established. | |||
| 7. (N32) sends DAO(tgt=N41,PS=x+1,I_flag=1) to (N22). (N22) has | 5. (N41) decides to change preferred parent set from { N32, N33 } | |||
| multiple routes to destination (N41). It sees that a new path | to { N31, N32 }. | |||
| sequence for Target=N41 is received and thus it waits for pre- | 6. (N41) sends DAO(tgt=N41,PS=x+1,I_flag=1) to (N32). (N41) sends | |||
| determined time period to invalidate another route | DAO(tgt=N41,PS=x+1,I_flag=1) to (N31). | |||
| {(N41),(N33),x}. After time period, (N22) sends | 7. (N32) sends DAO(tgt=N41,PS=x+1,I_flag=1) to (N22). (N22) has | |||
| DCO(tgt=N41,PS=x+1) to (N33). | multiple routes to destination (N41). It sees that a new Path | |||
| Sequence for Target=N41 is received and thus it waits for pre- | ||||
| determined time period (DelayDCO time period) to invalidate | ||||
| another route {(N41),(N33),x}. After time period, (N22) sends | ||||
| DCO(tgt=N41,PS=x+1) to (N33). Also (N22) sends the regular | ||||
| DAO(tgt=N41,PS=x+1,I_flag=1) to (N11). | ||||
| 8. (N33) receives DCO(tgt=N41,PS=x+1). The received Path Sequence | ||||
| is latest and thus it invalidates the entry associated with | ||||
| target (N41). (N33) then sends the DCO(tgt=N41,PS=x+1) to | ||||
| (N41). (N41) sees itself as the target and drops the DCO. | ||||
| 9. From Step 6 above, (N31) receives the | ||||
| DAO(tgt=N41,PS=x+1,I_flag=1). It creates a routing entry and | ||||
| sends the DAO(tgt=N41,PS=x+1,I_flag=1) to (N21). Similarly | ||||
| (N21) receives the DAO and subsequently sends the | ||||
| DAO(tgt=N41,PS=x+1,I_flag=1) to (N11). | ||||
| 10. (N11) receives DAO(tgt=N41,PS=x+1,I_flag=1) from (N21). It | ||||
| waits for DelayDCO timer since it has multiple routes to (N41). | ||||
| (N41) will receive DAO(tgt=N41,PS=x+1,I_flag=1) from (N22) from | ||||
| Step 7 above. Thus (N11) has received regular | ||||
| DAO(tgt=N41,PS=x+1,I_flag=1) from all paths and thus does not | ||||
| initiate DCO. | ||||
| 11. (N11) forwards the DAO(tgt=N41,PS=x+1,I_flag=1) to 6LBR and the | ||||
| full path is established. | ||||
| Authors' Addresses | Authors' Addresses | |||
| Rahul Arvind Jadhav (editor) | Rahul Arvind Jadhav (editor) | |||
| Huawei | Huawei | |||
| Kundalahalli Village, Whitefield, | Kundalahalli Village, Whitefield, | |||
| Bangalore, Karnataka 560037 | Bangalore, Karnataka 560037 | |||
| India | India | |||
| Phone: +91-080-49160700 | Phone: +91-080-49160700 | |||
| End of changes. 67 change blocks. | ||||
| 236 lines changed or deleted | 451 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||