<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="std" consensus="true" docName="draft-ietf-idr-bgp-optimal-route-reflection-28" indexInclude="true" ipr="trust200902" number="9107" prepTime="2021-08-23T21:58:22" scripts="Common,Latin" sortRefs="true" submissionType="IETF" symRefs="true" tocDepth="4" tocInclude="true" xml:lang="en">
  <link href="https://datatracker.ietf.org/doc/draft-ietf-idr-bgp-optimal-route-reflection-28" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc9107" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="BGP Optimal Route Reflection">BGP Optimal Route Reflection (BGP ORR)</title>
    <seriesInfo name="RFC" value="9107" stream="IETF"/>
    <author fullname="Robert Raszuk" initials="R" surname="Raszuk" role="editor">
      <organization showOnFrontPage="true">NTT Network Innovations</organization>
      <address>
        <email>robert@raszuk.net</email>
      </address>
    </author>
    <author initials="B" surname="Decraene" fullname="Bruno Decraene" role="editor">
      <organization showOnFrontPage="true">Orange</organization>
      <address>
        <email>bruno.decraene@orange.com</email>
      </address>
    </author>
    <author initials="C" surname="Cassar" fullname="Christian Cassar">
      <address>
        <email>cassar.christian@gmail.com</email>
      </address>
    </author>
    <author initials="E" surname="Åman" fullname="Erik Åman">
      <organization showOnFrontPage="true"/>
      <address>
        <email>erik.aman@aman.se</email>
      </address>
    </author>
    <author initials="K" surname="Wang" fullname="Kevin Wang">
      <organization showOnFrontPage="true">Juniper Networks</organization>
      <address>
        <postal>
          <street>10 Technology Park Drive</street>
          <city>Westford</city>
          <region>MA</region>
          <code>01886</code>
          <country>United States of America</country>
        </postal>
        <email>kfwang@juniper.net</email>
      </address>
    </author>
    <date month="08" year="2021"/>
    <area>Routing</area>
    <workgroup>IDR</workgroup>
    <keyword>IDR</keyword>
    <abstract pn="section-abstract">
      <t indent="0" pn="section-abstract-1">This document defines an extension to BGP route reflectors. On route reflectors, 
