<?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.1 (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 RFC9256 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9256.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-10" 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="2023" month="December" day="15"/>

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

    <abstract>


<?line 232?>

<t>This document specifies new flavors for the Segment Routing (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 236?>

<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>The SPRING working group has observed that some use cases, such as
strict path TE, may require long segment lists and that steering packets over such long segment lists using the SRv6 dataplane requires a large SRH. 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 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 capabilities of 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>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 PSP, USP, and 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. 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). 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>The last C-SID in the C-SID 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 it meets the conditions defined in <xref target="sec-source-node"/>.</t>

<t>The structure of a SID with the NEXT-C-SID flavor is shown in <xref target="fig-next-struct"/>. The same structure is also that of a C-SID container carrying NEXT-C-SID SIDs.</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 SHOULD 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 one 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 the value of 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 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 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 RECOMMENDED Locator-Block lengths (LBL) for REPLACE-C-SID flavor SIDs are 48, 56, 64, 72, or 80 bits, depending on the needs of the operator.</t>

<t>The REPLACE-C-SID flavor supports both 16- and 32-bit C-SID lengths (LNFL). A C-SID length of 32-bit is RECOMMENDED.</t>

<t>Any other Locator-Block and C-SID length selection is possible, but may lead to suboptimal C-SID encoding in the C-SID containers (e.g., presence of padding bits).</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 ceil(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 one 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 bits <spanx style="verb">[(128-ceil(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 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 effectively 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 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 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 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>An SR segment endpoint node instantiating a NEXT-C-SID or REPLACE-C-SID flavor SID SHOULD install the corresponding FIB entry to match only the Locator and Function parts of the SID (i.e., with a prefix length of LBL + LNL + FL). Any other mean of identifying a locally instantiated SID is possible as long as it is compliant with Section 4.3 of <xref target="RFC8754"/> and accepts all valid Argument values for the SID.</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 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"><name>Segment Validation</name>

<t>An SR source node MUST validate all SIDs defined in this document that it uses as part of a segment list, 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 of this document is valid if it is associated with a valid SID structure.</t>

<t>The structure of a SID is valid if <strong>all</strong> the following conditions are met.</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>An SR source node MUST NOT include an invalid SID in a segment list. If an explicitly configured or advertised segment list (e.g., from a controller) contains an invalid SID, the segment list MUST be declared invalid (<xref target="RFC9256"/>).</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="segment-list-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 a path equivalent to 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-routing-domains-compression"><name>Inter Routing Domains 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. 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 using a signaling protocol.</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 the value of 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 using a signaling protocol.</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 the value of 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="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>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>TBA</c>
      <c>End.PS with NEXT-CSID</c>
      <c>This I-D.</c>
      <c>TBA</c>
      <c>End.PS with REPLACE-CSID</c>
      <c>This I-D.</c>
      <c>TBA</c>
      <c>End.XPS with NEXT-CSID</c>
      <c>This I-D.</c>
      <c>TBA</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;
&RFC9256;
&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="EMAIL1" target="https://mailarchive.ietf.org/arch/msg/spring/VjVIxo7fZFhsIHJ5wFQXIBvvtNM/">
  <front>
    <title>SPRING chairs email on the adoption of draft-filsfilscheng-spring-srv6-srh-compression-02</title>
    <author >
      <organization></organization>
    </author>
    <date year="2021" month="October"/>
  </front>
</reference>
<reference anchor="EMAIL2" target="https://mailarchive.ietf.org/arch/msg/spring/vCc9Ckvwu5HA-RCleV712dsA5OA/">
  <front>
    <title>SPRING chairs email on working group process</title>
    <author >
      <organization></organization>
    </author>
    <date year="2022" month="February"/>
  </front>
</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 1409?>

<section removeInRFC="true" anchor="open-issues"><name>Open Issues</name>

<t>This section was added as requested by the SPRING chair in <xref target="EMAIL1"/>.</t>

<t>Issues raised during and after the adoption call for this draft are
tracked in an issue tracker. The remainder of this section identifies
the most significant open issues, from the adoption call, for the
working group to keep track of.</t>

<t>As a reminder to those reading this section, this document is a work in
progress, and subject to change by the working group.  As noted at the
front of this document, &quot;It is inappropriate to use Internet-Drafts as
reference material&quot;</t>

<t><list style="symbols">
  <t>Given that the working group has said that it wants to standardize one
data plane solution, and given that the document contains multiple SRv6
EndPoint behaviors that some WG members have stated are multiple data
plane solutions, the working group will address whether this is valid
and coherent with its one data plane solution objective.</t>
  <t>As reminded in the conclusion of the adoption call, this document is
subject to the policy announced by the SPRING chairs in
<xref target="EMAIL2"/>.
In particular, this means that this document can not go to WG last call
until 6man completes handling of an Internet Draft that deals with the
relationship of C-SIDs to RFC 4291.  It is hoped and expected that said
resolution will be a WG last call and document approval in 6man of a
document providing for the way that C-SIDs use the IPv6 destination
address field.</t>
</list></t>

</section>
<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 the value of 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 the value of 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 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 the value of 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 the value of 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 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 the value of 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 the value of 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 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 the value of 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 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 the value of 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 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 the value of 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 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 the value of 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 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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
MvkGgHK4agc4cky+b9UQ1tqpACVU8c8GZiKs1UiKcUiyD0k+qmpb5BI4UXFe
Mveq4q0o3FSxQ6Y6KAwK9zTuN4kZTfNMmiIBmSTnG+egf9QvS0JBjLUojcq5
YkIUlUFBQrpxHAx+IsOzqEIScVl0n4A741PeCBZzVJ2aZxWzPlMdbuAujeXO
A3luIacLoJstI2XNWxwktXSZptNkZ2Xl+vq6Daqq247iixWOTiMheiWX1GVl
2dALXu4ZFS7tA4uo1gkXN8a4Uax2rZ/BwgT2rxBMpSORc6XQxEbj3847SiPx
b8xDqAMz/+2caND9G9q08D9HfrYKf1GbtVX4CBUbQ6nHq/5vJzswardW3u5/
U7HAQuv1qtZvy1pvlLZu0tAVXTarJyhZ/NacCUq6bFd0eVvZZb1TPUttvx73
a5/NO4T11aqW5cewvlbdvgyq6+sV7euOYn2jbpKSTWzOnaSk01ZlpxrAbtfN
VNdzSwHidN6RbG1UtSw/kq3N6vZl0N3aqmhfdyRb23WTFDex3Zk7SUmnbmWn
asBu9+pmqu2pcH93o70fjtxpMu9ottfyPdon3lxCt62Ofvf1vKbdTte88do6
Ut62V9m2HFO6ndWaHmXH3u2sVfWow5ZuJ3ft52xko6Z11VY2a/uUr2qruk/9
dnLYX7+dbqemdcV2ut3aPqWr6vaq+9Rup1tA44W2lUfjOc3Vob4421io/aZu
v7ZQe3WYWPtmkfbbuv1C4/c6WfuFJuh19QZ6C7XvZe3fLdRhVa+o93ahDmtZ
h4XOrLeZR4yMvs3paclDBewt67Fd1aOORXRXO9Xdqkl9d7WSrs5lE93VnDS1
yO5WV6v71O9vra5j3SprSO4Ce8wJHQvtcbO6T/0et+o61q2yhg7P3ePpbl96
2xUhyvC52LYW/bPmZ7cZu1hMoNj+jx3nm3QYtFBX1Cn7WoY12E8D7/mzE0ON
paT2mIjoG6c/wpxAgTe+IF+LxPZH43RTgf9ejNhu+N752Z2AvuicuL+7TecM
NeSfYOqLpvP/Zm64d+lGzmDWdF65OAt86CdYiP3Qh89eo5dP6LzzL6JZ7M0+
NJ2fIlCJX7nB1ItDiSRyA+e1/3vsXvrq5dSPydBycZmez4IsPQpZOmcXF/jw
Dpp5u2zlVMbNXn4/HMfetdMPkhTzRR/64dh1XszCoRs3nf4YX4edl24cq8jd
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
2b7V/ZWlSEOMfAhB8l6i5F2ESUeJk7UMRATKr4uBDJj4ikzpzJMqTxCjHIPL
CmYoNnvCGOXcWfJc5lEEV+5GbiygOLeRPXM9by183vUUThjL8BxOGM9MfmhB
mlniicI14+6WiZXWffxV63QnfOr2NGWi7Aljhd2wVC4+QfbJ/91S9G2csJpB
x30fa6Cz4MPBSberod0lfNVM7qS7quB6Z8UJR1n7D8Pf7noG0Y08/pYiVndT
EcscgsNCl7q9rZXDo5eHSHOWsfFWWwbfXsB5+qRH+PRL7KdeHeLlLoclHWcw
YTEZ5VtcEfK0GulWvsJl5Q0fuK7uJ4qXzyE4KYmfMVx+nkjypxBl7yLLPoAw
++BB83Pk2c8ROv8k0j6JtHdnRk8i7RchEjyJtHLcdwxytY+ghM+XBbo+ibZP
ou2XKNo+dED340u4t5VRnmTcL0HGzafOL5dxP0dw95OM+yTj3p0rPcm4X4Rs
8B8v43YzSScDTH2oJHYTbLuvtffJ3PuZ8P5JJl5QJr5lGDF2eZQw4s8gP99S
/nmSn78E+bmqZl65HP1ZQ4qfBOongfruLO1JoP4iBIsngZo73y0qzBStayLD
sNlqZbPq6DDst1bW7y4RYvjfAlFiOOf6J9UW8tFiT+rCk7rwGdWFO958URzq
bj00uW08KPZ5rHhQnOtx4kE/g/JzR5n1SQn6IpSgfDnpCu3ns8SGPqk9T2rP
3Vnzk9rzRQhIT2qPofYgZKpCvBZ5PKgP83oS75/E+88t3tdi+JwngHrs/hyi
7S0FkieZ9jPKtP8fBx461BPaAQA=

-->

</rfc>

