
/*
 * 
 *   Copyright 2016-2017 RIFT.IO Inc
 *
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 *
 *
 */

module vlr
{
  namespace "urn:ietf:params:xml:ns:yang:nfvo:vlr";
  prefix "vlr";

  import rw-pb-ext {
    prefix "rwpb";
  }

  import ietf-inet-types {
    prefix "inet";
  }

  import ietf-yang-types {
    prefix "yang";
  }

  import mano-types {
    prefix "manotypes";
  }

  import vld {
    prefix "vld";
  }

  import rw-project {
    prefix "rw-project";
  }

  revision 2017-02-08 {
    description
      "Update model to support projects.";
  }

  revision 2015-09-10 {
    description
      "Initial revision. This YANG file defines
       the Virtual Link Record (VLR)";
    reference
      "Derived from earlier versions of base YANG files";
  }

  augment "/rw-project:project" {
    container vlr-catalog {
      config false;

      list vlr {
        key "id";
        unique "name";

        leaf id {
          description "Identifier for the VLR.";
          type yang:uuid;
        }

        leaf name {
          description "VLR name.";
          type string;
        }

        leaf nsr-id-ref {
          description
            "NS instance identifier. 
             This is a leafref /rw-project:project/nsr:ns-instance-config/nsr:nsr/nsr:id";
          type yang:uuid;
        }

        leaf vld-ref {
          description
            "Reference to VLD
           /rw-project:project/nsr:ns-instance-config/nsr:nsr[nsr:id=../nsr-id-ref]
           /nsd/vld:vld/vld:id";
          type string;
        }

        leaf res-id {
          description "Identifier for resmgr id mapping";
          type yang:uuid;
        }

        leaf short-name {
          description "Short name to appear as label in the UI";
          type string;
        }

        leaf vendor {
          description "Provider of the VLR.";
          type string;
        }

        leaf description {
          description "Description of the VLR.";
          type string;
        }

        leaf version {
          description "Version of the VLR";
          type string;
        }

        leaf type {
          type manotypes:virtual-link-type;
        }

        leaf root-bandwidth {
          description
            "For ELAN this is the aggregate bandwidth.";
          type uint64;
        }

        leaf leaf-bandwidth {
          description
            "For ELAN this is the bandwidth of branches.";
          type uint64;
        }

        leaf create-time {
          description
            "Creation timestamp of this Virtual Link.
          The timestamp is expressed as seconds 
          since unix epoch - 1970-01-01T00:00:00Z";

          type uint32;
        }

        leaf uptime {
          description
            "Active period of this Virtual Link.
          Uptime is expressed in seconds";

          type uint32;
        }

        leaf network-id {
          description
            "Identifier for the allocated network resource.";
          type string;
        }

        leaf vim-network-name {
          description
            "Name of network in VIM account. This is used to indicate
            pre-provisioned network name in cloud account.";
          type string;
        }

        // replicate for pnfd container here

        uses manotypes:provider-network;
        uses manotypes:ip-profile-info;
      
        leaf status {
          description
            "Status of the virtual link record.";
          type enumeration {
            enum LINK_UP;
            enum DEGRADED;
            enum LINK_DOWN;
          }
        }
        leaf operational-status {
          description
            "The operational status of the Virtual Link
            init                 : The VL is in init stat.
            vl-alloc-pending     : The VL alloc is pending in VIM
            running              : The VL is up  and running in VM
            vl-terminate-pending : The VL is being terminated in VIM.
            terminated           : The VL is terminated in the VM.
            failed               : The VL instantiation failed in VIM.
          ";

          type enumeration {
            rwpb:enum-type "VlOperationalStatus";
            enum init;
            enum vl-alloc-pending;
            enum running;
            enum vl-terminate-pending;
            enum terminated;
            enum failed;
          }
        }
      }
    }
  }
}

