Internet-Draft | IS-IS big TLV | September 2024 |
Wang, et al. | Expires 15 March 2025 | [Page] |
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 solution to IS-IS extension for encoding the TLV whose value is bigger than 255 octets.¶
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 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 15 March 2025.¶
Copyright (c) 2024 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.¶
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 [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.¶
IS-IS has been optionally extended by 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.¶
This document proposes a simple IS-IS extension for encoding and distributing the Big TLVs whose value parts are bigger and can't be accommodated in a single TLV. This extension uses a "Container TLV".¶
A new TLV, called the Container TLV, is defined. Figure 1 shows the format of the new TLV in the classic [ISO10589] case. This new TLV is used to carry a piece of the value of a Big TLV of type T.¶
Type (TBD1) field: The type of the Container TLV, its value is assigned by IANA.¶
Length field: The length of the Value field of the Container TLV.¶
Value field: contains a Type (T) field, a Flag field, a Identification field and a Piece of value of Big TLV of type T (Piece field for short).¶
Type (T) field: A one octet field that indicates the Type of the Big TLV that is being transported in this Container TLV.¶
Flag field: One octet to define flag for the container TLV. F(bit 0) First Piece Flag is defined now, when F bit is set, it indicates the container is the first piece of Big TLV; Other pieces within the Big TLV will unset the F bit.¶
Identification field: A two octets field, together with Type(T), can identify unique Big TLV that each container TLV belongs to. The sender of Big TLV should keep the identification filed same when it fragments the Big TLV into several pieces which encapsulated within the container TLV. The receiver of the Big TLV should assemble the container TLV with the same identification field and Type(T) into the original Big TLV.¶
Piece field: A piece of the value of the Big TLV of type T that is being transported in this Container TLV.¶
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 1 to Piece n. Each piece from Piece 1 to Piece n is less than 252 octets.¶
This is illustrated in Figure 2.¶
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.¶
The node originates n TLVs for the Big TLV of type T. These TLVs are the n new TLVs of type TBD1, each of which has a normal payload. The node advertises each of these TLVs to its neighbors according to the normal IS-IS procedure. Figure 3 shows the encoding of the Big TLV with type T in Figure 2.¶
For each of the n pieces of the value of the Big TLV, a Container TLV of type TBD1 carries the piece. Container TLV 1 contains Piece 1 of the value of the Big TLV, with the F bit set and SHOULD be sent first; Container TLV 2 contains Piece 2 of the value of the Big TLV, with the F bit unset; ...; Container TLV n contains Piece n of the value of the Big TLV, with also the F bit unset.¶
If a node supports the extension (i.e., Container TLV), the node understands each piece of the value of the Big TLV received. Each of the n Container TLVs having Type (T) contains a piece of the Big TLV value in its Piece field.¶
This section discusses a couple of ways in which a Big TLV is split into pieces at sending and the pieces are glued at receiving.¶
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.¶
if there is only one Big TLV of type T, the node originates container TLVs with type T containing the pieces, and set the identification field the same value in each container TLV.¶
When there are multiple (Big) TLVs of type T, the node originates multiple sequences of container TLVs, with each sequence of the container TLVs has unique different identification field.¶
For example, suppose that a node has a Big TLV of type T = 22 as shown in Figure 4. This TLV is too Big and split into two pieces piece 1 and piece 2 at boundary between Sub-TLV K and K+1.¶
For this Big TLV of type T = 22, the node originates two container TLV with type T = 22 containing the two pieces (i.e., piece 1 and piece 2) directly. The container TLV is illustrated in Figure 5. The F bit in piece 1 is set and is unset in piece 2. The sender SHOULD send the piece 1 first.¶
After receiving the container TLV with type T = 22 and the same identification filed(ID X), the node can glue the piece 1 and piece 2 directly accordingly to the F flag that indicate the first first piece and other sequences piece.¶
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 sequence of container TLVs with type T and unique identification value for each sequence.¶
After receiving the container TLV with type T = 22, and different sequence of container TLVs, the node can glue the piece 1 and piece 2 for each sequence through the same identification value.¶
The sliced container TLVs of one Big TLV SHOULD be encapsulated within one LSP if all the lengths of the container TLV can fit into one LSP. If such condition can't be met, these sliced container TLVs can be put into different LSPs.¶
The receiver side will begin to concatenate the container TLVs only after it received the piece 1 container (with F bit set). If the container TLVs of one Big TLV locate in different LSPs, the receiver SHOULD wait until it receives all these updated LSPs, then begin the concatenating process and SPF calculation. Such process is similar as the general incremental updates of LSPs.¶
A new sub-TLV, called Big TLV Capability sub-TLV, is defined in the Router Capability TLV [RFC7981]. A node advertising this sub-TLV indicates that the node supports the Big TLV. The format of the sub-TLV is shown in Figure 6.¶
Type (TBD2) field: The type of the Big TLV Capability sub-TLV, its value is assigned by IANA.¶
Length field: Its value is 1.¶
Flags field: A one octet field of flags. No flag is defined now.¶
A node supporting the Big TLV MUST advertise this sub-TLV in a Router Capability TLV.¶
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.¶
The 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. The originator of the Big TLV MUST consider the above properties when splitting the Big TLV into multiple pieces.¶
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.¶
The mechanism described in this document does not raise any new security issues for the IS-IS protocols.¶
TBD¶
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:¶
+=========+==========+=====+=====+=====+======+==============+ | Type | Name | IIH | LSP | SNP |Purge | reference | +=========+==========+=====+=====+=====+======+==============+ | TBD1 | Container| Y | Y | N | N |This document | +---------+----------+-----+-----+-----+------+--------------+¶
IANA is requested to make a new allocation under the registry name "IS-IS Sub-TLVs for IS-IS Router CAPABILITY TLV" as follows:¶
+======+==================+===+=====+===+=====+==============+ |Value | Description |IIH| LSP |SNP|Purge| reference | +======+==================+===+=====+===+=====+==============+ | TBD2 |Big TLV Capability| N | Y | N | N |This document | +------+------------------+---+-----+---+-----+--------------+¶