A YANG Data Model for Layer 1 Types
Haomian Zheng
Huawei Technologies
H1, Huawei Xiliu Beipo Village, Songshan Lake
Dongguan
Guangdong
523808
China
zhenghaomian@huawei.com
Italo Busi
Huawei Technologies
Milan
Italy
Italo.Busi@huawei.com
11 July 2022
CCAMP Working Group
This document defines a collection of common data types and groupings in the YANG data modeling language for use with layer 1 networks. These derived common types and groupings are intended to be imported by modules that specify OTN networks, such as topology, tunnel, client signal adaptation and service.

Introduction
This document specifies common data types, groupings and identities for use in YANG [RFC7950] data models of Layer 1 networks. The derived types and groupings are types applicable to modeling Traffic Engineering (TE) for Layer 1 networks.
The Optical Transport Networking, a typical Layer 1 network, is specified in [RFC7062]. The corresponding routing and signaling protocol are specified in [RFC7138] and [RFC7139]. The types and groupings defined in this document are consistent to those documents, and can be imported into other Layer 1 data models, including but not limited to, [I-D.ietf-ccamp-otn-topo-yang], [I-D.ietf-ccamp-otn-tunnel-model], [I-D.ietf-ccamp-client-signal-yang] and [I-D.ietf-ccamp-l1csm-yang].
The document is consistent with other specifications, including [MEF63] for Layer 1 service attributes, [ITU-Tg709] and [ITU-Tgsup43] for OTN data plane definitions.
The YANG data model in this document only defines groupings, typedef and identities and it does not define any configuration or state data, as specified in the Network Management Datastore Architecture defined in [RFC8342].

Terminology and Notations
Refer to [RFC7062] for the key terms used in this document. The terminology for describing YANG data models can be found in [RFC7950].

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 modules, as shown in table 1.

    +-------------+---------------------------+----------------------+
    | Prefix      | YANG module               | Reference            |
    +-------------+---------------------------+----------------------+
    | l1-types    | ietf-layer1-types         | This Document        |
    +-------------+---------------------------+----------------------+
           Table 1: Prefixes and Corresponding YANG Modules

RFC Editor Note: Please replace XXXX with the number assigned to the RFC once this draft becomes an RFC.

Layer 1 Types Overview

Relationship with other Modules
This document defines one YANG module for common Layer 1 types. The aim is to specify common Layer 1 TE types (i.e. typedef, identity, grouping) that can be imported by layer 1 specific technology, for example OTN, in its technology-specific modules, such as topology and tunnels. It is worth noting that the generic traffic-engineering (TE) types module is specified in [RFC8776] as ietf-te-types, and both YANG modules, ietf-te-types and ietf-layer1-types, will need importing when the OTN is configured. Generic attributes such as te-bandwidth and te-label, are specified in ietf-te-types in [RFC8776], while the OTN-specific attributes, such as odu-type, are specified in ietf-layer1-types in this document.

Content in Layer 1 Type Module
The module ietf-layer1-types contains the following YANG reusable types and groupings:
tributary-slot-granularity:
This specifies the granularity of the tributary slots used by the server layer ODU Link (HO ODUk or ODUCn) when supporting client layer ODU LSPs (LO ODUj or ODUk, respectively). Three granularities, 1.25G/2.5G/5G, have been specified.
odu-type:
This specifies the type of ODUk LSP, including the types specified in [RFC7139] and [RFC7963].
client-signal:
This specifies the client signal types of OTN networks. The initial input was the G-PID specified in [RFC7139]. Identities for some of the categories of client signal types, including ETH, STM-n, OC [ANSI] and Fiber Channel, have been specified.
otn-label-range-type:
The label range type of OTN is represented in one of two ways, tributary slots (TS) and tributary port number (TPN), as specified in [RFC7139]. Two representations are enumerated in the otn-label-range-type.
otn-link-bandwidth:
This grouping defines the link bandwidth information and could be used in OTN topology model for link bandwidth representation. All the bandwidth related sections in generic module, [RFC8776], need to be augmented with this grouping for the usage of Layer 1. The link bandwidth is represented by the number of ODUs that can be supported by the link for each ODU type as follow.

       +--:(otn)
          +--rw odulist* [odu-type]
             +--rw odu-type    identityref
             +--rw number?     uint16

For example, an OTN link with 100G bandwidth can support either 1xODU4, 10xODU2 or 80xODU0.
This grouping is also used to represent the ODUflex resources available on a link, as described in section 4.4.
otn-path-bandwidth:
This grouping defines the path bandwidth information and could be used in OTN topology model for path bandwidth representation. All the bandwidth related sections in generic module, [RFC8776], need to be augmented with this grouping for the usage of Layer 1. This grouping is also applicable when setting up the OTN tunnel. The path bandwidth is usually represented by the type of ODU (e.g., ODU0, ODU2, ODU4) being setup along the path as follow.

       +--:(otn)
          +--rw odu-type?                     identityref

In case of ODUflex paths, more information about the bandwidth of the ODUflex needs to be provided, as described in section 4.4.
otn-label-range-info:
This grouping is used to augment the label-restriction list, defined in [RFC8776], with OTN technology-specific attributes, as defined in section 4.3.

       +--rw range-type?      otn-label-range-type
       +--rw tsg?             identityref
       +--rw odu-type-list*   identityref
       +--rw priority?        uint8

otn-label-start-end:
This grouping is used to augment the label-start and label-end containers within the label-restriction list, defined in [RFC8776], with OTN technology-specific attributes, as defined in section 4.3.

       +--:(otn)
          +--rw (range-type)?
             +--:(trib-port)
             |  +--rw otn-tpn?   otn-tpn
             +--:(trib-slot)
                +--rw otn-ts?    otn-ts

otn-label-step:
This grouping is used to augment the label-step container within the label-restriction list, defined in [RFC8776], with OTN technology-specific attributes, as defined in section 4.3.

       +--:(otn)
          +--rw (range-type)?
             +--:(trib-port)
             |  +--rw otn-tpn?   otn-tpn
             +--:(trib-slot)
                +--rw otn-ts?    otn-ts

otn-label-hop:
This grouping is used to augment the label-hop container, defined in [RFC8776], with OTN technology-specific attributes, as defined in section 4.3.

       +--:(otn)
          +--rw otn-tpn?   otn-tpn
          +--rw tsg?       identityref
          +--rw ts-list?   string

optical-interface-func:
The optical interface function is specified in [MEF63]. Identities that describe the functionality are specified to encode bits for transmission and to decode bits upon reception.

OTN Label and Label Range
As described in [RFC7139], the OTN label usually represents the Tributary Port Number (TPN) and the related set of Tributary Slots (TS) assigned to a client layer ODU LSP (LO ODUj or ODUk) on a given server layer ODU (HO-ODU or ODUCn, respectively) Link (e.g., ODU2 LSP over ODU3 Link). Some special OTN label values are also defined for an ODUk LSP being set up over an OTUk Link.
The same OTN label must be assigned to the same ODUk LSP at the two ends of an OTN Link.
As described in [RFC7139], TPN can be a number from 1 to 4095 and TS are numbered from 1 to 4095, although the actual maximum values depend on the type of server layer ODU. For example, a server layer ODU4 provides 80 tributary slots (numbered from 1 to 80) and the TPN values can be any number from 1 to 80.
The OTN Label Range represents the values for the TPN and TS that are available for ODUk LSPs to be setup over a given OTN Link.
The OTN Label Range is defined by the label-restriction list, defined in [RFC8776], which, for OTN, should be augmented using the otn-label-range-info grouping.
Each entry in the label-restriction list represents either the range of the available TPN values or the range of the available TS values: the range-type attribute in the otn-label-range-info grouping defines the type of range for each entry of the list.
Each entry of the label-restriction list, as defined in [RFC8776], defines a label-start, a label-end, a label-step and a range-bitmap. The label-start and label-end definitions for OTN should be augmented using the otn-label-start-end grouping. The label-step definition for OTN should be augmented using the otn-label-step grouping. It is expected that the otn-label-step will always be equal to its default value (i.e., 1), which is defined in [RFC8776].
As described in [RFC7139], in some cases, the TPN assignment rules are flexible (e.g., ODU4 Link) while in other cases the TPN assignment rules are fixed (e.g., ODU1 Link). In the former case, both TPN and TS ranges are reported, while in the latter case, the TPN range is not reported which indicates that the TPN shall be set equal to the TS number assigned to the ODUk LSP.
As described in [RFC7139], in some cases, the TPN assignment rules depends on the TS Granularity (e.g., ODU2 or ODU3 Links). Different entries in the label-restriction list will report different TPN ranges for each TS granularity supported by the link, as indicated by the tsg attribute in the otn-label-range-info grouping.
As described in [RFC7139], in some cases the TPN ranges are different for different types of ODUk LSPs. For example, on an ODU2 Link with 1.25G TS granularity, the TPN range is 1-4 for ODU1 but 1-8 for ODU0 and ODUflex. Different entries in the label-restriction list will report different TPN ranges for different set of ODUk types, as indicated by the odu-type-list in the otn-label-range-info grouping.
Appendix A provides some examples of how the TPN and TS label ranges described in Table 3 and Table 4 of [RFC7139] can be represented in YANG using the groupings defined in this document.

