<?xml version='1.0' encoding='utf-8'?>

<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent">
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>

<rfc
      xmlns:xi="http://www.w3.org/2001/XInclude"
      category="info"
      docName="draft-liu-6man-aggregate-header-limit-problem-01"
      ipr="trust200902"
      obsoletes=""
      submissionType="IETF"
      xml:lang="en"
      tocInclude="true"
      tocDepth="4"
      symRefs="true"
      sortRefs="true"
      version="3">

 <!-- ***** FRONT MATTER ***** -->

 <front>


   <title abbrev="Aggregate Header Limit for IPv6">Problem Statement with Aggregate Header Limit for IPv6</title>
    <seriesInfo name="Internet-Draft" value="draft-liu-6man-aggregate-header-limit-problem-01"/>


   <author fullname="Yao Liu" surname="Liu">
      <organization>ZTE</organization>
      <address>
        <postal>
          <street/>
          <!-- Reorder these if your country does things differently -->
          <region/>
          <code/>
          <country>China</country>
        </postal>
        <phone></phone>
        <email>liu.yao71@zte.com.cn</email>

     </address>
    </author>	

	   <author fullname="Yisong Liu" surname="Liu">
      <organization>China Mobile</organization>
      <address>
        <postal>
          <street/>
          <!-- Reorder these if your country does things differently -->

         <city></city>
          <region/>
          <code/>
          <country>China</country>
        </postal>
        <phone></phone>
        <email>liuyisong@chinamobile.com</email>
        <!-- uri and facsimile elements may also be added -->
     </address>
    </author>	

	
	
    <date year="2025"/>

   <!-- Meta-data Declarations -->

   <area>INT</area>
    <workgroup>6MAN</workgroup>
    <!-- WG name at the upperleft corner of the doc,
        IETF is fine for individual submissions.  
	 If this element is not present, the default is "Network Working Group",
        which is used by the RFC Editor as a nod to the history of the IETF. -->

   <keyword>Aggregate Header Limit</keyword>
   <keyword>Maximum Header Chain Size</keyword>


   <abstract>
    <t>
	This document first proposes introduces the concept  "Aggregate header limit for IPv6"(AHL-IPv6) based on RFC8883 to indicate the total header size that a router is able to process at full forwarding rate for IPv6 packets. Then this document describes the problems for path calculation and function enablement without the awareness of AHL-IPv6, and the considerations for AHL-IPv6 collection are also included.
    </t>
    </abstract>
  </front>
  <middle>
    <section numbered="true" toc="default">
      <name>Introduction</name>	 
	  <t>The introduction of IPv6 extension headers, especially SRH, and some advanced features/functions have increased the total packet header chain size greatly, which may cause inefficient packet processing due to the header chain size exceeding the processing limit of the router.</t>
	  <t>As in <xref target="RFC8883" format="default"></xref>, some hardware devices implement a parsing buffer of a fixed size to process packets. The parsing buffer is expected to contain all the headers 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. <xref target="RFC8883" format="default"></xref> proposes the concept "aggregate header limit" to indicate this size limit. As per <xref target="RFC8883" format="default"></xref>, an ICMPv6 Destination Unreachable error with code for "Headers too long" SHOULD be sent when a node discards a packet because the aggregate length of the headers in the packet exceeds the processing limits of the node.</t>
	  <t><xref target="RFC9098" format="default"></xref>  also mentions that due to packet-forwarding engine constraints, if an IPv6 header chain is sufficiently long such that it exceeds the packet lookup capacity of the router, the router might be unable to determine how the packet should be handled and thus could resort to dropping the packet. And some packet-forwarding engines manage IPv6 header chains using recirculation, but recirculation can impact the forwarding capacity of hardware, as each packet will pass through the processing engine multiple times.</t>
	  <t><xref target="I-D.ietf-6man-eh-limits"></xref> defines various limits that may be applied to receiving, sending, and otherwise processing packets that contain IPv6 extension headers. It provides the minimum baseline of support for use of extension headers on the Internet. The default limit for the IPv6 header chain is 104 bytes,including 64 bytes of extension headers, which is far more than enough for some usecases.</t>
	  <t>Before discussing the problem, this document proposes the concept of Aggregate Header Limit for IPv6 as below:</t>
	  <t>"Aggregate Header Limit for IPv6 (AHL-IPv6) is the total header size(i.e, from the IPv6 header chain as well as any headers that are part of network encapsulation up to the innermost transport layer) that a router is able to process at full forwarding rate(e.g, at fast path). For some devices designed with parsing buffer, this limit is related with its buffer size and buffer design."</t>

<t>The different between AHL-IPv6 and the existing concepts:</t>
<ul spacing="normal">
<li>Difference with Aggregate Header Limit(AHL) introduced in RFC8883: There's not a clear definition for AHL in RFC8883. If AHL is understood as the total header size that a router is able to process at full forwarding rate, the values of AHL and AHL-IPv6 may be the same or may be difference based on router design.</li> 
<li>Difference with extension header chain size limit, the extension header chain size is no bigger than aggregate header size since the packet may contain upper layer headers.As mentioned in <xref target="RFC9098" format="default"></xref>, the intermediate nodes/systems may need to process Layer 3/Layer 4 information to make a forwarding decision, in this case, even the extension header chain size limit is not exceeded, an intermediate node may drop the packet due to AHL-IPv6 exceeding.</li>
</ul>

	  <t>This document describes the problems for path calculation and function enablement without the awareness of AHL-IPv6, and the considerations for AHL-IPv6 collection are also included.</t>
   
    </section>
	


	
