<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" submissionType="IETF" category="std" consensus="true" docName="draft-ietf-idr-long-lived-gr-06" number="9494" ipr="trust200902" updates="6368" obsoletes="" xml:lang="en" tocInclude="true" tocDepth="4" symRefs="true" sortRefs="true" prepTime="2023-11-29T14:41:12" indexInclude="true" scripts="Common,Latin">
  <link href="https://datatracker.ietf.org/doc/draft-ietf-idr-long-lived-gr-06" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc9494" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="Long-Lived Graceful Restart">Long-Lived Graceful Restart for BGP</title>
    <seriesInfo name="RFC" value="9494" stream="IETF"/>
    <author fullname="James Uttaro" initials="J." surname="Uttaro">
      <organization showOnFrontPage="true">Independent Contributor</organization>
      <address>
        <email>juttaro@ieee.org</email>
      </address>
    </author>
    <author fullname="Enke Chen" initials="E." surname="Chen">
      <organization showOnFrontPage="true">Palo Alto Networks</organization>
      <address>
        <email>enchen@paloaltonetworks.com</email>
      </address>
    </author>
    <author fullname="Bruno Decraene" initials="B." surname="Decraene">
      <organization showOnFrontPage="true">Orange</organization>
      <address>
        <email>bruno.decraene@orange.com</email>
      </address>
    </author>
    <author fullname="John G. Scudder" initials="J." surname="Scudder">
      <organization showOnFrontPage="true">Juniper Networks</organization>
      <address>
        <email>jgs@juniper.net</email>
      </address>
    </author>
    <date month="11" year="2023"/>
    <area>rtg</area>
    <workgroup>idr</workgroup>
    <abstract pn="section-abstract">
      <t indent="0" pn="section-abstract-1">
This document introduces a BGP capability called the "Long-Lived
Graceful Restart Capability" (or "LLGR Capability").  The benefit of this capability is that stale routes can be retained for a
longer time upon session failure than is provided for by BGP Graceful Restart (as described in RFC 4724). A well-known BGP community called
"LLGR_STALE" is introduced for marking stale routes retained for a
longer time. A second well-known BGP community called "NO_LLGR" is introduced
for marking routes for which these procedures should not be applied.
We also specify that such long-lived stale routes be treated as
the least preferred and that their advertisements be limited to BGP speakers
that have advertised the capability. Use of this extension is not
advisable in all cases, and we provide guidelines to help determine if it
is.
      </t>
      <t indent="0" pn="section-abstract-2">
This memo updates RFC 6368 by specifying that the LLGR_STALE community must be 
propagated into, or out of, the path attributes exchanged between the Provider Edge (PE) and Customer Edge (CE) routers.
      </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/rfc9494" 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) 2023 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 Revised BSD License text as described in
            Section 4.e of the Trust Legal Provisions and are provided without
            warranty as described in the Revised 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" 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>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.2.2">
              <li pn="section-toc.1-1.2.2.1">
                <t indent="0" keepWithNext="true" pn="section-toc.1-1.2.2.1.1"><xref derivedContent="2.1" format="counter" sectionFormat="of" target="section-2.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-definitions">Definitions</xref></t>
              </li>
              <li pn="section-toc.1-1.2.2.2">
                <t indent="0" keepWithNext="true" pn="section-toc.1-1.2.2.2.1"><xref derivedContent="2.2" format="counter" sectionFormat="of" target="section-2.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-abbreviations">Abbreviations</xref></t>
              </li>
              <li pn="section-toc.1-1.2.2.3">
                <t indent="0" pn="section-toc.1-1.2.2.3.1"><xref derivedContent="2.3" format="counter" sectionFormat="of" target="section-2.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-requirements-language">Requirements Language</xref></t>
              </li>
            </ul>
          </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-protocol-extensions">Protocol Extensions</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-long-lived-graceful-restart">Long-Lived Graceful Restart Capability</xref></t>
              </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-llgr_stale-community">LLGR_STALE Community</xref></t>
              </li>
              <li pn="section-toc.1-1.3.2.3">
                <t indent="0" pn="section-toc.1-1.3.2.3.1"><xref derivedContent="3.3" format="counter" sectionFormat="of" target="section-3.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-no_llgr-community">NO_LLGR Community</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-theory-of-operation">Theory of Operation</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2">
              <li pn="section-toc.1-1.4.2.1">
                <t indent="0" pn="section-toc.1-1.4.2.1.1"><xref derivedContent="4.1" format="counter" sectionFormat="of" target="section-4.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-use-of-the-graceful-restart">Use of the Graceful Restart Capability</xref></t>
              </li>
              <li pn="section-toc.1-1.4.2.2">
                <t indent="0" pn="section-toc.1-1.4.2.2.1"><xref derivedContent="4.2" format="counter" sectionFormat="of" target="section-4.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-session-resets">Session Resets</xref></t>
              </li>
              <li pn="section-toc.1-1.4.2.3">
                <t indent="0" pn="section-toc.1-1.4.2.3.1"><xref derivedContent="4.3" format="counter" sectionFormat="of" target="section-4.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-processing-llgr_stale-route">Processing LLGR_STALE Routes</xref></t>
              </li>
              <li pn="section-toc.1-1.4.2.4">
                <t indent="0" pn="section-toc.1-1.4.2.4.1"><xref derivedContent="4.4" format="counter" sectionFormat="of" target="section-4.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-route-selection">Route Selection</xref></t>
              </li>
              <li pn="section-toc.1-1.4.2.5">
                <t indent="0" pn="section-toc.1-1.4.2.5.1"><xref derivedContent="4.5" format="counter" sectionFormat="of" target="section-4.5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-errors">Errors</xref></t>
              </li>
              <li pn="section-toc.1-1.4.2.6">
                <t indent="0" pn="section-toc.1-1.4.2.6.1"><xref derivedContent="4.6" format="counter" sectionFormat="of" target="section-4.6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-optional-partial-deployment">Optional Partial Deployment Procedure</xref></t>
              </li>
              <li pn="section-toc.1-1.4.2.7">
                <t indent="0" pn="section-toc.1-1.4.2.7.1"><xref derivedContent="4.7" format="counter" sectionFormat="of" target="section-4.7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-procedures-when-bgp-is-the-">Procedures When BGP Is the PE-CE Protocol in a VPN</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2.7.2">
                  <li pn="section-toc.1-1.4.2.7.2.1">
                    <t indent="0" pn="section-toc.1-1.4.2.7.2.1.1"><xref derivedContent="4.7.1" format="counter" sectionFormat="of" target="section-4.7.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-procedures-when-ebgp-is-the">Procedures When EBGP Is the PE-CE Protocol in a VPN</xref></t>
                  </li>
                  <li pn="section-toc.1-1.4.2.7.2.2">
                    <t indent="0" pn="section-toc.1-1.4.2.7.2.2.1"><xref derivedContent="4.7.2" format="counter" sectionFormat="of" target="section-4.7.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-procedures-when-ibgp-is-the">Procedures When IBGP Is the PE-CE Protocol in a VPN</xref></t>
                  </li>
                </ul>
              </li>
            </ul>
          </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-deployment-considerations">Deployment Considerations</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.5.2">
              <li pn="section-toc.1-1.5.2.1">
                <t indent="0" pn="section-toc.1-1.5.2.1.1"><xref derivedContent="5.1" format="counter" sectionFormat="of" target="section-5.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-when-bgp-is-the-pe-ce-proto">When BGP Is the PE-CE Protocol in a VPN</xref></t>
              </li>
              <li pn="section-toc.1-1.5.2.2">
                <t indent="0" pn="section-toc.1-1.5.2.2.1"><xref derivedContent="5.2" format="counter" sectionFormat="of" target="section-5.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-risks-of-depreferencing-rou">Risks of Depreferencing Routes</xref></t>
              </li>
            </ul>
          </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-security-considerations">Security 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-examples-of-operation">Examples of Operation</xref></t>
          </li>
          <li pn="section-toc.1-1.8">
            <t indent="0" pn="section-toc.1-1.8.1"><xref derivedContent="8" format="counter" sectionFormat="of" target="section-8"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-iana-considerations">IANA Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.9">
            <t indent="0" pn="section-toc.1-1.9.1"><xref derivedContent="9" format="counter" sectionFormat="of" target="section-9"/>.  <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.9.2">
              <li pn="section-toc.1-1.9.2.1">
                <t indent="0" pn="section-toc.1-1.9.2.1.1"><xref derivedContent="9.1" format="counter" sectionFormat="of" target="section-9.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
              </li>
              <li pn="section-toc.1-1.9.2.2">
                <t indent="0" pn="section-toc.1-1.9.2.2.1"><xref derivedContent="9.2" format="counter" sectionFormat="of" target="section-9.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
              </li>
            </ul>
          </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.a"/><xref derivedContent="" format="title" sectionFormat="of" target="name-acknowledgements">Acknowledgements</xref></t>
          </li>
          <li pn="section-toc.1-1.11">
            <t indent="0" pn="section-toc.1-1.11.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.12">
            <t indent="0" pn="section-toc.1-1.12.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 anchor="intro" numbered="true" toc="include" removeInRFC="false" pn="section-1">
      <name slugifiedName="name-introduction">Introduction</name>
      <t indent="0" pn="section-1-1">
Routing protocols in general, and BGP in particular, have historically been
designed with a focus on "correctness", where a key part of correctness is
for each network element's forwarding state to converge to the current
state of the network as quickly as possible. For this reason, the protocol
was designed to remove state advertised by routers that went down (from a
BGP perspective) as quickly as possible. Over time, this has been relaxed
somewhat, notably by BGP Graceful Restart (GR) <xref target="RFC4724" format="default" sectionFormat="of" derivedContent="RFC4724"/>; 
however, the paradigm
has remained one of attempting to rapidly remove stale state from the 
network.
      </t>
      <t indent="0" pn="section-1-2">
