Add Transport-API Yang models.

Change-Id: Iaca69b8bd1adbd899b0b6faf255f2e202a80a927
diff --git a/models/tapi/src/main/yang/tapi-path-computation.yang b/models/tapi/src/main/yang/tapi-path-computation.yang
new file mode 100644
index 0000000..cf62669
--- /dev/null
+++ b/models/tapi/src/main/yang/tapi-path-computation.yang
@@ -0,0 +1,277 @@
+module tapi-path-computation {

+    namespace "urn:onf:params:xml:ns:yang:tapi-path-computation";

+    prefix tapi-path-computation;

+    import tapi-topology {

+        prefix tapi-topology;

+    }

+    import tapi-common {

+        prefix tapi-common;

+    }

+    organization "Open Networking Foundation (ONF) / Open Transport Working Group(OTWG) / Transport API (TAPI) Project";

+    contact "

+        WG Web: TAPI SDK Project <http://opensourcesdn.org/projects/project-snowmass/>

+        WG List: TAPI Discussion list <mailto: transport-api@login.opennetworking.org>,

+        WG Chair: Karthik Sethuraman <mailto:karthik.sethuraman@necam.com>,

+        Editor: Ricard Vilalta <mailto:ricard.vilalta@cttc.es>";

+    description "none";

+    revision 2017-05-31 {

+        description "TAPI SDK 2.0-alpha";

+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020 and RFC 6087";

+    }

+    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";

+                }

+            }

+        }

+

+}