Implement E2SM-KPM REPORT style 1 containing "CARR.PDSCHMCSDist" measurement
Co-authored-by: Teodora Vladić <teodora.vladic@openairinterface.org>
This commit is contained in:
committed by
Teodora
co-authored by
Teodora Vladić
parent
2c96fe5cc8
commit
b3028fdd18
@@ -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)
|
|||||||
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;
|
|||||||
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_
|
|||||||
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
|
|||||||
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
|
|||||||
|
|
||||||
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[] = {
|
|||||||
{.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
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user