Over time, two phenomena have arisen that call into question the underlying
      assumptions of this paradigm.</t>
      <ol indent="adaptive" spacing="normal" start="1" type="1" pn="section-1-3"><li pn="section-1-3.1" derivedCounter="1.">The widespread adoption of 
tunneled forwarding infrastructures (for example, MPLS). Such infrastructures
eliminate the risk of some types of forwarding loops that can arise in 
hop-by-hop forwarding; thus, they reduce one of the motivations for strong 
consistency between forwarding elements.</li>
        <li pn="section-1-3.2" derivedCounter="2.">The increasing use
of BGP as a transport for data that is less closely associated with packet forwarding
than was originally the case. Examples include the use of BGP for 
auto-discovery (<xref target="RFC4761" format="default" sectionFormat="of" derivedContent="RFC4761">Virtual Private LAN Service (VPLS)</xref>) and filter programming 
(<xref target="RFC8955" format="default" sectionFormat="of" derivedContent="RFC8955">Flow Specification (FLOWSPEC)</xref>). In these cases, 
BGP data takes on a character more akin to configuration than to conventional
routing.</li>
      </ol>
      <t indent="0" pn="section-1-4">
The observations above motivate a desire to offer network operators the 
ability to choose to retain BGP data for a longer period than has hitherto 
been possible when the BGP control plane fails for some reason. Although
the semantics of BGP Graceful Restart <xref target="RFC4724" format="default" sectionFormat="of" derivedContent="RFC4724"/> are close to those desired,
several gaps exist, most notably in the maximum time for which stale information
can be retained: Graceful Restart imposes a 4095-second upper bound. 
      </t>
      <t indent="0" pn="section-1-5">
In this document, we introduce a BGP capability called the "Long-Lived Graceful
Restart Capability". The goal of this capability is that stale information can be retained for a longer time 
      across a session reset. We also introduce two BGP well-known communities:</t>
      <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-1-6">
        <li pn="section-1-6.1">LLGR_STALE to mark such information, and</li>
        <li pn="section-1-6.2">NO_LLGR to indicate that these procedures should not
      be applied to the marked route.</li>
      </ul>
      <t indent="0" pn="section-1-7">Long-lived stale information is to be treated as least preferred, 
and its advertisement limited to BGP speakers that support the
capability. Where possible, we reference the semantics of BGP Graceful
Restart <xref target="RFC4724" format="default" sectionFormat="of" derivedContent="RFC4724"/> rather than specifying similar semantics in this document.
      </t>
      <t indent="0" pn="section-1-8">
The expected deployment model for this extension is that it will only be invoked
for certain address families. This is discussed in more detail in <xref target="deploy" format="default" sectionFormat="of" derivedContent="Section 5"/>.


The use of this extension may be combined with that of conventional
Graceful Restart; in such a case, it is invoked after the conventional
Graceful Restart interval has elapsed.  When not combined, LLGR is invoked immediately.

Apart from the potential to greatly extend the timer, the most
obvious difference between LLGR and conventional Graceful Restart is that
in LLGR, routes are "depreferenced"; that is, they are treated as least preferred.  Contrarily, in conventional GR, route preference is not affected.
The design choice to treat long-lived stale routes as least preferred was informed by
the expectation that they might be retained for (potentially) an almost
unbounded period of time; whereas, in the conventional Graceful Restart
case, stale routes are retained for only a brief interval. In the case of Graceful Restart, the 
trade-off between advertising new route status (at the cost of routing churn) 
and not advertising it (at the cost of suboptimal or incorrect route selection)
is resolved in favor of not advertising. In the case of LLGR, it is resolved in 
favor of advertising new state, using stale information only as a last resort.
      </t>
      <t indent="0" pn="section-1-9">
<xref target="examples" format="default" sectionFormat="of" derivedContent="Section 7"/> provides some simple examples illustrating the 
operation of this extension.
      </t>
    </section>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-2">
      <name slugifiedName="name-terminology">Terminology</name>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-2.1">
        <name slugifiedName="name-definitions">Definitions</name>
        <dl newline="false" spacing="normal" indent="2" pn="section-2.1-1">
          <dt pn="section-2.1-1.1">Depreference:</dt>
          <dd pn="section-2.1-1.2">
A route is said to be depreferenced if
it has its route selection preference reduced in reaction to some
event.
	</dd>
          <dt pn="section-2.1-1.3">Helper:</dt>
          <dd pn="section-2.1-1.4">
Sometimes referred to as "helper router". During Graceful Restart or Long-Lived
Graceful Restart, the router that detects a session failure and
applies the listed procedures. <xref target="RFC4724" format="default" sectionFormat="of" derivedContent="RFC4724"/> refers to this as the
"receiving speaker".
	</dd>
          <dt pn="section-2.1-1.5">Route:</dt>
          <dd pn="section-2.1-1.6">
In this document, "route" means any information encoded as BGP Network Layer Reachability Information (NLRI) and a
set of path attributes. As discussed above, the connection between such
routes and the installation of forwarding state may be quite remote.
 	</dd>
        </dl>
        <t indent="0" pn="section-2.1-2">Further note that, for brevity, in this document when we reference conventional Graceful 
Restart, we cite its base specification, <xref target="RFC4724" format="default" sectionFormat="of" derivedContent="RFC4724"/>. That specification has been updated by <xref target="RFC8538" format="default" sectionFormat="of" derivedContent="RFC8538"/>. The citation to <xref target="RFC4724" format="default" sectionFormat="of" derivedContent="RFC4724"/>
	is not intended to be limiting.</t>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-2.2">
        <name slugifiedName="name-abbreviations">Abbreviations</name>
        <dl newline="false" spacing="normal" indent="2" pn="section-2.2-1">
          <dt pn="section-2.2-1.1">CE:</dt>
          <dd pn="section-2.2-1.2">Customer Edge (See <xref target="RFC4364" format="default" sectionFormat="of" derivedContent="RFC4364"/> for more information on Customer Edge routers.)
        </dd>
          <dt pn="section-2.2-1.3">EoR:</dt>
          <dd pn="section-2.2-1.4">
End-of-RIB (See <xref target="RFC4724" sectionFormat="of" section="2" format="default" derivedLink="https://rfc-editor.org/rfc/rfc4724#section-2" derivedContent="RFC4724"/> for more information on End-of-RIB markers.)
	</dd>
          <dt pn="section-2.2-1.5">GR:</dt>
          <dd pn="section-2.2-1.6">
Graceful Restart (See <xref target="RFC4724" format="default" sectionFormat="of" derivedContent="RFC4724"/> for more information on GR.)  This term is also sometimes
referred to herein as "conventional Graceful Restart" or
"conventional GR" to distinguish it from the "Long-Lived Graceful
Restart" or "LLGR" defined by this document.
	</dd>
          <dt pn="section-2.2-1.7">LLGR:</dt>
          <dd pn="section-2.2-1.8">
Long-Lived Graceful Restart
	</dd>
          <dt pn="section-2.2-1.9">LLST:</dt>
          <dd pn="section-2.2-1.10">
Long-Lived Stale Time
	</dd>
          <dt pn="section-2.2-1.11">PE:</dt>
          <dd pn="section-2.2-1.12">
Provider Edge (See <xref target="RFC4364" format="default" sectionFormat="of" derivedContent="RFC4364"/> for more information on Provider Edge routers.)
        </dd>
          <dt pn="section-2.2-1.13">VRF:</dt>
          <dd pn="section-2.2-1.14">
 VPN Routing and Forwarding (See <xref target="RFC4364" format="default" sectionFormat="of" derivedContent="RFC4364"/> for more information on VRF tables.)
        </dd>
        </dl>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-2.3">
        <name slugifiedName="name-requirements-language">Requirements Language</name>
        <t indent="0" pn="section-2.3-1">
    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>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-3">
      <name slugifiedName="name-protocol-extensions">Protocol Extensions</name>
      <t indent="0" pn="section-3-1">
A BGP capability and two BGP communities are introduced in the subsections that follow.
      </t>
      <section anchor="llgr_cap" numbered="true" toc="include" removeInRFC="false" pn="section-3.1">
        <name slugifiedName="name-long-lived-graceful-restart">Long-Lived Graceful Restart Capability</name>
        <t indent="0" pn="section-3.1-1">
The "Long-Lived Graceful Restart Capability", or "LLGR Capability",
(value: 71) is a BGP capability <xref target="RFC5492" format="default" sectionFormat="of" derivedContent="RFC5492"/>
that can be used by a BGP speaker to indicate its ability to preserve
its state according to the procedures of this document.  If the LLGR capability is advertised, the Graceful Restart capability  <xref target="RFC4724" format="default" sectionFormat="of" derivedContent="RFC4724"/>
          <bcp14>MUST</bcp14> also be advertised; see <xref target="use_of_gr" format="default" sectionFormat="of" derivedContent="Section 4.1"/>.
        </t>
        <t indent="0" pn="section-3.1-2">
	  
The capability value consists of zero or more tuples &lt;AFI, SAFI,
Flags, LLST&gt; as follows:
        </t>
        <artwork align="left" name="" type="" alt="" pn="section-3.1-3">
+--------------------------------------------------+
| Address Family Identifier (16 bits)              |
+--------------------------------------------------+
| Subsequent Address Family Identifier (8 bits)    |
+--------------------------------------------------+
| Flags for Address Family (8 bits)                |
+--------------------------------------------------+
| Long-Lived Stale Time (24 bits)                  |
+--------------------------------------------------+
| ...                                              |
+--------------------------------------------------+
| Address Family Identifier (16 bits)              |
+--------------------------------------------------+
| Subsequent Address Family Identifier (8 bits)    |
+--------------------------------------------------+
| Flags for Address Family (8 bits)                |
+--------------------------------------------------+
| Long-Lived Stale Time (24 bits)                  |
+--------------------------------------------------+
</artwork>
        <t indent="0" pn="section-3.1-4">
