Commit b3028fdd authored by fatich's avatar fatich Committed by Teodora

Implement E2SM-KPM REPORT style 1 containing "CARR.PDSCHMCSDist" measurement

Co-authored-by: default avatarTeodora Vladić <teodora.vladic@openairinterface.org>
parent 2c96fe5c
...@@ -440,6 +440,15 @@ bool read_kpm_sm(void* data) ...@@ -440,6 +440,15 @@ bool read_kpm_sm(void* data)
} }
break; break;
} }
case FORMAT_1_ACTION_DEFINITION: {
kpm->ind.hdr = kpm_ind_hdr();
kpm->ind.msg.type = FORMAT_1_INDICATION_MESSAGE;
cudu_ue_info_pair_t ue_info = {0}; // not used
const size_t ue_idx = 0; // not used
kpm->ind.msg.frm_1 = fill_kpm_ind_msg_frm_1(ue_info, ue_idx, &kpm->act_def->frm_1);
break;
}
default: { default: {
AssertFatal(false, "Action Definition Format %d not yet implemented", kpm->act_def->type); AssertFatal(false, "Action Definition Format %d not yet implemented", kpm->act_def->type);
...@@ -449,6 +458,16 @@ bool read_kpm_sm(void* data) ...@@ -449,6 +458,16 @@ bool read_kpm_sm(void* data)
return true; return true;
} }
static const char* kpm_node_meas_du[] = {
"CARR.PDSCHMCSDist",
NULL,
};
static const char* kpm_node_meas_gnb[] = {
"CARR.PDSCHMCSDist",
NULL,
};
static const char* kpm_meas_du[] = { static const char* kpm_meas_du[] = {
"DRB.RlcSduDelayDl", "DRB.RlcSduDelayDl",
"DRB.UEThpDl", "DRB.UEThpDl",
...@@ -480,12 +499,12 @@ typedef const char** meas_list; ...@@ -480,12 +499,12 @@ typedef const char** meas_list;
static const meas_list ran_def_kpm[END_NGRAN_NODE_TYPE][END_RIC_SERVICE_REPORT] = { static const meas_list ran_def_kpm[END_NGRAN_NODE_TYPE][END_RIC_SERVICE_REPORT] = {
{NULL, NULL, NULL, NULL, NULL}, {NULL, NULL, NULL, NULL, NULL},
{NULL, NULL, NULL, NULL, NULL}, {NULL, NULL, NULL, NULL, NULL},
{NULL, NULL, NULL, kpm_meas_gnb, NULL}, {kpm_node_meas_gnb, NULL, NULL, kpm_meas_gnb, NULL},
{NULL, NULL, NULL, NULL, NULL}, {NULL, NULL, NULL, NULL, NULL},
{NULL, NULL, NULL, NULL, NULL}, {NULL, NULL, NULL, NULL, NULL},
{NULL, NULL, NULL, kpm_meas_cuup, NULL}, // at the moment, for CU, we use the same function as for CU-UP {NULL, NULL, NULL, kpm_meas_cuup, NULL}, // at the moment, for CU, we use the same function as for CU-UP
{NULL, NULL, NULL, NULL, NULL}, {NULL, NULL, NULL, NULL, NULL},
{NULL, NULL, NULL, kpm_meas_du, NULL}, {kpm_node_meas_du, NULL, NULL, kpm_meas_du, NULL},
{NULL, NULL, NULL, NULL, NULL}, {NULL, NULL, NULL, NULL, NULL},
{NULL, NULL, NULL, NULL, NULL}, // at the moment, no measurement is implemented in CU-CP {NULL, NULL, NULL, NULL, NULL}, // at the moment, no measurement is implemented in CU-CP
{NULL, NULL, NULL, kpm_meas_cuup, NULL} {NULL, NULL, NULL, kpm_meas_cuup, NULL}
...@@ -518,6 +537,26 @@ static meas_info_for_action_lst_t* fill_meas_info_list_for_act(const ngran_node_ ...@@ -518,6 +537,26 @@ static meas_info_for_action_lst_t* fill_meas_info_list_for_act(const ngran_node_
return info_lst; return info_lst;
} }
static ric_report_style_item_t fill_kpm_def_report_style_1(const ngran_node_t node_type)
{
ric_report_style_item_t report_item = {0};
report_item.meas_info_for_action_lst = fill_meas_info_list_for_act(node_type, STYLE_1_RIC_SERVICE_REPORT, &report_item.meas_info_for_action_lst_len);
if (report_item.meas_info_for_action_lst == NULL)
return report_item;
report_item.report_style_type = STYLE_1_RIC_SERVICE_REPORT;
const char report_style_name[] = "E2 Node Measurement";
report_item.report_style_name = cp_str_to_ba(report_style_name);
report_item.act_def_format_type = FORMAT_1_ACTION_DEFINITION;
// Supported RIC Indication Formats
report_item.ind_hdr_format_type = FORMAT_1_INDICATION_HEADER; // 8.3.5
report_item.ind_msg_format_type = FORMAT_1_INDICATION_MESSAGE; // 8.3.5
return report_item;
}
static ric_report_style_item_t fill_kpm_def_report_style_4(const ngran_node_t node_type) static ric_report_style_item_t fill_kpm_def_report_style_4(const ngran_node_t node_type)
{ {
ric_report_style_item_t report_item = {0}; ric_report_style_item_t report_item = {0};
...@@ -548,7 +587,7 @@ static ric_report_style_item_t fill_kpm_def_report_style_null(const ngran_node_t ...@@ -548,7 +587,7 @@ static ric_report_style_item_t fill_kpm_def_report_style_null(const ngran_node_t
typedef ric_report_style_item_t (*kpm_report_style)(const ngran_node_t node_type); typedef ric_report_style_item_t (*kpm_report_style)(const ngran_node_t node_type);
static kpm_report_style report_style[END_RIC_SERVICE_REPORT] = { static kpm_report_style report_style[END_RIC_SERVICE_REPORT] = {
fill_kpm_def_report_style_null, fill_kpm_def_report_style_1,
fill_kpm_def_report_style_null, fill_kpm_def_report_style_null,
fill_kpm_def_report_style_null, fill_kpm_def_report_style_null,
fill_kpm_def_report_style_4, fill_kpm_def_report_style_4,
......
...@@ -226,6 +226,29 @@ static meas_record_lst_t fill_RRU_PrbTotUl(__attribute__((unused)) const label_i ...@@ -226,6 +226,29 @@ static meas_record_lst_t fill_RRU_PrbTotUl(__attribute__((unused)) const label_i
return meas_record; return meas_record;
} }
/* 3GPP TS 28.552 - section 5.1.1.12.1*/
static meas_record_lst_t fill_CARR_PDSCHMCSDist(const label_info_lst_t label,
__attribute__((unused)) uint32_t gran_period_ms,
__attribute__((unused)) 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 = {.value = INTEGER_MEAS_VALUE};
uint32_t bin_x = *label.distBinX, bin_y = *label.distBinY, bin_z = *label.distBinZ;
NR_du_stats_t* du_stats = &RC.nrmac[0]->du_stats;
if (bin_x <= 8 && bin_y <= 3 && bin_z <= 31) {
meas_record.int_val = du_stats->pdsch_mcs_dist[bin_x - 1][bin_y - 1][bin_z];
} else {
printf("[E2 AGENT] Unknown binX %d, binY %d, binZ %d for \"CARR.PDSCHMCSDist\" measurement\n", bin_x, bin_y, bin_z);
meas_record.int_val = 0;
}
return meas_record;
}
#endif #endif
static kv_measure_t lst_measure[] = { static kv_measure_t lst_measure[] = {
...@@ -237,6 +260,7 @@ static kv_measure_t lst_measure[] = { ...@@ -237,6 +260,7 @@ static kv_measure_t lst_measure[] = {
{.key = "DRB.UEThpUl", .value = fill_DRB_UEThpUl }, {.key = "DRB.UEThpUl", .value = fill_DRB_UEThpUl },
{.key = "RRU.PrbTotDl", .value = fill_RRU_PrbTotDl }, {.key = "RRU.PrbTotDl", .value = fill_RRU_PrbTotDl },
{.key = "RRU.PrbTotUl", .value = fill_RRU_PrbTotUl }, {.key = "RRU.PrbTotUl", .value = fill_RRU_PrbTotUl },
{.key = "CARR.PDSCHMCSDist", .value = fill_CARR_PDSCHMCSDist },
#endif #endif
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment