A Yang Data Model for WSON Tunnel
Young Lee
Samsung
Seoul
South Korea
younglee.tx@gmail.com
Haomian Zheng
Huawei Technologies
H1, Huawei Industrial Base, Songshan Lake
Dongguan
Guangdong
523808
China
zhenghaomian@huawei.com
Aihua Guo
Futurewei
aihuaguo.ietf@gmail.com
Victor Lopez
Nokia
victor.lopez@nokia.com
Daniel King
University of Lancaster
d.king@lancaster.ac.uk
Bin Yeong Yoon
ETRI
218 Gaijeongro, Yuseong-gu
Daejeon
Korea
byyun@etri.re.kr
Ricard Vilalta
CTTC
ricard.vilalta@cttc.es
11 July 2022
CCAMP Working Group
This document provides a YANG data model for WSON TE tunnel.

Introduction
This document provides a YANG data model for WSON tunnel model. The YANG model described in this document is a WSON technology-specific Yang Tunnel model based on the information model developed in [RFC7446] and the two encoding documents [RFC7579] and [RFC7581] that developed protocol independent encodings based on [RFC7446].
This document augments the generic TE tunnel model [I-D.ietf-teas-yang-te].

Terminology
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].

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

Prefixes 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. The module ietf-layer0-types specified in [RFC9093], ietf-layer1-types specified in [I-D.ietf-ccamp-layer1-types], ietf-te-path-computation specified in [I-D.ietf-teas-yang-path-computation] and ietf-te specified in [I-D.ietf-teas-yang-te] are imported in this module.

    +-------------+-------------------+------------------------------+
    | Prefix      | YANG module       |         Reference            |
    +-------------+-------------------+------------------------------+
    | layer0-types|ietf-layer0-types  |[RFC 9093]                    |
    | layer1-types|ietf-layer1-types  |[I-D.ietf-ccamp-layer1-types] |
    | tepc  |ietf-te-path-computation |[I-D.ietf-teas-yang-path-computation]|
    | te          | ietf-te           |[I-D.ietf-teas-yang-te]       |
    | wson-tunnel | ietf-wson-tunnel  |[RFC XXXX]                    |
    +-------------+-------------------+------------------------------+

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

WSON Tunnel Model Description

Overview of WSON Tunnel Model
The WSON tunnel model is using TE tunnel [I-D.ietf-teas-yang-te] and TE types [RFC8776] as a basic model and augment to the TE tunnel with WSON-specific parameters, including the bandwidth information and label information. It is also worth noting that the WSON tunnel provisioning is usually based on the WSON topology. Therefore the WSON tunnel model is usually used together with WSON topology model specified in [RFC9094].
More scenarios and model applications can be found in [I-D.ietf-ccamp-transport-nbi-app-statement] and [I-D.ietf-teas-actn-yang]. The current model is following the YANG language specification as [RFC7950], and the corresponding protocol is recommended to be Netconf protocol in [RFC6241] or RESTconf protocol in [RFC8040].
The YANG module ietf-wson-tunnel defined in this document conforms to the Network Management Datastore Architecture (NMDA) defined in [RFC8342].

WSON-specific Parameters in Tunnel Model
WSON specific parameters have been augmenting to the TE tunnel models. The attributes on both of the source and destination need to be configured when setting up the tunnel. Typical parameters, including bandwidth and grid information, are required in the WSON tunnel model. These parameters are consistent with the framework in [RFC6163], and the specification in [RFC7579] and [RFC7581].
The WSON bandwidth information has been augmenting to various sections of TE tunnel models, including tunnel bandwidth, primary path bandwidth and so on. The WSON label information has been augmenting to label hop of a group of routing objects and also LSPs.

WSON Tunnel YANG Tree