The meaning of the fields are as follows:
</t>
        <dl newline="true" spacing="normal" indent="3" pn="section-3.1-5">
          <dt pn="section-3.1-5.1">
      Address Family Identifier (AFI), Subsequent Address Family
         Identifier (SAFI):
          </dt>
          <dd pn="section-3.1-5.2">
            <t indent="0" pn="section-3.1-5.2.1">
      The AFI and SAFI, taken in combination, indicate that the BGP
      speaker has the ability to preserve its forwarding state for
      the address family during a subsequent BGP restart. Routes may
      be either:</t>
            <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-3.1-5.2.2">
              <li pn="section-3.1-5.2.2.1">explicitly associated with a particular AFI and SAFI if using
      the encoding described in <xref target="RFC4760" format="default" sectionFormat="of" derivedContent="RFC4760"/>, or</li>
              <li pn="section-3.1-5.2.2.2">implicitly associated with
      &lt;AFI=IPv4, SAFI=Unicast&gt; if using the encoding described in <xref target="RFC4271" format="default" sectionFormat="of" derivedContent="RFC4271"/>.</li>
            </ul>
          </dd>
          <dt pn="section-3.1-5.3">
      Flags for Address Family:</dt>
          <dd pn="section-3.1-5.4">
         This field contains bit flags relating to routes that were
         advertised with the given AFI and SAFI.</dd>
        </dl>
        <artwork name="" type="" align="center" alt="" pn="section-3.1-6">
 0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
|F|   Reserved  |
+-+-+-+-+-+-+-+-+
</artwork>
        <ul empty="true" spacing="compact" bare="false" indent="3" pn="section-3.1-7">
          <li pn="section-3.1-7.1">
      The most significant bit is used to indicate whether the
      state for routes that were advertised with the given AFI and
      SAFI has indeed been preserved during the previous BGP restart. 
      When set (value 1), the bit indicates that the state has been
      preserved. This bit is called the "F bit" since it was
      historically used to indicate the preservation of forwarding state. 
      Use of the F bit is detailed in <xref target="session_resets" format="default" sectionFormat="of" derivedContent="Section 4.2"/>.
      The remaining bits are reserved and <bcp14>MUST</bcp14> be set to zero by the
      sender and ignored by the receiver.
</li>
        </ul>
        <dl newline="true" indent="3" spacing="normal" pn="section-3.1-8">
          <dt pn="section-3.1-8.1">
Long-Lived Stale Time:</dt>
          <dd pn="section-3.1-8.2">
      This time (in seconds) specifies how long stale information
      (for this AFI/SAFI) may be retained by the receiver (in addition
      to the period specified by the "Restart Time" in the
      Graceful Restart Capability). Because the potential use cases for
      this extension vary widely, there is no suggested default
      value for the LLST.
          </dd>
        </dl>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-3.2">
        <name slugifiedName="name-llgr_stale-community">LLGR_STALE Community</name>
        <t indent="0" pn="section-3.2-1">
The well-known BGP community LLGR_STALE (value: 0xFFFF0006) can be used to mark stale routes
retained for a longer period of time (see <xref target="RFC1997" format="default" sectionFormat="of" derivedContent="RFC1997"/> for more information on BGP communities). Such long-lived stale routes are to
be handled according to the procedures specified in <xref target="operation" format="default" sectionFormat="of" derivedContent="Section 4"/>.
</t>
        <t indent="0" pn="section-3.2-2">
An implementation <bcp14>MAY</bcp14> allow users to configure policies that accept,
reject, or modify routes based on the presence or absence of this community. 
</t>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-3.3">
        <name slugifiedName="name-no_llgr-community">NO_LLGR Community</name>
        <t indent="0" pn="section-3.3-1">
The well-known BGP community NO_LLGR (value: 0xFFFF0007) can be
used to mark routes that a BGP speaker does not want to be treated according to 
these procedures, as detailed in <xref target="operation" format="default" sectionFormat="of" derivedContent="Section 4"/>.
</t>
        <t indent="0" pn="section-3.3-2">
An implementation <bcp14>MAY</bcp14> allow users to configure policies that accept,
reject, or modify routes based on the presence or absence of this community. 
</t>
      </section>
    </section>
    <section anchor="operation" numbered="true" toc="include" removeInRFC="false" pn="section-4">
      <name slugifiedName="name-theory-of-operation">Theory of Operation</name>
      <t indent="0" pn="section-4-1">
If a BGP speaker is configured to support the procedures of this
document, it <bcp14>MUST</bcp14> use <xref target="RFC5492" format="default" sectionFormat="of" derivedContent="RFC5492">BGP Capabilities
Advertisement</xref> to advertise the Long-Lived Graceful Restart
Capability. The setting of the parameters for an AFI/SAFI depends on
the properties of the BGP speaker, network scale, and local
configuration.
      </t>
      <t indent="0" pn="section-4-2">
In the presence of the Long-Lived Graceful Restart Capability, the
procedures specified in <xref target="RFC4724" format="default" sectionFormat="of" derivedContent="RFC4724"/> continue to apply
unless explicitly revised by this document.
      </t>
      <section anchor="use_of_gr" numbered="true" toc="include" removeInRFC="false" pn="section-4.1">
        <name slugifiedName="name-use-of-the-graceful-restart">Use of the Graceful Restart Capability</name>
        <t indent="0" pn="section-4.1-1">
 If the LLGR Capability is advertised, the Graceful Restart capability <bcp14>MUST</bcp14> also be advertised. If it is not so advertised, the LLGR 
Capability <bcp14>MUST</bcp14> be disregarded. The purpose for mandating this
  is to enable the reuse of certain base
  mechanisms that are common to both "flavors" notably: origination,
  collection, and processing of EoR as well as the finite-state-machine modifications and connection-reset logic introduced by GR.
        </t>
        <t indent="0" pn="section-4.1-2">
We observe that, if support for conventional Graceful Restart is not desired
for the session, the conventional GR phase can be skipped by omitting all
AFIs/SAFIs from the GR Capability, advertising a Restart Time of zero, or
both. <xref target="session_resets" format="default" sectionFormat="of" derivedContent="Section 4.2"/>
discusses the interaction of conventional and LLGR.      
        </t>
      </section>
      <section anchor="session_resets" numbered="true" toc="include" removeInRFC="false" pn="section-4.2">
        <name slugifiedName="name-session-resets">Session Resets</name>
        <t indent="0" pn="section-4.2-1">
<xref target="RFC4724" format="default" sectionFormat="of" derivedContent="RFC4724">BGP Graceful Restart</xref> defines conditions
under which a BGP session can reset and have its associated routes
retained. If such a reset occurs for a session in which the LLGR 
Capability has also been exchanged, the following procedures apply:</t>
        <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-4.2-2">
          <li pn="section-4.2-2.1">
If the Graceful Restart Capability that was received does not list all
AFIs/SAFIs supported by the session, then the GR Restart Time shall be deemed zero for those AFIs/SAFIs that are not listed.</li>
          <li pn="section-4.2-2.2">Similarly, if the received LLGR
Capability does not list all AFIs/SAFIs supported by the session, then the Long-Lived Stale Time shall be deemed zero for those AFIs/SAFIs that are not listed.
        </li>
        </ul>
        <t indent="0" pn="section-4.2-3">
The following text in <xref target="RFC4724" sectionFormat="of" section="4.2" format="default" derivedLink="https://rfc-editor.org/rfc/rfc4724#section-4.2" derivedContent="RFC4724"/> no longer applies:
        </t>
        <blockquote pn="section-4.2-4">
   If the session does not get re-established within the "Restart
   Time" that the peer advertised previously, the Receiving Speaker
   <bcp14>MUST</bcp14> delete all the stale routes from the peer that it is
   retaining.
	</blockquote>
        <t indent="0" pn="section-4.2-5">
and the following procedures are specified instead:
        </t>
        <t indent="0" pn="section-4.2-6">
After the session goes down, and before the session is re-established,
the stale routes for an AFI/SAFI <bcp14>MUST</bcp14> be retained. The interval for
which they are retained is
limited by the sum of the Restart Time in the received Graceful Restart Capability
and the Long-Lived Stale Time in the received Long-Lived Graceful
Restart Capability. The timers received in the Long-Lived Graceful Restart 
Capability <bcp14>SHOULD</bcp14> be modifiable by local configuration, which may impose an upper bound, a lower bound, or both on their respective values.
        </t>
        <t indent="0" pn="section-4.2-7">
If the value of the Restart Time or the Long-Lived Stale Time is zero,
the duration of the corresponding period would be zero seconds. For
example, if the Restart Time is zero and the Long-Lived Stale Time is
nonzero, only the procedures particular to LLGR would apply. Conversely, if
the Long-Lived Stale Time is zero and the Restart Time is nonzero, only
the procedures of GR would apply. If both are zero, none of these procedures
would apply, only those of the base BGP specification <xref target="RFC4271" format="default" sectionFormat="of" derivedContent="RFC4271"/> (although EoR would
still be used as detailed in <xref target="RFC4724" format="default" sectionFormat="of" derivedContent="RFC4724"/>). And finally, if both
are nonzero, then the procedures would be applied serially: first those of 
GR and then those of LLGR.  During the first interval, we observe that, while the 
procedures of GR are in effect, route preference would not be affected. 
During the second interval, while LLGR procedures are in effect, routes
would be treated as least preferred as specified elsewhere in this document.
        </t>
        <t indent="0" pn="section-4.2-8">
