<?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 strict="no"?>
<?rfc rfcedstyle="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc category="info" docName="draft-ietf-mboned-non-source-routed-sr-mcast-01" ipr="trust200902">
  <front>
    <title abbrev="NSR-multicast">Non-source-routed Multicast in SR Networks</title>

    <author fullname="Zhaohui Zhang" initials="Z." surname="Zhang">
      <organization>Juniper Networks</organization>
      <address>
        <email>zzhang@juniper.net</email>
      </address>
    </author>

    <author initials="I." surname="Wijnands" fullname="IJsbrand Wijnands">
      <organization>Arrcus</organization>
      <address>
        <email>ice@braindump.be</email>
      </address>
    </author>

    <author fullname="Hooman Bidgoli" surname="Bidgoli">
      <organization>Nokia</organization>
      <address>
        <email>hooman.bidgoli@nokia.com</email>
      </address>
    </author>

    <author fullname="Yisong Liu" initials="Y." surname="Liu">
      <organization>China Mobile</organization>
      <address>
        <email>liuyisong@chinamobile.com</email>
      </address>
    </author>

    <date year="2025"/>

    <workgroup>mboned</workgroup>

    <abstract>
      <t>With Segment Routing (SR) architecture, a unicast flow
         can be source-routed through an SR network following an explicit path
         specified in the packet, w/o the need for per-flow state
         in the network. As a result, the otherwise needed protocols to signal
         the per-flow unicast state can also be removed from the network.
		 In the case of multicast, traffic can be either source-routed or
		 non-source-routed, and this document discusses non-sourced-routed
		 options for multicast in an SR network with either MPLS or IPv6/SRv6
		 data plane.
      </t>
    </abstract>

  </front>

  <middle>
    <section title="Introduction">
    <t>With Segment Routing (SR) architecture <xref target="RFC8402"/>, a unicast flow
       can be source-routed through an SR network following an explicit path
       specified in the packet, without the need for per-flow state
       in the network. As a result, the otherwise needed protocols to signal
       the per-flow unicast state can also be removed from the network.
    </t>
    <t>This document summarizes options for non-source-routed multicast
	   in an SR network,
       including traditional multicast technologies, BIER, and various
       SR specific solutions. The pros and cons of each solution are
       listed for considerations by operators and vendors.
    </t>
	<t>Source-routed multicast can be done with BIER-TE
	<xref target="RFC9262"/>, and, in the case of SRv6 network it has been
	discussed in IETF [https://datatracker.ietf.org/doc/bofreq-liu-multicast-source-routing-over-ipv6msr6/] and some work is ongoing. However, that is
	outside the scope of this document.
	</t>
	<t>As discussed in
	<xref target="I-D.zzhang-pim-multicast-scaling-considerations"/>,
	end-to-end multicast is best via IP multicast trees, though they could be
	transported over some (underlay) tunnels. In that regard, when we talk
	about multicast	in SR networks, we refer to the multicast in the underlay
	SR network - whether it is for underlay tunnels transporting overlay
	multicast (e.g., <xref target="RFC6513"/>), or for end-to-end IP multicast
	directly through (vs. over) the SR network.
	</t>
    </section>
    <section title="Traditional Multicast Technologies">
    <t>Traditional multicast technologies include PIM <xref target="RFC7761"/>,
       RSVP-TE P2MP <xref target="RFC4875"/>, and mLDP <xref target="RFC6388"/>.
       They all require per-tree state on nodes on the tree, and the
       corresponding protocols to signal and maintain the state. An incoming
       packet's IP header or MPLS label is looked up, and the packet is
       forwarded according to the matched state.
    </t>
    <t>While SR allows simplification of state, protocols and centralized
       SDN-control, the traditional methods of delivering multicast traffic
       run contrary to those SR goals.
    </t>
    <t>An alternative is Ingress Replication (IR) - an upstream node of a
       multicast packet tunnels individual copies to some downstream nodes
       across some intermediate nodes. In an SR network, the unicast tunnels
       used for IR could be traditional IP/MPLS tunnels
       or could be SR tunnels (referred to as SR policies), which could be
	   MPLS/SRv6-based.
    </t>
    <t>While with IR there is no per-tree state on those intermediate nodes,
       multiple copies of the same packet may be sent over the same link.
       If efficient replication is required, PIM/mLDP/RSVP-TE P2MP can still
       be used for multicast even in an SR network. Deploying SR in the
network does not mandate changing the solution that is in place for
Multicast.
    </t>
    <t>While mLDP uses the same LDP Session (and protocol packet encoding) as
used by unicast and there is code sharing between LDP and mLDP with regards
to neighbor discovery, session setup and Label allocation management,
the protocol logic for setting up mLDP tunnel is completely different.
It is understood that there
is a desire to remove LDP from the network when SR is deployed, but there
is really no problem to continue to run mLDP for Multicast. <xref target="RFC7473"/>
documents a solution where LDP can be run in mLDP-Only mode by simply not
exchanging any Unicast bindings.
    </t>
    <t>Similarly, RSVP-TE P2MP tunnel setup is orthogonal from P2P tunnel
       setup as well. It can be used for multicast even in an SR network
       if bandwidth reservation and/or per-tunnel explicit path are required.
    </t>
    </section>
    <section title="Bit Index Explicit Replication">
    <t>Bit Index Explicit Replication (BIER) <xref target="RFC8279"/> is a new multicast
       technology that achieves efficient replication as with PIM tree or
       mLDP/RSVP-TE P2MP tunnels but without requiring per-tree/tunnel state
       in the transit nodes as with IR.
    </t>
    <t>Even though BIER is designed and developed independent of SR, it is a
	perfect fit for an SR network because it shares with SR the number one
	principle of "no per-flow state".
       A BIER domain can be used as provider/underlay tunnels for MVPN/EVPN-BUM
       (just like traditional PIM tree or mLDP/RSVP P2MP tunnels), or can be
       part of end-to-end PIM trees <xref target="I-D.ietf-bier-pim-signaling"/>
       (similiar to mLDP inband signaling <xref target="RFC6826"/>).
    </t>
    <t>However, BIER uses a new
       forwarding plane that cannot be implemented on many deployed routers.
       On the other hand, the entry point barrier is decreasing and BIER
       is becoming more realistic with the following developments:
    <list style="symbols">
    <t>Several major ASIC makers have BIER support on their ASIC offering.
    </t>
    <t>Several Major router vendors have BIER hardware capability across their
    access/aggregation/edge/core platforms.
    </t>
	<t>Some major router vendors have had or will soon have interoperable
	production support
	of BIER on certain platforms. Roadmaps for BIER on more platforms also exist.
	</t>
    <t>There have been very good discussions and progress in BIER WG for
	methods of brown field deployments (
       <xref target="I-D.przygienda-bier-migration-options"/>
       <xref target="I-D.ietf-bier-tether"/>
       <xref target="I-D.ietf-bier-multicast-as-a-service"/>
       <xref target="I-D.ietf-bier-php"/>)
    </t>
    <t>More and more customers now have concrete plans and requirements for
       BIER deployment in their networks
    </t>
    </list>
    </t>
    </section>
    <section title="Multicast Trees Set up by Other Means" anchor="other">
    <t>Some operators may accept that they need to maintain per-tree
       state in their SR network for efficient multicast, and their
       applications do not require too much per-tree multicast state. However,
       since unicast no longer needs LDP or RSVP-TE protocol in an SR network,
       they really want to remove PIM/LDP/RSVP-TE protocol from their
       networks, and make use of controllers. In that case, the multicast
       trees could be set up statically from management plane (e.g., netconf),
       or dynamically via BGP/PCEP
       <xref target="I-D.ietf-bess-bgp-multicast"/> 
       <xref target="I-D.ietf-bess-bgp-multicast-controller"/>
       <xref target="I-D.ietf-idr-sr-p2mp-policy"/>
       <xref target="I-D.ietf-pce-sr-p2mp-policy"/>.
    </t>
    </section>
    <section title="SR Specific Solutions">
      <t>There are two multicast solutions that are specifically tied to SR
	  technologies - "SR-P2MP" and "Spray".
       <!--There is also a proposal
       <xref target="I-D.allan-pim-sr-mpls-multicast-framework"/> that
       uses calculated multicast trees based on flooded membership
       information.-->
    <list style="numbers">
    <t anchor="treesid">
       SR-P2MP refers to trees setup not by mLDP or RSVP-TE.
       It could be statically configured, or instantiated from a controller,
	   as described in <xref target="I-D.ietf-pim-sr-p2mp-policy"/>.
	   It uses Replication Segments specified in <xref target="RFC9524"/>,
	   which describe the replication states on the tree nodes.
    </t>
    <t anchor="spray">
       Spray is Ingress Replication with SRv6.
       Instead of regular IP/MPLS tunneling, an SRv6 header encodes the
       "tunnel end" and the original destination multicast address.
       When the packet arrives at the tunnel end, the original multicast address
       is restored from the SRv6 header.
    </t>
    <!--t anchor="mospf">
       In <xref target="I-D.allan-pim-sr-mpls-multicast-framework"/>,
       multicast membership information is flooded, and each node will
       calculate if it plays a role (as a root, leaf, or a branching point)
       for each multicast tree. If yes, corresponding forwarding state 
       is installed to forward incoming multicast traffic accordingly.
    </t-->
    </list>
    </t>
    <t>The above methods are really no different from
       existing technologies. <!--xref target="treesid" format="counter"/> and
       <xref target="mospf" format="counter"/-->
	   Spray is just IR with a different encapsulation (e.g. SRv6).
	   While SR-P2MP does not use existing tree signaling protocol, it still
	   requires per-tree forwarding state on the tree nodes (roots, leaves and
	   branching points), and it is identical to mLDP/RSVP P2MP tunnels in the
	   MPLS data plane on those tree nodes.

       <!--xref target="mospf" format="counter"/>
       is similar to MOSPF [RFC1584] and requires flooded receiver information
       throughout the domain. <xref target="spray" format="counter"/-->
	</t>
	<t>
	  mLDP/PIM trees are typically hop-by-hop - the tree nodes are directly
	  connected, though tunnels can be used between mLDP, PIM and SR-P2MP tree
	  nodes to avoid tree states on the non-branching nodes between tree nodes.
	  This is important in some deployment scenarios (e.g., mobile user plane
	  transport) where the replication points are scattered with many
	  non-replication points among them.
	</t>
	<t>SR-P2MP can use both MPLS and SRv6 data plane. The next section
	discusses some SRv6 aspects of SR-P2MP.
    </t>
    </section>
	<section title="IPv6 Considerations">
	  <t>Some operators run IPv6/SRv6 networks without using MPLS at all. As
	  a result, Ingress Replication or SR-P2MP with MPLS data plane is not an
	  option and IPv6 based forwarding must be used. There are two options in
	  this case - traditional IPv6 multicast (signaled by either PIM
	  or BGP <xref target="I-D.ietf-bess-bgp-multicast"/>
	  <xref target="I-D.ietf-bess-bgp-multicast-controller"/>) and SRv6-P2MP
	  (SR-P2MP with SRv6 data plane).
	  </t>
	  <t>SR-P2MP with MPLS data plane (SRmpls-P2MP) is identical to
	  mLDP/RSVP-P2MP in the data plane of the tree nodes,
	  in that incoming multicast traffic carries a tree-identifing label and
	  is replicated with outgoing label stacks. The label stack includes
	  a label that identifies the tree to the downstream node, and optional
	  labels that leads the traffic to the downstream node.
	  </t>
	  <t>SRv6-P2MP is very similar to SRmpls-P2MP in the data plane.
	  Multicast traffic has an IPv6 header and the destination address has
	  the LOC:FUNCT:ARGS encoding format for SRv6 <xref target="RFC8986"/>. The FUNCT bits correspond
	  to the tree-identifying label in SRmpls-P2MP, and the LOC bits get
	  the traffic from an upstream node to a downstream node (which could be
	  directly or indirectly connected).
	  </t>
	  <t>SRv6-P2MP allows native tunneling of multicast traffic between
	  indirectly connected upstream and downstream nodes, but at the cost
	  of changing destination address at each tree node, which requires
	  either programmable ASIC or new generation of non-programmable ASIC.
	  It also requires a new control plane that involves controller-based
	  calculation and signaling of the tree state.
	  </t>
	  <t>On the other hand, traditional IPv6 multicast is mature in both control
	  plane and data plane. PIM has been widely deployed for many years without
	  platform restrictions, and the PIM-SSM protocol is very straightforward
	  without the complexity of PIM-ASM.
	  </t>
	  <t>Even if an operator wants to use controller based calculation and
	  signaling, or does not want to run PIM protocol, traditional multicast
	  can still be used with BGP/controller-based signaling as specified in
	   <xref target="I-D.ietf-bess-bgp-multicast"/> and 
       <xref target="I-D.ietf-bess-bgp-multicast-controller"/>.
	  </t>
	</section>
    <section title="Summary">
    <t>There is no one-for-all option when it comes to multicast in
       an SR network. Depending on specific deployment scenarios and
       requirements, the following could be considered in order when
	   source-routing is not used:
       <list style="symbols">
          <t>If most of nodes can support it, BIER is the best choice,
             because it removes state from the network and simplifies the
             control-plane (like SR does).
          </t>
          <t>If efficient multicast replication is required, mLDP/RSVP-TE/PIM
		  can still be used for multicast purpose if that is acceptable.
          </t>
          <t>If the replication points are scattered with many non-replication
		  points between them, or if there is a strong desire to create
		  multicast forwarding state without relying on PIM/mLDP or RSVP-TE,
		  one can use static
             configuration (e.g., netconf based provisioning) or
			 controller-based tree calculation/signaling (SR-P2MP,
			 BGP-signaled IP multicast or mLDP).
          </t>
          <t>Use Ingress Replication with SR unicast tunnels.
          </t>
       </list>
    </t>
    <t>      In case of MPLS based P2MP, a Binding SID could be optionally
             used to direct traffic to the root of the tunnel.
    </t>
    <!--t>Notice that there are already many protocols defined (PIM, mLDP, RSVP-TE,
       BGP, MOSPF) that can be used to create multicast forwarding state. When
       designing a new protocol to do the same, we need to be sure the benefits
       are significant enough and out-weight the cost of developing it.
    </t-->
    </section>
    <section anchor="Security" title="Security Considerations">
      <t>This informational document does not introduce new security risks.
      </t>
    </section>
    <section anchor="Acknowledgements" title="Acknowledgements">
    <t>The authors thank Eric Rosen, Tony Przygienda, and John Drake for their
       reviews, comments and suggestions.
    </t>
    </section>
  </middle>

  <back>
    <references title="Informative References">
	  <?rfc include='reference.RFC.9262.xml'?>
	  <?rfc include='reference.RFC.6513.xml'?>
	  <?rfc include='reference.RFC.8279.xml'?>
	  <?rfc include='reference.RFC.6388.xml'?>
	  <?rfc include='reference.RFC.4875.xml'?>
	  <?rfc include='reference.RFC.7761.xml'?>
	  <?rfc include='reference.RFC.7473.xml'?>
	  <?rfc include='reference.RFC.8986.xml'?>
	  <?rfc include='reference.RFC.8402.xml'?>
	  <?rfc include='reference.RFC.6826.xml'?>
	  <?rfc include='reference.RFC.9524.xml'?>
      <?rfc include='reference.I-D.ietf-pim-sr-p2mp-policy'?>
      <?rfc include='reference.I-D.ietf-idr-sr-p2mp-policy'?>
      <?rfc include='reference.I-D.ietf-pce-sr-p2mp-policy'?>
      <?rfc include='reference.I-D.ietf-bess-bgp-multicast'?>
      <?rfc include='reference.I-D.ietf-bess-bgp-multicast-controller'?>
      <?rfc include='reference.I-D.ietf-bier-php'?>
      <?rfc include='reference.I-D.ietf-bier-tether'?>
      <?rfc include='reference.I-D.ietf-bier-multicast-as-a-service'?>
      <?rfc include='reference.I-D.ietf-bier-pim-signaling'?>
      <?rfc include='reference.I-D.przygienda-bier-migration-options'?>
      <?rfc include='reference.I-D.zzhang-pim-multicast-scaling-considerations'?>
    </references>
  </back>
</rfc>
