<?xml version="1.0" encoding="US-ASCII"?>
<?xml-model href="rfc7991bis.rnc"?> 

<!DOCTYPE rfc>
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>

<rfc category="std" docName="draft-younsi-grow-local-path-id-00"
     ipr="trust200902" updates="9069" 
     xmlns:xi="http://www.w3.org/2001/XInclude"
     submissionType="IETF"
     version="3">
  <front> <!-- updates bmp tlv? -->
    <title abbrev="local-path-id">BMP Local Path-ID</title>

    <author fullname="Maxence Younsi" initials="M." surname="Younsi">
      <organization>INSA-Lyon</organization>

      <address>
        <postal>
          <city>Villeurbanne</city>
          <country>France</country>
        </postal>

        <phone/>

        <email>maxence.younsi@insa-lyon.fr</email>
      </address>
    </author>

    <author fullname="Pierre Francois" initials="P." surname="Francois">
      <organization>INSA-Lyon</organization>

      <address>
        <postal>
          <city>Villeurbanne</city>
          <country>France</country>
        </postal>

        <phone/>

        <email>pierre.francois@insa-lyon.fr</email>
      </address>
    </author>

    <author fullname="Paolo Lucente" initials="P." surname="Lucente">
      <organization>NTT</organization>

      <address>
        <postal>
          <street>Siriusdreef 70-72</street>

          <city>Hoofddorp, WT 2132</city>

          <region/>

          <code/>

          <country>NL</country>
        </postal>

        <phone/>

        <email>paolo@ntt.net</email>

        <uri/>
      </address>
    </author>

    <date day="23" month="October" year="2023"/>

    <workgroup></workgroup>

    <abstract>

      <t> Intelligence is required to track BGP paths throughout the various
    RIBs and VRFs of a routing platform, due to potential attribute modifications
    and the use of BGP multipath.  This document introduces the option to identify
    a path within a router in order to ease correlation in monitoring. A BMPv4 TLV
    is defined in order to communicate this locally significant identifier in
    monitoring messages.</t>

    </abstract>

    <note title="Requirements Language">
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
      NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
      "MAY", and "OPTIONAL" in this document are to be interpreted as
      described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> 
      when, and only when, they appear in all capitals, as shown here.</t>
    </note>
  </front>

  <middle>
    <section title="Introduction" anchor="introduction">

      <t> When using VRFs and/or BGP Multipath, multiple paths to the same
        destination may be shared among various routing information bases.  From a
        collection perspective, tracking the identity of a path thus requires some form
        of modeling, which is subject to inaccuracy.  This aspect is exacerbated as
        path attributes may be modified in the process.  This is especially problematic
        when a PE using BGP multipath in VPN instances exports multiple paths for the
        same destination into the default VRF, which were learned from different peers.
        </t>

      <t> While BGP ADD-PATH provides a way to identify paths in BGP multi-path
        scenarios, the scope of ADD-PATH path-id is local to a single BGP peering
        session, and thus cannot be used to distinguish paths received over multiple
        sessions.  <!--(ie. to a peer for routing purposes and to a route-collector for
        monitoring purposes). --> </t>

      <t> This document introduces a way to identify paths globally within a
        router, allowing operators to not resort to modeling when monitoring BGP paths
        on a router.  In <xref target="local_path_id"/>, we introduce the concept of
        Local Path ID, which is an identifier of a path for a given NLRI, which is
        preserved through the import/export operations performed onto them.  In <xref
        target="bmp_advertising_local_path_id"/>, we introduce a BMPv4 TLV allowing to
        communicate the value of a Local Path ID on a BMP session.  </t>

    </section>

    <section title="Local Path ID" anchor="local_path_id">

      <t> In this section, we define an identifier called Local Path ID, which 
        allows to uniquely identify a path for a given NLRI on a router.
        </t>

      <t> According to this specification, a path to be advertised by BMP is
        provided with an associated Local Path ID.  The Local Path ID is an opaque
        numerical value with a few properties guaranteeing its utility. The exact
        approach to generate a Local Path ID is however left for the implementation.
        </t>

      <section title="Local Path ID Properties">
        <t>
          The Local Path ID of each path MUST be unique for a given NLRI.
          We scope the identifier space to each NLRI to keep it a small value.  Indeed,
          most internet routers have at most a few tens of paths for a given NLRI.  
        </t>

        <t>
          The Local Path ID only has a meaning locally on the router generating it.
        </t>

        <t>
          Once generated, the Local Path ID MUST be preserved between VRFs, and Routing Information Bases.
          It, however, MUST NOT be exchanged or synchronized between routers.
        </t>

        <t>
          The value of 0 for a Local Path ID is reserved.
        </t>
      </section>

      <section title="Design Recommendation">

        <t> In this specification, we recommend making the Local Path ID made
        of two concatenated parts: &lt; process_id | path_discriminator &gt;.  </t>
        
        <t anchor="process_id"> The process_id is the identifier of the process
        which produced, originated, or received a path.  The process_id allows
        differentiation between path IDs generated in BGP and in other processes like
        an IGP.  Redistributed IGP paths will then have a different Local Path ID no
        matter if BGP or another IGP has chosen the same path_discriminator value.
        Using the process_id avoids requiring interprocess synchronization of
        path_discriminators or the use of a path_discriminator managing process.  </t>

        <t anchor="path_discriminator"> The path_discriminator allows
        differentiation between different paths for a NLRI, coming from the same
        process (with the same process_id).  This process originating the path is in
        charge of guaranteeing the uniqueness of the path_discriminator it produces for
        each path of its NLRIs.  </t>

        <t> To ensure traceability in monitoring, processes importing a path (like BGP
        redistribution or VRF imports) SHOULD keep the same Local Path ID if provided by the
        source.  </t> 

      </section>

    </section>

    <section title="Advertising the Local Path ID in BMP" anchor="bmp_advertising_local_path_id">

      <t> The Local Path ID is included in BMPv4 Route Monitoring messages <xref
        target="I-D.ietf-grow-bmp-tlv"/> as an optional TLV, called "Local Path ID
        TLV".</t>

      <figure anchor="BMP-indexed-TLV-header" align="center">
        <artwork align="center">
          <![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        Type (TBD)             |       Length (2 octets)       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        Index (2 octets)       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                         local_path_id                         ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
          ]]>
        </artwork>
      </figure>

      <dl>
        <dt>Type</dt>
        <dd>set to TBD</dd>

        <dt anchor="tlv_length">Length</dt>
        <dd>the length of the Local Path ID, in bytes (TBD static or dynamic)</dd>

        <dt>Index</dt>

        <dd>index of the NLRI in the BGP Update PDU as described by <xref
        target="I-D.ietf-grow-bmp-tlv"/>. The Index MUST refer to a single NLRI (no
        Group TLV).</dd>

        <dt>local_path_id</dt>

        <dd>the Local Path ID defined in <xref target="local_path_id"/>, on
        <xref target="tlv_length">Length</xref> bytes</dd>

      </dl>

      <t> An implementation enabled for Local Path ID usage MUST notify if a Local
        Path ID is unavailable (for any reason) by setting the value field to the
        reserved value of 0.  This means such implementations SHOULD always include a
        <xref target="bmp_advertising_local_path_id">Local Path ID TLV</xref>.  </t>

    </section>
  </middle>

  <back>
    <references title="Normative References">
    <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
    <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
    <xi:include href="https://datatracker.ietf.org/doc/bibxml3/draft-ietf-grow-bmp-tlv-12.xml"/>
    </references>

<!--
    <references title="Informative References">


    </references>-->

  </back>
</rfc>
