PCE Working Group | S. Kuppani |
Internet-Draft | A. Sinha |
Intended status: Experimental | Huawei Technologies |
Expires: November 17, 2016 | May 16, 2016 |
PCEP Flowspec Synchronization Procedures.
draft-kuppani-pce-pcep-flowspec-sync-00
Dissemination of the traffic flow specifications was first introduced in the BGP protocol via RFC 5575. In order to distribute the flow specifications from PCE controller to network device without BGP protocol it is desirable to extend PCEP with flow specification information.
[I-D.li-pce-pcep-flowspec] specifies a set of extensions to PCEP to support dissemination of flow specifications. The extensions include the instantiation, updation and deletion of flow specifications.
Flow specifications downloaded to forwarding entries requires a reliable synchronization mechanism between the path computation clients (PCCs) and the PCE. This draft specify the flow specification synchronization mechanism for managing of flow specification (FLOwSPEC-DB) at node (PCC) aligning with FLOWSPEC-DB at PCE on initial session UP or session flap and specifies the required Path Computation Element Communication Protocol (PCEP) extensions.
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 http://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 November 17, 2016.
Copyright (c) 2016 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 (http://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 Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.
[I-D.li-pce-pcep-flowspec] specify the procedures and PCEP protocol extensions to support dissemination of flow specifications and includes the creation, updation and withdrawal of flow specifications via PCEP.
Flow specifications downloaded to forwarding entries requires a reliable synchronization mechanism between the path computation clients (PCCs) and the PCE. This draft specify the PCE maintenance of flow specification database per session, and describes the flow specification(FLOWSPEC-DB) synchronization mechanism for managing of flow specification database at node (PCC) aligning with flow specification database at PCE on initial session UP or session flap and specifies the required Path Computation Element Communication Protocol (PCEP) extensions.
This draft specify the optimizations for FLOWSPEC-DB synchronization and the corresponding PCEP procedures and extensions.
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 [RFC2119].
PCE MUST maintains the FLOWSPEC-DB for each PCEP session separately. The purpose of FLOWSPEC-DB synchronization is to make sure that the PCE's view of FLOWSPEC-DB matches with the PCC's FLOWSPEC-DB. The FLOWSPEC-DB synchronization MUST be performed from PCE to PCC immediately after the LSP state and label database synchronization. [I-D.ietf-pce-stateful-pce] describes the basic mechanism for LSP state synchronization. [I-D.ietf-pce-stateful-sync-optimizations] describes the optimizations for LSP state synchronization. [I-D.palle-pce-controller-labeldb-sync] describes the Label database synchronization.
By default a Full FLOWSPEC-DB is performed from PCE to PCC on Initial session UP or every session flap. see Section 3 for detail procedures.
But a Full FLOWSPEC-DB synchronization is not always necessary following a PCEP session restart and providing an Optimizations for FLOWSPEC-DB synchronization can result in significant savings in both control-plane data exchanges and the time it takes for the PCC to become fully operational.
Optimizations for FLOWSPEC-DB synchronization describes the need that both PCEP speakers support flowspec database version capability and maintain flowspec database version for each session. See Section 4 for detail procedures.
During Full FLOWSPEC-DB Synchronization, a PCE first takes a snapshot of the FLOWSPEC database for the session, then sends this snapshot to the PCC in a sequence of FlowSpec message (FlowSpec message defined in [I-D.li-pce-pcep-flowspec]). Each FlowSpec message sent during FLOWSPEC-DB Synchronization has the SYNC Flag in the SRP Object(see Section 5.1) set to 1.
The end of synchronization marker is a FlowSpec message with the SYNC Flag set to 0 for SRP Object with Flow ID equal to reserved value 0 in the FLOW object ([I-D.li-pce-pcep-flowspec]). If the PCE has no flow to synchronize, it will only send the end of synchronization marker.
A PCE SHOULD NOT send FlowSpec messages to a PCC before FLOWSPEC-DB Synchronization is complete.
Either the PCE or the PCC MAY terminate the session using the PCEP session termination procedures during the FLOWSPEC-DB synchronization phase. If the session is terminated, the PCC MUST clean up flow(s) it received from this PCE. The session reestablishment MUST be re-attempted as per the procedures defined in [RFC5440], including use of a back-off timer.
The PCC does not send positive acknowledgements for properly received flowspec database synchronization messages. It MUST respond with a PCErr message with Error-type TBD1 (Flow specification Database Synchronization Error) and Error-value 1 (indicating an error in processing the FlowSpec) if it encounters a problem with the Flow Update it received from the PCE and it MUST terminate the session.
If the PCE encounters a problem which prevents it from completing the flow transfer, it MUST send a PCErr message with Error-type TBD1 (Flow specification Database Synchronization Error) and Error-value 2 (indicating an internal PCE Error) to the PCC and terminate the session.
The successful FLOWSPEC-DB Synchronization sequence is shown in Figure 1.
+-+-+-+ +-+-+ |PCE | |PCC| +-+-+-+ +-+-+ | | |-----FlowSpec, SYNC=1------->| (Sync start) | | |-----FlowSpec, SYNC=1------->| | . | | . | | . | |-----FlowSpec, SYNC=1------->| | . | | . | | . | | | |-----FlowSpec, SYNC=0------->| (End of sync marker | | Flow Update | | FLOW ID =0) | | (Sync done)
Figure 1: Successful FLOWSPEC-DB synchronization
The sequence where the PCC fails during the FLOWSPEC-DB Synchronization phase is shown in Figure 2.
+-+-+-+ +-+-+ |PCE | |PCC| +-+-+-+ +-+-+ | | |--------FlowSpec, SYNC=1------->| (Sync start) | | |--------FlowSpec, SYNC=1------->| | . | | . | | . | |--------FlowSpec, SYNC=1------->| | | |---FlowSpec, SYNC=1 | | \ ,----PCErr ----| | \ / | | \/ | | /\ | | / `------------->| (Ignored) |<-----------` |
Figure 2: Failed FLOWSPEC-DB synchronization(PCC failure)
The sequence where the PCE fails during the FLOWSPEC-DB Synchronization phase is shown in Figure 3.
+-+-+-+ +-+-+ |PCE | |PCC| +-+-+-+ +-+-+ | | |-----FlowSpec, SYNC=1------->| (Sync start) | | |-----FlowSpec, SYNC=1------->| | . | | . | | . | |----------- PCErr=? -------->| | |
Figure 3: Failed FLOWSPEC-DB synchronization(PCE failure)
This section add some of the optimization mechanisms for FLOWSPEC-DB synchronization. By default, the full FLOWSPEC-DB synchronization is performed.
The FLOWSPEC-DB synchronization MAY be skipped following a PCEP session restart if there is no change in the FLOWSPEC-DB of the session at PCE, during the period prior to session re-initialization. To be able to make this determination, flows must be exchanged and maintained by both PCE and PCC during normal operation. This is accomplished by keeping track of the changes to the flow database, using a version tracking field called the Flowspec Database Version Number.
The Flowspec Database Version Number, carried in FLOWSPEC-DB-VERSION TLV (see Section 5.3), is owned by a PCE and it MUST be incremented by 1 for each successive change in the PCE's flowspec database. The Flowspec Database Version Number MUST start at 1 and may wrap around. Values 0 and 0xFFFFFFFFFFFFFFFF are reserved. If either of the two values are used during FLOWSPEC-DB synchronization, the PCC speaker receiving this node should send back a PCErr with Error-type TBD1 Error-value 3 'Received an invalid Flowspec Database Version Number', and close the PCEP session. Operations that trigger a change to the Flowspec database include an addition or deletion of flows that would trigger a flow update to the PCC.
FLOWSPEC-DB synchronization avoidance is advertised on a PCEP session during session startup using the INCLUDE-FLOWSPEC-DB-VERSION (I) bit in the PCE FlowSpec capability TLV (see Section 5.2). The PCEP peer MAY include the SPEAKER-ENTITY-ID TLV described in [I-D.ietf-pce-stateful-sync-optimizations] in the OPEN message to identify the peer in case of IP address change.
If both PCEP speakers set the I flag in the OPEN object's PCE FlowSpec Capability TLV to 1, the PCE MUST include the FLOWSPEC-DB-VERSION TLV in each FLOW object of the FlowSpec message. If the FLOWSPEC-DB-VERSION TLV is missing in a FlowSpec message, the PCC will generate an error with Error-Type 6 (mandatory object missing) and Error-Value TBD2 'FLOWSPEC-DB-VERSION TLV missing' and close the session. If FLOWSPEC-DB synchronization avoidance has not been enabled on a PCEP session, the PCE SHOULD NOT include the FLOWSPEC-DB-VERSION TLV in the FLOWSPEC Object and the PCC SHOULD ignore it were it to receive one.
If a PCC's flow specification database survived the restart of a PCEP session, the PCC will include the FLOWSPEC-DB-VERSION TLV in its OPEN object, and the TLV will contain the last Flowspec Database Version Number received on an Flow Update from the PCE in the previous PCEP session. If a PCE's Flowspec Database survived the restart of a PCEP session, the PCE will include the FLOWSPEC-DB-VERSION TLV in its OPEN object and the TLV will contain the latest Flowspec Database Version Number. If a PCEP speaker's flowspec database did not survive the restart of a PCEP session, the PCEP speaker MUST NOT include the FLOWSPEC-DB-VERSION TLV in the OPEN object.
If both PCEP speakers include the FLOWSPEC-DB-VERSION TLV in the OPEN Object and the TLV values match, the PCE MAY skip FLOWSPEC-DB synchronization. Otherwise, the PCE MUST perform full FLOWSPEC-DB synchronization (see Section 3) or incremental FLOWSPEC-DB synchronization (see Section 4.2) to the PCC, Incase, the PCE attempts to skip FLOWSPEC-DB synchronization, by setting the SYNC Flag to 0 on the first Flow Update from the PCE, the PCC MUST send back a PCErr with Error-type TBD1 (Flowspec Database Synchronization Error) and Error-value 4(Flowspec Database Version mismatch), and close the PCEP session.
If FLOWSPEC-DB synchronization is required, then prior to completing the initialization phase, the PCC MUST mark any flows in the flowspec database that were previously updated by the PCE as stale. When the PCE updates a flow during FLOWSPEC-DB synchronization, if the flow already exists in the flowspec database, the PCC MUST update the flowspec database and clear the stale marker from the flow. When it has finished FLOWSPEC-DB synchronization, the PCE MUST immediately send an end of synchronization marker. The end of synchronization marker is a Path Computation flowspec (FlowSpec) message with a SRP object containing the SYNC flag set to 0 (see Section 5.1) and Flow ID as 0 in the FLOW object. The FLOWSPEC-DB-VERSION TLV MUST be included in this FlowSpec message. On receiving this flow Update, the PCC MUST purge any flows from the flowspec database that are still marked as stale.
Note that a PCE/PCC MAY force FLOWSPEC-DB synchronization by not including the FLOWSPEC-DB-VERSION TLV in its OPEN object.
Figure 4 shows an example sequence where the FLOWSPEC-DB synchronization is skipped.
+-+-+-+ +-+-+ |PCE | |PCC| +-+-+-+ +-+-+ | ,----Open---| | / DBv=35 | |--Open--, / I=1 | | DBv=35 \ / | | I=1 \ / | | \/ | | /\ | | / `------------->| (OK to skip sync) (Skip sync) |<--------` | | . | | . | | . | | | |--FlowSpec,DBv=36,SYNC=0---->| (Regular | | FlowSpec Message) |--FlowSpec,DBv=37,SYNC=0---->| (Regular | | FlowSpec Message) |--FlowSpec,DBv=38,SYNC=0---->| | |
Figure 4: FLOWSPEC-DB synchronization Skipped
Figure 5 shows an example sequence where the FLOWSPEC-DB synchronization is performed due to flowspec database version mismatch during the PCEP session setup. Note that the same FLOWSPEC-DB synchronization sequence would happen if either the PCC or the PCE would not include the FLOWSPEC- DB-VERSION TLV in their respective Open messages.
+-+-+-+ +-+-+ |PCE | |PCC| +-+-+-+ +-+-+ | ,----Open---| | / DBv=35 | |--Open--, / I=1 | | DBv=39 \ / | | I=1 \ / | | \/ | | /\ | | / `------------->| (Expect sync) (Do sync) |<--------` | | | |--FlowSpec,DBv=39,SYNC=1---->| (Sync start) | . | | . | | . | |--FlowSpec,DBv=39,SYNC=0---->| (Sync done) | . |(Purge flow | . | if applicable) | . | |--FlowSpec,DBv=40,SYNC=0---->| (Regular | | FlowSpec Message) |--FlowSpec,DBv=41,SYNC=0---->| (Regular | | FlowSpec Message) |--FlowSpec,DBv=42,SYNC=0---->| | |
Figure 5: FLOWSPEC-DB synchronization Performed
Figure 6 shows an example sequence where the FLOWSPEC-DB synchronization is skipped, but because one or both PCEP speakers set the I Flag to 0, the PCE does not send FLOWSPEC-DB-VERSION TLVs in subsequent FlowSpec messages to the PCC. If the current PCEP session restarts, the PCEP speakers will have to perform full FLOWSPEC-DB synchronization, since the PCC does not know the PCE's latest Flowspec database Version Number information.
+-+-+-+ +-+-+ |PCE | |PCC| +-+-+-+ +-+-+ | ,----Open---| | / DBv=43 | |--Open--, / I=0 | | DBv=43 \ / | | I=0 \ / | | \/ | | /\ | | / `------------->| (OK to skip sync) (Skip sync) |<--------` | | . | | . | | . | |------FlowSpec,SYNC=0------->| (Regular | | FlowSpec Message) |------FlowSpec,SYNC=0------->| (Regular | | FlowSpec Message) |------FlowSpec,SYNC=0------->| | |
Figure 6: FLOWSPEC-DB Synchronization Skipped, no FLOWSPEC-DB-VERSION TLVs sent from PCE
If a PCC restarts and its Flowspec database survived, PCE with mismatched Flowspec Database Version Number will send all their Flows information (full FLOWSPEC-DB) to the PCC, even if only a small number of changes happened. It can take a long time and consume large communication channel bandwidth.
This section extends the idea to only synchronize the delta (changes) in case of Flowspec Database Version Number of both PCEP peers is non-zero and mismatch.
If both PCEP speakers include the FLOWSPEC-DB-VERSION TLV in the OPEN object and the FLOWSPEC-DB-VERSION TLV values match, the PCE MAY skip FLOWSPEC-DB synchronization. Otherwise, the PCE MUST perform FLOWSPEC-DB synchronization. Incremental flow specification database synchronization capability is advertised on a PCEP session during session startup using the DELTA-FLOWSPEC-SYNC-CAPABILITY (D) bit in the capabilities TLV (see Section 5.2). Instead of dumping full FLOWSPEC-DB to the PCC again, the PCE synchronizes the delta (changes) as described in Figure 7 when D flag and I flag is set to 1 by both PCC and PCE. Other combinations of D and I flags setting by PCC and PCE result in full FLOWSPEC-DB synchronization procedure as described in Section 3. The PCE MAY force a full FLOWSPEC-DB synchronization by setting the D flag to zero in the OPEN message.
+-+-+-+ +-+-+ |PCE | |PCC| +-+-+-+ +-+-+ | ,----Open---| | / DBv=35 | |--Open--, / I=1 | | DBv=39 \ / D=1 | | I=1 \ / | | D=1 \/ | | /\ | | / `------------->| (Expect Delta sync) (Do sync)|<--------` | (DONOT Purge Flow) (Delta) | | | | (Delta |--FlowSpec,DBv=39,SYNC=1---->| Sync starts) | . | | . | | . | | . | |--FlowSpec,DBv=39,SYNC=0---->| (Sync done) | | | | |--FlowSpec,DBv=40,SYNC=0---->| (Regular | | FlowSpec Message) |--FlowSpec,DBv=41,SYNC=0---->| (Regular | | FlowSpec Message) |--FlowSpec,DBv=42,SYNC=0---->| | |
Figure 7: Incremental Synchronization Procedure
As per Section 4.1, the Flowspec Database Version Number is incremented each time a change is made to the PCE's flowspec database. Each flow is associated with the DB version at the time of its addition. This is needed to determine which flow and what information needs to be synchronized in incremental FLOWSPEC-DB synchronization.
It is not necessary for a PCE to store a complete history of flowspec database change, but rather remember the flows (including flow addition and deletion) that happened between the PCEP session(s) restart in order to carry out incremental FLOWSPEC-DB synchronization. After the synchronization procedure finishes, the PCE can dump this history information. In the example shown in Figure 7, the PCE needs to store the flow changes that happened between DB Version 35 to 39 and synchronizes these changes only when performing incremental flow update. So a PCE needs to remember at least the flow changes that happened after an existing PCEP session with a PCC goes down to have any chance of doing incremental synchronization when the session is re-established.
If a PCE finds out it does not have sufficient information to complete incremental synchronization after advertising incremental FLOWSPEC-DB synchronization capability, it MUST send a PCErr with Error-Type TBD1 and Error-Value 5 'A PCE indicates to a PCC that it can not complete the FLOWSPEC-DB synchronization' and terminate the session. The PCE SHOULD re-establish the session with the D bit set to 0 in the OPEN message.
The other procedures and error checks remain unchanged from the full FLOWSPEC-DB synchronization defined in Section 3.
SRP object is defined in [I-D.ietf-pce-stateful-pce] and extended in [I-D.ietf-pce-pce-initiated-lsp]. Further, [I-D.palle-pce-controller-labeldb-sync] added a 'SYNC' flag (S bit) to specify the LABEL-DB synchronization operation. This document extends the usage of the same bit for the FLOWSPEC-DB synchronization operation as well.
The S Flag MUST be set to 1 on each FlowSpec Message sent from a PCE during FLOWSPEC-DB Synchronization. The S Flag MUST be set to 0 in other messages sent from the PCE.
PCE FlowSpec Capability TLV is defined in [I-D.li-pce-pcep-flowspec]. This draft defines a new 'INCLUDE-FLOWSPEC-DB-VERSION' flag (I bit) to specify the flowspec database version capability and 'DELTA-FLOWSPEC-SYNC-CAPABILITY' to specify the incremental flowspec database synchronization capability.
The format of the PCE FlowSpec Capability TLV is shown Figure 8:
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 | Length=4 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Value |D|I| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 8: PCE FlowSpec Capability TLV
I (INCLUDE-FLOWSPEC-DB-VERSION - 1 bit): if set to 1 by both PCEP Speakers, the PCE will include the FLOWSPEC-DB-VERSION TLV in each FLOWSPEC Object.
D (DELTA-FLOWSPEC-SYNC-CAPABILITY - 1 bit): if set to 1 by a PCEP speaker, it indicates that the PCEP speaker allows incremental (delta) FLOWSPEC-DB synchronization.
The Flowspec Database Version Number (FLOWSPEC-DB-VERSION) TLV is an optional TLV that MAY be included in the OPEN object and the FLOWSPEC object.
The format of the FLOWSPEC-DB-VERSION TLV 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=[TBD3] | Length=8 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | FlowSpec Database Version Number | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 9: FLOWSPEC-DB-VERSION TLV format
The type of the TLV is [TBD3] and it has a fixed length of 8 octets. The value contains a 64-bit unsigned integer, representing the FlowSpec Database Version Number.
TBD
TBD
TBD
This document borrows some of the structure and text from [I-D.ietf-pce-stateful-sync-optimizations] and [I-D.palle-pce-controller-labeldb-sync], and would like to thanks the authors and contributors of the document.
[RFC2119] | Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997. |
[RFC5440] | Vasseur, JP. and JL. Le Roux, "Path Computation Element (PCE) Communication Protocol (PCEP)", RFC 5440, DOI 10.17487/RFC5440, March 2009. |
[I-D.ietf-pce-stateful-pce] | Crabbe, E., Minei, I., Medved, J. and R. Varga, "PCEP Extensions for Stateful PCE", Internet-Draft draft-ietf-pce-stateful-pce-14, March 2016. |
[I-D.zhao-pce-pcep-extension-for-pce-controller] | Zhao, Q., Li, Z., Dhody, D. and C. Zhou, "PCEP Procedures and Protocol Extensions for Using PCE as a Central Controller (PCECC) of LSPs", Internet-Draft draft-zhao-pce-pcep-extension-for-pce-controller-03, March 2016. |
[I-D.li-pce-pcep-flowspec] | Li, Z., Chen, X. and S. Zhuang, "PCEP Extension for Flow Specification", Internet-Draft draft-li-pce-pcep-flowspec-00, February 2016. |
[I-D.ietf-pce-pce-initiated-lsp] | Crabbe, E., Minei, I., Sivabalan, S. and R. Varga, "PCEP Extensions for PCE-initiated LSP Setup in a Stateful PCE Model", Internet-Draft draft-ietf-pce-pce-initiated-lsp-05, October 2015. |
[I-D.ietf-pce-stateful-sync-optimizations] | Crabbe, E., Minei, I., Medved, J., Varga, R., Zhang, X. and D. Dhody, "Optimizations of Label Switched Path State Synchronization Procedures for a Stateful PCE", Internet-Draft draft-ietf-pce-stateful-sync-optimizations-05, April 2016. |
[I-D.palle-pce-controller-labeldb-sync] | Palle, U. and D. Dhody, "LABEL-DB Synchronization Procedures for a PCE as a central controller(PCECC)", Internet-Draft draft-palle-pce-controller-labeldb-sync-00, May 2016. |
Dhruv Dhody Huawei Technologies Divyashree Techno Park, Whitefield Bangalore, Karnataka 560066 India Email: dhruv.ietf@gmail.com Udayasree Palle Huawei Technologies Divyashree Techno Park, Whitefield Bangalore, Karnataka 560066 India Email: udayasree.palle@huawei.com