<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="exp" docName="draft-ietf-6man-comp-rtg-hdr-10" number="9631" consensus="true" ipr="trust200902" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" tocDepth="3" symRefs="true" sortRefs="true" prepTime="2024-08-26T22:09:27" indexInclude="true" scripts="Common,Latin">
  <link href="https://datatracker.ietf.org/doc/draft-ietf-6man-comp-rtg-hdr-10" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc9631" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="IPv6 Compact Routing Header">The IPv6 Compact Routing Header (CRH)</title>
    <seriesInfo name="RFC" value="9631" stream="IETF"/>
    <author fullname="Ron Bonica" initials="R." surname="Bonica">
      <organization showOnFrontPage="true">Juniper Networks</organization>
      <address>
        <postal>
          <street>2251 Corporate Park Drive</street>
          <city>Herndon</city>
          <code>20171</code>
          <region>VA</region>
          <country>United States of America</country>
        </postal>
        <email>rbonica@juniper.net</email>
      </address>
    </author>
    <author fullname="Yuji Kamite" initials="Y." surname="Kamite">
      <organization showOnFrontPage="true">NTT Communications Corporation</organization>
      <address>
        <postal>
          <street>3-4-1 Shibaura, Minato-ku</street>
          <region>Tokyo</region>
          <code>108-8118</code>
          <country>Japan</country>
        </postal>
        <email>y.kamite@ntt.com</email>
      </address>
    </author>
    <author fullname="Andrew Alston" initials="A." surname="Alston">
      <organization showOnFrontPage="true">Alston Networks</organization>
      <address>
        <postal>
          <city>Nairobi</city>
          <country>Kenya</country>
        </postal>
        <email>aa@alstonnetworks.net</email>
      </address>
    </author>
    <author fullname="Daniam Henriques" initials="D." surname="Henriques">
      <organization showOnFrontPage="true">Liquid Telecom</organization>
      <address>
        <postal>
          <city>Johannesburg</city>
          <country>South Africa</country>
        </postal>
        <email>daniam.henriques@liquidtelecom.com</email>
      </address>
    </author>
    <author fullname="Luay Jalil" initials="L." surname="Jalil">
      <organization showOnFrontPage="true">Verizon</organization>
      <address>
        <postal>
          <city>Richardson</city>
          <region>TX</region>
          <country>United States of America</country>
        </postal>
        <email>luay.jalil@one.verizon.com</email>
      </address>
    </author>
    <date month="08" year="2024"/>
    <area>INT</area>
    <workgroup>6man</workgroup>
    <keyword>IPv6</keyword>
    <keyword>Routing header</keyword>
    <abstract pn="section-abstract">
      <t indent="0" pn="section-abstract-1">This document describes an experiment in which two new IPv6 Routing
      headers are implemented and deployed. Collectively, they are called the
      Compact Routing Header (CRH). Individually, they are called CRH-16 and
      CRH-32.</t>
      <t indent="0" pn="section-abstract-2">One purpose of this experiment is to demonstrate that the CRH can be
      implemented and deployed in a production network. Another purpose is to
      demonstrate that the security considerations described in this
      document can be addressed with Access Control Lists (ACLs). Finally, this
      document encourages replication of the experiment.</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 document is not an Internet Standards Track specification; it is
            published for examination, experimental implementation, and
            evaluation.
        </t>
        <t indent="0" pn="section-boilerplate.1-2">
            This document defines an Experimental Protocol for the Internet
            community.  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).  Not all documents
            approved by the IESG are candidates for any level of Internet
            Standard; see 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/rfc9631" 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) 2024 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 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.
        </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>
          </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-requirements-language">Requirements Language</xref></t>
          </li>
          <li pn="section-toc.1-1.3">
            <t indent="0" keepWithNext="true" 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-the-compact-routing-header-">The Compact Routing Header (CRH)</xref></t>
          </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-the-crh-forwarding-informat">The CRH  Forwarding Information Base (CRH-FIB)</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-processing-rules">Processing Rules</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.5.2">
              <li pn="section-toc.1-1.5.2.1">
                <t indent="0" pn="section-toc.1-1.5.2.1.1"><xref derivedContent="5.1" format="counter" sectionFormat="of" target="section-5.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-computing-minimum-crh-lengt">Computing Minimum CRH Length</xref></t>
              </li>
            </ul>
          </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-mutability">Mutability</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-applications-and-crh-sids">Applications and CRH SIDs</xref></t>
          </li>
          <li pn="section-toc.1-1.8">
            <t indent="0" pn="section-toc.1-1.8.1"><xref derivedContent="8" format="counter" sectionFormat="of" target="section-8"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-operational-considerations">Operational Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.9">
            <t indent="0" pn="section-toc.1-1.9.1"><xref derivedContent="9" format="counter" sectionFormat="of" target="section-9"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-textual-representations">Textual Representations</xref></t>
          </li>
          <li pn="section-toc.1-1.10">
            <t indent="0" pn="section-toc.1-1.10.1"><xref derivedContent="10" format="counter" sectionFormat="of" target="section-10"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-security-considerations">Security Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.11">
            <t indent="0" pn="section-toc.1-1.11.1"><xref derivedContent="11" format="counter" sectionFormat="of" target="section-11"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-experimental-results">Experimental Results</xref></t>
          </li>
          <li pn="section-toc.1-1.12">
            <t indent="0" pn="section-toc.1-1.12.1"><xref derivedContent="12" format="counter" sectionFormat="of" target="section-12"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-iana-considerations">IANA Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.13">
            <t indent="0" pn="section-toc.1-1.13.1"><xref derivedContent="13" format="counter" sectionFormat="of" target="section-13"/>. <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.13.2">
              <li pn="section-toc.1-1.13.2.1">
                <t indent="0" pn="section-toc.1-1.13.2.1.1"><xref derivedContent="13.1" format="counter" sectionFormat="of" target="section-13.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
              </li>
              <li pn="section-toc.1-1.13.2.2">
                <t indent="0" pn="section-toc.1-1.13.2.2.1"><xref derivedContent="13.2" format="counter" sectionFormat="of" target="section-13.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.14">
            <t indent="0" pn="section-toc.1-1.14.1"><xref derivedContent="Appendix A" format="default" sectionFormat="of" target="section-appendix.a"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-crh-processing-examples">CRH Processing Examples</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.14.2">
              <li pn="section-toc.1-1.14.2.1">
                <t indent="0" pn="section-toc.1-1.14.2.1.1"><xref derivedContent="A.1" format="counter" sectionFormat="of" target="section-appendix.a.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-the-crh-sid-list-contains-o">The CRH SID list contains one entry for each segment in the path.</xref></t>
              </li>
              <li pn="section-toc.1-1.14.2.2">
                <t indent="0" pn="section-toc.1-1.14.2.2.1"><xref derivedContent="A.2" format="counter" sectionFormat="of" target="section-appendix.a.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-the-crh-sid-list-omits-the-">The CRH SID list omits the first entry in the path.</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.15">
            <t indent="0" pn="section-toc.1-1.15.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent="" format="title" sectionFormat="of" target="name-acknowledgements">Acknowledgements</xref></t>
          </li>
          <li pn="section-toc.1-1.16">
            <t indent="0" pn="section-toc.1-1.16.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.c"/><xref derivedContent="" format="title" sectionFormat="of" target="name-contributors">Contributors</xref></t>
          </li>
          <li pn="section-toc.1-1.17">
            <t indent="0" pn="section-toc.1-1.17.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.d"/><xref derivedContent="" format="title" sectionFormat="of" target="name-authors-addresses">Authors' Addresses</xref></t>
          </li>
        </ul>
      </section>
    </toc>
  </front>
  <middle>
    <section anchor="Intro" numbered="true" toc="include" removeInRFC="false" pn="section-1">
      <name slugifiedName="name-introduction">Introduction</name>
      <t indent="0" pn="section-1-1">IPv6 <xref target="RFC8200" format="default" sectionFormat="of" derivedContent="RFC8200"/> source nodes use Routing headers
      to specify the path that a packet takes to its destination(s). The IETF has
      defined several Routing Types; see <xref target="IANA-RT" format="default" sectionFormat="of" derivedContent="IANA-RT"/>. This
      document defines two new Routing Types. Collectively, they are
      called the Compact Routing Header (CRH). Individually, they are called
      CRH-16 and CRH-32.</t>
      <t indent="0" pn="section-1-2">The CRH allows IPv6 source nodes to specify the path that a packet
      takes to its destination. The CRH can be encoded in relatively few
      bytes. The following are reasons for encoding the CRH in as few bytes as
      possible:</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-1-3">
        <li pn="section-1-3.1">
          <t indent="0" pn="section-1-3.1.1"> Many forwarders based on Application-Specific Integrated
          Circuits (ASICs) copy headers from buffer memory to on-chip
          memory. As header sizes increase, so does the cost of this copy.</t>
        </li>
        <li pn="section-1-3.2">
          <t indent="0" pn="section-1-3.2.1">Because Path MTU Discovery (PMTUD) <xref target="RFC8201" format="default" sectionFormat="of" derivedContent="RFC8201"/> is not entirely reliable, many IPv6 hosts
          refrain from sending packets larger than the IPv6 minimum link MTU
          (i.e., 1280 bytes).  When packets are small, the overhead imposed by
          large Routing headers is excessive.</t>
        </li>
      </ul>
      <t indent="0" pn="section-1-4">This document describes an experiment with the following purposes:</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-1-5">
        <li pn="section-1-5.1">
          <t indent="0" pn="section-1-5.1.1">To demonstrate that the CRH can be implemented and deployed</t>
        </li>
        <li pn="section-1-5.2">
          <t indent="0" pn="section-1-5.2.1">To demonstrate that the security considerations described in
          this document can be addressed with ACLs</t>
        </li>
        <li pn="section-1-5.3">
          <t indent="0" pn="section-1-5.3.1">To encourage replication of the experiment</t>
        </li>
      </ul>
    </section>
    <section anchor="ReqLang" numbered="true" toc="include" removeInRFC="false" pn="section-2">
      <name slugifiedName="name-requirements-language">Requirements Language</name>
      <t indent="0" pn="section-2-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 numbered="true" toc="include" removeInRFC="false" pn="section-3">
      <name slugifiedName="name-the-compact-routing-header-">The Compact Routing Header (CRH)</name>
      <t indent="0" pn="section-3-1">Both CRH versions (i.e., CRH-16 and CRH-32) contain the following
      fields:</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-3-2">
        <li pn="section-3-2.1">Next Header, as defined in <xref target="RFC8200" format="default" sectionFormat="of" derivedContent="RFC8200"/></li>
        <li pn="section-3-2.2">Hdr Ext Len, as defined in <xref target="RFC8200" format="default" sectionFormat="of" derivedContent="RFC8200"/></li>
        <li pn="section-3-2.3">Routing Type, as defined in <xref target="RFC8200" format="default" sectionFormat="of" derivedContent="RFC8200"/> (CRH-16 value is 5, and CRH-32 value is 6.)</li>
        <li pn="section-3-2.4">Segments Left, as defined in <xref target="RFC8200" format="default" sectionFormat="of" derivedContent="RFC8200"/></li>
        <li pn="section-3-2.5">type-specific data, as described in <xref target="RFC8200" format="default" sectionFormat="of" derivedContent="RFC8200"/></li>
      </ul>
      <t indent="0" pn="section-3-3">In the CRH, the type-specific data field contains a list of CRH Segment
      Identifiers (CRH SIDs). Each CRH SID identifies an entry in the CRH Forwarding Information Base (CRH-FIB) (<xref target="crh-fib" format="default" sectionFormat="of" derivedContent="Section 4"/>). Each
      CRH-FIB entry identifies an interface on the path that the packet takes
      to its destination.</t>
      <t indent="0" pn="section-3-4">CRH SIDs are listed in reverse order. So, the first CRH SID in the list
      represents the final interface in the path. Because CRH SIDs are listed
      in reverse order, the Segments Left field can be used as an index into
      the CRH SID list. In this document, the "current CRH SID" is the CRH SID list entry
      referenced by the Segments Left field.</t>
      <t indent="0" pn="section-3-5">The first CRH SID in the path is omitted from the list unless there
      is some reason to preserve it. See <xref target="Examples" format="default" sectionFormat="of" derivedContent="Appendix A"> </xref> for an example.</t>
      <t indent="0" pn="section-3-6">In the CRH-16 (<xref target="CRHFig16" format="default" sectionFormat="of" derivedContent="Figure 1"/>),
      each CRH SID is encoded in 16 bits. In the CRH-32 (<xref target="CRHFig32" format="default" sectionFormat="of" derivedContent="Figure 2"/>), each CRH SID is encoded in
      32 bits.</t>
      <t indent="0" pn="section-3-7">In all cases, the CRH <bcp14>MUST</bcp14> end on a 64-bit boundary. So, the type-specific data field <bcp14>MUST</bcp14> be padded with zeros if the CRH would otherwise
      not end on a 64-bit boundary.</t>
      <figure anchor="CRHFig16" align="left" suppress-title="false" pn="figure-1">
        <name slugifiedName="name-crh-16">CRH-16</name>
        <artwork name="" type="" align="left" alt="" pn="section-3-8.1">
   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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |  Next Header  |  Hdr Ext Len  | Routing Type  | Segments Left |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |             SID[0]            |          SID[1]               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-|
  |                          .........
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
</artwork>
      </figure>
      <figure anchor="CRHFig32" align="left" suppress-title="false" pn="figure-2">
        <name slugifiedName="name-crh-32">CRH-32</name>
        <artwork name="" type="" align="left" alt="" pn="section-3-9.1">
   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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |  Next Header  |  Hdr Ext Len  | Routing Type  | Segments Left |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  +                             SID[0]                            +
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  +                             SID[1]                            +
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                          .........
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-  
</artwork>
      </figure>
    </section>
    <section anchor="crh-fib" numbered="true" toc="include" removeInRFC="false" pn="section-4">
      <name slugifiedName="name-the-crh-forwarding-informat">The CRH  Forwarding Information Base (CRH-FIB)</name>
      <t indent="0" pn="section-4-1">Each CRH SID identifies a CRH-FIB entry.</t>
      <t indent="0" pn="section-4-2">Each CRH-FIB entry contains:</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-4-3">
        <li pn="section-4-3.1">
          <t indent="0" pn="section-4-3.1.1">An IPv6 address</t>
        </li>
        <li pn="section-4-3.2">
          <t indent="0" pn="section-4-3.2.1">A topological function</t>
        </li>
        <li pn="section-4-3.3">
          <t indent="0" pn="section-4-3.3.1">Arguments for the topological function (optional)</t>
        </li>
      </ul>
      <t indent="0" pn="section-4-4">The IPv6 address can be a Global Unicast Address (GUA), a Link-Local Unicast (LLU) address, or
      a Unique Local Address (ULA). When the IPv6 address is the final address in a path, it 
      can also be a multicast address.</t>
      <t indent="0" pn="section-4-5">The topological function specifies how the processing node forwards
      the packet to the interface identified by the IPv6 address. The
      following are examples:</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-4-6">
        <li pn="section-4-6.1">
          <t indent="0" pn="section-4-6.1.1">Forward the packet through the least-cost path to the interface
          identified by the IPv6 address (i.e., loose source routing).</t>
        </li>
        <li pn="section-4-6.2">
          <t indent="0" pn="section-4-6.2.1">Forward the packet through a specified interface to the interface
          identified by the IPv6 address (i.e., strict source routing).</t>
        </li>
      </ul>
      <t indent="0" pn="section-4-7">Some topological functions require parameters. For example, a
      topological function might require a parameter that identifies the
      interface through which the packet is forwarded.</t>
      <t indent="0" pn="section-4-8">The CRH-FIB can be populated by:</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-4-9">
        <li pn="section-4-9.1">
          <t indent="0" pn="section-4-9.1.1">An operator, using a Command Line Interface (CLI)</t>
        </li>
        <li pn="section-4-9.2">
          <t indent="0" pn="section-4-9.2.1">A controller, using the Path
          Computation Element Communication Protocol (PCEP) <xref target="RFC5440" format="default" sectionFormat="of" derivedContent="RFC5440"/> or
          the Network Configuration Protocol
          (NETCONF) <xref target="RFC6241" format="default" sectionFormat="of" derivedContent="RFC6241"/></t>
        </li>
        <li pn="section-4-9.3">
          <t indent="0" pn="section-4-9.3.1">A distributed routing protocol, such as those defined in <xref target="ISO10589-Second-Edition" format="default" sectionFormat="of" derivedContent="ISO10589-Second-Edition"/>, <xref target="RFC5340" format="default" sectionFormat="of" derivedContent="RFC5340"/>, and <xref target="RFC4271" format="default" sectionFormat="of" derivedContent="RFC4271"/></t>
        </li>
      </ul>
      <t indent="0" pn="section-4-10">The above-mentioned mechanisms are not defined here and are beyond the scope of this document.</t>
    </section>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-5">
      <name slugifiedName="name-processing-rules">Processing Rules</name>
      <t indent="0" pn="section-5-1">The following rules describe CRH processing:</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-5-2">
        <li pn="section-5-2.1">
          <t indent="0" pn="section-5-2.1.1">If Hdr Ext Len indicates that the CRH is larger than the
          implementation can process, discard the packet and send an ICMPv6
          <xref target="RFC4443" format="default" sectionFormat="of" derivedContent="RFC4443"/> Parameter Problem,
          Code 0, message to the Source Address, pointing to the Hdr Ext Len
          field.</t>
        </li>
        <li pn="section-5-2.2">
          <t indent="0" pn="section-5-2.2.1">Compute L, the minimum CRH length (<xref target="SLLeng" format="default" sectionFormat="of" derivedContent="Section 5.1">
            </xref>).</t>
        </li>
        <li pn="section-5-2.3">
          <t indent="0" pn="section-5-2.3.1">If L is greater than Hdr Ext Len, discard the packet and send an
          ICMPv6 Parameter Problem, Code 6, message to the Source Address,
          pointing to the Segments Left field.</t>
        </li>
        <li pn="section-5-2.4">
          <t indent="0" pn="section-5-2.4.1">Decrement Segments Left.</t>
        </li>
        <li pn="section-5-2.5">
          <t indent="0" pn="section-5-2.5.1">Search for the current CRH SID in the CRH-FIB. In this document, the
          "current CRH SID" is the CRH SID list entry referenced by the Segments Left
          field.</t>
        </li>
        <li pn="section-5-2.6">
          <t indent="0" pn="section-5-2.6.1">If the search does not return a CRH-FIB entry, discard the packet
          and send an ICMPv6 Parameter Problem, Code 0, message to the Source
          Address, pointing to the current SID.</t>
        </li>
        <li pn="section-5-2.7">
          <t indent="0" pn="section-5-2.7.1">If Segments Left is greater than 0 and the CRH-FIB entry contains
          a multicast address, discard the packet and send an ICMPv6 Parameter
          Problem, Code 0, message to the Source Address, pointing to the
          current SID. (This prevents packet storms.)</t>
        </li>
        <li pn="section-5-2.8">
          <t indent="0" pn="section-5-2.8.1">Copy the IPv6 address from the CRH-FIB entry to the Destination
          Address field in the IPv6 header.</t>
        </li>
        <li pn="section-5-2.9">
          <t indent="0" pn="section-5-2.9.1">Submit the packet, its topological function, and its parameters to
          the IPv6 module.</t>
        </li>
      </ul>
      <aside pn="section-5-3">
        <t indent="0" pn="section-5-3.1">NOTE: By default, the IPv6 module determines the next hop and
      forwards the packet. However, the topological function may elicit
      another behavior. For example, the IPv6 module may forward the packet
      through a specified interface.</t>
      </aside>
      <section anchor="SLLeng" numbered="true" toc="include" removeInRFC="false" pn="section-5.1">
        <name slugifiedName="name-computing-minimum-crh-lengt">Computing Minimum CRH Length</name>
        <t indent="0" pn="section-5.1-1">The algorithm described in this section accepts the following CRH
        fields as its input parameters:</t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-5.1-2">
          <li pn="section-5.1-2.1">
            <t indent="0" pn="section-5.1-2.1.1">Routing Type (i.e., CRH-16 or CRH-32)</t>
          </li>
          <li pn="section-5.1-2.2">
            <t indent="0" pn="section-5.1-2.2.1">Segments Left</t>
          </li>
        </ul>
        <t indent="0" pn="section-5.1-3">It yields L, the minimum CRH length. The minimum CRH length is
        measured in 8-octet units, not including the first 8 octets.</t>
        <sourcecode name="" type="pseudocode" markers="true" pn="section-5.1-4">