ODUflex
ODUflex is a type of ODU which has a flexible bit rate which is configured when setting up an ODUflex LSP.
[ITU-Tg709], defines six types of ODUflex: ODUflex(CBR), ODUflex(GFP), ODUflex(GFP,n,k), ODUflex(IMP), ODUflex(IMP,s) and ODUflex(FlexE-aware).
The main difference between these types of ODUflex is the formula used to calculate the nominal bit rate of the ODUflex, as described in Table 7-2 of [ITU-Tg709]. A YANG choice has been defined to describe these cases:

       +--rw (oduflex-type)?
          +--:(generic)
          |  +--rw nominal-bit-rate        uint64
          +--:(cbr)
          |  +--rw client-type             identityref
          +--:(gfp-n-k)
          |  +--rw gfp-n                   uint8
          |  +--rw gfp-k?                  l1-types:gfp-k
          +--:(flexe-client)
          |  +--rw flexe-client
          |          l1-types:flexe-client-rate
          +--:(flexe-aware)
          |  +--rw flexe-aware-n           uint16
          +--:(packet)
             +--rw opuflex-payload-rate    uint64

The 'generic' case has been added to allow the ODUflex nominal bit rate to be defined independently from the type of ODUflex. This could be useful for forward compatibility in the transit domain/nodes where the setup of ODUflex LSPs does not depend on the ODUflex type.
In order to simplify interoperability the 'generic' case should be used only when it is needed; the ODUflex type-specific case should be used whenever possible.
The 'cbr' case is used for Constant Bit Rate (CBR) client signals. The client-type indicates which CBR client signal is carried by the ODUflex and, implicitly, the client signal bit rate which is then used to calculate the ODUflex(CBR) nominal bit rate as described in Table 7-2 of [ITU-Tg709].
The 'gfp-n-k' case is used for GFP-F mapped client signals based on ODUk.ts and 'n' 1.25G tributary slots. 'gfp-k' defines the nominal bit-rate of the ODUk.ts which, together with the value of 'gfp-n', is used to calculated the ODUflex(GFP,n,k) nominal bit rate as described in Table 7-8 and Table L-7 of [ITU-Tg709] . With a few exceptions, shown in Table L-7 of [ITU-Tg709], the nominal bit-rate of the ODUk.ts could be inferred from the value of 'n', as shown in Table 7-8 of [ITU-Tg709] and therefore the 'gfp-k' is optional.
The 'flexe-client' case is used for Idle Mapping Procedure(IMP) mapped FlexE client signals, The 'flexe-client' represents the type of FlexE client carried by the ODUflex which implicitly defines the value of 's' used to calculate the ODUflex(s) nominal bit rate as described in Table 7-2 of [ITU-Tg709]. The '10G' and '40G' enumeration values are used for 10G and 40G FlexE clients to implicitly define the values of s=2 and s=8. For the 'n x 25G' FlexE Clients the value of 'n' is used to defines the value of s=5 x n.
The 'flexe-aware' case is used for FlexE-aware client signals. The flexe-aware-n represents the value n (n = n1 + n2 + ... + np) which is used to calculate the ODUflex(FlexE-aware) nominal bit rate as described in Table 7-2 of [ITU-Tg709].
The 'packet' case is used for both the GFP-F mapped client signals and the IMP mapped client signals. The opuflex-payload-rate is either the GFP-F encapsulated-packet client nominal bit rate or the 64b/66b encoded-packet client nominal bit rate. The calculation of ODUflex(GFP) nominal bit rate is defined in section 12.2.5 of [ITU-Tg709], and the calculation of ODUflex(IMP) nominal bit rate is defined in section 12.2.6 of [ITU-Tg709]. The same formula is used in both cases.
Section 5.1 and 5.2 of [RFC7139] defines two rules to compute the number of tributary slots to be allocated to ODUflex(CBR) and ODUflex(GFP) LSPs when carried over a HO-ODUk link. According to section 19.6 of [ITU-Tg709], the rules in section 5.2 apply only to ODUflex(GFP,n,k) while the rules defined in section 5.1 apply to any other ODUflex type, including, but not limited, to ODUflex(CBR). Section 20.5 of [ITU-Tg709] defines the rules for computing the number of tributary slots to be allocated to ODUflex LSPs when carried over an ODUCn link.
In order to compute the number of tributary slots required to setup an ODUflex LSPs the type of Optical channel Data Tributary Unit (ODTU) is reported for the OTN Links or the OTN LTPs.
Following the [ITU-Tg709] definitions, the rules defined for ODUflex(GFP,n,k) are used only when the 'gfp-n-k' case is used. In all the other cases, including the (generic) case, the rules defined any other ODUflex type are used.
The number of available ODUs, defined for each ODUk type, including ODUflex, does not provide sufficient information to infer the OTN link bandwidth availability for ODUflex LSPs.
The OTN link bandwidth definitions for ODUflex LSPs depend also on the number of tributary slots (TS) and on the type of ODTU used to compute the number of TS required to setup an ODUflex LSP, according to the rules defined in section 19.6 and section 20.5 of [ITU-Tg709], as described above.
Similarly, bandwidth constraints for ODUflex LSPs of the OTN connectivity matrix and of the OTN local link connectivity entries depend also on the number of tributary slots (TS) and on the type of ODTU used to compute the number of TS required to setup an ODUflex LSP along the underlay path, according to the rules defined in section 19.6 and section 20.5 of [ITU-Tg709], as described above. For example, with a reference to Figure 1 of [RFC7139], the connectivity matrix entry or the local link connectivity entry corresponding to the A-C underlay path, would report 2 Tributary Slots (TS) with ODTU4.ts ODTU type.

Resizable ODUflex
Resizable ODUflex is a special type of ODUflex that supports the procedures defined in [ITU-Tg7044] for hitless resizing of the ODUflex nominal bit rate.
Two odu-type identities have been defined for ODUflex:
- The ODUflex identity, which is used with any type of non-resizable ODUflex, as defined in Table 7-2 of [ITU-Tg709].
- The ODUflex-resizable identity, which is used only with resizable ODUflex(GFP,n,k).
These two identities are used to identify whether an ODUflex(GFP,n,k) LSP does or does support the [ITU-Tg7044] hitless resizing procedures. They also identify whether an OTN link only supports the setup of non-resizable ODUflex LSPs or also supports the setup of resizable ODUflex(GFP,n,k) LSP but with different capabilities (e.g., a lower number of LSPs).

YANG Code for Layer1 Types

<CODE BEGINS>file "ietf-layer1-types@2022-07-11.yang"
module ietf-layer1-types {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-layer1-types";
  prefix "l1-types";

  import ietf-routing-types {
    prefix rt-types;
    reference
      "RFC 8294: Common YANG Data Types for the Routing Area";
  }

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

     Editor: Haomian Zheng
             <mailto:zhenghaomian@huawei.com>

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

  description
    "This module defines Layer 1 types. The model fully conforms
     to the Network Management Datastore Architecture (NMDA).

     Copyright (c) 2022 IETF Trust and the persons
     identified as authors of the code.  All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject
     to the license terms contained in, the Revised BSD License
     set forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX; see
     the RFC itself for full legal notices.";

