<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc category="info" docName="draft-wang-lsr-unsolved-challenge-of-mp-tlv-02"
     ipr="trust200902">
  <front>
    <title abbrev="Unsolved Challenges of MP-TLV Proposal">Unsolved Challenges
    of IS-IS MP-TLV Proposal</title>

    <author fullname="Aijun Wang" initials="A" surname="Wang">
      <organization>China Telecom</organization>

      <address>
        <postal>
          <street>Beiqijia Town, Changping District</street>

          <city>Beijing</city>

          <region/>

          <code>102209</code>

          <country>China</country>
        </postal>

        <email>wangaj3@chinatelecom.cn</email>
      </address>
    </author>

    <date day="28" month="April" year="2025"/>

    <abstract>
      <t>The IS-IS routing protocol uses TLV (Type-Length-Value) encoding in a
      variety of protocol messages. The original IS-IS TLV definition allows
      only for 255 octets of value in maximum. MP-TLV <xref
      target="I-D.ietf-lsr-multi-tlv"/> gives one proposal trying to solve
      this issue, but has some unsolved challenges for its implementations and
      deployment. This document analyzes in detail these challenges and
      proposes the community to find other better solution.</t>
    </abstract>

    <note title="Requirements Language">
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
      "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
      document are to be interpreted as described in <xref target="RFC2119"/>
      <xref target="RFC8174"/> when, and only when, they appear in all
      capitals, as shown here.</t>
    </note>
  </front>

  <middle>
    <section title="Introduction">
      <t><xref target="I-D.ietf-lsr-multi-tlv"/> describes one proposal that
      tries to solve the big TLV issue(we call big-TLV, which the length of
      the contents within the TLV is exceed 255 bytes). It declares
      that&#65306;</t>

      <t> "The encoding of TLVs is not altered by the introduction of MP-TLV
      support. In particular, the "key" that is used to identify the set of
      TLVs that form an MP-TLV is the same key used in the absence of MP-TLV
      support. Also note the definition of the "key" is part of the
      specification(s) that define(s) the TLV and is therefore outside the
      scope of this document. </t>

      <t>NOTE: This document intentionally does not include a definition of
      the key for each codepoint. To do so would be redundant and risk
      unintentionally deviating from the definition that already exists in the
      relevant specifications. Also, the term "key" is a generic term that is
      not used in the relevant specifications. "</t>

      <t>Actually, there is no any such "key" or some other "generic term"
      definition of the same purpose in the related RFCs.</t>

      <t>And, under the proposed mechanism, it will be very difficult and
      inefficient to concatenate the several sub-sub-TLV pieces into the
      original top-TLV and associated parent sub-TLV with the undefined
      "key".</t>

      <t>It proposes to introduce the advertisement of "MP-TLV Capabilities
      Advertisement", but the proposed encoding is not codepoint dependent,
      which is not only useless for the implementation, but also mislead the
      operator.</t>

      <t>Finally, there is no length boundary for all the possible IS-IS
      MP-TLV codepoints that listed in the section-9.2 of <xref
      target="I-D.ietf-lsr-multi-tlv"/>, which can lead the potential memory
      crush of the MP-TLV receivers when the sender has abnormal behavior.</t>

      <t>These unsolved issues challenge the implements and deployment of this
      document and after the analysis below, we recommend the community to
      consider other direction to solve the mentioned big-TLV problem of the
      IS-IS standard.</t>
    </section>

    <section anchor="GP-Segment-Concate"
             title="General Process of Segmentation and Concatenation">
      <t>It is well known that when one sender wants to send one large packet
      that exceeds the Maximum Transmit Unit(MTU) of the path, it must segment
      the large packet, and encapsulate each segment with one unique
      identifier to identify each segment of the large packet.</t>

      <t>The header of IPv4 datagram header is one example to show such knob:
      the "identification" field is defined as "Unique Packet Id for
      identifying the group of fragments of a single IP datagram".</t>

      <t>It is impossible to concatenate the segments of one large packet
      together without the explicit unique identifier.</t>

      <t>Such principle can apply also the segmentation of MP-TLV at the
      sender side and its concatenation at the receiver side, that is to say,
      there must exist the "key" information for the MP-TLV and every piece of
      the MP-TLV must carry the same "key" field.</t>
    </section>

    <section anchor="split_and_glue"
             title="Unsolved &quot;Key&quot; Information for MP-TLV Proposal">
      <t>Take the "Extended IS Reachability" (TLV 22) as the example. This TLV
      is defined in <xref target="RFC5305"/>. The original text regards to
      this TLV, is the followings:</t>

      <figure anchor="TLV22" title="Extended IS Reachability(TLV 22)">
        <artwork align="center"><![CDATA[   The proposed extended IS reachability TLV contains a new data structure, consisting of:
      7 octets of system ID and pseudonode number
      3 octets of default metric
      1 octet of length of sub-TLVs
      0-244 octets of sub-TLVs ]]></artwork>
      </figure>

      <t>No "key" definition for this TLV in the specific RFC.</t>

      <t>Take the "Extended IP Reachability" (TLV 135) as another example.
      This TLV is defined also in <xref target="RFC5305"/>. The original text
      regards to this TLV, is the followings:</t>

      <t><figure anchor="TLV135" title="Extended IP Reachability(TLV 135)">
          <artwork align="center"><![CDATA[   The proposed extended IP reachability TLV contains a new data structure, consisting of:
   4 octets of metric information
   1 octet of control information, consisting of
      1 bit of up/down information
      1 bit indicating the presence of sub-TLVs
      6 bits of prefix length
   0-4 octets of IPv4 prefix
   0-250 optional octets of sub-TLVs, if present consisting of
      1 octet of length of sub-TLVs
      0-249 octets of sub-TLVs, where each sub-TLV consists of a sequence of
         1 octet of sub-type
         1 octet of length of the Value field of the sub-TLV
         0-247 octets of value
]]></artwork>
        </figure></t>

      <t>No "key" definition information for this TLV in the specific RFC.</t>

      <t>Such "key" definition information defined only in the <xref
      target="I-D.ietf-lsr-multi-tlv"/>, which illustrates that this document
      change or add more restraints to the specification that defines these
      IS-IS TLVs.</t>

      <section title="Ambigious &quot;key&quot; definition for TLV 22">
        <t>Even we accept the newly definition of "key" definition for TLV 22
        in <xref target="I-D.ietf-lsr-multi-tlv"/>, as illustrated below that
        extract directly from this document:</t>

        <t><figure anchor="A-key-TLV22"
            title="Ambigious &quot;Key&quot; definition for TLV 22">
            <artwork align="center"><![CDATA[   As an example, consider the Extended IS Reachability TLV (type 22). A neighbor in this TLV is specified by:
   * 7 octets of system ID and pseudonode number
   * 3 octets of default metric
   * Optionally one or more of the following link identifiers:
      - IPv4 interface address and IPv4 neighbor address as specified in [RFC5305]
      - IPv6 interface address and IPv6 neighbor address as specified in [RFC6119]
      - Link Local/Remote Identifiers as specified in [RFC5307]
   The key consists of the 7 octets of system ID and pseudonode number plus the set of link identifiers which are present.]]></artwork>
          </figure></t>

        <t>Here, we should notice that "the set of link identifiers", which is
        the newly defined "key" in this document, is "Optionally". That is to
        say, any vendor can select any one of them as the "key" information to
        segment the MP-TLV. This will certainly lead the confusion on the
        receiver when it receives the segments of MP-TLV from different
        vendors and try to concatenate them respectively. Take the example
        below:</t>

        <t>If vendor A send pieces of TLV 22 instance A</t>

        <figure anchor="Instance-A-TLV-22"
                title="Instance A of TLV 22 from vendor A">
          <artwork align="center"><![CDATA[   <22, Neighbor System ID, other possible sub-TLVs, IPv4 Local/Remote Address> + object info !!V4 addresses only
   <22, Neighbor System ID, IPv4 Local/Remote Address> + object info !!V4 addresses only]]></artwork>
        </figure>

        <t>vendor B send pieces of TLV 22 instance B:</t>

        <figure anchor="Instance-B-TLV-22"
                title="Instance B of TLV 22 from vendor B">
          <artwork align="center"><![CDATA[   <22, Neighbor System ID, other possible sub-TLVs, IPv6 Local/Remote Address> + additional object info !!V6 addresses only
   <22, Neighbor System ID, IPv6 Local/Remote Address> + additional object info !!V6 addresses only]]></artwork>
        </figure>

        <t>How vendor A determine the &ldquo;key&rdquo; parts for
        concatenating the different pieces of TLV 22 instance B, considering
        there may be several IPv6 address for one link.</t>

        <t>How vendor B determine the &ldquo;key&rdquo; parts for
        concatenating the different pieces of TLV 22 instance A,considering
        there may be several IPv4 address for one link?</t>

        <t>Imaging there is another vendor C, receive both of these pieces for
        another two instances, how does vendor C determine such information
        solely from the ambiguous segmented pieces?</t>

        <t>From the above scenario, we can see there will be many chaos for
        the interoperability issues within the operator network, which should
        be avoided by the publish of the network protocol standard. But <xref
        target="I-D.ietf-lsr-multi-tlv"/> can't accomplish such task, it can
        only lead more chaos in the operator's network.</t>
      </section>

      <section title="Concatenation Challenge of the Nested sub-sub-TLV">
        <t><xref target="I-D.ietf-lsr-multi-tlv"/> states that "the mechanism
        described in this document is applicable to top level TLVs as well as
        any level of sub-TLVs that may appear within a top level TLV.", but it
        will be very very challenging and inefficient. Let's take one example
        to illustrate it:</t>

        <t>Suppose we have one sub-sub-TLV that has exceed the 255 bytes, and
        needs to be sent in three pieces(let&rsquo;s call them P1, P2,P3).
        </t>

        <t>Under the current MP-TLV proposal, these pieces must be sent in the
        following format in one or more LSPs: </t>

        <t><figure anchor="A-Nest-TLV"
            title="Concatenation Challenge of the Nested sub-sub-TLV">
            <artwork align="center"><![CDATA[      TOP_TLV?undefined ?key1?, sub-TLV?undefined ?key2?, sub-sub-TLV(undefined ?key3?, P1)?? 
      TOP_TLV?undefined ?key1?, sub-TLV?undefined ?key2?, sub-sub-TLV(undefined ?key3?, P2)??
      TOP_TLV?undefined ?key1?, sub-TLV?undefined ?key2?, sub-sub-TLV(undefined ?key3?, P3)?? 
]]></artwork>
          </figure>Besides the ambiguity of the undefined &lsquo;key1&rsquo;,
        &lsquo;key2&rsquo;, &lsquo;key3&rsquo; in the above nest
        encapsulations, which can lead to enormous challenges for the
        interoperability, such encapsulation proposal, is very inefficient.
        </t>

        <t>The IETF community should try to find other general and efficient
        solution..</t>
      </section>
    </section>

    <section anchor="lengthboundary"
             title="Unsolved Length Boundary for MP-TLV Proposal">
      <t>As the draft <xref target="I-D.ietf-lsr-multi-tlv"/> emphasize that
      "The encoding of TLVs is not altered by the introduction of MP-TLV
      support.", then, there is no any place to encode the actual length of
      the big-TLV.</t>

      <t>In theory, the sender can send unlimited occurrences of any MP-TLV
      codepoints listed in section-9.2 of <xref
      target="I-D.ietf-lsr-multi-tlv"/>. This will make huge burden for the
      memory allocation of the receiver on these possible MP-TLV codepoint,
      and also the potential attacks from one abnormal sender.</t>
    </section>

    <section anchor="mp-tlv-capabilities-announcement"
             title="Ambiguous &quot;MP-TLV&quot; Capabilities Definition">
      <t>In order to assure the interoperability and deployment of MP-TLV
      feature in operator's network, the document <xref
      target="I-D.ietf-lsr-multi-tlv"/> introduces the "MP-TLV Capability
      Advertisement" sub-TLV within the IS-IS Router CAPABILITY TLV, but it is
      IS-IS TLV/sub-TLV codepoint independent.</t>

      <t>It is also impossible that let the sender don't send such
      announcements until only after it supports the concatenation of MP-TLV
      codepoints illustrated in section-9.2 of <xref
      target="I-D.ietf-lsr-multi-tlv"/>. Then the sending of such capabilities
      announcements gives no any clues for the receiver, and also the
      operator. It can only mislead the operator the support of MP-TLV for
      some expected MP-TLV is achieved, but in actually it does not.</t>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>The mechanism described in this document does not raise any new
      security issues for the IS-IS protocols.</t>
    </section>

    <section anchor="ack" title="Acknowledgement">
      <t>Thanks Les, Acee, David, Adrian, Robert, Tony Li , Ketan etc. for the
      detail discussion to foster this analysis document.</t>
    </section>

    <section anchor="IANA" title="IANA Considerations">
      <t>None.</t>
    </section>
  </middle>

  <back>
    <references title="Normative References">
      <?rfc include="reference.RFC.2119"?>

      <?rfc include="reference.RFC.5305"?>

      <?rfc include="reference.RFC.7981"?>

      <?rfc include="reference.RFC.8174"?>

      <?rfc include="reference.RFC.9479"?>

      <?rfc include='reference.I-D.ietf-lsr-multi-tlv'?>

      <?rfc ?>
    </references>

    <references title="Informative References"/>

    <!---->
  </back>
</rfc>
