<?xml version="1.0" encoding="US-ASCII"?>
<?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"?>

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC2474 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2474.xml">
<!ENTITY RFC3209 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3209.xml">
<!ENTITY RFC4271 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4271.xml">
<!ENTITY RFC4360 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4360.xml">
<!ENTITY RFC4364 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4364.xml">
<!ENTITY RFC4456 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4456.xml">
<!ENTITY RFC4684 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4684.xml">
<!ENTITY RFC7432 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7432.xml">
<!ENTITY RFC7606 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7606.xml">
<!ENTITY RFC7752 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7752.xml">
<!ENTITY RFC8126 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8126.xml">
<!ENTITY RFC8174 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC8299 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8299.xml">
<!ENTITY RFC8309 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8309.xml">
<!ENTITY RFC8402 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8402.xml">
<!ENTITY RFC8453 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8453.xml">
<!ENTITY RFC9012 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.9012.xml">
]>

<rfc category="std" docName="draft-drake-bess-enhanced-vpn-07" ipr="trust200902">
  <front>
    <title abbrev="BGP-LS Filters">BGP-LS Filters : A Framework for Network Slicing and Enhanced VPNs</title>

    <author fullname="John Drake" initials="J." surname="Drake">
      <organization>Juniper Networks</organization>
      <address>
        <email>jdrake@juniper.net</email>
      </address>
    </author>

    <author fullname="Adrian Farrel" initials="A." surname="Farrel">
      <organization>Old Dog Consulting</organization>
      <address>
        <email>adrian@olddog.co.uk</email>
      </address>
    </author>

    <author fullname="Luay Jalil" initials="L." surname="Jalil">
      <organization>Verizon</organization>
      <address>
        <email>luay.jalil@verizon.com</email>
      </address>
    </author>

    <author fullname="Avinash Lingala" initials="A." surname="Lingala">
      <organization>AT&amp;T</organization>
      <address>
        <email>ar977m@att.com</email>
      </address>
    </author>

    <date month="" year="2021"/>

    <area>Routing Area</area>

    <workgroup>BESS Working Group</workgroup>

    <keyword>BGP-LS</keyword>
    <keyword>Network Slicing</keyword>
    <keyword>VPN+</keyword>
    <keyword>Enhanced VPN</keyword>
    <keyword>Traffic Engineering</keyword>

    <abstract>
      <t>Future networks that support advanced services, such as those enabled by 5G mobile
         networks, envision a set of overlay networks each with different performance and
         scaling properties.  These overlays are known as network slices and are realized
         over a common underlay network.  In the context of IETF technologies, they are known
         as IETF network slices.</t>

      <t>In order to support IETF network slicing, as well as to offer enhanced VPN services in
         general, it is necessary to define a mechanism by which specific resources (links
         and/or nodes) of an underlay network can be used by a specific network slice, VPN,
         or set of VPNs.  This document sets out such a mechanism for use in Segment Routing
         networks.</t>
    </abstract>

  </front>

  <middle>
    <section anchor="intro" title="Introduction">
      <t>Network slicing is an approach to network operations that builds on
         the concept of network abstraction to provide programmability,
         flexibility, and modularity.  Driven largely by needs surfacing from
         5G, the concept of network slicing has gained traction, for example in
         <xref target="TS23501" /> and <xref target="TS28530" />.  Network
         slicing requires the underlying network to support partitioning the
         network resources to provide the client with dedicated (private)
         networking, computing, and storage resources drawn from a shared pool.
         The network slices may be seen as (and operated as) virtual networks.  In the
         context of IETF tehnologies network slices are known as "IETF network slices"
         <xref target="I-D.ietf-teas-ietf-network-slices"/>, however, in this
         document we simply use the term "network slice" since we are working entirely
         within this context.</t>

      <t>Advanced services drive a need to create virtual networks with enhanced
         characteristics.  The tenant of such a virtual network can require a
         degree of isolation and performance that previously could only be
         satisfied by dedicated networks.  Additionally, the tenant may ask
         for some level of control to their virtual networks, e.g., to
         customize the service forwarding paths in the underlying network.</t>

      <t>The concept of "IETF network slices" is introduced in
         <xref target="I-D.ietf-teas-ietf-network-slices" />.
         <xref target="I-D.ietf-teas-enhanced-vpn" /> builds on this concept and introduces
         "enhanced VPNs".</t>

      <t>In order to support network slicing, as well as to offer enhanced VPN services in
         general, it is necessary to define a mechanism by which specific resources (links
         and/or nodes) of an underlay network can be used by a specific network slice, a single
         VPN, or a well-defined set of VPNs.  This document sets out such a mechanism for use in Segment Routing
         networks <xref target="RFC8402" /> and builds on the ideas introduced in
         <xref target="I-D.ietf-idr-segment-routing-te-policy" />.  I.e., it generalizes
         that work to support multipoint-to-multipoint (MP2MP), point-to-multipoint (P2MP),
         and bidirectional point-to-point (P2P) topologies; it integrates BGP-based VPN
         support (<xref target="RFC4364" />, <xref target="RFC7432" />); it supports
         Differentiated Services Code Points (DSCP) as well a Color-based forwarding, and it
         uses BGP Link-State (BGP-LS) <xref target="RFC7752" /> to distribute topology
         information.</t>


      <t>This document supports the concept of a network slice network model interface that provides the
         funciton needed by the network slice service model interface defined in <xref target="I-D.ietf-teas-ietf-network-slices" />.</t>

    </section>

    <section 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>
    </section>

    <section anchor="overview" title="Overview of Approach">
      <t>The approach described in this document is based on a network controller that uses the
         {source, destination} traffic matrix and the performance and scaling properties of each
         network slice, VPN, or set of VPNs in conjunction with the topology of the underlay
         network to assign each network slice, VPN, or set of VPNs a set of underlay links and
         nodes that it can use.  That is, each network slice, VPN, or set of VPNs gets a subset,
         either dedicated or shared, of the resources in the underlay network.  Note that, in this
         document, we recognize that scalability of protocol mechanisms to partition network resources
         is very important; this gives rise to the concept of "a set of VPNs" so that the slice of
         network resources achieved using the protocol mechanisms defined in this document can be
         shared by a well-defined set of VPNs as configured by the network operator.</t>

      <t>It should be noted that resources can be assigned at any of the following granularities:
         <list style="symbols">
           <t>All provider edge (PE) routers in a given VPN.</t>
           <t>A set of PEs in a given VPN.</t>
           <t>An individual PE in a given VPN.</t>
         </list></t>

      <t>There are two phases to this approach:
         <list style="none">
           <t>Step-1: Discovery and data gathering.  Information is gathered from the underlay network
              about the links, nodes, and network resources available for use by the VPN or network slice.</t>
           <t>Step-2: Configuration and provisioning.  The underlay resources are configured for use for the
              VPN or network slice.</t>
         </list></t>

      <t>Once the network controller has determined the resource assignments, it distributes this information
         to the PEs that participate in each VPN using the usual VPN information dissemination tools, e.g.,
         route targets (RT) <xref target="RFC4360" />, route reflectors (RR) <xref target="RFC4456" />, and
         RT constraints <xref target="RFC4684" />.</t>

      <t>This information is distributed to the PEs by giving them a customized and limited view of the underlay
         network on the basis of a network slice, a VPN, or a set of VPNs.  Each PE will have a complete view of
         the underlay network and this customized and limited view acts as filter on the underlay network telling
         the PE which underlay network resources it can use to direct the traffic of a given network slice, VPN,
         or set of VPNs to best deliver end-to-end services.</t>

      <t>The resource allocation information is encoded using BGP-LS.  This approach is chosen for the following reasons:
         <list style="symbols">
           <t>It is BGP-based so it integrates easily with the existing BGP-based VPN infrastructure
              (<xref target="RFC4364" />, <xref target="RFC4684" />).</t>
           <t>It supports Segment Routing which is necessary to enforce the PEs&apos; usage of the resources
              allocated to the VPN or set of VPNs.</t>
           <t>It supports Segment Routing which is necessary to enforce the PEs&apos; usage of the resources
              allocated to the network slice, VPN, or set of VPNs.  The use of RSVP-TE (<xref target="RFC3209"/>)
              rather than Segment Routing is at the discretion of the network operator as BGP-LS supports both and
              either confines a packet flow to a specific path.</t>
           <t>It supports inter-AS connectivity which is a perquisite for supporting the existing BGP-based VPN infrastructure.</t>
           <t>It is canonical, in that it can be used to advertise the resources of underlay networks that use either IS-IS or OSPF.</t>
         </list></t>

      <t>It should be noted that this mechanism also follows the scalability model of the existing BGP-based VPN infrastructure,
         which is that the per-VPN information is restricted to only those PE routers that are supporting that VPN and that the
         provider (P) routers have no per-VPN state.</t>

      <t>The PEs in non-enhanced VPNs do not receive this resource allocation information and would not confine their
         usage of the underlay network resources.  In order to ensure that the underlay network resources allocated to
         enhanced VPNs are not inadvertently used by the PEs in non-enhanced VPNs, the network controller SHOULD ensure
         that the IGP and traffic engineering (TE) metrics for these resources is higher than the metrics for the underlay
         network resources allocated to non-enhanced VPNs.  In certain situations, detailed in <xref target="details" />,
         PEs in enhanced VPNs will use the underlay networks resources allocated to non-enhanced VPNs.</t>

      <t>Additional to the programming of the PEs and its computation and assignment of resources for use by network slices,
         VPNs, or sets of VPNs, the network controller also instructs the P routers to make the actual allocation of these
         resources by assigning link bandwidth to a specific DSCP or adjacency segment identifier (SID)
         <xref target="I-D.ietf-spring-sr-for-enhanced-vpn" />.</t>
    </section>

    <section anchor="details" title="Detailed Protocol Operation">

      <t>We define a BGP-LS Filter to be a BGP-LS encoded description of a subset of the links and nodes in the underlay network.
         A BGP-LS Filter defines all or part of the topology for a network slice or a set of one or more VPNs.  The topology defined by a BGP-LS
         Filter needs to provide connectivity between the PEs in a given network slice, VPN or set of VPNs.  I.e., it connects the
         PEs in these VPNs and is used by them to send packets to each other.  A given filter is tagged with the route targets of
         the VPNs whose PEs are to import the filter.  A BGP-LS Filter is pushed southbound to those PEs by the network controller
         and SHOULD provide multiple paths between a given ingress/egress PE pair.</t>

      <t>Note that there will be multiple BGP-LS Filters in a given network deployment and that a given underlay network link or
         node may appear in more than one of them.  In order to provide disambiguation, the address family indicator (AFI) 16388 (BGP-LS)
         and the subsequent address family identifier (SAFI) 72 (BGP-LS-VPN) are used in BGP-LS UPDATE messages and the network controller
         SHOULD allocate a different route distinguisher (RD) to each BGP-LS Filter.  As for standard VPNs, an implementation option
         ("RD Auto") may be offered to assist in configuring unique RDs.</t>

      <t>Within a given VPN, when an ingress PE needs to send a packet to an egress PE it selects a path to that egress PE
         from the topology defined by the BGP-LS Filters it has imported for that VPN.  It then either adds a segment routing
         label stack specifying that path to the packet or places the packet in an RSVP-TE LSP which uses that path.  The
         ingress PE may use any path computation it wishes if  that path computation confines the path to the topology
         defined by the relevant set of BGP-LS Filters.</t>

      <t>If Segment Routing is used and a node SID or a prefix SID is placed in the segment routing label stack, then when that segment
         is active the P routers will forward the packet using the underlay network resources allocated to non-enhanced
         VPNs.  Similarly, if the RSVP-TE label switched path (LSP) was established using a loose source route to the
         subject node, the path to that node was selected using the underlay network resources allocated to non-enhanced VPNs.</t>

      <t>Because the BGP-LS UPDATE messages specifying a BGP-LS Filter may arrive in any order and the BGP-LS UPDATE messages
         of multiple BGP-LS Filters may be interleaved, there is a need for a new attribute that is attached to a BGP-LS
         UPDATE.  This attribute contains a Filter ID, a Filter version number, a Filter type (MP2MP, P2MP, or P2P), the total
         number of fragments in the filter, and the specific fragment number of the piece in hand.  I.e., it is assumed that
         a PE may import more than one BGP-LS Filter, that a given BGP-LS Filter may change over time, and that a given BGP-LS
         Filter may span multiple BGP-LS UPDATE messages.  The Filter ID needs to be unique across the set of VPNs into which
         the BGP-LS Filter is to be imported.</t>

      <t>A BGP-LS Filter that is created for a set of VPNs will contain a set of network resources sufficient to connect between
         the PEs in each discrete VPN in the set, and each of the BGP-LS UPDATE messages for the filter MUST be tagged with the RT for each
         VPN in the set.</t>

      <t>If a PE imports more than one BGP-LS Filter it MAY use the union of the links and nodes specified in each filter when
         selecting a path.</t>