BGP route selection is modified in order to choose the best route from the standpoint 
of their clients, rather than from the standpoint of the route reflectors themselves. Depending 
on the scaling and precision requirements, route selection can be specific for one 
client, common for a set of clients, or common for all clients of a route reflector. 
This solution is particularly applicable in deployments using centralized route 
reflectors, where choosing the best route based on the route reflector's IGP location 
is suboptimal. This  facilitates, for example, a "best exit point" policy ("hot potato 
routing").</t>
      <t indent="0" pn="section-abstract-2">The solution relies upon all route reflectors learning all paths that 
are eligible for consideration. BGP route selection is performed in the route 
reflectors based on the IGP cost from configured locations in the link-state IGP.</t>
    </abstract>
    <boilerplate>
      <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.1">
        <name slugifiedName="name-status-of-this-memo">Status of This Memo</name>
        <t indent="0" pn="section-boilerplate.1-1">
            This is an Internet Standards Track document.
        </t>
        <t indent="0" pn="section-boilerplate.1-2">
            This document is a product of the Internet Engineering Task Force
            (IETF).  It represents the consensus of the IETF community.  It has
            received public review and has been approved for publication by
            the Internet Engineering Steering Group (IESG).  Further
            information on Internet Standards is available in Section 2 of 
            RFC 7841.
        </t>
        <t indent="0" pn="section-boilerplate.1-3">
            Information about the current status of this document, any
            errata, and how to provide feedback on it may be obtained at
            <eref target="https://www.rfc-editor.org/info/rfc9107" brackets="none"/>.
        </t>
      </section>
      <section anchor="copyright" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.2">
        <name slugifiedName="name-copyright-notice">Copyright Notice</name>
        <t indent="0" pn="section-boilerplate.2-1">
            Copyright (c) 2021 IETF Trust and the persons identified as the
            document authors. All rights reserved.
        </t>
        <t indent="0" pn="section-boilerplate.2-2">
            This document is subject to BCP 78 and the IETF Trust's Legal
            Provisions Relating to IETF Documents
            (<eref target="https://trustee.ietf.org/license-info" brackets="none"/>) in effect on the date of
            publication of this document. Please review these documents
            carefully, as they describe your rights and restrictions with
            respect to this document. Code Components extracted from this
            document must include Simplified BSD License text as described in
            Section 4.e of the Trust Legal Provisions and are provided without
            warranty as described in the Simplified BSD License.
        </t>
      </section>
    </boilerplate>
    <toc>
      <section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" pn="section-toc.1">
        <name slugifiedName="name-table-of-contents">Table of Contents</name>
        <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1">
          <li pn="section-toc.1-1.1">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.1"><xref derivedContent="1" format="counter" sectionFormat="of" target="section-1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-introduction">Introduction</xref></t>
          </li>
          <li pn="section-toc.1-1.2">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.2.1"><xref derivedContent="2" format="counter" sectionFormat="of" target="section-2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-terminology">Terminology</xref></t>
          </li>
          <li pn="section-toc.1-1.3">
            <t indent="0" pn="section-toc.1-1.3.1"><xref derivedContent="3" format="counter" sectionFormat="of" target="section-3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-modifications-to-bgp-route-">Modifications to BGP Route Selection</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.3.2">
              <li pn="section-toc.1-1.3.2.1">
                <t indent="0" pn="section-toc.1-1.3.2.1.1"><xref derivedContent="3.1" format="counter" sectionFormat="of" target="section-3.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-route-selection-from-a-diff">Route Selection from a Different IGP Location</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.3.2.1.2">
                  <li pn="section-toc.1-1.3.2.1.2.1">
                    <t indent="0" keepWithNext="true" pn="section-toc.1-1.3.2.1.2.1.1"><xref derivedContent="3.1.1" format="counter" sectionFormat="of" target="section-3.1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-restriction-when-the-bgp-ne">Restriction when the BGP Next Hop Is a BGP Route</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.3.2.2">
                <t indent="0" pn="section-toc.1-1.3.2.2.1"><xref derivedContent="3.2" format="counter" sectionFormat="of" target="section-3.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-multiple-route-selections">Multiple Route Selections</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.4">
            <t indent="0" pn="section-toc.1-1.4.1"><xref derivedContent="4" format="counter" sectionFormat="of" target="section-4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-deployment-considerations">Deployment Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.5">
            <t indent="0" pn="section-toc.1-1.5.1"><xref derivedContent="5" format="counter" sectionFormat="of" target="section-5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-security-considerations">Security Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.6">
            <t indent="0" pn="section-toc.1-1.6.1"><xref derivedContent="6" format="counter" sectionFormat="of" target="section-6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-iana-considerations">IANA Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.7">
            <t indent="0" pn="section-toc.1-1.7.1"><xref derivedContent="7" format="counter" sectionFormat="of" target="section-7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-references">References</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.7.2">
              <li pn="section-toc.1-1.7.2.1">
                <t indent="0" pn="section-toc.1-1.7.2.1.1"><xref derivedContent="7.1" format="counter" sectionFormat="of" target="section-7.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
              </li>
              <li pn="section-toc.1-1.7.2.2">
                <t indent="0" pn="section-toc.1-1.7.2.2.1"><xref derivedContent="7.2" format="counter" sectionFormat="of" target="section-7.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.8">
            <t indent="0" pn="section-toc.1-1.8.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.a"/><xref derivedContent="" format="title" sectionFormat="of" target="name-acknowledgments">Acknowledgments</xref></t>
          </li>
          <li pn="section-toc.1-1.9">
            <t indent="0" pn="section-toc.1-1.9.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent="" format="title" sectionFormat="of" target="name-contributors">Contributors</xref></t>
          </li>
          <li pn="section-toc.1-1.10">
            <t indent="0" pn="section-toc.1-1.10.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.c"/><xref derivedContent="" format="title" sectionFormat="of" target="name-authors-addresses">Authors' Addresses</xref></t>
          </li>
        </ul>
      </section>
    </toc>
  </front>
  <middle>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-1">
      <name slugifiedName="name-introduction">Introduction</name>
      <t indent="0" pn="section-1-1">There are three types of BGP deployments within Autonomous Systems (ASes) today: full mesh, 
confederations, and route reflection. BGP route reflection <xref target="RFC4456" format="default" sectionFormat="of" derivedContent="RFC4456"/> is 
the most popular way to distribute BGP routes between BGP speakers belonging to the same 
AS. However, in some situations, this method suffers from non-optimal 
path selection. </t>
      <t indent="0" pn="section-1-2"> <xref target="RFC4456" format="default" sectionFormat="of" derivedContent="RFC4456"/> asserts that, because the IGP cost to a given point in 
the network will vary across routers,
 "the route reflection approach may not yield the 
same route selection result as that of the full IBGP mesh approach." ("IBGP" stands for "Internal BGP".) One 
practical implication of this fact is that the deployment of route reflection may thwart 
the ability to achieve "hot potato routing". Hot potato routing attempts to direct traffic to the closest AS exit point in cases where no higher-priority policy 
dictates otherwise. As a consequence of the route reflection method, the choice of exit 
point for a route reflector and its clients will be the exit point that is optimal for 
the route reflector -- not necessarily the one that is optimal for its clients. </t>
      <t indent="0" pn="section-1-3"><xref target="RFC4456" sectionFormat="of" section="11" format="default" derivedLink="https://rfc-editor.org/rfc/rfc4456#section-11" derivedContent="RFC4456"/> describes a deployment approach and a set 
of constraints that, if satisfied, would result in the deployment of route reflection 
yielding the same results as the IBGP full mesh approach. This deployment approach makes 
route reflection compatible with the application of a hot potato routing policy. In 
accordance with these design rules, route reflectors have often been deployed in the 
forwarding path and carefully placed on the boundaries between the Point of Presence (POP) and the network core.</t>
      <t indent="0" pn="section-1-4">The evolving model of intra-domain network design has enabled deployments of route 
reflectors outside the forwarding path. Initially, this model was only employed for new 
services, e.g., IP VPNs <xref target="RFC4364" format="default" sectionFormat="of" derivedContent="RFC4364"/>; however, it has been gradually 
extended to other BGP services, including the IPv4 and IPv6 Internet. In such 
environments, a hot potato routing policy remains desirable.</t>
      <t indent="0" pn="section-1-5">Route reflectors outside the forwarding path can be placed on the boundaries between the POP and the network core, 
but they are often placed in arbitrary locations in the core of large 
networks.</t>
      <t indent="0" pn="section-1-6">Such deployments suffer from a critical drawback in the context of BGP route selection: 
a route reflector with knowledge of multiple paths for a given route will typically pick 
its best path and only advertise that best path to its clients. If the best path for a 
route is selected on the basis of an IGP tie-break, the path advertised will be the exit 
point closest to the route reflector. However, the clients are in a different place in 
the network topology than the route reflector. In networks where the route reflectors are 
not in the forwarding path, this difference will be even more acute.</t>
      <t indent="0" pn="section-1-7">In addition, there are deployment scenarios where service providers want to have more 
control in choosing the exit points for clients based on other factors, such as traffic 
type, traffic load, etc. This further complicates the issue and makes it less likely for 
the route reflector to select the best path from the client's perspective. It follows 
that the best path chosen by the route reflector is not necessarily the same as the path 
that would have been chosen by the client if the client had considered the same set of 
candidate paths as the route reflector.</t>
    </section>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-2">
      <name slugifiedName="name-terminology">Terminology</name>
      <t indent="0" pn="section-2-1">This memo makes use of the terms defined in <xref target="RFC4271" format="default" sectionFormat="of" derivedContent="RFC4271"/> and <xref target="RFC4456" format="default" sectionFormat="of" derivedContent="RFC4456"/>.</t>
      <t indent="0" pn="section-2-2">The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>",
       "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>",
       "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>",
       "<bcp14>SHOULD NOT</bcp14>",
       "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
       "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document
       are to be interpreted as described in BCP 14
       <xref target="RFC2119" format="default" sectionFormat="of" derivedContent="RFC2119"/> <xref target="RFC8174" format="default" sectionFormat="of" derivedContent="RFC8174"/> when, and only
       when, they appear in all capitals, as shown here.</t>
    </section>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-3">
      <name slugifiedName="name-modifications-to-bgp-route-">Modifications to BGP Route Selection</name>
      <t indent="0" pn="section-3-1">The core of this solution is the ability for an operator to specify the IGP location 
for which the route reflector calculates interior cost to the next hop. The IGP 
location is defined as a node in the IGP topology, it is identified by an IP address 
of this node (e.g., a loopback address), and it may be configured on a
per-route-reflector basis, per set of clients, or on a per-client basis. Such configuration will allow the 
route reflector to select and distribute to a given set of clients routes with the shortest 
distance to the next hops from the position of the selected IGP location. This provides 
for freedom related to the route reflector's physical location and allows transient or permanent 
migration of this network control plane function to an arbitrary location with no 
impact on IP transit.</t>
      <t indent="0" pn="section-3-2">The choice of specific granularity (route reflector, set of clients, or client) is 
configured by the network operator. An implementation is considered compliant with this 
document if it supports at least one such grouping category.</t>
      <t indent="0" pn="section-3-3"> For purposes of route selection, the perspective of a client can differ from that of
a route reflector or another client in two distinct ways: 
</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-3-4">
        <li pn="section-3-4.1">It has a different position in the IGP topology.</li>
        <li pn="section-3-4.2">It can have a different routing policy.</li>
      </ul>
      <t indent="0" pn="section-3-5">
These factors correspond to the issues described earlier. </t>
      <t indent="0" pn="section-3-6">This document defines, for BGP route reflectors <xref target="RFC4456" format="default" sectionFormat="of" derivedContent="RFC4456"/>, two changes 
to the BGP route selection algorithm:</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-3-7">
        <li pn="section-3-7.1">The first change, introduced in <xref target="sec_IGP_cost" format="default" sectionFormat="of" derivedContent="Section 3.1"/>, is related to the IGP 
cost to the BGP next hop in the BGP Decision Process. The change consists of using the IGP 
cost from a different IGP location than the route reflector itself.</li>
        <li pn="section-3-7.2">The second change, introduced in <xref target="sec_multiple" format="default" sectionFormat="of" derivedContent="Section 3.2"/>, is to extend the 
granularity of the BGP Decision Process, to allow for running multiple Decision Processes 
using different perspectives or policies.</li>
      </ul>
      <t indent="0" pn="section-3-8"> A route reflector can implement either or both of the modifications in order to 
allow it to choose the best path for its clients that the clients themselves would have
chosen given the same set of candidate paths.</t>
      <t indent="0" pn="section-3-9">A significant advantage of these approaches is that the route reflector's clients do 
not need to be modified.</t>
      <section anchor="sec_IGP_cost" numbered="true" toc="include" removeInRFC="false" pn="section-3.1">
        <name slugifiedName="name-route-selection-from-a-diff">Route Selection from a Different IGP Location</name>
        <t indent="0" pn="section-3.1-1">In this approach, "optimal" refers to the decision where the interior cost of a route is 
determined during step e) of Section <xref target="RFC4271" section="9.1.2.2" sectionFormat="bare" format="default" derivedLink="https://rfc-editor.org/rfc/rfc4271#section-9.1.2.2" derivedContent="RFC4271">"Breaking Ties (Phase 2)"</xref> of <xref target="RFC4271" format="default" sectionFormat="of" derivedContent="RFC4271"/>. It does not apply to path selection preference based on other policy steps 
and provisions.</t>
        <t indent="0" pn="section-3.1-2">In addition to the change specified in <xref target="RFC4456" sectionFormat="of" section="9" format="default" derivedLink="https://rfc-editor.org/rfc/rfc4456#section-9" derivedContent="RFC4456"/>, the text in step e) in <xref target="RFC4271" sectionFormat="of" section="9.1.2.2" format="default" derivedLink="https://rfc-editor.org/rfc/rfc4271#section-9.1.2.2" derivedContent="RFC4271"/> is modified as follows.</t>
        <t indent="0" pn="section-3.1-3">RFC 4271 reads:</t>
        <blockquote pn="section-3.1-4">
          <dl spacing="normal" indent="4" newline="false" pn="section-3.1-4.1">
            <dt pn="section-3.1-4.1.1">e)</dt>
            <dd pn="section-3.1-4.1.2">Remove from consideration any routes with less-preferred
         interior cost.  The interior cost of a route is determined by
         calculating the metric to the NEXT_HOP for the route using the
         Routing Table.</dd>
          </dl>
        </blockquote>
        <t indent="0" pn="section-3.1-5">This document modifies this text to read:</t>
        <blockquote pn="section-3.1-6">
          <dl spacing="normal" indent="4" newline="false" pn="section-3.1-6.1">
            <dt pn="section-3.1-6.1.1">e)</dt>
            <dd pn="section-3.1-6.1.2">Remove from consideration any routes with less-preferred
         interior cost.  The interior cost of a route is determined by
         calculating the metric from the selected IGP location to the NEXT_HOP for the route
         using the shortest IGP path tree rooted at the selected IGP location.</dd>
          </dl>
        </blockquote>
        <t indent="0" pn="section-3.1-7">In order to be able to compute the shortest path tree rooted at the selected IGP 
