Internet-Draft Yang for Optical Path Computation October 2021
Busi, et al. Expires 25 April 2022 [Page]
Workgroup:
CCAMP Working Group
Internet-Draft:
draft-gbb-ccamp-optical-path-computation-yang-00
Published:
Intended Status:
Standards Track
Expires:
Authors:
I. Busi
Huawei Technologies
A. Guo
Futurewei Technologies
S. Belotti
Nokia

YANG Data Models for requesting Path Computation in Optical Networks

Abstract

This document describes YANG data models for Remote Procedure Calls (RPCs) to request Path Computation in Optical Networks (OTN, WSON and Flexi-grid).

The YANG data models defined in this document conforms to the Network Management Datastore Architecture (NMDA).

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 25 April 2022.

Table of Contents

1. Introduction

[I-D.ietf-teas-yang-path-computation] describes some use cases, where a client needs to request underlying SDN controllers for path computation. In some of these use cases the underlying SDN controller can control a single-layer (OTN, WSON or Flexi-grid) or multi-layer Optical network.

This document define YANG data models, which augment the generic Path Computation RPC defined in [I-D.ietf-teas-yang-path-computation], with technology-specific augmentations required to request path computation to an underlying Optical SDN controller. These models allow a client to delegate path computation tasks to the underlying Optical SDN controller without having to obtain optical-layer information from the controller and performing feasible path computation itself. This is especially helpful in cases where computing optically-feasible paths requires knowledge of physical-layer states, such as optical impairments, which are visible only to the Optical controller.

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

1.1. Terminology and Notations

Refer to [RFC7446] and [RFC7581] for the key terms used in this document. The following terms are defined in [RFC7950] and are not redefined here:

  • client
  • server
  • augment
  • data model
  • data node

The following terms are defined in [RFC6241] and are not redefined here:

  • configuration data
  • state data

The terminology for describing YANG data models is found in [RFC7950].

1.2. Tree Diagram

A simplified graphical representation of the data model is used in Section 3 of this document. The meaning of the symbols in these diagrams is defined in [RFC8340].

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

Table 1: Prefixes and corresponding YANG modules
Prefix YANG module Reference
l0-types ietf-layer0-types [RFC9093]
l0-types-ext ietf-layer0-types-ext [RFCYYYY]
l0-types ietf-layer0-types [RFC8776]
l1-types ietf-layer1-types [RFCZZZZ]
te ietf-te [RFCKKKK]
tep ietf-te-path-computation [RFCJJJJ]
flexg-pc ietf-flexi-grid-path-computation RFCXXXX
wson-pc ietf-wson-path-computation RFCXXXX
otn-pc ietf-otn-path-computation RFCXXXX

RFC Editor Note: Please replace XXXX with the RFC number assigned to this document. Please replace YYYY with the RFC number assigned to [I-D.ietf-ccamp-layer0-types-ext]. Please replace ZZZZ with the RFC number assigned to [I-D.ietf-ccamp-layer1-types]. Please replace KKKK with the RFC number assigned to [I-D.ietf-teas-yang-te]. Please replace JJJJ with the RFC number assigned to [I-D.ietf-teas-yang-path-computation]. Please remove this note.

2. YANG Data Models for Optical Path Computation

2.1. YANG Models Overview

The YANG data models for requesting WSON, Flexi-grid and OTN path computation are defined as augmentations of the generic Path Computation RPC defined in [I-D.ietf-teas-yang-path-computation], as shown in Figure 1.

                    +--------------------------+    o: augment
       TE generic   | ietf-te-path-computation |
                    +--------------------------+
                          o      o      o
                          |      |      |
                          |      |      |
              +-----------+      |      +-----------+
              |                  |                  |
              |                  |                  |
              |                  |                  |
              |    +---------------------------+    |
              |    | ietf-otn-path-computation |    |
              |    +---------------------------+    |
              |                 OTN                 |
              |                                     |
              |                                     |
+----------------------------+                      |
| ietf-wson-path-computation |                      |
+----------------------------+                      |
            WSON                                    |
                                +----------------------------------+
                                | ietf-flexi-grid-path-computation |
                                +----------------------------------+
                                            Flexi-grid
Figure 1: Relationship between WSON, Flexi-grid, OTN and TE path computation models

The entities and TE attributes, such as requested path and tunnel attributes, defined in [I-D.ietf-teas-yang-path-computation], are still applicable when requestiong WSON, Flexi-grid and OTN path computation and the models defined in this document only specifies the additional technology-specific attributes/information, using the attributes defined in [RFC9093], [I-D.ietf-ccamp-layer0-types-ext] and [I-D.ietf-ccamp-layer1-types].

The YANG modules ietf-wson-path-computation, ietf-flexi-grid-path-computation and ietf-otn-path-computation defined in this document conforms to the Network Management Datastore Architecture (NMDA) defined in [RFC8342].

2.2. Attributes Augmentation

The common characteristics for layer 0 (WSON and Flexi-grid) tunnels are under definition in [I-D.ietf-ccamp-layer0-types-ext] and re-used in the ietf-wson-path-computation and ietf-flexi-grid-path-computation YANG models

2.3. Bandwidth Augmentation

As described in Section 4.2 of [RFC7699], there is some overlap between bandwidth and label in layer0.

The WSON and flexi-grid label resource information described in Section 2.4, is sufficient to describe also the spectrum resources within WSON and flexi-grid networks. Therefore, the model does not define any augmentation for the te-bandwidth containers defined in [I-D.ietf-teas-yang-path-computation].

The OTN path computation model augments all the occurrences of the te-bandwidth container with the OTN technology specific attributes using the otn-link-bandwidth and otn-path-bandwidth groupings defined in [I-D.ietf-ccamp-layer1-types].

2.4. Label Augmentations

The models augment all the occurrences of the label-restriction list with WSON, Flexi-grid and OTN technology specific attributes using the l0-label-range-info and flexi-grid-label-range-info groupings defined in [RFC9093] and the otn-label-range-info grouping defined in [I-D.ietf-ccamp-layer1-types].

Moreover, the models augment all the occurrences of the te-label container with the WSON, Flexi-grid and OTN technology specific attributes using the wson-label-start-end, wson-label-hop, wson-label-step, flexi-grid-label-start-end, flexi-grid-label-hop and flexi-grid-label-step defined in [RFC9093] and the otn-label-start-end, otn-label-hop and otn-label-step groupings defined in [I-D.ietf-ccamp-layer1-types].

3. Optical Path Computation Tree Diagrams

3.1. WSON Path Computation Tree Diagrams

Figure 2 below shows the tree diagram of the YANG data model defined in module ietf-wson-path-computation.yang.

