<?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.5 (Ruby 3.0.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-lh-spring-srv6-sfc-csid-02" category="std" consensus="true" submissionType="IETF" xml:lang="en" version="3">
  <!-- xml2rfc v2v3 conversion 3.20.0 -->
  <front>
    <title>Compressed SID (C-SID) for SRv6 SFC</title>
    <seriesInfo name="Internet-Draft" value="draft-lh-spring-srv6-sfc-csid-02"/>
    <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="2024" month="February" day="29"/>
    <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(C-SID) is proposed. This document defines new behaviors for service segments with REPLACE-C-SID and NEXT-C-SID 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.srcompdt-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 (C-SID), 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 C-SID flavors, such as REPLACE-C-SID flavor and NEXT-C-SID flavor.</t>
      <t>The main difference between behaviors are the forwarding instructions. Therefore, when C-SID compression mechanism applies to SR Proxy behaviors, the pseudo code of the new behaviors can be generated by updating the forwarding instructions of C-SID 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>
        <section anchor="static-proxy-for-inner-type-ethernet">
          <name>Static Proxy for Inner Type Ethernet</name>
          <section anchor="replace-c-sid-flavor">
            <name>REPLACE-C-SID Flavor</name>
            <t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an SRv6 static proxy SID with the REPLACE-C-SID flavor 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-c-sid-flavor">
            <name>NEXT-C-SID Flavor</name>
            <t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an SRv6 static proxy SID with the NEXT-C-SID flavor 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-c-sid-flavor-1">
            <name>REPLACE-C-SID Flavor</name>
            <t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an SRv6 static proxy SID with the REPLACE-C-SID flavor 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-c-sid-flavor-1">
            <name>NEXT-C-SID Flavor</name>
            <t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an SRv6 static proxy SID with the NEXT-C-SID flavor 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-c-sid-flavor-2">
            <name>REPLACE-C-SID Flavor</name>
            <t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an SRv6 static proxy SID with the REPLACE-C-SID flavor 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-c-sid-flavor-2">
            <name>NEXT-C-SID Flavor</name>
            <t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an SRv6 static proxy SID with the NEXT-C-SID flavor 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>
        <section anchor="dynamic-proxy-for-inner-type-ethernet">
          <name>Dynamic Proxy for Inner Type Ethernet</name>
          <section anchor="replace-c-sid-flavor-3">
            <name>REPLACE-C-SID Flavor</name>
            <t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an SRv6 dynamic proxy SID with the REPLACE-C-SID flavor 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-c-sid-flavor-3">
            <name>NEXT-C-SID Flavor</name>
            <t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an SRv6 dynamic proxy SID with the NEXT-C-SID flavor 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-c-sid-flavor-4">
            <name>REPLACE-C-SID Flavor</name>
            <t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an SRv6 dynamic proxy SID with the REPLACE-C-SID flavor 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-c-sid-flavor-4">
            <name>NEXT-C-SID Flavor</name>
            <t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an SRv6 dynamic proxy SID with the NEXT-C-SID flavor 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-c-sid-flavor-5">
            <name>REPLACE-C-SID Flavor</name>
            <t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an SRv6 dynamic proxy SID with the REPLACE-C-SID flavor 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-c-sid-flavor-5">
            <name>NEXT-C-SID Flavor</name>
            <t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an SRv6 dynamic proxy SID with the NEXT-C-SID flavor 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 define new flavors for shared proxy behavior as it is just an SR endpoint behavior.</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 C-SID <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 C-SID, 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 C-SID container.</t>
        <section anchor="srv6-masquerading-proxy-pseudocode">
          <name>SRv6 Masquerading Proxy Pseudocode</name>
          <section anchor="replace-c-sid-flavor-6">
            <name>REPLACE-C-SID Flavor</name>
            <t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an SRv6 masquerading proxy SID with the REPLACE-C-SID flavor, 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-c-sid-flavor-6">
            <name>NEXT-C-SID Flavor</name>
            <t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an SRv6 masquerading proxy SID with the NEXT-C-SID flavor, 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-c-sid-flavor-7">
            <name>REPLACE-C-SID Flavor</name>
            <t>The Destination NAT flavor of the SRv6 masquerading proxy with the REPLACE-C-SID 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-c-sid-flavor-7">
            <name>NEXT-C-SID Flavor</name>
            <t>The Destination NAT flavor of the SRv6 masquerading proxy with the NEXT-C-SID 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 C-SID 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>
      <t>TBD</t>
    </section>
  </middle>
  <back>
    <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</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="14" month="February" year="2024"/>
            <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 SR segment endpoint behaviors defined in RFC 8986,
   which enable the compression of an SRv6 segment list.  Such
   compression significantly reduces the size of the SRv6 encapsulation
   needed to steer packets over long segment lists.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-spring-srv6-srh-compression-12"/>
        </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="20" month="February" year="2024"/>
            <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-09"/>
        </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.srcompdt-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="11" month="July" year="2021"/>
            <abstract>
              <t>   This document specifies requirements for solutions to compress SRv6
   SID lists.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-srcompdt-spring-compression-requirement-07"/>
        </reference>
      </references>
    </references>
    <?line 536?>

<section anchor="complete-pseudocodes">
      <name>Complete Pseudocodes</name>
      <section anchor="static-eth-replace-code">
        <name>REPLACE-C-SID 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-C-SID 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-C-SID 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-C-SID 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-C-SID 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-C-SID 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-C-SID 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-C-SID 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-C-SID 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-C-SID 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-C-SID 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-C-SID 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-C-SID 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-C-SID 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-C-SID 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-C-SID 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-C-SID 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-C-SID 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-C-SID 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-C-SID 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-C-SID 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-C-SID 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-C-SID 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-C-SID 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-C-SID 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-C-SID 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-C-SID 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-C-SID 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-C-SID 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-C-SID 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-C-SID Flavor for Destination NAT Flavor</name>
        <t>The Destination NAT flavor of the SRv6 masquerading proxy with the REPLACE-C-SID 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-C-SID Flavor for Destination NAT Flavor</name>
        <t>The Destination NAT flavor of the SRv6 masquerading proxy with the NEXT-C-SID 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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
hze/r4rCWf7MyrL6Pt71FegSnZZTqbyHhnMf9Uzfi3zy7fzTebUK//sbWoTD
taC0M8h4VEK0YrA9W4Of95zZLgaRmK9kzVKXJKfR9GVzDt/IYaVt+eU0HqN8
eiAJRDuipDk0qx0SySVpVjxg+BytUKpVzoWStuSSbR5l4cSdn9YOCRb3SCJn
RaruYq42IVP3vkfW5OcsVsk3NlE/VpQoZa9ardXfTc35eHb9m7oOFvhuDpja
pu20azv/NQcQ2kicHvlcLHsmFps+rT55WmHqtPjESUybZk+aVs/l5TJ5qTxm
cyYxY5oxX0IdcOm5EDIudFFtf8JFc9KtHPfMQbeiJ9ELC7Ot5fyK5BX8isR1
BsB0kcxOp2FdZKoLTkWqc31zOhe3ikCtfMwSiDUTrwpBqymHVS+vq7G9VyFt
mdzFumlHDB4oPU3paUpP28JJu9LTSNicRc9+wL8lR7K0pPb0ItqSRxqHgTXt
6zRKTFNi2uaKac99bstm/JhBXE5bTk/LIKWbKKZl0FElpCkhTf0KQQgFSkgr
JJeVkKaEtDUJaU9ziFOxEtpSaDXn5qcVdLRGgrI0NltHaygdTeloSkfbwvm6
0tFkYxb+zZ6iGPj06XhCQJtLPlvDT20o4UwJZxssnKmf2CpMOUvT0A1VztIE
VClnSjlTv42lpDMlnSnpbEuls2c6vXMl6WwetCpAOpvrx+KAuOT+ANZmnZCt
NncqEU2JaFs8d1ciGgmbs5bNnVPVtFl6WuoraYX9PJGsecpPFLGwnP0zRSx1
nm6HmlLvlHq3uerdZuwh3YIfLVvXXtVl2PY6ZMKVf+VUaYVKK9y87ao/x6+/
KkGyEMRQgqQSJF/AptiZquQG/6bQImCYv+l2ablT7G7I/+XY0maJnWrXrRI6
ldC5pTKHEjpJ2Jwldt0qhXMehXPqV/BTB+6o7ypGf0rt3EK187k3+W6Bzjk/
HhT0lciF+fZGqp1qP7FSOte/n3idEufTCZwLUBD11UuldCql80UpnU+za3mb
Nc458fCpv9op9qMkfj99g7/XqTZGK6lTSZ1bqnEoqZOEzXm2rdELyJzrEjLm
lDenjKT5jZ99mriSNpW0uTXS5tNtw16ntPmkwua8WLAmZXOCXW+qsqn2eytl
c937vV+MtDkn6ChlUymbStl8WcrmM20q32xpcx48nFPanH7iI7Kdi/jvSHMe
9rDjucC14r8wvS5ZM+NXrWdqm0rKVFKmkjJTntxkTUNJmbKv4qNQ1txk2lg0
McXLFwbqiRpTKAbDjzOUwCR7PsOYZMfH9JiYDBNF8spHSIXRpQTHtSanEhzn
FxwLSuB5sreQzJ2StCsn7EKK4ExWekwT9DNJTA26Cjd1qU7NW/C/Y+c4nSUH
6xQtPoUgmlSMkN0aDlBb2xE0Fx4Zh5+Dm2VRi3PTXL61oiIYwwYJQzfzsq2z
pbjWJJdMwscvoSAjcAaB2QIA/oOnSr4S8G4a7YpK2EvRdzKTi3UjBjAD7hfn
touC/hKQv1w/fZCAfyypyRX1XZPeUnbjlKlwDKaOY1w4/ZTJE4UORz7kMNwa
0oRZyBvOfTzpBlYuVhdyyC7nAELtiA8pmVLHslDH75HexjlaUl5gIsns020X
mHKvY61j1nx7YsFDrW/8ZOsbhc1SprIcuTJSzAQli+eIhRF1uK1ah1DrED/d
OkQhIDYbwQqAr1zsWhG4FlgwmEJdFpqXLUBg1KRMTcrUpCxrUtZaYVLWmn9S
1ipgUtba6EnZ1F0esRa3m9fyo4cduJaWl65T8I33iy+DCSflzaxyVjHBj/Se
6gF0oEImhUxbg0zRSlbIruZEjmTacvclORPv0jCfTuOrWEsAYbQyNRsJYweV
LA+F0ekjG4mFU76ROw0J44SuABiMWaAwUGHgNmJgZ60Y2FkFAzsLYGCnCAzs
bDgGAgqSpv7Ddu4sagwoD5OHnfSlx9LDIbGDYQ/j7eOrvmZ59BUC4Kfjaum/
Oet33SoBAQA=

-->

</rfc>
