module org-openroadm-port-types {
  namespace "http://org/openroadm/port/types";
  prefix org-openroadm-port-types;

  import org-openroadm-common-types {
    prefix org-openroadm-common-types;
  }

  organization "Open ROADM MSA";
  contact
    "OpenROADM.org";
  description
    "YANG definitions for port types.
     
     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.";

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

  identity supported-if-capability {
    description
      "Base identity from which specific supported interfaces are derived";
  }

  identity if-100GE {
    base supported-if-capability;
  }

  identity if-OMS {
    base supported-if-capability;
  }

  identity if-OTS {
    base supported-if-capability;
  }

  identity if-OCH {
    base supported-if-capability;
  }

  identity supported-xpdr-capability {
    description
      "Base identity from which specific supported xponder are derived";
  }

  identity Transponder {
    base supported-xpdr-capability;
  }

  identity Regen {
    base supported-xpdr-capability;
  }

  typedef port-wavelength-types {
    type enumeration {
      enum "wavelength" {
        value 1;
        description
          "Port on a transponder.";
      }
      enum "multi-wavelegnth" {
        value 2;
        description
          "Port on a ROADM.";
      }
    }
    description
      "Port types.";
  }

  grouping common-port {
    leaf port-power-capability-min-rx {
      type org-openroadm-common-types:power-dBm;
      config false;
      description
        "Based on port capabilities, the minimum power in the system spec for this port to
         provide optimum function in rx direction";
    }
    leaf port-power-capability-min-tx {
      type org-openroadm-common-types:power-dBm;
      config false;
      description
        "Based on port capabilities, the minimum power in the system spec for this port to
         provide optimum function in tx direction.";
    }         
    leaf port-power-capability-max-rx {
      type org-openroadm-common-types:power-dBm;
      config false;
      description
        "Based on port capabilities, the maximum power in the system spec for this port to
         provide optimum function in rx direction.";
    }
    leaf port-power-capability-max-tx {
      type org-openroadm-common-types:power-dBm;
      config false;
      description
        "Based on port capabilities, the maximum power in the system spec for this port to
         provide optimum function in tx direction.";
    }                                             
    leaf-list capable-wavelengths {
      type uint32;
      config false;
      description
        "List of wavelengths this port is capable of supporting.
         can be used to access wavelength-map to get the wavelength value in nm";
    }
  }
  grouping roadm-port {
    uses common-port;
    leaf-list available-wavelengths {
      type uint32;
      config false;
      description
        "List of available (capable and unused) wavelengths on this port. 
         can be used to access wavelength-map to get the wavelength value in nm";
    }
    leaf-list used-wavelengths {
      type uint32;
      config false;
      description
        "List of used available wavelength-numbers on this port.";
    }
  }
}
