<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-lh-spring-srv6-sfc-csid-04" category="std" consensus="true" submissionType="IETF" xml:lang="en" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.1 -->
  <front>
    <title>Compressed SID (CSID) for SRv6 SFC</title>
    <seriesInfo name="Internet-Draft" value="draft-lh-spring-srv6-sfc-csid-04"/>
    <author initials="C." surname="Li" fullname="Cheng Li" role="editor">
      <organization>Huawei</organization>
      <address>
        <postal>
          <country>China</country>
        </postal>
        <email>c.l@huawei.com</email>
      </address>
    </author>
    <author initials="W." surname="Cheng" fullname="Weiqiang Cheng">
      <organization>China Mobile</organization>
      <address>
        <postal>
          <country>China</country>
        </postal>
        <email>chengweiqiang@chinamobile.com</email>
      </address>
    </author>
    <author initials="H." surname="Huang" fullname="Hongyi Huang" role="editor">
      <organization>Huawei</organization>
      <address>
        <postal>
          <country>China</country>
        </postal>
        <email>hongyi.huang@huawei.com</email>
      </address>
    </author>
    <date year="2025" month="April" day="22"/>
    <area>Routing Area</area>
    <workgroup>SPRING Working Group</workgroup>
    <keyword>Service programming</keyword>
    <keyword>Compression</keyword>
    <abstract>
      <?line 58?>

<t>In SRv6, an SRv6 SID is a 128-bit value. When too many 128-bit SRv6 SIDs are included in an SRH, the introduced overhead will affect the transmission efficiency of payload. In order to address this problem, Compressed SID(CSID) is proposed. This document defines new behaviors for service segments with REPLACE-CSID and NEXT-CSID flavors to enable compressed SRv6 service programming.</t>
    </abstract>
  </front>
  <middle>
    <?line 62?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Segment Routing <xref target="RFC8402"/> is a source routing paradigm to support steering packets through a programmed path at the ingress node. Currently, two data planes are defined for Segment Routing: MPLS and IPv6. When IPv6 data plane is used in Segment Routing, it is called SRv6 <xref target="RFC8754"/> . <xref target="RFC8754"/> defines a new extension header in IPv6, called Segment Routing Header (SRH), to support SRv6. To support SRv6 network programming, <xref target="RFC8986"/> defines a framework to build a network program with topological and service segments carried in a Segment Routing header (SRH) <xref target="RFC8754"/>.</t>
      <t>A Service Function Chain (SFC) <xref target="RFC7665"/> defines an ordered set of abstract service functions and ordering constraints that must be applied to packets and/or frames and/or flows.</t>
      <t>A service function chain can be implemented by SRv6 by using a sequence of SRv6 SIDs including service segments defined in <xref target="I-D.ietf-spring-sr-service-programming"/>.</t>
      <t>However, when too many 128-bit SRv6 SIDs are included in an SRH, the overhead of the SRH will affect the transmission efficiency of the payload. <xref target="I-D.ietf-spring-compression-requirement"/> points out the problem of long SRv6 SID lists reduce payload efficiency. To mitigate such overhead, <xref target="I-D.ietf-spring-srv6-srh-compression"/> defines new flavors for basic SR endpoint behaviors defined in <xref target="RFC8986"/>. Using the new flavored behavior SID, a 128-bit SRv6 SID can be compressed to be an 32-bit or 16-bit Compressed SID (CSID), which reduces a lot of size of the SRv6 header.</t>
      <t>To enable SRv6 SID lists compression for service function chaining (SFC), this document defines new behaviors of service segments with flavors defined in <xref target="I-D.ietf-spring-srv6-srh-compression"/>.</t>
      <section anchor="requirements-language">
        <name>Requirements Language</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

