diff --git a/models/tapi/src/main/yang/tapi-common@2018-12-10.yang b/models/tapi/src/main/yang/tapi-common@2018-12-10.yang
new file mode 100755
index 0000000..b5fecaa
--- /dev/null
+++ b/models/tapi/src/main/yang/tapi-common@2018-12-10.yang
@@ -0,0 +1,683 @@
+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
+        - The TAPI YANG models included in this TAPI release are a *normative* part of the TAPI SDK.
+        - The YANG specifications have been generated from the corresponding UML model using the [ONF EAGLE UML2YANG mapping tool]
+          <https://github.com/OpenNetworkingFoundation/EagleUmlYang>
+          and further edited manually to comply with the [ONF IISOMI UML2YANG mapping guidelines]
+          <https://wiki.opennetworking.org/display/OIMT/UML+-+YANG+Guidelines>
+        - Status of YANG model artifacts can be determined by referring to the corresponding UML artifacts.
+          As described in the UML models, some artifacts are considered *experimental*, and thus the corresponding YANG artifacts.
+        - The ONF TAPI release process does not guarantee backward compatibility of YANG models across major versions of TAPI releases.
+          The YANG model backward compatibility criteria are outlined in section 11 of <https://tools.ietf.org/html/rfc7950>.
+          YANG models included in this release may not be backward compatible with previous TAPI releases.
+        Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved.
+        License: This module is distributed under the Apache License 2.0";
+    revision 2018-12-10 {
+        description "ONF Transport API version 2.1.1.
+                   Changes included in this TAPI release (v2.1.1) are listed in
+                   <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.1.1.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 7950, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.1.0/UML>";
+    }
+    revision 2018-10-16 {
+        description "ONF Transport API version 2.1.0.
+                   Changes included in this TAPI release (v2.1.0) are listed in
+                   <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.1.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 7950, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.1.0/UML>";
+    }
+    revision 2018-03-07 {
+        description "ONF Transport API version 2.0.2
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.2.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.2/UML>";
+    }
+    revision 2018-02-16 {
+        description "ONF Transport API version 2.0.1
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.1.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.1/UML>";
+    }
+    revision 2018-01-02 {
+        description "ONF Transport API version 2.0.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.0/UML>";
+    }
+
+   /**************************
+    * definitions of refrences
+    **************************/
+    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 "none";
+        }
+        leaf operational-state {
+            type operational-state;
+            config false;
+            description "none";
+        }
+        leaf lifecycle-state {
+            type lifecycle-state;
+            config false;
+            description "none";
+        }
+        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. A property of an entity with a value that 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 "The TAPI GlobalComponent 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 "none";
+        }
+        description "Provides state attributes for an entity that has lifeccycle aspects only.";
+    }
+    grouping local-class {
+        leaf local-id {
+            type string;
+            description "none";
+        }
+        list name {
+            key 'value-name';
+            uses name-and-value;
+            description "List of names. A property of an entity with a value that 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 "The TAPI GlobalComponent 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 operational-state-pac {
+        leaf operational-state {
+            type operational-state;
+            config false;
+            description "none";
+        }
+        leaf lifecycle-state {
+            type lifecycle-state;
+            config false;
+            description "none";
+        }
+        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 "The Network Control Domain (NCD) object class represents the scope of control that a particular SDN controller has with respect to a particular network, (i.e., encompassing a designated set of interconnected (virtual) network elements).";
+    }
+    grouping resource-spec {
+        uses global-class;
+        description "none";
+    }
+    grouping service-spec {
+        uses global-class;
+        description "none";
+    }
+    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 "none";
+        }
+        uses resource-spec;
+        uses admin-state-pac;
+        uses 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 capacity-pac {
+        container total-potential-capacity {
+            config false;
+            uses capacity;
+            description "An optimistic view of the capacity of the TopologicalEntity assuming that any shared capacity is available to be taken.";
+        }
+        container available-capacity {
+            config false;
+            uses capacity;
+            description "Capacity available to be assigned.";
+        }
+        description "The TopologicalEntity derives capacity from the underlying realization.
+            A TopologicalEntity may be an abstraction and virtualization of a subset of the underlying capability offered in a view or may be directly reflecting the underlying realization.
+            A TopologicalEntity may be directly used in the view or may be assigned to another view for use.
+            The clients supported by a multi-layer TopologicalEntity may interact such that the resources used by one client may impact those available to another. This is derived from the LTP spec details.
+            Represents the capacity available to user (client) along with client interaction and usage.
+            A TopologicalEntity may reflect one or more client protocols and one or more members for each profile.";
+    }
+    grouping termination-pac {
+        leaf termination-direction {
+            type termination-direction;
+            config false;
+            description "The overall directionality of the LP.
+                - A BIDIRECTIONAL LP will have some SINK and/or SOURCE flowss.
+                - A SINK LP can only contain elements with SINK flows or CONTRA_DIRECTION_SOURCE flows
+                - A SOURCE LP 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 "Each transport layer is represented by a LayerProtocol (LP) instance. The LayerProtocol instances it can be used for controlling termination and monitoring functionality.
+            It can also be used for controlling the adaptation (i.e. encapsulation and/or multiplexing of client signal), tandem connection monitoring, traffic conditioning and/or shaping functionality at an intermediate point along a connection.
+            Where the client – server relationship is fixed 1:1 and immutable, the layers can be encapsulated in a single LTP instance. Where the is a n:1 relationship between client and server, the layers must be split over two separate instances of LTP. ";
+    }
+
+   /**************************
+    * package type-definitions
+    **************************/
+    identity LAYER_PROTOCOL_QUALIFIER {
+        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 planned state for all other clients.";
+            }
+            enum POTENTIAL_BUSY {
+                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 planned state for all 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).";
+            }
+            enum OUTPUT {
+                description "The Port only has definition for a flow out of the Forwarding entity (i.e. an egress flow).";
+            }
+            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 TopologicalEntity in MB/s. In case of bandwidthProfile, this is expected to same as the committedInformationRate.";
+        }
+        container bandwidth-profile {
+            uses bandwidth-profile;
+            description "none";
+        }
+        description "Information on capacity of a particular TopologicalEntity.";
+    }
+    grouping bandwidth-profile {
+        leaf bw-profile-type {
+            type bandwidth-profile-type;
+            description "none";
+        }
+        container committed-information-rate {
+            uses capacity-value;
+            description "none";
+        }
+        container committed-burst-size {
+            uses capacity-value;
+            description "none";
+        }
+        container peak-information-rate {
+            uses capacity-value;
+            description "none";
+        }
+        container peak-burst-size {
+            uses capacity-value;
+            description "none";
+        }
+        leaf color-aware {
+            type boolean;
+            description "none";
+        }
+        leaf coupling-flag {
+            type boolean;
+            description "none";
+        }
+        description "none";
+    }
+    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";
+    }
+    typedef bandwidth-profile-type {
+        type enumeration {
+            enum MEF_10.x {
+                description "none";
+            }
+            enum RFC_2697 {
+                description "none";
+            }
+            enum RFC_2698 {
+                description "none";
+            }
+            enum RFC_4115 {
+                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
+            ";
+    }
+
+   /**************************
+    * package interfaces
+    **************************/
+    rpc get-service-interface-point-details {
+        description "none";
+        input {
+            leaf sip-id-or-name {
+                type string;
+                description "none";
+            }
+        }
+        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 sip-id-or-name {
+                type string;
+                description "none";
+            }
+            leaf state {
+                type administrative-state;
+                description "none";
+            }
+        }
+    }
+}
