RFC 9168

Path Computation Element Communication Protocol (PCEP) Extension for Flow Specification

๐Ÿ“… published January 2022, from ietf

๐ŸŽ€ RFC 9168: PCEP Extension for Flow Specification ๐ŸŽ€

okay bestie, grab your iced matcha because this one is SO good โœจ it's about how a PCE (Path Computation Element) can tell a head end exactly which traffic should go down which tunnel. no cap, it's giving main character energy ๐Ÿ’…

Title block, the vibe check ๐ŸŒธ

  • The RFC number is 9168 and the title is Path Computation Element Communication Protocol (PCEP) Extension for Flow Specification ๐Ÿ’–
  • The authors are D. Dhody (Huawei Technologies), A. Farrel (Old Dog Consulting), and Z. Li (Huawei Technologies) ๐Ÿซถ
  • It's a Standards Track document, ISSN 2070-1721, dated January 2022 ๐Ÿฆ‹
  • It doesn't obsolete or update anything, so it's a fresh start, no drama ๐Ÿงš

Abstract

The Path Computation Element (PCE) is a functional component capable of selecting paths through a traffic engineering (TE) network. These paths may be supplied in response to requests for computation, or they may be unsolicited requests issued by the PCE to network elements. Both approaches use the PCE Communication Protocol (PCEP) to convey the details of the computed path. ๐ŸŒˆ

Traffic flows can be categorized and described using "Flow Specifications". RFC 8955 defines the Flow Specification and describes how Flow Specification components are used to describe traffic flows. RFC 8955 also defines how Flow Specifications may be distributed in BGP to allow specific traffic flows to be associated with routes. ๐Ÿ“

This document specifies a set of extensions to PCEP to support dissemination of Flow Specifications. This allows a PCE to indicate what traffic should be placed on each path that it is aware of. โœจ

The extensions defined in this document include the creation, update, and withdrawal of Flow Specifications via PCEP, and they can be applied to tunnels initiated by the PCE or to tunnels where control is delegated to the PCE by the Path Computation Client (PCC). Furthermore, a PCC requesting a new path can include Flow Specifications in the request to indicate the purpose of the tunnel, allowing the PCE to factor this into the path computation. ๐Ÿ’œ

Status of This Memo

This is an Internet Standards Track document. ๐ŸŽ€

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. ๐ŸŒธ

Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at https://www.rfc-editor.org/info/rfc9168. ๐Ÿ”ฅ

Copyright (c) 2022 IETF Trust and the persons identified as the document authors. All rights reserved. ๐Ÿ’…

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) 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. ๐Ÿ™ˆ

Table of Contents

1.  Introduction
2.  Terminology
3.  Procedures for PCE Use of Flow Specifications
  3.1.  Context for PCE Use of Flow Specifications
  3.2.  Elements of the Procedure
    3.2.1.  Capability Advertisement
      3.2.1.1.  PCEP Open Message
      3.2.1.2.  IGP PCE Capabilities Advertisement
    3.2.2.  Dissemination Procedures
    3.2.3.  Flow Specification Synchronization
4.  PCE FlowSpec Capability TLV
5.  PCEP FLOWSPEC Object
6.  Flow Filter TLV
7.  Flow Specification TLVs
8.  Detailed Procedures
  8.1.  Default Behavior and Backward Compatibility
  8.2.  Composite Flow Specifications
  8.3.  Modifying Flow Specifications
  8.4.  Multiple Flow Specifications
  8.5.  Adding and Removing Flow Specifications
  8.6.  VPN Identifiers
  8.7.  Priorities and Overlapping Flow Specifications
9.  PCEP Messages
10. IANA Considerations
  10.1.  PCEP Objects
    10.1.1.  PCEP FLOWSPEC Object Flag Field
  10.2.  PCEP TLV Type Indicators
  10.3.  Flow Specification TLV Type Indicators
  10.4.  PCEP Error Codes
  10.5.  PCE Capability Flag
11. Security Considerations
12. Manageability Considerations
  12.1.  Management of Multiple Flow Specifications
  12.2.  Control of Function through Configuration and Policy
  12.3.  Information and Data Models
  12.4.  Liveness Detection and Monitoring
  12.5.  Verifying Correct Operation
  12.6.  Requirements for Other Protocols and Functional Components
  12.7.  Impact on Network Operation
13. References
  13.1.  Normative References
  13.2.  Informative References
Acknowledgements
Contributors
Authors' Addresses

1. Introduction โœจ

[RFC4655] defines the Path Computation Element (PCE), a functional component capable of computing paths for use in traffic engineering networks. PCE was originally conceived for use in Multiprotocol Label Switching (MPLS) for traffic engineering (TE) networks to derive the routes of Label Switched Paths (LSPs). However, the scope of PCE was quickly extended to make it applicable to networks controlled by Generalized MPLS (GMPLS), and more recent work has brought other traffic engineering technologies and planning applications into scope (for example, Segment Routing (SR) [RFC8664]). ๐Ÿฆ‹

[RFC5440] describes the PCE Communication Protocol (PCEP). PCEP defines the communication between a Path Computation Client (PCC) and a PCE, or between PCE and PCE, enabling computation of the path for MPLS-TE LSPs. ๐Ÿ’–

Stateful PCE [RFC8231] specifies a set of extensions to PCEP to enable control of TE-LSPs by a PCE that retains state about the LSPs provisioned in the network (a stateful PCE). [RFC8281] describes the setup, maintenance, and teardown of LSPs initiated by a stateful PCE without the need for local configuration on the PCC, thus allowing for a dynamic network that is centrally controlled. [RFC8283] introduces the architecture for PCE as a central controller and describes how PCE can be viewed as a component that performs computation to place "flows" within the network and decide how these flows are routed. ๐ŸŒธ

The description of traffic flows by the combination of multiple Flow Specification components, and their dissemination as traffic flow specifications (Flow Specifications), is described for BGP in [RFC8955]. In BGP, a Flow Specification is comprised of traffic filtering rules and is associated with actions to perform on the packets that match the Flow Specification. The BGP routers that receive a Flow Specification can classify received packets according to the traffic filtering rules and can direct packets based on the associated actions. ๐Ÿงš

When a PCE is used to initiate tunnels (such as TE-LSPs or SR paths) using PCEP, it is important that the head end of the tunnels understands what traffic to place on each tunnel. The data flows intended for a tunnel can be described using Flow Specification components. When PCEP is in use for tunnel initiation, it makes sense for that same protocol to be used to distribute the Flow Specification components that describe what data is to flow on those tunnels. ๐Ÿ“

This document specifies a set of extensions to PCEP to support dissemination of Flow Specification components. We term the description of a traffic flow using Flow Specification components as a "Flow Specification". This term is conceptually the same as the term used in [RFC8955]; however, no mechanism is provided to distribute an action associated with the Flow Specification, because there is only one action that is applicable in the PCEP context (that is, directing the matching traffic to the identified LSP). ๐ŸŽ€

The extensions defined in this document include the creation, update, and withdrawal of Flow Specifications via PCEP, and they can be applied to tunnels initiated by the PCE or to tunnels where control is delegated to the PCE by the PCC. Furthermore, a PCC requesting a new path can include Flow Specifications in the request to indicate the purpose of the tunnel, allowing the PCE to factor this into the path computation. ๐Ÿ’œ

