Skip to content

Commit 9c429f2

Browse files
committed
e2sm_kpm: adding support for metric DRB.RlcDelayUl to e2sm
1 parent 93c7c9c commit 9c429f2

File tree

2 files changed

+60
-0
lines changed

2 files changed

+60
-0
lines changed

lib/e2/e2sm/e2sm_kpm/e2sm_kpm_du_meas_provider_impl.cpp

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,11 @@ e2sm_kpm_du_meas_provider_impl::e2sm_kpm_du_meas_provider_impl(srs_du::f1ap_ue_i
7979
"DRB.AirIfDelayUl",
8080
e2sm_kpm_supported_metric_t{NO_LABEL, ALL_LEVELS, true, &e2sm_kpm_du_meas_provider_impl::get_delay_ul});
8181

82+
supported_metrics.emplace(
83+
"DRB.RlcDelayUl",
84+
e2sm_kpm_supported_metric_t{
85+
NO_LABEL, ALL_LEVELS, true, &e2sm_kpm_du_meas_provider_impl::get_drb_ul_rlc_sdu_latency});
86+
8287
// Check if the supported metrics are matching e2sm_kpm metrics definitions.
8388
check_e2sm_kpm_metrics_definitions(get_e2sm_kpm_28_552_metrics());
8489
check_e2sm_kpm_metrics_definitions(get_e2sm_kpm_oran_metrics());
@@ -139,6 +144,7 @@ void e2sm_kpm_du_meas_provider_impl::report_metrics(const rlc_metrics& metrics)
139144
ue_aggr_rlc_metrics[metrics.ue_index].rx.num_sdu_bytes += metrics.rx.num_sdu_bytes;
140145
ue_aggr_rlc_metrics[metrics.ue_index].rx.num_pdus += metrics.rx.num_pdus;
141146
ue_aggr_rlc_metrics[metrics.ue_index].rx.num_pdu_bytes += metrics.rx.num_pdu_bytes;
147+
ue_aggr_rlc_metrics[metrics.ue_index].rx.sdu_latency_us += metrics.rx.sdu_latency_us;
142148
ue_aggr_rlc_metrics[metrics.ue_index].tx.num_sdus += metrics.tx.num_sdus;
143149
ue_aggr_rlc_metrics[metrics.ue_index].tx.num_of_pulled_sdus += metrics.tx.num_of_pulled_sdus;
144150
ue_aggr_rlc_metrics[metrics.ue_index].tx.num_sdu_bytes += metrics.tx.num_sdu_bytes;
@@ -837,3 +843,56 @@ bool e2sm_kpm_du_meas_provider_impl::get_drb_dl_rlc_sdu_latency(const asn1::e2sm
837843
}
838844
return meas_collected;
839845
}
846+
847+
bool e2sm_kpm_du_meas_provider_impl::get_drb_ul_rlc_sdu_latency(const asn1::e2sm::label_info_list_l label_info_list,
848+
const std::vector<asn1::e2sm::ue_id_c>& ues,
849+
const std::optional<asn1::e2sm::cgi_c> cell_global_id,
850+
std::vector<asn1::e2sm::meas_record_item_c>& items)
851+
{
852+
bool meas_collected = false;
853+
if ((label_info_list.size() > 1 or
854+
(label_info_list.size() == 1 and not label_info_list[0].meas_label.no_label_present))) {
855+
logger.debug("Metric: DRB.RlcDelayUl supports only NO_LABEL label.");
856+
return meas_collected;
857+
}
858+
if (ues.size() == 0) {
859+
meas_record_item_c meas_record_item;
860+
float av_ue_sdu_latency_us = 0;
861+
for (auto& rlc_metric : ue_aggr_rlc_metrics) {
862+
if (rlc_metric.second.rx.num_sdus && rlc_metric.second.rx.sdu_latency_us) {
863+
av_ue_sdu_latency_us += (float)rlc_metric.second.rx.sdu_latency_us / (float)rlc_metric.second.rx.sdu_latency_us;
864+
}
865+
}
866+
if (av_ue_sdu_latency_us) {
867+
meas_record_item.set_real();
868+
meas_record_item.real().value = av_ue_sdu_latency_us / ue_aggr_rlc_metrics.size();
869+
items.push_back(meas_record_item);
870+
meas_collected = true;
871+
} else {
872+
logger.warning("Invalid RLC SDU latency value.");
873+
return meas_collected;
874+
}
875+
} else {
876+
for (auto& ue : ues) {
877+
meas_record_item_c meas_record_item;
878+
gnb_cu_ue_f1ap_id_t gnb_cu_ue_f1ap_id = int_to_gnb_cu_ue_f1ap_id(ue.gnb_du_ue_id().gnb_cu_ue_f1ap_id);
879+
uint32_t ue_idx = f1ap_ue_id_provider.get_ue_index(gnb_cu_ue_f1ap_id);
880+
if (ue_aggr_rlc_metrics.count(ue_idx) == 0) {
881+
meas_record_item.set_no_value();
882+
items.push_back(meas_record_item);
883+
meas_collected = true;
884+
continue;
885+
}
886+
if (ue_aggr_rlc_metrics[ue_idx].rx.sdu_latency_us) {
887+
meas_record_item.set_real();
888+
meas_record_item.real().value =
889+
ue_aggr_rlc_metrics[ue_idx].rx.sdu_latency_us / ue_aggr_rlc_metrics[ue_idx].rx.num_sdus;
890+
items.push_back(meas_record_item);
891+
meas_collected = true;
892+
} else {
893+
logger.warning("Invalid RLC SDU latency value.");
894+
}
895+
}
896+
}
897+
return meas_collected;
898+
}

lib/e2/e2sm/e2sm_kpm/e2sm_kpm_du_meas_provider_impl.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ class e2sm_kpm_du_meas_provider_impl : public e2sm_kpm_meas_provider, public e2_
9898
metric_meas_getter_func_t get_drb_dl_mean_throughput;
9999
metric_meas_getter_func_t get_drb_ul_mean_throughput;
100100
metric_meas_getter_func_t get_drb_dl_rlc_sdu_latency;
101+
metric_meas_getter_func_t get_drb_ul_rlc_sdu_latency;
101102

102103
srslog::basic_logger& logger;
103104
srs_du::f1ap_ue_id_translator& f1ap_ue_id_provider;

0 commit comments

Comments
 (0)