Remove dependency from RRC gNB structure in NR RLC API

Pass a "type" of RLC operational mode, from which split-type/gNB/UE
decision is derived.

Co-authored-by: Robert Schmidt <robert.schmidt@openairinterface.org>
This commit is contained in:
francescomani
2025-04-24 18:40:07 +02:00
co-authored by Robert Schmidt
parent 3974136a05
commit 60a57c69b3
7 changed files with 30 additions and 16 deletions
+1 -1
View File
@@ -300,7 +300,7 @@ void init_openair0()
static void init_pdcp(int ue_id)
{
if (get_softmodem_params()->nsa && nr_rlc_module_init(0) != 0) {
if (get_softmodem_params()->nsa && nr_rlc_module_init(NR_RLC_OP_MODE_UE) != 0) {
LOG_I(RLC, "Problem at RLC initiation \n");
}
nr_pdcp_layer_init();
+1 -1
View File
@@ -141,7 +141,7 @@ NR_UE_MAC_INST_t *nr_l2_init_ue(int nb_inst)
ue_init_config_request(mac, get_slots_per_frame_from_scs(get_softmodem_params()->numerology));
}
int rc = nr_rlc_module_init(0);
int rc = nr_rlc_module_init(NR_RLC_OP_MODE_UE);
AssertFatal(rc == 0, "Could not initialize RLC layer\n");
for (int j = 0; j < nb_inst; j++) {
+3 -1
View File
@@ -303,7 +303,9 @@ void mac_top_init_gNB(ngran_node_t node_type,
mac_rrc_init(RC.nrmac[i], node_type);
}//END for (i = 0; i < RC.nb_nr_macrlc_inst; i++)
AssertFatal(nr_rlc_module_init(1) == 0,"Could not initialize RLC layer\n");
nr_rlc_op_mode_t mode = NODE_IS_MONOLITHIC(node_type) ? NR_RLC_OP_MODE_MONO_GNB : NR_RLC_OP_MODE_SPLIT_GNB;
int success = nr_rlc_module_init(mode);
AssertFatal(success == 0,"Could not initialize RLC layer\n");
// These should be out of here later
if (get_softmodem_params()->usim_test == 0 ) nr_pdcp_layer_init();
+5 -7
View File
@@ -320,7 +320,7 @@ int nr_rlc_get_available_tx_space(const int ue_id, const logical_chan_id_t chann
return ret;
}
int nr_rlc_module_init(int gnb_flag)
int nr_rlc_module_init(nr_rlc_op_mode_t mode)
{
static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
static int inited = 0;
@@ -328,6 +328,7 @@ int nr_rlc_module_init(int gnb_flag)
if (pthread_mutex_lock(&lock)) abort();
bool gnb_flag = mode != NR_RLC_OP_MODE_UE;
if (gnb_flag == 1 && inited) {
LOG_E(RLC, "%s:%d:%s: fatal, inited already 1\n", __FILE__, __LINE__, __FUNCTION__);
exit(1);
@@ -343,7 +344,7 @@ int nr_rlc_module_init(int gnb_flag)
if (gnb_flag == 0)
inited_ue = 1;
nr_rlc_ue_manager = new_nr_rlc_ue_manager(gnb_flag);
nr_rlc_ue_manager = new_nr_rlc_ue_manager(mode);
if (pthread_mutex_unlock(&lock)) abort();
@@ -409,17 +410,14 @@ rb_found:
T_INT(0 /*ctxt_pP->module_id*/),
T_INT(ue->ue_id), T_INT(rb_id), T_INT(size));
const ngran_node_t type = RC.nrrrc[0 /*ctxt_pP->module_id*/]->node_type;
AssertFatal(!NODE_IS_CU(type),
"Can't be CU, bad node type %d\n", type);
// if (NODE_IS_DU(type) && is_srb == 0) {
// LOG_D(RLC, "call proto_agent_send_pdcp_data_ind() \n");
// proto_agent_send_pdcp_data_ind(&ctx, is_srb, 0, rb_id, size, memblock);
// return;
// }
if (NODE_IS_DU(type)) {
bool rlc_split = nr_rlc_manager_rlc_is_split(nr_rlc_ue_manager);
if (rlc_split) {
if(is_srb) {
MessageDef *msg;
msg = itti_alloc_new_message(TASK_RLC_ENB, 0, F1AP_UL_RRC_MESSAGE);
+1 -1
View File
@@ -41,7 +41,7 @@
struct NR_RLC_Config;
struct NR_LogicalChannelConfig;
int nr_rlc_module_init(int gnb_flag);
int nr_rlc_module_init(nr_rlc_op_mode_t mode);
void nr_mac_rlc_data_ind(const module_id_t module_idP,
const uint16_t ue_id,
const bool gnb_flagP,
+10 -4
View File
@@ -31,10 +31,10 @@ typedef struct {
pthread_mutex_t lock;
nr_rlc_ue_t **ue_list;
int ue_count;
int gnb_flag;
nr_rlc_op_mode_t mode;
} nr_rlc_ue_manager_internal_t;
nr_rlc_ue_manager_t *new_nr_rlc_ue_manager(int gnb_flag)
nr_rlc_ue_manager_t *new_nr_rlc_ue_manager(nr_rlc_op_mode_t mode)
{
nr_rlc_ue_manager_internal_t *ret;
@@ -45,15 +45,21 @@ nr_rlc_ue_manager_t *new_nr_rlc_ue_manager(int gnb_flag)
}
if (pthread_mutex_init(&ret->lock, NULL)) abort();
ret->gnb_flag = gnb_flag;
ret->mode = mode;
return ret;
}
bool nr_rlc_manager_rlc_is_split(nr_rlc_ue_manager_t *_m)
{
nr_rlc_ue_manager_internal_t *m = _m;
return m->mode == NR_RLC_OP_MODE_SPLIT_GNB;
}
int nr_rlc_manager_get_gnb_flag(nr_rlc_ue_manager_t *_m)
{
nr_rlc_ue_manager_internal_t *m = _m;
return m->gnb_flag;
return m->mode != NR_RLC_OP_MODE_UE;
}
void nr_rlc_manager_lock(nr_rlc_ue_manager_t *_m)
+9 -1
View File
@@ -24,11 +24,18 @@
#include "common/platform_types.h"
#include "nr_rlc_entity.h"
#include "common/platform_constants.h"
#include "common/ngran_types.h"
typedef void nr_rlc_ue_manager_t;
typedef enum nr_rlc_rb_type { NR_RLC_NONE = 0, NR_RLC_SRB = 1, NR_RLC_DRB = 2 } nr_rlc_rb_type;
typedef enum {
NR_RLC_OP_MODE_SPLIT_GNB,
NR_RLC_OP_MODE_MONO_GNB,
NR_RLC_OP_MODE_UE,
} nr_rlc_op_mode_t;
typedef struct nr_rlc_rb_t {
nr_rlc_rb_type type;
union {
@@ -52,8 +59,9 @@ typedef struct nr_rlc_ue_t {
/* manager functions */
/***********************************************************************/
nr_rlc_ue_manager_t *new_nr_rlc_ue_manager(int gnb_flag);
nr_rlc_ue_manager_t *new_nr_rlc_ue_manager(nr_rlc_op_mode_t mode);
bool nr_rlc_manager_rlc_is_split(nr_rlc_ue_manager_t *_m);
int nr_rlc_manager_get_gnb_flag(nr_rlc_ue_manager_t *m);
void nr_rlc_manager_lock(nr_rlc_ue_manager_t *m);