rfc8883xml2.original.xml | rfc8883.xml | |||
---|---|---|---|---|
<?xml version="1.0" encoding="UTF-8"?> | <?xml version='1.0' encoding='utf-8'?> | |||
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [ | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
]> | ||||
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?> | ||||
<?rfc toc="yes" ?> | ||||
<?rfc symrefs="yes" ?> | ||||
<?rfc sortrefs="yes"?> | ||||
<?rfc iprnotified="no" ?> | ||||
<?rfc strict="yes" ?> | ||||
<rfc category="std" ipr="trust200902" docName="draft-ietf-6man-icmp-limits-08" s | ||||
ubmissionType="IETF" > | ||||
<front> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" | |||
<title abbrev="ICMPv6 limits">ICMPv6 errors for discarding packets due to proces | ipr="trust200902" number="8883" docName="draft-ietf-6man-icmp-limits-08" | |||
sing limits</title> | submissionType="IETF" obsoletes="" updates="" xml:lang="en" | |||
<author initials='T.' surname="Herbert" fullname='Tom Herbert'> | tocInclude="true" symRefs="true" sortRefs="true" version="3" | |||
<organization>Intel</organization> | consensus="true"> | |||
<address> | ||||
<postal> | <front> | |||
<street/> | <title abbrev="ICMPv6 Limits">ICMPv6 Errors for Discarding Packets Due to Pr | |||
<city>Santa Clara, CA</city> | ocessing Limits</title> | |||
<region/> | <seriesInfo name="RFC" value="8883"/> | |||
<code/> | <author initials="T." surname="Herbert" fullname="Tom Herbert"> | |||
<country>USA</country> | <organization>Intel</organization> | |||
</postal> | <address> | |||
<email>tom@quantonium.net</email> | <postal> | |||
</address> | <street/> | |||
<city>Santa Clara</city> | ||||
<region>CA</region> | ||||
<code/> | ||||
<country>United States of America</country> | ||||
</postal> | ||||
<email>tom@quantonium.net</email> | ||||
</address> | ||||
</author> | </author> | |||
<date/> | <date month="September" year="2020"/> | |||
<abstract> | <keyword>extension Headers</keyword> | |||
<t> | <keyword>destination Options</keyword> | |||
<keyword>Hop-by-Hop Options</keyword> | ||||
<abstract> | ||||
<t> | ||||
Network nodes may discard packets if they are unable to process | Network nodes may discard packets if they are unable to process | |||
protocol headers of packets due to processing constraints or limits. | protocol headers of packets due to processing constraints or limits. | |||
When such packets are dropped, the sender receives no indication so | When such packets are dropped, the sender receives no indication, so | |||
it cannot take action to address the cause of discarded packets. This | it cannot take action to address the cause of discarded packets. This | |||
specification defines several new ICMPv6 errors that can be sent by a | specification defines several new ICMPv6 errors that can be sent by a | |||
node that discards packets because it is unable to process the | node that discards packets because it is unable to process the | |||
protocol headers. A node that receives such an ICMPv6 error may use | protocol headers. A node that receives such an ICMPv6 error may use | |||
the information to diagnose packet loss and may modify what it sends | the information to diagnose packet loss and may modify what it sends | |||
in future packets to avoid subsequent packet discards. | in future packets to avoid subsequent packet discards. | |||
</t> | </t> | |||
</abstract> | </abstract> | |||
</front> | </front> | |||
<middle> | ||||
<middle> | <section numbered="true" toc="default"> | |||
<section title="Introduction"> | <name>Introduction</name> | |||
<t> | <t> | |||
This document specifies several new ICMPv6 errors that can be sent | 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 | when a node discards a packet due to it being unable to process the | |||
necessary protocol headers because of processing constraints or | necessary protocol headers because of processing constraints or | |||
limits. New ICMPv6 code points are defined to supplement those defined | limits. New ICMPv6 code points are defined to supplement those defined | |||
in <xref target="RFC4443" />. | in <xref target="RFC4443" format="default"/>. | |||
Six of the errors are specific to processing of extension headers; | Six of the errors are specific to the processing of extension headers; | |||
another error is used when the aggregate protocol headers in a packet | another error is used when the aggregate protocol headers in a packet | |||
exceed the processing limits of a node. | exceed the processing limits of a node. | |||
</t> | </t> | |||
<section title="Extension header limits"> | <section numbered="true" toc="default"> | |||
<t> | <name>Extension Header Limits</name> | |||
<t> | ||||
In IPv6, optional internet-layer information is carried in one or | In IPv6, optional internet-layer information is carried in one or | |||
more IPv6 Extension Headers <xref target="RFC8200" />. | more IPv6 extension headers <xref target="RFC8200" format="default"/>. | |||
Extension Headers are placed | Extension headers are placed | |||
between the IPv6 header and the Upper-Layer Header in a packet. The | between the IPv6 header and the upper-layer header in a packet. The | |||
term "Header Chain" refers collectively to the IPv6 header, Extension | term "header chain" refers collectively to the IPv6 header, extension | |||
Headers, and Upper-Layer Headers occurring in a packet. Individual | headers, and upper-layer headers occurring in a packet. Individual | |||
extension headers may have a maximum length of 2048 octets and must | extension headers may have a maximum length of 2048 octets and must | |||
fit into a single packet. Destination Options and Hop-by-Hop Options | fit into a single packet. Destination Options and Hop-by-Hop Options | |||
contain a list of options in Type-length-value (TLV) format. Each | contain a list of options in type-length-value (TLV) format. Each | |||
option includes a length of the data field in octets: the minimum | 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 | 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 | 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 | 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 | the source to the destination. Options may be skipped over by a | |||
receiver if they are unknown and the Option Type indicates to skip | receiver if they are unknown and the Option Type indicates to skip | |||
(first two high order bits are 00). | (first two high order bits are 00). | |||
</t><t> | </t> | |||
Per <xref target="RFC8200" />, except for Hop by Hop options, extension | <t> | |||
headers are not examined or processed by intermediate nodes. Many | Per <xref target="RFC8200" format="default"/>, except for Hop-by-Hop Options | |||
intermediate nodes, however, do examine extension headers for various | , 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 | purposes. For instance, a node may examine all extension headers to | |||
locate the transport header of a packet in order to implement transport | locate the transport header of a packet in order to implement transport-laye | |||
layer filtering or to track connections to implement a stateful firewall. | r filtering or to track connections to implement a stateful firewall. | |||
</t><t> | </t> | |||
<t> | ||||
Destination hosts are expected to process all extension headers and | Destination hosts are expected to process all extension headers and | |||
options in Hop-by-Hop and Destination Options. | options in Hop-by-Hop and Destination Options. | |||
</t><t> | </t> | |||
Due to the variable lengths, high maximum lengths, or potential for | <t> | |||
Denial of Service attack of extension headers, many devices impose | 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. | operational limits on extension headers in packets they process. | |||
<xref target="RFC7045" /> discusses the requirements of intermediate | <xref target="RFC7045" format="default"/> discusses the requirements of inte rmediate | |||
nodes that discard packets because of unrecognized extension headers. | nodes that discard packets because of unrecognized extension headers. | |||
<xref target="RFC8504" /> discusses limits that may be applied to the | <xref target="RFC8504" format="default"/> discusses limits that may be appli ed to the | |||
number of options in Hop-by-Hop Options or Destination Options extension | number of options in Hop-by-Hop Options or Destination Options extension | |||
headers. Both intermediate nodes and end hosts may apply limits to | headers. Both intermediate nodes and end hosts may apply limits to | |||
extension header processing. When a limit is exceeded, the typical | extension header processing. When a limit is exceeded, the typical | |||
behavior is to silently discard the packet. | behavior is to silently discard the packet. | |||
</t><t> | </t> | |||
<t> | ||||
This specification defines six Parameter Problem codes that may be sent | This specification defines six Parameter Problem codes that may be sent | |||
by a node that discards a packet due to processing limits of extension | 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 | headers being exceeded. The information in these ICMPv6 errors may be | |||
used for diagnostics to determine why packets are being dropped. | used for diagnostics to determine why packets are being dropped. | |||
Additionally, a source node that receives these ICMPv6 errors may be | Additionally, a source node that receives these ICMPv6 errors may be | |||
able to modify its use of extension headers in subsequent packets sent | able to modify its use of extension headers in subsequent packets sent | |||
to the destination in order to avoid further occurrences of packets being | to the destination in order to avoid further occurrences of packets being | |||
discarded. | discarded. | |||
</t> | </t> | |||
</section> | </section> | |||
<section title="Aggregate header limits"> | <section numbered="true" toc="default"> | |||
<t> | <name>Aggregate Header Limits</name> | |||
<t> | ||||
Some hardware devices implement a parsing buffer of a fixed size to | Some hardware devices implement a parsing buffer of a fixed size to | |||
process packets. The parsing buffer is expected to contain all the | process packets. The parsing buffer is expected to contain all the | |||
headers (often up to a transport layer header for filtering) that a | headers (often up to a transport-layer header for filtering) that a | |||
device needs to examine. If the aggregate length of headers in 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 | packet exceeds the size of the parsing buffer, a device will either | |||
discard the packet or will defer processing to a software slow path. In | 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. | any case, no indication of a problem is sent back to the sender. | |||
</t><t> | </t> | |||
<t> | ||||
This document defines one code for ICMPv6 Destination Unreachable | This document defines one code for ICMPv6 Destination Unreachable | |||
that is sent by a node that is unable to process the headers of a | 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 | packet due to the aggregate size of the packet headers exceeding a | |||
processing limit. The information in this ICMPv6 error may be used for | processing limit. The information in this ICMPv6 error may be used for | |||
diagnostics to determine why packets are being dropped. Additionally, a | diagnostics to determine why packets are being dropped. Additionally, a | |||
source node that receives this ICMPv6 error may be able to modify | source node that receives this ICMPv6 error may be able to modify | |||
the headers used in subsequent packets to try to avoid further | the headers used in subsequent packets to try to avoid further | |||
occurrences of packets being discarded. | occurrences of packets being discarded. | |||
</t> | </t> | |||
</section> | </section> | |||
<section title="Nonconformant packet discard"> | <section numbered="true" toc="default"> | |||
<t> | <name>Nonconformant Packet Discard</name> | |||
<t> | ||||
The ICMP errors defined in this specification may be applicable to | The ICMP errors defined in this specification may be applicable to | |||
scenarios for which a node is dropping packets outside the auspices | scenarios in which a node is dropping packets outside the auspices | |||
of any standard specification. For instance, an intermediate node | of any standard specification. For instance, an intermediate node | |||
might send a "Headers too long" code in the case that it drops a | might send a "Headers too long" code in a case where it drops a | |||
packet because it is unable to parse deep enough to extract transport | packet because it is unable to parse deeply enough to extract the transport- | |||
layer information needed for packet filtering. Such behavior might be | layer information needed for packet filtering. Such behavior might be | |||
considered nonconformant (with respect to | considered nonconformant (with respect to | |||
<xref target="RFC8200" /> for instance). | <xref target="RFC8200" format="default"/>, for instance). | |||
</t><t> | </t> | |||
<t> | ||||
This specification does not advocate behaviors that might be | This specification does not advocate behaviors that might be | |||
considered nonconformant. However, packet discard does occur in real | considered nonconformant. However, packet discard does occur in real | |||
deployments and the intent of this specification is provide | deployments, and the intent of this specification is to provide | |||
visibility as to why packets are being discarded. In the spirit that | visibility as to why packets are being discarded. In the spirit that | |||
providing some reason is better than silent drop, the sending of ICMP | providing some reason is better than a silent drop, the sending of ICMP | |||
errors is RECOMMENDED even in cases where a node | errors is <bcp14>RECOMMENDED</bcp14> even in cases where a node | |||
might be discarding packets per a nonconformant behavior. | might be discarding packets per a nonconformant behavior. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="sec-definitions" numbered="true" toc="default"> | ||||
<section title="Terminology" anchor="sec-definitions"> | <name>Terminology</name> | |||
<t> | <t> | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQU | |||
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and | IRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | |||
"OPTIONAL" in this document are to be interpreted as described | NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14> | |||
in <xref target="RFC2119"/>. | RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
</t> | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to | |||
</section> | be interpreted as | |||
</section> | described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> | |||
<section title="ICMPv6 errors for extension header limits"> | when, and only when, they appear in all capitals, as shown here. | |||
<t> | </t> | |||
</section> | ||||
</section> | ||||
<section numbered="true" toc="default"> | ||||
<name>ICMPv6 Errors for Extension Header Limits</name> | ||||
<t> | ||||
Six new codes are defined for the Parameter Problem type. | Six new codes are defined for the Parameter Problem type. | |||
</t> | </t> | |||
<section title="Format"> | <section numbered="true" toc="default"> | |||
<t> | <name>Format</name> | |||
The format of the ICMPv6 Parameter Problem message <xref target="RFC4443" /> | <t> | |||
The format of the ICMPv6 Parameter Problem message <xref target="RFC4443" fo | ||||
rmat="default"/> | ||||
for an extension header limit exceeded error is: | for an extension header limit exceeded error is: | |||
<figure> | </t> | |||
<artwork> | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
0 1 2 3 | 0 1 2 3 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Type | Code | Checksum | | | Type | Code | Checksum | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Pointer | | | Pointer | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| As much of invoking packet | | | | | |||
| As much of the invoking packet | | ||||
+ as possible without the ICMPv6 packet + | + as possible without the ICMPv6 packet + | |||
| exceeding the minimum IPv6 MTU [RFC8200] | | | exceeding the minimum IPv6 MTU [RFC8200] | | |||
</artwork> | ]]></artwork> | |||
</figure> | ||||
<list style="hanging"> | <dl newline="true" spacing="normal"> | |||
<t hangText="IPv6 Header Fields:"> | <dt>IPv6 Header Fields:</dt> | |||
<list style="hanging"> | ||||
<t hangText="Destination Address"> | <dd> | |||
<vspace /> | <dl newline="true" spacing="normal"> | |||
<dt>Destination Address:</dt> | ||||
<dd> | ||||
Copied from the Source Address field of the invoking packet. | Copied from the Source Address field of the invoking packet. | |||
</t> | </dd> | |||
</list> | </dl> | |||
</t> | </dd> | |||
<t hangText="ICMPv6 Fields:"> | ||||
<list style="hanging"> | <dt>ICMPv6 Fields:</dt> | |||
<t hangText="Type"> | ||||
<vspace /> | <dd> | |||
4 (Parameter Problem type) | <dl newline="true" spacing="normal"> | |||
<vspace /> | <dt>Type:</dt> | |||
</t> | <dd> | |||
<?rfc subcompact="yes"?> | <dl> | |||
<t hangText="Code (pertinent to this specification)"> | <dt>4</dt><dd>(Parameter Problem type)</dd> | |||
<list style="hanging" hangIndent="8"> | </dl> | |||
<t hangText="TBA1 -"> | </dd> | |||
Unrecognized Next Header type encountered by intermediate node | </dl> | |||
</t><t hangText="TBA2 -"> | <dl newline="true" spacing="normal"> | |||
Extension header too big | <dt>Code:</dt><dd>(pertinent to this specification)</dd> | |||
</t><t hangText="TBA3 -"> | </dl> | |||
Extension header chain too long | ||||
</t><t hangText="TBA4 -"> | <table align="center"> | |||
Too many extension headers | <tbody> | |||
</t><t hangText="TBA5 -"> | <tr> | |||
Too many options in extension header | <td align="left">5</td> | |||
</t><t hangText="TBA6 -"> | <td align="left">Unrecognized Next Header type encountered | |||
Option too big | by intermediate node</td> | |||
</t> | </tr> | |||
</list> | <tr> | |||
</t> | <td align="left">6</td> | |||
<?rfc subcompact="no"?> | <td align="left">Extension header too big</td> | |||
<t hangText="Pointer"> | </tr> | |||
<vspace /> | <tr> | |||
<td align="left">7</td> | ||||
<td align="left">Extension header chain too long</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">8</td> | ||||
<td align="left">Too many extension headers</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">9</td> | ||||
<td align="left">Too many options in extension header</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">10</td> | ||||
<td align="left">Option too big</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<dl newline="true" spacing="normal"> | ||||
<dt>Pointer:</dt> | ||||
<dd> | ||||
<t> | ||||
Identifies the octet offset within the invoking packet where | Identifies the octet offset within the invoking packet where | |||
the problem occurred. | the problem occurred. | |||
<vspace blankLines="1" /> | </t> | |||
The pointer will point beyond the end of the Invoking Packet if | <t> | |||
The pointer will point beyond the end of the IPv6 packet if | ||||
the field exceeding the limit is beyond what can fit in the | the field exceeding the limit is beyond what can fit in the | |||
maximum size of an ICMPv6 error message extension. If the | maximum size of an ICMPv6 error message. If the | |||
pointer is used as an offset to read the data in the invoking | pointer is used as an offset to read the data in the invoking | |||
packet then a node MUST first validate that the pointer value | packet, then a node <bcp14>MUST</bcp14> first validate that the poin | |||
is less than the length of the Invoking Packet data. | ter value | |||
</t> | is less than the length of the invoking packet data. | |||
</list> | </t> | |||
</t> | </dd> | |||
</list> | </dl> | |||
</t> | </dd> | |||
</section> | </dl> | |||
<section title="Unrecognized Next Header type encountered by intermediate node ( | ||||
code TBA1)"> | </section> | |||
<t> | <section numbered="true" toc="default"> | |||
This code SHOULD be sent by an intermediate node that discards a | <name>Unrecognized Next Header Type Encountered by Intermediate Node (Co | |||
de 5)</name> | ||||
<t> | ||||
This code <bcp14>SHOULD</bcp14> be sent by an intermediate node that discard | ||||
s a | ||||
packet because it encounters a Next Header type that is unknown in | packet because it encounters a Next Header type that is unknown in | |||
its examination. The ICMPv6 Pointer field is set to the offset of the | its examination. The ICMPv6 Pointer field is set to the offset of the | |||
unrecognized next header value within the original packet. | unrecognized Next Header value within the original packet. | |||
</t><t> | </t> | |||
Note that this code is sent by intermediate nodes, and | <t> | |||
SHOULD NOT be sent by a final destination. If a final destination | Note that this code is sent by intermediate nodes and | |||
node observes an unrecognized header then it SHOULD send an ICMP Parameter | <bcp14>SHOULD NOT</bcp14> be sent by a final destination. If a final destina | |||
tion | ||||
node observes an unrecognized header, then it <bcp14>SHOULD</bcp14> send an | ||||
ICMP Parameter | ||||
Problem message with an ICMP Code value of 1 ("unrecognized Next Header | Problem message with an ICMP Code value of 1 ("unrecognized Next Header | |||
type encountered") as specified in <xref target="RFC8200" />. | type encountered") as specified in <xref target="RFC8200" format="default"/> | |||
</t> | . | |||
</section> | </t> | |||
<section title="Extension header too big (code TBA2)"> | </section> | |||
<t> | <section numbered="true" toc="default"> | |||
An ICMPv6 Parameter Problem with code for "extension header too big" | <name>Extension Header Too Big (Code 6)</name> | |||
SHOULD be sent when a node discards a packet because the size of an | <t> | |||
An ICMPv6 Parameter Problem with code for "Extension header too big" | ||||
<bcp14>SHOULD</bcp14> be sent when a node discards a packet because the size | ||||
of an | ||||
extension header exceeds its processing limit. The ICMPv6 Pointer | extension header exceeds its processing limit. The ICMPv6 Pointer | |||
field is set to the offset of the first octet in the extension header | field is set to the offset of the first octet in the extension header | |||
that exceeds the limit. | that exceeds the limit. | |||
</t> | </t> | |||
</section> | </section> | |||
<section title="Extension header chain too long (code TBA3)"> | <section numbered="true" toc="default"> | |||
<t> | <name>Extension Header Chain Too Long (Code 7)</name> | |||
An ICMPv6 Parameter Problem with code for "extension header chain too | <t> | |||
long" SHOULD be sent when a node discards a packet with an extension | An ICMPv6 Parameter Problem with code for "Extension header chain too | |||
long" <bcp14>SHOULD</bcp14> be sent when a node discards a packet with an ex | ||||
tension | ||||
header chain that exceeds a limit on the total size in octets of the | header chain that exceeds a limit on the total size in octets of the | |||
header chain. The ICMPv6 Pointer is set to first octet beyond the | header chain. The ICMPv6 Pointer is set to the first octet beyond the | |||
limit. | limit. | |||
</t> | </t> | |||
</section> | </section> | |||
<section title="Too many extension headers (code TBA4)"> | <section numbered="true" toc="default"> | |||
<t> | <name>Too Many Extension Headers (Code 8)</name> | |||
An ICMPv6 Parameter Problem with code for "too many extension headers" | <t> | |||
SHOULD be sent when a node discards a packet with an extension | An ICMPv6 Parameter Problem with code for "Too many extension headers" | |||
<bcp14>SHOULD</bcp14> be sent when a node discards a packet with an extensio | ||||
n | ||||
header chain that exceeds a limit on the number of extension headers | header chain that exceeds a limit on the number of extension headers | |||
in the chain. The ICMPv6 Pointer is set to the offset of first octet of | in the chain. The ICMPv6 Pointer is set to the offset of the first octet of | |||
the first extension header that is beyond the limit. | the first extension header that is beyond the limit. | |||
</t> | </t> | |||
</section> | </section> | |||
<section title="Too many options in extension header (code TBA5)"> | <section numbered="true" toc="default"> | |||
<t> | <name>Too Many Options in Extension Header (Code 9)</name> | |||
An ICMPv6 Parameter Problem with code for "too many options in | <t> | |||
extension header" SHOULD be sent when a node discards a packet with | An ICMPv6 Parameter Problem with code for "Too many options in | |||
extension header" <bcp14>SHOULD</bcp14> be sent when a node discards a packe | ||||
t with | ||||
an extension header that has a number of options that exceeds the | an extension header that has a number of options that exceeds the | |||
processing limits of the node. This code is applicable for | processing limits of the node. This code is applicable for | |||
Destination options and Hop-by-Hop options. The ICMPv6 Pointer field | Destination Options and Hop-by-Hop Options. The ICMPv6 Pointer field | |||
is set to the first octet of the first option that exceeds the limit. | is set to the first octet of the first option that exceeds the limit. | |||
</t> | </t> | |||
</section> | </section> | |||
<section title="Option too big (code TBA6)"> | <section numbered="true" toc="default"> | |||
<t> | <name>Option Too Big (Code 10)</name> | |||
An ICMPv6 Parameter Problem with code for "option too big" is sent in | <t> | |||
An ICMPv6 Parameter Problem with code for "Option too big" is sent in | ||||
two different cases: when the length of an individual Hop-by-Hop or | two different cases: when the length of an individual Hop-by-Hop or | |||
Destination option exceeds a limit, or when the length or number of | Destination Option exceeds a limit, or when the length or number of | |||
consecutive Hop-by-Hop or Destination padding options exceeds a | consecutive Hop-by-Hop or Destination padding options exceeds a | |||
limit. In the case that the length of an option exceeds a processing | limit. In a case where the length of an option exceeds a processing | |||
limit, the ICMPv6 Pointer field is set to the offset of the first | limit, the ICMPv6 Pointer field is set to the offset of the first | |||
octet of the option that exceeds the limit. In the cases that the | octet of the option that exceeds the limit. In cases where the | |||
length or number of padding options exceeds a limit, the ICMPv6 | length or number of padding options exceeds a limit, the ICMPv6 | |||
Pointer field is set to the offset of first octet of the padding | Pointer field is set to the offset of the first octet of the padding | |||
option that exceeds the limit. | option that exceeds the limit. | |||
<list style="hanging"> | </t> | |||
<t hangText="Possible limits related to padding include:"> | <t>Possible limits related to padding include:</t> | |||
<list style="hanging"> | <ul spacing="normal" empty="false"> | |||
<t hangText="*"> | <li> | |||
The number of consecutive PAD1 options in destination | The number of consecutive PAD1 options in Destination | |||
options or hop-by-hop options is limited to seven octets | Options or Hop-by-Hop Options is limited to seven octets | |||
<xref target="RFC8504" />. | <xref target="RFC8504" format="default"/>. | |||
</t><t hangText="*"> | </li> | |||
The length of PADN options in destination options or | <li> | |||
hop-by-hop options is limited seven octets | The length of PADN options in Destination Options or | |||
<xref target="RFC8504" />. | Hop-by-Hop Options is limited seven octets | |||
</t><t hangText="*"> | <xref target="RFC8504" format="default"/>. | |||
</li> | ||||
<li> | ||||
The aggregate length of a set of consecutive PAD1 or PADN | The aggregate length of a set of consecutive PAD1 or PADN | |||
options in destination options or hop-by-hop options is | options in Destination Options or Hop-by-Hop Options is | |||
limited to seven octets. | limited to seven octets. | |||
</t> | </li> | |||
</list> | </ul> | |||
</t> | </section> | |||
</list> | </section> | |||
</t> | <section numbered="true" toc="default"> | |||
</section> | <name>ICMPv6 Error for Aggregate Header Limits</name> | |||
</section> | <t> | |||
<section title="ICMPv6 error for aggregate header limits"> | One code is defined for the Destination Unreachable type for aggregate | |||
<t> | ||||
One code is defined for Destination Unreachable type for aggregate | ||||
header limits. | header limits. | |||
</t><t> | </t> | |||
<t> | ||||
This ICMP error may be applied to other headers in a packet | This ICMP error may be applied to other headers in a packet | |||
than just the IPv6 header or IPv6 extension headers. Therefore, | than just the IPv6 header or IPv6 extension headers. Therefore, | |||
a Destination Unreachable type with a multi-part ICMPv6 message | a Destination Unreachable type with a multi-part ICMPv6 message | |||
format is used in lieu of the Parameter Problem type which only | format is used in lieu of the Parameter Problem type, which only | |||
indicates errors concerning IPv6 headers. | indicates errors concerning IPv6 headers. | |||
</t> | </t> | |||
<section title="Format"> | <section numbered="true" toc="default"> | |||
<t> | <name>Format</name> | |||
<t> | ||||
The error for aggregate header limits employs a multi-part ICMPv6 | The error for aggregate header limits employs a multi-part ICMPv6 | |||
message format as defined in <xref target="RFC4884" />. | message format as defined in <xref target="RFC4884" format="default"/>. | |||
The extension object class "Extended Information" is defined to | The extension object class "Extended Information" is defined to | |||
contain objects for ancillary information pertaining to an ICMP | contain objects for ancillary information pertaining to an ICMP | |||
Destination Unreachable error. Within this object class, the sub-type | Destination Unreachable error. Within this object class, the sub-type | |||
"Pointer" is defined which contains Pointer field with similar semantics | "Pointer" is defined, which contains a Pointer field with similar | |||
to the Pointer field in ICMP Parameter Problem errors. | semantics to the Pointer field in ICMP Parameter Problem errors. | |||
</t><t> | </t> | |||
<t> | ||||
The format of the ICMPv6 message for an aggregate header limit | The format of the ICMPv6 message for an aggregate header limit | |||
exceeded is: | exceeded is: | |||
<figure> | </t> | |||
<artwork> | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
0 1 2 3 | 0 1 2 3 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\ | |||
| Type | Code | Checksum | | | | Type | Code | Checksum | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ I | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ I | |||
| Length | Unused | C | | Length | Unused | C | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ M | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ M | |||
| Invoking Packet | P | | | P | |||
~ As much of invoking packet as possible without the ~ | | ~ As much of the invoking packet ~ | |||
| ICMPv6 packet exceeding the minimum IPv6 MTU [RFC8200] |/ | | as possible without the ICMPv6 packet | | |||
| exceeding the minimum IPv6 MTU [RFC8200] |/ | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+/ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+/ | |||
|Version| Reserved | Checksum |\ | |Version| Reserved | Checksum |\ | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ E | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ E | |||
| Length | Class-Num | C-Type | X | | Length | Class-Num | C-Type | X | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ T | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ T | |||
| Pointer | | | | Pointer | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+/ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+/ | |||
</artwork> | ]]></artwork> | |||
</figure> | <dl newline="true" spacing="normal"> | |||
<dt>IPv6 Header Fields:</dt> | ||||
<list style="hanging"> | <dd> | |||
<t hangText="IPv6 Header Fields:"> | <dl newline="true" spacing="normal"> | |||
<list style="hanging"> | <dt>Destination Address:</dt> | |||
<t hangText="Destination Address"> | <dd> | |||
<vspace /> | ||||
Copied from the Source Address field of the invoking packet. | Copied from the Source Address field of the invoking packet. | |||
</t> | </dd> | |||
</list> | </dl> | |||
</t> | </dd> | |||
<t hangText="ICMPv6 Fields:"> | <dt>ICMPv6 Fields:</dt> | |||
<list style="hanging"> | <dd> | |||
<t hangText="Type"> | <dl newline="true" spacing="normal"> | |||
<vspace /> | <dt>Type:</dt> | |||
1 - Destination Unreachable type | <dd> | |||
</t> | <dl><dt>1 -</dt><dd>Destination Unreachable</dd> | |||
<t hangText="Code (pertinent to this specification)"> | </dl> | |||
<vspace /> | </dd> | |||
TBA7 - Headers too long | <dt>Code: (pertinent to this specification)</dt> | |||
</t> | <dd> | |||
<t hangText="Length"> | <dl> | |||
<vspace /> | <dt>8 -</dt><dd>Headers too long</dd></dl></dd> | |||
Length of the padded Invoking Packet measured in 64-bit words. | <dt>Length:</dt> | |||
<dd>Length of the padded invoking packet data measured in 64-bit w | ||||
ords. | ||||
The ICMP extension structure immediately follows the padded | The ICMP extension structure immediately follows the padded | |||
Invoking Packet | invoking packet data.</dd> | |||
</t> | <dt>Invoking Packet:</dt> | |||
<t hangText="Invoking Packet"> | <dd>Contains as much of the invoking packet as possible without th | |||
<vspace /> | e | |||
Contains as much of invoking packet as possible without the | ICMPv6 packet exceeding the minimum IPv6 MTU. The invoking | |||
ICMPv6 packet exceeding the minimum IPv6 MTU. The Invoking | packet data <bcp14>MUST</bcp14> be zero padded to the nearest 64-bit b | |||
Packet MUST be zero padded to the nearest 64-bit boundary | oundary | |||
<xref target="RFC4884" />. | <xref target="RFC4884" format="default"/>. | |||
If the original invoking packet did not contain 128 | If the original invoking packet did not contain 128 | |||
octets, the Invoking Packet MUST be zero padded to 128 octets. | octets, the invoking packet data <bcp14>MUST</bcp14> be zero padded to | |||
</t> | 128 octets.</dd> | |||
</list> | </dl> | |||
</t> | </dd> | |||
<t hangText="ICMP Extension Fields:"> | <dt>ICMP Extension Fields:</dt> | |||
<list style="hanging"> | <dd> | |||
<t hangText="Version"> | <dl newline="true" spacing="normal"> | |||
<vspace /> | <dt>Version:</dt> | |||
2 - per <xref target="RFC4884" /> | <dd> | |||
</t> | <dl> | |||
<t hangText="Reserved"> | <dt>2 -</dt><dd>per <xref target="RFC4884" | |||
<vspace /> | format="default"/></dd> | |||
0</t> | </dl></dd> | |||
<t hangText="Checksum"> | <dt>Reserved:</dt> | |||
<vspace /> | <dd>0</dd> | |||
The one's complement checksum of the ICMP extension | <dt>Checksum:</dt> | |||
<xref target="RFC4884" /> | <dd>The one's complement checksum of the ICMP extension | |||
</t><t hangText="Length"> | <xref target="RFC4884" format="default"/></dd> | |||
<vspace /> | <dt>Length:</dt> | |||
8 - length of the object header and Pointer field | <dd> | |||
</t><t hangText="Class-Num"> | <dl> | |||
<vspace /> | <dt>8 -</dt><dd>length of the object header and Pointer | |||
TBA8 - Extended Information class | field</dd> | |||
</t><t hangText="C-Type"> | </dl></dd> | |||
<vspace /> | <dt>Class-Num:</dt> | |||
TBA9 - Pointer sub-type | <dd> | |||
</t><t hangText="Pointer"> | <dl> | |||
<vspace /> | <dt>4 -</dt><dd>Extended Information</dd> | |||
Identifies the octet offset within the invoking packet | </dl></dd> | |||
where a limit was exceeded. | <dt>C-Type:</dt> | |||
<vspace blankLines="1" /> | <dd> | |||
The pointer will point beyond the end of the Invoking Packet if | <dl> | |||
<dt>1 -</dt><dd>Pointer</dd> | ||||
</dl></dd> | ||||
<dt>Pointer:</dt> | ||||
<dd><t>Identifies the octet offset within the invoking packet | ||||
where a limit was exceeded.</t> | ||||
<t>The pointer will point beyond the end of the invoking packet data i | ||||
f | ||||
the field exceeding the limit is beyond what can fit in the | the field exceeding the limit is beyond what can fit in the | |||
maximum size of an ICMPv6 error message with the ICMP | maximum size of an ICMPv6 error message with the ICMP | |||
extension. If the pointer is used as an offset to read the data | extension. If the pointer is used as an offset to read the data | |||
in the invoking packet then a node MUST first validate | in the invoking packet, then a node <bcp14>MUST</bcp14> first validate | |||
that the pointer value is less than the length of the Invoking | that the pointer value is less than the length of the invoking | |||
Packet data. | packet data.</t> | |||
</t> | </dd> | |||
</list> | </dl> | |||
</t> | </dd> | |||
</list> | </dl> | |||
</t> | </section> | |||
</section> | <section numbered="true" toc="default"> | |||
<section title="Usage"> | <name>Usage</name> | |||
<t> | <t> | |||
An ICMPv6 Destination Unreachable error with code for "headers | An ICMPv6 Destination Unreachable error with code for "Headers | |||
too long" SHOULD be sent when a node discards a packet because | too long" <bcp14>SHOULD</bcp14> be sent when a node discards a packet becaus | |||
the aggregate length of headers in the packet exceeds the | e | |||
the aggregate length of the headers in the packet exceeds the | ||||
processing limits of the node. The Pointer in the extended | processing limits of the node. The Pointer in the extended | |||
ICMPv6 structure is set to the offset of the first octet that | ICMPv6 structure is set to the offset of the first octet that | |||
exceeds the limit. | exceeds the limit. | |||
</t><t> | </t> | |||
<t> | ||||
This error is sent in response to a node dropping a packet | This error is sent in response to a node dropping a packet | |||
because the aggregate header chain exceeds the processing | because the aggregate header chain exceeds the processing | |||
limits of a node. The aggregate header chain may be composed of | limits of a node. The aggregate header chain may be composed of | |||
protocol headers other than an IPv6 header and IPv6 extension | protocol headers other than an IPv6 header and IPv6 extension | |||
headers. For instance, in the case of a node parsing a UDP | headers. For instance, in the case of a node parsing a UDP | |||
encapsulation protocol, the encapsulating UDP header would be | encapsulation protocol, the encapsulating UDP header would be | |||
considered to be in the aggregate header chain. | considered to be in the aggregate header chain. | |||
</t><t> | </t> | |||
As noted in section 4.1, the ICMPv6 Destination Unreachable | <t> | |||
error with code for "headers too long" has the lowest | As noted in <xref target="priority"/>, the ICMPv6 Destination Unreachable | |||
error with code for "Headers too long" has the lowest | ||||
precedence of the ICMP errors discussed in this specification. | precedence of the ICMP errors discussed in this specification. | |||
If a packet contains an error corresponding to a Parameter | If a packet contains an error corresponding to a Parameter | |||
Problem code then a node SHOULD send the Parameter Problem | Problem code, then a node <bcp14>SHOULD</bcp14> send the Parameter Problem | |||
error instead of sending the ICMPv6 Destination Unreachable | error instead of sending the ICMPv6 Destination Unreachable | |||
error with code for "headers too long". | error with code for "Headers too long". | |||
</t> | </t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section title="Operation"> | <section numbered="true" toc="default"> | |||
<t> | <name>Operation</name> | |||
<t> | ||||
Nodes that send or receive ICMPv6 errors due to header | Nodes that send or receive ICMPv6 errors due to header | |||
processing limits MUST comply with ICMPv6 processing as | processing limits <bcp14>MUST</bcp14> comply with ICMPv6 processing as | |||
specified in <xref target="RFC4443" />. | specified in <xref target="RFC4443" format="default"/>. | |||
</t> | </t> | |||
<section title="Priority of reporting"> | <section anchor="priority" numbered="true" toc="default"> | |||
<t> | <name>Priority of Reporting</name> | |||
<t> | ||||
More than one ICMPv6 error may be applicable to report for a | More than one ICMPv6 error may be applicable to report for a | |||
packet. For instance, the number of extension headers in a | packet. For instance, the number of extension headers in a | |||
packet might exceed a limit and the aggregate length of | packet might exceed a limit, and the aggregate length of | |||
protocol headers might also exceed a limit. Only one ICMPv6 | protocol headers might also exceed a limit. Only one ICMPv6 | |||
error SHOULD be sent for a packet, so a priority is defined to | error <bcp14>SHOULD</bcp14> be sent for a packet, so a priority is defined t o | |||
determine which error to report. | determine which error to report. | |||
<list style="hanging"> | </t> | |||
<t hangText="The RECOMMENDED reporting priority of ICMPv6 errors for proce | <t>The <bcp14>RECOMMENDED</bcp14> reporting priority of ICMPv6 errors for | |||
ssing limits is from highest to lowest priority:"> | processing limits is listed from highest to lowest priority:</t> | |||
<list style="hanging"> | <ol spacing="normal"> | |||
<t hangText="1)"> | <li> | |||
Existing ICMP errors defined in <xref target="RFC4443" /> | Existing ICMP errors defined in <xref target="RFC4443" format="defau | |||
</t><t hangText="2)"> | lt"/>. | |||
</li> | ||||
<li> | ||||
"Unrecognized Next Header type encountered by intermediate node" | "Unrecognized Next Header type encountered by intermediate node" | |||
</t><t hangText="3)"> | </li> | |||
<li> | ||||
"Extension header too big" | "Extension header too big" | |||
</t><t hangText="4)"> | </li> | |||
<li> | ||||
"Option too big" for length or number of consecutive padding | "Option too big" for length or number of consecutive padding | |||
options exceeding a limit | options exceeding a limit. | |||
</t><t hangText="5)"> | </li> | |||
"Option too big" for the length of an option exceeding a limit | <li> | |||
</t><t hangText="6)"> | "Option too big" for the length of an option exceeding a limit. | |||
</li> | ||||
<li> | ||||
"Too many options in an extension header" | "Too many options in an extension header" | |||
</t><t hangText="7)"> | </li> | |||
<li> | ||||
"Extension header chain too long" | "Extension header chain too long" | |||
headers exceeding a limit | headers exceeding a limit. | |||
</t><t hangText="8)"> | </li> | |||
<li> | ||||
"Too many extension headers" | "Too many extension headers" | |||
</t><t hangText="9)"> | </li> | |||
<li> | ||||
"Headers too long" | "Headers too long" | |||
</t> | </li> | |||
</list> | </ol> | |||
</t> | </section> | |||
</list> | <section numbered="true" toc="default"> | |||
</t> | <name>Host Response</name> | |||
</section> | <t> | |||
<section title="Host response"> | ||||
<t> | ||||
When a source host receives an ICMPv6 error for a processing limit | When a source host receives an ICMPv6 error for a processing limit | |||
being exceeded, it SHOULD verify the ICMPv6 error is valid and take | being exceeded, it <bcp14>SHOULD</bcp14> verify the ICMPv6 error is valid an d take | |||
appropriate action as suggested below. | appropriate action as suggested below. | |||
</t><t> | </t> | |||
<t> | ||||
The general validations for ICMP as described in | The general validations for ICMP as described in | |||
<xref target="RFC4443" /> are applicable. The packet in the ICMP data | <xref target="RFC4443" format="default"/> are applicable. The packet in the | |||
SHOULD be validated to match the upper layer process or connection that | ICMP data | |||
<bcp14>SHOULD</bcp14> be validated to match the upper-layer process or conne | ||||
ction that | ||||
generated the original packet. Other validation checks that are specific | generated the original packet. Other validation checks that are specific | |||
to the upper layers may be performed and are out of the scope of this | to the upper layers may be performed and are out of the scope of this | |||
specification. | specification. | |||
</t><t> | </t> | |||
The ICMPv6 error SHOULD be logged with sufficient detail for | <t> | |||
The ICMPv6 error <bcp14>SHOULD</bcp14> be logged with sufficient detail for | ||||
debugging packet loss. The details of the error, including the | debugging packet loss. The details of the error, including the | |||
addresses and the offending extension header or data, should be | addresses and the offending extension header or data, should be | |||
retained. This, for instance, would be useful for debugging when a | retained. This, for instance, would be useful for debugging when a | |||
node is mis-configured and unexpectedly discarding packets, or when a | node is misconfigured and unexpectedly discarding packets or when a | |||
new extension header is being deployed. | new extension header is being deployed. | |||
</t><t> | </t> | |||
A host MAY modify its usage of protocol headers in subsequent packets | <t> | |||
A host <bcp14>MAY</bcp14> modify its usage of protocol headers in subsequent | ||||
packets | ||||
to avoid repeated occurrences of the same error. | to avoid repeated occurrences of the same error. | |||
<list style="hanging"> | </t> | |||
<t hangText="For ICMPv6 errors caused by extension header limits being exc | <t>For ICMPv6 errors caused by extension header limits being exceeded: | |||
eeded:"> | </t> | |||
<list style="hanging"> | <ul empty="false" spacing="normal"> | |||
<t hangText="*"> | <li> | |||
An error SHOULD be reported to an application if the application | An error <bcp14>SHOULD</bcp14> be reported to an application if | |||
enabled extension headers for its traffic. In response, the | the application enabled extension headers for its traffic. In | |||
application may terminate communications if extension headers | response, the application may terminate communications if extension h | |||
eaders | ||||
are required, stop using extension headers in packets to the | are required, stop using extension headers in packets to the | |||
destination indicated by the ICMPv6 error, or attempt to modify | destination indicated by the ICMPv6 error, or attempt to modify | |||
its use of extension headers or headers to avoid further packet | its use of headers or extension headers to avoid further packet | |||
discards. | discards. | |||
</t> | </li> | |||
<t hangText="*"> | <li> | |||
A host system SHOULD take appropriate action if it is creating | A host system <bcp14>SHOULD</bcp14> take appropriate action if it is | |||
creating | ||||
packets with extension headers on behalf of the application. If | packets with extension headers on behalf of the application. If | |||
the offending extension header is not required for | the offending extension header is not required for | |||
communication, the host may either stop sending it or otherwise | communication, the host may either stop sending it or otherwise | |||
modify its use in subsequent packets sent to the destination | modify its use in subsequent packets sent to the destination | |||
indicated in the ICMPv6 error. | indicated in the ICMPv6 error. | |||
</t> | </li> | |||
</list> | </ul> | |||
</t> | </section> | |||
</list> | </section> | |||
</t> | <section numbered="true" toc="default"> | |||
</section> | <name>Applicability and Use Cases</name> | |||
</section> | <section numbered="true" toc="default"> | |||
<section title="Applicability and use cases"> | <name>Reliability of ICMP</name> | |||
<t> | ||||
<section title="Reliability of ICMP"> | ICMP is fundamentally an unreliable protocol and, in real deployment, | |||
<t> | ||||
ICMP is fundamentally an unreliable protocol and in real deployment | ||||
it may consistently fail over some paths. As with any other use of | it may consistently fail over some paths. As with any other use of | |||
ICMP, it is assumed that the errors defined in this document are only | ICMP, it is assumed that the errors defined in this document are only | |||
best effort to be delivered. No protocol should be implemented that | the best effort to be delivered. No protocol should be implemented that | |||
relies on reliable delivery of ICMP messages. If necessary, | relies on reliable delivery of ICMP messages. If necessary, | |||
alternative or additional mechanisms may used to augment the | alternative or additional mechanisms may be employed to augment the | |||
processes used to deduce the reason that packets are being | processes used to deduce the reason that packets are being | |||
discarded. For instance, ICMP error messages may be correlated with | discarded. For instance, ICMP error messages may be correlated with | |||
information attained through Packetization Layer Path MTU Discovery | information attained through Packetization Layer Path MTU Discovery | |||
(PLMTUD) <xref target="RFC4821" /> or Happy Eyeballs for IPv6 | (PLPMTUD) <xref target="RFC4821" format="default"/> or Happy Eyeballs for IP | |||
<xref target="RFC8305" />. Details of the | v6 | |||
<xref target="RFC8305" format="default"/>. Details of the | ||||
interaction with alternative mechanisms are out of scope of this | interaction with alternative mechanisms are out of scope of this | |||
specification. | specification. | |||
</t> | </t> | |||
</section> | </section> | |||
<section title="Processing limits"> | <section numbered="true" toc="default"> | |||
<t> | <name>Processing Limits</name> | |||
<t> | ||||
This section discusses the trends and motivations of processing | This section discusses the trends and motivations of processing | |||
limits that warrant ICMP errors. | limits that warrant ICMP errors. | |||
</t> | </t> | |||
<section title="Long headers and header chains"> | <section numbered="true" toc="default"> | |||
<t> | <name>Long Headers and Header Chains</name> | |||
<list style="hanging"> | <t>The trend towards longer and more complex headers and header chai | |||
<t hangText="The trend towards longer and more complex headers and header | ns needing to be processed by end nodes, as well as intermediate nodes, is drive | |||
chains needing to be processed by end nodes, as well as intermediate nodes, | n by:</t> | |||
is driven by:"> | <ul empty="false" spacing="normal"> | |||
<list style="hanging"> | <li> | |||
<t hangText="*"> | ||||
Increasing prevalence of deep packet inspection in middleboxes. | Increasing prevalence of deep packet inspection in middleboxes. | |||
In particular, many intermediate nodes now parse network layer | In particular, many intermediate nodes now parse network-layer | |||
encapsulation protocols or transport layer protocols. | encapsulation protocols or transport-layer protocols. | |||
</t><t hangText="*"> | </li> | |||
<li> | ||||
Deployment of routing headers. For instance, | Deployment of routing headers. For instance, | |||
<xref target="I-D.ietf-6man-segment-routing-header" /> defines an | <xref target="RFC8754" format="default"/> defines an | |||
extension header format that includes a list of IPv6 addresses | extension header format that includes a list of IPv6 addresses | |||
which may consume a considerable number of bytes. | which may consume a considerable number of bytes. | |||
</t><t hangText="*"> | </li> | |||
Development of In-situ OAM headers that allow a rich set of | <li> | |||
Development of in situ OAM headers that allow a rich set of | ||||
measurements to be gathered in the data path at the cost of | measurements to be gathered in the data path at the cost of | |||
additional header overhead which may be significant | additional header overhead, which may be significant <xref target="I | |||
<xref target="I-D.ioametal-ippm-6man-ioam-ipv6-options" />. | -D.ietf-ippm-ioam-ipv6-options" format="default"/>. | |||
</t><t hangText="*"> | </li> | |||
Other emerging use cases of Hop-by-Hop and Destination options. | <li> | |||
</t> | Other emerging use cases of Hop-by-Hop and Destination Options. | |||
</list> | </li> | |||
</t> | </ul> | |||
</list> | </section> | |||
</t> | <section numbered="true" toc="default"> | |||
</section> | <name>At End Hosts</name> | |||
<section title="At end hosts"> | <t> | |||
<t> | ||||
End hosts may implement limits on processing extension headers as | End hosts may implement limits on processing extension headers as | |||
described in <xref target="RFC8504" />. Host implementations are usually | described in <xref target="RFC8504" format="default"/>. Host implementations are usually | |||
software stacks that typically don't have inherent processing limitations. | software stacks that typically don't have inherent processing limitations. | |||
Limits imposed by a software stack are more likely to be for denial | Limits imposed by a software stack are more likely to be for denial-of-servi | |||
of service mitigation or performance. | ce mitigation or performance. | |||
</t> | </t> | |||
</section> | </section> | |||
<section title="At intermediate nodes"> | <section numbered="true" toc="default"> | |||
<t> | <name>At Intermediate Nodes</name> | |||
<t> | ||||
Hardware devices that process packet headers may have limits as to | Hardware devices that process packet headers may have limits as to | |||
how many headers or bytes of headers they can process. For instance, | how many headers or bytes of headers they can process. For instance, | |||
a middlebox hardware implementation might have a parsing buffer that | a middlebox hardware implementation might have a parsing buffer that | |||
contains some number of bytes of packet headers to process. Parsing | contains some number of bytes of packet headers to process. Parsing | |||
buffers typically have a fixed size such as sixty-four, 128, or 256 | buffers typically have a fixed size such as 64, 128, or 256 | |||
bytes. In addition, hardware implementations (and some software | bytes. In addition, hardware implementations (and some software | |||
implementations) often don't have loop constructs. Processing of a | implementations) often don't have loop constructs. Processing of a | |||
TLV list might be implemented as an unrolled loop so that the number | TLV list might be implemented as an unrolled loop so that the number | |||
of TLVs that can be processed is limited. | of TLVs that can be processed is limited. | |||
</t> | </t> | |||
</section> | </section> | |||
</section> | </section> | |||
</section> | </section> | |||
<section title="Security Considerations"> | <section numbered="true" toc="default"> | |||
<t> | <name>Security Considerations</name> | |||
<t> | ||||
The security considerations for ICMPv6 described in | The security considerations for ICMPv6 described in | |||
<xref target="RFC4443" /> are applicable. The ICMP errors described | <xref target="RFC4443" format="default"/> are applicable. The ICMP errors de | |||
in this document MAY be filtered by firewalls in accordance with | scribed | |||
<xref target="RFC4890" />. | in this document <bcp14>MAY</bcp14> be filtered by firewalls in accordance w | |||
</t><t> | ith | |||
<xref target="RFC4890" format="default"/>. | ||||
</t> | ||||
<t> | ||||
In some circumstances, the sending of ICMP errors might conceptually | In some circumstances, the sending of ICMP errors might conceptually | |||
be exploited a means to covertly deduce processing capabilities of | be exploited as a means to covertly deduce the processing capabilities of | |||
nodes. Accordingly, an implementation SHOULD allow configurable policy to | nodes. Accordingly, an implementation <bcp14>SHOULD</bcp14> allow a configur | |||
able policy to | ||||
withhold sending of the ICMP errors described in this specification in | withhold sending of the ICMP errors described in this specification in | |||
environments where security of ICMP errors is a concern. | environments where the security of ICMP errors is a concern. | |||
</t> | ||||
</section> | ||||
<section title="IANA Considerations"> | ||||
<section title="Parameter Problem codes"> | ||||
<t> | ||||
<list style="hanging"> | ||||
<t hangText="IANA is requested to assign the following codes for ICMPv6 ty | ||||
pe 4 "Parameter Problem" [IANA-PARAMPROB]:"> | ||||
<list style="hanging"> | ||||
<t hangText="*">Unrecognized Next Header type encountered by intermedi | ||||
ate node (value TBA1)</t> | ||||
<t hangText="*">Extension header too big (value TBA2)</t> | ||||
<t hangText="*">Extension header chain too long (value TBA3)</t> | ||||
<t hangText="*">Too many extension headers (value TBA4)</t> | ||||
<t hangText="*">Too many options in extension header (value TBA5)</t> | ||||
<t hangText="*">Option too big (value TBA6)</t> | ||||
</list> | ||||
</t> | ||||
</list> | ||||
</t> | ||||
</section> | ||||
<section title="Destination Unreachable codes"> | ||||
<t> | ||||
<list style="hanging"> | ||||
<t hangText="IANA is requested to assign the following code for ICMPv6 typ | ||||
e 1 "Destination Unreachable" [IANA-DESTUNREACH]:"> | ||||
<list style="hanging"> | ||||
<t hangText="*">Headers too long (value TBA7)</t> | ||||
</list> | ||||
</t> | ||||
</list> | ||||
</t> | ||||
</section> | ||||
<section title="ICMP Extension Object Classes and Class Sub-types"> | ||||
<t> | ||||
<list style="hanging"> | ||||
<t hangText="IANA is requested to assign the following Class value in the | ||||
"ICMP Extension Object Classes and Class Sub-types" registry [IANA-ICM | ||||
PEXT]:"> | ||||
<list style="hanging"> | ||||
<t hangText="*">Extended information (value TBA8)</t> | ||||
</list> | ||||
</t> | ||||
</list> | ||||
</t><t> | ||||
IANA is requested to create a Sub-type registry for the "Extended | ||||
information" ICMP extension object class. The registration procedure for | ||||
this registry shall be "Standards Action". The Sub-type value of 0 | ||||
shall be reserved, values greater than zero may be assigned. | ||||
</t> | ||||
<t> | ||||
<list style="hanging"> | ||||
<t hangText="IANA is requested to assign the following Sub-type within the | ||||
"Extended information" ICMP extension object class:"> | ||||
<list style="hanging"> | ||||
<t hangText="*">Pointer (value TBA9)</t> | ||||
</list> | ||||
</t> | </t> | |||
</list> | </section> | |||
</t> | <section numbered="true" toc="default"> | |||
</section> | <name>IANA Considerations</name> | |||
</section> | <section numbered="true" toc="default"> | |||
<section title="Acknowledgments"> | <name>Parameter Problem Codes</name> | |||
<t> | <t>IANA has assigned the following codes in the "Type 4 - Parameter | |||
The author would like to thank Ron Bonica, Bob Hinden, Nick Hilliard, | Problem" registry within the ICMPv6 Parameters registry <xref target="I | |||
Michael Richardson, Mark Smith, Suresh Krishnan, and Ole Tran for | ANA-ICMP"/>:</t> | |||
their comments and suggestions that improved this document. | ||||
</t> | ||||
</section> | ||||
</middle> | <table anchor="param-prob"> | |||
<thead> | ||||
<tr> | ||||
<th>Code</th> | ||||
<th>Name</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td>5</td> | ||||
<td>Unrecognized Next Header type encountered by intermediate node</td> | ||||
</tr> | ||||
<tr> | ||||
<td>6</td> | ||||
<td>Extension header too big</td> | ||||
</tr> | ||||
<tr> | ||||
<td>7</td> | ||||
<td>Extension header chain too long</td> | ||||
</tr> | ||||
<tr> | ||||
<td>8</td> | ||||
<td>Too many extension headers</td> | ||||
</tr> | ||||
<tr> | ||||
<td>9</td> | ||||
<td>Too many options in extension header</td> | ||||
</tr> | ||||
<tr> | ||||
<td>10</td> | ||||
<td>Option too big</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | ||||
<section numbered="true" toc="default"> | ||||
<name>Destination Unreachable Codes</name> | ||||
<t>IANA has assigned the following code in the "Type 1 - Destination | ||||
Unreachable" registry within the ICMPv6 Parameters registry <xref targe | ||||
t="IANA-ICMP"/>:</t> | ||||
<?rfc needLines="20"?> | <table anchor="dest-unreach"> | |||
<back> | <thead> | |||
<references title="Normative References"> | <tr> | |||
<?rfc include="reference.RFC.2119"?> | <th>Code</th> | |||
<?rfc include="reference.RFC.4443"?> | <th>Name</th> | |||
<?rfc include="reference.RFC.8200"?> | </tr> | |||
<?rfc include="reference.RFC.7045"?> | </thead> | |||
<?rfc include="reference.RFC.4884"?> | <tbody> | |||
<reference anchor="IANA-PARAMPROB" target="https://www.iana.org/assignments/ic | <tr> | |||
mpv6-parameters/icmpv6-parameters.xhtml#icmpv6-parameters-codes-5"> | <td>8</td> | |||
<front> | <td>Headers too long</td> | |||
<title>Internet Control Message Protocol version 6 (ICMPv6) Parameters, Ty | </tr> | |||
pe 4 - Parameter Problem</title> | </tbody> | |||
<author/> | </table> | |||
<date/> | </section> | |||
</front> | <section numbered="true" toc="default"> | |||
</reference> | <name>ICMP Extension Object Classes and Class Sub-types</name> | |||
<reference anchor="IANA-DESTUNREACH" target="https://www.iana.org/assignments/ | <t>IANA has assigned the following Class value in | |||
icmpv6-parameters/icmpv6-parameters.xhtml#icmpv6-parameters-codes-2"> | the "ICMP Extension Object Classes and Class Sub-types" | |||
<front> | registry within the ICMP Parameters registry <xref target="IANA-ICMPEXT | |||
<title>Internet Control Message Protocol version 6 (ICMPv6) Parameters, Ty | "/>:</t> | |||
pe 1 - Destination Unreachable</title> | <table anchor="class-sub-types"> | |||
<author/> | <thead> | |||
<date/> | <tr> | |||
</front> | <th>Class Value</th> | |||
</reference> | <th>Class Name</th> | |||
<reference anchor="IANA-ICMPEXT" target="https://www.iana.org/assignments/icmp | </tr> | |||
-parameters/icmp-parameters.xhtml#icmp-parameters-ext-classes"> | </thead> | |||
<front> | <tbody> | |||
<title>ICMP Extension Object Classes and Class Sub-types</title> | <tr> | |||
<author/> | <td>4</td> | |||
<date/> | <td>Extended Information</td> | |||
</front> | </tr> | |||
</reference> | </tbody> | |||
</references> | </table> | |||
<t> | ||||
IANA has created a sub-type registry for the "Extended | ||||
Information" ICMP extension object class. The registration procedure for | ||||
this registry is "Standards Action". The sub-type value of 0 | ||||
is reserved; values greater than zero may be assigned. | ||||
</t> | ||||
<t>IANA has assigned the following sub-type within the "Sub-types — | ||||
Class 4 — Extended Information" registry within the ICMP Parameters reg | ||||
istry:</t> | ||||
<references title="Informative References"> | <table anchor="extended-info"> | |||
<?rfc include="reference.RFC.8504"?> | <thead> | |||
<?rfc include="reference.RFC.4890"?> | <tr> | |||
<?rfc include="reference.RFC.4821"?> | <th>Value</th> | |||
<?rfc include="reference.RFC.8305"?> | <th>Description</th> | |||
<?rfc include="reference.I-D.draft-ietf-6man-segment-routing-header-26.xml"?> | </tr> | |||
<?rfc include="reference.I-D.draft-ioametal-ippm-6man-ioam-ipv6-options-02.xml | </thead> | |||
"?> | <tbody> | |||
</references> | <tr> | |||
<td>1</td> | ||||
<td>Pointer</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</back> | </section> | |||
</section> | ||||
</middle> | ||||
<back> | ||||
</rfc> | <displayreference target="I-D.ietf-ippm-ioam-ipv6-options" to="OAM-IPV6"/> | |||
<!-- Local Variables: --> | <references> | |||
<!-- fill-column:72 --> | <name>References</name> | |||
<!-- End: --> | <references> | |||
<name>Normative References</name> | ||||
<xi:include | ||||
href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.x | ||||
ml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8174.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.4443.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8200.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.7045.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.4884.xml"/> | ||||
<reference anchor="IANA-ICMP" target="https://www.iana.org/assignments/i | ||||
cmpv6-parameters/"> | ||||
<front> | ||||
<title>Internet Control Message Protocol version 6 (ICMPv6) Paramete | ||||
rs</title> | ||||
<author><organization>IANA</organization></author> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="IANA-ICMPEXT" target="https://www.iana.org/assignment | ||||
s/icmp-parameters/"> | ||||
<front> | ||||
<title>Internet Control Message Protocol (ICMP) Parameters</title> | ||||
<author><organization>IANA</organization></author> | ||||
</front> | ||||
</reference> | ||||
</references> | ||||
<references> | ||||
<name>Informative References</name> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8504.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.4890.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.4821.xml"/> | ||||
<xi:include | ||||
href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8305.x | ||||
ml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8754.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml3/reference. | ||||
I-D.ietf-ippm-ioam-ipv6-options.xml"/> | ||||
</references> | ||||
</references> | ||||
<section numbered="false" toc="default"> | ||||
<name>Acknowledgments</name> | ||||
<t> | ||||
The author would like to thank <contact fullname="Ron Bonica"/>, | ||||
<contact fullname="Bob Hinden"/>, <contact fullname="Nick Hilliard"/>, | ||||
<contact fullname="Michael Richardson"/>, <contact fullname="Mark Smith"/>, | ||||
<contact fullname="Suresh Krishnan"/>, and <contact fullname="Ole Tran"/> for | ||||
their comments and suggestions that improved this document. | ||||
</t> | ||||
</section> | ||||
</back> | ||||
</rfc> | ||||
End of changes. 114 change blocks. | ||||
560 lines changed or deleted | 658 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/ |