<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.3.8) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-yang-rtgwg-srv6-sfc-reliability-framework-05" category="std" consensus="true" submissionType="IETF" xml:lang="en">
  <front>
    <title abbrev="Reliability Framework for SRv6 SFC">Reliability Framework for SRv6 Service Function Chaining</title>

    <author initials="F." surname="Yang" fullname="Feng Yang">
      <organization>China Mobile</organization>
      <address>
        <postal>
          <country>CN</country>
        </postal>
        <email>yangfeng@chinamobile.com</email>
      </address>
    </author>
    <author initials="C." surname="Lin" fullname="Changwang Lin">
      <organization>New H3C Technologies</organization>
      <address>
        <postal>
          <country>CN</country>
        </postal>
        <email>linchangwang.04414@h3c.com</email>
      </address>
    </author>
    <author initials="Y." surname="Qiu" fullname="Yuanxiang Qiu">
      <organization>New H3C Technologies</organization>
      <address>
        <postal>
          <country>CN</country>
        </postal>
        <email>qiuyuanxiang@h3c.com</email>
      </address>
    </author>
    <author initials="X." surname="Zhang" fullname="Xiaoqiu Zhang">
      <organization>China Mobile</organization>
      <address>
        <postal>
          <country>CN</country>
        </postal>
        <email>zhangxiaoqiu@chinamobile.com</email>
      </address>
    </author>

    <date year="2025" month="December" day="16"/>

    <area>RTG</area>
    <workgroup>RTGWG</workgroup>
    

    <abstract>


<?line 49?>

<t>Segment routing (SR) <xref target="RFC8402"></xref> is a source routing paradigm that explicitly indicates the forwarding path for packets at the ingress node. SR can be instantiated on the MPLS data plane (MPLS-SR) and the IPv6 data plane (SRv6).</t>

<t>On the MPLS-SR data plane, a segment is encoded as an MPLS label, and an ordered list of segments is encoded as a stack of labels. On the SRv6 data plane, a segment is encoded as an IPv6 address (SRv6 SID) <xref target="RFC8986"></xref>, and an ordered list of segments is encoded as an ordered list of SRv6 SIDs in the SR header (SRH) <xref target="RFC8754"></xref>. The ingress node steers packets into a specific path according to the ordered list of segments (SR Policy) as defined in <xref target="RFC9256"></xref>. Service Function Chaining (SFC) defines an ordered set of service functions and subsequent "steering" of traffic through them.  The architecture of SFC is defined in <xref target="RFC7665"></xref>.</t>

<t>This document describes the common failure scenarios and protection mechanisms of service function chains in SR networks. Then implementation recommendations for protection of service function chains are proposed.</t>



    </abstract>



  </front>

  <middle>


<?line 57?>

<section anchor="introduction"><name>Introduction</name>

<t>Segment routing (SR) <xref target="RFC8402"></xref> is a source routing paradigm that explicitly indicates the forwarding path for packets at the ingress node. SR can be instantiated on the MPLS data plane (MPLS-SR) and the IPv6 data plane (SRv6).</t>

<t>On the MPLS-SR data plane, a segment is encoded as an MPLS label, and an ordered list of segments is encoded as a stack of labels. On the SRv6 data plane, a segment is encoded as an IPv6 address (SRv6 SID) <xref target="RFC8986"></xref>, and an ordered list of segments is encoded as an ordered list of SRv6 SIDs in the SR header (SRH) <xref target="RFC8754"></xref>. The ingress node steers packets into a specific path according to the ordered list of segments (SR Policy) as defined in <xref target="RFC9256"></xref>.</t>

<t>Service Function Chaining (SFC) defines an ordered set of service functions and subsequent "steering" of traffic through them.  The architecture of SFC is defined in <xref target="RFC7665"></xref>.</t>

<t>This document describes the common failure scenarios and protection mechanisms of service function chains in SR networks. Then implementation recommendations for protection of service function chains are proposed.</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>The terms in this document are defined in <xref target="RFC7665"></xref>, <xref target="RFC8459"></xref>, <xref target="RFC8986"></xref> and <xref target="I-D.ietf-spring-sr-service-programming"></xref>.</t>

<t>The following lists widely used terms in this document.</t>

<t>SR: Segment Routing</t>

<t>SRv6: Segment Routing over IPv6</t>

<t>CF: Classifier</t>

<t>SF: Service Function</t>

<t>SFF: Service Function Forwarder</t>

<t>SFC: Service Function Chaining</t>

</section>
</section>
<section anchor="background-requirements"><name>Background Requirements</name>

<t>In SRv6 networks, programming of forwarding paths can be achieved through the combination of SIDs. If the programming paths sequentially pass through the specified SF, SFC is achieved, which is the main idea of stateless SRv6 SFC solution.</t>

<t>The architecture of the Stateless SRv6 SFC solution is shown in <xref target="f1"/>, which includes the following key components:</t>

<t>SRv6-aware SF: SF nodes that support SRv6 can be directly connected to SFF.</t>

<t>SRv6-unaware SF: SF nodes that do not support SRv6 need to deploy an SRv6 proxy between SFF and SRv6-unaware SF to complete the processing of SRv6 packets.</t>

<t>SRv6 Proxy: The proxy for SRv6, which forwards packets from the SRv6 network to the SRv6 unaware SF and returns them from the SRv6-unaware SF to the SRv6 network.</t>

<figure anchor="f1" title=""><artwork align="center" type="ascii-art" name=""><![CDATA[
                            +------------+
                            |SRv6-unaware|
                            |    SF1     |
                            +-----+------+
                                  |
                            +-----+------+
                            | +---+----+ | +------------+
                            | |   SR   | | | SRv6-aware |
                            | |  Proxy | | |    SF2     |
                            | +---+----+ | +-----+------+
                            |     |      |       |
+--------+  +------------+  | +---+----+ |   +---+---+  +------+
| Source +--+ Classifier +--+-+  SFF1  +-+---+  SFF2 +--+ Dest |
+--------+  +------------+  | +--------+ |   +-------+  +------+
                            +------------+

]]></artwork></figure>

<t>The SRv6 proxy caches the mapping relationship between SRH and the virtual interface connecting SF, which is used to recover SRv6 packets based on the virtual interface when packets return from SF.</t>

<t>Currently, during the deployment of SFC, we have encountered some reliability issues with SF. Taking the simple networking model in <xref target="f2"/> as an example, any of the following faults will cause the service message to be discarded.</t>

<t>Fault 1: SF fault.</t>

<t>Fault 2: SFF fault.</t>

<t>Fault 3: Link failure or unreachable routing between SFF and SF.</t>

<figure anchor="f2" title=""><artwork align="center" type="ascii-art" name=""><![CDATA[
   ,-----.                                   ,-----.
 ,' User  `.                               ,' User  `.
(  Network  )   +--------+                (  Network  )
 `.       ,'    |   SF   |                 `.       ,'
   `--+--'      +----+---+                   `--+--'
      |              |                          |
+-----+------+  +----+---+  +-----------+  +----+-----+
|  Ingress A +--+  SFF   +--+ SRv6 Node +--+  Egress  |
|(Classifier)|  |   B    |  |     C     |  |    D     |
+------------+  +--------+  +-----------+  +----------+

]]></artwork></figure>

