<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc category="std" docName="draft-ietf-spring-sr-redundancy-protection-08"
     ipr="trust200902">
  <front>
    <title abbrev="SRv6 for Redundancy Protection">SRv6 for Redundancy
    Protection</title>

    <author fullname="Xuesong Geng" initials="X." surname="Geng">
      <organization>Huawei Technologies</organization>

      <address>
        <postal>
          <street/>

          <city/>

          <code/>

          <country>China</country>
        </postal>

        <email>gengxuesong@huawei.com</email>
      </address>
    </author>

    <author fullname="Mach(Guoyi) Chen" initials="M." surname="Chen">
      <organization>Huawei Technologies</organization>

      <address>
        <postal>
          <street/>

          <city/>

          <code/>

          <country>China</country>
        </postal>

        <email>mach.chen@outlook.com</email>
      </address>
    </author>

    <author fullname="Pablo Camarillo Garvia" initials="P."
            surname="Camarillo">
      <organization>Cisco Systems</organization>

      <address>
        <postal>
          <street/>

          <city/>

          <region/>

          <code/>

          <country>Spain</country>
        </postal>

        <email>pcamaril@cisco.com</email>
      </address>
    </author>

    <author fullname="Gyan Mishra" initials="G." surname="Mishra">
      <organization>Verizon Inc.</organization>

      <address>
        <postal>
          <street/>

          <country/>
        </postal>

        <email>gyan.s.mishra@verizon.com</email>
      </address>
    </author>

    <author fullname="Balazs Varga" initials="B." surname="Varga" role="editor">
      <organization>Ericsson</organization>

      <address>
        <postal>
          <street/>

          <country/>
        </postal>

        <email>balazs.a.varga@ericsson.com</email>
      </address>
    </author>

<!--    <author fullname="Ferenc Fejes" initials="F." surname="Fejes">
      <organization>Ericsson</organization>

      <address>
        <postal>
          <street/>

          <country/>
        </postal>

        <email>ferenc.fejes@ericsson.com</email>
      </address>
    </author>
