<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<?rfc toc="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc iprnotified="no"?>
<?rfc strict="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc category="std"
     docName="draft-varga-spring-preof-sid-02"
         ipr="trust200902"
         submissionType="IETF">
  <front>
    <title abbrev="PREOF SID">
    Deterministic Networking specific SID</title>

  <author role="editor" fullname="Balazs Varga" initials="B." surname="Varga">
        <organization>Ericsson</organization>
        <address>
         <postal>
          <street>Magyar Tudosok krt. 11.</street>
          <city>Budapest</city>
          <country>Hungary</country>
          <code>1117</code>
         </postal>
         <email>balazs.a.varga@ericsson.com</email>
        </address>
        </author>

    <author fullname="Ferenc Fejes" initials="F." surname="Fejes">
      <organization>Ericsson</organization>
      <address>
        <postal>
          <street>Magyar Tudosok krt. 11.</street>
          <city>Budapest</city>
          <country>Hungary</country>
          <code>1117</code>
        </postal>
        <email>ferenc.fejes@ericsson.com</email>
      </address>
    </author>

<!--
    <author fullname="James Bond" initials="J." surname="Bond">
      <organization>MI6</organization>
      <address>
        <email>james@bond.com</email>
      </address>
    </author>
-->

  <date />
  <workgroup>SPRING</workgroup>
     <keyword>SRv6</keyword>
     <keyword>Segment Routing</keyword>
     <keyword>IPv6 Segment Routing</keyword>
     <keyword>PREOF</keyword>
     <keyword>DetNet</keyword>

     <!-- Keywords will be incorporated into HTML output
        files in a meta tag but they have no effect on text or nroff
        output. If you submit your draft to the RFC Editor, the
        keywords will be used for the search engine. -->

  <abstract>
   <t>
     Replication, Elimination and Ordering functions of the DetNet Architecture 
	 require packet sequence information (i.e., sequence number) to provide 
	 service protection by the DetNet service sub-layer. This document 
	 extends SRv6 Network Programming <xref target="RFC8986"/> with new 
	 SR endpoint and transit behaviors to be performed on packets of DetNet 
	 flows to support the specific service protection treatment.
   </t>
  </abstract>
  </front>

 <middle>
 <section title="Introduction" anchor="sec_intro">
  <t>
     The DetNet Working Group has defined Packet Replication (PRF), Packet 
	 Elimination (PEF), and Packet Ordering (POF) Functions (represented as 
	 PREOF) to provide service protection by the DetNet service sub-layer 
	 <xref target="RFC8655"/>. This service protection method relies on copies 
	 of the same packet sent over multiple maximally disjoint paths and uses 
	 sequencing information to eliminate duplicates before delivered to its 
	 destination. 
  </t>
  <t>
     DetNet over an SRv6 data plane can provide a solution to transport 
	 sequencing information within a SID. This document describes a 
	 DetNet-specific SID (SID = Segment Identifier, <xref target="RFC8402"/>) 
	 and a set of related packet processing rules inside an SRv6 domain. 
	 The DetNet-specific SID provides Flow-ID and Sequence-Number information 
	 for the DetNet service sub-layer functions (i.e., PREOF). 
  </t>
  <t>
     The usage of DetNet-specific SID provides a native IPv6 data plane for 
	 DetNet networks and supports the implementation of PREOF functionalities 
	 on IPv6-only DetNet nodes. It is using native SRv6 technology and does 
	 not require additional tunneling or implementation of other protocol 
	 stack(s) (e.g., MPLS).
  </t>
 </section> <!-- end of introduction -->

<section title="Terminology">
 <section title="Terms Used in This Document">
  <t>
   This document uses the terminology established in the DetNet architecture
   <xref target="RFC8655"/> and in the SRv6 Network Programming
   <xref target="RFC8986"/>. The reader is assumed
   to be familiar with that document and its terminology.
  </t>
 </section>

 <section title="Abbreviations">
  <t>
   The following abbreviations are used in this document:
   <list style="hanging" hangIndent="14">
    <t hangText="ARG">Arguments.</t>
    <t hangText="DetNet">Deterministic Networking.</t>
    <t hangText="FUNCT">Function.</t>
    <t hangText="LOC">Locator.</t>
    <t hangText="PEF">Packet Elimination Function.</t>
    <t hangText="POF">Packet Ordering Function.</t>
	<t hangText="PREOF">Packet Replication, Elimination and Ordering Functions.</t>
    <t hangText="PRF">Packet Replication Function.</t>
    <t hangText="SeqNum">Sequence Number.</t>   </list>
  </t>
 </section>

 <section title="Requirements Language">
  <t>
    The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
    "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
    "OPTIONAL" in this document are to be interpreted as described in
    BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and
    only when, they appear in all capitals, as shown here.
  </t>
 </section>
 
