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

  organization
    "OPEN ROADM MSA";
  contact
    "OpenROADM.org.";
  description
    "YANG definitions for an Add/Drop group in Network Model
     
     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";
  }

  grouping shared-risk-group {
    list srgs {
      key "srg-number";
      leaf srg-number {
        type uint16;
        description
          "Identifier for each SRG";
      }
      leaf max-pp {
        type uint32;
        description
          "Maximum number  of add/drop port pairs in an SRG";
      }
      leaf-list available-wavelengths {
        type uint32;
        description
          "List of available wavelengths that are supported
           by the srg";
      }
      leaf wavelength-duplication {
        type enumeration {
          enum "one-per-srg" {
            value 1;
          }
          enum "one-per-degree" {
            value 2;
          }
        }
        description
          "One per srg is applied to C/D add/drop group
           one per degree is applied to C/D/C add drop group";
      }
      container cp-tx {
        leaf-list pp-number {
          type uint32;
          description
            "The port pair # used for a tail or assigned by PCE to a  service/circuit ";
        }
      }
      container cp-rx {
        leaf-list pp-number {
          type uint32;
          description
            "The port pair # used for a tail or assigned by PCE to a  service/circuit ";
        }
      }
      list port-pair {
        key "pp-number";
        leaf pp-number {
          type uint16;
          description
            "The port pair # used for tail or assigned by PCE to a service/circuit";
        }
        leaf wavelength-number {
          type uint32;
        }
      }
    }
  }
}