-->

    <date />

    <workgroup>SPRING Working Group</workgroup>

    <abstract>
      <t>Redundancy Protection is a generalized protection mechanism to
      achieve high reliability for service provided in Segment Routing
      networks. The mechanism uses the "Live-Live" methodology, i.e., 
	  multiple copies of the data packets are sent on different paths 
	  to provide protection. This
      document introduces one new SRv6 Segment Endpoint Behavior to provide replication and
      elimination functions on specific network nodes by leveraging SRv6
      Network Programming capabilities.</t>
    </abstract>
  </front>

  <middle>
    <section title="Introduction">
      <t>Redundancy Protection is a generalized protection mechanism to
      achieve the high reliability for service provided in a Segment Routing
      (SR) network. Specifically, packets of flows are replicated at a 
	  replication network node into two or more copies, which are transported 
	  via different protections paths in parallel. 
	  On the elimination network node, the multiple copies are received, 
      redundant packets are eliminated, and only a single copy of the packet is 
	  forwarded. </t>
	  
	  <t>This mechanism is commonly referred to as "Live-Live" as data traffic is 
	  forwarded on the protection paths simultaneously and therefore it provides a 
	  packet level protection. In case of redundancy protection, there is no need to perform 
	  switchover between primary and backup paths as data packets are sent simultaneously 
	  on multiple protection paths. Connectivity is provided until at least one protection path 
	  remains operationel. </t>

	  <t>One new SRv6 Segment Endpoint Behavior is introduced to provide the 
	  redundancy protection functions (i.e., replication and/or elimination) on
      specific network nodes by leveraging SRv6 Network Programming capabilities. </t>

      <t>Depending on the Service Level Objective of a service and the network characteristics 
	  (topology, link/node availability, BER of links, etc.) redundancy protection can be used alone or 
	  together with other protection mechanism like TI-LFA. Detailed design rules of Redundancy Protection
	  (e.g., location of replication and elimination functions, number of used protection paths, routes of 
	  protection paths) are scenario specific and out of scope in this document. </t>
	  
      <t>Redundancy protection provides ultra reliable protection to many
      services, for example DetNet flows, Cloud VR/Game, IPTV service and other type of
      video services, high value private line service etc. <!-- In this document,
      redundancy protection is applied to point-to-point services. The
      mechanism for point-to-multipoint services is out of the scope of
      this document. ***To be discussed*** as new version supports p2mp scenarios as well. --> </t>
    </section>

    <section title="Terminology ">
      <t/> 

      <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 title="Terminology and Conventions ">
        <t>SR: Segment Routing</t>

        <t>SRv6: Segment Routing over IPv6</t>

        <t>SID: Segment Identifier</t>

        <t>BSID: Binding SID</t>

        <t>RSID: Redundancy SID</t>

        <t>R-node: Redundancy node participating in the service protection.</t>

        <t>Rep node: R-node doing replication. A network element that replicates incoming packets for parallel delivery.</t>

        <t>Elm node: R-node doing elimination. A network element that eliminates duplicates to forward a single copy.</t>

        <t>RedInst: Redundancy instance, flow-specific redundancy function on the R-node.</t>

        <t>FID: Flow Identification</t>

        <t>SeqNum: Sequence Number</t>
      </section>
    </section>

    <section title="Redundancy Protection in Segment Routing Scenario">

      <section title="Redundancy Node Concept">
      <t>Redundancy nodes are interconnected by SRv6 tunnels used to encapsulate 
	  the protected flow. Flow specific redundancy actions on a redundancy node
	  are triggered by the Redundancy SID (RSID) and the actions are defined by 
	  the Redundancy Policy. The Redundancy Policy contains entries for each flow
	  for which the R-node provides redundancy protection. The replicated 
	  flow parts between the R-nodes are referred as member flows. </t>  
	  
	   <t>There are two basic types of redundancy actions applied on the protected 
	   flow: (1) replication and (2) elimination . A flow has one or more actions
	   defined in its Redundancy Policy Entry. The flow related redundancy instance 
	   (RedInst) has flow specific states (e.g., action type, action order, 
	   ingress/egress member flow specific parameters, identifiers). </t>
      </section> <!-- Redundancy Node Concept -->

      <section title="RSID and Meta Data to Support Redundancy Protection">
      <t>To support the redundancy protection function, flow identification (FID)
      and sequence number (SeqNum) information are added to the member flow packets 
	  in the RSID. They are used at downstream R-nodes when their redundancy actions 
	  are executed. </t>
	  
	  <t>FID identifies one specific member flow on an R-Node and has 
	  local significance. Allocation methods and signalling of FID values are
	  out of scope in this document. They can be allocated for example by a 
	  centralized controller or can be allocated and advertised by the R-node. 
	  BGP, PCEP or Netconf protocols can facilitate the advertisement and distribution 
	  of flow identification information among controller and R-nodes. FID MUST be 
	  included in the RSID.</t>
	  
	  <t>SeqNum distinguishes the packets within a flow by specifying the order of
      packets. Unlike the FID, which remains constant for all packet in a given member 
	  flow, the SeqNum changes with each packet. SeqNum MUST be included in the RSID.</t>

     <t>
     The explicit format of Redundancy SID (RSID) is network addressing design 
	 specific. Redundancy specific parameters are encoded as follows:
	 <list style="symbols">
         <t>LOC: specifies the redundancy node (same allocation rule 
		 applies as for any SRv6-enabled node).</t>
         <t>FUNCT: a single value represents the redundancy function of a 
		 redundancy node. </t>
         <t>ARG: Contains the FID and the SeqNum parameters. </t>
     </list>
     </t>
     <t>RSID MUST support containing a FID of 20 bits.</t>  
     <t>RSID MUST support containing a SeqNum of 16 bits. </t>  
     <t>The ARG part of the RSID MUST contain first the FID immediatelly followed 
	 by the SeqNum. Remaining LSB of the ARG part MUST be filled with zeros. </t>  
     <t>
	 For example, if a network uses /80 for LOC+FUNC, then the remaining 48 bits
	 are enough to carry a 20-bit FID and a maximal size SeqNum field (28-bit) 
	 defined for DetNet flows in <xref target="RFC8964"/>.
     </t>  
     <t>
     Note: if Function=RSID, Arg=0 is also a meaningful value and does 
	 not refer to the lack of arguments. It is meaning that the packet belongs to a flow
	 having FID=0 and its SeqNum=0.	 
     </t>  
     <t>
     Note2: Encoding the FID and SeqNum as Arguments of the SID implies 
     that when the RSID is in the IPv6 DA, the DA changes on a per packet basis 
	 for the redundancy protected flow, and it may alter the ECMP hashing. 
	 This can be avoided for example by using additional node specific SIDs 
	 before the RSID (e.g., End) or by excluding those bits from ECMP hashing.
     </t>
    </section> <!-- RSID and Meta Data to Support Redundancy Protection -->

    <section title="Redundancy Policy">
<!--      <t>Redundancy Policy is a variation of SR Policy to conduct the replicas
      to multiple disjoint paths for redundancy protection. It extends SR
      policy <xref target="I-D.ietf-spring-segment-routing-policy"/> to
      include more than one active and parallel ordered lists of segments
      between redundancy node and merging node, and all the ordered lists of
      segments are used at the same time to steer each copy of flow into
      different disjoint paths.</t>