  revision "2022-07-11" {
    description
      "Initial Version";
    reference
      "RFC XXXX: A YANG Data Model for Layer 1 Types";
    // RFC Editor: replace XXXX with actual RFC number, update date
    // information and remove this note
  }

  /*
   * Identities
   */

  identity tributary-slot-granularity {
    description
      "Tributary slot granularity";
    reference
      "ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
       Transport Network (OTN)";
  }

  identity tsg-1.25G {
    base tributary-slot-granularity;
    description
      "1.25G tributary slot granularity";
  }

  identity tsg-2.5G {
    base tributary-slot-granularity;
    description
      "2.5G tributary slot granularity";
  }

  identity tsg-5G {
    base tributary-slot-granularity;
    description
      "5G tributary slot granularity";
  }

  identity odu-type {
    description
      "Base identity from which specific ODU protocol is derived.";
  }

  identity ODU0 {
    base odu-type;
    description
      "ODU0 protocol (1.24Gb/s).";
    reference
      "RFC7139: GMPLS Signaling Extensions for Control of Evolving
       G.709 Optical Transport Networks

       ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
       Transport Network (OTN)";
  }

  identity ODU1 {
    base odu-type;
    description
      "ODU1 protocol (2.49Gb/s).";
    reference
      "RFC7139: GMPLS Signaling Extensions for Control of Evolving
       G.709 Optical Transport Networks

       ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
       Transport Network (OTN)";
  }

  identity ODU1e {
    base odu-type;
    description
      "ODU1e protocol (10.35Gb/s).";
    reference
      "RFC7963: RSVP-TE Extension for Additional Signal Types in
       G.709 Optical Transport Networks (OTNs)

       ITU-T G.sup43 v5.0 (02/2011): Transport of IEEE 10GBASE-R
       in optical transport networks (OTN)";
  }

  identity ODU2 {
    base odu-type;
    description
      "ODU2 protocol (10.03Gb/s).";
    reference
      "RFC7139: GMPLS Signaling Extensions for Control of Evolving
       G.709 Optical Transport Networks

       ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
       Transport Network (OTN)";
  }

  identity ODU2e {
    base odu-type;
    description
      "ODU2e protocol (10.39Gb/s).";
    reference
      "RFC7139: GMPLS Signaling Extensions for Control of Evolving
       G.709 Optical Transport Networks

       ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
       Transport Network (OTN)";
  }

  identity ODU3 {
    base odu-type;
    description
      "ODU3 protocol (40.31Gb/s).";
    reference
      "RFC7139: GMPLS Signaling Extensions for Control of Evolving
       G.709 Optical Transport Networks

       ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
       Transport Network (OTN)";
  }

  identity ODU3e1 {
    base odu-type;
    description
      "ODU3e1 protocol (41.77Gb/s).";
    reference
      "RFC7963: RSVP-TE Extension for Additional Signal Types in
       G.709 Optical Transport Networks (OTNs)

       ITU-T G.sup43 v5.0 (02/2011): Transport of IEEE 10GBASE-R
       in optical transport networks (OTN)";
  }

  identity ODU3e2 {
    base odu-type;
    description
      "ODU3e2 protocol (41.78Gb/s).";
    reference
      "RFC7963: RSVP-TE Extension for Additional Signal Types in
       G.709 Optical Transport Networks (OTNs)

       ITU-T G.sup43 v5.0 (02/2011): Transport of IEEE 10GBASE-R
       in optical transport networks (OTN)";
  }

  identity ODU4 {
    base odu-type;
    description
      "ODU4 protocol (104.79Gb/s).";
    reference
      "RFC7139: GMPLS Signaling Extensions for Control of Evolving
       G.709 Optical Transport Networks

       ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
       Transport Network (OTN)";
  }

  identity ODUflex {
    base odu-type;
    description
      "ODUflex protocol (flexibile bit rate, not resizable).

       It could be used for any type of ODUflex, including
       ODUflex(CBR), ODUflex(GFP), ODUflex(GFP,n,k), ODUflex(IMP,s),
       ODUflex(IMP) and ODUflex(FlexE-aware).";
    reference
      "RFC7139: GMPLS Signaling Extensions for Control of Evolving
       G.709 Optical Transport Networks

       ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
       Transport Network (OTN)";
  }

  identity ODUflex-resizable {
    base odu-type;
    description
      "ODUflex protocol (flexibile bit rate, resizable).

       It could be used only for ODUflex(GFP,n,k).";
    reference
      "RFC7139: GMPLS Signaling Extensions for Control of Evolving
       G.709 Optical Transport Networks

       ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
       Transport Network (OTN)";
  }

  identity protocol {
    description
      "Base identity from which specific protocol is derived.";
    reference
      "MEF63: Subscriber Layer 1 Service Attributes";
  }

  identity Ethernet {
    base protocol;
    description
      "Ethernet protocol.";
    reference
      "MEF63: Subscriber Layer 1 Service Attributes";
  }

  identity Fibre-Channel {
    base protocol;
    description
      "Fibre-Channel (FC) protocol.";
    reference
      "MEF63: Subscriber Layer 1 Service Attributes";
  }

  identity SDH {
    base protocol;
    description
      "SDH protocol.";
    reference
      "MEF63: Subscriber Layer 1 Service Attributes";
  }

  identity SONET {
    base protocol;
    description
      "SONET protocol.";
    reference
      "MEF63: Subscriber Layer 1 Service Attributes";
  }

  identity client-signal {
    description
      "Base identity from which specific Constant Bit Rate (CBR)
      client signal is derived";
  }

  identity coding-func {
    description
      "Base identity from which specific coding function
       is derived.";
    reference
      "MEF63: Subscriber Layer 1 Service Attributes";
  }

  identity ETH-1Gb {
    base client-signal;
    description
      "Client signal type of 1GbE";
    reference
      "RFC7139: GMPLS Signaling Extensions for Control of Evolving
       G.709 Optical Transport Networks

       ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
       Transport Network (OTN)";
  }

  identity ETH-10Gb-LAN {
    base client-signal;
    description
      "Client signal type of ETH-10Gb-LAN (10.3 Gb/s)";
    reference
      "RFC7139: GMPLS Signaling Extensions for Control of Evolving
       G.709 Optical Transport Networks

       ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
       Transport Network (OTN)

       IEEE 802.3-2018, Clause 49: IEEE Standard for Ethernet";
  }

  identity ETH-10Gb-WAN {
    base client-signal;
    description
      "Client signal type of ETH-10Gb-WAN (9.95 Gb/s)";
    reference
      "RFC7139: GMPLS Signaling Extensions for Control of Evolving
       G.709 Optical Transport Networks

       ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
       Transport Network (OTN)

       IEEE 802.3-2018, Clause 50: IEEE Standard for Ethernet";
  }

  identity ETH-40Gb {
    base client-signal;
    description
      "Client signal type of 40GbE";
    reference
      "RFC7139: GMPLS Signaling Extensions for Control of Evolving
       G.709 Optical Transport Networks

       ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
       Transport Network (OTN)";
  }

  identity ETH-100Gb {
    base client-signal;
    description
      "Client signal type of 100GbE";
    reference
      "RFC7139: GMPLS Signaling Extensions for Control of Evolving
       G.709 Optical Transport Networks

       ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
       Transport Network (OTN)";
  }

  identity STM-1 {
    base client-signal;
    base coding-func;
    description
      "Client signal type of STM-1;
       STM-1 G.707 (N=1) coding function.";
    reference
      "RFC7139: GMPLS Signaling Extensions for Control of Evolving
       G.709 Optical Transport Networks

       ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
       Transport Network (OTN)

       MEF63: Subscriber Layer 1 Service Attributes";
  }

  identity STM-4 {
    base client-signal;
    base coding-func;
    description
      "Client signal type of STM-4;
       STM-4 G.707 (N=4) coding function.";
    reference
      "RFC7139: GMPLS Signaling Extensions for Control of Evolving
       G.709 Optical Transport Networks

       ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
       Transport Network (OTN)

       MEF63: Subscriber Layer 1 Service Attributes";
  }

  identity STM-16 {
    base client-signal;
    base coding-func;
    description
      "Client signal type of STM-16;
       STM-16 G.707 (N=16) coding function.";
    reference
      "RFC7139: GMPLS Signaling Extensions for Control of Evolving
       G.709 Optical Transport Networks

       ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
       Transport Network (OTN)

       MEF63: Subscriber Layer 1 Service Attributes";
  }