Flow Specifications are carried in TLVs within a new object called the FLOWSPEC object defined in this document. The flow filtering rules indicated by the Flow Specifications are mainly defined by BGP Flow Specifications. ๐Ÿ‘‘

Note that PCEP-installed Flow Specifications are intended to be installed only at the head end of the LSP to which they direct traffic. It is acceptable (and potentially desirable) that other routers in the network have Flow Specifications installed that match the same traffic but direct it onto different routes or to different LSPs. Those other Flow Specifications may be installed using the PCEP extensions defined in this document, distributed using BGP per [RFC8955], or configured using manual operations. Since this document is about PCEP-installed Flow Specifications, those other Flow Specifications at other routers are out of scope. In this context, however, it is worth noting that changes to the wider routing system (such as the distribution and installation of BGP Flow Specifications, or fluctuations in the IGP link state database) might mean that traffic matching the PCEP Flow Specification never reaches the head end of the LSP at which the PCEP Flow Specification has been installed. This may or may not be desirable according to the operator's traffic engineering and routing policies, and is particularly applicable at LSPs that do not have their head ends at the ingress edge of the network, but it is not an effect that this document seeks to address. ๐Ÿ™ˆ

2. Terminology โœจ

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 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here. ๐Ÿ’…

This document uses the following terms defined in [RFC5440]: PCC, PCE, and PCEP Peer. ๐ŸŒˆ

The following term from [RFC8955] is used frequently throughout this document:

A Flow Specification is an n-tuple consisting of several matching
criteria that can be applied to IP traffic.  A given IP packet is
said to match the defined Flow Specification if it matches all the
specified criteria.

[RFC8955] also states that "[a] given Flow Specification may be associated with a set of attributes" and that "...attributes can be used to encode a set of predetermined actions." However, in the context of this document, no action is explicitly specified as associated with the Flow Specification, since the action of forwarding all matching traffic onto the associated path is implicit. ๐Ÿ“

How an implementation decides to filter traffic that matches a Flow Specification does not form part of this specification, but a flag is provided to indicate whether the sender of a PCEP message that includes a Flow Specification intends it to be installed as a Longest Prefix Match (LPM) route or as a Flow Specification policy. ๐Ÿฆ‹

This document uses the terms "stateful PCE" and "active PCE" as advocated in [RFC7399]. ๐ŸŒธ

3. Procedures for PCE Use of Flow Specifications ๐ŸŽ€

(Part 1 of 7 ends here. Part 2 picks up with Section 3.1, so stay tuned, bestie! ๐Ÿซถ)

3.1. Context for PCE Use of Flow Specifications ๐ŸŒธ

okay so in the PCE architecture, setting up and using LSPs is a five-step process ๐Ÿ’…

  1. Decide which LSPs to set up. The decision may be made by a user, by a PCC, or by the PCE. There can be a number of triggers for this, including user intervention and dynamic response to changes in traffic demands ๐Ÿ“ˆ
  2. Decide what properties to assign to an LSP. This can include bandwidth reservations, priorities, and the Differentiated Services Code Point (DSCP) (i.e., MPLS Traffic Class field) ๐ŸŽ€ This is also determined by user configuration or in response to predicted or observed traffic demands.
  3. Decide what traffic to put on the LSP. This is basically deciding which traffic flows go on which LSPs, and it's honestly super linked to the first two decisions above ๐Ÿงš
  4. Cause the LSP to be set up and modified so it has the right characteristics. This usually means the PCE advises or instructs the PCC at the head end of the LSP, and then the PCC signals the LSP across the network ๐Ÿฆ‹
  5. Tell the head end of the LSP what traffic to put on the LSP. This can happen after the LSP is set up or at the same time โœจ This step is the subject of this document, bestie ๐Ÿ’–

3.2. Elements of the Procedure ๐Ÿซถ

there are three elements in the procedure, and they're all giving main character energy:

  1. A PCE and a PCC must be able to indicate whether or not they support the use of Flow Specifications.
  2. A PCE or PCC must be able to include Flow Specifications in PCEP messages with a clear understanding of how those Flow Specifications apply in each case. This includes whether the use of such information is mandatory, constrained, or optional, and how overlapping Flow Specifications will be resolved ๐Ÿ”ฅ
  3. Flow Specification information and state must be synchronized between PCEP peers so that, on recovery, the peers have the same understanding of which Flow Specifications apply. This is just like what's required for stateful PCE and LSP delegation (see Section 5.6 of [RFC8231]) ๐Ÿ‘‘

the next subsections break these points down ๐ŸŒˆ

3.2.1. Capability Advertisement ๐Ÿ’…

as with most PCEP capability advertisements, the ability to support Flow Specifications can be indicated in the PCEP Open message or in IGP PCE capability advertisements โœจ

3.2.1.1. PCEP Open Message ๐ŸŽ€

during PCEP session establishment, a PCC or PCE that supports the procedures described in this document announces it by including the PCE FlowSpec Capability TLV (described in Section 4) in the OPEN object carried in the PCEP Open message ๐Ÿ“ฃ

if a PCE's Open message has the PCE FlowSpec Capability TLV in its OPEN object, that means the PCE can distribute FlowSpecs to PCCs and can receive FlowSpecs in messages from PCCs ๐Ÿงš

if a PCC's Open message has the PCE FlowSpec Capability TLV in its OPEN object, that means the PCC supports the FlowSpec functionality described in this document ๐Ÿฆ‹

if either one of a pair of PCEP peers does not include the PCE FlowSpec Capability TLV in the OPEN object in its Open message, then the other peer MUST NOT include a FLOWSPEC object in any PCEP message sent to that peer. ๐Ÿšซ If a FLOWSPEC object is received when support has not been indicated, the receiver will respond with a PCErr message reporting the objects containing the FlowSpec, as described in [RFC5440]. That means it will use "Unknown Object" if it doesn't support this specification, and "Not supported object" if it does support this specification but hasn't chosen to support FLOWSPEC objects on this PCEP session ๐Ÿ™ˆ

3.2.1.2. IGP PCE Capabilities Advertisement ๐ŸŒธ

the ability to advertise support for PCEP and PCE features in IGP advertisements is provided for OSPF in [RFC5088] and for IS-IS in [RFC5089]. The mechanism uses the PCE Discovery TLV, which has a PCE-CAP-FLAGS sub-TLV containing bit flags, and each flag indicates support for a different feature ๐Ÿ“

this document defines a new PCE-CAP-FLAGS sub-TLV bit, the FlowSpec Capable flag (bit number 16). Setting the bit means the advertising PCE supports the procedures defined in this document ๐Ÿ’œ

note that while PCE FlowSpec capability may be advertised during discovery, PCEP speakers that wish to use Flow Specification in PCEP MUST negotiate PCE FlowSpec capability during PCEP session setup, as specified in Section 3.2.1.1. A PCC MAY initiate PCE FlowSpec capability negotiation at PCEP session setup even if it didn't receive any IGP PCE capability advertisement. Also, a PCEP peer that advertised support for FlowSpec in the IGP is not obliged to support these procedures on any given PCEP session ๐Ÿซถ