Once the Restart Time period ends (including the case in which the Restart
Time is zero), the LLGR period is said to have begun and the following 
procedures <bcp14>MUST</bcp14> be performed:
        </t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-4.2-9">
          <li pn="section-4.2-9.1">
     For each AFI/SAFI for which it has received a nonzero Long-Lived
     Stale Time, the helper router <bcp14>MUST</bcp14> start a timer for that
     Long-Lived Stale Time. If the timer for the Long-Lived Stale
     Time for a given AFI/SAFI expires before the session is
     re-established, the helper <bcp14>MUST</bcp14> delete all stale routes of that
     AFI/SAFI from the neighbor that it is retaining. 
      	</li>
          <li pn="section-4.2-9.2">
     The helper router <bcp14>MUST</bcp14> attach the LLGR_STALE community
     to the stale routes being retained. Note that this requirement
     implies that the routes would need to be readvertised in order to 
     disseminate the modified community.
      	</li>
          <li pn="section-4.2-9.3">	  
     If any of the routes from the peer have been marked with 
     the NO_LLGR community, either as sent by the peer
     or as the result of a configured policy, they
     <bcp14>MUST NOT</bcp14> be retained and <bcp14>MUST</bcp14> be removed as per the
     normal operation of <xref target="RFC4271" format="default" sectionFormat="of" derivedContent="RFC4271"/>.
	</li>
          <li pn="section-4.2-9.4">
     The helper router <bcp14>MUST</bcp14> perform the procedures listed in
     <xref target="processing_lls" format="default" sectionFormat="of" derivedContent="Section 4.3"/>.
        </li>
        </ul>
        <t indent="0" pn="section-4.2-10">
Once the session is re-established, the procedures specified in <xref target="RFC4724" format="default" sectionFormat="of" derivedContent="RFC4724"/>
apply for the stale routes irrespective of whether the stale routes are
retained during the Restart Time period or the Long-Lived Stale Time period.
However, in the case of consecutive restarts, the previously marked stale routes <bcp14>MUST NOT</bcp14>
be deleted before the timer for the Long-Lived Stale Time expires. 
        </t>
        <t indent="0" pn="section-4.2-11">
Similar to <xref target="RFC4724" format="default" sectionFormat="of" derivedContent="RFC4724"/>, once the LLGR Period begins, the
   Helper <bcp14>MUST</bcp14> immediately remove all the stale routes from the peer
   that it is retaining for that address family if any of the
   following occur:</t>
        <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-4.2-12">
          <li pn="section-4.2-12.1">the F bit
for a specific address family is not set in the newly received LLGR
     Capability, or</li>
          <li pn="section-4.2-12.2">a specific address family is not included in the newly
     received LLGR Capability, or</li>
          <li pn="section-4.2-12.3">the LLGR and accompanying GR Capability are
not received in the re-established session at all.</li>
        </ul>
        <t indent="0" pn="section-4.2-13">
If a Long-Lived Stale Time timer is running for routes with a given
AFI/SAFI received from a peer, it <bcp14>MUST NOT</bcp14> be updated (other than by
manual operator intervention) until the peer has established and
synchronized a new session. The session is termed "synchronized" for a
given AFI/SAFI once the EoR for that AFI/SAFI has been received from the
peer or once the Selection_Deferral_Timer discussed in <xref target="RFC4724" format="default" sectionFormat="of" derivedContent="RFC4724"/> expires. 
        </t>
        <t indent="0" pn="section-4.2-14">
The value of a Long-Lived Stale Time in the capability received
from a neighbor <bcp14>MAY</bcp14> be reduced by local configuration.
        </t>
        <t indent="0" pn="section-4.2-15">

	  
While the session is down, the expiration of a Long-Lived Stale Time
timer is treated analogously to the expiration of the Restart Time
timer in <xref target="RFC4724" format="default" sectionFormat="of" derivedContent="RFC4724"/>, other than applying only to the AFI/SAFI it
accompanies. However, the timer continues to run once the session has
re-established. The timer is neither stopped nor updated until the EoR marker is
received for the relevant AFI/SAFI from the peer. If the timer expires
during synchronization with the peer, any stale routes that the peer has
not refreshed are removed. If the session subsequently resets prior to
becoming synchronized, any remaining routes (for the AFI/SAFI whose LLST
timer expired) <bcp14>MUST</bcp14> be removed immediately. 
        </t>
      </section>
      <section anchor="processing_lls" numbered="true" toc="include" removeInRFC="false" pn="section-4.3">
        <name slugifiedName="name-processing-llgr_stale-route">Processing LLGR_STALE Routes</name>
        <t indent="0" pn="section-4.3-1">
A BGP speaker that has advertised the Long-Lived Graceful Restart
Capability to a neighbor <bcp14>MUST</bcp14> perform the following upon
receiving a route from that neighbor with the LLGR_STALE community
or upon attaching the LLGR_STALE community itself per 
<xref target="session_resets" format="default" sectionFormat="of" derivedContent="Section 4.2"/>:
        </t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-4.3-2">
          <li pn="section-4.3-2.1">
     Treat the route as the least preferred in route selection (see below).
     See <xref target="depref" format="default" sectionFormat="of" derivedContent="Section 5.2"/> for a discussion of potential risks inherent in doing
     this.
          </li>
          <li pn="section-4.3-2.2">
     The route <bcp14>SHOULD NOT</bcp14> be advertised to any neighbor from which the
     Long-Lived Graceful Restart Capability has not been received. The
     exception is described in <xref target="partial_deploy" format="default" sectionFormat="of" derivedContent="Section 4.6"/>. Note that this
     requirement implies that such routes should be withdrawn from any such
     neighbor.
          </li>
          <li pn="section-4.3-2.3">
     The LLGR_STALE community <bcp14>MUST NOT</bcp14> be removed when 
     the route is further advertised.
          </li>
        </ul>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-4.4">
        <name slugifiedName="name-route-selection">Route Selection</name>
        <t indent="0" pn="section-4.4-1">
A least preferred route <bcp14>MUST</bcp14> be treated as less preferred than any other route that is not also least preferred. When performing route selection between two routes when both
are least preferred, normal tiebreaking applies. Note that this
would only be expected to happen if the only routes available for selection
were least preferred; in all other cases, such routes would have been
eliminated from consideration.
        </t>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-4.5">
        <name slugifiedName="name-errors">Errors</name>
        <t indent="0" pn="section-4.5-1">
If the LLGR Capability is received without an accompanying GR Capability,
the LLGR Capability <bcp14>MUST</bcp14> be ignored, that is, the implementation <bcp14>MUST</bcp14> behave
as though no LLGR Capability has been received.
        </t>
      </section>
      <section anchor="partial_deploy" numbered="true" toc="include" removeInRFC="false" pn="section-4.6">
        <name slugifiedName="name-optional-partial-deployment">Optional Partial Deployment Procedure</name>
        <t indent="0" pn="section-4.6-1">
Ideally, all routers in an Autonomous System (AS) would support this
specification before it were enabled. However, to facilitate incremental
deployment, stale routes <bcp14>MAY</bcp14> be advertised to neighbors that have not
advertised the Long-Lived Graceful Restart Capability under the following
conditions:
        </t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-4.6-2">
          <li pn="section-4.6-2.1">
     The neighbors <bcp14>MUST</bcp14> be internal (Internal BGP (IBGP) or Confederation) 
     neighbors.
	  </li>
          <li pn="section-4.6-2.2">   
     The NO_EXPORT community <xref target="RFC1997" format="default" sectionFormat="of" derivedContent="RFC1997"/> <bcp14>MUST</bcp14> be attached to the stale 
     routes.
	  </li>
          <li pn="section-4.6-2.3">     
     The stale routes <bcp14>MUST</bcp14> have their LOCAL_PREF set to zero. See <xref target="depref" format="default" sectionFormat="of" derivedContent="Section 5.2"/> for a
     discussion of potential risks inherent in doing this.
	  </li>
        </ul>
        <t indent="0" pn="section-4.6-3">
If this strategy for partial deployment is used, the network operator should
set the LOCAL_PREF to zero for all long-lived stale routes throughout the Autonomous System.
This trades off a small reduction in flexibility (ordering may not be
preserved between competing long-lived stale routes) for consistency between routers
that do, and do not, support this specification. Since the consistency of route
selection can be important for preventing forwarding loops, the latter
consideration dominates.
        </t>
      </section>
      <section anchor="pe_ce" numbered="true" toc="include" removeInRFC="false" pn="section-4.7">
        <name slugifiedName="name-procedures-when-bgp-is-the-">Procedures When BGP Is the PE-CE Protocol in a VPN</name>
        <section numbered="true" toc="include" removeInRFC="false" pn="section-4.7.1">
          <name slugifiedName="name-procedures-when-ebgp-is-the">Procedures When EBGP Is the PE-CE Protocol in a VPN</name>
          <t indent="0" pn="section-4.7.1-1">

	    
In VPN deployments (for example, <xref target="RFC4364" format="default" sectionFormat="of" derivedContent="RFC4364"/>), External BGP (EBGP) is
often used as a PE-CE protocol. It may be a practical necessity in such
deployments to accommodate interoperation with peer routers that cannot easily be
upgraded to support specifications such as this one. This leads to a problem: the procedures defined elsewhere in this 
document generally prevent LLGR stale routes from being sent across
EBGP sessions that don't support LLGR, but this could prevent the
VPN routes from being used for their intended purpose.
          </t>
          <t indent="0" pn="section-4.7.1-2">
