﻿<?xml version="1.0" encoding="UTF-8"?>
<!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="std" docName="draft-chen-lsr-isis-big-tlv-02" ipr="trust200902">
 <front>
  <title abbrev="IS-IS big TLV">IS-IS Extension for Big TLV</title>
  <author initials="H" surname="Chen" fullname="Huaimo Chen">
   <organization>Futurewei</organization>
   <address>
    <postal>
     <street />
     <city>Boston, MA</city>
     <region />
     <code />
     <country>USA</country>
    </postal>
    <email>Huaimo.chen@futurewei.com</email>
   </address>
  </author>

    <author initials="B" fullname="Bruno Decraene" 
            surname="Decraene">
      <organization> Orange </organization>
      <address>
        <postal>
          <street></street>
          <city></city>
          <region></region>
          <country>France</country>
        </postal>
        <email>bruno.decraene@orange.com</email>
      </address>
     </author>

<!--
    <author fullname="Les Ginsberg" initials="L" surname="Ginsberg">
      <organization>Cisco Systems</organization>
      <address>
        <postal>
          <street>510 McCarthy Blvd.</street>
          <city>Milpitas</city>
          <code>CA 95035</code>
          <country>United States</country>
        </postal>
        <email>ginsberg@cisco.com</email>
      </address>
    </author>
-->

    <author fullname="Gyan S. Mishra" initials="G" surname="Mishra">
      <organization>Verizon</organization>
      <address>
        <postal>
          <street>13101 Columbia Pike</street>
          <city>Silver Spring</city>
          <code>MD 20904</code>
          <country>USA</country>
        </postal>
        <phone> 301 502-1347</phone>
        <email>gyan.s.mishra@verizon.com</email>
      </address>
    </author>

     <author initials="A" fullname="Aijun Wang" 
            surname="Wang">
      <organization>China Telecom</organization>
      <address>
        <postal>
          <street>Beiqijia Town, Changping District</street>
          <city>Beijing</city>
          <region> </region>
          <code>102209</code>
          <country>China</country>
        </postal>
        <email>wangaj3@chinatelecom.cn</email>
      </address>
    </author>

  <author fullname="Zhenqiang Li" initials="Z" surname="Li">
    	<organization>China Mobile</organization>
    	<address>
        <postal>
          <street>No.32 Xuanwumenxi Ave., Xicheng District</street>
          <city>Beijing</city>
          <code>100032</code>
          <country>P.R. China</country>
        </postal>
        <email>li_zhenqiang@hotmail.com</email>
      </address>
    </author>

   <author initials="Y" fullname="Yanhe Fan" 
            surname="Fan">
      <organization>Casa Systems</organization>
      <address>
        <postal>
          <street></street>
          <city></city>
          <region></region>
          <code></code>
          <country>USA</country>
        </postal>
        <email>yfan@casa-systems.com</email>
      </address>
    </author>

   <author initials="X" fullname="Xufeng Liu" 
            surname="Liu">
      <organization>Alef Edge</organization>
      <address>
        <postal>
          <street> </street>
          <city> </city>
          <region> </region>
          <code></code>
          <country>USA</country>
        </postal>
        <email>xufeng.liu.ietf@gmail.com</email>
      </address>
    </author>

 <author initials="L" fullname="Lei Liu" 
            surname="Liu">
      <organization>Fujitsu</organization>
      <address>
        <postal>
          <street> </street>
          <city> </city>
          <region></region>
          <code></code>
          <country>USA</country>
        </postal>
        <email>liulei.kddi@gmail.com</email>
      </address>
    </author>

    <author fullname="Donald E. Eastlake 3rd" initials="D" surname="Eastlake">
      <organization>Futurewei</organization>
      <address>
        <postal>
          <street>2386 Panoramic Circle</street>
          <city>Apopka, FL</city>
          <region></region>
          <code>32703</code>
          <country>USA</country>
        </postal>
        <phone>+1-508-333-2270</phone>
        <email>d3e3e3@gmail.com</email>
      </address>
    </author>

  <date year="2023" />


  <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 for 255 octets of 
value in maximum. 

    This document proposes a backward compatible IS-IS extension for 
