Internet-Draft L0 Common YANG Types August 2025
Belotti, et al. Expires 8 February 2026 [Page]
Workgroup:
CCAMP Working Group
Internet-Draft:
draft-ietf-ccamp-rfc9093-bis-16
Obsoletes:
9093 (if approved)
Published:
Intended Status:
Standards Track
Expires:
Authors:
S. Belotti, Ed.
Nokia
I. Busi, Ed.
Huawei
D. Beller, Ed.
Nokia
E. Le Rouzic
Orange
A. Guo
Futurewei Technologies

Common YANG Data Types for Layer 0 Optical Networks

Abstract

This document defines a collection of common data types, identities, and groupings in the YANG data modeling language. These common types and groupings, derived from the built-in YANG data types, identities, and groupings are intended to be imported by modules that model Optical Layer 0 configuration and state capabilities, such as Wavelength Switched Optical Networks (WSONs) and flexi-grid Dense Wavelength Division Multiplexing (DWDM) networks.

This document obsoletes RFC 9093 by replacing the YANG module it contained with a new revision that includes additional YANG data types, identities and groupings.

Status of This Memo

This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.

Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.

Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."

This Internet-Draft will expire on 8 February 2026.

Table of Contents

1. Introduction

This document introduces a collection of common data types derived from the built-in YANG data types. The derived types and groupings are designed to be the common types applicable for modeling Traffic Engineering (TE) features as well as non-TE features (e.g., physical network configuration aspects) for Layer 0 optical networks in models defined outside of this document. The applicability of Layer 0 types specified in this document includes Wavelength Switched Optical Networks (WSONs) [RFC6163] [ITU-T_G.694.1] and [ITU-T_G.694.2], and flexi-grid Dense Wavelength Division Multiplexing (DWDM) networks [RFC7698] [ITU-T_G.694.1].

This document adds new type definitions to the YANG modules and obsoletes [RFC9093]. For further details, see the revision statements of the YANG module in Section 3 or the summary in Appendix B.

This document obsoletes [RFC9093] by replacing it in its entirety. It provides a new revision of the YANG module contained in that RFC, and retains the data types previously defined, but also adds new type definitions to the YANG module. For further details, see Appendix B.

The YANG data model in this document conforms to the Network Management Datastore Architecture defined in [RFC8342].

1.1. Editorial Note (To be removed by RFC Editor)

  • Note to the RFC Editor: This section is to be removed prior to publication.

This document contains placeholder values that need to be replaced with finalized values at the time of publication. This note summarizes all of the substitutions that are needed.

Please apply the following replacements:

Please replace the revision date of the latest revision of the 'ietf-layer0-types' module with the publication date of this I-D, using the the format (year-month-day).

Please manually fix the YANG trees in Appendix A which have been generated by pyang and have some bugs.

1.2. Terminology and Notations

In the context of this document, the term "layer 0" refers to the photonic layer or WDM layer network in the architecture of the optical transport network (OTN) as defined in [ITU-T_G.709], [ITU-T_G.872], and [ITU-T_G.807] as opposed to the electrical switching layers of the OTN, which are typically referred to as layer 1 (L1).

The term "layer 0" may also be used for other transport network technologies (e.g., copper-based, radio-based, or free space optics-based, etc.), which are outside the scope of this document.

Refer to [RFC7446] and [RFC7581] for other key terms used in this document, and the terminology for describing YANG data models can be found in [RFC7950].

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 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.

1.3. Prefix in Data Node Names

In this document, names of data nodes and other data model objects are prefixed using the standard prefix associated with the corresponding YANG imported module.

Table 1: Prefixes and corresponding YANG module
Prefix YANG module Reference
te-types ietf-te-types [RFCYYYY]
l0-types ietf-layer0-types RFC XXXX

2. Layer 0 Types Module Contents

This document defines a YANG module for common Layer 0 types, ietf-layer0-types. This module is used for WSON and flexi-grid DWDM networks.

2.1. Identities

The "ietf-layer0-types" module contains the following YANG reusable YANG identities:

l0-grid-type:

A base YANG identity for the grid type as defined in [RFC6205] and [RFC7699].

cwdm-ch-spc-type:

A base YANG identity for the Coarse Wavelength Division Multiplexing (CWDM) channel-spacing type as defined in [RFC6205].

dwdm-ch-spc-type:

A base YANG identity for the DWDM channel-spacing type as defined in [RFC6205].

flexi-ncfg-type:

A base YANG identity for the DWDM flexi-grid Nominal Central Frequency Granularity (NCFG) type as defined in [RFC7699].

  • Note that the only value for NCFG standardized in [ITU-T_G.694.1] is 6.25GHz.

flexi-slot-width-granularity:

A base YANG identity for the DWDM flexi-grid Slot Width Granularity (SWG) type, as defined in [RFC7699].

Note that the only value for SWG standardized in [ITU-T_G.694.1] is 12.5GHz.

fec-type:

A base YANG identity from which specific FEC (Forward Error Correction) type identities are derived.

line-coding:

A base YANG identity from which specific identities defining the bit rate/line coding of optical tributary signals are derived.

wavelength-assignment:

A base YANG identity from which specific identities defining the Wavelength selection methods, as defined in [RFC7689], are derived.

modulation:

A base YANG identity to define the different modulation types, as defined in [ITU-T_G.Sup39]

switching-wson-lsc:

A YANG identity for the Wavelength Switched Optical Network Lambda-Switch Capable (WSON-LSC) interface switching capability as defined in [RFC7688].

switching-flexi-grid-lsc:

A YANG identity for the Flexi-Grid Lambda-Switch Capable (Flexi-Grid-LSC) interface switching capability as defined in [RFC8363].

It is worth noting that there is an inheritance relationship between the Lambda-Switch Capable (LSC) switching capability, defined in [RFC3471], and the WSON-LSC and Flexi-Grid-LSC, defined respectively in [RFC7688] and [RFC8363]. As a consequence, the 'switching-wson-lsc' and 'switching-flexi-grid-lsc' YANG identities are defined as derived identities from the 'switching-lsc', defined in [I-D.ietf-teas-rfc8776-update].

2.2. Data Types

The "ietf-layer0-types" module contains the following YANG reusable YANG data types:

operational-mode:

A YANG data type used to identify an organization (e.g., vendor) specific mode for transceiver capability description, as defined in Section 2.6.2 of [I-D.ietf-ccamp-optical-impairment-topology-yang]

snr:

A YANG data type used to represent an (Optical) Signal-to-noise ratio measured over 0.1 nm resolution bandwidth, as defined in [ITU-T_G.977.1]

psd:

A YANG data type used to represent a Power Spectral Density (PSD), as defined in [ITU-T_G.9700]

2.3. Groupings

The "ietf-layer0-types" module contains the following YANG reusable YANG groupings:

wson-label-start-end:

The WSON label range was defined in [RFC6205], and the generic topology model defines the label-start/label-end in [RFC8795]. This grouping shows the WSON-specific label-start and label-end information. See Section 2.4 for more details.

wson-label-hop:

The WSON label range was defined in [RFC6205], and the generic topology model defines the label-hop in [RFC8795]. This grouping shows the WSON-specific label-hop information. See Section 2.4 for more details.

l0-label-range-info:

A YANG grouping that defines the Layer 0 label range information applicable for WSON as defined in [RFC6205]. The label range info is defined per priority [RFC4203].

This grouping is used in the flexi-grid DWDM by adding more flexi-grid-specific parameters. See Section 2.4 for more details.

wson-label-step:

A YANG grouping that defines label steps for WSON as defined in [I-D.ietf-teas-rfc8776-update]. See Section 2.4 for more details.

flexi-grid-label-start-end:

The flexi-grid label range was defined in [RFC7699], and the generic topology model defines the label-start/label-end in [RFC8795].

This grouping shows the flexi-grid-specific label-start and label-end information which is used to describe the range of available nominal central frequencies. See Section 2.4 for more details.

As described in Section 3.1 of [RFC8363], the range of available nominal central frequencies is 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.

flexi-grid-label-hop:

The flexi-grid label range was defined in [RFC8363], and the generic topology model defines the label-hop in [RFC8795].

This grouping shows the WSON-specific label-hop information. See Section 2.4 for more details.

flexi-grid-label-range-info:

A YANG grouping that defines flexi-grid label range information as defined in [RFC8363]. See Section 2.4 for more details. See Section 2.4 for more details.

flexi-grid-label-step:

A YANG grouping that defines flexi-grid label steps as defined in [I-D.ietf-teas-rfc8776-update]. See Section 2.4 for more details.

wdm-label-start-end:

A YANG grouping that combines the definition of label-start/label-end information that was defined separately in wson-label-start-end and flexi-grid-label-start-end, to support optical network scenarios that contain both fixed- and flexi-grid links. See Section 2.4 for more details.

wdm-label-hop:

