module tapi-virtual-network {
    namespace "urn:onf:otcc:yang:tapi-virtual-network";
    prefix tapi-virtual-network;
    import tapi-topology {
        prefix tapi-topology;
    }
    import tapi-common {
        prefix tapi-common;
    }
    organization "ONF OTCC (Open Transport Configuration & Control) Project";
    contact "
         Project Web: <https://wiki.opennetworking.org/display/OTCC/TAPI>
         Project List: <mailto:transport-api@opennetworking.org>
         Editor: Karthik Sethuraman
                 <mailto:karthik.sethuraman@necam.com>";
    description "
        This module contains TAPI Virtual Network Model definitions.
        Source: TapiVirtualNetwork.uml
        - The TAPI YANG models included in this TAPI release are a *normative* part of the TAPI SDK.
        - The YANG specifications have been generated from the corresponding UML model using the [ONF EAGLE UML2YANG mapping tool]
          <https://github.com/OpenNetworkingFoundation/EagleUmlYang>
          and further edited manually to comply with the [ONF IISOMI UML2YANG mapping guidelines]
          <https://wiki.opennetworking.org/display/OIMT/UML+-+YANG+Guidelines>
        - Status of YANG model artifacts can be determined by referring to the corresponding UML artifacts.
          As described in the UML models, some artifacts are considered *experimental*, and thus the corresponding YANG artifacts.
        - The ONF TAPI release process does not guarantee backward compatibility of YANG models across major versions of TAPI releases.
          The YANG model backward compatibility criteria are outlined in section 11 of <https://tools.ietf.org/html/rfc7950>.
          YANG models included in this release may not be backward compatible with previous TAPI releases.
        Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved.
        License: This module is distributed under the Apache License 2.0";
    revision 2018-12-10 {
        description "ONF Transport API version 2.1.1.
                   Changes included in this TAPI release (v2.1.1) are listed in
                   <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.1.1.md>";
        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 7950, RFC 6087 and ONF TAPI UML model
                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.1.0/UML>";
    }
    revision 2018-10-16 {
        description "ONF Transport API version 2.1.0.
                   Changes included in this TAPI release (v2.1.0) are listed in
                   <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.1.0.md>";
        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 7950, RFC 6087 and ONF TAPI UML model
                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.1.0/UML>";
    }
    revision 2018-03-07 {
        description "ONF Transport API version 2.0.2
        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.2.md>";
        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.2/UML>";
    }
    revision 2018-02-16 {
        description "ONF Transport API version 2.0.1
        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.1.md>";
        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.1/UML>";
    }
    revision 2018-01-02 {
        description "ONF Transport API version 2.0.0
        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.0.md>";
        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.0/UML>";
    }
    augment "/tapi-common:context" {
        container virtual-network-context {
            uses virtual-network-context;
            description "Augments the base TAPI Context with VirtualNetworkService information";
        }
        description "Augments the base TAPI Context with VirtualNetworkService information";
    }

    /**************************
     * definitions of refrences
     **************************/
     grouping virtual-nw-service-ref {
         leaf virtual-nw-service-uuid {
             type leafref {
                 path '/tapi-common:context/tapi-virtual-network:virtual-network-context/tapi-virtual-network:virtual-nw-service/tapi-virtual-network:uuid';
             }
             description "none";
         }
         description "none";
     }