locations, knowledge of the IGP topology for the area/level that includes each of those 
locations is needed. This knowledge can be gained with the use of the link-state IGP,
such as IS-IS <xref target="ISO10589" format="default" sectionFormat="of" derivedContent="ISO10589"/> or OSPF <xref target="RFC2328" format="default" sectionFormat="of" derivedContent="RFC2328"/>
          <xref target="RFC5340" format="default" sectionFormat="of" derivedContent="RFC5340"/>, or via the Border Gateway Protocol - Link State (BGP-LS) <xref target="RFC7752" format="default" sectionFormat="of" derivedContent="RFC7752"/>. When specifying the logical 
location of a route reflector for a group of clients, one or more backup IGP locations 
<bcp14>SHOULD</bcp14> be allowed to be specified for redundancy. Further deployment considerations 
are discussed in <xref target="deployment-cons" format="default" sectionFormat="of" derivedContent="Section 4"/>.</t>
        <section numbered="true" toc="include" removeInRFC="false" pn="section-3.1.1">
          <name slugifiedName="name-restriction-when-the-bgp-ne">Restriction when the BGP Next Hop Is a BGP Route</name>
          <t indent="0" pn="section-3.1.1-1">In situations where the BGP next hop is a BGP route itself, the IGP metric of a route 
