Internet-Draft | PCE Stateful Inter-Domain Tunnels | March 2022 |
Dugeon, et al. | Expires 5 September 2022 | [Page] |
This document specifies how to use a Backward Recursive or Hierarchical method to derive inter-domain paths in the context of stateful Path Computation Element (PCE). The mechanism relies on the PCInitiate message to set up independent paths per domain. Combining these different paths together enables them to be operated as end-to-end inter-domain paths, without the need for a signaling session between inter-domain border routers. For this purpose, this document defines a new Stitching Label, new Association Type, and a new PCEP communication Protocol (PCEP) Capability.¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 5 September 2022.¶
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.¶
The PCE working group has produced a set of RFCs to standardize the behavior of the Path Computation Element ([RFC4655] and [RFC5440]) as a tool to help MultiProtocol Label Switching - Traffic Engineering (MPLS-TE)/Generalized MPLS (GMPLS) Label Switched Paths (LSPs) and Segment Routing paths placement. This also includes the ability to compute inter-domain LSPs or Segment Routing paths following a distributed BRPC [RFC5441] or hierarchical H-PCE [RFC6805] approach. Such inter-domain paths could then serve as an Explicit Route Object (ERO) input for the RSVP-TE signaling to set up the tunnels within the underlying network. Three kinds of inter-domain paths could be established:¶
However, these inter-domain paths depend on signaling using RSVP-TE to be set up, but it is not common to allow signaling across administrative domain borders, especially in operational networks.¶
For Segment Routing, issues are different as there is no signaling between routers. First, a segment path depends on a stack of segment identifiers but, in an inter-domain path, this stack may become too large with respect to hardware constraint. If Extensions for Segment Routing [RFC8664] takes into account the Maximum Stack Depth (MSD), a PCE may be unable to find a solution when it computes an end-to-end inter-domain path. The second issue is related to the path confidentiality because all Node-SID must be stacked by the head end router while some of the Node-SIDs are associated to routers of the next domains. It is clear that operators would not disclose details of their network, which includes Node-SIDs. Thus, it is not possible to stack remote labels for an end-to-end inter-domain path even if MSD constraint is respected.¶
The purpose of this document is to take the benefit of Active Stateful PCE [RFC8231] and PCE-Initiated [RFC8281] modes to stitch or nest inter-domain paths directly using PCEP between domains' PCEs while avoiding the use of another signaling between inter-domain border nodes. The mechanism keeps each operator free to independently set up their respective part of the inter-domain paths, i.e. the signaling (for MPLS-TE and GMPLS) is scoped on a per domain basis, individually.¶
The PCInitiate message is used from destination domain to source domain, to recursively set up the end-to-end tunnel. Binding Label / Segment Identifier (BSID) [I-D.ietf-pce-binding-label-sid] is used to convey the specific labels or SIDs to automatically stitch or nest the different local LSPs. And PCRep in conjunction with PCUpd messages are used to report, maintain, modify and tear down inter-domain paths. This method is also applicable to Segment Routing to build inter-domain segment paths. To enable this mechanism, this document defines a new Stitching Label, new Association Type, and a new PCEP communication Protocol (PCEP) Capability.¶
In the remainder of this document, the same references as per BRPC [RFC5441] are used and the following set of assumptions are made (see figure below):¶
...(H-PCE)........................... . . . . . . -------------- -------------- -------------- |Domain-A . | | . Domain-B| | . Domain-C| | . | | . | | . | | PCE------+--PCEP---+---PCE--------+--PCEP---+---PCE | | / | | / | | / | | / | | / | | / | | Src=========BNA-------BNB1===========BNB2------BNC=========Dst | | | Inter- | | Inter- | | -------------- Domain -------------- Domain -------------- Link Link Figure 1: Example of the representation of 3 domains with 3 PCEs¶
Operations, according to the figure above, are as follow:¶
Each of the PCEs use PCEP to instruct the segment head ends backward from destination to source:¶
ABR: Area Border Routers. Routers used to connect two IGP areas (areas in OSPF or levels in IS-IS).¶
AS: Autonomous System¶
ASBR: Autonomous System Border Router. Router used to connect together ASes (of the same or different service providers) via one or more inter-AS links.¶
BSID: Binding Label / Segment Identifier.¶
Border Node (BN): a boundary node is either an ABR in the context of inter-area TE or an ASBR in the context of inter-AS TE.¶
BN-en(i): Entry BN of domain(i) connecting domain(i-1) to domain(i) along a determined sequence of domains. Multiple entry BN-en(i) could be used to connect domain(i-1) to domain(i).¶
BN-ex(i): Exit BN of domain(i) connecting domain(i) to domain(i+1) along a determined sequence of domains. Multiple exit BN-ex(i) could be used to connect domain(i) to domain(i+1).¶
Domains: Autonomous System (AS) or IGP Area. An Autonomous System is composed by one or more IGP area.¶
ERO(i): The Explicit Route Object scoped to domain(i)¶
IGP-TE: Interior Gateway Protocol with Traffic Engineering support. Both OSPF-TE and IS-IS-TE are identified in this category.¶
Inter-domain path: A path that crosses two or more domains through a pair of Border Node (BN-ex, BN-en).¶
LK(i): A Link that connect BN-ex(i-1) to BN-en(i). Note that BN-ex(i-1) could be connected to BN-en(i) by more than one link. LK(i) identifies which of the multiple links will be used for the inter-domain path setup. For inter-AS scenario, LK(i) represents the link between ASBR of domain i to the ASBR of domain i-1. For inter-area scenario, LK(i) is present only in IS-IS networks and represents the link between ABR of region L1, reciprocally L2, to the ABR of region L2, reciprocally L1.¶
Local path: A path that does not cross a domain border. It is set up either from entry BN-en, to output BN-ex or between both. This path could be enforce by means of RSVP-TE signaling or Segment Routing labels stack.¶
Local path(i): A Local path of domain(i)¶
PLSP-ID(i): A PLSP-ID that identifies, in the domain(i), the local part of an inter-domain path.¶
PCE: Path Computation Element. An entity (component, application, or network node) that is capable of computing a network path or route based on a network graph and applying computational constraints.¶
PCE(i) is a PCE within the scope of domain(i).¶
R(i,j): The router j of domain i¶
Stitching Label (SL): A dedicated label that is used to stitch two RSVP-TE LSPs or two Segment Routing paths.¶
SL(i): A Stitching Label that links domain(i-1) to domain(i) and is conveyed as an inter-domain BSID.¶
TPB(): An empty TE-PATH-BINDING TLV to request an inter-domain BSID i.e. a Stitching Label.¶
TPB(i): A TE-PATH-BINDING TLV with an inter-domain Binding Value equal to the Stitching Label SL(i).¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 [RFC2119].¶
This section introduces the concept of Stitching Label that allows stitching and nesting of local paths in order to form an inter-domain path that cross several different domains.¶
The operation of stitch or nest a local path(i) to a local path(i+1) in order to form and inter-domain path mainly consists in defining the label that the output BN-ex(i) will use to send its traffic to the entry BN-en(i+1). Indeed, the entry BN-en(i+1) needs to identify the incoming traffic (e.g. IP packets), in order to know if this traffic must follow the local path(i+1) or not. Forwarding Equivalent Class (FEC) could be used for that purpose. But, when stitching or nesting tunnels, the FEC is reduced to the incoming label that the entry BN-en(i+1) has chosen for the local path(i+1).¶
In this document, we introduce the term of "Stitching Label (SL)" to refer to this label. Such label is usually exchanged between output BN-ex(i) and entry BN-en(i+1) with the RSVP-TE signaling. But, as we want to avoid to use RSVP-TE signaling due to operational constraints, and allow compatibility support for Segment Routing, this Stitching Label is here conveyed by PCEP. Binding Label / Segment Identifier (BSID) [I-D.ietf-pce-binding-label-sid] defines a new TE-PATH-BINDING TLV to exchange a Binding Segment / Label Identifier (BSID) between a PCC and a PCE. This BSID is then used to steer incoming traffic using this BSID into the associated path. Thus, the Stitching Label defines in this draft is a particular use case of BSID, named inter-domain BSID, and could be conveyed in the TE-PATH-BINDING TLV of the LSP Object without any modification of PCEP nor PCEP Objects.¶
If BSID allows to automatically steer traffic identified with this BSID into the associated path, for inter-domain BSID, it is different as the Stitching Label is associated to the inter-domain link LK(i+1) i.e. the link between the border node BN-ex(i) of the domain(i) and the border node BN-en(i+1) of the domain(i+1). Indeed, the Border Node BN-en(i+1) needs to received the traffic identified by the Stitching Label SL(i+1) from BN-ex(i). Thus, it is necessary to instruct the border node BN-ex(i) to push the Stitching Label(i+1) on top of the packets of traffic going from domain(i) to domain(i+1), and send them to the border node BN-en(i+1) through the inter-domain link LK(i+1). Depending of technology used by domain(i), RSVP-TE or Segment Routing, the operation uses two different approaches.¶
.-,( ),-. .-,( ),-. +----+ .-( ) +----+ LK(i+1) +----+ ( )-. | BN |( Domain(i) )| BN |------------| BN |( Domain(i+1 ) +----+ '-( ) +----+ SL(i+1) +----+ ( ).-' | '-.( ).-' | | '-.( ).-' BN-en(i) BN-ex(i) BN-en(i+1) Figure 2: Inter-domain Link¶
In case of RSVP-TE, the Border Node BN-ex(i) needs to received the Stitching Label from BN-en(i) through the RSVP-TE message and install in its L(F)IB a SWAP instruction to the Stitching Label and forward it to the next Border Node BN-en(i+1). For that purpose, the Egress Control mechanism, as per RFC4003 section 2.1 [RFC4003], is RECOMMENDED to instruct the Border Node BN-ex(i) of this action. Other mechanisms to program the L(F)IB could be used, e.g. NETCONF.¶
Thus, PCE(i) SHOULD provide SL(i+1) and LK(i+1) to the PCC BN-en(i) through the ERO = {..., [LK(i+1), SL(i+1)]} as the last SubObject in conformance to [RFC4003]. As a result, BN-ex(i) installs in its MPLS L(F)IB the SWAP instruction to label SL(i+1) with forward to LK(i+1). It is left to implementation of PCE to get the LK(i+1) value. One solution consist to retrieve it from the PKS(i) or the ERO previously computed during the BRPC process.¶
In case of Segment Routing, the Stitching Label SL(i+1) will be inserted into the label stack in order to become the top label in the stack when the packet reaches BN-en(i+1). Thus, the Stitching Label SL(i+1) serves as a Binding SID entry for BN-en(i+1) to identify the packets that follow the next Segment Path. For that purpose, BN-en(i) MUST install in its MPLS L(F)IB an instruction to replace the incoming Stitching Label SL(i) by the label stack given by the ERO(i) plus the Stitching Label SL(i+1).¶
When a packet reaches BN-ex(i), the last label in the stack before the label SL(i+1) corresponds to a SID that allows to reach BN-en(i+1). When there are multiple interfaces between Border Nodes, BN-ex(i) needs to know how to send the packets to BN-en(i+1). Similarly to the Egress Control mechanism used with RSVP-TE, it is RECOMMENDED to use the inter-domain SID defined as per draft Egress Peer Engineering [RFC9086] for that purpose. The inter-domain SID named here I-SID(i+1) is announced by BN-ex(i) to PCE(i) through BGP-LS for each interface that connect BN-ex(i) to neighbors BN-en(i+1). Thus, PCE(i) SHOULD provide SL(i+1) and I-SID(i+1) to the PCC BN-en(i) through the EROso that the label stack will end with {BN-ex(i) SID, I-SID(i+1), SL(i+1)} and should be processed as follows:¶
Other mechanisms, e.g. NETCONF, could be used to configure the inter-domain SID on exit Border Nodes.¶
The Binding Label / Segment Identifier has been defined as a global traffic steering identifier. Thus, if an entry border node BN-en(i) is configured with a Stitching Label SL(i), any domain connected to this border node through different interface could send traffic to domain(i) and subsequent domains even if they are not part of the inter-domain path. However, some operators would prefer to configure a strict enforcement of traffic steering. In this case, the border node BN-en(i) SHOULD restrict the MPLS L(F)IB configuration to accept traffic with the Stitching Label SL(i) to the incoming link LK(i).¶
In order to convey the Stitching Label and manage traffic steering at inter-domain, this specification defines new flags (See IANA section of this document) for the Binding Label / Segment Identifier. The format of the TE-PATH-BINDING TLV is defined in Binding Label / Segment Identifier (BSID) [I-D.ietf-pce-binding-label-sid] and included here for easy reference with the addition of the new flags as follow:¶
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 = 55 | Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | BT |R|I|S| Flags | Reserved | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ~ Binding Value (variable length) ~ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Figure 3: TE-PATH-BINDING TLV¶
An empty TE-PATH-BINDING TLV with the I flag set to 1 MUST be present in a PCInitiate messages sent by a PCE(i-1) to its neighbor PCE(i) in the Backward Recursive method or by the Parent PCE to the Child PCE(i) to initiate a new inter-domain path. In its response, the neighbor PCE(i) or Child PCE(i) MUST return a Stitching Label SL in the TE-PATH-BINDING TLV with the I flag set in the LSP object of the PCRpt message to PCE(i-1) or the Parent PCE. PCE(i-1) MUST NOT provide a Stitching Label as a Binding Value of the TE-PATH-BINDING TLV to its neighbor PCE(i).¶
An empty TE-PATH-BINDING TLV with the I flag set to 1 MUST be present in the PCInitiate message sent by a PCE(i) requesting to a PCC of domain(i) to initiate a new local path(i) which is part of an inter-domain path. The I flag MUST be set by the PCE(i) only after receiving a PCInitiate message with an empty TE-PATH-BINDING with the I flag set from a neighbor PCE(i-1) in the Backward Recursive method or Parent PCE in the Hierarchical method. In its response, the PCC of domain(i) MUST return a Stitching Label SL in the TE-PATH-BINDING TLV with the I flag set in the LSP object of the PCRpt message. Alternatively, the PCE(i) could provide a Stitching Label as a Binding Value of the TE-PATH-BINDING TLV with the I flag set to the PCC of the domain(i) when initiating a new local path(i) as per section #8 of draft Binding Label / Segment Identifier (BSID) [I-D.ietf-pce-binding-label-sid]. If the PCC is not able to allocate a BSID for inter-domain, it MUST send a PCErr message with Error-Type = "Binding label/SID failure" and Error-Value = "Unable to allocate a new binding label/SID" defined in draft Binding Label / Segment Identifier (BSID) [I-D.ietf-pce-binding-label-sid].¶
If a PCE(i) receives a PCRpt without a TE-PATH-BENDING TLV while it has requested a Stitching Label in the PCInitiate message, it MUST send a PCErr message with Error-Type = "Mandatory Object missing"" and Error-Value = TBD2. If a PCE(i) receives a PCRpt with a TE-PATH-BENDING TLV with the I flag unset while it has requested a Stitching Label in the PcInitiate message, it MUST send a PCErr message with Error-Type = "Binding label/SID failure" and Error-Value = TBD3.¶
PCE(i) SHOULD set the S flag in addition to the I flag if it requests traffic steering strictly coming from a given interface, i.e. traffic using the BSID and coming from a different interface MUST be rejected by the PCC. When the S flag is set, PCE(i) MUST set the EndPoint source address of the requested local path with the IP address of the interface where the traffic is strictly steered. When the PCC receives an LSP object with an empty TE-PATH-BINDING TLV and the S flag set, it MUST allocate a Binding Value and configure its MPLS L(F)IB to accept traffic with this BSID only coming from the interface identified by the source address of the EndPoint Object. If the PCC is not be able to strictly steer traffic, it MUST send a PCErr message with Error-Type = "Binding label/SID failure" and Error-Value = "Unable to allocate a new binding label/SID".¶
This section describes how to set up inter-domain paths that cross different domains by using a Backward Recursive method. It is compatible with the inter-domain path computation by means of the BRPC procedure as describe in RFC5441 [RFC5441].¶
This section describes how PCInitiate and PCRpt messages are combined between PCE in order to set up inter-domain paths between a source domain(1) to a destination domain(n). S and D are respectively the source and destination of the inter-domain path. Domain(1) and domain(n) are different and connected through 0 (i.e. direct connection when n = 2) or more intermediate domains denoted domain(i) with i = [2, n-1].¶
First, the PCE(1) runs standard BRPC algorithm as per RFC5441 [RFC5441] with its neighbor PCEs in order to compute the inter-domain path from S to D, where S and D are respectively a node in the domain(1) and domain(n). Path Key confidentiality as per RFC5520 [RFC5520] SHOULD be used to obfuscate the detailed ERO(i) of the different domains(i). The resulting ERO is in the form {S, PKS(1), BN-ex(1), ..., BN-en(i), PKS(i), BN-ex(i), ..., BN-en(n), PKS(n), D} when Path Key is used and of the form {S, R(1,1), ..., R(1,k), BN-ex(1), ..., BN-en(i), R(i,1), ..., R(i,l), BN-ex(i), ..., BN-en(n), R(n,1), ..., R(n,m), D} otherwise . As subsequent domains are not aware about the computed end-to-end ERO in case of Virtual Source Path trees (VSPTs), the final ERO selected by the PCE(1) MUST be sent in the PCInitiate message to indicate to the subsequent PCEs which path has been finally chosen. PCE(1) MUST ensure that this ERO is self comprehensive by subsequent PCEs. Indeed, when a PCE(i) receives the ERO, it MUST be able to verify that this ERO matches its own scope and be able to determine the next PCE(i+1). When Path Key is used, PCEs MUST encode the Path Key with a reachable IP address so that previous PCEs in the AS chain are able to join them. When Path Key is not used, the PCEs MUST be able to retrieve an IP address of the next PCE corresponding to the ERO (e.g., relying on a per prefix table).¶
The complete procedure with Path Key follows the different steps described below:¶
Steps 1: Initialization¶
Once ERO(S, D) is computed, PCE(1) sends a PCInitiate message to PCE(2) containing an ERO equal to {S, PKS(2), ..., PKS(i), ..., PKS(n), D}, an LSP Object containing an empty TE-PATH-BINDING TLV with the I flag set and the End-Points Object = (S, D). The ERO corresponds to the one PCE(1) has received from PCE(2) during the BRPC process in which only Path Key are kept. In case of multiple EROs, i.e. VSPT, PCE(1) has chosen one of them and used the selected one for the PCInitiate message. PKS(i) could be replaced by the full ERO description if Path Key is not used by PCE(i).¶
When PCE(i) receives a PCInitiate message from domain(i-1) with an LSP containing an empty TE-PATH-BINDING TLV with I flag set and ERO = {PKS(i), PKS(i+1), ..., PKS(n), D)}, it MUST sends the received PCInitiate message to PCE(i+1) with a popped ERO and records its received PKS(i) part. All PCE(i)s MUST generate the appropriate PCInitiate message to PCE(i+1) up to PCE(n), i.e. to the destination domain(n).¶
Steps 2: Actions taken at the destination domain(n) by PCE(n)¶
Steps i: Actions performed by all intermediate domains(i), for i = 2 to n-1¶
Steps n: Actions performed at the source domain(1) by PCE(1)¶
Once PCE(1) receives the PCRpt message from PCE(2) with the TE-PATH-BINDING TLV with the I flag set containing the Binding Value equal to the Stitching Label SL(2), it MUST send a PCInitiate message to PCC node S with ERO equal to {ERO(1), [LK(2), SL(2)]}, once retrieves the identifier of link LK(2), and End-Points Object = {S, BN-ex(1)}. This time, no TE-PATH-BINDING TLV is provided as the PCC S does not need to return a Stitching Label SL, because it is the head-end of the inter-domain path. A usual PCRpt message is sent back to PCE(1) by the PCC node S.¶
In the figure below, two different domains S and D are interconnected through BN respectively BN-S and BN-D. PE-S and PE-D are edge routers. All routers in the figure are connected to their respective PCE through PCEP. In this example, we consider that PCE(S) needs to set up an inter-domain path between PE-S and PE-D acting as source and destination of the path. To simplify the figure, neither intermediate routers between (PE-S, BN-S), (BN-D and PE-D), nor RSVP-TE messages are represented, but they are all presents. The following notation is used (in this example, we use the PKS for the sake of simplicity):¶
PE-S PCE-S BN-D PCE-D | | | | | [ -------- Standard BRPC exchange ------------] | | | | | | PCInitiate(ERO={PKS(D)}, TPB(I) | | --------------------------------------> | | | | | | | PCInitiate(ERO = ERO(D), TPB(I)) | | | <------- | | | | | | | PCRpt(RRO = {RRO(D)}, TPB(I, SL)) | | | ------> | | | | | | PCRpt(RRO = {PKS(D)}, TPB(I, SL), PLSP-ID(D)) | | <-------------------------------------- | | | | | | PCInitiate(ERO={ERO(S), LK(D), SL(D), BN(D)}) | | <------- | | | | | | | | PCRpt(RRO={RRO(S)}) | | | -------> | | | | | | | +----------------------+ +----------------------+ | | | | | +------+ | PCEP | +------+ | | +---->|PCE(S)|<-------------------------------->|PCE(D)| | | | +------+ | | +------+ | | | ^ | | ^ ^ | | | | | | | | | | |PCEP | | | | | | | | |PCEP | | PCEP | | PCEP | | v | | | | | | (PE-S) +------> (BN-S) <---------> (BN-D)<----+ +----> (PE-D) | | Inter-Domain | | | Domain (S) | Link | Domain (D) | +----------------------+ +----------------------+ [--- LSP Tunnel (S) ---][---- SL label ----][--- LSP Tunnel (D) ---] Figure 4: Example of inter-domain path setup between two domains¶
In case of error during path setup, PCRpt and or PCErr messages MUST be used to signal the problem to the neighbor PCE domain backward. In particular, if the new I flag of the TE-PATH-BINDING TLV defined in this document is not supported by the neighbor PCE or PCC, the PCE, respectively PCC, MUST return a PCErr message with Error-Type = "Binding label/SID failure" and Error-Value = "Unable to allocate a new binding label/SID" (as per section #12 of draft Binding Label / Segment Identifier (BSID) [I-D.ietf-pce-binding-label-sid]) to its neighbor PCE respectively PCE.¶
If a PCE(i) receives a PCInitiate message from its peer PCE(i-1) without an TE-PATH-BINDING with the I flag set in the LSP object, it MUST return a PCErr message with Error-Type = 24 (LSP instantiation error) and Error-Value = 1 (Unacceptable instantiation parameters) to its peer PCE(i-1).¶
Following a PCInitiate message with an LSP object containing an empty TE-PATH-BINDING TLV with the I flag set, if a neighbor PCE(i+1) or a PCC returns no TE-PATH-BINDING TLV, or a TE-PATH-BINDING TLV without the I flag set, the PCE(i), respectively the PCE(i), MUST return a PCErr message with Error-Type = "Binding label/SID failure" and Error-Value = "Unable to allocate a new binding label/SID".¶
In case of completion failure, the PCE(i) MUST propagate the PCErr message up to the PCE(1). In turn, PCE(1) MUST send a PCInitate message (R flag set in the SRP Object as per [RFC8281]) to tear down this inter-domain path from its neighbor PCEs. PCE(i) MUST propagate the PCInitiate message and remove its local path by means of PCInitiate message to its PCC BN-en(i) and send back PCRpt message to PCE(i-1).¶
In case of error in domain(i+1), PCE(i) MAY add the AS number of domain(i+1) in the RRO to identify the faulty domain.¶
This section describes how to set up inter-domain paths that cross different domains by using a hierarchical method. It is compatible with inter-domain path computation as described in [RFC6805].¶
This section describes how PCInitiate and PCRpt messages are combined between PCEs in order to set up inter-domain paths between a source domain(1) to a destination domain(n). S and D are respectively the source and destination of the inter-domain path. Domain(1) and domain(n) are different and connected through 0 or more intermediate domains denoted domain(i) with i = (2, n-1). Domains are directly connected when n = 2.¶
First, the Parent PCE contacts its Child PCE as per [RFC6805] in order to compute the inter-domain path from S to D, where S and D are respectively a node in the domain(1) and domain(n). Path Key confidentiality as per RFC5520 [RFC5520] SHOULD be used to obfuscate the detailed ERO(i) of the different domains(i). The resulting ERO is of the form (S, PKS(1), BN-ex(1), ..., BN-en(i), PKS(i), BN-ex(i), ..., BN-en(n), PKS(n), D) when Path Key is used and of the form {S, R(1,1), ..., R(1,k), BN-ex(1), ..., BN-en(i), R(i,1), ..., R(i,l), BN-ex(i), ..., BN-en(n), R(n,1), ..., R(n,m), D} otherwise.¶
The complete procedure with Path Key follow the different steps described below:¶
Step 1: Initialization¶
Steps i: Actions performed for all intermediate domains(i), for i = n-1 to 2¶
Steps n: Actions performed to the source domain(1)¶
Finally, the Parent PCE MUST send a last PCInitiate message to its Child PCE(1) with an LSP Object containing an empty TE-PATH-BINDING TLV with the I flag set, ERO = {PKS(1), SL(2)} and End-Points = {S, BN-ex(1)}. In turn, Child PCE(1) MUST send a PCInitiate message to PCC node S with ERO equal to {ERO(1), [LK(2), SL(2)]} and End-Points Object = {S, BN-ex(1)}. This time, no TE-PATH-BINDING TLV is provided as the PCC S does not need to return a Stitching Label SL, because it is the head-end of the inter-domain path. A usual PCRpt message is sent back to PCE(1) by the PCC node S. In turn, Child PCE(1) sends a final PCRpt message to the Parent PCE with the PSLP-ID(1). PCE(1) MAY add {S, BN-ex(1)} in the RRO.¶
In case of error during path set up, PCRpt and/or PCErr messages MUST be used to signal the problem to the Parent PCE. In particular, if the new I flag of the TE-PATH-BINDING TLV defined in this document is not supported by the Child PCE or the PCC, the Child PCE, respectively the PCC, MUST return a PCErr message with Error-Type = "Binding label/SID failure" and Error-Value = "Unable to allocate a new binding label/SID" (as per section #12 of draft Binding Label / Segment Identifier (BSID) [I-D.ietf-pce-binding-label-sid]) to its Parent PCE respectively PCE.¶
If a PCE(i) receives a PCInitiate message from its Parent PCE without an TE-PATH-BINDING with the I flag set in the LSP, it MUST return a PCErr message with Error-Type = 24 (LSP instantiation error) and Error-Value = 1 (Unacceptable instantiation parameters) to its Parent PCE.¶
Following a PCInitiate message with an LSP containing an empty TE-PATH-BINDING TLV with the I flag set, if a Child PCE or a PCC returns no TE-PATH-BINDING TLV, or a TE-PATH-BINDING TLV without the I flag set, the Parent PCE, respectively the Child PCE, MUST return a PCErr message with Error-Type = "Binding label/SID failure" and Error-Value = "Unable to allocate a new binding label/SID".¶
In case of completion failure, the Parent PCE MUST send a PCInitate message (R flag set in the SRP Object as per [RFC8281]) to tear down this inter-domain path from the Child PCEs that already set up their respective part of the inter-domain path. Child PCE(i) MUST remove its local path by means of PCInitiate message with R flag set to 1 to its PCC BN-en(i) and send back a PCRpt message to the Parent PCE.¶
In case of error during path setup, PCRpt and or PCErr messages MUST be used to signal the problem to the neighbor PCE domain backward.¶
Taking the sample hierarchical domain topology example from [RFC6805] as the reference topology for the entirety of this section.¶
----------------------------------------------------------------- | Domain 5 | | ------- | | |P-PCE 5| | | ------- | | | | ---------------- ---------------- ---------------- | | | Domain 1 | | Domain 2 | | Domain 3 | | | | | | | | | | | | ------- | | ------- | | ------- | | | | |C-PCE 1| | | |C-PCE 2| | | |C-PCE 3| | | | | ------- | | ------- | | ------- | | | | | | | | | | | | ----| |---- ----| |---- | | | | |BN11+---+BN21| |BN23+---+BN31| | | | | - ----| |---- ----| |---- - | | | | |S| | | | | |D| | | | | - ----| |---- ----| |---- - | | | | |BN12+---+BN22| |BN24+---+BN32| | | | | ----| |---- ----| |---- | | | | | | | | | | | | ---- | | | | ---- | | | | |BN13| | | | | |BN33| | | | -----------+---- ---------------- ----+----------- | | \ / | | \ ---------------- / | | \ | | / | | \ |---- ----| / | | ----+BN41| |BN42+---- | | |---- ----| | | | | | | | ------- | | | | |C-PCE 4| | | | | ------- | | | | | | | | Domain 4 | | | ---------------- | | | ----------------------------------------------------------------- Figure 5: Hierarchical domain topology from RFC6805¶
Section 3.3.1 of [RFC8751] describes the per-domain stitched LSP mode and list all the steps needed. To support SL-based stitching, using the reference architecture described in the figure above, the steps are modified as follows (note that we do not use PKS in this example for simplicity):¶
Step 1: initialization¶
The P-PCE (PCE5) is requested to initiate a path. Steps 4 to 10 of section 4.6.2 of [RFC6805] are executed to determine the end-to-end path, which are split into per-domain paths, e.g. {S-BN41, BN41-BN33, BN33-D}.¶
Step 2: Path (BN33-D) at C-PCE3:¶
Step 3: Path (BN41-BN33) at C-PCE4¶
Step 3: Path (S-BN41) at C-PCE1¶
This section describes how inter-domain paths could be managed.¶
A PCE needs to know if its neighbor PCEs as well as PCCs are able to configure and provide a Stitching Label. The STITCHING-LABEL-PCE-CAPABILITY TLV is an optional TLV for use in the OPEN object for Stitching Label PCE capability advertisement. Its format is shown in the following figure:¶
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=TBD7 | Length=4 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Flags |I| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Figure 6: STITCHING-LABEL-PCE-CAPABILITY TLV Format¶
The Type (16 bits) of the TLV is TBD7. The Length field is 16 bits long and has a fixed value of 4.¶
The value comprises a single 32 bits "Flags" field:¶
I (INTER-DOMAIN-STITCHING-LABEL-CAPABILITY - 1 bit): if set to 1 by a PCE, the I flag indicates that the domain is supporting Stitching Label to set up inter-domain paths. When set by a PCC, the I flag indicates the the PCC is able to provide a Stitching Label as value of TE-PATH-BINDING TLV.¶
Unassigned bits are considered reserved. They MUST be set to 0 on transmission and MUST be ignored on receipt.¶
PCC MUST set the I flag when adding the Stitching Label Capability to the PCEP Open Message when establishing a PCEP session with a PCE.¶
A PCE MUST set the I flag when establishing a PCEP session with a neighbor PCE when adding Stitching Label Capability to the PCEP Open Message.¶
First, in order to manage inter-domain paths composed by the stitching or nesting of local paths, it is important to identify them. For this purpose, the PLSP-ID managed by the PCEs are combined to one provided by PCCs to form a global identifier as follow:¶
Further reference to the inter-domain path will use this PLSP-ID(i). In the Backward Recursive method, PCE(i) MUST replace the PLSP-ID(i) by PLSP-ID(i+1) in the PCUpd, PCRpt or PCinitiate message before propagating it to PCE(i+1); and PCE(i) MUST replace the PLSP-ID(i+1) by PLSP-ID(i) in the PCRpt message before propagating it to the PCE(i-1). In the Hierarchical method, the Parent PCE MUST use the corresponding PLSP-ID(i) of the Child PCE(i).¶
In case of failure, a PCE(i) will received PCRpt messages from its PCCs and neighbors PCE(i+1) to synchronize the Inter-domain paths. In addition, it may received PCInitiate messages from its previous neighbors PCE(i-1) to re-initiate its inter-domain path part. As the PCE(i) may loose the PLSP-ID association, a new association group (within Association Object) is used to ease the association of the different parts of the inter-domain path: the local part and the PCE-to-PCE part. The use of the Association Object is MANDATORY in the Backward Recursive method and OPTIONAL in the Hierarchical method.¶
For that purpose, a new Inter-Domain Association Type with value TBD4 is defined. The first PCE in the Backward Recursive chain (the one which received the initial request) MUST send the PCInitiate message with an Association Object as follows:¶
Subsequent PCE(i), for i = 2 to n, MUST send this Association Object as is to the local PCC and the neighbor PCE(i+1).¶
In case of error with the association group, a PCErr message MUST be raised with Error = 26 (Association Error) and Error value set accordingly. A new Error value TBD6 is defined to identify association of inter-domain paths.¶
In the Hierarchical method, the Parent PCE MAY act as the initiator of the Association and send to the Child PCEs an Association Object that follows the same rules as for the Backward Recursive method. In turn, Child PCEs MUST propagate the Association Object to the local PCCs as is.¶
For the Backward Recursive method, each domain manages their respective local path part of an inter-domain path independently of each other. In particular, Stitching Label(i) is managed by domain(i) and is of interest of domain(i-1) only. Thus, Stitching Label SL(i) is not supposed to be propagated to other domains. The same behavior apply to PLSP-ID(i). In the Hierarchical method, the Parent PCE MUST ensure the correct distribution of Stitching Label SL(i) to Child PCE(i-1). The PLSP-ID(i) is kept for the usage of the Parent PCE and thus is not propagated. Only the Association Object defined in section 5.2 is propagated if it is present.¶
If PCE(i) needs to modify its local path(i) with a PCUpd message to the PCC BN-en(i), once the PCRpt message received from the PCC BN-en(i), it MUST sends a new PCRpt message to advertise the modification. This message is targeted to its neighbor PCE(i-1) in the Backward Recursive method, respectively to the Parent PCE in the Hierarchical method. In this case PLSP-ID(i) is used to identify the inter-domain path. PCE(i-1), respectively the Parent PCE, MUST propagate the PCRpt message if the modification implies the upstream domain, e.g. if the PCRpt indicates that the Stitching Label SL(i) has changed.¶
PCE(1), respectively the Parent PCE, could modify the inter-domain path. For that purpose, it MUST send a PCUpd message to its neighbor PCEs, respectively Child PCE, using the PLSP-ID it received. Each PCE(i) MUST process the PCUpd message the same way they process the PCInitiate message as define in section 3.1 for the Backward Recursive method and in section 4.1 for the Hierarchical method.¶
In case a failure appear in domain(i), e.g. path becoming down, PCE(i) MUST sends a PCRpt message to its neighbor PCE(i-1), respectively its Parent PCE to advertise the problem in its local part of the inter-domain path. Once PCE(1), respectively the Parent PCE, receives this PCRpt message indicating that the path is down, it is up to the PCE(1), respectively the Parent PCE to take appropriate correction e.g. start a new path computation to update the ERO.¶
Modification of local paths, i.e. between BN-en(i) and BN-ex(i) is left for further study.¶
The tear-down of an inter-domain path is only possible by the inter-domain path initiator i.e. PCE(1). For the Backward Recursive method, a PCInitiate message with R flag set to 1, PLSP-ID set accordingly to section 5.1 and the Association Object with R flag set to 1, is sent by PCE(1) to PCE(n) through PCE(i), and processed the same way as described in section 3.1. For the Hierarchical method, a PCInitiate message with R flag set to 1 is sent by the Parent PCE to each Child PCE(i) with corresponding PLSP-ID(i), and processed according to section 4.1. Each domain PCE(i) is responsible to tear down its part of the path and the PCC MUST release both the Stitching label SL(i) in its L(F)IB and the path when it receives the PCInitiate message with the R flag set to 1 and the corresponding PLSP-ID(i). The Association Group MUST also be removed by the PCC and PCE(i).¶
The newly introduce Stitching Label SL serves to stitch or nest part of local paths to form an inter-domain path. Each domain is free to decide if the incoming path is stitched or nested and how the path is enforced, e.g. through RSVP-TE or Segment Routing. At the peering point, the Border Node BN-ex(i) MUST encapsulate the packet with the Stitching Label, i.e. the MPLS label prior to send them to the next Border Node BN-en(i+1). Thus, only IP/MPLS networks are supported by this specification.¶
During the instantiation procedure, if PCE(i) decides to reuse a local tunnel which is not yet part of an inter-domain tunnel, it SHOULD send a PCUpd message with an LSP containing an empty TE-PATH-BINDING TLV with the I flag set to 1 to the PCC BN-en(i), in order to request a Stitching Label SL(i), and new ERO(i) to add the Stitching Label SL(i+1) and the associated link to the previous ERO.¶
[RFC8453] describes framework for Abstraction and Control of TE Networks (ACTN), where each Physical Network Controller (PNC) is equivalent to C-PCE and the Multi-Domain Service Coordinator (MDSC) to the P-PCE. The per-domain stitched LSP as per the Hierarchical PCE architecture described in Section 3.3.1 and Section 4.1 of [RFC8751] is well suited for ACTN. The Stitching Label mechanism as described in this document is well suited for ACTN when per-domain LSPs need to be stitched to form an E2E tunnel or a VN Member. It is to be noted that certain VNs require isolation from other clients. The SL mechanism described in this document can be applicable to the VN isolation use-case by uniquely identifying the concatenated stitching labels across multi-domain only to a certain VN member or an E2E tunnel.¶
As each operator is free to enforce the tunnel with its technology choice, it is a local policy decision for PCE(i) to instantiate the local part of the end-to-end tunnel by either RSVP-TE or Segment Routing. The PST value 0 or 1 used in the PCinitiate message sent by the PCE(i) to the local PCC is determined by the local policy. How the local policy decision is set in the PCE is out of the scope of this document. This flexibility is allowed because the SL principle allows to mix (data plane) technologies between domains. For example, a domain(i) could use RSVP-TE while domain(i+1) uses SR. The SL could serve to stitch indifferently Segment Paths and RSVP-TE tunnels. Indeed, the SL will be part of the label stack in order to become the top label in the stack when reaching the BN-en(i+1). This SL could be swapped as usual if the next domain uses RSVP-TE tunnels. When the upstream domain uses an RSVP-TE tunnel, the SL will serve as a key for the BN-en(i+1) to determine which label stack it must use on top of the packet for a Segment Routing path. Finally, PCE(i) MUST completes accordingly ERO(i) with the identifier of Link(i+1): IP address of link between BN-ex(i) and BN-en(i+1) for RSVP-TE or EPE label of link between BN-ex(i) and BN-en(i+1) for Segment Routing.¶
If use cases for inter-AS are easily identifiable, this is less evident for inter-area. However, two scenarios have been identified:¶
Thus, the SL could be used to stitch or nest independent tunnels deployed through different IS-IS levels, even if there are controlled by the same PCE. IS-IS levels are considered as domains but under the control of the same PCE. In this scenario, there is no exchange between PCEs (it remains internal and implementation matter) and new TLVs are only applicable between the PCE and PCCs. The PCE requests to the different PCCs it identifies (i.e. BNs of the different IS-IS levels) to set up SLs and propagated them.¶
In large-scale networks, MSD could constraints the path computation in the possibility of path selection i.e. explicit expression of a path could exceeded the MSD. The SL could be used to split a too long explicit path regarding the MSD constraints. In this scenario, there is also no communications between PCEs and new TLVs are only used between PCE and PCCs.¶
When a domain(i) would groups into the same local path all traffic that enter into the domain through the same border node BN-en(i) and exit by the same border node BN-ex(i), it could be useful to identify the different inter-domain paths within this local path. Indeed, traffic entering in this nested local path could goes to different domains or different destination of the same domain. Thus, it is mandatory to keep them perfectly identifiable through a dedicated Stitching Label. In this case, PCE(i) proceeds as if it nested internal traffic. Nested tunnel MUST be created in top of existing inter-domain local path. Subsequent inter-domain local path will follow this nested local path. As a consequence, PCE(i) MUST NOT request a second Stitching Label(i) for an existing inter-domain local path.¶
Binding Label / Segment Identifier (BSID) [I-D.ietf-pce-binding-label-sid] defines the TE-PATH-BINDING TLV Flag field. IANA is requested to allocate new flag in the PCEP TE-PATH-BINDING TLV Flag field registry, as follows:¶
Bit | Description | Reference |
---|---|---|
1 | I (Inter-domain Binding Label/Segment Identifier) | This Document |
2 | S (Strictly steer traffic) | This Document |
PCE Association Group [RFC8697] defines the ASSOCIATION Object and requests that IANA creates a registry to manage the value of the Association Type value. IANA is requested to allocate a new code point in the PCEP ASSOCIATION GROUP TLV Association Type field registry, as follows:¶
Association Type | Description |
---|---|
TBD1 | Inter-domain Association Group |
IANA is requested to allocate code-points in the PCEP-ERROR Object Error Values registry for a new error-value of Error-Type 6 Mandatory Object Missing Error and new error-value of Error-Type 26 Association Error:¶
Error-Type | Error-Value | Description |
---|---|---|
6 | TBD2 | LSP TE-PATH-BINDING missing TLV |
26 | TBD3 | Error in association of Inter-domain LSPs |
IANA is requested to allocate a new TLV Type Indicator for the "Stitching Label PCE Capability" within the "PCEP TLV Type Indicators" sub-registry of the "Path Computation Element Protocol (PCEP) Numbers" registry:¶
Value | Description | Reference |
---|---|---|
TBD4 | STITCHING-LABEL-PCE-CAPABILITY | This Document |
IANA is requested to allocate a new sub-registry, named "STITCHING-LABEL-PCE-CAPABILITY TLV Flag Field", within the "Path Computation Element Protocol (PCEP) Numbers" registry, to manage the Flag field in the STITCHING-LABEL-PCE-CAPABILITY TLV of the PCEP OPEN object (class = 1). New values are assigned by Standards Action [RFC8126]. Each bit should be tracked with the following qualities:¶
Value | Description | Reference |
---|---|---|
31 | INTER-DOMAIN-STITCHING-CAPABILITY | This Document |
No modification of PCE protocol (PCEP) has been requested by this draft which does not introduce any issue regarding security. Concerning the PCEP session between PCEs, authors recommend to use the secured version of PCEP as defined in PCEPS [RFC8253] or use any other secured tunnel mechanism, e.g. IPsec tunnel to transport PCEP session between PCEs.¶
The authors want to thanks PCE's WG members, and in particular Dhruv Dhody who greatly contributed to the Hierarchical section of this document and Quan Xiong for his advice.¶
This work has been performed in the framework of the H2020-ICT-2014 project 5GEx (Grant Agreement no. 671636), which is partially funded by the European Commission. This information reflects the consortium's view, but neither the consortium nor the European Commission are liable for any use that may be done of the information contained therein.¶