module: ietf-wson-path-computation

  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:path-request:
    +-- fec-type?                identityref
    +-- termination-type?        identityref
    +-- bit-stuffing?            boolean
    +-- wavelength-assignment?   identityref
  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:path-request/tepc:path-in-segment
            /tepc:label-restrictions/tepc:label-restriction:
    +-- grid-type?   identityref
    +-- priority?    uint8
  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:path-request/tepc:path-out-segment
            /tepc:label-restrictions/tepc:label-restriction:
    +-- grid-type?   identityref
    +-- priority?    uint8
  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:path-request/tepc:optimizations/tepc:algorithm
            /tepc:metric/tepc:optimization-metric
            /tepc:explicit-route-exclude-objects
            /tepc:route-object-exclude-object/tepc:type/tepc:label
            /tepc:label-hop/tepc:te-label/tepc:technology:
    +--:(wson)
       +-- (grid-type)?
          +--:(dwdm)
          |  +-- (single-or-super-channel)?
          |     +--:(single)
          |     |  +-- dwdm-n?              l0-types:dwdm-n
          |     +--:(super)
          |        +-- subcarrier-dwdm-n*   l0-types:dwdm-n
          +--:(cwdm)
             +-- cwdm-n?                    l0-types:cwdm-n
  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:path-request/tepc:optimizations/tepc:algorithm
            /tepc:metric/tepc:optimization-metric
            /tepc:explicit-route-include-objects
            /tepc:route-object-include-object/tepc:type/tepc:label
            /tepc:label-hop/tepc:te-label/tepc:technology:
    +--:(wson)
       +-- (grid-type)?
          +--:(dwdm)
          |  +-- (single-or-super-channel)?
          |     +--:(single)
          |     |  +-- dwdm-n?              l0-types:dwdm-n
          |     +--:(super)
          |        +-- subcarrier-dwdm-n*   l0-types:dwdm-n
          +--:(cwdm)
             +-- cwdm-n?                    l0-types:cwdm-n
  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:path-request/tepc:explicit-route-objects-always
            /tepc:route-object-exclude-always/tepc:type/tepc:label
            /tepc:label-hop/tepc:te-label/tepc:technology:
    +--:(wson)
       +-- (grid-type)?
          +--:(dwdm)
          |  +-- (single-or-super-channel)?
          |     +--:(single)
          |     |  +-- dwdm-n?              l0-types:dwdm-n
          |     +--:(super)
          |        +-- subcarrier-dwdm-n*   l0-types:dwdm-n
          +--:(cwdm)
             +-- cwdm-n?                    l0-types:cwdm-n
  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:path-request/tepc:explicit-route-objects-always
            /tepc:route-object-include-exclude/tepc:type/tepc:label
            /tepc:label-hop/tepc:te-label/tepc:technology:
    +--:(wson)
       +-- (grid-type)?
          +--:(dwdm)
          |  +-- (single-or-super-channel)?
          |     +--:(single)
          |     |  +-- dwdm-n?              l0-types:dwdm-n
          |     +--:(super)
          |        +-- subcarrier-dwdm-n*   l0-types:dwdm-n
          +--:(cwdm)
             +-- cwdm-n?                    l0-types:cwdm-n
  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:path-request/tepc:path-in-segment
            /tepc:label-restrictions/tepc:label-restriction
            /tepc:label-start/tepc:te-label/tepc:technology:
    +--:(wson)
       +-- (grid-type)?
          +--:(dwdm)
          |  +-- dwdm-n?   l0-types:dwdm-n
          +--:(cwdm)
             +-- cwdm-n?   l0-types:cwdm-n
  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:path-request/tepc:path-in-segment
            /tepc:label-restrictions/tepc:label-restriction
            /tepc:label-end/tepc:te-label/tepc:technology:
    +--:(wson)
       +-- (grid-type)?
          +--:(dwdm)
          |  +-- dwdm-n?   l0-types:dwdm-n
          +--:(cwdm)
             +-- cwdm-n?   l0-types:cwdm-n
  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:path-request/tepc:path-in-segment
            /tepc:label-restrictions/tepc:label-restriction
            /tepc:label-step/tepc:technology:
    +--:(wson)
       +-- (l0-grid-type)?
          +--:(dwdm)
          |  +-- wson-dwdm-channel-spacing?   identityref
          +--:(cwdm)
             +-- wson-cwdm-channel-spacing?   identityref
  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:path-request/tepc:path-out-segment
            /tepc:label-restrictions/tepc:label-restriction
            /tepc:label-start/tepc:te-label/tepc:technology:
    +--:(wson)
       +-- (grid-type)?
          +--:(dwdm)
          |  +-- dwdm-n?   l0-types:dwdm-n
          +--:(cwdm)
             +-- cwdm-n?   l0-types:cwdm-n
  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:path-request/tepc:path-out-segment
            /tepc:label-restrictions/tepc:label-restriction
            /tepc:label-end/tepc:te-label/tepc:technology:
    +--:(wson)
       +-- (grid-type)?
          +--:(dwdm)
          |  +-- dwdm-n?   l0-types:dwdm-n
          +--:(cwdm)
             +-- cwdm-n?   l0-types:cwdm-n
  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:path-request/tepc:path-out-segment
            /tepc:label-restrictions/tepc:label-restriction
            /tepc:label-step/tepc:technology:
    +--:(wson)
       +-- (l0-grid-type)?
          +--:(dwdm)
          |  +-- wson-dwdm-channel-spacing?   identityref
          +--:(cwdm)
             +-- wson-cwdm-channel-spacing?   identityref
  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:synchronization/tepc:exclude-objects/tepc:excludes
            /tepc:type/tepc:label/tepc:label-hop/tepc:te-label
            /tepc:technology:
    +--:(wson)
       +-- (grid-type)?
          +--:(dwdm)
          |  +-- (single-or-super-channel)?
          |     +--:(single)
          |     |  +-- dwdm-n?              l0-types:dwdm-n
          |     +--:(super)
          |        +-- subcarrier-dwdm-n*   l0-types:dwdm-n
          +--:(cwdm)
             +-- cwdm-n?                    l0-types:cwdm-n
  augment /te:tunnels-path-compute/te:output/te:path-compute-result
            /tepc:response/tepc:computed-paths-properties
            /tepc:computed-path-properties/tepc:path-properties
            /tepc:path-route-objects/tepc:path-route-object/tepc:type
            /tepc:label/tepc:label-hop/tepc:te-label/tepc:technology:
    +--:(wson)
       +--ro (grid-type)?
          +--:(dwdm)
          |  +--ro (single-or-super-channel)?
          |     +--:(single)
          |     |  +--ro dwdm-n?              l0-types:dwdm-n
          |     +--:(super)
          |        +--ro subcarrier-dwdm-n*   l0-types:dwdm-n
          +--:(cwdm)
             +--ro cwdm-n?                    l0-types:cwdm-n
