<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="std" consensus="true" docName="draft-ietf-lsr-isis-invalid-tlv-03" indexInclude="true" ipr="trust200902" number="8918" prepTime="2020-09-24T15:05:08" scripts="Common,Latin" sortRefs="true" submissionType="IETF" symRefs="true" tocDepth="4" tocInclude="true" updates="5305, 6232" xml:lang="en">
  <link href="https://datatracker.ietf.org/doc/draft-ietf-lsr-isis-invalid-tlv-03" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc8918" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="Invalid TLV Handling in IS-IS">Invalid TLV Handling in IS-IS</title>
    <seriesInfo name="RFC" value="8918" stream="IETF"/>
    <author fullname="Les Ginsberg" initials="L." surname="Ginsberg">
      <organization showOnFrontPage="true">Cisco Systems</organization>
      <address>
        <email>ginsberg@cisco.com</email>
      </address>
    </author>
    <author fullname="Paul Wells" initials="P." surname="Wells">
      <organization showOnFrontPage="true">Cisco Systems</organization>
      <address>
        <postal>
          <street/>
          <city/>
          <region/>
          <code/>
          <country/>
        </postal>
        <phone/>
        <email>pauwells@cisco.com</email>
        <uri/>
      </address>
    </author>
    <author fullname="Tony Li" initials="T" surname="Li">
      <organization showOnFrontPage="true">Arista Networks</organization>
      <address>
        <postal>
          <street>5453 Great America Parkway</street>
          <city>Santa Clara</city>
          <region>CA</region>
          <code>95054</code>
          <country>United States of America</country>
        </postal>
        <phone/>
        <email>tony.li@tony.li</email>
        <uri/>
      </address>
    </author>
    <author fullname="Tony Przygienda" initials="T" surname="Przygienda">
      <organization showOnFrontPage="true">Juniper Networks, Inc.</organization>
      <address>
        <postal>
          <street>1194 N. Matilda Ave</street>
          <city>Sunnyvale</city>
          <region>CA</region>
          <code>94089</code>
          <country>United States of America</country>
        </postal>
        <phone/>
        <email>prz@juniper.net</email>
        <uri/>
      </address>
    </author>
    <author fullname="Shraddha Hegde" initials="S" surname="Hegde">
      <organization showOnFrontPage="true">Juniper Networks, Inc.</organization>
      <address>
        <postal>
          <street>Embassy Business Park</street>
          <city>Bangalore</city>
          <region>KA</region>
          <code>560093</code>
          <country>India</country>
        </postal>
        <phone/>
        <email>shraddha@juniper.net</email>
        <uri/>
      </address>
    </author>
    <date month="09" year="2020"/>
    <area>Routing</area>
    <workgroup>LSR Working Group</workgroup>
    <keyword>TLV</keyword>
    <keyword>IS-IS</keyword>
    <abstract pn="section-abstract">
      <t indent="0" pn="section-abstract-1">The key to the extensibility of the Intermediate System to Intermediate
      System (IS-IS) protocol has been the handling of unsupported and/or
      invalid Type-Length-Value (TLV) tuples. Although there are explicit
      statements in existing specifications, deployment experience has shown
      that there are inconsistencies in the behavior when a TLV that is
      disallowed in a particular Protocol Data Unit (PDU) is received.</t>
      <t indent="0" pn="section-abstract-2">This document discusses such cases and makes the correct behavior
      explicit in order to ensure that interoperability is maximized.</t>
      <t indent="0" pn="section-abstract-3">This document updates RFCs 5305 and 6232.</t>
    </abstract>
    <boilerplate>
      <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.1">
        <name slugifiedName="name-status-of-this-memo">Status of This Memo</name>
        <t indent="0" pn="section-boilerplate.1-1">
            This is an Internet Standards Track document.
        </t>
        <t indent="0" pn="section-boilerplate.1-2">
            This document is a product of the Internet Engineering Task Force
            (IETF).  It represents the consensus of the IETF community.  It has
            received public review and has been approved for publication by
            the Internet Engineering Steering Group (IESG).  Further
            information on Internet Standards is available in Section 2 of 
            RFC 7841.
        </t>
        <t indent="0" pn="section-boilerplate.1-3">
            Information about the current status of this document, any
            errata, and how to provide feedback on it may be obtained at
            <eref target="https://www.rfc-editor.org/info/rfc8918" brackets="none"/>.
        </t>
      </section>
      <section anchor="copyright" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.2">
        <name slugifiedName="name-copyright-notice">Copyright Notice</name>
        <t indent="0" pn="section-boilerplate.2-1">
            Copyright (c) 2020 IETF Trust and the persons identified as the
            document authors. All rights reserved.
        </t>
        <t indent="0" pn="section-boilerplate.2-2">
            This document is subject to BCP 78 and the IETF Trust's Legal
            Provisions Relating to IETF Documents
            (<eref target="https://trustee.ietf.org/license-info" brackets="none"/>) 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 Simplified BSD License text as described in
            Section 4.e of the Trust Legal Provisions and are provided without
            warranty as described in the Simplified BSD License.
        </t>
      </section>
    </boilerplate>
    <toc>
      <section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" pn="section-toc.1">
        <name slugifiedName="name-table-of-contents">Table of Contents</name>
        <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1">
          <li pn="section-toc.1-1.1">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.1"><xref derivedContent="1" format="counter" sectionFormat="of" target="section-1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-introduction">Introduction</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.1.2">
              <li pn="section-toc.1-1.1.2.1">
                <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.2.1.1"><xref derivedContent="1.1" format="counter" sectionFormat="of" target="section-1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-requirements-language">Requirements Language</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.2">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.2.1"><xref derivedContent="2" format="counter" sectionFormat="of" target="section-2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-tlv-codepoints-registry">TLV Codepoints Registry</xref></t>
          </li>
          <li pn="section-toc.1-1.3">
            <t indent="0" pn="section-toc.1-1.3.1"><xref derivedContent="3" format="counter" sectionFormat="of" target="section-3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-tlv-acceptance-in-pdus">TLV Acceptance in PDUs</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.3.2">
              <li pn="section-toc.1-1.3.2.1">
                <t indent="0" pn="section-toc.1-1.3.2.1.1"><xref derivedContent="3.1" format="counter" sectionFormat="of" target="section-3.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-handling-of-disallowed-tlvs">Handling of Disallowed TLVs in Received PDUs Other Than LSP
	Purges</xref></t>
              </li>
              <li pn="section-toc.1-1.3.2.2">
                <t indent="0" pn="section-toc.1-1.3.2.2.1"><xref derivedContent="3.2" format="counter" sectionFormat="of" target="section-3.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-special-handling-of-disallo">Special Handling of  Disallowed TLVs in Received LSP Purges</xref></t>
              </li>
              <li pn="section-toc.1-1.3.2.3">
                <t indent="0" pn="section-toc.1-1.3.2.3.1"><xref derivedContent="3.3" format="counter" sectionFormat="of" target="section-3.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-applicability-to-sub-tlvs">Applicability to Sub-TLVs</xref></t>
              </li>
              <li pn="section-toc.1-1.3.2.4">
                <t indent="0" pn="section-toc.1-1.3.2.4.1"><xref derivedContent="3.4" format="counter" sectionFormat="of" target="section-3.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-correction-to-poi-tlv-codep">Correction to POI "TLV Codepoints Registry" Entry</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.4">
            <t indent="0" pn="section-toc.1-1.4.1"><xref derivedContent="4" format="counter" sectionFormat="of" target="section-4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-tlv-validation-and-lsp-acce">TLV Validation and LSP Acceptance</xref></t>
          </li>
          <li pn="section-toc.1-1.5">
            <t indent="0" pn="section-toc.1-1.5.1"><xref derivedContent="5" format="counter" sectionFormat="of" target="section-5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-iana-considerations">IANA Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.6">
            <t indent="0" pn="section-toc.1-1.6.1"><xref derivedContent="6" format="counter" sectionFormat="of" target="section-6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-security-considerations">Security Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.7">
            <t indent="0" pn="section-toc.1-1.7.1"><xref derivedContent="7" format="counter" sectionFormat="of" target="section-7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-references">References</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.7.2">
              <li pn="section-toc.1-1.7.2.1">
                <t indent="0" pn="section-toc.1-1.7.2.1.1"><xref derivedContent="7.1" format="counter" sectionFormat="of" target="section-7.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
              </li>
              <li pn="section-toc.1-1.7.2.2">
                <t indent="0" pn="section-toc.1-1.7.2.2.1"><xref derivedContent="7.2" format="counter" sectionFormat="of" target="section-7.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.8">
            <t indent="0" pn="section-toc.1-1.8.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.a"/><xref derivedContent="" format="title" sectionFormat="of" target="name-acknowledgements">Acknowledgements</xref></t>
          </li>
          <li pn="section-toc.1-1.9">
            <t indent="0" pn="section-toc.1-1.9.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent="" format="title" sectionFormat="of" target="name-authors-addresses">Authors' Addresses</xref></t>
          </li>
        </ul>
      </section>
    </toc>
  </front>
  <middle>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-1">
      <name slugifiedName="name-introduction">Introduction</name>
      <t indent="0" pn="section-1-1">The Intermediate System to Intermediate System (IS-IS) protocol <xref target="ISO10589" format="default" sectionFormat="of" derivedContent="ISO10589"/> utilizes Type-Length-Value (TLV)
      encoding for all content in the body of Protocol Data Units (PDUs). New
      extensions to the protocol are supported by defining new TLVs. In order
      to allow protocol extensions to be deployed in a backwards compatible
      way, an implementation is required to ignore TLVs that it does not
      understand. This behavior is also applied to sub-TLVs <xref target="RFC5305" format="default" sectionFormat="of" derivedContent="RFC5305"/>, which are contained within
      TLVs.</t>
      <t indent="0" pn="section-1-2">Also essential to the correct operation of the protocol is having the
      validation of PDUs be independent from the validation of the TLVs
      contained in the PDU. PDUs that are valid must be accepted <xref target="ISO10589" format="default" sectionFormat="of" derivedContent="ISO10589"/> even if an individual TLV contained
      within that PDU is not understood or is invalid in some way (e.g.,
      incorrect syntax, data value out of range, etc.).</t>
      <t indent="0" pn="section-1-3">The set of TLVs (and sub-TLVs) that are allowed in each PDU type is
      documented in the "TLV Codepoints Registry" established by <xref target="RFC3563" format="default" sectionFormat="of" derivedContent="RFC3563"/> and updated by <xref target="RFC6233" format="default" sectionFormat="of" derivedContent="RFC6233"/> and <xref target="RFC7356" format="default" sectionFormat="of" derivedContent="RFC7356"/>.</t>
      <t indent="0" pn="section-1-4">This document is intended to clarify some aspects of existing
      specifications and, thereby, reduce the occurrence of non-conformant
      behavior seen in real-world deployments. Although behaviors specified in
      existing protocol specifications are not changed, the clarifications
      contained in this document serve as updates to <xref target="RFC5305" format="default" sectionFormat="of" derivedContent="RFC5305"/>
      (see <xref target="app-sub-tlv" format="default" sectionFormat="of" derivedContent="Section 3.3"/>) and <xref target="RFC6232" format="default" sectionFormat="of" derivedContent="RFC6232"/> (see <xref target="correct-poi" format="default" sectionFormat="of" derivedContent="Section 3.4"/>).</t>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-1.1">
        <name slugifiedName="name-requirements-language">Requirements Language</name>
        <t indent="0" pn="section-1.1-1">
    The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>",
    "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>",
    "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", 
    "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are
    to be interpreted as 
    described in BCP 14 <xref target="RFC2119" format="default" sectionFormat="of" derivedContent="RFC2119"/> <xref target="RFC8174" format="default" sectionFormat="of" derivedContent="RFC8174"/> 
    when, and only when, they appear in all capitals, as shown here.
        </t>
      </section>
    </section>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-2">
      <name slugifiedName="name-tlv-codepoints-registry">TLV Codepoints Registry</name>
      <t indent="0" pn="section-2-1"><xref target="RFC3563" format="default" sectionFormat="of" derivedContent="RFC3563"/> established the
      IANA-managed "IS-IS TLV Codepoints Registry" for recording assigned TLV
      codepoints <xref target="TLV_CODEPOINTS" format="default" sectionFormat="of" derivedContent="TLV_CODEPOINTS"/>. The
      initial contents of this registry were based on <xref target="RFC3359" format="default" sectionFormat="of" derivedContent="RFC3359"/>.</t>
      <t indent="0" pn="section-2-2">The registry includes a set of columns indicating in which PDU types
      a given TLV is allowed:</t>
      <dl newline="false" spacing="normal" indent="8" pn="section-2-3">
        <dt pn="section-2-3.1">IIH</dt>
        <dd pn="section-2-3.2">TLV is allowed in Intermediate System to Intermediate System
      Hello (IIH) PDUs (Point-to-point and LAN)</dd>
        <dt pn="section-2-3.3">LSP</dt>
        <dd pn="section-2-3.4">TLV is allowed in Link State PDUs (LSPs)</dd>
        <dt pn="section-2-3.5">SNP</dt>
        <dd pn="section-2-3.6">TLV is allowed in Sequence Number PDUs (SNPs) (Partial Sequence
      Number PDUs (PSNPs) and Complete Sequence Number PDUs (CSNPs))</dd>
        <dt pn="section-2-3.7">Purge</dt>
        <dd pn="section-2-3.8">TLV is allowed in LSP Purges <xref target="RFC6233" format="default" sectionFormat="of" derivedContent="RFC6233"/></dd>
      </dl>
      <t indent="0" pn="section-2-4">If "Y" is entered in a column, it means the TLV is allowed in the
      corresponding PDU type.</t>
      <t indent="0" pn="section-2-5">If "N" is entered in a column, it means the TLV is not allowed in the
      corresponding PDU type.</t>
    </section>
    <section anchor="TLV-Acceptance" numbered="true" toc="include" removeInRFC="false" pn="section-3">
      <name slugifiedName="name-tlv-acceptance-in-pdus">TLV Acceptance in PDUs</name>
      <t indent="0" pn="section-3-1">This section describes the correct behavior when a PDU
      that contains a TLV that is specified as disallowed in the "TLV
      Codepoints Registry" is received.</t>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-3.1">
        <name slugifiedName="name-handling-of-disallowed-tlvs">Handling of Disallowed TLVs in Received PDUs Other Than LSP
	Purges</name>
        <t indent="0" pn="section-3.1-1"><xref target="ISO10589" format="default" sectionFormat="of" derivedContent="ISO10589"/> defines the behavior
	required when a PDU is received containing a TLV that is "not
	recognised". It states (see Sections 9.5 - 9.13):</t>
        <blockquote pn="section-3.1-2">
  Any codes in a received PDU that are not recognised shall be ignored.