used for its resolution <bcp14>SHOULD</bcp14> be the final IGP cost to reach such a next hop. Implementations 
that cannot inform BGP of the final IGP metric to a recursive next hop <bcp14>MUST</bcp14> treat such 
paths as least preferred during next-hop metric comparisons. However, such paths <bcp14>MUST</bcp14> 
still be considered valid for BGP Phase 2 route selection.</t>
        </section>
      </section>
      <section anchor="sec_multiple" numbered="true" toc="include" removeInRFC="false" pn="section-3.2">
        <name slugifiedName="name-multiple-route-selections">Multiple Route Selections</name>
        <t indent="0" pn="section-3.2-1">A BGP route reflector as per <xref target="RFC4456" format="default" sectionFormat="of" derivedContent="RFC4456"/> runs a single BGP Decision 
Process. BGP Optimal Route Reflection (BGP ORR) may require multiple BGP Decision Processes or 
subsets of the Decision Process in order to consider different IGP locations or 
BGP policies for different sets of clients. This is very similar to what is defined 
in <xref target="RFC7947" sectionFormat="comma" section="2.3.2.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7947#section-2.3.2.1" derivedContent="RFC7947"/>.</t>
        <t indent="0" pn="section-3.2-2"> If the required routing optimization is limited to the IGP cost to the BGP 
next hop, only step e) and subsequent steps as defined in 
<xref target="RFC4271" sectionFormat="comma" section="9.1.2.2" format="default" derivedLink="https://rfc-editor.org/rfc/rfc4271#section-9.1.2.2" derivedContent="RFC4271"/> need to be run multiple times.</t>
        <t indent="0" pn="section-3.2-3"> If the routing optimization requires the use of different BGP policies for 