<t>In order to improve the reliability of SFC, we propose the following three reliability protection mechanisms:</t>

<t><list style="symbols">
  <t>SFF redundant backup protection method</t>
  <t>SF redundant backup protection method</t>
  <t>SF bypass forwarding method</t>
</list></t>

<t>It should be noted that OAM packets involve relatively complex state processing. Discarding or altering these packets can lead to compatibility issues for the entire connection. Therefore, it is advisable to avoid diverting OAM traffic into the SFC processing.</t>

</section>
<section anchor="mechanisms"><name>SFC Reliability Protection Mechanisms</name>

<section anchor="sff-redundant-backup-protection-method"><name>SFF Redundant Backup Protection Method</name>

<t>Deploy primary and backup SFFs for SF. SF is dual-homed connected to both SFFs simultaneously. When the routing between the primary SFF and SF is unreachable or primary SFF fails, the service message is switched to the backup SFF and forwarded to SF via the backup SFF.</t>

<t>The following describes the working process of SFF redundant backup protection mechanism based on SF's SRv6 capabilities and SRv6 Proxy behavior.</t>

<section anchor="static-sr-proxy"><name>Static SR Proxy</name>

<t>As shown in <xref target="f3"/>, SFF1 and SFF2 are two Service Function Forwarders that are backed up to each other. SF is connected to both SFF1 and SFF2.</t>

<figure anchor="f3" title=""><artwork align="center" type="ascii-art" name=""><![CDATA[
            Primary static proxy SID=X1
            Backup static proxy SID=X2
            SRH SID list(E2,E1,D,X1)
                +-------+     +-----+
                | SFF1  +-----+ SF  |
                |(SID=B)|     +-----+
                +-------+    /
+------------+  /       \   /
|  Ingress   | /         \ /
|(Classifier)|            X
|  (SID=A)   | \         / \
+------------+  \       /   \               +------------+
                +-------+    \+-------+     |   Egress   |
                | SFF2  +-----+ Node D+-----+  (SID=E1)  |
                |(SID=C)|     |(SID=D)|     |(DT4 SID=E2)|
                +-------+     +-------+     +------------+
            Primary static proxy SID=X1
            Backup static proxy SID=X2
            SRH SID list(E2,E1,D,X1)

]]></artwork></figure>

<t>Firstly, configure SFF1 and SFF2 as follows:</t>

<t><list style="symbols">
  <t>Configure the mapping relationship cache entries for the same SRH and interface connecting SF on two SFFs.</t>
  <t>Two SFFs use the same Locator segment to assign their respective static proxy SID.</t>
  <t>Two SFFs with the same configuration as the primary static proxy SID and backup static proxy SID. Both specify SFF1 as the primary and SFF2 as the backup.</t>
</list></t>

<t>Normally, the Ingress node encapsulates the SRH header and fills the SID list with &lt;E1, E2, D, X1&gt;, indicating that the message is forwarded along the path Ingress-&gt;SFF1-&gt;SF-&gt;SFF1-&gt;NodeD-&gt;Egress. After receiving the message, SFF1 matches it to the local primary static proxy SID based on the destination address X1 of the message. SFF1 performs the processing of End.AS behavior, removes the IPv6 header and SRH, and sends the original message to SF through the interface corresponding to the service SID.</t>

<t>When SFF1 detects that the route from SFF1 to SF is unreachable, it encapsulates a new SRv6 header to the message based on the configured backup SFF. There are two encapsulation options for the SRv6 header:</t>

<t><list style="symbols">
  <t>Option 1: With SRH, forward the payload to the backup SFF through the SRv6 TE path.</t>
  <t>The SRH SID list contains the segment IDs of the nodes that need to be passed through for backup SFF.</t>
  <t>SID[0] is backup static proxy SID.</t>
  <t>Option 2: Forward the payload to the backup SFF through the SRv6 BE path.</t>
  <t>The IPv6 DA is backup static proxy SID.</t>
</list></t>

<t>SFF1 searches the routing table and forwards the updated message to SFF2.</t>

<t>After receiving the message, if the route from SFF2 to SF is reachable, SFF2 removes the outer SRv6 header, and forwards the payload to SF. If the route from SFF2 to SF is also unreachable, discard the message.</t>

<t>For option 1, the encapsulation of messages transmitted between SRv6 nodes from Ingress to Egress is shown in <xref target="f4"/>.</t>

<figure anchor="f4" title=""><artwork align="center" type="ascii-art" name=""><![CDATA[
Ingress->SFF1  SFF1->SFF2      SFF2->D      D->Egress
+------------+ +-----------+ +------------+ +------------+
|IPv6 Hdr:   | |IPv6 Hdr:  | |IPv6 Hdr:   | |IPv6 Hdr:   |
|  DA=X1     | |  DA=C     | |  DA=D      | |  DA=E1     |
+------------+ +-----------+ +------------+ +------------+
|SRH:        | |SRH:       | |SRH:        | |SRH:        |
|  SL=3,     | |  SL=1,    | |  SL=2,     | |  SL=1,     |
|(E2,E1,D,X1)| |  (X2,C)   | |(E2,E1,D,X1)| |(E2,E1,D,X1)|
+------------+ +-----------+ +------------+ +------------+
|  Payload   | |  Payload  | |  Payload   | |  Payload   |
+------------+ +-----------+ +------------+ +------------+

]]></artwork></figure>

<t>For option 2, the encapsulation of messages transmitted between SRv6 nodes from Ingress to Egress is shown in <xref target="f5"/>.</t>

<figure anchor="f5" title=""><artwork align="center" type="ascii-art" name=""><![CDATA[
Ingress->SFF1  SFF1->SFF2      SFF2->D      D->Egress
+------------+ +-----------+ +------------+ +------------+
|IPv6 Hdr:   | |IPv6 Hdr:  | |IPv6 Hdr:   | |IPv6 Hdr:   |
|  DA=X1     | |  DA=X2    | |  DA=D      | |  DA=E1     |
+------------+ +-----------+ +------------+ +------------+
|SRH:        | |  Payload  | |SRH:        | |SRH:        |
|  SL=3,     | +-----------+ |  SL=2,     | |  SL=1,     |
|(E2,E1,D,X1)|               |(E2,E1,D,X1)| |(E2,E1,D,X1)|
+------------+               +------------+ +------------+
|  Payload   |               |  Payload   | |  Payload   |
+------------+               +------------+ +------------+

]]></artwork></figure>

</section>
<section anchor="dynamic-sr-proxy"><name>Dynamic SR Proxy</name>

<t>Compared to static SR Proxy, dynamic SR Proxy has the ability to learn mapping relationship cache entries. The mapping relationship cache between SRH and the interface connecting SF is dynamically generated based on the SRH of the messages received by SFF.</t>

