| < draft-ietf-roll-efficient-npdao-02.txt | draft-ietf-roll-efficient-npdao-03.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: September 22, 2018 Cisco | Expires: September 30, 2018 Cisco | |||
| R. Sahoo | R. Sahoo | |||
| Z. Cao | Z. Cao | |||
| Huawei | Huawei | |||
| March 21, 2018 | March 29, 2018 | |||
| No-Path DAO modifications | Efficient Route Invalidation | |||
| draft-ietf-roll-efficient-npdao-02 | draft-ietf-roll-efficient-npdao-03 | |||
| Abstract | Abstract | |||
| This document describes the problems associated with the use of No- | This document describes the problems associated with the use of No- | |||
| Path DAO messaging in RPL and a signaling changes to improve route | Path DAO messaging in RPL and signaling changes to improve route | |||
| invalidation efficiency. | 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 September 22, 2018. | This Internet-Draft will expire on September 30, 2018. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2018 IETF Trust and the persons identified as the | Copyright (c) 2018 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 No-Path DAO messaging . . . . . . . . . . . . . . 3 | 1.2. Current No-Path DAO messaging . . . . . . . . . . . . . . 4 | |||
| 1.3. Cases when No-Path DAO may be used . . . . . . . . . . . 4 | 1.3. Cases when No-Path DAO may be used . . . . . . . . . . . 4 | |||
| 1.4. Why No-Path DAO is important? . . . . . . . . . . . . . . 5 | 1.4. Why No-Path DAO is important? . . . . . . . . . . . . . . 5 | |||
| 2. Problems with current No-Path DAO messaging . . . . . . . . 5 | 2. Problems with current No-Path DAO messaging . . . . . 5 | |||
| 2.1. Lost NP-DAO due to link break to the previous parent . . 5 | 2.1. Lost NPDAO due to link break to the previous parent . . . 5 | |||
| 2.2. Invalidate routes to dependent nodes of the switching | 2.2. Invalidate routes to dependent nodes of the switching | |||
| node . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | node . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 2.3. Route downtime caused by asynchronous operation of | 2.3. Route downtime caused by asynchronous operation of | |||
| NPDAO and DAO . . . . . . . . . . . . . . . . . . . . . . 6 | NPDAO and DAO . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 3. Requirements for the No-Path DAO Optimization . . . . . . . . 6 | 3. Requirements for the No-Path DAO Optimization . . . . . . . . 6 | |||
| 3.1. Req#1: Tolerant to the link failures to the previous | 3.1. Req#1: Tolerant to link failures to the previous | |||
| parents . . . . . . . . . . . . . . . . . . . . . . . . . 6 | parents . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 3.2. Req#2: Dependent nodes route invalidation on parent | 3.2. Req#2: Dependent nodes route invalidation on parent | |||
| switching . . . . . . . . . . . . . . . . . . . . . . . . 6 | switching . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 3.3. Req#3: No impact on traffic while NP-DAO operation in | 3.3. Req#3: No impact on traffic while NPDAO operation in | |||
| progress . . . . . . . . . . . . . . . . . . . . . . . . 7 | progress . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 4. Proposed changes to RPL signaling . . . . . . . . . . . . . . 7 | 4. Proposed changes to RPL signaling . . . . . . . . . . . . . . 7 | |||
| 4.1. Change in NPDAO semantics . . . . . . . . . . . . . . . . 7 | 4.1. Change in RPL route invalidation semantics . . . . . . . 7 | |||
| 4.2. DAO message format changes . . . . . . . . . . . . . . . 7 | 4.2. DAO message format changes . . . . . . . . . . . . . . . 7 | |||
| 4.3. Destination Cleanup Object (DCO) . . . . . . . . . . . . 8 | 4.3. Destination Cleanup Object (DCO) . . . . . . . . . . . . 8 | |||
| 4.3.1. DCO Options . . . . . . . . . . . . . . . . . . . . . 10 | 4.3.1. Secure DCO . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 4.3.2. Path Sequence number in the DCO . . . . . . . . . . . 10 | 4.3.2. DCO Options . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 4.3.3. Destination Cleanup Option Acknowledgement (DCO-ACK) 10 | 4.3.3. Path Sequence number in the DCO . . . . . . . . . . . 10 | |||
| 4.4. Example messaging . . . . . . . . . . . . . . . . . . . . 11 | 4.3.4. Destination Cleanup Option Acknowledgement (DCO-ACK) 10 | |||
| 4.5. Other considerations . . . . . . . . . . . . . . . . . . 12 | 4.3.5. Secure DCO-ACK . . . . . . . . . . . . . . . . . . . 11 | |||
| 4.5.1. Dependent Nodes invalidation . . . . . . . . . . . . 12 | 4.4. Other considerations . . . . . . . . . . . . . . . . . . 11 | |||
| 5. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 13 | 4.4.1. Dependent Nodes invalidation . . . . . . . . . . . . 11 | |||
| 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 13 | 4.4.2. NPDAO and DCO in the same network . . . . . . . . . . 12 | |||
| 7. Security Considerations . . . . . . . . . . . . . . . . . . . 13 | 5. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 13 | 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 7. Security Considerations . . . . . . . . . . . . . . . . . . . 12 | ||||
| 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 12 | ||||
| 8.1. Normative References . . . . . . . . . . . . . . . . . . 13 | 8.1. Normative References . . . . . . . . . . . . . . . . . . 13 | |||
| 8.2. Informative References . . . . . . . . . . . . . . . . . 14 | 8.2. Informative References . . . . . . . . . . . . . . . . . 13 | |||
| Appendix A. Additional Stuff . . . . . . . . . . . . . . . . . . 14 | Appendix A. Example DCO Messaging . . . . . . . . . . . . . . . 13 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 14 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 1. Introduction | 1. Introduction | |||
| RPL [RFC6550] specifies a proactive distance-vector based routing | RPL [RFC6550] specifies a proactive distance-vector based routing | |||
| scheme. The specification has an optional messaging in the form of | scheme. The specification has an optional messaging in the form of | |||
| DAO messages using which the 6LBR can learn route towards any of the | DAO messages using which the 6LBR can learn route towards any of the | |||
| nodes. In storing mode, DAO messages would result in routing entries | nodes. In storing mode, DAO messages would result in routing entries | |||
| been created on all intermediate hops from the node's parent all the | been created on all intermediate hops from the node's parent all the | |||
| way towards the 6LBR. | way towards the 6LBR. | |||
| skipping to change at page 3, line 39 ¶ | skipping to change at page 3, line 46 ¶ | |||
| 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. | |||
| Common Ancestor node: 6LR node which is the first common node on the | Common Ancestor node: 6LR node which is the first common node on the | |||
| old and new path for the child node. | old and new path for the child node. | |||
| NPDAO: No-Path DAO. A DAO message which has target with lifetime 0. | NPDAO: No-Path DAO. A DAO message which has target with lifetime 0. | |||
| DCO: A new RPL control message type defined by this specification and | DCO: Destination Cleanup Object, A new RPL control message type | |||
| stands for Destination Cleanup Object. | defined by this draft. | |||
| Regular DAO: A DAO message with non-zero lifetime. | Regular DAO: A DAO message with non-zero lifetime. | |||
| This document also uses terminology described in [RFC6550]. | This document also uses terminology described in [RFC6550]. | |||
| 1.2. Current No-Path DAO messaging | 1.2. Current No-Path DAO messaging | |||
| RPL introduced No-Path DAO messaging in the storing mode so that the | RPL introduced No-Path DAO messaging in the storing mode so that the | |||
| node switching its current parent can inform its parents and | node switching its current parent can inform its parents and | |||
| ancestors to invalidate the existing route. Subsequently parents or | ancestors to invalidate the existing route. Subsequently parents or | |||
| ancestors would release any resources (such as the routing entry) it | ancestors would release any resources (such as the routing entry) it | |||
| maintains on behalf of target node. The NPDAO message always | maintains on behalf of target node. The NPDAO message always | |||
| traverses the RPL tree in upward direction, originating at the target | traverses the RPL tree in upward direction, originating at the target | |||
| node itself. | node itself. | |||
| For the rest of this document consider the following topology: | For the rest of this document consider the following topology: | |||
| (6LBR) | (6LBR) | |||
| | | | | |||
| | | | | |||
| | | | | |||
| (A) | (A) | |||
| / \ | ||||
| / \ | ||||
| / \ | ||||
| (G) (H) | ||||
| | | | ||||
| | | | ||||
| | | | ||||
| (B) (C) | ||||
| \ ; | ||||
| \ ; | ||||
| \ ; | ||||
| (D) | ||||
| / \ | / \ | |||
| / \ | / \ | |||
| / \ | / \ | |||
| (G) (H) | (E) (F) | |||
| | | | ||||
| | | | ||||
| | | | ||||
| (B) (C) | ||||
| \ ; | ||||
| \ ; | ||||
| \ ; | ||||
| (D) | ||||
| / \ | ||||
| / \ | ||||
| / \ | ||||
| (E) (F) | ||||
| Figure 1: Sample topology | Figure 1: Sample topology | |||
| Node (D) is connected via preferred parent (B). (D) has an alternate | Node (D) is connected via preferred parent (B). (D) has an alternate | |||
| path via (C) towards the BR. Node (A) is the common ancestor for (D) | path via (C) towards the BR. Node (A) is the common ancestor for (D) | |||
| for paths through (B)-(G) and (C)-(H). When (D) switches from (B) to | for paths through (B)-(G) and (C)-(H). When (D) switches from (B) to | |||
| (C), [RFC6550] suggests sending No-Path DAO to (B) and regular DAO to | (C), [RFC6550] suggests sending No-Path DAO to (B) and regular DAO to | |||
| (C). | (C). | |||
| 1.3. Cases when No-Path DAO may be used | 1.3. Cases when No-Path DAO may be used | |||
| skipping to change at page 5, line 30 ¶ | skipping to change at page 5, line 36 ¶ | |||
| necessary to have efficient route invalidation mechanism. Also note | necessary to have efficient route invalidation mechanism. Also note | |||
| that a single parent switch may result in a "sub-tree" switching from | that a single parent switch may result in a "sub-tree" switching from | |||
| one parent to another. Thus the route invalidation needs to be done | one parent to another. Thus the route invalidation needs to be done | |||
| on behalf of the sub-tree and not the switching node alone. In the | on behalf of the sub-tree and not the switching node alone. In the | |||
| above example, when Node (D) switches parent, the route invalidation | above example, when Node (D) switches parent, the route invalidation | |||
| needs to be done for (D), (E) and (F). Thus without efficient route | needs to be done for (D), (E) and (F). Thus without efficient route | |||
| invalidation, a 6LR may have to hold a lot of unwanted route entries. | invalidation, a 6LR may have to hold a lot of unwanted route entries. | |||
| 2. Problems with current No-Path DAO messaging | 2. Problems with current No-Path DAO messaging | |||
| 2.1. Lost NP-DAO 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 via its | When a node switches its parent, the NPDAO is to be sent via its | |||
| previous parent and a regular DAO via its new parent. In cases where | previous parent and a regular DAO via 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. RPL | link/node failure then the NPDAO message is bound to fail. RPL | |||
| assumes communication link with the previous parent for No-Path DAO | assumes communication link with the previous parent for No-Path DAO | |||
| messaging. | messaging. | |||
| RPL allows use of route lifetime to remove unwanted routes in case | RPL allows use of route lifetime to remove unwanted routes in case | |||
| the routes could not be refreshed. But route lifetimes in case of | the routes could not be refreshed. But route lifetimes in case of | |||
| LLNs could be substantially high and thus the route entries would be | LLNs could be substantially high and thus the route entries would be | |||
| stuck for long. | stuck for longer times. | |||
| 2.2. Invalidate routes to dependent nodes of the switching node | 2.2. Invalidate routes to dependent nodes of the switching node | |||
| No-path DAO is sent by the node who has switched the parent but it | No-path DAO is sent by the node who has switched the parent but it | |||
| does not work for the dependent child nodes below it. The | does not work for the dependent child nodes below it. The | |||
| specification does not specify how route invalidation will work for | specification does not specify how route invalidation will work for | |||
| sub-childs, resulting in stale routing entries on behalf of the sub- | sub-childs, resulting in stale routing entries on behalf of the sub- | |||
| childs on the previous route. The only way for 6LR to invalidate the | childs on the previous route. The only way for 6LR to invalidate the | |||
| route entries for dependent nodes would be to use route lifetime | route entries for dependent nodes would be to use route lifetime | |||
| expiry which could be substantially high for LLNs. | expiry which could be substantially high for LLNs. | |||
| skipping to change at page 6, line 28 ¶ | skipping to change at page 6, line 38 ¶ | |||
| 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 thus impacting downward traffic for the switching node. In | downtime thus impacting downward traffic for the switching node. In | |||
| the example topology, consider Node (D) switches from parent (B) to | the example topology, consider Node (D) switches from parent (B) to | |||
| (C) because the metrics of the path via (C) are better. Note that | (C) because the metrics of the path via (C) are better. Note that | |||
| the previous path via (B) may still be available (albeit at | the previous path via (B) may still be available (albeit at | |||
| relatively bad metrics). An NPDAO sent from previous route may | relatively bad metrics). An NPDAO sent from previous route may | |||
| invalidate the existing route whereas there is no way to determine | invalidate the existing route whereas there is no way to determine | |||
| whether the new DAO has successfully updated the route entries on the | whether the new DAO has successfully updated the route entries on the | |||
| new path. | new path. | |||
| An implementation technique to avoid this problem is to further delay | ||||
| the route invalidation by a fixed time interval after receiving an | ||||
| NPDAO, considering the time taken for the new path to be established. | ||||
| Coming up with such a time interval is tricky since the new route may | ||||
| also not be available and it may subsequently require more parent | ||||
| switches to establish a new path. | ||||
| 3. Requirements for the No-Path DAO Optimization | 3. Requirements for the No-Path DAO Optimization | |||
| 3.1. Req#1: Tolerant to the link failures to the previous parents | 3.1. Req#1: Tolerant to link failures to the previous parents | |||
| When the switching node send the NP-DAO message to the previous | When the switching node send 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. Therefore, it is required that the NP-DAO message MUST be | failure. Therefore, it is required that the NPDAO message MUST be | |||
| tolerant to the link failure during the switching. | tolerant to the link failure during the switching. | |||
| 3.2. Req#2: Dependent nodes route invalidation on parent switching | 3.2. Req#2: Dependent nodes route invalidation on parent switching | |||
| While switching the parent node and sending NP-DAO message, it is | While switching the parent node and sending NPDAO message, it is | |||
| required that the routing entries to the dependent nodes of the | required that the routing entries to the dependent nodes of the | |||
| switching node will be updated accordingly on the previous parents | switching node will be updated accordingly on the previous parents | |||
| and other relevant upstream nodes. | and other relevant upstream nodes. | |||
| 3.3. Req#3: No impact on traffic while NP-DAO operation in progress | 3.3. Req#3: No impact on traffic while NPDAO operation in progress | |||
| While sending the NP-DAO and DAO messages, it is possible that the | While sending the NPDAO and DAO messages, it is possible that the | |||
| NP-DAO 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 into downstream unreachability to the current switching node. | result into downstream unreachability to the current switching node. | |||
| Therefore, it is desirable that the NP-DAO is synchronized with the | Therefore, it is desirable that the NPDAO is synchronized with the | |||
| DAO to avoid the risk of route downtime. | DAO to avoid the risk of route downtime. | |||
| 4. Proposed changes to RPL signaling | 4. Proposed changes to RPL signaling | |||
| 4.1. Change in NPDAO 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 | switching the parent and traverses upstream towards the root. In | |||
| order to solve the problems as mentioned in Section 2, the draft | order to solve the problems as mentioned in Section 2, the draft adds | |||
| proposes to add new pro-active route invalidation message called as | new pro-active route invalidation message called as "Destination | |||
| "Destination Cleanup Object" (DCO) that originates at a common | Cleanup Object" (DCO) that originates at a common ancestor node | |||
| ancestor node between the new and old path. The trigger for the | between the new and old path. The trigger for the common ancestor | |||
| common ancestor node to generate this DCO is the change in the next | node to generate this DCO is the change in the next hop for the | |||
| hop for the target on reception of an update message in the form of | target on reception of an update message in the form of regular DAO | |||
| regular DAO for the target. | for the target. | |||
| In the Figure 1, when node D decides to switch the path from B to C, | In the 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 | it 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 a incremented path sequence | |||
| number. Node C will update the routing table based on the | number. Node C will update the routing table based on the | |||
| reachability information in DAO and in turn generate another DAO with | reachability information in DAO and in turn generate another DAO with | |||
| the same reachability information and forward it to H. Node H also | the same reachability information and forward it to H. Node H also | |||
| follows the same procedure as Node C and forwards it to node A. When | follows the same procedure as Node C and forwards it to node A. When | |||
| node A receives the regular DAO, it finds that it already has a | node A receives the regular DAO, it finds that it already has a | |||
| routing table entry on behalf of the target address of node D. It | routing table entry on behalf of the target address of node D. It | |||
| skipping to change at page 8, line 14 ¶ | skipping to change at page 8, line 14 ¶ | |||
| targets. Similarly, a Transit Information option may be associated | targets. Similarly, a Transit Information option may be associated | |||
| with a set of RPL Target options. | with a set of RPL Target options. | |||
| The draft proposes a change in DAO message to contain "Invalidate | The draft proposes a change in DAO message to contain "Invalidate | |||
| previous route" (I) bit. This I-bit which is carried in regular DAO | previous route" (I) bit. This I-bit which is carried in regular DAO | |||
| message, signals the common ancestor node to generate a DCO on behalf | message, signals the common ancestor node to generate a DCO on behalf | |||
| of the target node. The I-bit is carried in the transit container | of the target node. The I-bit is carried in the transit container | |||
| option which augments the reachability information for a given set of | option which augments the reachability information for a given set of | |||
| RPL Target(s). | RPL 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: 1 bit flag. The 'I' flag is set | |||
| by the target node to indicate that it wishes to invalidate the | by the target node to indicate that it wishes to invalidate the | |||
| previous route by a common ancestor node between the two paths. | previous route by a common ancestor node between the two paths. | |||
| 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 | ||||
| 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 | ||||
| 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 | |||
| specification called as "Destination Cleanup Object" (DCO), which is | specification called as "Destination Cleanup Object" (DCO), which is | |||
| used for proactive cleanup of state and routing information held on | used for proactive cleanup of state and routing information held on | |||
| behalf of the target node by 6LRs. The DCO message always traverses | behalf of the target node by 6LRs. The DCO message always traverses | |||
| downstream and cleans up route information and other state | downstream and cleans up route information and other state | |||
| information associated with the given target. | information associated with the given 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 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | RPLInstanceID |K|D| Flags | Reserved | DCOSequence | | | RPLInstanceID |K|D| Flags | Reserved | DCOSequence | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| + + | + + | |||
| | | | | | | |||
| + DODAGID(optional) + | + DODAGID(optional) + | |||
| | | | | | | |||
| + + | + + | |||
| | | | | | | |||
| skipping to change at page 9, line 47 ¶ | skipping to change at page 9, line 47 ¶ | |||
| 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. | echoed in the DCO-ACK message. | |||
| 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 is only present when the 'D' | |||
| flag is set. This field is typically only present when a local | flag is set. This field is typically only present when a local | |||
| RPLInstanceID is in use, in order to identify the DODAGID that is | RPLInstanceID is in use, in order to identify the DODAGID that is | |||
| associated with the RPLInstanceID. When a global RPLInstanceID is in | associated with the RPLInstanceID. When a global RPLInstanceID is in | |||
| use, this field need not be present. Unassigned bits of the DAO Base | 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 | are reserved. They MUST be set to zero on transmission and MUST be | |||
| ignored on reception. | ignored on reception. | |||
| 4.3.1. DCO Options | 4.3.1. Secure DCO | |||
| A Secure DCO message follows the format in [RFC6550] figure 7, where | ||||
| the base message format is the DCO message shown in Figure 3. | ||||
| 4.3.2. DCO Options | ||||
| The DCO message MAY carry valid options. This specification allows | The DCO message MAY carry valid options. This specification allows | |||
| for the DCO message to carry the following options: | 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 a Target option and an associated Transit Information | |||
| option with a lifetime of 0x00000000 to indicate a loss of | option with a lifetime of 0x00000000 to indicate a loss of | |||
| reachability to that Target. | reachability to that Target. | |||
| 4.3.2. 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 and should use the same Path Sequence number | Sequence in the DCO MUST use the same Path Sequence number present in | |||
| present in the regular DAO message when the DCO is generated in | the regular DAO message when the DCO is generated in response to DAO | |||
| response to DAO message. | message. | |||
| 4.3.3. Destination Cleanup Option Acknowledgement (DCO-ACK) | 4.3.4. Destination Cleanup Option Acknowledgement (DCO-ACK) | |||
| The DCO-ACK message is sent as a unicast packet by a DCO recipient in | The DCO-ACK message may be sent as a unicast packet by a DCO | |||
| response to a unicast DCO message. | recipient in response to a unicast DCO message. | |||
| 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) + | |||
| | | | | | | |||
| + + | + + | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 4: DCO-ACK base object | Figure 4: DCO-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 | |||
| 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 | |||
| skipping to change at page 11, line 23 ¶ | skipping to change at page 11, line 26 ¶ | |||
| 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. 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 is only present when the 'D' | |||
| flag is set. This field is typically only present when a local | flag is set. This field is typically only present when a local | |||
| RPLInstanceID is in use, in order to identify the DODAGID that is | RPLInstanceID is in use, in order to identify the DODAGID that is | |||
| associated with the RPLInstanceID. When a global RPLInstanceID is in | associated with the RPLInstanceID. When a global RPLInstanceID is in | |||
| use, this field need not be present. Unassigned bits of the DAO Base | use, this field need not be present. Unassigned bits of the DCO-Ack | |||
| are reserved. They MUST be set to zero on transmission and MUST be | Base are reserved. They MUST be set to zero on transmission and MUST | |||
| ignored on reception. | be ignored on reception. | |||
| 4.4. Example messaging | ||||
| In Figure 1, node (D) switches its parent from (B) to (C). The | ||||
| sequence of actions is as follows: | ||||
| 1. Node D switches its parent from node B to node C | 4.3.5. Secure DCO-ACK | |||
| 2. D sends a regular DAO(tgt=D,pathseq=x+1,I_flag=1) in the updated | ||||
| path to C | ||||
| 3. C checks for routing entry on behalf of D, since it cannot find | ||||
| 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 | ||||
| DAO. | ||||
| 4. Similar to C, node H checks for routing entry on behalf of D, | ||||
| cannot find an entry and hence creates a new routing entry and | ||||
| forwards the reachability information of the target D to H in a | ||||
| DAO. | ||||
| 5. Node A receives the DAO, and checks for routing entry on behalf | ||||
| of D. It finds a routing entry but checks that the next hop for | ||||
| target D is now changed. Node A checks the I_flag and generates | ||||
| DCO(tgt=D,pathseq=pathseq(DAO)) to previous next hop for target D | ||||
| which is G. Subsequently, A updates the routing entry and | ||||
| forwards the reachability information of target D upstream | ||||
| DAO(tgt=D,pathseq=x+1,I_flag=x) (the I_flag carries no | ||||
| significance henceforth). | ||||
| 6. Node G receives the DCO and invalidates routing entry of target D | ||||
| and forwards the (un)reachability information downstream to B. | ||||
| 7. Similarly, B processes the DCO by invalidating the routing entry | A Secure DCO-ACK message follows the format in [RFC6550] figure 7, | |||
| of target D and forwards the (un)reachability information | where the base message format is the DCO-ACK message shown in | |||
| downstream to D. | Figure 4. | |||
| 8. D ignores the DCO since the target is itself. | ||||
| 9. The propagation of the DCO will stop at any node where the node | ||||
| does not have an routing information associated with the target. | ||||
| If the routing information is present and the pathseq associated | ||||
| is not older, then still the DCO is dropped. | ||||
| 4.5. Other considerations | 4.4. Other considerations | |||
| 4.5.1. Dependent Nodes invalidation | 4.4.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. | invalidation for dependent nodes. This document allows the dependent | |||
| nodes invalidation. Dependent nodes will generate their respective | ||||
| This section describes approaches for invalidating routes of | DAOs to update their paths, and the previous route invalidation for | |||
| dependent nodes if the implementation chooses to solve this problem. | those nodes should work in the similar manner described for switching | |||
| The common ancestor node realizes that the paths for dependent nodes | node. The dependent node may set the I-bit in the transit | |||
| have changed (based on next hop change) when it receives a regular | information container as part of regular DAO so as to request | |||
| DAO on behalf of the dependent nodes. Thus dependent nodes route | invalidation of previous route from the common ancestor node. | |||
| invalidation can be handled in the same way as the switching node. | ||||
| Note that there is no way that dependent nodes can set the I_flag in | ||||
| the DAO message selectively since they are unaware that their parent/ | ||||
| grand parent node is switching paths. There are two ways to handle | ||||
| dependent node route invalidation: | ||||
| 1. One way to resolve is that the common ancestor does not depend | 4.4.2. NPDAO and DCO in the same network | |||
| upon the I_flag to generate the reverse NPDAO. The only factor | ||||
| it makes the decision will be based on next_hop change for an | ||||
| existing target to generate the NPDAO. Thus when the switching | ||||
| nodes and all the below dependent nodes advertise a regular DAO, | ||||
| the common ancestor node will detect a change in next hop and | ||||
| generate NPDAO for the same target as in the regular DAO. | ||||
| 2. Another way is that the nodes always set the I_flag whenever they | ||||
| send regular DAO. Thus common ancestor will first check whether | ||||
| I_flag is set and then check whether the next_hop has changed and | ||||
| subsequently trigger DCO if required. | ||||
| This document recommends the approach in point 2. The advantage with | Even with the changed semantics, the current NPDAO mechanism in | |||
| I_flag is that the generation of downstream NPDAO is still controlled | [RFC6550] can still be used. There are certain scenarios where | |||
| by the target node and thus is still in control of its own routing | current NPDAO signalling may still be used, for example, when the | |||
| state. | route lifetime expiry of the target happens or when the node simply | |||
| decides to gracefully terminate the RPL session on graceful node | ||||
| shutdown. Moreover a deployment can have a mix of nodes supporting | ||||
| the proposed DCO and the existing NPDAO mechanism. | ||||
| 5. Acknowledgements | 5. Acknowledgements | |||
| We would like to thank Cenk Gundogan, Simon Duquennoy and Pascal | We would like to thank Cenk Gundogan and Simon Duquennoy for their | |||
| Thubert for their review and comments. | review and 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 ICMPv6 RPL control codes in RPL | |||
| [RFC6550] for DCO and DCO-ACK messages. | [RFC6550] for DCO and DCO-ACK messages. | |||
| +------+--------------------------------------------+---------------+ | +------+---------------------------------------------+--------------+ | |||
| | Code | Description | Reference | | | Code | Description | Reference | | |||
| +------+--------------------------------------------+---------------+ | +------+---------------------------------------------+--------------+ | |||
| | 0x85 | Destination Cleanup Object | This document | | | 0x04 | Destination Cleanup Object | This | | |||
| | 0x86 | Destination Cleanup Object Acknowledgement | This document | | | | | document | | |||
| +------+--------------------------------------------+---------------+ | | 0x05 | Destination Cleanup Object Acknowledgement | This | | |||
| | | | document | | ||||
| | 0x84 | Secure Destination Cleanup Object | This | | ||||
| | | | document | | ||||
| | 0x85 | Secure Destination Cleanup Object | This | | ||||
| | | Acknowledgement | document | | ||||
| +------+---------------------------------------------+--------------+ | ||||
| IANA is requested to allocate bit 18 in the Transit Information | IANA is requested to allocate bit 18 in the Transit Information | |||
| Option defined in RPL [RFC6550] section 6.7.8 for Invalidate route | Option defined in RPL [RFC6550] section 6.7.8 for Invalidate route | |||
| 'I' flag. | 'I' flag. | |||
| 7. Security Considerations | 7. Security Considerations | |||
| The secure versions of DCO and DCO-ACK also have to be considered in | This document handles security considerations inline to base RPL. | |||
| the future. The seucrity considerations applicable to DAO, DAO-ACK | Secure versions of DCO and DCO-ACK are added similar to other RPL | |||
| messaging in RPL is also applicable here. | messages. For general RPL security considerations, see [RFC6550]. | |||
| 8. References | 8. References | |||
| 8.1. Normative References | 8.1. Normative References | |||
| [I-D.ietf-6tisch-architecture] | ||||
| Thubert, P., "An Architecture for IPv6 over the TSCH mode | ||||
| of IEEE 802.15.4", draft-ietf-6tisch-architecture-13 (work | ||||
| in progress), November 2017. | ||||
| [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>. | |||
| 8.2. Informative References | 8.2. Informative References | |||
| [CONTIKI] Thingsquare, "Contiki: The Open Source OS for IoT", 2012, | [I-D.ietf-6tisch-architecture] | |||
| <http://www.contiki-os.org>. | Thubert, P., "An Architecture for IPv6 over the TSCH mode | |||
| of IEEE 802.15.4", draft-ietf-6tisch-architecture-13 (work | ||||
| in progress), November 2017. | ||||
| [RFC3552] Rescorla, E. and B. Korver, "Guidelines for Writing RFC | Appendix A. Example DCO Messaging | |||
| Text on Security Considerations", BCP 72, RFC 3552, | ||||
| DOI 10.17487/RFC3552, July 2003, | ||||
| <https://www.rfc-editor.org/info/rfc3552>. | ||||
| Appendix A. Additional Stuff | In Figure 1, node (D) switches its parent from (B) to (C). The | |||
| sequence of actions is as follows: | ||||
| This becomes an Appendix. | 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 | ||||
| path to C | ||||
| 3. C checks for routing entry on behalf of D, since it cannot find | ||||
| 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 | ||||
| DAO. | ||||
| 4. Similar to C, node H checks for routing entry on behalf of D, | ||||
| cannot find an entry and hence creates a new routing entry and | ||||
| forwards the reachability information of the target D to H in a | ||||
| DAO. | ||||
| 5. Node A receives the DAO, and checks for routing entry on behalf | ||||
| of D. It finds a routing entry but checks that the next hop for | ||||
| target D is now changed. Node A checks the I_flag and generates | ||||
| DCO(tgt=D,pathseq=pathseq(DAO)) to previous next hop for target D | ||||
| which is G. Subsequently, A updates the routing entry and | ||||
| forwards the reachability information of target D upstream | ||||
| DAO(tgt=D,pathseq=x+1,I_flag=x) (the I_flag carries no | ||||
| significance henceforth). | ||||
| 6. Node G receives the DCO and invalidates routing entry of target D | ||||
| and forwards the (un)reachability information downstream to B. | ||||
| 7. Similarly, B processes the DCO by invalidating the routing entry | ||||
| of target D and forwards the (un)reachability information | ||||
| downstream to D. | ||||
| 8. D ignores the DCO since the target is itself. | ||||
| 9. The propagation of the DCO will stop at any node where the node | ||||
| does not have an routing information associated with the target. | ||||
| If the routing information is present and the pathseq associated | ||||
| is not older, then still the DCO is dropped. | ||||
| 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 | |||
| Email: rahul.ietf@gmail.com | Email: rahul.ietf@gmail.com | |||
| Pascal Thubert | Pascal Thubert | |||
| Cisco Systems, Inc | Cisco Systems, Inc | |||
| Building D | Building D | |||
| 45 Allee des Ormes - BP1200 | 45 Allee des Ormes - BP1200 | |||
| MOUGINS - Sophia Antipolis 06254 | MOUGINS - Sophia Antipolis 06254 | |||
| FRANCE | France | |||
| Phone: +33 497 23 26 34 | Phone: +33 497 23 26 34 | |||
| Email: pthubert@cisco.com | Email: pthubert@cisco.com | |||
| Rabi Narayan Sahoo | Rabi Narayan Sahoo | |||
| Huawei | Huawei | |||
| Kundalahalli Village, Whitefield, | Kundalahalli Village, Whitefield, | |||
| Bangalore, Karnataka 560037 | Bangalore, Karnataka 560037 | |||
| India | India | |||
| End of changes. 57 change blocks. | ||||
| 187 lines changed or deleted | 180 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/ | ||||