module tapi-equipment { yang-version "1.1"; namespace "urn:onf:otcc:yang:tapi-equipment"; prefix tapi-equipment; import tapi-common { prefix tapi-common; revision-date 2022-11-21; } import tapi-topology { prefix tapi-topology; revision-date 2022-11-21; } import tapi-notification { prefix tapi-notification; revision-date 2022-11-21; } import tapi-streaming { prefix tapi-streaming; revision-date 2022-11-21; } import tapi-connectivity { prefix tapi-connectivity; revision-date 2022-11-21; } organization "ONF OTCC (Open Transport Configuration & Control) Project"; contact " Project Web: Project List: Editor: Karthik Sethuraman Andrea Mazzini Arturo Mayoral Nigel Davis Ramon Casellas "; description " This module contains TAPI Equipment Model definitions. Source: TapiEquipment.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] and further edited manually to comply with the [ONF IISOMI UML2YANG mapping 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 . YANG models included in this release may not be backward compatible with previous TAPI releases. Copyright (c) 2022 Open Networking Foundation (ONF). All rights reserved. License: This module is distributed under the Apache License 2.0."; revision 2022-11-21 { description "ONF Transport API version 2.4.0 RC1. Changes included in this TAPI release (v2.4.0) are listed in "; reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 7950, RFC 6087 and ONF TAPI UML model "; } revision 2021-09-24 { description "ONF Transport API version 2.3.1. Changes included in this TAPI release (v2.3.1) are listed in "; reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 7950, RFC 6087 and ONF TAPI UML model "; } revision 2021-08-04 { description "ONF Transport API version 2.3. Changes included in this TAPI release (v2.3) are listed in "; reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 7950, RFC 6087 and ONF TAPI UML model "; } revision 2021-05-24 { description "ONF Transport API version 2.3 RC1. Changes included in this TAPI release (v2.3) are listed in "; reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 7950, RFC 6087 and ONF TAPI UML model "; } revision 2020-04-23 { description "ONF Transport API version 2.1.3. Changes included in this TAPI release (v2.1.3) are listed in "; reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 7950, RFC 6087 and ONF TAPI UML model "; } revision 2019-07-16 { description "ONF Transport API version 2.1.2. Changes included in this TAPI release (v2.1.2) are listed in "; reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 7950, RFC 6087 and ONF TAPI UML model "; } revision 2019-03-31 { description "ONF Transport API version 2.2-RC1. Changes included in this TAPI release (v2.2) are listed in "; reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 7950, RFC 6087 and ONF TAPI UML model "; } revision 2018-12-10 { description "ONF Transport API version 2.1.1. Changes included in this TAPI release (v2.1.1) are listed in "; reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 7950, RFC 6087 and ONF TAPI UML model "; } revision 2018-10-16 { description "ONF Transport API version 2.1.0. Changes included in this TAPI release (v2.1.0) are listed in "; reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 7950, RFC 6087 and ONF TAPI UML model "; } 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: "; reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model "; } 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: "; reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model "; } 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: "; reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model "; } augment "/tapi-common:context" { container physical-context { uses physical-context; description "Augments the base TAPI Context with PhysicalContext model."; } description "Augments the base TAPI Context with PhysicalContext model."; } augment "/tapi-common:context/tapi-topology:topology-context/tapi-topology:topology/tapi-topology:link" { container supporting-physical-span { uses supporting-physical-span; description "This augment allows Link to refer to its PhysicalSpans despite TapiTopology model does not import TapiEquipment model."; } description "This augment allows Link to refer to its PhysicalSpans despite TapiTopology model does not import TapiEquipment model."; } augment "/tapi-common:context/tapi-topology:topology-context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point" { container access-port-supports-nep { uses access-port-supports-nep; description "This augment allows NEP to refer to its AccessPorts despite TapiTopology model does not import TapiEquipment model."; } description "This augment allows NEP to refer to its AccessPorts despite TapiTopology model does not import TapiEquipment model."; } augment "/tapi-streaming:stream-record/tapi-streaming:log-record/tapi-streaming:log-record-body" { when 'derived-from-or-self(tapi-streaming:record-content, "EQUIPMENT_OBJECT_TYPE_EQUIPMENT")'; container equipment { uses equipment; description "none"; } description "none"; } augment "/tapi-streaming:stream-record/tapi-streaming:log-record/tapi-streaming:log-record-body" { when 'derived-from-or-self(tapi-streaming:record-content, "EQUIPMENT_OBJECT_TYPE_HOLDER")'; container holder { uses holder; description "none"; } description "none"; } augment "/tapi-streaming:stream-record/tapi-streaming:log-record/tapi-streaming:log-record-body" { when 'derived-from-or-self(tapi-streaming:record-content, "EQUIPMENT_OBJECT_TYPE_ACCESS_PORT")'; container access-port { uses access-port; description "none"; } description "none"; } augment "/tapi-streaming:stream-record/tapi-streaming:log-record/tapi-streaming:log-record-body" { when 'derived-from-or-self(tapi-streaming:record-content, "EQUIPMENT_OBJECT_TYPE_ABSTRACT_STRAND")'; container abstract-strand { uses abstract-strand; description "none"; } description "none"; } augment "/tapi-streaming:stream-record/tapi-streaming:log-record/tapi-streaming:log-record-body" { when 'derived-from-or-self(tapi-streaming:record-content, "EQUIPMENT_OBJECT_TYPE_DEVICE")'; container device { uses device; description "none"; } description "none"; } augment "/tapi-streaming:stream-record/tapi-streaming:log-record/tapi-streaming:log-record-body" { when 'derived-from-or-self(tapi-streaming:record-content, "EQUIPMENT_OBJECT_TYPE_PHYSICAL_SPAN")'; container physical-span { uses physical-span; description "none"; } description "none"; } augment "/tapi-common:context/tapi-notification:notification-context/tapi-notification:event-notification" { when 'derived-from-or-self(tapi-notification:target-object-type, "EQUIPMENT_OBJECT_TYPE_EQUIPMENT")'; container equipment { uses equipment; description "none"; } description "none"; } augment "/tapi-common:context/tapi-notification:notification-context/tapi-notification:event-notification" { when 'derived-from-or-self(tapi-notification:target-object-type, "EQUIPMENT_OBJECT_TYPE_HOLDER")'; container holder { uses holder; description "none"; } description "none"; } augment "/tapi-common:context/tapi-notification:notification-context/tapi-notification:event-notification" { when 'derived-from-or-self(tapi-notification:target-object-type, "EQUIPMENT_OBJECT_TYPE_ACCESS_PORT")'; container access-port { uses access-port; description "none"; } description "none"; } augment "/tapi-common:context/tapi-notification:notification-context/tapi-notification:event-notification" { when 'derived-from-or-self(tapi-notification:target-object-type, "EQUIPMENT_OBJECT_TYPE_PHYSICAL_SPAN")'; container physical-span { uses physical-span; description "none"; } description "none"; } augment "/tapi-common:context/tapi-connectivity:connectivity-context/tapi-connectivity:connection" { container physical-route-list { uses physical-route-list; description "This augment allows Connection to describe its physical route(s) by listing all involved AccessPorts, despite TapiConnectivity model does not import TapiEquipment model."; } description "This augment allows Connection to describe its physical route(s) by listing all involved AccessPorts, despite TapiConnectivity model does not import TapiEquipment model."; } augment "/tapi-common:context/tapi-common:service-interface-point" { container access-port-supports-sip { uses access-port-supports-sip; description "none"; } description "none"; } augment "/tapi-common:context/tapi-notification:notification-context/tapi-notification:event-notification" { when 'derived-from-or-self(tapi-notification:target-object-type, "EQUIPMENT_OBJECT_TYPE_PHYSICAL_ROUTE")'; container physical-route { uses physical-route; description "none"; } description "none"; } augment "/tapi-streaming:stream-record/tapi-streaming:log-record/tapi-streaming:log-record-body" { when 'derived-from-or-self(tapi-streaming:record-content, "EQUIPMENT_OBJECT_TYPE_PHYSICAL_ROUTE")'; container physical-route { uses physical-route; description "none"; } description "none"; } augment "/tapi-common:context/tapi-notification:notification-context/tapi-notification:event-notification" { when 'derived-from-or-self(tapi-notification:target-object-type, "EQUIPMENT_OBJECT_TYPE_PHYSICAL_ROUTE_ELEMENT")'; container physical-route-element { uses physical-route-element; description "none"; } description "none"; } augment "/tapi-streaming:stream-record/tapi-streaming:log-record/tapi-streaming:log-record-body" { when 'derived-from-or-self(tapi-streaming:record-content, "EQUIPMENT_OBJECT_TYPE_PHYSICAL_ROUTE_ELEMENT")'; container physical-route-element { uses physical-route-element; description "none"; } description "none"; } augment "/tapi-common:context/tapi-notification:notification-context/tapi-notification:event-notification" { when 'derived-from-or-self(tapi-notification:target-object-type, "EQUIPMENT_OBJECT_TYPE_STRAND_JOINT")'; container strand-joint { uses strand-joint; description "none"; } description "none"; } augment "/tapi-streaming:stream-record/tapi-streaming:log-record/tapi-streaming:log-record-body" { when 'derived-from-or-self(tapi-streaming:record-content, "EQUIPMENT_OBJECT_TYPE_STRAND_JOINT")'; container strand-joint { uses strand-joint; description "none"; } description "none"; } augment "/tapi-notification:event-notification" { when 'derived-from-or-self(tapi-notification:target-object-type, "EQUIPMENT_OBJECT_TYPE_EQUIPMENT")'; container equipment { uses equipment; description "none"; } description "none"; } augment "/tapi-notification:event-notification" { when 'derived-from-or-self(tapi-notification:target-object-type, "EQUIPMENT_OBJECT_TYPE_HOLDER")'; container holder { uses holder; description "none"; } description "none"; } augment "/tapi-notification:event-notification" { when 'derived-from-or-self(tapi-notification:target-object-type, "EQUIPMENT_OBJECT_TYPE_ACCESS_PORT")'; container access-port { uses access-port; description "none"; } description "none"; } augment "/tapi-notification:event-notification" { when 'derived-from-or-self(tapi-notification:target-object-type, "EQUIPMENT_OBJECT_TYPE_PHYSICAL_SPAN")'; container physical-span { uses physical-span; description "none"; } description "none"; } augment "/tapi-notification:event-notification" { when 'derived-from-or-self(tapi-notification:target-object-type, "EQUIPMENT_OBJECT_TYPE_PHYSICAL_ROUTE")'; container physical-route { uses physical-route; description "none"; } description "none"; } augment "/tapi-notification:event-notification" { when 'derived-from-or-self(tapi-notification:target-object-type, "EQUIPMENT_OBJECT_TYPE_PHYSICAL_ROUTE_ELEMENT")'; container physical-route-element { uses physical-route-element; description "none"; } description "none"; } augment "/tapi-notification:event-notification" { when 'derived-from-or-self(tapi-notification:target-object-type, "EQUIPMENT_OBJECT_TYPE_STRAND_JOINT")'; container strand-joint { uses strand-joint; description "none"; } description "none"; } augment "/tapi-notification:event-notification" { when 'derived-from-or-self(tapi-notification:target-object-type, "EQUIPMENT_OBJECT_TYPE_ABSTRACT_STRAND")'; container abstract-strand { uses abstract-strand; description "none"; } description "none"; } augment "/tapi-common:context/tapi-notification:notification-context/tapi-notification:event-notification" { when 'derived-from-or-self(tapi-notification:target-object-type, "EQUIPMENT_OBJECT_TYPE_ABSTRACT_STRAND")'; container abstract-strand { uses abstract-strand; description "none"; } description "none"; } augment "/tapi-common:context/tapi-notification:notification-context/tapi-notification:event-notification" { when 'derived-from-or-self(tapi-notification:target-object-type, "EQUIPMENT_OBJECT_TYPE_DEVICE")'; container device { uses device; description "none"; } description "none"; } augment "/tapi-notification:event-notification" { when 'derived-from-or-self(tapi-notification:target-object-type, "EQUIPMENT_OBJECT_TYPE_DEVICE")'; container device { uses device; 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"; } grouping strand-joint-ref { uses abstract-strand-ref; leaf strand-joint-local-id { type leafref { path '/tapi-common:context/tapi-equipment:physical-context/tapi-equipment:physical-span/tapi-equipment:abstract-strand/tapi-equipment:strand-joint/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"; } identity EQUIPMENT_OBJECT_TYPE_STRAND_JOINT { base EQUIPMENT_OBJECT_TYPE; description "none"; } identity EQUIPMENT_OBJECT_TYPE_PHYSICAL_ROUTE { base EQUIPMENT_OBJECT_TYPE; description "none"; } identity EQUIPMENT_OBJECT_TYPE_PHYSICAL_ROUTE_ELEMENT { base EQUIPMENT_OBJECT_TYPE; description "none"; } identity PHYSICAL_ROUTE_STATE { description "none"; } identity PHYSICAL_ROUTE_STATE_CURRENT { base PHYSICAL_ROUTE_STATE; description "The PhysicalRoute instance identified is the current PhysicalRoute, i.e., is the one that is active and selected to support service."; } identity PHYSICAL_ROUTE_STATE_NOT_CURRENT { base PHYSICAL_ROUTE_STATE; description "The PhysicalRoute instance is not the one supporting the service."; } identity PHYSICAL_ROUTE_STATE_UNKNOWN { base PHYSICAL_ROUTE_STATE; description "The PhysicalRoute state is unknown."; } identity FLOW_DIRECTION { description "none"; } identity FLOW_DIRECTION_NORMAL_FLOW { base FLOW_DIRECTION; description "Applies to the normal flow of light through the strand joint as expressed via the 'to strand joint' statement of a strand."; } identity FLOW_DIRECTION_CONTRA_FLOW { base FLOW_DIRECTION; description "The reverse of the NORMAL_FLOW. The light flows to the strand that references the strand joint with 'to strand joint'."; } identity FLOW_DIRECTION_BOTH { base FLOW_DIRECTION; description "The strand joint statement applies to both normal and contra flow."; } 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; config false; description "Identification of the Connector in the context of the referenced Equipment. CONDITION: Mandatory where there is more than one connector on the equipment."; } leaf pin-identification { type string; config false; 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. CONDITION: Mandatory where the pin and role is not being used but there is a need to simply identify the relevant pin."; } list pin-and-role { key 'location-in-connector'; 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. CONDITION: Mandatory where there is more than one pin and/or a need to identify pin role."; } /* the reference to equipment is used as a key, but the key statement does not accept container, but only leafs. Hence the two leafs of the equipment-ref have been explicitly specified.*/ leaf device-uuid { type leafref { path '/tapi-common:context/tapi-equipment:physical-context/tapi-equipment:device/tapi-equipment:uuid'; } description "none"; } leaf equipment-uuid { type leafref { path '/tapi-common:context/tapi-equipment:physical-context/tapi-equipment:device/tapi-equipment:equipment/tapi-equipment:uuid'; } description "The Equipment instance supporting the Connector/Pin."; } /* container equipment { uses equipment-ref; config false; description "The Equipment instance supporting the Connector/Pin."; }*/ description "The identification of the location of the Connector and/or Pin."; } grouping actual-equipment { container common-equipment-properties { config false; uses common-equipment-properties; description "Properties related to equipment type."; } container common-actual-properties { config false; uses common-actual-properties; description "Properties related to equipment instance."; } list actual-non-field-replaceable-module { key 'local-id'; config false; uses actual-non-field-replaceable-module; description "Details of non-field-replaceable modules. CONDITION: Mandatory where there are non-field-replaceable modules."; } 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 "Properties related to the holder type."; } description "A holder in the ActualEquipment."; } grouping actual-non-field-replaceable-module { container common-actual-properties { config false; uses common-actual-properties; description "Properties related to equipment instance."; } container common-equipment-properties { config false; uses common-equipment-properties; description "Properties related to equipment type."; } uses tapi-common:local-class; 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 allocated by the owner/operator. May be an empty string where no value has been allocated. May be not present when not supported. The value may be provided written per instance. CONDITION: Mandatory where there is an opportunity to allocate an identifier on an instance basis and where an identifier has been allocated."; } leaf is-powered { type boolean; default "true"; config false; 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 Power function (e.g. different voltage supplies). CONDITION: Mandatory where not default and the power state of the hardware is known."; } leaf manufacture-date { type tapi-common:date-and-time; config false; description "The date on which this instance is manufactured (as provided by the actual hardware). CONDITION: Mandatory where the manufacture date is provided by the actual hardware."; } leaf serial-number { type string; config false; description "The serial number of this (as provided by the actual hardware). CONDITION: Mandatory where the serial number is provided by the actual hardware."; } leaf temperature { type decimal64 { fraction-digits 7; } config false; description "The measured temperature of the Equipment (stated in Celsius). If the temperature is supported but temporarily not available then this may be represented by max real number. CONDITION: Mandatory where the equipment provides a temperature measurement."; } description "Properties common to actual Equipment instance."; } grouping common-equipment-properties { leaf asset-type-identifier { type string; config false; description "Represents the invariant properties of the equipment asset allocated by the owner/operator that define and characterize the type of equipment. CONDITION: Mandatory where a operator/user asset identifier is available to the controller."; } leaf equipment-type-description { type string; config false; description "Text describing the type of Equipment. CONDITION: Mandatory where a description is available."; } leaf equipment-type-identifier { type string; config false; description "This attribute identifies the part type of the equipment."; } leaf equipment-type-name { type string; config false; description "This attribute identifies the type of the equipment. CONDITION: Mandatory where there is a name in addition to the equipment type identifier."; } leaf equipment-type-version { type string; config false; description "This attribute identifies the version of the equipment. CONDITION: Mandatory where there is a known version of the type."; } leaf manufacturer-identifier { type string; config false; description "The formal unique identifier of the manufacturer."; } leaf manufacturer-name { type string; config false; description "The formal name of the manufacturer of the Equipment."; } description "Properties common to all equipments."; } grouping common-holder-properties { leaf holder-category { type holder-category; config false; description "The type of holder."; } leaf is-guided { type boolean; default "true"; config false; description "This attribute indicates whether the holder has guides that constrain the position of the equipment in the holder or not. CONDITION: Mandatory where not default."; } leaf holder-location { type string; config false; 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 holders."; } grouping expected-holder { container common-holder-properties { config false; uses common-holder-properties; description "Properties common to all holders."; } 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 "Properties common to all equipments."; } uses tapi-common:local-class; 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 expected-equipment { container common-equipment-properties { config false; uses common-equipment-properties; description "Properties common to all aspects of Equipment. CONDITION: Mandatory where not equipment not expected."; } list expected-non-field-replaceable-module { key 'local-id'; config false; uses expected-non-field-replaceable-module; description "Details of modules attached to the expected equipment where those modules are essentially part of the equipment and are not replaceable in the field. Note that there may be modules reported by the actual equipment that are not declared in the expectation detail. Note that mismatch may not account for this detail. CONDITION: Mandatory where expected equipment has known non-field-replaceble modules."; } list expected-holder { config false; uses expected-holder; description "A definition of a holder expected in the ActualEquipment (i.e., an ActualHolder) as part of the constraints provided by the ExpectedEquipment. CONDITION: Mandatory where expected equipment has known holders."; } leaf equipment-not-expected { type boolean; config false; description "Indicates that it is expected that there be no equipment in the holder. This may be set when there is an intended blanking plate (covering the empty holder) that is not detectable or when the holder is intended to be completely empty. CONDITION: Mandatory where not default."; } 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 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 connector, 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 identified 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). CONDITION: Mandatory where pin role is to be stated."; } 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 CONDITION: Mandatory where pin name is relevant as the description is at pin grnaularity."; } leaf connector-pin-orientation { type connector-and-pin-orientation; config false; description "States the orientations of the pin/connector. 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. CONDITION: Mandatory where connector/pin orientation is known and to be stated."; } description "Provides an opportunity, for a pin, to give the location of the pin and the role of the pin."; } typedef physical-route-state { type identityref { base PHYSICAL_ROUTE_STATE; } description "Potential PhysicalRoute states concerning the service support."; } typedef flow-direction { type identityref { base FLOW_DIRECTION; } description "The direction of flow."; } /************************** * 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. CONDITION: Mandatory where the equipment has holders."; } 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 "Provides details of the location of the equipment within the context oc containing equipments."; } leaf geographical-location { type string; config false; description "The location of the equipment in a georgraphical context (e.g., lat long). This property is deprecated. CONDITION: Mandatory where there is a relevant geographical location and formal geolocation is not being used (only for equipments not in holders)."; } leaf is-expected-actual-mismatch { type boolean; config false; description "Indicates where the expectation does not match the actual. This is false where there is no expectation. CONDITION: Mandatory where there is potential for expectation and hence the property may sometimes be not default."; } list expected-equipment { config false; uses expected-equipment; description "Provides details of expected equipment at the stated location and/or within the containing holder within the device. CONDITION: Mandatory where there is expectation to be stated."; } container actual-equipment { config false; uses actual-equipment; description "Provides details of a real equipment present at the stated location and/or within the containing holder within the device. CONDITION: Mandatory where a real equipment is to be represented."; } container geolocation { config false; uses geolocation; description "The location of the equipment in a georgraphical context using formal coordinates. CONDITION: Mandatory where there is a relevant geographical location using formal coordiantes (only for equipments not in holders)."; } uses tapi-common:global-class; description "Represents any relevant physical thing. May be only expectation, only actual or both expectation and actual. Represents a field replaceable unit. May include non-field-replaceable details."; } grouping holder { container occupying-fru { uses equipment-ref; config false; description "The field replaceable unit (FRU) that is occupying the holder. The occupying FRU may be only expectation, only actual or both. A holder may be unoccupied. An FRU may occupy more than one holder (using or blocking are intentionally not distinguished here). CONDITION: Mandatory where an occupying FRU is to be stated."; } container expected-holder { config false; uses expected-holder; description "Details of the contained holder as stated for the expected equipment. CONDITION: Mandatory where an expected holder is to be stated."; } container actual-holder { config false; uses actual-holder; description "Details of the contained holder as stated for the actual equipment. CONDITION: Mandatory where an actual holder is to be stated."; } uses tapi-common:global-class; description "Represents a space in an equipment in which another equipment can be fitted in the field. It must have at least one of actual holder or expected holder (and may have both)."; } grouping access-port { list connector-pin { key 'device-uuid equipment-uuid connector-identification pin-identification'; /* the reference to equipment is used as a key, but the key statement does not accept container, but only leafs. Hence the two leafs of the equipment-ref have been explicitly specified.*/ 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 simple such that the AccessPort references all pins of one connector)."; } grouping physical-span { list access-port { uses access-port-ref; key "device-uuid access-port-uuid"; config false; description "The access ports that bound the physical span. This allows for simple point to point cases as well as multi-point cases and cases where the physical span has only one fully defined end."; } list abstract-strand { key 'local-id'; config false; uses abstract-strand; description "Both the serial segments that form an end-end strand and the parallel end-end strands. CONDITION: Mandatory where abstract strands are to be stated."; } 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 "Allows expression of an ordered list of abstract strands that support this broader span abstract strand where the specific interconnection is not relevant. CONDITION: Mandatory where the sequence of strands in a physical span a is to be expressed but when the specific interconnection is not relevant."; } list spliced-strand { uses abstract-strand-ref; key "physical-span-uuid abstract-strand-local-id"; config false; max-elements 2; description "References strands that are spliced to this strand where splice properties need not be represented. CONDITION: Mandatory where a simple representation of a splice between strands is required"; } list connector-pin { key 'device-uuid equipment-uuid connector-identification pin-identification'; /* the reference to equipment is used as a key, but the key statement does not accept container, but only leafs. Hence the two leafs of the equipment-ref have been explicitly specified.*/ 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 may be spliced to split a signal). This model supports only 2 ended strands and hence splices must be represented explicitly. 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. CONDITION: Mandatory where at least one connector pin detail is to be represented."; } list strand-media-characteristics { key 'value-name'; config false; uses tapi-common:name-and-value; description "Relevant physical properties of the abstract strand. CONDITION: Mandatory where a simple form of strand characteristics is to be conveyed."; } list to-strand-joint { key "physical-span-uuid abstract-strand-local-id strand-joint-local-id"; uses strand-joint-ref; config false; description "The strand joint through which normal flow of light passes from this fiber. CONDITION: Mandatory where detailed strand joint characteristics related to the flow from the strand are to be expressed."; } list strand-joint { key 'local-id'; config false; uses strand-joint; description "Represents a flow opportunity through a joint. The strand joint is owned by this strand which is one of the two strands (or the strand) that this joint connects. CONDITION: Mandatory where details of properties of the joint need to be expressed."; } 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 "Equipments of the device. CONDITION: Mandatory where the device has equipment."; } list access-port { key 'uuid'; config false; uses access-port; description "Access ports of the device. CONDITION: Mandatory where access ports are present."; } 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 "The list of all devices in the context. CONDITION: Mandatory where devices are present and to be listed."; } list physical-span { key 'uuid'; config false; uses physical-span; description "A list of all physical spans in the context. CONDITION: Mandatory where physical spans are present and to be listed."; } description "The collection of all physical things to be described."; } grouping supporting-physical-span { container physical-span { uses physical-span-ref; config false; description "Reference to the PhysicalSpan. CONDITION: Mandatory where the link is supported by a physical span."; } description "The PhysicalSpan supporting this Link. More Links can be supported by the same PhysicalSpan. This augment allows Link to refer to its PhysicalSpans despite TapiTopology model does not import TapiEquipment model."; } grouping access-port-supports-nep { container access-port { uses access-port-ref; config false; description "Reference to the AccessPort. CONDITION: Mandatory where the NEP is directly supported by an access port."; } description "The AccessPort supporting this NEP. More NEPs can be supported by the same AccessPort. This augment allows NEP to refer to its AccessPort despite TapiTopology model does not import TapiEquipment model."; } grouping physical-route { list physical-route-element { config false; uses physical-route-element; description "A point in the PhysicalRoute. A PhysicalRoute must have atleast one point."; } leaf physical-route-state { type physical-route-state; config false; description "Provides optional resilience and state attributes to the PhysicalRoute. CONDITION: Mandatory where not always default."; } uses tapi-common:local-class; description "The physical route of a connection is modeled as an ordered sequence of physical route element instances. The physical route is a description dedicated to the connection."; } grouping physical-route-list { list physical-route { key 'local-id'; config false; uses physical-route; description "List of PhysicalRoutes composing the physical route of the Connection. CONDITION: Mandatory where a physical route is to be conveyed."; } description "The list of the PhysicalRoutes of a Connection."; } grouping strand-joint { container to-abstract-strand { uses abstract-strand-ref; config false; description "The strand to which the light from the StrandJoint is fed. There may be no reference where the strand joint is at: - visibility boundary - the connector that feeds the transponder. CONDITION: Mandatory where strand joint is not at far end."; } leaf applicable-to-flow-direction { type flow-direction; config false; description "The flow(s) to which the stated properties of this strand joint apply to. CONDITION: Mandatory where not default"; } leaf reflection { type boolean; config false; description "Indicates that this strand joint states properties of a reflection. A reflection may be: - normal flow where the light passes from a strand (to strand joint) and then back to the same strand - contra flow where the light passes from the strand referenced in to abstract strand back to the same stand (that references the strand joint via to strand joint. The strand referenced in to abstract strand is the same strand that referenced the strand joint. The properties of the strand joint may apply to BOTH directions of reflection for the abstract strand. CONDITION: Mandatory where not default"; } uses tapi-common:local-class; description "Represents a flow opportunity through a joint. Can represent flow opportunity through: - a connector - a splice - etc. Allows augmentation with impairments and other properties of the joint. Can be used: - as a single instance alone to represent properties that apply equally to each direction of flow - in combinations of multiple instances to represent impairments that are different for normal flow, reverse flow and reflections. "; } grouping access-port-supports-sip { container access-port { uses access-port-ref; config false; description "Reference to the AccessPort. CONDITION: Mandatory where the SIP is directly supported by an access port."; } description "The AccessPort supporting this SIP. More SIPs can be supported by the same AccessPort. This augment allows SIP to refer to its AccessPort despite TapiTopology model does not import TapiEquipment model."; } grouping physical-route-element { container access-port-in-route { uses access-port-ref; config false; description "The AccessPort included in the physical route. CONDITION: Mandatory where AccessPort is used to define physical route."; } list connector-pin-in-route { key 'device-uuid equipment-uuid connector-identification pin-identification'; /* the reference to equipment is used as a key, but the key statement does not accept container, but only leafs. Hence the two leafs of the equipment-ref have been explicitly specified.*/ config false; uses connector-pin-address; description "The connectors and pins defining this point in the route where the access port alone is not sufficient or the access port is not provided. CONDITION: Mandatory where AccessPort is not used to define PhysicalRoute or where AccessPort requires clarification as it includes more connectorPins than are used in the route."; } description "A PhysicalRouteElement describes equipment, connectors on those equipments and pins of those connectors that are involved in the physical route of the connection. The description may be in terms of access port or connector pin in route (at least one of access port or connector pin in route must be provided) or both. Where access port is provided alone, this may be because all pins in the connectors of the access port are used, because the connector pin detail id not known the and to its subset of connectorPins which are involved in the physical route. An access port may include connectorPins of more Equipments, e.g., in case of bidirectional access port shared by two 'unidirectional'; Equipments. Connector pin details may be provided alone without an access port where there are no access ports modelled."; } grouping geolocation { leaf altitude { type decimal64 { fraction-digits 7; } config false; description "Distance above sea level. Measured in millimeters. CONDITION: Mandatory where altitude information is relevant and available."; } leaf latitude { type decimal64 { fraction-digits 7; } config false; description "Relative position north or south on the Earth's surface, in decimal degree (DD) used to express latitude and longitude geographic coordinates. Range: '-90..90'"; } leaf longitude { type decimal64 { fraction-digits 7; } config false; description "Angular distance east or west on the Earth's surface in decimal degree (DD) used to express latitude and longitude geographic coordinates. Range: '-180..180'"; } description "GPS location."; } /************************** * 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"; } } } }