  identity STM-64 {
    base client-signal;
    base coding-func;
    description
      "Client signal type of STM-64;
       STM-64 G.707 (N=64) coding function.";
    reference
      "RFC7139: GMPLS Signaling Extensions for Control of Evolving
       G.709 Optical Transport Networks

       ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
       Transport Network (OTN)

       MEF63: Subscriber Layer 1 Service Attributes";
  }

  identity STM-256 {
    base client-signal;
    base coding-func;
    description
      "Client signal type of STM-256;
       STM-256 G.707 (N=256) coding function.";
    reference
      "RFC7139: GMPLS Signaling Extensions for Control of Evolving
       G.709 Optical Transport Networks

       ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
       Transport Network (OTN)

       MEF63: Subscriber Layer 1 Service Attributes";
  }

  identity OC-3 {
    base client-signal;
    base coding-func;
    description
      "Client signal type of OC3;
       OC-3 GR-253-CORE (N=3) coding function.";
    reference
      "ANSI T1.105-1995: Synchronous Optical Network (SONET)
       Basic Description including Multiplex Structure, Rates,
       and Formats

       MEF63: Subscriber Layer 1 Service Attributes";
  }

  identity OC-12 {
    base client-signal;
    base coding-func;
    description
      "Client signal type of OC12;
       OC-12 GR-253-CORE (N=12) coding function.";
    reference
      "ANSI T1.105-1995: Synchronous Optical Network (SONET)
       Basic Description including Multiplex Structure, Rates,
       and Formats

       MEF63: Subscriber Layer 1 Service Attributes";
  }

  identity OC-48 {
    base client-signal;
    base coding-func;
    description
      "Client signal type of OC48;
       OC-48 GR-253-CORE (N=48) coding function.";
    reference
      "ANSI T1.105-1995: Synchronous Optical Network (SONET)
       Basic Description including Multiplex Structure, Rates,
       and Formats

       MEF63: Subscriber Layer 1 Service Attributes";
  }

  identity OC-192 {
    base client-signal;
    base coding-func;
    description
      "Client signal type of OC192;
       OC-192 GR-253-CORE (N=192) coding function.";
    reference
      "ANSI T1.105-1995: Synchronous Optical Network (SONET)
       Basic Description including Multiplex Structure, Rates,
       and Formats

       MEF63: Subscriber Layer 1 Service Attributes";
  }

  identity OC-768 {
    base client-signal;
    base coding-func;
    description
      "Client signal type of OC768;
       OC-768 GR-253-CORE (N=768) coding function.";
    reference
      "ANSI T1.105-1995: Synchronous Optical Network (SONET)
       Basic Description including Multiplex Structure, Rates,
       and Formats

       MEF63: Subscriber Layer 1 Service Attributes";
  }

  identity FC-100 {
    base client-signal;
    base coding-func;
    description
      "Client signal type of Fibre Channel FC-100;
       FC-100 FC-FS-2 (1.0625 Gb/s) coding function.";
    reference
      "RFC7139: GMPLS Signaling Extensions for Control of Evolving
       G.709 Optical Transport Networks

       ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
       Transport Network (OTN)

       MEF63: Subscriber Layer 1 Service Attributes";
  }

  identity FC-200 {
    base client-signal;
    base coding-func;
    description
      "Client signal type of Fibre Channel FC-200;
       FC-200 FC-FS-2 (2.125 Gb/s) coding function.";
    reference
      "RFC7139: GMPLS Signaling Extensions for Control of Evolving
       G.709 Optical Transport Networks

       ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
       Transport Network (OTN)

       MEF63: Subscriber Layer 1 Service Attributes";
  }

  identity FC-400 {
    base client-signal;
    base coding-func;
    description
      "Client signal type of Fibre Channel FC-400;
       FC-400 FC-FS-2 (4.250 Gb/s) coding function.";
    reference
      "RFC7139: GMPLS Signaling Extensions for Control of Evolving
       G.709 Optical Transport Networks

       ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
       Transport Network (OTN)

       MEF63: Subscriber Layer 1 Service Attributes";
  }

  identity FC-800 {
    base client-signal;
    base coding-func;
    description
      "Client signal type of Fibre Channel FC-800;
       FC-800 FC-FS-2 (8.500 Gb/s) coding function.";
    reference
      "RFC7139: GMPLS Signaling Extensions for Control of Evolving
       G.709 Optical Transport Networks

       ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
       Transport Network (OTN)

       MEF63: Subscriber Layer 1 Service Attributes";
  }

  identity FC-1200 {
    base client-signal;
    base coding-func;
    description
      "Client signal type of Fibre Channel FC-1200;
       FC-1200 FC-10GFC (10.51875 Gb/s) coding function.";
    reference
      "RFC7139: GMPLS Signaling Extensions for Control of Evolving
       G.709 Optical Transport Networks

       ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
       Transport Network (OTN)

       MEF63: Subscriber Layer 1 Service Attributes";
  }

  identity FC-1600 {
    base client-signal;
    base coding-func;
    description
      "Client signal type of Fibre Channel FC-1600;
       FC-1600 FC-FS-3 (14.025 Gb/s) coding function.";
    reference
      "RFC7139: GMPLS Signaling Extensions for Control of Evolving
       G.709 Optical Transport Networks

       ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
       Transport Network (OTN)

       MEF63: Subscriber Layer 1 Service Attributes";
  }

  identity FC-3200 {
    base client-signal;
    base coding-func;
    description
      "Client signal type of Fibre Channel FC-3200;
       FC-3200 FC-FS-4 (28.05 Gb/s) coding function.";
    reference
      "RFC7139: GMPLS Signaling Extensions for Control of Evolving
       G.709 Optical Transport Networks

       ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
       Transport Network (OTN)

       MEF63: Subscriber Layer 1 Service Attributes";
  }

  identity FICON-4G {
    base client-signal;
    description
      "Client signal type of Fibre Connection 4G";
    reference
      "RFC7139: GMPLS Signaling Extensions for Control of Evolving
       G.709 Optical Transport Networks

       ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
       Transport Network (OTN)";
  }

  identity FICON-8G {
    base client-signal;
    description
      "Client signal type of Fibre Connection 8G";
    reference
      "RFC7139: GMPLS Signaling Extensions for Control of Evolving
       G.709 Optical Transport Networks

       ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
       Transport Network (OTN)";
  }

  identity ETH-1000X {
    base coding-func;
    description
      "1000BASE-X PCS clause 36 coding function.";
    reference
      "MEF63: Subscriber Layer 1 Service Attributes";
  }

  identity ETH-10GW {
    base coding-func;
    description
      "10GBASE-W (WAN PHY) PCS clause 49 and WIS clause 50
       coding function.";
    reference
      "MEF63: Subscriber Layer 1 Service Attributes";
  }

  identity ETH-10GR {
    base coding-func;
    description
      "10GBASE-R (LAN PHY) PCS clause 49 coding function.";
    reference
      "MEF63: Subscriber Layer 1 Service Attributes";
  }

  identity ETH-40GR {
    base coding-func;
    description
      "40GBASE-R PCS clause 82 coding function.";
    reference
      "MEF63: Subscriber Layer 1 Service Attributes";
  }

  identity ETH-100GR {
    base coding-func;
    description
      "100GBASE-R PCS clause 82 coding function.";
    reference
      "MEF63: Subscriber Layer 1 Service Attributes";
  }

  identity optical-interface-func {
    description
      "Base identity from which optical-interface-function
       is derived.";
    reference
      "MEF63: Subscriber Layer 1 Service Attributes";
  }

  identity SX-PMD-1000 {
    base optical-interface-func;
    description
      "SX-PMD-clause-38 Optical Interface function for
      1000BASE-X PCS-36";
    reference
      "MEF63: Subscriber Layer 1 Service Attributes";
  }

  identity LX-PMD-1000 {
    base optical-interface-func;
    description
      "LX-PMD-clause-38 Optical Interface function for
       1000BASE-X PCS-36";
    reference
      "MEF63: Subscriber Layer 1 Service Attributes";
  }