<t>After enabling SFF redundant backup protection function, when the primary SFF senses that it is unreachable to SF, the SRH are not removed. Instead, SFF1 needs to carry the original SRH to the backup SFF.</t>

<t>As shown in <xref target="f6"/>, SFF1 and SFF2 are two Service Function Forwarders that are backed up to each other, and SF is connected to both SFF1 and SFF2.</t>

<t>Firstly, configure SFF1 and SFF2 as follows:</t>

<t><list style="symbols">
  <t>Two SFFs use the same Locator segment to assign their respective dynamic proxy SID.</t>
  <t>Two SFFs with the same configuration as the primary dynamic proxy SID and backup dynamic proxy SID. Both specify SFF1 as the primary and SFF2 as the backup.</t>
</list></t>

<figure anchor="f6" title=""><artwork align="center" type="ascii-art" name=""><![CDATA[
             Primary dynamic proxy SID=X1
             Backup dynamic proxy SID=X2
                 +-------+     +-----+
                 | SFF1  +-----+ SF  |
                 |(SID=B)|     +-----+
                 +-------+    /
+------------+  /        \   /
|  Ingress   | /          \ /
|(Classifier)|             X
|  (SID=A)   | \          / \
+------------+  \        /   \               +------------+
                 +-------+    \+-------+     |   Egress   |
                 | SFF2  +-----+ Node D+-----+  (SID=E1)  |
                 |(SID=C)|     |(SID=D)|     |(DT4 SID=E2)|
                 +-------+     +-------+     +------------+
             Primary dynamic proxy SID=X1
             Backup dynamic proxy SID=X2

]]></artwork></figure>

<t>Normally, the Ingress node encapsulates the SRH header and fills the SID list with &lt;E1, E2, D, X1&gt;, indicating that the message is forwarded along the path Ingress-&gt;SFF1-&gt;SF-&gt;SFF1-&gt;NodeD-&gt;Egress. After receiving the message, SFF1 matches it to the local dynamic proxy SID based on the destination address X1 of the message.</t>

<t>SFF1 performs the processing of End.AD behavior, decapsulates the message, removes the IPv6 header and SRH, and sends the payload to SF through the interface corresponding to the service SID. At the same time, SFF1 records the mapping relationship cache between SRH and the interface connecting SF, in order to recover the SRH when the message returns from SF.</t>

<t>When SFF1 detects that the route from SFF1 to SF is unreachable, SFF1 does not remove the existing IPv6 header and SRH, and there are two process options for the SRv6 header:</t>

<t><list style="symbols">
  <t>Option 1: SFF1 adds another SRv6 header to the message.</t>
  <t>The SRH SID list contains the segment IDs of the nodes that need to be passed through for backup SFF.</t>
  <t>SID[0] is backup dynamic proxy SID.</t>
  <t>Option 2: SFF1 reuses existing IPv6 headers. SFF1 replaces the IPv6 DA to backup dynamic proxy SID.</t>
</list></t>

<t>SFF1 searches the routing table and forwards the updated message to SFF2. After the message arrives at SFF2, it is matched to the local backup dynamic proxy SID based on the destination address X2. SFF2 removes the outer IPv6 header(s), sends the payload to SF, and records the mapping relationship cache between SRH and the interface connecting SF.</t>

<t>If the route from SFF2 to SF is unreachable, it is considered that both the primary and backup SFFs are unable to process and the message is discarded.</t>

<t>For option 1, the encapsulation of messages transmitted between SRv6 nodes from Ingress to Egress is shown in <xref target="f7"/>.</t>

<figure anchor="f7" title=""><artwork align="center" type="ascii-art" name=""><![CDATA[
Ingress->SFF1    SFF1->SFF2      SFF2->D       D->Egress
+------------+ +------------+ +------------+ +------------+
|IPv6 Hdr:   | |IPv6 Hdr:   | |IPv6 Hdr:   | |IPv6 Hdr:   |
|  DA=X1     | |  DA=C      | |  DA=D      | |  DA=E1     |
+------------+ +------------+ +------------+ +------------+
|SRH:        | |SRH:        | |SRH:        | |SRH:        |
|  SL=3,     | |  SL=1,     | |  SL=2,     | |  SL=1,     |
|(E2,E1,D,X1)| |  (X2,C)    | |(E2,E1,D,X1)| |(E2,E1,D,X1)|
+------------+ +------------+ +------------+ +------------+
|  Payload   | |IPv6 Hdr:   | |  Payload   | |  Payload   |
+------------+ |  DA=D      | +------------+ +------------+
               +------------+
               |SRH:        |
               |  SL=2,     |
               |(E2,E1,D,X1)|
               +------------+
               |  Payload   |
               +------------+

]]></artwork></figure>

<t>For option 2, the encapsulation of messages transmitted between SRv6 nodes from Ingress to Egress is shown in <xref target="f8"/>.</t>

<figure anchor="f8" title=""><artwork align="center" type="ascii-art" name=""><![CDATA[
Ingress->SFF1    SFF1->SFF2      SFF2->D       D->Egress
+------------+ +------------+ +------------+ +------------+
|IPv6 Hdr:   | |IPv6 Hdr:   | |IPv6 Hdr:   | |IPv6 Hdr:   |
|  DA=X1     | |  DA=X2     | |  DA=D      | |  DA=E1     |
+------------+ +------------+ +------------+ +------------+
|SRH:        | |SRH:        | |SRH:        | |SRH:        |
|  SL=3,     | |  SL=2,     | |  SL=2,     | |  SL=1,     |
|(E2,E1,D,X1)| |(E2,E1,D,X1)| |(E2,E1,D,X1)| |(E2,E1,D,X1)|
+------------+ +------------+ +------------+ +------------+
|  Payload   | |  Payload   | |  Payload   | |  Payload   |
+------------+ +------------+ +------------+ +------------+

]]></artwork></figure>

</section>
<section anchor="masquerading-sr-proxy"><name>Masquerading SR Proxy</name>

<t>SFC masquerading proxy is suitable for scenarios where SF can recognize SRv6 packets but does not support processing SRH. Before forwarding the message to the SF, the masquerading SR proxy first updates SID[0] of Segment list to DA, and then directly forwards the SRv6 message to SF. After SF completes the service processing, it does not process the SRv6 SRH and forwards the message back to SFF. After receiving the message returned from SF, SFF updates DA to SID[SL] of Segment list and continues forwarding.</t>

<t>Because the SRH has always been carried in the message without modification, SFF does not need to re encapsulate the SRH after receiving the message returned from SF, and can directly use the SRH inside the message.</t>

<t>In the scenario of using masquerading SR proxy, after enabling SFF redundant backup protection function, when the primary SFF senses that the route with SF is unreachable, the primary SFF does not remove the IPv6 header and SRH. Instead, SFF1 needs to carry the SRH to the backup SFF.</t>

<t>Taking <xref target="f9"/> as an example, the detailed protection processing process is as follows.</t>