We observe that the principal motivation for restricting the propagation of
"stale" routing information is the desire to prevent it from spreading
without limit once it exits the "safe" perimeter. We further observe that
VPN deployments are typically topologically constrained, making this
concern moot. For this reason, an implementation <bcp14>MAY</bcp14> advertise stale routes
over a PE-CE session, when explicitly configured to do so. That is, the
second rule listed in <xref target="processing_lls" format="default" sectionFormat="of" derivedContent="Section 4.3"/> <bcp14>MAY</bcp14> be
disregarded in such cases. All other rules continue to apply. Finally,
if this exception is used, the implementation <bcp14>SHOULD</bcp14>, by default, attach
the NO_EXPORT community to the routes in question, as an additional 
protection against stale routes spreading without limit. Attachment of
the NO_EXPORT community <bcp14>MAY</bcp14> be disabled by explicit configuration in order to 
accommodate exceptional cases.
          </t>
          <t indent="0" pn="section-4.7.1-3">
See further discussion of using an explicitly configured policy to
mitigate this issue in <xref target="deploy_pe_ce" format="default" sectionFormat="of" derivedContent="Section 5.1"/>.
          </t>
        </section>
        <section numbered="true" toc="include" removeInRFC="false" pn="section-4.7.2">
          <name slugifiedName="name-procedures-when-ibgp-is-the">Procedures When IBGP Is the PE-CE Protocol in a VPN</name>
          <t indent="0" pn="section-4.7.2-1">
If IBGP is used as the PE-CE protocol, following the procedures of
<xref target="RFC6368" format="default" sectionFormat="of" derivedContent="RFC6368"/>, then when a PE router imports a VPN
route that contains the ATTR_SET attribute into a destination VRF and
subsequently advertises that route to a CE router:</t>
          <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-4.7.2-2">
            <li pn="section-4.7.2-2.1">
              <t indent="0" pn="section-4.7.2-2.1.1">If the CE router supports the procedures of this document (in
	  other words, if the CE router has advertised the LLGR Capability):</t>
              <t indent="3" pn="section-4.7.2-2.1.2">In
addition to including the path attributes
derived from the ATTR_SET attribute in the advertised route as per <xref target="RFC6368" format="default" sectionFormat="of" derivedContent="RFC6368"/>, the
PE router <bcp14>MUST</bcp14> also include the LLGR_STALE community if it is present
in the path attributes of the imported route, even if it is not
present in the ATTR_SET attribute.
              </t>
            </li>
            <li pn="section-4.7.2-2.2">
              <t indent="0" pn="section-4.7.2-2.2.1">If the CE router does not support the
	    procedures of this document:</t>
              <t indent="3" pn="section-4.7.2-2.2.2">Then the optional procedures of <xref target="partial_deploy" format="default" sectionFormat="of" derivedContent="Section 4.6"/> <bcp14>MAY</bcp14> be followed, attaching the NO_EXPORT
community and setting the value of LOCAL_PREF to zero, overriding the
value found in the ATTR_SET.
              </t>
            </li>
          </ul>
          <t indent="0" pn="section-4.7.2-3">
Similarly, when a PE router receives a route from a CE into its VRF
and subsequently exports that route to a VPN address family: 
          </t>
          <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-4.7.2-4">
            <li pn="section-4.7.2-4.1">
              <t indent="0" pn="section-4.7.2-4.1.1">If the PE router supports the procedures of this document (in
other words, if the PE router has advertised the LLGR Capability):</t>
              <t indent="3" pn="section-4.7.2-4.1.2">In addition to including in the VPN route the ATTR_SET derived from
the path attributes as per <xref target="RFC6368" format="default" sectionFormat="of" derivedContent="RFC6368"/>, the PE router
<bcp14>MUST</bcp14> also include the LLGR_STALE community in the VPN route if it is
present in the path attributes of the route as received from the CE.</t>
            </li>
            <li pn="section-4.7.2-4.2">
              <t indent="0" pn="section-4.7.2-4.2.1">If the PE router does not support the procedures of this document:</t>
              <t indent="3" pn="section-4.7.2-4.2.2">There exists no ideal solution. The CE could advertise a route with
LLGR_STALE, with the understanding that the LLGR_STALE marking will
only be honored by the provider network if appropriate policy
configuration exists on the PE (see <xref target="deploy_pe_ce" format="default" sectionFormat="of" derivedContent="Section 5.1"/>).
It is at least guaranteed that LLGR_STALE will be propagated when
the route is propagated beyond the provider network, or the CE
could refrain from advertising the LLGR_STALE route to the incapable
PE. 
              </t>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="deploy" numbered="true" toc="include" removeInRFC="false" pn="section-5">
      <name slugifiedName="name-deployment-considerations">Deployment Considerations</name>
      <t indent="0" pn="section-5-1">	
The deployment considerations discussed in <xref target="RFC4724" format="default" sectionFormat="of" derivedContent="RFC4724"/> apply to this
document. In addition, network operators are cautioned to carefully
consider the potential disadvantages of deploying these procedures for a
given AFI/SAFI. Most notably, if used for an AFI/SAFI that conveys
conventional reachability information, the use of a long-lived stale route could
result in a loss of connectivity for the covered prefix. This specification
takes pains to mitigate this risk where possible by making such routes
least preferred and by restricting the scope of such routes to routers that
support these procedures (or, optionally, a single Autonomous System, see
<xref target="partial_deploy" format="default" sectionFormat="of" derivedContent="Section 4.6"/>).  However, if a stale route is chosen as best for a given prefix,
then according to the normal rules of IP forwarding, that route will
be used for matching destinations, even if a non-stale less specific 
matching route is also available.  Networks in which the deployment of these procedures
would be especially concerning include those that do not use "tunneled"
forwarding (in other words, those using conventional hop-by-hop forwarding).
      </t>
      <t indent="0" pn="section-5-2">
Implementations <bcp14>MUST NOT</bcp14> enable these procedures by default. They <bcp14>MUST</bcp14>
require affirmative configuration per AFI/SAFI in order to enable them.
      </t>
      <t indent="0" pn="section-5-3">
The procedures of this document do not alter the route resolvability
requirement of <xref target="RFC4271" sectionFormat="of" section="9.1.2.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc4271#section-9.1.2.1" derivedContent="RFC4271"/>. Because of this, it will commonly be
the case that "stale" IBGP routes will only continue to be used if the
router depicted in the next hop remains resolvable, even if its BGP
component is down. Details of IGP
fault-tolerance strategies are beyond the scope of this document. In
addition to the foregoing, it may be advisable to check the viability of
the next hop through other means, for example, 
<xref target="RFC5880" format="default" sectionFormat="of" derivedContent="RFC5880">Bidirectional Forwarding Detection (BFD)</xref>. This may be especially
useful in cases where the next hop is known directly at the network layer,
notably EBGP. 
      </t>
      <t indent="0" pn="section-5-4">
As discussed in this document, after a BGP session goes down and before the
session is re-established, stale routes may be retained for up to two
consecutive periods, controlled by the Restart Time and the Long-Lived
Stale Time, respectively:</t>
      <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-5-5">
        <li pn="section-5-5.1">During the first period, routing churn would be
prevented, but with potential persistent packet loss.</li>
        <li pn="section-5-5.2">During the second
period, potential persistent packet loss may be reduced, but routing churn
would be visible throughout the network.</li>
      </ul>
      <t indent="0" pn="section-5-6">The setting of the relevant parameters for a particular application should take into account 
trade-offs, network dynamics, and potential failure scenarios. If needed,
the first period can be bypassed either by local configuration or by setting
the Restart Time in the Graceful Restart Capability to zero and/or not
listing the AFI/SAFI in that capability.
      </t>
      <t indent="0" pn="section-5-7">
The setting of the F bit (and the Forwarding State bit of the
accompanying GR Capability) depends, in part, on deployment considerations.
The F bit can be understood as an indication that the Helper should flush
associated routes (if the bit is left clear). As discussed in <xref target="intro" format="default" sectionFormat="of" derivedContent="Section 1"/>, an important use case for LLGR is for routes that are more
akin to configuration than to conventional routing. For such routes, it may
make sense to always set the F bit, regardless of other considerations.  Likewise, for control-plane-only entities, such as dedicated route
reflectors that do not participate in the forwarding plane, it makes
sense to always set the F bit.  Overall, the rule of thumb is that if loss of
state on the restarting router can reasonably be expected to cause a
forwarding loop or persistent packet loss, the F bit should be set scrupulously
according to whether state has been retained. Specifics of whether or not the F bit
is set are implementation dependent and may also be controlled
by configuration. Also, for every AFI/SAFI represented in the LLGR Capability
that is also represented in the GR Capability, there will be two corresponding
F bits: the LLGR F bit and the GR F bit. If the LLGR F bit is set, the 
corresponding GR F bit should also be set, since to do otherwise would cause
the state to be cleared on the Receiving Router per the normal rules of GR,
violating the intent of the set LLGR bit.
      </t>
      <section anchor="deploy_pe_ce" numbered="true" toc="include" removeInRFC="false" pn="section-5.1">
        <name slugifiedName="name-when-bgp-is-the-pe-ce-proto">When BGP Is the PE-CE Protocol in a VPN</name>
        <t indent="0" pn="section-5.1-1">
As discussed in <xref target="pe_ce" format="default" sectionFormat="of" derivedContent="Section 4.7"/>, it may be necessary for a PE to
advertise stale routes to a CE in some VPN deployments, even if the CE
does not support this specification. In that case, the operator
configuring their PE to advertise such routes should notify the operator
of the CE receiving the routes, and the CE should be configured to
depreference the routes.
        </t>
        <t indent="0" pn="section-5.1-2">
Similarly, it may be necessary for a CE to advertise stale routes to a
PE, even if the PE does not support this specification. In that case,
the operator configuring their CE to advertise such routes should notify
the operator of the PE receiving the routes, and the PE should be
configured to depreference the routes.
        </t>
        <t indent="0" pn="section-5.1-3">