</section>  <!-- end of terminology -->

<!-- ===================================================================== -->

<section anchor="detnet-sid" title="DetNet-specific SID">
  <t>
     In SRv6, a SID represents a 128-bit value containing the following 
	 three parts <xref target="RFC8986"/>: 
	 <list style="symbols">
         <t>Locator (LOC): first part of the SID with most significant bits 
		 and represents a specific SRv6 node. </t>
         <t>Function (FUNCT): the portion of the SID that is local to the 
		 owner node and designates a specific SRv6 function (network 
		 instruction) that is executed locally on a particular node 
		 (specified by Locator). </t>
         <t>Arguments (ARG): optional field and represents optional argument(s) 
		 to the function. </t>
     </list>
  </t>
  <t>
     For PREOF processing, two arguments are needed:
	 <list style="numbers">
         <t>Flow-ID: defines which DetNet flow the packet belongs to (what is 
		 used to determine which PREOF instance has to be used on a node). 
		 Its size is 20 bits for the DetNet MPLS data plane 
		 <xref target="RFC8986"/> and same size is appropriate for 
		 DetNet IP data plane as well.</t>
		 <t>Sequence Number: defines the sequencing information, it is created 
		 at the DetNet edge node (or by the first PRF node) and used by PEF/POF 
		 functionalities. For DetNet MPLS data plane the following sizes are 
		 defined: 0/16/28 bits <xref target="RFC8964"/>.</t>
     </list>
  </t>
  <t>
     The required size for these two arguments are maximum 48 bits.
  </t>
  <t>
     The explicit format of DetNet-specific SID is network addressing design 
	 specific. PREOF specific parameters are encoded as follows:
	 <list style="symbols">
         <t>LOC: specifies the DetNet Relay node (same allocation rule 
		 applies as for any SRv6-enabled node).</t>
         <t>FUNCT: a single value represents all PREOF instances of a 
		 DetNet Relay node. </t>
         <t>ARG: Contains the Flow-ID and the Sequence Number parameters. </t>
     </list>
  </t>
  <t>
     Note: if Function=PREOF, Arg=0 is also a meaningful value and does 
	 not refer to the lack of arguments.
  </t>
  <t>
     The DetNet-specific SID must be the last segment in an SR Policy and it 
	 is associated with the PREOF functionality!
  </t>
  <t>
     The following packet processing rules are defined as a new set of 
	 SRv6 SID behaviors regarding the DetNet-specific SID: (i) End.DPREOF, 
	 (ii) H.Encaps.PREOF, (iii) H.Encaps.PREOF.Red, (iv) 
	 H.Encaps.PREOF.L2, and (v) H.Encaps.PREOF.L2.Red.
  </t>
</section>  <!-- DetNet-specific SID -->

<section anchor="SRv6-Endpoint" title="SRv6 endpoint behaviors">

    <t> 
	This section describes the PREOF specific behaviors that can be associated
	with a SID.
    </t> 

 <figure title="PREOF Endpoint Behavior" anchor="PREOF-End">
 <artwork align="center"><![CDATA[
+-------------+--------------------------------------------------+
| End.DPREOF  | Endpoint with decapsulation and PREOF Processing |
+-------------+--------------------------------------------------+]]>
 </artwork></figure>

 <section anchor="End-PREOF" title="End.DPREOF: Endpoint with PREOF"> 
    <t>

        When a node "N" receives a packet whose IPv6 DA is "S" and "S" is a 
		local End.DPREOF SID, "N" does the following:
    </t>

        <artwork name="" type="" align="left" alt=""><![CDATA[
S01. When an SRH is processed {
S02.   If (Segments Left != 0) {
S03.    Send an ICMP Parameter Problem message 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
S04.   }
S05.   Extract the ARG part of the SID
S06.   Remove the outer IPv6 header with all its extension headers
S07.   Forward the exposed payload and the ARG part to the PREOF 
       functionality
S08. }
       ]]></artwork>

 </section>  <!-- end of End.DPREOF -->
