module org-openroadm-optical-channel-interfaces {
  namespace "http://org/openroadm/optical-channel-interfaces";
  prefix org-openroadm-optical-channel-interfaces;

  import org-openroadm-device {
    prefix org-openroadm-device;
  }
  import org-openroadm-interfaces {
    prefix openROADM-if;
  }
  import org-openroadm-common-types {
    prefix org-openroadm-common-types;
  }   

  organization "Open ROADM MSA";
  contact
    "OpenROADM.org";
  description
    "YANG definitions for device facility och 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 rate-identity {
    description
      "A unique rate identification";
  }

  identity R200G {
    base rate-identity;
    description
      "Identity for 200G Rate";
  }

  identity R100G {
    base rate-identity;
    description
      "Identity for 100G Rate";
  }

  identity R10.7G {
    base rate-identity;
    description
      "Identity for 10.7G Rate";
  }

  identity R11.1G {
    base rate-identity;
    description
      "Identity for 11.1G Rate";
  }

  grouping och-attributes {
    description
      "Optical Channel attributes";
    leaf rate {
      type identityref {
        base rate-identity;
      }
      description
        "rate";
    }
    leaf wavelength-number {
      type uint32;
    }
    leaf modulation-format {
      type enumeration {
        enum "bpsk" {
          value 0;
          description
            "binary phase-shift keying";
        }
        enum "dc-dp-bpsk" {
          value 1;
          description
            "DC dual-polarization binary phase-shift keying";
        }
        enum "qpsk" {
          value 2;
          description
            "quadrature phase-shift keying";
        }
        enum "dp-qpsk" {
          value 3;
          description
            "dual-polarization binary phase-shift keying";
        }
        enum "qam16" {
          value 4;
          description
            "quadrature amplitude modulation 16";
        }
        enum "dp-qam16" {
          value 5;
          description
            "dual-polarization quadrature amplitude modulation 16";
        }
        enum "dc-dp-qam16" {
          value 6;
          description
            "DC dual-polarization quadrature amplitude modulation 16";
        }
        enum "qam8" {
          value 7;
          description
            "quadrature amplitude modulation 8";
        }
        enum "dp-qam8" {
          value 8;
          description
            "dual-polarization quadrature amplitude modulation 8";
        }
        enum "dc-dp-qam8" {
          value 9;
          description
            "DC dual-polarization quadrature amplitude modulation 8";
        }
      }
      description
        "modulation format";
    }
    leaf transmit-power {
      type org-openroadm-common-types:power-dBm;
      description
        "The target transmit power for this channel. When set, the xponder will work to ensure that port-current-power reaches this level. Applicable only to channel on top of xpdr-network port";
    }     
  }

  grouping och-container {
    container och {
      description
        "Optical Channel (OCh):
         Models the optical channel interfaces for an Optical White Box.";
      uses och-attributes;
    }
  }

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