<?xml version="1.0" encoding="us-ascii"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.5 (Ruby 3.1.2) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

<!ENTITY RFC8200 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8200.xml">
<!ENTITY RFC8402 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8402.xml">
<!ENTITY RFC8754 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8754.xml">
<!ENTITY RFC8986 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8986.xml">
<!ENTITY RFC9259 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9259.xml">
<!ENTITY RFC9350 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9350.xml">
<!ENTITY RFC2119 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC8174 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC7942 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7942.xml">
<!ENTITY RFC9252 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9252.xml">
<!ENTITY RFC9352 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9352.xml">
<!ENTITY RFC9513 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9513.xml">
<!ENTITY RFC9514 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9514.xml">
<!ENTITY I-D.ietf-6man-sids SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-6man-sids.xml">
<!ENTITY I-D.ietf-idr-bgp-ls-sr-policy SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-idr-bgp-ls-sr-policy.xml">
<!ENTITY I-D.ietf-idr-segment-routing-te-policy SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-idr-segment-routing-te-policy.xml">
<!ENTITY I-D.ietf-pce-segment-routing-ipv6 SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-pce-segment-routing-ipv6.xml">
]>


<rfc ipr="trust200902" docName="draft-ietf-spring-srv6-srh-compression-13" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title>Compressed SRv6 Segment List Encoding</title>

    <author initials="W." surname="Cheng" fullname="Weiqiang Cheng" role="editor">
      <organization>China Mobile</organization>
      <address>
        <postal>
          <country>China</country>
        </postal>
        <email>chengweiqiang@chinamobile.com</email>
      </address>
    </author>
    <author initials="C." surname="Filsfils" fullname="Clarence Filsfils">
      <organization>Cisco Systems, Inc.</organization>
      <address>
        <postal>
          <country>Belgium</country>
        </postal>
        <email>cf@cisco.com</email>
      </address>
    </author>
    <author initials="Z." surname="Li" fullname="Zhenbin Li">
      <organization>Huawei Technologies</organization>
      <address>
        <postal>
          <country>China</country>
        </postal>
        <email>lizhenbin@huawei.com</email>
      </address>
    </author>
    <author initials="B." surname="Decraene" fullname="Bruno Decraene">
      <organization>Orange</organization>
      <address>
        <postal>
          <country>France</country>
        </postal>
        <email>bruno.decraene@orange.com</email>
      </address>
    </author>
    <author initials="F." surname="Clad" fullname="Francois Clad" role="editor">
      <organization>Cisco Systems, Inc.</organization>
      <address>
        <postal>
          <country>France</country>
        </postal>
        <email>fclad.ietf@gmail.com</email>
      </address>
    </author>

    <date year="2024" month="February" day="29"/>

    <area>General</area>
    <workgroup>SPRING</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<?line 237?>

<t>Segment Routing over IPv6 (SRv6) is the instantiation of Segment Routing (SR) on the IPv6 dataplane. This document specifies new flavors for the SR segment endpoint behaviors defined in RFC 8986, which enable the compression of an SRv6 segment list. Such compression significantly reduces the size of the SRv6 encapsulation needed to steer packets over long segment lists.</t>



    </abstract>



  </front>

  <middle>


<?line 241?>

<section anchor="introduction"><name>Introduction</name>

<t>The Segment Routing (SR) architecture <xref target="RFC8402"/> describes two data plane instantiations of SR: SR over MPLS (SR-MPLS) and SR over IPv6 (SRv6).</t>

<t>SRv6 Network Programming <xref target="RFC8986"/> defines a framework to build a network program with topological and service segments (also referred to by their Segment Identifier (SID)) carried in a Segment Routing Header (SRH) <xref target="RFC8754"/>.</t>

<t>Some SRv6 applications such as strict path traffic engineering may require long segment lists. Compressing the encoding of these long segment lists in the packet header can significantly reduce the header size. This document specifies new flavors to the SR segment endpoint behaviors defined in <xref target="RFC8986"/> that enable a compressed encoding of the SRv6 segment list.</t>

<t>The flavors defined in this document leverage the SRv6 data plane defined in <xref target="RFC8754"/> and <xref target="RFC8986"/>, and are compatible with the SRv6 control plane extensions for IS-IS <xref target="RFC9352"/>, OSPF <xref target="RFC9513"/>, and BGP <xref target="RFC9252"/>.</t>

</section>
<section anchor="terminology"><name>Terminology</name>

<t>This document leverages the terms defined in <xref target="RFC8402"/>, <xref target="RFC8754"/>, and <xref target="RFC8986"/>. The reader is assumed to be familiar with this terminology.</t>

<t>This document introduces the following new terms:</t>

<t><list style="symbols">
  <t>Locator-Block: The most significant bits of a SID locator that represent the SRv6 SID block. The Locator-Block is referred to as &quot;B&quot; in Section 3.1 of <xref target="RFC8986"/>.</t>
  <t>Locator-Node: The least significant bits of a SID locator that identify the SR segment endpoint node instantiating the SID. The Locator-Node is referred to as &quot;N&quot; in Section 3.1 of <xref target="RFC8986"/>.</t>
  <t>Compressed-SID (C-SID): A compressed encoding of a SID. The C-SID includes the Locator-Node and Function bits of the SID being compressed.</t>
  <t>C-SID container: A 128-bit container holding a list of one or more C-SIDs.</t>
  <t>C-SID sequence: A group of one or more consecutive segment list entries carrying the common Locator-Block and at least one C-SID container.</t>
  <t>Uncompressed SID sequence: A group of one or more consecutive uncompressed SIDs in a segment list.</t>
  <t>Compressed segment list encoding: A segment list encoding that reduces the packet header length thanks to one or more C-SID sequences. A compressed segment list encoding also contains zero, one, or more uncompressed SID sequences.</t>
  <t>Global Identifiers Block (GIB): The pool of C-SID values available for global allocation.</t>
  <t>Local Identifiers Block (LIB): The pool of C-SID values available for local allocation.</t>
</list></t>

<t>In this document, the length of each constituent part of a SID is referred to as follows.</t>

<t><list style="symbols">
  <t>LBL is the Locator-Block length of the SID.</t>
  <t>LNL is the Locator-Node length of the SID.</t>
  <t>FL is the Function length of the SID.</t>
  <t>AL is the Argument length of the SID.</t>
</list></t>

<t>In addition, LNFL is the sum of the Locator-Node length and the Function length of the SID. It is also referred to as the C-SID length.</t>

<section anchor="requirements-language"><name>Requirements Language</name>

<t>The key words &quot;MUST&quot;, &quot;MUST NOT&quot;, &quot;REQUIRED&quot;, &quot;SHALL&quot;, &quot;SHALL NOT&quot;, &quot;SHOULD&quot;, &quot;SHOULD NOT&quot;, &quot;RECOMMENDED&quot;, &quot;NOT RECOMMENDED&quot;, &quot;MAY&quot;, and &quot;OPTIONAL&quot; in this document are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all capitals, as shown here.</t>

</section>
</section>
<section anchor="basic-concepts"><name>Basic Concepts</name>

<t>In an SR domain, all SRv6 SIDs instantiated from the same Locator-Block share the same most significant bits. In addition, when the combined length of the SRv6 SID Locator, Function, and Argument is smaller than 128 bits, the least significant bits of the SID are padded with zeros.
The compressed segment list encoding seeks to decrease the packet header length by avoiding the repetition of the same Locator-Block and reducing the use of padding bits.</t>

<t>The compressed segment list encoding is fully compatible with and builds upon the mechanisms specified in <xref target="RFC8754"/> and <xref target="RFC8986"/>. The compressed encoding is achieved by combining a compressed segment list encoding logic on the SR source node (<xref target="sec-source-node"/>) with new flavors of the base SRv6 segment endpoint behaviors that decode this compressed encoding (<xref target="sec-endpoint"/>).</t>

<t>A segment list can be encoded in the packet header using any combination of compressed and uncompressed sequences. The C-SID sequences leverage the flavors defined in this document, while the uncompressed sequences use behaviors and flavors defined in other documents, such as <xref target="RFC8986"/>. An SR source node constructs and compresses the SID-list depending on the SIDs instantiated on each SR segment endpoint node that the packet should traverse, as well as its own compression capabilities.</t>

<t>The compressed segment list encoding works with any Locator-Block allocation. For example, each routing domain within the SR domain can be allocated a /48 Locator-Block from a global IPv6 block available to the operator, or from a prefix allocated to SRv6 SIDs as discussed in Section 5 of <xref target="I-D.ietf-6man-sids"/>.</t>

</section>
<section anchor="sec-endpoint"><name>SR Segment Endpoint Flavors</name>

<t>This section defines two SR segment endpoint flavors, NEXT-C-SID and REPLACE-C-SID, for the End, End.X, End.T, End.B6.Encaps, End.B6.Encaps.Red, and End.BM behaviors of <xref target="RFC8986"/>.
This section also defines a REPLACE-C-SID flavor for the End.DX6, End.DX4, End.DT6, End.DT4, End.DT46, End.DX2, End.DX2V, End.DT2U, and End.DT2M behaviors of <xref target="RFC8986"/>.
A counterpart NEXT-C-SID flavor is not defined for these SIDs because they can be included within a C-SID sequence that uses the NEXT-C-SID flavor without any modification of the procedure defined in <xref target="RFC8986"/>.
Future documents may extend the applicability of the NEXT-C-SID and REPLACE-C-SID flavors to other SR segment endpoint behaviors (see <xref target="sec-future"/>).</t>

<t>The use of these flavors, either individually or in combination, enables the compressed segment list encoding.</t>

<t>The NEXT-C-SID flavor and the REPLACE-C-SID flavor both leverage the SID Argument to determine the next segment to be processed, but employ different segment list compression schemes.
With the NEXT-C-SID flavor, each C-SID container is a fully formed SRv6 SID with the common Locator-Block for all the C-SIDs in the C-SID container, a Locator-Node and Function that are those of the first C-SID, and an Argument carrying the subsequent C-SIDs.
With the REPLACE-C-SID flavor, only the first element in a C-SID sequence is a fully formed SRv6 SID. It has the common Locator-Block for all the C-SIDs in the C-SID sequence, and a Locator-Node and Function that are those of the first C-SID. The remaining elements in the C-SID sequence are C-SID containers carrying the subsequent C-SIDs without the Locator-Block.</t>

<t>SRv6 is intended for use in a variety of networks that require different prefix lengths and SID numbering spaces. Each of the two flavors introduced in this document comes with its own recommendations for Locator-Block and C-SID length, as specified in <xref target="sec-next"/> and <xref target="sec-replace"/>. These flavors are best suited for different environments, depending on the requirements of the network. For instance, larger C-SID lengths may be more suitable for networks requiring ample SID numbering space, while smaller C-SID lengths are better for compression efficiency. The two compression flavors allow the compressed segment list encoding to adapt to a range of requirements, with support for multiple compression levels. Network operators can choose the flavor that best suits their use case, deployment design, and network scale.</t>

<t>The SIDs of both flavors can co-exist in the same SR domain, on the same SR segment endpoint node, and even in the same segment list. However, it is RECOMMENDED, for ease of operation, that a single compressed encoding flavor be used in a given routing domain. In a multi-domain deployment, different flavors may be used in different routing domains of the SR domain.</t>

<t>In the remainder of this document, the term &quot;a SID of this document&quot; refers to any End, End.X, End.T, End.B6.Encaps, End.B6.Encaps.Red, or End.BM SID with the NEXT-C-SID or the REPLACE-C-SID flavor, and with any combination of Penultimate Segment Pop (PSP), Ultimate Segment Pop (USP), and Ultimate Segment Decapsulation (USD) flavor, or any End.DX6, End.DX4, End.DT6, End.DT4, End.DT46, End.DX2, End.DX2V, End.DT2U, or End.DT2M with the REPLACE-C-SID flavor. All the SIDs introduced in this document are listed in <xref target="tbl-iana-endpoint-behaviors"/>.</t>

<t>In the remainder of this document, the terms &quot;NEXT-C-SID flavor SID&quot; and &quot;REPLACE-C-SID flavor SID&quot; refer to any SID of this document with the NEXT-C-SID flavor and with the REPLACE-C-SID flavor, respectively.</t>

<section anchor="sec-next"><name>NEXT-C-SID Flavor</name>

<t>A C-SID sequence using the NEXT-C-SID flavor comprises one or more C-SID containers. Each C-SID container is a fully formed 128-bit SID structured as shown in <xref target="fig-next-struct"/>. It carries a Locator-Block followed by a series of C-SIDs. The Locator-Node and Function of the C-SID container are those of the first C-SID, and its Argument is the contiguous series of subsequent C-SIDs. The second C-SID is encoded in the most significant bits of the C-SID container Argument, the third C-SID is encoded in the bits of the Argument that immediately follow the second C-SID, and so on. When all C-SIDs have the same length, a C-SID container can carry up to K C-SIDs, where K is computed as floor((128-LBL)/LNFL) (floor(x) is the greatest integer less than or equal to x <xref target="GKP94"/>). Each C-SID container for NEXT-C-SID is independent, such that contiguous C-SID containers in a C-SID sequence can be considered as separate C-SID sequences.</t>

<t>When a C-SID sequence comprises at least two C-SIDs, the last C-SID in the sequence is not required to have the NEXT-C-SID flavor. It can be bound to any behavior and flavor(s), including the REPLACE-C-SID flavor, as long as the updated destination address resulting from the processing of the previous C-SID in the sequence is a valid form for that last SID. Line S12 of the first pseudocode in <xref target="sec-source-compression"/> provides sufficient conditions to ensure this property.</t>

<figure title="Structure of a NEXT-C-SID flavor SID (scaled for a 48-bit Locator-Block, 16-bit combined Locator-Node and Function, and 64-bit Argument)" anchor="fig-next-struct"><artwork><![CDATA[
+------------------------------------------------------------------+
|     Locator-Block      |Loc-Node|            Argument            |
|                        |Function|                                |
+------------------------------------------------------------------+
 <-------- LBL ---------> < LNFL > <------------- AL ------------->
]]></artwork></figure>

<t>An implementation MUST support a 32-bit Locator-Block length (LBL) and a 16-bit C-SID length (LNFL) for NEXT-C-SID flavor SIDs, and may support any other Locator-Block and C-SID length.
A deployment SHOULD use a consistent Locator-Block length and C-SID length for all SIDs of the SR domain.</t>

<t>The Argument length (AL) for NEXT-C-SID flavor SIDs is equal to 128-LBL-LNFL.</t>

<t>When processing an IPv6 packet that matches a FIB entry locally instantiated as a SID with the NEXT-C-SID flavor, the SR segment endpoint node applies the procedure specified in the following subsection that corresponds to the SID behavior. If the SID also has the PSP, USP, or USD flavor, the procedure is modified as described in <xref target="sec-next-flavors"/>.</t>

<t>An SR segment endpoint node instantiating a SID with the NEXT-C-SID flavor MUST accept any Argument value for that SID.</t>

<t>At high level, for any SID with the NEXT-C-SID flavor, the SR segment endpoint node determines the next SID of the SID list as follows. If the Argument value of the active SID is non-zero, the SR segment endpoint node constructs the next SID from the active SID by copying the entire SID Argument value to the bits that immediately follow the Locator-Block, thus overwriting the active SID Locator-Node and Function with those of the next C-SID, and filling the least significant LNFL bits of the Argument with zeros. Otherwise (if the Argument value is 0), the SR segment endpoint node copies the next 128-bit Segment List entry from the SRH to the Destination Address field of the IPv6 header.</t>

<section anchor="sec-next-end"><name>End with NEXT-C-SID</name>

<t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an End SID with the NEXT-C-SID flavor, the procedure described in Section 4.1 of <xref target="RFC8986"/> is executed with the following modifications.</t>

<t>The below pseudocode is inserted between lines S01 and S02 of the SRH processing in Section 4.1 of <xref target="RFC8986"/>. In addition, this pseudocode is executed before processing any extension header that is not an SRH, a Hop-by-Hop header or a Destination Option header, or before processing the upper-layer header, whichever comes first.</t>

<figure><artwork><![CDATA[
N01. If (DA.Argument != 0) {
N02.   If (IPv6 Hop Limit <= 1) {
N03.     Send an ICMP Time Exceeded message to the Source Address,
           Code 0 (Hop limit exceeded in transit),
           interrupt packet processing and discard the packet.
N04.   }
N05.   Copy DA.Argument into the bits [LBL..(LBL+AL-1)] of the
         Destination Address.
N06.   Set the bits [(LBL+AL)..127] of the Destination Address to
         zero.
N07.   Decrement IPv6 Hop Limit by 1.
N08.   Submit the packet to the egress IPv6 FIB lookup for
         transmission to the next destination.
N09. }
]]></artwork></figure>

<aside>
  <t>Notes:</t>

  <t><list style="symbols">
    <t><spanx style="verb">DA.Argument</spanx> identifies the value contained in the bits <spanx style="verb">[(LBL+LNFL)..127]</spanx> in the Destination Address of the IPv6 header.</t>
    <t>The value in the Segments Left field of the SRH is not modified when <spanx style="verb">DA.Argument</spanx> in the received packet has a non-zero value.</t>
  </list></t>
</aside>

<t>A rendering of the complete pseudocode is provided in <xref target="sec-next-end-complete"/>.</t>

</section>
<section anchor="sec-next-endx"><name>End.X with NEXT-C-SID</name>

<t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an End.X SID with the NEXT-C-SID flavor, the procedure described in Section 4.2 of <xref target="RFC8986"/> is executed with the following modifications.</t>

<t>The pseudocode in <xref target="sec-next-end"/> of this document is modified by replacing line N08 as shown below.</t>

<figure><artwork><![CDATA[
N08.   Submit the packet to the IPv6 module for transmission to the
         new destination via a member of J.
]]></artwork></figure>

<aside>
  <t>Note: the variable J is defined in Section 4.2 of <xref target="RFC8986"/>.</t>
</aside>

<t>The resulting pseudocode is inserted between lines S01 and S02 of the SRH processing in Section 4.1 of <xref target="RFC8986"/> after applying the modification described in Section 4.2 of <xref target="RFC8986"/>. In addition, this pseudocode is executed before processing any extension header that is not an SRH, a Hop-by-Hop header or a Destination Option header, or before processing the upper-layer header, whichever comes first.</t>

<t>A rendering of the complete pseudocode is provided in <xref target="sec-next-endx-complete"/>.</t>

</section>
<section anchor="sec-next-endt"><name>End.T with NEXT-C-SID</name>