</section>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>This document leverages the terms defined in <xref target="RFC8402"/>, <xref target="RFC8754"/>, <xref target="RFC8986"/>, <xref target="I-D.ietf-spring-srv6-srh-compression"/> and <xref target="I-D.ietf-spring-sr-service-programming"/>. The reader is assumed to be familiar with this terminology. This document does not introduce any new terms.</t>
      </section>
    </section>
    <section anchor="proxy_behaviors">
      <name>SR Proxy Behaviors</name>
      <t><xref target="I-D.ietf-spring-sr-service-programming"/> defines several SRv6 endpoint behaviors for service proxy segments. A service proxy segment ID is represented as an 128-bit value just like other SIDs defined in <xref target="RFC8986"/>. This section defines some new behaviors of those service proxy segments by combining the existing service proxy segment behaviors with CSID flavors, such as REPLACE-CSID flavor and NEXT-CSID flavor.</t>
      <t>The main difference between behaviors are the forwarding instructions. Therefore, when CSID compression mechanism applies to SR Proxy behaviors, the pseudo code of the new behaviors can be generated by updating the forwarding instructions of CSID to SR proxy forwarding instructions. The following sections define the details of the pseudo code of new behaviors.</t>
      <section anchor="static-sr-proxy">
        <name>Static SR Proxy</name>
        <t>In <xref target="I-D.ietf-spring-sr-service-programming"/>, an End.AS - Static proxy endpoint behavior is defined for the static SR proxy. According to the traffic type encapsulated in the SRv6 payload, the pseudo code of Ethernet, IPv4 and IPv6 is described as well in <xref target="I-D.ietf-spring-sr-service-programming"/>. This section defines the new behaviors of associate the NEXT-CSID and REPLACE-CSID Flavor to END.AS.</t>
        <section anchor="static-proxy-for-inner-type-ethernet">
          <name>Static Proxy for Inner Type Ethernet</name>
          <section anchor="replace-csid-flavor">
            <name>REPLACE-CSID Flavor</name>
            <t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an SRv6 static proxy SID with the REPLACE-CSID flavor (a.k.a End.AS with REPLACE-CSID) for Ethernet traffic, the procedure described in <xref section="4.2.1" sectionFormat="of" target="I-D.ietf-spring-srv6-srh-compression"/> is executed except for line R10 and R21 that are both replaced as follows.</t>
            <artwork><![CDATA[
P01.   If (Upper-layer header type != 143 (Ethernet)) {
P02.     Resubmit the packet to the IPv6 module for transmission to
           the new destination.
P03.   }
P04.   Perform IPv6 decapsulation.
P05.   Submit the frame to the Ethernet module for transmission via
         interface IFACE-OUT.
]]></artwork>
            <t>A rendering of the complete pseudocode is provided in <xref target="static-eth-replace-code"/>.</t>
            <t>The upper-layer header processing is unchanged as per <xref section="6.1.2.1" sectionFormat="of" target="I-D.ietf-spring-sr-service-programming"/>.</t>
            <t>When processing an Ethernet frame received on the interface IFACE-IN and with a destination MAC address that is neither a broadcast address nor matches the address of IFACE-IN, as per <xref section="6.1.2.1" sectionFormat="of" target="I-D.ietf-spring-sr-service-programming"/>.</t>
          </section>
          <section anchor="next-csid-flavor">
            <name>NEXT-CSID Flavor</name>
            <t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an SRv6 static proxy SID with the NEXT-CSID flavor (a.k.a End.AS with NEXT-CSID) for Ethernet traffic, the procedure described in <xref section="4.1.1" sectionFormat="of" target="I-D.ietf-spring-srv6-srh-compression"/> is executed except for line N08 of that and line S15 of <xref section="4.1" sectionFormat="of" target="RFC8986"/> that are both replaced as follows.</t>
            <artwork><![CDATA[
Q01.   If (Upper-layer header type != 143 (Ethernet)) {
Q02.     Resubmit the packet to the IPv6 module for transmission to
           the new destination.
Q03.   }
Q04.   Perform IPv6 decapsulation.
Q05.   Submit the frame to the Ethernet module for transmission via
         interface IFACE-OUT.
]]></artwork>
            <t>A rendering of the complete pseudocode is provided in <xref target="static-eth-next-code"/>.</t>
            <t>The upper-layer header processing is unchanged as per <xref section="6.1.2.1" sectionFormat="of" target="I-D.ietf-spring-sr-service-programming"/>.</t>
            <t>When processing an Ethernet frame received on the interface IFACE-IN and with a destination MAC address that is neither a broadcast address nor matches the address of IFACE-IN, as per <xref section="6.1.2.1" sectionFormat="of" target="I-D.ietf-spring-sr-service-programming"/>.</t>
          </section>
        </section>
        <section anchor="static-proxy-for-inner-type-ipv4">
          <name>Static Proxy for Inner Type IPv4</name>
          <section anchor="replace-csid-flavor-1">
            <name>REPLACE-CSID Flavor</name>
            <t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an SRv6 static proxy SID with the REPLACE-CSID flavor (a.k.a End.AS with REPLACE-CSID) for IPv4 traffic, the procedure described in <xref section="4.2.1" sectionFormat="of" target="I-D.ietf-spring-srv6-srh-compression"/> is executed except for line R10 and R21 that are both replaced as follows.</t>
            <artwork><![CDATA[
P01.   If (Upper-layer header type != 4 (IPv4)) {
P02.     Resubmit the packet to the IPv6 module for transmission to
           the new destination.
P03.   }
P04.   Perform IPv6 decapsulation.
P05.   Submit the packet to the IPv4 module for transmission on
         interface IFACE-OUT via NH-ADDR.
]]></artwork>
            <t>A rendering of the complete pseudocode is provided in <xref target="static-ipv4-replace-code"/>.</t>
            <t>The upper-layer header processing is unchanged as per <xref section="6.1.2.2" sectionFormat="of" target="I-D.ietf-spring-sr-service-programming"/>.</t>
            <t>When processing an IPv4 packet received on the interface IFACE-IN and with a destination address that does not match any address of IFACE-IN, as per <xref section="6.1.2.2" sectionFormat="of" target="I-D.ietf-spring-sr-service-programming"/>.</t>
          </section>
          <section anchor="next-csid-flavor-1">
            <name>NEXT-CSID Flavor</name>
            <t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an SRv6 static proxy SID with the NEXT-CSID flavor (a.k.a End.AS with NEXT-CSID) for IPv4 traffic, the procedure described in <xref section="4.1.1" sectionFormat="of" target="I-D.ietf-spring-srv6-srh-compression"/> is executed except for line N08 of that and line S15 of <xref section="4.1" sectionFormat="of" target="RFC8986"/> that are both replaced as follows.</t>
            <artwork><![CDATA[
Q01.   If (Upper-layer header type != 4 (IPv4)) {
Q02.     Resubmit the packet to the IPv6 module for transmission to
           the new destination.
Q03.   }
Q04.   Perform IPv6 decapsulation.
Q05.   Submit the packet to the IPv4 module for transmission on
         interface IFACE-OUT via NH-ADDR.
]]></artwork>
            <t>A rendering of the complete pseudocode is provided in <xref target="static-ipv4-next-code"/>.</t>
            <t>The upper-layer header processing is unchanged as per <xref section="6.1.2.2" sectionFormat="of" target="I-D.ietf-spring-sr-service-programming"/>.</t>
            <t>When processing an IPv4 packet received on the interface IFACE-IN and with a destination address that does not match any address of IFACE-IN, as per <xref section="6.1.2.2" sectionFormat="of" target="I-D.ietf-spring-sr-service-programming"/>.</t>
          </section>
        </section>
        <section anchor="static-proxy-for-inner-type-ipv6">
          <name>Static Proxy for Inner Type IPv6</name>
          <section anchor="replace-csid-flavor-2">
            <name>REPLACE-CSID Flavor</name>
            <t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an SRv6 static proxy SID with the REPLACE-CSID flavor (a.k.a End.AS with REPLACE-CSID) for IPv6 traffic, the procedure described in <xref section="4.2.1" sectionFormat="of" target="I-D.ietf-spring-srv6-srh-compression"/> is executed except for line R10 and R21 that are both replaced as follows.</t>
            <artwork><![CDATA[
P01.   If (Upper-layer header type != 41 (IPv6)) {
P02.     Resubmit the packet to the IPv6 module for transmission to
           the new destination.
P03.   }
P04.   Perform IPv6 decapsulation.
P05.   Submit the packet to the IPv6 module for transmission on
         interface IFACE-OUT via NH-ADDR.
]]></artwork>
            <t>A rendering of the complete pseudocode is provided in <xref target="static-ipv6-replace-code"/>.</t>
            <t>The upper-layer header processing is unchanged as per <xref section="6.1.2.3" sectionFormat="of" target="I-D.ietf-spring-sr-service-programming"/>.</t>
            <t>When processing an IPv6 packet received on the interface IFACE-IN and with a destination address that does not match any address of IFACE-IN, as per <xref section="6.1.2.3" sectionFormat="of" target="I-D.ietf-spring-sr-service-programming"/>.</t>
          </section>
          <section anchor="next-csid-flavor-2">
            <name>NEXT-CSID Flavor</name>
            <t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an SRv6 static proxy SID with the NEXT-CSID flavor (a.k.a End.AS with NEXT-CSID) for IPv6 traffic, the procedure described in <xref section="4.1.1" sectionFormat="of" target="I-D.ietf-spring-srv6-srh-compression"/> is executed except for line N08 of that and line S15 of <xref section="4.1" sectionFormat="of" target="RFC8986"/> that are both replaced as follows.</t>
            <artwork><![CDATA[
Q01.   If (Upper-layer header type != 41 (IPv6)) {
Q02.     Resubmit the packet to the IPv6 module for transmission to
           the new destination.
Q03.   }
Q04.   Perform IPv6 decapsulation.
Q05.   Submit the packet to the IPv6 module for transmission on
         interface IFACE-OUT via NH-ADDR.
]]></artwork>
            <t>A rendering of the complete pseudocode is provided in <xref target="static-ipv6-next-code"/>.</t>
            <t>The upper-layer header processing is unchanged as per <xref section="6.1.2.3" sectionFormat="of" target="I-D.ietf-spring-sr-service-programming"/>.</t>
            <t>When processing an IPv6 packet received on the interface IFACE-IN and with a destination address that does not match any address of IFACE-IN, as per <xref section="6.1.2.3" sectionFormat="of" target="I-D.ietf-spring-sr-service-programming"/>.</t>
          </section>
        </section>
      </section>
      <section anchor="dynamic-sr-proxy">
        <name>Dynamic SR Proxy</name>
        <t>In <xref target="I-D.ietf-spring-sr-service-programming"/>, an End.AD - Dynamic proxy endpoint behavior is defined for the dynamic SR proxy. According to the traffic type encapsulated in the SRv6 payload, the pseudo code of Ethernet, IPv4 and IPv6 is described as well in <xref target="I-D.ietf-spring-sr-service-programming"/>. This section defines the new behaviors of associate the NEXT-CSID and REPLACE-CSID Flavor to END.AD.</t>
        <section anchor="dynamic-proxy-for-inner-type-ethernet">
          <name>Dynamic Proxy for Inner Type Ethernet</name>
          <section anchor="replace-csid-flavor-3">
            <name>REPLACE-CSID Flavor</name>
            <t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an SRv6 dynamic proxy SID with the REPLACE-CSID flavor (a.k.a End.AD with REPLACE-CSID) for Ethernet traffic, the procedure described in <xref section="4.2.1" sectionFormat="of" target="I-D.ietf-spring-srv6-srh-compression"/> is executed except for line R10 and R21 that are both replaced as follows.</t>
            <artwork><![CDATA[
P01.   If (Upper-layer header type != 143 (Ethernet)) {
P02.     Resubmit the packet to the IPv6 module for transmission to
           the new destination.
P03.   }
P04.   Copy the IPv6 encapsulation in a CACHE entry associated with
            the interface IFACE-IN.
P05.   Perform IPv6 decapsulation.
P06.   Submit the frame to the Ethernet module for transmission via
         interface IFACE-OUT.
]]></artwork>
            <t>A rendering of the complete pseudocode is provided in <xref target="dynamic-eth-replace-code"/>.</t>
            <t>The upper-layer header processing is unchanged as per <xref section="6.2.2" sectionFormat="of" target="I-D.ietf-spring-sr-service-programming"/>.</t>
            <t>When processing an Ethernet frame received on the interface IFACE-IN and with a destination MAC address that is neither a broadcast address nor matches the address of IFACE-IN, as per <xref section="6.2.2" sectionFormat="of" target="I-D.ietf-spring-sr-service-programming"/>.</t>
          </section>
          <section anchor="next-csid-flavor-3">
            <name>NEXT-CSID Flavor</name>
            <t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an SRv6 dynamic proxy SID with the NEXT-CSID flavor (a.k.a End.AD with NEXT-CSID) for Ethernet traffic, the procedure described in <xref section="4.1.1" sectionFormat="of" target="I-D.ietf-spring-srv6-srh-compression"/> is executed except for line N08 of that and line S15 of <xref section="4.1" sectionFormat="of" target="RFC8986"/> that are both replaced as follows.</t>
            <artwork><![CDATA[
Q01.   If (Upper-layer header type != 143 (Ethernet)) {
Q02.     Resubmit the packet to the IPv6 module for transmission to
           the new destination.
Q03.   }
Q04.   Copy the IPv6 encapsulation in a CACHE entry associated with
            the interface IFACE-IN.
Q05.   Perform IPv6 decapsulation.
Q06.   Submit the frame to the Ethernet module for transmission via
         interface IFACE-OUT.
]]></artwork>
            <t>A rendering of the complete pseudocode is provided in <xref target="dynamic-eth-next-code"/>.</t>
            <t>The upper-layer header processing is unchanged as per <xref section="6.2.2" sectionFormat="of" target="I-D.ietf-spring-sr-service-programming"/>.</t>
            <t>When processing an Ethernet frame received on the interface IFACE-IN and with a destination MAC address that is neither a broadcast address nor matches the address of IFACE-IN, as per <xref section="6.2.2" sectionFormat="of" target="I-D.ietf-spring-sr-service-programming"/>.</t>
          </section>
        </section>
        <section anchor="dynamic-proxy-for-inner-type-ipv4">
          <name>Dynamic Proxy for Inner Type IPv4</name>
          <section anchor="replace-csid-flavor-4">
            <name>REPLACE-CSID Flavor</name>
            <t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an SRv6 dynamic proxy SID with the REPLACE-CSID flavor (a.k.a End.AD with REPLACE-CSID) for IPv4 traffic, the procedure described in <xref section="4.2.1" sectionFormat="of" target="I-D.ietf-spring-srv6-srh-compression"/> is executed except for line R10 and R21 that are both replaced as follows.</t>
            <artwork><![CDATA[
P01.   If (Upper-layer header type != 4 (IPv4)) {
P02.     Resubmit the packet to the IPv6 module for transmission to
           the new destination.
P03.   }
P04.   Copy the IPv6 encapsulation in a CACHE entry associated with
            the interface IFACE-IN.
P05.   Perform IPv6 decapsulation.
P06.   Submit the frame to the IPv4 module for transmission via
         interface IFACE-OUT via NH-ADDR.
]]></artwork>
            <t>A rendering of the complete pseudocode is provided in <xref target="dynamic-ipv4-replace-code"/>.</t>
            <t>The upper-layer header processing is unchanged as per <xref section="6.2.2" sectionFormat="of" target="I-D.ietf-spring-sr-service-programming"/>.</t>
            <t>When processing an IPv4 packet received on the interface IFACE-IN and with a destination address that does not match any address of IFACE-IN, as per <xref section="6.2.2" sectionFormat="of" target="I-D.ietf-spring-sr-service-programming"/>.</t>
          </section>
          <section anchor="next-csid-flavor-4">
            <name>NEXT-CSID Flavor</name>
            <t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an SRv6 dynamic proxy SID with the NEXT-CSID flavor (a.k.a End.AD with NEXT-CSID) for IPv4 traffic, the procedure described in <xref section="4.1.1" sectionFormat="of" target="I-D.ietf-spring-srv6-srh-compression"/> is executed except for line N08 of that and line S15 of <xref section="4.1" sectionFormat="of" target="RFC8986"/> that are both replaced as follows.</t>
            <artwork><![CDATA[
Q01. If (Upper-layer header type != 4 (IPv4)) {
Q02.   Resubmit the packet to the IPv6 module for transmission to
        the new destination.
Q03. }
Q04. Copy the IPv6 encapsulation in a CACHE entry associated with
        the interface IFACE-IN.
Q05. Perform IPv6 decapsulation.
Q06. Submit the frame to the IPv4 module for transmission via
      interface IFACE-OUT via NH-ADDR.
]]></artwork>
            <t>A rendering of the complete pseudocode is provided in <xref target="dynamic-ipv4-next-code"/>.</t>
            <t>The upper-layer header processing is unchanged as per <xref section="6.2.2" sectionFormat="of" target="I-D.ietf-spring-sr-service-programming"/>.</t>
            <t>When processing an IPv4 packet received on the interface IFACE-IN and with a destination address that does not match any address of IFACE-IN, as per <xref section="6.2.2" sectionFormat="of" target="I-D.ietf-spring-sr-service-programming"/>.</t>
          </section>
        </section>
        <section anchor="dynamic-proxy-for-inner-type-ipv6">
          <name>Dynamic Proxy for Inner Type IPv6</name>
          <section anchor="replace-csid-flavor-5">
            <name>REPLACE-CSID Flavor</name>
            <t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an SRv6 dynamic proxy SID with the REPLACE-CSID flavor (a.k.a End.AD with REPLACE-CSID) for IPv6 traffic, the procedure described in <xref section="4.2.1" sectionFormat="of" target="I-D.ietf-spring-srv6-srh-compression"/> is executed except for line R10 and R21 that are both replaced as follows.</t>
            <artwork><![CDATA[
P01. If (Upper-layer header type != 41 (IPv6)) {
P02.   Resubmit the packet to the IPv6 module for transmission to
        the new destination.
P03. }
P04. Copy the IPv6 encapsulation in a CACHE entry associated with
        the interface IFACE-IN.
P05. Perform IPv6 decapsulation.
P06. Submit the frame to the IPv6 module for transmission via
      interface IFACE-OUT via NH-ADDR.
]]></artwork>
            <t>A rendering of the complete pseudocode is provided in <xref target="dynamic-ipv6-replace-code"/>.</t>
            <t>The upper-layer header processing is unchanged as per <xref section="6.2.2" sectionFormat="of" target="I-D.ietf-spring-sr-service-programming"/>.</t>
            <t>When processing an IPv6 packet received on the interface IFACE-IN and with a destination address that does not match any address of IFACE-IN, as per <xref section="6.2.2" sectionFormat="of" target="I-D.ietf-spring-sr-service-programming"/>.</t>
          </section>
          <section anchor="next-csid-flavor-5">
            <name>NEXT-CSID Flavor</name>
            <t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an SRv6 dynamic proxy SID with the NEXT-CSID flavor (a.k.a End.AD with NEXT-CSID) for IPv6 traffic, the procedure described in <xref section="4.1.1" sectionFormat="of" target="I-D.ietf-spring-srv6-srh-compression"/> is executed except for line N08 of that and line S15 of <xref section="4.1" sectionFormat="of" target="RFC8986"/> that are both replaced as follows.</t>
            <artwork><![CDATA[
Q01. If (Upper-layer header type != 41 (IPv6)) {
Q02.   Resubmit the packet to the IPv6 module for transmission to
        the new destination.
Q03. }
Q04. Copy the IPv6 encapsulation in a CACHE entry associated with
        the interface IFACE-IN.
Q05. Perform IPv6 decapsulation.
Q06. Submit the frame to the IPv6 module for transmission via
      interface IFACE-OUT via NH-ADDR.
]]></artwork>
            <t>A rendering of the complete pseudocode is provided in <xref target="dynamic-ipv6-next-code"/>.</t>
            <t>The upper-layer header processing is unchanged as per <xref section="6.2.2" sectionFormat="of" target="I-D.ietf-spring-sr-service-programming"/>.</t>
            <t>When processing an IPv6 packet received on the interface IFACE-IN and with a destination address that does not match any address of IFACE-IN, as per <xref section="6.2.2" sectionFormat="of" target="I-D.ietf-spring-sr-service-programming"/>.</t>
          </section>
        </section>
      </section>
      <section anchor="shared-memory-sr-proxy">
        <name>Shared Memory SR Proxy</name>
        <t>This document does not need to define new flavors for shared proxy behavior as the processing will be executed by using the shared memory <xref section="6.3" sectionFormat="of" target="I-D.ietf-spring-sr-service-programming"/>.</t>
      </section>
      <section anchor="mas_proxy">
        <name>Masquerading SR Proxy</name>
        <t>As per <xref target="I-D.ietf-spring-sr-service-programming"/>, when forwarding packets to SR-unaware SFs, masquerading SR proxy sets the destination address of the IPv6 header as segment list[0] which is the original final destination address. When receiving the traffic returning from the service, de-masquerading sets the destination address as segment list[Segment Left].</t>
        <t>To be consistent with the behavior of masquerading proxy, it's required that any segment list containing one or more masquerading proxy CSID <bcp14>MUST NOT</bcp14> apply any compression encoding to the last segment (segment list[0]).</t>
        <t>Note: The service receiving an IPv6 packet from the proxy uses the destination address (copied from last segment) as final destination and could apply certain actions based on that. In order to process and forward packets correctly, it is required that the last segment not be compressed.</t>
        <t>To be consistent with the behavior of masquerading proxy, when processing an IPv6 packet matching a FIB entry locally instantiated as an SRv6 masquerading CSID, it's required that the updated destination address <bcp14>MUST</bcp14> be cached in the proxy by adding a dynamic caching mechanism similar to the one described in <xref section="6.2" sectionFormat="of" target="I-D.ietf-spring-sr-service-programming"/> in case that segment list[Segment Left] is a compressed SID.</t>
        <t>When processing an IPv6 packet received on the interface IFACE-IN and with a destination address that does not match any address of IFACE-IN, the destination address <bcp14>MUST</bcp14> be recovered from CACHE in case that segment list[Segment Left] could be a CSID container.</t>
        <section anchor="srv6-masquerading-proxy-pseudocode">
          <name>SRv6 Masquerading Proxy Pseudocode</name>
          <t>In <xref target="I-D.ietf-spring-sr-service-programming"/>, an End.AM - Masquerading proxy endpoint behavior is defined for the Masquerading SR proxy. According to the traffic type encapsulated in the SRv6 payload, the pseudo code of Ethernet, IPv4 and IPv6 is described as well in <xref target="I-D.ietf-spring-sr-service-programming"/>. This section defines the new behaviors of associate the NEXT-CSID and REPLACE-CSID Flavor to END.AM.</t>
          <section anchor="replace-csid-flavor-6">
            <name>REPLACE-CSID Flavor</name>
            <t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an SRv6 masquerading proxy SID with the REPLACE-CSID flavor (a.k.a End.AM with REPLACE-CSID), the procedure described in Figure 23 from <xref section="4.2.1" sectionFormat="of" target="I-D.ietf-spring-srv6-srh-compression"/> is executed except for line R10 and R21 that are both replaced as follows.</t>
            <artwork><![CDATA[
P01. Copy the IPv6 Destination Address in a CACHE entry associated 
      with the interface IFACE-IN.
P02. Copy Segment List[0] from the SRH to the Destination Address
      of the IPv6 header.
P03. Submit the packet to the IPv6 module for transmission on
      interface IFACE-OUT via NH-ADDR.
]]></artwork>
            <t>A rendering of the complete pseudocode is provided in <xref target="srv6-masquerading-replace-code"/>.</t>
            <t><strong>De-masquerading</strong>: When processing an IPv6 packet received on the interface IFACE-IN and with a destination address that does not match any address of IFACE-IN, the procedure described in Figure 24 from <xref section="6.4.1" sectionFormat="of" target="I-D.ietf-spring-sr-service-programming"/> is executed except for line S10 that is replaced as follows.</t>
            <artwork><![CDATA[
D01. Retrieve the CACHE entry associated with IFACE-IN.
D02. If the CACHE entry is not empty {
D03.    Destination Address of the IPv6 header is set to CACHE.
D04. }
]]></artwork>
            <t>A rendering of the complete pseudocode is provided in <xref target="srv6-de-masquerading-replace-code"/>.</t>
          </section>
          <section anchor="next-csid-flavor-6">
            <name>NEXT-CSID Flavor</name>
            <t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an SRv6 masquerading proxy SID with the NEXT-CSID flavor (a.k.a End.AM with NEXT-CSID), the procedure described in <xref section="4.1.1" sectionFormat="of" target="I-D.ietf-spring-srv6-srh-compression"/> is executed except for line N08 of that and line S15 of <xref section="4.1" sectionFormat="of" target="RFC8986"/> that are both replaced as follows.</t>
            <artwork><![CDATA[
Q01. Copy the IPv6 Destination Address in a CACHE entry associated 
      with the interface IFACE-IN.
Q02. Copy Segment List[0] from the SRH to the Destination Address
      of the IPv6 header.
Q03. Submit the packet to the IPv6 module for transmission on
      interface IFACE-OUT via NH-ADDR.
]]></artwork>
            <t>A rendering of the complete pseudocode is provided in <xref target="srv6-masquerading-next-code"/>}.</t>
            <t><strong>De-masquerading</strong>: When processing an IPv6 packet received on the interface IFACE-IN and with a destination address that does not match any address of IFACE-IN, the procedure described in <xref section="6.4.1" sectionFormat="of" target="I-D.ietf-spring-sr-service-programming"/> is executed except for line S10 that is replaced as follows.</t>
            <artwork><![CDATA[
E01. Retrieve the CACHE entry associated with IFACE-IN.
E02. If the CACHE entry is not empty {
E03.    Destination Address of the IPv6 header is set to CACHE.
E04. }
]]></artwork>
            <t>A rendering of the complete pseudocode is provided in <xref target="srv6-de-masquerading-next-code"/>.</t>
          </section>
        </section>
        <section anchor="destination-nat-flavor">
          <name>Destination NAT Flavor</name>
          <section anchor="replace-csid-flavor-7">
            <name>REPLACE-CSID Flavor</name>
            <t>The Destination NAT flavor of the SRv6 masquerading proxy with the REPLACE-CSID (a.k.a End.AM- Masquerading proxy with NAT with REPLACE-CSID, End.AMN with REPLACE-CSID for short) is executed except for line S09.1 and S10 in <xref section="6.4.2" sectionFormat="of" target="I-D.ietf-spring-sr-service-programming"/> replaced as follows.</t>
            <artwork><![CDATA[
P01. Copy the Destination Address of the IPv6 header to the
      Segment List[0] entry of the SRH.
P02. Retrieve the CACHE entry associated with IFACE-IN.
P03. If the CACHE entry is not empty {
P04.    Destination Address of the IPv6 header is set to CACHE.
P05. }
]]></artwork>
            <t>A rendering of the complete pseudocode is provided in <xref target="nat-replace-code"/>.</t>
          </section>
          <section anchor="next-csid-flavor-7">
            <name>NEXT-CSID Flavor</name>
            <t>The Destination NAT flavor of the SRv6 masquerading proxy with the NEXT-CSID (a.k.a End.AM- Masquerading proxy with NAT with NEXT-CSID, End.AMN with NEXT-CSID for short) is executed except for line S09.1 and S10 in <xref section="6.4.2" sectionFormat="of" target="I-D.ietf-spring-sr-service-programming"/> replaced as follows.</t>
            <artwork><![CDATA[
Q01. Copy the Destination Address of the IPv6 header to the
      Segment List[0] entry of the SRH.
Q02. Retrieve the CACHE entry associated with IFACE-IN.
Q03. If the CACHE entry is not empty {
Q04.    Destination Address of the IPv6 header is set to CACHE.
Q05. }
]]></artwork>
            <t>A rendering of the complete pseudocode is provided in <xref target="nat-next-code"/>.</t>
          </section>
        </section>
        <section anchor="cache-flavor">
          <name>Cache Flavor</name>
          <t>The caching flavor of the SRv6 masquerading proxy with CSID is enabled as per <xref section="6.4.3" sectionFormat="of" target="I-D.ietf-spring-sr-service-programming"/> without any modification.</t>
        </section>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The security requirements and mechanisms described in <xref target="RFC8402"/> and <xref target="RFC8754"/> also apply to this document.</t>
      <t>This document does not introduce any new security considerations.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="srv6-endpoint-behaviors">
        <name>SRv6 Endpoint Behaviors</name>
        <t>This document requests the IANA to allocate, within the "SRv6 Endpoint Behaviors" sub-registry belonging to the top-level "Segment-routing with IPv6 dataplane (SRv6) Parameters" registry, the following allocations:</t>
        <artwork><![CDATA[
Value      Description                               Reference
--------------------------------------------------------------
180        End.AS with REPLACE-CSID                  [This.ID]
181        End.AS with NEXT-CSID                     [This.ID]
182        End.AD with REPLACE-CSID                  [This.ID]
183        End.AD with NEXT-CSID                     [This.ID]
184        End.AM with REPLACE-CSID                  [This.ID]
185        End.AM with NEXT-CSID                     [This.ID]
186        End.AMN with REPLACE-CSID                 [This.ID]
187        End.AMN with NEXT-CSID                    [This.ID]
]]></artwork>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8402">
          <front>
            <title>Segment Routing Architecture</title>
            <author fullname="C. Filsfils" initials="C." role="editor" surname="Filsfils"/>
            <author fullname="S. Previdi" initials="S." role="editor" surname="Previdi"/>
            <author fullname="L. Ginsberg" initials="L." surname="Ginsberg"/>
            <author fullname="B. Decraene" initials="B." surname="Decraene"/>
            <author fullname="S. Litkowski" initials="S." surname="Litkowski"/>
            <author fullname="R. Shakir" initials="R." surname="Shakir"/>
            <date month="July" year="2018"/>
            <abstract>
              <t>Segment Routing (SR) leverages the source routing paradigm. A node steers a packet through an ordered list of instructions, called "segments". A segment can represent any instruction, topological or service based. A segment can have a semantic local to an SR node or global within an SR domain. SR provides a mechanism that allows a flow to be restricted to a specific topological path, while maintaining per-flow state only at the ingress node(s) to the SR domain.</t>
              <t>SR can be directly applied to the MPLS architecture with no change to the forwarding plane. A segment is encoded as an MPLS label. An ordered list of segments is encoded as a stack of labels. The segment to process is on the top of the stack. Upon completion of a segment, the related label is popped from the stack.</t>
              <t>SR can be applied to the IPv6 architecture, with a new type of routing header. A segment is encoded as an IPv6 address. An ordered list of segments is encoded as an ordered list of IPv6 addresses in the routing header. The active segment is indicated by the Destination Address (DA) of the packet. The next active segment is indicated by a pointer in the new routing header.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8402"/>
          <seriesInfo name="DOI" value="10.17487/RFC8402"/>
        </reference>
        <reference anchor="RFC8754">
          <front>
            <title>IPv6 Segment Routing Header (SRH)</title>
            <author fullname="C. Filsfils" initials="C." role="editor" surname="Filsfils"/>
            <author fullname="D. Dukes" initials="D." role="editor" surname="Dukes"/>
            <author fullname="S. Previdi" initials="S." surname="Previdi"/>
            <author fullname="J. Leddy" initials="J." surname="Leddy"/>
            <author fullname="S. Matsushima" initials="S." surname="Matsushima"/>
            <author fullname="D. Voyer" initials="D." surname="Voyer"/>
            <date month="March" year="2020"/>
            <abstract>
              <t>Segment Routing can be applied to the IPv6 data plane using a new type of Routing Extension Header called the Segment Routing Header (SRH). This document describes the SRH and how it is used by nodes that are Segment Routing (SR) capable.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8754"/>
          <seriesInfo name="DOI" value="10.17487/RFC8754"/>
        </reference>
        <reference anchor="RFC8986">
          <front>
            <title>Segment Routing over IPv6 (SRv6) Network Programming</title>
            <author fullname="C. Filsfils" initials="C." role="editor" surname="Filsfils"/>
            <author fullname="P. Camarillo" initials="P." role="editor" surname="Camarillo"/>
            <author fullname="J. Leddy" initials="J." surname="Leddy"/>
            <author fullname="D. Voyer" initials="D." surname="Voyer"/>
            <author fullname="S. Matsushima" initials="S." surname="Matsushima"/>
            <author fullname="Z. Li" initials="Z." surname="Li"/>
            <date month="February" year="2021"/>
            <abstract>
              <t>The Segment Routing over IPv6 (SRv6) Network Programming framework enables a network operator or an application to specify a packet processing program by encoding a sequence of instructions in the IPv6 packet header.</t>
              <t>Each instruction is implemented on one or several nodes in the network and identified by an SRv6 Segment Identifier in the packet.</t>
              <t>This document defines the SRv6 Network Programming concept and specifies the base set of SRv6 behaviors that enables the creation of interoperable overlays with underlay optimization.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8986"/>
          <seriesInfo name="DOI" value="10.17487/RFC8986"/>
        </reference>
        <reference anchor="I-D.ietf-spring-srv6-srh-compression">
          <front>
            <title>Compressed SRv6 Segment List Encoding (CSID)</title>
            <author fullname="Weiqiang Cheng" initials="W." surname="Cheng">
              <organization>China Mobile</organization>
            </author>
            <author fullname="Clarence Filsfils" initials="C." surname="Filsfils">
              <organization>Cisco Systems, Inc.</organization>
            </author>
            <author fullname="Zhenbin Li" initials="Z." surname="Li">
              <organization>Huawei Technologies</organization>
            </author>
            <author fullname="Bruno Decraene" initials="B." surname="Decraene">
              <organization>Orange</organization>
            </author>
            <author fullname="Francois Clad" initials="F." surname="Clad">
              <organization>Cisco Systems, Inc.</organization>
            </author>
            <date day="6" month="February" year="2025"/>
            <abstract>
              <t>   Segment Routing over IPv6 (SRv6) is the instantiation of Segment
   Routing (SR) on the IPv6 dataplane.  This document specifies new
   flavors for the SRv6 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.

   This document updates RFC 8754 by allowing a Segment List entry in
   the Segment Routing Header (SRH) to be either an IPv6 address, as
   specified in RFC 8754, or a REPLACE-CSID container in packed format,
   as specified in this document.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-spring-srv6-srh-compression-23"/>
        </reference>
        <reference anchor="I-D.ietf-spring-sr-service-programming">
          <front>
            <title>Service Programming with Segment Routing</title>
            <author fullname="Francois Clad" initials="F." surname="Clad">
              <organization>Cisco Systems, Inc.</organization>
            </author>
            <author fullname="Xiaohu Xu" initials="X." surname="Xu">
              <organization>China Mobile</organization>
            </author>
            <author fullname="Clarence Filsfils" initials="C." surname="Filsfils">
              <organization>Cisco Systems, Inc.</organization>
            </author>
            <author fullname="Daniel Bernier" initials="D." surname="Bernier">
              <organization>Bell Canada</organization>
            </author>
            <author fullname="Cheng Li" initials="C." surname="Li">
              <organization>Huawei</organization>
            </author>
            <author fullname="Bruno Decraene" initials="B." surname="Decraene">
              <organization>Orange</organization>
            </author>
            <author fullname="Shaowen Ma" initials="S." surname="Ma">
              <organization>Mellanox</organization>
            </author>
            <author fullname="Chaitanya Yadlapalli" initials="C." surname="Yadlapalli">
              <organization>AT&amp;T</organization>
            </author>
            <author fullname="Wim Henderickx" initials="W." surname="Henderickx">
              <organization>Nokia</organization>
            </author>
            <author fullname="Stefano Salsano" initials="S." surname="Salsano">
              <organization>Universita di Roma "Tor Vergata"</organization>
            </author>
            <date day="23" month="February" year="2025"/>
            <abstract>
              <t>   This document defines data plane functionality required to implement
   service segments and achieve service programming in SR-enabled MPLS
   and IPv6 networks, as described in the Segment Routing architecture.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-spring-sr-service-programming-11"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC7665">
          <front>
            <title>Service Function Chaining (SFC) Architecture</title>
            <author fullname="J. Halpern" initials="J." role="editor" surname="Halpern"/>
            <author fullname="C. Pignataro" initials="C." role="editor" surname="Pignataro"/>
            <date month="October" year="2015"/>
            <abstract>
              <t>This document describes an architecture for the specification, creation, and ongoing maintenance of Service Function Chains (SFCs) in a network. It includes architectural concepts, principles, and components used in the construction of composite services through deployment of SFCs, with a focus on those to be standardized in the IETF. This document does not propose solutions, protocols, or extensions to existing protocols.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7665"/>
          <seriesInfo name="DOI" value="10.17487/RFC7665"/>
        </reference>
        <reference anchor="I-D.ietf-spring-compression-requirement">
          <front>
            <title>Compressed SRv6 SID List Requirements</title>
            <author fullname="Weiqiang Cheng" initials="W." surname="Cheng">
              <organization>China Mobile</organization>
            </author>
            <author fullname="Chongfeng Xie" initials="C." surname="Xie">
              <organization>China Telecom</organization>
            </author>
            <author fullname="Ron Bonica" initials="R." surname="Bonica">
              <organization>Juniper</organization>
            </author>
            <author fullname="Darren Dukes" initials="D." surname="Dukes">
              <organization>Cisco Systems</organization>
            </author>
            <author fullname="Cheng Li" initials="C." surname="Li">
              <organization>Huawei</organization>
            </author>
            <author fullname="Shaofu Peng" initials="S." surname="Peng">
              <organization>ZTE</organization>
            </author>
            <author fullname="Wim Henderickx" initials="W." surname="Henderickx">
              <organization>Nokia</organization>
            </author>
            <date day="3" month="April" year="2023"/>
            <abstract>
              <t>   This document specifies requirements for solutions to compress SRv6
   SID lists.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-spring-compression-requirement-03"/>
        </reference>
      </references>
    </references>
    <?line 561?>

