<?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-zhuang-idr-rr-dual-nexthop-00"
     ipr="trust200902">
  <front>
    <title abbrev="BGP RR Dual-Next-Hop Reflection">BGP Route Reflector
    Dual-Next-Hop Reflection for Path Protection</title>

    <author fullname="Shunwan Zhuang" initials="S." surname="Zhuang">
      <organization>Huawei Technologies</organization>

      <address>
        <postal>
          <street>Huawei Bld., No.156 Beiqing Rd.</street>

          <city>Beijing</city>

          <region/>

          <code>100095</code>

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

        <phone/>

        <facsimile/>

        <email>zhuangshunwan@huawei.com</email>

        <uri/>
      </address>
    </author>

    <author fullname="Haibo Wang" initials="H." surname="Wang">
      <organization>Huawei Technologies</organization>

      <address>
        <postal>
          <street>Huawei Bld., No.156 Beiqing Rd.</street>

          <city>Beijing</city>

          <code>100095</code>

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

        <email>rainsword.wang@huawei.com</email>
      </address>
    </author>

    <author fullname="Nan Geng" initials="N." surname="Geng">
      <organization>Huawei Technologies</organization>

      <address>
        <postal>
          <street>Huawei Bld., No.156 Beiqing Rd.</street>

          <city>Beijing</city>

          <code>100095</code>

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

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

    <date day="6" month="July" year="2026"/>

    <abstract>
      <t>This document specifies a mechanism where a BGP Route Reflector (RR)
      reflects a single received BGP route as two distinct routing updates
      towards a target client. By preserving the original client next-hop in
      one update and modifying the next-hop to the RR's own address in the
      second update, the receiving client obtains two parallel paths for the
      same prefix. This enables the receiving client to implement Load
      Balancing or Primary-Backup path protection without requiring full-mesh
      IBGP sessions or BGP Add-Path extensions.</t>

      <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>In traditional BGP Route Reflector (RR) deployments <xref
      target="RFC4456"/>, an RR only selects and propagates its single best
      path to its clients. While this significantly reduces the IBGP mesh
      complexity, it inherently hides alternative paths, limiting the clients'
      ability to perform Equal-Cost Multi-Path (ECMP) or Fast Reroute
      (FRR).</t>

      <t>Although extensions like BGP Add-Path <xref target="RFC7911"/> solve
      this by allowing the advertisement of multiple paths for the same
      prefix, they require both the RR and all receiving clients to support
      the Add-Path capability negotiation and parsing logic. In many legacy or
      multi-vendor environments, upgrading all edge clients is operationally
      challenging.</t>

      <t>This document proposes a localized, RR-centric behavioral change.
      When an RR receives a route R1 from Client-1, it generates two distinct
      routing updates for the same prefix towards Client-2:</t>

      <t><list style="numbers">
          <t>Path A (Unmodified Next-Hop): The NEXT_HOP attribute remains as
          Client-1's IP address.</t>

          <t>Path B (Modified Next-Hop): The NEXT_HOP attribute is altered to
          the RR's own loopback or interface IP address.</t>
        </list>Upon receiving these two parallel updates, Client-2 views them
      as distinct BGP paths and can program them into its forwarding pipeline
      for load-balancing or active/standby protection.</t>

      <t/>
    </section>

    <section title="Terminology">
      <t>The following terms are used in this document:</t>

      <t><list style="symbols">
          <t>RR: Route Reflector.</t>

          <t>Client-1: The originating BGP client that advertises the baseline
          route R1.</t>

          <t>Client-2: The target BGP client intended to receive the dual
          reflected paths.</t>

          <t>R1: The original BGP route containing prefix P and NEXT_HOP
          NH1.</t>
        </list></t>

      <t/>
    </section>

    <section title="Reference Topology">
      <t/>

      <t><figure>
          <artwork align="left"><![CDATA[
     +------------+
     |   Client-1 | (Originator of R1, Next-Hop = IP_C1)
     +------------+
           |
           |
           V [Route R1]
     +------------+
     |     RR     | (Applies Dual-Reflection Policy)
     +------------+
      /          \
     /            \ [Update 2: Prefix P, Next-Hop = IP_RR]
    /              \
   V [Update 1:     V
     Prefix P, 
     Next-Hop = IP_C1]
     +------------+
     |   Client-2 | (Receives parallel paths, installs ECMP/Backup)
     +------------+


]]></artwork>
        </figure></t>

      <t/>
    </section>

    <section title="Route Reflector Behavioral Specifications">
      <t/>

      <section title="Route Reception and Matching">
        <t>The RR MUST maintain standard BGP route selection processes to
        determine the best path. When a route R1 for prefix P is received from
        Client-1 with NEXT_HOP set to IP_C1, and the local outbound policy
        dictates path-protection for the target Client-2, the RR MUST trigger
        the dual-reflection processing logic.</t>

        <t/>
      </section>

      <section title="Generation of Update 1 (Direct Path)">
        <t>The RR MUST construct the first outbound BGP UPDATE message
        destined to Client-2 following standard <xref target="RFC4456"/>
        procedures:</t>

        <t><list style="symbols">
            <t>The NEXT_HOP attribute MUST remain unchanged (IP_C1).</t>

            <t>Standard RR attributes (ORIGINATOR_ID and CLUSTER_LIST) MUST be
            appended as per [RFC4456].</t>
          </list></t>

        <t/>
      </section>

      <section title="Generation of Update 2 (Mediated Path)">
        <t>Simultaneously, the RR MUST construct a second, distinct BGP UPDATE
        message for the identical prefix P destined to Client-2. To ensure
        Client-2 accepts this as a separate path rather than an implicit
        withdrawal/replacement of Update 1, the RR MUST modify its BGP path
        attributes:</t>

        <t><list style="symbols">
            <t>The NEXT_HOP attribute MUST be overwritten with the RR's own
            local BGP Router-ID or a designated Loopback IP address
            (IP_RR).</t>

            <t>To prevent Client-2's BGP decision process from immediately
            dropping this path due to identical tie-breakers, the RR SHOULD
            manipulate an attribute (e.g., Local_Pref or MED) based on network
            design requirements:</t>

            <t><list style="symbols">
                <t>For Load Balancing: Keep Local_Pref identical.</t>

                <t>For Primary-Backup: Set a lower Local_Pref or higher MED on
                Update 2 to render the RR-mediated path as the backup.</t>
              </list></t>

            <t>[Optional - Path Differentiator]: If Client-2 does not support
            receiving duplicate prefixes via different paths under a single
            session, the RR MAY utilize BGP Add-Path mechanisms strictly on
            the RR-to-Client-2 session, or send them via separate BGP
            sessions/families if configured.</t>
          </list></t>

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

    <section title="Client-2 Forwarding and Data Plane Implications">
      <t>Upon receiving both updates, Client-2's local BGP RIB will contain
      two paths for prefix P.</t>

      <t/>

      <section title="Data Plane Traversal">
        <t/>

        <t><list style="symbols">
            <t>Traffic steered via Path 1: Enters the network fabric with a
            data-plane destination IP or transport label pointing directly to
            Client-1 (bypassing the RR's data plane, if optimal).</t>

            <t>Traffic steered via Path 2: Enters the network fabric targeting
            the IP_RR. The RR MUST be capable of line-rate data-plane
            forwarding to subsequently relay these packets towards
            Client-1.</t>
          </list></t>
      </section>

      <section title="Failure Convergence">
        <t>If the links or node associated with Client-1 fail:<list
            style="symbols">
            <t>If Client-2 was operating in Primary-Backup mode (Path 1 as
            Primary, Path 2 as Backup), Client-2 can immediately trigger local
            repair or switch traffic over to Path 2 (towards RR) while BGP
            control plane convergence takes place.</t>
          </list></t>

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

    <section title="Security Considerations">
      <t>This mechanism does not alter the baseline security properties of the
      BGP protocol. However, changing the next-hop to the RR causes the RR to
      actively participate in the data-plane forwarding path for a subset of
      traffic. Network operators MUST ensure that the RR hardware or software
      platform has sufficient forwarding capacity (throughput and PPS) to
      handle the redirected backup/load-shared data traffic without
      introducing data-plane degradation or susceptibility to Denial of
      Service (DoS) attacks.</t>
    </section>

    <section anchor="IANA" title="IANA Considerations">
      <t>This document requires no IANA actions.</t>

      <t/>
    </section>

    <section title="Contributors ">
      <t>The following people made significant contributions to this
      document:</t>

      <t><figure>
          <artwork align="left"><![CDATA[To be added.

]]></artwork>
        </figure></t>
    </section>

    <section anchor="Acknowledgements" title="Acknowledgements">
      <t>The authors would like to acknowledge the review and inputs from
      xxx.</t>
    </section>
  </middle>

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

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

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

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

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

    <references title="Informative References"/>
  </back>
</rfc>
