<?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-xie-spring-srv6-multicast-00"
     ipr="trust200902">
  <front>
    <title abbrev="SRv6 Multicast: Approaches and Impacts">
    SRv6 Multicast: Approaches and Impacts to SRv6 Architecture</title>

    <author fullname="Jingrong Xie" initials="J." surname="Xie">
      <organization>Huawei Technologies</organization>
      <address>
        <postal>
          <street/>
          <city/>
          <code/>
          <country/>
        </postal>
        <email>xiejingrong@huawei.com</email>
      </address>
    </author>
    <author fullname="Xuesong Geng" initials="X." surname="Geng">
      <organization>Huawei Technologies</organization>
      <address>
        <postal>
          <street/>
        </postal>
        <email>gengxuesong@huawei.com</email>
      </address>
    </author>

    <date day="09" month="March" year="2023"/>

    <abstract>

   <t>Multicast was not originally supported with SR, as indicated in
   <xref target="RFC8402"/>: Segment Routing is defined for unicast.</t>

   <t>However, with the wide development and deployment of SR and SRv6
   technology, there have been proposals to develop SR-based multicast
   solutions, showing the interests to develop multicast solutions that
   facilitate incremental deployment based on SR and SRv6.</t>

   <t>This document examines two typical SRv6 multicast approaches and
   considers a number of different aspects to provide a framework for
   understanding.  The purpose is to help the working group
   and IETF community to understand and thus evaluate these possible impacts.</t>
   
    </abstract>

    <note 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>
    </note>
  </front>

  <middle>
    <section title="Introduction">
	
	<t>As observed in <xref target="I-D.mcbride-mboned-lessons-learned"/>, multicast was not originally supported with MPLS and that is a lesson learned in and of itself.
	The same lesson seems to be learned once again in SR more recently as the <xref target="RFC8402"/> indicates: Segment Routing is defined for unicast.
	</t>
	
	<t>However, with the wide development and deployment of SR technology, there have been proposals to develop SR-based multicast
     solutions, showing the interests to develop multicast solutions that facilitate incremental deployment based on SR.
     The lesson we learned seemes to be that, multicast should be simple by adapting appropriately as much as possible to the unicast technology a network has built on.
    </t>
   
	<t>Particularly note, SR is applicable to both MPLS and IPv6 data planes, named SR-MPLS and SRv6 seprately. 
	  SR-MPLS does not introduce any new behavior or any change in the way the MPLS data plane works.
	  SRv6, however, does introduce new behaviors defined for FIB Entry and appropriate IPv6 extention headers.
	  It had led to a new paradigm of SRv6 architecture named SRv6 Network Programming (SRv6-NP) <xref target="RFC8986"/>
	  and a suit of SRv6-specific standards like SRv6-VPN <xref target="RFC9252"/>, SRv6-OAM <xref target="RFC9259"/>, 
	  which are quite different from the MPLS data plane and SR-MPLS source routing concept in <xref target="RFC8402"/>.
	 </t>
	  
	 <t>With these observations, this document focus on SRv6 based multicast solutions.
	  It provides a framework for understanding the impacts and possible consequences more or less related to the SRv6 architecture 
	  by reviewing the following two typical SRv6 multicast solution approaches raised in IETF. </t>
	  
	  <t><list style="">
	   <t>Stateful approach <xref target="I-D.ietf-spring-sr-replication-segment"/>.</t>
	   <t>Stateless approach <xref target="I-D.lx-msr6-rgb-segment"/>.</t>
      </list></t>
      <t></t>
    </section>

    <section title="Terms and Abbreviations">
    <t>The following abbreviations are used in this document.</t>
    <t><list style="symbols">
      <t>SRv6: Segment Routing over IPv6 data plane as described in <xref target="RFC8986"/> etc.</t>
	  <t>SRv6-P2MP: The aforementioned stateful approach of SRv6 Multicast.</t>
	  <t>MSR6-BE: The aforementioned stateless approach of SRv6 Multicast.</t>
    </list></t>
    </section>

	
    <section title="Overview of the two SRv6 Multicast Solution Approaches">
	  <t>The following sections introduce the technologies analyzed in this document and describe some of their most important characteristics. </t>
	  
      <section title="SRv6-P2MP">
        <t>SRv6-P2MP defines an SRv6 SID "End.Replicate". </t>
		
		<t>The behavior associated with this type of SRv6 SID is named End.Replicate, and is provided with pseudo code like <xref target="RFC8986"/>.
		The basic behavior is this: When an IPv6 packet is received from an upstream SRv6 node with the destination address (active SID) being the End.Replicate SID, 
		the SRv6 node replicate the packet and send each copy of the packet to a downstream SRv6 node according to the "State" that has already built and associated with the End.Replicate SID.</t>
		
		<t>This kind of behavior, replicating a unicast packet and sending each packet to a downstream node, is different from what has been supported in MPLS and PIM, 
		and need a new forwarding procedure to be implemented (especially in hardware) based on SRv6. 
		Such kind of forwarding through a local state that is already built and associated with End.Replicate SID is considered to be practical.</t>
		
		<t>When the copy of the packet is sent to the downstream SRv6 node, the destination address is changed to the End.Replicate SID of the downstream SRv6 node.
		This action include a behavior that "change the DA en route" but without a routing header. </t>
		
		<t>To overcome the problem of "state explosion", SRv6-P2MP follows the the principle defined in MVPN <xref target="RFC6513"/> to allow multiple MVPN instances to use 
		a single P2MP Path by populating and sticking the End.Replicate SID of SRv6 nodes along the P2MP Path. 
		Each MVPN instance has an SRv6 VPN SID in the packet and SRv6-P2MP designs to use SRH to carry the SRv6 VPN SID in multicast. </t>
		
		<t>SRv6-P2MP is motivated to be an SRv6 multicast solution, where the deployment of the solution is intended to be an SRv6 network or SRv6 domain.
		The End.Replicate SID is an IPv6 address allocated from SRv6 Locator and thus re-use the operation mode of an SRv6 network. 
		The security mechanism depends on the SRv6 domain and thus re-use the security mode of an SRv6 network.</t>
		
		<t>The following diagram shows the whole progression of a customer multicast packet through an SRv6 network using SRv6-P2MP. </t>
      
      <t><figure align="left">
            <artwork><![CDATA[
                   
                 +-------------+    +--------------+
                 |S=PE1.Lopback|    |S=PE1.Lopback |
                 |D=P2.End.Rep |    |D=PE2.End.Rep |
                 +-------------+    +--------------+
                 |SRH[VPN SID] |    |SRH[VPN SID]  |
 +==========+    +=============+    +==============+    +==========+
 |(C-MC Pkt)| >> | (C-MC Pkt)  | >> | (C-MC Pkt)   | >> |(C-MC Pkt)|
 +==========+    +=============+    +==============+    +==========+
CE1-----------PE1------[P1]------P2----------------PE2------------CE2
                                /                             
                               /  
                              /     +--------------+
                             |      |S=PE1.Lopback |
                             |      |D=PE3.End.Rep |
                             |      +--------------+
                             |      |SRH[VPN SID]  |
                              \     +==============+    +==========+
                               \ >> | (C-MC Pkt)   | >> |(C-MC Pkt)|
                                \   +==============+    +==========+
                                 +------[P3]-------PE3------------CE3
                                                              

 S=PE1.Lopback: Loopback address of PE1 node.
 D=PE2.End.Rep: Destination address in IPv6 header. 
 SRH[VPN SID]:  VPN SID in IPv6 Segment Routing Header.
 (C-MC Pkt):    Customer MultiCast packet.
      ]]></artwork>
      </figure></t>

 
		
		
        <t></t>
      </section>
	  
	  <section title="MSR6-BE">
        <t>MSR6-BE defines an SRv6 SID "End.RGB". </t>
		
		<t>The behavior associated with this type of SRv6 SID is named End.RGB, and is provided with pseudo code like <xref target="RFC8986"/>.
		The basic behavior is this: When an IPv6 packet is received from an upstream SRv6 node with the destination address (active SID) being the End.RGB SID, 
		the SRv6 node replicate the packet and send each copy of the packet to a downstream SRv6 node according to the "BitString" that is carried in an IPv6 destination options header. </t>
		
		<t>This kind of behavior, replicating a unicast packet and sending each packet to a downstream node, is different from what has been supported in MPLS and PIM, 
		and need a new forwarding procedure to be implemented (especially in hardware) based on SRv6 and IPv6 extension header. 
		Such kind of forwarding through parsing the BitString is already defined in IETF [RFC8279] and [RFC8296], and has proven to be practical by multiple implemenations. </t>
		
		<t>When the copy of the packet is sent to the downstream SRv6 node, the destination address is changed to the End.RGB SID of the downstream SRv6 node. 
		This action include a behavior that "change the DA en route" but without a routing header.</t>

		<t>To overcome the problem of "state explosion", MSR6-BE follows the the principle defined in BIER-MVPN <xref target="RFC8556"/> to allow multiple MVPN instances to use 
		a single BitString forwarding paradigm. 
		Each MVPN instance has an SRv6 VPN SID in the packet and MSR6-BE designs to use the source address of an IPv6 header to carry the SRv6 VPN SID in multicast. </t>
		
		<t>MSR6-BE is motivated to be an SRv6 multicast solution, where the deployment of the solution is intended to be an SRv6 network or SRv6 domain.
		The End.RGB SID is an IPv6 address allocated from SRv6 Locator and thus re-use the operation mode of an SRv6 network. 
		The security mechanism depends on the SRv6 domain and thus re-use the security mode of an SRv6 network.</t>
		
		<t>The following diagram shows the whole progression of a customer multicast packet through an SRv6 network using MSR6-BE. </t>
      
      <t><figure align="left">
            <artwork><![CDATA[
                   
                 +-------------+    +--------------+
                 |S=PE1.Src.DT |    |S=PE1.Src.DT  |
                 |D=P2.End.RGB |    |D=PE2.End.RGB |
                 +-------------+    +--------------+
                 |[BitStr=0110]|    |[BitStr=0010] |
 +==========+    +=============+    +==============+    +==========+
 |(C-MC Pkt)| >> | (C-MC Pkt)  | >> | (C-MC Pkt)   | >> |(C-MC Pkt)|
 +==========+    +=============+    +==============+    +==========+
CE1-----------PE1------[P1]------P2----------------PE2------------CE2
             (BFIR)             /(BFR)        (BFER, BFR-id=2)
                               /  
                              /     +--------------+
                             |      |S=PE1.Src.DT  |
                             |      |D=PE3.End.RGB |
                             |      +--------------+
                             |      |[BitStr=0100] |
                              \     +==============+    +==========+
                               \ >> | (C-MC Pkt)   | >> |(C-MC Pkt)|
                                \   +==============+    +==========+
                                 +------[P3]-------PE3------------CE3
                                              (BFER, BFR-id=3)

 S=PE1.Src.DT:  Source address in IPv6 header as Upstream-assigned VPN SID.
 D=PE2.End.RGB: Destination address in IPv6 header. 
 [BitStr=0110]: BitString value in IPv6 Destination Options Header.
 (C-MC Pkt):    Customer MultiCast packet.
      ]]></artwork>
      </figure></t>

        <t></t>
      </section>

	  
    </section>

	
    <section title="Impacts and Consequences to SRv6 architecture">
	  
	  <section title="Stateless Principle in SRv6-Multicast">
        <t>As the Segment Routing(SR) <xref target="RFC8402"/> states that: SR supports per-flow explicit routing while maintaining per-flow state only at the ingress nodes to the SR domain.
		Stateless principle is a solid impression to understand the advantage of Segment Routing and therefore it is accepted as the evolution of traditional MPLS.
		The "stateless" characteristic is often understood as not need to maintain per-flow state on nodes other than edge nodes of a network domain.
		Traditional MPLS technology like LSP or P2MP LSP that are explicitly built through hop-by-hop signaling, as a contrast, is often recorgnized as "stateful", 
		especially when they are used for per-flow unicast or multicast delivery.
		</t>
		
		<t>The "stateful" technologies are widely recorgnized as not scaling well. 
		In MVPN <xref target="RFC6513"/>, the "aggregation" of carrying multiple multicast flows in a single P2MP tunnel is defined.
		There are two levels of aggregation: carry multiple flows of a VPN, and carry multiple flows of multiple VPNs, in an aggregated P2MP tunnel.
		Stateful approach like mLDP in MVPN may tend to use the first level of aggregation but still keep it compatible to the second level.
		Stateless approach like BIER in MVPN <xref target="RFC8556"/> tend to use the second level as base.
		</t>
		
		<t>Because of this stateless principle implied in SR, and the practice in MVPN architecture toward a scaling capability, 
		the SRv6-P2MP solution considers the "aggregation" capability in its design to avoid "state explosion" when scaling. </t>
		
		<t>MSR6-BE, on the other hand, was determined to reuse the IETF work of stateless multicast solution and combine it with SRv6 technology. </t>
		
		<t>It may be useful to bring the following as background to understand why MSR6-BE had not gain amount of attention by spring. 
		Early in the explorating of MSR6-BE, both BIER and SRv6 technology are not mature, and it may be considered to be more of BIER and less of SRv6.
		However after the BIER had become an IETF standard and BIER WG decided not to work on a solution to combine BIER and SRv6, 
		it seems to be a work that need to be discussed priorly in SRv6 view. </t>
		
      </section>
      
      <section title="VPN SID in SRv6-Multicast">
        <t>As mentioned above, "aggregation" of multicast services of multiple VPNs is architecturely needed not only in SR but also in MVPN.
		Technically, in order to support the "aggregation" between multiple MVPN instances, an VPN identifier is needed to identify the VPN a packet belongs to.</t>
        
		<t>Under MPLS data plane, upstream-assigned MPLS Label is widely adopted as the VPN identifier in a packet when encapsulating the packet with a P2MP tunnel <xref target="RFC6513"/>.
		This is different than unicast because multicast has multiple egress routers and therefore there is no single "downstream-assigned" MPLS label to be valid on multiple egress routers.</t>
		
		<t>Under SRv6 data plane, however, there is no easy way to inherit the MPLS concept and get an "Upstream-assigned SRv6 SID".		
		In fact, even in unicast, SRv6 VPN SID <xref target="RFC9252"/> is very different than SR-MPLS VPN SID. </t>
		
		<t>For multicast, no matter the End.Replicate or the End.RGB SID, the destination address in a packet is changed en route until it reach multiple egress SRv6 nodes.
		Because of these multiple egress SRv6 nodes have different SRv6 Locator, so there is no way to encode a single SRv6 VPN SID to be an active SID of multiple SRv6 nodes simultaneously.</t>
		
		<t><xref target="I-D.xl-bess-source-segment"/> provide a way to use source address in IPv6 header to distinguish an MVPN instance, and different source address will be used for different MVPN instance.
		Further, the source address used in IPv6 header is allocated from SRv6 locator as an SRv6 SID, and the behavior of such an IPv6 address to be an active SID is also defined.
		The concept is very similar to the "Upstream-assigned SRv6 SID" and may provide an alternative for further discussion about SRv6 multicast.</t>
      </section>
      
    <section title="SRv6 OAM in SRv6-Multicast">
        <t>As indicated in <xref target="RFC8986"/>, SRv6 smoothly inherits the Upper-layer processing of IPv6. 
		It also inherits the standard IPv6 ICMPv6 protocol as its Ping/Trace tool in <xref target="RFC9259"/>.
		However, the ICMPv6 protocol may no longer be available for the detecting of data-plane failures in SRv6 multicast solutions, 
		because the DA is changing en route in SRv6 multicast and therefore ICMPv6 checksum is no longer valid when a packet is received in the Leaf of a P2MP tree.</t>
		
		<t>A possible way to solve the problem, the SRv6 multicast may need to re-consider the OAM paradigm that have widely used in MPLS era, see <xref target="RFC8029"/>. 
		That is to say, it may need to limit its usage as a "P2MP tunnel" or "IPv6 encapsulation" technology, and built the OAM tool based on the tunnel.
		For example, the Echo request in Ping/Trace may be like this: (SRv6-Multicast tunnel encapsulation)(IPv6 header with destination address ::FFFF:127.0.0.1)(UDP)(Echo Request Msg Body).</t>
		
		<t></t>
      </section>
	  
    <section title="Deployment in SRv6 Domain with Hosts">
        <t>The SR architecture, especially SRv6, tends to extends its capability from routers inside a network to hosts that is managered together with the network.
		<xref target="RFC8754"/> gives many examples of deployment of SRv6 in a domain with hosts working as SRv6 nodes. </t>
		<t>Through the discussion in the Spring list, the SRv6-P2MP proposal does want to be effective in the case of such an SRv6 domain with hosts. </t>
		<t>The MSR6-BE proposal also considers to be effective in the case of such an SRv6 domain with hosts.</t>
		
		<t>However, the first challenge is that, UDP checksum is mandatory for IPv6 <xref target="RFC8200"/> and it has been the default behavior for usual Operaton-System (OS) available, 
		but the checksum will be invalid in SRv6 multicast solutions, no matter SRv6-P2MP or MSR6-BE, because of the "DA change en route" behavior they both have.
		That means that, an application may need to use IPv6 UDP datagrams with Zero UDP checksum per the <xref target="RFC6936"/>. </t>
		
		<t>Second thing is about OAM tool on hosts. As described in previous section, the ICMPv6 protocol in the Ping/Trace tool of a host is no longer available
		because of the "DA change en route" behavior, and thus the hosts may need to development new tools to support the "SRv6 domain with Hosts" scenario. </t>
		
		<t></t>
      </section>
	  
    <section title="Path Steering between SRv6-Multicast Nodes">
	    <t>As <xref target="RFC8402"/> implies, the art of SR is stateless Path Steering. 
		In SRv6-Multicast, it is also considered to use Stateless Path Steering between upstream and downstream nodes.</t>
		
		<t>In MSR6-BE proposal, the main extension to IPv6 is the BIER option defined in Destination Options Header (DOH). 
		When the Path steering between upstream and downstream nodes is desired, the SRH containing the SID list could be inserted before the DOH. </t>
		
		<t>In SRv6-P2MP proposal, however, insertion of an the SRH containing the SID list may cause 2 SRHs in an IPv6 packet because 
		the VPN SID is designed to be carried in an SRH already. This will break the restriction of <xref target="RFC8200"/>, 
		and thus an encapsulation method like H.Encaps or H.Encaps.Red have to be used when an VPN SID is already carried. 
		But when an VPN SID is not carried in an SRH of a packet, the insertion of SRH is possible as it will not cause a packet with 2 SRHs. </t>
		<t></t>
    </section>
	  
	  <section title="Encapsulation Cost">
	    <t>One may argue that, in the above situation of SRv6-P2MP, a new IPv6 header and SRH encapsulating could always be used to the received packet instead of insertion of a new SRH. 
		However, this will make the burden of encapsulation cost higher beyond that is normally accepted in multicast solution. 
		The document also hints that "Head node MAY optimize below encap and the encap of packet in a single encap" and shows that the encapsulation cost is a practical consideration.</t>
		
		<t>Encapsulation cost is also considered in MSR6-BE. When a penultimate node receives an MSR6-BE packet (a packet with IPv6 header and BIER option contained in DOH),
        it can use the "PSP" mechanism <xref target="RFC8986"/> to delete the DOH before it sends each copy of the packet to its downstream node (the ultimate node). 
		With this PSP mechanism applying to DOH, the encapsulation cost is reduced. </t>
        
		<t>It may also be useful to understand that, the SRv6 is more solid a base of MSR6-BE than BIER, 
		because the IPv6 header with SRv6 SIDs in both destination address and source address is still in a packet 
		while the DOH carrying the BIER option is no longer in the packet when traveling by applying the aforementioned PSP. </t>

		<t>In a case when multicast feature is enabled and deployed only on edge nodes but not on any intermediate nodes, 
		both the MSR6-BE and SRv6-P2MP will become an SRv6-based Ingress-Replication. 
		MSR6-BE will be less costly in encapsulation because it still uses IPv6 header but do not need IPv6 extension header (thus BitString) by applying the aforementioned PSP, 
		while SRv6-P2MP will need an extra SRH to carry the VPN identifier.</t>
		
      </section>
	  
      <section title="Security">
	    <t>When a packet is replicated and sent by the SRv6 multicast node to multiple downstream nodes (for example, 100 downstream nodes), 
		and all the downstream nodes found that the Hop Limit of the packet is 1,
		these nodes may send an ICMPv6 error messages back to the originator of the SRv6 multicast packet simultaneously. 
		This is a potential security risk that SRv6 multicast may cause and it is very different from SRv6 unicast.
		Such kind of difference between multicast and unicast had been considered when the IP Multicast was designed early in the <xref target="RFC1112"/>: 
		"An ICMP error message (Destination Unreachable, Time Exceeded, Parameter Problem, Source Quench, or Redirect) 
		is never generated in response to a datagram destined to an IP host group."</t>
   
		<t>It is expected that such situation can be avoided in SRv6 multicast, but the necessary change is better to happen only on "SRv6 multicast nodes" and
		normal "IPv6 nodes" do not need to change either in hardware or in software.</t>
		
		<t>On the other hand, the Ping/Trace tool as described above may want to be useful in the network. 
		This may require that, the SRv6-multicast node can differentiate the two cases by checking the upper-layer header when encountering the Hop Limit threshold. </t>
		
		<t>For example, the following policy may be considered on every SRv6 multicast node.</t>
		<t><list style="symbols">
          <t>A Hop Limit value (for example, value 10) is configured as a threshold for SRv6-multicast encapsulated customer multicast packet only.
		  When an SRv6 multicast node receives a packet, it checks the upper-layer header and recongnizes the packet being a customer multicast packet, 
		  it then drop the packet when Hop Limit value is less or equal to the threshold, 
		  to avoid the "IPv6 node" along the path to the downstream SRv6-multicast node to generate an ICMPv6 error message and sent back. 
		  This is similar to the GTSM mechanism <xref target="RFC5082"/> but need to be deployed on SRv6-multicast nodes only.</t>
		  
		  <t>A policy is configured to enable the traceroute of the SRv6 multicast data plane.
		  When an SRv6 multicast node receives a packet, it checks the upper-layer header and recongnizes the packet being a traceroute packet, 
		  it then does not apply the Hop Limit threshold to this kind of traceroute packet. 
		  When this policy is not enabled, the traceroute of the SRv6 multicast data plane may not work propely due to the applying of the above one. </t>
        </list></t>
        
        <t>As a further review, to apply the ping tool to detect the data plane failure in SRv6-P2MP, an Ingress node who initializes the ping request may 
        have to expect all the egress nodes to response. In a case when the number of egress nodes is large, the simultaneous responses from numerous egress nodes 
        may impact the Ingress node greatly and become a security concern. </t>
        
        <t>On the other hand, to apply the ping or trace tool to detect the data plane failure in MSR6-BE, an Ingress node who initializes 
        the ping/trace request can specify a portion of the egress nodes, and thus may relieve the impact and the security concern.</t>
        
      </section>
	  
    </section>
	
    
    <section title="Security Considerations">
      <t>TBD.</t>

      <t/>
    </section>

    <section title="IANA Considerations">
      <t>N/A</t>
      <t/>
    </section>

    <section title="Acknowledgements">
      <t>TBD.</t>
      <t/>
    </section>
  </middle>

  <back>
    <references title="Normative References">
      <?rfc include='reference.RFC.2119'?>
      <?rfc include='reference.RFC.8174'?>
    </references>
    <references title="Informative References">
      <?rfc include='reference.RFC.1112'?>
      <?rfc include='reference.RFC.4364'?>
	  <?rfc include='reference.RFC.5082'?>
	  <?rfc include='reference.RFC.6513'?>
	  <?rfc include='reference.RFC.6514'?>
	  <?rfc include='reference.RFC.6936'?>
	  <?rfc include='reference.RFC.8029'?>
	  <?rfc include='reference.RFC.8200'?>
	  <?rfc include='reference.RFC.8402'?>
	  <?rfc include='reference.RFC.8556'?>
	  <?rfc include='reference.RFC.8754'?>
      <?rfc include='reference.RFC.8986'?>
      <?rfc include='reference.RFC.9252'?> 
	  <?rfc include='reference.RFC.9256'?> 
	  <?rfc include='reference.RFC.9259'?> 
	  <?rfc include='reference.I-D.ietf-spring-sr-replication-segment'?>
      <?rfc include='reference.I-D.lx-msr6-rgb-segment'?>  
	  <?rfc include='reference.I-D.xl-bess-source-segment'?>
	  <?rfc include='reference.I-D.mcbride-mboned-lessons-learned'?>  
    </references>
  </back>
</rfc>
