<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY RFC7432 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7432.xml">
<!ENTITY RFC6513 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6513.xml">
<!ENTITY RFC6514 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6514.xml">
<!ENTITY RFC8584 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8584.xml">
<!ENTITY RFC2119 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC8174 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC9573 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9573.xml">
<!ENTITY RFC9625 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9625.xml">
<!ENTITY I-D.ietf-mpls-p2mp-bfd SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-mpls-p2mp-bfd.xml">
<!ENTITY I-D.ietf-bess-evpn-bfd SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-bess-evpn-bfd.xml">
<!ENTITY RFC9572 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9572.xml">
<!ENTITY RFC4364 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4364.xml">
<!ENTITY RFC9251 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9251.xml">
<!ENTITY RFC9136 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9136.xml">
<!ENTITY RFC7761 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7761.xml">
<!ENTITY I-D.ietf-bess-evpn-pref-df SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-bess-evpn-pref-df.xml">
]>
<rfc category="std" docName="draft-ietf-bess-evpn-redundant-mcast-source-11"
     ipr="trust200902" submissionType="IETF">
  <!-- Generated by id2xml 1.5.0 on 2020-10-30T09:57:27Z -->

  <?rfc strict="yes"?>

  <?rfc compact="yes"?>

  <?rfc subcompact="no"?>

  <?rfc symrefs="yes"?>

  <?rfc sortrefs="no"?>

  <?rfc text-list-symbols="o*+?>

  <?rfc toc="yes"?>

  <front>
    <title abbrev="EVPN Redundant Sources">Multicast Source Redundancy in EVPN
    Networks</title>

    <author fullname="Jorge Rabadan" initials="J." role="editor"
            surname="Rabadan">
      <organization>Nokia</organization>

      <address>
        <postal>
          <street>520 Almanor Avenue</street>

          <city>Sunnyvale</city>

          <region>CA</region>

          <code>94085</code>

          <country>USA</country>
        </postal>

        <email>jorge.rabadan@nokia.com</email>
      </address>
    </author>

    <author fullname="Jayant Kotalwar" initials="J." surname="Kotalwar">
      <organization>Nokia</organization>

      <address>
        <postal>
          <street>520 Almanor Avenue</street>

          <street>Sunnyvale, CA 94085 USA</street>
        </postal>

        <email>jayant.kotalwar@nokia.com</email>
      </address>
    </author>

    <author fullname="Senthil Sathappan" initials="S." surname="Sathappan">
      <organization>Nokia</organization>

      <address>
        <postal>
          <street>520 Almanor Avenue</street>

          <street>Sunnyvale, CA 94085 USA</street>
        </postal>

        <email>senthil.sathappan@nokia.com</email>
      </address>
    </author>

    <author fullname="Zhaohui Zhang" initials="Z." surname="Zhang">
      <organization abbrev="Juniper">Juniper Networks</organization>

      <address>
        <email>zzhang@juniper.net</email>
      </address>
    </author>

    <author fullname="Wen Lin" initials="W." surname="Lin">
      <organization abbrev="Juniper">Juniper Networks</organization>

      <address>
        <email>wlin@juniper.net</email>
      </address>
    </author>

    <date day="13" month="November" year="2024"/>

    <workgroup>BESS Workgroup</workgroup>

    <abstract>
      <t>Ethernet Virtual Private Network (EVPN) supports intra and
      inter-subnet IP multicast forwarding. However, EVPN (or conventional IP
      multicast techniques for that matter) do not have a solution for the
      case where the following two statements are true at the same time: a) a
      given multicast group carries more than one flow (i.e., more than one
      source), and b) it is desired that each receiver gets only one of the
      several flows. Existing multicast techniques assume there are no
      redundant sources sending the same flow to the same IP multicast group,
      and, in case there were redundant sources, the receiver's application
      would deal with the received duplicated packets. This document extends
      the existing EVPN specifications and assumes that IP Multicast source
      redundancy may exist. It also assumes that, in case two or more sources
      send the same IP Multicast flows into the tenant domain, the EVPN PEs
      need to avoid that the receivers get packet duplication by following the
      described procedures.</t>
    </abstract>
  </front>

  <middle>
    <section anchor="sect-1" title="Introduction">
      <t>Intra and Inter-subnet IP Multicast forwarding are supported in EVPN
      networks. <xref target="RFC9251"/> describes the procedures required to
      optimize the delivery of IP Multicast flows when Sources and Receivers
      are connected to the same EVPN Broadcast Domain, whereas <xref
      target="RFC9625"/> specifies the procedures to support Inter-subnet IP
      Multicast in a tenant network. Inter-subnet IP Multicast means that IP
      Multicast Source and Receivers of the same multicast flow are connected
      to different Broadcast Domains of the same tenant.</t>

      <t><xref target="RFC9251"/>, <xref target="RFC9625"/> or conventional IP
      multicast techniques do not have a solution for the case where the
      following two statements are true at the same time: a) a given multicast
      group carries more than one flow (i.e., more than one source) and b) it
      is desired that each receiver gets only one of the several flows.
      Multicast techniques assume there are no redundant sources sending the
      same flows to the same IP multicast group, and, in case there were
      redundant sources, the receiver's application would deal with the
      received duplicated packets.</t>

      <t>As a workaround in conventional IP multicast (that is, networks
      running Protocol Independent Multicast <xref target="RFC7761"/> or
      Multicast Virtual Private Networks <xref target="RFC6513"/>), if all the
      redundant sources are given the same IP address, each receiver will get
      only one flow. The reason is that, in conventional IP multicast, the RP
      (Rendezvous Point) always creates (S,G) state, and the Last Hop Router
      sometimes creates (S,G) state. The (S,G) state always binds the (S,G)
      flow to a source-specific tree, rooted at the source IP address. If
      multiple sources have the same IP address, one may end up with multiple
      (S,G) trees. However, the way the trees are constructed ensures that any
      given Last Hop Router or Rendezvous Point router is on at most one of
      them. The use of an anycast address assigned to multiple sources may be
      useful for warm standby redundancy solutions (<xref target="sect-2"/>).
      However, on one hand, it is not really helpful for hot standby
      redundancy solutions (<xref target="sect-2"/>) and on the other hand,
      configuring the same IP address (in particular, the same IPv4 address)
      in multiple sources may bring issues if the sources need to be reached
      by IP unicast traffic or if the sources are attached to the same
      Broadcast Domain.</t>

      <t>In addition, in the scenario where several multicast sources
      streaming traffic to the same group are attached via EVPN/OISM
      (Optimized Inter-Subnet Multicast), there is not necessarily any (S,G)
      state created for the redundant sources. The Last Hop Routers may have
      only (*,G) state, and there may not be a Rendezvous Point router
      (creating (S,G) state) either. Therefore, this document extends <xref
      target="RFC9251"/> and <xref target="RFC9625"/>, and now assumes that IP
      Multicast source redundancy may exist. The document also specifies how,
      in case two or more sources send the same IP Multicast flows into the
      tenant domain, the EVPN PEs avoid the receivers from getting packet
      duplication. The procedures to handle redundant sources in solutions
      different from <xref target="RFC9251"/> or <xref target="RFC9625"/> are
      out of the scope of this document.</t>

      <section anchor="sect-1.1" title="Terminology">
        <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>

        <t><list style="symbols">
            <t>Broadcast Domain (BD): an emulated ethernet, such that two
            systems on the same BD will receive each other's link-local
            broadcasts. In this document, BD also refers to the instantiation
            of a Broadcast Domain on an EVPN PE. An EVPN PE can be attached to
            one or multiple BDs of the same tenant.</t>

            <t>BUM: Broadcast, Unknown unicast and Multicast traffic.</t>

            <t>Designated Forwarder (DF): as defined in <xref
            target="RFC7432"/>, an ethernet segment may be multi-homed
            (attached to more than one PE). An ethernet segment may also
            contain multiple BDs, of one or more EVIs. For each such EVI, one
            of the PEs attached to the segment becomes that EVI's DF for that
            segment. Since a BD may belong to only one EVI, we can speak
            unambiguously of the BD's DF for a given segment.</t>

            <t>Downstream PE: in this document a Downstream PE is referred to
            as the EVPN PE that is connected to the IP Multicast receivers and
            gets the IP Multicast flows from remote EVPN PEs.</t>

            <t>G-traffic: any frame with an IP payload whose IP Destination
            Address (IP DA) is a multicast group G.</t>

            <t>G-source: any system sourcing IP multicast traffic to group
            G.</t>

            <t>Hot Standby Redundancy: multicast source redundancy procedure
            defined in this document, by which the upstream PEs forward the
            redundant multicast flows to the downstream PEs, and the
            downstream PEs make sure only one flow is forwarded to the
            interested attached receivers.</t>

            <t>IGMP: Internet Group Management Protocol.</t>

            <t>Inclusive Multicast Tree or Inclusive Provider Multicast
            Service Interface (I-PMSI): defined in <xref target="RFC6513"/>,
            in this document it is applicable only to EVPN and refers to the
            default multicast tree for a given BD. All the EVPN PEs that are
            attached to a specific BD belong to the I-PMSI for the BD. The
            I-PMSI trees are signaled by EVPN Inclusive Multicast Ethernet Tag
            (IMET) routes.</t>

            <t>IMET route: EVPN Inclusive Multicast Ethernet Tag route, as in
            <xref target="RFC7432"/>.</t>

            <t>MLD: Multicast Listener Discovery.</t>

            <t>MVPN: Multicast Virtual Private Networks, as in <xref
            target="RFC6513"/>.</t>

            <t>OISM: Optimized Inter-Subnet Multicast, as in <xref
            target="RFC9625"/>.</t>

            <t>PIM: Protocol Independent Multicast, as in <xref
            target="RFC7761"/>.</t>

            <t>P-tunnel: Provider tunnel refers to the type of tree a given
            upstream EVPN PE uses to forward multicast traffic to downstream
            PEs. Examples of P-tunnels supported in this document are Ingress
            Replication (IR), Assisted Replication (AR), Bit Indexed Explicit
            Replication (BIER), multicast Label Distribution Protocol (mLDP)
            or Point to Multi-Point Resource Reservation protocol with Traffic
            Engineering extensions (P2MP RSVP-TE).</t>

            <t>Redundant G-source: a host or router that transmits an SFG in a
            tenant network where there are more hosts or routers transmitting
            the same SFG. Redundant G-sources for the same SFG SHOULD have
            different IP addresses, although they MAY have the same IP address
            when in different BDs of the same tenant network. Redundant
            G-sources are assumed NOT to be "bursty" in this document (typical
            example are Broadcast TV G-sources or similar).</t>

            <t>S-ES and S-ESI: multicast Source Ethernet Segment and multicast
            Source Ethernet Segment Identifier. The Ethernet Segment and
            Ethernet Segment Identifier associated to a G-source.</t>

            <t>Selective Multicast Tree or Selective Provider Multicast
            Service Interface (S-PMSI): defined in <xref target="RFC6513"/>,
            in this document it is applicable only to EVPN and refers to the
            multicast tree to which only the interested PEs of a given BD
            belong to. There are two types of EVPN S-PMSIs:<list
                style="symbols">
                <t>EVPN S-PMSIs that require the advertisement of S-PMSI
                Auto-Discovery (S-PMSI A-D) routes from the upstream PE, as in
                <xref target="RFC9572"/>. The interested downstream PEs join
                the S-PMSI tree as in <xref target="RFC9572"/>.</t>

                <t>EVPN S-PMSIs that don't require the advertisement of S-PMSI
                AD routes. They use the forwarding information of the IMET
                routes, but upstream PEs send IP Multicast flows only to
                downstream PEs issuing Selective Multicast Ethernet Tag (SMET)
                routes for the flow. These S-PMSIs are only supported with the
                following P-tunnels: Ingress Replication (IR), Assisted
                Replication (AR) and BIER.</t>
              </list></t>

            <t>SFG: Single Flow Group, i.e., a multicast group which
            represents traffic that contains only a single flow. Multiple
            sources - with the same or different IP - may be transmitting an
            SFG. An SFG is represented as (*,G) if any source that issues
            multicast traffic to G is a redundant G-source. An SFG can also be
            represented as (S,G), where S is a prefix of any length. In this
            case, a source is considered a redundant G-source for the SFG if
            it is contained in the prefix.</t>

            <t>SMET route: Selective Multicast Ethernet Tag route, as in <xref
            target="RFC9251"/>.</t>

            <t>(S,G) and (*,G): used to describe multicast packets or
            multicast state. S stands for Source (IP address of the multicast
            traffic) and G stands for the Group or multicast destination IP
            address of the group. An (S,G) multicast packet refers to an IP
            packet with source IP address "S" and destination IP address "G",
            and it is forwarded on a multicast router if there is a
            corresponding state for (S,G). A (*,G) multicast packet refers to
            an IP packet with "any" source IP address and a destination IP
            address "G", and it is forwarded on a multicast router based on
            the existence of the corresponding (*,G) state. The document uses
            variations of these terms. For example, (S1,G1) represents the
            multicast packets or multicast state for source IP address "S1"
            and group IP address "G1".</t>

            <t>Upstream PE: in this document an Upstream PE is referred to as
            the EVPN PE that is connected to the IP Multicast source or
            closest to it. It receives the IP Multicast flows on local ACs
            (Attachment Circuits).</t>

            <t>Warm Standby Redundancy: multicast source redundancy procedure
            defined in this document, by which the upstream PEs, attached to
            the redundant sources of the same tenant, make sure that only one
            source of the same flow can send multicast to the interested
            downstream PEs at the same time.</t>
          </list></t>

        <t>This document also assumes familiarity with the terminology of
        <xref target="RFC7432"/>, <xref target="RFC4364"/>, <xref
        target="RFC6513"/>, <xref target="RFC6514"/>, <xref
        target="RFC9251"/>, <xref target="RFC9625"/>, <xref target="RFC9136"/>
        and <xref target="RFC9572"/>.</t>
      </section>

      <section anchor="sect-1.2"
               title="Background on IP Multicast Delivery in EVPN Networks">
        <t>IP Multicast is all about forwarding a single copy of a packet from
        a source S to a group of receivers G along a multicast tree. That
        multicast tree can be created in an EVPN tenant domain where S and the
        receivers for G are connected to the same Broadcast Domain or
        different Broadcast Domain. In the former case, we refer to
        Intra-subnet IP Multicast forwarding, whereas the latter case will be
        referred to as Inter-subnet IP Multicast forwarding.</t>

        <section anchor="sect-1.2.1"
                 title="Intra-subnet IP Multicast Forwarding">
          <t>When the source S1 and receivers interested in G1 are attached to
          the same Broadcast Domain, the EVPN network can deliver the IP
          Multicast traffic to the receivers in two different ways (<xref
          target="ure-intra-subnet-ip-multicast"/>):</t>

          <figure anchor="ure-intra-subnet-ip-multicast"
                  title="Intra-subnet IP Multicast">
            <artwork><![CDATA[
                  S1  +                        S1  +
        (a)       +   |              (b)       +   |
                  |   | (S1,G1)                |   | (S1,G1)
              PE1 |   |                    PE1 |   |
              +-----+ v                    +-----+ v
              |+---+|                      |+---+|
              ||BD1||                      ||BD1||
              |+---+|                      |+---+|
              +-----+                      +-----+
         +-------|-------+            +-------|
         |       |       |            |       |
         v       v       v            v       v
      +-----+ +-----+ +-----+      +-----+ +-----+ +-----+
      |+---+| |-----| |-----|      |+---+| |+---+| |+---+|
      ||BD1|| ||BD1|| ||BD1||      ||BD1|| ||BD1|| ||BD1||
      |+---+| |-----| |-----|      |+---+| |+---+| |+---+|
      +-----+ +-----+ +-----+      +-----+ +-----+ +-----+
      PE2|    PE3|    PE4|         PE2|    PE3|    PE4
       - | - - - | -     |          - | - - - | -
      |  |       |  |    |         |  |       |  |
         v       v       v            v       v
      |  R1      R2 |    R3        |  R1      R2 |    R3
       - - - G1- - -                - - - G1- - -
]]></artwork>
          </figure>

          <t>Model (a) illustrated in <xref
          target="ure-intra-subnet-ip-multicast"/> is referred to as "IP
          Multicast delivery as BUM traffic". This way of delivering IP
          Multicast traffic does not require any extensions to <xref
          target="RFC7432"/>, however, it sends the IP Multicast flows to
          non-interested receivers, such as e.g., R3 in <xref
          target="ure-intra-subnet-ip-multicast"/>. In this example,
          downstream PEs can snoop IGMP/MLD messages from the receivers so
          that layer-2 multicast state is created and, for instance, PE4 can
          avoid sending (S1,G1) to R3, since R3 is not interested in
          (S1,G1).</t>

          <t>Model (b) in <xref target="ure-intra-subnet-ip-multicast"/> uses
          an S-PMSI to optimize the delivery of the (S1,G1) flow. For
          instance, assuming PE1 uses IR, PE1 sends (S1,G1) only to the
          downstream PEs that issued an SMET route for (S1,G1), that is, PE2
          and PE3. In case PE1 uses any P-tunnel different than IR, AR or
          BIER, PE1 will advertise an S-PMSI A-D route for (S1,G1) and PE2/PE2
          will join that tree.</t>

          <t>Procedures for Model (b) are specified in <xref
          target="RFC9251"/>.</t>
        </section>

        <section anchor="sect-1.2.2"
                 title="Inter-subnet IP Multicast Forwarding">
          <t>If the source and receivers are attached to different BDs of the
          same tenant domain, the EVPN network can also use Inclusive or
          Selective Trees as depicted in <xref
          target="ure-inter-subnet-ip-multicast"/>, models (a) and (b)
          respectively.</t>

          <figure anchor="ure-inter-subnet-ip-multicast"
                  title="Inter-subnet IP Multicast">
            <artwork><![CDATA[
                  S1  +                     S1  +
        (a)       +   |              (b)    +   |
                  |   | (S1,G1)             |   | (S1,G1)
              PE1 |   |                 PE1 |   |
              +-----+ v                 +-----+ v
              |+---+|                   |+---+|
              ||BD1||                   ||BD1||
              |+---+|                   |+---+|
              +-----+                   +-----+
         +-------|-------+         +-------|
         |       |       |         |       |
         v       v       v         v       v
      +-----+ +-----+ +-----+   +-----+ +-----+ +-----+
      |+---+| |+---+| |+---+|   |+---+| |+---+| |+---+|
      ||SBD|| ||SBD|| ||SBD||   ||SBD|| ||SBD|| ||SBD||
      |+-|-+| |+-|-+| |+---+|   |+-|-+| |+-|-+| |+---+|
      | VRF | | VRF | | VRF |   | VRF | | VRF | | VRF |
      |+-v-+| |+-v-+| |+---+|   |+-v-+| |+-v-+| |+---+|
      ||BD2|| ||BD3|| ||BD4||   ||BD2|| ||BD3|| ||BD4||
      |+-|-+| |+-|-+| |+---+|   |+-|-+| |+-|-+| |+---+|
      +--|--+ +--|--+ +-----+   +--|--+ +--|--+ +-----+
      PE2|    PE3|    PE4       PE2|    PE3|    PE4
       - | - - - | -             - | - - - | -
      |  |       |  |           |  |       |  |
         v       v                 v       v
      |  R1      R2 |    R3     |  R1      R2 |    R3
       - - - G1- - -             - - - G1- - -
]]></artwork>
          </figure>

          <t><xref target="RFC9625"/> specifies the procedures to optimize the
          Inter-subnet Multicast forwarding in an EVPN network. The IP
          Multicast flows are always sent in the context of the source BD. As
          described in <xref target="RFC9625"/>, if the downstream PE is not
          attached to the source BD, the IP Multicast flow is received on the
          SBD (Supplementary Broadcast Domain), as in the example in <xref
          target="ure-inter-subnet-ip-multicast"/>.</t>

          <t><xref target="RFC9625"/> supports Inclusive or Selective
          Multicast Trees, and as explained in <xref target="sect-1.2.1"/>,
          the Selective Multicast Trees are setup in a different way,
          depending on the P-tunnel being used by the source Broadcast Domain.
          As an example, model (a) in <xref
          target="ure-inter-subnet-ip-multicast"/> illustrates the use of an
          Inclusive Multicast Tree for Broadcast Domain BD1 on PE1. Since the
          downstream PEs are not attached to BD1, they will all receive
          (S1,G1) in the context of the Supplementary Broadcast Domain (SBD)
          and will locally route the flow to the local Attachment Circuits.
          Model (b) uses a similar forwarding model, however PE1 sends the
          (S1,G1) flow in a Selective Multicast Tree. If the P-tunnel is
          Ingress Replication (IR), Assisted Replication (AR) or Bit Index
          Explicit Replication (BIER), PE1 does not need to advertise an
          S-PMSI A-D route.</t>

          <t><xref target="RFC9625"/> is a superset of the procedures in <xref
          target="RFC9251"/>, in which sources and receivers can be in the
          same or different Broadcast Domain of the same tenant. <xref
          target="RFC9625"/> ensures every upstream PE attached to a source
          will learn of all other PEs (attached to the same Tenant Domain)
          that have interest in a particular set of flows. This is because the
          downstream PEs advertise SMET routes for a set of flows with the
          Supplementary Broadcast Domain's Route Target and they are imported
          by all the Upstream PEs of the tenant. As a result of that,
          inter-subnet multicasting can be done within the Tenant Domain,
          without requiring any Rendezvous Points (RP), shared trees, Upstream
          Multicast Hop (UMH) selection or any other complex aspects of
          conventional multicast routing techniques.</t>
        </section>
      </section>

      <section anchor="sect-1.3"
               title="Multi-Homed IP Multicast Sources in EVPN">
        <t>Contrary to conventional multicast routing technologies,
        multi-homing PEs attached to the same source can never create IP
        Multicast packet duplication if the PEs use a multi-homed Ethernet
        Segment. <xref target="ure-all-active-multi-homing-and-oism"/>
        illustrates this by showing two multi-homing PEs (PE1 and PE2) that
        are attached to the same source (S1). We assume that S1 is connected
        to an all-active ethernet segment by a layer-2 switch (SW1) with a
        Link Aggregation Group (LAG) to PE1 and PE2.</t>

        <figure anchor="ure-all-active-multi-homing-and-oism"
                title="All-active Multi-homing and OISM">
          <artwork><![CDATA[
                                  S1
                                  |
                                  v
                               +-----+
                               | SW1 |
                               +-----+
                         +----  |   |
                  (S1,G1)| +----+   +----+
      IGMP               | | all-active  |
      J(S1,G1)     PE1   v |    ES-1     |    PE2
      +---->   +-----------|---+     +---|-----------+
               | +---+   +---+ |     | +---+         |
       R1  <-----|BD2|   |BD1| |     | |BD1|         |
               | +---+---+---+ |     | +---+---+     |
          +----|     |VRF|  |  |     |     |VRF|     |----+
          |    | +---+---+  |  |     | +---+---+     |    |
          |    | |SBD|      |  |     | |SBD|         |    |
          |    | +---+      |  |     | +---+         |    |
          |    +------------|--+     +---------------+    |
          |                 |                             |
          |                 |                             |
          |                 |                             |
          |  EVPN           |               ^             |
          |  OISM           v    PE3        | SMET        |
          |              +---------------+  | (*,G1)      |
          |              | +---+         |  |             |
          |              | |SBD|         |                |
          |              | +---+---+     |                |
          +--------------|     |VRF|     |----------------+
                         | +---+---+---+ |
                         | |BD2|   |BD3| |
                         | +-|-+   +-|-+ |
                         +---|-------|---+
                         ^   |       |   ^
                IGMP     |   v       v   | IGMP
                 J(*,G1) |  R2       R3  | J(S1,G1)
]]></artwork>
        </figure>

        <t>When receiving the (S1,G1) flow from S1, SW1 will choose only one
        link to send the flow, as per <xref target="RFC7432"/>. Assuming PE1
        is the receiving PE on Broadcast Domain BD1, the IP Multicast flow
        will be forwarded as soon as BD1 creates multicast state for (S1,G1)
        or (*,G1). In the example of <xref
        target="ure-all-active-multi-homing-and-oism"/>, receivers R1, R2 and
        R3 are interested in the multicast flow to G1. R1 will receive (S1,G1)
        directly via the IRB interface as per <xref target="RFC9625"/>. Upon
        receiving IGMP reports from R2 and R3, PE3 will issue an SMET (*,G1)
        route that will create state in PE1's Broadcast Domain BD1. PE1 will
        therefore forward the IP Multicast flow to PE3's SBD and PE3 will
        forward to R2 and R3, as per <xref target="RFC9625"/> procedures.</t>

        <t>When IP Multicast source multi-homing is required, EVPN multi-homed
        Ethernet Segments MUST be used. EVPN multi-homing guarantees that only
        one Upstream PE will forward a given multicast flow at the time,
        avoiding packet duplication at the Downstream PEs. In addition, the
        SMET route for a given flow creates state in all the multi-homing
        Upstream PEs. Therefore, in case of failure on the Upstream PE
        forwarding the flow, the backup Upstream PE can forward the flow
        immediately.</t>

        <t>This document assumes that multi-homing PEs attached to the same
        source always use multi-homed Ethernet Segments.</t>
      </section>

      <section anchor="sect-1.4"
               title="The Need for Redundant IP Multicast Sources in EVPN">
        <t>While multi-homing PEs to the same IP Multicast G-source provides
        certain level of resiliency, multicast applications are often critical
        in the Operator's network and greater level of redundancy is required.
        This document assumes that:</t>

        <t><list style="letters">
            <t>Redundant G-sources for an Single Flow Group (SFG) may exist in
            the EVPN tenant network. A Redundant G-source is a host or a
            router that sends an Single Flow Group stream in a tenant network
            where there is another host or router sending traffic to the same
            Single Flow Group.</t>

            <t>Those redundant G-sources may be in the same Broadcast Domain
            or different Broadcast Domains of the tenant. There must not be
            restrictions imposed on the location of the receiver systems
            either.</t>

            <t>The redundant G-sources can be single-homed to only one EVPN PE
            or multi-homed to multiple EVPN PEs.</t>

            <t>The EVPN PEs must avoid duplication of packets of the same
            Single Flow Group on the receiver systems.</t>
          </list></t>
      </section>
    </section>

    <section anchor="sect-2" title="Solution Overview">
      <t>An Single Flow Group (SFG) is represented as (*,G) if any source that
      issues multicast traffic to G is a redundant G-source. Alternatively,
      this document allows a Single Flow Group to be represented as (S,G),
      where the source IP address "S" is a prefix of any length. In this case,
      a source is considered a redundant G-source for the Single Flow Group if
      it is contained in the prefix. This document allows variable length
      prefixes in the Sources advertised in S-PMSI A-D routes only for the
      particular application of redundant G-sources.</t>

      <t>There are two redundant G-source solutions described in this
      document:</t>

      <t><list style="symbols">
          <t>Warm Standby Solution</t>

          <t>Hot Standby Solution</t>
        </list></t>

      <t>The Warm Standby solution is considered an upstream-PE-based solution
      (since downstream PEs do not participate in the procedures), in which
      all the upstream PEs attached to redundant G-sources for a Single Flow
      Group represented by (*,G) or (S,G) will elect a "Single Forwarder" (SF)
      among themselves. Once a Single Forwarder is elected, the upstream PEs
      add an Reverse Path Forwarding check to the (*,G) or (S,G) state for the
      Single Flow Group:</t>

      <t><list style="symbols">
          <t>A non-Single Forwarder upstream PE discards any (*,G)/(S,G)
          packets received over a local Attachment Circuit.</t>

          <t>The Single Forwarder accepts and forwards any (*,G)/(S,G) packets
          it receives over a single local Attachment Circuit (for the Single
          Flow Group). In case (*,G)/(S,G) packets for the Single Flow Group
          are received over multiple local Attachment Circuits, they will be
          discarded in all the local Attachment Circuits but one. The
          procedure to choose the local Attachment Circuit that accepts
          packets is a local implementation matter.</t>
        </list></t>

      <t>A failure on the Single Forwarder will result in the election of a
      new Single Forwarder. The Election requires BGP extensions on the
      existing EVPN routes. These extensions and associated procedures are
      described in <xref target="sect-3"/> and <xref target="sect-4"/>
      respectively.</t>

      <t>In the Hot Standby solution the downstream PEs are the ones avoiding
      the Single Flow Group duplication. The upstream PEs are aware of the
      locally attached G-sources and add a unique Ethernet Segment Identifier
      label (ESI-label) per Single Flow Group to the multicast packets
      forwarded to downstream PEs. The downstream PEs pull the Single Flow
      Group from all the upstream PEs attached to the redundant G-sources and
      avoid duplication on the receiver systems by adding a Reverse Path
      Forwarding check to the (*,G) state for the Single Flow Group:</t>

      <t><list style="symbols">
          <t>A downstream PE discards any (*,G) packets it receives from the
          "wrong G-source".</t>

          <t>The wrong G-source is identified in the data path by an Ethernet
          Segment Identifier label that is different than the Ethernet Segment
          Identifier label used for the selected G-source.</t>

          <t>Note that the Ethernet Segment Identifier label is used here for
          "ingress filtering" (at the egress/downstream PE) as opposed to the
          <xref target="RFC7432"/> "egress filtering" (at the
          egress/downstream PE) used in the split-horizon procedures. In <xref
          target="RFC7432"/> the Ethernet Segment Identifier label indicates
          what egress Attachment Circuits must be skipped when forwarding BUM
          traffic to the egress. In this document, the Ethernet Segment
          Identifier label indicates what ingress traffic must be discarded at
          the downstream PE.</t>
        </list></t>

      <t>The use of Ethernet Segment Identifier labels for Single Flow Groups
      forwarded by upstream PEs require some control plane and data plane
      extensions in the procedures used by <xref target="RFC7432"/> for
      multi-homing. Upon failure of the selected G-source, the downstream PE
      will switch over to a different selected G-source, and will therefore
      change the Reverse Path Forwarding check for the (*,G) state. The
      extensions and associated procedures are described in <xref
      target="sect-3"/> and <xref target="sect-5"/> respectively.</t>

      <t>An operator should use the Hot Standby solution if they require a
      fast fail-over time and the additional bandwidth consumption is
      acceptable (Single Flow Group packets are received multiple times on the
      downstream PEs). Otherwise the operator should use the Warm Standby
      solution, at the expense of a slower fail-over time in case of a
      G-source or upstream PE failure. Besides bandwidth efficiency, another
      advantage of the Warm Standby solution is that only the upstream PEs
      attached to the redundant G-sources for the same Single Flow Group need
      to be upgraded to support the new procedures.</t>

      <t>This document does not impose the support of both solutions on a
      system. If one solution is supported, the support of the other solution
      is OPTIONAL.</t>
    </section>

    <section anchor="sect-3" title="BGP EVPN Extensions">
      <t>This document makes use of the following BGP EVPN extensions:</t>

      <t><list style="numbers">
          <t>Single Flow Group flag in the Multicast Flags Extended
          Community<vspace blankLines="1"/>The Single Flow Group (SFG) flag is
          a new bit requested to IANA out of the registry Multicast Flags
          Extended Community Flag Values. This new flag is set for S-PMSI A-D
          routes that carry a (*,G)/(S,G) Single Flow Group in the NLRI.</t>

          <t>ESI Label Extended Community is used in S-PMSI A-D routes<vspace
          blankLines="1"/>The Hot Standby solution requires the advertisement
          of one or more ESI Label Extended Communities <xref
          target="RFC7432"/> that encode the Ethernet Segment Identifier(s)
          associated to an S-PMSI A-D (*,G)/(S,G) route that advertises the
          presence of a Single Flow Group. Only the ESI Label value in the
          extended community is relevant to the procedures in this document.
          The Flags field in the extended community will be advertised as 0x00
          and ignored on reception. <xref target="RFC7432"/> specifies that
          the ESI Label Extended Community is advertised along with the A-D
          per ES route. This documents extends the use of this extended
          community so that it can be advertised multiple times (with
          different ESI values) along with the EVPN S-PMSI A-D route.</t>
        </list></t>
    </section>

    <section anchor="sect-4"
             title="Warm Standby (WS) Solution for Redundant G-Sources">
      <t>This section describes the Warm Standby solution for redundant
      sources.</t>

      <section anchor="sect-4.1" title="Specification">
        <t>The general procedure is described as follows:</t>

        <t><list style="numbers">
            <t>Configuration of the upstream PEs <vspace
            blankLines="1"/>Upstream PEs (possibly attached to redundant
            G-sources) need to be configured to know which groups are carrying
            only flows from redundant G-sources, that is, the Single Flow
            Groups (SFGs) in the tenant domain. They will also be configured
            to know which local Broadcast Domains may be attached to a
            redundant G-source. The Single Flow Groups can be configured for
            any source, E.g., SFG for "*", or for a prefix that contains
            multiple sources that will issue the same SFG, i.e.,
            "192.0.2.0/30". In the latter case sources 192.0.2.1 and 192.0.2.2
            are considered as Redundant G-sources (since they are contained in
            192.0.2.0/30), whereas 192.0.2.10 is not considered a redundant
            G-source for the same SFG.<vspace blankLines="1"/>As an example
            (<xref target="ure-ws-solution-for-redundant-g-sources"/>):<list
                style="symbols">
                <t>PE1 is configured to know that G1 is an SFG for any source
                and redundant G-sources for G1 may be attached to Broadcast
                Domains BD1 or BD2.</t>

                <t>Or PE1 can also be configured to know that G1 is an SFG for
                the sources contained in 192.0.2.0/30, and those redundant
                G-sources may be attached to Broadcast Domains BD1 or BD2.</t>
              </list></t>

            <t>Signaling the location of a G-source for a given Single Flow
            Group<vspace blankLines="1"/>Upon receiving G-traffic for a
            configured SFG on a Broadcast Domain, an upstream PE configured to
            follow this procedure, e.g., PE1: <list style="symbols">
                <t>Originates an S-PMSI A-D (*,G)/(S,G) route for the SFG. An
                (*,G) route is advertised if the SFG is configured for any
                source, and an (S,G) route is advertised (where the Source can
                have any length) if the SFG is configured for a prefix.</t>

                <t>The S-PMSI A-D route is imported by all the PEs attached to
                the tenant domain. In order to do that, the route will use the
                SBD-RT (Supplementary Broadcast Domain Route Target) if the
                SBD exists, in addition to the BD-RT (Broadcast Domain Route
                Target) of the Broadcast Domain over which the G-traffic is
                received. The route SHOULD also carry a Designated Forwarder
                Election Extended Community and the SFG flag (in the Multicast
                Flags Extended Community) indicating that it conveys an SFG.
                The Designated Forwarder Election extended community and its
                use is specified in <xref target="RFC8584"/>.</t>

                <t>The above S-PMSI A-D route MAY be advertised with or
                without PMSI Tunnel Attribute:<list style="symbols">
                    <t>With no PMSI Tunnel Attribute if an I-PMSI or S-PMSI
                    A-D with Ingress Replication, Assisted Replication or BIER
                    are to be used.</t>

                    <t>With PMSI Tunnel Attribute in any other case.</t>
                  </list></t>

                <t>The S-PMSI A-D route is triggered by the first packet of
                the SFG and withdrawn when the flow is not received anymore.
                Detecting when the G-source is no longer active is a local
                implementation matter. The use of a timer is RECOMMENDED. The
                timer is started when the traffic to G1 is not received. Upon
                expiration of the timer, the PE will withdraw the route.</t>
              </list></t>

            <t>Single Forwarder (SF) Election<vspace blankLines="1"/>If the PE
            with a local G-source receives one or more S-PMSI A-D routes for
            the same Single Flow Group from a remote PE, it will run a Single
            Forwarder Election based on the information encoded in the
            Designated Forwarder Election extended community. Two S-PMSI A-D
            routes are considered for the same SFG if they are advertised for
            the same tenant, and their Multicast Source Length, Multicast
            Source, Multicast Group Length and Multicast Group fields
            match.<list style="numbers">
                <t>A given Designated Forwarder Algorithm can only be used if
                all the PEs running the Algorithm have consistent input. For
                example, in an OISM network, if the redundant G-sources for an
                SFG are attached to Broadcast Domains with different Ethernet
                Tags, the Default Designated Forwarder Election Algorithm MUST
                NOT be used.</t>

                <t>In case the there is a mismatch in the Designated Forwarder
                Election Algorithm or capabilities advertised by two PEs
                competing for the Single Forwarder role, the lowest PE IP
                address (given by the Originator Address in the S- PMSI A-D
                route) will be used as a tie-breaker.</t>
              </list></t>

            <t>Reverse Path Forwarding check on the PEs attached to a
            redundant G-source<vspace blankLines="1"/>All the PEs with a local
            G-source for the Single Flow Group will add a Reverse Path
            Forwarding check to the (*,G)/(S,G) state for the Single Flow
            Group. That Reverse Path Forwarding check depends on the Single
            Forwarder Election result:<list style="numbers">
                <t>The non-Single Forwarder PEs discard any (*,G)/(S,G)
                packets for the Single Flow Group received over a local
                Attachment Circuit.</t>

                <t>The Single Forwarder accepts any (*,G)/(S,G) packets for
                the Single Flow Group it receives over one (and only one)
                local Attachment Circuit.</t>
              </list></t>
          </list>The solution above provides redundancy for Single Flow Groups
        and it does not require an upgrade of the downstream PEs (PEs where
        there is certainty that no redundant G-sources are connected). Other
        G-sources for non-Single Flow Groups may exist in the same tenant
        domain. This document does not change the existing procedures for
        non-Single Flow Group G-sources.</t>

        <t>The redundant G-sources can be single-homed or multi-homed to a
        Broadcast Domain in the tenant domain. Multi-homing does not change
        the above procedures.</t>

        <t><xref target="sect-4.2"/> and <xref target="sect-4.3"/> show two
        examples of the Warm Standby solution.</t>
      </section>

      <section anchor="sect-4.2"
               title="Warm Standby Example in an OISM Network">
        <t><xref target="ure-ws-solution-for-redundant-g-sources"/>
        illustrates an example in which S1 and S2 are redundant G-sources for
        the Single Flow Group (*,G1).</t>

        <figure anchor="ure-ws-solution-for-redundant-g-sources"
                title="Warm Standby Solution for Redundant G-Sources">
          <artwork><![CDATA[
                     S1 (Single               S2
                     |   Forwarder)           |
              (S1,G1)|                 (S2,G1)|
                     |                        |
            PE1      |               PE2      |
            +--------v---+           +--------v---+
     S-PMSI |      +---+ |           |      +---+ | S-PMSI
     (*,G1) |  +---|BD1| |           |  +---|BD2| | (*,G1)
    Pref200 |  |VRF+---+ |           |  |VRF+---+ | Pref100
      |SFG  |+---+  | |  |           |+---+  |    |  SFG|
      | +----|SBD|--+ |  |-----------||SBD|--+    |---+ |
      v |   |+---+    |  |           |+---+       |   | v
        |   +---------|--+           +------------+   |
 SMET   |             |                               | SMET
 (*,G1) |             |   (S1,G1)                     | (*,G1)
        |    +--------+------------------+            |
    ^   |    |                           |            |   ^
    |   |    |                EVPN       |            |   |
    |   |    |                OISM       |            |   |
    |   |    |                           |            |   |
    PE3 |    |           PE4             |            | PE5
    +--------v---+       +------------+  |   +------------+
    |      +---+ |       |      +---+ |  |   |      +---+ |
    |  +---|SBD| |-------|  +---|SBD| |--|---|  +---|SBD| |
    |  |VRF+---+ |       |  |VRF+---+ |  |   |  |VRF+---+ |
    |+---+  |    |       |+---+  |    |  |   |+---+  |    |
    ||BD3|--+    |       ||BD4|--+    |  +--->|BD1|--+    |
    |+---+       |       |+---+       |      |+---+       |
    +------------+       +------------+      +------------+
      |  ^                                     |  ^
      |  | IGMP                                |  | IGMP
      R1 | J(*,G1)                             R3 | J(*,G1)
]]></artwork>
        </figure>

        <t>The Warm Standby solution works as follows:</t>

        <t><list style="numbers">
            <t>Configuration of the upstream PEs, PE1 and PE2<vspace
            blankLines="1"/> PE1 and PE2 are configured to know that G1 is an
            Single Flow Group for any source and redundant G-sources for G1
            may be attached to Broadcast Domains BD1 or BD2, respectively.</t>

            <t>Signaling the location of S1 and S2 for (*,G1)<vspace
            blankLines="1"/> Upon receiving traffic to G1 on a local
            Attachment Circuit, PE1 and PE2 originate S-PMSI A-D (*,G1) routes
            with the SBD-RT (Supplementary Broadcast Domain Route Target),
            Designated Forwarder Election Extended Community and the SFG flag
            in the Multicast Flags Extended Community, indicating that it
            conveys a Single Flow Group.</t>

            <t>Single Forwarder (SF) Election<vspace blankLines="1"/> Based on
            the Designated Forwarder Election extended community content, PE1
            and PE2 elect a Single Forwarder for (*,G1). Assuming both PEs
            agree on e.g., Preference based Election as the algorithm to use
            <xref target="I-D.ietf-bess-evpn-pref-df"/>, and PE1 has a higher
            preference, PE1 becomes the Single Forwarder for (*,G1).</t>

            <t>Reverse Path Forwarding check on the PEs attached to a
            redundant G-source<list style="letters">
                <t>The non-Single Forwarder, PE2, discards any (*,G1) packets
                received over a local Attachment Circuit.</t>

                <t>The Single Forwarder, PE1 accepts (*,G1) packets it
                receives over one (and only one) local Attachment Circuit.</t>
              </list></t>
          </list></t>

        <t>The end result is that, upon receiving IGMP/MLD reports for (*,G1)
        or (S,G1), the downstream PEs (PE3 and PE5) will issue SMET routes and
        will pull the multicast Single Flow Group from PE1, and PE1 only. Upon
        a failure on S1, the Attachment Circuit connected to source S1 or PE1
        itself will trigger the S-PMSI A-D (*,G1) withdrawal from PE1 and PE2
        will be promoted to Single Forwarder.</t>
      </section>

      <section anchor="sect-4.3"
               title="Warm Standby Example in a Single-BD Tenant Network">
        <t><xref
        target="ure-ws-solution-for-redundant-g-sources-in-the-same-bd"/>
        illustrates an example in which S1 and S2 are redundant G-sources for
        the Single Flow Group (*,G1), however, now all the G-sources and
        receivers are connected to the same Broadcast Domain BD1 and there is
        no Supplementary Broadcast Domain.</t>

        <figure anchor="ure-ws-solution-for-redundant-g-sources-in-the-same-bd"
                title="WS Solution for Redundant G-Sources in the same BD">
          <artwork><![CDATA[
                     S1 (Single               S2
                     |   Forwarder)           |
              (S1,G1)|                 (S2,G1)|
                     |                        |
            PE1      |               PE2      |
            +--------v---+           +--------v---+
    S-PMSI  |      +---+ |           |      +---+ | S-PMSI
    (*,G1)  |      |BD1| |           |      |BD1| | (*,G1)
    Pref200 |      +---+ |           |      +---+ | Pref100
     |SFG   |         |  |           |            |  SFG|
     |  +---|         |  |-----------|            |---+ |
     v  |   |         |  |           |            |   | v
        |   +---------|--+           +------------+   |
 SMET   |             |                               | SMET
 (*,G1) |             |     (S1,G1)                   | (*,G1)
        |    +--------+------------------------+      |
    ^   |    |                                 |      |   ^
    |   |    |                EVPN             |      |   |
    |   |    |                                 |      |   |
    |   |    |                                 |      |   |
    PE3 |    |           PE4                   |      | PE5
    +--------v---+       +------------+      +-|----------+
    |      +---+ |       |      +---+ |      | |    +---+ |
    |      |BD1| |-------|      |BD1| |------| +--->|BD1| |
    |      +---+ |       |      +---+ |      |      +---+ |
    |            |       |            |      |            |
    |            |       |            |      |            |
    |            |       |            |      |            |
    +------------+       +------------+      +------------+
      |  ^                                     |  ^
      |  | IGMP                                |  | IGMP
      R1 | J(*,G1)                             R3 | J(*,G1)
]]></artwork>
        </figure>

        <t>The same procedure as in <xref target="sect-4.2"/> is valid here,
        being this a sub-case of the one in <xref target="sect-4.2"/>. Upon
        receiving traffic for the Single Flow Group G1, PE1 and PE2 advertise
        the S-PMSI A-D routes with route target BD1-RT only, since there is no
        Supplementary Broadcast Domain (SBD).</t>
      </section>
    </section>

    <section anchor="sect-5"
             title="Hot Standby Solution for Redundant G-Sources">
      <t>This section describes the Hot Standby solution for redundant
      sources.</t>

      <section anchor="sect-5.1" title="Specification">
        <t>If fast-failover is required upon the failure of a G-source or PE
        attached to the G-source and the extra bandwidth consumption in the
        tenant network is not an issue, the Hot Standby solution should be
        used. The procedure is as follows:</t>

        <t><list style="numbers">
            <t>Configuration of the PEs<vspace blankLines="1"/>As in the Warm
            Standby case, the upstream PEs where redundant G-sources may exist
            need to be configured to know which groups (for any source or a
            prefix containing the intended sources) are carrying only flows
            from redundant G-sources, that is, the Single Flow Groups in the
            tenant domain. <vspace blankLines="1"/>In addition (and this is
            not done in Warm Standby mode), the individual redundant G-sources
            for a Single Flow Group need to be associated with an Ethernet
            Segment on the upstream PEs. This is irrespective of the redundant
            G-source being multi-homed or single-homed. Even for single-homed
            redundant G-sources the Hot Standby procedure relies on the ESI
            labels for the Reverse Path Forwarding check on downstream PEs.
            The term "S-ESI" is used in this document to refer to an Ethernet
            Segment Identifier associated to a redundant G-source. <vspace
            blankLines="1"/>Contrary to what is specified in the Warm Standby
            method (that is transparent to the downstream PEs), the support of
            the Hot Standby procedure is required not only on the upstream PEs
            but also on all downstream PEs connected to the receivers in the
            tenant network. The downstream PEs do not need to be configured to
            know the connected Single Flow Groups or their Ethernet Segment
            Identifiers, since they get that information from the upstream
            PEs. The downstream PEs will locally select an Ethernet Segment
            Identifier for a given Single Flow Group, and will program a
            Reverse Path Forwarding check to the (*,G)/(S,G) state for the
            Single Flow Group that will discard (*,G)/(S,G) packets from the
            rest of the Ethernet Segment Identifiers. The selection of the
            Ethernet Segment Identifier for the Single Flow Group is based on
            local policy, and therefore, different downstream PEs may select
            different Ethernet Segment Identifiers.</t>

            <t>Signaling the location of a G-source for a given Single Flow
            Group and its association to the local Ethernet Segments<vspace
            blankLines="1"/> Based on the configuration in step 1, an upstream
            PE configured to follow the Hot Standby procedures: <list
                style="letters">
                <t>Advertises an S-PMSI A-D (*,G)/(S,G) route per each
                configured Single Flow Group. These routes need to be imported
                by all the PEs of the tenant domain, therefore they will carry
                the route targets BD-RT (the route target of the Broadcast
                Domain) and SBD-RT (the route target of the Supplementary
                Broadcast Domain, if the SBD exists). The route also carries
                the ESI Label extended communities needed to convey all the
                S-ESIs associated to the Single Flow Group in the PE.</t>

                <t>The S-PMSI A-D route will convey a PMSI Tunnel Attribute in
                the same cases as in the Warm Standby procedure.</t>

                <t>The S-PMSI A-D (*,G)/(S,G) route is triggered by the
                configuration of the Single Flow Group and not by the
                reception of G-traffic.</t>
              </list></t>

            <t>Distribution of DCB (Domain-wide Common Block) ESI-labels and
            G-source ES routes<vspace blankLines="1"/> An upstream PE
            advertises the corresponding EVPN ES route, A-D per EVI and A-D
            per ES routes for the local S-ESIs. <list style="letters">
                <t>ES routes are used for regular Designated Forwarder
                Election for the S-ES. This document does not introduce any
                change in the procedures related to the EVPN ES routes.</t>

                <t>If the SBD exists, the EVPN A-D per EVI and A-D per ES
                routes MUST include the route target SBD-RT since they have to
                be imported by all the PEs in the tenant domain.</t>

                <t>The EVPN A-D per ES routes convey the S-ESI labels that the
                downstream PEs use to add the Reverse Path Forwarding check
                for the (*,G)/(S,G) associated to the Single Flow Groups. This
                Reverse Path Forwarding check requires that all the packets
                for a given G-source are received with the same S-ESI label
                value on the downstream PEs. For example, if two redundant
                G-sources are multi-homed to PE1 and PE2 via S-ES-1 and
                S-ES-2, PE1 and PE2 MUST allocate the same ESI label "Lx" for
                S-ES-1 and they MUST allocate the same ESI label "Ly" for
                S-ES-2. In addition, Lx and Ly MUST be different. These ESI
                labels are Domain-wide Common Block (DCB) labels and follow
                the allocation procedures in <xref target="RFC9573"/>.</t>
              </list></t>

            <t>Processing of EVPN A-D per ES/EVI routes and Reverse Path
            Forwarding check on the downstream PEs<vspace blankLines="1"/>The
            EVPN A-D per ES/EVI routes are received and imported in all the
            PEs in the tenant domain. The processing of the EVPN A-D per
            ES/EVI routes on a given PE depends on its configuration: <list
                style="letters">
                <t>The PEs attached to the same Broadcast Domain of the route
                target BD-RT that is included in the EVPN A-D per ES/EVI
                routes will process the routes as in <xref target="RFC7432"/>
                and <xref target="RFC8584"/>. If the receiving PE is attached
                to the same Ethernet Segment as indicated in the route, <xref
                target="RFC7432"/> split-horizon procedures will be followed
                and the Designated Forwarder Election candidate list may be
                modified as in <xref target="RFC8584"/> if the Ethernet
                Segment supports the AC-DF (Attachment Circuit influenced
                Designated Forwarder) capability.</t>

                <t>The PEs that are not attached to the Broadcast Domain
                identified by the route target BD-RT but are attached to the
                Supplementary Broadcast Domain of the received route target
                SBD-RT, will import the EVPN A-D per ES/EVI routes and use
                them for redundant G-source mass withdrawal, as explained
                later.</t>

                <t>Upon importing EVPN A-D per ES routes corresponding to
                different S-ESes, a PE MUST select a primary S-ES and add a
                Reverse Path Forwarding check to the (*,G)/(S,G) state in the
                Broadcast Domain or Supplementary Broadcast Domain. This
                Reverse Path Forwarding check will discard all ingress packets
                to (*,G)/(S,G) that are not received with the ESI-label of the
                primary S-ES. The selection of the primary S-ES is a matter of
                local policy.</t>
              </list></t>

            <t>G-traffic forwarding for redundant G-sources and fault
            detection<vspace blankLines="1"/>Assuming there is (*,G) or (S,G)
            state for the Single Flow Group with Output Interface list entries
            associated to remote EVPN PEs, upon receiving G-traffic on a S-ES,
            the upstream PE will add a S-ESI label at the bottom of the stack
            before forwarding the traffic to the remote EVPN PEs. This label
            is allocated from a Domain-wide Common Block as described in step
            3. If Point-to-multipoint or BIER PMSIs are used, this is not
            adding any new data path procedures on the upstream PEs (except
            that the ESI-label is allocated from a Domain-wide Common Block as
            described in <xref target="RFC9573"/>). However, if Ingress
            Replication or Assisted Replication are used, this document
            extends the <xref target="RFC7432"/> procedures by pushing the
            S-ESI labels not only on packets sent to the PEs that shared the
            ES but also to the rest of the PEs in the tenant domain. This
            allows the downstream PEs to receive all the multicast packets
            from the redundant G-sources with a S-ESI label (irrespective of
            the PMSI type and the local ESes), and discard any packet that
            conveys a S-ESI label different from the primary S-ESI label (that
            is, the label associated to the selected primary S-ES), as
            discussed in step 4. <vspace blankLines="1"/>If the last EVPN A-D
            per EVI or the last EVPN A-D per ES route for the primary S-ES is
            withdrawn, the downstream PE will immediately select a new primary
            S-ES and will change the Reverse Path Forwarding check. Note that
            if the S-ES is re-used for multiple tenant domains by the upstream
            PEs, the withdrawal of all the EVPN A-D per-ES routes for a S-ES
            provides a mass withdrawal capability that makes a downstream PE
            to change the Reverse Path Forwarding check in all the tenant
            domains using the same S-ES. <vspace blankLines="1"/>The
            withdrawal of the last EVPN S-PMSI A-D route for a given
            (*,G)/(S,G) that represents a Single Flow Group SHOULD make the
            downstream PE remove the S-ESI label based Reverse Path Forwarding
            check on (*,G)/(S,G).</t>
          </list></t>

        <t>As in <xref target="RFC9573"/> this document also allows the use of
        context label space ID extended community. When the context label
        space ID extended community is advertised along with the ESI label in
        an EVPN A-D per ES route, the ESI label is from a context label space
        identified by the Domain-wide Common Block label in the Extended
        Community.</t>
      </section>

      <section anchor="sect-5.2"
               title="Extensions for the Advertisement of DCB Labels">
        <t>Domain-wide Common Block Labels are specified in <xref
        target="RFC9573"/> and this document makes use of them for the
        procedures described in <xref target="sect-5.1"/>. <xref
        target="RFC9573"/> assumes that Domain-wide Common Block labels can
        only be used along with Multipoint-to-Multipoint, Point-to-Multipoint,
        or BIER tunnels and that, if the PMSI label is signaled as a
        Domain-wide Common Block label, then the ESI label used for
        multi-homing is also a Domain-wide Common Block label. This document
        extends the use of the Domain-wide Common Block allocation for ESI
        labels so that: <list style="letters">
            <t>Domain-wide Common Block allocated ESI labels MAY be used along
            with Ingress Replication tunnels, and</t>

            <t>Domain-wide Common Block allocated ESI labels MAY be used by
            PEs that do not use Domain-wide Common Block allocated PMSI
            labels.</t>
          </list>This control plane extension is indicated by adding the
        DCB-flag (Domain-wide Common Block flag) or the Context Label Space ID
        extended community to the EVPN A-D per ES route(s) advertised for the
        S-ES. The DCB-flag is encoded in the ESI Label Extended Community as
        follows:</t>

        <t><figure anchor="ESI-label" title="ESI Label Extended Community">
            <artwork><![CDATA[                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type=0x06     | Sub-Type=0x01 | Flags(1 octet)|  Reserved=0   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Reserved=0   |          ESI Label                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
          </figure>This document defines the bit 5 in the Flags octet of the
        ESI Label Extended Community as the ESI-DCB-flag. When the
        ESI-DCB-flag is set, it indicates that the ESI label is a Domain-wide
        Common Block label.</t>

        <t>A received ESI label is considered a Domain-wide Common Block label
        if either of these two conditions is met:</t>

        <t><list style="letters">
            <t>The ESI label is encoded in an ESI Label Extended Community
            with the ESI-DCB-flag set.</t>

            <t>The ESI label is signaled from a PE that advertised a PMSI
            label that is a Domain-wide Common Block label.</t>
          </list></t>

        <t>As in <xref target="RFC9573"/> this document also allows the use of
        context label space ID extended community. When the context label
        space ID extended community is advertised along with the ESI label in
        an EVPN A-D per ES route, the ESI label is from a context label space
        identified by the Domain-wide Common Block label in the Extended
        Community.</t>
      </section>

      <section anchor="sect-5.3" title="Use of BFD in the HS Solution">
        <t>In addition to using the state of the EVPN A-D per EVI, EVPN A-D
        per ES or S-PMSI A-D routes to modify the Reverse Path Forwarding
        check on (*,G)/(S,G) as discussed in <xref target="sect-5.1"/>,
        Bidirectional Forwarding Detection (BFD) protocol MAY be used to
        monitor the status of the multipoint tunnels used to forward the
        Single Flow Group packets from the redundant G-sources.</t>

        <t>The BGP-BFD Attribute is advertised along with the S-PMSI A-D or
        Inclusive Multicast Ethernet Tag routes (depending on whether
        Inclusive PMSI or Selective PMSI trees are used) and the procedures
        described in <xref target="I-D.ietf-bess-evpn-bfd"/> <xref
        target="I-D.ietf-mpls-p2mp-bfd"/> are used to bootstrap multipoint BFD
        sessions on the downstream PEs.</t>
      </section>

      <section anchor="sect-5.4"
               title="Hot Standby Example in an OISM Network">
        <t><xref
        target="ure-hs-solution-for-multi-homed-redundant-g-sources-in-oism"/>
        illustrates the Hot Standby model in an Optimized Inter-Subnet
        Multicast (OISM) network. Consider S1 and S2 are redundant G-sources
        for the Single Flow Group (*,G1) in Broadcast Domain BD1 (any source
        using G1 is assumed to transmit an SFG). S1 and S2 are (all-active)
        multi-homed to upstream PEs, PE1 and PE2. The receivers are attached
        to downstream PEs, PE3 and PE5, in Broadcast Domains BD3 and BD1,
        respectively. S1 and S2 are assumed to be connected by a Link
        Aggregation Group to the multi-homing PEs, and the multicast traffic
        can use the link to either upstream PE. The diagram illustrates how S1
        sends the G-traffic to PE1 and PE1 forwards to the remote interested
        downstream PEs, whereas S2 sends to PE2 and PE2 forwards further. In
        this Hot Standby model, the interested downstream PEs will get
        duplicate G-traffic from the two G-sources for the same Single Flow
        Group. While the diagram shows that the two flows are forwarded by
        different upstream PEs, the all-active multi-homing procedures may
        cause that the two flows come from the same upstream PE. Therefore,
        finding out the upstream PE for the flow is not enough for the
        downstream PEs to program the required Reverse Path Forwarding check
        to avoid duplicate packets on the receiver.</t>

        <figure anchor="ure-hs-solution-for-multi-homed-redundant-g-sources-in-oism"
                title="HS Solution for Multi-homed Redundant G-Sources in OISM">
          <artwork><![CDATA[
                     S1(ESI-1)                S2(ESI-2)
                     |                        |
                     | +----------------------+
              (S1,G1)| |               (S2,G1)|
                     +----------------------+ |
            PE1      | |             PE2    | |
            +--------v---+           +--------v---+
            |      +---+ |           |      +---+ |  S-PMSI
 S-PMSI     |  +---|BD1| |           |  +---|BD1| |  (*,G1)
 (*,G1)     |  |VRF+---+ |           |  |VRF+---+ |   SFG
  SFG       |+---+  | |  |           |+---+  | |  |   ESI1,2
 ESI1,2 +---||SBD|--+ |  |-----------||SBD|--+ |  |---+  |
    |   |   |+---+    |  |   EVPN    |+---+    |  |   |  v
    v   |   +---------|--+   OISM    +---------|--+   |
        |             |                        |      |
        |             |   (S1,G1)              |      |
 SMET   |   +---------+------------------+     |      | SMET
 (*,G1) |   |                            |     |      | (*,G1)
    ^   |   | +----------------------------+---+      |   ^
    |   |   | |             (S2,G1)      | |          |   |
    |   |   | |                          | |          |   |
    PE3 |   | |          PE4             | |          | PE5
    +-------v-v--+       +------------+  | | +------------+
    |      +---+ |       |      +---+ |  | | |      +---+ |
    |  +---|SBD| +-------|  +---|SBD| |--|-|-|  +---|SBD| |
    |  |VRF+---+ |       |  |VRF+---+ |  | | |  |VRF+---+ |
    |+---+  |    |       |+---+  |    |  | | |+---+  |    |
    ||BD3|--+    |       ||BD4|--+    |  | +->|BD1|--+    |
    |+---+       |       |+---+       |  +--->+---+       |
    +------------+       +------------+      +------------+
      |  ^                                     |  ^
      |  | IGMP                                |  | IGMP
      R1 | J(*,G1)                             R3 | J(*,G1)
]]></artwork>
        </figure>

        <t>In this scenario, the Hot Standby solution works as follows:</t>

        <t><list style="numbers">
            <t>Configuration of the upstream PEs, PE1 and PE2<vspace
            blankLines="1"/>PE1 and PE2 are configured to know that G1 is a
            Single Flow Group for any source (a source prefix length could
            have been configured instead) and the redundant G-sources for G1
            use S-ESIs ESI-1 and ESI-2 respectively. Both Ethernet Segments
            are configured in both PEs and their ESI value can be configured
            or auto-derived. The ESI-label values are allocated from a
            Domain-wide Common Block <xref target="RFC9573"/> and are
            configured either locally or by a centralized controller. We
            assume ESI-1 is configured to use ESI-label-1 and ESI-2 to use
            ESI-label-2. <vspace blankLines="1"/>The downstream PEs, PE3, PE4
            and PE5 are configured to support Hot Standby mode and select the
            G-source with e.g., lowest ESI value.</t>

            <t>PE1 and PE2 advertise S-PMSI A-D (*,G1) and EVPN ES, A-D per ES
            and A-D per EVI routes<vspace blankLines="1"/>Based on the
            configuration of step 1, PE1 and PE2 advertise an S-PMSI A-D
            (*,G1) route each. The route from each of the two PEs will include
            two ESI Label Extended Communities with ESI-1 and ESI-2
            respectively, as well as route target BD1-RT plus SBD-RT and the
            SFG flag (in the Multicast Flags Extended Community) that
            indicates that (*,G1) is a Single Flow Group. <vspace
            blankLines="1"/>In addition, PE1 and PE2 advertise EVPN ES and A-D
            per ES/EVI routes for ESI-1 and ESI-2. The EVPN A-D per ES and per
            EVI routes will include the route target of the SBD, i.e.,:
            SBD-RT, so that they can be imported by the downstream PEs that
            are not attached to Broadcast Domain BD1, e.g., PE3 and PE4. The
            EVPN A-D per ES routes will convey ESI-label-1 for ESI-1 (on both
            PEs) and ESI-label-2 for ESI-2 (also on both PEs).</t>

            <t>Processing of EVPN A-D per ES/EVI routes and Reverse Path
            Forwarding check<vspace blankLines="1"/>PE1 and PE2 received each
            other's ES and A-D per ES/EVI routes. Regular <xref
            target="RFC7432"/> <xref target="RFC8584"/> procedures will be
            followed for the Designated Forwarder Election and programming of
            the ESI-labels for egress split-horizon filtering. PE3/PE4 import
            the EVPN A-D per ES/EVI routes in the SBD. Since PE3 has created a
            (*,G1) state based on local interest, PE3 will add a Reverse Path
            Forwarding check to (*,G1) so that packets coming with ESI-label-2
            are discarded (lowest ESI value is assumed to give the primary
            S-ES).</t>

            <t>G-traffic forwarding and fault detection<vspace
            blankLines="1"/>PE1 receives G-traffic (S1,G1) on ES-1 that is
            forwarded within the context of Broadcast Domain BD1. Irrespective
            of the tunnel type, PE1 pushes ESI-label-1 at the bottom of the
            stack and the traffic gets to PE3 and PE5 with the mentioned
            ESI-label (PE4 has no local interested receivers). The G-traffic
            with ESI-label-1 passes the Reverse Path Forwarding check and it
            is forwarded to R1. In the same way, PE2 sends (S2,G1) with
            ESI-label-2, but this G-traffic does not pass the Reverse Path
            Forwarding check and gets discarded at PE3/PE5. <vspace
            blankLines="1"/>If the link from S1 to PE1 fails, S1 will forward
            the (S1,G1) traffic to PE2 instead. PE1 withdraws the EVPN ES and
            A-D routes for ESI-1. Now both flows will be originated by PE2,
            however the Reverse Path Forwarding checks do not change in
            PE3/PE5. <vspace blankLines="1"/>If subsequently, the link from S1
            to PE2 fails, PE2 also withdraws the EVPN ES and A-D routes for
            ESI-1. Since PE3 and PE5 have no longer A-D per ES/EVI routes for
            ESI-1, they immediately change the Reverse Path Forwarding check
            so that packets with ESI-label-2 are now accepted.</t>
          </list></t>

        <t><xref
        target="ure-hs-solution-for-single-homed-redundant-g-sources-in-oism"/>
        illustrates a scenario where sources S1 and S2 are single-homed to PE1
        and PE2 respectively. This scenario is a sub-case of the one in <xref
        target="ure-hs-solution-for-multi-homed-redundant-g-sources-in-oism"/>.
        Now ES-1 only exists in PE1, hence only PE1 advertises the EVPN A-D
        per ES/EVI routes for ESI-1. Similarly, ES-2 only exists in PE2 and
        PE2 is the only PE advertising EVPN A-D routes for ESI-2. The same
        procedures as in <xref
        target="ure-hs-solution-for-multi-homed-redundant-g-sources-in-oism"/>
        apply to this use-case.</t>

        <figure anchor="ure-hs-solution-for-single-homed-redundant-g-sources-in-oism"
                title="HS Solution for single-homed Redundant G-Sources in OISM">
          <artwork><![CDATA[
                     S1(ESI-1)                S2(ESI-2)
                     |                        |
              (S1,G1)|                 (S2,G1)|
                     |                        |
            PE1      |               PE2      |
            +--------v---+           +--------v---+
            |      +---+ |           |      +---+ |  S-PMSI
 S-PMSI     |  +---|BD1| |           |  +---|BD2| |  (*,G1)
 (*,G1)     |  |VRF+---+ |           |  |VRF+---+ |   SFG
  SFG       |+---+  | |  |           |+---+  | |  |   ESI2
  ESI1  +---||SBD|--+ |  |-----------||SBD|--+ |  |---+  |
    |   |   |+---+    |  |   EVPN    |+---+    |  |   |  v
    v   |   +---------|--+   OISM    +---------|--+   |
        |             |                        |      |
        |             |   (S1,G1)              |      |
 SMET   |   +---------+------------------+     |      | SMET
 (*,G1) |   |                            |     |      | (*,G1)
    ^   |   | +--------------------------------+----+ |   ^
    |   |   | |             (S2,G1)      |          | |   |
    |   |   | |                          |          | |   |
    PE3 |   | |          PE4             |          | | PE5
    +-------v-v--+       +------------+  |   +------v-----+
    |      +---+ |       |      +---+ |  |   |      +---+ |
    |  +---|SBD| |-------|  +---|SBD| |--|---|  +---|SBD| |
    |  |VRF+---+ |       |  |VRF+---+ |  |   |  |VRF+---+ |
    |+---+  |    |       |+---+  |    |  |   |+---+  |    |
    ||BD3|--+    |       ||BD4|--+    |  +--->|BD1|--+    |
    |+---+       |       |+---+       |      |+---+       |
    +------------+       +------------+      +------------+
      |  ^                                     |  ^
      |  | IGMP                                |  | IGMP
      R1 | J(*,G1)                             R3 | J(*,G1)
]]></artwork>
        </figure>
      </section>

      <section anchor="sect-5.5"
               title="Hot Standby Example in a Single-BD Tenant Network">
        <t>Irrespective of the redundant G-sources being multi-homed or
        single-homed, if the tenant network has only one Broadcast Domain,
        e.g., BD1, the procedures of <xref target="sect-5.4"/> still apply,
        only that routes do not include any SBD route target, i.e.,: SBD-RT,
        and all the procedures apply to Broadcast Domain BD1 only.</t>
      </section>
    </section>

    <section anchor="sect-6" title="Security Considerations">
      <t>The same Security Considerations described in <xref
      target="RFC9625"/> are valid for this document.</t>

      <t>From a security perspective, out of the two methods described in this
      document, the Warm Standby method is considered lighter in terms of
      control plane and therefore its impact is low on the processing
      capabilities of the PEs. The Hot Standby method adds more burden on the
      control plane of all the PEs of the tenant with sources and
      receivers.</t>
    </section>

    <section anchor="sect-7" title="IANA Considerations">
      <t>IANA is requested to allocate a bit in the Multicast Flags Extended
      Community registry that was introduced by <xref target="RFC9251"/>. This
      bit indicates that a given (*,G) or (S,G) in an S-PMSI A-D route is
      associated with an SFG (Single Flow Group). This bit is called "Single
      Flow Group" bit and it is defined as follows:</t>

      <texttable>
        <ttcol>Bit</ttcol>

        <ttcol>Name</ttcol>

        <ttcol>Reference</ttcol>

        <c>4</c>

        <c>Single Flow Group</c>

        <c>This Document</c>
      </texttable>
    </section>
  </middle>

  <back>
    <references title="Normative References">
      &RFC7432;

      &RFC6513;

      &RFC6514;

      &RFC9251;

      &RFC9625;

      &RFC8584;

      &RFC2119;

      &RFC8174;

      &RFC9573;
    </references>

    <references title="Informative References">
      &RFC9136;

      &RFC9572;

      &I-D.ietf-bess-evpn-pref-df;

      &RFC4364;

      &I-D.ietf-bess-evpn-bfd;

      &I-D.ietf-mpls-p2mp-bfd;

      &RFC7761;
    </references>

    <section anchor="sect-9" title="Acknowledgments">
      <t>The authors would like to thank Mankamana Mishra, Ali Sajassi and
      Greg Mirsky for their review and valuable comments.</t>
    </section>

    <section anchor="sect-10" title="Contributors">
      <t>In addition to the authors listed on the front page, the following
      people have significantly contributed to this document:</t>

      <t>Eric C. Rosen</t>

      <t>Email: erosen52@gmail.com</t>
    </section>
  </back>
</rfc>
