<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc>
<?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-ginsberg-lsr-reliable-snp-00"
     ipr="trust200902" submissionType="IETF" consensus="true">
  <front>
    <title abbrev="reliable-snp">
      IS-IS Reliable SNP
    </title>
    <author fullname="Les Ginsberg" initials="L" surname="Ginsberg">
      <organization>Cisco Systems</organization>
      <address>
        <email>ginsberg@cisco.com</email>
      </address>
    </author>
    <author fullname="Marek Karasek" initials="M" surname="Karasek">
      <organization>Cisco Systems</organization>
      <address>
        <email>mkarasek@cisco.com</email>
      </address>
    </author>
    <author fullname="Peter Psenak" initials="P" surname="Psenak">
      <organization>Cisco Systems</organization>
      <address>
        <email>ppsenak@cisco.com</email>
      </address>
    </author>
    <date year="2026"/>
    <area>Routing Area</area>
    <workgroup>LSR Working Group</workgroup>
    <keyword>SNP</keyword>
    <keyword>Draft</keyword>
    <abstract>
      <t>
        Complete Sequence Number PDUs (CSNPs) are exchanged as part of
	adjacency bringup on point-to-point interfaces. However, this
	exchange is unreliable. This document defines protocol extensions to
	support reliable exchange of CSNPs as well as optimizations
	to the encoding of advertisements in Sequence Number PDUs.
      </t>
    </abstract>
  </front>
  <middle>
    <section anchor="Introduction" title="Introduction">
      <t>
        <xref target="ISO10589"/> Section 7.3.17 specifies that on
	Point-to-Point(P2P) circuits a router MUST send a complete
	set of Complete Sequence Number PDUs(CSNPs) when an adjacency is
	being formed. This allows the neighboring router to determine
	what are the differences in the Link State Database (LSDB) between
	the local copy and the neighbor's copy and trigger synchronization
	of the two databases.
      </t>
      <t>
	NOTE1: A complete set of CSNPs is defined as
	"a set whose Start LSPID and End LSPID ranges cover the complete
	possible range of LSPIDs."
      </t>
      <t>
	Reception of CSNPs allows the receiver to determine which Link State
	PDUs(LSPs) need to be exchanged in order to fully synchronize
	the two LSDBs. This provides
	a means of optimizing the exchange of LSPs which occur when an adjacency
	is formed so that the full LSDB does not have to be exchanged - only
	the LSPs which are not already synchronized need to be exchanged.
      </t>
      <t>
	The transmission of CSNPs is, however, unreliable i.e., it is possible
	for some transmitted CSNPs to not be received by the neighbor. This may
	result in inefficiencies in the LSDB synchronization i.e., some LSPs
	which are already synchronized between the two neighbors may be
	unnecessarily transmitted because a CSNP which includes that LSPID
	was never received. At low to moderate scale, this inefficiency
	does not have a significant impact. But with large LSDBs this can
	result in the unnecessary exchange of large numbers of LSPs.
      </t>
      <t>
	NOTE2: Loss of some CSNPs does NOT compromise the reliability of
	the LSDB exchange.
      </t>
      <t>
	Unreliability in the CSNP exchange also contributes to premature
	use of a neighbor in the best path calculation as it compromises
	the ability to determine when the LSDBs are in sync. Use of a neighbor
	whose LSDB is not in sync may result in traffic loss or forwarding
	loops.
      </t>
      <t>
	This document defines protocol extensions to support reliable
	exchange of CSNPs when adjacencies are brought up. This document
	also defines protocol extensions to increase the efficiency of the
	encoding of the information sent in Sequence Number PDUs (SNPs).
      </t>
    </section>
      
    <section anchor="ReqLang" title="Requirements Language">
      <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 <xref
      target="RFC2119">BCP 14</xref> <xref target="RFC8174"/> when, and only
      when, they appear in all capitals, as shown here.</t>
    </section>

    <section anchor="Overview" title="Overview of the Solution">
      <t>
	There are two protocol extensions required to support reliable
	CSNP exchange.
      </t>
      <t>
	1)Nodes need to signal support for reliable CSNP exchange.
      </t>
      <t>
	2)A means of acknowledging receipt of the LSPID ranges advertised in
	CSNP needs to be provided.
      </t>
      <t>
	The following sections define these protocol extensions.
	These extensions apply only on point-to-point circuits.
      </t>
	
    <section anchor="CSNP Support" title="Signalling Support for Reliable CSNP Exchange">
      <t>
	A capability bit is assigned from the IS-IS Bit Values for the
	Hello Capabilities TLV registry defined by
	<xref target="ID.draft-ginsberg-lsr-hello-capability-01"/>.
	This bit indicates that the node supports reliable CSNP
	transmissions. The capability applies to all levels supported
	on the adjacency.
      </t>
    </section>
    <section anchor="Ack TLV Definition" title="CSNP Entry Acknowledgement TLV Definition">
      <t>
	A new TLV is defined to signal acknowledgement of the receipt of
	LSPID ranges. This TLV is  sent in Partial Sequence Number PDUs(PSNP).
	This section defines the format of this TLV.
      </t>
      
      <t> <figure>
	<artwork align="left">