Figure 2: WSON path computation tree diagram

3.2. Flexi-grid Path Computation Tree Diagrams

Figure 3 below shows the tree diagram of the YANG data model defined in module ietf-flexi-grid-path-computation.yang.

module: ietf-flexi-grid-path-computation

  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:path-request:
    +-- fec-type?                identityref
    +-- termination-type?        identityref
    +-- bit-stuffing?            boolean
    +-- wavelength-assignment?   identityref
  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:path-request/tepc:path-in-segment
            /tepc:label-restrictions/tepc:label-restriction:
    +-- grid-type?    identityref
    +-- priority?     uint8
    +-- flexi-grid
       +-- slot-width-granularity?   identityref
       +-- min-slot-width-factor?    uint16
       +-- max-slot-width-factor?    uint16
  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:path-request/tepc:path-out-segment
            /tepc:label-restrictions/tepc:label-restriction:
    +-- grid-type?    identityref
    +-- priority?     uint8
    +-- flexi-grid
       +-- slot-width-granularity?   identityref
       +-- min-slot-width-factor?    uint16
       +-- max-slot-width-factor?    uint16
  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:path-request/tepc:optimizations/tepc:algorithm
            /tepc:metric/tepc:optimization-metric
            /tepc:explicit-route-exclude-objects
            /tepc:route-object-exclude-object/tepc:type/tepc:label
            /tepc:label-hop/tepc:te-label/tepc:technology:
    +--:(flexi-grid)
       +-- (single-or-super-channel)?
          +--:(single)
          |  +-- flexi-n?              l0-types:flexi-n
          |  +-- flexi-m?              l0-types:flexi-m
          +--:(super)
             +-- subcarrier-flexi-n* [flexi-n]
                +-- flexi-n    l0-types:flexi-n
                +-- flexi-m?   l0-types:flexi-m
  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:path-request/tepc:optimizations/tepc:algorithm
            /tepc:metric/tepc:optimization-metric
            /tepc:explicit-route-include-objects
            /tepc:route-object-include-object/tepc:type/tepc:label
            /tepc:label-hop/tepc:te-label/tepc:technology:
    +--:(flexi-grid)
       +-- (single-or-super-channel)?
          +--:(single)
          |  +-- flexi-n?              l0-types:flexi-n
          |  +-- flexi-m?              l0-types:flexi-m
          +--:(super)
             +-- subcarrier-flexi-n* [flexi-n]
                +-- flexi-n    l0-types:flexi-n
                +-- flexi-m?   l0-types:flexi-m
  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:path-request/tepc:explicit-route-objects-always
            /tepc:route-object-exclude-always/tepc:type/tepc:label
            /tepc:label-hop/tepc:te-label/tepc:technology:
    +--:(flexi-grid)
       +-- (single-or-super-channel)?
          +--:(single)
          |  +-- flexi-n?              l0-types:flexi-n
          |  +-- flexi-m?              l0-types:flexi-m
          +--:(super)
             +-- subcarrier-flexi-n* [flexi-n]
                +-- flexi-n    l0-types:flexi-n
                +-- flexi-m?   l0-types:flexi-m
  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:path-request/tepc:explicit-route-objects-always
            /tepc:route-object-include-exclude/tepc:type/tepc:label
            /tepc:label-hop/tepc:te-label/tepc:technology:
    +--:(flexi-grid)
       +-- (single-or-super-channel)?
          +--:(single)
          |  +-- flexi-n?              l0-types:flexi-n
          |  +-- flexi-m?              l0-types:flexi-m
          +--:(super)
             +-- subcarrier-flexi-n* [flexi-n]
                +-- flexi-n    l0-types:flexi-n
                +-- flexi-m?   l0-types:flexi-m
  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:path-request/tepc:path-in-segment
            /tepc:label-restrictions/tepc:label-restriction
            /tepc:label-start/tepc:te-label/tepc:technology:
    +--:(flexi-grid)
       +-- flexi-n?   l0-types:flexi-n
  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:path-request/tepc:path-in-segment
            /tepc:label-restrictions/tepc:label-restriction
            /tepc:label-end/tepc:te-label/tepc:technology:
    +--:(flexi-grid)
       +-- flexi-n?   l0-types:flexi-n
  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:path-request/tepc:path-in-segment
            /tepc:label-restrictions/tepc:label-restriction
            /tepc:label-step/tepc:technology:
    +--:(flexi-grid)
       +-- flexi-grid-channel-spacing?   identityref
       +-- flexi-n-step?                 uint8
  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:path-request/tepc:path-out-segment
            /tepc:label-restrictions/tepc:label-restriction
            /tepc:label-start/tepc:te-label/tepc:technology:
    +--:(flexi-grid)
       +-- flexi-n?   l0-types:flexi-n
  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:path-request/tepc:path-out-segment
            /tepc:label-restrictions/tepc:label-restriction
            /tepc:label-end/tepc:te-label/tepc:technology:
    +--:(flexi-grid)
       +-- flexi-n?   l0-types:flexi-n
  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:path-request/tepc:path-out-segment
            /tepc:label-restrictions/tepc:label-restriction
            /tepc:label-step/tepc:technology:
    +--:(flexi-grid)
       +-- flexi-grid-channel-spacing?   identityref
       +-- flexi-n-step?                 uint8
  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:synchronization/tepc:exclude-objects/tepc:excludes
            /tepc:type/tepc:label/tepc:label-hop/tepc:te-label
            /tepc:technology:
    +--:(flexi-grid)
       +-- (single-or-super-channel)?
          +--:(single)
          |  +-- flexi-n?              l0-types:flexi-n
          |  +-- flexi-m?              l0-types:flexi-m
          +--:(super)
             +-- subcarrier-flexi-n* [flexi-n]
                +-- flexi-n    l0-types:flexi-n
                +-- flexi-m?   l0-types:flexi-m
  augment /te:tunnels-path-compute/te:output/te:path-compute-result
            /tepc:response/tepc:computed-paths-properties
            /tepc:computed-path-properties/tepc:path-properties
            /tepc:path-route-objects/tepc:path-route-object/tepc:type
            /tepc:label/tepc:label-hop/tepc:te-label/tepc:technology:
    +--:(flexi-grid)
       +--ro (single-or-super-channel)?
          +--:(single)
          |  +--ro flexi-n?              l0-types:flexi-n
          |  +--ro flexi-m?              l0-types:flexi-m
          +--:(super)
             +--ro subcarrier-flexi-n* [flexi-n]
                +--ro flexi-n    l0-types:flexi-n
                +--ro flexi-m?   l0-types:flexi-m