encoding the TLV whose value is bigger than 255 octets.    
   </t>
  </abstract>

  <note title="Requirements Language">
   <t>
    The key words &quot;MUST&quot;, &quot;MUST NOT&quot;, &quot;REQUIRED&quot;, 
&quot;SHALL&quot;, &quot;SHALL NOT&quot;,
      &quot;SHOULD&quot;, &quot;SHOULD NOT&quot;, &quot;RECOMMENDED&quot;, 
&quot;MAY&quot;, and &quot;OPTIONAL&quot; 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>

  <!-- Introduction -->
  <section title="Introduction">

   <t>
Type-Length-Value (TLV) encoding of information is widely used 
in Intermediate System to Intermediate System (IS-IS) routing 
protocol messages including Link State 
Protocol Data Units (LSPs).

Each TLV defined in 
<xref target="ISO10589"/> 
allows for maximum of 255 octets of value 
(or say payload).  
This is because the length field of the TLV is one octet,
which has 255 as its maximum value.

    When the size of the value of a TLV of
type T (such as the Extended IS Reachability TLV of type 22)
is bigger than 255 octets, 
this TLV is called a big TLV of type T (or big TLV for short).
There is no general mechanism for 
encoding and distributing this big TLV 
in classic IS-IS in a backward compatible way.
   </t>

<t>
IS-IS has been optionally extended by [RFC7356] which permits 
larger TLV value, in principle up to 65,535 octets due to a 
two-octet length field. However, the [RFC7356] extensions are 
not widely deployed, are not backward compatible in the sense 
that they use a new Protocol Data Unit (PDU) and new LSP types 
that un-extended 
implementations will ignore, and in any case do not support 
values so large they do not fit into a single packet which 
will rarely be larger than 1,500 octets or, 
even with jumbo frames, around 9,000 octets.
</t>

   <t>This document proposes a simple IS-IS extension for 
encoding and distributing the big TLVs 
whose value parts are bigger than can be accommodated by 
the TLV length field and bigger than can be accommodated 
in a single packet. This extension uses a "Container TLV".
   </t>

  </section> <!-- Introduction -->


  <section title="IS-IS Extension for Big TLV"
           anchor="ex4-big-tlv">

<t>A new TLV, called the Container TLV, is defined. 
<xref target="new-tlv"/> shows the format of the new TLV
in the classic <xref target="ISO10589"/> case. 
This new TLV is used to carry a piece of the value of a big TLV 
of type T.

      <figure anchor="new-tlv" 
       title="Format of Container TLV">
          <artwork align="center"><![CDATA[
  0                   1       
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        -----------+
 |  Type (TBD)   |    Length     |                   |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  --+              |
 |  Type (T)     |    Resv       |    |              Container TLV
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+    Value of       of type TBD
 | Piece of value of big TLV of  |    Container TLV  |
 ~ type T (less than 254 octets) ~    |              |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  --+   -----------+]]>
</artwork>
      </figure>
</t>

<t> 
Type (TBD) field: The type of the Container TLV, 
its value is assigned by IANA.
</t>

<t> 
Length field: The length of the Value field of the Container TLV.
</t>

<t> 
Value field: contains a Type (T) field,
a Resv field, and  
a Piece of value of big TLV of type T 
(Piece field for short).
</t>

<t> 
Type (T) field: A one octet field giving the Type of the Big TLV 
that is being transported in this Container TLV.
</t>

<t> 
Piece field: A piece of the value of the big TLV of type T 
that is being transported in this Container TLV.
</t>

<t> 
Resv field: One octet that MUST be sent as zero and ignored on receipt.
<!--
A one octet field contains an unsigned integer.
If the value has ordering, this field is non-zero indicating 
the position of the piece in the value of the big TLV of type T;
otherwise, it is zero.
--> 
</t>

<t>
When a node has a big TLV of type T to be originated, 
it splits the value of the big TLV into a number of pieces, 
from Piece 0, Piece 1 to Piece n. 

The first piece (i.e., Piece 0) is less than 256 octets.  
Each of the rest pieces from Piece 1 to Piece n is 
less than 254 octets. 

This is illustrated in <xref target="big-payload"/>.
</t>