</blockquote>
        <t indent="0" pn="section-3.1-3">This is the model to be followed when a TLV that is disallowed is
	received. Therefore, TLVs in a PDU (other than LSP purges) that are 
        disallowed <bcp14>MUST</bcp14> be ignored and <bcp14>MUST NOT</bcp14>
	cause the PDU itself to be rejected by the receiving IS.</t>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-3.2">
        <name slugifiedName="name-special-handling-of-disallo">Special Handling of  Disallowed TLVs in Received LSP Purges</name>
        <t indent="0" pn="section-3.2-1">When purging LSPs, <xref target="ISO10589" format="default" sectionFormat="of" derivedContent="ISO10589"/>
	recommends (but does not require) the body of the LSP (i.e., all TLVs)
	be removed before generating the purge. LSP purges that have TLVs in
	the body are accepted, though any TLVs that are present are
	ignored.</t>
        <t indent="0" pn="section-3.2-2">When cryptographic authentication <xref target="RFC5304" format="default" sectionFormat="of" derivedContent="RFC5304"/> was introduced, this looseness when processing
	received purges had to be addressed in order to prevent attackers from
	being able to initiate a purge without having access to the
	authentication key. Therefore, <xref target="RFC5304" format="default" sectionFormat="of" derivedContent="RFC5304"/> imposed strict requirements on what TLVs were allowed in a
	purge (authentication only) and specified that:</t>
        <blockquote pn="section-3.2-3">
  ISes <bcp14>MUST NOT</bcp14> accept purges that contain TLVs other than the
  authentication TLV.
