<?xml version="1.0" encoding="utf-8"?>
<?xml-model href="rfc7991bis.rnc"?>  <!-- Required for schema validation and schema-aware editing -->
<!-- <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?> -->
<!-- This third-party XSLT can be enabled for direct transformations in XML processors, including most browsers -->


<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<!-- If further character entities are required then they should be added to the DOCTYPE above.
     Use of an external entity file is not recommended. -->

<rfc
  xmlns:xi="http://www.w3.org/2001/XInclude"
  category="info"
  docName="draft-hu-isis-process-verification-00"
  ipr="trust200902"
  obsoletes=""
  updates=""
  submissionType="IETF"
  xml:lang="en"
  version="3">

  <front>
    <title abbrev="draft-hu-isis-process-verification-00"> IS-IS Process ID Verification
    </title>
    <!--  [REPLACE/DELETE] abbrev. The abbreviated title is required if the full title is longer than 39 characters -->

    <seriesInfo name="Internet-Draft" value="draft-hu-isis-process-verification-00"/>

    <author fullname="Zehua Hu" initials="Zehua" role="editor" surname="Hu">
      <organization>China Telecom</organization>
      <address>
        <postal>
          <street>109, West Zhongshan Road, Tianhe District</street>
          <city>Guangzhou</city>
          <region>Guangzhou</region>
          <code>510000</code>
          <country>CN</country>
        </postal>
        <email>huzh2@chinatelecom.cn</email>
      </address>
    </author>

    <author fullname="Jiayuan Hu" initials="Jiayuan" role="editor" surname="Hu">
      <organization>China Telecom</organization>
      <address>
        <postal>
          <street>109, West Zhongshan Road, Tianhe District</street>
          <city>Guangzhou</city>
          <region>Guangzhou</region>
          <code>510000</code>
          <country>CN</country>
        </postal>
        <email>hujy5@chinatelecom.cn</email>
      </address>
    </author>

    <date year="2026"/>

    <area>Routing</area>
    <workgroup>Routing Area Working Group</workgroup>
    <!-- "Internet Engineering Task Force" is fine for individual submissions.  If this element is 
          not present, the default is "Network Working Group", which is used by the RFC Editor as 
          a nod to the history of the RFC Series. -->

    <keyword>RFC</keyword>
    <!-- [REPLACE/DELETE]. Multiple allowed.  Keywords are incorporated into HTML output files for 
         use by search engines. -->

    <abstract>
      <t>
        In IS-IS deployments, the process identifier (process ID) is used on a local router to distinguish and manage
        different IS-IS protocol instances. Process ID is local to the router and is not transmitted to neighbors,
        providing operational flexibility. However, because the process ID is also used to implement route redistribution
        and specify administrative tags for fine-grained control, its misconfiguration can lead to severe impacts
        (e.g., routing loops or black holes) with difficult troubleshooting.
      </t>
      <t>
        To address this problem, network operators typically deploy a consistent process ID on both ends of a link
        within the same domain, to reduce configuration complexity. In this context, to avoid the misconfiguration
        of the IS-IS process ID, this document introduces two optional approaches for process ID verification. When
        process ID verification is enabled, an IS-IS adjacency can be established only when the process identifiers at
        both ends of the link match.
      </t>
    </abstract>
 
  </front>


  <middle>
    
    <section>
      <name>Introduction</name>
      <t>
        In IS-IS deployments, the concept of a local process identifier (process ID) is introduced at the implementation
        level to distinguish and manage multiple IS-IS protocol instances running on a single router. According to
        <xref target="RFC1195"/>, which specifies the use of OSI IS-IS for routing in TCP/IP and dual environments, a router may run
        one or more IS-IS processes, each associated with a separate set of routing databases and protocol operations.
        The process ID is a locally significant administrative identifier; it is not transmitted to neighboring routers
        and does not appear in any IS-IS Protocol Data Unit (PDU) defined by <xref target="RFC1195"/> or its subsequent extensions.
      </t>
      <t>
        The IS-IS process ID serves several operational purposes beyond merely identifying a protocol instance. It is
        employed to implement route redistribution policies, where routes learned from one routing protocol instance
        are imported into the IS-IS process identified by a given process ID. The IS-IS process ID is also used in
        conjunction with administrative tags, as defined in <xref target="RFC5130"/>, to specify fine-grained control over route
        selection and policy enforcement. Because the process ID is a local configuration artifact that influences
        multiple operational aspects, its misconfiguration can have severe consequences.
      </t>
      <t>
        To address this problem, network operators commonly deploy a consistent process ID on both ends of a link
        within the same domain. Additionally, operators typically configure separate IS-IS processes for different
        network layers (e.g., access vs. aggregation), preventing route changes in one layer from propagating across
        the entire network and thus reducing the overall flooding volume. This operational practice is recommended in
        network design guidelines and deployment examples, where routers in the same IS-IS routing domain are configured
        with identical process identifiers to ensure consistent routing behavior and simplify troubleshooting.
      </t>
      <t>
        In this context, this document introduces two optional, backward-compatible mechanisms for IS-IS process ID
        verification:
      </t>
      <t>
        1. Mechanism 1 (Section 3): A new optional TLV in the IS-IS Hello PDU, called the Process-ID TLV, which carries
        a configurable process identifier value.
      </t>
      <t>
        2. Mechanism 2 (Section 4): An extension of the existing IID-TLV <xref target="RFC8202"/>, reusing the IID=0 value (currently
        reserved for legacy/non-multi-instance operation) to carry the process identifier information.
      </t>
      <t>
        When process ID verification is enabled via either mechanism, an IS-IS adjacency can be established only when
        the process identifiers at both ends of the link match. This enables early detection of configuration
        mismatches, prevents unintended adjacencies, and reduces the operational risk of routing loops and forwarding
        black holes.
      </t>
    </section>
      
    <section title="Conventions Used in This Document">
      <section>
        <name>Requirements Language</name>
        <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 BCP 14 <xref target="RFC2119"/>
          <xref target="RFC8174"/> when, and only when, they appear in
          all capitals, as shown here.</t>
      </section>
    </section>
      <!-- [CHECK] The 'Requirements Language' section is optional -->

    <section title="Solution 1: Process-ID TLV">
      <section>
        <name>TLV Format</name>
        <t>
          The Process-ID TLV is carried in the IS-IS Hello (IIH) PDU (both Level 1 and Level 2). It is an optional TLV,
          meaning that a router not supporting this extension will silently ignore it in accordance with <xref target="RFC1195"/>.
        </t>
        <t>
          The TLV is formatted as follows:
        </t>
        <figure>
          <name>TLV Format</name>
          <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      |    Length     |         Process-ID            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
            ]]>
          </artwork>
        </figure>
        <t>
          Type: TBD by IANA (suggested value: TLV 245, subject to IANA assignment)
        </t>
        <t>
          Length: 2 octets
        </t>
        <t>
          Process-ID: 16-bit unsigned integer. A value of 0 is reserved and MUST NOT be used for process identification.
        </t>
      </section>
        <section>
          <name>Procedure</name>
          <t>
            This mechanism applies when two routers that each have an IS-IS Process ID configured are connected over a link.
          </t>
          <section>
            <name>Sending</name>
            <t>
              when the router enables process ID verification,  it MUST include the Process-ID TLV in IIH PDU.
            </t>
          </section>
          <section>
            <name>Receiving</name>
            <t>
              Upon receiving an IIH PDU that contains a Process-ID TLV:
            </t>

            <t>              
              1. If the receiving router enables this mechanism:
            </t>
              <t>
                *    (1)If received_Process-ID == local_Process-ID, adjacency establishment MAY proceed normally.
              </t>
            <t>
                *    (2)If received_Process-ID != local_Process-ID, the router MUST suppress adjacency formation. The
                event SHOULD be logged.
              </t>
            <t>
              1. If the receiving router does not enable this extension, it MUST silently ignore the TLV.
            </t>
          </section>
        </section>
        <section>
          <name>Backward Compatibility</name>
          <t>
            The Process-ID TLV is an optional TLV. Routers that do not recognize it will ignore it without any impact
            on adjacency formation.
          </t>
        </section>
      </section>
      
    <section>
      <name>Solution 2: Extended IID-TLV Utilization</name>
      <section>
        <name>Background</name>
        <t>
          <xref target="RFC8202"/> defines the IID-TLV for multi-instance IS-IS. The IID-TLV is a TLV (Type 7, Length 2)
          carried in all IS-IS PDUs. Its Value field is a 2-octet Instance Identifier (IID) that uniquely identifies
          the IS-IS instance to which the PDU belongs <xref target="RFC8202"/>.When the IID-TLV is absent or the IID
          value is 0, it indicates that the PDU belongs to the traditional (non-multi-instance) IS-IS process <xref target="RFC8202"/>.
        </t>
      </section>

      <section>
        <name>Rationale: Multi-Instance Scenarios Are Already Protected</name>
        <t>
          In multi-instance deployments (IID > 0), the IID itself provides inherent adjacency verification: routers only
          form instance-specific adjacencies with neighbors sharing the same IID <xref target="RFC8202"/>. When a
          router's interfaces belonging to different layers (e.g., access vs. aggregation) are configured with different
          IS-IS process IDs and different Instance IDs. This dual-level mismatch provides built-in protection:
        </t>
        <t>
          Case 1: Process ID misconfigured but Instance ID mismatched: if a operator accidentally configures the same
          process ID on two interfaces that should belong to different layers, different Instance IDs will still prevent
          the two routing domains from merging. The LSPs from one instance will be ignored by the other because their
          Instance IDs do not match.
        </t>
        <t>
          Case 2: Both Process ID and Instance ID are misconfigured as the same values on interfaces belonging to two
          different layers: In this situation, the router's Instance ID will not match the Instance ID of the neighboring
          router on the other end of the link. As a result, the IS-IS adjacency cannot be established at all. No routes
          are exchanged, and the intended layer-isolation is still preserved.
        </t>

      </section>

      <section>
        <name>Extended Semantics for IID=0</name>
        <t>
          Based on the analysis in the previous section, the scope of process ID verification should be limited to
           non-multi-instance deployments. Therefore, the IID-TLV defined in <xref target="RFC8202"/> is reused as follows in this document:
        </t>
        <t>
          1. If the Process ID verification function is enabled on a router, and the deployment is in non-multi-instance mode, the router MUST 
          include the IID-TLV in its IIH PDUs, and set the IID field to the configured Process ID value for adjacency verification purposes.
        </t>
        <t>
          2. If the deployment is in multi-instance mode, the IID field MUST carry the Instance ID as specified in <xref target="RFC8202"/>; 
          the Process ID verification function does not apply in this mode.
        </t>
       
      </section>

      <section>
        <name>Procedure</name>
          <t>
            This mechanism applies when two routers that each have an IS-IS Process ID configured are connected over a link.
          </t>
        <section>
          <name>Sending</name>
          <t>
            The sending router enables the process ID verification function:
          </t>
          <t>1. If the router operates in non-multi-instance mode: MUST set the IID field in its IIH PDUs to the
            configured Process ID value.
          </t>
          <t>
            2. If the router operates in multi-instance mode (IID > 0): MUST set the IID field in all its IIH PDUs to its
            configured Instance ID value (1-65535), as defined in <xref target="RFC8202"/>.
          </t>
        </section>

        <section>
          <name>Receiving</name>
          <t>
            Upon receiving an IIH PDU that contains a IID-TLV:
          </t>
          <t>
            1. If the receiving router enables this mechanism and is in non-multi-instance mode:
          </t>
          <t>
            *    (1)If received_IID == local_Process_ID, adjacency establishment MAY proceed normally.
          </t>
          <t>
            *    (2)If received_IID != local_Process_ID, the router MUST suppress adjacency formation. The event SHOULD be logged.
          </t>
          <t>
            2. If the receiving router enables this mechanism but is in multi-instance mode (IID > 0), the IID field is interpreted as per <xref target="RFC8202"/>.
          </t>
          <t>
            3. If the receiving router does not enable this mechanism, it MUST silently ignore the IID-TLV. 
          </t>
        </section>
      </section>
      <section>
        <name>Backward Compatibility</name>
        <t>
          Routers that do not support the multi-instance extension as per <xref target="RFC8202"/> will not process IID-TLV. Therefore,
          this mechanism is only effective on routers that support <xref target="RFC8202"/>. However, since the IID-TLV is already
          present in all PDU headers in multi-instance-capable deployments, no additional TLV space is consumed.
        </t>
      </section>
    </section>
    
    <section anchor="IANA">
    <!-- All drafts are required to have an IANA considerations section. See RFC 8126 for a guide.-->
      <name>IANA Considerations</name>
      <section>
        <name>Solution 1</name>
        <t>
          IANA is requested to assign a new TLV type code from the IS-IS Top-Level TLV Codepoints registry:
        </t>
        <figure>
          <artwork align="left"><![CDATA[
   Value          Description         Reference
   -------------- ------------------- ---------------------------
   TBD            Process-ID TLV      Section 3 of this document

]]></artwork>
        </figure>
      </section>
      <section>
        <name>Solution 2</name>
        <t>
          No new IANA assignments are required for Solution 2, as it reuses the existing IID-TLV code point.
        </t>
      </section>
    </section>
    
    <section anchor="Security">
      <!-- All drafts are required to have a security considerations section. See RFC 3552 for a guide. -->
      <name>Security Considerations</name>
      <t>
        TBD
      </t>
    </section>
    
    <!-- NOTE: The Acknowledgements and Contributors sections are at the end of this template -->
  </middle>

  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.1195.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5130.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8202.xml"/>
        <!-- xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5304.xml"/-->
        <!-- The recommended and simplest way to include a well known reference -->
        
      </references>
    </references>
    
    <section anchor="Contributors" numbered="false">
      <!-- [REPLACE/DELETE] a Contributors section is optional -->
      <name>Contributors</name>
      <t>Thanks to all the contributors.</t>
      <!-- [CHECK] it is optional to add a <contact> record for some or all contributors -->
    </section>
    
 </back>
</rfc>