<section numbered="true" toc="default">
        <name>Conventions used in this document</name>	
		<section numbered="true" toc="default">
        <name>Terminology</name>
        <t>MSD: Maximum SID Depth as in <xref target="RFC8491" format="default"></xref>. </t>		
		<t>AHL-IPv6: Aggregate header limit for IPv6. It's the total header size(i.e, from the IPv6 header chain as well as any headers that are part of network encapsulation up to the innermost transport layer) that a router is able to process at full forwarding rate(e.g, at fast path). For some device designed with parsing buffer, this limit is related with its buffer size and buffer design.</t>	
		<t>The terminology defined in <xref target="RFC9673"></xref> are used in this document as below:</t>
		<t>Forwarding Plane: IPv6 routers exchange user or applications data through the forwarding plane. Routers process fields contained in IPv6 packet headers. However, they do not process information contained in packet payloads.</t>
		<t>Control Plane: Routers exchange management and routing information. They also exchange routing information with one another. Management and routing information are processed by its recipient. Management and control information can be forwarded by a router that process fields contained in packet headers.	</t>
		<t>Fast Path: A path through a router that is optimized for forwarding packets. The Fast Path might be supported by Application Specific Integrated Circuits (ASICS), Network Processor (NP), or other special purpose hardware. This is the usual processing path within a router taken by the forwarding plane.</t>
		<t>Slow Path: A path through a router that is capable of general purpose processing and is not optimized for any particular function. This processing path is used for packets that require special processing or differ from assumptions made in Fast Path heuristics or to process router control protocols used by the control plane.</t>
		<t>Full Forwarding Rate: This is the rate that a router can forward packets without adversely impacting the aggregate forwarding rate. For example, a router could process packets at a rate that allows it to maintain the full speed on its outgoing interfaces, which is sometimes called "wire speed".</t>	
		</section>
	
	    <section numbered="true" toc="default">
        <name>Requirements Language</name>
		<t>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 <xref target="RFC2119" format="default"></xref> <xref target="RFC8174" format="default"></xref> when, and only when, they appear in all capitals, as shown here.</t>
      </section>
</section>

	  
<section numbered="true" toc="default">
<name>Problem Statement</name>	

<t>The introduction of IPv6 extension headers, especially SRH, and some further features/functions have increased the total packet header chain size greatly.  Following are some possible scenarios that would greatly increase the difficulty of efficient packet processing from the aspects of total header size increasing. </t>


	<ul spacing="normal">
        <li>Unlike MPLS, even as an intermediate endpoint, the total SRH should be withine the processing buffer to achieve efficient packet forwarding. And SRH itself may carry additional TLVs for additional functions, e.g, the SRH Opaque Metadata TLV and NSH Carrier TLV for SR service programming <xref target="I-D.ietf-spring-sr-service-programming"></xref>. Besides the headend node, the intermediate nodes may push extra header to the packet as well. For example, for Binding SID, an SR Segment Endpoint nodes would push a new IPv6 header with its own SRH containing an segment list above the original IPv6 header. And in the case of TI-LFA <xref target="I-D.ietf-rtgwg-segment-routing-ti-lfa"></xref>, the PLR node may push a repair SID list to the original packet.</li>
        <li>For network performance measurement, several functions have been defined. For IPv6 IOAM pre-allocated trace, the headend attachs the hop-by-hop/destination options header with the IOAM data fields as introduced in <xref target="RFC9486"></xref>. And to implement the Alternate-Marking Method in IPv6, the AltMark Option is carried by the Hop-by-Hop Options Header or the Destination Options Header<xref target="RFC9343"></xref>.</li>		
		<li>To improve the service capability of the network, features like network slicing and detnet are proposed. For network slicing, the VTN Option in IPv6 Hop-by-Hop option are provided <xref target="I-D.ietf-6man-enhanced-vpn-vtn-id"></xref>. For detnet, there're discussion on carrying detnet related within the IPv6 extension headers, either as SRH TLV [draft-wang-detnet-tsn-over-srv6] or as Destination Options and Hop-by-Hop Options [draft-xiong-detnet-6man-queuing-option].</li>
     </ul>

	 
	 
<t>Most of the functions mentioned above are not mutually-exclusive, the possibility of combination of extension headers/TLVs would make total header size even bigger.
Normally, there're different models/versions of network devices(i.e, switches, routers) from multiple vendors in an operator's network, different devices may have different aggregate header limits and different behaviors after aggregate header limit exceeding. As more and more functions mentioned above are superimposed in the operator's network, packet dropping or rate limiting due to AHL exceeding is a potential risk, which makes it difficult to management the network.</t>