Typical BGP implementations will be able to be configured to
depreference routes by matching on the LLGR_STALE community and setting
the LOCAL_PREF for matching routes to zero, similar to the procedure
described in <xref target="partial_deploy" format="default" sectionFormat="of" derivedContent="Section 4.6"/>.
        </t>
      </section>
      <section anchor="depref" numbered="true" toc="include" removeInRFC="false" pn="section-5.2">
        <name slugifiedName="name-risks-of-depreferencing-rou">Risks of Depreferencing Routes</name>
        <t indent="0" pn="section-5.2-1">
Depreferencing EBGP routes is considered safe, no different from the 
common practice of applying a routing policy to an EBGP session. 
However, the same is not always true of IBGP.
        </t>
        <t indent="0" pn="section-5.2-2">
Consistent route selection is a fundamental tenet of IBGP correctness and
safe operation in hop-by-hop routed networks. When routers within an AS apply different criteria in
selecting routes, they can arrive at inconsistent route selections. 
This can lead to the formation of forwarding loops unless some
form of tunneled forwarding is used to prevent "core" routers from 
making a (potentially inconsistent) forwarding decision based on the
IP header. 
        </t>
        <t indent="0" pn="section-5.2-3">
This specification uses the state of a peering session as an input
to the selection criteria, depreferencing routes that are associated
with a session that has gone down but that have not yet aged out. Since
different routers within an AS might have different notions as to 
whether their respective sessions with a given peer are up or down, they might 
apply different selection criteria to routes from that peer. This 
could result in a forwarding loop forming between such routers.
        </t>
        <t indent="0" pn="section-5.2-4">
For an example of such a forwarding loop, consider the following 
simple topology:
</t>
        <figure align="left" suppress-title="false" pn="figure-1">
          <artwork align="left" name="" type="" alt="" pn="section-5.2-5.1">
	  
A ---- B ---- C ------------------------- D
^                                         ^
|                                         |
R1                                        R2
</artwork>
        </figure>
        <t indent="0" pn="section-5.2-6">
In this example, A - D are routers with a full mesh of IBGP sessions
between them (the sessions are not shown). 
The short links have unit cost, the long link has cost 5.
Routers A and D are AS border routers, each advertising some route, R, with the same LOCAL_PREF into
the AS: denoted R1 and R2 in the diagram. In ordinary
operation, it can be seen that routers B and C will select R1 for
forwarding and will forward toward A.
        </t>
        <t indent="0" pn="section-5.2-7">
Suppose that the session between A and B goes down for some reason, and
it stays down long enough for LLGR processing to be invoked on B. Then, on B,
route R1 will be depreferenced, leading to the selection of R2 by B.
However, C will continue to prefer R1. In this case, it can be seen that a
forwarding loop for packets destined to R would form between B and C. (We
note that other forwarding loop scenarios can be constructed for
conventional GR, but these are generally considered less severe since GR can
remain in effect for a much more limited interval.)
        </t>
        <t indent="0" pn="section-5.2-8">
The potential benefits of this specification can outweigh the 
risks discussed above, as long as care is exercised in deployment. 
The cardinal rule to be followed is that if a given set of routes is
being used within an AS for hop-by-hop forwarding, enabling LLGR procedures is  not
recommended. If tunneled forwarding (such
as MPLS) is used within the AS, or if routes are being used for 
purposes other than hop-by-hop forwarding, less caution is needed;
however, the operator should still carefully consider the consequences
of enabling LLGR.
        </t>
      </section>
    </section>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-6">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t indent="0" pn="section-6-1">
The security implications of the LLGR mechanism defined 
in this document are akin to those incurred by the maintenance of
stale routing information within a network.  However, since the
retention time may be much longer, the window during
which certain attacks are feasible may substantially increase.   
This is particularly
relevant when considering the maintenance of routing information that
is used for service segregation, such as MPLS label entries.
      </t>
      <t indent="0" pn="section-6-2">
For MPLS VPN services, the effectiveness of the traffic isolation
between VPNs relies on the correctness of the MPLS labels between
ingress and egress PEs.  In particular, when an egress PE withdraws a
label L1 allocated to a VPN1 route, this label must not be assigned
to a VPN route of a different VPN until all ingress PEs stop using
the old VPN1 route using L1.
      </t>
      <t indent="0" pn="section-6-3">
Such a corner case may happen today if the propagation of VPN routes
by BGP messages between PEs takes more time than the label reallocation 
delay on a PE.  Given that we can generally bound the worst-case 
BGP propagation time to a few minutes (for example, 2-5 minutes), the security
breach will not occur if PEs are designed to not reallocate a
previously used and withdrawn label before a few minutes.
      </t>
      <t indent="0" pn="section-6-4">
The problem is made worse with BGP GR between PEs because VPN routes can
be stalled for a longer period of time (for example, 20 minutes).
      </t>
      <t indent="0" pn="section-6-5">
This is further aggravated by the LLGR extension specified
in this document because VPN routes can be stalled for a much longer
period of time (for example, 2 hours, 1 day).
      </t>
      <t indent="0" pn="section-6-6">
In order to exploit the vulnerability described above, an attacker
needs to engineer a specific LLGR state between two PE devices and
also cause the label reallocation to occur such that the two
topologies overlap.  To avoid the potential for a VPN breach, the
operator should ensure that the lower bound for label reuse is greater
than the upper bound on the LLST before enabling LLGR for a VPN
address family.  <xref target="session_resets" format="default" sectionFormat="of" derivedContent="Section 4.2"/> discusses the
provision of an upper bound on LLST. Details of features for setting
a lower bound on label reuse time are beyond the scope of this document;
however, factors that might need to be taken into account when setting
this value include:
      </t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-6-7">
        <li pn="section-6-7.1">
      The load of the BGP route churn on a PE (in terms of the number 
      of VPN labels advertised and the churn rate).
	</li>
        <li pn="section-6-7.2">The label allocation policy on the PE, which possibly depends upon
      the size of the pool of the VPN labels (which can be restricted by
      hardware considerations or other MPLS usages), the label
      allocation scheme (for example, per route or per VRF/CE), and the
      reallocation policy (for example, least recently used label). </li>
      </ul>
      <t indent="0" pn="section-6-8">
Note that <xref target="RFC4781" format="default" sectionFormat="of" derivedContent="RFC4781"/>, which defines the Graceful Restart Mechanism
for BGP with MPLS, is also applicable to LLGR.
      </t>
    </section>
    <section anchor="examples" numbered="true" toc="include" removeInRFC="false" pn="section-7">
      <name slugifiedName="name-examples-of-operation">Examples of Operation</name>
      <t indent="0" pn="section-7-1">
For illustrative purposes, we present a few examples of how this
specification might be used in practice. These examples are neither
exhaustive nor normative.
      </t>
      <t indent="0" pn="section-7-2">
Consider the following scenario: A border router, ASBR1, has an IBGP peering with
a route reflector, RR1, from which it learns routes. It has an EBGP peering
with an external peer, EXT, to which it advertises those routes. The external peer
has advertised the GR and LLGR Capabilities to ASBR1. ASBR1 is configured
to support GR and LLGR on its sessions with RR1 and EXT. RR1 advertises a GR Restart Time
of 1 (second) and an LLST of 3600 (seconds): 
      </t>
      <table align="center" pn="table-1">
        <thead>
          <tr>
            <th align="left" colspan="1" rowspan="1">Time</th>
            <th align="left" colspan="1" rowspan="1">Event</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left" colspan="1" rowspan="1">t</td>
            <td align="left" colspan="1" rowspan="1">ASBR1's IBGP session with RR fails. ASBR1 
      			   retains RR's routes according to the rules
      			   of GR <xref target="RFC4724" format="default" sectionFormat="of" derivedContent="RFC4724"/>.</td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">t+1</td>
            <td align="left" colspan="1" rowspan="1">GR Restart Time expires. ASBR1 transitions
      			   RR's routes to long-lived stale routes by attaching
      			   the LLGR_STALE community and depreferencing
      			   them. However, since it has no backup
      			   routes, it continues to make use of them. It
      			   re-announces them to EXT with the 
      			   LLGR_STALE community attached.</td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">t+1+3600</td>
            <td align="left" colspan="1" rowspan="1">LLST expires. ASBR1 removes RR's stale 
      	                   routes from its own RIB and sends BGP updates
      	                   to withdraw them from EXT.</td>
          </tr>
        </tbody>
      </table>
      <t indent="0" pn="section-7-4">
Next, imagine the same scenario, but suppose RR1 advertised a GR Restart 
Time of zero, effectively disabling GR. Equally, ASBR1 could have used
a local configuration to override RR1's offered Restart Time, setting it to
a locally configured value of zero:
      </t>
      <table align="center" pn="table-2">
        <thead>
          <tr>
            <th align="left" colspan="1" rowspan="1">Time</th>
            <th align="left" colspan="1" rowspan="1">Event</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left" colspan="1" rowspan="1">t</td>
            <td align="left" colspan="1" rowspan="1">ASBR1's IBGP session with RR fails. ASBR1 transitions
      			   RR's routes to long-lived stale routes by attaching
      			   the LLGR_STALE community and depreferencing
      			   them. However, since it has no backup
      			   routes, it continues to make use of them. It
      			   re-announces them to EXT with the 
      			   LLGR_STALE community attached.</td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">t+0+3600</td>
            <td align="left" colspan="1" rowspan="1">LLST expires. ASBR1 removes RR's stale 
      	                   routes from its own RIB and sends BGP updates
      	                   to withdraw them from EXT.</td>
          </tr>
        </tbody>
      </table>
      <t indent="0" pn="section-7-6">