switch(Routing Type) {
    case CRH-16:
        if (Segments Left &lt;= 2)
            return(0)
        sidsBeyondFirstWord = Segments Left - 2;
        sidPerWord = 4;
    case CRH-32:
        if (Segments Left &lt;= 1)
            return(0)
        sidsBeyondFirstWord = Segments Left - 1;
        sidsPerWord = 2;
    case default:
        return(0xFF);
    }

words = sidsBeyondFirstWord div sidsPerWord;
if (sidsBeyondFirstWord mod sidsPerWord)
    words++;

return(words)
</sourcecode>
      </section>
    </section>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-6">
      <name slugifiedName="name-mutability">Mutability</name>
      <t indent="0" pn="section-6-1">In the CRH, the Segments Left field is mutable. All remaining fields
      are immutable.</t>
    </section>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-7">
      <name slugifiedName="name-applications-and-crh-sids">Applications and CRH SIDs</name>
      <t indent="0" pn="section-7-1">A CRH contains one or more CRH SIDs. Each CRH SID is processed by exactly one CRH-configured 
      router whose one address matches the packet Destination Address.</t>
      <t indent="0" pn="section-7-2">Therefore, a CRH SID is not required to have domain-wide
      significance.  Applications can allocate CRH SIDs so that they have
      either domain-wide or node-local significance.</t>
    </section>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-8">
      <name slugifiedName="name-operational-considerations">Operational Considerations</name>
      <t indent="0" pn="section-8-1">PING and Traceroute <xref target="RFC2151" format="default" sectionFormat="of" derivedContent="RFC2151"/> both operate
      correctly in the presence of the CRH. TCPDUMP and Wireshark have been
      extended to support the CRH.</t>
      <t indent="0" pn="section-8-2">PING and Traceroute report 16-bit CRH SIDs for CRH-16 and
    32-bit CRH SIDs for CRH-32.  It is recommended that the
    experimental versions of PING use the textual representations
    described in <xref target="TR" format="default" sectionFormat="of" derivedContent="Section 9"> </xref>.</t>
    </section>
    <section anchor="TR" numbered="true" toc="include" removeInRFC="false" pn="section-9">
      <name slugifiedName="name-textual-representations">Textual Representations</name>
      <t indent="0" pn="section-9-1">A 16-bit CRH SID can be represented by four lowercase hexadecimal digits. Leading
      zeros <bcp14>SHOULD</bcp14> be omitted. However, the all-zeros CRH SID <bcp14>MUST</bcp14> be represented
      by a single 0. The following are examples:</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-9-2">
        <li pn="section-9-2.1">
          <t indent="0" pn="section-9-2.1.1">beef</t>
        </li>
        <li pn="section-9-2.2">
          <t indent="0" pn="section-9-2.2.1">eef</t>
        </li>
        <li pn="section-9-2.3">
          <t indent="0" pn="section-9-2.3.1">0</t>
        </li>
      </ul>
      <t indent="0" pn="section-9-3">A 16-bit CRH SID also can be represented in dotted-decimal notation. The
      following are examples:</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-9-4">
        <li pn="section-9-4.1">
          <t indent="0" pn="section-9-4.1.1">192.0</t>
        </li>
        <li pn="section-9-4.2">
          <t indent="0" pn="section-9-4.2.1">192.51</t>
        </li>
      </ul>
      <t indent="0" pn="section-9-5">A 32-bit CRH SID can be represented by four lowercase hexadecimal digits, a colon
      (:), and another four lowercase hexadecimal digits. Leading zeros <bcp14>MUST</bcp14> be omitted.
      The following are examples:</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-9-6">
        <li pn="section-9-6.1">
          <t indent="0" pn="section-9-6.1.1">dead:beef</t>
        </li>
        <li pn="section-9-6.2">
          <t indent="0" pn="section-9-6.2.1">ead:eef</t>
        </li>
        <li pn="section-9-6.3">
          <t indent="0" pn="section-9-6.3.1">:beef</t>
        </li>
        <li pn="section-9-6.4">
          <t indent="0" pn="section-9-6.4.1">beef:</t>
        </li>
        <li pn="section-9-6.5">
          <t indent="0" pn="section-9-6.5.1">:</t>
        </li>
      </ul>
      <t indent="0" pn="section-9-7">A 32-bit CRH SID can also be represented in dotted-decimal notation.
      The following are examples:</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-9-8">
        <li pn="section-9-8.1">
          <t indent="0" pn="section-9-8.1.1">192.0.2.1</t>
        </li>
        <li pn="section-9-8.2">
          <t indent="0" pn="section-9-8.2.1">192.0.2.2</t>
        </li>
        <li pn="section-9-8.3">
          <t indent="0" pn="section-9-8.3.1">192.0.2.3</t>
        </li>
      </ul>
    </section>
    <section anchor="Security" numbered="true" toc="include" removeInRFC="false" pn="section-10">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t indent="0" pn="section-10-1">In this document, one node trusts another only if both nodes are
      operated by the same party. A node determines whether it trusts another
      node by examining its IP address. In many networks, operators number their nodes
      using a small number of prefixes. This facilitates identification of trusted nodes.</t>
      <t indent="0" pn="section-10-2">A node can encounter security vulnerabilities when it processes a Routing header that 
      originated on an untrusted node <xref target="RFC5095" format="default" sectionFormat="of" derivedContent="RFC5095"/>. Therefore, nodes <bcp14>MUST</bcp14> deploy ACLs that discard packets containing the
      CRH when both of the following conditions are true:</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-10-3">
        <li pn="section-10-3.1">
          <t indent="0" pn="section-10-3.1.1">The Source Address does not identify an interface on a trusted
          node.</t>
        </li>
        <li pn="section-10-3.2">
          <t indent="0" pn="section-10-3.2.1">The Destination Address identifies an interface on the local
          node.</t>
        </li>
      </ul>
      <t indent="0" pn="section-10-4">The above-mentioned ACLs do not protect the node from attack packets
      that contain a forged (i.e., spoofed) Source Address. In order to
      mitigate this risk, nodes <bcp14>MAY</bcp14> also discard packets containing the CRH
      when all of the following conditions are true:</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-10-5">
        <li pn="section-10-5.1">
          <t indent="0" pn="section-10-5.1.1">The Source Address identifies an interface on a trusted node.</t>
        </li>
        <li pn="section-10-5.2">
          <t indent="0" pn="section-10-5.2.1">The Destination Address identifies an interface on the local
          node.</t>
        </li>
        <li pn="section-10-5.3">
          <t indent="0" pn="section-10-5.3.1">The packet does not pass an Enhanced
          Feasible-Path Unicast Reverse Path Forwarding (EFP-uRPF) <xref target="RFC8704" format="default" sectionFormat="of" derivedContent="RFC8704"/> check.</t>
        </li>
      </ul>
      <t indent="0" pn="section-10-6">The EFP-uRPF check eliminates some, but not all, packets with forged
      Source Addresses. Therefore, a network operator that deploys CRH <bcp14>MUST</bcp14>
      implement ACLs on each of its edge nodes. The ACL
      discards packets whose Source Address identifies an interface on a
      trusted node.</t>
      <t indent="0" pn="section-10-7">The CRH is compatible with end-to-end IPv6 Authentication Header (AH) 
    <xref target="RFC4302" format="default" sectionFormat="of" derivedContent="RFC4302"/> processing.  This is because the source node calculates
    the Integrity Check Value (ICV) over the packet as it arrives at the
    destination node.</t>
    </section>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-11">
      <name slugifiedName="name-experimental-results">Experimental Results</name>
      <t indent="0" pn="section-11-1">Parties participating in this experiment should publish experimental
      results within one year of the publication of this document.
      Experimental results should address the following:</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-11-2">
        <li pn="section-11-2.1">
          <t indent="0" pn="section-11-2.1.1">Effort required to deploy</t>
          <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-11-2.1.2">
            <li pn="section-11-2.1.2.1">
              <t indent="0" pn="section-11-2.1.2.1.1">Was deployment incremental or network-wide?</t>
            </li>
            <li pn="section-11-2.1.2.2">
              <t indent="0" pn="section-11-2.1.2.2.1">Was there a need to synchronize configurations at each node,
              or could nodes be configured independently?</t>
            </li>
            <li pn="section-11-2.1.2.3">
              <t indent="0" pn="section-11-2.1.2.3.1">Did the deployment require a hardware upgrade?</t>
            </li>
            <li pn="section-11-2.1.2.4">
              <t indent="0" pn="section-11-2.1.2.4.1">Did the CRH SIDs have domain-wide or node-local significance?</t>
            </li>
          </ul>
        </li>
        <li pn="section-11-2.2">
          <t indent="0" pn="section-11-2.2.1">Effort required to secure</t>
        </li>
        <li pn="section-11-2.3">
          <t indent="0" pn="section-11-2.3.1">Performance impact</t>
        </li>
        <li pn="section-11-2.4">
          <t indent="0" pn="section-11-2.4.1">Effectiveness of risk mitigation with ACLs</t>
        </li>
        <li pn="section-11-2.5">
          <t indent="0" pn="section-11-2.5.1">Cost of risk mitigation with ACLs</t>
        </li>
        <li pn="section-11-2.6">
          <t indent="0" pn="section-11-2.6.1">Mechanism used to populate the CRH-FIB</t>
        </li>
        <li pn="section-11-2.7">
          <t indent="0" pn="section-11-2.7.1">Scale of deployment</t>
        </li>
        <li pn="section-11-2.8">
          <t indent="0" pn="section-11-2.8.1">Interoperability</t>
          <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-11-2.8.2">
            <li pn="section-11-2.8.2.1">
              <t indent="0" pn="section-11-2.8.2.1.1">Did you deploy two interoperable implementations?</t>
            </li>
            <li pn="section-11-2.8.2.2">
              <t indent="0" pn="section-11-2.8.2.2.1">Did you experience interoperability problems?</t>
            </li>
            <li pn="section-11-2.8.2.3">
              <t indent="0" pn="section-11-2.8.2.3.1">Did implementations generally implement the same topological
              functions with identical arguments?</t>
            </li>
            <li pn="section-11-2.8.2.4">
              <t indent="0" pn="section-11-2.8.2.4.1">Were topological function semantics identical on each
              implementation?</t>
            </li>
          </ul>
        </li>
        <li pn="section-11-2.9">
          <t indent="0" pn="section-11-2.9.1">Effectiveness and sufficiency of Operations, Administration, and