<figure anchor="f9" title=""><artwork align="center" type="ascii-art" name=""><![CDATA[
             Masquerading proxy SID:
               Primary=X1
                Backup=X2
                 +-------+     +-----+
                 | SFF1  +-----+ SF  |
                 |(SID=B)|     +-----+
                 +-------+    /
+------------+  /        \   /
|   Ingress  | /          \ /
|(Classifier)|             X
|  (SID=A)   | \          / \
+------------+  \        /   \             +------------+
                 +-------+    \+-------+   |   Egress   |
                 | SFF2  +-----+ Node D+---+  (SID=E1)  |
                 |(SID=C)|     |(SID=D)|   |(DT4 SID=E2)|
                 +-------+     +-------+   +------------+
             Masquerading proxy SID:
               Primary=X1
                Backup=X2

]]></artwork></figure>

<t>Configure SFF1 and SFF2 as follows:</t>

<t><list style="symbols">
  <t>Two SFFs use the same Locator segment to assign their respective
 masquerading proxy SID.</t>
  <t>Two SFFs with the same configuration as the primary masquerading
 proxy SID and Backup masquerading proxy SID. Both specify SFF1 as
 the primary and SFF2 as the backup.</t>
</list></t>

<t>Normally, the message is forwarded along the path Ingress-&gt;SFF1-&gt;SF-&gt;SFF1-&gt;NodeD-&gt;Egress. After receiving the message, SFF1 matches it to the local masquerading proxy SID based on the DA of the message. SFF1 performs the processing of the End.AM behavior, changing DA to SID[0] of Segment list, and then sending the message to SF through the interface connecting to SF.</t>

<t>When SFF1 detects that the route from SFF1 to SF is unreachable, there are two options:</t>

<t><list style="symbols">
  <t>Option 1: SFF-1 replaces the IPv6 DA with the backup masquerading proxy SID.</t>
</list></t>

<t>After the message arrives at SFF2, SFF2 changes the DA to SID[0] of the Segment list, and then sending the message to SF through the interface connecting to SF.</t>

<t><list style="symbols">
  <t>Option 2: SFF-1 adds another SRv6 header to the message. The SRH[0] is backup masquerading proxy SID.</t>
</list></t>

<t>After the message arrives at SFF2, SFF2 first removes the outer SRv6 header and restores the inner SRv6 message. Then, use the SID[0] of the SRH Segment List as the destination address to send the message to SF.</t>

<t>If the route from SFF2 to SF is unreachable, it is considered that both the primary and backup SFFs are unable to process and the message is discarded.</t>

<t>For option 1, the encapsulation of messages transmitted between SRv6 nodes from Ingress to Egress is shown in <xref target="f10"/>.</t>

<figure anchor="f10" title=""><artwork align="center" type="ascii-art" name=""><![CDATA[
 Ingress->SFF1   SFF1->SFF2      SFF2->D        D->Egress
+------------+ +------------+ +------------+ +------------+
|IPv6 Hdr:   | |IPv6 Hdr:   | |IPv6 Hdr:   | |IPv6 Hdr:   |
|  DA=X1     | |  DA=X2     | |  DA=D      | |  DA=E1     |
+------------+ +------------+ +------------+ +------------+
|SRH:        | |SRH:        | |SRH:        | |SRH:        |
|  SL=3,     | |  SL=2,     | |  SL=2,     | |  SL=1,     |
|(E2,E1,D,X1)| |(E2,E1,D,X1)| |(E2,E1,D,X1)| |(E2,E1,D,X1)|
+------------+ +------------+ +------------+ +------------+
|  Payload   | |  Payload   | |  Payload   | |  Payload   |
+------------+ +------------+ +------------+ +------------+

]]></artwork></figure>

<t>For option 2, the encapsulation of messages transmitted between SRv6 nodes from Ingress to Egress is shown in <xref target="f11"/>.</t>

<figure anchor="f11" title=""><artwork align="center" type="ascii-art" name=""><![CDATA[
 Ingress->SFF1   SFF1->SFF2      SFF2->D        D->Egress
+------------+ +------------+ +------------+ +------------+
|IPv6 Hdr:   | |IPv6 Hdr:   | |IPv6 Hdr:   | |IPv6 Hdr:   |
|  DA=X1     | |  DA=C      | |  DA=D      | |  DA=E1     |
+------------+ +------------+ +------------+ +------------+
|SRH:        | |SRH:        | |SRH:        | |SRH:        |
|  SL=3,     | |  SL=1,     | |  SL=2,     | |  SL=1,     |
|(E2,E1,D,X1)| |  (X2,C)    | |(E2,E1,D,X1)| |(E2,E1,D,X1)|
+------------+ +------------+ +------------+ +------------+
|  Payload   | |IPv6 Hdr:   | |  Payload   | |  Payload   |
+------------+ |  DA=D      | +------------+ +------------+
               +------------+
               |SRH:        |
               |  SL=2,     |
               |(E2,E1,D,X1)|
               +------------+
               |  Payload   |
               +------------+

]]></artwork></figure>

</section>
<section anchor="srv6-aware-sf"><name>SRv6-aware SF</name>

<t>SF, which supports SRv6 functionality, serves as a SRv6 endpoint node and is arranged on the path of SRv6 Policy forwarding. Its reliability protection mechanism is identical to that of SRv6 endpoint nodes, and no special handling is required in the SFF redundant backup protection mechanism.</t>

<t>3.2. SF Redundant Backup Protection Method</t>

<t>There are active and standby SFs in the network, which are connected to the same SFF or different SFFs.</t>

<t>SF redundant backup protection method is the process of bypassing the faulty primary SF and continuing to send messages to backup SF for processing. The following describes the working processes of the SF redundant backup protection method based on SF's SRv6 capability and SRv6 Proxy's behavior.</t>

</section>
<section anchor="static-sr-proxy-1"><name>Static SR Proxy</name>

<t>As shown in <xref target="f12"/>, there is a backup service function node SF2 for primary service function node SF1 in the SFC network. SF1 is connected to SFF1 with a single-homed connection, and SF2 is connected to SFF2 with a single-homed connection.</t>

<t>In order to implement the SF redundant backup protection function, it is necessary to enable the SF backup function on SFF1 and configure the bypass proxy connected to the backup SF.</t>

<figure anchor="f12" title=""><artwork align="center" type="ascii-art" name=""><![CDATA[
                                 +------+    +------------+
                 +-----+         | SF2  |    |   Egress   |
                 | SF1 |         |Backup|    |  (SID=E1)  +-+
                 +--+--+         +---+--+    |(DT4 SID=E2)| |
                    |                |       +------------+ |
+------------+      |                |                      |
|  Ingress   |   +--+---+        +---+--+       +-------+   |
|(Classifier)+---+ SFF1 +--------+ SFF2 +-------+  Node +---+
|  (SID=A)   |   +------+        +------+       |(SID=D)|
+------------+Static proxy SID=B  End SID=C2    +-------+
              Bypass proxy=SFF2  Bypass static proxy SID=C1
              SRH SID list:      SRH SID list:
                (E2,E1,D,B)        (E2,E1,D,B)


]]></artwork></figure>