module: ietf-wson-tunnel

  augment /te:te/te:tunnels/te:tunnel:
    +--rw fec-type?           identityref
    +--rw termination-type?   identityref
    +--rw bit-stuffing?       boolean
  augment /te:te/te:globals/te:named-path-constraints
            /te:named-path-constraint/te:path-in-segment
            /te:label-restrictions/te:label-restriction:
    +--rw grid-type?   identityref
    +--rw priority?    uint8
  augment /te:te/te:globals/te:named-path-constraints
            /te:named-path-constraint/te:path-out-segment
            /te:label-restrictions/te:label-restriction:
    +--rw grid-type?   identityref
    +--rw priority?    uint8
  augment /te:te/te:tunnels/te:tunnel/te:primary-paths
            /te:primary-path/te:path-in-segment/te:label-restrictions
            /te:label-restriction:
    +--rw grid-type?   identityref
    +--rw priority?    uint8
  augment /te:te/te:tunnels/te:tunnel/te:primary-paths
            /te:primary-path/te:path-out-segment
            /te:label-restrictions/te:label-restriction:
    +--rw grid-type?   identityref
    +--rw priority?    uint8
  augment /te:te/te:tunnels/te:tunnel/te:primary-paths
            /te:primary-path/te:primary-reverse-path
            /te:path-in-segment/te:label-restrictions
            /te:label-restriction:
    +--rw grid-type?   identityref
    +--rw priority?    uint8
  augment /te:te/te:tunnels/te:tunnel/te:primary-paths
            /te:primary-path/te:primary-reverse-path
            /te:path-out-segment/te:label-restrictions
            /te:label-restriction:
    +--rw grid-type?   identityref
    +--rw priority?    uint8
  augment /te:te/te:tunnels/te:tunnel/te:secondary-paths
            /te:secondary-path/te:path-in-segment
            /te:label-restrictions/te:label-restriction:
    +--rw grid-type?   identityref
    +--rw priority?    uint8
  augment /te:te/te:tunnels/te:tunnel/te:secondary-paths
            /te:secondary-path/te:path-out-segment
            /te:label-restrictions/te:label-restriction:
    +--rw grid-type?   identityref
    +--rw priority?    uint8
  augment /te:te/te:tunnels/te:tunnel/te:secondary-reverse-paths
            /te:secondary-reverse-path/te:path-in-segment
            /te:label-restrictions/te:label-restriction:
    +--rw grid-type?   identityref
    +--rw priority?    uint8
  augment /te:te/te:tunnels/te:tunnel/te:secondary-reverse-paths
            /te:secondary-reverse-path/te:path-out-segment
            /te:label-restrictions/te:label-restriction:
    +--rw grid-type?   identityref
    +--rw priority?    uint8
  augment /te:te/te:globals/te:named-path-constraints
            /te:named-path-constraint
            /te:explicit-route-objects-always
            /te:route-object-exclude-always/te:type/te:label
            /te:label-hop/te:te-label/te:technology:
    +--:(wson)
       +--rw (grid-type)?
          +--:(dwdm)
          |  +--rw (single-or-super-channel)?
          |     +--:(single)
          |     |  +--rw dwdm-n?              l0-types:dwdm-n
          |     +--:(super)
          |        +--rw subcarrier-dwdm-n*   l0-types:dwdm-n
          +--:(cwdm)
             +--rw cwdm-n?                    l0-types:cwdm-n
  augment /te:te/te:globals/te:named-path-constraints
            /te:named-path-constraint
            /te:explicit-route-objects-always
            /te:route-object-include-exclude/te:type/te:label
            /te:label-hop/te:te-label/te:technology:
    +--:(wson)
       +--rw (grid-type)?
          +--:(dwdm)
          |  +--rw (single-or-super-channel)?
          |     +--:(single)
          |     |  +--rw dwdm-n?              l0-types:dwdm-n
          |     +--:(super)
          |        +--rw subcarrier-dwdm-n*   l0-types:dwdm-n
          +--:(cwdm)
             +--rw cwdm-n?                    l0-types:cwdm-n
  augment /te:te/te:globals/te:named-path-constraints
            /te:named-path-constraint/te:path-in-segment
            /te:label-restrictions/te:label-restriction
            /te:label-start/te:te-label/te:technology:
    +--:(wson)
       +--rw (grid-type)?
          +--:(dwdm)
          |  +--rw dwdm-n?   l0-types:dwdm-n
          +--:(cwdm)
             +--rw cwdm-n?   l0-types:cwdm-n
  augment /te:te/te:globals/te:named-path-constraints
            /te:named-path-constraint/te:path-in-segment
            /te:label-restrictions/te:label-restriction/te:label-end
            /te:te-label/te:technology:
    +--:(wson)
       +--rw (grid-type)?
          +--:(dwdm)
          |  +--rw dwdm-n?   l0-types:dwdm-n
          +--:(cwdm)
             +--rw cwdm-n?   l0-types:cwdm-n
  augment /te:te/te:globals/te:named-path-constraints
            /te:named-path-constraint/te:path-in-segment
            /te:label-restrictions/te:label-restriction/te:label-step
            /te:technology:
    +--:(wson)
       +--rw (l0-grid-type)?
          +--:(dwdm)
          |  +--rw wson-dwdm-channel-spacing?   identityref
          +--:(cwdm)
             +--rw wson-cwdm-channel-spacing?   identityref
  augment /te:te/te:globals/te:named-path-constraints
            /te:named-path-constraint/te:path-out-segment
            /te:label-restrictions/te:label-restriction
            /te:label-start/te:te-label/te:technology:
    +--:(wson)
       +--rw (grid-type)?
          +--:(dwdm)
          |  +--rw dwdm-n?   l0-types:dwdm-n
          +--:(cwdm)
             +--rw cwdm-n?   l0-types:cwdm-n
  augment /te:te/te:globals/te:named-path-constraints
            /te:named-path-constraint/te:path-out-segment
            /te:label-restrictions/te:label-restriction/te:label-end
            /te:te-label/te:technology:
    +--:(wson)
       +--rw (grid-type)?
          +--:(dwdm)
          |  +--rw dwdm-n?   l0-types:dwdm-n
          +--:(cwdm)
             +--rw cwdm-n?   l0-types:cwdm-n
  augment /te:te/te:globals/te:named-path-constraints
            /te:named-path-constraint/te:path-out-segment
            /te:label-restrictions/te:label-restriction/te:label-step
            /te:technology:
    +--:(wson)
       +--rw (l0-grid-type)?
          +--:(dwdm)
          |  +--rw wson-dwdm-channel-spacing?   identityref
          +--:(cwdm)
             +--rw wson-cwdm-channel-spacing?   identityref
  augment /te:te/te:tunnels/te:tunnel/te:primary-paths
            /te:primary-path/te:optimizations/te:algorithm/te:metric
            /te:optimization-metric/te:explicit-route-exclude-objects
            /te:route-object-exclude-object/te:type/te:label
            /te:label-hop/te:te-label/te:technology:
    +--:(wson)
       +--rw (grid-type)?
          +--:(dwdm)
          |  +--rw (single-or-super-channel)?
          |     +--:(single)
          |     |  +--rw dwdm-n?              l0-types:dwdm-n
          |     +--:(super)
          |        +--rw subcarrier-dwdm-n*   l0-types:dwdm-n
          +--:(cwdm)
             +--rw cwdm-n?                    l0-types:cwdm-n
  augment /te:te/te:tunnels/te:tunnel/te:primary-paths
            /te:primary-path/te:optimizations/te:algorithm/te:metric
            /te:optimization-metric/te:explicit-route-include-objects
            /te:route-object-include-object/te:type/te:label
            /te:label-hop/te:te-label/te:technology:
    +--:(wson)
       +--rw (grid-type)?
          +--:(dwdm)
          |  +--rw (single-or-super-channel)?
          |     +--:(single)
          |     |  +--rw dwdm-n?              l0-types:dwdm-n
          |     +--:(super)
          |        +--rw subcarrier-dwdm-n*   l0-types:dwdm-n
          +--:(cwdm)
             +--rw cwdm-n?                    l0-types:cwdm-n
  augment /te:te/te:tunnels/te:tunnel/te:primary-paths
            /te:primary-path/te:explicit-route-objects-always
            /te:route-object-exclude-always/te:type/te:label
            /te:label-hop/te:te-label/te:technology:
    +--:(wson)
       +--rw (grid-type)?
          +--:(dwdm)
          |  +--rw (single-or-super-channel)?
          |     +--:(single)
          |     |  +--rw dwdm-n?              l0-types:dwdm-n
          |     +--:(super)
          |        +--rw subcarrier-dwdm-n*   l0-types:dwdm-n
          +--:(cwdm)
             +--rw cwdm-n?                    l0-types:cwdm-n
  augment /te:te/te:tunnels/te:tunnel/te:primary-paths
            /te:primary-path/te:explicit-route-objects-always
            /te:route-object-include-exclude/te:type/te:label
            /te:label-hop/te:te-label/te:technology:
    +--:(wson)
       +--rw (grid-type)?
          +--:(dwdm)
          |  +--rw (single-or-super-channel)?
          |     +--:(single)
          |     |  +--rw dwdm-n?              l0-types:dwdm-n
          |     +--:(super)
          |        +--rw subcarrier-dwdm-n*   l0-types:dwdm-n
          +--:(cwdm)
             +--rw cwdm-n?                    l0-types:cwdm-n
  augment /te:te/te:tunnels/te:tunnel/te:primary-paths
            /te:primary-path/te:path-in-segment/te:label-restrictions
            /te:label-restriction/te:label-start/te:te-label
            /te:technology:
    +--:(wson)
       +--rw (grid-type)?
          +--:(dwdm)
          |  +--rw dwdm-n?   l0-types:dwdm-n
          +--:(cwdm)
             +--rw cwdm-n?   l0-types:cwdm-n
  augment /te:te/te:tunnels/te:tunnel/te:primary-paths
            /te:primary-path/te:path-in-segment/te:label-restrictions
            /te:label-restriction/te:label-end/te:te-label
            /te:technology:
    +--:(wson)
       +--rw (grid-type)?
          +--:(dwdm)
          |  +--rw dwdm-n?   l0-types:dwdm-n
          +--:(cwdm)
             +--rw cwdm-n?   l0-types:cwdm-n
  augment /te:te/te:tunnels/te:tunnel/te:primary-paths
            /te:primary-path/te:path-in-segment/te:label-restrictions
            /te:label-restriction/te:label-step/te:technology:
    +--:(wson)
       +--rw (l0-grid-type)?
          +--:(dwdm)
          |  +--rw wson-dwdm-channel-spacing?   identityref
          +--:(cwdm)
             +--rw wson-cwdm-channel-spacing?   identityref
  augment /te:te/te:tunnels/te:tunnel/te:primary-paths
            /te:primary-path/te:path-out-segment
            /te:label-restrictions/te:label-restriction
            /te:label-start/te:te-label/te:technology:
    +--:(wson)
       +--rw (grid-type)?
          +--:(dwdm)
          |  +--rw dwdm-n?   l0-types:dwdm-n
          +--:(cwdm)
             +--rw cwdm-n?   l0-types:cwdm-n
  augment /te:te/te:tunnels/te:tunnel/te:primary-paths
            /te:primary-path/te:path-out-segment
            /te:label-restrictions/te:label-restriction/te:label-end
            /te:te-label/te:technology:
    +--:(wson)
       +--rw (grid-type)?
          +--:(dwdm)
          |  +--rw dwdm-n?   l0-types:dwdm-n
          +--:(cwdm)
             +--rw cwdm-n?   l0-types:cwdm-n
  augment /te:te/te:tunnels/te:tunnel/te:primary-paths
            /te:primary-path/te:path-out-segment
            /te:label-restrictions/te:label-restriction/te:label-step
            /te:technology:
    +--:(wson)
       +--rw (l0-grid-type)?
          +--:(dwdm)
          |  +--rw wson-dwdm-channel-spacing?   identityref
          +--:(cwdm)
             +--rw wson-cwdm-channel-spacing?   identityref
  augment /te:te/te:tunnels/te:tunnel/te:primary-paths
            /te:primary-path/te:computed-paths-properties
            /te:computed-path-properties/te:path-properties
            /te:path-route-objects/te:path-route-object/te:type
            /te:label/te:label-hop/te:te-label/te: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
  augment /te:te/te:tunnels/te:tunnel/te:primary-paths
            /te:primary-path/te:primary-reverse-path/te:optimizations
            /te:algorithm/te:metric/te:optimization-metric
            /te:explicit-route-exclude-objects
            /te:route-object-exclude-object/te:type/te:label
            /te:label-hop/te:te-label/te:technology:
    +--:(wson)
       +--rw (grid-type)?
          +--:(dwdm)
          |  +--rw (single-or-super-channel)?
          |     +--:(single)
          |     |  +--rw dwdm-n?              l0-types:dwdm-n
          |     +--:(super)
          |        +--rw subcarrier-dwdm-n*   l0-types:dwdm-n
          +--:(cwdm)
             +--rw cwdm-n?                    l0-types:cwdm-n
  augment /te:te/te:tunnels/te:tunnel/te:primary-paths
            /te:primary-path/te:primary-reverse-path/te:optimizations
            /te:algorithm/te:metric/te:optimization-metric
            /te:explicit-route-include-objects
            /te:route-object-include-object/te:type/te:label
            /te:label-hop/te:te-label/te:technology:
    +--:(wson)
       +--rw (grid-type)?
          +--:(dwdm)
          |  +--rw (single-or-super-channel)?
          |     +--:(single)
          |     |  +--rw dwdm-n?              l0-types:dwdm-n
          |     +--:(super)
          |        +--rw subcarrier-dwdm-n*   l0-types:dwdm-n
          +--:(cwdm)
             +--rw cwdm-n?                    l0-types:cwdm-n
  augment /te:te/te:tunnels/te:tunnel/te:primary-paths
            /te:primary-path/te:primary-reverse-path
            /te:explicit-route-objects-always
            /te:route-object-exclude-always/te:type/te:label
            /te:label-hop/te:te-label/te:technology:
    +--:(wson)
       +--rw (grid-type)?
          +--:(dwdm)
          |  +--rw (single-or-super-channel)?
          |     +--:(single)
          |     |  +--rw dwdm-n?              l0-types:dwdm-n
          |     +--:(super)
          |        +--rw subcarrier-dwdm-n*   l0-types:dwdm-n
          +--:(cwdm)
             +--rw cwdm-n?                    l0-types:cwdm-n
  augment /te:te/te:tunnels/te:tunnel/te:primary-paths
            /te:primary-path/te:primary-reverse-path
            /te:explicit-route-objects-always
            /te:route-object-include-exclude/te:type/te:label
            /te:label-hop/te:te-label/te:technology:
    +--:(wson)
       +--rw (grid-type)?
          +--:(dwdm)
          |  +--rw (single-or-super-channel)?
          |     +--:(single)
          |     |  +--rw dwdm-n?              l0-types:dwdm-n
          |     +--:(super)
          |        +--rw subcarrier-dwdm-n*   l0-types:dwdm-n
          +--:(cwdm)
             +--rw cwdm-n?                    l0-types:cwdm-n
  augment /te:te/te:tunnels/te:tunnel/te:primary-paths
            /te:primary-path/te:primary-reverse-path
            /te:path-in-segment/te:label-restrictions
            /te:label-restriction/te:label-start/te:te-label
            /te:technology:
    +--:(wson)
       +--rw (grid-type)?
          +--:(dwdm)
          |  +--rw dwdm-n?   l0-types:dwdm-n
          +--:(cwdm)
             +--rw cwdm-n?   l0-types:cwdm-n
  augment /te:te/te:tunnels/te:tunnel/te:primary-paths
            /te:primary-path/te:primary-reverse-path
            /te:path-in-segment/te:label-restrictions
            /te:label-restriction/te:label-end/te:te-label
            /te:technology:
    +--:(wson)
       +--rw (grid-type)?
          +--:(dwdm)
          |  +--rw dwdm-n?   l0-types:dwdm-n
          +--:(cwdm)
             +--rw cwdm-n?   l0-types:cwdm-n
  augment /te:te/te:tunnels/te:tunnel/te:primary-paths
            /te:primary-path/te:primary-reverse-path
            /te:path-in-segment/te:label-restrictions
            /te:label-restriction/te:label-step/te:technology:
    +--:(wson)
       +--rw (l0-grid-type)?
          +--:(dwdm)
          |  +--rw wson-dwdm-channel-spacing?   identityref
          +--:(cwdm)
             +--rw wson-cwdm-channel-spacing?   identityref
  augment /te:te/te:tunnels/te:tunnel/te:primary-paths
            /te:primary-path/te:primary-reverse-path
            /te:path-out-segment/te:label-restrictions
            /te:label-restriction/te:label-start/te:te-label
            /te:technology:
    +--:(wson)
       +--rw (grid-type)?
          +--:(dwdm)
          |  +--rw dwdm-n?   l0-types:dwdm-n
          +--:(cwdm)
             +--rw cwdm-n?   l0-types:cwdm-n
  augment /te:te/te:tunnels/te:tunnel/te:primary-paths
            /te:primary-path/te:primary-reverse-path
            /te:path-out-segment/te:label-restrictions
            /te:label-restriction/te:label-end/te:te-label
            /te:technology:
    +--:(wson)
       +--rw (grid-type)?
          +--:(dwdm)
          |  +--rw dwdm-n?   l0-types:dwdm-n
          +--:(cwdm)
             +--rw cwdm-n?   l0-types:cwdm-n
  augment /te:te/te:tunnels/te:tunnel/te:primary-paths
            /te:primary-path/te:primary-reverse-path
            /te:path-out-segment/te:label-restrictions
            /te:label-restriction/te:label-step/te:technology:
    +--:(wson)
       +--rw (l0-grid-type)?
          +--:(dwdm)
          |  +--rw wson-dwdm-channel-spacing?   identityref
          +--:(cwdm)
             +--rw wson-cwdm-channel-spacing?   identityref
  augment /te:te/te:tunnels/te:tunnel/te:primary-paths
            /te:primary-path/te:primary-reverse-path
            /te:computed-paths-properties/te:computed-path-properties
            /te:path-properties/te:path-route-objects
            /te:path-route-object/te:type/te:label/te:label-hop
            /te:te-label/te: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
  augment /te:te/te:tunnels/te:tunnel/te:secondary-paths
            /te:secondary-path/te:optimizations/te:algorithm
            /te:metric/te:optimization-metric
            /te:explicit-route-exclude-objects
            /te:route-object-exclude-object/te:type/te:label
            /te:label-hop/te:te-label/te:technology:
    +--:(wson)
       +--rw (grid-type)?
          +--:(dwdm)
          |  +--rw (single-or-super-channel)?
          |     +--:(single)
          |     |  +--rw dwdm-n?              l0-types:dwdm-n
          |     +--:(super)
          |        +--rw subcarrier-dwdm-n*   l0-types:dwdm-n
          +--:(cwdm)
             +--rw cwdm-n?                    l0-types:cwdm-n
  augment /te:te/te:tunnels/te:tunnel/te:secondary-paths
            /te:secondary-path/te:optimizations/te:algorithm
            /te:metric/te:optimization-metric
            /te:explicit-route-include-objects
            /te:route-object-include-object/te:type/te:label
            /te:label-hop/te:te-label/te:technology:
    +--:(wson)
       +--rw (grid-type)?
          +--:(dwdm)
          |  +--rw (single-or-super-channel)?
          |     +--:(single)
          |     |  +--rw dwdm-n?              l0-types:dwdm-n
          |     +--:(super)
          |        +--rw subcarrier-dwdm-n*   l0-types:dwdm-n
          +--:(cwdm)
             +--rw cwdm-n?                    l0-types:cwdm-n
  augment /te:te/te:tunnels/te:tunnel/te:secondary-paths
            /te:secondary-path/te:explicit-route-objects-always
            /te:route-object-exclude-always/te:type/te:label
            /te:label-hop/te:te-label/te:technology:
    +--:(wson)
       +--rw (grid-type)?
          +--:(dwdm)
          |  +--rw (single-or-super-channel)?
          |     +--:(single)
          |     |  +--rw dwdm-n?              l0-types:dwdm-n
          |     +--:(super)
          |        +--rw subcarrier-dwdm-n*   l0-types:dwdm-n
          +--:(cwdm)
             +--rw cwdm-n?                    l0-types:cwdm-n
  augment /te:te/te:tunnels/te:tunnel/te:secondary-paths
            /te:secondary-path/te:explicit-route-objects-always
            /te:route-object-include-exclude/te:type/te:label
            /te:label-hop/te:te-label/te:technology:
    +--:(wson)
       +--rw (grid-type)?
          +--:(dwdm)
          |  +--rw (single-or-super-channel)?
          |     +--:(single)
          |     |  +--rw dwdm-n?              l0-types:dwdm-n
          |     +--:(super)
          |        +--rw subcarrier-dwdm-n*   l0-types:dwdm-n
          +--:(cwdm)
             +--rw cwdm-n?                    l0-types:cwdm-n
  augment /te:te/te:tunnels/te:tunnel/te:secondary-paths
            /te:secondary-path/te:path-in-segment
            /te:label-restrictions/te:label-restriction
            /te:label-start/te:te-label/te:technology:
    +--:(wson)
       +--rw (grid-type)?
          +--:(dwdm)
          |  +--rw dwdm-n?   l0-types:dwdm-n
          +--:(cwdm)
             +--rw cwdm-n?   l0-types:cwdm-n
  augment /te:te/te:tunnels/te:tunnel/te:secondary-paths
            /te:secondary-path/te:path-in-segment
            /te:label-restrictions/te:label-restriction/te:label-end
            /te:te-label/te:technology:
    +--:(wson)
       +--rw (grid-type)?
          +--:(dwdm)
          |  +--rw dwdm-n?   l0-types:dwdm-n
          +--:(cwdm)
             +--rw cwdm-n?   l0-types:cwdm-n
  augment /te:te/te:tunnels/te:tunnel/te:secondary-paths
            /te:secondary-path/te:path-in-segment
            /te:label-restrictions/te:label-restriction/te:label-step
            /te:technology:
    +--:(wson)
       +--rw (l0-grid-type)?
          +--:(dwdm)
          |  +--rw wson-dwdm-channel-spacing?   identityref
          +--:(cwdm)
             +--rw wson-cwdm-channel-spacing?   identityref
  augment /te:te/te:tunnels/te:tunnel/te:secondary-paths
            /te:secondary-path/te:path-out-segment
            /te:label-restrictions/te:label-restriction
            /te:label-start/te:te-label/te:technology:
    +--:(wson)
       +--rw (grid-type)?
          +--:(dwdm)
          |  +--rw dwdm-n?   l0-types:dwdm-n
          +--:(cwdm)
             +--rw cwdm-n?   l0-types:cwdm-n
  augment /te:te/te:tunnels/te:tunnel/te:secondary-paths
            /te:secondary-path/te:path-out-segment
            /te:label-restrictions/te:label-restriction/te:label-end
            /te:te-label/te:technology:
    +--:(wson)
       +--rw (grid-type)?
          +--:(dwdm)
          |  +--rw dwdm-n?   l0-types:dwdm-n
          +--:(cwdm)
             +--rw cwdm-n?   l0-types:cwdm-n
  augment /te:te/te:tunnels/te:tunnel/te:secondary-paths
            /te:secondary-path/te:path-out-segment
            /te:label-restrictions/te:label-restriction/te:label-step
            /te:technology:
    +--:(wson)
       +--rw (l0-grid-type)?
          +--:(dwdm)
          |  +--rw wson-dwdm-channel-spacing?   identityref
          +--:(cwdm)
             +--rw wson-cwdm-channel-spacing?   identityref
  augment /te:te/te:tunnels/te:tunnel/te:secondary-paths
            /te:secondary-path/te:computed-paths-properties
            /te:computed-path-properties/te:path-properties
            /te:path-route-objects/te:path-route-object/te:type
            /te:label/te:label-hop/te:te-label/te: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
  augment /te:te/te:tunnels/te:tunnel/te:secondary-reverse-paths
            /te:secondary-reverse-path/te:optimizations/te:algorithm
            /te:metric/te:optimization-metric
            /te:explicit-route-exclude-objects
            /te:route-object-exclude-object/te:type/te:label
            /te:label-hop/te:te-label/te:technology:
    +--:(wson)
       +--rw (grid-type)?
          +--:(dwdm)
          |  +--rw (single-or-super-channel)?
          |     +--:(single)
          |     |  +--rw dwdm-n?              l0-types:dwdm-n
          |     +--:(super)
          |        +--rw subcarrier-dwdm-n*   l0-types:dwdm-n
          +--:(cwdm)
             +--rw cwdm-n?                    l0-types:cwdm-n
  augment /te:te/te:tunnels/te:tunnel/te:secondary-reverse-paths
            /te:secondary-reverse-path/te:optimizations/te:algorithm
            /te:metric/te:optimization-metric
            /te:explicit-route-include-objects
            /te:route-object-include-object/te:type/te:label
            /te:label-hop/te:te-label/te:technology:
    +--:(wson)
       +--rw (grid-type)?
          +--:(dwdm)
          |  +--rw (single-or-super-channel)?
          |     +--:(single)
          |     |  +--rw dwdm-n?              l0-types:dwdm-n
          |     +--:(super)
          |        +--rw subcarrier-dwdm-n*   l0-types:dwdm-n
          +--:(cwdm)
             +--rw cwdm-n?                    l0-types:cwdm-n
  augment /te:te/te:tunnels/te:tunnel/te:secondary-reverse-paths
            /te:secondary-reverse-path
            /te:explicit-route-objects-always
            /te:route-object-exclude-always/te:type/te:label
            /te:label-hop/te:te-label/te:technology:
    +--:(wson)
       +--rw (grid-type)?
          +--:(dwdm)
          |  +--rw (single-or-super-channel)?
          |     +--:(single)
          |     |  +--rw dwdm-n?              l0-types:dwdm-n
          |     +--:(super)
          |        +--rw subcarrier-dwdm-n*   l0-types:dwdm-n
          +--:(cwdm)
             +--rw cwdm-n?                    l0-types:cwdm-n
  augment /te:te/te:tunnels/te:tunnel/te:secondary-reverse-paths
            /te:secondary-reverse-path
            /te:explicit-route-objects-always
            /te:route-object-include-exclude/te:type/te:label
            /te:label-hop/te:te-label/te:technology:
    +--:(wson)
       +--rw (grid-type)?
          +--:(dwdm)
          |  +--rw (single-or-super-channel)?
          |     +--:(single)
          |     |  +--rw dwdm-n?              l0-types:dwdm-n
          |     +--:(super)
          |        +--rw subcarrier-dwdm-n*   l0-types:dwdm-n
          +--:(cwdm)
             +--rw cwdm-n?                    l0-types:cwdm-n
  augment /te:te/te:tunnels/te:tunnel/te:secondary-reverse-paths
            /te:secondary-reverse-path/te:path-in-segment
            /te:label-restrictions/te:label-restriction
            /te:label-start/te:te-label/te:technology:
    +--:(wson)
       +--rw (grid-type)?
          +--:(dwdm)
          |  +--rw dwdm-n?   l0-types:dwdm-n
          +--:(cwdm)
             +--rw cwdm-n?   l0-types:cwdm-n
  augment /te:te/te:tunnels/te:tunnel/te:secondary-reverse-paths
            /te:secondary-reverse-path/te:path-in-segment
            /te:label-restrictions/te:label-restriction/te:label-end
            /te:te-label/te:technology:
    +--:(wson)
       +--rw (grid-type)?
          +--:(dwdm)
          |  +--rw dwdm-n?   l0-types:dwdm-n
          +--:(cwdm)
             +--rw cwdm-n?   l0-types:cwdm-n
  augment /te:te/te:tunnels/te:tunnel/te:secondary-reverse-paths
            /te:secondary-reverse-path/te:path-in-segment
            /te:label-restrictions/te:label-restriction/te:label-step
            /te:technology:
    +--:(wson)
       +--rw (l0-grid-type)?
          +--:(dwdm)
          |  +--rw wson-dwdm-channel-spacing?   identityref
          +--:(cwdm)
             +--rw wson-cwdm-channel-spacing?   identityref
  augment /te:te/te:tunnels/te:tunnel/te:secondary-reverse-paths
            /te:secondary-reverse-path/te:path-out-segment
            /te:label-restrictions/te:label-restriction
            /te:label-start/te:te-label/te:technology:
    +--:(wson)
       +--rw (grid-type)?
          +--:(dwdm)
          |  +--rw dwdm-n?   l0-types:dwdm-n
          +--:(cwdm)
             +--rw cwdm-n?   l0-types:cwdm-n
  augment /te:te/te:tunnels/te:tunnel/te:secondary-reverse-paths
            /te:secondary-reverse-path/te:path-out-segment
            /te:label-restrictions/te:label-restriction/te:label-end
            /te:te-label/te:technology:
    +--:(wson)
       +--rw (grid-type)?
          +--:(dwdm)
          |  +--rw dwdm-n?   l0-types:dwdm-n
          +--:(cwdm)
             +--rw cwdm-n?   l0-types:cwdm-n
  augment /te:te/te:tunnels/te:tunnel/te:secondary-reverse-paths
            /te:secondary-reverse-path/te:path-out-segment
            /te:label-restrictions/te:label-restriction/te:label-step
            /te:technology:
    +--:(wson)
       +--rw (l0-grid-type)?
          +--:(dwdm)
          |  +--rw wson-dwdm-channel-spacing?   identityref
          +--:(cwdm)
             +--rw wson-cwdm-channel-spacing?   identityref
  augment /te:te/te:tunnels/te:tunnel/te:secondary-reverse-paths
            /te:secondary-reverse-path/te:computed-paths-properties
            /te:computed-path-properties/te:path-properties
            /te:path-route-objects/te:path-route-object/te:type
            /te:label/te:label-hop/te:te-label/te: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
  augment /te:te/te:lsps/te:lsp/te:lsp-record-route-information
            /te:lsp-record-route-information/te:type/te:label
            /te:label-hop/te:te-label/te: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

