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


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

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


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

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

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

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

    <abstract>


<?line 221?>

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



    </abstract>



  </front>

  <middle>


<?line 225?>

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

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

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

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

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

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

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

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

<t><list style="symbols">
  <t>Locator-Block: The most significant bits of a SID locator that represent the SRv6 SID block. The Locator-Block is referred to as &quot;B&quot; in Section 3.1 of <xref target="RFC8986"/>.</t>
  <t>Locator-Node: The least significant bits of a SID locator that identify the SR segment endpoint node instantiating the SID. The Locator-Node is referred to as &quot;N&quot; in Section 3.1 of <xref target="RFC8986"/>.</t>
  <t>Compressed-SID (C-SID): A compressed encoding of a SID. The C-SID includes the Locator-Node and Function bits of the SID being compressed.</t>
  <t>C-SID container: A 128-bit container holding a list of one or more C-SIDs.</t>
  <t>C-SID sequence: A group of one or more consecutive segment list entries carrying the common Locator-Block and at least one C-SID container.</t>
  <t>Uncompressed SID sequence: A group of one or more 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>SRv6 is intended for use in networks of diverse sizes, requiring different SID numbering spaces. The two flavors introduced in this document come with their recommended C-SID lengths as specified in <xref target="sec-next"/> and <xref target="sec-replace"/>. Larger C-SID lengths may be more suitable for networks requiring ample SID numbering space, while smaller C-SID lengths are more suitable for compression efficiency. Thus, the two compression flavors allow the compressed segment list encoding to adapt to this diversity of requirements by supporting multiple compression levels. An operator can choose the flavor suitable for their use case, deployment design, and network scale.</t>

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

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

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

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

<t>A C-SID sequence using the NEXT-C-SID flavor comprises one or more C-SID containers. Each C-SID container is a fully formed 128-bit SID. 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-for-compression"><name>Segment Validation for Compression</name>

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

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

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

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

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

</section>
<section anchor="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-domain-compression"><name>Inter-Domain Compression</name>

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

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

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

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

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

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

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

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

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

<t>The means by which an SR source node learns the target Locator-Block associated with an End.PS SID are outside the scope of this document. As examples, it could be learnt via configuration or 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="ciena"><name>Ciena</name>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

</section>


  </middle>

  <back>


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

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


    </references>

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

&RFC7942;
&RFC9252;
&RFC9352;
&RFC9513;
&RFC9514;
&I-D.ietf-6man-sids;
&I-D.ietf-idr-bgp-ls-sr-policy;
&I-D.ietf-idr-segment-routing-te-policy;
&I-D.ietf-pce-segment-routing-ipv6;
<reference anchor="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 1419?>

<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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

-->

</rfc>