<!--
         A PE SHOULD give precedence to BGP-LS Filters of type P2MP and P2P when selecting a path.  Route
         targets specific to a given VPN/PE pair are needed for BGP-LS Filters of type P2MP and P2P.
-->

      <t>A given BGP-LS Filter may change in response to updates to the PE membership in a VPN to which the BGP-LS Filter applies
         or to updates to the underlay network.  This implies that the network controller needs to be connected to the route
         reflectors associated with the VPNs for which it is providing BGP-LS maps.  When this occurs, the network controller
         SHOULD push a new version of the affected BGP-LS Filters.  That is, it increments the version number of each BGP-LS
         Filter.  Note that a network controller does not need to compute new BGP-LS Filters in response to an individual link
         or node failure in the underlay network if connectivity still exists among the PEs in the network slice, VPN or set or
         VPNs with the existing BGP-LS Filters.</t>

      <t>A BGP-LS Filter cannot be used by a PE until it is completely assembled.  If the BGP-LS Filter that is being assembled is
         a newer version of a BGP-LS Filter that the PE is currently using, the PE SHOULD continue to use its current version of
         the BGP-LS Filter until the newer version is completely assembled.</t>

      <t>When selecting a path using one or more BGP-LS Filters, an ingress PE can use a link or node only if it is active in
         the underlay network.  If this precludes connectivity to the egress PE it may use the underlay network resources
         not allocated to enhanced VPNs to reach the egress PE.</t>

      <t>Additionally, when there is a newly activated PE it will not be present in any of the BGP-LS Filters used by the other
         PEs.  Until a new BGP-LS Filter that contains that PE has been distributed, other PEs will use the underlay network
         resources not allocated to enhanced VPNs to reach the newly activated PE, and the newly activate PE will use these
         resources to reach other PEs.</t>

      <section anchor="lsmap" title="The BGP-LS Filter Attribute">

         <t><xref target="RFC4271" /> defines the BGP Path attribute.  This document introduces a new Optional Transitive
            Path attribute called the BGP-LS Filter attribute with value TBD1 to be assigned by IANA.</t>

         <t>The first BGP-LS Filter attribute MUST be processed and subsequent instances MUST be ignored.</t>

         <t>The common fields of the BGP-LS Filter attribute are set as follows:
            <list style="symbols">
              <t>Optional bit is set to 1 to indicate that this is an optional attribute.</t>
              <t>The Transitive bit is set to 1 to indicate that this is a transitive attribute.</t>
              <t>The Extended Length bit is set according to the length of the BGP-LS Filter attribute as defined in <xref target="RFC4271" />.</t>
              <t>The Attribute Type Code is set to TBD1.</t>
            </list></t>

         <t>The content of the BGP-LS Filter attribute is a series of Type-Length-Value (TLV) constructs.  Each TLV may include
            sub-TLVs. All TLVs and sub-TLVs have a common format that is:
            <list style="symbols">
              <t>Type: A single octet indicating the type of the BGP-LS Filter attribute TLV.  Values are taken from the registry
                 described in <xref target="IANAfilterattribute" />.</t>
              <t>Length: A two octet field indicating the length of the data following the Length field counted in octets.</t>
              <t>Value: The contents of the TLV.</t>
            </list></t>

         <t>The formats of the TLVs defined in this document are shown in the following sections.  The presence rules and
            meanings are as follows.
            <list style="symbols">
              <t>The BGP-LS Filter attribute MUST contain a Filter TLV.</t>
              <t>The BGP-LS Filter attribute MAY contain a DSCP List TLV.</t>
              <t>The BGP-LS Filter attribute MAY contain a Color List TLV.</t>
              <t>The BGP-LS Filter attribute MAY contain a Root TLV.</t>
            </list></t>

         <section anchor="filtertlv" title="The Filter TLV">

            <t>The BGP-LS Filter attribute MUST contain exactly one Filter TLV.  Its format is shown in <xref target="filtertlvfig" />.  Note
               that a given BGP-LS Filter may span multiple UPDATE messages and the Topology, Version Number, and the Number of Fragments
               fields in the BGP-LS Filter attribute contained in each UPDATE message MUST be set to the same value or the BGP-LS Filter
               is unusable.</t>

            <figure anchor="filtertlvfig" title="The Filter TLV Format">
              <artwork>
                <![CDATA[
      +--------------------------------------------+
      |    Type = 1 (1 octet)                      |
      +--------------------------------------------+
      |    Length (2 octets)                       |
      +--------------------------------------------+
      |    Topology (1 Octet)                      |
      +--------------------------------------------+
      |    ID (4 Octets)                           |
      +--------------------------------------------+
      |    Version Number (4 Octets)               |
      +--------------------------------------------+
      |    Number of Fragments (4 Octets)          |
      +--------------------------------------------+
      |    Fragment Number (4 Octets)              |
      +--------------------------------------------+
                ]]>
              </artwork>
            </figure>

            <t>The fields are as follows:
               <list style="symbols">
                 <t>Type is set to 1 to indicate a Filter TLV.</t>
                 <t>Length is set to 17 octets.</t>
                 <t>Topology indicates the topology defined by this BGP-LS Filter.
                    <list style="numbers">
                      <t>P2P unidirectional</t>
                      <t>P2P bidirectional</t>
                      <t>P2MP</t>
                      <t>MP2MP</t>
                    </list></t>
                 <t>The ID of this BGP-LS Filter.  This ID needs to be unique within the set of VPNs into which the BGP-LS Filter is to be imported.</t>
                 <t>The Version Number of this BGP-LS Filter.  The contents of a BGP-LS Filter with a given ID may change over time.  This field
                    indicates the version of the BGP-LS Filter being advertized in this UPDATE message.</t>
                 <t>Number of Fragments indicates the number of BGP UPDATE messages defining this BGP-LS Filter.</t>
                 <t>Fragment Number indicates ordinal position of this UPDATE message within the set of UPDATE messages defining this BGP-LS Filter.
                    A BGP-LS Filter is not complete, i.e., usable, until all UPDATE messages have been received with Fragment Numbers in the range
                    1 &lt;= Fragment Number &lt;= Number of Fragments.  An UPDATE message with a Fragment Number outside this range is to be ignored.</t>
               </list></t>

         </section>

         <section anchor="dscptlv" title="The DSCP List TLV">

            <t>The DSCP List TLV MAY be included in the BGP-LS Filter attribute.  If included, a packet whose DSCP matches a DSCP in the DSCP list is
               to be forwarded using the BGP-LS Filter defined by the BGP-LS Filter attribute that contains the DSCP list.  The first DSCP List TLV MUST
               be processed and subsequent instances MUST be ignored.  The format of the DSCP List TLV is shown in <xref target="dscptlvfig" />.</t>

            <t>If a DSCP List TLV is included in a BGP-LS Filter attribute, then a packet that matches an entry in the list MAY be
               forwarded using the BGP-LS Filter defined by the BGP-LS Filter attribute, but a packet which doesn&apos;t match an
               entry in this list MUST NOT use the filter.  If both a DSCP List TLV and a Color List TLV (see <xref target="colortlv" />)
               are both included in a BGP-LS Filter attribute, packets matching an entry in either list MAY be forwarded using
               the BGP-LS Filter defined by the BGP-LS Filter attribute.  If neither list is included in a BGP-LS Filter attribute,
               then all packets for that network slice, VPN, or set of VPNs can be forwarded using the BGP-LS Filter defined by the
               containing BGP-LS Filter attribute.</t>

            <figure anchor="dscptlvfig" title="The DSCP List TLV Format">
              <artwork>
                <![CDATA[
      +--------------------------------------------+
      |    Type = 2 (1 octet)                      |
      +--------------------------------------------+
      |    Length (2 octets)                       |
      +--------------------------------------------+
      |    DSCP List (variable)                    |
      +--------------------------------------------+
                ]]>
              </artwork>
            </figure>

            <t>The fields are as follows:
               <list style="symbols">
                 <t>Type is set to 2 to indicate a DSCP List TLV.</t>
                 <t>Length indicates the length in octets of the DSCP List.</t>
                 <t>DSCP List contains a list of DSCPs, each one octet in length and encodes the DSCP per
                    <xref target="RFC2474" /> as the most significant six bits of the octet.</t>
               </list></t>

         </section>

         <section anchor="colortlv" title="The Color List TLV">

            <t>The Color List TLV MAY be included in the BGP-LS Filter attribute.  If a BGP UPDATE contains a Color extended
               community with a color (as defined by <xref target="RFC9012" />) that matches an entry in the Color List, then
               a packet whose destination is covered by one of the routes in that UPDATE is to be forwarded using the BGP-LS
               Filter defined by the BGP-LS Filter attribute that contains the Color List TLV.  The first Color List TLV MUST
               be processed and subsequent instances MUST be ignored.  The format of the Color List TLV is shown in
               <xref target="colortlvfig" />.</t>

            <t>If Color List TLV is included in a BGP-LS Filter attribute, then a packet that matches an entry in the list MAY be
               forwarded using the BGP-LS Filter defined by the BGP-LS Filter attribute, but a packet which doesn&apos;t match an
               entry in this list MUST NOT use the filter.  If both a DSCP List TLV (see <xref target="dscptlv" /> and a Color List
               TLV are both included in a BGP-LS Filter attribute, packets matching an entry in either list MAY be forwarded using
               the BGP-LS Filter defined by the BGP-LS Filter attribute.  If neither list is included in a BGP-LS Filter attribute,
               then all packets for that network slice, VPN, or set of VPNs can be forwarded using the BGP-LS Filter defined by the
               containing BGP-LS Filter attribute.</t>

            <figure anchor="colortlvfig" title="The Color List TLV Format">
              <artwork>
                <![CDATA[
      +--------------------------------------------+
      |    Type = 3 (1 octet)                      |
      +--------------------------------------------+
      |    Length (2 octets)                       |
      +--------------------------------------------+
      |    Color List (variable)                   |
      +--------------------------------------------+
                ]]>
              </artwork>
            </figure>

            <t>The fields are as follows:
               <list style="symbols">
                 <t>Type is set to 3 to indicate a Color List TLV.</t>
                 <t>Length indicates the length in octets of the Color List.</t>
                 <t>Color List contains a list of Colors, each four octets in length and as defined in <xref target="RFC9012" />.</t>
               </list></t>

         </section>

         <section anchor="roottlv" title="The Root TLV">

            <t>The Root TLV MUST be included in the BGP-LS Filter attribute if its topology is
               of type P2MP or P2P unidirectional.  It defines the root node for that topology
               and if it is not present the BGP-LS Filter is unusable.  The TLV, if present, MUST
               be ignored if the topology is of type MP2MP or P2P bidirectional.</t>

            <t>The Root TLV is structured as shown in <xref target="roottlvfig" /> and MAY
               contain any of the sub-TLVs defined in section 3.2.1.4 of <xref target="RFC7752" />.</t>

            <figure anchor="roottlvfig" title="The Root TLV Format">
              <artwork>
                <![CDATA[
      +--------------------------------------------+
      |    Type = 3 (1 octet)                      |
      +--------------------------------------------+
      |    Length (2 octets)                       |
      +--------------------------------------------+
      |    Sub-TLVs (variable)                     |
      +--------------------------------------------+
                ]]>
              </artwork>
            </figure>

            <t>The fields are as follows:
               <list style="symbols">
                 <t>Type is set to 3 to indicate a Color List TLV.</t>
                 <t>Length indicates the length in octets of the Color List.</t>
                 <t>There follows a sequence of zero or more sub-TLVs as defined in
                    section 3.2.1.4 of <xref target="RFC7752" />.  The presence of
                    sub-TLVs can be deduced from the Length field of the Root TLV.</t>
               </list></t>

         </section>

      </section>

      <section anchor="errhandle" title="Error Handling">

        <t>Section 6 of <xref target="RFC4271" /> describes the handling of malformed BGP attributes, or those that are in error
           in some way.  <xref target="RFC7606" /> revises BGP error handling specifically for the for UPDATE message, provides
           guidelines for the authors of documents defining new attributes, and revises the error handling procedures for a number
           of existing attributes.  This document introduces the BGP-LS Filter attribute and so defines error handling as follows:
           <list style="symbols">
             <t>When parsing a message, an unknown Attribute Type code or a length that suggests that the attribute is longer than
                the remaining message is treated as a malformed message and the "treat-as-withdraw" approach is used as per
                <xref target="RFC7606" />.</t>
             <t>When parsing a message that contains an BGP-LS Filter attribute, the following cases constitute errors:
                <list style="numbers">
                  <t>Optional bit is set to 0 in BGP-LS Filter attribute.</t>
                  <t>Transitive bit is set to 0 in BGP-LS Filter attribute.</t>
                  <t>The attribute does not contain a Filter TLV or contains more than one Filter TLV.</t>
                  <t>The TLV length indicates that the TLV extends beyond the end of the BGP-LS Filter attribute.</t>
                  <t>There is an unknown TLV type field found in BGP-LS Filter attribute.</t>
                </list>
                The errors listed above are treated as follows:
                <list style="hanging">
                  <t hangText="1., 2., 3., 4.:">The attribute MUST be treated as malformed and the "treat-as-withdraw" approach
                    used as per <xref target="RFC7606" />.</t>
                  <t hangText="5.:">Unknown TLVs SHOULD be ignored, and message processing SHOULD continue.</t>
                </list></t>
           </list></t>

      </section>

    </section>

    <section anchor="actn" title="Comparison With ACTN">

      <t>Abstraction and Control of TE Networks (ACTN) <xref target="RFC8453" />
         is a framework that facilitates the abstraction of underlying network
         resources to higher-layer applications and that allows nework operators
         to create virtual networks through the abstraction of the operators&apos;
         network resources.  The applicability of ACTN to network slicing is
         discussed further in <xref target="I-D.ietf-teas-applicability-actn-slicing" />.</t>

      <t>Essentially the ACTN framework describes how to request and provision a
         network slice, but does not define how the network is operated to deliver that
         slice.  Therefore, a direct comparison between this work and ACTN is not
         appropriate.  ACTN could be used as a management framework to operate a slicing
         system built using the protocol extensions defined in this document.</t>

    </section>

    <section anchor="examples" title="Examples">

      <t><xref target="figUnderwear" />shows a sample underlay topology.  Six PEs (PE1 through PE6) are connected
         across a network of twelve P nodes (P1 through P12).  Each PE is dual-homed, and the P nodes are variously
         connected so that there are multiple routes between PEs.</t>

      <figure anchor="figUnderwear" title="Underlay Network Topology">
        <artwork>
          <![CDATA[
                          PE3      PE4
                           |\      /|
                           | \    / |
                           |  \  /  |
                           |   \/   |
                           |   /\   |
                           |  /  \  |
                           | /    \ |
                           |/      \|
                          P1--------P2
                         / |\      /| \
                       /   | \    / |   \
                     /     |  \  /  |     \
                   /       |   \/   |       \
                 P3-------P4--------P5-------P6
                  |      / |   /\   | \      |
                  |    /   |  /  \  |   \    |
                  |  /     | /    \ |     \  |
                  |/       |/      \|       \|
                 P7---P8--P9--------P10-P11-P12
                 |\  /|                 |\  /|
                 | \/ |                 | \/ |
                 | /\ |                 | /\ |
                 |/  \|                 |/  \|
               PE1    PE2             PE5    PE6
          ]]>
        </artwork>
      </figure>

      <section anchor="mp2mp" title="MP2MP Connectivity">

        <t><xref target="figMp2mp" /> shows how a Multi-point-to-multipoint (MP2MP) service
           that connects PE1, PE3, and PE6 can be installed over the underlay network.  Paths
           have been computed so that, for example, PE1 is connected to both PE3 and PE6 via
           pairs of redundant paths.  Similarly, PE3 is connected to PE1 and PE6, and PE6 is
           connected to PE1 and PE3.</t>

        <figure anchor="figMp2mp" title="An MP2MP Service Installed at PE1, PE3, and PE6">
          <artwork>
            <![CDATA[
                            PE3       PE4
                             | \
                             |  \
                             |   \
                             |    \
                             |     \
                             |      \
                             |       \
                             |        \
                            P1         P2
                           /  \       /|
                         /     \     / |
                       /        \   /  |
                     /           \ /   |
                   P3       P4    X    P5       P6
                    |            / \     \
                    |           /   \      \
                    |          /     \       \
                    |         /       \        \
                   P7   P8--P9---------P10-P11 P12
                   |   /                    \   |
                   |  /                      \  |
                   | /                        \ |
                   |/                          \|
                 PE1    PE2              PE5    PE6
            ]]>
          </artwork>
        </figure>
      </section>

      <section anchor="p2mp" title="P2MP Unidirectional Connectivity">

        <t><xref target="figP2MPuni" /> shows the provision of a Point-to-Multipoint
           (P2MP) service rooted at PE3 and connected to PE1 and PE6.  As in the previous
           example, a pair of redundant paths is established between PE3 and each of
           PE1 and PE6.  Thus, the two paths from PE3 to PE1 are PE3-P1-P4-P7-PE1 and
           PE3-P2-P9-P8-PE1.</t>

        <figure anchor="figP2MPuni" title="A P2MP Unidirectional Service Installed at PE3">
          <artwork>
            <![CDATA[
                            PE3       PE4
                             | \
                             |  \
                             |   \
                             |    \
                             |     \
                             |      \
                             |       \
                             |        \
                            P1         P2
                             |\       /  \
                             | \     /     \
                             |  \   /        \
                             |   \ /           \
                   P3       P4    X   P5       P6
                           /     / \            |
                         /      /   \           |
                       /       /     \          |
                     /        /       \         |
                   P7   P8--P9         P10-P11 P12
                   |   /                    \   |
                   |  /                      \  |
                   | /                        \ |
                   |/                          \|
                 PE1    PE2            PE5     PE6
            ]]>
          </artwork>
        </figure>

      </section>

      <section anchor="p2puni" title="P2P Unidirectional Connectivity">

        <t><xref target="figP2Puni" /> shows a Point-to-Point (P2P) service rooted at PE1 and
           connected to PE3.  This is equivalent to a Segment Routing Traffic Engineering (SR TE)
           Policy <xref target="I-D.ietf-idr-segment-routing-te-policy" /> installed at PE1.</t>

        <t>As in the previous examples, a pair of redundant paths are computed.</t>

        <figure anchor="figP2Puni" title="A P2P Unidirectional Service (SR TE Policy) Installed at PE1">
          <artwork>
            <![CDATA[
                            PE3      PE4
                             |\
                             | \
                             |  \
                             |   \
                             |    \
                             |     \
                             |      \
                             |       \
                            P1        P2
                             |        |
                             |        |
                             |        |
                             |        |
                   P3       P4        P5       P6
                           /          |
                         /            |
                       /              |
                     /                |
                   P7   P8--P9--------P10 P11 P12
                   |   /
                   |  /
                   | /
                   |/
                 PE1    PE2             PE5    PE6
            ]]>
          </artwork>
        </figure>

      </section>

      <section anchor="p2pbi" title="P2P Bidirectional Connectivity">

        <t><xref target="figP2Pbidir" /> show a bidirectional P2P service connecting
           PE1 and PE6.  This is equivalent to a Segment Routing Traffic Engineering
           (SR TE) Policy <xref target="I-D.ietf-idr-segment-routing-te-policy" />
           installed at PE1 and PE6.</t>

        <figure anchor="figP2Pbidir" title="A P2P Bidirectional Service Installed at PE1 and PE6">
          <artwork>
            <![CDATA[
                            PE3      PE4




                            P1        P2




                   P3       P4--------P5       P6
                           /            \
                         /                \
                       /                    \
                     /                        \
                   P7   P8--P9--------P10-P11 P12
                   |   /                   \   |
                   |  /                     \  |
                   | /                       \ |
                   |/                         \|
                 PE1    PE2             PE5    PE6
            ]]>
          </artwork>
        </figure>

      </section>

    </section>

    <section anchor="Security" title="Security Considerations">

      <t>TBD</t>

    </section>

    <section anchor="Manageability" title="Manageability Considerations">

      <t>Per VPN OAM and telemetry will be required in order to monitor and verify the performance of network slices.  This is particularly
         important when the performance of a network slice has been committed to a customer through a Service Level Agreement.</t>

      <t>As noted in <xref target="actn" />, ACTN may provide a suitable management model.  However, an Enhanced VPN service model may be
         needed following the concepts described in <xref target="RFC8309" /> and similar in structure to the Layer 3 VPN service model
         defined in <xref target="RFC8299" />.</t>

      <t>Local policy may be used to balance load between BGP-LS filters that are matched by the same flow.  It MUST be possible for an
         operator to query those policies and understand how traffic is being matched to filters.  An implementation MAY also make those
         policies configurable by an operator so that the operator can exert control over how load is balanced (for example, by applying
         weights to various filters.</t>

    </section>

    <section anchor="IANA" title="IANA Considerations">

       <section anchor="IANApathattribute" title="New BGP Path Attribute">

          <t>IANA maintains a registry of "Border Gateway Protocol (BGP) Parameters" with a subregistry of "BGP
             Path Attributes".  IANA is requested to assign a new Path attribute called "BGP-LS Filter attribute" (TBD1 in
             this document) with this document as a reference.</t>

       </section>

       <section anchor="IANAfilterattribute" title="New BGP-LS Filter attribute TLVs Type Registry">

          <t>IANA maintains a registry of "Border Gateway Protocol (BGP) Parameters".  IANA is request to create a new
             subregistry called the "BGP-LS Filter attribute TLVs" registry.</t>

          <t>Valid values are in the range 0 to 255.
             <list style="symbols">
               <t>Values 0 and 255 are to be marked "Reserved, not to be allocated".</t>
               <t>Values 1 through 254 are to be assigned according to the "First Come First Served" policy <xref target="RFC8126" /></t>
             </list></t>

          <t>This document should be given as a reference for this registry. The new registry should track:
             <list style="symbols">
               <t>Type</t>
               <t>Name</t>
               <t>Reference Document or Contact</t>
               <t>Registration Date</t>
             </list></t>

          <t>The registry should initially be populated as follows:</t>

          <figure>
            <artwork>
              <![CDATA[
   Type  | Name                    | Reference     | Date
   ------+-------------------------+---------------+---------------
     1   | Filter TLV              | [This.I-D]    | Date-to-be-set
     2   | DSCP List TLV           | [This.I-D]    | Date-to-be-set
     3   | Color List TLV          | [This.I-D]    | Date-to-be-set
     4   | Root TLV                | [This.I-D]    | Date-to-be-set
              ]]>
            </artwork>
          </figure>

       </section>

    </section>

    <section anchor="Acknowledgements" title="Acknowledgements">

      <t>The authors are grateful to all those who contributed to the discussions that led to this
         work: Ron Bonica, Stewart Bryant, Jie Dong, Keyur Patel, Julian Lucek, and Colby Barth.</t>

      <t>Stephane Litkowski provided useful review comments.</t>

    </section>

    <section title="Contributors">
      <t>The following people contributed text to this document:</t>

      <figure>
        <artwork align="left">
          <![CDATA[
            Gyan Mishra
            Email: hayabusagsm@gmail.com
          ]]>
        </artwork>
      </figure>
    </section>

  </middle>

  <back>

    <references title="Normative References">

      &RFC2119;
      &RFC2474;
      &RFC4271;
      &RFC4364;
      &RFC7432;
      &RFC7606;
      &RFC7752;
      &RFC8126;
      &RFC8174;
      &RFC9012;

    </references>

    <references title="Informative References">

      &RFC3209;
      &RFC4360;
      &RFC4456;
      &RFC4684;
      &RFC8299;
      &RFC8309;
      &RFC8402;
      &RFC8453;

      <?rfc include="reference.I-D.ietf-idr-segment-routing-te-policy"?>
      <?rfc include="reference.I-D.ietf-spring-sr-for-enhanced-vpn"?>
      <?rfc include="reference.I-D.ietf-teas-applicability-actn-slicing"?>
      <?rfc include="reference.I-D.ietf-teas-enhanced-vpn"?>
      <?rfc include="reference.I-D.ietf-teas-ietf-network-slices"?>

      <reference anchor="TS23501" target="https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=3144">
        <front>
          <title>System architecture for the 5G System (5GS) - 3GPP TS23.501</title>
          <author><organization abbrev="3GPP">3GPP</organization></author>
          <date year="2016"/>
        </front>
      </reference>

      <reference anchor="TS28530" target="https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=3144">
        <front>
          <title>Management and orchestration; Concepts, use cases and requirements - 3GPP TS28.530</title>
          <author><organization abbrev="3GPP">3GPP</organization></author>
          <date year="2016"/>
        </front>
      </reference>

    </references>

  </back>
</rfc>
