Refactor E2SM-KPM: pass the "Measurement Label" for calculating the measurement values
At this stage, all supported measurements do not take the label into account (noLabel = true), but will be of value for distribution measurements.
This commit is contained in:
@@ -65,19 +65,25 @@ static meas_data_lst_t fill_kpm_meas_data_item(const meas_info_format_1_lst_t* m
|
||||
meas_data_lst_t data_item = {0};
|
||||
|
||||
// Measurement Record
|
||||
data_item.meas_record_len = len; // record data list length corresponds to info list length from action definition
|
||||
|
||||
data_item.meas_record_lst = calloc(len, sizeof(meas_record_lst_t));
|
||||
assert(data_item.meas_record_lst != NULL && "Memory exhausted");
|
||||
|
||||
size_t num_records = 0;
|
||||
for (size_t i = 0; i < len; i++) {
|
||||
// Measurement Type as requested in Action Definition
|
||||
assert(meas_info_lst[i].meas_type.type == NAME_MEAS_TYPE && "Only NAME supported");
|
||||
|
||||
num_records += meas_info_lst[i].label_info_lst_len;
|
||||
}
|
||||
|
||||
data_item.meas_record_len = num_records;
|
||||
data_item.meas_record_lst = calloc(num_records, sizeof(*data_item.meas_record_lst));
|
||||
assert(data_item.meas_record_lst != NULL && "Memory exhausted");
|
||||
|
||||
num_records = 0;
|
||||
for (size_t i = 0; i < len; i++) {
|
||||
char* meas_info_name_str = cp_ba_to_str(meas_info_lst[i].meas_type.name);
|
||||
|
||||
data_item.meas_record_lst[i] = get_kpm_meas_value(meas_info_name_str, gran_period_ms, ue_info, ue_idx, node_stats);
|
||||
|
||||
for (size_t j = 0; j < meas_info_lst[i].label_info_lst_len; j++) {
|
||||
data_item.meas_record_lst[num_records++] = get_kpm_meas_value(meas_info_name_str, meas_info_lst[i].label_info_lst[j], gran_period_ms, ue_info, ue_idx, node_stats);
|
||||
}
|
||||
free(meas_info_name_str);
|
||||
}
|
||||
|
||||
|
||||
@@ -58,7 +58,11 @@ static nr_pdcp_statistics_t get_pdcp_stats_per_drb(const uint32_t rrc_ue_id, con
|
||||
|
||||
/* 3GPP TS 28.522 - section 5.1.2.1.1.1
|
||||
note: this measurement is calculated as per spec */
|
||||
static meas_record_lst_t fill_DRB_PdcpSduVolumeDL(__attribute__((unused))uint32_t gran_period_ms, cudu_ue_info_pair_t ue_info, const size_t ue_idx, __attribute__((unused))e2_node_level_stats_t* node_stats)
|
||||
static meas_record_lst_t fill_DRB_PdcpSduVolumeDL(__attribute__((unused)) const label_info_lst_t label,
|
||||
__attribute__((unused)) uint32_t gran_period_ms,
|
||||
cudu_ue_info_pair_t ue_info,
|
||||
const size_t ue_idx,
|
||||
__attribute__((unused))e2_node_level_stats_t* node_stats)
|
||||
{
|
||||
meas_record_lst_t meas_record = {0};
|
||||
|
||||
@@ -77,7 +81,11 @@ static meas_record_lst_t fill_DRB_PdcpSduVolumeDL(__attribute__((unused))uint32_
|
||||
|
||||
/* 3GPP TS 28.522 - section 5.1.2.1.2.1
|
||||
note: this measurement is calculated as per spec */
|
||||
static meas_record_lst_t fill_DRB_PdcpSduVolumeUL(__attribute__((unused))uint32_t gran_period_ms, cudu_ue_info_pair_t ue_info, const size_t ue_idx, __attribute__((unused))e2_node_level_stats_t* node_stats)
|
||||
static meas_record_lst_t fill_DRB_PdcpSduVolumeUL(__attribute__((unused)) const label_info_lst_t label,
|
||||
__attribute__((unused)) uint32_t gran_period_ms,
|
||||
cudu_ue_info_pair_t ue_info,
|
||||
const size_t ue_idx,
|
||||
__attribute__((unused))e2_node_level_stats_t* node_stats)
|
||||
{
|
||||
meas_record_lst_t meas_record = {0};
|
||||
|
||||
@@ -115,7 +123,11 @@ static nr_rlc_statistics_t get_rlc_stats_per_drb(const rnti_t rnti, const int rb
|
||||
|
||||
/* 3GPP TS 28.522 - section 5.1.3.3.3
|
||||
note: by default this measurement is calculated for previous 100ms (openair2/LAYER2/nr_rlc/nr_rlc_entity.c:118, 173, 213); please, update according to your needs */
|
||||
static meas_record_lst_t fill_DRB_RlcSduDelayDl(__attribute__((unused))uint32_t gran_period_ms, cudu_ue_info_pair_t ue_info, __attribute__((unused))const size_t ue_idx, __attribute__((unused))e2_node_level_stats_t* node_stats)
|
||||
static meas_record_lst_t fill_DRB_RlcSduDelayDl(__attribute__((unused)) const label_info_lst_t label,
|
||||
__attribute__((unused)) uint32_t gran_period_ms,
|
||||
cudu_ue_info_pair_t ue_info,
|
||||
__attribute__((unused))const size_t ue_idx,
|
||||
__attribute__((unused))e2_node_level_stats_t* node_stats)
|
||||
{
|
||||
meas_record_lst_t meas_record = {0};
|
||||
|
||||
@@ -134,11 +146,14 @@ static meas_record_lst_t fill_DRB_RlcSduDelayDl(__attribute__((unused))uint32_t
|
||||
/* 3GPP TS 28.522 - section 5.1.1.3.1
|
||||
note: per spec, average UE throughput in DL (taken into consideration values from all UEs, and averaged)
|
||||
here calculated as: UE specific throughput in DL */
|
||||
static meas_record_lst_t fill_DRB_UEThpDl(uint32_t gran_period_ms, cudu_ue_info_pair_t ue_info, const size_t ue_idx, __attribute__((unused))e2_node_level_stats_t* node_stats)
|
||||
static meas_record_lst_t fill_DRB_UEThpDl(__attribute__((unused)) const label_info_lst_t label,
|
||||
uint32_t gran_period_ms,
|
||||
cudu_ue_info_pair_t ue_info,
|
||||
const size_t ue_idx,
|
||||
__attribute__((unused))e2_node_level_stats_t* node_stats)
|
||||
{
|
||||
meas_record_lst_t meas_record = {0};
|
||||
|
||||
// Get RLC stats per DRB
|
||||
const int rb_id = 1; // at the moment, only 1 DRB is supported
|
||||
nr_rlc_statistics_t rlc = get_rlc_stats_per_drb(ue_info.ue->rnti, rb_id);
|
||||
meas_record.value = REAL_MEAS_VALUE;
|
||||
@@ -153,7 +168,11 @@ static meas_record_lst_t fill_DRB_UEThpDl(uint32_t gran_period_ms, cudu_ue_info_
|
||||
/* 3GPP TS 28.522 - section 5.1.1.3.3
|
||||
note: per spec, average UE throughput in UL (taken into consideration values from all UEs, and averaged)
|
||||
here calculated as: UE specific throughput in UL */
|
||||
static meas_record_lst_t fill_DRB_UEThpUl(uint32_t gran_period_ms, cudu_ue_info_pair_t ue_info, const size_t ue_idx, __attribute__((unused))e2_node_level_stats_t* node_stats)
|
||||
static meas_record_lst_t fill_DRB_UEThpUl(__attribute__((unused)) const label_info_lst_t label,
|
||||
uint32_t gran_period_ms,
|
||||
cudu_ue_info_pair_t ue_info,
|
||||
const size_t ue_idx,
|
||||
__attribute__((unused))e2_node_level_stats_t* node_stats)
|
||||
{
|
||||
meas_record_lst_t meas_record = {0};
|
||||
|
||||
@@ -172,7 +191,11 @@ static meas_record_lst_t fill_DRB_UEThpUl(uint32_t gran_period_ms, cudu_ue_info_
|
||||
|
||||
/* 3GPP TS 28.522 - section 5.1.1.2.1
|
||||
note: this measurement is calculated as per spec */
|
||||
static meas_record_lst_t fill_RRU_PrbTotDl(__attribute__((unused))uint32_t gran_period_ms, cudu_ue_info_pair_t ue_info, const size_t ue_idx, e2_node_level_stats_t* node_stats)
|
||||
static meas_record_lst_t fill_RRU_PrbTotDl(__attribute__((unused)) const label_info_lst_t label,
|
||||
__attribute__((unused)) uint32_t gran_period_ms,
|
||||
cudu_ue_info_pair_t ue_info,
|
||||
const size_t ue_idx,
|
||||
e2_node_level_stats_t* node_stats)
|
||||
{
|
||||
meas_record_lst_t meas_record = {0};
|
||||
|
||||
@@ -187,7 +210,11 @@ static meas_record_lst_t fill_RRU_PrbTotDl(__attribute__((unused))uint32_t gran_
|
||||
|
||||
/* 3GPP TS 28.522 - section 5.1.1.2.2
|
||||
note: this measurement is calculated as per spec */
|
||||
static meas_record_lst_t fill_RRU_PrbTotUl(__attribute__((unused))uint32_t gran_period_ms, cudu_ue_info_pair_t ue_info, const size_t ue_idx, e2_node_level_stats_t* node_stats)
|
||||
static meas_record_lst_t fill_RRU_PrbTotUl(__attribute__((unused)) const label_info_lst_t label,
|
||||
__attribute__((unused)) uint32_t gran_period_ms,
|
||||
cudu_ue_info_pair_t ue_info,
|
||||
const size_t ue_idx,
|
||||
e2_node_level_stats_t* node_stats)
|
||||
{
|
||||
meas_record_lst_t meas_record = {0};
|
||||
|
||||
@@ -227,7 +254,7 @@ void init_kpm_subs_data(void)
|
||||
}
|
||||
}
|
||||
|
||||
meas_record_lst_t get_kpm_meas_value(char* kpm_meas_name, uint32_t gran_period_ms, cudu_ue_info_pair_t ue_info, const size_t ue_idx, e2_node_level_stats_t* node_stats)
|
||||
meas_record_lst_t get_kpm_meas_value(char* kpm_meas_name, const label_info_lst_t label, uint32_t gran_period_ms, cudu_ue_info_pair_t ue_info, const size_t ue_idx, e2_node_level_stats_t* node_stats)
|
||||
{
|
||||
assert(kpm_meas_name != NULL);
|
||||
|
||||
@@ -236,7 +263,7 @@ meas_record_lst_t get_kpm_meas_value(char* kpm_meas_name, uint32_t gran_period_m
|
||||
assert(found_entry != NULL && "Unsupported KPM measurement name");
|
||||
|
||||
kv_measure_t *kv_found = (kv_measure_t *)found_entry->data;
|
||||
meas_record_lst_t meas_record = kv_found->value(gran_period_ms, ue_info, ue_idx, node_stats);
|
||||
meas_record_lst_t meas_record = kv_found->value(label, gran_period_ms, ue_info, ue_idx, node_stats);
|
||||
|
||||
return meas_record;
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@ typedef struct {
|
||||
|
||||
e2_node_level_stats_t cp_node_level_stats(const e2_node_level_stats_t *src);
|
||||
|
||||
typedef meas_record_lst_t (*kpm_meas_fp)(uint32_t gran_period_ms, cudu_ue_info_pair_t ue_info, const size_t ue_idx, e2_node_level_stats_t* node_stats);
|
||||
typedef meas_record_lst_t (*kpm_meas_fp)(const label_info_lst_t label, uint32_t gran_period_ms, cudu_ue_info_pair_t ue_info, const size_t ue_idx, e2_node_level_stats_t* node_stats);
|
||||
|
||||
typedef struct{
|
||||
char* key;
|
||||
@@ -50,6 +50,6 @@ typedef struct{
|
||||
|
||||
void init_kpm_subs_data(void);
|
||||
|
||||
meas_record_lst_t get_kpm_meas_value(char* kpm_meas_name, uint32_t gran_period_ms, cudu_ue_info_pair_t ue_info, const size_t ue_idx, e2_node_level_stats_t* node_stats);
|
||||
meas_record_lst_t get_kpm_meas_value(char* kpm_meas_name, const label_info_lst_t label, uint32_t gran_period_ms, cudu_ue_info_pair_t ue_info, const size_t ue_idx, e2_node_level_stats_t* node_stats);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user