diff --git a/gnpy/yang/ext/ietf-layer0-types.yang b/gnpy/yang/ext/ietf-layer0-types.yang
new file mode 100644
index 00000000..230eb7b0
--- /dev/null
+++ b/gnpy/yang/ext/ietf-layer0-types.yang
@@ -0,0 +1,2241 @@
+module ietf-layer0-types {
+ yang-version 1.1;
+ namespace "urn:ietf:params:xml:ns:yang:ietf-layer0-types";
+ prefix l0-types;
+
+ import ietf-te-types {
+ prefix te-types;
+ reference
+ "RFC YYYY: Common YANG Data Types for Traffic Engineering";
+ }
+ // RFC Editor: replace YYYY with actual RFC number assigned to
+ // [I-D.ietf-teas-rfc8776-update] and remove this note
+
+ organization
+ "IETF CCAMP Working Group";
+ contact
+ "WG Web:
+ WG List:
+
+ Editor: Dieter Beller
+
+
+ Editor: Sergio Belotti
+
+
+ Editor: Italo Busi
+
+
+ Editor: Haomian Zheng
+ ";
+ description
+ "This module defines Optical Layer 0 types. This module
+ provides groupings that can be applicable to Layer 0
+ Fixed Optical Networks (e.g., CWDM (Coarse Wavelength
+ Division Multiplexing) and DWDM (Dense Wavelength Division
+ Multiplexing)) and flexi-grid optical networks.
+
+ Copyright (c) 2024 IETF Trust and the persons identified
+ as authors of the code. All rights reserved.
+
+ Redistribution and use in source and binary forms, with
+ or without modification, is permitted pursuant to, and
+ subject to the license terms contained in, the Revised
+ BSD License set forth in Section 4.c of the IETF Trust's
+ Legal Provisions Relating to IETF Documents
+ (https://trustee.ietf.org/license-info).
+
+ This version of this YANG module is part of RFC XXXX; see
+ the RFC itself for full legal notices.
+
+ The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
+ NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
+ 'MAY', and 'OPTIONAL' in this document are to be interpreted as
+ described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
+ they appear in all capitals, as shown here.";
+
+// RFC Ed.: replace XXXX with actual RFC number and remove
+// this note
+
+// replace the revision date with the module publication date
+// the format is (year-month-day)
+ revision 2024-11-27 {
+ description
+ "To be updated";
+ reference
+ "RFC XXXX: A YANG Data Model for Layer 0 Types";
+ }
+
+ revision 2021-08-13 {
+ description
+ "Initial version";
+ reference
+ "RFC 9093: A YANG Data Model for Layer 0 Types";
+ }
+
+/*
+ * Identities
+ */
+
+ identity l0-grid-type {
+ description
+ "Layer 0 grid type";
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable
+ (LSC), Label Switching Routers,
+
+ ITU-T G.694.2 (12/2003): Spectral grids for WDM applications:
+ CWDM wavelength grid";
+ }
+
+ identity wson-grid-cwdm {
+ base l0-grid-type;
+ description
+ "CWDM grid";
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC)
+ Label Switching Routers,
+
+ ITU-T G.694.2 (12/2003): Spectral grids for WDM applications:
+ CWDM wavelength grid";
+ }
+
+ identity wson-grid-dwdm {
+ base l0-grid-type;
+ description
+ "DWDM grid";
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable
+ (LSC), Label Switching Routers,
+
+ ITU-T G.694.1 (10/2020): Spectral grids for WDM applications:
+ DWDM frequency grid";
+ }
+
+ identity flexi-grid-dwdm {
+ base l0-grid-type;
+ description
+ "Flexi-grid";
+ reference
+ "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda
+ Switch Capable (LSC) Label Switching Routers,
+
+ ITU-T G.694.1 (10/2020): Spectral grids for WDM applications:
+ DWDM frequency grid";
+ }
+
+ identity cwdm-ch-spc-type {
+ description
+ "CWDM channel-spacing type";
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC)
+ Label Switching Routers,
+
+ ITU-T G.694.2 (12/2003): Spectral grids for WDM applications:
+ CWDM wavelength grid";
+ }
+
+ identity cwdm-20nm {
+ base cwdm-ch-spc-type;
+ description
+ "20nm channel spacing";
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC)
+ Label Switching Routers,
+
+ ITU-T G.694.2 (12/2003): Spectral grids for WDM applications:
+ CWDM wavelength grid";
+ }
+
+ identity dwdm-ch-spc-type {
+ description
+ "DWDM channel-spacing type";
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC)
+ Label Switching Routers,
+
+ ITU-T G.694.1 (10/2020): Spectral grids for WDM applications:
+ DWDM frequency grid";
+ }
+
+ identity dwdm-100ghz {
+ base dwdm-ch-spc-type;
+ description
+ "100 GHz channel spacing";
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC)
+ Label Switching Routers,
+
+ ITU-T G.694.1 (10/2020): Spectral grids for WDM applications:
+ DWDM frequency grid";
+ }
+
+ identity dwdm-50ghz {
+ base dwdm-ch-spc-type;
+ description
+ "50 GHz channel spacing";
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC)
+ Label Switching Routers,
+
+ ITU-T G.694.1 (10/2020): Spectral grids for WDM applications:
+ DWDM frequency grid";
+ }
+
+ identity dwdm-25ghz {
+ base dwdm-ch-spc-type;
+ description
+ "25 GHz channel spacing";
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC)
+ Label Switching Routers,
+
+ ITU-T G.694.1 (10/2020): Spectral grids for WDM applications:
+ DWDM frequency grid";
+ }
+
+ identity dwdm-12p5ghz {
+ base dwdm-ch-spc-type;
+ description
+ "12.5 GHz channel spacing";
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC)
+ Label Switching Routers,
+
+ ITU-T G.694.1 (10/2020): Spectral grids for WDM applications:
+ DWDM frequency grid";
+ }
+
+ identity flexi-ch-spc-type {
+ status deprecated;
+ description
+ "Flexi-grid channel-spacing type";
+ }
+
+ identity flexi-ch-spc-6p25ghz {
+ base flexi-ch-spc-type;
+ status deprecated;
+ description
+ "6.25 GHz channel spacing";
+ }
+
+ identity flexi-ncfg-type {
+ description
+ "Flexi-grid Nominal Central Frequency Granularity (NCFG)
+ type";
+ reference
+ "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda
+ Switch Capable (LSC) Label Switching Routers,
+
+ ITU-T G.694.1 (10/2020): Spectral grids for WDM applications:
+ DWDM frequency grid";
+ }
+
+ identity flexi-ncfg-6p25ghz {
+ base flexi-ncfg-type;
+ description
+ "6.25 GHz Nominal Central Frequency Granularity (NCFG)";
+ reference
+ "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda
+ Switch Capable (LSC) Label Switching Routers,
+
+ ITU-T G.694.1 (10/2020): Spectral grids for WDM applications:
+ DWDM frequency grid";
+ }
+
+ identity flexi-slot-width-granularity {
+ description
+ "Flexi-grid slot width granularity";
+ reference
+ "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda
+ Switch Capable (LSC) Label Switching Routers,
+
+ ITU-T G.694.1 (10/2020): Spectral grids for WDM applications:
+ DWDM frequency grid";
+ }
+
+ identity flexi-swg-12p5ghz {
+ base flexi-slot-width-granularity;
+ description
+ "12.5 GHz slot width granularity";
+ reference
+ "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda
+ Switch Capable (LSC) Label Switching Routers,
+
+ ITU-T G.694.1 (10/2020): Spectral grids for WDM applications:
+ DWDM frequency grid";
+ }
+
+ identity modulation {
+ description "base identity for modulation type";
+ }
+
+ identity DPSK {
+ base modulation;
+ description
+ "DPSK (Differential Phase Shift Keying) modulation";
+ }
+
+ identity QPSK {
+ base modulation;
+ description
+ "QPSK (Quadrature Phase Shift Keying) modulation";
+ }
+
+ identity DP-QPSK {
+ base modulation;
+ description
+ "DP-QPSK (Dual Polarization Quadrature
+ Phase Shift Keying) modulation";
+ }
+
+ identity QAM8 {
+ base modulation;
+ description
+ "8QAM (8 symbols Quadrature Amplitude Modulation)";
+ }
+
+ identity DP-QAM8 {
+ base modulation;
+ description
+ "DP-QAM8 (8 symbols Dual Polarization Quadrature Amplitude
+ Modulation)";
+ }
+
+ identity QAM16 {
+ base modulation;
+ description
+ "QAM16 (16 symbols Quadrature Amplitude Modulation)";
+ }
+
+ identity DP-QAM16 {
+ base modulation;
+ description
+ "DP-QAM16 (16 symbols Dual Polarization Quadrature Amplitude
+ Modulation)";
+ }
+
+ identity QAM32 {
+ base modulation;
+ description
+ "QAM32 (32 symbols Quadrature Amplitude Modulation)";
+ }
+
+ identity DP-QAM32 {
+ base modulation;
+ description
+ "DP-QAM32 (32 symbols Dual Polarization Quadrature Amplitude
+ Modulation)";
+ }
+
+ identity QAM64 {
+ base modulation;
+ description
+ "QAM64 (64 symbols Quadrature Amplitude Modulation)";
+ }
+
+ identity DP-QAM64 {
+ base modulation;
+ description
+ "DP-QAM64 (64 symbols Dual Polarization Quadrature Amplitude
+ Modulation)";
+ }
+
+ identity fec-type {
+ description
+ "Base identity from which specific FEC
+ (Forward Error Correction) type identities are derived.";
+ }
+
+ identity g-fec {
+ base fec-type;
+ description
+ "Generic Forward Error Correction (G-FEC).";
+ reference
+ "ITU-T G.975 v2.0 (10/2000): Forward error correction for
+ submarine systems.";
+ }
+
+ identity super-fec {
+ base fec-type;
+ description
+ "Super Forward Error Correction (S-FEC).";
+ reference
+ "ITU-T G.975.1 v1.2 (07/2013): Forward error correction for
+ high bit-rate DWDM submarine systems.";
+ }
+
+ identity no-fec {
+ base fec-type;
+ description
+ "No FEC";
+ }
+
+ identity sc-fec {
+ base fec-type;
+ description
+ "Staircase Forward Error Correction (SC-FEC).";
+ reference
+ "Annex A of ITU-T G.709.2 v1.1 (09/2020):OTU4 long-reach
+ interface.";
+ }
+
+ identity o-fec {
+ base fec-type;
+ description
+ "Open Forward Error Correction (O-FEC) which reuses the
+ Bose, Chaudhuri and Hocquenghem (BCH) FEC.";
+ reference
+ "Clause 16.4.4 of ITU-T G.709.3 v2.1 (11/2022): Flexible OTN
+ long-reach interfaces;
+
+ Annex E of ITU-T G.709.3 v2.1 (11/2022): Flexible OTN
+ long-reach interfaces.";
+ }
+
+ identity c-fec {
+ base fec-type;
+ description
+ "Concatenated FEC (C-FEC) that combines an outer Staircase
+ Forward Error Correction (SC-FEC) code and an inner
+ double-extended SD-FEC (128,119) Hamming code.
+
+ More details are provided in clause 15/G.709.3 where it is
+ called DSH instead of concatenated FEC.";
+ reference
+ "Annex A of ITU-T G.709.2 v1.1 (09/2020):OTU4 long-reach
+ interface;
+
+ Annex D of ITU-T G.709.3 v2.1 (11/2022): Flexible OTN
+ long-reach interfaces;
+
+ Clause 15 of ITU-T G.709.3 v2.1 (11/2022): Flexible OTN
+ long-reach interfaces.";
+ }
+
+ identity line-coding {
+ description
+ "Base identity to defined the bit rate/line coding of optical
+ tributary signals.";
+ reference
+ "Section 7.1.2 of ITU-T G.698.2 v3.0 (11/2018).";
+ }
+
+ identity line-coding-NRZ-2p5G {
+ base line-coding;
+ description
+ "The non return to zero (NRZ) bit rate/line coding used by
+ the optical tributary signal class NRZ 2.5G";
+ reference
+ "Section 3.2.6 of ITU-T G.959.1 v8.0 (07/2018).";
+ }
+
+ identity line-coding-NRZ-OTU1 {
+ base line-coding;
+ description
+ "The non return to zero (NRZ) bit rate/line coding used by
+ the Optical channel Transport Unit order 1 (OTU1) optical
+ tributary signals";
+ reference
+ "Section 7.2.1.2 of ITU-T G.959.1 v8.0 (07/2018).";
+ }
+
+ identity line-coding-NRZ-10G {
+ description
+ "The non return to zero (NRZ) bit rate/line coding used by
+ the optical tributary signal class NRZ 10G";
+ reference
+ "Section 3.2.7 of ITU-T G.959.1 v8.0 (07/2018).";
+ }
+
+ identity line-coding-NRZ-OTU2 {
+ base line-coding;
+ description
+ "The non return to zero (NRZ) bit rate/line coding used by
+ the Optical channel Transport Unit order 2 (OTU2) optical
+ tributary signals";
+ reference
+ "Section 7.2.1.2 of ITU-T G.959.1 v8.0 (07/2018).";
+ }
+
+ identity line-coding-OTL4.4-SC {
+ base line-coding;
+ description
+ "The bit rate/line coding used by optical tributary
+ signals carrying a 100G Optical Transport Unit order 4
+ (OTU4) with Staircase Forward Error Correction (SC FEC)
+ from a group of four Optical Transport Lanes (OTL).";
+ reference
+ "Section 3.2.1 of ITU-T G.698.2 v3.0 (11/2018).";
+ }
+
+ identity line-coding-FOIC1.4-SC {
+ base line-coding;
+ description
+ "The bit rate/line coding used by optical tributary signals
+ carrying a FlexO Interface of order C1 with 4 lanes
+ (FOIC1.1) with Staircase Forward Error Correction
+ (SC FEC).";
+ reference
+ "Section 3.2.1 of ITU-T G.698.2 v3.0 (11/2018).";
+ }
+
+ identity wavelength-assignment {
+ description
+ "Wavelength selection base";
+ reference
+ "RFC 7689: Signaling Extensions for Wavelength Switched
+ Optical Networks";
+ }
+
+ identity first-fit-wavelength-assignment {
+ base wavelength-assignment;
+ description
+ "All the available wavelengths are numbered,
+ and this WA (Wavelength Assignment) method chooses
+ the available wavelength with the lowest index";
+ reference
+ "RFC 7689: Signaling Extensions for Wavelength Switched
+ Optical Networks";
+ }
+
+ identity random-wavelength-assignment {
+ base wavelength-assignment;
+ description
+ "This WA method chooses an available
+ wavelength randomly";
+ reference
+ "RFC 7689: Signaling Extensions for Wavelength Switched
+ Optical Networks";
+ }
+
+ identity least-loaded-wavelength-assignment {
+ base wavelength-assignment;
+ description
+ "This WA method selects the wavelength that
+ has the largest residual capacity on the most loaded
+ link along the route (in multi-fiber networks)";
+ reference
+ "RFC 7689: Signaling Extensions for Wavelength Switched
+ Optical Networks";
+ }
+
+ identity lower-first-wavelength-assignment {
+ base wavelength-assignment;
+ description
+ "Allocate wavelengths in ascending order, beginning from the
+ lowest frequency and progressing toward the highest frequency
+ within the permissible frequency range.";
+ }
+
+ identity upper-first-wavelength-assignment {
+ base wavelength-assignment;
+ description
+ "Allocate wavelengths in decending order, beginning from the
+ highest frequency and progressing toward the lowest frequency
+ within the permissible frequency range.";
+ }
+
+ identity type-power-mode {
+ description
+ "power equalization mode used within the
+ OMS and its elements";
+ }
+
+ identity power-spectral-density {
+ base type-power-mode;
+ description
+ "all elements must use power spectral density (W/Hz)";
+ }
+
+ identity carrier-power {
+ base type-power-mode;
+ description
+ "all elements must use power (dBm)";
+ }
+
+ identity switching-wson-lsc {
+ base te-types:switching-lsc;
+ description
+ "Wavelength Switched Optical Network Lambda-Switch Capable
+ (WSON-LSC).";
+ reference
+ "Section 3 of RFC 7688: GMPLS OSPF Enhancement for Signal and
+ Network Element Compatibility for Wavelength Switched Optical
+ Networks";
+ }
+
+ identity switching-flexi-grid-lsc {
+ base te-types:switching-lsc;
+ description
+ "Flexi-grid Lambda-Switch Capable (Flexi-Grid-LSC).";
+ reference
+ "Section 4.1 of RFC 8363: GMPLS OSPF-TE Extensions in Support
+ of Flexi-Grid Dense Wavelength Division Multiplexing (DWDM)
+ Networks";
+ }
+
+/*
+ * Typedefs
+ */
+
+ typedef dwdm-n {
+ type int16;
+ description
+ "The given value 'N' is used to determine the nominal central
+ frequency.
+
+ The nominal central frequency, 'f', is defined by:
+ f = 193100.000 GHz + N x channel spacing (measured in GHz),
+
+ where 193100.000 GHz (193.100000 THz) is the ITU-T 'anchor
+ frequency' for transmission over the DWDM grid, and where
+ 'channel spacing' is defined by the dwdm-ch-spc-type.";
+ reference
+ "RFC6205: Generalized Labels for Lambda-Switch-Capable (LSC)
+ Label Switching Routers,
+
+ ITU-T G.694.1 (10/2020): Spectral grids for WDM applications:
+ DWDM frequency grid";
+ }
+
+ typedef cwdm-n {
+ type int16;
+ description
+ "The given value 'N' is used to determine the nominal central
+ wavelength.
+
+ The nominal central wavelength is defined by:
+ Wavelength = 1471 nm + N x channel spacing (measured in nm)
+
+ where 1471 nm is the conventional 'anchor wavelength' for
+ transmission over the CWDM grid, and where 'channel spacing'
+ is defined by the cwdm-ch-spc-type.";
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC)
+ Label Switching Routers,
+
+ ITU-T G.694.2 (12/2003): Spectral grids for WDM applications:
+ CWDM wavelength grid";
+ }
+
+ typedef flexi-n {
+ type int16;
+ description
+ "The given value 'N' is used to determine the nominal central
+ frequency.
+
+ The nominal central frequency, 'f', is defined by:
+ f = 193100.000 GHz + N x NCFG (measured in GHz),
+
+ where 193100.000 GHz (193.100000 THz) is the ITU-T 'anchor
+ frequency' for transmission over the DWDM grid, and where
+ NCFG is defined by the flexi-ncfg-type, or by the deprecated
+ flexi-ch-spc-type.";
+ reference
+ "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda
+ Switch Capable (LSC) Label Switching Routers,
+
+ ITU-T G.694.1 (10/2020): Spectral grids for WDM applications:
+ DWDM frequency grid";
+ }
+
+ typedef flexi-m {
+ type uint16;
+ description
+ "The given value 'M' is used to determine the slot width.
+
+ A slot width is defined by:
+ slot width = M x SWG (measured in GHz),
+
+ where SWG is defined by the flexi-slot-width-granularity.";
+ reference
+ "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda
+ Switch Capable (LSC) Label Switching Routers,
+
+ ITU-T G.694.1 (10/2020): Spectral grids for WDM applications:
+ DWDM frequency grid";
+ }
+
+ typedef standard-mode {
+ type string;
+ description
+ "Identifies an ITU-T G.698.2 standard application code.
+
+ It MUST be a string with a format that follows the
+ nomenclature defined in section 5.3 of ITU-T G.698.2.";
+ reference
+ "ITU-T G.698.2 (11/2018)";
+ }
+
+ typedef organization-identifier {
+ type string;
+ description
+ "vendor/organization identifier that uses a private mode
+ out of already defined in G.698.2 ITU-T application-code";
+ reference
+ "Section 2.5.2 of RFC YYYY: A YANG Data Model for Optical
+ Impairment-aware Topology.";
+ }
+// RFC Ed.: replace YYYY with actual RFC number and remove
+// this note after draft-ietf-ccamp-optical-impairment-topology-yang
+// is published as an RFC
+
+ typedef operational-mode {
+ type string;
+ description
+ "Identifies an organization (e.g., vendor) specific mode.
+
+ The format of the string has to be defined by the
+ organization which is responsible for defining the
+ corresponding optical interface specification.";
+ reference
+ "Section 2.5.2 of RFC YYYY: A YANG Data Model for Optical
+ Impairment-aware Topology.";
+ }
+// RFC Ed.: replace YYYY with actual RFC number and remove
+// this note after draft-ietf-ccamp-optical-impairment-topology-yang
+// is published as an RFC
+
+ typedef frequency-thz {
+ type decimal64 {
+ fraction-digits 9;
+ }
+ units "THz";
+ description
+ "The DWDM frequency in THz, e.g., 193.112500000";
+ }
+
+ typedef frequency-ghz {
+ type decimal64 {
+ fraction-digits 6;
+ }
+ units "GHz";
+ description
+ "The DWDM frequency in GHz, e.g., 193112.500000";
+ }
+
+ typedef snr {
+ type decimal-2;
+ units "dB@0.1nm";
+ description
+ "(Optical) Signal to Noise Ratio measured over 0.1 nm
+ resolution bandwidth";
+ reference
+ "ITU-T G.977.1 (02/2021): Transverse compatible dense
+ wavelength division multiplexing applications for repeatered
+ optical fibre submarine cable systems";
+ }
+
+ typedef snr-or-null {
+ type union {
+ type snr;
+ type empty;
+ }
+ description
+ "(Optical) Signal to Noise Ratio measured over 0.1 nm
+ resolution bandwidth, when known, or an empty value when
+ unknown.";
+ }
+
+ typedef fiber-type {
+ type enumeration {
+ enum G.652 {
+ description
+ "G.652 Standard Singlemode Fiber";
+ }
+ enum G.654 {
+ description
+ "G.654 Cutoff Shifted Fiber";
+ }
+ enum G.653 {
+ description "G.653 Dispersion Shifted Fiber";
+ }
+ enum G.655 {
+ description "G.655 Non-Zero Dispersion Shifted Fiber";
+ }
+ enum G.656 {
+ description
+ "G.656 Non-Zero Dispersion for Wideband Optical Transport";
+ }
+ enum G.657 {
+ description
+ "G.657 Bend-Insensitive Fiber";
+ }
+ }
+ description
+ "ITU-T based fiber-types";
+ }
+
+ typedef decimal-2 {
+ type decimal64 {
+ fraction-digits 2;
+ }
+ description
+ "A decimal64 value with two digits.";
+ }
+
+ typedef decimal-2-or-null {
+ type union {
+ type decimal-2;
+ type empty;
+ }
+ description
+ "A decimal64 value with two digits, when the value is known or
+ an empty value when the value is not known.";
+ }
+
+ typedef power-gain {
+ type decimal-2 {
+ range "0..max";
+ }
+ units "dB";
+ description
+ "The gain in dB.";
+ }
+
+ typedef power-gain-or-null {
+ type union {
+ type power-gain;
+ type empty;
+ }
+ description
+ "The gain in dB, when it is known or an empty
+ value when the power gain/loss is not known.";
+ }
+
+ typedef power-loss {
+ type decimal-2 {
+ range "0..max";
+ }
+ units "dB";
+ description
+ "The power attenuation in dB.";
+ }
+
+ typedef power-loss-or-null {
+ type union {
+ type power-loss;
+ type empty;
+ }
+ description
+ "The power attenuation in dB, when it is known or an empty
+ value when the loss is not known.";
+ }
+
+ typedef power-ratio {
+ type decimal-2;
+ units "dB";
+ description
+ "The power difference in dB.";
+ }
+
+ typedef power-ratio-or-null {
+ type union {
+ type power-ratio;
+ type empty;
+ }
+ description
+ "The power difference in dB, when it is known or an empty
+ value when the difference is not known.";
+ }
+
+ typedef power-dbm {
+ type decimal-2;
+ units "dBm";
+ description
+ "The power in dBm.";
+ }
+
+ typedef power-dbm-or-null {
+ type union {
+ type power-dbm;
+ type empty;
+ }
+ description
+ "The power in dBm, when it is known or an empty value when the
+ power is not known.";
+ }
+
+ typedef decimal-5 {
+ type decimal64 {
+ fraction-digits 5;
+ }
+ description
+ "A decimal64 value with five digits.";
+ }
+
+ typedef decimal-5-or-null {
+ type union {
+ type decimal-5;
+ type empty;
+ }
+ description
+ "A decimal64 value with five digits, when the value is known
+ or an empty value when the value is not known.";
+ }
+
+ typedef psd {
+ type decimal64 {
+ fraction-digits 16;
+ }
+ units "W/Hz";
+ description
+ "The power spectral density (PSD).
+
+ Typical value : 3.9 E-14, resolution 0.1nW/MHz.";
+ reference
+ "ITU-T G.9700 (07/2019): Fast access to subscriber terminals
+ (G.fast) - Power spectral density specification";
+ }
+
+ typedef psd-or-null {
+ type union {
+ type psd;
+ type empty;
+ }
+ description
+ "The power spectral density (PSD), when it is known or an
+ empty value when the PSD is not known.";
+ }
+
+ typedef decimal-18 {
+ type decimal64 {
+ fraction-digits 18;
+ }
+ description
+ "A decimal64 value with eighteen digits.";
+ }
+
+ typedef decimal-18-or-null {
+ type union {
+ type decimal-18;
+ type empty;
+ }
+ description
+ "A decimal64 value with eighteen digits, when the value is
+ known or an empty value when the value is not known.";
+ }
+
+/*
+ * Groupings
+ */
+
+ grouping wdm-label-start-end {
+ description
+ "The WDM label-start or label-end used to specify DWDM and
+ CWDM label range.";
+
+ choice grid-type {
+ description
+ "Label for fixed & flexi-DWDM or CWDM grid";
+ case fixed-dwdm {
+ leaf dwdm-n {
+ when "derived-from-or-self(../../../grid-type,
+ \"wson-grid-dwdm\")" {
+ description
+ "Valid only when grid type is DWDM.";
+ }
+ type l0-types:dwdm-n;
+ description
+ "The given value 'N' is used to determine the
+ nominal central frequency.";
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable
+ (LSC) Label Switching Routers";
+ }
+ }
+ case cwdm {
+ leaf cwdm-n {
+ when "derived-from-or-self(../../../grid-type,
+ \"wson-grid-cwdm\")" {
+ description
+ "Valid only when grid type is CWDM.";
+ }
+ type l0-types:cwdm-n;
+ description
+ "The given value 'N' is used to determine the nominal
+ central wavelength.";
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable
+ (LSC) Label Switching Routers";
+ }
+ }
+ case flexi-grid {
+ uses l0-types:flexi-grid-label-start-end;
+ }
+ }
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC)
+ Label Switching Routers";
+ }
+
+ grouping wdm-label-step {
+ description
+ "Label step information for fixed & flexi-DWDM or CWDM grid";
+ choice l0-grid-type {
+ description
+ "Grid type: DWDM, CWDM, etc.";
+ case fixed-dwdm {
+ leaf wson-dwdm-channel-spacing {
+ when "derived-from-or-self(../../grid-type,
+ \"wson-grid-dwdm\")" {
+ description
+ "Valid only when grid type is DWDM.";
+ }
+ type identityref {
+ base dwdm-ch-spc-type;
+ }
+ description
+ "Label-step is the channel spacing (GHz), e.g., 100.000,
+ 50.000, 25.000, or 12.500 GHz for DWDM.";
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable
+ (LSC) Label Switching Routers";
+ }
+ }
+ case cwdm {
+ leaf wson-cwdm-channel-spacing {
+ when "derived-from-or-self(../../grid-type,
+ \"wson-grid-cwdm\")" {
+ description
+ "Valid only when grid type is CWDM.";
+ }
+ type identityref {
+ base cwdm-ch-spc-type;
+ }
+ description
+ "Label-step is the channel spacing (nm), i.e., 20 nm
+ for CWDM, which is the only value defined for CWDM.";
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable
+ (LSC) Label Switching Routers";
+ }
+ }
+ case flexi-grid {
+ uses flexi-grid-label-step;
+ }
+ }
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC)
+ Label Switching Routers,
+ ITU-T G.694.2 (12/2003): Spectral grids for WDM applications:
+ CWDM wavelength grid,
+ RFC 8363: GMPLS OSPF-TE Extensions in Support of Flexi-Grid
+ Dense Wavelength Division Multiplexing (DWDM) Networks";
+ }
+
+ grouping wdm-label-hop {
+ description
+ "Generic label-hop information for fixed & flexi-DWDM or
+ CWDM grid";
+ choice grid-type {
+ description
+ "Label for DWDM or CWDM grid";
+ case fixed-dwdm {
+ choice fixed-single-or-super-channel {
+ description
+ "single or super channel";
+ case single {
+ leaf dwdm-n {
+ type l0-types:dwdm-n;
+ description
+ "The given value 'N' is used to determine the
+ nominal central frequency.";
+ }
+ }
+ case multi {
+ leaf-list subcarrier-dwdm-n {
+ type l0-types:dwdm-n;
+ min-elements 2;
+ description
+ "The given values 'N' are used to determine the
+ nominal central frequency for each subcarrier
+ channel.";
+ reference
+ "ITU-T G.694.1 (10/2020): Spectral grids for WDM
+ applications: DWDM frequency grid";
+ }
+ }
+ }
+ }
+ case cwdm {
+ leaf cwdm-n {
+ type l0-types:cwdm-n;
+ description
+ "The given value 'N' is used to determine the nominal
+ central wavelength.";
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable
+ (LSC) Label Switching Routers";
+ }
+ }
+ case flexi-grid {
+ uses l0-types:flexi-grid-label-hop;
+ }
+ }
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC)
+ Label Switching Routers";
+ }
+
+ grouping wdm-label-range-info {
+ description
+ "WDM label range related information";
+ uses l0-label-range-info;
+ container flexi-grid {
+ when "derived-from-or-self(../grid-type,
+ \"flexi-grid-dwdm\")" {
+ description
+ "Applicable only when the grid type is flexi-grid-dwdm.";
+ }
+ description
+ "flexi-grid definition";
+ leaf slot-width-granularity {
+ type identityref {
+ base flexi-slot-width-granularity;
+ }
+ default "flexi-swg-12p5ghz";
+ description
+ "Minimum space between slot widths. Default is 12.500
+ GHz.";
+ reference
+ "RFC 7698: Framework and Requirements for GMPLS-Based
+ Control of Flexi-Grid Dense Wavelength Division
+ Multiplexing (DWDM) Networks";
+ }
+ leaf min-slot-width-factor {
+ type uint16 {
+ range "1..max";
+ }
+ default "1";
+ description
+ "A multiplier of the slot width granularity, indicating
+ the minimum slot width supported by an optical port.
+
+ Minimum slot width is calculated by:
+ Minimum slot width (GHz) =
+ min-slot-width-factor * slot-width-granularity.";
+ reference
+ "RFC 8363: GMPLS OSPF-TE Extensions in Support of Flexi-
+ Grid Dense Wavelength Division Multiplexing (DWDM)
+ Networks";
+ }
+ leaf max-slot-width-factor {
+ type uint16 {
+ range "1..max";
+ }
+ must '. >= ../min-slot-width-factor' {
+ error-message
+ "Maximum slot width must be greater than or equal to
+ minimum slot width.";
+ }
+ description
+ "A multiplier of the slot width granularity, indicating
+ the maximum slot width supported by an optical port.
+
+ Maximum slot width is calculated by:
+ Maximum slot width (GHz) =
+ max-slot-width-factor * slot-width-granularity
+
+ If specified, maximum slot width must be greater than or
+ equal to minimum slot width. If not specified, maximum
+ slot width is equal to minimum slot width.";
+ reference
+ "RFC 8363: GMPLS OSPF-TE Extensions in Support of Flexi-
+ Grid Dense Wavelength Division Multiplexing (DWDM)
+ Networks";
+ }
+ }
+ }
+
+ grouping wson-label-start-end {
+ description
+ "The WSON label-start or label-end used to specify WSON label
+ range.";
+ choice grid-type {
+ description
+ "Label for DWDM or CWDM grid";
+ case dwdm {
+ leaf dwdm-n {
+ when "derived-from-or-self(../../../grid-type,
+ \"wson-grid-dwdm\")" {
+ description
+ "Valid only when grid type is DWDM.";
+ }
+ type l0-types:dwdm-n;
+ description
+ "The central frequency of DWDM.";
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable
+ (LSC) Label Switching Routers";
+ }
+ }
+ case cwdm {
+ leaf cwdm-n {
+ when "derived-from-or-self(../../../grid-type,
+ \"wson-grid-cwdm\")" {
+ description
+ "Valid only when grid type is CWDM.";
+ }
+ type l0-types:cwdm-n;
+ description
+ "Channel wavelength computing input.";
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable
+ (LSC) Label Switching Routers";
+ }
+ }
+ }
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC)
+ Label Switching Routers";
+ }
+
+ grouping wson-label-hop {
+ description
+ "Generic label-hop information for WSON";
+ choice grid-type {
+ description
+ "Label for DWDM or CWDM grid";
+ case dwdm {
+ choice single-or-super-channel {
+ description
+ "single or super channel";
+ case single {
+ leaf dwdm-n {
+ type l0-types:dwdm-n;
+ description
+ "The given value 'N' is used to determine the
+ nominal central frequency.";
+ }
+ }
+ case super {
+ leaf-list subcarrier-dwdm-n {
+ type l0-types:dwdm-n;
+ description
+ "The given values 'N' are used to determine the
+ nominal central frequency for each subcarrier
+ channel.";
+ reference
+ "ITU-T G.694.1 (10/2020): Spectral grids for WDM
+ applications: DWDM frequency grid";
+ }
+ }
+ }
+ }
+ case cwdm {
+ leaf cwdm-n {
+ type l0-types:cwdm-n;
+ description
+ "The given value 'N' is used to determine the nominal
+ central wavelength.";
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable
+ (LSC) Label Switching Routers";
+ }
+ }
+ }
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC)
+ Label Switching Routers";
+ }
+
+ grouping l0-label-range-info {
+ description
+ "Information about Layer 0 label range.";
+ leaf grid-type {
+ type identityref {
+ base l0-grid-type;
+ }
+ description
+ "Grid type";
+ }
+ leaf priority {
+ type uint8;
+ description
+ "Priority in Interface Switching Capability Descriptor
+ (ISCD).";
+ reference
+ "RFC 4203: OSPF Extensions in Support of Generalized
+ Multi-Protocol Label Switching (GMPLS)";
+ }
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC)
+ Label Switching Routers";
+ }
+
+ grouping wson-label-step {
+ description
+ "Label step information for WSON";
+ choice l0-grid-type {
+ description
+ "Grid type: DWDM, CWDM, etc.";
+ case dwdm {
+ leaf wson-dwdm-channel-spacing {
+ when "derived-from-or-self(../../grid-type,
+ \"wson-grid-dwdm\")" {
+ description
+ "Valid only when grid type is DWDM.";
+ }
+ type identityref {
+ base dwdm-ch-spc-type;
+ }
+ description
+ "Label-step is the channel spacing (GHz), e.g., 100.000,
+ 50.000, 25.000, or 12.500 GHz for DWDM.";
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable
+ (LSC) Label Switching Routers";
+ }
+ }
+ case cwdm {
+ leaf wson-cwdm-channel-spacing {
+ when "derived-from-or-self(../../grid-type,
+ \"wson-grid-cwdm\")" {
+ description
+ "Valid only when grid type is CWDM.";
+ }
+ type identityref {
+ base cwdm-ch-spc-type;
+ }
+ description
+ "Label-step is the channel spacing (nm), i.e., 20 nm
+ for CWDM, which is the only value defined for CWDM.";
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable
+ (LSC) Label Switching Routers";
+ }
+ }
+ }
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC)
+ Label Switching Routers,
+
+ ITU-T G.694.2 (12/2003): Spectral grids for WDM applications:
+ CWDM wavelength grid";
+ }
+
+ grouping flexi-grid-label-start-end {
+ description
+ "The flexi-grid label-start or label-end used to specify
+ flexi-grid label range.";
+ leaf flexi-n {
+ type l0-types:flexi-n;
+ description
+ "The given value 'N' is used to determine the nominal
+ central frequency.
+
+ As described in section 3.1 of RFC 8363, the range of
+ available nominal central frequencies are advertised for
+ m=1, which means that for an available central frequency n,
+ the frequency slot from central frequency n-1 to central
+ frequency n+1 is available.";
+ }
+ reference
+ "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda
+ Switch Capable (LSC) Label Switching Routers,
+
+ RFC 8363: GMPLS OSPF-TE Extensions in Support of Flexi-Grid
+ Dense Wavelength Division Multiplexing (DWDM) Networks";
+ }
+
+ grouping flexi-grid-frequency-slot {
+ description
+ "Flexi-grid frequency slot grouping.";
+ uses flexi-grid-label-start-end;
+ leaf flexi-m {
+ type l0-types:flexi-m;
+ description
+ "The given value 'M' is used to determine the slot width.";
+ }
+ reference
+ "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda
+ Switch Capable (LSC) Label Switching Routers";
+ }
+
+ grouping flexi-grid-label-hop {
+ description
+ "Generic label-hop information for flexi-grid";
+ choice single-or-super-channel {
+ description
+ "single or super channel";
+ case single {
+ uses flexi-grid-frequency-slot;
+ }
+ case super {
+ status deprecated;
+ list subcarrier-flexi-n {
+ key "flexi-n";
+ status deprecated;
+ uses flexi-grid-frequency-slot {
+ status deprecated;
+ }
+ description
+ "List of subcarrier channels for flexi-grid super
+ channel.";
+ }
+ }
+ case multi {
+ container frequency-slots {
+ description
+ "The top level container for the list of frequency
+ slots used for flexi-grid super channel.";
+ list frequency-slot {
+ key "flexi-n";
+ min-elements 2;
+ uses flexi-grid-frequency-slot;
+ description
+ "List of frequency slots used for flexi-grid super
+ channel.";
+ }
+ }
+ }
+ }
+ reference
+ "RFC 8363: GMPLS OSPF-TE Extensions in Support of Flexi-Grid
+ Dense Wavelength Division Multiplexing (DWDM) Networks";
+ }
+
+ grouping flexi-grid-label-range-info {
+ description
+ "Flexi-grid-specific label range related information";
+ uses l0-label-range-info;
+ container flexi-grid {
+ description
+ "flexi-grid definition";
+ leaf slot-width-granularity {
+ type identityref {
+ base flexi-slot-width-granularity;
+ }
+ default "flexi-swg-12p5ghz";
+ description
+ "Minimum space between slot widths. Default is 12.500
+ GHz.";
+ reference
+ "RFC 8363: GMPLS OSPF-TE Extensions in Support of
+ Flexi-Grid Dense Wavelength Division Multiplexing (DWDM)
+ Networks";
+ }
+ leaf min-slot-width-factor {
+ type uint16 {
+ range "1..max";
+ }
+ default "1";
+ description
+ "A multiplier of the slot width granularity, indicating
+ the minimum slot width supported by an optical port.
+
+ Minimum slot width is calculated by:
+ Minimum slot width (GHz) =
+ min-slot-width-factor * slot-width-granularity.";
+ reference
+ "RFC 8363: GMPLS OSPF-TE Extensions in Support of Flexi-
+ Grid Dense Wavelength Division Multiplexing (DWDM)
+ Networks";
+ }
+ leaf max-slot-width-factor {
+ type uint16 {
+ range "1..max";
+ }
+ must '. >= ../min-slot-width-factor' {
+ error-message
+ "Maximum slot width must be greater than or equal to
+ minimum slot width.";
+ }
+ description
+ "A multiplier of the slot width granularity, indicating
+ the maximum slot width supported by an optical port.
+
+ Maximum slot width is calculated by:
+ Maximum slot width (GHz) =
+ max-slot-width-factor * slot-width-granularity
+
+ If specified, maximum slot width must be greater than or
+ equal to minimum slot width. If not specified, maximum
+ slot width is equal to minimum slot width.";
+ reference
+ "RFC 8363: GMPLS OSPF-TE Extensions in Support of Flexi-
+ Grid Dense Wavelength Division Multiplexing (DWDM)
+ Networks";
+ }
+ }
+ }
+
+ grouping flexi-grid-label-step {
+ description
+ "Label step information for flexi-grid";
+ leaf flexi-grid-channel-spacing {
+ type identityref {
+ base flexi-ch-spc-type;
+ }
+ default "flexi-ch-spc-6p25ghz";
+ status deprecated;
+ description
+ "Label-step is the nominal central frequency granularity
+ (GHz), e.g., 6.25 GHz.";
+ reference
+ "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda
+ Switch Capable (LSC) Label Switching Routers";
+ }
+ leaf flexi-ncfg {
+ type identityref {
+ base flexi-ncfg-type;
+ }
+ default "flexi-ncfg-6p25ghz";
+ description
+ "Label-step is the nominal central frequency granularity
+ (GHz), e.g., 6.25 GHz.";
+ reference
+ "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda
+ Switch Capable (LSC) Label Switching Routers";
+ }
+ leaf flexi-n-step {
+ type uint8;
+ description
+ "This attribute defines the multiplier for the supported
+ values of 'N'.
+
+ For example, given a grid with a nominal central frequency
+ granularity of 6.25 GHz, the granularity of the supported
+ values of the nominal central frequency could be 12.5 GHz.
+ In this case, the values of flexi-n should be even and this
+ constraint is reported by setting the flexi-n-step to 2.
+
+ This attribute is also known as central frequency
+ granularity in RFC 8363.";
+ reference
+ "RFC 8363: GMPLS OSPF-TE Extensions in Support of Flexi-Grid
+ Dense Wavelength Division Multiplexing (DWDM) Networks";
+ }
+ }
+
+ grouping transceiver-mode {
+ description
+ "This grouping is intended to be used for reporting the
+ information of a transceiver's mode.
+
+ The attributes for the explicit mode shall be augmented when
+ used with either:
+ - the proper leafrefs, when explicit mode templates are used;
+ or,
+ - the explicit-mode grouping, when explicit mode templates
+ are not used.
+
+ The compatible-modes container shall be augmented with the
+ proper leafrefs when used: see for example the
+ transceiver-capabilities grouping below.";
+ choice mode {
+ config false;
+ mandatory true;
+ description
+ "Indicates whether the transceiver's mode is a standard
+ mode, an organizational mode or an explicit mode.";
+ case G.698.2 {
+ uses standard-mode;
+ uses common-standard-organizational-mode;
+ uses common-all-modes;
+ }
+ case organizational-mode {
+ container organizational-mode {
+ config false;
+ description
+ "The set of attributes for an organizational mode";
+ uses organizational-mode;
+ uses common-standard-organizational-mode;
+ uses common-all-modes;
+ } // container organizational-mode
+ }
+ case explicit-mode {
+ container explicit-mode {
+ config false;
+ description
+ "The set of attributes for an explicit mode";
+ // uses explicit-mode;
+ uses common-all-modes;
+ container compatible-modes {
+ description
+ "Container for all the standard and organizational
+ modes supported by the transceiver's explicit
+ mode.";
+ } // container compatible-modes
+ } // container explicit-mode
+ } // end of case explicit-mode
+ } // end of choice
+ }
+
+ grouping transceiver-capabilities {
+ description
+ "This grouping is intended to be used for reporting the
+ capabilities of a transceiver.
+
+ The attributes for the explicit mode shall be augmented when
+ used with either:
+ - the proper leafrefs, when explicit mode templates are used;
+ or,
+ - the explicit-mode grouping, when explicit mode templates
+ are not used.";
+
+ container supported-modes {
+ presence
+ "When present, it indicates that the modes supported by a
+ transceiver are reported.";
+ config false;
+ description
+ "The top level container for the list supported
+ transceiver's modes.";
+ list supported-mode {
+ key "mode-id";
+ config false;
+ min-elements 1;
+ description "The list of supported transceiver's modes.";
+ leaf mode-id {
+ type string {
+ length "1..255";
+ }
+ description "ID for the supported transceiver's mode.";
+ }
+ uses transceiver-mode {
+ augment "mode/explicit-mode/explicit-mode/"
+ + "compatible-modes" {
+ description
+ "Augments the compatible modes with the proper
+ leafrefs.";
+ leaf-list supported-application-codes {
+ type leafref {
+ path "../../../../supported-mode/mode-id";
+ }
+ must "../../../../"
+ + "supported-mode[mode-id=current()]/"
+ + "standard-mode" {
+ description
+ "The pointer is only for application codes
+ supported by transceiver.";
+ }
+ description
+ "List of pointers to the application codes
+ supported by the transceiver's explicit mode.";
+ }
+ leaf-list supported-organizational-modes {
+ type leafref {
+ path "../../../../supported-mode/mode-id";
+ }
+ must "../../../../"
+ + "supported-mode[mode-id=current()]/"
+ + "organizational-mode" {
+ description
+ "The pointer is only for organizational modes
+ supported by transceiver.";
+ }
+ description
+ "List of pointers to the organizational modes
+ supported by the transceiver's explicit mode.";
+ }
+ }
+ }
+ } // list supported-modes
+ } // container supported-modes
+ } // grouping transceiver-capabilities
+
+ grouping standard-mode {
+ description
+ "ITU-T G.698.2 standard mode that guarantees interoperability.
+ It must be an string with the following format:
+ B-DScW-ytz(v) where all these attributes are conformant
+ to the ITU-T recomendation";
+
+ leaf standard-mode {
+ type standard-mode;
+ config false;
+ description
+ "G.698.2 standard mode";
+ }
+ }
+
+ grouping organizational-mode {
+ description
+ "Transponder operational mode supported by organizations or
+ vendor";
+
+ leaf operational-mode {
+ type operational-mode;
+ config false;
+ description
+ "configured organization- or vendor-specific
+ application identifiers (AI) supported by the transponder";
+ }
+ leaf organization-identifier {
+ type organization-identifier;
+ config false;
+ description
+ "organization identifier that uses organizational
+ mode";
+ }
+ }
+
+ grouping penalty-value {
+ description
+ "A common definition of the penalty value used for describing
+ multiple penalty types (.e.g, CD, PMD, PDL).";
+
+ leaf penalty-value {
+ type union {
+ type decimal-2 {
+ range "0..max";
+ }
+ type empty;
+ }
+ units "dB";
+ config false;
+ mandatory true;
+ description
+ "The OSNR penalty associated with the related optical
+ impairment at the receiver, when the value is known or an
+ empty value when the value is not known.";
+ }
+ }
+
+ grouping explicit-mode {
+ description
+ "Attributes capabilities related to explicit transceiver's
+ mode.
+
+ This grouping also contains the list of attributes related to
+ optical impairment limits for explicit mode (min OSNR, max PMD,
+ max CD, max PDL, Q-factor limit, etc.).
+
+ In case of standard and operational mode the attributes are
+ implicit.";
+ leaf line-coding-bitrate {
+ type identityref {
+ base line-coding;
+ }
+ config false;
+ description
+ "Bit rate/line coding of the optical tributary signal.";
+ reference
+ "ITU-T G.698.2 section 7.1.2";
+ }
+ leaf bitrate {
+ type uint16;
+ units "Gbit/sec";
+ config false;
+ description
+ "The gross bitrate (e.g., 100, 200) of the optical tributary
+ signal.";
+ }
+ leaf max-diff-group-delay {
+ type decimal-2;
+ units "ps";
+ config false;
+ description
+ "Maximum Differential group delay of this mode for this
+ lane";
+ }
+ leaf max-chromatic-dispersion {
+ type decimal-2 {
+ range "0..max";
+ }
+ units "ps/nm";
+ config false;
+ description
+ "Maximum acceptable accumulated chromatic dispersion (CD)
+ on the receiver";
+ }
+ list cd-penalty {
+ key cd-value;
+ config false;
+ description
+ "Optional penalty associated with a given accumulated
+ chromatic dispersion (CD) value.
+
+ This list of pair CD and penalty values can be used to
+ sample the function penalty = f(CD).";
+ leaf cd-value {
+ type decimal-2;
+ units "ps/nm";
+ config false;
+ mandatory true;
+ description
+ "The Chromatic Dispersion (CD).";
+ }
+ uses penalty-value;
+ }
+ leaf max-polarization-mode-dispersion {
+ type decimal-2 {
+ range "0..max";
+ }
+ units "ps";
+ config false;
+ description
+ "Maximum acceptable accumulated polarization mode
+ dispersion (PMD) on the receiver";
+ reference
+ "ITU-T G.666 (02/2011): Characteristics of polarization
+ mode dispersion compensators and of receivers that
+ compensate for polarization mode dispersion";
+ }
+ list pmd-penalty {
+ key pmd-value;
+ config false;
+ description
+ "Optional penalty associated with a given accumulated
+ polarization mode dispersion (PMD) value.
+
+ This list of pair PMD and penalty can be used to
+ sample the function penalty = f(PMD).";
+ leaf pmd-value {
+ type decimal-2 {
+ range "0..max";
+ }
+ units "ps";
+ config false;
+ mandatory true;
+ description
+ "The Polarization Mode Dispersion (PMD).";
+ }
+ uses penalty-value;
+ }
+ leaf max-polarization-dependent-loss {
+ type power-loss-or-null;
+ config false;
+ mandatory true;
+ description
+ "Maximum acceptable accumulated accumulated polarization
+ dependent loss (PDL) on the receiver";
+ }
+ list pdl-penalty {
+ key pdl-value;
+ config false;
+ description
+ "Optional penalty associated with a given accumulated
+ polarization dependent loss (PDL) value.
+
+ This list of pair PDL and penalty values can be used to
+ sample the function PDL = f(penalty).";
+ leaf pdl-value {
+ type power-loss;
+ config false;
+ mandatory true;
+ description
+ "Maximum acceptable accumulated polarization dependent
+ loss (PDL).";
+ }
+ uses penalty-value;
+ }
+ leaf available-modulation-type {
+ type identityref {
+ base modulation;
+ }
+ config false;
+ description
+ "Modulation type the specific transceiver in the list
+ can support";
+ }
+ leaf min-OSNR {
+ type snr;
+ units "dBm";
+ config false;
+ description
+ "min OSNR measured over 0.1 nm resolution bandwidth:
+ if received OSNR at Rx-power reference point
+ (rx-ref-channel-power) is lower than MIN-OSNR, an increased
+ level of bit-errors post-FEC needs to be expected";
+ }
+ leaf rx-ref-channel-power {
+ type power-dbm;
+ config false;
+ description
+ "The channel power used as reference for defining penalties
+ and min-OSNR";
+ }
+ list rx-channel-power-penalty {
+ key rx-channel-power-value;
+ config false;
+ description
+ "Optional penalty associated with a received power
+ lower than rx-ref-channel-power.
+
+ This list of pair power and penalty can be used to
+ sample the function penalty = f(rx-channel-power).";
+ leaf rx-channel-power-value {
+ type power-dbm;
+ units "dBm";
+ config false;
+ mandatory true;
+ description
+ "The Received Power.";
+ }
+ uses penalty-value;
+ }
+ leaf min-Q-factor {
+ type decimal-2;
+ units "dB";
+ config false;
+ description "min Qfactor at FEC threshold";
+ }
+ leaf available-baud-rate {
+ type decimal64 {
+ fraction-digits 1;
+ }
+ units "Bd";
+ config false;
+ description
+ "Baud-rate the specific transceiver in
+ the list can support.
+ Baud-rate is the unit for
+ symbol rate or modulation rate
+ in symbols per second or
+ pulses per second.
+ It is the number of distinct symbol
+ changes (signal events) made to the
+ transmission medium
+ per second in a digitally
+ modulated signal or a line code";
+ }
+ leaf roll-off {
+ type decimal64 {
+ fraction-digits 4;
+ range "0..1";
+ }
+ config false;
+ description
+ "the roll-off factor (beta with values from 0 to 1)
+ identifies how the real signal shape exceed
+ the baud rate. If=0 it is exactly matching
+ the baud rate.If=1 the signal exceeds the
+ 50% of the baud rate at each side.";
+ }
+ leaf min-carrier-spacing {
+ type frequency-ghz;
+ config false;
+ description
+ "This attribute specifies the minimum nominal difference
+ between the carrier frequencies of two homogeneous OTSis
+ (which have the same optical characteristics but the central
+ frequencies) such that if they are placed next to each other
+ the interference due to spectrum overlap between them can be
+ considered negligible.
+
+ In case of heterogeneous OTSi it is up to path computation
+ engine to determine the minimum distance between the carrier
+ frequency of the two adjacent OTSi.";
+ }
+ leaf available-fec-type {
+ type identityref {
+ base fec-type;
+ }
+ config false;
+ description "Available FEC";
+ }
+ leaf fec-code-rate {
+ type decimal64 {
+ fraction-digits 8;
+ range "0..max";
+ }
+ config false;
+ description "FEC-code-rate";
+ }
+ leaf fec-threshold {
+ type decimal64 {
+ fraction-digits 8;
+ range "0..max";
+ }
+ config false;
+ description
+ "Threshold on the BER, for which FEC
+ is able to correct errors";
+ }
+ leaf in-band-osnr {
+ type snr;
+ config false;
+ description
+ "The OSNR defined within the bandwidth of the transmit
+ spectral excursion (i.e., between the nominal central
+ frequency of the channel and the -3.0dB points of the
+ transmitter spectrum furthest from the nominal central
+ frequency) measured at reference point Ss.
+
+ The in-band OSNR is referenced to an optical bandwidth of
+ 0.1nm @ 193.7 THz or 12.5 GHz.";
+ reference
+ "OIF-400ZR-01.0: Implementation Agreement 400ZR";
+ }
+ leaf out-of-band-osnr {
+ type snr;
+ config false;
+ description
+ "The ratio of the peak transmitter power to the integrated
+ power outside the transmitter spectral excursion.
+
+ The spectral resolution of the measurement shall be better
+ than the maximum spectral width of the peak.
+
+ The out-of-band OSNR is referenced to an optical bandwidth
+ of 0.1nm @ 193.7 THz or 12.5 GHz";
+ reference
+ "OIF-400ZR-01.0: Implementation Agreement 400ZR";
+ }
+ leaf tx-polarization-power-difference {
+ type power-ratio;
+ config false;
+ description
+ "The transmitter polarization dependent power difference
+ defined as the power difference between X and Y
+ polarizations";
+ reference
+ "OIF-400ZR-01.0: Implementation Agreement 400ZR";
+ }
+ leaf polarization-skew {
+ type decimal-2;
+ units "ps";
+ config false;
+ description
+ "The X-Y skew, included as a fixed value in the receiver
+ polarization mode dispersion (PMD) tolerance limits.";
+ reference
+ "OIF-400ZR-01.0: Implementation Agreement 400ZR";
+ }
+ } // grouping explicit-mode
+
+ grouping common-standard-organizational-mode {
+ description
+ "Common attributes used by standard and organizational
+ transceiver's modes.";
+
+ leaf-list line-coding-bitrate {
+ type identityref {
+ base line-coding;
+ }
+ config false;
+ description
+ "The list of the bit rate/line coding of the optical
+ tributary signal supported by the transceiver.
+
+ Reporting this list is optional when the standard or
+ organization mode supports only one bit rate/line coding.";
+ reference
+ "ITU-T G.698.2 section 7.1.2";
+ }
+ } // grouping common-standard-organizational-mode
+
+ grouping transmitter-tuning-range {
+ description
+ "Transmitter tuning range (f_tx-min, f_tx-max)";
+
+ leaf min-central-frequency {
+ type frequency-thz;
+ description
+ "This parameter indicates the minimum frequency for the
+ transmitter tuning range.";
+ }
+ leaf max-central-frequency {
+ type frequency-thz;
+ description
+ "This parameter indicates the maximum frequency for the
+ transmitter tuning range.";
+ }
+
+ leaf transceiver-tunability {
+ type frequency-ghz;
+ description
+ "This parameter indicates the transmitter frequency fine
+ tuning steps e.g 3.125GHz or 0.001GHz.";
+ }
+ } // grouping transmitter-tuning-range
+
+ grouping common-all-modes {
+ description
+ "Common attributes used by all transceiver's modes.";
+
+ container transmitter-tuning-range {
+ config false;
+ description
+ "Transmitter tuning range (f_tx-min, f_tx-max)";
+ uses transmitter-tuning-range;
+ }
+/* Alternative solution (not future safe):
+
+ uses transmitter-tuning-range {
+ refine min-central-frequency {
+ config false;
+ }
+ refine max-central-frequency {
+ config false;
+ }
+ refine transceiver-tunability {
+ config false;
+ }
+ }
+*/
+ leaf tx-channel-power-min {
+ type power-dbm;
+ config false;
+ description "The minimum output power of this interface";
+ }
+ leaf tx-channel-power-max {
+ type power-dbm;
+ config false;
+ description "The maximum output power of this interface";
+ }
+ leaf rx-channel-power-min {
+ type power-dbm;
+ config false;
+ description "The minimum input power of this interface";
+ }
+ leaf rx-channel-power-max {
+ type power-dbm;
+ config false;
+ description "The maximum input power of this interface";
+ }
+ leaf rx-total-power-max {
+ type power-dbm;
+ config false;
+ description
+ "Maximum rx optical power for all the channels.
+
+ It is applicable only to multi-channel modes.";
+ }
+ } // grouping common-all-modes
+
+ grouping common-transceiver-param {
+ description
+ "The common parameters of an optical transceiver,
+ that supplement the configured mode.";
+
+ uses common-transceiver-configured-param;
+ uses common-transceiver-readonly-param;
+ }
+
+ grouping common-transceiver-configured-param {
+ description
+ "The configured parameters of an optical transceiver,
+ that supplement the configured mode.";
+
+ leaf line-coding-bitrate {
+ type identityref {
+ base line-coding;
+ }
+ description
+ "Bit rate/line coding of the optical tributary signal.
+
+ Support of this attribute is optional when the configured
+ mode supports only one bit rate/line coding.";
+ reference
+ "ITU-T G.698.2 section 7.1.2";
+ }
+ leaf tx-channel-power {
+ type power-dbm-or-null;
+ description
+ "The current channel transmit power, when the value is
+ known or an empty value when the value is not known.
+
+ The empty value MUST NOT be used when this attribute is
+ configured.";
+ }
+ } // grouping for configured transceiver attributes out of mode
+
+ grouping common-transceiver-readonly-param {
+ description
+ "The common read-only parameters of an optical transceiver,
+ that supplement the configured mode.";
+
+ leaf rx-channel-power {
+ type power-dbm-or-null;
+ config false;
+ description
+ "The current channel received power, when the value is
+ known or an empty value when the value is not known.";
+ }
+ leaf rx-total-power {
+ type power-dbm-or-null;
+ config false;
+ description
+ "The current total received power, when the value is known
+ or an empty value when the value is not known.";
+ }
+ } // grouping for read-only transceiver attributes out of mode
+
+ grouping l0-tunnel-attributes {
+ description
+ "Parameters for Layer0 (WSON or Flexi-Grid) Tunnels.";
+
+ leaf wavelength-assignment {
+ type identityref {
+ base wavelength-assignment;
+ }
+ description "Wavelength Allocation Method";
+ }
+ }
+
+ grouping frequency-range {
+ description
+ "This grouping defines the lower and upper bounds of a
+ frequency range (e.g., a band).
+
+ This grouping SHOULD NOT be used to define a frequency slot,
+ which SHOULD be defined using the n and m values instead.";
+ leaf lower-frequency {
+ type frequency-thz;
+ mandatory true;
+ description
+ "The lower frequency boundary of the
+ frequency range.";
+ }
+ leaf upper-frequency {
+ type frequency-thz;
+ must '. > ../lower-frequency' {
+ error-message
+ "The upper frequency must be greater than the lower
+ frequency.";
+ }
+ mandatory true;
+ description
+ "The upper frequency boundary of the
+ frequency range.";
+ }
+ }
+
+ grouping l0-path-constraints {
+ description
+ "Common attribute for Layer 0 path constraints to be used by
+ Layer 0 computation.";
+ leaf gsnr-extra-margin {
+ type snr {
+ range 0..max;
+ }
+ default 0;
+ description
+ "An additional margin to be added to the OSNR-min of the
+ transceiver when checking the estimated received Generalized
+ SNR (GSNR).";
+ }
+ }
+
+ grouping l0-path-properties {
+ description
+ "Common attribute for reporting the Layer 0 computed path
+ properties.";
+ leaf estimated-gsnr {
+ type snr;
+ config false;
+ description
+ "The estimate received GSNR for the computed path.";
+ }
+ leaf estimated-eol-gsnr {
+ type snr;
+ config false;
+ description
+ "The estimate received GSNR for the computed path
+ degraded at the end of life.";
+ }
+ leaf estimated-lowest-gsnr {
+ type snr;
+ config false;
+ description
+ "The estimate lowest received GSNR for the computed path
+ among all possible wavelength channels along the same
+ path.";
+ }
+ }
+}
\ No newline at end of file
diff --git a/gnpy/yang/ext/ietf-layer0-types@2024-03-04.yang b/gnpy/yang/ext/ietf-layer0-types@2024-03-04.yang
new file mode 100644
index 00000000..45e937ca
--- /dev/null
+++ b/gnpy/yang/ext/ietf-layer0-types@2024-03-04.yang
@@ -0,0 +1,2247 @@
+module ietf-layer0-types {
+ yang-version 1.1;
+ namespace "urn:ietf:params:xml:ns:yang:ietf-layer0-types";
+ prefix l0-types;
+
+ organization
+ "IETF CCAMP Working Group";
+ contact
+ "WG Web:
+ WG List:
+
+ Editor: Dieter Beller
+
+
+ Editor: Sergio Belotti
+
+
+ Editor: Italo Busi
+
+
+ Editor: Haomian Zheng
+ ";
+ description
+ "This module defines Optical Layer 0 types. This module
+ provides groupings that can be applicable to Layer 0
+ Fixed Optical Networks (e.g., CWDM (Coarse Wavelength
+ Division Multiplexing) and DWDM (Dense Wavelength Division
+ Multiplexing)) and flexi-grid optical networks.
+
+ Copyright (c) 2024 IETF Trust and the persons identified
+ as authors of the code. All rights reserved.
+
+ Redistribution and use in source and binary forms, with
+ or without modification, is permitted pursuant to, and
+ subject to the license terms contained in, the Revised
+ BSD License set forth in Section 4.c of the IETF Trust's
+ Legal Provisions Relating to IETF Documents
+ (https://trustee.ietf.org/license-info).
+
+ This version of this YANG module is part of RFC XXXX; see
+ the RFC itself for full legal notices.
+
+ The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
+ NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
+ 'MAY', and 'OPTIONAL' in this document are to be interpreted as
+ described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
+ they appear in all capitals, as shown here.";
+
+// RFC Ed.: replace XXXX with actual RFC number and remove
+// this note
+
+// replace the revision date with the module publication date
+// the format is (year-month-day)
+ revision 2024-03-04 {
+ description
+ "To be updated";
+ reference
+ "RFC XXXX: A YANG Data Model for Layer 0 Types";
+ }
+
+ revision 2021-08-13 {
+ description
+ "Initial version";
+ reference
+ "RFC 9093: A YANG Data Model for Layer 0 Types";
+ }
+
+/*
+ * Identities
+ */
+
+ identity l0-grid-type {
+ description
+ "Layer 0 grid type";
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable
+ (LSC), Label Switching Routers,
+
+ ITU-T G.694.2 (12/2003): Spectral grids for WDM applications:
+ CWDM wavelength grid";
+ }
+
+ identity wson-grid-cwdm {
+ base l0-grid-type;
+ description
+ "CWDM grid";
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC)
+ Label Switching Routers,
+
+ ITU-T G.694.2 (12/2003): Spectral grids for WDM applications:
+ CWDM wavelength grid";
+ }
+
+ identity wson-grid-dwdm {
+ base l0-grid-type;
+ description
+ "DWDM grid";
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable
+ (LSC), Label Switching Routers,
+
+ ITU-T G.694.1 (10/2020): Spectral grids for WDM applications:
+ DWDM frequency grid";
+ }
+
+ identity flexi-grid-dwdm {
+ base l0-grid-type;
+ description
+ "Flexi-grid";
+ reference
+ "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda
+ Switch Capable (LSC) Label Switching Routers,
+
+ ITU-T G.694.1 (10/2020): Spectral grids for WDM applications:
+ DWDM frequency grid";
+ }
+
+ identity cwdm-ch-spc-type {
+ description
+ "CWDM channel-spacing type";
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC)
+ Label Switching Routers,
+
+ ITU-T G.694.2 (12/2003): Spectral grids for WDM applications:
+ CWDM wavelength grid";
+ }
+
+ identity cwdm-20nm {
+ base cwdm-ch-spc-type;
+ description
+ "20nm channel spacing";
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC)
+ Label Switching Routers,
+
+ ITU-T G.694.2 (12/2003): Spectral grids for WDM applications:
+ CWDM wavelength grid";
+ }
+
+ identity dwdm-ch-spc-type {
+ description
+ "DWDM channel-spacing type";
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC)
+ Label Switching Routers,
+
+ ITU-T G.694.1 (10/2020): Spectral grids for WDM applications:
+ DWDM frequency grid";
+ }
+
+ identity dwdm-100ghz {
+ base dwdm-ch-spc-type;
+ description
+ "100 GHz channel spacing";
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC)
+ Label Switching Routers,
+
+ ITU-T G.694.1 (10/2020): Spectral grids for WDM applications:
+ DWDM frequency grid";
+ }
+
+ identity dwdm-50ghz {
+ base dwdm-ch-spc-type;
+ description
+ "50 GHz channel spacing";
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC)
+ Label Switching Routers,
+
+ ITU-T G.694.1 (10/2020): Spectral grids for WDM applications:
+ DWDM frequency grid";
+ }
+
+ identity dwdm-25ghz {
+ base dwdm-ch-spc-type;
+ description
+ "25 GHz channel spacing";
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC)
+ Label Switching Routers,
+
+ ITU-T G.694.1 (10/2020): Spectral grids for WDM applications:
+ DWDM frequency grid";
+ }
+
+ identity dwdm-12p5ghz {
+ base dwdm-ch-spc-type;
+ description
+ "12.5 GHz channel spacing";
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC)
+ Label Switching Routers,
+
+ ITU-T G.694.1 (10/2020): Spectral grids for WDM applications:
+ DWDM frequency grid";
+ }
+
+ identity flexi-ch-spc-type {
+ status deprecated;
+ description
+ "Flexi-grid channel-spacing type";
+ }
+
+ identity flexi-ch-spc-6p25ghz {
+ base flexi-ch-spc-type;
+ status deprecated;
+ description
+ "6.25 GHz channel spacing";
+ }
+
+ identity flexi-ncfg-type {
+ description
+ "Flexi-grid Nominal Central Frequency Granularity (NCFG)
+ type";
+ reference
+ "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda
+ Switch Capable (LSC) Label Switching Routers,
+
+ ITU-T G.694.1 (10/2020): Spectral grids for WDM applications:
+ DWDM frequency grid";
+ }
+
+ identity flexi-ncfg-6p25ghz {
+ base flexi-ncfg-type;
+ description
+ "6.25 GHz Nominal Central Frequency Granularity (NCFG)";
+ reference
+ "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda
+ Switch Capable (LSC) Label Switching Routers,
+
+ ITU-T G.694.1 (10/2020): Spectral grids for WDM applications:
+ DWDM frequency grid";
+ }
+
+ identity flexi-slot-width-granularity {
+ description
+ "Flexi-grid slot width granularity";
+ reference
+ "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda
+ Switch Capable (LSC) Label Switching Routers,
+
+ ITU-T G.694.1 (10/2020): Spectral grids for WDM applications:
+ DWDM frequency grid";
+ }
+
+ identity flexi-swg-12p5ghz {
+ base flexi-slot-width-granularity;
+ description
+ "12.5 GHz slot width granularity";
+ reference
+ "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda
+ Switch Capable (LSC) Label Switching Routers,
+
+ ITU-T G.694.1 (10/2020): Spectral grids for WDM applications:
+ DWDM frequency grid";
+ }
+
+ identity modulation {
+ description "base identity for modulation type";
+ }
+
+ identity DPSK {
+ base modulation;
+ description
+ "DPSK (Differential Phase Shift Keying) modulation";
+ }
+
+ identity QPSK {
+ base modulation;
+ description
+ "QPSK (Quadrature Phase Shift Keying) modulation";
+ }
+
+ identity DP-QPSK {
+ base modulation;
+ description
+ "DP-QPSK (Dual Polarization Quadrature
+ Phase Shift Keying) modulation";
+ }
+
+ identity QAM8 {
+ base modulation;
+ description
+ "8QAM (8 symbols Quadrature Amplitude Modulation)";
+ }
+
+ identity DP-QAM8 {
+ base modulation;
+ description
+ "DP-QAM8 (8 symbols Dual Polarization Quadrature Amplitude
+ Modulation)";
+ }
+
+ identity QAM16 {
+ base modulation;
+ description
+ "QAM16 (16 symbols Quadrature Amplitude Modulation)";
+ }
+
+ identity DP-QAM16 {
+ base modulation;
+ description
+ "DP-QAM16 (16 symbols Dual Polarization Quadrature Amplitude
+ Modulation)";
+ }
+
+ identity QAM32 {
+ base modulation;
+ description
+ "QAM32 (32 symbols Quadrature Amplitude Modulation)";
+ }
+
+ identity DP-QAM32 {
+ base modulation;
+ description
+ "DP-QAM32 (32 symbols Dual Polarization Quadrature Amplitude
+ Modulation)";
+ }
+
+ identity QAM64 {
+ base modulation;
+ description
+ "QAM64 (64 symbols Quadrature Amplitude Modulation)";
+ }
+
+ identity DP-QAM64 {
+ base modulation;
+ description
+ "DP-QAM64 (64 symbols Dual Polarization Quadrature Amplitude
+ Modulation)";
+ }
+
+ identity fec-type {
+ description
+ "Base identity from which specific FEC
+ (Forward Error Correction) type identities are derived.";
+ }
+
+ identity g-fec {
+ base fec-type;
+ description
+ "Generic Forward Error Correction (G-FEC).";
+ reference
+ "ITU-T G.975 v2.0 (10/2000): Forward error correction for
+ submarine systems.";
+ }
+
+ identity super-fec {
+ base fec-type;
+ description
+ "Super Forward Error Correction (S-FEC).";
+ reference
+ "ITU-T G.975.1 v1.2 (07/2013): Forward error correction for
+ high bit-rate DWDM submarine systems.";
+ }
+
+ identity no-fec {
+ base fec-type;
+ description
+ "No FEC";
+ }
+
+ identity sc-fec {
+ base fec-type;
+ description
+ "Staircase Forward Error Correction (SC-FEC).";
+ reference
+ "Annex A of ITU-T G.709.2 v1.1 (09/2020):OTU4 long-reach
+ interface.";
+ }
+
+ identity o-fec {
+ base fec-type;
+ description
+ "Open Forward Error Correction (O-FEC) which reuses the
+ Bose, Chaudhuri and Hocquenghem (BCH) FEC.";
+ reference
+ "Clause 16.4.4 of ITU-T G.709.3 v2.1 (11/2022): Flexible OTN
+ long-reach interfaces;
+
+ Annex E of ITU-T G.709.3 v2.1 (11/2022): Flexible OTN
+ long-reach interfaces.";
+ }
+
+ identity c-fec {
+ base fec-type;
+ description
+ "Concatenated FEC (C-FEC) that combines an outer Staircase
+ Forward Error Correction (SC-FEC) code and an inner
+ double-extended SD-FEC (128,119) Hamming code.
+
+ More details are provided in clause 15/G.709.3 where it is
+ called DSH instead of concatenated FEC.";
+ reference
+ "Annex A of ITU-T G.709.2 v1.1 (09/2020):OTU4 long-reach
+ interface;
+
+ Annex D of ITU-T G.709.3 v2.1 (11/2022): Flexible OTN
+ long-reach interfaces;
+
+ Clause 15 of ITU-T G.709.3 v2.1 (11/2022): Flexible OTN
+ long-reach interfaces.";
+ }
+
+ identity line-coding {
+ description
+ "Base identity to defined the bit rate/line coding of optical
+ tributary signals.";
+ reference
+ "Section 7.1.2 of ITU-T G.698.2 v3.0 (11/2018).";
+ }
+
+ identity line-coding-NRZ-2p5G {
+ base line-coding;
+ description
+ "The non return to zero (NRZ) bit rate/line coding used by
+ the optical tributary signal class NRZ 2.5G";
+ reference
+ "Section 3.2.6 of ITU-T G.959.1 v8.0 (07/2018).";
+ }
+
+ identity line-coding-NRZ-OTU1 {
+ base line-coding;
+ description
+ "The non return to zero (NRZ) bit rate/line coding used by
+ the Optical channel Transport Unit order 1 (OTU1) optical
+ tributary signals";
+ reference
+ "Section 7.2.1.2 of ITU-T G.959.1 v8.0 (07/2018).";
+ }
+
+ identity line-coding-NRZ-10G {
+ description
+ "The non return to zero (NRZ) bit rate/line coding used by
+ the optical tributary signal class NRZ 10G";
+ reference
+ "Section 3.2.7 of ITU-T G.959.1 v8.0 (07/2018).";
+ }
+
+ identity line-coding-NRZ-OTU2 {
+ base line-coding;
+ description
+ "The non return to zero (NRZ) bit rate/line coding used by
+ the Optical channel Transport Unit order 2 (OTU2) optical
+ tributary signals";
+ reference
+ "Section 7.2.1.2 of ITU-T G.959.1 v8.0 (07/2018).";
+ }
+
+ identity line-coding-OTL4.4-SC {
+ base line-coding;
+ description
+ "The bit rate/line coding used by optical tributary
+ signals carrying a 100G Optical Transport Unit order 4
+ (OTU4) with Staircase Forward Error Correction (SC FEC)
+ from a group of four Optical Transport Lanes (OTL).";
+ reference
+ "Section 3.2.1 of ITU-T G.698.2 v3.0 (11/2018).";
+ }
+
+ identity line-coding-FOIC1.4-SC {
+ base line-coding;
+ description
+ "The bit rate/line coding used by optical tributary signals
+ carrying a FlexO Interface of order C1 with 4 lanes
+ (FOIC1.1) with Staircase Forward Error Correction
+ (SC FEC).";
+ reference
+ "Section 3.2.1 of ITU-T G.698.2 v3.0 (11/2018).";
+ }
+
+ identity wavelength-assignment {
+ description
+ "Wavelength selection base";
+ reference
+ "RFC 7689: Signaling Extensions for Wavelength Switched
+ Optical Networks";
+ }
+
+ identity first-fit-wavelength-assignment {
+ base wavelength-assignment;
+ description
+ "All the available wavelengths are numbered,
+ and this WA (Wavelength Assignment) method chooses
+ the available wavelength with the lowest index";
+ reference
+ "RFC 7689: Signaling Extensions for Wavelength Switched
+ Optical Networks";
+ }
+
+ identity random-wavelength-assignment {
+ base wavelength-assignment;
+ description
+ "This WA method chooses an available
+ wavelength randomly";
+ reference
+ "RFC 7689: Signaling Extensions for Wavelength Switched
+ Optical Networks";
+ }
+
+ identity least-loaded-wavelength-assignment {
+ base wavelength-assignment;
+ description
+ "This WA method selects the wavelength that
+ has the largest residual capacity on the most loaded
+ link along the route (in multi-fiber networks)";
+ reference
+ "RFC 7689: Signaling Extensions for Wavelength Switched
+ Optical Networks";
+ }
+
+ identity lower-first-wavelength-assignment {
+ base wavelength-assignment;
+ description
+ "Allocate wavelengths in ascending order, beginning from the
+ lowest frequency and progressing toward the highest frequency
+ within the permissible frequency range.";
+ }
+
+ identity upper-first-wavelength-assignment {
+ base wavelength-assignment;
+ description
+ "Allocate wavelengths in decending order, beginning from the
+ highest frequency and progressing toward the lowest frequency
+ within the permissible frequency range.";
+ }
+
+ identity otu-type {
+ description
+ "Base identity from which specific OTU identities are derived";
+ reference
+ "ITU-T G.709: Interfaces for the Optical Transport Network";
+ }
+
+ identity OTU1 {
+ base otu-type;
+ description
+ "OTU1 (2.66 Gb/s)";
+ reference
+ "ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
+ Transport Network (OTN)";
+ }
+
+ identity OTU2 {
+ base otu-type;
+ description
+ "OTU2 (10.70 Gb/s)";
+ reference
+ "ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
+ Transport Network (OTN)";
+ }
+
+ identity OTU3 {
+ base otu-type;
+ description
+ "OTU3 (43.01 Gb/s)";
+ reference
+ "ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
+ Transport Network (OTN)";
+ }
+
+ identity OTU4 {
+ base otu-type;
+ description
+ "OTU4 (111.80 Gb/s)";
+ reference
+ "ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
+ Transport Network (OTN)";
+ }
+
+ identity OTUCn {
+ base otu-type;
+ description
+ "OTUCn (n x 105.25 Gb/s)";
+ reference
+ "ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
+ Transport Network (OTN)";
+ }
+
+ identity type-power-mode {
+ description
+ "power equalization mode used within the
+ OMS and its elements";
+ }
+
+ identity power-spectral-density {
+ base type-power-mode;
+ description
+ "all elements must use power spectral density (W/Hz)";
+ }
+
+ identity carrier-power {
+ base type-power-mode;
+ description
+ "all elements must use power (dBm)";
+ }
+
+ identity operational-mode {
+ description
+ "Base identity to be used when defining organization/vendor
+ specific modes.
+
+ The format of the derived identities has to be defined by the
+ organization which is responsible for defining the
+ corresponding optical interface specification.";
+ reference
+ "Section 2.5.2 of RFC YYYY: A YANG Data Model for Optical
+ Impairment-aware Topology.";
+ }
+// RFC Ed.: replace YYYY with actual RFC number and remove
+// this note after draft-ietf-ccamp-optical-impairment-topology-yang
+// is published as an RFC
+
+/*
+ * Typedefs
+ */
+
+ typedef dwdm-n {
+ type int16;
+ description
+ "The given value 'N' is used to determine the nominal central
+ frequency.
+
+ The nominal central frequency, 'f', is defined by:
+ f = 193100.000 GHz + N x channel spacing (measured in GHz),
+
+ where 193100.000 GHz (193.100000 THz) is the ITU-T 'anchor
+ frequency' for transmission over the DWDM grid, and where
+ 'channel spacing' is defined by the dwdm-ch-spc-type.";
+ reference
+ "RFC6205: Generalized Labels for Lambda-Switch-Capable (LSC)
+ Label Switching Routers,
+
+ ITU-T G.694.1 (10/2020): Spectral grids for WDM applications:
+ DWDM frequency grid";
+ }
+
+ typedef cwdm-n {
+ type int16;
+ description
+ "The given value 'N' is used to determine the nominal central
+ wavelength.
+
+ The nominal central wavelength is defined by:
+ Wavelength = 1471 nm + N x channel spacing (measured in nm)
+
+ where 1471 nm is the conventional 'anchor wavelength' for
+ transmission over the CWDM grid, and where 'channel spacing'
+ is defined by the cwdm-ch-spc-type.";
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC)
+ Label Switching Routers,
+
+ ITU-T G.694.2 (12/2003): Spectral grids for WDM applications:
+ CWDM wavelength grid";
+ }
+
+ typedef flexi-n {
+ type int16;
+ description
+ "The given value 'N' is used to determine the nominal central
+ frequency.
+
+ The nominal central frequency, 'f', is defined by:
+ f = 193100.000 GHz + N x NCFG (measured in GHz),
+
+ where 193100.000 GHz (193.100000 THz) is the ITU-T 'anchor
+ frequency' for transmission over the DWDM grid, and where
+ NCFG is defined by the flexi-ncfg-type, or by the deprecated
+ flexi-ch-spc-type.";
+ reference
+ "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda
+ Switch Capable (LSC) Label Switching Routers,
+
+ ITU-T G.694.1 (10/2020): Spectral grids for WDM applications:
+ DWDM frequency grid";
+ }
+
+ typedef flexi-m {
+ type uint16;
+ description
+ "The given value 'M' is used to determine the slot width.
+
+ A slot width is defined by:
+ slot width = M x SWG (measured in GHz),
+
+ where SWG is defined by the flexi-slot-width-granularity.";
+ reference
+ "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda
+ Switch Capable (LSC) Label Switching Routers,
+
+ ITU-T G.694.1 (10/2020): Spectral grids for WDM applications:
+ DWDM frequency grid";
+ }
+
+ typedef standard-mode {
+ type string;
+ description
+ "Identifies an ITU-T G.698.2 standard application code.
+
+ It MUST be a string with a format that follows the
+ nomenclature defined in section 5.3 of ITU-T G.698.2.";
+ reference
+ "ITU-T G.698.2 (11/2018)";
+ }
+
+ typedef organization-identifier {
+ type string;
+ description
+ "vendor/organization identifier that uses a private mode
+ out of already defined in G.698.2 ITU-T application-code";
+ reference
+ "Section 2.5.2 of RFC YYYY: A YANG Data Model for Optical
+ Impairment-aware Topology.";
+ }
+// RFC Ed.: replace YYYY with actual RFC number and remove
+// this note after draft-ietf-ccamp-optical-impairment-topology-yang
+// is published as an RFC
+
+ typedef operational-mode {
+ type identityref {
+ base operational-mode;
+ }
+ description
+ "Identifies an organization (e.g., vendor) specific mode.
+
+ The format of these identities has to be defined by the
+ organization which is responsible for defining the
+ corresponding optical interface specification.";
+ reference
+ "Section 2.5.2 of RFC YYYY: A YANG Data Model for Optical
+ Impairment-aware Topology.";
+ }
+// RFC Ed.: replace YYYY with actual RFC number and remove
+// this note after draft-ietf-ccamp-optical-impairment-topology-yang
+// is published as an RFC
+
+ typedef frequency-thz {
+ type decimal64 {
+ fraction-digits 9;
+ }
+ units "THz";
+ description
+ "The DWDM frequency in THz, e.g., 193.112500000";
+ }
+
+ typedef frequency-ghz {
+ type decimal64 {
+ fraction-digits 6;
+ }
+ units "GHz";
+ description
+ "The DWDM frequency in GHz, e.g., 193112.500000";
+ }
+
+ typedef snr {
+ type decimal64 {
+ fraction-digits 2;
+ }
+ units "dB@0.1nm";
+ description
+ "(Optical) Signal to Noise Ratio measured over 0.1 nm
+ resolution bandwidth";
+ }
+
+ typedef snr-or-null {
+ type union {
+ type snr;
+ type empty;
+ }
+ description
+ "(Optical) Signal to Noise Ratio measured over 0.1 nm
+ resolution bandwidth, when known, or an empty value when
+ unknown.";
+ }
+
+ typedef fiber-type {
+ type enumeration {
+ enum G.652 {
+ description
+ "G.652 Standard Singlemode Fiber";
+ }
+ enum G.654 {
+ description
+ "G.654 Cutoff Shifted Fiber";
+ }
+ enum G.653 {
+ description "G.653 Dispersion Shifted Fiber";
+ }
+ enum G.655 {
+ description "G.655 Non-Zero Dispersion Shifted Fiber";
+ }
+ enum G.656 {
+ description
+ "G.656 Non-Zero Dispersion for Wideband Optical Transport";
+ }
+ enum G.657 {
+ description
+ "G.657 Bend-Insensitive Fiber";
+ }
+ }
+ description
+ "ITU-T based fiber-types";
+ }
+
+ typedef decimal-2 {
+ type decimal64 {
+ fraction-digits 2;
+ }
+ description
+ "A decimal64 value with two digits.";
+ }
+
+ typedef decimal-2-or-null {
+ type union {
+ type decimal-2;
+ type empty;
+ }
+ description
+ "A decimal64 value with two digits, when the value is known or
+ an empty value when the value is not known.";
+ }
+
+ typedef power-gain {
+ type decimal-2 {
+ range "0..max";
+ }
+ units "dB";
+ description
+ "The gain in dB.";
+ }
+
+ typedef power-gain-or-null {
+ type union {
+ type power-gain;
+ type empty;
+ }
+ description
+ "The gain in dB, when it is known or an empty
+ value when the power gain/loss is not known.";
+ }
+
+ typedef power-loss {
+ type decimal-2 {
+ range "0..max";
+ }
+ units "dB";
+ description
+ "The power attenuation in dB.";
+ }
+
+ typedef power-loss-or-null {
+ type union {
+ type power-loss;
+ type empty;
+ }
+ description
+ "The power attenuation in dB, when it is known or an empty
+ value when the loss is not known.";
+ }
+
+ typedef power-ratio {
+ type decimal-2;
+ units "dB";
+ description
+ "The power difference in dB.";
+ }
+
+ typedef power-ratio-or-null {
+ type union {
+ type power-ratio;
+ type empty;
+ }
+ description
+ "The power difference in dB, when it is known or an empty
+ value when the difference is not known.";
+ }
+
+ typedef power-dbm {
+ type decimal-2;
+ units "dBm";
+ description
+ "The power in dBm.";
+ }
+
+ typedef power-dbm-or-null {
+ type union {
+ type power-dbm;
+ type empty;
+ }
+ description
+ "The power in dBm, when it is known or an empty value when the
+ power is not known.";
+ }
+
+ typedef decimal-5 {
+ type decimal64 {
+ fraction-digits 5;
+ }
+ description
+ "A decimal64 value with five digits.";
+ }
+
+ typedef decimal-5-or-null {
+ type union {
+ type decimal-5;
+ type empty;
+ }
+ description
+ "A decimal64 value with five digits, when the value is known
+ or an empty value when the value is not known.";
+ }
+
+ typedef psd {
+ type decimal64 {
+ fraction-digits 16;
+ }
+ units "W/Hz";
+ description
+ "The power spectral density (PSD).
+
+ Typical value : 3.9 E-14, resolution 0.1nW/MHz.";
+ }
+
+ typedef psd-or-null {
+ type union {
+ type psd;
+ type empty;
+ }
+ description
+ "The power spectral density (PSD), when it is known or an
+ empty value when the PSD is not known.";
+ }
+
+/*
+ * Groupings
+ */
+
+ grouping wdm-label-start-end {
+ description
+ "The WDM label-start or label-end used to specify DWDM and
+ CWDM label range.";
+
+ choice grid-type {
+ description
+ "Label for fixed & flexi-DWDM or CWDM grid";
+ case fixed-dwdm {
+ leaf dwdm-n {
+ when "derived-from-or-self(../../../grid-type,
+ \"wson-grid-dwdm\")" {
+ description
+ "Valid only when grid type is DWDM.";
+ }
+ type l0-types:dwdm-n;
+ description
+ "The given value 'N' is used to determine the
+ nominal central frequency.";
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable
+ (LSC) Label Switching Routers";
+ }
+ }
+ case cwdm {
+ leaf cwdm-n {
+ when "derived-from-or-self(../../../grid-type,
+ \"wson-grid-cwdm\")" {
+ description
+ "Valid only when grid type is CWDM.";
+ }
+ type l0-types:cwdm-n;
+ description
+ "The given value 'N' is used to determine the nominal
+ central wavelength.";
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable
+ (LSC) Label Switching Routers";
+ }
+ }
+ case flexi-grid {
+ uses l0-types:flexi-grid-label-start-end;
+ }
+ }
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC)
+ Label Switching Routers";
+ }
+
+ grouping wdm-label-step {
+ description
+ "Label step information for fixed & flexi-DWDM or CWDM grid";
+ choice l0-grid-type {
+ description
+ "Grid type: DWDM, CWDM, etc.";
+ case fixed-dwdm {
+ leaf wson-dwdm-channel-spacing {
+ when "derived-from-or-self(../../grid-type,
+ \"wson-grid-dwdm\")" {
+ description
+ "Valid only when grid type is DWDM.";
+ }
+ type identityref {
+ base dwdm-ch-spc-type;
+ }
+ description
+ "Label-step is the channel spacing (GHz), e.g., 100.000,
+ 50.000, 25.000, or 12.500 GHz for DWDM.";
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable
+ (LSC) Label Switching Routers";
+ }
+ }
+ case cwdm {
+ leaf wson-cwdm-channel-spacing {
+ when "derived-from-or-self(../../grid-type,
+ \"wson-grid-cwdm\")" {
+ description
+ "Valid only when grid type is CWDM.";
+ }
+ type identityref {
+ base cwdm-ch-spc-type;
+ }
+ description
+ "Label-step is the channel spacing (nm), i.e., 20 nm
+ for CWDM, which is the only value defined for CWDM.";
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable
+ (LSC) Label Switching Routers";
+ }
+ }
+ case flexi-grid {
+ uses flexi-grid-label-step;
+ }
+ }
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC)
+ Label Switching Routers,
+ ITU-T G.694.2 (12/2003): Spectral grids for WDM applications:
+ CWDM wavelength grid,
+ RFC 8363: GMPLS OSPF-TE Extensions in Support of Flexi-Grid
+ Dense Wavelength Division Multiplexing (DWDM) Networks";
+ }
+
+ grouping wdm-label-hop {
+ description
+ "Generic label-hop information for fixed & flexi-DWDM or
+ CWDM grid";
+ choice grid-type {
+ description
+ "Label for DWDM or CWDM grid";
+ case fixed-dwdm {
+ choice fixed-single-or-super-channel {
+ description
+ "single or super channel";
+ case single {
+ leaf dwdm-n {
+ type l0-types:dwdm-n;
+ description
+ "The given value 'N' is used to determine the
+ nominal central frequency.";
+ }
+ }
+ case multi {
+ leaf-list subcarrier-dwdm-n {
+ type l0-types:dwdm-n;
+ min-elements 2;
+ description
+ "The given values 'N' are used to determine the
+ nominal central frequency for each subcarrier
+ channel.";
+ reference
+ "ITU-T G.694.1 (10/2020): Spectral grids for WDM
+ applications: DWDM frequency grid";
+ }
+ }
+ }
+ }
+ case cwdm {
+ leaf cwdm-n {
+ type l0-types:cwdm-n;
+ description
+ "The given value 'N' is used to determine the nominal
+ central wavelength.";
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable
+ (LSC) Label Switching Routers";
+ }
+ }
+ case flexi-grid {
+ uses l0-types:flexi-grid-label-hop;
+ }
+ }
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC)
+ Label Switching Routers";
+ }
+
+ grouping wdm-label-range-info {
+ description
+ "WDM label range related information";
+ uses l0-label-range-info;
+ container flexi-grid {
+ when "derived-from-or-self(../grid-type,
+ \"flexi-grid-dwdm\")" {
+ description
+ "Applicable only when the grid type is flexi-grid-dwdm.";
+ }
+ description
+ "flexi-grid definition";
+ leaf slot-width-granularity {
+ type identityref {
+ base flexi-slot-width-granularity;
+ }
+ default "flexi-swg-12p5ghz";
+ description
+ "Minimum space between slot widths. Default is 12.500
+ GHz.";
+ reference
+ "RFC 7698: Framework and Requirements for GMPLS-Based
+ Control of Flexi-Grid Dense Wavelength Division
+ Multiplexing (DWDM) Networks";
+ }
+ leaf min-slot-width-factor {
+ type uint16 {
+ range "1..max";
+ }
+ default "1";
+ description
+ "A multiplier of the slot width granularity, indicating
+ the minimum slot width supported by an optical port.
+
+ Minimum slot width is calculated by:
+ Minimum slot width (GHz) =
+ min-slot-width-factor * slot-width-granularity.";
+ reference
+ "RFC 8363: GMPLS OSPF-TE Extensions in Support of Flexi-
+ Grid Dense Wavelength Division Multiplexing (DWDM)
+ Networks";
+ }
+ leaf max-slot-width-factor {
+ type uint16 {
+ range "1..max";
+ }
+ must '. >= ../min-slot-width-factor' {
+ error-message
+ "Maximum slot width must be greater than or equal to
+ minimum slot width.";
+ }
+ description
+ "A multiplier of the slot width granularity, indicating
+ the maximum slot width supported by an optical port.
+
+ Maximum slot width is calculated by:
+ Maximum slot width (GHz) =
+ max-slot-width-factor * slot-width-granularity
+
+ If specified, maximum slot width must be greater than or
+ equal to minimum slot width. If not specified, maximum
+ slot width is equal to minimum slot width.";
+ reference
+ "RFC 8363: GMPLS OSPF-TE Extensions in Support of Flexi-
+ Grid Dense Wavelength Division Multiplexing (DWDM)
+ Networks";
+ }
+ }
+ }
+
+ grouping wson-label-start-end {
+ description
+ "The WSON label-start or label-end used to specify WSON label
+ range.";
+ choice grid-type {
+ description
+ "Label for DWDM or CWDM grid";
+ case dwdm {
+ leaf dwdm-n {
+ when "derived-from-or-self(../../../grid-type,
+ \"wson-grid-dwdm\")" {
+ description
+ "Valid only when grid type is DWDM.";
+ }
+ type l0-types:dwdm-n;
+ description
+ "The central frequency of DWDM.";
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable
+ (LSC) Label Switching Routers";
+ }
+ }
+ case cwdm {
+ leaf cwdm-n {
+ when "derived-from-or-self(../../../grid-type,
+ \"wson-grid-cwdm\")" {
+ description
+ "Valid only when grid type is CWDM.";
+ }
+ type l0-types:cwdm-n;
+ description
+ "Channel wavelength computing input.";
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable
+ (LSC) Label Switching Routers";
+ }
+ }
+ }
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC)
+ Label Switching Routers";
+ }
+
+ grouping wson-label-hop {
+ description
+ "Generic label-hop information for WSON";
+ choice grid-type {
+ description
+ "Label for DWDM or CWDM grid";
+ case dwdm {
+ choice single-or-super-channel {
+ description
+ "single or super channel";
+ case single {
+ leaf dwdm-n {
+ type l0-types:dwdm-n;
+ description
+ "The given value 'N' is used to determine the
+ nominal central frequency.";
+ }
+ }
+ case super {
+ leaf-list subcarrier-dwdm-n {
+ type l0-types:dwdm-n;
+ description
+ "The given values 'N' are used to determine the
+ nominal central frequency for each subcarrier
+ channel.";
+ reference
+ "ITU-T G.694.1 (10/2020): Spectral grids for WDM
+ applications: DWDM frequency grid";
+ }
+ }
+ }
+ }
+ case cwdm {
+ leaf cwdm-n {
+ type l0-types:cwdm-n;
+ description
+ "The given value 'N' is used to determine the nominal
+ central wavelength.";
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable
+ (LSC) Label Switching Routers";
+ }
+ }
+ }
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC)
+ Label Switching Routers";
+ }
+
+ grouping l0-label-range-info {
+ description
+ "Information about Layer 0 label range.";
+ leaf grid-type {
+ type identityref {
+ base l0-grid-type;
+ }
+ description
+ "Grid type";
+ }
+ leaf priority {
+ type uint8;
+ description
+ "Priority in Interface Switching Capability Descriptor
+ (ISCD).";
+ reference
+ "RFC 4203: OSPF Extensions in Support of Generalized
+ Multi-Protocol Label Switching (GMPLS)";
+ }
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC)
+ Label Switching Routers";
+ }
+
+ grouping wson-label-step {
+ description
+ "Label step information for WSON";
+ choice l0-grid-type {
+ description
+ "Grid type: DWDM, CWDM, etc.";
+ case dwdm {
+ leaf wson-dwdm-channel-spacing {
+ when "derived-from-or-self(../../grid-type,
+ \"wson-grid-dwdm\")" {
+ description
+ "Valid only when grid type is DWDM.";
+ }
+ type identityref {
+ base dwdm-ch-spc-type;
+ }
+ description
+ "Label-step is the channel spacing (GHz), e.g., 100.000,
+ 50.000, 25.000, or 12.500 GHz for DWDM.";
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable
+ (LSC) Label Switching Routers";
+ }
+ }
+ case cwdm {
+ leaf wson-cwdm-channel-spacing {
+ when "derived-from-or-self(../../grid-type,
+ \"wson-grid-cwdm\")" {
+ description
+ "Valid only when grid type is CWDM.";
+ }
+ type identityref {
+ base cwdm-ch-spc-type;
+ }
+ description
+ "Label-step is the channel spacing (nm), i.e., 20 nm
+ for CWDM, which is the only value defined for CWDM.";
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable
+ (LSC) Label Switching Routers";
+ }
+ }
+ }
+ reference
+ "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC)
+ Label Switching Routers,
+
+ ITU-T G.694.2 (12/2003): Spectral grids for WDM applications:
+ CWDM wavelength grid";
+ }
+
+ grouping flexi-grid-label-start-end {
+ description
+ "The flexi-grid label-start or label-end used to specify
+ flexi-grid label range.";
+ leaf flexi-n {
+ type l0-types:flexi-n;
+ description
+ "The given value 'N' is used to determine the nominal
+ central frequency.
+
+ As described in section 3.1 of RFC 8363, the range of
+ available nominal central frequencies are advertised for
+ m=1, which means that for an available central frequency n,
+ the frequency slot from central frequency n-1 to central
+ frequency n+1 is available.";
+ }
+ reference
+ "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda
+ Switch Capable (LSC) Label Switching Routers,
+
+ RFC 8363: GMPLS OSPF-TE Extensions in Support of Flexi-Grid
+ Dense Wavelength Division Multiplexing (DWDM) Networks";
+ }
+
+ grouping flexi-grid-frequency-slot {
+ description
+ "Flexi-grid frequency slot grouping.";
+ uses flexi-grid-label-start-end;
+ leaf flexi-m {
+ type l0-types:flexi-m;
+ description
+ "The given value 'M' is used to determine the slot width.";
+ }
+ reference
+ "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda
+ Switch Capable (LSC) Label Switching Routers";
+ }
+
+ grouping flexi-grid-label-hop {
+ description
+ "Generic label-hop information for flexi-grid";
+ choice single-or-super-channel {
+ description
+ "single or super channel";
+ case single {
+ uses flexi-grid-frequency-slot;
+ }
+ case super {
+ status deprecated;
+ list subcarrier-flexi-n {
+ key "flexi-n";
+ status deprecated;
+ uses flexi-grid-frequency-slot {
+ status deprecated;
+ }
+ description
+ "List of subcarrier channels for flexi-grid super
+ channel.";
+ }
+ }
+ case multi {
+ container frequency-slots {
+ description
+ "The top level container for the list of frequency
+ slots used for flexi-grid super channel.";
+ list frequency-slot {
+ key "flexi-n";
+ min-elements 2;
+ uses flexi-grid-frequency-slot;
+ description
+ "List of frequency slots used for flexi-grid super
+ channel.";
+ }
+ }
+ }
+ }
+ reference
+ "RFC 8363: GMPLS OSPF-TE Extensions in Support of Flexi-Grid
+ Dense Wavelength Division Multiplexing (DWDM) Networks";
+ }
+
+ grouping flexi-grid-label-range-info {
+ description
+ "Flexi-grid-specific label range related information";
+ uses l0-label-range-info;
+ container flexi-grid {
+ description
+ "flexi-grid definition";
+ leaf slot-width-granularity {
+ type identityref {
+ base flexi-slot-width-granularity;
+ }
+ default "flexi-swg-12p5ghz";
+ description
+ "Minimum space between slot widths. Default is 12.500
+ GHz.";
+ reference
+ "RFC 8363: GMPLS OSPF-TE Extensions in Support of
+ Flexi-Grid Dense Wavelength Division Multiplexing (DWDM)
+ Networks";
+ }
+ leaf min-slot-width-factor {
+ type uint16 {
+ range "1..max";
+ }
+ default "1";
+ description
+ "A multiplier of the slot width granularity, indicating
+ the minimum slot width supported by an optical port.
+
+ Minimum slot width is calculated by:
+ Minimum slot width (GHz) =
+ min-slot-width-factor * slot-width-granularity.";
+ reference
+ "RFC 8363: GMPLS OSPF-TE Extensions in Support of Flexi-
+ Grid Dense Wavelength Division Multiplexing (DWDM)
+ Networks";
+ }
+ leaf max-slot-width-factor {
+ type uint16 {
+ range "1..max";
+ }
+ must '. >= ../min-slot-width-factor' {
+ error-message
+ "Maximum slot width must be greater than or equal to
+ minimum slot width.";
+ }
+ description
+ "A multiplier of the slot width granularity, indicating
+ the maximum slot width supported by an optical port.
+
+ Maximum slot width is calculated by:
+ Maximum slot width (GHz) =
+ max-slot-width-factor * slot-width-granularity
+
+ If specified, maximum slot width must be greater than or
+ equal to minimum slot width. If not specified, maximum
+ slot width is equal to minimum slot width.";
+ reference
+ "RFC 8363: GMPLS OSPF-TE Extensions in Support of Flexi-
+ Grid Dense Wavelength Division Multiplexing (DWDM)
+ Networks";
+ }
+ }
+ }
+
+ grouping flexi-grid-label-step {
+ description
+ "Label step information for flexi-grid";
+ leaf flexi-grid-channel-spacing {
+ type identityref {
+ base flexi-ch-spc-type;
+ }
+ default "flexi-ch-spc-6p25ghz";
+ status deprecated;
+ description
+ "Label-step is the nominal central frequency granularity
+ (GHz), e.g., 6.25 GHz.";
+ reference
+ "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda
+ Switch Capable (LSC) Label Switching Routers";
+ }
+ leaf flexi-ncfg {
+ type identityref {
+ base flexi-ncfg-type;
+ }
+ default "flexi-ncfg-6p25ghz";
+ description
+ "Label-step is the nominal central frequency granularity
+ (GHz), e.g., 6.25 GHz.";
+ reference
+ "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda
+ Switch Capable (LSC) Label Switching Routers";
+ }
+ leaf flexi-n-step {
+ type uint8;
+ description
+ "This attribute defines the multiplier for the supported
+ values of 'N'.
+
+ For example, given a grid with a nominal central frequency
+ granularity of 6.25 GHz, the granularity of the supported
+ values of the nominal central frequency could be 12.5 GHz.
+ In this case, the values of flexi-n should be even and this
+ constraint is reported by setting the flexi-n-step to 2.
+
+ This attribute is also known as central frequency
+ granularity in RFC 8363.";
+ reference
+ "RFC 8363: GMPLS OSPF-TE Extensions in Support of Flexi-Grid
+ Dense Wavelength Division Multiplexing (DWDM) Networks";
+ }
+ }
+
+ grouping transceiver-mode {
+ description
+ "This grouping is intended to be used for reporting the
+ information of a transceiver's mode.
+
+ The attributes for the explicit mode shall be augmented when
+ used with either:
+ - the proper leafrefs, when explicit mode templates are used;
+ or,
+ - the explicit-mode grouping, when explicit mode templates
+ are not used.
+
+ The compatible-modes container shall be augmented with the
+ proper leafrefs when used: see for example the
+ transceiver-capabilities grouping below.";
+ choice mode {
+ mandatory true;
+ description
+ "Indicates whether the transceiver's mode is a standard
+ mode, an organizational mode or an explicit mode.";
+ case G.698.2 {
+ uses standard-mode;
+ uses common-standard-organizational-mode;
+ uses common-all-modes;
+ }
+ case organizational-mode {
+ container organizational-mode {
+ config false;
+ description
+ "The set of attributes for an organizational mode";
+ uses organizational-mode;
+ uses common-standard-organizational-mode;
+ uses common-all-modes;
+ } // container organizational-mode
+ }
+ case explicit-mode {
+ container explicit-mode {
+ config false;
+ description
+ "The set of attributes for an explicit mode";
+ // uses explicit-mode;
+ uses common-all-modes;
+ container compatible-modes {
+ description
+ "Container for all the standard and organizational
+ modes supported by the transceiver's explicit
+ mode.";
+ } // container compatible-modes
+ } // container explicit-mode
+ } // end of case explicit-mode
+ } // end of choice
+ }
+
+ grouping transceiver-capabilities {
+ description
+ "This grouping is intended to be used for reporting the
+ capabilities of a transceiver.
+
+ The attributes for the explicit mode shall be augmented when
+ used with either:
+ - the proper leafrefs, when explicit mode templates are used;
+ or,
+ - the explicit-mode grouping, when explicit mode templates
+ are not used.";
+
+ container supported-modes {
+ presence
+ "When present, it indicates that the modes supported by a
+ transceiver are reported.";
+ description
+ "The top level container for the list supported
+ transceiver's modes.";
+ list supported-mode {
+ key "mode-id";
+ config false;
+ min-elements 1;
+ description "The list of supported transceiver's modes.";
+ leaf mode-id {
+ type string {
+ length "1..255";
+ }
+ description "ID for the supported transceiver's mode.";
+ }
+ uses transceiver-mode {
+ augment "mode/explicit-mode/explicit-mode/"
+ + "compatible-modes" {
+ description
+ "Augments the compatible modes with the proper
+ leafrefs.";
+ leaf-list supported-application-codes {
+ type leafref {
+ path "../../../../supported-mode/mode-id";
+ }
+ must "../../../../"
+ + "supported-mode[mode-id=current()]/"
+ + "standard-mode" {
+ description
+ "The pointer is only for application codes
+ supported by transceiver.";
+ }
+ description
+ "List of pointers to the application codes
+ supported by the transceiver's explicit mode.";
+ }
+ leaf-list supported-organizational-modes {
+ type leafref {
+ path "../../../../supported-mode/mode-id";
+ }
+ must "../../../../"
+ + "supported-mode[mode-id=current()]/"
+ + "organizational-mode" {
+ description
+ "The pointer is only for organizational modes
+ supported by transceiver.";
+ }
+ description
+ "List of pointers to the organizational modes
+ supported by the transceiver's explicit mode.";
+ }
+ }
+ }
+ } // list supported-modes
+ } // container supported-modes
+ } // grouping transceiver-capabilities
+
+ grouping standard-mode {
+ description
+ "ITU-T G.698.2 standard mode that guarantees interoperability.
+ It must be an string with the following format:
+ B-DScW-ytz(v) where all these attributes are conformant
+ to the ITU-T recomendation";
+
+ leaf standard-mode {
+ type standard-mode;
+ config false;
+ description
+ "G.698.2 standard mode";
+ }
+ }
+
+ grouping organizational-mode {
+ description
+ "Transponder operational mode supported by organizations or
+ vendor";
+
+ leaf operational-mode {
+ type operational-mode;
+ config false;
+ description
+ "configured organization- or vendor-specific
+ application identifiers (AI) supported by the transponder";
+ }
+ leaf organization-identifier {
+ type organization-identifier;
+ config false;
+ description
+ "organization identifier that uses organizational
+ mode";
+ }
+ }
+
+ grouping penalty-value {
+ description
+ "A common definition of the penalty value used for describing
+ multiple penalty types (.e.g, CD, PMD, PDL).";
+
+ leaf penalty-value {
+ type union {
+ type decimal64 {
+ fraction-digits 2;
+ range "0..max";
+ }
+ type empty;
+ }
+ units "dB";
+ config false;
+ mandatory true;
+ description
+ "The OSNR penalty associated with the related optical
+ impairment at the receiver, when the value is known or an
+ empty value when the value is not known.";
+ }
+ }
+
+ grouping explicit-mode {
+ description
+ "Attributes capabilities related to explicit transceiver's
+ mode.
+
+ This grouping also contains the list of attributes related to
+ optical impairment limits for explicit mode (min OSNR, max PMD,
+ max CD, max PDL, Q-factor limit, etc.).
+
+ In case of standard and operational mode the attributes are
+ implicit.";
+ leaf line-coding-bitrate {
+ type identityref {
+ base line-coding;
+ }
+ config false;
+ description
+ "Bit rate/line coding of the optical tributary signal.";
+ reference
+ "ITU-T G.698.2 section 7.1.2";
+ }
+ leaf bitrate {
+ type uint16;
+ units "Gbit/sec";
+ config false;
+ description
+ "The gross bitrate (e.g., 100, 200) of the optical tributary
+ signal.";
+ }
+ leaf max-diff-group-delay {
+ type decimal-2;
+ units "ps";
+ config false;
+ description
+ "Maximum Differential group delay of this mode for this
+ lane";
+ }
+ leaf max-chromatic-dispersion {
+ type decimal64 {
+ fraction-digits 2;
+ range "0..max";
+ }
+ units "ps/nm";
+ config false;
+ description
+ "Maximum acceptable accumulated chromatic dispersion (CD)
+ on the receiver";
+ }
+ list cd-penalty {
+ config false;
+ description
+ "Optional penalty associated with a given accumulated
+ chromatic dispersion (CD) value.
+
+ This list of pair cd and penalty values can be used to
+ sample the function penalty = f(CD).";
+ leaf cd-value {
+ type union {
+ type decimal64 {
+ fraction-digits 2;
+ range "0..max";
+ }
+ type empty;
+ }
+ units "ps/nm";
+ config false;
+ mandatory true;
+ description
+ "The Chromatic Dispersion (CD), when the value is known
+ or an empty value when the value is not known.";
+ }
+ uses penalty-value;
+ }
+ leaf max-polarization-mode-dispersion {
+ type decimal64 {
+ fraction-digits 2;
+ range "0..max";
+ }
+ units "ps";
+ config false;
+ description
+ "Maximum acceptable accumulated polarization mode
+ dispersion (PMD) on the receiver";
+ }
+ list pmd-penalty {
+ config false;
+ description
+ "Optional penalty associated with a given accumulated
+ polarization mode dispersion (PMD) value.
+
+ This list of pair pmd and penalty can be used to
+ sample the function penalty = f(PMD).";
+ leaf pmd-value {
+ type union {
+ type decimal64 {
+ fraction-digits 2;
+ range "0..max";
+ }
+ type empty;
+ }
+ units "ps";
+ config false;
+ mandatory true;
+ description
+ "The Polarization Mode Dispersion (PMD), when the value
+ is known or an empty value when the value is not known.";
+ }
+ uses penalty-value;
+ }
+ leaf max-polarization-dependant-loss {
+ type power-loss-or-null;
+ config false;
+ mandatory true;
+ description
+ "Maximum acceptable accumulated accumulated polarization
+ dependent loss (PDL) on the receiver";
+ }
+ list pdl-penalty {
+ config false;
+ description
+ "Optional penalty associated with a given accumulated
+ polarization dependent loss (PDL) value.
+
+ This list of pair pdl and penalty values can be used to
+ sample the function PDL = f(penalty).";
+ leaf pdl-value {
+ type power-loss-or-null;
+ config false;
+ mandatory true;
+ description
+ "Maximum acceptable accumulated polarization dependent
+ loss.";
+ }
+ uses penalty-value;
+ }
+ leaf available-modulation-type {
+ type identityref {
+ base modulation;
+ }
+ config false;
+ description
+ "Modulation type the specific transceiver in the list
+ can support";
+ }
+ leaf min-OSNR {
+ type snr;
+ units "dBm";
+ config false;
+ description
+ "min OSNR measured over 0.1 nm resolution bandwidth:
+ if received OSNR at Rx-power reference point
+ (rx-ref-channel-power) is lower than MIN-OSNR, an increased
+ level of bit-errors post-FEC needs to be expected";
+ }
+ leaf rx-ref-channel-power {
+ type power-dbm;
+ config false;
+ description
+ "The channel power used as reference for defining penalties
+ and min-OSNR";
+ }
+ list rx-channel-power-penalty {
+ config false;
+ description
+ "Optional penalty associated with a received power
+ lower than rx-ref-channel-power.
+ This list of pair power and penalty can be used to
+ sample the function penalty = f(rx-channel-power).";
+ leaf rx-channel-power-value {
+ type power-dbm-or-null;
+ units "dBm";
+ config false;
+ mandatory true;
+ description
+ "The Received Power, when the value is known or an empty
+ value when the value is not known.";
+ }
+ uses penalty-value;
+ }
+ leaf min-Q-factor {
+ type decimal-2;
+ units "dB";
+ config false;
+ description "min Qfactor at FEC threshold";
+ }
+ leaf available-baud-rate {
+ type decimal64 {
+ fraction-digits 1;
+ }
+ units "Bd";
+ config false;
+ description
+ "Baud-rate the specific transceiver in
+ the list can support.
+ Baud-rate is the unit for
+ symbol rate or modulation rate
+ in symbols per second or
+ pulses per second.
+ It is the number of distinct symbol
+ changes (signal events) made to the
+ transmission medium
+ per second in a digitally
+ modulated signal or a line code";
+ }
+ leaf roll-off {
+ type decimal64 {
+ fraction-digits 4;
+ range "0..1";
+ }
+ config false;
+ description
+ "the roll-off factor (beta with values from 0 to 1)
+ identifies how the real signal shape exceed
+ the baud rate. If=0 it is exactly matching
+ the baud rate.If=1 the signal exceeds the
+ 50% of the baud rate at each side.";
+ }
+ leaf min-carrier-spacing {
+ type frequency-ghz;
+ config false;
+ description
+ "This attribute specifies the minimum nominal difference
+ between the carrier frequencies of two homogeneous OTSis
+ (which have the same optical characteristics but the central
+ frequencies) such that if they are placed next to each other
+ the interference due to spectrum overlap between them can be
+ considered negligible.
+
+ In case of heterogeneous OTSi it is up to path computation
+ engine to determine the minimum distance between the carrier
+ frequency of the two adjacent OTSi.";
+ }
+ leaf available-fec-type {
+ type identityref {
+ base fec-type;
+ }
+ config false;
+ description "Available FEC";
+ }
+ leaf fec-code-rate {
+ type decimal64 {
+ fraction-digits 8;
+ range "0..max";
+ }
+ config false;
+ description "FEC-code-rate";
+ }
+ leaf fec-threshold {
+ type decimal64 {
+ fraction-digits 8;
+ range "0..max";
+ }
+ config false;
+ description
+ "Threshold on the BER, for which FEC
+ is able to correct errors";
+ }
+ leaf in-band-osnr {
+ type snr;
+ config false;
+ description
+ "The OSNR defined within the bandwidth of the transmit
+ spectral excursion (i.e., between the nominal central
+ frequency of the channel and the -3.0dB points of the
+ transmitter spectrum furthest from the nominal central
+ frequency) measured at reference point Ss.
+
+ The in-band OSNR is referenced to an optical bandwidth of
+ 0.1nm @ 193.7 THz or 12.5 GHz.";
+ reference
+ "OIF-400ZR-01.0: Implementation Agreement 400ZR";
+ }
+ leaf out-of-band-osnr {
+ type snr;
+ config false;
+ description
+ "The ratio of the peak transmitter power to the integrated
+ power outside the transmitter spectral excursion.
+
+ The spectral resolution of the measurement shall be better
+ than the maximum spectral width of the peak.
+
+ The out-of-band OSNR is referenced to an optical bandwidth
+ of 0.1nm @ 193.7 THz or 12.5 GHz";
+ reference
+ "OIF-400ZR-01.0: Implementation Agreement 400ZR";
+ }
+ leaf tx-polarization-power-difference {
+ type power-ratio;
+ config false;
+ description
+ "The transmitter polarization dependent power difference
+ defined as the power difference between X and Y
+ polarizations";
+ reference
+ "OIF-400ZR-01.0: Implementation Agreement 400ZR";
+ }
+ leaf polarization-skew {
+ type decimal64 {
+ fraction-digits 2;
+ }
+ units "ps";
+ config false;
+ description
+ "The X-Y skew, included as a fixed value in the receiver
+ polarization mode dispersion (PMD) tolerance limits.";
+ reference
+ "OIF-400ZR-01.0: Implementation Agreement 400ZR";
+ }
+ } // grouping explicit-mode
+
+ grouping common-standard-organizational-mode {
+ description
+ "Common attributes used by standard and organizational
+ transceiver's modes.";
+
+ leaf-list line-coding-bitrate {
+ type identityref {
+ base line-coding;
+ }
+ config false;
+ description
+ "The list of the bit rate/line coding of the optical
+ tributary signal supported by the transceiver.
+
+ Reporting this list is optional when the standard or
+ organization mode supports only one bit rate/line coding.";
+ reference
+ "ITU-T G.698.2 section 7.1.2";
+ }
+ } // grouping common-standard-organizational-mode
+
+ grouping transmitter-tuning-range {
+ description
+ "Transmitter tuning range (f_tx-min, f_tx-max)";
+
+ leaf min-central-frequency {
+ type frequency-thz;
+ description
+ "This parameter indicates the minimum frequency for the
+ transmitter tuning range.";
+ }
+ leaf max-central-frequency {
+ type frequency-thz;
+ description
+ "This parameter indicates the maximum frequency for the
+ transmitter tuning range.";
+ }
+
+ leaf transceiver-tunability {
+ type frequency-ghz;
+ description
+ "This parameter indicates the transmitter frequency fine
+ tuning steps e.g 3.125GHz or 0.001GHz.";
+ }
+ } // grouping transmitter-tuning-range
+
+ grouping common-all-modes {
+ description
+ "Common attributes used by all transceiver's modes.";
+
+ uses transmitter-tuning-range;
+ leaf tx-channel-power-min {
+ type power-dbm;
+ config false;
+ description "The minimum output power of this interface";
+ }
+ leaf tx-channel-power-max {
+ type power-dbm;
+ config false;
+ description "The maximum output power of this interface";
+ }
+ leaf rx-channel-power-min {
+ type power-dbm;
+ config false;
+ description "The minimum input power of this interface";
+ }
+ leaf rx-channel-power-max {
+ type power-dbm;
+ config false;
+ description "The maximum input power of this interface";
+ }
+ leaf rx-total-power-max {
+ type power-dbm;
+ config false;
+ description
+ "Maximum rx optical power for all the channels.
+
+ It is applicable only to multi-channel modes.";
+ }
+ } // grouping common-all-modes
+
+ grouping common-transceiver-param {
+ description
+ "The common parameters of an optical transceiver,
+ that supplement the configured mode.";
+
+ uses common-transceiver-configured-param;
+ uses common-transceiver-readonly-param;
+ }
+
+ grouping common-transceiver-configured-param {
+ description
+ "The configured parameters of an optical transceiver,
+ that supplement the configured mode.";
+
+ leaf line-coding-bitrate {
+ type identityref {
+ base line-coding;
+ }
+ description
+ "Bit rate/line coding of the optical tributary signal.
+
+ Support of this attribute is optional when the configured
+ mode supports only one bit rate/line coding.";
+ reference
+ "ITU-T G.698.2 section 7.1.2";
+ }
+ leaf tx-channel-power {
+ type power-dbm-or-null;
+ description
+ "The current channel transmit power, when the value is
+ known or an empty value when the value is not known.
+
+ The empty value MUST NOT be used when this attribute is
+ configured.";
+ }
+ } // grouping for configured transceiver attributes out of mode
+
+ grouping common-transceiver-readonly-param {
+ description
+ "The common read-only parameters of an optical transceiver,
+ that supplement the configured mode.";
+
+ leaf rx-channel-power {
+ type power-dbm-or-null;
+ config false;
+ description
+ "The current channel received power, when the value is
+ known or an empty value when the value is not known.";
+ }
+ leaf rx-total-power {
+ type power-dbm-or-null;
+ config false;
+ description
+ "The current total received power, when the value is known
+ or an empty value when the value is not known.";
+ }
+ } // grouping for read-only transceiver attributes out of mode
+
+ grouping l0-tunnel-attributes {
+ description
+ "Parameters for Layer0 (WSON or Flexi-Grid) Tunnels.";
+
+ leaf wavelength-assignment {
+ type identityref {
+ base wavelength-assignment;
+ }
+ description "Wavelength Allocation Method";
+ }
+ }
+
+ grouping frequency-range {
+ description
+ "This grouping defines the lower and upper bounds of a
+ frequency range (e.g., a band).
+
+ This grouping SHOULD NOT be used to define a frequency slot,
+ which SHOULD be defined using the n and m values instead.";
+ leaf lower-frequency {
+ type frequency-thz;
+ mandatory true;
+ description
+ "The lower frequency boundary of the
+ frequency range.";
+ }
+ leaf upper-frequency {
+ type frequency-thz;
+ must '. > ../lower-frequency' {
+ error-message
+ "The upper frequency must be greater than the lower
+ frequency.";
+ }
+ mandatory true;
+ description
+ "The upper frequency boundary of the
+ frequency range.";
+ }
+ }
+
+ grouping l0-path-constraints {
+ description
+ "Common attribute for Layer 0 path constraints to be used by
+ Layer 0 computation.";
+ leaf gsnr-extra-margin {
+ type snr {
+ range 0..max;
+ }
+ default 0;
+ description
+ "An additional margin to be added to the OSNR-min of the
+ transceiver when checking the estimated received Generalized
+ SNR (GSNR).";
+ }
+ }
+
+ grouping l0-path-properties {
+ description
+ "Common attribute for reporting the Layer 0 computed path
+ properties.";
+ leaf estimated-gsnr {
+ type snr;
+ config false;
+ description
+ "The estimate received GSNR for the computed path.";
+ }
+ leaf estimated-eol-gsnr {
+ type snr;
+ config false;
+ description
+ "The estimate received GSNR for the computed path
+ degraded at the end of life.";
+ }
+ leaf estimated-lowest-gsnr {
+ type snr;
+ config false;
+ description
+ "The estimate lowest received GSNR for the computed path
+ among all possible wavelength channels along the same
+ path.";
+ }
+ }
+}
\ No newline at end of file
diff --git a/gnpy/yang/ext/ietf-network-topology@2018-02-26.yang b/gnpy/yang/ext/ietf-network-topology@2018-02-26.yang
new file mode 100644
index 00000000..1ec944d7
--- /dev/null
+++ b/gnpy/yang/ext/ietf-network-topology@2018-02-26.yang
@@ -0,0 +1,294 @@
+module ietf-network-topology {
+ yang-version 1.1;
+ namespace "urn:ietf:params:xml:ns:yang:ietf-network-topology";
+ prefix nt;
+
+ import ietf-inet-types {
+ prefix inet;
+ reference
+ "RFC 6991: Common YANG Data Types";
+ }
+ import ietf-network {
+ prefix nw;
+ reference
+ "RFC 8345: A YANG Data Model for Network Topologies";
+ }
+
+ organization
+ "IETF I2RS (Interface to the Routing System) Working Group";
+
+ contact
+ "WG Web:
+ WG List:
+
+ Editor: Alexander Clemm
+
+
+ Editor: Jan Medved
+
+
+ Editor: Robert Varga
+
+
+ Editor: Nitin Bahadur
+
+
+ Editor: Hariharan Ananthakrishnan
+
+
+ Editor: Xufeng Liu
+ ";
+
+ description
+ "This module defines a common base model for a network topology,
+ augmenting the base network data model with links to connect
+ nodes, as well as termination points to terminate links
+ on nodes.
+
+ Copyright (c) 2018 IETF Trust and the persons identified as
+ authors of the code. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or
+ without modification, is permitted pursuant to, and subject
+ to the license terms contained in, the Simplified BSD License
+ set forth in Section 4.c of the IETF Trust's Legal Provisions
+ Relating to IETF Documents
+ (https://trustee.ietf.org/license-info).
+
+ This version of this YANG module is part of RFC 8345;
+ see the RFC itself for full legal notices.";
+
+ revision 2018-02-26 {
+ description
+ "Initial revision.";
+ reference
+ "RFC 8345: A YANG Data Model for Network Topologies";
+ }
+
+ typedef link-id {
+ type inet:uri;
+ description
+ "An identifier for a link in a topology. The precise
+ structure of the link-id will be up to the implementation.
+ The identifier SHOULD be chosen such that the same link in a
+ real network topology will always be identified through the
+ same identifier, even if the data model is instantiated in
+ separate datastores. An implementation MAY choose to capture
+ semantics in the identifier -- for example, to indicate the
+ type of link and/or the type of topology of which the link is
+ a part.";
+ }
+
+ typedef tp-id {
+ type inet:uri;
+ description
+ "An identifier for termination points on a node. The precise
+ structure of the tp-id will be up to the implementation.
+ The identifier SHOULD be chosen such that the same termination
+ point in a real network topology will always be identified
+ through the same identifier, even if the data model is
+ instantiated in separate datastores. An implementation MAY
+ choose to capture semantics in the identifier -- for example,
+ to indicate the type of termination point and/or the type of
+ node that contains the termination point.";
+ }
+
+ grouping link-ref {
+ description
+ "This grouping can be used to reference a link in a specific
+ network. Although it is not used in this module, it is
+ defined here for the convenience of augmenting modules.";
+ leaf link-ref {
+ type leafref {
+ path "/nw:networks/nw:network[nw:network-id=current()/../"+
+ "network-ref]/nt:link/nt:link-id";
+ require-instance false;
+ }
+ description
+ "A type for an absolute reference to a link instance.
+ (This type should not be used for relative references.
+ In such a case, a relative path should be used instead.)";
+ }
+ uses nw:network-ref;
+ }
+
+ grouping tp-ref {
+ description
+ "This grouping can be used to reference a termination point
+ in a specific node. Although it is not used in this module,
+ it is defined here for the convenience of augmenting
+ modules.";
+ leaf tp-ref {
+ type leafref {
+ path "/nw:networks/nw:network[nw:network-id=current()/../"+
+ "network-ref]/nw:node[nw:node-id=current()/../"+
+ "node-ref]/nt:termination-point/nt:tp-id";
+ require-instance false;
+ }
+ description
+ "A type for an absolute reference to a termination point.
+ (This type should not be used for relative references.
+ In such a case, a relative path should be used instead.)";
+ }
+ uses nw:node-ref;
+ }
+
+ augment "/nw:networks/nw:network" {
+ description
+ "Add links to the network data model.";
+ list link {
+ key "link-id";
+ description
+ "A network link connects a local (source) node and
+ a remote (destination) node via a set of the respective
+ node's termination points. It is possible to have several
+ links between the same source and destination nodes.
+ Likewise, a link could potentially be re-homed between
+ termination points. Therefore, in order to ensure that we
+ would always know to distinguish between links, every link
+ is identified by a dedicated link identifier. Note that a
+ link models a point-to-point link, not a multipoint link.";
+ leaf link-id {
+ type link-id;
+ description
+ "The identifier of a link in the topology.
+ A link is specific to a topology to which it belongs.";
+ }
+ container source {
+ description
+ "This container holds the logical source of a particular
+ link.";
+ leaf source-node {
+ type leafref {
+ path "../../../nw:node/nw:node-id";
+ require-instance false;
+ }
+ description
+ "Source node identifier. Must be in the same topology.";
+ }
+ leaf source-tp {
+ type leafref {
+ path "../../../nw:node[nw:node-id=current()/../"+
+ "source-node]/termination-point/tp-id";
+ require-instance false;
+ }
+ description
+ "This termination point is located within the source node
+ and terminates the link.";
+ }
+ }
+
+ container destination {
+ description
+ "This container holds the logical destination of a
+ particular link.";
+ leaf dest-node {
+ type leafref {
+ path "../../../nw:node/nw:node-id";
+ require-instance false;
+ }
+ description
+ "Destination node identifier. Must be in the same
+ network.";
+ }
+ leaf dest-tp {
+ type leafref {
+ path "../../../nw:node[nw:node-id=current()/../"+
+ "dest-node]/termination-point/tp-id";
+ require-instance false;
+ }
+ description
+ "This termination point is located within the
+ destination node and terminates the link.";
+ }
+ }
+ list supporting-link {
+ key "network-ref link-ref";
+ description
+ "Identifies the link or links on which this link depends.";
+ leaf network-ref {
+ type leafref {
+ path "../../../nw:supporting-network/nw:network-ref";
+ require-instance false;
+ }
+ description
+ "This leaf identifies in which underlay topology
+ the supporting link is present.";
+ }
+
+ leaf link-ref {
+ type leafref {
+ path "/nw:networks/nw:network[nw:network-id=current()/"+
+ "../network-ref]/link/link-id";
+ require-instance false;
+ }
+ description
+ "This leaf identifies a link that is a part
+ of this link's underlay. Reference loops in which
+ a link identifies itself as its underlay, either
+ directly or transitively, are not allowed.";
+ }
+ }
+ }
+ }
+ augment "/nw:networks/nw:network/nw:node" {
+ description
+ "Augments termination points that terminate links.
+ Termination points can ultimately be mapped to interfaces.";
+ list termination-point {
+ key "tp-id";
+ description
+ "A termination point can terminate a link.
+ Depending on the type of topology, a termination point
+ could, for example, refer to a port or an interface.";
+ leaf tp-id {
+ type tp-id;
+ description
+ "Termination point identifier.";
+ }
+ list supporting-termination-point {
+ key "network-ref node-ref tp-ref";
+ description
+ "This list identifies any termination points on which a
+ given termination point depends or onto which it maps.
+ Those termination points will themselves be contained
+ in a supporting node. This dependency information can be
+ inferred from the dependencies between links. Therefore,
+ this item is not separately configurable. Hence, no
+ corresponding constraint needs to be articulated.
+ The corresponding information is simply provided by the
+ implementing system.";
+
+ leaf network-ref {
+ type leafref {
+ path "../../../nw:supporting-node/nw:network-ref";
+ require-instance false;
+ }
+ description
+ "This leaf identifies in which topology the
+ supporting termination point is present.";
+ }
+ leaf node-ref {
+ type leafref {
+ path "../../../nw:supporting-node/nw:node-ref";
+ require-instance false;
+ }
+ description
+ "This leaf identifies in which node the supporting
+ termination point is present.";
+ }
+ leaf tp-ref {
+ type leafref {
+ path "/nw:networks/nw:network[nw:network-id=current()/"+
+ "../network-ref]/nw:node[nw:node-id=current()/../"+
+ "node-ref]/termination-point/tp-id";
+ require-instance false;
+ }
+ description
+ "Reference to the underlay node (the underlay node must
+ be in a different topology).";
+ }
+ }
+ }
+ }
+}
diff --git a/gnpy/yang/ext/ietf-network@2018-02-26.yang b/gnpy/yang/ext/ietf-network@2018-02-26.yang
new file mode 100644
index 00000000..6a03d7e4
--- /dev/null
+++ b/gnpy/yang/ext/ietf-network@2018-02-26.yang
@@ -0,0 +1,192 @@
+module ietf-network {
+ yang-version 1.1;
+ namespace "urn:ietf:params:xml:ns:yang:ietf-network";
+ prefix nw;
+
+ import ietf-inet-types {
+ prefix inet;
+ reference
+ "RFC 6991: Common YANG Data Types";
+ }
+
+ organization
+ "IETF I2RS (Interface to the Routing System) Working Group";
+
+ contact
+ "WG Web:
+ WG List:
+
+ Editor: Alexander Clemm
+
+
+ Editor: Jan Medved
+
+
+ Editor: Robert Varga
+
+
+ Editor: Nitin Bahadur
+
+
+ Editor: Hariharan Ananthakrishnan
+
+
+ Editor: Xufeng Liu
+ ";
+ description
+ "This module defines a common base data model for a collection
+ of nodes in a network. Node definitions are further used
+ in network topologies and inventories.
+
+ Copyright (c) 2018 IETF Trust and the persons identified as
+ authors of the code. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or
+ without modification, is permitted pursuant to, and subject
+ to the license terms contained in, the Simplified BSD License
+ set forth in Section 4.c of the IETF Trust's Legal Provisions
+ Relating to IETF Documents
+ (https://trustee.ietf.org/license-info).
+
+ This version of this YANG module is part of RFC 8345;
+ see the RFC itself for full legal notices.";
+
+ revision 2018-02-26 {
+ description
+ "Initial revision.";
+ reference
+ "RFC 8345: A YANG Data Model for Network Topologies";
+ }
+
+ typedef node-id {
+ type inet:uri;
+ description
+ "Identifier for a node. The precise structure of the node-id
+ will be up to the implementation. For example, some
+ implementations MAY pick a URI that includes the network-id
+ as part of the path. The identifier SHOULD be chosen
+ such that the same node in a real network topology will
+ always be identified through the same identifier, even if
+ the data model is instantiated in separate datastores. An
+ implementation MAY choose to capture semantics in the
+ identifier -- for example, to indicate the type of node.";
+ }
+
+ typedef network-id {
+ type inet:uri;
+ description
+ "Identifier for a network. The precise structure of the
+ network-id will be up to the implementation. The identifier
+ SHOULD be chosen such that the same network will always be
+ identified through the same identifier, even if the data model
+ is instantiated in separate datastores. An implementation MAY
+ choose to capture semantics in the identifier -- for example,
+ to indicate the type of network.";
+ }
+
+ grouping network-ref {
+ description
+ "Contains the information necessary to reference a network --
+ for example, an underlay network.";
+ leaf network-ref {
+ type leafref {
+ path "/nw:networks/nw:network/nw:network-id";
+ require-instance false;
+ }
+ description
+ "Used to reference a network -- for example, an underlay
+ network.";
+ }
+ }
+
+ grouping node-ref {
+ description
+ "Contains the information necessary to reference a node.";
+ leaf node-ref {
+ type leafref {
+ path "/nw:networks/nw:network[nw:network-id=current()/../"+
+ "network-ref]/nw:node/nw:node-id";
+ require-instance false;
+ }
+ description
+ "Used to reference a node.
+ Nodes are identified relative to the network that
+ contains them.";
+ }
+ uses network-ref;
+ }
+
+ container networks {
+ description
+ "Serves as a top-level container for a list of networks.";
+ list network {
+ key "network-id";
+ description
+ "Describes a network.
+ A network typically contains an inventory of nodes,
+ topological information (augmented through the
+ network-topology data model), and layering information.";
+ leaf network-id {
+ type network-id;
+ description
+ "Identifies a network.";
+ }
+ container network-types {
+ description
+ "Serves as an augmentation target.
+ The network type is indicated through corresponding
+ presence containers augmented into this container.";
+ }
+ list supporting-network {
+ key "network-ref";
+ description
+ "An underlay network, used to represent layered network
+ topologies.";
+ leaf network-ref {
+ type leafref {
+ path "/nw:networks/nw:network/nw:network-id";
+ require-instance false;
+ }
+ description
+ "References the underlay network.";
+ }
+ }
+
+ list node {
+ key "node-id";
+ description
+ "The inventory of nodes of this network.";
+ leaf node-id {
+ type node-id;
+ description
+ "Uniquely identifies a node within the containing
+ network.";
+ }
+ list supporting-node {
+ key "network-ref node-ref";
+ description
+ "Represents another node that is in an underlay network
+ and that supports this node. Used to represent layering
+ structure.";
+ leaf network-ref {
+ type leafref {
+ path "../../../nw:supporting-network/nw:network-ref";
+ require-instance false;
+ }
+ description
+ "References the underlay network of which the
+ underlay node is a part.";
+ }
+ leaf node-ref {
+ type leafref {
+ path "/nw:networks/nw:network/nw:node/nw:node-id";
+ require-instance false;
+ }
+ description
+ "References the underlay node itself.";
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/gnpy/yang/ext/ietf-optical-impairment-topology@2024-05-21.yang b/gnpy/yang/ext/ietf-optical-impairment-topology@2024-05-21.yang
new file mode 100644
index 00000000..3eaf73ed
--- /dev/null
+++ b/gnpy/yang/ext/ietf-optical-impairment-topology@2024-05-21.yang
@@ -0,0 +1,1776 @@
+module ietf-optical-impairment-topology {
+ yang-version 1.1;
+ namespace "urn:ietf:params:xml"
+ + ":ns:yang:ietf-optical-impairment-topology";
+ prefix "oit";
+
+ import ietf-network {
+ prefix "nw";
+ reference
+ "RFC 8345: A YANG Data Model for Network Topologies";
+ }
+
+ import ietf-network-topology {
+ prefix "nt";
+ reference
+ "RFC 8345: A YANG Data Model for Network Topologies";
+ }
+
+ import ietf-te-topology {
+ prefix "tet";
+ reference
+ "RFC 8795: YANG Data Model for Traffic Engineering (TE)
+ Topologies";
+ }
+
+ import ietf-te-types {
+ prefix "te-types";
+ reference
+ "RFC YYYY: Updated Common YANG Data Types for Traffic
+ Engineering";
+ }
+
+ /* Note: The RFC Editor will replace YYYY with the number assigned
+ to the RFC once draft-ietf-teas-rfc8776-update becomes an RFC.*/
+
+ import ietf-layer0-types {
+ prefix "l0-types";
+ reference
+ "RFC ZZZZ: A YANG Data Model for Layer 0 Types";
+ }
+
+ /* Note: The RFC Editor will replace ZZZZ with the number assigned
+ to the RFC once draft-ietf-ccamp-rfc9093-bis becomes an RFC.*/
+
+ organization
+ "IETF CCAMP Working Group";
+
+ contact
+ "WG Web:
+ WG List:
+
+ Editor: Young Lee
+ Editor: Haomian Zheng
+ Editor: Nicola Sambo
+ Editor: Victor Lopez
+ Editor: Gabriele Galimberti
+ Editor: Giovanni Martinelli
+ Editor: Jean-Luc Auge
+ Editor: Le Rouzic Esther
+ Editor: Julien Meuric
+ Editor: Italo Busi
+ Editor: Dieter Beller
+ Editor: Sergio Belotti
+ Editor: Griseri Enrico
+ Editor: Gert Grammel ";
+
+ description
+ "This module contains a collection of YANG definitions for
+ impairment-aware optical networks.
+
+ Copyright (c) 2024 IETF Trust and the persons identified as
+ authors of the code. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or
+ without modification, is permitted pursuant to, and subject
+ to the license terms contained in, the Revised BSD
+ License set forth in Section 4.c of the IETF Trust's Legal
+ Provisions Relating to IETF Documents
+ (https://trustee.ietf.org/license-info).
+
+ This version of this YANG module is part of RFC XXXX; see
+ the RFC itself for full legal notices.";
+
+// RFC Ed.: replace XXXX with actual RFC number and remove
+// this note
+// replace the revision date with the module publication date
+// the format is (year-month-day)
+ revision 2024-05-21 {
+ description
+ "Initial Version";
+ reference
+ "RFC XXXX: A Yang Data Model for Impairment-aware
+ Optical Networks";
+ }
+
+ /*
+ * Identities
+ */
+
+ identity otsi-protection {
+ base te-types:lsp-protection-type;
+ description
+ "Individual OTSi(G) protection LSP protection type.";
+ reference
+ "ITU-T G.873.1 v5.2 (02/2022): Optical transport network:
+ Linear protection";
+ }
+
+ /*
+ * Groupings
+ */
+
+ grouping amplifier-params {
+ description "describes parameters for an amplifier";
+ container amplifier {
+ description
+ "amplifier type, operatonal parameters are described.";
+ leaf type-variety {
+ type string;
+ mandatory true ;
+ description
+ "String identifier of amplifier type referencing
+ a specification in a separate equipment catalog";
+ }
+ container operational {
+ description "amplifier operational parameters";
+ list amplifier-element {
+ key "frequency-range-id stage-order";
+ description
+ "The list of parallel amplifier elements within an
+ amplifier used to amplify different frequency ranges.
+
+ Two elements in the list must not have the same range
+ or overlapping ranges.";
+ leaf frequency-range-id {
+ type uint16;
+ description
+ "The identifier of the frequency range.";
+ }
+ leaf stage-order {
+ type uint8;
+ description
+ "It allows defining for each spectrum badwidth the
+ cascade order of each amplifier-element.";
+ }
+ leaf name {
+ type string;
+ description
+ "The name of the amplifier element as specified in
+ the vendor's specification associated with the
+ type-variety.";
+ }
+ leaf type-variety {
+ type string;
+ description
+ "String identifier of amplifier element type
+ referencing a specification in a separate equipment
+ catalog.
+
+ This attributes applies only when the type-variety of
+ the amplifier is not sufficient to describe the
+ amplifier element type.";
+ }
+ container frequency-range {
+ description
+ "The frequency range amplified by the amplifier
+ element.";
+ uses l0-types:frequency-range;
+ }
+ container power-param {
+ description
+ "The optical power after the out-voa of each amplifier
+ element.";
+ choice power-param {
+ mandatory true;
+ description
+ "Select the mode: channel power or power spectral
+ density (PSD).";
+ case channel-power {
+ leaf nominal-carrier-power {
+ type l0-types:power-dbm-or-null;
+ mandatory true;
+ description
+ "Reference channel power.";
+ }
+ }
+ case power-spectral-density {
+ leaf nominal-psd {
+ type l0-types:psd-or-null;
+ mandatory true;
+ description
+ "Reference power spectral density (PSD).";
+ }
+ }
+ }
+ } // container power-param
+ leaf pdl {
+ type l0-types:power-loss-or-null;
+ description "Polarization Dependent Loss (PDL)";
+ }
+ choice amplifier-element-type {
+ mandatory true;
+ description
+ "Identifies whether the amplifier element is an
+ Optical Amplifier (OA) or a Dynamic Gain Equalizer
+ (DGE).";
+ container optical-amplifier {
+ description
+ "The attributes applicable only to amplifier
+ elements";
+ leaf actual-gain {
+ type l0-types:power-gain-or-null;
+ mandatory true;
+ description
+ "The value of the gain provided by the
+ amplification stage of the optical amplifier.";
+ }
+ leaf in-voa {
+ type l0-types:power-loss-or-null;
+ description
+ "Loss introduced by the Variable Optical Attenuator
+ (VOA) at the input of the amplification stage of
+ the amplifier, if present";
+ }
+ leaf out-voa {
+ type l0-types:power-loss-or-null;
+ description
+ "Loss introduced by the Variable Optical Attenuator
+ (VOA) at the output of the amplification stage of
+ the amplifier, if present.";
+ }
+ leaf tilt-target {
+ type l0-types:decimal-2-or-null;
+ units "dB";
+ mandatory true ;
+ description
+ "The tilt target defined between lower and upper
+ frequency of the amplifier frequency range.";
+ }
+ leaf total-output-power {
+ type l0-types:power-dbm-or-null;
+ mandatory true;
+ description
+ "It represent total output power measured in the
+ range specified by the frequency-range.
+
+ Optical power is especially needed to
+ re-compute/check consistency of span
+ (fiber + concentrated loss) loss value, with
+ respect to loss/gain information on elements.";
+ }
+ leaf raman-direction {
+ type enumeration {
+ enum co-propagating {
+ description
+ "Co-propagating indicates that optical pump
+ light is injected in the same direction to the
+ optical signal that is amplified
+ (forward pump).";
+ }
+ enum counter-propagating {
+ description
+ "Counter-propagating indicates that optical
+ pump light is injected in opposite direction
+ to the optical signal that is amplified
+ (backward pump).";
+ }
+ }
+ description
+ "The direction of injection of the raman pump.";
+ }
+ list raman-pump {
+ key pump-id;
+ description
+ "The list of pumps for the Raman amplifier.";
+ leaf pump-id {
+ type uint16;
+ description
+ "The identifier of a pump within an amplifier
+ element.";
+ }
+ leaf frequency {
+ type l0-types:frequency-thz;
+ description
+ "The raman pump central frequency.";
+ }
+ leaf power {
+ type l0-types:decimal-2-or-null;
+ units "Watts";
+ description
+ "The total pump power considering a depolarized
+ pump at the raman pump central frequency.";
+ }
+ }
+ } // container optical-amplifier
+ container dynamic-gain-equalizer {
+ presence
+ "When present it indicates that the amplifier element
+ is a Dynamic Gain Equalizer (DGE)";
+ description
+ "The attributes applicable only to DEG amplifier
+ elements.";
+ list media-channel {
+ key "flexi-n";
+ description
+ "List of media channels represented as (n,m)";
+
+ uses l0-types:flexi-grid-frequency-slot {
+ refine flexi-m {
+ mandatory true;
+ }
+ }
+
+ leaf delta-power {
+ type l0-types:power-ratio-or-null;
+ description
+ " Deviation from the reference carrier power
+ defined for the OMS.";
+ }
+ } // media channels list
+ } // container dynamic-gain-equalizer
+ } // choice amplifier-element-type
+ } // list amplifier-element
+ } // container operational
+ } // container amplifier
+ } // grouping amplifier-params
+
+ grouping fiber-params {
+ description
+ "String identifier of fiber type referencing a
+ specification in a separate equipment catalog";
+ container fiber {
+ description "fiber characteristics";
+ leaf type-variety {
+ type string ;
+ mandatory true ;
+ description "fiber type";
+ }
+ leaf length {
+ type l0-types:decimal-2-or-null;
+ units km;
+ mandatory true ;
+ description "length of fiber";
+ }
+ leaf loss-coef {
+ type l0-types:decimal-2-or-null;
+ units dB/km;
+ mandatory true ;
+ description "loss coefficient of the fiber";
+ }
+ leaf total-loss {
+ type l0-types:power-loss-or-null;
+ description
+ "The measured total loss of the fiber, which includes
+ all possible losses: fiber loss and conn-in and conn-out
+ losses.
+
+ This attribute is not present when the total loss cannot
+ be measured.";
+ }
+ leaf pmd {
+ type l0-types:decimal-2-or-null;
+ units "ps";
+ description "pmd of the fiber";
+ }
+ leaf conn-in{
+ type l0-types:power-loss-or-null;
+ description "connector-in";
+ }
+ leaf conn-out{
+ type l0-types:power-loss-or-null;
+ description "connector-out";
+ }
+ }
+ }
+
+ grouping roadm-common-path {
+ description
+ "The optical impairments of a ROADM which are common to all
+ its paths (express path, add path or drop path).";
+ leaf roadm-pmd {
+ type union {
+ type decimal64 {
+ fraction-digits 8;
+ range "0..max";
+ }
+ type empty;
+ }
+ units "ps";
+ description
+ "Polarization Mode Dispersion (PMD), when known, or an
+ empty value when unknown.";
+ }
+ leaf roadm-cd {
+ type l0-types:decimal-5-or-null;
+ units "ps/nm";
+ description "Chromatic Dispersion (CD)";
+ }
+ leaf roadm-pdl {
+ type l0-types:power-loss-or-null;
+ description "Polarization Dependent Loss (PDL)";
+ }
+ leaf roadm-inband-crosstalk {
+ type l0-types:decimal-2-or-null;
+ units "dB";
+ description
+ "In-band crosstalk, or coherent crosstalk, can occur in
+ components that can have multiple same wavelength inputs
+ with the inputs either routed to different output ports,
+ or all but one blocked";
+ }
+ leaf roadm-maxloss {
+ type l0-types:power-loss-or-null;
+ description
+ "This is the maximum expected path loss from the
+ ROADM ingress to the ROADM egress
+ assuming no additional path loss is added";
+ }
+ } // grouping roadm-common-path
+
+ grouping roadm-express-path {
+ description
+ "The optical impairments of a ROADM express path.";
+ uses roadm-common-path;
+ } // grouping roadm-express-path
+
+ grouping roadm-add-path {
+ description
+ "The optical impairments of a ROADM add path.";
+ uses roadm-common-path {
+ refine roadm-inband-crosstalk {
+ description
+ "In-band crosstalk, or coherent crosstalk,
+ can occur in components that can have multiple same
+ wavelength inputs,with the inputs either
+ routed to different output ports,
+ or all but one blocked.
+
+ In the case of add path it is the total
+ of the add block + egress WSS crosstalk contributions.";
+ }
+ refine roadm-maxloss {
+ description
+ "This is the maximum expected add path loss from
+ the add/drop port input to the ROADM egress,
+ assuming no additional add path loss is added.
+ This is used to establish the minimum required
+ transponder output power required
+ to hit the ROADM egress target power
+ levels and preventing
+ to hit the WSS attenuation limits.
+ If the add path contains an internal amplifier
+ this loss value should be based
+ on worst case expected amplifier gain due to
+ ripple or gain uncertainty";
+ }
+ }
+ leaf roadm-pmax {
+ type l0-types:power-dbm-or-null;
+ description
+ "This is the maximum (per carrier) power level
+ permitted at the add block input ports,
+ that can be handled by the ROADM node.
+ This may reflect either add amplifier power
+ contraints or WSS adjustment limits.
+ Higher power transponders would need to have
+ their launch power reduced
+ to this value or lower";
+ }
+ leaf roadm-osnr {
+ type l0-types:snr-or-null;
+ description
+ "Optical Signal-to-Noise Ratio (OSNR).
+ If the add path contains the ability to adjust the
+ carrier power levels into an add path amplifier
+ (if present) to a target value,
+ this reflects the OSNR contribution of the
+ add amplifier assuming this target value is obtained.
+ The worst case OSNR based on the input power and
+ NF calculation method, and this value, should be used
+ (if both are defined).";
+ }
+ leaf roadm-noise-figure {
+ type l0-types:decimal-5-or-null;
+ units "dB";
+ description
+ "Noise Figure. If the add path contains an amplifier,
+ this is the noise figure of that amplifier inferred
+ to the add port.
+ This permits add path OSNR calculation based
+ on the input power levels to the add block
+ without knowing the ROADM path losses to
+ the add amplifier.";
+ }
+ } // grouping roadm-add-path
+
+ grouping roadm-drop-path {
+ description
+ "The optical impairments of a ROADM drop path";
+ uses roadm-common-path {
+ refine roadm-inband-crosstalk {
+ description
+ "In-band crosstalk, or coherent crosstalk, can occur in
+ components that can have multiple same wavelength
+ inputs,with the inputs either routed to different
+ output ports,or all but one blocked.
+
+ In the case of drop path it is the total
+ of the ingress
+ to drop e.g. WSS and drop block crosstalk
+ contributions.";
+ }
+ refine roadm-maxloss {
+ description
+ "The net loss from the ROADM input,to the output
+ of the drop block.
+ If ROADM ingress to drop path includes an amplifier,
+ the amplifier gain reduces the net loss.
+ This is before any additional drop path attenuation
+ that may be required
+ due to drop amplifier power contraints.
+ The max value correspond to worst case expected loss,
+ including amplifier gain ripple or uncertainty.
+ It is the maximum output power of the drop
+ amplifier.";
+ }
+ }
+ leaf roadm-minloss {
+ type l0-types:power-loss-or-null;
+ description
+ "The net loss from the ROADM input, to the
+ output of the drop block.
+ If this ROADM ingress to drop path includes
+ an amplifier,the amplifier gain reduces the net loss.
+ This is before any additional drop path attenuation
+ that may be required due to drop amplifier power
+ contraints.
+ The min value correspond to best case expected loss,
+ including amplifier gain ripple or uncertainty.";
+ }
+ leaf roadm-typloss {
+ type l0-types:power-loss-or-null;
+ description
+ "The net loss from the ROADM input,
+ to the output of the drop block.
+ If this ROADM ingress to drop path
+ includes an amplifier,
+ the amplifier gain reduces the net loss.
+ This is before any additional drop path
+ attenuation
+ that may be required due to drop amplifier
+ power contraints.
+ The typ value correspond to typical case
+ expected loss.";
+ }
+ leaf roadm-pmin {
+ type l0-types:power-dbm-or-null;
+ description
+ "If the drop path has additional loss
+ that is added, for example,
+ to hit target power levels into a
+ drop path amplifier, or simply, to reduce the
+ power of a strong carrier
+ (due to ripple,for example),
+ then the use of the ROADM input power levels and
+ the above drop losses is not appropriate.
+ This parameter corresponds to the min per
+ carrier power levels
+ expected at the output of the drop block.
+ A detail example of the comparison using
+ these parameters is
+ detailed in section xxx of the document yyy.";
+ }
+ leaf roadm-pmax {
+ type l0-types:power-dbm-or-null;
+ description
+ "If the drop path has additional loss that is added,
+ for example, to hit target power levels into a
+ drop path amplifier,or simply,to reduce the power
+ of a strong carrier(due to ripple,for example),
+ then the use of the ROADM input power levels and the
+ above drop losses is not appropriate.
+ This parameter corresponds to the best case per
+ carrier power levels expected at the output of the
+ drop block.
+ A detail example of the comparison using
+ these parameters
+ is detailed in section xxx of the document yyy";
+ }
+ leaf roadm-ptyp {
+ type l0-types:power-dbm-or-null;
+ description
+ "If the drop path has additional loss that is added,
+ for example, to hit target power levels into a
+ drop path amplifier,or simply,to reduce the
+ power of a strong carrier(due to ripple,for example),
+ then the use of the ROADM input power levels and
+ the above drop losses is not appropriate.
+ This parameter corresponds to the typical case
+ per carrier power levels expected
+ at the output of the drop block.";
+ }
+ leaf roadm-osnr {
+ type l0-types:snr-or-null;
+ description
+ "Optical Signal-to-Noise Ratio (OSNR).
+ Expected OSNR contribution of the drop path
+ amplifier(if present)
+ for the case of additional drop path loss
+ (before this amplifier)
+ in order to hit a target power level (per carrier).
+ If both, the OSNR based on the ROADM
+ input power level
+ (Pcarrier =
+ Pref+10Log(carrier-baudrate/ref-baud) + delta-power)
+ and the input inferred NF(NF.drop),
+ and this OSNR value, are defined,
+ the minimum value between these two should be used";
+ }
+ leaf roadm-noise-figure {
+ type l0-types:decimal-5-or-null;
+ units "dB";
+ description
+ "Drop path Noise Figure.
+ If the drop path contains an amplifier,
+ this is the noise figure
+ of that amplifier, inferred to the
+ ROADM ingress port.
+ This permits to determine
+ amplifier OSNR contribution
+ without having to specify the
+ ROADM node's losses to that amplifier.
+ This applies for the case of no
+ additional drop path loss,
+ before the amplifier, in order to reduce the power
+ of the carriers to a target value";
+ }
+ } // grouping roadm-drop-path
+
+ grouping concentratedloss-params {
+ description "concentrated loss";
+ container concentratedloss{
+ description "concentrated loss";
+ leaf loss {
+ type l0-types:power-loss-or-null;
+ mandatory true;
+ description
+ "Loss introduced by the concentrated loss element.";
+ }
+ }
+ }
+
+ grouping oms-general-optical-params {
+ description "OMS link optical parameters";
+ leaf generalized-snr {
+ type l0-types:snr;
+ description "generalized snr";
+ }
+ leaf equalization-mode{
+ type identityref {
+ base l0-types:type-power-mode;
+ }
+ description
+ "The equalization mode.
+
+ When not present it indicates that the information about
+ the equalization mode is not reported.
+
+ Reporting this value is needed to support optical
+ impairments applications.";
+ }
+ container power-param {
+ description
+ "Optical channel power or power spectral densitity (PSD)
+ after the ROADM.";
+ leaf nominal-carrier-power {
+ when "derived-from-or-self(../../equalization-mode, "
+ + "'l0-types:carrier-power')";
+ type l0-types:power-dbm-or-null;
+ description
+ "Reference channel power.";
+ }
+ leaf nominal-psd {
+ when "derived-from-or-self(../../equalization-mode, "
+ + "'l0-types:power-spectral-density')";
+ type l0-types:psd-or-null;
+ description
+ " Reference power spectral density (PSD).";
+ }
+ } // container power-param
+ } // grouping oms-general-optical-params
+
+ grouping otsi-group {
+ description "OTSiG definition , representing client
+ digital information stream supported by one or more OTSi";
+
+ list otsi {
+ key "otsi-carrier-id";
+ config false;
+ description
+ "list of OTSi contained in one OTSiG.
+ The list could also be of only one element";
+ leaf otsi-carrier-id {
+ type uint16;
+ description "OTSi carrier-id";
+ }
+ leaf otsi-carrier-frequency {
+ type union {
+ type l0-types:frequency-thz;
+ type empty;
+ }
+ description
+ "OTSi carrier frequency, equivalent to the
+ actual configured transmitter frequency, when known, or
+ an empty value when unknown.";
+ }
+ leaf-list e2e-mc-path-id {
+ type uint16;
+ description
+ "The list of the possible end-to-end Media Channel
+ (e2e-MC) paths associated with the OTSi which have
+ different optical impairments.
+
+ This list is meaningful in case the OTSi can be associated
+ with multiple end-to-end Media Channel (e2e-MC) paths
+ (e.g., when OPS protection is configured).
+
+ The list can be empty when the OTSi has only one
+ e2e-MC path.";
+ }
+ } // OTSi list
+ } // OTSiG grouping
+
+ grouping media-channel-groups {
+ description
+ "media channel groups.
+
+ This grouping is not intended to be reused outside of this
+ module.";
+
+ container media-channel-groups {
+ presence
+ "When present, it indicates that the list media channel
+ groups is reported.";
+ description
+ "The top level container for the list of media channel
+ groups.";
+ list media-channel-group {
+ key "otsi-group-ref";
+ description
+ "The list of media channel groups";
+ leaf otsi-group-ref {
+ type leafref {
+ path "../../../../../../../otsis/" +
+ "otsi-group/otsi-group-id";
+ }
+ description
+ "Reference to the OTSiG to which the OTSis carried by
+ this media channel group belong to.";
+ }
+ list media-channel {
+ // key "flexi-n";
+ key "media-channel-id";
+ unique "flexi-n";
+ description
+ "list of media channels represented as (n,m)";
+ leaf media-channel-id {
+ type int16;
+ description
+ "The identifier of media channel within media channel
+ group.
+
+ It may be equal to the flexi-n attribute, when the
+ flexi-n attribute is present.";
+ }
+ // this grouping add both n.m values
+ uses l0-types:flexi-grid-frequency-slot;
+
+ list otsi-ref {
+ key "otsi-carrier-ref";
+ description
+ "The list of references to the OTSis and their
+ end-to-end Media Channel (e2e-MC) paths within the
+ OTSiG carried by this media channel.";
+ leaf otsi-carrier-ref {
+ type leafref {
+ path "../../../../../../../../../otsis/" +
+ "otsi-group[otsi-group-id=current()" +
+ "/../../../otsi-group-ref]/" +
+ "otsi/otsi-carrier-id" ;
+ }
+ description
+ "Reference to the OTSi within the OTSiG carried
+ by this media channel.";
+ }
+ leaf-list e2e-mc-path-ref {
+ type leafref {
+ path "../../../../../../../../../otsis/" +
+ "otsi-group[otsi-group-id=current()" +
+ "/../../../otsi-group-ref]/" +
+ "otsi[otsi-carrier-id=current()" +
+ "/../otsi-carrier-ref]/e2e-mc-path-id";
+ }
+ description
+ "References to the end-to-end Media Channel (e2e-MC)
+ paths of this OTSi which are routed through this
+ media channel.";
+ }
+ }
+ leaf delta-power {
+ type l0-types:power-ratio-or-null;
+ description
+ " Deviation from the reference carrier power defined
+ for the OMS.";
+ }
+ } // media channels list
+ } // media-channel-groups list
+ }
+ } // media media-channel-groups grouping
+
+ grouping oms-element {
+ description "OMS description";
+ container OMS-elements {
+ presence
+ "When present, it indicates that the list of OMS elements
+ is reported.";
+ description
+ "The top level container for the list of OMS elements.";
+ list OMS-element {
+ key "elt-index";
+ description
+ "defines the spans and the amplifier blocks of
+ the amplified lines";
+ leaf elt-index {
+ type uint16;
+ description
+ "ordered list of Index of OMS element
+ (whether it's a Fiber, an EDFA or a
+ Concentratedloss)";
+ }
+ leaf oms-element-uid {
+ type union {
+ type string;
+ type empty;
+ }
+ description
+ "Unique id of the element, if it exists and it is known.
+
+ When unknown, an empty value is reported.
+
+ When it does not exist, the attribute is not present.";
+ }
+ container reverse-element-ref {
+ description
+ "It contains references to the elements which are
+ associated with this element in the reverse
+ direction.";
+ leaf link-ref {
+ type leafref {
+ path "../../../../../../../../nt:link/nt:link-id";
+ }
+ description
+ "The reference to the OMS link which the OMS elements
+ belongs to.";
+ }
+ leaf-list oms-element-ref {
+ type leafref {
+ path "../../../../../../../../nt:link[nt:link-id="
+ + "current()/../link-ref]/tet:te/"
+ + "tet:te-link-attributes/OMS-attributes/"
+ + "OMS-elements/OMS-element/elt-index";
+ }
+ description
+ "The references to the OMS elements.";
+ }
+ }
+ choice element {
+ mandatory true;
+ description "OMS element type";
+ case amplifier {
+ uses tet:geolocation-container;
+ uses amplifier-params;
+ }
+ case fiber {
+ uses fiber-params;
+ }
+ case concentratedloss {
+ uses concentratedloss-params ;
+ }
+ }
+ }
+ }
+ }
+
+ grouping otsi-ref {
+ description
+ "References to an OTSi.
+
+ This grouping is intended to be reused within the
+ transceiver's list only.";
+ leaf otsi-group-ref {
+ type leafref {
+ path "../../../../../../otsis/otsi-group/" +
+ "otsi-group-id";
+ }
+ description
+ "The OTSi generated by the transceiver's transmitter.";
+ }
+ leaf otsi-ref {
+ type leafref {
+ path "../../../../../../otsis/otsi-group" +
+ "[otsi-group-id=current()/../otsi-group-ref]/otsi/" +
+ "otsi-carrier-id";
+ }
+ description
+ "The OTSi generated by the transceiver's transmitter.";
+ }
+ }
+
+/*
+ * Data nodes
+ */
+
+ augment "/nw:networks/nw:network/nw:network-types"
+ + "/tet:te-topology" {
+ description "optical-impairment topology augmented";
+ container optical-impairment-topology {
+ presence
+ "Indicates an impairment-aware topology of optical networks";
+ description
+ "Container to identify impairment-aware topology type";
+ reference
+ "RFC8345: A YANG Data Model for Network Topologies.";
+ }
+ }
+
+ augment "/nw:networks/nw:network" {
+ when "./nw:network-types/tet:te-topology" +
+ "/oit:optical-impairment-topology" {
+ description
+ "This augment is only valid for Optical Impairment
+ topology.";
+ }
+ description
+ "Network augmentation for optical impairments data.";
+ container otsis {
+ presence
+ "When present, it indicates that OTSi information is
+ reported.";
+ description
+ "The information about the OTSis configured on the WDM-TE
+ link.";
+ list otsi-group {
+ key "otsi-group-id";
+ config false;
+ description
+ "the list of possible OTSiG representing client digital
+ stream";
+ leaf otsi-group-id {
+ type string;
+ description
+ "A network-wide unique identifier of otsi-group element.
+ It could be structured e.g., as an URI or as an UUID.";
+ }
+ uses otsi-group;
+ } // list of OTSiG
+ }
+
+ container templates {
+ config false;
+ description
+ "Templates for set of parameters which can be common to
+ multiple elements.";
+ container roadm-path-impairments {
+ description
+ "The top level container for the list of the set of
+ optical impairments related to ROADM paths.";
+ list roadm-path-impairment {
+ key "roadm-path-impairments-id";
+ description
+ "The list of the set of optical impairments related to
+ ROADM paths.";
+
+ leaf roadm-path-impairments-id {
+ type string;
+ description
+ "The identifier of the set of optical impairments
+ related to a ROADM path.";
+ }
+ choice impairment-type {
+ description "type path impairment";
+ case roadm-express-path {
+ list roadm-express-path {
+ key frequency-range-id;
+ description
+ "The list of optical impairments on a ROADM express
+ path for different frequency ranges.
+
+ Two elements in the list must not have the same
+ range or overlapping ranges.";
+ leaf frequency-range-id {
+ type uint16;
+ description
+ "The identifier of the frequency range.";
+ }
+ container frequency-range {
+ description
+ "The frequency range for which these optical
+ impairments apply.";
+ uses l0-types:frequency-range;
+ }
+ uses roadm-express-path;
+ }
+ }
+ case roadm-add-path {
+ list roadm-add-path {
+ key frequency-range-id;
+ description
+ "The list of optical impairments on a ROADM add
+ path for different frequency ranges.
+
+ Two elements in the list must not have the same
+ range or overlapping ranges.";
+ leaf frequency-range-id {
+ type uint16;
+ description
+ "The identifier of a frequency range.";
+ }
+ container frequency-range {
+ description
+ "The frequency range for which these optical
+ impairments apply.";
+ uses l0-types:frequency-range;
+ }
+ uses roadm-add-path;
+ }
+ }
+ case roadm-drop-path {
+ list roadm-drop-path {
+ key frequency-range-id;
+ description
+ "The list of optical impairments on a ROADM add
+ path for different frequency ranges.
+
+ Two elements in the list must not have the same
+ range or overlapping ranges.";
+ leaf frequency-range-id {
+ type uint16;
+ description
+ "The identifier of a frequency range.";
+ }
+ container frequency-range {
+ description
+ "The frequency range for which these optical
+ impairments apply.";
+ uses l0-types:frequency-range;
+ }
+ uses roadm-drop-path;
+ }
+ }
+ }
+ } // list roadm-path-impairments
+ } // container roadm-path-impairments
+ container explicit-transceiver-modes {
+ description
+ "The top level container for the list of the
+ transceivers' explicit modes.";
+ list explicit-transceiver-mode {
+ key explicit-transceiver-mode-id;
+ description
+ "The list of the transceivers' explicit modes.";
+ leaf explicit-transceiver-mode-id {
+ type string;
+ description
+ "The identifier of the transceivers' explicit mode.";
+ }
+ uses l0-types:explicit-mode;
+ } // list explicit-transceiver-mode
+ } // container explicit-transceiver-modes
+ } // container templates
+ } // augment network
+
+ augment "/nw:networks/nw:network/nw:node" {
+ when "../nw:network-types/tet:te-topology" +
+ "/oit:optical-impairment-topology" {
+ description
+ "This augment is only valid for Optical Impairment.";
+ }
+ description
+ "Node augmentation for optical impairments data.";
+ container transponders {
+ presence
+ "If present, it indicates that the list of transponders is
+ reported.";
+ description
+ "The top level container for the list of transponders.";
+ list transponder {
+ key "transponder-id";
+ config false;
+ description "The list of transponders.";
+ leaf transponder-id {
+ type uint32;
+ description "transponder identifier";
+ }
+ leaf termination-type-capabilities {
+ type enumeration {
+ enum tunnel-only {
+ description
+ "The transponder can only be used in an Optical
+ Tunnel termination configuration.";
+ }
+ enum 3r-only {
+ description
+ "The transponder can only be used in a 3R
+ configuration.";
+ }
+ enum 3r-or-tunnel {
+ description
+ "The transponder can be configure to be used either
+ in an Optical Tunnel termination configuration or in
+ a 3R configuration.";
+ }
+ }
+ description
+ "Describes whether the transponder can be used in an
+ Optical Tunnel termination configuration or in a 3R
+ configuration (or both).";
+ }
+ leaf supported-3r-mode {
+ when '(../termination-type-capabilities = "3r-only") or
+ (../termination-type-capabilities = "3r-or-tunnel")'
+ {
+ description
+ "Applies only when the transponder supports 3R
+ configuration.";
+ }
+ type enumeration {
+ enum unidir {
+ description
+ "Unidirectional 3R configuration.";
+ }
+ enum bidir {
+ description
+ "Bidirectional 3R configuration.";
+ }
+ }
+ description
+ "Describes the supported 3R configuration type.";
+ }
+ list transceiver {
+ key "transceiver-id";
+ config false;
+ min-elements 1;
+ description "list of transceiver related to a transponder";
+ leaf transceiver-id {
+ type uint32;
+ description "transceiver identifier";
+ }
+ uses l0-types:transceiver-capabilities {
+ augment "supported-modes/supported-mode/mode/"
+ + "explicit-mode/explicit-mode" {
+ description
+ "Augment the explicit-mode container with the
+ proper leafref.";
+ leaf explicit-transceiver-mode-ref {
+ type leafref {
+ path "../../../../../../../../oit:templates"
+ + "/oit:explicit-transceiver-modes"
+ + "/oit:explicit-transceiver-mode"
+ + "/oit:explicit-transceiver-mode-id";
+ }
+ description
+ "The refernce to the explicit transceiver
+ mode template.";
+ }
+ }
+ }
+ leaf configured-mode {
+ type union {
+ type empty;
+ type leafref {
+ path "../supported-modes/supported-mode/mode-id";
+ }
+ }
+ description
+ "Reference to the configured mode for transceiver
+ compatibility approach.
+
+ The empty value is used to report that no mode has
+ been configured and there is no default mode.
+
+ When not present, the configured-mode is not reported
+ by the server.";
+ }
+ uses l0-types:common-transceiver-param;
+ container outgoing-otsi {
+ when "../../../../../otsis" {
+ description
+ "It applies only when the OTSi information is
+ reported.";
+ }
+ description
+ "The OTSi generated by the transceiver's transmitter.";
+ uses otsi-ref;
+ }
+ container incoming-otsi {
+ when "../../../../../otsis" {
+ description
+ "It applies only when the OTSi information is
+ reported.";
+ }
+ description
+ "The OTSi received by the transceiver's received.";
+ uses otsi-ref;
+ }
+ leaf configured-termination-type {
+ type enumeration {
+ enum unused-transceiver {
+ description
+ "The transcevier is not used.";
+ }
+ enum tunnel-termination {
+ description
+ "The transceiver is currently used in an Optical
+ Tunnel termination configuration.";
+ }
+ enum 3r-regeneration {
+ description
+ "The transceiver is currently used in a 3R
+ configuration.";
+ }
+ }
+ description
+ "Describes whether the current configuration of the
+ transceiver is used in an Optical Tunnel termination
+ configuration or in a 3R configuration.
+
+ If empty, it means that the information about the
+ configured-termination-type is not reported.";
+ }
+ } // end of list of transceiver
+ } // end list of transponder
+ }
+ container regen-groups {
+ presence
+ "When present, it indicates that the list of 3R groups
+ is reported.";
+ description
+ "The top level container for the list of 3R groups.";
+ list regen-group {
+ key "group-id";
+ config false;
+ description
+ "The list of 3R groups.
+
+ Any 3R group represent a group of transponder in which an
+ a an electrical connectivity is either in place or could
+ be dynamically provided, to associated transponders used
+ for 3R regeneration.";
+ leaf group-id {
+ type uint32;
+ description
+ "Group identifier used an index to access elements in the
+ list of 3R groups.";
+ }
+ leaf regen-metric {
+ type uint32;
+ description
+ "The cost permits choice among different group of
+ transponders during path computation";
+ }
+ leaf-list transponder-ref {
+ type leafref {
+ path "../../../transponders/transponder/transponder-id";
+ }
+ description
+ "The list of transponder belonging to this 3R group.";
+ }
+ } // end 3R-group
+ }
+ }
+
+ augment "/nw:networks/nw:network/nt:link/tet:te"
+ + "/tet:te-link-attributes" {
+ when "../../../nw:network-types/tet:te-topology/"
+ + "oit:optical-impairment-topology" {
+ description
+ "This augment is only valid for Optical Impairment
+ topology.";
+ }
+ description "Optical Link augmentation for impairment data.";
+ container OMS-attributes {
+ config false;
+ description "OMS attributes";
+ uses oms-general-optical-params;
+ uses media-channel-groups;
+ uses oms-element;
+ }
+ }
+
+ augment "/nw:networks/nw:network/nw:node/tet:te"
+ + "/tet:tunnel-termination-point" {
+ when "../../../nw:network-types/tet:te-topology/"
+ + "oit:optical-impairment-topology" {
+ description
+ "This augment is only valid for Optical Impairment
+ topology.";
+ }
+ description
+ "Tunnel termination point augmentation for impairment data.";
+
+ list ttp-transceiver {
+ when "../../../transponders" {
+ description
+ "It applies only when the list of transponders is
+ reported.";
+ }
+ key "transponder-ref transceiver-ref";
+ config false;
+ min-elements 1;
+ description
+ "The list of the transceivers used by the TTP.";
+ leaf transponder-ref {
+ type leafref {
+ path "../../../../transponders/transponder/transponder-id";
+ }
+ description
+ "The reference to the transponder hosting the transceiver
+ of the TTP.";
+ }
+ leaf transceiver-ref {
+ type leafref {
+ path "../../../../transponders/transponder" +
+ "[transponder-id=current()/../transponder-ref]/" +
+ "transceiver/transceiver-id";
+ }
+ description
+ "The reference to the transceiver of the TTP.";
+ }
+ } // list of transceivers
+ } // end of augment
+
+ // Should this leaf be moved to te-topology?
+ augment "/nw:networks/nw:network/nw:node/nt:termination-point" {
+ when "../../nw:network-types/tet:te-topology/"
+ + "oit:optical-impairment-topology" {
+ description
+ "This augment is only valid for Optical Impairment
+ topology";
+ }
+ description
+ "Augment LTP";
+ leaf protection-type {
+ type identityref {
+ base te-types:lsp-protection-type;
+ }
+ description
+ "The protection type that this LTP is capable of.
+
+ When not present it indicates that the information about
+ the protection type is not reported.";
+ }
+ }
+
+ augment "/nw:networks/nw:network/nw:node/nt:termination-point"
+ + "/tet:te" {
+ when "../../../nw:network-types/tet:te-topology/"
+ + "oit:optical-impairment-topology" {
+ description
+ "This augment is only valid for Optical Impairment
+ topology";
+ }
+ description
+ "Augment TE attributes of an LTP";
+
+ leaf inter-layer-sequence-number {
+ type uint32;
+ description
+ "The inter-layer-sequence-number (ILSN) is used to report
+ additional connectivity constraints between a client layer
+ Link Termination Point (LTP), such as a muxponder port, and
+ the server layer Tunnel Termination Point (TTP).
+
+ A client service cannot be setup between two client layer
+ LTPs which report different values of the ILSN.
+
+ This attribute is not reported when there are no additional
+ connectivity constraints.
+
+ Therefore, a client service can be setup when at least one
+ of the two client layer LTPs does not report any ILSN or
+ both client layer LTPs report the same ILSN value and the
+ corresponding server layer TTPs have at least one common
+ server-layer switching capability and at least one common
+ client-layer switching capability.";
+ }
+ }
+
+ augment "/nw:networks/nw:network/nw:node/tet:te"
+ + "/tet:te-node-attributes" {
+ when "../../../nw:network-types/tet:te-topology"
+ + "/oit:optical-impairment-topology" {
+ description
+ "This augment is only valid for Optical Impairment
+ topology";
+ }
+ description
+ "node attributes augmentantion for optical-impairment ROADM
+ node";
+
+ } // augmentation for optical-impairment ROADM
+
+ augment "/nw:networks/nw:network/nw:node/tet:te/"
+ + "tet:information-source-entry/tet:connectivity-matrices"{
+ when "../../../../nw:network-types/tet:te-topology/"
+ + "oit:optical-impairment-topology" {
+ description
+ "This augment is only valid for Optical Impairment
+ topology ";
+ }
+ description
+ "Augment default TE node connectivity matrix information
+ source.";
+
+ leaf roadm-path-impairments {
+ type leafref {
+ path "../../../../../oit:templates"
+ + "/oit:roadm-path-impairments/oit:roadm-path-impairment"
+ + "/oit:roadm-path-impairments-id";
+ }
+ config false;
+ description
+ "Pointer to the list set of ROADM optical impairments";
+ }
+ } // augmentation connectivity-matrices information-source
+
+ augment "/nw:networks/nw:network/nw:node/tet:te/"
+ + "tet:information-source-entry/tet:connectivity-matrices/"
+ + "tet:connectivity-matrix" {
+ when "../../../../../nw:network-types/tet:te-topology/"
+ + "oit:optical-impairment-topology" {
+ description
+ "This augment is only valid for Optical Impairment
+ topology ";
+ }
+ description
+ "Augment TE node connectivity matrix entry information
+ source.";
+ leaf roadm-path-impairments {
+ type leafref {
+ path "../../../../../../oit:templates"
+ + "/oit:roadm-path-impairments/oit:roadm-path-impairment"
+ + "/oit:roadm-path-impairments-id";
+ }
+ config false;
+ description
+ "Pointer to the list set of ROADM optical impairments";
+ }
+ } // augmentation connectivity-matrix information-source
+
+ augment "/nw:networks/nw:network/nw:node/tet:te/"
+ + "tet:te-node-attributes/tet:connectivity-matrices" {
+ when "../../../../nw:network-types/tet:te-topology/"
+ + "oit:optical-impairment-topology" {
+ description
+ "This augment is only valid for Optical Impairment
+ topology ";
+ }
+ description
+ "Augment default TE node connectivity matrix.";
+ leaf roadm-path-impairments {
+ type leafref {
+ path "../../../../../oit:templates"
+ + "/oit:roadm-path-impairments/oit:roadm-path-impairment"
+ + "/oit:roadm-path-impairments-id";
+ }
+ config false; /*the identifier in the list */
+ /*"roadm-path-impairments" of ROADM optical impairment*/
+ /*is read-only as the rest of attributes*/
+ description "pointer to the list set of ROADM optical
+ impairments";
+ }
+ } // augmentation connectivity-matrices
+
+ augment "/nw:networks/nw:network/nw:node/tet:te/"
+ + "tet:te-node-attributes/"
+ + "tet:connectivity-matrices/tet:connectivity-matrix" {
+ when "../../../../../nw:network-types/tet:te-topology/"
+ + "oit:optical-impairment-topology" {
+ description
+ "This augment is only valid for
+ Optical Impairment topology ";
+ }
+ description
+ "Augment TE node connectivity matrix entry.";
+ leaf roadm-path-impairments {
+ type leafref {
+ path "../../../../../../oit:templates"
+ + "/oit:roadm-path-impairments/oit:roadm-path-impairment"
+ + "/oit:roadm-path-impairments-id";
+ }
+ config false;
+ description "pointer to the list set of ROADM optical
+ impairments";
+ }
+ } // augmentation connectivity-matrix
+
+ augment "/nw:networks/nw:network/nw:node/tet:te/"
+ + "tet:te-node-attributes/tet:connectivity-matrices/"
+ + "tet:connectivity-matrix/tet:from" {
+ when "../../../../../../nw:network-types/tet:te-topology/"
+ + "oit:optical-impairment-topology" {
+ description
+ "This augment is only valid for
+ Optical Impairment topology ";
+ }
+ description
+ "Augment the attributes for the 'from' LTP for the TE node
+ connectivity matrix entry.";
+ list additional-ltp {
+ when "derived-from-or-self(../../../../../../"
+ + "nt:termination-point"
+ + "[nt:tp-id=current()/../../tet:to/tet:tp-ref]/"
+ + "oit:protection-type,"
+ + "'oit:otsi-protection')" {
+ description
+ "This list applies only when the 'to' LTP for this
+ connectivity matrix entry supports individual OTSi(G)
+ protection.";
+ }
+ key "ltp-ref";
+ config false;
+ description
+ "The restricted list of the potential secondary LTPs that
+ can be selected when the 'from' LTP of this connectivity
+ matrix entry is selected as a working LTP.
+
+ If this list is empty, all the other LTPs that can reach
+ the 'to' LTP of this connectivity matrix entry can be
+ selected as secondary LTPs.";
+ leaf ltp-ref {
+ type leafref {
+ path "../../../../../../../nt:termination-point/nt:tp-id";
+ }
+ description
+ "The reference to the potential secondary LTP that can be
+ selected when the 'from' LTP of this connectivity matrix
+ entry is selected as a working LTP";
+ }
+ leaf roadm-path-impairments {
+ type leafref {
+ path "../../../../../../../../oit:templates"
+ + "/oit:roadm-path-impairments/oit:roadm-path-impairment"
+ + "/oit:roadm-path-impairments-id";
+ }
+ description
+ "Pointer to ROADM optical impairments of the ROADM path
+ between this secondary 'from' LTP and the 'to' LTP of
+ this connectivity matrix entry.";
+ }
+ }
+ } // augmentation connectivity-matrix from
+
+ augment "/nw:networks/nw:network/nw:node/tet:te/"
+ + "tet:te-node-attributes/tet:connectivity-matrices/"
+ + "tet:connectivity-matrix/tet:to" {
+ when "../../../../../../nw:network-types/tet:te-topology/"
+ + "oit:optical-impairment-topology" {
+ description
+ "This augment is only valid for
+ Optical Impairment topology ";
+ }
+ description
+ "Augment the attributes for the 'to' LTP for the TE node
+ connectivity matrix entry.";
+ list additional-ltp {
+ when "derived-from-or-self(../../../../../../"
+ + "nt:termination-point"
+ + "[nt:tp-id=current()/../../tet:from/tet:tp-ref]/"
+ + "oit:protection-type,"
+ + "'oit:otsi-protection')" {
+ description
+ "This list applies only when the 'from' LTP for this
+ connectivity matrix entry supports individual OTSi(G)
+ protection.";
+ }
+ key "ltp-ref";
+ config false;
+ description
+ "The restricted list of the potential secondary LTPs that
+ can be selected when the 'to' LTP of this connectivity
+ matrix entry is selected as a working LTP.
+
+ If this list is empty, all the other LTPs that can be
+ reached from the 'from' LTP of this connectivity matrix
+ entry can be selected as secondary LTPs.";
+ leaf ltp-ref {
+ type leafref {
+ path "../../../../../../../nt:termination-point/nt:tp-id";
+ }
+ description
+ "The reference to the potential secondary LTP that can be
+ selected when the 'to' LTP of this connectivity matrix
+ entry is selected as a working LTP";
+ }
+ leaf roadm-path-impairments {
+ type leafref {
+ path "../../../../../../../../oit:templates"
+ + "/oit:roadm-path-impairments/oit:roadm-path-impairment"
+ + "/oit:roadm-path-impairments-id";
+ }
+ description
+ "Pointer to ROADM optical impairments of the ROADM path
+ between the 'from' LTP of this connectivity matrix entry
+ and this secondary LTP.";
+ }
+ }
+ } // augmentation connectivity-matrix to
+
+ augment "/nw:networks/nw:network/nw:node/tet:te/"
+ + "tet:tunnel-termination-point/"
+ + "tet:local-link-connectivities" {
+ when "../../../../nw:network-types/tet:te-topology/"
+ + "oit:optical-impairment-topology" {
+ description
+ "This augment is only valid for Optical Impairment topology ";
+ }
+ description
+ "Augment default TTP LLC.";
+ leaf add-path-impairments {
+ type leafref {
+ path "../../../../../oit:templates"
+ + "/oit:roadm-path-impairments/oit:roadm-path-impairment"
+ + "/oit:roadm-path-impairments-id" ;
+ }
+ config false;
+ description "pointer to the list set of ROADM optical
+ impairments";
+ }
+ leaf drop-path-impairments {
+ type leafref {
+ path "../../../../../oit:templates"
+ + "/oit:roadm-path-impairments/oit:roadm-path-impairment"
+ + "/oit:roadm-path-impairments-id" ;
+ }
+ config false;
+ description "pointer to the list set of ROADM
+ optical impairments";
+ }
+ } // augmentation local-link-connectivities
+
+ augment "/nw:networks/nw:network/nw:node/tet:te/"
+ + "tet:tunnel-termination-point/"
+ + "tet:local-link-connectivities/"
+ + "tet:local-link-connectivity" {
+ when "../../../../../nw:network-types/tet:te-topology/"
+ + "oit:optical-impairment-topology" {
+ description
+ "This augment is only valid for
+ Optical Impairment topology ";
+ }
+ description
+ "Augment TTP LLC entry.";
+ leaf add-path-impairments {
+ type leafref {
+ path "../../../../../../oit:templates"
+ + "/oit:roadm-path-impairments/oit:roadm-path-impairment"
+ + "/oit:roadm-path-impairments-id" ;
+ }
+ config false;
+ description "pointer to the list set of ROADM optical
+ impairments";
+ }
+ leaf drop-path-impairments {
+ type leafref {
+ path "../../../../../../oit:templates"
+ + "/oit:roadm-path-impairments/oit:roadm-path-impairment"
+ + "/oit:roadm-path-impairments-id" ;
+ }
+ config false;
+ description "pointer to the list set of ROADM optical
+ impairments";
+ }
+ list llc-transceiver {
+ key "ttp-transponder-ref ttp-transceiver-ref";
+ config false;
+ description
+ "The list of transceivers having a LLC different from the
+ default LLC.";
+ leaf ttp-transponder-ref {
+ type leafref {
+ path "../../../../ttp-transceiver/transponder-ref";
+ }
+ description
+ "The reference to the transponder hosting the transceiver
+ of this LLCL entry.";
+ }
+ leaf ttp-transceiver-ref {
+ type leafref {
+ path "../../../../ttp-transceiver/transceiver-ref";
+ }
+ description
+ "The reference to the the transceiver of this LLCL entry.";
+ }
+ leaf is-allowed {
+ type boolean;
+ description
+ "'true' - connectivity from this transceiver is allowed;
+ 'false' - connectivity from this transceiver is
+ disallowed.";
+ }
+ leaf add-path-impairments {
+ type leafref {
+ path "../../../../../../../oit:templates"
+ + "/oit:roadm-path-impairments/oit:roadm-path-impairment"
+ + "/oit:roadm-path-impairments-id" ;
+ }
+ description "pointer to the list set of ROADM optical
+ impairments";
+ }
+ leaf drop-path-impairments {
+ type leafref {
+ path "../../../../../../../oit:templates"
+ + "/oit:roadm-path-impairments/oit:roadm-path-impairment"
+ + "/oit:roadm-path-impairments-id" ;
+ }
+ description "pointer to the list set of ROADM
+ optical impairments";
+ }
+ }
+ list additional-ltp {
+ when "derived-from-or-self(../../../tet:protection-type,"
+ + "'oit:otsi-protection')" {
+ description
+ "This list applies only to TTPs that support individual
+ OTSi(G) protection.";
+ }
+ key "ltp-ref";
+ config false;
+ description
+ "The restricted list of the potential secondary LTPs that
+ can be selected when the LTP associated with this LLCP
+ entry is selected as a working LTP.
+
+ If this list is empty, all the other LTPs that can be
+ reached by this TTP can be selected as secondary LTPs.";
+ leaf ltp-ref {
+ type leafref {
+ path "../../../../../../nt:termination-point/nt:tp-id";
+ }
+ description
+ "The reference to potential secondary LTP that can be
+ selected when the LTP associated with this LLCP entry is
+ selected as a working LTP";
+ }
+ leaf add-path-impairments {
+ type leafref {
+ path "../../../../../../../oit:templates"
+ + "/oit:roadm-path-impairments/oit:roadm-path-impairment"
+ + "/oit:roadm-path-impairments-id" ;
+ }
+ description "pointer to the list set of ROADM optical
+ impairments";
+ }
+ leaf drop-path-impairments {
+ type leafref {
+ path "../../../../../../../oit:templates"
+ + "/oit:roadm-path-impairments/oit:roadm-path-impairment"
+ + "/oit:roadm-path-impairments-id" ;
+ }
+ description "pointer to the list set of ROADM
+ optical impairments";
+ }
+ }
+ } // augmentation local-link-connectivity
+}
\ No newline at end of file
diff --git a/gnpy/yang/ext/ietf-routing-types@2017-12-04.yang b/gnpy/yang/ext/ietf-routing-types@2017-12-04.yang
new file mode 100644
index 00000000..24319c15
--- /dev/null
+++ b/gnpy/yang/ext/ietf-routing-types@2017-12-04.yang
@@ -0,0 +1,771 @@
+module ietf-routing-types {
+ namespace "urn:ietf:params:xml:ns:yang:ietf-routing-types";
+ prefix rt-types;
+
+ import ietf-yang-types {
+ prefix yang;
+ }
+ import ietf-inet-types {
+ prefix inet;
+ }
+
+ organization
+ "IETF RTGWG - Routing Area Working Group";
+ contact
+ "WG Web:
+ WG List:
+
+ Editors: Xufeng Liu
+
+ Yingzhen Qu
+
+ Acee Lindem
+
+ Christian Hopps
+
+ Lou Berger
+ ";
+
+ description
+ "This module contains a collection of YANG data types
+ considered generally useful for routing protocols.
+
+ Copyright (c) 2017 IETF Trust and the persons
+ identified as authors of the code. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or
+ without modification, is permitted pursuant to, and subject
+ to the license terms contained in, the Simplified BSD License
+ set forth in Section 4.c of the IETF Trust's Legal Provisions
+ Relating to IETF Documents
+ (https://trustee.ietf.org/license-info).
+
+ This version of this YANG module is part of RFC 8294; see
+ the RFC itself for full legal notices.";
+ revision 2017-12-04 {
+ description "Initial revision.";
+ reference
+ "RFC 8294: Common YANG Data Types for the Routing Area.
+ Section 3.";
+ }
+
+ /*** Identities related to MPLS/GMPLS ***/
+
+ identity mpls-label-special-purpose-value {
+ description
+ "Base identity for deriving identities describing
+ special-purpose Multiprotocol Label Switching (MPLS) label
+ values.";
+ reference
+ "RFC 7274: Allocating and Retiring Special-Purpose MPLS
+ Labels.";
+ }
+
+ identity ipv4-explicit-null-label {
+ base mpls-label-special-purpose-value;
+ description
+ "This identity represents the IPv4 Explicit NULL Label.";
+ reference
+ "RFC 3032: MPLS Label Stack Encoding. Section 2.1.";
+ }
+
+ identity router-alert-label {
+ base mpls-label-special-purpose-value;
+ description
+ "This identity represents the Router Alert Label.";
+ reference
+ "RFC 3032: MPLS Label Stack Encoding. Section 2.1.";
+ }
+
+ identity ipv6-explicit-null-label {
+ base mpls-label-special-purpose-value;
+ description
+ "This identity represents the IPv6 Explicit NULL Label.";
+ reference
+ "RFC 3032: MPLS Label Stack Encoding. Section 2.1.";
+ }
+
+ identity implicit-null-label {
+ base mpls-label-special-purpose-value;
+ description
+ "This identity represents the Implicit NULL Label.";
+ reference
+ "RFC 3032: MPLS Label Stack Encoding. Section 2.1.";
+ }
+
+ identity entropy-label-indicator {
+ base mpls-label-special-purpose-value;
+ description
+ "This identity represents the Entropy Label Indicator.";
+ reference
+ "RFC 6790: The Use of Entropy Labels in MPLS Forwarding.
+ Sections 3 and 10.1.";
+ }
+
+ identity gal-label {
+ base mpls-label-special-purpose-value;
+ description
+ "This identity represents the Generic Associated Channel
+ (G-ACh) Label (GAL).";
+ reference
+ "RFC 5586: MPLS Generic Associated Channel.
+ Sections 4 and 10.";
+ }
+
+ identity oam-alert-label {
+ base mpls-label-special-purpose-value;
+ description
+ "This identity represents the OAM Alert Label.";
+ reference
+ "RFC 3429: Assignment of the 'OAM Alert Label' for
+ Multiprotocol Label Switching Architecture (MPLS)
+ Operation and Maintenance (OAM) Functions.
+ Sections 3 and 6.";
+ }
+
+ identity extension-label {
+ base mpls-label-special-purpose-value;
+ description
+ "This identity represents the Extension Label.";
+ reference
+ "RFC 7274: Allocating and Retiring Special-Purpose MPLS
+ Labels. Sections 3.1 and 5.";
+ }
+
+ /*** Collection of types related to routing ***/
+
+ typedef router-id {
+ type yang:dotted-quad;
+ description
+ "A 32-bit number in the dotted-quad format assigned to each
+ router. This number uniquely identifies the router within
+ an Autonomous System.";
+ }
+
+ /*** Collection of types related to VPNs ***/
+
+ typedef route-target {
+ type string {
+ pattern
+ '(0:(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|'
+ + '6[0-4][0-9]{3}|'
+ + '[1-5][0-9]{4}|[1-9][0-9]{0,3}|0):(429496729[0-5]|'
+ + '42949672[0-8][0-9]|'
+ + '4294967[01][0-9]{2}|429496[0-6][0-9]{3}|'
+ + '42949[0-5][0-9]{4}|'
+ + '4294[0-8][0-9]{5}|429[0-3][0-9]{6}|'
+ + '42[0-8][0-9]{7}|4[01][0-9]{8}|'
+ + '[1-3][0-9]{9}|[1-9][0-9]{0,8}|0))|'
+ + '(1:((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|'
+ + '25[0-5])\.){3}([0-9]|[1-9][0-9]|'
+ + '1[0-9]{2}|2[0-4][0-9]|25[0-5])):(6553[0-5]|'
+ + '655[0-2][0-9]|'
+ + '65[0-4][0-9]{2}|6[0-4][0-9]{3}|'
+ + '[1-5][0-9]{4}|[1-9][0-9]{0,3}|0))|'
+ + '(2:(429496729[0-5]|42949672[0-8][0-9]|'
+ + '4294967[01][0-9]{2}|'
+ + '429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|'
+ + '4294[0-8][0-9]{5}|'
+ + '429[0-3][0-9]{6}|42[0-8][0-9]{7}|4[01][0-9]{8}|'
+ + '[1-3][0-9]{9}|[1-9][0-9]{0,8}|0):'
+ + '(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|'
+ + '6[0-4][0-9]{3}|'
+ + '[1-5][0-9]{4}|[1-9][0-9]{0,3}|0))|'
+ + '(6(:[a-fA-F0-9]{2}){6})|'
+ + '(([3-57-9a-fA-F]|[1-9a-fA-F][0-9a-fA-F]{1,3}):'
+ + '[0-9a-fA-F]{1,12})';
+ }
+
+ description
+ "A Route Target is an 8-octet BGP extended community
+ initially identifying a set of sites in a BGP VPN
+ (RFC 4364). However, it has since taken on a more general
+ role in BGP route filtering. A Route Target consists of two
+ or three fields: a 2-octet Type field, an administrator
+ field, and, optionally, an assigned number field.
+
+ According to the data formats for types 0, 1, 2, and 6 as
+ defined in RFC 4360, RFC 5668, and RFC 7432, the encoding
+ pattern is defined as:
+
+ 0:2-octet-asn:4-octet-number
+ 1:4-octet-ipv4addr:2-octet-number
+ 2:4-octet-asn:2-octet-number
+ 6:6-octet-mac-address
+
+ Additionally, a generic pattern is defined for future
+ Route Target types:
+
+ 2-octet-other-hex-number:6-octet-hex-number
+
+ Some valid examples are 0:100:100, 1:1.1.1.1:100,
+ 2:1234567890:203, and 6:26:00:08:92:78:00.";
+ reference
+ "RFC 4360: BGP Extended Communities Attribute.
+ RFC 4364: BGP/MPLS IP Virtual Private Networks (VPNs).
+ RFC 5668: 4-Octet AS Specific BGP Extended Community.
+ RFC 7432: BGP MPLS-Based Ethernet VPN.";
+ }
+
+ typedef ipv6-route-target {
+ type string {
+ pattern
+ '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
+ + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
+ + '(((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\.){3}'
+ + '(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])))'
+ + ':'
+ + '(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|'
+ + '6[0-4][0-9]{3}|'
+ + '[1-5][0-9]{4}|[1-9][0-9]{0,3}|0)';
+ pattern '((([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
+ + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?))'
+ + ':'
+ + '(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|'
+ + '6[0-4][0-9]{3}|'
+ + '[1-5][0-9]{4}|[1-9][0-9]{0,3}|0)';
+ }
+ description
+ "An IPv6 Route Target is a 20-octet BGP IPv6 Address
+ Specific Extended Community serving the same function
+ as a standard 8-octet Route Target, except that it only
+ allows an IPv6 address as the global administrator.
+ The format is .
+
+ Two valid examples are 2001:db8::1:6544 and
+ 2001:db8::5eb1:791:6b37:17958.";
+ reference
+ "RFC 5701: IPv6 Address Specific BGP Extended Community
+ Attribute.";
+ }
+
+ typedef route-target-type {
+ type enumeration {
+ enum import {
+ value 0;
+ description
+ "The Route Target applies to route import.";
+ }
+ enum export {
+ value 1;
+ description
+ "The Route Target applies to route export.";
+ }
+
+ enum both {
+ value 2;
+ description
+ "The Route Target applies to both route import and
+ route export.";
+ }
+ }
+ description
+ "Indicates the role a Route Target takes in route filtering.";
+ reference
+ "RFC 4364: BGP/MPLS IP Virtual Private Networks (VPNs).";
+ }
+
+ typedef route-distinguisher {
+ type string {
+ pattern
+ '(0:(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|'
+ + '6[0-4][0-9]{3}|'
+ + '[1-5][0-9]{4}|[1-9][0-9]{0,3}|0):(429496729[0-5]|'
+ + '42949672[0-8][0-9]|'
+ + '4294967[01][0-9]{2}|429496[0-6][0-9]{3}|'
+ + '42949[0-5][0-9]{4}|'
+ + '4294[0-8][0-9]{5}|429[0-3][0-9]{6}|'
+ + '42[0-8][0-9]{7}|4[01][0-9]{8}|'
+ + '[1-3][0-9]{9}|[1-9][0-9]{0,8}|0))|'
+ + '(1:((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|'
+ + '25[0-5])\.){3}([0-9]|[1-9][0-9]|'
+ + '1[0-9]{2}|2[0-4][0-9]|25[0-5])):(6553[0-5]|'
+ + '655[0-2][0-9]|'
+ + '65[0-4][0-9]{2}|6[0-4][0-9]{3}|'
+ + '[1-5][0-9]{4}|[1-9][0-9]{0,3}|0))|'
+ + '(2:(429496729[0-5]|42949672[0-8][0-9]|'
+ + '4294967[01][0-9]{2}|'
+ + '429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|'
+ + '4294[0-8][0-9]{5}|'
+ + '429[0-3][0-9]{6}|42[0-8][0-9]{7}|4[01][0-9]{8}|'
+ + '[1-3][0-9]{9}|[1-9][0-9]{0,8}|0):'
+ + '(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|'
+ + '6[0-4][0-9]{3}|'
+ + '[1-5][0-9]{4}|[1-9][0-9]{0,3}|0))|'
+ + '(6(:[a-fA-F0-9]{2}){6})|'
+ + '(([3-57-9a-fA-F]|[1-9a-fA-F][0-9a-fA-F]{1,3}):'
+ + '[0-9a-fA-F]{1,12})';
+ }
+
+ description
+ "A Route Distinguisher is an 8-octet value used to
+ distinguish routes from different BGP VPNs (RFC 4364).
+ A Route Distinguisher will have the same format as a
+ Route Target as per RFC 4360 and will consist of
+ two or three fields: a 2-octet Type field, an administrator
+ field, and, optionally, an assigned number field.
+
+ According to the data formats for types 0, 1, 2, and 6 as
+ defined in RFC 4360, RFC 5668, and RFC 7432, the encoding
+ pattern is defined as:
+
+ 0:2-octet-asn:4-octet-number
+ 1:4-octet-ipv4addr:2-octet-number
+ 2:4-octet-asn:2-octet-number
+ 6:6-octet-mac-address
+
+ Additionally, a generic pattern is defined for future
+ route discriminator types:
+
+ 2-octet-other-hex-number:6-octet-hex-number
+
+ Some valid examples are 0:100:100, 1:1.1.1.1:100,
+ 2:1234567890:203, and 6:26:00:08:92:78:00.";
+ reference
+ "RFC 4360: BGP Extended Communities Attribute.
+ RFC 4364: BGP/MPLS IP Virtual Private Networks (VPNs).
+ RFC 5668: 4-Octet AS Specific BGP Extended Community.
+ RFC 7432: BGP MPLS-Based Ethernet VPN.";
+ }
+
+ typedef route-origin {
+ type string {
+ pattern
+ '(0:(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|'
+ + '6[0-4][0-9]{3}|'
+ + '[1-5][0-9]{4}|[1-9][0-9]{0,3}|0):(429496729[0-5]|'
+ + '42949672[0-8][0-9]|'
+ + '4294967[01][0-9]{2}|429496[0-6][0-9]{3}|'
+ + '42949[0-5][0-9]{4}|'
+ + '4294[0-8][0-9]{5}|429[0-3][0-9]{6}|'
+ + '42[0-8][0-9]{7}|4[01][0-9]{8}|'
+ + '[1-3][0-9]{9}|[1-9][0-9]{0,8}|0))|'
+ + '(1:((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|'
+ + '25[0-5])\.){3}([0-9]|[1-9][0-9]|'
+ + '1[0-9]{2}|2[0-4][0-9]|25[0-5])):(6553[0-5]|'
+ + '655[0-2][0-9]|'
+ + '65[0-4][0-9]{2}|6[0-4][0-9]{3}|'
+ + '[1-5][0-9]{4}|[1-9][0-9]{0,3}|0))|'
+ + '(2:(429496729[0-5]|42949672[0-8][0-9]|'
+ + '4294967[01][0-9]{2}|'
+ + '429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|'
+ + '4294[0-8][0-9]{5}|'
+ + '429[0-3][0-9]{6}|42[0-8][0-9]{7}|4[01][0-9]{8}|'
+ + '[1-3][0-9]{9}|[1-9][0-9]{0,8}|0):'
+ + '(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|'
+ + '6[0-4][0-9]{3}|'
+ + '[1-5][0-9]{4}|[1-9][0-9]{0,3}|0))|'
+ + '(6(:[a-fA-F0-9]{2}){6})|'
+ + '(([3-57-9a-fA-F]|[1-9a-fA-F][0-9a-fA-F]{1,3}):'
+ + '[0-9a-fA-F]{1,12})';
+ }
+ description
+ "A Route Origin is an 8-octet BGP extended community
+ identifying the set of sites where the BGP route
+ originated (RFC 4364). A Route Origin will have the same
+ format as a Route Target as per RFC 4360 and will consist
+ of two or three fields: a 2-octet Type field, an
+ administrator field, and, optionally, an assigned number
+ field.
+
+ According to the data formats for types 0, 1, 2, and 6 as
+ defined in RFC 4360, RFC 5668, and RFC 7432, the encoding
+ pattern is defined as:
+
+ 0:2-octet-asn:4-octet-number
+ 1:4-octet-ipv4addr:2-octet-number
+ 2:4-octet-asn:2-octet-number
+ 6:6-octet-mac-address
+ Additionally, a generic pattern is defined for future
+ Route Origin types:
+
+ 2-octet-other-hex-number:6-octet-hex-number
+
+ Some valid examples are 0:100:100, 1:1.1.1.1:100,
+ 2:1234567890:203, and 6:26:00:08:92:78:00.";
+ reference
+ "RFC 4360: BGP Extended Communities Attribute.
+ RFC 4364: BGP/MPLS IP Virtual Private Networks (VPNs).
+ RFC 5668: 4-Octet AS Specific BGP Extended Community.
+ RFC 7432: BGP MPLS-Based Ethernet VPN.";
+ }
+
+ typedef ipv6-route-origin {
+ type string {
+ pattern
+ '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
+ + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
+ + '(((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\.){3}'
+ + '(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])))'
+ + ':'
+ + '(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|'
+ + '6[0-4][0-9]{3}|'
+ + '[1-5][0-9]{4}|[1-9][0-9]{0,3}|0)';
+ pattern '((([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
+ + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?))'
+ + ':'
+ + '(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|'
+ + '6[0-4][0-9]{3}|'
+ + '[1-5][0-9]{4}|[1-9][0-9]{0,3}|0)';
+ }
+ description
+ "An IPv6 Route Origin is a 20-octet BGP IPv6 Address
+ Specific Extended Community serving the same function
+ as a standard 8-octet route, except that it only allows
+ an IPv6 address as the global administrator. The format
+ is .
+
+ Two valid examples are 2001:db8::1:6544 and
+ 2001:db8::5eb1:791:6b37:17958.";
+ reference
+ "RFC 5701: IPv6 Address Specific BGP Extended Community
+ Attribute.";
+ }
+
+ /*** Collection of types common to multicast ***/
+
+ typedef ipv4-multicast-group-address {
+ type inet:ipv4-address {
+ pattern '(2((2[4-9])|(3[0-9]))\.).*';
+ }
+ description
+ "This type represents an IPv4 multicast group address,
+ which is in the range of 224.0.0.0 to 239.255.255.255.";
+ reference
+ "RFC 1112: Host Extensions for IP Multicasting.";
+ }
+
+ typedef ipv6-multicast-group-address {
+ type inet:ipv6-address {
+ pattern '(([fF]{2}[0-9a-fA-F]{2}):).*';
+ }
+ description
+ "This type represents an IPv6 multicast group address,
+ which is in the range of ff00::/8.";
+ reference
+ "RFC 4291: IP Version 6 Addressing Architecture. Section 2.7.
+ RFC 7346: IPv6 Multicast Address Scopes.";
+ }
+
+ typedef ip-multicast-group-address {
+ type union {
+ type ipv4-multicast-group-address;
+ type ipv6-multicast-group-address;
+ }
+ description
+ "This type represents a version-neutral IP multicast group
+ address. The format of the textual representation implies
+ the IP version.";
+ }
+
+ typedef ipv4-multicast-source-address {
+ type union {
+ type enumeration {
+ enum * {
+ description
+ "Any source address.";
+ }
+ }
+ type inet:ipv4-address;
+ }
+ description
+ "Multicast source IPv4 address type.";
+ }
+
+ typedef ipv6-multicast-source-address {
+ type union {
+ type enumeration {
+ enum * {
+ description
+ "Any source address.";
+ }
+ }
+ type inet:ipv6-address;
+ }
+ description
+ "Multicast source IPv6 address type.";
+ }
+
+ /*** Collection of types common to protocols ***/
+
+ typedef bandwidth-ieee-float32 {
+ type string {
+ pattern
+ '0[xX](0((\.0?)?[pP](\+)?0?|(\.0?))|'
+ + '1(\.([0-9a-fA-F]{0,5}[02468aAcCeE]?)?)?[pP](\+)?(12[0-7]|'
+ + '1[01][0-9]|0?[0-9]?[0-9])?)';
+ }
+ description
+ "Bandwidth in IEEE 754 floating-point 32-bit binary format:
+ (-1)**(S) * 2**(Exponent-127) * (1 + Fraction),
+ where Exponent uses 8 bits and Fraction uses 23 bits.
+ The units are octets per second.
+ The encoding format is the external hexadecimal-significant
+ character sequences specified in IEEE 754 and ISO/IEC C99.
+ The format is restricted to be normalized, non-negative, and
+ non-fraction: 0x1.hhhhhhp{+}d, 0X1.HHHHHHP{+}D, or 0x0p0,
+ where 'h' and 'H' are hexadecimal digits and 'd' and 'D' are
+ integers in the range of [0..127].
+ When six hexadecimal digits are used for 'hhhhhh' or
+ 'HHHHHH', the least significant digit must be an even
+ number. 'x' and 'X' indicate hexadecimal; 'p' and 'P'
+ indicate a power of two. Some examples are 0x0p0, 0x1p10,
+ and 0x1.abcde2p+20.";
+ reference
+ "IEEE Std 754-2008: IEEE Standard for Floating-Point
+ Arithmetic.
+ ISO/IEC C99: Information technology - Programming
+ Languages - C.";
+ }
+
+ typedef link-access-type {
+ type enumeration {
+ enum broadcast {
+ description
+ "Specify broadcast multi-access network.";
+ }
+ enum non-broadcast-multiaccess {
+ description
+ "Specify Non-Broadcast Multi-Access (NBMA) network.";
+ }
+ enum point-to-multipoint {
+ description
+ "Specify point-to-multipoint network.";
+ }
+ enum point-to-point {
+ description
+ "Specify point-to-point network.";
+ }
+ }
+ description
+ "Link access type.";
+ }
+
+ typedef timer-multiplier {
+ type uint8;
+ description
+ "The number of timer value intervals that should be
+ interpreted as a failure.";
+ }
+
+ typedef timer-value-seconds16 {
+ type union {
+ type uint16 {
+ range "1..65535";
+ }
+ type enumeration {
+ enum infinity {
+ description
+ "The timer is set to infinity.";
+ }
+ enum not-set {
+ description
+ "The timer is not set.";
+ }
+ }
+ }
+ units "seconds";
+ description
+ "Timer value type, in seconds (16-bit range).";
+ }
+
+ typedef timer-value-seconds32 {
+ type union {
+ type uint32 {
+ range "1..4294967295";
+ }
+ type enumeration {
+ enum infinity {
+ description
+ "The timer is set to infinity.";
+ }
+ enum not-set {
+ description
+ "The timer is not set.";
+ }
+ }
+ }
+ units "seconds";
+ description
+ "Timer value type, in seconds (32-bit range).";
+ }
+
+ typedef timer-value-milliseconds {
+ type union {
+ type uint32 {
+ range "1..4294967295";
+ }
+ type enumeration {
+ enum infinity {
+ description
+ "The timer is set to infinity.";
+ }
+ enum not-set {
+ description
+ "The timer is not set.";
+ }
+ }
+ }
+ units "milliseconds";
+ description
+ "Timer value type, in milliseconds.";
+ }
+
+ typedef percentage {
+ type uint8 {
+ range "0..100";
+ }
+ description
+ "Integer indicating a percentage value.";
+ }
+
+ typedef timeticks64 {
+ type uint64;
+ description
+ "This type is based on the timeticks type defined in
+ RFC 6991, but with 64-bit width. It represents the time,
+ modulo 2^64, in hundredths of a second between two epochs.";
+ reference
+ "RFC 6991: Common YANG Data Types.";
+ }
+
+ typedef uint24 {
+ type uint32 {
+ range "0..16777215";
+ }
+ description
+ "24-bit unsigned integer.";
+ }
+
+ /*** Collection of types related to MPLS/GMPLS ***/
+
+ typedef generalized-label {
+ type binary;
+ description
+ "Generalized Label. Nodes sending and receiving the
+ Generalized Label are aware of the link-specific
+ label context and type.";
+ reference
+ "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS)
+ Signaling Functional Description. Section 3.2.";
+ }
+
+ typedef mpls-label-special-purpose {
+ type identityref {
+ base mpls-label-special-purpose-value;
+ }
+ description
+ "This type represents the special-purpose MPLS label values.";
+ reference
+ "RFC 3032: MPLS Label Stack Encoding.
+ RFC 7274: Allocating and Retiring Special-Purpose MPLS
+ Labels.";
+ }
+
+ typedef mpls-label-general-use {
+ type uint32 {
+ range "16..1048575";
+ }
+ description
+ "The 20-bit label value in an MPLS label stack as specified
+ in RFC 3032. This label value does not include the
+ encodings of Traffic Class and TTL (Time to Live).
+ The label range specified by this type is for general use,
+ with special-purpose MPLS label values excluded.";
+ reference
+ "RFC 3032: MPLS Label Stack Encoding.";
+ }
+
+ typedef mpls-label {
+ type union {
+ type mpls-label-special-purpose;
+ type mpls-label-general-use;
+ }
+ description
+ "The 20-bit label value in an MPLS label stack as specified
+ in RFC 3032. This label value does not include the
+ encodings of Traffic Class and TTL.";
+ reference
+ "RFC 3032: MPLS Label Stack Encoding.";
+ }
+
+ /*** Groupings **/
+
+ grouping mpls-label-stack {
+ description
+ "This grouping specifies an MPLS label stack. The label
+ stack is encoded as a list of label stack entries. The
+ list key is an identifier that indicates the relative
+ ordering of each entry, with the lowest-value identifier
+ corresponding to the top of the label stack.";
+ container mpls-label-stack {
+ description
+ "Container for a list of MPLS label stack entries.";
+ list entry {
+ key "id";
+ description
+ "List of MPLS label stack entries.";
+ leaf id {
+ type uint8;
+ description
+ "Identifies the entry in a sequence of MPLS label
+ stack entries. An entry with a smaller identifier
+ value precedes an entry with a larger identifier
+ value in the label stack. The value of this ID has
+ no semantic meaning other than relative ordering
+ and referencing the entry.";
+ }
+ leaf label {
+ type rt-types:mpls-label;
+ description
+ "Label value.";
+ }
+
+ leaf ttl {
+ type uint8;
+ description
+ "Time to Live (TTL).";
+ reference
+ "RFC 3032: MPLS Label Stack Encoding.";
+ }
+ leaf traffic-class {
+ type uint8 {
+ range "0..7";
+ }
+ description
+ "Traffic Class (TC).";
+ reference
+ "RFC 5462: Multiprotocol Label Switching (MPLS) Label
+ Stack Entry: 'EXP' Field Renamed to 'Traffic Class'
+ Field.";
+ }
+ }
+ }
+ }
+
+ grouping vpn-route-targets {
+ description
+ "A grouping that specifies Route Target import-export rules
+ used in BGP-enabled VPNs.";
+ reference
+ "RFC 4364: BGP/MPLS IP Virtual Private Networks (VPNs).
+ RFC 4664: Framework for Layer 2 Virtual Private Networks
+ (L2VPNs).";
+ list vpn-target {
+ key "route-target";
+ description
+ "List of Route Targets.";
+ leaf route-target {
+ type rt-types:route-target;
+ description
+ "Route Target value.";
+ }
+ leaf route-target-type {
+ type rt-types:route-target-type;
+ mandatory true;
+ description
+ "Import/export type of the Route Target.";
+ }
+ }
+ }
+}
diff --git a/gnpy/yang/ext/ietf-te-topology@2020-08-06.yang b/gnpy/yang/ext/ietf-te-topology@2020-08-06.yang
new file mode 100644
index 00000000..6d76a77b
--- /dev/null
+++ b/gnpy/yang/ext/ietf-te-topology@2020-08-06.yang
@@ -0,0 +1,1952 @@
+module ietf-te-topology {
+ yang-version 1.1;
+ namespace "urn:ietf:params:xml:ns:yang:ietf-te-topology";
+ prefix tet;
+
+ import ietf-yang-types {
+ prefix yang;
+ reference
+ "RFC 6991: Common YANG Data Types";
+ }
+ import ietf-inet-types {
+ prefix inet;
+ reference
+ "RFC 6991: Common YANG Data Types";
+ }
+ import ietf-te-types {
+ prefix te-types;
+ reference
+ "RFC 8776: Common YANG Data Types for Traffic Engineering";
+ }
+ import ietf-network {
+ prefix nw;
+ reference
+ "RFC 8345: A YANG Data Model for Network Topologies";
+ }
+ import ietf-network-topology {
+ prefix nt;
+ reference
+ "RFC 8345: A YANG Data Model for Network Topologies";
+ }
+
+ organization
+ "IETF Traffic Engineering Architecture and Signaling (TEAS)
+ Working Group";
+ contact
+ "WG Web:
+ WG List:
+
+ Editor: Xufeng Liu
+
+
+ Editor: Igor Bryskin
+
+
+ Editor: Vishnu Pavan Beeram
+
+
+ Editor: Tarek Saad
+
+
+ Editor: Himanshu Shah
+
+
+ Editor: Oscar Gonzalez de Dios
+ ";
+ description
+ "This YANG module defines a TE topology model for representing,
+ retrieving, and manipulating technology-agnostic TE topologies.
+
+ Copyright (c) 2020 IETF Trust and the persons identified as
+ authors of the code. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or
+ without modification, is permitted pursuant to, and subject to
+ the license terms contained in, the Simplified BSD License set
+ forth in Section 4.c of the IETF Trust's Legal Provisions
+ Relating to IETF Documents
+ (https://trustee.ietf.org/license-info).
+
+ This version of this YANG module is part of RFC 8795; see the
+ RFC itself for full legal notices.";
+
+ revision 2020-08-06 {
+ description
+ "Initial revision.";
+ reference
+ "RFC 8795: YANG Data Model for Traffic Engineering (TE)
+ Topologies";
+ }
+
+ /*
+ * Features
+ */
+
+ feature nsrlg {
+ description
+ "This feature indicates that the system supports NSRLGs
+ (Non-Shared Risk Link Groups).";
+ }
+
+ feature te-topology-hierarchy {
+ description
+ "This feature indicates that the system allows an underlay
+ and/or overlay TE topology hierarchy.";
+ }
+
+ feature template {
+ description
+ "This feature indicates that the system supports
+ template configuration.";
+ }
+
+ /*
+ * Typedefs
+ */
+
+ typedef geographic-coordinate-degree {
+ type decimal64 {
+ fraction-digits 8;
+ }
+ description
+ "Decimal degree (DD) used to express latitude and longitude
+ geographic coordinates.";
+ }
+ // geographic-coordinate-degree
+
+ typedef te-info-source {
+ type enumeration {
+ enum unknown {
+ description
+ "The source is unknown.";
+ }
+ enum locally-configured {
+ description
+ "Configured entity.";
+ }
+ enum ospfv2 {
+ description
+ "OSPFv2.";
+ }
+ enum ospfv3 {
+ description
+ "OSPFv3.";
+ }
+ enum isis {
+ description
+ "IS-IS.";
+ }
+ enum bgp-ls {
+ description
+ "BGP-LS.";
+ reference
+ "RFC 7752: North-Bound Distribution of Link-State and
+ Traffic Engineering (TE) Information Using BGP";
+ }
+ enum system-processed {
+ description
+ "System-processed entity.";
+ }
+ enum other {
+ description
+ "Other source.";
+ }
+ }
+ description
+ "Describes the type of source that has provided the
+ related information, and the source's credibility.";
+ }
+ // te-info-source
+
+ /*
+ * Groupings
+ */
+
+ grouping connectivity-matrix-entry-path-attributes {
+ description
+ "Attributes of a connectivity matrix entry.";
+ leaf is-allowed {
+ type boolean;
+ description
+ "'true' - switching is allowed;
+ 'false' - switching is disallowed.";
+ }
+ container underlay {
+ if-feature "te-topology-hierarchy";
+ description
+ "Attributes of the TE link underlay.";
+ reference
+ "RFC 4206: Label Switched Paths (LSP) Hierarchy with
+ Generalized Multi-Protocol Label Switching (GMPLS)
+ Traffic Engineering (TE)";
+ uses te-link-underlay-attributes;
+ }
+ uses te-types:generic-path-constraints;
+ uses te-types:generic-path-optimization;
+ uses te-types:generic-path-properties;
+ }
+ // connectivity-matrix-entry-path-attributes
+
+ grouping geolocation-container {
+ description
+ "Contains a GPS location.";
+ container geolocation {
+ config false;
+ description
+ "Contains a GPS location.";
+ leaf altitude {
+ type int64;
+ units "millimeters";
+ description
+ "Distance above sea level.";
+ }
+ leaf latitude {
+ type geographic-coordinate-degree {
+ range "-90..90";
+ }
+ description
+ "Relative position north or south on the Earth's surface.";
+ }
+ leaf longitude {
+ type geographic-coordinate-degree {
+ range "-180..180";
+ }
+ description
+ "Angular distance east or west on the Earth's surface.";
+ }
+ }
+ // geolocation
+ }
+ // geolocation-container
+
+ grouping information-source-state-attributes {
+ description
+ "The attributes identifying the source that has provided the
+ related information, and the source's credibility.";
+ leaf credibility-preference {
+ type uint16;
+ description
+ "The preference value for calculating the Traffic
+ Engineering database credibility value used for
+ tie-break selection between different information-source
+ values. A higher value is preferable.";
+ }
+ leaf logical-network-element {
+ type string;
+ description
+ "When applicable, this is the name of a logical network
+ element from which the information is learned.";
+ }
+ leaf network-instance {
+ type string;
+ description
+ "When applicable, this is the name of a network instance
+ from which the information is learned.";
+ }
+ }
+ // information-source-state-attributes
+
+ grouping information-source-per-link-attributes {
+ description
+ "Per-node container of the attributes identifying the source
+ that has provided the related information, and the source's
+ credibility.";
+ leaf information-source {
+ type te-info-source;
+ config false;
+ description
+ "Indicates the type of information source.";
+ }
+ leaf information-source-instance {
+ type string;
+ config false;
+ description
+ "The name indicating the instance of the information
+ source.";
+ }
+ container information-source-state {
+ config false;
+ description
+ "Contains state attributes related to the information
+ source.";
+ uses information-source-state-attributes;
+ container topology {
+ description
+ "When the information is processed by the system,
+ the attributes in this container indicate which topology
+ is used to generate the result information.";
+ uses nt:link-ref;
+ }
+ }
+ }
+ // information-source-per-link-attributes
+
+ grouping information-source-per-node-attributes {
+ description
+ "Per-node container of the attributes identifying the source
+ that has provided the related information, and the source's
+ credibility.";
+ leaf information-source {
+ type te-info-source;
+ config false;
+ description
+ "Indicates the type of information source.";
+ }
+ leaf information-source-instance {
+ type string;
+ config false;
+ description
+ "The name indicating the instance of the information
+ source.";
+ }
+ container information-source-state {
+ config false;
+ description
+ "Contains state attributes related to the information
+ source.";
+ uses information-source-state-attributes;
+ container topology {
+ description
+ "When the information is processed by the system,
+ the attributes in this container indicate which topology
+ is used to generate the result information.";
+ uses nw:node-ref;
+ }
+ }
+ }
+ // information-source-per-node-attributes
+
+ grouping interface-switching-capability-list {
+ description
+ "List of Interface Switching Capability Descriptors (ISCDs).";
+ list interface-switching-capability {
+ key "switching-capability encoding";
+ description
+ "List of ISCDs for this link.";
+ reference
+ "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS)
+ Signaling Functional Description
+ RFC 4203: OSPF Extensions in Support of Generalized
+ Multi-Protocol Label Switching (GMPLS)";
+ leaf switching-capability {
+ type identityref {
+ base te-types:switching-capabilities;
+ }
+ description
+ "Switching capability for this interface.";
+ }
+ leaf encoding {
+ type identityref {
+ base te-types:lsp-encoding-types;
+ }
+ description
+ "Encoding supported by this interface.";
+ }
+ uses te-link-iscd-attributes;
+ }
+ // interface-switching-capability
+ }
+ // interface-switching-capability-list
+
+ grouping statistics-per-link {
+ description
+ "Statistics attributes per TE link.";
+ leaf discontinuity-time {
+ type yang:date-and-time;
+ description
+ "The time of the most recent occasion at which any one or
+ more of this interface's counters suffered a
+ discontinuity. If no such discontinuities have occurred
+ since the last re-initialization of the local management
+ subsystem, then this node contains the time the local
+ management subsystem re-initialized itself.";
+ }
+ /* Administrative attributes */
+ leaf disables {
+ type yang:counter32;
+ description
+ "Number of times that a link was disabled.";
+ }
+ leaf enables {
+ type yang:counter32;
+ description
+ "Number of times that a link was enabled.";
+ }
+ leaf maintenance-clears {
+ type yang:counter32;
+ description
+ "Number of times that a link was taken out of maintenance.";
+ }
+ leaf maintenance-sets {
+ type yang:counter32;
+ description
+ "Number of times that a link was put in maintenance.";
+ }
+ leaf modifies {
+ type yang:counter32;
+ description
+ "Number of times that a link was modified.";
+ }
+ /* Operational attributes */
+ leaf downs {
+ type yang:counter32;
+ description
+ "Number of times that a link was set to an operational state
+ of 'down'.";
+ }
+ leaf ups {
+ type yang:counter32;
+ description
+ "Number of times that a link was set to an operational state
+ of 'up'.";
+ }
+ /* Recovery attributes */
+ leaf fault-clears {
+ type yang:counter32;
+ description
+ "Number of times that a link experienced a fault-clear
+ event.";
+ }
+ leaf fault-detects {
+ type yang:counter32;
+ description
+ "Number of times that a link experienced fault detection.";
+ }
+ leaf protection-switches {
+ type yang:counter32;
+ description
+ "Number of times that a link experienced protection
+ switchover.";
+ }
+ leaf protection-reverts {
+ type yang:counter32;
+ description
+ "Number of times that a link experienced protection
+ reversion.";
+ }
+ leaf restoration-failures {
+ type yang:counter32;
+ description
+ "Number of times that a link experienced restoration
+ failure.";
+ }
+ leaf restoration-starts {
+ type yang:counter32;
+ description
+ "Number of times that a link experienced restoration
+ start.";
+ }
+ leaf restoration-successes {
+ type yang:counter32;
+ description
+ "Number of times that a link experienced restoration
+ success.";
+ }
+ leaf restoration-reversion-failures {
+ type yang:counter32;
+ description
+ "Number of times that a link experienced restoration
+ reversion failure.";
+ }
+ leaf restoration-reversion-starts {
+ type yang:counter32;
+ description
+ "Number of times that a link experienced restoration
+ reversion start.";
+ }
+ leaf restoration-reversion-successes {
+ type yang:counter32;
+ description
+ "Number of times that a link experienced restoration
+ reversion success.";
+ }
+ }
+ // statistics-per-link
+
+ grouping statistics-per-node {
+ description
+ "Statistics attributes per TE node.";
+ leaf discontinuity-time {
+ type yang:date-and-time;
+ description
+ "The time of the most recent occasion at which any one or
+ more of this interface's counters suffered a
+ discontinuity. If no such discontinuities have occurred
+ since the last re-initialization of the local management
+ subsystem, then this node contains the time the local
+ management subsystem re-initialized itself.";
+ }
+ container node {
+ description
+ "Contains statistics attributes at the TE node level.";
+ leaf disables {
+ type yang:counter32;
+ description
+ "Number of times that a node was disabled.";
+ }
+ leaf enables {
+ type yang:counter32;
+ description
+ "Number of times that a node was enabled.";
+ }
+ leaf maintenance-sets {
+ type yang:counter32;
+ description
+ "Number of times that a node was put in maintenance.";
+ }
+ leaf maintenance-clears {
+ type yang:counter32;
+ description
+ "Number of times that a node was taken out of
+ maintenance.";
+ }
+ leaf modifies {
+ type yang:counter32;
+ description
+ "Number of times that a node was modified.";
+ }
+ }
+ // node
+ container connectivity-matrix-entry {
+ description
+ "Contains statistics attributes at the level of a
+ connectivity matrix entry.";
+ leaf creates {
+ type yang:counter32;
+ description
+ "Number of times that a connectivity matrix entry was
+ created.";
+ reference
+ "RFC 6241: Network Configuration Protocol (NETCONF),
+ Section 7.2, 'create' operation";
+ }
+ leaf deletes {
+ type yang:counter32;
+ description
+ "Number of times that a connectivity matrix entry was
+ deleted.";
+ reference
+ "RFC 6241: Network Configuration Protocol (NETCONF),
+ Section 7.2, 'delete' operation";
+ }
+ leaf disables {
+ type yang:counter32;
+ description
+ "Number of times that a connectivity matrix entry was
+ disabled.";
+ }
+ leaf enables {
+ type yang:counter32;
+ description
+ "Number of times that a connectivity matrix entry was
+ enabled.";
+ }
+ leaf modifies {
+ type yang:counter32;
+ description
+ "Number of times that a connectivity matrix entry was
+ modified.";
+ }
+ }
+ // connectivity-matrix-entry
+ }
+ // statistics-per-node
+
+ grouping statistics-per-ttp {
+ description
+ "Statistics attributes per TE TTP (Tunnel Termination Point).";
+ leaf discontinuity-time {
+ type yang:date-and-time;
+ description
+ "The time of the most recent occasion at which any one or
+ more of this interface's counters suffered a
+ discontinuity. If no such discontinuities have occurred
+ since the last re-initialization of the local management
+ subsystem, then this node contains the time the local
+ management subsystem re-initialized itself.";
+ }
+ container tunnel-termination-point {
+ description
+ "Contains statistics attributes at the TE TTP level.";
+ /* Administrative attributes */
+ leaf disables {
+ type yang:counter32;
+ description
+ "Number of times that a TTP was disabled.";
+ }
+ leaf enables {
+ type yang:counter32;
+ description
+ "Number of times that a TTP was enabled.";
+ }
+ leaf maintenance-clears {
+ type yang:counter32;
+ description
+ "Number of times that a TTP was taken out of maintenance.";
+ }
+ leaf maintenance-sets {
+ type yang:counter32;
+ description
+ "Number of times that a TTP was put in maintenance.";
+ }
+ leaf modifies {
+ type yang:counter32;
+ description
+ "Number of times that a TTP was modified.";
+ }
+ /* Operational attributes */
+ leaf downs {
+ type yang:counter32;
+ description
+ "Number of times that a TTP was set to an operational state
+ of 'down'.";
+ }
+ leaf ups {
+ type yang:counter32;
+ description
+ "Number of times that a TTP was set to an operational state
+ of 'up'.";
+ }
+ leaf in-service-clears {
+ type yang:counter32;
+ description
+ "Number of times that a TTP was taken out of service
+ (TE tunnel was released).";
+ }
+ leaf in-service-sets {
+ type yang:counter32;
+ description
+ "Number of times that a TTP was put in service by a TE
+ tunnel (TE tunnel was set up).";
+ }
+ }
+ // tunnel-termination-point
+ container local-link-connectivity {
+ description
+ "Contains statistics attributes at the TE LLCL (Local Link
+ Connectivity List) level.";
+ leaf creates {
+ type yang:counter32;
+ description
+ "Number of times that an LLCL entry was created.";
+ reference
+ "RFC 6241: Network Configuration Protocol (NETCONF),
+ Section 7.2, 'create' operation";
+ }
+ leaf deletes {
+ type yang:counter32;
+ description
+ "Number of times that an LLCL entry was deleted.";
+ reference
+ "RFC 6241: Network Configuration Protocol (NETCONF),
+ Section 7.2, 'delete' operation";
+ }
+ leaf disables {
+ type yang:counter32;
+ description
+ "Number of times that an LLCL entry was disabled.";
+ }
+ leaf enables {
+ type yang:counter32;
+ description
+ "Number of times that an LLCL entry was enabled.";
+ }
+ leaf modifies {
+ type yang:counter32;
+ description
+ "Number of times that an LLCL entry was modified.";
+ }
+ }
+ // local-link-connectivity
+ }
+ // statistics-per-ttp
+
+ grouping te-link-augment {
+ description
+ "Augmentation for a TE link.";
+ uses te-link-config;
+ uses te-link-state-derived;
+ container statistics {
+ config false;
+ description
+ "Statistics data.";
+ uses statistics-per-link;
+ }
+ }
+ // te-link-augment
+
+ grouping te-link-config {
+ description
+ "TE link configuration grouping.";
+ choice bundle-stack-level {
+ description
+ "The TE link can be partitioned into bundled links or
+ component links.";
+ case bundle {
+ container bundled-links {
+ description
+ "A set of bundled links.";
+ reference
+ "RFC 4201: Link Bundling in MPLS Traffic
+ Engineering (TE)";
+ list bundled-link {
+ key "sequence";
+ description
+ "Specifies a bundled interface that is
+ further partitioned.";
+ leaf sequence {
+ type uint32;
+ description
+ "Identifies the sequence in the bundle.";
+ }
+ }
+ }
+ }
+ case component {
+ container component-links {
+ description
+ "A set of component links.";
+ list component-link {
+ key "sequence";
+ description
+ "Specifies a component interface that is
+ sufficient to unambiguously identify the
+ appropriate resources.";
+ leaf sequence {
+ type uint32;
+ description
+ "Identifies the sequence in the bundle.";
+ }
+ leaf src-interface-ref {
+ type string;
+ description
+ "Reference to a component link interface on the
+ source node.";
+ }
+ leaf des-interface-ref {
+ type string;
+ description
+ "Reference to a component link interface on the
+ destination node.";
+ }
+ }
+ }
+ }
+ }
+ // bundle-stack-level
+ leaf-list te-link-template {
+ if-feature "template";
+ type leafref {
+ path "../../../../te/templates/link-template/name";
+ }
+ description
+ "The reference to a TE link template.";
+ }
+ uses te-link-config-attributes;
+ }
+ // te-link-config
+
+ grouping te-link-config-attributes {
+ description
+ "Link configuration attributes in a TE topology.";
+ container te-link-attributes {
+ description
+ "Link attributes in a TE topology.";
+ leaf access-type {
+ type te-types:te-link-access-type;
+ description
+ "Link access type, which can be point-to-point or
+ multi-access.";
+ }
+ container external-domain {
+ description
+ "For an inter-domain link, specifies the attributes of
+ the remote end of the link, to facilitate the signaling at
+ the local end.";
+ uses nw:network-ref;
+ leaf remote-te-node-id {
+ type te-types:te-node-id;
+ description
+ "Remote TE node identifier, used together with
+ 'remote-te-link-tp-id' to identify the remote Link
+ Termination Point (LTP) in a different domain.";
+ }
+ leaf remote-te-link-tp-id {
+ type te-types:te-tp-id;
+ description
+ "Remote TE LTP identifier, used together with
+ 'remote-te-node-id' to identify the remote LTP in a
+ different domain.";
+ }
+ }
+ leaf is-abstract {
+ type empty;
+ description
+ "Present if the link is abstract.";
+ }
+ leaf name {
+ type string;
+ description
+ "Link name.";
+ }
+ container underlay {
+ if-feature "te-topology-hierarchy";
+ description
+ "Attributes of the TE link underlay.";
+ reference
+ "RFC 4206: Label Switched Paths (LSP) Hierarchy with
+ Generalized Multi-Protocol Label Switching (GMPLS)
+ Traffic Engineering (TE)";
+ uses te-link-underlay-attributes;
+ }
+ leaf admin-status {
+ type te-types:te-admin-status;
+ description
+ "The administrative state of the link.";
+ }
+ uses te-link-info-attributes;
+ }
+ // te-link-attributes
+ }
+ // te-link-config-attributes
+
+ grouping te-link-info-attributes {
+ description
+ "Advertised TE information attributes.";
+ leaf link-index {
+ type uint64;
+ description
+ "The link identifier. If OSPF is used, this object
+ represents an ospfLsdbID. If IS-IS is used, this object
+ represents an isisLSPID. If a locally configured link is
+ used, this object represents a unique value, which is
+ locally defined in a router.";
+ }
+ leaf administrative-group {
+ type te-types:admin-groups;
+ description
+ "Administrative group or color of the link.
+ This attribute covers both administrative groups (defined
+ in RFCs 3630 and 5305) and Extended Administrative Groups
+ (defined in RFC 7308).";
+ reference
+ "RFC 3630: Traffic Engineering (TE) Extensions to OSPF
+ Version 2
+ RFC 5305: IS-IS Extensions for Traffic Engineering
+ RFC 7308: Extended Administrative Groups in MPLS Traffic
+ Engineering (MPLS-TE)";
+ }
+ uses interface-switching-capability-list;
+ uses te-types:label-set-info;
+ leaf link-protection-type {
+ type identityref {
+ base te-types:link-protection-type;
+ }
+ description
+ "Link Protection Type desired for this link.";
+ reference
+ "RFC 4202: Routing Extensions in Support of
+ Generalized Multi-Protocol Label Switching (GMPLS)";
+ }
+ container max-link-bandwidth {
+ uses te-types:te-bandwidth;
+ description
+ "Maximum bandwidth that can be seen on this link in this
+ direction. Units are in bytes per second.";
+ reference
+ "RFC 3630: Traffic Engineering (TE) Extensions to OSPF
+ Version 2
+ RFC 5305: IS-IS Extensions for Traffic Engineering";
+ }
+ container max-resv-link-bandwidth {
+ uses te-types:te-bandwidth;
+ description
+ "Maximum amount of bandwidth that can be reserved in this
+ direction in this link. Units are in bytes per second.";
+ reference
+ "RFC 3630: Traffic Engineering (TE) Extensions to OSPF
+ Version 2
+ RFC 5305: IS-IS Extensions for Traffic Engineering";
+ }
+ list unreserved-bandwidth {
+ key "priority";
+ max-elements 8;
+ description
+ "Unreserved bandwidth for priority levels 0-7. Units are in
+ bytes per second.";
+ reference
+ "RFC 3630: Traffic Engineering (TE) Extensions to OSPF
+ Version 2
+ RFC 5305: IS-IS Extensions for Traffic Engineering";
+ leaf priority {
+ type uint8 {
+ range "0..7";
+ }
+ description
+ "Priority.";
+ }
+ uses te-types:te-bandwidth;
+ }
+ leaf te-default-metric {
+ type uint32;
+ description
+ "Traffic Engineering metric.";
+ reference
+ "RFC 3630: Traffic Engineering (TE) Extensions to OSPF
+ Version 2
+ RFC 5305: IS-IS Extensions for Traffic Engineering";
+ }
+ leaf te-delay-metric {
+ type uint32;
+ description
+ "Traffic Engineering delay metric.";
+ reference
+ "RFC 7471: OSPF Traffic Engineering (TE) Metric Extensions";
+ }
+ leaf te-igp-metric {
+ type uint32;
+ description
+ "IGP metric used for Traffic Engineering.";
+ reference
+ "RFC 3785: Use of Interior Gateway Protocol (IGP) Metric as a
+ second MPLS Traffic Engineering (TE) Metric";
+ }
+ container te-srlgs {
+ description
+ "Contains a list of SRLGs.";
+ leaf-list value {
+ type te-types:srlg;
+ description
+ "SRLG value.";
+ reference
+ "RFC 4202: Routing Extensions in Support of
+ Generalized Multi-Protocol Label Switching (GMPLS)";
+ }
+ }
+ container te-nsrlgs {
+ if-feature "nsrlg";
+ description
+ "Contains a list of NSRLGs (Non-Shared Risk Link Groups).
+ When an abstract TE link is configured, this list specifies
+ the request that underlay TE paths need to be mutually
+ disjoint with other TE links in the same groups.";
+ leaf-list id {
+ type uint32;
+ description
+ "NSRLG ID, uniquely configured within a topology.";
+ reference
+ "RFC 4872: RSVP-TE Extensions in Support of End-to-End
+ Generalized Multi-Protocol Label Switching (GMPLS)
+ Recovery";
+ }
+ }
+ }
+ // te-link-info-attributes
+
+ grouping te-link-iscd-attributes {
+ description
+ "TE link ISCD attributes.";
+ reference
+ "RFC 4203: OSPF Extensions in Support of Generalized
+ Multi-Protocol Label Switching (GMPLS), Section 1.4";
+ list max-lsp-bandwidth {
+ key "priority";
+ max-elements 8;
+ description
+ "Maximum Label Switched Path (LSP) bandwidth at
+ priorities 0-7.";
+ leaf priority {
+ type uint8 {
+ range "0..7";
+ }
+ description
+ "Priority.";
+ }
+ uses te-types:te-bandwidth;
+ }
+ }
+ // te-link-iscd-attributes
+
+ grouping te-link-state-derived {
+ description
+ "Link state attributes in a TE topology.";
+ leaf oper-status {
+ type te-types:te-oper-status;
+ config false;
+ description
+ "The current operational state of the link.";
+ }
+ leaf is-transitional {
+ type empty;
+ config false;
+ description
+ "Present if the link is transitional; used as an
+ alternative approach in lieu of 'inter-layer-lock-id'
+ for path computation in a TE topology covering multiple
+ layers or multiple regions.";
+ reference
+ "RFC 5212: Requirements for GMPLS-Based Multi-Region and
+ Multi-Layer Networks (MRN/MLN)
+ RFC 6001: Generalized MPLS (GMPLS) Protocol Extensions
+ for Multi-Layer and Multi-Region Networks (MLN/MRN)";
+ }
+ uses information-source-per-link-attributes;
+ list information-source-entry {
+ key "information-source information-source-instance";
+ config false;
+ description
+ "A list of information sources learned, including the source
+ that is used.";
+ uses information-source-per-link-attributes;
+ uses te-link-info-attributes;
+ }
+ container recovery {
+ config false;
+ description
+ "Status of the recovery process.";
+ leaf restoration-status {
+ type te-types:te-recovery-status;
+ description
+ "Restoration status.";
+ }
+ leaf protection-status {
+ type te-types:te-recovery-status;
+ description
+ "Protection status.";
+ }
+ }
+ container underlay {
+ if-feature "te-topology-hierarchy";
+ config false;
+ description
+ "State attributes for the TE link underlay.";
+ leaf dynamic {
+ type boolean;
+ description
+ "'true' if the underlay is dynamically created.";
+ }
+ leaf committed {
+ type boolean;
+ description
+ "'true' if the underlay is committed.";
+ }
+ }
+ }
+ // te-link-state-derived
+
+ grouping te-link-underlay-attributes {
+ description
+ "Attributes for the TE link underlay.";
+ reference
+ "RFC 4206: Label Switched Paths (LSP) Hierarchy with
+ Generalized Multi-Protocol Label Switching (GMPLS)
+ Traffic Engineering (TE)";
+ leaf enabled {
+ type boolean;
+ description
+ "'true' if the underlay is enabled.
+ 'false' if the underlay is disabled.";
+ }
+ container primary-path {
+ description
+ "The service path on the underlay topology that
+ supports this link.";
+ uses nw:network-ref;
+ list path-element {
+ key "path-element-id";
+ description
+ "A list of path elements describing the service path.";
+ leaf path-element-id {
+ type uint32;
+ description
+ "To identify the element in a path.";
+ }
+ uses te-path-element;
+ }
+ }
+ // primary-path
+ list backup-path {
+ key "index";
+ description
+ "A list of backup service paths on the underlay topology that
+ protect the underlay primary path. If the primary path is
+ not protected, the list contains zero elements. If the
+ primary path is protected, the list contains one or more
+ elements.";
+ leaf index {
+ type uint32;
+ description
+ "A sequence number to identify a backup path.";
+ }
+ uses nw:network-ref;
+ list path-element {
+ key "path-element-id";
+ description
+ "A list of path elements describing the backup service
+ path.";
+ leaf path-element-id {
+ type uint32;
+ description
+ "To identify the element in a path.";
+ }
+ uses te-path-element;
+ }
+ }
+ // backup-path
+ leaf protection-type {
+ type identityref {
+ base te-types:lsp-protection-type;
+ }
+ description
+ "Underlay protection type desired for this link.";
+ }
+ container tunnel-termination-points {
+ description
+ "Underlay TTPs desired for this link.";
+ leaf source {
+ type binary;
+ description
+ "Source TTP identifier.";
+ }
+ leaf destination {
+ type binary;
+ description
+ "Destination TTP identifier.";
+ }
+ }
+ container tunnels {
+ description
+ "Underlay TE tunnels supporting this TE link.";
+ leaf sharing {
+ type boolean;
+ default "true";
+ description
+ "'true' if the underlay tunnel can be shared with other
+ TE links;
+ 'false' if the underlay tunnel is dedicated to this
+ TE link.
+ This leaf is the default option for all TE tunnels
+ and may be overridden by the per-TE-tunnel value.";
+ }
+ list tunnel {
+ key "tunnel-name";
+ description
+ "Zero, one, or more underlay TE tunnels that support this
+ TE link.";
+ leaf tunnel-name {
+ type string;
+ description
+ "A tunnel name uniquely identifies an underlay TE tunnel,
+ used together with the 'source-node' value for this
+ link.";
+ reference
+ "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
+ }
+ leaf sharing {
+ type boolean;
+ description
+ "'true' if the underlay tunnel can be shared with other
+ TE links;
+ 'false' if the underlay tunnel is dedicated to this
+ TE link.";
+ }
+ }
+ // tunnel
+ }
+ // tunnels
+ }
+ // te-link-underlay-attributes
+
+ grouping te-node-augment {
+ description
+ "Augmentation for a TE node.";
+ uses te-node-config;
+ uses te-node-state-derived;
+ container statistics {
+ config false;
+ description
+ "Statistics data.";
+ uses statistics-per-node;
+ }
+ list tunnel-termination-point {
+ key "tunnel-tp-id";
+ description
+ "A termination point can terminate a tunnel.";
+ leaf tunnel-tp-id {
+ type binary;
+ description
+ "TTP identifier.";
+ }
+ uses te-node-tunnel-termination-point-config;
+ leaf oper-status {
+ type te-types:te-oper-status;
+ config false;
+ description
+ "The current operational state of the TTP.";
+ }
+ uses geolocation-container;
+ container statistics {
+ config false;
+ description
+ "Statistics data.";
+ uses statistics-per-ttp;
+ }
+ // Relationship to other TTPs
+ list supporting-tunnel-termination-point {
+ key "node-ref tunnel-tp-ref";
+ description
+ "Identifies the TTPs on which this TTP depends.";
+ leaf node-ref {
+ type inet:uri;
+ description
+ "This leaf identifies the node in which the supporting
+ TTP is present.
+ This node is either the supporting node or a node in
+ an underlay topology.";
+ }
+ leaf tunnel-tp-ref {
+ type binary;
+ description
+ "Reference to a TTP that is in either the supporting node
+ or a node in an underlay topology.";
+ }
+ }
+ // supporting-tunnel-termination-point
+ }
+ // tunnel-termination-point
+ }
+ // te-node-augment
+
+ grouping te-node-config {
+ description
+ "TE node configuration grouping.";
+ leaf-list te-node-template {
+ if-feature "template";
+ type leafref {
+ path "../../../../te/templates/node-template/name";
+ }
+ description
+ "The reference to a TE node template.";
+ }
+ uses te-node-config-attributes;
+ }
+ // te-node-config
+
+ grouping te-node-config-attributes {
+ description
+ "Configuration node attributes in a TE topology.";
+ container te-node-attributes {
+ description
+ "Contains node attributes in a TE topology.";
+ leaf admin-status {
+ type te-types:te-admin-status;
+ description
+ "The administrative state of the link.";
+ }
+ uses te-node-connectivity-matrices;
+ uses te-node-info-attributes;
+ }
+ }
+ // te-node-config-attributes
+
+ grouping te-node-config-attributes-template {
+ description
+ "Configuration node attributes for a template in a TE
+ topology.";
+ container te-node-attributes {
+ description
+ "Contains node attributes in a TE topology.";
+ leaf admin-status {
+ type te-types:te-admin-status;
+ description
+ "The administrative state of the link.";
+ }
+ uses te-node-info-attributes;
+ }
+ }
+ // te-node-config-attributes-template
+
+ grouping te-node-connectivity-matrices {
+ description
+ "Connectivity matrix on a TE node.";
+ container connectivity-matrices {
+ description
+ "Contains a connectivity matrix on a TE node.";
+ leaf number-of-entries {
+ type uint16;
+ description
+ "The number of connectivity matrix entries.
+ If this number is specified in the configuration request,
+ the number is the requested number of entries, which may
+ not all be listed in the list;
+ if this number is reported in the state data,
+ the number is the current number of operational entries.";
+ }
+ uses te-types:label-set-info;
+ uses connectivity-matrix-entry-path-attributes;
+ list connectivity-matrix {
+ key "id";
+ description
+ "Represents a node's switching limitations, i.e.,
+ limitations in the interconnecting network TE links
+ across the node.";
+ reference
+ "RFC 7579: General Network Element Constraint Encoding
+ for GMPLS-Controlled Networks";
+ leaf id {
+ type uint32;
+ description
+ "Identifies the connectivity matrix entry.";
+ }
+ }
+ // connectivity-matrix
+ }
+ // connectivity-matrices
+ }
+ // te-node-connectivity-matrices
+
+ grouping te-node-connectivity-matrix-attributes {
+ description
+ "Termination point references of a connectivity matrix entry.";
+ container from {
+ description
+ "Reference to a source LTP.";
+ leaf tp-ref {
+ type leafref {
+ path "../../../../../../nt:termination-point/nt:tp-id";
+ }
+ description
+ "Relative reference to a termination point.";
+ }
+ uses te-types:label-set-info;
+ }
+ container to {
+ description
+ "Reference to a destination LTP.";
+ leaf tp-ref {
+ type leafref {
+ path "../../../../../../nt:termination-point/nt:tp-id";
+ }
+ description
+ "Relative reference to a termination point.";
+ }
+ uses te-types:label-set-info;
+ }
+ uses connectivity-matrix-entry-path-attributes;
+ }
+ // te-node-connectivity-matrix-attributes
+
+ grouping te-node-info-attributes {
+ description
+ "Advertised TE information attributes.";
+ leaf domain-id {
+ type uint32;
+ description
+ "Identifies the domain to which this node belongs.
+ This attribute is used to support inter-domain links.";
+ reference
+ "RFC 5152: A Per-Domain Path Computation Method for
+ Establishing Inter-Domain Traffic Engineering (TE)
+ Label Switched Paths (LSPs)
+ RFC 5316: ISIS Extensions in Support of Inter-Autonomous
+ System (AS) MPLS and GMPLS Traffic Engineering
+ RFC 5392: OSPF Extensions in Support of Inter-Autonomous
+ System (AS) MPLS and GMPLS Traffic Engineering";
+ }
+ leaf is-abstract {
+ type empty;
+ description
+ "Present if the node is abstract; not present if the node
+ is actual.";
+ }
+ leaf name {
+ type string;
+ description
+ "Node name.";
+ }
+ leaf-list signaling-address {
+ type inet:ip-address;
+ description
+ "The node's signaling address.";
+ }
+ container underlay-topology {
+ if-feature "te-topology-hierarchy";
+ description
+ "When an abstract node encapsulates a topology, the
+ attributes in this container point to said topology.";
+ uses nw:network-ref;
+ }
+ }
+ // te-node-info-attributes
+
+ grouping te-node-state-derived {
+ description
+ "Node state attributes in a TE topology.";
+ leaf oper-status {
+ type te-types:te-oper-status;
+ config false;
+ description
+ "The current operational state of the node.";
+ }
+ uses geolocation-container;
+ leaf is-multi-access-dr {
+ type empty;
+ config false;
+ description
+ "The presence of this attribute indicates that this TE node
+ is a pseudonode elected as a designated router.";
+ reference
+ "RFC 1195: Use of OSI IS-IS for Routing in TCP/IP and Dual
+ Environments
+ RFC 3630: Traffic Engineering (TE) Extensions to OSPF
+ Version 2";
+ }
+ uses information-source-per-node-attributes;
+ list information-source-entry {
+ key "information-source information-source-instance";
+ config false;
+ description
+ "A list of information sources learned, including the source
+ that is used.";
+ uses information-source-per-node-attributes;
+ uses te-node-connectivity-matrices;
+ uses te-node-info-attributes;
+ }
+ }
+ // te-node-state-derived
+
+ grouping te-node-tunnel-termination-point-config {
+ description
+ "Termination capability of a TTP on a TE node.";
+ uses te-node-tunnel-termination-point-config-attributes;
+ container local-link-connectivities {
+ description
+ "Contains an LLCL for a TTP on a TE node.";
+ leaf number-of-entries {
+ type uint16;
+ description
+ "The number of LLCL entries.
+ If this number is specified in the configuration request,
+ the number is the requested number of entries, which may
+ not all be listed in the list;
+ if this number is reported in the state data,
+ the number is the current number of operational entries.";
+ }
+ uses te-types:label-set-info;
+ uses connectivity-matrix-entry-path-attributes;
+ }
+ }
+ // te-node-tunnel-termination-point-config
+
+ grouping te-node-tunnel-termination-point-config-attributes {
+ description
+ "Configuration attributes of a TTP on a TE node.";
+ leaf admin-status {
+ type te-types:te-admin-status;
+ description
+ "The administrative state of the TTP.";
+ }
+ leaf name {
+ type string;
+ description
+ "A descriptive name for the TTP.";
+ }
+ leaf switching-capability {
+ type identityref {
+ base te-types:switching-capabilities;
+ }
+ description
+ "Switching capability for this interface.";
+ }
+ leaf encoding {
+ type identityref {
+ base te-types:lsp-encoding-types;
+ }
+ description
+ "Encoding supported by this interface.";
+ }
+ leaf-list inter-layer-lock-id {
+ type uint32;
+ description
+ "Inter-layer lock ID, used for path computation in a TE
+ topology covering multiple layers or multiple regions.";
+ reference
+ "RFC 5212: Requirements for GMPLS-Based Multi-Region and
+ Multi-Layer Networks (MRN/MLN)
+ RFC 6001: Generalized MPLS (GMPLS) Protocol Extensions
+ for Multi-Layer and Multi-Region Networks (MLN/MRN)";
+ }
+ leaf protection-type {
+ type identityref {
+ base te-types:lsp-protection-type;
+ }
+ description
+ "The protection type that this TTP is capable of.";
+ }
+ container client-layer-adaptation {
+ description
+ "Contains capability information to support a client-layer
+ adaptation in a multi-layer topology.";
+ list switching-capability {
+ key "switching-capability encoding";
+ description
+ "List of supported switching capabilities.";
+ reference
+ "RFC 4202: Routing Extensions in Support of
+ Generalized Multi-Protocol Label Switching (GMPLS)
+ RFC 6001: Generalized MPLS (GMPLS) Protocol Extensions
+ for Multi-Layer and Multi-Region Networks (MLN/MRN)";
+ leaf switching-capability {
+ type identityref {
+ base te-types:switching-capabilities;
+ }
+ description
+ "Switching capability for the client-layer adaptation.";
+ }
+ leaf encoding {
+ type identityref {
+ base te-types:lsp-encoding-types;
+ }
+ description
+ "Encoding supported by the client-layer adaptation.";
+ }
+ uses te-types:te-bandwidth;
+ }
+ }
+ }
+ // te-node-tunnel-termination-point-config-attributes
+
+ grouping te-node-tunnel-termination-point-llc-list {
+ description
+ "LLCL of a TTP on a TE node.";
+ list local-link-connectivity {
+ key "link-tp-ref";
+ description
+ "The termination capabilities between the TTP and the LTP.
+ This capability information can be used to compute
+ the tunnel path.
+ The Interface Adjustment Capability Descriptors (IACDs)
+ (defined in RFC 6001) on each LTP can be derived from
+ this list.";
+ reference
+ "RFC 6001: Generalized MPLS (GMPLS) Protocol Extensions
+ for Multi-Layer and Multi-Region Networks (MLN/MRN)";
+ leaf link-tp-ref {
+ type leafref {
+ path "../../../../../nt:termination-point/nt:tp-id";
+ }
+ description
+ "LTP.";
+ }
+ uses te-types:label-set-info;
+ uses connectivity-matrix-entry-path-attributes;
+ }
+ }
+ // te-node-tunnel-termination-point-llc-list
+
+ grouping te-path-element {
+ description
+ "A group of attributes defining an element in a TE path,
+ such as a TE node, TE link, TE atomic resource, or label.";
+ uses te-types:explicit-route-hop;
+ }
+ // te-path-element
+
+ grouping te-termination-point-augment {
+ description
+ "Augmentation for a TE termination point.";
+ leaf te-tp-id {
+ type te-types:te-tp-id;
+ description
+ "An identifier that uniquely identifies a TE termination
+ point.";
+ }
+ container te {
+ must '../te-tp-id';
+ presence "TE support";
+ description
+ "Indicates TE support.";
+ uses te-termination-point-config;
+ leaf oper-status {
+ type te-types:te-oper-status;
+ config false;
+ description
+ "The current operational state of the LTP.";
+ }
+ uses geolocation-container;
+ }
+ }
+ // te-termination-point-augment
+
+ grouping te-termination-point-config {
+ description
+ "TE termination point configuration grouping.";
+ leaf admin-status {
+ type te-types:te-admin-status;
+ description
+ "The administrative state of the LTP.";
+ }
+ leaf name {
+ type string;
+ description
+ "A descriptive name for the LTP.";
+ }
+ uses interface-switching-capability-list;
+ leaf inter-domain-plug-id {
+ type binary;
+ description
+ "A network-wide unique number that identifies on the
+ network a connection that supports a given inter-domain
+ TE link. This is a more flexible alternative to specifying
+ 'remote-te-node-id' and 'remote-te-link-tp-id' on a TE link
+ when the provider either does not know 'remote-te-node-id'
+ and 'remote-te-link-tp-id' or needs to give the client the
+ flexibility to mix and match multiple topologies.";
+ }
+ leaf-list inter-layer-lock-id {
+ type uint32;
+ description
+ "Inter-layer lock ID, used for path computation in a TE
+ topology covering multiple layers or multiple regions.";
+ reference
+ "RFC 5212: Requirements for GMPLS-Based Multi-Region and
+ Multi-Layer Networks (MRN/MLN)
+ RFC 6001: Generalized MPLS (GMPLS) Protocol Extensions
+ for Multi-Layer and Multi-Region Networks (MLN/MRN)";
+ }
+ }
+ // te-termination-point-config
+
+ grouping te-topologies-augment {
+ description
+ "Augmentation for TE topologies.";
+ container te {
+ presence "TE support";
+ description
+ "Indicates TE support.";
+ container templates {
+ description
+ "Configuration parameters for templates used for a TE
+ topology.";
+ list node-template {
+ if-feature "template";
+ key "name";
+ leaf name {
+ type te-types:te-template-name;
+ description
+ "The name to identify a TE node template.";
+ }
+ description
+ "The list of TE node templates used to define sharable
+ and reusable TE node attributes.";
+ uses template-attributes;
+ uses te-node-config-attributes-template;
+ }
+ // node-template
+ list link-template {
+ if-feature "template";
+ key "name";
+ leaf name {
+ type te-types:te-template-name;
+ description
+ "The name to identify a TE link template.";
+ }
+ description
+ "The list of TE link templates used to define sharable
+ and reusable TE link attributes.";
+ uses template-attributes;
+ uses te-link-config-attributes;
+ }
+ // link-template
+ }
+ // templates
+ }
+ // te
+ }
+ // te-topologies-augment
+
+ grouping te-topology-augment {
+ description
+ "Augmentation for a TE topology.";
+ uses te-types:te-topology-identifier;
+ container te {
+ must '../te-topology-identifier/provider-id'
+ + ' and ../te-topology-identifier/client-id'
+ + ' and ../te-topology-identifier/topology-id';
+ presence "TE support";
+ description
+ "Indicates TE support.";
+ uses te-topology-config;
+ uses geolocation-container;
+ }
+ }
+ // te-topology-augment
+
+ grouping te-topology-config {
+ description
+ "TE topology configuration grouping.";
+ leaf name {
+ type string;
+ description
+ "Name of the TE topology. This attribute is optional and can
+ be specified by the operator to describe the TE topology,
+ which can be useful when 'network-id' (RFC 8345) is not
+ descriptive and not modifiable because of being generated
+ by the system.";
+ reference
+ "RFC 8345: A YANG Data Model for Network Topologies";
+ }
+ leaf preference {
+ type uint8 {
+ range "1..255";
+ }
+ description
+ "Specifies a preference for this topology. A lower number
+ indicates a higher preference.";
+ }
+ leaf optimization-criterion {
+ type identityref {
+ base te-types:objective-function-type;
+ }
+ description
+ "Optimization criterion applied to this topology.";
+ reference
+ "RFC 3272: Overview and Principles of Internet Traffic
+ Engineering";
+ }
+ list nsrlg {
+ if-feature "nsrlg";
+ key "id";
+ description
+ "List of NSRLGs (Non-Shared Risk Link Groups).";
+ reference
+ "RFC 4872: RSVP-TE Extensions in Support of End-to-End
+ Generalized Multi-Protocol Label Switching (GMPLS)
+ Recovery";
+ leaf id {
+ type uint32;
+ description
+ "Identifies the NSRLG entry.";
+ }
+ leaf disjointness {
+ type te-types:te-path-disjointness;
+ description
+ "The type of resource disjointness.";
+ }
+ }
+ // nsrlg
+ }
+ // te-topology-config
+
+ grouping template-attributes {
+ description
+ "Common attributes for all templates.";
+ leaf priority {
+ type uint16;
+ description
+ "The preference value for resolving conflicts between
+ different templates. When two or more templates specify
+ values for one configuration attribute, the value from the
+ template with the highest priority is used.
+ A lower number indicates a higher priority. The highest
+ priority is 0.";
+ }
+ leaf reference-change-policy {
+ type enumeration {
+ enum no-action {
+ description
+ "When an attribute changes in this template, the
+ configuration node referring to this template does
+ not take any action.";
+ }
+ enum not-allowed {
+ description
+ "When any configuration object has a reference to this
+ template, changing this template is not allowed.";
+ }
+ enum cascade {
+ description
+ "When an attribute changes in this template, the
+ configuration object referring to this template applies
+ the new attribute value to the corresponding
+ configuration.";
+ }
+ }
+ description
+ "This attribute specifies the action taken for a
+ configuration node that has a reference to this template.";
+ }
+ }
+ // template-attributes
+
+ /*
+ * Data nodes
+ */
+
+ augment "/nw:networks/nw:network/nw:network-types" {
+ description
+ "Introduces a new network type for a TE topology.";
+ container te-topology {
+ presence "Indicates a TE topology";
+ description
+ "Its presence identifies the TE topology type.";
+ }
+ }
+
+ augment "/nw:networks" {
+ description
+ "Augmentation parameters for TE topologies.";
+ uses te-topologies-augment;
+ }
+
+ augment "/nw:networks/nw:network" {
+ when 'nw:network-types/tet:te-topology' {
+ description
+ "Augmentation parameters apply only for networks with a
+ TE topology type.";
+ }
+ description
+ "Configuration parameters for a TE topology.";
+ uses te-topology-augment;
+ }
+
+ augment "/nw:networks/nw:network/nw:node" {
+ when '../nw:network-types/tet:te-topology' {
+ description
+ "Augmentation parameters apply only for networks with a
+ TE topology type.";
+ }
+ description
+ "Configuration parameters for TE at the node level.";
+ leaf te-node-id {
+ type te-types:te-node-id;
+ description
+ "The identifier of a node in the TE topology.
+ A node is specific to a topology to which it belongs.";
+ }
+ container te {
+ must '../te-node-id' {
+ description
+ "'te-node-id' is mandatory.";
+ }
+ must 'count(../nw:supporting-node)<=1' {
+ description
+ "For a node in a TE topology, there cannot be more
+ than one supporting node. If multiple nodes are
+ abstracted, the 'underlay-topology' field is used.";
+ }
+ presence "TE support";
+ description
+ "Indicates TE support.";
+ uses te-node-augment;
+ }
+ }
+
+ augment "/nw:networks/nw:network/nt:link" {
+ when '../nw:network-types/tet:te-topology' {
+ description
+ "Augmentation parameters apply only for networks with a
+ TE topology type.";
+ }
+ description
+ "Configuration parameters for TE at the link level.";
+ container te {
+ must 'count(../nt:supporting-link)<=1' {
+ description
+ "For a link in a TE topology, there cannot be more
+ than one supporting link. If one or more link paths are
+ abstracted, the underlay is used.";
+ }
+ presence "TE support";
+ description
+ "Indicates TE support.";
+ uses te-link-augment;
+ }
+ }
+
+ augment "/nw:networks/nw:network/nw:node/"
+ + "nt:termination-point" {
+ when '../../nw:network-types/tet:te-topology' {
+ description
+ "Augmentation parameters apply only for networks with a
+ TE topology type.";
+ }
+ description
+ "Configuration parameters for TE at the termination point
+ level.";
+ uses te-termination-point-augment;
+ }
+
+ augment "/nw:networks/nw:network/nt:link/te/bundle-stack-level/"
+ + "bundle/bundled-links/bundled-link" {
+ when '../../../../nw:network-types/tet:te-topology' {
+ description
+ "Augmentation parameters apply only for networks with a
+ TE topology type.";
+ }
+ description
+ "Augmentation for a TE bundled link.";
+ leaf src-tp-ref {
+ type leafref {
+ path "../../../../../nw:node[nw:node-id = "
+ + "current()/../../../../nt:source/"
+ + "nt:source-node]/"
+ + "nt:termination-point/nt:tp-id";
+ require-instance true;
+ }
+ description
+ "Reference to another TE termination point on the
+ same source node.";
+ }
+ leaf des-tp-ref {
+ type leafref {
+ path "../../../../../nw:node[nw:node-id = "
+ + "current()/../../../../nt:destination/"
+ + "nt:dest-node]/"
+ + "nt:termination-point/nt:tp-id";
+ require-instance true;
+ }
+ description
+ "Reference to another TE termination point on the
+ same destination node.";
+ }
+ }
+
+ augment "/nw:networks/nw:network/nw:node/te/"
+ + "information-source-entry/connectivity-matrices/"
+ + "connectivity-matrix" {
+ when '../../../../../nw:network-types/tet:te-topology' {
+ description
+ "Augmentation parameters apply only for networks with a
+ TE topology type.";
+ }
+ description
+ "Augmentation for the TE node connectivity matrix.";
+ uses te-node-connectivity-matrix-attributes;
+ }
+
+ augment "/nw:networks/nw:network/nw:node/te/te-node-attributes/"
+ + "connectivity-matrices/connectivity-matrix" {
+ when '../../../../../nw:network-types/tet:te-topology' {
+ description
+ "Augmentation parameters apply only for networks with a
+ TE topology type.";
+ }
+ description
+ "Augmentation for the TE node connectivity matrix.";
+ uses te-node-connectivity-matrix-attributes;
+ }
+
+ augment "/nw:networks/nw:network/nw:node/te/"
+ + "tunnel-termination-point/local-link-connectivities" {
+ when '../../../../nw:network-types/tet:te-topology' {
+ description
+ "Augmentation parameters apply only for networks with a
+ TE topology type.";
+ }
+ description
+ "Augmentation for TE node TTP LLCs (Local Link
+ Connectivities).";
+ uses te-node-tunnel-termination-point-llc-list;
+ }
+}
diff --git a/gnpy/yang/ext/ietf-te-types@2022-10-21.yang b/gnpy/yang/ext/ietf-te-types@2022-10-21.yang
new file mode 100644
index 00000000..0252a9ba
--- /dev/null
+++ b/gnpy/yang/ext/ietf-te-types@2022-10-21.yang
@@ -0,0 +1,3458 @@
+module ietf-te-types {
+ yang-version 1.1;
+ namespace "urn:ietf:params:xml:ns:yang:ietf-te-types";
+ prefix te-types;
+
+ import ietf-inet-types {
+ prefix inet;
+ reference
+ "RFC 6991: Common YANG Data Types";
+ }
+ import ietf-yang-types {
+ prefix yang;
+ reference
+ "RFC 6991: Common YANG Data Types";
+ }
+ import ietf-routing-types {
+ prefix rt-types;
+ reference
+ "RFC 8294: Common YANG Data Types for the Routing Area";
+ }
+
+ organization
+ "IETF Traffic Engineering Architecture and Signaling (TEAS)
+ Working Group";
+ contact
+ "WG Web:
+ WG List:
+
+ Editor: Tarek Saad
+
+
+ Editor: Rakesh Gandhi
+
+
+ Editor: Vishnu Pavan Beeram
+
+
+ Editor: Xufeng Liu
+
+
+ Editor: Igor Bryskin
+ ";
+ description
+ "This YANG module contains a collection of generally useful
+ YANG data type definitions specific to TE. The model fully
+ conforms to the Network Management Datastore Architecture
+ (NMDA).
+
+ The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
+ NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
+ 'MAY', and 'OPTIONAL' in this document are to be interpreted as
+ described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
+ they appear in all capitals, as shown here.
+
+ Copyright (c) 2020 IETF Trust and the persons identified as
+ authors of the code. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or
+ without modification, is permitted pursuant to, and subject to
+ the license terms contained in, the Simplified BSD License set
+ forth in Section 4.c of the IETF Trust's Legal Provisions
+ Relating to IETF Documents
+ (https://trustee.ietf.org/license-info).
+
+ This version of this YANG module is part of RFC 8776; see the
+ RFC itself for full legal notices.";
+
+ revision 2022-10-21 {
+ description
+ "te-tp-id: add inet:uri for consistency with tp-id in ietf-network-topology@2018-02-26.yang";
+ }
+
+ revision 2021-02-13 {
+ description
+ "te-topology-id: invert order of params in union for typedef te-topology-id because of mdsal bug ";
+ }
+
+ revision 2020-11-26 {
+ description
+ "te-topology-id: workaround for typedef from another typedef which is of type enum because of mdsal bug ";
+ }
+
+ revision 2020-06-10 {
+ description
+ "Latest revision of TE types.";
+ reference
+ "RFC 8776: Common YANG Data Types for Traffic Engineering";
+ }
+
+ /**
+ * Typedefs
+ */
+
+ typedef admin-group {
+ type yang:hex-string {
+ /* 01:02:03:04 */
+ length "1..11";
+ }
+ description
+ "Administrative group / resource class / color representation
+ in 'hex-string' type.
+ The most significant byte in the hex-string is the farthest
+ to the left in the byte sequence. Leading zero bytes in the
+ configured value may be omitted for brevity.";
+ reference
+ "RFC 3630: Traffic Engineering (TE) Extensions to OSPF
+ Version 2
+ RFC 5305: IS-IS Extensions for Traffic Engineering
+ RFC 7308: Extended Administrative Groups in MPLS Traffic
+ Engineering (MPLS-TE)";
+ }
+
+ typedef admin-groups {
+ type union {
+ type admin-group;
+ type extended-admin-group;
+ }
+ description
+ "Derived types for TE administrative groups.";
+ }
+
+ typedef extended-admin-group {
+ type yang:hex-string;
+ description
+ "Extended administrative group / resource class / color
+ representation in 'hex-string' type.
+ The most significant byte in the hex-string is the farthest
+ to the left in the byte sequence. Leading zero bytes in the
+ configured value may be omitted for brevity.";
+ reference
+ "RFC 7308: Extended Administrative Groups in MPLS Traffic
+ Engineering (MPLS-TE)";
+ }
+
+ typedef path-attribute-flags {
+ type union {
+ type identityref {
+ base session-attributes-flags;
+ }
+ type identityref {
+ base lsp-attributes-flags;
+ }
+ }
+ description
+ "Path attributes flags type.";
+ }
+
+ typedef performance-metrics-normality {
+ type enumeration {
+ enum unknown {
+ value 0;
+ description
+ "Unknown.";
+ }
+ enum normal {
+ value 1;
+ description
+ "Normal. Indicates that the anomalous bit is not set.";
+ }
+ enum abnormal {
+ value 2;
+ description
+ "Abnormal. Indicates that the anomalous bit is set.";
+ }
+ }
+ description
+ "Indicates whether a performance metric is normal (anomalous
+ bit not set), abnormal (anomalous bit set), or unknown.";
+ reference
+ "RFC 7471: OSPF Traffic Engineering (TE) Metric Extensions
+ RFC 7823: Performance-Based Path Selection for Explicitly
+ Routed Label Switched Paths (LSPs) Using TE Metric
+ Extensions
+ RFC 8570: IS-IS Traffic Engineering (TE) Metric Extensions";
+ }
+
+ typedef srlg {
+ type uint32;
+ description
+ "SRLG type.";
+ reference
+ "RFC 4203: OSPF Extensions in Support of Generalized
+ Multi-Protocol Label Switching (GMPLS)
+ RFC 5307: IS-IS Extensions in Support of Generalized
+ Multi-Protocol Label Switching (GMPLS)";
+ }
+
+ typedef te-common-status {
+ type enumeration {
+ enum up {
+ description
+ "Enabled.";
+ }
+ enum down {
+ description
+ "Disabled.";
+ }
+ enum testing {
+ description
+ "In some test mode.";
+ }
+ enum preparing-maintenance {
+ description
+ "The resource is disabled in the control plane to prepare
+ for a graceful shutdown for maintenance purposes.";
+ reference
+ "RFC 5817: Graceful Shutdown in MPLS and Generalized MPLS
+ Traffic Engineering Networks";
+ }
+ enum maintenance {
+ description
+ "The resource is disabled in the data plane for maintenance
+ purposes.";
+ }
+ enum unknown {
+ description
+ "Status is unknown.";
+ }
+ }
+ description
+ "Defines a type representing the common states of a TE
+ resource.";
+ }
+
+ typedef te-bandwidth {
+ type string {
+ pattern '0[xX](0((\.0?)?[pP](\+)?0?|(\.0?))|'
+ + '1(\.([\da-fA-F]{0,5}[02468aAcCeE]?)?)?'
+ + '[pP](\+)?(12[0-7]|'
+ + '1[01]\d|0?\d?\d)?)|0[xX][\da-fA-F]{1,8}|\d+'
+ + '(,(0[xX](0((\.0?)?[pP](\+)?0?|(\.0?))|'
+ + '1(\.([\da-fA-F]{0,5}[02468aAcCeE]?)?)?'
+ + '[pP](\+)?(12[0-7]|'
+ + '1[01]\d|0?\d?\d)?)|0[xX][\da-fA-F]{1,8}|\d+))*';
+ }
+ description
+ "This is the generic bandwidth type. It is a string containing
+ a list of numbers separated by commas, where each of these
+ numbers can be non-negative decimal, hex integer, or
+ hex float:
+
+ (dec | hex | float)[*(','(dec | hex | float))]
+
+ For the packet-switching type, the string encoding follows
+ the type 'bandwidth-ieee-float32' as defined in RFC 8294
+ (e.g., 0x1p10), where the units are in bytes per second.
+
+ For the Optical Transport Network (OTN) switching type,
+ a list of integers can be used, such as '0,2,3,1', indicating
+ two ODU0s and one ODU3. ('ODU' stands for 'Optical Data
+ Unit'.) For Dense Wavelength Division Multiplexing (DWDM),
+ a list of pairs of slot numbers and widths can be used,
+ such as '0,2,3,3', indicating a frequency slot 0 with
+ slot width 2 and a frequency slot 3 with slot width 3.
+ Canonically, the string is represented as all lowercase and in
+ hex, where the prefix '0x' precedes the hex number.";
+ reference
+ "RFC 8294: Common YANG Data Types for the Routing Area
+ ITU-T Recommendation G.709: Interfaces for the
+ optical transport network";
+ }
+
+ typedef te-ds-class {
+ type uint8 {
+ range "0..7";
+ }
+ description
+ "The Differentiated Services Class-Type of traffic.";
+ reference
+ "RFC 4124: Protocol Extensions for Support of Diffserv-aware
+ MPLS Traffic Engineering, Section 4.3.1";
+ }
+
+ typedef te-global-id {
+ type uint32;
+ description
+ "An identifier to uniquely identify an operator, which can be
+ either a provider or a client.
+ The definition of this type is taken from RFCs 6370 and 5003.
+ This attribute type is used solely to provide a globally
+ unique context for TE topologies.";
+ reference
+ "RFC 5003: Attachment Individual Identifier (AII) Types for
+ Aggregation
+ RFC 6370: MPLS Transport Profile (MPLS-TP) Identifiers";
+ }
+
+ typedef te-hop-type {
+ type enumeration {
+ enum loose {
+ description
+ "A loose hop in an explicit path.";
+ }
+ enum strict {
+ description
+ "A strict hop in an explicit path.";
+ }
+ }
+ description
+ "Enumerated type for specifying loose or strict paths.";
+ reference
+ "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
+ Section 4.3.3";
+ }
+
+ typedef te-link-access-type {
+ type enumeration {
+ enum point-to-point {
+ description
+ "The link is point-to-point.";
+ }
+ enum multi-access {
+ description
+ "The link is multi-access, including broadcast and NBMA.";
+ }
+ }
+ description
+ "Defines a type representing the access type of a TE link.";
+ reference
+ "RFC 3630: Traffic Engineering (TE) Extensions to OSPF
+ Version 2";
+ }
+
+ typedef te-label-direction {
+ type enumeration {
+ enum forward {
+ description
+ "Label allocated for the forward LSP direction.";
+ }
+ enum reverse {
+ description
+ "Label allocated for the reverse LSP direction.";
+ }
+ }
+ description
+ "Enumerated type for specifying the forward or reverse
+ label.";
+ }
+
+ typedef te-link-direction {
+ type enumeration {
+ enum incoming {
+ description
+ "The explicit route represents an incoming link on
+ a node.";
+ }
+ enum outgoing {
+ description
+ "The explicit route represents an outgoing link on
+ a node.";
+ }
+ }
+ description
+ "Enumerated type for specifying the direction of a link on
+ a node.";
+ }
+
+ typedef te-metric {
+ type uint32;
+ description
+ "TE metric.";
+ reference
+ "RFC 3785: Use of Interior Gateway Protocol (IGP) Metric as a
+ second MPLS Traffic Engineering (TE) Metric";
+ }
+
+ typedef te-node-id {
+ type yang:dotted-quad;
+ description
+ "A type representing the identifier for a node in a TE
+ topology.
+ The identifier is represented as 4 octets in dotted-quad
+ notation.
+ This attribute MAY be mapped to the Router Address TLV
+ described in Section 2.4.1 of RFC 3630, the TE Router ID
+ described in Section 3 of RFC 6827, the Traffic Engineering
+ Router ID TLV described in Section 4.3 of RFC 5305, or the
+ TE Router ID TLV described in Section 3.2.1 of RFC 6119.
+ The reachability of such a TE node MAY be achieved by a
+ mechanism such as that described in Section 6.2 of RFC 6827.";
+ reference
+ "RFC 3630: Traffic Engineering (TE) Extensions to OSPF
+ Version 2, Section 2.4.1
+ RFC 5305: IS-IS Extensions for Traffic Engineering,
+ Section 4.3
+ RFC 6119: IPv6 Traffic Engineering in IS-IS, Section 3.2.1
+ RFC 6827: Automatically Switched Optical Network (ASON)
+ Routing for OSPFv2 Protocols, Section 3";
+ }
+
+ typedef te-oper-status {
+ type enumeration {
+ enum up {
+ description
+ "Enabled.";
+ }
+ enum down {
+ description
+ "Disabled.";
+ }
+ enum testing {
+ description
+ "In some test mode.";
+ }
+ enum preparing-maintenance {
+ description
+ "The resource is disabled in the control plane to prepare
+ for a graceful shutdown for maintenance purposes.";
+ reference
+ "RFC 5817: Graceful Shutdown in MPLS and Generalized MPLS
+ Traffic Engineering Networks";
+ }
+ enum maintenance {
+ description
+ "The resource is disabled in the data plane for maintenance
+ purposes.";
+ }
+ enum unknown {
+ description
+ "Status is unknown.";
+ }
+ }
+ description
+ "Defines a type representing the operational status of
+ a TE resource.";
+ }
+
+ typedef te-admin-status {
+ type enumeration {
+ enum up {
+ description
+ "Enabled.";
+ }
+ enum down {
+ description
+ "Disabled.";
+ }
+ enum testing {
+ description
+ "In some test mode.";
+ }
+ enum preparing-maintenance {
+ description
+ "The resource is disabled in the control plane to prepare
+ for a graceful shutdown for maintenance purposes.";
+ reference
+ "RFC 5817: Graceful Shutdown in MPLS and Generalized MPLS
+ Traffic Engineering Networks";
+ }
+ enum maintenance {
+ description
+ "The resource is disabled in the data plane for maintenance
+ purposes.";
+ }
+ enum unknown {
+ description
+ "Status is unknown.";
+ }
+ }
+ description
+ "Defines a type representing the administrative status of
+ a TE resource.";
+ }
+
+ typedef te-path-disjointness {
+ type bits {
+ bit node {
+ position 0;
+ description
+ "Node disjoint.";
+ }
+ bit link {
+ position 1;
+ description
+ "Link disjoint.";
+ }
+ bit srlg {
+ position 2;
+ description
+ "SRLG (Shared Risk Link Group) disjoint.";
+ }
+ }
+ description
+ "Type of the resource disjointness for a TE tunnel path.";
+ reference
+ "RFC 4872: RSVP-TE Extensions in Support of End-to-End
+ Generalized Multi-Protocol Label Switching (GMPLS) Recovery";
+ }
+
+ typedef te-recovery-status {
+ type enumeration {
+ enum normal {
+ description
+ "Both the recovery span and the working span are fully
+ allocated and active, data traffic is being
+ transported over (or selected from) the working
+ span, and no trigger events are reported.";
+ }
+ enum recovery-started {
+ description
+ "The recovery action has been started but not completed.";
+ }
+ enum recovery-succeeded {
+ description
+ "The recovery action has succeeded. The working span has
+ reported a failure/degrade condition, and the user traffic
+ is being transported (or selected) on the recovery span.";
+ }
+ enum recovery-failed {
+ description
+ "The recovery action has failed.";
+ }
+ enum reversion-started {
+ description
+ "The reversion has started.";
+ }
+ enum reversion-succeeded {
+ description
+ "The reversion action has succeeded.";
+ }
+ enum reversion-failed {
+ description
+ "The reversion has failed.";
+ }
+ enum recovery-unavailable {
+ description
+ "The recovery is unavailable, as a result of either an
+ operator's lockout command or a failure condition
+ detected on the recovery span.";
+ }
+ enum recovery-admin {
+ description
+ "The operator has issued a command to switch the user
+ traffic to the recovery span.";
+ }
+ enum wait-to-restore {
+ description
+ "The recovery domain is recovering from a failure/degrade
+ condition on the working span that is being controlled by
+ the Wait-to-Restore (WTR) timer.";
+ }
+ }
+ description
+ "Defines the status of a recovery action.";
+ reference
+ "RFC 4427: Recovery (Protection and Restoration) Terminology
+ for Generalized Multi-Protocol Label Switching (GMPLS)
+ RFC 6378: MPLS Transport Profile (MPLS-TP) Linear Protection";
+ }
+
+ typedef te-template-name {
+ type string {
+ pattern '/?([a-zA-Z0-9\-_.]+)(/[a-zA-Z0-9\-_.]+)*';
+ }
+ description
+ "A type for the name of a TE node template or TE link
+ template.";
+ }
+
+ typedef te-topology-event-type {
+ type enumeration {
+ enum add {
+ value 0;
+ description
+ "A TE node or TE link has been added.";
+ }
+ enum remove {
+ value 1;
+ description
+ "A TE node or TE link has been removed.";
+ }
+ enum update {
+ value 2;
+ description
+ "A TE node or TE link has been updated.";
+ }
+ }
+ description
+ "TE event type for notifications.";
+ }
+
+ typedef te-topology-id {
+ type union {
+ type string {
+ pattern '([a-zA-Z0-9\-_.]+:)*'
+ + '/?([a-zA-Z0-9\-_.]+)(/[a-zA-Z0-9\-_.]+)*';
+ }
+ type string {
+ length "0";
+ // empty string
+ }
+ }
+
+ description
+ "An identifier for a topology.
+ It is optional to have one or more prefixes at the beginning,
+ separated by colons. The prefixes can be 'network-types' as
+ defined in the 'ietf-network' module in RFC 8345, to help the
+ user better understand the topology before further inquiry
+ is made.";
+ reference
+ "RFC 8345: A YANG Data Model for Network Topologies";
+ }
+
+ typedef te-tp-id {
+ type union {
+ type inet:uri;
+ // Added for consistency with tp-id in ietf-network-topology@2018-02-26.yang
+ type uint32;
+ // Unnumbered
+ type inet:ip-address;
+ // IPv4 or IPv6 address
+ }
+
+ description
+ "An identifier for a TE link endpoint on a node.
+ This attribute is mapped to a local or remote link identifier
+ as defined in RFCs 3630 and 5305.";
+ reference
+ "RFC 3630: Traffic Engineering (TE) Extensions to OSPF
+ Version 2
+ RFC 5305: IS-IS Extensions for Traffic Engineering";
+ }
+
+ /* TE features */
+
+ feature p2mp-te {
+ description
+ "Indicates support for Point-to-Multipoint TE (P2MP-TE).";
+ reference
+ "RFC 4875: Extensions to Resource Reservation Protocol -
+ Traffic Engineering (RSVP-TE) for Point-to-Multipoint TE
+ Label Switched Paths (LSPs)";
+ }
+
+ feature frr-te {
+ description
+ "Indicates support for TE Fast Reroute (FRR).";
+ reference
+ "RFC 4090: Fast Reroute Extensions to RSVP-TE for LSP Tunnels";
+ }
+
+ feature extended-admin-groups {
+ description
+ "Indicates support for TE link extended administrative
+ groups.";
+ reference
+ "RFC 7308: Extended Administrative Groups in MPLS Traffic
+ Engineering (MPLS-TE)";
+ }
+
+ feature named-path-affinities {
+ description
+ "Indicates support for named path affinities.";
+ }
+
+ feature named-extended-admin-groups {
+ description
+ "Indicates support for named extended administrative groups.";
+ }
+
+ feature named-srlg-groups {
+ description
+ "Indicates support for named SRLG groups.";
+ }
+
+ feature named-path-constraints {
+ description
+ "Indicates support for named path constraints.";
+ }
+
+ feature path-optimization-metric {
+ description
+ "Indicates support for path optimization metrics.";
+ }
+
+ feature path-optimization-objective-function {
+ description
+ "Indicates support for path optimization objective functions.";
+ }
+
+ /*
+ * Identities
+ */
+
+ identity session-attributes-flags {
+ description
+ "Base identity for the RSVP-TE session attributes flags.";
+ }
+
+ identity local-protection-desired {
+ base session-attributes-flags;
+ description
+ "Local protection is desired.";
+ reference
+ "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
+ Section 4.7.1";
+ }
+
+ identity se-style-desired {
+ base session-attributes-flags;
+ description
+ "Shared explicit style, to allow the LSP to be established
+ and share resources with the old LSP.";
+ reference
+ "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
+ }
+
+ identity local-recording-desired {
+ base session-attributes-flags;
+ description
+ "Label recording is desired.";
+ reference
+ "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
+ Section 4.7.1";
+ }
+
+ identity bandwidth-protection-desired {
+ base session-attributes-flags;
+ description
+ "Requests FRR bandwidth protection on LSRs, if present.";
+ reference
+ "RFC 4090: Fast Reroute Extensions to RSVP-TE for LSP Tunnels";
+ }
+
+ identity node-protection-desired {
+ base session-attributes-flags;
+ description
+ "Requests FRR node protection on LSRs, if present.";
+ reference
+ "RFC 4090: Fast Reroute Extensions to RSVP-TE for LSP Tunnels";
+ }
+
+ identity path-reevaluation-request {
+ base session-attributes-flags;
+ description
+ "This flag indicates that a path re-evaluation (of the
+ current path in use) is requested. Note that this does
+ not trigger any LSP reroutes but instead just signals a
+ request to evaluate whether a preferable path exists.";
+ reference
+ "RFC 4736: Reoptimization of Multiprotocol Label Switching
+ (MPLS) Traffic Engineering (TE) Loosely Routed Label Switched
+ Path (LSP)";
+ }
+
+ identity soft-preemption-desired {
+ base session-attributes-flags;
+ description
+ "Soft preemption of LSP resources is desired.";
+ reference
+ "RFC 5712: MPLS Traffic Engineering Soft Preemption";
+ }
+
+ identity lsp-attributes-flags {
+ description
+ "Base identity for LSP attributes flags.";
+ }
+
+ identity end-to-end-rerouting-desired {
+ base lsp-attributes-flags;
+ description
+ "Indicates end-to-end rerouting behavior for an LSP
+ undergoing establishment. This MAY also be used to
+ specify the behavior of end-to-end LSP recovery for
+ established LSPs.";
+ reference
+ "RFC 4920: Crankback Signaling Extensions for MPLS and GMPLS
+ RSVP-TE
+ RFC 5420: Encoding of Attributes for MPLS LSP Establishment
+ Using Resource Reservation Protocol Traffic Engineering
+ (RSVP-TE)
+ RFC 7570: Label Switched Path (LSP) Attribute in the Explicit
+ Route Object (ERO)";
+ }
+
+ identity boundary-rerouting-desired {
+ base lsp-attributes-flags;
+ description
+ "Indicates boundary rerouting behavior for an LSP undergoing
+ establishment. This MAY also be used to specify
+ segment-based LSP recovery through nested crankback for
+ established LSPs. The boundary Area Border Router (ABR) /
+ Autonomous System Border Router (ASBR) can decide to forward
+ the PathErr message upstream to either an upstream boundary
+ ABR/ASBR or the ingress LSR. Alternatively, it can try to
+ select another egress boundary LSR.";
+ reference
+ "RFC 4920: Crankback Signaling Extensions for MPLS and GMPLS
+ RSVP-TE
+ RFC 5420: Encoding of Attributes for MPLS LSP Establishment
+ Using Resource Reservation Protocol Traffic Engineering
+ (RSVP-TE)
+ RFC 7570: Label Switched Path (LSP) Attribute in the Explicit
+ Route Object (ERO)";
+ }
+
+ identity segment-based-rerouting-desired {
+ base lsp-attributes-flags;
+ description
+ "Indicates segment-based rerouting behavior for an LSP
+ undergoing establishment. This MAY also be used to specify
+ segment-based LSP recovery for established LSPs.";
+ reference
+ "RFC 4920: Crankback Signaling Extensions for MPLS and GMPLS
+ RSVP-TE
+ RFC 5420: Encoding of Attributes for MPLS LSP Establishment
+ Using Resource Reservation Protocol Traffic Engineering
+ (RSVP-TE)
+ RFC 7570: Label Switched Path (LSP) Attribute in the Explicit
+ Route Object (ERO)";
+ }
+
+ identity lsp-integrity-required {
+ base lsp-attributes-flags;
+ description
+ "Indicates that LSP integrity is required.";
+ reference
+ "RFC 4875: Extensions to Resource Reservation Protocol -
+ Traffic Engineering (RSVP-TE) for Point-to-Multipoint TE
+ Label Switched Paths (LSPs)
+ RFC 7570: Label Switched Path (LSP) Attribute in the Explicit
+ Route Object (ERO)";
+ }
+
+ identity contiguous-lsp-desired {
+ base lsp-attributes-flags;
+ description
+ "Indicates that a contiguous LSP is desired.";
+ reference
+ "RFC 5151: Inter-Domain MPLS and GMPLS Traffic Engineering --
+ Resource Reservation Protocol-Traffic Engineering (RSVP-TE)
+ Extensions
+ RFC 7570: Label Switched Path (LSP) Attribute in the Explicit
+ Route Object (ERO)";
+ }
+
+ identity lsp-stitching-desired {
+ base lsp-attributes-flags;
+ description
+ "Indicates that LSP stitching is desired.";
+ reference
+ "RFC 5150: Label Switched Path Stitching with Generalized
+ Multiprotocol Label Switching Traffic Engineering (GMPLS TE)
+ RFC 7570: Label Switched Path (LSP) Attribute in the Explicit
+ Route Object (ERO)";
+ }
+
+ identity pre-planned-lsp-flag {
+ base lsp-attributes-flags;
+ description
+ "Indicates that the LSP MUST be provisioned in the
+ control plane only.";
+ reference
+ "RFC 6001: Generalized MPLS (GMPLS) Protocol Extensions for
+ Multi-Layer and Multi-Region Networks (MLN/MRN)
+ RFC 7570: Label Switched Path (LSP) Attribute in the Explicit
+ Route Object (ERO)";
+ }
+
+ identity non-php-behavior-flag {
+ base lsp-attributes-flags;
+ description
+ "Indicates that non-PHP (non-Penultimate Hop Popping) behavior
+ for the LSP is desired.";
+ reference
+ "RFC 6511: Non-Penultimate Hop Popping Behavior and Out-of-Band
+ Mapping for RSVP-TE Label Switched Paths
+ RFC 7570: Label Switched Path (LSP) Attribute in the Explicit
+ Route Object (ERO)";
+ }
+
+ identity oob-mapping-flag {
+ base lsp-attributes-flags;
+ description
+ "Indicates that signaling of the egress binding information is
+ out of band (e.g., via the Border Gateway Protocol (BGP)).";
+ reference
+ "RFC 6511: Non-Penultimate Hop Popping Behavior and Out-of-Band
+ Mapping for RSVP-TE Label Switched Paths
+ RFC 7570: Label Switched Path (LSP) Attribute in the Explicit
+ Route Object (ERO)";
+ }
+
+ identity entropy-label-capability {
+ base lsp-attributes-flags;
+ description
+ "Indicates entropy label capability.";
+ reference
+ "RFC 6790: The Use of Entropy Labels in MPLS Forwarding
+ RFC 7570: Label Switched Path (LSP) Attribute in the Explicit
+ Route Object (ERO)";
+ }
+
+ identity oam-mep-entity-desired {
+ base lsp-attributes-flags;
+ description
+ "OAM Maintenance Entity Group End Point (MEP) entities
+ desired.";
+ reference
+ "RFC 7260: GMPLS RSVP-TE Extensions for Operations,
+ Administration, and Maintenance (OAM) Configuration";
+ }
+
+ identity oam-mip-entity-desired {
+ base lsp-attributes-flags;
+ description
+ "OAM Maintenance Entity Group Intermediate Points (MIP)
+ entities desired.";
+ reference
+ "RFC 7260: GMPLS RSVP-TE Extensions for Operations,
+ Administration, and Maintenance (OAM) Configuration";
+ }
+
+ identity srlg-collection-desired {
+ base lsp-attributes-flags;
+ description
+ "SRLG collection desired.";
+ reference
+ "RFC 7570: Label Switched Path (LSP) Attribute in the Explicit
+ Route Object (ERO)
+ RFC 8001: RSVP-TE Extensions for Collecting Shared Risk
+ Link Group (SRLG) Information";
+ }
+
+ identity loopback-desired {
+ base lsp-attributes-flags;
+ description
+ "This flag indicates that a particular node on the LSP is
+ required to enter loopback mode. This can also be
+ used to specify the loopback state of the node.";
+ reference
+ "RFC 7571: GMPLS RSVP-TE Extensions for Lock Instruct and
+ Loopback";
+ }
+
+ identity p2mp-te-tree-eval-request {
+ base lsp-attributes-flags;
+ description
+ "P2MP-TE tree re-evaluation request.";
+ reference
+ "RFC 8149: RSVP Extensions for Reoptimization of Loosely Routed
+ Point-to-Multipoint Traffic Engineering Label Switched Paths
+ (LSPs)";
+ }
+
+ identity rtm-set-desired {
+ base lsp-attributes-flags;
+ description
+ "Residence Time Measurement (RTM) attribute flag requested.";
+ reference
+ "RFC 8169: Residence Time Measurement in MPLS Networks";
+ }
+
+ identity link-protection-type {
+ description
+ "Base identity for the link protection type.";
+ }
+
+ identity link-protection-unprotected {
+ base link-protection-type;
+ description
+ "Unprotected link type.";
+ reference
+ "RFC 4872: RSVP-TE Extensions in Support of End-to-End
+ Generalized Multi-Protocol Label Switching (GMPLS) Recovery";
+ }
+
+ identity link-protection-extra-traffic {
+ base link-protection-type;
+ description
+ "Extra-Traffic protected link type.";
+ reference
+ "RFC 4427: Recovery (Protection and Restoration) Terminology
+ for Generalized Multi-Protocol Label Switching (GMPLS)";
+ }
+
+ identity link-protection-shared {
+ base link-protection-type;
+ description
+ "Shared protected link type.";
+ reference
+ "RFC 4872: RSVP-TE Extensions in Support of End-to-End
+ Generalized Multi-Protocol Label Switching (GMPLS) Recovery";
+ }
+
+ identity link-protection-1-for-1 {
+ base link-protection-type;
+ description
+ "One-for-one (1:1) protected link type.";
+ reference
+ "RFC 4872: RSVP-TE Extensions in Support of End-to-End
+ Generalized Multi-Protocol Label Switching (GMPLS) Recovery";
+ }
+
+ identity link-protection-1-plus-1 {
+ base link-protection-type;
+ description
+ "One-plus-one (1+1) protected link type.";
+ reference
+ "RFC 4872: RSVP-TE Extensions in Support of End-to-End
+ Generalized Multi-Protocol Label Switching (GMPLS) Recovery";
+ }
+
+ identity link-protection-enhanced {
+ base link-protection-type;
+ description
+ "A compound link protection type derived from the underlay
+ TE tunnel protection configuration supporting the TE link.";
+ }
+
+ identity association-type {
+ description
+ "Base identity for the tunnel association.";
+ }
+
+ identity association-type-recovery {
+ base association-type;
+ description
+ "Association type for recovery, used to associate LSPs of the
+ same tunnel for recovery.";
+ reference
+ "RFC 4872: RSVP-TE Extensions in Support of End-to-End
+ Generalized Multi-Protocol Label Switching (GMPLS) Recovery
+ RFC 6780: RSVP ASSOCIATION Object Extensions";
+ }
+
+ identity association-type-resource-sharing {
+ base association-type;
+ description
+ "Association type for resource sharing, used to enable
+ resource sharing during make-before-break.";
+ reference
+ "RFC 4873: GMPLS Segment Recovery
+ RFC 6780: RSVP ASSOCIATION Object Extensions";
+ }
+
+ identity association-type-double-sided-bidir {
+ base association-type;
+ description
+ "Association type for double-sided bidirectional LSPs,
+ used to associate two LSPs of two tunnels that are
+ independently configured on either endpoint.";
+ reference
+ "RFC 7551: RSVP-TE Extensions for Associated Bidirectional
+ Label Switched Paths (LSPs)";
+ }
+
+ identity association-type-single-sided-bidir {
+ base association-type;
+ description
+ "Association type for single-sided bidirectional LSPs,
+ used to associate two LSPs of two tunnels, where one
+ tunnel is configured on one side/endpoint and the other
+ tunnel is dynamically created on the other endpoint.";
+ reference
+ "RFC 6780: RSVP ASSOCIATION Object Extensions
+ RFC 7551: RSVP-TE Extensions for Associated Bidirectional
+ Label Switched Paths (LSPs)";
+ }
+
+ identity objective-function-type {
+ description
+ "Base objective function type.";
+ }
+
+ identity of-minimize-cost-path {
+ base objective-function-type;
+ description
+ "Objective function for minimizing path cost.";
+ reference
+ "RFC 5541: Encoding of Objective Functions in the Path
+ Computation Element Communication Protocol (PCEP)";
+ }
+
+ identity of-minimize-load-path {
+ base objective-function-type;
+ description
+ "Objective function for minimizing the load on one or more
+ paths.";
+ reference
+ "RFC 5541: Encoding of Objective Functions in the Path
+ Computation Element Communication Protocol (PCEP)";
+ }
+
+ identity of-maximize-residual-bandwidth {
+ base objective-function-type;
+ description
+ "Objective function for maximizing residual bandwidth.";
+ reference
+ "RFC 5541: Encoding of Objective Functions in the Path
+ Computation Element Communication Protocol (PCEP)";
+ }
+
+ identity of-minimize-agg-bandwidth-consumption {
+ base objective-function-type;
+ description
+ "Objective function for minimizing aggregate bandwidth
+ consumption.";
+ reference
+ "RFC 5541: Encoding of Objective Functions in the Path
+ Computation Element Communication Protocol (PCEP)";
+ }
+
+ identity of-minimize-load-most-loaded-link {
+ base objective-function-type;
+ description
+ "Objective function for minimizing the load on the link that
+ is carrying the highest load.";
+ reference
+ "RFC 5541: Encoding of Objective Functions in the Path
+ Computation Element Communication Protocol (PCEP)";
+ }
+
+ identity of-minimize-cost-path-set {
+ base objective-function-type;
+ description
+ "Objective function for minimizing the cost on a path set.";
+ reference
+ "RFC 5541: Encoding of Objective Functions in the Path
+ Computation Element Communication Protocol (PCEP)";
+ }
+
+ identity path-computation-method {
+ description
+ "Base identity for supported path computation mechanisms.";
+ }
+
+ identity path-locally-computed {
+ base path-computation-method;
+ description
+ "Indicates a constrained-path LSP in which the
+ path is computed by the local LER.";
+ reference
+ "RFC 3272: Overview and Principles of Internet Traffic
+ Engineering, Section 5.4";
+ }
+
+ identity path-externally-queried {
+ base path-computation-method;
+ description
+ "Constrained-path LSP in which the path is obtained by
+ querying an external source, such as a PCE server.
+ In the case that an LSP is defined to be externally queried,
+ it may also have associated explicit definitions (provided
+ to the external source to aid computation). The path that is
+ returned by the external source may require further local
+ computation on the device.";
+ reference
+ "RFC 3272: Overview and Principles of Internet Traffic
+ Engineering
+ RFC 4657: Path Computation Element (PCE) Communication
+ Protocol Generic Requirements";
+ }
+
+ identity path-explicitly-defined {
+ base path-computation-method;
+ description
+ "Constrained-path LSP in which the path is
+ explicitly specified as a collection of strict and/or loose
+ hops.";
+ reference
+ "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels
+ RFC 3272: Overview and Principles of Internet Traffic
+ Engineering";
+ }
+
+ identity lsp-metric-type {
+ description
+ "Base identity for the LSP metric specification types.";
+ }
+
+ identity lsp-metric-relative {
+ base lsp-metric-type;
+ description
+ "The metric specified for the LSPs to which this identity
+ refers is specified as a value relative to the IGP metric
+ cost to the LSP's tail end.";
+ reference
+ "RFC 4657: Path Computation Element (PCE) Communication
+ Protocol Generic Requirements";
+ }
+
+ identity lsp-metric-absolute {
+ base lsp-metric-type;
+ description
+ "The metric specified for the LSPs to which this identity
+ refers is specified as an absolute value.";
+ reference
+ "RFC 4657: Path Computation Element (PCE) Communication
+ Protocol Generic Requirements";
+ }
+
+ identity lsp-metric-inherited {
+ base lsp-metric-type;
+ description
+ "The metric for the LSPs to which this identity refers is
+ not specified explicitly; rather, it is directly inherited
+ from the IGP cost.";
+ reference
+ "RFC 4657: Path Computation Element (PCE) Communication
+ Protocol Generic Requirements";
+ }
+
+ identity te-tunnel-type {
+ description
+ "Base identity from which specific tunnel types are derived.";
+ }
+
+ identity te-tunnel-p2p {
+ base te-tunnel-type;
+ description
+ "TE Point-to-Point (P2P) tunnel type.";
+ reference
+ "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
+ }
+
+ identity te-tunnel-p2mp {
+ base te-tunnel-type;
+ description
+ "TE P2MP tunnel type.";
+ reference
+ "RFC 4875: Extensions to Resource Reservation Protocol -
+ Traffic Engineering (RSVP-TE) for Point-to-Multipoint TE
+ Label Switched Paths (LSPs)";
+ }
+
+ identity tunnel-action-type {
+ description
+ "Base identity from which specific tunnel action types
+ are derived.";
+ }
+
+ identity tunnel-action-resetup {
+ base tunnel-action-type;
+ description
+ "TE tunnel action that tears down the tunnel's current LSP
+ (if any) and attempts to re-establish a new LSP.";
+ }
+
+ identity tunnel-action-reoptimize {
+ base tunnel-action-type;
+ description
+ "TE tunnel action that reoptimizes the placement of the
+ tunnel LSP(s).";
+ }
+
+ identity tunnel-action-switchpath {
+ base tunnel-action-type;
+ description
+ "TE tunnel action that switches the tunnel's LSP to use the
+ specified path.";
+ }
+
+ identity te-action-result {
+ description
+ "Base identity from which specific TE action results
+ are derived.";
+ }
+
+ identity te-action-success {
+ base te-action-result;
+ description
+ "TE action was successful.";
+ }
+
+ identity te-action-fail {
+ base te-action-result;
+ description
+ "TE action failed.";
+ }
+
+ identity tunnel-action-inprogress {
+ base te-action-result;
+ description
+ "TE action is in progress.";
+ }
+
+ identity tunnel-admin-state-type {
+ description
+ "Base identity for TE tunnel administrative states.";
+ }
+
+ identity tunnel-admin-state-up {
+ base tunnel-admin-state-type;
+ description
+ "Tunnel's administrative state is up.";
+ }
+
+ identity tunnel-admin-state-down {
+ base tunnel-admin-state-type;
+ description
+ "Tunnel's administrative state is down.";
+ }
+
+ identity tunnel-state-type {
+ description
+ "Base identity for TE tunnel states.";
+ }
+
+ identity tunnel-state-up {
+ base tunnel-state-type;
+ description
+ "Tunnel's state is up.";
+ }
+
+ identity tunnel-state-down {
+ base tunnel-state-type;
+ description
+ "Tunnel's state is down.";
+ }
+
+ identity lsp-state-type {
+ description
+ "Base identity for TE LSP states.";
+ }
+
+ identity lsp-path-computing {
+ base lsp-state-type;
+ description
+ "State path computation is in progress.";
+ }
+
+ identity lsp-path-computation-ok {
+ base lsp-state-type;
+ description
+ "State path computation was successful.";
+ }
+
+ identity lsp-path-computation-failed {
+ base lsp-state-type;
+ description
+ "State path computation failed.";
+ }
+
+ identity lsp-state-setting-up {
+ base lsp-state-type;
+ description
+ "State is being set up.";
+ }
+
+ identity lsp-state-setup-ok {
+ base lsp-state-type;
+ description
+ "State setup was successful.";
+ }
+
+ identity lsp-state-setup-failed {
+ base lsp-state-type;
+ description
+ "State setup failed.";
+ }
+
+ identity lsp-state-up {
+ base lsp-state-type;
+ description
+ "State is up.";
+ }
+
+ identity lsp-state-tearing-down {
+ base lsp-state-type;
+ description
+ "State is being torn down.";
+ }
+
+ identity lsp-state-down {
+ base lsp-state-type;
+ description
+ "State is down.";
+ }
+
+ identity path-invalidation-action-type {
+ description
+ "Base identity for TE path invalidation action types.";
+ }
+
+ identity path-invalidation-action-drop {
+ base path-invalidation-action-type;
+ description
+ "Upon invalidation of the TE tunnel path, the tunnel remains
+ valid, but any packet mapped over the tunnel is dropped.";
+ reference
+ "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
+ Section 2.5";
+ }
+
+ identity path-invalidation-action-teardown {
+ base path-invalidation-action-type;
+ description
+ "TE path invalidation action teardown.";
+ reference
+ "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
+ Section 2.5";
+ }
+
+ identity lsp-restoration-type {
+ description
+ "Base identity from which LSP restoration types are derived.";
+ }
+
+ identity lsp-restoration-restore-any {
+ base lsp-restoration-type;
+ description
+ "Any LSP affected by a failure is restored.";
+ }
+
+ identity lsp-restoration-restore-all {
+ base lsp-restoration-type;
+ description
+ "Affected LSPs are restored after all LSPs of the tunnel are
+ broken.";
+ }
+
+ identity restoration-scheme-type {
+ description
+ "Base identity for LSP restoration schemes.";
+ }
+
+ identity restoration-scheme-preconfigured {
+ base restoration-scheme-type;
+ description
+ "Restoration LSP is preconfigured prior to the failure.";
+ reference
+ "RFC 4427: Recovery (Protection and Restoration) Terminology
+ for Generalized Multi-Protocol Label Switching (GMPLS)";
+ }
+
+ identity restoration-scheme-precomputed {
+ base restoration-scheme-type;
+ description
+ "Restoration LSP is precomputed prior to the failure.";
+ reference
+ "RFC 4427: Recovery (Protection and Restoration) Terminology
+ for Generalized Multi-Protocol Label Switching (GMPLS)";
+ }
+
+ identity restoration-scheme-presignaled {
+ base restoration-scheme-type;
+ description
+ "Restoration LSP is presignaled prior to the failure.";
+ reference
+ "RFC 4427: Recovery (Protection and Restoration) Terminology
+ for Generalized Multi-Protocol Label Switching (GMPLS)";
+ }
+
+ identity lsp-protection-type {
+ description
+ "Base identity from which LSP protection types are derived.";
+ reference
+ "RFC 4872: RSVP-TE Extensions in Support of End-to-End
+ Generalized Multi-Protocol Label Switching (GMPLS) Recovery";
+ }
+
+ identity lsp-protection-unprotected {
+ base lsp-protection-type;
+ description
+ "'Unprotected' LSP protection type.";
+ reference
+ "RFC 4872: RSVP-TE Extensions in Support of End-to-End
+ Generalized Multi-Protocol Label Switching (GMPLS) Recovery";
+ }
+
+ identity lsp-protection-reroute-extra {
+ base lsp-protection-type;
+ description
+ "'(Full) Rerouting' LSP protection type.";
+ reference
+ "RFC 4872: RSVP-TE Extensions in Support of End-to-End
+ Generalized Multi-Protocol Label Switching (GMPLS) Recovery";
+ }
+
+ identity lsp-protection-reroute {
+ base lsp-protection-type;
+ description
+ "'Rerouting without Extra-Traffic' LSP protection type.";
+ reference
+ "RFC 4872: RSVP-TE Extensions in Support of End-to-End
+ Generalized Multi-Protocol Label Switching (GMPLS) Recovery";
+ }
+
+ identity lsp-protection-1-for-n {
+ base lsp-protection-type;
+ description
+ "'1:N Protection with Extra-Traffic' LSP protection type.";
+ reference
+ "RFC 4872: RSVP-TE Extensions in Support of End-to-End
+ Generalized Multi-Protocol Label Switching (GMPLS) Recovery";
+ }
+
+ identity lsp-protection-1-for-1 {
+ base lsp-protection-type;
+ description
+ "LSP protection '1:1 Protection Type'.";
+ reference
+ "RFC 4872: RSVP-TE Extensions in Support of End-to-End
+ Generalized Multi-Protocol Label Switching (GMPLS) Recovery";
+ }
+
+ identity lsp-protection-unidir-1-plus-1 {
+ base lsp-protection-type;
+ description
+ "'1+1 Unidirectional Protection' LSP protection type.";
+ reference
+ "RFC 4872: RSVP-TE Extensions in Support of End-to-End
+ Generalized Multi-Protocol Label Switching (GMPLS) Recovery";
+ }
+
+ identity lsp-protection-bidir-1-plus-1 {
+ base lsp-protection-type;
+ description
+ "'1+1 Bidirectional Protection' LSP protection type.";
+ reference
+ "RFC 4872: RSVP-TE Extensions in Support of End-to-End
+ Generalized Multi-Protocol Label Switching (GMPLS) Recovery";
+ }
+
+ identity lsp-protection-extra-traffic {
+ base lsp-protection-type;
+ description
+ "Extra-Traffic LSP protection type.";
+ reference
+ "RFC 4427: Recovery (Protection and Restoration) Terminology
+ for Generalized Multi-Protocol Label Switching (GMPLS)";
+ }
+
+ identity lsp-protection-state {
+ description
+ "Base identity of protection states for reporting purposes.";
+ }
+
+ identity normal {
+ base lsp-protection-state;
+ description
+ "Normal state.";
+ }
+
+ identity signal-fail-of-protection {
+ base lsp-protection-state;
+ description
+ "The protection transport entity has a signal fail condition
+ that is of higher priority than the forced switchover
+ command.";
+ reference
+ "RFC 4427: Recovery (Protection and Restoration) Terminology
+ for Generalized Multi-Protocol Label Switching (GMPLS)";
+ }
+
+ identity lockout-of-protection {
+ base lsp-protection-state;
+ description
+ "A Loss of Protection (LoP) command is active.";
+ reference
+ "RFC 4427: Recovery (Protection and Restoration) Terminology
+ for Generalized Multi-Protocol Label Switching (GMPLS)";
+ }
+
+ identity forced-switch {
+ base lsp-protection-state;
+ description
+ "A forced switchover command is active.";
+ reference
+ "RFC 4427: Recovery (Protection and Restoration) Terminology
+ for Generalized Multi-Protocol Label Switching (GMPLS)";
+ }
+
+ identity signal-fail {
+ base lsp-protection-state;
+ description
+ "There is a signal fail condition on either the working path
+ or the protection path.";
+ reference
+ "RFC 4427: Recovery (Protection and Restoration) Terminology
+ for Generalized Multi-Protocol Label Switching (GMPLS)";
+ }
+
+ identity signal-degrade {
+ base lsp-protection-state;
+ description
+ "There is a signal degrade condition on either the working
+ path or the protection path.";
+ reference
+ "RFC 4427: Recovery (Protection and Restoration) Terminology
+ for Generalized Multi-Protocol Label Switching (GMPLS)";
+ }
+
+ identity manual-switch {
+ base lsp-protection-state;
+ description
+ "A manual switchover command is active.";
+ reference
+ "RFC 4427: Recovery (Protection and Restoration) Terminology
+ for Generalized Multi-Protocol Label Switching (GMPLS)";
+ }
+
+ identity wait-to-restore {
+ base lsp-protection-state;
+ description
+ "A WTR timer is running.";
+ reference
+ "RFC 4427: Recovery (Protection and Restoration) Terminology
+ for Generalized Multi-Protocol Label Switching (GMPLS)";
+ }
+
+ identity do-not-revert {
+ base lsp-protection-state;
+ description
+ "A Do Not Revert (DNR) condition is active because of
+ non-revertive behavior.";
+ reference
+ "RFC 4427: Recovery (Protection and Restoration) Terminology
+ for Generalized Multi-Protocol Label Switching (GMPLS)";
+ }
+
+ identity failure-of-protocol {
+ base lsp-protection-state;
+ description
+ "LSP protection is not working because of a protocol failure
+ condition.";
+ reference
+ "RFC 4427: Recovery (Protection and Restoration) Terminology
+ for Generalized Multi-Protocol Label Switching (GMPLS)";
+ }
+
+ identity protection-external-commands {
+ description
+ "Base identity from which protection-related external commands
+ used for troubleshooting purposes are derived.";
+ }
+
+ identity action-freeze {
+ base protection-external-commands;
+ description
+ "A temporary configuration action initiated by an operator
+ command that prevents any switchover action from being taken
+ and, as such, freezes the current state.";
+ reference
+ "RFC 4427: Recovery (Protection and Restoration) Terminology
+ for Generalized Multi-Protocol Label Switching (GMPLS)";
+ }
+
+ identity clear-freeze {
+ base protection-external-commands;
+ description
+ "An action that clears the active freeze state.";
+ reference
+ "RFC 4427: Recovery (Protection and Restoration) Terminology
+ for Generalized Multi-Protocol Label Switching (GMPLS)";
+ }
+
+ identity action-lockout-of-normal {
+ base protection-external-commands;
+ description
+ "A temporary configuration action initiated by an operator
+ command to ensure that the normal traffic is not allowed
+ to use the protection transport entity.";
+ reference
+ "RFC 4427: Recovery (Protection and Restoration) Terminology
+ for Generalized Multi-Protocol Label Switching (GMPLS)";
+ }
+
+ identity clear-lockout-of-normal {
+ base protection-external-commands;
+ description
+ "An action that clears the active lockout of the
+ normal state.";
+ reference
+ "RFC 4427: Recovery (Protection and Restoration) Terminology
+ for Generalized Multi-Protocol Label Switching (GMPLS)";
+ }
+
+ identity action-lockout-of-protection {
+ base protection-external-commands;
+ description
+ "A temporary configuration action initiated by an operator
+ command to ensure that the protection transport entity is
+ temporarily not available to transport a traffic signal
+ (either normal or Extra-Traffic).";
+ reference
+ "RFC 4427: Recovery (Protection and Restoration) Terminology
+ for Generalized Multi-Protocol Label Switching (GMPLS)";
+ }
+
+ identity action-forced-switch {
+ base protection-external-commands;
+ description
+ "A switchover action initiated by an operator command to switch
+ the Extra-Traffic signal, the normal traffic signal, or the
+ null signal to the protection transport entity, unless a
+ switchover command of equal or higher priority is in effect.";
+ reference
+ "RFC 4427: Recovery (Protection and Restoration) Terminology
+ for Generalized Multi-Protocol Label Switching (GMPLS)";
+ }
+
+ identity action-manual-switch {
+ base protection-external-commands;
+ description
+ "A switchover action initiated by an operator command to switch
+ the Extra-Traffic signal, the normal traffic signal, or
+ the null signal to the protection transport entity, unless
+ a fault condition exists on other transport entities or a
+ switchover command of equal or higher priority is in effect.";
+ reference
+ "RFC 4427: Recovery (Protection and Restoration) Terminology
+ for Generalized Multi-Protocol Label Switching (GMPLS)";
+ }
+
+ identity action-exercise {
+ base protection-external-commands;
+ description
+ "An action that starts testing whether or not APS communication
+ is operating correctly. It is of lower priority than any
+ other state or command.";
+ reference
+ "RFC 4427: Recovery (Protection and Restoration) Terminology
+ for Generalized Multi-Protocol Label Switching (GMPLS)";
+ }
+
+ identity clear {
+ base protection-external-commands;
+ description
+ "An action that clears the active near-end lockout of a
+ protection, forced switchover, manual switchover, WTR state,
+ or exercise command.";
+ reference
+ "RFC 4427: Recovery (Protection and Restoration) Terminology
+ for Generalized Multi-Protocol Label Switching (GMPLS)";
+ }
+
+ identity switching-capabilities {
+ description
+ "Base identity for interface switching capabilities.";
+ reference
+ "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS)
+ Signaling Functional Description";
+ }
+
+ identity switching-psc1 {
+ base switching-capabilities;
+ description
+ "Packet-Switch Capable-1 (PSC-1).";
+ reference
+ "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS)
+ Signaling Functional Description";
+ }
+
+ identity switching-evpl {
+ base switching-capabilities;
+ description
+ "Ethernet Virtual Private Line (EVPL).";
+ reference
+ "RFC 6004: Generalized MPLS (GMPLS) Support for Metro Ethernet
+ Forum and G.8011 Ethernet Service Switching";
+ }
+
+ identity switching-l2sc {
+ base switching-capabilities;
+ description
+ "Layer-2 Switch Capable (L2SC).";
+ reference
+ "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS)
+ Signaling Functional Description";
+ }
+
+ identity switching-tdm {
+ base switching-capabilities;
+ description
+ "Time-Division-Multiplex Capable (TDM).";
+ reference
+ "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS)
+ Signaling Functional Description";
+ }
+
+ identity switching-otn {
+ base switching-capabilities;
+ description
+ "OTN-TDM capable.";
+ reference
+ "RFC 7138: Traffic Engineering Extensions to OSPF for GMPLS
+ Control of Evolving G.709 Optical Transport Networks";
+ }
+
+ identity switching-dcsc {
+ base switching-capabilities;
+ description
+ "Data Channel Switching Capable (DCSC).";
+ reference
+ "RFC 6002: Generalized MPLS (GMPLS) Data Channel
+ Switching Capable (DCSC) and Channel Set Label Extensions";
+ }
+
+ identity switching-lsc {
+ base switching-capabilities;
+ description
+ "Lambda-Switch Capable (LSC).";
+ reference
+ "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS)
+ Signaling Functional Description";
+ }
+
+ identity switching-fsc {
+ base switching-capabilities;
+ description
+ "Fiber-Switch Capable (FSC).";
+ reference
+ "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS)
+ Signaling Functional Description";
+ }
+
+ identity lsp-encoding-types {
+ description
+ "Base identity for encoding types.";
+ reference
+ "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS)
+ Signaling Functional Description";
+ }
+
+ identity lsp-encoding-packet {
+ base lsp-encoding-types;
+ description
+ "Packet LSP encoding.";
+ reference
+ "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS)
+ Signaling Functional Description";
+ }
+
+ identity lsp-encoding-ethernet {
+ base lsp-encoding-types;
+ description
+ "Ethernet LSP encoding.";
+ reference
+ "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS)
+ Signaling Functional Description";
+ }
+
+ identity lsp-encoding-pdh {
+ base lsp-encoding-types;
+ description
+ "ANSI/ETSI PDH LSP encoding.";
+ reference
+ "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS)
+ Signaling Functional Description";
+ }
+
+ identity lsp-encoding-sdh {
+ base lsp-encoding-types;
+ description
+ "SDH ITU-T G.707 / SONET ANSI T1.105 LSP encoding.";
+ reference
+ "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS)
+ Signaling Functional Description";
+ }
+
+ identity lsp-encoding-digital-wrapper {
+ base lsp-encoding-types;
+ description
+ "Digital Wrapper LSP encoding.";
+ reference
+ "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS)
+ Signaling Functional Description";
+ }
+
+ identity lsp-encoding-lambda {
+ base lsp-encoding-types;
+ description
+ "Lambda (photonic) LSP encoding.";
+ reference
+ "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS)
+ Signaling Functional Description";
+ }
+
+ identity lsp-encoding-fiber {
+ base lsp-encoding-types;
+ description
+ "Fiber LSP encoding.";
+ reference
+ "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS)
+ Signaling Functional Description";
+ }
+
+ identity lsp-encoding-fiber-channel {
+ base lsp-encoding-types;
+ description
+ "FiberChannel LSP encoding.";
+ reference
+ "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS)
+ Signaling Functional Description";
+ }
+
+ identity lsp-encoding-oduk {
+ base lsp-encoding-types;
+ description
+ "G.709 ODUk (Digital Path) LSP encoding.";
+ reference
+ "RFC 4328: Generalized Multi-Protocol Label Switching (GMPLS)
+ Signaling Extensions for G.709 Optical Transport Networks
+ Control";
+ }
+
+ identity lsp-encoding-optical-channel {
+ base lsp-encoding-types;
+ description
+ "G.709 Optical Channel LSP encoding.";
+ reference
+ "RFC 4328: Generalized Multi-Protocol Label Switching (GMPLS)
+ Signaling Extensions for G.709 Optical Transport Networks
+ Control";
+ }
+
+ identity lsp-encoding-line {
+ base lsp-encoding-types;
+ description
+ "Line (e.g., 8B/10B) LSP encoding.";
+ reference
+ "RFC 6004: Generalized MPLS (GMPLS) Support for Metro
+ Ethernet Forum and G.8011 Ethernet Service Switching";
+ }
+
+ identity path-signaling-type {
+ description
+ "Base identity from which specific LSP path setup types
+ are derived.";
+ }
+
+ identity path-setup-static {
+ base path-signaling-type;
+ description
+ "Static LSP provisioning path setup.";
+ }
+
+ identity path-setup-rsvp {
+ base path-signaling-type;
+ description
+ "RSVP-TE signaling path setup.";
+ reference
+ "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
+ }
+
+ identity path-setup-sr {
+ base path-signaling-type;
+ description
+ "Segment-routing path setup.";
+ }
+
+ identity path-scope-type {
+ description
+ "Base identity from which specific path scope types are
+ derived.";
+ }
+
+ identity path-scope-segment {
+ base path-scope-type;
+ description
+ "Path scope segment.";
+ reference
+ "RFC 4873: GMPLS Segment Recovery";
+ }
+
+ identity path-scope-end-to-end {
+ base path-scope-type;
+ description
+ "Path scope end to end.";
+ reference
+ "RFC 4873: GMPLS Segment Recovery";
+ }
+
+ identity route-usage-type {
+ description
+ "Base identity for route usage.";
+ }
+
+ identity route-include-object {
+ base route-usage-type;
+ description
+ "'Include route' object.";
+ }
+
+ identity route-exclude-object {
+ base route-usage-type;
+ description
+ "'Exclude route' object.";
+ reference
+ "RFC 4874: Exclude Routes - Extension to Resource ReserVation
+ Protocol-Traffic Engineering (RSVP-TE)";
+ }
+
+ identity route-exclude-srlg {
+ base route-usage-type;
+ description
+ "Excludes SRLGs.";
+ reference
+ "RFC 4874: Exclude Routes - Extension to Resource ReserVation
+ Protocol-Traffic Engineering (RSVP-TE)";
+ }
+
+ identity path-metric-type {
+ description
+ "Base identity for the path metric type.";
+ }
+
+ identity path-metric-te {
+ base path-metric-type;
+ description
+ "TE path metric.";
+ reference
+ "RFC 3785: Use of Interior Gateway Protocol (IGP) Metric as a
+ second MPLS Traffic Engineering (TE) Metric";
+ }
+
+ identity path-metric-igp {
+ base path-metric-type;
+ description
+ "IGP path metric.";
+ reference
+ "RFC 3785: Use of Interior Gateway Protocol (IGP) Metric as a
+ second MPLS Traffic Engineering (TE) Metric";
+ }
+
+ identity path-metric-hop {
+ base path-metric-type;
+ description
+ "Hop path metric.";
+ }
+
+ identity path-metric-delay-average {
+ base path-metric-type;
+ description
+ "Average unidirectional link delay.";
+ reference
+ "RFC 7471: OSPF Traffic Engineering (TE) Metric Extensions";
+ }
+
+ identity path-metric-delay-minimum {
+ base path-metric-type;
+ description
+ "Minimum unidirectional link delay.";
+ reference
+ "RFC 7471: OSPF Traffic Engineering (TE) Metric Extensions";
+ }
+
+ identity path-metric-residual-bandwidth {
+ base path-metric-type;
+ description
+ "Unidirectional Residual Bandwidth, which is defined to be
+ Maximum Bandwidth (RFC 3630) minus the bandwidth currently
+ allocated to LSPs.";
+ reference
+ "RFC 3630: Traffic Engineering (TE) Extensions to OSPF
+ Version 2
+ RFC 7471: OSPF Traffic Engineering (TE) Metric Extensions";
+ }
+
+ identity path-metric-optimize-includes {
+ base path-metric-type;
+ description
+ "A metric that optimizes the number of included resources
+ specified in a set.";
+ }
+
+ identity path-metric-optimize-excludes {
+ base path-metric-type;
+ description
+ "A metric that optimizes to a maximum the number of excluded
+ resources specified in a set.";
+ }
+
+ identity path-tiebreaker-type {
+ description
+ "Base identity for the path tiebreaker type.";
+ }
+
+ identity path-tiebreaker-minfill {
+ base path-tiebreaker-type;
+ description
+ "Min-Fill LSP path placement.";
+ }
+
+ identity path-tiebreaker-maxfill {
+ base path-tiebreaker-type;
+ description
+ "Max-Fill LSP path placement.";
+ }
+
+ identity path-tiebreaker-random {
+ base path-tiebreaker-type;
+ description
+ "Random LSP path placement.";
+ }
+
+ identity resource-affinities-type {
+ description
+ "Base identity for resource class affinities.";
+ reference
+ "RFC 2702: Requirements for Traffic Engineering Over MPLS";
+ }
+
+ identity resource-aff-include-all {
+ base resource-affinities-type;
+ description
+ "The set of attribute filters associated with a
+ tunnel, all of which must be present for a link
+ to be acceptable.";
+ reference
+ "RFC 2702: Requirements for Traffic Engineering Over MPLS
+ RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
+ }
+
+ identity resource-aff-include-any {
+ base resource-affinities-type;
+ description
+ "The set of attribute filters associated with a
+ tunnel, any of which must be present for a link
+ to be acceptable.";
+ reference
+ "RFC 2702: Requirements for Traffic Engineering Over MPLS
+ RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
+ }
+
+ identity resource-aff-exclude-any {
+ base resource-affinities-type;
+ description
+ "The set of attribute filters associated with a
+ tunnel, any of which renders a link unacceptable.";
+ reference
+ "RFC 2702: Requirements for Traffic Engineering Over MPLS
+ RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
+ }
+
+ identity te-optimization-criterion {
+ description
+ "Base identity for the TE optimization criteria.";
+ reference
+ "RFC 3272: Overview and Principles of Internet Traffic
+ Engineering";
+ }
+
+ identity not-optimized {
+ base te-optimization-criterion;
+ description
+ "Optimization is not applied.";
+ }
+
+ identity cost {
+ base te-optimization-criterion;
+ description
+ "Optimized on cost.";
+ reference
+ "RFC 5541: Encoding of Objective Functions in the Path
+ Computation Element Communication Protocol (PCEP)";
+ }
+
+ identity delay {
+ base te-optimization-criterion;
+ description
+ "Optimized on delay.";
+ reference
+ "RFC 5541: Encoding of Objective Functions in the Path
+ Computation Element Communication Protocol (PCEP)";
+ }
+
+ identity path-computation-srlg-type {
+ description
+ "Base identity for SRLG path computation.";
+ }
+
+ identity srlg-ignore {
+ base path-computation-srlg-type;
+ description
+ "Ignores SRLGs in the path computation.";
+ }
+
+ identity srlg-strict {
+ base path-computation-srlg-type;
+ description
+ "Includes a strict SRLG check in the path computation.";
+ }
+
+ identity srlg-preferred {
+ base path-computation-srlg-type;
+ description
+ "Includes a preferred SRLG check in the path computation.";
+ }
+
+ identity srlg-weighted {
+ base path-computation-srlg-type;
+ description
+ "Includes a weighted SRLG check in the path computation.";
+ }
+
+ /**
+ * TE bandwidth groupings
+ **/
+
+ grouping te-bandwidth {
+ description
+ "This grouping defines the generic TE bandwidth.
+ For some known data-plane technologies, specific modeling
+ structures are specified. The string-encoded 'te-bandwidth'
+ type is used for unspecified technologies.
+ The modeling structure can be augmented later for other
+ technologies.";
+ container te-bandwidth {
+ description
+ "Container that specifies TE bandwidth. The choices
+ can be augmented for specific data-plane technologies.";
+ choice technology {
+ default "generic";
+ description
+ "Data-plane technology type.";
+ case generic {
+ leaf generic {
+ type te-bandwidth;
+ description
+ "Bandwidth specified in a generic format.";
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * TE label groupings
+ **/
+
+ grouping te-label {
+ description
+ "This grouping defines the generic TE label.
+ The modeling structure can be augmented for each technology.
+ For unspecified technologies, 'rt-types:generalized-label'
+ is used.";
+ container te-label {
+ description
+ "Container that specifies the TE label. The choices can
+ be augmented for specific data-plane technologies.";
+ choice technology {
+ default "generic";
+ description
+ "Data-plane technology type.";
+ case generic {
+ leaf generic {
+ type rt-types:generalized-label;
+ description
+ "TE label specified in a generic format.";
+ }
+ }
+ }
+ leaf direction {
+ type te-label-direction;
+ default "forward";
+ description
+ "Label direction.";
+ }
+ }
+ }
+
+ grouping te-topology-identifier {
+ description
+ "Augmentation for a TE topology.";
+ container te-topology-identifier {
+ description
+ "TE topology identifier container.";
+ leaf provider-id {
+ type te-global-id;
+ default "0";
+ description
+ "An identifier to uniquely identify a provider.
+ If omitted, it assumes that the topology provider ID
+ value = 0 (the default).";
+ }
+ leaf client-id {
+ type te-global-id;
+ default "0";
+ description
+ "An identifier to uniquely identify a client.
+ If omitted, it assumes that the topology client ID
+ value = 0 (the default).";
+ }
+ leaf topology-id {
+ type te-topology-id;
+ default "";
+ description
+ "When the datastore contains several topologies,
+ 'topology-id' distinguishes between them. If omitted,
+ the default (empty) string for this leaf is assumed.";
+ }
+ }
+ }
+
+ /**
+ * TE performance metrics groupings
+ **/
+
+ grouping performance-metrics-one-way-delay-loss {
+ description
+ "Performance Metrics (PM) information in real time that can
+ be applicable to links or connections. PM defined in this
+ grouping are applicable to generic TE PM as well as packet TE
+ PM.";
+ reference
+ "RFC 7471: OSPF Traffic Engineering (TE) Metric Extensions
+ RFC 7823: Performance-Based Path Selection for Explicitly
+ Routed Label Switched Paths (LSPs) Using TE Metric
+ Extensions
+ RFC 8570: IS-IS Traffic Engineering (TE) Metric Extensions";
+ leaf one-way-delay {
+ type uint32 {
+ range "0..16777215";
+ }
+ description
+ "One-way delay or latency in microseconds.";
+ }
+ leaf one-way-delay-normality {
+ type te-types:performance-metrics-normality;
+ description
+ "One-way delay normality.";
+ }
+ }
+
+ grouping performance-metrics-two-way-delay-loss {
+ description
+ "PM information in real time that can be applicable to links or
+ connections. PM defined in this grouping are applicable to
+ generic TE PM as well as packet TE PM.";
+ reference
+ "RFC 7471: OSPF Traffic Engineering (TE) Metric Extensions
+ RFC 7823: Performance-Based Path Selection for Explicitly
+ Routed Label Switched Paths (LSPs) Using TE Metric
+ Extensions
+ RFC 8570: IS-IS Traffic Engineering (TE) Metric Extensions";
+ leaf two-way-delay {
+ type uint32 {
+ range "0..16777215";
+ }
+ description
+ "Two-way delay or latency in microseconds.";
+ }
+ leaf two-way-delay-normality {
+ type te-types:performance-metrics-normality;
+ description
+ "Two-way delay normality.";
+ }
+ }
+
+ grouping performance-metrics-one-way-bandwidth {
+ description
+ "PM information in real time that can be applicable to links.
+ PM defined in this grouping are applicable to generic TE PM
+ as well as packet TE PM.";
+ reference
+ "RFC 7471: OSPF Traffic Engineering (TE) Metric Extensions
+ RFC 7823: Performance-Based Path Selection for Explicitly
+ Routed Label Switched Paths (LSPs) Using TE Metric
+ Extensions
+ RFC 8570: IS-IS Traffic Engineering (TE) Metric Extensions";
+ leaf one-way-residual-bandwidth {
+ type rt-types:bandwidth-ieee-float32;
+ units "bytes per second";
+ default "0x0p0";
+ description
+ "Residual bandwidth that subtracts tunnel reservations from
+ Maximum Bandwidth (or link capacity) (RFC 3630) and
+ provides an aggregated remainder across QoS classes.";
+ reference
+ "RFC 3630: Traffic Engineering (TE) Extensions to OSPF
+ Version 2";
+ }
+ leaf one-way-residual-bandwidth-normality {
+ type te-types:performance-metrics-normality;
+ default "normal";
+ description
+ "Residual bandwidth normality.";
+ }
+ leaf one-way-available-bandwidth {
+ type rt-types:bandwidth-ieee-float32;
+ units "bytes per second";
+ default "0x0p0";
+ description
+ "Available bandwidth that is defined to be residual
+ bandwidth minus the measured bandwidth used for the
+ actual forwarding of non-RSVP-TE LSP packets. For a
+ bundled link, available bandwidth is defined to be the
+ sum of the component link available bandwidths.";
+ }
+ leaf one-way-available-bandwidth-normality {
+ type te-types:performance-metrics-normality;
+ default "normal";
+ description
+ "Available bandwidth normality.";
+ }
+ leaf one-way-utilized-bandwidth {
+ type rt-types:bandwidth-ieee-float32;
+ units "bytes per second";
+ default "0x0p0";
+ description
+ "Bandwidth utilization that represents the actual
+ utilization of the link (i.e., as measured in the router).
+ For a bundled link, bandwidth utilization is defined to
+ be the sum of the component link bandwidth utilizations.";
+ }
+ leaf one-way-utilized-bandwidth-normality {
+ type te-types:performance-metrics-normality;
+ default "normal";
+ description
+ "Bandwidth utilization normality.";
+ }
+ }
+
+ grouping one-way-performance-metrics {
+ description
+ "One-way PM throttle grouping.";
+ leaf one-way-delay {
+ type uint32 {
+ range "0..16777215";
+ }
+ default "0";
+ description
+ "One-way delay or latency in microseconds.";
+ }
+ leaf one-way-residual-bandwidth {
+ type rt-types:bandwidth-ieee-float32;
+ units "bytes per second";
+ default "0x0p0";
+ description
+ "Residual bandwidth that subtracts tunnel reservations from
+ Maximum Bandwidth (or link capacity) (RFC 3630) and
+ provides an aggregated remainder across QoS classes.";
+ reference
+ "RFC 3630: Traffic Engineering (TE) Extensions to OSPF
+ Version 2";
+ }
+ leaf one-way-available-bandwidth {
+ type rt-types:bandwidth-ieee-float32;
+ units "bytes per second";
+ default "0x0p0";
+ description
+ "Available bandwidth that is defined to be residual
+ bandwidth minus the measured bandwidth used for the
+ actual forwarding of non-RSVP-TE LSP packets. For a
+ bundled link, available bandwidth is defined to be the
+ sum of the component link available bandwidths.";
+ }
+ leaf one-way-utilized-bandwidth {
+ type rt-types:bandwidth-ieee-float32;
+ units "bytes per second";
+ default "0x0p0";
+ description
+ "Bandwidth utilization that represents the actual
+ utilization of the link (i.e., as measured in the router).
+ For a bundled link, bandwidth utilization is defined to
+ be the sum of the component link bandwidth utilizations.";
+ }
+ }
+
+ grouping two-way-performance-metrics {
+ description
+ "Two-way PM throttle grouping.";
+ leaf two-way-delay {
+ type uint32 {
+ range "0..16777215";
+ }
+ default "0";
+ description
+ "Two-way delay or latency in microseconds.";
+ }
+ }
+
+ grouping performance-metrics-thresholds {
+ description
+ "Grouping for configurable thresholds for measured
+ attributes.";
+ uses one-way-performance-metrics;
+ uses two-way-performance-metrics;
+ }
+
+ grouping performance-metrics-attributes {
+ description
+ "Contains PM attributes.";
+ container performance-metrics-one-way {
+ description
+ "One-way link performance information in real time.";
+ reference
+ "RFC 7471: OSPF Traffic Engineering (TE) Metric Extensions
+ RFC 7823: Performance-Based Path Selection for Explicitly
+ Routed Label Switched Paths (LSPs) Using TE Metric
+ Extensions
+ RFC 8570: IS-IS Traffic Engineering (TE) Metric Extensions";
+ uses performance-metrics-one-way-delay-loss;
+ uses performance-metrics-one-way-bandwidth;
+ }
+ container performance-metrics-two-way {
+ description
+ "Two-way link performance information in real time.";
+ reference
+ "RFC 6374: Packet Loss and Delay Measurement for MPLS
+ Networks";
+ uses performance-metrics-two-way-delay-loss;
+ }
+ }
+
+ grouping performance-metrics-throttle-container {
+ description
+ "Controls PM throttling.";
+ container throttle {
+ must 'suppression-interval >= measure-interval' {
+ error-message "'suppression-interval' cannot be less than "
+ + "'measure-interval'.";
+ description
+ "Constraint on 'suppression-interval' and
+ 'measure-interval'.";
+ }
+ description
+ "Link performance information in real time.";
+ reference
+ "RFC 7471: OSPF Traffic Engineering (TE) Metric Extensions
+ RFC 7823: Performance-Based Path Selection for Explicitly
+ Routed Label Switched Paths (LSPs) Using TE Metric
+ Extensions
+ RFC 8570: IS-IS Traffic Engineering (TE) Metric Extensions";
+ leaf one-way-delay-offset {
+ type uint32 {
+ range "0..16777215";
+ }
+ default "0";
+ description
+ "Offset value to be added to the measured delay value.";
+ }
+ leaf measure-interval {
+ type uint32;
+ default "30";
+ description
+ "Interval, in seconds, to measure the extended metric
+ values.";
+ }
+ leaf advertisement-interval {
+ type uint32;
+ default "0";
+ description
+ "Interval, in seconds, to advertise the extended metric
+ values.";
+ }
+ leaf suppression-interval {
+ type uint32 {
+ range "1..max";
+ }
+ default "120";
+ description
+ "Interval, in seconds, to suppress advertisement of the
+ extended metric values.";
+ reference
+ "RFC 8570: IS-IS Traffic Engineering (TE) Metric
+ Extensions, Section 6";
+ }
+ container threshold-out {
+ uses performance-metrics-thresholds;
+ description
+ "If the measured parameter falls outside an upper bound
+ for all but the minimum-delay metric (or a lower bound
+ for the minimum-delay metric only) and the advertised
+ value is not already outside that bound, an 'anomalous'
+ announcement (anomalous bit set) will be triggered.";
+ }
+ container threshold-in {
+ uses performance-metrics-thresholds;
+ description
+ "If the measured parameter falls inside an upper bound
+ for all but the minimum-delay metric (or a lower bound
+ for the minimum-delay metric only) and the advertised
+ value is not already inside that bound, a 'normal'
+ announcement (anomalous bit cleared) will be triggered.";
+ }
+ container threshold-accelerated-advertisement {
+ description
+ "When the difference between the last advertised value and
+ the current measured value exceeds this threshold, an
+ 'anomalous' announcement (anomalous bit set) will be
+ triggered.";
+ uses performance-metrics-thresholds;
+ }
+ }
+ }
+
+ /**
+ * TE tunnel generic groupings
+ **/
+
+ grouping explicit-route-hop {
+ description
+ "The explicit route entry grouping.";
+ choice type {
+ description
+ "The explicit route entry type.";
+ case numbered-node-hop {
+ container numbered-node-hop {
+ leaf node-id {
+ type te-node-id;
+ mandatory true;
+ description
+ "The identifier of a node in the TE topology.";
+ }
+ leaf hop-type {
+ type te-hop-type;
+ default "strict";
+ description
+ "Strict or loose hop.";
+ }
+ description
+ "Numbered node route hop.";
+ reference
+ "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
+ Section 4.3, EXPLICIT_ROUTE in RSVP-TE
+ RFC 3477: Signalling Unnumbered Links in Resource
+ ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
+ }
+ }
+ case numbered-link-hop {
+ container numbered-link-hop {
+ leaf link-tp-id {
+ type te-tp-id;
+ mandatory true;
+ description
+ "TE Link Termination Point (LTP) identifier.";
+ }
+ leaf hop-type {
+ type te-hop-type;
+ default "strict";
+ description
+ "Strict or loose hop.";
+ }
+ leaf direction {
+ type te-link-direction;
+ default "outgoing";
+ description
+ "Link route object direction.";
+ }
+ description
+ "Numbered link explicit route hop.";
+ reference
+ "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
+ Section 4.3, EXPLICIT_ROUTE in RSVP-TE
+ RFC 3477: Signalling Unnumbered Links in Resource
+ ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
+ }
+ }
+ case unnumbered-link-hop {
+ container unnumbered-link-hop {
+ leaf link-tp-id {
+ type te-tp-id;
+ mandatory true;
+ description
+ "TE LTP identifier. The combination of the TE link ID
+ and the TE node ID is used to identify an unnumbered
+ TE link.";
+ }
+ leaf node-id {
+ type te-node-id;
+ mandatory true;
+ description
+ "The identifier of a node in the TE topology.";
+ }
+ leaf hop-type {
+ type te-hop-type;
+ default "strict";
+ description
+ "Strict or loose hop.";
+ }
+ leaf direction {
+ type te-link-direction;
+ default "outgoing";
+ description
+ "Link route object direction.";
+ }
+ description
+ "Unnumbered link explicit route hop.";
+ reference
+ "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
+ Section 4.3, EXPLICIT_ROUTE in RSVP-TE
+ RFC 3477: Signalling Unnumbered Links in Resource
+ ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
+ }
+ }
+ case as-number {
+ container as-number-hop {
+ leaf as-number {
+ type inet:as-number;
+ mandatory true;
+ description
+ "The Autonomous System (AS) number.";
+ }
+ leaf hop-type {
+ type te-hop-type;
+ default "strict";
+ description
+ "Strict or loose hop.";
+ }
+ description
+ "AS explicit route hop.";
+ }
+ }
+ case label {
+ container label-hop {
+ description
+ "Label hop type.";
+ uses te-label;
+ }
+ description
+ "The label explicit route hop type.";
+ }
+ }
+ }
+
+ grouping record-route-state {
+ description
+ "The Record Route grouping.";
+ leaf index {
+ type uint32;
+ description
+ "Record Route hop index. The index is used to
+ identify an entry in the list. The order of entries
+ is defined by the user without relying on key values.";
+ }
+ choice type {
+ description
+ "The Record Route entry type.";
+ case numbered-node-hop {
+ container numbered-node-hop {
+ description
+ "Numbered node route hop container.";
+ leaf node-id {
+ type te-node-id;
+ mandatory true;
+ description
+ "The identifier of a node in the TE topology.";
+ }
+ leaf-list flags {
+ type path-attribute-flags;
+ description
+ "Path attributes flags.";
+ reference
+ "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels
+ RFC 4090: Fast Reroute Extensions to RSVP-TE for LSP
+ Tunnels
+ RFC 4561: Definition of a Record Route Object (RRO)
+ Node-Id Sub-Object";
+ }
+ }
+ description
+ "Numbered node route hop.";
+ }
+ case numbered-link-hop {
+ container numbered-link-hop {
+ description
+ "Numbered link route hop container.";
+ leaf link-tp-id {
+ type te-tp-id;
+ mandatory true;
+ description
+ "Numbered TE LTP identifier.";
+ }
+ leaf-list flags {
+ type path-attribute-flags;
+ description
+ "Path attributes flags.";
+ reference
+ "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels
+ RFC 4090: Fast Reroute Extensions to RSVP-TE for LSP
+ Tunnels
+ RFC 4561: Definition of a Record Route Object (RRO)
+ Node-Id Sub-Object";
+ }
+ }
+ description
+ "Numbered link route hop.";
+ }
+ case unnumbered-link-hop {
+ container unnumbered-link-hop {
+ leaf link-tp-id {
+ type te-tp-id;
+ mandatory true;
+ description
+ "TE LTP identifier. The combination of the TE link ID
+ and the TE node ID is used to identify an unnumbered
+ TE link.";
+ }
+ leaf node-id {
+ type te-node-id;
+ description
+ "The identifier of a node in the TE topology.";
+ }
+ leaf-list flags {
+ type path-attribute-flags;
+ description
+ "Path attributes flags.";
+ reference
+ "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels
+ RFC 4090: Fast Reroute Extensions to RSVP-TE for LSP
+ Tunnels
+ RFC 4561: Definition of a Record Route Object (RRO)
+ Node-Id Sub-Object";
+ }
+ description
+ "Unnumbered link Record Route hop.";
+ reference
+ "RFC 3477: Signalling Unnumbered Links in Resource
+ ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
+ }
+ description
+ "Unnumbered link route hop.";
+ }
+ case label {
+ container label-hop {
+ description
+ "Label route hop type.";
+ uses te-label;
+ leaf-list flags {
+ type path-attribute-flags;
+ description
+ "Path attributes flags.";
+ reference
+ "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels
+ RFC 4090: Fast Reroute Extensions to RSVP-TE for LSP
+ Tunnels
+ RFC 4561: Definition of a Record Route Object (RRO)
+ Node-Id Sub-Object";
+ }
+ }
+ description
+ "The label Record Route entry types.";
+ }
+ }
+ }
+
+ grouping label-restriction-info {
+ description
+ "Label set item information.";
+ leaf restriction {
+ type enumeration {
+ enum inclusive {
+ description
+ "The label or label range is inclusive.";
+ }
+ enum exclusive {
+ description
+ "The label or label range is exclusive.";
+ }
+ }
+ default "inclusive";
+ description
+ "Indicates whether the list item is inclusive or exclusive.";
+ }
+ leaf index {
+ type uint32;
+ description
+ "The index of the label restriction list entry.";
+ }
+ container label-start {
+ must "(not(../label-end/te-label/direction) and"
+ + " not(te-label/direction))"
+ + " or "
+ + "(../label-end/te-label/direction = te-label/direction)"
+ + " or "
+ + "(not(te-label/direction) and"
+ + " (../label-end/te-label/direction = 'forward'))"
+ + " or "
+ + "(not(../label-end/te-label/direction) and"
+ + " (te-label/direction = 'forward'))" {
+ error-message "'label-start' and 'label-end' must have the "
+ + "same direction.";
+ }
+ description
+ "This is the starting label if a label range is specified.
+ This is the label value if a single label is specified,
+ in which case the 'label-end' attribute is not set.";
+ uses te-label;
+ }
+ container label-end {
+ must "(not(../label-start/te-label/direction) and"
+ + " not(te-label/direction))"
+ + " or "
+ + "(../label-start/te-label/direction = te-label/direction)"
+ + " or "
+ + "(not(te-label/direction) and"
+ + " (../label-start/te-label/direction = 'forward'))"
+ + " or "
+ + "(not(../label-start/te-label/direction) and"
+ + " (te-label/direction = 'forward'))" {
+ error-message "'label-start' and 'label-end' must have the "
+ + "same direction.";
+ }
+ description
+ "This is the ending label if a label range is specified.
+ This attribute is not set if a single label is specified.";
+ uses te-label;
+ }
+ container label-step {
+ description
+ "The step increment between labels in the label range.
+ The label start/end values will have to be consistent
+ with the sign of label step. For example,
+ 'label-start' < 'label-end' enforces 'label-step' > 0
+ 'label-start' > 'label-end' enforces 'label-step' < 0.";
+ choice technology {
+ default "generic";
+ description
+ "Data-plane technology type.";
+ case generic {
+ leaf generic {
+ type int32;
+ default "1";
+ description
+ "Label range step.";
+ }
+ }
+ }
+ }
+ leaf range-bitmap {
+ type yang:hex-string;
+ description
+ "When there are gaps between 'label-start' and 'label-end',
+ this attribute is used to specify the positions
+ of the used labels. This is represented in big endian as
+ 'hex-string'.
+ The most significant byte in the hex-string is the farthest
+ to the left in the byte sequence. Leading zero bytes in the
+ configured value may be omitted for brevity.
+ Each bit position in the 'range-bitmap' 'hex-string' maps
+ to a label in the range derived from 'label-start'.
+
+ For example, assuming that 'label-start' = 16000 and
+ 'range-bitmap' = 0x01000001, then:
+
+ - bit position (0) is set, and the corresponding mapped
+ label from the range is 16000 + (0 * 'label-step') or
+ 16000 for default 'label-step' = 1.
+ - bit position (24) is set, and the corresponding mapped
+ label from the range is 16000 + (24 * 'label-step') or
+ 16024 for default 'label-step' = 1.";
+ }
+ }
+
+ grouping label-set-info {
+ description
+ "Grouping for the list of label restrictions specifying what
+ labels may or may not be used.";
+ container label-restrictions {
+ description
+ "The label restrictions container.";
+ list label-restriction {
+ key "index";
+ description
+ "The absence of the label restrictions container implies
+ that all labels are acceptable; otherwise, only restricted
+ labels are available.";
+ reference
+ "RFC 7579: General Network Element Constraint Encoding
+ for GMPLS-Controlled Networks";
+ uses label-restriction-info;
+ }
+ }
+ }
+
+ grouping optimization-metric-entry {
+ description
+ "Optimization metrics configuration grouping.";
+ leaf metric-type {
+ type identityref {
+ base path-metric-type;
+ }
+ description
+ "Identifies the 'metric-type' that the path computation
+ process uses for optimization.";
+ }
+ leaf weight {
+ type uint8;
+ default "1";
+ description
+ "TE path metric normalization weight.";
+ }
+ container explicit-route-exclude-objects {
+ when "../metric-type = "
+ + "'te-types:path-metric-optimize-excludes'";
+ description
+ "Container for the 'exclude route' object list.";
+ uses path-route-exclude-objects;
+ }
+ container explicit-route-include-objects {
+ when "../metric-type = "
+ + "'te-types:path-metric-optimize-includes'";
+ description
+ "Container for the 'include route' object list.";
+ uses path-route-include-objects;
+ }
+ }
+
+ grouping common-constraints {
+ description
+ "Common constraints grouping that can be set on
+ a constraint set or directly on the tunnel.";
+ uses te-bandwidth {
+ description
+ "A requested bandwidth to use for path computation.";
+ }
+ leaf link-protection {
+ type identityref {
+ base link-protection-type;
+ }
+ default "te-types:link-protection-unprotected";
+ description
+ "Link protection type required for the links included
+ in the computed path.";
+ reference
+ "RFC 4202: Routing Extensions in Support of
+ Generalized Multi-Protocol Label Switching (GMPLS)";
+ }
+ leaf setup-priority {
+ type uint8 {
+ range "0..7";
+ }
+ default "7";
+ description
+ "TE LSP requested setup priority.";
+ reference
+ "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
+ }
+ leaf hold-priority {
+ type uint8 {
+ range "0..7";
+ }
+ default "7";
+ description
+ "TE LSP requested hold priority.";
+ reference
+ "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
+ }
+ leaf signaling-type {
+ type identityref {
+ base path-signaling-type;
+ }
+ default "te-types:path-setup-rsvp";
+ description
+ "TE tunnel path signaling type.";
+ }
+ }
+
+ grouping tunnel-constraints {
+ description
+ "Tunnel constraints grouping that can be set on
+ a constraint set or directly on the tunnel.";
+ uses te-topology-identifier;
+ uses common-constraints;
+ }
+
+ grouping path-constraints-route-objects {
+ description
+ "List of route entries to be included or excluded when
+ performing the path computation.";
+ container explicit-route-objects-always {
+ description
+ "Container for the 'exclude route' object list.";
+ list route-object-exclude-always {
+ key "index";
+ ordered-by user;
+ description
+ "List of route objects to always exclude from the path
+ computation.";
+ leaf index {
+ type uint32;
+ description
+ "Explicit Route Object index. The index is used to
+ identify an entry in the list. The order of entries
+ is defined by the user without relying on key values.";
+ }
+ uses explicit-route-hop;
+ }
+ list route-object-include-exclude {
+ key "index";
+ ordered-by user;
+ description
+ "List of route objects to include or exclude in the path
+ computation.";
+ leaf explicit-route-usage {
+ type identityref {
+ base route-usage-type;
+ }
+ default "te-types:route-include-object";
+ description
+ "Indicates whether to include or exclude the
+ route object. The default is to include it.";
+ }
+ leaf index {
+ type uint32;
+ description
+ "Route object include-exclude index. The index is used
+ to identify an entry in the list. The order of entries
+ is defined by the user without relying on key values.";
+ }
+ uses explicit-route-hop {
+ augment "type" {
+ case srlg {
+ container srlg {
+ description
+ "SRLG container.";
+ leaf srlg {
+ type uint32;
+ description
+ "SRLG value.";
+ }
+ }
+ description
+ "An SRLG value to be included or excluded.";
+ }
+ description
+ "Augmentation for a generic explicit route for SRLG
+ exclusion.";
+ }
+ }
+ }
+ }
+ }
+
+ grouping path-route-include-objects {
+ description
+ "List of route objects to be included when performing
+ the path computation.";
+ list route-object-include-object {
+ key "index";
+ ordered-by user;
+ description
+ "List of Explicit Route Objects to be included in the
+ path computation.";
+ leaf index {
+ type uint32;
+ description
+ "Route object entry index. The index is used to
+ identify an entry in the list. The order of entries
+ is defined by the user without relying on key values.";
+ }
+ uses explicit-route-hop;
+ }
+ }
+
+ grouping path-route-exclude-objects {
+ description
+ "List of route objects to be excluded when performing
+ the path computation.";
+ list route-object-exclude-object {
+ key "index";
+ ordered-by user;
+ description
+ "List of Explicit Route Objects to be excluded in the
+ path computation.";
+ leaf index {
+ type uint32;
+ description
+ "Route object entry index. The index is used to
+ identify an entry in the list. The order of entries
+ is defined by the user without relying on key values.";
+ }
+ uses explicit-route-hop {
+ augment "type" {
+ case srlg {
+ container srlg {
+ description
+ "SRLG container.";
+ leaf srlg {
+ type uint32;
+ description
+ "SRLG value.";
+ }
+ }
+ description
+ "An SRLG value to be included or excluded.";
+ }
+ description
+ "Augmentation for a generic explicit route for SRLG
+ exclusion.";
+ }
+ }
+ }
+ }
+
+ grouping generic-path-metric-bounds {
+ description
+ "TE path metric bounds grouping.";
+ container path-metric-bounds {
+ description
+ "TE path metric bounds container.";
+ list path-metric-bound {
+ key "metric-type";
+ description
+ "List of TE path metric bounds.";
+ leaf metric-type {
+ type identityref {
+ base path-metric-type;
+ }
+ description
+ "Identifies an entry in the list of 'metric-type' items
+ bound for the TE path.";
+ }
+ leaf upper-bound {
+ type uint64;
+ default "0";
+ description
+ "Upper bound on the end-to-end TE path metric. A zero
+ indicates an unbounded upper limit for the specific
+ 'metric-type'.";
+ }
+ }
+ }
+ }
+
+ grouping generic-path-optimization {
+ description
+ "TE generic path optimization grouping.";
+ container optimizations {
+ description
+ "The objective function container that includes
+ attributes to impose when computing a TE path.";
+ choice algorithm {
+ description
+ "Optimizations algorithm.";
+ case metric {
+ if-feature "path-optimization-metric";
+ /* Optimize by metric */
+ list optimization-metric {
+ key "metric-type";
+ description
+ "TE path metric type.";
+ uses optimization-metric-entry;
+ }
+ /* Tiebreakers */
+ container tiebreakers {
+ description
+ "Container for the list of tiebreakers.";
+ list tiebreaker {
+ key "tiebreaker-type";
+ description
+ "The list of tiebreaker criteria to apply on an
+ equally favored set of paths, in order to pick
+ the best.";
+ leaf tiebreaker-type {
+ type identityref {
+ base path-metric-type;
+ }
+ description
+ "Identifies an entry in the list of tiebreakers.";
+ }
+ }
+ }
+ }
+ case objective-function {
+ if-feature "path-optimization-objective-function";
+ /* Objective functions */
+ container objective-function {
+ description
+ "The objective function container that includes
+ attributes to impose when computing a TE path.";
+ leaf objective-function-type {
+ type identityref {
+ base objective-function-type;
+ }
+ default "te-types:of-minimize-cost-path";
+ description
+ "Objective function entry.";
+ }
+ }
+ }
+ }
+ }
+ }
+
+ grouping generic-path-affinities {
+ description
+ "Path affinities grouping.";
+ container path-affinities-values {
+ description
+ "Path affinities represented as values.";
+ list path-affinities-value {
+ key "usage";
+ description
+ "List of named affinity constraints.";
+ leaf usage {
+ type identityref {
+ base resource-affinities-type;
+ }
+ description
+ "Identifies an entry in the list of value affinity
+ constraints.";
+ }
+ leaf value {
+ type admin-groups;
+ default "";
+ description
+ "The affinity value. The default is empty.";
+ }
+ }
+ }
+ container path-affinity-names {
+ description
+ "Path affinities represented as names.";
+ list path-affinity-name {
+ key "usage";
+ description
+ "List of named affinity constraints.";
+ leaf usage {
+ type identityref {
+ base resource-affinities-type;
+ }
+ description
+ "Identifies an entry in the list of named affinity
+ constraints.";
+ }
+ list affinity-name {
+ key "name";
+ leaf name {
+ type string;
+ description
+ "Identifies a named affinity entry.";
+ }
+ description
+ "List of named affinities.";
+ }
+ }
+ }
+ }
+
+ grouping generic-path-srlgs {
+ description
+ "Path SRLG grouping.";
+ container path-srlgs-lists {
+ description
+ "Path SRLG properties container.";
+ list path-srlgs-list {
+ key "usage";
+ description
+ "List of SRLG values to be included or excluded.";
+ leaf usage {
+ type identityref {
+ base route-usage-type;
+ }
+ description
+ "Identifies an entry in a list of SRLGs to either
+ include or exclude.";
+ }
+ leaf-list values {
+ type srlg;
+ description
+ "List of SRLG values.";
+ }
+ }
+ }
+ container path-srlgs-names {
+ description
+ "Container for the list of named SRLGs.";
+ list path-srlgs-name {
+ key "usage";
+ description
+ "List of named SRLGs to be included or excluded.";
+ leaf usage {
+ type identityref {
+ base route-usage-type;
+ }
+ description
+ "Identifies an entry in a list of named SRLGs to either
+ include or exclude.";
+ }
+ leaf-list names {
+ type string;
+ description
+ "List of named SRLGs.";
+ }
+ }
+ }
+ }
+
+ grouping generic-path-disjointness {
+ description
+ "Path disjointness grouping.";
+ leaf disjointness {
+ type te-path-disjointness;
+ description
+ "The type of resource disjointness.
+ When configured for a primary path, the disjointness level
+ applies to all secondary LSPs. When configured for a
+ secondary path, the disjointness level overrides the level
+ configured for the primary path.";
+ }
+ }
+
+ grouping common-path-constraints-attributes {
+ description
+ "Common path constraints configuration grouping.";
+ uses common-constraints;
+ uses generic-path-metric-bounds;
+ uses generic-path-affinities;
+ uses generic-path-srlgs;
+ }
+
+ grouping generic-path-constraints {
+ description
+ "Global named path constraints configuration grouping.";
+ container path-constraints {
+ description
+ "TE named path constraints container.";
+ uses common-path-constraints-attributes;
+ uses generic-path-disjointness;
+ }
+ }
+
+ grouping generic-path-properties {
+ description
+ "TE generic path properties grouping.";
+ container path-properties {
+ config false;
+ description
+ "The TE path properties.";
+ list path-metric {
+ key "metric-type";
+ description
+ "TE path metric type.";
+ leaf metric-type {
+ type identityref {
+ base path-metric-type;
+ }
+ description
+ "TE path metric type.";
+ }
+ leaf accumulative-value {
+ type uint64;
+ description
+ "TE path metric accumulative value.";
+ }
+ }
+ uses generic-path-affinities;
+ uses generic-path-srlgs;
+ container path-route-objects {
+ description
+ "Container for the list of route objects either returned by
+ the computation engine or actually used by an LSP.";
+ list path-route-object {
+ key "index";
+ ordered-by user;
+ description
+ "List of route objects either returned by the computation
+ engine or actually used by an LSP.";
+ leaf index {
+ type uint32;
+ description
+ "Route object entry index. The index is used to
+ identify an entry in the list. The order of entries
+ is defined by the user without relying on key
+ values.";
+ }
+ uses explicit-route-hop;
+ }
+ }
+ }
+ }
+}
diff --git a/gnpy/yang/ext/ietf-yang-types@2013-07-15.yang b/gnpy/yang/ext/ietf-yang-types@2013-07-15.yang
new file mode 100644
index 00000000..ee58fa3a
--- /dev/null
+++ b/gnpy/yang/ext/ietf-yang-types@2013-07-15.yang
@@ -0,0 +1,474 @@
+module ietf-yang-types {
+
+ namespace "urn:ietf:params:xml:ns:yang:ietf-yang-types";
+ prefix "yang";
+
+ organization
+ "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
+
+ contact
+ "WG Web:
+ WG List:
+
+ WG Chair: David Kessens
+
+
+ WG Chair: Juergen Schoenwaelder
+
+
+ Editor: Juergen Schoenwaelder
+ ";
+
+ description
+ "This module contains a collection of generally useful derived
+ YANG data types.
+
+ Copyright (c) 2013 IETF Trust and the persons identified as
+ authors of the code. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or
+ without modification, is permitted pursuant to, and subject
+ to the license terms contained in, the Simplified BSD License
+ set forth in Section 4.c of the IETF Trust's Legal Provisions
+ Relating to IETF Documents
+ (http://trustee.ietf.org/license-info).
+
+ This version of this YANG module is part of RFC 6991; see
+ the RFC itself for full legal notices.";
+
+ revision 2013-07-15 {
+ description
+ "This revision adds the following new data types:
+ - yang-identifier
+ - hex-string
+ - uuid
+ - dotted-quad";
+ reference
+ "RFC 6991: Common YANG Data Types";
+ }
+
+ revision 2010-09-24 {
+ description
+ "Initial revision.";
+ reference
+ "RFC 6021: Common YANG Data Types";
+ }
+
+ /*** collection of counter and gauge types ***/
+
+ typedef counter32 {
+ type uint32;
+ description
+ "The counter32 type represents a non-negative integer
+ that monotonically increases until it reaches a
+ maximum value of 2^32-1 (4294967295 decimal), when it
+ wraps around and starts increasing again from zero.
+
+ Counters have no defined 'initial' value, and thus, a
+ single value of a counter has (in general) no information
+ content. Discontinuities in the monotonically increasing
+ value normally occur at re-initialization of the
+ management system, and at other times as specified in the
+ description of a schema node using this type. If such
+ other times can occur, for example, the creation of
+ a schema node of type counter32 at times other than
+ re-initialization, then a corresponding schema node
+ should be defined, with an appropriate type, to indicate
+ the last discontinuity.
+
+ The counter32 type should not be used for configuration
+ schema nodes. A default statement SHOULD NOT be used in
+ combination with the type counter32.
+
+ In the value set and its semantics, this type is equivalent
+ to the Counter32 type of the SMIv2.";
+ reference
+ "RFC 2578: Structure of Management Information Version 2
+ (SMIv2)";
+ }
+
+ typedef zero-based-counter32 {
+ type yang:counter32;
+ default "0";
+ description
+ "The zero-based-counter32 type represents a counter32
+ that has the defined 'initial' value zero.
+
+ A schema node of this type will be set to zero (0) on creation
+ and will thereafter increase monotonically until it reaches
+ a maximum value of 2^32-1 (4294967295 decimal), when it
+ wraps around and starts increasing again from zero.
+
+ Provided that an application discovers a new schema node
+ of this type within the minimum time to wrap, it can use the
+ 'initial' value as a delta. It is important for a management
+ station to be aware of this minimum time and the actual time
+ between polls, and to discard data if the actual time is too
+ long or there is no defined minimum time.
+
+ In the value set and its semantics, this type is equivalent
+ to the ZeroBasedCounter32 textual convention of the SMIv2.";
+ reference
+ "RFC 4502: Remote Network Monitoring Management Information
+ Base Version 2";
+ }
+
+ typedef counter64 {
+ type uint64;
+ description
+ "The counter64 type represents a non-negative integer
+ that monotonically increases until it reaches a
+ maximum value of 2^64-1 (18446744073709551615 decimal),
+ when it wraps around and starts increasing again from zero.
+
+ Counters have no defined 'initial' value, and thus, a
+ single value of a counter has (in general) no information
+ content. Discontinuities in the monotonically increasing
+ value normally occur at re-initialization of the
+ management system, and at other times as specified in the
+ description of a schema node using this type. If such
+ other times can occur, for example, the creation of
+ a schema node of type counter64 at times other than
+ re-initialization, then a corresponding schema node
+ should be defined, with an appropriate type, to indicate
+ the last discontinuity.
+
+ The counter64 type should not be used for configuration
+ schema nodes. A default statement SHOULD NOT be used in
+ combination with the type counter64.
+
+ In the value set and its semantics, this type is equivalent
+ to the Counter64 type of the SMIv2.";
+ reference
+ "RFC 2578: Structure of Management Information Version 2
+ (SMIv2)";
+ }
+
+ typedef zero-based-counter64 {
+ type yang:counter64;
+ default "0";
+ description
+ "The zero-based-counter64 type represents a counter64 that
+ has the defined 'initial' value zero.
+
+ A schema node of this type will be set to zero (0) on creation
+ and will thereafter increase monotonically until it reaches
+ a maximum value of 2^64-1 (18446744073709551615 decimal),
+ when it wraps around and starts increasing again from zero.
+
+ Provided that an application discovers a new schema node
+ of this type within the minimum time to wrap, it can use the
+ 'initial' value as a delta. It is important for a management
+ station to be aware of this minimum time and the actual time
+ between polls, and to discard data if the actual time is too
+ long or there is no defined minimum time.
+
+ In the value set and its semantics, this type is equivalent
+ to the ZeroBasedCounter64 textual convention of the SMIv2.";
+ reference
+ "RFC 2856: Textual Conventions for Additional High Capacity
+ Data Types";
+ }
+
+ typedef gauge32 {
+ type uint32;
+ description
+ "The gauge32 type represents a non-negative integer, which
+ may increase or decrease, but shall never exceed a maximum
+ value, nor fall below a minimum value. The maximum value
+ cannot be greater than 2^32-1 (4294967295 decimal), and
+ the minimum value cannot be smaller than 0. The value of
+ a gauge32 has its maximum value whenever the information
+ being modeled is greater than or equal to its maximum
+ value, and has its minimum value whenever the information
+ being modeled is smaller than or equal to its minimum value.
+ If the information being modeled subsequently decreases
+ below (increases above) the maximum (minimum) value, the
+ gauge32 also decreases (increases).
+
+ In the value set and its semantics, this type is equivalent
+ to the Gauge32 type of the SMIv2.";
+ reference
+ "RFC 2578: Structure of Management Information Version 2
+ (SMIv2)";
+ }
+
+ typedef gauge64 {
+ type uint64;
+ description
+ "The gauge64 type represents a non-negative integer, which
+ may increase or decrease, but shall never exceed a maximum
+ value, nor fall below a minimum value. The maximum value
+ cannot be greater than 2^64-1 (18446744073709551615), and
+ the minimum value cannot be smaller than 0. The value of
+ a gauge64 has its maximum value whenever the information
+ being modeled is greater than or equal to its maximum
+ value, and has its minimum value whenever the information
+ being modeled is smaller than or equal to its minimum value.
+ If the information being modeled subsequently decreases
+ below (increases above) the maximum (minimum) value, the
+ gauge64 also decreases (increases).
+
+ In the value set and its semantics, this type is equivalent
+ to the CounterBasedGauge64 SMIv2 textual convention defined
+ in RFC 2856";
+ reference
+ "RFC 2856: Textual Conventions for Additional High Capacity
+ Data Types";
+ }
+
+ /*** collection of identifier-related types ***/
+
+ typedef object-identifier {
+ type string {
+ pattern '(([0-1](\.[1-3]?[0-9]))|(2\.(0|([1-9]\d*))))'
+ + '(\.(0|([1-9]\d*)))*';
+ }
+ description
+ "The object-identifier type represents administratively
+ assigned names in a registration-hierarchical-name tree.
+
+ Values of this type are denoted as a sequence of numerical
+ non-negative sub-identifier values. Each sub-identifier
+ value MUST NOT exceed 2^32-1 (4294967295). Sub-identifiers
+ are separated by single dots and without any intermediate
+ whitespace.
+
+ The ASN.1 standard restricts the value space of the first
+ sub-identifier to 0, 1, or 2. Furthermore, the value space
+ of the second sub-identifier is restricted to the range
+ 0 to 39 if the first sub-identifier is 0 or 1. Finally,
+ the ASN.1 standard requires that an object identifier
+ has always at least two sub-identifiers. The pattern
+ captures these restrictions.
+
+ Although the number of sub-identifiers is not limited,
+ module designers should realize that there may be
+ implementations that stick with the SMIv2 limit of 128
+ sub-identifiers.
+
+ This type is a superset of the SMIv2 OBJECT IDENTIFIER type
+ since it is not restricted to 128 sub-identifiers. Hence,
+ this type SHOULD NOT be used to represent the SMIv2 OBJECT
+ IDENTIFIER type; the object-identifier-128 type SHOULD be
+ used instead.";
+ reference
+ "ISO9834-1: Information technology -- Open Systems
+ Interconnection -- Procedures for the operation of OSI
+ Registration Authorities: General procedures and top
+ arcs of the ASN.1 Object Identifier tree";
+ }
+
+ typedef object-identifier-128 {
+ type object-identifier {
+ pattern '\d*(\.\d*){1,127}';
+ }
+ description
+ "This type represents object-identifiers restricted to 128
+ sub-identifiers.
+
+ In the value set and its semantics, this type is equivalent
+ to the OBJECT IDENTIFIER type of the SMIv2.";
+ reference
+ "RFC 2578: Structure of Management Information Version 2
+ (SMIv2)";
+ }
+
+ typedef yang-identifier {
+ type string {
+ length "1..max";
+ pattern '[a-zA-Z_][a-zA-Z0-9\-_.]*';
+ pattern '.|..|[^xX].*|.[^mM].*|..[^lL].*';
+ }
+ description
+ "A YANG identifier string as defined by the 'identifier'
+ rule in Section 12 of RFC 6020. An identifier must
+ start with an alphabetic character or an underscore
+ followed by an arbitrary sequence of alphabetic or
+ numeric characters, underscores, hyphens, or dots.
+
+ A YANG identifier MUST NOT start with any possible
+ combination of the lowercase or uppercase character
+ sequence 'xml'.";
+ reference
+ "RFC 6020: YANG - A Data Modeling Language for the Network
+ Configuration Protocol (NETCONF)";
+ }
+
+ /*** collection of types related to date and time***/
+
+ typedef date-and-time {
+ type string {
+ pattern '\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?'
+ + '(Z|[\+\-]\d{2}:\d{2})';
+ }
+ description
+ "The date-and-time type is a profile of the ISO 8601
+ standard for representation of dates and times using the
+ Gregorian calendar. The profile is defined by the
+ date-time production in Section 5.6 of RFC 3339.
+
+ The date-and-time type is compatible with the dateTime XML
+ schema type with the following notable exceptions:
+
+ (a) The date-and-time type does not allow negative years.
+
+ (b) The date-and-time time-offset -00:00 indicates an unknown
+ time zone (see RFC 3339) while -00:00 and +00:00 and Z
+ all represent the same time zone in dateTime.
+
+ (c) The canonical format (see below) of data-and-time values
+ differs from the canonical format used by the dateTime XML
+ schema type, which requires all times to be in UTC using
+ the time-offset 'Z'.
+
+ This type is not equivalent to the DateAndTime textual
+ convention of the SMIv2 since RFC 3339 uses a different
+ separator between full-date and full-time and provides
+ higher resolution of time-secfrac.
+
+ The canonical format for date-and-time values with a known time
+ zone uses a numeric time zone offset that is calculated using
+ the device's configured known offset to UTC time. A change of
+ the device's offset to UTC time will cause date-and-time values
+ to change accordingly. Such changes might happen periodically
+ in case a server follows automatically daylight saving time
+ (DST) time zone offset changes. The canonical format for
+ date-and-time values with an unknown time zone (usually
+ referring to the notion of local time) uses the time-offset
+ -00:00.";
+ reference
+ "RFC 3339: Date and Time on the Internet: Timestamps
+ RFC 2579: Textual Conventions for SMIv2
+ XSD-TYPES: XML Schema Part 2: Datatypes Second Edition";
+ }
+
+ typedef timeticks {
+ type uint32;
+ description
+ "The timeticks type represents a non-negative integer that
+ represents the time, modulo 2^32 (4294967296 decimal), in
+ hundredths of a second between two epochs. When a schema
+ node is defined that uses this type, the description of
+ the schema node identifies both of the reference epochs.
+
+ In the value set and its semantics, this type is equivalent
+ to the TimeTicks type of the SMIv2.";
+ reference
+ "RFC 2578: Structure of Management Information Version 2
+ (SMIv2)";
+ }
+
+ typedef timestamp {
+ type yang:timeticks;
+ description
+ "The timestamp type represents the value of an associated
+ timeticks schema node at which a specific occurrence
+ happened. The specific occurrence must be defined in the
+ description of any schema node defined using this type. When
+ the specific occurrence occurred prior to the last time the
+ associated timeticks attribute was zero, then the timestamp
+ value is zero. Note that this requires all timestamp values
+ to be reset to zero when the value of the associated timeticks
+ attribute reaches 497+ days and wraps around to zero.
+
+ The associated timeticks schema node must be specified
+ in the description of any schema node using this type.
+
+ In the value set and its semantics, this type is equivalent
+ to the TimeStamp textual convention of the SMIv2.";
+ reference
+ "RFC 2579: Textual Conventions for SMIv2";
+ }
+
+ /*** collection of generic address types ***/
+
+ typedef phys-address {
+ type string {
+ pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?';
+ }
+
+ description
+ "Represents media- or physical-level addresses represented
+ as a sequence octets, each octet represented by two hexadecimal
+ numbers. Octets are separated by colons. The canonical
+ representation uses lowercase characters.
+
+ In the value set and its semantics, this type is equivalent
+ to the PhysAddress textual convention of the SMIv2.";
+ reference
+ "RFC 2579: Textual Conventions for SMIv2";
+ }
+
+ typedef mac-address {
+ type string {
+ pattern '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}';
+ }
+ description
+ "The mac-address type represents an IEEE 802 MAC address.
+ The canonical representation uses lowercase characters.
+
+ In the value set and its semantics, this type is equivalent
+ to the MacAddress textual convention of the SMIv2.";
+ reference
+ "IEEE 802: IEEE Standard for Local and Metropolitan Area
+ Networks: Overview and Architecture
+ RFC 2579: Textual Conventions for SMIv2";
+ }
+
+ /*** collection of XML-specific types ***/
+
+ typedef xpath1.0 {
+ type string;
+ description
+ "This type represents an XPATH 1.0 expression.
+
+ When a schema node is defined that uses this type, the
+ description of the schema node MUST specify the XPath
+ context in which the XPath expression is evaluated.";
+ reference
+ "XPATH: XML Path Language (XPath) Version 1.0";
+ }
+
+ /*** collection of string types ***/
+
+ typedef hex-string {
+ type string {
+ pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?';
+ }
+ description
+ "A hexadecimal string with octets represented as hex digits
+ separated by colons. The canonical representation uses
+ lowercase characters.";
+ }
+
+ typedef uuid {
+ type string {
+ pattern '[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-'
+ + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12}';
+ }
+ description
+ "A Universally Unique IDentifier in the string representation
+ defined in RFC 4122. The canonical representation uses
+ lowercase characters.
+
+ The following is an example of a UUID in string representation:
+ f81d4fae-7dec-11d0-a765-00a0c91e6bf6
+ ";
+ reference
+ "RFC 4122: A Universally Unique IDentifier (UUID) URN
+ Namespace";
+ }
+
+ typedef dotted-quad {
+ type string {
+ pattern
+ '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
+ + '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])';
+ }
+ description
+ "An unsigned 32-bit number expressed in the dotted-quad
+ notation, i.e., four octets written as decimal numbers
+ and separated with the '.' (full stop) character.";
+ }
+}