module org-openroadm-device { namespace "http://org/openroadm/device"; prefix org-openroadm-device; import ietf-yang-types { prefix ietf-yang-types; } import ietf-inet-types { prefix ietf-inet-types; } import ietf-netconf { prefix ietf-nc; } import org-openroadm-common-types { prefix org-openroadm-common-types; revision-date 2016-10-14; } import org-openroadm-resource-types { prefix org-openroadm-resource-types; revision-date 2016-10-14; } import org-openroadm-wavelength-map { prefix org-openroadm-wavelength-map; revision-date 2016-10-14; } import org-openroadm-physical-types { prefix org-openroadm-physical-types; revision-date 2016-10-14; } import org-openroadm-user-mgmt { prefix org-openroadm-user-mgmt; revision-date 2016-10-14; } import org-openroadm-port-types { prefix org-openroadm-port-types; revision-date 2016-10-14; } import org-openroadm-interfaces { prefix org-openroadm-interfaces; revision-date 2016-10-14; } import org-openroadm-swdl { prefix org-openroadm-swdl; revision-date 2016-10-14; } import org-openroadm-equipment-states-types { prefix org-openroadm-equipment-states-types; revision-date 2016-10-14; } organization "Open ROADM MSA"; contact "OpenROADM.org"; description "YANG definitions of ROADM device Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, AT&T Intellectual Property. All other rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the Members of the Open ROADM MSA Agreement nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA AGREEMENT ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA AGREEMENT BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Also contains code components extracted from IETF netconf. These code components are copyrighted and licensed as follows: Copyright (c) 2016 IETF Trust and the persons identified as the document authors. All rights reserved. This document is subject to BCP 78 and the IETF Trust’s Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License."; revision 2017-02-06 { description "Version 1.2.1 - removed pattern for current-datetime in info tree and rpc"; } revision 2016-10-14 { description "Version 1.2"; } rpc get-connection-port-trail { input { leaf connection-number { type string; mandatory true; } } output { uses org-openroadm-common-types:rpc-response-status; list ports { uses org-openroadm-common-types:physical-location; uses port-name { refine "circuit-pack-name" { mandatory true; } refine "port-name" { mandatory true; } } } } } rpc disable-automatic-shutoff { input { leaf amp { type leafref { path "/org-openroadm-device/shelves/shelf-name"; } mandatory true; description "The shelf where amp is located"; } leaf degree-number { type uint16; mandatory true; } leaf support-timer { type uint16 { range "1..600"; } default "20"; } } output { uses org-openroadm-common-types:rpc-response-status; } } rpc start-scan { input { leaf degree-number { type uint16; mandatory true; } leaf port-direction { type org-openroadm-common-types:direction; } leaf distance { type uint32; } leaf resolution { type uint32; } } output { uses org-openroadm-common-types:rpc-response-status; } } notification otdr-scan-result { leaf status { type enumeration { enum "Completed" { value 1; } enum "Failed" { value 2; } } mandatory true; description "Completed or Failed for the scan's final status"; } leaf result-file { type string; } } rpc set-current-datetime { description "Set the info/current-datetime leaf to the specified value."; input { leaf current-datetime { type ietf-yang-types:date-and-time; mandatory true; description "The current system date and time in UTC. Format: YYYY-MM-DDTHH:MM:SS"; } } output { uses org-openroadm-common-types:rpc-response-status; } } grouping device-common { leaf node-id { type string; description "Globally unique identifer for a device."; default "openroadm"; } leaf node-number { type uint32; description "Number assigned to a ROADM node at a given office"; } leaf node-type { type org-openroadm-common-types:node-types; description "Identifier for node-type e.g Roadm, xponder"; config false; mandatory true; } leaf clli { type string; description "Common Language Location Identifier."; } uses org-openroadm-physical-types:node-info; leaf ipAddress { type ietf-inet-types:ip-address; description "IP Address of device"; } leaf prefix-length { type uint8 { range "0..128"; } description "The length of the subnet prefix"; } leaf defaultGateway { type ietf-inet-types:ip-address; description "Default Gateway"; } leaf source { type enumeration { enum "static" { value 1; } enum "dhcp" { value 2; } } config false; } leaf current-ipAddress { type ietf-inet-types:ip-address; config false; description "Current IP Address of device"; } leaf current-prefix-length { type uint8 { range "0..128"; } config false; description "The current length of the subnet prefix"; } leaf current-defaultGateway { type ietf-inet-types:ip-address; config false; description "Current Default Gateway"; } leaf macAddress { type ietf-yang-types:mac-address; description "MAC Address of device"; config false; } leaf softwareVersion { type string; config false; description "Software version"; } leaf template { type string; description "Template information used in the deployment."; } leaf current-datetime { type ietf-yang-types:date-and-time; config false; description "The current system date and time in UTC. Format: YYYY-MM-DDTHH:MM:SS.mm+ "; } container geoLocation { description "GPS location"; leaf latitude { type decimal64 { fraction-digits 16; range "-90 .. 90"; } description "[From wikipedia] Latitude is an angle (defined below) which ranges from 0° at the Equator to 90° (North or South) at the poles"; } leaf longitude { type decimal64 { fraction-digits 16; range "-180 .. 180"; } description "[From wikipedia] The longitude is measured as the angle east or west from the Prime Meridian, ranging from 0° at the Prime Meridian to +180° eastward and −180° westward."; } } } grouping slot-info { description "slots information. To be populated by NE during retrieval."; leaf slot-name { type string; description "The name of this slot."; } leaf label { type string; description "Faceplate label"; } leaf provisioned-circuit-pack { type leafref { path "/org-openroadm-device/circuit-packs/circuit-pack-name"; } description "The supported circuit-pack. It will be empty if no provision on this slot."; } } grouping shelves { list shelves { key "shelf-name"; uses shelf; } } grouping shelf { leaf shelf-name { description "Unique identifier for this shelf within a device"; type string; } leaf shelf-type { description "The shelf type: describe the shelf with a unique string."; type string; mandatory true; } leaf rack { description "Reflect the shelf physical location data including floor, aisle, bay values."; type string; } leaf shelf-position { description "Reflect the shelf vertical position within an equipment bay."; type string; } leaf administrative-state { description "Admin State of the shelf"; type org-openroadm-equipment-states-types:admin-states; } uses org-openroadm-physical-types:common-info; leaf equipment-state { type org-openroadm-equipment-states-types:states; description "equipment state for the shelf, used to track the lifecycle state."; } leaf due-date { type ietf-yang-types:date-and-time; description "due date for the shelf."; } list slots { description "List of slots on this shelf. To be populated by NE during retrieval."; key "slot-name"; config false; uses slot-info; } } grouping circuit-packs { list circuit-packs { description "List of circuit packs. This includes common equipment, like fans, power supplies, etc."; key "circuit-pack-name"; leaf circuit-pack-type { description "Type of circuit-pack"; type string; mandatory true; } leaf circuit-pack-product-code { description "Product Code for the circuit-pack"; type string; } uses circuit-pack; } } grouping circuit-pack { leaf circuit-pack-name { description "Unique identifier for this circuit-pack within a device"; type string; } leaf administrative-state { description "Administrative state of circuit-pack"; type org-openroadm-equipment-states-types:admin-states; } uses org-openroadm-physical-types:common-info; container circuit-pack-category { description "General type of circuit-pack"; uses org-openroadm-common-types:equipment-type; config false; } leaf equipment-state { description "Equipment state, which complements operational state."; type org-openroadm-equipment-states-types:states; } leaf circuit-pack-mode { description "Circuit-pack mode allowed. e.g. NORMAL or REGEN"; type string; default "NORMAL"; } leaf shelf { type leafref { path "/org-openroadm-device/shelves/shelf-name"; } mandatory true; } leaf slot { type string; mandatory true; } leaf subSlot { type string; mandatory false; } leaf due-date { type ietf-yang-types:date-and-time; description "due date for this circuit-pack."; } container parent-circuit-pack { description "In the case of circuit packs that contain other equipment (modules or pluggables), this captures the hierarchy of that equipment. It is a vendor specific design decision if the ports for single-port pluggables are modeled as children of the parent circuit-pack, or as children of the pluggable circuit-pack contained in the parent circuit-pack. For modules with multiple ports, it is recommended that ports be children of the module and not the carrier, to help in fault correlation and isolation in the case of a module failure."; uses circuit-pack-name; leaf cp-slot-name { type string; description "Slot name on parent-circuit-pack."; } } list cp-slots { description "List of circuit-pack slots on this circuit-pack. To be populated by NE during retrieval."; key "slot-name"; config false; uses slot-info; } list ports { key "port-name"; description "List of ports on this circuit-pack. For single port pluggables, the port may be modeled against the pluggable itself, or against the parent-circuit-pack. For mulit-port pluggables, it is recommended that ports be modeled against the module itself. Modeling ports as close to the equipment hierarchy as possible will help in fault correlation and isolation since common failures associated with supporting equipment can be used to help identify symptomatic failures on the contained ports."; uses port; container roadm-port { when "../port-qual='roadm-external'"; uses org-openroadm-port-types:roadm-port; } container transponder-port { when "../port-qual='xpdr-network' or ../port-qual='xpdr-client'"; uses org-openroadm-port-types:common-port; } container otdr-port { when "../port-qual='otdr'"; description "Settings for otdr port."; leaf launch-cable-length { type uint32; default "30"; units "m"; } leaf port-direction { type org-openroadm-common-types:direction; } } } } grouping connection { description "Grouping used to define connections."; leaf connection-number { type string; } leaf wavelength-number { type uint32; mandatory true; description "wavelength-number, can be used to access wavelength-map to get wavelength value in nm."; } leaf opticalControlMode { description "Whether connection is currently in power or gain/loss mode"; type org-openroadm-common-types:optical-control-mode; reference "openroadm.org: Open ROADM MSA Specification."; default "off"; } leaf target-output-power { type org-openroadm-common-types:power-dBm; description "The output target power for this connection. When set, the ROADM will work to ensure that current-output-power reaches this level."; } container source { leaf src-if { type leafref { path "/org-openroadm-device/interface/name"; } mandatory true; } } container destination { leaf dst-if { type leafref { path "/org-openroadm-device/interface/name"; } mandatory true; } } } grouping degree { leaf degree-number { type uint16; must "not( current() > /org-openroadm-device/info/max-degrees) and current() > 0" { error-message "Degree not supported by device "; description "Validating if the degree is supported by device"; } } leaf max-wavelengths { type uint16; description "maximum number of wavelengths"; config false; mandatory true; } list circuit-packs { key "index"; description "list for Cards associated with a degree"; leaf index { type uint32; } uses circuit-pack-name { refine "circuit-pack-name" { mandatory true; } } } list connection-ports { description "Port associated with degree: One if bi-directional; two if uni-directional"; key "index"; leaf index { type uint32; } uses port-name { refine "circuit-pack-name" { mandatory true; } refine "port-name" { mandatory true; } } } container otdr-port { description "otdr port associated with degree."; uses port-name; } } grouping external-links { description "YANG definitions for external links.. - physical links between ROADMs and between the ROADMs and XPonders, which can be added and removed maually."; list external-link { key "external-link-name"; uses external-link; } } grouping external-link { leaf external-link-name { type string; } container source { uses org-openroadm-resource-types:device-id { refine "node-id" { mandatory true; } } uses org-openroadm-resource-types:port-name { refine "circuit-pack-name" { mandatory true; } refine "port-name" { mandatory true; } } } container destination { uses org-openroadm-resource-types:device-id { refine "node-id" { mandatory true; } } uses org-openroadm-resource-types:port-name { refine "circuit-pack-name" { mandatory true; } refine "port-name" { mandatory true; } } } } grouping internal-links { list internal-link { key "internal-link-name"; config false; uses internal-link; } } grouping internal-link { leaf internal-link-name { type string; } container source { uses port-name { refine "circuit-pack-name" { mandatory true; } refine "port-name" { mandatory true; } } } container destination { uses port-name { refine "circuit-pack-name" { mandatory true; } refine "port-name" { mandatory true; } } } } grouping physical-links { description "YANG definitions for physical links. - phyical links between cards within a ROADM, which are populated by the ROADM and cannot be added or removed manually. "; list physical-link { key "physical-link-name"; uses physical-link; } } grouping physical-link { leaf physical-link-name { type string; } container source { uses port-name { refine "circuit-pack-name" { mandatory true; } refine "port-name" { mandatory true; } } } container destination { uses port-name { refine "circuit-pack-name" { mandatory true; } refine "port-name" { mandatory true; } } } } grouping srg { leaf max-add-drop-ports { type uint16; config false; mandatory true; } leaf srg-number { type uint16; must "not(current()>/org-openroadm-device/info/max-srgs) and current()>0" { error-message "invalid SRG"; description "Validating if the srg is supported by add/drop group"; } } leaf wavelengthDuplication { description "Whether the SRG can handle duplicate wavelengths and if so to what extent."; config false; mandatory true; type enumeration { enum "onePerSRG" { description "The SRG cannot handle wavelength duplication. Attempting to provision a connection on this SRG that uses the same wavelength as an existing service will result in failure."; value 1; } enum "onePerDegree" { description "The SRG can handle wavelength duplication, but only one per degree. Attempting to provision a connection on this SRG that uses the same wavelength as an existing service will succeed, so long as the connections are not using the same degree."; value 2; } } } list circuit-packs { key "index"; description "list for Cards associated with an add/drop group and srg"; leaf index { type uint32; } uses circuit-pack-name { refine "circuit-pack-name" { mandatory true; } } } } grouping degree-number { leaf degree-number { description "Degree identifier. Unique within the context of a device."; type leafref { path "/org-openroadm-device/degree/degree-number"; } } } grouping circuit-pack-name { leaf circuit-pack-name { description "Circuit-Pack identifier. Unique within the context of a device."; type leafref { path "/org-openroadm-device/circuit-packs/circuit-pack-name"; } } } grouping port-name { uses circuit-pack-name; leaf port-name { description "Port identifier. Unique within the context of a circuit-pack."; type leafref { path "/org-openroadm-device/circuit-packs[circuit-pack-name=current()/../circuit-pack-name]/ports/port-name"; } } } grouping srg-number { leaf srg-number { description "Shared Risk Group identifier. Unique within the context of a device."; type leafref { path "/org-openroadm-device/shared-risk-group/srg-number"; } } } grouping supporting-port-name { leaf supporting-circuit-pack-name { description "Identifier of the supporting circuit-pack."; type leafref { path "/org-openroadm-device/circuit-packs/circuit-pack-name"; } mandatory true; } leaf supporting-port { description "Identifier of the supporting port."; mandatory true; type leafref { path "/org-openroadm-device/circuit-packs[circuit-pack-name=current()/../supporting-circuit-pack-name]/ports/port-name"; } } } grouping interface-name { leaf interface-name { description "Name of an interface. Unique within the context of a device."; type leafref { path "/org-openroadm-device/interface/name"; } config false; } } grouping interfaces-grp { description "OpenROADM Interface configuration parameters."; list interface { key "name"; description "The list of configured interfaces on the device."; leaf name { type string; description "The name of the interface."; } leaf description { type string; description "A textual description of the interface."; } leaf type { type identityref { base org-openroadm-interfaces:interface-type; } mandatory true; description "The type of the interface."; } leaf administrative-state { type org-openroadm-equipment-states-types:admin-states; } leaf operational-state { type org-openroadm-common-types:state; config false; } leaf circuit-id { type string { length "0..45"; } description "circuit identifier/user label, can be used in alarm correlation and/or connection management "; } leaf supporting-interface { type leafref { path "/org-openroadm-device/interface/name"; } } uses supporting-port-name; } } grouping port { description "Grouping of attributes related to a port object."; leaf port-name { type string; mandatory true; description "Identifier for a port, unique within a circuit pack"; } leaf port-type { type string; description "Type of the pluggable or fixed port."; } leaf port-qual { type enumeration { enum "roadm-internal" { value 1; } enum "roadm-external" { value 2; } enum "xpdr-network" { value 3; } enum "xpdr-client" { value 4; } enum "otdr" { value 5; } } } leaf port-wavelength-type { type org-openroadm-port-types:port-wavelength-types; config false; description "Type of port - single, multiple-wavelength, etc."; } leaf port-direction { type org-openroadm-common-types:direction; config false; mandatory true; description "Whether port is uni (tx/rx) or bi-directional and"; } leaf label { type string; config false; description "Faceplate label"; } leaf circuit-id{ type string{ length "0..45"; } description "circuit identifier/user label, can be used in alarm correlation and/or connection management "; } leaf administrative-state { type org-openroadm-equipment-states-types:admin-states; description "Administrative state of port. The value of this field independant of the state of its contained and containing resources. Setting this a port to administratively down will impact both its operational state, as well the operational state of its contained resources. If this port is an endpoint to a connection, internal-link, physical-link, etc, then administratevely disabling this port will impact the operational state of those items unless they are using some form of port-protection schema."; default "outOfService"; } leaf operational-state { type org-openroadm-common-types:state; config false; mandatory true; description "Operational state of a port"; } leaf-list supported-interface-capability { description "Interface types supported on this port"; config false; type identityref { base org-openroadm-port-types:supported-if-capability; } } leaf logical-connection-point { type string; description "delete or replace with list logical-ports or connections?"; } container partner-port { config false; description "For ports which are not identified as having a direction of bidirectional, this field is used to identify the port which corresponds to the reverse direction. A port pair should include a port for each direction (tx, rx) and report their mate as partner-port."; uses port-name; } container parent-port { config false; description "In the case of port hierarchy, this is the parent port, which is also modeled as port within this circuit-pack. This is used in the case of a port that supports a parallel connector that contains subports. The parent-port of the subport will be the port that contains this subport. This can be used to help isolate faults when a single fault on a parallel connector introduces symptomatic failures on the contained subports."; uses port-name; } list interfaces { config false; description "List of the interfaces this port supports. This is a list of names of instances in the flat instance list"; uses interface-name; } } uses org-openroadm-device-container; grouping org-openroadm-device-container { container org-openroadm-device { container info { uses device-common; leaf max-degrees { type uint16; description "Max. number of degrees supported by device"; config false; } leaf max-srgs { type uint16; description "Max. number of SRGs in an add/drop group"; config false; } } container users { description "Stores a list of users"; uses org-openroadm-user-mgmt:user-profile; } container pending-sw { config false; uses org-openroadm-swdl:sw-bank; } uses shelves; uses circuit-packs; uses interfaces-grp; container protocols { description "Contains the supported protocols"; } container wavelength-map { description "The wavelength-number and center frequency, wavelength mapping"; config false; uses org-openroadm-wavelength-map:wavelength-map-g; } uses internal-links; uses physical-links; uses external-links; list degree { when "/org-openroadm-device/info/node-type='rdm'"; key "degree-number"; uses degree; } list shared-risk-group { when "/org-openroadm-device/info/node-type='rdm'"; key "srg-number"; uses srg; } list roadm-connections { when "/org-openroadm-device/info/node-type='rdm'"; key "connection-number"; uses connection; } list connection-map { key "connection-map-number"; config false; leaf connection-map-number { description "Unique identifier for this connection-map entry"; type uint32; } container source { leaf circuit-pack-name { type leafref { path "/org-openroadm-device/circuit-packs/circuit-pack-name"; } mandatory true; } leaf port-name { description "Port identifier. Unique within the context of a circuit-pack."; type leafref { path "/org-openroadm-device/circuit-packs[circuit-pack-name=current()/../circuit-pack-name]/ports/port-name"; } mandatory true; } } list destination { key "circuit-pack-name port-name"; min-elements 1; leaf circuit-pack-name { type leafref { path "/org-openroadm-device/circuit-packs/circuit-pack-name"; } mandatory true; } leaf port-name { description "Port identifier. Unique within the context of a circuit-pack."; type leafref { path "/org-openroadm-device/circuit-packs[circuit-pack-name=current()/../circuit-pack-name]/ports/port-name"; } mandatory true; } } } } } grouping common-session-parms { description "Common session parameters to identify a management session."; leaf username { type string; mandatory true; description "Name of the user for the session."; } leaf session-id { type ietf-nc:session-id-or-zero-type; mandatory true; description "Identifier of the session. A NETCONF session MUST be identified by a non-zero value. A non-NETCONF session MAY be identified by the value zero."; } leaf source-host { type ietf-inet-types:ip-address; description "Address of the remote host for the session."; } } grouping changed-by-parms { description "Common parameters to identify the source of a change event, such as a configuration or capability change."; container changed-by { description "Indicates the source of the change. If caused by internal action, then the empty leaf 'server' will be present. If caused by a management session, then the name, remote host address, and session ID of the session that made the change will be reported."; choice server-or-user { leaf server { type empty; description "If present, the change was caused by the server."; } case by-user { uses common-session-parms; } } // choice server-or-user } // container changed-by-parms } notification change-notification { description "The Notification that a resource has been added, modified or removed. This notification can be triggered by changes in configuration and operational data. It shall contain the changed field pointed by the xpath. Typically it is not intended for frequently changing volatile data e.g. PM, power levels"; leaf change-time { description "The time the change occurs."; type ietf-yang-types:date-and-time; } uses changed-by-parms; leaf datastore { type enumeration { enum running { description "The datastore has changed."; } enum startup { description "The datastore has changed"; } } default "running"; description "Indicates which configuration datastore has changed."; } list edit { description "An edit (change) record SHOULD be present for each distinct edit operation that the server has detected on the target datastore. This list MAY be omitted if the detailed edit operations are not known. The server MAY report entries in this list for changes not made by a NETCONF session."; leaf target { type instance-identifier; description "Topmost node associated with the configuration or operationa change. A server SHOULD set this object to the node within the datastore that is being altered. A server MAY set this object to one of the ancestors of the actual node that was changed, or omit this object, if the exact node is not known."; } leaf operation { type ietf-nc:edit-operation-type; description "Type of edit operation performed. A server MUST set this object to the NETCONF edit operation performed on the target datastore."; } } // list edit } // notification change-notification }