WSON Tunnel YANG Code

<CODE BEGINS>file "ietf-wson-tunnel@2021-10-19.yang"
module ietf-wson-tunnel {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-wson-tunnel";
  prefix "wson-tnl";

  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:   Young Lee
               <leeyoung.tx@gmail.com>

     Editor:   Haomian Zheng
               <zhenghaomian@huawei.com>

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

     Editor:   Victor Lopez
               <victor.lopez@nokia.com>

     Editor:   Daniel King
               <d.king@lancaster.ac.uk>

     Editor:   Bin Yeong Yoon
               <byyun@etri.re.kr>

     Editor:   Ricard Vilalta
               <ricard.vilalta@cttc.es>";

  description
    "This module defines a model for WSON Tunnel Services.

    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-19" {
    description
      "Initial Revision";
    reference
      "RFC XXXX: A Yang Data Model for WSON Tunnel";
    // RFC Ed.: replace XXXX with actual RFC number, update date
    // information and remove this note
  }

 /*
  * Data nodes
  */

  augment "/te:te/te:tunnels/te:tunnel" {
    description
      "Augment with additional parameters required for flexi-grid
       media channel.";
    uses l0-types-ext:l0-tunnel-attributes;
  }

  /*
   * Augment TE label range information
   */

  augment "/te:te/te:globals/te:named-path-constraints/"
        + "te:named-path-constraint/te:path-in-segment/"
        + "te:label-restrictions/te:label-restriction" {
    description
      "Augment TE label range information for the ingress segment
      of the named path constraint.";
    uses l0-types:l0-label-range-info;
  }

  augment "/te:te/te:globals/te:named-path-constraints/"
        + "te:named-path-constraint/te:path-out-segment/"
        + "te:label-restrictions/"
        + "te:label-restriction" {
    description
      "Augment TE label range information for the egress segment
      of the named path constraint.";
    uses l0-types:l0-label-range-info;
  }

  augment "/te:te/te:tunnels/te:tunnel/"
        + "te:primary-paths/te:primary-path/"
        + "te:path-in-segment/te:label-restrictions/"
        + "te:label-restriction" {
    description
      "Augment TE label range information for the ingress segment
      of the primay path.";
    uses l0-types:l0-label-range-info;
  }

  augment "/te:te/te:tunnels/te:tunnel/"
        + "te:primary-paths/te:primary-path/"
        + "te:path-out-segment/te:label-restrictions/"
        + "te:label-restriction" {
    description
      "Augment TE label range information for the egress segment
      of the primay path.";
    uses l0-types:l0-label-range-info;
  }

  augment "/te:te/te:tunnels/te:tunnel/"
        + "te:primary-paths/te:primary-path/"
        + "te:primary-reverse-path/"
        + "te:path-in-segment/te:label-restrictions/"
        + "te:label-restriction" {
    description
      "Augment TE label range information for the ingress segment
      of the primay reverse path.";
    uses l0-types:l0-label-range-info;
  }

  augment "/te:te/te:tunnels/te:tunnel/"
        + "te:primary-paths/te:primary-path/"
        + "te:primary-reverse-path/"
        + "te:path-out-segment/te:label-restrictions/"
        + "te:label-restriction" {
    description
      "Augment TE label range information for the egress segment
      of the primay reverse path.";
    uses l0-types:l0-label-range-info;
  }

  augment "/te:te/te:tunnels/te:tunnel/"
        + "te:secondary-paths/te:secondary-path/"
        + "te:path-in-segment/te:label-restrictions/"
        + "te:label-restriction" {
    description
      "Augment TE label range information for the ingress segment
      of the secondary path.";
    uses l0-types:l0-label-range-info;
  }

  augment "/te:te/te:tunnels/te:tunnel/"
        + "te:secondary-paths/te:secondary-path/"
        + "te:path-out-segment/te:label-restrictions/"
        + "te:label-restriction" {
    description
      "Augment TE label range information for the egress segment
      of the secondary path.";
    uses l0-types:l0-label-range-info;
  }

  augment "/te:te/te:tunnels/te:tunnel/"
        + "te:secondary-reverse-paths/te:secondary-reverse-path/"
        + "te:path-in-segment/te:label-restrictions/"
        + "te:label-restriction" {
    description
      "Augment TE label range information for the ingress segment
      of the secondary reverse path.";
    uses l0-types:l0-label-range-info;
  }

  augment "/te:te/te:tunnels/te:tunnel/"
        + "te:secondary-reverse-paths/te:secondary-reverse-path/"
        + "te:path-out-segment/te:label-restrictions/"
        + "te:label-restriction" {
    description
      "Augment TE label range information for the egress segment
      of the secondary reverse path.";
    uses l0-types:l0-label-range-info;
  }

  /*
   * Augment TE label.
   */

  augment "/te:te/te:globals/te:named-path-constraints/"
        + "te:named-path-constraint/"
        + "te:explicit-route-objects-always/"
        + "te:route-object-exclude-always/te:type/te:label/"
        + "te:label-hop/te:te-label/te:technology" {
    description
      "Augment TE label hop for the explicit route objects always
      excluded by the path computation with the named path
      constraint.";
    case wson {
      uses l0-types:wson-label-hop;
    }
  }

  augment "/te:te/te:globals/te:named-path-constraints/"
        + "te:named-path-constraint/"
        + "te:explicit-route-objects-always/"
        + "te:route-object-include-exclude/te:type/te:label/"
        + "te:label-hop/te:te-label/te:technology" {
    description
      "Augment TE label hop for the explicit route objects included
      or excluded by the path computation with the named path
      constraint.";
    case wson {
      uses l0-types:wson-label-hop;
    }
  }

  augment "/te:te/te:globals/te:named-path-constraints/"
        + "te:named-path-constraint/te:path-in-segment/"
        + "te:label-restrictions/"
        + "te:label-restriction/te:label-start/"
        + "te:te-label/te:technology" {
    description
      "Augment TE label range start for the ingress segment
      of the named path constraint.";
    case wson {
      uses l0-types:wson-label-start-end;
    }
  }

  augment "/te:te/te:globals/te:named-path-constraints/"
        + "te:named-path-constraint/te:path-in-segment/"
        + "te:label-restrictions/"
        + "te:label-restriction/te:label-end/"
        + "te:te-label/te:technology" {
    description
      "Augment TE label range end for the ingress segment
      of the named path constraint.";
    case wson {
      uses l0-types:wson-label-start-end;
    }
  }

  augment "/te:te/te:globals/te:named-path-constraints/"
        + "te:named-path-constraint/te:path-in-segment/"
        + "te:label-restrictions/te:label-restriction/"
        + "te:label-step/te:technology" {
    description
      "Augment TE label range step for the ingress segment
      of the named path constraint.";
    case wson {
      uses l0-types:wson-label-step;
    }
  }

  augment "/te:te/te:globals/te:named-path-constraints/"
        + "te:named-path-constraint/te:path-out-segment/"
        + "te:label-restrictions/"
        + "te:label-restriction/te:label-start/"
        + "te:te-label/te:technology" {
    description
      "Augment TE label range start for the egress segment
      of the named path constraint.";
    case wson {
      uses l0-types:wson-label-start-end;
    }
  }

  augment "/te:te/te:globals/te:named-path-constraints/"
        + "te:named-path-constraint/te:path-out-segment/"
        + "te:label-restrictions/"
        + "te:label-restriction/te:label-end/"
        + "te:te-label/te:technology" {
    description
      "Augment TE label range end for the egress segment
      of the named path constraint.";
    case wson {
      uses l0-types:wson-label-start-end;
    }
  }

  augment "/te:te/te:globals/te:named-path-constraints/"
        + "te:named-path-constraint/te:path-out-segment/"
        + "te:label-restrictions/te:label-restriction/"
        + "te:label-step/te:technology" {
    description
      "Augment TE label range step for the egress segment
      of the named path constraint.";
    case wson {
      uses l0-types:wson-label-step;
    }
  }

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

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

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

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

  augment "/te:te/te:tunnels/te:tunnel/"
        + "te:primary-paths/te:primary-path/"
        + "te:path-in-segment/te:label-restrictions/"
        + "te:label-restriction/te:label-start/"
        + "te:te-label/te:technology" {
    description
      "Augment TE label range start for the ingress segment
      of the primay path.";
    case wson {
      uses l0-types:wson-label-start-end;
    }
  }

  augment "/te:te/te:tunnels/te:tunnel/"
        + "te:primary-paths/te:primary-path/"
        + "te:path-in-segment/te:label-restrictions/"
        + "te:label-restriction/te:label-end/"
        + "te:te-label/te:technology" {
    description
      "Augment TE label range end for the ingress segment
      of the primay path.";
    case wson {
      uses l0-types:wson-label-start-end;
    }
  }

  augment "/te:te/te:tunnels/te:tunnel/"
        + "te:primary-paths/te:primary-path/"
        + "te:path-in-segment/te:label-restrictions/"
        + "te:label-restriction/te:label-step/te:technology" {
    description
      "Augment TE label range step for the ingress segment
      of the primay path.";
    case wson {
      uses l0-types:wson-label-step;
    }
  }

  augment "/te:te/te:tunnels/te:tunnel/"
        + "te:primary-paths/te:primary-path/"
        + "te:path-out-segment/te:label-restrictions/"
        + "te:label-restriction/te:label-start/"
        + "te:te-label/te:technology" {
    description
      "Augment TE label range start for the egress segment
      of the primay path.";
    case wson {
      uses l0-types:wson-label-start-end;
    }
  }

  augment "/te:te/te:tunnels/te:tunnel/"
        + "te:primary-paths/te:primary-path/"
        + "te:path-out-segment/te:label-restrictions/"
        + "te:label-restriction/te:label-end/"
        + "te:te-label/te:technology" {
    description
      "Augment TE label range end for the egress segment
      of the primay path.";
    case wson {
      uses l0-types:wson-label-start-end;
    }
  }

  augment "/te:te/te:tunnels/te:tunnel/"
        + "te:primary-paths/te:primary-path/"
        + "te:path-out-segment/te:label-restrictions/"
        + "te:label-restriction/te:label-step/te:technology" {
    description
      "Augment TE label range end for the egress segment
      of the primay path.";
    case wson {
      uses l0-types:wson-label-step;
    }
  }

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

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

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

  augment "/te:te/te:tunnels/te:tunnel/"
        + "te:primary-paths/te:primary-path/"
        + "te:primary-reverse-path/"
        + "te:explicit-route-objects-always/"
        + "te:route-object-exclude-always/"
        + "te:type/te:label/"
        + "te:label-hop/te:te-label/te:technology" {
    description
      "Augment TE label hop for the explicit route objects always
      excluded by the path computation of the primary reverse
      path.";
    case wson {
      uses l0-types:wson-label-hop;
    }
  }

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

  augment "/te:te/te:tunnels/te:tunnel/"
        + "te:primary-paths/te:primary-path/"
        + "te:primary-reverse-path/"
        + "te:path-in-segment/te:label-restrictions/"
        + "te:label-restriction/te:label-start/"
        + "te:te-label/te:technology" {
    description
      "Augment TE label range start for the ingress segment
      of the primay reverse path.";
    case wson {
      uses l0-types:wson-label-start-end;
    }
  }

  augment "/te:te/te:tunnels/te:tunnel/"
        + "te:primary-paths/te:primary-path/"
        + "te:primary-reverse-path/"
        + "te:path-in-segment/te:label-restrictions/"
        + "te:label-restriction/te:label-end/"
        + "te:te-label/te:technology" {
    description
      "Augment TE label range end for the ingress segment
      of the primay reverse path.";
    case wson {
      uses l0-types:wson-label-start-end;
    }
  }

  augment "/te:te/te:tunnels/te:tunnel/"
        + "te:primary-paths/te:primary-path/"
        + "te:primary-reverse-path/"
        + "te:path-in-segment/te:label-restrictions/"
        + "te:label-restriction/te:label-step/te:technology" {
    description
      "Augment TE label range step for the ingress segment
      of the primay reverse path.";
    case wson {
      uses l0-types:wson-label-step;
    }
  }

  augment "/te:te/te:tunnels/te:tunnel/"
        + "te:primary-paths/te:primary-path/"
        + "te:primary-reverse-path/"
        + "te:path-out-segment/te:label-restrictions/"
        + "te:label-restriction/te:label-start/"
        + "te:te-label/te:technology" {
    description
      "Augment TE label range start for the egress segment
      of the primay reverse path.";
    case wson {
      uses l0-types:wson-label-start-end;
    }
  }

  augment "/te:te/te:tunnels/te:tunnel/"
        + "te:primary-paths/te:primary-path/"
        + "te:primary-reverse-path/"
        + "te:path-out-segment/te:label-restrictions/"
        + "te:label-restriction/te:label-end/"
        + "te:te-label/te:technology" {
    description
      "Augment TE label range end for the egress segment
      of the primay reverse path.";
    case wson {
      uses l0-types:wson-label-start-end;
    }
  }

  augment "/te:te/te:tunnels/te:tunnel/"
        + "te:primary-paths/te:primary-path/"
        + "te:primary-reverse-path/"
        + "te:path-out-segment/te:label-restrictions/"
        + "te:label-restriction/te:label-step/te:technology" {
    description
      "Augment TE label range step for the egress segment
      of the primay reverse path.";
    case wson {
      uses l0-types:wson-label-step;
    }
  }

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

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

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

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

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

  augment "/te:te/te:tunnels/te:tunnel/"
        + "te:secondary-paths/te:secondary-path/"
        + "te:path-in-segment/te:label-restrictions/"
        + "te:label-restriction/te:label-start/"
        + "te:te-label/te:technology" {
    description
      "Augment TE label range start for the ingress segment
      of the secondary path.";
    case wson {
      uses l0-types:wson-label-start-end;
    }
  }

  augment "/te:te/te:tunnels/te:tunnel/"
        + "te:secondary-paths/te:secondary-path/"
        + "te:path-in-segment/te:label-restrictions/"
        + "te:label-restriction/te:label-end/"
        + "te:te-label/te:technology" {
    description
      "Augment TE label range end for the ingress segment
      of the secondary path.";
    case wson {
      uses l0-types:wson-label-start-end;
    }
  }
  augment "/te:te/te:tunnels/te:tunnel/"
        + "te:secondary-paths/te:secondary-path/"
        + "te:path-in-segment/te:label-restrictions/"
        + "te:label-restriction/te:label-step/te:technology" {
    description
      "Augment TE label range step for the ingress segment
      of the secondary path.";
    case wson {
      uses l0-types:wson-label-step;
    }
  }

  augment "/te:te/te:tunnels/te:tunnel/"
        + "te:secondary-paths/te:secondary-path/"
        + "te:path-out-segment/te:label-restrictions/"
        + "te:label-restriction/te:label-start/"
        + "te:te-label/te:technology" {
    description
      "Augment TE label range start for the egress segment
      of the secondary path.";
    case wson {
      uses l0-types:wson-label-start-end;
    }
  }

  augment "/te:te/te:tunnels/te:tunnel/"
        + "te:secondary-paths/te:secondary-path/"
        + "te:path-out-segment/te:label-restrictions/"
        + "te:label-restriction/te:label-end/"
        + "te:te-label/te:technology" {
    description
      "Augment TE label range end for the egress segment
      of the secondary path.";
    case wson {
      uses l0-types:wson-label-start-end;
    }
  }

  augment "/te:te/te:tunnels/te:tunnel/"
        + "te:secondary-paths/te:secondary-path/"
        + "te:path-out-segment/te:label-restrictions/"
        + "te:label-restriction/te:label-step/te:technology" {
    description
      "Augment TE label range step for the egress segment
      of the secondary path.";
    case wson {
      uses l0-types:wson-label-step;
    }
  }

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

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

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

  augment "/te:te/te:tunnels/te:tunnel/"
        + "te:secondary-reverse-paths/te:secondary-reverse-path/"
        + "te:explicit-route-objects-always/"
        + "te:route-object-exclude-always/te:type/te:label/"
        + "te:label-hop/te:te-label/te:technology" {
    description
      "Augment TE label hop for the explicit route objects always
      excluded by the path computation of the secondary reverse
      path.";
    case wson {
      uses l0-types:wson-label-hop;
    }
  }

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

  augment "/te:te/te:tunnels/te:tunnel/"
        + "te:secondary-reverse-paths/te:secondary-reverse-path/"
        + "te:path-in-segment/te:label-restrictions/"
        + "te:label-restriction/te:label-start/"
        + "te:te-label/te:technology" {
    description
      "Augment TE label range start for the ingress segment
      of the secondary reverse path.";
    case wson {
      uses l0-types:wson-label-start-end;
    }
  }

  augment "/te:te/te:tunnels/te:tunnel/"
        + "te:secondary-reverse-paths/te:secondary-reverse-path/"
        + "te:path-in-segment/te:label-restrictions/"
        + "te:label-restriction/te:label-end/"
        + "te:te-label/te:technology" {
    description
      "Augment TE label range end for the ingress segment
      of the secondary reverse path.";
    case wson {
      uses l0-types:wson-label-start-end;
    }
  }

  augment "/te:te/te:tunnels/te:tunnel/"
        + "te:secondary-reverse-paths/te:secondary-reverse-path/"
        + "te:path-in-segment/te:label-restrictions/"
        + "te:label-restriction/te:label-step/te:technology" {
    description
      "Augment TE label range step for the ingress segment
      of the secondary reverse path.";
    case wson {
      uses l0-types:wson-label-step;
    }
  }

  augment "/te:te/te:tunnels/te:tunnel/"
        + "te:secondary-reverse-paths/te:secondary-reverse-path/"
        + "te:path-out-segment/te:label-restrictions/"
        + "te:label-restriction/te:label-start/"
        + "te:te-label/te:technology" {
    description
      "Augment TE label range start for the egress segment
      of the secondary reverse path.";
    case wson {
      uses l0-types:wson-label-start-end;
    }
  }

  augment "/te:te/te:tunnels/te:tunnel/"
        + "te:secondary-reverse-paths/te:secondary-reverse-path/"
        + "te:path-out-segment/te:label-restrictions/"
        + "te:label-restriction/te:label-end/"
        + "te:te-label/te:technology" {
    description
      "Augment TE label range end for the egress segment
      of the secondary reverse path.";
    case wson {
      uses l0-types:wson-label-start-end;
    }
  }

  augment "/te:te/te:tunnels/te:tunnel/"
        + "te:secondary-reverse-paths/te:secondary-reverse-path/"
        + "te:path-out-segment/te:label-restrictions/"
        + "te:label-restriction/te:label-step/te:technology" {
    description
      "Augment TE label range step for the egress segment
      of the secondary reverse path.";
    case wson {
      uses l0-types:wson-label-step;
    }
  }

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

  augment "/te:te/te:lsps/"
        + "te:lsp/te:lsp-record-route-information/"
        + "te:lsp-record-route-information/te:type/te:label/"
        + "te:label-hop/te:te-label/te:technology" {
    description
      "Augment TE label hop for the record route of the LSP.";
    case wson {
      uses l0-types:wson-label-hop;
    }
  }
}