Figure 3: Flexi-grid path computation tree diagram

3.3. OTN Path Computation Tree Diagrams

Figure 4 below shows the tree diagram of the YANG data model defined in module ietf-otn-path-computation.yang.

module: ietf-otn-path-computation

  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:path-request/tepc:te-bandwidth/tepc:technology:
    +--:(otn)
       +-- otn
          +-- odu-type?                     identityref
          +-- (oduflex-type)?
             +--:(generic)
             |  +-- nominal-bit-rate        uint64
             +--:(cbr)
             |  +-- client-type             identityref
             +--:(gfp-n-k)
             |  +-- gfp-n                   uint8
             |  +-- gfp-k?                  gfp-k
             +--:(flexe-client)
             |  +-- flexe-client            flexe-client-rate
             +--:(flexe-aware)
             |  +-- flexe-aware-n           uint16
             +--:(packet)
                +-- opuflex-payload-rate    uint64
  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:tunnel-attributes/tepc:te-bandwidth
            /tepc:technology:
    +--:(otn)
       +-- otn
          +-- odu-type?                     identityref
          +-- (oduflex-type)?
             +--:(generic)
             |  +-- nominal-bit-rate        uint64
             +--:(cbr)
             |  +-- client-type             identityref
             +--:(gfp-n-k)
             |  +-- gfp-n                   uint8
             |  +-- gfp-k?                  gfp-k
             +--:(flexe-client)
             |  +-- flexe-client            flexe-client-rate
             +--:(flexe-aware)
             |  +-- flexe-aware-n           uint16
             +--:(packet)
                +-- opuflex-payload-rate    uint64
  augment /te:tunnels-path-compute/te:output/te:path-compute-result
            /tepc:response/tepc:computed-paths-properties
            /tepc:computed-path-properties/tepc:path-properties
            /tepc:te-bandwidth/tepc:technology:
    +--:(otn)
       +--ro otn
          +--ro odu-type?                     identityref
          +--ro (oduflex-type)?
             +--:(generic)
             |  +--ro nominal-bit-rate        uint64
             +--:(cbr)
             |  +--ro client-type             identityref
             +--:(gfp-n-k)
             |  +--ro gfp-n                   uint8
             |  +--ro gfp-k?                  gfp-k
             +--:(flexe-client)
             |  +--ro flexe-client            flexe-client-rate
             +--:(flexe-aware)
             |  +--ro flexe-aware-n           uint16
             +--:(packet)
                +--ro opuflex-payload-rate    uint64
  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:path-request/tepc:path-in-segment
            /tepc:label-restrictions/tepc:label-restriction:
    +-- range-type?      otn-label-range-type
    +-- tsg?             identityref
    +-- odu-type-list*   identityref
    +-- priority?        uint8
  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:path-request/tepc:path-out-segment
            /tepc:label-restrictions/tepc:label-restriction:
    +-- range-type?      otn-label-range-type
    +-- tsg?             identityref
    +-- odu-type-list*   identityref
    +-- priority?        uint8
  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:path-request/tepc:optimizations/tepc:algorithm
            /tepc:metric/tepc:optimization-metric
            /tepc:explicit-route-exclude-objects
            /tepc:route-object-exclude-object/tepc:type/tepc:label
            /tepc:label-hop/tepc:te-label/tepc:technology:
    +--:(otn)
       +-- otn-tpn?   otn-tpn
       +-- tsg?       identityref
       +-- ts-list?   string
  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:path-request/tepc:optimizations/tepc:algorithm
            /tepc:metric/tepc:optimization-metric
            /tepc:explicit-route-include-objects
            /tepc:route-object-include-object/tepc:type/tepc:label
            /tepc:label-hop/tepc:te-label/tepc:technology:
    +--:(otn)
       +-- otn-tpn?   otn-tpn
       +-- tsg?       identityref
       +-- ts-list?   string
  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:path-request/tepc:explicit-route-objects-always
            /tepc:route-object-exclude-always/tepc:type/tepc:label
            /tepc:label-hop/tepc:te-label/tepc:technology:
    +--:(otn)
       +-- otn-tpn?   otn-tpn
       +-- tsg?       identityref
       +-- ts-list?   string
  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:path-request/tepc:explicit-route-objects-always
            /tepc:route-object-include-exclude/tepc:type/tepc:label
            /tepc:label-hop/tepc:te-label/tepc:technology:
    +--:(otn)
       +-- otn-tpn?   otn-tpn
       +-- tsg?       identityref
       +-- ts-list?   string
  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:path-request/tepc:path-in-segment
            /tepc:label-restrictions/tepc:label-restriction
            /tepc:label-start/tepc:te-label/tepc:technology:
    +--:(otn)
       +-- (range-type)?
          +--:(trib-port)
          |  +-- otn-tpn?   otn-tpn
          +--:(trib-slot)
             +-- otn-ts?    otn-ts
  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:path-request/tepc:path-in-segment
            /tepc:label-restrictions/tepc:label-restriction
            /tepc:label-end/tepc:te-label/tepc:technology:
    +--:(otn)
       +-- (range-type)?
          +--:(trib-port)
          |  +-- otn-tpn?   otn-tpn
          +--:(trib-slot)
             +-- otn-ts?    otn-ts
  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:path-request/tepc:path-in-segment
            /tepc:label-restrictions/tepc:label-restriction
            /tepc:label-step/tepc:technology:
    +--:(otn)
       +-- (range-type)?
          +--:(trib-port)
          |  +-- otn-tpn?   otn-tpn
          +--:(trib-slot)
             +-- otn-ts?    otn-ts
  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:path-request/tepc:path-out-segment
            /tepc:label-restrictions/tepc:label-restriction
            /tepc:label-start/tepc:te-label/tepc:technology:
    +--:(otn)
       +-- (range-type)?
          +--:(trib-port)
          |  +-- otn-tpn?   otn-tpn
          +--:(trib-slot)
             +-- otn-ts?    otn-ts
  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:path-request/tepc:path-out-segment
            /tepc:label-restrictions/tepc:label-restriction
            /tepc:label-end/tepc:te-label/tepc:technology:
    +--:(otn)
       +-- (range-type)?
          +--:(trib-port)
          |  +-- otn-tpn?   otn-tpn
          +--:(trib-slot)
             +-- otn-ts?    otn-ts
  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:path-request/tepc:path-out-segment
            /tepc:label-restrictions/tepc:label-restriction
            /tepc:label-step/tepc:technology:
    +--:(otn)
       +-- (range-type)?
          +--:(trib-port)
          |  +-- otn-tpn?   otn-tpn
          +--:(trib-slot)
             +-- otn-ts?    otn-ts
  augment /te:tunnels-path-compute/te:input/te:path-compute-info
            /tepc:synchronization/tepc:exclude-objects/tepc:excludes
            /tepc:type/tepc:label/tepc:label-hop/tepc:te-label
            /tepc:technology:
    +--:(otn)
       +-- otn-tpn?   otn-tpn
       +-- tsg?       identityref
       +-- ts-list?   string
  augment /te:tunnels-path-compute/te:output/te:path-compute-result
            /tepc:response/tepc:computed-paths-properties
            /tepc:computed-path-properties/tepc:path-properties
            /tepc:path-route-objects/tepc:path-route-object/tepc:type
            /tepc:label/tepc:label-hop/tepc:te-label/tepc:technology:
    +--:(otn)
       +--ro otn-tpn?   otn-tpn
       +--ro tsg?       identityref
       +--ro ts-list?   string
