<?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-01"
     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="31" month="March" 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 "The
      encoding of TLVs is not altered by the introduction of MP-TLV support.
      In particular, the "key" which is used to identify the set of TLVs which
      form an MP-TLV is the same key used in the absence of MP-TLV support.
      Also note the definition of the "key" exists in the specification(s)
      which define the TLV. "</t>

      <t>Actually, there is no any such "key" definition in the related
      RFCs.</t>

      <t>It also propose 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
      give ambiguous information for 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><xref target="I-D.ietf-lsr-multi-tlv"/> states that: "The encoding of
      TLVs is not altered by the introduction of MP-TLV support. In
      particular, the "key" which is used to identify the set of TLVs which
      form an MP-TLV is the same key used in the absence of MP-TLV support.
      Also note the definition of the "key" exists in the specification(s)
      which define the TLV.".</t>

      <t>But, actually, there is no any "key" definition exists in the
      specification(s) which define the TLV.</t>

      <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>There are some sub-TLVs that can be included in this TLV, but they
      are only "MUST exist" in some scenario. That is to say, 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>There is also no any "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</t>

        <t>How vendor B determine the &ldquo;key&rdquo; parts for
        concatenating the different pieces of TLV 22 instance A?</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>

    <section title="Undefined Behavior for unkeyed TLV">
      <t><xref target="I-D.ietf-lsr-multi-tlv"/> states that multiple
      occrences of a TLV has already defined, and give one example of Router
      Capability TLV(Type 242) <xref target="RFC7981"/>. </t>

      <t>But <xref target="RFC7981"/> states that "Where a receiving system
      has two copies of an IS-IS Router CAPABILITY TLV from the same system
      that have conflicting information for a given sub-TLV, the procedure
      used to choose which copy shall be used is undefined.".</t>

      <t>Another example is "Application-Specific SRLG (Type 238)" <xref
      target="RFC9479"/>. Even the document mentioned the possibilities of
      multiple occurrences, as "Multiple TLVs for the same link MAY be
      advertised.", but there is lack of the description of what's the
      procedure of the receiver.</t>
    </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>

      <t>The document <xref target="I-D.ietf-lsr-multi-tlv"/> states that
      "diligence is still required on the part of the operator to ensure that
      configurations which require the sending of MP-TLV for a given codepoint
      are not introduced on any node in the network until all nodes in the
      network support MP-TLV for the relevant codepoints. ", which is
      impossible and exists only in the imagination of the authors.</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 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>
