1 .. _pcep-user-guide-active-stateful-pce:
5 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.
6 This requires state synchronization mechanism between PCE and PCC.
7 Moreover, Active Stateful PCE is capable to address LSP parameter changes to the PCC.
15 This capability is enabled by default. No additional configuration is required.
17 Speaker Entity identifier
18 '''''''''''''''''''''''''
19 The Speaker Entity Identifier is an optional
20 TLV that may be included in the OPEN Object when a PCEP speaker
21 wishes to determine if state synchronization can be skipped when a
22 PCEP session is restarted.
24 **URL:** ``/restconf/config/network-topology:network-topology/topology/pcep-topology/node/43.43.43.43``
26 **RFC8040 URL:** ``/rests/data/network-topology:network-topology/topology=pcep-topology/node=43.43.43.43``
34 **Content-Type:** ``application/xml``
42 <node xmlns="urn:TBD:params:xml:ns:yang:network-topology">
43 <node-id>43.43.43.43</node-id>
44 <session-config xmlns="urn:opendaylight:params:xml:ns:yang:topology:pcep:config">
45 <speaker-entity-id-value xmlns="urn:opendaylight:params:xml:ns:yang:topology:pcep:sync:optimizations:config">AQIDBA==</speaker-entity-id-value>
49 @line 2: **address** - A PCC IP address.
51 @line 4: **Speaker Entity Identifier** - The Speaker Entity identifier assigned to PCEP Node.
55 **Content-Type:** ``application/json``
65 "node-id": "43.43.43.43",
66 "topology:pcep:config:session-config": {
67 "topology:pcep:sync:optimizations:config:speaker-entity-id-value": "AQIDBA=="
72 @line 3: **address** - A PCC IP address.
74 @line 5: **Speaker Entity Identifier** - The Speaker Entity identifier assigned to PCEP Node.
76 MD5 authentication configuration
77 ''''''''''''''''''''''''''''''''
78 The OpenDaylight PCEP implementation supports TCP MD5 for authentication.
79 The sample configuration below shows how to set authentication password for a particular PCC.
81 **URL:** ``/restconf/config/network-topology:network-topology/topology/pcep-topology/node/43.43.43.43``
83 **RFC8040 URL:** ``/rests/data/network-topology:network-topology/topology=pcep-topology/node=43.43.43.43``
91 **Content-Type:** ``application/xml``
99 <node xmlns="urn:TBD:params:xml:ns:yang:network-topology">
100 <node-id>43.43.43.43</node-id>
101 <session-config xmlns="urn:opendaylight:params:xml:ns:yang:topology:pcep:config">
102 <password>topsecret</password>
106 @line 2: **address** - A PCC IP address.
108 @line 4: **password** - MD5 authentication phrase.
112 **Content-Type:** ``application/json``
118 :emphasize-lines: 3,5
122 "node-id": "43.43.43.43",
123 "topology:pcep:config:session-config": {
124 "password": "topsecret"
129 @line 3: **address** - A PCC IP address.
131 @line 5: **password** - MD5 authentication phrase.
135 The *LSP State Database* (LSP-DB) contains an information about all LSPs and their attributes.
136 The LSP state is synchronized between the PCC and PCE.
137 First, initial LSP state synchronization is performed once the session between PCC and PCE is established in order to learn PCC's LPSs.
138 This step is a prerequisite to following LSPs manipulation operations.
141 .. figure:: ./images/pcep-sync.png
143 :alt: LSP State synchronization
145 LSP State Synchronization.
150 .. code-block:: console
152 path-computation-client
153 +--ro reported-lsp* [name]
156 | +--ro lsp-id rsvp:lsp-id
158 | | +--ro processing-rule? boolean
159 | | +--ro ignore? boolean
161 | | +--ro loose boolean
162 | | +--ro (subobject-type)?
163 | | +--:(as-number-case)
164 | | | +--ro as-number
165 | | | +--ro as-number inet:as-number
166 | | +--:(ip-prefix-case)
167 | | | +--ro ip-prefix
168 | | | +--ro ip-prefix inet:ip-prefix
171 | | | +--ro uni-directional boolean
172 | | | +--ro (label-type)?
173 | | | +--:(type1-label-case)
174 | | | | +--ro type1-label
175 | | | | +--ro type1-label uint32
176 | | | +--:(generalized-label-case)
177 | | | | +--ro generalized-label
178 | | | | +--ro generalized-label binary
179 | | | +--:(waveband-switching-label-case)
180 | | | +--ro waveband-switching-label
181 | | | +--ro end-label uint32
182 | | | +--ro start-label uint32
183 | | | +--ro waveband-id uint32
186 | | | +--ro srlg-id srlg-id
187 | | +--:(unnumbered-case)
188 | | | +--ro unnumbered
189 | | | +--ro router-id uint32
190 | | | +--ro interface-id uint32
194 | | | +--ro mandatory? boolean
195 | | | +--ro attribute enumeration
196 | | | +--ro (subobject-type)?
197 | | | +--:(as-number-case)
198 | | | | +--ro as-number
199 | | | | +--ro as-number inet:as-number
200 | | | +--:(ip-prefix-case)
201 | | | | +--ro ip-prefix
202 | | | | +--ro ip-prefix inet:ip-prefix
203 | | | +--:(label-case)
205 | | | | +--ro uni-directional boolean
206 | | | | +--ro (label-type)?
207 | | | | +--:(type1-label-case)
208 | | | | | +--ro type1-label
209 | | | | | +--ro type1-label uint32
210 | | | | +--:(generalized-label-case)
211 | | | | | +--ro generalized-label
212 | | | | | +--ro generalized-label binary
213 | | | | +--:(waveband-switching-label-case)
214 | | | | +--ro waveband-switching-label
215 | | | | +--ro end-label uint32
216 | | | | +--ro start-label uint32
217 | | | | +--ro waveband-id uint32
218 | | | +--:(srlg-case)
220 | | | | +--ro srlg-id srlg-id
221 | | | +--:(unnumbered-case)
222 | | | +--ro unnumbered
223 | | | +--ro router-id uint32
224 | | | +--ro interface-id uint32
225 | | +--:(path-key-case)
227 | | +--ro pce-id pce-id
228 | | +--ro path-key path-key
230 | | +--ro processing-rule? boolean
231 | | +--ro ignore? boolean
232 | | +--ro hold-priority? uint8
233 | | +--ro setup-priority? uint8
234 | | +--ro local-protection-desired? boolean
235 | | +--ro label-recording-desired? boolean
236 | | +--ro se-style-desired? boolean
237 | | +--ro session-name? string
238 | | +--ro include-any? attribute-filter
239 | | +--ro exclude-any? attribute-filter
240 | | +--ro include-all? attribute-filter
242 | | +--ro vendor-information-tlv*
243 | | +--ro enterprise-number? iana:enterprise-number
244 | | +--ro (enterprise-specific-information)?
246 | | +--ro processing-rule? boolean
247 | | +--ro ignore? boolean
248 | | +--ro bandwidth? netc:bandwidth
249 | +--ro reoptimization-bandwidth
250 | | +--ro processing-rule? boolean
251 | | +--ro ignore? boolean
252 | | +--ro bandwidth? netc:bandwidth
255 | | +--ro processing-rule? boolean
256 | | +--ro ignore? boolean
257 | | +--ro metric-type uint8
258 | | +--ro bound? boolean
259 | | +--ro computed? boolean
260 | | +--ro value? ieee754:float32
262 | | +--ro processing-rule? boolean
263 | | +--ro ignore? boolean
265 | | +--ro loose boolean
266 | | +--ro (subobject-type)?
267 | | +--:(as-number-case)
268 | | | +--ro as-number
269 | | | +--ro as-number inet:as-number
270 | | +--:(ip-prefix-case)
271 | | | +--ro ip-prefix
272 | | | +--ro ip-prefix inet:ip-prefix
275 | | | +--ro uni-directional boolean
276 | | | +--ro (label-type)?
277 | | | +--:(type1-label-case)
278 | | | | +--ro type1-label
279 | | | | +--ro type1-label uint32
280 | | | +--:(generalized-label-case)
281 | | | | +--ro generalized-label
282 | | | | +--ro generalized-label binary
283 | | | +--:(waveband-switching-label-case)
284 | | | +--ro waveband-switching-label
285 | | | +--ro end-label uint32
286 | | | +--ro start-label uint32
287 | | | +--ro waveband-id uint32
290 | | | +--ro srlg-id srlg-id
291 | | +--:(unnumbered-case)
292 | | | +--ro unnumbered
293 | | | +--ro router-id uint32
294 | | | +--ro interface-id uint32
298 | | | +--ro mandatory? boolean
299 | | | +--ro attribute enumeration
300 | | | +--ro (subobject-type)?
301 | | | +--:(as-number-case)
302 | | | | +--ro as-number
303 | | | | +--ro as-number inet:as-number
304 | | | +--:(ip-prefix-case)
305 | | | | +--ro ip-prefix
306 | | | | +--ro ip-prefix inet:ip-prefix
307 | | | +--:(label-case)
309 | | | | +--ro uni-directional boolean
310 | | | | +--ro (label-type)?
311 | | | | +--:(type1-label-case)
312 | | | | | +--ro type1-label
313 | | | | | +--ro type1-label uint32
314 | | | | +--:(generalized-label-case)
315 | | | | | +--ro generalized-label
316 | | | | | +--ro generalized-label binary
317 | | | | +--:(waveband-switching-label-case)
318 | | | | +--ro waveband-switching-label
319 | | | | +--ro end-label uint32
320 | | | | +--ro start-label uint32
321 | | | | +--ro waveband-id uint32
322 | | | +--:(srlg-case)
324 | | | | +--ro srlg-id srlg-id
325 | | | +--:(unnumbered-case)
326 | | | +--ro unnumbered
327 | | | +--ro router-id uint32
328 | | | +--ro interface-id uint32
329 | | +--:(path-key-case)
331 | | +--ro pce-id pce-id
332 | | +--ro path-key path-key
334 | | +--ro processing-rule? boolean
335 | | +--ro ignore? boolean
337 | | +--ro protection-available? boolean
338 | | +--ro protection-in-use? boolean
339 | | +--ro (subobject-type)?
340 | | +--:(ip-prefix-case)
341 | | | +--ro ip-prefix
342 | | | +--ro ip-prefix inet:ip-prefix
345 | | | +--ro uni-directional boolean
346 | | | +--ro (label-type)?
347 | | | | +--:(type1-label-case)
348 | | | | | +--ro type1-label
349 | | | | | +--ro type1-label uint32
350 | | | | +--:(generalized-label-case)
351 | | | | | +--ro generalized-label
352 | | | | | +--ro generalized-label binary
353 | | | | +--:(waveband-switching-label-case)
354 | | | | +--ro waveband-switching-label
355 | | | | +--ro end-label uint32
356 | | | | +--ro start-label uint32
357 | | | | +--ro waveband-id uint32
358 | | | +--ro global? boolean
359 | | +--:(unnumbered-case)
360 | | | +--ro unnumbered
361 | | | +--ro router-id uint32
362 | | | +--ro interface-id uint32
363 | | +--:(path-key-case)
365 | | +--ro pce-id pce-id
366 | | +--ro path-key path-key
368 | | +--ro processing-rule? boolean
369 | | +--ro ignore? boolean
372 | | +--ro mandatory? boolean
373 | | +--ro attribute enumeration
374 | | +--ro (subobject-type)?
375 | | +--:(as-number-case)
376 | | | +--ro as-number
377 | | | +--ro as-number inet:as-number
378 | | +--:(ip-prefix-case)
379 | | | +--ro ip-prefix
380 | | | +--ro ip-prefix inet:ip-prefix
383 | | | +--ro uni-directional boolean
384 | | | +--ro (label-type)?
385 | | | +--:(type1-label-case)
386 | | | | +--ro type1-label
387 | | | | +--ro type1-label uint32
388 | | | +--:(generalized-label-case)
389 | | | | +--ro generalized-label
390 | | | | +--ro generalized-label binary
391 | | | +--:(waveband-switching-label-case)
392 | | | +--ro waveband-switching-label
393 | | | +--ro end-label uint32
394 | | | +--ro start-label uint32
395 | | | +--ro waveband-id uint32
398 | | | +--ro srlg-id srlg-id
399 | | +--:(unnumbered-case)
401 | | +--ro router-id uint32
402 | | +--ro interface-id uint32
404 | | +--ro processing-rule? boolean
405 | | +--ro ignore? boolean
408 | | +--ro vendor-information-tlv*
409 | | +--ro enterprise-number? iana:enterprise-number
410 | | +--ro (enterprise-specific-information)?
412 | +--ro processing-rule? boolean
413 | +--ro ignore? boolean
414 | +--ro class-type class-type
417 | +--ro processing-rule? boolean
418 | +--ro ignore? boolean
420 | | +--ro lsp-error-code
421 | | | +--ro error-code? uint32
422 | | +--ro lsp-identifiers
423 | | | +--ro lsp-id? rsvp:lsp-id
424 | | | +--ro tunnel-id? rsvp:tunnel-id
425 | | | +--ro (address-family)?
426 | | | +--:(ipv4-case)
428 | | | | +--ro ipv4-tunnel-sender-address inet:ipv4-address
429 | | | | +--ro ipv4-extended-tunnel-id rsvp:ipv4-extended-tunnel-id
430 | | | | +--ro ipv4-tunnel-endpoint-address inet:ipv4-address
431 | | | +--:(ipv6-case)
433 | | | +--ro ipv6-tunnel-sender-address inet:ipv6-address
434 | | | +--ro ipv6-extended-tunnel-id rsvp:ipv6-extended-tunnel-id
435 | | | +--ro ipv6-tunnel-endpoint-address inet:ipv6-address
436 | | +--ro rsvp-error-spec
437 | | | +--ro (error-type)?
438 | | | +--:(rsvp-case)
439 | | | | +--ro rsvp-error
440 | | | +--:(user-case)
441 | | | +--ro user-error
442 | | +--ro symbolic-path-name
443 | | | +--ro path-name? symbolic-path-name
445 | | | +--ro enterprise-number? iana:enterprise-number
446 | | | +--ro (vendor-payload)?
447 | | +--ro vendor-information-tlv*
448 | | | +--ro enterprise-number? iana:enterprise-number
449 | | | +--ro (enterprise-specific-information)?
450 | | +--ro path-binding
451 | | x--ro binding-type? uint8
452 | | x--ro binding-value? binary
453 | | +--ro (binding-type-value)?
455 | | | +--ro mpls-label? netc:mpls-label
456 | | +--:(mpls-label-entry)
457 | | +--ro label? netc:mpls-label
458 | | +--ro traffic-class? uint8
459 | | +--ro bottom-of-stack? boolean
460 | | +--ro time-to-live? uint8
461 | +--ro plsp-id? plsp-id
462 | +--ro delegate? boolean
463 | +--ro sync? boolean
464 | +--ro remove? boolean
465 | +--ro administrative? boolean
466 | +--ro operational? operational-status
467 +--ro path-setup-type
472 The LSP-DB is accessible via RESTCONF.
473 The PCC's LSPs are stored in the ``pcep-topology`` while the session is active.
474 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*).
476 **URL:** ``/restconf/operational/network-topology:network-topology/topology/pcep-topology/node/pcc:%2F%2F43.43.43.43``
478 **RFC8040 URL:** ``/rests/data/network-topology:network-topology/topology=pcep-topology/node=pcc%3A%2F%2F43.43.43.43``
490 :emphasize-lines: 2,4,5,8,12,14,15,16,17,18,20,24,25,26,28,29,32,36
493 <node-id>pcc://43.43.43.43</node-id>
494 <path-computation-client>
495 <ip-address>43.43.43.43</ip-address>
496 <state-sync>synchronized</state-sync>
499 <lsp-update-capability>true</lsp-update-capability>
505 <operational>up</operational>
508 <create>false</create>
509 <administrative>true</administrative>
510 <remove>false</remove>
511 <delegate>true</delegate>
515 <ipv4-tunnel-sender-address>43.43.43.43</ipv4-tunnel-sender-address>
516 <ipv4-tunnel-endpoint-address>39.39.39.39</ipv4-tunnel-endpoint-address>
517 <ipv4-extended-tunnel-id>39.39.39.39</ipv4-extended-tunnel-id>
519 <tunnel-id>1</tunnel-id>
523 <path-name>Zm9v</path-name>
524 </symbolic-path-name>
531 <ip-prefix>201.20.160.40/32</ip-prefix>
537 <ip-prefix>195.20.160.39/32</ip-prefix>
543 <ip-prefix>39.39.39.39/32</ip-prefix>
548 </path-computation-client>
551 @line 2: **node-id** The PCC identifier.
553 @line 4: **ip-address** IP address of the PCC.
555 @line 5: **state-sync** Synchronization status of the PCC's LSPs. The *synchronized* indicates the State Synchronization is done.
557 @line 8: **lsp-update-capability** - Indicates that PCC allows LSP modifications.
559 @line 12: **name** - Textual representation of LPS's name.
561 @line 14: **operational** - Represent operational status of the LSP:
563 * *down* - not active.
565 * *active* - up and carrying traffic.
566 * *going-down* - LSP is being torn down, resources are being released.
567 * *going-up* - LSP is being signaled.
569 @line 15: **sync** - The flag set by PCC during LSPs State Synchronization.
571 @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.
573 @line 17: **create** - The *false* indicates that LSP is PCC-initiated.
575 @line 18: **administrative** - The flag indicates target operational status of the LSP.
577 @line 20: **delegate** - The delegate flag indicates that the PCC is delegating the LSP to the PCE.
579 @line 24: **ipv4-tunnel-sender-address** - Contains the sender node's IP address.
581 @line 25: **ipv4-tunnel-endpoint-address** - Contains the egress node's IP address.
583 @line 26: **ipv4-extended-tunnel-id** - The *Extended Tunnel ID* identifier.
585 @line 28: **tunnel-id** - The *Tunnel ID* identifier.
587 @line 29: **lsp-id** - The *LSP ID* identifier.
589 @line 32: **path-name** - The symbolic name for the LSP.
591 @line 36: **ero** - The *Explicit Route Object* is encoding the path of the TE LSP through the network.
599 :emphasize-lines: 3,5,6,9,13,15,16,17,18,19,21,25,26,27,29,30,33,37
603 "node-id": "pcc://43.43.43.43",
604 "path-computation-client": {
605 "ip-address": "43.43.43.43",
606 "state-sync": "synchronized",
609 "lsp-update-capability": true
619 "administrative": true,
625 "ipv4-tunnel-sender-address": "43.43.43.43",
626 "ipv4-tunnel-endpoint-address": "39.39.39.39",
627 "ipv4-extended-tunnel-id": "39.39.39.39"
632 "symbolic-path-name": {
641 "ip-prefix": "201.20.160.40/32"
647 "ip-prefix": "195.20.160.39/32"
653 "ip-prefix": "39.39.39.39/32"
662 @line 3: **node-id** The PCC identifier.
664 @line 5: **ip-address** IP address of the PCC.
666 @line 6: **state-sync** Synchronization status of the PCC's LSPs. The *synchronized* indicates the State Synchronization is done.
668 @line 9: **lsp-update-capability** - Indicates that PCC allows LSP modifications.
670 @line 13: **name** - Textual representation of LPS's name.
672 @line 15: **operational** - Represent operational status of the LSP:
674 * *down* - not active.
676 * *active* - up and carrying traffic.
677 * *going-down* - LSP is being torn down, resources are being released.
678 * *going-up* - LSP is being signaled.
680 @line 16: **sync** - The flag set by PCC during LSPs State Synchronization.
682 @line 17: **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.
684 @line 18: **create** - The *false* indicates that LSP is PCC-initiated.
686 @line 19: **administrative** - The flag indicates target operational status of the LSP.
688 @line 21: **delegate** - The delegate flag indicates that the PCC is delegating the LSP to the PCE.
690 @line 25: **ipv4-tunnel-sender-address** - Contains the sender node's IP address.
692 @line 26: **ipv4-tunnel-endpoint-address** - Contains the egress node's IP address.
694 @line 27: **ipv4-extended-tunnel-id** - The *Extended Tunnel ID* identifier.
696 @line 29: **tunnel-id** - The *Tunnel ID* identifier.
698 @line 30: **lsp-id** - The *LSP ID* identifier.
700 @line 33: **path-name** - The symbolic name for the LSP.
702 @line 37: **ero** - The *Explicit Route Object* is encoding the path of the TE LSP through the network.
706 The LSP control delegations is an mechanism, where PCC grants to a PCE the temporary right in order to modify LSP attributes.
707 The PCC can revoke the delegation or the PCE may waive the delegation at any time.
708 The LSP control is delegated to at most one PCE at the same time.
710 .. figure:: ./images/pcep-delegation-return.png
712 :alt: Returning a Delegation
714 Returning a Delegation.
718 Following RPC example illustrates a request for the LSP delegation give up:
720 **URL:** ``/restconf/operations/network-topology-pcep:update-lsp``
722 **RFC8040 URL:** ``/rests/operations/network-topology-pcep:update-lsp``
730 **Content-Type:** ``application/xml``
736 :emphasize-lines: 2,3,6,10
739 <node>pcc://43.43.43.43</node>
742 <lsp xmlns:stateful="urn:opendaylight:params:xml:ns:yang:pcep:ietf:stateful">
743 <delegate>false</delegate>
744 <administrative>true</administrative>
747 <path-name>Zm9v</path-name>
748 </symbolic-path-name>
752 <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>
755 @line 2: **node** The PCC identifier.
757 @line 3: **name** The name of the LSP.
759 @line 6: **delegate** - Delegation flag set *false* in order to return the LSP delegation.
761 @line 10: **path-name** - The Symbolic Path Name TLV must be present when sending a request to give up the delegation.
765 **Content-Type:** ``application/json``
771 :emphasize-lines: 3,4,7,11
775 "node": "pcc://43.43.43.43",
780 "administrative": true,
782 "symbolic-path-name": {
788 "network-topology-ref": "/network-topology:network-topology/network-topology:topology[network-topology:topology-id=\"pcep-topology\"]"
792 @line 3: **node** The PCC identifier.
794 @line 4: **name** The name of the LSP.
796 @line 7: **delegate** - Delegation flag set *false* in order to return the LSP delegation.
798 @line 11: **path-name** - The Symbolic Path Name TLV must be present when sending a request to give up the delegation.
802 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.
803 In order to update LSP, the PCE must hold a LSP delegation.
804 The LSP update is done in *make-before-break* fashion - first, new LSP is initiated and then the old LSP is torn down.
806 .. figure:: ./images/pcep-update.png
808 :alt: Active Stateful PCE LSP Update
810 Active Stateful PCE LSP Update.
814 Following RPC example shows a request for the LSP update:
816 **URL:** ``/restconf/operations/network-topology-pcep:update-lsp``
818 **RFC8040 URL:** ``/rests/operations/network-topology-pcep:update-lsp``
826 **Content-Type:** ``application/xml``
832 :emphasize-lines: 2,3,6,7,9
834 <input xmlns="urn:opendaylight:params:xml:ns:yang:topology:pcep">
835 <node>pcc://43.43.43.43</node>
838 <lsp xmlns="urn:opendaylight:params:xml:ns:yang:pcep:ietf:stateful">
839 <delegate>true</delegate>
840 <administrative>true</administrative>
846 <ip-prefix>200.20.160.41/32</ip-prefix>
852 <ip-prefix>196.20.160.39/32</ip-prefix>
858 <ip-prefix>39.39.39.39/32</ip-prefix>
863 <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>
866 @line 2: **node** The PCC identifier.
868 @line 3: **name** The name of the LSP to be updated.
870 @line 6: **delegate** - Delegation flag set *true* in order to keep the LSP control.
872 @line 7: **administrative** - Desired administrative status of the LSP is active.
874 @line 9: **ero** - This LSP attribute is changed.
878 **Content-Type:** ``application/json``
884 :emphasize-lines: 3,4,7,8,10
888 "node": "pcc://43.43.43.43",
893 "administrative": true
900 "ip-prefix": "200.20.160.41/32"
906 "ip-prefix": "196.20.160.39/32"
912 "ip-prefix": "39.39.39.39/32"
918 "network-topology-ref": "/network-topology:network-topology/network-topology:topology[network-topology:topology-id=\"pcep-topology\"]"
922 @line 3: **node** The PCC identifier.
924 @line 4: **name** The name of the LSP to be updated.
926 @line 7: **delegate** - Delegation flag set *true* in order to keep the LSP control.
928 @line 8: **administrative** - Desired administrative status of the LSP is active.
930 @line 10: **ero** - This LSP attribute is changed.
932 PCE-initiated LSP Setup
933 ^^^^^^^^^^^^^^^^^^^^^^^
934 The PCEP Extension for PCE-initiated LSP Setup allows PCE to request a creation and deletion of LSPs.
938 This capability is enabled by default. No additional configuration is required.
942 The PCE can request LSP creation.
943 The LSP instantiation is done by sending an LSP Initiate Message to PCC.
944 The PCC assign delegation to PCE which triggered creation.
945 PCE-initiated LSPs are identified by *Create* flag.
947 .. figure:: ./images/pcep-initiate.png
949 :alt: LSP instantiation
955 Following RPC example shows a request for the LSP initiation:
957 **URL:** ``/restconf/operations/network-topology-pcep:add-lsp``
959 **RFC8040 URL:** ``/rests/operations/network-topology-pcep:add-lsp``
967 **Content-Type:** ``application/xml``
973 :emphasize-lines: 2,3,9,15
975 <input xmlns="urn:opendaylight:params:xml:ns:yang:topology:pcep">
976 <node>pcc://43.43.43.43</node>
977 <name>update-tunel</name>
979 <lsp xmlns="urn:opendaylight:params:xml:ns:yang:pcep:ietf:stateful">
980 <delegate>true</delegate>
981 <administrative>true</administrative>
985 <source-ipv4-address>43.43.43.43</source-ipv4-address>
986 <destination-ipv4-address>39.39.39.39</destination-ipv4-address>
993 <ip-prefix>201.20.160.40/32</ip-prefix>
999 <ip-prefix>195.20.160.39/32</ip-prefix>
1003 <loose>false</loose>
1005 <ip-prefix>39.39.39.39/32</ip-prefix>
1010 <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>
1013 @line 2: **node** The PCC identifier.
1015 @line 3: **name** The name of the LSP to be created.
1017 @line 9: **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.
1019 @line 15: **ero** - The *ERO* object is mandatory for LSP initiation request.
1023 **Content-Type:** ``application/json``
1027 .. code-block:: json
1029 :emphasize-lines: 3,4,10,16
1033 "node": "pcc://43.43.43.43",
1034 "name": "update-tunel",
1038 "administrative": true
1042 "source-ipv4-address": "43.43.43.43",
1043 "destination-ipv4-address": "39.39.39.39"
1051 "ip-prefix": "201.20.160.40/32"
1057 "ip-prefix": "195.20.160.39/32"
1063 "ip-prefix": "39.39.39.39/32"
1069 "network-topology-ref": "/network-topology:network-topology/network-topology:topology[network-topology:topology-id=\"pcep-topology\"]"
1073 @line 3: **node** The PCC identifier.
1075 @line 4: **name** The name of the LSP to be created.
1077 @line 10: **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.
1079 @line 16: **ero** - The *ERO* object is mandatory for LSP initiation request.
1083 The PCE may request a deletion of PCE-initiated LSPs.
1084 The PCE must be delegation holder for this particular LSP.
1086 .. figure:: ./images/pcep-deletion.png
1094 Following RPC example shows a request for the LSP deletion:
1096 **URL:** ``/restconf/operations/network-topology-pcep:remove-lsp``
1098 **RFC8040 URL:** ``/rests/operations/network-topology-pcep:remove-lsp``
1100 **Method:** ``POST``
1106 **Content-Type:** ``application/xml``
1112 :emphasize-lines: 2,3
1114 <input xmlns="urn:opendaylight:params:xml:ns:yang:topology:pcep">
1115 <node>pcc://43.43.43.43</node>
1116 <name>update-tunel</name>
1117 <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>
1120 @line 2: **node** The PCC identifier.
1122 @line 3: **name** The name of the LSP to be removed.
1126 **Content-Type:** ``application/json``
1130 .. code-block:: json
1132 :emphasize-lines: 3,4
1136 "node": "pcc://43.43.43.43",
1137 "name": "update-tunel",
1138 "network-topology-ref": "/network-topology:network-topology/network-topology:topology[network-topology:topology-id=\"pcep-topology\"]"
1142 @line 3: **node** The PCC identifier.
1144 @line 4: **name** The name of the LSP to be removed.
1146 PCE-initiated LSP Delegation
1147 ''''''''''''''''''''''''''''
1148 The PCE-initiated LSP control is delegated to the PCE which requested the initiation.
1149 The PCC cannot revoke delegation of PCE-initiated LSP.
1150 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.
1151 The PCE may ask for a delegation of the orphan LSP.
1153 .. figure:: ./images/pcep-revoke-delegation.png
1155 :alt: LSP re-delegation
1157 Orphan PCE-initiated LSP - control taken by PCE.
1161 Following RPC example illustrates a request for the LSP delegation:
1163 **URL:** ``/restconf/operations/network-topology-pcep:update-lsp``
1165 **RFC8040 URL:** ``/rests/operations/network-topology-pcep:update-lsp``
1167 **Method:** ``POST``
1173 **Content-Type:** ``application/xml``
1179 :emphasize-lines: 2,3,6,10
1182 <node>pcc://43.43.43.43</node>
1183 <name>update-tunel</name>
1185 <lsp xmlns:stateful="urn:opendaylight:params:xml:ns:yang:pcep:ietf:stateful">
1186 <delegate>true</delegate>
1187 <administrative>true</administrative>
1189 <symbolic-path-name>
1190 <path-name>dXBkYXRlLXR1bmVs</path-name>
1191 </symbolic-path-name>
1195 <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>
1198 @line 2: **node** The PCC identifier.
1200 @line 3: **name** The name of the LSP.
1202 @line 6: **delegate** - *Delegation* flag set *true* in order to take the LSP delegation.
1204 @line 10: **path-name** - The *Symbolic Path Name* TLV must be present when sending a request to take a delegation.
1208 **Content-Type:** ``application/json``
1212 .. code-block:: json
1214 :emphasize-lines: 3,4,7,11
1218 "node": "pcc://43.43.43.43",
1219 "name": "update-tunel",
1223 "administrative": true,
1225 "symbolic-path-name": {
1226 "path-name": "dXBkYXRlLXR1bmVs"
1231 "network-topology-ref": "/network-topology:network-topology/network-topology:topology[network-topology:topology-id=\"pcep-topology\"]"
1235 @line 3: **node** The PCC identifier.
1237 @line 4: **name** The name of the LSP.
1239 @line 7: **delegate** - *Delegation* flag set *true* in order to take the LSP delegation.
1241 @line 11: **path-name** - The *Symbolic Path Name* TLV must be present when sending a request to take a delegation.
1245 The PCEP Extensions for Segment Routing (SR) allow a stateful PCE to compute and initiate TE paths in SR networks.
1246 The SR path is defined as an order list of *segments*.
1247 Segment Routing architecture can be directly applied to the MPLS forwarding plane without changes.
1248 Segment Identifier (SID) is encoded as a MPLS label.
1252 This capability is enabled by default. In order to disable it, a configuration should be changed as follows:
1254 **URL:** ``/restconf/config/pcep-segment-routing-app-config:pcep-segment-routing-app-config``
1256 **RFC8040 URL:** ``/rests/data/pcep-segment-routing-app-config:pcep-segment-routing-app-config``
1264 **Content-Type:** ``application/xml``
1272 <pcep-segment-routing-config xmlns="urn:opendaylight:params:xml:ns:yang:controller:pcep:segment-routing-app-config">
1273 <sr-capable>false</sr-capable>
1274 </pcep-segment-routing-config>
1276 @line 2: **sr-capable** - True if capability is supported.
1280 **Content-Type:** ``application/json``
1284 .. code-block:: json
1289 "pcep-segment-routing-app-config:pcep-segment-routing-config": {
1294 @line 3: **sr-capable** - True if capability is supported.
1299 In PCEP-SR draft version 6, SR Explicit Route Object/Record Route Object subobjects IANA code points change was proposed.
1300 In order to use the latest code points, a configuration should be changed as follows:
1302 **URL:** ``/restconf/config/pcep-segment-routing-app-config:pcep-segment-routing-config``
1304 **RFC8040 URL:** ``/rests/data/pcep-segment-routing-app-config:pcep-segment-routing-config``
1312 **Content-Type:** ``application/xml``
1320 <pcep-segment-routing-config xmlns="urn:opendaylight:params:xml:ns:yang:controller:pcep:segment-routing-app-config">
1321 <iana-sr-subobjects-type>true</iana-sr-subobjects-type>
1322 </pcep-segment-routing-config>
1324 @line 2: **iana-sr-subobjects-type** - True if IANA code points should be used.
1328 **Content-Type:** ``application/json``
1332 .. code-block:: json
1337 "pcep-segment-routing-app-config:pcep-segment-routing-config": {
1338 "iana-sr-subobjects-type": true
1342 @line 3: **iana-sr-subobjects-type** - True if IANA code points should be used.
1344 LSP Operations for PCEP SR
1345 ''''''''''''''''''''''''''
1346 The PCEP SR extension defines new ERO subobject - *SR-ERO subobject* capable of carrying a SID.
1348 .. code-block:: console
1351 +---- c-flag? boolean
1352 +---- m-flag? boolean
1353 +---- sid-type? sid-type
1357 | +---- ip-address inet:ip-address
1359 | +---- local-ip-address inet:ip-address
1360 | +---- remote-ip-address inet:ip-address
1361 +--:(unnumbered-adjacency)
1362 +---- local-node-id uint32
1363 +---- local-interface-id uint32
1364 +---- remote-node-id uint32
1365 +---- remote-interface-id uint32
1369 Following RPC example illustrates a request for the SR-TE LSP creation:
1371 **URL:** ``/restconf/operations/network-topology-pcep:add-lsp``
1373 **RFC8040 URL:** ``/rests/operations/network-topology-pcep:add-lsp``
1375 **Method:** ``POST``
1381 **Content-Type:** ``application/xml``
1387 :emphasize-lines: 16,21,22,23
1389 <input xmlns="urn:opendaylight:params:xml:ns:yang:topology:pcep">
1390 <node>pcc://43.43.43.43</node>
1391 <name>sr-path</name>
1393 <lsp xmlns="urn:opendaylight:params:xml:ns:yang:pcep:ietf:stateful">
1394 <delegate>true</delegate>
1395 <administrative>true</administrative>
1399 <source-ipv4-address>43.43.43.43</source-ipv4-address>
1400 <destination-ipv4-address>39.39.39.39</destination-ipv4-address>
1403 <path-setup-type xmlns="urn:opendaylight:params:xml:ns:yang:pcep:ietf:stateful">
1408 <loose>false</loose>
1409 <sid-type xmlns="urn:opendaylight:params:xml:ns:yang:pcep:segment:routing">ipv4-node-id</sid-type>
1410 <m-flag xmlns="urn:opendaylight:params:xml:ns:yang:pcep:segment:routing">true</m-flag>
1411 <sid xmlns="urn:opendaylight:params:xml:ns:yang:pcep:segment:routing">24001</sid>
1412 <ip-address xmlns="urn:opendaylight:params:xml:ns:yang:pcep:segment:routing">39.39.39.39</ip-address>
1416 <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>
1419 @line 16: **path-setup-type** - Set *1* for SR-TE LSP
1421 @line 21: **ipv4-node-id** - The SR-ERO subobject represents *IPv4 Node ID* NAI.
1423 @line 22: **m-flag** - The SID value represents an MPLS label.
1425 @line 23: **sid** - The Segment Identifier.
1429 **Content-Type:** ``application/json``
1433 .. code-block:: json
1435 :emphasize-lines: 17,22,23,24
1439 "node": "pcc://43.43.43.43",
1444 "administrative": true
1448 "source-ipv4-address": "43.43.43.43",
1449 "destination-ipv4-address": "39.39.39.39"
1452 "path-setup-type": {
1458 "sid-type": "ipv4-node-id",
1461 "ip-address": "39.39.39.39"
1465 "network-topology-ref": "/network-topology:network-topology/network-topology:topology[network-topology:topology-id=\"pcep-topology\"]"
1469 @line 17: **path-setup-type** - Set *1* for SR-TE LSP
1471 @line 22: **ipv4-node-id** - The SR-ERO subobject represents *IPv4 Node ID* NAI.
1473 @line 23: **m-flag** - The SID value represents an MPLS label.
1475 @line 24: **sid** - The Segment Identifier.
1479 Following RPC example illustrates a request for the SR-TE LSP update including modified path:
1481 **URL:** ``/restconf/operations/network-topology-pcep:update-lsp``
1483 **RFC8040 URL:** ``/rests/operations/network-topology-pcep:update-lsp``
1485 **Method:** ``POST``
1491 **Content-Type:** ``application/xml``
1498 <input xmlns="urn:opendaylight:params:xml:ns:yang:topology:pcep">
1499 <node>pcc://43.43.43.43</node>
1500 <name>update-tunnel</name>
1502 <lsp xmlns="urn:opendaylight:params:xml:ns:yang:pcep:ietf:stateful">
1503 <delegate>true</delegate>
1504 <administrative>true</administrative>
1506 <path-setup-type xmlns="urn:opendaylight:params:xml:ns:yang:pcep:ietf:stateful">
1511 <loose>false</loose>
1512 <sid-type xmlns="urn:opendaylight:params:xml:ns:yang:pcep:segment:routing">ipv4-node-id</sid-type>
1513 <m-flag xmlns="urn:opendaylight:params:xml:ns:yang:pcep:segment:routing">true</m-flag>
1514 <sid xmlns="urn:opendaylight:params:xml:ns:yang:pcep:segment:routing">24002</sid>
1515 <ip-address xmlns="urn:opendaylight:params:xml:ns:yang:pcep:segment:routing">200.20.160.41</ip-address>
1518 <loose>false</loose>
1519 <sid-type xmlns="urn:opendaylight:params:xml:ns:yang:pcep:segment:routing">ipv4-node-id</sid-type>
1520 <m-flag xmlns="urn:opendaylight:params:xml:ns:yang:pcep:segment:routing">true</m-flag>
1521 <sid xmlns="urn:opendaylight:params:xml:ns:yang:pcep:segment:routing">24001</sid>
1522 <ip-address xmlns="urn:opendaylight:params:xml:ns:yang:pcep:segment:routing">39.39.39.39</ip-address>
1526 <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>
1531 **Content-Type:** ``application/json``
1535 .. code-block:: json
1540 "node": "pcc://43.43.43.43",
1545 "administrative": true
1547 "path-setup-type": {
1554 "sid-type": "ipv4-node-id",
1557 "ip-address": "200.20.160.41"
1561 "sid-type": "ipv4-node-id",
1564 "ip-address": "39.39.39.39"
1569 "network-topology-ref": "/network-topology:network-topology/network-topology:topology[network-topology:topology-id=\"pcep-topology\"]"
1573 LSP State Synchronization Optimization Procedures
1574 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1575 This extension bring optimizations for state synchronization:
1577 * State Synchronization Avoidance
1578 * Incremental State Synchronization
1579 * PCE-triggered Initial Synchronization
1580 * PCE-triggered Re-synchronization
1584 This capability is enabled by default. No additional configuration is required.
1586 State Synchronization Avoidance
1587 '''''''''''''''''''''''''''''''
1588 The State Synchronization Avoidance procedure is intended to skip state synchronization if the state has survived and not changed during session restart.
1590 .. figure:: ./images/pcep-sync-skipped.png
1594 State Synchronization Skipped.
1596 Incremental State Synchronization
1597 '''''''''''''''''''''''''''''''''
1598 The Incremental State Synchronization procedure is intended to do incremental (delta) state synchronization when possible.
1600 .. figure:: ./images/pcep-sync-incremental.png
1602 :alt: Sync incremental
1604 Incremental Synchronization Procedure.
1606 PCE-triggered Initial Synchronization
1607 '''''''''''''''''''''''''''''''''''''
1608 The PCE-triggered Initial Synchronization procedure is intended to do let PCE control the timing of the initial state synchronization.
1610 .. figure:: ./images/pcep-sync-initial.png
1614 PCE-triggered Initial State Synchronization Procedure.
1618 Following RPC example illustrates a request for the initial synchronization:
1620 **URL:** ``/restconf/operations/network-topology-pcep:trigger-sync``
1622 **RFC8040 URL:** ``/rests/operations/network-topology-pcep:trigger-sync``
1624 **Method:** ``POST``
1630 **Content-Type:** ``application/xml``
1637 <input xmlns="urn:opendaylight:params:xml:ns:yang:topology:pcep">
1638 <node>pcc://43.43.43.43</node>
1639 <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>
1644 **Content-Type:** ``application/json``
1648 .. code-block:: json
1653 "node": "pcc://43.43.43.43",
1654 "network-topology-ref": "/network-topology:network-topology/network-topology:topology[network-topology:topology-id=\"pcep-topology\"]"
1658 PCE-triggered Re-synchronization
1659 ''''''''''''''''''''''''''''''''
1660 The PCE-triggered Re-synchronization: To let PCE re-synchronize the state for sanity check.
1662 .. figure:: ./images/pcep-re-sync.png
1666 PCE-triggered Re-synchronization Procedure.
1670 Following RPC example illustrates a request for the LSP re-synchronization:
1672 **URL:** ``/restconf/operations/network-topology-pcep:trigger-sync``
1674 **RFC8040 URL:** ``/rests/operations/network-topology-pcep:trigger-sync``
1676 **Method:** ``POST``
1682 **Content-Type:** ``application/xml``
1690 <input xmlns="urn:opendaylight:params:xml:ns:yang:topology:pcep">
1691 <node>pcc://43.43.43.43</node>
1692 <name>update-lsp</name>
1693 <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>
1696 @line 3: **name** - The LSP name. If this parameter is omitted, re-synchronization is requested for all PCC's LSPs.
1700 **Content-Type:** ``application/json``
1704 .. code-block:: json
1710 "node": "pcc://43.43.43.43",
1711 "name": "update-lsp",
1712 "network-topology-ref": "/network-topology:network-topology/network-topology:topology[network-topology:topology-id=\"pcep-topology\"]"
1716 @line 4: **name** - The LSP name. If this parameter is omitted, re-synchronization is requested for all PCC's LSPs.