</section>  <!-- end of SRv6 Endpoint behaviors -->


<section anchor="SRv6-Headend" title="SR Policy Headend Behaviors">

    <t> 
	This section describes a set of SRv6 Policy Headend 
	<xref target="RFC8402"/> behaviors.
    </t> 


<figure title="PREOF specific SR Policy Headend Behaviors" anchor="PREOF-Encap">
<artwork align="center"><![CDATA[
+-----------------------+--------------------------------------------------+
| H.Encaps.PREOF        | SR Headend with PREOF Encapsulation              |
+-----------------------+--------------------------------------------------+
| H.Encaps.PREOF.Red    | H.Encaps with Reduced PREOF Encapsulation        |
+-----------------------+--------------------------------------------------+
| H.Encaps.PREOF.L2     | H.Encaps.PREOF Applied to Received L2 Frames     |
+-----------------------+--------------------------------------------------+
| H.Encaps.PREOF.L2.Red | H.Encaps.PREOF.Red Applied to Received L2 Frames |
+-----------------------+--------------------------------------------------+]]>
 </artwork></figure>

 <section anchor="H-Encaps-PREOF" title="H.Encaps.PREOF: SR Headend with PREOF"> 
    <t> 
        When a node "N" receives a packet P=(A, B) identified as a DetNet Flow. 
		B is neither a local address nor SID of "N". It executes the DetNet 
		Flow related PREOF function(s), resulting in one or more member flow 
		(P1=(A, B), P2=(A, B), ...) with related parameters ([Flow-ID1, SeqNum], 
		[Flow-ID2, SeqNum], ...).
    </t>
    <t>
        Node "N" is configured with an IPv6 address "T" (e.g., assigned to its 
		loopback). "N" steers the egress packet P1 into an SRv6 Policy with a 
		Source Address T and a segment list SP1=&lt;S11, S12, S13&gt;, where 
		S13 is a DetNet-specific SID (LOC+FUNCT) with 0 as ARG.
    </t>
    <t>
        The H.Encaps.PREOF encapsulation behavior is defined as follows 
		(SA: source address, DA: destination address):
    </t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
S01. Push an IPv6 header with its own SRH
     Set the ARG part of the LAST SID in the segment list
S02. Set outer IPv6 SA = T and outer IPv6 DA to the first SID
     in the segment list
S03. Set outer Payload Length, Traffic Class, Hop Limit, and
     Flow Label fields
