module org-openroadm-otn-odu-interfaces {
  namespace "http://org/openroadm/otn-odu-interfaces";
  prefix org-openroadm-otn-odu-interfaces;

  import org-openroadm-device {
    prefix org-openroadm-device;
  }
  import org-openroadm-interfaces {
    prefix openROADM-if;
  }
  import org-openroadm-maintenance-testsignal {
    prefix org-openroadm-maint-testsignal;
  }

  organization "Open ROADM MSA";
  contact
    "OpenROADM.org";
  description
    "YANG definitions for device facility otnodu interfaces.
     
     Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, 
     AT&T Intellectual Property.  All other rights reserved.
     
     Redistribution and use in source and binary forms, with or without modification, 
     are permitted provided that the following conditions are met:
     
     * Redistributions of source code must retain the above copyright notice, this 
       list of conditions and the following disclaimer.
     * Redistributions in binary form must reproduce the above copyright notice, 
       this list of conditions and the following disclaimer in the documentation and/or 
       other materials provided with the distribution.
     * Neither the Members of the Open ROADM MSA Agreement nor the names of its 
       contributors may be used to endorse or promote products derived from this software 
       without specific prior written permission.
     
     THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS'' 
     AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
     IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT, 
     INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, 
     OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
     WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
     POSSIBILITY OF SUCH DAMAGE.
     
     Also contains code components extracted from IETF Interfaces.  These code components
     are copyrighted and licensed as follows:
     
     Copyright (c) 2016 IETF Trust and the persons identified as the document authors.
     All rights reserved.
     
     This document is subject to BCP 78 and the IETF Trust’s Legal Provisions Relating
     to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of
     publication of this document. Please review these documents carefully, as they
     describe your rights and restrictions with respect to this document. Code Components
     extracted from this document must include Simplified BSD License text as described in
     Section 4.e of the Trust Legal Provisions and are provided without warranty as
     described in the Simplified BSD License.";

  revision 2016-10-14 {
    description
      "Version 1.2";
  }

  identity odu-rate-identity {
    description
      "A unique rate identification of the ODUk.";
  }

  identity ODU4 {
    base odu-rate-identity;
    description
      "Identity for an ODU4";
  }

  identity ODU3 {
    base odu-rate-identity;
    description
      "Identity for an ODU3";
  }

  identity ODU2 {
    base odu-rate-identity;
    description
      "Identity for an ODU2";
  }

  identity ODU2e {
    base odu-rate-identity;
    description
      "Identity for an ODU2e";
  }

  identity ODU1 {
    base odu-rate-identity;
    description
      "Identity for an ODU1";
  }

  identity ODU0 {
    base odu-rate-identity;
    description
      "Identity for an ODU0";
  }

  identity ODUflex {
    base odu-rate-identity;
    description
      "Identity for an ODUflex";
  }

  identity odtu-type-identity {
    description
      "A unique identification for the MSI odtu type.";
  }

  identity ODTU4.ts-Allocated {
    base odtu-type-identity;
    description
      "OPU4 MSI - ODTU4.ts, TS is occupied/allocated";
  }
  
  identity ODTU4.1 {
    base odtu-type-identity;
    description
      "ODTU4.1 MSI type";
  }
  
  identity ODTU4.2 {
    base odtu-type-identity;
    description
      "ODTU4.2 MSI type";
  }
  
  identity ODTU4.8 {
    base odtu-type-identity;
    description
      "ODTU4.8 MSI type";
  }
  
  identity ODTU4.31 {
    base odtu-type-identity;
    description
      "ODTU4.31 MSI type";
  }
  
  identity ODTU01 {
    base odtu-type-identity;
    description
      "ODTU01 MSI type";
  }

  identity ODTU12 {
    base odtu-type-identity;
    description
      "ODTU12 MSI type";
  }

  identity ODTU13 {
    base odtu-type-identity;
    description
      "ODTU13 MSI type";
  }

  identity ODTU23 {
    base odtu-type-identity;
    description
      "ODTU23 MSI type";
  }

  identity ODTU2.ts {
    base odtu-type-identity;
    description
      "ODTU2.ts MSI type";
  }

  identity ODTU3.ts {
    base odtu-type-identity;
    description
      "ODTU3.ts MSI type";
  }

  identity unallocated {
    base odtu-type-identity;
    description
      "Unallocated MSI type";
  }