different sets of clients, a larger part of the Decision Process needs to be run 
multiple times, up to the whole Decision Process as defined in <xref target="RFC4271" sectionFormat="of" section="9.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc4271#section-9.1" derivedContent="RFC4271"/>. This is, for example, the case when there is a need to 
use different policies to compute different degrees of preference during Phase 1. 
This is needed for use cases involving traffic engineering or dedicating certain 
exit points for certain clients. In the latter case, the user may specify and apply 
a general policy on the route reflector for a set of clients. Regular path selection, 
including IGP perspectives for a set of clients as per <xref target="sec_IGP_cost" format="default" sectionFormat="of" derivedContent="Section 3.1"/>, 
is then applied to the candidate paths to select the final paths to advertise to the 
clients. </t>
      </section>
    </section>
    <section anchor="deployment-cons" numbered="true" toc="include" removeInRFC="false" pn="section-4">
      <name slugifiedName="name-deployment-considerations">Deployment Considerations</name>
      <t indent="0" pn="section-4-1">BGP ORR provides a model for integrating the client's
perspective into the BGP route selection Decision Process for route reflectors. 
More specifically, the choice of BGP path takes into account either the IGP 
cost between the client and the next hop (rather than the IGP cost from the 
route reflector to the next hop) or other user-configured policies.</t>
      <t indent="0" pn="section-4-2">The achievement of optimal routing between clients of different clusters 
relies upon all route reflectors learning all paths that are eligible for 
consideration. In order to satisfy this requirement, BGP ADD-PATH 
<xref target="RFC7911" format="default" sectionFormat="of" derivedContent="RFC7911"/> needs to be deployed between route reflectors. </t>
      <t indent="0" pn="section-4-3">This solution can be deployed in hop-by-hop forwarding 
networks as well as in end-to-end tunneled environments. To avoid routing 
loops in networks with multiple route reflectors and hop-by-hop forwarding 
without encapsulation, it is essential that the network topology be carefully 
considered in designing a route reflection topology (see also <xref target="RFC4456" sectionFormat="of" section="11" format="default" derivedLink="https://rfc-editor.org/rfc/rfc4456#section-11" derivedContent="RFC4456"/>).</t>
      <t indent="0" pn="section-4-4">As discussed in <xref target="RFC4456" sectionFormat="of" section="11" format="default" derivedLink="https://rfc-editor.org/rfc/rfc4456#section-11" derivedContent="RFC4456"/>, the IGP locations 
of BGP route reflectors are important and have routing implications. This 
equally applies to the choice of the IGP locations configured on optimal route 
reflectors. If a backup location is provided, it is used when the primary IGP 
location disappears from the IGP (i.e., fails). Just like the failure of a route reflector <xref target="RFC4456" format="default" sectionFormat="of" derivedContent="RFC4456"/>, it may result in changing the paths selected and 
advertised to the clients, and in general, the post-failure paths are expected to 
be less optimal. This is dependent on the IGP topologies and the IGP distance
between the primary and backup IGP locations: the smaller the distance, the 
smaller the potential impact.</t>
      <t indent="0" pn="section-4-5">
After selecting N suitable IGP locations, an operator can choose to enable route 
selection for all of them on all or on a subset of their route reflectors. The 
operator may alternatively deploy single or multiple (backup case) route 
reflectors for each IGP location or create any design in between.  This 
choice may depend on the operational model (centralized vs. per region), an acceptable 
blast radius in the case of failure, an acceptable number of IBGP sessions for the mesh between the route reflectors, performance, and configuration granularity of the equipment.</t>
      <t indent="0" pn="section-4-6">With this approach, an ISP can effect a hot potato routing policy 
even if route reflection has been moved out of the forwarding plane and 
hop-by-hop forwarding has been replaced by end-to-end MPLS or IP 
encapsulation. Compared with a deployment of ADD-PATH on all routers, BGP ORR
reduces the amount of state that needs to 
be pushed to the edge of the network in order to perform hot potato routing.</t>
      <t indent="0" pn="section-4-7">Modifying the IGP location of BGP ORR does not interfere with policies 
enforced before IGP tie-breaking (step e) of
<xref target="RFC4271" sectionFormat="comma" section="9.1.2.2" format="default" derivedLink="https://rfc-editor.org/rfc/rfc4271#section-9.1.2.2" derivedContent="RFC4271"/>) in the BGP Decision Process.</t>
      <t indent="0" pn="section-4-8">Calculating routes for different IGP locations requires multiple Shortest 