</blockquote>
        <t indent="0" pn="section-3.2-4">This behavior was extended by <xref target="RFC6232" format="default" sectionFormat="of" derivedContent="RFC6232"/>, which introduced the Purge Originator
	Identification (POI) TLV, and <xref target="RFC6233" format="default" sectionFormat="of" derivedContent="RFC6233"/>,
	which added the "Purge" column to the "TLV Codepoints Registry" to
	identify all the TLVs that are allowed in purges.</t>
        <t indent="0" pn="section-3.2-5">The behavior specified in <xref target="RFC5304" format="default" sectionFormat="of" derivedContent="RFC5304"/>
	is not backwards compatible with the behavior defined by <xref target="ISO10589" format="default" sectionFormat="of" derivedContent="ISO10589"/>; therefore, it can only be safely
	enabled when all nodes support cryptographic
	authentication. Similarly, the extensions defined by <xref target="RFC6232" format="default" sectionFormat="of" derivedContent="RFC6232"/> are not compatible with the
	behavior defined in <xref target="RFC5304" format="default" sectionFormat="of" derivedContent="RFC5304"/>;  
	therefore, they can only be safely enabled when all nodes support the
	extensions.</t>
        <t indent="0" pn="section-3.2-6">When new protocol behaviors are specified that are not backwards
	compatible, it is <bcp14>RECOMMENDED</bcp14> that implementations
	provide controls for their enablement. This serves to prevent
	interoperability issues and allow for non-disruptive introduction of
	the new functionality into an existing network.</t>
      </section>
      <section anchor="app-sub-tlv" numbered="true" toc="include" removeInRFC="false" pn="section-3.3">
        <name slugifiedName="name-applicability-to-sub-tlvs">Applicability to Sub-TLVs</name>
        <t indent="0" pn="section-3.3-1"><xref target="RFC5305" format="default" sectionFormat="of" derivedContent="RFC5305"/> introduced sub-TLVs,
	which are TLV tuples advertised within the body of a parent
	TLV. Registries associated with sub-TLVs are associated with the "TLV
	Codepoints Registry" and specify in which TLVs a given sub-TLV is
	allowed. <xref target="RFC5305" sectionFormat="of" section="2" format="default" derivedLink="https://rfc-editor.org/rfc/rfc5305#section-2" derivedContent="RFC5305"/> is
	updated by the following sentence:</t>
        <blockquote pn="section-3.3-2">
  As with TLVs, it is required that sub-TLVs that are disallowed
  <bcp14>MUST</bcp14> be ignored on receipt. 