Figure 4: OTN path computation tree diagram

4. YANG Models for Optical Path Computation

4.1. YANG Model for WSON Path Computation

<CODE BEGINS> file "ietf-wson-path-computation@2021-10-15.yang"

module ietf-wson-path-computation {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-wson-path-computation";
  prefix "wson-pc";

  import ietf-te-path-computation {
    prefix "tepc";
    revision-date "2021-09-06";
    reference
    "I-D.ietf-teas-yang-path-computation-14: Yang model
    for requesting Path Computation.";
  }

  import ietf-te {
    prefix "te";
    revision-date "2021-02-20";
    reference
      "I-D.ietf-teas-yang-te-19: A YANG Data Model for Traffic
      Engineering Tunnels and Interfaces. ";
  }

  import ietf-layer0-types {
    prefix "l0-types";
  }

  import ietf-layer0-types-ext {
    prefix "l0-types-ext";
  }

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

     Editor:   Aihua Guo
               <mailto:aihuaguo.ietf@gmail.com>

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

     Editor:   Sergio Belotti
               <mailto:sergio.belotti@nokia.com>";

  description
    "This module defines a model for requesting
    WSON Path Computation.

    The model fully conforms to the Network Management
    Datastore Architecture (NMDA).

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

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

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

  revision "2021-10-15" {
    description
      "Initial version.";
    reference
      "RFC XXXX: YANG Model for OTN and Optical Path Computation";
    // RFC Ed.: replace XXXX with actual RFC number, update date
    // information and remove this note
  }

 /*
  * Data nodes
  */

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:path-request" {
    description
       "Augment with additional constraints for WSON paths.";
    uses l0-types-ext:l0-tunnel-attributes;
    uses l0-types-ext:l0-path-constraints;
  }

  /*
   * Augment TE label range information
   */

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:path-request/tepc:path-in-segment/"
        + "tepc:label-restrictions/tepc:label-restriction" {
    description
      "Augment TE label range information for the ingress segment
      of the requested path.";
    uses l0-types:l0-label-range-info;
  }

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:path-request/tepc:path-out-segment/"
        + "tepc:label-restrictions/tepc:label-restriction" {
    description
      "Augment TE label range information for the egress segment
      of the requested path.";
    uses l0-types:l0-label-range-info;
  }

  /*
   * Augment TE label.
   */

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:path-request/tepc:optimizations/tepc:algorithm/"
        + "tepc:metric/tepc:optimization-metric/"
        + "tepc:explicit-route-exclude-objects/"
        + "tepc:route-object-exclude-object/tepc:type/tepc:label/"
        + "tepc:label-hop/tepc:te-label/tepc:technology" {
    description
      "Augment TE label hop for the optimization of the explicit
      route objects excluded by the path computation of the requested
      path.";
    case wson {
      uses l0-types:wson-label-hop;
    }
  }

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:path-request/tepc:optimizations/tepc:algorithm/"
        + "tepc:metric/tepc:optimization-metric/"
        + "tepc:explicit-route-include-objects/"
        + "tepc:route-object-include-object/tepc:type/tepc:label/"
        + "tepc:label-hop/tepc:te-label/tepc:technology" {
    description
      "Augment TE label hop for the optimization of the explicit
      route objects included by the path computation of the requested
      path.";
    case wson {
      uses l0-types:wson-label-hop;
    }
  }

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:path-request/tepc:explicit-route-objects-always/"
        + "tepc:route-object-exclude-always/tepc:type/tepc:label/"
        + "tepc:label-hop/tepc:te-label/tepc:technology" {
    description
      "Augment TE label hop for the explicit route objects always
      excluded by the path computation of the requested path.";
    case wson {
      uses l0-types:wson-label-hop;
    }
  }

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:path-request/tepc:explicit-route-objects-always/"
        + "tepc:route-object-include-exclude/tepc:type/tepc:label/"
        + "tepc:label-hop/tepc:te-label/tepc:technology" {
    description
      "Augment TE label hop for the explicit route objects included
      or excluded by the path computation of the requested path.";
    case wson {
      uses l0-types:wson-label-hop;
    }
  }

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:path-request/tepc:path-in-segment/"
        + "tepc:label-restrictions/tepc:label-restriction/"
        + "tepc:label-start/tepc:te-label/tepc:technology" {
    description
      "Augment TE label range start for the ingress segment
      of the requested path.";
    case wson {
      uses l0-types:wson-label-start-end;
    }
  }

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:path-request/tepc:path-in-segment/"
        + "tepc:label-restrictions/tepc:label-restriction/"
        + "tepc:label-end/tepc:te-label/tepc:technology" {
    description
      "Augment TE label range end for the ingress segment
      of the requested path.";
    case wson {
      uses l0-types:wson-label-start-end;
    }
  }

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:path-request/tepc:path-in-segment/"
        + "tepc:label-restrictions/tepc:label-restriction/"
        + "tepc:label-step/tepc:technology" {
    description
      "Augment TE label range step for the ingress segment
      of the requested path.";
    case wson {
      uses l0-types:wson-label-step;
    }
  }

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:path-request/tepc:path-out-segment/"
        + "tepc:label-restrictions/tepc:label-restriction/"
        + "tepc:label-start/tepc:te-label/tepc:technology" {
    description
      "Augment TE label range start for the egress segment
      of the requested path.";
    case wson {
      uses l0-types:wson-label-start-end;
    }
  }

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:path-request/tepc:path-out-segment/"
        + "tepc:label-restrictions/tepc:label-restriction/"
        + "tepc:label-end/tepc:te-label/tepc:technology" {
    description
      "Augment TE label range end for the egress segment
      of the requested path.";
    case wson {
      uses l0-types:wson-label-start-end;
    }
  }

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:path-request/tepc:path-out-segment/"
        + "tepc:label-restrictions/tepc:label-restriction/"
        + "tepc:label-step/tepc:technology" {
    description
      "Augment TE label range end for the egress segment
      of the requested path.";
    case wson {
      uses l0-types:wson-label-step;
    }
  }

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:synchronization/tepc:exclude-objects/tepc:excludes/"
        + "tepc:type/tepc:label/tepc:label-hop/"
        + "tepc:te-label/tepc:technology" {
    description
      "Augment TE label hop for the explicit route objects to always
      exclude from synchronized path computation.";
    case wson {
      uses l0-types:wson-label-hop;
    }
  }

  augment "/te:tunnels-path-compute/te:output/"
        + "te:path-compute-result/tepc:response/"
        + "tepc:computed-paths-properties/"
        + "tepc:computed-path-properties/tepc:path-properties/"
        + "tepc:path-route-objects/tepc:path-route-object/"
        + "tepc:type/tepc:label/"
        + "tepc:label-hop/tepc:te-label/tepc:technology" {
    description
      "Augment TE label hop for the route object of the computed
      path.";
    case wson {
      uses l0-types:wson-label-hop;
    }
  }
}