S04. Set the outer Next Header value
S05. Decrement inner IPv6 Hop Limit or IPv4 TTL
S06. Submit the packet to the IPv6 module for transmission to S11
       ]]></artwork>
    <t>
        After the H.Encaps.PREOF behavior, P1, and P2 respectively look like:
	 <list style="symbols">
         <t>
		 (T, S11) (S13, S12, S11; SL=2) (A, B), note: S13.ARG=Flow-ID1, 
		 SeqNum </t>
         <t>(T, S21) (S23, S22, S21; SL=2) (A, B), note: S23.ARG=Flow-ID2, 
		 SeqNum </t>
     </list>
    </t>
    <t>
        The member flow packet is encapsulated unmodified (with the exception 
		of the IPv4 TTL or IPv6 Hop Limit that is decremented).
    </t>	
    <t>
        The push of the SRH MAY be omitted when the SRv6 Policy only contains 
		one segment and there is no need to use any flag, tag, or TLV. In such 
		cases the outer destination address is the DetNet-specific SID.
    </t>	
 </section>  <!-- end of H.Encaps.PREOF -->

 <section anchor="H.Encaps.PREOF.Red" title="H.Encaps.PREOF.Red: H.Encaps.PREOF with Reduced Encapsulation"> 
    <t>
        The H.Encaps.PREOF.Red behavior is an optimization of the 
		H.Encaps.PREOF behavior. 
    </t>
    <t>
        H.Encaps.PREOF.Red reduces the length of the SRH by excluding the 
		first SID in the SRH of the pushed IPv6 header. The first SID is only 
		placed in the Destination Address field of the pushed IPv6 header.
    </t>
    <t>
        After the H.Encaps.PREOF.Red behavior, P1, and P2 respectively look like:
	 <list style="symbols">
         <t>(T, S11) (S13, S12; SL=2) (A, B), note: S13.ARG=Flow-ID1, SeqNum </t>
         <t>(T, S21) (S23, S22; SL=2) (A, B), note: S23.ARG=Flow-ID2, SeqNum </t>
     </list>
    </t>
 </section>  <!-- end of H.Encaps.PREOF.Red -->

 <section anchor="H.Encaps.PREOF.L2" title="H.Encaps.PREOF.L2: H.Encaps.PREOF Applied to Received L2 Frames"> 
    <t>
        The H.Encaps.PREOF.L2 behavior encapsulates a received Ethernet frame 
		and its attached VLAN header, if present, in an IPv6 packet with an 
		SRH. The Ethernet frame becomes the payload of the new IPv6 packet.
    </t>
    <t>
        The H.Encaps.PREOF.L2 encapsulation behavior is similar to 
		H.Encaps.PREOF but sets an Ethernet specific outer Next Header and 
		lacks the TTL/Hop Limit related action. H.Encaps.PREOF.L2 is defined 
		as follows:
    </t>

        <artwork name="" type="" align="left" alt=""><![CDATA[
S01. Push an IPv6 header with its own SRH
     Set the ARG part of the LAST SID in the segment list
S02. Set outer IPv6 SA = T and outer IPv6 DA to the first SID
     in the segment list
S03. Set outer Payload Length, Traffic Class, Hop Limit, and
     Flow Label fields
S04. Set the outer Next Header value
S05. <N/A>
S06. Submit the packet to the IPv6 module for transmission to S11
       ]]></artwork>

    <t>
        The Next Header field of the SRH MUST be set to 143.
    </t>	
    <t>
        The push of the SRH MAY be omitted when the SRv6 Policy only contains 
		one segment and there is no need to use any flag, tag, or TLV.
    </t>	    
	<t>
        The encapsulating node MUST remove the preamble (if any) and frame 
		check sequence (FCS) from the Ethernet frame upon encapsulation, and 
		the decapsulating node MUST regenerate, as required, the preamble and 
		FCS before forwarding the Ethernet frame.
    </t>	  
 </section>  <!-- end of H.Encaps.PREOF.L2 -->

 <section anchor="H.Encaps.PREOF.L2.Red" title="H.Encaps.PREOF.L2.Red: H.Encaps.PREOF.L2 with Reduced Encapsulation"> 
    <t>
        The H.Encaps.PREOF.L2.Red behavior is an optimization of the 
		H.Encaps.PREOF.L2 behavior. 
    </t>
    <t>
        H.Encaps.PREOF.L2.Red reduces the length of the SRH by excluding the 
		first SID in the SRH of the pushed IPv6 header. The first SID is only 
		placed in the Destination Address field of the pushed IPv6 header.
    </t>
    <t>
        The push of the SRH MAY be omitted when the SRv6 Policy only contains 
		one segment and there is no need to use any flag, tag, or TLV.
    </t>
 </section>  <!-- end of H.Encaps.PREOF.L2.Red -->

</section>  <!-- end of SR Policy Headend Behaviors -->

<section title="DetNet-specific SID related counters">
  <t>
     PREOF implementation may provide counters per DetNet flow. However, in 
	 order to be inline with the intention of RFC8986 (section 6. Counters), 
	 its recommendation may apply on the DetNet-specific SID and the above 
	 described set of SR Behaviors. It means, a node supporting DetNet-specific 
	 SID should implement a pair of traffic counters (one for packets and one 
	 for bytes) per local SID entry, for traffic that matched that SID and was 
	 processed successfully (i.e., packets that generate ICMP Error Messages 
	 or are dropped are not counted). The retrieval of these counters from 
	 MIB, NETCONF/YANG, or any other data structure is outside the scope of 
	 this document. 
  </t>
</section>  <!-- end of Counters -->

<!-- ===================================================================== -->


<section title="Security Considerations">
  <t>
     DetNet PREOF related security considerations are described in 
	 section 3.3 of <xref target="RFC9055"/>. There are no additional 
	 related security considerations originating from this document.
  </t>
  <t>
     SRv6 Network Programming related security considerations are described in 
	 section 9 of <xref target="RFC8986"/>. There are no additional 
	 related security considerations originating from this document.
  </t>
</section>


