-
Notifications
You must be signed in to change notification settings - Fork 0
2727 lines (2504 loc) · 87.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
module ietf-pcep {
yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-pcep";
prefix pcep;
import ietf-inet-types {
prefix "inet";
reference "RFC 6991";
}
import ietf-yang-types {
prefix "yang";
reference "RFC 6991";
}
import ietf-te {
prefix "te";
reference "RFC XXXX";
}
import ietf-te-types {
prefix "te-types";
reference "RFC XXXX";
}
import ietf-key-chain {
prefix "key-chain";
reference "RFC 8177";
}
import ietf-netconf-acm {
prefix "nacm";
reference "RFC 6536";
}
import ietf-tls-server {
prefix "tls-server";
reference "RFC XXXX";
}
import ietf-tls-client {
prefix "tls-client";
reference "RFC XXXX";
}
organization
"IETF PCE (Path Computation Element) Working Group";
contact
"WG Web: <http://tools.ietf.org/wg/pce/>
WG List: <mailto:[email protected]>
Editor: Dhruv Dhody
<mailto:[email protected]>";
description
"The YANG module defines a generic configuration and
operational model for PCEP common across all of the
vendor implementations.
Copyright (c) 2018 IETF Trust and the persons identified as
authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject
to the license terms contained in, the Simplified BSD License
set forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents
(http://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX; see the
RFC itself for full legal notices.";
revision 2018-10-12 {
description "Initial revision.";
reference
"RFC XXXX: A YANG Data Model for Path Computation
Element Communications Protocol
(PCEP)";
}
/*
* Identities
*/
identity pcep {
description "Identity for the PCEP protocol.";
reference "RFC 5440";
}
/*
* Typedefs
*/
typedef pcep-role {
type enumeration {
enum unknown {
value "0";
description
"An unknown role";
}
enum pcc {
value "1";
description
"The role of a Path Computation Client";
}
enum pce {
value "2";
description
"The role of Path Computation Element";
}
enum pcc-and-pce {
value "3";
description
"The role of both Path Computation Client and
Path Computation Element";
}
}
description
"The role of a PCEP speaker.
Takes one of the following values
- unknown(0): the role is not known.
- pcc(1): the role is of a Path Computation
Client (PCC).
- pce(2): the role is of a Path Computation
Server (PCE).
- pccAndPce(3): the role is of both a PCC and
a PCE.";
}
typedef pcep-admin-status {
type enumeration {
enum admin-status-up {
value "1";
description
"Admin Status is Up";
}
enum admin-status-down {
value "2";
description
"Admin Status is Down";
}
}
description
"The Admin Status of the PCEP entity.
Takes one of the following values
- admin-status-up(1): Admin Status is Up.
- admin-status-down(2): Admin Status is Down";
}
typedef pcep-oper-status {
type enumeration {
enum oper-status-up {
value "1";
description
"The PCEP entity is active";
}
enum oper-status-down {
value "2";
description
"The PCEP entity is inactive";
}
enum oper-status-going-up {
value "3";
description
"The PCEP entity is activating";
}
enum oper-status-going-down {
value "4";
description
"The PCEP entity is deactivating";
}
enum oper-status-failed {
value "5";
description
"The PCEP entity has failed and will recover
when possible.";
}
enum oper-status-failed-perm {
value "6";
description
"The PCEP entity has failed and will not recover
without operator intervention";
}
}
description
"The operational status of the PCEP entity.
Takes one of the following values
- oper-status-up(1): Active
- oper-status-down(2): Inactive
- oper-status-going-up(3): Activating
- oper-status-going-down(4): Deactivating
- oper-status-failed(5): Failed
- oper-status-failed-perm(6): Failed Permanantly";
}
typedef pcep-initiator {
type enumeration {
enum local {
value "1";
description
"The local PCEP entity initiated the session";
}
enum remote {
value "2";
description
"The remote PCEP peer initiated the session";
}
}
description
"The initiator of the session, that is, whether the TCP
connection was initiated by the local PCEP entity or
the remote peer.
Takes one of the following values
- local(1): Initiated locally
- remote(2): Initiated remotely";
}
typedef pcep-sess-state {
type enumeration {
enum tcp-pending {
value "1";
description
"The tcp-pending state of PCEP session.";
}
enum open-wait {
value "2";
description
"The open-wait state of PCEP session.";
}
enum keep-wait {
value "3";
description
"The keep-wait state of PCEP session.";
}
enum session-up {
value "4";
description
"The session-up state of PCEP session.";
}
}
description
"The current state of the session.
The set of possible states excludes the idle state
since entries do not exist in the idle state.
Takes one of the following values
- tcp-pending(1): PCEP TCP Pending state
- open-wait(2): PCEP Open Wait state
- keep-wait(3): PCEP Keep Wait state
- session-up(4): PCEP Session Up state";
reference
"RFC 5440";
}
typedef domain-type {
type enumeration {
enum ospf-area {
value "1";
description
"The OSPF area.";
}
enum isis-area {
value "2";
description
"The IS-IS area.";
}
enum as {
value "3";
description
"The Autonomous System (AS).";
}
}
description
"The PCE Domain Type";
}
typedef domain-ospf-area {
type union {
type uint32;
type yang:dotted-quad;
}
description
"OSPF Area ID.";
}
typedef domain-isis-area {
type string {
pattern '[0-9A-Fa-f]{2}\.([0-9A-Fa-f]{4}\.){0,3}';
}
description
"IS-IS Area ID.";
}
typedef domain-as {
type uint32;
description
"Autonomous System number.";
}
typedef domain {
type union {
type domain-ospf-area;
type domain-isis-area;
type domain-as;
}
description
"The Domain Information";
}
typedef operational-state {
type enumeration {
enum down {
value "0";
description
"not active.";
}
enum up {
value "1";
description
"signalled.";
}
enum active {
value "2";
description
"up and carrying traffic.";
}
enum going-down {
value "3";
description
"LSP is being torn down, resources are
being released.";
}
enum going-up {
value "4";
description
"LSP is being signalled.";
}
}
description
"The operational status of the LSP";
}
typedef sync-state {
type enumeration {
enum pending {
value "0";
description
"The state synchronization
has not started.";
}
enum ongoing {
value "1";
description
"The state synchronization
is ongoing.";
}
enum finished {
value "2";
description
"The state synchronization
is finished.";
}
}
description
"The LSP-DB state synchronization operational
status.";
}
/*
* Features
*/
feature svec {
description
"Support synchronized path computation.";
reference
"RFC 5440";
}
feature gmpls {
description
"Support GMPLS.";
}
feature objective-function {
description
"Support OF as per RFC 5541.";
reference
"RFC 5541";
}
feature gco {
description
"Support GCO as per RFC 5557.";
reference
"RFC 5557";
}
feature path-key {
description
"Support path-key as per RFC 5520.";
reference
"RFC 5520";
}
feature p2mp {
description
"Support P2MP as per RFC 8306.";
reference
"RFC 8306";
}
feature stateful {
description
"Support stateful PCE as per RFC 8231.";
reference
"RFC 8231";
}
feature stateful-sync-opt {
description
"Support stateful sync optimization
as per RFC 8232";
reference
"RFC 8232";
}
feature pce-initiated {
description
"Support PCE-Initiated LSP as per
RFC 8281.";
reference
"RFC 8281";
}
feature tls {
description
"Support PCEP over TLS as per
RFC 8253.";
reference
"RFC 8253";
}
feature sr {
description
"Support Segment Routing for PCE.";
}
feature association {
description
"Support Association in PCEP.";
}
/*
* Identities
*/
identity lsp-error {
if-feature stateful;
description
"Base LSP error";
reference "RFC8231";
}
identity no-error-lsp-error {
base lsp-error;
if-feature stateful;
description
"No error, LSP is fine.";
reference "RFC8231";
}
identity unknown-lsp-error {
base lsp-error;
if-feature stateful;
description
"Unknown reason.";
reference "RFC8231";
}
identity limit-lsp-error {
base lsp-error;
if-feature stateful;
description
"Limit reached for PCE-controlled LSPs.";
reference "RFC8231";
}
identity pending-lsp-error {
base lsp-error;
if-feature stateful;
description
"Too many pending LSP update requests.";
reference "RFC8231";
}
identity unacceptable-lsp-error {
base lsp-error;
if-feature stateful;
description
"Unacceptable parameters.";
reference "RFC8231";
}
identity internal-lsp-error {
base lsp-error;
if-feature stateful;
description
"Internal error.";
reference "RFC8231";
}
identity admin-lsp-error {
base lsp-error;
if-feature stateful;
description
"LSP administratively brought down.";
reference "RFC8231";
}
identity preempted-lsp-error {
base lsp-error;
if-feature stateful;
description
"LSP preempted.";
reference "RFC8231";
}
identity rsvp-lsp-error {
base lsp-error;
if-feature stateful;
description
"RSVP signaling error.";
reference "RFC8231";
}
/*
* Groupings
*/
grouping pcep-entity-info{
description
"This grouping defines the attributes for PCEP entity.";
leaf connect-timer {
type uint32 {
range "1..65535";
}
units "seconds";
default 60;
description
"The time in seconds that the PCEP entity will wait
to establish a TCP connection with a peer. If a
TCP connection is not established within this time
then PCEP aborts the session setup attempt.";
reference
"RFC 5440: Path Computation Element (PCE)
Communication Protocol (PCEP)";
}
leaf connect-max-retry {
type uint32;
default 5;
description
"The maximum number of times the system tries to
establish a TCP connection to a peer before the
session with the peer transitions to the idle
state.";
reference
"RFC 5440: Path Computation Element (PCE)
Communication Protocol (PCEP)";
}
leaf init-backoff-timer {
type uint32 {
range "1..65535";
}
units "seconds";
description
"The initial back-off time in seconds for retrying
a failed session setup attempt to a peer.
The back-off time increases for each failed
session setup attempt, until a maximum back-off
time is reached. The maximum back-off time is
max-backoff-timer.";
}
leaf max-backoff-timer {
type uint32;
units "seconds";
description
"The maximum back-off time in seconds for retrying
a failed session setup attempt to a peer.
The back-off time increases for each failed session
setup attempt, until this maximum value is reached.
Session setup attempts then repeat periodically
without any further increase in back-off time.";
}
leaf open-wait-timer {
type uint32 {
range "1..65535";
}
units "seconds";
default 60;
description
"The time in seconds that the PCEP entity will wait
to receive an Open message from a peer after the
TCP connection has come up.
If no Open message is received within this time then
PCEP terminates the TCP connection and deletes the
associated sessions.";
reference
"RFC 5440: Path Computation Element (PCE)
Communication Protocol (PCEP)";
}
leaf keep-wait-timer {
type uint32 {
range "1..65535";
}
units "seconds";
default 60;
description
"The time in seconds that the PCEP entity will wait
to receive a Keepalive or PCErr message from a peer
during session initialization after receiving an
Open message. If no Keepalive or PCErr message is
received within this time then PCEP terminates the
TCP connection and deletes the associated
sessions.";
reference
"RFC 5440: Path Computation Element (PCE)
Communication Protocol (PCEP)";
}
leaf keep-alive-timer {
type uint32 {
range "0..255";
}
units "seconds";
default 30;
description
"The keep alive transmission timer that this PCEP
entity will propose in the initial OPEN message of
each session it is involved in. This is the
maximum time between two consecutive messages sent
to a peer. Zero means that the PCEP entity prefers
not to send Keepalives at all.
Note that the actual Keepalive transmission
intervals, in either direction of an active PCEP
session, are determined by negotiation between the
peers as specified by RFC 5440, and so may differ
from this configured value.";
reference
"RFC 5440: Path Computation Element (PCE)
Communication Protocol (PCEP)";
}
leaf dead-timer {
type uint32 {
range "0..255";
}
units "seconds";
must "(. > ../keep-alive-timer)" {
error-message "The dead timer must be "
+ "larger than the keep alive timer";
description
"This value MUST be greater than
keep-alive-timer.";
}
default 120;
description
"The dead timer that this PCEP entity will propose
in the initial OPEN message of each session it is
involved in. This is the time after which a peer
should declare a session down if it does not
receive any PCEP messages. Zero suggests that the
peer does not run a dead timer at all." ;
reference
"RFC 5440: Path Computation Element (PCE)
Communication Protocol (PCEP)";
}
leaf allow-negotiation{
type boolean;
description
"Whether the PCEP entity will permit negotiation of
session parameters.";
}
leaf max-keep-alive-timer{
type uint32 {
range "0..255";
}
units "seconds";
description
"In PCEP session parameter negotiation in seconds,
the maximum value that this PCEP entity will
accept from a peer for the interval between
Keepalive transmissions. Zero means that the PCEP
entity will allow no Keepalive transmission at
all." ;
}
leaf max-dead-timer{
type uint32 {
range "0..255";
}
units "seconds";
description
"In PCEP session parameter negotiation in seconds,
the maximum value that this PCEP entity will accept
from a peer for the Dead timer. Zero means that
the PCEP entity will allow not running a Dead
timer.";
}
leaf min-keep-alive-timer{
type uint32 {
range "0..255";
}
units "seconds";
description
"In PCEP session parameter negotiation in seconds,
the minimum value that this PCEP entity will
accept for the interval between Keepalive
transmissions. Zero means that the PCEP entity
insists on no Keepalive transmission at all.";
}
leaf min-dead-timer{
type uint32 {
range "0..255";
}
units "seconds";
description
"In PCEP session parameter negotiation in
seconds, the minimum value that this PCEP entity
will accept for the Dead timer. Zero means that
the PCEP entity insists on not running a Dead
timer.";
}
leaf sync-timer{
if-feature svec;
type uint32 {
range "0..65535";
}
units "seconds";
default 60;
description
"The value of SyncTimer in seconds is used in the
case of synchronized path computation request
using the SVEC object. Consider the case where a
PCReq message is received by a PCE that contains
the SVEC object referring to M synchronized path
computation requests. If after the expiration of
the SyncTimer all the M path computation requests
have not been, received a protocol error is
triggered and the PCE MUST cancel the whole set
of path computation requests.
The aim of the SyncTimer is to avoid the storage
of unused synchronized requests should one of
them get lost for some reasons (for example, a
misbehaving PCC).
Zero means that the PCEP entity does not use the
SyncTimer.";
reference
"RFC 5440: Path Computation Element (PCE)
Communication Protocol (PCEP)";
}
leaf request-timer{
type uint32 {
range "1..65535";
}
units "seconds";
description
"The maximum time that the PCEP entity will wait
for a response to a PCReq message.";
}
leaf max-sessions{
type uint32;
description
"Maximum number of sessions involving this PCEP
entity that can exist at any time.";
}
leaf max-unknown-reqs{
type uint32;
default 5;
description
"The maximum number of unrecognized requests and
replies that any session on this PCEP entity is
willing to accept per minute before terminating
the session.
A PCRep message contains an unrecognized reply
if it contains an RP object whose request ID
does not correspond to any in-progress request
sent by this PCEP entity.
A PCReq message contains an unrecognized request
if it contains an RP object whose request ID is
zero.";
reference
"RFC 5440: Path Computation Element (PCE)
Communication Protocol (PCEP)";
}
leaf max-unknown-msgs{
type uint32;
default 5;
description
"The maximum number of unknown messages that any
session on this PCEP entity is willing to accept
per minute before terminating the session.";
reference
"RFC 5440: Path Computation Element (PCE)
Communication Protocol (PCEP)";
}
}//pcep-entity-info
grouping pce-scope{
description
"This grouping defines PCE path computation scope
information which maybe relevant to PCE selection.
This information corresponds to PCE auto-discovery
information.";
reference
"RFC 5088: OSPF Protocol Extensions for Path
Computation Element (PCE)
Discovery
RFC 5089: IS-IS Protocol Extensions for Path
Computation Element (PCE)
Discovery";
leaf intra-area-scope{
type boolean;
default true;
description
"PCE can compute intra-area paths.";
}
leaf intra-area-pref{
type uint8{
range "0..7";
}
description
"The PCE's preference for intra-area TE LSP
computation.";
}
leaf inter-area-scope{
type boolean;
default false;
description
"PCE can compute inter-area paths.";
}
leaf inter-area-scope-default{
type boolean;
default false;
description
"PCE can act as a default PCE for inter-area
path computation.";
}
leaf inter-area-pref{
type uint8{
range "0..7";
}
description
"The PCE's preference for inter-area TE LSP
computation.";
}
leaf inter-as-scope{
type boolean;
default false;
description
"PCE can compute inter-AS paths.";
}
leaf inter-as-scope-default{
type boolean;
default false;
description
"PCE can act as a default PCE for inter-AS
path computation.";
}
leaf inter-as-pref{
type uint8{
range "0..7";
}
description
"The PCE's preference for inter-AS TE LSP
computation.";
}
leaf inter-layer-scope{
type boolean;
default false;
description
"PCE can compute inter-layer paths.";
}
leaf inter-layer-pref{
type uint8{
range "0..7";
}
description
"The PCE's preference for inter-layer TE LSP
computation.";
}
}//pce-scope
grouping domain{
description
"This grouping specifies a Domain where the
PCEP speaker has topology visibility.";
leaf domain-type{
type domain-type;
description
"The domain type.";
}
leaf domain{
type domain;
description
"The domain Information.";
}
}//domain
grouping capability{
description
"This grouping specifies a capability
information of local PCEP entity. This maybe
relevant to PCE selection as well. This
information corresponds to PCE auto-discovery
information.";
reference
"RFC 5088: OSPF Protocol Extensions for Path
Computation Element (PCE)
Discovery
RFC 5089: IS-IS Protocol Extensions for Path
Computation Element (PCE)
Discovery";
leaf gmpls{
if-feature gmpls;
type boolean;
description
"Path computation with GMPLS link
constraints.";
}
leaf bi-dir{
type boolean;
description
"Bidirectional path computation.";
}
leaf diverse{
type boolean;
description
"Diverse path computation.";
}
leaf load-balance{
type boolean;
description
"Load-balanced path computation.";
}
leaf synchronize{
if-feature svec;
type boolean;
description
"Synchronized paths computation.";
}
leaf objective-function{
if-feature objective-function;
type boolean;
description
"Support for multiple objective functions.";
}
leaf add-path-constraint{
type boolean;
description
"Support for additive path constraints (max
hop count, etc.).";
}
leaf prioritization{
type boolean;
description
"Support for request prioritization.";
}
leaf multi-request{
type boolean;
description
"Support for multiple requests per message.";
}