1 module o-ran-software-management {
3 namespace "urn:o-ran:software-management:1.0";
6 import ietf-inet-types {
8 revision-date 2013-07-15;
11 import ietf-hardware {
15 import o-ran-hardware {
19 import o-ran-file-management {
20 prefix "o-ran-file-mgmt";
23 import o-ran-wg4-features {
27 organization "O-RAN Alliance";
33 "This module defines operations and configuration for the management of software packages.
34 This module is derived out of opencpe-firmware-mgmt@2014-02-06.yang
36 Copyright 2021 the O-RAN Alliance.
38 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
39 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
40 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
41 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
42 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
43 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
44 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
45 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
46 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
47 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
48 POSSIBILITY OF SUCH DAMAGE.
50 Redistribution and use in source and binary forms, with or without
51 modification, are permitted provided that the following conditions are met:
53 * Redistributions of source code must retain the above copyright notice,
54 this list of conditions and the above disclaimer.
55 * Redistributions in binary form must reproduce the above copyright notice,
56 this list of conditions and the above disclaimer in the documentation
57 and/or other materials provided with the distribution.
58 * Neither the Members of the O-RAN Alliance nor the names of its
59 contributors may be used to endorse or promote products derived from
60 this software without specific prior written permission.";
62 revision "2022-12-05" {
67 2) check integrity directly after download";
69 reference "ORAN-WG4.M.0-v11.00";
72 revision "2022-08-15" {
76 1) clarified description statements
77 2) style guide corrections
78 3) changed import prefix for o-ran-file-management";
80 reference "ORAN-WG4.M.0-v09.00";
83 revision "2022-04-18" {
87 1) aded new parameter build-content-download";
89 reference "ORAN-WG4.M.0-v09.00";
92 revision "2021-12-01" {
96 1) typographical corrections in descriptions
97 2) new option to use IANA private enterprise number as vendor-code";
99 reference "ORAN-WG4.M.0-v08.00";
101 revision "2021-07-26" {
105 1) added FTPES support";
107 reference "ORAN-WG4.M.0-v07.00";
110 revision "2021-03-22" {
114 1) typographical corrections in descriptions.";
116 reference "ORAN-WG4.M.0-v01.00";
119 revision "2019-07-03" {
123 1) backward compatible changes to correct sFTP Server Authentication .
124 2) simplifying file management and authentication to reuse from o-ran-file-management module
125 3) minor fixes according to lack of descriptions
126 4) removal of not used grouping
127 5) backward compatible changes to introduce groupings.";
129 reference "ORAN-WG4.M.0-v01.00";
132 revision "2019-02-04" {
136 1) imported model from xRAN
137 2) changed namespace and reference from xran to o-ran";
139 reference "ORAN-WG4.M.0-v01.00";
146 grouping slot-group {
148 "Contains information about each software slot and its content.";
154 "Information about available software-slots, their status, state and content.";
160 "Name of the software slot. This shall be unique to identify the software-slot.";
167 "Slot contains software considered as proven valid";
171 "Software in the slot is considered by O-RU as invalid (e.g. wrong CRC).
172 O-RU prohibits activation of slot with such status.";
176 "Slot does not contain software package. O-RU prohibits activation of slot
183 description "Indicates the status of the software slot";
188 must "../status = 'VALID'";
191 "informs if software stored in particular slot is activated at the moment";
196 must "../status = 'VALID'";
199 "Informs if software stored in particular slot is used at the moment";
206 "slot intended only for factory software,
207 activation of such software slot means getting back to factory defaults";
211 "slot used for updating software";
218 "Indicates the writeability of the slot.
219 A Read-Only software slot is one which has a factory installed software-slot";
224 path "/hw:hardware/hw:component/o-ran-hw:product-code";
228 description "product code provided by the vendor, specific to the product. This is derived from manifest file.";
234 pattern '(.{1,2})|(\d{1,5})';
239 "Unique code of the vendor. This is derived from manifest file.
241 This may be a 1 or two upper case characters or a 1-5 digit IANA Private Enterprise Number.";
249 "Identity associated with the software. This is derived from manifest file.";
257 "Name of the build. This is derived from manifest file.";
262 description "The vendor-specific version string of the software build.";
269 description "List of all the files present in the software slot.";
275 "Name of the file installed in the slot.";
282 "Version of the file installed in the slot";
289 "Complete path of the file stored locally";
295 description "OK - indicates that file integrity is correct";
298 description "NOK - indicates corrupted file";
304 "Result of the file integrity check (checksum calculation) during installation.";
310 grouping download-input {
312 "Grouping for SW download RPC input";
313 leaf remote-file-path {
317 "URI of the software image including username.
318 The following format is possible:
319 When file download is via sftp, the format shall be of the form
320 sftp://<username>@<host>[:<port>]/path
321 When file transfer is via FTPES, the format shall be of the form
322 ftpes://<username>@<host>[:port]/path
324 Note, ftpes is not an IANA registered URI scheme, but used here to signal
325 that a file transfer should be performed over FTPES.";
329 uses o-ran-file-mgmt:credential-information;
332 grouping download-output {
334 "Grouping for SW download RPC output";
339 "Operation has been started without error.";
343 "Operation cannot be started because of error, more detailed information can be found in error-message.";
349 "Status of the software file download";
352 when "../status = 'FAILED'";
356 "Detailed error Message when the status is FAILED.";
359 leaf notification-timeout {
360 type int32 {range "1..max";}
365 "Notification timeout is the time NETCONF client shall
366 wait for a 'download-event' notification from O-RU. If there is no
367 'download-event' notification received within notification-timeout,
368 NETCONF client shall assume the download timeout/failure, and follow necessary steps.";
372 grouping install-input {
374 "Grouping for SW installation RPC input";
377 path "/software-inventory/software-slot/name";
379 must "/software-inventory/software-slot[name = current()][active = 'false' and running = 'false']" {
380 error-message "software-install may be requested only against active::false and running::false slot!";
385 "Software slot to which the software shall be installed.";
388 leaf-list file-names {
392 "Names of the files within software package to be installed";
396 grouping install-output {
398 "Grouping for SW installation RPC output";
403 "Operation has been started without error.";
407 "Operation cannot be started because of error, more detailed information can be found in error-message.";
413 "Status of the software package installation to software slot.";
416 when "../status = 'FAILED'";
420 "Detailed error Message when the status is FAILED.";
423 leaf sw-install-timeout {
424 type int32 {range "1..max";}
428 "Optional timeout indicated by O-RU after which time
429 an 'install-event' notification will be sent indicating
430 the installation procedure has timed out.";
434 grouping activate-input {
436 "Grouping for SW activation RPC input";
439 path "/software-inventory/software-slot/name";
441 must "/software-inventory/software-slot[name = current()][status = 'VALID']" {
442 error-message "software activation may be requested only on VALID slot!";
447 "Slot name on which software has to be activated.";
451 grouping activate-output {
453 "Grouping for SW activation RPC output";
458 "Operation has been started without error.";
462 "Operation cannot be started because of error, more detailed information can be found in error-message.";
468 "Status of the software files activation";
471 when "../status = 'FAILED'";
475 "Detailed error Message when the status is FAILED.";
478 leaf notification-timeout {
479 type int32 {range "1..max";}
484 "Timeout on client waiting for the activate event";
488 grouping download-notification {
490 "Grouping for notification event structure for download completion";
496 "File name of transferred software file.";
503 "Operation completed successfully";
505 enum AUTHENTICATION_ERROR {
506 description "Source available, wrong credentials";
508 enum PROTOCOL_ERROR {
509 description "SFTP or FTPES errors";
511 enum FILE_NOT_FOUND {
512 description "Source not available.";
514 enum APPLICATION_ERROR {
515 description "Application related errors";
518 description "Timeout waiting for download";
520 enum INTEGRITY_ERROR {
521 description "File is corrupted";
526 "Status of finished operation execution";
529 when "../status != 'COMPLETED'";
533 "Detailed description of faulty situation";
537 grouping install-notification {
539 "Grouping for notification event structure for installation completion";
542 path "/software-inventory/software-slot/name";
546 "Name of the slot to which software was installed.";
552 "Operation completed successfully";
555 description "Operation on the file resulted in in error, disk failure, not enough disk space,
556 incompatible file format";
558 enum INTEGRITY_ERROR {
559 description "File is corrupted";
561 enum APPLICATION_ERROR {
562 description "Operation failed due to internal reason";
565 description "Install operation timed out";
570 "Status of finished operation execution";
573 when "../status != 'COMPLETED'";
577 "Detailed description of faulty situation";
581 grouping activation-notification {
583 "Grouping for notification event structure for activation completion";
586 path "/software-inventory/software-slot/name";
590 "Name of the slot which was activated";
597 "Operation completed successfully";
599 enum APPLICATION_ERROR {
601 "Operation finished with error, more details can by found in error-message";
606 "Status of finished operation execution";
612 "Status code return when the software is tried to activate";
615 when "../status != 'COMPLETED'";
619 "Detailed description of faulty situation";
623 // top-level container
625 container software-inventory {
628 "Contains information about each software slot and its content as well as information related to
629 software processing.";
633 leaf build-content-download {
636 "An optional leaf used to indicate that the O-RU requires separate download procedures to be
637 re-used for downloading individual files in a software build, instead of a single archived package.";
640 leaf integrity-check-at-download-enabled {
641 if-feature or-feat:INTEGRITY-CHECK-AT-SW-DOWNLOAD;
643 description "Presence of this node enables O-RU to perform integrity check at file download.";
649 rpc software-download {
651 "RPC needed to perform software download operation.";
657 uses download-output;
661 rpc software-install {
663 "Install a previously downloaded software.";
673 rpc software-activate {
675 "Activate a previously installed software.";
680 uses activate-output;
684 // notification definitions
685 notification download-event {
686 description "Notification event structure for download completion";
687 uses download-notification;
691 notification install-event {
692 description "Notification event structure for installation completion";
693 uses install-notification;
696 notification activation-event {
697 description "Notification event structure for activation completion";
698 uses activation-notification;