<section anchor="iana" title="IANA Considerations">
  <t>
   This document requires registration of End.DPREOF behavior in 
   "SRv6 Endpoint Behaviors" sub-registry of "Segment Routing Parameters" 
   registry. IANA is requested to make one new assignments from the First 
   Come First Served portion of the registry as follows:
  </t>

      <t><figure>
          <artwork><![CDATA[ 
 Value | Hex   | Endpoint Behavior | Reference  | Change Controller
 ------+-------+-------------------+------------+------------------
 TBD1  | xTBD1 | End.DPREOF        | [This.I-D] | IETF
]]></artwork>
        </figure></t>
  
</section>

<section anchor="acks" title="Acknowledgements">
 <t>
   Authors extend their appreciation to Janos Farkas, Istvan Moldovan and
   Miklos Mate for their insightful comments and productive discussion that 
   helped to improve the document.
  </t>
</section>


<section title="Appendix A. Illustrations">
 <t>
   This appendix shows how the described End.DPREOF mechanisms can
   be used in an SRv6 network.
  </t>
  
 <figure title="Example Topology" anchor="ref-detnet">
 <artwork align="center"><![CDATA[

                   +----+ Link3       +----+ 
                   |    |----->-------|    | Link6
              +->--| N3 |----->-------| E5 |--->--+
              |    +----+ Link4       +----+      |
              | Link1                   |         |
+---+       +----+                      |       +----+       +---+
|src|--->---| R1 |                  +->-+       | E6 |--->---|dst|
+---+       +----+                  |           +----+       +---+
              | Link2               | Link7       | 
              |    +-__-+         +----+          | 
              +->--| N4 |--->-----| R2 |----->----+
                   +----+ Link5   +----+ Link8

_
N: non-SRv6 IPv6 node
N: SRv6-capable node
R: Node with Replication Function (PRF)
E: Node with Elimination Function (PEF)
L: Link between nodes
]]>
</artwork></figure>
  
  <t>
      In the reference topology:
  <list style="symbols">
       <t> Nodes N3, R1, R2, E5 and E6 are SRv6-capable nodes. </t>
       <t> Nodes R1, R2, E5 and E6 are PREOF nodes. </t>
       <t> Nodes N4 is an IPv6 node that is not SRv6-capable. </t>
       <t> Node j has an IPv6 loopback address 2001:db8:L:j::/128. </t>
	   <t> A SID at node j with locator block 2001:db8:K::/48 and function U
           is represented by 2001:db8:K:j:U::. </t>
	   <t> 2001:db8:K:j:P:: is explicitly allocated as the End.DPREOF SID at 
	       node j.  For example, 2001:db8:K:2:P:: represents End.DPREOF at node
		   R2. </t>
	   <t> 2001:db8:K:j:Xin:: is explicitly allocated as the End.X SID at 
	       node j towards neighbor node i via the nth link between nodes i 
		   and j.  For example, 2001:db8:K:3:X51:: represents End.X at node N3
		   towards node E5 via link3 (the first link between nodes N3 and E5).
		   Similarly, 2001:db8:K:3:X52:: represents the End.X at node N3 
		   towards node E5 via link4 (the second link between nodes N3 and 
		   E5). </t>
  </list>
  </t>

  <t>
   If the src node sends a packet to the dst node for which per packet 
   redundancy is configured, then the nodes with PREOF functions provide the 
   required replication or elimination functions. For instance, in the example in
   <xref target="ref-detnet"/>:
  <list style="symbols">
       <t> Node src sends a UDP packet as follows:
	   (2001:db8:src::1, 2001:db8:dst::1, NH = UDP)(UDP payload). </t>
       <t> Node R1, which is an SRv6-capable PREOF node, identifies the flow
	   the packet belongs to. As replication is configured for the given flow, 
	   R1 performs the replication action and intends to send the packet to the next PREOF 
	   nodes (E5 and R2). These nodes are reachable via SRv6, so R1 performs 
	   H.Encaps.PREOF(.Red) on the replicas with a path specific SRH. The 
	   argument part of the End.DPREOF SID involves the Flow-ID and the 
	   SeqNum. Specifically, one replica is sent on link-1 towards E5
	   (2001:db8:L:1::, 2001:db8:K:3:X51::) (2001:db8:K:5:P:arg::, 2001:db8:K:3:X51::, 
	   SL=1, NH = IPv6) (2001:db8:src::1, 2001:db8:dst::1, NH = UDP)(UDP payload)
	   and the other replica is sent on link-2 towards R2
	   (2001:db8:L:1::, 2001:db8:K:2:P:arg::, NH = IPv6) (2001:db8:src::1, 
	   2001:db8:dst::1, NH = UDP)(UDP payload). </t>
	   <t> Node N3, which is an SRv6-capable node, performs the standard SRH
	   processing.  Specifically, it executes the End.X behavior indicated by 
	   the 2001:db8:K:3:X51:: SID and forwards the packet on link3 to node E5. </t> 
	   <t> Node N4, which is a non-SRv6-capable node, performs the standard 
	   IPv6 processing.  Specifically, it forwards the UDP packet based on 
	   DA 2001:db8:K:2:P:arg:: in the IPv6 header towards node R2. </t> 
       <t> Node R2, which is an SRv6-capable PREOF node, identifies the packet 
	   as targeted to the local PREOF function. R2 performs the decapsulation 
	   and forwards the exposed payload and the ARG part to the PREOF
       functionality. The PREOF function identifies the flow the packet belongs to. 
	   As replication is configured for the given flow, R2 performs the replication action and 
	   intends to send the packet to the next PREOF nodes (E5 and E6).
	   These nodes are reachable via SRv6, so R2 performs H.Encaps.PREOF(.Red) 
	   on the replicas with a path specific SRH. The argument part of the 
	   End.DPREOF SID involves the Flow-ID and the SeqNum. Specifically, 
	   one replica is sent on link-7 towards E5
	   (2001:db8:L:2::, 2001:db8:K:5:P:arg::, NH = IPv6) (2001:db8:src::1, 
	   2001:db8:dst::1, NH = UDP)(UDP payload)
	   and the other replica is sent on link-8 towards E6
	   (2001:db8:L:2::, 2001:db8:K:6:P:arg::, NH = IPv6) (2001:db8:src::1, 
	   2001:db8:dst::1, NH = UDP)(UDP payload). </t>
       <t> Node E5, which is an SRv6-capable PREOF node, identifies the packets 
	   as targeted to the local PREOF function. E5 performs the decapsulation 
	   and forwards the payload and the ARG part to the PREOF
       functionality. The PREOF function identifies the flow the packet belongs to. 
	   As elimination is configured for the given flow, the elimination action is performed on 
	   the packets received over Link3 and Link7. E5 intends to send the packet 
	   to the next PREOF node (E6), which is reachable via SRv6, so E6 performs 
	   H.Encaps.PREOF(.Red) with a path specific SRH. The argument part of the 
	   End.DPREOF SID involves the Flow-ID and the SeqNum. Specifically, 
	   the replica received first is sent on link-6 towards E6
	   (2001:db8:L:5::, 2001:db8:K:6:P:arg::, NH = IPv6) (2001:db8:src::1, 
	   2001:db8:dst::1, NH = UDP)(UDP payload). </t>
       <t> Node E6, which is an SRv6-capable PREOF node, identifies the packets 
	   as targeted to the local PREOF function. It performs the decapsulation 
	   and forwards the payload and the ARG part to the PREOF
       functionality. The PREOF function identifies the flow the packet belongs to. 
	   As elimination is configured for the given flow, the elimination action is performed on 
	   the packets received over Link6 and Link8. E6 is the last PREOF node, so
	   after the PREOF function it send the UDP packet towrds the destination.
	   Specifically, the replica received first is sent towards the destination
	   (2001:db8:src::1, 2001:db8:dst::1, NH = UDP)(UDP payload). </t>
  </list>
  </t>

 <t>
   The example topology shown in <xref target="ref-detnet"/> is constructed to 
   show the usage of PREOF-SID. Note that any of the links can be replaced with 
   an SRv6 network segment. The above described principles are applicable to 
   such more complex network topologies as well.
  </t>
</section>



</middle>
  
<back>
  <references title="Normative References">
   <?rfc include="reference.RFC.2119"?>
   <?rfc include="reference.RFC.8174"?> 
   <?rfc include="reference.RFC.8655"?>
   <?rfc include="reference.RFC.9055"?>
   <?rfc include="reference.RFC.8986"?>
   <?rfc include="reference.RFC.8964"?>
   <?rfc include="reference.RFC.8402"?>
  </references>
 </back>

 
 
</rfc>
