| < draft-ietf-6lo-routing-dispatch-04.txt | draft-ietf-6lo-routing-dispatch-05.txt > | |||
|---|---|---|---|---|
| 6lo P. Thubert, Ed. | 6lo P. Thubert, Ed. | |||
| Internet-Draft Cisco | Internet-Draft Cisco | |||
| Intended status: Standards Track C. Bormann | Intended status: Standards Track C. Bormann | |||
| Expires: July 26, 2016 Uni Bremen TZI | Expires: August 15, 2016 Uni Bremen TZI | |||
| L. Toutain | L. Toutain | |||
| IMT-TELECOM Bretagne | IMT-TELECOM Bretagne | |||
| R. Cragie | R. Cragie | |||
| ARM | ARM | |||
| January 23, 2016 | February 12, 2016 | |||
| 6LoWPAN Routing Header | 6LoWPAN Routing Header | |||
| draft-ietf-6lo-routing-dispatch-04 | draft-ietf-6lo-routing-dispatch-05 | |||
| Abstract | Abstract | |||
| This specification introduces a new 6LoWPAN dispatch type for use in | This specification introduces a new 6LoWPAN dispatch type for use in | |||
| 6LoWPAN Route-Over topologies, that initially covers the needs of RPL | 6LoWPAN Route-Over topologies, that initially covers the needs of RPL | |||
| (RFC6550) data packets compression. Using this dispatch type, this | (RFC6550) data packets compression. Using this dispatch type, this | |||
| specification defines a method to compress RPL Option (RFC6553) | specification defines a method to compress RPL Option (RFC6553) | |||
| information and Routing Header type 3 (RFC6554), an efficient IP-in- | information and Routing Header type 3 (RFC6554), an efficient IP-in- | |||
| IP technique and is extensible for more applications. | IP technique and is extensible for more applications. | |||
| skipping to change at page 1, line 40 ¶ | skipping to change at page 1, line 40 ¶ | |||
| 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 http://datatracker.ietf.org/drafts/current/. | Drafts is at http://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 July 26, 2016. | This Internet-Draft will expire on August 15, 2016. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2016 IETF Trust and the persons identified as the | Copyright (c) 2016 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| skipping to change at page 1, line 72 ¶ | skipping to change at page 1, line 72 ¶ | |||
| 3.1. New Routing Header Dispatch (6LoRH) . . . . . . . . . . . 6 | 3.1. New Routing Header Dispatch (6LoRH) . . . . . . . . . . . 6 | |||
| 3.2. Placement Of 6LoRH headers . . . . . . . . . . . . . . . 6 | 3.2. Placement Of 6LoRH headers . . . . . . . . . . . . . . . 6 | |||
| 3.2.1. Relative To Non-6LoRH Headers . . . . . . . . . . . . 7 | 3.2.1. Relative To Non-6LoRH Headers . . . . . . . . . . . . 7 | |||
| 3.2.2. Relative To Other 6LoRH Headers . . . . . . . . . . . 7 | 3.2.2. Relative To Other 6LoRH Headers . . . . . . . . . . . 7 | |||
| 4. 6LoWPAN Routing Header General Format . . . . . . . . . . . . 8 | 4. 6LoWPAN Routing Header General Format . . . . . . . . . . . . 8 | |||
| 4.1. Elective Format . . . . . . . . . . . . . . . . . . . . . 8 | 4.1. Elective Format . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 4.2. Critical Format . . . . . . . . . . . . . . . . . . . . . 9 | 4.2. Critical Format . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 4.3. Compressing Addresses . . . . . . . . . . . . . . . . . . 9 | 4.3. Compressing Addresses . . . . . . . . . . . . . . . . . . 9 | |||
| 4.3.1. Coalescence . . . . . . . . . . . . . . . . . . . . . 10 | 4.3.1. Coalescence . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 4.3.2. DODAG Root Address Determination . . . . . . . . . . 10 | 4.3.2. DODAG Root Address Determination . . . . . . . . . . 10 | |||
| 5. The Routing Header Type 3 (RH3) 6LoRH Header . . . . . . . . 11 | 5. The SRH 6LoRH Header . . . . . . . . . . . . . . . . . . . . 11 | |||
| 5.1. RH3-6LoRH General Operation . . . . . . . . . . . . . . . 13 | 5.1. Encoding . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 5.2. The Design Point of Popping Entries . . . . . . . . . . . 13 | 5.2. SRH-6LoRH General Operation . . . . . . . . . . . . . . . 13 | |||
| 5.3. Compression Reference . . . . . . . . . . . . . . . . . . 14 | 5.2.1. Uncompressed SRH Operation . . . . . . . . . . . . . 13 | |||
| 5.4. Popping Headers . . . . . . . . . . . . . . . . . . . . . 15 | 5.2.2. 6LoRH-Compressed SRH Operation . . . . . . . . . . . 13 | |||
| 5.5. Forwarding . . . . . . . . . . . . . . . . . . . . . . . 16 | 5.2.3. Inner LOWPAN_IPHC Compression . . . . . . . . . . . . 14 | |||
| 6. The RPL Packet Information 6LoRH . . . . . . . . . . . . . . 16 | 5.3. The Design Point of Popping Entries . . . . . . . . . . . 14 | |||
| 6.1. Compressing the RPLInstanceID . . . . . . . . . . . . . . 18 | 5.4. Compression Reference for SRH-6LoRH header entries . . . 15 | |||
| 6.2. Compressing the SenderRank . . . . . . . . . . . . . . . 18 | 5.5. Popping Headers . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 5.6. Forwarding . . . . . . . . . . . . . . . . . . . . . . . 17 | ||||
| 6. The RPL Packet Information 6LoRH . . . . . . . . . . . . . . 17 | ||||
| 6.1. Compressing the RPLInstanceID . . . . . . . . . . . . . . 19 | ||||
| 6.2. Compressing the SenderRank . . . . . . . . . . . . . . . 19 | ||||
| 6.3. The Overall RPI-6LoRH encoding . . . . . . . . . . . . . 19 | 6.3. The Overall RPI-6LoRH encoding . . . . . . . . . . . . . 19 | |||
| 7. The IP-in-IP 6LoRH Header . . . . . . . . . . . . . . . . . . 21 | 7. The IP-in-IP 6LoRH Header . . . . . . . . . . . . . . . . . . 22 | |||
| 8. Security Considerations . . . . . . . . . . . . . . . . . . . 22 | 8. Security Considerations . . . . . . . . . . . . . . . . . . . 23 | |||
| 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 22 | 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 23 | |||
| 9.1. Reserving Space in 6LoWPAN Dispatch Page 1 . . . . . . . 22 | 9.1. Reserving Space in 6LoWPAN Dispatch Page 1 . . . . . . . 23 | |||
| 9.2. New 6LoWPAN Routing Header Type Registry . . . . . . . . 23 | 9.2. New 6LoWPAN Routing Header Type Registry . . . . . . . . 24 | |||
| 10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 23 | 10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 24 | |||
| 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 23 | 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 24 | |||
| 11.1. Normative References . . . . . . . . . . . . . . . . . . 23 | 11.1. Normative References . . . . . . . . . . . . . . . . . . 24 | |||
| 11.2. Informative References . . . . . . . . . . . . . . . . . 24 | 11.2. Informative References . . . . . . . . . . . . . . . . . 25 | |||
| Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 25 | Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 26 | |||
| A.1. Examples Compressing The RPI . . . . . . . . . . . . . . 25 | A.1. Examples Compressing The RPI . . . . . . . . . . . . . . 26 | |||
| A.2. Example Of Downward Packet In Non-Storing Mode . . . . . 27 | A.2. Example Of Downward Packet In Non-Storing Mode . . . . . 28 | |||
| A.3. Example of RH3-6LoRH life-cycle . . . . . . . . . . . . . 28 | A.3. Example of SRH-6LoRH life-cycle . . . . . . . . . . . . . 30 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 30 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 32 | |||
| 1. Introduction | 1. Introduction | |||
| The design of Low Power and Lossy Networks (LLNs) is generally | The design of Low Power and Lossy Networks (LLNs) is generally | |||
| focused on saving energy, a very constrained resource in most cases. | focused on saving energy, a very constrained resource in most cases. | |||
| The other constraints, such as the memory capacity and the duty | The other constraints, such as the memory capacity and the duty | |||
| cycling of the LLN devices, derive from that primary concern. Energy | cycling of the LLN devices, derive from that primary concern. Energy | |||
| is often available from primary batteries that are expected to last | is often available from primary batteries that are expected to last | |||
| for years, or is scavenged from the environment in very limited | for years, or is scavenged from the environment in very limited | |||
| quantities. Any protocol that is intended for use in LLNs must be | quantities. Any protocol that is intended for use in LLNs must be | |||
| skipping to change at page 1, line 174 ¶ | skipping to change at page 1, line 178 ¶ | |||
| implementations. | implementations. | |||
| As an example, the Routing Protocol for Low Power and Lossy Networks | As an example, the Routing Protocol for Low Power and Lossy Networks | |||
| [RFC6550] (RPL) is designed to optimize the routing operations in | [RFC6550] (RPL) is designed to optimize the routing operations in | |||
| constrained LLNs. As part of this optimization, RPL requires the | constrained LLNs. As part of this optimization, RPL requires the | |||
| addition of RPL Packet Information (RPI) in every packet, as defined | addition of RPL Packet Information (RPI) in every packet, as defined | |||
| in Section 11.2 of [RFC6550]. | in Section 11.2 of [RFC6550]. | |||
| The RPL Option for Carrying RPL Information in Data-Plane Datagrams | The RPL Option for Carrying RPL Information in Data-Plane Datagrams | |||
| [RFC6553] specification indicates how the RPI can be placed in a RPL | [RFC6553] specification indicates how the RPI can be placed in a RPL | |||
| Option for use in an IPv6 Hop-by-Hop header. | Option (RPL-OPT) that is placed in an IPv6 Hop-by-Hop header. | |||
| This representation demands a total of 8 bytes, while in most cases | This representation demands a total of 8 bytes, while in most cases | |||
| the actual RPI payload requires only 19 bits. Since the Hop-by-Hop | the actual RPI payload requires only 19 bits. Since the Hop-by-Hop | |||
| header must not flow outside of the RPL domain, it must be inserted | header must not flow outside of the RPL domain, it must be inserted | |||
| in packets entering the domain and be removed from packets that leave | in packets entering the domain and be removed from packets that leave | |||
| the domain. In both cases, this operation implies an IP-in-IP | the domain. In both cases, this operation implies an IP-in-IP | |||
| encapsulation. | encapsulation. | |||
| Additionally, in the case of the Non-Storing Mode of Operation (MOP), | ||||
| RPL requires a Source Routing Header (SRH) in all packets that are | ||||
| routed down a RPL graph. for that purpose, the [IPv6 Routing Header | ||||
| for Source Routes with RPL] (#RFC6554) specification defines the type | ||||
| 3 Routing Header for IPv6 (RH3). | ||||
| ------+--------- ^ | ------+--------- ^ | |||
| | Internet | | | Internet | | |||
| | | Native IPv6 | | | Native IPv6 | |||
| +-----+ | | +-----+ | | |||
| | | Border Router (RPL Root) ^ | ^ | | | Border Router (RPL Root) ^ | ^ | |||
| | | | | | | | | | | | | |||
| +-----+ | | | IPv6 in | +-----+ | | | IPv6 in | |||
| | | | | IPv6 | | | | | IPv6 | |||
| o o o o | | | + RPI | o o o o | | | plus | |||
| o o o o o o o o o | | | or RH3 | o o o o o o o o o | | | | |||
| o o o o o o o o o o | | | | o o o o o o o o o o | | | RPL SRH | |||
| o o o o o o o o o | | | | o o o o o o o o o | | | | |||
| o o o o o o o o v v v | o o o o o o o o v v v | |||
| o o o o | o o o o | |||
| LLN | LLN | |||
| Figure 2: IP-in-IP Encapsulation within the LLN. | Figure 2: IP-in-IP Encapsulation within the LLN. | |||
| Additionally, in the case of the Non-Storing Mode of Operation (MOP), | With Non-Storing RPL, even if the source is a node in the same LLN, | |||
| RPL requires a Routing Header type 3 (RH3) as defined in the IPv6 | the packet must first reach up the graph to the root so that the root | |||
| Routing Header for Source Routes with RPL [RFC6554] specification, | can insert the SRH to go down the graph. In any fashion, whether the | |||
| for all packets that are routed down a RPL graph. With Non-Storing | packet was originated in a node in the LLN or outside the LLN, and | |||
| RPL, even if the source is a node in the same LLN, the packet must | regardless of whether the packet stays within the LLN or not, as long | |||
| first reach up the graph to the root so that the root can insert the | as the source of the packet is not the root itself, the source- | |||
| RH3 to go down the graph. In any fashion, whether the packet was | routing operation also implies an IP-in-IP encapsulation at the root | |||
| originated in a node in the LLN or outside the LLN, and regardless of | in order to insert the SRH. | |||
| whether the packet stays within the LLN or not, as long as the source | ||||
| of the packet is not the root itself, the source-routing operation | ||||
| also implies an IP-in-IP encapsulation at the root in order to insert | ||||
| the RH3. | ||||
| 6TiSCH [I-D.ietf-6tisch-architecture] specifies the operation of IPv6 | 6TiSCH [I-D.ietf-6tisch-architecture] specifies the operation of IPv6 | |||
| over the TimeSlotted Channel Hopping [RFC7554] (TSCH) mode of | over the TimeSlotted Channel Hopping [RFC7554] (TSCH) mode of | |||
| operation of IEEE 802.15.4. The architecture requires the use of | operation of IEEE 802.15.4. The architecture requires the use of | |||
| both RPL and the 6lo adaptation layer over IEEE 802.15.4. Because it | both RPL and the 6lo adaptation layer over IEEE 802.15.4. Because it | |||
| inherits the constraints on frame size from the MAC layer, 6TiSCH | inherits the constraints on frame size from the MAC layer, 6TiSCH | |||
| cannot afford to allocate 8 bytes per packet on the RPI. Hence the | cannot afford to allocate 8 bytes per packet on the RPI. Hence the | |||
| requirement for 6LoWPAN header compression of the RPI. | requirement for 6LoWPAN header compression of the RPI. | |||
| An extensible compression technique is required that simplifies IP- | An extensible compression technique is required that simplifies IP- | |||
| skipping to change at page 1, line 264 ¶ | skipping to change at page 1, line 270 ¶ | |||
| parser, a context being identified by a Page number. The | parser, a context being identified by a Page number. The | |||
| specification defines 16 Pages. | specification defines 16 Pages. | |||
| This draft operates within Page 1, which is indicated by a Dispatch | This draft operates within Page 1, which is indicated by a Dispatch | |||
| Value of binary 11110001. | Value of binary 11110001. | |||
| 3.1. New Routing Header Dispatch (6LoRH) | 3.1. New Routing Header Dispatch (6LoRH) | |||
| This specification introduces a new 6LoWPAN Routing Header (6LoRH) to | This specification introduces a new 6LoWPAN Routing Header (6LoRH) to | |||
| carry IPv6 routing information. The 6LoRH may contain source routing | carry IPv6 routing information. The 6LoRH may contain source routing | |||
| information such as a compressed form of RH3, as well as other sorts | information such as a compressed form of SRH, as well as other sorts | |||
| of routing information such as the RPI and IP-in-IP encapsulation. | of routing information such as the RPI and IP-in-IP encapsulation. | |||
| The 6LoRH is expressed in a 6loWPAN packet as a Type-Length-Value | The 6LoRH is expressed in a 6loWPAN packet as a Type-Length-Value | |||
| (TLV) field, which is extensible for future use. | (TLV) field, which is extensible for future use. | |||
| This specification uses the bit pattern 10xxxxxx in Page 1 for the | This specification uses the bit pattern 10xxxxxx in Page 1 for the | |||
| new 6LoRH Dispatch. Section 4 describes how RPL artifacts in data | new 6LoRH Dispatch. Section 4 describes how RPL artifacts in data | |||
| packets can be compressed as 6LoRH headers. | packets can be compressed as 6LoRH headers. | |||
| 3.2. Placement Of 6LoRH headers | 3.2. Placement Of 6LoRH headers | |||
| skipping to change at page 1, line 310 ¶ | skipping to change at page 1, line 316 ¶ | |||
| stripped from the packet, the whole chain goes with it. When one or | stripped from the packet, the whole chain goes with it. When one or | |||
| more header(s) are inserted by an intermediate router, that router | more header(s) are inserted by an intermediate router, that router | |||
| normally chains the headers and encapsulates the result in IP-in-IP. | normally chains the headers and encapsulates the result in IP-in-IP. | |||
| With this specification, the chains of headers MUST be compressed in | With this specification, the chains of headers MUST be compressed in | |||
| the same order as they appear in the uncompressed form of the packet. | the same order as they appear in the uncompressed form of the packet. | |||
| This means that if there is more than one nested IP-in-IP | This means that if there is more than one nested IP-in-IP | |||
| encapsulations, the first IP-in-IP encapsulation, with all its chain | encapsulations, the first IP-in-IP encapsulation, with all its chain | |||
| of headers, is encoded first in the compressed form. | of headers, is encoded first in the compressed form. | |||
| In the compressed form of a packet that has RH3 or HbH headers after | In the compressed form of a packet that has SRH or HbH headers after | |||
| the inner IPv6 header (e.g. if there is no IP-in-IP encapsulation), | the inner IPv6 header (e.g. if there is no IP-in-IP encapsulation), | |||
| these headers are placed in the 6LoRH form before the 6LOWPAN-IPHC | these headers are placed in the 6LoRH form before the 6LOWPAN-IPHC | |||
| that represents the IPv6 header Section 3.2.1. If this packet gets | that represents the IPv6 header Section 3.2.1. If this packet gets | |||
| encapsulated and some other RH3 or HbH headers are added as part of | encapsulated and some other SRH or HbH headers are added as part of | |||
| the encapsulation, placing the 6LoRH headers next to one another may | the encapsulation, placing the 6LoRH headers next to one another may | |||
| present an ambiguity on which header belong to which chain in the | present an ambiguity on which header belong to which chain in the | |||
| uncompressed form. | uncompressed form. | |||
| In order to disambiguate the headers that follow the inner IPv6 | In order to disambiguate the headers that follow the inner IPv6 | |||
| header in the uncompressed form from the headers that follow the | header in the uncompressed form from the headers that follow the | |||
| outer IP-in-IP header, it is REQUIRED that the compressed IP-in-IP | outer IP-in-IP header, it is REQUIRED that the compressed IP-in-IP | |||
| header is placed last in the encoded chain. This means that the | header is placed last in the encoded chain. This means that the | |||
| 6LoRH headers that are found after the last compressed IP-in-IP | 6LoRH headers that are found after the last compressed IP-in-IP | |||
| header are to be inserted after the IPv6 header that is encoded with | header are to be inserted after the IPv6 header that is encoded with | |||
| the 6LOWPAN-IPHC when decompressing the packet. | the 6LOWPAN-IPHC when decompressing the packet. | |||
| With regards to the relative placement of the RH3 and the RPI in the | With regards to the relative placement of the SRH and the RPI in the | |||
| compressed form, it is a design point for this specification that the | compressed form, it is a design point for this specification that the | |||
| RH3 entries are consumed as the packet progresses down the LLN | SRH entries are consumed as the packet progresses down the LLN | |||
| Section 5.2. In order to make this operation simpler in the | Section 5.3. In order to make this operation simpler in the | |||
| compressed form, it is REQUIRED that the in the compressed form, the | compressed form, it is REQUIRED that the in the compressed form, the | |||
| addresses along the source route path are encoded in the order of the | addresses along the source route path are encoded in the order of the | |||
| path, and that the compressed RH3 are placed before the compressed | path, and that the compressed SRH are placed before the compressed | |||
| RPI. | RPI. | |||
| 4. 6LoWPAN Routing Header General Format | 4. 6LoWPAN Routing Header General Format | |||
| The 6LoRH usesthe Dispatch Value Bit Pattern of 10xxxxxx in Page 1. | The 6LoRH usesthe Dispatch Value Bit Pattern of 10xxxxxx in Page 1. | |||
| The Dispatch Value Bit Pattern is split in two forms of 6LoRH: | The Dispatch Value Bit Pattern is split in two forms of 6LoRH: | |||
| Elective (6LoRHE) that may skipped if not understood | Elective (6LoRHE) that may skipped if not understood | |||
| skipping to change at page 1, line 417 ¶ | skipping to change at page 1, line 423 ¶ | |||
| 4.3. Compressing Addresses | 4.3. Compressing Addresses | |||
| The general technique used in this draft to compress an address is | The general technique used in this draft to compress an address is | |||
| first to determine a reference that as a long prefix match with this | first to determine a reference that as a long prefix match with this | |||
| address, and then elide that matching piece. In order to reconstruct | address, and then elide that matching piece. In order to reconstruct | |||
| the compress address, the receiving node will perform the process of | the compress address, the receiving node will perform the process of | |||
| coalescence described in section Section 4.3.1. | coalescence described in section Section 4.3.1. | |||
| One possible reference is the root of the RPL DODAG that is being | One possible reference is the root of the RPL DODAG that is being | |||
| traversed. It is used to compress an outer IP-in-IP header, and if | traversed. It is used by 6LoRH as the reference to compress an outer | |||
| the root is the source of the packet, the technique allows to fully | IP header, in case of an IP-in-IP encapsulation. If the root is the | |||
| elide the source address in the compressed form of the IP header. If | source of the packet, this technique allows to fully elide the source | |||
| the root is not the encapsulator, then the encapsulator address may | address in the compressed form of the IP header. If the root is not | |||
| still be compressed using the root as reference. How the address of | the encapsulator, then the encapsulator address may still be | |||
| the root is determined is discussed in Section 4.3.2. | compressed using the root as reference. How the address of the root | |||
| is determined is discussed in Section 4.3.2. | ||||
| Once the address of the source of the packet is determined, it | Once the address of the source of the packet is determined, it | |||
| becomes the reference for the compression of the addresses that are | becomes the reference for the compression of the addresses that are | |||
| located in compressed RH3 headers that are present inside the IP-in- | located in compressed SRH headers that are present inside the IP-in- | |||
| IP encapsulation in the uncompressed form. | IP encapsulation in the uncompressed form. | |||
| 4.3.1. Coalescence | 4.3.1. Coalescence | |||
| An IPv6 compressed address is coalesced with a reference address by | An IPv6 compressed address is coalesced with a reference address by | |||
| overriding the N rightmost bytes of the reference address with the | overriding the N rightmost bytes of the reference address with the | |||
| compressed address, where N is the length of the compressed address, | compressed address, where N is the length of the compressed address, | |||
| as indicated by the Type of the RH3-6LoRH header in Figure 7. | as indicated by the Type of the SRH-6LoRH header in Figure 7. | |||
| The reference address MAY be a compressed address as well, in which | The reference address MAY be a compressed address as well, in which | |||
| case it MUST be compressed in a form that is of an equal or greater | case it MUST be compressed in a form that is of an equal or greater | |||
| length than the address that is being coalesced. | length than the address that is being coalesced. | |||
| A compressed address is expanded by coalescing it with a reference | A compressed address is expanded by coalescing it with a reference | |||
| address. In the particular case of a Type 4 RH3-6LoRH, the address | address. In the particular case of a Type 4 SRH-6LoRH, the address | |||
| is expressed in full and the coalescence is a complete override as | is expressed in full and the coalescence is a complete override as | |||
| illustrated in Figure 5. | illustrated in Figure 5. | |||
| RRRRRRRRRRRRRRRRRRRR reference address, may be compressed or not | RRRRRRRRRRRRRRRRRRRR reference address, may be compressed or not | |||
| CCCCCCC compressed address, shorter or same as reference | CCCCCCC compressed address, shorter or same as reference | |||
| RRRRRRRRRRRRRCCCCCCC Coalesced address, same compression as reference | RRRRRRRRRRRRRCCCCCCC Coalesced address, same compression as reference | |||
| Figure 5: Coalescing addresses. | Figure 5: Coalescing addresses. | |||
| skipping to change at page 1, line 471 ¶ | skipping to change at page 1, line 478 ¶ | |||
| With [RFC6282], the state is provided to the stack by the 6LoWPAN | With [RFC6282], the state is provided to the stack by the 6LoWPAN | |||
| Neighbor Discovery Protocol (NDP) [RFC6775]. NDP exchanges the | Neighbor Discovery Protocol (NDP) [RFC6775]. NDP exchanges the | |||
| context through 6LoWPAN Context Option in Router Advertisement (RA) | context through 6LoWPAN Context Option in Router Advertisement (RA) | |||
| messages. In the compressed form of the packet, the context can be | messages. In the compressed form of the packet, the context can be | |||
| signaled in a Context Identifier Extension. | signaled in a Context Identifier Extension. | |||
| With this specification, the compression information is provided to | With this specification, the compression information is provided to | |||
| the stack by RPL, and RPL exchanges it through the DODAGID field in | the stack by RPL, and RPL exchanges it through the DODAGID field in | |||
| the DAG Information Object (DIO) messages, as described in more | the DAG Information Object (DIO) messages, as described in more | |||
| details below. In the compressed form of the packet, the context can | details below. In the compressed form of the packet, the context can | |||
| be signaled in by the InstanceID in the RPI. | be signaled in by the RPLInstanceID in the RPI. | |||
| With RPL [RFC6550], the address of DODAG root is known from the | With RPL [RFC6550], the address of the DODAG root is known from the | |||
| DODAGID field of the DIO messages. For a Global Instance, the | DODAGID field of the DIO messages. For a Global Instance, the | |||
| RPLInstanceID that is present in the RPI is enough information to | RPLInstanceID that is present in the RPI is enough information to | |||
| identify the DODAG that this node participates to and its associated | identify the DODAG that this node participates to and its associated | |||
| root. But for a Local Instance, the address of the root MUST be | root. But for a Local Instance, the address of the root MUST be | |||
| explicit, either in some device configuration or signaled in the | explicit, either in some device configuration or signaled in the | |||
| packet, as the source or the destination address, respectively. | packet, as the source or the destination address, respectively. | |||
| When implicit, the address of the DODAG root MUST be determined as | When implicit, the address of the DODAG root MUST be determined as | |||
| follows: | follows: | |||
| If the whole network is a single DODAG then the root can be well- | If the whole network is a single DODAG then the root can be well- | |||
| known and does not need to be signaled in the packets. But RPL does | known and does not need to be signaled in the packets. But since RPL | |||
| not expose that property and it can only be known by a configuration | does not expose that property, it can only be known by a | |||
| applied to all nodes. | configuration applied to all nodes. | |||
| Else, the router that encapsulates the packet and compresses it with | Else, the router that encapsulates the packet and compresses it with | |||
| this specification MUST also place an RPI in the packet as prescribed | this specification MUST also place an RPI in the packet as prescribed | |||
| by [RFC6550] to enable the identification of the DODAG. The RPI must | by [RFC6550] to enable the identification of the DODAG. The RPI must | |||
| be present even in the case when the router also places an RH3 header | be present even in the case when the router also places an SRH header | |||
| in the packet. | in the packet. | |||
| It is expected that the RPL implementation provides an abstract | It is expected that the RPL implementation maintains an abstract | |||
| context table, indexed by Global RPLInstanceID, that provides the | context table, indexed by Global RPLInstanceID, that provides the | |||
| address of the root of the DODAG that this nodes participates to for | address of the root of the DODAG that this nodes participates to for | |||
| that particular Instance. | that particular RPL Instance. | |||
| 5. The Routing Header Type 3 (RH3) 6LoRH Header | 5. The SRH 6LoRH Header | |||
| ## Encoding {#RH3-6LoRH-encoding} | 5.1. Encoding | |||
| The Routing Header type 3 (RH3) 6LoRH (RH3-6LoRH) header is a | The Source Routing Header 6LoRH (SRH-6LoRH) header is a Critical | |||
| Critical 6LoWPAN Routing Header that provides a compressed form for | 6LoWPAN Routing Header that provides a compressed form for the SRH, | |||
| the RH3, as defined in [RFC6554] for use by RPL routers. Routers | as defined in [RFC6554] for use by RPL routers. Routers that need to | |||
| that need to forward a packet with a RH3-6LoRH are expected to be RPL | forward a packet with a SRH-6LoRH are expected to be RPL routers and | |||
| routers and are expected to support this specification. If a non-RPL | are expected to support this specification. If a non-RPL router | |||
| router receives a packet with a RH3-6LoRH, this means that there was | receives a packet with a SRH-6LoRH, this means that there was a | |||
| a routing error and the packet should be dropped so the Type cannot | routing error and the packet should be dropped so the Type cannot be | |||
| be ignored. | ignored. | |||
| 0 1 | 0 1 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- -+- -+ ... +- -+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- -+- -+ ... +- -+ | |||
| |1|0|0| Size |6LoRH Type 0..4| Hop1 | Hop2 | | HopN | | |1|0|0| Size |6LoRH Type 0..4| Hop1 | Hop2 | | HopN | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- -+- -+ ... +- -+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- -+- -+ ... +- -+ | |||
| Size indicates the number of compressed addresses | Size indicates the number of compressed addresses | |||
| Figure 6: The RH3-6LoRH. | Figure 6: The SRH-6LoRH. | |||
| The 6LoRH Type indicates the compression level used in a given | The 6LoRH Type indicates the compression level used in a given SRH- | |||
| RH3-6LoRH header. | 6LoRH header. | |||
| One or more 6LoRH header(s) MAY be placed in a 6LoWPAN packet. | One or more 6LoRH header(s) MAY be placed in a 6LoWPAN packet. | |||
| It results that all addresses in a given RH3-6LoRH header MUST be | It results that all addresses in a given SRH-6LoRH header MUST be | |||
| compressed in an identical fashion, down to using the identical | compressed in an identical fashion, down to using the identical | |||
| number of bytes per address. In order to get different degrees of | number of bytes per address. In order to get different degrees of | |||
| compression, multiple consecutive RH3-6LoRH headers MUST be used. | compression, multiple consecutive SRH-6LoRH headers MUST be used. | |||
| Type 0 means that the address is compressed down to one byte, whereas | Type 0 means that the address is compressed down to one byte, whereas | |||
| Type 4 means that the address is provided in full in the RH3-6LoRH | Type 4 means that the address is provided in full in the SRH-6LoRH | |||
| with no compression. The complete list of Types of RH3-6LoRH and the | with no compression. The complete list of Types of SRH-6LoRH and the | |||
| corresponding compression level are provided in Figure 7: | corresponding compression level are provided in Figure 7: | |||
| +-----------+----------------------+ | +-----------+----------------------+ | |||
| | 6LoRH | Length of compressed | | | 6LoRH | Length of compressed | | |||
| | Type | IPv6 address (bytes) | | | Type | IPv6 address (bytes) | | |||
| +-----------+----------------------+ | +-----------+----------------------+ | |||
| | 0 | 1 | | | 0 | 1 | | |||
| | 1 | 2 | | | 1 | 2 | | |||
| | 2 | 4 | | | 2 | 4 | | |||
| | 3 | 8 | | | 3 | 8 | | |||
| | 4 | 16 | | | 4 | 16 | | |||
| +-----------+----------------------+ | +-----------+----------------------+ | |||
| Figure 7: The RH3-6LoRH Types. | Figure 7: The SRH-6LoRH Types. | |||
| In the case of a RH3-6LoRH header, the TSE field is used as a Size, | In the case of a SRH-6LoRH header, the TSE field is used as a Size, | |||
| which encodes the number of hops minus 1; so a Size of 0 means one | which encodes the number of hops minus 1; so a Size of 0 means one | |||
| hop, and the maximum that can be encoded is 32 hops. (If more than | hop, and the maximum that can be encoded is 32 hops. (If more than | |||
| 32 hops need to be expressed, a sequence of RH3-6LoRH elements can be | 32 hops need to be expressed, a sequence of SRH-6LoRH elements can be | |||
| employed.) It results that the Length in bytes of a RH3-6LoRH header | employed.) It results that the Length in bytes of a SRH-6LoRH header | |||
| is: | is: | |||
| 2 + Length_of_compressed_IPv6_address * (Size + 1) | 2 + Length_of_compressed_IPv6_address * (Size + 1) | |||
| 5.1. RH3-6LoRH General Operation | 5.2. SRH-6LoRH General Operation | |||
| 5.2.1. Uncompressed SRH Operation | ||||
| In the non-compressed form, when the root generates or forwards a | In the non-compressed form, when the root generates or forwards a | |||
| packet in non-Storing Mode, it needs to include a Routing Header type | packet in non-Storing Mode, it needs to include a Source Routing | |||
| 3 (RH3) [RFC6554] to signal a strict source-route path to a final | Header [RFC6554] to signal a strict source-route path to a final | |||
| destination down the DODAG. All the hops along the path, but the | destination down the DODAG. | |||
| first one, are encoded in order in the RH3. The last entry in the | ||||
| RH3 is the final destination and the destination in the IPv6 header | ||||
| is the first hop along the source-route path. The intermediate hops | ||||
| perform a swap and the Segment-Left field indicates the active entry | ||||
| in the Routing Header [RFC2460]. The current destination of the | ||||
| packet, which is the termination of the current segment, is indicated | ||||
| at all times by the destination address of the IPv6 header. | ||||
| The handling of the RH3-6LoRH is different: there is no swap, and a | All the hops along the path, but the first one, are encoded in order | |||
| in the SRH. The last entry in the SRH is the final destination and | ||||
| the destination in the IPv6 header is the first hop along the source- | ||||
| route path. The intermediate hops perform a swap and the Segment- | ||||
| Left field indicates the active entry in the Routing Header | ||||
| [RFC2460]. | ||||
| The current destination of the packet, which is the termination of | ||||
| the current segment, is indicated at all times by the destination | ||||
| address of the IPv6 header. | ||||
| 5.2.2. 6LoRH-Compressed SRH Operation | ||||
| The handling of the SRH-6LoRH is different: there is no swap, and a | ||||
| forwarding router that corresponds to the first entry in the first | forwarding router that corresponds to the first entry in the first | |||
| RH3-6LoRH upon reception of a packet effectively consumes that entry | SRH-6LoRH upon reception of a packet effectively consumes that entry | |||
| when forwarding. This means that the size of a compressed source- | when forwarding. This means that the size of a compressed source- | |||
| routed packet decreases as the packet progresses along its path and | routed packet decreases as the packet progresses along its path and | |||
| that the routing information is lost along the way. This also means | that the routing information is lost along the way. This also means | |||
| that an RH3 encoded with 6LoRH is not recoverable and cannot be | that an SRH encoded with 6LoRH is not recoverable and cannot be | |||
| protected. | protected. | |||
| When compressed with this specification, all the remaining hops MUST | When compressed with this specification, all the remaining hops MUST | |||
| be encoded in order in one or more consecutive RH3-6LoRH headers. | be encoded in order in one or more consecutive SRH-6LoRH headers. | |||
| Whether or not there is a RH3-6LoRH header present, the address of | Whether or not there is a SRH-6LoRH header present, the address of | |||
| the final destination is indicated in the LoWPAN_IPHC at all times | the final destination is indicated in the LoWPAN_IPHC at all times | |||
| along the path. Examples of this are provided in Appendix A. | along the path. Examples of this are provided in Appendix A. | |||
| The current destination (termination of the current segment) for a | The current destination (termination of the current segment) for a | |||
| compressed source-routed packet is indicated in the first entry of | compressed source-routed packet is indicated in the first entry of | |||
| the first RH3-6LoRH. In strict source-routing, that entry MUST match | the first SRH-6LoRH. In strict source-routing, that entry MUST match | |||
| an address of the router that receives the packet. | an address of the router that receives the packet. | |||
| The last entry in the last RH3-6LoRH is the last router on the way to | The last entry in the last SRH-6LoRH is the last router on the way to | |||
| the final destination in the LLN. It is typically a RPL parent of | the final destination in the LLN. This router can be the final | |||
| the final destination, but it can also be a router acting at 6LR | destination if it is found desirable to carry a whole IP-in-IP | |||
| [RFC6775] for the destination host. | encapsulation all the way. Else, it is the RPL parent of the final | |||
| destination, or a router acting at 6LR [RFC6775] for the destination | ||||
| host, and advertising the host as an external route to RPL. | ||||
| 5.2. The Design Point of Popping Entries | If the SRH-6LoRH header is contained in an IP-in-IP encapsulation, | |||
| the last router removes the whole chain of headers. Otherwise, it | ||||
| removes the SRH-6LoRH header only. | ||||
| 5.2.3. Inner LOWPAN_IPHC Compression | ||||
| 6LoWPAN ND [RFC6282] is designed to support more than one IPv6 | ||||
| address per node and per Interface Identifier (IID), an IID being | ||||
| typically derived from a MAC address to optimize the LOWPAN-IPHC | ||||
| compression. | ||||
| Link local addresses are compressed with stateless address | ||||
| compression (S/DAC=0). The other addresses are derived from | ||||
| different prefixes and they can be compressed with stateful address | ||||
| compression based on a context (S/DAC=1). | ||||
| But stateless compression is only defined for the specific link-local | ||||
| prefix as opposed to the prefix in an encapsulating header. And with | ||||
| stateful compression, the compression reference is found in a | ||||
| context, as opposed to an encapsulating header. | ||||
| It results that in the case of an IP-in-IP encapsulation, it is | ||||
| possible to compress an inner source (respectively destination) IP | ||||
| address in a LOWPAN_IPHC based on the encapsulating IP header only if | ||||
| stateful (context-based) compression is used. The compression will | ||||
| operate only if the IID in the source (respectively the destination) | ||||
| IP address in the outer and inner headers match, which usually means | ||||
| that they refer to the same node . This is encoded as S/DAC = 1 and | ||||
| S/AM=11. It must be noted that the outer destination address that is | ||||
| used to compress the inner destination address is the last entry in | ||||
| the last SRH-6LoRH header. | ||||
| 5.3. The Design Point of Popping Entries | ||||
| In order to save energy and to optimize the chances of transmission | In order to save energy and to optimize the chances of transmission | |||
| success on lossy media, it is a design point for this specification | success on lossy media, it is a design point for this specification | |||
| that the entries in the RH3 that have been used are removed from the | that the entries in the SRH that have been used are removed from the | |||
| packet. This creates a discrepancy from the art of IPv6 where | packet. This creates a discrepancy from the art of IPv6 where | |||
| Routing Header are mutable but recoverable. | Routing Header are mutable but recoverable. | |||
| With this specification, the packet can be expanded at any hop into a | With this specification, the packet can be expanded at any hop into a | |||
| valid IPv6 packet, including a RH3, and compressed back. But the | valid IPv6 packet, including a SRH, and compressed back. But the | |||
| packet as decompressed along the way will not carry all the consumed | packet as decompressed along the way will not carry all the consumed | |||
| addresses that packet would have if it had been forwarded in the | addresses that packet would have if it had been forwarded in the | |||
| uncompressed form. | uncompressed form. | |||
| It is noted that: | It is noted that: | |||
| The value of keeping the whole RH in an IPv6 header is for the | The value of keeping the whole RH in an IPv6 header is for the | |||
| receiver to reverse it to use the symmetrical path on the way | receiver to reverse it to use the symmetrical path on the way | |||
| back. | back. | |||
| skipping to change at page 1, line 632 ¶ | skipping to change at page 1, line 681 ¶ | |||
| There is no use of reversing a RH in the present RPL | There is no use of reversing a RH in the present RPL | |||
| specifications. | specifications. | |||
| P2P RPL reverses a path that was learned reactively, as a part of | P2P RPL reverses a path that was learned reactively, as a part of | |||
| the protocol operation, which is probably a cleaner way than a | the protocol operation, which is probably a cleaner way than a | |||
| reversed echo on the data path. | reversed echo on the data path. | |||
| Reversing a header is discouraged by [RFC2460] for RH0 unless it | Reversing a header is discouraged by [RFC2460] for RH0 unless it | |||
| is authenticated, which requires an Authentication Header (AH). | is authenticated, which requires an Authentication Header (AH). | |||
| There is no definition of an AH operation for RH3, and there is no | There is no definition of an AH operation for SRH, and there is no | |||
| indication that the need exists in LLNs. | indication that the need exists in LLNs. | |||
| It is noted that AH does not protect the RH on the way. AH is a | It is noted that AH does not protect the RH on the way. AH is a | |||
| validation at the receiver with the sole value of enabling the | validation at the receiver with the sole value of enabling the | |||
| receiver to reversing it. | receiver to reversing it. | |||
| A RPL domain is usually protected by L2 security and that secures | A RPL domain is usually protected by L2 security and that secures | |||
| both RPL itself and the RH in the packets, at every hop. This is | both RPL itself and the RH in the packets, at every hop. This is | |||
| a better security than that provided by AH. | a better security than that provided by AH. | |||
| In summary, the benefit of saving energy and lowering the chances of | In summary, the benefit of saving energy and lowering the chances of | |||
| loss by sending smaller frames over the LLN are seen as overwhelming | loss by sending smaller frames over the LLN are seen as overwhelming | |||
| compared to the value of possibly reversing the header. | compared to the value of possibly reversing the header. | |||
| 5.3. Compression Reference | 5.4. Compression Reference for SRH-6LoRH header entries | |||
| In order to optimize the compression of IP addresses present in the | In order to optimize the compression of IP addresses present in the | |||
| RH3 headers, this specification requires that the 6LoWPAN layer | SRH headers, this specification requires that the 6LoWPAN layer | |||
| identifies an address that is used as reference for the compression. | identifies an address that is used as reference for the compression. | |||
| With this specification, the Compression Reference for addresses | ||||
| found in an RH3 header is the source of the IPv6 packet. | ||||
| With RPL [RFC6550], an RH3 header may only be present in Non-Storing | With this specification, the Compression Reference for the first | |||
| address found in an SRH header is the source of the IPv6 packet, and | ||||
| then the reference for each subsequent entry is the address of its | ||||
| predecessor once it is uncompressed. | ||||
| With RPL [RFC6550], an SRH header may only be present in Non-Storing | ||||
| mode, and it may only be placed in the packet by the root of the | mode, and it may only be placed in the packet by the root of the | |||
| DODAG, which must be the source of the resulting IPv6 packet | DODAG, which must be the source of the resulting IPv6 packet | |||
| [RFC2460]. In this case, the address used as Compression Reference | [RFC2460]. In this case, the address used as Compression Reference | |||
| is that the address of the root, and it can be implicit when the | is that the address of the root, and it can be implicit when the | |||
| address of the root is. | address of the root is. | |||
| The Compression Reference MUST be determined as follows: | The Compression Reference MUST be determined as follows: | |||
| The reference address may be obtained by configuration. The | The reference address may be obtained by configuration. The | |||
| configuration may indicate either the address in full, or the | configuration may indicate either the address in full, or the | |||
| skipping to change at page 1, line 678 ¶ | skipping to change at page 1, line 730 ¶ | |||
| [RFC6282]. | [RFC6282]. | |||
| Else, and if there is no IP-in-IP encapsulation, the source address | Else, and if there is no IP-in-IP encapsulation, the source address | |||
| in the IPv6 header that is compressed with LOWPAN-IPHC is the | in the IPv6 header that is compressed with LOWPAN-IPHC is the | |||
| reference for the compression. | reference for the compression. | |||
| Else, and if the IP-in-IP compression specified in this document is | Else, and if the IP-in-IP compression specified in this document is | |||
| used and the Encapsulator Address is provided, then the Encapsulator | used and the Encapsulator Address is provided, then the Encapsulator | |||
| Address is the reference. | Address is the reference. | |||
| 5.4. Popping Headers | 5.5. Popping Headers | |||
| Upon reception, the router checks whether the address in the first | Upon reception, the router checks whether the address in the first | |||
| entry of the first RH3-6LoRH one of its own addresses. In that case, | entry of the first SRH-6LoRH one of its own addresses. In that case, | |||
| router MUST consume that entry before forwarding, which is an action | router MUST consume that entry before forwarding, which is an action | |||
| of popping from a stack, where the stack is effectively the sequence | of popping from a stack, where the stack is effectively the sequence | |||
| of entries in consecutive RH3-6LoRH headers. | of entries in consecutive SRH-6LoRH headers. | |||
| Popping an entry of an RH3-6LoRH header is a recursive action | Popping an entry of an SRH-6LoRH header is a recursive action | |||
| performed as follows: | performed as follows: | |||
| If the Size of the RH3-6LoRH header is 1 or more, indicating that | If the Size of the SRH-6LoRH header is 1 or more, indicating that | |||
| there are at least 2 entries in the header, the router removes the | there are at least 2 entries in the header, the router removes the | |||
| first entry and decrements the Size (by 1). | first entry and decrements the Size (by 1). | |||
| Else (meaning that this is the last entry in the RH3-6LoRH header), | Else (meaning that this is the last entry in the SRH-6LoRH header), | |||
| and if there is no next RH3-6LoRH header after this then the | and if there is no next SRH-6LoRH header after this then the SRH- | |||
| RH3-6LoRH is removed. | 6LoRH is removed. | |||
| Else, if there is a next RH3-6LoRH of a Type with a larger or equal | Else, if there is a next SRH-6LoRH of a Type with a larger or equal | |||
| value, meaning a same or lesser compression yielding same or larger | value, meaning a same or lesser compression yielding same or larger | |||
| compressed forms, then the RH3-6LoRH is removed. | compressed forms, then the SRH-6LoRH is removed. | |||
| Else, the first entry of the next RH3-6LoRH is popped from the next | Else, the first entry of the next SRH-6LoRH is popped from the next | |||
| RH3-6LoRH and coalesced with the first entry of this RH3-6LoRH. | SRH-6LoRH and coalesced with the first entry of this SRH-6LoRH. | |||
| At the end of the process, if there is no more RH3-6LoRH in the | At the end of the process, if there is no more SRH-6LoRH in the | |||
| packet, then the processing node is the last router along the source | packet, then the processing node is the last router along the source | |||
| route path. | route path. | |||
| 5.5. Forwarding | 5.6. Forwarding | |||
| When receiving a packet with a RH3-6LoRH, a router determines the | When receiving a packet with a SRH-6LoRH, a router determines the | |||
| IPv6 address of the current segment endpoint. | IPv6 address of the current segment endpoint. | |||
| If strict source routing is enforced and thus router is not the | If strict source routing is enforced and thus router is not the | |||
| segment endpoint for the packet then this router MUST drop the | segment endpoint for the packet then this router MUST drop the | |||
| packet. | packet. | |||
| If this router is the current segment endpoint, then the router pops | If this router is the current segment endpoint, then the router pops | |||
| its address as described in Section 5.4 and continues processing the | its address as described in Section 5.5 and continues processing the | |||
| packet. | packet. | |||
| If there is still a RH3-6LoRH, then the router determines the new | If there is still a SRH-6LoRH, then the router determines the new | |||
| segment endpoint and routes the packet towards that endpoint. | segment endpoint and routes the packet towards that endpoint. | |||
| Otherwise the router uses the destination in the inner IP header to | Otherwise the router uses the destination in the inner IP header to | |||
| forward or accept the packet. | forward or accept the packet. | |||
| The segment endpoint of a packet MUST be determined as follows: | The segment endpoint of a packet MUST be determined as follows: | |||
| The router first determines the Compression Reference as discussed in | The router first determines the Compression Reference as discussed in | |||
| Section 4.3.1. | Section 4.3.1. | |||
| The router then coalesces the Compression Reference with the first | The router then coalesces the Compression Reference with the first | |||
| entry of the first RH3-6LoRH header as discussed in Section 5.3. If | entry of the first SRH-6LoRH header as discussed in Section 5.4. If | |||
| the type of the RH3-6LoRH header is type 4 then the coalescence is a | the type of the SRH-6LoRH header is type 4 then the coalescence is a | |||
| full override. | full override. | |||
| Since the Compression Reference is an uncompressed address, the | Since the Compression Reference is an uncompressed address, the | |||
| coalesced IPv6 address is also expressed in the full 128bits. | coalesced IPv6 address is also expressed in the full 128bits. | |||
| An example of this operation is provided in Appendix A.3. | An example of this operation is provided in Appendix A.3. | |||
| 6. The RPL Packet Information 6LoRH | 6. The RPL Packet Information 6LoRH | |||
| [RFC6550], Section 11.2, specifies the RPL Packet Information (RPI) | [RFC6550], Section 11.2, specifies the RPL Packet Information (RPI) | |||
| as a set of fields that are placed by RPL routers in IP packets for | as a set of fields that are placed by RPL routers in IP packets to | |||
| the purpose of Instance Identification, as well as Loop Avoidance and | identify the RPL Instance, detect anomalies and trigger corrective | |||
| Detection. | actions. | |||
| In particular, the SenderRank, which is the scalar metric computed by | In particular, the SenderRank, which is the scalar metric computed by | |||
| a specialized Objective Function such as [RFC6552], indicates the | a specialized Objective Function such as [RFC6552], indicates the | |||
| Rank of the sender and is modified at each hop. The SenderRank field | Rank of the sender and is modified at each hop. The SenderRank field | |||
| is used to validate that the packet progresses in the expected | is used to validate that the packet progresses in the expected | |||
| direction, either upwards or downwards, along the DODAG. | direction, either upwards or downwards, along the DODAG. | |||
| RPL defines the RPL Option for Carrying RPL Information in Data-Plane | RPL defines the RPL Option for Carrying RPL Information in Data-Plane | |||
| Datagrams [RFC6553] to transport the RPI, which is carried in an IPv6 | Datagrams [RFC6553] to transport the RPI, which is carried in an IPv6 | |||
| Hop-by-Hop Options Header [RFC2460], typically consuming eight bytes | Hop-by-Hop Options Header [RFC2460], typically consuming eight bytes | |||
| skipping to change at page 1, line 789 ¶ | skipping to change at page 1, line 841 ¶ | |||
| domain. | domain. | |||
| For that reason, this specification defines an IP-in-IP-6LoRH header | For that reason, this specification defines an IP-in-IP-6LoRH header | |||
| in Section 7, but it must be noted that removal of a 6LoRH header | in Section 7, but it must be noted that removal of a 6LoRH header | |||
| does not require manipulation of the packet in the LOWPAN_IPHC, and | does not require manipulation of the packet in the LOWPAN_IPHC, and | |||
| thus, if the source address in the LOWPAN_IPHC is the node that | thus, if the source address in the LOWPAN_IPHC is the node that | |||
| inserted the IP-in-IP-6LoRH header then this situation alone does not | inserted the IP-in-IP-6LoRH header then this situation alone does not | |||
| mandate an IP-in-IP-6LoRH header. | mandate an IP-in-IP-6LoRH header. | |||
| Note: A typical packet in RPL non-storing mode going down the RPL | Note: A typical packet in RPL non-storing mode going down the RPL | |||
| graph requires an IP-in-IP encapsulation of the RH3, whereas the RPI | graph requires an IP-in-IP encapsulation of the SRH, whereas the RPI | |||
| is usually (and quite illegally) omitted, unless it is important to | is usually (and quite illegally) omitted, unless it is important to | |||
| indicate the RPLInstanceID. To match this structure, an optimized | indicate the RPLInstanceID. To match this structure, an optimized | |||
| IP-in-IP 6LoRH header is defined in Section 7. | IP-in-IP 6LoRH header is defined in Section 7. | |||
| As a result, a RPL packet may bear only an RPI-6LoRH header and no | As a result, a RPL packet may bear only an RPI-6LoRH header and no | |||
| IP-in-IP-6LoRH header. In that case, the source and destination of | IP-in-IP-6LoRH header. In that case, the source and destination of | |||
| the packet are specified by the LOWPAN_IPHC. | the packet are specified by the LOWPAN_IPHC. | |||
| As with [RFC6553], the fields in the RPI include an 'O', an 'R', and | As with [RFC6553], the fields in the RPI include an 'O', an 'R', and | |||
| an 'F' bit, an 8-bit RPLInstanceID (with some internal structure), | an 'F' bit, an 8-bit RPLInstanceID (with some internal structure), | |||
| and a 16-bit SenderRank. | and a 16-bit SenderRank. | |||
| The remainder of this section defines the RPI-6LoRH header, which is | The remainder of this section defines the RPI-6LoRH header, which is | |||
| a Critical 6LoWPAN Routing Header that is designed to transport the | a Critical 6LoWPAN Routing Header that is designed to transport the | |||
| RPI in 6LoWPAN LLNs. | RPI in 6LoWPAN LLNs. | |||
| 6.1. Compressing the RPLInstanceID | 6.1. Compressing the RPLInstanceID | |||
| RPL Instances are discussed in [RFC6550], Section 5. A number of | RPL Instances are discussed in [RFC6550], Section 5. A number of | |||
| simple use cases do not require more than one instance, and in such | simple use cases do not require more than one RPL Instance, and in | |||
| cases, the instance is expected to be the global Instance 0. A | such cases, the RPL Instance is expected to be the Global Instance 0. | |||
| global RPLInstanceID is encoded in a RPLInstanceID field as follows: | A global RPLInstanceID is encoded in a RPLInstanceID field as | |||
| follows: | ||||
| 0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 | |||
| +-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
| |0| ID | Global RPLInstanceID in 0..127 | |0| ID | Global RPLInstanceID in 0..127 | |||
| +-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
| Figure 8: RPLInstanceID Field Format for Global Instances. | Figure 8: RPLInstanceID Field Format for Global Instances. | |||
| For the particular case of the global Instance 0, the RPLInstanceID | For the particular case of the Global Instance 0, the RPLInstanceID | |||
| field is all zeros. This specification allows to elide a | field is all zeros. This specification allows to elide a | |||
| RPLInstanceID field that is all zeros, and defines a I flag that, | RPLInstanceID field that is all zeros, and defines a I flag that, | |||
| when set, signals that the field is elided. | when set, signals that the field is elided. | |||
| 6.2. Compressing the SenderRank | 6.2. Compressing the SenderRank | |||
| The SenderRank is the result of the DAGRank operation on the rank of | The SenderRank is the result of the DAGRank operation on the rank of | |||
| the sender; here the DAGRank operation is defined in [RFC6550], | the sender; here the DAGRank operation is defined in [RFC6550], | |||
| Section 3.5.1, as: | Section 3.5.1, as: | |||
| skipping to change at page 1, line 879 ¶ | skipping to change at page 1, line 932 ¶ | |||
| 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 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ... -+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ... -+-+-+ | |||
| |1|0|0|O|R|F|I|K| 6LoRH Type=5 | Compressed fields | | |1|0|0|O|R|F|I|K| 6LoRH Type=5 | Compressed fields | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ... -+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ... -+-+-+ | |||
| Figure 9: The Generic RPI-6LoRH Format. | Figure 9: The Generic RPI-6LoRH Format. | |||
| O, R, and F bits: The O, R, and F bits are defined in [RFC6550], | O, R, and F bits: The O, R, and F bits are defined in [RFC6550], | |||
| section 11.2. | section 11.2. | |||
| I bit: If it is set, the Instance ID is elided and the RPLInstanceID | I bit: If it is set, the RPLInstanceID is elided and the | |||
| is the Global RPLInstanceID 0. If it is not set, the octet | RPLInstanceID is the Global RPLInstanceID 0. If it is not set, | |||
| immediately following the type field contains the RPLInstanceID | the octet immediately following the type field contains the | |||
| as specified in [RFC6550], section 5.1. | RPLInstanceID as specified in [RFC6550], section 5.1. | |||
| K bit: If it is set, the SenderRank is compressed into one octet, | K bit: If it is set, the SenderRank is compressed into one octet, | |||
| with the least significant octet elided. If it is not set, the | with the least significant octet elided. If it is not set, the | |||
| SenderRank, is fully inlined as two octets. | SenderRank, is fully inlined as two octets. | |||
| In Figure 10, the RPLInstanceID is the Global RPLInstanceID 0, and | In Figure 10, the RPLInstanceID is the Global RPLInstanceID 0, and | |||
| the MinHopRankIncrease is a multiple of 256 so the least significant | the MinHopRankIncrease is a multiple of 256 so the least significant | |||
| byte is all zeros and can be elided: | byte is all zeros and can be elided: | |||
| 0 1 2 | 0 1 2 | |||
| skipping to change at page 1, line 976 ¶ | skipping to change at page 1, line 1029 ¶ | |||
| The Length of an IP-in-IP-6LoRH header is expressed in bytes and MUST | The Length of an IP-in-IP-6LoRH header is expressed in bytes and MUST | |||
| be at least 1, to indicate a Hop Limit (HL), that is decremented at | be at least 1, to indicate a Hop Limit (HL), that is decremented at | |||
| each hop. When the HL reaches 0, the packet is dropped per | each hop. When the HL reaches 0, the packet is dropped per | |||
| [RFC2460]. | [RFC2460]. | |||
| If the Length of an IP-in-IP-6LoRH header is exactly 1, then the | If the Length of an IP-in-IP-6LoRH header is exactly 1, then the | |||
| Encapsulator Address is elided, which means that the Encapsulator is | Encapsulator Address is elided, which means that the Encapsulator is | |||
| a well-known router, for instance the root in a RPL graph. | a well-known router, for instance the root in a RPL graph. | |||
| With this specification, an optimal compression of IP-in-IP | The most efficient compression of an IP-in-IP encapsulation that can | |||
| encapsulation can be achieved if an endpoint of the packet is the | be achieved with this specification is obtained when an endpoint of | |||
| root of the RPL DODAG associated to the Instance that is used to | the packet is the root of the RPL DODAG associated to the RPL | |||
| forward the packet, and the root address is known implicitly as | Instance that is used to forward the packet, and the root address is | |||
| opposed to signaled explicitly in the data packets. | known implicitly as opposed to signaled explicitly in the data | |||
| packets. | ||||
| If the Length of an IP-in-IP-6LoRH header is greater than 1, then an | If the Length of an IP-in-IP-6LoRH header is greater than 1, then an | |||
| Encapsulator Address is placed in a compressed form after the Hop | Encapsulator Address is placed in a compressed form after the Hop | |||
| Limit field. The value of the Length indicates which compression is | Limit field. The value of the Length indicates which compression is | |||
| performed on the Encapsulator Address. For instance, a Size of 3 | performed on the Encapsulator Address. For instance, a Size of 3 | |||
| indicates that the Encapsulator Address is compressed to 2 bytes. | indicates that the Encapsulator Address is compressed to 2 bytes. | |||
| The reference for the compression is the address of the root of the | The reference for the compression is the address of the root of the | |||
| DODAG. The way the address of the root is determined is discussed in | DODAG. The way the address of the root is determined is discussed in | |||
| Section 4.3.2. | Section 4.3.2. | |||
| When it cannot be elided, the destination IP address of the IP-in-IP | ||||
| header is transported in a RH3-6LoRH header as the first address of | ||||
| the list. | ||||
| With RPL, the destination address in the IP-in-IP header is | With RPL, the destination address in the IP-in-IP header is | |||
| implicitly the root in the RPL graph for packets going upwards, and | implicitly the root in the RPL graph for packets going upwards, and, | |||
| the destination address in the IPHC for packets going downwards. If | in storing mode, it is the destination address in the IPHC for | |||
| the implicit value is correct, the destination IP address of the IP- | packets going downwards. In non-storing mode, there is no implicit | |||
| in-IP encapsulation can be elided. | value for packets going downwards. | |||
| If the implicit value is correct, the destination IP address of the | ||||
| IP-in-IP encapsulation can be elided. Else, the destination IP | ||||
| address of the IP-in-IP header is transported in a SRH-6LoRH header | ||||
| as the first entry of the first of these headers. | ||||
| If the final destination of the packet is a leaf that does not | If the final destination of the packet is a leaf that does not | |||
| support this specification, then the chain of 6LoRH headers must be | support this specification, then the chain of 6LoRH headers must be | |||
| stripped by the RPL/6LR router to which the leaf is attached. In | stripped by the RPL/6LR router to which the leaf is attached. In | |||
| that example, the destination IP address of the IP-in-IP header | that example, the destination IP address of the IP-in-IP header | |||
| cannot be elided. | cannot be elided. | |||
| In the special case where a 6LoRH header is used to route 6LoWPAN | In the special case where a 6LoRH header is used to route 6LoWPAN | |||
| fragments, the destination address is not accessible in the IPHC on | fragments, the destination address is not accessible in the IPHC on | |||
| all fragments and can be elided only for the first fragment and for | all fragments and can be elided only for the first fragment and for | |||
| skipping to change at page 23, line 10 ¶ | skipping to change at page 24, line 10 ¶ | |||
| 101xxxxx: for Elective 6LoWPAN Routing Headers | 101xxxxx: for Elective 6LoWPAN Routing Headers | |||
| 100xxxxx: for Critical 6LoWPAN Routing Headers. | 100xxxxx: for Critical 6LoWPAN Routing Headers. | |||
| 9.2. New 6LoWPAN Routing Header Type Registry | 9.2. New 6LoWPAN Routing Header Type Registry | |||
| This document creates an IANA registry for the 6LoWPAN Routing Header | This document creates an IANA registry for the 6LoWPAN Routing Header | |||
| Type, and assigns the following values: | Type, and assigns the following values: | |||
| 0..4: RH3-6LoRH [RFCthis] | 0..4: SRH-6LoRH [RFCthis] | |||
| 5: RPI-6LoRH [RFCthis] | 5: RPI-6LoRH [RFCthis] | |||
| 6: IP-in-IP-6LoRH [RFCthis] | 6: IP-in-IP-6LoRH [RFCthis] | |||
| 10. Acknowledgments | 10. Acknowledgments | |||
| The authors wish to thank Tom Phinney, Thomas Watteyne, Tengfei | The authors wish to thank Tom Phinney, Thomas Watteyne, Tengfei | |||
| Chang, Martin Turon, James Woodyatt, Samita Chakrabarti, Jonathan | Chang, Martin Turon, James Woodyatt, Samita Chakrabarti, Jonathan | |||
| Hui, Gabriel Montenegro and Ralph Droms for constructive reviews to | Hui, Gabriel Montenegro and Ralph Droms for constructive reviews to | |||
| skipping to change at page 23, line 43 ¶ | skipping to change at page 24, line 43 ¶ | |||
| Thubert, P., "6LoWPAN Paging Dispatch", draft-ietf-6lo- | Thubert, P., "6LoWPAN Paging Dispatch", draft-ietf-6lo- | |||
| paging-dispatch-01 (work in progress), January 2016. | paging-dispatch-01 (work in progress), January 2016. | |||
| [IEEE802154] | [IEEE802154] | |||
| IEEE standard for Information Technology, "IEEE std. | IEEE standard for Information Technology, "IEEE std. | |||
| 802.15.4, Part. 15.4: Wireless Medium Access Control (MAC) | 802.15.4, Part. 15.4: Wireless Medium Access Control (MAC) | |||
| and Physical Layer (PHY) Specifications for Low-Rate | and Physical Layer (PHY) Specifications for Low-Rate | |||
| Wireless Personal Area Networks", 2015. | Wireless Personal Area Networks", 2015. | |||
| [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/ | |||
| DOI 10.17487/RFC2119, March 1997, | RFC2119, March 1997, | |||
| <http://www.rfc-editor.org/info/rfc2119>. | <http://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6 | [RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6 | |||
| (IPv6) Specification", RFC 2460, DOI 10.17487/RFC2460, | (IPv6) Specification", RFC 2460, DOI 10.17487/RFC2460, | |||
| December 1998, <http://www.rfc-editor.org/info/rfc2460>. | December 1998, <http://www.rfc-editor.org/info/rfc2460>. | |||
| [RFC4944] Montenegro, G., Kushalnagar, N., Hui, J., and D. Culler, | [RFC4944] Montenegro, G., Kushalnagar, N., Hui, J., and D. Culler, | |||
| "Transmission of IPv6 Packets over IEEE 802.15.4 | "Transmission of IPv6 Packets over IEEE 802.15.4 | |||
| Networks", RFC 4944, DOI 10.17487/RFC4944, September 2007, | Networks", RFC 4944, DOI 10.17487/RFC4944, September 2007, | |||
| <http://www.rfc-editor.org/info/rfc4944>. | <http://www.rfc-editor.org/info/rfc4944>. | |||
| [RFC6282] Hui, J., Ed. and P. Thubert, "Compression Format for IPv6 | [RFC6282] Hui, J., Ed. and P. Thubert, "Compression Format for IPv6 | |||
| Datagrams over IEEE 802.15.4-Based Networks", RFC 6282, | Datagrams over IEEE 802.15.4-Based Networks", RFC 6282, | |||
| DOI 10.17487/RFC6282, September 2011, | DOI 10.17487/RFC6282, September 2011, | |||
| <http://www.rfc-editor.org/info/rfc6282>. | <http://www.rfc-editor.org/info/rfc6282>. | |||
| [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/ | |||
| DOI 10.17487/RFC6550, March 2012, | RFC6550, March 2012, | |||
| <http://www.rfc-editor.org/info/rfc6550>. | <http://www.rfc-editor.org/info/rfc6550>. | |||
| [RFC6552] Thubert, P., Ed., "Objective Function Zero for the Routing | [RFC6552] Thubert, P., Ed., "Objective Function Zero for the Routing | |||
| Protocol for Low-Power and Lossy Networks (RPL)", | Protocol for Low-Power and Lossy Networks (RPL)", RFC | |||
| RFC 6552, DOI 10.17487/RFC6552, March 2012, | 6552, DOI 10.17487/RFC6552, March 2012, | |||
| <http://www.rfc-editor.org/info/rfc6552>. | <http://www.rfc-editor.org/info/rfc6552>. | |||
| [RFC6553] Hui, J. and JP. Vasseur, "The Routing Protocol for Low- | [RFC6553] Hui, J. and JP. Vasseur, "The Routing Protocol for Low- | |||
| Power and Lossy Networks (RPL) Option for Carrying RPL | Power and Lossy Networks (RPL) Option for Carrying RPL | |||
| Information in Data-Plane Datagrams", RFC 6553, | Information in Data-Plane Datagrams", RFC 6553, DOI | |||
| DOI 10.17487/RFC6553, March 2012, | 10.17487/RFC6553, March 2012, | |||
| <http://www.rfc-editor.org/info/rfc6553>. | <http://www.rfc-editor.org/info/rfc6553>. | |||
| [RFC6554] Hui, J., Vasseur, JP., Culler, D., and V. Manral, "An IPv6 | [RFC6554] Hui, J., Vasseur, JP., Culler, D., and V. Manral, "An IPv6 | |||
| Routing Header for Source Routes with the Routing Protocol | Routing Header for Source Routes with the Routing Protocol | |||
| for Low-Power and Lossy Networks (RPL)", RFC 6554, | for Low-Power and Lossy Networks (RPL)", RFC 6554, DOI | |||
| DOI 10.17487/RFC6554, March 2012, | 10.17487/RFC6554, March 2012, | |||
| <http://www.rfc-editor.org/info/rfc6554>. | <http://www.rfc-editor.org/info/rfc6554>. | |||
| [RFC7102] Vasseur, JP., "Terms Used in Routing for Low-Power and | [RFC7102] Vasseur, JP., "Terms Used in Routing for Low-Power and | |||
| Lossy Networks", RFC 7102, DOI 10.17487/RFC7102, January | Lossy Networks", RFC 7102, DOI 10.17487/RFC7102, January | |||
| 2014, <http://www.rfc-editor.org/info/rfc7102>. | 2014, <http://www.rfc-editor.org/info/rfc7102>. | |||
| [RFC7228] Bormann, C., Ersue, M., and A. Keranen, "Terminology for | [RFC7228] Bormann, C., Ersue, M., and A. Keranen, "Terminology for | |||
| Constrained-Node Networks", RFC 7228, | Constrained-Node Networks", RFC 7228, DOI 10.17487/ | |||
| DOI 10.17487/RFC7228, May 2014, | RFC7228, May 2014, | |||
| <http://www.rfc-editor.org/info/rfc7228>. | <http://www.rfc-editor.org/info/rfc7228>. | |||
| 11.2. Informative References | 11.2. Informative References | |||
| [I-D.ietf-6tisch-architecture] | [I-D.ietf-6tisch-architecture] | |||
| Thubert, P., "An Architecture for IPv6 over the TSCH mode | Thubert, P., "An Architecture for IPv6 over the TSCH mode | |||
| of IEEE 802.15.4", draft-ietf-6tisch-architecture-09 (work | of IEEE 802.15.4", draft-ietf-6tisch-architecture-09 (work | |||
| in progress), November 2015. | in progress), November 2015. | |||
| [I-D.robles-roll-useofrplinfo] | [I-D.robles-roll-useofrplinfo] | |||
| skipping to change at page 25, line 22 ¶ | skipping to change at page 26, line 22 ¶ | |||
| RFC 6553, 6554 and IPv6-in-IPv6", draft-robles-roll- | RFC 6553, 6554 and IPv6-in-IPv6", draft-robles-roll- | |||
| useofrplinfo-02 (work in progress), October 2015. | useofrplinfo-02 (work in progress), October 2015. | |||
| [I-D.thubert-6lo-forwarding-fragments] | [I-D.thubert-6lo-forwarding-fragments] | |||
| Thubert, P. and J. Hui, "LLN Fragment Forwarding and | Thubert, P. and J. Hui, "LLN Fragment Forwarding and | |||
| Recovery", draft-thubert-6lo-forwarding-fragments-02 (work | Recovery", draft-thubert-6lo-forwarding-fragments-02 (work | |||
| in progress), November 2014. | in progress), November 2014. | |||
| [RFC6775] Shelby, Z., Ed., Chakrabarti, S., Nordmark, E., and C. | [RFC6775] Shelby, Z., Ed., Chakrabarti, S., Nordmark, E., and C. | |||
| Bormann, "Neighbor Discovery Optimization for IPv6 over | Bormann, "Neighbor Discovery Optimization for IPv6 over | |||
| Low-Power Wireless Personal Area Networks (6LoWPANs)", | Low-Power Wireless Personal Area Networks (6LoWPANs)", RFC | |||
| RFC 6775, DOI 10.17487/RFC6775, November 2012, | 6775, DOI 10.17487/RFC6775, November 2012, | |||
| <http://www.rfc-editor.org/info/rfc6775>. | <http://www.rfc-editor.org/info/rfc6775>. | |||
| [RFC7554] Watteyne, T., Ed., Palattella, M., and L. Grieco, "Using | [RFC7554] Watteyne, T., Ed., Palattella, M., and L. Grieco, "Using | |||
| IEEE 802.15.4e Time-Slotted Channel Hopping (TSCH) in the | IEEE 802.15.4e Time-Slotted Channel Hopping (TSCH) in the | |||
| Internet of Things (IoT): Problem Statement", RFC 7554, | Internet of Things (IoT): Problem Statement", RFC 7554, | |||
| DOI 10.17487/RFC7554, May 2015, | DOI 10.17487/RFC7554, May 2015, | |||
| <http://www.rfc-editor.org/info/rfc7554>. | <http://www.rfc-editor.org/info/rfc7554>. | |||
| Appendix A. Examples | Appendix A. Examples | |||
| skipping to change at page 25, line 50 ¶ | skipping to change at page 27, line 12 ¶ | |||
| fragmentation process takes place per [RFC4944], and the fragment | fragmentation process takes place per [RFC4944], and the fragment | |||
| headers must be placed in Page 0 before switching to Page 1: | headers must be placed in Page 0 before switching to Page 1: | |||
| +- ... -+- ... -+-+ ... -+- ... +-+-+ ... -+-+-+-+-+-+-+-+-+-+... | +- ... -+- ... -+-+ ... -+- ... +-+-+ ... -+-+-+-+-+-+-+-+-+-+... | |||
| |Frag type|Frag hdr |11110001| RPI- |IP-in-IP| LOWPAN-IPHC | ... | |Frag type|Frag hdr |11110001| RPI- |IP-in-IP| LOWPAN-IPHC | ... | |||
| |RFC 4944 |RFC 4944 | Page 1 | 6LoRH | 6LoRH | | | |RFC 4944 |RFC 4944 | Page 1 | 6LoRH | 6LoRH | | | |||
| +- ... -+- ... -+-+ ... -+- ... +-+-+ ... -+-+-+-+-+-+-+-+-+-+... | +- ... -+- ... -+-+ ... -+- ... +-+-+ ... -+-+-+-+-+-+-+-+-+-+... | |||
| <- RFC 6282 -> | <- RFC 6282 -> | |||
| No RPL artifact | No RPL artifact | |||
| +- ... -+- ... -+-+ ... -+-+ ... -+- ... +-+-+-+-+-+-+-+-+-+-+... | ||||
| |Frag type|Frag hdr | | ||||
| |RFC 4944 |RFC 4944 | Payload (cont) | ||||
| +- ... -+- ... -+-+ ... -+-+ ... -+- ... +-+-+-+-+-+-+-+-+-+-+... | ||||
| +- ... -+- ... -+-+ ... -+-+ ... -+- ... +-+-+-+-+-+-+-+-+-+-+... | ||||
| |Frag type|Frag hdr | | ||||
| |RFC 4944 |RFC 4944 | Payload (cont) | ||||
| +- ... -+- ... -+-+ ... -+-+ ... -+- ... +-+-+-+-+-+-+-+-+-+-+... | ||||
| Figure 15: Example Compressed Packet with RPI. | Figure 15: Example Compressed Packet with RPI. | |||
| In Storing Mode, if the packet stays within the RPL domain, then it | In Storing Mode, if the packet stays within the RPL domain, then it | |||
| is possible to save the IP-in-IP encapsulation, in which case only | is possible to save the IP-in-IP encapsulation, in which case only | |||
| the RPI is compressed with a 6LoRH, as illustrated in Figure 16 in | the RPI is compressed with a 6LoRH, as illustrated in Figure 16 in | |||
| the case of a non-fragmented ICMP packet: | the case of a non-fragmented ICMP packet: | |||
| +- ... -+-+- ... -+-+-+-+ ... -+-+-+-+ ... -+-+-+-+-+-+-+-+-+-+-+... | +- ... -+-+- ... -+-+-+-+ ... -+-+-+-+ ... -+-+-+-+-+-+-+-+-+-+-+... | |||
| |11110001| RPI-6LoRH | NH = 0 | NH = 58 | ICMP message ... | |11110001| RPI-6LoRH | NH = 0 | NH = 58 | ICMP message ... | |||
| |Page 1 | type 5 | 6LOWPAN-IPHC | (ICMP) | (no compression) | |Page 1 | type 5 | 6LOWPAN-IPHC | (ICMP) | (no compression) | |||
| skipping to change at page 27, line 21 ¶ | skipping to change at page 28, line 34 ¶ | |||
| Figure 19: RPI inserted by the root in Storing Mode. | Figure 19: RPI inserted by the root in Storing Mode. | |||
| A.2. Example Of Downward Packet In Non-Storing Mode | A.2. Example Of Downward Packet In Non-Storing Mode | |||
| The example illustrated in Figure 20 is a classical packet in non- | The example illustrated in Figure 20 is a classical packet in non- | |||
| Storing mode for a packet going down the DODAG following a source | Storing mode for a packet going down the DODAG following a source | |||
| routed path from the root. Say that we have 4 forwarding hops to | routed path from the root. Say that we have 4 forwarding hops to | |||
| reach a destination. In the non-compressed form, when the root | reach a destination. In the non-compressed form, when the root | |||
| generates the packet, the last 3 hops are encoded in a Routing Header | generates the packet, the last 3 hops are encoded in a Routing Header | |||
| type 3 (RH3) and the first hop is the destination of the packet. The | type 3 (SRH) and the first hop is the destination of the packet. The | |||
| intermediate hops perform a swap and the hop count indicates the | intermediate hops perform a swap and the hop count indicates the | |||
| current active hop [RFC2460], [RFC6554]. | current active hop [RFC2460], [RFC6554]. | |||
| When compressed with this specification, the 4 hops are encoded in | When compressed with this specification, the 4 hops are encoded in | |||
| RH3-6LoRH when the root generates the packet, and the final | SRH-6LoRH when the root generates the packet, and the final | |||
| destination is left in the LOWPAN-IPHC. There is no swap, and the | destination is left in the LOWPAN-IPHC. There is no swap, and the | |||
| forwarding node that corresponds to the first entry effectively | forwarding node that corresponds to the first entry effectively | |||
| consumes it when forwarding, which means that the size of the encoded | consumes it when forwarding, which means that the size of the encoded | |||
| packet decreases and that the hop information is lost. | packet decreases and that the hop information is lost. | |||
| If the last hop in a RH3-6LoRH is not the final destination then it | If the last hop in a SRH-6LoRH is not the final destination then it | |||
| removes the RH3-6LoRH before forwarding. | removes the SRH-6LoRH before forwarding. | |||
| In the particular example illustrated in Figure 20, all addresses in | In the particular example illustrated in Figure 20, all addresses in | |||
| the DODAG are assigned from a same /112 prefix and the last 2 octets | the DODAG are assigned from a same /112 prefix and the last 2 octets | |||
| encoding an identifier such as a IEEE 802.15.4 short address. In | encoding an identifier such as a IEEE 802.15.4 short address. In | |||
| that case, all addresses can be compressed to 2 octets, using the | that case, all addresses can be compressed to 2 octets, using the | |||
| root address as reference. There will be one RH3_6LoRH header, with, | root address as reference. There will be one SRH_6LoRH header, with, | |||
| in this example, 3 compressed addresses: | in this example, 3 compressed addresses: | |||
| +-+-+-+-+-+-+- ... +-+-+- ... -+-+-- ... -+-+- ... -+-+-+-+-+ ... +-... | +-+-+-+-+-+-+- ... +-+-+- ... -+-+-- ... -+-+- ... -+-+-+-+-+ ... +-... | |||
| |11110001 |RH3-6LoRH | RPI-6LoRH | IP-in-IP | NH=1 |11110CPP| UDP | UDP | |11110001 |SRH-6LoRH | RPI-6LoRH | IP-in-IP | NH=1 |11110CPP| UDP | UDP | |||
| |Page 1 |Type1 S=2 | | 6LoRH | IPHC | UDP | hdr |load | |Page 1 |Type1 S=2 | | 6LoRH | IPHC | UDP | hdr |load | |||
| +-+-+-+-+-+-+- ... +-+-+- ... -+-+-- ... -+-+- ... -+-+-+-+-+ ... +-... | +-+-+-+-+-+-+- ... +-+-+- ... -+-+-- ... -+-+- ... -+-+-+-+-+ ... +-... | |||
| <-8bytes-> <- RFC 6282 -> | <-8bytes-> <- RFC 6282 -> | |||
| No RPL artifact | No RPL artifact | |||
| Figure 20: Example Compressed Packet with RH3. | Figure 20: Example Compressed Packet with SRH. | |||
| One may note that the RPI is provided. This is because the address | One may note that the RPI is provided. This is because the address | |||
| of the root that is the source of the IP-in-IP header is elided and | of the root that is the source of the IP-in-IP header is elided and | |||
| inferred from the InstanceID in the RPI. Once found from a local | inferred from the RPLInstanceID in the RPI. Once found from a local | |||
| context, that address is used as Compression Reference to expand | context, that address is used as Compression Reference to expand | |||
| addresses in the RH3-6LoRH. | addresses in the SRH-6LoRH. | |||
| With the RPL specifications available at the time of writing this | With the RPL specifications available at the time of writing this | |||
| draft, the root is the only node that may incorporate a RH3 in an IP | draft, the root is the only node that may incorporate a SRH in an IP | |||
| packet. When the root forwards a packet that it did not generate, it | packet. When the root forwards a packet that it did not generate, it | |||
| has to encapsulate the packet with IP-in-IP. | has to encapsulate the packet with IP-in-IP. | |||
| But if the root generates the packet towards a node in its DODAG, | But if the root generates the packet towards a node in its DODAG, | |||
| then it should avoid the extra IP-in-IP as illustrated in Figure 21: | then it should avoid the extra IP-in-IP as illustrated in Figure 21: | |||
| +- ... -+-+-+ ... +-+-+-+ ... -+-+-+-+-+-+-+-++-+- ... -+-+-+-+-+... | +- ... -+-+-+ ... +-+-+-+ ... -+-+-+-+-+-+-+-++-+- ... -+-+-+-+-+... | |||
| |11110001| RH3-6LoRH | NH=1 | 11110CPP | Compressed | UDP | |11110001| SRH-6LoRH | NH=1 | 11110CPP | Compressed | UDP | |||
| |Page 1 | Type1 S=3 | LOWPAN-IPHC| LOWPAN-NHC| UDP header | Payload | |Page 1 | Type1 S=3 | LOWPAN-IPHC| LOWPAN-NHC| UDP header | Payload | |||
| +- ... -+-+-+ ... +-+-+-+ ... -+-+-+-+-+-+-+-++-+- ... -+-+-+-+-+... | +- ... -+-+-+ ... +-+-+-+ ... -+-+-+-+-+-+-+-++-+- ... -+-+-+-+-+... | |||
| <- RFC 6282 -> | <- RFC 6282 -> | |||
| Figure 21: compressed RH3 4*2bytes entries sourced by root. | Figure 21: compressed SRH 4*2bytes entries sourced by root. | |||
| Note: the RPI is not represented though RPL [RFC6550] generally | Note: the RPI is not represented though RPL [RFC6550] generally | |||
| expects it. In this particular case, since the Compression Reference | expects it. In this particular case, since the Compression Reference | |||
| for the RH3-6LoRH is the source address in the LOWPAN-IPHC, and the | for the SRH-6LoRH is the source address in the LOWPAN-IPHC, and the | |||
| routing is strict along the source route path, the RPI does not | routing is strict along the source route path, the RPI does not | |||
| appear to be absolutely necessary. | appear to be absolutely necessary. | |||
| In Figure 21, all the nodes along the source route path share a same | In Figure 21, all the nodes along the source route path share a same | |||
| /112 prefix. This is typical of IPv6 addresses derived from an | /112 prefix. This is typical of IPv6 addresses derived from an | |||
| IEEE802.15.4 short address, as long as all the nodes share a same | IEEE802.15.4 short address, as long as all the nodes share a same | |||
| PAN-ID. In that case, a type-1 RH3-6LoRH header can be used for | PAN-ID. In that case, a type-1 SRH-6LoRH header can be used for | |||
| encoding. The IPv6 address of the root is taken as reference, and | encoding. The IPv6 address of the root is taken as reference, and | |||
| only the last 2 octets of the address of the intermediate hops is | only the last 2 octets of the address of the intermediate hops is | |||
| encoded. The Size of 3 indicates 4 hops, resulting in a RH3-6LoRH of | encoded. The Size of 3 indicates 4 hops, resulting in a SRH-6LoRH of | |||
| 10 bytes. | 10 bytes. | |||
| A.3. Example of RH3-6LoRH life-cycle | A.3. Example of SRH-6LoRH life-cycle | |||
| This section illustrates the operation specified in Section 5.5 of | This section illustrates the operation specified in Section 5.6 of | |||
| forwarding a packet with a compressed RH3 along an A->B->C->D source | forwarding a packet with a compressed SRH along an A->B->C->D source | |||
| route path. The operation of popping addresses is exemplified at | route path. The operation of popping addresses is exemplified at | |||
| each hop. | each hop. | |||
| Packet as received by node A | Packet as received by node A | |||
| ---------------------------- | ---------------------------- | |||
| Type 3 RH3-6LoRH Size = 0 AAAA AAAA AAAA AAAA | Type 3 SRH-6LoRH Size = 0 AAAA AAAA AAAA AAAA | |||
| Type 1 RH3-6LoRH Size = 0 BBBB | Type 1 SRH-6LoRH Size = 0 BBBB | |||
| Type 2 RH3-6LoRH Size = 1 CCCC CCCC | Type 2 SRH-6LoRH Size = 1 CCCC CCCC | |||
| DDDD DDDD | DDDD DDDD | |||
| Step 1 popping BBBB the first entry of the next RH3-6LoRH | Step 1 popping BBBB the first entry of the next SRH-6LoRH | |||
| Step 2 next is if larger value (2 vs. 1) the RH3-6LoRH is removed | Step 2 next is if larger value (2 vs. 1) the SRH-6LoRH is removed | |||
| Type 3 RH3-6LoRH Size = 0 AAAA AAAA AAAA AAAA | Type 3 SRH-6LoRH Size = 0 AAAA AAAA AAAA AAAA | |||
| Type 2 RH3-6LoRH Size = 1 CCCC CCCC | Type 2 SRH-6LoRH Size = 1 CCCC CCCC | |||
| DDDD DDDD | DDDD DDDD | |||
| Step 3: recursion ended, coalescing BBBB with the first entry | Step 3: recursion ended, coalescing BBBB with the first entry | |||
| Type 3 RH3-6LoRH Size = 0 AAAA AAAA AAAA BBBB | Type 3 SRH-6LoRH Size = 0 AAAA AAAA AAAA BBBB | |||
| Step 4: routing based on next segment endpoint to B | Step 4: routing based on next segment endpoint to B | |||
| Figure 22: Processing at Node A. | Figure 22: Processing at Node A. | |||
| Packet as received by node B | Packet as received by node B | |||
| ---------------------------- | ---------------------------- | |||
| Type 3 RH3-6LoRH Size = 0 AAAA AAAA AAAA BBBB | Type 3 SRH-6LoRH Size = 0 AAAA AAAA AAAA BBBB | |||
| Type 2 RH3-6LoRH Size = 1 CCCC CCCC | Type 2 SRH-6LoRH Size = 1 CCCC CCCC | |||
| DDDD DDDD | DDDD DDDD | |||
| Step 1 popping CCCC CCCC, the first entry of the next RH3-6LoRH | Step 1 popping CCCC CCCC, the first entry of the next SRH-6LoRH | |||
| Step 2 removing the first entry and decrementing the Size (by 1) | Step 2 removing the first entry and decrementing the Size (by 1) | |||
| Type 3 RH3-6LoRH Size = 0 AAAA AAAA AAAA BBBB | Type 3 SRH-6LoRH Size = 0 AAAA AAAA AAAA BBBB | |||
| Type 2 RH3-6LoRH Size = 0 DDDD DDDD | Type 2 SRH-6LoRH Size = 0 DDDD DDDD | |||
| Step 3: recursion ended, coalescing CCCC CCCC with the first entry | Step 3: recursion ended, coalescing CCCC CCCC with the first entry | |||
| Type 3 RH3-6LoRH Size = 0 AAAA AAAA CCCC CCCC | Type 3 SRH-6LoRH Size = 0 AAAA AAAA CCCC CCCC | |||
| Step 4: routing based on next segment endpoint to C | Step 4: routing based on next segment endpoint to C | |||
| Figure 23: Processing at Node B. | Figure 23: Processing at Node B. | |||
| Packet as received by node C | Packet as received by node C | |||
| ---------------------------- | ---------------------------- | |||
| Type 3 RH3-6LoRH Size = 0 AAAA AAAA CCCC CCCC | Type 3 SRH-6LoRH Size = 0 AAAA AAAA CCCC CCCC | |||
| Type 2 RH3-6LoRH Size = 0 DDDD DDDD | Type 2 SRH-6LoRH Size = 0 DDDD DDDD | |||
| Step 1 popping DDDD DDDD, the first entry of the next RH3-6LoRH | Step 1 popping DDDD DDDD, the first entry of the next SRH-6LoRH | |||
| Step 2 the RH3-6LoRH is removed | Step 2 the SRH-6LoRH is removed | |||
| Type 3 RH3-6LoRH Size = 0 AAAA AAAA CCCC CCCC | Type 3 SRH-6LoRH Size = 0 AAAA AAAA CCCC CCCC | |||
| Step 3: recursion ended, coalescing DDDD DDDDD with the first entry | Step 3: recursion ended, coalescing DDDD DDDDD with the first entry | |||
| Type 3 RH3-6LoRH Size = 0 AAAA AAAA DDDD DDDD | Type 3 SRH-6LoRH Size = 0 AAAA AAAA DDDD DDDD | |||
| Step 4: routing based on next segment endpoint to D | Step 4: routing based on next segment endpoint to D | |||
| Figure 24: Processing at Node C. | Figure 24: Processing at Node C. | |||
| Packet as received by node D | Packet as received by node D | |||
| ---------------------------- | ---------------------------- | |||
| Type 3 RH3-6LoRH Size = 0 AAAA AAAA DDDD DDDD | Type 3 SRH-6LoRH Size = 0 AAAA AAAA DDDD DDDD | |||
| Step 1 the RH3-6LoRH is removed. | Step 1 the SRH-6LoRH is removed. | |||
| Step 2 no more header, routing based on inner IP header. | Step 2 no more header, routing based on inner IP header. | |||
| Figure 25: Processing at Node D. | Figure 25: Processing at Node D. | |||
| Authors' Addresses | Authors' Addresses | |||
| Pascal Thubert (editor) | Pascal Thubert (editor) | |||
| Cisco Systems | Cisco Systems | |||
| Building D - Regus | Building D - Regus | |||
| 45 Allee des Ormes | 45 Allee des Ormes | |||
| End of changes. 116 change blocks. | ||||
| 218 lines changed or deleted | 282 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/ | ||||