A YANG grouping that combines the definition of label hop information that was defined separately in wson-label-hop and flexi-grid-label-hop, to support optical network scenarios that contain both fixed- and flexi-grid links. See Section 2.4 for more details.

wdm-label-range-info:

A YANG grouping that combines the definition of label range information that was defined separately in wson-label-range-info and flexi-grid-label-range-info, to support optical network scenarios that contain both fixed- and flexi-grid links. See Section 2.4 for more details.

wdm-label-step:

A YANG grouping that combines the definition of label step information defined separately in wson-label-step and flexi-grid-label-step, to support optical network scenarios that contain both fixed- and flexi-grid links. See Section 2.4 for more details.

transceiver-capabilities:

A YANG grouping to define the transceiver capabilities (also called "modes") needed to determine optical signal compatibility.

When this grouping is used, the explicit-mode container shall be augmented with a leafref to an explicit mode template with the proper XPath, which depends from where this grouping is actually used.

standard-mode:

A YANG grouping for the standard modes defined in [ITU-T_G.698.2].

organizational-mode:

A YANG grouping to define transponder operational mode supported by organizations or vendors, as defined in [I-D.ietf-ccamp-optical-impairment-topology-yang].

explicit-mode:

A YANG grouping to define the list of attributes related to the limits of the optical impairments, in case of transceiver explicit mode, as defined in [I-D.ietf-ccamp-optical-impairment-topology-yang].

Note that the actual portion of the spectrum occupied by an OTSi is not explicitly reported within the explicit-mode parameters because it can be calculated using the available-baud-rate, the roll-off and the min-carrier-spacing attributes.

transceiver-tuning-range:

A YANG grouping that defines the transceiver tuning range, which includes the minimum and maximum tuning frequency, as well as the frequency tuning granularity.

common-all-modes:

A YANG grouping used to define the common attributes used by all transceiver's modes.

penalty-value:

A YANG grouping to define the penalty value for multiple penalty types, such as Chromatic Dispersion (CD), Polarization Mode Dispersion (PMD), as defined in [ITU-T_G.666] or Polarization Dependent Loss(PDL)

2.4. WDM Label and Label Range

As described in [RFC6205] and [RFC7699], the WDM label represents the frequency slots assigned to a WDM Label Switched Path (LSP) on a given WDM Link, which models an Optical Multiplex Section (OMS) Media Channel Group (MCG) as described in [I-D.ietf-ccamp-optical-impairment-topology-yang].

The same WDM label (which represents the frequency slots associated with the WDM LSP) will be assigned on all the WDM Links along a regen-free LSP path or path segment (i.e., an LSP path or path segment which does not include any 3R regenerator). Depending on the 3R capabilities, the WDM label may or may not change at a 3R regenerator: see Section 2.7 of [I-D.ietf-ccamp-optical-impairment-topology-yang] for more details on 3R regenerators.

A frequency slot is defined in [ITU-T_G.694.1] as a contiguous frequency range characterized by its nominal central frequency and slot width. The frequency range allocated to a frequency slot is unavailable to other frequency slots.

The definition of the frequency slot depends on the WDM grid type:

  • In case of CWDM fixed-grid, defined in [ITU-T_G.694.2], the frequency slot is defined by a fixed CWDM channel spacing (cwdm-ch-spc-type) and by the nominal central wavelength which is computed as described in [RFC6205]. The formula in [RFC6205] is copied here for reader convenience:

      lambda = 1471 nm + n * channel spacing (measured in nm)
  • where 'n' is defined in [RFC6205] as integer (positive, negative, or 0)

  • In case of DWDM fixed-grid, defined in [ITU-T_G.694.1], the frequency slot is defined by a fixed DWDM channel spacing (dwdm-ch-spc-type) and by the nominal central frequency, which is computed as described in [RFC6205]. The formula in [RFC6205] is copied here for reader convenience:

      f = 193100.000 GHz + n * channel spacing (measured in GHz)
  • where 'n' is defined in [RFC6205] as integer (positive, negative, or 0)

  • In case of DWDM flexible-grid, defined in [ITU-T_G.694.1], the frequency slot is defined by the slot width and by the nominal central frequency, which are computed, based on the slot width granularity (SWG, fixed at 12.5GHz in [ITU-T_G.694.1]), and of the nominal central frequency granularity (NCFG, fixed at 6.25GHz in [ITU-T_G.694.1]) respectively, as described in [RFC7698] and [RFC7699]. The formulas in [RFC7699] can be generalized as follows:

      SW = m * SWG (measured in GHz)
      f = 193100.000 GHz + N * NCFG (measured in GHz)
  • where 'n' is defined in [RFC7699] as integer (positive, negative, or 0) and 'm' is defined in [RFC7698] as an integer greater than or equal to 1.

The definition of the channel spacing, NCFG and SWG in the YANG model have been generalized to support modelling of vendor-specific values (e.g., finer vendor-specific granularity for NCFG and SWG).

The WDM Label Range represents the frequency slots that are available for WDM LSPs to be set up over a given WDM Link.

The WDM Label Range is defined by augmenting the label-restriction list, defined in [I-D.ietf-teas-rfc8776-update], with WDM technology-specific attributes, using the l0-label-range-info grouping (for WSON only models) or the flexi-grid-label-range-info grouping (for DWDM flexible-grid only models) or the wdm-label-range-info grouping (for models that support both WSON and DWDM flexible-grid).

Each entry in the label-restriction list represents either the range of the available central wavelength values (in case of CWDM fixed-grid) or the range of the available nominal central frequencies values (in case of DWDM fixed or flexible grids): the grid-type attribute defines the type of grid for each entry of the list.

In case of DWDM flexible grid, each entry in the label-restriction list also represents the range of the supported slot width values based on the following attributes, defined based on concepts used in [RFC7699]:

  • slot-width-granularity, which represents the minimum space between slot widths;

  • min-slot-width-factor: a multiplier of the slot width granularity, indicating the minimum slot width supported by each entry in the label-restriction list;

  • max-slot-width-factor: a multiplier of the slot width granularity, indicating the maximum slot width supported by each entry in the label-restriction list.

Each entry of the label-restriction list, as defined in [I-D.ietf-teas-rfc8776-update], defines a label-start, a label-end, a label-step and a range-bitmap.

The label-start and label-end definitions, when used for representing WDM label range, are augmented with WDM technology-specific attributes, using the wson-label-start-end grouping (for WSON only models) or the flexi-grid-label-start-end grouping (for DWDM flexible-grid only models) or the wdm-label-start-end grouping (for models that support both WSON and DWDM flexible-grid).

The label-step definition, when used for representing WDM label range, is augmented with WDM technology-specific attributes, using the wson-label-step grouping (for WSON only models) or the flexi-grid-label-step grouping (for DWDM flexible-grid only models) or the wdm-label-step grouping (for models that support both WSON and DWDM flexible-grid). The label-step definition for WDM depends on the WDM grid type:

  • For CWDM and DWDM fixed grids, it describes the channel spacing, as defined in [RFC6205];

  • For DWDM flexible grids, it describes the nominal central frequency granularity (e.g., 6,25 GHz) as well as the multiplier for the supported values of n, as defined in [RFC7699].

3. YANG Module for Layer 0 Types

This YANG module references [RFC6205], [RFC7689], [RFC7699], [RFC8363], [RFC9093], [ITU-T_G.666], [ITU-T_G.694.1], [ITU-T_G.694.2], [ITU-T_G.698.2], [ITU-T_G.709], [ITU-T_G.709.2], [ITU-T_G.709.3], [ITU-T_G.959.1] [ITU-T_G.975], [ITU-T_G.975.1], [ITU-T_G.977.1], [ITU-T_G.9700] and [OIF_400ZR].