-->	  
      <t>A Redundancy SID (RSID) MUST have a related Redundancy Policy. The Redundancy 
	  Policy MUST contain entries for each member flow for which the R-node provides 
	  redundancy protection. An entry MUST contain the flow specific actions and their 
	  parameters. </t>  
	  
	  <t>
	  The following summarizes the information that is needed in the Redundancy Policy 
	  entries: 
	  <list style="symbols">
         <t>Ingress member flow(s) identification information (e.g., FID). </t>
         <t>Redundancy action parameters (e.g., Action type, RedInst, SeqNum length, Algorithm, Action pipeline). </t>
         <t>Egress member flow(s) identification information (e.g., RSID+FID used by the downstream R-node). </t>
         <t>Egress member flow(s) redundancy path parameters (e.g., ordered list of segments associated with a 
		    member flow). </t>
      </list>
	  The first and the last R-nodes needs additional information:
	  <list style="symbols">
         <t>Ingress flow matching information on the first R-node (e.g., 5-tuple of the served flow). </t>
         <t>Egress forwarding information on the last R-node (e.g., which VRF/VSI to use for forwarding). </t>
      </list>
	  </t>	  

      <t>Various options for ingress flow matching are defined for example in <xref target="RFC8939"/>. 
	  They can be used on the first R-node. </t>  	  
	  
      <t>Using SR Policy desribed in <xref target="RFC9256"/> for the definition of an egress member flow 
	  redundancy path is out of scope here and left for further study. </t>  	  
    </section> <!-- Redundancy Policy -->


      <section title="Redundancy Protection Scenario Example">
      <t>Figure 1 shows an example of redundancy protection used in an SRv6
      domain. </t>
      <t><figure>
          <artwork align="center"><![CDATA[
           |                                              |
           |<--------------- SRv6 Domain ---------------->|
           |                                              |
           |                    +-----+                   |
           |              +-----+  R3 +-----+             |
           |              |     +-----+     |             |
        +-----+        +--+--+           +--+--+       +-----+ 
 -------+  R1 +--------+ Rep |           | Elm +-------+  R2 +-------
        +-----+        +--+--+           +--+--+       +-----+
                          |     +-----+     |             
                          +-----+  R4 +-----+  
                                +-----+
]]></artwork>

          <postamble>Figure 1: Example topology</postamble>
        </figure></t>

	  <t>R1, R2, R3, R4, Rep and Elm are SR-capable nodes. Rep and Elm are 
	  redundancy nodes (R-node). When a flow is sent into the SRv6 domain, the process is:</t>

      <t>1) R1 receives the traffic flow and encapsulates packets with a list
      of segments destined to R2, which is instantiated as an ordered list of
      SRv6 SIDs.</t>

      <t>2.1) When the packet flow arrives at Rep node (an R-node configured for replication), 
	  each packet is replicated into two copies. </t>
	  
      <t>2.2) Meta data information including flow identification (FID) and
      sequence number (SeqNum) are added to the copies. FID is used to identify the specific 
	  flow (and the related RedInst) on the downstream R-node, and SeqNum distinguishes 
	  the packet sequence within a flow. </t>
	  
	  <t>2.3) Each copy of the packet is encapsulated with a new path specific segment list, 
	  which represents different forwarding paths towards the downstream R-node. One copy is 
	  forwarded over R3 and the other over R4. The path is provisioned for example by a controller.</t>

      <t>3) The multiple replicas go through different paths until they reach
      the next R-node i.e., the Elm node in this example. The Elm node is configured with an elimination 
	  action for the flow. The first received copy of each packet is forwarded, and the redundant packets 
	  are eliminated. Furthermore, the redundancy policy entry of the flow specifies that the non-eliminated 
	  packets are forwarded without the meta data to the R2 node. </t>

      <t>When there is any failure or packet loss in one path, the service transmission 
	  continues through the other path non-disruptively. No interaction is needed between the R-nodes.</t>

      <t>Sometimes, out-of-order packets may occur since service packets
      are recovered from different forwarding paths. In this case, the Elm node
      or other network nodes downstream to the Elm node may include a
      reordering function to guarantee in-order delivery of packets.
	  Reordering is implementation specific and out of the scope of this document. </t>

      <t>Note: a possible reordering function is described in <xref target="RFC9550"/>.</t>

      <t>Note: the jitter caused by random packet loss can be minimized, if the protection
      paths have similar path forwarding delay.</t>
      </section> <!-- Redundancy Protection Scenario Example -->
    </section>  <!-- Redundancy Protection in Segment Routing Scenario -->

    <section title="SRv6 Segment Behavior to Support Redundancy Protection">
      <t>To achieve the packet replication and elimination functions, 
	  the following packet processing rules are defined as a new set of 
	  SRv6 SID behaviors regarding the Redundancy SID: (i) End.R, 
	  (ii) H.Encaps.R, (iii) H.Encaps.R.Red, (iv) H.Encaps.R.L2, and 
	  (v) H.Encaps.R.L2.Red.</t>
	  
	  <t>Note, that the algorithm used by the Redundancy Functionality is not 
	  within the scope of this document. For example, <xref target="IEEE8021CB"/> 
	  provides such algoritm.</t>

      <section title="Redundancy Segment Endpoint Behavior">
	  
	<t> 
	This section describes the Redundancy specific behaviors that can be associated
	with a SID.
    </t> 

 <figure title="Redundancy Endpoint Behavior" anchor="End.R">
 <artwork align="center"><![CDATA[
+-------------+-------------------------------------------------------+
| End.R       | Endpoint with decapsulation and Redundancy Processing |
+-------------+-------------------------------------------------------+]]>
 </artwork></figure>
	  
        <t>Redundancy Segment is the identifier of packets on which service protection needs to be
        executed on the redundancy node. It has associated Redundancy Policy(s), instantiation of which provides
        service protection action(s). 
		<!-- This is similar to the relationship
        between Binding SID and SR Policy <xref
        target="I-D.ietf-spring-segment-routing-policy"/>, --> The use of
        Redundancy Segment triggers the Redundancy Policy instantiation
        on the redundancy node.</t>

        <t>Redundancy Segment is associated with service instructions,
        indicating the following operations:</t>

        <t><list style="symbols">
            <t>Steers the packet into the corresponding redundancy instance.</t>

            <t>Encapsulates flow identification and sequence number in SRv6 packets.</t>

            <t>Packet replication/elimination and segment encapsulation/decapsulation based on the
            information of the flow-specific redundancy policy entry, e.g., the number of replication
            copies, an ordered list of segments with a topological instruction.</t>
          </list>In this document, a new behavior End.R for Redundancy Segment
        is defined. An instance of a redundancy SID is associated with a
        redundancy policy B and a source address A. In the following
        description, End.R behavior is specified with the encapsulation mode.</t>

  <t>
     For redundancy protection processing, two arguments are needed:
	 <list style="numbers">
         <t>Flow-ID (FID): defines which flow the packet belongs to (what is 
		 used to determine which Redundancy instance has to be used on a node). </t>
		 <t>Sequence Number (SeqNum): defines the sequencing information, it is created 
		 at the first Redundancy node and used by replication and elimination 
		 functionalities. </t>
     </list>
  </t>

        <t>Note: DetNet has defined a service protection for the DetNet service 
		sub-layer <xref target="RFC8655"/>. The packet replication and elimination
		service protection method was defined for DetNet MPLS data plane using 
		20 bits for FID and the following SeqNum sizes: 0/16/28 bits 
		<xref target="RFC8964"/>. </t>

        <t>In order to eliminate the redundant packets of a flow, the elimination
        node utilizes sequence number to evaluate the redundant status of a
        packet. The mechanism used for elimination is implementation-specific and
		outside the scope of this document.</t>

        <t>R-nodes are interconnected by SRv6 tunnels used to encapsulate the protected 
		flow and they hold flow states regarding the served traffic flow(s). From the 
		segment routing architecture perspective <xref target="RFC8402"/> R-nodes
		are ingresss node for the served member flows. Flow-specific states are present 
		only on R-nodes. Nodes between the R-nodes do not have flow-specific states. </t> 

        <t>As elimination node needs to maintain the state of served flows, a centralized
        controller MUST have a knowledge of elimination nodes capability. It MUST NOT
        provision the redundancy policy to a redundancy node when the
        computation result goes beyond the flow recovery capability of the elimination
        node. The capability advertisement is outside the scope of this document.</t>

  <t>
     The Redundancy SID (RSID) MUST be the last segment in an SR Policy and it 
	 is associated with the Redundancy functionality.
  </t>

        <t>When an SRv6-capable node (N) receives an IPv6 packet whose
        destination address matches a local IPv6 address instantiated as an
        SRv6 SID (S), and S is a Redundancy SID, N does:</t>

        <t><figure>
            <artwork><![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.  Proceed to process the next header in the packet
S06. }
]]></artwork>
          </figure></t>

  <t>
     When processing the Upper-Layer header of a packet matching a FIB entry
	 locally instantiated as an End.R SID, N does the following:
  </t>

        <t><figure>
            <artwork><![CDATA[
S01. If (Upper-Layer header type == 
       ( 4(IPv4) OR 41(IPv6) OR 143(Ethernet) ) 
	   {
S02.   Extract the ARG part of the SID
S03.   Remove the outer IPv6 header with all its extension headers
S04.   Forward the exposed payload, type and the ARG part to the 
       Redundancy functionality
S05. } Else {
S06.    Process the Upper Layer Header
S07. }
]]></artwork>
          </figure> Upper Layer Header processing of End.R SID is same as 
		  defined in Section 4.1.1 of <xref target="RFC8986"/>.</t>

      </section> <!-- Redundancy Segment Endpoint Behavior -->


<section anchor="SRv6-Headend" title="SR Policy Headend Behaviors">

    <t> 
	This section describes a set of SRv6 Redundancy Policy Headend 
	<xref target="RFC8986"/> behaviors.
    </t> 


<figure title="Redundancy specific SR Policy Headend Behaviors" anchor="R-Encap">
<artwork align="center"><![CDATA[
+--------------------+--------------------------------------------------+
| H.Encaps.R         | SR Headend with Redundancy Encapsulation         |
+--------------------+--------------------------------------------------+
| H.Encaps.R.Red     | H.Encaps with Reduced Redundancy Encapsulation   |
+--------------------+--------------------------------------------------+
| H.Encaps.R.L2      | H.Encaps.R Applied to Received L2 Frames         |
+--------------------+--------------------------------------------------+
| H.Encaps.R.L2.Red  | H.Encaps.R.Red Applied to Received L2 Frames     |
+--------------------+--------------------------------------------------+]]>
 </artwork></figure>

 <section anchor="H-Encaps-R" title="H.Encaps.R: SR Headend with Redundancy"> 
    <t> 
        When a node "N" receives a packet P=(A, B) identified as a Flow for redundancy. 
		B is neither a local address nor SID of "N". 
    </t> 
    <t> 		
		Node "N" executes the 
		Flow related Redundancy function(s), resulting in one or more member flows 
		(P1=(A, B), P2=(A, B), ...) with related parameters ([Flow-ID1, SeqNum], 
		[Flow-ID2, SeqNum], ...).
    </t>
	<t>
		Note: The number of resulting member flows depends on the configuration
		of the Flow related function(s). For example, in case of elimination 
		there is only one member flow.
	</t>
    <t>
        Node "N" is configured with an IPv6 address "T" (e.g., assigned to its 
		loopback).
	</t>
    <t>
		Node "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 Redundancy SID (LOC+FUNCT) with 0 as ARG.
    </t>
    <t>
        The H.Encaps.R encapsulation behavior for one member flow 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 with FID and SeqNum
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.R behavior, P1, and P2 (if exists) 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 Redundancy SID.
    </t>	
 </section>  <!-- end of H.Encaps.R -->

 <section anchor="H.Encaps.R.Red" title="H.Encaps.R.Red: H.Encaps.R with Reduced Encapsulation"> 
    <t>
        The H.Encaps.R.Red behavior is an optimization of the 
		H.Encaps.R behavior. 
    </t>
    <t>
        H.Encaps.R.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.R.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.R.Red -->

 <section anchor="H.Encaps.R.L2" title="H.Encaps.R.L2: H.Encaps.R Applied to Received L2 Frames"> 
    <t>
        The H.Encaps.R.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.R.L2 encapsulation behavior is similar to 
		H.Encaps.R but sets an Ethernet specific outer Next Header and 
		lacks the TTL/Hop Limit related action. H.Encaps.R.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 with FID and SeqNum
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.R.L2 -->

 <section anchor="H.Encaps.R.L2.Red" title="H.Encaps.R.L2.Red: H.Encaps.R.L2 with Reduced Encapsulation"> 
    <t>
        The H.Encaps.R.L2.Red behavior is an optimization of the 
		H.Encaps.R.L2 behavior. 
    </t>
    <t>
        H.Encaps.R.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.R.L2.Red -->

    </section>  <!-- end of SR Policy Headend Behaviors -->
    </section> <!-- SRv6 Segment Behavior to Support Redundancy Protection -->


    <section title="IANA Considerations">
<!--      <t>This document requires registration of End.R behavior 
	  in "SRv6 Endpoint Behaviors" sub-registry of "Segment Routing
      Parameters" registry.</t>
-->
      <t>IANA maintains the "SRv6 Endpoint Behaviors" sub-registry of the
      "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.R             | [This.I-D] | IETF]]></artwork>
        </figure></t>
    </section> <!-- IANA -->



    <section title="Implementation Description">
     <t>
	 Note to the RFC Editor: this section have to be removed before publication.
	 </t>
     <t>
	 This section records the status of known implementations of the
	 Redundancy Protection defined by this specification at the time of posting of
     this Internet-Draft, and is based on a proposal described in
     RFC 7942.  The description of implementations in this section is
     intended to assist the IETF in its decision processes in
     progressing drafts to RFCs.  Please note that the listing of any
     individual implementation here does not imply endorsement by the
     IETF.  Furthermore, no effort has been spent to verify the
     information presented here that was supplied by IETF contributors.
     This is not intended as, and must not be construed to be, a
     catalog of available implementations or their features.  Readers
     are advised to note that other implementations may exist.
	 </t>
     <t>
	 According to RFC 7942, "this will allow reviewers and working
     groups to assign due consideration to documents that have the
     benefit of running code, which may serve as evidence of valuable
     experimentation and feedback that have made the implemented
     protocols more mature.  It is up to the individual working groups
     to use this information as they see fit".
	 </t>
     <t>
     Known implementations:
	 <list style="symbols">
      <t>The organization responsible for the implementation: open sourced.</t>
      <t>Link to the implementation: https://github.com/EricssonResearch/xdpfrer</t>
      <t>Brief general description: this software is an experimental implementation 
	  of the IEEE 802.1CB FRER standard and SRv6 Redundancy SID. It replicates packets 
	  over redundant network paths to protect against network failures. The implemented 
	  functions are called replication (generates copies and send them over disjoint 
	  paths) and elimination (accepts the first copy and drops the duplicates).</t>
      <t>The implementation's level of maturity: prototype. </t>
      <t>Coverage: RSID and Redundancy Policy are fully implemented. Flow 
	  identification on ingress node limited to FlowLabel. Maximum SID Depth (MSD) is 6.</t>
      <t>Version compatibility: v08</t>
      <t>Licensing: BSD 2-Clause "Simplified" License, see 
	  https://github.com/EricssonResearch/xdpfrer/blob/main/LICENSE</t>
      <t>Implementation experience: detailed description at implementation link.</t>
      <t>Contact information: Ferenc Fejes ferenc.fejes at ericsson.com </t>
      <t>Date: 2026.07.10.</t>
     </list>
    </t>	 
    </section> <!-- Implementation Description -->


    <section title="Operational Considerations">
     <t>This section addresses the operational and management aspects of SRv6 Redundancy 
	 Protection, covering deployment, configuration, monitoring, and maintenance guidance 
	 for operators managing this functionality in order to effectively integrate this 
	 capability into their networks while maintaining security, performance, and 
	 consistency. This is a non-exhaustive list of operational considerations.</t>

    <section title="Installation and Initial Setup">
	 <t>Redundancy Protection should operate with reasonable defaults: 
	 	 <list style="symbols">
      <t>Redundancy Protection function: R-nodes should default to pass-through mode
	  until explicitly configured with an RSID and the related Redundancy Policy. </t>
      <t>FID Field Size: Default to 20 bits as specified in Section 3.2. </t>
      <t>SeqNum Field Size: Default to 16 bits as specified in Section 3.2., supporting
	  more bits for advanced scenarios. </t>
      <t>Application: Redundancy policies should not be applied until explicitly
	  provisioned by a management entity or control plane, preventing unintended 
	  replication or elimination of traffic. </t>
     </list>
	 </t>
	 <t>Operators must be able to verify that configured defaults match actual running
	 configurations for troubleshooting and consistency assurance. </t>
    </section> <!-- X -->


    <section title="Migration Path and Deployment">
	 <t> Redundancy Protection integrates incrementally into existing SRv6 networks:
	  <list style="symbols">
      <t>Coexistence: R-nodes support both Redundancy Endpoint behavior (End.R) and 
	  existing SRv6 behaviors. Traffic not served by the Redundancy Protection 
	  function is unaffected. </t>
      <t>Staged Deployment: Operators may deploy to a subset of nodes or flows 
	  before network-wide adoption. </t>
      <t>Configuration Rollback: Operators should have the ability to disable 
	  redundancy policies on R-nodes without disrupting other services, enabling 
	  rapid rollback if issues arise during deployment. </t>
      </list>
	 </t>
    </section> <!-- X -->

    <section title="Protocol Dependencies and Network Impact">
	 <t>Dependencies: All R-nodes must support SRv6. Accurate time 
	 synchronization (i.e., NTP) is recommended. External systems (PCE, 
	 SDN controllers) are expected to compute (disjoint) protection paths. </t>
	 <t> Resource Consumption:
	  <list style="symbols">
      <t>Bandwidth: Redundancy Protection duplicates traffic (i.e., 100% 
	  overhead per additional protection path). </t>
      <t>R-node Processing: Replication and elimination consume CPU and 
	  memory. Operators must ensure flow count does not exceed R-node capacity. </t>
      <t>ECMP and Load Balancing Impact: Per-packet ARG changes in RSID may 
	  alter ECMP hashing. The impact can be mitigated by excluding ARG bits 
	  from hash computation or using node-specific SID(s) before RSID. </t>
      <t>Fast Reroute (FRR): Redundancy Protection can coexist with other 
	  protection mechanisms. Operators should carefully consider the 
	  interaction to avoid unnecessary resource usage. </t>
      </list>
	 </t>
	 <t>Traffic Pattern Changes: Using Redundancy Protection assumes sufficient 
	 path diversity. Monitoring should account for expected duplication 
	 patterns to avoid false security alarms. </t>
    </section> <!-- X -->

    <section title="Security Operations">
	 <t> Security operation related to redundancy proection functionality are:
	  <list style="symbols">
      <t>Indicators of Compromise: Security operators must account for 
	  simultaneous traffic on multiple paths. Sequence number analysis 
	  can detect replay attacks or anomalies. Implemented algorithms on
	  R-nodes should provide counters to allow such an analysis.  </t>
      <t>Logging: Replication/Elimination events, policy changes, and error 
	  conditions must be logged with timestamps for audit trails. </t>
      <t>Management Access Control: Use strong authentication, encrypted 
	  transport (TLS), and role-based access control (RBAC) for all 
	  management interfaces. </t>
      </list>
	 </t>
    </section> <!-- X -->

    <section title="Verifying Correct Operation">
	 <t> Operators should verify redundancy protection through several mechanisms:
	  <list style="symbols">
      <t>Redundancy Policy Status: Query active redundancy policy entries and 
	  served flows on each R-node is needed. </t>
      <t>Replication/Elimination Counters: Monitor the number of duplicate 
	  packets on a per flow basis. </t>
      <t>Path Verification: Confirm traffic follows intended protection 
	  paths via SRH inspection. </t>
      <t>Connectivity Tests: End-to-end connectivity testing for a served 
	  flow is needed e.g., for troubleshooting. </t>
      </list>
	 </t>
    </section> <!-- X -->

    <section title="Management Information and Data Models">
	 <t>The following manageable entities are described: Redundancy Node 
	 (R-node), Redundancy SID (RSID), Redundancy Policy, and Redundancy 
	 Instance (having per-flow state). </t>
	 <t> Standardized Technologies used for Redundancy Protection:
	  <list style="symbols">
      <t>YANG-based Management: Recommended for configuration and state via 
	  NETCONF <xref target="RFC6241"/> or RESTCONF <xref target="RFC8040"/>. This needs further work. </t>
      <t>Syslog: For operational events and error logging <xref target="RFC5424"/>. </t>
      <t>IPFIX: For flow-level statistics export <xref target="RFC7011"/>. </t>
      </list>
	 </t>
	 <t>YANG Data Model: A Device Model should distinguish between configuration 
	 data (policies, flow criteria), operational state (active flows, sequence 
	 numbers), and statistics (counters, performance metrics). The model must 
	 enforce valid SeqNum sizes and FID ranges and express relationships 
	 between policies, flows, and member flows. </t>
    </section> <!-- X -->

    <section title="Fault and Configuration Management">
	 <t> Fault Management:
	  <list style="symbols">
      <t>Monitor liveness via CFM tools and/or detecting packet arrival on protection paths. </t>
      <t>Track replication/elimination rates and sequence number gaps to identify path failures. </t>
      <t>Count malformed RSIDs to detect configuration errors. </t>
      <t>Generate alerts when approaching flow capacity limits. </t>
      </list>
	 </t>
	 <t>Configuration Management:
	  <list style="symbols">
      <t>Allow operators to define, modify, and delete redundancy policies. </t>
      <t>Support atomic multi-device configuration transactions. </t>
      <t>Enable configuration consistency verification across R-nodes. </t>
      <t>Persist configurations across device restarts. </t>
      </list>
	 </t>
    </section> <!-- X -->

    <section title="Performance and Accounting Management">
	 <t> The following tools are expected:
	  <list style="symbols">
      <t>Protocol Monitoring: Track replication rate, elimination rate,
	  out-of-order delivery rate, and packet loss via sequence number discontinuities. </t>
      <t>Device Monitoring: Monitor CPU utilization, memory consumption, and 
	  forwarding performance impact on R-nodes. </t>
      <t>Network Monitoring: Monitor link utilization on protection paths and 
	  path efficiency relative to direct routes. </t>
      <t>Service Monitoring: Measure flow-level metrics (throughput, latency, 
	  jitter) against SLA targets. </t>
      <t>Accounting: Collect usage statistics (protected flows, replicated bandwidth) 
	  for capacity planning, cost allocation, and trend analysis. </t>
      </list>
	 </t>
    </section> <!-- X -->

    <section title="Tooling Considerations">
	 <t> Operators should first assess whether existing management systems 
	 (NETCONF clients, syslog aggregators, monitoring platforms) can be 
	 adapted to support redundancy protection before developing new tools. 
	 New tooling development should focus only on functions existing tools 
	 cannot provide (e.g., specialized path computation and validation).
	 </t>
    </section> <!-- X -->
	  
    </section> <!-- Operational Considerations -->



    <section title="Security Considerations">
	  <t>Detailed security considerations for segment routing are cataloged in <xref target="RFC8402"/>, 
	  <xref target="RFC8754"/>, and <xref target="RFC8986"/>. General security considerations are described 
	  in <xref target="I-D.ietf-spring-srv6-security"/>.</t>
	
      <t>The introduction of Redundancy Segments in Segment Routing networks introduces new vectors 
	  for security threats that must be carefully mitigated.</t>

      <section title="Packet Duplication">
        <t>Redundancy protection intentionally replicates packets across multiple paths. Without proper 
		admission control or policy enforcement, an attacker could exploit this mechanism to amplify 
		traffic, overwhelming downstream links or merging nodes. The amplification can also magnify 
		denial-of-service attacks if unauthorized traffic reaches replication nodes. Amplification can
		also achieved by the attacker by blocking the elimination. </t>
        <t>The use of redundancy protection should be restricted to a trusted SR domain with controlled flows,
		i.e., rate-limiting and flow admission control at the ingress is employed. Redundancy protection 
		should be provisioned via authenticated and authorized controllers (e.g., PCEP with TLS). 
		</t>
      </section>

      <section title="Sequence Number Spoofing">
        <t>The Elm node relies on sequence numbers to de-duplicate packets. An attacker that can 
		inject or manipulate these sequence numbers could cause legitimate packets to be dropped 
		or reordered.</t>
		<t>Replay attacks also can affect the operation of redundancy protection. For example, a 
		rogue node, either the headend or a transit node, can cause pathological reordering, 
		intentionally delay packets, or duplicate packets to arrive much later. 
		The impact of such attacks is dependent on the algorithm used by the elimination instance, 
		however	algorithm are out of scope in this document.</t>
      </section>

      <section title="Information Disclosure">
        <t>Redundancy protection may involve topology-specific path selections that reveal operational 
		characteristics of the network (e.g., availability of disjoint paths).
		Statements of <xref target="RFC8402"/> on leaking explicit routing information through the 
		boundaries of the administered domain applies for redundancy protection specific information as well.
		</t>
<!--        <t>Such information SHOULD NOT be exposed outside the trusted SR domain. Control-plane 
		interactions involving Redundancy Segments SHOULD be encrypted and authenticated (e.g., BGP 
		with TCP-AO, PCEP over TLS).</t>     -->
      </section>

      <section title="State Exhaustion at Redundancy Node">
        <t>Redundancy nodes with elimination functionality need to maintain state (e.g., sequence 
		windows, buffering) for each redundancy protected flow. An attacker might attempt to create 
		many such flows to exhaust memory or processing capacity.</t>
        <t>By limiting the number of concurrent redundancy flows the R-node can protect its resources.
		Impact of resource exhaustion is dependent on the implemented method, however algorithms of 
		elimination are out of scope of this document.
		</t> 
<!--        <t>Redundancy nodes SHOULD limit the number of concurrent redundancy flows per source. Idle 
		timeout mechanisms MUST be implemented to garbage-collect stale state.</t>   -->
      </section>
	  
    </section>

    <section anchor="contributors"><name>Contributors</name>
      <contact initials="F." surname="Yang" fullname="Fan Yang">
        <organization showOnFrontPage="true">Huawei</organization>
        <address>
          <postal>
            <country>China</country>
          </postal>
          <email>shirley.yangfan@huawei.com</email>
        </address>
      </contact>
  
      <contact fullname="Ferenc Fejes" initials="F." surname="Fejes">
        <organization showOnFrontPage="true">Ericsson</organization>
        <address>
          <postal>
            <country>Hungary</country>
          </postal>
          <email>ferenc.fejes@ericsson.com</email>
        </address>
      </contact>
	  
    </section>

    <section title="Acknowledgements">
      <t>The authors would like to thank Bruno Decraene, Ron Bonica, James
      Guichard, Jeffrey Zhang, Adrian Farrel for their valuable
      comments and discussions.</t>
    </section>
	
	

<section title="Appendix A. Example">
 <t>
   This appendix shows how the described End.R 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 
E: Node with Elimination Function 
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 Redundancy 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.R SID at 
	       node j.  For example, 2001:db8:K:2:P:: represents End.R 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 Redundancy 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 Redundancy node, identifies the flow
	   the packet belongs to. As replication is defined by the Redundancy Policy for the given flow, 
	   R1 performs the replication action and intends to send the packet to the next 
	   R-nodes (E5 and R2). These nodes are reachable via SRv6, so R1 performs 
	   H.Encaps.R(.Red) on the replicas with a path specific SRH. The 
	   argument part of the End.R SID involves the Flow-ID and the 
	   SeqNum. </t> 
	   <t>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). </t>
	   <t>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 Redundancy node, identifies the packet 
	   as targeted to the local Redundancy function. R2 performs the decapsulation 
	   and forwards the exposed payload and the ARG part to the redundancy
       functionality. The redundancy function identifies the flow the packet belongs to. 
	   As replication is defined by the Redundancy Policy for the given flow, 
	   R2 performs the replication action and 
	   intends to send the packet to the next redundancy nodes (E5 and E6).
	   These nodes are reachable via SRv6, so R2 performs H.Encaps.R(.Red) 
	   on the replicas with a path specific SRH. The argument part of the 
	   End.R SID involves the Flow-ID and the SeqNum. </t> 
	   <t>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).</t> 
	   <t>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 Redundancy node, identifies the packets 
	   as targeted to the local redundancy function. E5 performs the decapsulation 
	   and forwards the payload and the ARG part to the redundancy
       functionality. The redundancy function identifies the flow the packet belongs to. 
	   As elimination is defined by the Redundancy Policy 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 redundancy node (E6), which is reachable via SRv6, so E6 performs 
	   H.Encaps.R(.Red) with a path specific SRH. The argument part of the 
	   End.R SID involves the Flow-ID and the SeqNum. </t> 
	   <t>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 redundancy node, identifies the packets 
	   as targeted to the local redundancy function. It performs the decapsulation 
	   and forwards the payload and the ARG part to the redundancy
       functionality. The redundancy function identifies the flow the packet belongs to. 
	   As elimination is defined by the Redundancy Policy for the given flow, the elimination action is performed on 
	   the packets received over Link6 and Link8. E6 is the last redundancy node, so
	   after the redundancy function it send the UDP packet towards 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 RSID. 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> <!-- Appendix A. Illustrations -->


	
  </middle>

  <back>
    <references title="Normative References">
      <?rfc include="reference.RFC.2119"?>

      <?rfc include="reference.RFC.8655"?>

      <?rfc include="reference.RFC.8754"?>

      <?rfc include="reference.RFC.8986"?>

      <?rfc include="reference.RFC.8964"?>

      <?rfc include="reference.RFC.8939"?>

      <?rfc include="reference.RFC.8174"?>

      <?rfc include='reference.RFC.8402'?>
	  
      <?rfc include='reference.I-D.ietf-spring-srv6-security'?>

      <?target ?>

      <?target ?>
    </references>

    <references title="Informative References">
      <?rfc include='reference.RFC.6241'?>	  
      <?rfc include='reference.RFC.8040'?>	  
      <?rfc include='reference.RFC.5424'?>	  
      <?rfc include='reference.RFC.7011'?>	  
      <?rfc include='reference.RFC.9550'?>	  
      <?rfc include='reference.RFC.9256'?>	  

        <reference anchor="IEEE8021CB" target="https://standards.ieee.org/standard/802_1CB-2017.html" quoteTitle="true" derivedAnchor="IEEE8021CB">
          <front>
            <title>IEEE Standard for Local and metropolitan area networks--Frame Replication and Elimination for Reliability</title>
            <author>
              <organization showOnFrontPage="true">IEEE</organization>
            </author>
            <date month="October" year="2017"/>
          </front>
          <seriesInfo name="DOI" value="10.1109/IEEESTD.2017.8091139"/>
          <refcontent>IEEE 802.1CB-2017</refcontent>
        </reference>

    </references>
  </back>
</rfc>