<t>
      <figure anchor="big-payload" 
       title="Big TLV of type T with value field bigger than 255 octets">
          <artwork align="center"><![CDATA[
  0                   1       
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |  Type (T)     |    Length     |  
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  --+
 | Piece 0 (less than 256 octets)|    |
 ~                               ~    |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+    |
 | Piece 1 (less than 254 octets)|    |
 ~                               ~    Bigger than 
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+    255 octets
 ~               :               ~    |
 ~               .               ~    |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+    |
 | Piece n (less than 254 octets)|    |
 ~                               ~    |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  --+]]>
          </artwork>
      </figure>
</t>

<t>
Each piece carries a subset of entries in the big TLV.
An entry is an existing sub-TLV or structure.
<!--
One entry MUST NOT be split across pieces.
The big TLV is split in entries boundaries, 
not octets boundaries.
-->
</t>

<t>
The node originates n+1 TLVs for the big TLV of type T.
These TLVs are the TLV of type T with a normal payload 
(i.e., the payload less than 256 octets),
and n new TLVs of type TBD each of which has a normal payload.

The node advertises each of these TLVs to its neighbors
according to the normal IS-IS procedure.

<xref target="big-payload-encode"/> shows 
the encoding of the big TLV with type T in
<xref target="big-payload"/>.
</t>

<t>
      <figure anchor="big-payload-encode" 
       title="Encoding value bigger than 255 octets">
          <artwork align="center"><![CDATA[
  0                   1          
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ --+
 |  Type (T)     |    Length     |   | 
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   normal TLV
 | Piece 0 (less than 256 octets)|   of type T
 ~                               ~   |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ --+   ----------+
 |  Type (TBD)   |    Length     |                 |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ --+             |
 |  Type (T)     |    Resv       |   |             Container TLV 1
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   value of      of type TBD
 | Piece 1 (less than 254 octets)|   Container TLV |
 ~                               ~   |             |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ --+   ----------+
 ~               :               ~
 ~               .               ~
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ --+   ----------+
 |  Type (TBD)   |    Length     |                 |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ --+             |
 |  Type (T)     |    Resv       |   |             Container TLV n
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   value of      of type TBD
 | Piece n (less than 254 octets)|   Container TLV |
 ~                               ~   |             |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ --+   ----------+]]>
          </artwork>
      </figure>
</t>

<t>
The normal TLV of type T contains Piece 0 (i.e., the first piece) of the value
of the big TLV.

For each of the rest n pieces of the value of the big TLV, 
a Container TLV of type TBD carries the piece.

Container TLV 1 contains 
Piece 1 of the value of the big TLV; 

Container TLV 2 contains 
Piece 2 of the value of the big TLV;

...; 
 
Container TLV n contains
Piece n of the value of the big TLV. 
</t>

<t>
If a node supports the extension (i.e., Container TLV),
the node understands each piece of the value of the big TLV 
received. 

The value field in the normal TLV of type T contains 
Piece 0 of the big TLV value.

Each of the n Container TLVs having Type (T)
contains a piece of the big TLV value in its Piece field.

<!--
The Piece field in the first Container TLV contains
the second piece of the big TLV value; 
The Piece field in second Container TLV contains
the third piece of the big TLV value;

...;

The Piece field in the n-th Container TLV contains
the last (i.e., (i+1)-th) piece of the big TLV value. 
-->
</t>

<!--
<t>If the value field in the TLV of type T includes one or more Sub-TLVs 
and the Piece field in each of the n – 1 Container TLVs 
includes one or more Sub-TLVs, then
when there are duplicated Sub-TLVs of the same type, 
the first Sub-TLV of the same type is used and 
the rest Sub-TLVs of the same type are ignored. 
</t>
-->

  </section> 
<!-- "IS-IS Extension for Big TLV Payload" -->


  <section anchor="split" title="Split and Glue">
    <t>This section discusses a couple of ways in which
      a big TLV is split into pieces at originating/sending and 
      the pieces are glued at receiving.</t>

   <t>When a TLV of type T is too big at an originating node,
      this big TLV is split into a sequence of pieces. 
      Each piece carries a subset of entries in the big TLV.
      An entry is an existing Sub-TLV or structure.
   <!-- The big TLV is split at entries boundaries. -->
   </t>

   <t>The node originates a native TLV of type T 
      containing the first piece in the sequence.
      In addition, it originates container TLVs with type T 
      containing the other pieces directly
      if there is only one big TLV of type T.
    </t>

   <t>When there are multiple (big) TLVs of type T, 
      the node originates multiple native TLVs of type T.
      For each (big) TLV of type T split into a sequence of pieces, 
      a native TLV of type T containing the first piece 
      in the sequence is originated.
      The container TLVs with type T 
      containing directly the other pieces are also originated.
      These container TLVs MUST follow the native TLV in order and
      between the native TLV and these container TLVs 
      there MUST NOT be any other TLV of type T or 
      any other container TLVs with type T.
    </t>
 <!--     
   <t>It is assumed that the entries in these pieces 
      do not have any order.
      Thus these container TLVs do not have any order.</t>
