module tapi-path-computation {
    namespace "urn:onf:otcc:yang:tapi-path-computation";
    prefix tapi-path-computation;
    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 Path Computation Model definitions.
        Source: TapiPathComputation.uml
        Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved.
        License: This module is distributed under the Apache License 2.0";
    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 version .
        <https://wiki.opennetworking.org/display/OIMT/IISOMI>
        Changes in this revision: <https://github.com/OpenNetworkingFoundation/Snowmass-ONFOpenTransport/blob/develop/change-log.md>";
        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
                  <https://github.com/OpenNetworkingFoundation/Snowmass-ONFOpenTransport/tree/develop/UML>";
    }
    augment "/tapi-common:context" {
        uses path-computation-context;
        description "Augments the base TAPI Context with PathComputationService information";
    }
    /***********************
    * package object-classes
    **********************/ 
        grouping path {
            leaf-list link {
                type leafref {
                    path '/tapi-common:context/tapi-topology:topology/tapi-topology:link/tapi-topology:uuid';
                }
                config false;
                min-elements 1;
                description "none";
            }
            container routing-constraint {
                config false;
                uses routing-constraint;
                description "none";
            }
            uses tapi-common:resource-spec;
            description "Path is described by an ordered list of TE Links. A TE Link is defined by a pair of Node/NodeEdgePoint IDs. A Connection is realized by concatenating link resources (associated with a Link) and the lower-level connections (cross-connections) in the different nodes";
        }
        grouping path-service-end-point {
            leaf service-interface-point {
                type leafref {
                    path '/tapi-common:context/tapi-common:service-interface-point/tapi-common:uuid';
                }
                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 path-computation-service {
            leaf-list path {
                type leafref {
                    path '/tapi-common:context/tapi-path-computation:path/tapi-path-computation:uuid';
                }
                config false;
                min-elements 1;
                description "none";
            }
            list end-point {
                key 'local-id';
                min-elements 2;
                max-elements 2;
                uses path-service-end-point;
                description "none";
            }
            container routing-constraint {
                uses routing-constraint;
                description "none";
            }
            container objective-function {
                uses path-objective-function;
                description "none";
            }
            container optimization-constraint {
                uses path-optimization-constraint;
                description "none";
            }
            uses tapi-common:service-spec;
            description "none";
        }
        grouping path-objective-function {
            leaf bandwidth-optimization {
                type tapi-common:directive-value;
                config false;
                description "none";
            }
            leaf concurrent-paths {
                type tapi-common:directive-value;
                config false;
                description "none";
            }
            leaf cost-optimization {
                type tapi-common:directive-value;
                config false;
                description "none";
            }
            leaf link-utilization {
                type tapi-common:directive-value;
                config false;
                description "none";
            }
            leaf resource-sharing {
                type tapi-common:directive-value;
                config false;
                description "none";
            }
            uses tapi-common:local-class;
            description "none";
        }
        grouping path-optimization-constraint {
            leaf traffic-interruption {
                type tapi-common:directive-value;
                config false;
                description "none";
            }
            uses tapi-common:local-class;
            description "none";
        }
        grouping routing-constraint {
            container requested-capacity {
                config false;
                uses tapi-common:capacity;
                description "none";
            }
            leaf service-level {
                type string;
                config false;
                description "An abstract value the meaning of which is mutually agreed – typically represents metrics such as - Class of service, priority, resiliency, availability";
            }
            leaf-list path-layer {
                type tapi-common:layer-protocol-name;
                config false;
                description "none";
            }
            list cost-characteristic {
                key 'cost-name';
                config false;
                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';
                config false;
                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.";
            }
            leaf-list include-topology {
                type leafref {
                    path '/tapi-common:context/tapi-topology:topology/tapi-topology:uuid';
                }
                config false;
                description "none";
            }
            leaf-list avoid-topology {
                type leafref {
                    path '/tapi-common:context/tapi-topology:topology/tapi-topology:uuid';
                }
                config false;
                description "none";
            }
            uses tapi-common:local-class;
            description "none";
        }
        grouping path-computation-context {
            list path-comp-service {
                key 'uuid';
                uses path-computation-service;
                description "none";
            }
            list path {
                key 'uuid';
                config false;
                uses path;
                description "none";
            }
            description "none";
        }

    /***********************
    * package interfaces
    **********************/ 
        rpc compute-p-2-p-path {
            description "none";
            input {
                list sep {
                    min-elements 2;
                    max-elements 2;
                    uses path-service-end-point;
                    description "none";
                }
                container routing-constraint {
                    uses routing-constraint;
                    description "none";
                }
                container objective-function {
                    uses path-objective-function;
                    description "none";
                }
            }
            output {
                container service {
                    uses path-computation-service;
                    description "none";
                }
            }
        }
        rpc optimize-p-2-p-path {
            description "none";
            input {
                leaf path-id-or-name {
                    type string;
                    description "none";
                }
                container routing-constraint {
                    uses routing-constraint;
                    description "none";
                }
                container optimization-constraint {
                    uses path-optimization-constraint;
                    description "none";
                }
                container objective-function {
                    uses path-objective-function;
                    description "none";
                }
            }
            output {
                container service {
                    uses path-computation-service;
                    description "none";
                }
            }
        }
        rpc delete-p-2-p-path {
            description "none";
            input {
                leaf path-id-or-name {
                    type string;
                    description "none";
                }
            }
            output {
                container service {
                    uses path-computation-service;
                    description "none";
                }
            }
        }

}