<t>Path calculation, whether by the controller or the headend, without the awareness of AHL of the nodes in the network and the prediction on which features would be enabled along the path, may result in a path with nodes with lower AHLs than required. If the controller is aware of aforesaid information, e.g, when calculation certain path for SR Policy, and the controller knows that and per-hop IOAM and network slicing would be enabled for this SR Policy, the controller would leave out the space for HBH header with options for IOAM and VTN-ID and to ensure that the packet header size wouldn't exceed the AHLs of the intermediate segment endpoints along the list.</t>

<t>The situation is similar for packet encapsulation triggered by function enablement, whether on the headend or the intermediate nodes, packets may be encapsulated with larger header size than the downstream nodes able to process.  If AHL-IPv6 information of the nodes/path can be obtained in advance, when the node needs to attach extra data along the existing path, and the aggregate header limit of the downstream nodes along the path are not sufficient to process the headers, the node may choose to not to use the related function and log an error. </t>

</section>

<section numbered="true" toc="default">
<name>AHL-IPv6 Collection Considerations</name>	


<t>As per <xref target="RFC8883" format="default"></xref>, an ICMPv6 Destination Unreachable error with code for "Headers too long" SHOULD be sent when a node discards a packet because the aggregate length of the headers in the packet exceeds the processing limits of the node. Base on this definition, obtaining the minimum AHL along the path can be achieved by sending detection messages of certain size and receiving the ICMPv6 error messages, which is similar with path MTU discovery for IPv6 in RFC8201. </t>
<t>This mechanism may works for small networks with static paths in it. But there may be some problems in the following scenarios: </t>

	<ul spacing="normal">
        <li>When the number of paths increases, more and more detection messages need to be sent, and the burden of processing the received ICMPv6 error messages also increases.</li>
        <li>For SR dynamic candidate paths <xref target="RFC9256" format="default"></xref>, the segment lists of the paths may change over time, which makes it more difficult to detect the AHL-IPv6s.</li>		
     </ul>
	
<t><xref target="RFC9268" format="default"></xref> leverages an Hop-by-Hop Option to collect the limit(i.e, minimum path MTU) along the path. An Hop-by-Hop Option for AHL-IPv6 collection purpose might be another option taking example by RFC9268. This mechanism works for some cases. But in SRv6, there might be transit routers who just forward the SRv6 packets like normal IPv6 packets without inspecting into the extension header chain. Even if the AHLs of these nodes have smaller AHLs than other nodes, the SRv6 packets would still be processed normally along the path. In this case, if mechanism like RFC9268 is used, the AHL of the path be collected would be one of the AHLs of these transit nodes, but actually packets with larger header chain size could be sent and processed normally. </t>
	
	 <t>Signaling could be another option. Considering that there're already mechanisms like IGP-MSD <xref target="RFC8491" format="default"></xref><xref target="RFC8476" format="default"></xref> to advertise certain size limit at per node and per link basis. The mechanism for advertising AHL-IPv6 is similar with IGP-MSD. In the inter-domain scenario, the BGP signaling may help as well.For the controller, it can get the AHLs of the nodes in the network via BGP-LS, YANG or other south-north mechanisms.The details of signaling mechanism is out of the scope of the document and would be discussed in separated documents.</t>


</section>	
	
<section numbered="true" toc="default">
	<name>IANA Considerations</name>
	<t>This document makes no request of IANA. </t>

	</section>	

<section numbered="true" toc="default">
	<name>Security Considerations</name>
    <t>This document does not introduce any new security issues.</t>
</section>	

<section numbered="true" toc="default">
	<name>Acknowledgement</name>
    <t>The authors would like to thank Tom Herbert, Alvaro Retana, Eric Vyncke, Jeff Tantsura, Sasha Vainshtein and Acee Lindem for their helpful comments and suggestions.</t>
</section>	


	
  </middle>
  <!--  *****BACK MATTER ***** -->

 <back>

   <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
		<?rfc include="reference.RFC.2119.xml"?>
		<?rfc include="reference.RFC.8174.xml"?>
		<?rfc include="reference.RFC.8883.xml"?>	
		<?rfc include="reference.RFC.9673.xml"?>
	
      </references>
      <references>
        <name>Informative References</name>
	<?rfc include="reference.RFC.9343.xml"?>	
	<?rfc include="reference.RFC.8491.xml"?>
	<?rfc include="reference.RFC.8476.xml"?>
	<?rfc include="reference.RFC.9256.xml"?>
	<?rfc include="reference.RFC.9098.xml"?>
	<?rfc include="reference.RFC.9268.xml"?>		
	<?rfc include="reference.I-D.ietf-6man-eh-limits"?>	
	<?rfc include="reference.I-D.ietf-6man-enhanced-vpn-vtn-id.xml"?>	
	<?rfc include="reference.I-D.ietf-spring-sr-service-programming"?>
	<?rfc include="reference.I-D.ietf-rtgwg-segment-routing-ti-lfa"?>	
	<?rfc include="reference.RFC.9486.xml"?>
	<?rfc include="reference.RFC.8986.xml"?>

      </references>
    </references>


 </back>
</rfc>
