<?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="std"
      docName="draft-liu-lsr-igp-mpd-00"
      ipr="trust200902"
      obsoletes=""
      updates=""
      submissionType="IETF"
      xml:lang="en"
      tocInclude="true"
      tocDepth="4"
      symRefs="true"
      sortRefs="true"
      version="3">

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

 <front>


   <title abbrev="IGP MPD">Signaling Maximum Packet Depth(MPD) using IGP</title>
    <seriesInfo name="Internet-Draft" value="draft-liu-lsr-igp-mpd-00"/>


   <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="Yiming Shen" surname="Shen">
      <organization>ZTE</organization>
      <address>
        <postal>
          <street/>
          <!-- Reorder these if your country does things differently -->

          <region/>
          <code/>
          <country>China</country>
        </postal>
        <phone></phone>
        <email>shen.yiming@zte.com.cn</email>

     </address>
    </author>	

	
	
    <date year="2023"/>

   <!-- Meta-data Declarations -->

   <area>Internet</area>
    <workgroup>LSR</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>Maximum Packet Depth</keyword>
   <keyword>Maximum Packet Size</keyword>
    <!-- Keywords will be incorporated into HTML output
        files in a meta tag but they have no effect on text or nroff
        output. If you submit your draft to the RFC Editor, the
        keywords will be used for the search engine. -->

   <abstract>
    <t>
This document proposes the concept of Maximum Packet Depth(MPD) to represent the packet size that a node is able process from an incoming packet, the signaling mechanism for MPD in IGP is also defined.
    </t>
    </abstract>
  </front>
  <middle>
    <section numbered="true" toc="default">
      <name>Introduction</name>	  
	<t>In terms of processing packets, a device has various capabilities. One of the capabilities is the maximum packet depth(MPD) that a node can read from an incoming packet.</t>
	<t>Being aware of the MPD of related nodes benefits the following scenarios:</t>
		<ul spacing="normal">
        <li>In IPv6/SRv6,</li>
		</ul>
		<t>- the headend node can attach data on the packet, e.g, the hop-by-hop options header or the destination options header with the IOAM data fields as introduced in <xref target="RFC9486" format="default"></xref>. With the knowledge of the MPDs of the nodes along the path, the headend can make sure that the depth of IOAM field (as well as SRH in the case of SRv6) after encapsulating doesn't exceed the maximum size that these nodes are able to process.</t>
		<t>- the intermediate nodes may increase the size of the packet. The IPv6 extension headers, as well as their TLVs may be attached by the intermediate destination nodes(e.g SR Segment Endpoint nodes) via inserting or tunneling. In this case it is very important for attaching nodes to obtain the packet processing sizes of the downstream nodes.</t>
		<ul spacing="normal">
        <li>In MPLS, there're potential usecases that the intermediate nodes need to process the Post-Stack Network Actions beyond the label stack, e.g, IOAM in MPLS as in <xref target="I-D.gandhi-mpls-ioam"></xref>. The encapsulating node needs to know the maximum packet processing size of the IOAM transit nodes to make the IOAM function work.</li>
		</ul>
		<t>There're already some related works on packet size signaling, but they are not sufficient.</t>
		<t>The concept Maximum SID Depth (MSD) is originally introduced for SR-MPLS to represent the number of SIDs supported by a node or a link on a node. In a non-SR MPLS network, MSD defines the maximum label depth. MSD is further extended for SRv6 as per <xref target="RFC9352" format="default"></xref>. This can be collected via IS-IS <xref target="RFC8491" format="default"></xref>, OSPF <xref target="RFC8476" format="default"></xref>, BGP-LS <xref target="RFC8814" format="default"></xref>, or PCEP <xref target="RFC8664" format="default"></xref>. </t>
		<t>MSD, regardless of its type, can't fully represent the size of the packet that the device can read. For MPLS, MSD represents the number of LSEs, while MPD represents the packet size, regardless of whether the content in the packet is carried in the form of labels or not. And MSDs for SRv6 are related with the number of SRv6 SIDs, but other components such as SRH TLV may exist, which are not in the scope of MSD. Not to speak of other IPv6 extension headers in the usecases mentioned above.</t>
		<t>Besides MSD, another related concept is link mtu <xref target="RFC4821" format="default"></xref>, it's the maximum transmission unit, i.e., maximum IP packet size in bytes, that can be conveyed in one piece over a link, which can be collected via BGP-LS <xref target="I-D.ietf-idr-bgp-ls-link-mtu"></xref>. </t>
		<t>Link MTU is the maximum packet size that the device/interface is able to send, while MPD represents the node's ability to read the packet. Normally, these two values are not the same. For example, the maximum packet size a node can read is 256 bytes, and the link mtu is 1500 bytes, after receiving a packet which contains a 512-byte payload encapsulated in a 10-label MPLS stack, the node is able read and process the label stack, and then using the label stack after processing and the payload to form the new packet, whose size is less than the link mtu and then send it out. </t>
		<t>Based on the considerations above, this document defines the concept of Maximum Packet Depth(MPD) to represent the maximum packet processing size as well as the signaling mechanism in IGP.</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>Link MTU:As per <xref target="RFC4821" format="default"></xref>, the Maximum Transmission Unit, i.e, maximum IP packet size in bytes, that can be conveyed in one piece over a link.</t>
		<t>Path MTU(PMTU): The minimum link MTU of all the links in a path between a source node and a destination node.[RFC8201]</t>
		<t>MPD: Maximum Packet Depth supported by a node or a link on a node.</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>ISIS extensions for MPD Advertisement</name>		 	  
	<section numbered="true" toc="default">
	<name>Node MPD Advertisement</name>
	<t>The Node MPD sub-TLV is defined within the body of the IS-IS Router CAPABILITY TLV <xref target="RFC7981" format="default"></xref> to carry the provisioned packet depth of the router originating the IS-IS Router CAPABILITY TLV.  Node MPD is the smallest MPD supported by the node on the set of interfaces configured for use by the advertising IGP instance. MPD values may  be learned via a hardware API or may be provisioned. The Node MPD sub-TLV is optional and the format is shown as follows.</t>
		<figure anchor="node">
		<name>Node MPD Sub-TLV</name>
        <artwork align="center" name=""><![CDATA[
                         0                   1
                         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5

                        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                        |    Type       |   Length      |
                        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                        |   MPD-Type    | MPD-Value     |
                        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                        //     ...................     //
                        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                        |   MPD-Type    | MPD-Value     |
                        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
           ]]></artwork>
		         </figure>
	<t>Where:</t>
	<t>Type: TBA1</t>
	<t>Length: variable; represents the total length of the Value field</t>	
	<t>Value: field consists of one or more pairs of a 1-octet MPD-Type and 1-octet MPD-Value</t>	
	<t>MPD-Type: value defined in the "IGP MPD-Types" registry created by the IANA Considerations section of this document Section 6</t>
	<t>MPD-Value: the packet size in bytes. This value MUST represent the lowest value supported by any link configured for use by the advertising IS-IS instance.</t>	
	
	</section>	
	  
	<section numbered="true" toc="default">
	<name>Link MPD Advertisement</name>
	<t>The Link MSD sub-TLV is defined for TLVs 22, 23, 25, 141, 222, and 223 to carry the MSD of the interface associated with the link. MPD values may be learned via a hardware API or may be provisioned. The sub-TLV is optional and the format is shown as follows.</t>
		<figure anchor="Link">
		<name>Link MPD Sub-TLV</name>
        <artwork align="center" name=""><![CDATA[
                        0                   1
                        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5

                        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                        |    Type       |   Length      |
                        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                        |   MPD-Type    | MPD-Value     |
                        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                        //     ...................     //
                        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                        |   MPD-Type    | MPD-Value     |
                        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
           ]]></artwork>
		   </figure>
	<t>Where:</t>
	<t>Type: TBA2</t>
	<t>Length: variable; represents the total length of the Value field</t>	
	<t>Value: field consists of one or more pairs of a 1-octet MPD-Type and 1-octet MPD-Value</t>	
	<t>MPD-Type: value defined in the "IGP MPD-Types" registry created by the IANA Considerations section of this document Section 6</t>
	<t>MPD-Value: the packet size in bytes.</t>	

	
	</section>		  	  