3.2.2. Dissemination Procedures ๐Ÿ’–

this section describes the procedures for supporting Flow Specifications in PCEP messages ๐ŸŒˆ

the primary purpose of distributing Flow Specification information is to let a PCE tell a PCC what traffic it should place on a path (such as an LSP or an SR path). So the Flow Specification may be included in:

  • PCInitiate messages, so an active PCE can indicate the traffic to place on a path at the time it instantiates the path ๐Ÿš€
  • PCUpd messages, so an active PCE can indicate or change the traffic to place on a path that's already been set up ๐Ÿ”„
  • PCRpt messages, so a PCC can report the traffic that it will place on the path ๐Ÿ“Š
  • PCReq messages, so a PCC can indicate what traffic it plans to place on a path when it asks the PCE to perform a computation, in case that info helps the PCE in its work ๐Ÿง 
  • PCRep messages, so a PCE that's been asked to compute a path can suggest which traffic could be placed on a path that a PCC may be about to set up ๐Ÿ’ก
  • PCErr messages, so issues related to paths and the traffic they carry can be reported to the PCE by the PCC, and problems with other PCEP messages that carry Flow Specifications can be reported too ๐Ÿšจ

to carry Flow Specifications in PCEP messages, this document defines a new PCEP object called the "PCEP FLOWSPEC object". The object is OPTIONAL in the messages described above and MAY appear more than once in each message ๐ŸŽ

to describe a traffic flow, the PCEP FLOWSPEC object carries a Flow Filter TLV ๐Ÿ”

including multiple PCEP FLOWSPEC objects lets multiple traffic flows be placed on a single path ๐Ÿ›ฃ๏ธ

once a PCE and PCC have established that they can both support the use of Flow Specifications in PCEP messages, that information may be exchanged at any time for new or existing paths โฐ

the application and prioritization of Flow Specifications are described in Section 8.7 ๐Ÿ“š

as per [RFC8231], any attributes of the path received from a PCE are subject to the PCC's local policy. This holds true for Flow Specifications as well ๐Ÿ›ก๏ธ

3.2.3. Flow Specification Synchronization ๐Ÿ”

the Flow Specifications are carried along with the LSP state information as per [RFC8231], which makes them part of the LSP database (LSP-DB). So synchronizing Flow Specification information is done as part of LSP-DB synchronization. This may be achieved using normal state synchronization procedures as described in [RFC8231], or enhanced state synchronization procedures as defined in [RFC8232] ๐ŸŒŸ

the approach selected will be implementation and deployment specific, and it depends on things like how the databases are built and what level of synchronization support is needed ๐Ÿง

4. PCE FlowSpec Capability TLV โœจ

the PCE-FLOWSPEC-CAPABILITY TLV is an optional TLV that can be carried in the OPEN object [RFC5440] to exchange the PCE FlowSpec capabilities of the PCEP speakers ๐ŸŽ€

the format of the PCE-FLOWSPEC-CAPABILITY TLV follows the format of all PCEP TLVs as defined in [RFC5440], and it's shown in Figure 1 ๐Ÿ‘€

    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=51               |          Length=2             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Value=0             |          Padding              |
   +---------------------------------------------------------------+

Figure 1: PCE-FLOWSPEC-CAPABILITY TLV Format

the type of the PCE-FLOWSPEC-CAPABILITY TLV is 51, and it has a fixed length of 2 octets. The Value field MUST be set to 0 and MUST be ignored on receipt. The two bytes of padding MUST be set to zero and MUST be ignored on receipt ๐Ÿซง

the inclusion of this TLV in an OPEN object indicates that the sender can perform FlowSpec handling as defined in this document ๐Ÿ’œ

5. PCEP FLOWSPEC Object โœจ

okay so the PCEP FLOWSPEC object in this doc follows the PCEP object format from [RFC5440] ๐Ÿ’–. It is OPTIONAL in the PCReq, PCRep, PCErr, PCInitiate, PCRpt, and PCUpd messages, and it MAY be present zero, one, or more times. Each instance of the object describes a separate traffic flow ๐Ÿฆ‹.

The PCEP FLOWSPEC object MAY carry a FlowSpec filter rule encoded in a Flow Filter TLV, which is defined in Section 6 ๐ŸŽ€.

The FLOWSPEC Object-Class is 43 (to be assigned by IANA) ๐ŸŒธ.

The FLOWSPEC Object-Type is 1 โœจ.

The body of the PCEP FLOWSPEC object is laid out like this, as shown in Figure 2 ๐Ÿ‘‘:

    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                            FS-ID                              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |         AFI                   |  Reserved     |   Flags   |L|R|
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   //                             TLVs                            //
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 2: PCEP FLOWSPEC Object Body Format

Here's the breakdown, bestie ๐Ÿงš:

  • FS-ID (32 bits): A PCEP-specific identifier for the FlowSpec information. A PCE or PCC creates an FS-ID for each FlowSpec that it originates. The value is unique within the scope of that PCE or PCC and is constant for the lifetime of a PCEP session. All subsequent PCEP messages can identify the FlowSpec using the FS-ID. The values 0 and 0xFFFFFFFF are reserved and MUST NOT be used ๐Ÿ™ˆ. Note that [NUMERIC-IDS-SEC] gives advice on assigning transient numeric identifiers such as the FS-ID so as to minimize security risks ๐Ÿ”.
  • AFI (16 bits): Address Family Identifier as used in BGP [RFC4760] (AFI=1 for IPv4 or VPNv4, AFI=2 for IPv6 and VPNv6 as per [RFC8956]) ๐ŸŒˆ.
  • Reserved (8 bits): MUST be set to zero on transmission and ignored on receipt ๐Ÿ“.
  • Flags (8 bits): Two flags are currently assigned ๐Ÿฆ‹:
    • R bit: The Remove bit is set when a PCEP FLOWSPEC object is included in a PCEP message to indicate removal of the Flow Specification from the associated tunnel. If the bit is clear, the Flow Specification is being added or modified ๐Ÿ’….
    • L bit: The Longest Prefix Match (LPM) bit is set to indicate that the Flow Specification is to be installed as a route subject to LPM forwarding. If the bit is clear, the Flow Specification described by the Flow Filter TLV (see Section 6) is to be installed as a Flow Specification. If the bit is set, only Flow Specifications that describe IPv4 or IPv6 destinations are meaningful in the Flow Filter TLV, and others are ignored. If the L is set and the receiver does not support the use of Flow Specifications that are present in the Flow Filter TLV for the installation of a route subject to LPM forwarding, then the PCEP peer MUST respond with a PCErr message with Error-Type 30 (FlowSpec Error) and Error-value 5 (Unsupported LPM Route) ๐Ÿšจ.

Unassigned bits MUST be set to zero on transmission and ignored on receipt ๐Ÿซถ.

If the PCEP speaker receives a message with the R bit set in the FLOWSPEC object and the Flow Specification identified with an FS-ID does not exist, it MUST generate a PCErr with Error-Type 30 (FlowSpec Error) and Error-value 4 (Unknown FlowSpec) ๐Ÿ˜ญ.