  identity LX10-PMD-1000 {
    base optical-interface-func;
    description
      "LX10-PMD-clause-59 Optical Interface function for
       1000BASE-X PCS-36";
    reference
      "MEF63: Subscriber Layer 1 Service Attributes";
  }

  identity BX10-PMD-1000 {
    base optical-interface-func;
    description
      "BX10-PMD-clause-59 Optical Interface function for
       1000BASE-X PCS-36";
    reference
      "MEF63: Subscriber Layer 1 Service Attributes";
  }

  identity LW-PMD-10G {
    base optical-interface-func;
    description
      "LW-PMD-clause-52 Optical Interface function for
       10GBASE-W PCS-49-WIS-50";
    reference
      "MEF63: Subscriber Layer 1 Service Attributes";
  }

  identity EW-PMD-10G {
    base optical-interface-func;
    description
      "EW-PMD-clause-52 Optical Interface function for
       10GBASE-W PCS-49-WIS-50";
    reference
      "MEF63: Subscriber Layer 1 Service Attributes";
  }

  identity LR-PMD-10G {
    base optical-interface-func;
    description
      "LR-PMD-clause-52 Optical Interface function for
       10GBASE-R PCS-49";
    reference
      "MEF63: Subscriber Layer 1 Service Attributes";
  }

  identity ER-PMD-10G {
    base optical-interface-func;
    description
      "ER-PMD-clause-52 Optical Interface function for
       10GBASE-R PCS-49";
    reference
      "MEF63: Subscriber Layer 1 Service Attributes";
  }

  identity LR4-PMD-40G {
    base optical-interface-func;
    description
      "LR4-PMD-clause-87 Optical Interface function for
       40GBASE-R PCS-82";
    reference
      "MEF63: Subscriber Layer 1 Service Attributes";
  }

  identity ER4-PMD-40G {
    base optical-interface-func;
    description
      "ER4-PMD-clause-87 Optical Interface function for
       40GBASE-R PCS-82";
    reference
      "MEF63: Subscriber Layer 1 Service Attributes";
  }

  identity FR-PMD-40G {
    base optical-interface-func;
    description
      "FR-PMD-clause-89 Optical Interface function for
       40GBASE-R PCS-82";
    reference
      "MEF63: Subscriber Layer 1 Service Attributes";
  }

  identity LR4-PMD-100G {
    base optical-interface-func;
    description
      "LR4-PMD-clause-88 Optical Interface function for
       100GBASE-R PCS-82";
    reference
      "MEF63: Subscriber Layer 1 Service Attributes";
  }

  identity ER4-PMD-100G {
    base optical-interface-func;
    description
      "ER4-PMD-clause-88 Optical Interface function for
       100GBASE-R PCS-82";
    reference
      "MEF63: Subscriber Layer 1 Service Attributes";
  }

  /*
   * Typedefs
   */

  typedef otn-tpn {
    type uint16 {
      range "1..4095";
    }
    description
      "Tributary Port Number for OTN. ";
    reference
      "RFC7139: GMPLS Signaling Extensions for Control of Evolving
       G.709 Optical Transport Networks.";
  }

  typedef otn-ts {
    type uint16 {
      range "1..4095";
    }
    description
      "Tributary Slot for OTN. ";
    reference
      "RFC7139: GMPLS Signaling Extensions for Control of Evolving
       G.709 Optical Transport Networks.";
  }

  typedef otn-label-range-type {
    type enumeration {
      enum trib-slot {
        description
          "Defines a range of OTN tributary slots. ";
      }
      enum trib-port {
        description
          "Defines a range of OTN tributary ports. ";
      }
    }
    description
      "Defines the type of OTN label range: TS or TPN. ";
  }

  typedef gfp-k {
    type enumeration {
      enum 2 {
        description
          "The ODU2.ts rate (1,249,177.230 kbit/s) is used
           to compute the rate of an ODUflex(GFP,n,2). ";
      }
      enum 3 {
        description
          "The ODU3.ts rate (1,254,470.354 kbit/s) is used
           to compute the rate of an ODUflex(GFP,n,3). ";
      }
      enum 4 {
        description
          "The ODU4.ts rate (1,301,467.133 kbit/s) is used
           to compute the rate of an ODUflex(GFP,n,4). ";
      }
    }
    description
      "The ODUk.ts used to compute the rate of an ODUflex(GFP,n,k)";
    reference
      "ITU-T G.709 v6.0 (06/2020), Table 7-8 and L.7: Interfaces for
       the Optical Transport Network (OTN)";
  }

  typedef flexe-client-rate {
    type union {
      type uint16;
      type enumeration {
        enum "10G" {
          description
            "Represents a 10G FlexE Client signal (s=2)";
        }
        enum "40G" {
          description
            "Represents a 40G FlexE Client signal (s=8)";
        }
      }
    }
    description
      "The FlexE Client signal rate (s x 5,156,250.000 kbit/s)
       used to compute the rate of an ODUflex(IMP, s).
       Valid values for s are s=2 (10G), s=4 (40G) and
       s=5 x n (n x 25G).
       In the first two cases an enumeration value
       (either 10G or 40G) is used, while in the latter case
       the value of n is used";
    reference
      "ITU-T G.709 v6.0 (06/2020), Table 7-2: Interfaces for the
       Optical Transport Network (OTN)";
  }

  typedef odtu-flex-type {
    type enumeration {
      enum "2" {
        description
          "The ODTU2.ts ODTU type.";
      }
      enum "3" {
        description
          "The ODTU3.ts ODTU type.";
      }
      enum "4" {
        description
          "The ODTU4.ts ODTU type.";
      }
      enum "Cn" {
        description
          "The ODTUCn.ts ODTU type.";
      }
    }
    description
      "The type of Optical Data Tributary Unit (ODTU),
      whose nominal bitrate is used to compute the number of
      Tributary Slots (TS) required by an ODUflex LSP, according to
      the (19-1a) and (20-1a) formulas defined in G.709.";
    reference
      "ITU-T G.709 v6.0 (06/2020), Table 7-7, clause 19.6 and
      clause 20.5: Interfaces for the Optical Transport
      Network (OTN)";
  }

  typedef bandwidth-scientific-notation {
    type string {
      pattern
        '0(\.0?)?([eE](\+)?0?)?|'
      + '[1-9](\.[0-9]{0,6})?[eE](\+)?(9[0-6]|[1-8][0-9]|0?[0-9])?';
    }
    units "bps";
    description
      "Bandwidth values, expressed using the scientific notation
      in bits per second.

      The encoding format is the external decimal-significant
      character sequences specified in IEEE 754 and ISO/IEC C99
      for 32-bit decimal floating-point numbers:
      (-1)**(S) * 10**(Exponent) * (Significant),
      where Significant uses 7 digits.

      An implementation for this representation may use decimal32
      or binary32. The range of the Exponent is from -95 to +96
      for decimal32, and from -38 to +38 for binary32.
      As a bandwidth value, the format is restricted to be
      normalized, non-negative, and non-fraction:
      n.dddddde{+}dd, N.DDDDDDE{+}DD, 0e0 or 0E0,
      where 'd' and 'D' are decimal digits; 'n' and 'N' are
      non-zeror decimal digits; 'e' and 'E' indicate a power of ten.
      Some examples are 0e0, 1e10, and 9.953e9.";
    reference
      "IEEE Std 754-2008: IEEE Standard for Floating-Point
      Arithmetic.
      ISO/IEC C99: Information technology - Programming
      Languages - C.";
  }

  /*
   * Groupings
   */

