This document specifies several new ICMPv6 errors that can be sent when a node discards a packet due to it being unable to process the necessary protocol headers because of processing constraints or limits. New ICMPv6 code points are defined to supplement those defined in [
RFC 4443]. Six of the errors are specific to the processing of extension headers; another error is used when the aggregate protocol headers in a packet exceed the processing limits of a node.
In IPv6, optional internet-layer information is carried in one or more IPv6 extension headers [
RFC 8200]. Extension headers are placed between the IPv6 header and the upper-layer header in a packet. The term "header chain" refers collectively to the IPv6 header, extension headers, and upper-layer headers occurring in a packet. Individual extension headers may have a maximum length of 2048 octets and must fit into a single packet. Destination Options and Hop-by-Hop Options contain a list of options in type-length-value (TLV) format. Each option includes a length of the data field in octets: the minimum size of an option (non-pad type) is two octets, and the maximum size is 257 octets. The number of options in an extension header is only limited by the length of the extension header and the Path MTU from the source to the destination. Options may be skipped over by a receiver if they are unknown and the Option Type indicates to skip (first two high order bits are 00).
Per [
RFC 8200], except for Hop-by-Hop Options, extension headers are not examined or processed by intermediate nodes. However, in deployed networks, many intermediate nodes do examine extension headers for various purposes. For instance, a node may examine all extension headers to locate the transport header of a packet in order to implement transport-layer filtering or to track connections to implement a stateful firewall.
Destination hosts are expected to process all extension headers and options in Hop-by-Hop and Destination Options.
Due to the variable lengths, high maximum lengths, or potential for a denial-of-service attack of extension headers, many devices impose operational limits on extension headers in packets they process. [
RFC 7045] discusses the requirements of intermediate nodes that discard packets because of unrecognized extension headers. [
RFC 8504] discusses limits that may be applied to the number of options in Hop-by-Hop Options or Destination Options extension headers. Both intermediate nodes and end hosts may apply limits to extension header processing. When a limit is exceeded, the typical behavior is to silently discard the packet.
This specification defines six Parameter Problem codes that may be sent by a node that discards a packet due to the processing limits of extension headers being exceeded. The information in these ICMPv6 errors may be used for diagnostics to determine why packets are being dropped. Additionally, a source node that receives these ICMPv6 errors may be able to modify its use of extension headers in subsequent packets sent to the destination in order to avoid further occurrences of packets being discarded.
Some hardware devices implement a parsing buffer of a fixed size to process packets. The parsing buffer is expected to contain all the headers (often up to a transport-layer header for filtering) that a device needs to examine. If the aggregate length of headers in a packet exceeds the size of the parsing buffer, a device will either discard the packet or defer processing to a software slow path. In any case, no indication of a problem is sent back to the sender.
This document defines one code for ICMPv6 Destination Unreachable that is sent by a node that is unable to process the headers of a packet due to the aggregate size of the packet headers exceeding a processing limit. The information in this ICMPv6 error may be used for diagnostics to determine why packets are being dropped. Additionally, a source node that receives this ICMPv6 error may be able to modify the headers used in subsequent packets to try to avoid further occurrences of packets being discarded.
The ICMP errors defined in this specification may be applicable to scenarios in which a node is dropping packets outside the auspices of any standard specification. For instance, an intermediate node might send a "Headers too long" code in a case where it drops a packet because it is unable to parse deeply enough to extract the transport-layer information needed for packet filtering. Such behavior might be considered nonconformant (with respect to [
RFC 8200], for instance).
This specification does not advocate behaviors that might be considered nonconformant. However, packet discard does occur in real deployments, and the intent of this specification is to provide visibility as to why packets are being discarded. In the spirit that providing some reason is better than a silent drop, the sending of ICMP errors is
RECOMMENDED even in cases where a node might be discarding packets per a nonconformant behavior.
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 [
RFC 2119] [
RFC 8174] when, and only when, they appear in all capitals, as shown here.