--- /dev/null
+module xran-performance-management {
+ yang-version 1.1;
+ namespace "urn:xran:performance-management:1.0";
+ prefix "xran-pm";
+
+ import ietf-yang-types {
+ prefix "yang-types";
+ revision-date 2013-07-15;
+ }
+
+ // import idetifier for RU
+ import ietf-hardware {
+ prefix "hw";
+ }
+
+ // import ietf-interface
+ import ietf-interfaces {
+ prefix "if";
+ }
+
+ // import ietf-inet-type
+ import ietf-inet-types {
+ prefix "inet";
+ }
+
+ // import xran-port-number
+ import xran-interfaces {
+ prefix "xran-int";
+ }
+
+ // import ru-mac-address, lls-cu-mac-address and vlan-id
+ import xran-processing-element {
+ prefix "xran-elements";
+ }
+
+ organization "xRAN Forum";
+
+ contact
+ "www.xran.org";
+
+ description
+ "This module defines the configuration for performance measurement for
+ transceiver and rx-window measurement objects.
+
+ Copyright 2018 the xRAN Forum.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS '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 SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
+
+ 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 above disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the above disclaimer in the documentation
+ and/or other materials provided with the distribution.
+ * Neither the Members of the xRAN Forum nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2018-07-20" {
+ description
+ "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+ This version of the model supports v01.00 of the corrsponding xRAN
+ M-Plane Specification.";
+ reference "XRAN-FH.MP.0-v01.00";
+ }
+
+
+ feature GRANULARITY-TRANSPORT-MEASUREMENT {
+ description
+ "This feature indicates that the RU supports an optional object-unit TRANSPORT in rx-window-measurement.";
+ }
+ feature GRANULARITY-EAXC-ID-MEASUREMENT {
+ description
+ "This feature indicates that the RU supports an optional object-unit EAXC_ID in rx-window-measurement.";
+ }
+
+ grouping start-and-end-time {
+ description
+ "Definition for start and end time for an event";
+
+ leaf start-time {
+ type yang-types:date-and-time;
+ description
+ "Start time for measurement of object stats";
+ }
+ leaf end-time {
+ type yang-types:date-and-time;
+ description
+ "End time for measurement of object stats";
+ }
+ }
+
+ grouping transceiver-measurement-result-grouping {
+ description
+ "transceiver-measurement-result are listed per port-number";
+
+ list transceiver-measurement-result {
+ key "object-unit-id";
+ config false;
+ leaf object-unit-id {
+ type leafref {
+ path "/if:interfaces/if:interface/xran-int:port-reference/xran-int:xran-port-number";
+ }
+
+ description
+ "port-number is used for the object-unit-id for the
+ transceiver-measurement-result, for which object-unit is
+ PORT_NUMBER only";
+ }
+ container min {
+ description
+ "minimum value with recorded time are included for the
+ measurement-object";
+
+ leaf value {
+ type decimal64 {
+ fraction-digits 4;
+ }
+
+ description
+ "minimum value for the measurment-object";
+ }
+ leaf time {
+ type yang-types:date-and-time;
+
+ description
+ "recorded time for the minimum value";
+ }
+ }
+ container max {
+ description
+ "maximum value with recorded time are included for the
+ measurement-object";
+
+ leaf value {
+ type decimal64 {
+ fraction-digits 4;
+ }
+
+ description
+ "maximum value for the measurment-object";
+ }
+ leaf time {
+ type yang-types:date-and-time;
+
+ description
+ "recorded time for the maximum value";
+ }
+ }
+ container first {
+ description
+ "first value with the recorded time are included for the
+ measurement-object";
+
+ leaf value {
+ type decimal64 {
+ fraction-digits 4;
+ }
+
+ description
+ "first value of the measurement-object";
+ }
+ leaf time {
+ type yang-types:date-and-time;
+
+ description
+ "recorded time for the first value";
+ }
+ }
+ container latest {
+ description
+ "latest value with the recorded time are included for the
+ measurement-object";
+
+ leaf value {
+ type decimal64 {
+ fraction-digits 4;
+ }
+
+ description
+ "latest value of the measurement-object";
+ }
+ leaf time {
+ type yang-types:date-and-time;
+
+ description
+ "recorded time for the latest value";
+ }
+ }
+ leaf-list frequeny-table {
+ type uint32;
+
+ description
+ "frequency-table for the measurment-object are included per bin.
+ The configuration parameters for this frequency-table are defined
+ by bin-count, lower-bound and upper-bound";
+ }
+
+ description
+ "List of transceiver measurement results";
+ }
+ }
+
+ grouping rx-window-measurement-result-grouping{
+ description
+ "Group of measurement reasults for rx window measurements";
+
+ choice object-unit-id {
+ config false;
+ case RU {
+ leaf name{
+ type leafref {
+ path "/hw:hardware/hw:component/hw:name";
+ }
+
+ description
+ "the name of RU in ietf-hardware/component is used
+ when RU is selected as object-unit for the reception window
+ stats.";
+ }
+ leaf count {
+ type uint64;
+ mandatory true;
+
+ description
+ "the number of data packet are counted for the reception
+ window stats per RU.";
+ }
+ }
+
+ case TRANSPORT {
+ list tr-measured-result{
+ key "name";
+ leaf name{
+ type leafref{
+ path "/xran-elements:processing-elements/xran-elements:ru-elements/xran-elements:name";
+ }
+
+ description
+ "the name of ru-elements in xran-processing-elements
+ when TRANSPORT is selected as object-unit for the reception
+ window stats.";
+ }
+ leaf count {
+ type uint64;
+ mandatory true;
+
+ description
+ "the number of data packet are counted for the reception
+ window stats.";
+ }
+
+ description
+ "the number of data packet are counted for the reception
+ window stats per TRANSPORT.";
+ }
+ }
+
+ case EAXC_ID {
+ list eaxc-measured-result {
+ key "eaxc-id";
+ leaf eaxc-id{
+ type uint16;
+
+ description
+ "eaxc-id is used
+ when EAXC_ID is selected as object-unit for the reception
+ window stats.
+ EAXC_ID consists of CU-Port-Id, Band-Selector, CC-id and
+ RU-Port-Id to be used in header of C/U-plane data packet.";
+ }
+ leaf count {
+ type uint64;
+ mandatory true;
+
+ description
+ "the number of data packet are counted for the reception
+ window stats.";
+ }
+ leaf transport-name {
+ type leafref{
+ path "/xran-elements:processing-elements/xran-elements:ru-elements/xran-elements:name";
+ }
+
+ description
+ "the name of ru-elements in xran-processing-elements for the
+ transport information corresponding to this eaxc-id";
+ }
+
+ description
+ "the number of data packet are counted for the reception
+ window stats per EAXC-ID.";
+ }
+ }
+
+ description
+ "measurement-result for the reception window stats depends on the
+ configured object-unit, RU, TRANSPORT or EAXC_ID";
+ }
+ }
+
+ container performance-measurement-objects {
+ description
+ "configuration for performance management and measurement-result are
+ included";
+
+ leaf enable-SFTP-upload {
+ type boolean;
+ default false;
+ description
+ "Flag to enable upload of performance measurement result files.";
+ }
+
+ leaf enable-random-file-upload {
+ type boolean;
+ default false;
+ description
+ "Flag to enable upload of performance measurement result files at
+ random within file-upload-interval.";
+ }
+
+ list remote-SFTP-uploads {
+ key remote-SFTP-upload-path;
+ description
+ "SFTP upload can be done to one or more than one SFTP servers";
+
+ leaf remote-SFTP-upload-path {
+ type inet:uri;
+ description
+ "URI specifying the remote location where the files are to uploaded.
+ The following format is possible:
+ sftp://<username>@<host>[:<port>]";
+ }
+
+ choice credentials {
+ description
+ "Type of authentication to use for SFTP upload.";
+
+ case password {
+ container password {
+ presence true;
+ leaf password {
+ type string;
+ mandatory true;
+
+ description
+ "password needed for authentication.";
+ }
+ description
+ "password authentication method in use";
+ }
+ }
+ case certificate {
+ container certificate {
+ presence true;
+ description
+ "certificate authentication method in use";
+ }
+ }
+ }
+ }
+
+ leaf transceiver-measurement-interval {
+ type uint16;
+ description
+ "measurement interval to measure the performance of transceiver
+ measurement objects periodically.";
+ }
+
+ leaf rx-window-measurement-interval {
+ type uint16;
+ description
+ "measurement interval to measure the performance of reception
+ window measurement objects periodically.";
+ }
+
+ leaf notification-interval {
+ type uint16;
+ description
+ "notification interval for the measurement result to be notified
+ periodically.";
+ }
+
+ leaf file-upload-interval {
+ type uint16;
+ description
+ "file upload interval for the measurement result file to be
+ uploaded periodically.";
+ }
+
+ list transceiver-measurement-objects {
+ key "measurement-object";
+ leaf measurement-object {
+ type enumeration {
+ enum RX_POWER {
+ description
+ "Measured Rx input power in mW";
+ }
+ enum TX_POPWER {
+ description
+ "Measured Tx input power in mW.";
+ }
+ enum TX_BIAS_COUNT {
+ description
+ "Internally measured Tx Bias Current in mA";
+ }
+ enum VOLTAGE {
+ description
+ "Internally measured transceiver supply voltage in mV";
+ }
+ enum TEMPERATURE {
+ description
+ "Internally measured optional laser temperature in degrees Celsius.";
+ }
+ }
+ description "Target metric to measure the performance";
+ }
+
+ leaf active {
+ type boolean;
+ default false;
+ description
+ "Enable/disable the performance measurement per Object";
+ }
+
+ leaf-list report-info {
+ type enumeration {
+ enum MAXIMUM {
+ description
+ "to report maximum value and its recorded time within the
+ measurement-interval for the measurement-object.";
+ }
+ enum MINIMUM {
+ description
+ "to report minimum value and its recorded time within the
+ measurement-interval for the measurement-object.";
+ }
+ enum FIRST {
+ description
+ "to report first value and its recorded time within the
+ measurement-interval for the measurement-object.";
+ }
+ enum LATEST {
+ description
+ "to report latest value and its recorded time within the
+ measurement-interval for the measurement-object.";
+ }
+ enum FREQUENCY_TABLE {
+ description
+ "to report frequency bin table within the
+ measurement-interval for the measurement-object.";
+ }
+ }
+ description "The reporting info to the measurement object.";
+ }
+
+ leaf object-unit {
+ type enumeration {
+ enum PORT_NUMBER {
+ description
+ "unit to measure the performance per object-id";
+ }
+ }
+ mandatory true;
+ description "unit to measure the performance per object-id.";
+ }
+
+ leaf function {
+ type enumeration {
+ enum RAW {
+ description
+ "the value is expressed by real value.";
+ }
+ enum LOG_10 {
+ description
+ "the value is expressed by logarithm with base 10.";
+ }
+ }
+
+ description
+ "the value to be recorded for transceiver-measurement
+ by real value or log 10.";
+ }
+
+ leaf bin-count {
+ type uint32;
+
+ description
+ "the number of bin for the frequency table.";
+ }
+
+ leaf lower-bound {
+ type decimal64 {
+ fraction-digits 4;
+ }
+
+ description
+ "the lower value of the first bin of frequency table.";
+ }
+
+ leaf upper-bound {
+ type decimal64 {
+ fraction-digits 4;
+ }
+
+ description
+ "the upper value of the last bin of frequency table.";
+ }
+ uses transceiver-measurement-result-grouping;
+
+ description
+ "configuration and measurement result for the transceiver-measurement.";
+ }
+
+ list rx-window-measurement-objects {
+ key "measurement-object";
+ leaf measurement-object {
+ type enumeration {
+ enum RX_ON_TIME {
+ description
+ "the number of data packets, received on time within
+ the reception window.";
+ }
+ enum RX_EARLY {
+ description
+ "the number of data packets, received before
+ the reception window.";
+ }
+ enum RX_LATE {
+ description
+ "the number of data packets, received after
+ the reception window.";
+ }
+ enum RX_CORRUPT {
+ description
+ "the number of data packets, which are corrupt or whose header
+ is incorrect.";
+ }
+ enum RX_DUPL {
+ description
+ "the number of data packets, which is duplicated with other packets,
+ received within the measurement period.";
+ }
+ enum RX_TOTAL {
+ description
+ "the total number of received data packets.";
+ }
+ }
+ description
+ "target reception window metric to measure the performance.";
+ }
+
+ leaf active {
+ type boolean;
+ default false;
+ description
+ "Enable/disable the performance measurement per reception window
+ measurement object.";
+ }
+
+ leaf object-unit {
+ type enumeration {
+ enum RU {
+ description
+ "the reception window stats are counted per RU.";
+ }
+ enum TRANSPORT {
+ if-feature GRANULARITY-TRANSPORT-MEASUREMENT;
+ description
+ "the reception window stats are counted per transport flow.
+ When there are multiple transport flows between lls-CU and RU,
+ e.g. multiple sets of lls-cu mac address, ru mac address and
+ vlan-id, the reception window stats per transport flow
+ are counted in this case.
+ This configuration is allowed only when RU supports
+ a feature GRANULARITY-TRANSPORT-MEASUREMENT.";
+ }
+ enum EAXC_ID {
+ if-feature GRANULARITY-EAXC-ID-MEASUREMENT;
+
+ description
+ "the reception window stats are counted per eAxC ID, which is
+ used in the header of receivd data packet.
+ This configuration is allowed only when RU supports
+ a feature GRANULARITY-EAXC-ID-MEASUREMENT.";
+ }
+ }
+ description
+ "unit to measure the performance per object-id.";
+ }
+
+ leaf report-info {
+ type enumeration {
+ enum COUNT {
+ description
+ "the number of data packet are counted for the reception
+ window stats.";
+ }
+ }
+ description
+ "The reporting info to the measurement object.";
+ }
+
+ uses rx-window-measurement-result-grouping;
+
+ description
+ "configuration and measurement result for the reception window stats";
+ }
+ }
+
+ notification measurement-result-stats {
+ list transceiver-stats {
+ key "measurement-object";
+ leaf measurement-object {
+ type leafref {
+ path "/performance-measurement-objects/transceiver-measurement-objects/measurement-object";
+ }
+
+ description
+ "measurement-object for the transceiver-measurement";
+ }
+
+ uses start-and-end-time;
+ uses transceiver-measurement-result-grouping;
+
+ description
+ "measurement result of transceiver-measurement per measurement-object";
+ }
+
+ list rx-window-stats {
+ key "measurement-object";
+ leaf measurement-object {
+ type leafref {
+ path "/performance-measurement-objects/rx-window-measurement-objects/measurement-object";
+ }
+
+ description
+ "measurement-object for the reception window measurement";
+ }
+ uses start-and-end-time;
+ uses rx-window-measurement-result-grouping;
+
+ description
+ "measurement result for the reception window measurement per
+ measurement-object";
+
+ }
+
+ description
+ "notification may contain measurement result for transceiver-stats
+ and/or rx-window-stats";
+ }
+}