If the PCEP speaker does not understand or support the AFI in the FLOWSPEC message, the PCEP peer MUST respond with a PCErr message with Error-Type 30 (FlowSpec Error) and Error-value 2 (Malformed FlowSpec) ๐Ÿ’€.

The following TLVs can be used in the FLOWSPEC object ๐ŸŽ€:

  • Speaker Entity Identifier TLV: As specified in [RFC8232], the SPEAKER-ENTITY-ID TLV encodes a unique identifier for the node that does not change during the lifetime of the PCEP speaker. This is used to uniquely identify the FlowSpec originator, so it is used together with the FS-ID to uniquely identify the FlowSpec information. This TLV MUST be included. If the TLV is missing, the PCEP peer MUST respond with a PCErr message with Error-Type 30 (FlowSpec Error) and Error-value 2 (Malformed FlowSpec). If more than one instance of this TLV is present, the first MUST be processed, and subsequent instances MUST be ignored ๐Ÿ‘‘.
  • Flow Filter TLV (variable): One TLV MAY be included. The Flow Filter TLV is OPTIONAL when the R bit is set โœจ.

The Flow Filter TLV MUST be present when the R bit is clear. If the TLV is missing when the R bit is clear, the PCEP peer MUST respond with a PCErr message with Error-Type 30 (FlowSpec Error) and Error-value 2 (Malformed FlowSpec) ๐Ÿฅบ.

Filtering based on the L2 fields is out of scope of this document ๐ŸŒธ.


6. Flow Filter TLV โœจ

One new PCEP TLV is defined to convey Flow Specification filtering rules that specify what traffic is carried on a path ๐Ÿฆ‹. The TLV follows the format of all PCEP TLVs as defined in [RFC5440]. The Type field values come from the code point space for PCEP TLVs and has the value 52 for Flow Filter TLV ๐Ÿ’–.

The Value field of the TLV contains one or more sub-TLVs (the Flow Specification TLVs) as defined in Section 7. Together they represent the complete definition of a Flow Specification for traffic to be placed on the tunnel ๐ŸŒˆ. This tunnel is indicated by the PCEP message in which the PCEP FLOWSPEC object is carried. The set of Flow Specification TLVs in a single instance of a Flow Filter TLV is combined to indicate the specific Flow Specification. Note that the PCEP FLOWSPEC object can include just one Flow Filter TLV ๐Ÿ’….

Further Flow Specifications can be included in a PCEP message by including additional FLOWSPEC objects ๐Ÿ“.

In the future, there may be a desire to add support for L2 Flow Specifications (such as described in [BGP-L2VPN]) ๐Ÿ‘€.

7. Flow Specification TLVs ๐Ÿ’–

okay so the Flow Filter TLV carries one or more Flow Specification TLVs ๐ŸŽ€ Each one follows the same format as all PCEP TLVs from [RFC5440] โœจ BUT the Type values come from a separate IANA registry (see Section 10.3) instead of the common PCEP TLV registry ๐Ÿ’…

The Type values are picked so there can be commonality with the Flow Specifications defined for BGP in [RFC8955] and [RFC8956] ๐Ÿฆ‹ It works because the BGP Flow Spec encoding uses a single octet for the type, while PCEP uses 2 octets ๐ŸŒธ So the space of Type values gets split up like this, as shown in Table 1:

        +===========+=======================================+
        | Range     | Description                           |
        +===========+=======================================+
        | 0-255     | Per BGP Flow Spec registry defined by |
        |           | [RFC8955] and [RFC8956].              |
        |           |                                       |
        |           | Not to be allocated in this registry. |
        +-----------+---------------------------------------+
        | 256-65535 | New PCEP Flow Specifications          |
        |           | allocated according to the registry   |
        |           | defined in this document.             |
        +-----------+---------------------------------------+

             Table 1: Flow Specification TLV Type Ranges

[RFC8955] is the reference for the "Flow Spec Component Types" registry and defines the allocations in it ๐Ÿงš [RFC8956] asked for the creation of the "Flow Spec IPv6 Component Types" registry, plus its initial allocations ๐ŸŒˆ If the AFI (in the FLOWSPEC object) is set to IPv4, the range 0..255 follows "Flow Spec Component Types" from [RFC8955]. If the AFI is set to IPv6, the range 0..255 follows "Flow Spec IPv6 Component Types" from [RFC8956] โœจ

The content of the Value field in each TLV depends on the type and AFI, and it describes the parameters of the Flow Specification ๐Ÿ’œ A lot of these Value field formats are inherited from BGP specifications ๐Ÿซถ Specifically, they're inherited from [RFC8955] and [RFC8956], but they may also be inherited from future BGP specifications too ๐Ÿ”ฎ

When multiple Flow Specification TLVs show up in a single Flow Filter TLV, they get combined to make a more detailed specification of a flow ๐Ÿ”ฅ For examples and rules about how that works, check [RFC8955]. As [RFC8955] puts it, "A given component type MAY (exactly once) be present in the Flow Specification". So a Flow Filter TLV MUST NOT contain more than one Flow Specification TLV of the same type ๐Ÿ™ˆ If an implementation gets a PCEP message with a Flow Filter TLV containing more than one Flow Specification TLV of the same type, it MUST respond with a PCErr message with Error-Type 30 (FlowSpec Error) and Error-value 2 (Malformed FlowSpec), and it MUST NOT install the Flow Specification ๐Ÿ’€

An implementation that gets a PCEP message carrying a Flow Specification TLV with a type value it doesn't recognize or support MUST respond with a PCErr message with Error-Type 30 (FlowSpec Error) and Error-value 1 (Unsupported FlowSpec), and it MUST NOT install the Flow Specification ๐Ÿšซ

When other protocols (like BGP) use these Flow Specifications, they're also associated with actions that say how matching traffic should be treated ๐Ÿฆ‹ In PCEP, though, the only action is to associate the traffic with a tunnel and forward the matching traffic onto that path, so no encoding of an action is needed ๐ŸŒธ

Section 8.7 describes how overlapping Flow Specifications get prioritized and handled ๐Ÿ‘‘

All Flow Specification TLVs with Types in the range 0 to 255 already have values defined for BGP use (for example, in [RFC8955] and [RFC8956]) ๐Ÿ’– They're set using the BGP encoding but without the type octet, since the relevant information is already in the Type field of the TLV ๐ŸŽ€ The Value field gets padded with trailing zeros to hit 4-byte alignment โœจ

This document defines the following new types:

+======+=====================+==================+
| Type | Description         | Value Defined In |
+======+=====================+==================+
| 256  | Route Distinguisher | RFC 9168         |
+------+---------------------+------------------+
| 257  | IPv4 Multicast Flow | RFC 9168         |
+------+---------------------+------------------+
| 258  | IPv6 Multicast Flow | RFC 9168         |
+------+---------------------+------------------+

  Table 2: Flow Specification TLV Types Defined
                 in this Document