Path First (SPF) calculations and multiple (subsets of) BGP Decision Processes.
This scenario calls for more computing resources. This document allows for different 
granularity, such as one Decision Process per route reflector, per set of clients,
or per client. A more fine-grained granularity may translate into more optimal 
hot potato routing at the cost of more computing power. Choosing to configure 
an IGP location per client has the highest precision, as each client can be 
associated with their ideal (own) IGP location.  However, doing so may have an 
impact on performance (as explained above).  Using an IGP location per set 
of clients implies a loss of precision but reduces the impact on the performance 
of the route reflector.  Similarly, if an IGP location is selected for the whole 
routing instance, the lowest precision is achieved, but the impact on performance 
is minimal. In the last mode of operation (where an IGP location is selected for the whole routing instance), both precision and performance 
metrics are equal to route reflection as described in 
<xref target="RFC4456" format="default" sectionFormat="of" derivedContent="RFC4456"/>. The ability to run fine-grained computations depends on the platform/hardware 
deployed, the number of clients, the number of BGP routes, and the size of the 
IGP topology. In essence, sizing considerations are similar to the deployments 
of BGP route reflectors.</t>
    </section>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-5">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t indent="0" pn="section-5-1">The extension specified in this document provides a new metric value using additional information 
for computing routes for BGP route reflectors.  While any improperly used 
metric value could impact the resiliency of the network, this extension does 
not change the underlying security issues inherent in the existing IBGP per 
<xref target="RFC4456" format="default" sectionFormat="of" derivedContent="RFC4456"/>.</t>
      <t indent="0" pn="section-5-2">This document does not introduce requirements for any new protection 