<section anchor="complete-pseudocodes">
      <name>Complete Pseudocodes</name>
      <section anchor="static-eth-replace-code">
        <name>REPLACE-CSID Flavor for Static Proxy for Inner Type Ethernet</name>
        <t>When processing the SRH of a packet matching a FIB entry locally instantiated as an SRv6 static proxy SID with the REPLACE-CSID flavor for Ethernet traffic:</t>
        <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]
P01.       If (Upper-layer header type != 143 (Ethernet)) {
P02.         Resubmit the packet to the IPv6 module for    
                transmission to the new destination.
P03.       }
P04.       Perform IPv6 decapsulation.
P05.       Submit the frame to the Ethernet module for transmission
             via interface IFACE-OUT.
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.
P01.   If (Upper-layer header type != 143 (Ethernet)) {
P02.     Resubmit the packet to the IPv6 module for transmission to
           the new destination.
P03.   }
P04.   Perform IPv6 decapsulation.
P05.   Submit the frame to the Ethernet module for transmission via
         interface IFACE-OUT.
S16. }
]]></artwork>
      </section>
      <section anchor="static-eth-next-code">
        <name>NEXT-CSID Flavor for Static Proxy for Inner Type Ethernet</name>
        <t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an SRv6 static proxy SID with the NEXT-CSID flavor for Ethernet traffic:</t>
        <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.