<CODE ENDS>
Figure 5: WSON path computation YANG module

4.2. YANG Model for Flexi-grid Path Computation

<CODE BEGINS> file "ietf-flexi-grid-path-computation@2021-10-15.yang"

module ietf-flexi-grid-path-computation {
  yang-version 1.1;
  namespace
    "urn:ietf:params:xml:ns:yang:ietf-flexi-grid-path-computation";
  prefix "flexg-pc";

  import ietf-te-path-computation {
    prefix "tepc";
    revision-date "2021-09-06";
    reference
    "I-D.ietf-teas-yang-path-computation-14: Yang model
    for requesting Path Computation.";
  }

  import ietf-te {
    prefix "te";
    revision-date "2021-02-20";
    reference
      "I-D.ietf-teas-yang-te-19: A YANG Data Model for Traffic
      Engineering Tunnels and Interfaces. ";
  }

  import ietf-layer0-types {
    prefix "l0-types";
  }

  import ietf-layer0-types-ext {
    prefix "l0-types-ext";
  }

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

     Editor:   Aihua Guo
               <mailto:aihuaguo.ietf@gmail.com>

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

     Editor:   Sergio Belotti
               <mailto:sergio.belotti@nokia.com>";

  description
    "This module defines a model for requesting
    Flexi-grid Path Computation.

    The model fully conforms to the Network Management
    Datastore Architecture (NMDA).

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

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

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

  revision "2021-10-15" {
    description
      "Initial version.";
    reference
      "RFC XXXX: YANG Model for OTN and Optical Path Computation";
    // RFC Ed.: replace XXXX with actual RFC number, update date
    // information and remove this note
  }

 /*
  * Data nodes
  */

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:path-request" {
    description
       "Augment with additional constraints flexi-grid
        media channel.";
    uses l0-types-ext:l0-tunnel-attributes;
    uses l0-types-ext:l0-path-constraints;
  }

  /*
   * Augment TE label range information
   */

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:path-request/tepc:path-in-segment/"
        + "tepc:label-restrictions/tepc:label-restriction" {
    description
      "Augment TE label range information for the ingress segment
      of the requested path.";
    uses l0-types:flexi-grid-label-range-info;
  }

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:path-request/tepc:path-out-segment/"
        + "tepc:label-restrictions/tepc:label-restriction" {
    description
      "Augment TE label range information for the egress segment
      of the requested path.";
    uses l0-types:flexi-grid-label-range-info;
  }

  /*
   * Augment TE label.
   */

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:path-request/tepc:optimizations/tepc:algorithm/"
        + "tepc:metric/tepc:optimization-metric/"
        + "tepc:explicit-route-exclude-objects/"
        + "tepc:route-object-exclude-object/tepc:type/tepc:label/"
        + "tepc:label-hop/tepc:te-label/tepc:technology" {
    description
      "Augment TE label hop for the optimization of the explicit
      route objects excluded by the path computation of the requested
      path.";
    case flexi-grid {
      uses l0-types:flexi-grid-label-hop;
    }
  }

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:path-request/tepc:optimizations/tepc:algorithm/"
        + "tepc:metric/tepc:optimization-metric/"
        + "tepc:explicit-route-include-objects/"
        + "tepc:route-object-include-object/tepc:type/tepc:label/"
        + "tepc:label-hop/tepc:te-label/tepc:technology" {
    description
      "Augment TE label hop for the optimization of the explicit
      route objects included by the path computation of the requested
      path.";
    case flexi-grid {
      uses l0-types:flexi-grid-label-hop;
    }
  }

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:path-request/tepc:explicit-route-objects-always/"
        + "tepc:route-object-exclude-always/tepc:type/tepc:label/"
        + "tepc:label-hop/tepc:te-label/tepc:technology" {
    description
      "Augment TE label hop for the explicit route objects always
      excluded by the path computation of the requested path.";
    case flexi-grid {
      uses l0-types:flexi-grid-label-hop;
    }
  }

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:path-request/tepc:explicit-route-objects-always/"
        + "tepc:route-object-include-exclude/tepc:type/tepc:label/"
        + "tepc:label-hop/tepc:te-label/tepc:technology" {
    description
      "Augment TE label hop for the explicit route objects included
      or excluded by the path computation of the requested path.";
    case flexi-grid {
      uses l0-types:flexi-grid-label-hop;
    }
  }

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:path-request/tepc:path-in-segment/"
        + "tepc:label-restrictions/tepc:label-restriction/"
        + "tepc:label-start/tepc:te-label/tepc:technology" {
    description
      "Augment TE label range start for the ingress segment
      of the requested path.";
    case flexi-grid {
      uses l0-types:flexi-grid-label-start-end;
    }
  }

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:path-request/tepc:path-in-segment/"
        + "tepc:label-restrictions/tepc:label-restriction/"
        + "tepc:label-end/tepc:te-label/tepc:technology" {
    description
      "Augment TE label range end for the ingress segment
      of the requested path.";
    case flexi-grid {
      uses l0-types:flexi-grid-label-start-end;
    }
  }

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:path-request/tepc:path-in-segment/"
        + "tepc:label-restrictions/tepc:label-restriction/"
        + "tepc:label-step/tepc:technology" {
    description
      "Augment TE label range step for the ingress segment
      of the requested path.";
    case flexi-grid {
      uses l0-types:flexi-grid-label-step;
    }
  }

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:path-request/tepc:path-out-segment/"
        + "tepc:label-restrictions/tepc:label-restriction/"
        + "tepc:label-start/tepc:te-label/tepc:technology" {
    description
      "Augment TE label range start for the egress segment
      of the requested path.";
    case flexi-grid {
      uses l0-types:flexi-grid-label-start-end;
    }
  }

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:path-request/tepc:path-out-segment/"
        + "tepc:label-restrictions/tepc:label-restriction/"
        + "tepc:label-end/tepc:te-label/tepc:technology" {
    description
      "Augment TE label range end for the egress segment
      of the requested path.";
    case flexi-grid {
      uses l0-types:flexi-grid-label-start-end;
    }
  }

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:path-request/tepc:path-out-segment/"
        + "tepc:label-restrictions/tepc:label-restriction/"
        + "tepc:label-step/tepc:technology" {
    description
      "Augment TE label range end for the egress segment
      of the requested path.";
    case flexi-grid {
      uses l0-types:flexi-grid-label-step;
    }
  }

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:synchronization/tepc:exclude-objects/tepc:excludes/"
        + "tepc:type/tepc:label/tepc:label-hop/"
        + "tepc:te-label/tepc:technology" {
    description
      "Augment TE label hop for the explicit route objects to always
      exclude from synchronized path computation.";
    case flexi-grid {
      uses l0-types:flexi-grid-label-hop;
    }
  }

  augment "/te:tunnels-path-compute/te:output/"
        + "te:path-compute-result/tepc:response/"
        + "tepc:computed-paths-properties/"
        + "tepc:computed-path-properties/tepc:path-properties/"
        + "tepc:path-route-objects/tepc:path-route-object/"
        + "tepc:type/tepc:label/"
        + "tepc:label-hop/tepc:te-label/tepc:technology" {
    description
      "Augment TE label hop for the route object of the computed
      path.";
    case flexi-grid {
      uses l0-types:flexi-grid-label-hop;
    }
  }
}