<t>When SFF1 detects that the route from SFF1 to SF1 is unreachable, it encapsulates a new SRv6 header to the message. There are two encapsulation options for the SRv6 header:</t>

<t><list style="symbols">
  <t>Option 1: With SRH, forward the payload to the bypass SFF through the SRv6 TE path.</t>
  <t>The SRH SID list contains the segment IDs of the nodes that need to be passed through for the SFF connecting to the backup SF.</t>
  <t>SRH[0] is the bypass static proxy SID.</t>
  <t>Option 2: Forward the payload to the bypass SFF through the SRv6 BE path.</t>
  <t>The IPv6 DA is bypass static proxy SID.</t>
</list></t>

<t>SFF1 searches the routing table and forwards the updated message to SFF2. After receiving the message, SFF2 removes the IPv6 header, and sends the payload to SF2. If the route from SFF2 to SF2 is also unreachable, discard the message.</t>

<t>For option 1, the encapsulation of messages transmitted between SRv6 nodes from Ingress to Egress is shown in <xref target="f13"/>.</t>

<figure anchor="f13" title=""><artwork align="center" type="ascii-art" name=""><![CDATA[
Ingress->SFF1   SFF1->SFF2      SFF2->D        D->Egress
+------------+ +------------+ +------------+ +------------+
|IPv6 Hdr:   | |IPv6 Hdr:   | |IPv6 Hdr:   | |IPv6 Hdr:   |
|  DA=B      | |  DA=C2     | |  DA=D      | |  DA=E1     |
+------------+ +------------+ +------------+ +------------+
|SRH:        | | SRH:       | |SRH:        | |SRH:        |
|  SL=3,     | |  SL=1,     | |  SL=2,     | |  SL=1,     |
|(E2,E1,D,B) | | (C1,C2)    | |(E2,E1,D,B) | |(E2,E1,D,B)|
+------------+ +------------+ +------------+ +------------+
|  Payload   | |IPv6 Hdr:   | |  Payload   | |  Payload   |
+------------+ |  DA=D      | +------------+ +------------+
               +------------+
               | SRH:       |
               |  SL=2,     |
               |(E2,E1,D,B) |
               +------------+
               |  Payload   |
               +------------+

]]></artwork></figure>

<t>For option 2, the encapsulation of messages transmitted between SRv6 nodes from Ingress to Egress is shown in <xref target="f14"/>.</t>

<figure anchor="f14" title=""><artwork align="center" type="ascii-art" name=""><![CDATA[
Ingress->SFF1   SFF1->SFF2      SFF2->D        D->Egress
+------------+ +------------+ +------------+ +------------+
|IPv6 Hdr:   | |IPv6 Hdr:   | |IPv6 Hdr:   | |IPv6 Hdr:   |
|  DA=B      | |  DA=C1     | |  DA=D      | |  DA=E1     |
+------------+ +------------+ +------------+ +------------+
|SRH:        | |  Payload   | |SRH:        | |SRH:        |
|  SL=3,     | +------------+ |  SL=2,     | |  SL=1,     |
|(E2,E1,D,B) |                |(E2,E1,D,B) | |(E2,E1,D,B)|
+------------+                +------------+ +------------+
|  Payload   |                |  Payload   | |  Payload   |
+------------+                +------------+ +------------+

]]></artwork></figure>

</section>
<section anchor="dynamic-sr-proxy-1"><name>Dynamic SR Proxy</name>

<t>Because the dynamic SR proxy needs to dynamically generate a mapping relationship cache with the virtual interface connecting to SF based on the SRH of the message, after enabling SF redundant backup protection function, when the SFF senses that the route with primary SF is unreachable, it cannot remove IPv6 encapsulation. Instead, a new IPv6 header needs to be added outside the IPv6 header, and the original IPv6 packet is sent as a payload to the bypass SFF connecting to the backup SF.</t>

<figure anchor="f15" title=""><artwork align="center" type="ascii-art" name=""><![CDATA[
                                    +------+    +------------+
                 +-----+            | SF2  |    |   Egress   |
                 | SF1 |            |Backup|    |  (SID=E1)  +-+
                 +--+--+            +---+--+    |(DT4 SID=E2)| |
                    |                   |       +------------+ |
+------------+      |                   |                      |
|  Ingress   |   +--+---+           +---+--+       +-------+   |
|(Classifier)+---+ SFF1 +-----------+ SFF2 +-------+  Node +---+
|  (SID=A)   |   +------+           +------+       |(SID=D)|
+------------+Dynamic proxy SID=B  End SID=C2      +-------+
              Bypass proxy=SFF2    Bypass dynamic proxy SID=C1

]]></artwork></figure>

<t>As shown in <xref target="f15"/>, there is a backup service function node SF2 for SF1. SF1 is connected to SFF1 with a single-homed connection, and SF2 is connected to SFF2.</t>

<t>Enable the SF redundant backup protection function and specify SFF2 as the bypass protection node on SFF1. Configure the bypass dynamic proxy SID corresponding to the backup SF on SFF-2.</t>

<t>Normally, the message is forwarded along the path Ingress-&gt;SFF1-&gt;SF1-&gt;SFF1-&gt;NodeD-&gt;Egress. After receiving the message, SFF1 matches it to the local dynamic proxy SID based on the DA. SFF1 performs the processing of the dynamic proxy behavior, removes the original IPv6 header and SRH, and sends the payload to SF1 through the virtual interface connecting SF1. At the same time, SFF1 records the mapping relationship cache between SRH and the interface connecting SF1.</t>

<t>When SFF1 detects that the route from SFF1 to SF1 is unreachable, SFF1 does not remove the existing IPv6 header and SRH, and there are two process options:</t>

<t><list style="symbols">
  <t>Option 1: SFF1 adds another SRv6 header to the message.</t>
  <t>The SRH SID list contains the segment IDs of the nodes that need to be passed through for the SFF connecting to the backup SF.</t>
  <t>SID[0] is bypass dynamic proxy SID.</t>
  <t>Option 2: SFF1 reuses existing IPv6 headers. SFF1 replaces the IPv6 DA to bypass dynamic proxy SID.</t>
</list></t>

<t>SFF1 looks up the routing table and forwards the encapsulated message to SFF2.</t>

<t>After the message arrives at SFF2, it is matched to the local bypass dynamic proxy SID based on the DA. SFF-2 removes the outer IPv6 header(s), sends the payload to SF2, and records the mapping relationship cache between SRH and the virtual interface connecting SF2.</t>

<t>If SFF2 to SF2 are also unreachable, discard the message.</t>

<t>For option 1, the encapsulation of messages transmitted between SRv6 nodes from Ingress to Egress is shown in <xref target="f16"/>.</t>