Q01.   If (Upper-layer header type != 143 (Ethernet)) {
Q02.     Resubmit the packet to the IPv6 module for transmission to
           the new destination.
Q03.   }
Q04.   Perform IPv6 decapsulation.
Q05.   Submit the frame to the Ethernet module for transmission via
           interface IFACE-OUT.
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].
Q01. If (Upper-layer header type != 143 (Ethernet)) {
Q02.   Resubmit the packet to the IPv6 module for transmission to
         the new destination.
Q03. }
Q04. Perform IPv6 decapsulation.
Q05. Submit the frame to the Ethernet module for transmission via
        interface IFACE-OUT.
]]></artwork>
      </section>
      <section anchor="static-ipv4-replace-code">
        <name>REPLACE-CSID Flavor for Static Proxy for Inner Type IPv4</name>
        <t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an SRv6 static proxy SID with the REPLACE-CSID flavor for IPv4 traffic:</t>
        <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]
P01.       If (Upper-layer header type != 4 (IPv4)) {
P02.         Resubmit the packet to the IPv6 module for transmission
               to the new destination.
P03.       }
P04.       Perform IPv6 decapsulation.
P05.       Submit the packet to the IPv4 module for transmission on
             interface IFACE-OUT via NH-ADDR.
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.
P01.   If (Upper-layer header type != 4 (IPv4)) {
P02.     Resubmit the packet to the IPv6 module for transmission to
           the new destination.
P03.   }
P04.   Perform IPv6 decapsulation.
P05.   Submit the packet to the IPv4 module for transmission on
         interface IFACE-OUT via NH-ADDR.