Next, imagine the original scenario, but consider that the ASBR1-RR1
session comes back up and becomes synchronized 180 seconds after the failure was
detected:
      </t>
      <table align="center" pn="table-3">
        <thead>
          <tr>
            <th align="left" colspan="1" rowspan="1">Time</th>
            <th align="left" colspan="1" rowspan="1">Event</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left" colspan="1" rowspan="1">t</td>
            <td align="left" colspan="1" rowspan="1">ASBR1's IBGP session with RR fails. ASBR1 
      			   retains RR's routes according to the rules
      			   of GR <xref target="RFC4724" format="default" sectionFormat="of" derivedContent="RFC4724"/>.</td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">t+1</td>
            <td align="left" colspan="1" rowspan="1">GR Restart Time expires. ASBR1 transitions
      			   RR's routes to long-lived stale routes by attaching
      			   the LLGR_STALE community and depreferencing
      			   them. However, since it has no backup
      			   routes, it continues to make use of them. It
      			   re-announces them to EXT with the 
      			   LLGR_STALE community attached.</td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">t+1+179</td>
            <td align="left" colspan="1" rowspan="1">Session is re-established and resynchronized. ASBR1
      			   removes the LLGR_STALE community from
      			   RR1's routes and re-announces them to EXT with
      			   the LLGR_STALE community removed.</td>
          </tr>
        </tbody>
      </table>
      <t indent="0" pn="section-7-8">
Finally, imagine the original scenario, but consider that EXT has not 
advertised the LLGR Capability to ASBR1:
      </t>
      <table align="center" pn="table-4">
        <thead>
          <tr>
            <th align="left" colspan="1" rowspan="1">Time</th>
            <th align="left" colspan="1" rowspan="1">Event</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left" colspan="1" rowspan="1">t</td>
            <td align="left" colspan="1" rowspan="1">ASBR1's IBGP session with RR fails. ASBR1 
      			   retains RR's routes according to the rules
      			   of GR <xref target="RFC4724" format="default" sectionFormat="of" derivedContent="RFC4724"/>.</td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">t+1</td>
            <td align="left" colspan="1" rowspan="1">GR Restart Time expires. ASBR1 transitions
      			   RR's routes to long-lived stale routes by attaching
      			   the LLGR_STALE community and depreferencing
      			   them. However, since it has no backup
      			   routes, it continues to make use of them. It
      			   withdraws them from EXT.</td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">t+1+3600</td>
            <td align="left" colspan="1" rowspan="1">LLST expires. ASBR1 removes RR's stale 
      	                   routes from its own RIB.</td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="IANA" numbered="true" toc="include" removeInRFC="false" pn="section-8">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <t indent="0" pn="section-8-1">
This document defines a BGP capability called the "Long-Lived Graceful Restart
Capability". IANA has assigned a value of 71 from the "Capability Codes"
registry. 
      </t>
      <t indent="0" pn="section-8-2">
	This document introduces two BGP well-known communities:</t>
      <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-8-3">
        <li pn="section-8-3.1"> the first called "LLGR_STALE" for marking
	long-lived stale routes, and</li>
        <li pn="section-8-3.2">the second called "NO_LLGR" for 
	marking routes that should not be retained if stale.</li>
      </ul>
      <t indent="0" pn="section-8-4">IANA has assigned these
well-known community values 0xFFFF0006 and 0xFFFF0007, respectively, from the
"BGP Well-known Communities" registry.
</t>
      <t indent="0" pn="section-8-5">