<figure anchor="f16" title=""><artwork align="center" type="ascii-art" name=""><![CDATA[
Ingress->SFF1   SFF1->SFF2      SFF2->D        D->Egress
+------------+ +------------+ +------------+ +------------+
|IPv6 Hdr:   | |IPv6 Hdr:   | |IPv6 Hdr:   | |IPv6 Hdr:   |
|  DA=B      | |  DA=C2     | |  DA=D      | |  DA=E1     |
+------------+ +------------+ +------------+ +------------+
|SRH:        | | SRH:       | |SRH:        | |SRH:        |
|  SL=3,     | |  SL=1,     | |  SL=2,     | |  SL=1,     |
|(E2,E1,D,B) | | (C1,C2)    | |(E2,E1,D,B) | |(E2,E1,D,B)|
+------------+ +------------+ +------------+ +------------+
|  Payload   | |IPv6 Hdr:   | |  Payload   | |  Payload   |
+------------+ |  DA=D      | +------------+ +------------+
               +------------+
               | SRH:       |
               |  SL=2,     |
               |(E2,E1,D,B) |
               +------------+
               |  Payload   |
               +------------+

]]></artwork></figure>

<t>For option 2, the encapsulation of messages transmitted between SRv6 nodes from Ingress to Egress is shown in <xref target="f17"/>.</t>

<figure anchor="f17" title=""><artwork align="center" type="ascii-art" name=""><![CDATA[
Ingress->SFF1  SFF1->SFF2      SFF2->D        D->Egress
+------------+ +------------+ +------------+ +------------+
|IPv6 Hdr:   | |IPv6 Hdr:   | |IPv6 Hdr:   | |IPv6 Hdr:   |
|  DA=B      | |  DA=C1     | |  DA=D      | |  DA=E1     |
+------------+ +------------+ +------------+ +------------+
|SRH:        | |SRH:        | |SRH:        | |SRH:        |
|  SL=3,     | |  SL=2,     | |  SL=2,     | |  SL=1,     |
|(E2,E1,D,B) | |(E2,E1,D,B) | |(E2,E1,D,B) | |(E2,E1,D,B) |
+------------+ +------------+ +------------+ +------------+
|  Payload   | |  Payload   | |  Payload   | |  Payload   |
+------------+ +------------+ +------------+ +------------+

]]></artwork></figure>

</section>
<section anchor="masquerading-sr-proxy-1"><name>Masquerading SR Proxy</name>

<t>The SF redundant backup protection mechanism of the masquerading SR proxy is basically the same as the SF redundant backup protection method of the dynamic SR proxy, except that the SID of the bypass SFF needs to be with masquerading proxy behavior.</t>

<figure anchor="f18" title=""><artwork align="center" type="ascii-art" name=""><![CDATA[
                                    +------+    +------------+
                 +-----+            | SF2  |    |   Egress   |
                 | SF1 |            |Backup|    |  (SID=E1)  +-+
                 +--+--+            +---+--+    |(DT4 SID=E2)| |
                    |                   |       +------------+ |
+------------+      |                   |                      |
|  Ingress   |   +--+---+           +---+--+       +-------+   |
|(Classifier)+---+ SFF1 +-----------+ SFF2 +-------+  Node +---+
|  (SID=A)   |   +------+           +------+       |(SID=D)|
+------------+  Masquerading       End SID=C2      +-------+
                 proxy SID=B       Bypass masquerading
              Bypass proxy=SFF2     proxy SID=C1


]]></artwork></figure>

<t>As shown in <xref target="f18"/>, when SFF1 detects that it is unreachable from SFF1 to SF1, SFF1 does not remove the existing IPv6 header and SRH, and there are two process options:</t>

<t><list style="symbols">
  <t>Option 1: SFF1 adds another SRv6 header to the message. The SID[0] is bypass masquerading proxy SID.</t>
</list></t>

<t>After the message arrives at SFF2, SFF2 first removes the outer SRv6 header and restores the inner SRv6 message. Then, use the SID[0] of the SRH Segment List as the destination address to send the message to backup SF.</t>

<t><list style="symbols">
  <t>Option 2: SFF-1 replaces the IPv6 DA with the bypass masquerading proxy SID.</t>
</list></t>

<t>After the message arrives at SFF2, SFF2 changes the DA to SID[0] of the Segment list, and then sending the message to backup SF through the interface connecting to backup SF.</t>

<t>If SFF2 to SF2 are also unreachable, discard the message.</t>

<t>For option 1, the encapsulation of messages transmitted between SRv6 nodes from Ingress to Egress is shown in <xref target="f19"/>.</t>

<figure anchor="f19" title=""><artwork align="center" type="ascii-art" name=""><![CDATA[
Ingress->SFF1   SFF1->SFF2      SFF2->D        D->Egress
+------------+ +------------+ +------------+ +------------+
|IPv6 Hdr:   | |IPv6 Hdr:   | |IPv6 Hdr:   | |IPv6 Hdr:   |
|  DA=B      | |  DA=C2     | |  DA=D      | |  DA=E1     |
+------------+ +------------+ +------------+ +------------+
|SRH:        | | SRH:       | |SRH:        | |SRH:        |
|  SL=3,     | |  SL=1,     | |  SL=2,     | |  SL=1,     |
|(E2,E1,D,B) | | (C1,C2)    | |(E2,E1,D,B) | |(E2,E1,D,B)|
+------------+ +------------+ +------------+ +------------+
|  Payload   | |IPv6 Hdr:   | |  Payload   | |  Payload   |
+------------+ |  DA=D      | +------------+ +------------+
               +------------+
               | SRH:       |
               |  SL=2,     |
               |(E2,E1,D,B) |
               +------------+
               |  Payload   |
               +------------+

]]></artwork></figure>

<t>For option 2, the encapsulation of messages transmitted between SRv6 nodes from Ingress to Egress is shown in <xref target="f20"/>.</t>

<figure anchor="f20" title=""><artwork align="center" type="ascii-art" name=""><![CDATA[
Ingress->SFF1  SFF1->SFF2      SFF2->D        D->Egress
+------------+ +------------+ +------------+ +------------+
|IPv6 Hdr:   | |IPv6 Hdr:   | |IPv6 Hdr:   | |IPv6 Hdr:   |
|  DA=B      | |  DA=C1     | |  DA=D      | |  DA=E1     |
+------------+ +------------+ +------------+ +------------+
|SRH:        | |SRH:        | |SRH:        | |SRH:        |
|  SL=3,     | |  SL=2,     | |  SL=2,     | |  SL=1,     |
|(E2,E1,D,B) | |(E2,E1,D,B) | |(E2,E1,D,B) | |(E2,E1,D,B) |
+------------+ +------------+ +------------+ +------------+
|  Payload   | |  Payload   | |  Payload   | |  Payload   |
+------------+ +------------+ +------------+ +------------+

]]></artwork></figure>

</section>
<section anchor="srv6-aware-sf-1"><name>SRv6-aware SF</name>

<t>SF, which supports SRv6 functionality, serves as a SRv6 endpoint node and is arranged on the path of SRv6 Policy forwarding. Its reliability protection mechanism is identical to that of SRv6 endpoint nodes, and there is no need to add special processing in the SF redundant backup protection mechanism.</t>

</section>
</section>
<section anchor="sff-bypass-forwarding-method"><name>SFF Bypass forwarding Method</name>