<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 protocol over Secure Shell (SSH) specification [RFC6242] describes a method for invoking and running NETCONF within a Secure Shell (SSH) session as an SSH subsystem. 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.
There are a number of data nodes defined in this YANG module that are writable/creatable/deletable (i.e., config true, which is the default). These 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. Considerations in Section 8 of [I-D.ietf-teas-yang-te] are also applicable to the module defined in this document.
Some of the readable data nodes in this YANG module may be considered sensitive or vulnerable in some network environments. It is thus important to control read access (e.g., via get, get-config, or notification) to these data nodes. Considerations in Section 8 of [I-D.ietf-teas-yang-te]are also applicable to the module defined in this document.
Finally, the YANG module described in this document augments the "ietf-te" YANG module [I-D.ietf-teas-yang-te] by adding data nodes. The security considerations for the subtrees described in those RFCs apply equally to the new data nodes that this module adds.

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-wson-tunnel
      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-wson-tunnel
   namespace:    urn:ietf:params:xml:ns:yang:ietf-wson-tunnel
   prefix:       wson-tnl
   reference:    RFC XXXX

Acknowledgements
TBD.

Contributors
Dhruv Dhody
Huawei Technologies
Email: dhruv.ietf@gmail.com
Italo Busi
Huawei Technologies
Email: Italo.Busi@huawei.com

Normative References

Informative References
[RFC7446]
[RFC7579]
[RFC7581]
[I-D.ietf-teas-yang-te]
[RFC7950]
[RFC6241]
[RFC8340]
[RFC9093]
[I-D.ietf-ccamp-layer1-types]
[I-D.ietf-teas-yang-path-computation]
[RFC8776]
[RFC9094]
[I-D.ietf-ccamp-transport-nbi-app-statement]
[I-D.ietf-teas-actn-yang]
[RFC8040]
[RFC8342]
[RFC6163]
[RFC6242]
[RFC8446]
[RFC8341]
[RFC3688]