S16. }
]]></artwork>
      </section>
      <section anchor="static-ipv4-next-code">
        <name>NEXT-CSID Flavor for Static Proxy for Inner Type IPv4</name>
        <t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an SRv6 static proxy SID with the NEXT-CSID flavor for IPv4 traffic:</t>
        <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.
Q01.   If (Upper-layer header type != 4 (IPv4)) {
Q02.     Resubmit the packet to the IPv6 module for transmission to
           the new destination.
Q03.   }
Q04.   Perform IPv6 decapsulation.
Q05.   Submit the packet to the IPv4 module for transmission on
         interface IFACE-OUT via NH-ADDR.
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].
Q01. If (Upper-layer header type != 4 (IPv4)) {
Q02.   Resubmit the packet to the IPv6 module for transmission to
         the new destination.
Q03. }
Q04. Perform IPv6 decapsulation.
Q05. Submit the packet to the IPv4 module for transmission on
       interface IFACE-OUT via NH-ADDR.
]]></artwork>
      </section>
      <section anchor="static-ipv6-replace-code">
        <name>REPLACE-CSID Flavor for Static Proxy for Inner Type IPv6</name>
        <t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an SRv6 static proxy SID with the REPLACE-CSID flavor for IPv6 traffic:</t>
        <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]
P01.     If (Upper-layer header type != 41 (IPv6)) {
P02.       Resubmit the packet to the IPv6 module for transmission to
             the new destination.
P03.     }
P04.     Perform IPv6 decapsulation.
P05.     Submit the packet to the IPv6 module for transmission on
         interface IFACE-OUT via NH-ADDR.
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.
P01.   If (Upper-layer header type != 41 (IPv6)) {
P02.     Resubmit the packet to the IPv6 module for transmission to
           the new destination.
P03.   }
P04.   Perform IPv6 decapsulation.
P05.   Submit the packet to the IPv6 module for transmission on
         interface IFACE-OUT via NH-ADDR.