  grouping msi-entry {
    leaf trib-slot {
      type uint16;
      description
        "tributary slot (TS)";
    }
    leaf odtu-type {
      type identityref {
        base odtu-type-identity;
      }
      description
        "ODTU type, part of the MSI (Multiplex Structure Identifier)";
    }
    leaf trib-port {
      type uint8;
      description
        "Tributray Port Number (0-based), part of the MSI";
    }
    leaf trib-port-payload {
      type string;
      description
        "interface name being mapped to trib-port";
    }
  }

  grouping odu-attributes {
    description
      "ODU attributes";
    leaf rate {
      type identityref {
        base odu-rate-identity;
      }
      description
        "rate identity of the ODU. 'identityref' is used
         to allow to extend for future higher rates";
    }
    leaf monitoring-mode {
      type enumeration {
        enum "not-terminated" {
          description
            "Not Terminated: no detection or generation.
             Overhead is passed through the interface transparently in receive direction";
        }
        enum "terminated" {
          description
            "Terminated: detection and generation enabled.
             Overhead is erased (replaced with all zeros) in receive direction";
        }
        enum "monitored" {
          description
            "Monitored: detection enabled.
             Overhead is passed through the interface transparently in receive direction";
        }
      }
      description
        "Monitoring mode of the ODU Overhead";
    }
    leaf proactive-delay-measurement-enabled {
      type boolean;
      description
        "enable/disable proactive Delay Measurement";
    }
    list tcm {
      key "layer";
      uses tcm-attributes;
      max-elements "6";
      description
        "Tandem Connection Management";
    }
    uses opu;
  }

  grouping opu {
    container opu {
      when "../monitoring-mode = 'terminated' or ../monitoring-mode = 'monitored'";
      description
        "Optical Channel Payload Unit (OPU)";
      leaf payload-type {
        type string {
          length "2";
          pattern "[0-9a-fA-F]*";
        }
        description
          "Payload Type";
      }
      leaf rx-payload-type {
        type string {
          length "2";
          pattern "[0-9a-fA-F]*";
        }
        description
          "Received Payload Type";
      }
      leaf exp-payload-type {
        type string {
          length "2";
          pattern "[0-9a-fA-F]*";
        }
        description
          "Expected Payload Type";
      }
      leaf payload-interface {
        type string;
        description
          "Expected Payload of OPU. It designates client interface name";
      }
      container msi {
        when "../payload-type = '20' or ../payload-type = '21'";
        list tx-msi {
          key "trib-slot";
          uses msi-entry;
          description
            "Transmit MSI";
        }
        list rx-msi {
          key "trib-slot";
          uses msi-entry;
          description
            "Receive MSI";
        }
        list exp-msi {
          key "trib-slot";
          uses msi-entry;
          description
            "Expected MSI";
        }
      }
    }
  }

  grouping tcm-attributes {
    description
      "Tandem Connection Monitoring (TCM) attributes";
    leaf layer {
      type uint8 {
        range "1..6";
      }
      description
        "TCM layer";
    }
    leaf monitoring-mode {
      type enumeration {
        enum "not-terminated" {
          description
            "Not Terminated: no detection or generation.
             Overhead is passed through the interface transparently in receive direction 
             unless extension is set for erase";
        }
        enum "terminated" {
          description
            "Terminated: detection and generation enabled.
             Overhead is erased (replaced with all zeros) in receive direction, unless
             extension is set to passthrough";
        }
        enum "monitored" {
          description
            "Monitored: detection enabled.
             Overhead is passed through the interface transparently in receive direction 
             unless extension is set for erase";
        }
      }
      description
        "Monitoring mode of the TCM layer";
    }
    leaf ltc-act-enabled {
      type boolean;
      description
        "enable/disable alarm transfer on detection of Loss of Tandem Connection (LTC)";
    }
    leaf proactive-delay-measurement-enabled {
      type boolean;
      description
        "enable/disable proactive Delay Measurement";
    }
  }

  grouping odu-container {
    container odu {
      presence "Attribute Nodes for Optical Data Unit (ODU)";
      description
        "Optical Channel Data Unit (ODU)";
      uses odu-attributes {
        refine "opu/rx-payload-type" {
          config false;
        }
        refine "opu/msi" {
          config false;
        }
      }
      uses org-openroadm-maint-testsignal:maint-testsignal;
    }
  }

  augment "/org-openroadm-device:org-openroadm-device/org-openroadm-device:interface" {
    when "org-openroadm-device:type = 'openROADM-if:otnOdu'";
    uses odu-container;
  }
}