<CODE ENDS>
Figure 6: Flexi-grid path computation YANG module

4.3. YANG Model for OTN Path Computation

<CODE BEGINS> file "ietf-otn-path-computation@2021-10-07.yang"

module ietf-otn-path-computation {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-otn-path-computation";
  prefix "otn-pc";

  import ietf-te-path-computation {
    prefix "tepc";
    revision-date "2021-09-06";
    reference
    "I-D.ietf-teas-yang-path-computation-14: Yang model
    for requesting Path Computation.";
  }

  import ietf-te {
    prefix "te";
    revision-date "2021-02-20";
    reference
      "I-D.ietf-teas-yang-te-19: A YANG Data Model for Traffic
      Engineering Tunnels and Interfaces. ";
  }

  import ietf-layer1-types {
    prefix "l1-types";
    reference
    "I-D.ietf-ccamp-layer1-types:
     A YANG Data Model for Layer 1 Types. ";
  }

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

     Editor:   Aihua Guo
               <mailto:aihuaguo.ietf@gmail.com>

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

     Editor:   Sergio Belotti
               <mailto:sergio.belotti@nokia.com>";

  description
    "This module defines a model for requesting
    OTN Path Computation.

    The model fully conforms to the Network Management
    Datastore Architecture (NMDA).

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

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

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

  revision "2021-10-07" {
    description
      "Initial version.";
    reference
      "RFC XXXX: YANG Model for OTN and Optical Path Computation";
    // RFC Ed.: replace XXXX with actual RFC number, update date
    // information and remove this note
  }

 /*
  * Data nodes
  */

