diff --git a/models/arista b/models/arista
new file mode 160000
index 0000000000000000000000000000000000000000..42aaddb9b62c18f6a4a50dce49df9fc2c4b84cb2
--- /dev/null
+++ b/models/arista
@@ -0,0 +1 @@
+Subproject commit 42aaddb9b62c18f6a4a50dce49df9fc2c4b84cb2
diff --git a/models/tapi/ietf-yang-types.yang b/models/tapi/ietf-yang-types.yang
new file mode 100644
index 0000000000000000000000000000000000000000..bf2fd5027c9a3ca7ee600c4a3a4b620399a9ef60
--- /dev/null
+++ b/models/tapi/ietf-yang-types.yang
@@ -0,0 +1,450 @@
+module ietf-yang-types {
+  namespace "urn:ietf:params:xml:ns:yang:ietf-yang-types";
+  prefix yang;
+
+  organization
+    "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
+  contact
+    "WG Web:   <http://tools.ietf.org/wg/netmod/>
+     WG List:  <mailto:netmod@ietf.org>
+
+     WG Chair: David Kessens
+               <mailto:david.kessens@nsn.com>
+
+     WG Chair: Juergen Schoenwaelder
+               <mailto:j.schoenwaelder@jacobs-university.de>
+
+     Editor:   Juergen Schoenwaelder
+               <mailto:j.schoenwaelder@jacobs-university.de>";
+  description
+    "This module contains a collection of generally useful derived
+     YANG data types.
+
+     Copyright (c) 2013 IETF Trust and the persons identified as
+     authors of the code.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD License
+     set forth in Section 4.c of the IETF Trust's Legal Provisions
+     Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC 6991; see
+     the RFC itself for full legal notices.";
+
+  revision 2013-07-15 {
+    description
+      "This revision adds the following new data types:
+       - yang-identifier
+       - hex-string
+       - uuid
+       - dotted-quad";
+    reference "RFC 6991: Common YANG Data Types";
+  }
+  revision 2010-09-24 {
+    description
+      "Initial revision.";
+    reference "RFC 6021: Common YANG Data Types";
+  }
+
+  typedef counter32 {
+    type uint32;
+    description
+      "The counter32 type represents a non-negative integer
+       that monotonically increases until it reaches a
+       maximum value of 2^32-1 (4294967295 decimal), when it
+       wraps around and starts increasing again from zero.
+
+       Counters have no defined 'initial' value, and thus, a
+       single value of a counter has (in general) no information
+       content.  Discontinuities in the monotonically increasing
+       value normally occur at re-initialization of the
+       management system, and at other times as specified in the
+       description of a schema node using this type.  If such
+       other times can occur, for example, the creation of
+       a schema node of type counter32 at times other than
+       re-initialization, then a corresponding schema node
+       should be defined, with an appropriate type, to indicate
+       the last discontinuity.
+
+       The counter32 type should not be used for configuration
+       schema nodes.  A default statement SHOULD NOT be used in
+       combination with the type counter32.
+
+       In the value set and its semantics, this type is equivalent
+       to the Counter32 type of the SMIv2.";
+    reference
+      "RFC 2578: Structure of Management Information Version 2
+                 (SMIv2)";
+  }
+
+  typedef zero-based-counter32 {
+    type yang:counter32;
+    default "0";
+    description
+      "The zero-based-counter32 type represents a counter32
+       that has the defined 'initial' value zero.
+
+       A schema node of this type will be set to zero (0) on creation
+       and will thereafter increase monotonically until it reaches
+       a maximum value of 2^32-1 (4294967295 decimal), when it
+       wraps around and starts increasing again from zero.
+
+       Provided that an application discovers a new schema node
+       of this type within the minimum time to wrap, it can use the
+       'initial' value as a delta.  It is important for a management
+       station to be aware of this minimum time and the actual time
+       between polls, and to discard data if the actual time is too
+       long or there is no defined minimum time.
+
+       In the value set and its semantics, this type is equivalent
+       to the ZeroBasedCounter32 textual convention of the SMIv2.";
+    reference
+      "RFC 4502: Remote Network Monitoring Management Information
+                 Base Version 2";
+  }
+
+  typedef counter64 {
+    type uint64;
+    description
+      "The counter64 type represents a non-negative integer
+       that monotonically increases until it reaches a
+       maximum value of 2^64-1 (18446744073709551615 decimal),
+       when it wraps around and starts increasing again from zero.
+
+       Counters have no defined 'initial' value, and thus, a
+       single value of a counter has (in general) no information
+       content.  Discontinuities in the monotonically increasing
+       value normally occur at re-initialization of the
+       management system, and at other times as specified in the
+       description of a schema node using this type.  If such
+       other times can occur, for example, the creation of
+       a schema node of type counter64 at times other than
+       re-initialization, then a corresponding schema node
+       should be defined, with an appropriate type, to indicate
+       the last discontinuity.
+
+       The counter64 type should not be used for configuration
+       schema nodes.  A default statement SHOULD NOT be used in
+       combination with the type counter64.
+
+       In the value set and its semantics, this type is equivalent
+       to the Counter64 type of the SMIv2.";
+    reference
+      "RFC 2578: Structure of Management Information Version 2
+                 (SMIv2)";
+  }
+
+  typedef zero-based-counter64 {
+    type yang:counter64;
+    default "0";
+    description
+      "The zero-based-counter64 type represents a counter64 that
+       has the defined 'initial' value zero.
+
+
+
+
+       A schema node of this type will be set to zero (0) on creation
+       and will thereafter increase monotonically until it reaches
+       a maximum value of 2^64-1 (18446744073709551615 decimal),
+       when it wraps around and starts increasing again from zero.
+
+       Provided that an application discovers a new schema node
+       of this type within the minimum time to wrap, it can use the
+       'initial' value as a delta.  It is important for a management
+       station to be aware of this minimum time and the actual time
+       between polls, and to discard data if the actual time is too
+       long or there is no defined minimum time.
+
+       In the value set and its semantics, this type is equivalent
+       to the ZeroBasedCounter64 textual convention of the SMIv2.";
+    reference
+      "RFC 2856: Textual Conventions for Additional High Capacity
+                 Data Types";
+  }
+
+  typedef gauge32 {
+    type uint32;
+    description
+      "The gauge32 type represents a non-negative integer, which
+       may increase or decrease, but shall never exceed a maximum
+       value, nor fall below a minimum value.  The maximum value
+       cannot be greater than 2^32-1 (4294967295 decimal), and
+       the minimum value cannot be smaller than 0.  The value of
+       a gauge32 has its maximum value whenever the information
+       being modeled is greater than or equal to its maximum
+       value, and has its minimum value whenever the information
+       being modeled is smaller than or equal to its minimum value.
+       If the information being modeled subsequently decreases
+       below (increases above) the maximum (minimum) value, the
+       gauge32 also decreases (increases).
+
+       In the value set and its semantics, this type is equivalent
+       to the Gauge32 type of the SMIv2.";
+    reference
+      "RFC 2578: Structure of Management Information Version 2
+                 (SMIv2)";
+  }
+
+  typedef gauge64 {
+    type uint64;
+    description
+      "The gauge64 type represents a non-negative integer, which
+       may increase or decrease, but shall never exceed a maximum
+       value, nor fall below a minimum value.  The maximum value
+       cannot be greater than 2^64-1 (18446744073709551615), and
+       the minimum value cannot be smaller than 0.  The value of
+       a gauge64 has its maximum value whenever the information
+       being modeled is greater than or equal to its maximum
+       value, and has its minimum value whenever the information
+       being modeled is smaller than or equal to its minimum value.
+       If the information being modeled subsequently decreases
+       below (increases above) the maximum (minimum) value, the
+       gauge64 also decreases (increases).
+
+       In the value set and its semantics, this type is equivalent
+       to the CounterBasedGauge64 SMIv2 textual convention defined
+       in RFC 2856";
+    reference
+      "RFC 2856: Textual Conventions for Additional High Capacity
+                 Data Types";
+  }
+
+  typedef object-identifier {
+    type string {
+      pattern '(([0-1](\.[1-3]?[0-9]))|(2\.(0|([1-9]\d*))))(\.(0|([1-9]\d*)))*';
+    }
+    description
+      "The object-identifier type represents administratively
+       assigned names in a registration-hierarchical-name tree.
+
+       Values of this type are denoted as a sequence of numerical
+       non-negative sub-identifier values.  Each sub-identifier
+       value MUST NOT exceed 2^32-1 (4294967295).  Sub-identifiers
+       are separated by single dots and without any intermediate
+       whitespace.
+
+       The ASN.1 standard restricts the value space of the first
+       sub-identifier to 0, 1, or 2.  Furthermore, the value space
+       of the second sub-identifier is restricted to the range
+       0 to 39 if the first sub-identifier is 0 or 1.  Finally,
+       the ASN.1 standard requires that an object identifier
+       has always at least two sub-identifiers.  The pattern
+       captures these restrictions.
+
+       Although the number of sub-identifiers is not limited,
+       module designers should realize that there may be
+       implementations that stick with the SMIv2 limit of 128
+       sub-identifiers.
+
+       This type is a superset of the SMIv2 OBJECT IDENTIFIER type
+       since it is not restricted to 128 sub-identifiers.  Hence,
+       this type SHOULD NOT be used to represent the SMIv2 OBJECT
+       IDENTIFIER type; the object-identifier-128 type SHOULD be
+       used instead.";
+    reference
+      "ISO9834-1: Information technology -- Open Systems
+       Interconnection -- Procedures for the operation of OSI
+       Registration Authorities: General procedures and top
+       arcs of the ASN.1 Object Identifier tree";
+  }
+
+  typedef object-identifier-128 {
+    type object-identifier {
+      pattern '\d*(\.\d*){1,127}';
+    }
+    description
+      "This type represents object-identifiers restricted to 128
+       sub-identifiers.
+
+       In the value set and its semantics, this type is equivalent
+       to the OBJECT IDENTIFIER type of the SMIv2.";
+    reference
+      "RFC 2578: Structure of Management Information Version 2
+                 (SMIv2)";
+  }
+
+  typedef yang-identifier {
+    type string {
+      length "1..max";
+      pattern '[a-zA-Z_][a-zA-Z0-9\-_.]*';
+      pattern '.|..|[^xX].*|.[^mM].*|..[^lL].*';
+    }
+    description
+      "A YANG identifier string as defined by the 'identifier'
+       rule in Section 12 of RFC 6020.  An identifier must
+       start with an alphabetic character or an underscore
+       followed by an arbitrary sequence of alphabetic or
+       numeric characters, underscores, hyphens, or dots.
+
+       A YANG identifier MUST NOT start with any possible
+       combination of the lowercase or uppercase character
+       sequence 'xml'.";
+    reference
+      "RFC 6020: YANG - A Data Modeling Language for the Network
+                 Configuration Protocol (NETCONF)";
+  }
+
+  typedef date-and-time {
+    type string {
+      pattern '\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[\+\-]\d{2}:\d{2})';
+    }
+    description
+      "The date-and-time type is a profile of the ISO 8601
+       standard for representation of dates and times using the
+       Gregorian calendar.  The profile is defined by the
+       date-time production in Section 5.6 of RFC 3339.
+
+       The date-and-time type is compatible with the dateTime XML
+       schema type with the following notable exceptions:
+
+       (a) The date-and-time type does not allow negative years.
+
+       (b) The date-and-time time-offset -00:00 indicates an unknown
+           time zone (see RFC 3339) while -00:00 and +00:00 and Z
+           all represent the same time zone in dateTime.
+
+       (c) The canonical format (see below) of data-and-time values
+           differs from the canonical format used by the dateTime XML
+           schema type, which requires all times to be in UTC using
+           the time-offset 'Z'.
+
+       This type is not equivalent to the DateAndTime textual
+       convention of the SMIv2 since RFC 3339 uses a different
+       separator between full-date and full-time and provides
+       higher resolution of time-secfrac.
+
+       The canonical format for date-and-time values with a known time
+       zone uses a numeric time zone offset that is calculated using
+       the device's configured known offset to UTC time.  A change of
+       the device's offset to UTC time will cause date-and-time values
+       to change accordingly.  Such changes might happen periodically
+       in case a server follows automatically daylight saving time
+       (DST) time zone offset changes.  The canonical format for
+       date-and-time values with an unknown time zone (usually
+       referring to the notion of local time) uses the time-offset
+       -00:00.";
+    reference
+      "RFC 3339: Date and Time on the Internet: Timestamps
+       RFC 2579: Textual Conventions for SMIv2
+       XSD-TYPES: XML Schema Part 2: Datatypes Second Edition";
+  }
+
+  typedef timeticks {
+    type uint32;
+    description
+      "The timeticks type represents a non-negative integer that
+       represents the time, modulo 2^32 (4294967296 decimal), in
+       hundredths of a second between two epochs.  When a schema
+       node is defined that uses this type, the description of
+       the schema node identifies both of the reference epochs.
+
+       In the value set and its semantics, this type is equivalent
+       to the TimeTicks type of the SMIv2.";
+    reference
+      "RFC 2578: Structure of Management Information Version 2
+                 (SMIv2)";
+  }
+
+  typedef timestamp {
+    type yang:timeticks;
+    description
+      "The timestamp type represents the value of an associated
+       timeticks schema node at which a specific occurrence
+       happened.  The specific occurrence must be defined in the
+       description of any schema node defined using this type.  When
+       the specific occurrence occurred prior to the last time the
+       associated timeticks attribute was zero, then the timestamp
+       value is zero.  Note that this requires all timestamp values
+       to be reset to zero when the value of the associated timeticks
+       attribute reaches 497+ days and wraps around to zero.
+
+       The associated timeticks schema node must be specified
+       in the description of any schema node using this type.
+
+       In the value set and its semantics, this type is equivalent
+       to the TimeStamp textual convention of the SMIv2.";
+    reference "RFC 2579: Textual Conventions for SMIv2";
+  }
+
+  typedef phys-address {
+    type string {
+      pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?';
+    }
+    description
+      "Represents media- or physical-level addresses represented
+       as a sequence octets, each octet represented by two hexadecimal
+       numbers.  Octets are separated by colons.  The canonical
+       representation uses lowercase characters.
+
+       In the value set and its semantics, this type is equivalent
+       to the PhysAddress textual convention of the SMIv2.";
+    reference "RFC 2579: Textual Conventions for SMIv2";
+  }
+
+  typedef mac-address {
+    type string {
+      pattern '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}';
+    }
+    description
+      "The mac-address type represents an IEEE 802 MAC address.
+       The canonical representation uses lowercase characters.
+
+       In the value set and its semantics, this type is equivalent
+       to the MacAddress textual convention of the SMIv2.";
+    reference
+      "IEEE 802: IEEE Standard for Local and Metropolitan Area
+                 Networks: Overview and Architecture
+       RFC 2579: Textual Conventions for SMIv2";
+  }
+
+  typedef xpath1.0 {
+    type string;
+    description
+      "This type represents an XPATH 1.0 expression.
+
+       When a schema node is defined that uses this type, the
+       description of the schema node MUST specify the XPath
+       context in which the XPath expression is evaluated.";
+    reference "XPATH: XML Path Language (XPath) Version 1.0";
+  }
+
+  typedef hex-string {
+    type string {
+      pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?';
+    }
+    description
+      "A hexadecimal string with octets represented as hex digits
+       separated by colons.  The canonical representation uses
+       lowercase characters.";
+  }
+
+  typedef uuid {
+    type string {
+      pattern '[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}';
+    }
+    description
+      "A Universally Unique IDentifier in the string representation
+       defined in RFC 4122.  The canonical representation uses
+       lowercase characters.
+
+       The following is an example of a UUID in string representation:
+       f81d4fae-7dec-11d0-a765-00a0c91e6bf6
+      ";
+    reference
+      "RFC 4122: A Universally Unique IDentifier (UUID) URN
+                 Namespace";
+  }
+
+  typedef dotted-quad {
+    type string {
+      pattern '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])';
+    }
+    description
+      "An unsigned 32-bit number expressed in the dotted-quad
+       notation, i.e., four octets written as decimal numbers
+       and separated with the '.' (full stop) character.";
+  }
+}
diff --git a/models/tapi/tapi-common@2019-03-31.yang b/models/tapi/tapi-common@2019-03-31.yang
new file mode 100644
index 0000000000000000000000000000000000000000..0d0abe2107f61943a08ca2ad51e80502e4408c55
--- /dev/null
+++ b/models/tapi/tapi-common@2019-03-31.yang
@@ -0,0 +1,671 @@
+module tapi-common {
+    namespace "urn:onf:otcc:yang: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 Common Model definitions.
+        Source: TapiCommon.uml
+        Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved.
+        License: This module is distributed under the Apache License 2.0
+        - 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.";
+    revision 2019-03-31 {
+        description "ONF Transport API version 2.2-RC1.
+                   Changes included in this TAPI release (v2.2) are listed in
+                  <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.2.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.2.0/UML>";
+    }
+    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.1/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>";
+    }
+    /**************************
+    * definitions of references
+    **************************/
+    grouping service-interface-point-ref {
+        leaf service-interface-point-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-common:service-interface-point/tapi-common:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+    
+    /**************************
+    * package object-classes
+    **************************/ 
+    grouping admin-state-pac {
+        leaf administrative-state {
+            type administrative-state;
+            description "The administration of managed objects operates independently of the operability and usage of managed objects and is described by the administrative state attribute. The administrative state is used by the operator to make a resource available for service, or to remove a resource from service.";
+        }
+        leaf operational-state {
+            type operational-state;
+            config false;
+            description "The operational state gives the information about the real capability of a resource to provide or not provide service.";
+        }
+        leaf lifecycle-state {
+            type lifecycle-state;
+            config false;
+            description "Used to track the planned deployment, allocation to clients and withdrawal of resources.";
+        }
+        description "Provides state attributes that are applicable to an entity that can be administered. Such an entity also has operational and lifecycle aspects.";
+    }
+    grouping global-class {
+        leaf uuid {
+            type uuid;
+            description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                An UUID carries no semantics with respect to the purpose or state of the entity.
+                UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+        }
+        list name {
+            key 'value-name';
+            uses name-and-value;
+            description "List of names. This value is unique in some namespace but may change during the life of the entity.
+                A name carries no semantics with respect to the purpose of the entity.";
+        }
+        description "This class serves as the super class for all TAPI entities that can be directly retrieved by their ID. As such, these are first class entities and their ID is expected to be globally unique. ";
+    }
+    grouping lifecycle-state-pac {
+        leaf lifecycle-state {
+            type lifecycle-state;
+            config false;
+            description "Used to track the planned deployment, allocation to clients and withdrawal of resources.";
+        }
+        description "Provides state attributes for an entity that has lifecycle aspects only.";
+    }
+    grouping local-class {
+        leaf local-id {
+            type string;
+            description "An identifier that is unique in the context of the GlobalClass from which it is inseparable.";
+        }
+        list name {
+            key 'value-name';
+            uses name-and-value;
+            description "List of names. This value is unique in some namespace but may change during the life of the entity.
+                A name carries no semantics with respect to the purpose of the entity.";
+        }
+        description "This class serves as the super class for all TAPI entities that are ancillary of first class entities, i.e. their ID is not expected to be globally unique. ";
+    }
+    grouping operational-state-pac {
+        leaf operational-state {
+            type operational-state;
+            config false;
+            description "The operational state gives the information about the real capability of a resource to provide or not provide service.";
+        }
+        leaf lifecycle-state {
+            type lifecycle-state;
+            config false;
+            description "Used to track the planned deployment, allocation to clients and withdrawal of resources.";
+        }
+        description "Provides state attributes that are applicable to an entity that reflects operational aspects. Such an entity is expected to also have lifecycle aspects.";
+    }
+    container context {
+        uses tapi-context;
+        presence "Root container for all TAPI interaction";
+        description "none";
+    }
+    grouping tapi-context {
+        list service-interface-point {
+            key 'uuid';
+            uses service-interface-point;
+            description "none";
+        }
+        uses global-class;
+        description "This object class represents the scope of control that a particular SDN controller has with re-spect to a particular network, (i.e., encompassing a designated set of interconnected (virtual) network elements).
+            This class includes the list of Service Interface Points.";
+    }
+    grouping service-interface-point {
+        leaf layer-protocol-name {
+            type layer-protocol-name;
+            config false;
+            description "Usage of layerProtocolName [>1]  in the ServiceInterfacePoint should be considered experimental";
+        }
+        leaf-list supported-layer-protocol-qualifier {
+            type layer-protocol-qualifier;
+            config false;
+            min-elements 1;
+            description "The supported sub-layer(s) or rate(s) of Layer Protocol.";
+        }
+        leaf direction {
+            type port-direction;
+            description "If direction attribute is missing the SIP instance is to be intended as 'BIDIRECTIONAL'";
+        }
+        uses global-class;
+        uses admin-state-pac;
+        uses capacity-pac;
+        description "A Service Interface Point represents the network-interface-facing aspects of the edge-port functions that access the forwarding capabilities provided by the Node. Hence it provides a limited, simplified view of interest to external clients (e.g. shared addressing, capacity, resource availability, etc.), that enable the clients to request connectivity without the need to understand the provider network internals.";
+    }
+    grouping capacity-pac {
+        container total-potential-capacity {
+            config false;
+            uses capacity;
+            description "An optimistic view of the capacity of the entity assuming that any shared capacity is available to be taken.";
+        }
+        container available-capacity {
+            config false;
+            uses capacity;
+            description "Capacity available to be assigned.";
+        }
+        description "Provides capacity related attributes.";
+    }
+    grouping termination-pac {
+        leaf termination-direction {
+            type termination-direction;
+            config false;
+            description "The overall directionality of the entity. 
+                - A BIDIRECTIONAL entity will have some SINK and/or SOURCE flows.
+                - A SINK entity can only contain elements with SINK flows or CONTRA_DIRECTION_SOURCE flows.
+                - A SOURCE entity can only contain SOURCE flows or CONTRA_DIRECTION_SINK flows.";
+        }
+        leaf termination-state {
+            type termination-state;
+            config false;
+            description "Indicates whether the layer is terminated and if so how.";
+        }
+        description "This object class is associated to a Connection End Point to specify its direction and layer termination function.";
+    }
+
+    /**************************
+    * package type-definitions
+    **************************/ 
+    identity LAYER_PROTOCOL_QUALIFIER {
+        description "none";
+    }
+    identity LAYER_PROTOCOL_QUALIFIER_UNSPECIFIED {
+        base LAYER_PROTOCOL_QUALIFIER;
+        description "none";
+    }
+    identity OBJECT_TYPE {
+        description "none";
+    }
+    identity OBJECT_TYPE_SERVICE_INTERFACE_POINT {
+        base OBJECT_TYPE;
+        description "none";
+    }
+    typedef administrative-state {
+        type enumeration {
+            enum LOCKED {
+                description "Users are administratively prohibited from making use of the resource.";
+            }
+            enum UNLOCKED {
+                description "Users are allowed to use the resource";
+            }
+        }
+        description "The possible values of the administrativeState.";
+    }
+    typedef date-and-time {
+        type string;
+        description "This primitive type defines the date and time according to the following structure:
+            yyyyMMddhhmmss.s[Z|{+|-}HHMm] where:
+            yyyy    0000..9999    year
+            MM    01..12            month
+            dd        01..31            day
+            hh        00..23            hour
+            mm    00..59            minute
+            ss        00..59            second
+            s        .0...9            tenth of second (set to .0 if EMS or NE cannot support this granularity)
+            Z        Z                indicates UTC (rather than local time)
+            {+|-}    + or -            delta from UTC
+            HH        00..23            time zone difference in hours
+            Mm    00..59            time zone difference in minutes.";
+    }
+    typedef directive-value {
+        type enumeration {
+            enum MINIMIZE {
+                description "none";
+            }
+            enum MAXIMIZE {
+                description "none";
+            }
+            enum ALLOW {
+                description "none";
+            }
+            enum DISALLOW {
+                description "none";
+            }
+            enum DONT_CARE {
+                description "none";
+            }
+        }
+        description "none";
+    }
+    typedef forwarding-direction {
+        type enumeration {
+            enum BIDIRECTIONAL {
+                description "The Fowarding entity supports both BIDIRECTIONAL flows at all Ports (i.e. all Ports have both an INPUT flow and an OUTPUT flow defined)";
+            }
+            enum UNIDIRECTIONAL {
+                description "The Forwarding entity has Ports that are either INPUT or OUTPUT. It has no BIDIRECTIONAL Ports.";
+            }
+            enum UNDEFINED_OR_UNKNOWN {
+                description "Not a normal state. The system is unable to determine the correct value.";
+            }
+        }
+        description "The directionality of a Forwarding entity.";
+    }
+    typedef layer-protocol-name {
+        type enumeration {
+            enum ODU {
+                description "Models the ODU layer as per ITU-T G.872";
+            }
+            enum ETH {
+                description "Models the ETH layer as per ITU-T G.8010";
+            }
+            enum DSR {
+                description "Models a Digital Signal of an unspecified rate. This value can be used when the intent is to respresent an generic digital layer signal without making any statement on its format or overhead (processing) capabilities.";
+            }
+            enum PHOTONIC_MEDIA {
+                description "Models the OCH, OTSi, OTSiA, OTSiG, OMS, OTS and Media channels as per ITU-T G.872 (2017) version 4";
+            }
+        }
+        description "Provides a controlled list of layer protocol names and indicates the naming authority.
+            Note that it is expected that attributes will be added to this structure to convey the naming authority name, the name of the layer protocol using a human readable string and any particular standard reference.
+            Layer protocol names include:
+            -    Layer 1 (L1): OTU, ODU
+            -    Layer 2 (L2): Carrier Grade Ethernet (ETY, ETH), MPLS-TP (MT)
+            ";
+    }
+    typedef lifecycle-state {
+        type enumeration {
+            enum PLANNED {
+                description "The resource is planned but is not present in the network.";
+            }
+            enum POTENTIAL_AVAILABLE {
+                description "The supporting resources are present in the network but are shared with other clients; or require further configuration before they can be used; or both.
+                    o    When a potential resource is configured and allocated to a client it is moved to the INSTALLED state for that client.
+                    o    If the potential resource has been consumed (e.g. allocated to another client) it is moved to the POTENTIAL_BUSY state for all other clients.";
+            }
+            enum POTENTIAL_BUSY {
+                description "The supporting resources are present in the network but have been allocated to other clients.";
+            }
+            enum INSTALLED {
+                description "The resource is present in the network and is capable of providing the service expected.";
+            }
+            enum PENDING_REMOVAL {
+                description "The resource has been marked for removal";
+            }
+        }
+        description "The possible values of the lifecycleState.";
+    }
+    grouping name-and-value {
+        leaf value-name {
+            type string;
+            description "The name of the value. The value need not have a name.";
+        }
+        leaf value {
+            type string;
+            description "The value";
+        }
+        description "A scoped name-value pair.";
+    }
+    typedef operational-state {
+        type enumeration {
+            enum DISABLED {
+                description "The resource is unable to meet the SLA of the user of the resource. If no (explicit) SLA is defined the resource is disabled if it is totally inoperable and unable to provide service to the user.";
+            }
+            enum ENABLED {
+                description "The resource is partially or fully operable and available for use.";
+            }
+        }
+        description "The possible values of the operationalState.";
+    }
+    typedef port-direction {
+        type enumeration {
+            enum BIDIRECTIONAL {
+                description "The Port has both an INPUT flow and an OUTPUT flow defined.";
+            }
+            enum INPUT {
+                description "The Port only has definition for a flow into the Forwarding entity, (i.e. an ingress flow of the Link or Connection, hence egress flow of NEP or CEP, CSEP etc.).";
+            }
+            enum OUTPUT {
+                description "The Port only has definition for a flow out of the Forwarding entity ((i.e. an egress flow of the Link or Connection, hence ingress flow of NEP or CEP, CSEP etc.)";
+            }
+            enum UNIDENTIFIED_OR_UNKNOWN {
+                description "Not a normal state. The system is unable to determine the correct value.";
+            }
+        }
+        description "The orientation of flow at the Port of a Forwarding entity";
+    }
+    typedef port-role {
+        type enumeration {
+            enum SYMMETRIC {
+                description "none";
+            }
+            enum ROOT {
+                description "none";
+            }
+            enum LEAF {
+                description "none";
+            }
+            enum TRUNK {
+                description "none";
+            }
+            enum UNKNOWN {
+                description "none";
+            }
+        }
+        description "The role of an end in the context of the function of the forwarding entity that it bounds";
+    }
+    typedef termination-direction {
+        type enumeration {
+            enum BIDIRECTIONAL {
+                description "A Termination with both SINK and SOURCE flows.";
+            }
+            enum SINK {
+                description "The flow is up the layer stack from the server side to the client side. 
+                    Considering an example of a Termination function within the termination entity, a SINK flow:
+                    - will arrive at at the base of the termination function (the server side) where it is essentially at an INPUT to the termination component
+                    - then will be decoded and deconstructed 
+                    - then relevant parts of the flow will be sent out of the termination function (the client side) where it is essentially at an OUTPUT from the termination component
+                    A SINK termination is one that only supports a SINK flow.
+                    A SINK termiation can be bound to an OUTPUT Port of a Forwarding entity";
+            }
+            enum SOURCE {
+                description "The flow is down the layer stack from the server side to the client side. 
+                    Considering an example of a Termination function within the termination entity, a SOURCE flow:
+                    - will arrive at at the top of the termination function (the client side) where it is essentially at an INPUT to the termination component
+                    - then will be assembled with various overheads etc and will be coded 
+                    - then coded form of the assembly of flow will be sent out of the termination function (the server side) where it is essentially at an OUTPUT from the termination component
+                    A SOURCE termination is one that only supports a SOURCE flow.
+                    A SOURCE termiation can be bound to an INPUT Port of a Forwarding entity";
+            }
+            enum UNDEFINED_OR_UNKNOWN {
+                description "Not a normal state. The system is unable to determine the correct value.";
+            }
+        }
+        description "The directionality of a termination entity";
+    }
+    typedef termination-state {
+        type enumeration {
+            enum LP_CAN_NEVER_TERMINATE {
+                description "A non-flexible case that can never be terminated.";
+            }
+            enum LT_NOT_TERMINATED {
+                description "A flexible termination that can terminate but is currently not terminated.";
+            }
+            enum TERMINATED_SERVER_TO_CLIENT_FLOW {
+                description "A flexible termination that is currently terminated for server to client flow only.";
+            }
+            enum TERMINATED_CLIENT_TO_SERVER_FLOW {
+                description "A flexible termination that is currently terminated for client to server flow only.";
+            }
+            enum TERMINATED_BIDIRECTIONAL {
+                description "A flexible termination that is currently terminated in both directions of flow.";
+            }
+            enum LT_PERMENANTLY_TERMINATED {
+                description "A non-flexible termination that is always terminated (in both directions of flow for a bidirectional case and in the one direction of flow for both unidirectional cases).";
+            }
+            enum TERMINATION_STATE_UNKNOWN {
+                description "There TerminationState cannot be determined.";
+            }
+        }
+        description "Provides support for the range of behaviours and specific states that an LP can take with respect to termination of the signal.
+            Indicates to what degree the LayerTermination is terminated.";
+    }
+    typedef uuid {
+        type string;
+        description "The univeral ID value where the mechanism for generation is defned by some authority not directly referenced in the structure.
+            UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+            Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+            Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+    }
+    grouping capacity {
+        container total-size {
+            uses capacity-value;
+            description "Total capacity of the entity. In case of bandwidthProfile, this is expected to same as the committedInformationRate.";
+        }
+        description "Information on capacity of a particular entity.";
+    }
+    grouping capacity-value {
+        leaf value {
+            type uint64;
+            description "none";
+        }
+        leaf unit {
+            type capacity-unit;
+            description "none";
+        }
+        description "The Capacity (Bandwidth) values that are applicable for digital layers.";
+    }
+    typedef capacity-unit {
+        type enumeration {
+            enum TB {
+                description "Indicates that the integer CapacityValue is in TeraBytes";
+            }
+            enum TBPS {
+                description "Indicates that the integer CapacityValue is in Terabit-per-second";
+            }
+            enum GB {
+                description "Indicates that the integer CapacityValue is in GigaBytes";
+            }
+            enum GBPS {
+                description "Indicates that the integer CapacityValue is in Gigabit-per-second";
+            }
+            enum MB {
+                description "Indicates that the integer CapacityValue is in MegaBytes";
+            }
+            enum MBPS {
+                description "Indicates that the integer CapacityValue is in Megabit-per-second";
+            }
+            enum KB {
+                description "Indicates that the integer CapacityValue is in KiloBytes";
+            }
+            enum KBPS {
+                description "Indicates that the integer CapacityValue is in Kilobit-per-second";
+            }
+            enum GHz {
+                description "none";
+            }
+            enum MHz {
+                description "none";
+            }
+        }
+        description "none";
+    }
+    grouping time-range {
+        leaf end-time {
+            type date-and-time;
+            description "none";
+        }
+        leaf start-time {
+            type date-and-time;
+            description "none";
+        }
+        description "none";
+    }
+    grouping time-period {
+        leaf value {
+            type uint64;
+            description "none";
+        }
+        leaf unit {
+            type time-unit;
+            description "none";
+        }
+        description "none";
+    }
+    typedef time-unit {
+        type enumeration {
+            enum YEARS {
+                description "none";
+            }
+            enum MONTHS {
+                description "none";
+            }
+            enum DAYS {
+                description "none";
+            }
+            enum HOURS {
+                description "none";
+            }
+            enum MINUTES {
+                description "none";
+            }
+            enum SECONDS {
+                description "none";
+            }
+            enum MILLISECONDS {
+                description "none";
+            }
+            enum MICROSECONDS {
+                description "none";
+            }
+            enum NANOSECONDS {
+                description "none";
+            }
+            enum PICOSECONDS {
+                description "none";
+            }
+        }
+        description "none";
+    }
+    grouping time-interval {
+        list period {
+            key 'unit';
+            min-elements 1;
+            max-elements 5;
+            uses time-period;
+            description "none";
+        }
+        description "none";
+    }
+    typedef layer-protocol-qualifier {
+        type identityref {
+            base LAYER_PROTOCOL_QUALIFIER;
+        }
+        description "This enumeration is used to qualify the sub-layers (if applicable) for a specific LayerProtocol.
+            This extensible enumeration is intentionally empty in the common module and will be augmented with layer-specific values in the respective technology-specific modules.
+            Examples:
+            - LayerProtocolName := OPTICAL_DATA_UNIT
+            LayerProtocolQualifier := 'ODU_FLEX', 'ODU_0', 'ODU_1', 'ODU_2', 'ODU_2E', 'ODU_3', 'ODU_4'', 'ODU_CBR'', 'ODU_GFP'', 'ODU_GFP_HAO', etc
+            - LayerProtocolName := DIGITAL_SIGNAL_RATE
+            LayerProtocolQualifier := 'GBE', '10_GBE_WAN', '10_GBE_LAN', '100_GBE', 'FC_100', 'FC_200', 'FC_400', 'FC_800', 'FC_1200', 'FC_1600', 'FC_3200', 'STM_1', 'STM_4', 'STM_16', 'STM_64', 'STM_256', 'OC_3', 'OC_12', 'OC_48', 'OC_192', 'OC_768', 'OTU_1', 'OTU_2', 'OTU_2E', 'OTU_3', 'OTU_4', 'GPON', 'XGPON', 'IB_SDR', 'IB_DDR', 'IB_QDR', 'SBCON_ESCON', 'DVB_ASI', 'SDI', 'SDI_1G5', 'SDI_3G', etc
+            - LayerProtocolName := PHOTONIC_MEDIA
+            LayerProtocolQualifier := OCH, OTSi, OTSiA, NMC, NMCA, SMC, SMCA, OMS, OTS
+            ";
+    }
+    typedef mac-address {
+        type string;
+        description "pattern '[0-9a-fA-F]{2}(-[0-9a-fA-F]{2}){5}'
+            description
+            'The mac-address type represents a MAC address in the canonical
+            format and hexadecimal format specified by IEEE Std 802. The
+            hexidecimal representation uses uppercase characters.'";
+    }
+    typedef binary-type {
+        type string;
+        description "Represents any binary data, i.e., a sequence of octets.
+            A binary type can be restricted by a length which defines the number of octets it contains.";
+    }
+    typedef timeticks {
+        type string;
+        description "type uint32
+            The timeticks type represents a non-negative integer that represents the time, modulo 2^32 (4294967296 decimal), in hundredths of a second between two epochs.";
+    }
+    typedef object-type {
+        type identityref {
+            base OBJECT_TYPE;
+        }
+        description "The list of TAPI Common Object types/classes.";
+    }
+
+    /**************************
+    * package interfaces
+    **************************/ 
+    rpc get-service-interface-point-details {
+        description "none";
+        input {
+            leaf uuid {
+                type uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+        }
+        output {
+            container sip {
+                uses service-interface-point;
+                description "none";
+            }
+        }
+    }
+    rpc get-service-interface-point-list {
+        description "none";
+        output {
+            list sip {
+                key 'uuid';
+                uses service-interface-point;
+                description "none";
+            }
+        }
+    }
+    rpc update-service-interface-point {
+        description "none";
+        input {
+            leaf uuid {
+                type uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+            leaf state {
+                type administrative-state;
+                description "none";
+            }
+        }
+    }
+
+}
diff --git a/models/tapi/tapi-connectivity@2019-03-31.yang b/models/tapi/tapi-connectivity@2019-03-31.yang
new file mode 100644
index 0000000000000000000000000000000000000000..3037e2d40e732d5200e29d4f2d642d0f46b91eb7
--- /dev/null
+++ b/models/tapi/tapi-connectivity@2019-03-31.yang
@@ -0,0 +1,989 @@
+module tapi-connectivity {
+    namespace "urn:onf:otcc:yang:tapi-connectivity";
+    prefix tapi-connectivity;
+    import tapi-common {
+        prefix tapi-common;
+    }
+    import tapi-topology {
+        prefix tapi-topology;
+    }
+    import tapi-path-computation {
+        prefix tapi-path-computation;
+    }
+    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 Connectivity Model definitions.
+        Source: TapiConnectivity.uml
+        Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved.
+        License: This module is distributed under the Apache License 2.0
+        - 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.";
+    revision 2019-03-31 {
+        description "ONF Transport API version 2.2-RC1.
+                   Changes included in this TAPI release (v2.2) are listed in
+                  <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.2.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.2.0/UML>";
+    }
+    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.1/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 connectivity-context {
+            uses connectivity-context;
+            description "Augments the base TAPI Context with ConnectivityService information";
+        }
+        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 {
+            uses cep-list;
+            description "none";
+        }
+        description "none";
+    }
+    /**************************
+    * definitions of references
+    **************************/
+    grouping connectivity-service-ref {
+        leaf connectivity-service-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-connectivity:connectivity-context/tapi-connectivity:connectivity-service/tapi-connectivity:uuid';
+            }
+            description "none";
+        }
+        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";
+    }
+    grouping connection-end-point-ref {
+        uses tapi-topology:node-edge-point-ref;
+        leaf connection-end-point-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-topology:topology-context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point/tapi-connectivity:cep-list/tapi-connectivity:connection-end-point/tapi-connectivity:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+    grouping connection-ref {
+        leaf connection-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-connectivity:connectivity-context/tapi-connectivity:connection/tapi-connectivity:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+    grouping switch-control-ref {
+        uses connection-ref;
+        leaf switch-control-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-connectivity:connectivity-context/tapi-connectivity:connection/tapi-connectivity:switch-control/tapi-connectivity:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+    grouping route-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';
+            }
+            description "none";
+        }
+        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";
+        }
+        container bounding-node {
+            uses tapi-topology:node-ref;
+            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:global-class;
+        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. ";
+        }
+        leaf protection-role {
+            type protection-role;
+            description "none";
+        }
+        uses tapi-common:global-class;
+        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-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
+                Class of Service Name.";
+        }
+        container requested-capacity {
+            uses tapi-common:capacity;
+            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";
+        }
+        leaf-list connection-exclusion {
+            type tapi-common:uuid;
+            description "none";
+        }
+        leaf-list connection-inclusion {
+            type tapi-common:uuid;
+            description "A ConnectivityService may use one or more existing Connections.
+                A common traditional strategy is to set up 'stranded' connectivity in the core of the network as 'express channels' (this is essentially a serial compound link, but can be treated as simple connections)
+                A connection inclusion capability allows for adoption of a discovered Connections.
+                A ConnectivityService is requested with a connection inclusion constraint that identifies a connection (or chain of connections) that is bounded by CEPs that each belong to a NEP that references a SIP that is referenced by a CSEP of the ConnectivityService such that all CSEPs are satisfied by CEPs of the existing Connection. will allow discovered Connections with no stated intent to be associated with an intent via the ConnectivityService.";
+        }
+        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";
+        }
+        container connectivity-constraint {
+            uses connectivity-constraint;
+            description "none";
+        }
+        container routing-constraint {
+            uses tapi-path-computation:routing-constraint;
+            description "none";
+        }
+        list topology-constraint {
+            key 'local-id';
+            uses tapi-path-computation:topology-constraint;
+            description "none";
+        }
+        container resilience-constraint {
+            uses resilience-constraint;
+            description "none";
+        }
+        leaf direction {
+            type tapi-common:forwarding-direction;
+            config false;
+            description "none";
+        }
+        list connectivity-service {
+            uses connectivity-service-ref;
+            key 'connectivity-service-uuid';
+            config false;
+            description "none";
+        }
+        uses tapi-common:global-class;
+        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 peer-fwd-connectivity-service-end-point {
+            uses connectivity-service-end-point-ref;
+            description "none";
+        }
+        container server-connectivity-service-end-point {
+            uses connectivity-service-end-point-ref;
+            description "none";
+        }
+        container protecting-connectivity-service-end-point {
+            uses connectivity-service-end-point-ref;
+            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";
+        }
+        container resilience-route {
+            uses resilience-route;
+            description "Provides optional resilience and state attributes to the Route.";
+        }
+        uses tapi-common:local-class;
+        description "The Route of a Connection is modeled as a collection of Connection End Points.
+            The logical order of the Connection End Points within the Route object can be inferred by the TAPI client by the knowledge of the Topology information.";
+    }
+    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';
+            config false;
+            min-elements 1;
+            description "none";
+        }
+        list selected-route {
+            uses route-ref;
+            key 'connection-uuid route-local-id';
+            config false;
+            min-elements 1;
+            description "none";
+        }
+        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';
+            config false;
+            description "none";
+        }
+        list switch {
+            key 'local-id';
+            uses switch;
+            description "none";
+        }
+        uses tapi-common:global-class;
+        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 fault-condition-determination {
+            type fault-condition-determination;
+            description "none";
+        }
+        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.";
+        }
+        leaf selection-control {
+            type selection-control;
+            description "Degree of administrative control applied to the switch selection.";
+        }
+        list resiliency-route-constraint {
+            key 'local-id';
+            uses resiliency-route-constraint;
+            description "none";
+        }
+        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";
+    }
+    grouping resilience-route {
+        leaf route-state {
+            type route-state;
+            config false;
+            description "Current information on the route selection.";
+        }
+        leaf priority {
+            type uint64;
+            config false;
+            description "Value of 0 (zero) means 'unspecified priority'.
+                Highest priority is 1, sometimes referred as 'preferred' or 'main' or 'intended' route.
+                2 has lower priority than 1, 3 has lower priority than 2, etc.";
+        }
+        description "This object adds resilience and state attributes to the Route.
+            When this object is not present, then the Route is intended as 'current' Route of the Connection.";
+    }
+    grouping resiliency-route-constraint {
+        leaf priority {
+            type uint64;
+            description "Value of 0 (zero) means 'unspecified priority'.
+                Highest priority is 1, sometimes referred as 'preferred' or 'main' or 'intended' route.
+                2 has lower priority than 1, 3 has lower priority than 2, etc.";
+        }
+        container topology-constraint {
+            uses tapi-path-computation:topology-constraint;
+            description "none";
+        }
+        container routing-constraint {
+            uses tapi-path-computation:routing-constraint;
+            description "none";
+        }
+        uses tapi-common:local-class;
+        description "none";
+    }
+
+    /**************************
+    * package type-definitions
+    **************************/ 
+    identity FAULT_CONDITION_DETERMINATION {
+        description "none";
+    }
+    identity FAULT_CONDITION_DETERMINATION_INHERENT {
+        base FAULT_CONDITION_DETERMINATION;
+        description "Inherent monitored (/I): The fault condition status of each link connection is derived from the status of the underlying server layer trail.";
+    }
+    identity FAULT_CONDITION_DETERMINATION_NON_INTRUSIVE {
+        base FAULT_CONDITION_DETERMINATION;
+        description "Non-intrusive monitored (/N): Each serial compound link connection is extended with a non-intrusive monitoring termination sink function to derive the fault condition status from the traffic signal that is present.";
+    }
+    identity FAULT_CONDITION_DETERMINATION_SUBLAYER {
+        base FAULT_CONDITION_DETERMINATION;
+        description "Sublayer monitored (/S): Each serial compound link connection is extended with tandem connection monitoring or segment termination/adaptation functions to derive the fault condition status independent of the traffic signal present.";
+    }
+    identity FAULT_CONDITION_DETERMINATION_TEST {
+        base FAULT_CONDITION_DETERMINATION;
+        description "Test monitored (/T): Each serial compound link connection's fault condition status is derived from an additional monitored serial compound link connection transported via the same serial compound link.";
+    }
+    identity CONNECTIVITY_OBJECT_TYPE {
+    	base tapi-common:OBJECT_TYPE;
+        description "none";
+    }
+    identity CONNECTIVITY_OBJECT_TYPE_CONNECTIVITY_SERVICE {
+        base CONNECTIVITY_OBJECT_TYPE;
+        description "none";
+    }
+    identity CONNECTIVITY_OBJECT_TYPE_CONNECTIVITY_SERVICE_END_POINT {
+        base CONNECTIVITY_OBJECT_TYPE;
+        description "none";
+    }
+    identity CONNECTIVITY_OBJECT_TYPE_CONNECTION {
+        base CONNECTIVITY_OBJECT_TYPE;
+        description "none";
+    }
+    identity CONNECTIVITY_OBJECT_TYPE_CONNECTION_END_POINT {
+        base CONNECTIVITY_OBJECT_TYPE;
+        description "none";
+    }
+    identity CONNECTIVITY_OBJECT_TYPE_SWITCH_CONTROL {
+        base CONNECTIVITY_OBJECT_TYPE;
+        description "none";
+    }
+    identity CONNECTIVITY_OBJECT_TYPE_SWITCH {
+        base CONNECTIVITY_OBJECT_TYPE;
+        description "none";
+    }
+    identity CONNECTIVITY_OBJECT_TYPE_ROUTE {
+        base CONNECTIVITY_OBJECT_TYPE;
+        description "none";
+    }
+    identity ROUTE_STATE {
+        description "none";
+    }
+    identity ROUTE_STATE_CURRENT {
+        base ROUTE_STATE;
+        description "The route identified is the current route, i.e., is the one that is active and selected to support service.";
+    }
+    identity ROUTE_STATE_NOT_CURRENT {
+        base ROUTE_STATE;
+        description "The route is not the one supporting the service.";
+    }
+    identity ROUTE_STATE_UNKNOWN {
+        base ROUTE_STATE;
+        description "The route state is unknown.";
+    }
+    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";
+    }
+    typedef fault-condition-determination {
+        type identityref {
+            base FAULT_CONDITION_DETERMINATION;
+        }
+        description "ITU-T G.808-201611
+            3.2.6.8 subnetwork connection protection
+            Transport entity protection for the case where the transport entity is a subnetwork connection.
+            The serial compound link connection within the subnetwork connection is protected by adding bridges and selectors
+            in the connection functions at the edges of the protected domain and an additional serial compound link connection between these connection functions.
+            The determination of a fault condition on a serial compound link connection within the protected domain can be performed as follows: see enum.";
+    }
+    typedef connectivity-object-type {
+        type identityref {
+            base CONNECTIVITY_OBJECT_TYPE;
+        }
+        description "The list of TAPI Connectivity Object types/classes.";
+    }
+    typedef route-state {
+        type identityref {
+            base ROUTE_STATE;
+        }
+        description "Potential route states.";
+    }
+
+    /**************************
+    * package interfaces
+    **************************/ 
+    rpc get-connection-details {
+        description "none";
+        input {
+            leaf uuid {
+                type tapi-common:uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+        }
+        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 uuid {
+                type tapi-common:uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+        }
+        output {
+            container service {
+                uses connectivity-service;
+                description "none";
+            }
+        }
+    }
+    rpc create-connectivity-service {
+        description "none";
+        input {
+            leaf uuid {
+                type tapi-common:uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+            list name {
+                key 'value-name';
+                uses tapi-common:name-and-value;
+                description "List of names. This value is unique in some namespace but may change during the life of the entity.
+                    A name carries no semantics with respect to the purpose of the entity.";
+            }
+            leaf layer-protocol-name {
+                type tapi-common:layer-protocol-name;
+                description "none";
+            }
+            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";
+            }
+            list topology-constraint {
+                key 'local-id';
+                uses tapi-path-computation:topology-constraint;
+                description "none";
+            }
+            container resilience-constraint {
+                uses resilience-constraint;
+                description "none";
+            }
+            leaf state {
+                type tapi-common:administrative-state;
+                description "none";
+            }
+        }
+        output {
+            container service {
+                uses connectivity-service;
+                description "none";
+            }
+        }
+    }
+    rpc update-connectivity-service {
+        description "none";
+        input {
+            leaf uuid {
+                type tapi-common:uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+            list name {
+                key 'value-name';
+                uses tapi-common:name-and-value;
+                description "List of names. This value is unique in some namespace but may change during the life of the entity.
+                    A name carries no semantics with respect to the purpose of the entity.";
+            }
+            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";
+            }
+            list topology-constraint {
+                key 'local-id';
+                uses tapi-path-computation:topology-constraint;
+                description "none";
+            }
+            container resilience-constraint {
+                uses resilience-constraint;
+                description "none";
+            }
+            leaf state {
+                type tapi-common:administrative-state;
+                description "none";
+            }
+        }
+        output {
+            container service {
+                uses connectivity-service;
+                description "none";
+            }
+        }
+    }
+    rpc delete-connectivity-service {
+        description "none";
+        input {
+            leaf uuid {
+                type tapi-common:uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+        }
+    }
+    rpc get-connection-end-point-details {
+        description "none";
+        input {
+            leaf uuid {
+                type tapi-common:uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+        }
+        output {
+            container connection-end-point {
+                uses connection-end-point;
+                description "none";
+            }
+        }
+    }
+
+}
diff --git a/models/tapi/tapi-dsr@2019-03-31.yang b/models/tapi/tapi-dsr@2019-03-31.yang
new file mode 100644
index 0000000000000000000000000000000000000000..38c613c7b12d745b4ef56afdbe402de7a61859e3
--- /dev/null
+++ b/models/tapi/tapi-dsr@2019-03-31.yang
@@ -0,0 +1,232 @@
+module tapi-dsr {
+    namespace "urn:onf:otcc:yang:tapi-dsr";
+    prefix tapi-dsr;
+    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 DSR Model definitions.
+        Source: TapiDsr.uml
+        Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved.
+        License: This module is distributed under the Apache License 2.0
+        - 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.";
+    revision 2019-03-31 {
+        description "ONF Transport API version 2.2-RC1.
+                   Changes included in this TAPI release (v2.2) are listed in
+                  <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.2.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.2.0/UML>";
+    }
+    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.1/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>";
+    }
+    /**************************
+    * package type-definitions
+    **************************/ 
+    identity DIGITAL_SIGNAL_TYPE {
+        base tapi-common:LAYER_PROTOCOL_QUALIFIER;
+        description "none";
+    }
+    identity DIGITAL_SIGNAL_TYPE_GigE {
+        base DIGITAL_SIGNAL_TYPE;
+        description "none";
+    }
+    identity DIGITAL_SIGNAL_TYPE_10_GigE_LAN {
+        base DIGITAL_SIGNAL_TYPE;
+        description "none";
+    }
+    identity DIGITAL_SIGNAL_TYPE_10_GigE_WAN {
+        base DIGITAL_SIGNAL_TYPE;
+        description "none";
+    }
+    identity DIGITAL_SIGNAL_TYPE_40_GigE {
+        base DIGITAL_SIGNAL_TYPE;
+        description "none";
+    }
+    identity DIGITAL_SIGNAL_TYPE_100_GigE {
+        base DIGITAL_SIGNAL_TYPE;
+        description "none";
+    }
+    identity DIGITAL_SIGNAL_TYPE_FC_100 {
+        base DIGITAL_SIGNAL_TYPE;
+        description "none";
+    }
+    identity DIGITAL_SIGNAL_TYPE_FC_200 {
+        base DIGITAL_SIGNAL_TYPE;
+        description "none";
+    }
+    identity DIGITAL_SIGNAL_TYPE_FC_400 {
+        base DIGITAL_SIGNAL_TYPE;
+        description "none";
+    }
+    identity DIGITAL_SIGNAL_TYPE_FC_800 {
+        base DIGITAL_SIGNAL_TYPE;
+        description "none";
+    }
+    identity DIGITAL_SIGNAL_TYPE_FC_1200 {
+        base DIGITAL_SIGNAL_TYPE;
+        description "none";
+    }
+    identity DIGITAL_SIGNAL_TYPE_FC_1600 {
+        base DIGITAL_SIGNAL_TYPE;
+        description "none";
+    }
+    identity DIGITAL_SIGNAL_TYPE_FC_3200 {
+        base DIGITAL_SIGNAL_TYPE;
+        description "none";
+    }
+    identity DIGITAL_SIGNAL_TYPE_STM_1 {
+        base DIGITAL_SIGNAL_TYPE;
+        description "none";
+    }
+    identity DIGITAL_SIGNAL_TYPE_STM_4 {
+        base DIGITAL_SIGNAL_TYPE;
+        description "none";
+    }
+    identity DIGITAL_SIGNAL_TYPE_STM_16 {
+        base DIGITAL_SIGNAL_TYPE;
+        description "none";
+    }
+    identity DIGITAL_SIGNAL_TYPE_STM_64 {
+        base DIGITAL_SIGNAL_TYPE;
+        description "none";
+    }
+    identity DIGITAL_SIGNAL_TYPE_STM_256 {
+        base DIGITAL_SIGNAL_TYPE;
+        description "none";
+    }
+    identity DIGITAL_SIGNAL_TYPE_OC_3 {
+        base DIGITAL_SIGNAL_TYPE;
+        description "none";
+    }
+    identity DIGITAL_SIGNAL_TYPE_OC_12 {
+        base DIGITAL_SIGNAL_TYPE;
+        description "none";
+    }
+    identity DIGITAL_SIGNAL_TYPE_OC_48 {
+        base DIGITAL_SIGNAL_TYPE;
+        description "none";
+    }
+    identity DIGITAL_SIGNAL_TYPE_OC_192 {
+        base DIGITAL_SIGNAL_TYPE;
+        description "none";
+    }
+    identity DIGITAL_SIGNAL_TYPE_OC_768 {
+        base DIGITAL_SIGNAL_TYPE;
+        description "none";
+    }
+    identity DIGITAL_SIGNAL_TYPE_OTU_1 {
+        base DIGITAL_SIGNAL_TYPE;
+        description "none";
+    }
+    identity DIGITAL_SIGNAL_TYPE_OTU_2 {
+        base DIGITAL_SIGNAL_TYPE;
+        description "none";
+    }
+    identity DIGITAL_SIGNAL_TYPE_OTU_2E {
+        base DIGITAL_SIGNAL_TYPE;
+        description "none";
+    }
+    identity DIGITAL_SIGNAL_TYPE_OTU_3 {
+        base DIGITAL_SIGNAL_TYPE;
+        description "none";
+    }
+    identity DIGITAL_SIGNAL_TYPE_OTU_4 {
+        base DIGITAL_SIGNAL_TYPE;
+        description "none";
+    }
+    identity DIGITAL_SIGNAL_TYPE_GPON {
+        base DIGITAL_SIGNAL_TYPE;
+        description "none";
+    }
+    identity DIGITAL_SIGNAL_TYPE_XGPON {
+        base DIGITAL_SIGNAL_TYPE;
+        description "none";
+    }
+    identity DIGITAL_SIGNAL_TYPE_IB_SDR {
+        base DIGITAL_SIGNAL_TYPE;
+        description "none";
+    }
+    identity DIGITAL_SIGNAL_TYPE_IB_DDR {
+        base DIGITAL_SIGNAL_TYPE;
+        description "none";
+    }
+    identity DIGITAL_SIGNAL_TYPE_IB_QDR {
+        base DIGITAL_SIGNAL_TYPE;
+        description "none";
+    }
+    identity DIGITAL_SIGNAL_TYPE_SBCON_ESCON {
+        base DIGITAL_SIGNAL_TYPE;
+        description "none";
+    }
+    identity DIGITAL_SIGNAL_TYPE_DVB_ASI {
+        base DIGITAL_SIGNAL_TYPE;
+        description "none";
+    }
+    identity DIGITAL_SIGNAL_TYPE_SDI {
+        base DIGITAL_SIGNAL_TYPE;
+        description "none";
+    }
+    identity DIGITAL_SIGNAL_TYPE_SDI_1G5 {
+        base DIGITAL_SIGNAL_TYPE;
+        description "none";
+    }
+    identity DIGITAL_SIGNAL_TYPE_SDI_3G {
+        base DIGITAL_SIGNAL_TYPE;
+        description "none";
+    }
+    typedef digital-signal-type {
+        type identityref {
+            base DIGITAL_SIGNAL_TYPE;
+        }
+        description "none";
+    }
+
+}
diff --git a/models/tapi/tapi-equipment@2019-03-31.yang b/models/tapi/tapi-equipment@2019-03-31.yang
new file mode 100644
index 0000000000000000000000000000000000000000..dd8a3523271b5f4be05b2f40175b7108565af58e
--- /dev/null
+++ b/models/tapi/tapi-equipment@2019-03-31.yang
@@ -0,0 +1,722 @@
+module tapi-equipment {
+    namespace "urn:onf:otcc:yang:tapi-equipment";
+    prefix tapi-equipment;
+    import tapi-common {
+        prefix tapi-common;
+    }
+    import tapi-topology {
+        prefix tapi-topology;
+    }
+    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 "
+        - 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.";
+    revision 2019-03-31 {
+        description "ONF Transport API version 2.2-RC1.
+                   Changes included in this TAPI release (v2.2) are listed in
+                  <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.2.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.2.0/UML>";
+    }
+    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.1/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 physical-context {
+            uses physical-context;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-topology:topology-context/tapi-topology:topology/tapi-topology:link" {
+        container supporting-physical-span {
+            uses supporting-physical-span;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-topology:topology-context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point" {
+        container supporting-access-port {
+            uses supporting-access-port;
+            description "none";
+        }
+        description "none";
+    }
+    /**************************
+    * definitions of references
+    **************************/
+    grouping device-ref {
+        leaf device-uuid {
+        	type leafref {
+                path '/tapi-common:context/tapi-equipment:physical-context/tapi-equipment:device/tapi-equipment:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+    grouping equipment-ref {
+    	uses device-ref;
+        leaf equipment-uuid {
+        	type leafref {
+                path '/tapi-common:context/tapi-equipment:physical-context/tapi-equipment:device/tapi-equipment:equipment/tapi-equipment:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+    grouping equipment-holder-ref {
+    	uses equipment-ref;
+        leaf equipment-holder-uuid {
+        	type leafref {
+                path '/tapi-common:context/tapi-equipment:physical-context/tapi-equipment:device/tapi-equipment:equipment/tapi-equipment:contained-holder/tapi-equipment:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+    grouping access-port-ref {
+    	uses device-ref;
+        leaf access-port-uuid {
+        	type leafref {
+                path '/tapi-common:context/tapi-equipment:physical-context/tapi-equipment:device/tapi-equipment:access-port/tapi-equipment:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+    grouping physical-span-ref {
+        leaf physical-span-uuid {
+        	type leafref {
+                path '/tapi-common:context/tapi-equipment:physical-context/tapi-equipment:physical-span/tapi-equipment:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+    grouping abstract-strand-ref {
+    	uses physical-span-ref;
+        leaf abstract-strand-local-id {
+        	type leafref {
+                path '/tapi-common:context/tapi-equipment:physical-context/tapi-equipment:physical-span/tapi-equipment:abstract-strand/tapi-equipment:local-id';
+            }
+            description "none";
+        }
+        description "none";
+    }
+    /**************************
+    * package type-definitions
+    **************************/ 
+    identity CONNECTOR_AND_PIN_ORIENTATION {
+        description "none";
+    }
+    identity CONNECTOR_AND_PIN_ORIENTATION_MALE {
+        base CONNECTOR_AND_PIN_ORIENTATION;
+        description "The connecting elements are dominantly protrusions.";
+    }
+    identity CONNECTOR_AND_PIN_ORIENTATION_FEMALE {
+        base CONNECTOR_AND_PIN_ORIENTATION;
+        description "The connecting elements are dominantly indentations.";
+    }
+    identity CONNECTOR_AND_PIN_ORIENTATION_SYMMETRIC_NEUTRAL {
+        base CONNECTOR_AND_PIN_ORIENTATION;
+        description "The pin (and housing) orientation combination is such that it is symmetric so a connector is compatible with itself.
+            The connecting element may be a surface rather than protrusions or indentations.";
+    }
+    identity EQUIPMENT_CATEGORY {
+        description "none";
+    }
+    identity EQUIPMENT_CATEGORY_SUBRACK {
+        base EQUIPMENT_CATEGORY;
+        description "An assembly with holders designed to accommodate CIRCUIT_PACKs. 
+            The assembly is designed to be mounted in a RACK.";
+    }
+    identity EQUIPMENT_CATEGORY_CIRCUIT_PACK {
+        base EQUIPMENT_CATEGORY;
+        description "An assembly with connectors compatible with those in a holder.
+            The assembly is designed to be mounted in a holder (SLOT) of a SUBRACK.
+            May also support holders (SLOTs) for SMALL_FORMFACTOR_PLUGGABLEs.";
+    }
+    identity EQUIPMENT_CATEGORY_SMALL_FORMFACTOR_PLUGGABLE {
+        base EQUIPMENT_CATEGORY;
+        description "A small assembly (compared to a CIRCUIT_PACK) with connectors compatible with those in a holder.
+            The assembly is designed to be mounted in a holder (SLOT) of a CIRCUIT_PACK or STAND_ALONE_UNIT.";
+    }
+    identity EQUIPMENT_CATEGORY_STAND_ALONE_UNIT {
+        base EQUIPMENT_CATEGORY;
+        description "An assembly with connectors for cabling and potentially with holders.
+            The assembly is designed to be mounted in a freeform environment (on a table or simple mechanical cabinet).
+            May support holders (SLOTs) for CIRCUIT_PACKs or for SMALL_FORMFACTOR_PLUGGABLEs.";
+    }
+    identity EQUIPMENT_CATEGORY_RACK {
+        base EQUIPMENT_CATEGORY;
+        description "A mechanical assembly with cabling and predefined mounting points for particular SUBRACK types.
+            The assembly is designed to be mounted on the floor in a row with other RACKs.";
+    }
+    identity HOLDER_CATEGORY {
+        description "none";
+    }
+    identity HOLDER_CATEGORY_SLOT {
+        base HOLDER_CATEGORY;
+        description "A guided holder with fixed connectors.
+            The guided holder is designed to take a particular form of CIRCUIT_PACK or SMALL_FORMFACTOR_PLUGGABLE";
+    }
+    identity EQUIPMENT_OBJECT_TYPE {
+    	base tapi-common:OBJECT_TYPE;
+        description "none";
+    }
+    identity EQUIPMENT_OBJECT_TYPE_DEVICE {
+        base EQUIPMENT_OBJECT_TYPE;
+        description "none";
+    }
+    identity EQUIPMENT_OBJECT_TYPE_ACCESS_PORT {
+        base EQUIPMENT_OBJECT_TYPE;
+        description "none";
+    }
+    identity EQUIPMENT_OBJECT_TYPE_EQUIPMENT {
+        base EQUIPMENT_OBJECT_TYPE;
+        description "none";
+    }
+    identity EQUIPMENT_OBJECT_TYPE_HOLDER {
+        base EQUIPMENT_OBJECT_TYPE;
+        description "none";
+    }
+    identity EQUIPMENT_OBJECT_TYPE_PHYSICAL_SPAN {
+        base EQUIPMENT_OBJECT_TYPE;
+        description "none";
+    }
+    identity EQUIPMENT_OBJECT_TYPE_ABSTRACT_STRAND {
+        base EQUIPMENT_OBJECT_TYPE;
+        description "none";
+    }
+    typedef connector-and-pin-orientation {
+        type identityref {
+            base CONNECTOR_AND_PIN_ORIENTATION;
+        }
+        description "Most connector schemes are asymmetric such that there are two orientations of the connector where a mating is only possible between two connectors of different orientations. 
+            A multi-pin connector may have a mix of pin orientations. In this case, it is expected that the dominant orientation of pin is chosen for the connector orientation.";
+    }
+    typedef equipment-category {
+        type identityref {
+            base EQUIPMENT_CATEGORY;
+        }
+        description "The form of equipment.";
+    }
+    typedef holder-category {
+        type identityref {
+            base HOLDER_CATEGORY;
+        }
+        description "The form of holder.";
+    }
+    grouping connector-pin-address {
+        leaf connector-identification {
+            type string;
+            description "Identification of the Connector in the context of the referenced Equipment.";
+        }
+        leaf pin-identification {
+            type string;
+            description "Where relevant, identification of the Pin in the context of the connector.
+                Where the whole connector is used, then individual Pins need not be identified.
+                Simple alternative to pinAndRole.";
+        }
+        leaf equipment-uuid {
+            type tapi-common:uuid;
+            description "Reference to the Equipment that is fitted with the Connector/Pin.";
+        }
+        list pin-and-role {
+            config false;
+            uses pin-and-role;
+            description "If there is more than one pin used in a connector and/or there is a need to identify the role of one or more pins then this property can be used.
+                For simple cases pinIdentification can be used instead.";
+        }
+        description "The identification of the location of the Connector and/or Pin.";
+    }
+    grouping actual-equipment {
+        list actual-non-field-replaceable-module {
+            config false;
+            uses actual-non-field-replaceable-module;
+            description "none";
+        }
+        container common-actual-properties {
+            config false;
+            uses common-actual-properties;
+            description "none";
+        }
+        container common-equipment-properties {
+            config false;
+            uses common-equipment-properties;
+            description "none";
+        }
+        description "The equipment that is actually present in the physical network.
+            It will expose all dynamic properties and some critical static properties.";
+    }
+    grouping actual-holder {
+        container common-holder-properties {
+            config false;
+            uses common-holder-properties;
+            description "none";
+        }
+        description "A holder in the ActualEquipment.";
+    }
+    grouping actual-non-field-replaceable-module {
+        container common-actual-properties {
+            config false;
+            uses common-actual-properties;
+            description "none";
+        }
+        container common-equipment-properties {
+            config false;
+            uses common-equipment-properties;
+            description "none";
+        }
+        description "A structure that represents an actual equipment that cannot be replaced in the field.
+            Is simply a subordinate part of an ActualEquipment (FRU). 
+            Does not have any exposed holders (any associated holders are assumed to belong to the containing FRU).
+            Does not have any connectors (any associated connectors are assumed to belong to the containing FRU).
+            ";
+    }
+    grouping common-actual-properties {
+        leaf asset-instance-identifier {
+            type string;
+            description "This attribute represents the asset identifier of this instance from the manufacturer's perspective.";
+        }
+        leaf is-powered {
+            type boolean;
+            description "The state of the power being supplied to the equipment.
+                Note that this attribute summarizes the power state. 
+                Full details on the actual power system would be provided from a number of PC instances representing the relevant parts of the Power function (e.g. different voltage supplies).";
+        }
+        leaf manufacture-date {
+            type tapi-common:date-and-time;
+            description "This attribute represents the date on which this instance is manufactured.";
+        }
+        leaf serial-number {
+            type string;
+            description "This attribute represents the serial number of this instance.";
+        }
+        leaf temperature {
+            type decimal64 {
+                fraction-digits 7;
+            }
+            description "The measured temperature of the Equipment.";
+        }
+        description "Properties common to actual Equipment.";
+    }
+    grouping common-equipment-properties {
+        leaf asset-type-identifier {
+            type string;
+            description "Represents the invariant properties of the equipment asset allocated by the operator that define and characterize the type.";
+        }
+        leaf equipment-type-description {
+            type string;
+            description "Text describing the type of Equipment.";
+        }
+        leaf equipment-type-identifier {
+            type string;
+            description "This attribute identifies the part type of the equipment.";
+        }
+        leaf equipment-type-name {
+            type string;
+            description "This attribute identifies the type of the equipment.";
+        }
+        leaf equipment-type-version {
+            type string;
+            description "This attribute identifies the version of the equipment.";
+        }
+        leaf manufacturer-identifier {
+            type string;
+            description "The formal unique identifier of the manufacturer.";
+        }
+        leaf manufacturer-name {
+            type string;
+            description "The formal name of the manufacturer of the Equipment.";
+        }
+        description "Properties common to all aspects of Equipment.";
+    }
+    grouping common-holder-properties {
+        leaf holder-category {
+            type holder-category;
+            description "The type of holder.";
+        }
+        leaf is-guided {
+            type boolean;
+            description "This attribute indicates whether the holder has guides that constrain the position of the equipment in the holder or not.";
+        }
+        leaf holder-location {
+            type string;
+            description "The relative position of the holder in the context of its containing equipment along with the position of that containing Equipment (and further recursion).";
+        }
+        description "Properties common to all aspects of Holder.";
+    }
+    grouping expected-equipment {
+        list expected-non-field-replaceable-module {
+            config false;
+            uses expected-non-field-replaceable-module;
+            description "none";
+        }
+        list expected-holder {
+            config false;
+            uses expected-holder;
+            description "none";
+        }
+        container common-equipment-properties {
+            config false;
+            uses common-equipment-properties;
+            description "none";
+        }
+        description "A definition of the restrictions on the equipment that is expected to be present in the physical network at a particular 'place'.
+            The expected equipment will state the type and may constrain any other invariant properties. 
+            It may also provide desired ranges for dynamic properties.";
+    }
+    grouping expected-holder {
+        container common-holder-properties {
+            config false;
+            uses common-holder-properties;
+            description "none";
+        }
+        description "A definition of a holder expected in the ActualEquipment (i.e. an ActualHolder) as part of the constraints provided by the ExpectedEquipment.";
+    }
+    grouping expected-non-field-replaceable-module {
+        container common-equipment-properties {
+            config false;
+            uses common-equipment-properties;
+            description "none";
+        }
+        description "A structure that represents an expected equipment that cannot be replaced in the field.
+            Is simply a subordinate part of an ExpectedEquipment (FRU). 
+            Does not have any exposed holders (any associated holders are assumed to belong to the containing FRU).
+            Does not have any connectors (any associated connectors are assumed to belong to the containing FRU).
+            ";
+    }
+    typedef equipment-object-type {
+        type identityref {
+            base EQUIPMENT_OBJECT_TYPE;
+        }
+        description "The list of TAPI Equipment Object types/classes.";
+    }
+    grouping pin-and-role {
+        leaf location-in-connector {
+            type string;
+            config false;
+            description "The named location of the pin in the context of the connector.
+                This is likely to be the normal numbering/naming for the type of connetor, e.g. '7', '6-GND', 'Common' etc.";
+        }
+        leaf-list pin-role {
+            type string;
+            config false;
+            description "It is not always necessary to specify a role (or list of roles) as the connector locationInConnector may be sufficient (as these are sometimes clearly role based.
+                Each entry represents a role in the context of the specific access port.
+                Each entry ties the pin to a functional element in the associated NEP(s) etc.
+                For example:
+                - a pin might carry several distinct signals where each signal is idenitified in the list
+                - a pin may carry a signal and power
+                - a signal carried by a pin may be the receive flow (INPUT) to a bidirectional NEP or the transmit flow (OUTPUT) or indeed both (BIDIRECTIONAL).";
+        }
+        leaf pin-name {
+            type string;
+            config false;
+            description "Where the pin has a distinct location identifier and a distinct name this field can be used for the name.
+                For example:
+                - locationInConnector = 6, pinName = GND";
+        }
+        description "Provides an opportunity, for a pin, to give the location of the pin and the role of the pin.";
+    }
+
+    /**************************
+    * package object-classes
+    **************************/ 
+    grouping equipment {
+        list contained-holder {
+            key 'uuid';
+            config false;
+            uses holder;
+            description "References the Holder in an Equipment that is available to take other Equipments.
+                For example:
+                - Slot in a sub-rack
+                - Slot in a Field Replaceable Unit that can take a small form-factor pluggable.";
+        }
+        leaf category {
+            type equipment-category;
+            config false;
+            description "This attribute provides the identifier for the form of equipments regarded as having particular shared characteristics.";
+        }
+        leaf equipment-location {
+            type string;
+            config false;
+            description "none";
+        }
+        leaf geographical-location {
+            type string;
+            config false;
+            description "none";
+        }
+        leaf is-expected-actual-mismatch {
+            type boolean;
+            config false;
+            description "none";
+        }
+        list expected-equipment {
+            config false;
+            uses expected-equipment;
+            description "none";
+        }
+        container actual-equipment {
+            config false;
+            uses actual-equipment;
+            description "none";
+        }
+        uses tapi-common:global-class;
+        description "Represents any relevant physical thing. 
+            Can be either field replaceable or not field replaceable.
+            Note: The model is currently constrained to inside plant.";
+    }
+    grouping holder {
+        container occupying-fru {
+            uses equipment-ref;
+            config false;
+            description "The FRU that is occupying the holder. 
+                A holder may be unoccupied. 
+                An FRU may occupy more hat one holder (using or blocking are intentionally not distinguished here).";
+        }
+        container expected-holder {
+            config false;
+            uses expected-holder;
+            description "none";
+        }
+        container actual-holder {
+            config false;
+            uses actual-holder;
+            description "none";
+        }
+        uses tapi-common:global-class;
+        description "Represents a space in an equipment in which another equipment can be fitted in the field.";
+    }
+    grouping access-port {
+        list connector-pin {
+            key 'connector-identification pin-identification equipment-uuid';
+            config false;
+            min-elements 1;
+            uses connector-pin-address;
+            description "The list of Pins that support the AccessPort.";
+        }
+        uses tapi-common:global-class;
+        description "A group of pins that together support a signal group where any one pin removed from the group will prevent all signals of the signal group from flowing successfully.
+            In some cases the AccessPort may simply reference a single connector (e.g., where the pin-connector association is simpe such that the AccessPort references all pinsof one connector).";
+    }
+    grouping physical-span {
+        list access-port {
+            uses access-port-ref;
+            key "device-uuid access-port-uuid";
+            config false;
+            min-elements 2;
+            max-elements 2;
+            description "none";
+        }
+        list abstract-strand {
+            key 'local-id';
+            config false;
+            min-elements 1;
+            uses abstract-strand;
+            description "Both the serial segments that form an end-end strand and the parallel end-end strands.";
+        }
+        uses tapi-common:global-class;
+        description "An adjacency between AccessPorts. 
+            The adjacency is supported by a group of strands between pins of the AccessPorts.
+            This is a physical abstraction.";
+    }
+    grouping abstract-strand {
+        list adjacent-strand {
+        	uses abstract-strand-ref;
+        	key "physical-span-uuid abstract-strand-local-id";
+            config false;
+            description "none";
+        }
+        list spliced-strand {
+        	uses abstract-strand-ref;
+        	key "physical-span-uuid abstract-strand-local-id";
+            config false;
+            max-elements 2;
+            description "none";
+        }
+        list connector-pin {
+            key 'connector-identification pin-identification equipment-uuid';
+            config false;
+            max-elements 2;
+            uses connector-pin-address;
+            description "A strand can end on two or more Pins (usually 2 pins, but a strand my be spliced to split a signal). This model supports only 2 ended strands.
+                A abstract strand may be spliced at both ends and hence have no direct relationship to pins or may be connected to pins at one or both ends.
+                In the essential model these Pins would be on connectors that plug in to connectors on Equipments.
+                The AbstractStrand is extended to the pins of the AccessPort which are the Pins on the Connectors of the Equipment.
+                In some cases it may not be relevant to represent the pin detail and hence the reference is to a connector alone.";
+        }
+        list strand-media-characteristics {
+            key 'value-name';
+            config false;
+            uses tapi-common:name-and-value;
+            description "Relevant physical properties of the abstract strand.";
+        }
+        uses tapi-common:local-class;
+        description "This object represents an abstraction of one or more strands in series that provides sufficient detail to enable appropriate engineering.
+            A strand represents a continuous long, thin piece of a medium such as glass fiber or copper wire.
+            In this model a Strand:
+            - a strand has two ends
+            - a splice can only be between 2 strands.
+            - the end of a strand may have a splice, a connector or be hidden
+            - only one end can be hidden in an equipment
+            - where a cable has more than two end each strand only goes between two of the ends
+            This model does NOT account for multiple copper strands being spliced.";
+    }
+    grouping device {
+        list equipment {
+            key 'uuid';
+            config false;
+            uses equipment;
+            description "none";
+        }
+        list access-port {
+            key 'uuid';
+            config false;
+            uses access-port;
+            description "none";
+        }
+        uses tapi-common:global-class;
+        description "A logical grouping of Equipments and AccessPorts that are closely located and form a support a coherent system of related functions.";
+    }
+    grouping physical-context {
+        list device {
+            key 'uuid';
+            config false;
+            uses device;
+            description "none";
+        }
+        list physical-span {
+            key 'uuid';
+            config false;
+            uses physical-span;
+            description "none";
+        }
+        uses tapi-common:global-class;
+        description "none";
+    }
+    grouping supporting-physical-span {
+        container physical-span {
+            uses physical-span-ref;
+            description "none";
+        }
+        description "none";
+    }
+    grouping supporting-access-port {
+        container access-port {
+            uses access-port-ref;
+            description "none";
+        }
+        description "none";
+    }
+
+    /**************************
+    * package interfaces
+    **************************/ 
+    rpc get-device-list {
+        description "none";
+        output {
+            list device {
+            	key 'uuid';
+                uses device;
+                description "none";
+            }
+        }
+    }
+    rpc get-physical-span-list {
+        description "none";
+        output {
+            list physical-span {
+            	key 'uuid';
+                uses physical-span;
+                description "none";
+            }
+        }
+    }
+    rpc get-device {
+        description "none";
+        input {
+            leaf uuid {
+                type tapi-common:uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+        }
+        output {
+            container device {
+                uses device;
+                description "none";
+            }
+        }
+    }
+    rpc get-physical-span {
+        description "none";
+        input {
+            leaf uuid {
+                type tapi-common:uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+        }
+        output {
+            container physical-span {
+                uses physical-span;
+                description "none";
+            }
+        }
+    }
+
+}
diff --git a/models/tapi/tapi-eth@2019-03-31.yang b/models/tapi/tapi-eth@2019-03-31.yang
new file mode 100644
index 0000000000000000000000000000000000000000..935de5e1508c5c42666eb97b3aa6cca6fa7f3fe9
--- /dev/null
+++ b/models/tapi/tapi-eth@2019-03-31.yang
@@ -0,0 +1,3518 @@
+module tapi-eth {
+    namespace "urn:onf:otcc:yang:tapi-eth";
+    prefix tapi-eth;
+    import tapi-common {
+        prefix tapi-common;
+    }
+    import tapi-topology {
+        prefix tapi-topology;
+    }
+    import tapi-connectivity {
+        prefix tapi-connectivity;
+    }
+    import tapi-oam {
+        prefix tapi-oam;
+    }
+    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 ETH Model definitions.
+        Source: TapiEth.uml
+        Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved.
+        License: This module is distributed under the Apache License 2.0
+        - 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.";
+    revision 2019-03-31 {
+        description "ONF Transport API version 2.2-RC1.
+                   Changes included in this TAPI release (v2.2) are listed in
+                  <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.2.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.2.0/UML>";
+    }
+    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.1/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/tapi-topology:topology-context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point/tapi-connectivity:cep-list/tapi-connectivity:connection-end-point" {
+        container eth-connection-end-point-spec {
+            uses eth-connection-end-point-spec;
+            description "Augments the base LayerProtocol information in ConnectionEndPoint with ETH-specific information";
+        }
+        description "Augments the base LayerProtocol information in ConnectionEndPoint with ETH-specific information";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-job" {
+        container eth-loopback-job {
+            uses eth-loopback-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:meg" {
+        container eth-meg-spec {
+            uses eth-meg-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:meg/tapi-oam:mep" {
+        container eth-mep-spec {
+            uses eth-mep-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:meg/tapi-oam:mip" {
+        container eth-mip-spec {
+            uses eth-mip-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-job" {
+        container eth-pro-active-single-ended-measurement-job {
+            uses eth-pro-active-single-ended-measurement-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-job" {
+        container eth-link-trace-job {
+            uses eth-link-trace-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-job" {
+        container eth-test-job {
+            uses eth-test-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-job" {
+        container eth-pro-active-dual-ended-measurement-job {
+            uses eth-pro-active-dual-ended-measurement-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-job/tapi-oam:current-data" {
+        container eth-pro-active-dm-performance-data {
+            uses eth-pro-active-dm-performance-data;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-job/tapi-oam:current-data/tapi-oam:history-data" {
+        container eth-pro-active-dm-performance-data {
+            uses eth-pro-active-dm-performance-data;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-job/tapi-oam:current-data" {
+        container eth-pro-active-lm-performance-data {
+            uses eth-pro-active-lm-performance-data;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-job/tapi-oam:current-data/tapi-oam:history-data" {
+        container eth-pro-active-lm-performance-data {
+            uses eth-pro-active-lm-performance-data;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-job/tapi-oam:current-data" {
+        container eth-on-demand-dm-performance-data {
+            uses eth-on-demand-dm-performance-data;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-job/tapi-oam:current-data" {
+        container eth-on-demand-1-lm-performance-data {
+            uses eth-on-demand-1-lm-performance-data;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-job/tapi-oam:current-data" {
+        container eth-on-demand-1-dm-performance-data {
+            uses eth-on-demand-1-dm-performance-data;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-job/tapi-oam:current-data" {
+        container eth-pro-active-1-dm-performance-data {
+            uses eth-pro-active-1-dm-performance-data;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-job/tapi-oam:current-data/tapi-oam:history-data" {
+        container eth-pro-active-1-dm-performance-data {
+            uses eth-pro-active-1-dm-performance-data;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-job/tapi-oam:current-data" {
+        container eth-pro-active-1-lm-performance-data {
+            uses eth-pro-active-1-lm-performance-data;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-job/tapi-oam:current-data/tapi-oam:history-data" {
+        container eth-pro-active-1-lm-performance-data {
+            uses eth-pro-active-1-lm-performance-data;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-job" {
+        container eth-on-demand-dual-ended-measurement-job {
+            uses eth-on-demand-dual-ended-measurement-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-job" {
+        container eth-on-demand-single-ended-measurement-job {
+            uses eth-on-demand-single-ended-measurement-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-job/tapi-oam:current-data/tapi-oam:history-data" {
+        container eth-on-demand-1-dm-performance-data {
+            uses eth-on-demand-1-dm-performance-data;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-job/tapi-oam:current-data/tapi-oam:history-data" {
+        container eth-on-demand-1-lm-performance-data {
+            uses eth-on-demand-1-lm-performance-data;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-job/tapi-oam:current-data/tapi-oam:history-data" {
+        container eth-on-demand-dm-performance-data {
+            uses eth-on-demand-dm-performance-data;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-job/tapi-oam:current-data" {
+        container eth-on-demand-lm-performance-data {
+            uses eth-on-demand-lm-performance-data;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-job/tapi-oam:current-data/tapi-oam:history-data" {
+        container eth-on-demand-lm-performance-data {
+            uses eth-on-demand-lm-performance-data;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-job/tapi-oam:current-data" {
+        container eth-link-trace-result-data {
+            uses eth-link-trace-result-data;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-job/tapi-oam:current-data" {
+        container eth-test-result-data {
+            uses eth-test-result-data;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-job/tapi-oam:current-data" {
+        container eth-loopback-result-data {
+            uses eth-loopback-result-data;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:create-oam-job/tapi-oam:input" {
+        container eth-loopback-job {
+            uses eth-loopback-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:create-oam-job/tapi-oam:input" {
+        container eth-link-trace-job {
+            uses eth-link-trace-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:create-oam-job/tapi-oam:input" {
+        container eth-test-job {
+            uses eth-test-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:create-oam-job/tapi-oam:input" {
+        container eth-pro-active-dual-ended-measurement-job {
+            uses eth-pro-active-dual-ended-measurement-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:create-oam-job/tapi-oam:input" {
+        container eth-pro-active-single-ended-measurement-job {
+            uses eth-pro-active-single-ended-measurement-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:create-oam-job/tapi-oam:input" {
+        container eth-on-demand-single-ended-measurement-job {
+            uses eth-on-demand-single-ended-measurement-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:create-oam-job/tapi-oam:input" {
+        container eth-on-demand-dual-ended-measurement-job {
+            uses eth-on-demand-dual-ended-measurement-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:update-oam-job/tapi-oam:input" {
+        container eth-loopback-job {
+            uses eth-loopback-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:update-oam-job/tapi-oam:input" {
+        container eth-link-trace-job {
+            uses eth-link-trace-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:update-oam-job/tapi-oam:input" {
+        container eth-test-job {
+            uses eth-test-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:update-oam-job/tapi-oam:input" {
+        container eth-pro-active-dual-ended-measurement-job {
+            uses eth-pro-active-dual-ended-measurement-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:update-oam-job/tapi-oam:input" {
+        container eth-pro-active-single-ended-measurement-job {
+            uses eth-pro-active-single-ended-measurement-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:update-oam-job/tapi-oam:input" {
+        container eth-on-demand-dual-ended-measurement-job {
+            uses eth-on-demand-dual-ended-measurement-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:get-oam-job/tapi-oam:output/tapi-oam:oam-job" {
+        container eth-loopback-job {
+            uses eth-loopback-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:get-oam-job/tapi-oam:output/tapi-oam:oam-job" {
+        container eth-link-trace-job {
+            uses eth-link-trace-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:get-oam-job/tapi-oam:output/tapi-oam:oam-job" {
+        container eth-pro-active-dual-ended-measurement-job {
+            uses eth-pro-active-dual-ended-measurement-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:get-oam-job/tapi-oam:output/tapi-oam:oam-job" {
+        container eth-pro-active-single-ended-measurement-job {
+            uses eth-pro-active-single-ended-measurement-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:get-oam-job/tapi-oam:output/tapi-oam:oam-job" {
+        container eth-on-demand-single-ended-measurement-job {
+            uses eth-on-demand-single-ended-measurement-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:get-oam-job/tapi-oam:output/tapi-oam:oam-job" {
+        container eth-on-demand-dual-ended-measurement-job {
+            uses eth-on-demand-dual-ended-measurement-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:get-oam-job-list/tapi-oam:output/tapi-oam:oam-job" {
+        container eth-loopback-job {
+            uses eth-loopback-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:get-oam-job-list/tapi-oam:output/tapi-oam:oam-job" {
+        container eth-test-job {
+            uses eth-test-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:get-oam-job-list/tapi-oam:output/tapi-oam:oam-job" {
+        container eth-pro-active-dual-ended-measurement-job {
+            uses eth-pro-active-dual-ended-measurement-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:get-oam-job-list/tapi-oam:output/tapi-oam:oam-job" {
+        container eth-on-demand-single-ended-measurement-job {
+            uses eth-on-demand-single-ended-measurement-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:get-oam-job-list/tapi-oam:output/tapi-oam:oam-job" {
+        container eth-on-demand-dual-ended-measurement-job {
+            uses eth-on-demand-dual-ended-measurement-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-service/tapi-oam:oam-service-point" {
+        container eth-oam-mep-service-point {
+            uses eth-oam-mep-service-point;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-service/tapi-oam:oam-service-point" {
+        container eth-oam-mip-service-point {
+            uses eth-oam-mip-service-point;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-service" {
+        container eth-oam-service {
+            uses eth-oam-service;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-job/tapi-oam:current-data" {
+        container eth-pro-active-1-dm-source-performance-data {
+            uses eth-pro-active-1-dm-source-performance-data;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-job/tapi-oam:current-data/tapi-oam:history-data" {
+        container eth-pro-active-1-dm-source-performance-data {
+            uses eth-pro-active-1-dm-source-performance-data;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-job/tapi-oam:current-data" {
+        container eth-pro-active-1-lm-source-performance-data {
+            uses eth-pro-active-1-lm-source-performance-data;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-job/tapi-oam:current-data/tapi-oam:history-data" {
+        container eth-pro-active-1-lm-source-performance-data {
+            uses eth-pro-active-1-lm-source-performance-data;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-job/tapi-oam:current-data" {
+        container eth-on-demand-1-dm-source-performance-data {
+            uses eth-on-demand-1-dm-source-performance-data;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-job/tapi-oam:current-data/tapi-oam:history-data" {
+        container eth-on-demand-1-dm-source-performance-data {
+            uses eth-on-demand-1-dm-source-performance-data;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-job/tapi-oam:current-data" {
+        container eth-on-demand-1-lm-source-performance-data {
+            uses eth-on-demand-1-lm-source-performance-data;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-job/tapi-oam:current-data/tapi-oam:history-data" {
+        container eth-on-demand-1-lm-source-performance-data {
+            uses eth-on-demand-1-lm-source-performance-data;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-connectivity:connectivity-context/tapi-connectivity:connectivity-service/tapi-connectivity:end-point" {
+        container eth-connectivity-service-end-point-spec {
+            uses eth-connectivity-service-end-point-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-common:service-interface-point" {
+        container eth-service-inteface-point-spec {
+            uses eth-service-inteface-point-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:get-service-interface-point-list/tapi-common:output/tapi-common:sip" {
+        container eth-service-inteface-point-spec {
+            uses eth-service-inteface-point-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-connectivity:get-connectivity-service-list/tapi-connectivity:output/tapi-connectivity:service/tapi-connectivity:end-point" {
+        container eth-connectivity-service-end-point-spec {
+            uses eth-connectivity-service-end-point-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-connectivity:get-connectivity-service-details/tapi-connectivity:output/tapi-connectivity:service/tapi-connectivity:end-point" {
+        container eth-connectivity-service-end-point-spec {
+            uses eth-connectivity-service-end-point-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-connectivity:create-connectivity-service/tapi-connectivity:input/tapi-connectivity:end-point" {
+        container eth-connectivity-service-end-point-spec {
+            uses eth-connectivity-service-end-point-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-connectivity:update-connectivity-service/tapi-connectivity:output/tapi-connectivity:service/tapi-connectivity:end-point" {
+        container eth-connectivity-service-end-point-spec {
+            uses eth-connectivity-service-end-point-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-connectivity:update-connectivity-service/tapi-connectivity:input/tapi-connectivity:end-point" {
+        container eth-connectivity-service-end-point-spec {
+            uses eth-connectivity-service-end-point-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-connectivity:connectivity-context/tapi-connectivity:connectivity-service" {
+        container eth-connectivity-service {
+            uses eth-connectivity-service;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-connectivity:get-connectivity-service-list/tapi-connectivity:output/tapi-connectivity:service" {
+        container eth-connectivity-service {
+            uses eth-connectivity-service;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-connectivity:get-connectivity-service-details/tapi-connectivity:output/tapi-connectivity:service" {
+        container eth-connectivity-service {
+            uses eth-connectivity-service;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-connectivity:update-connectivity-service/tapi-connectivity:output/tapi-connectivity:service" {
+        container eth-connectivity-service {
+            uses eth-connectivity-service;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:get-oam-service/tapi-oam:output/tapi-oam:oam-service" {
+        container eth-oam-service {
+            uses eth-oam-service;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:get-oam-service-list/tapi-oam:output/tapi-oam:oam-service" {
+        container eth-oam-service {
+            uses eth-oam-service;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:create-oam-service/tapi-oam:input/tapi-oam:oam-service-point" {
+        container eth-oam-service {
+            uses eth-oam-service;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:update-oam-service/tapi-oam:output/tapi-oam:oam-service" {
+        container eth-oam-service {
+            uses eth-oam-service;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:create-oam-service/tapi-oam:output/tapi-oam:oam-service" {
+        container eth-oam-service {
+            uses eth-oam-service;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:update-oam-service/tapi-oam:input/tapi-oam:oam-service-point" {
+        container eth-oam-service {
+            uses eth-oam-service;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:get-oam-service/tapi-oam:output/tapi-oam:oam-service/tapi-oam:oam-service-point" {
+        container eth-oam-mip-service-point {
+            uses eth-oam-mip-service-point;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:get-oam-service/tapi-oam:output/tapi-oam:oam-service/tapi-oam:oam-service-point" {
+        container eth-oam-mep-service-point {
+            uses eth-oam-mep-service-point;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:get-oam-service-list/tapi-oam:output/tapi-oam:oam-service/tapi-oam:oam-service-point" {
+        container eth-oam-mip-service-point {
+            uses eth-oam-mip-service-point;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:get-oam-service-list/tapi-oam:output/tapi-oam:oam-service/tapi-oam:oam-service-point" {
+        container eth-oam-mep-service-point {
+            uses eth-oam-mep-service-point;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:create-oam-service/tapi-oam:output/tapi-oam:oam-service/tapi-oam:oam-service-point" {
+        container eth-oam-mip-service-point {
+            uses eth-oam-mip-service-point;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:create-oam-service/tapi-oam:output/tapi-oam:oam-service/tapi-oam:oam-service-point" {
+        container eth-oam-mep-service-point {
+            uses eth-oam-mep-service-point;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:update-oam-service/tapi-oam:output/tapi-oam:oam-service/tapi-oam:oam-service-point" {
+        container eth-oam-mip-service-point {
+            uses eth-oam-mip-service-point;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:get-oam-service-point/tapi-oam:output/tapi-oam:oam-service-point" {
+        container eth-oam-mep-service-point {
+            uses eth-oam-mep-service-point;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:get-oam-service-point/tapi-oam:output/tapi-oam:oam-service-point" {
+        container eth-oam-mip-service-point {
+            uses eth-oam-mip-service-point;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:create-oam-service-point/tapi-oam:output/tapi-oam:oam-service-point" {
+        container eth-oam-mep-service-point {
+            uses eth-oam-mep-service-point;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:create-oam-service-point/tapi-oam:output/tapi-oam:oam-service-point" {
+        container eth-oam-mip-service-point {
+            uses eth-oam-mip-service-point;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:update-oam-service-point/tapi-oam:output/tapi-oam:oam-service-point" {
+        container eth-oam-mep-service-point {
+            uses eth-oam-mep-service-point;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:update-oam-service-point/tapi-oam:output/tapi-oam:oam-service-point" {
+        container eth-oam-mip-service-point {
+            uses eth-oam-mip-service-point;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:get-meg/tapi-oam:output/tapi-oam:meg" {
+        container eth-meg-spec {
+            uses eth-meg-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:get-meg/tapi-oam:output/tapi-oam:meg/tapi-oam:mep" {
+        container eth-mep-spec {
+            uses eth-mep-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:get-meg/tapi-oam:output/tapi-oam:meg/tapi-oam:mip" {
+        container eth-mip-spec {
+            uses eth-mip-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:create-oam-job/tapi-oam:output/tapi-oam:oam-job" {
+        container eth-link-trace-job {
+            uses eth-link-trace-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:create-oam-job/tapi-oam:output/tapi-oam:oam-job" {
+        container eth-loopback-job {
+            uses eth-loopback-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:create-oam-job/tapi-oam:output/tapi-oam:oam-job" {
+        container eth-test-job {
+            uses eth-test-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:update-oam-job/tapi-oam:output/tapi-oam:oam-job" {
+        container eth-loopback-job {
+            uses eth-loopback-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:update-oam-job/tapi-oam:output/tapi-oam:oam-job" {
+        container eth-link-trace-job {
+            uses eth-link-trace-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:create-oam-job/tapi-oam:output/tapi-oam:oam-job" {
+        container eth-on-demand-dual-ended-measurement-job {
+            uses eth-on-demand-dual-ended-measurement-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:create-oam-job/tapi-oam:output/tapi-oam:oam-job" {
+        container eth-pro-active-dual-ended-measurement-job {
+            uses eth-pro-active-dual-ended-measurement-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:create-oam-job/tapi-oam:output/tapi-oam:oam-job" {
+        container eth-pro-active-single-ended-measurement-job {
+            uses eth-pro-active-single-ended-measurement-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:create-oam-job/tapi-oam:output/tapi-oam:oam-job" {
+        container eth-on-demand-single-ended-measurement-job {
+            uses eth-on-demand-single-ended-measurement-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:update-oam-job/tapi-oam:output/tapi-oam:oam-job" {
+        container eth-on-demand-single-ended-measurement-job {
+            uses eth-on-demand-single-ended-measurement-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:update-oam-job/tapi-oam:output/tapi-oam:oam-job" {
+        container eth-pro-active-dual-ended-measurement-job {
+            uses eth-pro-active-dual-ended-measurement-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:update-oam-job/tapi-oam:output/tapi-oam:oam-job" {
+        container eth-on-demand-dual-ended-measurement-job {
+            uses eth-on-demand-dual-ended-measurement-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:update-oam-job/tapi-oam:output/tapi-oam:oam-job" {
+        container eth-pro-active-single-ended-measurement-job {
+            uses eth-pro-active-single-ended-measurement-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:update-oam-job/tapi-oam:output/tapi-oam:oam-job" {
+        container eth-test-job {
+            uses eth-test-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:update-oam-job/tapi-oam:input" {
+        container eth-on-demand-single-ended-measurement-job {
+            uses eth-on-demand-single-ended-measurement-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:get-oam-job-list/tapi-oam:output/tapi-oam:oam-job" {
+        container eth-pro-active-single-ended-measurement-job {
+            uses eth-pro-active-single-ended-measurement-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:get-oam-job-list/tapi-oam:output/tapi-oam:oam-job" {
+        container eth-link-trace-job {
+            uses eth-link-trace-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:get-service-interface-point-details/tapi-common:output/tapi-common:sip" {
+        container eth-service-inteface-point-spec {
+            uses eth-service-inteface-point-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-connectivity:create-connectivity-service/tapi-connectivity:output/tapi-connectivity:service" {
+        container eth-connectivity-service {
+            uses eth-connectivity-service;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-connectivity:create-connectivity-service/tapi-connectivity:output/tapi-connectivity:service/tapi-connectivity:end-point" {
+        container eth-connectivity-service-end-point-spec {
+            uses eth-connectivity-service-end-point-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:update-oam-service/tapi-oam:output/tapi-oam:oam-service/tapi-oam:oam-service-point" {
+        container eth-oam-mep-service-point {
+            uses eth-oam-mep-service-point;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:get-oam-job/tapi-oam:output/tapi-oam:oam-job" {
+        container eth-test-job {
+            uses eth-test-job;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:create-oam-service/tapi-oam:input/tapi-oam:oam-service-point" {
+        container eth-oam-mep-service-point {
+            uses eth-oam-mep-service-point;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:create-oam-service/tapi-oam:input/tapi-oam:oam-service-point" {
+        container eth-oam-mip-service-point {
+            uses eth-oam-mip-service-point;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:update-oam-service/tapi-oam:input/tapi-oam:oam-service-point" {
+        container eth-oam-mep-service-point {
+            uses eth-oam-mep-service-point;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-oam:update-oam-service/tapi-oam:input/tapi-oam:oam-service-point" {
+        container eth-oam-mip-service-point {
+            uses eth-oam-mip-service-point;
+            description "none";
+        }
+        description "none";
+    }
+    /**************************
+    * package object-classes
+    **************************/ 
+    grouping eth-ctp-pac {
+        leaf actor-oper-key {
+            type uint64;
+            config false;
+            description "See 802.1AX:
+                The current operational value of the Key for the Aggregator. The administrative Key value may differ from the operational Key value for the reasons discussed in 5.6.2.
+                The meaning of particular Key values is of local significance.
+                range of type : 16 bit";
+        }
+        leaf actor-system-id {
+            type mac-address;
+            description "See 802.1AX:
+                A MAC address used as a unique identifier for the System that contains this Aggregator.";
+        }
+        leaf actor-system-priority {
+            type uint64;
+            description "See 802.1AX:
+                Indicating the priority associated with the Actors System ID.
+                range of type : 2-octet";
+        }
+        leaf data-rate {
+            type uint64;
+            config false;
+            description "See 802.1AX:
+                The current data rate, in bits per second, of the aggregate link. The value is calculated as N times the data rate of a single link in the aggregation, where N is the number of active links.";
+        }
+        leaf partner-oper-key {
+            type uint64;
+            config false;
+            description "See 802.1AX:
+                The current operational value of the Key for the Aggregators current protocol Partner. If the aggregation is manually configured, this Key value will be a value assigned by the local System.
+                range of type : 16-bit";
+        }
+        leaf partner-system-id {
+            type mac-address;
+            config false;
+            description "See 802.1AX:
+                A MAC address consisting of the unique identifier for the current protocol Partner of this Aggregator. A value of zero indicates that there is no known Partner. If the aggregation is manually configured, this System ID value will be a value assigned by the local System.";
+        }
+        leaf partner-system-priority {
+            type uint64;
+            config false;
+            description "See 802.1AX:
+                Indicates the priority associated with the Partners System ID. If the aggregation is manually configured, this System Priority value will be a value assigned by the local System.
+                range of type : 2-octet";
+        }
+        container eth-ctp-common-pac {
+            uses eth-ctp-common-pac;
+            description "none";
+        }
+        description "none";
+    }
+    grouping eth-connection-end-point-spec {
+        container ety-term {
+            uses ety-termination-pac;
+            description "none";
+        }
+        container eth-term {
+            uses eth-termination-pac;
+            description "none";
+        }
+        container eth-ctp {
+            uses eth-ctp-pac;
+            description "none";
+        }
+        description "none";
+    }
+    grouping eth-termination-pac {
+        container eth-termination-common-pac {
+            uses eth-termination-common-pac;
+            description "none";
+        }
+        description "This object class models the Ethernet Flow Termination function located at a layer boundary.";
+    }
+    grouping ety-termination-pac {
+        container ety-termination-common-pac {
+            uses ety-termination-common-pac;
+            description "none";
+        }
+        uses ety-pac;
+        description "none";
+    }
+    grouping traffic-conditioning-pac {
+        list prio-config-list {
+            key 'queue-id';
+            uses priority-configuration;
+            description "This attribute indicates the Priority Splitter function for the mapping of the Ethernet frame priority (ETH_CI_P) values to the output queue.";
+        }
+        list cond-config-list {
+            key 'queue-id';
+            uses traffic-conditioning-configuration;
+            description "This attribute indicates for the conditioner process the conditioning parameters:
+                - Queue ID: Indicates the Queue ID
+                - Committed Information Rate (CIR): number of bits per second
+                - Committed Burst Size (CBS): number of bytes
+                - Excess Information Rate (EIR): number of bits per second
+                - Excess Burst Size (EBS): number of bytes
+                - Coupling flag (CF): 0 or 1
+                - Color mode (CM): color-blind and color-aware.";
+        }
+        leaf codirectional {
+            type boolean;
+            description "This attribute indicates the direction of the conditioner. The value of true means that the conditioner (modeled as a TCS Sink according to G.8021) is associated with the sink part of the containing CTP. The value of false means that the conditioner (modeled as a TCS Sink according to G.8021) is associated with the source part of the containing CTP.";
+        }
+        description "This object class models the ETH traffic conditioning function as defined in G.8021.
+            Basic attributes: codirectional, condConfigList, prioConfigList";
+    }
+    grouping traffic-shaping-pac {
+        list prio-config-list {
+            key 'queue-id';
+            uses priority-configuration;
+            description "This attribute configures the Priority Splitter function for the mapping of the Ethernet frame priority (ETH_CI_P) values to the output queue.";
+        }
+        list queue-config-list {
+            key 'queue-id';
+            uses queue-configuration;
+            description "This attribute configures the Queue depth and Dropping threshold parameters of the Queue process. The Queue depth sets the maximum size of the queue in bytes. An incoming ETH_CI traffic unit is dropped if there is insufficient space in the queue to hold the whole unit. The Dropping threshold sets the threshold of the queue. If the queue is filled beyond this threshold, incoming ETH_CI traffic units accompanied by the ETH_CI_DE signal set are dropped.";
+        }
+        leaf sched-config {
+            type scheduling-configuration;
+            description "This attribute configures the scheduler process. The value of this attribute is for further study because it is for further study in G.8021.
+                Scheduler is a pointer to a Scheduler object, which is to be defined in the future (because in G.8021, this is FFS).
+                Note that the only significance of the GTCS function defined in G.8021 is the use of a common scheduler for shaping. Given that, G.8052 models the common scheduler feature by having a common value for this attribute.";
+        }
+        leaf codirectional {
+            type boolean;
+            description "This attribute indicates the direction of the shaping function. The value of true means that the shaping (modeled as a TCS Source according to G.8021) is associated with the source part of the containing CTP. The value of false means that the shaping (modeled as a TCS Source according to G.8021) is associated with the sink part of the containing CTP.";
+        }
+        description "This object class models the ETH traffic shaping function as defined in G.8021.
+            Basic attribute: codirectional, prioConfigList, queueConfigList, schedConfig";
+    }
+    grouping eth-meg-spec {
+        container eth-cfm-maintenance-domain {
+            uses eth-cfm-maintenance-domain;
+            description "none";
+        }
+        container eth-cfm-maintenance-association {
+            uses eth-cfm-maintenance-association;
+            description "none";
+        }
+        container eth-meg-common {
+            uses eth-meg-common;
+            description "none";
+        }
+        description "none";
+    }
+    grouping eth-mep-spec {
+        container eth-mep-common {
+            uses eth-mep-common;
+            description "none";
+        }
+        container eth-mep-source {
+            uses eth-mep-source;
+            description "none";
+        }
+        container eth-mep-sink {
+            uses eth-mep-sink;
+            description "none";
+        }
+        leaf mep-mac {
+            type mac-address;
+            config false;
+            description "This attribute contains the MAC Address of the MEP.";
+        }
+        description "none";
+    }
+    grouping eth-mip-spec {
+        leaf mip-mac {
+            type mac-address;
+            config false;
+            description "This attribute contains the MAC address of the MIP instance.";
+        }
+        container eth-mip-common {
+            uses eth-mip-common;
+            description "none";
+        }
+        description "none";
+    }
+    grouping eth-loopback-job {
+        container eth-oam-test-loopback-common-pac {
+            uses eth-oam-test-loopback-common-pac;
+            description "none";
+        }
+        leaf number {
+            type uint64;
+            description "G.8052: This parameter specifies how many LB messages to be sent for the LB_Series process.";
+        }
+        leaf lbm-data-tlv {
+            type string;
+            description "IEEE P802.1Qcx/D0.3:
+                String length '1..1480'
+                The loopback message Data TLV type.
+                MEF 38:
+                An arbitrary amount of data to be included in a Data TLV.";
+        }
+        description "This class represents the Loopback (LB) process (send a series of LB messages carrying a test pattern to a particular MEP). The termination occurs at specified stop time (schedule attribute of OamJob).
+            This class models also the 'loopback discover' process, when destinationAddress is multicast.
+            When number is greater than 1, then the process is to perform a Loopback (LB) Series process (send a series of N LB messages to a particular MEP/MIP. ";
+    }
+    grouping eth-mep-common {
+        leaf cc-priority {
+            type uint64 {
+                range "0..7";
+            }
+            default "7";
+            description "This attribute models the MI_CC_Pri signal defined in G.8021 and configured as specified in G8051. It is the priority at which the CCM message should be sent.";
+        }
+        leaf lck-period {
+            type oam-period;
+            description "This attribute models the MI_LCK_Period signal defined in G.8021 and configured as specified in G8051. It is the frequency at which the LCK messages should be sent.
+                range of type : 1s, 1min";
+        }
+        leaf lck-priority {
+            type uint64 {
+                range "0..7";
+            }
+            default "7";
+            description "This attribute models the MI_LCK_Pri signal defined in G.8021 and configured as specified in G8051. It is the priority at which the LCK messages should be sent.";
+        }
+        leaf mep-identifier {
+            type uint64;
+            description "IEEE P802.1Qcx/D0.3:
+                MEF 38:
+                Integer that is unique among all the MEPs in the same Maintenance Association (MEG).
+                G.8052:
+                This attribute contains the identifier of the MEP.";
+        }
+        leaf codirectional {
+            type boolean;
+            default "true";
+            description "This attribute specifies the directionality of the Ethernet MEP with respect to the associated CEP. The value of TRUE means that the sink part of the MEP terminates the same signal direction as the sink part of the CEP. The Source part behaves similarly. This attribute is meaningful only when CEP is bidirectional.";
+        }
+        description "Basic attributes: adminState, clientMel, megIdentifier, mepMac
+            Continuity Check Process related attributes: ccPeriod, ccPriority, isCcEnabled
+            Lock Process related attributes: lckPeriod, lckPriority
+            This object class models the MEP functions that are common to MEP Sink and MEP Source.";
+    }
+    grouping eth-mep-sink {
+        leaf ais-priority {
+            type uint64 {
+                range "0..7";
+            }
+            default "7";
+            description "This attribute models the MI_AIS_Pri signal defined in G.8021 and configured as specified in G8051. It is the priority at which the AIS messages should be sent.";
+        }
+        leaf ais-period {
+            type oam-period;
+            description "This attribute models the MI_AIS_Period signal defined in G.8021 and configured as specified in G8051. It is the frequency at which the AIS messages should be sent.
+                range of type : 1s, 1min";
+        }
+        leaf is-csf-reported {
+            type boolean;
+            default "true";
+            description "This attribute models the MI_CSF_Reported signal defined in G.8021 and configured as specified in G8051. It configures whether the secondary failure CSF should be reported or not.";
+        }
+        leaf is-csf-rdi-fdi-enabled {
+            type boolean;
+            default "true";
+            description "This attribute models the MI_CSFrdifdiEnable signal defined in G.8021 and configured as specified in G8051.
+                aSSFrdi  dCSF-RDI and MI_CSFrdifdiEnable
+                aSSFfdi  dCSF-FDI and MI_CSFrdifdiEnable";
+        }
+        container bandwidth-report {
+            config false;
+            uses bandwidth-report;
+            description "This attribute models the content of the bandwidth report received by the MEP Sink from the peer MEP Source.";
+        }
+        leaf lm-degm {
+            type uint64;
+            default "10";
+            description "This attribute defines the number of consecutive bad seconds necessary for the 'degraded' detection. See also section 'Degraded signal defect (dDEG)' in G.8021.";
+        }
+        leaf lm-deg-thr {
+            type uint64;
+            default "30";
+            description "This attribute defines the threshold for declaring a 'bad second'. See also section 'Degraded signal defect (dDEG)' in G.8021.";
+        }
+        leaf lm-m {
+            type uint64 {
+                range "2..10";
+            }
+            default "10";
+            description "This attribute defines the number of consecutive good seconds necessary for the clearing of 'degraded'. See also section 'Degraded signal defect (dDEG)' in G.8021.";
+        }
+        leaf lm-tf-min {
+            type uint64;
+            description "This attribute defines the necessary number of transmitted frames to enable the detection of 'bad seconds'. See also section 'Degraded signal defect (dDEG)' in G.8021.";
+        }
+        leaf-list peer-mep-identifier {
+            type uint64;
+            description "G.8052:
+                This attribute models the MI_PeerMEP_ID[i] signal defined in G.8021 and configured as specified in G.8051. It provides the identifiers of the MEPs which are peer to the subject MEP.";
+        }
+        leaf unexpected-ltr-received {
+            type uint64;
+            description "IEEE P802.1Qcx/D0.3:
+                MEF 38:
+                The total number of unexpected LTRs received.";
+        }
+        description "1DM related attribute: 1DmPriority
+            AIS Process related attributes: aisPeriod, aisPriority
+            Bandwidth notification Process related attribute: bandwidthReport
+            Basic attribute: peerMepRefList
+            CSF Process related attributes: isCsfRdiFdiEnabled, isCsfReported
+            Defect correlation Process related attribute: currentProblemList
+            This object class models the MEP sink function. Instance of this object class can be created and contained by ETH CTP or TTP objects.
+            It also provides the management of the dual-ended maintenance job, such as test.
+            This object contains the configuration parameters for detecting 'degraded signal' (DEG).";
+    }
+    grouping eth-mep-source {
+        leaf aps-priority {
+            type uint64 {
+                range "0..7";
+            }
+            default "7";
+            description "This attribute specifies the priority of the APS messages.
+                See section 8.1.5    APS insert process in G.8021.";
+        }
+        leaf csf-priority {
+            type uint64 {
+                range "0..7";
+            }
+            default "7";
+            description "This attribute models the MI_CSF_Pri signal defined in G.8021 and configured as specified in G8051. It is the priority at which the CSF messages should be sent";
+        }
+        leaf csf-period {
+            type oam-period;
+            description "This attribute models the MI_CSF_Period signal defined in G.8021 and configured as specified in G8051. It is the period at which the CSF messages should be sent.
+                range of type : 1s, 1min";
+        }
+        leaf csf-config {
+            type csf-config;
+            description "This attribute models the combination of all CSF related MI signals (MI_CSF_Enable, MI_CSFrdifdi_Enable, MI_CSFdci_Enable) as defined in G.8021.";
+        }
+        description "APS Process related attribute: apsPriority
+            Basic attribute: mepIdentifier
+            CSF Process related attributes: csfConfig, csfPeriod, csfPriority
+            Link trace related operation: linkTrace
+            Loopback related operations: loopbackDiscover, loopbackSeries, loopbackTest, loopbackTestTerminate
+            On demand measurement job control related operation: establishOnDemandDualEndedMeasurementJobSource
+            Proactive measurement job control related operation: establishProActiveDualEndedMeasurementJobSource
+            Test related operations: testInitiatorStart, testInitiatorTerminate
+            This object class models the MEP source function. Instance of this object class can be created and contained by ETH CTP or TTP objects.
+            It also provides the management of single-ended maintenance jobs, such as loopback test, loopback discover, loopback series, link trace, and dual-ended maintenance job, such as test.";
+    }
+    grouping eth-link-trace-job {
+        leaf priority {
+            type uint64;
+            default "7";
+            description "G.8052: This parameter provides the priority to be used in the LBM frame.
+                G.8052: This parameter provides the priority to be used in the TST frame.";
+        }
+        leaf destination-address {
+            type mac-address;
+            description "G.8052: This parameter provides the destination address, i.e., the MAC Address of the target MEP or MIP.";
+        }
+        leaf time-to-live {
+            type uint64;
+            description "G.8052: This parameter provides the Time To Live (TTL) parameter of the Link Track protocol.
+                The TTL parameter allows the receiver (MIP or MEP) of the LTM frame to determine if the frame can be terminated. TTL is decremented every time the LTM frame is relayed. LTM frame with TTL<=1 is terminated and not relayed.
+                IEEE P802.1Qcx/D0.3:
+                MEF 38:
+                An initial value for the LTM TTL field.";
+        }
+        container eth-cfm-link-trace-pac {
+            uses eth-cfm-link-trace-pac;
+            description "none";
+        }
+        description "This class represents the Link Trace (LT) process for fault localization or for discovering the intermediate MIPs along the link from the MEP Source to a target MEP or MIP. An LTM frame will be sent from the MEP source to the target MEP/MIP.
+            The termination occurs at specified stop time (schedule attribute of OamJob).";
+    }
+    grouping eth-test-job {
+        container eth-oam-test-loopback-common-pac {
+            uses eth-oam-test-loopback-common-pac;
+            description "none";
+        }
+        leaf test-pattern {
+            type test-pattern;
+            description "G.8052: This parameter provides the test pattern to be used in the optional Data TLV.
+                Examples of test patterns include pseudo-random bit sequence (PRBS) 2^31-1 as specified in clause 5.8 of [ITU-T O.150], all '0' pattern, etc.";
+        }
+        leaf destination-address {
+            type mac-address;
+            description "G.8052: This parameter provides the destination address, i.e., the MAC Address of the target MEP or MIP.";
+        }
+        container eth-test-job-sink-point {
+            uses eth-test-job-sink-point;
+            description "none";
+        }
+        leaf number {
+            type uint64;
+            description "This parameter specifies how many TST messages to be sent.";
+        }
+        description "This class represents the 1-way on-demand in-service or out-of-service diagnostic test. The diagnostic test includes verifying bandwidth throughput, frame loss, bit errors, etc. TST frames are transmitted.
+            The termination occurs at specified stop time (schedule attribute of OamJob).";
+    }
+    grouping eth-on-demand-measurement-job-control-sink {
+        leaf sink-mep-id {
+            type uint64;
+            description "none";
+        }
+        leaf source-address {
+            type mac-address;
+            description "This attribute contains the MAC address of the peer MEP. See G.8013 for details.";
+        }
+        uses eth-measurement-job-control-common;
+        description "This object class represents an on-demand measurement job controller sink for 1-way measurements. It is created as a result of an establishOnDemandDualEndedMeasurementJobSink() operation. It is deleted either automatically after the measurement job has completed (stop time reached) and the performance data AVC notification has been sent, or by an explicit abortOnDemandMeasurementJob() operation when the measurement job is running.";
+    }
+    grouping eth-on-demand-measurement-job-control-source {
+        leaf controller-mep-id {
+            type uint64;
+            description "none";
+        }
+        leaf oam-pdu-generation-type {
+            type oam-pdu-generation-type;
+            description "This attribute contains the pattern that is used for the generation of OAM PDUs.";
+        }
+        leaf destination-address {
+            type mac-address;
+            description "This attribute contains the MAC address of the peer MEP. See G.8013 for details.";
+        }
+        leaf data-tlv-length {
+            type uint64;
+            description "This parameter provides the size of the optional data TLV.
+                Non-negative integer represents the number of bytes for the length of the padding TLV.
+                Notes:
+                When configuring this parameter one should be aware of the maximum allowed total frame size limitation.
+                The attribute is not used in case of 2-way loss measurement.
+                range of type : Depends on the allowed MTU size.";
+        }
+        uses eth-measurement-job-control-common;
+        description "Basic attributes: destinationAddress, priority
+            Measurement configuration related attributes: oamPduGenerationType, startTime, stopTime, messagePeriod, repetitionPeriod, measurementInterval
+            Optional attributes: dataTlvLength, testIdentifier
+            This object class represents an on-demand measurement job controller source for 1-way measurements. It is created as a result of an establishOnDemandDualEndedMeasurementJobSource() operation. It is deleted either automatically after the measurement job has completed (stop time reached), or by an explicit abortOnDemandMeasurementJob() operation while the measurement job is running.";
+    }
+    grouping eth-pro-active-measurement-job-control-sink {
+        leaf sink-mep-id {
+            type uint64;
+            description "none";
+        }
+        leaf source-address {
+            type mac-address;
+            description "This attribute contains the MAC address of the peer MEP. See G.8013 for details.";
+        }
+        leaf is-enabled {
+            type boolean;
+            default "true";
+            description "This attribute identifies the state of the measurement job. If set to TRUE, the MEP performs proactive Performance Measurement.";
+        }
+        uses eth-measurement-job-control-common;
+        description "This object class allows the control of the proactive 1-way measurement. It is created as a part of an establishProActiveDualEndedMeasurementJobSink() operation. Lifecycle: A pre-condition of deleting the object is that the Enable attribute should have the value FALSE.";
+    }
+    grouping eth-pro-active-measurement-job-control-source {
+        leaf controller-mep-id {
+            type uint64;
+            description "none";
+        }
+        leaf destination-address {
+            type mac-address;
+            description "This attribute provides the Unicast MAC address of the intented destination.";
+        }
+        leaf data-tlv-length {
+            type uint64;
+            description "This parameter provides the size of the optional data TLV.
+                Non-negative integer represents the number of bytes for the length of the padding TLV.
+                Notes:
+                When configuring this parameter one should be aware of the maximum allowed total frame size limitation.
+                The attribute is not used in case of 2-way loss measurement.
+                range of type : Depends on the allowed MTU size.";
+        }
+        leaf is-enabled {
+            type boolean;
+            default "true";
+            description "This attribute identifies the state of the measurement job. If set to TRUE, the MEP performs proactive Performance Measurement.";
+        }
+        uses eth-measurement-job-control-common;
+        description "This object class represents a proactive measurement job controller source for 1way measurements. It is created as a part of an establishProactiveDualEndedMeasurementJobSource() operation.";
+    }
+    grouping eth-pro-active-1-dm-performance-data {
+        container statistical-near-end-1-dm-parameters {
+            uses statistical-dm-performance-parameters;
+            description "This attribute contains the statistical near end performnace parameters.";
+        }
+        description "This object class represents the PM current data collected in a pro-active delay measurement job (using 1DM).";
+    }
+    grouping eth-pro-active-1-lm-performance-data {
+        container statistical-near-end-1-lm-parameters {
+            uses statistical-lm-performance-parameters;
+            description "This attribute contains the statistical near end performnace parameters.";
+        }
+        container total-counters-near-end-1-lm-parameters {
+            uses total-counters-lm-performance-parameters;
+            description "This attribute contains the results of an on-demand synthetic loss measurement job in the ingress direction.";
+        }
+        description "This object class represents the PM current data collected in a pro-active loss measurement job (using 1SL).";
+    }
+    grouping eth-pro-active-dm-performance-data {
+        container statistical-bi-dir-dm-parameters {
+            uses statistical-dm-performance-parameters;
+            description "This attribute contains the statistical bidirectional performnace parameters.";
+        }
+        container statistical-far-end-dm-parameters {
+            uses statistical-dm-performance-parameters;
+            description "This attribute contains the statistical far end performnace parameters.";
+        }
+        container statistical-near-end-dm-parameters {
+            uses statistical-dm-performance-parameters;
+            description "This attribute contains the statistical near end performnace parameters.";
+        }
+        description "This object class represents the PM current data collected in a pro-active delay measurement job (using DMM/DMR).";
+    }
+    grouping eth-pro-active-lm-performance-data {
+        container statistical-far-end-lm-parameters {
+            uses statistical-lm-performance-parameters;
+            description "This attribute contains the statistical far end performnace parameters.";
+        }
+        container statistical-near-end-lm-parameters {
+            uses statistical-lm-performance-parameters;
+            description "This attribute contains the statistical near end performnace parameters.";
+        }
+        container total-counters-far-end-lm-parameters {
+            uses total-counters-lm-performance-parameters;
+            description "This attribute contains the results of an on-demand synthetic loss measurement job in the egress direction.";
+        }
+        container total-counters-near-end-lm-parameters {
+            uses total-counters-lm-performance-parameters;
+            description "This attribute contains the results of an on-demand synthetic loss measurement job in the ingress direction.";
+        }
+        leaf bidir-unavailable-intervals {
+            type uint64;
+            description "A generalized (bidirectional) UAS.
+                MEF 35.1: A 32-bit counter reflecting the number of delta-t intervals evaluated as Unavailable (i.e., for which A<Controller, Responder>(delta-t) = 0).
+                ";
+        }
+        description "This object class represents the PM current data collected in a pro-active loss measurement job (using LMM/LMR or SLM/SLR).";
+    }
+    grouping eth-on-demand-1-dm-performance-data {
+        container statistical-near-end-1-dm-parameters {
+            uses statistical-dm-performance-parameters;
+            description "This attribute contains the statistical near end performnace parameters.";
+        }
+        container samples-near-end-1-dm-parameters {
+            uses samples-dm-performance-parameters;
+            description "This attribute contains the results of an on-demand frame delay measurement job in the ingress direction.";
+        }
+        description "none";
+    }
+    grouping eth-on-demand-1-lm-performance-data {
+        container statistical-near-end-1-lm-parameters {
+            uses statistical-lm-performance-parameters;
+            description "This attribute contains the statistical near end performnace parameters.";
+        }
+        container total-counters-near-end-1-lm-parameters {
+            uses total-counters-lm-performance-parameters;
+            description "This attribute contains the results of an on-demand synthetic loss measurement job in the ingress direction.";
+        }
+        description "none";
+    }
+    grouping eth-on-demand-dm-performance-data {
+        container statistical-bi-dir-dm-parameters {
+            uses statistical-dm-performance-parameters;
+            description "This attribute contains the statistical bidirectional performnace parameters.";
+        }
+        container statistical-near-end-dm-parameters {
+            uses statistical-dm-performance-parameters;
+            description "This attribute contains the statistical near end performnace parameters.";
+        }
+        container statistical-far-end-dm-parameters {
+            uses statistical-dm-performance-parameters;
+            description "This attribute contains the statistical far end performnace parameters.";
+        }
+        container samples-near-end-dm-parameters {
+            uses samples-dm-performance-parameters;
+            description "This attribute contains the results of an on-demand frame delay measurement job in the ingress direction.";
+        }
+        container samples-far-end-dm-parameters {
+            uses samples-dm-performance-parameters;
+            description "This attribute contains the results of an on-demand frame delay measurement job in the ingress direction.";
+        }
+        description "none";
+    }
+    grouping eth-on-demand-lm-performance-data {
+        container statistical-near-end-lm-parameters {
+            uses statistical-lm-performance-parameters;
+            description "This attribute contains the statistical near end performnace parameters.";
+        }
+        container statistical-far-end-lm-parameters {
+            uses statistical-lm-performance-parameters;
+            description "This attribute contains the statistical far end performnace parameters.";
+        }
+        container total-counters-near-end-lm-parameters {
+            uses total-counters-lm-performance-parameters;
+            description "This attribute contains the results of an on-demand synthetic loss measurement job in the ingress direction.";
+        }
+        container total-counters-far-end-lm-parameters {
+            uses total-counters-lm-performance-parameters;
+            description "This attribute contains the results of an on-demand synthetic loss measurement job in the egress direction.";
+        }
+        leaf bidir-unavailable-intervals {
+            type uint64;
+            description "A generalized (bidirectional) UAS.
+                MEF 35.1: A 32-bit counter reflecting the number of delta-t intervals evaluated as Unavailable (i.e., for which A<Controller, Responder>(delta-t) = 0).
+                ";
+        }
+        description "none";
+    }
+    grouping eth-pro-active-dual-ended-measurement-job {
+        container eth-pro-active-measurement-job-control-source {
+            uses eth-pro-active-measurement-job-control-source;
+            description "none";
+        }
+        container eth-pro-active-measurement-job-control-sink {
+            uses eth-pro-active-measurement-job-control-sink;
+            description "none";
+        }
+        description "none";
+    }
+    grouping eth-pro-active-single-ended-measurement-job {
+        container eth-pro-active-measurement-job-control-source {
+            uses eth-pro-active-measurement-job-control-source;
+            description "none";
+        }
+        description "none";
+    }
+    grouping eth-on-demand-single-ended-measurement-job {
+        container eth-on-demand-measurement-job-control-source {
+            uses eth-on-demand-measurement-job-control-source;
+            description "none";
+        }
+        description "none";
+    }
+    grouping eth-on-demand-dual-ended-measurement-job {
+        container eth-on-demand-measurement-job-control-source {
+            uses eth-on-demand-measurement-job-control-source;
+            description "none";
+        }
+        container eth-on-demand-measurement-job-control-sink {
+            uses eth-on-demand-measurement-job-control-sink;
+            description "none";
+        }
+        description "none";
+    }
+    grouping eth-loopback-result-data {
+        leaf rec-lbr-frames {
+            type uint64;
+            config false;
+            description "G.8052: This parameter returns the total number of received LBR messages, including the out of order LBR frames.";
+        }
+        leaf out-of-order-lbr-frames {
+            type uint64;
+            config false;
+            description "G.8052: This parameter returns the number of LBR traffic unites (messages) that were received out of order (OO).";
+        }
+        leaf sent-lbm-frames {
+            type uint64;
+            config false;
+            description "G.8052: This parameter returns the total number of sent LBM frames.";
+        }
+        leaf crc-lbr-frames {
+            type uint64;
+            config false;
+            description "G.8052: This parameter returns the number of LBR frames where the CRC in the pattern failed.";
+        }
+        leaf ber-lbr-frames {
+            type uint64;
+            config false;
+            description "G.8052: This parameter returns the number of LBR frames where there was a bit error in the pattern.";
+        }
+        leaf-list detected-peer-mep {
+            type mac-address;
+            config false;
+            description "G.8052: This parameter returns the MAC addresses of the discovered peer MEPs of the subject MEP.";
+        }
+        description "none";
+    }
+    grouping eth-link-trace-result-data {
+        list result-list {
+            key 'source-address';
+            config false;
+            uses link-trace-result;
+            description "G.8052: This parameter returns the results of the LT process. It contains a list of the result received from the individual LTR frames.
+                The result from the individual LTR frame include the Source Mac Address, the TTL, and TLV.";
+        }
+        list eth-cfm-link-trace-result-data {
+            key 'seq-number';
+            uses eth-cfm-link-trace-result-data;
+            description "none";
+        }
+        description "none";
+    }
+    grouping eth-test-result-data {
+        leaf sent-tst-frames {
+            type uint64;
+            config false;
+            description "G.8052: This parameter returns the total number of sent TST frames.
+                Optional in case of sink only MEP.";
+        }
+        leaf rec-tst-frames {
+            type uint64;
+            description "Received TST frames. Optional in case of source only MEP.";
+        }
+        description "none";
+    }
+    grouping eth-oam-test-loopback-common-pac {
+        leaf period {
+            type oam-period;
+            description "G.8052: This parameter provides the periodicity of the TST OAM messages.
+                G.8052: This parameter provides the periodicity of the LBM OAM messages used in the LB Series process.";
+        }
+        leaf drop-eligibility {
+            type boolean;
+            description "G.8052: This parameter provides the eligibility of frames with unicast ETH-TST information to be discarded when congestion conditions are encountered.
+                G.8052: This parameter provides the eligibility of frames with unicast ETH-LB information to be discarded when congestion conditions are encountered.";
+        }
+        leaf data-tlv-length {
+            type uint64;
+            description "G.8052: This parameter provides the length (in number of octet) of the optional Data TLV to be included in the TST frame.";
+        }
+        description "none";
+    }
+    grouping eth-cfm-maintenance-domain {
+        leaf maintenance-domain-name-type {
+            type maintenance-domain-name-type;
+            description "IEEE P802.1Qcx/D0.3:
+                MEF 38:
+                The Maintenance Domain name format choice.";
+        }
+        leaf maintenance-domain-name {
+            type string;
+            description "IEEE P802.1Qcx/D0.3:
+                MEF 38:
+                A reference to the maintenance domain that this maintenance group is associated with.";
+        }
+        description "IEEE CFM parameters applicable to the composing class.
+            IEEE P802.1Qcx/D0.3:
+            MEF 38:
+            A Maintenance Domain is the network or the part of the network for which faults in connectivity can be managed.
+            A Maintenance Domain object is required in order to create an MA with a Maintenance Association Identifier (MAID) that includes that Maintenance Domains Name.
+            From this Maintenance Domain managed object, all Maintenance Association managed objects associated with that Maintenance Domain managed object can be accessed, and thus controlled.";
+    }
+    grouping eth-cfm-maintenance-association {
+        container maintenance-association-name {
+            uses maintenance-association-name;
+            description "IEEE P802.1Qcx/D0.3:
+                MEF 38:
+                The Maintenance Association name and name format choice.";
+        }
+        leaf id-permission {
+            type maintenance-association-id-permission-types;
+            description "IEEE P802.1Qcx/D0.3:
+                MEF 38:
+                This parameter indicates what, if anything, is to be included in the Sender ID TLV transmitted by Maintenance Points configured in this MA.
+                A value of 'defer' means that the contents of the Sender ID TLV are determined by the enclosing Maintenance Domain instance.";
+        }
+        description "IEEE CFM parameters applicable to the composing class.
+            IEEE P802.1Qcx/D0.3:
+            Provides configuration and operational data for the Maintenance Associations.
+            A Maintenance Association is a set of MEPs, each configured with the same MAID and MD level, established to verify the integrity of a single service instance.
+            A Maintenance Association can be thought of as a full mesh of Maintenance Entities among a set of MEPs so configured.";
+    }
+    grouping eth-cfm-link-trace-pac {
+        leaf period {
+            type oam-period;
+            description "IEEE P802.1Qcx/D0.3:
+                The interval between LTM transmissions to be used by all MEPs in the Maintenance Association.";
+        }
+        leaf ltm-flags {
+            type ltmflags;
+            description "IEEE P802.1Qcx/D0.3:
+                MEF 38:
+                The flags field for the LTMs transmitted by the MEP.";
+        }
+        leaf target-mep-id {
+            type uint64;
+            description "IEEE P802.1Qcx/D0.3:
+                MEF 38:
+                An indication of a destination MEP, the MEPID of a MEP.
+                Alternative to destination MAC address.
+                ";
+        }
+        leaf drop-eligibility {
+            type boolean;
+            description "IEEE P802.1Qcx/D0.3:
+                MEF 38:
+                Drop eligible bit value to be used in the VLAN tag, if present in the transmitted frame.";
+        }
+        description "none";
+    }
+    grouping eth-cfm-link-trace-result-data {
+        leaf seq-number {
+            type uint64;
+            description "IEEE P802.1Qcx/D0.3:
+                type uint32 range '0..4294967295'
+                Transaction identifier returned by a previous transmit linktrace message command, indicating which LTMs response is going to be returned.
+                MEF 38:
+                The LTM Transaction Identifier to which the LTR entries will be attached.";
+        }
+        leaf receive-order {
+            type uint64;
+            description "IEEE P802.1Qcx/D0.3:
+                MEF 38:
+                type uint32 range '1..4294967295'
+                An index to distinguish among multiple LTRs with the same LTR Transaction Identifier field value.
+                Assigned sequentially from 1, in the order that the Linktrace Initiator received the LTRs.";
+        }
+        leaf reply-ttl {
+            type uint64;
+            config false;
+            description "IEEE P802.1Qcx/D0.3:
+                MEF 38:
+                TTL field value for a returned LTR.
+                Range '0..255'";
+        }
+        leaf forwarded {
+            type boolean;
+            config false;
+            description "IEEE P802.1Qcx/D0.3:
+                MEF 38:
+                Indicates if a LTM was forwarded by the responding MP, as returned in the FwdYes flag of the flags field.";
+        }
+        leaf terminal-mep {
+            type boolean;
+            config false;
+            description "IEEE P802.1Qcx/D0.3:
+                MEF 38:
+                A Boolean value stating whether the forwarded LTM reached a MEP enclosing its MA, as returned in the Terminal MEP flag of the Flags field.";
+        }
+        leaf last-egress-identifier {
+            type string;
+            config false;
+            description "IEEE P802.1Qcx/D0.3:
+                MEF 38:
+                String length '8'
+                An octet field holding the Last Egress Identifier returned in the LTR Egress Identifier TLV of the LTR.
+                The Last Egress Identifier identifies the MEP Linktrace Initiator that originated, or the Linktrace Responder that forwarded, the LTM to which this LTR is the response.
+                This is the same value as the Egress Identifier TLV of that LTM.";
+        }
+        leaf next-egress-identifier {
+            type string;
+            config false;
+            description "IEEE P802.1Qcx/D0.3:
+                MEF 38:
+                String length '8'
+                An octet field holding the Next Egress Identifier returned in the LTR Egress Identifier TLV of the LTR.
+                The Next Egress Identifier Identifies the Linktrace Responder that transmitted this LTR, and can forward the LTM to the next hop.
+                This is the same value as the Egress Identifier TLV of the forwarded LTM, if any.
+                If the FwdYes bit of the Flags field is false, the contents of this field are undefined, i.e., any value can be transmitted, and the field is ignored by the receiver.";
+        }
+        leaf relay-action-field {
+            type link-trace-relay-action-field-value;
+            config false;
+            description "IEEE P802.1Qcx/D0.3:
+                MEF 38:
+                An enumerated value indicating the value returned in the Relay Action field.
+                ";
+        }
+        leaf ingress-action-field {
+            type link-trace-ingress-action-field-value;
+            config false;
+            description "IEEE P802.1Qcx/D0.3:
+                MEF 38:
+                The value returned in the Ingress Action Field of the LTM.
+                IEEE P802.1Qcx/D0.3:
+                The value INGRESS-NO-TLV indicates that no Reply Ingress TLV was returned in the LTM.
+                ";
+        }
+        leaf ingress-mac {
+            type mac-address;
+            config false;
+            description "IEEE P802.1Qcx/D0.3:
+                MEF 38:
+                MAC address returned in the ingress MAC address field.
+                IEEE P802.1Qcx/D0.3:
+                If the ingressActionField attribute contains the value INGRESS-NO-TLV, then the contents of this attribute is meaningless.";
+        }
+        container ingress-port-id {
+            config false;
+            uses lldp-port-id-subtype;
+            description "IEEE P802.1Qcx/D0.3:
+                MEF 38:
+                Ingress Port ID.
+                IEEE P802.1Qcx/D0.3:
+                If the ingressActionField attribute contains the value INGRESS-NO-TLV, then the contents of this attribute are meaningless.";
+        }
+        leaf egress-action-field {
+            type link-trace-egress-action-field-value;
+            config false;
+            description "IEEE P802.1Qcx/D0.3:
+                MEF 38:
+                An enumerated value indicating the value returned in the Egress Action field.
+                IEEE P802.1Qcx/D0.3:
+                The value EGRESS-NO-TLV indicates that no Reply Egress TLV was returned in the LTM.";
+        }
+        leaf egress-mac {
+            type mac-address;
+            config false;
+            description "IEEE P802.1Qcx/D0.3:
+                MEF 38:
+                MAC address returned in the egress MAC address field.
+                IEEE P802.1Qcx/D0.3:
+                If the egressActionField contains the value EGRESS-NO-TLV, then the contents of this attribute are meaningless.";
+        }
+        container egress-port-id {
+            config false;
+            uses lldp-port-id-subtype;
+            description "MEF 38:
+                IEEE P802.1Qcx/D0.3:
+                Egress Port ID.
+                IEEE P802.1Qcx/D0.3:
+                If the egressActionField attribute contains the value EGRESS-NO-TLV, then the contents of this attribute are meaningless.";
+        }
+        leaf organization-specific-tlv {
+            type string;
+            config false;
+            description "String length '0 | 4..1500';
+                All Organization specific TLVs returned in the LTR, if any. Includes all octets including and following the TLV Length field of each TLV, concatenated together.";
+        }
+        container chassis-id {
+            config false;
+            uses lldp-chassis-id-subtype;
+            description "MEF 38:
+                The chassis-id-subtype contains the chassis ID entity that is listed in the chassis ID field. This is a combination of the 'Chassis ID Subtype' and 'chsssis ID' fields.
+                IEEE P802.1Qcx/D0.3:
+                The Chassis ID returned in the Sender ID TLV of the LTR, if any.
+                The format of a chassis identifier string. Objects of this type are always used with an associated lldp-chassis-is-subtype object, which identifies the format of the particular lldp-chassis-id object instance.
+                If the associated lldp-chassis-id-subtype object has a value of chassis-component, then the octet string identifies a particular instance of the entPhysicalAlias object (defined in IETF RFC 2737) for a chassis component (i.e., an entPhysicalClass value of chassis(3)).
+                If the associated lldp-chassis-id-subtype object has a value of interface-alias, then the octet string identifies a particular instance of the ifAlias object (defined in IETF RFC 2863) for an interface on the containing chassis.
+                If the particular ifAlias object does not contain any values, another chassis identifier type should be used.";
+        }
+        description "IEEE P802.1Qcx/D0.3:
+            MEF 38:
+            An index to distinguish among multiple LTRs with the same LTR  transaction-id field value. 
+            Assigned sequentially from 1, in the order that the Linktrace Initiator received the LTRs.
+            ";
+    }
+    grouping eth-oam-service {
+        container eth-cfm-maintenance-domain {
+            uses eth-cfm-maintenance-domain;
+            description "none";
+        }
+        container eth-cfm-maintenance-association {
+            uses eth-cfm-maintenance-association;
+            description "none";
+        }
+        container eth-meg-common {
+            uses eth-meg-common;
+            description "none";
+        }
+        description "This class defines the parameters for configuration of MEG.";
+    }
+    grouping eth-oam-mep-service-point {
+        container eth-mep-sink {
+            uses eth-mep-sink;
+            description "none";
+        }
+        container eth-mep-source {
+            uses eth-mep-source;
+            description "none";
+        }
+        container eth-mep-common {
+            uses eth-mep-common;
+            description "none";
+        }
+        description "This class defines the common parameters for configuration of Sink and/or Source MEP.";
+    }
+    grouping eth-oam-mip-service-point {
+        container eth-mip-common {
+            uses eth-mip-common;
+            description "none";
+        }
+        description "This class defines the common parameters for configuration of MIP.";
+    }
+    grouping eth-mip-common {
+        leaf is-full-mip {
+            type boolean;
+            config false;
+            description "This attribute indicates whether the MIP is a full MIP (true) or a down-half MIP (false). Up-half MIP is not foreseen by G.8052";
+        }
+        description "none";
+    }
+    grouping eth-meg-common {
+        leaf meg-level {
+            type uint64;
+            description "none";
+        }
+        leaf client-mel {
+            type uint64;
+            description "none";
+        }
+        leaf meg-identifier {
+            type string;
+            description "Optional in case 802.1Q maintenanceAssociationName is used.";
+        }
+        leaf is-cc-enabled {
+            type boolean;
+            description "This attribute models the MI_CC_Enable signal defined in G.8021 and configured as specified in G8051.
+                ITU-T G.8013/Y.1731 (2015)/Amd.1 (11/2018): When ETH-CC transmission is enabled in a MEG,
+                all MEPs are enabled to periodically transmit frames with ETH-CC information to their peer MEPs in the MEG.";
+        }
+        leaf cc-period {
+            type oam-period;
+            description "This attribute models the MI_CC_Period signal defined in G.8021 and configured as specified in G8051. 
+                It is the period at which the CCM message should be sent. 
+                Default values are: 3.33 ms for PS, 100 ms for PM, 1 s for FM.
+                ITU-T G.8013/Y.1731 (2015)/Amd.1 (11/2018): The ETH-CC transmission period is the same for all MEPs in the MEG.";
+        }
+        description "none";
+    }
+    grouping eth-test-job-sink-point {
+        leaf source-address {
+            type mac-address;
+            description "This attribute contains the MAC address of the peer MEP.";
+        }
+        description "none";
+    }
+    grouping eth-measurement-job-control-common {
+        leaf priority {
+            type uint64 {
+                range "0..7";
+            }
+            default "7";
+            description "This attribute contains the priority value on which the MEP performs the measurement.
+                When the measurement is enabled, the MEP should use this value to encode the priority of generated measurement frames (OAM PDU frames.).
+                The EMF usese this value to assign the P parameter of the measurement operation.";
+        }
+        leaf test-identifier {
+            type uint64;
+            description "This attribute is used to distinguish each measurement session if multiple measurement sessions are simultaneously activated towards a peer MEP including concurrent on-demand and proactive tests.
+                It must be unique at least within the context of any measurement type for the MEG and initiating MEP.
+                Note: The attribute is not used in case of 2-way loss measurement.
+                range of type : 0..(2^32) - 1";
+        }
+        leaf message-period {
+            type uint64;
+            default "1000";
+            description "This attribute indicates the period (frequency) of the measurement frame transmission.
+                Note that the value 0 means that only one OAM message per measurement interval is generated.
+                Unit is milliseconds.
+                range of type : 100ms, 1s, 10s";
+        }
+        leaf measurement-interval {
+            type uint64;
+            description "This attribute contains the discrete non overlapping periods of time (in seconds) during which measurements are performed
+                (i.e., OAM messages are generated) and reports are gathered at the end of the measurement intervals.
+                Note that the value 0 means a degenerated measurement interval with a single OAM message and the report is sent as immediately as possible.";
+        }
+        leaf repetition-period {
+            type repetition-period;
+            description "This attribute contains the time between the start of two measurement intervals. This IS applicable for the repetitive instance type and MAY be applicable for the repetitive series type. 
+                Note that a value of 0 means not applicable (NA), which is for the cases of single instance, single series, or repetitive series without extra gap in between the measurement intervals (i.e., also as known as continuous series).";
+        }
+        leaf time-of-the-day-alignment {
+            type boolean;
+            default "true";
+            description "MEF 35.1:
+                [D7] A SOAM PM Implementation SHOULD allow for no alignment to the time-of-day clock.";
+        }
+        leaf offset-from-time-of-the-day {
+            type uint64;
+            description "MEF 35.1:
+                [D8] A SOAM PM Implementation SHOULD support a configurable (in minutes) offset from ToD time for alignment of the start of Measurement Intervals other than the first Measurement Interval.";
+        }
+        leaf flr-availability-delta-time {
+            type uint64;
+            default "1";
+            description "Time length over which each Availability Frame Loss Ratio value is calculated.
+                MEF 35.1:
+                [R78]/[CR58] [O8] A SOAM PM Implementation MUST support a configurable parameter for the length of time over which each Availability flr value is calculated, with a range of 1s – 300s.  This parameter is equivalent to delta-t as specified by MEF 10.3.
+                [R79]/[CR59] [O8] The length of time over which each Availability flr value is calculated (delta-t) MUST be an integer multiple of the interval between each SLM/1SL frame transmission.
+                [D31]/[CD16] [O8] The default length of time over which each Availability flr value is calculated SHOULD be 1s.";
+        }
+        leaf flr-availability-threshold {
+            type decimal64 {
+                fraction-digits 7;
+            }
+            default "0.1";
+            description "Frame loss ratio threshold to be used in evaluating the Available/Unavailable state of each time interval (as specified by Availability Delta Time).
+                MEF 35.1:
+                [R81]/[CR61] A SOAM PM Implementation MUST support a configurable Availability frame loss ratio threshold to be used in evaluating the Available/Unavailable state of each delta-t interval per MEF 10.3
+                [R82]/[CR62] The Availability frame loss ratio threshold range of 0.00 through 1.00 MUST be supported in increments of 0.01.
+                [D33]/[CD18] [O8] The default Availability frame loss ratio threshold SHOULD be 0.1.";
+        }
+        leaf flr-availability-samples {
+            type uint64;
+            default "10";
+            description "Number of consecutive Availability Frame Loss Ratio measurements to be used to determine Available/Unavailable state transitions.
+                MEF 35.1:
+                [R80]/[CR60] [O8] The number range of 1 through 10 MUST be supported for the configurable number of consecutive Availability flr measurements to be used to determine Available/Unavailable state transitions.
+                This parameter is equivalent to the Availability parameter of n as specified by MEF 10.3.
+                [D32]/[CD17] [O8] The default number of n for Availability SHOULD be 10.";
+        }
+        description "Time length over which each Availability Frame Loss Ratio value is calculated. This parameter allows to generalize SES and UAS.
+            MEF 35.1:
+            [R78]/[CR58] [O8] A SOAM PM Implementation MUST support a configurable parameter for the length of time over which each Availability flr value is calculated, with a range of 1s – 300s.  This parameter is equivalent to delta-t as specified by MEF 10.3.
+            [R79]/[CR59] [O8] The length of time over which each Availability flr value is calculated (delta-t) MUST be an integer multiple of the interval between each SLM/1SL frame transmission.
+            [D31]/[CD16] [O8] The default length of time over which each Availability flr value is calculated SHOULD be 1s.";
+    }
+    grouping eth-pro-active-1-dm-source-performance-data {
+        description "This object class represents the PM current data collected in a pro-active delay measurement job (using 1DM), on the source or controller MEP.";
+    }
+    grouping eth-pro-active-1-lm-source-performance-data {
+        description "This object class represents the PM current data collected in a pro-active loss measurement job (using 1SL), on the source or controller MEP.";
+    }
+    grouping eth-on-demand-1-lm-source-performance-data {
+        description "none";
+    }
+    grouping eth-on-demand-1-dm-source-performance-data {
+        description "none";
+    }
+    grouping eth-connectivity-service-end-point-spec {
+        container ety-termination-common-pac {
+            uses ety-termination-common-pac;
+            description "none";
+        }
+        container eth-termination-common-pac {
+            uses eth-termination-common-pac;
+            description "none";
+        }
+        container eth-ctp-common-pac {
+            uses eth-ctp-common-pac;
+            description "none";
+        }
+        description "none";
+    }
+    grouping ety-termination-common-pac {
+        leaf is-fts-enabled {
+            type boolean;
+            description "This attribute indicates whether Forced Transmitter Shutdown (FTS) is enabled or not. It models the ETYn_TT_So_MI_FTSEnable information.";
+        }
+        leaf is-tx-pause-enabled {
+            type boolean;
+            description "This attribute identifies whether the Transmit Pause process is enabled or not. It models the MI_TxPauseEnable defined in G.8021.";
+        }
+        description "none";
+    }
+    grouping eth-termination-common-pac {
+        container priority-regenerate {
+            uses priority-mapping;
+            description "This attribute models the ETHx/ETH-m _A_Sk_MI_P_Regenerate information defined in G.8021.";
+        }
+        leaf priority-code-point-config {
+            type pcp-coding;
+            description "This attribute models the ETHx/ETH-m _A_Sk_MI_PCP_Config information defined in G.8021.";
+        }
+        leaf ether-type {
+            type vlan-type;
+            description "This attribute models the ETHx/ETH-m _A_Sk_MI_Etype information defined in G.8021.";
+        }
+        leaf frametype-config {
+            type frame-type;
+            description "This attribute models the ETHx/ETH-m_A_Sk_MI_Frametype_Config information defined in G.8021.";
+        }
+        leaf-list filter-config-1 {
+            type mac-address;
+            description "This attribute models the ETHx/ETH-m_A_Sk_MI_Filter_Config information defined in G.8021.
+                It indicates the configured filter action for each of the 33 group MAC addresses for control frames.
+                The 33 MAC addresses are:
+                01-80-C2-00-00-10, 
+                01-80-C2-00-00-00 to 01-80-C2-00-00-0F, and 
+                01-80-C2-00-00-20 to 01-80-C2-00-00-2F.
+                The filter action is Pass or Block. 
+                If the destination address of the incoming ETH_CI_D matches one of the above addresses, the filter process shall perform the corresponding configured filter action. 
+                If none of the above addresses match, the ETH_CI_D is passed.
+                ";
+        }
+        leaf port-vid {
+            type vid;
+            default "1";
+            description "This attribute models the ETHx/ETH-m _A_Sk_MI_PVID information defined in G.8021.";
+        }
+        description "none";
+    }
+    grouping eth-ctp-common-pac {
+        leaf-list auxiliary-function-position-sequence {
+            type uint64;
+            description "This attribute indicates the positions (i.e., the relative order) of all the MEP, MIP, and TCS objects which are associated with the CTP.";
+        }
+        leaf collector-max-delay {
+            type uint64;
+            description "See 802.1AX:
+                The value of this attribute defines the maximum delay, in tens of microseconds, that may be imposed by the Frame Collector between receiving a frame from an Aggregator Parser, and either delivering the frame to its MAC Client or discarding the frame (see IEEE 802.1AX clause 5.2.3.1.1).
+                range of type : 16-bit";
+        }
+        leaf csf-config {
+            type csf-config;
+            description "This attribute models the combination of all CSF related MI signals (MI_CSF_Enable, MI_CSFrdifdi_Enable, MI_CSFdci_Enable) as defined in G.8021.
+                range of type : true, false";
+        }
+        leaf csf-rdi-fdi-enable {
+            type boolean;
+            description "This attribute models the MI_CSFrdifdiEnable information defined in G.8021.";
+        }
+        leaf csf-report {
+            type boolean;
+            description "This attribute models the MI_CSF_Reported information defined in G.8021.
+                range of type : true, false";
+        }
+        container filter-config {
+            uses control-frame-filter;
+            description "This attribute models the FilterConfig MI defined in section 8.3/G.8021. It indicates the configured filter action for each of the 33 group MAC addresses for control frames. The 33 MAC addresses are:
+                - All bridges address: 01-80-C2-00-00-10,
+                - Reserved addresses: 01-80-C2-00-00-00 to 01-80-C2-00-00-0F,
+                - GARP Application addresses: 01-80-C2-00-00-20 to 01-80-C2-00-00-2F.
+                The filter action is Pass or Block. 
+                If the destination address of the incoming ETH_CI_D matches one of the above addresses, the filter process shall perform the corresponding configured filter action. 
+                If none of the above addresses match, the ETH_CI_D is passed.";
+        }
+        leaf-list filter-config-snk {
+            type mac-address;
+            description "This attribute models the FilteConfig MI defined in 8.3/G.8021. It indicates the configured filter action for each of the 33 group MAC addresses for control frames. The 33 MAC addresses are:
+                01-80-C2-00-00-10, 
+                01-80-C2-00-00-00 to 01-80-C2-00-00-0F, and 
+                01-80-C2-00-00-20 to 01-80-C2-00-00-2F.
+                The filter action is Pass or Block. 
+                If the destination address of the incoming ETH_CI_D matches one of the above addresses, the filter process shall perform the corresponding configured filter action. 
+                If none of the above addresses match, the ETH_CI_D is passed.";
+        }
+        leaf is-ssf-reported {
+            type boolean;
+            description "This attribute provisions whether the SSF defect should be reported as fault cause or not.
+                It models the ETH-LAG_FT_Sk_MI_SSF_Reported defined in G.8021.";
+        }
+        leaf mac-length {
+            type uint64;
+            default "2000";
+            description "This attribute models the MAC_Lenght MI defined in 8.6/G.8021 for the MAC Length Check process. It indicates the allowed maximum frame length in bytes.
+                range of type : 1518, 1522, 2000";
+        }
+        leaf pll-thr {
+            type uint64;
+            description "This attribute provisions the threshold for the number of active ports. If the number of active ports is more than zero but less than the provisioned threshold, a cPLL (Partial Link Loss) is raised. See section 9.7.1.2 of G.8021.
+                range of type : 0..number of ports";
+        }
+        leaf vlan-config {
+            type uint64;
+            description "This attribute models the ETHx/ETH-m_A_So_MI_Vlan_Config information defined in G.8021.
+                range of type : -1, 0, 1..4094";
+        }
+        container traffic-shaping-pac {
+            uses traffic-shaping-pac;
+            description "none";
+        }
+        container traffic-conditioning-pac {
+            uses traffic-conditioning-pac;
+            description "none";
+        }
+        description "none";
+    }
+    grouping eth-service-inteface-point-spec {
+        uses ety-pac;
+        description "none";
+    }
+    grouping ety-pac {
+        leaf phy-type {
+            type ety-phy-type;
+            config false;
+            description "This attribute identifies the PHY type of the ETY trail termination. See IEEE 802.3 clause 30.3.2.1.2.";
+        }
+        leaf-list phy-type-list {
+            type ety-phy-type;
+            config false;
+            description "This attribute identifies the possible PHY types that could be supported at the ETY trail termination. See IEEE 802.3 clause 30.3.2.1.3.";
+        }
+        description "none";
+    }
+    grouping eth-connectivity-service {
+        description "none";
+    }
+
+    /**************************
+    * package type-definitions
+    **************************/ 
+    identity ETH_OAM_JOB_TYPE {
+        base tapi-oam:OAM_JOB_TYPE;
+        description "none";
+    }
+    identity ETH_OAM_JOB_TYPE_ETH_1DM {
+        base ETH_OAM_JOB_TYPE;
+        description "none";
+    }
+    identity ETH_OAM_JOB_TYPE_ETH_1SLM {
+        base ETH_OAM_JOB_TYPE;
+        description "none";
+    }
+    identity ETH_OAM_JOB_TYPE_ETH_LM_CCM {
+        base ETH_OAM_JOB_TYPE;
+        description "none";
+    }
+    identity ETH_OAM_JOB_TYPE_ETH_LM_LMM {
+        base ETH_OAM_JOB_TYPE;
+        description "none";
+    }
+    identity ETH_OAM_JOB_TYPE_ETH_SLM {
+        base ETH_OAM_JOB_TYPE;
+        description "none";
+    }
+    identity ETH_OAM_JOB_TYPE_ETH_DM {
+        base ETH_OAM_JOB_TYPE;
+        description "none";
+    }
+    identity ETH_OAM_JOB_TYPE_ETH_LTC {
+        base ETH_OAM_JOB_TYPE;
+        description "none";
+    }
+    identity ETH_OAM_JOB_TYPE_ETH_LBK {
+        base ETH_OAM_JOB_TYPE;
+        description "none";
+    }
+    identity ETH_OAM_JOB_TYPE_ETH_TEST {
+        base ETH_OAM_JOB_TYPE;
+        description "none";
+    }
+    identity MAINTENANCE_DOMAIN_NAME_TYPE {
+        description "none";
+    }
+    identity MAINTENANCE_DOMAIN_NAME_TYPE_NONE {
+        base MAINTENANCE_DOMAIN_NAME_TYPE;
+        description "IEEE P802.1Qcx/D0.3:
+            No format specified, usually because there is not a Maintenance Domain Name. In this case, a zero length OCTET string for the Domain name field is acceptable.
+            MEF 38:
+            No format specified.";
+    }
+    identity MAINTENANCE_DOMAIN_NAME_TYPE_DOMAIN-NAME {
+        base MAINTENANCE_DOMAIN_NAME_TYPE;
+        description "IEEE P802.1Qcx/D0.3:
+            MEF 38:
+            Domain Name like string, globally unique text string derived from a DNS name.";
+    }
+    identity MAINTENANCE_DOMAIN_NAME_TYPE_MAC-ADDR-AND-UINT_ {
+        base MAINTENANCE_DOMAIN_NAME_TYPE;
+        description "IEEE P802.1Qcx/D0.3:
+            MEF 38:
+            MAC address + 2-octet (unsigned) integer.";
+    }
+    identity MAINTENANCE_DOMAIN_NAME_TYPE_STRING {
+        base MAINTENANCE_DOMAIN_NAME_TYPE;
+        description "IEEE P802.1Qcx/D0.3:
+            MEF 38:
+            RFC2579 DisplayString, except that the character codes 0-31 (decimal) are not used.
+            ";
+    }
+    identity MAINTENANCE_DOMAIN_ID_PERMISSION_TYPES {
+        description "none";
+    }
+    identity MAINTENANCE_DOMAIN_ID_PERMISSION_TYPES_SEND-ID-NONE {
+        base MAINTENANCE_DOMAIN_ID_PERMISSION_TYPES;
+        description "The Sender ID TLV is not to be sent.";
+    }
+    identity MAINTENANCE_DOMAIN_ID_PERMISSION_TYPES_SEND-ID-CHASSIS {
+        base MAINTENANCE_DOMAIN_ID_PERMISSION_TYPES;
+        description "The Chassis ID Length, Chassis ID Subtype, and Chassis ID fields of te Sender ID TLV are to be sent.";
+    }
+    identity MAINTENANCE_DOMAIN_ID_PERMISSION_TYPES_SEND-ID-MANAGE {
+        base MAINTENANCE_DOMAIN_ID_PERMISSION_TYPES;
+        description "The Management Address Length and Management Address of the Sender ID TLV are to be sent.";
+    }
+    identity MAINTENANCE_DOMAIN_ID_PERMISSION_TYPES_SEND-ID-CHASSIS-MANAGE {
+        base MAINTENANCE_DOMAIN_ID_PERMISSION_TYPES;
+        description "The Chassis ID Length, Chassis ID Subtype, Chassis ID, Management Address Length and Management Address fields are all to be sent.";
+    }
+    identity MAINTENANCE_ASSOCIATION_ID_PERMISSION_TYPES {
+        description "none";
+    }
+    identity MAINTENANCE_ASSOCIATION_ID_PERMISSION_TYPES_SEND-ID-DEFER {
+        base MAINTENANCE_ASSOCIATION_ID_PERMISSION_TYPES;
+        description "IEEE P802.1Qcx/D0.3:
+            MEF 38:
+            The content of the Sender ID TLV are determined by the corresponding Maintenance Domain variable.";
+    }
+    identity LINK_TRACE_RELAY_ACTION_FIELD_VALUE {
+        description "none";
+    }
+    identity LINK_TRACE_RELAY_ACTION_FIELD_VALUE_RELAY-HIT {
+        base LINK_TRACE_RELAY_ACTION_FIELD_VALUE;
+        description "The LTM reached a Maintenance Point whose MAC address matches the target address.";
+    }
+    identity LINK_TRACE_RELAY_ACTION_FIELD_VALUE_RELAY-FDB {
+        base LINK_TRACE_RELAY_ACTION_FIELD_VALUE;
+        description "The Egress Port was determined by consulting the Filtering Database.";
+    }
+    identity LINK_TRACE_RELAY_ACTION_FIELD_VALUE_RELAY-MPDB {
+        base LINK_TRACE_RELAY_ACTION_FIELD_VALUE;
+        description "The Egress Port was determined by consulting the MIP CCM Database.";
+    }
+    identity LINK_TRACE_INGRESS_ACTION_FIELD_VALUE {
+        description "none";
+    }
+    identity LINK_TRACE_INGRESS_ACTION_FIELD_VALUE_INGRESS-NO-TLV {
+        base LINK_TRACE_INGRESS_ACTION_FIELD_VALUE;
+        description "Indicates that no Reply Ingress TLV was returned in the LTM.";
+    }
+    identity LINK_TRACE_INGRESS_ACTION_FIELD_VALUE_INGRESS-OK {
+        base LINK_TRACE_INGRESS_ACTION_FIELD_VALUE;
+        description "The target data frame would be passed through to the MAC Relay Entity.";
+    }
+    identity LINK_TRACE_INGRESS_ACTION_FIELD_VALUE_INGRESS-DOWN {
+        base LINK_TRACE_INGRESS_ACTION_FIELD_VALUE;
+        description "The Bridge Ports MAC_Operational parameter is false.";
+    }
+    identity LINK_TRACE_INGRESS_ACTION_FIELD_VALUE_INGRESS-BLOCKED {
+        base LINK_TRACE_INGRESS_ACTION_FIELD_VALUE;
+        description "The target data frame would not be forwarded if received on this Port due to active topology enforcement.";
+    }
+    identity LINK_TRACE_INGRESS_ACTION_FIELD_VALUE_INGRESS-VID {
+        base LINK_TRACE_INGRESS_ACTION_FIELD_VALUE;
+        description "The ingress port is not in the member set of the LTMs VID, and ingress filtering is enabled, so the target data frame would be filtered by ingress filtering.";
+    }
+    identity LINK_TRACE_EGRESS_ACTION_FIELD_VALUE {
+        description "none";
+    }
+    identity LINK_TRACE_EGRESS_ACTION_FIELD_VALUE_EGRESS-NO-TLV {
+        base LINK_TRACE_EGRESS_ACTION_FIELD_VALUE;
+        description "Indicates that no Reply Egress TLV was returned in the LTM.";
+    }
+    identity LINK_TRACE_EGRESS_ACTION_FIELD_VALUE_EGRESS-OK {
+        base LINK_TRACE_EGRESS_ACTION_FIELD_VALUE;
+        description "The targeted data frame would be forwarded.";
+    }
+    identity LINK_TRACE_EGRESS_ACTION_FIELD_VALUE_EGRESS-DOWN {
+        base LINK_TRACE_EGRESS_ACTION_FIELD_VALUE;
+        description "The Egress Port can be identified, but that Bridge Port MAC_Operational parameter is false.";
+    }
+    identity LINK_TRACE_EGRESS_ACTION_FIELD_VALUE_EGRESS-BLOCKED {
+        base LINK_TRACE_EGRESS_ACTION_FIELD_VALUE;
+        description "The Egress Port can be identified, but the data frame would not pass through the Egress Port due to active topology management (i.e., the Bridge Port is not in the Forwarding state).";
+    }
+    identity LINK_TRACE_EGRESS_ACTION_FIELD_VALUE_EGRESS-VID {
+        base LINK_TRACE_EGRESS_ACTION_FIELD_VALUE;
+        description "The Egress Port can be identified, but the Bridge Port is not in the LTMs VIDs member set, so would be filtered by egress filtering.";
+    }
+    identity LTMFLAGS {
+        description "none";
+    }
+    identity LTMFLAGS_USE-FDB-ONLY {
+        base LTMFLAGS;
+        description "IEEE 802.1Q 2018:
+            If set, indicates that only MAC addresses learned in a Bridge’s FDB, and not information saved in the MIP CCM Database, is to be used to determine the Egress Port.
+            Bit 8 (MSB).";
+    }
+    identity TEST_PATTERN {
+        description "none";
+    }
+    identity TEST_PATTERN_NULL-SIGNAL-WITHOUT-CRC-32 {
+        base TEST_PATTERN;
+        description "none";
+    }
+    identity TEST_PATTERN_NULL-SIGNAL-WITH-CRC-32 {
+        base TEST_PATTERN;
+        description "none";
+    }
+    identity TEST_PATTERN_PRBS-2_31-1-WITHOUT-CRC-32 {
+        base TEST_PATTERN;
+        description "none";
+    }
+    identity TEST_PATTERN_PRBS-2_31-1-WITH-CRC-32 {
+        base TEST_PATTERN;
+        description "none";
+    }
+    identity BANDWIDTH_PROFILE_TYPE {
+        description "none";
+    }
+    identity BANDWIDTH_PROFILE_TYPE_MEF_10.x {
+        base BANDWIDTH_PROFILE_TYPE;
+        description "none";
+    }
+    identity BANDWIDTH_PROFILE_TYPE_RFC_2697 {
+        base BANDWIDTH_PROFILE_TYPE;
+        description "none";
+    }
+    identity BANDWIDTH_PROFILE_TYPE_RFC_2698 {
+        base BANDWIDTH_PROFILE_TYPE;
+        description "none";
+    }
+    identity BANDWIDTH_PROFILE_TYPE_RFC_4115 {
+        base BANDWIDTH_PROFILE_TYPE;
+        description "none";
+    }
+    identity ETH_PM_PARAMETER_NAME {
+    	base tapi-oam:PM_PARAMETER_NAME;
+        description "none";
+    }
+    identity ETH_PM_PARAMETER_NAME_MINIMUM_FRAME_DELAY {
+        base ETH_PM_PARAMETER_NAME;
+        description "none";
+    }
+    identity ETH_PM_PARAMETER_NAME_MAXIMUM_FRAME_DELAY {
+        base ETH_PM_PARAMETER_NAME;
+        description "none";
+    }
+    identity ETH_PM_PARAMETER_NAME_AVERAGE_FRAME_DELAY {
+        base ETH_PM_PARAMETER_NAME;
+        description "none";
+    }
+    identity ETH_PM_PARAMETER_NAME_MINIMUM_FRAME_DELAY_VARIATION {
+        base ETH_PM_PARAMETER_NAME;
+        description "This attribute contains the minimum frame delay variation measured in units of ns (nano second, 1x10e-9 seconds).
+            Y.1563:
+            The 2-point frame delay variation (vk) for an Ethernet frame k between SRC and DST is the difference between the absolute Ethernet frame transfer delay (xk) of frame k and a defined reference Ethernet frame transfer delay, d1,2, between those same MPs:  vk = xk – d1,2.";
+    }
+    identity ETH_PM_PARAMETER_NAME_MAXIMUM_FRAME_DELAY_VARIATION {
+        base ETH_PM_PARAMETER_NAME;
+        description "This attribute contains the maximum frame delay variation measured in units of ns (nano second, 1x10e-9 seconds).
+            Y.1563:
+            The 2-point frame delay variation (vk) for an Ethernet frame k between SRC and DST is the difference between the absolute Ethernet frame transfer delay (xk) of frame k and a defined reference Ethernet frame transfer delay, d1,2, between those same MPs:  vk = xk – d1,2.";
+    }
+    identity ETH_PM_PARAMETER_NAME_AVERAGE_FRAME_DELAY_VARIATION {
+        base ETH_PM_PARAMETER_NAME;
+        description "This attribute contains the average frame delay variation measured in units of ns (nano second, 1x10e-9 seconds).
+            Y.1563:
+            The 2-point frame delay variation (vk) for an Ethernet frame k between SRC and DST is the difference between the absolute Ethernet frame transfer delay (xk) of frame k and a defined reference Ethernet frame transfer delay, d1,2, between those same MPs:  vk = xk – d1,2.";
+    }
+    identity ETH_PM_PARAMETER_NAME_MINIMUM_INTER_FRAME_DELAY_VARIATION {
+        base ETH_PM_PARAMETER_NAME;
+        description "This attribute contains the minimum frame delay variation measured in units of ns (nano second, 1x10e-9 seconds).
+            G.8013/Y.1731:
+            Frame delay variation is a measure of the variations in the frame delay between a pair of service frames";
+    }
+    identity ETH_PM_PARAMETER_NAME_MAXIMUM_INTER_FRAME_DELAY_VARIATION {
+        base ETH_PM_PARAMETER_NAME;
+        description "This attribute contains the maximum frame delay variation measured in units of ns (nano second, 1x10e-9 seconds).
+            G.8013/Y.1731:
+            Frame delay variation is a measure of the variations in the frame delay between a pair of service frames";
+    }
+    identity ETH_PM_PARAMETER_NAME_AVERAGE_INTER_FRAME_DELAY_VARIATION {
+        base ETH_PM_PARAMETER_NAME;
+        description "This attribute contains the average frame delay variation measured in units of ns (nano second, 1x10e-9 seconds).
+            G.8013/Y.1731:
+            Frame delay variation is a measure of the variations in the frame delay between a pair of service frames";
+    }
+    identity ETH_PM_PARAMETER_NAME_MINIMUM_FRAME_LOSS_RATIO {
+        base ETH_PM_PARAMETER_NAME;
+        description "none";
+    }
+    identity ETH_PM_PARAMETER_NAME_MAXIMUM_FRAME_LOSS_RATIO {
+        base ETH_PM_PARAMETER_NAME;
+        description "none";
+    }
+    identity ETH_PM_PARAMETER_NAME_AVERAGE_FRAME_LOSS_RATIO {
+        base ETH_PM_PARAMETER_NAME;
+        description "none";
+    }
+    identity ETH_PM_PARAMETER_NAME_HIGH_LOSS_INTERVALS {
+        base ETH_PM_PARAMETER_NAME;
+        description "none";
+    }
+    identity ETH_PM_PARAMETER_NAME_UNAVAILABLE_INTERVALS {
+        base ETH_PM_PARAMETER_NAME;
+        description "none";
+    }
+    identity ETH_ALARM_CONDITION_NAME {
+        base tapi-oam:ALARM_CONDITION_NAME;
+        description "none";
+    }
+    identity ETH_ALARM_CONDITION_NAME_LOSS_OF_CONTINUITY {
+        base ETH_ALARM_CONDITION_NAME;
+        description "G.8021: The loss of continuity defect is calculated at the ETH layer. It monitors the presence of continuity in ETH trails.";
+    }
+    identity ETH_ALARM_CONDITION_NAME_UNEXPECTED_MEL {
+        base ETH_ALARM_CONDITION_NAME;
+        description "G.8021: Reception of a CCM frame with an invalid MEL value.
+            Monitoring of the connectivity in a maintenance entity group.";
+    }
+    identity ETH_ALARM_CONDITION_NAME_UNEXPECTED_MEP {
+        base ETH_ALARM_CONDITION_NAME;
+        description "G.8021: Reception of a CCM frame with an invalid MEP value, but with valid MEL and MEG values.
+            Monitoring of the connectivity in a maintenance entity group.
+            ";
+    }
+    identity ETH_ALARM_CONDITION_NAME_MISMERGE_UNEXPECTED_MEG {
+        base ETH_ALARM_CONDITION_NAME;
+        description "G.8021: Reception of a CCM frame with an invalid MEG value, but with a valid MEL value.
+            Monitoring of the connectivity in a maintenance entity group.
+            ";
+    }
+    identity ETH_ALARM_CONDITION_NAME_UNEXPECTED_PERIODICITY {
+        base ETH_ALARM_CONDITION_NAME;
+        description "G.8021: Reception of a CCM frame with an invalid periodicity value, but with valid MEL, MEG and MEP values.
+            It detects the configuration of different periodicities at different MEPs belonging to the same MEG.
+            ";
+    }
+    identity ETH_ALARM_CONDITION_NAME_UNEXPECTED_PRIORITY {
+        base ETH_ALARM_CONDITION_NAME;
+        description "G.8021: Reception of a CCM frame with an invalid priority value, but with valid MEL, MEG, MEP and periodicity values.
+            It detects the configuration of different priorities for CCM at different MEPs belonging to the same MEG.
+            ";
+    }
+    identity ETH_ALARM_CONDITION_NAME_LOCKED {
+        base ETH_ALARM_CONDITION_NAME;
+        description "G.8021: Reception of a LCK frame.";
+    }
+    identity ETH_ALARM_CONDITION_NAME_AIS {
+        base ETH_ALARM_CONDITION_NAME;
+        description "G.8021: Reception of an AIS frame.";
+    }
+    identity ETH_ALARM_CONDITION_NAME_DEGRADED {
+        base ETH_ALARM_CONDITION_NAME;
+        description "G.8021: The defect is detected if there are MI_LM_DEGM (lmDegm of EthMepSink) consecutive bad seconds and cleared if there are MI_LM_M (lmM of EthMepSink) consecutive good seconds. 
+            In order to declare a bad second the number of transmitted frames must exceed a threshold (MI_LM_TFMIN, lmTfMin of EthMepSink).
+            Furthermore, if the frame loss ratio (lost frames/transmitted frames) is greater than MI_LM_DEGTHR (lmDegThr of EthMepSink), a bad second is declared.
+            This defect is only defined for point-to-point ETH connections. It monitors the connectivity of an ETH trail.
+            ";
+    }
+    identity ETH_ALARM_CONDITION_NAME_RDI {
+        base ETH_ALARM_CONDITION_NAME;
+        description "G.8021: Remote defect indicator defect, reception by an MEP (indexed by 'i', this index not included in the 'cause' cRDI) of a CCM frame with valid MEL, MEG, MEP and periodicity values and the RDI flag set to x; where x=0 (remote defect clear) and x=1 (remote defect set).";
+    }
+    identity ETH_ALARM_CONDITION_NAME_CSF {
+        base ETH_ALARM_CONDITION_NAME;
+        description "G.8021 - ETH layer: Reception of a CSF frame that indicates a client loss of signal (dCSF-LOS) or a client forward defect indication (dCSF-FDI) or a client reverse defect indication (dCSF-RDI).
+            The CSF (CSF-LOS, CSF-FDI, and CSF-RDI) defect is calculated at the ETH layer. It monitors the presence of a CSF maintenance signal.
+            G.8021 - GFP: dCSF is Client-specific GFP-F and GFP-T (resp. Frame and Transparent) sink processes.
+            dCSF-RDI: GFP client signal fail-remote defect indication is raised when a GFP client management frame with the RDI UPI (as defined in Table 6-4 of [ITU-T G.7041]) is received.
+            dCSF-RDI is cleared when no such GFP client management frame is received in N x 1000 ms (a value of 3 is suggested for N), a valid GFP client data frame is received, or a GFP client management frame with the DCI UPI is received.
+            dCSF-FDI: GFP client signal fail-forward defect indication is raised when a GFP client management frame with the FDI UPI (as defined in Table 6-4 of [ITU-T G.7041]) is received.
+            dCSF-FDI is cleared when no such GFP client management frame is received in N x 1000 ms (a value of 3 is suggested for N), a valid GFP client data frame is received, or a GFP client management frame with the DCI UPI is received.
+            dCSF-LOS: GFP client signal fail-loss of signal is raised when a GFP client management frame with the LOS UPI (as defined in Table 6-4 of [ITU-T G.7041]) is received.
+            dCSF-LOS is cleared when no such GFP client management frame is received in N x 1000 ms (a value of 3 is suggested for N), a valid GFP client data frame is received, or a GFP client management frame with the DCI UPI is received.";
+    }
+    identity ETH_ALARM_CONDITION_NAME_TOTAL_LINK_LOSS {
+        base ETH_ALARM_CONDITION_NAME;
+        description "G.8021: LAG - fault cause will be raised if no ports are active for an aggregator.";
+    }
+    identity ETH_ALARM_CONDITION_NAME_PARTIAL_LINK_LOSS {
+        base ETH_ALARM_CONDITION_NAME;
+        description "G.8021: LAG - fault cause shall be raised if the number of active ports is less than the provisioned threshold.";
+    }
+    identity ETH_ALARM_CONDITION_NAME_PLM {
+        base ETH_ALARM_CONDITION_NAME;
+        description "G.806: The payload label mismatch defect (dPLM) shall be detected if the 'accepted TSL' code does not match the 'expected TSL' code. If the 'accepted TSL' is 'equipped non-specific', the mismatch is not detected (TSL: Trail Signal Label).
+            Payload type supervision checks that compatible adaptation functions are used at the source and the sink.
+            This is normally done by adding a signal type identifier at the source adaptation function and comparing it with the expected identifier at the sink.
+            If they do not match, a payload mismatch is detected.";
+    }
+    identity ETH_ALARM_CONDITION_NAME_LFD {
+        base ETH_ALARM_CONDITION_NAME;
+        description "G.806 - Server layer-specific GFP sink processes: GFP loss of frame delineation (dLFD) is raised when the frame delineation process (clause 6.3.1 of [ITU-T G.7041]) is not in the 'SYNC' state.
+            dLFD is cleared when the frame delineation process is in the 'SYNC' state.";
+    }
+    identity ETH_ALARM_CONDITION_NAME_EXM {
+        base ETH_ALARM_CONDITION_NAME;
+        description "G.806 - Common GFP sink processes: GFP extension header mismatch (dEXM) is raised when the accepted EXI (AcEXI) is different from the expected EXI.
+            dEXM is cleared when AcEXI matches the expected EXI or GFP_SF is active.";
+    }
+    identity ETH_ALARM_CONDITION_NAME_UPM {
+        base ETH_ALARM_CONDITION_NAME;
+        description "G.806 - Client-specific GFP-F (Frame) and GFP-T (Transparent) sink processes: GFP user payload mismatch (dUPM) is raised when the accepted UPI (AcUPI) is different from the expected UPI.
+            dUPM is cleared when AcUPI matches the expected UPI or GFP_SF is active.";
+    }
+    grouping priority-configuration {
+        leaf priority {
+            type uint64 {
+                range "0..7";
+            }
+            description "none";
+        }
+        leaf queue-id {
+            type uint64;
+            description "none";
+        }
+        description "none";
+    }
+    grouping queue-configuration {
+        leaf queue-id {
+            type uint64;
+            description "This attribute indicates the queue id.";
+        }
+        leaf queue-depth {
+            type uint64;
+            description "This attribute defines the depth of the queue in bytes.";
+        }
+        leaf queue-threshold {
+            type uint64;
+            description "This attribute defines the threshold of the queue in bytes.";
+        }
+        description "none";
+    }
+    grouping traffic-conditioning-configuration {
+        leaf cir {
+            type uint64;
+            description "This attribute indicates the Committed Information Rate in bits/s.";
+        }
+        leaf cbs {
+            type uint64;
+            description "This attribute indicates the Committed Burst Size in bytes.";
+        }
+        leaf eir {
+            type uint64;
+            description "This attribute indicates the Excess Information Rate in bits/s.";
+        }
+        leaf ebs {
+            type uint64;
+            description "This attribute indicates the Excess Burst Size in bytes.";
+        }
+        leaf coupling-flag {
+            type boolean;
+            description "This attribute indicates the coupling flag.";
+        }
+        leaf colour-mode {
+            type colour-mode;
+            description "This attribute indicates the colour mode.";
+        }
+        leaf queue-id {
+            type uint64;
+            description "This attribute indicates the queue id.";
+        }
+        description "none";
+    }
+    typedef mac-address {
+        type string;
+        description "This primitive data type contains an Ethernet MAC address defined by IEEE 802a. The format of the address consists of 12 hexadecimal characters, grouped in pairs and separated by '-' (e.g., 03-27-AC-75-3E-1D).";
+    }
+    grouping priority-mapping {
+        leaf priority-0 {
+            type uint64 {
+                range "0..7";
+            }
+            description "This attribute defines the new priority value for the old priority value 0.";
+        }
+        leaf priority-1 {
+            type uint64 {
+                range "0..7";
+            }
+            default "1";
+            description "This attribute defines the new priority value for the old priority value 1.";
+        }
+        leaf priority-2 {
+            type uint64 {
+                range "0..7";
+            }
+            default "2";
+            description "This attribute defines the new priority value for the old priority value 2.";
+        }
+        leaf priority-3 {
+            type uint64 {
+                range "0..7";
+            }
+            default "3";
+            description "This attribute defines the new priority value for the old priority value 3.";
+        }
+        leaf priority-4 {
+            type uint64 {
+                range "0..7";
+            }
+            default "4";
+            description "This attribute defines the new priority value for the old priority value 4.";
+        }
+        leaf priority-5 {
+            type uint64 {
+                range "0..7";
+            }
+            default "5";
+            description "This attribute defines the new priority value for the old priority value 5.";
+        }
+        leaf priority-6 {
+            type uint64 {
+                range "0..7";
+            }
+            default "6";
+            description "This attribute defines the new priority value for the old priority value 6.";
+        }
+        leaf priority-7 {
+            type uint64 {
+                range "0..7";
+            }
+            default "7";
+            description "This attribute defines the new priority value for the old priority value 7.";
+        }
+        description "This data type provides the priority mapping done in the 'P Regenerate' process defined in G.8021.";
+    }
+    typedef vid {
+        type string;
+        description "This primitive type models the 12 Bit VLAN identifier of a VLAN tag.";
+    }
+    typedef modify-cross-connection-data {
+        type string;
+        description "none";
+    }
+    grouping address-tuple {
+        leaf address {
+            type mac-address;
+            description "This attribute contains the MAC address of the address tuple.";
+        }
+        leaf-list port-list {
+            type mac-address;
+            description "This attribute contains the ports associated to the MAC address in the address tuple.";
+        }
+        description "This data type contains an address tuple consisting of a MAC address and a corresponding port list.";
+    }
+    typedef scheduling-configuration {
+        type string;
+        description "The syntax of this dataType is pending on the specification in G.8021, which is for further study.";
+    }
+    grouping control-frame-filter {
+        leaf c-2-00-00-10 {
+            type boolean;
+            description "This attribute identifies the 'All LANs Bridge Management Group Address'.";
+        }
+        leaf c-2-00-00-00 {
+            type boolean;
+            description "This attribute identifies the STP/RSTP/MSTP protocol address.";
+        }
+        leaf c-2-00-00-01 {
+            type boolean;
+            description "This attribute identifies the IEEE MAC-specific Control Protocols group address (PAUSE protocol).";
+        }
+        leaf c-2-00-00-02 {
+            type boolean;
+            description "This attribute identifies the IEEE 802.3 Slow_Protocols_Multicast address (LACP/LAMP or Link OAM protocols).";
+        }
+        leaf c-2-00-00-03 {
+            type boolean;
+            description "This attribute identifies the Nearest non-TPMR Bridge group address (Port Authentication protocol).";
+        }
+        leaf c-2-00-00-04 {
+            type boolean;
+            description "This attribute identifies the IEEE MAC-specific Control Protocols group address.";
+        }
+        leaf c-2-00-00-05 {
+            type boolean;
+            description "Reserved for future standardization.";
+        }
+        leaf c-2-00-00-06 {
+            type boolean;
+            description "Reserved for future standardization.";
+        }
+        leaf c-2-00-00-07 {
+            type boolean;
+            description "This attribute identifies the Metro Ethernet Forum E-LMI protocol group address.";
+        }
+        leaf c-2-00-00-08 {
+            type boolean;
+            description "This attribute identifies the Provider Bridge Group address.";
+        }
+        leaf c-2-00-00-09 {
+            type boolean;
+            description "Reserved for future standardization.";
+        }
+        leaf c-2-00-00-0-a {
+            type boolean;
+            description "Reserved for future standardization.";
+        }
+        leaf c-2-00-00-0-b {
+            type boolean;
+            description "Reserved for future standardization.";
+        }
+        leaf c-2-00-00-0-c {
+            type boolean;
+            description "Reserved for future standardization.";
+        }
+        leaf c-2-00-00-0-d {
+            type boolean;
+            description "This attribute identifies the Provider Bridge MVRP address.";
+        }
+        leaf c-2-00-00-0-e {
+            type boolean;
+            description "This attribute identifies the Individual LAN Scope group address, Nearest Bridge group address (LLDP protocol).";
+        }
+        leaf c-2-00-00-0-f {
+            type boolean;
+            description "Reserved for future standardization.";
+        }
+        leaf c-2-00-00-20 {
+            type boolean;
+            description "This attribute identifies the Customer and Provider Bridge MMRP address.";
+        }
+        leaf c-2-00-00-21 {
+            type boolean;
+            description "This attribute identifies the Customer Bridge MVRP address.";
+        }
+        leaf c-2-00-00-22 {
+            type boolean;
+            description "Reserved for future standardization.";
+        }
+        leaf c-2-00-00-23 {
+            type boolean;
+            description "Reserved for future standardization.";
+        }
+        leaf c-2-00-00-24 {
+            type boolean;
+            description "Reserved for future standardization.";
+        }
+        leaf c-2-00-00-25 {
+            type boolean;
+            description "Reserved for future standardization.";
+        }
+        leaf c-2-00-00-26 {
+            type boolean;
+            description "Reserved for future standardization.";
+        }
+        leaf c-2-00-00-27 {
+            type boolean;
+            description "Reserved for future standardization.";
+        }
+        leaf c-2-00-00-28 {
+            type boolean;
+            description "Reserved for future standardization.";
+        }
+        leaf c-2-00-00-29 {
+            type boolean;
+            description "Reserved for future standardization.";
+        }
+        leaf c-2-00-00-2-a {
+            type boolean;
+            description "Reserved for future standardization.";
+        }
+        leaf c-2-00-00-2-b {
+            type boolean;
+            description "Reserved for future standardization.";
+        }
+        leaf c-2-00-00-2-c {
+            type boolean;
+            description "Reserved for future standardization.";
+        }
+        leaf c-2-00-00-2-d {
+            type boolean;
+            description "Reserved for future standardization.";
+        }
+        leaf c-2-00-00-2-e {
+            type boolean;
+            description "Reserved for future standardization.";
+        }
+        leaf c-2-00-00-2-f {
+            type boolean;
+            description "Reserved for future standardization.";
+        }
+        description "This data type identifies the filter action for each of the 33 group MAC addresses (control frames).
+            Value 'false' means block: The frame is discarded by the filter process.
+            Value 'true' means pass: The frame is passed unchanged through the filter process.";
+    }
+    grouping bandwidth-report {
+        leaf source-mac-address {
+            type mac-address;
+            description "The sourceMacAddress is the address from the far end.";
+        }
+        leaf port-id {
+            type uint64;
+            description "This attribute returns the far end port identifier.";
+        }
+        leaf nominal-bandwidth {
+            type uint64;
+            description "This attribute returns the configured bandwidth";
+        }
+        leaf current-bandwidth {
+            type uint64;
+            description "This attribute returns the current bandwidth.";
+        }
+        description "Data type for the bandwidth report.";
+    }
+    typedef admin-state {
+        type enumeration {
+            enum LOCK {
+                description "none";
+            }
+            enum NORMAL {
+                description "none";
+            }
+        }
+        description "none";
+    }
+    typedef colour-mode {
+        type enumeration {
+            enum COLOUR_BLIND {
+                description "none";
+            }
+            enum COLOUR_AWARE {
+                description "none";
+            }
+        }
+        description "none";
+    }
+    typedef csf-config {
+        type enumeration {
+            enum DISABLED {
+                description "This literal covers the following states of the CSF related MI informations:
+                    - MI_CSF_Enable is false
+                    - MI_CSFrdifdi_Enable is false
+                    - MI_CSFdci_Enable is false.";
+            }
+            enum ENABLED {
+                description "This literal covers the following states of the CSF related MI informations:
+                    - MI_CSF_Enable is true
+                    - MI_CSFrdifdi_Enable is false
+                    - MI_CSFdci_Enable is false.";
+            }
+            enum ENABLED_WITH_RDI_FDI {
+                description "This literal covers the following states of the CSF related MI informations:
+                    - MI_CSF_Enable is true
+                    - MI_CSFrdifdi_Enable is true
+                    - MI_CSFdci_Enable is false.";
+            }
+            enum ENABLED_WITH_RDI_FDI_DCI {
+                description "This literal covers the following states of the CSF related MI informations:
+                    - MI_CSF_Enable is true
+                    - MI_CSFrdifdi_Enable is true
+                    - MI_CSFdci_Enable is true.";
+            }
+            enum ENABLED_WITH_DCI {
+                description "This literal covers the following states of the CSF related MI informations:
+                    - MI_CSF_Enable is true
+                    - MI_CSFrdifdi_Enable is false
+                    - MI_CSFdci_Enable is true.";
+            }
+        }
+        description "none";
+    }
+    typedef ety-phy-type {
+        type enumeration {
+            enum OTHER {
+                description "none";
+            }
+            enum UNKNOWN {
+                description "none";
+            }
+            enum NONE {
+                description "none";
+            }
+            enum 2BASE_TL {
+                description "none";
+            }
+            enum 10MBIT_S {
+                description "none";
+            }
+            enum 10PASS_TS {
+                description "none";
+            }
+            enum 100BASE_T4 {
+                description "none";
+            }
+            enum 100BASE_X {
+                description "none";
+            }
+            enum 100BASE_T2 {
+                description "none";
+            }
+            enum 1000BASE_X {
+                description "none";
+            }
+            enum 1000BASE_T {
+                description "none";
+            }
+            enum 10GBASE-X {
+                description "none";
+            }
+            enum 10GBASE_R {
+                description "none";
+            }
+            enum 10GBASE_W {
+                description "none";
+            }
+        }
+        description "none";
+    }
+    typedef frame-type {
+        type enumeration {
+            enum ADMIT_ONLY_VLAN_TAGGED_FRAMES {
+                description "none";
+            }
+            enum ADMIT_ONLY_UNTAGGED_AND_PRIORITY_TAGGED_FRAMES {
+                description "none";
+            }
+            enum ADMIT_ALL_FRAMES {
+                description "none";
+            }
+        }
+        description "none";
+    }
+    typedef oam-period {
+        type enumeration {
+            enum 3_33MS {
+                description "Default for protection.";
+            }
+            enum 10MS {
+                description "none";
+            }
+            enum 100MS {
+                description "none";
+            }
+            enum 1S {
+                description "none";
+            }
+            enum 10S {
+                description "none";
+            }
+            enum 1MIN {
+                description "none";
+            }
+            enum 10MIN {
+                description "none";
+            }
+        }
+        description "Provides the frequency for the OAM PDU insertion.";
+    }
+    typedef pcp-coding {
+        type enumeration {
+            enum 8P0D {
+                description "none";
+            }
+            enum 7P1D {
+                description "none";
+            }
+            enum 6P2D {
+                description "none";
+            }
+            enum 5P3D {
+                description "none";
+            }
+            enum DEI {
+                description "This enumeration value means that all priorities should be drop eligible.
+                    DEI = Drop Eligibility Indicator";
+            }
+        }
+        description "This enum models the coding of the Priority Code Point as defined in section 'Priority Code Point encoding' of IEEE 802.1Q.";
+    }
+    typedef vlan-type {
+        type enumeration {
+            enum C_Tag {
+                description "0x8100";
+            }
+            enum S_Tag {
+                description "0x88a8";
+            }
+            enum I_Tag {
+                description "88-e7";
+            }
+        }
+        description "This enumeration contains the Ethertypes defined in IEEE 802.1Q.";
+    }
+    typedef repetition-period {
+        type enumeration {
+            enum 1MIN {
+                description "none";
+            }
+            enum 1S {
+                description "none";
+            }
+            enum 10S {
+                description "none";
+            }
+            enum 0 {
+                description "none";
+            }
+        }
+        description "This enumeration defines the allowed values for the repetition period in on-demand measurements.
+            Note: The value 0 means that the value is not relevant.";
+    }
+    typedef message-period {
+        type enumeration {
+            enum 10MS {
+                description "none";
+            }
+            enum 100MS {
+                description "none";
+            }
+            enum 1S {
+                description "none";
+            }
+            enum 10S {
+                description "none";
+            }
+            enum 0 {
+                description "none";
+            }
+        }
+        description "This enumeration defines the allowed values for the message period in on-demand measurements.
+            Notes:
+            The value 10ms is only used in synthetic loss measurements.
+            The value 0 means that the value is not relevant.";
+    }
+    typedef oam-pdu-generation-type {
+        type enumeration {
+            enum SINGLE_INSTANCE {
+                description "none";
+            }
+            enum REPETITIVE_INSTANCE {
+                description "none";
+            }
+            enum SINGLE_SERIES {
+                description "none";
+            }
+            enum REPETITIVE_SERIES {
+                description "none";
+            }
+        }
+        description "This enumeration defines the generation pattern of the on-demand OAM PDUs (messages). ";
+    }
+    grouping samples-dm-performance-parameters {
+        leaf number-of-samples {
+            type uint64;
+            description "This attribute contains the number of received DM frames (successful samples) used for this frame delay measurement.
+                range of type : non-negative";
+        }
+        leaf-list frame-delay-list {
+            type uint64;
+            description "This attribute contains the frame delays measured in ns (nano second, 1x10e-9 seconds). The multiplicity is defined by the numberOfSamples attribute.";
+        }
+        leaf-list frame-delay-variation-list {
+            type uint64;
+            description "This attribute contains the frame delay variations measured in ns (nano second).  The multiplicity is defined by (numberOfSamples - 1, for numberOfSamples > 0).";
+        }
+        description "This data type contains the results of an on-demand delay measurement job.";
+    }
+    grouping total-counters-lm-performance-parameters {
+        leaf total-transmitted-frames {
+            type uint64;
+            description "This attribute contains the total number of frames transmitted.";
+        }
+        leaf total-lost-frames {
+            type uint64;
+            description "This attribute contains the total number of frames lost.";
+        }
+        leaf total-frame-loss-ratio {
+            type decimal64 {
+                fraction-digits 7;
+            }
+            description "This attribute contains the frame loss ratio (number of lost frames divided by the number of total frames (N_LF / N_TF)).
+                The accuracy of the value is for further study.";
+        }
+        description "This data type contains the results of an on-demand loss measurement job.";
+    }
+    grouping statistical-dm-performance-parameters {
+        leaf minimum-frame-delay {
+            type uint64;
+            description "This attribute contains the minimum frame delay observed over the monitored period. It is measured in units of ns (nano second, 1x10e-9 seconds).";
+        }
+        leaf average-frame-delay {
+            type uint64;
+            description "This attribute contains the average frame delay observed over the monitored period. It is measured in units of ns (nano second, 1x10e-9 seconds).";
+        }
+        leaf maximum-frame-delay {
+            type uint64;
+            description "This attribute contains the maximum frame delay observed over the monitored period. It is measured in units of ns (nano second, 1x10e-9 seconds).";
+        }
+        leaf minimum-frame-delay-variation {
+            type uint64;
+            description "This attribute contains the minimum frame delay variation measured in units of ns (nano second, 1x10e-9 seconds).
+                Y.1563:
+                The 2-point frame delay variation (vk) for an Ethernet frame k between SRC and DST is the difference between the absolute Ethernet frame transfer delay (xk) of frame k and a defined reference Ethernet frame transfer delay, d1,2, between those same MPs:  vk = xk – d1,2.";
+        }
+        leaf average-frame-delay-variation {
+            type uint64;
+            description "This attribute contains the average frame delay variation measured in units of ns (nano second, 1x10e-9 seconds).
+                Y.1563:
+                The 2-point frame delay variation (vk) for an Ethernet frame k between SRC and DST is the difference between the absolute Ethernet frame transfer delay (xk) of frame k and a defined reference Ethernet frame transfer delay, d1,2, between those same MPs:  vk = xk – d1,2.";
+        }
+        leaf maximum-frame-delay-variation {
+            type uint64;
+            description "This attribute contains the maximum frame delay variation measured in units of ns (nano second, 1x10e-9 seconds).
+                Y.1563:
+                The 2-point frame delay variation (vk) for an Ethernet frame k between SRC and DST is the difference between the absolute Ethernet frame transfer delay (xk) of frame k and a defined reference Ethernet frame transfer delay, d1,2, between those same MPs:  vk = xk – d1,2.";
+        }
+        leaf minimum-inter-frame-delay-variation {
+            type uint64;
+            description "This attribute contains the minimum frame delay variation measured in units of ns (nano second, 1x10e-9 seconds).
+                G.8013/Y.1731:
+                Frame delay variation is a measure of the variations in the frame delay between a pair of service frames";
+        }
+        leaf average-inter-frame-delay-variation {
+            type uint64;
+            description "This attribute contains the average frame delay variation measured in units of ns (nano second, 1x10e-9 seconds).
+                G.8013/Y.1731:
+                Frame delay variation is a measure of the variations in the frame delay between a pair of service frames";
+        }
+        leaf maximum-inter-frame-delay-variation {
+            type uint64;
+            description "This attribute contains the maximum frame delay variation measured in units of ns (nano second, 1x10e-9 seconds).
+                G.8013/Y.1731:
+                Frame delay variation is a measure of the variations in the frame delay between a pair of service frames";
+        }
+        description "This data type contains the statistical delay measurement performance parameters.";
+    }
+    grouping statistical-lm-performance-parameters {
+        leaf minimum-frame-loss-ratio {
+            type decimal64 {
+                fraction-digits 7;
+            }
+            description "This attribute contains the minimum frame loss ratio calculated over a period of time.";
+        }
+        leaf average-frame-loss-ratio {
+            type decimal64 {
+                fraction-digits 7;
+            }
+            description "This attribute contains the average frame loss ratio calculated over a period of time.";
+        }
+        leaf maximum-frame-loss-ratio {
+            type decimal64 {
+                fraction-digits 7;
+            }
+            description "This attribute contains the maximum frame loss ratio calculated over a period of time.";
+        }
+        leaf hli-count {
+            type uint64;
+            description "A generalized SES.
+                MEF 10.3: The Resiliency attributes are similar to the definitions of Severely Errored Seconds (SES) and Consecutive SES in section 9 and Annex B (respectively) of Y.1563 [6], when delta-t = 1 second.
+                MEF 35.1: Count of High Loss Intervals during the Measurement Interval.
+                range of type : 0..900 for 15min interval or 0..86400 for 24 hr interval.";
+        }
+        leaf unavailable-intervals {
+            type uint64;
+            description "A generalized UAS.
+                MEF 35.1: A 32-bit counter reflecting the number of delta-t intervals evaluated as Unavailable (i.e., for which A<Controller, Responder>(delta-t) = 0).
+                range of type : 0..900 for 15min interval or 0..86400 for 24 hr interval.";
+        }
+        description "This data type contains the statistical loss measurement performance parameters.";
+    }
+    typedef eth-oam-job-type {
+        type identityref {
+            base ETH_OAM_JOB_TYPE;
+        }
+        description "none";
+    }
+    grouping link-trace-result {
+        leaf source-address {
+            type mac-address;
+            description "G.8052: This attribute contains the source MAC Address of an individual LTR frame result.";
+        }
+        leaf time-to-live {
+            type uint64;
+            description "G.8052: This attribute contains the Time To Live (TTL) value of an individual LTR frame result.";
+        }
+        leaf data-tlv-length {
+            type uint64;
+            description "G.8052: This attribute contains the length (in number of octets) of the Data TLV of an individual LTR frame result.";
+        }
+        description "G.8052: This data type contains the result from an individual LTR frame.";
+    }
+    typedef maintenance-domain-name-type {
+        type identityref {
+            base MAINTENANCE_DOMAIN_NAME_TYPE;
+        }
+        description "IEEE P802.1Qcx/D0.3:
+            MEF 38:
+            The Maintenance Domain format choice.";
+    }
+    typedef maintenance-domain-id-permission-types {
+        type identityref {
+            base MAINTENANCE_DOMAIN_ID_PERMISSION_TYPES;
+        }
+        description "IEEE P802.1Qcx/D0.3:
+            MEF 38:
+            Indicates what, if anything, is to be included in the Sender ID TLV transmitted in CCMs, LBMs, LTMs, and LTRs.";
+    }
+    typedef maintenance-association-id-permission-types {
+        type identityref {
+/*            base MAINTENANCE_DOMAIN_ID_PERMISSION_TYPES; */
+            base MAINTENANCE_ASSOCIATION_ID_PERMISSION_TYPES;
+        }
+        description "IEEE P802.1Qcx/D0.3:
+            MEF 38:
+            Indicates what, if anything, is to be included in the Sender ID TLV transmitted in CCMs, LBMs, LTMs, and LTRs.";
+    }
+    grouping maintenance-association-name {
+        leaf ieee-reserved {
+            type string;
+            default "0";
+            description "IEEE P802.1Qcx/D0.3:
+                Reserved for definition by IEEE 802.1. Recommend not to use zero unless absolutely needed.
+                Length '1..45'.";
+        }
+        leaf primary-vlan-id {
+            type vid;
+            description "IEEE P802.1Qcx/D0.3:
+                MEF 38:
+                Primary VLAN ID. 12 bits represented in a 2-octet integer.";
+        }
+        leaf char-string {
+            type string;
+            description "IEEE P802.1Qcx/D0.3:
+                MEF 38:
+                RFC2579 DisplayString, except that the character codes 0-31 (decimal) are not used.
+                Length '1..45'";
+        }
+        leaf unsigned-int-16 {
+            type uint64;
+            description "IEEE P802.1Qcx/D0.3:
+                MEF 38:
+                2-octet integer/big endian.";
+        }
+        leaf rfc-2865-vpn-id {
+            type string;
+            description "IEEE P802.1Qcx/D0.3:
+                MEF 38:
+                RFC2685 VPN ID. 3 octet VPN authority Organizationally Unique Identifier followed by 4 octet VPN index identifying VPN according to the OUI.
+                Length '1..45';";
+        }
+        leaf icc-format {
+            type string;
+            description "IEEE P802.1Qcx/D0.3:
+                ICC-based format as specified in ITU-T Y.1731.
+                Length '1..45'";
+        }
+        description "none";
+    }
+    typedef link-trace-relay-action-field-value {
+        type identityref {
+            base LINK_TRACE_RELAY_ACTION_FIELD_VALUE;
+        }
+        description "IEEE P802.1Qcx/D0.3:
+            MEF 38:
+            Possible values the Relay action field can take.";
+    }
+    typedef link-trace-ingress-action-field-value {
+        type identityref {
+            base LINK_TRACE_INGRESS_ACTION_FIELD_VALUE;
+        }
+        description "IEEE P802.1Qcx/D0.3:
+            MEF 38:
+            Possible values returned in the ingress action field.";
+    }
+    grouping lldp-port-id-subtype {
+        leaf interface-alias {
+            type string;
+            description "String length '0..64'
+                Represents a port identifier based on the ifAlias MIB object, defined in IETF RFC 2863.";
+        }
+        leaf port-component {
+            type string;
+            description "String length '0..32'
+                Represents a port identifier based on the value of entPhysicalAlias (defined in IETF RFC 2737) for a port component (i.e., entPhysicalClass value of port(10)), within the containing chassis.";
+        }
+        leaf mac-address {
+            type mac-address;
+            description "Represents a port identifier based on a unicast source address (encoded in network byte order and IEEE 802.3 canonical bit order), which has been detected by the agent and associated with a particular port (IEEE Std 802-2001).";
+        }
+        leaf network-address {
+            type string;
+            description "Represents a port identifier based on a network address, detected by the agent and associated with a particular port.
+                Octet string that identifies a particular network address family and an associated network address that are encoded in network octet order.
+                An IP address, for example, would be encoded with the first octet containing the IANA Address Family Numbers enumeration value for the specific address type and octets 2 through n containing the address value.
+                ";
+        }
+        leaf interface-name {
+            type string;
+            description "String length '0..64'
+                Represents a port identifier based on the ifName MIB object, defined in IETF RFC 2863.";
+        }
+        leaf agent-circuit-id {
+            type string;
+            description "Represents a port identifier based on the agent-local identifier of the circuit (defined in RFC 3046), detected by the agent and associated with a particular port.";
+        }
+        leaf local {
+            type string;
+            description "Represents a port identifier based on a value locally assigned.";
+        }
+        description "IEEE P802.1Qcx/D0.3:
+            The source of a particular type of port identifier used in the LLDP YANG module.
+            MEF 38:
+            Data definitions associated with the Port ID TLV.";
+    }
+    typedef link-trace-egress-action-field-value {
+        type identityref {
+            base LINK_TRACE_EGRESS_ACTION_FIELD_VALUE;
+        }
+        description "IEEE P802.1Qcx/D0.3:
+            MEF 38:
+            Possible values returned in the Egress Action field.";
+    }
+    grouping lldp-chassis-id-subtype {
+        leaf chassis-component {
+            type string;
+            description "String length '0..32'
+                Represents a chassis identifier based on the value of entPhysicalAlias object (defined in IETF RFC 2737) for a chassis component (i.e., an entPhysicalClass value of chassis(3)).";
+        }
+        leaf interface-alias {
+            type string;
+            description "String length '0..64'
+                Represents a chassis identifier based on the value of ifAlias object (defined in IETF RFC 2863) for an interface on the containing chassis.";
+        }
+        leaf port-component {
+            type string;
+            description "String length '0..32'
+                Represents a chassis identifier based on the value of entPhysicalAlias object (defined in IETF RFC 2737) for a port or backplane component (i.e., entPhysicalClass value of port(10) or backplane(4)), within the containing chassis.";
+        }
+        leaf mac-address {
+            type mac-address;
+            description "Represents a chassis identifier based on the value of a unicast source address (encoded in network byte order and IEEE 802.3 canonical bit order), of a port on the containing chassis as defined in IEEE Std 802-2001.";
+        }
+        leaf network-address {
+            type string;
+            description "Octet string that identifies a particular network address family and an associated network address that are encoded in network octet order.
+                An IP address, for example, would be encoded with the first octet containing the IANA Address Family Numbers enumeration value for the specific address type and octets 2 through n containing the address value.";
+        }
+        leaf interface-name {
+            type string;
+            description "Represents a chassis identifier based on the value of ifName object (defined in IETF RFC 2863) for an interface on the containing chassis.";
+        }
+        leaf local {
+            type string;
+            description "Represents a chassis identifier based on a locally defined value.";
+        }
+        description "MEF 38:
+            The chassis-id-subtype contains the chassis ID entity that is listed in the chassis ID field. This is a combination of the 'Chassis ID Subtype' and 'chassis ID' fields.
+            ";
+    }
+    typedef ltmflags {
+        type identityref {
+            base LTMFLAGS;
+        }
+        description "IEEE 802.1Q 2018:
+            In the LTM, the Flags field of the Common CFM Header specifies certain options.";
+    }
+    typedef test-pattern {
+        type identityref {
+            base TEST_PATTERN;
+        }
+        description "The following values of pattern types are defined:
+            'Null signal without CRC-32'
+            'Null signal with CRC-32'
+            'PRBS 2^31-1 without CRC-32'
+            'PRBS 2^31-1 with CRC-32'.";
+    }
+    typedef bandwidth-profile-type {
+        type identityref {
+            base BANDWIDTH_PROFILE_TYPE;
+        }
+        description "none";
+    }
+    grouping bandwidth-profile {
+        leaf bw-profile-type {
+            type bandwidth-profile-type;
+            description "none";
+        }
+        container committed-information-rate {
+            uses tapi-common:capacity-value;
+            description "none";
+        }
+        container committed-burst-size {
+            uses tapi-common:capacity-value;
+            description "none";
+        }
+        container peak-information-rate {
+            uses tapi-common:capacity-value;
+            description "none";
+        }
+        container peak-burst-size {
+            uses tapi-common:capacity-value;
+            description "none";
+        }
+        leaf color-aware {
+            type boolean;
+            description "none";
+        }
+        leaf coupling-flag {
+            type boolean;
+            description "none";
+        }
+        description "none";
+    }
+    typedef eth-pm-parameter-name {
+        type identityref {
+            base ETH_PM_PARAMETER_NAME;
+        }
+        description "none";
+    }
+    typedef eth-alarm-condition-name {
+        type identityref {
+            base ETH_ALARM_CONDITION_NAME;
+        }
+        description "none";
+    }
+
+}
diff --git a/models/tapi/tapi-notification@2019-03-31.yang b/models/tapi/tapi-notification@2019-03-31.yang
new file mode 100644
index 0000000000000000000000000000000000000000..d89c06bc358e0c75c10d32250a32e0258885034f
--- /dev/null
+++ b/models/tapi/tapi-notification@2019-03-31.yang
@@ -0,0 +1,465 @@
+module tapi-notification {
+    namespace "urn:onf:otcc:yang:tapi-notification";
+    prefix tapi-notification;
+    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 Notification Model definitions.
+        Source: TapiNotification.uml
+        Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved.
+        License: This module is distributed under the Apache License 2.0
+        - 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.";
+    revision 2019-03-31 {
+        description "ONF Transport API version 2.2-RC1.
+                   Changes included in this TAPI release (v2.2) are listed in
+                  <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.2.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.2.0/UML>";
+    }
+    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.1/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 notification-context {
+            uses notification-context;
+            description "Augments the base TAPI Context with NotificationService information";
+        }
+        description "Augments the base TAPI Context with NotificationService information";
+    }
+    /**************************
+    * package object-classes
+    **************************/ 
+    grouping notification-subscription-service {
+        list notification {
+            key 'uuid';
+            config false;
+            uses notification;
+            description "none";
+        }
+        container notification-channel {
+            config false;
+            uses notification-channel;
+            description "none";
+        }
+        container subscription-filter {
+            uses subscription-filter;
+            description "none";
+        }
+        leaf subscription-state {
+            type subscription-state;
+            description "none";
+        }
+        leaf-list supported-notification-types {
+            type notification-type;
+            config false;
+            min-elements 1;
+            description "none";
+        }
+        leaf-list supported-object-types {
+            type tapi-common:object-type;
+            config false;
+            min-elements 1;
+            description "none";
+        }
+        uses tapi-common:global-class;
+        description "none";
+    }
+    grouping subscription-filter {
+        leaf-list requested-notification-types {
+            type notification-type;
+            description "none";
+        }
+        leaf-list requested-object-types {
+            type tapi-common:object-type;
+            description "none";
+        }
+        leaf-list requested-layer-protocols {
+            type tapi-common:layer-protocol-name;
+            description "none";
+        }
+        leaf-list requested-object-identifier {
+            type tapi-common:uuid;
+            description "none";
+        }
+        leaf include-content {
+            type boolean;
+            description "Indicates whether the published Notification includes content or just the Notification Id (which enables retrieval of the notification at the later stage)";
+        }
+        uses tapi-common:local-class;
+        description "none";
+    }
+    notification notification {
+        uses notification;
+        description "none";
+    }
+    grouping notification {
+        leaf notification-type {
+            type notification-type;
+            description "none";
+        }
+        leaf target-object-type {
+            type tapi-common:object-type;
+            description "none";
+        }
+        leaf target-object-identifier {
+            type tapi-common:uuid;
+            description "none";
+        }
+        list target-object-name {
+            key 'value-name';
+            min-elements 1;
+            uses tapi-common:name-and-value;
+            description "none";
+        }
+        leaf event-time-stamp {
+            type tapi-common:date-and-time;
+            description "none";
+        }
+        leaf sequence-number {
+            type uint64;
+            config false;
+            description "A monotonous increasing sequence number associated with the notification.
+                The exact semantics of how this sequence number is assigned (per channel or subscription or source or system) is left undefined.";
+        }
+        leaf source-indicator {
+            type source-indicator;
+            description "none";
+        }
+        leaf layer-protocol-name {
+            type tapi-common:layer-protocol-name;
+            description "none";
+        }
+        leaf layer-protocol-qualifier {
+            type tapi-common:layer-protocol-qualifier;
+            description "none";
+        }
+        list changed-attributes {
+            key 'value-name';
+            uses name-and-value-change;
+            description "none";
+        }
+        list additional-info {
+            key 'value-name';
+            uses tapi-common:name-and-value;
+            description "none";
+        }
+        leaf additional-text {
+            type string;
+            description "none";
+        }
+        uses tapi-common:global-class;
+        description "none";
+    }
+    grouping notification-channel {
+        leaf stream-address {
+            type string;
+            config false;
+            description "The address/location/URI of the channel/stream to which the subscribed notifications are published.
+                This specifics of this is typically dependent on the implementation protocol & mechanism and hence is typed as a string.";
+        }
+        leaf next-sequence-no {
+            type uint64;
+            config false;
+            description "The sequence number of the next notification that will be published on the channel";
+        }
+        uses tapi-common:local-class;
+        description "none";
+    }
+    grouping notification-context {
+        list notif-subscription {
+            key 'uuid';
+            uses notification-subscription-service;
+            description "none";
+        }
+        list notification {
+            key 'uuid';
+            config false;
+            uses notification;
+            description "none";
+        }
+        description "none";
+    }
+
+    /**************************
+    * package type-definitions
+    **************************/ 
+    identity NOTIFICATION_TYPE {
+        description "none";
+    }
+    identity NOTIFICATION_TYPE_OBJECT_CREATION {
+        base NOTIFICATION_TYPE;
+        description "Not a normal state. The system is unable to determine the correct value.";
+    }
+    identity NOTIFICATION_TYPE_OBJECT_DELETION {
+        base NOTIFICATION_TYPE;
+        description "none";
+    }
+    identity NOTIFICATION_TYPE_ATTRIBUTE_VALUE_CHANGE {
+        base NOTIFICATION_TYPE;
+        description "none";
+    }
+    identity NOTIFICATION_OBJECT_TYPE {
+    	base tapi-common:OBJECT_TYPE;
+        description "none";
+    }
+    identity NOTIFICATION_OBJECT_TYPE_NOTIFICATION_SUBSCRIPTION_SERVICE {
+        base NOTIFICATION_OBJECT_TYPE;
+        description "none";
+    }
+    identity NOTIFICATION_OBJECT_TYPE_NOTIFICATION_FILTER {
+        base NOTIFICATION_OBJECT_TYPE;
+        description "none";
+    }
+    grouping name-and-value-change {
+        leaf value-name {
+            type string;
+            description "The name of the value. The value need not have a name.";
+        }
+        leaf old-value {
+            type string;
+            description "The value";
+        }
+        leaf new-value {
+            type string;
+            description "The value";
+        }
+        description "A scoped name-value triple, including old value and new value";
+    }
+    typedef notification-type {
+        type identityref {
+            base NOTIFICATION_TYPE;
+        }
+        description "List of supported Notifications types.";
+    }
+    typedef source-indicator {
+        type enumeration {
+            enum RESOURCE_OPERATION {
+                description "none";
+            }
+            enum MANAGEMENT_OPERATION {
+                description "none";
+            }
+            enum UNKNOWN {
+                description "none";
+            }
+        }
+        description "none";
+    }
+    typedef subscription-state {
+        type enumeration {
+            enum SUSPENDED {
+                description "none";
+            }
+            enum ACTIVE {
+                description "none";
+            }
+        }
+        description "none";
+    }
+    typedef notification-object-type {
+        type identityref {
+            base NOTIFICATION_OBJECT_TYPE;
+        }
+        description "The list of TAPI Notification Object types/classes.";
+    }
+
+    /**************************
+    * package interfaces
+    **************************/ 
+    rpc get-supported-notification-types {
+        description "none";
+        output {
+            leaf-list supported-notification-types {
+                type notification-type;
+                min-elements 1;
+                description "none";
+            }
+            leaf-list supported-object-types {
+                type  tapi-common:object-type;
+                min-elements 1;
+                description "none";
+            }
+        }
+    }
+    rpc create-notification-subscription-service {
+        description "none";
+        input {
+            leaf uuid {
+                type tapi-common:uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+            list name {
+                key 'value-name';
+                uses tapi-common:name-and-value;
+                description "List of names. This value is unique in some namespace but may change during the life of the entity.
+                    A name carries no semantics with respect to the purpose of the entity.";
+            }
+            container subscription-filter {
+                uses subscription-filter;
+                description "none";
+            }
+            leaf subscription-state {
+                type subscription-state;
+                description "none";
+            }
+        }
+        output {
+            container subscription-service {
+                uses notification-subscription-service;
+                description "none";
+            }
+        }
+    }
+    rpc update-notification-subscription-service {
+        description "none";
+        input {
+            leaf uuid {
+                type tapi-common:uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+            list name {
+                key 'value-name';
+                uses tapi-common:name-and-value;
+                description "List of names. This value is unique in some namespace but may change during the life of the entity.
+                    A name carries no semantics with respect to the purpose of the entity.";
+            }
+            container subscription-filter {
+                uses subscription-filter;
+                description "none";
+            }
+            leaf subscription-state {
+                type subscription-state;
+                description "none";
+            }
+        }
+        output {
+            container subscription-service {
+                uses notification-subscription-service;
+                description "none";
+            }
+        }
+    }
+    rpc delete-notification-subscription-service {
+        description "none";
+        input {
+            leaf uuid {
+                type tapi-common:uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+        }
+    }
+    rpc get-notification-subscription-service-details {
+        description "none";
+        input {
+            leaf uuid {
+                type tapi-common:uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+        }
+        output {
+            container subscription-service {
+                uses notification-subscription-service;
+                description "none";
+            }
+        }
+    }
+    rpc get-notification-subscription-service-list {
+        description "none";
+        output {
+            list subscription-service {
+                key 'uuid';
+                uses notification-subscription-service;
+                description "none";
+            }
+        }
+    }
+    rpc get-notification-list {
+        description "none";
+        input {
+            leaf subscription-id {
+                type tapi-common:uuid;
+                description "UUID of the associated Notification Subscription Service: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+            container time-range {
+                uses tapi-common:time-range;
+                description "none";
+            }
+        }
+        output {
+            list notification {
+                key 'uuid';
+                uses notification;
+                description "none";
+            }
+        }
+    }
+
+}
diff --git a/models/tapi/tapi-oam@2019-03-31.yang b/models/tapi/tapi-oam@2019-03-31.yang
new file mode 100644
index 0000000000000000000000000000000000000000..80e77bdd374f54b38ee6651846cee9c2451ce1eb
--- /dev/null
+++ b/models/tapi/tapi-oam@2019-03-31.yang
@@ -0,0 +1,1267 @@
+module tapi-oam {
+    namespace "urn:onf:otcc:yang:tapi-oam";
+    prefix tapi-oam;
+    import tapi-common {
+        prefix tapi-common;
+    }
+    import tapi-connectivity {
+        prefix tapi-connectivity;
+    }
+    import tapi-topology {
+        prefix tapi-topology;
+    }
+    import tapi-notification {
+        prefix tapi-notification;
+    }
+    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 OAM Model definitions.
+        Source: TapiOam.uml
+        Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved.
+        License: This module is distributed under the Apache License 2.0
+        - 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.";
+    revision 2019-03-31 {
+        description "ONF Transport API version 2.2-RC1.
+                   Changes included in this TAPI release (v2.2) are listed in
+                  <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.2.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.2.0/UML>";
+    }
+    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.1/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 oam-context {
+            uses oam-context;
+            description "Augments the base TAPI Context with OamService information";
+        }
+        description "Augments the base TAPI Context with OamService information";
+    }
+    augment "/tapi-common:context/tapi-topology:topology-context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point/tapi-connectivity:cep-list/tapi-connectivity:connection-end-point" {
+        container mep-mip-list {
+            uses mep-mip-list;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-notification:notification-context/tapi-notification:notification" {
+        container alarm-info {
+            uses alarm-info;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-notification:notification-context/tapi-notification:notification" {
+        container tca-info {
+            uses tca-info;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-notification:get-notification-list/tapi-notification:output/tapi-notification:notification" {
+        container alarm-info {
+            uses alarm-info;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-notification:get-notification-list/tapi-notification:output/tapi-notification:notification" {
+        container tca-info {
+            uses tca-info;
+            description "none";
+        }
+        description "none";
+    }
+    /**************************
+    * definitions of references
+    **************************/
+    grouping oam-service-ref {
+        leaf oam-service-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-service/tapi-oam:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+    grouping oam-service-point-ref {
+        uses oam-service-ref;
+        leaf oam-service-point-local-id {
+            type leafref {
+                path '/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-service/tapi-oam:oam-service-point/tapi-oam:local-id';
+            }
+            description "none";
+        }
+        description "none";
+    }
+    grouping meg-ref {
+        leaf meg-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-oam:oam-context/tapi-oam:meg/tapi-oam:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+    grouping mep-ref {
+        uses meg-ref;
+        leaf mep-local-id {
+            type leafref {
+                path '/tapi-common:context/tapi-oam:oam-context/tapi-oam:meg/tapi-oam:mep/tapi-oam:local-id';
+            }
+            description "none";
+        }
+        description "none";
+    }
+    grouping mip-ref {
+        uses meg-ref;
+        leaf mip-local-id {
+            type leafref {
+                path '/tapi-common:context/tapi-oam:oam-context/tapi-oam:meg/tapi-oam:mip/tapi-oam:local-id';
+            }
+            description "none";
+        }
+        description "none";
+    }
+    grouping oam-job-ref {
+        leaf oam-job-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-job/tapi-oam:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+    grouping current-data-ref {
+        uses oam-job-ref;
+        leaf current-data-local-id {
+            type leafref {
+                path '/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-job/tapi-oam:current-data/tapi-oam:local-id';
+            }
+            description "none";
+        }
+        description "none";
+    }
+    grouping history-data-ref {
+        uses current-data-ref;
+        leaf history-data-local-id {
+            type leafref {
+                path '/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-job/tapi-oam:current-data/tapi-oam:history-data/tapi-oam:local-id';
+            }
+            description "none";
+        }
+        description "none";
+    }
+    grouping oam-profile-ref {
+        leaf oam-profile-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-profile/tapi-oam:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+    grouping pm-threshold-data-ref {
+        uses oam-profile-ref;
+        leaf pm-threshold-data-local-id {
+            type leafref {
+                path '/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-profile/tapi-oam:pm-threshold-data/tapi-oam:local-id';
+            }
+            description "none";
+        }
+        description "none";
+    }
+    grouping pm-bin-data-ref {
+        uses oam-profile-ref;
+        leaf pm-bin-data-local-id {
+            type leafref {
+                path '/tapi-common:context/tapi-oam:oam-context/tapi-oam:oam-profile/tapi-oam:pm-bin-data/tapi-oam:local-id';
+            }
+            description "none";
+        }
+        description "none";
+    }
+    /**************************
+    * package object-classes
+    **************************/ 
+    grouping mep {
+        leaf layer-protocol-name {
+            type tapi-common:layer-protocol-name;
+            config false;
+            description "none";
+        }
+        uses tapi-common:local-class;
+        uses tapi-common:operational-state-pac;
+        description "none";
+    }
+    grouping oam-job {
+        list oam-service-point {
+            uses oam-service-point-ref;
+            key 'oam-service-uuid oam-service-point-local-id';
+            min-elements 1;
+            description "none";
+        }
+        container oam-profile {
+            uses oam-profile-ref;
+            description "none";
+        }
+        list current-data {
+            key 'local-id';
+            config false;
+            uses current-data;
+            description "Granularity period of the CurrentData identifies the specific CurrentData instance in the scope of this OamJob.
+                For example, typically at least
+                one 15min and
+                one 24hr;
+                optionally one additional configurable (< 15min)";
+        }
+        leaf oam-job-type {
+            type oam-job-type;
+            description "none";
+        }
+        container schedule {
+            uses tapi-common:time-range;
+            description "none";
+        }
+        leaf creation-time {
+            type tapi-common:date-and-time;
+            config false;
+            description "none";
+        }
+        uses tapi-common:global-class;
+        uses tapi-common:admin-state-pac;
+        description "none";
+    }
+    grouping meg {
+        list mep {
+            key 'local-id';
+            config false;
+            uses mep;
+            description "1. ME may have 0 MEPs (case of transit domains where at least 1 MIP is present)
+                2. ME may have 1 MEP (case of edge domains, where the peer MEP is ouside the managed domain)
+                3. ME may have 2 MEPs";
+        }
+        list mip {
+            key 'local-id';
+            config false;
+            uses mip;
+            description "ME may 0, 1, or more MIPs";
+        }
+        leaf layer-protocol-name {
+            type tapi-common:layer-protocol-name;
+            config false;
+            description "none";
+        }
+        uses tapi-common:global-class;
+        uses tapi-common:operational-state-pac;
+        description "none";
+    }
+    grouping mip {
+        leaf layer-protocol-name {
+            type tapi-common:layer-protocol-name;
+            config false;
+            description "none";
+        }
+        uses tapi-common:local-class;
+        description "none";
+    }
+    grouping oam-service {
+        leaf layer-protocol-name {
+            type tapi-common:layer-protocol-name;
+            description "none";
+        }
+        list oam-service-point {
+            key 'local-id';
+            min-elements 2;
+            uses oam-service-point;
+            description "none";
+        }
+        container meg {
+            uses meg-ref;
+            config false;
+            description "none";
+        }
+        uses tapi-common:global-class;
+        uses tapi-common:admin-state-pac;
+        description "none";
+    }
+    grouping oam-context {
+        list oam-service {
+            key 'uuid';
+            uses oam-service;
+            description "none";
+        }
+        list meg {
+            key 'uuid';
+            config false;
+            uses meg;
+            description "none";
+        }
+        list oam-job {
+            key 'uuid';
+            uses oam-job;
+            description "none";
+        }
+        list oam-profile {
+            key 'uuid';
+            uses oam-profile;
+            description "none";
+        }
+        description "none";
+    }
+    grouping oam-service-point {
+        container service-interface-point {
+            uses tapi-common:service-interface-point-ref;
+            description "none";
+        }
+        container connectivity-service-end-point {
+            uses tapi-connectivity:connectivity-service-end-point-ref;
+            description "none";
+        }
+        container mep {
+            uses mep-ref;
+            config false;
+            description "none";
+        }
+        container mip {
+            uses mip-ref;
+            config false;
+            description "none";
+        }
+        leaf layer-protocol-name {
+            type tapi-common:layer-protocol-name;
+            description "none";
+        }
+        leaf is-mip {
+            type boolean;
+            description "If true, the object is related to a MIP.
+                If false, the object is related to a MEP.";
+        }
+        uses tapi-common:local-class;
+        uses tapi-common:admin-state-pac;
+        description "none";
+    }
+    grouping mep-mip-list {
+        list mip {
+            uses mip-ref;
+            key 'meg-uuid mip-local-id';
+            description "none";
+        }
+        list mep {
+            uses mep-ref;
+            key 'meg-uuid mep-local-id';
+            description "none";
+        }
+        description "none";
+    }
+    grouping current-data {
+        leaf period-start-time {
+            type tapi-common:date-and-time;
+            config false;
+            description "This attribute indicates the start of the current monitoring interval.
+                The value is bound to the quarter of an hour in case of a 15 minute interval and bound to the hour in case of a 24 hour interval.";
+        }
+        container elapsed-time {
+            uses tapi-common:time-interval;
+            description "none";
+        }
+        container pm-data-pac {
+            uses pm-data-pac;
+            description "none";
+        }
+        list history-data {
+            key 'local-id';
+            config false;
+            uses history-data;
+            description "in case of 24hr Current Data, at least 1 History Data.
+                In case of 15min Current Data, at least 16 History Data.
+                In case of <15min, the number of History Data shall be able to cover a span of 4 hours.";
+        }
+        uses tapi-common:local-class;
+        description "none";
+    }
+    grouping history-data {
+        leaf period-start-time {
+            type tapi-common:date-and-time;
+            description "This attribute indicates the start of the monitoring interval.
+                The value is bound to the quarter of an hour in case of a 15 minute interval and bound to the hour in case of a 24 hour interval.";
+        }
+        leaf period-end-time {
+            type tapi-common:date-and-time;
+            description "none";
+        }
+        container pm-data-pac {
+            uses pm-data-pac;
+            description "none";
+        }
+        uses tapi-common:local-class;
+        description "none";
+    }
+    grouping oam-profile {
+        list pm-threshold-data {
+            key 'local-id';
+            min-elements 1;
+            uses pm-threshold-data;
+            description "none";
+        }
+        uses tapi-common:global-class;
+        description "none";
+    }
+    grouping pm-threshold-data {
+        leaf-list applicable-job-type {
+            type oam-job-type;
+            description "This attribute allows an PMThresholdData instance to be constrained to specific job types. If an PMThresholdData instance is so configured to be applicable to more than one job type (worst case ALL), only the parameters relevant for the job instance will be used (non-applicable profile parameters will be ignored)";
+        }
+        list threshold-parameter {
+            key 'pm-parameter-name threshold-location';
+            uses threshold-parameter;
+            description "none";
+        }
+        container granularity-period {
+            uses tapi-common:time-period;
+            description "none";
+        }
+        leaf is-transient {
+            type boolean;
+            description "none";
+        }
+        uses tapi-common:local-class;
+        description "none";
+    }
+    grouping pm-data-pac {
+        container granularity-period {
+            uses tapi-common:time-period;
+            description "none";
+        }
+        leaf suspect-interval-flag {
+            type boolean;
+            description "This attribute is used to indicate that the performance data for the current period may not be reliable. Some reasons for this to occur are:
+                – Suspect data were detected by the actual resource doing data collection.
+                – Transition of the administrativeState attribute to/from the 'lock' state.
+                – Transition of the operationalState to/from the 'disabled' state.
+                – Scheduler setting that inhibits the collection function.
+                – The performance counters were reset during the interval.
+                – The currentData (or subclass) object instance was created during the monitoring period.";
+        }
+        description "none";
+    }
+    grouping tca-info {
+        leaf is-transient {
+            type boolean;
+            config false;
+            description "none";
+        }
+        leaf perceived-severity {
+            type perceived-tca-severity;
+            description "none";
+        }
+        container threshold-parameter {
+            config false;
+            uses threshold-parameter;
+            description "none";
+        }
+        leaf measurement-interval {
+            type tapi-common:date-and-time;
+            description "none";
+        }
+        leaf suspect-interval-flag {
+            type boolean;
+            description "none";
+        }
+        container oam-job {
+            uses oam-job-ref;
+            description "MEF 35.1
+                Identification of the PM Session for which the TCA Function was configured.";
+        }
+        description "none";
+    }
+    grouping alarm-info {
+        leaf is-transient {
+            type boolean;
+            config false;
+            description "none";
+        }
+        leaf perceived-severity {
+            type perceived-severity-type;
+            config false;
+            description "none";
+        }
+        leaf probable-cause {
+            type alarm-condition-name;
+            config false;
+            description "none";
+        }
+        leaf service-affecting {
+            type service-affecting;
+            description "none";
+        }
+        description "none";
+    }
+
+    /**************************
+    * package type-definitions
+    **************************/ 
+    identity OAM_JOB_TYPE {
+        description "none";
+    }
+    identity OAM_NOTIFICATION_TYPE {
+    	base tapi-notification:NOTIFICATION_TYPE;
+        description "none";
+    }
+    identity OAM_NOTIFICATION_TYPE_ALARM_EVENT {
+        base OAM_NOTIFICATION_TYPE;
+        description "none";
+    }
+    identity OAM_NOTIFICATION_TYPE_THRESHOLD_CROSSING_ALERT {
+        base OAM_NOTIFICATION_TYPE;
+        description "none";
+    }
+    identity ALARM_CONDITION_NAME {
+        description "none";
+    }
+    identity PM_PARAMETER_NAME {
+        description "none";
+    }
+    identity OAM_OBJECT_TYPE {
+    	base tapi-common:OBJECT_TYPE;
+        description "none";
+    }
+    identity OAM_OBJECT_TYPE_OAM_SERVICE {
+        base OAM_OBJECT_TYPE;
+        description "none";
+    }
+    identity OAM_OBJECT_TYPE_OAM_SERVICE_POINT {
+        base OAM_OBJECT_TYPE;
+        description "none";
+    }
+    identity OAM_OBJECT_TYPE_MEG {
+        base OAM_OBJECT_TYPE;
+        description "none";
+    }
+    identity OAM_OBJECT_TYPE_MEP {
+        base OAM_OBJECT_TYPE;
+        description "none";
+    }
+    identity OAM_OBJECT_TYPE_MIP {
+        base OAM_OBJECT_TYPE;
+        description "none";
+    }
+    identity OAM_OBJECT_TYPE_OAM_JOB {
+        base OAM_OBJECT_TYPE;
+        description "none";
+    }
+    identity OAM_OBJECT_TYPE_OAM_PROFILE {
+        base OAM_OBJECT_TYPE;
+        description "none";
+    }
+    identity OAM_OBJECT_TYPE_PM_THRESHOLD_DATA {
+        base OAM_OBJECT_TYPE;
+        description "none";
+    }
+    identity OAM_OBJECT_TYPE_CURRENT_DATA {
+        base OAM_OBJECT_TYPE;
+        description "none";
+    }
+    identity OAM_OBJECT_TYPE_HISTORY_DATA {
+        base OAM_OBJECT_TYPE;
+        description "none";
+    }
+    typedef oam-job-type {
+        type identityref {
+            base OAM_JOB_TYPE;
+        }
+        description "none";
+    }
+    typedef perceived-tca-severity {
+        type enumeration {
+            enum WARNING {
+                description "none";
+            }
+            enum CLEAR {
+                description "none";
+            }
+        }
+        description "none";
+    }
+    typedef perceived-severity-type {
+        type enumeration {
+            enum CRITICAL {
+                description "none";
+            }
+            enum MAJOR {
+                description "none";
+            }
+            enum MINOR {
+                description "none";
+            }
+            enum WARNING {
+                description "none";
+            }
+            enum CLEARED {
+                description "none";
+            }
+        }
+        description "none";
+    }
+    typedef service-affecting {
+        type enumeration {
+            enum SERVICE_AFFECTING {
+                description "none";
+            }
+            enum NOT_SERVICE_AFFECTING {
+                description "none";
+            }
+            enum UNKNOWN {
+                description "none";
+            }
+        }
+        description "none";
+    }
+    typedef oam-notification-type {
+        type identityref {
+            base OAM_NOTIFICATION_TYPE;
+        }
+        description "none";
+    }
+    typedef alarm-condition-name {
+        type identityref {
+            base ALARM_CONDITION_NAME;
+        }
+        description "none";
+    }
+    grouping pm-parameter {
+        leaf pm-parameter-name {
+            type pm-parameter-name;
+            description "none";
+        }
+        container pm-parameter-value {
+            uses pm-parameter-value;
+            description "none";
+        }
+        description "none";
+    }
+    typedef pm-parameter-name {
+        type identityref {
+            base PM_PARAMETER_NAME;
+        }
+        description "none";
+    }
+    grouping threshold-parameter {
+        leaf pm-parameter-name {
+            type pm-parameter-name;
+            description "none";
+        }
+        leaf threshold-location {
+            type threshold-crossing-qualifier;
+            description "none";
+        }
+        container pm-parameter-above-thrs {
+            uses pm-parameter-value;
+            description "none";
+        }
+        container pm-parameter-below-thrs {
+            uses pm-parameter-value;
+            description "none";
+        }
+        container pm-parameter-clear-thrs {
+            uses pm-parameter-value;
+            description "none";
+        }
+        description "none";
+    }
+    typedef threshold-crossing-qualifier {
+        type enumeration {
+            enum NOT_APPLICABLE {
+                description "none";
+            }
+            enum NEAR_END {
+                description "none";
+            }
+            enum FAR_END {
+                description "none";
+            }
+            enum BIDIRECTIONAL {
+                description "none";
+            }
+            enum FORWARD {
+                description "none";
+            }
+            enum BACKWARD {
+                description "none";
+            }
+        }
+        description "none";
+    }
+    typedef oam-object-type {
+        type identityref {
+            base OAM_OBJECT_TYPE;
+        }
+        description "The list of TAPI Global Object Class types on which Notifications can be raised.";
+    }
+    grouping pm-parameter-value {
+        leaf pm-parameter-int-value {
+            type uint64;
+            description "none";
+        }
+        leaf pm-parameter-real-value {
+            type decimal64 {
+                fraction-digits 7;
+            }
+            description "none";
+        }
+        description "none";
+    }
+
+    /**************************
+    * package interfaces
+    **************************/ 
+    rpc create-oam-service {
+        description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+            An UUID carries no semantics with respect to the purpose or state of the entity.
+            UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+            Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+            Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+        input {
+            leaf uuid {
+                type tapi-common:uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+            list name {
+                key 'value-name';
+                uses tapi-common:name-and-value;
+                description "List of names. This value is unique in some namespace but may change during the life of the entity.
+                    A name carries no semantics with respect to the purpose of the entity.";
+            }
+            leaf layer-protocol-name {
+                type tapi-common:layer-protocol-name;
+                description "none";
+            }
+            leaf state {
+                type tapi-common:administrative-state;
+                description "none";
+            }
+            list oam-service-point {
+            	key 'local-id';
+                min-elements 2;
+                uses oam-service-point;
+                description "none";
+            }
+        }
+        output {
+            container oam-service {
+                uses oam-service;
+                description "none";
+            }
+        }
+    }
+    rpc delete-oam-service {
+        description "none";
+        input {
+            leaf uuid {
+                type tapi-common:uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+        }
+    }
+    rpc get-oam-service {
+        description "none";
+        input {
+            leaf uuid {
+                type tapi-common:uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+        }
+        output {
+            container oam-service {
+                uses oam-service;
+                description "none";
+            }
+        }
+    }
+    rpc get-oam-service-list {
+        description "none";
+        output {
+            list oam-service {
+            	key 'uuid';
+                uses oam-service;
+                description "none";
+            }
+        }
+    }
+    rpc get-meg {
+        description "none";
+        input {
+            leaf uuid {
+                type tapi-common:uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+        }
+        output {
+            container meg {
+                uses meg;
+                description "none";
+            }
+        }
+    }
+    rpc update-oam-service {
+        description "none";
+        input {
+            leaf uuid {
+                type tapi-common:uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+            list name {
+                key 'value-name';
+                uses tapi-common:name-and-value;
+                description "List of names. This value is unique in some namespace but may change during the life of the entity.
+                    A name carries no semantics with respect to the purpose of the entity.";
+            }
+            leaf state {
+                type tapi-common:administrative-state;
+                description "none";
+            }
+            list oam-service-point {
+            	key 'local-id';
+                uses oam-service-point;
+                description "none";
+            }
+        }
+        output {
+            container oam-service {
+                uses oam-service;
+                description "none";
+            }
+        }
+    }
+    rpc create-oam-service-point {
+        description "none";
+        input {
+            leaf uuid {
+                type tapi-common:uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+            leaf oam-service-id {
+                type tapi-common:uuid;
+                description "UUID of the parent OamService: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+            leaf service-interface-point-id {
+                type tapi-common:uuid;
+                description "UUID of the associated SIP to be monitored: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+            leaf connectivity-service-end-point-id {
+                type tapi-common:uuid;
+                description "UUID of the CSEP to be monitored: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+            list name {
+                key 'value-name';
+                uses tapi-common:name-and-value;
+                description "List of names. This value is unique in some namespace but may change during the life of the entity.
+                    A name carries no semantics with respect to the purpose of the entity.";
+            }
+            leaf layer-protocol-name {
+                type tapi-common:layer-protocol-name;
+                description "none";
+            }
+            leaf state {
+                type tapi-common:administrative-state;
+                description "none";
+            }
+        }
+        output {
+            container oam-service-point {
+                uses oam-service-point;
+                description "none";
+            }
+        }
+    }
+    rpc delete-oam-service-point {
+        description "none";
+        input {
+            leaf uuid {
+                type tapi-common:uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+        }
+    }
+    rpc update-oam-service-point {
+        description "none";
+        input {
+            leaf uuid {
+                type tapi-common:uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+            list name {
+                key 'value-name';
+                uses tapi-common:name-and-value;
+                description "List of names. This value is unique in some namespace but may change during the life of the entity.
+                    A name carries no semantics with respect to the purpose of the entity.";
+            }
+            leaf state {
+                type tapi-common:administrative-state;
+                description "none";
+            }
+        }
+        output {
+            container oam-service-point {
+                uses oam-service-point;
+                description "none";
+            }
+        }
+    }
+    rpc get-oam-service-point {
+        description "none";
+        input {
+            leaf uuid {
+                type tapi-common:uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+        }
+        output {
+            container oam-service-point {
+                uses oam-service-point;
+                description "none";
+            }
+        }
+    }
+    rpc create-oam-job {
+        description "none";
+        input {
+            leaf uuid {
+                type tapi-common:uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+            leaf oam-service-id {
+                type tapi-common:uuid;
+                description "UUID of the associated OamService: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+            leaf oam-service-point-id {
+                type tapi-common:uuid;
+                description "UUID of the associated OSEPs: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+            leaf oam-profile-id {
+                type tapi-common:uuid;
+                description "UUID of the OamProfile to be applied: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+            list name {
+                key 'value-name';
+                uses tapi-common:name-and-value;
+                description "List of names. This value is unique in some namespace but may change during the life of the entity.
+                    A name carries no semantics with respect to the purpose of the entity.";
+            }
+            leaf oam-job-type {
+                type oam-job-type;
+                description "none";
+            }
+            leaf state {
+                type tapi-common:administrative-state;
+                description "none";
+            }
+            container schedule {
+                uses tapi-common:time-range;
+                description "none";
+            }
+        }
+        output {
+            container oam-job {
+                uses oam-job;
+                description "none";
+            }
+        }
+    }
+    rpc update-oam-job {
+        description "none";
+        input {
+            leaf uuid {
+                type tapi-common:uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+            leaf oam-profile-id {
+                type tapi-common:uuid;
+                description "UUID of the OamProfile to be applied: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+            list name {
+                key 'value-name';
+                uses tapi-common:name-and-value;
+                description "List of names. This value is unique in some namespace but may change during the life of the entity.
+                    A name carries no semantics with respect to the purpose of the entity.";
+            }
+            leaf state {
+                type tapi-common:administrative-state;
+                description "none";
+            }
+            container schedule {
+                uses tapi-common:time-range;
+                description "none";
+            }
+        }
+        output {
+            container oam-job {
+                uses oam-job;
+                description "none";
+            }
+        }
+    }
+    rpc delete-oam-job {
+        description "none";
+        input {
+            leaf uuid {
+                type tapi-common:uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+        }
+    }
+    rpc get-oam-job {
+        description "none";
+        input {
+            leaf uuid {
+                type tapi-common:uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+        }
+        output {
+            container oam-job {
+                uses oam-job;
+                description "none";
+            }
+        }
+    }
+    rpc get-oam-job-list {
+        description "none";
+        output {
+            list oam-job {
+            	key 'uuid';
+                uses oam-job;
+                description "none";
+            }
+        }
+    }
+    rpc create-oam-profile {
+        description "none";
+        input {
+            leaf uuid {
+                type tapi-common:uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+            list name {
+                key 'value-name';
+                uses tapi-common:name-and-value;
+                description "List of names. This value is unique in some namespace but may change during the life of the entity.
+                    A name carries no semantics with respect to the purpose of the entity.";
+            }
+            list pm-threshold-data {
+                min-elements 1;
+                uses pm-threshold-data;
+                description "none";
+            }
+        }
+        output {
+            container oam-profile {
+                uses oam-profile;
+                description "none";
+            }
+        }
+    }
+    rpc update-oam-profile {
+        description "none";
+        input {
+            leaf uuid {
+                type tapi-common:uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+            list name {
+                key 'value-name';
+                uses tapi-common:name-and-value;
+                description "List of names. This value is unique in some namespace but may change during the life of the entity.
+                    A name carries no semantics with respect to the purpose of the entity.";
+            }
+            list pm-threshold-data {
+                min-elements 1;
+                uses pm-threshold-data;
+                description "none";
+            }
+        }
+        output {
+            container oam-profile {
+                uses oam-profile;
+                description "none";
+            }
+        }
+    }
+    rpc delete-oam-profile {
+        description "none";
+        input {
+            leaf uuid {
+                type tapi-common:uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+        }
+    }
+    rpc get-oam-profile {
+        description "none";
+        input {
+            leaf uuid {
+                type tapi-common:uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+        }
+        output {
+            container oam-profile {
+                uses oam-profile;
+                description "none";
+            }
+        }
+    }
+    rpc get-oam-profile-list {
+        description "none";
+        output {
+            list oam-profile {
+            	key 'uuid';
+                uses oam-profile;
+                description "none";
+            }
+        }
+    }
+
+}
diff --git a/models/tapi/tapi-odu@2019-03-31.yang b/models/tapi/tapi-odu@2019-03-31.yang
new file mode 100644
index 0000000000000000000000000000000000000000..1664e3abc830a6097c48751795e1b15e0fda0896
--- /dev/null
+++ b/models/tapi/tapi-odu@2019-03-31.yang
@@ -0,0 +1,1190 @@
+module tapi-odu {
+    namespace "urn:onf:otcc:yang:tapi-odu";
+    prefix tapi-odu;
+    import tapi-common {
+        prefix tapi-common;
+    }
+    import tapi-connectivity {
+        prefix tapi-connectivity;
+    }
+    import tapi-topology {
+        prefix tapi-topology;
+    }
+    import tapi-oam {
+        prefix tapi-oam;
+    }
+    import tapi-dsr {
+        prefix tapi-dsr;
+    }
+    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 Odu Model definitions.
+        Source: TapiOdu.uml
+        Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved.
+        License: This module is distributed under the Apache License 2.0
+        - 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.";
+    revision 2019-03-31 {
+        description "ONF Transport API version 2.2-RC1.
+                   Changes included in this TAPI release (v2.2) are listed in
+                  <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.2.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.2.0/UML>";
+    }
+    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.1/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/tapi-topology:topology-context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point" {
+        container odu-node-edge-point-spec {
+            uses odu-node-edge-point-spec;
+            description "Augments the base LayerProtocol information in NodeEdgePoint with ODU-specific information";
+        }
+        description "Augments the base LayerProtocol information in NodeEdgePoint with ODU-specific information";
+    }
+    augment "/tapi-common:context/tapi-topology:topology-context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point/tapi-connectivity:cep-list/tapi-connectivity:connection-end-point" {
+        container odu-connection-end-point-spec {
+            uses odu-connection-end-point-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:meg/tapi-oam:mep" {
+        container odu-mep-spec {
+            uses odu-mep-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:meg/tapi-oam:mip" {
+        container odu-mip-spec {
+            uses odu-mip-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-connectivity:connectivity-context/tapi-connectivity:connectivity-service/tapi-connectivity:end-point" {
+        container odu-connectivity-service-end-point-spec {
+            uses odu-connectivity-service-end-point-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:meg" {
+        container odu-meg-spec {
+            uses odu-meg-spec;
+            description "none";
+        }
+        description "none";
+    }
+    /**************************
+    * package object-classes
+    **************************/ 
+    grouping odu-termination-and-client-adaptation-pac {
+        leaf opu-tributary-slot-size {
+            type odu-slot-size;
+            config false;
+            description "This attribute is applicable for ODU2 and ODU3 CTP only. It indicates the slot size of the ODU CTP.";
+        }
+        leaf auto-payload-type {
+            type boolean;
+            config false;
+            description "This attribute is applicable when the ODU CTP object instance represents a lower order ODU CTP Source at the client layer of the ODUP/ODUj-21 adaptation function. The value of true of this attribute configures that the adaptation source function shall fall back to the payload type PT=20 if the conditions specified in 14.3.10.1/G.798 are satisfied. ";
+        }
+        leaf configured-client-type {
+            type tapi-dsr:digital-signal-type;
+            config false;
+            description "This attribute configures the type of the client CTP of the server ODU TTP.";
+        }
+        leaf configured-mapping-type {
+            type mapping-type;
+            config false;
+            description "This attribute indicates the configured mapping type.";
+        }
+        container accepted-payload-type {
+            config false;
+            uses odu-payload-type;
+            description "This attribute is applicable when the ODU CTP object instance represents a lower order ODU CTP Sink at the client layer of the ODUP/ODU[i]j or ODUP/ODUj-21 adaptation function. 
+                This attribute is a 2-digit Hex code that indicates the new accepted payload type.
+                Valid values are defined in Table 15-8 of ITU-T Recommendation G.709 with one additional value UN_INTERPRETABLE.";
+        }
+        container fec-parameters {
+            config false;
+            uses fec-properties;
+            description "none";
+        }
+        leaf-list odu-cn-effective-time-slot-list {
+            type uint64;
+            description "This attribute contains a set of distinct (i.e. unique) integers (e.g. 2, 3, 5, 9, 15, 34 representing the tributary slots TS#1.2, TS#1.3, TS#1.5, TS#1.9, TS#1.15, and TS#2.14)
+                which represents the list of effective time slots which are available for carrying ODUk clients.
+                Each entry in the list is an integer value (P) representing the time slot name TS#A.B (see ITU-T Recommendation G.709 (v5) Clause 20.1).
+                The mapping between P and A & B is: A = [P/20] + 1; B = P - (P/20]*20; where the sqaure bracket represents the whole integer.";
+        }
+        description "This Pac contains the attributes associated with the client adaptation function of the server layer TTP
+            It is present only if the CEP contains a TTP";
+    }
+    grouping odu-connection-end-point-spec {
+        container odu-common {
+            uses odu-common-pac;
+            description "none";
+        }
+        container odu-term-and-adapter {
+            config false;
+            uses odu-termination-and-client-adaptation-pac;
+            description "none";
+        }
+        container odu-ctp {
+            config false;
+            uses odu-ctp-pac;
+            description "none";
+        }
+        container odu-protection {
+            config false;
+            uses odu-protection-pac;
+            description "none";
+        }
+        description "none";
+    }
+    grouping odu-pool-pac {
+        leaf client-capacity {
+            type uint64;
+            description "none";
+        }
+        leaf max-client-instances {
+            type uint64;
+            config false;
+            description "none";
+        }
+        leaf max-client-size {
+            type uint64;
+            config false;
+            description "none";
+        }
+        description "none";
+    }
+    grouping odu-node-edge-point-spec {
+        container odu-pool {
+            config false;
+            uses odu-pool-pac;
+            description "none";
+        }
+        description "none";
+    }
+    grouping odu-ctp-pac {
+        leaf-list tributary-slot-list {
+            type uint64;
+            config false;
+            description "ITU-T G.875 (v5)
+                This attribute contains a set of distinct (i.e. unique) integers (e.g. 2, 3, 5, 9, 15 representing the tributary slots TS#2, TS#3, TS#5, TS#9 and TS#15) which represents the resources occupied by the ODUk CTP (e.g. an ODUflex with a bit rate of 6.25G setup over an HO-ODUk).
+                This attribute applies when the ODUk CTP is carried by a sever layer ODU TTP object. It will not apply if this ODUk CTP object is directly carried by an OTUk TTP object (i.e. OTUk has no tributary slots).
+                The upper bound of the integer allowed in this set and its relationship with the tributary slots are a function of the ODU server layer to which the ODUk CTP is carried over.
+                In case the ODU server layer is an HO-ODUk, each entry in the list is an integer value (i) representing the tributary slot name TS#i and the upper bound is the maximum number of tributary slots within the HO-ODUk (see ITU-T Recommendation G.709 (v5) clause 19).
+                Thus, for example, M=8/32/80 for ODU2/ODU3/ODU4 server layers (respectively) using 1.25G slot size.
+                In case the ODU server layer is an ODUCn, each entry in the list is an integer value (P) representing the time slot name TS#A.B (e.g. 2, 3, 5, 9, 15, 34 representing the tributary slots TS#1.2, TS#1.3, TS#1.5, TS#1.9, TS#1.15, and TS#2.14) and the upper bound is 20*n (see ITU-T Recommendation G.709 (v5) Clause 20.1).
+                The mapping between P and A & B is: A = [P/20] + 1; B = P - (P/20]*20; where the square bracket represents the whole integer. Note that the value of this attribute can be changed only in the case of ODUflex and has to be through specific operations (i.e. not be changing the attribute tributarySlotList directly).";
+        }
+        leaf tributary-port-number {
+            type uint64;
+            config false;
+            description "This attribute identifies the tributary port number that is associated with the ODUk CTP. This attribute applies when the ODUk CTP is multiplexed into a server layer ODU TTP object.
+                It will not apply if this ODUk CTP object is directly mapped into an OTUk TTP object (i.e. OTUk has no tributary slots).
+                The upper bound of the integer allowed in this set is a function of the ODU server layer into which the ODUk CTP is multiplexed.
+                In case the ODU server layer is an HO-ODUk, the upper bound is the maximum number of tributary slots within the HO-ODUk (see ITU-T Recommendation G.709 (v5) clause 19.4.1).
+                Thus, for example, M=8/32/80 for ODU2/ODU3/ODU4 server layers (respectively) using 1.25G slot size.
+                In case the ODU server layer is an ODUCn, the upper bound is M=10*n (see ITU-T Recommendation G.709 (v5) Clause 20.4.1).
+                range of type : The value range depends on the size of the Tributary Port Number (TPN) field used which depends on th server-layer ODU or OTU.
+                In case of ODUk mapping into OTUk, there is no TPN field, so the tributaryPortNumber shall be zero.
+                In case of LO ODUj mapping over ODU1, ODU2 or ODU3, the TPN is encoded in a 6-bit field so the value range is 0-63. See clause 14.4.1/G.709-2016.
+                In case of LO ODUj mapping over ODU4, the TPN is encoded in a 7-bit field so the value range is 0-127. See clause 14.4.1.4/G.709-2016.
+                In case of ODUk mapping over ODUCn, the TPN is encoded in a 14-bit field so the value range is 0-16383. See clause 20.4.1.1/G.709-2016.
+                ";
+        }
+        leaf accepted-msi {
+            type string;
+            config false;
+            description "This attribute is applicable when the ODU CTP object instance represents a lower order ODU1 or ODU2 CTP Sink at the client layer of the ODU3P/ODU12 adaptation function or represents a lower order ODUj CTP Sink at the client layer of the ODUP/ODUj-21 adaptation function. This attribute is a 1-byte field that represents the accepted multiplex structure of the adaptation function. ";
+        }
+        description "This Pac contains the attributes associated with the CTP
+            It is present only if the CEP contains a CTP";
+    }
+    grouping odu-mep-spec {
+        container odu-mep {
+            uses odu-mep-pac;
+            description "none";
+        }
+        container odu-ncm {
+            config false;
+            uses odu-ncm-pac;
+            description "none";
+        }
+        container odu-tcm {
+            config false;
+            uses odu-tcm-mep-pac;
+            description "none";
+        }
+        container odu-defect {
+            uses odu-defect-pac;
+            description "none";
+        }
+        container odu-pm {
+            uses odu-pm-pac;
+            description "none";
+        }
+        description "none";
+    }
+    grouping odu-protection-pac {
+        leaf aps-enable {
+            type boolean;
+            default "true";
+            description "This attribute is for enabling/disabling the automatic protection switching (APS) capability at the transport adaptation function that is represented by the ODU_ConnectionTerminationPoint object class. It triggers the MI_APS_EN signal to the transport adaptation function.";
+        }
+        leaf aps-level {
+            type uint64;
+            description "This attribute is for configuring the automatic protection switching (APS) level that should operate at the transport adaptation function that is represented by the ODU_ConnectionTerminationPoint object class. It triggers the MI_APS_LVL signal to the transport adaptation function. The value 0 means path and the values 1 through 6 mean TCM level 1 through 6 respectively.";
+        }
+        description "none";
+    }
+    grouping odu-ncm-pac {
+        leaf-list tcm-fields-in-use {
+            type uint64;
+            config false;
+            description "This attribute indicates the used TCM fields of the ODU OH.";
+        }
+        description "none";
+    }
+    grouping odu-tcm-mep-pac {
+        leaf tcm-extension {
+            type tcm-extension;
+            description "none";
+        }
+        leaf tcm-mode {
+            type tcm-mode;
+            description "This attribute specifies the TCM mode at the entity. Valid values are: Operational, Monitor, and Transparent.";
+        }
+        leaf codirectional {
+            type boolean;
+            description "This attribute specifies the directionality of the ODUT MEP with respect to the associated ODU CEP. The value of TRUE means that the sink part of the ODUT MEP terminates the same signal direction as the sink part of the ODU CEP. The Source part behaves similarly. This attribute is meaningful only on objects instantiated under ODU CEP, and at least one among ODU CEP and the subordinate object is bidirectional.";
+        }
+        leaf ac-status-source {
+            type tcm-status;
+            config false;
+            description "This attribute indicates the status of the accepted TCM. ";
+        }
+        leaf ac-status-sink {
+            type tcm-status;
+            config false;
+            description "This attribute indicates the status of the accepted TCM. ";
+        }
+        leaf admin-state-source {
+            type tapi-common:administrative-state;
+            description "This attribute provides the capability to provision the LOCK signal at the source, which is one of the ODU maintenance signals.  When a Tandem Connection endpoint is set to admin state locked, it will insert the ODU-LCK signal in the source direction.";
+        }
+        leaf admin-state-sink {
+            type tapi-common:administrative-state;
+            description "This attribute provides the capability to provision the LOCK signal at the sink, which is one of the ODU maintenance signals. When a Tandem Connection endpoint is set to admin state locked, it will insert the ODU-LCK signal in the downstream direction.";
+        }
+        leaf tcm-field {
+            type uint64;
+            description "This attribute indicates the tandem connection monitoring field of the ODU OH.";
+        }
+        description "none";
+    }
+    grouping odu-mip-spec {
+        container odu-mip {
+            config false;
+            uses odu-mip-pac;
+            description "none";
+        }
+        container odu-ncm {
+            config false;
+            uses odu-ncm-pac;
+            description "none";
+        }
+        container odu-tcm {
+            config false;
+            uses odu-tcm-mip-pac;
+            description "none";
+        }
+        container odu-pm {
+            uses odu-pm-pac;
+            description "none";
+        }
+        container odu-defect {
+            uses odu-defect-pac;
+            description "none";
+        }
+        description "none";
+    }
+    grouping odu-mip-pac {
+        leaf acti {
+            type string;
+            config false;
+            description "The Trail Trace Identifier (TTI) information recovered (Accepted) from the TTI overhead position at the sink of a trail.";
+        }
+        leaf ex-dapi {
+            type string;
+            description "The Expected Destination Access Point Identifier (ExDAPI), provisioned by the managing system, to be compared with the TTI accepted at the overhead position of the sink for the purpose of checking the integrity of connectivity.";
+        }
+        leaf ex-sapi {
+            type string;
+            description "The Expected Source Access Point Identifier (ExSAPI), provisioned by the managing system, to be compared with the TTI accepted at the overhead position of the sink for the purpose of checking the integrity of connectivity.
+                ";
+        }
+        leaf tim-act-disabled {
+            type boolean;
+            default "true";
+            description "This attribute provides the control capability for the managing system to enable or disable the Consequent Action function when detecting Trace Identifier Mismatch (TIM) at the trail termination sink.";
+        }
+        leaf tim-det-mode {
+            type tim-det-mo;
+            description "This attribute indicates the mode of the Trace Identifier Mismatch (TIM) Detection function allowed values: OFF, SAPIonly, DAPIonly, SAPIandDAPI";
+        }
+        leaf deg-m {
+            type uint64;
+            description "This attribute indicates the threshold level for declaring a Degraded Signal defect (dDEG). A dDEG shall be declared if DegM consecutive bad PM Seconds are detected.";
+        }
+        container deg-thr {
+            uses deg-thr;
+            description "This attribute indicates the threshold level for declaring a performance monitoring (PM) Second to be bad. The value of the threshold can be provisioned in terms of number of errored blocks or in terms of percentage of errored blocks. For percentage-based specification, in order to support provision of less than 1%, the specification consists of two fields. The first field indicates the granularity of percentage. For examples, in 1%, in 0.1%, or in 0.01%, etc. The second field indicates the multiple of the granularity. For number of errored block based, the value is a positive integer.";
+        }
+        description "none";
+    }
+    grouping odu-tcm-mip-pac {
+        leaf tcm-field {
+            type uint64;
+            description "This attribute indicates the tandem connection monitoring field of the ODU OH.";
+        }
+        leaf codirectional {
+            type boolean;
+            description "This attribute specifies the directionality of the ODU MIP with respect to the associated ODU CEP. The value of TRUE means that the (half MIP/sink part of the) ODU MIP receives the same signal direction as the sink part of the ODU CEP. The Source part behaves similarly. This attribute is meaningful only on objects instantiated under ODU CEP, and at least one among ODU CEP and the subordinate object is bidirectional.";
+        }
+        description "none";
+    }
+    grouping odu-mep-pac {
+        leaf dm-source {
+            type boolean;
+            description "This attribute is for configuring the delay measurement process at the trail termination function represented by the subject TTP object class. It models the MI_DM_Source MI signal. If MI_DM_Source is false, then the value of the DMp bit is determined by the RI_DM. If MI_DM_Source is true, then the value of the DMp bit is set to MI_DMValue.";
+        }
+        leaf dm-value {
+            type boolean;
+            description "This attribute is for setting the DMp and DMti bits of the delay measurement process. The value of 'true' sets the DMp and DMti bits to 0 and the value of 'false' to 1.";
+        }
+        leaf txti {
+            type string;
+            description "The Trail Trace Identifier (TTI) information, provisioned by the managing system at the termination source, to be placed in the TTI overhead position of the source of a trail for transmission.
+                ";
+        }
+        uses odu-mip-pac;
+        description "none";
+    }
+    grouping odu-common-pac {
+        leaf odu-type {
+            type odu-type;
+            config false;
+            description "This attribute specifies the type of the ODU termination point.";
+        }
+        leaf odu-rate {
+            type uint64;
+            config false;
+            description "This attribute indicates the rate of the ODU termination point in Kbits/s. 
+                This attribute is Set at create; i.e., once created it cannot be changed directly. 
+                In case of resizable ODU flex, its value can be changed via HAO (not directly on the attribute). 
+                This attribute indicates the rate of the ODU termination point.
+                Valid values shall be consistent with the oduType configuration as shown in Table 7-2/G.709 v5.
+                Setting this value for fixed-rate ODUk types (e.g., ODU0), is optional.
+                The default value is derived from the configured oduType, as defined in Table 7-2/G.709 v5.
+                Setting this value for ODUCn type is optional. The default value is derived from the configured n of the ODUCn as defined in Table 7-2/G.709 v5.
+                ";
+        }
+        leaf odu-rate-tolerance {
+            type uint64;
+            config false;
+            description "This attribute indicates the rate tolerance of the ODU termination point. 
+                Valid values are real value in the unit of ppm. 
+                Standardized values are defined in Table 7-2/G.709.";
+        }
+        leaf number-of-odu-c {
+            type uint64;
+            default "1";
+            description "This attribute specifies the number of ODUC instances of the ODUCn.";
+        }
+        description "none";
+    }
+    grouping odu-pm-pac {
+        leaf n-bbe {
+            type uint64;
+            description "Near-end Background Block Error";
+        }
+        leaf f-bbe {
+            type uint64;
+            config false;
+            description "Far-end Background Block Error";
+        }
+        leaf n-ses {
+            type uint64;
+            description "Near-end Severely Errored Second";
+        }
+        leaf f-ses {
+            type uint64;
+            description "Far-end Severely Errored Second";
+        }
+        container uas {
+            uses uas-choice;
+            description "UnAvailable Second";
+        }
+        description "Instance of this object class contains the ODUP layer-specific Current Data. This object class is a subclass of the OTN_CurrentData object class.
+            PM data attributes: fBbe, fSes, nBbe, nSes. uas";
+    }
+    grouping odu-defect-pac {
+        leaf bdi {
+            type boolean;
+            config false;
+            description "Backward Defect Indication";
+        }
+        leaf deg {
+            type boolean;
+            config false;
+            description "Signal Degraded";
+        }
+        leaf lck {
+            type boolean;
+            config false;
+            description "Locked";
+        }
+        leaf oci {
+            type boolean;
+            config false;
+            description "Open Connection Indicator";
+        }
+        leaf ssf {
+            type boolean;
+            config false;
+            description "Server Signal Failure";
+        }
+        leaf tim {
+            type boolean;
+            config false;
+            description "Trail Trace Identifier Mismatch";
+        }
+        description "The valid list of defects raised on the entity. If the value of any attribute is true, then the corresponding defect is raised.";
+    }
+    grouping odu-connectivity-service-end-point-spec {
+        container odu-csep-common-pac {
+            uses odu-csep-common-pac;
+            description "none";
+        }
+        container odu-csep-ctp-pac {
+            uses odu-csep-ctp-pac;
+            description "none";
+        }
+        container odu-csep-ttp-pac {
+            uses odu-csep-ttp-pac;
+            description "none";
+        }
+        description "none";
+    }
+    grouping odu-meg-spec {
+        leaf meg-level {
+            type uint64;
+            description "none";
+        }
+        description "none";
+    }
+    grouping odu-measurement-job {
+        leaf measurement-interval {
+            type uint64;
+            default "900";
+            description "This attribute contains the discrete non overlapping periods of time (in seconds) during which measurements are performed and reports are gathered at the end of the measurement intervals.
+                Note that the value 0 means a degenerated measurement interval with a single OAM message and the report is sent as immediately as possible.";
+        }
+        leaf time-of-the-day-alignment {
+            type boolean;
+            default "true";
+            description "none";
+        }
+        description "none";
+    }
+    grouping odu-error-performance-data {
+        container near-end-odu-counters {
+            uses odu-counters;
+            description "none";
+        }
+        container far-end-odu-counters {
+            uses odu-counters;
+            description "none";
+        }
+        leaf bidirectional-uas {
+            type uint64;
+            description "none";
+        }
+        description "none";
+    }
+    grouping odu-oam-mep-service-point {
+        container odu-mep-pac {
+            uses odu-mep-pac;
+            description "none";
+        }
+        container odu-tcm-mep-pac {
+            uses odu-tcm-mep-pac;
+            description "none";
+        }
+        description "none";
+    }
+    grouping odu-oam-mip-service-point {
+        container odu-mip-pac {
+            uses odu-mip-pac;
+            description "none";
+        }
+        container odu-tcm-mip-pac {
+            uses odu-tcm-mip-pac;
+            description "none";
+        }
+        description "none";
+    }
+    grouping odu-delay-performance-data {
+        leaf delay-frame-count {
+            type uint64;
+            description "∑ number of frames between the DMValue toggle event and the received DMp signal value toggle event. This value is a snapshot value.";
+        }
+        description "none";
+    }
+    grouping odu-fec-performance-data {
+        leaf fec-corrected-errors-count {
+            type uint64;
+            description "none";
+        }
+        description "none";
+    }
+    grouping odu-csep-ttp-pac {
+        leaf configured-mapping-type {
+            type mapping-type;
+            description "This attribute indicates the configured mapping type.";
+        }
+        leaf configured-client-type {
+            type tapi-dsr:digital-signal-type;
+            description "This attribute configures the type of the client CTP of the server ODU TTP.";
+        }
+        description "none";
+    }
+    grouping odu-csep-common-pac {
+        leaf odu-type {
+            type odu-type;
+            description "This attribute specifies the type of the ODU termination point.";
+        }
+        leaf odu-rate {
+            type uint64;
+            description "This attribute indicates the rate of the ODU termination point in Kbits/s. 
+                This attribute is Set at create; i.e., once created it cannot be changed directly. 
+                In case of resizable ODU flex, its value can be changed via HAO (not directly on the attribute). 
+                This attribute indicates the rate of the ODU termination point.
+                Valid values shall be consistent with the oduType configuration as shown in Table 7-2/G.709 v5.
+                Setting this value for fixed-rate ODUk types (e.g., ODU0), is optional.
+                The default value is derived from the configured oduType, as defined in Table 7-2/G.709 v5.
+                Setting this value for ODUCn type is optional. The default value is derived from the configured n of the ODUCn as defined in Table 7-2/G.709 v5.";
+        }
+        leaf opu-tributary-slot-size {
+            type odu-slot-size;
+            description "This attribute is applicable for ODU2 and ODU3 CTP only. It indicates the slot size of the ODU CTP.";
+        }
+        leaf number-of-odu-c {
+            type uint64;
+            default "1";
+            description "This attribute specifies the number of ODUC instances of the ODUCn.";
+        }
+        description "none";
+    }
+    grouping odu-csep-ctp-pac {
+        leaf tributary-port-number {
+            type uint64;
+            description "This attribute identifies the tributary port number that is associated with the ODUk CTP. This attribute applies when the ODUk CTP is multiplexed into a server layer ODU TTP object.
+                It will not apply if this ODUk CTP object is directly mapped into an OTUk TTP object (i.e. OTUk has no tributary slots).
+                The upper bound of the integer allowed in this set is a function of the ODU server layer into which the ODUk CTP is multiplexed.
+                In case the ODU server layer is an HO-ODUk, the upper bound is the maximum number of tributary slots within the HO-ODUk (see ITU-T Recommendation G.709 (v5) clause 19.4.1).
+                Thus, for example, M=8/32/80 for ODU2/ODU3/ODU4 server layers (respectively) using 1.25G slot size.
+                In case the ODU server layer is an ODUCn, the upper bound is M=10*n (see ITU-T Recommendation G.709 (v5) Clause 20.4.1).
+                range of type : The value range depends on the size of the Tributary Port Number (TPN) field used which depends on th server-layer ODU or OTU.
+                In case of ODUk mapping into OTUk, there is no TPN field, so the tributaryPortNumber shall be zero.
+                In case of LO ODUj mapping over ODU1, ODU2 or ODU3, the TPN is encoded in a 6-bit field so the value range is 0-63. See clause 14.4.1/G.709-2016.
+                In case of LO ODUj mapping over ODU4, the TPN is encoded in a 7-bit field so the value range is 0-127. See clause 14.4.1.4/G.709-2016.
+                In case of ODUk mapping over ODUCn, the TPN is encoded in a 14-bit field so the value range is 0-16383. See clause 20.4.1.1/G.709-2016.
+                ";
+        }
+        leaf-list tributary-slot-list {
+            type uint64;
+            description "ITU-T G.875 (v5)
+                This attribute contains a set of distinct (i.e. unique) integers (e.g. 2, 3, 5, 9, 15 representing the tributary slots TS#2, TS#3, TS#5, TS#9 and TS#15) which represents the resources occupied by the ODUk CTP (e.g. an ODUflex with a bit rate of 6.25G setup over an HO-ODUk).
+                This attribute applies when the ODUk CTP is carried by a sever layer ODU TTP object. It will not apply if this ODUk CTP object is directly carried by an OTUk TTP object (i.e. OTUk has no tributary slots).
+                The upper bound of the integer allowed in this set and its relationship with the tributary slots are a function of the ODU server layer to which the ODUk CTP is carried over.
+                In case the ODU server layer is an HO-ODUk, each entry in the list is an integer value (i) representing the tributary slot name TS#i and the upper bound is the maximum number of tributary slots within the HO-ODUk (see ITU-T Recommendation G.709 (v5) clause 19).
+                Thus, for example, M=8/32/80 for ODU2/ODU3/ODU4 server layers (respectively) using 1.25G slot size.
+                In case the ODU server layer is an ODUCn, each entry in the list is an integer value (P) representing the time slot name TS#A.B (e.g. 2, 3, 5, 9, 15, 34 representing the tributary slots TS#1.2, TS#1.3, TS#1.5, TS#1.9, TS#1.15, and TS#2.14) and the upper bound is 20*n (see ITU-T Recommendation G.709 (v5) Clause 20.1).
+                The mapping between P and A & B is: A = [P/20] + 1; B = P - (P/20]*20; where the square bracket represents the whole integer. Note that the value of this attribute can be changed only in the case of ODUflex and has to be through specific operations (i.e. not be changing the attribute tributarySlotList directly).";
+        }
+        description "none";
+    }
+    grouping odu-oam-service {
+        container odu-meg-spec {
+            uses odu-meg-spec;
+            description "none";
+        }
+        description "none";
+    }
+
+    /**************************
+    * package type-definitions
+    **************************/ 
+    identity OTN_ALARM_CONDITION_NAME {
+        description "none";
+    }
+    identity OTN_ALARM_CONDITION_NAME_LOS-P {
+        base OTN_ALARM_CONDITION_NAME;
+        description "G.798: Loss of signal information from the media element.
+            Loss of optical signal.
+            ";
+    }
+    identity OTN_ALARM_CONDITION_NAME_TIM {
+        base OTN_ALARM_CONDITION_NAME;
+        description "G.798: Connectivity supervision/trail trace identifier mismatch.";
+    }
+    identity OTN_ALARM_CONDITION_NAME_BDI-P {
+        base OTN_ALARM_CONDITION_NAME;
+        description "G.798: Backward defect indication payload.";
+    }
+    identity OTN_ALARM_CONDITION_NAME_BDI-O {
+        base OTN_ALARM_CONDITION_NAME;
+        description "G.798: Backward defect indication overhead.";
+    }
+    identity OTN_ALARM_CONDITION_NAME_BDI {
+        base OTN_ALARM_CONDITION_NAME;
+        description "G.798: Backward defect indication.";
+    }
+    identity OTN_ALARM_CONDITION_NAME_OCI {
+        base OTN_ALARM_CONDITION_NAME;
+        description "G.798: Open connection indication.";
+    }
+    identity OTN_ALARM_CONDITION_NAME_SSF {
+        base OTN_ALARM_CONDITION_NAME;
+        description "Server Signal Fail.";
+    }
+    identity OTN_ALARM_CONDITION_NAME_SSF-P {
+        base OTN_ALARM_CONDITION_NAME;
+        description "Server Signal Fail Payload.";
+    }
+    identity OTN_ALARM_CONDITION_NAME_SSF-O {
+        base OTN_ALARM_CONDITION_NAME;
+        description "Server Signal Fail Overhead.";
+    }
+    identity OTN_ALARM_CONDITION_NAME_DEG {
+        base OTN_ALARM_CONDITION_NAME;
+        description "G.798, G.806: Signal degrade.";
+    }
+    identity OTN_ALARM_CONDITION_NAME_FOP-PM {
+        base OTN_ALARM_CONDITION_NAME;
+        description "G.798: ODU linear protection failure of protocol provisioning mismatch.";
+    }
+    identity OTN_ALARM_CONDITION_NAME_FOP-NR {
+        base OTN_ALARM_CONDITION_NAME;
+        description "G.798: ODU linear protection failure of protocol no response.";
+    }
+    identity OTN_ALARM_CONDITION_NAME_PLM {
+        base OTN_ALARM_CONDITION_NAME;
+        description "Payload mismatch supervision.
+            G.806: The payload label mismatch defect (dPLM) shall be detected if the 'accepted TSL' code does not match the 'expected TSL' code. If the 'accepted TSL' is 'equipped non-specific', the mismatch is not detected (TSL: Trail Signal Label).
+            Payload type supervision checks that compatible adaptation functions are used at the source and the sink.
+            This is normally done by adding a signal type identifier at the source adaptation function and comparing it with the expected identifier at the sink.
+            If they do not match, a payload mismatch is detected.
+            G.798 - dPLM at the ODUP layer: dPLM shall be declared if the accepted payload type (AcPT) is not equal to the expected payload type(s) as defined by the specific adaptation function.";
+    }
+    identity OTN_ALARM_CONDITION_NAME_CSF {
+        base OTN_ALARM_CONDITION_NAME;
+        description "G.798: Client signal fail.";
+    }
+    identity OTN_ALARM_CONDITION_NAME_MSIM {
+        base OTN_ALARM_CONDITION_NAME;
+        description "G.798: Multiplex structure identifier mismatch supervision -  tributary port #p";
+    }
+    identity OTN_ALARM_CONDITION_NAME_LOFLOM {
+        base OTN_ALARM_CONDITION_NAME;
+        description "G.798: Loss of frame and multiframe - tributary port #p";
+    }
+    identity OTN_ALARM_CONDITION_NAME_LOOMFI {
+        base OTN_ALARM_CONDITION_NAME;
+        description "G.798: OPU multiframe (OMFI) reception for OPUk with k = 4";
+    }
+    identity OTN_ALARM_CONDITION_NAME_LSS {
+        base OTN_ALARM_CONDITION_NAME;
+        description "G.798, O.151: Loss of PRBS lock.";
+    }
+    identity OTN_ALARM_CONDITION_NAME_LCS {
+        base OTN_ALARM_CONDITION_NAME;
+        description "G.798, IEEE 802.3, G.709: Loss of character synchronization.";
+    }
+    identity OTN_ALARM_CONDITION_NAME_LFD {
+        base OTN_ALARM_CONDITION_NAME;
+        description "GFP loss of frame delineation.
+            G.806 - Server layer-specific GFP sink processes: GFP loss of frame delineation (dLFD) is raised when the frame delineation process (clause 6.3.1 of [ITU-T G.7041]) is not in the 'SYNC' state.
+            dLFD is cleared when the frame delineation process is in the 'SYNC' state.";
+    }
+    identity OTN_ALARM_CONDITION_NAME_UPM {
+        base OTN_ALARM_CONDITION_NAME;
+        description "GFP user payload mismatch.
+            G.806 - Client-specific GFP-F (Frame) and GFP-T (Transparent) sink processes: GFP user payload mismatch (dUPM) is raised when the accepted UPI (AcUPI) is different from the expected UPI.
+            dUPM is cleared when AcUPI matches the expected UPI or GFP_SF is active.";
+    }
+    identity OTN_ALARM_CONDITION_NAME_EXM {
+        base OTN_ALARM_CONDITION_NAME;
+        description "GFP extension header mismatch.
+            G.806 - Common GFP sink processes: GFP extension header mismatch (dEXM) is raised when the accepted EXI (AcEXI) is different from the expected EXI.
+            dEXM is cleared when AcEXI matches the expected EXI or GFP_SF is active.";
+    }
+    identity OTN_ALARM_CONDITION_NAME_LOF {
+        base OTN_ALARM_CONDITION_NAME;
+        description "G.798, G.783: Loss Of Frame.";
+    }
+    identity OTN_ALARM_CONDITION_NAME_RCOHM {
+        base OTN_ALARM_CONDITION_NAME;
+        description "G.798: Resize Control Overhead Mismatch.";
+    }
+    identity OTN_ALARM_CONDITION_NAME_GIDM {
+        base OTN_ALARM_CONDITION_NAME;
+        description "G.798: Group ID Mismatch.";
+    }
+    identity OTN_ALARM_CONDITION_NAME_FMM {
+        base OTN_ALARM_CONDITION_NAME;
+        description "G.798: FlexO/FlexE Map Mismatch.";
+    }
+    identity OTN_ALARM_CONDITION_NAME_LOL {
+        base OTN_ALARM_CONDITION_NAME;
+        description "G.798: Loss of lane alignment.";
+    }
+    identity OTN_ALARM_CONDITION_NAME_CSACM {
+        base OTN_ALARM_CONDITION_NAME;
+        description "G.798: Calendar Slot Availability Count Mismatch.";
+    }
+    identity OTN_ALARM_CONDITION_NAME_LOM {
+        base OTN_ALARM_CONDITION_NAME;
+        description "G.798: Loss of multiframe.
+            Loss of the interleaved FlexESG multi-frame.";
+    }
+    identity OTN_ALARM_CONDITION_NAME_LRC {
+        base OTN_ALARM_CONDITION_NAME;
+        description "G.798: Loss of Rate Compensation blocks.";
+    }
+    identity OTN_ALARM_CONDITION_NAME_LTC {
+        base OTN_ALARM_CONDITION_NAME;
+        description "G.798: Loss of tandem connection.";
+    }
+    identity OTN_ALARM_CONDITION_NAME_RDI {
+        base OTN_ALARM_CONDITION_NAME;
+        description "G.798: Remote Defect Indication.";
+    }
+    identity OTN_ALARM_CONDITION_NAME_LCK {
+        base OTN_ALARM_CONDITION_NAME;
+        description "G.798: Locked.";
+    }
+    identity OTN_ALARM_CONDITION_NAME_LOS-O {
+        base OTN_ALARM_CONDITION_NAME;
+        description "G.798: Loss of signal overhead.";
+    }
+    identity OTN_ALARM_CONDITION_NAME_LOA {
+        base OTN_ALARM_CONDITION_NAME;
+        description "G.798: Loss of alignment.";
+    }
+    identity OTN_ALARM_CONDITION_NAME_LFA {
+        base OTN_ALARM_CONDITION_NAME;
+        description "G.798: Loss of FEC word alignment.";
+    }
+    identity OTN_ALARM_CONDITION_NAME_LOS {
+        base OTN_ALARM_CONDITION_NAME;
+        description "G.783: Loss Of Signal.";
+    }
+    identity ODU_TYPE {
+        base tapi-common:LAYER_PROTOCOL_QUALIFIER;
+        description "none";
+    }
+    identity ODU_TYPE_ODU0 {
+        base ODU_TYPE;
+        description "none";
+    }
+    identity ODU_TYPE_ODU1 {
+        base ODU_TYPE;
+        description "none";
+    }
+    identity ODU_TYPE_ODU2 {
+        base ODU_TYPE;
+        description "none";
+    }
+    identity ODU_TYPE_ODU2E {
+        base ODU_TYPE;
+        description "none";
+    }
+    identity ODU_TYPE_ODU3 {
+        base ODU_TYPE;
+        description "none";
+    }
+    identity ODU_TYPE_ODU4 {
+        base ODU_TYPE;
+        description "none";
+    }
+    identity ODU_TYPE_ODU_FLEX {
+        base ODU_TYPE;
+        description "none";
+    }
+    identity ODU_TYPE_ODU_CN {
+        base ODU_TYPE;
+        description "none";
+    }
+    identity OTN_FAULT_CONDITION_DETERMINATION {
+    	base tapi-connectivity:FAULT_CONDITION_DETERMINATION;
+        description "none";
+    }
+    identity OTN_FAULT_CONDITION_DETERMINATION_NON_INTRUSIVE_CLIENT {
+        base OTN_FAULT_CONDITION_DETERMINATION;
+        description "Non-intrusive monitoring of Client signal fail";
+    }
+    identity OTN_FAULT_CONDITION_DETERMINATION_NON_INTRUSIVE_E2E {
+        base OTN_FAULT_CONDITION_DETERMINATION;
+        description "Non-intrusive end-to-end monitoring";
+    }
+    identity OTN_FAULT_CONDITION_DETERMINATION_NON_INTRUSIVE_SUBLAYER {
+        base OTN_FAULT_CONDITION_DETERMINATION;
+        description "Non-intrusive Sublayer monitoring";
+    }
+    identity ODU_OAM_JOB_TYPE {
+        description "none";
+    }
+    identity ODU_OAM_JOB_TYPE_DELAY {
+        base ODU_OAM_JOB_TYPE;
+        description "none";
+    }
+    identity ODU_OAM_JOB_TYPE_TCM {
+        base ODU_OAM_JOB_TYPE;
+        description "none";
+    }
+    identity ODU_OAM_JOB_TYPE_NCM {
+        base ODU_OAM_JOB_TYPE;
+        description "none";
+    }
+    typedef otn-alarm-condition-name {
+        type identityref {
+            base OTN_ALARM_CONDITION_NAME;
+        }
+        description "none";
+    }
+    typedef odu-type {
+        type identityref {
+            base ODU_TYPE;
+        }
+        description "none";
+    }
+    typedef mapping-type {
+        type enumeration {
+            enum AMP {
+                description "none";
+            }
+            enum BMP {
+                description "none";
+            }
+            enum GFP-F {
+                description "none";
+            }
+            enum GMP {
+                description "none";
+            }
+            enum TTP_GFP_BMP {
+                description "none";
+            }
+            enum NULL {
+                description "none";
+            }
+        }
+        description "none";
+    }
+    typedef tim-det-mo {
+        type enumeration {
+            enum DAPI {
+                description "none";
+            }
+            enum SAPI {
+                description "none";
+            }
+            enum BOTH {
+                description "none";
+            }
+            enum OFF {
+                description "none";
+            }
+        }
+        description "List of modes for trace identifier mismatch detection.";
+    }
+    typedef odu-slot-size {
+        type enumeration {
+            enum 1G25 {
+                description "none";
+            }
+            enum 2G5 {
+                description "none";
+            }
+        }
+        description "none";
+    }
+    grouping odu-payload-type {
+        leaf named-payload-type {
+            type odu-named-payload-type;
+            description "none";
+        }
+        leaf hex-payload-type {
+            type uint64;
+            description "none";
+        }
+        description "none";
+    }
+    typedef odu-named-payload-type {
+        type enumeration {
+            enum UNKNOWN {
+                description "none";
+            }
+            enum UNINTERPRETABLE {
+                description "none";
+            }
+        }
+        description "none";
+    }
+    grouping deg-thr {
+        leaf deg-thr-value {
+            type uint64;
+            description "Percentage of detected errored blocks";
+        }
+        leaf deg-thr-type {
+            type deg-thr-type;
+            description "Number of errored blocks";
+        }
+        leaf percentage-granularity {
+            type percentage-granularity;
+            description "none";
+        }
+        description "Degraded Threshold, specify either the percentage or the number of Errored Blocks in the defined interval. 
+            degThrValue when type is PERCENTAGE:
+            percentageGranularity is used to indicate the number of decimal points
+            So if percentageGranularity is ones, a value of 1 in degThrValue would indicate 1%, a value of 10 = 10%, a value of 100 = 100%
+            So if percentageGranularity is thousandths a value of 1 in degThrValue would indicate 0.001%, a value of 1000 = 1%, a value of 1000000 = 100%
+            degThrValue when type is NUMBER_ERROR_BLOCKS:
+            Number of Errored Blocks is captured in an integer value.";
+    }
+    typedef deg-thr-type {
+        type enumeration {
+            enum PERCENTAGE {
+                description "Choice of % or Number of errored blocks";
+            }
+            enum NUMBER_ERRORED_BLOCKS {
+                description "Number of % or blocks";
+            }
+        }
+        description "The value of the threshold can be provisioned in terms of number of errored blocks or in terms of percentage of errored blocks. For percentage-based specification, in order to support provision of less than 1%, the specification consists of two fields. The first field indicates the granularity of percentage. For examples, in 1%, in 0.1%, or in 0.01%, etc. The second field indicates the multiple of the granularity. For number of errored block based, the value is a positive integer.";
+    }
+    typedef tcm-status {
+        type enumeration {
+            enum NO_SOURCE_TC {
+                description "TCM byte 3 (bits 6 7 8) -- 0 0 0, No source Tandem Connection";
+            }
+            enum IN_USE_WITHOUT_IAE {
+                description "TCM byte 3 (bits 6 7 8) -- 0 0 1,  In use without IAE (Incoming Alignment Error)";
+            }
+            enum IN_USE_WITH_IAE {
+                description "TCM byte 3 (bits 6 7 8) -- 0 1 0, In use with IAE (Incoming Alignment Error)";
+            }
+            enum RESERVED_1 {
+                description "TCM byte 3 (bits 6 7 8) -- 0 1 1, Reserved for future international standardization";
+            }
+            enum RESERVED_2 {
+                description "TCM byte 3 (bits 6 7 8) -- 1 0 0, Reserved for future international standardization";
+            }
+            enum LCK {
+                description "TCM byte 3 (bits 6 7 8) -- 1 0 1, Maintenance signal: ODU-LCK";
+            }
+            enum OCI {
+                description "TCM byte 3 (bits 6 7 8) -- 1 1 0, Maintenance signal: ODU-OCI";
+            }
+            enum AIS {
+                description "TCM byte 3 (bits 6 7 8) -- 1 1 1, Maintenance signal: ODU-AIS";
+            }
+        }
+        description "See Table 15-5/G.709/Y.1331 ";
+    }
+    typedef tcm-mode {
+        type enumeration {
+            enum OPERATIONAL {
+                description "none";
+            }
+            enum TRANSPARENT {
+                description "none";
+            }
+            enum MONITOR {
+                description "none";
+            }
+        }
+        description "List of value modes for the sink side of the tandem connection monitoring function.";
+    }
+    typedef tcm-monitoring {
+        type enumeration {
+            enum INTRUSIVE {
+                description "none";
+            }
+            enum NON-INTRUSIVE {
+                description "none";
+            }
+        }
+        description "Monitoring types for the tandem connection monitoring function.";
+    }
+    typedef tcm-extension {
+        type enumeration {
+            enum NORMAL {
+                description "none";
+            }
+            enum PASS-THROUGH {
+                description "none";
+            }
+            enum ERASE {
+                description "none";
+            }
+        }
+        description "none";
+    }
+    typedef percentage-granularity {
+        type enumeration {
+            enum ONES {
+                description "none";
+            }
+            enum ONE_TENTHS {
+                description "value * (1/10)";
+            }
+            enum ONE_HUNDREDTHS {
+                description "value * (1/100)";
+            }
+            enum ONE_THOUSANDTHS {
+                description "value * (1/1000)";
+            }
+        }
+        description "none";
+    }
+    grouping uas-choice {
+        leaf bidirectional {
+            type boolean;
+            default "true";
+            description "none";
+        }
+        leaf uas {
+            type uint64;
+            description "none";
+        }
+        leaf nuas {
+            type uint64;
+            description "none";
+        }
+        leaf fuas {
+            type uint64;
+            description "none";
+        }
+        description "If bidirectional is TRUE then use the uas attribute, if bidirectional is FALSE use the nuas, and fuas attributes";
+    }
+    typedef otn-fault-condition-determination {
+        type identityref {
+            base OTN_FAULT_CONDITION_DETERMINATION;
+        }
+        description "ITU-T-REC-G.873.1-201710
+            Optical transport network: Linear protection";
+    }
+    typedef odu-oam-job-type {
+        type identityref {
+            base ODU_OAM_JOB_TYPE;
+        }
+        description "none";
+    }
+    grouping odu-counters {
+        leaf bbe {
+            type uint64;
+            description "none";
+        }
+        leaf ses {
+            type uint64;
+            description "none";
+        }
+        leaf uas {
+            type uint64;
+            description "none";
+        }
+        description "none";
+    }
+    grouping fec-properties {
+        leaf pre-fec-ber {
+            type uint64;
+            description "counter: bit error rate before correction by FEC";
+        }
+        leaf post-fec-ber {
+            type uint64;
+            description "counter: bit error rate after correction by FEC";
+        }
+        leaf corrected-bytes {
+            type uint64;
+            description "Bytes corrected between those that were received corrupted";
+        }
+        leaf corrected-bits {
+            type uint64;
+            description "Bits corrected between those that were received corrupted";
+        }
+        leaf uncorrectable-bytes {
+            type uint64;
+            description "Bytes that could not be corrected by FEC";
+        }
+        leaf uncorrectable-bits {
+            type uint64;
+            description "Bits that could not be corrected by FEC";
+        }
+        description "none";
+    }
+
+}
diff --git a/models/tapi/tapi-path-computation@2019-03-31.yang b/models/tapi/tapi-path-computation@2019-03-31.yang
new file mode 100644
index 0000000000000000000000000000000000000000..c855e71b95e1c1c52f300a8c54aa06792570e157
--- /dev/null
+++ b/models/tapi/tapi-path-computation@2019-03-31.yang
@@ -0,0 +1,570 @@
+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
+        - 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.";
+    revision 2019-03-31 {
+        description "ONF Transport API version 2.2-RC1.
+                   Changes included in this TAPI release (v2.2) are listed in
+                  <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.2.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.2.0/UML>";
+    }
+    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.1/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 path-computation-context {
+            uses path-computation-context;
+            description "Augments the base TAPI Context with PathComputationService information";
+        }
+        description "Augments the base TAPI Context with PathComputationService information";
+    }
+    /**************************
+    * definitions of references
+    **************************/
+    grouping path-ref {
+        leaf path-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-path-computation:path-computation-context/tapi-path-computation:path/tapi-path-computation:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+    
+    /**************************
+    * package object-classes
+    **************************/ 
+    grouping path {
+        list link {
+            uses tapi-topology:link-ref;
+            key 'topology-uuid link-uuid';
+            config false;
+            min-elements 1;
+            description "none";
+        }
+        container routing-constraint {
+            config false;
+            uses routing-constraint;
+            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:global-class;
+        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 {
+        container service-interface-point {
+            uses tapi-common:service-interface-point-ref;
+            description "none";
+        }
+        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 capacity {
+            uses tapi-common:capacity;
+            description "none";
+        }
+        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 direction {
+            type tapi-common:port-direction;
+            description "The orientation of defined flow at the EndPoint.";
+        }
+        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 {
+        list path {
+            uses path-ref;
+            key 'path-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";
+        }
+        list topology-constraint {
+            key 'local-id';
+            uses topology-constraint;
+            description "none";
+        }
+        container objective-function {
+            uses path-objective-function;
+            description "none";
+        }
+        container optimization-constraint {
+            uses path-optimization-constraint;
+            description "none";
+        }
+        leaf direction {
+            type tapi-common:forwarding-direction;
+            description "none";
+        }
+        leaf layer-protocol-name {
+            type tapi-common:layer-protocol-name;
+            description "none";
+        }
+        uses tapi-common:global-class;
+        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 {
+        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.";
+        }
+        list risk-diversity-characteristic {
+            key 'risk-characteristic-name';
+            uses tapi-topology:risk-characteristic;
+            description "none";
+        }
+        leaf diversity-policy {
+            type diversity-policy;
+            description "none";
+        }
+        leaf route-objective-function {
+            type route-objective-function;
+            description "none";
+        }
+        leaf is-exclusive {
+            type boolean;
+            default "true";
+            description "To distinguish if the resources are to be exclusive to the service";
+        }
+        leaf tolerable-impact {
+            type grades-of-impact;
+            description "Grades of maximum tolerable disruption to traffic.";
+        }
+        container max-allowed-cost {
+            uses value-or-priority;
+            description "none";
+        }
+        container max-allowed-hops {
+            uses value-or-priority;
+            description "none";
+        }
+        container max-allowed-delay {
+            uses value-or-priority;
+            description "Delay unit is microseconds.";
+        }
+        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";
+    }
+    grouping topology-constraint {
+        leaf include-topology {
+            type tapi-common:uuid;
+            description "none";
+        }
+        leaf avoid-topology {
+            type tapi-common:uuid;
+            description "none";
+        }
+        leaf include-path {
+            type tapi-common:uuid;
+            description "none";
+        }
+        leaf exclude-path {
+            type tapi-common:uuid;
+            description "none";
+        }
+        leaf include-link {
+            type tapi-common:uuid;
+            description "This is a loose constraint - that is it is unordered and could be a partial list ";
+        }
+        leaf exclude-link {
+            type tapi-common:uuid;
+            description "none";
+        }
+        leaf include-node {
+            type tapi-common:uuid;
+            description "This is a loose constraint - that is it is unordered and could be a partial list";
+        }
+        leaf exclude-node {
+            type tapi-common:uuid;
+            description "none";
+        }
+        leaf include-node-edge-point {
+            type tapi-common:uuid;
+            description "none";
+        }
+        leaf exclude-node-edge-point {
+            type tapi-common:uuid;
+            description "none";
+        }
+        leaf preferred-transport-layer {
+            type tapi-common:layer-protocol-name;
+            description "soft constraint requested by client to indicate the layer(s) of transport connection that it prefers to carry the service. This could be same as the service layer or one of the supported server layers";
+        }
+        leaf constraint-weight {
+            type uint64;
+            description "Zero and positive values: zero means 'strongly required to be included', +1 means 'less strongly required to be included', etc.
+                For example the work/intended route will be calculated considering the topologies which weights are lowest (but not negative).
+                Negative values: -1 means 'strongly required to be excluded', -2 means 'less strongly required to be excluded', etc.";
+        }
+        uses tapi-common:local-class;
+        description "The TopologyConstraint allows to specify topology entities in order to impose specific constraints (as denoted by the attribute name) on Connectivity/Path.
+            The  topology entities are specified by their instance uuid rather than using references/path (to allow for mapping to Yang 1.0).
+            This loose typing and reference necessitates that implementations validate not only the presence of the instance, but also that it is of the correct type as implied by the attribute name.
+            If this validation fails, then the implementation is expceted to return an error.
+            ";
+    }
+
+    /**************************
+    * package type-definitions
+    **************************/ 
+    identity GRADES_OF_IMPACT {
+        description "none";
+    }
+    identity GRADES_OF_IMPACT_HITLESS {
+        base GRADES_OF_IMPACT;
+        description "none";
+    }
+    identity GRADES_OF_IMPACT_MINOR_IMPACT {
+        base GRADES_OF_IMPACT;
+        description "less or equal to 50ms";
+    }
+    identity GRADES_OF_IMPACT_MAJOR_IMPACT {
+        base GRADES_OF_IMPACT;
+        description "Order of magnitude: several seconds to minutes.";
+    }
+    identity GRADES_OF_IMPACT_LONG_IMPACT {
+        base GRADES_OF_IMPACT;
+        description "Order of magnitude: several minutes to hours.";
+    }
+    identity PATH_COMPUTATION_OBJECT_TYPE {
+    	base tapi-common:OBJECT_TYPE;
+        description "none";
+    }
+    identity PATH_COMPUTATION_OBJECT_TYPE_PATH_COMPUTATION_SERVICE {
+        base PATH_COMPUTATION_OBJECT_TYPE;
+        description "none";
+    }
+    identity PATH_COMPUTATION_OBJECT_TYPE_PATH_COMPUTATION_SERVICE_END_POINT {
+        base PATH_COMPUTATION_OBJECT_TYPE;
+        description "none";
+    }
+    identity PATH_COMPUTATION_OBJECT_TYPE_PATH {
+        base PATH_COMPUTATION_OBJECT_TYPE;
+        description "none";
+    }
+    typedef route-objective-function {
+        type enumeration {
+            enum MIN_WORK_ROUTE_HOP {
+                description "none";
+            }
+            enum MIN_WORK_ROUTE_COST {
+                description "none";
+            }
+            enum MIN_WORK_ROUTE_LATENCY {
+                description "none";
+            }
+            enum MIN_SUM_OF_WORK_AND_PROTECTION_ROUTE_HOP {
+                description "none";
+            }
+            enum MIN_SUM_OF_WORK_AND_PROTECTION_ROUTE_COST {
+                description "none";
+            }
+            enum MIN_SUM_OF_WORK_AND_PROTECTION_ROUTE_LATENCY {
+                description "none";
+            }
+            enum LOAD_BALANCE_MAX_UNUSED_CAPACITY {
+                description "none";
+            }
+        }
+        description "none";
+    }
+    typedef diversity-policy {
+        type enumeration {
+            enum SRLG {
+                description "none";
+            }
+            enum SRNG {
+                description "none";
+            }
+            enum SNG {
+                description "none";
+            }
+            enum NODE {
+                description "none";
+            }
+            enum LINK {
+                description "none";
+            }
+        }
+        description "none";
+    }
+    typedef grades-of-impact {
+        type identityref {
+            base GRADES_OF_IMPACT;
+        }
+        description "none";
+    }
+    typedef path-computation-object-type {
+        type identityref {
+            base PATH_COMPUTATION_OBJECT_TYPE;
+        }
+        description "The list of TAPI Path Computation Object types/classes.";
+    }
+    grouping value-or-priority {
+        leaf value {
+            type uint64;
+            description "none";
+        }
+        leaf priority {
+            type uint64;
+            description "none";
+        }
+        description "Quantitative target: when a value is specified it is intended as mandatory for fulfilment. If value is specified, priority is not considered.
+            Qualitative target: when priority is specified. Zero means 'unspecified', 1 is highest priority, then 2 has lower priority than 1, 3 has lower priority than 2, etc.";
+    }
+
+    /**************************
+    * package interfaces
+    **************************/ 
+    rpc compute-p-2-p-path {
+        description "none";
+        input {
+            leaf uuid {
+                type tapi-common:uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+            list name {
+                key 'value-name';
+                uses tapi-common:name-and-value;
+                description "List of names. This value is unique in some namespace but may change during the life of the entity.
+                    A name carries no semantics with respect to the purpose of the entity.";
+            }
+            container routing-constraint {
+                uses routing-constraint;
+                description "none";
+            }
+            container topology-constraint {
+                uses topology-constraint;
+                description "none";
+            }
+            container objective-function {
+                uses path-objective-function;
+                description "none";
+            }
+            list end-point {
+                key 'local-id';
+                min-elements 2;
+                max-elements 2;
+                uses path-service-end-point;
+                description "none";
+            }
+        }
+        output {
+            container service {
+                uses path-computation-service;
+                description "none";
+            }
+        }
+    }
+    rpc optimize-p-2-p-path {
+        description "none";
+        input {
+            leaf uuid {
+                type tapi-common:uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+            list name {
+                key 'value-name';
+                uses tapi-common:name-and-value;
+                description "List of names. This value is unique in some namespace but may change during the life of the entity.
+                    A name carries no semantics with respect to the purpose of the entity.";
+            }
+            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 uuid {
+                type tapi-common:uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+        }
+        output {
+            container service {
+                uses path-computation-service;
+                description "none";
+            }
+        }
+    }
+
+}
diff --git a/models/tapi/tapi-photonic-media@2019-03-31.yang b/models/tapi/tapi-photonic-media@2019-03-31.yang
new file mode 100644
index 0000000000000000000000000000000000000000..bb49c4a566361c94b3fe481ce812f4d99bb1fa12
--- /dev/null
+++ b/models/tapi/tapi-photonic-media@2019-03-31.yang
@@ -0,0 +1,989 @@
+module tapi-photonic-media {
+    namespace "urn:onf:otcc:yang:tapi-photonic-media";
+    prefix tapi-photonic-media;
+    import tapi-common {
+        prefix tapi-common;
+    }
+    import tapi-connectivity {
+        prefix tapi-connectivity;
+    }
+    import tapi-topology {
+        prefix tapi-topology;
+    }
+    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 PhotonicMedia Model definitions.
+        Source: TapiPhotonicMedia.uml
+        Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved.
+        License: This module is distributed under the Apache License 2.0
+        - 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.";
+    revision 2019-03-31 {
+        description "ONF Transport API version 2.2-RC1.
+                   Changes included in this TAPI release (v2.2) are listed in
+                  <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.2.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.2.0/UML>";
+    }
+    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.1/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/tapi-topology:topology-context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point/tapi-connectivity:cep-list/tapi-connectivity:connection-end-point" {
+        container otsi-connection-end-point-spec {
+            uses otsi-connection-end-point-spec;
+            description "Augments the base LayerProtocol information in ConnectionEndPoint with OCH-specific information";
+        }
+        description "Augments the base LayerProtocol information in ConnectionEndPoint with OCH-specific information";
+    }
+    augment "/tapi-common:context/tapi-topology:topology-context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point" {
+        container media-channel-node-edge-point-spec {
+            uses media-channel-node-edge-point-spec;
+            description "Augments the base LayerProtocol information in NodeEdgePoint with OCH-specific information";
+        }
+        description "Augments the base LayerProtocol information in NodeEdgePoint with OCH-specific information";
+    }
+    augment "/tapi-common:context/tapi-topology:topology-context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point/tapi-connectivity:cep-list/tapi-connectivity:connection-end-point" {
+        container otsi-assembly-connection-end-point-spec {
+            uses otsi-assembly-connection-end-point-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-common:service-interface-point" {
+        container otsi-service-interface-point-spec {
+            uses otsi-service-interface-point-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-connectivity:connectivity-context/tapi-connectivity:connectivity-service/tapi-connectivity:end-point" {
+        container otsi-connectivity-service-end-point-spec {
+            uses otsi-connectivity-service-end-point-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-common:service-interface-point" {
+        container media-channel-service-interface-point-spec {
+            uses media-channel-service-interface-point-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-connectivity:connectivity-context/tapi-connectivity:connectivity-service/tapi-connectivity:end-point" {
+        container media-channel-connectivity-service-end-point-spec {
+            uses media-channel-connectivity-service-end-point-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-topology:topology-context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point/tapi-connectivity:cep-list/tapi-connectivity:connection-end-point" {
+        container media-channel-connection-end-point-spec {
+            uses media-channel-connection-end-point-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-connectivity:create-connectivity-service/tapi-connectivity:input/tapi-connectivity:end-point" {
+        container media-channel-connectivity-service-end-point-spec {
+            uses media-channel-connectivity-service-end-point-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-connectivity:get-connectivity-service-details/tapi-connectivity:output/tapi-connectivity:service/tapi-connectivity:end-point" {
+        container media-channel-connectivity-service-end-point-spec {
+            uses media-channel-connectivity-service-end-point-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-connectivity:get-connectivity-service-list/tapi-connectivity:output/tapi-connectivity:service/tapi-connectivity:end-point" {
+        container media-channel-connectivity-service-end-point-spec {
+            uses media-channel-connectivity-service-end-point-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-connectivity:update-connectivity-service/tapi-connectivity:input/tapi-connectivity:end-point" {
+        container media-channel-connectivity-service-end-point-spec {
+            uses media-channel-connectivity-service-end-point-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-connectivity:update-connectivity-service/tapi-connectivity:output/tapi-connectivity:service/tapi-connectivity:end-point" {
+        container media-channel-connectivity-service-end-point-spec {
+            uses media-channel-connectivity-service-end-point-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-connectivity:create-connectivity-service/tapi-connectivity:output/tapi-connectivity:service/tapi-connectivity:end-point" {
+        container media-channel-connectivity-service-end-point-spec {
+            uses media-channel-connectivity-service-end-point-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-topology:get-node-edge-point-details/tapi-topology:output/tapi-topology:node-edge-point" {
+        container media-channel-node-edge-point-spec {
+            uses media-channel-node-edge-point-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:get-service-interface-point-details/tapi-common:output/tapi-common:sip" {
+        container media-channel-service-interface-point-spec {
+            uses media-channel-service-interface-point-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:get-service-interface-point-list/tapi-common:output/tapi-common:sip" {
+        container media-channel-service-interface-point-spec {
+            uses media-channel-service-interface-point-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-connectivity:create-connectivity-service/tapi-connectivity:input/tapi-connectivity:end-point" {
+        container otsi-connectivity-service-end-point-spec {
+            uses otsi-connectivity-service-end-point-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-connectivity:create-connectivity-service/tapi-connectivity:output/tapi-connectivity:service/tapi-connectivity:end-point" {
+        container otsi-connectivity-service-end-point-spec {
+            uses otsi-connectivity-service-end-point-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-connectivity:get-connectivity-service-details/tapi-connectivity:output/tapi-connectivity:service/tapi-connectivity:end-point" {
+        container otsi-connectivity-service-end-point-spec {
+            uses otsi-connectivity-service-end-point-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-connectivity:get-connectivity-service-list/tapi-connectivity:output/tapi-connectivity:service/tapi-connectivity:end-point" {
+        container otsi-connectivity-service-end-point-spec {
+            uses otsi-connectivity-service-end-point-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-connectivity:update-connectivity-service/tapi-connectivity:input/tapi-connectivity:end-point" {
+        container otsi-connectivity-service-end-point-spec {
+            uses otsi-connectivity-service-end-point-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-connectivity:update-connectivity-service/tapi-connectivity:output/tapi-connectivity:service/tapi-connectivity:end-point" {
+        container otsi-connectivity-service-end-point-spec {
+            uses otsi-connectivity-service-end-point-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:get-service-interface-point-details/tapi-common:output/tapi-common:sip" {
+        container otsi-service-interface-point-spec {
+            uses otsi-service-interface-point-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:get-service-interface-point-list/tapi-common:output/tapi-common:sip" {
+        container otsi-service-interface-point-spec {
+            uses otsi-service-interface-point-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-connectivity:get-connection-end-point-details/tapi-connectivity:output/tapi-connectivity:connection-end-point" {
+        container media-channel-connection-end-point-spec {
+            uses media-channel-connection-end-point-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-connectivity:get-connection-end-point-details/tapi-connectivity:output/tapi-connectivity:connection-end-point" {
+        container otsi-assembly-connection-end-point-spec {
+            uses otsi-assembly-connection-end-point-spec;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-connectivity:get-connection-end-point-details/tapi-connectivity:output/tapi-connectivity:connection-end-point" {
+        container otsi-connection-end-point-spec {
+            uses otsi-connection-end-point-spec;
+            description "none";
+        }
+        description "none";
+    }
+    /**************************
+    * package object-classes
+    **************************/ 
+    grouping otsi-server-adaptation-pac {
+        leaf number-of-otsi {
+            type uint64;
+            config false;
+            description "none";
+        }
+        container fec-parameters {
+            config false;
+            uses fec-properties;
+            description "none";
+        }
+        description "none";
+    }
+    grouping otsi-connection-end-point-spec {
+        container otsi-termination {
+            config false;
+            uses otsi-termination-pac;
+            description "none";
+        }
+        description "none";
+    }
+    grouping otsi-termination-pac {
+        container selected-central-frequency {
+            config false;
+            uses central-frequency;
+            description "none";
+        }
+        container selected-application-identifier {
+            config false;
+            uses application-identifier;
+            description "This attribute indicates the selected Application Identifier that is used by the OCh trail termination function. The syntax of ApplicationIdentifier is a pair {ApplicationIdentifierType, PrintableString}. The value of ApplicationIdentifierType is either STANDARD or PROPRIETARY. The value of PrintableString represents the standard application code as defined in the ITU-T Recommendations or a vendor-specific proprietary code. If the ApplicationIdentifierType is STANDARD the value of PrintableString represents a standard application code as defined in the ITU-T Recommendations. If the ApplicationIdentifierType is PROPRIETARY, the first six characters of the PrintableString must contain the Hexadecimal representation of an OUI assigned to the vendor whose implementation generated the Application Identifier; the remaining octets of the PrintableString are unspecified. The value of this attribute of an object instance has to be one of the values identified in the attribute SupportableApplicationIdentifierList of the same object instance. The values and value ranges of the optical interface parameters of a standard application code must be consistent with those values specified in the ITU-T Recommendation for that application code.";
+        }
+        leaf selected-modulation {
+            type modulation-technique;
+            default "UNDEFINED";
+            config false;
+            description "This parameter defines the modulation used at the source";
+        }
+        container selected-spectrum {
+            config false;
+            uses spectrum-band;
+            description "none";
+        }
+        container transmited-power {
+            config false;
+            uses power-properties;
+            description "Measured power at the Transmitter.";
+        }
+        container received-power {
+            uses power-properties;
+            description "none";
+        }
+        container laser-properties {
+            config false;
+            uses laser-properties;
+            description "Laser properties.";
+        }
+        description "Provides status information only.";
+    }
+    grouping media-channel-pool-capability-pac {
+        list supportable-spectrum {
+            key 'upper-frequency lower-frequency';
+            config false;
+            uses spectrum-band;
+            description "none";
+        }
+        list available-spectrum {
+            key 'upper-frequency lower-frequency';
+            config false;
+            uses spectrum-band;
+            description "none";
+        }
+        list occupied-spectrum {
+            key 'upper-frequency lower-frequency';
+            config false;
+            uses spectrum-band;
+            description "none";
+        }
+        description "none";
+    }
+    grouping media-channel-node-edge-point-spec {
+        container mc-pool {
+            config false;
+            uses media-channel-pool-capability-pac;
+            description "none";
+        }
+        description "none";
+    }
+    grouping otsi-routing-spec {
+        leaf optical-routing-strategy {
+            type optical-routing-strategy;
+            description "none";
+        }
+        description "none";
+    }
+    grouping media-channel-properties-pac {
+        container occupied-spectrum {
+            config false;
+            uses spectrum-band;
+            description "none";
+        }
+        container measured-power-ingress {
+            config false;
+            uses power-properties;
+            description "none";
+        }
+        container measured-power-egress {
+            uses power-properties;
+            description "none";
+        }
+        description "none";
+    }
+    grouping otsi-assembly-connection-end-point-spec {
+        container otsi-adapter {
+            config false;
+            uses otsi-server-adaptation-pac;
+            description "none";
+        }
+        description "none";
+    }
+    grouping otsi-capability-pac {
+        list supportable-central-frequency-spectrum-band {
+            key 'lower-central-frequency upper-central-frequency';
+            config false;
+            uses central-frequency-band;
+            description "Each spectrum band supported for otsi trasmitter to be tuned on, is specified
+                as per it's lower and upper central frequencies supported and its frequency constraints,
+                consisting in the frequency Grid and the AdjustmentGranularity, used to uniquely identify all
+                central frequencies supported within the band.";
+        }
+        list supportable-application-identifier {
+            key 'application-code';
+            config false;
+            uses application-identifier;
+            description "The list of supportable ApplicationIdentifiers.";
+        }
+        leaf-list supportable-modulation {
+            type modulation-technique;
+            config false;
+            description "This parameter defines the modulation used at the source";
+        }
+        container total-power-warn-threshold {
+            config false;
+            uses total-power-threshold-pac;
+            description "none";
+        }
+        description "Can read the status of the warning for the upper value that the power can reach.";
+    }
+    grouping otsi-service-interface-point-spec {
+        container otsi-capability {
+            config false;
+            uses otsi-capability-pac;
+            description "none";
+        }
+        container power-management-capability {
+            uses power-management-capability-pac;
+            description "none";
+        }
+        description "none";
+    }
+    grouping otsi-connectivity-service-end-point-spec {
+        container otsi-config {
+            uses otsi-termination-config-pac;
+            description "none";
+        }
+        description "none";
+    }
+    grouping otsi-termination-config-pac {
+        container central-frequency {
+            uses central-frequency;
+            description "The central frequency of the laser. It is the oscillation frequency of the corresponding electromagnetic wave";
+        }
+        container spectrum {
+            uses spectrum-band;
+            description "none";
+        }
+        container application-identifier {
+            uses application-identifier;
+            description "This attribute indicates the selected Application Identifier.";
+        }
+        leaf modulation {
+            type modulation-technique;
+            description "The modulation techniqu selected at the source.";
+        }
+        leaf laser-control {
+            type laser-control-type;
+            description "Laser control can be FORCED-ON, FORCED-OFF or LASER-SHUTDOWN";
+        }
+        container transmit-power {
+            uses power-properties;
+            description "Transmit power as requested.";
+        }
+        leaf total-power-warn-threshold-upper {
+            type decimal64 {
+                fraction-digits 7;
+            }
+            description "Allows to configure the Upper power threshold which is expected to be different from Default, but within the Min and Max values specified as OTSi SIP capability.";
+        }
+        leaf total-power-warn-threshold-lower {
+            type decimal64 {
+                fraction-digits 7;
+            }
+            description "Allows to configure the Lowerpower threshold which is expected to be different from Default, but within the Min and Max values specified as OTSi SIP capability.";
+        }
+        description "none";
+    }
+    grouping media-channel-service-interface-point-spec {
+        container mc-pool {
+            config false;
+            uses media-channel-pool-capability-pac;
+            description "none";
+        }
+        container power-management-capability {
+            uses power-management-capability-pac;
+            description "none";
+        }
+        description "none";
+    }
+    grouping media-channel-connectivity-service-end-point-spec {
+        container mc-config {
+            uses media-channel-config-pac;
+            description "none";
+        }
+        container power-management-config {
+            uses power-management-config-pac;
+            description "This parameters shall be used to configure the expected
+                and intended (desired) power levels at the endpoints of the media
+                Channel connectivity service. These parameters are dependent of the
+                related OTSi power-management capabilities exposed at the SIPs";
+        }
+        description "none";
+    }
+    grouping media-channel-config-pac {
+        container spectrum {
+            uses spectrum-band;
+            description "none";
+        }
+        description "none";
+    }
+    grouping media-channel-connection-end-point-spec {
+        container media-channel {
+            config false;
+            uses media-channel-properties-pac;
+            description "none";
+        }
+        description "none";
+    }
+    grouping total-power-threshold-pac {
+        leaf total-power-upper-warn-threshold-default {
+            type decimal64 {
+                fraction-digits 7;
+            }
+            description "Can read the value of the default  threshold that was set";
+        }
+        leaf total-power-upper-warn-threshold-min {
+            type decimal64 {
+                fraction-digits 7;
+            }
+            description "Can read the value of the lower threshold that was set";
+        }
+        leaf total-power-upper-warn-threshold-max {
+            type decimal64 {
+                fraction-digits 7;
+            }
+            description "Can  read the value of the upper threshold that was set";
+        }
+        leaf total-power-lower-warn-threshold-default {
+            type decimal64 {
+                fraction-digits 7;
+            }
+            description "Can read the value of the default  threshold that was set";
+        }
+        leaf total-power-lower-warn-threshold-max {
+            type decimal64 {
+                fraction-digits 7;
+            }
+            description "Can  read the value of the upper threshold that was set";
+        }
+        leaf total-power-lower-warn-threshold-min {
+            type decimal64 {
+                fraction-digits 7;
+            }
+            description "Can read the value of the lower threshold that was set";
+        }
+        description "Indication with severity warning raised when a total power value measured is above the threshold.";
+    }
+    grouping power-management-capability-pac {
+        container supportable-maximum-output-power {
+            uses power-properties;
+            description "This parameter exposes the maximum output power supported
+                at the Logical-Termination-Point (LTP) associated to the SIP.";
+        }
+        container supportable-minimum-output-power {
+            uses power-properties;
+            description "This parameter exposes the minimum output power supported
+                at the Logical-Termination-Point (LTP) associated to the SIP.";
+        }
+        container tolerable-maximum-input-power {
+            uses power-properties;
+            description "This parameter exposes the maximum input power tolerated
+                at the Logical-Termination-Point (LTP) associated to the SIP.";
+        }
+        container tolerable-minimum-input-power {
+            uses power-properties;
+            description "This parameter exposes the minimum input power tolerated
+                at the Logical-Termination-Point (LTP) associated to the SIP.";
+        }
+        description "This pac includes power management capabilities which can be
+            exposed as part of the characterization of the different LTPs
+            at the PHOTONIC_MEDIA layer.";
+    }
+    grouping power-management-config-pac {
+        container intended-maximum-output-power {
+            uses power-properties;
+            description "This parameter shall be used to specify the maximum output power
+                desired at the Logical-Termination-Point (LTP) associated to the CSEP.";
+        }
+        container intended-minimum-output-power {
+            uses power-properties;
+            description "This parameter shall be used to specify the minimum output power
+                desired at the Logical-Termination-Point (LTP) associated to the CSEP.";
+        }
+        container expected-maximum-input-power {
+            uses power-properties;
+            description "This parameter shall be used to specify the maximum input power
+                being received at the Logical-Termination-Point (LTP) associated to the CSEP.";
+        }
+        container expected-minimum-input-power {
+            uses power-properties;
+            description "This parameter shall be used to specify the minimum input power
+                being received at the Logical-Termination-Point (LTP) associated to the CSEP.";
+        }
+        description "This pac includes power management constrains which can be included
+            as part of the characterization of the Connectivity-Service-End-Points
+            associated to Logical-Termination-Points (LTPs) at the PHOTONIC_MEDIA layer.";
+    }
+
+    /**************************
+    * package type-definitions
+    **************************/ 
+    identity PHOTONIC_LAYER_QUALIFIER {
+        base tapi-common:LAYER_PROTOCOL_QUALIFIER;
+        description "none";
+    }
+    identity PHOTONIC_LAYER_QUALIFIER_OTSi {
+        base PHOTONIC_LAYER_QUALIFIER;
+        description "none";
+    }
+    identity PHOTONIC_LAYER_QUALIFIER_OTSiA {
+        base PHOTONIC_LAYER_QUALIFIER;
+        description "none";
+    }
+    identity PHOTONIC_LAYER_QUALIFIER_OTSiMC {
+        base PHOTONIC_LAYER_QUALIFIER;
+        description "OTSiMC represents the bw portion dedicated to an OTSi.";
+    }
+    identity PHOTONIC_LAYER_QUALIFIER_OTSiMCA {
+        base PHOTONIC_LAYER_QUALIFIER;
+        description "OTSiMCA is the set of OTSiMC supporting an OTSiA.";
+    }
+    identity PHOTONIC_LAYER_QUALIFIER_MC {
+        base PHOTONIC_LAYER_QUALIFIER;
+        description "The continuous optical spectrum between end points in the photonic layer obtained through optical filter configurations where it is expected one (or more – super channel case) OTSi(s).";
+    }
+    identity PHOTONIC_LAYER_QUALIFIER_MCA {
+        base PHOTONIC_LAYER_QUALIFIER;
+        description "Media Channel Assembly: the set of one or more MCs supporting one (or more) OTSiA(s).";
+    }
+    identity PHOTONIC_LAYER_QUALIFIER_OMSA {
+        base PHOTONIC_LAYER_QUALIFIER;
+        description "none";
+    }
+    identity PHOTONIC_LAYER_QUALIFIER_OTSA {
+        base PHOTONIC_LAYER_QUALIFIER;
+        description "none";
+    }
+    identity PHOTONIC_LAYER_QUALIFIER_OCH {
+        base PHOTONIC_LAYER_QUALIFIER;
+        description "none";
+    }
+    identity PHOTONIC_LAYER_QUALIFIER_OMS {
+        base PHOTONIC_LAYER_QUALIFIER;
+        description "none";
+    }
+    identity PHOTONIC_LAYER_QUALIFIER_OTS {
+        base PHOTONIC_LAYER_QUALIFIER;
+        description "none";
+    }
+    grouping application-identifier {
+        leaf application-identifier-type {
+            type application-identifier-type;
+            description "The ITU-T recommendation which defines the application code format.";
+        }
+        leaf application-code {
+            type string;
+            description "none";
+        }
+        description "The syntax of ApplicationIdentifier is a pair {ApplicationIdentifierType, PrintableString}. The value of ApplicationIdentifierType is either STANDARD or PROPRIETARY. The value of PrintableString represents the standard application code as defined in the ITU-T Recommendations or a vendor-specific proprietary code. If the ApplicationIdentifierType is STANDARD the value of PrintableString represents a standard application code as defined in the ITU-T Recommendations. If the ApplicationIdentifierType is PROPRIETARY, the first six characters of the PrintableString must contain the Hexadecimal representation of an OUI assigned to the vendor whose implementation generated the Application Identifier; the remaining octets of the PrintableString are unspecified. The value of this attribute of an object instance has to be one of the values identified in the attribute SupportableApplicationIdentifierList of the same object instance. The values and value ranges of the optical interface parameters of a standard application code must be consistent with those values specified in the ITU-T Recommendation for that application code.";
+    }
+    grouping central-frequency {
+        container frequency-constraint {
+            uses frequency-constraint;
+            description "none";
+        }
+        leaf central-frequency {
+            type uint64;
+            description "The central frequency of the laser specified in MHz. It is the oscillation frequency of the corresponding electromagnetic wave. ";
+        }
+        description "This data-type holds the central frequency information as well frequency constraints in terms of GridType ( FIXED grid (DWDM or CWDM) or FLEX grid) and AdjustmentGranularity.";
+    }
+    typedef optical-routing-strategy {
+        type enumeration {
+            enum OPTIMAL_OSNR {
+                description "none";
+            }
+            enum NO_RELAY {
+                description "none";
+            }
+            enum MIN_RELAY {
+                description "none";
+            }
+            enum PREFERRED_NO_CHANGE_WAVELENGTH_AS_RESTORE {
+                description "none";
+            }
+            enum PREFERRED_NO_SKIPPING_WAVELENGTH {
+                description "none";
+            }
+        }
+        description "none";
+    }
+    typedef application-identifier-type {
+        type enumeration {
+            enum PROPRIETARY {
+                description "none";
+            }
+            enum ITUT_G959_1 {
+                description "none";
+            }
+            enum ITUT_G698_1 {
+                description "none";
+            }
+            enum ITUT_G698_2 {
+                description "none";
+            }
+            enum ITUT_G696_1 {
+                description "none";
+            }
+            enum ITUT_G695 {
+                description "none";
+            }
+        }
+        description "none";
+    }
+    typedef grid-type {
+        type enumeration {
+            enum DWDM {
+                description "Fixed frequency grid in C & L bands as specified in ITU-T G.694.1
+                    ";
+            }
+            enum CWDM {
+                description "Fixed frequency grid as specified in ITU-T G.694.2";
+            }
+            enum FLEX {
+                description "Flexible frequency grid as specified in ITU-T G.694.1. In this case,
+                    - the allowed frequency slots have a nominal central frequency (in THz) defined by:
+                    193.1 + n × 0.00625 where n is a positive or negative integer including 0 and 0.00625 is the nominal central frequency granularity in THz
+                    - and a slot width defined by:
+                    12.5 × m where m is a positive integer and 12.5 is the slot width granularity in GHz.
+                    Any combination of frequency slots is allowed as long as no two frequency slots overlap.";
+            }
+            enum GRIDLESS {
+                description "none";
+            }
+            enum UNSPECIFIED {
+                description "Unspecified/proprietary frequency grid";
+            }
+        }
+        description "The frequency grid standard that specify reference set of frequencies used to denote allowed nominal central frequencies that may be used for defining applications.";
+    }
+    typedef adjustment-granularity {
+        type enumeration {
+            enum G_100GHZ {
+                description "100000 MHz";
+            }
+            enum G_50GHZ {
+                description "50000 MHz";
+            }
+            enum G_25GHZ {
+                description "25000 MHz";
+            }
+            enum G_12_5GHZ {
+                description "12500 MHz";
+            }
+            enum G_6_25GHZ {
+                description "6250 MHz";
+            }
+            enum G_3_125GHZ {
+                description "3125 MHz";
+            }
+            enum UNCONSTRAINED {
+                description "none";
+            }
+        }
+        description "Adjustment granularity in Gigahertz. As per ITU-T G.694.1, it is used to calculate nominal central frequency";
+    }
+    grouping spectrum-band {
+        leaf upper-frequency {
+            type uint64;
+            description "The upper frequency bound of the media channel spectrum specified in MHz";
+        }
+        leaf lower-frequency {
+            type uint64;
+            description "The lower frequency bound of the media channel spectrum specified in MHz";
+        }
+        container frequency-constraint {
+            uses frequency-constraint;
+            description "none";
+        }
+        description "This data-type holds the spectrum information in termsof upper/lower frequency directly or optionally the information to determin this in terms of the nominal central frequency and spectral width for a FIXED grid (DWDM or CWDM) and FLEX grid type systems.";
+    }
+    typedef modulation-technique {
+        type enumeration {
+            enum RZ {
+                description "none";
+            }
+            enum NRZ {
+                description "none";
+            }
+            enum BPSK {
+                description "none";
+            }
+            enum DPSK {
+                description "none";
+            }
+            enum QPSK {
+                description "none";
+            }
+            enum 8QAM {
+                description "none";
+            }
+            enum 16QAM {
+                description "none";
+            }
+            enum PAM4 {
+                description "none";
+            }
+            enum PAM8 {
+                description "none";
+            }
+            enum UNDEFINED {
+                description "none";
+            }
+        }
+        description "none";
+    }
+    typedef laser-type {
+        type enumeration {
+            enum PUMP {
+                description "none";
+            }
+            enum MODULATED {
+                description "none";
+            }
+            enum PULSE {
+                description "none";
+            }
+        }
+        description "none";
+    }
+    typedef photonic-layer-qualifier {
+        type identityref {
+            base PHOTONIC_LAYER_QUALIFIER;
+        }
+        description "none";
+    }
+    typedef laser-control-type {
+        type enumeration {
+            enum FORCED-ON {
+                description "none";
+            }
+            enum FORCED-OFF {
+                description "none";
+            }
+            enum AUTOMATIC-LASER-SHUTDOWN {
+                description "none";
+            }
+            enum UNDEFINED {
+                description "none";
+            }
+        }
+        description "none";
+    }
+    typedef laser-control-status-type {
+        type enumeration {
+            enum ON {
+                description "none";
+            }
+            enum OFF {
+                description "none";
+            }
+            enum PULSING {
+                description "none";
+            }
+            enum UNDEFINED {
+                description "none";
+            }
+        }
+        description "none";
+    }
+    grouping frequency-constraint {
+        leaf adjustment-granularity {
+            type adjustment-granularity;
+            description "Adjustment granularity in Gigahertz. As per ITU-T G.694.1, it is used to calculate nominal central frequency (in THz)";
+        }
+        leaf grid-type {
+            type grid-type;
+            description "Specifies the frequency grid standard used to determine the nominal central frequency and frequency slot width";
+        }
+        description "This data-type holds the frequency constraint information in terms of GridType ( FIXED grid (DWDM or CWDM) or FLEX grid) and AdjustmentGranularity.";
+    }
+    grouping power-properties {
+        leaf total-power {
+            type decimal64 {
+                fraction-digits 7;
+            }
+            description "The total power at any point in a channel specified in dBm.";
+        }
+        leaf power-spectral-density {
+            type decimal64 {
+                fraction-digits 7;
+            }
+            description "This describes how power of a signal  is distributed over frequency specified in nW/MHz";
+        }
+        description "none";
+    }
+    grouping fec-properties {
+        leaf pre-fec-ber {
+            type uint64;
+            config false;
+            description "counter: bit error rate before correction by FEC";
+        }
+        leaf post-fec-ber {
+            type uint64;
+            config false;
+            description "counter: bit error rate after correction by FEC";
+        }
+        leaf corrected-bytes {
+            type uint64;
+            config false;
+            description "Bytes corrected between those that were received corrupted";
+        }
+        leaf corrected-bits {
+            type uint64;
+            config false;
+            description "Bits corrected between those that were received corrupted";
+        }
+        leaf uncorrectable-bytes {
+            type uint64;
+            config false;
+            description "Bytes that could not be corrected by FEC";
+        }
+        leaf uncorrectable-bits {
+            type uint64;
+            config false;
+            description "Bits that could not be corrected by FEC";
+        }
+        description "none";
+    }
+    grouping laser-properties {
+        leaf laser-status {
+            type laser-control-status-type;
+            config false;
+            description "none";
+        }
+        leaf laser-application-type {
+            type laser-type;
+            config false;
+            description "The type of laser, its operational wavelengths, and its applications. String size 255.";
+        }
+        leaf laser-bias-current {
+            type decimal64 {
+                fraction-digits 7;
+            }
+            config false;
+            description "The Bias current of the laser that is the medium polarization current of the laser.";
+        }
+        leaf laser-temperature {
+            type decimal64 {
+                fraction-digits 7;
+            }
+            config false;
+            description "The temperature of the laser";
+        }
+        description "none";
+    }
+    grouping central-frequency-band {
+        leaf lower-central-frequency {
+            type uint64;
+            description "The lower central frequency that can be tuned in the laser specified in MHz.
+                It is the oscillation frequency of the corresponding electromagnetic wave. ";
+        }
+        leaf upper-central-frequency {
+            type uint64;
+            description "The upper central frequency that can be tuned in the laser specified in MHz.
+                It is the oscillation frequency of the corresponding electromagnetic wave. ";
+        }
+        container frequency-constraint {
+            uses frequency-constraint;
+            description "none";
+        }
+        description "This data-type represents a range of central frequency spectrum band specified as lower and upper bounds, inclusive of the bound values.
+            It also holds frequency constraints in terms of GridType ( FIXED grid (DWDM or CWDM) or FLEX grid) and AdjustmentGranularity.";
+    }
+
+}
diff --git a/models/tapi/tapi-streaming@2017-11-13.yang b/models/tapi/tapi-streaming@2017-11-13.yang
new file mode 100644
index 0000000000000000000000000000000000000000..8a64e2df632dfacc8ac15f7fce16b118f12c958d
--- /dev/null
+++ b/models/tapi/tapi-streaming@2017-11-13.yang
@@ -0,0 +1,882 @@
+module tapi-streaming {
+    namespace "urn:onf:params:xml:ns:yang:tapi-streaming";
+    prefix tapi-streaming;
+    import tapi-common {
+        prefix tapi-common;
+    }
+    organization "ONF (Open Networking Foundation) IMP Working Group";
+    contact "WG Web: <https://www.open{[]}networking.org/technical-communities/areas/services/> 
+ WG List: mailto: <wg list name>@opennetworking.org>, 
+.WG Chair: your-WG-chair<mailto:your-WG-chair@example.com> 
+Editor: your-name<mailto:your-email@example.com>";
+    description "This module contains TAPI Streaming Model definitions.
+        Source: TapiStreaming.uml
+        Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved.
+        License: This module is distributed under the Apache License 2.0
+        - 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.";
+    revision 2017-11-13 {
+        description "Test revision";
+        reference "Papyrus";
+    }
+    augment "/tapi-common:context/tapi-streaming:stream-context/tapi-streaming:supported-stream-type" {
+        container compacted-log-details {
+            uses compacted-log-details;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-streaming:stream-record/tapi-streaming:log-record/tapi-streaming:log-record-body/tapi-streaming:condition-detector-record" {
+        container alarm-condition-detector-record {
+            uses alarm-condition-detector-record;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-streaming:stream-record/tapi-streaming:log-record/tapi-streaming:log-record-body" {
+        container condition-detector-record {
+            uses condition-detector-record;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-streaming:stream-record/tapi-streaming:log-record/tapi-streaming:log-record-body" {
+        container any-class {
+            uses any-class;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context" {
+        container stream-admin-context {
+            uses stream-admin-context;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context" {
+        container stream-context {
+            uses stream-context;
+            description "none";
+        }
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-streaming:stream-context/tapi-streaming:supported-stream-type" {
+        container connection-protocol-details {
+            uses connection-protocol-details;
+            description "none";
+        }
+        description "none";
+    }
+    /**************************
+    * package type-definitions
+    **************************/ 
+    identity ALARM_DETECTOR_STATE {
+        description "none";
+    }
+    identity ALARM_DETECTOR_STATE_ACTIVE {
+        base ALARM_DETECTOR_STATE;
+        description "The detector is indicating the operation of the monitored entity is not within acceptable bounds with respect to the specific condition measured.
+            If INTERMITTENT is supported there may be a requirement for persisted unacceptable operation after a problem occurs before ACTIVE is declared as an alternative may be to declare INTERMITTENT.
+            Where INTERMITTENT is supported, ACTIVE indicates the stable presence of a problem.";
+    }
+    identity ALARM_DETECTOR_STATE_INTERMITTENT {
+        base ALARM_DETECTOR_STATE;
+        description "The detector is indicating the operation of the monitored entity is intermittently not within acceptable bounds with respect to the specific condition measured.
+            INTERMITTENT support is optional. Where it is supported there may be a requirement for persisted unacceptable operation after a problem occurs before ACTIVE or INTERMITTENT is declared.";
+    }
+    identity ALARM_DETECTOR_STATE_CLEAR {
+        base ALARM_DETECTOR_STATE;
+        description "The detector is indicating the operation of the monitored entity is within acceptable bounds with respect to the specific condition measured.
+            There may be a requirement for persisted acceptable operation after a problem before clear is declared etc.
+            For a Compacted Log solution a CLEAR alarm will be considered as a DELETE ChangeType in the RecordBody.
+            Hence a CLEAR will also cause a Tombstone record in a Compacted Log solution.";
+    }
+    identity LOG_RECORD_STRATEGY {
+        description "none";
+    }
+    identity LOG_RECORD_STRATEGY_WHOLE_ENTITY_ON_CHANGE {
+        base LOG_RECORD_STRATEGY;
+        description "A record provides a snapshot of a whole entity and a snapshot is taken on each change.
+            The record includes all properties and values whether they have changed or not.";
+    }
+    identity LOG_RECORD_STRATEGY_CHANGE_ONLY {
+        base LOG_RECORD_STRATEGY;
+        description "Each record only provides a view of the changes that have occurred (on a per entity change basis).
+            E.g., the log only includes the attribute that has changed and not other attributes that have not changed.";
+    }
+    identity LOG_RECORD_STRATEGY_WHOLE_ENTITY_PERIODIC {
+        base LOG_RECORD_STRATEGY;
+        description "A snapshot of an entity is recorded periodically regardess of whether there has been change or not.";
+    }
+    identity LOG_STORAGE_STRATEGY {
+        description "none";
+    }
+    identity LOG_STORAGE_STRATEGY_COMPACTED {
+        base LOG_STORAGE_STRATEGY;
+        description "The log uses some mechanism to remove noisey detail whilst enabling the client to achieve eventual consistency (alignment) with current state.";
+    }
+    identity LOG_STORAGE_STRATEGY_TRUNCATED {
+        base LOG_STORAGE_STRATEGY;
+        description "The log only maintains recent records and disposes of old records. 
+            This log does not alone enable the client to achieve alignment with current state.";
+    }
+    identity LOG_STORAGE_STRATEGY_FULL_HISTORY {
+        base LOG_STORAGE_STRATEGY;
+        description "Maintains a history from system initiation with no missing records. 
+            Provides initial state at the begining of the history";
+    }
+    identity LOG_STORAGE_STRATEGY_FULL_HISTORY_WITH_PERIODIC_BASELINE {
+        base LOG_STORAGE_STRATEGY;
+        description "Provides a history with initial state and perioidic/occasional statements of current state at a particular point in time.";
+    }
+    identity OBJECT_CLASS_IDENTIFIER {
+        description "none";
+    }
+    identity OBJECT_CLASS_IDENTIFIER_NODE {
+        base OBJECT_CLASS_IDENTIFIER;
+        description "none";
+    }
+    identity OBJECT_CLASS_IDENTIFIER_CONNECTION {
+        base OBJECT_CLASS_IDENTIFIER;
+        description "none";
+    }
+    identity OBJECT_CLASS_IDENTIFIER_LINK {
+        base OBJECT_CLASS_IDENTIFIER;
+        description "none";
+    }
+    identity OBJECT_CLASS_IDENTIFIER_CONNECTION_END_POINT {
+        base OBJECT_CLASS_IDENTIFIER;
+        description "none";
+    }
+    identity OBJECT_CLASS_IDENTIFIER_CONNECTIVITY_SERVICE {
+        base OBJECT_CLASS_IDENTIFIER;
+        description "none";
+    }
+    identity OBJECT_CLASS_IDENTIFIER_INTER_RULE_GROUP {
+        base OBJECT_CLASS_IDENTIFIER;
+        description "none";
+    }
+    identity OBJECT_CLASS_IDENTIFIER_MAINTENANCE_ENTITY {
+        base OBJECT_CLASS_IDENTIFIER;
+        description "none";
+    }
+    identity OBJECT_CLASS_IDENTIFIER_MAINTENANCE_ENTITY_GROUP {
+        base OBJECT_CLASS_IDENTIFIER;
+        description "none";
+    }
+    identity OBJECT_CLASS_IDENTIFIER_MEG_END_POINT {
+        base OBJECT_CLASS_IDENTIFIER;
+        description "none";
+    }
+    identity OBJECT_CLASS_IDENTIFIER_MEG_INTERMEDIATE_POINT {
+        base OBJECT_CLASS_IDENTIFIER;
+        description "none";
+    }
+    identity OBJECT_CLASS_IDENTIFIER_NODE_EDGE_POINT {
+        base OBJECT_CLASS_IDENTIFIER;
+        description "none";
+    }
+    identity OBJECT_CLASS_IDENTIFIER_OAM_JOB {
+        base OBJECT_CLASS_IDENTIFIER;
+        description "none";
+    }
+    identity OBJECT_CLASS_IDENTIFIER_PATH {
+        base OBJECT_CLASS_IDENTIFIER;
+        description "none";
+    }
+    identity OBJECT_CLASS_IDENTIFIER_NODE_RULE_GROUP {
+        base OBJECT_CLASS_IDENTIFIER;
+        description "none";
+    }
+    identity OBJECT_CLASS_IDENTIFIER_PATH_COMPUTATION_SERVICE {
+        base OBJECT_CLASS_IDENTIFIER;
+        description "none";
+    }
+    identity OBJECT_CLASS_IDENTIFIER_ROUTE {
+        base OBJECT_CLASS_IDENTIFIER;
+        description "none";
+    }
+    identity OBJECT_CLASS_IDENTIFIER_RULE {
+        base OBJECT_CLASS_IDENTIFIER;
+        description "none";
+    }
+    identity OBJECT_CLASS_IDENTIFIER_SERVICE_INTERFACE_POINT {
+        base OBJECT_CLASS_IDENTIFIER;
+        description "none";
+    }
+    identity OBJECT_CLASS_IDENTIFIER_SWITCH {
+        base OBJECT_CLASS_IDENTIFIER;
+        description "none";
+    }
+    identity OBJECT_CLASS_IDENTIFIER_SWITCH_CONTROL {
+        base OBJECT_CLASS_IDENTIFIER;
+        description "none";
+    }
+    identity OBJECT_CLASS_IDENTIFIER_TOPOLOGY {
+        base OBJECT_CLASS_IDENTIFIER;
+        description "none";
+    }
+    identity OBJECT_CLASS_IDENTIFIER_VIRTUAL_NETWORK_SERVICE {
+        base OBJECT_CLASS_IDENTIFIER;
+        description "none";
+    }
+    identity STREAM_STATE {
+        description "none";
+    }
+    identity STREAM_STATE_ALIGNING {
+        base STREAM_STATE;
+        description "The log that underpins the stream is aligning with other backend services and hence may not be providing full service.
+            If events are provided they will be completely valid.";
+    }
+    identity STREAM_STATE_ACTIVE {
+        base STREAM_STATE;
+        description "The stream is operating such that if a client connects records will be provided as per back pressure etc.";
+    }
+    identity STREAM_STATE_PAUSED {
+        base STREAM_STATE;
+        description "Although the stream is available it has been paused by the administrator such that the records are being appended to the log but a new client will not receive any events whilst the stream is paused.";
+    }
+    identity STREAM_STATE_TERMINATED {
+        base STREAM_STATE;
+        description "The stream is essentially no longer available. It will be removed from the AvailableStreams list shortly.";
+    }
+    identity RECORD_TYPE {
+        description "none";
+    }
+    identity RECORD_TYPE_CREATE_UPDATE {
+        base RECORD_TYPE;
+        description "The record includes a create or update.
+            Where there is an update in a non-compacted log the information with be sparse (e.g., a single atttrinbute) and about an entity that is already known.";
+    }
+    identity RECORD_TYPE_DELETE {
+        base RECORD_TYPE;
+        description "The record is about a delete.
+            The record may have a LogRecordHeader and a LogRecordBody but no augmented content.
+            The entityKey should be sufficient to identify the entity to be deleted.
+            Under certain circumstances there may be class content in the LogRecordBody.";
+    }
+    identity RECORD_TYPE_TOMBSTONE {
+        base RECORD_TYPE;
+        description "Used in a Compacted log to remove old records and truncate deletion history.
+            Is only a LogRecordHeader with no LogRecordBody.";
+    }
+    identity SOURCE_PRECISION {
+        description "none";
+    }
+    identity SOURCE_PRECISION_UNKNOWN {
+        base SOURCE_PRECISION;
+        description "none";
+    }
+    identity SOURCE_PRECISION_FREE_RUNNING {
+        base SOURCE_PRECISION;
+        description "The clock at the event source is free-running.
+            The view of time of day at the source may be significantly different from that at other sources.
+            ";
+    }
+    identity SOURCE_PRECISION_SYNCHRONISED {
+        base SOURCE_PRECISION;
+        description "The clock at the event source is appropriately synchronised to the timing master.
+            The view of time of day at the source should be essentially the same as that at other time-synchronized sources.
+            The state of the clock at the event source is not known.
+            The view of time of day at the source is suspect.";
+    }
+    identity SPREAD {
+        description "none";
+    }
+    identity SPREAD_AT {
+        base SPREAD;
+        description "The event occurred at a particular time.";
+    }
+    identity SPREAD_BEFORE {
+        base SPREAD;
+        description "The event occurred before a particular time.";
+    }
+    identity SPREAD_AFTER {
+        base SPREAD;
+        description "The event occurred after a particular time.";
+    }
+    identity SPREAD_BETWEEN {
+        base SPREAD;
+        description "The event occurred between two stated times.";
+    }
+    typedef alarm-detector-state {
+        type identityref {
+            base ALARM_DETECTOR_STATE;
+        }
+        description "The state of the processed boolean alarm detector.
+            The source applies some analysis to the raw detector to determine the state.
+            The processing by the source my vary.";
+    }
+    grouping legacy-properties {
+        leaf perceived-severity {
+            type perceived-severity;
+            description "A device will provide an indication of importance for each alarm. 
+                This property indicates the importance.
+                In some cases the severity may change through the life of an active alarm.";
+        }
+        leaf service-affecting {
+            type service-affecting;
+            description "Some devices will indicate, from its very narrow viewpoint, whether service has been impacted or not.
+                This property carries this detail.";
+        }
+        leaf is-acknowledged {
+            type boolean;
+            description "Devices offer a capability to acknowledge alarms (to stop the bells ringing).
+                Often an EMS will offer a similar capability.
+                This property reflects the current acknowledge state.";
+        }
+        leaf-list additional-alarm-info {
+            type string;
+            description "Often, alarms raised by devices have additional information. 
+                This property can be used to convey this.";
+        }
+        description "At this point in the evolution of control solutions LegacyProperties are probably mandatory, however, it is anticipated that as control solutions advance the LegacyProperties will become irrelevant.";
+    }
+    typedef perceived-severity {
+        type enumeration {
+            enum CRITICAL {
+                description "The higherst severity of ACTIVE/INTERMITTENT alarm.";
+            }
+            enum MAJOR {
+                description "The middle severity of ACTIVE/INTERMITTENT alarm.";
+            }
+            enum MINOR {
+                description "The lowest severity of ACTIVE/INTERMITTENT alarm.";
+            }
+            enum WARNING {
+                description "An extremely low importance ACTIVE/INTERMITTENT alarm (lowere than MINOR).";
+            }
+            enum CLEARED {
+                description "The severity of a CLEAR where no other severity information is available.";
+            }
+        }
+        description "The values for importance of an ACTIVE, INTERMITTENT or CLEAR alarm.";
+    }
+    typedef service-affecting {
+        type enumeration {
+            enum SERVICE_AFFECTING {
+                description "The condition is believed to impact service.";
+            }
+            enum NOT_SERVICE_AFFECTING {
+                description "The condition is believed to not impact service.";
+            }
+            enum UNKNOWN {
+                description "The service impact of the condition is not known.";
+            }
+        }
+        description "Indicates whether the device considers the condition to be impacting service.
+            Note that the detected condition along with knowledge of the topology and protection provide a more suitable approach.";
+    }
+    typedef log-record-strategy {
+        type identityref {
+            base LOG_RECORD_STRATEGY;
+        }
+        description "Defines the different approaches for logging information about an event covering the log trigger and the log content.";
+    }
+    typedef log-storage-strategy {
+        type identityref {
+            base LOG_STORAGE_STRATEGY;
+        }
+        description "Defines the storage (record retention) approach.";
+    }
+    typedef object-class-identifier {
+        type identityref {
+            base OBJECT_CLASS_IDENTIFIER;
+        }
+        description "The list of TAPI Global Object Class types on which Notifications can be raised.";
+    }
+    typedef stream-state {
+        type identityref {
+            base STREAM_STATE;
+        }
+        description "The state of the available stream.";
+    }
+    grouping approx-date-and-time {
+        leaf primary-time-stamp {
+            type tapi-common:date-and-time;
+            config false;
+            description "Time of the event at the origin where known precisely.
+                Where the event is known to be before particular time, this field records that time.
+                Where the event is known to be after a particular time, this field records that time (this is an unusual case where there is no proposed before time).
+                Where the event is known to have occurred in a time window, this field records the end time (the time before which the event must have occurred).";
+        }
+        leaf start-time-stamp {
+            type tapi-common:date-and-time;
+            config false;
+            description "The time after which the event is known to have occurred when the event is known to have occurred between two times.
+                The primaryTimeStamp provides the end time.";
+        }
+        leaf spread {
+            type spread;
+            config false;
+            description "Indicates the knowledge of the time of occurence of the event.";
+        }
+        leaf source-precision {
+            type source-precision;
+            config false;
+            description "none";
+        }
+        description "Allows for recording of an aspect of imprecise time.";
+    }
+    typedef record-type {
+        type identityref {
+            base RECORD_TYPE;
+        }
+        description "The type of the record.
+            Used to understand what log content will be present and how to interpret it.
+            For some record types there is special encoding.
+            A ACTIVE alarm and an INTERMITTENT alarm are CREATE_UPDATE.
+            A CLEAR alarm is DELETE with an adjacent TOMBSTONE record.";
+    }
+    typedef event-source-indicator {
+        type enumeration {
+            enum RESOURCE_OPERATION {
+                description "The event is from the operation of the network resources.
+                    The event source has a relatively fast time characteristic.";
+            }
+            enum MANAGEMENT_OPERATION {
+                description "Event is from a Management operation (slow control).
+                    The event source has a relatively slow time characteristic.";
+            }
+            enum UNKNOWN {
+                description "The origin of the event is not known.";
+            }
+        }
+        description "Source of the event.
+            Use to give some idea of the time characteristics of the event source.";
+    }
+    typedef source-precision {
+        type identityref {
+            base SOURCE_PRECISION;
+        }
+        description "Alternative statements about timing precision at the event source.";
+    }
+    typedef spread {
+        type identityref {
+            base SPREAD;
+        }
+        description "The alterntive time of occurrence statements.";
+    }
+    /**************************
+    * definitions of references
+    **************************/
+    grouping available-stream-ref {
+        leaf available-stream-uuid{
+            type leafref {
+                path '/tapi-common:context/tapi-streaming:stream-context/tapi-streaming:available-stream/tapi-streaming:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+    grouping supported-stream-type-ref {
+        leaf supported-stream-type-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-streaming:stream-context/tapi-streaming:supported-stream-type/tapi-streaming:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+    /**************************
+    * package object-classes
+    **************************/ 
+    grouping compacted-log-details {
+        leaf tombstone-retention {
+            type string;
+            config false;
+            description "Time in minutes.
+                The time period for which a Tombstone record will be held in the log from when it was logged. 
+                This provides an adjustment to the essential Compaction strategy such that after the tombstoneRetention period there will be no records about a particular thing that existed but no longer exists.
+                Tombstone retention overrides recordRetention for Tombstones.
+                Key word 'FOREVER' means that Tombstone records will never be removed from the log.
+                Can be adjusted by an administrator (via a separate view) through the life of the stream.";
+        }
+        leaf compaction-delay {
+            type string;
+            config false;
+            description "Time in minutes. 
+                The delay between logging the record and making the record available for compaction.
+                This provides an adjustment to the essential Compaction strategy such that there may be several distinct records for the same thing in the where those records are not older than the Compaction Delay.
+                Can be adjusted by an administrator (via a separate view) through the life of the stream.";
+        }
+        description "Details relevant for a CompactedLog.
+            The essential Compacted Log strategy is to remove historic records about a particular thing such that only the latest record about each thing exists in the log.
+            The essental strategy is refined by the paramters of this structure.";
+    }
+    grouping alarm-condition-detector-record {
+        leaf alarm-detector-state {
+            type alarm-detector-state;
+            config false;
+            description "The state of the detector.
+                The detector state accounts for the time characteristics of the detected condition.";
+        }
+        container legacy-properties {
+            config false;
+            uses legacy-properties;
+            description "Alarm systems of the 20th century were based primarily on local lamps (initially filament bulbs) and bells.
+                Lamps can only be on or off, and bells sounding or not sounding, so alarms were boolean in nature.
+                Where a detctor was essentially multi-state it was converted into multiple boolean statements.
+                The management of the equipments was essentially human only and local only (there were rarely remote systems).
+                The device with the problem was the only possible indicator of importance and it had only three distinct bulbs to illuminate (filament bulbs tend to fail requiring costly replacement).
+                The devices were relatively simple in function and analysis of the detectors was crude.
+                There was only the device to indicate severity
+                The device also could provide the best view as to whether a service was impacted, although clearly it had almost no knowledge.
+                In a modern solution with well connected remote systems that increasingly analyse problems and where there is increasingly 'lights out' building operation, the device's guess at severity etc. is irrelavant.
+                In addition with sophisticated resilience mechanisms, the device cannot make any relevant statement on whether the customer service has been impacted.
+                Likewise, in a world where there were no remote systems and local management was the only practice, alarms had to be locally 'acknowledged'. 
+                Where there are remote systems, per alarm acknowleged is burdensome.
+                However, many solutions and operational practices continue to use the historic schemes.
+                On that basis, the schemes are supported but relegated to optional.";
+        }
+        description "A record of the state of a detector where that detector has two underling states taht are of asymmetric importance.";
+    }
+    grouping condition-detector-record {
+        leaf condition-native-name {
+            type string;
+            config false;
+            description "The name used for the Condition by the source of the information.";
+        }
+        leaf measured-entity-uuid {
+            type tapi-common:uuid;
+            config false;
+            description "The Uuid of the TAPI entity that represents the entity measured at source.
+                If the TAPI entity can not be identified as it cannot be mapped, then this property can be ommitted.";
+        }
+        leaf measured-entity-native-id {
+            type string;
+            config false;
+            description "The identifier (invariant over the life) of the instance of the measured entity at the source.";
+        }
+        leaf condition-normalized-name {
+            type string;
+            config false;
+            description "It is often the case that there is a Condition Name that is commonly used or even standardised that has not been used by the source of the condition. 
+                If this is the case then that common/standard name is provided in via this property.";
+        }
+        leaf measured-entity-class {
+            type object-class-identifier;
+            config false;
+            description "The TAPI class of the measured entity. 
+                If the class can not be identified as it cannot be mapped, then this property can be ommitted.";
+        }
+        leaf detector-uuid {
+            type tapi-common:uuid;
+            config false;
+            description "The Uuid of the TAPI entity that represents the detector.
+                If the TAPI entity can not be identified as it cannot be mapped, then this property can be ommitted.
+                Where the detector is not modelled independently, but instead is a part of the measured entity such that it is identified by a 'local id' built from the UUID of the measured entity and the condition name, then this property may be ommitted.";
+        }
+        leaf detector-native-id {
+            type string;
+            config false;
+            description "The identifier (invariant over the life) of the instance of the detector at the source.";
+        }
+        leaf condition-detector-type {
+            type string;
+            config false;
+            description "Identifies the type of detector.
+                This drives the conditional augmentation. 
+                Some types of detector may not need specific augmentation.
+                The strings will be controlled.
+                Valid values:
+                - AlarmConditionDetector";
+        }
+        description "ConditionDetector represents any monitoring component that assesses properties of something and determines from those properties what conditions are associated with the thing.
+            For example, a thing might be 'too hot' or might be 'unreliable'.
+            The monitor may a multi-state output. 
+            The ConditionDetector lifecycle depends upon the lifecycle of the thing it is monitoring (this is a general OAM model consideration).
+            The entityKey in the AppendLogRecordHeader for a ConditionDetector record is the nativeDetector Id which may be derived from other ids (most robustly, nativeOwningEntityName (to which the detector is associated) + natveConditionName).";
+    }
+    grouping any-class {
+        description "In the final version all classes that can stream will be explicitly associated with the AppendLogRecordBody";
+    }
+    grouping stream-admin-context {
+        list stream-monitor {
+            config false;
+            uses stream-monitor;
+            description "The list of available stream monitors.";
+        }
+        uses tapi-common:global-class;
+        description "Context providing access to stream administration functionality.";
+    }
+    grouping stream-monitor {
+        leaf id-of-last-record-read-from-log {
+            type string;
+            config false;
+            description "The id/key of the last record read from the log by the client stream.
+                The analysis of this value needs to account for stream buffering in the comms layer.";
+        }
+        leaf id-of-last-record-written-to-log {
+            type string;
+            config false;
+            description "The id/key of the last record written to the log. 
+                This is the same value for all clients of the stream.";
+        }
+        container available-stream {
+		    uses available-stream-ref;
+            config false;
+            description "none";
+        }
+        leaf client-id {
+            type string;
+            config false;
+            description "The id of the connected client.";
+        }
+        leaf last-updated {
+            type tapi-common:date-and-time;
+            config false;
+            description "The date/time when the values provided were recorded.";
+        }
+        leaf client-address {
+            type string;
+            config false;
+            description "The address of the connected client that is being monitored.";
+        }
+        description "Information on the monitoring of the use of a specific AvailableStream.";
+    }
+    grouping connection-protocol-details {
+        leaf-list allowed-connection-protocols {
+            type string;
+            config false;
+            description "Name of the allowed protocol.";
+        }
+        description "Details of the connection protocols available for the specific stream.";
+    }
+    grouping available-stream {
+        leaf connection-address {
+            type string;
+            config false;
+            description "Provides the address for the connection. 
+                The format of the address and attachment mechnism will depend on the connection protocol defined in another attribute of this class.";
+        }
+        leaf stream-state {
+            type stream-state;
+            config false;
+            description "The state of the stream.";
+        }
+        container stream-connection-type {
+		    uses supported-stream-type-ref;
+            config false;
+            description "Identifies the type of stream that is available for connection.";
+        }
+        leaf stream-id {
+            type string;
+            config false;
+            description "The id of the stream.";
+        }
+        leaf connection-protocol {
+            type string;
+            config false;
+            description "Names the connection protocol for this particular available stream.
+                The connection protocol is chosen from the lost of connecion protocols identified in the referenced SupportedStreamType.";
+        }
+        uses tapi-common:global-class;									  
+        description "Details of stream a stream that can be connected to by a client application.";
+    }
+    grouping stream-context {
+        list available-stream {
+            key 'connection-address uuid';
+            config false;
+            uses available-stream;
+            description "none";
+        }
+        list supported-stream-type {
+            key 'stream-type-id uuid';
+            config false;
+            uses supported-stream-type;
+            description "none";
+        }
+        description "All streams relevant to the specific TapiContext.";
+    }
+    grouping supported-stream-type {
+        leaf stream-type-name {
+            type string;
+            config false;
+            description "Name of the stream type.";
+        }
+        leaf record-retention {
+            type string;
+            config false;
+            description "Time in minutes.
+                Statement of retention time and/or retention capacity in bytes.
+                Key word 'FOREVER' means that records will never be removed from the log.
+                May be overridden for particular cases of specific LogStorageStrategy (via augment).";
+        }
+        leaf segment-size {
+            type string;
+            config false;
+            description "Size of substructuring of the log.";
+        }
+        leaf-list stream-type-content {
+            type object-class-identifier;
+            description "Identifies the classes that are supported through the stream. 
+                The list may be a subset of the classes within the context.";
+        }
+        leaf log-storage-strategy {
+            type log-storage-strategy;
+            config false;
+            description "Indicates the storage characteristics of the log supporting the stream.";
+        }
+        leaf log-record-strategy {
+            type log-record-strategy;
+            config false;
+            description "Indicates the type of content of each log record.";
+        }
+        leaf stream-type-id {
+            type tapi-common:uuid;
+            config false;
+            description "The identifier for the stream type.";
+        }
+        uses tapi-common:global-class;		 
+        description "Definition of a supported stream type.";
+    }
+    grouping log-record {
+        container log-record-header {
+            config false;
+            uses log-record-header;
+            description "The header of the log record providing general parameters of the record common to all records.";
+        }
+        container log-record-body {
+            config false;
+            uses log-record-body;
+            description "The body of the log record providing specific logged details.";
+        }
+        description "A specific atomic entry in a log.";
+    }
+    grouping log-record-body {
+        container event-time-stamp {
+            config false;
+            uses approx-date-and-time;
+            description "Time of the event at the origin of the event that triggered the generation of the record. 
+                The structure allows for time uncertainty.";
+        }
+        leaf event-source-indicator {
+            type event-source-indicator;
+            config false;
+            description "Indicates whether the source is controlled or potentially chaotic.
+                The time characteristic of the source may be determined from the metadata describing the detector.
+                Where there is an alternative (and probably more detailed) source of information on time characteristic this attribute can be ommitted.";
+        }
+        list additional-event-info {
+            key 'value-name';
+            config false;
+            uses tapi-common:name-and-value;
+            description "Addition information related to the event such as change reason where changeReason would be the name and the value text would provide information on the reason for change.";
+        }
+        leaf-list parent-address {
+            type string;
+            config false;
+            description "Gives the position of the entity in the address tree (usually containment) that is raising the event by providing the name/id values in the address of the parent.
+                Is the sequence of named levels in the tree up to but excluding the entity of the notification. 
+                It includes the NE id.";
+        }
+        description "The specific details of the Record.";
+    }
+    grouping log-record-header {
+        leaf tapi-context {
+            type tapi-common:uuid;
+            config false;
+            description "The identifier of the context.";
+        }
+        leaf token {
+            type string;
+            config false;
+            description "A coded (and compact) form of the fullLogRecordOffsetId.
+                This property is used to request streaming from a particular point (e.g., the last correctly handled record).";
+        }
+        list full-log-record-offset-id {
+            key 'value-name';
+            config false;
+            min-elements 1;
+            uses tapi-common:name-and-value;
+            description "In a complex log solution there may be various parts to the log.
+                The record token is a compressed form of log record reference.
+                This property provides the verbose form 
+                Fore example it may include:
+                - stream id
+                - topic
+                - partition
+                - partition offset
+                - sequence number ( the offset is essentially the sequence number associated with the partition)";
+        }
+        leaf log-append-time-stamp {
+            type tapi-common:date-and-time;
+            config false;
+            description "The time when the record was appended to the log.";
+        }
+        leaf entity-key {
+            type string;
+            config false;
+            description "The identifier of the entity that is used in a Compacted log as the compaction key.
+                The entityKey value, where appropriate, may be based upon the identifiers from the event source.
+                It can be built from some specific detail combination that meets the necessary uniqueness and durability requirements.
+                entityKey is the value used during compaction.
+                Ideally it is a UUID format, if this can be formed from the source identifier.";
+        }
+        leaf record-type {
+            type record-type;
+            config false;
+            description "The type of the record.
+                Can be used to understand which elements of the record will be present.";
+        }
+        description "The header of the log record providing general parameters of the record common to all records.";
+    }
+    notification stream-record {
+        uses stream-record;
+        description "none";
+    }
+    grouping stream-record {
+        list log-record {
+            config false;
+            uses log-record;
+            description "Each stream record may include a number of log records.";
+        }
+        description "The stream content.";
+    }
+
+    /**************************
+    * package interfaces
+    **************************/ 
+    rpc connect-to-stream {
+        description "none";
+        input {
+            leaf start-from-token {
+                type string;
+                description "none";
+            }
+            leaf connection-address {
+                type string;
+                description "none";
+            }
+        }
+    }
+    rpc get-available-stream-connection-details {
+        description "none";
+        output {
+            list active-connections {
+                uses available-stream;
+                description "none";
+            }
+        }
+    }
+    rpc get-supported-stream-connection-types {
+        description "none";
+        output {
+            list supported-stream-types {
+                uses supported-stream-type;
+                description "none";
+            }
+        }
+    }
+
+}
diff --git a/models/tapi/tapi-topology@2019-03-31.yang b/models/tapi/tapi-topology@2019-03-31.yang
new file mode 100644
index 0000000000000000000000000000000000000000..73175509b214ab93c11bf9bd1a5db5c7f0e66116
--- /dev/null
+++ b/models/tapi/tapi-topology@2019-03-31.yang
@@ -0,0 +1,1012 @@
+module tapi-topology {
+    namespace "urn:onf:otcc:yang: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 Topology Model definitions.
+        Source: TapiTopology.uml
+        Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved.
+        License: This module is distributed under the Apache License 2.0
+        - 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.";
+    revision 2019-03-31 {
+        description "ONF Transport API version 2.2-RC1.
+                   Changes included in this TAPI release (v2.2) are listed in
+                  <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.2.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.2.0/UML>";
+    }
+    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.1/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 topology-context {
+            uses topology-context;
+            description "Augments the base TAPI Context with TopologyService information";
+        }
+        description "Augments the base TAPI Context with TopologyService information";
+    }
+    /**************************
+    * definitions of references
+    **************************/
+    grouping topology-ref {
+        leaf topology-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-topology:topology-context/tapi-topology:topology/tapi-topology:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+    grouping link-ref {
+        uses topology-ref;
+        leaf link-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-topology:topology-context/tapi-topology:topology/tapi-topology:link/tapi-topology:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+    grouping node-ref {
+        uses topology-ref;
+        leaf node-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-topology:topology-context/tapi-topology:topology/tapi-topology:node/tapi-topology:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+    grouping node-edge-point-ref {
+        uses node-ref;
+        leaf node-edge-point-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-topology:topology-context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point/tapi-topology:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+    grouping node-rule-group-ref {
+        uses node-ref;
+        leaf node-rule-group-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-topology:topology-context/tapi-topology:topology/tapi-topology:node/tapi-topology:node-rule-group/tapi-topology:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+    
+    /**************************
+    * package object-classes
+    **************************/ 
+    grouping link {
+        list node-edge-point {
+            uses node-edge-point-ref;
+            key 'topology-uuid node-uuid node-edge-point-uuid';
+            config false;
+            min-elements 2;
+            description "none";
+        }
+        leaf-list layer-protocol-name {
+            type tapi-common:layer-protocol-name;
+            config false;
+            min-elements 1;
+            description "none";
+        }
+        leaf direction {
+            type tapi-common:forwarding-direction;
+            config false;
+            description "The directionality of the Link. 
+                Is applicable to simple Links where all LinkEnds are BIDIRECTIONAL (the Link will be BIDIRECTIONAL) or UNIDIRECTIONAL (the Link will be UNIDIRECTIONAL). 
+                Is not present in more complex cases.";
+        }
+        container resilience-type {
+            uses resilience-type;
+            description "none";
+        }
+        uses tapi-common:global-class;
+        uses tapi-common:admin-state-pac;
+        uses tapi-common:capacity-pac;
+        uses transfer-cost-pac;
+        uses transfer-integrity-pac;
+        uses transfer-timing-pac;
+        uses risk-parameter-pac;
+        uses validation-pac;
+        uses layer-protocol-transition-pac;
+        description "The Link object class models effective adjacency between two or more ForwardingDomains (FD). ";
+    }
+    grouping node {
+        list owned-node-edge-point {
+            key 'uuid';
+            config false;
+            uses node-edge-point;
+            description "none";
+        }
+        list aggregated-node-edge-point {
+            uses node-edge-point-ref;
+            key 'topology-uuid node-uuid node-edge-point-uuid';
+            config false;
+            description "none";
+        }
+        list node-rule-group {
+            key 'uuid';
+            uses node-rule-group;
+            description "none";
+        }
+        container encap-topology {
+            uses topology-ref;
+            config false;
+            description "none";
+        }
+        leaf-list layer-protocol-name {
+            type tapi-common:layer-protocol-name;
+            config false;
+            min-elements 1;
+            description "none";
+        }
+        uses tapi-common:global-class;
+        uses tapi-common:admin-state-pac;
+        uses tapi-common:capacity-pac;
+        uses transfer-cost-pac;
+        uses transfer-integrity-pac;
+        uses transfer-timing-pac;
+        description "The ForwardingDomain (FD) object class models the ForwardingDomain topological component which is used to effect forwarding of transport characteristic information and offers the potential to enable forwarding. 
+            At the lowest level of recursion, an FD (within a network element (NE)) represents a switch matrix (i.e., a fabric). Note that an NE can encompass multiple switch matrices (FDs). ";
+    }
+    grouping topology {
+        list node {
+            key 'uuid';
+            config false;
+            uses node;
+            description "none";
+        }
+        list link {
+            key 'uuid';
+            config false;
+            uses link;
+            description "none";
+        }
+        leaf-list layer-protocol-name {
+            type tapi-common:layer-protocol-name;
+            config false;
+            min-elements 1;
+            description "none";
+        }
+        list boundary-node-edge-point {
+            uses node-edge-point-ref;
+            key 'topology-uuid node-uuid node-edge-point-uuid';
+            config false;
+            description "none";
+        }
+        uses tapi-common:global-class;
+        description "The ForwardingDomain (FD) object class models the ForwardingDomain topological component which is used to effect forwarding of transport characteristic information and offers the potential to enable forwarding. 
+            At the lowest level of recursion, an FD (within a network element (NE)) represents a switch matrix (i.e., a fabric). Note that an NE can encompass multiple switch matrices (FDs). ";
+    }
+    grouping layer-protocol-transition-pac {
+        leaf-list transitioned-layer-protocol-name {
+            type string;
+            min-elements 2;
+            description "Provides the ordered structure of layer protocol transitions encapsulated in the TopologicalEntity.
+                The list starts with the client side as the first entry and includes all layer-protocol names (hence the smallest number is 2 as otherwise the Link is not transitional).
+                The ordering relates also to the LinkPort role (which emphasizes the orientation).";
+        }
+        description "Relevant for a Link that is formed by abstracting one or more LTPs (in a stack) to focus on the flow and deemphasize the protocol transformation. 
+            This abstraction is relevant when considering multi-layer routing. 
+            The layer protocols of the LTP and the order of their application to the signal is still relevant and need to be accounted for. This is derived from the LTP spec details.
+            This Pac provides the relevant abstractions of the LTPs and provides the necessary association to the LTPs involved.
+            Links that included details in this Pac are often referred to as Transitional Links.";
+    }
+    grouping node-edge-point {
+        leaf layer-protocol-name {
+            type tapi-common:layer-protocol-name;
+            config false;
+            description "none";
+        }
+        list available-cep-layer-protocol {
+            key 'layer-protocol-qualifier';
+            min-elements 1;
+            uses nep-layer-protocol-capability;
+            description "none";
+        }
+        list aggregated-node-edge-point {
+            uses node-edge-point-ref;
+            key 'topology-uuid node-uuid node-edge-point-uuid';
+            config false;
+            description "none";
+        }
+        list mapped-service-interface-point {
+            uses tapi-common:service-interface-point-ref;
+            key 'service-interface-point-uuid';
+            config false;
+            description "NodeEdgePoint mapped to more than ServiceInterfacePoint (slicing/virtualizing) or a ServiceInterfacePoint mapped to more than one NodeEdgePoint (load balancing/Resilience) should be considered experimental";
+        }
+        leaf link-port-direction {
+            type tapi-common:port-direction;
+            config false;
+            description "The orientation of defined flow at the LinkEnd.";
+        }
+        leaf link-port-role {
+            type tapi-common:port-role;
+            config false;
+            description "Each LinkEnd of the Link has a role (e.g., symmetric, hub, spoke, leaf, root)  in the context of the Link with respect to the Link function. ";
+        }
+        uses tapi-common:global-class;
+        uses tapi-common:admin-state-pac;
+        uses tapi-common:termination-pac;
+        uses tapi-common:capacity-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 risk-parameter-pac {
+        list risk-characteristic {
+            key 'risk-characteristic-name';
+            config false;
+            min-elements 1;
+            uses risk-characteristic;
+            description "A list of risk characteristics for consideration in an analysis of shared risk. Each element of the list represents a specific risk consideration.";
+        }
+        description "The risk characteristics of a TopologicalEntity come directly from the underlying physical realization. 
+            The risk characteristics propagate from the physical realization to the client and from the server layer to the client layer, this propagation may be modified by protection.
+            A TopologicalEntity may suffer degradation or failure as a result of a problem in a part of the underlying realization.
+            The realization can be partitioned into segments which have some relevant common failure modes.
+            There is a risk of failure/degradation of each segment of the underlying realization.
+            Each segment is a part of a larger physical/geographical unit that behaves as one with respect to failure (i.e. a failure will have a high probability of impacting the whole unit (e.g. all cables in the same duct).
+            Disruptions to that larger physical/geographical unit will impact (cause failure/errors to) all TopologicalEntities that use any part of that larger physical/geographical entity.
+            Any TopologicalEntity that uses any part of that larger physical/geographical unit will suffer impact and hence each TopologicalEntity shares risk.
+            The identifier of each physical/geographical unit that is involved in the realization of each segment of a Topological entity can be listed in the RiskParameter_Pac of that TopologicalEntity.
+            A segment has one or more risk characteristic.
+            Shared risk between two TopologicalEntities compromises the integrity of any solution that use one of those TopologicalEntity as a backup for the other.
+            Where two TopologicalEntities have a common risk characteristic they have an elevated probability of failing simultaneously compared to two TopologicalEntities that do not share risk characteristics.";
+    }
+    grouping transfer-cost-pac {
+        list cost-characteristic {
+            key 'cost-name';
+            config false;
+            min-elements 1;
+            uses cost-characteristic;
+            description "The list of costs where each cost relates to some aspect of the TopologicalEntity.";
+        }
+        description "The cost characteristics of a TopologicalEntity not necessarily correlated to the cost of the underlying physical realization. 
+            They may be quite specific to the individual TopologicalEntity e.g. opportunity cost. Relates to layer capacity
+            There may be many perspectives from which cost may be considered  for a particular TopologicalEntity and hence many specific costs and potentially cost algorithms. 
+            Using an entity will incur a cost. ";
+    }
+    grouping transfer-integrity-pac {
+        leaf error-characteristic {
+            type string;
+            config false;
+            description "Describes the degree to which the signal propagated can be errored. 
+                Applies to TDM systems as the errored signal will be propagated and not packet as errored packets will be discarded.";
+        }
+        leaf loss-characteristic {
+            type string;
+            config false;
+            description "Describes the acceptable characteristic of lost packets where loss may result from discard due to errors or overflow.
+                Applies to packet systems and not TDM (as for TDM errored signals are propagated unless grossly errored and overflow/underflow turns into timing slips).";
+        }
+        leaf repeat-delivery-characteristic {
+            type string;
+            config false;
+            description "Primarily applies to packet systems where a packet may be delivered more than once (in fault recovery for example). 
+                It can also apply to TDM where several frames may be received twice due to switching in a system with a large differential propagation delay.";
+        }
+        leaf delivery-order-characteristic {
+            type string;
+            config false;
+            description "Describes the degree to which packets will be delivered out of sequence.
+                Does not apply to TDM as the TDM protocols maintain strict order.";
+        }
+        leaf unavailable-time-characteristic {
+            type string;
+            config false;
+            description "Describes the duration for which there may be no valid signal propagated.";
+        }
+        leaf server-integrity-process-characteristic {
+            type string;
+            config false;
+            description "Describes the effect of any server integrity enhancement process on the characteristics of the TopologicalEntity.";
+        }
+        description "Transfer intergrity characteristic covers expected/specified/acceptable characteristic of degradation of the transfered signal.
+            It includes all aspects of possible degradation of signal content as well as any damage of any form to the total TopologicalEntity and to the carried signals.
+            Note that the statement is of total impact to the TopologicalEntity so any partial usage of the TopologicalEntity (e.g. a signal that does not use full capacity) will only suffer its portion of the impact.";
+    }
+    grouping transfer-timing-pac {
+        list latency-characteristic {
+            key 'traffic-property-name';
+            config false;
+            min-elements 1;
+            uses 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.";
+        }
+        description "A TopologicalEntity will suffer effects from the underlying physical realization related to the timing of the information passed by the TopologicalEntity.";
+    }
+    grouping validation-pac {
+        list validation-mechanism {
+            key 'validation-mechanism';
+            config false;
+            min-elements 1;
+            uses validation-mechanism;
+            description "Provides details of the specific validation mechanism(s) used to confirm the presence of an intended topologicalEntity.";
+        }
+        description "Validation covers the various adjacenct discovery and reachability verification protocols. Also may cover Information source and degree of integrity.";
+    }
+    grouping network-topology-service {
+        list topology {
+            uses topology-ref;
+            key 'topology-uuid';
+            config false;
+            description "none";
+        }
+        uses tapi-common:global-class;
+        description "none";
+    }
+    grouping topology-context {
+        container nw-topology-service {
+            config false;
+            uses network-topology-service;
+            description "none";
+        }
+        list topology {
+            key 'uuid';
+            config false;
+            uses topology;
+            description "none";
+        }
+        description "none";
+    }
+    grouping inter-rule-group {
+        list rule {
+            key 'local-id';
+            config false;
+            min-elements 1;
+            uses rule;
+            description "The list of rules of the InterRuleGroup.";
+        }
+        list associated-node-rule-group {
+            uses node-rule-group-ref;
+            key 'topology-uuid node-uuid node-rule-group-uuid';
+            config false;
+            min-elements 2;
+            description "The NodeRuleGroups that the InterRuleGroup constrains interconnection between.
+                The CEPs of the NEPs of a referenced NodeRuleGroup can interconnect to the CEPs of the NEPs of another referenced NodeRuleGroup constrained by the rules of the InterRuleGroup.";
+        }
+        uses tapi-common:global-class;
+        uses tapi-common:capacity-pac;
+        uses transfer-cost-pac;
+        uses transfer-timing-pac;
+        uses risk-parameter-pac;
+        description "Rules that apply between groups of NEPs.";
+    }
+    grouping node-rule-group {
+        list rule {
+            key 'local-id';
+            config false;
+            min-elements 1;
+            uses rule;
+            description "The list of rules of the NodeRuleGroup.";
+        }
+        list node-edge-point {
+            uses node-edge-point-ref;
+            key 'topology-uuid node-uuid node-edge-point-uuid';
+            config false;
+            min-elements 1;
+            description "NEPs and their client CEPs that the rules apply to.";
+        }
+        list composed-rule-group {
+            uses node-rule-group-ref;
+            key 'topology-uuid node-uuid node-rule-group-uuid';
+            config false;
+            description "NodeRuleGroups may be nested such that finer grained rules may be applied.
+                A nested rule group should have a subset of the NEPs of the superior rule group.";
+        }
+        list inter-rule-group {
+            key 'uuid';
+            config false;
+            uses inter-rule-group;
+            description "Nested NodeRuleGroups may have InterRuleGroups. The Superior NodeRuleGroup contains the nested NodeRuleGroups and their associated InterRuleGroups.
+                This is equivalent to the Node-Topology hierarchy.";
+        }
+        uses tapi-common:global-class;
+        uses tapi-common:capacity-pac;
+        uses transfer-cost-pac;
+        uses transfer-timing-pac;
+        uses risk-parameter-pac;
+        description "Rules that apply to a group of NEPs.";
+    }
+    grouping rule {
+        leaf rule-type {
+            type rule-type;
+            config false;
+            description "The focus of the rule.";
+        }
+        leaf forwarding-rule {
+            type forwarding-rule;
+            config false;
+            description "Rule that restricts the creation/deletion of a Connection between points in the node rule group or related by the inter rule group between node rule groups.";
+        }
+        leaf override-priority {
+            type uint64;
+            config false;
+            description "The overridePriority allows for one rule in a rule group to override another.
+                Priority n rules override priority n+1 rules.
+                Rules of the same priority override as follows (n overrides n+1):
+                1 - MustNot
+                2 - Must
+                3 - May
+                4 - Null
+                Within a rule the flexibility rules (signal, port role...) override as follows (n overriedes n+1):
+                1 - Any
+                2 - Same
+                3 - Different
+                Where there are two or more 'Same' rules, they will form an intersection where all must be met.
+                ";
+        }
+        leaf-list cep-direction {
+            type tapi-common:port-direction;
+            config false;
+            description "cep direction is a list of port directions that the rule applies to.
+                No entry means all cep directions.";
+        }
+        list cep-port-role {
+            config false;
+            uses port-role-rule;
+            description "Indicates the port role to which the rule applies. 
+                The port role is interpreted in the context of the connection type which is identified by the connection spec. 
+                The port role is not meaningful in the absence of a connection spec reference.
+                If a node rule group carries a port role, that role applies also to the associated inter rule where the combination of the roles in the node rule groups at the ends of the inter group rule define the connection orientation.
+                For example a root-and-leaf connection may be used in a node where a node rule group collects one set of NEPs has the port role 'root' and another node rule group collects another set of NEPs has the port role 'leaf' where these are joined by an inter rule group. This combination specifies an allowed orientation of the root-and-leaf connection.
+                No port role statement means all port roles are allowed.";
+        }
+        list connection-spec-reference {
+            config false;
+            uses connection-spec-reference;
+            description "Identifies the type of connection that the rule applies to. 
+                If the attribute is not present then the rule applies to all types of connection supported by the device.";
+        }
+        leaf-list layer-protocol-qualifier {
+            type tapi-common:layer-protocol-qualifier;
+            config false;
+            description "Qualifies a rule for a particular layerProtocol identifying the qualifiers that the rule apples to.
+                If the attribute is not present then the rule applies to all relevant qualifiers of the layer protocol of the parent entity.";
+        }
+        container signal-property {
+            config false;
+            uses signal-property-rule;
+            description "The rule only applies to signals with the properties listed. 
+                If the attribute is not present then the rule applies to all signals.";
+        }
+        leaf-list complex-rule {
+            type string;
+            config false;
+            description "Allows for more complex rules where the basic rule system is not sufficient.";
+        }
+        uses tapi-common:local-class;
+        description "Single complex rule statememt.
+            A Node with no rule group has no restrictions and is essentially May/Any
+            A node rule group constrain the CEP connectability in the Node.
+            A connection from a NEP must abide by all rules that relate to that NEP
+            Rules that are for a particular layerProtocolQualifier, connectionSpecReference, cepPortRole and cepDirection combination must be abided by in combination as dictated by overridePriority.
+            If a particular
+            - connectionSpecReference does not have any rule statements then it is not supported and connections of that type are not possible within the rule group.
+            - cepPortRole of a particular connectionSpecReference does not have any rule statements then it is not supported and connections of that connectionSpecReference (type) cannot have that cepPortRole for CEPs from NEPs in that rule group.
+            - cepDirection for a particular connectionSpecReference does not have any rule statements then it is not supported and connections of that connectionSpecReference (type) cannot have that cepPortDirection for CEPs from NEPs in that rule group.
+            Rules that are for different layerProtocolQualifiers or connectionSpecReferences are independent and provide options for connection in the rule group.
+            Some rules may apply to multiple connectionSpecReferences and all cepPortRoles and all cepDirections.";
+    }
+
+    /**************************
+    * package type-definitions
+    **************************/ 
+    identity TOPOLOGY_OBJECT_TYPE {
+    	base tapi-common:OBJECT_TYPE;
+        description "none";
+    }
+    identity TOPOLOGY_OBJECT_TYPE_TOPOLOGY {
+        base TOPOLOGY_OBJECT_TYPE;
+        description "none";
+    }
+    identity TOPOLOGY_OBJECT_TYPE_NODE {
+        base TOPOLOGY_OBJECT_TYPE;
+        description "none";
+    }
+    identity TOPOLOGY_OBJECT_TYPE_LINK {
+        base TOPOLOGY_OBJECT_TYPE;
+        description "none";
+    }
+    identity TOPOLOGY_OBJECT_TYPE_NODE_EDGE_POINT {
+        base TOPOLOGY_OBJECT_TYPE;
+        description "none";
+    }
+    identity TOPOLOGY_OBJECT_TYPE_NODE_RULE_GROUP {
+        base TOPOLOGY_OBJECT_TYPE;
+        description "none";
+    }
+    identity TOPOLOGY_OBJECT_TYPE_INTER_RULE_GROUP {
+        base TOPOLOGY_OBJECT_TYPE;
+        description "none";
+    }
+    identity TOPOLOGY_OBJECT_TYPE_RULE {
+        base TOPOLOGY_OBJECT_TYPE;
+        description "none";
+    }
+    identity PORT_ROLE_RULE_OPTION {
+        description "none";
+    }
+    identity PORT_ROLE_RULE_OPTION_SAME_ROLE {
+        base PORT_ROLE_RULE_OPTION;
+        description "The ports of the connection to which the rule applies must have the same role from the list in port role.";
+    }
+    identity PORT_ROLE_RULE_OPTION_DIFFERENT_ROLE {
+        base PORT_ROLE_RULE_OPTION;
+        description "The ports of the connection to which the rule applies must have different roles from the list in port role.";
+    }
+    identity PORT_ROLE_RULE_OPTION_ANY_ROLE {
+        base PORT_ROLE_RULE_OPTION;
+        description "The ports of the connection to which the rule applies may take any identified role.";
+    }
+    identity PORT_ROLE_RULE_OPTION_NOT_ROLE {
+        base PORT_ROLE_RULE_OPTION;
+        description "The ports of the connection to which the rule applies must not have any of the listed roles.";
+    }
+    identity SIGNAL_PROPERTY_VALUE_RULE {
+        description "none";
+    }
+    identity SIGNAL_PROPERTY_VALUE_RULE_SAME_VALUE {
+        base SIGNAL_PROPERTY_VALUE_RULE;
+        description "The signal property of the cep to which the rule applies must have the same value from the identied list.";
+    }
+    identity SIGNAL_PROPERTY_VALUE_RULE_ANY_VALUE {
+        base SIGNAL_PROPERTY_VALUE_RULE;
+        description "The signal property of the cep to which the rule applies may take any identified value.";
+    }
+    identity SIGNAL_PROPERTY_VALUE_RULE_DIFFERENT_VALUE {
+        base SIGNAL_PROPERTY_VALUE_RULE;
+        description "The signal property of the cep to which the rule applies each must have different values from the identified list.";
+    }
+    identity SIGNAL_PROPERTY_VALUE_RULE_NOT_VALUE {
+        base SIGNAL_PROPERTY_VALUE_RULE;
+        description "The signal property of the cep to which the rule applies must not have any of the identified values.";
+    }
+    grouping cost-characteristic {
+        leaf cost-name {
+            type string;
+            description "The cost characteristic will related to some aspect of the TopologicalEntity (e.g. $ cost, routing weight). This aspect will be conveyed by the costName.";
+        }
+        leaf cost-value {
+            type string;
+            description "The specific cost.";
+        }
+        leaf cost-algorithm {
+            type string;
+            description "The cost may vary based upon some properties of the TopologicalEntity. The rules for the variation are conveyed by the costAlgorithm.";
+        }
+        description "The information for a particular cost characteristic.";
+    }
+    grouping latency-characteristic {
+        leaf traffic-property-name {
+            type string;
+            description "The identifier of the specific traffic property to which the queuing latency applies.";
+        }
+        leaf fixed-latency-characteristic {
+            type string;
+            config false;
+            description "A TopologicalEntity suffers delay caused by the realization of the servers (e.g. distance related; FEC encoding etc.) along with some client specific processing. This is the total average latency effect of the TopologicalEntity";
+        }
+        leaf queing-latency-characteristic {
+            type string;
+            description "The specific queuing latency for the traffic property.";
+        }
+        leaf jitter-characteristic {
+            type string;
+            config false;
+            description "High frequency deviation from true periodicity of a signal and therefore a small high rate of change of transfer latency.
+                Applies to TDM systems (and not packet).";
+        }
+        leaf wander-characteristic {
+            type string;
+            config false;
+            description "Low frequency deviation from true periodicity of a signal and therefore a small low rate of change of transfer latency.
+                Applies to TDM systems (and not packet).";
+        }
+        description "Provides information on latency characteristic for a particular stated trafficProperty.";
+    }
+    grouping risk-characteristic {
+        leaf risk-characteristic-name {
+            type string;
+            description "The name of the risk characteristic. The characteristic may be related to a specific degree of closeness. 
+                For example a particular characteristic may apply to failures that are localized (e.g. to one side of a road) where as another characteristic may relate to failures that have a broader impact (e.g. both sides of a road that crosses a bridge).
+                Depending upon the importance of the traffic being routed different risk characteristics will be evaluated.";
+        }
+        leaf-list risk-identifier-list {
+            type string;
+            min-elements 1;
+            description "A list of the identifiers of each physical/geographic unit (with the specific risk characteristic) that is related to a segment of the TopologicalEntity.";
+        }
+        description "The information for a particular risk characteristic where there is a list of risk identifiers related to that characteristic.";
+    }
+    grouping validation-mechanism {
+        leaf validation-mechanism {
+            type string;
+            description "Name of mechanism used to validate adjacency";
+        }
+        leaf layer-protocol-adjacency-validated {
+            type string;
+            description "State of validatiion";
+        }
+        leaf validation-robustness {
+            type string;
+            description "Quality of validation (i.e. how likely is the stated validation to be invalid)";
+        }
+        description "Identifies the validation mechanism and describes the characteristics of that mechanism";
+    }
+    typedef forwarding-rule {
+        type enumeration {
+            enum MAY_FORWARD_ACROSS_GROUP {
+                description "NEPs referenced by the node rule group (or indirectly by the inter rule group between node rule groups) may have connections created between them unless some other rule overrides this.
+                    For an inter rule group points in a node rule group at one end of the inter rule group may be connected to points in an node rule group at an other end of the inter rule group.";
+            }
+            enum MUST_FORWARD_ACROSS_GROUP {
+                description "NEPs referenced by the node rule group (or indirectly by the inter rule group between node rule groups) MUST have connections created between them unless some other rule overrides this.
+                    For an inter rule group points in a node rule group at one end of the inter rule group MUST be connected to points in an node rule group at an other end of the inter rule group.";
+            }
+            enum CANNOT_FORWARD_ACROSS_GROUP {
+                description "NEPs referenced by the node rule group (or indirectly by the inter rule group between node rule groups) MUST NOT have connections created between them.
+                    For an inter rule group points in a node rule group at one end of the inter rule group MUST NOT be connected to points in an node rule group at an other end of the inter rule group.";
+            }
+            enum NO_STATEMENT_ON_FORWARDING {
+                description "The rule group makes no statement on forwarding.";
+            }
+            enum INTER_CONNECTION_CONTENTION {
+                description "Connections to NEPs in the rule group contend for resources based upon a constraint of some signal property.
+                    For example, each connection to a NEP in the group must use a different value of the signal property from all other connections to NEPs in the rule group.
+                    For example, each connection to a NEP in the group must use a same value of the signal property as all other connections to NEPs in the rule group. In this case the first connection created in the rule group sets the value and the group constraint is freed when the last connection is deleted.";
+            }
+        }
+        description "Rule that restricts the creation/deletion of an connection between points referenced by rule groups.";
+    }
+    typedef rule-type {
+        type enumeration {
+            enum FORWARDING {
+                description "The rule applies to the creation of connections.";
+            }
+            enum CAPACITY {
+                description "The rule applies to capacity limitations.";
+            }
+            enum COST {
+                description "The rule applies to the cost of the creation of connections.";
+            }
+            enum TIMING {
+                description "The rule applies to timing constraints across the group.";
+            }
+            enum RISK {
+                description "The rule applies to risk considerations across the group so as to express shared risk.";
+            }
+            enum GROUPING {
+                description "The rule is simply for grouping related to other rules.";
+            }
+        }
+        description "The focus of the rule.";
+    }
+    typedef restoration-policy {
+        type enumeration {
+            enum PER_DOMAIN_RESTORATION {
+                description "none";
+            }
+            enum END_TO_END_RESTORATION {
+                description "none";
+            }
+            enum NA {
+                description "none";
+            }
+        }
+        description "none";
+    }
+    typedef protection-type {
+        type enumeration {
+            enum NO_PROTECTION {
+                description "none";
+            }
+            enum ONE_PLUS_ONE_PROTECTION {
+                description "none";
+            }
+            enum ONE_PLUS_ONE_PROTECTION_WITH_DYNAMIC_RESTORATION {
+                description "none";
+            }
+            enum PERMANENT_ONE_PLUS_ONE_PROTECTION {
+                description "none";
+            }
+            enum ONE_FOR_ONE_PROTECTION {
+                description "none";
+            }
+            enum DYNAMIC_RESTORATION {
+                description "none";
+            }
+            enum PRE_COMPUTED_RESTORATION {
+                description "none";
+            }
+            enum ONE_PLUS_ONE_PROTECTION_WITH_PRE_COMPUTED_RESTORATION {
+                description "none";
+            }
+            enum ONE_FOR_N_PROTECTION {
+                description "none";
+            }
+            enum M_FOR_N_PROTECTION {
+                description "none";
+            }
+            enum ONE_FOR_ONE_BY_N {
+                description "none";
+            }
+        }
+        description "none";
+    }
+    grouping nep-layer-protocol-capability {
+        leaf layer-protocol-qualifier {
+            type tapi-common:layer-protocol-qualifier;
+            description "none";
+        }
+        leaf number-of-cep-instances {
+            type uint64;
+            description "none";
+        }
+        description "none";
+    }
+    typedef topology-object-type {
+        type identityref {
+            base TOPOLOGY_OBJECT_TYPE;
+        }
+        description "The list of TAPI Topology Object types/classes.";
+    }
+    grouping port-role-rule {
+        leaf-list port-role {
+            type port-role;
+            config false;
+            description "The role(s) of the port(s) considered in the rule.";
+        }
+        leaf-list port-role-rule {
+            type port-role-rule-option;
+            config false;
+            description "Where the rule references more than one port role or where there are rule intersections either as a result of overlay of rules or inter rule group usage indicates role matching criteria for a connection following the rules.
+                For example if two port roles, 'a' and 'b', are listed and the port role rule is 'different', this means that a connection connecting points in that group must have port roles that are different for each CEP in that group.
+                In the example if a connection can have n ports of role 'a' and m ports of role 'b' then a maximum of two ports can be drawn from the NEPs of the group and where there are two, one must be role 'a' and one must be role 'b'.";
+        }
+        description "Constrains which port roles the rule applies to.";
+    }
+    typedef port-role {
+        type string;
+        description "The role of a port in the context of the connection spec referenced in the rule.";
+    }
+    typedef port-role-rule-option {
+        type identityref {
+            base PORT_ROLE_RULE_OPTION;
+        }
+        description "Indicates how to interpret the port role list.";
+    }
+    grouping connection-spec-reference {
+        leaf connection-spec-name {
+            type string;
+            config false;
+            description "The name of the connection type spec.
+                This can be used as a reference to a paper document where full formal machine interpretable specs are not supported.";
+        }
+        leaf connection-spec {
+            type tapi-common:uuid;
+            description "The reference to the formal connection type spec.";
+        }
+        description "The definition of the type of connection.
+            This definition will explain the flows in the connections and how they relate to the port roles.";
+    }
+    typedef signal-property-value-rule {
+        type identityref {
+            base SIGNAL_PROPERTY_VALUE_RULE;
+        }
+        description "Indicates how to interpret the signal property value rule.";
+    }
+    grouping signal-property-rule {
+        leaf signal-property-name {
+            type string;
+            config false;
+            description "The name of the signal property to which the rule applies.";
+        }
+        leaf signal-property-value-rule {
+            type signal-property-value-rule;
+            config false;
+            description "Indicates how the signal properties should be accounted for.";
+        }
+        leaf-list applicable-signal-value {
+            type string;
+            config false;
+            description "Specific values of the signal property to which the rule applies.";
+        }
+        leaf number-of-signal-values {
+            type uint64;
+            config false;
+            description "The number of instances of this specific property that can be supported by the group.";
+        }
+        description "Rule related to an identified signal property.";
+    }
+    grouping resilience-type {
+        leaf restoration-policy {
+            type restoration-policy;
+            description "none";
+        }
+        leaf protection-type {
+            type protection-type;
+            description "none";
+        }
+        description "none";
+    }
+
+    /**************************
+    * package interfaces
+    **************************/ 
+    rpc get-topology-details {
+        description "none";
+        input {
+            leaf topology-id {
+                type tapi-common:uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+        }
+        output {
+            container topology {
+                uses topology;
+                description "none";
+            }
+        }
+    }
+    rpc get-node-details {
+        description "none";
+        input {
+            leaf topology-id {
+                type tapi-common:uuid;
+                description "UUID of the parent Topology: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+            leaf node-id {
+                type tapi-common:uuid;
+                description "UUID of the Node: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+        }
+        output {
+            container node {
+                uses node;
+                description "none";
+            }
+        }
+    }
+    rpc get-node-edge-point-details {
+        description "none";
+        input {
+            leaf topology-id {
+                type tapi-common:uuid;
+                description "UUID of the parent Node's Topology: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+            leaf node-id {
+                type tapi-common:uuid;
+                description "UUID of the parent Node: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+            leaf node-edge-point-id {
+                type tapi-common:uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+        }
+        output {
+            container node-edge-point {
+                uses node-edge-point;
+                description "none";
+            }
+        }
+    }
+    rpc get-link-details {
+        description "none";
+        input {
+            leaf topology-id {
+                type tapi-common:uuid;
+                description "UUID of the parent Topology: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+            leaf link-id {
+                type tapi-common:uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+        }
+        output {
+            container link {
+                uses link;
+                description "none";
+            }
+        }
+    }
+    rpc get-topology-list {
+        description "none";
+        output {
+            list topology {
+                key 'uuid';
+                uses topology;
+                description "none";
+            }
+        }
+    }
+
+}
diff --git a/models/tapi/tapi-virtual-network@2019-03-31.yang b/models/tapi/tapi-virtual-network@2019-03-31.yang
new file mode 100644
index 0000000000000000000000000000000000000000..10a82aa0e00c930d21a865faac112162b3206efd
--- /dev/null
+++ b/models/tapi/tapi-virtual-network@2019-03-31.yang
@@ -0,0 +1,325 @@
+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
+        Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved.
+        License: This module is distributed under the Apache License 2.0
+        - 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.";
+    revision 2019-03-31 {
+        description "ONF Transport API version 2.2-RC1.
+                   Changes included in this TAPI release (v2.2) are listed in
+                  <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.2.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.2.0/UML>";
+    }
+    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.1/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 references
+    **************************/
+    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";
+        }
+        container schedule {
+            uses tapi-common:time-range;
+            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:global-class;
+        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 type-definitions
+    **************************/ 
+    identity VIRTUAL_NETWORK_OBJECT_TYPE {
+    	base tapi-common:OBJECT_TYPE;
+        description "none";
+    }
+    identity VIRTUAL_NETWORK_OBJECT_TYPE_VIRTUAL_NETWORK_SERVICE {
+        base VIRTUAL_NETWORK_OBJECT_TYPE;
+        description "none";
+    }
+    identity VIRTUAL_NETWORK_OBJECT_TYPE_VIRTUAL_NETWORK_SERVICE_END_POINT {
+        base VIRTUAL_NETWORK_OBJECT_TYPE;
+        description "none";
+    }
+    typedef virtual-network-object-type {
+        type identityref {
+            base VIRTUAL_NETWORK_OBJECT_TYPE;
+        }
+        description "The list of TAPI Virtual Network Object types/classes.";
+    }
+
+    /**************************
+    * package interfaces
+    **************************/ 
+    rpc create-virtual-network-service {
+        description "none";
+        input {
+            leaf uuid {
+                type tapi-common:uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+            list name {
+                key 'value-name';
+                uses tapi-common:name-and-value;
+                description "List of names. This value is unique in some namespace but may change during the life of the entity.
+                    A name carries no semantics with respect to the purpose of the entity.";
+            }
+            list end-point {
+                key 'local-id';
+                min-elements 2;
+                uses virtual-network-service-end-point;
+                description "none";
+            }
+            container vnw-constraint {
+                uses virtual-network-constraint;
+                description "none";
+            }
+            container schedule {
+                uses tapi-common:time-range;
+                description "none";
+            }
+        }
+        output {
+            container service {
+                uses virtual-network-service;
+                description "none";
+            }
+        }
+    }
+    rpc delete-virtual-network-service {
+        description "none";
+        input {
+            leaf uuid {
+                type tapi-common:uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+        }
+        output {
+            container service {
+                uses virtual-network-service;
+                description "none";
+            }
+        }
+    }
+    rpc get-virtual-network-service-details {
+        description "none";
+        input {
+            leaf uuid {
+                type tapi-common:uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.
+                    An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+        }
+        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";
+            }
+        }
+    }
+
+}
diff --git a/models/tapi/yuma-ncx.yang b/models/tapi/yuma-ncx.yang
new file mode 100644
index 0000000000000000000000000000000000000000..5805b7e2678e94753e1c78c075372a55ea7dbb90
--- /dev/null
+++ b/models/tapi/yuma-ncx.yang
@@ -0,0 +1,392 @@
+module yuma-ncx {
+  namespace "http://netconfcentral.org/ns/yuma-ncx";
+  prefix ncx;
+
+  organization
+    "Netconf Central";
+  contact
+    "Andy Bierman <andy at netconfcentral.org>";
+  description
+    "This module contains definitions for Yuma Netconf extensions.
+
+     Some extensions are used to control yangdump translation
+     format.  Some are used for CLI parsing in yangcli.
+
+     These elements may be present in appinfo elements,
+     used in YANG to XSD translation.
+
+     Copyright (c) 2008 - 2013 Andy Bierman and the persons
+     identified as authors of the code.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the BSD 3-Clause License
+     http://opensource.org/licenses/BSD-3-Clause";
+
+  revision 2015-10-16 {
+    description
+      "Clarified ncx:password behavior.";
+  }
+  revision 2013-09-23 {
+    description
+      "Added last-modified and etag meta-data to root container.";
+  }
+  revision 2013-05-25 {
+    description
+      "Fixed bug in user-write description.
+       Change sub-stmt order to canonical order.";
+  }
+  revision 2012-11-10 {
+    description
+      "Added last-modified attribute definition.";
+  }
+  revision 2012-01-13 {
+    description
+      "Added user-write extension.";
+  }
+  revision 2011-09-30 {
+    description
+      "Added default-parm-equals and sil-delete-children-first
+       extensions.";
+  }
+  revision 2009-12-21 {
+    description
+      "Moved secure and very-secure extensions to yuma-nacm.";
+  }
+  revision 2009-06-12 {
+    description
+      "Add sequence-id element for notifications";
+  }
+  revision 2009-04-10 {
+    description
+      "Removed rpc-type extension; use 'nacm:secure' instead";
+  }
+  revision 2008-08-23 {
+    description
+      "Added abstract extension.  Marked all objects as abstract
+       so they will not be included in the NETCONF database.";
+  }
+  revision 2008-08-01 {
+    description
+      "Added password, hidden, xsdlist, and root extensions.";
+  }
+  revision 2008-04-16 {
+    description
+      "Added metadata and rpc-type extensions.";
+  }
+  revision 2008-03-21 {
+    description
+      "Added no-duplicates extension.";
+  }
+  revision 2008-02-21 {
+    description
+      "Initial revision.";
+  }
+
+  extension abstract {
+    description
+      "Used with object definitions to indicate that they
+       do not represent CLI or NETCONF configuration database
+       data instances.  Instead, the node is simply an object
+       identifier, an 'error-info' extension, or some other
+       abstract data structure.";
+  }
+
+  extension cli {
+    description
+      "Used within a container definition to indicate it is
+       only used as a conceptual container for a set of CLI parameters.
+       A top-level container containing this extension will not
+       be included in any NETCONF configuration databases.";
+  }
+
+  extension default-parm {
+    argument parm {
+      yin-element true;
+    }
+    description
+      "Used within a CLI container or rpc definition to specify a
+       leaf parameter within the CLI container or rpc input
+       section, that is used as the default if no parameter name
+       is entered.
+
+       These values must not begin with a dash (-) or
+       double dash (--) sequence or they will be mistaken
+       for CLI parameter names.
+
+       This option is somewhat risky because any unrecognized
+       parameter without any prefix (- or --) will be tried
+       as the default parameter type, instead of catching
+       the unknown parameter error.  It can also be useful though,
+       for assigning file name parameters through shell expansion,
+       or if there is only one parameter.";
+  }
+
+  extension default-parm-equals-ok {
+    description
+      "Used within a CLI container or rpc definition to specify a
+       leaf parameter within the CLI container or rpc input
+       section, that is used as the default if no parameter name
+       is entered.
+
+       This can be used in addition to ncx:default-parm to
+       allow an equals sign '=' in the default parm string value.
+
+       This option is quite risky because any unrecognized
+       parameter without any prefix (- or --) will be tried
+       as the default parameter type, instead of catching
+       the unknown parameter error.  This includes strings containing
+       an equals sign, so an unknown parameter error will never
+       be generated.
+
+            rpc foo {
+              input {
+                ncx:default-parm a;
+                ncx:default-parm-equals-ok;
+                leaf a { type string; }
+                leaf b { type int32; }
+              }
+            }
+
+            yangcli> foo bogus-parm=fred
+
+       This will interpreted as if parameter 'a' were entered:
+
+            yangcli> foo a='bogus-parm=fred'
+      ";
+  }
+
+  extension hidden {
+    description
+      "Used to prevent publication of a YANG data object.
+       Will be ignored for typedefs and other constructs.
+       If present, that node and any sub-nodes will be ignored
+       when generating HTML documentation or cYANG output.
+
+       The yangdump -f=copy mode will not be affected by
+       this extension. ";
+  }
+
+  extension metadata {
+    argument syntax-string {
+      yin-element true;
+    }
+    description
+      "Used to define an XML attribute to be associated with a
+       data-def-stmt node.  Only optional metadata can be
+       defined.  Errors for missing XML attributes (except
+       as specified by the YANG language) will not be
+       checked automatically.
+
+       The syntax string has the following format:
+
+          [prefix:]typename  attribute-name
+
+       Any YANG typedef of builtin type can be specified as
+       the type name, except 'empty'.
+
+       Example from get command in netconf.yang:
+          ncx:metadata 'FilterType type';   ";
+  }
+
+  extension no-duplicates {
+    description
+      "Used to indicate that no duplicate values are allowed
+       in an ncx:xsdlist leaf or leaf-list object.";
+  }
+
+  extension password {
+    description
+      "Used to indicate the data type for the leaf is really
+       a password.
+
+       For yangcli-pro, this extension causes a password
+       to be printed as ****.
+
+       For netconfd-pro this extension has the following
+       effects:
+
+        - In subtree filtering, a content-match node will
+          skip over the node and not attempt to compare
+          it to the content-match value.
+
+        - In XPath filtering, a predicate comparison will
+          skip over the node and not attempt to compare
+          it to the content-match value.
+
+        - Logging output that uses val_dump_value or
+          val_sprintf_simval_nc will print **** instead
+          of the password value.
+      ";
+  }
+
+  extension root {
+    description
+      "Used within a container definition to indicate it is
+       really a root container for a conceptual NETCONF database,
+       instead of just an empty container.  This is needed
+       for yuma to correctly process any RPC method
+       that contains a 'config' parameter.";
+  }
+
+  extension sil-delete-children-first {
+    description
+      "Used within a container or list definition to indicate
+       that the SIL callbacks for descendant nodes should
+       be invoked first, when a data node instance of
+       the object containing this extension is deleted.
+
+       Normally, the parent node is expected to delete all its
+       own sub-structures when the SIL edit callback is
+       invoked.  If this extension is present, then any
+       SIL callbacks for any of the child nodes will be
+       invoked first instead.
+
+       If a child node is a list or a container, and
+       it also contains an 'ncx:sil-delete-children-first'
+       extension, then its children will be checked first.
+
+       The SIL edit callback will not be invoked for leaf,
+       leaf-list, or anyxml descendant nodes in this mode.
+       They will only will called if their parent node
+       is not getting deleted.
+
+         container foo {
+           ncx:sil-delete-children-first;
+           list foos {
+             ncx:sil-delete-children-first;
+             key a;
+             leaf a { type string; }
+             container b {
+               list c { ... }
+             }
+             leaf d { type empty; }
+           }
+         }
+
+       In this example, assume node /foo gets deleted.
+       Then the SIL edit callbacks would be done as follows:
+
+       1) /foo/foos[a='n']/b   (called for row 'n' of /foo/foos)
+       2) /foo/foos[a='n']     (called for row 'n' of /foo/foos)
+       3) repeat (1,2) until all rows in /foo/foos are deleted
+       4) /foo
+
+       Note that the SIL edit callback is not done for list
+       /foo/foos[a='n']/b/c because this extension is
+       not present in container '/foo/foos/b'.
+
+       Note that the SIL edit callback is not done for
+       nodes /foo/foos[a='n']/a or /foo/foos[a='n']/d because
+       they are leafs.
+      ";
+  }
+
+  extension xsdlist {
+    argument type {
+      yin-element true;
+    }
+    description
+      "Used to indicate the leaf string type is really an
+       XSD list, which is a series of whitespace separated
+       strings. The type argument represents the data type
+       to use for the list members, for validation purposes.
+
+       Allowed to be present within the type sub-section
+       for a string.";
+  }
+
+  extension xpath {
+    description
+      "Used to indicate that the content of a data type
+       is an XPath expression.  This is needed to properly
+       evaluate the namespace prefixes within the expression.
+
+       The xpath extension may appear within the type-stmt,
+       within a typedef, leaf, or leaf-list.  The builtin
+       data type must be 'string', or the 'xpath' extension
+       will be ignored.
+
+       All data using the 'instance-identifier' built-in type
+       will automatically be processed as an XPath string,
+       so the xpath extension is not needed in that case.";
+  }
+
+  extension qname {
+    description
+      "Used to indicate that the content of a data type
+       is a Qualified Name.  This is needed to properly
+       evaluate the namespace prefix, if used.
+
+       The qname extension may appear within the type-stmt,
+       within a typedef, leaf, or leaf-list.  The builtin
+       data type must be 'string', or the 'qname' extension
+       will be ignored.";
+  }
+
+  extension schema-instance {
+    description
+      "Used to indicate that the typedef or type statement
+       for a string data type really identifies a
+       special schema-instance node, not a generic string.
+
+       A schema-instance value string is an unrestricted YANG
+       instance-identifier expression.  All the same rules
+       as an instance-identifier apply except:
+
+           * predicates for keys are optional;
+             The dataRule will apply to all instances
+             of any missing key leaf predicate.
+
+       This extension will be ignored unless it is present
+       in the type-stmt of a typedef-stmt, leaf-stmt,
+       or leaf-list-stmt, or directly within a leaf-stmt or
+       leaf-list-stmt.";
+  }
+
+  extension user-write {
+    argument exceptions {
+      yin-element true;
+    }
+    description
+      "Used within database configuration data definition
+       statements to control user write access to the
+       database object containing this statement.
+
+       The 'exceptions' argument is a list of operations
+       that users are permitted to invoke for the specified node.
+       These permissions will over-ride all NACM access control rules,
+       even if NACM is disabled.
+
+       This extension does not apply to descendant nodes!
+       This extension has no effect if config-stmt is false!
+
+       The following values are supported:
+
+         * create : allow users to create instances of the object
+         * update : allow users to modify instances of the object
+         * delete : allow users to delete instances of the object
+
+       To dis-allow all user access, provide an empty string
+       for the 'exceptions' argument (user-write '';)
+
+       To allow only create and delete user access, provide
+       the string 'create delete' for the 'exceptions' parameter.
+       Use this for parameters that cannot be changed once they
+       are set.
+
+       Providing all 3 parameters has the same affect as not using
+       this extension at all, but can be used anyway.
+
+       leaf user-write {
+         type bits {
+           bit create;
+           bit update;
+           bit delete;
+         }
+         default 'create update delete';
+         description 'equivalent YANG definition';
+       }
+      ";
+  }
+}