SERO & SRRO
[bgpcep.git] / pcep / api / src / main / yang / pcep-types.yang
index 1e69b9e63d09fcbce076b7faf77d546fbd34ef23..b6b8c0fa92bc21110fd31166b6f3f36fb1a49296 100644 (file)
 module pcep-types {
-       yang-version 1;
-       namespace "urn:opendaylight:params:xml:ns:yang:pcep:types";
-       prefix "pcep-t";
-
-       import ieee754 { prefix ieee754; revision-date 2013-08-19; }
-       import ietf-inet-types { prefix inet; revision-date 2010-09-24; }
-       import network-concepts { prefix netc; revision-date 2013-11-25; }
-       import rsvp { prefix rsvp; revision-date 2013-08-20; }
-
-       organization "Cisco Systems, Inc.";
-       contact "Robert Varga <rovarga@cisco.com>";
-
-       description
-               "This module contains the base data model of a PCEP message.
-               It rolls up the definitions contained in RFC5440, RFC5520
-               and RFC6006.
-
-               Copyright (c)2013 Cisco Systems, Inc. All rights reserved.
-
-               This program and the accompanying materials are made available
-               under the terms of the Eclipse Public License v1.0 which
-               accompanies this distribution, and is available at
-               http://www.eclipse.org/legal/epl-v10.html";
-
-       revision "2013-10-05" {
-               description
-                       "Initial revision.";
-               reference "RFC5440";
-       }
-
-       // NOTE: this model uses counts bits in fields from left to right,
-       //       just as IANA does for PCEP protocol.
-
-       // Types
-       typedef protocol-version {
-               type uint8 {
-                       range 1..7;
-               }
-       }
-
-       typedef request-id {
-               type uint32 {
-                       range 1..max;
-               }
-       }
-
-       typedef of-id {
-               type uint16;
-       }
-
-       typedef path-key {
-               type uint16;
-       }
-
-       typedef pce-id {
-               type union {
-                       type binary {
-                               length 4;
-                       }
-                       type binary {
-                               length 16;
-                       }
-               }
-       }
-
-       // TLVs
-       grouping tlv {
-               description "Marker grouping for TLV groupings.";
-       }
-
-       grouping no-path-vector-tlv {
-               description "NO-PATH-VECTOR TLV";
-               reference "https://tools.ietf.org/html/rfc5440#section-7.5";
-
-               uses tlv;
-               leaf flags {
-                       type bits {
-                               bit p2mp-unreachable {
-                                       position 24;
-                               }
-                               bit no-gco-solution {
-                                       position 25;
-                               }
-                               bit no-gco-migration {
-                                       position 26;
-                               }
-                               bit path-key {
-                                       reference "https://tools.ietf.org/html/rfc5520#section-7.4";
-                                       position 27;
-                               }
-                               bit chain-unavailable {
-                                       position 28;
-                               }
-                               bit unknown-source {
-                                       position 29;
-                               }
-                               bit unknown-destination {
-                                       position 30;
-                               }
-                               bit pce-unavailable {
-                                       position 31;
-                               }
-                       }
-                       mandatory true;
-               }
-       }
-
-       grouping overload-duration-tlv {
-               description "OVERLOAD-DURATION TLV";
-               reference "https://tools.ietf.org/html/rfc5440#section-7.14";
-               container overload-duration {
-                       uses tlv;
-                       leaf duration {
-                               type uint32;
-                               units seconds;
-                       }
-               }
-       }
-
-       grouping req-missing-tlv {
-               description "REQ-MISSING TLV";
-               reference "https://tools.ietf.org/html/rfc5440#section-7.5";
-               container req-missing {
-                       uses tlv;
-                       leaf request-id {
-                               type request-id;
-                       }
-               }
-       }
-
-       grouping stateful-capability-tlv {
-               description "Stateful PCE Capability TLV";
-               reference "https://tools.ietf.org/html/draft-ietf-pce-stateful-pce-05#section-7.1.1";
-
-               container stateful {
-                       uses tlv;
-
-                       leaf lsp-update-capability {
-                               type boolean;
-                               default false;
-                       }
-                       leaf include-db-version {
-                               type boolean;
-                               default false;
-                       }
-               }
-       }
-
-       grouping lsp-db-version-tlv {
-               description "LSP State Database Version TLV";
-               reference "https://tools.ietf.org/html/draft-ietf-pce-stateful-pce-05#section-7.1.2";
-
-               container lsp-db-version {
-                       uses tlv;
-                       leaf version {
-                               type uint64;
-                               mandatory true;
-                       }
-               }
-       }
-
-       grouping predundancy-group-id-tlv {
-               description "PCE Redundancy Group Identifier TLV";
-               reference "https://tools.ietf.org/html/draft-ietf-pce-stateful-pce-05#section-7.1.3";
-
-               container predundancy-group-id {
-                       uses tlv;
-                       leaf identifier {
-                               type binary;
-                               mandatory true;
-                       }
-               }
-       }
-
-       grouping of-list-tlv {
-               description "OF-List TLV";
-               reference "https://tools.ietf.org/html/rfc5541#section-2.1";
-               container of-list {
-                       uses tlv;
-                       leaf-list codes {
-                               type of-id;
-                       }
-               }
-       }
-
-       grouping order-tlv {
-               description "Order TLV";
-               reference "https://tools.ietf.org/html/rfc5557#section-5.4";
-               container order {
-                       uses tlv;
-                       leaf delete {
-                               type uint32;
-                               mandatory true;
-                       }
-
-                       leaf setup {
-                               type uint32;
-                               mandatory true;
-                       }
-               }
-       }
-
-       // Objects
-       grouping object-header {
-               description "Common Object Header";
-               reference "https://tools.ietf.org/html/rfc5440#section-7.2";
-
-               leaf processing-rule {
-                       type boolean;
-                       default false;
-               }
-
-               leaf ignore {
-                       type boolean;
-                       default false;
-               }
-       }
-
-       grouping object {
-               description "Core object structure with optional TLVs";
-               uses object-header;
-       }
-
-       grouping open-object {
-               description "OPEN Object";
-               reference "https://tools.ietf.org/html/rfc5440#section-7.3";
-
-               container open {
-                       uses object;
-                       container "tlvs" {
-                               uses of-list-tlv;
-
-                               uses stateful-capability-tlv;
-
-                               uses predundancy-group-id-tlv;
-
-                               uses lsp-db-version-tlv;
-                       }
-
-                       leaf version {
-                               type protocol-version;
-                               default 1;
-                       }
-
-                       leaf keepalive {
-                               // Note: non-presence is equal to '0'
-                               type uint8 {
-                                       range 1..255;
-                               }
-                               mandatory true;
-                       }
-
-                       leaf dead-timer {
-                               // Note: non-presence is equal to '0'
-                               type uint8 {
-                                       range 1..255;
-                               }
-                               mandatory true;
-                       }
-
-                       leaf session-id {
-                               type uint8;
-                       }
-               }
-       }
-
-       grouping rp-object {
-               description "RP Object";
-               reference "https://tools.ietf.org/html/rfc5440#section-7.4";
-               container rp {
-                       uses object;
-                       container "tlvs" {
-                               uses order-tlv;
-                       }
-
-                       leaf priority {
-                               type uint8 {
-                                       range 1..7;
-                               }
-                       }
-
-                       leaf request-id {
-                               type request-id;
-                               mandatory true;
-                       }
-
-                       leaf reoptimization {
-                               type boolean;
-                               default false;
-                       }
-
-                       leaf bi-directional {
-                               type boolean;
-                               default false;
-                       }
-
-                       leaf loose {
-                               type boolean;
-                               default false;
-                       }
-
-                       leaf path-key {
-                               type boolean;
-                               default false;
-                               reference "https://tools.ietf.org/html/rfc5520#section-3.2.1";
-                       }
-
-                       leaf fragmentation {
-                               type boolean;
-                               default false;
-                               reference "https://tools.ietf.org/html/rfc6006#section-3.3.1";
-                       }
-
-                       leaf p2mp {
-                               type boolean;
-                               default false;
-                               reference "https://tools.ietf.org/html/rfc6006#section-3.3.1";
-                       }
-
-                       leaf ero-compression {
-                               type boolean;
-                               default false;
-                               reference "https://tools.ietf.org/html/rfc6006#section-3.3.1";
-                       }
-
-                       leaf supply-of {
-                               type boolean;
-                               default false;
-                               reference "https://tools.ietf.org/html/rfc5541#section-3.3";
-                       }
-
-                       leaf order {
-                               type boolean;
-                               default false;
-                               reference "https://tools.ietf.org/html/rfc5557#section-5.3";
-                       }
-
-                       leaf make-before-break {
-                               type boolean;
-                               default false;
-                               reference "https://tools.ietf.org/html/rfc5557#section-5.3";
-                       }
-               }
-       }
-
-       grouping no-path-object {
-               description "NO-PATH Object";
-               reference "https://tools.ietf.org/html/rfc5440#section-7.5";
-
-               uses object;
-
-               leaf nature-of-issue {
-                       type uint8;
-                       mandatory true;
-               }
-
-               leaf unsatisfied-constraints {
-                       when "nature-of-issue = 0" {
-                               description
-                                       "The C flag has no meaning
-                                       and is ignored unless the NI
-                                       field is set to 0x00.";
-                       }
-                       type boolean;
-                       default false;
-               }
-       }
-
-       grouping endpoints {
-               choice address-family {
-                       mandatory true;
-
-                       case ipv4-case {
-                               container ipv4 {
-                                       leaf source-ipv4-address {
-                                               type inet:ipv4-address;
-                                               mandatory true;
-                                       }
-
-                                       leaf destination-ipv4-address {
-                                               type inet:ipv4-address;
-                                               mandatory true;
-                                       }
-                               }
-                       }
-                       case ipv6-case {
-                               container ipv6 {
-                                       leaf source-ipv6-address {
-                                               type inet:ipv6-address;
-                                               mandatory true;
-                                       }
-
-                                       leaf destination-ipv6-address {
-                                               type inet:ipv6-address;
-                                               mandatory true;
-                                       }
-                               }
-                       }
-               }
-       }
-
-       grouping endpoints-object {
-               description "END-POINTS Object";
-               reference "https://tools.ietf.org/html/rfc5440#section-7.6";
-
-               container endpoints-obj {
-                       uses object;
-                       uses endpoints;
-               }
-       }
-
-       grouping bandwidth-object {
-               description "BANDWIDTH Object";
-               reference "https://tools.ietf.org/html/rfc5440#section-7.7";
-               container bandwidth {
-                       uses object;
-
-                       // No possibility to carry TLVs
-                       leaf bandwidth {
-                               type netc:bandwidth;
-                       }
-               }
-       }
-
-       grouping metric-object {
-               description "METRIC Object";
-               reference "https://tools.ietf.org/html/rfc5440#section-7.8";
-               container metric {
-                       uses object;
-
-                       leaf metric-type {
-                               type uint8;
-                               mandatory true;
-                       }
-
-                       leaf bound {
-                               type boolean;
-                               default false;
-                       }
-
-                       leaf computed {
-                               type boolean;
-                               default false;
-                       }
-
-                       leaf value {
-                               type ieee754:float32;
-                       }
-               }
-       }
-
-       grouping exclude-route-object {
-               description "Exclude Route Object";
-               reference "https://tools.ietf.org/html/rfc5521#section-2.1.1";
-
-               container xro {
-                       uses object;
-
-                       leaf flags {
-                               type bits {
-                                       bit fail {
-                                               position 31;
-                                       }
-                               }
-                               mandatory true;
-                       }
-
-                       list subobject {
-                               uses rsvp:exclude-route-subobjects;
-                       }
-               }
-       }
-
-       grouping explicit-route-object {
-               description "Explicit Route Object";
-               reference "https://tools.ietf.org/html/rfc5440#section-7.9";
-
-               container ero {
-                       // No possibility of TLVs
-                       uses object;
-
-                       list subobject {
-                               leaf loose {
-                                       type boolean;
-                                       mandatory true;
-                               }
-
-                               uses rsvp:explicit-route-subobjects {
-                                       augment "subobject-type" {
-                                               case path-key-case {
-                                                       container path-key {
-                                                               uses path-key-subobject;
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-               }
-       }
-
-       grouping include-route-object {
-               description "Include Route Object";
-               reference "https://tools.ietf.org/html/rfc5440#section-7.12";
-
-               container iro {
-                       // No possibility of TLVs
-                       uses object;
-
-                       list subobject {
-                               uses rsvp:explicit-route-subobjects;
-                       }
-               }
-       }
-
-       grouping reported-route-object {
-               description "Reported Route Object";
-               reference "https://tools.ietf.org/html/rfc5440#section-7.10";
-
-               container rro {
-                       // No possibility of TLVs
-                       uses object;
-
-                       list subobject {
-                               uses rsvp:record-route-subobjects {
-                                       augment "subobject-type" {
-                                               case path-key-case {
-                                                       container path-key {
-                                                               uses path-key-subobject;
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-               }
-       }
-
-       grouping lspa-object {
-               description "LSPA Object";
-               reference "https://tools.ietf.org/html/rfc5440#section-7.11";
-
-               container lspa {
-                       uses object;
-                       uses rsvp:tunnel-attributes;
-               }
-       }
-
-       grouping svec-object {
-               description "Synchronization Vector Object";
-               reference "https://tools.ietf.org/html/rfc5440#section-7.13";
-
-               container svec {
-                       // No possibility of TLVs
-                       uses object;
-
-                       leaf link-diverse {
-                               type boolean;
-                               default false;
-                       }
-
-                       leaf node-diverse {
-                               type boolean;
-                               default false;
-                       }
-
-                       leaf srlg-diverse {
-                               type boolean;
-                               default false;
-                       }
-
-                       leaf-list requests-ids {
-                               type request-id;
-                       }
-               }
-       }
-
-       grouping notification-object {
-               description "NOTIFICATION Object";
-               reference "https://tools.ietf.org/html/rfc5440#section-7.14";
-               container c-notification {
-                       uses object;
-                       container "tlvs" {
-                               when "../type = 2 and ../value = 1";
-
-                               uses overload-duration-tlv;
-                       }
-
-                       leaf type {
-                               type uint8;
-                               mandatory true;
-                       }
-
-                       leaf value {
-                               type uint8;
-                               mandatory true;
-                       }
-               }
-       }
-
-       grouping pcep-error-object {
-               description "PCEP-ERROR Object";
-               reference "https://tools.ietf.org/html/rfc5440#section-7.15";
-               container error-object {
-                       uses object;
-                       container "tlvs" {
-                               when "../type = 7";
-                               uses req-missing-tlv;
-                       }
-
-                       leaf type {
-                               type uint8;
-                               mandatory true;
-                       }
-
-                       leaf value {
-                               type uint8;
-                               mandatory true;
-                       }
-               }
-       }
-
-       grouping load-balancing-object {
-               description "LOAD-BALANCING Object";
-               reference "https://tools.ietf.org/html/rfc5440#section-7.16";
-
-               container load-balancing {
-                       // No possibility of TLVs
-                       uses object;
-
-                       leaf max-lsp {
-                               type uint8;
-                               mandatory true;
-                       }
-
-                       leaf min-bandwidth {
-                               type netc:bandwidth;
-                       }
-               }
-       }
-
-       grouping close-object {
-               description "CLOSE Object";
-               reference "https://tools.ietf.org/html/rfc5440#section-7.17";
-
-               container c-close {
-                       uses object;
-
-                       leaf reason {
-                               type uint8;
-                               mandatory true;
-                       }
-
-                       container tlvs {
-
-                       }
-               }
-       }
-
-       grouping path-key-subobject {
-               reference "https://tools.ietf.org/html/rfc5520#section-3.1";
-               uses rsvp:c-subobject;
-
-               leaf pce-id {
-                       type pce-id;
-                       mandatory true;
-               }
-
-               leaf path-key {
-                       type path-key;
-                       mandatory true;
-               }
-       }
-
-       grouping path-key-object {
-               description "PATH-KEY Object";
-               reference "https://tools.ietf.org/html/rfc5520#section-3.2.2";
-               container path-key {
-                       uses object;
-
-                       list path-keys {
-                               min-elements 1;
-
-                               leaf loose {
-                                       type boolean;
-                                       default false;
-                               }
-
-                               uses path-key-subobject;
-                       }
-               }
-       }
-
-       grouping of-object {
-               description "OF Object";
-               reference "https://tools.ietf.org/html/rfc5541#section-3.1";
-               container of {
-                       uses object;
-
-                       leaf code {
-                               type of-id;
-                               mandatory true;
-                       }
-               }
-       }
-
-       typedef class-type {
-               type uint8 {
-                       range 1..7;
-               }
-       }
-
-       grouping classtype-object {
-               description "CLASSTYPE Object";
-               reference "https://tools.ietf.org/html/rfc5455#section-3";
-
-               container class-type {
-                       uses object;
-
-                       leaf class-type {
-                               type class-type;
-                               mandatory true;
-                       }
-               }
-       }
-
-       grouping gc-object {
-               description "GLOBAL CONSTRAINTS (GC) Object";
-               reference "https://tools.ietf.org/html/rfc5557#section-5.5";
-               container gc {
-                       uses object;
-
-                       leaf max-hop {
-                               type uint8;
-                               mandatory true;
-                       }
-
-                       leaf max-utilization {
-                               type uint8 {
-                                       range 0..100;
-                               }
-                               units percent;
-                               mandatory true;
-                       }
-
-                       leaf min-utilization {
-                               type uint8 {
-                                       range 0..100;
-                               }
-                               units percent;
-                               mandatory true;
-                       }
-
-                       leaf over-booking-factor {
-                               type uint8 {
-                                       range 0..100;
-                               }
-                               units percent;
-                               mandatory true;
-                       }
-               }
-       }
-
-       // Messages
-       grouping message {
-               description "Marker grouping for message groupings.";
-       }
-
-       grouping message-header {
-               description "Common Header";
-               reference "https://tools.ietf.org/html/rfc5440#section-6.1";
-
-               leaf version {
-                       type protocol-version;
-                       default 1;
-               }
-       }
-
-       grouping open-message {
-               uses message;
-
-               container open-message {
-                       description "Open Message";
-                       reference "https://tools.ietf.org/html/rfc5440#section-6.2";
-
-                       uses message-header;
-
-                       uses open-object;
-               }
-       }
+    yang-version 1;
+    namespace "urn:opendaylight:params:xml:ns:yang:pcep:types";
+    prefix "pcep-t";
+
+    import ieee754 { prefix ieee754; revision-date 2013-08-19; }
+    import ietf-inet-types { prefix inet; revision-date 2013-07-15; }
+    import network-concepts { prefix netc; revision-date 2013-11-25; }
+    import rsvp { prefix rsvp; revision-date 2015-08-20; }
+    import iana { prefix iana; revision-date 2013-08-16; }
+
+    organization "Cisco Systems, Inc.";
+    contact "Robert Varga <rovarga@cisco.com>";
+
+    description
+        "This module contains the base data model of a PCEP message.
+        It rolls up the definitions contained in RFC5440, RFC7896, RFC5520
+        and RFC8306, RFC5886.
+
+        Copyright (c)2013 Cisco Systems, Inc. All rights reserved.
+
+        This program and the accompanying materials are made available
+        under the terms of the Eclipse Public License v1.0 which
+        accompanies this distribution, and is available at
+        http://www.eclipse.org/legal/epl-v10.html";
+
+    revision "2013-10-05" {
+        description
+            "Initial revision.";
+        reference "RFC5440";
+    }
+
+    // NOTE: this model uses counts bits in fields from left to right,
+    //       just as IANA does for PCEP protocol.
+
+    // Types
+    typedef protocol-version {
+        type uint8 {
+            range 1..7;
+        }
+    }
+
+    typedef request-id {
+        type uint32 {
+            range 1..max;
+        }
+    }
+
+    typedef of-id {
+        type uint16;
+    }
+
+    grouping vendor-information {
+        description "VENDOR-INFORMATION format";
+        reference "http://tools.ietf.org/html/draft-ietf-pce-rfc7150bis-00#section-4";
+
+        leaf enterprise-number {
+            type iana:enterprise-number;
+        }
+
+        choice enterprise-specific-information {
+        }
+    }
+
+    // TLVs
+    grouping tlv {
+        description "Marker grouping for TLV groupings.";
+    }
+
+    grouping no-path-vector-tlv {
+        description "NO-PATH-VECTOR TLV";
+        reference "https://tools.ietf.org/html/rfc5440#section-7.5";
+
+        uses tlv;
+        leaf flags {
+            type bits {
+                bit p2mp-unreachable {
+                    position 24;
+                }
+                bit no-gco-solution {
+                    position 25;
+                }
+                bit no-gco-migration {
+                    position 26;
+                }
+                bit path-key {
+                    reference "https://tools.ietf.org/html/rfc5520#section-7.4";
+                    position 27;
+                }
+                bit chain-unavailable {
+                    position 28;
+                }
+                bit unknown-source {
+                    position 29;
+                }
+                bit unknown-destination {
+                    position 30;
+                }
+                bit pce-unavailable {
+                    position 31;
+                }
+            }
+            mandatory true;
+        }
+    }
+
+    grouping overload-duration-tlv {
+        description "OVERLOAD-DURATION TLV";
+        reference "https://tools.ietf.org/html/rfc5440#section-7.14";
+        container overload-duration {
+            uses tlv;
+            leaf duration {
+                type uint32;
+                units seconds;
+            }
+        }
+    }
+
+    grouping req-missing-tlv {
+        description "REQ-MISSING TLV";
+        reference "https://tools.ietf.org/html/rfc5440#section-7.5";
+        container req-missing {
+            uses tlv;
+            leaf request-id {
+                type request-id;
+            }
+        }
+    }
+
+    grouping of-list-tlv {
+        description "OF-List TLV";
+        reference "https://tools.ietf.org/html/rfc5541#section-2.1";
+        container of-list {
+            uses tlv;
+            leaf-list codes {
+                type of-id;
+            }
+        }
+    }
+
+    grouping order-tlv {
+        description "Order TLV";
+        reference "https://tools.ietf.org/html/rfc5557#section-5.4";
+        container order {
+            uses tlv;
+            leaf delete {
+                type uint32;
+                mandatory true;
+            }
+
+            leaf setup {
+                type uint32;
+                mandatory true;
+            }
+        }
+    }
+
+    grouping vs-tlv {
+        description "Vendor-specific TLV.";
+        container vs-tlv {
+                status obsolete;
+                description "This model is obsolete, please use vendor-information-tlvs instead";
+
+                uses tlv;
+
+                leaf enterprise-number {
+                    type iana:enterprise-number;
+                }
+
+                choice vendor-payload {
+                }
+        }
+    }
+
+    grouping path-setup-type-tlv {
+        description "PATH-SETUP-TYPE TLV";
+        reference "https://tools.ietf.org/html/draft-ietf-pce-lsp-setup-type-00#section-3";
+
+        container path-setup-type {
+            uses tlv;
+            leaf pst {
+                description "PST=0: Path is setup via RSVP-TE signaling protocol(default).";
+                type uint8;
+                default 0;
+            }
+        }
+    }
+
+    // Objects
+    grouping object-header {
+        description "Common Object Header";
+        reference "https://tools.ietf.org/html/rfc5440#section-7.2";
+
+        leaf processing-rule {
+            type boolean;
+            default false;
+        }
+
+        leaf ignore {
+            type boolean;
+            default false;
+        }
+    }
+
+    grouping object {
+        description "Core object structure with optional TLVs";
+        uses object-header;
+    }
+
+    grouping vendor-information-tlvs {
+        list vendor-information-tlv {
+            description "VENDOR-INFORMATION-TLV";
+            reference "http://tools.ietf.org/html/draft-ietf-pce-rfc7150bis-00#section-3";
+            uses tlv;
+            uses vendor-information;
+        }
+    }
+
+    grouping vendor-information-objects {
+        list vendor-information-object {
+            description "VENDOR-INFORMATION-OBJECT";
+            reference "http://tools.ietf.org/html/draft-ietf-pce-rfc7150bis-00#section-2";
+            uses object;
+            uses vendor-information;
+        }
+    }
+
+    grouping open-object {
+        description "OPEN Object";
+        reference "https://tools.ietf.org/html/rfc5440#section-7.3";
+
+        container open {
+            uses object;
+            container "tlvs" {
+                uses of-list-tlv;
+                uses vendor-information-tlvs;
+            }
+
+            leaf version {
+                type protocol-version;
+                default 1;
+            }
+
+            leaf keepalive {
+                type uint8 {
+                    range 0..255;
+                }
+                mandatory true;
+            }
+
+            leaf dead-timer {
+                type uint8 {
+                    range 0..255;
+                }
+                mandatory true;
+            }
+
+            leaf session-id {
+                type uint8;
+            }
+        }
+    }
+
+    grouping rp-object {
+        description "RP Object";
+        reference "https://tools.ietf.org/html/rfc5440#section-7.4";
+        container rp {
+            uses object;
+            container "tlvs" {
+                uses order-tlv;
+                uses vendor-information-tlvs;
+                uses path-setup-type-tlv;
+            }
+
+            leaf priority {
+                type uint8 {
+                    range 1..7;
+                }
+            }
+
+            leaf request-id {
+                type request-id;
+                mandatory true;
+            }
+
+            leaf reoptimization {
+                type boolean;
+                default false;
+            }
+
+            leaf bi-directional {
+                type boolean;
+                default false;
+            }
+
+            leaf loose {
+                type boolean;
+                default false;
+            }
+
+            leaf path-key {
+                type boolean;
+                default false;
+                reference "https://tools.ietf.org/html/rfc5520#section-3.2.1";
+            }
+
+            leaf fragmentation {
+                type boolean;
+                default false;
+                reference "https://tools.ietf.org/html/rfc6006#section-3.3.1";
+            }
+
+            leaf p2mp {
+                type boolean;
+                default false;
+                reference "https://tools.ietf.org/html/rfc6006#section-3.3.1";
+            }
+
+            leaf ero-compression {
+                type boolean;
+                default false;
+                reference "https://tools.ietf.org/html/rfc6006#section-3.3.1";
+            }
+
+            leaf supply-of {
+                type boolean;
+                default false;
+                reference "https://tools.ietf.org/html/rfc5541#section-3.3";
+            }
+
+            leaf order {
+                type boolean;
+                default false;
+                reference "https://tools.ietf.org/html/rfc5557#section-5.3";
+            }
+
+            leaf make-before-break {
+                type boolean;
+                default false;
+                reference "https://tools.ietf.org/html/rfc5557#section-5.3";
+            }
+        }
+    }
+
+    grouping no-path-object {
+        description "NO-PATH Object";
+        reference "https://tools.ietf.org/html/rfc5440#section-7.5";
+
+        uses object;
+
+        leaf nature-of-issue {
+            type uint8;
+            mandatory true;
+        }
+
+        leaf unsatisfied-constraints {
+            when "nature-of-issue = 0" {
+                description
+                    "The C flag has no meaning
+                    and is ignored unless the NI
+                    field is set to 0x00.";
+            }
+            type boolean;
+            default false;
+        }
+    }
+
+    grouping endpoints {
+        choice address-family {
+            mandatory true;
+
+            case ipv4-case {
+                container ipv4 {
+                    leaf source-ipv4-address {
+                        type inet:ipv4-address-no-zone;
+                        mandatory true;
+                    }
+
+                    leaf destination-ipv4-address {
+                        type inet:ipv4-address-no-zone;
+                        mandatory true;
+                    }
+                }
+            }
+            case ipv6-case {
+                container ipv6 {
+                    leaf source-ipv6-address {
+                        type inet:ipv6-address-no-zone;
+                        mandatory true;
+                    }
+
+                    leaf destination-ipv6-address {
+                        type inet:ipv6-address-no-zone;
+                        mandatory true;
+                    }
+                }
+            }
+        }
+    }
+
+    grouping endpoints-object {
+        description "END-POINTS Object";
+        reference "https://tools.ietf.org/html/rfc5440#section-7.6";
+
+        container endpoints-obj {
+            uses object;
+            uses endpoints;
+        }
+    }
+
+    grouping bandwidth {
+        // No possibility to carry TLVs
+        leaf bandwidth {
+            type netc:bandwidth;
+        }
+    }
+
+    grouping bandwidth-object {
+        description "BANDWIDTH Object";
+        reference "https://tools.ietf.org/html/rfc5440#section-7.7";
+        container bandwidth {
+            uses object;
+            uses bandwidth;
+        }
+    }
+
+    grouping reoptimization-bandwidth-object {
+        description "BANDWIDTH Object";
+        reference "https://tools.ietf.org/html/rfc5440#section-7.7";
+        container reoptimization-bandwidth {
+            uses object;
+            uses bandwidth;
+        }
+    }
+
+    grouping metric-object {
+        description "METRIC Object";
+        reference "https://tools.ietf.org/html/rfc5440#section-7.8";
+        container metric {
+            uses object;
+
+            leaf metric-type {
+                type uint8;
+                mandatory true;
+            }
+
+            leaf bound {
+                type boolean;
+                default false;
+            }
+
+            leaf computed {
+                type boolean;
+                default false;
+            }
+
+            leaf value {
+                type ieee754:float32;
+            }
+        }
+    }
+
+    grouping exclude-route-object {
+        description "Exclude Route Object";
+        reference "https://tools.ietf.org/html/rfc5521#section-2.1.1";
+
+        container xro {
+            uses object;
+
+            leaf flags {
+                type bits {
+                    bit fail {
+                        position 31;
+                    }
+                }
+                mandatory true;
+            }
+
+            list subobject {
+                uses rsvp:exclude-route-subobjects;
+                ordered-by user;
+            }
+        }
+    }
+
+    grouping explicit-route-object {
+        description "Explicit Route Object";
+        reference "https://tools.ietf.org/html/rfc5440#section-7.9";
+
+        container ero {
+            // No possibility of TLVs
+            uses object;
+
+            list subobject {
+                leaf loose {
+                    type boolean;
+                    mandatory true;
+                }
+
+                uses rsvp:explicit-route-subobjects;
+                ordered-by user;
+            }
+        }
+    }
+
+    grouping secondary-explicit-route-object {
+        description "Secondary Explicit Route Object";
+        reference "https://tools.ietf.org/html/rfc8306#section-3.2";
+        container sero {
+            // No possibility of TLVs
+            uses object;
+
+            list subobject {
+                leaf loose {
+                    type boolean;
+                    mandatory true;
+                }
+
+                uses rsvp:secondary-explicit-route-subobjects;
+                ordered-by user;
+            }
+        }
+    }
+
+    grouping include-route-object {
+        description "Include Route Object";
+        reference "https://tools.ietf.org/html/rfc7896#section-2.1";
+
+        container iro {
+            // No possibility of TLVs
+            uses object;
+
+            list subobject {
+                leaf loose {
+                    type boolean;
+                    mandatory true;
+                }
+
+                uses rsvp:explicit-route-subobjects;
+                ordered-by user;
+            }
+        }
+    }
+
+    grouping reported-route-object {
+        description "Reported Route Object";
+        reference "https://tools.ietf.org/html/rfc5440#section-7.10";
+
+        container rro {
+            // No possibility of TLVs
+            uses object;
+
+            list subobject {
+                uses rsvp:record-route-subobjects;
+                ordered-by user;
+            }
+        }
+    }
+
+    grouping secondary-reported-route-object {
+        description "Reported Route Object";
+        reference "https://tools.ietf.org/html/rfc8306#section-3.2";
+
+        container srro {
+            // No possibility of TLVs
+            uses object;
+
+            list subobject {
+                uses rsvp:secondary-record-route-subobjects;
+                ordered-by user;
+            }
+        }
+    }
+
+    grouping lspa-object {
+        description "LSPA Object";
+        reference "https://tools.ietf.org/html/rfc5440#section-7.11";
+
+        container lspa {
+            uses object;
+            uses rsvp:tunnel-attributes;
+            container "tlvs" {
+                uses vendor-information-tlvs;
+            }
+        }
+    }
+
+    grouping svec-object {
+        description "Synchronization Vector Object";
+        reference "https://tools.ietf.org/html/rfc5440#section-7.13";
+
+        container svec {
+            // No possibility of TLVs
+            uses object;
+
+            leaf link-diverse {
+                type boolean;
+                default false;
+            }
+
+            leaf node-diverse {
+                type boolean;
+                default false;
+            }
+
+            leaf srlg-diverse {
+                type boolean;
+                default false;
+            }
+
+            leaf-list requests-ids {
+                type request-id;
+            }
+        }
+    }
+
+    grouping notification-object {
+        description "NOTIFICATION Object";
+        reference "https://tools.ietf.org/html/rfc5440#section-7.14";
+        container c-notification {
+            uses object;
+            container "tlvs" {
+                when "../type = 2 and ../value = 1";
+
+                uses overload-duration-tlv;
+                uses vendor-information-tlvs;
+            }
+
+            leaf type {
+                type uint8;
+                mandatory true;
+            }
+
+            leaf value {
+                type uint8;
+                mandatory true;
+            }
+        }
+    }
+
+    grouping pcep-error-object {
+        description "PCEP-ERROR Object";
+        reference "https://tools.ietf.org/html/rfc5440#section-7.15";
+        container error-object {
+            uses object;
+            container "tlvs" {
+                when "../type = 7";
+                uses req-missing-tlv;
+                uses vendor-information-tlvs;
+            }
+
+            leaf type {
+                type uint8;
+                mandatory true;
+            }
+
+            leaf value {
+                type uint8;
+                mandatory true;
+            }
+        }
+    }
+
+    grouping load-balancing-object {
+        description "LOAD-BALANCING Object";
+        reference "https://tools.ietf.org/html/rfc5440#section-7.16";
+
+        container load-balancing {
+            // No possibility of TLVs
+            uses object;
+
+            leaf max-lsp {
+                type uint8;
+                mandatory true;
+            }
+
+            leaf min-bandwidth {
+                type netc:bandwidth;
+            }
+        }
+    }
+
+    grouping close-object {
+        description "CLOSE Object";
+        reference "https://tools.ietf.org/html/rfc5440#section-7.17";
+
+        container c-close {
+            uses object;
+
+            leaf reason {
+                type uint8;
+                mandatory true;
+            }
+
+            container tlvs {
+                uses vendor-information-tlvs;
+            }
+        }
+    }
+
+
+
+    grouping path-key-object {
+        description "PATH-KEY Object";
+        reference "https://tools.ietf.org/html/rfc5520#section-3.2.2";
+        container path-key {
+            uses object;
+
+            list path-keys {
+                min-elements 1;
+
+                leaf loose {
+                    type boolean;
+                    default false;
+                }
+
+                uses rsvp:path-key-subobject;
+                ordered-by user;
+            }
+        }
+    }
+
+    grouping of-object {
+        description "OF Object";
+        reference "https://tools.ietf.org/html/rfc5541#section-3.1";
+        container of {
+            uses object;
+
+            leaf code {
+                type of-id;
+                mandatory true;
+            }
+
+            container tlvs {
+                uses vendor-information-tlvs;
+            }
+        }
+    }
+
+    grouping monitoring-object {
+        description "The MONITORING object is used to specify the
+        set of requested PCEP state metrics.";
+        reference "https://tools.ietf.org/html/rfc5886#section-4.1";
+        container monitoring {
+            uses object;
+
+            leaf flags {
+                type bits {
+                    bit incomplete {
+                        description "Indicates that PCE cannot provide any of
+                        the set of requested performance metrics for unspecified reasons.";
+                        position 19;
+                    }
+                    bit overload {
+                        description "Indicates that the overload status is
+                        a metric of interest.";
+                        position 20;
+                    }
+                    bit processing-time {
+                        description "Indicates that the processing times is
+                        a metric of interest.";
+                        position 21;
+                    }
+                    bit general {
+                        description "Indicates that the monitoring
+                        request is a general monitoring request.";
+                        position 22;
+                    }
+                    bit liveness {
+                        description "Indicates that the state metric
+                        of interest is the PCE's liveness.";
+                        position 23;
+                    }
+                }
+            }
+
+            leaf monitoring-id {
+                description "The Monitoring-id-number combined with
+                the PCC-REQ-ID identifying the requesting PCC uniquely
+                identifies the monitoring request context.";
+                type uint32;
+                mandatory true;
+            }
+
+            container tlvs {
+                description "Optional TLV(s).";
+                uses vendor-information-tlvs;
+            }
+        }
+    }
+
+    grouping pcc-id-req-object {
+        description "The PCC-ID-REQ object is used to specify the IP
+        address of the requesting PCC.";
+        reference "https://tools.ietf.org/html/rfc5886#section-4.2";
+        container pcc-id-req {
+            uses object;
+            leaf ip-address {
+                type inet:ip-address-no-zone;
+            }
+        }
+    }
+
+    grouping pce-id-object {
+        description "The PCE-ID object is used to specify a PCE's IP address.";
+        reference "https://tools.ietf.org/html/rfc5886#section-4.3";
+        container pce-id {
+            uses object;
+            leaf ip-address {
+                type inet:ip-address-no-zone;
+            }
+        }
+    }
+
+    grouping proc-time-object {
+        description "The PROC-TIME object is used to report various processing time
+        related metrics.";
+        reference "https://tools.ietf.org/html/rfc5886#section-4.4";
+        container proc-time {
+            uses object;
+
+            leaf estimated {
+                description "Indicates that the reported metric value is
+                based on estimated processing time as opposed to
+                actual computations.";
+                type boolean;
+                mandatory true;
+            }
+
+            leaf current-proc-time {
+                description "Indicates, in milliseconds, the
+                processing time for the path computation of interest
+                characterized in the corresponding PCMonReq message.";
+                type uint32;
+            }
+
+            leaf min-proc-time {
+                description "The minimum processing time in milliseconds";
+                type uint32;
+                mandatory true;
+            }
+
+            leaf max-proc-time {
+                description "The maximum processing time in milliseconds";
+                type uint32;
+                mandatory true;
+            }
+
+            leaf average-proc-time {
+                description "The average processing time in milliseconds";
+                type uint32;
+                mandatory true;
+            }
+
+            leaf variance-proc-time {
+                description "The variance of processing times in milliseconds";
+                type uint32;
+                mandatory true;
+            }
+        }
+    }
+
+    grouping overload-object {
+        description "The OVERLOAD object is used to report a PCE processing
+        congestion state.";
+        reference "https://tools.ietf.org/html/rfc5886#section-4.5";
+        container overload {
+            uses object;
+            leaf duration {
+                description "This field indicates the amount of time,
+                in seconds, that the responding PCE expects that it may continue to
+                be overloaded from the time that the response message was generated.";
+                type uint16;
+                mandatory true;
+            }
+        }
+    }
+
+    typedef class-type {
+        type uint8 {
+            range 1..7;
+        }
+    }
+
+    grouping classtype-object {
+        description "CLASSTYPE Object";
+        reference "https://tools.ietf.org/html/rfc5455#section-3";
+
+        container class-type {
+            uses object;
+
+            leaf class-type {
+                type class-type;
+                mandatory true;
+            }
+        }
+    }
+
+    grouping gc-object {
+        description "GLOBAL CONSTRAINTS (GC) Object";
+        reference "https://tools.ietf.org/html/rfc5557#section-5.5";
+        container gc {
+            uses object;
+
+            leaf max-hop {
+                type uint8;
+                mandatory true;
+            }
+
+            leaf max-utilization {
+                type uint8 {
+                    range 0..100;
+                }
+                units percent;
+                mandatory true;
+            }
+
+            leaf min-utilization {
+                type uint8 {
+                    range 0..100;
+                }
+                units percent;
+                mandatory true;
+            }
+
+            leaf over-booking-factor {
+                type uint8 {
+                    range 0..100;
+                }
+                units percent;
+                mandatory true;
+            }
+
+            container tlvs {
+                uses vendor-information-tlvs;
+            }
+        }
+    }
+
+    // Messages
+    grouping message {
+        description "Marker grouping for message groupings.";
+    }
+
+    grouping message-header {
+        description "Common Header";
+        reference "https://tools.ietf.org/html/rfc5440#section-6.1";
+
+        leaf version {
+            type protocol-version;
+            default 1;
+        }
+    }
+
+    grouping open-message {
+        uses message;
+
+        container open-message {
+            description "Open Message";
+            reference "https://tools.ietf.org/html/rfc5440#section-6.2";
 
-       grouping keepalive-message {
-               uses message;
+            uses message-header;
+
+            uses open-object;
+        }
+    }
 
-               container keepalive-message {
-                       description "Keepalive Message";
-                       reference "https://tools.ietf.org/html/rfc5440#section-6.3";
+    grouping keepalive-message {
+        uses message;
 
-                       uses message-header;
-               }
-       }
-
-       grouping lsp-attributes {
-               uses lspa-object;
-
-               uses bandwidth-object;
-
-               list metrics {
-                       uses metric-object;
-               }
-               uses include-route-object;
-               
-               uses reported-route-object;
-
-               uses exclude-route-object;
-
-               uses of-object;
-
-               uses classtype-object;
-       }
-
-       grouping pcreq-message {
-               uses message;
-
-               container pcreq-message {
-                       description "Path Computation Request Message";
-                       reference "https://tools.ietf.org/html/rfc5440#section-6.4";
-
-                       uses message-header;
-
-                       list requests {
-                               uses rp-object;
-
-                               container path-key-expansion {
-                                       when "rp/path-key = true";
-                                       uses path-key-object;
-                               }
-
-                               container segment-computation {
-                                       when "rp/path-key = false";
-
-                                       container p2p {
-                                               when "../rp/p2mp = false";
-
-                                               uses endpoints-object;
-
-                                               container reported-route {
-                                                       uses reported-route-object;
+        container keepalive-message {
+            description "Keepalive Message";
+            reference "https://tools.ietf.org/html/rfc5440#section-6.3";
 
-                                                       uses bandwidth-object;
-                                               }
+            uses message-header;
+        }
+    }
 
-                                               uses load-balancing-object;
+    grouping lsp-attributes {
+        uses lspa-object;
 
-                                               uses lsp-attributes;
-                                       }
-                               }
-                       }
+        uses bandwidth-object;
+        uses reoptimization-bandwidth-object;
 
-                       list svec {
-                               uses svec-object;
+        list metrics {
+            uses metric-object;
+        }
+        uses include-route-object;
 
-                               uses of-object;
+        uses reported-route-object;
 
-                               uses gc-object;
+        uses exclude-route-object;
 
-                               uses exclude-route-object;
+        uses of-object;
 
-                               list metric {
-                                       uses metric-object;
-                               }
-                       }
-               }
-       }
+        uses classtype-object;
+    }
 
-       grouping path-definition {
-               uses explicit-route-object;
+    grouping pcreq-message {
+        uses message;
 
-               uses lsp-attributes;
-       }
+        container pcreq-message {
+            description "Path Computation Request Message";
+            reference "https://tools.ietf.org/html/rfc5440#section-6.4";
 
-       grouping pcrep-message {
-               uses message;
+            uses message-header;
 
-               container pcrep-message {
-                       description "Path Computation Reply Message";
-                       reference "https://tools.ietf.org/html/rfc5440#section-6.5";
+            list requests {
+                uses rp-object;
 
-                       uses message-header;
+                container path-key-expansion {
+                    when "rp/path-key = true";
+                    uses path-key-object;
+                }
 
-                       list replies {
-                               uses rp-object;
+                container segment-computation {
+                    when "rp/path-key = false";
 
-                               choice result {
-                                       case success-case {
-                                               container success {
-                                                       list paths {
-                                                               uses path-definition;
-                                                       }
-                                               }
-                                       }
-                                       case failure-case {
-                                               container no-path {
-                                                       uses no-path-object;
-                                                       container "tlvs" {
-                                                               container no-path-vector {
-                                                                       uses no-path-vector-tlv;
-                                                               }
-                                                       }
-                                               }
-                                               uses lsp-attributes;
-                                       }
-                               }
-                       }
-               }
-       }
-
-       grouping pcntf-message {
-               uses message;
-
-               container pcntf-message {
-                       description "Notification Message";
-                       reference "https://tools.ietf.org/html/rfc5440#section-6.6";
-
-                       uses message-header;
-
-                       list notifications {
-                               list rps {
-                                       uses rp-object;
-                               }
-
-                               list notifications {
-                                       uses notification-object;
-                               }
-                       }
-               }
-       }
-
-       grouping pcerr-message {
-               uses message;
-
-               container pcerr-message {
-                       description "Error Message";
-                       reference "https://tools.ietf.org/html/rfc5440#section-6.7";
-
-                       uses message-header;
-
-                       list errors {
-                               uses pcep-error-object;
-                       }
-
-                       choice error-type {
-                               case request-case {
-                                       container request {
-                                               list rps {
-                                                       uses rp-object;
-                                               }
-                                       }
-                               }
-
-                               case session-case {
-                                       container session {
-                                               uses open-object;
-                                       }
-                               }
-                       }
-               }
-       }
-
-       grouping close-message {
-               uses message;
-
-               container c-close-message {
-                       description "Close Message";
-                       reference "https://tools.ietf.org/html/rfc5440#section-6.8";
-
-                       uses message-header;
-
-                       uses close-object;
-               }
-       }
+                    container p2p {
+                        when "../rp/p2mp = false";
+
+                        uses endpoints-object;
+
+                        container reported-route {
+                            uses reported-route-object;
+
+                            uses reoptimization-bandwidth-object;
+                        }
+
+                        uses vendor-information-objects;
+
+                        uses load-balancing-object;
+
+                        uses lsp-attributes;
+                    }
+                }
+
+                uses vendor-information-objects;
+            }
+
+            list svec {
+                uses svec-object;
+
+                uses of-object;
+
+                uses gc-object;
+
+                uses exclude-route-object;
+
+                list metric {
+                    uses metric-object;
+                }
+
+                uses vendor-information-objects;
+            }
+
+            container monitoring-request {
+                uses monitoring;
+
+                list pce-id-list {
+                    uses pce-id-object;
+                }
+            }
+        }
+    }
+
+    grouping path-definition {
+        uses explicit-route-object;
+
+        uses lsp-attributes;
+    }
+
+    grouping monitoring {
+        uses monitoring-object;
+        uses pcc-id-req-object;
+    }
+
+    grouping monitoring-metrics {
+        list metric-pce {
+            uses pce-id-object;
+            uses proc-time-object;
+            uses overload-object;
+        }
+    }
+
+    grouping monitoring-response {
+        uses monitoring;
+        choice monitoring-metrics-list {
+            case specific-metrics-list {
+                list specific-metrics {
+                    uses rp-object;
+                    uses monitoring-metrics;
+                }
+            }
+
+            case general-metrics-list {
+                uses monitoring-metrics;
+            }
+        }
+    }
+
+    grouping pcmonrep-message {
+        description "The PCMonRep message is used to provide PCE
+        state metrics back to the requester for out-of-band monitoring requests.";
+        reference "https://tools.ietf.org/html/rfc5886#section-9.2";
+
+        uses message;
+        container pcmonrep-message {
+            uses monitoring-response;
+        }
+    }
+
+    grouping pcrep-message {
+        uses message;
+
+        container pcrep-message {
+            description "Path Computation Reply Message";
+            reference "https://tools.ietf.org/html/rfc5440#section-6.5";
+
+            uses message-header;
+
+            list replies {
+                uses rp-object;
+                uses vendor-information-objects;
+                uses monitoring;
+                uses monitoring-metrics;
+
+                choice result {
+                    case success-case {
+                        container success {
+                            list paths {
+                                uses path-definition;
+                            }
+                            uses vendor-information-objects;
+                        }
+                    }
+                    case failure-case {
+                        container no-path {
+                            uses no-path-object;
+                            container "tlvs" {
+                                uses vendor-information-tlvs;
+                                container no-path-vector {
+                                    uses no-path-vector-tlv;
+                                }
+                            }
+                        }
+                        uses lsp-attributes;
+                    }
+                }
+            }
+        }
+    }
+
+    grouping pcntf-message {
+        uses message;
+
+        container pcntf-message {
+            description "Notification Message";
+            reference "https://tools.ietf.org/html/rfc5440#section-6.6";
+
+            uses message-header;
+
+            list notifications {
+                list rps {
+                    uses rp-object;
+                }
+
+                list notifications {
+                    uses notification-object;
+                }
+            }
+        }
+    }
+
+    grouping pcerr-message {
+        uses message;
+
+        container pcerr-message {
+            description "Error Message";
+            reference "https://tools.ietf.org/html/rfc5440#section-6.7";
+
+            uses message-header;
+
+            list errors {
+                uses pcep-error-object;
+            }
+
+            choice error-type {
+                case request-case {
+                    container request {
+                        list rps {
+                            uses rp-object;
+                        }
+                    }
+                }
+
+                case session-case {
+                    container session {
+                        uses open-object;
+                    }
+                }
+            }
+        }
+    }
+
+    grouping close-message {
+        uses message;
+
+        container c-close-message {
+            description "Close Message";
+            reference "https://tools.ietf.org/html/rfc5440#section-6.8";
+
+            uses message-header;
+
+            uses close-object;
+        }
+    }
+
+    grouping start-tls-message {
+        uses message;
+
+        container start-tls-message {
+            description "StartTLS Message";
+            reference "https://tools.ietf.org/html/draft-ietf-pce-pceps-02#section-3.3";
+
+            uses message-header;
+        }
+    }
 }