<CODE BEGINS> file "ietf-layer0-types@2025-08-06.yang"

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";
  }

  organization
    "IETF CCAMP Working Group";
  contact
    "WG Web:  <https://datatracker.ietf.org/wg/ccamp/>
     WG List: <mailto:ccamp@ietf.org>

     Editor:  Dieter Beller
              <mailto:Dieter.Beller@nokia.com>

     Editor:  Sergio Belotti
              <mailto:Sergio.Belotti@nokia.com>

     Editor:  Italo Busi
              <mailto:Italo.Busi@huawei.com>

     Editor:  Haomian Zheng
              <mailto:zhenghaomian@huawei.com>";
  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) 2025 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).

     All revisions of IETF and IANA published modules can be found
     at the YANG Parameters registry group
     (https://www.iana.org/assignments/yang-parameters).

     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.";

  revision 2025-08-06 {
    description
      "This revision adds the following new identities:
       - cwdm-ch-spc-type;
       - flexi-ncfg-type;
       - flexi-ncfg-6p25gh;
       - modulation;
       - dpsk;
       - qpsk;
       - dp-qpsk;
       - qam8;
       - dp-qam8;
       - qam16;
       - dp-qam16;
       - qam32;
       - dp-qam32;
       - qam64;
       - dp-qam64;
       - fec-type;
       - g-fec;
       - super-fec;
       - no-fec;
       - sc-fec;
       - o-fec;
       - c-fec;
       - line-coding;
       - nrz-2p5g;
       - nrz-otu1;
       - nrz-10g;
       - nrz-otu2;
       - otl4.4-sc;
       - foic1.4-sc;
       - wavelength-assignment;
       - first-fit-wavelength-assignment;
       - random-wavelength-assignment;
       - least-loaded-wavelength-assignment;
       - lower-first-wavelength-assignment;
       - upper-first-wavelength-assignment;
       - type-power-mode;
       - power-spectral-density;
       - carrier-power;
       - switching-wson-lsc;
       - switching-flexi-grid-lsc.

       This revision adds the following new data types:
       - standard-mode
       - organization-identifier
       - operational-mode
       - frequency-thz
       - frequency-ghz
       - snr
       - snr-or-null
       - decimal-2
       - decimal-2-or-null
       - power-gain
       - power-gain-or-null
       - power-loss
       - power-loss-or-null
       - power-ratio
       - power-ratio-or-null
       - power-dbm
       - power-dbm-or-null
       - decimal-5
       - decimal-5-or-null
       - psd
       - psd-or-null.

       This revision adds the following new groupings:
       - wdm-label-start-end;
       - wdm-label-step;
       - wdm-label-hop;
       - wdm-label-range-info;
       - transceiver-capabilities;
       - standard-mode;
       - organizational-mode;
       - penalty-value;
       - explicit-mode;
       - common-standard-organizational-mode;
       - transceiver-tuning-range;
       - common-all-mode;
       - common-transceiver-param;
       - common-transceiver-configured-param;
       - common-transceiver-readonly-param;
       - tunnel-attributes;
       - frequency-range;
       - frequency-range-with-identifier;
       - path-constraints;
       - path-properties.

       The default value of the min-slot-width-factor data node
       within flexi-grid-label-range-info grouping has been removed
       (bug fixing).
      ";
    reference
      "RFC XXXX: Common YANG Data Types for Layer 0 Optical
       Networks";
  }
  revision 2021-08-13 {
    description
      "Initial version";
    reference
      "RFC 9093: A YANG Data Model for Layer 0 Types";
  }

  /*
   * Identities
   */

  identity l0-grid-type {
    description
      "Base identity for the WDM grid types.";
    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
      "Coarse Wavelength Division Multiplexing (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
      "Fixed Dense Wavelength Division Multiplexing (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, Clause 7.";
  }

  identity flexi-grid-dwdm {
    base l0-grid-type;
    description
      "Flexible Dense Wavelength Division Multiplexing (DWDM) grid
       (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, Clause 8";
  }

  identity cwdm-ch-spc-type {
    description
      "Base identity for CWDM channel-spacing types.";
    reference
      "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC)
                 Label Switching Routers, Section 3.3
       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, Section 3.3
       ITU-T G.694.2 (12/2003): Spectral grids for WDM applications:
                CWDM wavelength grid";
  }

  identity dwdm-ch-spc-type {
    description
      "Base identity for DWDM channel-spacing types.";
    reference
      "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC)
                 Label Switching Routers, Section 3.2
       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, Section 3.2
       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, Section 3.2
       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, Section 3.2
       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, Section 3.2
       ITU-T G.694.1 (10/2020): Spectral grids for WDM applications:
                 DWDM frequency grid";
  }

  identity flexi-ch-spc-type {
    status obsolete;
    description
      "Flexi-grid channel-spacing type";
  }

  identity flexi-ch-spc-6p25ghz {
    base flexi-ch-spc-type;
    status obsolete;
    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
      "Differential Phase Shift Keying (DPSK) modulation.";
  }

  identity qpsk {
    base modulation;
    description
      "Quadrature Phase Shift Keying (QPSK) modulation.";
  }

  identity dp-qpsk {
    base modulation;
    description
      "Dual Polarization Quadrature Phase Shift Keying
       (DP-QPSK) modulation.";
  }

  identity qam8 {
    base modulation;
    description
      "8 symbols Quadrature Amplitude Modulation (8QAM).";
  }

  identity dp-qam8 {
    base modulation;
    description
      "8 symbols Dual Polarization Quadrature Amplitude
       Modulation (DP-QAM8).";
  }

  identity qam16 {
    base modulation;
    description
      "16 symbols Quadrature Amplitude Modulation (QAM16).";
  }

  identity dp-qam16 {
    base modulation;
    description
      "16 symbols Dual Polarization Quadrature Amplitude
       Modulation (DP-QAM16).";
  }

  identity qam32 {
    base modulation;
    description
      "32 symbols Quadrature Amplitude Modulation (QAM32)";
  }

  identity dp-qam32 {
    base modulation;
    description
      "32 symbols Dual Polarization Quadrature Amplitude
       Modulation (DP-QAM32).";
  }

  identity qam64 {
    base modulation;
    description
      "64 symbols Quadrature Amplitude Modulation (QAM64).";
  }

  identity dp-qam64 {
    base modulation;
    description
      "64 symbols Dual Polarization Quadrature Amplitude
       Modulation (DP-QAM64).";
  }

  identity fec-type {
    description
      "Base identity from which specific Forward Error Correction
       (FEC) 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
      "ITU-T G.709.3 v2.1 (11/2022): Flexible OTN
               long-reach interfaces, Clause 16.4.4
       ITU-T G.709.3 v2.1 (11/2022): Flexible OTN
               long-reach interfaces, Annex E";
  }

  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
      "ITU-T G.709.2 v1.1 (09/2020):OTU4 long-reach
                   interface, Annex A
       ITU-T G.709.3 v2.1 (11/2022): Flexible OTN long-reach
                   interfaces, Annex D
       ITU-T G.709.3 v2.1 (11/2022): Flexible OTN long-reach
                   interfaces, Clause 15";
  }

  identity line-coding {
    description
      "Base identity to define the bit rate/line coding of optical
       tributary signals.";
    reference
      "ITU-T G.698.2 v3.0 (11/2018): Amplified multichannel dense
                    wavelength division multiplexing applications
                    with single channel optical interfaces Optical
                    transport network, Clause 7.1.2";
  }

  identity 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
      "ITU-T G.959.1 v8.0 (07/2018): Optical transport network
                      physical layer interfaces, Clause 3.2.6";
  }

  identity 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
      "ITU-T G.959.1 v8.0 (07/2018): Optical transport network
                   physical layer interfaces, Clause 7.2.1.2";
  }

  identity nrz-10g {
    description
      "The non return to zero (NRZ) bit rate/line coding used by
       the optical tributary signal class NRZ 10G.";
    reference
      "ITU-T G.959.1 v8.0 (07/2018): Optical transport network
                   physical layer interfaces, Clause 3.2.7";
  }

  identity 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
      "ITU-T G.959.1 v8.0 (07/2018): Optical transport network
                   physical layer interfaces, Clause 7.2.1.2";
  }

  identity 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
      "ITU-T G.698.2 v3.0 (11/2018): Amplified multichannel dense
                   wavelength division multiplexing applications
                   with single channel optical interfaces Optical
                   transport network, Clause 3.2.1";
  }

  identity 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
      "ITU-T G.698.2 v3.0 (11/2018): Amplified multichannel dense
                   wavelength division multiplexing applications
                   with single channel optical interfaces Optical
                   transport network, Clause 3.2.1";
  }

  identity wavelength-assignment {
    description
      "Base identity for Wavelength Assignment (WA) method.";
    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
       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 descending 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
       Optical Multiplex Section (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
      "RFC 7688: GMPLS OSPF Enhancement for Signal and Network
                 Element Compatibility for Wavelength Switched
                 Optical Networks, Section 3";
  }

  identity switching-flexi-grid-lsc {
    base te-types:switching-lsc;
    description
      "Flexi-grid Lambda-Switch Capable (Flexi-Grid-LSC).";
    reference
      "RFC 8363: GMPLS OSPF-TE Extensions in Support of Flexi-Grid
                 Dense Wavelength Division Multiplexing (DWDM)
                 Networks, Section 4.1";
  }

  /*
   * 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.";
    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 clause 5.3 of ITU-T G.698.2.";
    reference
      "ITU-T G.698.2 v3.0 (11/2018): Amplified multichannel dense
                   wavelength division multiplexing applications
                   with single channel optical interfaces Optical
                   transport network, Clause 5.3";
  }

  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
      "RFC ZZZZ: A YANG Data Model for Optical Impairment-aware
                 Topology, Section 2.5.2";
  }

  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
      "RFC ZZZZ: A YANG Data Model for Optical Impairment-aware
                 Topology, Section 2.5.2";
  }

  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 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 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 l0-label-range-info {
    description
      "Common grouping used to define WSON, flexi-grid and WDM label
       ranges.

       When used to define a WSON label range, this grouping SHOULD
       be used together with the wson-label-start-end and
       wson-label-step groupings to provide WSON technology-specific
       label information to the models which use the
       label-restriction-info grouping defined in the module
       ietf-te-types.";
    leaf grid-type {
      type identityref {
        base l0-grid-type;
      }
      description
        "The type of WDM 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";
    }
    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)";
    }
  }

  grouping wson-label-start-end {
    description
      "The WSON label-start or label-end used to specify WSON label
       range.

       This grouping is dependent on the range-type defined in the
       l0-label-range-info grouping.

       This grouping SHOULD be used together with the
       l0-label-range-info and wson-label-step groupings to provide
       WSON technology-specific label information to the models which
       use the label-restriction-info grouping defined in the module
       ietf-te-types.";
    reference
      "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC)
                 Label Switching Routers";
    choice grid-type {
      description
        "Label for DWDM or CWDM grid";
      case dwdm {
        leaf dwdm-n {
          when 'derived-from-or-self(../../../grid-type, '
             + '"l0-types:wson-grid-dwdm")' {
            description
              "Valid only when grid type is DWDM.";
          }
          type 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, '
             + '"l0-types:wson-grid-cwdm")' {
            description
              "Valid only when grid type is CWDM.";
          }
          type cwdm-n;
          description
            "Channel wavelength computing input.";
          reference
            "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                      (LSC) Label Switching Routers";
        }
      }
    }
  }

  grouping wson-label-step {
    description
      "Label step information for WSON.

       This grouping is dependent on the range-type defined in the
       l0-label-range-info grouping.

       This grouping SHOULD be used together with the
       l0-label-range-info and wson-label-start-end groupings to
       provide WSON technology-specific label information to the
       models which use the label-restriction-info grouping defined
       in the module ietf-te-types.";
    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";
    choice l0-grid-type {
      description
        "Grid type: DWDM, CWDM, etc.";
      case dwdm {
        leaf wson-dwdm-channel-spacing {
          when 'derived-from-or-self(../../grid-type, '
             + '"l0-types: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, '
             + '"l0-types: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";
        }
      }
    }
  }

  grouping wson-label-hop {
    description
      "Generic label-hop information for WSON.";
    reference
      "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC)
                 Label Switching Routers";
    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 dwdm-n;
              description
                "The given value 'N' is used to determine the
                 nominal central frequency.";
              reference
                "ITU-T G.694.1 (10/2020): Spectral grids for WDM
                               applications: DWDM frequency grid";
            }
          }
          case super {
            leaf-list subcarrier-dwdm-n {
              type 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 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";
        }
      }
    }
  }

  grouping flexi-grid-label-range-info {
    description
      "Flexi-grid-specific label range related information.

       This grouping SHOULD be used together with the
       flexi-grid-label-start-end and flexi-grid-label-step groupings
       to provide flexi-grid technology-specific label information to
       the models which use the label-restriction-info grouping
       defined in the module ietf-te-types.";
    uses l0-label-range-info;
    container flexi-grid {
      description
        "flexi-grid definition";
      leaf slot-width-granularity {
        type identityref {
          base flexi-slot-width-granularity;
        }
        default "l0-types:flexi-swg-12p5ghz";
        description
          "Minimum space between slot widths.";
        reference
          "RFC 8363: GMPLS OSPF-TE Extensions in Support of
                     Grid Dense Wavelength Division Multiplexing
                     (DWDM) Networks";
      }
      leaf min-slot-width-factor {
        type uint16 {
          range "1..max";
        }
        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-start-end {
    description
      "Common grouping used to define the value 'N' which is used to
       determine the nominal central frequency (e.g., as the
       flexi-grid label-start or label-end used to specify flexi-grid
       label range).

       When used to define a flexi-grid label range, this grouping
       SHOULD be used together with the flexi-grid-label-range-info
       and flexi-grid-label-step groupings to provide flexi-grid
       technology-specific label information to the models which use
       the label-restriction-info grouping defined in the module
       ietf-te-types.";
    reference
      "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda
                 Switch Capable (LSC) Label Switching Routers";
    leaf flexi-n {
      type 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.";
    }
  }

  grouping flexi-grid-label-step {
    description
      "Label step information for flexi-grid label ranges.

       This grouping SHOULD be used together with the
       flexi-grid-label-range-info and flexi-grid-label-start-end
       groupings to provide flexi-grid technology-specific label
       information to the models which use the label-restriction-info
       grouping defined in the module ietf-te-types.";
    leaf flexi-grid-channel-spacing {
      type identityref {
        base flexi-ch-spc-type;
      }
      default "l0-types:flexi-ch-spc-6p25ghz";
      status obsolete;
      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 "l0-types: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.";
      reference
        "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.";
    reference
      "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda
                 Switch Capable (LSC) Label Switching Routers";
    uses flexi-grid-label-start-end;
    leaf flexi-m {
      type flexi-m;
      description
        "The given value 'M' is used to determine the slot width.";
    }
  }

  grouping flexi-grid-label-hop {
    description
      "Generic label-hop information for flexi-grid.";
    reference
      "RFC 7699: Generalized Labels for the Flexi-Grid in Lambda
                 Switch Capable (LSC) Label Switching Routers";
    choice single-or-super-channel {
      description
        "single or super channel";
      case single {
        uses flexi-grid-frequency-slot;
      }
      case super {
        status obsolete;
        list subcarrier-flexi-n {
          key "flexi-n";
          status obsolete;
          description
            "List of subcarrier channels for flexi-grid super
             channel.";
          uses flexi-grid-frequency-slot {
            status obsolete;
          }
        }
      }
      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;
            description
              "List of frequency slots used for flexi-grid super
               channel.";
            uses flexi-grid-frequency-slot;
          }
        }
      }
    }
  }

  grouping wdm-label-range-info {
    description
      "Label range information for WDM.

       This grouping SHOULD be used together with the
       wdm-label-start-end and wdm-label-step groupings to provide
       WDM technology-specific label information to the models which
       use the label-restriction-info grouping defined in the module
       ietf-te-types.";
    container wdm-label-range {
      description
        "Label range information for WDM.";
      uses l0-label-range-info;
      container flexi-grid {
        when 'derived-from-or-self(../grid-type, '
           + '"l0-types: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 "l0-types:flexi-swg-12p5ghz";
          description
            "Minimum space between slot widths.";
          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";
          }
          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 wdm-label-start-end {
    description
      "The WDM label-start or label-end used to specify DWDM and
       CWDM label ranges.

       This grouping is dependent on the range-type defined in the
       wdm-label-range-info grouping.

       This grouping SHOULD be used together with the
       wdm-label-range-info and wdm-label-step groupings to provide
       WDM technology-specific label information to the models which
       use the label-restriction-info grouping defined in the module
       ietf-te-types.";
    reference
      "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC)
                 Label Switching Routers
       RFC 7699: Generalized Labels for the Flexi-Grid in Lambda
                 Switch Capable (LSC) Label Switching Routers";
    container wdm-label {
      description
        "Label start or label end for WDM.

         The format of the label depends on the type of WDM grid
         specified in the 'grid-type' leaf defined in the
         wdm-label-range-info grouping.";
      leaf dwdm-n {
        when 'derived-from-or-self(../../../../wdm-label-range'
           + '/grid-type, "l0-types:wson-grid-dwdm")' {
          description
            "Valid only when grid type is a fixed DWDM grid.";
        }
        type dwdm-n;
        description
          "The given value 'N' is used to determine the
           nominal central frequency on a DWDM fixed grid.";
        reference
          "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                    (LSC) Label Switching Routers";
      }
      leaf cwdm-n {
        when 'derived-from-or-self(../../../../wdm-label-range'
           + '/grid-type, "l0-types:wson-grid-cwdm")' {
          description
            "Valid only when grid type is a CWDM grid.";
        }
        type cwdm-n;
        description
          "The given value 'N' is used to determine the nominal
           central wavelength on a CWDM fixed grid.";
        reference
          "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                    (LSC) Label Switching Routers";
      }
      uses flexi-grid-label-start-end {
        when 'derived-from-or-self(../../../wdm-label-range'
           + '/grid-type, "l0-types:flexi-grid-dwdm")' {
          description
            "Valid only when grid type is a flexible DWDM grid.";
        }
      }
    }
  }

  grouping wdm-label-step {
    description
      "The WDM label-step used to specify DWDM and CWDM label
       ranges.

       This grouping is dependent on the range-type defined in the
       wdm-label-range-info grouping.

       This grouping SHOULD be used together with the
       wdm-label-range-info and wdm-label-start-end groupings to
       provide WDM technology-specific label information to the
       models which use the label-restriction-info grouping defined
       in the module ietf-te-types.";
    reference
      "RFC 6205: Generalized Labels for Lambda-Switch-Capable (LSC)
                 Label Switching Routers
       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";
    container wdm-label-step {
      description
        "Label step for WDM.

         The format of the label depends on the type of WDM grid
         specified in the 'grid-type' leaf defined in the
         wdm-label-range-info grouping.";
      leaf wson-dwdm-channel-spacing {
        when 'derived-from-or-self(../../../wdm-label-range'
           + '/grid-type, "l0-types:wson-grid-dwdm")' {
          description
            "Valid only when grid type is a fixed DWDM grid.";
        }
        type identityref {
          base dwdm-ch-spc-type;
        }
        description
          "The channel spacing (GHz) of a fixed DWDM grid, e.g.,
           100 GHz, 50 GHz, 25 GHz, or 12.5 GHz.";
        reference
          "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                    (LSC) Label Switching Routers";
      }
      leaf wson-cwdm-channel-spacing {
        when 'derived-from-or-self(../../../wdm-label-range'
           + '/grid-type, "l0-types:wson-grid-cwdm")' {
          description
            "Valid only when grid type is a CWDM grid.";
        }
        type identityref {
          base cwdm-ch-spc-type;
        }
        description
          "The channel spacing (nm) of a fixed CWDM grid, e.g., 20nm
           (which is the only standardized value).";
        reference
          "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                    (LSC) Label Switching Routers";
      }
      container flexi-grid-cfg {
        when 'derived-from-or-self(../../../wdm-label-range'
           + '/grid-type, "l0-types:flexi-grid-dwdm")' {
          description
            "Valid only when grid type is a flexible DWDM grid.";
        }
        description
          "The Central Frequency Granularity (CFG) of a flexible DWDM
           grid (flexi-grid), defined as a multiplier of the Nominal
           central frequency granularity (NCFG).";
        uses flexi-grid-label-step;
      }
    }
  }

  grouping wdm-label-hop {
    description
      "Generic label-hop information for DWDM and CWDM labels.";
    container wdm-label {
      description
        "Label hop for WDM.";
      choice grid-type {
        description
          "Label for DWDM or CWDM grid.";
        reference
          "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                     (LSC) Label Switching Routers";
        case fixed-dwdm {
          choice fixed-single-or-multi-channel {
            description
              "Single channel or multichannel.";
            case single {
              leaf dwdm-n {
                type dwdm-n;
                description
                  "The given value 'N' is used to determine the
                   nominal central frequency.";
              }
            }
            case multi {
              leaf-list subcarrier-dwdm-n {
                type 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 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 flexi-grid-label-hop;
        }
      }
    }
  }

  grouping transceiver-capabilities {
    description
      "This grouping is intended to be used for reporting the
       capabilities of a transceiver.

       When this grouping is used, the explicit-mode container shall
       be augmented with a leafref to an explicit mode template with
       the proper XPath which depends on where this grouping is
       actually used.";
    reference
      "RFC ZZZZ: A YANG Data Model for Optical Impairment-aware
                 Topology.";
    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";
        min-elements 1;
        description
          "The list of supported transceiver's modes.";
        leaf mode-id {
          type string {
            length "1..255";
          }
          description
            "An identifier for the supported transceiver's mode.";
        }
        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 {
              description
                "The set of attributes for an organizational mode";
              uses organizational-mode;
              uses common-standard-organizational-mode;
              uses common-all-modes;
            }
          }
          case explicit-mode {
            container explicit-mode {
              description
                "The set of attributes for an 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.";
                leaf-list supported-application-code {
                  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-mode {
                  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.";
                }
              }
            }
          }
        }
      }
    }
  }

  grouping standard-mode {
    description
      "Identifies an ITU-T G.698.2 standard application code.";
    reference
      "ITU-T G.698.2 v3.0 (11/2018): Amplified multichannel dense
                 wavelength division multiplexing applications
                 with single channel optical interfaces Optical
                 transport network, Clause 5.3";
    leaf standard-mode {
      type standard-mode;
      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 clause 5.3 of ITU-T G.698.2.";
    }
  }

  grouping organizational-mode {
    description
      "Transponder operational mode supported by organizations or
       vendor";
    reference
      "RFC ZZZZ: A YANG Data Model for Optical Impairment-aware
                  Topology, Section 2.6.2";
    leaf operational-mode {
      type operational-mode;
      description
        "configured organization- or vendor-specific
         application identifiers (AI) supported by the transponder";
    }
    leaf organization-identifier {
      type organization-identifier;
      description
        "The identifier of the organization that defines the
         organizational-mode.";
    }
  }

  grouping penalty-value {
    description
      "A common definition of the Optical Signal-to-Noise Ratio
       (OSNR) penalty value used for describing multiple penalty
       types (e.g., CD, PMD, or PDL).";
    leaf penalty-value {
      type union {
        type decimal-2 {
          range "0..max";
        }
        type empty;
      }
      units "dB";
      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 v3.0 (11/2018): Amplified multichannel dense
                     wavelength division multiplexing applications
                     with single channel optical interfaces Optical
                     transport network, Clause 7.1.2";
    }
    leaf bitrate {
      type uint16;
      units "Gbit/sec";
      config false;
      description
        "The gross bitrate (e.g., 100 or 200) of the optical
         tributary signal.";
    }
    leaf max-diff-group-delay {
      type decimal-2;
      units "ps";
      config false;
      description
        "The maximum Differential Group Delay (DGD)  the receiver can
         tolerate.";
    }
    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 at Rx-power reference point
         (rx-ref-channel-power) and in absence of other
         impairments.";
      reference
        "RFC ZZZZ: A YANG Data Model for Optical
                   Impairment-aware Topology, Section 2.6.4";
    }
    list cd-penalty {
      key "cd-value";
      config false;
      description
        "Optional penalty associated with a given accumulated
         chromatic dispersion (CD) value measured in
         absence of other impairments.

         This list of pair CD and OSNR penalty can be used to
         sample the function OSNR penalty = f(CD).";
      reference
        "RFC ZZZZ: A YANG Data Model for Optical
                   Impairment-aware Topology, Section 2.6.4";
      leaf cd-value {
        type decimal-2;
        units "ps/nm";
        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 at Rx-power reference point
         (rx-ref-channel-power) and in absence of other impairments";
      reference
        "ITU-T G.666 (02/2011): Characteristics of polarization
                   mode dispersion compensators and of receivers that
                   compensate for polarization mode dispersion
         RFC ZZZZ: A YANG Data Model for Optical Impairment-aware
                   Topology, Section 2.4.6";
    }
    list pmd-penalty {
      key "pmd-value";
      config false;
      description
        "Optional penalty associated with a given accumulated
         polarization mode dispersion (PMD) value measured in
         absence of other impairments.

         This list of pair PMD and OSNR penalty can be used to
         sample the function OSNR penalty = f(PMD).";
      reference
        "RFC ZZZZ: A YANG Data Model for Optical Impairment-aware
                   Topology, Section 2.4.6";
      leaf pmd-value {
        type decimal-2 {
          range "0..max";
        }
        units "ps";
        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 polarization dependent
         loss (PDL) on the receiver at Rx-power reference point
         (rx-ref-channel-power) and in absence of other
         impairments.";
      reference
        "RFC ZZZZ: A YANG Data Model for Optical Impairment-aware
                   Topology, Section 2.4.6";
    }
    list pdl-penalty {
      key "pdl-value";
      config false;
      description
        "Optional penalty associated with a given accumulated
         polarization dependent loss (PDL) value, measured in
         absence of other impairments.

         This list of pair PDL and OSNR penalty can be used to
         sample the function OSNR penalty = f(PDL).";
      reference
        "RFC ZZZZ: A YANG Data Model for Optical Impairment-aware
                   Topology, Section 2.4.6";
      leaf pdl-value {
        type power-loss;
        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
        "Minimum 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 OSNR penalty can be used to
         sample the function OSNR penalty = f(rx-channel-power).";
      leaf rx-channel-power-value {
        type power-dbm;
        units "dBm";
        description
          "The Received Power.";
      }
      uses penalty-value;
    }
    leaf min-Q-factor {
      type decimal-2;
      units "dB";
      config false;
      description
        "The value of the Q factor at the FEC threshold
         (fec-threshold).";
      reference
        "ITU-T O.201 (07/2003): Q-factor test equipment to estimate
                   the transmission performance of optical channels";
    }
    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 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 v3.0 (11/2018): Amplified multichannel dense
                     wavelength division multiplexing applications
                     with single channel optical interfaces Optical
                     transport network, Clause 7.1.2";
    }
  }

  grouping transceiver-tuning-range {
    description
      "Transceiver tuning range (f-min, f-max, f-granularity)";
    leaf min-central-frequency {
      type frequency-thz;
      description
        "This parameter indicates the minimum frequency for the
         transceiver tuning range.";
    }
    leaf max-central-frequency {
      type frequency-thz;
      description
        "This parameter indicates the maximum frequency for the
         transceiver tuning range.";
    }
    leaf transceiver-tunability-granularity {
      type frequency-ghz;
      description
        "This parameter indicates the transceiver frequency
         fine-tuning granularity e.g 3.125GHz or 0.001GHz.";
    }
  }

  grouping common-all-modes {
    description
      "Common attributes used by all transceiver's modes.";
    container transceiver-tuning-range {
      config false;
      description
        "Transceiver tuning range (f-min, f-max, f-granularity)";
      uses transceiver-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 multichannel 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 v3.0 (11/2018): Amplified multichannel dense
                     wavelength division multiplexing applications
                     with single channel optical interfaces Optical
                     transport network, Clause 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 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 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 frequency-range-with-identifier {
    description
      "This grouping extends the frequency-range with an identifier,
       which used as a key when it is needed to define different
       properties (e.g., optical impairments) for different
       frequency 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 frequency-range;
    }
  }

  grouping 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 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.";
    }
  }
}

<CODE ENDS>
Figure 1: Layer 0 Types YANG module

4. Security Considerations

This section is modeled after the template described in Section 3.7 of [I-D.ietf-netmod-rfc8407bis].

The "ietf-layer0-types" YANG module defines a data model that is designed to be accessed via YANG-based management protocols, such as NETCONF [RFC6241] and RESTCONF [RFC8040]. These YANG-based management protocols (1) have to use a secure transport layer (e.g., SSH [RFC4252], TLS [RFC8446], and QUIC [RFC9000]) and (2) have to use mutual authentication.

The Network Configuration Access Control Model (NACM) [RFC8341] provides the means to restrict access for particular NETCONF or RESTCONF users to a preconfigured subset of all available NETCONF or RESTCONF protocol operations and content.

The YANG module defines a set of identities, types, and groupings. These nodes are intended to be reused by other YANG modules. The module by itself does not expose any data nodes that are writable, data nodes that contain read-only state, or RPCs. As such, there are no additional security issues related to the YANG module that need to be considered.

Modules that use the groupings that are defined in this document should identify the corresponding security considerations.

5. IANA Considerations

IANA is requested to update the following registration in the "ns" registry within the "IETF XML Registry" group [RFC3688] to reference this document:

      URI: urn:ietf:params:xml:ns:yang:ietf-layer0-types
      Registrant Contact:  The IESG.
      XML: N/A; the requested URI is an XML namespace.

IANA is requested to register the following YANG module in the "YANG Module Names" registry [RFC6020] within the "YANG Parameters" registry group.

      Name: ietf-layer0-types
      Maintained by IANA? N
      Namespace: urn:ietf:params:xml:ns:yang:ietf-layer0-types
      Prefix: l0-types
      Reference: RFC XXXX

6. References

6.1. Normative References

[I-D.ietf-ccamp-optical-impairment-topology-yang]
Beller, D., Le Rouzic, E., Belotti, S., Galimberti, G., and I. Busi, "A YANG Data Model for Optical Impairment-aware Topology", Work in Progress, Internet-Draft, draft-ietf-ccamp-optical-impairment-topology-yang-19, , <https://datatracker.ietf.org/doc/html/draft-ietf-ccamp-optical-impairment-topology-yang-19>.
[I-D.ietf-teas-rfc8776-update]
Busi, I., Guo, A., Liu, X., Saad, T., and I. Bryskin, "Common YANG Data Types for Traffic Engineering", Work in Progress, Internet-Draft, draft-ietf-teas-rfc8776-update-17, , <https://datatracker.ietf.org/doc/html/draft-ietf-teas-rfc8776-update-17>.
[ITU-T_G.666]
International Telecommunication Union, "Characteristics of polarization mode dispersion compensators and of receivers that compensate for polarization mode dispersion"", ITU-T Recommendation G.666 , , <https://www.itu.int/rec/T-REC-G.666>.
[ITU-T_G.694.1]
International Telecommunication Union, "Spectral grids for WDM applications: DWDM frequency grid", ITU-T Recommendation G.694.1 , , <https://www.itu.int/rec/T-REC-G.694.1>.
[ITU-T_G.694.2]
International Telecommunication Union, "Spectral grids for WDM applications: CWDM wavelength grid", ITU-T Recommendation G.694.2 , , <https://www.itu.int/rec/T-REC-G.694.2>.
[ITU-T_G.698.2]
International Telecommunication Union, "Amplified multichannel dense wavelength division multiplexing applications with single channel optical interfaces", ITU-T Recommendation G.698.2 , , <https://www.itu.int/rec/T-REC-G.698.2>.
[ITU-T_G.709]
International Telecommunication Union, "Interfaces for the optical transport network", ITU-T Recommendation G.709 , , <https://www.itu.int/rec/T-REC-G.709>.
[ITU-T_G.709.2]
International Telecommunication Union, "OTU4 long-reach interface", ITU-T Recommendation G.709.2, Corrigendum 1 , , <https://www.itu.int/rec/T-REC-G.709.2>.
[ITU-T_G.709.3]
International Telecommunication Union, "Flexible OTN B100G long-reach interfaces", ITU-T Recommendation G.709.3, Amendment 1 , , <https://www.itu.int/rec/T-REC-G.709.3>.
[ITU-T_G.959.1]
International Telecommunication Union, "Optical transport network physical layer interfaces", ITU-T Recommendation G.959.1 , , <https://www.itu.int/rec/T-REC-G.959.1>.
[ITU-T_G.9700]
International Telecommunication Union, "Fast access to subscriber terminals (G.fast) - Power spectral density specification", ITU-T Recommendation G.9700 , , <https://www.itu.int/rec/T-REC-G.9700>.
[ITU-T_G.975]
International Telecommunication Union, "Forward error correction for submarine systems", ITU-T Recommendation G.975 , , <https://www.itu.int/rec/T-REC-G.975>.
[ITU-T_G.975.1]
International Telecommunication Union, "Forward error correction for high bit-rate DWDM submarine systems", ITU-T Recommendation G.975.1, Corrigendum 2 , , <https://www.itu.int/rec/T-REC-G.975.1>.
[ITU-T_G.977.1]
International Telecommunication Union, "Transverse compatible dense wavelength division multiplexing applications for repeatered optical fibre submarine cable systems", ITU-T Recommendation G.977.1 , , <https://www.itu.int/rec/T-REC-G.977.1>.
[OIF_400ZR]
Optical Internetworking Forum, "Implementation Agreement 400ZR", OIF-400ZR-01.0 Implementation Agreement , , <https://www.oiforum.com/wp-content/uploads/OIF-400ZR-01.0_reduced2.pdf>.
[RFC2119]
Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, , <https://www.rfc-editor.org/rfc/rfc2119>.
[RFC3471]
Berger, L., Ed., "Generalized Multi-Protocol Label Switching (GMPLS) Signaling Functional Description", RFC 3471, DOI 10.17487/RFC3471, , <https://www.rfc-editor.org/rfc/rfc3471>.
[RFC4203]
Kompella, K., Ed. and Y. Rekhter, Ed., "OSPF Extensions in Support of Generalized Multi-Protocol Label Switching (GMPLS)", RFC 4203, DOI 10.17487/RFC4203, , <https://www.rfc-editor.org/rfc/rfc4203>.
[RFC6205]
Otani, T., Ed. and D. Li, Ed., "Generalized Labels for Lambda-Switch-Capable (LSC) Label Switching Routers", RFC 6205, DOI 10.17487/RFC6205, , <https://www.rfc-editor.org/rfc/rfc6205>.
[RFC7688]
Lee, Y., Ed. and G. Bernstein, Ed., "GMPLS OSPF Enhancement for Signal and Network Element Compatibility for Wavelength Switched Optical Networks", RFC 7688, DOI 10.17487/RFC7688, , <https://www.rfc-editor.org/rfc/rfc7688>.
[RFC7689]
Bernstein, G., Ed., Xu, S., Lee, Y., Ed., Martinelli, G., and H. Harai, "Signaling Extensions for Wavelength Switched Optical Networks", RFC 7689, DOI 10.17487/RFC7689, , <https://www.rfc-editor.org/rfc/rfc7689>.
[RFC7699]
Farrel, A., King, D., Li, Y., and F. Zhang, "Generalized Labels for the Flexi-Grid in Lambda Switch Capable (LSC) Label Switching Routers", RFC 7699, DOI 10.17487/RFC7699, , <https://www.rfc-editor.org/rfc/rfc7699>.
[RFC7950]
Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", RFC 7950, DOI 10.17487/RFC7950, , <https://www.rfc-editor.org/rfc/rfc7950>.
[RFC8174]
Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, , <https://www.rfc-editor.org/rfc/rfc8174>.
[RFC8341]
Bierman, A. and M. Bjorklund, "Network Configuration Access Control Model", STD 91, RFC 8341, DOI 10.17487/RFC8341, , <https://www.rfc-editor.org/rfc/rfc8341>.
[RFC8342]
Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., and R. Wilton, "Network Management Datastore Architecture (NMDA)", RFC 8342, DOI 10.17487/RFC8342, , <https://www.rfc-editor.org/rfc/rfc8342>.
[RFC8363]
Zhang, X., Zheng, H., Casellas, R., Gonzalez de Dios, O., and D. Ceccarelli, "GMPLS OSPF-TE Extensions in Support of Flexi-Grid Dense Wavelength Division Multiplexing (DWDM) Networks", RFC 8363, DOI 10.17487/RFC8363, , <https://www.rfc-editor.org/rfc/rfc8363>.
[RFC8795]
Liu, X., Bryskin, I., Beeram, V., Saad, T., Shah, H., and O. Gonzalez de Dios, "YANG Data Model for Traffic Engineering (TE) Topologies", RFC 8795, DOI 10.17487/RFC8795, , <https://www.rfc-editor.org/rfc/rfc8795>.

6.2. Informative References

[I-D.ietf-ccamp-dwdm-if-param-yang]
Galimberti, G., Hiremagalur, D., Grammel, G., Manzotti, R., and D. Breuer, "A YANG data model to manage configurable DWDM optical interfaces", Work in Progress, Internet-Draft, draft-ietf-ccamp-dwdm-if-param-yang-13, , <https://datatracker.ietf.org/doc/html/draft-ietf-ccamp-dwdm-if-param-yang-13>.
[I-D.ietf-netmod-rfc8407bis]
Bierman, A., Boucadair, M., and Q. Wu, "Guidelines for Authors and Reviewers of Documents Containing YANG Data Models", Work in Progress, Internet-Draft, draft-ietf-netmod-rfc8407bis-28, , <https://datatracker.ietf.org/doc/html/draft-ietf-netmod-rfc8407bis-28>.
[ITU-T_G.807]
International Telecommunication Union, "Generic functional architecture of the optical media network", ITU-T Supplement G.807, Amendment 1 , .
[ITU-T_G.872]
International Telecommunication Union, "Architecture of optical transport networks", ITU-T Supplement G.872, Amendment 1 , .
[ITU-T_G.Sup39]
International Telecommunication Union, "Optical system design and engineering considerations", ITU-T Supplement G.Sup39 , .
[RFC3688]
Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, DOI 10.17487/RFC3688, , <https://www.rfc-editor.org/rfc/rfc3688>.
[RFC4252]
Ylonen, T. and C. Lonvick, Ed., "The Secure Shell (SSH) Authentication Protocol", RFC 4252, DOI 10.17487/RFC4252, , <https://www.rfc-editor.org/rfc/rfc4252>.
[RFC6020]
Bjorklund, M., Ed., "YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)", RFC 6020, DOI 10.17487/RFC6020, , <https://www.rfc-editor.org/rfc/rfc6020>.
[RFC6163]
Lee, Y., Ed., Bernstein, G., Ed., and W. Imajuku, "Framework for GMPLS and Path Computation Element (PCE) Control of Wavelength Switched Optical Networks (WSONs)", RFC 6163, DOI 10.17487/RFC6163, , <https://www.rfc-editor.org/rfc/rfc6163>.
[RFC6241]
Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., and A. Bierman, Ed., "Network Configuration Protocol (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, , <https://www.rfc-editor.org/rfc/rfc6241>.
[RFC7446]
Lee, Y., Ed., Bernstein, G., Ed., Li, D., and W. Imajuku, "Routing and Wavelength Assignment Information Model for Wavelength Switched Optical Networks", RFC 7446, DOI 10.17487/RFC7446, , <https://www.rfc-editor.org/rfc/rfc7446>.
[RFC7581]
Bernstein, G., Ed., Lee, Y., Ed., Li, D., Imajuku, W., and J. Han, "Routing and Wavelength Assignment Information Encoding for Wavelength Switched Optical Networks", RFC 7581, DOI 10.17487/RFC7581, , <https://www.rfc-editor.org/rfc/rfc7581>.
[RFC7698]
Gonzalez de Dios, O., Ed., Casellas, R., Ed., Zhang, F., Fu, X., Ceccarelli, D., and I. Hussain, "Framework and Requirements for GMPLS-Based Control of Flexi-Grid Dense Wavelength Division Multiplexing (DWDM) Networks", RFC 7698, DOI 10.17487/RFC7698, , <https://www.rfc-editor.org/rfc/rfc7698>.
[RFC8040]
Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF Protocol", RFC 8040, DOI 10.17487/RFC8040, , <https://www.rfc-editor.org/rfc/rfc8040>.
[RFC8340]
Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", BCP 215, RFC 8340, DOI 10.17487/RFC8340, , <https://www.rfc-editor.org/rfc/rfc8340>.
[RFC8446]
Rescorla, E., "The Transport Layer Security (TLS) Protocol Version 1.3", RFC 8446, DOI 10.17487/RFC8446, , <https://www.rfc-editor.org/rfc/rfc8446>.
[RFC9000]
Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based Multiplexed and Secure Transport", RFC 9000, DOI 10.17487/RFC9000, , <https://www.rfc-editor.org/rfc/rfc9000>.
[RFC9093]
Zheng, H., Lee, Y., Guo, A., Lopez, V., and D. King, "A YANG Data Model for Layer 0 Types", RFC 9093, DOI 10.17487/RFC9093, , <https://www.rfc-editor.org/rfc/rfc9093>.

Appendix A. The Complete Schema Trees

This appendix presents the complete tree of the Layer 0 Types data model. See [RFC8340] for an explanation of the symbols used. The data type of every leaf node is shown near the right end of the corresponding line.

module: ietf-layer0-types

  grouping l0-label-range-info:
    +-- grid-type?   identityref
    +-- priority?    uint8
  grouping wson-label-start-end:
    +-- (grid-type)?
       +--:(dwdm)
       |  +-- dwdm-n?   dwdm-n
       +--:(cwdm)
          +-- cwdm-n?   cwdm-n
  grouping wson-label-step:
    +-- (l0-grid-type)?
       +--:(dwdm)
       |  +-- wson-dwdm-channel-spacing?   identityref
       +--:(cwdm)
          +-- wson-cwdm-channel-spacing?   identityref
  grouping wson-label-hop:
    +-- (grid-type)?
       +--:(dwdm)
       |  +-- (single-or-super-channel)?
       |     +--:(single)
       |     |  +-- dwdm-n?              dwdm-n
       |     +--:(super)
       |        +-- subcarrier-dwdm-n*   dwdm-n
       +--:(cwdm)
          +-- cwdm-n?                    cwdm-n
  grouping flexi-grid-label-range-info:
    +-- grid-type?    identityref
    +-- priority?     uint8
    +-- flexi-grid
       +-- slot-width-granularity?   identityref
       +-- min-slot-width-factor?    uint16
       +-- max-slot-width-factor?    uint16
  grouping flexi-grid-label-start-end:
    +-- flexi-n?   flexi-n
  grouping flexi-grid-label-step:
    o-- flexi-grid-channel-spacing?   identityref
    +-- flexi-ncfg?                   identityref
    +-- flexi-n-step?                 uint8
  grouping flexi-grid-frequency-slot:
    +-- flexi-n?   flexi-n
    +-- flexi-m?   flexi-m
  grouping flexi-grid-label-hop:
    +-- (single-or-super-channel)?
       +--:(single)
       |  +-- flexi-n?              flexi-n
       |  +-- flexi-m?              flexi-m
       o--:(super)
       |  o-- subcarrier-flexi-n* [flexi-n]
       |     +-- flexi-n?   flexi-n
       |     +-- flexi-m?   flexi-m
       +--:(multi)
          +-- frequency-slots
             +-- frequency-slot* [flexi-n]
                +-- flexi-n?   flexi-n
                +-- flexi-m?   flexi-m
  grouping wdm-label-range-info:
    +-- wdm-label-range
       +-- grid-type?    identityref
       +-- priority?     uint8
       +-- flexi-grid
          +-- slot-width-granularity?   identityref
          +-- min-slot-width-factor?    uint16
          +-- max-slot-width-factor?    uint16
  grouping wdm-label-start-end:
    +-- wdm-label
       +-- dwdm-n?    dwdm-n
       +-- cwdm-n?    cwdm-n
       +-- flexi-n?   flexi-n
  grouping wdm-label-step:
    +-- wdm-label-step
       +-- wson-dwdm-channel-spacing?   identityref
       +-- wson-cwdm-channel-spacing?   identityref
       +-- flexi-grid-cfg
          o-- flexi-grid-channel-spacing?   identityref
          +-- flexi-ncfg?                   identityref
          +-- flexi-n-step?                 uint8
  grouping wdm-label-hop:
    +-- wdm-label
       +-- (grid-type)?
          +--:(fixed-dwdm)
          |  +-- (fixed-single-or-multi-channel)?
          |     +--:(single)
          |     |  +-- dwdm-n?               dwdm-n
          |     +--:(multi)
          |        +-- subcarrier-dwdm-n*    dwdm-n
          +--:(cwdm)
          |  +-- cwdm-n?                     cwdm-n
          +--:(flexi-grid)
             +-- (single-or-super-channel)?
                +--:(single)
                |  +-- flexi-n?              flexi-n
                |  +-- flexi-m?              flexi-m
                o--:(super)
                |  o-- subcarrier-flexi-n* [flexi-n]
                |     +-- flexi-n?   flexi-n
                |     +-- flexi-m?   flexi-m
                +--:(multi)
                   +-- frequency-slots
                      +-- frequency-slot* [flexi-n]
                         +-- flexi-n?   flexi-n
                         +-- flexi-m?   flexi-m
  grouping transceiver-capabilities:
    +--ro supported-modes!
       +--ro supported-mode* [mode-id]
          +--ro mode-id?                          string
          +--ro (mode)
             +--:(G.698.2)
             |  +--ro standard-mode?              standard-mode
             |  +--ro line-coding-bitrate*        identityref
             |  +--ro transceiver-tuning-range
             |  |  +--ro min-central-frequency?
             |  |  |       frequency-thz
             |  |  +--ro max-central-frequency?
             |  |  |       frequency-thz
             |  |  +--ro transceiver-tunability-granularity?
             |  |          frequency-ghz
             |  +--ro tx-channel-power-min?       power-dbm
             |  +--ro tx-channel-power-max?       power-dbm
             |  +--ro rx-channel-power-min?       power-dbm
             |  +--ro rx-channel-power-max?       power-dbm
             |  +--ro rx-total-power-max?         power-dbm
             +--:(organizational-mode)
             |  +--ro organizational-mode
             |     +--ro operational-mode?           operational-mode
             |     +--ro organization-identifier?
             |     |       organization-identifier
             |     +--ro line-coding-bitrate*        identityref
             |     +--ro transceiver-tuning-range
             |     |  +--ro min-central-frequency?
             |     |  |       frequency-thz
             |     |  +--ro max-central-frequency?
             |     |  |       frequency-thz
             |     |  +--ro transceiver-tunability-granularity?
             |     |          frequency-ghz
             |     +--ro tx-channel-power-min?       power-dbm
             |     +--ro tx-channel-power-max?       power-dbm
             |     +--ro rx-channel-power-min?       power-dbm
             |     +--ro rx-channel-power-max?       power-dbm
             |     +--ro rx-total-power-max?         power-dbm
             +--:(explicit-mode)
                +--ro explicit-mode
                   +--ro transceiver-tuning-range
                   |  +--ro min-central-frequency?
                   |  |       frequency-thz
                   |  +--ro max-central-frequency?
                   |  |       frequency-thz
                   |  +--ro transceiver-tunability-granularity?
                   |          frequency-ghz
                   +--ro tx-channel-power-min?       power-dbm
                   +--ro tx-channel-power-max?       power-dbm
                   +--ro rx-channel-power-min?       power-dbm
                   +--ro rx-channel-power-max?       power-dbm
                   +--ro rx-total-power-max?         power-dbm
                   +--ro compatible-modes
                      +--ro supported-application-code*
                      |       -> ../../../../supported-mode/mode-id
                      +--ro supported-organizational-mode*
                              -> ../../../../supported-mode/mode-id
  grouping standard-mode:
    +-- standard-mode?   standard-mode
  grouping organizational-mode:
    +-- operational-mode?          operational-mode
    +-- organization-identifier?   organization-identifier
  grouping penalty-value:
    +-- penalty-value    union
  grouping explicit-mode:
    +--ro line-coding-bitrate?                identityref
    +--ro bitrate?                            uint16
    +--ro max-diff-group-delay?               decimal-2
    +--ro max-chromatic-dispersion?           decimal-2
    +--ro cd-penalty* [cd-value]
    |  +--ro cd-value?        decimal-2
    |  +--ro penalty-value    union
    +--ro max-polarization-mode-dispersion?   decimal-2
    +--ro pmd-penalty* [pmd-value]
    |  +--ro pmd-value?       decimal-2
    |  +--ro penalty-value    union
    +--ro max-polarization-dependent-loss     power-loss-or-null
    +--ro pdl-penalty* [pdl-value]
    |  +--ro pdl-value?       power-loss
    |  +--ro penalty-value    union
    +--ro available-modulation-type?          identityref
    +--ro min-OSNR?                           snr
    +--ro rx-ref-channel-power?               power-dbm
    +--ro rx-channel-power-penalty* [rx-channel-power-value]
    |  +--ro rx-channel-power-value?   power-dbm
    |  +--ro penalty-value             union
    +--ro min-Q-factor?                       decimal-2
    +--ro available-baud-rate?                decimal64
    +--ro roll-off?                           decimal64
    +--ro min-carrier-spacing?                frequency-ghz
    +--ro available-fec-type?                 identityref
    +--ro fec-code-rate?                      decimal64
    +--ro fec-threshold?                      decimal64
    +--ro in-band-osnr?                       snr
    +--ro out-of-band-osnr?                   snr
    +--ro tx-polarization-power-difference?   power-ratio
    +--ro polarization-skew?                  decimal-2
  grouping common-standard-organizational-mode:
    +--ro line-coding-bitrate*   identityref
  grouping transceiver-tuning-range:
    +-- min-central-frequency?                frequency-thz
    +-- max-central-frequency?                frequency-thz
    +-- transceiver-tunability-granularity?   frequency-ghz
  grouping common-all-modes:
    +--ro transceiver-tuning-range
    |  +--ro min-central-frequency?                frequency-thz
    |  +--ro max-central-frequency?                frequency-thz
    |  +--ro transceiver-tunability-granularity?   frequency-ghz
    +--ro tx-channel-power-min?       power-dbm
    +--ro tx-channel-power-max?       power-dbm
    +--ro rx-channel-power-min?       power-dbm
    +--ro rx-channel-power-max?       power-dbm
    +--ro rx-total-power-max?         power-dbm
  grouping common-transceiver-param:
    +-- line-coding-bitrate?   identityref
    +-- tx-channel-power?      power-dbm-or-null
    +--ro rx-channel-power?      power-dbm-or-null
    +--ro rx-total-power?        power-dbm-or-null
  grouping common-transceiver-configured-param:
    +-- line-coding-bitrate?   identityref
    +-- tx-channel-power?      power-dbm-or-null
  grouping common-transceiver-readonly-param:
    +--ro rx-channel-power?   power-dbm-or-null
    +--ro rx-total-power?     power-dbm-or-null
  grouping tunnel-attributes:
    +-- wavelength-assignment?   identityref
  grouping frequency-range:
    +-- lower-frequency    frequency-thz
    +-- upper-frequency    frequency-thz
  grouping frequency-range-with-identifier:
    +-- frequency-range-id?   uint16
    +-- frequency-range
       +-- lower-frequency    frequency-thz
       +-- upper-frequency    frequency-thz
  grouping path-constraints:
    +-- gsnr-extra-margin?   snr
  grouping path-properties:
    +--ro estimated-gsnr?          snr
    +--ro estimated-eol-gsnr?      snr
    +--ro estimated-lowest-gsnr?   snr
Figure 2

Appendix B. Changes from RFC 9093

This version adds new identities, data types, and groupings to the 'ietf-layer0-types' YANG module. It also fixes few bugs in [RFC9093].

The following new YANG identities have been added to the 'ietf-layer0-types' module:

The following new YANG data types have been added to the 'ietf-layer0-types' module:

The following new YANG groupings have been added to the 'ietf-layer0-types' module:

The following YANG identities have been obsolted (bug fixing) in the 'ietf-layer0-types' module:

The case super within the flexi-grid-label-hop has been obsolted (bug fixing).

The flexi-grid-channel-spacing data node in flexi-grid-label-step grouping has been obsoleted (bug fixing).

The default value of the min-slot-width-factor data node within flexi-grid-label-range-info grouping has been removed (bug fixing).

Acknowledgments

The authors and the working group give their sincere thanks to Robert Wilton for the YANG doctor review and to Adrian Farrel and Tom Petch for their comments during the model and document development.

This document was prepared using kramdown.

Contributors

Haomian Zheng
Huawei
Daniel King
University of Lancaster
Gabriele Galimberti
Nokia
Enrico Griseri
Nokia
Dhruv Dhody
Huawei
Bin Yeong Yoon
ETRI
Ricard Vilalta
CTTC
Young Lee
Samsung
Victor Lopez
Nokia
Roberto Manzotti
Cisco
Gert Grammel
Juniper

Authors' Addresses

Sergio Belotti (editor)
Nokia
Italo Busi (editor)
Huawei
Dieter Beller (editor)
Nokia
Esther Le Rouzic
Orange
Aihua Guo
Futurewei Technologies