0 1 2 3 4 5 6 7
+--+--+--+--+--+
| TLV Type     |
+--+--+--+--+--+
| TLV Length   |
+--+--+--+--+--+
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
+--+--+--+--+--+-+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|  System ID of Max Contiguous LSPID Received                 |
+--+--+--+--+--+-+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| System ID (cont.)             | Pnode ID      | LSP #       |
+--+--+--+--+--+-+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|  System ID of Max Contiguous LSPID Acknowledgement Received |
+--+--+--+--+--+-+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| System ID (cont.)             | Pnode ID      | LSP #       |
+--+--+--+--+--+-+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
0 1 2 3 4 5 6 7
+--+--+--+--+--+
| # of ranges  |
+--+--+--+--+--+
0 or more Pairs of the following
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
+--+--+--+--+--+-+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|  Start System ID of Non-Contiguous LSPID Received           |
+--+--+--+--+--+-+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| System ID (cont.)             | Pnode ID      | LSP #       |
+--+--+--+--+--+-+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|  End System ID of Non-Contiguous LSPID Received           |
+--+--+--+--+--+-+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| System ID (cont.)             | Pnode ID      | LSP #       |
+--+--+--+--+--+-+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
...
	</artwork>
      </figure></t>

      <t>
	"TLV Type" is TBA by IANA (1 octet)
      </t>
      <t>
	"TLV Length" is the total length of the data which follows (1 octet)
      </t>
      <t>
	Max Contiguous LSPID Received is the 8 octet LSPID of the highest
	numbered LSPID received in a CSNP. It serves as an acknowledgment
	that CSNPs covering entries 0 - Max Contiguous LSPID Received
	have been successfully received.
      </t>
      <t>
	Max Contiguous LSPID Acknowledgment Received is the 8 octet LSPID of
	the highest numbered Max Contiguous LSPID Received from the neighbor
	in an LSP Entry Acknowledgement TLV. It serves as an acknowledgment
	that the neighbor is aware of the set of CSNPs which have
	been successfully received.
      </t>
      <t>
	Non-contiguous LSPID ID ranges received (start/end) indicate
	what CSNPs have been successfully received beyond those CSNPs
	covered by Max Contiguous LSPID Received. This serves to let the
	neighbor know that CSNPs covering these ranges need not be
	retransmitted. Multiple such ranges can be included in a
	TLV. It is RECOMMENDED that these be sent in ascending order.
      </t>
      <t>
	CSNP Entry Acknowledgment TLVs are advertised in a PSNP
	when initial CSNP exchange is in progress.
	Multiple such TLVs MAY be sent in a PSNP, but it is suggested
	that the number of such TLVs be limited to one. If there are
	multiple such TLVs, the Max Contiguous LSPID Received and
	Max Contiguous LSPID Acknowledgment Received MUST be the same in
	all such TLVs
      </t>
    </section>

    <section anchor="Procedures" title="Reliable CSNP Exchange State Procedures">
      <t>
	Routers which support Reliable CSNP Exchange will enable a timer
	to trigger periodic sending of a PSNP with a CSNP Entry
	Acknowledgment TLV whenever Reliable CSNP Exchange is in
	progress. Suggested value for this timer is 1 second.
      </t>
      <t>
	Reliable CSNP Exchange is completed when the following is achieved
      </t>
      <t>
	1)A complete set of CSNPs has been sent.
      </t>
      <t>
	2)A complete set of CSNPs has been received.
      </t>
      <t>
	3)A CSNP Entry Acknowledgment TLV has been received where
	Max Contiguous LSPID Received and Max Contiguous LSPID Acknowledgement
	Received are both FFFFFF.FF-FF.
      </t>
      <t>
	Once a node has sent a complete set of CSNPs, receipt of a
	CSNP Entry Acknowledgment TLV with Max Contiguous LSPID Received
	less than FFFFFF.FF-FF triggers scheduling of (re)sending one or
	more CSNPs. The ranges
	covered in the resent CSNPs SHOULD include ranges between
	(Max Contiguous LSPID Received+1) and FFFFFF.FF-FF and SHOULD
	exclude ranges advertised in the set of
	Non-contiguous LSPID ID ranges received from the neighbor. In
	this way retransmission of CSNPs covering ranges which
	have already been successfully received by the neighbor
	are minimized.
      </t>
      <t>
	Once both the Last LSPID Sent and the Last LSPID Received indicate
	that the complete
	set of CSNPs have been sent and successfully received (both LSPIDs
	are FFFFFF.FF-FF) the CSNP exchange state is set to completed.
      </t>
      <t>
	Once CSNP exchange has been successfully completed the timer
	triggering sending CSNP Entry Acknowledgment TLVs is cancelled.
      </t>
      <t>
	In order to avoid other routers prematurely directing traffic via
	the adjacency being established, routers SHOULD suppress the
	advertisement of the adjacency until CSNP exchange state is complete,
	the LSDB is synchronized, and the router has updated its
	forwarding plane based upon the revised topology. Procedures
	equivalent to that described in <xref target="RFC8706"/>
	Section 3.4 SHOULD
	be used to determine when the LSDB is synchronized.
      </t>
    </section>

    </section>

    <section anchor="SNP Opt" title="Optimizing LSP Entries">
      <t>
	<xref target="ISO10589"/> defines the LSP Entry TLV which is
	used in Partial Sequence
	Number PDUs(PSNPs) and CSNPs to advertise the description of
	LSPs in the sender's LSPDB. The format of the TLV is shown
	below.
      </t>
      <t> <figure>
	<artwork align="left">
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+--+--+--+--+--+-+--+--+--+--+-+
|  Remaining Lifetime          |
+--+--+--+--+--+-+--+--+--+--+-+
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
+--+--+--+--+--+-+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|          System ID                                          |
+--+--+--+--+--+-+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| System ID (cont.)             | Pnode ID      | LSP #       |
+--+--+--+--+--+-+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|          Sequence #                                         |
+--+--+--+--+--+-+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+--+--+--+--+--+-+--+--+--+--+-+
|     Checksum                 |
+--+--+--+--+--+-+--+--+--+--+-+
	</artwork>
      </figure> </t>
      <t>
	This requires a total of 16 octets per LSP.
      </t>
      <t>
	The value of the Remaining Lifetime is significant only to indicate
	whether the LSP is active (non-zero) or has been purged (zero).
	But this indication can be derived from the checksum value since
	a checksum is NOT calculated for purged LSPs. Therefore it is possible
	to infer a purged LSP from a 0 checksum value and thereby omit
	the Remaining Lifetime in an LSP Entry without loss of
	information. This reduces the amount of information need to fully
	describe an LSP to 12 octets.
      </t>
      <t>
	Further optimization can be achieved by defining an encoding which
	allows the same system ID to be applied to a set of LSPs
	originated by the same node. In cases where a given node is
	generating multiple LSPs at a given level, this can
	provide further significant reduction in the space required to advertise
	LSP entries.
      </t>
    <section anchor="Opt LSP Entry" title="Optimized LSP Entry TLV">
      <t>
	This section defines the format of a new TLV which is functionally
	equivalent to the existing LSP Entry TLV (9) but consumes
	significantly less space without loss of information.
      </t>
      <t> <figure>
	<artwork align="left">
