--- /dev/null
+module o-ran-software-management {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:software-management:1.0";\r
+ prefix o-ran-swm;\r
+\r
+ import ietf-inet-types {\r
+ prefix "inet";\r
+ revision-date 2013-07-15;\r
+ }\r
+\r
+ import ietf-hardware {\r
+ prefix "hw";\r
+ }\r
+\r
+ import o-ran-hardware {\r
+ prefix "o-ran-hw";\r
+ }\r
+\r
+ import o-ran-file-management {\r
+ prefix "o-ran-fm";\r
+ }\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module defines operations and configuration for the management of software packages.\r
+ This module is derived out of opencpe-firmware-mgmt@2014-02-06.yang\r
+\r
+ Copyright 2019 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2019-07-03" {\r
+ description\r
+ "version 1.0.2\r
+\r
+ 1) backward compatible changes to correct sFTP Server Authentication .\r
+ 2) simplifying file management and authentication to reuse from o-ran-file-management module\r
+ 3) minor fixes according to lack of descriptions\r
+ 4) removal of not used grouping\r
+ 5) backward compatible changes to introduce groupings.";\r
+\r
+ reference "ORAN-WG4.M.0-v01.00";\r
+ }\r
+\r
+ revision "2019-02-04" {\r
+ description\r
+ "version 1.0.0\r
+\r
+ 1) imported model from xRAN\r
+ 2) changed namespace and reference from xran to o-ran";\r
+\r
+ reference "ORAN-WG4.M.0-v01.00";\r
+ }\r
+\r
+ // groupings\r
+\r
+ grouping slot-group {\r
+ description\r
+ "Contains information about each software slot and its content.";\r
+ list software-slot {\r
+ key name;\r
+ min-elements 2;\r
+\r
+ description\r
+ "Information about available software-slots and their software.";\r
+\r
+ leaf name {\r
+ type string;\r
+\r
+ description\r
+ "Name of the software package. This shall be unique to identify the software-slot.";\r
+ }\r
+\r
+ leaf status {\r
+ type enumeration {\r
+ enum VALID {\r
+ description\r
+ "Slot Contains software build considered as proven valid";\r
+ }\r
+ enum INVALID {\r
+ description\r
+ "software build is not currently used by O-RU. The software is considered by O-RU as damaged (e.g. wrong CRC)";\r
+ }\r
+ enum EMPTY {\r
+ description\r
+ "W slot does not contain software package.";\r
+ }\r
+ }\r
+ config false;\r
+ mandatory true;\r
+\r
+ description "Indicates the status of the software slot";\r
+ }\r
+\r
+ leaf active {\r
+ type boolean;\r
+ must "../status = 'VALID'";\r
+ config false;\r
+ description\r
+ "informs if software stored in particular slot is activated at the moment";\r
+ }\r
+\r
+ leaf running {\r
+ type boolean;\r
+ must "../status = 'VALID'";\r
+ config false;\r
+ description\r
+ "informs if software stored in particular slot is used at the moment";\r
+ }\r
+\r
+ leaf access {\r
+ type enumeration {\r
+ enum READ_ONLY {\r
+ description\r
+ "slot intended only for factory software,\r
+ activation of such software slot means getting back to factory defaults";\r
+ }\r
+ enum READ_WRITE {\r
+ description\r
+ "slot used for updating software";\r
+ }\r
+ }\r
+ default READ_WRITE;\r
+ config false;\r
+\r
+ description\r
+ "Indicates the writability of the slot.\r
+ A Read-Only software slot is one which has a factory installed software-slot";\r
+ }\r
+\r
+ leaf product-code {\r
+ type leafref {\r
+ path "/hw:hardware/hw:component/o-ran-hw:product-code";\r
+ }\r
+ config false;\r
+\r
+ description "product code provided by the vendor, specific to the product. This is derived from manifest file.";\r
+ }\r
+\r
+ leaf vendor-code {\r
+ type string {\r
+ length 1..2;\r
+ }\r
+ config false;\r
+\r
+ description\r
+ "Unique code of the vendor. This is derived from manifest file.";\r
+ }\r
+\r
+ leaf build-id {\r
+ type string;\r
+ config false;\r
+\r
+ description\r
+ "Identity associated with the software build. This is derived from manifest file.";\r
+ }\r
+\r
+ leaf build-name {\r
+ type string;\r
+ config false;\r
+\r
+ description\r
+ "Name of the build. This is derived from manifest file.";\r
+ }\r
+\r
+ leaf build-version {\r
+ type string;\r
+ description "The vendor-specific version string of the software build.";\r
+ }\r
+\r
+ list files {\r
+ key "name";\r
+ config false;\r
+\r
+ description "List of all the files present in the software package.";\r
+\r
+ leaf name {\r
+ type string;\r
+\r
+ description\r
+ "Name of the file installed in the slot.";\r
+ }\r
+\r
+ leaf version {\r
+ type string;\r
+\r
+ description\r
+ "Version of the file installed in the slot";\r
+ }\r
+ leaf local-path {\r
+ type string;\r
+ mandatory true;\r
+\r
+ description\r
+ "Complete path of the file stored locally";\r
+ }\r
+\r
+ leaf integrity {\r
+ type enumeration {\r
+ enum OK {\r
+ description "OK - indicates that file integrity is correct";\r
+ }\r
+ enum NOK {\r
+ description "NOK - indicates corrupted file";\r
+ }\r
+ }\r
+ config false;\r
+\r
+ description\r
+ "Result of the file integrity check (checksum calculation) during installation.";\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ grouping download-input {\r
+ description\r
+ "Grouping for sw download rpc input";\r
+ leaf remote-file-path {\r
+ type inet:uri;\r
+ mandatory true;\r
+ description\r
+ "URI of the software image including username.\r
+ The following format is possible:\r
+ sftp://<username>@<host>[:<port>]/path";\r
+ }\r
+\r
+ uses o-ran-fm:credential-information;\r
+ }\r
+\r
+ grouping download-output {\r
+ description\r
+ "Grouping for sw download rpc output";\r
+ leaf status {\r
+ type enumeration {\r
+ enum STARTED {\r
+ description\r
+ "Operation has been started without error.";\r
+ }\r
+ enum FAILED {\r
+ description\r
+ "Operation cannot be started because of error, more detailed information can be found in error-message.";\r
+ }\r
+ }\r
+ mandatory true;\r
+\r
+ description\r
+ "Status of the software files download";\r
+ }\r
+ leaf error-message {\r
+ when "../status = 'FAILED'";\r
+ type string;\r
+\r
+ description\r
+ "Detailed error Message when the status is failed.";\r
+ }\r
+\r
+ leaf notification-timeout {\r
+ type int32;\r
+ units seconds;\r
+ default 30;\r
+\r
+ description\r
+ "Notification timeout is the time NETCONF client shall\r
+ wait for a 'download-event' notification from O-RU. If there is no\r
+ 'download-event' notification received within notification-timeout,\r
+ NETCONF client shall assume the download timeout/failure, and follow necessary steps.";\r
+ }\r
+ }\r
+\r
+ grouping install-input {\r
+ description\r
+ "Grouping for sw installation rpc input";\r
+ leaf slot-name {\r
+ type leafref {\r
+ path "/software-inventory/software-slot/name";\r
+ }\r
+ must "/software-inventory/software-slot[name = current()][active = 'false' and running = 'false']" {\r
+ error-message "software-install may be requested only against active::false and running::false slot!";\r
+ }\r
+ mandatory true;\r
+\r
+ description\r
+ "software-slot to which the software shall be installed to.";\r
+ }\r
+\r
+ leaf-list file-names {\r
+ type string;\r
+\r
+ description\r
+ "Names of the files within software package to be installed";\r
+ }\r
+ }\r
+\r
+ grouping install-output {\r
+ description\r
+ "Grouping for sw installation rpc output";\r
+ leaf status {\r
+ type enumeration {\r
+ enum STARTED {\r
+ description\r
+ "Operation has been started without error.";\r
+ }\r
+ enum FAILED {\r
+ description\r
+ "Operation cannot be started because of error, more detailed information can be found in error-message.";\r
+ }\r
+ }\r
+ mandatory true;\r
+\r
+ description\r
+ "Status of the software package install.";\r
+ }\r
+ leaf error-message {\r
+ when "../status = 'FAILED'";\r
+ type string;\r
+\r
+ description\r
+ "Detailed error Message when the status is failed.";\r
+ }\r
+ }\r
+\r
+ grouping activate-input {\r
+ description\r
+ "Grouping for sw activation rpc input";\r
+ leaf slot-name {\r
+ type leafref {\r
+ path "/software-inventory/software-slot/name";\r
+ }\r
+ must "/software-inventory/software-slot[name = current()][status = 'VALID']" {\r
+ error-message "software activation may be requested only on VALID slot!";\r
+ }\r
+ mandatory true;\r
+\r
+ description\r
+ "Slot name on which software has to be activated.";\r
+ }\r
+ }\r
+\r
+ grouping activate-output {\r
+ description\r
+ "Grouping for sw activation rpc output";\r
+ leaf status {\r
+ type enumeration {\r
+ enum STARTED {\r
+ description\r
+ "Operation has been started without error.";\r
+ }\r
+ enum FAILED {\r
+ description\r
+ "Operation cannot be started because of error, more detailed information can be found in error-message.";\r
+ }\r
+ }\r
+ mandatory true;\r
+\r
+ description\r
+ "Status of the software files activation";\r
+ }\r
+ leaf error-message {\r
+ when "../status = 'FAILED'";\r
+ type string;\r
+\r
+ description\r
+ "Detailed error Message when the status is failed.";\r
+ }\r
+\r
+ leaf notification-timeout {\r
+ type int32;\r
+ units seconds;\r
+ default 30;\r
+\r
+ description\r
+ "Timeout on client waiting for the activate event";\r
+ }\r
+ }\r
+\r
+ grouping download-notification {\r
+ description\r
+ "Grouping for notification event structure for download completion";\r
+ leaf file-name {\r
+ type string;\r
+ mandatory true;\r
+\r
+ description\r
+ "File name of downloaded software package";\r
+ }\r
+\r
+ leaf status {\r
+ type enumeration {\r
+ enum COMPLETED {\r
+ description\r
+ "Operation completed succesfully";\r
+ }\r
+ enum AUTHENTICATION_ERROR {\r
+ description "source available, wrong credentials";\r
+ }\r
+ enum PROTOCOL_ERROR {\r
+ description "SFTP errors";\r
+ }\r
+ enum FILE_NOT_FOUND {\r
+ description "source not available.";\r
+ }\r
+ enum APPLICATION_ERROR {\r
+ description "Application related errors";\r
+ }\r
+ enum TIMEOUT {\r
+ description "Timeout waiting for download";\r
+ }\r
+ }\r
+\r
+ description\r
+ "Status of finished operation execution";\r
+ }\r
+ leaf error-message {\r
+ when "../status != 'COMPLETED'";\r
+ type string;\r
+\r
+ description\r
+ "Detailed description of faulty situation";\r
+ }\r
+ }\r
+\r
+ grouping install-notification {\r
+ description\r
+ "Grouping for notification event structure for installation completion";\r
+ leaf slot-name {\r
+ type leafref {\r
+ path "/software-inventory/software-slot/name";\r
+ }\r
+\r
+ description\r
+ "Name of the slot to which software was installed.";\r
+ }\r
+ leaf status {\r
+ type enumeration {\r
+ enum COMPLETED {\r
+ description\r
+ "Operation completed succesfully";\r
+ }\r
+ enum FILE_ERROR {\r
+ description "operation on the file resulted in in error, disk failure, not enough disk space,\r
+ incompatible file format";\r
+ }\r
+ enum INTEGRITY_ERROR {\r
+ description "file is corrupted";\r
+ }\r
+ enum APPLICATION_ERROR {\r
+ description "operation failed due to internal reason";\r
+ }\r
+ }\r
+\r
+ description\r
+ "Status of finished operation execution";\r
+ }\r
+ leaf error-message {\r
+ when "../status != 'COMPLETED'";\r
+ type string;\r
+\r
+ description\r
+ "Detailed description of faulty situation";\r
+ }\r
+ }\r
+\r
+ grouping activation-notification {\r
+ description\r
+ "Grouping for notification event structure for activation completion";\r
+ leaf slot-name {\r
+ type leafref {\r
+ path "/software-inventory/software-slot/name";\r
+ }\r
+\r
+ description\r
+ "Name of the slot which was activated";\r
+ }\r
+\r
+ leaf status {\r
+ type enumeration {\r
+ enum COMPLETED {\r
+ description\r
+ "Operation completed succesfully";\r
+ }\r
+ enum APPLICATION_ERROR {\r
+ description\r
+ "Operation finished with error, more details can by found in error-message";\r
+ }\r
+ }\r
+\r
+ description\r
+ "Status of finished operation execution";\r
+ }\r
+ leaf return-code {\r
+ type uint8;\r
+\r
+ description\r
+ "status code return when the software is tried to activate";\r
+ }\r
+ leaf error-message {\r
+ when "../status != 'COMPLETED'";\r
+ type string;\r
+\r
+ description\r
+ "Detailed description of faulty situation";\r
+ }\r
+ }\r
+\r
+ // top level container\r
+\r
+ container software-inventory {\r
+ config false;\r
+ description\r
+ "Contains information about each software slot and its content.";\r
+\r
+ uses slot-group;\r
+\r
+ }\r
+ // rpc statements\r
+\r
+ rpc software-download {\r
+ description\r
+ "Rpc needed to perform software download operation.";\r
+\r
+ input {\r
+ uses download-input;\r
+ }\r
+ output {\r
+ uses download-output;\r
+ }\r
+ }\r
+\r
+ rpc software-install {\r
+ description\r
+ "Install a previously downloaded software package.";\r
+\r
+ input {\r
+ uses install-input;\r
+ }\r
+ output {\r
+ uses install-output;\r
+ }\r
+ }\r
+\r
+ rpc software-activate {\r
+ description\r
+ "Activate a previously installed software.";\r
+ input {\r
+ uses activate-input;\r
+ }\r
+ output {\r
+ uses activate-output;\r
+ }\r
+ }\r
+\r
+ // notification definitions\r
+ notification download-event {\r
+ description "Notification event structure for download completion";\r
+ uses download-notification;\r
+\r
+ }\r
+\r
+ notification install-event {\r
+ description "Notification event structure for installation completion";\r
+ uses install-notification;\r
+ }\r
+\r
+ notification activation-event {\r
+ description "Notification event structure for activation completion";\r
+ uses activation-notification;\r
+ }\r
+}\r