</blockquote>
        <t indent="0" pn="section-3.3-3">The existing sentence in <xref target="RFC5305" sectionFormat="of" section="2" format="default" derivedLink="https://rfc-editor.org/rfc/rfc5305#section-2" derivedContent="RFC5305"/>:</t>
        <blockquote pn="section-3.3-4">
  Unknown sub-TLVs are to be ignored and skipped upon receipt.
</blockquote>
        <t indent="0" pn="section-3.3-5">is replaced by:</t>
        <blockquote pn="section-3.3-6">
  Unknown sub-TLVs <bcp14>MUST</bcp14> be ignored and skipped upon receipt.
</blockquote>
      </section>
      <section anchor="correct-poi" numbered="true" toc="include" removeInRFC="false" pn="section-3.4">
        <name slugifiedName="name-correction-to-poi-tlv-codep">Correction to POI "TLV Codepoints Registry" Entry</name>
        <t indent="0" pn="section-3.4-1">An error was introduced by <xref target="RFC6232" format="default" sectionFormat="of" derivedContent="RFC6232"/> when specifying in which PDUs the POI TLV is
	allowed. <xref target="RFC6232" sectionFormat="of" section="3" format="default" derivedLink="https://rfc-editor.org/rfc/rfc6232#section-3" derivedContent="RFC6232"/>
	states:</t>
        <blockquote pn="section-3.4-2">
  The POI TLV <bcp14>SHOULD</bcp14> be found in all purges and <bcp14>MUST NOT</bcp14> be found in LSPs with a non-zero Remaining Lifetime.