<t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an End.T SID with the NEXT-C-SID flavor, the procedure described in Section 4.3 of <xref target="RFC8986"/> is executed with the following modifications.</t>

<t>The pseudocode in <xref target="sec-next-end"/> of this document is modified by replacing line N08 as shown below.</t>

<figure><artwork><![CDATA[
N08.1.   Set the packet's associated FIB table to T.
N08.2.   Submit the packet to the egress IPv6 FIB lookup for
           transmission to the new destination.
]]></artwork></figure>

<aside>
  <t>Note: the variable T is defined in Section 4.3 of <xref target="RFC8986"/>.</t>
</aside>

<t>The resulting pseudocode is inserted between lines S01 and S02 of the SRH processing in Section 4.1 of <xref target="RFC8986"/> after applying the modification described in Section 4.3 of <xref target="RFC8986"/>. In addition, this pseudocode is executed before processing any extension header that is not an SRH, a Hop-by-Hop header or a Destination Option header, or before processing the upper-layer header, whichever comes first.</t>

<t>A rendering of the complete pseudocode is provided in <xref target="sec-next-endt-complete"/>.</t>

</section>
<section anchor="sec-next-endb6"><name>End.B6.Encaps with NEXT-C-SID</name>

<t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an End.B6.Encaps SID with the NEXT-C-SID flavor, the procedure described in Section 4.13 of <xref target="RFC8986"/> is executed with the following modifications.</t>

<t>The pseudocode in <xref target="sec-next-end"/> of this document is modified by replacing line N08 as shown below.</t>

<figure><artwork><![CDATA[
N08.1.   Push a new IPv6 header with its own SRH containing B.
N08.2.   Set the outer IPv6 SA to A.
N08.3.   Set the outer IPv6 DA to the first SID of B.
N08.4.   Set the outer Payload Length, Traffic Class, Flow Label,
           Hop Limit, and Next Header fields.
N08.5.   Submit the packet to the egress IPv6 FIB lookup for
           transmission to the next destination.
]]></artwork></figure>

<aside>
  <t>Note: the variables A and B, as well as the values of the Payload Length, Traffic Class, Flow Label, Hop Limit, and Next Header are defined in Section 4.13 of <xref target="RFC8986"/>.</t>
</aside>

<t>The resulting pseudocode is inserted between lines S01 and S02 of the SRH processing in Section 4.13 of <xref target="RFC8986"/>. In addition, this pseudocode is executed before processing any extension header that is not an SRH, a Hop-by-Hop header or a Destination Option header, or before processing the upper-layer header, whichever comes first.</t>

<t>A rendering of the complete pseudocode is provided in <xref target="sec-next-endb6-complete"/>.</t>

<t>Similar to the base End.B6.Encaps SID defined in Section 4.13 of <xref target="RFC8986"/>, the NEXT-C-SID flavor variant updates the Destination Address field of the inner IPv6 header to the next SID in the original segment list before encapsulating the packet with the segment list of SR Policy B. At the endpoint of SR Policy B, the encapsulation is removed and the inner packet is forwarded towards the exposed destination address, which already contains the next SID in the original segment list.</t>

</section>
<section anchor="sec-next-endb6red"><name>End.B6.Encaps.Red with NEXT-C-SID</name>

<t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an End.B6.Encaps.Red SID with the NEXT-C-SID flavor, the procedure described in Section 4.14 of <xref target="RFC8986"/> is executed with the same modifications as in <xref target="sec-next-endb6"/> of this document.</t>

</section>
<section anchor="sec-next-endbm"><name>End.BM with NEXT-C-SID</name>

<t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an End.BM SID with the NEXT-C-SID flavor, the procedure described in Section 4.15 of <xref target="RFC8986"/> is executed with the following modifications.</t>

<t>The pseudocode in <xref target="sec-next-end"/> of this document is modified by replacing line N08 as shown below.</t>

<figure><artwork><![CDATA[
N08.1.   Push the MPLS label stack for B.
N08.2.   Submit the packet to the MPLS engine for transmission.
]]></artwork></figure>

<aside>
  <t>Note: the variable B is defined in Section 4.15 of <xref target="RFC8986"/>.</t>
</aside>

<t>The resulting pseudocode is inserted between lines S01 and S02 of the SRH processing in Section 4.15 of <xref target="RFC8986"/>. In addition, this pseudocode is executed before processing any extension header that is not an SRH, a Hop-by-Hop header or a Destination Option header, or before processing the upper-layer header, whichever comes first.</t>

<t>A rendering of the complete pseudocode is provided in <xref target="sec-next-endbm-complete"/>.</t>

</section>
<section anchor="sec-next-flavors"><name>Combination with PSP, USP and USD flavors</name>

<t>PSP: The PSP flavor defined in Section 4.16.1 of <xref target="RFC8986"/> is unchanged when combined with the NEXT-C-SID flavor.</t>

<t>USP: The USP flavor defined in Section 4.16.2 of <xref target="RFC8986"/> is unchanged when combined with the NEXT-C-SID flavor.</t>

<t>USD: The USP flavor defined in Section 4.16.3 of <xref target="RFC8986"/> is unchanged when combined with the NEXT-C-SID flavor.</t>

</section>
</section>
<section anchor="sec-replace"><name>REPLACE-C-SID Flavor</name>

<t>A C-SID sequence using the REPLACE-C-SID flavor starts with a C-SID container in fully formed 128-bit SID format. The Locator-Block of this SID is the common Locator-Block for all the C-SIDs in the C-SID sequence, its Locator-Node and Function are those of the first C-SID, and its Argument carries the index of the current C-SID in the current C-SID container. The Argument value is initially 0. When more segments are present in the segment list, the C-SID sequence continues with one or more C-SID containers in packed format carrying the subsequent C-SIDs in the sequence. Each container in packed format is a 128-bit Segment List entry split into K &quot;positions&quot; of LNFL bits, where K is computed as floor(128/LNFL). If LNFL does not divide into 128 perfectly, a zero pad is added in the least significant bits of the C-SID container to fill the bits left over. The second C-SID in the C-SID sequence is encoded in the least significant bit position of the first C-SID container in packed format (position K-1), the third C-SID is encoded in position K-2, and so on.</t>

<t>The last C-SID in the C-SID sequence is not required to have the REPLACE-C-SID flavor. It can be bound to any behavior and flavor(s), including the NEXT-C-SID flavor, as long as it meets the conditions defined in <xref target="sec-source-node"/>.</t>

<t>The structure of a SID with the REPLACE-C-SID flavor is shown in <xref target="fig-replace-struct"/>. The same structure is also that of the C-SID container for REPLACE-C-SID in fully formed 128-bit SID format.</t>

<figure title="Structure of a REPLACE-C-SID flavor SID (scaled for a 48-bit Locator-Block, 32-bit combined Locator-Node and Function, and 48-bit Argument)" anchor="fig-replace-struct"><artwork><![CDATA[
+-------------------------------------------------------------------+
|     Locator-Block      |  Locator-Node  |        Argument         |
|                        |   + Function   |                         |
+-------------------------------------------------------------------+
 <-------- LBL ---------> <---- LNFL ----> <--------- AL ---------->
]]></artwork></figure>

<t>The structure of a C-SID container for REPLACE-C-SID in packed format is shown in <xref target="fig-replace-container"/>.</t>

<figure title="Structure of a C-SID container for REPLACE-C-SID using a 32-bit C-SID length (K = 4)" anchor="fig-replace-container"><artwork><![CDATA[
+-------------------------------------------------------------------+
|  Fourth C-SID  |  Third C-SID   |  Second C-SID  |  First C-SID   |
|  (position 0)  |  (position 1)  |  (position 2)  |  (position 3)  |
+-------------------------------------------------------------------+
 <---- LNFL ----> <---- LNFL ----> <---- LNFL ----> <---- LNFL ---->
]]></artwork></figure>

<t>The REPLACE-C-SID flavor SIDs support any Locator-Block length (LBL), depending on the needs of the operator, as long as it does not exceed 128-LNFL-ceiling(log_2(128/LNFL)) (ceiling(x) is the least integer greater than or equal to x <xref target="GKP94"/>), so that enough bits remain available for the C-SID and Argument. A Locator-Block length of 48, 56, 64, 72, or 80 bits is RECOMMENDED for address planning reasons.</t>

<t>This document defines the REPLACE-C-SID flavor for 16-bit and 32-bit C-SID lengths (LNFL). An implementation MUST support a 32-bit C-SID length for REPLACE-C-SID flavor SIDs.</t>

<t>A deployment SHOULD use a consistent Locator-Block length and C-SID length for all SIDs of the SR domain.</t>

<t>The Argument length (AL) for REPLACE-C-SID flavor SIDs is equal to 128-LBL-LNFL. The index value is encoded in the least significant X bits of the Argument, where X is computed as ceiling(log_2(128/LNFL)).</t>

<t>When processing an IPv6 packet that matches a FIB entry locally instantiated as a SID with the REPLACE-C-SID flavor, the SR segment endpoint node applies the procedure specified in the following subsection that corresponds to the SID behavior. If the SID also has the PSP, USP, or USD flavor, the procedure is modified as described in <xref target="sec-replace-flavors"/>.</t>

<t>At high level, at the start of a C-SID sequence using the REPLACE-C-SID flavor, the first C-SID container in fully formed 128-bit SID format is copied to the Destination Address of the IPv6 header. Then, for any SID with the REPLACE-C-SID flavor, the SR segment endpoint node determines the next SID of the SID list as follows. When an SRH is present, the SR segment endpoint node decrements the index value in the Argument of the active SID if the index value is not 0 or, if it is 0, decrements the Segments Left value in the SRH and sets the index value in the Argument of the active SID to K-1. The updated index value indicates the position of the next C-SID within the C-SID container in packed format at the &quot;Segment List&quot; index &quot;Segments Left&quot; in the SRH. The SR segment endpoint node then constructs the next SID by copying this next C-SID to the bits that immediately follow the Locator-Block in the Destination Address field of the IPv6 header, thus overwriting the active SID Locator-Node and Function with those of the next C-SID. If no SRH is present, the SR segment endpoint node ignores the index value in the SID Argument (except End.DT2M, see <xref target="sec-replace-enddx"/>) and processes the upper-layer header as per <xref target="RFC8986"/>. The C-SID sequence ends with a last C-SID in the last C-SID container that does not have the REPLACE-C-SID flavor, or with the special C-SID value 0, or when reaching the end of the segment list, whichever comes first.</t>

<section anchor="sec-replace-end"><name>End with REPLACE-C-SID</name>

<t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an End SID with the REPLACE-C-SID flavor, the SRH processing described in Section 4.1 of <xref target="RFC8986"/> is executed with the following modifications.</t>

<t>Line S02 of SRH processing in Section 4.1 of <xref target="RFC8986"/> is replaced as follows.</t>

