<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc category="std" docName="draft-wang-bess-mvpn-upstream-df-selection-02"
     ipr="trust200902">
  <front>
    <title abbrev="MVPN Upstream DF Selection">Multicast VPN Upstream
    Designated Forwarder Selection</title>

    <author fullname="Fanghong Duan" initials="F." surname="Duan">
      <organization>Huawei Technologies</organization>

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

    <author fullname="Siyu Chen" initials="S." surname="Chen">
      <organization>Huawei Technologies</organization>

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

    <date day="6" month="Nov" year="2022"/>

    <abstract>
      <t>This document defines Multicast Virtual Private Network (VPN)
      extensions and procedures of designated forwarder election performed
      between ingress PEs, which is different from the one discribed in <xref
      target="RFC9026"/> in which the upstream designated fowarder determined
      by using the "Standby PE Community" carried in the C-Multicast routes.
      Based on the DF election, the failure detcetion point discovery
      mechanism between DF and standby DF is extended in MVPN procedures to
      achieve fast failover by using BFD session to track the status of
      detection point. To realize a stable "warm root standby", this document
      obsolete the P-Tunnel status determining procedure for downstream PEs in
      regular MVPN by introducing an anycast RPF checking mechanism in
      dataplane as an instead.</t>
    </abstract>

    <note title="Requirements Language">
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
      "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
      "OPTIONAL" in this document are to be interpreted as described in BCP 14
      <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when,
      they appear in all capitals, as shown here.</t>
    </note>
  </front>

  <middle>
    <section title="Introduction">
      <t>MVPN <xref target="RFC6513"/> and <xref target="RFC6514"/> defines
      the MVPN architecture and MVPN protocol specification which include the
      basic procedures for selecting the Upstream Multicast Hop. Further <xref
      target="RFC9026"/> defines some extension to select the primary and
      standby upstream PE for a VPN multicast flow on downstream PEs. After
      selecting the Upstream Multicast Hop, the downstream PEs send MVPN
      C-Multicast routes to both primary and standby Upstream PE. Upon
      receiving the MVPN join routes, the upstream / ingress PEs can either
      perform "hot root standby" or "warm root standby". For the "hot root
      standby" mechanism, all the ingress PEs, regardless of the primary or
      standby role, forward (C-S,C-G) flow to other PEs through a P-tunnel,
      forcing the egress PEs to discard all but one, which will cause the
      steady traffic redundancy throughout the backbone network. In the
      scenarios of enterprise networks crossing provider networks, the waste
      of bandwidth is a crucial issue causing the increasement of the OpEx of
      enterprise networks, and the "warm root standby" mechanism is expected
      to be a better solution. However, there are some problems when deploying
      the "warm root standby" mechanism described in <xref
      target="RFC9026"/>.</t>

      <t><list style="letters">
          <t>Upon the failure of primary ingress PE, the standby ingress PE
          needs to send PIM join hop by hop toward multicast source for each
          multicast flow and the time when the standby ingress PE switches to
          the primary role may be inconsistent with the time when the leaf PE
          determines to accept multicast traffic sent by the standby root,
          causing which the failover time can hardly reach the same level of
          "hot root standby" mechanism.</t>

          <t>There is no endogenous mechanism for standby ingress PEs to
          discover and detect the failure of primary ingress PEs, resulting in
          the uncertainty in deployment and implementation.</t>

          <t>In <xref target="RFC9026"/>, the standby ingress PE is determined
          by using "Standby PE Community" carried in the C-Multicast routes.
          The premise of this mechanism is that all leaf PEs choose the same
          primary and standby ingress PEs, which may not be meeted due to
          transient unicast routing inconsistencies, the inconsistencies of
          P-Tunnel status determined by each leaf PE or lack of support of the
          Standby PE community on leaf PE, causing that the "warm root
          standby" mechanism is not stable and returns to "hot root standby"
          mode because the standby ingress PE also sends multicast traffic to
          backbone when the condition is not satisfied.</t>

          <t>The primary and standby role is fixed for each multicast flow,
          resulting in that ingress PEs cannot perform load balancing for
          multicast traffic. Only two ingress PEs are selected for all
          multicast stream from a specific multicast source, causing that the
          "warm root standby" mechanism cannot be used in the scenarios of
          client nework multihoming to more than two ingress PEs.</t>
        </list></t>

      <t>This document defines a new MVPN procedure of designated forwarder
      election performed between ingress PEs. Based on the DF election, the
      failure detcetion point discovery mechanism between DF and standby DF is
      extended to achieve fast failover by using a BFD session to track the
      status of detection point. To realize a stable "warm root standby", this
      document obsoletes the P-Tunnel status determining procedure for
      downstream PEs in regular MVPN by introducing an anycast RPF checking
      mechanism in dataplane as an instead.</t>
    </section>

    <section title="Terminology">
      <t>The terminology used in this document is the terminology defined
      in<xref target="RFC6513"/>, <xref target="RFC6514"/> and <xref
      target="RFC9026"/>.</t>

      <t>For convenience of description, the abbreviations used in this
      document is listed below.</t>

      <t><list style="empty">
          <t>DF: Desiganted Forwarder</t>

          <t>IDF: Ingress Desiganted Forwarder</t>

          <t>UMH: Upstream Multicast Hop</t>

          <t>P-tunnel: Provider-Tunnel</t>

          <t>VPN: Virtual Private Network</t>

          <t>MVPN: Multicast VPN</t>

          <t>GTM: Global Table Multicast</t>

          <t>RD: Route Distinguisher</t>

          <t>NLRI: Network Layer Reachability Information</t>

          <t>BFD: Bidirectional Forwarding Detection</t>

          <t>MD: My Discriminator</t>

          <t>VRI: VRF Route Import Extended Community</t>

          <t>RR: Route Reflector</t>

          <t>SFS: Selective Forwarder Selection</t>
        </list></t>
    </section>

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

      <section title="Passive IDF Negotiation Mode">
        <t><figure title="Passive IDF Negotiation Mode">
            <artwork align="left"><![CDATA[                     
                 +------------------------+
                 |                        |
             / Root PE1                Leaf PE1 ----- R1
           /     |                        |
   S1 --- CE     |    Provider Backbone   |
           \     |                        |
            \  Root PE2                Leaf PE2 ----- R2
                 |                        |
                 +------------------------+

]]></artwork>
          </figure>In this scenario, the interfaces multihoming CE to
        provider's root PEs are bundled together and working in a eth-trunk
        mode, and a multichassis protocol is running between the multi-homed
        root PEs to coordinate with the CE to perform single active or all
        active data sending mode between CE and root PEs. Regardless either of
        the two sending mode is chosen, CE received multicast data from S1
        only selects one interface to forward traffic, thus the root PE homed
        by the selected interface is responsible for sending the corresponding
        multicast traffic to leaf PEs. The multi-homed root PEs do not really
        run an IDF negotiation procedure between themselves but accept the IDF
        role passively. Therefore, we call this scenario using Passive IDF
        Negotiation Mode in this document.</t>
      </section>

      <section title="Active IDF Negotiation Mode">
        <t><figure align="left" title="Active IDF Negotiation Mode">
            <artwork><![CDATA[ 
                                 +------------------------+
          +----------------+     |                        |
          |                | -- Root PE1                Leaf PE1 ----- R1
          |                |     |                        |
   S1 --- | Client Network |     |    Provider Backbone   |
          |                |     |                        |
          |                | -- Root PE2                Leaf PE2 ----- R2
          +----------------+     |                        |
                                 +------------------------+

]]></artwork>
          </figure>In this scenario, the "Client Network" is a layer 3 network
        area containing one or more CE routers. If only one CE router is
        included in the "Client Network" , the main difference between this
        circumstance and above is that the interfaces multihoming CE to root
        PEs are not bundled and each of them is an individual layer 3
        interface. The IP subnet of the multihoming interfaces can be in
        either same or different, each of the multi-homed root PEs can receive
        one copy of the specific multicast stream (S1, G) received through the
        "Client Network". For the "warm root standby" mechanism, only one root
        PE (Called IDF in this doucument) can send the received multicast
        traffic to leaf PEs through provider's backbone. Thus the IDF must be
        selected among the multi-homed root PEs by themselves. So, in this
        document, we call this scenario using Active IDF Negotiation Mode.</t>
      </section>
    </section>

    <section title="Specification">
      <section title="IDF Negotiation Community">
        <t>This community is carried in the UMH routes and used by the multi-homed
        root PEs to notify each other to perform IDF election. Leaf PEs
        can also check whether the UMH route is containing this community to
        perform anycast RPF checking in data plane. The value of this
        community will be allocated by IANA for each negotiation mode
        individually from the "Border Gateway Protocol (BGP) Well-known
        Communities" registry using the First Come First Served registration
        policy.</t>
      </section>

      <section title="BFD Discriminator Attribute">
        <t>This attribute is carried in UMH routes and its format reuses the
        one defined in <xref target="RFC9026"/> with the "BFD Mode" field
        redefined as a unicast BFD session type, of which the value is
        recommended to be 2 and will be allocated by IANA according to the
        registration policy. The source IP optional TLV in this document is
        mandantory and used to discover the failure detection point of the
        IDF.</t>

        <t/>
      </section>
    </section>

    <section title="Procedure">
      <section title="Signaling">
        <t>In this section, the procedure is under the condition that the
        value of the RDs of multi-homed root PEs for a same MVPN are distinct,
        which means that the VPN route originated by each multi-homed PE can
        be received by the others and leaf PEs can also perform SFS reliably.
        </t>

        <section title="Originating VPN Routes to Multicast Sources">
          <t>To perform IDF election procedure in this document, the multi-homed
          root PEs MUST include an IDF negotiation Community in the
          originating VPN routes to multicast sources. The negotiation mode
          (Passive or Active) is determined by the connection type of the
          Client network / CE, and MUST be configured consistently on each
          multi-homed root PE.</t>

          <t>In order to perform endogenous mechanism of IDF election and fast
          failure detection, the BFD Discriminator Attribute discribed in
          section 4.2 MUST also be carried when each multi-homed root PE
          originates a UMH routes, with the MD feild filled with a local
          configured BFD discriminator and the IP address feild of the
          Source IP TLV filled with the local IP of the interface connecting
          to the Client network / CE, from which the prefix of the originating
          UMH route is learned. If the UMH prefix is learned from more than
          one local interface, the one chosen to fill the Source IP TLV of the
          BFD Discriminator Attribute MUST be consistent with the one
          selected as RPF interface for the multicast stream sent by the
          corresponding multicast source. In this document, the filled Source
          IP address is the failure detection point, if the corresponding root
          PE is selected as the IDF of a specific multicast stream, it is used
          to establish a BFD session to do fast tracking of failure of IDF.
          In IPv6 scenarios, a global IPv6 address SHOULD be configured on the
          client facing interfaces to succeed in the establishment of multi-hop
          IPv6 BFD sessions.</t>
        </section>

        <section title="Originating C-Multicast Routes">
          <t>If a leaf PE decides to send C-Multicast routes to upstream PEs
          for a given (C-S, C-G), it follows the procedure described in <xref
          target="RFC6514"/> excepting that the RPF route of the c-root has an
          IDF negotiation community. According to the negotiation community, a
          distinct C-Multicast route for (C-S, C-G) is sent to each multi-homed
          root PE. Leaf PE installs all P-Tunnels rooted from the
          multi-homed PEs into the anycast RPF tunnel checklist of the
          corresponding multicast traffic (C-S, C-G).</t>

          <t>If there is a local receiver connected to one of the multi-homed
          root PEs and the Passive IDF Negotiation Mode is performed between
          them, the root PE having local receivers sends the specific
          C-Multicast route (C-S, C-G) joined by the local receivers to the
          multi-homed others, after which it installs all P-Tunnels rooted
          from the multi-homed others and local upstream interface into the
          anycast RPF tunnel checklist of the corresponding multicast
          traffic (C-S, C-G).</t>
        </section>

        <section title="Ingress Desiganted Forwarder Selection">
          <t>For Passive IDF election, it is performed by CE routers as
          described in section 3.1. This section describes two optional
          solutions for Active IDF election.</t>

          <t/>

          <section title="Out-Of-Band Mechanism">
            <t>VRRP specifies an election protocol that dynamically assigns
            responsibility of a virtual router to one of the VRRP routers on
            a LAN. The VRRP router controlling the IPv4 or IPv6 address(es)
            associated with a virtual router is called the Master, and it
            forwards packets sent to these IPv4 or IPv6 addresses. Similarly,
            the role of the VRRP routers associated with a virtual router can
            also be that of the upstream PEs in MVPN dual homing upstream PEs
            deployment.</t>

            <t>The method of mapping the role of a VRRP router to that of a
            MVPN upstream PE is more likely an administrative measure and
            could be implemented as configurable policies. Both the primary
            and standby PEs install VRF PIM state corresponding to BGP Source
            Tree Join route and send C-Join messages to the CE toward C-S.
            Whereas only the primary upstream PE (Virtual Router Master
            according to VRRP) forwards (C-S,C-G) flow to downstream PEs
            through a P-tunnel if IDF election is performing between the
            upstream PEs.</t>

            <t>Other private implementations or similar designated forwarder
            selection technologies could also be optional. However, a feasible
            technology should has the ability to be deployed per VRF and
            be associated with one Multicast VPN instance. All PEs
            connected to the same customer's layer 3 network area MUST keep a
            coincident status of whether performing IDF election or not by
            negotiating dynamically or being configured manually, the dynamic
            protocol for negotiation of this status is outside the scope of
            this document.</t>
          </section>

          <section title="Endogenous Mechanism">
            <t>Considering a multicast source connecting to the client network
            area multihoming to the provider network, the prefix of the
            source can be learned by all multi-homed root PEs, each of which
            originates a corresponding VPN route with a VRI Extended Community
            including the originator's IP address to the others and
            leaf PEs. According to that, each multi-homed root PE can learn
            all the others' originator IP addresses for a specific multicast
            source, based on which the IDF can be calculated consistently on
            each root.</t>

            <t>The default procedure for IDF election is at the granularity of
            &lt;C-S, C-G&gt;. There are two options listed below for IDF
            election of a specific multicast source C-S, a deployment can use
            each of them and MUST be configured consistently among the multi-homed
            root PEs:</t>

            <t><list style="letters">
                <t>To perform single IDF election for all C-Gs of a specific
                multicast source C-S, each PE builds an ordered list in
                ascending order of the IP addresses of all multi-homed PE
                nodes learning the UMH routes to the multicast source
                C-S (including itself). As described in the first paragraph of
                this section, each IP address in this list is extracted from
                the Global Administrator field of VRI Extended Community carried
                in those UMH routes related to the specified multicast source C-S.
                Every PE is then given an ordinal indicating its position in
                the ordered list, starting with 0 as the ordinal for the PE
                with the numerically lowest IP address. The originator IP
                address with ordinal 0 is the winner, and the corresponding
                root PE is selected as IDF by every PE. The root PE of which
                the corresponding originator IP address is sub-optimal is
                selected as Standby IDF.</t>

                <t>To perform IDF election for each C-G of a specific
                multicast source C-S, each PE also builds an ordered list of
                the IP addresses of all the multi-homed PE nodes at first. The
                difference between this option and above is that the election
                of IDF occurs not upon receiving all UMH routes of the other
                multi-homed PEs of the specfied C-S but upon receiving the
                C-multicast join of the corresponding C-G. Assuming an ordered
                list of N elements, the PE with ordinal i is the IDF for a C-G
                when (C-G mod N) = i. The PE with ordinal j is the Standby
                IDF when j is (C-G mod (N-1)). The calculation of standby IDF
                uses the ordered IP addresses list without considering the
                existance of the elected IDF element.</t>
              </list></t>
          </section>
        </section>

        <section title="Failure Detection and Fast Failover">
          <t>For the Passive IDF Negotiation Mode, the CE router is
          responsible for the failure detection of multihoming links or multi-homed
          PE nodes using some existing solution, which is out the scope
          of this document. For the Active IDF Negotiation Mode with
          Out-Of-Band Mechanism described in section 5.1.3.1, the failure
          detection solution is always built in the multichassis protocols
          used for IDF election. This section only details the failure
          detection and fast failover procedure for the Active IDF negotiation
          mode with endogenous mechanism.</t>

          <t>To detect the failure of the node or the client facing link of
          IDF fastly, after the election of IDF PE and Standby IDF PE, the
          Standby IDF initializes a BFD session. Several important parameters of
          the BFD session are introduced as follows. The source IP of the BFD
          session uses a local configured IP address of the corresponding
          multicast VRF. The destination IP is extracted from the Source IP TLV
          of BFD Discriminator Attribute carried in the UMH route sent by the IDF.
          MD is filled with the MD feild of BFD Discriminator Attribute carried
          in VPN routes originated by current Standby IDF. The YD(Your Discriminator)
          of the BFD session is dynamically learned through the BFD
          initialization procedure.</t>

          <t>Upon the occasion of the failure, the status of the BFD session
          goes down. The Standby IDF PE of the C-Gs selecting the
          failure / affected node as IDF takes over the primary role and sends
          the multicast traffic belonging to C-Gs to leaf PEs through the
          backbone. The failure / affected PE withdraws its VPN route
          advertised before, this will re-trigger the procedure described in
          section 5.1.3.2 and a new IDF PE (which was the old Standby IDF PE)
          and Standby IDF PE will be selected.</t>

          <t>If the previous failure node / link goes up again or a new multi-homed
          PE of the specified multicast source is coming up and the IDF
          PE is calculated to be changed, the new IDF will take over the
          running IDF. To avoid data transfer crash, the running IDF (That
          should be the new Standby IDF) dose not trigger the establishment of
          BFD session with new IDF until the local configured failback time
          expires, during which it keeps the IDF role and waits the new IDF
          completing the establishment of the multicast path from the SDR of
          the specified multicast source to itself. Upon the occasion of BFD
          session goes up, the running IDF stops sending multicast traffic to
          leaf PEs and the new IDF takes over the IDF role to send
          multicast stream for (C-S, C-G).</t>
        </section>
      </section>

      <section title="Data Forwarding">
        <section title="Procedure on Root PEs">
          <t>For the Passive IDF Negotiation Mode, the set of leaves of
          P-Tunnel rooted at each multi-homed PE has the others as members if
          the others have local reveivers willing to accept the corresponding
          C-Flow. The detailed signaling procedure is described in section
          5.1.2. When CE sends multicast data performing load balance to only
          one root PE (Which is the Passive IDF), IDF send this multicast
          traffic to the leaf PEs and the other multi-homed root PEs. when the
          multi-homed root PEs receive the C-Flow, it MUST perform anycast RPF
          checking, by accepting the data from either the client facing
          interface learning the corresponding route of the multicast source
          or anyone of the P-Tunnels rooted at the other multi-homed PEs. To
          avoid multicast traffic loop and duplication, the data received from
          the P-Tunnels at each root PE MUST NOT send back to P-Tunnels again
          and can only be forwarded to the local receivers of the receiving
          PE.</t>

          <t>For the Active IDF Negotiation Mode, each multi-homed root PE
          receives a copy of C-Flow and forwards the multicast traffic to its
          local receivers. Only DF can send data to leaf PEs through backbone.
          All of the multi-homed root PEs perform RPF cheking by matching
          their client facing interface exactly.</t>
        </section>

        <section title="Procedure on Leaf PEs">
          <t>For either of the two IDF negotiation modes described in this
          document, leaf PEs install each P-Tunnel rooted at each multi-homed
          root PE into the anycast RPF checklist for the corresponding
          multicast flow (C-S, C-G), thus the multicast data sent by each of
          the multi-homed root PEs can be accepted by leaf PEs. Upon the
          failure of IDF, the Standby IDF takes over the primary role and leaf
          PEs are ready to receive the data sent by the new primary IDF with no
          latency thanks to the anycast RPF checking mechanism.</t>
        </section>
      </section>

      <section title="Distinguishing UMH and C-multicast Routes">
        <t>// To do.</t> 
      </section>

      <section title="Segmented Inter-AS Scenario">
        <t>// To do.</t>
      </section>
    </section>

    <section title="Security Considerations">
      <t>This document follows the security considerations specified in <xref
      target="RFC6513"/> and <xref target="RFC6514"/>.</t>

    </section>

    <section title="IANA Considerations">
      <t>This document defines a new BGP Community called IDF negotiation
      Community, of which the value will be allocated from IANA for each
      negotiation mode individually. The BFD Discriminator Attribute defined
      in <xref target="RFC9026"/> is reused and the value of BFD Mode is
      recommend to be 2 in this document, which will be review by IANA.</t>
    </section>

    <section title="Acknowledgements">
      <t>The authors wish to thank Jingrong Xie, for his reviews, comments and
      suggestions.</t>

      <t/>
    </section>
  </middle>

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

      <?rfc include='reference.RFC.6514'?>

      <?rfc include='reference.RFC.9026'?>

      <?rfc include='reference.RFC.5798'?>

      <?rfc include='reference.RFC.2119'?>

      <?rfc include='reference.RFC.4360'?>

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

      <?rfc include='reference.RFC.7716'?>

      <?rfc include='reference.RFC.6515'?>

      <?rfc include='reference.RFC.7524'?>
    </references>
  </back>
</rfc>