</blockquote>
        <t indent="0" pn="section-3.4-3">However, the IANA section of the same document states:</t>
        <blockquote pn="section-3.4-4">
  The additional values for this TLV should be IIH:n, LSP:y, SNP:n, and
  Purge:y.
</blockquote>
        <t indent="0" pn="section-3.4-5">The correct setting for "LSP" is "n". This document updates <xref target="RFC6232" format="default" sectionFormat="of" derivedContent="RFC6232"/> by correcting that error.</t>
        <t indent="0" pn="section-3.4-6">This document also updates the previously quoted text from <xref target="RFC6232" sectionFormat="of" section="3" format="default" derivedLink="https://rfc-editor.org/rfc/rfc6232#section-3" derivedContent="RFC6232"/> to be:</t>
        <blockquote pn="section-3.4-7">
  The POI TLV <bcp14>SHOULD</bcp14> be sent in all purges and <bcp14>MUST NOT</bcp14> be sent in LSPs with a non-zero Remaining Lifetime.
</blockquote>
      </section>
    </section>
    <section anchor="LSP_ACCEPTANCE" numbered="true" toc="include" removeInRFC="false" pn="section-4">
      <name slugifiedName="name-tlv-validation-and-lsp-acce">TLV Validation and LSP Acceptance</name>
      <t indent="0" pn="section-4-1">The correct format of a TLV and its associated sub-TLVs, if
      applicable, is defined in the document(s) that introduces each
      codepoint. The definition <bcp14>MUST</bcp14> include what action to
      take when the format/content of the TLV does not conform to the
      specification (e.g., "<bcp14>MUST</bcp14> be ignored on receipt"). When
      making use of the information encoded in a given TLV (or sub-TLV),
      receiving nodes <bcp14>MUST</bcp14> verify that the TLV conforms to the
      standard definition. This includes cases where the length of a
      TLV/sub-TLV is incorrect and/or cases where the value field does not
      conform to the defined restrictions.</t>
      <t indent="0" pn="section-4-2">However, the unit of flooding for the IS-IS Update process is an
      LSP. The presence of a TLV (or sub-TLV) with content that does not
      conform to the relevant specification <bcp14>MUST NOT</bcp14> cause the
      LSP itself to be rejected. Failure to follow this requirement will
      result in inconsistent LSP Databases on different nodes in the network
      that will compromise the correct operation of the protocol.</t>
      <t indent="0" pn="section-4-3">LSP Acceptance rules are specified in <xref target="ISO10589" format="default" sectionFormat="of" derivedContent="ISO10589"/>. Acceptance rules for LSP purges are extended by
      <xref target="RFC5304" format="default" sectionFormat="of" derivedContent="RFC5304"/> and <xref target="RFC5310" format="default" sectionFormat="of" derivedContent="RFC5310"/> and are further extended by <xref target="RFC6233" format="default" sectionFormat="of" derivedContent="RFC6233"/>.</t>
      <t indent="0" pn="section-4-4"><xref target="ISO10589" format="default" sectionFormat="of" derivedContent="ISO10589"/> also specifies the
      behavior when an LSP is not accepted.

      This behavior is <em>not</em> altered by
      extensions to the LSP Acceptance rules, i.e., regardless of the reason
      for the rejection of an LSP, the Update process on the receiving router
      takes the same action.</t>
    </section>
    <section anchor="IANA" numbered="true" toc="include" removeInRFC="false" pn="section-5">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <t indent="0" pn="section-5-1">IANA has added this document as a reference for the "TLV
      Codepoints Registry".</t>
      <t indent="0" pn="section-5-2">IANA has also modified the entry for the Purge Originator
      Identification TLV in the "TLV Codepoints Registry" to be IIH:n, LSP:n,
      SNP:n, and Purge:y.</t>
      <t indent="0" pn="section-5-3">The reference field of the Purge Originator Identification
      TLV has been updated to point to this document.</t>
    </section>
    <section anchor="Security" numbered="true" toc="include" removeInRFC="false" pn="section-6">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t indent="0" pn="section-6-1">As this document makes no changes to the protocol, there are no new
      security issues introduced.</t>
      <t indent="0" pn="section-6-2">The clarifications discussed in this document are intended to make it
      less likely that implementations will incorrectly process received LSPs,
      thereby also making it less likely that a bad actor could exploit a
      faulty implementation.</t>
      <t indent="0" pn="section-6-3">Security concerns for IS-IS are discussed in <xref target="ISO10589" format="default" sectionFormat="of" derivedContent="ISO10589"/>, <xref target="RFC5304" format="default" sectionFormat="of" derivedContent="RFC5304"/>, and <xref target="RFC5310" format="default" sectionFormat="of" derivedContent="RFC5310"/>.</t>
    </section>
  </middle>
  <back>
    <references pn="section-7">
      <name slugifiedName="name-references">References</name>
      <references pn="section-7.1">
        <name slugifiedName="name-normative-references">Normative References</name>
        <reference anchor="ISO10589" quoteTitle="true" derivedAnchor="ISO10589">
          <front>
            <title>Information technology -- Telecommunications and information exchange between systems -- 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>
            <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>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" quoteTitle="true" derivedAnchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author initials="S." surname="Bradner" fullname="S. Bradner">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="1997" month="March"/>
            <abstract>
              <t indent="0">In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC3563" target="https://www.rfc-editor.org/info/rfc3563" quoteTitle="true" derivedAnchor="RFC3563">
          <front>
            <title>Cooperative Agreement Between the ISOC/IETF and ISO/IEC Joint Technical Committee 1/Sub Committee 6 (JTC1/SC6) on IS-IS Routing Protocol Development</title>
            <author initials="A." surname="Zinin" fullname="A. Zinin">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2003" month="July"/>
            <abstract>
              <t indent="0">This document contains the text of the agreement signed between ISOC/IETF and ISO/IEC JTC1/SC6 regarding cooperative development of the IS-IS routing protocol.  The agreement includes definitions of the related work scopes for the two organizations, request for creation and maintenance of an IS-IS registry by IANA, as well as collaboration guidelines.  This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3563"/>
          <seriesInfo name="DOI" value="10.17487/RFC3563"/>
        </reference>
        <reference anchor="RFC5304" target="https://www.rfc-editor.org/info/rfc5304" quoteTitle="true" derivedAnchor="RFC5304">
          <front>
            <title>IS-IS Cryptographic Authentication</title>
            <author initials="T." surname="Li" fullname="T. Li">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="R." surname="Atkinson" fullname="R. Atkinson">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2008" month="October"/>
            <abstract>
              <t indent="0">This document describes the authentication of Intermediate System to Intermediate System (IS-IS) Protocol Data Units (PDUs) using the Hashed Message Authentication Codes - Message Digest 5 (HMAC-MD5) algorithm as found in RFC 2104.  IS-IS is specified in International Standards Organization (ISO) 10589, with extensions to support Internet Protocol version 4 (IPv4) described in RFC 1195.  The base specification includes an authentication mechanism that allows for multiple authentication algorithms.  The base specification only specifies the algorithm for cleartext passwords.  This document replaces RFC 3567.</t>
              <t indent="0">This document proposes an extension to that specification that allows the use of the HMAC-MD5 authentication algorithm to be used in conjunction with the existing authentication mechanisms.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5304"/>
          <seriesInfo name="DOI" value="10.17487/RFC5304"/>
        </reference>
        <reference anchor="RFC5305" target="https://www.rfc-editor.org/info/rfc5305" quoteTitle="true" derivedAnchor="RFC5305">
          <front>
            <title>IS-IS Extensions for Traffic Engineering</title>
            <author initials="T." surname="Li" fullname="T. Li">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="H." surname="Smit" fullname="H. Smit">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2008" month="October"/>
            <abstract>
              <t indent="0">This document describes extensions to the Intermediate System to Intermediate System (IS-IS) protocol to support Traffic Engineering (TE).  This document extends the IS-IS protocol by specifying new information that an Intermediate System (router) can place in Link State Protocol Data Units (LSP).  This information describes additional details regarding the state of the network that are useful for traffic engineering computations.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5305"/>
          <seriesInfo name="DOI" value="10.17487/RFC5305"/>
        </reference>
        <reference anchor="RFC5310" target="https://www.rfc-editor.org/info/rfc5310" quoteTitle="true" derivedAnchor="RFC5310">
          <front>
            <title>IS-IS Generic Cryptographic Authentication</title>
            <author initials="M." surname="Bhatia" fullname="M. Bhatia">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="V." surname="Manral" fullname="V. Manral">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="T." surname="Li" fullname="T. Li">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="R." surname="Atkinson" fullname="R. Atkinson">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="R." surname="White" fullname="R. White">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M." surname="Fanto" fullname="M. Fanto">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2009" month="February"/>
            <abstract>
              <t indent="0">This document proposes an extension to Intermediate System to Intermediate System (IS-IS) to allow the use of any cryptographic authentication algorithm in addition to the already-documented authentication schemes, described in the base specification and RFC 5304.  IS-IS is specified in International Standards Organization (ISO) 10589, with extensions to support Internet Protocol version 4 (IPv4) described in RFC 1195.</t>
              <t indent="0">Although this document has been written specifically for using the Hashed Message Authentication Code (HMAC) construct along with the Secure Hash Algorithm (SHA) family of cryptographic hash functions, the method described in this document is generic and can be used to extend IS-IS to support any cryptographic hash function in the future.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5310"/>
          <seriesInfo name="DOI" value="10.17487/RFC5310"/>
        </reference>
        <reference anchor="RFC6232" target="https://www.rfc-editor.org/info/rfc6232" quoteTitle="true" derivedAnchor="RFC6232">
          <front>
            <title>Purge Originator Identification TLV for IS-IS</title>
            <author initials="F." surname="Wei" fullname="F. Wei">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="Y." surname="Qin" fullname="Y. Qin">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="Z." surname="Li" fullname="Z. Li">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="T." surname="Li" fullname="T. Li">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="J." surname="Dong" fullname="J. Dong">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2011" month="May"/>
            <abstract>
              <t indent="0">At present, an IS-IS purge does not contain any information identifying the Intermediate System (IS) that generates the purge. This makes it difficult to locate the source IS.</t>
              <t indent="0">To address this issue, this document defines a TLV to be added to purges to record the system ID of the IS generating it.  Since normal Link State Protocol Data Unit (LSP) flooding does not change LSP contents, this TLV should propagate with the purge.</t>
              <t indent="0">This document updates RFC 5301, RFC 5304, and RFC 5310.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6232"/>
          <seriesInfo name="DOI" value="10.17487/RFC6232"/>
        </reference>
        <reference anchor="RFC6233" target="https://www.rfc-editor.org/info/rfc6233" quoteTitle="true" derivedAnchor="RFC6233">
          <front>
            <title>IS-IS Registry Extension for Purges</title>
            <author initials="T." surname="Li" fullname="T. Li">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="L." surname="Ginsberg" fullname="L. Ginsberg">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2011" month="May"/>
            <abstract>
              <t indent="0">IANA maintains the "IS-IS TLV Codepoints" registry.  This registry documents which TLVs can appear in different types of IS-IS Protocol Data Units (PDUs), but does not document which TLVs can be found in zero Remaining Lifetime Link State PDUs (LSPs), a.k.a. purges.  This document extends the existing registry to record the set of TLVs that are permissible in purges and updates the rules for generating and processing purges in the presence of authentication.  This document updates RFC 3563, RFC 5304, and RFC 5310.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6233"/>
          <seriesInfo name="DOI" value="10.17487/RFC6233"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" quoteTitle="true" derivedAnchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="May"/>
            <abstract>
              <t indent="0">RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="TLV_CODEPOINTS" target="https://www.iana.org/assignments/isis-tlv-codepoints/" quoteTitle="true" derivedAnchor="TLV_CODEPOINTS">
          <front>
            <title>IS-IS TLV Codepoints</title>
            <author>
              <organization showOnFrontPage="true">IANA</organization>
            </author>
          </front>
        </reference>
      </references>
      <references pn="section-7.2">
        <name slugifiedName="name-informative-references">Informative References</name>
        <reference anchor="RFC3359" target="https://www.rfc-editor.org/info/rfc3359" quoteTitle="true" derivedAnchor="RFC3359">
          <front>
            <title>Reserved Type, Length and Value (TLV) Codepoints in Intermediate System to Intermediate System</title>
            <author initials="T." surname="Przygienda" fullname="T. Przygienda">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2002" month="August"/>
          </front>
          <seriesInfo name="RFC" value="3359"/>
          <seriesInfo name="DOI" value="10.17487/RFC3359"/>
        </reference>
        <reference anchor="RFC7356" target="https://www.rfc-editor.org/info/rfc7356" quoteTitle="true" derivedAnchor="RFC7356">
          <front>
            <title>IS-IS Flooding Scope Link State PDUs (LSPs)</title>
            <author initials="L." surname="Ginsberg" fullname="L. Ginsberg">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S." surname="Previdi" fullname="S. Previdi">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="Y." surname="Yang" fullname="Y. Yang">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2014" month="September"/>
            <abstract>
              <t indent="0">Intermediate System to Intermediate System (IS-IS) provides efficient and reliable flooding of information to its peers; however, the current flooding scopes are limited to either area scope or domain scope.  There are existing use cases where support of other flooding scopes is desirable.  This document defines new Protocol Data Units (PDUs) that provide support for new flooding scopes as well as additional space for advertising information targeted for the currently supported flooding scopes.  This document also defines extended Type-Length-Values (TLVs) and sub-TLVs that are encoded using 16-bit fields for Type and Length.</t>
              <t indent="0">The protocol extensions defined in this document are not backwards compatible with existing implementations and so must be deployed with care.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7356"/>
          <seriesInfo name="DOI" value="10.17487/RFC7356"/>
        </reference>
      </references>
    </references>
    <section anchor="Acknowledgements" numbered="false" toc="include" removeInRFC="false" pn="section-appendix.a">
      <name slugifiedName="name-acknowledgements">Acknowledgements</name>
      <t indent="0" pn="section-appendix.a-1">The authors would like to thank <contact fullname="Alvaro       Retana"/>.</t>
    </section>
    <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.b">
      <name slugifiedName="name-authors-addresses">Authors' Addresses</name>
      <author fullname="Les Ginsberg" initials="L." surname="Ginsberg">
        <organization showOnFrontPage="true">Cisco Systems</organization>
        <address>
          <email>ginsberg@cisco.com</email>
        </address>
      </author>
      <author fullname="Paul Wells" initials="P." surname="Wells">
        <organization showOnFrontPage="true">Cisco Systems</organization>
        <address>
          <postal>
            <street/>
            <city/>
            <region/>
            <code/>
            <country/>
          </postal>
          <phone/>
          <email>pauwells@cisco.com</email>
          <uri/>
        </address>
      </author>
      <author fullname="Tony Li" initials="T" surname="Li">
        <organization showOnFrontPage="true">Arista Networks</organization>
        <address>
          <postal>
            <street>5453 Great America Parkway</street>
            <city>Santa Clara</city>
            <region>CA</region>
            <code>95054</code>
            <country>United States of America</country>
          </postal>
          <phone/>
          <email>tony.li@tony.li</email>
          <uri/>
        </address>
      </author>
      <author fullname="Tony Przygienda" initials="T" surname="Przygienda">
        <organization showOnFrontPage="true">Juniper Networks, Inc.</organization>
        <address>
          <postal>
            <street>1194 N. Matilda Ave</street>
            <city>Sunnyvale</city>
            <region>CA</region>
            <code>94089</code>
            <country>United States of America</country>
          </postal>
          <phone/>
          <email>prz@juniper.net</email>
          <uri/>
        </address>
      </author>
      <author fullname="Shraddha Hegde" initials="S" surname="Hegde">
        <organization showOnFrontPage="true">Juniper Networks, Inc.</organization>
        <address>
          <postal>
            <street>Embassy Business Park</street>
            <city>Bangalore</city>
            <region>KA</region>
            <code>560093</code>
            <country>India</country>
          </postal>
          <phone/>
          <email>shraddha@juniper.net</email>
          <uri/>
        </address>
      </author>
    </section>
  </back>
</rfc>