0 1 2 3 4 5 6 7
+--+--+--+--+--+
| Type         | 1 octet - TBA by IANA
+--+--+--+--+--+
| Length       | 1 octet - # of octets to follow
+--+--+--+--+--+
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
+--+--+--+--+--+-+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|          System ID                                          |
+--+--+--+--+--+-+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+--+--+--+--+--+-+--+--+--+--+--+
| System ID (cont.)             |
+--+--+--+--+--+-+--+--+--+--+--+
+--+--+--+--+--+
| # of entries | 1 octet - entries to follow
+--+--+--+--+--+

1 or more entries with the following information
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+--+--+--+--+--+-+--+--+--+--+--+
| Pnode-ID     | LSPnum         |
+--+--+--+--+--+-+--+--+--+--+--+
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
+--+--+--+--+--+-+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|       LSP Sequence #                                        |
+--+--+--+--+--+-+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+--+--+--+--+--+-+--+--+--+--+--+
| LSP Checksum                  |
+--+--+--+--+--+-+--+--+--+--+--+
	 ...
	</artwork>
      </figure> </t>
      <t>
	The above encoding reduces the octets required to advertise
	multiple LSPs originated by a given node as shown in the below table.
      </t>
     <t> <figure>
	<artwork align="left">
	  --------------------------------------------------
	  | #LSPs  | LSP Entry TLV | Optimized LSP Entry TLV|
	  --------------------------------------------------
	  |  1     |   16          |      15                |
	  ---------------------------------------------------
	  |  2     |   32          |      23                |
	  ---------------------------------------------------
	  |  3     |   48          |      31                |
	  ---------------------------------------------------
	  | 15     |  240          |     127                |
	  --------------------------------------------------
	</artwork>
      </figure> </t>
    </section>

    <section anchor="Opt SNP Capability" title="Advertising Support for Optimized LSP Entry TLV">
      <t>
	Use of the Optimized LSP Entry TLV in SNPs can only be done safely
	when it is known that the neighbor supports this new TLV. Support
	can be advertised using the Hello Capability TLV defined in
	<xref target="ID.draft-ginsberg-lsr-hello-capability-01"/>.
      </t>
      <t>
	A capability bit is assigned from the IS-IS Bit Values for the
	Hello Capabilities TLV registry defined by
	<xref target="ID.draft-ginsberg-lsr-hello-capability-01"/>.
	This bit indicates that the node is capable of sending and receiving
	the Optimized LSP Entry TLV in SNPs.
      </t>
      <t>
	Advertisement of this capability bit is only valid in P2P Hello PDUs.
	If received in a LAN IIH it MUST be ignored.
      </t>
    </section>

    <section anchor="IANA" title="IANA Considerations">

    <section anchor="IANAOptSNPSupport"
             title="Hello Capabilities">
      <t indent="0"> This document updates the "IS-IS Bit Values for the Hello Capabilites TLV" registry as follows:
      </t>
      <t>
	IS-IS Reliable CSNP Transmission Support(R-CSNP) Value TBA
      </t>
      <t>
	IS-IS Optimized LSP Entry Support(O-LSP-Entry: Value TBA
      </t>
    </section>
      <section anchor="IANAISISTLV"
              title="IS-IS Top Level TLVs">
	<t>
	  This document updates the "IS-IS Top Level TLV Codepoints
	  Registry as follows:
	</t>
	<table anchor="T1" align="center" pn="table-1">
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">Value</th>
              <th align="left" colspan="1" rowspan="1">Name</th>
              <th align="left" colspan="1" rowspan="1">IIH</th>
              <th align="left" colspan="1" rowspan="1">LSP</th>
              <th align="left" colspan="1" rowspan="1">SNP</th>
              <th align="left" colspan="1" rowspan="1">Purge</th>
              <th align="left" colspan="1" rowspan="1">MP</th>
              <th align="left" colspan="1" rowspan="1">Status/Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">TBA</td>
              <td align="left" colspan="1" rowspan="1">Optimized LSP Entry</td>
              <td align="left" colspan="1" rowspan="1">N</td>
              <td align="left" colspan="1" rowspan="1">N</td>
              <td align="left" colspan="1" rowspan="1">Y</td>
              <td align="left" colspan="1" rowspan="1">N</td>
              <td align="left" colspan="1" rowspan="1">N</td>
              <td align="left" colspan="1" rowspan="1">draft-ginsberg-lsr-reliable-snp</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">TBA</td>
              <td align="left" colspan="1" rowspan="1">CSNP Entry Ack</td>
              <td align="left" colspan="1" rowspan="1">N</td>
              <td align="left" colspan="1" rowspan="1">N</td>
              <td align="left" colspan="1" rowspan="1">Y</td>
              <td align="left" colspan="1" rowspan="1">N</td>
              <td align="left" colspan="1" rowspan="1">N</td>
              <td align="left" colspan="1" rowspan="1">draft-ginsberg-lsr-reliable-snp</td>
            </tr>
          </tbody>
	</table>
      </section>
    </section>
</section>
      <section anchor="Security" title="Security Considerations">
	<t>
	  Security concerns for IS-IS are addressed in
	  <xref target="RFC5304"/> and <xref target="RFC5310"/>.
	</t>
	
	<t>TBD
	</t>
      </section>
    </middle>
  <back>
    <references title="Normative References">
      <?rfc include="reference.RFC.2119"?>
      <?rfc include='reference.RFC.5304'?> 
      <?rfc include='reference.RFC.5310'?> 
      <?rfc include='reference.RFC.8174'?> 
      <?rfc include='reference.RFC.8706'?> 
      <reference anchor="ID.draft-ginsberg-lsr-hello-capability-01" target="https://www.ietf.org/id/draft-ginsberg-lsr-hello-capability-01.txt">
        <front>
          <title>IS-IS Hello Capability</title>
          <author initials="L." surname="Ginsberg et al.">
            <organization/>
          </author>
          <date month="Sep" year="2026"/>
        </front>
      </reference>
	<reference anchor="ISO10589">
        <front>
          <title>Intermediate system to Intermediate system intra-domain
          routeing information exchange protocol for use in conjunction with
          the protocol for providing the connectionless-mode Network Service
          (ISO 8473)</title>

          <author>
            <organization abbrev="ISO">International Organization for
            Standardization</organization>
          </author>

          <date month="Nov" year="2002"/>
        </front>

        <seriesInfo name="ISO/IEC" value="10589:2002, Second Edition"/>
      </reference>
    </references>
  </back>
</rfc>