-->

   <t>For example, suppose that a node has a big TLV of 
      type T = 22 as shown in <xref target="big-payload-ex1"/>.
      This TLV is too big and split into two pieces 
      piece 0 and piece 1  at 
      boundary between Sub-TLV K and K+1. 
     </t>
<t>
      <figure anchor="big-payload-ex1" 
       title="Example Big TLV of type T=22 with Value Field &gt; 255 Octets">
          <artwork align="center"><![CDATA[
  0                   1       
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |  Type (T=22)  |    Length     |  
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  ----+-----------+ 
 |system ID for neighbor 10.2.2.2|      |           |
 +         (6 octets)            +      |           |
 |                               |      |           |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+      |           |
 |        Metric (continue)      |    Piece 0       |
 +               +-+-+-+-+-+-+-+-+    < 256 octets  |
 |               |sub-TLVs-length|      |           |   
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+      |       Bigger than
 |          sub-TLV 1            |      |       255 octets
 :             :                 :      |           |
 :          sub-TLV K            :      |           |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  ----+           |
 |          sub-TLV K+1          |      |           |
 :             :                 :    Piece 1       |
 :          sub-TLV N            :      |           |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  ----+-----------+]]>
          </artwork>
      </figure>
</t>

<t>
    For this big TLV of type T = 22, the node originates
    a native TLV of type T = 22 containing the first piece 
    (i.e., piece 0) and a container TLV with type T = 22
    containing the other piece (i.e., piece 1) directly.

    This native TLV and container TLV is illustrated in
    <xref target="big-payload-encode-ex1"/>.
</t>

<t>
      <figure anchor="big-payload-encode-ex1" 
       title="Example Encoding of Value Field &gt; 255 Octets">
          <artwork align="center"><![CDATA[
  0                   1       
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  ----+
 |  Type (T=22)  |    Length     |      |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+      | 
 |system ID for neighbor 10.2.2.2|      |
 +         (6 octets)            +      |
 |                               |      |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+      |
 |        Metric (continue)      |    Native TLV
 +               +-+-+-+-+-+-+-+-+    of type T=22 
 |               |sub-TLVs-length|      |   
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+      |
 |          sub-TLV 1            |      |
 :             :                 :      |
 :          sub-TLV K            :      |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  ----+

 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  -----------------------+
 |  Type (TBD)   |    Length     |                         |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  ----------+        Container TLV
 |  Type (T=22)  |    Resv       |            |        of type TBD
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  ----+  value of        |
 |          sub-TLV K+1          |      |  Container TLV   |
 :             :                 :   Piece 1  |            |
 :          sub-TLV N            :      |     |            |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  ----+-----+------------+]]>
          </artwork>
      </figure>
</t>

    <t>After receiving the native TLV of type T = 22, 
       followed the container TLV, another node
       glues the piece 0 and piece 1 directly.</t>

    <t>Alternatively, 
      when a node has multiple (big) TLVs of type T, 
      for each (big) TLV of type T split into a sequence of pieces, 
      the node originates 
      a native TLV of type T containing the first piece 
      in the sequence and 
      container TLVs with type T 
      containing the other pieces; where each container TLV
      also contains a key or header of value in the native TLV 
      (or big TLV). 
      There is no order requirement 
      between the native TLV and the container TLVs. 
     </t>

    <t>For example, 
       <xref target="container-tlv-key-ex1"/> 
       shows the container TLV containing neighbor ID 
       (i.e., system ID for neighbor) of the value field in the big TLV 
       as the key and piece 1.  
    </t>

