<?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-ietf-idr-rtc-hierarchical-rr-07"
     ipr="trust200902">
  <front>
    <title abbrev="RT-Constrain in Hierarchical RR Scenario">RT-Constrain
    Optimization in Hierarchical Route Reflection Scenarios</title>

    <author fullname="Jie Dong" initials="J." surname="Dong">
      <organization>Huawei Technologies</organization>

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

          <city>Beijing</city>

          <code>100095</code>

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

        <email>jie.dong@huawei.com</email>
      </address>
    </author>

    <author fullname="Mach(Guoyi) Chen" initials="M." surname="Chen">
      <organization>Huawei Technologies</organization>

      <address>
        <postal>
          <street/>

          <city/>

          <code/>

          <country/>
        </postal>

        <email>mach.chen@outlook.com</email>
      </address>
    </author>

    <author fullname="Robert Raszuk" initials="R." surname="Raszuk">
      <organization>Arrcus</organization>

      <address>
        <postal>
          <street/>
        </postal>

        <email>robert@raszuk.net</email>
      </address>
    </author>

    <date day="2" month="November" year="2026"/>

    <abstract>
      <t>The Route Target (RT) Constrain mechanism specified in RFC 4684 is
      used to build a route distribution graph in order to restrict the
      propagation of Virtual Private Network (VPN) routes. In network
      scenarios where hierarchical route reflection (RR) is used, the existing
      RT-Constrain mechanism cannot guarantee a correct route distribution
      graph. This document describes the problem scenario and proposes
      solutions to address the RT-Constrain issue in hierarchical RR
      scenarios.</t>
    </abstract>

    <note title="Requirements Language">
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
      "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
      document are to be interpreted as described in <xref
      target="RFC2119">RFC 2119</xref>.</t>
    </note>
  </front>

  <middle>
    <section title="Introduction">
      <t>The Route Target (RT) Constrain mechanism specified in <xref
      target="RFC4684"/> is used to build a route distribution graph in order
      to restrict the propagation of Virtual Private Network (VPN) routes. In
      network scenarios where hierarchical route reflection (RR) is used, the
      existing advertisment rules of RT membership information as defined in
      section 3.2 of <xref target="RFC4684"/> cannot guarantee a correct route
      distribution graph.</t>

      <t>This document describes the problem scenario and proposes solutions
      to address the RT-Constrain issue in hierarchical RR scenarios.</t>
    </section>

    <section title="Problem Statement">
      <t/>

      <t><figure>
          <artwork align="center"><![CDATA[                 +-----+
         Clu-1   | RR-1| 
                 +-----+
                 / / \ \
         ------/  /   \  \--------
        /        /     \          \
      /  Clu-2  /       \   Clu-3  \
  +-/---+  +---/-+      +\----+  +--\--+
  |RR-21|  |RR-22|      |RR-31|  |RR-32|
  +-----+  +-----+      +-----+  +-----+
     | \    / |            | \    / |
     |   \/   |            |   \/   |
     |   /\   |            |   /\   |
     | /    \ |            | /    \ |
  +-----+  +-----+      +-----+  +-----+
  | PE-1|  | PE-2|      | PE-3|  | PE-4|
  +-----+  +-----+      +-----+  +-----+

    RT-1     RT-1         RT-1     RT-1
  +-----+  +-----+      +-----+  +-----+
  |VPN-1|  |VPN-1|      |VPN-1|  |VPN-1|
  +-----+  +-----+      +-----+  +-----+
 Figure 1. RT-Constrain with Hierarchical RRs
]]></artwork>
        </figure></t>

      <t>As shown in Figure 1, hierarchical RRs are deployed in the network,
      RR-21, RR-22 and RR-31, RR-32 are level-1 route-reflectors which connect
      to the PEs, and are also the clients of the level-2 route-reflector
      RR-1. RR-21 and RR-22 are in RR cluster 1, RR-31 and RR-32 are in RR
      cluster 2. If each PE advertises RT membership information of RT-1 to
      the upstream RRs, after the best path selection, the level-1 RRs (RR-21,
      RR-22, RR-31 and RR-32 would create the CLUSTER_LIST attribute, prepend
      their local CLUSTER_ID and then advertise the best path to RR-1 and
      their clients respectively.</t>

      <t>On receipt of the RT-Constrain routes from the level-1 RRs, RR-1
      selects one of the received routes as the best route, here assume the
      route received from RR-21 is selected by RR-1 as the best route. Then
      RR-1 needs to advertise the best RT-Constrain route to RR-21, RR-22,
      RR-31 and RR-32 to create the route distribution graph of VPN-1. RR-1
      would prepend its CLUSTER_ID to the CLUSTER_LIST of the path. According
      to the rules in Section 3.2 of <xref target="RFC4684"/>, it sets the
      ORIGINATOR_ID to its own router-id, and sets the NEXT_HOP to the local
      address for the session. Then RR-1 would advertise this route to RR-21,
      RR-22, RR-31 and RR-32 respectively. On receipt of the RT-Constrain
      route from RR-1, RR-21 and RR-22 checks the CLUSTER_LIST and find its
      own CLUSTER_ID in the list, so this route will be ignored by RR-21 and
      RR-22. As a result, RR-21 and RR-22 will not form the outbound filter of
      RT-1 towards RR-1, hence it will not advertise the VPN routes of VPN-1
      to RR-1.</t>
    </section>

    <section title="Solutions">
      <t>This document specifies 2 solutions for the RTC issue in hierarchical
      RR scenario. The add-path based solution in Section 3.1 is RECOMMENDED
      as the primary solution, as it preserves the existing BGP loop detection
      mechanisms defined in <xref target="RFC4271"/> while allowing the
      higher-layer RR to advertise multiple RTC routes to the lower-layer RRs.
      Section 3.2 provides an alternative solution by allowing duplicated
      CLUSTER_ID in path selection, which can be used in deployments where
      add-path is not available. Appendix A describes another possible
      approach which is for further discussion.</t>

      <section title="Add-path Based Solution">
        <t>This section provides one solution which is based on the add-path
        mechanism defined in <xref target="RFC7911"/>. It makes use of the
        add-path mechanism for RT-Constrain route advertisement between the
        hierarchical RRs. The solution is summarized as follows:</t>

        <t><list style="symbols">
            <t>The route-reflector clients which themselves are also
            route-reflectors SHOULD be identified, then BGP add-paths <xref
            target="RFC7911"/> SHOULD be enabled for RT membership NLRI on the
            BGP sessions between the higher-layer RR and the lower layer RRs
            to ensure that sufficient RT-Constrain routes can be advertised by
            the higher-layer RR to the lower-layer RRs to pass the BGP loop
            detection. In this case normal BGP path advertisement rules as
            defined in <xref target="RFC4271"/> SHOULD be applied. The
            RECOMMENDED number of paths to be advertised with add-path is a
            local decision of the operator. To ensure that sufficient
            RT-Constrain routes are advertised to build the RTC distribution
            graph, the RECOMMENDED add-path number is the maximum number of
            the BGP client sessions in the same cluster plus 1.</t>

            <t>When advertising an RT membership NLRI to a route-reflector
            client which is not a lower layer RR, the advertisement rule as
            defined in section 3.2 of <xref target="RFC4684"/> SHOULD be
            applied.</t>
          </list>With the above advertisement rule, RR-1 in Figure 1 SHOULD
        advertise to RR-21 the RT-Constrain routes received from RR-21, RR-22
        and RR-31, then the RTC route from RR-31 will pass the BGP loop
        detection on RR-21 and RR-22, and the route from RR-21 will pass the
        BGP loop detection on RR-31 and RR-32, thus the route distribution
        graph can be set up correctly.</t>
      </section>

      <section title="Allowing Duplicated CLUSTER_ID">
        <t>This section provides another solution for the distribution of
        RT-Constrain routes in hierarchical RR scenarios. As the RT-Constrain
        route may be ignored due to duplicated CLUSTER_ID in the CLUSTER_LIST
        of the received BGP Update, one knob can be introduced by an
        implementation to control whether CLUSTER_ID duplication is allowed or
        not, and the maximum number of duplication allowed for any CLUSTER_ID
        in the received CLUSTER_LIST can be configurable based on the network
        topology and the operator's policy.</t>

        <t>In the scenario shown in Figure 1, this knob can be enabled on all
        the level-1 RRs (RR-21, RR-22, RR-31 and RR-32) respectively, so that
        the RT-Constrain route received from the RR-1 can pass the route
        selection, and the route distribution graph can be set up
        correctly.</t>

        <t>It should be noted that allowing duplicated CLUSTER_ID weakens the
        BGP loop detection for RT-Constrain routes. In a hierarchical RR
        topology, if the level-2 RR advertises the same RT-Constrain route
        back to the level-1 RRs from which it was received, and the level-1
        RRs accept it due to the relaxed CLUSTER_ID check, the route may
        oscillate between the level-2 RR and the level-1 RRs. Operators SHOULD
        be aware of this risk. Route oscillation may be avoided if BGP policy
        is configured such that one path is consistently preferred over the
        other, e.g., by setting local-preference or MED so that the level-1
        RRs always prefer the path received from their own clients over the
        path reflected from the level-2 RR.</t>
      </section>
    </section>

    <section title="Operational Considerations">
      <t>Within an operator's network, a uniform mechanism SHOULD be selected
      for all hierarchical RR layers. Mixing add-path based solution (Section
      3.1) on some RRs with the duplicated CLUSTER_ID solution (Section 3.2)
      on others is NOT RECOMMENDED, as it complicates the route distribution
      graph and makes troubleshooting difficult. The add-path based solution
      is RECOMMENDED for new deployments. Operators enabling it SHOULD
      configure the add-path path count as described in section 3.1. If the
      duplicated CLUSTER_ID solution as described in section 3.2 is used,
      operators SHOULD ensure that consistent local-preference or MED policy
      is applied on all lower-layer RRs.</t>

      <t>When migrating from a non-hierarchical RR deployment to a
      hierarchical one, operator SHOULD verify that RTC routes are propagated
      across all RR layers and that no RT-Constrain route is silently dropped
      by loop detection.</t>
    </section>

    <section anchor="IANA" title="IANA Considerations">
      <t>This document makes no request of IANA.</t>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>This document does not change the security properties of BGP based
      VPNs and <xref target="RFC4684"/>.</t>
    </section>

    <section anchor="Acknowledgements" title="Acknowledgements">
      <t>The authors would like to thank Yaqun Xiao for the discussion of
      RT-Constrain issue in hierarchical RR scenario. Many people have made
      valuable comments and suggestions, including Susan Hares, Jeffrey Haas,
      Stephane Litkowski, Vitkovsk&yacute; Adam, Xiaohu Xu, Uttaro James,
      Shyam Sethuram, Saikat Ray and Bruno Decraene.</t>
    </section>
  </middle>

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

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

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

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

    <references title="Informative References">
      <?rfc include='reference.RFC.9107'?>
    </references>

    <section anchor="egAPP" title="Another Possible Solution">
      <t>This section specifies one possible solution which proposes
      modifications to the intra-AS advertisement rule of RTC route.</t>

      <t>Since the advertisement of RT-Constrain route is to set up a route
      distribution graph and not to guide the data packet forwarding, actually
      all the available RT-Constrain routes should be considered in setting up
      the route distribution graph, not just the best one. Thus the following
      advertisment rule for RT membership information is proposed to replace
      the rule i and ii in section 3.2 of <xref target="RFC4684"/>:</t>

      <t><list style="symbols">
          <t>When advertising an RT membership NLRI to a route-reflector peer
          (either client or non-client), the route which has the most disjoint
          path comparing to the route received from this peer SHOULD be
          selected and advertised. The most disjoint path is the path whose
          CLUSTER_LIST and ORIGINATOR_ID attributes are diverse from the
          attributes of the path received from this peer. This is analagous to
          the mechanism specified in <xref target="RFC9107"/>, where per-peer
          route selection is perfomed by the route reflector.</t>
        </list>With the above advertisement rule, RR-1 in figure 1 would
      advertise to RR-21 the RT-Constrain route received from RR-31 or RR-32,
      which is the most disjoint alternative route compared with the route
      received from RR-21. In this way, RR-21 will not discard the
      RT-constrain route received from RR-1, and the route distribution graph
      can be set up correctly.</t>

      <t>Similar to Section 3.2, this approach does not rely on add-path and
      may in theory allow a route to be reflected back to the RR from which it
      was received if the "most disjoint path" selection is not consistently
      applied. In deployments where local-preference or MED is used to select
      one path as preferred, route ping-ponging may not occur. However, this
      behavior depends on consistent policy configuration across all RRs and
      is not guaranteed by the mechanism itself.</t>
    </section>
  </back>
</rfc>
