| < draft-ietf-roll-routing-dispatch-01.txt | draft-ietf-roll-routing-dispatch-02.txt > | |||
|---|---|---|---|---|
| roll P. Thubert, Ed. | roll P. Thubert, Ed. | |||
| Internet-Draft Cisco | Internet-Draft Cisco | |||
| Intended status: Standards Track C. Bormann | Intended status: Standards Track C. Bormann | |||
| Expires: March 20, 2017 Uni Bremen TZI | Expires: April 22, 2017 Uni Bremen TZI | |||
| L. Toutain | L. Toutain | |||
| IMT-TELECOM Bretagne | IMT-TELECOM Bretagne | |||
| R. Cragie | R. Cragie | |||
| ARM | ARM | |||
| September 16, 2016 | October 19, 2016 | |||
| 6LoWPAN Routing Header | 6LoWPAN Routing Header | |||
| draft-ietf-roll-routing-dispatch-01 | draft-ietf-roll-routing-dispatch-02 | |||
| 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 March 20, 2017. | This Internet-Draft will expire on April 22, 2017. | |||
| 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 67 ¶ | skipping to change at page 1, line 67 ¶ | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 3. Using the Page Dispatch . . . . . . . . . . . . . . . . . . . 6 | 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 6LoRH headers . . . . . . . . . . . . . . . 7 | 3.2. Placement Of 6LoRH headers . . . . . . . . . . . . . . . 7 | |||
| 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 . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 4.2. Critical Format . . . . . . . . . . . . . . . . . . . . . 9 | 4.2. Critical Format . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 4.3. Compressing Addresses . . . . . . . . . . . . . . . . . . 9 | 4.3. Compressing Addresses . . . . . . . . . . . . . . . . . . 10 | |||
| 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 . . . . . . . . . . 11 | |||
| 5. The SRH 6LoRH Header . . . . . . . . . . . . . . . . . . . . 11 | 5. The SRH 6LoRH Header . . . . . . . . . . . . . . . . . . . . 12 | |||
| 5.1. Encoding . . . . . . . . . . . . . . . . . . . . . . . . 11 | 5.1. Encoding . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 5.2. SRH-6LoRH General Operation . . . . . . . . . . . . . . . 13 | 5.2. SRH-6LoRH General Operation . . . . . . . . . . . . . . . 13 | |||
| 5.2.1. Uncompressed SRH Operation . . . . . . . . . . . . . 13 | 5.2.1. Uncompressed SRH Operation . . . . . . . . . . . . . 13 | |||
| 5.2.2. 6LoRH-Compressed SRH Operation . . . . . . . . . . . 13 | 5.2.2. 6LoRH-Compressed SRH Operation . . . . . . . . . . . 14 | |||
| 5.2.3. Inner LOWPAN_IPHC Compression . . . . . . . . . . . . 14 | 5.2.3. Inner LOWPAN_IPHC Compression . . . . . . . . . . . . 14 | |||
| 5.3. The Design Point of Popping Entries . . . . . . . . . . . 14 | 5.3. The Design Point of Popping Entries . . . . . . . . . . . 15 | |||
| 5.4. Compression Reference for SRH-6LoRH header entries . . . 15 | 5.4. Compression Reference for SRH-6LoRH header entries . . . 16 | |||
| 5.5. Popping Headers . . . . . . . . . . . . . . . . . . . . . 16 | 5.5. Popping Headers . . . . . . . . . . . . . . . . . . . . . 17 | |||
| 5.6. Forwarding . . . . . . . . . . . . . . . . . . . . . . . 17 | 5.6. Forwarding . . . . . . . . . . . . . . . . . . . . . . . 17 | |||
| 6. The RPL Packet Information 6LoRH . . . . . . . . . . . . . . 17 | 6. The RPL Packet Information 6LoRH . . . . . . . . . . . . . . 18 | |||
| 6.1. Compressing the RPLInstanceID . . . . . . . . . . . . . . 19 | 6.1. Compressing the RPLInstanceID . . . . . . . . . . . . . . 19 | |||
| 6.2. Compressing the SenderRank . . . . . . . . . . . . . . . 19 | 6.2. Compressing the SenderRank . . . . . . . . . . . . . . . 20 | |||
| 6.3. The Overall RPI-6LoRH encoding . . . . . . . . . . . . . 20 | 6.3. The Overall RPI-6LoRH encoding . . . . . . . . . . . . . 20 | |||
| 7. The IP-in-IP 6LoRH Header . . . . . . . . . . . . . . . . . . 22 | 7. The IP-in-IP 6LoRH Header . . . . . . . . . . . . . . . . . . 23 | |||
| 8. Management Considerations . . . . . . . . . . . . . . . . . . 23 | 8. Management Considerations . . . . . . . . . . . . . . . . . . 24 | |||
| 9. Security Considerations . . . . . . . . . . . . . . . . . . . 24 | 9. Security Considerations . . . . . . . . . . . . . . . . . . . 25 | |||
| 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 24 | 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 25 | |||
| 10.1. Reserving Space in 6LoWPAN Dispatch Page 1 . . . . . . . 25 | 10.1. Reserving Space in 6LoWPAN Dispatch Page 1 . . . . . . . 25 | |||
| 10.2. New Critical 6LoWPAN Routing Header Type Registry . . . 25 | 10.2. New Critical 6LoWPAN Routing Header Type Registry . . . 26 | |||
| 11. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 25 | 10.3. New Elective 6LoWPAN Routing Header Type Registry . . . 26 | |||
| 11. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 26 | ||||
| 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 26 | 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 26 | |||
| 12.1. Normative References . . . . . . . . . . . . . . . . . . 26 | 12.1. Normative References . . . . . . . . . . . . . . . . . . 26 | |||
| 12.2. Informative References . . . . . . . . . . . . . . . . . 27 | 12.2. Informative References . . . . . . . . . . . . . . . . . 28 | |||
| Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 28 | Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 28 | |||
| A.1. Examples Compressing The RPI . . . . . . . . . . . . . . 28 | A.1. Examples Compressing The RPI . . . . . . . . . . . . . . 28 | |||
| A.2. Example Of Downward Packet In Non-Storing Mode . . . . . 30 | A.2. Example Of Downward Packet In Non-Storing Mode . . . . . 30 | |||
| A.3. Example of SRH-6LoRH life-cycle . . . . . . . . . . . . . 31 | A.3. Example of SRH-6LoRH life-cycle . . . . . . . . . . . . . 32 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 33 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 34 | |||
| 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 | |||
| designed with the primary concern of saving energy as a strict | designed with the primary concern of saving energy as a strict | |||
| requirement. | requirement. | |||
| Controlling the amount of data transmission is one possible venue to | Controlling the amount of data transmission is one possible venue to | |||
| save energy. In a number of LLN standards, the frame size is limited | save energy. In a number of LLN standards, the frame size is limited | |||
| to much smaller values than the IPv6 maximum transmission unit (MTU) | to much smaller values than the IPv6 maximum transmission unit (MTU) | |||
| of 1280 bytes. In particular, an LLN that relies on the classical | of 1280 bytes. In particular, an LLN that relies on the classical | |||
| Physical Layer (PHY) of IEEE 802.15.4 [IEEE802154] is limited to 127 | Physical Layer (PHY) of IEEE 802.15.4 [IEEE802154] is limited to 127 | |||
| bytes per frame. The need to compress IPv6 packets over IEEE | bytes per frame. The need to compress IPv6 packets over IEEE | |||
| 802.15.4 led to the 6LoWPAN Header Compression [RFC6282] work | 802.15.4 led to the "6LoWPAN Header Compression" [RFC6282] work | |||
| (6LoWPAN-HC). | (6LoWPAN_HC). | |||
| Innovative Route-over techniques have been and are still being | Innovative Route-over techniques have been and are still being | |||
| developed for routing inside a LLN. In a general fashion, such | developed for routing inside a LLN. In a general fashion, such | |||
| techniques require additional information in the packet to provide | techniques require additional information in the packet to provide | |||
| loop prevention and to indicate information such as flow | loop prevention and to indicate information such as flow | |||
| identification, source routing information, etc. | identification, source routing information, etc. | |||
| For reasons such as security and the capability to send ICMP errors | For reasons such as security and the capability to send ICMP errors | |||
| back to the source, an original packet must not be tampered with, and | back to the source, an original packet must not be tampered with, and | |||
| any information that must be inserted in or removed from an IPv6 | any information that must be inserted in or removed from an IPv6 | |||
| packet must be placed in an extra IP-in-IP encapsulation. This is | packet must be placed in an extra IP-in-IP encapsulation. | |||
| the case when the additional routing information is inserted by a | ||||
| router on the path of a packet, for instance a mesh root, as opposed | ||||
| to the source node. This is also the case when some routing | ||||
| information must be removed from a packet that flows outside the LLN. | ||||
| When to use RFC 6553, RFC 6554 and IPv6-in-IPv6 | ||||
| [I-D.ietf-roll-useofrplinfo] details different cases where RFC 6553, | ||||
| RFC 6554 and IPv6-in-IPv6 encapsulation is required to set the bases | ||||
| to help defining the compression of RPL routing information in LLN | ||||
| environments. | ||||
| When using [RFC6282] the outer IP header of an IP-in-IP encapsulation | This is the case when the additional routing information is inserted | |||
| may be compressed down to 2 octets in stateless compression and down | by a router on the path of a packet, for instance the root of a mesh, | |||
| to 3 octets in stateful compression when context information must be | as opposed to the source node, with the non-storing mode of the "IPv6 | |||
| added. | Routing Protocol for Low-Power and Lossy Networks" [RFC6550] (RPL). | |||
| This is also the case when some routing information must be removed | ||||
| from a packet that flows outside the LLN. | ||||
| "When to use RFC 6553, RFC 6554 and IPv6-in-IPv6" | ||||
| [I-D.ietf-roll-useofrplinfo] details different cases where IPv6 | ||||
| headers defined in the "RPL Option for Carrying RPL Information in | ||||
| Data-Plane Datagrams" [RFC6553] and the "Routing Header for Source | ||||
| Routes with RPL" [RFC6554], and IPv6-in-IPv6 encapsulation, are | ||||
| inserted or removed from packets in a LLN environments operating RPL. | ||||
| When using RFC 6282 [RFC6282] the outer IP header of an IP-in-IP | ||||
| encapsulation may be compressed down to 2 octets in stateless | ||||
| compression and down to 3 octets in stateful compression when context | ||||
| information must be added. | ||||
| 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 | |||
| +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | |||
| | 0 | 1 | 1 | TF |NH | HLIM |CID|SAC| SAM | M |DAC| DAM | | | 0 | 1 | 1 | TF |NH | HLIM |CID|SAC| SAM | M |DAC| DAM | | |||
| +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | |||
| Figure 1: LOWPAN_IPHC base Encoding (RFC6282). | Figure 1: LOWPAN_IPHC base Encoding (RFC6282). | |||
| The Stateless Compression of an IPv6 addresses can only happen if the | The Stateless Compression of an IPv6 addresses can only happen if the | |||
| IPv6 address can de deduced from the MAC addresses, meaning that the | IPv6 address can de deduced from the MAC addresses, meaning that the | |||
| IP end point is also the MAC-layer endpoint. This is generally not | IP end point is also the MAC-layer endpoint. This is generally not | |||
| the case in a RPL network which is generally a multi-hop route-over | the case in a RPL network which is generally a multi-hop route-over | |||
| (i.e., operated at Layer-3) network. A better compression, which | (i.e., operated at Layer-3) network. A better compression, which | |||
| does not involve variable compressions depending on the hop in the | does not involve variable compressions depending on the hop in the | |||
| mesh, can be achieved based on the fact that the outer encapsulation | mesh, can be achieved based on the fact that the outer encapsulation | |||
| is usually between the source (or destination) of the inner packet | is usually between the source (or destination) of the inner packet | |||
| and the root. Also, the inner IP header can only be compressed by | and the root. Also, the inner IP header can only be compressed by | |||
| [RFC6282] if all the fields preceding it are also compressed. This | RFC 6282 [RFC6282] if all the fields preceding it are also | |||
| specification makes the inner IP header the first header to be | compressed. This specification makes the inner IP header the first | |||
| compressed by [RFC6282], and keeps the inner packet encoded the same | header to be compressed by RFC 6282 [RFC6282], and keeps the inner | |||
| way whether it is encapsulated or not, thus preserving existing | packet encoded the same way whether it is encapsulated or not, thus | |||
| implementations. | preserving existing implementations. | |||
| As an example, the Routing Protocol for Low Power and Lossy Networks | As an example, RPL [RFC6550] is designed to optimize the routing | |||
| [RFC6550] (RPL) is designed to optimize the routing operations in | operations in constrained LLNs. As part of this optimization, RPL | |||
| constrained LLNs. As part of this optimization, RPL requires the | requires the addition of RPL Packet Information (RPI) in every | |||
| addition of RPL Packet Information (RPI) in every packet, as defined | packet, as defined in Section 11.2 of RFC 6550 [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 (RPL-OPT) that is placed 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), | Additionally, in the case of the Non-Storing Mode of Operation (MOP), | |||
| RPL requires a Source Routing Header (SRH) in all packets that are | RPL requires a Source Routing Header (SRH) in all packets that are | |||
| routed down a RPL graph. for that purpose, the [IPv6 Routing Header | routed down a RPL graph. for that purpose, the "IPv6 Routing Header | |||
| for Source Routes with RPL] (#RFC6554) specification defines the type | for Source Routes with RPL" [RFC6554] specification defines the type | |||
| 3 Routing Header for IPv6 (RH3). | 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 | | | plus | o o o o | | | plus | |||
| 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 | | | 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 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. | |||
| With Non-Storing RPL, even if the source is a node in the same LLN, | With Non-Storing RPL, even if the source is a node in the same LLN, | |||
| the packet must first reach up the graph to the root so that the root | the packet must first reach up the graph to the root so that the root | |||
| can insert the SRH to go down the graph. In any fashion, whether the | can insert the SRH to go down the graph. In any fashion, whether the | |||
| packet was originated in a node in the LLN or outside the LLN, and | packet was originated in a node in the LLN or outside the LLN, and | |||
| regardless of whether the packet stays within the LLN or not, as long | regardless of whether the packet stays within the LLN or not, as long | |||
| as the source of the packet is not the root itself, the source- | 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 | routing operation also implies an IP-in-IP encapsulation at the root | |||
| in order to insert the SRH. | in order to insert the SRH. | |||
| 6TiSCH [I-D.ietf-6tisch-architecture] specifies the operation of IPv6 | "The 6TiSCH Architecture" [I-D.ietf-6tisch-architecture] specifies | |||
| over the TimeSlotted Channel Hopping [RFC7554] (TSCH) mode of | the operation of IPv6 over the "TimeSlotted Channel Hopping" | |||
| operation of IEEE 802.15.4. The architecture requires the use of | [RFC7554] (TSCH) mode of operation of IEEE 802.15.4. The | |||
| both RPL and the 6lo adaptation layer over IEEE 802.15.4. Because it | architecture requires the use of both RPL and the 6lo adaptation | |||
| inherits the constraints on frame size from the MAC layer, 6TiSCH | layer over IEEE 802.15.4. Because it inherits the constraints on | |||
| cannot afford to allocate 8 bytes per packet on the RPI. Hence the | frame size from the MAC layer, 6TiSCH cannot afford to allocate 8 | |||
| requirement for 6LoWPAN header compression of the RPI. | bytes per packet on the RPI. Hence the 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- | |||
| in-IP encapsulation when it is needed, and optimally compresses | in-IP encapsulation when it is needed, and optimally compresses | |||
| existing routing artifacts found in RPL LLNs. | existing routing artifacts found in RPL LLNs. | |||
| This specification extends the 6lo adaptation layer framework | This specification extends the 6lo adaptation layer framework (RFC | |||
| ([RFC4944],[RFC6282]) so as to carry routing information for route- | 4944 [RFC4944] and RFC 6282 [RFC6282]) so as to carry routing | |||
| over networks based on RPL. The specification includes the formats | information for route-over networks based on RPL. The specification | |||
| necessary for RPL and is extensible for additional formats. | includes the formats necessary for RPL and is extensible for | |||
| additional formats. | ||||
| 2. Terminology | 2. Terminology | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in RFC | |||
| [RFC2119]. | 2119 [RFC2119]. | |||
| The Terminology used in this document is consistent with and | The Terminology used in this document is consistent with and | |||
| incorporates that described in `Terminology in Low power And Lossy | incorporates that described in Terminology in Low power And Lossy | |||
| Networks' [RFC7102] and [RFC6550]. | Networks [RFC7102] and RPL [RFC6550]. | |||
| The terms Route-over and Mesh-under are defined in [RFC6775]. | The terms Route-over and Mesh-under are defined in RFC 6775 | |||
| [RFC6775]. | ||||
| Other terms in use in LLNs are found in [RFC7228]. | Other terms in use in LLNs are found in "Terminology for Constrained- | |||
| Node Networks" [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 | |||
| The 6LoWPAN 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 (RFC 4944 | |||
| [RFC6282]) by introducing a concept of "context" in the 6LoWPAN | [RFC4944] and RFC 6282 [RFC6282]) by introducing a concept of | |||
| parser, a context being identified by a Page number. The | "context" in the 6LoWPAN parser, a context being identified by a Page | |||
| specification defines 16 Pages. | number. The 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 SRH, 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. | |||
| skipping to change at page 1, line 289 ¶ | skipping to change at page 1, line 299 ¶ | |||
| 6LoRH is present. | 6LoRH is present. | |||
| 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 | |||
| 3.2.1. Relative To Non-6LoRH Headers | 3.2.1. Relative To Non-6LoRH Headers | |||
| Paging Dispatch is parsed and no subsequent Paging Dispatch has been | In a zone of a packet where Page 1 is active (that is, once the Page | |||
| parsed, the parsing of the packet MUST follow this specification if | 1 Paging Dispatch is parsed, and until another Paging Dispatch is | |||
| the 6LoRH Bit Pattern Section 3.1 is found. | parsed as described in the 6LoWPAN Paging Dispatch specification | |||
| [I-D.ietf-6lo-paging-dispatch]), the parsing of the packet MUST | ||||
| follow this specification if the 6LoRH Bit Pattern (see 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. | |||
| 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 as defined | |||
| in RFC 4944 [RFC4944]. | ||||
| A 6LoRH header MUST always be placed before the LOWPAN_IPHC as | A 6LoRH header MUST always be placed before the LOWPAN_IPHC as | |||
| defined in 6LoWPAN Header Compression [RFC6282]. It is designed in | defined in RFC 6282 [RFC6282]. It is designed in such a fashion that | |||
| such a fashion that placing or removing a header that is encoded with | placing or removing a header that is encoded with 6LoRH does not | |||
| 6LoRH does not modify the part of the packet that is encoded with | modify the part of the packet that is encoded with LOWPAN_IPHC, | |||
| LoWPAN_IPHC, whether there is an IP-in-IP encapsulation or not. For | whether there is an IP-in-IP encapsulation or not. For instance, the | |||
| instance, the final destination of the packet is always the one in | final destination of the packet is always the one in the LOWPAN_IPHC | |||
| the LOWPAN_IPHC whether there is a Routing Header or not. | whether there is a Routing Header or not. | |||
| 3.2.2. Relative To Other 6LoRH Headers | 3.2.2. Relative To Other 6LoRH Headers | |||
| IPv6 [RFC2460] defines chains of headers that are introduced by an | The "Internet Protocol, Version 6 (IPv6) Specification" [RFC2460] | |||
| IPv6 header and terminated by either another IPv6 header (IP-in-IP) | defines chains of headers that are introduced by an IPv6 header and | |||
| or an Upper Layer Protocol ULP) header. When an outer header is | terminated by either another IPv6 header (IP-in-IP) or an Upper Layer | |||
| stripped from the packet, the whole chain goes with it. When one or | Protocol (ULP) header. When an outer header is stripped from the | |||
| more header(s) are inserted by an intermediate router, that router | packet, the whole chain goes with it. When one or more header(s) are | |||
| normally chains the headers and encapsulates the result in IP-in-IP. | 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 | 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 SRH or HbH headers after | In the compressed form of a packet that has a Source Route or a Hop- | |||
| the inner IPv6 header (e.g. if there is no IP-in-IP encapsulation), | by-Hop (HbH) Options Header [RFC2460] after the inner IPv6 header | |||
| these headers are placed in the 6LoRH form before the 6LOWPAN-IPHC | (e.g. if there is no IP-in-IP encapsulation), these headers are | |||
| that represents the IPv6 header Section 3.2.1. If this packet gets | placed in the 6LoRH form before the 6LOWPAN_IPHC that represents the | |||
| encapsulated and some other SRH or HbH headers are added as part of | IPv6 header (see Section 3.2.1). If this packet gets encapsulated | |||
| the encapsulation, placing the 6LoRH headers next to one another may | and some other SRH or HbH Options 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 | 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 SRH 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 | |||
| SRH entries are consumed as the packet progresses down the LLN | SRH entries are consumed as the packet progresses down the LLN (see | |||
| Section 5.3. 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 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 SRH 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 uses the Dispatch Value Bit Pattern of 10xxxxxx in Page 1. | The 6LoRH uses the 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 | |||
| Critical (6LoRHC) that may not be ignored | Critical (6LoRHC) that may not be ignored | |||
| for each form, a Type field is used to encode the type of 6LoRH. | For each form, a Type field is used to encode the type of 6LoRH. | |||
| Note that there is a different registry for the Type field of each | Note that there is a different registry for the Type field of each | |||
| form of 6LoRH, This means that that a value for the Type that is | form of 6LoRH. | |||
| defined for one form of 6LoRH may be redefined in the future for the | ||||
| other form. | This means that a value for the Type that is defined for one form of | |||
| 6LoRH may be redefined in the future for the other form. | ||||
| 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 | |||
| may be ignored and skipped in parsing. If it is ignored, the 6LoRHE | may be ignored and skipped in parsing. If it is ignored, the 6LoRHE | |||
| is forwarded with no change inside the LLN. | is forwarded with no change inside the LLN. | |||
| 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 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- ... -+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- ... -+ | |||
| skipping to change at page 1, line 418 ¶ | skipping to change at page 1, line 436 ¶ | |||
| the TSE depends on the Type field that follows. For instance, | the TSE depends on the Type field that follows. For instance, | |||
| it may be used to transport control bits, the number of | it may be used to transport control bits, the number of | |||
| elements in an array, or the length of the remainder of the | elements in an array, or the length of the remainder of the | |||
| 6LoRHC expressed in a unit other than bytes. | 6LoRHC expressed in a unit other than bytes. | |||
| Type: Type of the 6LoRHC | Type: Type of the 6LoRHC | |||
| 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 has 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 compressed address, the receiving node will perform the process | |||
| coalescence described in section Section 4.3.1. | of coalescence described in 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 by 6LoRH as the reference to compress an outer | traversed. It is used by 6LoRH as the reference to compress an outer | |||
| IP header, in case of an IP-in-IP encapsulation. If the root is the | IP header, in case of an IP-in-IP encapsulation. If the root is the | |||
| source of the packet, this technique allows to fully elide the source | source of the packet, this technique allows to fully elide the source | |||
| address in the compressed form of the IP header. If the root is not | address in the compressed form of the IP header. If the root is not | |||
| the encapsulator, then the encapsulator address may still be | the encapsulator, then the encapsulator address may still be | |||
| compressed using the root as reference. How the address of the root | compressed using the root as reference. How the address of the root | |||
| is determined is discussed in Section 4.3.2. | is determined is discussed in Section 4.3.2. | |||
| skipping to change at page 1, line 469 ¶ | skipping to change at page 1, line 487 ¶ | |||
| Figure 5: Coalescing addresses. | Figure 5: Coalescing addresses. | |||
| 4.3.2. DODAG Root Address Determination | 4.3.2. DODAG Root Address Determination | |||
| Stateful Address compression requires that some state is installed in | Stateful Address compression requires that some state is installed in | |||
| the devices to store the compression information that is elided from | the devices to store the compression information that is elided from | |||
| the packet. That state is stored in an abstract context table and | 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 | some form of index is found in the packet to obtain the compression | |||
| information from the context table. | information from the context table. | |||
| With [RFC6282], the state is provided to the stack by the 6LoWPAN | With RFC 6282 [RFC6282], the state is provided to the stack by the | |||
| Neighbor Discovery Protocol (NDP) [RFC6775]. NDP exchanges the | "6LoWPAN Neighbor Discovery Protocol (NDP)" [RFC6775]. NDP exchanges | |||
| context through 6LoWPAN Context Option in Router Advertisement (RA) | the context through 6LoWPAN Context Option in Router Advertisement | |||
| messages. In the compressed form of the packet, the context can be | (RA) messages. In the compressed form of the packet, the context can | |||
| signaled in a Context Identifier Extension. | be 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 | detail below. In the compressed form of the packet, the context can | |||
| be signaled in by the RPLInstanceID in the RPI. | be signaled in by the RPLInstanceID in the RPI. | |||
| With RPL [RFC6550], the address of the 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 since RPL | known and does not need to be signaled in the packets. But since RPL | |||
| does not expose that property, it can only be known by a | does not expose that property, it can only be known by a | |||
| configuration 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 RPL to enable the identification of the DODAG. The RPI must be | |||
| be present even in the case when the router also places an SRH header | present even in the case when the router also places an SRH header in | |||
| in the packet. | the packet. | |||
| It is expected that the RPL implementation maintains 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 RPL Instance. | that particular RPL Instance. | |||
| 5. The SRH 6LoRH Header | 5. The SRH 6LoRH Header | |||
| 5.1. Encoding | 5.1. Encoding | |||
| A Source Routing Header 6LoRH (SRH-6LoRH) header provides a | A Source Routing Header 6LoRH (SRH-6LoRH) header provides a | |||
| compressed form for the SRH, as defined in [RFC6554] for use by RPL | compressed form for the SRH, as defined in RFC 6554 [RFC6554] for use | |||
| routers. | by RPL routers. | |||
| One or more SRH-6LoRH header(s) MAY be placed in a 6LoWPAN packet. | One or more SRH-6LoRH header(s) MAY be placed in a 6LoWPAN packet. | |||
| If a non-RPL router receives a packet with a SRH-6LoRH header, there | If a non-RPL router receives a packet with a SRH-6LoRH header, there | |||
| was a routing or a configuration error (see Section 8). | was a routing or a configuration error (see Section 8). | |||
| The desired reaction for the non-RPL router is to drop the packet as | The desired reaction for the non-RPL router is to drop the packet as | |||
| opposed to skip the header and forward the packet. | opposed to skip the header and forward the packet. | |||
| The Dispatch Value Bit Pattern for the SRH-6LoRH header indicates | The Dispatch Value Bit Pattern for the SRH-6LoRH header indicates | |||
| skipping to change at page 1, line 542 ¶ | skipping to change at page 1, line 560 ¶ | |||
| |1|0|0| Size |6LoRH Type 0..4| Hop1 | Hop2 | | HopN | | |1|0|0| Size |6LoRH Type 0..4| Hop1 | Hop2 | | HopN | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- -+- -+ ... +- -+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- -+- -+ ... +- -+ | |||
| Where N = Size + 1 | Where N = Size + 1 | |||
| Figure 6: The SRH-6LoRH. | Figure 6: The SRH-6LoRH. | |||
| The 6LoRH Type of a SRH-6LoRH header indicates the compression level | The 6LoRH Type of a SRH-6LoRH header indicates the compression level | |||
| used for that header. | used for that header. | |||
| It results that all addresses in a given SRH-6LoRH header MUST be | The fields following the 6LoRH Type are compressed addresses | |||
| compressed in an identical fashion, down to using the identical | indicating the consecutive hops, and are ordered from the first to | |||
| number of bytes per address. In order to get different degrees of | the last hop. | |||
| compression, multiple consecutive SRH-6LoRH headers MUST be used. | ||||
| All the addresses in a given SRH-6LoRH header MUST be compressed in | ||||
| an identical fashion, so the Length of the compressed for is the same | ||||
| for all. | ||||
| In order to get different degrees of 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 SRH-6LoRH | Type 4 means that the address is provided in full in the SRH-6LoRH | |||
| with no compression. The complete list of Types of SRH-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) | | |||
| +-----------+----------------------+ | +-----------+----------------------+ | |||
| skipping to change at page 1, line 608 ¶ | skipping to change at page 1, line 632 ¶ | |||
| SRH-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 SRH 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 SRH-6LoRH headers. | be encoded in order in one or more consecutive SRH-6LoRH headers. | |||
| Whether or not there is a SRH-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 SRH-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 SRH-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. This router can be the final | the final destination in the LLN. This router can be the final | |||
| destination if it is found desirable to carry a whole IP-in-IP | destination if it is found desirable to carry a whole IP-in-IP | |||
| skipping to change at page 1, line 631 ¶ | skipping to change at page 1, line 655 ¶ | |||
| host, and advertising the host as an external route to RPL. | host, and advertising the host as an external route to RPL. | |||
| If the SRH-6LoRH header is contained in an IP-in-IP encapsulation, | If the SRH-6LoRH header is contained in an IP-in-IP encapsulation, | |||
| the last router removes the whole chain of headers. Otherwise, it | the last router removes the whole chain of headers. Otherwise, it | |||
| removes the SRH-6LoRH header only. | removes the SRH-6LoRH header only. | |||
| 5.2.3. Inner LOWPAN_IPHC Compression | 5.2.3. Inner LOWPAN_IPHC Compression | |||
| 6LoWPAN ND [RFC6282] is designed to support more than one IPv6 | 6LoWPAN ND [RFC6282] is designed to support more than one IPv6 | |||
| address per node and per Interface Identifier (IID), an IID being | address per node and per Interface Identifier (IID), an IID being | |||
| typically derived from a MAC address to optimize the LOWPAN-IPHC | typically derived from a MAC address to optimize the LOWPAN_IPHC | |||
| compression. | compression. | |||
| Link local addresses are compressed with stateless address | Link local addresses are compressed with stateless address | |||
| compression (S/DAC=0). The other addresses are derived from | compression (S/DAC=0). The other addresses are derived from | |||
| different prefixes and they can be compressed with stateful address | different prefixes and they can be compressed with stateful address | |||
| compression based on a context (S/DAC=1). | compression based on a context (S/DAC=1). | |||
| But stateless compression is only defined for the specific link-local | But stateless compression is only defined for the specific link-local | |||
| prefix as opposed to the prefix in an encapsulating header. And with | prefix as opposed to the prefix in an encapsulating header. And with | |||
| stateful compression, the compression reference is found in a | stateful compression, the compression reference is found in a | |||
| skipping to change at page 1, line 686 ¶ | skipping to change at page 1, line 710 ¶ | |||
| RH may have been used to stay away from the shortest path for some | 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). | reason that is only valid on the way in (segment routing). | |||
| 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 RFC 2460 [RFC2460] for RH0 | |||
| is authenticated, which requires an Authentication Header (AH). | unless it is authenticated, which requires an Authentication | |||
| There is no definition of an AH operation for SRH, and there is no | Header (AH). There is no definition of an AH operation for SRH, | |||
| indication that the need exists in LLNs. | 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 | 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 | |||
| skipping to change at page 1, line 717 ¶ | skipping to change at page 1, line 741 ¶ | |||
| 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 the first | With this specification, the Compression Reference for the first | |||
| address found in an SRH header is the source of the IPv6 packet, and | 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 | then the reference for each subsequent entry is the address of its | |||
| predecessor once it is uncompressed. | predecessor once it is uncompressed. | |||
| With RPL [RFC6550], an SRH header may only be present in Non-Storing | 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 the address of the root. | |||
| 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 | |||
| identifier of a 6LoWPAN Context that carries the address [RFC6775], | identifier of a 6LoWPAN Context that carries the address [RFC6775], | |||
| for instance one of the 16 Context Identifiers used in LOWPAN-IPHC | for instance one of the 16 Context Identifiers used in LOWPAN_IPHC | |||
| [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. | |||
| Else, meaning that the IP-in-IP compression specified in this | ||||
| document is used and the encapsulator is implicitly the root, the | ||||
| address of the root is the reference. | ||||
| 5.5. 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 SRH-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 SRH-6LoRH headers. | of entries in consecutive SRH-6LoRH headers. | |||
| Popping an entry of an SRH-6LoRH header is a recursive action | Popping an entry of an SRH-6LoRH header is a recursive action | |||
| performed as follows: | performed as follows: | |||
| skipping to change at page 1, line 768 ¶ | skipping to change at page 1, line 794 ¶ | |||
| 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 SRH-6LoRH is removed. | compressed forms, then the SRH-6LoRH is removed. | |||
| Else, the first entry of the next SRH-6LoRH is popped from the next | Else, the first entry of the next SRH-6LoRH is popped from the next | |||
| SRH-6LoRH and coalesced with the first entry of this SRH-6LoRH. | SRH-6LoRH and coalesced with the first entry of this SRH-6LoRH. | |||
| At the end of the process, if there is no more SRH-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. | |||
| An example of this operation is provided in Appendix A.3. | ||||
| 5.6. Forwarding | 5.6. Forwarding | |||
| When receiving a packet with a SRH-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 this router is not the | If strict source routing is enforced and this 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 | |||
| skipping to change at page 1, line 800 ¶ | skipping to change at page 1, line 828 ¶ | |||
| 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 SRH-6LoRH header as discussed in Section 5.4. If | entry of the first SRH-6LoRH header as discussed in Section 5.4. If | |||
| the type of the SRH-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. | ||||
| 6. The RPL Packet Information 6LoRH | 6. The RPL Packet Information 6LoRH | |||
| [RFC6550], Section 11.2, specifies the RPL Packet Information (RPI) | RPL [RFC6550], Section 11.2, specifies the RPL Packet Information | |||
| as a set of fields that are placed by RPL routers in IP packets to | (RPI) as a set of fields that are placed by RPL routers in IP packets | |||
| identify the RPL Instance, detect anomalies and trigger corrective | to identify the RPL Instance, detect anomalies and trigger corrective | |||
| actions. | 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 described in RFC 6552 | |||
| Rank of the sender and is modified at each hop. The SenderRank field | [RFC6552], indicates the Rank of the sender and is modified at each | |||
| is used to validate that the packet progresses in the expected | hop. The SenderRank field is used to validate that the packet | |||
| direction, either upwards or downwards, along the DODAG. | progresses in the expected 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- | |||
| Datagrams [RFC6553] to transport the RPI, which is carried in an IPv6 | Plane Datagrams" [RFC6553] to transport the RPI, which is carried in | |||
| Hop-by-Hop Options Header [RFC2460], typically consuming eight bytes | an IPv6 Hop-by-Hop Options Header [RFC2460], typically consuming | |||
| per packet. | eight bytes per packet. | |||
| With [RFC6553], the RPL option is encoded as six octets, which must | With RFC 6553 [RFC6553], the RPL option is encoded as six octets, | |||
| be placed in a Hop-by-Hop header that consumes two additional octets | which must be placed in a Hop-by-Hop header that consumes two | |||
| for a total of eight octets. To limit the header's range to just the | additional octets for a total of eight octets. To limit the header's | |||
| RPL domain, the Hop-by-Hop header must be added to (or removed from) | range to just the RPL domain, the Hop-by-Hop header must be added to | |||
| packets that cross the border of the RPL domain. | (or removed from) packets that cross the border of the RPL domain. | |||
| The 8-byte overhead is detrimental to LLN operation, in particular | The 8-byte overhead is detrimental to LLN operation, in particular | |||
| with regards to bandwidth and battery constraints. These bytes may | with regards to bandwidth and battery constraints. These bytes may | |||
| cause a containing frame to grow above maximum frame size, leading to | cause a containing frame to grow above maximum frame size, leading to | |||
| Layer 2 or 6LoWPAN [RFC4944] fragmentation, which in turn leads to | Layer 2 or 6LoWPAN [RFC4944] fragmentation, which in turn leads to | |||
| even more energy expenditure and issues discussed in LLN Fragment | even more energy expenditure and issues discussed in "LLN Fragment | |||
| Forwarding and Recovery [I-D.thubert-6lo-forwarding-fragments]. | Forwarding and Recovery" [I-D.thubert-6lo-forwarding-fragments]. | |||
| An additional overhead comes from the need, in certain cases, to add | An additional overhead comes from the need, in certain cases, to add | |||
| an IP-in-IP encapsulation to carry the Hop-by-Hop header. This is | an IP-in-IP encapsulation to carry the Hop-by-Hop header. This is | |||
| needed when the router that inserts the Hop-by-Hop header is not the | needed when the router that inserts the Hop-by-Hop header is not the | |||
| source of the packet, so that an error can be returned to the router. | source of the packet, so that an error can be returned to the router. | |||
| This is also the case when a packet originated by a RPL node must be | This is also the case when a packet originated by a RPL node must be | |||
| stripped from the Hop-by-Hop header to be routed outside the RPL | stripped from the Hop-by-Hop header to be routed outside the RPL | |||
| 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: it was found that some implementations omit the RPI for packets | |||
| graph requires an IP-in-IP encapsulation of the SRH, whereas the RPI | going down the RPL graph in Non-Storing Mode, even though RPL | |||
| is usually (and quite illegally) omitted. With this specification, | indicates that the RPI should be placed in the packet. With this | |||
| the RPI is important to indicate the RPLInstanceID so the RPI should | specification, the RPI is important to indicate the RPLInstanceID so | |||
| not be omitted. To impact of placing an IP-in-IP encapsulation and | the RPI should not be omitted. | |||
| an RPI in the packet, an optimized 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 RFC 6553 [RFC6553], the fields in the RPI include an 'O', an | |||
| an 'F' bit, an 8-bit RPLInstanceID (with some internal structure), | 'R', and an 'F' bit, an 8-bit RPLInstanceID (with some internal | |||
| and a 16-bit SenderRank. | structure), 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 Section 5 of the RPL specification | |||
| simple use cases do not require more than one RPL Instance, and in | [RFC6550]. A number of simple use cases do not require more than one | |||
| such cases, the RPL Instance is expected to be the Global Instance 0. | RPL Instance, and in such cases, the RPL Instance is expected to be | |||
| A global RPLInstanceID is encoded in a RPLInstanceID field as | the Global Instance 0. A global RPLInstanceID is encoded in a | |||
| follows: | 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 Section 3.5.1 of | |||
| Section 3.5.1, as: | the RPL specification [RFC6550] as: | |||
| DAGRank(rank) = floor(rank/MinHopRankIncrease) | DAGRank(rank) = floor(rank/MinHopRankIncrease) | |||
| If MinHopRankIncrease is set to a multiple of 256, the least | If MinHopRankIncrease is set to a multiple of 256, the least | |||
| significant 8 bits of the SenderRank will be all zeroes; by eliding | significant 8 bits of the SenderRank will be all zeroes; by eliding | |||
| those, the SenderRank can be compressed into a single byte. This | those, the SenderRank can be compressed into a single byte. This | |||
| idea is used in [RFC6550] by defining DEFAULT_MIN_HOP_RANK_INCREASE | idea is used in RFC 6550 [RFC6550] by defining | |||
| as 256 and in [RFC6552] that defaults MinHopRankIncrease to | DEFAULT_MIN_HOP_RANK_INCREASE as 256 and in RFC 6552 [RFC6552] that | |||
| DEFAULT_MIN_HOP_RANK_INCREASE. | defaults MinHopRankIncrease to DEFAULT_MIN_HOP_RANK_INCREASE. | |||
| This specification allows to encode the SenderRank as either one or | This specification allows to encode the SenderRank as either one or | |||
| two bytes, and defines a K flag that, when set, signals that a single | two bytes, and defines a K flag that, when set, signals that a single | |||
| byte is used. | byte is used. | |||
| 6.3. The Overall RPI-6LoRH encoding | 6.3. The Overall RPI-6LoRH encoding | |||
| The RPI-6LoRH header provides a compressed form for the RPL RPI. | The RPI-6LoRH header provides a compressed form for the RPL RPI. | |||
| Routers that need to forward a packet with a RPI-6LoRH header are | Routers that need to forward a packet with a RPI-6LoRH header are | |||
| expected to be RPL routers that support this specification. | expected to be RPL routers that support this specification. | |||
| skipping to change at page 1, line 949 ¶ | skipping to change at page 1, line 974 ¶ | |||
| 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 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 section 11.2 | |||
| section 11.2. | of RFC 6550 [RFC6550]. | |||
| I flag: If it is set, the RPLInstanceID is elided and the | I flag: If it is set, the RPLInstanceID is elided and the | |||
| RPLInstanceID is the Global RPLInstanceID 0. If it is not set, | RPLInstanceID is the Global RPLInstanceID 0. If it is not set, | |||
| the octet immediately following the type field contains the | the octet immediately following the type field contains the | |||
| RPLInstanceID as specified in [RFC6550], section 5.1. | RPLInstanceID as specified in section 5.1 of RFC 6550 | |||
| [RFC6550],. | ||||
| K flag: If it is set, the SenderRank is compressed into one octet, | K flag: 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 1046 ¶ | skipping to change at page 1, line 1072 ¶ | |||
| 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 14: 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 | each hop. When the HL reaches 0, the packet is dropped per RFC 2460 | |||
| [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. | |||
| The most efficient compression of an IP-in-IP encapsulation that can | The most efficient compression of an IP-in-IP encapsulation that can | |||
| be achieved with this specification is obtained when an endpoint of | be achieved with this specification is obtained when an endpoint of | |||
| the packet is the root of the RPL DODAG associated to the RPL | the packet is the root of the RPL DODAG associated to the RPL | |||
| Instance that is used to forward the packet, and the root address is | Instance that is used to forward the packet, and the root address is | |||
| skipping to change at page 1, line 1071 ¶ | skipping to change at page 1, line 1097 ¶ | |||
| 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 Length of 3 | performed on the Encapsulator Address. For instance, a Length 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. | |||
| 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, | |||
| in storing mode, it is the destination address in the IPHC for | in storing mode, it is the destination address in the LOWPAN_IPHC for | |||
| packets going downwards. In non-storing mode, there is no implicit | packets going downwards. In non-storing mode, there is no implicit | |||
| value for packets going downwards. | value for packets going downwards. | |||
| If the implicit value is correct, the destination IP address of the | If the implicit value is correct, the destination IP address of the | |||
| IP-in-IP encapsulation can be elided. Else, the destination IP | 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 | address of the IP-in-IP header is transported in a SRH-6LoRH header | |||
| as the first entry of the first of these headers. | 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 | |||
| all fragments and can be elided only for the first fragment and for | LOWPAN_IPHC on all fragments and can be elided only for the first | |||
| packets going upwards. | fragment and for packets going upwards. | |||
| 8. Management Considerations | 8. Management Considerations | |||
| Though it is possible to decompress a packet at any hop, this | Though it is possible to decompress a packet at any hop, this | |||
| specification is optimized to enable that a packet is forwarded in | specification is optimized to enable that a packet is forwarded in | |||
| its compressed form all the way, and it makes sense to deploy | its compressed form all the way, and it makes sense to deploy | |||
| homogeneous networks, where all nodes, or no node at all, use the | homogeneous networks, where all nodes, or no node at all, use the | |||
| compression technique detailed therein. | compression technique detailed therein. | |||
| This specification does not provide a method to discover the | This specification does not provide a method to discover the | |||
| skipping to change at page 1, line 1125 ¶ | skipping to change at page 1, line 1151 ¶ | |||
| Critical 6LoWPAN Routing Header that it does not understand is an | Critical 6LoWPAN Routing Header that it does not understand is an | |||
| administrative error whereby the wrong device is placed in a network, | administrative error whereby the wrong device is placed in a network, | |||
| or the device is mis-configured. | or the device is mis-configured. | |||
| When a mismatch situation is detected, it is expected that the device | When a mismatch situation is detected, it is expected that the device | |||
| raises some management alert, indicating the issue, e.g. that it has | raises some management alert, indicating the issue, e.g. that it has | |||
| to drop a packet with a Critical 6LoRH. | to drop a packet with a Critical 6LoRH. | |||
| 9. Security Considerations | 9. Security Considerations | |||
| The security considerations of [RFC4944], [RFC6282], and [RFC6553] | The security considerations of RFC 4944 [RFC4944], RFC 6282 | |||
| apply. | [RFC6282], and RFC 6553 [RFC6553] apply. | |||
| Using a compressed format as opposed to the full in-line format is | Using a compressed format as opposed to the full in-line format is | |||
| logically equivalent and is believed to not create an opening for a | logically equivalent and is believed to not create an opening for a | |||
| new threat when compared to [RFC6550], [RFC6553] and [RFC6554], | new threat when compared to RFC 6550 [RFC6550], RFC 6553 [RFC6553] | |||
| noting that, even though intermediate hops are removed from the SRH | and RFC 6554 [RFC6554], noting that, even though intermediate hops | |||
| header as they are consumed, a node may still identify that the rest | are removed from the SRH header as they are consumed, a node may | |||
| of the source routed path includes a loop or not (see Security | still identify that the rest of the source routed path includes a | |||
| section of [RFC6554]. It must be noted that if the attacker is not | loop or not (see Security section of RFC 6554). It must be noted | |||
| part of the loop, then there is always a node at the beginning of the | that if the attacker is not part of the loop, then there is always a | |||
| loop that can detect it and remove it. | node at the beginning of the loop that can detect it and remove it. | |||
| 10. IANA Considerations | 10. 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. | |||
| Additionally this document creates two IANA registries, one for the | Additionally this document creates two IANA registries, one for the | |||
| Critical 6LoWPAN Routing Header Type and one for the Elective 6LoWPAN | Critical 6LoWPAN Routing Header Type and one for the Elective 6LoWPAN | |||
| Routing Header Type, each with 32 possible values from 0 to 31, as | Routing Header Type, each with 32 possible values from 0 to 31, as | |||
| described below. | described below. | |||
| Future assignments in these registries are to be coordinated via IANA | Future assignments in these registries are to be coordinated via IANA | |||
| under the policy of "RFC Required" [RFC5226] to enable any type of | under the policy of "RFC Required" (per RFC 5226 [RFC5226]) to enable | |||
| RFC to obtain a value in the registry. | any type of RFC to obtain a value in the registry. | |||
| 10.2. New Critical 6LoWPAN Routing Header Type Registry | 10.2. New Critical 6LoWPAN Routing Header Type Registry | |||
| This document creates an IANA registry for the Critical 6LoWPAN | This document creates an IANA registry for the Critical 6LoWPAN | |||
| Routing Header Type, and assigns the following values: | Routing Header Type, and assigns the following values: | |||
| 0..4: SRH-6LoRH [RFCthis] | 0..4: SRH-6LoRH [RFCthis] | |||
| 5: RPI-6LoRH [RFCthis] | 5: RPI-6LoRH [RFCthis] | |||
| <- under the policy of "IETF Review" [RFC5226] to ensure adequate | 10.3. New Elective 6LoWPAN Routing Header Type Registry | |||
| community review. -> ## New Elective 6LoWPAN Routing Header Type | ||||
| Registry | ||||
| This document creates an IANA registry for the Elective 6LoWPAN | This document creates an IANA registry for the Elective 6LoWPAN | |||
| Routing Header Type, and assigns the following value: | Routing Header Type, and assigns the following value: | |||
| 6: IP-in-IP-6LoRH [RFCthis] | 6: IP-in-IP-6LoRH [RFCthis] | |||
| <- under the policy of "IETF Review" [RFC5226] to ensure adequate | ||||
| community review. -> | ||||
| 11. Acknowledgments | 11. 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 | |||
| the design in the 6lo Working Group. The overall discussion involved | the design in the 6lo Working Group. The overall discussion involved | |||
| participants to the 6MAN, 6TiSCH and ROLL WGs, thank you all. | participants to the 6MAN, 6TiSCH and ROLL WGs, thank you all. | |||
| Special thanks to the chairs of the ROLL WG, Michael Richardson and | Special thanks to the chairs of the ROLL WG, Michael Richardson and | |||
| Ines Robles, Brian Haberman, Internet Area A-D, and Alvaro Retana and | Ines Robles, Brian Haberman, Internet Area A-D, and Alvaro Retana and | |||
| Adrian Farrel, Routing Area A-Ds, for driving this complex effort | Adrian Farrel, Routing Area A-Ds, for driving this complex effort | |||
| across Working Groups and Areas. | across Working Groups and Areas. | |||
| 12. References | 12. References | |||
| 12.1. Normative References | 12.1. Normative References | |||
| [I-D.ietf-6lo-paging-dispatch] | [I-D.ietf-6lo-paging-dispatch] | |||
| Thubert, P. and R. Cragie, "6LoWPAN Paging Dispatch", | Thubert, P. and R. Cragie, "6LoWPAN Paging Dispatch", | |||
| draft-ietf-6lo-paging-dispatch-04 (work in progress), | draft-ietf-6lo-paging-dispatch-05 (work in progress), | |||
| September 2016. | October 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/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| skipping to change at page 28, line 19 ¶ | skipping to change at page 28, line 51 ¶ | |||
| <http://www.rfc-editor.org/info/rfc7554>. | <http://www.rfc-editor.org/info/rfc7554>. | |||
| Appendix A. Examples | Appendix A. Examples | |||
| A.1. Examples Compressing The RPI | A.1. Examples Compressing The RPI | |||
| The example in Figure 15 illustrates the 6LoRH compression of a | 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 RFC 4944 [RFC4944], and the | |||
| headers must be placed in Page 0 before switching to Page 1: | fragment 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 | | |Frag type|Frag hdr | | |||
| |RFC 4944 |RFC 4944 | Payload (cont) | |RFC 4944 |RFC 4944 | Payload (cont) | |||
| +- ... -+- ... -+-+ ... -+-+ ... -+- ... +-+-+-+-+-+-+-+-+-+-+... | +- ... -+- ... -+-+ ... -+-+ ... -+- ... +-+-+-+-+-+-+-+-+-+-+... | |||
| skipping to change at page 29, line 7 ¶ | skipping to change at page 29, line 31 ¶ | |||
| 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) | |||
| +- ... -+-+- ... -+-+-+-+ ... -+-+-+-+ ... -+-+-+-+-+-+-+-+-+-+-+... | +- ... -+-+- ... -+-+-+-+ ... -+-+-+-+ ... -+-+-+-+-+-+-+-+-+-+-+... | |||
| <- RFC 6282 -> | <- RFC 6282 -> | |||
| No RPL artifact | No RPL artifact | |||
| Figure 16: Example ICMP Packet with RPI in Storing Mode. | Figure 16: Example ICMP Packet with RPI in Storing Mode. | |||
| The format in Figure 16 is logically equivalent to the non-compressed | The format in Figure 16 is logically equivalent to the non-compressed | |||
| format illustrated in Figure 17: | format illustrated in Figure 17: | |||
| +-+-+-+- ... -+-+-+-+ ... -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+... | +-+-+-+- ... -+-+-+-+ ... -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+... | |||
| | IPv6 Header | Hop-by-Hop | RPI in | ICMP message ... | | IPv6 Header | Hop-by-Hop | RPI in | ICMP message ... | |||
| | NH = 58 | Header | RPL Option | | | NH = 58 | Header | RPL Option | | |||
| +-+-+-+- ... -+-+-+-+ ... -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+... | +-+-+-+- ... -+-+-+-+ ... -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+... | |||
| Figure 17: Uncompressed ICMP Packet with RPI. | Figure 17: Uncompressed ICMP Packet with RPI. | |||
| For a UDP packet, the transport header can be compressed with 6LoWPAN | For a UDP packet, the transport header can be compressed with 6LoWPAN | |||
| HC [RFC6282] as illustrated in Figure 18: | HC [RFC6282] as illustrated in Figure 18: | |||
| +- ... -+- ... -+-+-+-+- ... +-+-+-+-+-+-+-+-+-+- ... +-+-+-+-+-+... | +-+ ... -+-+-...-+-+- ... -+-+-+-+ ... -+-+-+ ... -+-+-+-+-+... | |||
| |11110001| RPI-6LoRH | NH = 1 |11110|C| P | Compressed |UDP ... | |11110001| RPI- | NH=1 |11110CPP| Compressed | UDP | |||
| |Page 1 | type 5 | 6LOWPAN-IPHC | UDP | | | UDP header |Payload | |Page 1 | 6LoRH | LOWPAN_IPHC | UDP | UDP header | Payload | |||
| +- ... -+- ... -+-+-+-+- ... +-+-+-+-+-+-+-+-+-+- ... +-+-+-+-+-+... | +-+ ... -+-+-...-+-+- ... -+-+-+-+ ... -+-+-+ ... -+-+-+-+-+... | |||
| <- RFC 6282 -> | <- RFC 6282 -> | |||
| No RPL artifact | No RPL artifact | |||
| Figure 18: Uncompressed ICMP Packet with RPI. | Figure 18: Uncompressed ICMP Packet with RPI. | |||
| If the packet is received from the Internet in Storing Mode, then the | 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 | root is supposed to encapsulate the packet to insert the RPI. The | |||
| resulting format would be as represented in Figure 19: | resulting format would be as represented in Figure 19: | |||
| +-+-+-+-+-+-+- ... -+-+-- ... -+-+- ... -+-+-+-+-+-+-+ ... -+-+-+-+... | +-+ ... -+-+-...-+-+-- ... -+-+-+-+- ... -+-+ ... -+-+-+ ... -+-+-+... | |||
| |11110001 | RPI-6LoRH | IP-in-IP | NH=1 |11110CPP| Compressed | UDP | |11110001| RPI- | IP-in-IP | NH=1 |11110CPP| Compressed | UDP | |||
| |Page 1 | | 6LoRH | IPHC | UDP | UDP header | Payload | |Page 1 | 6LoRH | 6LoRH | LOWPAN_IPHC | UDP | UDP header | Payld | |||
| +-+-+-+-+-+-+- ... -+-+-- ... -+-+- ... -+-+-+-+-+-+-+ ... -+-+-+-+... | +-+ ... -+-+-...-+-+-- ... -+-+-+-+- ... -+-+ ... -+-+-+ ... -+-+-+... | |||
| <- RFC 6282 -> | <- RFC 6282 -> | |||
| No RPL artifact | No RPL artifact | |||
| 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 (SRH) 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 as defiend in RFC 2460 [RFC2460] and RFC 6554 | |||
| [RFC6554]. | ||||
| When compressed with this specification, the 4 hops are encoded in | When compressed with this specification, the 4 hops are encoded in | |||
| SRH-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 SRH-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 SRH-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 SRH_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 |SRH-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 |LOWPAN_IPHC | UDP | hdr |load | |||
| +-+-+-+-+-+-+- ... +-+-+- ... -+-+-- ... -+-+- ... -+-+-+-+-+ ... +-... | +-+-+-+-+-+-+- ... +-+-+- ... -+-+-- ... -+-+- ... -+-+-+-+-+ ... +-... | |||
| <-8bytes-> <- RFC 6282 -> | <-8bytes-> <- RFC 6282 -> | |||
| No RPL artifact | No RPL artifact | |||
| Figure 20: Example Compressed Packet with SRH. | 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 RPLInstanceID 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 SRH-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 SRH 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| SRH-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 SRH 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 SRH-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 SRH-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 SRH-6LoRH of | encoded. The Size of 3 indicates 4 hops, resulting in a SRH-6LoRH of | |||
| End of changes. 88 change blocks. | ||||
| 227 lines changed or deleted | 250 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/ | ||||