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

  import ietf-yang-types {
    prefix yang;
  }
  import org-openroadm-routing-constraints {
    prefix org-openroadm-routing-constraints;
  }
  import org-openroadm-common-types {
    prefix org-openroadm-common-types;
  }
  import org-openroadm-resource-types {
    prefix org-openroadm-resource-types;
  }
  import org-openroadm-common-service-types {
    prefix org-openroadm-common-service-types;
  }

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

  rpc service-create {
    input {
      leaf service-name {
        type string;
        description
          "Identifier for the service to be created in
           the ROADM network, e.g., CLFI, CLCI, etc. This is reported against the service, but may not get reflected in the service in the network.";
        mandatory true;
      }
      leaf common-id {
        type string;
        description
          "To be used by the ROADM controller to identify the routing constraints received from planning application (PED).";
      }
      uses org-openroadm-common-service-types:sdnc-request-header;
      leaf connection-type {
        type org-openroadm-common-service-types:connection-type;
        mandatory true;
      }
      container service-a-end {
        uses org-openroadm-common-service-types:service-endpoint;
      }
      container service-z-end {
        uses org-openroadm-common-service-types:service-endpoint;
      }
      uses org-openroadm-routing-constraints:routing-constraints;
      uses org-openroadm-common-service-types:service-information;
    }
    output {
      uses org-openroadm-common-service-types:configuration-response-common;
      uses org-openroadm-common-service-types:response-parameters;
    }
    description
      "Whether this request passed initial validation and was accepted for processing. Once the request completes processing, a
       service-rpc-result Notification shall be sent.";
  }
  rpc service-feasibility-check {
    input {
      leaf common-id {
        type string;
        mandatory true;
        description
          "To be used by the ROADM controller to identify the routing 
           constraints received from planning application (PED).";
      }
      uses org-openroadm-common-service-types:sdnc-request-header;
      leaf connection-type {
        type org-openroadm-common-service-types:connection-type;
      }
      container service-a-end {
        uses org-openroadm-common-service-types:service-endpoint;
      }
      container service-z-end {
        uses org-openroadm-common-service-types:service-endpoint;
      }
      uses org-openroadm-routing-constraints:routing-constraints;
      uses org-openroadm-common-service-types:service-information;
    }
    output {
      uses org-openroadm-common-service-types:configuration-response-common;
      uses org-openroadm-common-service-types:response-parameters;
      container service-a-end {
        uses org-openroadm-common-service-types:service-endpoint;
        list equipment-required {
          description
            "List of required equipment, including equipment type and quantity";
          key "eqipment-identifier";
          leaf eqipment-identifier {
            type string;
          }
          leaf equipment-type {
            type string;
          }
          leaf equipment-quantity {
            type uint32;
          }
        }
      }
      container service-z-end {
        uses org-openroadm-common-service-types:service-endpoint;
        list equipment-required {
          description
            "List of required equipment, including equipment type and quantity";
          key "eqipment-identifier";
          leaf eqipment-identifier {
            type string;
          }
          leaf equipment-type {
            type string;
          }
          leaf equipment-quantity {
            type uint32;
          }
        }
      }
      list intermediate-sites {
        key "clli";
        uses org-openroadm-common-service-types:service-endpoint;
        list equipment-required {
          description
            "List of required equipment, including equipment type and quantity";
          key "eqipment-identifier";
          leaf eqipment-identifier {
            type string;
          }
          leaf equipment-type {
            type string;
          }
          leaf equipment-quantity {
            type uint32;
          }
        }
      }
    }
    description
      "Whether a service was possible to be created, and if so
       the routing constraints match and the a and z end connection that have
       to match";
  }
  rpc service-delete {
    input {
      uses org-openroadm-common-service-types:sdnc-request-header;
      container service-delete-req-info {
        leaf service-name {
          type string;
          description
            "Identifier for the service to be deleted in
             the ROADM network, e.g., CLFI, CLCI, etc.";
          mandatory true;
        }
        leaf due-date {
          type yang:date-and-time;
          description
            "date and time service to be turned down. If missing, now.";
        }
        leaf tail-retention {
          type enumeration {
            enum "yes" {
              value 1;
              description
                "tails are left intact ";
            }
            enum "no" {
              value 2;
              description
                "tails are deleted";
            }
          }
          mandatory true;
        }
      }
    }
    output {
      uses org-openroadm-common-service-types:configuration-response-common;
    }
    description
      "Whether this request passed initial validation and was accepted for processing. Once the request completes processing, a
       service-rpc-result Notification shall be sent. Once the service has been deleted, it no longer will appear in the service list";
  }
  rpc equipment-notification {
    input {
      uses org-openroadm-common-service-types:sdnc-request-header;
      leaf equiptment-id {
        type string;
        mandatory true;
      }
      leaf equipment-name {
        type string;
      }
      leaf equipemt-type {
        type string;
        mandatory true;
      }
      leaf equipment-vendor {
        type string;
        mandatory true;
      }
      leaf equipment-customer {
        type string;
      }
      leaf equipment-clli {
        type string;
        mandatory true;
      }
      leaf equipment-ip {
        type string;
      }
      leaf controller-id {
        type string;
        mandatory true;
      }
    }
    output {
      uses org-openroadm-common-service-types:configuration-response-common;
    }
  }
  rpc temp-service-create {
    input {
      leaf common-id {
        type string;
        description
          "To be used by the ROADM controller to identify the routing constraints received from planning application (PED).";
        mandatory true;
      }
      uses org-openroadm-common-service-types:sdnc-request-header;
      leaf connection-type {
        type org-openroadm-common-service-types:connection-type;
        mandatory true;
      }
      container service-a-end {
        uses org-openroadm-common-service-types:service-endpoint;
      }
      container service-z-end {
        uses org-openroadm-common-service-types:service-endpoint;
      }
      uses org-openroadm-routing-constraints:routing-constraints;
      uses org-openroadm-common-service-types:service-information;
    }
    output {
      uses org-openroadm-common-service-types:configuration-response-common;
      uses org-openroadm-common-service-types:response-parameters;
    }
  }
  rpc temp-service-delete {
    input {
      leaf common-id {
        type string;
        mandatory true;
      }
    }
    output {
      uses org-openroadm-common-service-types:configuration-response-common;
    }
  }
  rpc service-roll {
    input {
      leaf service-name {
        type string;
        mandatory true;
        description
          "Identifier for the service to be rolled in
           the ROADM network, e.g., CLFI, CLCI, etc.";
      }
      leaf due-date {
        type yang:date-and-time;
        description
          "date and time service to be rolled";
      }
    }
    output {
      uses org-openroadm-common-types:rpc-response-status;
    }
  }
  rpc service-reconfigure {
    input {
      leaf service-name {
        type string;
        mandatory true;
        description
          "Existing identifier for the service to be
           reconfigured in the ROADM network, e.g., CLFI, CLCI, etc.";
      }
      leaf new-service-name {
        type string;
        description
          "New identifier for the service to be
           reconfigured in the ROADM network, e.g., CLFI, CLCI, etc.";
      }
      leaf common-id {
        type string;
        description
          "To be used by the ROADM controller to identify the routing 
           constraints received from planning application (PED).";
      }
      leaf connection-type {
        type org-openroadm-common-service-types:connection-type;
      }
      container service-a-end {
        uses org-openroadm-common-service-types:service-endpoint;
      }
      container service-z-end {
        uses org-openroadm-common-service-types:service-endpoint;
      }
      uses org-openroadm-routing-constraints:routing-constraints;
      uses org-openroadm-common-service-types:service-information;
    }
    output {
      uses org-openroadm-common-types:rpc-response-status;
    }
    description
      "Whether this request passed initial validation and was accepted for processing. Once the request completes processing, a
       service-rpc-result Notification shall be sent.";
  }
  rpc service-restoration {
    input {
      leaf service-name {
        type string;
        mandatory true;
        description
          "Identifier for the service to be restored in
           the ROADM network, e.g., CLFI, CLCI, etc.";
      }
      leaf option {
        type enumeration {
          enum "permanent" {
            value 1;
            description
              "A spare regen can be used to restore the
               service permanently without reverting back to the
               original regen";
          }
          enum "temporary" {
            value 2;
            description
              "a spare regen can be used to restore the
               service temporarily.   The service needs to be reverted
               back to the original regen transponder";
          }
        }
        mandatory true;
      }
    }
    output {
      uses org-openroadm-common-types:rpc-response-status;
    }
    description
      "Whether this request passed initial validation and was accepted for processing. Once the request completes processing, a
       service-rpc-result Notification shall be sent.";
  }
  rpc service-reversion {
    input {
      leaf service-name {
        type string;
        mandatory true;
        description
          "Identifier for the service to be reverted
           in the ROADM network, e.g., CLFI, CLCI, etc. ";
      }
      leaf due-date {
        type yang:date-and-time;
        description
          "date and time service to be reverted";
      }
    }
    output {
      uses org-openroadm-common-types:rpc-response-status;
    }
    description
      "Whether this request passed initial validation and was accepted for processing. Once the request completes processing, a
       service-rpc-result Notification shall be sent.";
  }
  rpc service-reroute {
    input {
      leaf service-name {
        type string;
        mandatory true;
        description
          "Identifier for the service to be re-routed in
           the ROADM network, e.g., CLFI, CLCI, etc.";
      }
    }
    output {
      uses org-openroadm-common-types:rpc-response-status;
      uses org-openroadm-routing-constraints:routing-constraints;
    }
    description
      "Whether this request was validated and processed correct. If sucessful, it return the proposed new route.
       If acceptable, this request should be followed by a service-reroute-confirm to complete the reroute operation.";
  }
  rpc service-reroute-confirm {
    input {
      leaf service-name {
        type string;
        mandatory true;
        description
          "Identifier for the service to be re-routed in
           the ROADM network, e.g., CLFI, CLCI, etc.";
      }
      uses org-openroadm-routing-constraints:routing-constraints;
    }
    output {
      uses org-openroadm-common-types:rpc-response-status;
    }
    description
      "Whether this request passed initial validation and was accepted for processing. Once the request completes processing, a
       service-rpc-result Notification shall be sent.";
  }
  rpc network-re-optimization {
    input {
      leaf service-name {
        type string;
        description
          "Identifier for the service in the ROADM network,
           e.g., CLFI, CLCI, etc. whose path is to be checked by the RNC
           for re-optimization";
      }
      leaf a-end {
        type string;
        description
          "Services whose A-ends are terminated at the
           specified office location are to be checked by the RNC for
           re-optimization";
      }
      leaf z-end {
        type string;
        description
          "Services whose Z-ends are terminated at the
           specified office location are to be checked by the RNC for
           re-optimization ";
      }
      leaf pass-through {
        type string;
        description
          "Services that are pass-through (either via
           regen or express) at the specified office location are to
           be checked by the RNC for re-optimization";
      }
      leaf customer-code {
        type string;
        description
          "Services that belong to the specified customer
           are to be checked by the RNC for re-optimization ";
      }
    }
    output {
      uses org-openroadm-common-types:rpc-response-status;
      leaf optimization-candidate {
        type string;
      }
    }
  }
  container service-list {
    description
      "List of service. Can only be created, deleted, modified, etc. using special RPCs.";
    list services {
      key "service-name";
      uses org-openroadm-common-service-types:service;
    }
  }
  container temp-service-list {
    description
      "List of temporary services Can only be created, deleted, modified, etc. using special RPCs.";
    list services {
      key "common-id";
      uses org-openroadm-common-service-types:service {
        refine "service-name" {
          mandatory false;
        }
      }
    }
  }
  notification service-rpc-result {
    description
      "This Notification indicates result of  service RPC";
    leaf notification-type {
      type org-openroadm-common-service-types:service-notification-types;
    }
    uses org-openroadm-common-types:rpc-response-status;
    uses org-openroadm-common-service-types:service-notification-result;
  }
  notification service-traffic-flow {
    description
      "This Notification indicates that traffic is flowing again on the service after an administrative action has completed";
    leaf service-name {
      type string;
      description
        "Identifier for the service being reported on";
      mandatory true;
    }
    leaf actual-date {
      type yang:date-and-time;
      description
        "Actual date and time traffic started flowing";
    }
  }
  notification service-notification {
    description
      "This Notification that a service has been added, modified or removed.
       A resourceCreation notification shall contain the created service in its entirety.
       A resourceMofified notification shall contain just the modified field, plus the service identifier
       A resourceDeleted notification shall just contain the service identifier";
    leaf notificationType {
      type org-openroadm-resource-types:resource-notification-type;
      description
        "Whether this notification indicates a service creation, service modification or service deletion.";
    }
    uses org-openroadm-common-service-types:service;
  }
}
