| < draft-ietf-roll-useofrplinfo-26.txt | draft-ietf-roll-useofrplinfo-27.txt > | |||
|---|---|---|---|---|
| ROLL Working Group M. Robles | ROLL Working Group M. Robles | |||
| Internet-Draft Aalto | Internet-Draft Aalto | |||
| Updates: 6553, 6550, 8138 (if approved) M. Richardson | Updates: 6553, 6550, 8138 (if approved) M. Richardson | |||
| Intended status: Standards Track SSW | Intended status: Standards Track SSW | |||
| Expires: November 16, 2019 P. Thubert | Expires: November 17, 2019 P. Thubert | |||
| Cisco | Cisco | |||
| May 15, 2019 | May 16, 2019 | |||
| Using RPL Option Type, Routing Header for Source Routes and IPv6-in-IPv6 | Using RPL Option Type, Routing Header for Source Routes and IPv6-in-IPv6 | |||
| encapsulation in the RPL Data Plane | encapsulation in the RPL Data Plane | |||
| draft-ietf-roll-useofrplinfo-26 | draft-ietf-roll-useofrplinfo-27 | |||
| Abstract | Abstract | |||
| This document looks at different data flows through LLN (Low-Power | This document looks at different data flows through LLN (Low-Power | |||
| and Lossy Networks) where RPL (IPv6 Routing Protocol for Low-Power | and Lossy Networks) where RPL (IPv6 Routing Protocol for Low-Power | |||
| and Lossy Networks) is used to establish routing. The document | and Lossy Networks) is used to establish routing. The document | |||
| enumerates the cases where RFC 6553 (RPL Option Type), RFC 6554 | enumerates the cases where RFC 6553 (RPL Option Type), RFC 6554 | |||
| (Routing Header for Source Routes) and IPv6-in-IPv6 encapsulation is | (Routing Header for Source Routes) and IPv6-in-IPv6 encapsulation is | |||
| required in data plane. This analysis provides the basis on which to | required in data plane. This analysis provides the basis on which to | |||
| design efficient compression of these headers. This document updates | design efficient compression of these headers. This document updates | |||
| skipping to change at page 1, line 44 ¶ | skipping to change at page 1, line 44 ¶ | |||
| 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 November 16, 2019. | This Internet-Draft will expire on November 17, 2019. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2019 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 | |||
| skipping to change at page 3, line 48 ¶ | skipping to change at page 3, line 48 ¶ | |||
| 12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 50 | 12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 50 | |||
| 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 50 | 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 50 | |||
| 13.1. Normative References . . . . . . . . . . . . . . . . . . 50 | 13.1. Normative References . . . . . . . . . . . . . . . . . . 50 | |||
| 13.2. Informative References . . . . . . . . . . . . . . . . . 51 | 13.2. Informative References . . . . . . . . . . . . . . . . . 51 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 54 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 54 | |||
| 1. Introduction | 1. Introduction | |||
| RPL (IPv6 Routing Protocol for Low-Power and Lossy Networks) | RPL (IPv6 Routing Protocol for Low-Power and Lossy Networks) | |||
| [RFC6550] is a routing protocol for constrained networks. RFC 6553 | [RFC6550] is a routing protocol for constrained networks. RFC 6553 | |||
| [RFC6553] defines the "RPL option" (RPI), carried within the IPv6 | [RFC6553] defines the "RPL option" (RPL Packet Information or RPI), | |||
| Hop-by-Hop header to quickly identify inconsistencies (loops) in the | carried within the IPv6 Hop-by-Hop header to quickly identify | |||
| routing topology. RFC 6554 [RFC6554] defines the "RPL Source Route | inconsistencies (loops) in the routing topology. RFC 6554 [RFC6554] | |||
| Header" (RH3), an IPv6 Extension Header to deliver datagrams within a | defines the "RPL Source Route Header" (RH3), an IPv6 Extension Header | |||
| RPL routing domain, particularly in non-storing mode. | to deliver datagrams within a RPL routing domain, particularly in | |||
| non-storing mode. | ||||
| These various items are referred to as RPL artifacts, and they are | These various items are referred to as RPL artifacts, and they are | |||
| seen on all of the data-plane traffic that occurs in RPL routed | seen on all of the data-plane traffic that occurs in RPL routed | |||
| networks; they do not in general appear on the RPL control plane | networks; they do not in general appear on the RPL control plane | |||
| traffic at all which is mostly hop-by-hop traffic (one exception | traffic at all which is mostly hop-by-hop traffic (one exception | |||
| being DAO messages in non-storing mode). | being DAO messages in non-storing mode). | |||
| It has become clear from attempts to do multi-vendor | It has become clear from attempts to do multi-vendor | |||
| interoperability, and from a desire to compress as many of the above | interoperability, and from a desire to compress as many of the above | |||
| artifacts as possible that not all implementers agree when artifacts | artifacts as possible that not all implementers agree when artifacts | |||
| skipping to change at page 9, line 41 ¶ | skipping to change at page 9, line 41 ¶ | |||
| E.g. [I-D.ietf-anima-autonomic-control-plane]. | E.g. [I-D.ietf-anima-autonomic-control-plane]. | |||
| In the non-storing case, dealing with not-RPL aware leaf nodes is | In the non-storing case, dealing with not-RPL aware leaf nodes is | |||
| much easier as the 6LBR (DODAG root) has complete knowledge about the | much easier as the 6LBR (DODAG root) has complete knowledge about the | |||
| connectivity of all DODAG nodes, and all traffic flows through the | connectivity of all DODAG nodes, and all traffic flows through the | |||
| root node. | root node. | |||
| The 6LBR can recognize not-RPL aware leaf nodes because it will | The 6LBR can recognize not-RPL aware leaf nodes because it will | |||
| receive a DAO about that node from the 6LR immediately above that | receive a DAO about that node from the 6LR immediately above that | |||
| not-RPL aware node. This means that the non-storing mode case can | not-RPL aware node. This means that the non-storing mode case can | |||
| avoid ever using hop-by-hop IPv6-in-IPv6 headers for traffic | avoid ever using hop-by-hop re-encapsulation headers for traffic | |||
| originating from the root to leafs. | originating from the root to the leafs. | |||
| The non-storing mode case does not require the type change from 0x63 | The non-storing mode case does not require the type change from 0x63 | |||
| to 0x23, as the root can always create the right packet. The type | to 0x23, as the root can always create the right packet. The type | |||
| change does not adversely affect the non-storing case. | change does not adversely affect the non-storing case. | |||
| 3.2. Updates to RFC6550: Indicating the new RPI in the DODAG | 3.2. Updates to RFC6550: Indicating the new RPI in the DODAG | |||
| Configuration Option Flag. | Configuration Option Flag. | |||
| In order to avoid a Flag Day caused by lack of interoperation between | In order to avoid a Flag Day caused by lack of interoperation between | |||
| new RPI (0x23) and old RPI (0x63) nodes, this section defines a flag | new RPI (0x23) and old RPI (0x63) nodes, this section defines a flag | |||
| skipping to change at page 17, line 30 ¶ | skipping to change at page 17, line 30 ¶ | |||
| | | ~Raf to Int | must | root | | | | ~Raf to Int | must | root | | |||
| + +--------------+------------+------------------+ | + +--------------+------------+------------------+ | |||
| | | Int to ~Raf | must | hop | | | | Int to ~Raf | must | hop | | |||
| +---------------------+--------------+------------+------------------+ | +---------------------+--------------+------------+------------------+ | |||
| | | Raf to Raf | No | No | | | | Raf to Raf | No | No | | |||
| + +--------------+------------+------------------+ | + +--------------+------------+------------------+ | |||
| | | Raf to ~Raf | No | No | | | | Raf to ~Raf | No | No | | |||
| + Leaf - Leaf +--------------+------------+------------------+ | + Leaf - Leaf +--------------+------------+------------------+ | |||
| | | ~Raf to Raf | must | Raf (tgt) | | | | ~Raf to Raf | must | Raf (tgt) | | |||
| + +--------------+------------+------------------+ | + +--------------+------------+------------------+ | |||
| | | ~Raf to ~Raf | must | ~Raf | | | | ~Raf to ~Raf | must | hop | | |||
| +---------------------+--------------+------------+------------------+ | +---------------------+--------------+------------+------------------+ | |||
| Figure 7: Table of IPv6-in-IPv6 encapsulation in Storing mode. | Figure 7: Table of IPv6-in-IPv6 encapsulation in Storing mode. | |||
| 6.1. Storing Mode: Interaction between Leaf and Root | 6.1. Storing Mode: Interaction between Leaf and Root | |||
| In this section is described the communication flow in storing mode | In this section is described the communication flow in storing mode | |||
| (SM) between, | (SM) between, | |||
| RPL-aware-leaf to root | RPL-aware-leaf to root | |||
| skipping to change at page 18, line 47 ¶ | skipping to change at page 18, line 47 ¶ | |||
| +-------------------+---------+-------+----------+ | +-------------------+---------+-------+----------+ | |||
| | Header | 6LN src | 6LR_i | 6LBR dst | | | Header | 6LN src | 6LR_i | 6LBR dst | | |||
| +-------------------+---------+-------+----------+ | +-------------------+---------+-------+----------+ | |||
| | Inserted headers | RPI | -- | -- | | | Inserted headers | RPI | -- | -- | | |||
| | Removed headers | -- | -- | RPI | | | Removed headers | -- | -- | RPI | | |||
| | Re-added headers | -- | -- | -- | | | Re-added headers | -- | -- | -- | | |||
| | Modified headers | -- | RPI | -- | | | Modified headers | -- | RPI | -- | | |||
| | Untouched headers | -- | -- | -- | | | Untouched headers | -- | -- | -- | | |||
| +-------------------+---------+-------+----------+ | +-------------------+---------+-------+----------+ | |||
| Table 1: Storing: Summary of the use of headers from RPL-aware-leaf | Table 1: Storing mode: Summary of the use of headers from RPL-aware- | |||
| to root | leaf to root | |||
| 6.1.2. SM: Example of Flow from root to RPL-aware-leaf | 6.1.2. SM: Example of Flow from root to RPL-aware-leaf | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| root (6LBR) --> 6LR_i --> RPL-aware-leaf (6LN) | root (6LBR) --> 6LR_i --> RPL-aware-leaf (6LN) | |||
| For example, a communication flow could be: Node A root(6LBR) --> | For example, a communication flow could be: Node A root(6LBR) --> | |||
| Node B --> Node D --> Node F | Node B --> Node D --> Node F | |||
| skipping to change at page 19, line 33 ¶ | skipping to change at page 19, line 33 ¶ | |||
| +-------------------+------+-------+------+ | +-------------------+------+-------+------+ | |||
| | Header | 6LBR | 6LR_i | 6LN | | | Header | 6LBR | 6LR_i | 6LN | | |||
| +-------------------+------+-------+------+ | +-------------------+------+-------+------+ | |||
| | Inserted headers | RPI | -- | -- | | | Inserted headers | RPI | -- | -- | | |||
| | Removed headers | -- | -- | RPI | | | Removed headers | -- | -- | RPI | | |||
| | Re-added headers | -- | -- | -- | | | Re-added headers | -- | -- | -- | | |||
| | Modified headers | -- | RPI | -- | | | Modified headers | -- | RPI | -- | | |||
| | Untouched headers | -- | -- | -- | | | Untouched headers | -- | -- | -- | | |||
| +-------------------+------+-------+------+ | +-------------------+------+-------+------+ | |||
| Table 2: Storing: Summary of the use of headers from root to RPL- | Table 2: Storing mode: Summary of the use of headers from root to | |||
| aware-leaf | RPL-aware-leaf | |||
| 6.1.3. SM: Example of Flow from root to not-RPL-aware-leaf | 6.1.3. SM: Example of Flow from root to not-RPL-aware-leaf | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| root (6LBR) --> 6LR_i --> not-RPL-aware-leaf (IPv6) | root (6LBR) --> 6LR_i --> not-RPL-aware-leaf (IPv6) | |||
| For example, a communication flow could be: Node A root(6LBR) --> | For example, a communication flow could be: Node A root(6LBR) --> | |||
| Node B --> Node E --> Node G | Node B --> Node E --> Node G | |||
| skipping to change at page 20, line 15 ¶ | skipping to change at page 20, line 15 ¶ | |||
| +-------------------+----------+-------+----------------+ | +-------------------+----------+-------+----------------+ | |||
| | Header | 6LBR src | 6LR_i | IPv6 dst node | | | Header | 6LBR src | 6LR_i | IPv6 dst node | | |||
| +-------------------+----------+-------+----------------+ | +-------------------+----------+-------+----------------+ | |||
| | Inserted headers | RPI | -- | -- | | | Inserted headers | RPI | -- | -- | | |||
| | Removed headers | -- | -- | -- | | | Removed headers | -- | -- | -- | | |||
| | Re-added headers | -- | -- | -- | | | Re-added headers | -- | -- | -- | | |||
| | Modified headers | -- | RPI | -- | | | Modified headers | -- | RPI | -- | | |||
| | Untouched headers | -- | -- | RPI (Ignored) | | | Untouched headers | -- | -- | RPI (Ignored) | | |||
| +-------------------+----------+-------+----------------+ | +-------------------+----------+-------+----------------+ | |||
| Table 3: Storing: Summary of the use of headers from root to not-RPL- | Table 3: Storing mode: Summary of the use of headers from root to | |||
| aware-leaf | not-RPL-aware-leaf | |||
| 6.1.4. SM: Example of Flow from not-RPL-aware-leaf to root | 6.1.4. SM: Example of Flow from not-RPL-aware-leaf to root | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| not-RPL-aware-leaf (IPv6) --> 6LR_1 --> 6LR_i --> root (6LBR) | not-RPL-aware-leaf (IPv6) --> 6LR_1 --> 6LR_i --> root (6LBR) | |||
| For example, a communication flow could be: Node G --> Node E --> | For example, a communication flow could be: Node G --> Node E --> | |||
| Node B --> Node A root(6LBR) | Node B --> Node A root(6LBR) | |||
| skipping to change at page 22, line 24 ¶ | skipping to change at page 22, line 24 ¶ | |||
| +-------------------+---------+-------+------+----------------+ | +-------------------+---------+-------+------+----------------+ | |||
| | Header | 6LN src | 6LR_i | 6LBR | Internet dst | | | Header | 6LN src | 6LR_i | 6LBR | Internet dst | | |||
| +-------------------+---------+-------+------+----------------+ | +-------------------+---------+-------+------+----------------+ | |||
| | Inserted headers | RPI | -- | -- | -- | | | Inserted headers | RPI | -- | -- | -- | | |||
| | Removed headers | -- | -- | -- | -- | | | Removed headers | -- | -- | -- | -- | | |||
| | Re-added headers | -- | -- | -- | -- | | | Re-added headers | -- | -- | -- | -- | | |||
| | Modified headers | -- | RPI | -- | -- | | | Modified headers | -- | RPI | -- | -- | | |||
| | Untouched headers | -- | -- | RPI | RPI (Ignored) | | | Untouched headers | -- | -- | RPI | RPI (Ignored) | | |||
| +-------------------+---------+-------+------+----------------+ | +-------------------+---------+-------+------+----------------+ | |||
| Table 4: Storing: Summary of the use of headers from RPL-aware-leaf | Table 4: Storing mode: Summary of the use of headers from RPL-aware- | |||
| to Internet | leaf to Internet | |||
| 6.2.2. SM: Example of Flow from Internet to RPL-aware-leaf | 6.2.2. SM: Example of Flow from Internet to RPL-aware-leaf | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| Internet --> root (6LBR) --> 6LR_i --> RPL-aware-leaf (6LN) | Internet --> root (6LBR) --> 6LR_i --> RPL-aware-leaf (6LN) | |||
| For example, a communication flow could be: Internet --> Node A | For example, a communication flow could be: Internet --> Node A | |||
| root(6LBR) --> Node B --> Node D --> Node F | root(6LBR) --> Node B --> Node D --> Node F | |||
| skipping to change at page 26, line 45 ¶ | skipping to change at page 26, line 45 ¶ | |||
| | Removed | -- | -- | -- | -- | RPI | | | Removed | -- | -- | -- | -- | RPI | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| | Re-added | -- | -- | -- | -- | -- | | | Re-added | -- | -- | -- | -- | -- | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| | Modified | -- | RPI | RPI | RPI | -- | | | Modified | -- | RPI | RPI | RPI | -- | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| | Untouched | -- | -- | -- | -- | -- | | | Untouched | -- | -- | -- | -- | -- | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| +---------------+--------+--------+---------------+--------+--------+ | +---------------+--------+--------+---------------+--------+--------+ | |||
| Table 5: Storing: Summary of the use of headers for RPL-aware-leaf to | Table 5: Storing mode: Summary of the use of headers for RPL-aware- | |||
| RPL-aware-leaf | leaf to RPL-aware-leaf | |||
| 6.3.2. SM: Example of Flow from RPL-aware-leaf to not-RPL-aware-leaf | 6.3.2. SM: Example of Flow from RPL-aware-leaf to not-RPL-aware-leaf | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| 6LN --> 6LR_ia --> common parent (6LR_x) --> 6LR_id --> not-RPL-aware | 6LN --> 6LR_ia --> common parent (6LR_x) --> 6LR_id --> not-RPL-aware | |||
| 6LN (IPv6) | 6LN (IPv6) | |||
| For example, a communication flow could be: Node F --> Node D --> | For example, a communication flow could be: Node F --> Node D --> | |||
| Node B --> Node E --> Node G | Node B --> Node E --> Node G | |||
| skipping to change at page 27, line 42 ¶ | skipping to change at page 27, line 42 ¶ | |||
| | Removed | -- | -- | -- | -- | -- | | | Removed | -- | -- | -- | -- | -- | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| | Re-added | -- | -- | -- | -- | -- | | | Re-added | -- | -- | -- | -- | -- | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| | Modified | -- | RPI | RPI | RPI | -- | | | Modified | -- | RPI | RPI | RPI | -- | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| | Untouched | -- | -- | -- | -- | RPI(Ignored) | | | Untouched | -- | -- | -- | -- | RPI(Ignored) | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| +-----------+------+--------+---------------+--------+--------------+ | +-----------+------+--------+---------------+--------+--------------+ | |||
| Table 6: Storing: Summary of the use of headers for RPL-aware-leaf to | Table 6: Storing mode: Summary of the use of headers for RPL-aware- | |||
| not-RPL-aware-leaf | leaf to not-RPL-aware-leaf | |||
| 6.3.3. SM: Example of Flow from not-RPL-aware-leaf to RPL-aware-leaf | 6.3.3. SM: Example of Flow from not-RPL-aware-leaf to RPL-aware-leaf | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| not-RPL-aware 6LN (IPv6) --> 6LR_ia --> common parent (6LR_x) --> | not-RPL-aware 6LN (IPv6) --> 6LR_ia --> common parent (6LR_x) --> | |||
| 6LR_id --> 6LN | 6LR_id --> 6LN | |||
| For example, a communication flow could be: Node G --> Node E --> | For example, a communication flow could be: Node G --> Node E --> | |||
| Node B --> Node D --> Node F | Node B --> Node D --> Node F | |||
| skipping to change at page 29, line 26 ¶ | skipping to change at page 29, line 26 ¶ | |||
| Internal nodes 6LR_ia (e.g: Node E or Node B) is the intermediate | Internal nodes 6LR_ia (e.g: Node E or Node B) is the intermediate | |||
| router from the not-RPL-aware source (Node G) to the root (6LBR) | router from the not-RPL-aware source (Node G) to the root (6LBR) | |||
| (Node A). In this case, "1 < ia <= n", n is the number of routers | (Node A). In this case, "1 < ia <= n", n is the number of routers | |||
| (6LR) that the packet goes through from IPv6 src to the root. | (6LR) that the packet goes through from IPv6 src to the root. | |||
| 6LR_id (C) is the intermediate router from the root (Node A) to the | 6LR_id (C) is the intermediate router from the root (Node A) to the | |||
| destination Node J. In this case, "1 <= id <= m", m is the number of | destination Node J. In this case, "1 <= id <= m", m is the number of | |||
| routers (6LR) that the packet goes through from the root to | routers (6LR) that the packet goes through from the root to | |||
| destination (IPv6 dst). | destination (IPv6 dst). | |||
| Note that this flow is identical to Section 6.3.3, except that the | The RPI is ignored at the IPv6 dst node. | |||
| RPI is ignored at the IPv6 dst node. | ||||
| The 6LR_1 (Node E) receives the packet from the the IPv6 node (Node | The 6LR_1 (Node E) receives the packet from the the IPv6 node (Node | |||
| G) and inserts the RPI header (RPI), encapsulated in an IPv6-in-IPv6 | G) and inserts the RPI header (RPI), encapsulated in an IPv6-in-IPv6 | |||
| header. The IPv6-in-IPv6 header is addressed to the final | header. The IPv6-in-IPv6 header is addressed hop-by-hop. | |||
| destination (Node J). | ||||
| The Figure 13 shows the table that summarizes what headers are needed | The Figure 13 shows the table that summarizes what headers are needed | |||
| for this use case. In the figure, IP6-IP6 refers to IPv6-in-IPv6. | for this use case. In the figure, IP6-IP6 refers to IPv6-in-IPv6. | |||
| +---------+------+------------+------------+------------+------------+ | +---------+------+-------+-------+---------+-------+-------+ | |||
| | Header | IPv6 | 6LR_1 | 6LR_ia | 6LR_m | IPv6 | | | Header | IPv6 | 6LR_1 | 6LR_ia| 6LBR |6LR_id | IPv6 | | |||
| | | src | | | | dst | | | | src | | | | | dst | | |||
| | | node | | | | node | | | | node | | | | | node | | |||
| +---------+------+------------+------------+------------+------------+ | +---------+------+-------+-------+---------+-------+-------+ | |||
| | Inserted| -- |IP6-IP6(RPI)| -- | -- | -- | | | Inserted| -- |IP6-IP6| -- | | -- | -- | | |||
| | headers | | | | | | | | headers | | (RPI )| | | | | | |||
| +---------+------+------------+------------+------------+------------+ | | | | | | | | | | |||
| | Removed | -- | -- | -- | -- |IP6-IP6(RPI)| | +---------+------+-------+-------+---------+-------+-------+ | |||
| | headers | | | | | RPI Ignored| | | Removed | -- | -- | -- | | -- |IP6-IP6| | |||
| +---------+------+------------+------------+------------+------------+ | | headers | | | | | |(RPI) | | |||
| | Re-added| -- | -- | -- | -- | -- | | | | | | | | | RPI | | |||
| | headers | | | | | | | | | | | | | |Ignored| | |||
| +---------+------+------------+------------+------------+------------+ | +---------+------+-------+-------+---------+-------+-------+ | |||
| | Modified| -- | -- |IP6-IP6(RPI)|IP6-IP6(RPI)| -- | | | Re-added| -- | -- | -- | -- | -- | -- | | |||
| | headers | | | | | | | | headers | | | | | | | | |||
| +---------+------+------------+------------+------------+------------+ | +---------+------+-------+-------+---------+-------+-------+ | |||
| |Untouched| -- | -- | -- | -- | -- | | | Modified| -- | -- |IP6-IP6| IP6-IP6 |IP6-IP6| -- | | |||
| | headers | | | | | | | | headers | | | (RPI) | (RPI) | (RPI) | | | |||
| +---------+------+------------+------------+------------+------------+ | | | | | | | | | | |||
| +---------+------+-------+-------+---------+-------+-------+ | ||||
| |Untouched| -- | -- | -- | -- | -- | -- | | ||||
| | headers | | | | | | | | ||||
| +---------+------+-------+-------+---------+-------+-------+ | ||||
| Figure 13: Storing mode: Summary of the use of headers from not-RPL- | Figure 13: Storing mode: Summary of the use of headers from not-RPL- | |||
| aware-leaf to not-RPL-aware-leaf | aware-leaf to not-RPL-aware-leaf | |||
| 7. Non Storing mode | 7. Non Storing mode | |||
| In Non Storing Mode (Non SM) (fully source routed), the 6LBR (DODAG | In Non Storing Mode (Non SM) (fully source routed), the 6LBR (DODAG | |||
| root) has complete knowledge about the connectivity of all DODAG | root) has complete knowledge about the connectivity of all DODAG | |||
| nodes, and all traffic flows through the root node. Thus, there is | nodes, and all traffic flows through the root node. Thus, there is | |||
| no need for all nodes to know about the existence of not-RPL aware | no need for all nodes to know about the existence of not-RPL aware | |||
| skipping to change at page 32, line 34 ¶ | skipping to change at page 32, line 35 ¶ | |||
| +-------------------+---------+-------+----------+ | +-------------------+---------+-------+----------+ | |||
| | Header | 6LN src | 6LR_i | 6LBR dst | | | Header | 6LN src | 6LR_i | 6LBR dst | | |||
| +-------------------+---------+-------+----------+ | +-------------------+---------+-------+----------+ | |||
| | Inserted headers | RPI | -- | -- | | | Inserted headers | RPI | -- | -- | | |||
| | Removed headers | -- | -- | RPI | | | Removed headers | -- | -- | RPI | | |||
| | Re-added headers | -- | -- | -- | | | Re-added headers | -- | -- | -- | | |||
| | Modified headers | -- | RPI | -- | | | Modified headers | -- | RPI | -- | | |||
| | Untouched headers | -- | -- | -- | | | Untouched headers | -- | -- | -- | | |||
| +-------------------+---------+-------+----------+ | +-------------------+---------+-------+----------+ | |||
| Table 7: Non Storing: Summary of the use of headers from RPL-aware- | Table 7: Non Storing mode: Summary of the use of headers from RPL- | |||
| leaf to root | aware-leaf to root | |||
| 7.1.2. Non-SM: Example of Flow from root to RPL-aware-leaf | 7.1.2. Non-SM: Example of Flow from root to RPL-aware-leaf | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| root (6LBR) --> 6LR_i --> RPL-aware-leaf (6LN) | root (6LBR) --> 6LR_i --> RPL-aware-leaf (6LN) | |||
| For example, a communication flow could be: Node A (root) --> Node B | For example, a communication flow could be: Node A (root) --> Node B | |||
| --> Node D --> Node F | --> Node D --> Node F | |||
| skipping to change at page 33, line 4 ¶ | skipping to change at page 33, line 7 ¶ | |||
| For example, a communication flow could be: Node A (root) --> Node B | For example, a communication flow could be: Node A (root) --> Node B | |||
| --> Node D --> Node F | --> Node D --> Node F | |||
| 6LR_i is the intermediate router from source to destination. In this | 6LR_i is the intermediate router from source to destination. In this | |||
| case, "1 <= i <= n", n is the number of routers (6LR) that the packet | case, "1 <= i <= n", n is the number of routers (6LR) that the packet | |||
| goes through from source (6LBR) to destination (6LN). | goes through from source (6LBR) to destination (6LN). | |||
| The 6LBR inserts an RH3, and a RPI header. No IPv6-in-IPv6 header is | The 6LBR inserts an RH3, and a RPI header. No IPv6-in-IPv6 header is | |||
| necessary as the traffic originates with an RPL aware node, the 6LBR. | necessary as the traffic originates with an RPL aware node, the 6LBR. | |||
| The destination is known to be RPL-aware because the root knows the | The destination is known to be RPL-aware because the root knows the | |||
| whole topology in non-storing mode. | whole topology in non-storing mode. | |||
| The Table 8 summarizes what headers are needed for this use case. | The Table 8 summarizes what headers are needed for this use case. | |||
| +-------------------+----------+-----------+-----------+ | +-------------------+----------+-----------+-----------+ | |||
| | Header | 6LBR src | 6LR_i | 6LN dst | | | Header | 6LBR src | 6LR_i | 6LN dst | | |||
| +-------------------+----------+-----------+-----------+ | +-------------------+----------+-----------+-----------+ | |||
| | Inserted headers | RPI, RH3 | -- | -- | | | Inserted headers | RPI, RH3 | -- | -- | | |||
| | Removed headers | -- | -- | RH3, RPI | | | Removed headers | -- | -- | RH3, RPI | | |||
| | Re-added headers | -- | -- | -- | | | Re-added headers | -- | -- | -- | | |||
| | Modified headers | -- | RPI, RH3 | -- | | | Modified headers | -- | RPI, RH3 | -- | | |||
| | Untouched headers | -- | -- | -- | | | Untouched headers | -- | -- | -- | | |||
| +-------------------+----------+-----------+-----------+ | +-------------------+----------+-----------+-----------+ | |||
| Table 8: Non Storing: Summary of the use of headers from root to RPL- | Table 8: Non Storing mode: Summary of the use of headers from root to | |||
| aware-leaf | RPL-aware-leaf | |||
| 7.1.3. Non-SM: Example of Flow from root to not-RPL-aware-leaf | 7.1.3. Non-SM: Example of Flow from root to not-RPL-aware-leaf | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| root (6LBR) --> 6LR_i --> not-RPL-aware-leaf (IPv6) | root (6LBR) --> 6LR_i --> not-RPL-aware-leaf (IPv6) | |||
| For example, a communication flow could be: Node A (root) --> Node B | For example, a communication flow could be: Node A (root) --> Node B | |||
| --> Node E --> Node G | --> Node E --> Node G | |||
| skipping to change at page 34, line 27 ¶ | skipping to change at page 34, line 27 ¶ | |||
| | headers | | | | | | | headers | | | | | | |||
| +-----------+----------+--------------+----------------+----------+ | +-----------+----------+--------------+----------------+----------+ | |||
| | Modified | -- | RPI, RH3 | RPI, | -- | | | Modified | -- | RPI, RH3 | RPI, | -- | | |||
| | headers | | | RH3(consumed) | | | | headers | | | RH3(consumed) | | | |||
| +-----------+----------+--------------+----------------+----------+ | +-----------+----------+--------------+----------------+----------+ | |||
| | Untouched | -- | -- | -- | RPI, RH3 | | | Untouched | -- | -- | -- | RPI, RH3 | | |||
| | headers | | | | (both | | | headers | | | | (both | | |||
| | | | | | ignored) | | | | | | | ignored) | | |||
| +-----------+----------+--------------+----------------+----------+ | +-----------+----------+--------------+----------------+----------+ | |||
| Figure 15: Non Storing: Summary of the use of headers from root to | Figure 15: Non Storing mode: Summary of the use of headers from root | |||
| not-RPL-aware-leaf | to not-RPL-aware-leaf | |||
| 7.1.4. Non-SM: Example of Flow from not-RPL-aware-leaf to root | 7.1.4. Non-SM: Example of Flow from not-RPL-aware-leaf to root | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| not-RPL-aware-leaf (IPv6) --> 6LR_1 --> 6LR_i --> root (6LBR) | not-RPL-aware-leaf (IPv6) --> 6LR_1 --> 6LR_i --> root (6LBR) | |||
| For example, a communication flow could be: Node G --> Node E --> | For example, a communication flow could be: Node G --> Node E --> | |||
| Node B --> Node A (root) | Node B --> Node A (root) | |||
| skipping to change at page 35, line 26 ¶ | skipping to change at page 35, line 26 ¶ | |||
| | Re-added | -- | -- | -- | -- | | | Re-added | -- | -- | -- | -- | | |||
| | headers | | | | | | | headers | | | | | | |||
| +----------+------+-------------------+------------------+-----------------+ | +----------+------+-------------------+------------------+-----------------+ | |||
| | Modified | -- | -- | IPv6-in-IPv6(RPI)| -- | | | Modified | -- | -- | IPv6-in-IPv6(RPI)| -- | | |||
| | headers | | | | | | | headers | | | | | | |||
| +----------+------+-------------------+------------------+-----------------+ | +----------+------+-------------------+------------------+-----------------+ | |||
| |Untouched | -- | -- | -- | -- | | |Untouched | -- | -- | -- | -- | | |||
| | headers | | | | | | | headers | | | | | | |||
| +----------+------+-------------------+------------------+-----------------+ | +----------+------+-------------------+------------------+-----------------+ | |||
| Figure 16: Non Storing: Summary of the use of headers from not-RPL- | Figure 16: Non Storing mode: Summary of the use of headers from not- | |||
| aware-leaf to root | RPL-aware-leaf to root | |||
| 7.2. Non-Storing Mode: Interaction between Leaf and Internet | 7.2. Non-Storing Mode: Interaction between Leaf and Internet | |||
| This section will describe the communication flow in Non Storing Mode | This section will describe the communication flow in Non Storing Mode | |||
| (Non-SM) between: | (Non-SM) between: | |||
| RPL-aware-leaf to Internet | RPL-aware-leaf to Internet | |||
| Internet to RPL-aware-leaf | Internet to RPL-aware-leaf | |||
| skipping to change at page 36, line 26 ¶ | skipping to change at page 36, line 26 ¶ | |||
| +-------------------+---------+-------+------+----------------+ | +-------------------+---------+-------+------+----------------+ | |||
| | Header | 6LN src | 6LR_i | 6LBR | Internet dst | | | Header | 6LN src | 6LR_i | 6LBR | Internet dst | | |||
| +-------------------+---------+-------+------+----------------+ | +-------------------+---------+-------+------+----------------+ | |||
| | Inserted headers | RPI | -- | -- | -- | | | Inserted headers | RPI | -- | -- | -- | | |||
| | Removed headers | -- | -- | -- | -- | | | Removed headers | -- | -- | -- | -- | | |||
| | Re-added headers | -- | -- | -- | -- | | | Re-added headers | -- | -- | -- | -- | | |||
| | Modified headers | -- | RPI | -- | -- | | | Modified headers | -- | RPI | -- | -- | | |||
| | Untouched headers | -- | -- | RPI | RPI (Ignored) | | | Untouched headers | -- | -- | RPI | RPI (Ignored) | | |||
| +-------------------+---------+-------+------+----------------+ | +-------------------+---------+-------+------+----------------+ | |||
| Table 9: Non Storing: Summary of the use of headers from RPL-aware- | Table 9: Non Storing mode: Summary of the use of headers from RPL- | |||
| leaf to Internet | aware-leaf to Internet | |||
| 7.2.2. Non-SM: Example of Flow from Internet to RPL-aware-leaf | 7.2.2. Non-SM: Example of Flow from Internet to RPL-aware-leaf | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| Internet --> root (6LBR) --> 6LR_i --> RPL-aware-leaf (6LN) | Internet --> root (6LBR) --> 6LR_i --> RPL-aware-leaf (6LN) | |||
| For example, a communication flow could be: Internet --> Node A | For example, a communication flow could be: Internet --> Node A | |||
| (root) --> Node B --> Node D --> Node F | (root) --> Node B --> Node D --> Node F | |||
| skipping to change at page 37, line 21 ¶ | skipping to change at page 37, line 21 ¶ | |||
| | Removed | -- | -- | -- | IPv6-in-IPv6 | | | Removed | -- | -- | -- | IPv6-in-IPv6 | | |||
| | headers | | | | (RH3,RPI) | | | headers | | | | (RH3,RPI) | | |||
| | Re-added | -- | -- | -- | -- | | | Re-added | -- | -- | -- | -- | | |||
| | headers | | | | | | | headers | | | | | | |||
| | Modified | -- | -- | IPv6-in-IPv6 | -- | | | Modified | -- | -- | IPv6-in-IPv6 | -- | | |||
| | headers | | | (RH3,RPI) | | | | headers | | | (RH3,RPI) | | | |||
| | Untouched | -- | -- | -- | -- | | | Untouched | -- | -- | -- | -- | | |||
| | headers | | | | | | | headers | | | | | | |||
| +-----------+----------+--------------+--------------+--------------+ | +-----------+----------+--------------+--------------+--------------+ | |||
| Table 10: Non Storing: Summary of the use of headers from Internet to | Table 10: Non Storing mode: Summary of the use of headers from | |||
| RPL-aware-leaf | Internet to RPL-aware-leaf | |||
| 7.2.3. Non-SM: Example of Flow from not-RPL-aware-leaf to Internet | 7.2.3. Non-SM: Example of Flow from not-RPL-aware-leaf to Internet | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| not-RPL-aware-leaf (IPv6) --> 6LR_1 --> 6LR_i -->root (6LBR) --> | not-RPL-aware-leaf (IPv6) --> 6LR_1 --> 6LR_i -->root (6LBR) --> | |||
| Internet | Internet | |||
| For example, a communication flow could be: Node G --> Node E --> | For example, a communication flow could be: Node G --> Node E --> | |||
| Node B --> Node A --> Internet | Node B --> Node A --> Internet | |||
| skipping to change at page 38, line 26 ¶ | skipping to change at page 38, line 26 ¶ | |||
| | Re-added | -- | -- | -- | -- | -- | | | Re-added | -- | -- | -- | -- | -- | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| +-----------+------+--------------+--------------+--------------+----------+ | +-----------+------+--------------+--------------+--------------+----------+ | |||
| | Modified | -- | -- | IP6-IP6(RPI) | -- | -- | | | Modified | -- | -- | IP6-IP6(RPI) | -- | -- | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| +-----------+------+--------------+--------------+--------------+----------+ | +-----------+------+--------------+--------------+--------------+----------+ | |||
| | Untouched | -- | -- | -- | -- | -- | | | Untouched | -- | -- | -- | -- | -- | | |||
| | headers | | | | | | | | headers | | | | | | | |||
| +-----------+------+--------------+--------------+--------------+----------+ | +-----------+------+--------------+--------------+--------------+----------+ | |||
| Figure 17: Non Storing: Summary of the use of headers from not-RPL- | Figure 17: Non Storing mode: Summary of the use of headers from not- | |||
| aware-leaf to Internet | RPL-aware-leaf to Internet | |||
| 7.2.4. Non-SM: Example of Flow from Internet to not-RPL-aware-leaf | 7.2.4. Non-SM: Example of Flow from Internet to not-RPL-aware-leaf | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| Internet --> root (6LBR) --> 6LR_i --> not-RPL-aware-leaf (IPv6) | Internet --> root (6LBR) --> 6LR_i --> not-RPL-aware-leaf (IPv6) | |||
| For example, a communication flow could be: Internet --> Node A | For example, a communication flow could be: Internet --> Node A | |||
| (root) --> Node B --> Node E --> Node G | (root) --> Node B --> Node E --> Node G | |||
| skipping to change at page 42, line 32 ¶ | skipping to change at page 42, line 32 ¶ | |||
| | headers | | | | | | | | | headers | | | | | | | | |||
| +-----------+---------+---------+---------+---------+---------+------+ | +-----------+---------+---------+---------+---------+---------+------+ | |||
| | Modified | -- | IP6-IP6 | -- | IP6-IP6 | | -- | | | Modified | -- | IP6-IP6 | -- | IP6-IP6 | | -- | | |||
| | headers | | (RPI1) | | (RH3, | | | | | headers | | (RPI1) | | (RH3, | | | | |||
| | | | | | RPI2) | | | | | | | | | RPI2) | | | | |||
| +-----------+---------+---------+---------+---------+---------+------+ | +-----------+---------+---------+---------+---------+---------+------+ | |||
| | Untouched | -- | -- | -- | -- | -- | -- | | | Untouched | -- | -- | -- | -- | -- | -- | | |||
| | headers | | | | | | | | | headers | | | | | | | | |||
| +-----------+---------+---------+---------+---------+---------+------+ | +-----------+---------+---------+---------+---------+---------+------+ | |||
| Figure 20: Non Storing: Summary of the use of headers from RPL-aware- | Figure 20: Non Storing mode: Summary of the use of headers from RPL- | |||
| leaf to not-RPL-aware-leaf. | aware-leaf to not-RPL-aware-leaf. | |||
| 7.3.3. Non-SM: Example of Flow from not-RPL-aware-leaf to RPL-aware- | 7.3.3. Non-SM: Example of Flow from not-RPL-aware-leaf to RPL-aware- | |||
| leaf | leaf | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| not-RPL-aware 6LN (IPv6) --> 6LR_1 --> 6LR_ia --> root (6LBR) --> | not-RPL-aware 6LN (IPv6) --> 6LR_1 --> 6LR_ia --> root (6LBR) --> | |||
| 6LR_id --> 6LN | 6LR_id --> 6LN | |||
| For example, a communication flow could be: Node G --> Node E --> | For example, a communication flow could be: Node G --> Node E --> | |||
| skipping to change at page 43, line 37 ¶ | skipping to change at page 43, line 37 ¶ | |||
| | headers | | | | | | | | | headers | | | | | | | | |||
| +-----------+------+---------+---------+---------+---------+---------+ | +-----------+------+---------+---------+---------+---------+---------+ | |||
| | Modified | -- | | IP6-IP6 | -- | IP6-IP6 | -- | | | Modified | -- | | IP6-IP6 | -- | IP6-IP6 | -- | | |||
| | headers | | | (RPI1) | | (RH3, | | | | headers | | | (RPI1) | | (RH3, | | | |||
| | | | | | | RPI2) | | | | | | | | | RPI2) | | | |||
| +-----------+------+---------+---------+---------+---------+---------+ | +-----------+------+---------+---------+---------+---------+---------+ | |||
| | Untouched | -- | | -- | -- | -- | -- | | | Untouched | -- | | -- | -- | -- | -- | | |||
| | headers | | | | | | | | | headers | | | | | | | | |||
| +-----------+------+---------+---------+---------+---------+---------+ | +-----------+------+---------+---------+---------+---------+---------+ | |||
| Figure 21: Non Storing: Summary of the use of headers from not-RPL- | Figure 21: Non Storing mode: Summary of the use of headers from not- | |||
| aware-leaf to RPL-aware-leaf. | RPL-aware-leaf to RPL-aware-leaf. | |||
| 7.3.4. Non-SM: Example of Flow from not-RPL-aware-leaf to not-RPL- | 7.3.4. Non-SM: Example of Flow from not-RPL-aware-leaf to not-RPL- | |||
| aware-leaf | aware-leaf | |||
| In this case the flow comprises: | In this case the flow comprises: | |||
| not-RPL-aware 6LN (IPv6 src) --> 6LR_1 --> 6LR_ia --> root (6LBR) --> | not-RPL-aware 6LN (IPv6 src) --> 6LR_1 --> 6LR_ia --> root (6LBR) --> | |||
| 6LR_id --> not-RPL-aware (IPv6 dst) | 6LR_id --> not-RPL-aware (IPv6 dst) | |||
| For example, a communication flow could be: Node G --> Node E --> | For example, a communication flow could be: Node G --> Node E --> | |||
| skipping to change at page 44, line 37 ¶ | skipping to change at page 44, line 37 ¶ | |||
| | headers | | | | | | | | | | headers | | | | | | | | | |||
| +---------+------+-------+-------+---------+-------+---------+------+ | +---------+------+-------+-------+---------+-------+---------+------+ | |||
| | Modified| -- | -- |IP6-IP6| -- |IP6-IP6| -- | -- | | | Modified| -- | -- |IP6-IP6| -- |IP6-IP6| -- | -- | | |||
| | headers | | | (RPI1)| | (RH3, | | | | | headers | | | (RPI1)| | (RH3, | | | | |||
| | | | | | | RPI2)| | | | | | | | | | RPI2)| | | | |||
| +---------+------+-------+-------+---------+-------+---------+------+ | +---------+------+-------+-------+---------+-------+---------+------+ | |||
| |Untouched| -- | -- | -- | -- | -- | -- | -- | | |Untouched| -- | -- | -- | -- | -- | -- | -- | | |||
| | headers | | | | | | | | | | headers | | | | | | | | | |||
| +---------+------+-------+-------+---------+-------+---------+------+ | +---------+------+-------+-------+---------+-------+---------+------+ | |||
| Figure 22: Non Storing: Summary of the use of headers from not-RPL- | Figure 22: Non Storing mode: Summary of the use of headers from not- | |||
| aware-leaf to not-RPL-aware-leaf | RPL-aware-leaf to not-RPL-aware-leaf | |||
| 8. Operational Considerations of supporting not-RPL-aware-leaves | 8. Operational Considerations of supporting not-RPL-aware-leaves | |||
| Roughly half of the situations described in this document involve | Roughly half of the situations described in this document involve | |||
| leaf ("host") nodes that do not speak RPL. These nodes fall into two | leaf ("host") nodes that do not speak RPL. These nodes fall into two | |||
| further categories: ones that drop a packet that have RPI or RH3 | further categories: ones that drop a packet that have RPI or RH3 | |||
| headers, and ones that continue to process a packet that has RPI and/ | headers, and ones that continue to process a packet that has RPI and/ | |||
| or RH3 headers. | or RH3 headers. | |||
| [RFC8200] provides for new rules that suggest that nodes that have | [RFC8200] provides for new rules that suggest that nodes that have | |||
| skipping to change at page 54, line 9 ¶ | skipping to change at page 54, line 9 ¶ | |||
| [RFC8505] Thubert, P., Ed., Nordmark, E., Chakrabarti, S., and C. | [RFC8505] Thubert, P., Ed., Nordmark, E., Chakrabarti, S., and C. | |||
| Perkins, "Registration Extensions for IPv6 over Low-Power | Perkins, "Registration Extensions for IPv6 over Low-Power | |||
| Wireless Personal Area Network (6LoWPAN) Neighbor | Wireless Personal Area Network (6LoWPAN) Neighbor | |||
| Discovery", RFC 8505, DOI 10.17487/RFC8505, November 2018, | Discovery", RFC 8505, DOI 10.17487/RFC8505, November 2018, | |||
| <https://www.rfc-editor.org/info/rfc8505>. | <https://www.rfc-editor.org/info/rfc8505>. | |||
| Authors' Addresses | Authors' Addresses | |||
| Maria Ines Robles | Maria Ines Robles | |||
| Aalto University | Aalto University | |||
| Innopoli | Otaniemi | |||
| Espoo 02150 | Espoo 02150 | |||
| Finland | Finland | |||
| Email: mariainesrobles@gmail.com | Email: mariainesrobles@gmail.com | |||
| Michael C. Richardson | Michael C. Richardson | |||
| Sandelman Software Works | Sandelman Software Works | |||
| 470 Dawson Avenue | 470 Dawson Avenue | |||
| Ottawa, ON K1Z 5V7 | Ottawa, ON K1Z 5V7 | |||
| CA | CA | |||
| End of changes. 28 change blocks. | ||||
| 70 lines changed or deleted | 72 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/ | ||||