measures. </t>
    </section>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-6">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <t indent="0" pn="section-6-1">This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references pn="section-7">
      <name slugifiedName="name-references">References</name>
      <references pn="section-7.1">
        <name slugifiedName="name-normative-references">Normative References</name>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" quoteTitle="true" derivedAnchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author initials="S." surname="Bradner" fullname="S. Bradner">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="1997" month="March"/>
            <abstract>
              <t indent="0">In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC4271" target="https://www.rfc-editor.org/info/rfc4271" quoteTitle="true" derivedAnchor="RFC4271">
          <front>
            <title>A Border Gateway Protocol 4 (BGP-4)</title>
            <author initials="Y." surname="Rekhter" fullname="Y. Rekhter" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="T." surname="Li" fullname="T. Li" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S." surname="Hares" fullname="S. Hares" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2006" month="January"/>
            <abstract>
              <t indent="0">This document discusses the Border Gateway Protocol (BGP), which is an inter-Autonomous System routing protocol.</t>
              <t indent="0">The primary function of a BGP speaking system is to exchange network reachability information with other BGP systems.  This network reachability information includes information on the list of Autonomous Systems (ASes) that reachability information traverses. This information is sufficient for constructing a graph of AS connectivity for this reachability from which routing loops may be pruned, and, at the AS level, some policy decisions may be enforced.</t>
              <t indent="0">BGP-4 provides a set of mechanisms for supporting Classless Inter-Domain Routing (CIDR).  These mechanisms include support for advertising a set of destinations as an IP prefix, and eliminating the concept of network "class" within BGP.  BGP-4 also introduces mechanisms that allow aggregation of routes, including aggregation of AS paths.</t>
              <t indent="0">This document obsoletes RFC 1771.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4271"/>
          <seriesInfo name="DOI" value="10.17487/RFC4271"/>
        </reference>
        <reference anchor="RFC4456" target="https://www.rfc-editor.org/info/rfc4456" quoteTitle="true" derivedAnchor="RFC4456">
          <front>
            <title>BGP Route Reflection: An Alternative to Full Mesh Internal BGP (IBGP)</title>
            <author initials="T." surname="Bates" fullname="T. Bates">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="E." surname="Chen" fullname="E. Chen">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="R." surname="Chandra" fullname="R. Chandra">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2006" month="April"/>
            <abstract>
              <t indent="0">The Border Gateway Protocol (BGP) is an inter-autonomous system routing protocol designed for TCP/IP internets.  Typically, all BGP speakers within a single AS must be fully meshed so that any external routing information must be re-distributed to all other routers within that Autonomous System (AS).  This represents a serious scaling problem that has been well documented with several alternatives proposed.</t>
              <t indent="0">This document describes the use and design of a method known as "route reflection" to alleviate the need for "full mesh" Internal BGP (IBGP).</t>
              <t indent="0">This document obsoletes RFC 2796 and RFC 1966.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4456"/>
          <seriesInfo name="DOI" value="10.17487/RFC4456"/>
        </reference>
        <reference anchor="RFC7911" target="https://www.rfc-editor.org/info/rfc7911" quoteTitle="true" derivedAnchor="RFC7911">
          <front>
            <title>Advertisement of Multiple Paths in BGP</title>
            <author initials="D." surname="Walton" fullname="D. Walton">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="A." surname="Retana" fullname="A. Retana">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="E." surname="Chen" fullname="E. Chen">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="J." surname="Scudder" fullname="J. Scudder">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2016" month="July"/>
            <abstract>
              <t indent="0">This document defines a BGP extension that allows the advertisement of multiple paths for the same address prefix without the new paths implicitly replacing any previous ones.  The essence of the extension is that each path is identified by a Path Identifier in addition to the address prefix.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7911"/>
          <seriesInfo name="DOI" value="10.17487/RFC7911"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" quoteTitle="true" derivedAnchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="May"/>
            <abstract>
              <t indent="0">RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references pn="section-7.2">
        <name slugifiedName="name-informative-references">Informative References</name>
        <reference anchor="ISO10589" quoteTitle="true" derivedAnchor="ISO10589">
          <front>
            <title>Intermediate system to Intermediate system intra-domain routeing information exchange protocol for use in conjunction with the protocol for providing the connectionless-mode Network Service (ISO 8473)</title>
            <author>
              <organization abbrev="ISO" showOnFrontPage="true">International Organization for Standardization</organization>
            </author>
            <date month="November" year="2002"/>
          </front>
          <refcontent>ISO/IEC 10589:2002, Second Edition</refcontent>
        </reference>
        <reference anchor="RFC2328" target="https://www.rfc-editor.org/info/rfc2328" quoteTitle="true" derivedAnchor="RFC2328">
          <front>
            <title>OSPF Version 2</title>
            <author initials="J." surname="Moy" fullname="J. Moy">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="1998" month="April"/>
            <abstract>
              <t indent="0">This memo documents version 2 of the OSPF protocol.  OSPF is a link- state routing protocol.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="54"/>
          <seriesInfo name="RFC" value="2328"/>
          <seriesInfo name="DOI" value="10.17487/RFC2328"/>
        </reference>
        <reference anchor="RFC4364" target="https://www.rfc-editor.org/info/rfc4364" quoteTitle="true" derivedAnchor="RFC4364">
          <front>
            <title>BGP/MPLS IP Virtual Private Networks (VPNs)</title>
            <author initials="E." surname="Rosen" fullname="E. Rosen">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="Y." surname="Rekhter" fullname="Y. Rekhter">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2006" month="February"/>
            <abstract>
              <t indent="0">This document describes a method by which a Service Provider may use an IP backbone to provide IP Virtual Private Networks (VPNs) for its customers.  This method uses a "peer model", in which the customers' edge routers (CE routers) send their routes to the Service Provider's edge routers (PE routers); there is no "overlay" visible to the customer's routing algorithm, and CE routers at different sites do not peer with each other.  Data packets are tunneled through the backbone, so that the core routers do not need to know the VPN routes.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4364"/>
          <seriesInfo name="DOI" value="10.17487/RFC4364"/>
        </reference>
        <reference anchor="RFC5340" target="https://www.rfc-editor.org/info/rfc5340" quoteTitle="true" derivedAnchor="RFC5340">
          <front>
            <title>OSPF for IPv6</title>
            <author initials="R." surname="Coltun" fullname="R. Coltun">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="D." surname="Ferguson" fullname="D. Ferguson">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="J." surname="Moy" fullname="J. Moy">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="A." surname="Lindem" fullname="A. Lindem">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2008" month="July"/>
            <abstract>
              <t indent="0">This document describes the modifications to OSPF to support version 6 of the Internet Protocol (IPv6).  The fundamental mechanisms of OSPF (flooding, Designated Router (DR) election, area support, Short Path First (SPF) calculations, etc.) remain unchanged.  However, some changes have been necessary, either due to changes in protocol semantics between IPv4 and IPv6, or simply to handle the increased address size of IPv6.  These modifications will necessitate incrementing the protocol version from version 2 to version 3.  OSPF for IPv6 is also referred to as OSPF version 3 (OSPFv3).</t>
              <t indent="0">Changes between OSPF for IPv4, OSPF Version 2, and OSPF for IPv6 as described herein include the following.  Addressing semantics have been removed from OSPF packets and the basic Link State Advertisements (LSAs).  New LSAs have been created to carry IPv6 addresses and prefixes.  OSPF now runs on a per-link basis rather than on a per-IP-subnet basis.  Flooding scope for LSAs has been generalized.  Authentication has been removed from the OSPF protocol and instead relies on IPv6's Authentication Header and Encapsulating Security Payload (ESP).</t>
              <t indent="0">Even with larger IPv6 addresses, most packets in OSPF for IPv6 are almost as compact as those in OSPF for IPv4.  Most fields and packet- size limitations present in OSPF for IPv4 have been relaxed.  In addition, option handling has been made more flexible.</t>
              <t indent="0">All of OSPF for IPv4's optional capabilities, including demand circuit support and Not-So-Stubby Areas (NSSAs), are also supported in OSPF for IPv6.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5340"/>
          <seriesInfo name="DOI" value="10.17487/RFC5340"/>
        </reference>
        <reference anchor="RFC7752" target="https://www.rfc-editor.org/info/rfc7752" quoteTitle="true" derivedAnchor="RFC7752">
          <front>
            <title>North-Bound Distribution of Link-State and Traffic Engineering (TE) Information Using BGP</title>
            <author initials="H." surname="Gredler" fullname="H. Gredler" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="J." surname="Medved" fullname="J. Medved">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S." surname="Previdi" fullname="S. Previdi">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="A." surname="Farrel" fullname="A. Farrel">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S." surname="Ray" fullname="S. Ray">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2016" month="March"/>
            <abstract>
              <t indent="0">In a number of environments, a component external to a network is called upon to perform computations based on the network topology and current state of the connections within the network, including Traffic Engineering (TE) information.  This is information typically distributed by IGP routing protocols within the network.</t>
              <t indent="0">This document describes a mechanism by which link-state and TE information can be collected from networks and shared with external components using the BGP routing protocol.  This is achieved using a new BGP Network Layer Reachability Information (NLRI) encoding format.  The mechanism is applicable to physical and virtual IGP links.  The mechanism described is subject to policy control.</t>
              <t indent="0">Applications of this technique include Application-Layer Traffic Optimization (ALTO) servers and Path Computation Elements (PCEs).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7752"/>
          <seriesInfo name="DOI" value="10.17487/RFC7752"/>
        </reference>
        <reference anchor="RFC7947" target="https://www.rfc-editor.org/info/rfc7947" quoteTitle="true" derivedAnchor="RFC7947">
          <front>
            <title>Internet Exchange BGP Route Server</title>
            <author initials="E." surname="Jasinska" fullname="E. Jasinska">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="N." surname="Hilliard" fullname="N. Hilliard">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="R." surname="Raszuk" fullname="R. Raszuk">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="N." surname="Bakker" fullname="N. Bakker">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2016" month="September"/>
            <abstract>
              <t indent="0">This document outlines a specification for multilateral interconnections at Internet Exchange Points (IXPs).  Multilateral interconnection is a method of exchanging routing information among three or more External BGP (EBGP) speakers using a single intermediate broker system, referred to as a route server.  Route servers are typically used on shared access media networks, such as IXPs, to facilitate simplified interconnection among multiple Internet routers.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7947"/>
          <seriesInfo name="DOI" value="10.17487/RFC7947"/>
        </reference>
      </references>
    </references>
    <section numbered="false" toc="include" removeInRFC="false" pn="section-appendix.a">
      <name slugifiedName="name-acknowledgments">Acknowledgments</name>
      <t indent="0" pn="section-appendix.a-1">The authors would like to thank <contact fullname="Keyur Patel"/>, <contact fullname="Eric Rosen"/>, <contact fullname="Clarence Filsfils"/>, <contact fullname="Uli Bornhauser"/>, <contact fullname="Russ White"/>, <contact fullname="Jakob Heitz"/>, <contact fullname="Mike Shand"/>, <contact fullname="Jon  Mitchell"/>, <contact fullname="John Scudder"/>, <contact fullname="Jeff Haas"/>, <contact fullname="Martin Djernæs"/>, <contact fullname="Daniele Ceccarelli"/>, <contact fullname="Kieran Milne"/>, <contact fullname="Job Snijders"/>, <contact fullname="Randy Bush"/>, <contact fullname="Alvaro Retana"/>,  