  /*
   * Augment TE bandwidth
   */

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:path-request/tepc:te-bandwidth/tepc:technology" {
    description
      "Augment TE bandwidth of the requested path.";
    case otn {
      uses l1-types:otn-path-bandwidth;
    }
  }

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:tunnel-attributes/tepc:te-bandwidth/"
        + "tepc:technology" {
    description
      "Augment TE bandwidth of the requested tunnel attributes.";
    case otn {
      uses l1-types:otn-path-bandwidth;
    }
  }

  augment "/te:tunnels-path-compute/te:output/"
        + "te:path-compute-result/tepc:response/"
        + "tepc:computed-paths-properties/"
        + "tepc:computed-path-properties/tepc:path-properties/"
        + "tepc:te-bandwidth/tepc:technology" {
    description
      "Augment TE bandwidth of the computed path properties.";
    case otn {
      uses l1-types:otn-path-bandwidth;
    }
  }

  /*
   * Augment TE label range information
   */

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:path-request/tepc:path-in-segment/"
        + "tepc:label-restrictions/tepc:label-restriction" {
    description
      "Augment TE label range information for the ingress segment
      of the requested path.";
    uses l1-types:otn-label-range-info;
  }

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:path-request/tepc:path-out-segment/"
        + "tepc:label-restrictions/tepc:label-restriction" {
    description
      "Augment TE label range information for the egress segment
      of the requested path.";
    uses l1-types:otn-label-range-info;
  }

  /*
   * Augment TE label.
   */

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:path-request/tepc:optimizations/tepc:algorithm/"
        + "tepc:metric/tepc:optimization-metric/"
        + "tepc:explicit-route-exclude-objects/"
        + "tepc:route-object-exclude-object/tepc:type/tepc:label/"
        + "tepc:label-hop/tepc:te-label/tepc:technology" {
    description
      "Augment TE label hop for the optimization of the explicit
      route objects excluded by the path computation of the requested
      path.";
    case otn {
      uses l1-types:otn-label-hop;
    }
  }

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:path-request/tepc:optimizations/tepc:algorithm/"
        + "tepc:metric/tepc:optimization-metric/"
        + "tepc:explicit-route-include-objects/"
        + "tepc:route-object-include-object/tepc:type/tepc:label/"
        + "tepc:label-hop/tepc:te-label/tepc:technology" {
    description
      "Augment TE label hop for the optimization of the explicit
      route objects included by the path computation of the requested
      path.";
    case otn {
      uses l1-types:otn-label-hop;
    }
  }

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:path-request/tepc:explicit-route-objects-always/"
        + "tepc:route-object-exclude-always/tepc:type/tepc:label/"
        + "tepc:label-hop/tepc:te-label/tepc:technology" {
    description
      "Augment TE label hop for the explicit route objects always
      excluded by the path computation of the requested path.";
    case otn {
      uses l1-types:otn-label-hop;
    }
  }

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:path-request/tepc:explicit-route-objects-always/"
        + "tepc:route-object-include-exclude/tepc:type/tepc:label/"
        + "tepc:label-hop/tepc:te-label/tepc:technology" {
    description
      "Augment TE label hop for the explicit route objects included
      or excluded by the path computation of the requested path.";
    case otn {
      uses l1-types:otn-label-hop;
    }
  }

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:path-request/tepc:path-in-segment/"
        + "tepc:label-restrictions/tepc:label-restriction/"
        + "tepc:label-start/tepc:te-label/tepc:technology" {
    description
      "Augment TE label range start for the ingress segment
      of the requested path.";
    case otn {
      uses l1-types:otn-label-start-end;
    }
  }

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:path-request/tepc:path-in-segment/"
        + "tepc:label-restrictions/tepc:label-restriction/"
        + "tepc:label-end/tepc:te-label/tepc:technology" {
    description
      "Augment TE label range end for the ingress segment
      of the requested path.";
    case otn {
      uses l1-types:otn-label-start-end;
    }
  }

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:path-request/tepc:path-in-segment/"
        + "tepc:label-restrictions/tepc:label-restriction/"
        + "tepc:label-step/tepc:technology" {
    description
      "Augment TE label range step for the ingress segment
      of the requested path.";
    case otn {
      uses l1-types:otn-label-step;
    }
  }

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:path-request/tepc:path-out-segment/"
        + "tepc:label-restrictions/tepc:label-restriction/"
        + "tepc:label-start/tepc:te-label/tepc:technology" {
    description
      "Augment TE label range start for the egress segment
      of the requested path.";
    case otn {
      uses l1-types:otn-label-start-end;
    }
  }

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:path-request/tepc:path-out-segment/"
        + "tepc:label-restrictions/tepc:label-restriction/"
        + "tepc:label-end/tepc:te-label/tepc:technology" {
    description
      "Augment TE label range end for the egress segment
      of the requested path.";
    case otn {
      uses l1-types:otn-label-start-end;
    }
  }

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:path-request/tepc:path-out-segment/"
        + "tepc:label-restrictions/tepc:label-restriction/"
        + "tepc:label-step/tepc:technology" {
    description
      "Augment TE label range end for the egress segment
      of the requested path.";
    case otn {
      uses l1-types:otn-label-step;
    }
  }

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info/"
        + "tepc:synchronization/tepc:exclude-objects/tepc:excludes/"
        + "tepc:type/tepc:label/tepc:label-hop/"
        + "tepc:te-label/tepc:technology" {
    description
      "Augment TE label hop for the explicit route objects to always
      exclude from synchronized path computation.";
    case otn {
      uses l1-types:otn-label-hop;
    }
  }

  augment "/te:tunnels-path-compute/te:output/"
        + "te:path-compute-result/tepc:response/"
        + "tepc:computed-paths-properties/"
        + "tepc:computed-path-properties/tepc:path-properties/"
        + "tepc:path-route-objects/tepc:path-route-object/"
        + "tepc:type/tepc:label/"
        + "tepc:label-hop/tepc:te-label/tepc:technology" {
    description
      "Augment TE label hop for the route object of the computed
      path.";
    case otn {
      uses l1-types:otn-label-hop;
    }
  }
}

<CODE ENDS>
Figure 7: OTN path computation YANG module

5. Manageability Considerations

TBD.

6. Security Considerations

<Add any security considerations>

7. IANA Considerations

<Add any IANA considerations>

8. References

8.1. Normative References

[I-D.ietf-ccamp-layer0-types-ext]
Beller, D., Belotti, S., Zheng, H., Busi, I., and E. L. Rouzic, "A YANG Data Model for Layer 0 Types - Revision 2", Work in Progress, Internet-Draft, draft-ietf-ccamp-layer0-types-ext-00, , <https://www.ietf.org/archive/id/draft-ietf-ccamp-layer0-types-ext-00.txt>.
[I-D.ietf-ccamp-layer1-types]
Zheng, H. and I. Busi, "A YANG Data Model for Layer 1 Types", Work in Progress, Internet-Draft, draft-ietf-ccamp-layer1-types-11, , <https://www.ietf.org/archive/id/draft-ietf-ccamp-layer1-types-11.txt>.
[I-D.ietf-teas-yang-path-computation]
Busi, I., Belotti, S., Lopez, V., Sharma, A., and Y. Shi, "YANG Data Model for requesting Path Computation", Work in Progress, Internet-Draft, draft-ietf-teas-yang-path-computation-16, , <https://www.ietf.org/archive/id/draft-ietf-teas-yang-path-computation-16.txt>.
[I-D.ietf-teas-yang-te]
Saad, T., Gandhi, R., Liu, X., Beeram, V. P., Bryskin, I., and O. G. D. Dios, "A YANG Data Model for Traffic Engineering Tunnels, Label Switched Paths and Interfaces", Work in Progress, Internet-Draft, draft-ietf-teas-yang-te-27, , <https://www.ietf.org/archive/id/draft-ietf-teas-yang-te-27.txt>.
[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/info/rfc6241>.
[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/info/rfc7699>.
[RFC7950]
Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", RFC 7950, DOI 10.17487/RFC7950, , <https://www.rfc-editor.org/info/rfc7950>.
[RFC8340]
Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", BCP 215, RFC 8340, DOI 10.17487/RFC8340, , <https://www.rfc-editor.org/info/rfc8340>.
[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/info/rfc8342>.
[RFC8776]
Saad, T., Gandhi, R., Liu, X., Beeram, V., and I. Bryskin, "Common YANG Data Types for Traffic Engineering", RFC 8776, DOI 10.17487/RFC8776, , <https://www.rfc-editor.org/info/rfc8776>.
[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/info/rfc9093>.

8.2. Informative References

[I-D.ietf-teas-actn-poi-applicability]
Peruzzini, F., Bouquier, J., Busi, I., King, D., and D. Ceccarelli, "Applicability of Abstraction and Control of Traffic Engineered Networks (ACTN) to Packet Optical Integration (POI)", Work in Progress, Internet-Draft, draft-ietf-teas-actn-poi-applicability-03, , <https://www.ietf.org/archive/id/draft-ietf-teas-actn-poi-applicability-03.txt>.
[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/info/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/info/rfc7581>.

Acknowledgments

The authors of this document would like to thank the authors of [I-D.ietf-teas-actn-poi-applicability] for having identified the gap and requirements to trigger this work.

This document was prepared using kramdown.

Contributors

Daniel King
Old Dog Consulting

Authors' Addresses

Italo Busi
Huawei Technologies
Aihua Guo
Futurewei Technologies
Sergio Belotti
Nokia