Maintenance (OAM) mechanisms</t>
          <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-11-2.9.2">
            <li pn="section-11-2.9.2.1">
              <t indent="0" pn="section-11-2.9.2.1.1">Did PING work?</t>
            </li>
            <li pn="section-11-2.9.2.2">
              <t indent="0" pn="section-11-2.9.2.2.1">Did Traceroute work?</t>
            </li>
            <li pn="section-11-2.9.2.3">
              <t indent="0" pn="section-11-2.9.2.3.1">Did Wireshark work?</t>
            </li>
            <li pn="section-11-2.9.2.4">
              <t indent="0" pn="section-11-2.9.2.4.1">Did TCPDUMP work?</t>
            </li>
          </ul>
        </li>
      </ul>
    </section>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-12">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <t indent="0" pn="section-12-1">IANA has registered the following in the "Routing Types"
      subregistry within the "Internet Protocol Version 6 (IPv6) Parameters"
      registry:</t>
      <table anchor="iana-table" align="center" pn="table-1">
        <name/>
        <thead>
          <tr>
            <th align="left" colspan="1" rowspan="1">Value</th>
            <th align="left" colspan="1" rowspan="1">Description</th>
            <th align="left" colspan="1" rowspan="1">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left" colspan="1" rowspan="1">5</td>
            <td align="left" colspan="1" rowspan="1">CRH-16</td>
            <td align="left" colspan="1" rowspan="1">RFC 9631</td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">6</td>
            <td align="left" colspan="1" rowspan="1">CRH-32 </td>
            <td align="left" colspan="1" rowspan="1">RFC 9631</td>
          </tr>
        </tbody>
      </table>
    </section>
  </middle>
  <back>
    <references pn="section-13">
      <name slugifiedName="name-references">References</name>
      <references pn="section-13.1">
        <name slugifiedName="name-normative-references">Normative References</name>
        <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 fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <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="RFC4302" target="https://www.rfc-editor.org/info/rfc4302" quoteTitle="true" derivedAnchor="RFC4302">
          <front>
            <title>IP Authentication Header</title>
            <author fullname="S. Kent" initials="S." surname="Kent"/>
            <date month="December" year="2005"/>
            <abstract>
              <t indent="0">This document describes an updated version of the IP Authentication Header (AH), which is designed to provide authentication services in IPv4 and IPv6. This document obsoletes RFC 2402 (November 1998). [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4302"/>
          <seriesInfo name="DOI" value="10.17487/RFC4302"/>
        </reference>
        <reference anchor="RFC4443" target="https://www.rfc-editor.org/info/rfc4443" quoteTitle="true" derivedAnchor="RFC4443">
          <front>
            <title>Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification</title>
            <author fullname="A. Conta" initials="A." surname="Conta"/>
            <author fullname="S. Deering" initials="S." surname="Deering"/>
            <author fullname="M. Gupta" initials="M." role="editor" surname="Gupta"/>
            <date month="March" year="2006"/>
            <abstract>
              <t indent="0">This document describes the format of a set of control messages used in ICMPv6 (Internet Control Message Protocol). ICMPv6 is the Internet Control Message Protocol for Internet Protocol version 6 (IPv6). [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="89"/>
          <seriesInfo name="RFC" value="4443"/>
          <seriesInfo name="DOI" value="10.17487/RFC4443"/>
        </reference>
        <reference anchor="RFC5095" target="https://www.rfc-editor.org/info/rfc5095" quoteTitle="true" derivedAnchor="RFC5095">
          <front>
            <title>Deprecation of Type 0 Routing Headers in IPv6</title>
            <author fullname="J. Abley" initials="J." surname="Abley"/>
            <author fullname="P. Savola" initials="P." surname="Savola"/>
            <author fullname="G. Neville-Neil" initials="G." surname="Neville-Neil"/>
            <date month="December" year="2007"/>
            <abstract>
              <t indent="0">The functionality provided by IPv6's Type 0 Routing Header can be exploited in order to achieve traffic amplification over a remote path for the purposes of generating denial-of-service traffic. This document updates the IPv6 specification to deprecate the use of IPv6 Type 0 Routing Headers, in light of this security concern. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5095"/>
          <seriesInfo name="DOI" value="10.17487/RFC5095"/>
        </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 fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <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="RFC8200" target="https://www.rfc-editor.org/info/rfc8200" quoteTitle="true" derivedAnchor="RFC8200">
          <front>
            <title>Internet Protocol, Version 6 (IPv6) Specification</title>
            <author fullname="S. Deering" initials="S." surname="Deering"/>
            <author fullname="R. Hinden" initials="R." surname="Hinden"/>
            <date month="July" year="2017"/>
            <abstract>
              <t indent="0">This document specifies version 6 of the Internet Protocol (IPv6). It obsoletes RFC 2460.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="86"/>
          <seriesInfo name="RFC" value="8200"/>
          <seriesInfo name="DOI" value="10.17487/RFC8200"/>
        </reference>
      </references>
      <references pn="section-13.2">
        <name slugifiedName="name-informative-references">Informative References</name>
        <reference anchor="IANA-RT" target="https://www.iana.org/assignments/ipv6-parameters" quoteTitle="true" derivedAnchor="IANA-RT">
          <front>
            <title>Routing Types</title>
            <author>
              <organization showOnFrontPage="true">IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="ISO10589-Second-Edition" target="https://www.iso.org/standard/30932.html" quoteTitle="true" derivedAnchor="ISO10589-Second-Edition">
          <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>
            <author>
              <organization showOnFrontPage="true">ISO/IEC</organization>
            </author>
            <date month="November" year="2002"/>
          </front>
          <refcontent>Second Edition</refcontent>
          <seriesInfo name="ISO/IEC" value="10589:2002"/>
        </reference>
        <reference anchor="RFC2151" target="https://www.rfc-editor.org/info/rfc2151" quoteTitle="true" derivedAnchor="RFC2151">
          <front>
            <title>A Primer On Internet and TCP/IP Tools and Utilities</title>
            <author fullname="G. Kessler" initials="G." surname="Kessler"/>
            <author fullname="S. Shepard" initials="S." surname="Shepard"/>
            <date month="June" year="1997"/>
            <abstract>
              <t indent="0">This memo is an introductory guide to many of the most commonly- available TCP/IP and Internet tools and utilities. It also describes discussion lists accessible from the Internet, ways to obtain Internet and TCP/IP documents, and some resources that help users weave their way through the Internet. This memo provides information for the Internet community. This memo does not specify an Internet standard of any kind.</t>
            </abstract>
          </front>
          <seriesInfo name="FYI" value="30"/>
          <seriesInfo name="RFC" value="2151"/>
          <seriesInfo name="DOI" value="10.17487/RFC2151"/>
        </reference>
        <reference anchor="RFC4271" target="https://www.rfc-editor.org/info/rfc4271" quoteTitle="true" derivedAnchor="RFC4271">
          <front>
            <title>A Border Gateway Protocol 4 (BGP-4)</title>
            <author fullname="Y. Rekhter" initials="Y." role="editor" surname="Rekhter"/>
            <author fullname="T. Li" initials="T." role="editor" surname="Li"/>
            <author fullname="S. Hares" initials="S." role="editor" surname="Hares"/>
            <date month="January" year="2006"/>
            <abstract>
              <t indent="0">This document discusses the Border Gateway Protocol (BGP), which is an inter-Autonomous System routing protocol.</t>
              <t indent="0">The primary function of a BGP speaking system is to exchange network reachability information with other BGP systems. This network reachability information includes information on the list of Autonomous Systems (ASes) that reachability information traverses. This information is sufficient for constructing a graph of AS connectivity for this reachability from which routing loops may be pruned, and, at the AS level, some policy decisions may be enforced.</t>
              <t indent="0">BGP-4 provides a set of mechanisms for supporting Classless Inter-Domain Routing (CIDR). These mechanisms include support for advertising a set of destinations as an IP prefix, and eliminating the concept of network "class" within BGP. BGP-4 also introduces mechanisms that allow aggregation of routes, including aggregation of AS paths.</t>
              <t indent="0">This document obsoletes RFC 1771. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4271"/>
          <seriesInfo name="DOI" value="10.17487/RFC4271"/>
        </reference>
        <reference anchor="RFC5340" target="https://www.rfc-editor.org/info/rfc5340" quoteTitle="true" derivedAnchor="RFC5340">
          <front>
            <title>OSPF for IPv6</title>
            <author fullname="R. Coltun" initials="R." surname="Coltun"/>
            <author fullname="D. Ferguson" initials="D." surname="Ferguson"/>
            <author fullname="J. Moy" initials="J." surname="Moy"/>
            <author fullname="A. Lindem" initials="A." surname="Lindem"/>
            <date month="July" year="2008"/>
            <abstract>
              <t indent="0">This document describes the modifications to OSPF to support version 6 of the Internet Protocol (IPv6). The fundamental mechanisms of OSPF (flooding, Designated Router (DR) election, area support, Short Path First (SPF) calculations, etc.) remain unchanged. However, some changes have been necessary, either due to changes in protocol semantics between IPv4 and IPv6, or simply to handle the increased address size of IPv6. These modifications will necessitate incrementing the protocol version from version 2 to version 3. OSPF for IPv6 is also referred to as OSPF version 3 (OSPFv3).</t>
              <t indent="0">Changes between OSPF for IPv4, OSPF Version 2, and OSPF for IPv6 as described herein include the following. Addressing semantics have been removed from OSPF packets and the basic Link State Advertisements (LSAs). New LSAs have been created to carry IPv6 addresses and prefixes. OSPF now runs on a per-link basis rather than on a per-IP-subnet basis. Flooding scope for LSAs has been generalized. Authentication has been removed from the OSPF protocol and instead relies on IPv6's Authentication Header and Encapsulating Security Payload (ESP).</t>
              <t indent="0">Even with larger IPv6 addresses, most packets in OSPF for IPv6 are almost as compact as those in OSPF for IPv4. Most fields and packet- size limitations present in OSPF for IPv4 have been relaxed. In addition, option handling has been made more flexible.</t>
              <t indent="0">All of OSPF for IPv4's optional capabilities, including demand circuit support and Not-So-Stubby Areas (NSSAs), are also supported in OSPF for IPv6. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5340"/>
          <seriesInfo name="DOI" value="10.17487/RFC5340"/>
        </reference>
        <reference anchor="RFC5440" target="https://www.rfc-editor.org/info/rfc5440" quoteTitle="true" derivedAnchor="RFC5440">
          <front>
            <title>Path Computation Element (PCE) Communication Protocol (PCEP)</title>
            <author fullname="JP. Vasseur" initials="JP." role="editor" surname="Vasseur"/>
            <author fullname="JL. Le Roux" initials="JL." role="editor" surname="Le Roux"/>
            <date month="March" year="2009"/>
            <abstract>
              <t indent="0">This document specifies the Path Computation Element (PCE) Communication Protocol (PCEP) for communications between a Path Computation Client (PCC) and a PCE, or between two PCEs. Such interactions include path computation requests and path computation replies as well as notifications of specific states related to the use of a PCE in the context of Multiprotocol Label Switching (MPLS) and Generalized MPLS (GMPLS) Traffic Engineering. PCEP is designed to be flexible and extensible so as to easily allow for the addition of further messages and objects, should further requirements be expressed in the future. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5440"/>
          <seriesInfo name="DOI" value="10.17487/RFC5440"/>
        </reference>
        <reference anchor="RFC6241" target="https://www.rfc-editor.org/info/rfc6241" quoteTitle="true" derivedAnchor="RFC6241">
          <front>
            <title>Network Configuration Protocol (NETCONF)</title>
            <author fullname="R. Enns" initials="R." role="editor" surname="Enns"/>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder"/>
            <author fullname="A. Bierman" initials="A." role="editor" surname="Bierman"/>
            <date month="June" year="2011"/>
            <abstract>
              <t indent="0">The Network Configuration Protocol (NETCONF) defined in this document provides mechanisms to install, manipulate, and delete the configuration of network devices. It uses an Extensible Markup Language (XML)-based data encoding for the configuration data as well as the protocol messages. The NETCONF protocol operations are realized as remote procedure calls (RPCs). This document obsoletes RFC 4741. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6241"/>
          <seriesInfo name="DOI" value="10.17487/RFC6241"/>
        </reference>
        <reference anchor="RFC8201" target="https://www.rfc-editor.org/info/rfc8201" quoteTitle="true" derivedAnchor="RFC8201">
          <front>
            <title>Path MTU Discovery for IP version 6</title>
            <author fullname="J. McCann" initials="J." surname="McCann"/>
            <author fullname="S. Deering" initials="S." surname="Deering"/>
            <author fullname="J. Mogul" initials="J." surname="Mogul"/>
            <author fullname="R. Hinden" initials="R." role="editor" surname="Hinden"/>
            <date month="July" year="2017"/>
            <abstract>
              <t indent="0">This document describes Path MTU Discovery (PMTUD) for IP version 6. It is largely derived from RFC 1191, which describes Path MTU Discovery for IP version 4. It obsoletes RFC 1981.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="87"/>
          <seriesInfo name="RFC" value="8201"/>
          <seriesInfo name="DOI" value="10.17487/RFC8201"/>
        </reference>
        <reference anchor="RFC8704" target="https://www.rfc-editor.org/info/rfc8704" quoteTitle="true" derivedAnchor="RFC8704">
          <front>
            <title>Enhanced Feasible-Path Unicast Reverse Path Forwarding</title>
            <author fullname="K. Sriram" initials="K." surname="Sriram"/>
            <author fullname="D. Montgomery" initials="D." surname="Montgomery"/>
            <author fullname="J. Haas" initials="J." surname="Haas"/>
            <date month="February" year="2020"/>
            <abstract>
              <t indent="0">This document identifies a need for and proposes improvement of the unicast Reverse Path Forwarding (uRPF) techniques (see RFC 3704) for detection and mitigation of source address spoofing (see BCP 38). Strict uRPF is inflexible about directionality, the loose uRPF is oblivious to directionality, and the current feasible-path uRPF attempts to strike a balance between the two (see RFC 3704). However, as shown in this document, the existing feasible-path uRPF still has shortcomings. This document describes enhanced feasible-path uRPF (EFP-uRPF) techniques that are more flexible (in a meaningful way) about directionality than the feasible-path uRPF (RFC 3704). The proposed EFP-uRPF methods aim to significantly reduce false positives regarding invalid detection in source address validation (SAV). Hence, they can potentially alleviate ISPs' concerns about the possibility of disrupting service for their customers and encourage greater deployment of uRPF techniques. This document updates RFC 3704.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="84"/>
          <seriesInfo name="RFC" value="8704"/>
          <seriesInfo name="DOI" value="10.17487/RFC8704"/>
        </reference>
      </references>
    </references>
    <section anchor="Examples" numbered="true" toc="include" removeInRFC="false" pn="section-appendix.a">
      <name slugifiedName="name-crh-processing-examples">CRH Processing Examples</name>
      <t indent="0" pn="section-appendix.a-1">This appendix demonstrates CRH processing in the following
      scenarios:</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-appendix.a-2">
        <li pn="section-appendix.a-2.1">
          <t indent="0" pn="section-appendix.a-2.1.1">The CRH SID list contains one entry for each segment in the path
          (<xref target="LSRP" format="default" sectionFormat="of" derivedContent="Appendix A.1"/>).</t>
        </li>
        <li pn="section-appendix.a-2.2">
          <t indent="0" pn="section-appendix.a-2.2.1">The CRH SID list omits the first entry in the path (<xref target="LSR" format="default" sectionFormat="of" derivedContent="Appendix A.2"/>).</t>
        </li>
      </ul>
      <t indent="0" pn="section-appendix.a-3"><xref target="RefTopo" format="default" sectionFormat="of" derivedContent="Figure 3"/> provides a reference
            topology that is used in all examples, and <xref target="lsid" format="default" sectionFormat="of" derivedContent="Table 2"/> describes two entries that appear in each
            node's CRH-FIB.</t>
      <figure anchor="RefTopo" align="left" suppress-title="false" pn="figure-3">
        <name slugifiedName="name-reference-topology">Reference Topology</name>
        <artwork name="" type="" align="left" alt="" pn="section-appendix.a-4.1">
 -----------                 -----------                 -----------                    
|Node: S    |               |Node: I1   |               |Node: I2   |      
|Loopback:  |---------------|Loopback:  |---------------|Loopback:  |                          
|2001:db8::a|               |2001:db8::1|               |2001:db8::2|               
 -----------                 -----------                 -----------                     
      |                                                       | 
      |                      -----------                      |
      |                     |Node: D    |                     |
       ---------------------|Loopback:  |---------------------
                            |2001:db8::b| 
                             -----------
</artwork>
      </figure>
      <table anchor="lsid" align="center" pn="table-2">
        <name slugifiedName="name-node-sids">Node SIDs</name>
        <thead>
          <tr>
            <th align="left" colspan="1" rowspan="1">SID</th>
            <th align="left" colspan="1" rowspan="1">IPv6 Address</th>
            <th align="left" colspan="1" rowspan="1">Forwarding Method</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left" colspan="1" rowspan="1">2</td>
            <td align="left" colspan="1" rowspan="1">2001:db8::2</td>
            <td align="left" colspan="1" rowspan="1">Least-cost path</td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">11</td>
            <td align="left" colspan="1" rowspan="1">2001:db8::b</td>
            <td align="left" colspan="1" rowspan="1">Least-cost path</td>
          </tr>
        </tbody>
      </table>
      <section anchor="LSRP" numbered="true" toc="include" removeInRFC="false" pn="section-appendix.a.1">
        <name slugifiedName="name-the-crh-sid-list-contains-o">The CRH SID list contains one entry for each segment in the path.</name>
        <t indent="0" pn="section-appendix.a.1-1">In this example, Node S sends a packet to Node D via I2, and
        I2 appears in the CRH segment list.</t>
        <table align="center" pn="table-3">
          <name slugifiedName="name-packet-travels-from-s-to-i2">Packet Travels from S to I2</name>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">Source Address = 2001:db8::a</td>
              <td align="left" colspan="1" rowspan="1">Segments Left = 1</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">Destination Address = 2001:db8::2</td>
              <td align="left" colspan="1" rowspan="1">SID[0] = 11</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"/>
              <td align="left" colspan="1" rowspan="1">SID[1] = 2</td>
            </tr>
          </tbody>
        </table>
        <table align="center" pn="table-4">
          <name slugifiedName="name-packet-travels-from-i2-to-d">Packet Travels from I2 to D</name>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">Source Address = 2001:db8::a</td>
              <td align="left" colspan="1" rowspan="1">Segments Left = 0</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">Destination Address = 2001:db8::b</td>
              <td align="left" colspan="1" rowspan="1">SID[0] = 11</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"/>
              <td align="left" colspan="1" rowspan="1">SID[1] = 2</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="LSR" numbered="true" toc="include" removeInRFC="false" pn="section-appendix.a.2">
        <name slugifiedName="name-the-crh-sid-list-omits-the-">The CRH SID list omits the first entry in the path.</name>
        <t indent="0" pn="section-appendix.a.2-1">In this example, Node S sends a packet to Node D via I2, and
        I2 does not appear in the CRH segment list.</t>
        <table align="center" pn="table-5">
          <name slugifiedName="name-packet-travels-from-s-to-i2-2">Packet Travels from S to I2</name>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">Source Address = 2001:db8::a</td>
              <td align="left" colspan="1" rowspan="1">Segments Left = 1</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">Destination Address = 2001:db8::2</td>
              <td align="left" colspan="1" rowspan="1">SID[0] = 11</td>
            </tr>
          </tbody>
        </table>
        <table align="center" pn="table-6">
          <name slugifiedName="name-packet-travels-from-i2-to-d-2">Packet Travels from I2 to D</name>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">Source Address = 2001:db8::a</td>
              <td align="left" colspan="1" rowspan="1">Segments Left = 0</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">Destination Address = 2001:db8::b</td>
              <td align="left" colspan="1" rowspan="1">SID[0] = 11</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="Acknowledgements" numbered="false" toc="include" removeInRFC="false" pn="section-appendix.b">
      <name slugifiedName="name-acknowledgements">Acknowledgements</name>
      <t indent="0" pn="section-appendix.b-1">Thanks to <contact fullname="Dr. Vanessa Ameen"/>, <contact fullname="Dale Carder"/>, <contact fullname="Brian Carpenter"/>,
      <contact fullname="Adrian Farrel"/>, <contact fullname="Fernando       Gont"/>, <contact fullname="Joel Halpern"/>, <contact fullname="Naveen       Kottapalli"/>, <contact fullname="Tony Li"/>, <contact fullname="Xing       Li"/>, <contact fullname="Gerald Schmidt"/>, <contact fullname="Nancy       Shaw"/>, <contact fullname="Mark Smith"/>, <contact fullname="Ketan       Talaulikar"/>, <contact fullname="Reji Thomas"/>, and <contact fullname="Chandra Venkatraman"/> for their contributions to this
      document.</t>
    </section>
    <section numbered="false" toc="include" removeInRFC="false" pn="section-appendix.c">
      <name slugifiedName="name-contributors">Contributors</name>
      <contact fullname="Gang Chen">
        <organization showOnFrontPage="true">Baidu</organization>
        <address>
          <postal>
            <street>No.10 Xibeiwang East Road</street>
            <city>Beijing</city>
            <cityarea>Haidian District</cityarea>
            <region/>
            <code>100193</code>
            <country>China</country>
          </postal>
          <email>phdgang@gmail.com</email>
        </address>
      </contact>
      <contact fullname="Yifeng Zhou">
        <organization showOnFrontPage="true">ByteDance</organization>
        <address>
          <postal>
            <street>43 N 3rd Ring W Rd</street>
            <extaddr>Building 1, AVIC Plaza</extaddr>
            <cityarea>Haidian District</cityarea>
            <city>Beijing</city>
            <region/>
            <code>100000</code>
            <country>China</country>
          </postal>
          <email>yifeng.zhou@bytedance.com</email>
        </address>
      </contact>
      <contact fullname="Gyan Mishra">
        <organization showOnFrontPage="true">Verizon</organization>
        <address>
          <postal>
            <street/>
            <city>Silver Spring</city>
            <region>MD</region>
            <code/>
            <country>United States of America</country>
          </postal>
          <email>hayabusagsm@gmail.com</email>
        </address>
      </contact>
    </section>
    <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.d">
      <name slugifiedName="name-authors-addresses">Authors' Addresses</name>
      <author fullname="Ron Bonica" initials="R." surname="Bonica">
        <organization showOnFrontPage="true">Juniper Networks</organization>
        <address>
          <postal>
            <street>2251 Corporate Park Drive</street>
            <city>Herndon</city>
            <code>20171</code>
            <region>VA</region>
            <country>United States of America</country>
          </postal>
          <email>rbonica@juniper.net</email>
        </address>
      </author>
      <author fullname="Yuji Kamite" initials="Y." surname="Kamite">
        <organization showOnFrontPage="true">NTT Communications Corporation</organization>
        <address>
          <postal>
            <street>3-4-1 Shibaura, Minato-ku</street>
            <region>Tokyo</region>
            <code>108-8118</code>
            <country>Japan</country>
          </postal>
          <email>y.kamite@ntt.com</email>
        </address>
      </author>
      <author fullname="Andrew Alston" initials="A." surname="Alston">
        <organization showOnFrontPage="true">Alston Networks</organization>
        <address>
          <postal>
            <city>Nairobi</city>
            <country>Kenya</country>
          </postal>
          <email>aa@alstonnetworks.net</email>
        </address>
      </author>
      <author fullname="Daniam Henriques" initials="D." surname="Henriques">
        <organization showOnFrontPage="true">Liquid Telecom</organization>
        <address>
          <postal>
            <city>Johannesburg</city>
            <country>South Africa</country>
          </postal>
          <email>daniam.henriques@liquidtelecom.com</email>
        </address>
      </author>
      <author fullname="Luay Jalil" initials="L." surname="Jalil">
        <organization showOnFrontPage="true">Verizon</organization>
        <address>
          <postal>
            <city>Richardson</city>
            <region>TX</region>
            <country>United States of America</country>
          </postal>
          <email>luay.jalil@one.verizon.com</email>
        </address>
      </author>
    </section>
  </back>
</rfc>