<contact fullname="Francesca Palombini"/>, <contact fullname="Benjamin Kaduk"/>, <contact fullname="Zaheduzzaman Sarker"/>, <contact fullname="Lars Eggert"/>, <contact fullname="Murray Kucherawy"/>, <contact fullname="Tom Petch"/>, and <contact fullname="Nick Hilliard"/> for their 
valuable input.</t>
    </section>
    <section numbered="false" toc="include" removeInRFC="false" pn="section-appendix.b">
      <name slugifiedName="name-contributors">Contributors</name>
      <t indent="0" pn="section-appendix.b-1">The following persons contributed substantially to the current 
format of the document:</t>
      <contact fullname="Stephane Litkowski">
        <organization showOnFrontPage="true">Cisco Systems</organization>
        <address>
          <postal>
            <street/>
            <city/>
            <region/>
            <code/>
            <country/>
          </postal>
          <email>slitkows.ietf@gmail.com</email>
        </address>
      </contact>
      <contact fullname="Adam Chappell">
        <organization showOnFrontPage="true">GTT Communications, Inc.</organization>
        <address>
          <postal>
            <street>Aspira Business Centre</street>
            <street>Bucharova 2928/14a</street>
            <city>158 00 Prague 13 Stodůlky</city>
            <region/>
            <code/>
            <country>Czech Republic</country>
          </postal>
          <email>adam.chappell@gtt.net</email>
        </address>
      </contact>
    </section>
    <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.c">
      <name slugifiedName="name-authors-addresses">Authors' Addresses</name>
      <author fullname="Robert Raszuk" initials="R" surname="Raszuk" role="editor">
        <organization showOnFrontPage="true">NTT Network Innovations</organization>
        <address>
          <email>robert@raszuk.net</email>
        </address>
      </author>
      <author initials="B" surname="Decraene" fullname="Bruno Decraene" role="editor">
        <organization showOnFrontPage="true">Orange</organization>
        <address>
          <email>bruno.decraene@orange.com</email>
        </address>
      </author>
      <author initials="C" surname="Cassar" fullname="Christian Cassar">
        <address>
          <email>cassar.christian@gmail.com</email>
        </address>
      </author>
      <author initials="E" surname="Åman" fullname="Erik Åman">
        <organization showOnFrontPage="true"/>
        <address>
          <email>erik.aman@aman.se</email>
        </address>
      </author>
      <author initials="K" surname="Wang" fullname="Kevin Wang">
        <organization showOnFrontPage="true">Juniper Networks</organization>
        <address>
          <postal>
            <street>10 Technology Park Drive</street>
            <city>Westford</city>
            <region>MA</region>
            <code>01886</code>
            <country>United States of America</country>
          </postal>
          <email>kfwang@juniper.net</email>
        </address>
      </author>
    </section>
  </back>
</rfc>