<t>The SFF bypass forwarding method is applied to scenarios where backup SFF and backup SF are not deployed for SR Proxy.</t>

<t>As shown in <xref target="f21"/>, when SFF1 senses an SF fault or the route to SF is unreachable, it skips the service function node and directly forwards packets to downstream nodes.</t>

<figure anchor="f21" title=""><artwork align="center" type="ascii-art" name=""><![CDATA[
                 +-----+
                 | SF  |
                 +--+--+
                    |
+------------+      |                     +------------+
|  Ingress   |   +--+---+    +-------+    |   Egress   |
|(Classifier)+---+ SFF  +----+ Node  +----+  (SID=D1)  |
|  (SID=A)   |   +------+    |(SID=C)|    |(DT4 SID=D2)|
+------------+  Proxy SID=B  +-------+    +------------+

]]></artwork></figure>

<t>When SFF senses that SF is unreachable, it does not remove the IPv6 header, changes the destination address of the message to SID[SL], looks up the routing table, and forwards the message.</t>

</section>
<section anchor="the-service-flow-affiliation-maintenance-method"><name>The Service Flow Affiliation Maintenance Method</name>

<t>In the current SFC scenario, SF can be deployed on multiple VMs/containers, so that a VM/container can switch to another one when it is overloaded or failed. There is no specific configuration for SF, so the user's business will be distributed to one of the free VMs/containers randomly according to a set algorithm by the load balancer inside the SF.</t>

<t>For some specific users or services, the flow affiliation is to hope that the service flow can always be maintained in a certain VM/container to realize the optimal service, until the current VM/container is overloaded or failed before switching, rather than randomly distributed to different VM/container. Therefore, we need to configure the network device with relevant policies for the VM/container level and implement corresponding processing in the forwarding process to realize the maintenance of flow affiliation and session continuity. For example, we expect to use the VM/container in shared or exclusive mode, or prefer a certain type of VM/container such as GPU.</t>

<t>The service chain head node (SC) can determine a target SRv6 policy based on the service of the target user, and the SRv6 policy includes at least one logical device(VM or container) selection indication information corresponding to the target service. The information contains as follows: preferred VM or container and a selection strategy for this, an exclusive mode or a shared mode for the VM/container, and a selection strategy for the second best VM/container in case of failure of the preferred one.</t>

<t>According to the target SRv6 policy, an IPv6 message for the service to be transmitted is generated, including the SF SID with the VM/container selection indication information. Then SC sends a SRv6 policy message to the next hop node such as SFF, with the Function field and/or Argument field of the SF SID including said VM/container selection indication information, which can be recorded in the Function flavor parameter or the color attribute of the SRv6 Policy.</t>

</section>
</section>
<section anchor="changes-in-sr-proxy-behavior"><name>Changes in SR Proxy Behavior</name>

<t>In the SFF bypass forwarding method, when SR Proxy is processing local proxy SIDs, if it is unreachable to SF, the message cannot be discarded. Instead, SFF should modify the destination address of the message to SID[SL], search the routing table, and forward the message.</t>

<t>Among the reliability methods described in <xref target="mechanisms"/>, there are also differences in the processing of SR Proxy SIDs on backup/bypass SFF compared to the normal End.AS, End.AD, and End.AM SID behaviors defined in <xref target="I-D.ietf-spring-sr-service-programming"></xref>.</t>

<t>When the backup proxy or bypass proxy receives a message with two layers of SRv6 header encapsulation sent by the primary SFF, these two layers of SRv6 encapsulation need to be removed.</t>

<t>After receiving an IPv6 packet from the primary SFF, the backup and bypass proxies do not verify the consistency between DA and SID[SL].</t>

<t>There are three options for implementing the above functions:</t>

<section anchor="option-1-add-configuration-on-sr-proxy"><name>Option 1: Add configuration on SR proxy.</name>

<t>The SFC reliability protection methods proposed in this document only need to be processed locally on the SFF node, and can be configured on the SR proxy to distinguish whether the End.AS, End.AD, and End.AM SIDs on the backup/bypass SFF perform the above special processing.</t>

</section>
<section anchor="option-2-define-new-behavior-for-sr-proxy-sids"><name>Option 2: Define new behavior for SR proxy SIDs</name>

<t>Define new behavior for SR proxy SIDs for SFC reliability protection, corresponding to the End.AS, End.AD, and End.AM SIDs in the primary SFF. When sending messages from the primary SFF to the backup/bypass SFF, use an SR proxy SID with backup or bypass behavior.</t>

<t>As described in <xref target="behavior"/>.</t>

</section>
<section anchor="option-3-define-new-flavors-for-sr-proxy-sids"><name>Option 3: Define new flavors for SR proxy SIDs.</name>

<t>Define new flavors for End.AS, End.AD, and End.AM SIDs to indicate that additional SFF reliability processing is required when DA is these SIDs. When sending messages from the primary SFF to the backup/bypass SFF, use an SR proxy SID with a backup or bypass flavor.</t>

<t>As described in <xref target="flavor"/>.</t>

</section>
</section>
<section anchor="IANA"><name>IANA Considerations</name>

<section anchor="behavior"><name>SRv6 Endpoint behavior</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>

<texttable align="center">
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Description</ttcol>
      <ttcol align='left'>&#160;</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>TBA1-1</c>
      <c>End.ASBK</c>
      <c>- SFF Backup static proxy</c>
      <c>[This.ID]</c>
      <c>TBA1-2</c>
      <c>End.ADBK</c>
      <c>- SFF Backup dynamic proxy</c>
      <c>[This.ID]</c>
      <c>TBA1-3</c>
      <c>End.AMBK</c>
      <c>- SFF Backup masquerading proxy</c>
      <c>[This.ID]</c>
      <c>TBA1-4</c>
      <c>End.ASFB</c>
      <c>- SF backup static proxy</c>
      <c>[This.ID]</c>
      <c>TBA1-5</c>
      <c>End.ADFB</c>
      <c>- SF backup dynamic proxy</c>
      <c>[This.ID]</c>
      <c>TBA1-6</c>
      <c>End.AMFB</c>
      <c>- SF backup masquerading proxy</c>
      <c>[This.ID]</c>
      <c>TBA1-7</c>
      <c>End.ASBF</c>
      <c>- Bypass forwarding static proxy</c>
      <c>[This.ID]</c>
      <c>TBA1-8</c>
      <c>End.ADBF</c>
      <c>- Bypass forwarding</c>
      <c>[This.ID]</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>dynamic proxy</c>
      <c>&#160;</c>
      <c>TBA1-9</c>
      <c>End.AMBF</c>
      <c>- Bypass forwarding</c>
      <c>[This.ID]</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>masquerading proxy</c>
      <c>&#160;</c>
</texttable>

</section>
<section anchor="flavor"><name>SRv6 Endpoint Flavor</name>

<t>This document requests IANA to allocate the following codepoints for PSD flavor behaviors within the "SRv6 Endpoint Behaviors" registry in the "Segment Routing" registry group.</t>

