Internet-Draft | HBH Options Processing | December 2020 |
Hinden & Fairhurst | Expires 6 June 2021 | [Page] |
This document specifies procedures for how IPv6 Hop-by-Hop options are processed. It modifies the procedures specified in the IPv6 Protocol Specification (RFC8200) to make processing in routers more practical with the goal of making IPv6 Hop-by-Hop options useful to deploy in the Internet. When published, this document updates RFC8200.¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 6 June 2021.¶
Copyright (c) 2020 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.¶
This document specifies procedures for how IPv6 Hop-by-Hop options are processed. It modifies the procedures specified in the IPv6 Protocol Specification (RFC8200) to make processing in routers more practical with the goal of making IPv6 Hop-by-Hop options useful to deploy in the Internet.¶
When published this document updates [RFC8200].¶
The current list of defined Hop-by-Hop options can be found at [IANA-HBH].¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
This document uses the following loosely defined terms:¶
In the first version of the IPv6 specification, Hop-by-Hop options were required to be processed by all nodes, routers and hosts. This proved to not be practical in high speed routers due to several factors, including:¶
When the IPv6 Specification was updated and published in July 2017 as [RFC8200], the procedures relating to hop-by-hop options are as follows:¶
The changes meant that an implementation complied with the IPv6 specification even if it did not process hop-by-hop options, and that it was expected that routers would add configuration information to control which hop-by-hop options they would process.¶
Unfortunately, this did not improve the processing of Hop-by-Hop options and they are often not possible to be deployed and used in the Internet. It merely documented how they were being used in the Internet.¶
In hindsight, hop-by-hop options were still not practical to be used widely in the Internet. Many operational routers are configured to drop all packets containing a hop-by-hop option header. The main issues remain:¶
There has been some academic research that discussed the general problem with dropping packets containing IPv6 extension headers, including the Hop-by-Hop Options header. For example [Hendriks] states that "dropping all packets with Extension Headers, is a bad practice", and that "The share of traffic containing more than one EH however, is very small. For the design of hardware able to handle the dynamic nature of EHs, we therefore recommend to support at least one EH"¶
This document defines a set of procedures for the hop-by-hop option header that make the processing of hop-by-hop options practical in modern transit routers.¶
This section describes three sets of changes to [RFC8200].¶
The Hop-by-Hop Option Header as defined in Section 4.3 of [RFC8200] is identified by a Next Header value of 0 in the IPv6 header. Section 4.1 requires a Hop-by-Hop Options header to appear immediately after the IPv6 header. [RFC8200] also requires that a Hop-by-Hop Options header can only appear once in a packet.¶
The Hop-by-Hop Options Header as defined in [RFC8200] can contain one or more Hop-by-Hop options. This document updates [RFC8200] such that there MUST only be one option contained in an Hop-by-Hop Options header in a single packet. The motivation for this change is to simplify the processing of Hop-by-Hop options in the fast path.¶
Nodes creating packets with a Hop-by-Hop option headers MUST only include a single option in the packet. This also requires that all Hop-by-Hop Options MUST be 8-octet aligned. See Section 6 for more detail.¶
Nodes processing a packet with a Hop-by-Hop options header MUST discard the packet if there is more than one Hop-by-Hop option in that header.¶
Section 4.2 of [RFC8200] defines an Option Type field in options that controls how the option is processed if the IPv6 node processing the option header does not recognize the Option Type. This document modifies that behavior for options carried in an Hop-by-Hop Option header in two ways.¶
IPv6 nodes MUST only process an Hop-by-Hop Options header if it can be done in the fast path of the router. If the IPv6 node can not process the Hop-by-Hop Option header in the fast path is MUST skip over this option and continue processing the header normally.¶
Section 4.2 of [RFC8200] defines the Option Type identifiers as internally encoded such that their highest-order 2 bits specify the action that must be taken if the processing IPv6 node does not recognize the Option Type. This document modifies this behaviour for Hop-by-Hop options as follows:¶
00 - skip over this option and continue processing the header. 01 - discard the packet. 10 - discard the packet. 11 - discard the packet.¶
The motivation for this change is to simplify what the router needs to do in the fast path when it can not recognize the Option Type. It is no longer required to send ICMP Parameter Problem messages.¶
Section 4 of [RFC8200] allows for a router to control it's processing of IPv6 Hop-by-Hop options by local configuration. The text is:¶
A possible approach to implementing this is to maintain a lookup table based on Option Type of the IPv6 options that are supported in the fast path. This would allow for a node to quickly determine if an option is supported and can be processed. If the option is not supported, then the node processes it as described in Section 5.2 of this document.¶
The actions of the lookup table SHOULD be configurable by the operator of the router.¶
[RFC8200] requires all extension headers to be 8-octet aligned. The text from Section 4 is:¶
Two types of Pad options are defined to keep this alignment, that is Pad1 and PadN, if the options in an Destination Option Header or Hop-by-Hop Option Header do not result in 8-octet alignment.¶
This document requires all Hop-by-Hop Options to be 8-octet aligned (see Section 5.1). This eliminates the need for Pad options to be used in the Hop-by-Hop Option header to make them 8-octet aligned.¶
The current list of defined Destination and Hop-by-Hop options can be found at [IANA-HBH].¶
The following sections list current Hop-by-Hop Options that meet the alignment requirement defined here (Section 6.1) or if they need to be be deprecated or modified (Section 6.2). Hop-by-Hop Options that have been deprecated, and Destination Options are listed separately in Section 6.3. Pad Options (Pad1 and PadN), and RFC3692-style Experiment options are not listed.¶
The following Hop-by-Hop Options meet the alignment requirements defined in this section:¶
*** Note: Need to verify that these options are 8-octet aligned.¶
The Hop-by-Hop Options listed in this section do not meet the alignment requirements defined in this section. They either need to be deprecated or modified to support 8-octet alignment without the use of Pad options. If there is interest in modifying them, it should be straightforward to make them have 8-octet alignment.¶
The options listed in this section are either Destination Options or Deprecated Hop-by-Hop Options. 8-octet alignment is not an issue.¶
Any new IPv6 Hop-by-Hop option defined in the future should have 8-octet alignment without the use of any Pad options. This requirement modifies Section 4.8 of [RFC8200].¶
This draft has no actions for the IANA.¶
Helpful comments were received from Brian Carpenter, Ron Bonica, Ole Troan, [your name here], and other members of the 6MAN working group.¶
draft-hinden-6man-hbh-processing-00, 2020-Nov-29: Initial draft.¶