S16. }
]]></artwork>
      </section>
      <section anchor="static-ipv6-next-code">
        <name>NEXT-CSID Flavor for Static Proxy for Inner Type IPv6</name>
        <t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an SRv6 static proxy SID with the NEXT-CSID flavor for IPv6 traffic:</t>
        <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.
Q01.   If (Upper-layer header type != 41 (IPv6)) {
Q02.     Resubmit the packet to the IPv6 module for transmission to
           the new destination.
Q03.   }
Q04.   Perform IPv6 decapsulation.
Q05.   Submit the packet to the IPv6 module for transmission on
         interface IFACE-OUT via NH-ADDR.
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].
Q01. If (Upper-layer header type != 41 (IPv6)) {
Q02.   Resubmit the packet to the IPv6 module for transmission to
        the new destination.
Q03. }
Q04. Perform IPv6 decapsulation.
Q05. Submit the packet to the IPv6 module for transmission on
       interface IFACE-OUT via NH-ADDR.
]]></artwork>
      </section>
      <section anchor="dynamic-eth-replace-code">
        <name>REPLACE-CSID Flavor for Dynamic Proxy for Inner Type Ethernet</name>
        <t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an SRv6 dynamic proxy SID with the REPLACE-CSID flavor for Ethernet traffic:</t>
        <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]
P01.       If (Upper-layer header type != 143 (Ethernet)) {
P02.         Resubmit the packet to the IPv6 module for transmission to
               the new destination.
P03.       }
P04.       Copy the IPv6 encapsulation in a CACHE entry associated with
                the interface IFACE-IN.
P05.       Perform IPv6 decapsulation.
P06.       Submit the frame to the Ethernet module for transmission via
         interface IFACE-OUT.
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.
P01.   If (Upper-layer header type != 143 (Ethernet)) {
P02.     Resubmit the packet to the IPv6 module for transmission to
           the new destination.
P03.   }
P04.   Copy the IPv6 encapsulation in a CACHE entry associated with
            the interface IFACE-IN.
P05.   Perform IPv6 decapsulation.
P06.   Submit the frame to the Ethernet module for transmission via
         interface IFACE-OUT.
S16. }
]]></artwork>
      </section>
      <section anchor="dynamic-eth-next-code">
        <name>NEXT-CSID Flavor for Dynamic Proxy for Inner Type Ethernet</name>
        <t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an SRv6 dynamic proxy SID with the NEXT-CSID flavor for Ethernet traffic:</t>
        <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.
Q01.   If (Upper-layer header type != 143 (Ethernet)) {
Q02.     Resubmit the packet to the IPv6 module for transmission to
           the new destination.
Q03.   }
Q04.   Copy the IPv6 encapsulation in a CACHE entry associated with
            the interface IFACE-IN.
Q05.   Perform IPv6 decapsulation.
Q06.   Submit the frame to the Ethernet module for transmission via
         interface IFACE-OUT.
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].
Q01. If (Upper-layer header type != 143 (Ethernet)) {
Q02.   Resubmit the packet to the IPv6 module for transmission to
        the new destination.
Q03. }
Q04. Copy the IPv6 encapsulation in a CACHE entry associated with
        the interface IFACE-IN.
Q05. Perform IPv6 decapsulation.
Q06. Submit the frame to the Ethernet module for transmission via
       interface IFACE-OUT.
]]></artwork>
      </section>
      <section anchor="dynamic-ipv4-replace-code">
        <name>REPLACE-CSID Flavor for Dynamic Proxy for Inner Type IPv4</name>
        <t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an SRv6 dynamic proxy SID with the REPLACE-CSID flavor for IPv4 traffic:</t>
        <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]
P01.       If (Upper-layer header type != 4 (IPv4)) {
P02.        Resubmit the packet to the IPv6 module for transmission to
               the new destination.
P03.       }
P04.       Copy the IPv6 encapsulation in a CACHE entry associated with
                the interface IFACE-IN.
P05.       Perform IPv6 decapsulation.
P06.       Submit the frame to the IPv4 module for transmission via
             interface IFACE-OUT via NH-ADDR.
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.
P01.   If (Upper-layer header type != 4 (IPv4)) {
P02.     Resubmit the packet to the IPv6 module for transmission to
           the new destination.
P03.   }
P04.   Copy the IPv6 encapsulation in a CACHE entry associated with
            the interface IFACE-IN.
P05.   Perform IPv6 decapsulation.
P06.   Submit the frame to the IPv4 module for transmission via
         interface IFACE-OUT via NH-ADDR.
S16. }
]]></artwork>
      </section>
      <section anchor="dynamic-ipv4-next-code">
        <name>NEXT-CSID Flavor for Dynamic Proxy for Inner Type IPv4</name>
        <t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an SRv6 dynamic proxy SID with the NEXT-CSID flavor for IPv4 traffic:</t>
        <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.
