4 This guide contains information on how to use the OpenDaylight Path Computation Element Configuration Protocol (PCEP) plugin.
5 The user should learn about PCEP basic concepts, supported capabilities, configuration and operations.
13 This section provides a high-level overview of the PCEP, SDN use-cases and OpenDaylight implementation.
15 .. contents:: Contents
19 Path Computation Element Communication Protocol
20 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
21 The Path Computation Element (PCE) Communication Protocol (PCEP) is used for communication between a Path Computation Client (PCC) and a PCE in context of MPLS and GMPLS Traffic Engineering (TE) Label Switched Paths (LSPs).
22 This interaction include path computation requests and computation replies.
23 The PCE operates on a network graph, built from the (Traffic Engineering Database) TED, in order to compute paths based on the path computation request issued by the PCC.
24 The path computation request includes the source and destination of the path and set of constrains to be applied during the computation.
25 The PCE response contains the computed path or the computation failure reason.
26 The PCEP operates on top the TCP, which provides reliable communication.
28 .. figure:: ./images/bgpcep/pcep.png
32 PCE-based architecture.
36 The Path Computation Element perfectly fits into the centralized SDN controller architecture.
37 The PCE's knowledge of the availability of network resources (i.e. TED) and active LSPs awareness (LSP-DB) allows to perform automated application-driven network operations:
40 * Resource defragmentation
41 * Link failure restoration
42 * Auto-bandwidth adjustment
43 * Bandwidth scheduling
44 * Shared Risk Link Group (SRLG) diversity maintenance
46 OpenDaylight PCEP plugin
47 ^^^^^^^^^^^^^^^^^^^^^^^^
48 The OpenDaylight PCEP plugin provides all basic service units necessary to build-up a PCE-based controller.
49 In addition, it offers LSP management functionality for Active Stateful PCE - the cornerstone for majority of PCE-enabled SDN solutions.
50 It consists of the following components:
53 * PCEP session handling
55 * Active Stateful PCE LSP Operations
57 .. figure:: ./images/bgpcep/pcep-plugin.png
61 OpenDaylight PCEP plugin overview.
63 .. important:: The PCEP plugin does not provide path computational functionality and does not build TED.
65 List of supported capabilities
66 ''''''''''''''''''''''''''''''
68 * `RFC5440 <https://tools.ietf.org/html/rfc5440>`_ - Path Computation Element (PCE) Communication Protocol (PCEP)
69 * `RFC5455 <https://tools.ietf.org/html/rfc5455>`_ - Diffserv-Aware Class-Type Object for the Path Computation Element Communication Protocol
70 * `RFC5520 <https://tools.ietf.org/html/rfc5520>`_ - Preserving Topology Confidentiality in Inter-Domain Path Computation Using a Path-Key-Based Mechanism
71 * `RFC5521 <https://tools.ietf.org/html/rfc5521>`_ - Extensions to the Path Computation Element Communication Protocol (PCEP) for Route Exclusions
72 * `RFC5541 <https://tools.ietf.org/html/rfc5541>`_ - Encoding of Objective Functions in the Path Computation Element Communication Protocol (PCEP)
73 * `RFC5557 <https://tools.ietf.org/html/rfc5557>`_ - Path Computation Element Communication Protocol (PCEP) Requirements and Protocol Extensions in Support of Global Concurrent Optimization
74 * `RFC5886 <https://tools.ietf.org/html/rfc5886>`_ - A Set of Monitoring Tools for Path Computation Element (PCE)-Based Architecture
75 * `RFC7470 <https://tools.ietf.org/html/rfc7470>`_ - Conveying Vendor-Specific Constraints in the Path Computation Element Communication Protocol
76 * `RFC7896 <https://tools.ietf.org/html/rfc7896>`_ - Update to the Include Route Object (IRO) Specification in the Path Computation Element Communication Protocol (PCEP)
77 * `draft-ietf-pce-stateful-pce <https://tools.ietf.org/html/draft-ietf-pce-stateful-pce-16>`_ - PCEP Extensions for Stateful PCE
79 * `draft-ietf-pce-pce-initiated-lsp <https://tools.ietf.org/html/draft-ietf-pce-pce-initiated-lsp-07>`_ - PCEP Extensions for PCE-initiated LSP Setup in a Stateful PCE Model
80 * `draft-ietf-pce-segment-routing <https://tools.ietf.org/html/draft-ietf-pce-segment-routing-07>`_ - PCEP Extension for segment routing
81 * `draft-ietf-pce-lsp-setup-type <https://tools.ietf.org/html/draft-ietf-pce-lsp-setup-type-03>`_ - PCEP Extension for path setup type
82 * `draft-ietf-pce-stateful-sync-optimizations <https://tools.ietf.org/html/draft-ietf-pce-stateful-sync-optimizations-05>`_ - Optimizations of Label Switched Path State Synchronization Procedures for a Stateful PCE
83 * `draft-sivabalan-pce-binding-label-sid <https://tools.ietf.org/html/draft-sivabalan-pce-binding-label-sid-01>`_ - Carrying Binding Label/Segment-ID in PCE-based Networks
85 * `draft-ietf-pce-pceps <https://tools.ietf.org/html/draft-ietf-pce-pceps-10>`_ - Secure Transport for PCEP
89 This section explains how to install PCEP plugin.
91 1. Install PCEP feature - ``odl-bgpcep-pcep``.
92 Also, for sake of this sample, it is required to install RESTCONF.
93 In the Karaf console, type command:
95 .. code-block:: console
97 feature:install odl-restconf odl-bgpcep-pcep
99 2. The PCEP plugin contains a default configuration, which is applied after the feature starts up.
100 One instance of PCEP plugin is created (named *pcep-topology*), and its presence can be verified via REST:
102 **URL:** ``restconf/operational/network-topology:network-topology/topology/pcep-topology``
110 <topology xmlns="urn:TBD:params:xml:ns:yang:network-topology">
111 <topology-id>pcep-topology</topology-id>
113 <topology-pcep xmlns="urn:opendaylight:params:xml:ns:yang:topology:pcep"></topology-pcep>
119 The PCEP extension for Stateful PCE brings a visibility of active LSPs to PCE, in order to optimize path computation, while considering individual LSPs and their interactions.
120 This requires state synchronization mechanism between PCE and PCC.
121 Moreover, Active Stateful PCE is capable to address LSP parameter changes to the PCC.
123 .. contents:: Contents
129 This capability is enabled by default. No additional configuration is required.
131 MD5 authentication configuration
132 ''''''''''''''''''''''''''''''''
133 The OpenDaylight PCEP implementation is supporting TCP MD5 for authentication.
134 Sample configuration below shows how to set authentication password for a particular PCC.
135 It is required to install ``odl-netconf-connector-ssh`` feature first.
137 **URL:** ``/restconf/config/network-topology:network-topology/topology/topology-netconf/node/controller-config/yang-ext:mount/config:modules/module/odl-pcep-topology-provider-cfg:pcep-topology-provider/pcep-topology``
141 **Content-Type:** ``application/xml``
147 :emphasize-lines: 26,27
149 <module xmlns="urn:opendaylight:params:xml:ns:yang:controller:config">
150 <type xmlns:x="urn:opendaylight:params:xml:ns:yang:controller:pcep:topology:provider">x:pcep-topology-provider</type>
151 <name>pcep-topology</name>
152 <data-provider xmlns="urn:opendaylight:params:xml:ns:yang:controller:pcep:topology:provider">
153 <type xmlns:x="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">x:binding-async-data-broker</type>
154 <name>pingpong-binding-data-broker</name>
156 <dispatcher xmlns="urn:opendaylight:params:xml:ns:yang:controller:pcep:topology:provider">
157 <type xmlns:x="urn:opendaylight:params:xml:ns:yang:controller:pcep">x:pcep-dispatcher</type>
158 <name>global-pcep-dispatcher</name>
160 <rpc-registry xmlns="urn:opendaylight:params:xml:ns:yang:controller:pcep:topology:provider">
161 <type xmlns:x="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">x:binding-rpc-registry</type>
162 <name>binding-rpc-broker</name>
164 <scheduler xmlns="urn:opendaylight:params:xml:ns:yang:controller:pcep:topology:provider">
165 <type xmlns:x="urn:opendaylight:params:xml:ns:yang:controller:programming:spi">x:instruction-scheduler</type>
166 <name>global-instruction-scheduler</name>
168 <stateful-plugin xmlns="urn:opendaylight:params:xml:ns:yang:controller:pcep:topology:provider">
169 <type>pcep-topology-stateful</type>
170 <name>stateful07</name>
172 <topology-id xmlns="urn:opendaylight:params:xml:ns:yang:controller:pcep:topology:provider">pcep-topology</topology-id>
173 <client xmlns="urn:opendaylight:params:xml:ns:yang:controller:pcep:topology:provider">
174 <address>43.43.43.43</address>
175 <password>topsecret</password>
179 @line 26: **address** - A PCC IP address.
181 @line 27: **password** - MD5 authentication phrase.
183 .. warning:: The PCE (*pcep-topology-provider*) configuration is going to be changed in Carbon release - moving to configuration datastore.
187 The *LSP State Database* (LSP-DB) contains an information about all LSPs and their attributes.
188 The LSP state is synchronized between the PCC and PCE.
189 First, initial LSP state synchronization is performed once the session between PCC and PCE is established in order to learn PCC's LPSs.
190 This step is a prerequisite to following LSPs manipulation operations.
193 .. figure:: ./images/bgpcep/pcep-sync.png
195 :alt: LSP State synchronization
197 LSP State Synchronization.
202 .. code-block:: console
204 path-computation-client
205 +--ro reported-lsp* [name]
208 | +--ro lsp-id rsvp:lsp-id
210 | | +--ro processing-rule? boolean
211 | | +--ro ignore? boolean
213 | | +--ro loose boolean
214 | | +--ro (subobject-type)?
215 | | +--:(as-number-case)
216 | | | +--ro as-number
217 | | | +--ro as-number inet:as-number
218 | | +--:(ip-prefix-case)
219 | | | +--ro ip-prefix
220 | | | +--ro ip-prefix inet:ip-prefix
223 | | | +--ro uni-directional boolean
224 | | | +--ro (label-type)?
225 | | | +--:(type1-label-case)
226 | | | | +--ro type1-label
227 | | | | +--ro type1-label uint32
228 | | | +--:(generalized-label-case)
229 | | | | +--ro generalized-label
230 | | | | +--ro generalized-label binary
231 | | | +--:(waveband-switching-label-case)
232 | | | +--ro waveband-switching-label
233 | | | +--ro end-label uint32
234 | | | +--ro start-label uint32
235 | | | +--ro waveband-id uint32
238 | | | +--ro srlg-id srlg-id
239 | | +--:(unnumbered-case)
240 | | | +--ro unnumbered
241 | | | +--ro router-id uint32
242 | | | +--ro interface-id uint32
246 | | | +--ro mandatory? boolean
247 | | | +--ro attribute enumeration
248 | | | +--ro (subobject-type)?
249 | | | +--:(as-number-case)
250 | | | | +--ro as-number
251 | | | | +--ro as-number inet:as-number
252 | | | +--:(ip-prefix-case)
253 | | | | +--ro ip-prefix
254 | | | | +--ro ip-prefix inet:ip-prefix
255 | | | +--:(label-case)
257 | | | | +--ro uni-directional boolean
258 | | | | +--ro (label-type)?
259 | | | | +--:(type1-label-case)
260 | | | | | +--ro type1-label
261 | | | | | +--ro type1-label uint32
262 | | | | +--:(generalized-label-case)
263 | | | | | +--ro generalized-label
264 | | | | | +--ro generalized-label binary
265 | | | | +--:(waveband-switching-label-case)
266 | | | | +--ro waveband-switching-label
267 | | | | +--ro end-label uint32
268 | | | | +--ro start-label uint32
269 | | | | +--ro waveband-id uint32
270 | | | +--:(srlg-case)
272 | | | | +--ro srlg-id srlg-id
273 | | | +--:(unnumbered-case)
274 | | | +--ro unnumbered
275 | | | +--ro router-id uint32
276 | | | +--ro interface-id uint32
277 | | +--:(path-key-case)
279 | | +--ro pce-id pce-id
280 | | +--ro path-key path-key
282 | | +--ro processing-rule? boolean
283 | | +--ro ignore? boolean
284 | | +--ro hold-priority? uint8
285 | | +--ro setup-priority? uint8
286 | | +--ro local-protection-desired? boolean
287 | | +--ro label-recording-desired? boolean
288 | | +--ro se-style-desired? boolean
289 | | +--ro session-name? string
290 | | +--ro include-any? attribute-filter
291 | | +--ro exclude-any? attribute-filter
292 | | +--ro include-all? attribute-filter
294 | | +--ro vendor-information-tlv*
295 | | +--ro enterprise-number? iana:enterprise-number
296 | | +--ro (enterprise-specific-information)?
298 | | +--ro processing-rule? boolean
299 | | +--ro ignore? boolean
300 | | +--ro bandwidth? netc:bandwidth
301 | +--ro reoptimization-bandwidth
302 | | +--ro processing-rule? boolean
303 | | +--ro ignore? boolean
304 | | +--ro bandwidth? netc:bandwidth
307 | | +--ro processing-rule? boolean
308 | | +--ro ignore? boolean
309 | | +--ro metric-type uint8
310 | | +--ro bound? boolean
311 | | +--ro computed? boolean
312 | | +--ro value? ieee754:float32
314 | | +--ro processing-rule? boolean
315 | | +--ro ignore? boolean
317 | | +--ro loose boolean
318 | | +--ro (subobject-type)?
319 | | +--:(as-number-case)
320 | | | +--ro as-number
321 | | | +--ro as-number inet:as-number
322 | | +--:(ip-prefix-case)
323 | | | +--ro ip-prefix
324 | | | +--ro ip-prefix inet:ip-prefix
327 | | | +--ro uni-directional boolean
328 | | | +--ro (label-type)?
329 | | | +--:(type1-label-case)
330 | | | | +--ro type1-label
331 | | | | +--ro type1-label uint32
332 | | | +--:(generalized-label-case)
333 | | | | +--ro generalized-label
334 | | | | +--ro generalized-label binary
335 | | | +--:(waveband-switching-label-case)
336 | | | +--ro waveband-switching-label
337 | | | +--ro end-label uint32
338 | | | +--ro start-label uint32
339 | | | +--ro waveband-id uint32
342 | | | +--ro srlg-id srlg-id
343 | | +--:(unnumbered-case)
344 | | | +--ro unnumbered
345 | | | +--ro router-id uint32
346 | | | +--ro interface-id uint32
350 | | | +--ro mandatory? boolean
351 | | | +--ro attribute enumeration
352 | | | +--ro (subobject-type)?
353 | | | +--:(as-number-case)
354 | | | | +--ro as-number
355 | | | | +--ro as-number inet:as-number
356 | | | +--:(ip-prefix-case)
357 | | | | +--ro ip-prefix
358 | | | | +--ro ip-prefix inet:ip-prefix
359 | | | +--:(label-case)
361 | | | | +--ro uni-directional boolean
362 | | | | +--ro (label-type)?
363 | | | | +--:(type1-label-case)
364 | | | | | +--ro type1-label
365 | | | | | +--ro type1-label uint32
366 | | | | +--:(generalized-label-case)
367 | | | | | +--ro generalized-label
368 | | | | | +--ro generalized-label binary
369 | | | | +--:(waveband-switching-label-case)
370 | | | | +--ro waveband-switching-label
371 | | | | +--ro end-label uint32
372 | | | | +--ro start-label uint32
373 | | | | +--ro waveband-id uint32
374 | | | +--:(srlg-case)
376 | | | | +--ro srlg-id srlg-id
377 | | | +--:(unnumbered-case)
378 | | | +--ro unnumbered
379 | | | +--ro router-id uint32
380 | | | +--ro interface-id uint32
381 | | +--:(path-key-case)
383 | | +--ro pce-id pce-id
384 | | +--ro path-key path-key
386 | | +--ro processing-rule? boolean
387 | | +--ro ignore? boolean
389 | | +--ro protection-available? boolean
390 | | +--ro protection-in-use? boolean
391 | | +--ro (subobject-type)?
392 | | +--:(ip-prefix-case)
393 | | | +--ro ip-prefix
394 | | | +--ro ip-prefix inet:ip-prefix
397 | | | +--ro uni-directional boolean
398 | | | +--ro (label-type)?
399 | | | | +--:(type1-label-case)
400 | | | | | +--ro type1-label
401 | | | | | +--ro type1-label uint32
402 | | | | +--:(generalized-label-case)
403 | | | | | +--ro generalized-label
404 | | | | | +--ro generalized-label binary
405 | | | | +--:(waveband-switching-label-case)
406 | | | | +--ro waveband-switching-label
407 | | | | +--ro end-label uint32
408 | | | | +--ro start-label uint32
409 | | | | +--ro waveband-id uint32
410 | | | +--ro global? boolean
411 | | +--:(unnumbered-case)
412 | | | +--ro unnumbered
413 | | | +--ro router-id uint32
414 | | | +--ro interface-id uint32
415 | | +--:(path-key-case)
417 | | +--ro pce-id pce-id
418 | | +--ro path-key path-key
420 | | +--ro processing-rule? boolean
421 | | +--ro ignore? boolean
424 | | +--ro mandatory? boolean
425 | | +--ro attribute enumeration
426 | | +--ro (subobject-type)?
427 | | +--:(as-number-case)
428 | | | +--ro as-number
429 | | | +--ro as-number inet:as-number
430 | | +--:(ip-prefix-case)
431 | | | +--ro ip-prefix
432 | | | +--ro ip-prefix inet:ip-prefix
435 | | | +--ro uni-directional boolean
436 | | | +--ro (label-type)?
437 | | | +--:(type1-label-case)
438 | | | | +--ro type1-label
439 | | | | +--ro type1-label uint32
440 | | | +--:(generalized-label-case)
441 | | | | +--ro generalized-label
442 | | | | +--ro generalized-label binary
443 | | | +--:(waveband-switching-label-case)
444 | | | +--ro waveband-switching-label
445 | | | +--ro end-label uint32
446 | | | +--ro start-label uint32
447 | | | +--ro waveband-id uint32
450 | | | +--ro srlg-id srlg-id
451 | | +--:(unnumbered-case)
453 | | +--ro router-id uint32
454 | | +--ro interface-id uint32
456 | | +--ro processing-rule? boolean
457 | | +--ro ignore? boolean
460 | | +--ro vendor-information-tlv*
461 | | +--ro enterprise-number? iana:enterprise-number
462 | | +--ro (enterprise-specific-information)?
464 | +--ro processing-rule? boolean
465 | +--ro ignore? boolean
466 | +--ro class-type class-type
469 | +--ro processing-rule? boolean
470 | +--ro ignore? boolean
472 | | +--ro lsp-error-code
473 | | | +--ro error-code? uint32
474 | | +--ro lsp-identifiers
475 | | | +--ro lsp-id? rsvp:lsp-id
476 | | | +--ro tunnel-id? rsvp:tunnel-id
477 | | | +--ro (address-family)?
478 | | | +--:(ipv4-case)
480 | | | | +--ro ipv4-tunnel-sender-address inet:ipv4-address
481 | | | | +--ro ipv4-extended-tunnel-id rsvp:ipv4-extended-tunnel-id
482 | | | | +--ro ipv4-tunnel-endpoint-address inet:ipv4-address
483 | | | +--:(ipv6-case)
485 | | | +--ro ipv6-tunnel-sender-address inet:ipv6-address
486 | | | +--ro ipv6-extended-tunnel-id rsvp:ipv6-extended-tunnel-id
487 | | | +--ro ipv6-tunnel-endpoint-address inet:ipv6-address
488 | | +--ro rsvp-error-spec
489 | | | +--ro (error-type)?
490 | | | +--:(rsvp-case)
491 | | | | +--ro rsvp-error
492 | | | +--:(user-case)
493 | | | +--ro user-error
494 | | +--ro symbolic-path-name
495 | | | +--ro path-name? symbolic-path-name
497 | | | +--ro enterprise-number? iana:enterprise-number
498 | | | +--ro (vendor-payload)?
499 | | +--ro vendor-information-tlv*
500 | | | +--ro enterprise-number? iana:enterprise-number
501 | | | +--ro (enterprise-specific-information)?
502 | | +--ro path-binding
503 | | x--ro binding-type? uint8
504 | | x--ro binding-value? binary
505 | | +--ro (binding-type-value)?
507 | | | +--ro mpls-label? netc:mpls-label
508 | | +--:(mpls-label-entry)
509 | | +--ro label? netc:mpls-label
510 | | +--ro traffic-class? uint8
511 | | +--ro bottom-of-stack? boolean
512 | | +--ro time-to-live? uint8
513 | +--ro plsp-id? plsp-id
514 | +--ro delegate? boolean
515 | +--ro sync? boolean
516 | +--ro remove? boolean
517 | +--ro administrative? boolean
518 | +--ro operational? operational-status
519 +--ro path-setup-type
524 The LSP-DB is accessible via RESTCONF.
525 The PCC's LSPs are stored in the ``pcep-topology`` while the session is active.
526 In a next example, there is one PCEP session with PCC identified by its IP address (*43.43.43.43*) and one reported LSP (*foo*).
528 **URL:** ``/restconf/operational/network-topology:network-topology/topology/pcep-topology/node/pcc:%2F%2F43.43.43.43``
536 :emphasize-lines: 2,4,5,8,12,14,15,16,17,18,20,24,25,26,28,29,32,36
539 <node-id>pcc://43.43.43.43</node-id>
540 <path-computation-client>
541 <ip-address>43.43.43.43</ip-address>
542 <state-sync>synchronized</state-sync>
545 <lsp-update-capability>true</lsp-update-capability>
551 <operational>up</operational>
554 <create>false</create>
555 <administrative>true</administrative>
556 <remove>false</remove>
557 <delegate>true</delegate>
561 <ipv4-tunnel-sender-address>43.43.43.43</ipv4-tunnel-sender-address>
562 <ipv4-tunnel-endpoint-address>39.39.39.39</ipv4-tunnel-endpoint-address>
563 <ipv4-extended-tunnel-id>39.39.39.39</ipv4-extended-tunnel-id>
565 <tunnel-id>1</tunnel-id>
569 <path-name>Zm9v</path-name>
570 </symbolic-path-name>
577 <ip-prefix>201.20.160.40/32</ip-prefix>
583 <ip-prefix>195.20.160.39/32</ip-prefix>
589 <ip-prefix>39.39.39.39/32</ip-prefix>
594 </path-computation-client>
597 @line 2: **node-id** The PCC identifier.
599 @line 4: **ip-address** IP address of the PCC.
601 @line 5: **state-sync** Synchronization status of the PCC's LSPs. The *synchronized* indicates the State Synchronization is done.
603 @line 8: **lsp-update-capability** - Indicates that PCC allows LSP modifications.
605 @line 12: **name** - Textual representation of LPS's name.
607 @line 14: **operational** - Represent operational status of the LSP:
609 * *down* - not active.
611 * *active* - up and carrying traffic.
612 * *going-down* - LSP is being torn down, resources are being released.
613 * *going-up* - LSP is being signaled.
615 @line 15: **sync** - The flag set by PCC during LSPs State Synchronization.
617 @line 16: **plsp-id** - A PCEP-specific identifier for the LSP. It is assigned by PCC and it is constant for a lifetime of a PCEP session.
619 @line 17: **create** - The *false* indicates that LSP is PCC-initiated.
621 @line 18: **administrative** - The flag indicates target operational status of the LSP.
623 @line 20: **delegate** - The delegate flag indicates that the PCC is delegating the LSP to the PCE.
625 @line 24: **ipv4-tunnel-sender-address** - Contains the sender node's IP address.
627 @line 25: **ipv4-tunnel-endpoint-address** - Contains the egress node's IP address.
629 @line 26: **ipv4-extended-tunnel-id** - The *Extended Tunnel ID* identifier.
631 @line 28: **tunnel-id** - The *Tunnel ID* identifier.
633 @line 29: **lsp-id** - The *LSP ID* identifier.
635 @line 32: **path-name** - The symbolic name for the LSP.
637 @line 36: **ero** - The *Explicit Route Object* is encoding the path of the TE LSP through the network.
641 The LSP control delegations is an mechanism, where PCC grants to a PCE the temporary right in order to modify LSP attributes.
642 The PCC can revoke the delegation or the PCE may waive the delegation at any time.
643 The LSP control is delegated to at most one PCE at the same time.
645 .. figure:: ./images/bgpcep/pcep-delegation-return.png
647 :alt: Returning a Delegation
649 Returning a Delegation.
653 Following RPC example illustrates a request for the LSP delegation give up:
655 **URL:** ``/restconf/operations/network-topology-pcep:update-lsp``
659 **Content-Type:** ``application/xml``
665 :emphasize-lines: 2,3,6,10
668 <node>pcc://43.43.43.43</node>
671 <lsp xmlns:stateful="urn:opendaylight:params:xml:ns:yang:pcep:ietf:stateful">
672 <delegate>false</delegate>
673 <administrative>true</administrative>
676 <path-name>Zm9v</path-name>
677 </symbolic-path-name>
681 <network-topology-ref xmlns:topo="urn:TBD:params:xml:ns:yang:network-topology">/topo:network-topology/topo:topology[topo:topology-id="pcep-topology"]</network-topology-ref>
684 @line 2: **node** The PCC identifier.
686 @line 3: **name** The name of the LSP.
688 @line 6: **delegate** - Delegation flag set *false* in order to return the LSP delegation.
690 @line 10: **path-name** - The Symbolic Path Name TLV must be present when sending a request to give up the delegation.
694 The LSP Update Request is an operation where a PCE requests a PCC to update attributes of an LSP and to rebuild the LSP with updated attributes.
695 In order to update LSP, the PCE must hold a LSP delegation.
696 The LSP update is done in *make-before-break* fashion - first, new LSP is initiated and then the old LSP is torn down.
698 .. figure:: ./images/bgpcep/pcep-update.png
700 :alt: Active Stateful PCE LSP Update
702 Active Stateful PCE LSP Update.
706 Following RPC example shows a request for the LSP update:
708 **URL:** ``/restconf/operations/network-topology-pcep:update-lsp``
712 **Content-Type:** ``application/xml``
718 :emphasize-lines: 2,3,6,7,9
720 <input xmlns="urn:opendaylight:params:xml:ns:yang:topology:pcep">
721 <node>pcc://43.43.43.43</node>
724 <lsp xmlns="urn:opendaylight:params:xml:ns:yang:pcep:ietf:stateful">
725 <delegate>true</delegate>
726 <administrative>true</administrative>
732 <ip-prefix>200.20.160.41/32</ip-prefix>
738 <ip-prefix>196.20.160.39/32</ip-prefix>
744 <ip-prefix>39.39.39.39/32</ip-prefix>
749 <network-topology-ref xmlns:topo="urn:TBD:params:xml:ns:yang:network-topology">/topo:network-topology/topo:topology[topo:topology-id="pcep-topology"]</network-topology-ref>
752 @line 2: **node** The PCC identifier.
754 @line 3: **name** The name of the LSP to be updated.
756 @line 6: **delegate** - Delegation flag set *true* in order to keep the LSP control.
758 @line 7: **administrative** - Desired administrative status of the LSP is active.
760 @line 9: **ero** - This LSP attribute is changed.
762 PCE-initiated LSP Setup
763 ^^^^^^^^^^^^^^^^^^^^^^^
764 The PCEP Extension for PCE-initiated LSP Setup allows PCE to request a creation and deletion of LSPs.
768 This capability is enabled by default. No additional configuration is required.
772 The PCE can request LSP creation.
773 The LSP instantiation is done by sending an LSP Initiate Message to PCC.
774 The PCC assign delegation to PCE which triggered creation.
775 PCE-initiated LSPs are identified by *Create* flag.
777 .. figure:: ./images/bgpcep/pcep-initiate.png
779 :alt: LSP instantiation
785 Following RPC example shows a request for the LSP initiation:
787 **URL:** ``/restconf/operations/network-topology-pcep:add-lsp``
791 **Content-Type:** ``application/xml``
797 :emphasize-lines: 2,3,8,14
799 <input xmlns="urn:opendaylight:params:xml:ns:yang:topology:pcep">
800 <node>pcc://43.43.43.43</node>
801 <name>update-tunel</name>
803 <lsp xmlns="urn:opendaylight:params:xml:ns:yang:pcep:ietf:stateful">
804 <delegate>true</delegate>
805 <administrative>true</administrative>
809 <source-ipv4-address>43.43.43.43</source-ipv4-address>
810 <destination-ipv4-address>39.39.39.39</destination-ipv4-address>
817 <ip-prefix>201.20.160.40/32</ip-prefix>
823 <ip-prefix>195.20.160.39/32</ip-prefix>
829 <ip-prefix>39.39.39.39/32</ip-prefix>
834 <network-topology-ref xmlns:topo="urn:TBD:params:xml:ns:yang:network-topology">/topo:network-topology/topo:topology[topo:topology-id="pcep-topology"]</network-topology-ref>
837 @line 2: **node** The PCC identifier.
839 @line 3: **name** The name of the LSP to be created.
841 @line 8: **endpoints-obj** - The *END-POINT* Object is mandatory for an instantiation request of an RSVP-signaled LSP. It contains source and destination addresses for provisioning the LSP.
843 @line 14: **ero** - The *ERO* object is mandatory for LSP initiation request.
847 The PCE may request a deletion of PCE-initiated LSPs.
848 The PCE must be delegation holder for this particular LSP.
850 .. figure:: ./images/bgpcep/pcep-deletion.png
858 Following RPC example shows a request for the LSP deletion:
860 **URL:** ``/restconf/operations/network-topology-pcep:remove-lsp``
864 **Content-Type:** ``application/xml``
870 :emphasize-lines: 2,3
872 <input xmlns="urn:opendaylight:params:xml:ns:yang:topology:pcep">
873 <node>pcc://43.43.43.43</node>
874 <name>update-tunel</name>
875 <network-topology-ref xmlns:topo="urn:TBD:params:xml:ns:yang:network-topology">/topo:network-topology/topo:topology[topo:topology-id="pcep-topology"]</network-topology-ref>
878 @line 2: **node** The PCC identifier.
880 @line 3: **name** The name of the LSP to be removed.
882 PCE-initiated LSP Delegation
883 ''''''''''''''''''''''''''''
884 The PCE-initiated LSP control is delegated to the PCE which requested the initiation.
885 The PCC cannot revoke delegation of PCE-initiated LSP.
886 When PCE returns delegation for such LSP or PCE fails, then the LSP become orphan and can be removed by a PCC after some time.
887 The PCE may ask for a delegation of the orphan LSP.
889 .. figure:: ./images/bgpcep/pcep-revoke-delegation.png
891 :alt: LSP re-delegation
893 Orphan PCE-initiated LSP - control taken by PCE.
897 Following RPC example illustrates a request for the LSP delegation:
899 **URL:** ``/restconf/operations/network-topology-pcep:update-lsp``
903 **Content-Type:** ``application/xml``
909 :emphasize-lines: 2,3,6,10
912 <node>pcc://43.43.43.43</node>
913 <name>update-tunel</name>
915 <lsp xmlns:stateful="urn:opendaylight:params:xml:ns:yang:pcep:ietf:stateful">
916 <delegate>true</delegate>
917 <administrative>true</administrative>
920 <path-name>dXBkYXRlLXR1bmVs</path-name>
921 </symbolic-path-name>
925 <network-topology-ref xmlns:topo="urn:TBD:params:xml:ns:yang:network-topology">/topo:network-topology/topo:topology[topo:topology-id="pcep-topology"]</network-topology-ref>
928 @line 2: **node** The PCC identifier.
930 @line 3: **name** The name of the LSP.
932 @line 6: **delegate** - *Delegation* flag set *true* in order to take the LSP delegation.
934 @line 10: **path-name** - The *Symbolic Path Name* TLV must be present when sending a request to take a delegation.
938 The PCEP Extensions for Segment Routing (SR) allow a stateful PCE to compute and initiate TE paths in SR networks.
939 The SR path is defined as an order list of *segments*.
940 Segment Routing architecture can be directly applied to the MPLS forwarding plane without changes.
941 Segment Identifier (SID) is encoded as a MPLS label.
945 This capability is enabled by default.
946 In PCEP-SR draft version 6, SR Explicit Route Object/Record Route Object subobjects IANA code points change was proposed.
947 In order to use the latest code points, a configuration should be changed in following way:
949 **URL:** ``/restconf/config/pcep-segment-routing-app-config:pcep-segment-routing-app-config``
953 **Content-Type:** ``application/xml``
960 <pcep-segment-routing-config xmlns="urn:opendaylight:params:xml:ns:yang:controller:pcep:segment-routing-app-config">
961 <iana-sr-subobjects-type>true</iana-sr-subobjects-type>
962 </pcep-segment-routing-config>
964 LSP Operations for PCEP SR
965 ''''''''''''''''''''''''''
966 The PCEP SR extension defines new ERO subobject - *SR-ERO subobject* capable of carrying a SID.
968 .. code-block:: console
971 +---- c-flag? boolean
972 +---- m-flag? boolean
973 +---- sid-type? sid-type
977 | +---- ip-address inet:ip-address
979 | +---- local-ip-address inet:ip-address
980 | +---- remote-ip-address inet:ip-address
981 +--:(unnumbered-adjacency)
982 +---- local-node-id uint32
983 +---- local-interface-id uint32
984 +---- remote-node-id uint32
985 +---- remote-interface-id uint32
989 Following RPC example illustrates a request for the SR-TE LSP creation:
991 **URL:** ``/restconf/operations/network-topology-pcep:add-lsp``
995 **Content-Type:** ``application/xml``
1001 :emphasize-lines: 16,21,22,23
1003 <input xmlns="urn:opendaylight:params:xml:ns:yang:topology:pcep">
1004 <node>pcc://43.43.43.43</node>
1005 <name>sr-path</name>
1007 <lsp xmlns="urn:opendaylight:params:xml:ns:yang:pcep:ietf:stateful">
1008 <delegate>true</delegate>
1009 <administrative>true</administrative>
1013 <source-ipv4-address>43.43.43.43</source-ipv4-address>
1014 <destination-ipv4-address>39.39.39.39</destination-ipv4-address>
1017 <path-setup-type xmlns="urn:opendaylight:params:xml:ns:yang:pcep:ietf:stateful">
1022 <loose>false</loose>
1023 <sid-type xmlns="urn:opendaylight:params:xml:ns:yang:pcep:segment:routing">ipv4-node-id</sid-type>
1024 <m-flag xmlns="urn:opendaylight:params:xml:ns:yang:pcep:segment:routing">true</m-flag>
1025 <sid xmlns="urn:opendaylight:params:xml:ns:yang:pcep:segment:routing">24001</sid>
1026 <ip-address xmlns="urn:opendaylight:params:xml:ns:yang:pcep:segment:routing">39.39.39.39</ip-address>
1030 <network-topology-ref xmlns:topo="urn:TBD:params:xml:ns:yang:network-topology">/topo:network-topology/topo:topology[topo:topology-id="pcep-topology"]</network-topology-ref>
1033 @line 16: **path-setup-type** - Set *1* for SR-TE LSP
1035 @line 21: **ipv4-node-id** - The SR-ERO subobject represents *IPv4 Node ID* NAI.
1037 @line 22: **m-flag** - The SID value represents an MPLS label.
1039 @line 23: **sid** - The Segment Identifier.
1043 Following RPC example illustrates a request for the SR-TE LSP update including modified path:
1045 **URL:** ``/restconf/operations/network-topology-pcep:update-lsp``
1047 **Method:** ``POST``
1049 **Content-Type:** ``application/xml``
1056 <input xmlns="urn:opendaylight:params:xml:ns:yang:topology:pcep">
1057 <node>pcc://43.43.43.43</node>
1058 <name>update-tunnel</name>
1060 <lsp xmlns="urn:opendaylight:params:xml:ns:yang:pcep:ietf:stateful">
1061 <delegate>true</delegate>
1062 <administrative>true</administrative>
1064 <path-setup-type xmlns="urn:opendaylight:params:xml:ns:yang:pcep:ietf:stateful">
1069 <loose>false</loose>
1070 <sid-type xmlns="urn:opendaylight:params:xml:ns:yang:pcep:segment:routing">ipv4-node-id</sid-type>
1071 <m-flag xmlns="urn:opendaylight:params:xml:ns:yang:pcep:segment:routing">true</m-flag>
1072 <sid xmlns="urn:opendaylight:params:xml:ns:yang:pcep:segment:routing">24002</sid>
1073 <ip-address xmlns="urn:opendaylight:params:xml:ns:yang:pcep:segment:routing">200.20.160.41</ip-address>
1076 <loose>false</loose>
1077 <sid-type xmlns="urn:opendaylight:params:xml:ns:yang:pcep:segment:routing">ipv4-node-id</sid-type>
1078 <m-flag xmlns="urn:opendaylight:params:xml:ns:yang:pcep:segment:routing">true</m-flag>
1079 <sid xmlns="urn:opendaylight:params:xml:ns:yang:pcep:segment:routing">24001</sid>
1080 <ip-address xmlns="urn:opendaylight:params:xml:ns:yang:pcep:segment:routing">39.39.39.39</ip-address>
1084 <network-topology-ref xmlns:topo="urn:TBD:params:xml:ns:yang:network-topology">/topo:network-topology/topo:topology[topo:topology-id="pcep-topology"]</network-topology-ref>
1087 LSP State Synchronization Optimization Procedures
1088 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1089 This extension bring optimizations for state synchronization:
1091 * State Synchronization Avoidance
1092 * Incremental State Synchronization
1093 * PCE-triggered Initial Synchronization
1094 * PCE-triggered Re-synchronization
1098 This capability is enabled by default. No additional configuration is required.
1100 State Synchronization Avoidance
1101 '''''''''''''''''''''''''''''''
1102 The State Synchronization Avoidance procedure is intended to skip state synchronization if the state has survived and not changed during session restart.
1104 .. figure:: ./images/bgpcep/pcep-sync-skipped.png
1108 State Synchronization Skipped.
1110 Incremental State Synchronization
1111 '''''''''''''''''''''''''''''''''
1112 The Incremental State Synchronization procedure is intended to do incremental (delta) state synchronization when possible.
1114 .. figure:: ./images/bgpcep/pcep-sync-incremental.png
1116 :alt: Sync incremental
1118 Incremental Synchronization Procedure.
1120 PCE-triggered Initial Synchronization
1121 '''''''''''''''''''''''''''''''''''''
1122 The PCE-triggered Initial Synchronization procedure is intended to do let PCE control the timing of the initial state synchronization.
1124 .. figure:: ./images/bgpcep/pcep-sync-initial.png
1128 PCE-triggered Initial State Synchronization Procedure.
1132 Following RPC example illustrates a request for the initial synchronization:
1134 **URL:** ``/restconf/operations/network-topology-pcep:trigger-sync``
1136 **Method:** ``POST``
1138 **Content-Type:** ``application/xml``
1145 <input xmlns="urn:opendaylight:params:xml:ns:yang:topology:pcep">
1146 <node>pcc://43.43.43.43</node>
1147 <network-topology-ref xmlns:topo="urn:TBD:params:xml:ns:yang:network-topology">/topo:network-topology/topo:topology[topo:topology-id="pcep-topology"]</network-topology-ref>
1150 PCE-triggered Re-synchronization
1151 ''''''''''''''''''''''''''''''''
1152 The PCE-triggered Re-synchronization: To let PCE re-synchronize the state for sanity check.
1154 .. figure:: ./images/bgpcep/pcep-re-sync.png
1158 PCE-triggered Re-synchronization Procedure.
1162 Following RPC example illustrates a request for the LSP re-synchronization:
1164 **URL:** ``/restconf/operations/network-topology-pcep:trigger-sync``
1166 **Method:** ``POST``
1168 **Content-Type:** ``application/xml``
1176 <input xmlns="urn:opendaylight:params:xml:ns:yang:topology:pcep">
1177 <node>pcc://43.43.43.43</node>
1178 <name>update-lsp</name>
1179 <network-topology-ref xmlns:topo="urn:TBD:params:xml:ns:yang:network-topology">/topo:network-topology/topo:topology[topo:topology-id="pcep-topology"]</network-topology-ref>
1182 @line 3: **name** - The LSP name. If this parameter is omitted, re-synchronization is requested for all PCC's LSPs.
1187 PCEP Karaf Console (odl-bgpcep-pcep-cli) provides a CLI feature to read session statistics per node.
1189 .. code-block:: bash
1192 opendaylight-user@root> pcep:node-state -topology-id pcep-topology -node-id pcc://43.43.43.43
1198 The PCC Mock is a stand-alone Java application purposed to simulate a PCC(s).
1199 The simulator is capable to report sample LSPs, respond to delegation, LSP management operations and synchronization optimization procedures.
1200 This application is not part of the OpenDaylight Karaf distribution, however it can be downloaded from OpenDaylight's Nexus (use latest release version):
1202 ``https://nexus.opendaylight.org/content/repositories/opendaylight.release/org/opendaylight/bgpcep/pcep-pcc-mock``
1206 The application can be run from command line:
1208 .. code-block:: console
1210 java -jar pcep-pcc-mock-*-executable.jar
1213 with optional input parameters:
1215 .. code-block:: console
1217 --local-address <Address:Port> (optional, default 127.0.0.1)
1218 The first PCC IP address. If more PCCs are required, the IP address will be incremented. Port number can be optionally specified.
1220 --remote-address <Address1:Port1,Address2:Port2,Address3:Port3,...> (optional, default 127.0.0.1:4189)
1221 The list of IP address for the PCE servers. Port number can be optionally specified, otherwise default port number 4189 is used.
1223 --pcc <N> (optional, default 1)
1224 Number of mocked PCC instances.
1226 --lsp <N> (optional, default 1)
1227 Number of tunnels (LSPs) reported per PCC, might be zero.
1229 --pcerr (optional flag)
1230 If the flag is present, response with PCErr, otherwise PCUpd.
1232 --log-level <LEVEL> (optional, default INFO)
1233 Set logging level for pcc-mock.
1235 -d, --deadtimer <0..255> (optional, default 120)
1236 DeadTimer value in seconds.
1238 -ka, --keepalive <0.255> (optional, default 30)
1239 KeepAlive timer value in seconds.
1241 --password <password> (optional)
1242 If the password is present, it is used in TCP MD5 signature, otherwise plain TCP is used.
1244 --reconnect <seconds> (optional)
1245 If the argument is present, the value in seconds, is used as a delay before each new reconnect (initial connect or connection re-establishment) attempt.
1246 The number of reconnect attempts is unlimited. If the argument is omitted, pcc-mock is not trying to reconnect.
1248 --redelegation-timeout <seconds> (optional, default 0)
1249 The timeout starts when LSP delegation is returned or PCE fails, stops when LSP is re-delegated to PCE.
1250 When timeout expires, LSP delegation is revoked and held by PCC.
1252 --state-timeout <seconds> (optional, default -1 (disabled))
1253 The timeout starts when LSP delegation is returned or PCE fails, stops when LSP is re-delegated to PCE.
1254 When timeout expires, PCE-initiated LSP is removed.
1256 --state-sync-avoidance <disconnect_after_x_seconds> <reconnect_after_x_seconds> <dbVersion>
1257 Synchronization avoidance capability enabled.
1258 - disconnect_after_x_seconds: seconds that will pass until disconnections is forced. If set to smaller number than 1, disconnection wont be performed.
1259 - reconnect_after_x_seconds: seconds that will pass between disconnection and new connection attempt. Only happens if disconnection has been performed.
1260 - dbVersion: dbVersion used in new Open and must be always equal or bigger than LSP. If equal than LSP skip synchronization will be performed,
1261 if not full synchronization will be performed taking in account new starting dbVersion desired.
1262 --incremental-sync-procedure <disconnect_after_x_seconds> <reconnect_after_x_seconds> <dbVersion>
1263 Incremental synchronization capability enabled.
1264 - dbVersion: dbVersion used in new Open and must be always bigger than LSP. Incremental synchronization will be performed taking in account new starting dbVersion desired.
1266 --triggered-initial-sync
1267 PCE-triggered synchronization capability enabled. Can be combined combined with state-sync-avoidance/incremental-sync-procedure.
1270 PCE-triggered re-synchronization capability enabled.
1272 Data Change Counter Tool
1273 ^^^^^^^^^^^^^^^^^^^^^^^^
1275 Data Change Counter tool registers a Data Change Listener to a specified topology's subtree.
1276 This will allow us to know the quantity of changes produced under it, with each data change event counter will be incremented.
1280 Installing data change counter tool
1282 .. code-block:: console
1284 feature:install odl-restconf odl-bgpcep-data-change-counter
1288 Once we set the configuration, a new data change counter will be created and registers to example-linkstate-topology.
1290 .. important:: **Clustering** - Each Counter Identifier should be unique.
1292 **URL:** ``/restconf/config/odl-data-change-counter-config:data-change-counter-config/data-change-counter``
1296 **Content-Type:** ``application/xml``
1302 :emphasize-lines: 2,3
1304 <data-change-counter-config xmlns="urn:opendaylight:params:xml:ns:yang:bgpcep:data-change-counter-config">
1305 <counter-id>data-change-counter</counter-id>
1306 <topology-name>example-linkstate-topology</topology-name>
1307 </data-change-counter-config>
1309 @line 2: **Counter Id** - Unique counter change identifier.
1311 @line 3: **Topology Name** - An identifier for a topology.
1316 Counter state for topology
1318 **URL:** ``/restconf/operational/data-change-counter:data-change-counter/counter/data-change-counter``
1326 :emphasize-lines: 2,3
1328 <counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter">
1329 <id>data-change-counter</id>
1333 @line 2: **Counter Id** - Unique counter change identifier.
1335 @line 3: **Count** - Number of changes under registered topology's subtree.
1339 This section offers advices in a case OpenDaylight PCEP plugin is not working as expected.
1341 .. contents:: Contents
1345 PCEP is not working...
1346 ^^^^^^^^^^^^^^^^^^^^^^
1347 * First of all, ensure that all required features are installed, local PCE and remote PCC configuration is correct.
1349 To list all installed features in OpenDaylight use the following command at the Karaf console:
1351 .. code-block:: console
1355 * Check OpenDaylight Karaf logs:
1359 .. code-block:: console
1363 or open log file: ``data/log/karaf.log``
1365 Possibly, a reason/hint for a cause of the problem can be found there.
1367 * Try to minimize effect of other OpenDaylight features, when searching for a reason of the problem.
1369 * Try to set DEBUG severity level for PCEP logger via Karaf console commands, in order to collect more information:
1371 .. code-block:: console
1373 log:set DEBUG org.opendaylight.protocol.pcep
1375 .. code-block:: console
1377 log:set DEBUG org.opendaylight.bgpcep.pcep
1381 Before you report a bug, check `BGPCEP Bugzilla <https://bugs.opendaylight.org/buglist.cgi?list_id=65849&product=bgpcep&resolution=--->`_ to ensure same/similar bug is not already filed there.
1383 Write an e-mail to bgpcep-users@lists.opendaylight.org and provide following information:
1385 #. State OpenDaylight version
1387 #. Describe your use-case and provide as much details related to PCEP as possible
1389 #. Steps to reproduce
1391 #. Attach Karaf log files, optionally packet captures, REST input/output
1395 * `A Path Computation Element (PCE)-Based Architecture <https://tools.ietf.org/html/rfc4655>`_
1396 * `Path Computation Element (PCE) Communication Protocol Generic Requirements <https://tools.ietf.org/html/rfc4657>`_
1397 * `Unanswered Questions in the Path Computation Element Architecture <https://tools.ietf.org/html/rfc7399>`_
1398 * `A PCE-Based Architecture for Application-Based Network Operations <https://tools.ietf.org/html/rfc7491>`_
1399 * `Framework for PCE-Based Inter-Layer MPLS and GMPLS Traffic Engineering <https://tools.ietf.org/html/rfc5623>`_
1400 * `Applicability of a Stateful Path Computation Element (PCE) <https://tools.ietf.org/html/draft-ietf-pce-stateful-pce-app-07>`_