<t>
      <figure anchor="container-tlv-key-ex1" 
       title="Example Container TLV with Key">
          <artwork align="center"><![CDATA[
  0                   1       
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  -----------------------+
 |  Type (TBD)   |    Length     |                         |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  ----------+        Container TLV
 |  Type (T=22)  |    Resv       |            |        of type TBD
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  ----+     |            |
 |system ID for neighbor 10.2.2.2|      |     |            |
 +         (6 octets)            +    Key     |            |
 |                               |      |     |            |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  ----+  value of        |
 |          sub-TLV K+1          |      |  Container TLV   |
 :             :                 :   Piece 1  |            |
 :          sub-TLV N            :      |     |            |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  ----+-----+------------+]]>
          </artwork>
      </figure>
</t>

    <t>After receiving the native TLV of type T = 22, 
       and the container TLV with type T = 22, another node
       glues the piece 0 and piece 1 through 
       the same neighbor ID in the TLVs as the key.</t>
    <t>
       <xref target="container-tlv-header-ex1"/> 
       shows the container TLV containing the header
       of the value field in the big TLV 
       and piece 1.  
    </t>

<t>
      <figure anchor="container-tlv-header-ex1" 
       title="Example Container TLV with Structure Header">
          <artwork align="center"><![CDATA[
  0                   1       
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  -----------------------+
 |  Type (TBD)   |    Length     |                         |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  ----------+        Container TLV
 |  Type (T=22)  |    Resv       |            |        of type TBD
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  ----+     |            |
 |system ID for neighbor 10.2.2.2|      |     |            |
 +         (6 octets)            +      |     |            |
 |                               |      |     |            |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+    Header  |            |
 |        Metric (continue)      |      |     |            |
 +               +-+-+-+-+-+-+-+-+      |     |            |
 |               |sub-TLVs-length|      |     |            |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  ----+  value of        |
 |          sub-TLV K+1          |      |  Container TLV   |
 :             :                 :   Piece 1  |            |
 :          sub-TLV N            :      |     |            |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  ----+-----+------------+]]>
          </artwork>
      </figure>
</t>
    <t>After receiving the native TLV of type T = 22, 
       and the container TLV with type T = 22, another node
       glues the piece 0 and piece 1 through 
       the same header (except for sub-TLVs-length) in the TLVs 
       as the key.</t>
<!--
<t>Discussions on the order of the Container TLVs.
It is assumed that the entries in a big TLV of type T 
do not have any order.
If they have, the order MUST be preserved. 
When the order is preserved, the big TLV can be 
split in octets boundaries.
The order can be kept by the order of 
Container TLVs in one of the following ways.
Option 1: 
The order of the Container TLVs are the order of the TLVs
in the LSPs 
(note: consider that LSPs are orderd by their fragment numbers). 
Option 2: Using Resv field as Order field to indicate the order. 
Order field is a unsigned integer, indicating
the piece number. 
A Container TLV with Order field having value i 
contains Piece i of the big TLV of type T. 
</t>
-->
  </section> 
