Commit e772bc95 authored by Teodora's avatar Teodora

KPM ran func def cleanup

parent cb99496a
...@@ -20,11 +20,6 @@ ...@@ -20,11 +20,6 @@
*/ */
#include "ran_func_kpm_subs.h" #include "ran_func_kpm_subs.h"
#include "common/utils/assertions.h"
#include <string.h>
#include <assert.h>
#include <pthread.h>
typedef struct uldlcounter { typedef struct uldlcounter {
uint32_t dl; uint32_t dl;
...@@ -47,12 +42,12 @@ static nr_pdcp_statistics_t get_pdcp_stats_per_drb(const uint32_t rrc_ue_id) ...@@ -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 // 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}; meas_record_lst_t meas_record = {0};
// Get PDCP stats per DRB // 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; meas_record.value = INTEGER_MEAS_VALUE;
...@@ -65,12 +60,12 @@ static meas_record_lst_t fill_DRB_PdcpSduVolumeDL(__attribute__((unused))uint32_ ...@@ -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 // 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}; meas_record_lst_t meas_record = {0};
// Get PDCP stats per DRB // 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; meas_record.value = INTEGER_MEAS_VALUE;
...@@ -86,34 +81,29 @@ static meas_record_lst_t fill_DRB_PdcpSduVolumeUL(__attribute__((unused))uint32_ ...@@ -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_rlc_pdu_total_bytes[MAX_MOBILES_PER_GNB] = {0};
static uldlcounter_t last_total_prbs[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}; nr_rlc_statistics_t rlc = {0};
const int srb_flag = 0; const int srb_flag = 0;
const int rb_id = 1; // at the moment, only 1 DRB is supported const int rb_id = 1; // at the moment, only 1 DRB is supported
// Get RLC stats for specific DRB // 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"); assert(rc == true && "Cannot get RLC stats\n");
// Activate average sojourn time at the RLC buffer for specific DRB // 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; return rlc;
} }
// 3GPP TS 28.522 - section 5.1.3.3.3 // 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}; 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 // 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; meas_record.value = REAL_MEAS_VALUE;
...@@ -125,15 +115,12 @@ static meas_record_lst_t fill_DRB_RlcSduDelayDl(__attribute__((unused))uint32_t ...@@ -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 // 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}; 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 // 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; meas_record.value = REAL_MEAS_VALUE;
// Calculate DL Thp // Calculate DL Thp
...@@ -146,15 +133,12 @@ static meas_record_lst_t fill_DRB_UEThpDl(uint32_t gran_period_ms, cudu_ue_id_pa ...@@ -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 // 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}; 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 // 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; 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 ...@@ -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 // 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}; 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; meas_record.value = INTEGER_MEAS_VALUE;
// Get the number of DL PRBs // Get the number of DL PRBs
meas_record.int_val = UE->mac_stats.dl.total_rbs - last_total_prbs[ue_idx].dl; // [PRBs] 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->mac_stats.dl.total_rbs; 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 /* 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) */ 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_ ...@@ -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 // 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}; 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; meas_record.value = INTEGER_MEAS_VALUE;
// Get the number of UL PRBs // Get the number of UL PRBs
meas_record.int_val = UE->mac_stats.ul.total_rbs - last_total_prbs[ue_idx].ul; // [PRBs] 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->mac_stats.ul.total_rbs; 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 /* 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) */ here calculated as: aggregated UL PRBs (t) - aggregated UL PRBs (t-gran_period) */
...@@ -218,7 +196,7 @@ static const kv_measure_t lst_measure[] = { ...@@ -218,7 +196,7 @@ static const kv_measure_t lst_measure[] = {
#endif #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); 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 ...@@ -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++) { for (size_t i = 0; i < sizeof(lst_measure) / sizeof(lst_measure[0]); i++) {
if (strcmp(kpm_meas_name, lst_measure[i].key) == 0) { 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; break;
} }
} }
......
...@@ -22,41 +22,25 @@ ...@@ -22,41 +22,25 @@
#ifndef RAN_FUNC_SM_KPM_SUBSCRIPTION_AGENT_H #ifndef RAN_FUNC_SM_KPM_SUBSCRIPTION_AGENT_H
#define 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_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/LAYER2/nr_pdcp/nr_pdcp_oai_api.h"
#include "openair2/E1AP/e1ap_common.h" #include "openair2/LAYER2/nr_rlc/nr_rlc_oai_api.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"
typedef struct { typedef struct {
uint32_t rrc_ue_id; 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{ typedef struct{
const char* key; const char* key;
kpm_meas_fp value; kpm_meas_fp value;
} kv_measure_t; } 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 #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