From 53348bd41dd5044b8873d4ec7e14eb4fa57340fb Mon Sep 17 00:00:00 2001 From: francescomani <email@francescomani.it> Date: Thu, 17 Aug 2023 18:00:12 +0200 Subject: [PATCH] improving DRB management at RRC UE --- openair2/LAYER2/NR_MAC_UE/main_ue_nr.c | 5 +- openair2/LAYER2/NR_MAC_gNB/main.c | 6 +- openair2/LAYER2/nr_pdcp/nr_pdcp_e1_api.c | 4 +- openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c | 55 ++++++------- openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.h | 13 ++- openair2/RRC/NR/cucp_cuup_direct.c | 3 +- openair2/RRC/NR/nr_rrc_proto.h | 3 +- openair2/RRC/NR/rrc_gNB.c | 3 +- openair2/RRC/NR/rrc_gNB_nsa.c | 3 +- openair2/RRC/NR_UE/rrc_UE.c | 99 +++++++---------------- openair2/RRC/NR_UE/rrc_defs.h | 5 +- openair2/RRC/NR_UE/rrc_proto.h | 6 +- 12 files changed, 76 insertions(+), 129 deletions(-) diff --git a/openair2/LAYER2/NR_MAC_UE/main_ue_nr.c b/openair2/LAYER2/NR_MAC_UE/main_ue_nr.c index 2b505bf6f42..3d23ce273b2 100644 --- a/openair2/LAYER2/NR_MAC_UE/main_ue_nr.c +++ b/openair2/LAYER2/NR_MAC_UE/main_ue_nr.c @@ -73,13 +73,10 @@ NR_UE_MAC_INST_t * nr_l2_init_ue(NR_UE_RRC_INST_t* rrc_inst) { NR_RadioBearerConfig_t *rbconfig = NULL; NR_RLC_BearerConfig_t *rlc_rbconfig = NULL; fill_nr_noS1_bearer_config(&rbconfig, &rlc_rbconfig); - struct NR_CellGroupConfig__rlc_BearerToAddModList rlc_bearer_list = { - .list = { .array = &rlc_rbconfig, .count = 1, .size = 1, } - }; // set up PDCP, RLC, MAC nr_pdcp_layer_init(); - nr_pdcp_add_drbs(ENB_FLAG_NO, nr_ue_mac_inst->crnti, rbconfig->drb_ToAddModList, 0, NULL, NULL, &rlc_bearer_list); + nr_pdcp_add_drbs(ENB_FLAG_NO, nr_ue_mac_inst->crnti, rbconfig->drb_ToAddModList, 0, NULL, NULL); nr_rlc_add_drb(nr_ue_mac_inst->crnti, rbconfig->drb_ToAddModList->list.array[0]->drb_Identity, rlc_rbconfig); nr_ue_mac_inst->logicalChannelBearer_exist[4] = true; diff --git a/openair2/LAYER2/NR_MAC_gNB/main.c b/openair2/LAYER2/NR_MAC_gNB/main.c index 7fd559fdcdb..4502bdc11d3 100644 --- a/openair2/LAYER2/NR_MAC_gNB/main.c +++ b/openair2/LAYER2/NR_MAC_gNB/main.c @@ -271,10 +271,6 @@ void mac_top_init_gNB(ngran_node_t node_type) NR_RadioBearerConfig_t *rbconfig = NULL; NR_RLC_BearerConfig_t *rlc_rbconfig = NULL; fill_nr_noS1_bearer_config(&rbconfig, &rlc_rbconfig); - NR_RLC_BearerConfig_t *rlc_rbconfig_list[1] = {rlc_rbconfig}; - struct NR_CellGroupConfig__rlc_BearerToAddModList rlc_bearer_list = { - .list = { .array = rlc_rbconfig_list, .count = 1, .size = 1, } - }; /* Note! previously, in nr_DRB_preconfiguration(), we passed ENB_FLAG_NO * if ENB_NAS_USE_TUN was *not* set. It seems to me that we could not set @@ -284,7 +280,7 @@ void mac_top_init_gNB(ngran_node_t node_type) * will output the packets at a local interface, which is in line with * the noS1 mode. Hence, below, we simply hardcode ENB_FLAG_NO */ // setup PDCP, RLC - nr_pdcp_add_drbs(ENB_FLAG_NO, 0x1234, rbconfig->drb_ToAddModList, 0, NULL, NULL, &rlc_bearer_list); + nr_pdcp_add_drbs(ENB_FLAG_NO, 0x1234, rbconfig->drb_ToAddModList, 0, NULL, NULL); nr_rlc_add_drb(0x1234, rbconfig->drb_ToAddModList->list.array[0]->drb_Identity, rlc_rbconfig); // free memory diff --git a/openair2/LAYER2/nr_pdcp/nr_pdcp_e1_api.c b/openair2/LAYER2/nr_pdcp/nr_pdcp_e1_api.c index 97370c59646..9e0abbc83d6 100644 --- a/openair2/LAYER2/nr_pdcp/nr_pdcp_e1_api.c +++ b/openair2/LAYER2/nr_pdcp/nr_pdcp_e1_api.c @@ -32,8 +32,8 @@ void e1_add_drb(int is_gnb, unsigned char *ciphering_key, unsigned char *integrity_key) { - add_drb_am(is_gnb, ue_id, s, ciphering_algorithm, integrity_algorithm, - ciphering_key, integrity_key); + add_drb(is_gnb, ue_id, s, ciphering_algorithm, integrity_algorithm, + ciphering_key, integrity_key); LOG_I(PDCP, "%s:%s:%d: added DRB for UE ID %ld\n", __FILE__, __FUNCTION__, __LINE__, ue_id); } diff --git a/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c b/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c index a1a3e958af0..385ef15a16f 100644 --- a/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c +++ b/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c @@ -794,7 +794,12 @@ void add_srb(int is_gnb, nr_pdcp_manager_unlock(nr_pdcp_ue_manager); } -void add_drb_am(int is_gnb, ue_id_t rntiMaybeUEid, struct NR_DRB_ToAddMod *s, int ciphering_algorithm, int integrity_algorithm, unsigned char *ciphering_key, unsigned char *integrity_key) +void add_drb(int is_gnb, ue_id_t rntiMaybeUEid, + struct NR_DRB_ToAddMod *s, + int ciphering_algorithm, + int integrity_algorithm, + unsigned char *ciphering_key, + unsigned char *integrity_key) { nr_pdcp_entity_t *pdcp_drb; nr_pdcp_ue_t *ue; @@ -888,32 +893,6 @@ void add_drb_am(int is_gnb, ue_id_t rntiMaybeUEid, struct NR_DRB_ToAddMod *s, in nr_pdcp_manager_unlock(nr_pdcp_ue_manager); } -static void add_drb(int is_gnb, - ue_id_t rntiMaybeUEid, - struct NR_DRB_ToAddMod *s, - NR_RLC_Config_t *rlc_Config, - int ciphering_algorithm, - int integrity_algorithm, - unsigned char *ciphering_key, - unsigned char *integrity_key) -{ - switch (rlc_Config->present) { - case NR_RLC_Config_PR_am: - add_drb_am(is_gnb, rntiMaybeUEid, s, ciphering_algorithm, integrity_algorithm, ciphering_key, integrity_key); - break; - case NR_RLC_Config_PR_um_Bi_Directional: - // add_drb_um(rntiMaybeUEid, s); - /* hack */ - add_drb_am(is_gnb, rntiMaybeUEid, s, ciphering_algorithm, integrity_algorithm, ciphering_key, integrity_key); - break; - default: - LOG_E(PDCP, "%s:%d:%s: fatal: unhandled DRB type\n", - __FILE__, __LINE__, __FUNCTION__); - exit(1); - } - LOG_I(PDCP, "%s:%s:%d: added DRB for UE ID/RNTI %ld\n", __FILE__, __FUNCTION__, __LINE__, rntiMaybeUEid); -} - void nr_pdcp_add_srbs(eNB_flag_t enb_flag, ue_id_t rntiMaybeUEid, NR_SRB_ToAddModList_t *const srb2add_list, const uint8_t security_modeP, uint8_t *const kRRCenc, uint8_t *const kRRCint) { if (srb2add_list != NULL) { @@ -929,12 +908,11 @@ void nr_pdcp_add_drbs(eNB_flag_t enb_flag, NR_DRB_ToAddModList_t *const drb2add_list, const uint8_t security_modeP, uint8_t *const kUPenc, - uint8_t *const kUPint, - struct NR_CellGroupConfig__rlc_BearerToAddModList *rlc_bearer2add_list) + uint8_t *const kUPint) { if (drb2add_list != NULL) { for (int i = 0; i < drb2add_list->list.count; i++) { - add_drb(enb_flag, rntiMaybeUEid, drb2add_list->list.array[i], rlc_bearer2add_list->list.array[i]->rlc_Config, security_modeP & 0x0f, (security_modeP >> 4) & 0x0f, kUPenc, kUPint); + add_drb(enb_flag, rntiMaybeUEid, drb2add_list->list.array[i], security_modeP & 0x0f, (security_modeP >> 4) & 0x0f, kUPenc, kUPint); } } else LOG_W(PDCP, "nr_pdcp_add_drbs() with void list\n"); @@ -1077,7 +1055,22 @@ void nr_pdcp_reconfigure_srb(ue_id_t ue_id, int decoded_t_reordering = decode_t_reordering(t_Reordering); srb->t_reordering = decoded_t_reordering; nr_pdcp_manager_unlock(nr_pdcp_ue_manager); - } +} + +void nr_pdcp_reconfigure_drb(ue_id_t ue_id, + int drb_id, + long t_Reordering) +{ + // The enabling/disabling of ciphering or integrity protection + // can be changed only by releasing and adding the DRB + // (so not by reconfiguring). + nr_pdcp_manager_lock(nr_pdcp_ue_manager); + nr_pdcp_ue_t *ue = nr_pdcp_manager_get_ue(nr_pdcp_ue_manager, ue_id); + nr_pdcp_entity_t *drb = ue->drb[drb_id - 1]; + int decoded_t_reordering = decode_t_reordering(t_Reordering); + drb->t_reordering = decoded_t_reordering; + nr_pdcp_manager_unlock(nr_pdcp_ue_manager); +} void nr_pdcp_reestablishment(ue_id_t ue_id) { diff --git a/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.h b/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.h index 77c60437176..944f42fe8bc 100644 --- a/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.h +++ b/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.h @@ -51,8 +51,14 @@ void nr_pdcp_add_drbs(eNB_flag_t enb_flag, NR_DRB_ToAddModList_t *const drb2add_list, const uint8_t security_modeP, uint8_t *const kUPenc, - uint8_t *const kUPint, - struct NR_CellGroupConfig__rlc_BearerToAddModList *rlc_bearer2add_list); + uint8_t *const kUPint); + +void add_drb(int is_gnb, ue_id_t rntiMaybeUEid, + struct NR_DRB_ToAddMod *s, + int ciphering_algorithm, + int integrity_algorithm, + unsigned char *ciphering_key, + unsigned char *integrity_key); void nr_DRB_preconfiguration(ue_id_t crntiMaybeUEid); @@ -62,6 +68,9 @@ void nr_pdcp_reestablishment(ue_id_t ue_id); void nr_pdcp_reconfigure_srb(ue_id_t ue_id, int srb_id, long t_Reordering); +void nr_pdcp_reconfigure_drb(ue_id_t ue_id, + int drb_id, + long t_Reordering); void add_srb(int is_gnb, ue_id_t rntiMaybeUEid, diff --git a/openair2/RRC/NR/cucp_cuup_direct.c b/openair2/RRC/NR/cucp_cuup_direct.c index 9dccef4286a..097f4d9793d 100644 --- a/openair2/RRC/NR/cucp_cuup_direct.c +++ b/openair2/RRC/NR/cucp_cuup_direct.c @@ -154,8 +154,7 @@ static int drb_config_gtpu_create(const protocol_ctxt_t *const ctxt_p, DRB_configList, (UE->integrity_algorithm << 4) | UE->ciphering_algorithm, kUPenc, - kUPint, - get_softmodem_params()->sa ? UE->masterCellGroup->rlc_BearerToAddModList : NULL); + kUPint); return ret; } diff --git a/openair2/RRC/NR/nr_rrc_proto.h b/openair2/RRC/NR/nr_rrc_proto.h index 7502662da31..0e42509a1ae 100644 --- a/openair2/RRC/NR/nr_rrc_proto.h +++ b/openair2/RRC/NR/nr_rrc_proto.h @@ -166,8 +166,7 @@ void nr_pdcp_add_drbs(eNB_flag_t enb_flag, NR_DRB_ToAddModList_t *const drb2add_list, const uint8_t security_modeP, uint8_t *const kUPenc, - uint8_t *const kUPint, - struct NR_CellGroupConfig__rlc_BearerToAddModList *rlc_bearer2add_list); + uint8_t *const kUPint); int rrc_gNB_generate_pcch_msg(uint32_t tmsi, uint8_t paging_drx, instance_t instance, uint8_t CC_id); diff --git a/openair2/RRC/NR/rrc_gNB.c b/openair2/RRC/NR/rrc_gNB.c index 2e4c46983f1..2f8befe8b58 100644 --- a/openair2/RRC/NR/rrc_gNB.c +++ b/openair2/RRC/NR/rrc_gNB.c @@ -969,8 +969,7 @@ static void rrc_gNB_process_RRCReconfigurationComplete(const protocol_ctxt_t *co DRB_configList, (ue_p->integrity_algorithm << 4) | ue_p->ciphering_algorithm, kUPenc, - kUPint, - get_softmodem_params()->sa ? ue_p->masterCellGroup->rlc_BearerToAddModList : NULL); + kUPint); /* Loop through DRBs and establish if necessary */ if (DRB_configList != NULL) { diff --git a/openair2/RRC/NR/rrc_gNB_nsa.c b/openair2/RRC/NR/rrc_gNB_nsa.c index 79adaa37375..7a1a44340f1 100644 --- a/openair2/RRC/NR/rrc_gNB_nsa.c +++ b/openair2/RRC/NR/rrc_gNB_nsa.c @@ -385,8 +385,7 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc, rrc_gNB_ue_context_t *ue_context_p, x2a ue_context_p->ue_context.rb_config->drb_ToAddModList, (ue_context_p->ue_context.integrity_algorithm << 4) | ue_context_p->ue_context.ciphering_algorithm, kUPenc, - kUPint, - ue_context_p->ue_context.secondaryCellGroup->rlc_BearerToAddModList); + kUPint); ctxt.rntiMaybeUEid = du_ue_id; // assume only a single bearer diff --git a/openair2/RRC/NR_UE/rrc_UE.c b/openair2/RRC/NR_UE/rrc_UE.c index 4205f47848a..a225d5e8276 100644 --- a/openair2/RRC/NR_UE/rrc_UE.c +++ b/openair2/RRC/NR_UE/rrc_UE.c @@ -97,13 +97,6 @@ nr_rrc_ue_process_ueCapabilityEnquiry( uint8_t gNB_index ); -void -nr_rrc_ue_process_RadioBearerConfig( - const protocol_ctxt_t *const ctxt_pP, - const uint8_t gNB_index, - NR_RadioBearerConfig_t *const radioBearerConfig -); - uint8_t do_NR_RRCReconfigurationComplete( const protocol_ctxt_t *const ctxt_pP, uint8_t *buffer, @@ -309,6 +302,8 @@ NR_UE_RRC_INST_t* openair_rrc_top_init_ue_nr(char* uecap_file, char* reconfig_fi memset((void *)&rrc->SInfo[i], 0, sizeof(rrc->SInfo[i])); for (int j = 0; j < NR_NUM_SRB; j++) memset((void *)&rrc->Srb[i][j], 0, sizeof(rrc->Srb[i][j])); + for (int j = 0; j < MAX_DRBS_PER_UE; j++) + rrc->active_DRBs[i][j] = false; // SRB0 activated by default rrc->Srb[i][0].status = RB_ESTABLISHED; } @@ -1539,77 +1534,39 @@ void nr_rrc_ue_process_RadioBearerConfig(const protocol_ctxt_t *const ctxt_pP, } } + + if (radioBearerConfig->drb_ToReleaseList != NULL) { + // TODO not implemented yet + } + // Establish DRBs if present if (radioBearerConfig->drb_ToAddModList != NULL) { - if ((NR_UE_rrc_inst[ctxt_pP->module_id].defaultDRB == NULL) && - (radioBearerConfig->drb_ToAddModList->list.count >= 1)) { - NR_UE_rrc_inst[ctxt_pP->module_id].defaultDRB = malloc(sizeof(rb_id_t)); - *NR_UE_rrc_inst[ctxt_pP->module_id].defaultDRB = radioBearerConfig->drb_ToAddModList->list.array[0]->drb_Identity; - } - for (int cnt = 0; cnt < radioBearerConfig->drb_ToAddModList->list.count; cnt++) { - int DRB_id = radioBearerConfig->drb_ToAddModList->list.array[cnt]->drb_Identity; - if (NR_UE_rrc_inst[ctxt_pP->module_id].DRB_config[gNB_index][DRB_id-1]) { - memcpy(NR_UE_rrc_inst[ctxt_pP->module_id].DRB_config[gNB_index][DRB_id-1], - radioBearerConfig->drb_ToAddModList->list.array[cnt], sizeof(NR_DRB_ToAddMod_t)); - } else { - //LOG_D(NR_RRC, "Adding DRB %ld %p\n", DRB_id-1, radioBearerConfig->drb_ToAddModList->list.array[cnt]); - NR_UE_rrc_inst[ctxt_pP->module_id].DRB_config[gNB_index][DRB_id-1] = radioBearerConfig->drb_ToAddModList->list.array[cnt]; - struct NR_CellGroupConfig__rlc_BearerToAddModList *rlc_bearer2add_list = NR_UE_rrc_inst[ctxt_pP->module_id].cell_group_config->rlc_BearerToAddModList; - if (rlc_bearer2add_list != NULL) { - for(int j = 0; j < rlc_bearer2add_list->list.count; j++){ - if(rlc_bearer2add_list->list.array[j]->servedRadioBearer != NULL){ - if(rlc_bearer2add_list->list.array[j]->servedRadioBearer->present == NR_RLC_BearerConfig__servedRadioBearer_PR_drb_Identity){ - if(DRB_id == rlc_bearer2add_list->list.array[j]->servedRadioBearer->choice.drb_Identity){ - LOG_I(NR_RRC, "[FRAME %05d][RRC_UE][MOD %02d][][--- MAC_CONFIG_REQ (DRB lcid %ld gNB %d) --->][MAC_UE][MOD %02d][]\n", - ctxt_pP->frame, ctxt_pP->module_id, rlc_bearer2add_list->list.array[j]->logicalChannelIdentity, 0, ctxt_pP->module_id); - nr_rrc_mac_config_req_ue_logicalChannelBearer(ctxt_pP->module_id,0,0,rlc_bearer2add_list->list.array[j]->logicalChannelIdentity,true); //todo handle mac_LogicalChannelConfig - } - } - } - } - } + struct NR_DRB_ToAddMod *drb = radioBearerConfig->drb_ToAddModList->list.array[cnt]; + int DRB_id = drb->drb_Identity; + if (ue_rrc->active_DRBs[gNB_index][DRB_id]) { + AssertFatal(drb->reestablishPDCP, "reestablishPDCP not yet implemented\n"); + AssertFatal(drb->recoverPDCP, "recoverPDCP not yet implemented\n"); + if(drb->pdcp_Config && drb->pdcp_Config->t_Reordering) + nr_pdcp_reconfigure_drb(ctxt_pP->rntiMaybeUEid, + DRB_id, + *drb->pdcp_Config->t_Reordering); + if(drb->cnAssociation) + AssertFatal(drb->cnAssociation->choice.sdap_Config, "SDAP reconfiguration not yet implemented\n"); + } + else { + ue_rrc->active_DRBs[gNB_index][DRB_id] = true; + add_drb(ctxt_pP->enb_flag, + ctxt_pP->rntiMaybeUEid, + radioBearerConfig->drb_ToAddModList->list.array[cnt], + ue_rrc->cipheringAlgorithm, + ue_rrc->integrityProtAlgorithm, + kRRCenc, + kRRCint); } } - - uint8_t kUPenc[16] = {0}; - uint8_t kUPint[16] = {0}; - nr_derive_key(UP_ENC_ALG, - NR_UE_rrc_inst[ctxt_pP->module_id].cipheringAlgorithm, - NR_UE_rrc_inst[ctxt_pP->module_id].kgnb, - kUPenc); - nr_derive_key(UP_INT_ALG, - NR_UE_rrc_inst[ctxt_pP->module_id].integrityProtAlgorithm, - NR_UE_rrc_inst[ctxt_pP->module_id].kgnb, - kUPint); - - // Refresh DRBs - nr_pdcp_add_drbs(ctxt_pP->enb_flag, - ctxt_pP->rntiMaybeUEid, - radioBearerConfig->drb_ToAddModList, - ue_rrc->cipheringAlgorithm | (ue_rrc->integrityProtAlgorithm << 4), - kUPenc, - kUPint, - ue_rrc->cell_group_config->rlc_BearerToAddModList); - } // drb_ToAddModList // - if (radioBearerConfig->drb_ToReleaseList != NULL) { - for (int i = 0; i < radioBearerConfig->drb_ToReleaseList->list.count; i++) { - int DRB_id = *radioBearerConfig->drb_ToReleaseList->list.array[i]; - free(NR_UE_rrc_inst[ctxt_pP->module_id].DRB_config[gNB_index][DRB_id-1]); - } - } - - if (NR_UE_rrc_inst[ctxt_pP->module_id].cell_group_config->rlc_BearerToReleaseList != NULL) { - for (int i = 0; i < NR_UE_rrc_inst[ctxt_pP->module_id].cell_group_config->rlc_BearerToReleaseList->list.count; i++) { - NR_LogicalChannelIdentity_t lcid = *NR_UE_rrc_inst[ctxt_pP->module_id].cell_group_config->rlc_BearerToReleaseList->list.array[i]; - LOG_I(NR_RRC, "[FRAME %05d][RRC_UE][MOD %02d][][--- MAC_CONFIG_REQ (RB lcid %ld gNB %d release) --->][MAC_UE][MOD %02d][]\n", - ctxt_pP->frame, ctxt_pP->module_id, lcid, 0, ctxt_pP->module_id); - nr_rrc_mac_config_req_ue_logicalChannelBearer(ctxt_pP->module_id,0,0,lcid,false); //todo handle mac_LogicalChannelConfig - } - } - NR_UE_rrc_inst[ctxt_pP->module_id].nrRrcState = RRC_STATE_CONNECTED_NR; LOG_I(NR_RRC,"[UE %d] State = NR_RRC_CONNECTED (gNB %d)\n", ctxt_pP->module_id, gNB_index); } diff --git a/openair2/RRC/NR_UE/rrc_defs.h b/openair2/RRC/NR_UE/rrc_defs.h index 61099700905..6b4dc947fb6 100644 --- a/openair2/RRC/NR_UE/rrc_defs.h +++ b/openair2/RRC/NR_UE/rrc_defs.h @@ -39,6 +39,7 @@ #include "platform_types.h" #include "commonDef.h" +#include "common/platform_constants.h" #include "NR_asn_constant.h" #include "NR_MeasConfig.h" @@ -202,13 +203,11 @@ typedef struct NR_UE_RRC_INST_s { NR_MeasGapConfig_t *measGapConfig[NB_CNX_UE]; NR_RSRP_Range_t s_measure; - NR_DRB_ToAddMod_t *DRB_config[NB_CNX_UE][8]; - rb_id_t *defaultDRB; // remember the ID of the default DRB - char *uecap_file; rnti_t rnti; NR_UE_RRC_SRB_INFO_t Srb[NB_CNX_UE][NR_NUM_SRB]; + bool active_DRBs [NB_CNX_UE][MAX_DRBS_PER_UE]; bool active_RLC_entity [NB_CNX_UE][NR_MAX_NUM_LCID]; OAI_NR_UECapability_t *UECap; diff --git a/openair2/RRC/NR_UE/rrc_proto.h b/openair2/RRC/NR_UE/rrc_proto.h index e6b9c4564d8..248c3601fdc 100644 --- a/openair2/RRC/NR_UE/rrc_proto.h +++ b/openair2/RRC/NR_UE/rrc_proto.h @@ -73,9 +73,9 @@ int8_t nr_rrc_ue_process_rrcReconfiguration(const module_id_t module_id, NR_RRCR \param meas_config measurement configuration*/ int8_t nr_rrc_ue_process_meas_config(NR_MeasConfig_t *meas_config); -/**\prief Process radio bearer config from NR RRC connection reconfiguration message - \param radio_bearer_config radio bearer configuration*/ -int8_t nr_rrc_ue_process_radio_bearer_config(NR_RadioBearerConfig_t *radio_bearer_config); +void nr_rrc_ue_process_RadioBearerConfig(const protocol_ctxt_t *const ctxt_pP, + const uint8_t gNB_index, + NR_RadioBearerConfig_t *const radioBearerConfig); /**\brief decode NR BCCH-BCH (MIB) message \param module_idP module id -- GitLab