<!-- "Split and Merge" -->


  <section anchor="cap" title="Big TLV Capability">
   <t>A new sub-TLV, called Big TLV Capability sub-TLV,
      is defined in the Router Capability TLV 
      <xref target="RFC7981"/>. 
      A node advertising this sub-TLV indicates that the node
      supports the Big TLV.
      The format of the sub-TLV is shown in 
      <xref target="cap-sub-tlv"/>.  

      <figure anchor="cap-sub-tlv" 
       title="Big TLV Capability sub-TLV">
          <artwork align="center"><![CDATA[
  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 
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
 |  Type (TBDa)  |   Length (1)  |     Flags     |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]>
          </artwork>
      </figure>
    </t>

    <t>Type (TBDa) field: The type of the Big TLV Capability sub-TLV, 
       its value is assigned by IANA.</t>
    <t>Length field: Its value is 1. </t>
    <t>Flags field: A one octet field of flags. 
       No flag is defined now.</t>

   <t>
      A node supporting the Big TLV MUST advertise
      this sub-TLV in a Router Capability TLV.
   </t>
  </section> 
<!-- "Big TLV Capability" -->

  <section anchor="deployment" title="Incremental Deployment">
   <t>For a network using IS-IS, 
      users can deploy the extension for big TLV in a part of
      the network step by step.  

      The network has some nodes supporting the extension 
      (or say new nodes for short) and the other nodes not 
      supporting the extension (or say old nodes for short)
      before the extension is deployed in  
      the entire network.
   </t>

   <t>The first piece of a big TLV, 
      advertised in the native TLV, 
      is backward compatible and will be understood 
      by both old and new nodes.

      The subsequent pieces of the big TLV, 
      advertised in the Container TLVs, 
      will only be understood by the new nodes and will be 
      ignored by the old nodes.</t>

   <t>The originator of the big TLV MUST consider the above 
      properties when splitting the big TLV 
      into multiple pieces.</t>

   <t>If the size of the existing Sub-TLVs in a TLV is bigger than 255, 
for a piece of new information 
in existing Sub-TLVs, when adding this new information into a 
TLV makes the TLV bigger than 255, this new information in existing Sub-TLVs 
can be put into a container TLV. 

If all the nodes need to have the 
same new information for using the new information, every node 
needs to check if all the nodes support the big TLV capability which is 
distributed by the nodes supporting it. If all the nodes support it, 
every node uses the new information. If it is not required that 
all the nodes must have the same new information for using the 
new information, the nodes supporting the big TLV capability can use 
the new information, the nodes not supporting the big TLV capability 
ignore the new information.
   </t>
  </section>
<!-- "Incremental Deployment" -->

  <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="IANA" title="IANA Considerations">
<t>
   IANA is requested to make a new allocation in the "IS-IS TLV
   Codepoint Registry" under the registry name "IS-IS TLV Codepoints"
   as follows:
<figure>
  <artwork> 
  +=========+==========+=====+=====+=====+======+==============+
  |  Type   | Name     | IIH | LSP | SNP |Purge |  reference   |
  +=========+==========+=====+=====+=====+======+==============+
  |  TBD    | Container|  Y  |  Y  |  N  |  N   |This document |
  +---------+----------+-----+-----+-----+------+--------------+
  </artwork>
</figure>
</t>

<t>
   IANA is requested to make a new allocation under the registry 
   name "IS-IS Sub-TLVs for IS-IS Router CAPABILITY TLV"
   as follows:
<figure>
  <artwork> 
  +======+==================+===+=====+===+=====+==============+
  |Value |  Description     |IIH| LSP |SNP|Purge|  reference   |
  +======+==================+===+=====+===+=====+==============+
  | TBDa |Big TLV Capability| N |  Y  | N |  N  |This document |
  +------+------------------+---+-----+---+-----+--------------+
  </artwork>
</figure>
</t>
  </section>


 </middle>
 <back>
  <references title="Normative References">
        <reference anchor="ISO10589" quoteTitle="true" derivedAnchor="ISO10589">
          <front>
            <title>Information technology -- Telecommunications and information exchange between systems -- Intermediate System to Intermediate System intra-domain routing information exchange protocol for use in conjunction with the protocol for providing the connectionless-mode network service (ISO 8473)</title>
            <seriesInfo name="ISO/IEC" value="10589:2002, Second Edition"/>
            <author>
              <organization abbrev="ISO" showOnFrontPage="true">International Organization for Standardization</organization>
            </author>
            <date month="November" year="2002"/>
          </front>
        </reference>
   <?rfc include="reference.RFC.2119"?>
   <?rfc include="reference.RFC.8174"?>
   <?rfc include="reference.RFC.7981"?>
   <?rfc include="reference.RFC.5305"?>
  </references>
  <references title="Informative References">
   <?rfc include="reference.RFC.7356"?>

  </references>

    <section numbered="false" toc="include" removeInRFC="false" pn="section-appendix.a">
      <name slugifiedName="name-acknowledgments">Acknowledgments</name>
      <t>The authors would like to thank Chris Hopps 
         for the comments to this work.</t>
    </section>


<!--
    <section numbered="false" toc="include" removeInRFC="false" pn="section-appendix.b">
      <name slugifiedName="name-contributors">Contributors</name>

      <t>The following people have substantially contributed to this document:<figure
          align="left">
          <artwork><![CDATA[
Donald E. Eastlake 3rd
Futurewei
Phone: +1-508-333-2270
Email: d3e3e3@gmail.com
]]></artwork>
        </figure></t>
    </section>
-->


 </back>
</rfc>