</section>	  
	
<section numbered="true" toc="default">
<name>OSPF extensions for MPD Advertisement</name>	
		<t>Tbd</t>
</section>


<section numbered="true" toc="default">
<name>MPD Types</name>	
		<t></t>
		
<section numbered="true" toc="default">
<name>IPv6 Readable MPD</name>	
<t>IPv6 Readable MPD is defined as the maximum packet size in bytes, starting from the IPv6 header, that a node can read from an incoming IPv6 packet without performance impact.</t>
</section>

<section numbered="true" toc="default">
<name>MPLS Readable MPD</name>	
<t>MPLS Readable MPD is the maximum packet size in bytes, starting from the top of the MPLS label stack, that a node can read from an incoming MPLS packet without performance impact.</t>
</section>

		
</section>

	
<section numbered="true" toc="default">
	<name>IANA Considerations</name>
	<t>This document includes a request to IANA to allocate sub-TLV type codes for the new Node MPD sub-TLV proposed in Section 3.1 of this document from IS-IS Router Capability TLV Registry as defined by [RFC4971]. For Link MPD, IANA is requested to allocate new sub-TLV codes as defined in Section 3.2 from Sub-TLVs for TLVs 22, 23, 141, 222 and 223 registry.</t>
	<t>IANA is also requested to create a new Sub-type registry titled "IGP MPD-Types" under the "Interior Gateway Protocol (IGP) Parameters" registry to identify MPD-Types as proposed in Sections 3. The following values are defined by this document:</t>
        <artwork align="center" name=""><![CDATA[
      Value     Name                             Reference
      -----     ---------------------            -------------
      0         Reserved                         This document
      1         IPv6 Readable MPD                This document
      2         MPLS Readable MPD                This document	  
      3-250     Unassigned
      251-254   Experimental Use                 This document
      255       Reserved                         This document
           ]]></artwork>
	</section>	

<section numbered="true" toc="default">
	<name>Security Considerations</name>
    <t>Security considerations as specified by <xref target="RFC7981" format="default"></xref> are applicable to this document..</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.9256.xml"?>
		<?rfc include="reference.RFC.7981.xml"?>  
      </references>
      <references>
        <name>Informative References</name>
	<?rfc include="reference.RFC.8200.xml"?>
	<?rfc include="reference.RFC.9352.xml"?>
	<?rfc include="reference.RFC.8491.xml"?>
	<?rfc include="reference.RFC.8476.xml"?>
	<?rfc include="reference.RFC.8814.xml"?>
	<?rfc include="reference.RFC.8664.xml"?>
	<?rfc include="reference.RFC.4821.xml"?>
	<?rfc include="reference.I-D.ietf-idr-bgp-ls-link-mtu.xml"?>	
	<?rfc include="reference.I-D.gandhi-mpls-ioam.xml"?>
	<?rfc include="reference.RFC.9486.xml"?>		
      </references>
    </references>


 </back>
</rfc>