    /**************************
     * package object-classes
     **************************/
     grouping virtual-network-constraint {
         container src-service-end-point {
             uses tapi-common:service-interface-point-ref;
             config false;
             description "none";
         }
         container sink-service-end-point {
             uses tapi-common:service-interface-point-ref;
             config false;
             description "none";
         }
         list diversity-exclusion {
             uses virtual-nw-service-ref;
             key 'virtual-nw-service-uuid';
             config false;
             description "none";
         }
         container requested-capacity {
             uses tapi-common:capacity;
             description "none";
         }
         leaf service-level {
             type string;
             description "An abstract value the meaning of which is mutually agreed – typically represents metrics such as - Class of service, priority, resiliency, availability";
         }
         leaf-list service-layer {
             type tapi-common:layer-protocol-name;
             description "none";
         }
         list cost-characteristic {
             key 'cost-name';
             uses tapi-topology:cost-characteristic;
             description "The list of costs where each cost relates to some aspect of the TopologicalEntity.";
         }
         list latency-characteristic {
             key 'traffic-property-name';
             uses tapi-topology:latency-characteristic;
             description "The effect on the latency of a queuing process. This only has significant effect for packet based systems and has a complex characteristic.";
         }
         uses tapi-common:local-class;
         description "none";
     }
     grouping virtual-network-service {
         container topology {
             uses tapi-topology:topology-ref;
             config false;
             description "none";
         }
         list end-point {
             key 'local-id';
             min-elements 2;
             uses virtual-network-service-end-point;
             description "none";
         }
         list vnw-constraint {
             key 'local-id';
             min-elements 1;
             uses virtual-network-constraint;
             description "none";
         }
         leaf schedule {
             type string;
             description "none";
         }
         container state {
             uses tapi-common:admin-state-pac;
             description "none";
         }
         leaf-list layer-protocol-name {
             type tapi-common:layer-protocol-name;
             min-elements 1;
             description "none";
         }
         uses tapi-common:service-spec;
         description "The ForwardingConstruct (FC) object class models enabled potential for forwarding between two or more LTPs and like the LTP supports any transport protocol including all circuit and packet forms.
             At the lowest level of recursion, a FC represents a cross-connection within an NE.";
     }
     grouping virtual-network-service-end-point {
         container service-interface-point {
             uses tapi-common:service-interface-point-ref;
             config false;
             description "none";
         }
         leaf role {
             type tapi-common:port-role;
             config false;
             description "Each EP of the FC has a role (e.g., working, protection, protected, symmetric, hub, spoke, leaf, root)  in the context of the FC with respect to the FC function. ";
         }
         leaf direction {
             type tapi-common:port-direction;
             config false;
             description "The orientation of defined flow at the EndPoint.";
         }
         leaf service-layer {
             type tapi-common:layer-protocol-name;
             config false;
             description "none";
         }
         uses tapi-common:local-class;
         description "The association of the FC to LTPs is made via EndPoints.
             The EndPoint (EP) object class models the access to the FC function.
             The traffic forwarding between the associated EPs of the FC depends upon the type of FC and may be associated with FcSwitch object instances.
             In cases where there is resilience the EndPoint may convey the resilience role of the access to the FC. 
             It can represent a protected (resilient/reliable) point or a protecting (unreliable working or protection) point.
             The EP replaces the Protection Unit of a traditional protection model.
             The ForwadingConstruct can be considered as a component and the EndPoint as a Port on that component";
     }
     grouping virtual-network-context {
         list virtual-nw-service {
             key 'uuid';
             uses virtual-network-service;
             description "none";
         }
         description "none";
     }

    /**************************
     * package interfaces
     **************************/
     rpc create-virtual-network-service {
         description "none";
         input {
             list sep {
                 key 'local-id';
                 min-elements 2;
                 uses virtual-network-service-end-point;
                 description "none";
             }
             container vnw-constraint {
                 uses virtual-network-constraint;
                 description "none";
             }
             leaf conn-schedule {
                 type string;
                 description "none";
             }
         }
         output {
             container service {
                 uses virtual-network-service;
                 description "none";
             }
         }
     }
     rpc delete-virtual-network-service {
         description "none";
         input {
             leaf service-id-or-name {
                 type string;
                 description "none";
             }
         }
         output {
             container service {
                 uses virtual-network-service;
                 description "none";
             }
         }
     }
     rpc get-virtual-network-service-details {
         description "none";
         input {
             leaf service-id-or-name {
                 type string;
                 description "none";
             }
         }
         output {
             container service {
                 uses virtual-network-service;
                 description "none";
             }
         }
     }
     rpc get-virtual-network-service-list {
         description "none";
         output {
             list service {
                 key 'uuid';
                 uses virtual-network-service;
                 description "none";
             }
         }
     }
}
