Commit e772bc95 authored by Teodora's avatar Teodora

KPM ran func def cleanup

parent cb99496a
......@@ -20,11 +20,6 @@
*/
#include "ran_func_kpm_subs.h"
#include "common/utils/assertions.h"
#include <string.h>
#include <assert.h>
#include <pthread.h>
typedef struct uldlcounter {
uint32_t dl;
......@@ -47,12 +42,12 @@ static nr_pdcp_statistics_t get_pdcp_stats_per_drb(const uint32_t rrc_ue_id)
}
// 3GPP TS 28.522 - section 5.1.2.1.1.1
static meas_record_lst_t fill_DRB_PdcpSduVolumeDL(__attribute__((unused))uint32_t gran_period_ms, cudu_ue_id_pair_t ue_id, const size_t ue_idx)
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)
{
meas_record_lst_t meas_record = {0};
// Get PDCP stats per DRB
nr_pdcp_statistics_t pdcp = get_pdcp_stats_per_drb(ue_id.rrc_ue_id);
nr_pdcp_statistics_t pdcp = get_pdcp_stats_per_drb(ue_info.rrc_ue_id);
meas_record.value = INTEGER_MEAS_VALUE;
......@@ -65,12 +60,12 @@ static meas_record_lst_t fill_DRB_PdcpSduVolumeDL(__attribute__((unused))uint32_
}
// 3GPP TS 28.522 - section 5.1.2.1.2.1
static meas_record_lst_t fill_DRB_PdcpSduVolumeUL(__attribute__((unused))uint32_t gran_period_ms, cudu_ue_id_pair_t ue_id, const size_t ue_idx)
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)
{
meas_record_lst_t meas_record = {0};
// Get PDCP stats per DRB
nr_pdcp_statistics_t pdcp = get_pdcp_stats_per_drb(ue_id.rrc_ue_id);
nr_pdcp_statistics_t pdcp = get_pdcp_stats_per_drb(ue_info.rrc_ue_id);
meas_record.value = INTEGER_MEAS_VALUE;
......@@ -86,34 +81,29 @@ static meas_record_lst_t fill_DRB_PdcpSduVolumeUL(__attribute__((unused))uint32_
static uldlcounter_t last_rlc_pdu_total_bytes[MAX_MOBILES_PER_GNB] = {0};
static uldlcounter_t last_total_prbs[MAX_MOBILES_PER_GNB] = {0};
static nr_rlc_statistics_t get_rlc_stats_per_drb(NR_UE_info_t const * UE)
static nr_rlc_statistics_t get_rlc_stats_per_drb(const rnti_t rnti)
{
assert(UE != NULL);
nr_rlc_statistics_t rlc = {0};
const int srb_flag = 0;
const int rb_id = 1; // at the moment, only 1 DRB is supported
// Get RLC stats for specific DRB
const bool rc = nr_rlc_get_statistics(UE->rnti, srb_flag, rb_id, &rlc);
const bool rc = nr_rlc_get_statistics(rnti, srb_flag, rb_id, &rlc);
assert(rc == true && "Cannot get RLC stats\n");
// Activate average sojourn time at the RLC buffer for specific DRB
nr_rlc_activate_avg_time_to_tx(UE->rnti, rb_id+3, 1);
nr_rlc_activate_avg_time_to_tx(rnti, rb_id+3, 1);
return rlc;
}
// 3GPP TS 28.522 - section 5.1.3.3.3
static meas_record_lst_t fill_DRB_RlcSduDelayDl(__attribute__((unused))uint32_t gran_period_ms, cudu_ue_id_pair_t ue_id, __attribute__((unused))const size_t ue_idx)
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)
{
meas_record_lst_t meas_record = {0};
// f1_ue_data_t f1_ue_data = cu_get_f1_ue_data(rrc_ue_id);
NR_UE_info_t* UE = find_nr_UE(&RC.nrmac[0]->UE_info, ue_id.rnti);
// Get RLC stats per DRB
nr_rlc_statistics_t rlc = get_rlc_stats_per_drb(UE);
nr_rlc_statistics_t rlc = get_rlc_stats_per_drb(ue_info.ue->rnti);
meas_record.value = REAL_MEAS_VALUE;
......@@ -125,15 +115,12 @@ static meas_record_lst_t fill_DRB_RlcSduDelayDl(__attribute__((unused))uint32_t
}
// 3GPP TS 28.522 - section 5.1.1.3.1
static meas_record_lst_t fill_DRB_UEThpDl(uint32_t gran_period_ms, cudu_ue_id_pair_t ue_id, const size_t ue_idx)
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)
{
meas_record_lst_t meas_record = {0};
// f1_ue_data_t f1_ue_data = cu_get_f1_ue_data(rrc_ue_id);
NR_UE_info_t* UE = find_nr_UE(&RC.nrmac[0]->UE_info, ue_id.rnti);
// Get RLC stats per DRB
nr_rlc_statistics_t rlc = get_rlc_stats_per_drb(UE);
nr_rlc_statistics_t rlc = get_rlc_stats_per_drb(ue_info.ue->rnti);
meas_record.value = REAL_MEAS_VALUE;
// Calculate DL Thp
......@@ -146,15 +133,12 @@ static meas_record_lst_t fill_DRB_UEThpDl(uint32_t gran_period_ms, cudu_ue_id_pa
}
// 3GPP TS 28.522 - section 5.1.1.3.3
static meas_record_lst_t fill_DRB_UEThpUl(uint32_t gran_period_ms, cudu_ue_id_pair_t ue_id, const size_t ue_idx)
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)
{
meas_record_lst_t meas_record = {0};
// f1_ue_data_t f1_ue_data = cu_get_f1_ue_data(rrc_ue_id);
NR_UE_info_t* UE = find_nr_UE(&RC.nrmac[0]->UE_info, ue_id.rnti);
// Get RLC stats per DRB
nr_rlc_statistics_t rlc = get_rlc_stats_per_drb(UE);
nr_rlc_statistics_t rlc = get_rlc_stats_per_drb(ue_info.ue->rnti);
meas_record.value = REAL_MEAS_VALUE;
......@@ -168,18 +152,15 @@ static meas_record_lst_t fill_DRB_UEThpUl(uint32_t gran_period_ms, cudu_ue_id_pa
}
// 3GPP TS 28.522 - section 5.1.1.2.1
static meas_record_lst_t fill_RRU_PrbTotDl(__attribute__((unused))uint32_t gran_period_ms, cudu_ue_id_pair_t ue_id, const size_t ue_idx)
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)
{
meas_record_lst_t meas_record = {0};
// f1_ue_data_t f1_ue_data = cu_get_f1_ue_data(rrc_ue_id);
NR_UE_info_t* UE = find_nr_UE(&RC.nrmac[0]->UE_info, ue_id.rnti);
meas_record.value = INTEGER_MEAS_VALUE;
// Get the number of DL PRBs
meas_record.int_val = UE->mac_stats.dl.total_rbs - last_total_prbs[ue_idx].dl; // [PRBs]
last_total_prbs[ue_idx].dl = UE->mac_stats.dl.total_rbs;
meas_record.int_val = ue_info.ue->mac_stats.dl.total_rbs - last_total_prbs[ue_idx].dl; // [PRBs]
last_total_prbs[ue_idx].dl = ue_info.ue->mac_stats.dl.total_rbs;
/* note: per spec, DL PRB usage [%] = (total used PRBs for DL traffic / total available PRBs for DL traffic) * 100
here calculated as: aggregated DL PRBs (t) - aggregated DL PRBs (t-gran_period) */
......@@ -187,18 +168,15 @@ static meas_record_lst_t fill_RRU_PrbTotDl(__attribute__((unused))uint32_t gran_
}
// 3GPP TS 28.522 - section 5.1.1.2.2
static meas_record_lst_t fill_RRU_PrbTotUl(__attribute__((unused))uint32_t gran_period_ms, cudu_ue_id_pair_t ue_id, const size_t ue_idx)
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)
{
meas_record_lst_t meas_record = {0};
// f1_ue_data_t f1_ue_data = cu_get_f1_ue_data(rrc_ue_id);
NR_UE_info_t* UE = find_nr_UE(&RC.nrmac[0]->UE_info, ue_id.rnti);
meas_record.value = INTEGER_MEAS_VALUE;
// Get the number of UL PRBs
meas_record.int_val = UE->mac_stats.ul.total_rbs - last_total_prbs[ue_idx].ul; // [PRBs]
last_total_prbs[ue_idx].ul = UE->mac_stats.ul.total_rbs;
meas_record.int_val = ue_info.ue->mac_stats.ul.total_rbs - last_total_prbs[ue_idx].ul; // [PRBs]
last_total_prbs[ue_idx].ul = ue_info.ue->mac_stats.ul.total_rbs;
/* note: per spec, UL PRB usage [%] = (total used PRBs for UL traffic / total available PRBs for UL traffic) * 100
here calculated as: aggregated UL PRBs (t) - aggregated UL PRBs (t-gran_period) */
......@@ -218,7 +196,7 @@ static const kv_measure_t lst_measure[] = {
#endif
};
meas_record_lst_t get_kpm_meas_value(char* kpm_meas_name, uint32_t gran_period_ms, cudu_ue_id_pair_t ue_id, const size_t ue_idx)
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)
{
assert(kpm_meas_name != NULL);
......@@ -226,7 +204,7 @@ meas_record_lst_t get_kpm_meas_value(char* kpm_meas_name, uint32_t gran_period_m
for (size_t i = 0; i < sizeof(lst_measure) / sizeof(lst_measure[0]); i++) {
if (strcmp(kpm_meas_name, lst_measure[i].key) == 0) {
meas_record = lst_measure[i].value(gran_period_ms, ue_id, ue_idx);
meas_record = lst_measure[i].value(gran_period_ms, ue_info, ue_idx);
break;
}
}
......
......@@ -22,41 +22,25 @@
#ifndef RAN_FUNC_SM_KPM_SUBSCRIPTION_AGENT_H
#define RAN_FUNC_SM_KPM_SUBSCRIPTION_AGENT_H
#include "openair2/E2AP/flexric/src/agent/../sm/sm_io.h"
#include "openair2/E2AP/flexric/src/sm/kpm_sm/kpm_data_ie_wrapper.h"
#include "openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h"
#include "openair2/LAYER2/NR_MAC_gNB/mac_proto.h"
#include "openair2/LAYER2/nr_rlc/nr_rlc_entity.h"
#include "openair2/LAYER2/nr_rlc/nr_rlc_oai_api.h"
#include "openair2/RRC/NR/rrc_gNB_UE_context.h"
#include "openair2/LAYER2/nr_pdcp/nr_pdcp_entity.h"
#include "openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.h"
#include "openair2/E1AP/e1ap_common.h"
#include "openair2/F1AP/f1ap_ids.h"
#include <assert.h>
#include <stdio.h>
#include "common/utils/hashtable/hashtable.h"
#include "common/utils/assertions.h"
#include "openair3/NGAP/ngap_gNB_ue_context.h"
#include "common/openairinterface5g_limits.h"
#include "openair2/LAYER2/nr_rlc/nr_rlc_oai_api.h"
typedef struct {
uint32_t rrc_ue_id;
rnti_t rnti;
NR_UE_info_t* ue;
} cudu_ue_id_pair_t;
} cudu_ue_info_pair_t;
typedef meas_record_lst_t (*kpm_meas_fp)(uint32_t gran_period_ms, cudu_ue_id_pair_t ue_id, const size_t ue_idx);
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);
typedef struct{
const char* key;
kpm_meas_fp value;
} kv_measure_t;
meas_record_lst_t get_kpm_meas_value(char* kpm_meas_name, uint32_t gran_period_ms, cudu_ue_id_pair_t ue_id, const size_t ue_idx);
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);
#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