To let you identify a VPN in PCEP through a Route Distinguisher (RD) [RFC4364], this document defines a new TLV, the ROUTE-DISTINGUISHER TLV ๐ŸŒˆ A Flow Specification TLV with Type 256 (ROUTE-DISTINGUISHER TLV) carries an RD value, which tells you that other flow filter info (like an IPv4 destination prefix) is tied to a specific VPN identified by that RD ๐Ÿ’œ See Section 8.6 for more on VPN identification ๐Ÿงš

 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=256            |           Length=8            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     Route Distinguisher                       |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

         Figure 3: The Format of the ROUTE-DISTINGUISHER TLV

The format of the RD is as per [RFC4364] ๐Ÿซถ

Okay, here's the vibe check: it's possible to describe a multicast Flow Specification by combining other Flow Specification TLVs with specific values ๐Ÿค” BUT it's way more convenient to use a dedicated Flow Specification TLV ๐Ÿ™Œ Flow Specification TLVs with Type values 257 and 258 identify a multicast flow for IPv4 and IPv6, respectively ๐Ÿฆ‹ The Value field is encoded as shown in Figure 4:

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        Reserved           |S|G|  Src Mask Len | Grp Mask Len  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                        Source Address                         ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                   Group multicast Address                     ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

         Figure 4: Multicast Flow Specification TLV Encoding

The two address fields and address mask lengths in the Multicast Flow Specification TLVs hold source and group prefixes for matching against packet flows ๐Ÿ’… Note that the two address fields are 32 bits for an IPv4 Multicast Flow and 128 bits for an IPv6 Multicast Flow โœจ

The Reserved field MUST be set to zero and MUST be ignored on receipt ๐Ÿค

There are two bit flags (S and G) that describe the multicast wildcarding in use ๐ŸŽ€ If the S bit is set, source wildcarding is in use, and the values in the Source Mask Length and Source Address fields MUST be ignored ๐Ÿ™ˆ If the G bit is set, group wildcarding is in use, and the values in the Group Mask Length and Group multicast Address fields MUST be ignored ๐Ÿ™ˆ The G bit MUST NOT be set unless the S bit is also set. If a Multicast Flow Specification TLV is received with S bit = 0 and G bit = 1, the receiver MUST respond with a PCErr with Error-Type 30 (FlowSpec Error) and Error-value 2 (Malformed FlowSpec) ๐Ÿ’€

The three multicast mappings can be achieved like this:

(S, G) - S bit = 0, G bit = 0, the Source Address and Group
multicast Address prefixes are both used to define the multicast
flow.

(*, G) - S bit = 1, G bit = 0, the Group multicast Address prefix
is used to define the multicast flow, but the Source Address
prefix is ignored.

(*, *) - S bit = 1, G bit = 1, the Source Address and Group
multicast Address prefixes are both ignored.

8. Detailed Procedures ๐ŸŒธ

okay this section is where we get into the specific detailed procedures for using the protocol extensions defined in this document ๐Ÿง 

8.1. Default Behavior and Backward Compatibility

The default behavior is that no Flow Specification is applied to a tunnel ๐Ÿ™…โ€โ™€๏ธ So by default, the FLOWSPEC object isn't used, just like in every system before this specification got implemented ๐Ÿ’–

In this case, it's a local matter (like through configuration) how tunnel head ends get told what traffic to put on a tunnel ๐ŸŽ€

[RFC5440] describes how receivers respond when they see unknown PCEP objects โœจ

8.2. Composite Flow Specifications

Flow Specifications can be represented by a single Flow Specification TLV, or they may need a more complex description using multiple Flow Specification TLVs ๐Ÿงฉ For example, a flow indicated by a source-destination pair of IPv6 addresses would be described by the combination of Destination IPv6 Prefix and Source IPv6 Prefix Flow Specification TLVs ๐ŸŒˆ

8.3. Modifying Flow Specifications

A PCE may want to modify a Flow Specification associated with a tunnel, or a PCC may want to report a change to the Flow Specification it's using with a tunnel ๐Ÿ”„

It's important to identify the specific Flow Specification so it's clear this is a modification of an existing flow and not the addition of a new flow (as described in Section 8.4) ๐Ÿซถ The FS-ID field of the PCEP FLOWSPEC object identifies a specific Flow Specification in the context of the content of the Speaker Entity Identifier TLV ๐Ÿฆ‹

When modifying a Flow Specification, all Flow Specification TLVs for the intended specification of the flow MUST be included in the PCEP FLOWSPEC object ๐Ÿ’… The FS-ID MUST be retained from the previous description of the flow, and the same Speaker Entity Identifier TLV MUST be used ๐Ÿ”’

8.4. Multiple Flow Specifications

It's possible that traffic from multiple flows gets placed on a single tunnel ๐Ÿš‡ In some cases, you can define these within a single PCEP FLOWSPEC object by widening the scope of a Flow Specification TLV ๐Ÿ‘€ For example, traffic to two destination IPv4 prefixes might be captured by a single Flow Specification TLV with type "Destination" and a suitably adjusted prefix ๐Ÿง  BUT this is unlikely to be possible in most scenarios, and it must be recalled that it is not permitted to include two Flow Specification TLVs of the same type within one Flow Filter TLV ๐Ÿ˜ญ

So the normal procedure is to carry each Flow Specification in its own PCEP FLOWSPEC object ๐ŸŽ€ Multiple objects may be present on a single PCEP message, or multiple PCEP messages may be used ๐Ÿ’œ

8.5. Adding and Removing Flow Specifications โœจ