  grouping otn-link-bandwidth {
    description
      "Bandwidth attributes for OTN links";
    container otn {
      description
        "Bandwidth attributes for OTN links";
      list odulist {
        key "odu-type";
        description
          "OTN bandwidth definition";
        leaf odu-type {
          type identityref {
            base odu-type;
          }
          description "ODU type";
        }
        leaf number {
          type uint16;
          description "Number of ODUs";
        }
        leaf ts-number {
          when 'derived-from-or-self(../odu-type,"ODUflex") or
                derived-from-or-self(../odu-type,
                "ODUflex-resizable")' {
            description
              "Applicable when odu-type is ODUflex or
              ODUflex-resizable";
          }
          type uint16 {
            range "1..4095";
          }
          description
            "The number of Tributary Slots (TS) that
            could be used by all the ODUflex LSPs.";
        }
      }
    }
  }

  grouping otn-path-bandwidth {
    description
      "Bandwidth attributes for OTN paths.";
    container otn {
      description
        "Bandwidth attributes for OTN paths.";
      leaf odu-type {
        type identityref {
          base odu-type;
        }
        description "ODU type";
      }
      choice oduflex-type {
        when 'derived-from-or-self(./odu-type,"ODUflex") or
              derived-from-or-self(./odu-type,
              "ODUflex-resizable")' {
          description
            "Applicable when odu-type is ODUflex or
             ODUflex-resizable";
        }
        description
          "Types of ODUflex used to compute the ODUflex
           nominal bit rate.";
        reference
          "ITU-T G.709 v6.0 (06/2020), Table 7-2: Interfaces for the
           Optical Transport Network (OTN)";
        case generic {
          leaf nominal-bit-rate {
            type union {
              type l1-types:bandwidth-scientific-notation;
              type rt-types:bandwidth-ieee-float32;
            }
            mandatory true;
            description
              "Nominal ODUflex bit rate.";
          }
        }
        case cbr {
          leaf client-type {
            type identityref {
              base client-signal;
            }
            mandatory true;
            description
              "The type of Constant Bit Rate (CBR) client signal
              of an ODUflex(CBR).";
          }
        }
        case gfp-n-k {
          leaf gfp-n {
            type uint8 {
              range "1..80";
            }
            mandatory true;
            description
              "The value of n for an ODUflex(GFP,n,k).";
            reference
              "ITU-T G.709 v6.0 (06/2020), Tables 7-8 and L.7:
               Interfaces for the Optical Transport Network (OTN)";
          }
          leaf gfp-k {
            type gfp-k;
            description
              "The value of k for an ODUflex(GFP,n,k).

               If omitted, it is calculated from the value of gfp-n
               as described in Table 7-8 of G.709";
            reference
              "ITU-T G.709 v6.0 (06/2020), Tables 7-8 and L.7:
               Interfaces for the Optical Transport Network (OTN)";
          }
        }
        case flexe-client {
          leaf flexe-client {
            type flexe-client-rate;
            mandatory true;
            description
              "The rate of the FlexE-client for an ODUflex(IMP,s).";
          }
        }
        case flexe-aware {
          leaf flexe-aware-n {
            type uint16;
            mandatory true;
            description
              "The rate of FlexE-aware client signal
               for ODUflex(FlexE-aware)";
          }
        }
        case packet {
          leaf opuflex-payload-rate {
            type union {
              type l1-types:bandwidth-scientific-notation;
              type rt-types:bandwidth-ieee-float32;
            }
            mandatory true;
            description
              "Either the GFP-F encapsulated packet client nominal
               bit rate for an ODUflex(GFP) or the 64b/66b encoded
               packet client nominal bit rate for an ODUflex(IMP).";
          }
        }
      }
    }
  }

  grouping otn-max-path-bandwidth {
    description
      "Maximum bandwidth attributes for OTN paths.";
    container otn {
      description
        "Maximum bandwidth attributes for OTN paths.";
      leaf odu-type {
        type identityref {
          base odu-type;
        }
        description "ODU type";
      }
      leaf max-ts-number {
        when 'derived-from-or-self(../odu-type,"ODUflex") or
              derived-from-or-self(../odu-type,
              "ODUflex-resizable")' {
          description
            "Applicable when odu-type is ODUflex or
             ODUflex-resizable";
        }
        type uint16 {
          range "1..4095";
        }
        description
          "The maximum number of Tributary Slots (TS) that could be
          used  by an ODUflex LSP.";
      }
    }
  }

  grouping otn-label-range-info {
    description
      "Label range information for OTN.

       This grouping should be used together with the
       otn-label-start-end and otn-label-step groupings to provide
       OTN technology-specific label information to the models which
       use the label-restriction-info grouping defined in the module
       ietf-te-types.";
    container otn-label-range {
      description
        "Label range information for OTN.";
      leaf range-type {
        type otn-label-range-type;
        description "The type of range (e.g., TPN or TS)
          to which the label range applies";
      }
      leaf tsg {
        type identityref {
          base tributary-slot-granularity;
        }
        description
          "Tributary slot granularity (TSG) to which the label range
          applies.

          This leaf shall be present when the range-type is TS.

          This leaf can be omitted when mapping an ODUk over an OTUk
          Link. In this case the range-type is tpn, with only one
          entry (ODUk), and the tpn range has only one value (1).";
        reference
          "ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
          Transport Network (OTN)";
      }
      leaf-list odu-type-list {
        type identityref {
          base odu-type;
        }
        description
          "List of ODU types to which the label range applies.

          An Empty odu-type-list means that the label range
          applies to all the supported ODU types.";
      }
      leaf priority {
        type uint8;
        description
          "Priority in Interface Switching Capability
          Descriptor (ISCD).";
        reference
          "RFC4203: OSPF Extensions in Support of Generalized
          Multi-Protocol Label Switching (GMPLS)";
      }
    }
  }

  grouping otn-label-start-end {
    description
      "The OTN label-start or label-end used to specify an OTN label
       range.

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

       This grouping should be used together with the
       otn-label-range-info and otn-label-step groupings to provide
       OTN technology-specific label information to the models which
       use the label-restriction-info grouping defined in the module
       ietf-te-types.";
    container otn {
      description
        "Label start or label end for OTN.";
      choice range-type {
        description
          "OTN label range type, either TPN range or TS range";
        case trib-port {
          leaf tpn {
            when "../../../../otn-label-range/range-type =
                  'trib-port'" {
              description
                "Valid only when range-type represented by
                trib-port";
            }
            type otn-tpn;
            description
              "Tributary Port Number (TPN).";
            reference
              "RFC7139: GMPLS Signaling Extensions for Control of
              Evolving G.709 Optical Transport Networks.";
          }
        }
        case trib-slot {
          leaf ts {
            when "../../../../otn-label-range/range-type =
                  'trib-slot'" {
              description
                "Valid only when range-type represented by
                trib-slot";
            }
            type otn-ts;
            description
              "Tributary Slot (TS) number.";
            reference
              "RFC7139: GMPLS Signaling Extensions for Control of
              Evolving G.709 Optical Transport Networks";
          }
        }
      }
    }
  }

  grouping otn-label-hop {
    description "OTN Label";
    reference
      "RFC7139, section 6: GMPLS Signaling Extensions for Control of
       Evolving G.709 Optical Transport Networks";
    container otn {
      description
        "Label hop for OTN.";
      leaf tpn {
        type otn-tpn;
        description
          "Tributary Port Number (TPN).";
        reference
          "RFC7139: GMPLS Signaling Extensions for Control of
          Evolving G.709 Optical Transport Networks.";
      }
      leaf tsg {
        type identityref {
          base tributary-slot-granularity;
        }
        description "Tributary Slot Granularity (TSG).";
        reference
          "ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
          Transport Network (OTN)";
      }
      leaf ts-list {
        type string {
            pattern "([1-9][0-9]{0,3}(-[1-9][0-9]{0,3})?"
                  + "(,[1-9][0-9]{0,3}(-[1-9][0-9]{0,3})?)*)";
          }
        description
          "A list of available Tributary Slots (TS) ranging
          between 1 and 4095. If multiple values or
          ranges are given, they all must be disjoint
          and must be in ascending order.
          For example 1-20,25,50-1000.";
        reference
          "RFC 7139: GMPLS Signaling Extensions for Control
          of Evolving G.709 Optical Transport Networks";
      }
    }
  }

  grouping otn-label-step {
    description
      "Label step for OTN.

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

       This grouping should be used together with the
       otn-label-range-info and otn-label-start-end groupings to
       provide OTN technology-specific label information to the
       models which use the label-restriction-info grouping defined
       in the module ietf-te-types.";
    container otn {
      description
        "Label step for OTN";
      choice range-type {
        description
          "OTN label range type, either TPN range or TS range";
        case trib-port {
          leaf tpn {
            when "../../../otn-label-range/range-type =
                  'trib-port'" {
              description
                "Valid only when range-type represented by
                trib-port";
            }
            type otn-tpn;
            description
              "Label step which represents possible increments for
              Tributary Port Number (TPN).";
            reference
              "RFC7139: GMPLS Signaling Extensions for Control of
              Evolving G.709 Optical Transport Networks.";
          }
        }
        case trib-slot {
          leaf ts {
            when "../../../otn-label-range/range-type =
                  'trib-slot'" {
              description
                "Valid only when range-type represented by
                trib-slot";
            }
            type otn-ts;
            description
              "Label step which represents possible increments for
              Tributary Slot (TS) number.";
            reference
              "RFC7139: GMPLS Signaling Extensions for Control of
              Evolving G.709 Optical Transport Networks.";
          }
        }
      }
    }
  }
}
<CODE ENDS>