Q01.   If (Upper-layer header type != 4 (IPv4)) {
Q02.     Resubmit the packet to the IPv6 module for transmission to
          the new destination.
Q03.   }
Q04.   Copy the IPv6 encapsulation in a CACHE entry associated with
          the interface IFACE-IN.
Q05.   Perform IPv6 decapsulation.
Q06.   Submit the frame to the IPv4 module for transmission via
          interface IFACE-OUT via NH-ADDR.
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].
Q01. If (Upper-layer header type != 4 (IPv4)) {
Q02.   Resubmit the packet to the IPv6 module for transmission to
        the new destination.
Q03. }
Q04. Copy the IPv6 encapsulation in a CACHE entry associated with
        the interface IFACE-IN.
Q05. Perform IPv6 decapsulation.
Q06. Submit the frame to the IPv4 module for transmission via
      interface IFACE-OUT via NH-ADDR.
]]></artwork>
      </section>
      <section anchor="dynamic-ipv6-replace-code">
        <name>REPLACE-CSID Flavor for Dynamic Proxy for Inner Type IPv6</name>
        <t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an SRv6 dynamic proxy SID with the REPLACE-CSID flavor for IPv6 traffic:</t>
        <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]
P01.       If (Upper-layer header type != 41 (IPv6)) {
P02.       Resubmit the packet to the IPv6 module for transmission to
           the new destination.
P03.       }
P04.     Copy the IPv6 encapsulation in a CACHE entry associated with
            the interface IFACE-IN.
P05.     Perform IPv6 decapsulation.
P06.     Submit the frame to the IPv6 module for transmission via
           interface IFACE-OUT via NH-ADDR.
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.
P01.   If (Upper-layer header type != 41 (IPv6)) {
P02.     Resubmit the packet to the IPv6 module for transmission to
          the new destination.
P03.   }
P04.   Copy the IPv6 encapsulation in a CACHE entry associated with
          the interface IFACE-IN.
P05.   Perform IPv6 decapsulation.
P06.   Submit the frame to the IPv6 module for transmission via
          interface IFACE-OUT via NH-ADDR.
S16. }
]]></artwork>
      </section>
      <section anchor="dynamic-ipv6-next-code">
        <name>NEXT-CSID Flavor for Dynamic Proxy for Inner Type IPv6</name>
        <t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an SRv6 dynamic proxy SID with the NEXT-CSID flavor for IPv6 traffic:</t>
        <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.
Q01.   If (Upper-layer header type != 41 (IPv6)) {
Q02.     Resubmit the packet to the IPv6 module for transmission to
          the new destination.
Q03.   }
Q04.   Copy the IPv6 encapsulation in a CACHE entry associated with
          the interface IFACE-IN.
Q05.   Perform IPv6 decapsulation.
Q06.   Submit the frame to the IPv6 module for transmission via
         interface IFACE-OUT via NH-ADDR.
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].
Q01. If (Upper-layer header type != 41 (IPv6)) {
Q02.   Resubmit the packet to the IPv6 module for transmission to
        the new destination.
Q03. }
Q04. Copy the IPv6 encapsulation in a CACHE entry associated with
        the interface IFACE-IN.
Q05. Perform IPv6 decapsulation.
Q06. Submit the frame to the IPv6 module for transmission via
      interface IFACE-OUT via NH-ADDR.
]]></artwork>
      </section>
      <section anchor="srv6-masquerading-replace-code">
        <name>REPLACE-CSID Flavor for SRv6 Masquerading Proxy</name>
        <t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an SRv6 masquerading proxy SID with the REPLACE-CSID flavor:</t>
        <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]
P01.       Copy the IPv6 Destination Address in a CACHE entry associated 
           with the interface IFACE-IN.
P02.       Copy Segment List[0] from the SRH to the Destination Address
             of the IPv6 header.
P03.       Submit the packet to the IPv6 module for transmission on
             interface IFACE-OUT via NH-ADDR.
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.
P01.   Copy the IPv6 Destination Address in a CACHE entry associated 
        with the interface IFACE-IN.
P02.   Copy Segment List[0] from the SRH to the Destination Address
        of the IPv6 header.
P03.   Submit the packet to the IPv6 module for transmission on
        interface IFACE-OUT via NH-ADDR.
S16. }
]]></artwork>
      </section>
      <section anchor="srv6-de-masquerading-replace-code">
        <name>REPLACE-CSID Flavor for SRv6 De-masquerading Proxy</name>
        <t>When processing an IPv6 packet received on the interface IFACE-IN and with a destination address that does not match any address of IFACE-IN:</t>
        <artwork><![CDATA[
S01. When an SRH is processed {
S02.   If (IPv6 Hop Limit <= 1) {
S03.     Send an ICMP Time Exceeded message to the Source Address,
         Code 0 (hop limit exceeded in transit),
         Interrupt packet processing and discard the packet.
S04.   }
S05.   If (Segments Left != 0) {
S06.     max_last_entry = (Hdr Ext Len / 2) - 1
S07.     If ((Last Entry > max_last_entry) or
             (Segments Left > Last Entry)) {
S08.       Send an ICMP Parameter Problem message to the Source Address,
           Code 0 (Erroneous header field encountered),
           Pointer set to the Segments Left field,
           Interrupt packet processing and discard the packet.
S09.     }
D01.     Retrieve the CACHE entry associated with IFACE-IN.
D02.     If the CACHE entry is not empty {
D03.        Destination Address of the IPv6 header is set to CACHE.
D04.     }
S11.   }
S12.   Decrement Hop Limit by 1.
S13.   Submit the packet to the IPv6 module for transmission to the
       next destination.
S14. }
]]></artwork>
      </section>
      <section anchor="srv6-masquerading-next-code">
        <name>NEXT-CSID Flavor for SRv6 Masquerading Proxy</name>
        <t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an SRv6 masquerading proxy SID with the NEXT-CSID flavor:</t>
        <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.
Q01.    Copy the IPv6 Destination Address in a CACHE entry associated 
         with the interface IFACE-IN.
Q02.    Copy Segment List[0] from the SRH to the Destination Address
         of the IPv6 header.
Q03.    Submit the packet to the IPv6 module for transmission on
         interface IFACE-OUT via NH-ADDR.
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].
Q01. Copy the IPv6 Destination Address in a CACHE entry associated 
      with the interface IFACE-IN.
Q02. Copy Segment List[0] from the SRH to the Destination Address
      of the IPv6 header.
