draft-ietf-pce-pcep-yang-02.txt   draft-ietf-pce-pcep-yang-03.txt 
PCE Working Group D. Dhody, Ed. PCE Working Group D. Dhody, Ed.
Internet-Draft Huawei Technologies Internet-Draft Huawei Technologies
Intended status: Standards Track J. Hardwick Intended status: Standards Track J. Hardwick
Expires: September 13, 2017 Metaswitch Expires: December 31, 2017 Metaswitch
V. Beeram V. Beeram
Juniper Networks Juniper Networks
J. Tantsura J. Tantsura
March 12, 2017 June 29, 2017
A YANG Data Model for Path Computation Element Communications Protocol A YANG Data Model for Path Computation Element Communications Protocol
(PCEP) (PCEP)
draft-ietf-pce-pcep-yang-02 draft-ietf-pce-pcep-yang-03
Abstract Abstract
This document defines a YANG data model for the management of Path This document defines a YANG data model for the management of Path
Computation Element communications Protocol (PCEP) for communications Computation Element communications Protocol (PCEP) for communications
between a Path Computation Client (PCC) and a Path Computation between a Path Computation Client (PCC) and a Path Computation
Element (PCE), or between two PCEs. The data model includes Element (PCE), or between two PCEs. The data model includes
configuration data and state data (status information and counters configuration data and state data (status information and counters
for the collection of statistics). for the collection of statistics).
skipping to change at page 1, line 40 skipping to change at page 1, line 40
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/. Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on September 13, 2017. This Internet-Draft will expire on December 31, 2017.
Copyright Notice Copyright Notice
Copyright (c) 2017 IETF Trust and the persons identified as the Copyright (c) 2017 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of (http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
skipping to change at page 2, line 20 skipping to change at page 2, line 20
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
2. Requirements Language . . . . . . . . . . . . . . . . . . . . 3 2. Requirements Language . . . . . . . . . . . . . . . . . . . . 3
3. Terminology and Notation . . . . . . . . . . . . . . . . . . 3 3. Terminology and Notation . . . . . . . . . . . . . . . . . . 3
3.1. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 4 3.1. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 4
3.2. Prefixes in Data Node Names . . . . . . . . . . . . . . . 5 3.2. Prefixes in Data Node Names . . . . . . . . . . . . . . . 5
4. Objectives . . . . . . . . . . . . . . . . . . . . . . . . . 6 4. Objectives . . . . . . . . . . . . . . . . . . . . . . . . . 6
5. The Design of PCEP Data Model . . . . . . . . . . . . . . . . 6 5. The Design of PCEP Data Model . . . . . . . . . . . . . . . . 6
5.1. The Entity . . . . . . . . . . . . . . . . . . . . . . . 17 5.1. The Entity . . . . . . . . . . . . . . . . . . . . . . . 15
5.2. The Peer Lists . . . . . . . . . . . . . . . . . . . . . 17 5.2. The Peer Lists . . . . . . . . . . . . . . . . . . . . . 15
5.3. The Session Lists . . . . . . . . . . . . . . . . . . . . 18 5.3. The Session Lists . . . . . . . . . . . . . . . . . . . . 16
5.4. Notifications . . . . . . . . . . . . . . . . . . . . . . 18 5.4. Notifications . . . . . . . . . . . . . . . . . . . . . . 16
5.5. RPC . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 5.5. RPC . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
6. The Design of PCEP Statistics Data Model . . . . . . . . . . 19 6. The Design of PCEP Statistics Data Model . . . . . . . . . . 16
7. Advanced PCE Features . . . . . . . . . . . . . . . . . . . . 22 7. Advanced PCE Features . . . . . . . . . . . . . . . . . . . . 19
7.1. Stateful PCE's LSP-DB . . . . . . . . . . . . . . . . . . 22 7.1. Stateful PCE's LSP-DB . . . . . . . . . . . . . . . . . . 20
8. Open Issues and Next Step . . . . . . . . . . . . . . . . . . 22 8. Open Issues and Next Step . . . . . . . . . . . . . . . . . . 20
8.1. The PCE-Initiated LSP . . . . . . . . . . . . . . . . . . 23 8.1. The PCE-Initiated LSP . . . . . . . . . . . . . . . . . . 20
8.2. PCEP over TLS (PCEPS) . . . . . . . . . . . . . . . . . . 23 9. Other Considerations . . . . . . . . . . . . . . . . . . . . 20
9. PCEP YANG Modules . . . . . . . . . . . . . . . . . . . . . . 23 9.1. PCEP over TLS (PCEPS) . . . . . . . . . . . . . . . . . . 20
9.1. ietf-pcep module . . . . . . . . . . . . . . . . . . . . 23 10. PCEP YANG Modules . . . . . . . . . . . . . . . . . . . . . . 21
9.2. ietf-pcep-stats module . . . . . . . . . . . . . . . . . 83 10.1. ietf-pcep module . . . . . . . . . . . . . . . . . . . . 21
10. Security Considerations . . . . . . . . . . . . . . . . . . . 103 10.2. ietf-pcep-stats module . . . . . . . . . . . . . . . . . 77
11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 104 11. Security Considerations . . . . . . . . . . . . . . . . . . . 97
12. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 105 12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 98
13. References . . . . . . . . . . . . . . . . . . . . . . . . . 105 13. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 98
13.1. Normative References . . . . . . . . . . . . . . . . . . 105 14. References . . . . . . . . . . . . . . . . . . . . . . . . . 98
13.2. Informative References . . . . . . . . . . . . . . . . . 106 14.1. Normative References . . . . . . . . . . . . . . . . . . 98
Appendix A. Contributor Addresses . . . . . . . . . . . . . . . 108 14.2. Informative References . . . . . . . . . . . . . . . . . 100
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 109 Appendix A. Contributor Addresses . . . . . . . . . . . . . . . 102
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 103
1. Introduction 1. Introduction
The Path Computation Element (PCE) defined in [RFC4655] is an entity The Path Computation Element (PCE) defined in [RFC4655] is an entity
that is capable of computing a network path or route based on a that is capable of computing a network path or route based on a
network graph, and applying computational constraints. A Path network graph, and applying computational constraints. A Path
Computation Client (PCC) may make requests to a PCE for paths to be Computation Client (PCC) may make requests to a PCE for paths to be
computed. computed.
PCEP is the communication protocol between a PCC and PCE and is PCEP is the communication protocol between a PCC and PCE and is
skipping to change at page 3, line 22 skipping to change at page 3, line 22
This document defines a YANG [RFC6020] data model for the management This document defines a YANG [RFC6020] data model for the management
of PCEP speakers. It is important to establish a common data model of PCEP speakers. It is important to establish a common data model
for how PCEP speakers are identified, configured, and monitored. The for how PCEP speakers are identified, configured, and monitored. The
data model includes configuration data and state data (status data model includes configuration data and state data (status
information and counters for the collection of statistics). information and counters for the collection of statistics).
This document contains a specification of the PCEP YANG module, This document contains a specification of the PCEP YANG module,
"ietf-pcep" which provides the PCEP [RFC5440] data model. "ietf-pcep" which provides the PCEP [RFC5440] data model.
The PCEP operational state is included in the same tree as the PCEP
configuration consistent with Network Management Datastore
Architecture [I-D.ietf-netmod-revised-datastores]. The origin of the
data is indicated as per the origin metadata annotation.
2. Requirements Language 2. Requirements Language
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in [RFC2119]. document are to be interpreted as described in [RFC2119].
3. Terminology and Notation 3. Terminology and Notation
This document uses the terminology defined in [RFC4655] and This document uses the terminology defined in [RFC4655] and
[RFC5440]. In particular, it uses the following acronyms. [RFC5440]. In particular, it uses the following acronyms.
skipping to change at page 6, line 5 skipping to change at page 6, line 5
printed within curly brackets and a question mark "{...}? printed within curly brackets and a question mark "{...}?
3.2. Prefixes in Data Node Names 3.2. Prefixes in Data Node Names
In this document, names of data nodes and other data model objects In this document, names of data nodes and other data model objects
are often used without a prefix, as long as it is clear from the are often used without a prefix, as long as it is clear from the
context in which YANG module each name is defined. Otherwise, names context in which YANG module each name is defined. Otherwise, names
are prefixed using the standard prefix associated with the are prefixed using the standard prefix associated with the
corresponding YANG module, as shown in Table 1. corresponding YANG module, as shown in Table 1.
+-----------+------------------+---------------------------------+ +-----------+-----------------+-------------------------------------+
| Prefix | YANG module | Reference | | Prefix | YANG module | Reference |
+-----------+------------------+---------------------------------+ +-----------+-----------------+-------------------------------------+
| yang | ietf-yang-types | [RFC6991] | | yang | ietf-yang-types | [RFC6991] |
| inet | ietf-inet-types | [RFC6991] | | inet | ietf-inet-types | [RFC6991] |
| te | ietf-te | [I-D.ietf-teas-yang-te] | | te | ietf-te | [I-D.ietf-teas-yang-te] |
| te-types | ietf-te-types | [I-D.ietf-teas-yang-te] | | te-types | ietf-te-types | [I-D.ietf-teas-yang-te] |
| key-chain | ietf-key-chain | [I-D.ietf-rtgwg-yang-key-chain] | | key-chain | ietf-key-chain | [RFC8177] |
| nacm | ietf-netconf-acm | [RFC6536] | | nacm | ietf-netconf- | [RFC6536] |
+-----------+------------------+---------------------------------+ | | acm | |
| tls- | ietf-tls-server | [I-D.ietf-netconf-tls-client-server |
| server | | ] |
| tls- | ietf-tls-client | [I-D.ietf-netconf-tls-client-server |
| client | | ] |
+-----------+-----------------+-------------------------------------+
Table 1: Prefixes and corresponding YANG modules Table 1: Prefixes and corresponding YANG modules
4. Objectives 4. Objectives
This section describes some of the design objectives for the model: This section describes some of the design objectives for the model:
o In case of existing implementations, it needs to map the data o In case of existing implementations, it needs to map the data
model defined in this document to their proprietary native data model defined in this document to their proprietary native data
model. To facilitate such mappings, the data model should be model. To facilitate such mappings, the data model should be
skipping to change at page 6, line 50 skipping to change at page 7, line 7
o It should be fairly straightforward to augment the base data model o It should be fairly straightforward to augment the base data model
for advanced PCE features. for advanced PCE features.
5. The Design of PCEP Data Model 5. The Design of PCEP Data Model
The module, "ietf-pcep", defines the basic components of a PCE The module, "ietf-pcep", defines the basic components of a PCE
speaker. speaker.
module: ietf-pcep module: ietf-pcep
+--rw pcep! +--rw pcep!
| +--rw entity +--rw entity
| +--rw addr inet:ip-address +--rw addr inet:ip-address
| +--rw enabled? boolean +--rw enabled? boolean
| +--rw role pcep-role +--rw role pcep-role
| +--rw description? string +--rw description? string
| +--rw speaker-entity-id? string +--rw speaker-entity-id? string
| | {stateful-sync-opt}?
| +--rw domain
| | +--rw domain* [domain-type domain]
| | +--rw domain-type domain-type
| | +--rw domain domain
| +--rw capability
| | +--rw gmpls? boolean {gmpls}?
| | +--rw bi-dir? boolean
| | +--rw diverse? boolean
| | +--rw load-balance? boolean
| | +--rw synchronize? boolean {svec}?
| | +--rw objective-function? boolean
| | | {objective-function}?
| | +--rw add-path-constraint? boolean
| | +--rw prioritization? boolean
| | +--rw multi-request? boolean
| | +--rw gco? boolean {gco}?
| | +--rw p2mp? boolean {p2mp}?
| | +--rw stateful {stateful}?
| | | +--rw enabled? boolean
| | | +--rw active? boolean
| | | +--rw pce-initiated? boolean
| | | | {pce-initiated}?
| | | +--rw include-db-ver? boolean
| | | | {stateful-sync-opt}?
| | | +--rw trigger-resync? boolean
| | | | {stateful-sync-opt}?
| | | +--rw trigger-initial-sync? boolean
| | | | {stateful-sync-opt}?
| | | +--rw incremental-sync? boolean
| | | {stateful-sync-opt}?
| | +--rw sr {sr}?
| | +--rw enabled? boolean
| +--rw pce-info
| | +--rw scope
| | | +--rw intra-area-scope? boolean
| | | +--rw intra-area-pref? uint8
| | | +--rw inter-area-scope? boolean
| | | +--rw inter-area-scope-default? boolean
| | | +--rw inter-area-pref? uint8
| | | +--rw inter-as-scope? boolean
| | | +--rw inter-as-scope-default? boolean
| | | +--rw inter-as-pref? uint8
| | | +--rw inter-layer-scope? boolean
| | | +--rw inter-layer-pref? uint8
| | +--rw neigh-domains
| | | +--rw domain* [domain-type domain]
| | | +--rw domain-type domain-type
| | | +--rw domain domain
| | +--rw path-key {path-key}?
| | +--rw enabled? boolean
| | +--rw discard-timer? uint32
| | +--rw reuse-time? uint32
| | +--rw pce-id? inet:ip-address
| +--rw (auth-type-selection)?
| | +--:(auth-key-chain)
| | | +--rw key-chain?
| | | key-chain:key-chain-ref
| | +--:(auth-key)
| | | +--rw crypto-algorithm identityref
| | | +--rw key-string
| | | +--rw (key-string-style)?
| | | +--:(keystring)
| | | | +--rw keystring? string
| | | +--:(hexadecimal)
| | | {key-chain:hex-key-string}?
| | | +--rw hexadecimal-string? yang:hex-string
| | +--:(auth-tls) {tls}?
| | +--rw tls
| +--rw connect-timer? uint32
| +--rw connect-max-retry? uint32
| +--rw init-backoff-timer? uint32
| +--rw max-backoff-timer? uint32
| +--rw open-wait-timer? uint32
| +--rw keep-wait-timer? uint32
| +--rw keep-alive-timer? uint32
| +--rw dead-timer? uint32
| +--rw allow-negotiation? boolean
| +--rw max-keep-alive-timer? uint32
| +--rw max-dead-timer? uint32
| +--rw min-keep-alive-timer? uint32
| +--rw min-dead-timer? uint32
| +--rw sync-timer? uint32 {svec}?
| +--rw request-timer? uint32
| +--rw max-sessions? uint32
| +--rw max-unknown-reqs? uint32
| +--rw max-unknown-msgs? uint32
| +--rw pcep-notification-max-rate uint32
| +--rw stateful-parameter {stateful}?
| | +--rw state-timeout? uint32
| | +--rw redelegation-timeout? uint32
| | +--rw rpt-non-pcep-lsp? boolean
| +--rw of-list {objective-function}?
| | +--rw objective-function* [of]
| | +--rw of objective-function
| +--rw peers
| +--rw peer* [addr]
| +--rw addr inet:ip-address
| +--rw description? string
| +--rw domain
| | +--rw domain* [domain-type domain]
| | +--rw domain-type domain-type
| | +--rw domain domain
| +--rw capability
| | +--rw gmpls? boolean {gmpls}?
| | +--rw bi-dir? boolean
| | +--rw diverse? boolean
| | +--rw load-balance? boolean
| | +--rw synchronize? boolean {svec}?
| | +--rw objective-function? boolean
| | | {objective-function}?
| | +--rw add-path-constraint? boolean
| | +--rw prioritization? boolean
| | +--rw multi-request? boolean
| | +--rw gco? boolean {gco}?
| | +--rw p2mp? boolean {p2mp}?
| | +--rw stateful {stateful}?
| | | +--rw enabled? boolean
| | | +--rw active? boolean
| | | +--rw pce-initiated? boolean
| | | | {pce-initiated}?
| | | +--rw include-db-ver? boolean
| | | | {stateful-sync-opt}?
| | | +--rw trigger-resync? boolean
| | | | {stateful-sync-opt}?
| | | +--rw trigger-initial-sync? boolean
| | | | {stateful-sync-opt}?
| | | +--rw incremental-sync? boolean
| | | {stateful-sync-opt}?
| | +--rw sr {sr}?
| | +--rw enabled? boolean
| +--rw scope
| | +--rw intra-area-scope? boolean
| | +--rw intra-area-pref? uint8
| | +--rw inter-area-scope? boolean
| | +--rw inter-area-scope-default? boolean
| | +--rw inter-area-pref? uint8
| | +--rw inter-as-scope? boolean
| | +--rw inter-as-scope-default? boolean
| | +--rw inter-as-pref? uint8
| | +--rw inter-layer-scope? boolean
| | +--rw inter-layer-pref? uint8
| +--rw neigh-domains
| | +--rw domain* [domain-type domain]
| | +--rw domain-type domain-type
| | +--rw domain domain
| +--rw delegation-pref? uint8 {stateful}?
| +--rw (auth-type-selection)?
| +--:(auth-key-chain)
| | +--rw key-chain?
| | key-chain:key-chain-ref
| +--:(auth-key)
| | +--rw crypto-algorithm identityref
| | +--rw key-string
| | +--rw (key-string-style)?
| | +--:(keystring)
| | | +--rw keystring? string
| | +--:(hexadecimal)
| | {key-chain:hex-key-string}?
| | +--rw hexadecimal-string?
| | yang:hex-string
| +--:(auth-tls) {tls}?
| +--rw tls
+--ro pcep-state
+--ro entity
+--ro addr? inet:ip-address
+--ro index? uint32
+--ro admin-status? pcep-admin-status
+--ro oper-status? pcep-admin-status
+--ro role? pcep-role
+--ro description? string
+--ro speaker-entity-id? string
| {stateful-sync-opt}? | {stateful-sync-opt}?
+--ro domain +--rw admin-status? pcep-admin-status
| +--ro domain* [domain-type domain] +--ro index? uint32
| +--ro domain-type domain-type +--ro oper-status? pcep-oper-status
| +--ro domain domain +--rw domain
+--ro capability | +--rw domain* [domain-type domain]
| +--ro gmpls? boolean {gmpls}? | +--rw domain-type domain-type
| +--ro bi-dir? boolean | +--rw domain domain
| +--ro diverse? boolean +--rw capability
| +--ro load-balance? boolean | +--rw gmpls? boolean {gmpls}?
| +--ro synchronize? boolean {svec}? | +--rw bi-dir? boolean
| +--ro objective-function? boolean | +--rw diverse? boolean
| +--rw load-balance? boolean
| +--rw synchronize? boolean {svec}?
| +--rw objective-function? boolean
| | {objective-function}? | | {objective-function}?
| +--ro add-path-constraint? boolean | +--rw add-path-constraint? boolean
| +--ro prioritization? boolean | +--rw prioritization? boolean
| +--ro multi-request? boolean | +--rw multi-request? boolean
| +--ro gco? boolean {gco}? | +--rw gco? boolean {gco}?
| +--ro p2mp? boolean {p2mp}? | +--rw p2mp? boolean {p2mp}?
| +--ro stateful {stateful}? | +--rw stateful {stateful}?
| | +--ro enabled? boolean | | +--rw enabled? boolean
| | +--ro active? boolean | | +--rw active? boolean
| | +--ro pce-initiated? boolean | | +--rw pce-initiated? boolean
| | | {pce-initiated}? | | | {pce-initiated}?
| | +--ro include-db-ver? boolean | | +--rw include-db-ver? boolean
| | | {stateful-sync-opt}? | | | {stateful-sync-opt}?
| | +--ro trigger-resync? boolean | | +--rw trigger-resync? boolean
| | | {stateful-sync-opt}? | | | {stateful-sync-opt}?
| | +--ro trigger-initial-sync? boolean | | +--rw trigger-initial-sync? boolean
| | | {stateful-sync-opt}? | | | {stateful-sync-opt}?
| | +--ro incremental-sync? boolean | | +--rw incremental-sync? boolean
| | {stateful-sync-opt}? | | {stateful-sync-opt}?
| +--ro sr {sr}? | +--rw sr {sr}?
| +--ro enabled? boolean | +--rw enabled? boolean
+--ro pce-info +--rw pce-info
| +--ro scope | +--rw scope
| | +--ro intra-area-scope? boolean | | +--rw intra-area-scope? boolean
| | +--ro intra-area-pref? uint8 | | +--rw intra-area-pref? uint8
| | +--ro inter-area-scope? boolean | | +--rw inter-area-scope? boolean
| | +--ro inter-area-scope-default? boolean | | +--rw inter-area-scope-default? boolean
| | +--ro inter-area-pref? uint8 | | +--rw inter-area-pref? uint8
| | +--ro inter-as-scope? boolean | | +--rw inter-as-scope? boolean
| | +--ro inter-as-scope-default? boolean | | +--rw inter-as-scope-default? boolean
| | +--ro inter-as-pref? uint8 | | +--rw inter-as-pref? uint8
| | +--ro inter-layer-scope? boolean | | +--rw inter-layer-scope? boolean
| | +--ro inter-layer-pref? uint8 | | +--rw inter-layer-pref? uint8
| +--ro neigh-domains | +--rw neigh-domains
| | +--ro domain* [domain-type domain] | | +--rw domain* [domain-type domain]
| | +--ro domain-type domain-type | | +--rw domain-type domain-type
| | +--ro domain domain | | +--rw domain domain
| +--ro path-key {path-key}? | +--rw path-key {path-key}?
| +--ro enabled? boolean | +--rw enabled? boolean
| +--ro discard-timer? uint32 | +--rw discard-timer? uint32
| +--ro reuse-time? uint32 | +--rw reuse-time? uint32
| +--ro pce-id? inet:ip-address | +--rw pce-id? inet:ip-address
+--ro (auth-type-selection)? +--rw (auth-type-selection)?
| +--:(auth-key-chain) | +--:(auth-key-chain)
| | +--ro key-chain? | | +--rw key-chain?
| | key-chain:key-chain-ref | | key-chain:key-chain-ref
| +--:(auth-key) | +--:(auth-key)
| | +--ro crypto-algorithm identityref | | +--rw crypto-algorithm identityref
| | +--ro key-string | | +--rw key-string
| | +--ro (key-string-style)? | | +--rw (key-string-style)?
| | +--:(keystring) | | +--:(keystring)
| | | +--ro keystring? string | | | +--rw keystring? string
| | +--:(hexadecimal) | | +--:(hexadecimal)
| | {key-chain:hex-key-string}? | | {key-chain:hex-key-string}?
| | +--ro hexadecimal-string? yang:hex-string | | +--rw hexadecimal-string?
| | yang:hex-string
| +--:(auth-tls) {tls}? | +--:(auth-tls) {tls}?
| +--ro tls | +--rw tls-pce
+--ro connect-timer? uint32 | | +--rw certificates
+--ro connect-max-retry? uint32 | | | +--rw certificate* [name]
+--ro init-backoff-timer? uint32 | | | +--rw name leafref
+--ro max-backoff-timer? uint32 | | +--rw client-auth
+--ro open-wait-timer? uint32 | | | +--rw trusted-ca-certs? leafref
+--ro keep-wait-timer? uint32 | | | +--rw trusted-client-certs? leafref
+--ro keep-alive-timer? uint32 | | +--rw hello-params
+--ro dead-timer? uint32 | | {tls-server-hello-params-config}?
+--ro allow-negotiation? boolean | | +--rw tls-versions
+--ro max-keep-alive-timer? uint32 | | | +--rw tls-version* identityref
+--ro max-dead-timer? uint32 | | +--rw cipher-suites
+--ro min-keep-alive-timer? uint32 | | +--rw cipher-suite* identityref
+--ro min-dead-timer? uint32 | +--rw tls-pcc
+--ro sync-timer? uint32 {svec}? | +--rw server-auth
+--ro request-timer? uint32 | | +--rw trusted-ca-certs? leafref
+--ro max-sessions? uint32 | | +--rw trusted-server-certs? leafref
+--ro max-unknown-reqs? uint32 | +--rw client-auth
+--ro max-unknown-msgs? uint32 | | +--rw (auth-type)?
+--ro stateful-parameter {stateful}? | | +--:(certificate)
| +--ro state-timeout? uint32 | | +--rw certificate? leafref
| +--ro redelegation-timeout? uint32 | +--rw hello-params
| +--ro rpt-non-pcep-lsp? boolean | {tls-client-hello-params-config}?
| +--rw tls-versions
| | +--rw tls-version* identityref
| +--rw cipher-suites
| +--rw cipher-suite* identityref
+--rw connect-timer? uint32
+--rw connect-max-retry? uint32
+--rw init-backoff-timer? uint32
+--rw max-backoff-timer? uint32
+--rw open-wait-timer? uint32
+--rw keep-wait-timer? uint32
+--rw keep-alive-timer? uint32
+--rw dead-timer? uint32
+--rw allow-negotiation? boolean
+--rw max-keep-alive-timer? uint32
+--rw max-dead-timer? uint32
+--rw min-keep-alive-timer? uint32
+--rw min-dead-timer? uint32
+--rw sync-timer? uint32 {svec}?
+--rw request-timer? uint32
+--rw max-sessions? uint32
+--rw max-unknown-reqs? uint32
+--rw max-unknown-msgs? uint32
+--rw pcep-notification-max-rate uint32
+--rw stateful-parameter {stateful}?
| +--rw state-timeout? uint32
| +--rw redelegation-timeout? uint32
| +--rw rpt-non-pcep-lsp? boolean
+--rw of-list {objective-function}?
| +--rw objective-function* [of]
| +--rw of objective-function
+--ro lsp-db {stateful}? +--ro lsp-db {stateful}?
| +--ro db-ver? uint64 | +--ro db-ver? uint64
| | {stateful-sync-opt}? | | {stateful-sync-opt}?
| +--ro association-list* | +--ro association-list*
| | [id source global-source extended-id] | | [id source global-source extended-id]
| | +--ro type? assoc-type | | +--ro type? assoc-type
| | +--ro id uint16 | | +--ro id uint16
| | +--ro source inet:ip-address | | +--ro source inet:ip-address
| | +--ro global-source uint32 | | +--ro global-source uint32
| | +--ro extended-id string | | +--ro extended-id string
| | +--ro lsp* [plsp-id pcc-id] | | +--ro lsp* [plsp-id pcc-id]
| | +--ro plsp-id leafref | | +--ro plsp-id
| | +--ro pcc-id leafref | | | -> /pcep/entity/lsp-db/lsp/plsp-id
| | +--ro pcc-id
| | -> /pcep/entity/lsp-db/lsp/pcc-id
| +--ro lsp* [plsp-id pcc-id] | +--ro lsp* [plsp-id pcc-id]
| +--ro plsp-id uint32 | +--ro plsp-id uint32
| +--ro pcc-id inet:ip-address | +--ro pcc-id inet:ip-address
| +--ro lsp-ref | +--ro lsp-ref
| | +--ro source? | | +--ro source?
| | | -> /te:te/lsps-state/lsp/source | | | -> /te:te/lsps-state/lsp/source
| | +--ro destination? | | +--ro destination?
| | | -> /te:te/lsps-state/lsp/destination | | | -> /te:te/lsps-state/lsp/destination
| | +--ro tunnel-id? | | +--ro tunnel-id?
| | | -> /te:te/lsps-state/lsp/tunnel-id | | | -> /te:te/lsps-state/lsp/tunnel-id
| | +--ro lsp-id? | | +--ro lsp-id?
| | | -> /te:te/lsps-state/lsp/lsp-id | | | -> /te:te/lsps-state/lsp/lsp-id
| | +--ro extended-tunnel-id? leafref | | +--ro extended-tunnel-id? leafref
| | +--ro type? | | +--ro type?
| | -> /te:te/lsps-state/lsp/type | | -> /te:te/lsps-state/lsp/type
| +--ro admin-state? boolean | +--ro admin-state? boolean
| +--ro operational-state? operational-state | +--ro operational-state? operational-state
| +--ro delegated | +--ro delegated
| | +--ro enabled? boolean | | +--ro enabled? boolean
| | +--ro peer? | | +--ro peer? -> /pcep/entity/peers/peer/addr
| | | -> /pcep-state/entity/peers/peer/addr
| | +--ro srp-id? uint32 | | +--ro srp-id? uint32
| +--ro initiation {pce-initiated}? | +--ro initiation {pce-initiated}?
| | +--ro enabled? boolean | | +--ro enabled? boolean
| | +--ro peer? | | +--ro peer? -> /pcep/entity/peers/peer/addr
| | -> /pcep-state/entity/peers/peer/addr
| +--ro symbolic-path-name? string | +--ro symbolic-path-name? string
| +--ro last-error? lsp-error | +--ro last-error? lsp-error
| +--ro pst? pst | +--ro pst? pst
| +--ro association-list* | +--ro association-list*
| [id source global-source extended-id] | [id source global-source extended-id]
| +--ro id leafref | +--ro id leafref
| +--ro source leafref | +--ro source leafref
| +--ro global-source leafref | +--ro global-source leafref
| +--ro extended-id leafref | +--ro extended-id leafref
+--ro path-keys {path-key}? +--ro path-keys {path-key}?
skipping to change at page 13, line 48 skipping to change at page 11, line 11
| | +--:(ip-address) | | +--:(ip-address)
| | | +--ro ip-address-hop | | | +--ro ip-address-hop
| | | +--ro address? inet:ip-address | | | +--ro address? inet:ip-address
| | | +--ro hop-type? te-hop-type | | | +--ro hop-type? te-hop-type
| | +--:(as-number) | | +--:(as-number)
| | | +--ro as-number-hop | | | +--ro as-number-hop
| | | +--ro as-number? binary | | | +--ro as-number? binary
| | | +--ro hop-type? te-hop-type | | | +--ro hop-type? te-hop-type
| | +--:(unnumbered-link) | | +--:(unnumbered-link)
| | | +--ro unnumbered-hop | | | +--ro unnumbered-hop
| | | +--ro router-id? inet:ip-address | | | +--ro router-id?
| | | | inet:ip-address
| | | +--ro interface-id? uint32 | | | +--ro interface-id? uint32
| | | +--ro hop-type? te-hop-type | | | +--ro hop-type? te-hop-type
| | +--:(label) | | +--:(label)
| | | +--ro label-hop | | | +--ro label-hop
| | | +--ro value? | | | +--ro value?
| | | rt-types:generalized-label | | | rt-types:generalized-label
| | +--:(sid) | | +--:(sid)
| | +--ro sid-hop | | +--ro sid-hop
| | +--ro sid? | | +--ro sid?
| | rt-types:generalized-label | | rt-types:generalized-label
| +--ro pcc-original? | +--ro pcc-original?
| | -> /pcep-state/entity/peers/peer/addr | | -> /pcep/entity/peers/peer/addr
| +--ro req-id? uint32 | +--ro req-id? uint32
| +--ro retrieved? boolean | +--ro retrieved? boolean
| +--ro pcc-retrieved? | +--ro pcc-retrieved?
| | -> /pcep-state/entity/peers/peer/addr | | -> /pcep/entity/peers/peer/addr
| +--ro creation-time? yang:timestamp | +--ro creation-time? yang:timestamp
| +--ro discard-time? uint32 | +--ro discard-time? uint32
| +--ro reuse-time? uint32 | +--ro reuse-time? uint32
+--ro of-list {objective-function}? +--rw peers
| +--ro objective-function* [of] +--rw peer* [addr]
| +--ro of objective-function +--rw addr inet:ip-address
+--ro peers
+--ro peer* [addr]
+--ro addr inet:ip-address
+--ro role? pcep-role +--ro role? pcep-role
+--ro domain +--rw description? string
| +--ro domain* [domain-type domain] +--rw domain
| +--ro domain-type domain-type | +--rw domain* [domain-type domain]
| +--ro domain domain | +--rw domain-type domain-type
+--ro capability | +--rw domain domain
| +--ro gmpls? boolean {gmpls}? +--rw capability
| +--ro bi-dir? boolean | +--rw gmpls? boolean
| +--ro diverse? boolean | | {gmpls}?
| +--ro load-balance? boolean | +--rw bi-dir? boolean
| +--ro synchronize? boolean {svec}? | +--rw diverse? boolean
| +--ro objective-function? boolean | +--rw load-balance? boolean
| +--rw synchronize? boolean {svec}?
| +--rw objective-function? boolean
| | {objective-function}? | | {objective-function}?
| +--ro add-path-constraint? boolean | +--rw add-path-constraint? boolean
| +--ro prioritization? boolean | +--rw prioritization? boolean
| +--ro multi-request? boolean | +--rw multi-request? boolean
| +--ro gco? boolean {gco}? | +--rw gco? boolean {gco}?
| +--ro p2mp? boolean {p2mp}? | +--rw p2mp? boolean {p2mp}?
| +--ro stateful {stateful}? | +--rw stateful {stateful}?
| | +--ro enabled? boolean | | +--rw enabled? boolean
| | +--ro active? boolean | | +--rw active? boolean
| | +--ro pce-initiated? boolean | | +--rw pce-initiated? boolean
| | | {pce-initiated}? | | | {pce-initiated}?
| | +--ro include-db-ver? boolean | | +--rw include-db-ver? boolean
| | | {stateful-sync-opt}? | | | {stateful-sync-opt}?
| | +--ro trigger-resync? boolean | | +--rw trigger-resync? boolean
| | | {stateful-sync-opt}? | | | {stateful-sync-opt}?
| | +--ro trigger-initial-sync? boolean | | +--rw trigger-initial-sync? boolean
| | | {stateful-sync-opt}? | | | {stateful-sync-opt}?
| | +--ro incremental-sync? boolean | | +--rw incremental-sync? boolean
| | {stateful-sync-opt}? | | {stateful-sync-opt}?
| +--ro sr {sr}? | +--rw sr {sr}?
| +--ro enabled? boolean | +--rw enabled? boolean
+--ro pce-info +--rw pce-info
| +--ro scope | +--rw scope
| | +--ro intra-area-scope? boolean | | +--rw intra-area-scope? boolean
| | +--ro intra-area-pref? uint8 | | +--rw intra-area-pref? uint8
| | +--ro inter-area-scope? boolean | | +--rw inter-area-scope? boolean
| | +--ro inter-area-scope-default? boolean | | +--rw inter-area-scope-default? boolean
| | +--ro inter-area-pref? uint8 | | +--rw inter-area-pref? uint8
| | +--ro inter-as-scope? boolean | | +--rw inter-as-scope? boolean
| | +--ro inter-as-scope-default? boolean | | +--rw inter-as-scope-default? boolean
| | +--ro inter-as-pref? uint8 | | +--rw inter-as-pref? uint8
| | +--ro inter-layer-scope? boolean | | +--rw inter-layer-scope? boolean
| | +--ro inter-layer-pref? uint8 | | +--rw inter-layer-pref? uint8
| +--ro neigh-domains | +--rw neigh-domains
| +--ro domain* [domain-type domain] | +--rw domain* [domain-type domain]
| +--ro domain-type domain-type | +--rw domain-type domain-type
| +--ro domain domain | +--rw domain domain
+--ro delegation-pref? uint8 {stateful}? +--rw delegation-pref? uint8 {stateful}?
+--ro (auth-type-selection)? +--rw (auth-type-selection)?
| +--:(auth-key-chain) | +--:(auth-key-chain)
| | +--ro key-chain? | | +--rw key-chain?
| | key-chain:key-chain-ref | | key-chain:key-chain-ref
| +--:(auth-key) | +--:(auth-key)
| | +--ro crypto-algorithm identityref | | +--rw crypto-algorithm identityref
| | +--ro key-string | | +--rw key-string
| | +--ro (key-string-style)? | | +--rw (key-string-style)?
| | +--:(keystring) | | +--:(keystring)
| | | +--ro keystring? string | | | +--rw keystring? string
| | +--:(hexadecimal) | | +--:(hexadecimal)
| | {key-chain:hex-key-string}? | | {key-chain:hex-key-string}?
| | +--ro hexadecimal-string? | | +--rw hexadecimal-string?
| | yang:hex-string | | yang:hex-string
| +--:(auth-tls) {tls}? | +--:(auth-tls) {tls}?
| +--ro tls | +--rw tls-pce
| | +--rw certificates
| | | +--rw certificate* [name]
| | | +--rw name leafref
| | +--rw client-auth
| | | +--rw trusted-ca-certs? leafref
| | | +--rw trusted-client-certs? leafref
| | +--rw hello-params
| | {tls-server-hello-params-config}?
| | +--rw tls-versions
| | | +--rw tls-version* identityref
| | +--rw cipher-suites
| | +--rw cipher-suite* identityref
| +--rw tls-pcc
| +--rw server-auth
| | +--rw trusted-ca-certs? leafref
| | +--rw trusted-server-certs? leafref
| +--rw client-auth
| | +--rw (auth-type)?
| | +--:(certificate)
| | +--rw certificate? leafref
| +--rw hello-params
| {tls-client-hello-params-config}?
| +--rw tls-versions
| | +--rw tls-version* identityref
| +--rw cipher-suites
| +--rw cipher-suite* identityref
+--ro discontinuity-time? yang:timestamp +--ro discontinuity-time? yang:timestamp
+--ro initiate-session? boolean +--ro initiate-session? boolean
+--ro session-exists? boolean +--ro session-exists? boolean
+--ro session-up-time? yang:timestamp +--ro session-up-time? yang:timestamp
+--ro session-fail-time? yang:timestamp +--ro session-fail-time? yang:timestamp
+--ro session-fail-up-time? yang:timestamp +--ro session-fail-up-time? yang:timestamp
+--ro sessions +--ro sessions
+--ro session* [initiator] +--ro session* [initiator]
+--ro initiator pcep-initiator +--ro initiator pcep-initiator
+--ro role? -> ../../../role +--ro role?
| -> /pcep/entity/role
+--ro state-last-change? yang:timestamp +--ro state-last-change? yang:timestamp
+--ro state? pcep-sess-state +--ro state? pcep-sess-state
+--ro session-creation? yang:timestamp +--ro session-creation? yang:timestamp
+--ro connect-retry? yang:counter32 +--ro connect-retry? yang:counter32
+--ro local-id? uint32 +--ro local-id? uint32
+--ro remote-id? uint32 +--ro remote-id? uint32
+--ro keepalive-timer? uint32 +--ro keepalive-timer? uint32
+--ro peer-keepalive-timer? uint32 +--ro peer-keepalive-timer? uint32
+--ro dead-timer? uint32 +--ro dead-timer? uint32
+--ro peer-dead-timer? uint32 +--ro peer-dead-timer? uint32
+--ro ka-hold-time-rem? uint32 +--ro ka-hold-time-rem? uint32
+--ro overloaded? boolean
+--ro overload-time? uint32 +--ro overload-time? uint32
+--ro peer-overloaded? boolean +--ro peer-overloaded? boolean
+--ro peer-overload-time? uint32 +--ro peer-overload-time? uint32
+--ro lspdb-sync? sync-state +--ro lspdb-sync? sync-state
| {stateful}? | {stateful}?
+--ro recv-db-ver? uint64 +--ro recv-db-ver? uint64
| {stateful,stateful-sync-opt}? | {stateful,stateful-sync-opt}?
+--ro of-list {objective-function}? +--ro of-list {objective-function}?
| +--ro objective-function* [of] | +--ro objective-function* [of]
| +--ro of objective-function | +--ro of objective-function
+--ro speaker-entity-id? string +--ro speaker-entity-id? string
| {stateful-sync-opt}? | {stateful-sync-opt}?
+--ro discontinuity-time? yang:timestamp +--ro discontinuity-time? yang:timestamp
rpcs: rpcs:
+---x trigger-resync {stateful,stateful-sync-opt}? +---x trigger-resync {stateful,stateful-sync-opt}?
+---w input +---w input
+---w pcc? -> /pcep-state/entity/peers/peer/addr +---w pcc? -> /pcep/entity/peers/peer/addr
notifications: notifications:
+---n pcep-session-up +---n pcep-session-up
| +--ro peer-addr? | +--ro peer-addr? -> /pcep/entity/peers/peer/addr
| | -> /pcep-state/entity/peers/peer/addr
| +--ro session-initiator? leafref | +--ro session-initiator? leafref
| +--ro state-last-change? yang:timestamp | +--ro state-last-change? yang:timestamp
| +--ro state? pcep-sess-state | +--ro state? pcep-sess-state
+---n pcep-session-down +---n pcep-session-down
| +--ro peer-addr? | +--ro peer-addr? -> /pcep/entity/peers/peer/addr
| | -> /pcep-state/entity/peers/peer/addr
| +--ro session-initiator? pcep-initiator | +--ro session-initiator? pcep-initiator
| +--ro state-last-change? yang:timestamp | +--ro state-last-change? yang:timestamp
| +--ro state? pcep-sess-state | +--ro state? pcep-sess-state
+---n pcep-session-local-overload +---n pcep-session-local-overload
| +--ro peer-addr? | +--ro peer-addr? -> /pcep/entity/peers/peer/addr
| | -> /pcep-state/entity/peers/peer/addr
| +--ro session-initiator? leafref | +--ro session-initiator? leafref
| +--ro overloaded? boolean | +--ro overloaded? boolean
| +--ro overload-time? uint32 | +--ro overload-time? uint32
+---n pcep-session-local-overload-clear +---n pcep-session-local-overload-clear
| +--ro peer-addr? -> /pcep-state/entity/peers/peer/addr | +--ro peer-addr? -> /pcep/entity/peers/peer/addr
| +--ro overloaded? boolean | +--ro overloaded? boolean
+---n pcep-session-peer-overload +---n pcep-session-peer-overload
| +--ro peer-addr? | +--ro peer-addr? -> /pcep/entity/peers/peer/addr
| | -> /pcep-state/entity/peers/peer/addr
| +--ro session-initiator? leafref | +--ro session-initiator? leafref
| +--ro peer-overloaded? boolean | +--ro peer-overloaded? boolean
| +--ro peer-overload-time? uint32 | +--ro peer-overload-time? uint32
+---n pcep-session-peer-overload-clear +---n pcep-session-peer-overload-clear
+--ro peer-addr? +--ro peer-addr? -> /pcep/entity/peers/peer/addr
| -> /pcep-state/entity/peers/peer/addr
+--ro peer-overloaded? boolean +--ro peer-overloaded? boolean
5.1. The Entity 5.1. The Entity
The PCEP yang module may contain status information for the local The PCEP yang module may contain status information for the local
PCEP entity. PCEP entity.
The entity has an IP address (using ietf-inet-types [RFC6991]) and a The entity has an IP address (using ietf-inet-types [RFC6991]) and a
"role" leaf (the local entity PCEP role) as mandatory. "role" leaf (the local entity PCEP role) as mandatory.
skipping to change at page 18, line 13 skipping to change at page 15, line 41
successive sessions to that peer. successive sessions to that peer.
To limit the quantity of information that is stored, an To limit the quantity of information that is stored, an
implementation MAY choose to discard this information if and only if implementation MAY choose to discard this information if and only if
no PCEP session exists to the corresponding peer. no PCEP session exists to the corresponding peer.
The data model for PCEP peer presented in this document uses a flat The data model for PCEP peer presented in this document uses a flat
list of peers. Each peer in the list is identified by its IP address list of peers. Each peer in the list is identified by its IP address
(addr-type, addr). (addr-type, addr).
There is one list for static peer configuration ("/pcep/entity/ There is a list for static peer configuration and operational state
peers"), and a separate list for the operational state of all peers of all peers (i.e.static as well as discovered)("/pcep/entity/
(i.e. static as well as discovered)("/pcep-state/entity/peers"). peers"). The list is used to enable remote PCE configuration at PCC
The former is used to enable remote PCE configuration at PCC (or PCE) (or PCE) and has the operational state of these peers as well as the
while the latter has the operational state of these peers as well as remote PCE peer which were discovered and PCC peers that have
the remote PCE peer which were discovered and PCC peers that have
initiated session. initiated session.
5.3. The Session Lists 5.3. The Session Lists
The session list contains PCEP session that the PCEP entity (PCE or The session list contains PCEP session that the PCEP entity (PCE or
PCC) is currently participating in. The statistics in session are PCC) is currently participating in. The statistics in session are
semantically different from those in peer since the former applies to semantically different from those in peer since the former applies to
the current session only, whereas the latter is the aggregate for all the current session only, whereas the latter is the aggregate for all
sessions that have existed to that peer. sessions that have existed to that peer.
skipping to change at page 18, line 42 skipping to change at page 16, line 26
pair, one representing a session initiated by the local PCEP entity pair, one representing a session initiated by the local PCEP entity
and the other representing a session initiated by the peer. If and the other representing a session initiated by the peer. If
either of these sessions reaches active state first, then the other either of these sessions reaches active state first, then the other
is discarded. is discarded.
The data model for PCEP session presented in this document uses a The data model for PCEP session presented in this document uses a
flat list of sessions. Each session in the list is identified by its flat list of sessions. Each session in the list is identified by its
initiator. This index allows two sessions to exist transiently for a initiator. This index allows two sessions to exist transiently for a
given peer, as discussed above. given peer, as discussed above.
There is only one list for the operational state of all sessions
("/pcep-state/entity/peers/peer/sessions/session").
5.4. Notifications 5.4. Notifications
This YANG model defines a list of notifications to inform client of This YANG model defines a list of notifications to inform client of
important events detected during the protocol operation. The important events detected during the protocol operation. The
notifications defined cover the PCEP MIB notifications. notifications defined cover the PCEP MIB notifications.
5.5. RPC 5.5. RPC
This YANG model defines a RPC to trigger state resynchronization to a This YANG model defines a RPC to trigger state resynchronization to a
particular PCEP peer. particular PCEP peer.
6. The Design of PCEP Statistics Data Model 6. The Design of PCEP Statistics Data Model
The module, "ietf-pcep-stats", augments the ietf-pcep module to The module, "ietf-pcep-stats", augments the ietf-pcep module to
include statistics at the PCEP peer and session level. include statistics at the PCEP peer and session level.
module: ietf-pcep-stats module: ietf-pcep-stats
augment /p:pcep-state/p:entity/p:peers/p:peer: augment /p:pcep/p:entity/p:peers/p:peer:
+--ro num-sess-setup-ok? yang:counter32 +--ro num-sess-setup-ok? yang:counter32
+--ro num-sess-setup-fail? yang:counter32 +--ro num-sess-setup-fail? yang:counter32
+--ro pcep-stats +--ro pcep-stats
+--ro avg-rsp-time? uint32 +--ro avg-rsp-time? uint32
+--ro lwm-rsp-time? uint32 +--ro lwm-rsp-time? uint32
+--ro hwm-rsp-time? uint32 +--ro hwm-rsp-time? uint32
+--ro num-pcreq-sent? yang:counter32 +--ro num-pcreq-sent? yang:counter32
+--ro num-pcreq-rcvd? yang:counter32 +--ro num-pcreq-rcvd? yang:counter32
+--ro num-pcrep-sent? yang:counter32 +--ro num-pcrep-sent? yang:counter32
+--ro num-pcrep-rcvd? yang:counter32 +--ro num-pcrep-rcvd? yang:counter32
skipping to change at page 20, line 34 skipping to change at page 18, line 13
| +--ro num-initiate-sent? yang:counter32 | +--ro num-initiate-sent? yang:counter32
| +--ro num-initiate-rcvd? yang:counter32 | +--ro num-initiate-rcvd? yang:counter32
| +--ro num-initiate-rcvd-error-sent? yang:counter32 | +--ro num-initiate-rcvd-error-sent? yang:counter32
+--ro path-key {p:path-key}? +--ro path-key {p:path-key}?
| +--ro num-unknown-path-key? yang:counter32 | +--ro num-unknown-path-key? yang:counter32
| +--ro num-exp-path-key? yang:counter32 | +--ro num-exp-path-key? yang:counter32
| +--ro num-dup-path-key? yang:counter32 | +--ro num-dup-path-key? yang:counter32
| +--ro num-path-key-no-attempt? yang:counter32 | +--ro num-path-key-no-attempt? yang:counter32
+--ro num-req-sent-closed? yang:counter32 +--ro num-req-sent-closed? yang:counter32
+--ro num-req-rcvd-closed? yang:counter32 +--ro num-req-rcvd-closed? yang:counter32
augment /p:pcep-state/p:entity/p:peers/p:peer/p:sessions/p:session: augment /p:pcep/p:entity/p:peers/p:peer/p:sessions/p:session:
+--ro pcep-stats +--ro pcep-stats
+--ro avg-rsp-time? uint32 +--ro avg-rsp-time? uint32
+--ro lwm-rsp-time? uint32 +--ro lwm-rsp-time? uint32
+--ro hwm-rsp-time? uint32 +--ro hwm-rsp-time? uint32
+--ro num-pcreq-sent? yang:counter32 +--ro num-pcreq-sent? yang:counter32
+--ro num-pcreq-rcvd? yang:counter32 +--ro num-pcreq-rcvd? yang:counter32
+--ro num-pcrep-sent? yang:counter32 +--ro num-pcrep-sent? yang:counter32
+--ro num-pcrep-rcvd? yang:counter32 +--ro num-pcrep-rcvd? yang:counter32
+--ro num-pcerr-sent? yang:counter32 +--ro num-pcerr-sent? yang:counter32
+--ro num-pcerr-rcvd? yang:counter32 +--ro num-pcerr-rcvd? yang:counter32
skipping to change at page 22, line 27 skipping to change at page 20, line 4
o OF o OF
o GCO o GCO
o P2MP o P2MP
o GMPLS o GMPLS
o Inter-Layer o Inter-Layer
o Stateful PCE o Stateful PCE
o Segement Routing o Segement Routing
o Authentication including PCEPS (TLS) o Authentication including PCEPS (TLS)
[Editor's Note - TLS would be added in a future revision]
7.1. Stateful PCE's LSP-DB 7.1. Stateful PCE's LSP-DB
In the operational state of PCEP which supports stateful PCE mode, In the operational state of PCEP which supports stateful PCE mode,
the list of LSP state are maintained in LSP-DB. The key is the PLSP- the list of LSP state are maintained in LSP-DB. The key is the PLSP-
ID and the PCC IP address. ID and the PCC IP address.
The PCEP data model contains the operational state of LSPs (/pcep- The PCEP data model contains the operational state of LSPs
state/entity/lsp-db/lsp/) with PCEP specific attributes. The generic (/pcep/entity/lsp-db/lsp/) with PCEP specific attributes. The
TE attributes of the LSP are defined in [I-D.ietf-teas-yang-te]. A generic TE attributes of the LSP are defined in
reference to LSP state in TE model is maintained. [I-D.ietf-teas-yang-te]. A reference to LSP state in TE model is
maintained.
8. Open Issues and Next Step 8. Open Issues and Next Step
This section is added so that open issues can be tracked. This This section is added so that open issues can be tracked. This
section would be removed when the document is ready for publication. section would be removed when the document is ready for publication.
8.1. The PCE-Initiated LSP 8.1. The PCE-Initiated LSP
The TE Model at [I-D.ietf-teas-yang-te] should support creationg of The TE Model at [I-D.ietf-teas-yang-te] should support creating of
tunnels at the controller (PCE) and marking them as PCE-Initiated. tunnels at the controller (PCE) and marking them as PCE-Initiated.
The LSP-DB in the PCEP Yang (/pcep-state/entity/lsp-db/lsp/ The LSP-DB in the PCEP Yang (/pcep/entity/lsp-db/lsp/initiation) also
initiation) also marks the LSPs which are PCE-initiated. marks the LSPs which are PCE-initiated.
8.2. PCEP over TLS (PCEPS) 9. Other Considerations
A future version of this document would add TLS related 9.1. PCEP over TLS (PCEPS)
configurations.
9. PCEP YANG Modules [I-D.ietf-pce-pceps] describe the use of TLS in PCEP. The peer
acting as the PCEP client MUST act as the TLS client. The TLS client
actively opens the TLS connection and the TLS server passively
listens for the incoming TLS connections. The well-known TCP port
number 4189 is used by PCEP servers to listen for TCP connections
established by PCEP over TLS clients. The TLS client MUST send the
TLS ClientHello message to begin the TLS handshake. The TLS server
MUST send a CertificateRequest in order to request a certificate from
the TLS client. Once the TLS handshake has finished, the client and
the server MAY begin to exchange PCEP messages. Client and server
identity verification is done before the PCEP open message is sent.
This means that the identity verification is completed before the
PCEP session is started..
9.1. ietf-pcep module 10. PCEP YANG Modules
10.1. ietf-pcep module
RFC Ed.: In this section, replace all occurrences of 'XXXX' with the RFC Ed.: In this section, replace all occurrences of 'XXXX' with the
actual RFC number and all occurrences of the revision date below with actual RFC number and all occurrences of the revision date below with
the date of RFC publication (and remove this note). the date of RFC publication (and remove this note).
<CODE BEGINS> file "ietf-pcep@2017-03-12.yang" <CODE BEGINS> file "ietf-pcep@2017-06-29.yang"
module ietf-pcep { module ietf-pcep {
yang-version 1.1; yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-pcep"; namespace "urn:ietf:params:xml:ns:yang:ietf-pcep";
prefix pcep; prefix pcep;
import ietf-inet-types { import ietf-inet-types {
prefix "inet"; prefix "inet";
} }
import ietf-yang-types { import ietf-yang-types {
prefix "yang"; prefix "yang";
} }
import ietf-te { import ietf-te {
prefix "te"; prefix "te";
} }
import ietf-te-types { import ietf-te-types {
prefix "te-types"; prefix "te-types";
} }
import ietf-key-chain { import ietf-key-chain {
prefix "key-chain"; prefix "key-chain";
} }
import ietf-netconf-acm { import ietf-netconf-acm {
prefix nacm; prefix "nacm";
} }
organization import ietf-tls-server {
"IETF PCE (Path Computation Element) Working Group"; prefix "tls-server";
}
contact import ietf-tls-client {
"WG Web: <http://tools.ietf.org/wg/pce/> prefix "tls-client";
WG List: <mailto:pce@ietf.org> }
WG Chair: JP Vasseur organization
<mailto:jpv@cisco.com> "IETF PCE (Path Computation Element) Working Group";
WG Chair: Julien Meuric
<mailto:julien.meuric@orange.com>
WG Chair: Jonathan Hardwick
<mailto:Jonathan.Hardwick@metaswitch.com>
Editor: Dhruv Dhody
<mailto:dhruv.ietf@gmail.com>";
description contact
"The YANG module defines a generic configuration and "WG Web: <http://tools.ietf.org/wg/pce/>
operational model for PCEP common across all of the WG List: <mailto:pce@ietf.org>
vendor implementations."; WG Chair: JP Vasseur
<mailto:jpv@cisco.com>
WG Chair: Julien Meuric
<mailto:julien.meuric@orange.com>
WG Chair: Jonathan Hardwick
<mailto:Jonathan.Hardwick@metaswitch.com>
Editor: Dhruv Dhody
<mailto:dhruv.ietf@gmail.com>";
revision 2017-03-12 { description
description "Initial revision."; "The YANG module defines a generic configuration and
reference operational model for PCEP common across all of the
"RFC XXXX: A YANG Data Model for Path Computation vendor implementations.";
Element Communications Protocol
(PCEP)";
}
/* revision 2017-06-29 {
* Identities description "Initial revision.";
*/ reference
"RFC XXXX: A YANG Data Model for Path Computation
Element Communications Protocol
(PCEP)";
}
identity pcep { /*
description "Identity for the PCEP protocol."; * Identities
} */
/* identity pcep {
* Typedefs description "Identity for the PCEP protocol.";
*/ }
typedef pcep-role { /*
type enumeration { * Typedefs
enum unknown { */
value "0"; typedef pcep-role {
description type enumeration {
"An unknown role"; enum unknown {
} value "0";
enum pcc { description
value "1"; "An unknown role";
description }
"The role of a Path Computation Client"; enum pcc {
} value "1";
enum pce { description
value "2"; "The role of a Path Computation Client";
description }
"The role of Path Computation Element"; enum pce {
} value "2";
enum pcc-and-pce { description
value "3"; "The role of Path Computation Element";
description }
"The role of both Path Computation Client and enum pcc-and-pce {
Path Computation Element"; value "3";
} description
} "The role of both Path Computation Client and
Path Computation Element";
}
}
description description
"The role of a PCEP speaker. "The role of a PCEP speaker.
Takes one of the following values Takes one of the following values
- unknown(0): the role is not known. - unknown(0): the role is not known.
- pcc(1): the role is of a Path Computation - pcc(1): the role is of a Path Computation
Client (PCC). Client (PCC).
- pce(2): the role is of a Path Computation - pce(2): the role is of a Path Computation
Server (PCE). Server (PCE).
- pccAndPce(3): the role is of both a PCC and - pccAndPce(3): the role is of both a PCC and
a PCE."; a PCE.";
} }
typedef pcep-admin-status { typedef pcep-admin-status {
type enumeration { type enumeration {
enum admin-status-up { enum admin-status-up {
value "1"; value "1";
description description
"Admin Status is Up"; "Admin Status is Up";
} }
enum admin-status-down { enum admin-status-down {
value "2"; value "2";
description description
"Admin Status is Down"; "Admin Status is Down";
} }
} }
description description
"The Admin Status of the PCEP entity. "The Admin Status of the PCEP entity.
Takes one of the following values Takes one of the following values
- admin-status-up(1): Admin Status is Up. - admin-status-up(1): Admin Status is Up.
- admin-status-down(2): Admin Status is Down";
}
typedef pcep-oper-status { - admin-status-down(2): Admin Status is Down";
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 typedef pcep-oper-status {
- oper-status-up(1): Active type enumeration {
- oper-status-down(2): Inactive enum oper-status-up {
- oper-status-going-up(3): Activating value "1";
- oper-status-going-down(4): Deactivating description
- oper-status-failed(5): Failed "The PCEP entity is active";
- oper-status-failed-perm(6): Failed Permanantly"; }
} 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";
}
typedef pcep-initiator { enum remote {
type enumeration { value "2";
enum local { description
value "1"; "The remote PCEP peer initiated the session";
description }
"The local PCEP entity 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";
}
enum remote { typedef pcep-sess-state {
value "2"; type enumeration {
description enum tcp-pending {
"The remote PCEP peer initiated the session"; value "1";
} description
} "The tcp-pending state of PCEP 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 { enum open-wait {
type enumeration { value "2";
enum tcp-pending { description
value "1"; "The open-wait state of PCEP session.";
description }
"The tcp-pending state of PCEP session.";
}
enum open-wait { enum keep-wait {
value "2"; value "3";
description description
"The open-wait state of PCEP session."; "The keep-wait state of PCEP session.";
} }
enum keep-wait { enum session-up {
value "3"; value "4";
description description
"The keep-wait state of PCEP session."; "The session-up state of PCEP session.";
} }
enum session-up { }
value "4"; description
description "The current state of the session.
"The session-up state of PCEP 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
description - tcp-pending(1): PCEP TCP Pending state
"The current state of the session. - open-wait(2): PCEP Open Wait state
The set of possible states excludes the idle state - keep-wait(3): PCEP Keep Wait state
since entries do not exist in the idle state. - session-up(4): PCEP Session Up 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";
}
typedef domain-type { typedef domain-type {
type enumeration { type enumeration {
enum ospf-area { enum ospf-area {
value "1"; value "1";
description description
"The OSPF area."; "The OSPF area.";
} }
enum isis-area { enum isis-area {
value "2"; value "2";
description description
"The IS-IS area."; "The IS-IS area.";
} }
enum as { enum as {
value "3"; value "3";
description description
"The Autonomous System (AS)."; "The Autonomous System (AS).";
} }
} }
description description
"The PCE Domain Type"; "The PCE Domain Type";
} }
typedef domain-ospf-area { typedef domain-ospf-area {
type union { type union {
type uint32; type uint32;
type yang:dotted-quad; type yang:dotted-quad;
}
description
"OSPF Area ID.";
} }
description
"OSPF Area ID.";
}
typedef domain-isis-area { typedef domain-isis-area {
type string { type string {
pattern '[0-9A-Fa-f]{2}\.([0-9A-Fa-f]{4}\.){0,3}'; pattern '[0-9A-Fa-f]{2}\.([0-9A-Fa-f]{4}\.){0,3}';
} }
description description
"IS-IS Area ID."; "IS-IS Area ID.";
} }
typedef domain-as { typedef domain-as {
type uint32; type uint32;
description description
"Autonomous System number."; "Autonomous System number.";
} }
typedef domain { typedef domain {
type union { type union {
type domain-ospf-area; type domain-ospf-area;
type domain-isis-area; type domain-isis-area;
type domain-as; type domain-as;
} }
description description
"The Domain Information"; "The Domain Information";
} }
typedef operational-state { typedef operational-state {
type enumeration { type enumeration {
enum down { enum down {
value "0"; value "0";
description description
"not active."; "not active.";
} }
enum up { enum up {
value "1"; value "1";
description description
"signalled."; "signalled.";
} }
enum active { enum active {
value "2"; value "2";
description description
"up and carrying traffic."; "up and carrying traffic.";
} }
enum going-down { enum going-down {
value "3"; value "3";
description description
"LSP is being torn down, resources are "LSP is being torn down, resources are
being released."; being released.";
} }
enum going-up { enum going-up {
value "4"; value "4";
description description
"LSP is being signalled."; "LSP is being signalled.";
} }
}
description
"The operational status of the LSP";
}
typedef lsp-error { }
type enumeration { description
enum no-error { "The operational status of the LSP";
value "0"; }
description
"No error, LSP is fine.";
}
enum unknown {
value "1";
description
"Unknown reason.";
}
enum limit {
value "2";
description
"Limit reached for PCE-controlled LSPs.";
}
enum pending {
value "3";
description
"Too many pending LSP update requests.";
}
enum unacceptable {
value "4";
description
"Unacceptable parameters.";
}
enum internal {
value "5";
description
"Internal error.";
}
enum admin {
value "6";
description
"LSP administratively brought down.";
}
enum preempted {
value "7";
description
"LSP preempted.";
}
enum rsvp {
value "8";
description
"RSVP signaling error.";
}
}
description
"The LSP Error Codes.";
}
typedef sync-state { typedef lsp-error {
type enumeration { type enumeration {
enum pending { enum no-error {
value "0"; value "0";
description description
"The state synchronization "No error, LSP is fine.";
has not started."; }
} enum unknown {
enum ongoing { value "1";
value "1"; description
description "Unknown reason.";
"The state synchronization }
is ongoing."; enum limit {
} value "2";
enum finished { description
value "2"; "Limit reached for PCE-controlled LSPs.";
description }
"The state synchronization enum pending {
is finished."; value "3";
} description
} "Too many pending LSP update requests.";
description }
"The LSP-DB state synchronization operational enum unacceptable {
status."; value "4";
} description
"Unacceptable parameters.";
}
enum internal {
value "5";
description
"Internal error.";
}
enum admin {
value "6";
description
"LSP administratively brought down.";
}
enum preempted {
value "7";
description
"LSP preempted.";
}
enum rsvp {
value "8";
description
"RSVP signaling error.";
}
}
description
"The LSP Error Codes.";
}
typedef pst{ typedef sync-state {
type enumeration{ type enumeration {
enum rsvp-te{ enum pending {
value "0"; value "0";
description description
"RSVP-TE signaling protocol"; "The state synchronization
} has not started.";
enum sr{ }
value "1"; enum ongoing {
description value "1";
"Segment Routing Traffic Engineering"; description
} "The state synchronization
} is ongoing.";
description }
"The Path Setup Type"; enum finished {
} value "2";
description
"The state synchronization
is finished.";
}
}
description
"The LSP-DB state synchronization operational
status.";
}
typedef assoc-type{ typedef pst{
type enumeration{ type enumeration{
enum protection{ enum rsvp-te{
value "1"; value "0";
description description
"Path Protection Association Type"; "RSVP-TE signaling protocol";
} }
enum policy{ enum sr{
value "2"; value "1";
description description
"Policy Association Type"; "Segment Routing Traffic Engineering";
} }
enum diversity{ }
value "3"; description
description "The Path Setup Type";
"Diversity Association Type"; }
}
}
description
"The PCEP Association Type";
}
typedef objective-function{ typedef assoc-type{
type enumeration{ type enumeration{
enum mcp{ enum protection{
value "1"; value "1";
description description
"Minimum Cost Path (MCP)"; "Path Protection Association Type";
} }
enum mlp{ enum policy{
value "2"; value "2";
description description
"Minimum Load Path (MLP)"; "Policy Association Type";
} }
enum mbp{ enum diversity{
value "3"; value "3";
description description
"Maximum residual Bandwidth Path (MBP)"; "Diversity Association Type";
} }
enum mbc{ }
value "4"; description
description "The PCEP Association Type";
"Minimize aggregate Bandwidth Consumption }
(MBC)";
}
enum mll{
value "5";
description
"Minimize the Load of the most loaded Link
(MLL)";
}
enum mcc{
value "6";
description
"Minimize the Cumulative Cost of a set of
paths (MCC)";
}
enum spt{
value "7";
description
"Shortest Path Tree (SPT)";
}
enum mct{
value "8";
description
"Minimum Cost Tree (MCT)";
}
enum mplp{
value "9";
description
"Minimum Packet Loss Path (MPLP)";
}
enum mup{
value "10";
description
"Maximum Under-Utilized Path (MUP)";
}
enum mrup{
value "11";
description
"Maximum Reserved Under-Utilized Path
(MRUP)";
}
} typedef objective-function{
description type enumeration{
"The PCEP Objective functions"; enum mcp{
} value "1";
description
"Minimum Cost Path (MCP)";
}
enum mlp{
value "2";
description
"Minimum Load Path (MLP)";
}
enum mbp{
value "3";
description
"Maximum residual Bandwidth Path (MBP)";
}
enum mbc{
value "4";
description
"Minimize aggregate Bandwidth Consumption
(MBC)";
/* }
* Features enum mll{
*/ value "5";
description
"Minimize the Load of the most loaded Link
(MLL)";
}
enum mcc{
value "6";
description
"Minimize the Cumulative Cost of a set of
paths (MCC)";
}
enum spt{
value "7";
description
"Shortest Path Tree (SPT)";
}
enum mct{
value "8";
description
"Minimum Cost Tree (MCT)";
}
enum mplp{
value "9";
description
"Minimum Packet Loss Path (MPLP)";
}
enum mup{
value "10";
description
"Maximum Under-Utilized Path (MUP)";
}
enum mrup{
value "11";
description
"Maximum Reserved Under-Utilized Path
(MRUP)";
}
}
description
"The PCEP Objective functions";
}
feature svec { /*
description * Features
"Support synchronized path computation."; */
}
feature gmpls { feature svec {
description description
"Support GMPLS."; "Support synchronized path computation.";
} }
feature objective-function { feature gmpls {
description description
"Support OF as per RFC 5541."; "Support GMPLS.";
} }
feature gco { feature objective-function {
description description
"Support GCO as per RFC 5557."; "Support OF as per RFC 5541.";
} }
feature path-key { feature gco {
description description
"Support path-key as per RFC 5520."; "Support GCO as per RFC 5557.";
} }
feature p2mp { feature path-key {
description description
"Support P2MP as per RFC 6006."; "Support path-key as per RFC 5520.";
} }
feature stateful { feature p2mp {
description description
"Support stateful PCE."; "Support P2MP as per RFC 6006.";
} }
feature stateful-sync-opt { feature stateful {
description description
"Support stateful sync optimization"; "Support stateful PCE.";
} }
feature pce-initiated {
description
"Support PCE-Initiated LSP.";
}
feature tls { feature stateful-sync-opt {
description description
"Support PCEP over TLS."; "Support stateful sync optimization";
} }
feature sr { feature pce-initiated {
description description
"Support Segment Routing for PCE."; "Support PCE-Initiated LSP.";
} }
/* feature tls {
* Groupings description
*/ "Support PCEP over TLS.";
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 { feature sr {
type uint32; description
default 5; "Support Segment Routing for PCE.";
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) * Groupings
Communication Protocol (PCEP)"; */
} 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 init-backoff-timer { leaf connect-max-retry {
type uint32 { type uint32;
range "1..65535"; default 5;
} description
units "seconds"; "The maximum number of times the system tries to
description establish a TCP connection to a peer before the
"The initial back-off time in seconds for retrying session with the peer transitions to the idle
a failed session setup attempt to a peer. state.";
The back-off time increases for each failed reference
session setup attempt, until a maximum back-off "RFC 5440: Path Computation Element (PCE)
time is reached. The maximum back-off time is Communication Protocol (PCEP)";
max-backoff-timer."; }
}
leaf max-backoff-timer { leaf init-backoff-timer {
type uint32; type uint32 {
units "seconds"; range "1..65535";
description }
"The maximum back-off time in seconds for retrying units "seconds";
a failed session setup attempt to a peer. description
The back-off time increases for each failed session "The initial back-off time in seconds for retrying
setup attempt, until this maximum value is reached. a failed session setup attempt to a peer.
Session setup attempts then repeat periodically The back-off time increases for each failed
without any further increase in back-off time."; session setup attempt, until a maximum back-off
} time is reached. The maximum back-off time is
max-backoff-timer.";
}
leaf open-wait-timer { leaf max-backoff-timer {
type uint32 { type uint32;
range "1..65535"; units "seconds";
} description
units "seconds"; "The maximum back-off time in seconds for retrying
default 60; a failed session setup attempt to a peer.
description The back-off time increases for each failed session
"The time in seconds that the PCEP entity will wait setup attempt, until this maximum value is reached.
to receive an Open message from a peer after the Session setup attempts then repeat periodically
TCP connection has come up. without any further increase in back-off time.";
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 { leaf open-wait-timer {
type uint32 { type uint32 {
range "0..255"; range "1..65535";
} }
units "seconds"; units "seconds";
default 30; default 60;
description description
"The keep alive transmission timer that this PCEP "The time in seconds that the PCEP entity will wait
entity will propose in the initial OPEN message of to receive an Open message from a peer after the
each session it is involved in. This is the TCP connection has come up.
maximum time between two consecutive messages sent If no Open message is received within this time then
to a peer. Zero means that the PCEP entity prefers PCEP terminates the TCP connection and deletes the
not to send Keepalives at all. associated sessions.";
Note that the actual Keepalive transmission reference
intervals, in either direction of an active PCEP "RFC 5440: Path Computation Element (PCE)
session, are determined by negotiation between the Communication Protocol (PCEP)";
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 { leaf keep-wait-timer {
type uint32 { type uint32 {
range "0..255"; range "1..65535";
} }
units "seconds"; units "seconds";
must "(. > ../keep-alive-timer)" { default 60;
error-message "The dead timer must be " description
+ "larger than the keep alive timer"; "The time in seconds that the PCEP entity will wait
description to receive a Keepalive or PCErr message from a peer
"This value MUST be greater than during session initialization after receiving an
keep-alive-timer."; 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 {
default 120; type uint32 {
description range "0..255";
"The dead timer that this PCEP entity will propose }
in the initial OPEN message of each session it is units "seconds";
involved in. This is the time after which a peer default 30;
should declare a session down if it does not description
receive any PCEP messages. Zero suggests that the "The keep alive transmission timer that this PCEP
peer does not run a dead timer at all." ; entity will propose in the initial OPEN message of
reference each session it is involved in. This is the
"RFC 5440: Path Computation Element (PCE) maximum time between two consecutive messages sent
Communication Protocol (PCEP)"; 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 allow-negotiation{ leaf dead-timer {
type boolean; type uint32 {
description range "0..255";
"Whether the PCEP entity will permit negotiation of }
session parameters."; 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.";
leaf max-keep-alive-timer{ }
type uint32 { default 120;
range "0..255"; description
} "The dead timer that this PCEP entity will propose
units "seconds"; in the initial OPEN message of each session it is
description involved in. This is the time after which a peer
"In PCEP session parameter negotiation in seconds, should declare a session down if it does not
the maximum value that this PCEP entity will receive any PCEP messages. Zero suggests that the
accept from a peer for the interval between peer does not run a dead timer at all." ;
Keepalive transmissions. Zero means that the PCEP reference
entity will allow no Keepalive transmission at "RFC 5440: Path Computation Element (PCE)
all." ; Communication Protocol (PCEP)";
} }
leaf max-dead-timer{ leaf allow-negotiation{
type uint32 { type boolean;
range "0..255"; description
} "Whether the PCEP entity will permit negotiation of
units "seconds"; session parameters.";
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{ leaf max-keep-alive-timer{
type uint32 { type uint32 {
range "0..255"; range "0..255";
} }
units "seconds"; units "seconds";
description description
"In PCEP session parameter negotiation in seconds, "In PCEP session parameter negotiation in seconds,
the minimum value that this PCEP entity will the maximum value that this PCEP entity will
accept for the interval between Keepalive accept from a peer for the interval between
transmissions. Zero means that the PCEP entity Keepalive transmissions. Zero means that the PCEP
insists on no Keepalive transmission at all."; entity will allow no Keepalive transmission at
} all." ;
}
leaf min-dead-timer{ leaf max-dead-timer{
type uint32 { type uint32 {
range "0..255"; range "0..255";
} }
units "seconds"; units "seconds";
description description
"In PCEP session parameter negotiation in "In PCEP session parameter negotiation in seconds,
seconds, the minimum value that this PCEP entity the maximum value that this PCEP entity will accept
will accept for the Dead timer. Zero means that from a peer for the Dead timer. Zero means that
the PCEP entity insists on not running a Dead the PCEP entity will allow not running a Dead
timer."; timer.";
} }
leaf sync-timer{ leaf min-keep-alive-timer{
if-feature svec; type uint32 {
type uint32 { range "0..255";
range "0..65535"; }
} units "seconds";
units "seconds"; description
default 60; "In PCEP session parameter negotiation in seconds,
description the minimum value that this PCEP entity will
"The value of SyncTimer in seconds is used in the accept for the interval between Keepalive
case of synchronized path computation request transmissions. Zero means that the PCEP entity
using the SVEC object. Consider the case where a insists on no Keepalive transmission at all.";
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{ leaf min-dead-timer{
type uint32 { type uint32 {
range "1..65535"; range "0..255";
} }
units "seconds"; units "seconds";
description description
"The maximum time that the PCEP entity will wait "In PCEP session parameter negotiation in
for a response to a PCReq message."; 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 max-sessions{ leaf sync-timer{
type uint32; if-feature svec;
description type uint32 {
"Maximum number of sessions involving this PCEP range "0..65535";
entity that can exist at any time."; }
} 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 max-unknown-reqs{ leaf request-timer{
type uint32; type uint32 {
default 5; range "1..65535";
description }
"The maximum number of unrecognized requests and units "seconds";
replies that any session on this PCEP entity is description
willing to accept per minute before terminating "The maximum time that the PCEP entity will wait
the session. for a response to a PCReq message.";
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{ leaf max-sessions{
type uint32; type uint32;
default 5; description
description "Maximum number of sessions involving this PCEP
"The maximum number of unknown messages that any entity that can exist at any time.";
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 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)";
}
grouping pce-scope{ leaf max-unknown-msgs{
description type uint32;
"This grouping defines PCE path computation scope default 5;
information which maybe relevant to PCE selection. description
This information corresponds to PCE auto-discovery "The maximum number of unknown messages that any
information."; session on this PCEP entity is willing to accept
reference per minute before terminating the session.";
"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{ reference
description "RFC 5440: Path Computation Element (PCE)
"This grouping specifies a Domain where the Communication Protocol (PCEP)";
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{ }//pcep-entity-info
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.";
}
leaf gco{
if-feature gco;
type boolean;
description
"Support for Global Concurrent Optimization
(GCO).";
}
leaf p2mp{
if-feature p2mp;
type boolean;
description
"Support for P2MP path computation.";
}
container stateful{ grouping pce-scope{
if-feature stateful; description
description "This grouping defines PCE path computation scope
"If stateful PCE feature is present"; information which maybe relevant to PCE selection.
leaf enabled{ This information corresponds to PCE auto-discovery
type boolean; information.";
description reference
"Enabled or Disabled"; "RFC 5088: OSPF Protocol Extensions for Path
} Computation Element (PCE)
leaf active{ Discovery
type boolean; RFC 5089: IS-IS Protocol Extensions for Path
description Computation Element (PCE)
"Support for active stateful PCE."; Discovery";
} leaf intra-area-scope{
leaf pce-initiated{ type boolean;
if-feature pce-initiated; default true;
type boolean; description
description "PCE can compute intra-area paths.";
"Support for PCE-initiated LSP."; }
} leaf intra-area-pref{
leaf include-db-ver{ type uint8{
if-feature stateful-sync-opt; range "0..7";
type boolean; }
description description
"Support inclusion of LSP-DB-VERSION "The PCE's preference for intra-area TE LSP
in LSP object"; computation.";
} }
leaf trigger-resync{ leaf inter-area-scope{
if-feature stateful-sync-opt; type boolean;
type boolean; default false;
description description
"Support PCE triggered re-synchronization"; "PCE can compute inter-area paths.";
} }
leaf trigger-initial-sync{ leaf inter-area-scope-default{
if-feature stateful-sync-opt; type boolean;
type boolean; default false;
description description
"PCE triggered initial synchronization"; "PCE can act as a default PCE for inter-area
} path computation.";
leaf incremental-sync{ }
if-feature stateful-sync-opt; leaf inter-area-pref{
type boolean; type uint8{
description range "0..7";
"Support incremental (delta) sync"; }
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
container sr{ "This grouping specifies a Domain where the
if-feature sr; PCEP speaker has topology visibility.";
description
"If segment routing is supported";
leaf enabled{
type boolean;
description
"Enabled or Disabled";
}
} leaf domain-type{
}//capability type domain-type;
description
"The domain type.";
}
leaf domain{
type domain;
description
"The domain Information.";
}
}//domain
grouping info{ grouping capability{
description description
"This grouping specifies all information which "This grouping specifies a capability
maybe relevant to both PCC and PCE. information of local PCEP entity. This maybe
This information corresponds to PCE auto-discovery relevant to PCE selection as well. This
information."; information corresponds to PCE auto-discovery
container domain{ information.";
description reference
"The local domain for the PCEP entity"; "RFC 5088: OSPF Protocol Extensions for Path
list domain{ Computation Element (PCE)
key "domain-type domain"; Discovery
description RFC 5089: IS-IS Protocol Extensions for Path
"The local domain."; Computation Element (PCE)
uses domain{ Discovery";
description leaf gmpls{
"The local domain for the PCEP entity."; if-feature gmpls;
} type boolean;
} description
} "Path computation with GMPLS link
container capability{ constraints.";
description }
"The PCEP entity capability"; leaf bi-dir{
uses capability{ type boolean;
description description
"The PCEP entity supported "Bidirectional path computation.";
capabilities."; }
} 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.";
}
leaf gco{
if-feature gco;
type boolean;
description
"Support for Global Concurrent Optimization
(GCO).";
}
leaf p2mp{
if-feature p2mp;
type boolean;
description
"Support for P2MP path computation.";
}
}//info container stateful{
if-feature stateful;
description
"If stateful PCE feature is present";
leaf enabled{
type boolean;
description
"Enabled or Disabled";
}
leaf active{
type boolean;
description
"Support for active stateful PCE.";
}
leaf pce-initiated{
if-feature pce-initiated;
type boolean;
description
"Support for PCE-initiated LSP.";
}
leaf include-db-ver{
if-feature stateful-sync-opt;
type boolean;
description
"Support inclusion of LSP-DB-VERSION
in LSP object";
}
leaf trigger-resync{
if-feature stateful-sync-opt;
type boolean;
description
"Support PCE triggered re-synchronization";
}
leaf trigger-initial-sync{
if-feature stateful-sync-opt;
type boolean;
description
"PCE triggered initial synchronization";
}
leaf incremental-sync{
if-feature stateful-sync-opt;
type boolean;
description
"Support incremental (delta) sync";
}
}
container sr{
if-feature sr;
description
"If segment routing is supported";
leaf enabled{
type boolean;
description
"Enabled or Disabled";
grouping pce-info{ }
description
"This grouping specifies all PCE information
which maybe relevant to the PCE selection.
This information corresponds to PCE auto-discovery
information.";
container scope{
description
"The path computation scope";
uses pce-scope;
}
container neigh-domains{ }
description }//capability
"The list of neighbour PCE-Domain
toward which a PCE can compute
paths";
list domain{
key "domain-type domain";
description grouping info{
"The neighbour domain."; description
uses domain{ "This grouping specifies all information which
description maybe relevant to both PCC and PCE.
"The PCE neighbour domain."; This information corresponds to PCE auto-discovery
} information.";
} container domain{
} description
}//pce-info "The local domain for the PCEP entity";
list domain{
key "domain-type domain";
description
"The local domain.";
uses domain{
description
"The local domain for the PCEP entity.";
}
}
}
container capability{
description
"The PCEP entity capability";
uses capability{
description
"The PCEP entity supported
capabilities.";
}
}
grouping lsp-state{ }//info
description
"This grouping defines the attributes for LSP in LSP-DB.
These are the attributes specifically from the PCEP
perspective";
leaf plsp-id{
type uint32{
range "1..1048575";
}
description
"A PCEP-specific identifier for the LSP. A PCC
creates a unique PLSP-ID for each LSP that is
constant for the lifetime of a PCEP session.
PLSP-ID is 20 bits with 0 and 0xFFFFF are
reserved";
}
leaf pcc-id{
type inet:ip-address;
description
"The local internet address of the PCC, that
generated the PLSP-ID.";
}
container lsp-ref{ grouping pce-info{
description description
"reference to ietf-te lsp state"; "This grouping specifies all PCE information
which maybe relevant to the PCE selection.
This information corresponds to PCE auto-discovery
information.";
container scope{
description
"The path computation scope";
uses pce-scope;
}
container neigh-domains{
description
"The list of neighbour PCE-Domain
toward which a PCE can compute
paths";
list domain{
key "domain-type domain";
leaf source { description
type leafref { "The neighbour domain.";
path "/te:te/te:lsps-state/te:lsp/te:source"; uses domain{
} description
description "The PCE neighbour domain.";
"Tunnel sender address extracted from }
SENDER_TEMPLATE object"; }
reference "RFC3209"; }
} }//pce-info
leaf destination {
type leafref {
path "/te:te/te:lsps-state/te:lsp/te:"
+ "destination";
}
description
"Tunnel endpoint address extracted from
SESSION object";
reference "RFC3209";
}
leaf tunnel-id {
type leafref {
path "/te:te/te:lsps-state/te:lsp/te:tunnel-id";
}
description
"Tunnel identifier used in the SESSION
that remains constant over the life
of the tunnel.";
reference "RFC3209";
}
leaf lsp-id {
type leafref {
path "/te:te/te:lsps-state/te:lsp/te:lsp-id";
}
description
"Identifier used in the SENDER_TEMPLATE
and the FILTER_SPEC that can be changed
to allow a sender to share resources with
itself.";
reference "RFC3209";
}
leaf extended-tunnel-id {
type leafref {
path "/te:te/te:lsps-state/te:lsp/te:"
+ "extended-tunnel-id";
}
description
"Extended Tunnel ID of the LSP.";
reference "RFC3209";
}
leaf type {
type leafref {
path "/te:te/te:lsps-state/te:lsp/te:type";
}
description "LSP type P2P or P2MP";
}
}
leaf admin-state{ grouping lsp-state{
type boolean; description
description "This grouping defines the attributes for LSP in LSP-DB.
"The desired operational state"; These are the attributes specifically from the PCEP
} perspective";
leaf operational-state{ leaf plsp-id{
type operational-state; type uint32{
description range "1..1048575";
"The operational status of the LSP"; }
} description
container delegated{ "A PCEP-specific identifier for the LSP. A PCC
description creates a unique PLSP-ID for each LSP that is
"The delegation related parameters"; constant for the lifetime of a PCEP session.
leaf enabled{ PLSP-ID is 20 bits with 0 and 0xFFFFF are
type boolean; reserved";
description }
"LSP is delegated or not"; leaf pcc-id{
} type inet:ip-address;
leaf peer{ description
type leafref { "The local internet address of the PCC, that
path "/pcep-state/entity/peers/peer/addr"; generated the PLSP-ID.";
} }
must "(../enabled = true())"
{
error-message
"The LSP must be delegated";
description
"When LSP is a delegated LSP";
}
description
"At the PCC, the reference to the PCEP peer to
which LSP is delegated; At the PCE, the
reference to the PCEP peer which delegated this
LSP";
}
leaf srp-id{
type uint32;
description
"The last SRP-ID-number associated with this
LSP.";
}
}
container initiation {
if-feature pce-initiated;
description
"The PCE initiation related parameters";
leaf enabled{
type boolean;
description
"LSP is PCE-initiated or not";
}
leaf peer{
type leafref {
path "/pcep-state/entity/peers/peer/addr";
}
must "(../enabled = true())"
{
error-message
"The LSP must be PCE-Initiated";
description
"When the LSP must be PCE-Initiated";
}
description
"At the PCC, the reference to the PCEP peer
that initiated this LSP; At the PCE, the
reference to the PCEP peer where the LSP
is initiated";
}
}
leaf symbolic-path-name{
type string;
description
"The symbolic path name associated with the LSP.";
}
leaf last-error{
type lsp-error;
description
"The last error for the LSP.";
}
leaf pst{
type pst;
default "rsvp-te";
description
"The Path Setup Type";
} container lsp-ref{
description
"reference to ietf-te lsp state";
}//lsp-state leaf source {
type leafref {
path "/te:te/te:lsps-state/te:lsp/te:source";
grouping notification-instance-hdr { }
description description
"This group describes common instance specific data "Tunnel sender address extracted from
for notifications."; SENDER_TEMPLATE object";
reference "RFC3209";
}
leaf destination {
type leafref {
path "/te:te/te:lsps-state/te:lsp/te:"
+ "destination";
}
description
"Tunnel endpoint address extracted from
SESSION object";
reference "RFC3209";
}
leaf tunnel-id {
type leafref {
path "/te:te/te:lsps-state/te:lsp/te:tunnel-id";
}
description
"Tunnel identifier used in the SESSION
that remains constant over the life
of the tunnel.";
reference "RFC3209";
}
leaf lsp-id {
type leafref {
path "/te:te/te:lsps-state/te:lsp/te:lsp-id";
}
description
"Identifier used in the SENDER_TEMPLATE
and the FILTER_SPEC that can be changed
to allow a sender to share resources with
itself.";
reference "RFC3209";
}
leaf extended-tunnel-id {
type leafref {
path "/te:te/te:lsps-state/te:lsp/te:"
+ "extended-tunnel-id";
}
description
"Extended Tunnel ID of the LSP.";
reference "RFC3209";
}
leaf type {
type leafref {
path "/te:te/te:lsps-state/te:lsp/te:type";
}
description "LSP type P2P or P2MP";
}
}
leaf peer-addr { leaf admin-state{
type leafref { type boolean;
path "/pcep-state/entity/peers/peer/addr"; description
} "The desired operational state";
description }
"Reference to peer address"; leaf operational-state{
} type operational-state;
description
"The operational status of the LSP";
}
container delegated{
description
"The delegation related parameters";
leaf enabled{
type boolean;
description
"LSP is delegated or not";
}
leaf peer{
type leafref {
path "/pcep/entity/peers/peer/addr";
}
must "(../enabled = true())"
{
error-message
"The LSP must be delegated";
description
"When LSP is a delegated LSP";
}
description
"At the PCC, the reference to the PCEP peer to
which LSP is delegated; At the PCE, the
reference to the PCEP peer which delegated this
LSP";
}
leaf srp-id{
type uint32;
description
"The last SRP-ID-number associated with this
LSP.";
}
}
container initiation {
if-feature pce-initiated;
description
"The PCE initiation related parameters";
leaf enabled{
type boolean;
description
"LSP is PCE-initiated or not";
}
leaf peer{
type leafref {
path "/pcep/entity/peers/peer/addr";
}
must "(../enabled = true())"
{
error-message
"The LSP must be PCE-Initiated";
description
"When the LSP must be PCE-Initiated";
}
description
"At the PCC, the reference to the PCEP peer
that initiated this LSP; At the PCE, the
reference to the PCEP peer where the LSP
is initiated";
}
}
leaf symbolic-path-name{
type string;
description
"The symbolic path name associated with the LSP.";
}
leaf last-error{
type lsp-error;
description
"The last error for the LSP.";
}
leaf pst{
type pst;
default "rsvp-te";
description
"The Path Setup Type";
}// notification-instance-hdr }
grouping notification-session-hdr { }//lsp-state
description
"This group describes common session instance specific
data for notifications.";
leaf session-initiator { grouping notification-instance-hdr {
type leafref { description
path "/pcep-state/entity/peers/peer/sessions/" + "This group describes common instance specific data
"session/initiator"; for notifications.";
}
description
"Reference to pcep session initiator leaf";
}
}// notification-session-hdr
grouping stateful-pce-parameter { leaf peer-addr {
description type leafref {
"This group describes stateful PCE specific path "/pcep/entity/peers/peer/addr";
parameters."; }
leaf state-timeout{ description
type uint32; "Reference to peer address";
units "seconds"; }
description
"When a PCEP session is terminated, a PCC
waits for this time period before flushing
LSP state associated with that PCEP session
and reverting to operator-defined default
parameters or behaviours.";
}
leaf redelegation-timeout{
when "../../role = 'pcc'" +
"or " +
"../../role = 'pcc-and-pce'"
{
description
"Valid at PCC";
}
type uint32;
units "seconds";
description
"When a PCEP session is terminated, a PCC
waits for this time period before revoking
LSP delegation to a PCE and attempting to
redelegate LSPs associated with the
terminated PCEP session to an alternate
PCE.";
}
leaf rpt-non-pcep-lsp{
when "../../role = 'pcc'" +
"or " +
"../../role = 'pcc-and-pce'"
{
description
"Valid at PCC";
}
type boolean;
default true;
description
"If set, a PCC reports LSPs that are not
controlled by any PCE (for example, LSPs
that are statically configured at the
PCC). ";
}
} }// notification-instance-hdr
grouping authentication { grouping notification-session-hdr {
description "Authentication Information"; description
choice auth-type-selection { "This group describes common session instance specific
description data for notifications.";
"Options for expressing authentication setting.";
case auth-key-chain { leaf session-initiator {
leaf key-chain { type leafref {
type key-chain:key-chain-ref; path "/pcep/entity/peers/peer/sessions/" +
description "session/initiator";
"key-chain name."; }
} description
} "Reference to pcep session initiator leaf";
case auth-key { }
leaf crypto-algorithm { }// notification-session-hdr
type identityref {
base key-chain:crypto-algorithm;
}
mandatory true;
description
"Cryptographic algorithm associated with key.";
}
container key-string {
description
"The key string.";
nacm:default-deny-all;
choice key-string-style {
description
"Key string styles";
case keystring {
leaf keystring {
type string;
description
"Key string in ASCII format.";
}
}
case hexadecimal {
if-feature "key-chain:hex-key-string";
leaf hexadecimal-string {
type yang:hex-string;
description
"Key in hexadecimal string format. When
compared to ASCII, specification in
hexadecimal affords greater key
entropy with the same number of
octets. Additionally, it discourages
usage of well-known words or
numbers.";
}
}
}
}
}
case auth-tls {
if-feature tls;
container tls {
description
"TLS related information - TBD";
}
}
}
}
grouping path-key { grouping stateful-pce-parameter {
description "Path-key related information"; description
leaf enabled{ "This group describes stateful PCE specific
type boolean; parameters.";
description leaf state-timeout{
"Enabled or Disabled"; type uint32;
} units "seconds";
leaf discard-timer { description
type uint32; "When a PCEP session is terminated, a PCC
units "minutes"; waits for this time period before flushing
default 10; LSP state associated with that PCEP session
description and reverting to operator-defined default
"A timer to discard unwanted path-keys"; parameters or behaviours.";
} }
leaf reuse-time { leaf redelegation-timeout{
type uint32; when "../../role = 'pcc'" +
units "minutes"; "or " +
default 30; "../../role = 'pcc-and-pce'"
description {
"A time after which the path-keys could be reused"; description
} "Valid at PCC";
leaf pce-id { }
type inet:ip-address; type uint32;
description units "seconds";
"PCE Address to be used in each Path-Key Subobject description
(PKS)"; "When a PCEP session is terminated, a PCC
} waits for this time period before revoking
} LSP delegation to a PCE and attempting to
redelegate LSPs associated with the
terminated PCEP session to an alternate
PCE.";
}
leaf rpt-non-pcep-lsp{
when "../../role = 'pcc'" +
"or " +
"../../role = 'pcc-and-pce'"
{
description
"Valid at PCC";
}
type boolean;
default true;
description
"If set, a PCC reports LSPs that are not
controlled by any PCE (for example, LSPs
that are statically configured at the
PCC). ";
}
grouping path-key-state { }
description "Table to allow inspection of path-keys";
list path-keys{
key "path-key";
description grouping authentication {
"The list of path-keys generated by the PCE"; description "Authentication Information";
choice auth-type-selection {
description
"Options for expressing authentication setting.";
case auth-key-chain {
leaf key-chain {
type key-chain:key-chain-ref;
description
"key-chain name.";
}
}
case auth-key {
leaf crypto-algorithm {
type identityref {
base key-chain:crypto-algorithm;
leaf path-key { }
type uint16; mandatory true;
description description
"The identifier, or token used to represent "Cryptographic algorithm associated with key.";
the Confidential Path Segment (CPS) within
the context of the PCE";
} }
container cps { container key-string {
description
"The key string.";
nacm:default-deny-all;
choice key-string-style {
description description
"The Confidential Path Segment (CPS)"; "Key string styles";
list explicit-route-objects { case keystring {
key "index"; leaf keystring {
type string;
description description
"List of explicit route objects"; "Key string in ASCII format.";
}
leaf explicit-route-usage {
type identityref {
base te-types:route-usage-type;
}
description
"An explicit-route hop action.";
}
uses te-types:explicit-route-hop_config;
}
}
leaf pcc-original {
type leafref {
path "/pcep-state/entity/peers/peer/addr";
}
description
"Reference to PCC peer address of
the original request";
}
leaf req-id {
type uint32;
description
"The request ID of the original PCReq.";
}
leaf retrieved {
type boolean;
description
"If path-key has been retrieved yet";
}
leaf pcc-retrieved {
type leafref {
path "/pcep-state/entity/peers/peer/addr";
} }
must "(../retrieved = true())" case hexadecimal {
{ if-feature "key-chain:hex-key-string";
error-message leaf hexadecimal-string {
"The Path-key should be retreived"; type yang:hex-string;
description description
"When Path-Key has been retreived"; "Key in hexadecimal string format. When
compared to ASCII, specification in
hexadecimal affords greater key
entropy with the same number of
octets. Additionally, it discourages
usage of well-known words or
numbers.";
}
} }
description }
"Reference to PCC peer address which
retreived the path-key";
}
leaf creation-time {
type yang:timestamp;
description
"The timestamp value at the time this Path-Key
was created.";
}
leaf discard-time {
type uint32;
units "minutes";
description
"A time after which this path-keys will be
discarded";
}
leaf reuse-time {
type uint32;
units "minutes";
description
"A time after which this path-keys could be
reused";
}
}
}
grouping of-list {
description "List of OF";
list objective-function{
key "of";
description
"The list of authorized OF";
leaf of {
type objective-function;
description
"The OF authorized";
}
}
}
grouping association {
description
"Generic Association parameters";
leaf type {
type "assoc-type";
description
"The PCEP association type";
}
leaf id {
type uint16;
description
"PCEP Association ID";
}
leaf source {
type inet:ip-address;
description
"PCEP Association Source.";
}
leaf global-source {
type uint32;
description
"PCEP Association Global
Source.";
}
leaf extended-id{
type string;
description
"Additional information to
support unique identification.";
}
}
grouping association-ref {
description
"Generic Association parameters";
leaf id {
type leafref {
path "/pcep-state/entity/lsp-db/"
+ "association-list/id";
}
description
"PCEP Association ID";
}
leaf source {
type leafref {
path "/pcep-state/entity/lsp-db/"
+ "association-list/source";
} }
description }
"PCEP Association Source."; case auth-tls {
if-feature tls;
container tls-pce {
when "../role = 'pce' "
+ "or ../role = 'pcc-and-pce'" {
description
"Valid for PCEP Peer as PCE/PCC-PCE";
}
} uses tls-server:tls-server-grouping {
leaf global-source { description
type leafref { "Server TLS information.";
path "/pcep-state/entity/lsp-db/"
+ "association-list/global-source";
}
description
"PCEP Association Global
Source.";
}
leaf extended-id{
type leafref {
path "/pcep-state/entity/lsp-db/"
+ "association-list/extended-id";
}
description
"Additional information to
support unique identification.";
}
}
/*
* Configuration data nodes
*/
container pcep{
presence }
"The PCEP is enabled"; description
"TLS related information";
}
description container tls-pcc {
"Parameters for list of configured PCEP entities when "../role = 'pcc' "
on the device."; + "or ../role = 'pcc-and-pce'" {
description
"Valid for PCEP Peer as PCC/PCC_PCE";
}
container entity { uses tls-client:tls-client-grouping {
description
"Client TLS information.";
}
description description
"The configured PCEP entity on the device."; "TLS related information";
}
}
}
}
leaf addr { grouping path-key {
type inet:ip-address; description "Path-key related information";
mandatory true; leaf enabled{
description type boolean;
"The local Internet address of this PCEP description
entity. "Enabled or Disabled";
If operating as a PCE server, the PCEP }
entity listens on this address. leaf discard-timer {
If operating as a PCC, the PCEP entity type uint32;
binds outgoing TCP connections to this units "minutes";
address. default 10;
description
"A timer to discard unwanted path-keys";
}
leaf reuse-time {
type uint32;
units "minutes";
default 30;
description
"A time after which the path-keys could be reused";
}
leaf pce-id {
type inet:ip-address;
description
"PCE Address to be used in each Path-Key Subobject
(PKS)";
}
}
It is possible for the PCEP entity to grouping path-key-state {
operate both as a PCC and a PCE Server, in description "Table to allow inspection of path-keys";
which case it uses this address both to list path-keys{
listen for incoming TCP connections and to key "path-key";
bind outgoing TCP connections.";
}
leaf enabled { description
type boolean; "The list of path-keys generated by the PCE";
default true;
description
"The administrative status of this PCEP
Entity.";
}
leaf role { leaf path-key {
type pcep-role; type uint16;
mandatory true; description
description "The identifier, or token used to represent
"The role that this entity can play. the Confidential Path Segment (CPS) within
Takes one of the following values. the context of the PCE";
- unknown(0): this PCEP Entity role is not }
known. container cps {
- pcc(1): this PCEP Entity is a PCC. description
- pce(2): this PCEP Entity is a PCE. "The Confidential Path Segment (CPS)";
- pcc-and-pce(3): this PCEP Entity is both list explicit-route-objects {
a PCC and a PCE."; key "index";
} description
"List of explicit route objects";
leaf description { leaf explicit-route-usage {
type string; type identityref {
description base te-types:route-usage-type;
"Description of the PCEP entity configured }
by the user"; description
} "An explicit-route hop action.";
}
leaf speaker-entity-id{ uses te-types:explicit-route-hop_config;
if-feature stateful-sync-opt; }
type string; }
description leaf pcc-original {
"The Speaker Entity Identifier"; type leafref {
} path "/pcep/entity/peers/peer/addr";
}
description
"Reference to PCC peer address of
the original request";
}
leaf req-id {
type uint32;
description
"The request ID of the original PCReq.";
}
leaf retrieved {
type boolean;
description
"If path-key has been retrieved yet";
}
leaf pcc-retrieved {
type leafref {
path "/pcep/entity/peers/peer/addr";
}
must "(../retrieved = true())"
{
error-message
"The Path-key should be retreived";
description
"When Path-Key has been retreived";
}
description
"Reference to PCC peer address which
retreived the path-key";
}
leaf creation-time {
type yang:timestamp;
description
"The timestamp value at the time this Path-Key
was created.";
}
leaf discard-time {
type uint32;
units "minutes";
description
"A time after which this path-keys will be
discarded";
}
leaf reuse-time {
type uint32;
units "minutes";
description
"A time after which this path-keys could be
reused";
}
}
}
uses info { grouping of-list {
description description "List of OF";
"Local PCEP entity information"; list objective-function{
} key "of";
container pce-info {
when "../role = 'pce'" +
"or " +
"../role = 'pcc-and-pce'"
{
description
"Valid at PCE";
}
uses pce-info {
description
"Local PCE information";
}
container path-key {
if-feature path-key;
uses path-key {
description
"Path-Key Configuration";
}
description
"Path-Key Configuration";
}
description description
"The Local PCE Entity PCE information"; "The list of authorized OF";
}
uses authentication { leaf of {
description type objective-function;
"Local PCEP entity authentication information"; description
} "The OF authorized";
}
}
}
grouping association {
description
"Generic Association parameters";
leaf type {
type "assoc-type";
description
"The PCEP association type";
}
leaf id {
type uint16;
description
"PCEP Association ID";
}
leaf source {
type inet:ip-address;
description
"PCEP Association Source.";
}
leaf global-source {
type uint32;
description
"PCEP Association Global
Source.";
}
leaf extended-id{
type string;
description
"Additional information to
support unique identification.";
}
}
grouping association-ref {
description
"Generic Association parameters";
uses pcep-entity-info { leaf id {
description type leafref {
"The configuration related to the PCEP path "/pcep/entity/lsp-db/"
entity."; + "association-list/id";
} }
description
"PCEP Association ID";
}
leaf source {
type leafref {
path "/pcep/entity/lsp-db/"
+ "association-list/source";
}
description
"PCEP Association Source.";
}
leaf global-source {
type leafref {
path "/pcep/entity/lsp-db/"
+ "association-list/global-source";
}
description
"PCEP Association Global
Source.";
}
leaf extended-id{
type leafref {
path "/pcep/entity/lsp-db/"
+ "association-list/extended-id";
}
description
"Additional information to
support unique identification.";
}
}
leaf pcep-notification-max-rate { grouping session-grouping {
type uint32; description
mandatory true; "Session grouping";
description container sessions {
"This variable indicates the maximum number of config false;
notifications issued per second. If events description
occur more rapidly, the implementation may "This entry represents a single PCEP
simply fail to emit these notifications during session in which the local PCEP entity participates.
that period, or may queue them until an This entry exists only if the corresponding PCEP
appropriate time. A value of 0 means no session has been initialized by some event, such as
notifications are emitted and all should be manual user configuration, auto-discovery of a peer,
discarded (that is, not queued)."; or an incoming TCP connection.";
}
container stateful-parameter{ list session {
if-feature stateful; key "initiator";
must "(/pcep/entity/capability/stateful/enabled" + description
" = true())" "The list of sessions, note that
{ for a time being two sessions
error-message may exist for a peer";
"The Stateful PCE must be enabled";
description
"When PCEP entity is stateful
enabled";
}
uses stateful-pce-parameter;
description leaf initiator {
"The configured stateful parameters"; type pcep-initiator;
} description
"The initiator of the session,that is, whether
the TCP connection was initiated by the local
PCEP entity or the peer.
There is a window during session
initialization where two sessions can exist
between a pair of PCEP speakers, each
initiated by one of the speakers. One of
these sessions is always discarded before it
leaves OpenWait state. However, before it is
discarded, two sessions to the given peer
appear transiently in this MIB module. The
sessions are distinguished by who initiated
them, and so this field is the key.";
}
container of-list{ leaf role {
when "../role = 'pce'" + type leafref {
"or " + path "/pcep/entity/role";
"../role = 'pcc-and-pce'" }
{ description
description "The reference to peer role .";
"Valid at PCE"; }
}
if-feature objective-function;
uses of-list; leaf state-last-change {
type yang:timestamp;
description
"The timestamp value at the time this
session entered its current state as
denoted by the state leaf.";
}
description leaf state {
"The authorized OF-List at PCE for all peers"; type pcep-sess-state;
} 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.";
container peers{ }
when "../role = 'pcc'" +
"or " +
"../role = 'pcc-and-pce'"
{
description
"Valid at PCC";
}
description
"The list of configured peers for the
entity (remote PCE)";
list peer{
key "addr";
description leaf session-creation {
"The peer configured for the entity. type yang:timestamp;
(remote PCE)"; description
"The timestamp value at the time this
session was created.";
}
leaf addr { leaf connect-retry {
type inet:ip-address; type yang:counter32;
description description
"The local Internet address of this "The number of times that the local PCEP
PCEP peer."; entity has attempted to establish a TCP
} connection for this session without
success. The PCEP entity gives up when
this reaches connect-max-retry.";
}
leaf description { leaf local-id {
type string; type uint32 {
description range "0..255";
"Description of the PCEP peer }
configured by the user"; description
} "The value of the PCEP session ID used by
uses info { the local PCEP entity in the Open message
description for this session. If state is tcp-pending
"PCE Peer information"; then this is the session ID that will be
} used in the Open message. Otherwise, this
uses pce-info { is the session ID that was sent in the
description Open message.";
"PCE Peer information"; }
}
leaf delegation-pref{ leaf remote-id {
if-feature stateful; type uint32 {
type uint8{ range "0..255";
range "0..7"; }
} must "((../state != 'tcp-pending'" +
must "(/pcep/entity/capability/stateful" + "and " +
"/active = true())" "../state != 'open-wait' )" +
{ "or " +
error-message "((../state = 'tcp-pending'" +
"The Active Stateful PCE must be " or " +
enabled"; "../state = 'open-wait' )" +
description "and (. = 0)))" {
"When PCEP entity is active stateful error-message
enabled"; "Invalid remote-id";
}
description
"The PCE peer delegation preference.";
}
uses authentication {
description description
"PCE Peer authentication"; "If state is tcp-
} pending or open-wait
}//peer then this leaf is not
}//peers used and MUST be set
}//entity to zero.";
}//pcep }
description
/* "The value of the PCEP session
* Operational data nodes ID used by the peer in its
*/ Open message for this
session.";
container pcep-state{ }
config false;
description
"The list of operational PCEP entities on the
device.";
container entity{
description
"The operational PCEP entity on the device.";
leaf addr {
type inet:ip-address;
description
"The local Internet address of this PCEP
entity.
If operating as a PCE server, the PCEP
entity listens on this address.
If operating as a PCC, the PCEP entity
binds outgoing TCP connections to this
address.
It is possible for the PCEP entity to
operate both as a PCC and a PCE Server, in
which case it uses this address both to
listen for incoming TCP connections and to
bind outgoing TCP connections.";
}
leaf index{
type uint32;
description
"The index of the operational PECP
entity";
}
leaf admin-status {
type pcep-admin-status;
description
"The administrative status of this PCEP Entity.
This is the desired operational status as
currently set by an operator or by default in
the implementation. The value of enabled
represents the current status of an attempt
to reach this desired status.";
}
leaf oper-status { leaf keepalive-timer {
type pcep-admin-status; type uint32 {
description range "0..255";
"The operational status of the PCEP entity. }
Takes one of the following values. units "seconds";
- oper-status-up(1): the PCEP entity is must "(../state = 'session-up'" +
active. "or " +
- oper-status-down(2): the PCEP entity is "(../state != 'session-up'" +
inactive. "and (. = 0)))" {
- oper-status-going-up(3): the PCEP entity is error-message
activating. "Invalid keepalive
- oper-status-going-down(4): the PCEP entity is timer";
deactivating. description
- oper-status-failed(5): the PCEP entity has "This field is used if
failed and will recover when possible. and only if state is
- oper-status-failed-perm(6): the PCEP entity session-up. Otherwise,
has failed and will not recover without it is not used and
operator intervention."; MUST be set to
} zero.";
}
description
"The agreed maximum interval at
which the local PCEP entity
transmits PCEP messages on
this PCEP session. Zero means
that the local PCEP entity
never sends Keepalives on this
session.";
}
leaf role { leaf peer-keepalive-timer {
type pcep-role; type uint32 {
range "0..255";
}
units "seconds";
must "(../state = 'session-up'" +
"or " +
"(../state != 'session-up'" +
"and " +
"(. = 0)))" {
error-message
"Invalid Peer keepalive
timer";
description
"This field is used if
and only if state is
session-up. Otherwise,
it is not used and MUST
be set to zero.";
}
description description
"The role that this entity can play. "The agreed maximum interval at
Takes one of the following values. which the peer transmits PCEP
- unknown(0): this PCEP entity role is messages on this PCEP session.
not known. Zero means that the peer never
- pcc(1): this PCEP entity is a PCC. sends Keepalives on this
- pce(2): this PCEP entity is a PCE. session.";
- pcc-and-pce(3): this PCEP entity is }
both a PCC and a PCE.";
}
leaf description { leaf dead-timer {
type string; type uint32 {
description range "0..255";
"Description of the PCEP entity configured }
by the user"; units "seconds";
} description
"The dead timer interval for
this PCEP session.";
}
leaf speaker-entity-id{ leaf peer-dead-timer {
if-feature stateful-sync-opt; type uint32 {
type string; range "0..255";
description }
"The Speaker Entity Identifier"; units "seconds";
} must "((../state != 'tcp-pending'" +
"and " +
"../state != 'open-wait' )" +
"or " +
"((../state = 'tcp-pending'" +
" or " +
"../state = 'open-wait' )" +
"and " +
"(. = 0)))" {
error-message
"Invalid Peer Dead
timer";
description
"If state is tcp-
pending or open-wait
then this leaf is not
used and MUST be set to
zero.";
}
description
"The peer's dead-timer interval
for this PCEP session.";
}
uses info { leaf ka-hold-time-rem {
description type uint32 {
"Local PCEP entity information"; range "0..255";
} }
units "seconds";
must "((../state != 'tcp-pending'" +
"and " +
"../state != 'open-wait' ) " +
"or " +
"((../state = 'tcp-pending'" +
"or " +
"../state = 'open-wait' )" +
"and " +
"(. = 0)))" {
error-message
"Invalid Keepalive hold
time remaining";
description
"If state is tcp-pending
or open-wait then this
field is not used and
MUST be set to zero.";
}
description
"The keep alive hold time
remaining for this session.";
}
container pce-info { leaf overload-time {
when "../role = 'pce'" + type uint32;
"or " + units "seconds";
"../role = 'pcc-and-pce'" must "((../overloaded = true()) " +
{ "or ((../overloaded != true()) " +
description "and (. = 0)))" {
"Valid at PCE"; error-message
} "Invalid overload-time";
uses pce-info { description
description "This field is only used
"Local PCE information"; if overloaded is set to
} true. Otherwise, it is
not used and MUST be
set to zero.";
}
description
"The interval of time that is
remaining until the local PCEP
entity will cease to be
overloaded on this session.";
}
container path-key { leaf peer-overloaded {
if-feature path-key; type boolean;
uses path-key { description
description "If the peer has informed the
"Path-Key Configuration"; local PCEP entity that it is
} currently overloaded, then
description this is set to true.
"Path-Key Configuration"; Otherwise, it is set to
} false.";
}
description leaf peer-overload-time {
"The Local PCE Entity PCE information"; type uint32;
} units "seconds";
must "((../peer-overloaded = " +
"true()) or " +
"((../peer-overloaded !=" +
"true())" +
" and " +
"(. = 0)))" {
error-message
"Invalid peer overload
time";
description
"This field is only used
if peer-overloaded is
set to true. Otherwise,
it is not used and MUST
be set to zero.";
}
description
"The interval of time that is
remaining until the peer will
cease to be overloaded. If it
is not known how long the peer
will stay in overloaded state,
this leaf is set to zero.";
}
uses authentication { leaf lspdb-sync {
description if-feature stateful;
"Local PCEP Entity authentication information"; type sync-state;
} description
"The LSP-DB state
synchronization status.";
}
uses pcep-entity-info{ leaf recv-db-ver{
description when "../role = 'pcc'" +
"The operational information related to the "or " +
PCEP entity."; "../role = 'pcc-and-pce'"
} {
description
"Valid for PCEP Peer as
PCC";
}
container stateful-parameter{ if-feature stateful;
if-feature stateful; if-feature stateful-sync-opt;
must "(/pcep/entity/capability/stateful/enabled" +
" = true())"
{
error-message
"The Stateful PCE must be enabled";
description
"When PCEP entity is stateful
enabled";
}
uses stateful-pce-parameter;
description type uint64;
"The operational stateful parameters";
}
container lsp-db{ description
if-feature stateful; "The last received LSP State
description Database Version Number";
"The LSP-DB"; }
leaf db-ver{
when "../../role = 'pcc'" +
"or " +
"../../role = 'pcc-and-pce'"
{
description
"Valid at PCC";
}
if-feature stateful-sync-opt;
type uint64;
description
"The LSP State Database Version Number";
}
list association-list {
key "id source global-source extended-id";
description
"List of all PCEP associations";
uses association {
description
"The Association attributes";
} container of-list{
list lsp { when "../role = 'pce'" +
key "plsp-id pcc-id"; "or " +
description "../role = 'pcc-and-pce'"
"List of all LSP in this association"; {
leaf plsp-id { description
type leafref { "Valid for PCEP Peer as
path "/pcep-state/entity/lsp-db/" PCE";
+ "lsp/plsp-id"; }
} if-feature objective-function;
description
"Reference to PLSP-ID in LSP-DB";
}
leaf pcc-id {
type leafref {
path "/pcep-state/entity/lsp-db/"
+ "lsp/pcc-id";
}
description
"Reference to PCC-ID in LSP-DB";
}
}
}
list lsp{
key "plsp-id pcc-id";
description
"List of all LSPs in LSP-DB";
uses lsp-state{
description
"The PCEP specific attributes for
LSP-DB.";
}
list association-list {
key "id source global-source extended-id";
description
"List of all PCEP associations";
uses association-ref {
description
"Reference to the Association
attributes";
}
}
} uses of-list;
} description
container path-keys { "Indicate the list of supported
when "../role = 'pce'" + OF on this session";
"or " + }
"../role = 'pcc-and-pce'"
{
description
"Valid at PCE";
}
if-feature path-key;
uses path-key-state;
description
"The path-keys generated by the PCE";
}
container of-list{
when "../role = 'pce'" +
"or " +
"../role = 'pcc-and-pce'"
{
description
"Valid at PCE";
}
if-feature objective-function;
uses of-list; leaf speaker-entity-id{
if-feature stateful-sync-opt;
type string;
description
"The Speaker Entity Identifier";
}
description leaf discontinuity-time {
"The authorized OF-List at PCE for all peers"; type yang:timestamp;
} description
container peers{ "The timestamp value of the
description time when the statistics were
"The list of peers for the entity"; last reset.";
}
} // session
} // sessions
}
/*
* Configuration data nodes
*/
container pcep{
list peer{ presence
key "addr"; "The PCEP is enabled";
description description
"The peer for the entity."; "Parameters for list of configured PCEP entities
on the device.";
leaf addr { container entity {
type inet:ip-address;
description
"The local Internet address of this PCEP
peer.";
}
leaf role { description
type pcep-role; "The configured PCEP entity on the device.";
description
"The role of the PCEP Peer.
Takes one of the following values.
- unknown(0): this PCEP peer role
is not known.
- pcc(1): this PCEP peer is a PCC.
- pce(2): this PCEP peer is a PCE.
- pcc-and-pce(3): this PCEP peer
is both a PCC and a PCE.";
}
uses info { leaf addr {
description type inet:ip-address;
"PCEP peer information"; mandatory true;
} description
"The local Internet address of this PCEP
entity.
If operating as a PCE server, the PCEP
entity listens on this address.
container pce-info { If operating as a PCC, the PCEP entity
when "../role = 'pce'" + binds outgoing TCP connections to this
"or " + address.
"../role = 'pcc-and-pce'" It is possible for the PCEP entity to
{ operate both as a PCC and a PCE Server, in
description which case it uses this address both to
"When the peer is PCE"; listen for incoming TCP connections and to
} bind outgoing TCP connections.";
}
uses pce-info { leaf enabled {
description type boolean;
"PCE Peer information"; default true;
} description
description "The administrative status of this PCEP
"The PCE Peer information"; Entity.";
} }
leaf delegation-pref{ leaf role {
when "../role = 'pce'" + type pcep-role;
"or " + mandatory true;
"../role = 'pcc-and-pce'" description
{ "The role that this entity can play.
description Takes one of the following values.
"When the peer is PCE"; - unknown(0): this PCEP Entity role is not
} known.
if-feature stateful; - pcc(1): this PCEP Entity is a PCC.
type uint8{ - pce(2): this PCEP Entity is a PCE.
range "0..7"; - pcc-and-pce(3): this PCEP Entity is both
} a PCC and a PCE.";
must "(/pcep/entity/capability/stateful" + }
"/active = true())"
{
error-message
"The Active Stateful PCE must be
enabled";
description
"When PCEP entity is active stateful
enabled";
}
description
"The PCE peer delegation preference.";
}
uses authentication { leaf description {
description type string;
"PCE Peer authentication"; description
} "Description of the PCEP entity configured
by the user";
}
leaf discontinuity-time { leaf speaker-entity-id{
type yang:timestamp; if-feature stateful-sync-opt;
description type string;
"The timestamp of the time when the description
information and statistics were "The Speaker Entity Identifier";
last reset."; }
}
leaf initiate-session { leaf admin-status {
type boolean; type pcep-admin-status;
description description
"Indicates whether the local PCEP "The administrative status of this PCEP Entity.
entity initiates sessions to this peer, This is the desired operational status as
or waits for the peer to initiate a currently set by an operator or by default in
session."; the implementation. The value of enabled
} represents the current status of an attempt
to reach this desired status.";
}
leaf session-exists{ leaf index{
type boolean; type uint32;
description config "false";
"Indicates whether a session with description
this peer currently exists."; "The index of the operational PECP entity";
} }
leaf session-up-time{ leaf oper-status {
type yang:timestamp; type pcep-oper-status;
description config "false";
"The timestamp value of the last time a description
session with this peer was successfully "The operational status of the PCEP entity.
established."; Takes one of the following values.
} - oper-status-up(1): the PCEP entity is active.
- oper-status-down(2): the PCEP entity is inactive.
- oper-status-going-up(3): the PCEP entity is
activating.
- oper-status-going-down(4): the PCEP entity is
deactivating.
- oper-status-failed(5): the PCEP entity has
failed and will recover when possible.
- oper-status-failed-perm(6): the PCEP entity
has failed and will not recover without
operator intervention.";
}
leaf session-fail-time{ uses info {
type yang:timestamp; description
description "Local PCEP entity information";
"The timestamp value of the last time a }
session with this peer failed to be
established.";
}
leaf session-fail-up-time{ container pce-info {
type yang:timestamp; when "../role = 'pce'" +
description "or " +
"The timestamp value of the last time a "../role = 'pcc-and-pce'"
session with this peer failed from {
active."; description
} "Valid at PCE";
container sessions { }
description uses pce-info {
"This entry represents a single PCEP description
session in which the local PCEP entity "Local PCE information";
participates. }
This entry exists only if the container path-key {
corresponding PCEP session has been if-feature path-key;
initialized by some event, such as uses path-key {
manual user configuration, auto- description
discovery of a peer, or an incoming "Path-Key Configuration";
TCP connection."; }
description
"Path-Key Configuration";
}
list session { description
key "initiator"; "The Local PCE Entity PCE information";
}
description uses authentication {
"The list of sessions, note that description
for a time being two sessions "Local PCEP entity authentication information";
may exist for a peer"; }
leaf initiator { uses pcep-entity-info {
type pcep-initiator; description
description "The configuration related to the PCEP
"The initiator of the session, entity.";
that is, whether the TCP }
connection was initiated by
the local PCEP entity or the
peer.
There is a window during
session initialization where
two sessions can exist between
a pair of PCEP speakers, each
initiated by one of the
speakers. One of these
sessions is always discarded
before it leaves OpenWait
state. However, before it is
discarded, two sessions to the
given peer appear transiently
in this MIB module. The
sessions are distinguished by
who initiated them, and so this
field is the key.";
}
leaf role {
type leafref {
path "../../../role";
}
description
"The reference to peer role .";
}
leaf state-last-change { leaf pcep-notification-max-rate {
type yang:timestamp; type uint32;
description mandatory true;
"The timestamp value at the description
time this session entered its "This variable indicates the maximum number of
current state as denoted by notifications issued per second. If events
the state leaf."; occur more rapidly, the implementation may
} simply fail to emit these notifications during
that period, or may queue them until an
appropriate time. A value of 0 means no
notifications are emitted and all should be
discarded (that is, not queued).";
}
leaf state { container stateful-parameter{
type pcep-sess-state; if-feature stateful;
description must "(/pcep/entity/capability/stateful/enabled" +
"The current state of the " = true())"
session.
The set of possible states
excludes the idle state since
entries do not exist in the
idle state.";
}
leaf session-creation { {
type yang:timestamp; error-message
description "The Stateful PCE must be enabled";
"The timestamp value at the description
time this session was "When PCEP entity is stateful
created."; enabled";
}
uses stateful-pce-parameter;
} description
"The configured stateful parameters";
}
leaf connect-retry { container of-list{
type yang:counter32; when "../role = 'pce'" +
description "or " +
"The number of times that the "../role = 'pcc-and-pce'"
local PCEP entity has {
attempted to establish a TCP description
connection for this session "Valid at PCE";
without success. The PCEP }
entity gives up when this if-feature objective-function;
reaches connect-max-retry.";
}
leaf local-id { uses of-list;
type uint32 {
range "0..255";
}
description
"The value of the PCEP session
ID used by the local PCEP
entity in the Open message
for this session.
If state is tcp-pending then
this is the session ID that
will be used in the Open
message. Otherwise, this is
the session ID that was sent
in the Open message.";
}
leaf remote-id { description
type uint32 { "The authorized OF-List at PCE for all peers";
range "0..255"; }
}
must "((../state != 'tcp-pending'" +
"and " +
"../state != 'open-wait' )" +
"or " +
"((../state = 'tcp-pending'" +
" or " +
"../state = 'open-wait' )" +
"and (. = 0)))" {
error-message
"Invalid remote-id";
description
"If state is tcp-
pending or open-wait
then this leaf is not
used and MUST be set
to zero.";
}
description
"The value of the PCEP session
ID used by the peer in its
Open message for this
session.";
}
leaf keepalive-timer { container lsp-db{
type uint32 { if-feature stateful;
range "0..255"; config false;
} description
units "seconds"; "The LSP-DB";
must "(../state = 'session-up'" + leaf db-ver{
"or " + when "../../role = 'pcc'" +
"(../state != 'session-up'" + "or " +
"and (. = 0)))" { "../../role = 'pcc-and-pce'"
error-message {
"Invalid keepalive description
timer"; "Valid at PCC";
description }
"This field is used if if-feature stateful-sync-opt;
and only if state is type uint64;
session-up. Otherwise, description
it is not used and "The LSP State Database Version Number";
MUST be set to }
zero."; list association-list {
} key "id source global-source extended-id";
description description
"The agreed maximum interval at "List of all PCEP associations";
which the local PCEP entity uses association {
transmits PCEP messages on description
this PCEP session. Zero means "The Association attributes";
that the local PCEP entity }
never sends Keepalives on this list lsp {
session."; key "plsp-id pcc-id";
} description
"List of all LSP in this association";
leaf plsp-id {
type leafref {
path "/pcep/entity/lsp-db/"
+ "lsp/plsp-id";
}
description
"Reference to PLSP-ID in LSP-DB";
}
leaf pcc-id {
type leafref {
path "/pcep/entity/lsp-db/"
+ "lsp/pcc-id";
}
description
"Reference to PCC-ID in LSP-DB";
}
}
}
list lsp {
key "plsp-id pcc-id";
description
"List of all LSPs in LSP-DB";
uses lsp-state {
description
"The PCEP specific attributes for
LSP-DB.";
}
list association-list {
key "id source global-source extended-id";
description
"List of all PCEP associations";
uses association-ref {
description
"Reference to the Association
attributes";
}
}
leaf peer-keepalive-timer { }
type uint32 { }
range "0..255";
}
units "seconds";
must "(../state = 'session-up'" +
"or " +
"(../state != 'session-up'" +
"and " +
"(. = 0)))" {
error-message
"Invalid Peer keepalive
timer";
description
"This field is used if
and only if state is
session-up. Otherwise,
it is not used and MUST
be set to zero.";
}
description
"The agreed maximum interval at
which the peer transmits PCEP
messages on this PCEP session.
Zero means that the peer never
sends Keepalives on this
session.";
}
leaf dead-timer { container path-keys {
type uint32 { when "../role = 'pce' or ../role = 'pcc-and-pce'" {
range "0..255"; description
} "Valid at PCE";
units "seconds"; }
description if-feature path-key;
"The dead timer interval for config false;
this PCEP session."; uses path-key-state;
} description
"The path-keys generated by the PCE";
}
leaf peer-dead-timer { container peers{
type uint32 { description
range "0..255"; "The list of configured peers for the
} entity (remote PCE)";
units "seconds"; list peer{
must "((../state != 'tcp-pending'" + key "addr";
"and " +
"../state != 'open-wait' )" +
"or " +
"((../state = 'tcp-pending'" +
" or " +
"../state = 'open-wait' )" +
"and " +
"(. = 0)))" {
error-message
"Invalid Peer Dead
timer";
description
"If state is tcp-
pending or open-wait
then this leaf is not
used and MUST be set to
zero.";
}
description
"The peer's dead-timer interval
for this PCEP session.";
}
leaf ka-hold-time-rem { description
type uint32 { "The peer configured for the entity.
range "0..255"; (remote PCE)";
}
units "seconds";
must "((../state != 'tcp-pending'" +
"and " +
"../state != 'open-wait' ) " +
"or " +
"((../state = 'tcp-pending'" +
"or " +
"../state = 'open-wait' )" +
"and " +
"(. = 0)))" {
error-message
"Invalid Keepalive hold
time remaining";
description
"If state is tcp-pending
or open-wait then this
field is not used and
MUST be set to zero.";
}
description
"The keep alive hold time
remaining for this session.";
}
leaf overloaded { leaf addr {
type boolean; type inet:ip-address;
description description
"If the local PCEP entity has "The local Internet address of this
informed the peer that it is PCEP peer.";
currently overloaded, then }
this is set to true.
Otherwise, it is set to leaf role {
false."; type pcep-role;
} config false;
description
"The role of the PCEP Peer.
Takes one of the following values.
- unknown(0): this PCEP peer role is not
known.
- pcc(1): this PCEP peer is a PCC.
- pce(2): this PCEP peer is a PCE.
- pcc-and-pce(3): this PCEP peer
is both a PCC and a PCE.";
}
leaf overload-time { leaf description {
type uint32; type string;
units "seconds"; description
must "((../overloaded = true()) " + "Description of the PCEP peer
"or ((../overloaded != true()) " + configured by the user";
"and (. = 0)))" { }
error-message uses info {
"Invalid overload-time"; description
description "PCE Peer information";
"This field is only used }
if overloaded is set to
true. Otherwise, it is
not used and MUST be
set to zero.";
}
description
"The interval of time that is
remaining until the local PCEP
entity will cease to be
overloaded on this session.";
}
leaf peer-overloaded { container pce-info {
type boolean; when "../role = 'pce'" +
description "or " +
"If the peer has informed the "../role = 'pcc-and-pce'"
local PCEP entity that it is {
currently overloaded, then description
this is set to true. "When the peer is PCE";
Otherwise, it is set to }
false.";
}
leaf peer-overload-time { uses pce-info {
type uint32; description
units "seconds"; "PCE Peer information";
must "((../peer-overloaded = " + }
"true()) or " + description
"((../peer-overloaded !=" + "The PCE Peer information";
"true())" + }
" and " +
"(. = 0)))" {
error-message
"Invalid peer overload
time";
description
"This field is only used
if peer-overloaded is
set to true. Otherwise,
it is not used and MUST
be set to zero.";
}
description
"The interval of time that is
remaining until the peer will
cease to be overloaded. If it
is not known how long the peer
will stay in overloaded state,
this leaf is set to zero.";
}
leaf lspdb-sync {
if-feature stateful;
type sync-state;
description
"The LSP-DB state
synchronization status.";
}
leaf recv-db-ver{
when "../role = 'pcc'" +
"or " +
"../role = 'pcc-and-pce'"
{
description
"Valid for PCEP Peer as
PCC";
}
if-feature stateful; leaf delegation-pref{
if-feature stateful-sync-opt; if-feature stateful;
type uint8{
range "0..7";
}
must "(/pcep/entity/capability/stateful" +
"/active = true())"
{
error-message
"The Active Stateful PCE must be
enabled";
description
"When PCEP entity is active stateful
enabled";
}
description
"The PCE peer delegation preference.";
}
uses authentication {
description
"PCE Peer authentication";
type uint64; }
leaf discontinuity-time {
type yang:timestamp;
config false;
description
"The timestamp of the time when the
information and statistics were last
reset.";
}
description leaf initiate-session {
"The last received LSP State type boolean;
Database Version Number"; config false;
} description
"Indicates whether the local PCEP
entity initiates sessions to this peer,
or waits for the peer to initiate a
session.";
}
container of-list{ leaf session-exists{
when "../role = 'pce'" + type boolean;
"or " + config false;
"../role = 'pcc-and-pce'" description
{ "Indicates whether a session with
description this peer currently exists.";
"Valid for PCEP Peer as }
PCE";
}
if-feature objective-function;
uses of-list; leaf session-up-time{
type yang:timestamp;
config false;
description
"The timestamp value of the last time a
session with this peer was successfully
established.";
}
description leaf session-fail-time{
"Indicate the list of supported type yang:timestamp;
OF on this session"; config false;
} description
"The timestamp value of the last time a
session with this peer failed to be
established.";
}
leaf speaker-entity-id{ leaf session-fail-up-time{
if-feature stateful-sync-opt; type yang:timestamp;
type string; config false;
description description
"The Speaker Entity Identifier"; "The timestamp value of the last time a
} session with this peer failed from
active.";
}
leaf discontinuity-time { uses session-grouping {
type yang:timestamp; description
description "session information";
"The timestamp value of the }
time when the statistics were }//peer
last reset."; }//peers
} }//entity
} // session }//pcep
} // sessions
}//peer
}//peers
}//entity
}//pcep-state
/* /*
* Notifications * Notifications
*/ */
notification pcep-session-up { notification pcep-session-up {
description description
"This notification is sent when the value of "This notification is sent when the value of
'/pcep/pcep-state/peers/peer/sessions/session/state' '/pcep/peers/peer/sessions/session/state'
enters the 'session-up' state."; enters the 'session-up' state.";
uses notification-instance-hdr; uses notification-instance-hdr;
uses notification-session-hdr; uses notification-session-hdr;
leaf state-last-change { leaf state-last-change {
type yang:timestamp; type yang:timestamp;
description description
"The timestamp value at the time this session "The timestamp value at the time this session
entered its current state as denoted by the state entered its current state as denoted by the state
leaf."; leaf.";
} }
leaf state { leaf state {
type pcep-sess-state; type pcep-sess-state;
description description
"The current state of the session. "The current state of the session.
The set of possible states excludes the idle state The set of possible states excludes the idle state
since entries do not exist in the idle state."; since entries do not exist in the idle state.";
} }
} //notification } //notification
notification pcep-session-down { notification pcep-session-down {
description description
"This notification is sent when the value of "This notification is sent when the value of
'/pcep/pcep-state/peers/peer/sessions/session/state' '/pcep/peers/peer/sessions/session/state'
leaves the 'session-up' state."; leaves the 'session-up' state.";
uses notification-instance-hdr; uses notification-instance-hdr;
leaf session-initiator { leaf session-initiator {
type pcep-initiator; type pcep-initiator;
description description
"The initiator of the session."; "The initiator of the session.";
} }
leaf state-last-change { leaf state-last-change {
type yang:timestamp; type yang:timestamp;
description description
"The timestamp value at the time this session "The timestamp value at the time this session
entered its current state as denoted by the state entered its current state as denoted by the state
leaf."; leaf.";
} }
leaf state { leaf state {
type pcep-sess-state; type pcep-sess-state;
description description
"The current state of the session. "The current state of the session.
The set of possible states excludes the idle state The set of possible states excludes the idle state
since entries do not exist in the idle state."; since entries do not exist in the idle state.";
} }
} //notification } //notification
notification pcep-session-local-overload { notification pcep-session-local-overload {
description description
"This notification is sent when the local PCEP entity "This notification is sent when the local PCEP entity
enters overload state for a peer."; enters overload state for a peer.";
uses notification-instance-hdr; uses notification-instance-hdr;
uses notification-session-hdr; uses notification-session-hdr;
leaf overloaded { leaf overloaded {
type boolean; type boolean;
description description
"If the local PCEP entity has informed the peer "If the local PCEP entity has informed the peer
that it is currently overloaded, then this is set that it is currently overloaded, then this is set
to true. Otherwise, it is set to false."; to true. Otherwise, it is set to false.";
} }
leaf overload-time { leaf overload-time {
type uint32; type uint32;
units "seconds"; units "seconds";
description description
"The interval of time that is remaining until the "The interval of time that is remaining until the
local PCEP entity will cease to be overloaded on local PCEP entity will cease to be overloaded on
this session."; this session.";
} }
} //notification } //notification
notification pcep-session-local-overload-clear { notification pcep-session-local-overload-clear {
description description
"This notification is sent when the local PCEP entity "This notification is sent when the local PCEP entity
leaves overload state for a peer."; leaves overload state for a peer.";
uses notification-instance-hdr; uses notification-instance-hdr;
leaf overloaded { leaf overloaded {
type boolean; type boolean;
description description
"If the local PCEP entity has informed the peer "If the local PCEP entity has informed the peer
that it is currently overloaded, then this is set that it is currently overloaded, then this is set
to true. Otherwise, it is set to false."; to true. Otherwise, it is set to false.";
} }
} //notification } //notification
notification pcep-session-peer-overload { notification pcep-session-peer-overload {
description description
"This notification is sent when a peer enters overload "This notification is sent when a peer enters overload
state."; state.";
uses notification-instance-hdr; uses notification-instance-hdr;
uses notification-session-hdr;
leaf peer-overloaded { uses notification-session-hdr;
type boolean;
description
"If the peer has informed the local PCEP entity that
it is currently overloaded, then this is set to
true. Otherwise, it is set to false.";
}
leaf peer-overload-time { leaf peer-overloaded {
type uint32; type boolean;
units "seconds"; description
description "If the peer has informed the local PCEP entity that
"The interval of time that is remaining until the it is currently overloaded, then this is set to
peer will cease to be overloaded. If it is not true. Otherwise, it is set to false.";
known how long the peer will stay in overloaded }
state, this leaf is set to zero.";
}
} //notification
notification pcep-session-peer-overload-clear { leaf peer-overload-time {
description type uint32;
"This notification is sent when a peer leaves overload units "seconds";
state."; description
"The interval of time that is remaining until the
peer will cease to be overloaded. If it is not
known how long the peer will stay in overloaded
state, this leaf is set to zero.";
}
} //notification
uses notification-instance-hdr; notification pcep-session-peer-overload-clear {
description
"This notification is sent when a peer leaves overload
state.";
leaf peer-overloaded { uses notification-instance-hdr;
type boolean;
description
"If the peer has informed the local PCEP entity that
it is currently overloaded, then this is set to
true. Otherwise, it is set to false.";
}
} //notification
/* leaf peer-overloaded {
* RPC type boolean;
*/ description
"If the peer has informed the local PCEP entity that
it is currently overloaded, then this is set to
true. Otherwise, it is set to false.";
}
} //notification
rpc trigger-resync { /*
if-feature stateful; * RPC
if-feature stateful-sync-opt; */
description
"Trigger the resyncrinization at the PCE";
input {
leaf pcc {
type leafref {
path "/pcep-state/entity/peers/peer/addr";
}
description
"The IP address to identify the PCC. The state
syncronization is re-triggered for all LSPs from
the PCC. The rpc on the PCC will be ignored.";
}
}
}//rpc
}//module rpc trigger-resync {
if-feature stateful;
if-feature stateful-sync-opt;
description
"Trigger the resyncrinization at the PCE";
input {
leaf pcc {
type leafref {
path "/pcep/entity/peers/peer/addr";
}
description
"The IP address to identify the PCC. The state
syncronization is re-triggered for all LSPs from
the PCC. The rpc on the PCC will be ignored.";
}
}
}//rpc
<CODE ENDS> }//module
9.2. ietf-pcep-stats module <CODE ENDS>
10.2. ietf-pcep-stats module
<CODE BEGINS> file "ietf-pcep-stats@2017-03-12.yang" <CODE BEGINS> file "ietf-pcep-stats@2017-06-29.yang"
module ietf-pcep-stats { module ietf-pcep-stats {
yang-version 1.1; yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-pcep-stats"; namespace "urn:ietf:params:xml:ns:yang:ietf-pcep-stats";
prefix ps; prefix ps;
import ietf-pcep { import ietf-pcep {
prefix p; prefix p;
} }
skipping to change at page 84, line 16 skipping to change at page 77, line 41
<mailto:julien.meuric@orange.com> <mailto:julien.meuric@orange.com>
WG Chair: Jonathan Hardwick WG Chair: Jonathan Hardwick
<mailto:Jonathan.Hardwick@metaswitch.com> <mailto:Jonathan.Hardwick@metaswitch.com>
Editor: Dhruv Dhody Editor: Dhruv Dhody
<mailto:dhruv.ietf@gmail.com>"; <mailto:dhruv.ietf@gmail.com>";
description description
"The YANG module augments the PCEP yang operational "The YANG module augments the PCEP yang operational
model with statistics, counters and telemetry data"; model with statistics, counters and telemetry data";
revision 2017-03-12 { revision 2017-06-29 {
description "Initial revision."; description "Initial revision.";
reference reference
"RFC XXXX: A YANG Data Model for Path Computation "RFC XXXX: A YANG Data Model for Path Computation
Element Communications Protocol Element Communications Protocol
(PCEP)"; (PCEP)";
} }
/* /*
* Groupings * Groupings
*/ */
grouping pcep-stats{ grouping pcep-stats{
description description
"This grouping defines statistics for PCEP. It is used "This grouping defines statistics for PCEP. It is used
for both peer and current session."; for both peer and current session.";
skipping to change at page 101, line 25 skipping to change at page 95, line 7
"The number of expired path-keys with no attempt to "The number of expired path-keys with no attempt to
expand it."; expand it.";
} }
} }
}//pcep-stats }//pcep-stats
/* /*
* Augment modules to add statistics * Augment modules to add statistics
*/ */
augment "/p:pcep-state/p:entity/p:peers/p:peer" { augment "/p:pcep/p:entity/p:peers/p:peer" {
description description
"Augmenting the statistics"; "Augmenting the statistics";
leaf num-sess-setup-ok{ leaf num-sess-setup-ok{
type yang:counter32; type yang:counter32;
config false;
description description
"The number of PCEP sessions successfully "The number of PCEP sessions successfully
successfully established with the peer, successfully established with the peer,
including any current session. This including any current session. This
counter is incremented each time a counter is incremented each time a
session with this peer is successfully session with this peer is successfully
established."; established.";
} }
leaf num-sess-setup-fail{ leaf num-sess-setup-fail{
type yang:counter32; type yang:counter32;
config false;
description description
"The number of PCEP sessions with the peer "The number of PCEP sessions with the peer
that have been attempted but failed that have been attempted but failed
before being fully established. This before being fully established. This
counter is incremented each time a counter is incremented each time a
session retry to this peer fails."; session retry to this peer fails.";
} }
container pcep-stats { container pcep-stats {
config false;
description description
"The container for all statistics at peer "The container for all statistics at peer
level."; level.";
uses pcep-stats{ uses pcep-stats{
description description
"Since PCEP sessions can be "Since PCEP sessions can be
ephemeral, the peer statistics tracks ephemeral, the peer statistics tracks
a peer even when no PCEP session a peer even when no PCEP session
currently exists to that peer. The currently exists to that peer. The
statistics contained are an aggregate statistics contained are an aggregate
skipping to change at page 102, line 49 skipping to change at page 96, line 36
description description
"The number of requests that were "The number of requests that were
received from the peer and received from the peer and
implicitly cancelled when the implicitly cancelled when the
session they were received over session they were received over
was closed."; was closed.";
} }
}//pcep-stats }//pcep-stats
}//augment }//augment
augment "/p:pcep-state/p:entity/p:peers/p:peer/" + augment "/p:pcep/p:entity/p:peers/p:peer/" +
"p:sessions/p:session" { "p:sessions/p:session" {
description description
"Augmenting the statistics"; "Augmenting the statistics";
container pcep-stats { container pcep-stats {
description description
"The container for all statistics "The container for all statistics
at session level."; at session level.";
uses pcep-stats{ uses pcep-stats{
description description
"The statistics contained are "The statistics contained are
skipping to change at page 103, line 18 skipping to change at page 97, line 4
at session level."; at session level.";
uses pcep-stats{ uses pcep-stats{
description description
"The statistics contained are "The statistics contained are
for the current sessions to for the current sessions to
that peer. These are lost that peer. These are lost
when the session goes down. when the session goes down.
"; ";
} }
}//pcep-stats }//pcep-stats
}//augment }//augment
}//module }//module
<CODE ENDS> <CODE ENDS>
10. Security Considerations 11. Security Considerations
The YANG module defined in this memo is designed to be accessed via The YANG module defined in this document is designed to be accessed
the NETCONF protocol [RFC6241]. The lowest NETCONF layer is the via network management protocol such as NETCONF [RFC6241] or RESTCONF
secure transport layer and the mandatory-to-implement secure [RFC8040]. The lowest NETCONF layer is the secure transport layer
transport is SSH [RFC6242]. The NETCONF access control model and the mandatory-to-implement secure transport is SSH [RFC6242].
[RFC6536] provides the means to restrict access for particular The lowest RESTCONF layer is HTTPS, and the mandatory-to-implement
NETCONF users to a pre-configured subset of all available NETCONF secure transport is TLS [RFC5246]
protocol operations and content.
The NETCONF access control model [RFC6536] provides the means to
restrict access for particular NETCONF or RESTCONF users to a pre-
configured subset of all available NETCONF or RESTCONF protocol
operations and content.
There are a number of data nodes defined in the YANG module which are There are a number of data nodes defined in the YANG module which are
writable/creatable/deletable (i.e., config true, which is the writable/creatable/deletable (i.e., config true, which is the
default). These data nodes may be considered sensitive or vulnerable default). These data nodes may be considered sensitive or vulnerable
in some network environments. Write operations (e.g., <edit-config>) in some network environments. Write operations (e.g., <edit-config>)
to these data nodes without proper protection can have a negative to these data nodes without proper protection can have a negative
effect on network operations. These are the subtrees and data nodes effect on network operations. These are the subtrees and data nodes
and their sensitivity/vulnerability: and their sensitivity/vulnerability:
/pcep/entity/ - configure local parameters, capabilities etc. /pcep/entity/ - configure local parameters, capabilities etc.
skipping to change at page 104, line 13 skipping to change at page 97, line 48
session between the local entity and the peers. This may lead to session between the local entity and the peers. This may lead to
inability to compute new paths, stateful operations on the delegated inability to compute new paths, stateful operations on the delegated
as well as PCE-initiated LSPs. as well as PCE-initiated LSPs.
Some of the readable data nodes in this YANG module may be considered Some of the readable data nodes in this YANG module may be considered
sensitive or vulnerable in some network environments. It is thus sensitive or vulnerable in some network environments. It is thus
important to control read access (e.g., via get, get-config, or important to control read access (e.g., via get, get-config, or
notification) to these data nodes. These are the subtrees and data notification) to these data nodes. These are the subtrees and data
nodes and their sensitivity/vulnerability: nodes and their sensitivity/vulnerability:
/pcep-state/lsp-db - All the LSPs in the network. Unauthorized /pcep/lsp-db - All the LSPs in the network. Unauthorized access
access to this could provide the all path and network usage to this could provide the all path and network usage information.
information.
/pcep-state/path-keys/ - The Confidential Path Segments (CPS) are /pcep/path-keys/ - The Confidential Path Segments (CPS) are hidden
hidden using path-keys. Unauthorized access to this could leak using path-keys. Unauthorized access to this could leak
confidential path information. confidential path information.
Some of the RPC operations in this YANG module may be considered Some of the RPC operations in this YANG module may be considered
sensitive or vulnerable in some network environments. It is thus sensitive or vulnerable in some network environments. It is thus
important to control access to these operations. These are the important to control access to these operations. These are the
operations and their sensitivity/vulnerability: operations and their sensitivity/vulnerability:
trigger-resync - trigger resynchronization with the PCE. trigger-resync - trigger resynchronization with the PCE.
Unauthorized access to this could force a PCEP session into Unauthorized access to this could force a PCEP session into
continuous state synchronization. continuous state synchronization.
11. IANA Considerations 12. IANA Considerations
This document registers a URI in the "IETF XML Registry" [RFC3688]. This document registers a URI in the "IETF XML Registry" [RFC3688].
Following the format in RFC 3688, the following registration has been Following the format in RFC 3688, the following registration has been
made. made.
URI: urn:ietf:params:xml:ns:yang:ietf-pcep URI: urn:ietf:params:xml:ns:yang:ietf-pcep
Registrant Contact: The PCE WG of the IETF. Registrant Contact: The PCE WG of the IETF.
XML: N/A; the requested URI is an XML namespace. XML: N/A; the requested URI is an XML namespace.
This document registers a YANG module in the "YANG Module Names" This document registers a YANG module in the "YANG Module Names"
registry [RFC6020]. registry [RFC6020].
Name: ietf-pcep Name: ietf-pcep
Namespace: urn:ietf:params:xml:ns:yang:ietf-pcep Namespace: urn:ietf:params:xml:ns:yang:ietf-pcep
Prefix: pcep Prefix: pcep
Reference: This I-D Reference: This I-D
12. Acknowledgements 13. Acknowledgements
The initial document is based on the PCEP MIB [RFC7420]. Further The initial document is based on the PCEP MIB [RFC7420]. We would
this document structure is based on Routing Yang Module like to thank the authors of aforementioned documents.
[I-D.ietf-netmod-routing-cfg]. We would like to thank the authors of
aforementioned documents.
13. References 14. References
13.1. Normative References 14.1. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997, DOI 10.17487/RFC2119, March 1997,
<http://www.rfc-editor.org/info/rfc2119>. <http://www.rfc-editor.org/info/rfc2119>.
[RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688,
DOI 10.17487/RFC3688, January 2004, DOI 10.17487/RFC3688, January 2004,
<http://www.rfc-editor.org/info/rfc3688>. <http://www.rfc-editor.org/info/rfc3688>.
[RFC5440] Vasseur, JP., Ed. and JL. Le Roux, Ed., "Path Computation [RFC5440] Vasseur, JP., Ed. and JL. Le Roux, Ed., "Path Computation
Element (PCE) Communication Protocol (PCEP)", RFC 5440, Element (PCE) Communication Protocol (PCEP)", RFC 5440,
DOI 10.17487/RFC5440, March 2009, DOI 10.17487/RFC5440, March 2009,
<http://www.rfc-editor.org/info/rfc5440>. <http://www.rfc-editor.org/info/rfc5440>.
[RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security