<figure><artwork><![CDATA[
S02.   If (Segments Left == 0 and (DA.Arg.Index == 0 or
           Segment List[0][DA.Arg.Index-1] == 0)) {
]]></artwork></figure>

<t>Lines S09 to S15 are replaced by the following pseudo code.</t>

<figure><artwork><![CDATA[
R01. If (DA.Arg.Index != 0) {
R02.   If ((Last Entry > max_LE) or (Segments Left > Last Entry)) {
R03.     Send an ICMP Parameter Problem to the Source Address,
           Code 0 (Erroneous header field encountered),
           Pointer set to the Segments Left field,
           interrupt packet processing and discard the packet.
R04.   }
R05.   Decrement DA.Arg.Index by 1.
R06.   If (Segment List[Segments Left][DA.Arg.Index] == 0) {
R07.     Decrement Segments Left by 1.
R08.     Decrement IPv6 Hop Limit by 1.
R09.     Update IPv6 DA with Segment List[Segments Left]
R10.     Submit the packet to the egress IPv6 FIB lookup for
          transmission to the new destination.
R11.   }
R12. } Else {
R13.   If((Last Entry > max_LE) or (Segments Left > Last Entry+1)){
R14.     Send an ICMP Parameter Problem to the Source Address,
           Code 0 (Erroneous header field encountered),
           Pointer set to the Segments Left field,
           interrupt packet processing and discard the packet.
R15.   }
R16.   Decrement Segments Left by 1.
R17.   Set DA.Arg.Index to (floor(128/LNFL) - 1).
R18. }
R19. Decrement IPv6 Hop Limit by 1.
R20. Write Segment List[Segments Left][DA.Arg.Index] into the bits
       [LBL..LBL+LNFL-1] of the Destination Address of the IPv6
       header.
R21. Submit the packet to the egress IPv6 FIB lookup for
       transmission to the new destination.
]]></artwork></figure>

<aside>
  <t>Notes:</t>

  <t><list style="symbols">
    <t><spanx style="verb">DA.Arg.Index</spanx> identifies the value contained in the bits <spanx style="verb">[(128-ceiling(log_2(128/LNFL)))..127]</spanx> in the Destination Address of the IPv6 header.</t>
    <t><spanx style="verb">Segment List[Segments Left][DA.Arg.Index]</spanx> identifies the value contained in the bits <spanx style="verb">[DA.Arg.Index*LNFL..(DA.Arg.Index+1)*LNFL-1]</spanx> in the SRH Segment List entry at index Segments Left.</t>
  </list></t>
</aside>

<t>The upper-layer header processing described in Section 4.1.1 of <xref target="RFC8986"/> is unchanged.</t>

<t>A rendering of the complete pseudocode is provided in <xref target="sec-replace-end-complete"/>.</t>

</section>
<section anchor="sec-replace-endx"><name>End.X with REPLACE-C-SID</name>

<t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an End.X SID with the REPLACE-C-SID flavor, the procedure described in Section 4.2 of <xref target="RFC8986"/> is executed with the following modifications.</t>

<t>The pseudocode in <xref target="sec-replace-end"/> of this document is modified by replacing lines R10 and R21 as shown below.</t>

<figure><artwork><![CDATA[
R10. Submit the packet to the IPv6 module for transmission to the
       new destination via a member of J.
]]></artwork></figure>

<figure><artwork><![CDATA[
R21. Submit the packet to the IPv6 module for transmission to the
       new destination via a member of J.
]]></artwork></figure>

<aside>
  <t>Note: the variable J is defined in Section 4.2 of <xref target="RFC8986"/>.</t>
</aside>

<t>The SRH processing in Section 4.2 of <xref target="RFC8986"/> is replaced with the resulting pseudocode. The upper-layer header processing is unchanged.</t>

<t>A rendering of the complete pseudocode is provided in <xref target="sec-replace-endx-complete"/>.</t>

</section>
<section anchor="sec-replace-endt"><name>End.T with REPLACE-C-SID</name>

<t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an End.T SID with the REPLACE-C-SID flavor, the procedure described in Section 4.3 of <xref target="RFC8986"/> is executed with the following modifications.</t>

<t>The pseudocode in <xref target="sec-replace-end"/> of this document is modified by replacing lines R10 and R21 as shown below.</t>

<figure><artwork><![CDATA[
R10.1. Set the packet's associated FIB table to T.
R10.2. Submit the packet to the egress IPv6 FIB lookup for
         transmission to the new destination.
]]></artwork></figure>

<figure><artwork><![CDATA[
R21.1. Set the packet's associated FIB table to T.
R21.2. Submit the packet to the egress IPv6 FIB lookup for
         transmission to the new destination.
]]></artwork></figure>

<aside>
  <t>Note: the variable T is defined in Section 4.3 of <xref target="RFC8986"/>.</t>
</aside>

<t>The SRH processing in Section 4.3 of <xref target="RFC8986"/> is replaced with the resulting pseudocode. The upper-layer header processing is unchanged.</t>

<t>A rendering of the complete pseudocode is provided in <xref target="sec-replace-endt-complete"/>.</t>

</section>
<section anchor="sec-replace-endb6"><name>End.B6.Encaps with REPLACE-C-SID</name>

<t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an End.B6.Encaps SID with the REPLACE-C-SID flavor, the procedure described in Section 4.13 of <xref target="RFC8986"/> is executed with the following modifications.</t>

<t>The pseudocode in <xref target="sec-replace-end"/> of this document is modified by replacing lines R10 and R21 as shown below.</t>

<figure><artwork><![CDATA[
R10.1. Push a new IPv6 header with its own SRH containing B.
R10.2. Set the outer IPv6 SA to A.
R10.3. Set the outer IPv6 DA to the first SID of B.
R10.4. Set the outer Payload Length, Traffic Class, Flow Label,
         Hop Limit, and Next Header fields.
R10.5. Submit the packet to the egress IPv6 FIB lookup for
         transmission to the next destination.
]]></artwork></figure>

<figure><artwork><![CDATA[
R21.1. Push a new IPv6 header with its own SRH containing B.
R21.2. Set the outer IPv6 SA to A.
R21.3. Set the outer IPv6 DA to the first SID of B.
R21.4. Set the outer Payload Length, Traffic Class, Flow Label,
         Hop Limit, and Next Header fields.
R21.5. Submit the packet to the egress IPv6 FIB lookup for
         transmission to the next destination.
]]></artwork></figure>

<aside>
  <t>Note: the variables A and B, as well as the values of the Payload Length, Traffic Class, Flow Label, Hop Limit, and Next Header are defined in Section 4.13 of <xref target="RFC8986"/>.</t>
</aside>

<t>The SRH processing in Section 4.13 of <xref target="RFC8986"/> is replaced with the resulting pseudocode. The upper-layer header processing is unchanged.</t>

<t>A rendering of the complete pseudocode is provided in <xref target="sec-replace-endb6-complete"/>.</t>

</section>
<section anchor="sec-replace-endb6red"><name>End.B6.Encaps.Red with REPLACE-C-SID</name>

<t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an End.B6.Encaps.Red SID with the REPLACE-C-SID flavor, the procedure described in Section 4.14 of <xref target="RFC8986"/> is executed with the same modifications as in <xref target="sec-replace-endb6"/> of this document.</t>

</section>
<section anchor="sec-replace-endbm"><name>End.BM with REPLACE-C-SID</name>

<t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an End.BM SID with the REPLACE-C-SID flavor, the procedure described in Section 4.15 of <xref target="RFC8986"/> is executed with the following modifications.</t>

<t>The pseudocode in <xref target="sec-replace-end"/> of this document is modified by replacing lines R10 and R21 as shown below.</t>

<figure><artwork><![CDATA[
R10.1. Push the MPLS label stack for B.
R10.2. Submit the packet to the MPLS engine for transmission.
]]></artwork></figure>

<figure><artwork><![CDATA[
R21.1. Push the MPLS label stack for B.
R21.2. Submit the packet to the MPLS engine for transmission.
]]></artwork></figure>

<aside>
  <t>Note: the variable B is defined in Section 4.15 of <xref target="RFC8986"/>.</t>
</aside>

<t>The SRH processing in Section 4.15 of <xref target="RFC8986"/> is replaced with the resulting pseudocode. The upper-layer header processing is unchanged.</t>

<t>A rendering of the complete pseudocode is provided in <xref target="sec-replace-endbm-complete"/>.</t>

</section>
<section anchor="sec-replace-enddx"><name>End.DX and End.DT with REPLACE-C-SID</name>

<t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an End.DX6, End.DX4, End.DT6, End.DT4, End.DT46, End.DX2, End.DX2V, or End.DT2U SID with the REPLACE-C-SID flavor, the corresponding procedure described in Sections 4.4 through 4.11 of <xref target="RFC8986"/> is executed.</t>

<t>These SIDs differ from those defined in <xref target="RFC8986"/> by the presence of an Argument as part of the SID structure. The Argument value is ignored by the SR segment endpoint node.</t>

<t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an End.DT2M SID with the REPLACE-C-SID flavor, the procedure described in Section 4.12 of <xref target="RFC8986"/> is executed with the following modification.</t>

<t>The value of <spanx style="verb">Arg.FE2</spanx> is 16-bit long. The SR segment endpoint node obtains the value <spanx style="verb">Arg.FE2</spanx> from the 16 most significant bits of <spanx style="verb">DA.Argument</spanx> if <spanx style="verb">DA.Arg.Index</spanx> is zero, or from the 16 least significant bits of the next position in the current C-SID container (<spanx style="verb">Segment List[Segments Left][DA.Arg.Index-1]</spanx>) otherwise (<spanx style="verb">DA.Arg.Index</spanx> is non-zero).</t>

</section>
<section anchor="sec-replace-flavors"><name>Combination with PSP, USP, and USD flavors</name>

<t>PSP:
When combined with the REPLACE-C-SID flavor, the additional PSP flavor instructions defined in Section 4.16.1.2 of <xref target="RFC8986"/> are inserted after lines R09 and R20 of the pseudocode in <xref target="sec-replace-end"/>, and the first line of the inserted instructions after R20 is modified as follows.</t>

<figure><artwork><![CDATA[
R20.1.   If (Segments Left == 0 and (DA.Arg.Index == 0 or
             Segment List[0][DA.Arg.Index-1] == 0)) {
]]></artwork></figure>

<aside>
  <t>Note: <spanx style="verb">Segment List[Segments Left][DA.Arg.Index-1]</spanx> identifies the value contained in the bits <spanx style="verb">[(DA.Arg.Index-1)*LNFL..DA.Arg.Index*LNFL-1]</spanx> in the SRH Segment List entry at index Segments Left.</t>
</aside>

<t>USP:
When combined with the REPLACE-C-SID flavor, the line S03 of the pseudocode in <xref target="sec-replace-end"/> are substituted by the USP flavor instructions S03.1 to S03.4 defined in Section 4.16.2 of <xref target="RFC8986"/>. Note that S03 is shown in the complete pseudocode in <xref target="sec-replace-end-complete"/>.</t>

<t>USD:
The USD flavor defined in Section 4.16.3 of <xref target="RFC8986"/> is unchanged when combined with the REPLACE-C-SID flavor.</t>

</section>
</section>
</section>
<section anchor="c-sid-allocation"><name>C-SID Allocation</name>

<t>The C-SID value of 0 is reserved. It is used to indicate the end of a C-SID container.</t>

<t>In order to efficiently manage the C-SID numbering space, a deployment may divide it into two non-overlapping sub-spaces: a Global Identifiers Block (GIB) and a Local Identifiers Block (LIB).</t>

<t>The C-SID values that are allocated from the GIB have a global semantic within the Locator-Block, while those that are allocated from the LIB have a local semantic on an SR segment endpoint node and within the scope of the Locator-Block.</t>

<t>The concept of LIB is applicable to SRv6 and specifically to its NEXT-C-SID and REPLACE-C-SID flavors. The shorter the C-SID, the more benefit the LIB brings.</t>

<t>The opportunity to use these sub-spaces, their size, and their C-SID allocation policy depends on the C-SID length relative to the size of the network (e.g., number of nodes, links, service routes). Some guidelines for a typical deployment scenario are provided in the below subsections.</t>

<section anchor="global-c-sid"><name>Global C-SID</name>

<t>A global C-SID is a C-SID allocated from the GIB.</t>

<t>A global C-SID identifies a segment defined at the Locator-Block level. The tuple (Locator-Block, C-SID) identifies the same segment across all nodes of the SR domain. A typical example is a prefix segment bound to the End behavior.</t>

<t>A node can have multiple global C-SIDs under the same Locator-Block (e.g., one per IGP flexible algorithm (<xref target="RFC9350"/>)). Multiple nodes may share the same global C-SID (e.g., anycast).</t>

</section>
<section anchor="local-c-sid"><name>Local C-SID</name>

<t>A local C-SID is a C-SID allocated from the LIB.</t>

<t>A local C-SID identifies a segment defined at the node level and within the scope of a particular Locator-Block. The tuple (Locator-Block, C-SID) identifies a different segment on each node of the SR domain. A typical example is a non-routed Adjacency segment bound to the End.X behavior.</t>

<t>Let N1 and N2 be two different physical nodes of the SR domain and I a local C-SID value, N1 may allocate value I to SID S1 and N2 may allocate the same value I to SID S2.</t>

</section>
<section anchor="sec-c-sid-lib-recommendation"><name>GIB/LIB Usage</name>

<t>GIB and LIB usage is a local implementation and/or configuration decision, however, some guidelines for determining usage for specific SID behaviors and recommendations are provided.</t>

<t>The GIB number space is shared among all SR segment endpoint nodes using SRv6 locators under a Locator-Block space.  The more SIDs assigned from this space, per node, the faster it is exhausted.  Therefore its use is prioritized for global segments, such as SIDs that identify a node.</t>

<t>The LIB number space is unique per node. Each node is able to fully utilize the entire LIB number space without consideration of assignments at other nodes.  Therefore its use is prioritized for local segments, such as SIDs that identify services (of which there may be many) at nodes, cross-connects, or adjacencies.</t>

<t>While a longer C-SID length permits more flexibility in which SID behaviors may be assigned from the GIB, it also reduces the compression efficiency.</t>

<t>Given the previous Locator-Block and C-SID length recommendations, the following GIB/LIB usage is recommended:</t>

<t><list style="symbols">
  <t>NEXT-C-SID:
  <list style="symbols">
      <t>GIB: End</t>
      <t>LIB: End.X, End.T, End.DT4/6/46/2U/2M, End.DX4/6/2/2V (including large-scale pseudowire), End.B6.Encaps, End.B6.Encaps.Red, End.BM</t>
    </list></t>
  <t>REPLACE-C-SID:
  <list style="symbols">
      <t>GIB: End, End.X, End.T, End.DT4/6/46/2U/2M, End.DX4/6/2/2V, End.B6.Encaps, End.B6.Encaps.Red, End.BM</t>
      <t>LIB: End.DX2/2V for large-scale pseudowire</t>
    </list></t>
</list></t>

<t>Any other allocation is possible but may lead to a suboptimal use of the C-SID numbering space.</t>

</section>
<section anchor="sec-c-sid-installation"><name>Recommended Installation of C-SIDs in FIB</name>

<t>Section 4.3 of <xref target="RFC8754"/> defines how an SR segment endpoint node identifies a locally instantiated SRv6 SID. To ensure that any valid argument value is accepted, an SR segment endpoint node instantiating a NEXT-C-SID or REPLACE-C-SID flavor SID SHOULD install a corresponding FIB entry that matches only the Locator and Function parts of the SID (i.e., with a prefix length of LBL + LNL + FL).</t>

<t>In addition, an SR segment endpoint node instantiating NEXT-C-SID flavor SIDs from both GIB and LIB may install combined &quot;Global + Local&quot; FIB entries to match a sequence of global and local C-SIDs in a single longest prefix match (LPM) lookup.</t>

<t>For example, let us consider an SR segment endpoint node 10 instantiating the following two NEXT-C-SID flavor SIDs according to the C-SID length, Locator-Block length, and GIB/LIB recommendations in this section.</t>

<t><list style="symbols">
  <t><spanx style="verb">2001:db8:b1:10::</spanx> bound to the End behavior with the NEXT-C-SID flavor is instantiated from GIB with
  <list style="symbols">
      <t>Locator-Block length (LBL) = 48 (Locator-Block value <spanx style="verb">0x20010db800b1</spanx>),</t>
      <t>Locator-Node length (LNL) = 16 (Locator-Node value <spanx style="verb">0x0010</spanx>),</t>
      <t>Function length (FL) = 0, and</t>
      <t>Argument length (AL) = 64.</t>
    </list></t>
  <t><spanx style="verb">2001:db8:b1:f123::</spanx> bound to the End.X behavior for its local IGP adjacency <spanx style="verb">123</spanx> with the NEXT-C-SID flavor is instantiated from LIB with
  <list style="symbols">
      <t>Locator-Block length (LBL) = 48 (Locator-Block value <spanx style="verb">0x20010db800b1</spanx>),</t>
      <t>Locator-Node length (LNL) = 0,</t>
      <t>Function length (FL) = 16 (Function value <spanx style="verb">0xf123</spanx>), and</t>
      <t>Argument length (AL) = 64.</t>
    </list></t>
</list></t>

<t>For SID <spanx style="verb">2001:db8:b1:10::</spanx>, Node 10 would install the FIB entry <spanx style="verb">2001:db8:b1:10::/64</spanx> bound the End SID with the NEXT-C-SID flavor.</t>

<t>For SID <spanx style="verb">2001:db8:b1:f123::</spanx>, Node 10 would install the FIB entry <spanx style="verb">2001:db8:b1:f123::/64</spanx> bound the End.X SID for adjacency <spanx style="verb">123</spanx> with the NEXT-C-SID flavor.</t>

<t>In addition, Node 10 may also install the combined FIB entry <spanx style="verb">2001:db8:b1:10:f123::/80</spanx> bound the End.X SID for adjacency <spanx style="verb">123</spanx> with the NEXT-C-SID flavor.</t>

<t>As another example, let us consider an SR segment endpoint node 20 instantiating the following two REPLACE-C-SID flavor SIDs according to the C-SID length, Locator-Block length, and GIB/LIB recommendations in this section.</t>

<t><list style="symbols">
  <t><spanx style="verb">2001:db8:b2:20:1::</spanx> from GIB with Locator-Block length (LBL) = 48, Locator-Node length (LNL) = 16, Function length (FL) = 16, Argument length (AL) = 48, and bound to the End behavior with the REPLACE-C-SID flavor.</t>
  <t><spanx style="verb">2001:db8:b2:20:123::</spanx> from GIB with Locator-Block length (LBL) = 48, Locator-Node length (LNL) = 16, Function length (FL) = 16, Argument length (AL) = 48, and bound to the End.X behavior for its local IGP adjacency <spanx style="verb">123</spanx> with the REPLACE-C-SID flavor.</t>
</list></t>

<t>For SID <spanx style="verb">2001:db8:b2:20:1::</spanx>, Node 20 would install the FIB entry <spanx style="verb">2001:db8:b2:20:1::/80</spanx> bound the End SID with the REPLACE-C-SID flavor.</t>

<t>For SID <spanx style="verb">2001:db8:b2:20:123::</spanx>, Node 20 would install the FIB entry <spanx style="verb">2001:db8:b2:20:123::/80</spanx> bound the End.X SID for adjacency <spanx style="verb">123</spanx> with the REPLACE-C-SID flavor.</t>

</section>
</section>
<section anchor="sec-source-node"><name>SR Source Node</name>

<t>An SR source node may learn from a control plane protocol (see <xref target="sec-control-plane"/>) or local configuration the SIDs that it can use in a segment list, along with their respective SR segment endpoint behavior, flavors, structure, and any other relevant attribute (e.g., the set of L3 adjacencies associated with an End.X SID).</t>

<section anchor="segment-validation-for-compression"><name>Segment Validation for Compression</name>

<t>As part of the compression process or as a preliminary step, the SR source node MUST validate the SID structure, if known, of each SID of this document in the segment list. The SR source node does so regardless of whether the segment list is explicitly configured, locally computed, or advertised by a controller (e.g., via BGP <xref target="I-D.ietf-idr-segment-routing-te-policy"/> or PCEP <xref target="I-D.ietf-pce-segment-routing-ipv6"/>).</t>

<t>A SID structure is valid for compression if it meets all the following conditions.</t>

<t><list style="symbols">
  <t>The Locator-Block length is not 0.</t>
  <t>The sum of the Locator-Node length and Function length is not 0.</t>
  <t>The Argument length is equal to 128-LBL-LNL-FL.</t>
</list></t>

<t>When compressing a segment list, the SR source node MUST treat an invalid SID structure as unknown, and treats the SID as incompressible.</t>

<t><xref target="sec-control-plane"/> discusses how the SIDs of this document and their structure can be advertised to the SR source node through various control plane protocols.</t>

</section>
<section anchor="sec-source-compression"><name>Segment List Compression</name>

<t>An SR source node MAY compress a segment list when it includes NEXT-C-SID and/or REPLACE-C-SID flavor SIDs in order to reduce the packet header length.</t>

<t>It is out of the scope of this document to describe the mechanism through which an uncompressed segment list is derived. As a general guidance for implementation or future specification, such a mechanism should aim to select the combination of SIDs that would result in the shortest compressed segment list. For example, by selecting a C-SID flavor SID over an equivalent non-C-SID flavor SID or by consistently selecting SIDs of the same C-SID flavor within each routing domain.</t>

<t>The segment list that the SR source node pushes onto the packet MUST comply with the rules in <xref target="sec-source-next"/> and <xref target="sec-source-replace"/> and result in the same forwarding path as the original segment list.</t>

<t>If an SR source node chooses to compress the segment list, one method is described below for illustrative purposes. Any other method producing a compressed segment list of equal or shorter length than the uncompressed segment list is compliant.</t>

<t>This method walks the uncompressed segment list and compresses each series of consecutive NEXT-C-SID flavor SIDs and each series of consecutive REPLACE-C-SID flavor SIDs.</t>

<t><list style="symbols">
  <t>When the compression method encounters a series of one or more consecutive compressible NEXT-C-SID flavor SIDs, it compresses the series as follows. A SID with the NEXT-C-SID flavor is compressible if its structure is known to the SR source node and its Argument value is 0.</t>
</list></t>

<figure><artwork><![CDATA[
S01. Initialize a C-SID container equal to the first SID in the
       series, and initialize the remaining capacity of the C-SID
       container to the AL of that SID
S02. For each subsequent SID in the series {
S03.   If the current SID Locator-Block matches that of the C-SID
         container and the current SID LNFL is lower than or equal to
         the remaining capacity of the C-SID container {
S04.     Copy the current SID Locator-Node and Function to the most
           significant remaining Argument bits of the C-SID container
           and decrement the remaining capacity by LNFL
S05.   } Else {
S06.     Push the C-SID container onto the compressed segment list
S07.     Initialize a new C-SID container equal to the current SID in
           the series, and initialize the remaining capacity of the
           C-SID container to the AL of that SID
S08.   } // End If
S09. } // End For
S10. If at least one SID remains in the uncompressed segment list
       (following the series of compressible NEXT-C-SID flavor SIDs){
S11.   Set S to the next SID in the uncompressed segment list
S12.   If S is advertised with a SID structure, and the Locator-Block
         of S matches that of the C-SID container, and the sum of the
         Locator-Node, Function, and Argument length of S is lower
         than or equal to the remaining capacity of the C-SID
         container {
S13.     Copy the Locator-Node, Function, and Argument of S to the
           most significant remaining Argument bits of the C-SID
           container
S14.   } // End If
S15. } // End If
S16. Push the C-SID container onto the compressed segment list
]]></artwork></figure>

<t><list style="symbols">
  <t>When the compression method encounters a series of REPLACE-C-SID flavor SIDs of the same C-SID length in the uncompressed segment list, it compresses the series as per the following high-level pseudo code. A compression checking function ComCheck(F, S) is defined to check if two SIDs F and S share the same SID structure and Locator-Block value, and if S has either no Argument or an Argument with value 0. If the check passes, then ComCheck(F,S) returns true.</t>
</list></t>

<figure><artwork><![CDATA[
S01. Initialize the first C-SID container in full SID format equal to
       the first SID in the series
S02. Initialize the second C-SID container in packed format if there
       are more than one SIDs, and initialize the remaining capacity
       of the C-SID container to 128 bits
S03. For each subsequent SID in the uncompressed segment list {
S04.   Set S to the current SID in the uncompressed segment list
S05.   If ComCheck(First SID, S) {
S06.     If the LNFL of S is lower than or equal to
           the remaining capacity of the C-SID container {
S07.       Copy the Locator-Node and Function of S to the least
             significant remaining bits of the C-SID container
             and decrement the remaining capacity by LNFL  // Note
S08.     } Else {
S09.       Push the C-SID container onto the compressed segment list
S10.       Initialize a new C-SID container in packed format with all
             bits set to 0
S11        Copy the Locator-Node and Function of S to the least
             significant remaining bits of the C-SID container
             and decrement the remaining capacity by LNFL  // Note
S12.     }
S13.     If S is not a REPLACE-C-SID flavor SID, then break
S14.   } Else {
S15.     Break
S16.   } // End If
S17. } // End For
S18. Push the C-SID container (if it is not empty) onto the
       compressed segment list
]]></artwork></figure>

<aside>
  <t>Note: When the last C-SID is an End.DT2M SID with the REPLACE-C-SID flavor, if there is 0 or at least two C-SID positions left in the current C-SID container, the C-SID is encoded as described above and the value of the Arg.FE2 argument is placed in the 16 least significant bits of the next C-SID position. Otherwise (if there is only one C-SID position left in the current C-SID container), the current C-SID container is pushed onto the segment list (the value of the C-SID position 0 remains zero) and the End.DT2M SID with the REPLACE-C-SID flavor is encoded in full SID format with the value of the Arg.FE2 argument in the 16 most significant bits of the SID Argument.</t>
</aside>

<t><list style="symbols">
  <t>In all remaining cases (i.e., when the compression method encounters a SID in the uncompressed segment list that is not handled by any of the previous subroutines), it pushes this SID as is onto the compressed segment list.</t>
</list></t>

<t>Regardless of how a compressed segment list is produced, the SR source node writes it in the IPv6 packet as described in Section 4.1 of <xref target="RFC8754"/>. The text is reproduced below for reference.</t>

<blockquote>
  <t>A source node steers a packet into an SR Policy. If the SR Policy
results in a Segment List containing a single segment, and there is
no need to add information to the SRH flag or add TLV; the DA is set
to the single Segment List entry, and the SRH MAY be omitted.</t>

  <t>When needed, the SRH is created as follows:</t>

  <t>The Next Header and Hdr Ext Len fields are set as specified in
  <xref target="RFC8200"></xref>.</t>

  <t>The Routing Type field is set to 4.</t>

  <t>The DA of the packet is set with the value of the first segment.</t>

  <t>The first element of the SRH Segment List is the ultimate segment.
  The second element is the penultimate segment, and so on.</t>

  <t>The Segments Left field is set to n-1, where n is the number of
  elements in the SR Policy.</t>

  <t>The Last Entry field is set to n-1, where n is the number of
  elements in the SR Policy.</t>

  <t>TLVs (including HMAC) may be set according to their specification.</t>

  <t>The packet is forwarded toward the packet&#39;s Destination Address
  (the first segment).</t>

  <t>When a source does not require the entire SID list to be preserved
in the SRH, a reduced SRH may be used.</t>

  <t>A reduced SRH does not contain the first segment of the related SR
Policy (the first segment is the one already in the DA of the IPv6
header), and the Last Entry field is set to n-2, where n is the
number of elements in the SR Policy.</t>
</blockquote>

</section>
<section anchor="sec-source-next"><name>Rules for segment lists containing NEXT-C-SID flavor SIDs</name>

<t><list style="numbers">
  <t>If a Destination Option header would follow an SRH with a segment list of more than one segment compressed as a single NEXT-C-SID container, the SR source node MUST NOT omit the SRH.</t>
  <t>When the last Segment List entry (index 0) in the SRH is a C-SID container representing more than one segment, the PSP operation is performed at the segment preceding the first segment of this C-SID container in the segment list. If the PSP behavior should instead be performed at the penultimate segment along the path, the SR source node MUST NOT compress the ultimate segment of the segment list into a C-SID container.</t>
  <t>If a Destination Option header would follow an SRH with a last Segment List entry being a NEXT-C-SID container representing more than one segment, the SR source node MUST ensure that the PSP operation is not performed before the penultimate SR segment endpoint node along the path.</t>
</list></t>

</section>
<section anchor="sec-source-replace"><name>Rules for segment lists containing REPLACE-C-SID flavor SIDs</name>

<t><list style="numbers">
  <t>All SIDs compressed in a REPLACE-C-SID sequence MUST share the same Locator-Block and the same compression scheme.</t>
  <t>All SIDs except the last one in a C-SID sequence for REPLACE-C-SID MUST have the REPLACE-C-SID flavor. If the last C-SID container is fully filled (i.e., the last C-SID is at position 0 in the C-SID container) and the last SID in the C-SID sequence is not the last segment in the segment list, the last SID in the C-SID sequence MUST NOT have the REPLACE-C-SID flavor.</t>
  <t>When a REPLACE-C-SID flavor C-SID is present as the last SID in a container that is not the last Segment List entry (index 0) in the SRH, the next element in the segment list MUST be a REPLACE-C-SID container in packed format carrying at least one C-SID.</t>
</list></t>

<t>The SR source node determines the compression scheme of REPLACE-C-SID flavor SIDs as follows.</t>

<t>When receiving a SID advertisement for a REPLACE-C-SID flavor SID with LNL=16, FL=0, AL=128-LBL-NL-FL, and the value of the Argument is all 0, the SR source node marks both the SID and its locator as using 16-bit compression. All other SIDs allocated from this locator with LNL=16, FL=16, AL=128-LBL-NL-FL, and the value of the Argument is all 0 are also marked as using 16-bit compression. When receiving a SID advertisement for a REPLACE-C-SID flavor SID with LNFL=32, AL=128-LBL-NL-FL, and the value of the Argument is all 0, the SR source node marks both the SID and its locator as using 32-bit compression.</t>

</section>
<section anchor="sec-source-checksum"><name>Upper-Layer Checksums</name>

<t>The Destination Address used in the IPv6 pseudo-header (Section 8.1 of <xref target="RFC8200"/>) is that of the ultimate destination.</t>

<t>At the originating node, that address will be the Destination Address as it is expected to be received by the ultimate destination. When the last element in the compressed segment list is a C-SID container, this address can be obtained from the last element in the uncompressed segment list or by repeatedly applying the segment behavior as described in <xref target="sec-operations-icmp-error"/>. This applies regardless of whether an SRH in present in the IPv6 packet or omitted.</t>

<t>At the recipient(s), that address will be in the Destination Address field of the IPv6 header.</t>

</section>
</section>
<section anchor="inter-domain-compression"><name>Inter-Domain Compression</name>

<t>Some SRv6 traffic may need to cross multiple routing domains, such as different Autonomous Systems (ASes) or different routing areas within an SR domain. Different routing domains may use different addressing schema and Locator-Blocks.</t>

<t>A property of a C-SID sequence is that all C-SIDs in the sequence share the same Locator-Block. Therefore, a segment list that spans across multiple routing domains using different Locator-Blocks may need a separate C-SID sequence for each domain.</t>

<t>This section defines an OPTIONAL solution to improve the efficiency of C-SID compression in multi-domain environments by enabling a C-SID sequence to combine C-SIDs having different Locator-Blocks.</t>

<t>The solution leverages two new SR segment endpoint behaviors, &quot;Endpoint with SRv6 Prefix Swap&quot; (&quot;End.PS&quot; for short) and &quot;Endpoint with L3 cross-connect and SRv6 Prefix Swap&quot; (&quot;End.XPS&quot; for short), that enable modifying the Locator-Block for the next C-SID in the C-SID sequence at the routing domain boundary.</t>

<section anchor="endps-prefix-swap"><name>End.PS: Prefix Swap</name>

<t>The End.PS behavior is a variant of the End behavior that modifies the Locator-Block of the active C-SID sequence. This document defines the End.PS behavior with the NEXT-C-SID flavor and the End.PS behavior with the REPLACE-C-SID flavor.</t>

<t>An End.PS SID is used to transition to a new Locator-Block when the routing domain boundary is on the SR segment endpoint node.</t>

<t>Each instance of an End.PS SID is associated with a target Locator-Block B2/m, where B2 is an IPv6 address prefix and m is the associated prefix length. The target Locator-Block is a local property of the End.PS SID on the SR segment endpoint node.</t>

<aside>
  <t>Note: a local SID property is an attribute associated with the SID when it is instantiated on the SR segment endpoint node. When the SR segment endpoint node identifies the destination address of a received packet as a locally instantiated SID, it also retrieves any local property associated with this SID. Other examples of local SID properties include the set of L3 adjacencies of an End.X SID (Section 4.2 of <xref target="RFC8986"/>) and the lookup table of an End.DT6 SID (Section 4.6 of <xref target="RFC8986"/>).</t>
</aside>

<t>The means by which an SR source node learns the target Locator-Block associated with an End.PS SID are outside the scope of this document. As examples, it could be learnt via configuration or signaled by a controller.</t>

<section anchor="sec-next-endps"><name>End.PS with NEXT-C-SID</name>

<t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an End.PS SID with the NEXT-C-SID flavor and associated with the target Locator-Block B2/m, the SR segment endpoint node applies the procedure specified in <xref target="sec-next-end"/> with the lines N05 to N06 replaced as follows.</t>

<figure><artwork><![CDATA[
N05.1. Initialize an IPv6 address A equal to B2.
N05.2. Copy DA.Argument into the bits [m..(m+AL-1)] of A.
N06.   Copy A to the Destination Address of the IPv6 header.
]]></artwork></figure>

</section>
<section anchor="sec-replace-endps"><name>End.PS with REPLACE-C-SID</name>

<t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an End.PS SID with the REPLACE-C-SID flavor and associated with the target Locator-Block B2/m, the SR segment endpoint node applies the procedure specified in <xref target="sec-replace-end"/> with the line R20 replaced as follows.</t>

<figure><artwork><![CDATA[
R20.1. Initialize an IPv6 address A equal to B2.
R20.2. Write Segment List[Segments Left][DA.Arg.Index] into the bits
         [m..m+LNFL-1] of the Destination Address of the IPv6 header.
R20.3. Copy A to the Destination Address of the IPv6 header.
]]></artwork></figure>

</section>
</section>
<section anchor="endxps-l3-cross-connect-and-prefix-swap"><name>End.XPS: L3 Cross-Connect and Prefix Swap</name>

<t>The End.XPS behavior is a variant of the End.X behavior that modifies the Locator-Block of the active C-SID sequence. This document defines the End.XPS behavior with the NEXT-C-SID flavor and the End.XPS behavior with the REPLACE-C-SID flavor.</t>

<t>An End.XPS SID is used to transition to a new Locator-Block when the routing domain boundary is on a link adjacent to the SR segment endpoint node.</t>

<t>Each instance of an End.XPS SID is associated with a target Locator-Block B2/m and a set, J, of one or more L3 adjacencies. The target Locator-Block and set of adjacencies are local properties of the End.XPS SID on the SR segment endpoint node.</t>

<t>The means by which an SR source node learns the target Locator-Block associated with an End.XPS SID are outside the scope of this document. As examples, it could be learnt via configuration or signaled by a controller.</t>

<section anchor="sec-next-endxps"><name>End.XPS with NEXT-C-SID</name>

<t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an End.XPS SID with the NEXT-C-SID flavor and associated with the target Locator-Block B2/m, the SR segment endpoint node applies the procedure specified in <xref target="sec-next-endx"/> with the lines N05 to N06 (of the pseudocode in <xref target="sec-next-end"/>) replaced as follows.</t>

<figure><artwork><![CDATA[
N05.1. Initialize an IPv6 address A equal to B2.
N05.2. Copy DA.Argument into the bits [m..(m+AL-1)] of A.
N06.   Copy A to the Destination Address of the IPv6 header.
]]></artwork></figure>

</section>
<section anchor="sec-replace-endxps"><name>End.XPS with REPLACE-C-SID</name>

<t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an End.XPS SID with the REPLACE-C-SID flavor and associated with the target Locator-Block B2/m, the SR segment endpoint node applies the procedure specified in <xref target="sec-replace-endx"/> with the line R20 (of the pseudocode in <xref target="sec-replace-end"/>) replaced as follows.</t>

<figure><artwork><![CDATA[
R20.1. Initialize an IPv6 address A equal to B2.
R20.2. Write Segment List[Segments Left][DA.Arg.Index] into the bits
         [m..m+LNFL-1] of the Destination Address of the IPv6 header.
R20.3. Copy A to the Destination Address of the IPv6 header.
]]></artwork></figure>

</section>
</section>
</section>
<section anchor="sec-control-plane"><name>Control Plane</name>

<t>This document does not require any new extensions to routing protocols.</t>

<t>Section 8 of <xref target="RFC8986"/> provides an overview of the control plane protocols used for signaling of the SRv6 SIDs introduced by that document.
The SRv6 SIDs introduced by this document are advertised using the same SRv6 extensions for various routing protocols, such as</t>

<t><list style="symbols">
  <t>IS-IS <xref target="RFC9352"/></t>
  <t>OSPFv3 <xref target="RFC9513"/></t>
  <t>BGP <xref target="RFC9252"/>, <xref target="RFC9514"/>, <xref target="I-D.ietf-idr-segment-routing-te-policy"/>, <xref target="I-D.ietf-idr-bgp-ls-sr-policy"/></t>
  <t>PCEP <xref target="I-D.ietf-pce-segment-routing-ipv6"/></t>
</list></t>

<t>The SR segment endpoint node MUST set the SID Argument bits to 0 when advertising a locally instantiated SID of this document in the routing protocol (e.g., IS-IS <xref target="RFC9352"/>, OSPF <xref target="RFC9513"/>, or BGP-LS <xref target="RFC9514"/>).</t>

<t>Signaling the SRv6 SID Structure is REQUIRED for all the SIDs introduced in this document. It is used by an SR source node to compress a segment list as described in <xref target="sec-source-node"/>.
The node initiating the SID advertisement MUST set the length values in the SRv6 SID Structure to match the format of the SID on the SR segment endpoint node. For example, for a SID of this document instantiated from a /48 SRv6 SID block and a /64 Locator, and having a 16-bit Function, the SRv6 SID Structure advertisement carries the following values.</t>

<t><list style="symbols">
  <t>Locator-Block length: 48</t>
  <t>Locator-Node length: 16</t>
  <t>Function length: 16</t>
  <t>Argument length: 48 (= 128-48-16-16)</t>
</list></t>

<t>A local C-SID MAY be advertised in the control plane individually and/or in combination with a global C-SID instantiated on the same SR segment endpoint node, with the End behavior, and the same Locator-Block and flavor as the local C-SID. A combined global and local C-SID is advertised as follows.</t>

<t><list style="symbols">
  <t>The SID Locator-Block is that shared by the global and local C-SIDs</t>
  <t>The SID Locator-Node is that of global C-SID</t>
  <t>The SID Function is that of the local C-SID</t>
  <t>The SID Argument length is equal to 128-LBL-LNL-FL and the SID Argument value is 0</t>
  <t>All other attributes of the SID (e.g., endpoint behavior or algorithm) are those of the local C-SID</t>
</list></t>

<t>The local C-SID combined advertisement is needed in particular for control plane protocols mandating that the SID is a subnet of a locator advertised in the same protocol (e.g., Section 8 of <xref target="RFC9352"/> and Section 9 of <xref target="RFC9513"/> for advertising Adjacency SIDs in IS-IS and OSPFv3, respectively).</t>

<t>For a segment list computed by a controller and signaled to an SR source node (e.g., via BGP <xref target="I-D.ietf-idr-segment-routing-te-policy"/> or PCEP <xref target="I-D.ietf-pce-segment-routing-ipv6"/>), the controller provides the ordered segment list comprising the uncompressed SIDs, with their respective behavior and structure, to the SR source node. The SR source node may then compress the segment list as described in <xref target="sec-source-node"/>.</t>

<t>When a node that does not support this specification receives an advertisement of a SID of this document, it handles it as described in the corresponding control plane specification (e.g., Sections 7.2, 8.1, and 8.2 of <xref target="RFC9352"/>, Sections 8, 9.1, and 9.2 of <xref target="RFC9513"/>, and Section 3.1 of <xref target="RFC9252"/>).</t>

</section>
<section anchor="operational-considerations"><name>Operational Considerations</name>

<section anchor="pinging-a-sid"><name>Pinging a SID</name>

<t>An SR source node may ping an SRv6 SID by sending an ICMPv6 echo request packet destined to the SRv6 SID, with or without a segment list. This operation is illustrated in Appendix A.1.2 of <xref target="RFC9259"/>.</t>

<t>When pinging a SID of this document without a segment list, the SR source node places the SID in the destination address of the ICMPv6 echo request and MUST set the Argument of the SID to 0. The Argument value 0 allows the SID SR segment endpoint node (<xref target="sec-endpoint"/>) to identify itself as the ultimate destination of the packet and process the ICMPv6 payload. If the SR source node sets a non-zero Argument value, the SR segment endpoint node would instead attempt to determine the next destination of the packet.</t>

<t>When pinging a SID of this document via a segment list, the SR source node MUST construct the IPv6 packet as described in <xref target="sec-source-node"/> and compute the ICMPv6 checksum as described in <xref target="sec-source-checksum"/>.</t>

</section>
<section anchor="sec-operations-icmp-error"><name>ICMP Error Processing</name>

<t>When an IPv6 node encounters an error while processing a packet, it may report that error by sending an IPv6 error message to the packet source with an enclosed copy of the invoking packet. For the source of an invoking packet to process the ICMP error message, the ultimate destination address of the IPv6 header may be required.</t>

<t>Section 5.4 of <xref target="RFC8754"/> defines the logic that an SR source node follows to determine the ultimate destination of an invoking packet containing an SRH.</t>

<t>For an SR source node that supports the compressed segment list encoding defined in this document, the logic to determine the ultimate destination is generalized as follows.</t>

<t><list style="symbols">
  <t>If the destination address of the invoking IPv6 packet matches a known SRv6 SID, modify the invoking IPv6 packet by applying the SID behavior associated with the matched SRv6 SID;</t>
  <t>Repeat until the application of the SID behavior would result in the processing of the upper-layer header.</t>
</list></t>

<t>The destination address of the resulting IPv6 packet may be used as the ultimate destination of the invoking IPv6 packet.</t>

<t>Since the SR source node that needs to determine the ultimate destination is the same node that originally built the segment list in the invoking packet, it is able to perform this operation for all the SIDs in the packet.</t>

</section>
</section>
<section removeInRFC="true" anchor="implementation-status"><name>Implementation Status</name>

<t>RFC-Editor: Please clean up the references cited by this section before publication.</t>

<t>This section records the status of known implementations of the
protocol defined by this specification at the time of posting of
this Internet-Draft, and is based on a proposal described in
<xref target="RFC7942"/>.  The description of implementations in this section is
intended to assist the IETF in its decision processes in
progressing drafts to RFCs.  Please note that the listing of any
individual implementation here does not imply endorsement by the
IETF.  Furthermore, no effort has been spent to verify the
information presented here that was supplied by IETF contributors.
This is not intended as, and must not be construed to be, a
catalog of available implementations or their features.  Readers
are advised to note that other implementations may exist.</t>

<t>According to <xref target="RFC7942"/>, &quot;this will allow reviewers and working
groups to assign due consideration to documents that have the
benefit of running code, which may serve as evidence of valuable
experimentation and feedback that have made the implemented
protocols more mature.  It is up to the individual working groups
to use this information as they see fit&quot;.</t>

<t>This section is provided in compliance with the SPRING working group policies (<xref target="SPRING-WG-POLICIES"/>).</t>

<section anchor="cisco-systems"><name>Cisco Systems</name>

<t>Cisco Systems reported the following implementations of the SR segment endpoint node NEXT-C-SID flavor (<xref target="sec-next"/>) and the SR source node efficient SID-list encoding (<xref target="sec-source-node"/>) for NEXT-C-SID flavor SIDs. These are used as part of its SRv6 TI-LFA, micro-loop avoidance, and traffic engineering functionalities.</t>

<t><list style="symbols">
  <t>Cisco NCS 540 Series routers running IOS XR 7.3.x or above <xref target="IMPL-CISCO-NCS540"/></t>
  <t>Cisco NCS 560 Series routers running IOS XR 7.6.x or above <xref target="IMPL-CISCO-NCS560"/></t>
  <t>Cisco NCS 5500 Series routers running IOS XR 7.3.x or above <xref target="IMPL-CISCO-NCS5500"/></t>
  <t>Cisco NCS 5700 Series routers running IOS XR 7.5.x or above <xref target="IMPL-CISCO-NCS5700"/></t>
  <t>Cisco 8000 Series routers running IOS XR 7.5.x or above <xref target="IMPL-CISCO-8000"/></t>
  <t>Cisco ASR 9000 Series routers running IOS XR 7.5.x or above <xref target="IMPL-CISCO-ASR9000"/></t>
</list></t>

<t>At the time of this report, all the implementations listed above are in production and follow the specification in the latest version of this document, including all the &quot;MUST&quot; and &quot;SHOULD&quot; clauses for the NEXT-C-SID flavor.</t>

<t>This report was last updated on January 11, 2023.</t>

</section>
<section anchor="huawei-technologies"><name>Huawei Technologies</name>

<t>Huawei Technologies reported the following implementations of the SR segment endpoint node REPLACE-C-SID flavor (<xref target="sec-replace"/>).
These are used as part of its SRv6 TI-LFA, micro-loop avoidance, and traffic engineering functionalities.</t>

<t><list style="symbols">
  <t>Huawei ATN8XX,ATN910C,ATN980B routers running VRPV800R021C00 or above.</t>
  <t>Huawei CX600-M2 routers running VRPV800R021C00 or above.</t>
  <t>Huawei NE40E,ME60-X1X2,ME60-X3X8X16 routers running VRPV800R021C00 or above.</t>
  <t>Huawei NE5000E,NE9000 routers running VRPV800R021C00 or above.</t>
  <t>Huawei NCE-IP Controller running V1R21C00 or above.</t>
</list></t>

<t>At the time of this report, all the implementations listed above are in production and follow the specification in the latest version of this document, including all the &quot;MUST&quot; and &quot;SHOULD&quot; clauses for the REPLACE-C-SID flavor.</t>

<t>This report was last updated on January 11, 2023.</t>

</section>
<section anchor="nokia"><name>Nokia</name>

<t>Nokia reported the following implementations (<xref target="IMPL-NOKIA-20.10"/>) of the SR segment endpoint node NEXT-C-SID flavor (<xref target="sec-next"/>).  These are used as part of its shortest path forwarding (in algorithm 0 and Flex-Algo), remote and TI-LFA repair tunnel, and Traffic Engineering functionalities.</t>

<t><list style="symbols">
  <t>Nokia 7950 XRS 20/20e routers running SROS Release 22.10 or above</t>
  <t>Nokia 7750 SR-12e routers running SROS Release 22.10 or above</t>
  <t>Nokia 7750 SR-7/12 routers running SROS Release 22.10 or above</t>
  <t>Nokia 7750 SR-7s/14s routers running SROS Release 22.10 or above</t>
  <t>Nokia 7750 SR-1/1s/2s routers running SROS Release 22.10 or above</t>
</list></t>

<t>At the time of this report, all the implementations listed above are in production and follow the specification in the latest version of this document, including all the &quot;MUST&quot; and &quot;SHOULD&quot; clauses for the NEXT-C-SID flavor.</t>

<t>This report was last updated on February 3, 2023.</t>

</section>
<section anchor="arrcus"><name>Arrcus</name>

<t>Arrcus reported the following implementations of the SR segment endpoint node NEXT-C-SID flavor (<xref target="sec-next"/>). These are used as part of its SRv6 shortest path forwarding (in algorithm 0 and Flex-Algo),  TI-LFA, micro-loop avoidance and Traffic Engineering functionalities.</t>

<t><list style="symbols">
  <t>Arrcus running on Ufi Space routers S9510-28DC, S9710-76D, S9600-30DX and S9700-23D with ArcOS v5.2.1 or above</t>
  <t>Arrcus running n Ufi Space routers S9600-72XC and S9700-53DX with ArcOS v5.1.1D or above</t>
  <t>Arrcus running on Quanta router IXA and IXAE with ArcOS v5.1.1D or above</t>
</list></t>

<t>At the time of this report, all the implementations listed above are in production and follow the specification in the latest version of this document, including all the &quot;MUST&quot; and &quot;SHOULD&quot; clauses for the NEXT-C-SID flavor.</t>

<t>This report was last updated on March 11, 2023.</t>

</section>
<section anchor="juniper-networks"><name>Juniper Networks</name>

<t>Juniper Networks reported the following implementations of the SR segment endpoint node NEXT-C-SID flavor (<xref target="sec-next"/>). These are used as part of its SRv6 shortest path forwarding (in algorithm 0 and Flex-Algo), TI-LFA, micro-loop avoidance, and Traffic Engineering functionalities.</t>

<t>Juniper release 23.3 onwards supports this functionality.</t>

<t>At the time of this report, all the implementations listed above are in development and follow the specification in the latest version of this document, including all the &quot;MUST&quot; and &quot;SHOULD&quot; clauses for the NEXT-C-SID flavor.</t>

<t>This report was last updated on May 30, 2023.</t>

</section>
<section anchor="marvell"><name>Marvell</name>

<t>Marvell reported support in the Marvell Prestera Packet Processor for the SR segment endpoint node NEXT-C-SID flavor (<xref target="sec-next"/>) and REPLACE-C-SID flavor (<xref target="sec-replace"/>).</t>

<t>This report was last updated on February 15, 2023.</t>

</section>
<section anchor="broadcom"><name>Broadcom</name>

<t>Broadcom reported the following implementations of the SR segment endpoint node NEXT-C-SID flavor (<xref target="sec-next"/>) and REPLACE-C-SID flavor (<xref target="sec-replace"/>).  These are used as part of its SRv6 TI-LFA, micro-loop avoidance, and traffic engineering functionalities. All implementation of the following list is in general availability for customers using BCM SDK 6.5.26 or above.</t>

<t><list style="symbols">
  <t>88850 (Jericho2c+) series</t>
  <t>88690 (Jericho2) series</t>
  <t>88800 (Jericho2c) series</t>
  <t>88480 (Qunran2a) series</t>
  <t>88280 (Qunran2u) series</t>
  <t>88295 (Qunran2n) series</t>
  <t>88830 (Jericho2x) series</t>
</list></t>

<t>At the time of this report, all the implementations listed above are in production and follow the specification in the latest version of this document, including all the &quot;MUST&quot; and &quot;SHOULD&quot; clauses for the NEXT-C-SID and REPLACE-C-SID flavors.</t>

<t>For 78900 (Tomahawk) series-related support, please contact the Broadcom team.</t>

<t>This report was last updated on February 21, 2023.</t>

</section>
<section anchor="zte-corporation"><name>ZTE Corporation</name>

<t>ZTE Corporation reported the following implementations of the SR segment endpoint node REPLACE-C-SID flavor (<xref target="sec-replace"/>). These are used as part of its SRv6 TI-LFA, micro-loop avoidance, and traffic engineering functionalities.</t>

<t><list style="symbols">
  <t>ZTE M6000-18S(BRAS), M6000-8S Plus(BRAS) routers running V5.00.10.09 or above.</t>
  <t>ZTE M6000-18S(SR), M6000-8S Plus(SR) routers running V5.00.10.80 or above.</t>
  <t>ZTE T8000-18 routers running V5.00.10.07 or above.</t>
</list></t>

<t>This report was last updated on March 29, 2023.</t>

</section>
<section anchor="new-h3c-technologies"><name>New H3C Technologies</name>

<t>New H3C Technologies reported the following implementations of the SR segment endpoint node REPLACE-C-SID flavor (<xref target="sec-replace"/>). These are used as part of its SRv6 TI-LFA, micro-loop avoidance, and traffic engineering functionalities.</t>

<t><list style="symbols">
  <t>H3C CR16000-F, SR8800-X routers running Version 7.1.075 or above.</t>
  <t>H3C CR18000, CR19000 routers running Version 7.1.071 or above.</t>
</list></t>

<t>This report was last updated on March 29, 2023.</t>

</section>
<section anchor="ruijie-network"><name>Ruijie Network</name>

<t>Ruijie Network reported the following implementations of the SR segment endpoint node REPLACE-C-SID flavor (<xref target="sec-replace"/>). These are used as part of its SRv6 TI-LFA, micro-loop avoidance, and traffic engineering functionalities.</t>

<t><list style="symbols">
  <t>RUIJIE RG-N8018-R, RG-N8010-R routers running N8000-R_RGOS 12.8(3)B0801 or above.</t>
</list></t>

<t>This report was last updated on March 29, 2023.</t>

</section>
<section anchor="ciena"><name>Ciena</name>

<t>Ciena reported the following implementations of the SR segment endpoint node NEXT-C-SID flavor (<xref target="sec-next"/>). These are used as part of its shortest path forwarding (in algorithm 0 and Flex-Algo), remote and TI-LFA repair tunnel, and Traffic Engineering functionalities.</t>

<t>The following platforms support implementation of the above.</t>

<t><list style="symbols">
  <t>Ciena 5162, 5164, 5166, 5168 routers running SAOS 10.10 or above</t>
  <t>Ciena 8110, 8112, 8190 routers running SAOS 10.10 or above</t>
</list></t>

<t>At the time of this report, all the implementations listed above are in production and follow the specification in the latest version of this document, including all the &quot;MUST&quot; and &quot;SHOULD&quot; clauses for the NEXT-C-SID flavor.</t>

<t>This report was last updated on February 6, 2024.</t>

</section>
<section anchor="centec"><name>Centec</name>

<t>Centec reported the following implementations of the SR segment endpoint node REPLACE-C-SID flavor (<xref target="sec-replace"/>). These are used as part of its SRv6 TI-LFA, micro-loop avoidance, and traffic engineering functionalities. All implementation of the following list is in general availability for customers using Centec SDK 5.6.8 or above.</t>

<t><list style="symbols">
  <t>CTC7132 (TsingMa) Series</t>
  <t>CTC8180 (TsingMa.MX) Series</t>
</list></t>

<t>This report was last updated on February 14, 2024.</t>

</section>
<section anchor="open-source"><name>Open Source</name>

<t>The authors found the following open source implementations of the SR segment endpoint node NEXT-C-SID flavor (<xref target="sec-next"/>).</t>

<t><list style="symbols">
  <t>The Linux kernel, version 6.1 <xref target="IMPL-OSS-LINUX"/></t>
  <t>The Software for Open Networking in the Cloud (SONiC), version 202212 <xref target="IMPL-OSS-SONIC"/>, and Switch Abstraction Interface (SAI), version  1.9.0 <xref target="IMPL-OSS-SAI"/></t>
  <t>The Vector Packet Processor (VPP), version 20.05 <xref target="IMPL-OSS-VPP"/></t>
  <t>A generic P4 implementation <xref target="IMPL-OSS-P4"/></t>
</list></t>

<t>The authors found the following open source implementations of the SR segment endpoint node REPLACE-C-SID flavor (<xref target="sec-replace"/>).</t>

<t><list style="symbols">
  <t>ONOS and P4 Programmable Switch based <xref target="IMPL-OSS-ONOS"/></t>
  <t>Open SRv6 Project <xref target="IMPL-OSS-OPEN-SRV6"/></t>
</list></t>

<t>This section was last updated on January 11, 2023.</t>

</section>
<section anchor="interoperability-reports"><name>Interoperability Reports</name>

<section anchor="bell-canada-ciena-2023"><name>Bell Canada / Ciena 2023</name>

<t>Bell Canada is currently evaluating interoperability between Ciena and Cisco implementations of the NEXT-C-SID flavor defined in this document. Further information will be added to this section when the evaluation is complete.</t>

</section>
<section anchor="eantc-2023"><name>EANTC 2023</name>

<t>In April 2023, the European Advanced Networking Test Center (EANTC) successfully validated multiple implementations of SRv6 NEXT-C-SID flavor (a.k.a., SRv6 uSID) <xref target="EANTC-23"/>.</t>

<t>The participating vendors included Arista, Arrcus, Cisco, Huawei, Juniper, Keysight, Nokia, and Spirent.</t>

</section>
<section anchor="china-mobile-2020"><name>China Mobile 2020</name>

<t>In November 2020, China Mobile successfully validated multiple interoperable implementations of the NEXT-C-SID and REPLACE-C-SID flavors defined in this document.</t>

<t>This testing covered two different implementations of the SRv6 endpoint flavors defined in this document:</t>

<t><list style="symbols">
  <t>Hardware implementation in Cisco ASR 9000 running IOS XR</t>
  <t>Software implementation in Cisco IOS XRv9000 virtual appliance</t>
  <t>Hardware implementation in Huawei NE40E and NE5000E running VRP</t>
</list></t>

<t>The interoperability testing consisted of a packet flow sent by an SR source node N0 via an SR traffic engineering policy with a segment list <spanx style="verb">&lt;S1, S2, S3, S4, S5, S6, S7&gt;</spanx>, where S1..S7 are SIDs instantiated on SR segment endpoint nodes N1..N7, respectively.</t>

<figure><artwork><![CDATA[
N0 --- N1 --- N2 --- N3 --- N4 --- N5 --- N6 --- N7
      (S1)   (S2)   (S3)   (S4)   (S5)   (S6)   (S7)
]]></artwork></figure>

<t><list style="symbols">
  <t>N0 is a generic packet generator.</t>
  <t>N1, N2, and N3 are Huawei routers.</t>
  <t>N4, N5, and N6 are Cisco routers.</t>
  <t>N7 is a generic traffic generator acting as a packet receiver.</t>
</list></t>

<t>The SR source node N0 steers the packets onto the SR policy by setting the IPv6 destination address and creating an SRH (as described in Section 4.1 of <xref target="RFC8754"/>) using a compressed segment list encoding. The length of the compressed segment list encoding varies for each scenario.</t>

<t>All SR segment endpoint nodes execute a variant of the End behavior: regular End behavior (as defined in Section 4.1 of <xref target="RFC8986"/>), End behavior with NEXT-C-SID flavor, and End behavior with REPLACE-C-SID flavor. The variant being used at each SR segment endpoint node varies for each scenario.</t>

<t>The interoperability was validated for the following scenarios:</t>

<t><strong>Scenario 1:</strong></t>

<t><list style="symbols">
  <t>S1 and S2 are associated with the End behavior with the REPLACE-C-SID flavor</t>
  <t>S3 is associated with the regular End behavior (no flavor)</t>
  <t>S4, S5, and S6 are associated with the End behavior with the NEXT-C-SID flavor</t>
  <t>The SR source node imposes a compressed segment list encoding of 3 SIDs.</t>
</list></t>

<t><strong>Scenario 2:</strong></t>

<t><list style="symbols">
  <t>S1, S2..., S6 are associated with the End behavior with the NEXT-C-SID flavor</t>
  <t>The SR source node imposes a compressed segment list encoding of 2 SIDs.</t>
</list></t>

<t><strong>Scenario 3:</strong></t>

<t><list style="symbols">
  <t>S1, S2..., S6 are associated with the End behavior with the REPLACE-C-SID flavor</t>
  <t>The SR source node imposes a compressed segment list encoding of 3 SIDs.</t>
</list></t>

</section>
</section>
</section>
<section anchor="sec-future"><name>Applicability to other SR Segment Endpoint Behaviors</name>

<t>Future documents may extend the applicability of the NEXT-C-SID and REPLACE-C-SID flavors to other SR segment endpoint behaviors.</t>

<t>For an SR segment endpoint behavior that can be used before the last position of a segment list, a C-SID flavor is defined by reproducing the same logic as described in <xref target="sec-next"/> and <xref target="sec-replace"/> of this document to determine the next segment in the segment list.</t>

</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>Section 8 of <xref target="RFC8402"/> discusses the security considerations for Segment Routing.</t>

<t>Section 5 of <xref target="RFC8754"/> describes the intra-SR-domain deployment model and how to secure it. Section 7 of <xref target="RFC8754"/> describes the threats applicable to SRv6 and how to mitigate them.</t>

<t>Section 9 of <xref target="RFC8986"/> discusses the security considerations applicable to the SRv6 network programming framework, as well as the SR source node and SR segment endpoint node behaviors that it defines.</t>

<t>This document introduces two new flavors for some of the SR segment endpoint behaviors defined in <xref target="RFC8986"/> and a method by which an SR source node may leverage the SIDs of these flavors to produce a compressed segment list.</t>

<t>An SR source node constructs an IPv6 packet with a compressed segment list as defined in Sections 3.1 and 4.1 of <xref target="RFC8754"/> and Section 5 of <xref target="RFC8986"/>. The paths that an SR source node may enforce using a compressed segment list are the same, from a topology and service perspective, as those that an SR source node could enforce using the SIDs of <xref target="RFC8986"/>.</t>

<t>An SR segment endpoint node processes an IPv6 packet matching a locally instantiated SID as defined in <xref target="RFC8986"/>, with the pseudocode modifications in Section 4 of this document. These modifications change how the SR segment endpoint node determines the next SID in the packet, but not the semantic of either the active or the next SID. For example, an adjacency segment instantiated with the End.X behavior remains an adjacency segment regardless of whether it uses the unflavored End.X behavior defined in Section 4.2 of <xref target="RFC8986"/> or a C-SID flavor of that behavior. This document does not introduce any new SID semantic.</t>

<t>Any other transit node processes the packet as described in Section 4.2 of <xref target="RFC8754"/>.</t>

<t>This document defines a new method of encoding the SIDs inside a segment list at the SR source node and decoding them at the SR segment endpoint node, but it does not change how the segment list itself is encoded in the IPv6 packet nor the semantic of any segment that it comprises. Therefore, this document is subject to the same security considerations that are discussed in <xref target="RFC8402"/>, <xref target="RFC8754"/>, and <xref target="RFC8986"/>.</t>

</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<section anchor="srv6-endpoint-behaviors"><name>SRv6 Endpoint Behaviors</name>

<t>This I-D. requests the IANA to update the reference of the following registrations from the &quot;SRv6 Endpoint Behaviors&quot; registry under the top-level &quot;Segment Routing&quot; registry-group (https://www.iana.org/assignments/segment-routing/) with the RFC number of this document once it is published, and transfer change control to the IETF.</t>

<texttable title="Registration List" anchor="tbl-iana-endpoint-behaviors">
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Description</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>43</c>
      <c>End with NEXT-CSID</c>
      <c>This I-D.</c>
      <c>44</c>
      <c>End with NEXT-CSID &amp; PSP</c>
      <c>This I-D.</c>
      <c>45</c>
      <c>End with NEXT-CSID &amp; USP</c>
      <c>This I-D.</c>
      <c>46</c>
      <c>End with NEXT-CSID, PSP &amp; USP</c>
      <c>This I-D.</c>
      <c>47</c>
      <c>End with NEXT-CSID &amp; USD</c>
      <c>This I-D.</c>
      <c>48</c>
      <c>End with NEXT-CSID, PSP &amp; USD</c>
      <c>This I-D.</c>
      <c>49</c>
      <c>End with NEXT-CSID, USP &amp; USD</c>
      <c>This I-D.</c>
      <c>50</c>
      <c>End with NEXT-CSID, PSP, USP &amp; USD</c>
      <c>This I-D.</c>
      <c>52</c>
      <c>End.X with NEXT-CSID</c>
      <c>This I-D.</c>
      <c>53</c>
      <c>End.X with NEXT-CSID &amp; PSP</c>
      <c>This I-D.</c>
      <c>54</c>
      <c>End.X with NEXT-CSID &amp; USP</c>
      <c>This I-D.</c>
      <c>55</c>
      <c>End.X with NEXT-CSID, PSP &amp; USP</c>
      <c>This I-D.</c>
      <c>56</c>
      <c>End.X with NEXT-CSID &amp; USD</c>
      <c>This I-D.</c>
      <c>57</c>
      <c>End.X with NEXT-CSID, PSP &amp; USD</c>
      <c>This I-D.</c>
      <c>58</c>
      <c>End.X with NEXT-CSID, USP &amp; USD</c>
      <c>This I-D.</c>
      <c>59</c>
      <c>End.X with NEXT-CSID, PSP, USP &amp; USD</c>
      <c>This I-D.</c>
      <c>85</c>
      <c>End.T with NEXT-CSID</c>
      <c>This I-D.</c>
      <c>86</c>
      <c>End.T with NEXT-CSID &amp; PSP</c>
      <c>This I-D.</c>
      <c>87</c>
      <c>End.T with NEXT-CSID &amp; USP</c>
      <c>This I-D.</c>
      <c>88</c>
      <c>End.T with NEXT-CSID, PSP &amp; USP</c>
      <c>This I-D.</c>
      <c>89</c>
      <c>End.T with NEXT-CSID &amp; USD</c>
      <c>This I-D.</c>
      <c>90</c>
      <c>End.T with NEXT-CSID, PSP &amp; USD</c>
      <c>This I-D.</c>
      <c>91</c>
      <c>End.T with NEXT-CSID, USP &amp; USD</c>
      <c>This I-D.</c>
      <c>92</c>
      <c>End.T with NEXT-CSID, PSP, USP &amp; USD</c>
      <c>This I-D.</c>
      <c>93</c>
      <c>End.B6.Encaps with NEXT-CSID</c>
      <c>This I-D.</c>
      <c>94</c>
      <c>End.B6.Encaps.Red with NEXT-CSID</c>
      <c>This I-D.</c>
      <c>95</c>
      <c>End.BM with NEXT-CSID</c>
      <c>This I-D.</c>
      <c>96</c>
      <c>End.PS with NEXT-CSID</c>
      <c>This I-D.</c>
      <c>97</c>
      <c>End.XPS with NEXT-CSID</c>
      <c>This I-D.</c>
      <c>101</c>
      <c>End with REPLACE-CSID</c>
      <c>This I-D.</c>
      <c>102</c>
      <c>End with REPLACE-CSID &amp; PSP</c>
      <c>This I-D.</c>
      <c>103</c>
      <c>End with REPLACE-CSID &amp; USP</c>
      <c>This I-D.</c>
      <c>104</c>
      <c>End with REPLACE-CSID, PSP &amp; USP</c>
      <c>This I-D.</c>
      <c>105</c>
      <c>End.X with REPLACE-CSID</c>
      <c>This I-D.</c>
      <c>106</c>
      <c>End.X with REPLACE-CSID &amp; PSP</c>
      <c>This I-D.</c>
      <c>107</c>
      <c>End.X with REPLACE-CSID &amp; USP</c>
      <c>This I-D.</c>
      <c>108</c>
      <c>End.X with REPLACE-CSID, PSP &amp; USP</c>
      <c>This I-D.</c>
      <c>109</c>
      <c>End.T with REPLACE-CSID</c>
      <c>This I-D.</c>
      <c>110</c>
      <c>End.T with REPLACE-CSID &amp; PSP</c>
      <c>This I-D.</c>
      <c>111</c>
      <c>End.T with REPLACE-CSID &amp; USP</c>
      <c>This I-D.</c>
      <c>112</c>
      <c>End.T with REPLACE-CSID, PSP &amp; USP</c>
      <c>This I-D.</c>
      <c>114</c>
      <c>End.B6.Encaps with REPLACE-CSID</c>
      <c>This I-D.</c>
      <c>115</c>
      <c>End.BM with REPLACE-CSID</c>
      <c>This I-D.</c>
      <c>116</c>
      <c>End.DX6 with REPLACE-CSID</c>
      <c>This I-D.</c>
      <c>117</c>
      <c>End.DX4 with REPLACE-CSID</c>
      <c>This I-D.</c>
      <c>118</c>
      <c>End.DT6 with REPLACE-CSID</c>
      <c>This I-D.</c>
      <c>119</c>
      <c>End.DT4 with REPLACE-CSID</c>
      <c>This I-D.</c>
      <c>120</c>
      <c>End.DT46 with REPLACE-CSID</c>
      <c>This I-D.</c>
      <c>121</c>
      <c>End.DX2 with REPLACE-CSID</c>
      <c>This I-D.</c>
      <c>122</c>
      <c>End.DX2V with REPLACE-CSID</c>
      <c>This I-D.</c>
      <c>123</c>
      <c>End.DT2U with REPLACE-CSID</c>
      <c>This I-D.</c>
      <c>124</c>
      <c>End.DT2M with REPLACE-CSID</c>
      <c>This I-D.</c>
      <c>127</c>
      <c>End.B6.Encaps.Red with REPLACE-CSID</c>
      <c>This I-D.</c>
      <c>128</c>
      <c>End with REPLACE-CSID &amp; USD</c>
      <c>This I-D.</c>
      <c>129</c>
      <c>End with REPLACE-CSID, PSP &amp; USD</c>
      <c>This I-D.</c>
      <c>130</c>
      <c>End with REPLACE-CSID, USP &amp; USD</c>
      <c>This I-D.</c>
      <c>131</c>
      <c>End with REPLACE-CSID, PSP, USP &amp; USD</c>
      <c>This I-D.</c>
      <c>132</c>
      <c>End.X with REPLACE-CSID &amp; USD</c>
      <c>This I-D.</c>
      <c>133</c>
      <c>End.X with REPLACE-CSID, PSP &amp; USD</c>
      <c>This I-D.</c>
      <c>134</c>
      <c>End.X with REPLACE-CSID, USP &amp; USD</c>
      <c>This I-D.</c>
      <c>135</c>
      <c>End.X with REPLACE-CSID, PSP, USP &amp; USD</c>
      <c>This I-D.</c>
      <c>136</c>
      <c>End.T with REPLACE-CSID &amp; USD</c>
      <c>This I-D.</c>
      <c>137</c>
      <c>End.T with REPLACE-CSID, PSP &amp; USD</c>
      <c>This I-D.</c>
      <c>138</c>
      <c>End.T with REPLACE-CSID, USP &amp; USD</c>
      <c>This I-D.</c>
      <c>139</c>
      <c>End.T with REPLACE-CSID, PSP, USP &amp; USD</c>
      <c>This I-D.</c>
      <c>140</c>
      <c>End.PS with REPLACE-CSID</c>
      <c>This I-D.</c>
      <c>141</c>
      <c>End.XPS with REPLACE-CSID</c>
      <c>This I-D.</c>
</texttable>

</section>
</section>
<section anchor="acknowledgements"><name>Acknowledgements</name>

<t>The authors would like to thank Kamran Raza, Xing Jiang, YuanChao Su, Han Li, Yisong Liu, Martin Vigoureux, Joel Halpern, and Tal Mizrahi for their insightful feedback and suggestions.</t>

<t>The authors would also like to thank Andrew Alston, Linda Dunbar, Adrian Farrel, and Boris Hassanov for their thorough review of this document.</t>

</section>


  </middle>

  <back>


    <references title='Normative References' anchor="sec-normative-references">

&RFC8200;
&RFC8402;
&RFC8754;
&RFC8986;
&RFC9259;
&RFC9350;
&RFC2119;
&RFC8174;


    </references>

    <references title='Informative References' anchor="sec-informative-references">

&RFC7942;
&RFC9252;
&RFC9352;
&RFC9513;
&RFC9514;
&I-D.ietf-6man-sids;
&I-D.ietf-idr-bgp-ls-sr-policy;
&I-D.ietf-idr-segment-routing-te-policy;
&I-D.ietf-pce-segment-routing-ipv6;
<reference anchor="GKP94" >
  <front>
    <title>Concrete Mathematics: A Foundation for Computer Science</title>
    <author initials="R." surname="Graham" fullname="Ronald Graham">
      <organization></organization>
    </author>
    <author initials="D." surname="Knuth" fullname="Donald Knuth">
      <organization></organization>
    </author>
    <author initials="O." surname="Patashnik" fullname="Oren Patashnik">
      <organization></organization>
    </author>
    <date year="1994"/>
  </front>
  <seriesInfo name="ISBN" value="9780201558029"/>
</reference>
<reference anchor="SPRING-WG-POLICIES" target="https://wiki.ietf.org/en/group/spring/WG_Policies">
  <front>
    <title>SPRING Working Group Policies</title>
    <author >
      <organization>SPRING Working Group Chairs</organization>
    </author>
    <date year="2022" month="October" day="14"/>
  </front>
</reference>
<reference anchor="IMPL-CISCO-NCS540" target="https://www.cisco.com/c/en/us/td/docs/iosxr/ncs5xx/segment-routing/73x/b-segment-routing-cg-73x-ncs540/configure-srv6.html">
  <front>
    <title>Segment Routing Configuration Guide for Cisco NCS 540 Series Routers</title>
    <author >
      <organization>Cisco Systems</organization>
    </author>
    <date year="2022" month="November" day="02"/>
  </front>
</reference>
<reference anchor="IMPL-CISCO-NCS560" target="https://www.cisco.com/c/en/us/td/docs/iosxr/ncs560/segment-routing/76x/b-segment-routing-cg-76x-ncs560/m-configure-srv6-usid-ncs5xx.html">
  <front>
    <title>Segment Routing Configuration Guide for Cisco NCS 560 Series Routers</title>
    <author >
      <organization>Cisco Systems</organization>
    </author>
    <date year="2022" month="October" day="14"/>
  </front>
</reference>
<reference anchor="IMPL-CISCO-NCS5500" target="https://www.cisco.com/c/en/us/td/docs/iosxr/ncs5500/segment-routing/73x/b-segment-routing-cg-ncs5500-73x/configure-srv6-micro-sid.html">
  <front>
    <title>Segment Routing Configuration Guide for Cisco NCS 5500 Series Routers</title>
    <author >
      <organization>Cisco Systems</organization>
    </author>
    <date year="2022" month="November" day="06"/>
  </front>
</reference>
<reference anchor="IMPL-CISCO-NCS5700" target="https://www.cisco.com/c/en/us/td/docs/iosxr/ncs5500/segment-routing/75x/b-segment-routing-cg-ncs5500-75x/configure-srv6-micro-sid.html">
  <front>
    <title>Segment Routing Configuration Guide for Cisco NCS 5700 Series Routers</title>
    <author >
      <organization>Cisco Systems</organization>
    </author>
    <date year="2022" month="November" day="06"/>
  </front>
</reference>
<reference anchor="IMPL-CISCO-8000" target="https://www.cisco.com/c/en/us/td/docs/iosxr/cisco8000/segment-routing/75x/b-segment-routing-cg-cisco8000-75x/configuring-segment-routing-over-ipv6-srv6-micro-sids.html">
  <front>
    <title>Segment Routing Configuration Guide for Cisco 8000 Series Routers</title>
    <author >
      <organization>Cisco Systems</organization>
    </author>
    <date year="2022" month="November" day="04"/>
  </front>
</reference>
<reference anchor="IMPL-CISCO-ASR9000" target="https://www.cisco.com/c/en/us/td/docs/routers/asr9000/software/asr9k-r7-5/segment-routing/configuration/guide/b-segment-routing-cg-asr9000-75x/configure-srv6-micro-sid.html">
  <front>
    <title>Segment Routing Configuration Guide for Cisco ASR 9000 Series Routers</title>
    <author >
      <organization>Cisco Systems</organization>
    </author>
    <date year="2022" month="November" day="06"/>
  </front>
</reference>
<reference anchor="IMPL-NOKIA-20.10" target="https://documentation.nokia.com/sr/22-10/books/Segment%20Routing%20and%20PCE%20User%20Guide/segment-rout-with-ipv6-data-plane-srv6.html">
  <front>
    <title>Segment Routing and PCE User Guide</title>
    <author >
      <organization>Nokia</organization>
    </author>
    <date year="2022" month="December"/>
  </front>
</reference>
<reference anchor="IMPL-OSS-LINUX" target="https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git/commit/?id=cec9d59e89362809f17f2d854faf52966216da13">
  <front>
    <title>Add NEXT-C-SID support for SRv6 End behavior</title>
    <author initials="P." surname="Abeni" fullname="Paolo Abeni">
      <organization></organization>
    </author>
    <date year="2022" month="September" day="20"/>
  </front>
</reference>
<reference anchor="IMPL-OSS-SONIC" target="https://github.com/sonic-net/SONiC/blob/master/doc/srv6/SRv6_uSID.md">
  <front>
    <title>SONiC uSID</title>
    <author initials="S." surname="Shah" fullname="Shitanshu Shah">
      <organization></organization>
    </author>
    <author initials="R." surname="Sudarshan" fullname="Reshma Sudarshan">
      <organization></organization>
    </author>
    <date year="2022" month="August" day="21"/>
  </front>
</reference>
<reference anchor="IMPL-OSS-SAI" target="https://github.com/opencomputeproject/SAI/pull/1231/commits/02e58d95ad966ca9efc24eb9e0c0fa10b21de2a4">
  <front>
    <title>Added new behaviors to support uSID instruction</title>
    <author initials="A." surname="Agrawal" fullname="Ashutosh Agrawal">
      <organization></organization>
    </author>
    <date year="2021" month="June" day="08"/>
  </front>
</reference>
<reference anchor="IMPL-OSS-VPP" target="https://s3-docs.fd.io/vpp/23.02/cli-reference/clis/clicmd_src_vnet_srv6.html">
  <front>
    <title>Srv6 cli reference</title>
    <author >
      <organization>FD.io</organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="IMPL-OSS-P4" target="https://github.com/netgroup/p4-srv6-usid">
  <front>
    <title>SRv6 uSID (micro SID) implementation on P4</title>
    <author initials="S." surname="Salsano" fullname="Stefano Salsano">
      <organization></organization>
    </author>
    <author initials="A." surname="Tulumello" fullname="Angelo Tulumello">
      <organization></organization>
    </author>
    <date year="2021" month="January" day="03"/>
  </front>
</reference>
<reference anchor="IMPL-OSS-ONOS" target="https://wiki.opennetworking.org/display/COM/Stratum+CMCC+G-SRv6+Project">
  <front>
    <title>Stratum CMCC G-SRv6 Project</title>
    <author >
      <organization>Open Networking Foundation</organization>
    </author>
    <date year="2021" month="March" day="24"/>
  </front>
</reference>
<reference anchor="IMPL-OSS-OPEN-SRV6" target="http://opensrv6.org.cn/en/srv6-2/">
  <front>
    <title>Open SRv6 Project</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="EANTC-23" target="https://eantc.de/fileadmin/eantc/downloads/events/2023/EANTC-InteropTest2023-TestReport.pdf">
  <front>
    <title>Multi-Vendor MPLS SDN Interoperability Test Report</title>
    <author >
      <organization>European Advanced Networking Test Center (EANTC)</organization>
    </author>
    <date year="2023" month="April" day="18"/>
  </front>
</reference>


    </references>


<?line 1431?>

<section anchor="complete-pseudocodes"><name>Complete pseudocodes</name>

<t>The content of this section is purely informative rendering of the pseudocodes of <xref target="RFC8986"/> with the modifications in this document. This rendering may not be used as a reference.</t>

<section anchor="sec-next-end-complete"><name>End with NEXT-C-SID</name>

<t>When processing the SRH of a packet matching a FIB entry locally instantiated as an End SID with the NEXT-C-SID flavor:</t>

<figure><artwork><![CDATA[
N01. If (DA.Argument != 0) {
N02.   If (IPv6 Hop Limit <= 1) {
N03.     Send an ICMP Time Exceeded message to the Source Address
           with Code 0 (Hop limit exceeded in transit),
           interrupt packet processing, and discard the packet.
N04.   }
N05.   Copy DA.Argument into the bits [LBL..(LBL+AL-1)] of the
         Destination Address.
N06.   Set the bits [(LBL+AL)..127] of the Destination Address to
         zero.
N07.   Decrement IPv6 Hop Limit by 1.
N08.   Submit the packet to the egress IPv6 FIB lookup for
         transmission to the next destination.
N09. }
S02. If (Segments Left == 0) {
S03.   Stop processing the SRH, and proceed to process the next
         header in the packet, whose type is identified by
         the Next Header field in the routing header.
S04. }
S05. If (IPv6 Hop Limit <= 1) {
S06.   Send an ICMP Time Exceeded message to the Source Address
         with Code 0 (Hop limit exceeded in transit),
         interrupt packet processing, and discard the packet.
S07. }
S08. max_LE = (Hdr Ext Len / 2) - 1
S09. If ((Last Entry > max_LE) or (Segments Left > Last Entry+1)) {
S10.   Send an ICMP Parameter Problem to the Source Address
         with Code 0 (Erroneous header field encountered)
         and Pointer set to the Segments Left field,
         interrupt packet processing, and discard the packet.
S11. }
S12. Decrement IPv6 Hop Limit by 1.
S13. Decrement Segments Left by 1.
S14. Update IPv6 DA with Segment List[Segments Left].
S15. Submit the packet to the egress IPv6 FIB lookup for
       transmission to the new destination.
]]></artwork></figure>

<t>Before processing the Upper-Layer header or any IPv6 extension header other than Hop-by-Hop or Destination Option of a packet matching a FIB entry locally instantiated as an End SID with the NEXT-C-SID flavor:</t>

<figure><artwork><![CDATA[
N01. If (DA.Argument != 0) {
N02.   If (IPv6 Hop Limit <= 1) {
N03.     Send an ICMP Time Exceeded message to the Source Address,
           Code 0 (Hop limit exceeded in transit),
           interrupt packet processing and discard the packet.
N04.   }
N05.   Copy DA.Argument into the bits [LBL..(LBL+AL-1)] of the
         Destination Address.
N06.   Set the bits [(LBL+AL)..127] of the Destination Address to
         zero.
N07.   Decrement IPv6 Hop Limit by 1.
N08.   Submit the packet to the egress IPv6 FIB lookup for
         transmission to the next destination.
N09. }
]]></artwork></figure>

<t>When processing the Upper-Layer header of a packet matching a FIB entry locally instantiated as an End SID with the NEXT-C-SID flavor:</t>

<figure><artwork><![CDATA[
S01. If (Upper-Layer header type is allowed by local configuration) {
S02.   Proceed to process the Upper-Layer header
S03. } Else {
S04.   Send an ICMP Parameter Problem to the Source Address
         with Code 4 (SR Upper-layer Header Error)
         and Pointer set to the offset of the Upper-Layer header,
         interrupt packet processing, and discard the packet.
S05. }
]]></artwork></figure>

</section>
<section anchor="sec-next-endx-complete"><name>End.X with NEXT-C-SID</name>

<t>When processing the SRH of a packet matching a FIB entry locally instantiated as an End.X SID with the NEXT-C-SID flavor:</t>

<figure><artwork><![CDATA[
N01. If (DA.Argument != 0) {
N02.   If (IPv6 Hop Limit <= 1) {
N03.     Send an ICMP Time Exceeded message to the Source Address
           with Code 0 (Hop limit exceeded in transit),
           interrupt packet processing, and discard the packet.
N04.   }
N05.   Copy DA.Argument into the bits [LBL..(LBL+AL-1)] of the
         Destination Address.
N06.   Set the bits [(LBL+AL)..127] of the Destination Address to
         zero.
N07.   Decrement IPv6 Hop Limit by 1.
N08.   Submit the packet to the IPv6 module for transmission to the
         new destination via a member of J.
N09. }
S02. If (Segments Left == 0) {
S03.   Stop processing the SRH, and proceed to process the next
         header in the packet, whose type is identified by
         the Next Header field in the routing header.
S04. }
S05. If (IPv6 Hop Limit <= 1) {
S06.   Send an ICMP Time Exceeded message to the Source Address
         with Code 0 (Hop limit exceeded in transit),
         interrupt packet processing, and discard the packet.
S07. }
S08. max_LE = (Hdr Ext Len / 2) - 1
S09. If ((Last Entry > max_LE) or (Segments Left > Last Entry+1)) {
S10.   Send an ICMP Parameter Problem to the Source Address
         with Code 0 (Erroneous header field encountered)
         and Pointer set to the Segments Left field,
         interrupt packet processing, and discard the packet.
S11. }
S12. Decrement IPv6 Hop Limit by 1.
S13. Decrement Segments Left by 1.
S14. Update IPv6 DA with Segment List[Segments Left].
S15. Submit the packet to the IPv6 module for transmission
       to the new destination via a member of J.
]]></artwork></figure>

<t>Before processing the Upper-Layer header or any IPv6 extension header other than Hop-by-Hop or Destination Option of a packet matching a FIB entry locally instantiated as an End.X SID with the NEXT-C-SID flavor:</t>

<figure><artwork><![CDATA[
N01. If (DA.Argument != 0) {
N02.   If (IPv6 Hop Limit <= 1) {
N03.     Send an ICMP Time Exceeded message to the Source Address,
           Code 0 (Hop limit exceeded in transit),
           interrupt packet processing and discard the packet.
N04.   }
N05.   Copy DA.Argument into the bits [LBL..(LBL+AL-1)] of the
         Destination Address.
N06.   Set the bits [(LBL+AL)..127] of the Destination Address to
         zero.
N07.   Decrement IPv6 Hop Limit by 1.
N08.   Submit the packet to the IPv6 module for transmission to the
         new destination via a member of J.
N09. }
]]></artwork></figure>

<t>When processing the Upper-Layer header of a packet matching a FIB entry locally instantiated as an End.X SID with the NEXT-C-SID flavor:</t>

<figure><artwork><![CDATA[
S01. If (Upper-Layer header type is allowed by local configuration) {
S02.   Proceed to process the Upper-Layer header
S03. } Else {
S04.   Send an ICMP Parameter Problem to the Source Address
         with Code 4 (SR Upper-layer Header Error)
         and Pointer set to the offset of the Upper-Layer header,
         interrupt packet processing, and discard the packet.
S05. }
]]></artwork></figure>

</section>
<section anchor="sec-next-endt-complete"><name>End.T with NEXT-C-SID</name>

<t>When processing the SRH of a packet matching a FIB entry locally instantiated as an End.T SID with the NEXT-C-SID flavor:</t>

<figure><artwork><![CDATA[
N01. If (DA.Argument != 0) {
N02.   If (IPv6 Hop Limit <= 1) {
N03.     Send an ICMP Time Exceeded message to the Source Address
           with Code 0 (Hop limit exceeded in transit),
           interrupt packet processing, and discard the packet.
N04.   }
N05.   Copy DA.Argument into the bits [LBL..(LBL+AL-1)] of the
         Destination Address.
N06.   Set the bits [(LBL+AL)..127] of the Destination Address to
         zero.
N07.   Decrement IPv6 Hop Limit by 1.
N08.1. Set the packet's associated FIB table to T.
N08.2. Submit the packet to the egress IPv6 FIB lookup for
         transmission to the new destination.
N09. }
S02. If (Segments Left == 0) {
S03.   Stop processing the SRH, and proceed to process the next
         header in the packet, whose type is identified by
         the Next Header field in the routing header.
S04. }
S05. If (IPv6 Hop Limit <= 1) {
S06.   Send an ICMP Time Exceeded message to the Source Address
         with Code 0 (Hop limit exceeded in transit),
         interrupt packet processing, and discard the packet.
S07. }
S08. max_LE = (Hdr Ext Len / 2) - 1
S09. If ((Last Entry > max_LE) or (Segments Left > Last Entry+1)) {
S10.   Send an ICMP Parameter Problem to the Source Address
         with Code 0 (Erroneous header field encountered)
         and Pointer set to the Segments Left field,
         interrupt packet processing, and discard the packet.
S11. }
S12. Decrement IPv6 Hop Limit by 1.
S13. Decrement Segments Left by 1.
S14. Update IPv6 DA with Segment List[Segments Left].
S15.1. Set the packet's associated FIB table to T.
S15.2. Submit the packet to the egress IPv6 FIB lookup for
         transmission to the new destination.
]]></artwork></figure>

<t>Before processing the Upper-Layer header or any IPv6 extension header other than Hop-by-Hop or Destination Option of a packet matching a FIB entry locally instantiated as an End.T SID with the NEXT-C-SID flavor:</t>

<figure><artwork><![CDATA[
N01. If (DA.Argument != 0) {
N02.   If (IPv6 Hop Limit <= 1) {
N03.     Send an ICMP Time Exceeded message to the Source Address,
           Code 0 (Hop limit exceeded in transit),
           interrupt packet processing and discard the packet.
N04.   }
N05.   Copy DA.Argument into the bits [LBL..(LBL+AL-1)] of the
         Destination Address.
N06.   Set the bits [(LBL+AL)..127] of the Destination Address to
         zero.
N07.   Decrement IPv6 Hop Limit by 1.
N08.1. Set the packet's associated FIB table to T.
N08.2. Submit the packet to the egress IPv6 FIB lookup for
         transmission to the new destination.
N09. }
]]></artwork></figure>

<t>When processing the Upper-Layer header of a packet matching a FIB entry locally instantiated as an End.T SID with the NEXT-C-SID flavor:</t>

<figure><artwork><![CDATA[
S01. If (Upper-Layer header type is allowed by local configuration) {
S02.   Proceed to process the Upper-Layer header
S03. } Else {
S04.   Send an ICMP Parameter Problem to the Source Address
         with Code 4 (SR Upper-layer Header Error)
         and Pointer set to the offset of the Upper-Layer header,
         interrupt packet processing, and discard the packet.
S05. }
]]></artwork></figure>

</section>
<section anchor="sec-next-endb6-complete"><name>End.B6.Encaps with NEXT-C-SID</name>

<t>When processing the SRH of a packet matching a FIB entry locally instantiated as an End.B6.Encaps SID with the NEXT-C-SID flavor:</t>

<figure><artwork><![CDATA[
N01. If (DA.Argument != 0) {
N02.   If (IPv6 Hop Limit <= 1) {
N03.     Send an ICMP Time Exceeded message to the Source Address,
           Code 0 (Hop limit exceeded in transit),
           interrupt packet processing and discard the packet.
N04.   }
N05.   Copy DA.Argument into the bits [LBL..(LBL+AL-1)] of the
         Destination Address.
N06.   Set the bits [(LBL+AL)..127] of the Destination Address to
         zero.
N07.   Decrement IPv6 Hop Limit by 1.
N08.1. Push a new IPv6 header with its own SRH containing B.
N08.2. Set the outer IPv6 SA to A.
N08.3. Set the outer IPv6 DA to the first SID of B.
N08.4. Set the outer Payload Length, Traffic Class, Flow Label,
         Hop Limit, and Next Header fields.
N08.5. Submit the packet to the egress IPv6 FIB lookup for
         transmission to the next destination.
N09. }
S02. If (Segments Left == 0) {
S03.   Stop processing the SRH, and proceed to process the next
         header in the packet, whose type is identified by
         the Next Header field in the routing header.
S04. }
S05. If (IPv6 Hop Limit <= 1) {
S06.   Send an ICMP Time Exceeded message to the Source Address
         with Code 0 (Hop limit exceeded in transit),
         interrupt packet processing, and discard the packet.
S07. }
S08. max_LE = (Hdr Ext Len / 2) - 1
S09. If ((Last Entry > max_LE) or (Segments Left > Last Entry+1)) {
S10.   Send an ICMP Parameter Problem to the Source Address
         with Code 0 (Erroneous header field encountered)
         and Pointer set to the Segments Left field,
         interrupt packet processing, and discard the packet.
S11. }
S12. Decrement IPv6 Hop Limit by 1.
S13. Decrement Segments Left by 1.
S14. Update IPv6 DA with Segment List[Segments Left].
S15. Push a new IPv6 header with its own SRH containing B.
S16. Set the outer IPv6 SA to A.
S17. Set the outer IPv6 DA to the first SID of B.
S18. Set the outer Payload Length, Traffic Class, Flow Label,
       Hop Limit, and Next Header fields.
S19. Submit the packet to the egress IPv6 FIB lookup for
       transmission to the new destination.
]]></artwork></figure>

<t>Before processing the Upper-Layer header or any IPv6 extension header other than Hop-by-Hop or Destination Option of a packet matching a FIB entry locally instantiated as an End.B6.Encaps SID with the NEXT-C-SID flavor:</t>

<figure><artwork><![CDATA[
N01. If (DA.Argument != 0) {
N02.   If (IPv6 Hop Limit <= 1) {
N03.     Send an ICMP Time Exceeded message to the Source Address,
           Code 0 (Hop limit exceeded in transit),
           interrupt packet processing and discard the packet.
N04.   }
N05.   Copy DA.Argument into the bits [LBL..(LBL+AL-1)] of the
         Destination Address.
N06.   Set the bits [(LBL+AL)..127] of the Destination Address to
         zero.
N07.   Decrement IPv6 Hop Limit by 1.
N08.1. Push a new IPv6 header with its own SRH containing B.
N08.2. Set the outer IPv6 SA to A.
N08.3. Set the outer IPv6 DA to the first SID of B.
N08.4. Set the outer Payload Length, Traffic Class, Flow Label,
         Hop Limit, and Next Header fields.
N08.5. Submit the packet to the egress IPv6 FIB lookup for
         transmission to the next destination.
N09. }
]]></artwork></figure>

<t>When processing the Upper-Layer header of a packet matching a FIB entry locally instantiated as an End.B6.Encaps SID with the NEXT-C-SID flavor:</t>

<figure><artwork><![CDATA[
S01. If (Upper-Layer header type is allowed by local configuration) {
S02.   Proceed to process the Upper-Layer header
S03. } Else {
S04.   Send an ICMP Parameter Problem to the Source Address
         with Code 4 (SR Upper-layer Header Error)
         and Pointer set to the offset of the Upper-Layer header,
         interrupt packet processing, and discard the packet.
S05. }
]]></artwork></figure>

</section>
<section anchor="sec-next-endbm-complete"><name>End.BM with NEXT-C-SID</name>

<t>When processing the SRH of a packet matching a FIB entry locally instantiated as an End.BM SID with the NEXT-C-SID flavor:</t>

<figure><artwork><![CDATA[
N01. If (DA.Argument != 0) {
N02.   If (IPv6 Hop Limit <= 1) {
N03.     Send an ICMP Time Exceeded message to the Source Address,
           Code 0 (Hop limit exceeded in transit),
           interrupt packet processing and discard the packet.
N04.   }
N05.   Copy DA.Argument into the bits [LBL..(LBL+AL-1)] of the
         Destination Address.
N06.   Set the bits [(LBL+AL)..127] of the Destination Address to
         zero.
N07.   Decrement IPv6 Hop Limit by 1.
N08.1. Push the MPLS label stack for B.
N08.2. Submit the packet to the MPLS engine for transmission.
N09. }
S02. If (Segments Left == 0) {
S03.   Stop processing the SRH, and proceed to process the next
         header in the packet, whose type is identified by
         the Next Header field in the routing header.
S04. }
S05. If (IPv6 Hop Limit <= 1) {
S06.   Send an ICMP Time Exceeded message to the Source Address
         with Code 0 (Hop limit exceeded in transit),
         interrupt packet processing, and discard the packet.
S07. }
S08. max_LE = (Hdr Ext Len / 2) - 1
S09. If ((Last Entry > max_LE) or (Segments Left > Last Entry+1)) {
S10.   Send an ICMP Parameter Problem to the Source Address
         with Code 0 (Erroneous header field encountered)
         and Pointer set to the Segments Left field,
         interrupt packet processing, and discard the packet.
S11. }
S12. Decrement IPv6 Hop Limit by 1.
S13. Decrement Segments Left by 1.
S14. Update IPv6 DA with Segment List[Segments Left].
S15. Push the MPLS label stack for B.
S16. Submit the packet to the MPLS engine for transmission.
]]></artwork></figure>

<t>Before processing the Upper-Layer header or any IPv6 extension header other than Hop-by-Hop or Destination Option of a packet matching a FIB entry locally instantiated as an End.BM SID with the NEXT-C-SID flavor:</t>

<figure><artwork><![CDATA[
N01. If (DA.Argument != 0) {
N02.   If (IPv6 Hop Limit <= 1) {
N03.     Send an ICMP Time Exceeded message to the Source Address,
           Code 0 (Hop limit exceeded in transit),
           interrupt packet processing and discard the packet.
N04.   }
N05.   Copy DA.Argument into the bits [LBL..(LBL+AL-1)] of the
         Destination Address.
N06.   Set the bits [(LBL+AL)..127] of the Destination Address to
         zero.
N07.   Decrement IPv6 Hop Limit by 1.
N08.1. Push the MPLS label stack for B.
N08.2. Submit the packet to the MPLS engine for transmission.
N09. }
]]></artwork></figure>

<t>When processing the Upper-Layer header of a packet matching a FIB entry locally instantiated as an End.BM SID with the NEXT-C-SID flavor:</t>

<figure><artwork><![CDATA[
S01. If (Upper-Layer header type is allowed by local configuration) {
S02.   Proceed to process the Upper-Layer header
S03. } Else {
S04.   Send an ICMP Parameter Problem to the Source Address
         with Code 4 (SR Upper-layer Header Error)
         and Pointer set to the offset of the Upper-Layer header,
         interrupt packet processing, and discard the packet.
S05. }
]]></artwork></figure>

</section>
<section anchor="sec-replace-end-complete"><name>End with REPLACE-C-SID</name>

<t>When processing the SRH of a packet matching a FIB entry locally instantiated as an End SID with the REPLACE-C-SID flavor:</t>

<figure><artwork><![CDATA[
S01. When an SRH is processed {
S02.   If (Segments Left == 0 and (DA.Arg.Index == 0 or
           Segment List[0][DA.Arg.Index-1] == 0)) {
S03.     Stop processing the SRH, and proceed to process the next
           header in the packet, whose type is identified by
           the Next Header field in the routing header.
S04.   }
S05.   If (IPv6 Hop Limit <= 1) {
S06.     Send an ICMP Time Exceeded message to the Source Address,
           Code 0 (Hop limit exceeded in transit),
           interrupt packet processing and discard the packet.
S07.   }
S08.   max_LE = (Hdr Ext Len / 2) - 1
R01.   If (DA.Arg.Index != 0) {
R02.     If ((Last Entry > max_LE) or (Segments Left > Last Entry)) {
R03.       Send an ICMP Parameter Problem to the Source Address,
             Code 0 (Erroneous header field encountered),
             Pointer set to the Segments Left field,
             interrupt packet processing and discard the packet.
R04.     }
R05.     Decrement DA.Arg.Index by 1.
R06.     If (Segment List[Segments Left][DA.Arg.Index] == 0) {
R07.       Decrement Segments Left by 1.
R08.       Decrement IPv6 Hop Limit by 1.
R09.       Update IPv6 DA with Segment List[Segments Left]
R10.       Submit the packet to the egress IPv6 FIB lookup for
            transmission to the new destination.
R11.     }
R12.   } Else {
R13.     If((Last Entry > max_LE) or (Segments Left > Last Entry+1)){
R14.       Send an ICMP Parameter Problem to the Source Address,
             Code 0 (Erroneous header field encountered),
             Pointer set to the Segments Left field,
             interrupt packet processing and discard the packet.
R15.     }
R16.     Decrement Segments Left by 1.
R17.     Set DA.Arg.Index to (128/LNFL - 1).
R18.   }
R19.   Decrement IPv6 Hop Limit by 1.
R20.   Write Segment List[Segments Left][DA.Arg.Index] into the bits
         [LBL..LBL+LNFL-1] of the Destination Address of the IPv6
         header.
R21.   Submit the packet to the egress IPv6 FIB lookup for
         transmission to the new destination.
S16. }
]]></artwork></figure>

<t>When processing the Upper-Layer header of a packet matching a FIB entry locally instantiated as an End SID with the REPLACE-C-SID flavor:</t>

<figure><artwork><![CDATA[
S01. If (Upper-Layer header type is allowed by local configuration) {
S02.   Proceed to process the Upper-Layer header
S03. } Else {
S04.   Send an ICMP Parameter Problem to the Source Address
          with Code 4 (SR Upper-layer Header Error)
          and Pointer set to the offset of the Upper-Layer header,
          interrupt packet processing, and discard the packet.
S05. }
]]></artwork></figure>

</section>
<section anchor="sec-replace-endx-complete"><name>End.X with REPLACE-C-SID</name>

<t>When processing the SRH of a packet matching a FIB entry locally instantiated as an End.X SID with the REPLACE-C-SID flavor:</t>

<figure><artwork><![CDATA[
S01. When an SRH is processed {
S02.   If (Segments Left == 0 and (DA.Arg.Index == 0 or
           Segment List[0][DA.Arg.Index-1] == 0)) {
S03.     Stop processing the SRH, and proceed to process the next
           header in the packet, whose type is identified by
           the Next Header field in the routing header.
S04.   }
S05.   If (IPv6 Hop Limit <= 1) {
S06.     Send an ICMP Time Exceeded message to the Source Address,
           Code 0 (Hop limit exceeded in transit),
           interrupt packet processing and discard the packet.
S07.   }
S08.   max_LE = (Hdr Ext Len / 2) - 1
R01.   If (DA.Arg.Index != 0) {
R02.     If ((Last Entry > max_LE) or (Segments Left > Last Entry)) {
R03.       Send an ICMP Parameter Problem to the Source Address,
             Code 0 (Erroneous header field encountered),
             Pointer set to the Segments Left field,
             interrupt packet processing and discard the packet.
R04.     }
R05.     Decrement DA.Arg.Index by 1.
R06.     If (Segment List[Segments Left][DA.Arg.Index] == 0) {
R07.       Decrement Segments Left by 1.
R08.       Decrement IPv6 Hop Limit by 1.
R09.       Update IPv6 DA with Segment List[Segments Left]
R10.       Submit the packet to the IPv6 module for transmission to
             the new destination via a member of J.
R11.     }
R12.   } Else {
R13.     If((Last Entry > max_LE) or (Segments Left > Last Entry+1)){
R14.       Send an ICMP Parameter Problem to the Source Address,
             Code 0 (Erroneous header field encountered),
             Pointer set to the Segments Left field,
             interrupt packet processing and discard the packet.
R15.     }
R16.     Decrement Segments Left by 1.
R17.     Set DA.Arg.Index to (128/LNFL - 1).
R18.   }
R19.   Decrement IPv6 Hop Limit by 1.
R20.   Write Segment List[Segments Left][DA.Arg.Index] into the bits
         [LBL..LBL+LNFL-1] of the Destination Address of the IPv6
         header.
R21.   Submit the packet to the IPv6 module for transmission to the
         new destination via a member of J.
S16. }
]]></artwork></figure>

<t>When processing the Upper-Layer header of a packet matching a FIB entry locally instantiated as an End.X SID with the REPLACE-C-SID flavor:</t>

<figure><artwork><![CDATA[
S01. If (Upper-Layer header type is allowed by local configuration) {
S02.   Proceed to process the Upper-Layer header
S03. } Else {
S04.   Send an ICMP Parameter Problem to the Source Address
          with Code 4 (SR Upper-layer Header Error)
          and Pointer set to the offset of the Upper-Layer header,
          interrupt packet processing, and discard the packet.
S05. }
]]></artwork></figure>

</section>
<section anchor="sec-replace-endt-complete"><name>End.T with REPLACE-C-SID</name>

<t>When processing the SRH of a packet matching a FIB entry locally instantiated as an End.T SID with the REPLACE-C-SID flavor:</t>

<figure><artwork><![CDATA[
S01. When an SRH is processed {
S02.   If (Segments Left == 0 and (DA.Arg.Index == 0 or
           Segment List[0][DA.Arg.Index-1] == 0)) {
S03.     Stop processing the SRH, and proceed to process the next
           header in the packet, whose type is identified by
           the Next Header field in the routing header.
S04.   }
S05.   If (IPv6 Hop Limit <= 1) {
S06.     Send an ICMP Time Exceeded message to the Source Address,
           Code 0 (Hop limit exceeded in transit),
           interrupt packet processing and discard the packet.
S07.   }
S08.   max_LE = (Hdr Ext Len / 2) - 1
R01.   If (DA.Arg.Index != 0) {
R02.     If ((Last Entry > max_LE) or (Segments Left > Last Entry)) {
R03.       Send an ICMP Parameter Problem to the Source Address,
             Code 0 (Erroneous header field encountered),
             Pointer set to the Segments Left field,
             interrupt packet processing and discard the packet.
R04.     }
R05.     Decrement DA.Arg.Index by 1.
R06.     If (Segment List[Segments Left][DA.Arg.Index] == 0) {
R07.       Decrement Segments Left by 1.
R08.       Decrement IPv6 Hop Limit by 1.
R09.       Update IPv6 DA with Segment List[Segments Left]
R10.1.     Set the packet's associated FIB table to T.
R10.2.     Submit the packet to the egress IPv6 FIB lookup for
             transmission to the new destination.
R11.     }
R12.   } Else {
R13.     If((Last Entry > max_LE) or (Segments Left > Last Entry+1)){
R14.       Send an ICMP Parameter Problem to the Source Address,
             Code 0 (Erroneous header field encountered),
             Pointer set to the Segments Left field,
             interrupt packet processing and discard the packet.
R15.     }
R16.     Decrement Segments Left by 1.
R17.     Set DA.Arg.Index to (128/LNFL - 1).
R18.   }
R19.   Decrement IPv6 Hop Limit by 1.
R20.   Write Segment List[Segments Left][DA.Arg.Index] into the bits
         [LBL..LBL+LNFL-1] of the Destination Address of the IPv6
         header.
R21.1. Set the packet's associated FIB table to T.
R21.2. Submit the packet to the egress IPv6 FIB lookup for
         transmission to the new destination.
S16. }
]]></artwork></figure>

<t>When processing the Upper-Layer header of a packet matching a FIB entry locally instantiated as an End.T SID with the REPLACE-C-SID flavor:</t>

<figure><artwork><![CDATA[
S01. If (Upper-Layer header type is allowed by local configuration) {
S02.   Proceed to process the Upper-Layer header
S03. } Else {
S04.   Send an ICMP Parameter Problem to the Source Address
          with Code 4 (SR Upper-layer Header Error)
          and Pointer set to the offset of the Upper-Layer header,
          interrupt packet processing, and discard the packet.
S05. }
]]></artwork></figure>

</section>
<section anchor="sec-replace-endb6-complete"><name>End.B6.Encaps with REPLACE-C-SID</name>

<t>When processing the SRH of a packet matching a FIB entry locally instantiated as an End.B6.Encaps SID with the REPLACE-C-SID flavor:</t>

<figure><artwork><![CDATA[
S01. When an SRH is processed {
S02.   If (Segments Left == 0 and (DA.Arg.Index == 0 or
           Segment List[0][DA.Arg.Index-1] == 0)) {
S03.     Stop processing the SRH, and proceed to process the next
           header in the packet, whose type is identified by
           the Next Header field in the routing header.
S04.   }
S05.   If (IPv6 Hop Limit <= 1) {
S06.     Send an ICMP Time Exceeded message to the Source Address,
           Code 0 (Hop limit exceeded in transit),
           interrupt packet processing and discard the packet.
S07.   }
S08.   max_LE = (Hdr Ext Len / 2) - 1
R01.   If (DA.Arg.Index != 0) {
R02.     If ((Last Entry > max_LE) or (Segments Left > Last Entry)) {
R03.       Send an ICMP Parameter Problem to the Source Address,
             Code 0 (Erroneous header field encountered),
             Pointer set to the Segments Left field,
             interrupt packet processing and discard the packet.
R04.     }
R05.     Decrement DA.Arg.Index by 1.
R06.     If (Segment List[Segments Left][DA.Arg.Index] == 0) {
R07.       Decrement Segments Left by 1.
R08.       Decrement IPv6 Hop Limit by 1.
R09.       Update IPv6 DA with Segment List[Segments Left]
R10.1.     Push a new IPv6 header with its own SRH containing B.
R10.2.     Set the outer IPv6 SA to A.
R10.3.     Set the outer IPv6 DA to the first SID of B.
R10.4.     Set the outer Payload Length, Traffic Class, Flow Label,
             Hop Limit, and Next Header fields.
R10.5.     Submit the packet to the egress IPv6 FIB lookup for
             transmission to the next destination.
R11.     }
R12.   } Else {
R13.     If((Last Entry > max_LE) or (Segments Left > Last Entry+1)){
R14.       Send an ICMP Parameter Problem to the Source Address,
             Code 0 (Erroneous header field encountered),
             Pointer set to the Segments Left field,
             interrupt packet processing and discard the packet.
R15.     }
R16.     Decrement Segments Left by 1.
R17.     Set DA.Arg.Index to (128/LNFL - 1).
R18.   }
R19.   Decrement IPv6 Hop Limit by 1.
R20.   Write Segment List[Segments Left][DA.Arg.Index] into the bits
         [LBL..LBL+LNFL-1] of the Destination Address of the IPv6
         header.
R21.1. Push a new IPv6 header with its own SRH containing B.
R21.2. Set the outer IPv6 SA to A.
R21.3. Set the outer IPv6 DA to the first SID of B.
R21.4. Set the outer Payload Length, Traffic Class, Flow Label,
         Hop Limit, and Next Header fields.
R21.5. Submit the packet to the egress IPv6 FIB lookup for
         transmission to the next destination.
S16. }
]]></artwork></figure>

<t>When processing the Upper-Layer header of a packet matching a FIB entry locally instantiated as an End.B6.Encaps SID with the REPLACE-C-SID flavor:</t>

<figure><artwork><![CDATA[
S01. If (Upper-Layer header type is allowed by local configuration) {
S02.   Proceed to process the Upper-Layer header
S03. } Else {
S04.   Send an ICMP Parameter Problem to the Source Address
          with Code 4 (SR Upper-layer Header Error)
          and Pointer set to the offset of the Upper-Layer header,
          interrupt packet processing, and discard the packet.
S05. }
]]></artwork></figure>

</section>
<section anchor="sec-replace-endbm-complete"><name>End.BM with REPLACE-C-SID</name>

<t>When processing the SRH of a packet matching a FIB entry locally instantiated as an End.BM SID with the REPLACE-C-SID flavor:</t>

<figure><artwork><![CDATA[
S01. When an SRH is processed {
S02.   If (Segments Left == 0 and (DA.Arg.Index == 0 or
           Segment List[0][DA.Arg.Index-1] == 0)) {
S03.     Stop processing the SRH, and proceed to process the next
           header in the packet, whose type is identified by
           the Next Header field in the routing header.
S04.   }
S05.   If (IPv6 Hop Limit <= 1) {
S06.     Send an ICMP Time Exceeded message to the Source Address,
           Code 0 (Hop limit exceeded in transit),
           interrupt packet processing and discard the packet.
S07.   }
S08.   max_LE = (Hdr Ext Len / 2) - 1
R01.   If (DA.Arg.Index != 0) {
R02.     If ((Last Entry > max_LE) or (Segments Left > Last Entry)) {
R03.       Send an ICMP Parameter Problem to the Source Address,
             Code 0 (Erroneous header field encountered),
             Pointer set to the Segments Left field,
             interrupt packet processing and discard the packet.
R04.     }
R05.     Decrement DA.Arg.Index by 1.
R06.     If (Segment List[Segments Left][DA.Arg.Index] == 0) {
R07.       Decrement Segments Left by 1.
R08.       Decrement IPv6 Hop Limit by 1.
R09.       Update IPv6 DA with Segment List[Segments Left]
R10.1.     Push the MPLS label stack for B.
R10.2.     Submit the packet to the MPLS engine for transmission.
R11.     }
R12.   } Else {
R13.     If((Last Entry > max_LE) or (Segments Left > Last Entry+1)){
R14.       Send an ICMP Parameter Problem to the Source Address,
             Code 0 (Erroneous header field encountered),
             Pointer set to the Segments Left field,
             interrupt packet processing and discard the packet.
R15.     }
R16.     Decrement Segments Left by 1.
R17.     Set DA.Arg.Index to (128/LNFL - 1).
R18.   }
R19.   Decrement IPv6 Hop Limit by 1.
R20.   Write Segment List[Segments Left][DA.Arg.Index] into the bits
         [LBL..LBL+LNFL-1] of the Destination Address of the IPv6
         header.
R21.1. Push the MPLS label stack for B.
R21.2. Submit the packet to the MPLS engine for transmission.
S16. }
]]></artwork></figure>

<t>When processing the Upper-Layer header of a packet matching a FIB entry locally instantiated as an End.BM SID with the REPLACE-C-SID flavor:</t>

<figure><artwork><![CDATA[
S01. If (Upper-Layer header type is allowed by local configuration) {
S02.   Proceed to process the Upper-Layer header
S03. } Else {
S04.   Send an ICMP Parameter Problem to the Source Address
          with Code 4 (SR Upper-layer Header Error)
          and Pointer set to the offset of the Upper-Layer header,
          interrupt packet processing, and discard the packet.
S05. }
]]></artwork></figure>

</section>
</section>

    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
        <name>Contributors</name>
    <contact initials="L." surname="Aihua" fullname="Liu Aihua">
      <organization>ZTE Corporation</organization>
      <address>
        <postal>
          <country>China</country>
        </postal>
        <email>liu.aihua@zte.com.cn</email>
      </address>
    </contact>
    <contact initials="D." surname="Cai" fullname="Dennis Cai">
      <organization>Alibaba</organization>
      <address>
        <postal>
          <country>USA</country>
        </postal>
        <email>d.cai@alibaba-inc.com</email>
      </address>
    </contact>
    <contact initials="D." surname="Dukes" fullname="Darren Dukes">
      <organization>Cisco Systems, Inc.</organization>
      <address>
        <postal>
          <country>Canada</country>
        </postal>
        <email>ddukes@cisco.com</email>
      </address>
    </contact>
    <contact initials="J." surname="Guichard" fullname="James N Guichard">
      <organization>Futurewei Technologies Ltd.</organization>
      <address>
        <postal>
          <country>USA</country>
        </postal>
        <email>james.n.guichard@futurewei.com</email>
      </address>
    </contact>
    <contact initials="C." surname="Li" fullname="Cheng Li">
      <organization>Huawei Technologies</organization>
      <address>
        <postal>
          <country>China</country>
        </postal>
        <email>c.l@huawei.com</email>
      </address>
    </contact>
    <contact initials="R." surname="Raszuk" fullname="Robert Raszuk">
      <organization>NTT Network Innovations</organization>
      <address>
        <postal>
          <country>USA</country>
        </postal>
        <email>robert@raszuk.net</email>
      </address>
    </contact>
    <contact initials="K." surname="Talaulikar" fullname="Ketan Talaulikar">
      <organization>Cisco Systems, Inc.</organization>
      <address>
        <postal>
          <country>India</country>
        </postal>
        <email>ketant.ietf@gmail.com</email>
      </address>
    </contact>
    <contact initials="D." surname="Voyer" fullname="Daniel Voyer">
      <organization>Bell Canada</organization>
      <address>
        <postal>
          <country>Canada</country>
        </postal>
        <email>daniel.voyer@bell.ca</email>
      </address>
    </contact>
    <contact initials="S." surname="Zadok" fullname="Shay Zadok">
      <organization>Broadcom</organization>
      <address>
        <postal>
          <country>Israel</country>
        </postal>
        <email>shay.zadok@broadcom.com</email>
      </address>
    </contact>
    </section>

  </back>

<!-- ##markdown-source:
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
cmBWX0jIaHkaYGVX8RqrSw05F8025+2Ypoq3jirZwSvUXvzxVUSKB+XtZv2X
X+jMDGw8gmCbWA0xEZl9CcVYaTkY6xxNfAqDOZZhCt6D9m+WD4S97+bYMje3
VxZiqievdGQjJTXPZCdoUPMCSRpdBVTwwCypzkw7oYZG0buynmiXHBBv8kXU
CvcrfIHUh6hmo+uIqoMBAr4/vVB8vcqRrBDnhOtWqSqNvc25HroZrmbFuVGO
RF2gsrCdBbaIG8uTH7glhvVyQjrxYKX+xXLv9sKXRAOk18smQMQcVUQFc7W9
JpCwgojp9FyZJO4UQCr3xeYxtJMjlxCmzs4hOr85p7kFiu0E1T5yioaKGYV2
ZcaDhg61kzJzpllLNkmkEUlC7AvBRXcZ6lOgCYT79MUMxqD6fVaGOQGsshzD
KqYR8qIxWkwiVZrzOnrH+eHoNEk5IebBndlcX2iF8xRx1V5Jux7ti3c4t8qo
MCuxrEwMk8lmxyjoblfAYNnsMhg7UrWiiFMiFJcRu+5WVmzYjP8MOQqI5Zqy
7krSNTNL2wG8KC5QZDM9tORFJgtM0tjbUouHzpL5kWr3FDQCISENh6G3bV66
3LbKGdpyBsPeW/U9RwXnU+JrueNp2arKU+U1Sf4fVpUhT1aQptKA7QtS/dAk
RdbAVbknjXumHIxLNcrl0aYBPHnFcxs+OjhwGXpfBSkyt4SSULQKoVCLWBaD
A6N6Xz6CyvkIavAoC6Z2xJgEUVVRhLb4GamCVBJ/xJiaCw8VBiCbSQAttdOP
DuFnlrR+38MI++jaPwrhbn/3DBPxPAMqCn+4h5MANJw95xTjLuAiwY/QQUcc
OgsJA0+ccZAaZkvl5SnhUfNsNDXLYxstMO19PBFo0WrwjBjJ7VypCgNaWqtS
d1bPagmkorfB4RAFnUdJyqjXosbkjQyKnPs89i4kdhg+HnkJWxs8en2MEqo9
mbOqFpG/7d2NPnpiO4Ks8PVc4Vdx1YVE/hifDtyfqxKhdpUk7JsLZPjw/AU2
R8OkKiOnbg0Zw3Drl8rHeILrJnyEBWEZMTmhUJfl5acKtW00krdyU0wxEy25
8WlNI6CUqLDIKBY1gq0ULVwjzPUii1G9n5GbcUh1bJFPYpaokQ+sF46C36VB
ExHy1DKD8MUrHUBA83K+Wgxlz+hths6UwEEqBxoQsEYqo45EJ2kgepJiaQZi
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

-->

</rfc>