okay so adding and modifying a Flow Specification is the easy part ๐Ÿ’… the Remove bit in the PCEP FLOWSPEC object just stays clear (so it's 0) when you're adding or modifying one ๐Ÿซถ

now if you want to yeet a Flow Specification, you include a PCEP FLOWSPEC object with the FS-ID that matches the one you're removing, and you set the R bit to say "bye, remove this one" ๐Ÿ‘‹ bestie, you do not need to include any Flow Specification TLVs in that case ๐Ÿ™ˆ

and here's the tea ๐Ÿต: if the R bit is set AND there are Flow Specification TLVs hanging around, an implementation MAY ignore them ๐ŸŒธ but if it does go checking those TLVs against what it recorded for the FS-ID and Speaker Entity Identifier of the Flow Specification being removed and they don't match, the Flow Specification matching the FS-ID MUST still get removed anyway ๐Ÿ’€ the implementation SHOULD record a local exception or log so someone can see what happened โœจ

8.6. VPN Identifiers ๐Ÿฆ‹

okay so VPN instances get identified in BGP using RDs [RFC4364] ๐Ÿ’œ these values aren't normally considered to mean anything outside the network, and they're not encoded in data packets belonging to the VPNs ๐Ÿ™…โ€โ™€๏ธ BUT RDs are actually super useful for identifying VPN instances, and they're often assigned to VPNs manually or automatically as they get provisioned ๐ŸŽ€

so like, the RD gives you a lowkey iconic way to say "traffic for this particular VPN should go on a given tunnel" ๐Ÿš‡ the tunnel head end has to read this Flow Specification NOT as a filter on the fields of data packets, but using the other mechanisms it already uses to identify VPN traffic ๐Ÿงš those could be based on the incoming port (for port-based VPNs) or could use knowledge of the VPN Routing and Forwarding (VRF) that's in use for the traffic ๐ŸŒˆ

8.7. Priorities and Overlapping Flow Specifications ๐Ÿ‘‘

okay this one is highkey important bestie ๐Ÿ˜ญ Flow Specifications can overlap ๐Ÿ’… for example, two different Flow Specifications might be identical except for the length of the prefix in the destination address โœจ so in those cases, the PCC MUST figure out how to prioritize them so it knows which path to assign packets that match both ๐Ÿ›ค๏ธ basically the PCC MUST give each Flow Specification a precedence so it checks each incoming packet for a match in a predictable order ๐Ÿ”ฅ

the processing of BGP Flow Specifications is described in [RFC8955] ๐Ÿ’œ Section 5.1 of that document explains the order of traffic filtering rules that an implementation of that spec has to run ๐Ÿ™Œ

PCCs MUST apply the same ordering rules as defined in [RFC8955] ๐Ÿซถ

and here's the spicy part ๐ŸŒถ๏ธ: it's possible that Flow Specifications get distributed by BGP AND by PCEP (like this document describes) ๐Ÿ˜ณ in that case, implementations that support both approaches MUST apply the prioritization and ordering rules from [RFC8955] regardless of which protocol distributed the Flow Specifications ๐Ÿ‘‘ BUT implementations MAY provide a configuration control so one protocol can take precedence over the other ๐ŸŽ€ that might be especially useful if the Flow Specifications make identical matches on traffic but have different actions ๐Ÿ“ it is RECOMMENDED that a message be logged for the operator so they can understand the behavior when two Flow Specifications from different protocols overlap, especially when one replaces another ๐Ÿ“โœจ

Section 12.1 of this document covers manageability considerations for the prioritized ordering of Flow Specifications ๐ŸŒธ

last but not least ๐Ÿฅน: if an implementation gets a PCEP message carrying a Flow Specification that it cannot resolve against the Flow Specifications already installed (for example, because the new one has irresolvable conflicts with ones that are already there) ๐Ÿ’€ it MUST respond with a PCErr message with Error-Type 30 (FlowSpec Error) and Error-value 3 (Unresolvable Conflict) ๐Ÿšจ and it MUST NOT install that Flow Specification ๐Ÿ™…โ€โ™€๏ธ

9. PCEP Messages ๐Ÿ’Œ

this section describes the format of messages that contain FLOWSPEC objects ๐Ÿงš the only difference from the previous message formats is that the object gets included ๐Ÿซถ

the figures in this section use the notation defined in [RFC5511] โœจ

the FLOWSPEC object is OPTIONAL and MAY be carried in the PCEP messages ๐ŸŒˆ

9.1. PCInitiate Message ๐Ÿš€

the PCInitiate message is defined in [RFC8281] and updated as below ๐Ÿ’–

<PCInitiate Message> ::= <Common Header>
                         <PCE-initiated-lsp-list>

Where:
   <PCE-initiated-lsp-list> ::= <PCE-initiated-lsp-request>
                                [<PCE-initiated-lsp-list>]

   <PCE-initiated-lsp-request> ::=
                                 ( <PCE-initiated-lsp-instantiation>|
                                   <PCE-initiated-lsp-deletion> )

   <PCE-initiated-lsp-instantiation> ::= <SRP>
                                         <LSP>
                                         [<END-POINTS>]
                                         <ERO>
                                         [<attribute-list>]
                                         [<flowspec-list>]

   Where:
      <flowspec-list> ::= <FLOWSPEC> [<flowspec-list>]

9.2. PCUpd Message ๐Ÿ”„

the PCUpd message is defined in [RFC8231] and updated as below ๐ŸŽ€

<PCUpd Message> ::= <Common Header>
                    <update-request-list>

Where:
   <update-request-list> ::= <update-request>
                             [<update-request-list>]

   <update-request> ::= <SRP>
                        <LSP>
                        <path>
                        [<flowspec-list>]

   Where:
      <path>::= <intended-path><intended-attribute-list>

      <flowspec-list> ::= <FLOWSPEC> [<flowspec-list>]

9.3. PCRpt Message ๐Ÿ“Š

the PCRpt message is defined in [RFC8231] and updated as below ๐Ÿฆ‹

<PCRpt Message> ::= <Common Header>
                    <state-report-list>

Where:
   <state-report-list> ::= <state-report>[<state-report-list>]

   <state-report> ::= [<SRP>]
                      <LSP>
                      <path>
                      [<flowspec-list>]

    Where:
      <path>::= <intended-path>
                [<actual-attribute-list><actual-path>]
                <intended-attribute-list>

      <flowspec-list> ::= <FLOWSPEC> [<flowspec-list>]

9.4. PCReq Message ๐Ÿ™‹โ€โ™€๏ธ

the PCReq message is defined in [RFC5440] and updated in [RFC8231]; it gets further updated below for a Flow Specification ๐Ÿ’…

<PCReq Message>::= <Common Header>
                   [<svec-list>]
                   <request-list>

Where:
   <svec-list>::= <SVEC>[<svec-list>]

   <request-list>::= <request>[<request-list>]

   <request>::= <RP>
                <END-POINTS>
                [<LSP>]
                [<LSPA>]
                [<BANDWIDTH>]
                [<metric-list>]
                [<RRO>[<BANDWIDTH>]]
                [<IRO>]
                [<LOAD-BALANCING>]
                [<flowspec-list>]

   Where:
      <flowspec-list> ::= <FLOWSPEC> [<flowspec-list>]

9.5. PCRep Message ๐Ÿ’ฌ

the PCRep message is defined in [RFC5440] and updated in [RFC8231]; it gets further updated below for a Flow Specification ๐ŸŒธ

<PCRep Message> ::= <Common Header>
                    <response-list>

Where:
   <response-list>::=<response>[<response-list>]

   <response>::=<RP>
               [<LSP>]
               [<NO-PATH>]
               [<attribute-list>]
               [<path-list>]
               [<flowspec-list>]

   Where:
      <flowspec-list> ::= <FLOWSPEC> [<flowspec-list>]

10. IANA Considerations ๐Ÿณ๏ธโ€๐ŸŒˆ

this document requests that IANA allocate code points for the protocol elements defined in it ๐Ÿซถ

10.1. PCEP Objects ๐Ÿงพ

IANA maintains a subregistry called "PCEP Objects" within the "Path Computation Element Protocol (PCEP) Numbers" registry ๐Ÿ’œ each PCEP object has an Object-Class and an Object-Type, and IANA has allocated new code points in this subregistry like so ๐Ÿ‘‡

+====================+==========+=======================+===========+
| Object-Class Value | Name     | Object-Type           | Reference |
+====================+==========+=======================+===========+
| 43                 | FLOWSPEC | 0: Reserved           | RFC 9168  |
|                    |          +-----------------------+-----------+
|                    |          | 1: Flow               | RFC 9168  |
|                    |          | Specification         |           |
+--------------------+----------+-----------------------+-----------+

             Table 3: PCEP Objects Subregistry Additions

10.1.1. PCEP FLOWSPEC Object Flag Field ๐Ÿšฉ

this document requests that a new subregistry, "FLOWSPEC Object Flag Field", gets created within the "Path Computation Element Protocol (PCEP) Numbers" registry to manage the Flag field of the FLOWSPEC object ๐ŸŽ€ new values are to be assigned by Standards Action [RFC8126] โœจ each bit should be tracked with the following qualities:

  • Bit number (counting from bit 0 as the most significant bit)
  • Capability description
  • Defining RFC

the initial population of this registry looks like this ๐Ÿ’–

+=====+================+===========+
| Bit | Description    | Reference |
+=====+================+===========+
| 0-5 | Unassigned     |           |
+-----+----------------+-----------+
| 6   | LPM (L bit)    | RFC 9168  |
+-----+----------------+-----------+
| 7   | Remove (R bit) | RFC 9168  |
+-----+----------------+-----------+

  Table 4: Initial Contents of the
     FLOWSPEC Object Flag Field
              Registry

10.2. PCEP TLV Type Indicators ๐Ÿงฉ

IANA maintains a subregistry called "PCEP TLV Type Indicators" within the "Path Computation Element Protocol (PCEP) Numbers" registry ๐ŸŒˆ IANA has made the following allocations in this subregistry ๐Ÿ‘‡

+=======+=============================+===========+
| Value | Description                 | Reference |
+=======+=============================+===========+
| 51    | PCE-FLOWSPEC-CAPABILITY TLV | RFC 9168  |
+-------+-----------------------------+-----------+
| 52    | FLOW FILTER TLV             | RFC 9168  |
+-------+-----------------------------+-----------+

   Table 5: PCEP TLV Type Indicators Subregistry
                     Additions

10.3. Flow Specification TLV Type Indicators โœจ

okay so IANA made a brand new subregistry called "PCEP Flow Specification TLV Type Indicators" ๐ŸŽ€ and it lives inside the "Path Computation Element Protocol (PCEP) Numbers" registry. bestie, the way they sorted the number ranges is so organized ๐Ÿ˜ญ Allocations follow these assignment policies [RFC8126]:

+=============+===================================+
| Range       | Registration Procedures           |
+=============+===================================+
| 0-255       | Reserved - must not be allocated. |
|             |                                   |
|             | Usage mirrors the BGP Flow Spec   |
|             | registry [RFC8955] [RFC8956].     |
+-------------+-----------------------------------+
| 256-64506   | Specification Required            |
+-------------+-----------------------------------+
| 64507-65531 | First Come First Served           |
+-------------+-----------------------------------+
| 65532-65535 | Experimental Use                  |
+-------------+-----------------------------------+

   Table 6: Registration Procedures for the PCEP
       Flow Specification TLV Type Indicators
                    Subregistry

Lowkey the 0-255 range is reserved and mirrors the BGP Flow Spec registry, so it's not for new stuff ๐Ÿ™ˆ

IANA already filled this registry with the values defined in this document. They took the new values from the 256 to 64506 range, and the initial contents are:

+=======+=====================+
| Value | Meaning             |
+=======+=====================+
| 256   | Route Distinguisher |
+-------+---------------------+
| 257   | IPv4 Multicast      |
+-------+---------------------+
| 258   | IPv6 Multicast      |
+-------+---------------------+

   Table 7: Initial Contents
        of the PCEP Flow
     Specification TLV Type
     Indicators Subregistry

10.4. PCEP Error Codes ๐Ÿ’€

okay this one's giving error table era ๐Ÿงš IANA maintains a subregistry called "PCEP-ERROR Object Error Types and Values" inside the "Path Computation Element Protocol (PCEP) Numbers" registry. Each entry is described by Error-Type and Error-value. IANA added this assignment to the subregistry:

+============+================+=========================+===========+
| Error-Type | Meaning        | Error-value             | Reference |
+============+================+=========================+===========+
| 30         | FlowSpec error | 0: Unassigned           | RFC 9168  |
|            |                +-------------------------+-----------+
|            |                | 1: Unsupported          | RFC 9168  |
|            |                | FlowSpec                |           |
|            |                +-------------------------+-----------+
|            |                | 2: Malformed            | RFC 9168  |
|            |                | FlowSpec                |           |
|            |                +-------------------------+-----------+
|            |                | 3: Unresolvable         | RFC 9168  |
|            |                | Conflict                |           |
|            |                +-------------------------+-----------+
|            |                | 4: Unknown              | RFC 9168  |
|            |                | FlowSpec                |           |
|            |                +-------------------------+-----------+
|            |                | 5: Unsupported          | RFC 9168  |
|            |                | LPM Route               |           |
|            |                +-------------------------+-----------+
|            |                | 6-255:                  | RFC 9168  |
|            |                | Unassigned              |           |
+------------+----------------+-------------------------+-----------+

    Table 8: PCEP-ERROR Object Error Types and Values Subregistry
                              Additions

so error-type 30 is the FlowSpec error family, and it has codes 0 through 5 plus a catch-all for 6-255 ๐Ÿซถ


10.5. PCE Capability Flag ๐Ÿฆ‹

IANA registered a brand new capability bit in the OSPF Parameters "Path Computation Element (PCE) Capability Flags" registry, like this:

+=====+========================+===========+
| Bit | Capability Description | Reference |
+=====+========================+===========+
| 16  | FlowSpec               | RFC 9168  |
+-----+------------------------+-----------+

  Table 9: Path Computation Element (PCE)
    Capability Flags Registry Additions

11. Security Considerations ๐Ÿ”

okay bestie, this part is serious, so let's be serious ๐Ÿ˜ญ We may assume that a system using a remote PCE is exposed to a bunch of vulnerabilities. Someone could sneak in spurious LSPs or SR paths, or mess with paths that already exist and tear them down. So those systems apply the security considerations in [RFC5440], Section 2.5 of [RFC6952], [RFC8253], and [RFC8955] ๐Ÿ›ก๏ธ

Flow Specifications attached to paths that a PCE sets up or controls add one more detail that could be attacked. The attacker doesn't even have to tear down any LSPs or SR paths. They just misroute traffic inside the network ๐Ÿ’€ So using the PCEP security mechanisms referenced above really matters.

Seeing the information carried in PCEP doesn't directly raise privacy concerns for end users' data ๐Ÿ‘€ but knowing how data gets routed can make that data more vulnerable. And being able to interfere with routing makes the data more vulnerable too. Also, knowing the connected endpoints (like multicast receivers or VPN sites) is usually treated as private customer info. So implementations or deployments that care about privacy MUST apply the mechanisms in the documents referenced above. In particular they MUST secure the PCEP session with IPsec per Sections 10.4 to 10.6 of [RFC5440] or with TLS per [RFC8253]. Heads up: TCP-MD5 security, as first suggested in [RFC5440], doesn't give enough security or privacy guarantees, so it SHOULD NOT be relied upon ๐Ÿšซ

Experience with Flow Specifications in BGP systems shows they can get complicated, and overlapping Flow Specifications installed in different orders can lead to unexpected results ๐Ÿ˜ตโ€๐Ÿ’ซ This isn't a security issue on its own, but the confusion and weird forwarding behavior could be engineered or exploited by an attacker. The complexity might also open gaps in monitoring and inspection of particular traffic, or create a path that avoids expected mitigations. So implementers and operators SHOULD pay careful attention to the manageability considerations in Section 12 and get familiar with the careful explanations in [RFC8955] ๐Ÿ“š


12. Manageability Considerations ๐Ÿงš

The feature from this document makes networks run with a PCE and PCEP way more manageable ๐Ÿ’– With a stateful active PCE or PCE-initiated services, and without this feature, you'd need extra manual configuration to tell head ends what traffic to put on the network services (LSPs, SR paths, etc.).

This section follows the advice and guidance of [RFC6123] ๐ŸŽ€


12.1. Management of Multiple Flow Specifications ๐Ÿ’…

Experience with Flow Specification in BGP suggests there can be a lot of complexity when two or more Flow Specifications overlap ๐Ÿ˜ฉ This can happen with addresses given as prefixes, for example, and it could cause confusion about which traffic should go on which path. Unlike a distributed routing system, it isn't important for routing stability and consistency that every head-end implementation applies the same rules to sort out overlapping Flow Specifications. What does matter is:

  • a network operator can easily find out what traffic is being placed on which path and why. This will make analyzing the network and diagnosing faults way easier.
  • a PCE be able to correctly predict the effect of instructions it gives to a PCC. This will make sure traffic lands correctly on the network without causing congestion or other network inefficiencies, and that traffic is delivered correctly.

So, a PCC MUST let an operator view the Flow Specifications it has installed. These MUST be presented in order of precedence, so when two Flow Specifications overlap, the one that gets serviced with higher precedence shows up first for the operator ๐Ÿ‘‘

A discussion of precedence ordering for Flow Specifications is in Section 8.7 ๐Ÿฆ‹


12.2. Control of Function through Configuration and Policy โญ

Supporting the function in this document means a functional element that can ask a PCE to compute and control a path can also configure the specification of what traffic goes on that path โœจ If a human is involved, the Flow Specification configuration must be available through an interface, like a graphical user interface or a Command Line Interface. If a separate software component (one not co-implemented with the PCE) is used, there will need to be a protocol mechanism, which could be PCEP itself or a data model like extensions to the YANG model for requesting path computation [TEAS-YANG-PATH] ๐ŸŒธ

Implementations MAY be built with a configurable switch that says whether they support the functions defined in this document. Otherwise, such implementations MUST indicate that they support the function as described in Section 4. If an implementation lets you configure support for this function, that support MAY be configurable per peer or once for the whole implementation ๐Ÿ“

as mentioned in Section 12.1, a PCE implementation SHOULD provide a mechanism to configure variations in the precedence ordering of Flow Specifications per PCC ๐ŸŒˆ


12.3. Information and Data Models ๐Ÿ“Š

The YANG model in [PCE-PCEP-YANG] can be used to model and monitor PCEP states and messages. To make that YANG model useful for the extensions in this document, it would need to be augmented to cover the new protocol elements ๐Ÿ’œ

Similarly, as noted in Section 12.2, the YANG model defined in [TEAS-YANG-PATH] could be extended to allow specifying Flow Specifications ๐Ÿง

Finally, as mentioned in Section 12.1, a PCC implementation SHOULD provide a mechanism that lets an operator read the Flow Specifications from a PCC and understand the order they'll be executed in. This could be done with a new YANG model ๐Ÿซถ


12.4. Liveness Detection and Monitoring ๐Ÿ™Œ

The extensions in this document don't need any extra liveness detection and monitoring support. For more info, check out [RFC5440] and [RFC5886] ๐Ÿ’–


12.5. Verifying Correct Operation ๐Ÿ”

The big thing to verify (on top of the protocol elements described in [RFC5440]) is the installation, precedence, and correct operation of the Flow Specifications at a PCC ๐ŸŽฏ

Besides the YANG model for reading Flow Specifications from Section 12.3, you might need tools that inject Operations and Management (OAM) traffic at the PCC matching specific criteria, so it can be monitored while traveling along the desired path. Those tools are outside the scope of this document ๐Ÿงšโ€โ™€๏ธ


12.6. Requirements for Other Protocols and Functional Components ๐ŸŒท

This document places no requirements on other protocols or components. Totally chill, no homework for anyone else ๐Ÿ’…๐ŸŽ€

12.7. Impact on Network Operation ๐Ÿฆ‹

okay so this one is lowkey the most reassuring bit ๐Ÿฅน using these features does have a big effect on network traffic, because it makes traffic take specific paths through the network. BUT in practice nothing changes about how the network actually runs, since the traffic is already being placed on those paths by some configuration mechanism that already exists ๐Ÿ›ค๏ธ so the real win is that fewer mechanisms have to be applied, not that traffic gets passed through the network any differently. main character energy for simplicity ๐Ÿ’…โœจ


13. References ๐Ÿ“š

13.1. Normative References

13.2. Informative References


Acknowledgements ๐Ÿซถ

big thank you to Julian Lucek, Sudhir Cheruathur, Olivier Dugeon, Jayant Agarwal, Jeffrey Zhang, Acee Lindem, Vishnu Pavan Beeram, Julien Meuric, Deborah Brungard, ร‰ric Vyncke, Erik Kline, Benjamin Kaduk, Martin Duke, Roman Danyliw, and Alvaro Retana for the useful discussions and comments ๐Ÿ’– you all made this so much better ๐ŸŒธ

Contributors ๐ŸŒˆ

these lovelies helped write it, bestie ๐ŸŽ€

Shankara
Huawei Technologies
Divyashree Techno Park, Whitefield
Bangalore 560066
Karnataka
India

Email: shankara@huawei.com


Qiandeng Liang
Huawei Technologies
Yuhuatai District
101 Software Avenue,
Nanjing, 210012
China

Email: liangqiandeng@huawei.com


Cyril Margaria
Juniper Networks
200 Somerset Corporate Boulevard, Suite 4001
Bridgewater, NJ 08807
United States of America

Email: cmargaria@juniper.net


Colby Barth
Juniper Networks
200 Somerset Corporate Boulevard, Suite 4001
Bridgewater, NJ 08807
United States of America

Email: cbarth@juniper.net


Xia Chen
Huawei Technologies
Huawei Bld., No. 156 Beiqing Rd.
Beijing, 100095
China

Email: jescia.chenxia@huawei.com


Shunwan Zhuang
Huawei Technologies
Huawei Bld., No. 156 Beiqing Rd.
Beijing, 100095
China

Email: zhuangshunwan@huawei.com


Cheng Li
Huawei Technologies
Huawei Campus, No. 156 Beiqing Rd.
Beijing, 100095
China

Email: c.l@huawei.com

Authors' Addresses ๐Ÿงš

where to find the people who wrote this ๐Ÿ’œ

Dhruv Dhody
Huawei Technologies
Divyashree Techno Park, Whitefield
Bangalore 560066
Karnataka
India

Email: dhruv.ietf@gmail.com


Adrian Farrel
Old Dog Consulting

Email: adrian@olddog.co.uk


Zhenbin Li
Huawei Technologies
Huawei Bldg., No. 156 Beiqing Rd.
Beijing
100095
China

Email: lizhenbin@huawei.com
๐Ÿ“ฆ where this page comes from