Add TAPI Topology simulated network function type.
[sim/o1-interface.git] / ntsimulator / deploy / smo-nts-ng-topology-server / yang / tapi-equipment@2020-04-23.yang
diff --git a/ntsimulator/deploy/smo-nts-ng-topology-server/yang/tapi-equipment@2020-04-23.yang b/ntsimulator/deploy/smo-nts-ng-topology-server/yang/tapi-equipment@2020-04-23.yang
new file mode 100644 (file)
index 0000000..d99fdea
--- /dev/null
@@ -0,0 +1,731 @@
+module tapi-equipment {\r
+    namespace "urn:onf:otcc:yang:tapi-equipment";\r
+    prefix tapi-equipment;\r
+    import tapi-common {\r
+        prefix tapi-common;\r
+    }\r
+    import tapi-topology {\r
+        prefix tapi-topology;\r
+    }\r
+    organization "ONF OTCC (Open Transport Configuration & Control) Project";\r
+    contact "\r
+         Project Web: <https://urldefense.com/v3/__https://wiki.opennetworking.org/display/OTCC/TAPI__;!!OSsGDw!d_dJlNtYLmD585It0DKukzB2TS5KZqBZQ-pdI1D-6c6c5hRDotd6W87JJX8d$ >\r
+         Project List: <mailto:transport-api@opennetworking.org>\r
+         Editor: Karthik Sethuraman <mailto:karthik.sethuraman@necam.com>\r
+         Andrea Mazzini <mailto:andrea.mazzini@nokia.com>\r
+         Arturo Mayoral <mailto:arturo.mayoral@telefonica.com>\r
+         Nigel Davis <mailto:ndavis@ciena.com>";\r
+    description "\r
+        This module contains TAPI Equipment Model definitions.\r
+        Source: TapiEquipment.uml\r
+        - The TAPI YANG models included in this TAPI release are a *normative* part of the TAPI SDK.\r
+        - The YANG specifications have been generated from the corresponding UML model using the [ONF EAGLE UML2YANG mapping tool]\r
+        <https://github.com/OpenNetworkingFoundation/EagleUmlYang>\r
+        and further edited manually to comply with the [ONF IISOMI UML2YANG mapping guidelines]\r
+        <https://wiki.opennetworking.org/display/OIMT/UML+-+YANG+Guidelines>\r
+        - Status of YANG model artifacts can be determined by referring to the corresponding UML artifacts.\r
+        As described in the UML models, some artifacts are considered *experimental*, and thus the corresponding YANG artifacts.\r
+        - The ONF TAPI release process does not guarantee backward compatibility of YANG models across major versions of TAPI releases.\r
+        The YANG model backward compatibility criteria are outlined in section 11 of <https://tools.ietf.org/html/rfc7950>.\r
+        YANG models included in this release may not be backward compatible with previous TAPI releases.\r
+        Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved.\r
+        License: This module is distributed under the Apache License 2.0.";\r
+    revision 2020-04-23 {\r
+        description "ONF Transport API version 2.1.3.\r
+                   Changes included in this TAPI release (v2.1.3) are listed in\r
+                   <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop_v2_1/CHANGE_LOG/change-log.2.1.3.md>";\r
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 7950, RFC 6087 and ONF TAPI UML model\r
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.1.0/UML>";\r
+    }\r
+    revision 2019-07-16 {\r
+        description "ONF Transport API version 2.1.2.\r
+                   Changes included in this TAPI release (v2.1.2) are listed in\r
+                   <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop_v2_1/CHANGE_LOG/change-log.2.1.2.md>";\r
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 7950, RFC 6087 and ONF TAPI UML model\r
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.1.0/UML>";\r
+    }\r
+    revision 2018-12-10 {\r
+        description "ONF Transport API version 2.1.1.\r
+                   Changes included in this TAPI release (v2.1.1) are listed in\r
+                   <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.1.1.md>";\r
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 7950, RFC 6087 and ONF TAPI UML model\r
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.1.0/UML>";\r
+    }\r
+    revision 2018-10-16 {\r
+        description "ONF Transport API version 2.1.0.\r
+                   Changes included in this TAPI release (v2.1.0) are listed in\r
+                   <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.1.0.md>";\r
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 7950, RFC 6087 and ONF TAPI UML model\r
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.1.0/UML>";\r
+    }\r
+    revision 2018-03-07 {\r
+        description "ONF Transport API version 2.0.2\r
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.\r
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.2.md>";\r
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model\r
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.2/UML>";\r
+    }\r
+    revision 2018-02-16 {\r
+        description "ONF Transport API version 2.0.1\r
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.\r
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.1.md>";\r
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model\r
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.1/UML>";\r
+    }\r
+    revision 2018-01-02 {\r
+        description "ONF Transport API version 2.0.0\r
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.\r
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.0.md>";\r
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model\r
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.0/UML>";\r
+    }\r
+    augment "/tapi-common:context" {\r
+        container physical-context {\r
+            uses physical-context;\r
+            description "none";\r
+        }\r
+        description "none";\r
+    }\r
+    augment "/tapi-common:context/tapi-topology:topology-context/tapi-topology:topology/tapi-topology:node" {\r
+        container supporting-physical-span {\r
+            uses supporting-physical-span;\r
+            description "none";\r
+        }\r
+        description "none";\r
+    }\r
+    augment "/tapi-common:context/tapi-topology:topology-context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point" {\r
+        container supporting-access-port {\r
+            uses supporting-access-port;\r
+            description "none";\r
+        }\r
+        description "none";\r
+    }\r
+   /**************************\r
+    * definitions of references\r
+    **************************/\r
+    grouping device-ref {\r
+        leaf device-uuid {\r
+               type leafref {\r
+                path '/tapi-common:context/tapi-equipment:physical-context/tapi-equipment:device/tapi-equipment:uuid';\r
+            }\r
+            description "none";\r
+        }\r
+        description "none";\r
+    }\r
+    grouping equipment-ref {\r
+       uses device-ref;\r
+        leaf equipment-uuid {\r
+               type leafref {\r
+                path '/tapi-common:context/tapi-equipment:physical-context/tapi-equipment:device/tapi-equipment:equipment/tapi-equipment:uuid';\r
+            }\r
+            description "none";\r
+        }\r
+        description "none";\r
+    }\r
+    grouping equipment-holder-ref {\r
+       uses equipment-ref;\r
+        leaf equipment-holder-uuid {\r
+               type leafref {\r
+                path '/tapi-common:context/tapi-equipment:physical-context/tapi-equipment:device/tapi-equipment:equipment/tapi-equipment:contained-holder/tapi-equipment:uuid';\r
+            }\r
+            description "none";\r
+        }\r
+        description "none";\r
+    }\r
+    grouping access-port-ref {\r
+       uses device-ref;\r
+        leaf access-port-uuid {\r
+               type leafref {\r
+                path '/tapi-common:context/tapi-equipment:physical-context/tapi-equipment:device/tapi-equipment:access-port/tapi-equipment:uuid';\r
+            }\r
+            description "none";\r
+        }\r
+        description "none";\r
+    }\r
+    grouping physical-span-ref {\r
+        leaf physical-span-uuid {\r
+               type leafref {\r
+                path '/tapi-common:context/tapi-equipment:physical-context/tapi-equipment:physical-span/tapi-equipment:uuid';\r
+            }\r
+            description "none";\r
+        }\r
+        description "none";\r
+    }\r
+    grouping abstract-strand-ref {\r
+       uses physical-span-ref;\r
+        leaf abstract-strand-local-id {\r
+               type leafref {\r
+                path '/tapi-common:context/tapi-equipment:physical-context/tapi-equipment:physical-span/tapi-equipment:abstract-strand/tapi-equipment:local-id';\r
+            }\r
+            description "none";\r
+        }\r
+        description "none";\r
+    }\r
+    /**************************\r
+    * package type-definitions\r
+    **************************/ \r
+    identity CONNECTOR_AND_PIN_ORIENTATION {\r
+        description "none";\r
+    }\r
+    identity CONNECTOR_AND_PIN_ORIENTATION_MALE {\r
+        base CONNECTOR_AND_PIN_ORIENTATION;\r
+        description "The connecting elements are dominantly protrusions.";\r
+    }\r
+    identity CONNECTOR_AND_PIN_ORIENTATION_FEMALE {\r
+        base CONNECTOR_AND_PIN_ORIENTATION;\r
+        description "The connecting elements are dominantly indentations.";\r
+    }\r
+    identity CONNECTOR_AND_PIN_ORIENTATION_SYMMETRIC_NEUTRAL {\r
+        base CONNECTOR_AND_PIN_ORIENTATION;\r
+        description "The pin (and housing) orientation combination is such that it is symmetric so a connector is compatible with itself.\r
+            The connecting element may be a surface rather than protrusions or indentations.";\r
+    }\r
+    identity EQUIPMENT_CATEGORY {\r
+        description "none";\r
+    }\r
+    identity EQUIPMENT_CATEGORY_SUBRACK {\r
+        base EQUIPMENT_CATEGORY;\r
+        description "An assembly with holders designed to accommodate CIRCUIT_PACKs. \r
+            The assembly is designed to be mounted in a RACK.";\r
+    }\r
+    identity EQUIPMENT_CATEGORY_CIRCUIT_PACK {\r
+        base EQUIPMENT_CATEGORY;\r
+        description "An assembly with connectors compatible with those in a holder.\r
+            The assembly is designed to be mounted in a holder (SLOT) of a SUBRACK.\r
+            May also support holders (SLOTs) for SMALL_FORMFACTOR_PLUGGABLEs.";\r
+    }\r
+    identity EQUIPMENT_CATEGORY_SMALL_FORMFACTOR_PLUGGABLE {\r
+        base EQUIPMENT_CATEGORY;\r
+        description "A small assembly (compared to a CIRCUIT_PACK) with connectors compatible with those in a holder.\r
+            The assembly is designed to be mounted in a holder (SLOT) of a CIRCUIT_PACK or STAND_ALONE_UNIT.";\r
+    }\r
+    identity EQUIPMENT_CATEGORY_STAND_ALONE_UNIT {\r
+        base EQUIPMENT_CATEGORY;\r
+        description "An assembly with connectors for cabling and potentially with holders.\r
+            The assembly is designed to be mounted in a freeform environment (on a table or simple mechanical cabinet).\r
+            May support holders (SLOTs) for CIRCUIT_PACKs or for SMALL_FORMFACTOR_PLUGGABLEs.";\r
+    }\r
+    identity EQUIPMENT_CATEGORY_RACK {\r
+        base EQUIPMENT_CATEGORY;\r
+        description "A mechanical assembly with cabling and predefined mounting points for particular SUBRACK types.\r
+            The assembly is designed to be mounted on the floor in a row with other RACKs.";\r
+    }\r
+    identity HOLDER_CATEGORY {\r
+        description "none";\r
+    }\r
+    identity HOLDER_CATEGORY_SLOT {\r
+        base HOLDER_CATEGORY;\r
+        description "A guided holder with fixed connectors.\r
+            The guided holder is designed to take a particular form of CIRCUIT_PACK or SMALL_FORMFACTOR_PLUGGABLE";\r
+    }\r
+    identity EQUIPMENT_OBJECT_TYPE {\r
+        description "none";\r
+    }\r
+    identity EQUIPMENT_OBJECT_TYPE_DEVICE {\r
+        base EQUIPMENT_OBJECT_TYPE;\r
+        description "none";\r
+    }\r
+    identity EQUIPMENT_OBJECT_TYPE_ACCESS_PORT {\r
+        base EQUIPMENT_OBJECT_TYPE;\r
+        description "none";\r
+    }\r
+    identity EQUIPMENT_OBJECT_TYPE_EQUIPMENT {\r
+        base EQUIPMENT_OBJECT_TYPE;\r
+        description "none";\r
+    }\r
+    identity EQUIPMENT_OBJECT_TYPE_HOLDER {\r
+        base EQUIPMENT_OBJECT_TYPE;\r
+        description "none";\r
+    }\r
+    identity EQUIPMENT_OBJECT_TYPE_PHYSICAL_SPAN {\r
+        base EQUIPMENT_OBJECT_TYPE;\r
+        description "none";\r
+    }\r
+    identity EQUIPMENT_OBJECT_TYPE_ABSTRACT_STRAND {\r
+        base EQUIPMENT_OBJECT_TYPE;\r
+        description "none";\r
+    }\r
+    typedef connector-and-pin-orientation {\r
+        type identityref {\r
+            base CONNECTOR_AND_PIN_ORIENTATION;\r
+        }\r
+        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. \r
+            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.";\r
+    }\r
+    typedef equipment-category {\r
+        type identityref {\r
+            base EQUIPMENT_CATEGORY;\r
+        }\r
+        description "The form of equipment.";\r
+    }\r
+    typedef holder-category {\r
+        type identityref {\r
+            base HOLDER_CATEGORY;\r
+        }\r
+        description "The form of holder.";\r
+    }\r
+    grouping connector-pin-address {\r
+        leaf connector-identification {\r
+            type string;\r
+            description "Identification of the Connector in the context of the referenced Equipment.";\r
+        }\r
+        leaf pin-identification {\r
+            type string;\r
+            description "Where relevant, identification of the Pin in the context of the connector.\r
+                Where the whole connector is used, then individual Pins need not be identified.\r
+                Simple alternative to pinAndRole.";\r
+        }\r
+        leaf equipment-uuid {\r
+            type tapi-common:uuid;\r
+            description "Reference to the Equipment that is fitted with the Connector/Pin.";\r
+        }\r
+        list pin-and-role {\r
+            config false;\r
+            uses pin-and-role;\r
+            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.\r
+                For simple cases pinIdentification can be used instead.";\r
+        }\r
+        description "The identification of the location of the Connector and/or Pin.";\r
+    }\r
+    grouping actual-equipment {\r
+        list actual-non-field-replaceable-module {\r
+            config false;\r
+            uses actual-non-field-replaceable-module;\r
+            description "none";\r
+        }\r
+        container common-actual-properties {\r
+            config false;\r
+            uses common-actual-properties;\r
+            description "none";\r
+        }\r
+        container common-equipment-properties {\r
+            config false;\r
+            uses common-equipment-properties;\r
+            description "none";\r
+        }\r
+        description "The equipment that is actually present in the physical network.\r
+            It will expose all dynamic properties and some critical static properties.";\r
+    }\r
+    grouping actual-holder {\r
+        container common-holder-properties {\r
+            config false;\r
+            uses common-holder-properties;\r
+            description "none";\r
+        }\r
+        description "A holder in the ActualEquipment.";\r
+    }\r
+    grouping actual-non-field-replaceable-module {\r
+        container common-actual-properties {\r
+            config false;\r
+            uses common-actual-properties;\r
+            description "none";\r
+        }\r
+        container common-equipment-properties {\r
+            config false;\r
+            uses common-equipment-properties;\r
+            description "none";\r
+        }\r
+        description "A structure that represents an actual equipment that cannot be replaced in the field.\r
+            Is simply a subordinate part of an ActualEquipment (FRU). \r
+            Does not have any exposed holders (any associated holders are assumed to belong to the containing FRU).\r
+            Does not have any connectors (any associated connectors are assumed to belong to the containing FRU).\r
+            ";\r
+    }\r
+    grouping common-actual-properties {\r
+        leaf asset-instance-identifier {\r
+            type string;\r
+            description "This attribute represents the asset identifier of this instance from the manufacturer's perspective.";\r
+        }\r
+        leaf is-powered {\r
+            type boolean;\r
+            description "The state of the power being supplied to the equipment.\r
+                Note that this attribute summarizes the power state. \r
+                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).";\r
+        }\r
+        leaf manufacture-date {\r
+            type tapi-common:date-and-time;\r
+            description "This attribute represents the date on which this instance is manufactured.";\r
+        }\r
+        leaf serial-number {\r
+            type string;\r
+            description "This attribute represents the serial number of this instance.";\r
+        }\r
+        leaf temperature {\r
+            type decimal64 {\r
+                fraction-digits 7;\r
+            }\r
+            description "The measured temperature of the Equipment.";\r
+        }\r
+        description "Properties common to actual Equipment.";\r
+    }\r
+    grouping common-equipment-properties {\r
+        leaf asset-type-identifier {\r
+            type string;\r
+            description "Represents the invariant properties of the equipment asset allocated by the operator that define and characterize the type.";\r
+        }\r
+        leaf equipment-type-description {\r
+            type string;\r
+            description "Text describing the type of Equipment.";\r
+        }\r
+        leaf equipment-type-identifier {\r
+            type string;\r
+            description "This attribute identifies the part type of the equipment.";\r
+        }\r
+        leaf equipment-type-name {\r
+            type string;\r
+            description "This attribute identifies the type of the equipment.";\r
+        }\r
+        leaf equipment-type-version {\r
+            type string;\r
+            description "This attribute identifies the version of the equipment.";\r
+        }\r
+        leaf manufacturer-identifier {\r
+            type string;\r
+            description "The formal unique identifier of the manufacturer.";\r
+        }\r
+        leaf manufacturer-name {\r
+            type string;\r
+            description "The formal name of the manufacturer of the Equipment.";\r
+        }\r
+        description "Properties common to all aspects of Equipment.";\r
+    }\r
+    grouping common-holder-properties {\r
+        leaf holder-category {\r
+            type holder-category;\r
+            description "The type of holder.";\r
+        }\r
+        leaf is-guided {\r
+            type boolean;\r
+            description "This attribute indicates whether the holder has guides that constrain the position of the equipment in the holder or not.";\r
+        }\r
+        leaf holder-location {\r
+            type string;\r
+            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).";\r
+        }\r
+        description "Properties common to all aspects of Holder.";\r
+    }\r
+    grouping expected-equipment {\r
+        list expected-non-field-replaceable-module {\r
+            config false;\r
+            uses expected-non-field-replaceable-module;\r
+            description "none";\r
+        }\r
+        list expected-holder {\r
+            config false;\r
+            uses expected-holder;\r
+            description "none";\r
+        }\r
+        container common-equipment-properties {\r
+            config false;\r
+            uses common-equipment-properties;\r
+            description "none";\r
+        }\r
+        description "A definition of the restrictions on the equipment that is expected to be present in the physical network at a particular 'place'.\r
+            The expected equipment will state the type and may constrain any other invariant properties. \r
+            It may also provide desired ranges for dynamic properties.";\r
+    }\r
+    grouping expected-holder {\r
+        container common-holder-properties {\r
+            config false;\r
+            uses common-holder-properties;\r
+            description "none";\r
+        }\r
+        description "A definition of a holder expected in the ActualEquipment (i.e. an ActualHolder) as part of the constraints provided by the ExpectedEquipment.";\r
+    }\r
+    grouping expected-non-field-replaceable-module {\r
+        container common-equipment-properties {\r
+            config false;\r
+            uses common-equipment-properties;\r
+            description "none";\r
+        }\r
+        description "A structure that represents an expected equipment that cannot be replaced in the field.\r
+            Is simply a subordinate part of an ExpectedEquipment (FRU). \r
+            Does not have any exposed holders (any associated holders are assumed to belong to the containing FRU).\r
+            Does not have any connectors (any associated connectors are assumed to belong to the containing FRU).\r
+            ";\r
+    }\r
+    typedef equipment-object-type {\r
+        type identityref {\r
+            base EQUIPMENT_OBJECT_TYPE;\r
+        }\r
+        description "The list of TAPI Equipment Object types/classes.";\r
+    }\r
+    grouping pin-and-role {\r
+        leaf location-in-connector {\r
+            type string;\r
+            config false;\r
+            description "The named location of the pin in the context of the connector.\r
+                This is likely to be the normal numbering/naming for the type of connetor, e.g. '7', '6-GND', 'Common' etc.";\r
+        }\r
+        leaf-list pin-role {\r
+            type string;\r
+            config false;\r
+            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.\r
+                Each entry represents a role in the context of the specific access port.\r
+                Each entry ties the pin to a functional element in the associated NEP(s) etc.\r
+                For example:\r
+                - a pin might carry several distinct signals where each signal is idenitified in the list\r
+                - a pin may carry a signal and power\r
+                - 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).";\r
+        }\r
+        leaf pin-name {\r
+            type string;\r
+            config false;\r
+            description "Where the pin has a distinct location identifier and a distinct name this field can be used for the name.\r
+                For example:\r
+                - locationInConnector = 6, pinName = GND";\r
+        }\r
+        description "Provides an opportunity, for a pin, to give the location of the pin and the role of the pin.";\r
+    }\r
+\r
+    /**************************\r
+    * package object-classes\r
+    **************************/ \r
+    grouping equipment {\r
+        list contained-holder {\r
+            key 'uuid';\r
+            config false;\r
+            uses holder;\r
+            description "References the Holder in an Equipment that is available to take other Equipments.\r
+                For example:\r
+                - Slot in a sub-rack\r
+                - Slot in a Field Replaceable Unit that can take a small form-factor pluggable.";\r
+        }\r
+        leaf category {\r
+            type equipment-category;\r
+            config false;\r
+            description "This attribute provides the identifier for the form of equipments regarded as having particular shared characteristics.";\r
+        }\r
+        leaf equipment-location {\r
+            type string;\r
+            config false;\r
+            description "none";\r
+        }\r
+        leaf geographical-location {\r
+            type string;\r
+            config false;\r
+            description "none";\r
+        }\r
+        leaf is-expected-actual-mismatch {\r
+            type boolean;\r
+            config false;\r
+            description "none";\r
+        }\r
+        list expected-equipment {\r
+            uses expected-equipment;\r
+            description "none";\r
+        }\r
+        container actual-equipment {\r
+            uses actual-equipment;\r
+            description "none";\r
+        }\r
+        uses tapi-common:global-class;\r
+        description "Represents any relevant physical thing. \r
+            Can be either field replaceable or not field replaceable.\r
+            Note: The model is currently constrained to inside plant.";\r
+    }\r
+    grouping holder {\r
+        container occupying-fru {\r
+            uses equipment-ref;\r
+            config false;\r
+            description "The FRU that is occupying the holder. \r
+                A holder may be unoccupied. \r
+                An FRU may occupy more hat one holder (using or blocking are intentionally not distinguished here).";\r
+        }\r
+        container expected-holder {\r
+            config false;\r
+            uses expected-holder;\r
+            description "none";\r
+        }\r
+        container actual-holder {\r
+            config false;\r
+            uses actual-holder;\r
+            description "none";\r
+        }\r
+        uses tapi-common:global-class;\r
+        description "Represents a space in an equipment in which another equipment can be fitted in the field.";\r
+    }\r
+    grouping access-port {\r
+        list connector-pin {\r
+            key 'connector-identification pin-identification equipment-uuid';\r
+            config false;\r
+            min-elements 1;\r
+            uses connector-pin-address;\r
+            description "The list of Pins that support the AccessPort.";\r
+        }\r
+        uses tapi-common:global-class;\r
+        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.\r
+            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).";\r
+    }\r
+    grouping physical-span {\r
+        list access-port {\r
+            uses access-port-ref;\r
+            key "device-uuid access-port-uuid";\r
+            config false;\r
+            min-elements 2;\r
+            max-elements 2;\r
+            description "none";\r
+        }\r
+        list abstract-strand {\r
+            key 'local-id';\r
+            config false;\r
+            uses abstract-strand;\r
+            description "Both the serial segments that form an end-end strand and the parallel end-end strands.";\r
+        }\r
+        uses tapi-common:global-class;\r
+        description "An adjacency between AccessPorts. \r
+            The adjacency is supported by a group of strands between pins of the AccessPorts.\r
+            This is a physical abstraction.";\r
+    }\r
+    grouping abstract-strand {\r
+        list adjacent-strand {\r
+               uses abstract-strand-ref;\r
+               key "physical-span-uuid abstract-strand-local-id";\r
+            config false;\r
+            description "none";\r
+        }\r
+        list spliced-strand {\r
+               uses abstract-strand-ref;\r
+               key "physical-span-uuid abstract-strand-local-id";\r
+            config false;\r
+            max-elements 2;\r
+            description "none";\r
+        }\r
+        list connector-pin {\r
+            key 'connector-identification pin-identification equipment-uuid';\r
+            config false;\r
+            max-elements 2;\r
+            uses connector-pin-address;\r
+            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.\r
+                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.\r
+                In the essential model these Pins would be on connectors that plug in to connectors on Equipments.\r
+                The AbstractStrand is extended to the pins of the AccessPort which are the Pins on the Connectors of the Equipment.\r
+                In some cases it may not be relevant to represent the pin detail and hence the reference is to a connector alone.";\r
+        }\r
+        list strand-media-characteristics {\r
+            key 'value-name';\r
+            config false;\r
+            uses tapi-common:name-and-value;\r
+            description "Relevant physical properties of the abstract strand.";\r
+        }\r
+        uses tapi-common:local-class;\r
+        description "This object represents an abstraction of one or more strands in series that provides sufficient detail to enable appropriate engineering.\r
+            A strand represents a continuous long, thin piece of a medium such as glass fiber or copper wire.\r
+            In this model a Strand:\r
+            - a strand has two ends\r
+            - a splice can only be between 2 strands.\r
+            - the end of a strand may have a splice, a connector or be hidden\r
+            - only one end can be hidden in an equipment\r
+            - where a cable has more than two end each strand only goes between two of the ends\r
+            This model does NOT account for multiple copper strands being spliced.";\r
+    }\r
+    grouping device {\r
+        list equipment {\r
+            key 'uuid';\r
+            config false;\r
+            uses equipment;\r
+            description "none";\r
+        }\r
+        list access-port {\r
+            key 'uuid';\r
+            config false;\r
+            uses access-port;\r
+            description "none";\r
+        }\r
+        uses tapi-common:global-class;\r
+        description "A logical grouping of Equipments and AccessPorts that are closely located and form a support a coherent system of related functions.";\r
+    }\r
+    grouping physical-context {\r
+        list device {\r
+            key 'uuid';\r
+            config false;\r
+            uses device;\r
+            description "none";\r
+        }\r
+        list physical-span {\r
+            key 'uuid';\r
+            config false;\r
+            uses physical-span;\r
+            description "none";\r
+        }\r
+        uses tapi-common:global-class;\r
+        description "none";\r
+    }\r
+    grouping supporting-physical-span {\r
+        container physical-span {\r
+            uses physical-span-ref;\r
+            description "none";\r
+        }\r
+        description "none";\r
+    }\r
+    grouping supporting-access-port {\r
+        container access-port {\r
+            uses access-port-ref;\r
+            description "none";\r
+        }\r
+        description "none";\r
+    }\r
+\r
+    /**************************\r
+    * package interfaces\r
+    **************************/ \r
+    rpc get-device-list {\r
+        description "none";\r
+        output {\r
+            list device {\r
+               key 'uuid';\r
+                uses device;\r
+                description "none";\r
+            }\r
+        }\r
+    }\r
+    rpc get-physical-span-list {\r
+        description "none";\r
+        output {\r
+            list physical-span {\r
+               key 'uuid';\r
+                uses physical-span;\r
+                description "none";\r
+            }\r
+        }\r
+    }\r
+    rpc get-device {\r
+        description "none";\r
+        input {\r
+            leaf uuid {\r
+                type tapi-common:uuid;\r
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.\r
+                    An UUID carries no semantics with respect to the purpose or state of the entity.\r
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.\r
+                    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} \r
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";\r
+            }\r
+        }\r
+        output {\r
+            container device {\r
+                uses device;\r
+                description "none";\r
+            }\r
+        }\r
+    }\r
+    rpc get-physical-span {\r
+        description "none";\r
+        input {\r
+            leaf uuid {\r
+                type tapi-common:uuid;\r
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable.\r
+                    An UUID carries no semantics with respect to the purpose or state of the entity.\r
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.\r
+                    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} \r
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";\r
+            }\r
+        }\r
+        output {\r
+            container physical-span {\r
+                uses physical-span;\r
+                description "none";\r
+            }\r
+        }\r
+    }\r
+\r
+}\r