Q03. Submit the packet to the IPv6 module for transmission on
      interface IFACE-OUT via NH-ADDR.
]]></artwork>
      </section>
      <section anchor="srv6-de-masquerading-next-code">
        <name>NEXT-CSID Flavor for SRv6 De-masquerading Proxy</name>
        <t>When processing an IPv6 packet received on the interface IFACE-IN and with a destination address that does not match any address of IFACE-IN:</t>
        <artwork><![CDATA[
S01. When an SRH is processed {
S02.   If (IPv6 Hop Limit <= 1) {
S03.     Send an ICMP Time Exceeded message to the Source Address,
         Code 0 (hop limit exceeded in transit),
         Interrupt packet processing and discard the packet.
S04.   }
S05.   If (Segments Left != 0) {
S06.     max_last_entry = (Hdr Ext Len / 2) - 1
S07.     If ((Last Entry > max_last_entry) or
             (Segments Left > Last Entry)) {
S08.       Send an ICMP Parameter Problem message to the Source Address,
           Code 0 (Erroneous header field encountered),
           Pointer set to the Segments Left field,
           Interrupt packet processing and discard the packet.
S09.     }
E01.     Retrieve the CACHE entry associated with IFACE-IN.
E02.     If the CACHE entry is not empty {
E03.        Destination Address of the IPv6 header is set to CACHE.
E04.     }
S11.   }
S12.   Decrement Hop Limit by 1.
S13.   Submit the packet to the IPv6 module for transmission to the
       next destination.
S14. }
]]></artwork>
      </section>
      <section anchor="nat-replace-code">
        <name>REPLACE-CSID Flavor for Destination NAT Flavor</name>
        <t>The Destination NAT flavor of the SRv6 masquerading proxy with the REPLACE-CSID is executed:</t>
        <artwork><![CDATA[
S01. When an SRH is processed {
S02.   If (IPv6 Hop Limit <= 1) {
S03.     Send an ICMP Time Exceeded message to the Source Address,
         Code 0 (hop limit exceeded in transit),
         Interrupt packet processing and discard the packet.
S04.   }
S05.   If (Segments Left != 0) {
S06.     max_last_entry = (Hdr Ext Len / 2) - 1
S07.     If ((Last Entry > max_last_entry) or
             (Segments Left > Last Entry)) {
S08.       Send an ICMP Parameter Problem message to the Source Address,
           Code 0 (Erroneous header field encountered),
           Pointer set to the Segments Left field,
           Interrupt packet processing and discard the packet.
S09.     }
P01.      Copy the Destination Address of the IPv6 header to the
           Segment List[0] entry of the SRH.
P02.      Retrieve the CACHE entry associated with IFACE-IN.
P03.      If the CACHE entry is not empty {
P04.         Destination Address of the IPv6 header is set to CACHE.
P05.      }
S11.   }
S12.   Decrement Hop Limit by 1.
S13.   Submit the packet to the IPv6 module for transmission to the
       next destination.
S14. }
]]></artwork>
      </section>
      <section anchor="nat-next-code">
        <name>NEXT-CSID Flavor for Destination NAT Flavor</name>
        <t>The Destination NAT flavor of the SRv6 masquerading proxy with the NEXT-CSID is executed:</t>
        <artwork><![CDATA[
S01. When an SRH is processed {
S02.   If (IPv6 Hop Limit <= 1) {
S03.     Send an ICMP Time Exceeded message to the Source Address,
         Code 0 (hop limit exceeded in transit),
         Interrupt packet processing and discard the packet.
S04.   }
S05.   If (Segments Left != 0) {
S06.     max_last_entry = (Hdr Ext Len / 2) - 1
S07.     If ((Last Entry > max_last_entry) or
             (Segments Left > Last Entry)) {
S08.       Send an ICMP Parameter Problem message to the Source Address,
           Code 0 (Erroneous header field encountered),
           Pointer set to the Segments Left field,
           Interrupt packet processing and discard the packet.
S09.     }
Q01.      Copy the Destination Address of the IPv6 header to the
           Segment List[0] entry of the SRH.
Q02.      Retrieve the CACHE entry associated with IFACE-IN.
Q03.      If the CACHE entry is not empty {
Q04.         Destination Address of the IPv6 header is set to CACHE.
Q05.      }
S11.   }
S12.   Decrement Hop Limit by 1.
S13.   Submit the packet to the IPv6 module for transmission to the
       next destination.
S14. }
]]></artwork>
      </section>
    </section>
    <section numbered="false" anchor="Acknowledgements">
      <name>Acknowledgements</name>
      <t>TBD.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
swUEaCigM9i2b7IF/ORGig5kKF/BA7dYwSqDG3u5TRWqvc83WHT5xge0FcPP
E2jFmYnT/t8+kBpvYUO0EAZ8NmE+Pr8g1+YQ/OkeW8UeG/A8bRA8zNLlr1MS
3KIcreUxsoI9soPlWKwcKjPBqqKQYPq7sSRsEu6OgfMJ74vN3w1imJ6Oy6Wh
zbB9B7J9h/hhqN3/cdYmH6BgA/zqHlefbPIrqe+SCqmVrsJdMDHP+AW7GWxw
Jfe84B07Z7jY2mY+/7vIeRfXvBPe9jsJb9zluQhfSdgyGKIwatmLY2bbMbRk
23UdmzpjT7oP73hcRB+j5aixm0h54TCTSnbHSorVnOWQSLRIL1wJwgn9cMX9
DIdTnZMhErN0b0JqmKAR2jkWg7EKxuNRRCMz8IE0cFhMvGmynMPpGxP+L+98
L+/8wpaihZ7X5OiVU0e5tUo2Z7Gd9PhX4NE4+It3GwJD/HG59MfkLkLfDHZd
MV+Zfe4T8+cF94DGK4vqYOo+0KtaLXCkGrPMI2lbgIrQ57W30mUWisy/1XZ3
MZf9nyw0a+9CizaSoZkaM7UDOQ4kYhcqulOrH/561vl0hnC6izcfVkXmLH5m
RVl9D+/6CnMTmhdTibiHhnMb9UzfC23y7ezjWbUK//sb1giHazF9nDHxDXMI
Vx235yCM5z2dv4tOJLSBFLFpQWoaKgUbcXhYDiftyMeeuYfyObGkD52QkGaQ
rE5AIxckWVF34WrISolWORNIOpJJdriPBRIZfx8RhFfUIrGIFYG6g5HahDjd
/R7WJjtisUi+E5f6kaxELrvVaq1+kBvx0dj6D3UdzPBgDpDapuMh1nYufgYc
dJA2PfKZWPo8LDJ5Wn7qtMTEqfi0SUyaZk+Zlo/lxSJ5oThmMyYxX5oxW0LF
feGZEPItNFFtb8pEc5KtDPPMQbbClGiFwlxrMbsidQW7Im2dATBdpLL5JKyL
PLXgRKQ6156cTNxaBWplY5ZArJl4tRK0ynmJx8KaGnsoMyAt06cubMr5yclt
/0pLU1qa0tISltzkCbvS0kjQnKJHFeHfguNYUk57egFtwbc1BI6V98idEtKU
kLa5QtpzHzO2Ge9wikppC2lpKZR0A4W0FDKqRDQloqnXKwVAoES0lcSyEtGU
iLYmEe1pThVcrXy2EFrNuXVycQ2tESMsjY3W0BpKQ1MamtLQtnCurjQ02ZjC
7xpcFf/On4rHxLO5pLM1vAZMiWZKNNtg0Uy9GnRVqlmShG6mapakn0o1U6qZ
emunks2UbKZksy2VzZ7pPOilZLN50Gp52Wyu16UCbcl8x+PGvK5BbehUAtpM
LFMC2mbP25WARoLmrGVDZ66SNktLSzyKtrK36MmSc96kx9xy9tv0WOg83a40
pdwp5W5zlbvN2De6Be/WXNP+1EW49jokwiLvH1JbVJVOuB1bVH+ON5grMXIl
iKHESCVGvoCNsDMVyQ1+Q10RMMzeaLuo1Cn2NGS/3by0UUKn2mmrRE4lcm6p
xKFEThI0Z4GdtkrdnEfdzH3wPnHEjnpGMfxTSucWKp3PvbF3CzTO+fFgNY9C
Fmbbm6h0qj3ESuVc/x7idcqbTyduFiAg6pFLpXIqlfNFqZxPs1N5m/XNOfHw
iR/pFLtQIsxrbXuhF5M51WZoJXMqmXMb9Q0lc5KgOc+2HbqAxLkuEWNOaTNn
HM1u/Oyzw5WsqWTNrZE1n27r9TplzScVNefFgvWomlPcekNVTbXHW6ma697j
/WJkzTkhR6maStVUqubLUjWfaSP5Zsua8+DhnLJm7gmPyHXOoy9n5yzs4bXn
AtOKvrZ9XZJmyqviZ+maSsZUMqaSMROW3GQ9Q8mYsq+iY1DazCRvJJqa4GWL
AvVYiQkUg8HHGUpgkj2fUpl4x0e0mIgEE3ry0odGBd6lxMa1BqcSG+cXG1cU
wPNE70oiNydolw7YQmrgLE7aojHyGaelBl2GmbpUp+YtmN+xM2zOYoP1iRad
PxBNykXIbQ0HiK3tCJILSSbB72BlmVVxappJt5aUAyPQIFHoZl6ydboQ1Zqm
knH0+CVQYwTMIC5bgL9/8EjJlgEO8lhXmMNugr2TmVSsGxKAGWhfnNoWxfwF
EH+xfnov8b4lmckV9V2T3lJ2Y848OIJSrQgVTqYyeaDQ4ciHGIZbA5YwC3iD
qY8nzcDyxeICCtnlFEBIHdERJVXnWBTp+D3S2jhFi2sLTCGZeZhtgfn2OpY5
Zk22k2sdamnjJ1vaWNkUJZfiyEWR1cxO0kiOWBNRZ9mqJQi1BPHTLUGsBMRm
I9gK4CsTu5YErgJrBdnEpdCkrAB9UTMyNSNTM7K0GVl7iRlZe/4ZWXsFM7L2
Rs/I8vZ2RBrcaV7Lnx5ew7WktHSdAG+8XzwFJmyUNa1KX78EK9J7qo+h+xQu
KVzaGlwK17ACajUnbsSDlpsvTph4lwbhdBJdv1oABsM1qdk4GDmaZHEgDM8b
2UgkzH4ONw8Ho2xuBSAYVkAhoELAbUTAy7Ui4OUyCHhZAAEvV4GAlxuOgICB
pKn/sJ07ixoDyt3k4XXy0mPp4YjY42EP/e3Dq75mefQV4t/HVrX0/0sUKP7h
CwEA

-->

</rfc>
