diff --git a/models/tapi/src/main/yang/tapi-connectivity@2018-10-16.yang b/models/tapi/src/main/yang/tapi-connectivity@2018-10-16.yang
old mode 100644
new mode 100755
index 7f01298..755eb2e
--- a/models/tapi/src/main/yang/tapi-connectivity@2018-10-16.yang
+++ b/models/tapi/src/main/yang/tapi-connectivity@2018-10-16.yang
@@ -35,28 +35,28 @@
             YANG models included in this release are not backward compatible with previous TAPI releases.
           - 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
+        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.
+        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
+        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.
+        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
+        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.
+        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
+        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" {
@@ -67,16 +67,16 @@
         description "Augments the base TAPI Context with ConnectivityService information";
     }
     augment "/tapi-common:context/tapi-topology:topology-context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point" {
-    	container cep-list {
+        container cep-list {
             uses cep-list;
             description "none";
         }
         description "none";
     }
 
-    /*************************
+   /**************************
     * definitions of references
-    *************************/
+    **************************/
     grouping connectivity-service-ref {
         leaf connectivity-service-uuid {
             type leafref {
@@ -86,16 +86,15 @@
         }
         description "none";
     }
-
     grouping connectivity-service-end-point-ref {
-    	uses connectivity-service-ref;
-    	leaf connectivity-service-end-point-local-id {
-	    	type leafref {
-	            path '/tapi-common:context/tapi-connectivity:connectivity-context/tapi-connectivity:connectivity-service/tapi-connectivity:end-point/tapi-connectivity:local-id';
-	        }
-	    	description "none";
-    	}
-    	description "none";
+        uses connectivity-service-ref;
+        leaf connectivity-service-end-point-local-id {
+            type leafref {
+                path '/tapi-common:context/tapi-connectivity:connectivity-context/tapi-connectivity:connectivity-service/tapi-connectivity:end-point/tapi-connectivity:local-id';
+            }
+            description "none";
+        }
+        description "none";
     }
     grouping connection-end-point-ref {
         uses tapi-topology:node-edge-point-ref;
@@ -107,7 +106,6 @@
         }
         description "none";
     }
-
     grouping connection-ref {
         leaf connection-uuid {
             type leafref {
@@ -117,7 +115,6 @@
         }
         description "none";
     }
-
     grouping switch-control-ref {
         uses connection-ref;
         leaf switch-control-uuid {
@@ -128,9 +125,8 @@
         }
         description "none";
     }
-    
     grouping route-ref {
-    	uses connection-ref;
+        uses connection-ref;
         leaf route-local-id {
             type leafref {
                 path '/tapi-common:context/tapi-connectivity:connectivity-context/tapi-connectivity:connection/tapi-connectivity:route/tapi-connectivity:local-id';
@@ -140,620 +136,619 @@
         description "none";
     }
 
-    /***********************
+   /**************************
     * package object-classes
-    **********************/ 
-        grouping connection {
-            list connection-end-point {
-                uses connection-end-point-ref;
-                key 'topology-uuid node-uuid node-edge-point-uuid connection-end-point-uuid';
-                config false;
-                min-elements 2;
-                description "none";
-            }
-            list lower-connection {
-                uses connection-ref;
-                key 'connection-uuid';
-                config false;
-                description "An Connection object supports a recursive aggregation relationship such that the internal construction of an Connection can be exposed as multiple lower level Connection objects (partitioning).
-                    Aggregation is used as for the Node/Topology  to allow changes in hierarchy. 
-                    Connection aggregation reflects Node/Topology aggregation. 
-                    The FC represents a Cross-Connection in an NE. The Cross-Connection in an NE is not necessarily the lowest level of FC partitioning.";
-            }
-            list supported-client-link {
-            	uses tapi-topology:link-ref;
-                key 'topology-uuid link-uuid';
-                config false;
-                description "none";
-            }
-            list route {
-                key 'local-id';
-                config false;
-                uses route;
-                description "none";
-            }
-            list switch-control {
-                key 'uuid';
-                config false;
-                uses switch-control;
-                description "none";
-            }
-            leaf direction {
-                type tapi-common:forwarding-direction;
-                config false;
-                description "none";
-            }
-            leaf layer-protocol-name {
-                type tapi-common:layer-protocol-name;
-                config false;
-                description "none";
-            }
-            uses tapi-common:resource-spec;
-            uses tapi-common:operational-state-pac;
-            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 connection-end-point {
-            leaf layer-protocol-name {
-                type tapi-common:layer-protocol-name;
-                config false;
-                description "none";
-            }
-            leaf layer-protocol-qualifier {
-                type tapi-common:layer-protocol-qualifier;
-                config false;
-                description "none";
-            }
-            container parent-node-edge-point {
-            	uses tapi-topology:node-edge-point-ref;
-                config false;
-                description "none";
-            }
-            list client-node-edge-point {
-                uses tapi-topology:node-edge-point-ref;
-                key 'topology-uuid node-uuid node-edge-point-uuid';
-                config false;
-                description "none";
-            }
-            list aggregated-connection-end-point {
-                uses connection-end-point-ref;
-                key 'topology-uuid node-uuid node-edge-point-uuid connection-end-point-uuid';
-                config false;
-                description "none";
-            }
-            leaf connection-port-direction {
-                type tapi-common:port-direction;
-                config false;
-                description "The orientation of defined flow at the EndPoint.";
-            }
-            leaf connection-port-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. ";
-            }
-            uses tapi-common:resource-spec;
-            uses tapi-common:operational-state-pac;
-            uses tapi-common:termination-pac;
-            description "The LogicalTerminationPoint (LTP) object class encapsulates the termination and adaptation functions of one or more transport layers. 
-                The structure of LTP supports all transport protocols including circuit and packet forms.";
-        }
-        grouping connectivity-constraint {
-            leaf service-layer {
-                type tapi-common:layer-protocol-name;
-                description "none";
-            }
-            leaf service-type {
-                type service-type;
-                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";
-            }
-            container requested-capacity {
-                uses tapi-common:capacity;
-                description "none";
-            }
-            leaf connectivity-direction {
-                type tapi-common:forwarding-direction;
-                description "none";
-            }
-            container schedule {
-                uses tapi-common:time-range;
-                description "none";
-            }
-            container coroute-inclusion {
-            	uses connectivity-service-ref;
-                description "none";
-            }
-            list diversity-exclusion {
-            	uses connectivity-service-ref;
-                key 'connectivity-service-uuid';
-                description "none";
-            }
+    **************************/
+    grouping connection {
+        list connection-end-point {
+            uses connection-end-point-ref;
+            key 'topology-uuid node-uuid node-edge-point-uuid connection-end-point-uuid';
+            config false;
+            min-elements 2;
             description "none";
         }
-        grouping connectivity-service {
+        list lower-connection {
+            uses connection-ref;
+            key 'connection-uuid';
+            config false;
+            description "An Connection object supports a recursive aggregation relationship such that the internal construction of an Connection can be exposed as multiple lower level Connection objects (partitioning).
+                Aggregation is used as for the Node/Topology  to allow changes in hierarchy.
+                Connection aggregation reflects Node/Topology aggregation.
+                The FC represents a Cross-Connection in an NE. The Cross-Connection in an NE is not necessarily the lowest level of FC partitioning.";
+        }
+        list supported-client-link {
+            uses tapi-topology:link-ref;
+            key 'topology-uuid link-uuid';
+            config false;
+            description "none";
+        }
+        list route {
+            key 'local-id';
+            config false;
+            uses route;
+            description "none";
+        }
+        list switch-control {
+            key 'uuid';
+            config false;
+            uses switch-control;
+            description "none";
+        }
+        leaf direction {
+            type tapi-common:forwarding-direction;
+            config false;
+            description "none";
+        }
+        leaf layer-protocol-name {
+            type tapi-common:layer-protocol-name;
+            config false;
+            description "none";
+        }
+        uses tapi-common:resource-spec;
+        uses tapi-common:operational-state-pac;
+        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 connection-end-point {
+        leaf layer-protocol-name {
+            type tapi-common:layer-protocol-name;
+            config false;
+            description "none";
+        }
+        leaf layer-protocol-qualifier {
+            type tapi-common:layer-protocol-qualifier;
+            config false;
+            description "none";
+        }
+        container parent-node-edge-point {
+            uses tapi-topology:node-edge-point-ref;
+            config false;
+            description "none";
+        }
+        list client-node-edge-point {
+            uses tapi-topology:node-edge-point-ref;
+            key 'topology-uuid node-uuid node-edge-point-uuid';
+            config false;
+            description "none";
+        }
+        list aggregated-connection-end-point {
+            uses connection-end-point-ref;
+            key 'topology-uuid node-uuid node-edge-point-uuid connection-end-point-uuid';
+            config false;
+            description "none";
+        }
+        leaf connection-port-direction {
+            type tapi-common:port-direction;
+            config false;
+            description "The orientation of defined flow at the EndPoint.";
+        }
+        leaf connection-port-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. ";
+        }
+        uses tapi-common:resource-spec;
+        uses tapi-common:operational-state-pac;
+        uses tapi-common:termination-pac;
+        description "The LogicalTerminationPoint (LTP) object class encapsulates the termination and adaptation functions of one or more transport layers.
+            The structure of LTP supports all transport protocols including circuit and packet forms.";
+    }
+    grouping connectivity-constraint {
+        leaf service-layer {
+            type tapi-common:layer-protocol-name;
+            description "none";
+        }
+        leaf service-type {
+            type service-type;
+            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";
+        }
+        container requested-capacity {
+            uses tapi-common:capacity;
+            description "none";
+        }
+        leaf connectivity-direction {
+            type tapi-common:forwarding-direction;
+            description "none";
+        }
+        container schedule {
+            uses tapi-common:time-range;
+            description "none";
+        }
+        container coroute-inclusion {
+            uses connectivity-service-ref;
+            description "none";
+        }
+        list diversity-exclusion {
+            uses connectivity-service-ref;
+            key 'connectivity-service-uuid';
+            description "none";
+        }
+        description "none";
+    }
+    grouping connectivity-service {
+        list end-point {
+            key 'local-id';
+            min-elements 2;
+            uses connectivity-service-end-point;
+            description "none";
+        }
+        list connection {
+            uses connection-ref;
+            key 'connection-uuid';
+            config false;
+            description "none";
+        }
+        uses tapi-common:service-spec;
+        uses connectivity-constraint;
+        uses tapi-path-computation:routing-constraint;
+        uses tapi-path-computation:topology-constraint;
+        uses resilience-constraint;
+        uses tapi-common:admin-state-pac;
+        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 connectivity-service-end-point {
+        leaf layer-protocol-name {
+            type tapi-common:layer-protocol-name;
+            description "none";
+        }
+        leaf layer-protocol-qualifier {
+            type tapi-common:layer-protocol-qualifier;
+            description "none";
+        }
+        container service-interface-point {
+            uses tapi-common:service-interface-point-ref;
+            description "none";
+        }
+        list connection-end-point {
+            uses connection-end-point-ref;
+            key 'topology-uuid node-uuid node-edge-point-uuid connection-end-point-uuid';
+            config false;
+            description "none";
+        }
+        container capacity {
+            uses tapi-common:capacity;
+            description "none";
+        }
+        leaf direction {
+            type tapi-common:port-direction;
+            description "The orientation of defined flow at the EndPoint.";
+        }
+        leaf role {
+            type tapi-common:port-role;
+            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 protection-role {
+            type protection-role;
+            description "To specify the protection role of this Port when create or update ConnectivityService.";
+        }
+        uses tapi-common:local-class;
+        uses tapi-common:admin-state-pac;
+        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 route {
+        list connection-end-point {
+            uses connection-end-point-ref;
+            key 'topology-uuid node-uuid node-edge-point-uuid connection-end-point-uuid';
+            config false;
+            min-elements 2;
+            description "none";
+        }
+        uses tapi-common:local-class;
+        description "The FC Route (FcRoute) object class models the individual routes of an FC.
+            The route of an FC object is represented by a list of FCs at a lower level.
+            Note that depending on the service supported by an FC, an the FC can have multiple routes.";
+    }
+    grouping connectivity-context {
+        list connectivity-service {
+            key 'uuid';
+            uses connectivity-service;
+            description "none";
+        }
+        list connection {
+            key 'uuid';
+            config false;
+            uses connection;
+            description "none";
+        }
+        description "none";
+    }
+    grouping switch {
+        list selected-connection-end-point {
+            uses connection-end-point-ref;
+            key 'topology-uuid node-uuid node-edge-point-uuid connection-end-point-uuid';
+            min-elements 1;
+            description "none";
+        }
+        list selected-route {
+            uses route-ref;
+            key 'connection-uuid route-local-id';
+            min-elements 1;
+            description "none";
+        }
+        leaf selection-control {
+            type selection-control;
+            description "Degree of administrative control applied to the switch selection.";
+        }
+        leaf selection-reason {
+            type selection-reason;
+            config false;
+            description "The reason for the current switch selection.";
+        }
+        leaf switch-direction {
+            type tapi-common:port-direction;
+            description "Indicates whether the switch selects from ingress to the FC or to egress of the FC, or both.";
+        }
+        uses tapi-common:local-class;
+        description "The class models the switched forwarding of traffic (traffic flow) between FcPorts (ConnectionEndPoints) and is present where there is protection functionality in the FC (Connection).
+            If an FC exposes protection (having two or more FcPorts that provide alternative identical inputs/outputs), the FC will have one or more associated FcSwitch objects to represent the alternative flow choices visible at the edge of the FC.
+            The FC switch represents and defines a protection switch structure encapsulated in the FC.
+            Essentially performs one of the functions of the Protection Group in a traditional model. It associates to 2 or more FcPorts each playing the role of a Protection Unit.
+            One or more protection, i.e. standby/backup, FcPorts provide protection for one or more working (i.e. regular/main/preferred) FcPorts where either protection or working can feed one or more protected FcPort.
+            The switch may be used in revertive or non-revertive (symmetric) mode. When in revertive mode it may define a waitToRestore time.
+            It may be used in one of several modes including source switch, destination switched, source and destination switched etc (covering cases such as 1+1 and 1:1).
+            It may be locked out (prevented from switching), force switched or manual switched.
+            It will indicate switch state and change of state.
+            The switch can be switched away from all sources such that it becomes open and hence two coordinated switches can both feed the same LTP so long as at least one of the two is switched away from all sources (is 'open').
+            The ability for a Switch to be 'high impedance' allows bidirectional ForwardingConstructs to be overlaid on the same bidirectional LTP where the appropriate control is enabled to prevent signal conflict.
+            This ability allows multiple alternate routes to be present that otherwise would be in conflict.";
+    }
+    grouping switch-control {
+        list sub-switch-control {
+            uses switch-control-ref;
+            key 'connection-uuid switch-control-uuid';
+            description "none";
+        }
+        list switch {
+            key 'local-id';
+            uses switch;
+            description "none";
+        }
+        uses tapi-common:resource-spec;
+        uses resilience-constraint;
+        description "Represents the capability to control and coordinate switches, to add/delete/modify FCs and to add/delete/modify LTPs/LPs so as to realize a protection scheme.";
+    }
+    grouping resilience-constraint {
+        container resilience-type {
+            uses tapi-topology:resilience-type;
+            description "none";
+        }
+        leaf restoration-coordinate-type {
+            type coordinate-type;
+            description " The coordination mechanism between multi-layers.";
+        }
+        leaf restore-priority {
+            type uint64;
+            description "none";
+        }
+        leaf reversion-mode {
+            type reversion-mode;
+            description "Indcates whether the protection scheme is revertive or non-revertive.";
+        }
+        leaf wait-to-revert-time {
+            type uint64;
+            default "15";
+            description "If the protection system is revertive, this attribute specifies the time, in minutes, to wait after a fault clears on a higher priority (preferred) resource before reverting to the preferred resource.";
+        }
+        leaf hold-off-time {
+            type uint64;
+            description "This attribute indicates the time, in milliseconds, between declaration of signal degrade or signal fail, and the initialization of the protection switching algorithm.";
+        }
+        leaf is-lock-out {
+            type boolean;
+            description "The resource is configured to temporarily not be available for use in the protection scheme(s) it is part of.
+                This overrides all other protection control states including forced.
+                If the item is locked out then it cannot be used under any circumstances.
+                Note: Only relevant when part of a protection scheme.";
+        }
+        leaf is-frozen {
+            type boolean;
+            description "Temporarily prevents any switch action to be taken and, as such, freezes the current state.
+                Until the freeze is cleared, additional near-end external commands are rejected and fault condition changes and received APS messages are ignored.
+                All administrative controls of any aspect of protection are rejected.";
+        }
+        leaf is-coordinated-switching-both-ends {
+            type boolean;
+            description "Is operating such that switching at both ends of each flow acorss the FC is coordinated at both ingress and egress ends.";
+        }
+        leaf max-switch-times {
+            type uint64;
+            description "Used to limit the maximum swtich times. When work fault disappears , and traffic return to the original work path, switch counter reset.";
+        }
+        leaf-list preferred-restoration-layer {
+            type tapi-common:layer-protocol-name;
+            description "Indicate which layer this resilience parameters package configured for.";
+        }
+        description "A list of control parameters to apply to a switch.";
+    }
+    grouping cep-list {
+        list connection-end-point {
+            key 'uuid';
+            uses connection-end-point;
+            description "none";
+        }
+        description "none";
+    }
+
+   /**************************
+    * package type-definitions
+    **************************/
+    typedef service-type {
+        type enumeration {
+            enum POINT_TO_POINT_CONNECTIVITY {
+                description "none";
+            }
+            enum POINT_TO_MULTIPOINT_CONNECTIVITY {
+                description "none";
+            }
+            enum MULTIPOINT_CONNECTIVITY {
+                description "none";
+            }
+            enum ROOTED_MULTIPOINT_CONNECTIVITY {
+                description "none";
+            }
+        }
+        description "none";
+    }
+    typedef reversion-mode {
+        type enumeration {
+            enum REVERTIVE {
+                description "An FC switched to a lower priority (non-preferred) resource will revert to a higher priority (preferred) resource when that recovers (potentially after some hold-off time).";
+            }
+            enum NON-REVERTIVE {
+                description "An FC switched to a lower priority (non-preferred) resource will not revert to a higher priority (preferred) resource when that recovers.";
+            }
+        }
+        description "The reversion mode associated with protection.";
+    }
+    typedef selection-control {
+        type enumeration {
+            enum LOCK_OUT {
+                description "The resource is configured to temporarily not be available for use in the protection scheme(s) it is part of.
+                    This overrides all other protection control states including forced.
+                    If the item is locked out then it cannot be used under any circumstances.
+                    Note: Only relevant when part of a protection scheme.";
+            }
+            enum NORMAL {
+                description "none";
+            }
+            enum MANUAL {
+                description "none";
+            }
+            enum FORCED {
+                description "none";
+            }
+        }
+        description "Possible degrees of administrative control applied to the Route selection.";
+    }
+    typedef selection-reason {
+        type enumeration {
+            enum LOCKOUT {
+                description "none";
+            }
+            enum NORMAL {
+                description "none";
+            }
+            enum MANUAL {
+                description "none";
+            }
+            enum FORCED {
+                description "none";
+            }
+            enum WAIT_TO_REVERT {
+                description "none";
+            }
+            enum SIGNAL_DEGRADE {
+                description "none";
+            }
+            enum SIGNAL_FAIL {
+                description "none";
+            }
+        }
+        description "The cause of the current route selection.";
+    }
+    typedef coordinate-type {
+        type enumeration {
+            enum NO_COORDINATE {
+                description "none";
+            }
+            enum HOLD_OFF_TIME {
+                description "none";
+            }
+            enum WAIT_FOR_NOTIFICATION {
+                description "none";
+            }
+        }
+        description "none";
+    }
+    typedef protection-role {
+        type enumeration {
+            enum WORK {
+                description "none";
+            }
+            enum PROTECT {
+                description "none";
+            }
+            enum PROTECTED {
+                description "none";
+            }
+            enum NA {
+                description "none";
+            }
+            enum WORK_RESTORE {
+                description "none";
+            }
+            enum PROTECT_RESTORE {
+                description "none";
+            }
+        }
+        description "none";
+    }
+
+   /**************************
+    * package interfaces
+    **************************/
+    rpc get-connection-details {
+        description "none";
+        input {
+            leaf connection-id-or-name {
+                type string;
+                description "none";
+            }
+        }
+        output {
+            container connection {
+                uses connection;
+                description "none";
+            }
+        }
+    }
+    rpc get-connectivity-service-list {
+        description "none";
+        output {
+            list service {
+                key 'uuid';
+                uses connectivity-service;
+                description "none";
+            }
+        }
+    }
+    rpc get-connectivity-service-details {
+        description "none";
+        input {
+            leaf service-id-or-name {
+                type string;
+                description "none";
+            }
+        }
+        output {
+            container service {
+                uses connectivity-service;
+                description "none";
+            }
+        }
+    }
+    rpc create-connectivity-service {
+        description "none";
+        input {
             list end-point {
                 key 'local-id';
                 min-elements 2;
                 uses connectivity-service-end-point;
                 description "none";
             }
-            list connection {
-                uses connection-ref;
-                key 'connection-uuid';
-                config false;
+            container connectivity-constraint {
+                uses connectivity-constraint;
                 description "none";
             }
-            uses tapi-common:service-spec;
-            uses connectivity-constraint;
-            uses tapi-path-computation:routing-constraint;
-            uses tapi-path-computation:topology-constraint;
-            uses resilience-constraint;
-            uses tapi-common:admin-state-pac;
-            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.";
+            container routing-constraint {
+                uses tapi-path-computation:routing-constraint;
+                description "none";
+            }
+            container topology-constraint {
+                uses tapi-path-computation:topology-constraint;
+                description "none";
+            }
+            container resilience-constraint {
+                uses resilience-constraint;
+                description "none";
+            }
+            leaf state {
+                type string;
+                description "none";
+            }
         }
-        grouping connectivity-service-end-point {
-            leaf layer-protocol-name {
-                type tapi-common:layer-protocol-name;
-                description "none";
-            }
-            leaf layer-protocol-qualifier {
-                type tapi-common:layer-protocol-qualifier;
-                description "none";
-            }
-            container service-interface-point {
-                uses tapi-common:service-interface-point-ref;
-                description "none";
-            }
-            list connection-end-point {
-            	uses connection-end-point-ref;
-                key 'topology-uuid node-uuid node-edge-point-uuid connection-end-point-uuid';
-                config false;
-                description "none";
-            }
-            container capacity {
-                uses tapi-common:capacity;
-                description "none";
-            }
-            leaf direction {
-                type tapi-common:port-direction;
-                description "The orientation of defined flow at the EndPoint.";
-            }
-            leaf role {
-                type tapi-common:port-role;
-                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 protection-role {
-                type protection-role;
-                description "To specify the protection role of this Port when create or update ConnectivityService.";
-            }
-            uses tapi-common:local-class;
-            uses tapi-common:admin-state-pac;
-            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 route {
-            list connection-end-point {
-                uses connection-end-point-ref;
-                key 'topology-uuid node-uuid node-edge-point-uuid connection-end-point-uuid';
-                config false;
-                min-elements 2;
-                description "none";
-            }
-            uses tapi-common:local-class;
-            description "The FC Route (FcRoute) object class models the individual routes of an FC. 
-                The route of an FC object is represented by a list of FCs at a lower level. 
-                Note that depending on the service supported by an FC, an the FC can have multiple routes.";
-        }
-        grouping connectivity-context {
-            list connectivity-service {
-                key 'uuid';
+        output {
+            container service {
                 uses connectivity-service;
                 description "none";
             }
-            list connection {
-                key 'uuid';
-                config false;
-                uses connection;
-                description "none";
-            }
-            description "none";
         }
-        grouping switch {
-            list selected-connection-end-point {
-                uses connection-end-point-ref;
-                key 'topology-uuid node-uuid node-edge-point-uuid connection-end-point-uuid';
-                min-elements 1;
+    }
+    rpc update-connectivity-service {
+        description "none";
+        input {
+            leaf service-id-or-name {
+                type string;
                 description "none";
             }
-            list selected-route {
-                uses route-ref;
-                key 'connection-uuid route-local-id';
-                min-elements 1;
-                description "none";
-            }
-            leaf selection-control {
-                type selection-control;
-                description "Degree of administrative control applied to the switch selection.";
-            }
-            leaf selection-reason {
-                type selection-reason;
-                config false;
-                description "The reason for the current switch selection.";
-            }
-            leaf switch-direction {
-                type tapi-common:port-direction;
-                description "Indicates whether the switch selects from ingress to the FC or to egress of the FC, or both.";
-            }
-            uses tapi-common:local-class;
-            description "The class models the switched forwarding of traffic (traffic flow) between FcPorts (ConnectionEndPoints) and is present where there is protection functionality in the FC (Connection). 
-                If an FC exposes protection (having two or more FcPorts that provide alternative identical inputs/outputs), the FC will have one or more associated FcSwitch objects to represent the alternative flow choices visible at the edge of the FC.
-                The FC switch represents and defines a protection switch structure encapsulated in the FC. 
-                Essentially performs one of the functions of the Protection Group in a traditional model. It associates to 2 or more FcPorts each playing the role of a Protection Unit. 
-                One or more protection, i.e. standby/backup, FcPorts provide protection for one or more working (i.e. regular/main/preferred) FcPorts where either protection or working can feed one or more protected FcPort.
-                The switch may be used in revertive or non-revertive (symmetric) mode. When in revertive mode it may define a waitToRestore time.
-                It may be used in one of several modes including source switch, destination switched, source and destination switched etc (covering cases such as 1+1 and 1:1).
-                It may be locked out (prevented from switching), force switched or manual switched.
-                It will indicate switch state and change of state.
-                The switch can be switched away from all sources such that it becomes open and hence two coordinated switches can both feed the same LTP so long as at least one of the two is switched away from all sources (is 'open').
-                The ability for a Switch to be 'high impedance' allows bidirectional ForwardingConstructs to be overlaid on the same bidirectional LTP where the appropriate control is enabled to prevent signal conflict.
-                This ability allows multiple alternate routes to be present that otherwise would be in conflict.";
-        }
-        grouping switch-control {
-            list sub-switch-control {
-                uses switch-control-ref;
-                key 'connection-uuid switch-control-uuid';
-                description "none";
-            }
-            list switch {
+            list end-point {
                 key 'local-id';
-                uses switch;
+                uses connectivity-service-end-point;
                 description "none";
             }
-            uses tapi-common:resource-spec;
-            uses resilience-constraint;
-            description "Represents the capability to control and coordinate switches, to add/delete/modify FCs and to add/delete/modify LTPs/LPs so as to realize a protection scheme.";
+            container connectivity-constraint {
+                uses connectivity-constraint;
+                description "none";
+            }
+            container routing-constraint {
+                uses tapi-path-computation:routing-constraint;
+                description "none";
+            }
+            container topology-constraint {
+                uses tapi-path-computation:topology-constraint;
+                description "none";
+            }
+            container resilience-constraint {
+                uses resilience-constraint;
+                description "none";
+            }
+            leaf state {
+                type string;
+                description "none";
+            }
         }
-        grouping resilience-constraint {
-            container resilience-type {
-                uses tapi-topology:resilience-type;
+        output {
+            container service {
+                uses connectivity-service;
                 description "none";
             }
-            leaf restoration-coordinate-type {
-                type coordinate-type;
-                description " The coordination mechanism between multi-layers.";
-            }
-            leaf restore-priority {
-                type uint64;
-                description "none";
-            }
-            leaf reversion-mode {
-                type reversion-mode;
-                description "Indcates whether the protection scheme is revertive or non-revertive.";
-            }
-            leaf wait-to-revert-time {
-                type uint64;
-                default "15";
-                description "If the protection system is revertive, this attribute specifies the time, in minutes, to wait after a fault clears on a higher priority (preferred) resource before reverting to the preferred resource.";
-            }
-            leaf hold-off-time {
-                type uint64;
-                description "This attribute indicates the time, in milliseconds, between declaration of signal degrade or signal fail, and the initialization of the protection switching algorithm.";
-            }
-            leaf is-lock-out {
-                type boolean;
-                description "The resource is configured to temporarily not be available for use in the protection scheme(s) it is part of.
-                    This overrides all other protection control states including forced.
-                    If the item is locked out then it cannot be used under any circumstances.
-                    Note: Only relevant when part of a protection scheme.";
-            }
-            leaf is-frozen {
-                type boolean;
-                description "Temporarily prevents any switch action to be taken and, as such, freezes the current state. 
-                    Until the freeze is cleared, additional near-end external commands are rejected and fault condition changes and received APS messages are ignored.
-                    All administrative controls of any aspect of protection are rejected.";
-            }
-            leaf is-coordinated-switching-both-ends {
-                type boolean;
-                description "Is operating such that switching at both ends of each flow acorss the FC is coordinated at both ingress and egress ends.";
-            }
-            leaf max-switch-times {
-                type uint64;
-                description "Used to limit the maximum swtich times. When work fault disappears , and traffic return to the original work path, switch counter reset.";
-            }
-            leaf-list preferred-restoration-layer {
-                type tapi-common:layer-protocol-name;
-                description "Indicate which layer this resilience parameters package configured for.";
-            }
-            description "A list of control parameters to apply to a switch.";
         }
-        grouping cep-list {
-            list connection-end-point {
-                key 'uuid';
+    }
+    rpc delete-connectivity-service {
+        description "none";
+        input {
+            leaf service-id-or-name {
+                type string;
+                description "none";
+            }
+        }
+    }
+    rpc get-connection-end-point-details {
+        description "none";
+        input {
+            leaf topology-id-or-name {
+                type string;
+                description "none";
+            }
+            leaf node-id-or-name {
+                type string;
+                description "none";
+            }
+            leaf nep-id-or-name {
+                type string;
+                description "none";
+            }
+            leaf cep-id-or-name {
+                type string;
+                description "none";
+            }
+        }
+        output {
+            container connection-end-point {
                 uses connection-end-point;
                 description "none";
             }
-            description "none";
         }
-
-    /***********************
-    * package type-definitions
-    **********************/ 
-        typedef service-type {
-            type enumeration {
-                enum POINT_TO_POINT_CONNECTIVITY {
-                    description "none";
-                }
-                enum POINT_TO_MULTIPOINT_CONNECTIVITY {
-                    description "none";
-                }
-                enum MULTIPOINT_CONNECTIVITY {
-                    description "none";
-                }
-                enum ROOTED_MULTIPOINT_CONNECTIVITY {
-                    description "none";
-                }
-            }
-            description "none";
-        }
-        typedef reversion-mode {
-            type enumeration {
-                enum REVERTIVE {
-                    description "An FC switched to a lower priority (non-preferred) resource will revert to a higher priority (preferred) resource when that recovers (potentially after some hold-off time).";
-                }
-                enum NON-REVERTIVE {
-                    description "An FC switched to a lower priority (non-preferred) resource will not revert to a higher priority (preferred) resource when that recovers.";
-                }
-            }
-            description "The reversion mode associated with protection.";
-        }
-        typedef selection-control {
-            type enumeration {
-                enum LOCK_OUT {
-                    description "The resource is configured to temporarily not be available for use in the protection scheme(s) it is part of.
-                        This overrides all other protection control states including forced.
-                        If the item is locked out then it cannot be used under any circumstances.
-                        Note: Only relevant when part of a protection scheme.";
-                }
-                enum NORMAL {
-                    description "none";
-                }
-                enum MANUAL {
-                    description "none";
-                }
-                enum FORCED {
-                    description "none";
-                }
-            }
-            description "Possible degrees of administrative control applied to the Route selection.";
-        }
-        typedef selection-reason {
-            type enumeration {
-                enum LOCKOUT {
-                    description "none";
-                }
-                enum NORMAL {
-                    description "none";
-                }
-                enum MANUAL {
-                    description "none";
-                }
-                enum FORCED {
-                    description "none";
-                }
-                enum WAIT_TO_REVERT {
-                    description "none";
-                }
-                enum SIGNAL_DEGRADE {
-                    description "none";
-                }
-                enum SIGNAL_FAIL {
-                    description "none";
-                }
-            }
-            description "The cause of the current route selection.";
-        }
-        typedef coordinate-type {
-            type enumeration {
-                enum NO_COORDINATE {
-                    description "none";
-                }
-                enum HOLD_OFF_TIME {
-                    description "none";
-                }
-                enum WAIT_FOR_NOTIFICATION {
-                    description "none";
-                }
-            }
-            description "none";
-        }
-        typedef protection-role {
-            type enumeration {
-                enum WORK {
-                    description "none";
-                }
-                enum PROTECT {
-                    description "none";
-                }
-                enum PROTECTED {
-                    description "none";
-                }
-                enum NA {
-                    description "none";
-                }
-                enum WORK_RESTORE {
-                    description "none";
-                }
-                enum PROTECT_RESTORE {
-                    description "none";
-                }
-            }
-            description "none";
-        }
-
-    /***********************
-    * package interfaces
-    **********************/ 
-        rpc get-connection-details {
-            description "none";
-            input {
-                leaf connection-id-or-name {
-                    type string;
-                    description "none";
-                }
-            }
-            output {
-                container connection {
-                    uses connection;
-                    description "none";
-                }
-            }
-        }
-        rpc get-connectivity-service-list {
-            description "none";
-            output {
-                list service {
-                	key 'uuid';
-                    uses connectivity-service;
-                    description "none";
-                }
-            }
-        }
-        rpc get-connectivity-service-details {
-            description "none";
-            input {
-                leaf service-id-or-name {
-                    type string;
-                    description "none";
-                }
-            }
-            output {
-                container service {
-                    uses connectivity-service;
-                    description "none";
-                }
-            }
-        }
-        rpc create-connectivity-service {
-            description "none";
-            input {
-                list end-point {
-                    key 'local-id';
-                    min-elements 2;
-                    uses connectivity-service-end-point;
-                    description "none";
-                }
-                container connectivity-constraint {
-                    uses connectivity-constraint;
-                    description "none";
-                }
-                container routing-constraint {
-                    uses tapi-path-computation:routing-constraint;
-                    description "none";
-                }
-                container topology-constraint {
-                    uses tapi-path-computation:topology-constraint;
-                    description "none";
-                }
-                container resilience-constraint {
-                    uses resilience-constraint;
-                    description "none";
-                }
-                leaf state {
-                    type string;
-                    description "none";
-                }
-            }
-            output {
-                container service {
-                    uses connectivity-service;
-                    description "none";
-                }
-            }
-        }
-        rpc update-connectivity-service {
-            description "none";
-            input {
-                leaf service-id-or-name {
-                    type string;
-                    description "none";
-                }
-                list end-point {
-                	key 'local-id';
-                    uses connectivity-service-end-point;
-                    description "none";
-                }
-                container connectivity-constraint {
-                    uses connectivity-constraint;
-                    description "none";
-                }
-                container routing-constraint {
-                    uses tapi-path-computation:routing-constraint;
-                    description "none";
-                }
-                container topology-constraint {
-                    uses tapi-path-computation:topology-constraint;
-                    description "none";
-                }
-                container resilience-constraint {
-                    uses resilience-constraint;
-                    description "none";
-                }
-                leaf state {
-                    type string;
-                    description "none";
-                }
-            }
-            output {
-                container service {
-                    uses connectivity-service;
-                    description "none";
-                }
-            }
-        }
-        rpc delete-connectivity-service {
-            description "none";
-            input {
-                leaf service-id-or-name {
-                    type string;
-                    description "none";
-                }
-            }
-        }
-        rpc get-connection-end-point-details {
-            description "none";
-            input {
-                leaf topology-id-or-name {
-                    type string;
-                    description "none";
-                }
-                leaf node-id-or-name {
-                    type string;
-                    description "none";
-                }
-                leaf nep-id-or-name {
-                    type string;
-                    description "none";
-                }
-                leaf cep-id-or-name {
-                    type string;
-                    description "none";
-                }
-            }
-            output {
-                container connection-end-point {
-                    uses connection-end-point;
-                    description "none";
-                }
-            }
-        }
-
+    }
 }