IANA has established a registry called the "Long-Lived Graceful
Restart Flags for Address Family" registry under the 
"Border Gateway Protocol (BGP) Parameters" group. The registration 
procedures are Standards Action (see <xref target="RFC8126" format="default" sectionFormat="of" derivedContent="RFC8126"/>). The registry is initially populated as follows:
      </t>
      <table align="center" pn="table-5">
        <thead>
          <tr>
            <th align="left" colspan="1" rowspan="1">Bit Position</th>
            <th align="left" colspan="1" rowspan="1">Name</th>
            <th align="left" colspan="1" rowspan="1">Short Name</th>
            <th align="left" colspan="1" rowspan="1">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left" colspan="1" rowspan="1">0</td>
            <td align="left" colspan="1" rowspan="1">Preservation of state</td>
            <td align="left" colspan="1" rowspan="1">F</td>
            <td align="left" colspan="1" rowspan="1">RFC 9494</td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">1-7</td>
            <td align="left" colspan="1" rowspan="1">Unassigned</td>
            <td align="left" colspan="1" rowspan="1"/>
            <td align="left" colspan="1" rowspan="1"/>
          </tr>
        </tbody>
      </table>
    </section>
  </middle>
  <back>
    <references pn="section-9">
      <name slugifiedName="name-references">References</name>
      <references pn="section-9.1">
        <name slugifiedName="name-normative-references">Normative References</name>
        <reference anchor="RFC1997" target="https://www.rfc-editor.org/info/rfc1997" quoteTitle="true" derivedAnchor="RFC1997">
          <front>
            <title>BGP Communities Attribute</title>
            <author fullname="R. Chandra" initials="R." surname="Chandra"/>
            <author fullname="P. Traina" initials="P." surname="Traina"/>
            <author fullname="T. Li" initials="T." surname="Li"/>
            <date month="August" year="1996"/>
            <abstract>
              <t indent="0">This document describes an extension to BGP which may be used to pass additional information to both neighboring and remote BGP peers. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="1997"/>
          <seriesInfo name="DOI" value="10.17487/RFC1997"/>
        </reference>
        <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 fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <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 fullname="Y. Rekhter" initials="Y." role="editor" surname="Rekhter"/>
            <author fullname="T. Li" initials="T." role="editor" surname="Li"/>
            <author fullname="S. Hares" initials="S." role="editor" surname="Hares"/>
            <date month="January" year="2006"/>
            <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="RFC4724" target="https://www.rfc-editor.org/info/rfc4724" quoteTitle="true" derivedAnchor="RFC4724">
          <front>
            <title>Graceful Restart Mechanism for BGP</title>
            <author fullname="S. Sangli" initials="S." surname="Sangli"/>
            <author fullname="E. Chen" initials="E." surname="Chen"/>
            <author fullname="R. Fernando" initials="R." surname="Fernando"/>
            <author fullname="J. Scudder" initials="J." surname="Scudder"/>
            <author fullname="Y. Rekhter" initials="Y." surname="Rekhter"/>
            <date month="January" year="2007"/>
            <abstract>
              <t indent="0">This document describes a mechanism for BGP that would help minimize the negative effects on routing caused by BGP restart. An End-of-RIB marker is specified and can be used to convey routing convergence information. A new BGP capability, termed "Graceful Restart Capability", is defined that would allow a BGP speaker to express its ability to preserve forwarding state during BGP restart. Finally, procedures are outlined for temporarily retaining routing information across a TCP session termination/re-establishment.</t>
              <t indent="0">The mechanisms described in this document are applicable to all routers, both those with the ability to preserve forwarding state during BGP restart and those without (although the latter need to implement only a subset of the mechanisms described in this document). [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4724"/>
          <seriesInfo name="DOI" value="10.17487/RFC4724"/>
        </reference>
        <reference anchor="RFC4760" target="https://www.rfc-editor.org/info/rfc4760" quoteTitle="true" derivedAnchor="RFC4760">
          <front>
            <title>Multiprotocol Extensions for BGP-4</title>
            <author fullname="T. Bates" initials="T." surname="Bates"/>
            <author fullname="R. Chandra" initials="R." surname="Chandra"/>
            <author fullname="D. Katz" initials="D." surname="Katz"/>
            <author fullname="Y. Rekhter" initials="Y." surname="Rekhter"/>
            <date month="January" year="2007"/>
            <abstract>
              <t indent="0">This document defines extensions to BGP-4 to enable it to carry routing information for multiple Network Layer protocols (e.g., IPv6, IPX, L3VPN, etc.). The extensions are backward compatible - a router that supports the extensions can interoperate with a router that doesn't support the extensions. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4760"/>
          <seriesInfo name="DOI" value="10.17487/RFC4760"/>
        </reference>
        <reference anchor="RFC5492" target="https://www.rfc-editor.org/info/rfc5492" quoteTitle="true" derivedAnchor="RFC5492">
          <front>
            <title>Capabilities Advertisement with BGP-4</title>
            <author fullname="J. Scudder" initials="J." surname="Scudder"/>
            <author fullname="R. Chandra" initials="R." surname="Chandra"/>
            <date month="February" year="2009"/>
            <abstract>
              <t indent="0">This document defines an Optional Parameter, called Capabilities, that is expected to facilitate the introduction of new capabilities in the Border Gateway Protocol (BGP) by providing graceful capability advertisement without requiring that BGP peering be terminated.</t>
              <t indent="0">This document obsoletes RFC 3392. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5492"/>
          <seriesInfo name="DOI" value="10.17487/RFC5492"/>
        </reference>
        <reference anchor="RFC6368" target="https://www.rfc-editor.org/info/rfc6368" quoteTitle="true" derivedAnchor="RFC6368">
          <front>
            <title>Internal BGP as the Provider/Customer Edge Protocol for BGP/MPLS IP Virtual Private Networks (VPNs)</title>
            <author fullname="P. Marques" initials="P." surname="Marques"/>
            <author fullname="R. Raszuk" initials="R." surname="Raszuk"/>
            <author fullname="K. Patel" initials="K." surname="Patel"/>
            <author fullname="K. Kumaki" initials="K." surname="Kumaki"/>
            <author fullname="T. Yamagata" initials="T." surname="Yamagata"/>
            <date month="September" year="2011"/>
            <abstract>
              <t indent="0">This document defines protocol extensions and procedures for BGP Provider/Customer Edge router iteration in BGP/MPLS IP VPNs. These extensions and procedures have the objective of making the usage of the BGP/MPLS IP VPN transparent to the customer network, as far as routing information is concerned. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6368"/>
          <seriesInfo name="DOI" value="10.17487/RFC6368"/>
        </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 fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <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>
        <reference anchor="RFC8538" target="https://www.rfc-editor.org/info/rfc8538" quoteTitle="true" derivedAnchor="RFC8538">
          <front>
            <title>Notification Message Support for BGP Graceful Restart</title>
            <author fullname="K. Patel" initials="K." surname="Patel"/>
            <author fullname="R. Fernando" initials="R." surname="Fernando"/>
            <author fullname="J. Scudder" initials="J." surname="Scudder"/>
            <author fullname="J. Haas" initials="J." surname="Haas"/>
            <date month="March" year="2019"/>
            <abstract>
              <t indent="0">The BGP Graceful Restart mechanism defined in RFC 4724 limits the usage of BGP Graceful Restart to BGP messages other than BGP NOTIFICATION messages. This document updates RFC 4724 by defining an extension that permits the Graceful Restart procedures to be performed when the BGP speaker receives a BGP NOTIFICATION message or the Hold Time expires. This document also defines a new subcode for BGP Cease NOTIFICATION messages; this new subcode requests a full session restart instead of a Graceful Restart.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8538"/>
          <seriesInfo name="DOI" value="10.17487/RFC8538"/>
        </reference>
      </references>
      <references pn="section-9.2">
        <name slugifiedName="name-informative-references">Informative References</name>
        <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 fullname="E. Rosen" initials="E." surname="Rosen"/>
            <author fullname="Y. Rekhter" initials="Y." surname="Rekhter"/>
            <date month="February" year="2006"/>
            <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="RFC4761" target="https://www.rfc-editor.org/info/rfc4761" quoteTitle="true" derivedAnchor="RFC4761">
          <front>
            <title>Virtual Private LAN Service (VPLS) Using BGP for Auto-Discovery and Signaling</title>
            <author fullname="K. Kompella" initials="K." role="editor" surname="Kompella"/>
            <author fullname="Y. Rekhter" initials="Y." role="editor" surname="Rekhter"/>
            <date month="January" year="2007"/>
            <abstract>
              <t indent="0">Virtual Private LAN Service (VPLS), also known as Transparent LAN Service and Virtual Private Switched Network service, is a useful Service Provider offering. The service offers a Layer 2 Virtual Private Network (VPN); however, in the case of VPLS, the customers in the VPN are connected by a multipoint Ethernet LAN, in contrast to the usual Layer 2 VPNs, which are point-to-point in nature.</t>
              <t indent="0">This document describes the functions required to offer VPLS, a mechanism for signaling a VPLS, and rules for forwarding VPLS frames across a packet switched network. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4761"/>
          <seriesInfo name="DOI" value="10.17487/RFC4761"/>
        </reference>
        <reference anchor="RFC4781" target="https://www.rfc-editor.org/info/rfc4781" quoteTitle="true" derivedAnchor="RFC4781">
          <front>
            <title>Graceful Restart Mechanism for BGP with MPLS</title>
            <author fullname="Y. Rekhter" initials="Y." surname="Rekhter"/>
            <author fullname="R. Aggarwal" initials="R." surname="Aggarwal"/>
            <date month="January" year="2007"/>
            <abstract>
              <t indent="0">A mechanism for BGP that helps minimize the negative effects on routing caused by BGP restart has already been developed and is described in a separate document ("Graceful Restart Mechanism for BGP"). This document extends this mechanism to minimize the negative effects on MPLS forwarding caused by the Label Switching Router's (LSR's) control plane restart, and specifically by the restart of its BGP component when BGP is used to carry MPLS labels and the LSR is capable of preserving the MPLS forwarding state across the restart.</t>
              <t indent="0">The mechanism described in this document is agnostic with respect to the types of the addresses carried in the BGP Network Layer Reachability Information (NLRI) field. As such, it works in conjunction with any of the address families that could be carried in BGP (e.g., IPv4, IPv6, etc.). [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4781"/>
          <seriesInfo name="DOI" value="10.17487/RFC4781"/>
        </reference>
        <reference anchor="RFC5880" target="https://www.rfc-editor.org/info/rfc5880" quoteTitle="true" derivedAnchor="RFC5880">
          <front>
            <title>Bidirectional Forwarding Detection (BFD)</title>
            <author fullname="D. Katz" initials="D." surname="Katz"/>
            <author fullname="D. Ward" initials="D." surname="Ward"/>
            <date month="June" year="2010"/>
            <abstract>
              <t indent="0">This document describes a protocol intended to detect faults in the bidirectional path between two forwarding engines, including interfaces, data link(s), and to the extent possible the forwarding engines themselves, with potentially very low latency. It operates independently of media, data protocols, and routing protocols. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5880"/>
          <seriesInfo name="DOI" value="10.17487/RFC5880"/>
        </reference>
        <reference anchor="RFC8126" target="https://www.rfc-editor.org/info/rfc8126" quoteTitle="true" derivedAnchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t indent="0">Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t indent="0">To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t indent="0">This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
        <reference anchor="RFC8955" target="https://www.rfc-editor.org/info/rfc8955" quoteTitle="true" derivedAnchor="RFC8955">
          <front>
            <title>Dissemination of Flow Specification Rules</title>
            <author fullname="C. Loibl" initials="C." surname="Loibl"/>
            <author fullname="S. Hares" initials="S." surname="Hares"/>
            <author fullname="R. Raszuk" initials="R." surname="Raszuk"/>
            <author fullname="D. McPherson" initials="D." surname="McPherson"/>
            <author fullname="M. Bacher" initials="M." surname="Bacher"/>
            <date month="December" year="2020"/>
            <abstract>
              <t indent="0">This document defines a Border Gateway Protocol Network Layer Reachability Information (BGP NLRI) encoding format that can be used to distribute (intra-domain and inter-domain) traffic Flow Specifications for IPv4 unicast and IPv4 BGP/MPLS VPN services. This allows the routing system to propagate information regarding more specific components of the traffic aggregate defined by an IP destination prefix.</t>
              <t indent="0">It also specifies BGP Extended Community encoding formats, which can be used to propagate Traffic Filtering Actions along with the Flow Specification NLRI. Those Traffic Filtering Actions encode actions a routing system can take if the packet matches the Flow Specification.</t>
              <t indent="0">This document obsoletes both RFC 5575 and RFC 7674.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8955"/>
          <seriesInfo name="DOI" value="10.17487/RFC8955"/>
        </reference>
      </references>
    </references>
    <section anchor="Acknowledgements" numbered="false" toc="include" removeInRFC="false" pn="section-appendix.a">
      <name slugifiedName="name-acknowledgements">Acknowledgements</name>
      <t indent="0" pn="section-appendix.a-1">
We would like to thank <contact fullname="Nabil Bitar"/>, <contact fullname="Martin Djernaes"/>, <contact fullname="Roberto Fragassi"/>, <contact fullname="Jeffrey Haas"/>, <contact fullname="Jakob Heitz"/>, <contact fullname="Daniam Henriques"/>, <contact fullname="Nicolai Leymann"/>, <contact fullname="Mike McBride"/>, <contact fullname="Paul Mattes"/>, <contact fullname="John Medamana"/>, <contact fullname="Pranav Mehta"/>, <contact fullname="Han Nguyen"/>, <contact fullname="Saikat Ray"/>, <contact fullname="Valery Smyslov"/>, and <contact fullname="Bo Wu"/> for their
valuable input and contributions to the discussion and solution.
      </t>
    </section>
    <section numbered="false" toc="include" removeInRFC="false" pn="section-appendix.b">
      <name slugifiedName="name-contributors">Contributors</name>
      <contact fullname="Clarence Filsfils">
        <organization showOnFrontPage="true">Cisco Systems</organization>
        <address>
          <postal>
            <street/>
            <city>Brussels</city>
            <region/>
            <code>1150</code>
            <country>Belgium</country>
          </postal>
          <email>cf@cisco.com</email>
        </address>
      </contact>
      <contact fullname="Pradosh Mohapatra">
        <organization showOnFrontPage="true">Sproute Networks</organization>
        <address>
          <email>mpradosh@yahoo.com</email>
        </address>
      </contact>
      <contact fullname="Yakov Rekhter">
        <organization showOnFrontPage="true"/>
        <address>
          <email/>
        </address>
      </contact>
      <contact fullname="Eric Rosen">
        <organization showOnFrontPage="true"/>
        <address>
          <email>erosen52@gmail.com</email>
        </address>
      </contact>
      <contact fullname="Rob Shakir">
        <organization showOnFrontPage="true">Google, Inc.</organization>
        <address>
          <postal>
            <street>1600 Amphitheatre Parkway</street>
            <city>Mountain View</city>
            <region>CA</region>
            <code>94043</code>
            <country>United States of America</country>
          </postal>
          <email>robjs@google.com</email>
        </address>
      </contact>
      <contact fullname="Adam Simpson">
        <organization showOnFrontPage="true">Nokia</organization>
        <address>
          <email>adam.1.simpson@nokia.com</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="James Uttaro" initials="J." surname="Uttaro">
        <organization showOnFrontPage="true">Independent Contributor</organization>
        <address>
          <email>juttaro@ieee.org</email>
        </address>
      </author>
      <author fullname="Enke Chen" initials="E." surname="Chen">
        <organization showOnFrontPage="true">Palo Alto Networks</organization>
        <address>
          <email>enchen@paloaltonetworks.com</email>
        </address>
      </author>
      <author fullname="Bruno Decraene" initials="B." surname="Decraene">
        <organization showOnFrontPage="true">Orange</organization>
        <address>
          <email>bruno.decraene@orange.com</email>
        </address>
      </author>
      <author fullname="John G. Scudder" initials="J." surname="Scudder">
        <organization showOnFrontPage="true">Juniper Networks</organization>
        <address>
          <email>jgs@juniper.net</email>
        </address>
      </author>
    </section>
  </back>
</rfc>
