1 module org-openroadm-device {
2 namespace "http://org/openroadm/device";
3 prefix org-openroadm-device;
5 import ietf-yang-types {
6 prefix ietf-yang-types;
8 import ietf-inet-types {
9 prefix ietf-inet-types;
14 import org-openroadm-common-types {
15 prefix org-openroadm-common-types;
16 revision-date 2016-10-14;
19 import org-openroadm-resource-types {
20 prefix org-openroadm-resource-types;
21 revision-date 2016-10-14;
24 import org-openroadm-wavelength-map {
25 prefix org-openroadm-wavelength-map;
26 revision-date 2016-10-14;
29 import org-openroadm-physical-types {
30 prefix org-openroadm-physical-types;
31 revision-date 2016-10-14;
34 import org-openroadm-user-mgmt {
35 prefix org-openroadm-user-mgmt;
36 revision-date 2016-10-14;
39 import org-openroadm-port-types {
40 prefix org-openroadm-port-types;
41 revision-date 2017-09-29;
44 import org-openroadm-interfaces {
45 prefix org-openroadm-interfaces;
46 revision-date 2016-10-14;
49 import org-openroadm-swdl {
50 prefix org-openroadm-swdl;
51 revision-date 2016-10-14;
54 import org-openroadm-equipment-states-types {
55 prefix org-openroadm-equipment-states-types;
56 revision-date 2016-10-14;
59 organization "Open ROADM MSA";
63 "YANG definitions of ROADM device
65 Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016,
66 AT&T Intellectual Property. All other rights reserved.
68 Redistribution and use in source and binary forms, with or without modification,
69 are permitted provided that the following conditions are met:
71 * Redistributions of source code must retain the above copyright notice, this
72 list of conditions and the following disclaimer.
73 * Redistributions in binary form must reproduce the above copyright notice,
74 this list of conditions and the following disclaimer in the documentation and/or
75 other materials provided with the distribution.
76 * Neither the Members of the Open ROADM MSA Agreement nor the names of its
77 contributors may be used to endorse or promote products derived from this software
78 without specific prior written permission.
80 THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA AGREEMENT ''AS IS''
81 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
82 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
83 IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA AGREEMENT BE LIABLE FOR ANY DIRECT,
84 INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
85 NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
86 OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
87 WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
88 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
89 POSSIBILITY OF SUCH DAMAGE.
91 Also contains code components extracted from IETF netconf. These code components
92 are copyrighted and licensed as follows:
94 Copyright (c) 2016 IETF Trust and the persons identified as the document authors.
97 This document is subject to BCP 78 and the IETF Trust’s Legal Provisions Relating
98 to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of
99 publication of this document. Please review these documents carefully, as they
100 describe your rights and restrictions with respect to this document. Code Components
101 extracted from this document must include Simplified BSD License text as described in
102 Section 4.e of the Trust Legal Provisions and are provided without warranty as
103 described in the Simplified BSD License.";
105 revision 2017-02-06 {
107 "Version 1.2.1 - removed pattern for current-datetime in info tree and rpc";
110 revision 2016-10-14 {
115 rpc get-connection-port-trail {
117 leaf connection-number {
123 uses org-openroadm-common-types:rpc-response-status;
125 uses org-openroadm-common-types:physical-location;
127 refine "circuit-pack-name" {
137 rpc disable-automatic-shutoff {
141 path "/org-openroadm-device/shelves/shelf-name";
145 "The shelf where amp is located";
159 uses org-openroadm-common-types:rpc-response-status;
168 leaf port-direction {
169 type org-openroadm-common-types:direction;
179 uses org-openroadm-common-types:rpc-response-status;
183 notification otdr-scan-result {
195 "Completed or Failed for the scan's final status";
202 rpc set-current-datetime {
204 "Set the info/current-datetime leaf to the specified value.";
206 leaf current-datetime {
207 type ietf-yang-types:date-and-time;
210 "The current system date and time in UTC. Format: YYYY-MM-DDTHH:MM:SS";
215 uses org-openroadm-common-types:rpc-response-status;
219 grouping device-common {
223 "Globally unique identifer for a device.";
229 "Number assigned to a ROADM node at a
233 type org-openroadm-common-types:node-types;
235 "Identifier for node-type e.g Roadm, xponder";
242 "Common Language Location Identifier.";
244 uses org-openroadm-physical-types:node-info;
246 type ietf-inet-types:ip-address;
248 "IP Address of device";
255 "The length of the subnet prefix";
257 leaf defaultGateway {
258 type ietf-inet-types:ip-address;
273 leaf current-ipAddress {
274 type ietf-inet-types:ip-address;
277 "Current IP Address of device";
279 leaf current-prefix-length {
285 "The current length of the subnet prefix";
287 leaf current-defaultGateway {
288 type ietf-inet-types:ip-address;
291 "Current Default Gateway";
294 type ietf-yang-types:mac-address;
296 "MAC Address of device";
299 leaf softwareVersion {
308 "Template information used in the deployment.";
310 leaf current-datetime {
311 type ietf-yang-types:date-and-time;
314 "The current system date and time in UTC. Format: YYYY-MM-DDTHH:MM:SS.mm+ ";
316 container geoLocation {
325 "[From wikipedia] Latitude is an angle (defined below)
326 which ranges from 0° at the Equator to 90° (North or
327 South) at the poles";
335 "[From wikipedia] The longitude is measured as the
336 angle east or west from the Prime Meridian, ranging
337 from 0° at the Prime Meridian to +180° eastward and
345 "slots information. To be populated by NE during retrieval.";
349 "The name of this slot.";
356 leaf provisioned-circuit-pack {
358 path "/org-openroadm-device/circuit-packs/circuit-pack-name";
361 "The supported circuit-pack. It will be empty if no provision on this slot.";
373 "Unique identifier for this shelf within a device";
378 "The shelf type: describe the shelf with a unique string.";
384 "Reflect the shelf physical location data including floor, aisle, bay values.";
387 leaf shelf-position {
389 "Reflect the shelf vertical position within an equipment bay.";
392 leaf administrative-state {
394 "Admin State of the shelf";
395 type org-openroadm-equipment-states-types:admin-states;
397 uses org-openroadm-physical-types:common-info;
398 leaf equipment-state {
399 type org-openroadm-equipment-states-types:states;
401 "equipment state for the shelf, used to track the lifecycle state.";
404 type ietf-yang-types:date-and-time;
406 "due date for the shelf.";
410 "List of slots on this shelf. To be populated by NE during retrieval.";
417 grouping circuit-packs {
420 "List of circuit packs. This includes common equipment, like fans, power supplies, etc.";
421 key "circuit-pack-name";
422 leaf circuit-pack-type {
424 "Type of circuit-pack";
428 leaf circuit-pack-product-code {
430 "Product Code for the circuit-pack";
437 grouping circuit-pack {
438 leaf circuit-pack-name {
440 "Unique identifier for this circuit-pack within a device";
443 leaf administrative-state {
445 "Administrative state of circuit-pack";
446 type org-openroadm-equipment-states-types:admin-states;
448 uses org-openroadm-physical-types:common-info;
449 container circuit-pack-category {
451 "General type of circuit-pack";
452 uses org-openroadm-common-types:equipment-type;
455 leaf equipment-state {
457 "Equipment state, which complements operational state.";
458 type org-openroadm-equipment-states-types:states;
460 leaf circuit-pack-mode {
462 "Circuit-pack mode allowed. e.g. NORMAL or REGEN";
468 path "/org-openroadm-device/shelves/shelf-name";
481 type ietf-yang-types:date-and-time;
483 "due date for this circuit-pack.";
485 container parent-circuit-pack {
487 "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.";
488 uses circuit-pack-name;
492 "Slot name on parent-circuit-pack.";
497 "List of circuit-pack slots on this circuit-pack. To be populated by NE during retrieval.";
505 "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.";
507 container roadm-port {
508 when "../port-qual='roadm-external'";
509 uses org-openroadm-port-types:roadm-port;
511 container transponder-port {
512 when "../port-qual='xpdr-network' or ../port-qual='xpdr-client'";
513 uses org-openroadm-port-types:common-port;
515 container otdr-port {
516 when "../port-qual='otdr'";
518 "Settings for otdr port.";
519 leaf launch-cable-length {
524 leaf port-direction {
525 type org-openroadm-common-types:direction;
531 grouping connection {
533 "Grouping used to define connections.";
534 leaf connection-number {
537 leaf wavelength-number {
541 "wavelength-number, can be used to access wavelength-map
542 to get wavelength value in nm.";
544 leaf opticalControlMode {
546 "Whether connection is currently in power or gain/loss mode";
547 type org-openroadm-common-types:optical-control-mode;
548 reference "openroadm.org: Open ROADM MSA Specification.";
551 leaf target-output-power {
552 type org-openroadm-common-types:power-dBm;
554 "The output target power for this connection. When set, the ROADM will work to ensure that current-output-power reaches this level.";
559 path "/org-openroadm-device/interface/name";
564 container destination {
567 path "/org-openroadm-device/interface/name";
577 must "not( current() > /org-openroadm-device/info/max-degrees) and current() > 0" {
578 error-message "Degree not supported by device ";
580 "Validating if the degree is supported by device";
583 leaf max-wavelengths {
586 "maximum number of wavelengths";
593 "list for Cards associated with a degree";
597 uses circuit-pack-name {
598 refine "circuit-pack-name" {
603 list connection-ports {
605 "Port associated with degree: One if bi-directional; two if uni-directional";
611 refine "circuit-pack-name" {
619 container otdr-port {
621 "otdr port associated with degree.";
626 grouping external-links {
628 "YANG definitions for external links..
629 - physical links between ROADMs and between the ROADMs and XPonders, which can be added and removed maually.";
631 key "external-link-name";
636 grouping external-link {
637 leaf external-link-name {
641 uses org-openroadm-resource-types:device-id {
646 uses org-openroadm-resource-types:port-name {
647 refine "circuit-pack-name" {
655 container destination {
656 uses org-openroadm-resource-types:device-id {
661 uses org-openroadm-resource-types:port-name {
662 refine "circuit-pack-name" {
672 grouping internal-links {
674 key "internal-link-name";
680 grouping internal-link {
681 leaf internal-link-name {
686 refine "circuit-pack-name" {
694 container destination {
696 refine "circuit-pack-name" {
706 grouping physical-links {
708 "YANG definitions for physical links.
709 - phyical links between cards within a ROADM, which are populated by the ROADM and cannot be added or removed manually. ";
711 key "physical-link-name";
716 grouping physical-link {
717 leaf physical-link-name {
722 refine "circuit-pack-name" {
730 container destination {
732 refine "circuit-pack-name" {
743 leaf max-add-drop-ports {
750 must "not(current()>/org-openroadm-device/info/max-srgs) and current()>0" {
751 error-message "invalid SRG";
753 "Validating if the srg is supported by add/drop group";
756 leaf wavelengthDuplication {
758 "Whether the SRG can handle duplicate wavelengths and if so to what extent.";
764 "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.";
767 enum "onePerDegree" {
769 "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.";
777 "list for Cards associated with an add/drop group and srg";
781 uses circuit-pack-name {
782 refine "circuit-pack-name" {
789 grouping degree-number {
792 "Degree identifier. Unique within the context of a device.";
794 path "/org-openroadm-device/degree/degree-number";
799 grouping circuit-pack-name {
800 leaf circuit-pack-name {
802 "Circuit-Pack identifier. Unique within the context of a device.";
804 path "/org-openroadm-device/circuit-packs/circuit-pack-name";
810 uses circuit-pack-name;
813 "Port identifier. Unique within the context of a circuit-pack.";
815 path "/org-openroadm-device/circuit-packs[circuit-pack-name=current()/../circuit-pack-name]/ports/port-name";
820 grouping srg-number {
823 "Shared Risk Group identifier. Unique within the context of a device.";
825 path "/org-openroadm-device/shared-risk-group/srg-number";
830 grouping supporting-port-name {
831 leaf supporting-circuit-pack-name {
833 "Identifier of the supporting circuit-pack.";
835 path "/org-openroadm-device/circuit-packs/circuit-pack-name";
839 leaf supporting-port {
841 "Identifier of the supporting port.";
844 path "/org-openroadm-device/circuit-packs[circuit-pack-name=current()/../supporting-circuit-pack-name]/ports/port-name";
849 grouping interface-name {
850 leaf interface-name {
852 "Name of an interface. Unique within the context of a device.";
854 path "/org-openroadm-device/interface/name";
860 grouping interfaces-grp {
862 "OpenROADM Interface configuration parameters.";
866 "The list of configured interfaces on the device.";
870 "The name of the interface.";
875 "A textual description of the interface.";
879 base org-openroadm-interfaces:interface-type;
883 "The type of the interface.";
885 leaf administrative-state {
886 type org-openroadm-equipment-states-types:admin-states;
888 leaf operational-state {
889 type org-openroadm-common-types:state;
897 "circuit identifier/user label,
898 can be used in alarm correlation and/or connection management ";
900 leaf supporting-interface {
902 path "/org-openroadm-device/interface/name";
905 uses supporting-port-name;
911 "Grouping of attributes related to a port object.";
916 "Identifier for a port, unique within a circuit pack";
921 "Type of the pluggable or fixed port.";
925 enum "roadm-internal" {
928 enum "roadm-external" {
931 enum "xpdr-network" {
942 leaf port-wavelength-type {
943 type org-openroadm-port-types:port-wavelength-types;
946 "Type of port - single, multiple-wavelength, etc.";
948 leaf port-direction {
949 type org-openroadm-common-types:direction;
953 "Whether port is uni (tx/rx) or bi-directional and";
966 "circuit identifier/user label,
967 can be used in alarm correlation and/or connection management ";
970 leaf administrative-state {
971 type org-openroadm-equipment-states-types:admin-states;
973 "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.";
974 default "outOfService";
976 leaf operational-state {
977 type org-openroadm-common-types:state;
981 "Operational state of a port";
983 leaf-list supported-interface-capability {
985 "Interface types supported on this port";
988 base org-openroadm-port-types:supported-if-capability;
991 leaf logical-connection-point {
994 "delete or replace with list logical-ports or connections?";
996 container partner-port {
999 "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.";
1002 container parent-port {
1005 "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.";
1011 "List of the interfaces this port supports. This is a list of names of instances in the flat instance list";
1012 uses interface-name;
1016 uses org-openroadm-device-container;
1018 grouping org-openroadm-device-container {
1019 container org-openroadm-device {
1025 "Max. number of degrees supported by device";
1031 "Max. number of SRGs in an add/drop group";
1037 "Stores a list of users";
1038 uses org-openroadm-user-mgmt:user-profile;
1040 container pending-sw {
1042 uses org-openroadm-swdl:sw-bank;
1046 uses interfaces-grp;
1047 container protocols {
1049 "Contains the supported protocols";
1051 container wavelength-map {
1053 "The wavelength-number and center frequency, wavelength mapping";
1055 uses org-openroadm-wavelength-map:wavelength-map-g;
1057 uses internal-links;
1058 uses physical-links;
1059 uses external-links;
1061 when "/org-openroadm-device/info/node-type='rdm'";
1062 key "degree-number";
1065 list shared-risk-group {
1066 when "/org-openroadm-device/info/node-type='rdm'";
1070 list roadm-connections {
1071 when "/org-openroadm-device/info/node-type='rdm'";
1072 key "connection-number";
1075 list connection-map {
1076 key "connection-map-number";
1078 leaf connection-map-number {
1080 "Unique identifier for this connection-map entry";
1084 leaf circuit-pack-name {
1086 path "/org-openroadm-device/circuit-packs/circuit-pack-name";
1092 "Port identifier. Unique within the context of a circuit-pack.";
1094 path "/org-openroadm-device/circuit-packs[circuit-pack-name=current()/../circuit-pack-name]/ports/port-name";
1100 key "circuit-pack-name port-name";
1102 leaf circuit-pack-name {
1104 path "/org-openroadm-device/circuit-packs/circuit-pack-name";
1110 "Port identifier. Unique within the context of a circuit-pack.";
1112 path "/org-openroadm-device/circuit-packs[circuit-pack-name=current()/../circuit-pack-name]/ports/port-name";
1121 grouping common-session-parms {
1123 "Common session parameters to identify a
1124 management session.";
1130 "Name of the user for the session.";
1134 type ietf-nc:session-id-or-zero-type;
1137 "Identifier of the session.
1138 A NETCONF session MUST be identified by a non-zero value.
1139 A non-NETCONF session MAY be identified by the value zero.";
1143 type ietf-inet-types:ip-address;
1145 "Address of the remote host for the session.";
1148 grouping changed-by-parms {
1150 "Common parameters to identify the source
1151 of a change event, such as a configuration
1152 or capability change.";
1154 container changed-by {
1156 "Indicates the source of the change.
1157 If caused by internal action, then the
1158 empty leaf 'server' will be present.
1159 If caused by a management session, then
1160 the name, remote host address, and session ID
1161 of the session that made the change will be reported.";
1162 choice server-or-user {
1166 "If present, the change was caused
1171 uses common-session-parms;
1173 } // choice server-or-user
1174 } // container changed-by-parms
1176 notification change-notification {
1178 "The Notification that a resource has been added, modified or removed.
1179 This notification can be triggered by changes in configuration and operational data.
1180 It shall contain the changed field pointed by the xpath.
1181 Typically it is not intended for frequently changing volatile data e.g. PM, power levels";
1184 description "The time the change occurs.";
1185 type ietf-yang-types:date-and-time;
1187 uses changed-by-parms;
1192 description "The <running> datastore has changed.";
1195 description "The <startup> datastore has changed";
1200 "Indicates which configuration datastore has changed.";
1204 "An edit (change) record SHOULD be present for each distinct
1205 edit operation that the server has detected on
1206 the target datastore. This list MAY be omitted
1207 if the detailed edit operations are not known.
1208 The server MAY report entries in this list for
1209 changes not made by a NETCONF session.";
1212 type instance-identifier;
1214 "Topmost node associated with the configuration or operationa change.
1215 A server SHOULD set this object to the node within
1216 the datastore that is being altered. A server MAY
1217 set this object to one of the ancestors of the actual
1218 node that was changed, or omit this object, if the
1219 exact node is not known.";
1222 type ietf-nc:edit-operation-type;
1224 "Type of edit operation performed.
1225 A server MUST set this object to the NETCONF edit
1226 operation performed on the target datastore.";
1229 } // notification change-notification