| < draft-ietf-6lo-routing-dispatch-03.txt | draft-ietf-6lo-routing-dispatch-04.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 18, 2016 Uni Bremen TZI | Expires: July 26, 2016 Uni Bremen TZI | |||
| L. Toutain | L. Toutain | |||
| IMT-TELECOM Bretagne | IMT-TELECOM Bretagne | |||
| R. Cragie | R. Cragie | |||
| ARM | ARM | |||
| January 15, 2016 | January 23, 2016 | |||
| 6LoWPAN Routing Header And Paging Dispatches | 6LoWPAN Routing Header | |||
| draft-ietf-6lo-routing-dispatch-03 | draft-ietf-6lo-routing-dispatch-04 | |||
| 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 18, 2016. | This Internet-Draft will expire on July 26, 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 | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 3. Using the Page Dispatch . . . . . . . . . . . . . . . . . . . 5 | 3. Using the Page Dispatch . . . . . . . . . . . . . . . . . . . 6 | |||
| 3.1. New Routing Header Dispatch (6LoRH) . . . . . . . . . . . 6 | 3.1. New Routing Header Dispatch (6LoRH) . . . . . . . . . . . 6 | |||
| 3.2. Placement Of The 6LoRH . . . . . . . . . . . . . . . . . 6 | 3.2. Placement Of 6LoRH headers . . . . . . . . . . . . . . . 6 | |||
| 4. 6LoWPAN Routing Header General Format . . . . . . . . . . . . 6 | 3.2.1. Relative To Non-6LoRH Headers . . . . . . . . . . . . 7 | |||
| 4.1. Elective Format . . . . . . . . . . . . . . . . . . . . . 7 | 3.2.2. Relative To Other 6LoRH Headers . . . . . . . . . . . 7 | |||
| 4.2. Critical Format . . . . . . . . . . . . . . . . . . . . . 7 | 4. 6LoWPAN Routing Header General Format . . . . . . . . . . . . 8 | |||
| 5. The Routing Header Type 3 (RH3) 6LoRH Header . . . . . . . . 8 | 4.1. Elective Format . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 6. The RPL Packet Information 6LoRH . . . . . . . . . . . . . . 10 | 4.2. Critical Format . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 6.1. Compressing the RPLInstanceID . . . . . . . . . . . . . . 11 | 4.3. Compressing Addresses . . . . . . . . . . . . . . . . . . 9 | |||
| 6.2. Compressing the SenderRank . . . . . . . . . . . . . . . 11 | 4.3.1. Coalescence . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 6.3. The Overall RPI-6LoRH encoding . . . . . . . . . . . . . 12 | 4.3.2. DODAG Root Address Determination . . . . . . . . . . 10 | |||
| 7. The IP-in-IP 6LoRH Header . . . . . . . . . . . . . . . . . . 14 | 5. The Routing Header Type 3 (RH3) 6LoRH Header . . . . . . . . 11 | |||
| 8. Security Considerations . . . . . . . . . . . . . . . . . . . 15 | 5.1. RH3-6LoRH General Operation . . . . . . . . . . . . . . . 13 | |||
| 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 15 | 5.2. The Design Point of Popping Entries . . . . . . . . . . . 13 | |||
| 9.1. Reserving Space in 6LoWPAN Dispatch Page 1 . . . . . . . 15 | 5.3. Compression Reference . . . . . . . . . . . . . . . . . . 14 | |||
| 9.2. Nex 6LoWPAN Routing Header Type Registry . . . . . . . . 16 | 5.4. Popping Headers . . . . . . . . . . . . . . . . . . . . . 15 | |||
| 10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 16 | 5.5. Forwarding . . . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 16 | 6. The RPL Packet Information 6LoRH . . . . . . . . . . . . . . 16 | |||
| 11.1. Normative References . . . . . . . . . . . . . . . . . . 16 | 6.1. Compressing the RPLInstanceID . . . . . . . . . . . . . . 18 | |||
| 11.2. Informative References . . . . . . . . . . . . . . . . . 17 | 6.2. Compressing the SenderRank . . . . . . . . . . . . . . . 18 | |||
| Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 18 | 6.3. The Overall RPI-6LoRH encoding . . . . . . . . . . . . . 19 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 19 | 7. The IP-in-IP 6LoRH Header . . . . . . . . . . . . . . . . . . 21 | |||
| 8. Security Considerations . . . . . . . . . . . . . . . . . . . 22 | ||||
| 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 22 | ||||
| 9.1. Reserving Space in 6LoWPAN Dispatch Page 1 . . . . . . . 22 | ||||
| 9.2. New 6LoWPAN Routing Header Type Registry . . . . . . . . 23 | ||||
| 10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 23 | ||||
| 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 23 | ||||
| 11.1. Normative References . . . . . . . . . . . . . . . . . . 23 | ||||
| 11.2. Informative References . . . . . . . . . . . . . . . . . 24 | ||||
| Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 25 | ||||
| A.1. Examples Compressing The RPI . . . . . . . . . . . . . . 25 | ||||
| A.2. Example Of Downward Packet In Non-Storing Mode . . . . . 27 | ||||
| A.3. Example of RH3-6LoRH life-cycle . . . . . . . . . . . . . 28 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 30 | ||||
| 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 238 ¶ | skipping to change at page 1, line 251 ¶ | |||
| The terms Route-over and Mesh-under are defined in [RFC6775]. | The terms Route-over and Mesh-under are defined in [RFC6775]. | |||
| Other terms in use in LLNs are found in [RFC7228]. | Other terms in use in LLNs are found in [RFC7228]. | |||
| The term "byte" is used in its now customary sense as a synonym for | The term "byte" is used in its now customary sense as a synonym for | |||
| "octet". | "octet". | |||
| 3. Using the Page Dispatch | 3. Using the Page Dispatch | |||
| The6LoWPAN Paging Dispatch [I-D.ietf-6lo-paging-dispatch] | The 6LoWPAN Paging Dispatch [I-D.ietf-6lo-paging-dispatch] | |||
| specification extends the 6lo adaptation layer framework ([RFC4944], | specification extends the 6lo adaptation layer framework ([RFC4944], | |||
| [RFC6282]) by introducing a concept of "context" in the 6LoWPAN | [RFC6282]) by introducing a concept of "context" in the 6LoWPAN | |||
| 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) | |||
| skipping to change at page 1, line 261 ¶ | skipping to change at page 1, line 274 ¶ | |||
| information such as a compressed form of RH3, as well as other sorts | information such as a compressed form of RH3, 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 The 6LoRH | 3.2. Placement Of 6LoRH headers | |||
| 3.2.1. Relative To Non-6LoRH Headers | ||||
| Paging Dispatch is parsed and no subsequent Paging Dispatch has been | Paging Dispatch is parsed and no subsequent Paging Dispatch has been | |||
| parsed, the parsing of the packet MUST follow this specification if | parsed, the parsing of the packet MUST follow this specification if | |||
| the 6LoRH Bit Pattern Section 3.1 is found. | the 6LoRH Bit Pattern Section 3.1 is found. | |||
| With this specification, the 6LoRH Dispatch is only defined in Page | With this specification, the 6LoRH Dispatch is only defined in Page | |||
| context is active. | context is active. | |||
| One or more 6LoRH header(s) MAY be placed in a 6LoWPAN packet. A | ||||
| 6LoRH header MUST always be placed before the LOWPAN_IPHC as defined | ||||
| in 6LoWPAN Header Compression [RFC6282]. | ||||
| Because a 6LoRH header requires a Page 1 context, it MUST always be | Because a 6LoRH header requires a Page 1 context, it MUST always be | |||
| placed after any Fragmentation Header and/or Mesh Header [RFC4944]. | placed after any Fragmentation Header and/or Mesh Header [RFC4944]. | |||
| A 6LoRH header MUST always be placed before the LOWPAN_IPHC as | ||||
| defined in 6LoWPAN Header Compression [RFC6282]. It is designed in | ||||
| such a fashion that placing or removing a header that is encoded with | ||||
| 6LoRH does not modify the part of the packet that is encoded with | ||||
| LoWPAN_IPHC, whether there is an IP-in-IP encapsulation or not. For | ||||
| instance, the final destination of the packet is always the one in | ||||
| the LOWPAN_IPHC whether there is a Routing Header or not. | ||||
| 3.2.2. Relative To Other 6LoRH Headers | ||||
| IPv6 [RFC2460] defines chains of headers that are introduced by an | ||||
| IPv6 header and terminated by either another IPv6 header (IP-in-IP) | ||||
| or an Upper Layer Protocol ULP) header. When an outer header is | ||||
| stripped from the packet, the whole chain goes with it. When one or | ||||
| more header(s) are inserted by an intermediate router, that router | ||||
| normally chains the headers and encapsulates the result in IP-in-IP. | ||||
| With this specification, the chains of headers MUST be compressed in | ||||
| 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 | ||||
| encapsulations, the first IP-in-IP encapsulation, with all its chain | ||||
| of headers, is encoded first in the compressed form. | ||||
| In the compressed form of a packet that has RH3 or HbH headers after | ||||
| 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 | ||||
| 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 | ||||
| the encapsulation, placing the 6LoRH headers next to one another may | ||||
| present an ambiguity on which header belong to which chain in the | ||||
| uncompressed form. | ||||
| In order to disambiguate the headers that follow the inner IPv6 | ||||
| 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 | ||||
| header is placed last in the encoded chain. This means that the | ||||
| 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 | ||||
| the 6LOWPAN-IPHC when decompressing the packet. | ||||
| With regards to the relative placement of the RH3 and the RPI in the | ||||
| compressed form, it is a design point for this specification that the | ||||
| RH3 entries are consumed as the packet progresses down the LLN | ||||
| Section 5.2. In order to make this operation simpler in 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 | ||||
| path, and that the compressed RH3 are placed before the compressed | ||||
| RPI. | ||||
| 4. 6LoWPAN Routing Header General Format | 4. 6LoWPAN Routing Header General Format | |||
| The 6LoRH reuses in Page 1 the Dispatch Value Bit Pattern of | The 6LoRH usesthe Dispatch Value Bit Pattern of 10xxxxxx in Page 1. | |||
| 10xxxxxx. | ||||
| 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 | |||
| Critical (6LoRHC) that may not be ignored | Critical (6LoRHC) that may not be ignored | |||
| 4.1. Elective Format | 4.1. Elective Format | |||
| The 6LoRHE uses the Dispatch Value Bit Pattern of 101xxxxx. A 6LoRHE | The 6LoRHE uses the Dispatch Value Bit Pattern of 101xxxxx. A 6LoRHE | |||
| skipping to change at page 1, line 350 ¶ | skipping to change at page 1, line 408 ¶ | |||
| Type Specific Extension. The meaning depends on the Type, which | Type Specific Extension. The meaning depends on the Type, which | |||
| must be known in all of the nodes. The interpretation of the TSE | must be known in all of the nodes. The interpretation of the TSE | |||
| depends on the Type field that follows. For instance, it may be | depends on the Type field that follows. For instance, it may be | |||
| used to transport control bits, the number of elements in an | used to transport control bits, the number of elements in an | |||
| array, or the length of the remainder of the 6LoRHC expressed in a | array, or the length of the remainder of the 6LoRHC expressed in a | |||
| unit other than bytes. | unit other than bytes. | |||
| Type: | Type: | |||
| Type of the 6LoRHC | Type of the 6LoRHC | |||
| 4.3. Compressing Addresses | ||||
| 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 | ||||
| address, and then elide that matching piece. In order to reconstruct | ||||
| the compress address, the receiving node will perform the process of | ||||
| coalescence described in section Section 4.3.1. | ||||
| 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 | ||||
| the root is the source of the packet, the technique allows to fully | ||||
| elide the source address in the compressed form of the IP header. If | ||||
| the root is not the encapsulator, then the encapsulator address may | ||||
| still be 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 | ||||
| becomes the reference for the compression of the addresses that are | ||||
| located in compressed RH3 headers that are present inside the IP-in- | ||||
| IP encapsulation in the uncompressed form. | ||||
| 4.3.1. Coalescence | ||||
| An IPv6 compressed address is coalesced with a reference address by | ||||
| overriding the N rightmost bytes of the reference address with the | ||||
| compressed address, where N is the length of the compressed address, | ||||
| as indicated by the Type of the RH3-6LoRH header in Figure 7. | ||||
| 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 | ||||
| length than the address that is being coalesced. | ||||
| A compressed address is expanded by coalescing it with a reference | ||||
| address. In the particular case of a Type 4 RH3-6LoRH, the address | ||||
| is expressed in full and the coalescence is a complete override as | ||||
| illustrated in Figure 5. | ||||
| RRRRRRRRRRRRRRRRRRRR reference address, may be compressed or not | ||||
| CCCCCCC compressed address, shorter or same as reference | ||||
| RRRRRRRRRRRRRCCCCCCC Coalesced address, same compression as reference | ||||
| Figure 5: Coalescing addresses. | ||||
| 4.3.2. DODAG Root Address Determination | ||||
| Stateful Address compression requires that some state is installed in | ||||
| the devices to store the compression information that is elided from | ||||
| the packet. That state is stored in an abstract context table and | ||||
| some form of index is found in the packet to obtain the compression | ||||
| information from the context table. | ||||
| With [RFC6282], the state is provided to the stack by the 6LoWPAN | ||||
| Neighbor Discovery Protocol (NDP) [RFC6775]. NDP exchanges the | ||||
| context through 6LoWPAN Context Option in Router Advertisement (RA) | ||||
| messages. In the compressed form of the packet, the context can be | ||||
| signaled in a Context Identifier Extension. | ||||
| With this specification, the compression information is provided to | ||||
| the stack by RPL, and RPL exchanges it through the DODAGID field in | ||||
| the DAG Information Object (DIO) messages, as described in more | ||||
| details below. In the compressed form of the packet, the context can | ||||
| be signaled in by the InstanceID in the RPI. | ||||
| With RPL [RFC6550], the address of DODAG root is known from the | ||||
| DODAGID field of the DIO messages. For a Global Instance, the | ||||
| RPLInstanceID that is present in the RPI is enough information to | ||||
| identify the DODAG that this node participates to and its associated | ||||
| root. But for a Local Instance, the address of the root MUST be | ||||
| explicit, either in some device configuration or signaled in the | ||||
| packet, as the source or the destination address, respectively. | ||||
| When implicit, the address of the DODAG root MUST be determined as | ||||
| follows: | ||||
| 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 | ||||
| not expose that property and it can only be known by a configuration | ||||
| applied to all nodes. | ||||
| Else, the router that encapsulates the packet and compresses it with | ||||
| this specification MUST also place an RPI in the packet as prescribed | ||||
| 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 | ||||
| in the packet. | ||||
| It is expected that the RPL implementation provides an abstract | ||||
| context table, indexed by Global RPLInstanceID, that provides the | ||||
| address of the root of the DODAG that this nodes participates to for | ||||
| that particular Instance. | ||||
| 5. The Routing Header Type 3 (RH3) 6LoRH Header | 5. The Routing Header Type 3 (RH3) 6LoRH Header | |||
| ## Encoding {#RH3-6LoRH-encoding} | ||||
| The Routing Header type 3 (RH3) 6LoRH (RH3-6LoRH) header is a | The Routing Header type 3 (RH3) 6LoRH (RH3-6LoRH) header is a | |||
| Critical 6LoWPAN Routing Header that provides a compressed form for | Critical 6LoWPAN Routing Header that provides a compressed form for | |||
| the RH3, as defined in [RFC6554] for use by RPL routers. Routers | the RH3, as defined in [RFC6554] for use by RPL routers. Routers | |||
| that need to forward a packet with a RH3-6LoRH are expected to be RPL | that need to forward a packet with a RH3-6LoRH are expected to be RPL | |||
| routers and are expected to support this specification. If a non-RPL | routers and are expected to support this specification. If a non-RPL | |||
| router receives a packet with a RH3-6LoRH, this means that there was | router receives a packet with a RH3-6LoRH, this means that there was | |||
| a routing error and the packet should be dropped so the Type cannot | a routing error and the packet should be dropped so the Type cannot | |||
| be ignored. | be 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 5: The RH3-6LoRH. | Figure 6: The RH3-6LoRH. | |||
| The values for the RH3-6LoRH Type are an enumeration, 0 to 4. The | The 6LoRH Type indicates the compression level used in a given | |||
| form of compression is indicated by the Type. The unit (as a number | RH3-6LoRH header. | |||
| of bytes) in which the Size is expressed depends on the Type as | ||||
| described in Figure 6: | ||||
| +-----------+-----------+ | One or more 6LoRH header(s) MAY be placed in a 6LoWPAN packet. | |||
| | Type | Size Unit | | ||||
| +-----------+-----------+ | ||||
| | 0 | 1 | | ||||
| | 1 | 2 | | ||||
| | 2 | 4 | | ||||
| | 3 | 8 | | ||||
| | 4 | 16 | | ||||
| +-----------+-----------+ | ||||
| Figure 6: The RH3-6LoRH Types. | It results that all addresses in a given RH3-6LoRH header MUST be | |||
| compressed in an identical fashion, down to using the identical | ||||
| number of bytes per address. In order to get different degrees of | ||||
| compression, multiple consecutive RH3-6LoRH headers MUST be used. | ||||
| 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 | ||||
| with no compression. The complete list of Types of RH3-6LoRH and the | ||||
| corresponding compression level are provided in Figure 7: | ||||
| +-----------+----------------------+ | ||||
| | 6LoRH | Length of compressed | | ||||
| | Type | IPv6 address (bytes) | | ||||
| +-----------+----------------------+ | ||||
| | 0 | 1 | | ||||
| | 1 | 2 | | ||||
| | 2 | 4 | | ||||
| | 3 | 8 | | ||||
| | 4 | 16 | | ||||
| +-----------+----------------------+ | ||||
| Figure 7: The RH3-6LoRH Types. | ||||
| In the case of a RH3-6LoRH header, the TSE field is used as a Size, | In the case of a RH3-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 RH3-6LoRH elements can be | |||
| employed.) | employed.) It results that the Length in bytes of a RH3-6LoRH header | |||
| is: | ||||
| The Next Hop is indicated in the first entry of the first RH3-6LoRH | 2 + Length_of_compressed_IPv6_address * (Size + 1) | |||
| header. Upon reception, the router checks whether the address | ||||
| indicated as Next Hop is one of its own addresses, which MUST be the | ||||
| case in a strict source-routing environment. In that case, the entry | ||||
| is removed from the RH3-6LoRH header and the Size is decremented. If | ||||
| that makes the Size zero, the whole RH3-6LoRH header is removed. If | ||||
| there are no more RH3-6LoRH headers, the processing node is the last | ||||
| router on the path, which may or may not be collocated with the final | ||||
| destination. | ||||
| The last hop in the last RH3-6LoRH is the last router on the way to | 5.1. RH3-6LoRH General Operation | |||
| the destination in the LLN. In a classical RPL network, all nodes | ||||
| are routers so the last hop is effectively the destination as well, | ||||
| but in the general case, even when there is a RH3-6LoRH header | ||||
| present, the address of the final destination is always indicated in | ||||
| the LoWPAN_IPHC [RFC6282]. | ||||
| If some bits of the first address in the RH3-6LoRH header can be | In the non-compressed form, when the root generates or forwards a | |||
| derived from the final destination in the LoWPAN_IPHC, then that | packet in non-Storing Mode, it needs to include a Routing Header type | |||
| address may be compressed; otherwise it is expressed as a full IPv6 | 3 (RH3) [RFC6554] to signal a strict source-route path to a final | |||
| address of 128 bits. Next addresses only need to express the delta | destination down the DODAG. All the hops along the path, but the | |||
| from the previous address. | 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. | ||||
| All addresses in a given RH3-6LoRH header are compressed in an | The handling of the RH3-6LoRH is different: there is no swap, and a | |||
| identical fashion, down to using the identical number of bytes per | forwarding router that corresponds to the first entry in the first | |||
| address. In order to get different degrees of compression, multiple | RH3-6LoRH upon reception of a packet effectively consumes that entry | |||
| consecutive RH3-6LoRH headers MUST be used | when forwarding. This means that the size of a compressed source- | |||
| routed packet decreases as the packet progresses along its path and | ||||
| that the routing information is lost along the way. This also means | ||||
| that an RH3 encoded with 6LoRH is not recoverable and cannot be | ||||
| protected. | ||||
| When compressed with this specification, all the remaining hops MUST | ||||
| be encoded in order in one or more consecutive RH3-6LoRH headers. | ||||
| Whether or not there is a RH3-6LoRH header present, the address of | ||||
| the final destination is indicated in the LoWPAN_IPHC at all times | ||||
| along the path. Examples of this are provided in Appendix A. | ||||
| The current destination (termination of the current segment) for a | ||||
| compressed source-routed packet is indicated in the first entry of | ||||
| the first RH3-6LoRH. In strict source-routing, that entry MUST match | ||||
| 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 final destination in the LLN. It is typically a RPL parent of | ||||
| the final destination, but it can also be a router acting at 6LR | ||||
| [RFC6775] for the destination host. | ||||
| 5.2. The Design Point of Popping Entries | ||||
| In order to save energy and to optimize the chances of transmission | ||||
| 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 | ||||
| packet. This creates a discrepancy from the art of IPv6 where | ||||
| Routing Header are mutable but recoverable. | ||||
| With this specification, the packet can be expanded at any hop into a | ||||
| valid IPv6 packet, including a RH3, and compressed back. But the | ||||
| packet as decompressed along the way will not carry all the consumed | ||||
| addresses that packet would have if it had been forwarded in the | ||||
| uncompressed form. | ||||
| It is noted that: | ||||
| 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 | ||||
| back. | ||||
| It is generally not a good idea to reverse a routing header. The | ||||
| RH may have been used to stay away from the shortest path for some | ||||
| reason that is only valid on the way in (segment routing). | ||||
| There is no use of reversing a RH in the present RPL | ||||
| specifications. | ||||
| P2P RPL reverses a path that was learned reactively, as a part of | ||||
| the protocol operation, which is probably a cleaner way than a | ||||
| reversed echo on the data path. | ||||
| Reversing a header is discouraged by [RFC2460] for RH0 unless it | ||||
| is authenticated, which requires an Authentication Header (AH). | ||||
| There is no definition of an AH operation for RH3, and there is no | ||||
| indication that the need exists in LLNs. | ||||
| 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 | ||||
| receiver to reversing it. | ||||
| 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 | ||||
| a better security than that provided by AH. | ||||
| In summary, the benefit of saving energy and lowering the chances of | ||||
| loss by sending smaller frames over the LLN are seen as overwhelming | ||||
| compared to the value of possibly reversing the header. | ||||
| 5.3. Compression Reference | ||||
| In order to optimize the compression of IP addresses present in the | ||||
| RH3 headers, this specification requires that the 6LoWPAN layer | ||||
| 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 | ||||
| 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 | ||||
| [RFC2460]. In this case, the address used as Compression Reference | ||||
| is that the address of the root, and it can be implicit when the | ||||
| address of the root is. | ||||
| The Compression Reference MUST be determined as follows: | ||||
| The reference address may be obtained by configuration. The | ||||
| configuration may indicate either the address in full, or the | ||||
| identifier of a 6LoWPAN Context that carries the address [RFC6775], | ||||
| for instance one of the 16 Context Identifiers used in LOWPAN-IPHC | ||||
| [RFC6282]. | ||||
| 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 | ||||
| reference for the compression. | ||||
| Else, and if the IP-in-IP compression specified in this document is | ||||
| used and the Encapsulator Address is provided, then the Encapsulator | ||||
| Address is the reference. | ||||
| 5.4. Popping Headers | ||||
| 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, | ||||
| router MUST consume that entry before forwarding, which is an action | ||||
| of popping from a stack, where the stack is effectively the sequence | ||||
| of entries in consecutive RH3-6LoRH headers. | ||||
| Popping an entry of an RH3-6LoRH header is a recursive action | ||||
| performed as follows: | ||||
| If the Size of the RH3-6LoRH header is 1 or more, indicating that | ||||
| there are at least 2 entries in the header, the router removes the | ||||
| first entry and decrements the Size (by 1). | ||||
| Else (meaning that this is the last entry in the RH3-6LoRH header), | ||||
| and if there is no next RH3-6LoRH header after this then the | ||||
| RH3-6LoRH is removed. | ||||
| Else, if there is a next RH3-6LoRH of a Type with a larger or equal | ||||
| value, meaning a same or lesser compression yielding same or larger | ||||
| compressed forms, then the RH3-6LoRH is removed. | ||||
| Else, the first entry of the next RH3-6LoRH is popped from the next | ||||
| RH3-6LoRH and coalesced with the first entry of this RH3-6LoRH. | ||||
| At the end of the process, if there is no more RH3-6LoRH in the | ||||
| packet, then the processing node is the last router along the source | ||||
| route path. | ||||
| 5.5. Forwarding | ||||
| When receiving a packet with a RH3-6LoRH, a router determines the | ||||
| IPv6 address of the current segment endpoint. | ||||
| If strict source routing is enforced and thus router is not the | ||||
| segment endpoint for the packet then this router MUST drop the | ||||
| packet. | ||||
| If this router is the current segment endpoint, then the router pops | ||||
| its address as described in Section 5.4 and continues processing the | ||||
| packet. | ||||
| If there is still a RH3-6LoRH, then the router determines the new | ||||
| segment endpoint and routes the packet towards that endpoint. | ||||
| Otherwise the router uses the destination in the inner IP header to | ||||
| forward or accept the packet. | ||||
| The segment endpoint of a packet MUST be determined as follows: | ||||
| The router first determines the Compression Reference as discussed in | ||||
| Section 4.3.1. | ||||
| The router then coalesces the Compression Reference with the first | ||||
| entry of the first RH3-6LoRH header as discussed in Section 5.3. If | ||||
| the type of the RH3-6LoRH header is type 4 then the coalescence is a | ||||
| full override. | ||||
| Since the Compression Reference is an uncompressed address, the | ||||
| coalesced IPv6 address is also expressed in the full 128bits. | ||||
| 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 for | |||
| the purpose of Instance Identification, as well as Loop Avoidance and | the purpose of Instance Identification, as well as Loop Avoidance and | |||
| Detection. | Detection. | |||
| 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 | |||
| skipping to change at page 1, line 498 ¶ | skipping to change at page 1, line 818 ¶ | |||
| 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 instance, and in such | |||
| cases, the instance is expected to be the global Instance 0. A | cases, the instance is expected to be the global Instance 0. A | |||
| global RPLInstanceID is encoded in a RPLInstanceID field as follows: | 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 7: 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], | |||
| skipping to change at page 1, line 554 ¶ | skipping to change at page 1, line 874 ¶ | |||
| the RPLInstanceID is elided and/or the SenderRank is compressed. | the RPLInstanceID is elided and/or the SenderRank is compressed. | |||
| Depending on these bits, the Length of the RPI-6LoRH may vary as | Depending on these bits, the Length of the RPI-6LoRH may vary as | |||
| described hereafter. | described hereafter. | |||
| 0 1 2 | 0 1 2 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 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 8: 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 Instance ID is elided and the RPLInstanceID | |||
| is the Global RPLInstanceID 0. If it is not set, the octet | is the Global RPLInstanceID 0. If it is not set, the octet | |||
| immediately following the type field contains the RPLInstanceID | immediately following the type field contains the RPLInstanceID | |||
| as specified in [RFC6550], section 5.1. | 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 9, the RPLInstanceID is the Global RPLInstanceID 0, and the | In Figure 10, the RPLInstanceID is the Global RPLInstanceID 0, and | |||
| MinHopRankIncrease is a multiple of 256 so the least significant byte | the MinHopRankIncrease is a multiple of 256 so the least significant | |||
| is all zeros and can be elided: | byte is all zeros and can be elided: | |||
| 0 1 2 | 0 1 2 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| |1|0|0|O|R|F|1|1| 6LoRH Type=5 | SenderRank | | |1|0|0|O|R|F|1|1| 6LoRH Type=5 | SenderRank | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| I=1, K=1 | I=1, K=1 | |||
| Figure 9: The most compressed RPI-6LoRH. | Figure 10: The most compressed RPI-6LoRH. | |||
| In Figure 10, the RPLInstanceID is the Global RPLInstanceID 0, but | In Figure 11, the RPLInstanceID is the Global RPLInstanceID 0, but | |||
| both bytes of the SenderRank are significant so it can not be | both bytes of the SenderRank are significant so it can not be | |||
| compressed: | compressed: | |||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| |1|0|0|O|R|F|1|0| 6LoRH Type=5 | SenderRank | | |1|0|0|O|R|F|1|0| 6LoRH Type=5 | SenderRank | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| I=1, K=0 | I=1, K=0 | |||
| Figure 10: Eliding the RPLInstanceID. | Figure 11: Eliding the RPLInstanceID. | |||
| In Figure 11, the RPLInstanceID is not the Global RPLInstanceID 0, | In Figure 12, the RPLInstanceID is not the Global RPLInstanceID 0, | |||
| and the MinHopRankIncrease is a multiple of 256: | and the MinHopRankIncrease is a multiple of 256: | |||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| |1|0|0|O|R|F|0|1| 6LoRH Type=5 | RPLInstanceID | SenderRank | | |1|0|0|O|R|F|0|1| 6LoRH Type=5 | RPLInstanceID | SenderRank | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| I=0, K=1 | I=0, K=1 | |||
| Figure 11: Compressing SenderRank. | Figure 12: Compressing SenderRank. | |||
| In Figure 12, the RPLInstanceID is not the Global RPLInstanceID 0, | In Figure 13, the RPLInstanceID is not the Global RPLInstanceID 0, | |||
| and both bytes of the SenderRank are significant: | and both bytes of the SenderRank are significant: | |||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| |1|0|0|O|R|F|0|0| 6LoRH Type=5 | RPLInstanceID | Sender-... | |1|0|0|O|R|F|0|0| 6LoRH Type=5 | RPLInstanceID | Sender-... | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| ...-Rank | | ...-Rank | | |||
| +-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
| I=0, K=0 | I=0, K=0 | |||
| Figure 12: Least compressed form of RPI-6LoRH. | Figure 13: Least compressed form of RPI-6LoRH. | |||
| 7. The IP-in-IP 6LoRH Header | 7. The IP-in-IP 6LoRH Header | |||
| The IP-in-IP 6LoRH (IP-in-IP-6LoRH) header is an Elective 6LoWPAN | The IP-in-IP 6LoRH (IP-in-IP-6LoRH) header is an Elective 6LoWPAN | |||
| Routing Header that provides a compressed form for the encapsulating | Routing Header that provides a compressed form for the encapsulating | |||
| IPv6 Header in the case of an IP-in-IP encapsulation. | IPv6 Header in the case of an IP-in-IP encapsulation. | |||
| An IP-in-IP encapsulation is used to insert a field such as a Routing | An IP-in-IP encapsulation is used to insert a field such as a Routing | |||
| Header or an RPI at a router that is not the source of the packet. | Header or an RPI at a router that is not the source of the packet. | |||
| In order to send an error back regarding the inserted field, the | In order to send an error back regarding the inserted field, the | |||
| skipping to change at page 1, line 645 ¶ | skipping to change at page 1, line 965 ¶ | |||
| This field is not critical for routing so the Type can be ignored, | This field is not critical for routing so the Type can be ignored, | |||
| and the TSE field contains the Length in bytes. | and the TSE field contains the Length in bytes. | |||
| 0 1 2 | 0 1 2 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- ... -+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- ... -+ | |||
| |1|0|1| Length | 6LoRH Type 6 | Hop Limit | Encaps. Address | | |1|0|1| Length | 6LoRH Type 6 | Hop Limit | Encaps. Address | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- ... -+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- ... -+ | |||
| Figure 13: The IP-in-IP-6LoRH. | Figure 14: The IP-in-IP-6LoRH. | |||
| 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 [RFC2460] | each hop. When the HL reaches 0, the packet is dropped per | |||
| [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 | ||||
| encapsulation can be achieved if an endpoint of the packet is the | ||||
| root of the RPL DODAG associated to the Instance that is used to | ||||
| forward the packet, and the root address is 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 | ||||
| DODAG. The way the address of the root is determined is discussed in | ||||
| Section 4.3.2. | ||||
| When it cannot be elided, the destination IP address of the IP-in-IP | 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 | header is transported in a RH3-6LoRH header as the first address of | |||
| the list. | 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 | the destination address in the IPHC for packets going downwards. If | |||
| the implicit value is correct, the destination IP address of the IP- | the implicit value is correct, the destination IP address of the IP- | |||
| in-IP encapsulation can be elided. | in-IP encapsulation can be elided. | |||
| skipping to change at page 16, line 5 ¶ | skipping to change at page 23, line 5 ¶ | |||
| 9. IANA Considerations | 9. IANA Considerations | |||
| This specification reserves Dispatch Value Bit Patterns within the | This specification reserves Dispatch Value Bit Patterns within the | |||
| 6LoWPAN Dispatch Page 1 as follows: | 6LoWPAN Dispatch Page 1 as follows: | |||
| 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. Nex 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: RH3-6LoRH [RFCthis] | |||
| 5: RPI-6LoRH [RFCthis] | 5: RPI-6LoRH [RFCthis] | |||
| 6: IP-in-IP-6LoRH [RFCthis] | 6: IP-in-IP-6LoRH [RFCthis] | |||
| skipping to change at page 16, line 43 ¶ | skipping to change at page 23, 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, DOI 10.17487/ | Requirement Levels", BCP 14, RFC 2119, | |||
| RFC2119, March 1997, | DOI 10.17487/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, DOI 10.17487/ | Low-Power and Lossy Networks", RFC 6550, | |||
| RFC6550, March 2012, | DOI 10.17487/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)", RFC | Protocol for Low-Power and Lossy Networks (RPL)", | |||
| 6552, DOI 10.17487/RFC6552, March 2012, | RFC 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, DOI | Information in Data-Plane Datagrams", RFC 6553, | |||
| 10.17487/RFC6553, March 2012, | DOI 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, DOI | for Low-Power and Lossy Networks (RPL)", RFC 6554, | |||
| 10.17487/RFC6554, March 2012, | DOI 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, DOI 10.17487/ | Constrained-Node Networks", RFC 7228, | |||
| RFC7228, May 2014, | DOI 10.17487/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 18, line 22 ¶ | skipping to change at page 25, 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)", RFC | Low-Power Wireless Personal Area Networks (6LoWPANs)", | |||
| 6775, DOI 10.17487/RFC6775, November 2012, | RFC 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 | |||
| The example in Figure 14 illustrates the 6LoRH compression of a | A.1. Examples Compressing The RPI | |||
| The example in Figure 15 illustrates the 6LoRH compression of a | ||||
| classical packet in Storing Mode in all directions, as well as in | classical packet in Storing Mode in all directions, as well as in | |||
| non-Storing mode for a packet going up the DODAG following the | non-Storing mode for a packet going up the DODAG following the | |||
| default route to the root. In this particular example, a | default route to the root. In this particular example, a | |||
| 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|IP-in-IP| RPI | RFC 6282 Dispatch | |Frag type|Frag hdr |11110001| RPI- |IP-in-IP| LOWPAN-IPHC | ... | |||
| |RFC 4944 |RFC 4944 | Page 1 | 6LoRH | 6LoRH | + LOWPAN_IPHC | |RFC 4944 |RFC 4944 | Page 1 | 6LoRH | 6LoRH | | | |||
| +- ... -+- ... -+-+ ... -+-+ ... -+- ... +-+-+-+-+-+-+-+-+-+-+... | +- ... -+- ... -+-+ ... -+- ... +-+-+ ... -+-+-+-+-+-+-+-+-+-+... | |||
| <- RFC 6282 -> | <- RFC 6282 -> | |||
| No RPL artifact | No RPL artifact | |||
| Figure 14: Example Compressed Packet with RPI. | Figure 15: Example Compressed Packet with RPI. | |||
| The example illustrated in Figure 15 is a classical packet in non- | 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 | ||||
| the RPI is compressed with a 6LoRH, as illustrated in Figure 16 in | ||||
| the case of a non-fragmented ICMP packet: | ||||
| +- ... -+-+- ... -+-+-+-+ ... -+-+-+-+ ... -+-+-+-+-+-+-+-+-+-+-+... | ||||
| |11110001| RPI-6LoRH | NH = 0 | NH = 58 | ICMP message ... | ||||
| |Page 1 | type 5 | 6LOWPAN-IPHC | (ICMP) | (no compression) | ||||
| +- ... -+-+- ... -+-+-+-+ ... -+-+-+-+ ... -+-+-+-+-+-+-+-+-+-+-+... | ||||
| <- RFC 6282 -> | ||||
| No RPL artifact | ||||
| Figure 16: Example ICMP Packet with RPI in Storing Mode. | ||||
| The format in Figure 16 is logically equivalent to the non-compressed | ||||
| format illustrated in Figure 17: | ||||
| +-+-+-+- ... -+-+-+-+ ... -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+... | ||||
| | IPv6 Header | Hop-by-Hop | RPI in | ICMP message ... | ||||
| | NH = 58 | Header | RPL Option | | ||||
| +-+-+-+- ... -+-+-+-+ ... -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+... | ||||
| Figure 17: Uncompressed ICMP Packet with RPI. | ||||
| For a UDP packet, the transport header can be compressed with 6LoWPAN | ||||
| HC [RFC6282] as illustrated in Figure 18: | ||||
| +- ... -+- ... -+-+-+-+- ... +-+-+-+-+-+-+-+-+-+- ... +-+-+-+-+-+... | ||||
| |11110001| RPI-6LoRH | NH = 1 |11110|C| P | Compressed |UDP ... | ||||
| |Page 1 | type 5 | 6LOWPAN-IPHC | UDP | | | UDP header |Payload | ||||
| +- ... -+- ... -+-+-+-+- ... +-+-+-+-+-+-+-+-+-+- ... +-+-+-+-+-+... | ||||
| <- RFC 6282 -> | ||||
| No RPL artifact | ||||
| Figure 18: Uncompressed ICMP Packet with RPI. | ||||
| If the packet is received from the Internet in Storing Mode, then the | ||||
| root is supposed to encapsulate the packet to insert the RPI. The | ||||
| resulting format would be as represented in Figure 19: | ||||
| +-+-+-+-+-+-+- ... -+-+-- ... -+-+- ... -+-+-+-+-+-+-+ ... -+-+-+-+... | ||||
| |11110001 | RPI-6LoRH | IP-in-IP | NH=1 |11110CPP| Compressed | UDP | ||||
| |Page 1 | | 6LoRH | IPHC | UDP | UDP header | Payload | ||||
| +-+-+-+-+-+-+- ... -+-+-- ... -+-+- ... -+-+-+-+-+-+-+ ... -+-+-+-+... | ||||
| <- RFC 6282 -> | ||||
| No RPL artifact | ||||
| Figure 19: RPI inserted by the root in Storing Mode. | ||||
| A.2. Example Of Downward Packet In Non-Storing Mode | ||||
| 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; in this particular example, addresses in | routed path from the root. Say that we have 4 forwarding hops to | |||
| the DODAG are assigned to share a same /112 prefix, for instance | reach a destination. In the non-compressed form, when the root | |||
| taken from a /64 subnet with the first 6 octets of the suffix set to | generates the packet, the last 3 hops are encoded in a Routing Header | |||
| a constant such as all zeroes. In that case, all addresses but the | type 3 (RH3) and the first hop is the destination of the packet. The | |||
| first can be compressed to 2 octets, which means that there will be 2 | intermediate hops perform a swap and the hop count indicates the | |||
| RH3_6LoRH headers, one to store the first complete address and the | current active hop [RFC2460], [RFC6554]. | |||
| one to store the sequence of addresses compressed to 2 octets (in | ||||
| this example, 3 of them): | ||||
| +- ... -+- ... -+-+-+- ... -+-+-+-+-+ ... -+-+-+-+-+-+-+-+-+-+-+... | When compressed with this specification, the 4 hops are encoded in | |||
| |11110001|IP-in-IP| RH3(128bits)| RH3(3*16bits)| RFC 6282 Dispatch | RH3-6LoRH when the root generates the packet, and the final | |||
| |Page 1 | 6LoRH | 6LoRH | 6LoRH | + LOWPAN_IPHC | destination is left in the LOWPAN-IPHC. There is no swap, and the | |||
| +- ... -+- ... +-+-+-+- ... -+-+-+-+-+ ... -+-+-+-+-+-+-+-+-+-+-+... | forwarding node that corresponds to the first entry effectively | |||
| <- RFC 6282 -> | consumes it when forwarding, which means that the size of the encoded | |||
| No RPL artifact | packet decreases and that the hop information is lost. | |||
| Figure 15: Example Compressed Packet with RH3. | If the last hop in a RH3-6LoRH is not the final destination then it | |||
| removes the RH3-6LoRH before forwarding. | ||||
| Note: the RPI is not represented since most implementations actually | In the particular example illustrated in Figure 20, all addresses in | |||
| refrain from placing it in a source routed packet though [RFC6550] | the DODAG are assigned from a same /112 prefix and the last 2 octets | |||
| generally expects it. | 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 | ||||
| root address as reference. There will be one RH3_6LoRH header, with, | ||||
| in this example, 3 compressed addresses: | ||||
| +-+-+-+-+-+-+- ... +-+-+- ... -+-+-- ... -+-+- ... -+-+-+-+-+ ... +-... | ||||
| |11110001 |RH3-6LoRH | RPI-6LoRH | IP-in-IP | NH=1 |11110CPP| UDP | UDP | ||||
| |Page 1 |Type1 S=2 | | 6LoRH | IPHC | UDP | hdr |load | ||||
| +-+-+-+-+-+-+- ... +-+-+- ... -+-+-- ... -+-+- ... -+-+-+-+-+ ... +-... | ||||
| <-8bytes-> <- RFC 6282 -> | ||||
| No RPL artifact | ||||
| Figure 20: Example Compressed Packet with RH3. | ||||
| 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 | ||||
| inferred from the InstanceID in the RPI. Once found from a local | ||||
| context, that address is used as Compression Reference to expand | ||||
| addresses in the RH3-6LoRH. | ||||
| 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 | ||||
| packet. When the root forwards a packet that it did not generate, it | ||||
| has to encapsulate the packet with IP-in-IP. | ||||
| 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: | ||||
| +- ... -+-+-+ ... +-+-+-+ ... -+-+-+-+-+-+-+-++-+- ... -+-+-+-+-+... | ||||
| |11110001| RH3-6LoRH | NH=1 | 11110CPP | Compressed | UDP | ||||
| |Page 1 | Type1 S=3 | LOWPAN-IPHC| LOWPAN-NHC| UDP header | Payload | ||||
| +- ... -+-+-+ ... +-+-+-+ ... -+-+-+-+-+-+-+-++-+- ... -+-+-+-+-+... | ||||
| <- RFC 6282 -> | ||||
| Figure 21: compressed RH3 4*2bytes entries sourced by root. | ||||
| Note: the RPI is not represented though RPL [RFC6550] generally | ||||
| expects it. In this particular case, since the Compression Reference | ||||
| for the RH3-6LoRH is the source address in the LOWPAN-IPHC, and the | ||||
| routing is strict along the source route path, the RPI does not | ||||
| appear to be absolutely necessary. | ||||
| 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 | ||||
| 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 | ||||
| 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 | ||||
| encoded. The Size of 3 indicates 4 hops, resulting in a RH3-6LoRH of | ||||
| 10 bytes. | ||||
| A.3. Example of RH3-6LoRH life-cycle | ||||
| This section illustrates the operation specified in Section 5.5 of | ||||
| forwarding a packet with a compressed RH3 along an A->B->C->D source | ||||
| route path. The operation of popping addresses is exemplified at | ||||
| each hop. | ||||
| Packet as received by node A | ||||
| ---------------------------- | ||||
| Type 3 RH3-6LoRH Size = 0 AAAA AAAA AAAA AAAA | ||||
| Type 1 RH3-6LoRH Size = 0 BBBB | ||||
| Type 2 RH3-6LoRH Size = 1 CCCC CCCC | ||||
| DDDD DDDD | ||||
| Step 1 popping BBBB the first entry of the next RH3-6LoRH | ||||
| Step 2 next is if larger value (2 vs. 1) the RH3-6LoRH is removed | ||||
| Type 3 RH3-6LoRH Size = 0 AAAA AAAA AAAA AAAA | ||||
| Type 2 RH3-6LoRH Size = 1 CCCC CCCC | ||||
| DDDD DDDD | ||||
| Step 3: recursion ended, coalescing BBBB with the first entry | ||||
| Type 3 RH3-6LoRH Size = 0 AAAA AAAA AAAA BBBB | ||||
| Step 4: routing based on next segment endpoint to B | ||||
| Figure 22: Processing at Node A. | ||||
| Packet as received by node B | ||||
| ---------------------------- | ||||
| Type 3 RH3-6LoRH Size = 0 AAAA AAAA AAAA BBBB | ||||
| Type 2 RH3-6LoRH Size = 1 CCCC CCCC | ||||
| DDDD DDDD | ||||
| Step 1 popping CCCC CCCC, the first entry of the next RH3-6LoRH | ||||
| Step 2 removing the first entry and decrementing the Size (by 1) | ||||
| Type 3 RH3-6LoRH Size = 0 AAAA AAAA AAAA BBBB | ||||
| Type 2 RH3-6LoRH Size = 0 DDDD DDDD | ||||
| Step 3: recursion ended, coalescing CCCC CCCC with the first entry | ||||
| Type 3 RH3-6LoRH Size = 0 AAAA AAAA CCCC CCCC | ||||
| Step 4: routing based on next segment endpoint to C | ||||
| Figure 23: Processing at Node B. | ||||
| Packet as received by node C | ||||
| ---------------------------- | ||||
| Type 3 RH3-6LoRH Size = 0 AAAA AAAA CCCC CCCC | ||||
| Type 2 RH3-6LoRH Size = 0 DDDD DDDD | ||||
| Step 1 popping DDDD DDDD, the first entry of the next RH3-6LoRH | ||||
| Step 2 the RH3-6LoRH is removed | ||||
| Type 3 RH3-6LoRH Size = 0 AAAA AAAA CCCC CCCC | ||||
| Step 3: recursion ended, coalescing DDDD DDDDD with the first entry | ||||
| Type 3 RH3-6LoRH Size = 0 AAAA AAAA DDDD DDDD | ||||
| Step 4: routing based on next segment endpoint to D | ||||
| Figure 24: Processing at Node C. | ||||
| Packet as received by node D | ||||
| ---------------------------- | ||||
| Type 3 RH3-6LoRH Size = 0 AAAA AAAA DDDD DDDD | ||||
| Step 1 the RH3-6LoRH is removed. | ||||
| Step 2 no more header, routing based on inner IP header. | ||||
| 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 | |||
| BP1200 | BP1200 | |||
| MOUGINS - Sophia Antipolis 06254 | MOUGINS - Sophia Antipolis 06254 | |||
| FRANCE | FRANCE | |||
| End of changes. 52 change blocks. | ||||
| 132 lines changed or deleted | 638 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/ | ||||