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

  organization "Open ROADM MSA";
  contact
    "OpenROADM.org";
  description
    "YANG definitions of common resource 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";
  }

  grouping resource-type {
    leaf type {
      type resource-type-enum;
      mandatory true;
    }
    leaf extension {
      type string;
      mandatory false;
    }
  }

  typedef resource-type-enum {
    type enumeration {
      enum "other" {
        value 1;
        description
          "Resource of type not found in list.";
      }
      enum "device" {
        value 2;
        description
          "device - ROAMD, Xponder, etc";
      }
      enum "degree" {
        value 3;
        description
          "degree";
      }
      enum "shared-risk-group" {
        value 4;
        description
          "shared-risk-group";
      }
      enum "connection" {
        value 5;
        description
          "connection";
      }
      enum "connection-map" {
        value 6;
        description
          "connection-map";
      }
      enum "port" {
        value 7;
        description
          "port";
      }
      enum "circuit-pack" {
        value 8;
        description
          "circuit pack";
      }
      enum "internal-link" {
        value 9;
        description
          "internal-link";
      }
      enum "physical-link" {
        value 10;
        description
          "physical-link";
      }
      enum "interface" {
        value 11;
        description
          "interface";
      }
      enum "shelf" {
        value 12;
        description
          "shelf";
      }
      enum "service" {
        value 13;
        description
          "service";
      }
    }
  }

  grouping device-id {
    description
      "Device identifier. Unique within the Controller.";
    leaf node-id {
      description
        "Node Id is a globally unique identifier for a device. 
         Same as leafref value in model, if applicable.";
      type string;
    }
  }

  grouping circuit-pack-name {
    leaf circuit-pack-name {
      description
        "Circuit-Pack identifier. Unique within the context of a device.
         Same as leafref value in model, if applicable.";
      type string;
      mandatory true;
    }
  }

  grouping port-name {
    uses circuit-pack-name;
    leaf port-name {
      description
        "Port identifier. Unique within the context of a circuit-pack. 
         Same as leafref value in model, if applicable.";
      type string;
    }
  }

  grouping physical-link-name {
    leaf physical-link-name {
      description
        "Physical Link identifier. Unique within the context of a device. 
         Same as leafref value in model, if applicable.";
      type string;
      mandatory true;
    }
  }

  grouping internal-link-name {
    leaf internal-link-name {
      description
        "Internal Link identifier. Unique within the context of a device. 
         Same as leafref value in model, if applicable.";
      type string;
      mandatory true;
    }
  }

  grouping connection-number {
    leaf connection-number {
      description
        "Connection identifier. Unique within the context of a device. 
         Same as leafref value in model, if applicable.";
      type string;
    }
  }

  grouping degree-number {
    leaf degree-number {
      description
        "Degree identifier. Unique within the context of a device. 
         Same as leafref value in model, if applicable.";
      type uint16;
    }
  }

  grouping srg-number {
    leaf srg-number {
      description
        "Shared Risk Group identifier. Unique within the context of a device. 
         Same as leafref value in model, if applicable.";
      type uint16;
    }
  }

  grouping shelf-name {
    leaf shelf-name {
      description
        "Shelf-id identifier. Unique within the context of a device.  
         Same as leafref value in model, if applicable.";
      type string;
      mandatory true;
    }
  }

  grouping service-name {
    leaf service-name {
      description
        "Service identifier. Unique within the context of a network.  
         Same as leafref value in model, if applicable.";
      type string;
      mandatory true;
    }
  }

  grouping interface-name {
    leaf interface-name {
      description
        "Interface identifier.";
      type string;
      mandatory true;
    }
  }

  typedef resource-notification-type {
    description
      "Type of notification about a resource";
    type enumeration {
      enum "resourceCreation" {
        value 1;
        description
          "A new instance of a resource has been created.";
      }
      enum "resourceModification" {
        value 2;
        description
          "An exhisting instance of a resource has been modified. This shall be triggered by changes in configuration, state, status etc.
           It shall not be triggered by changes in performance measurements, power and temperature readings or any other data that is highlyvolatile. ";
      }
      enum "resourceDeletion" {
        value 3;
        description
          "An exhisting instance of a resource has been removed.";
      }
    }
  }
}