Security Considerations
The YANG module specified in this document defines a schema for data that is designed to be accessed via network management protocols such as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer is the secure transport layer, and the mandatory-to-implement secure transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer is HTTPS, and the mandatory-to-implement secure transport is TLS [RFC8446].
The NETCONF access control model [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 in this document defines layer 1 type definitions (i.e., typedef, identity and grouping statements) in YANG data modeling language to be imported and used by other layer 1 technology-specific modules. When imported and used, the resultant schema will have data nodes that can be writable, or readable. The access to such data nodes may be considered sensitive or vulnerable in some network environments. Write operations (e.g., edit-config) to these data nodes without proper protection can have a negative effect on network operations.
The security considerations spelled out in the YANG 1.1 specification [RFC7950] apply for this document as well.

IANA Considerations
It is proposed that IANA should assign new URIs from the "IETF XML Registry" [RFC3688] as follows:

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

This document registers following YANG modules in the YANG Module Names registry [RFC7950].

   name:         ietf-layer1-types
   namespace:    urn:ietf:params:xml:ns:yang:ietf-layer1-types
   prefix:       l1-types
   reference:    RFC XXXX

RFC Editor Note: Please replace XXXX with the number assigned to the RFC once this draft becomes an RFC.

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

Contributors
Dieter Beller
Nokia
Email: dieter.beller@nokia.com
Sergio Belotti
Nokia
Email: sergio.belotti@nokia.com
Yanlei Zheng
China Unicom
Email: zhengyanlei@chinaunicom.cn
Aihua Guo
Futurewei Technologies
Email: aihuaguo@futurewei.com
Young Lee
Samsung
Email: younglee.tx@gmail.com
Lei Wang
China Mobile
Email: wangleiyj@chinamobile.com
Oscar Gonzalez de Dios
Telefonica
Email: oscar.gonzalezdedios@telefonica.com
Xufeng Liu
Volta Networks
Email: xufeng.liu.ietf@gmail.com
Yunbin Xu
CAICT
Email: xuyunbin@caict.ac.cn
Anurag Sharma
Google
Email: ansha@google.com
Rajan Rao
Infinera
Email: rrao@infinera.com
Victor Lopez
Telefonica
Email: victor.lopezalvarez@telefonica.com
Yunbo Li
China Mobile
Email: liyunbo@chinamobile.com

Normative References
[MEF63]

Subscriber Layer1 Service Attributes Technical Specification
Metro Ethernet Forum
August 2018
MEF 63
[ITU-Tg709]

Interfaces for the optical transport network
International Telecommunication Union
June 2020
ITU-T G.709
[ITU-Tgsup43]

Transport of IEEE 10GBASE-R in optical transport networks (OTN)
International Telecommunication Union
November 2011
ITU-T G.sup43
[ITU-Tg7044]

Hitless adjustment of ODUflex(GFP)
International Telecommunication Union
October 2011
ITU-T G.7044
[IEEE]

IEEE Standard for Ethernet
Institute of Electrical and Electronics Engineers
June 2018
IEEE 802.3-2018
[ANSI]

Synchronous Optical Network (SONET) Basic Description including Multiplex Structure, Rates, and Formats
American National Standards Institute
January 1995
ANSI T1.105

Informative References
[RFC7950]
[RFC7062]
[RFC7138]
[RFC7139]
[I-D.ietf-ccamp-otn-topo-yang]
[I-D.ietf-ccamp-otn-tunnel-model]
[I-D.ietf-ccamp-client-signal-yang]
[I-D.ietf-ccamp-l1csm-yang]
[RFC8342]
[RFC8776]
[RFC7963]
[RFC6241]
[RFC8040]
[RFC6242]
[RFC8446]
[RFC8341]
[RFC3688]
[I-D.ietf-ccamp-transport-nbi-app-statement]
[RFC8792]

Examples of OTN Label Ranges
This appendix provides some examples of how the TPN and TS label ranges described in Table 3 and Table 4 of [RFC7139] can be represented in YANG using the groupings defined in this document.
It also considers the OTUk links in addition to HO-ODUk links.
The JSON code examples provided in this appendix provides some embedded comments following the conventions in section 3.2 of [I-D.ietf-ccamp-transport-nbi-app-statement] and have been folded using the tool in [RFC8792].

=============== NOTE: '\\' line wrapping per RFC 8792 ===============

{
  "// examples of label-restrictions for different OTN Links": [
    {
      "// example": "HO-ODU1 or OTU1 Link",
      "label-restrictions": {
        "label-restriction": [
          {
            "index ": 1,
            "// default restriction": "inclusive",
            "otn-label-range": {
              "range-type": "label-range-trib-port",
              "// not-present tsg": "",
              "odu-type-list": "[ ODU1 ]",
              "// default priority": 7
            },
            "// tpn-range": 1,
            "// comment": "Since no TS range and no TSG are reported\
\ for ODU1, the link is an OTU1 Link. TS allocation is not needed an\
\d TPN shall be set to '1' for mapping ODU1 over OTU1. This entry is\
\ not present if the OTN Link is an HO-ODU1 Link."
          },
          {
            "index ": 2,
            "// default restriction": "inclusive",
            "otn-label-range": {
              "range-type": "label-range-trib-slot",
              "tsg": "tsg-1.25G",
              "odu-type-list": "[ ODU0 ]",
              "// default priority": 7
            },
            "// ts-range": "1-2",
            "// comment": "Since no TPN range is reportd for ODU0 wi\
\th 1.25G TSG, the TPN allocation rule is fixed (TPN = TS#) for mapp\
\ing LO-ODU0 over HO-ODU1 with 1.25G TSG. See Table 4 of [RFC7139]."
          }
        ]
      }
    },
    {
      "// example": "HO-ODU2 or OTU2 Link",
      "label-restrictions": {
        "label-restriction": [
          {
            "index ": 1,
            "// default restriction": "inclusive",
            "otn-label-range": {
              "range-type": "label-range-trib-port",
              "//not-present tsg": "",
              "odu-type-list": "[ ODU2 ]",
              "// default priority": 7
            },
            "// tpn-range": 1,
            "// comment": "Since no TS range and no TSG are reported\
\ for ODU2, the link is an OTU2 Link. TS allocation is not needed an\
\d TPN shall be set to '1' for mapping ODU2 over OTU2. This entry is\
\ not present if the OTN Link is an HO-ODU2 Link."
          },
          {
            "index ": 2,
            "// default restriction": "inclusive",
            "otn-label-range": {
              "range-type": "label-range-trib-slot",
              "tsg": "tsg-1.25G",
              "odu-type-list": "[ ODUFlex-cbr, ODUFlex-gfp, ODU0, OD\
\U1 ]",
              "// default priority": 7
            },
            "// ts-range": "1-8"
          },
          {
            "index ": 3,
            "// default restriction": "inclusive",
            "otn-label-range": {
              "range-type": "label-range-trib-port",
              "tsg": "tsg-1.25G ",
              "odu-type-list": "[ ODUFlex-cbr, ODUFlex-gfp, ODU0 ]",
              "// default priority": 7
            },
            "// tpn-range": "1-8",
            "// comment": "Since this TPN range is reported for ODUf\
\lex and ODU0 with 1.25G TSG, the TPN assignment rule is flexible wi\
\thin a common range for mapping LO-ODUflex and LO-ODU0 over HO-ODU2\
\ with 1.25G TSG. See Table 4 of [RFC7139]."
          },
          {
            "index ": 4,
            "// default restriction": "inclusive",
            "otn-label-range": {
              "range-type": "label-range-trib-port",
              "tsg": "tsg-1.25G",
              "odu-type-list": "[ ODU1 ]",
              "// default priority": 7
            },
            "// tpn-range": "1-4",
            "// comment": "Since this TPN range is reported for ODU1\
\ with 1.25G TSG, the TPN assignment rule is flexible within a commo\
\n range for mapping LO-ODU1 over HO-ODU2 with 1.25G TSG. See Table \
\4 of [RFC7139]."
          },
          {
            "index ": 5,
            "// default restriction": "inclusive",
            "otn-label-range": {
              "range-type": "label-range-trib-slot",
              "tsg": "tsg-2.5G",
              "odu-type-list": "[ ODU1 ]",
              "// default priority": 7
            },
            "// ts-range": "1-4",
            "// comment": "Since no TPN range is reported for ODU1 w\
\ith 2.5G TSG, the TPN allocation rule is fixed (TPN = TS#) for mapp\
\ing LO-ODU1 over HO-ODU2 with 2.5G TSG. See Table 3 of [RFC7139]."
          }
        ]
      }
    },
    {
      "// example": "HO-ODU3 or OTU3 Link",
      "label-restrictions": {
        "label-restriction": [
          {
            "index ": 1,
            "// default restriction": "inclusive",
            "otn-label-range": {
              "range-type": "label-range-trib-port",
              "//not-present tsg": "",
              "odu-type-list": "[ ODU3 ]",
              "// default priority": 7
            },
            "// tpn-range": 1,
            "// comment": "Since no TS range and no TSG are reported\
\ for ODU3, the link is an OTU3 Link. TS allocation is not needed an\
\d TPN shall be set to '1' for mapping ODU3 over OTU3. This entry is\
\ not present if the OTN Link is an HO-ODU3 Link."
          },
          {
            "index ": 2,
            "// default restriction": "inclusive",
            "otn-label-range": {
              "range-type": "label-range-trib-slot",
              "tsg": "tsg-1.25G",
              "odu-type-list": "[ ODUFlex-cbr, ODUFlex-gfp, ODU0, OD\
\U1, ODU2, ODU2e ]",
              "// default priority": 7
            },
            "// ts-range": "1-32"
          },
          {
            "index ": 3,
            "// default restriction": "inclusive",
            "otn-label-range": {
              "range-type": "label-range-trib-port",
              "tsg": "tsg-1.25G",
              "odu-type-list": "[ ODUFlex-cbr, ODUFlex-gfp, ODU0, OD\
\U2e ]",
              "// default priority": 7
            },
            "// tpn-range": "1-32",
            "// comment": "Since this TPN range is reported for ODUf\
\lex, ODU0 and ODU2e with 1.25G TSG, the TPN assignment rule is flex\
\ible within a common range for mapping LO-ODUflex, LO-ODU0 and LO-O\
\DU2e over HO-ODU3 with 1.25G TSG. See Table 4 of [RFC7139]."
          },
          {
            "index ": 4,
            "// default restriction": "inclusive",
            "otn-label-range": {
              "range-type": "label-range-trib-port",
              "tsg": "tsg-1.25G",
              "odu-type-list": "[ ODU1 ]",
              "// default priority": 7
            },
            "// tpn-range": "1-16",
            "// comment": "Since this TPN range is reported for ODU1\
\ with 1.25G TSG, the TPN assignment rule is flexible within a commo\
\n range for mapping LO-ODU1 over HO-ODU3 with 1.25G TSG. See Table \
\4 of [RFC7139]."
          },
          {
            "index ": 5,
            "// default restriction": "inclusive",
            "otn-label-range": {
              "range-type": "label-range-trib-port",
              "tsg": "tsg-1.25G",
              "odu-type-list": "[ ODU2 ]",
              "// default priority": 7
            },
            "// tpn-range": "1-4",
            "// comment": "Since this TPN range is reported for ODU2\
\ with 1.25G TSG, the TPN assignment rule is flexible within a commo\
\n range for mapping LO-ODU2 over HO-ODU3 with 1.25G TSG. See Table \
\4 of [RFC7139]."
          },
          {
            "index ": 6,
            "// default restriction": "inclusive",
            "otn-label-range": {
              "range-type": "label-range-trib-slot",
              "tsg": "tsg-2.5G",
              "odu-type-list": "[ ODU1, ODU2 ]",
              "// default priority": 7
            },
            "// ts-range": "1-16"
          },
          {
            "index ": 7,
            "// default restriction": "inclusive",
            "otn-label-range": {
              "range-type": "label-range-trib-port",
              "tsg": "tsg-2.5G ",
              "odu-type-list": "[ ODU2 ]",
              "// default priority": 7
            },
            "// tpn-range": "1-4",
            "// comment": "Since this TPN range is reported for ODU2\
\ with 2.5G TSG, the TPN assignment rule is flexible within a common\
\ range for mapping LO-ODU2 over HO-ODU3. Since no TPN range is repo\
\rted for ODU1 with 2.5G TSG, the TPN allocation rule is fixed (TPN \
\= TS#) for mapping LO-ODU1 over HO-ODU3 with 2.5G TSG. See Table 3 \
\of [RFC7139]."
          }
        ]
      }
    },
    {
      "// example": "HO-ODU4 or OTU4 Link",
      "label-restrictions": {
        "label-restriction": [
          {
            "index ": 1,
            "// default restriction": "inclusive",
            "otn-label-range": {
              "range-type": "label-range-trib-port",
              "//not-present tsg": "",
              "odu-type-list": "[ ODU4 ]",
              "// default priority": 7
            },
            "// tpn-range": 1,
            "// comment": "Since no TS range and no TSG are reported\
\ for ODU4, the link is an OTU4 Link. TS allocation is not needed an\
\d TPN shall be set to '1' for mapping ODU4 over OTU4. This entry is\
\ not present if the OTN Link is an HO-ODU4 Link."
          },
          {
            "index ": 2,
            "// default restriction": "inclusive",
            "otn-label-range": {
              "range-type": "label-range-trib-slot",
              "tsg": "tsg-1.25G",
              "odu-type-list": "[ ODUFlex-cbr, ODUFlex-gfp, ODU0, OD\
\U1, ODU2, ODU2e, ODU3 ]",
              "// default priority": 7
            },
            "// ts-range": "1-80"
          },
          {
            "index ": 3,
            "// default restriction": "inclusive",
            "otn-label-range": {
              "range-type": "label-range-trib-port",
              "tsg": "tsg-1.25G",
              "odu-type-list": "[ ODUFlex-cbr, ODUFlex-gfp, ODU0, OD\
\U1, ODU2, ODU2e, ODU3 ]",
              "// default priority": 7
            },
            "// tpn-range": "1-80",
            "// comment": "Since this TPN range is reported for any \
\LO-ODUj with 1.25G TSG, the TPN assignment rule is flexible within \
\a common range for mapping any LO-ODUj over HO-ODU4 with 1.25G TSG.\
\ See Table 4 of [RFC7139]."
          }
        ]
      }
    },
    {
      "// example": "ODUC1 Link",
      "label-restrictions": {
        "label-restriction": [
          {
            "index ": 1,
            "// default restriction": "inclusive",
            "otn-label-range": {
              "range-type": "label-range-trib-slot",
              "tsg": "tsg-5G",
              "odu-type-list": "[ ODUFlex-cbr, ODUFlex-gfp, ODU0, OD\
\U1, ODU2, ODU2e, ODU3, ODU4 ]",
              "// default priority": 7
            },
            "// ts-range": "1-20",
            "// comment": "Since the TS range is specified for any O\
\DUk, the OTN Link is an ODUCn Link."
          },
          {
            "index ": 2,
            "// default restriction": "inclusive",
            "otn-label-range": {
              "range-type": "label-range-trib-port",
              "tsg": "tsg-5G",
              "odu-type-list": "[ ODUFlex-cbr, ODUFlex-gfp, ODU0, OD\
\U1, ODU2, ODU2e, ODU3, ODU4 ]",
              "// default priority": 7
            },
            "// tpn-range": "1-10",
            "// comment": "Since this TPN range is reported for any \
\ODUk with 5G TSG, the TPN assignment rule is flexible within a comm\
\on range for mapping any ODUk over ODUCn with 5G TSG."
          }
        ]
      }
    }
  ]
}