<texttable align="center">
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Hex</ttcol>
      <ttcol align='left'>Endpoint behavior</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>TBA</c>
      <c>TBA</c>
      <c>End.AS with BAK</c>
      <c>[This.ID]</c>
      <c>TBA</c>
      <c>TBA</c>
      <c>End.AD with BAK</c>
      <c>[This.ID]</c>
      <c>TBA</c>
      <c>TBA</c>
      <c>End.AM with BAK</c>
      <c>[This.ID]</c>
      <c>TBA</c>
      <c>TBA</c>
      <c>End.AS with SFBK</c>
      <c>[This.ID]</c>
      <c>TBA</c>
      <c>TBA</c>
      <c>End.AD with SFBK</c>
      <c>[This.ID]</c>
      <c>TBA</c>
      <c>TBA</c>
      <c>End.AM with SFBK</c>
      <c>[This.ID]</c>
      <c>TBA</c>
      <c>TBA</c>
      <c>End.AS with BFWD</c>
      <c>[This.ID]</c>
      <c>TBA</c>
      <c>TBA</c>
      <c>End.AD with BFWD</c>
      <c>[This.ID]</c>
      <c>TBA</c>
      <c>TBA</c>
      <c>End.AM with BFWD</c>
      <c>[This.ID]</c>
</texttable>

</section>
</section>
<section anchor="Security"><name>Security Considerations</name>

<t>The security requirements and mechanisms described in <xref target="RFC8402"></xref>, <xref target="RFC8754"></xref> and <xref target="RFC8986"></xref> also apply to this document.</t>

<t>This document does not introduce any new security vulnerabilities.</t>

</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">



<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="RFC9256">
  <front>
    <title>Segment Routing Policy Architecture</title>
    <author fullname="C. Filsfils" initials="C." surname="Filsfils"/>
    <author fullname="K. Talaulikar" initials="K." role="editor" surname="Talaulikar"/>
    <author fullname="D. Voyer" initials="D." surname="Voyer"/>
    <author fullname="A. Bogdanov" initials="A." surname="Bogdanov"/>
    <author fullname="P. Mattes" initials="P." surname="Mattes"/>
    <date month="July" year="2022"/>
    <abstract>
      <t>Segment Routing (SR) allows a node to steer a packet flow along any path. Intermediate per-path states are eliminated thanks to source routing. SR Policy is an ordered list of segments (i.e., instructions) that represent a source-routed policy. Packet flows are steered into an SR Policy on a node where it is instantiated called a headend node. The packets steered into an SR Policy carry an ordered list of segments associated with that SR Policy.</t>
      <t>This document updates RFC 8402 as it details the concepts of SR Policy and steering into an SR Policy.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9256"/>
  <seriesInfo name="DOI" value="10.17487/RFC9256"/>
</reference>
<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>



    </references>

    <references title='Informative References' anchor="sec-informative-references">



<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="RFC8459">
  <front>
    <title>Hierarchical Service Function Chaining (hSFC)</title>
    <author fullname="D. Dolson" initials="D." surname="Dolson"/>
    <author fullname="S. Homma" initials="S." surname="Homma"/>
    <author fullname="D. Lopez" initials="D." surname="Lopez"/>
    <author fullname="M. Boucadair" initials="M." surname="Boucadair"/>
    <date month="September" year="2018"/>
    <abstract>
      <t>Hierarchical Service Function Chaining (hSFC) is a network architecture allowing an organization to decompose a large-scale network into multiple domains of administration.</t>
      <t>The goals of hSFC are to make a large-scale network easier to design, simpler to control, and supportive of independent functional groups within large network operators.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8459"/>
  <seriesInfo name="DOI" value="10.17487/RFC8459"/>
</reference>

<reference anchor="I-D.ietf-spring-sr-service-programming">
   <front>
      <title>Service Programming with Segment Routing</title>
      <author fullname="Ahmed Abdelsalam" initials="A." surname="Abdelsalam">
         <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 &quot;Tor Vergata&quot;</organization>
      </author>
      <date day="3" month="November" 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-12"/>
   
</reference>



    </references>

</references>



  </back>

<!-- ##markdown-source:
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
zIatdJJADVpp0lIDtwX1GoGCgVkfvdebO619idzB+JUS+34C9RU6HHv2bcG0
5hN6MwI3Q2cFxSXI6GyDwk7Wpbgkx1RWZeOmtzZb6m/PlT/aq02WOlJBTFtV
gbqp5LmaViJ48GNC+IB3tCLSXXKgqhFOeIrO6+/yGpjWvrZ960l2juDSPsKd
Qw5tDb0z9B+0g4qrZADjzTLZru8XAG8c5cvzbe279+ZzEqy/EDSJU21n8PK6
eMAGLo7CmbN/VV1I4vMgh5exsRYRwQx9V/OZ853s/EyPUhMCeLRgOA3SczQn
ChHKJWqc6qzKw0Jty7YEV2ZI2rYEuzuiT0OBDuvo8aGJCGPAGo1a0ZS3MU/c
zWrIsay5Qel66bb42V42y/nkKjV29xJb0uLlSC9ymsBDVSm9GdnW5ozdkrXT
L4mGNrJ94MiWJ6y0LLO2I1s72jK54NUsPIkqDwiMf8AMn+Abi5xOyCG7db8R
TWJ8jp+tC9XoK0vXK8uXm10pXX7FshWHuy938SgGXVnJm43FpzsY+oWJPDSH
+5pBzBX10528j9Ak2OMbRQHzp1oZxuzRkw1xcGeScZDSvw03cw0X0g1ATmet
RI7Qe0PDh6c2bMQYT1rsU22o5d+WnnVJHGSHfS/zJuAio0cBxWyK1xrZQP46
b+UI51cmqWoqu4gUnEO9QVs/i3964VQyT9QnwbJyztuaUqDSxLFUczVkdbq3
22l1KJhVc+/vOlqLKdSKz8+brN69Rcm3YSJ4rzPrmsz6czJzd7QvyuyByexo
TmYVK/xzMtu2mnmwZ2eWH3uqaOWczB5azazOrKqVczJ7ZDWzOrOqVs7J7LHd
mwcmszIZ7jS3OrMndm8uzKyoZW5m1otiRFEtKSuOrsxTWxu+VmUqJW1XpmyT
Dthx+XRH2bW59qhoiwpjfwBQg3LkueL1SV/7RAbl1jJeueHKY6o9KsdspKwY
I7Bb+nO28ywNyOW5/JgLrGyLlfRyw6K7jJPkP1Ri0Eu2knu7f88lb/XQstT9
tVIfrZX6RH/vQlmjK9X8iqmP1kqtZX7wc//qNb9i6qNlqQEGnMjBNEFYU4IC
+s0XTdupiArxoGLzZdXGRXUBx9vjg96T7ftdcJPp5+OH2+8pAT09ffLoPXux
uOA34yneGr7t4nDOF0JgDCSxPx0gJpoR1MvrdjENkQoipBbQalqr1SJj3vh/
vVIG3BuuAAA=

-->

</rfc>

