diff --git a/CMakeLists.txt b/CMakeLists.txt index fe41692e800a09a3cb09d29d4292b43be4fddd11..1f88da21fe926d652f07098c735bafa6b1827c4c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -334,7 +334,9 @@ add_definitions("-DPACKAGE_BUGREPORT=\"openair4g-devel@lists.eurecom.fr\"") # Debug related options ######################################### -add_boolean_option(DEBUG_ASN1C False "ASN1 coder/decoder Debug traces, see common/utils/config.h, the logs are regular OAI logs, in the log group 'ASN'") +add_boolean_option(ASN_EMIT_DEBUG True "ASN1 coder/decoder Debug") +add_boolean_option(ASN_THREAD_SAFE True "ASN1 coder/decoder Debug") +add_boolean_option(MSG_PRINT True "print debug messages") add_boolean_option(DISABLE_XER_PRINT False "print XER Format") add_boolean_option(XER_PRINT False "print XER Format") add_boolean_option(DEBUG_PDCP_PAYLOAD False "print PDCP PDU to stdout") # if true, make sure that global and PDCP log levels are trace diff --git a/doc/SW_archi.md b/doc/SW_archi.md index 01d3c377d4382b510207199e60b9c5c6c9ca9d42..5186c60bfd6e5fd30499487c6c41c750887cbde5 100644 --- a/doc/SW_archi.md +++ b/doc/SW_archi.md @@ -344,7 +344,8 @@ pdcp_config_set_security(): not yet developped nr_DRB_preconfiguration(): the mac layer calls this for ??? -nr_rrc_pdcp_config_asn1_req() adds a UE in pdcp, pdcp_remove_UE() removes it +nr_pdcp_add_srbs() adds UE SRBs in pdcp, pdcp_remove_UE() removes it +nr_pdcp_add_drbs() adds UE DRBs in pdcp, pdcp_remove_UE() removes it # GTP Gtp + UDP are two twin threads performing the data plane interface to the core network diff --git a/openair2/E1AP/e1ap.c b/openair2/E1AP/e1ap.c index 60b0bed2d37e722be36a8c3bab73ac431d193d4f..9f1bcea1dfeb880c1575d148f918962c5a24bba9 100644 --- a/openair2/E1AP/e1ap.c +++ b/openair2/E1AP/e1ap.c @@ -507,6 +507,12 @@ int e1apCUCP_send_BEARER_CONTEXT_SETUP_REQUEST(instance_t instance, E1AP_E1AP_PDU_t pdu = {0}; /* Create */ /* 0. pdu Type */ + e1ap_setup_req_t *setup = &getCxtE1(CPtype, instance)->setupReq; + if (!setup) { + LOG_E(E1AP, "got send_BEARER_CONTEXT_SETUP_REQUEST on not established instance (%ld)\n", instance); + return -1; + } + pdu.present = E1AP_E1AP_PDU_PR_initiatingMessage; asn1cCalloc(pdu.choice.initiatingMessage, msg); msg->procedureCode = E1AP_ProcedureCode_id_bearerContextSetup; @@ -527,7 +533,8 @@ int e1apCUCP_send_BEARER_CONTEXT_SETUP_REQUEST(instance_t instance, ieC2->criticality = E1AP_Criticality_reject; ieC2->value.present = E1AP_BearerContextSetupRequestIEs__value_PR_SecurityInformation; ieC2->value.choice.SecurityInformation.securityAlgorithm.cipheringAlgorithm = bearerCxt->cipheringAlgorithm; - OCTET_STRING_fromBuf(&ieC2->value.choice.SecurityInformation.uPSecuritykey.encryptionKey, bearerCxt->encryptionKey, strlen(bearerCxt->encryptionKey)); + OCTET_STRING_fromBuf(&ieC2->value.choice.SecurityInformation.uPSecuritykey.encryptionKey, + bearerCxt->encryptionKey, strlen(bearerCxt->encryptionKey)); /* mandatory */ /* c3. UE DL Aggregate Maximum Bit Rate */ asn1cSequenceAdd(out->protocolIEs.list, E1AP_BearerContextSetupRequestIEs_t, ieC3); @@ -541,7 +548,6 @@ int e1apCUCP_send_BEARER_CONTEXT_SETUP_REQUEST(instance_t instance, ieC4->id = E1AP_ProtocolIE_ID_id_Serving_PLMN; ieC4->criticality = E1AP_Criticality_ignore; ieC4->value.present = E1AP_BearerContextSetupRequestIEs__value_PR_PLMN_Identity; - e1ap_setup_req_t *setup = &getCxtE1(CPtype, instance)->setupReq; PLMN_ID_t *servingPLMN = setup->plmns; // First PLMN is serving PLMN. TODO: Remove hard coding here MCC_MNC_TO_PLMNID(servingPLMN->mcc, servingPLMN->mnc, servingPLMN->mnc_digit_length, &ieC4->value.choice.PLMN_Identity); /* mandatory */ @@ -600,7 +606,6 @@ int e1apCUCP_send_BEARER_CONTEXT_SETUP_REQUEST(instance_t instance, for(pdu_session_to_setup_t *i=bearerCxt->pduSession; i < bearerCxt->pduSession+bearerCxt->numPDUSessions; i++) { asn1cSequenceAdd(pdu2Setup->list, E1AP_PDU_Session_Resource_To_Setup_Item_t, ieC6_1); ieC6_1->pDU_Session_ID = i->sessionId; - ieC6_1->pDU_Session_Type = i->sessionType; INT32_TO_OCTET_STRING(i->sst, &ieC6_1->sNSSAI.sST); @@ -791,6 +796,12 @@ int e1apCUUP_send_BEARER_CONTEXT_SETUP_FAILURE(instance_t instance) { int e1apCUUP_handle_BEARER_CONTEXT_SETUP_REQUEST(instance_t instance, E1AP_E1AP_PDU_t *pdu) { + e1ap_bearer_setup_req_t *bearerCxt = &getCxtE1(CPtype, instance)->bearerSetupReq; + if (!bearerCxt) { + LOG_E(E1AP, "got BEARER_CONTEXT_SETUP_REQUEST on not established instance (%ld)\n", instance); + return -1; + } + DevAssert(pdu != NULL); AssertFatal(pdu->present == E1AP_E1AP_PDU_PR_initiatingMessage, "pdu->present != E1AP_E1AP_PDU_PR_initiatingMessage\n"); @@ -804,8 +815,6 @@ int e1apCUUP_handle_BEARER_CONTEXT_SETUP_REQUEST(instance_t instance, E1AP_BearerContextSetupRequest_t *in = &pdu->choice.initiatingMessage->value.choice.BearerContextSetupRequest; E1AP_BearerContextSetupRequestIEs_t *ie; - e1ap_bearer_setup_req_t *bearerCxt = &getCxtE1(CPtype, instance)->bearerSetupReq; - MessageDef *msg = itti_alloc_new_message(TASK_CUUP_E1, 0, E1AP_BEARER_CONTEXT_SETUP_REQ); LOG_I(E1AP, "Bearer context setup number of IEs %d\n", in->protocolIEs.list.count); @@ -1207,6 +1216,11 @@ void *E1AP_CUCP_task(void *arg) { e1apCUCP_send_SETUP_RESPONSE(myInstance, &E1AP_SETUP_RESP(msg)); break; + case E1AP_BEARER_CONTEXT_SETUP_REQ: + LOG_I(E1AP, "CUCP Task Received E1AP_BEARER_CONTEXT_SETUP_REQ\n"); + e1apCUCP_send_BEARER_CONTEXT_SETUP_REQUEST(myInstance, &E1AP_BEARER_CONTEXT_SETUP_REQ(msg)); + break; + default: LOG_E(E1AP, "Unknown message received in TASK_CUCP_E1\n"); break; diff --git a/openair2/E1AP/e1ap_common.c b/openair2/E1AP/e1ap_common.c index dd92f9c100eaa2a622306d592c7693c4d9ec998b..8b995bc12f631790295b6bd34bc0ea1f76c4f9db 100644 --- a/openair2/E1AP/e1ap_common.c +++ b/openair2/E1AP/e1ap_common.c @@ -31,7 +31,7 @@ static e1ap_upcp_inst_t *e1ap_up_inst[NUMBER_OF_gNB_MAX] = {0}; e1ap_upcp_inst_t *getCxtE1(E1_t type, instance_t instance) { AssertFatal( instance < sizeofArray(e1ap_cp_inst), "instance exceeds limit\n"); - return type ? e1ap_up_inst[instance] : e1ap_cp_inst[instance]; + return type == UPtype ? e1ap_up_inst[instance] : e1ap_cp_inst[instance]; } int e1ap_assoc_id(E1_t type, instance_t instance) { diff --git a/openair2/E1AP/e1ap_common.h b/openair2/E1AP/e1ap_common.h index fdb3a96596107986e8a9a9443877a63146fb6767..2a28b542d5752aa64d1b0171676755ab49abefad 100644 --- a/openair2/E1AP/e1ap_common.h +++ b/openair2/E1AP/e1ap_common.h @@ -25,7 +25,7 @@ #define E1AP_COMMON_H_ #include "openair2/COMMON/e1ap_messages_types.h" - +//#define ASN_DEBUG( x... ) LOG_I(ASN, x) int e1ap_decode_pdu(E1AP_E1AP_PDU_t *pdu, const uint8_t *const buffer, uint32_t length); e1ap_upcp_inst_t *getCxtE1(E1_t type, instance_t instance); diff --git a/openair2/GNB_APP/gnb_app.c b/openair2/GNB_APP/gnb_app.c index 1d0c210158d4959d2b4b88e9f276fb6cca700d85..e65c53f259b1461630841286c1a1f5756e5ac39b 100644 --- a/openair2/GNB_APP/gnb_app.c +++ b/openair2/GNB_APP/gnb_app.c @@ -68,7 +68,6 @@ static void configure_nr_rrc(uint32_t gnb_id) msg_p = itti_alloc_new_message (TASK_GNB_APP, 0, NRRRC_CONFIGURATION_REQ); if (RC.nrrrc[gnb_id]) { - RC.nrrrc[gnb_id]->node_type=set_node_type(); RCconfig_NRRRC(msg_p,gnb_id, RC.nrrrc[gnb_id]); LOG_I(GNB_APP, "RRC starting with node type %d\n", RC.nrrrc[gnb_id]->node_type); @@ -143,7 +142,6 @@ void *gNB_app_task(void *args_p) uint32_t gnb_nb = RC.nb_nr_inst; uint32_t gnb_id_start = 0; uint32_t gnb_id_end = gnb_id_start + gnb_nb; - uint32_t gnb_id; MessageDef *msg_p = NULL; const char *msg_name = NULL; instance_t instance; @@ -172,13 +170,17 @@ void *gNB_app_task(void *args_p) RC.nrrrc = (gNB_RRC_INST **)malloc(RC.nb_nr_inst*sizeof(gNB_RRC_INST *)); LOG_I(PHY, "%s() RC.nb_nr_inst:%d RC.nrrrc:%p\n", __FUNCTION__, RC.nb_nr_inst, RC.nrrrc); - for (gnb_id = gnb_id_start; (gnb_id < gnb_id_end) ; gnb_id++) { + for (int gnb_id = gnb_id_start; (gnb_id < gnb_id_end) ; gnb_id++) { RC.nrrrc[gnb_id] = (gNB_RRC_INST*)calloc(1,sizeof(gNB_RRC_INST)); LOG_I(PHY, "%s() Creating RRC instance RC.nrrrc[%d]:%p (%d of %d)\n", __FUNCTION__, gnb_id, RC.nrrrc[gnb_id], gnb_id+1, gnb_id_end); + RC.nrrrc[gnb_id]->node_type=set_node_type(); configure_nr_rrc(gnb_id); } - if (RC.nb_nr_inst > 0 && !get_softmodem_params()->nsa) { + if (RC.nb_nr_inst > 0 && + !get_softmodem_params()->nsa && + !(RC.nrrrc[0]->node_type == ngran_gNB_DU)) { + // we start pdcp in both cuup (for drb) and cucp (for srb) init_pdcp(); } diff --git a/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c b/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c index 042352e8eac732d269d95ded5f2c1867ddfbecbe..25ea76cde3466a7af5f4e42bfe9248ea24317a8f 100644 --- a/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c +++ b/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c @@ -1036,72 +1036,45 @@ static void add_drb(int is_gnb, int rnti, struct NR_DRB_ToAddMod *s, LOG_I(PDCP, "%s:%s:%d: added DRB for UE RNTI %x\n", __FILE__, __FUNCTION__, __LINE__, rnti); } -bool nr_rrc_pdcp_config_asn1_req(const protocol_ctxt_t *const ctxt_pP, - NR_SRB_ToAddModList_t *const srb2add_list, - NR_DRB_ToAddModList_t *const drb2add_list, - NR_DRB_ToReleaseList_t *const drb2release_list, - const uint8_t security_modeP, - uint8_t *const kRRCenc, - uint8_t *const kRRCint, - uint8_t *const kUPenc, - uint8_t *const kUPint, - LTE_PMCH_InfoList_r9_t *pmch_InfoList_r9, - rb_id_t *const defaultDRB, - struct NR_CellGroupConfig__rlc_BearerToAddModList *rlc_bearer2add_list) -{ - int rnti = ctxt_pP->rnti; - int i; - - if (//ctxt_pP->enb_flag != 1 || - ctxt_pP->module_id != 0 || - ctxt_pP->instance != 0 || - ctxt_pP->eNB_index != 0 || - //ctxt_pP->configured != 2 || - //srb2add_list == NULL || - //drb2add_list != NULL || - //drb2release_list != NULL || - //security_modeP != 255 || - //kRRCenc != NULL || - //kRRCint != NULL || - //kUPenc != NULL || - pmch_InfoList_r9 != NULL /*|| - defaultDRB != NULL */) { - LOG_I(PDCP,"Releasing DRBs, oops\n"); - TODO; - } - +void nr_pdcp_add_srbs(eNB_flag_t enb_flag, rnti_t rnti, + NR_SRB_ToAddModList_t *const srb2add_list, + const uint8_t security_modeP, + uint8_t *const kRRCenc, + uint8_t *const kRRCint) { if (srb2add_list != NULL) { - for (i = 0; i < srb2add_list->list.count; i++) { - add_srb(ctxt_pP->enb_flag,rnti, srb2add_list->list.array[i], + for (int i = 0; i < srb2add_list->list.count; i++) { + add_srb(enb_flag,rnti, srb2add_list->list.array[i], security_modeP & 0x0f, (security_modeP >> 4) & 0x0f, kRRCenc, kRRCint); } } + LOG_W(PDCP, "nr_pdcp_add_srbs() with void list\n"); + if (kRRCenc) + free(kRRCenc); + if (kRRCint) + free(kRRCint); +} + +void nr_pdcp_add_drbs(eNB_flag_t enb_flag, rnti_t rnti, + 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) { if (drb2add_list != NULL) { - for (i = 0; i < drb2add_list->list.count; i++) { - add_drb(ctxt_pP->enb_flag, rnti, drb2add_list->list.array[i], + for (int i = 0; i < drb2add_list->list.count; i++) { + add_drb(enb_flag, rnti, drb2add_list->list.array[i], rlc_bearer2add_list->list.array[i]->rlc_Config, security_modeP & 0x0f, (security_modeP >> 4) & 0x0f, kUPenc, kUPint); } - } - - /* update security */ - if (kRRCint != NULL) { - /* todo */ - } - - if (drb2release_list != NULL) { - // TODO - } - - free(kRRCenc); - free(kRRCint); - free(kUPenc); - free(kUPint); - - return 0; + } else + LOG_W(PDCP, "nr_pdcp_add_drbs() with void list\n"); + if (kUPenc) + free(kUPenc); + if (kUPint) + free(kUPint); } /* Dummy function due to dependency from LTE libraries */ @@ -1188,21 +1161,14 @@ void nr_DRB_preconfiguration(uint16_t crnti) else{ PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, 0, ENB_FLAG_NO, crnti, 0, 0,0); } - - nr_rrc_pdcp_config_asn1_req( - &ctxt, - (NR_SRB_ToAddModList_t *) NULL, - rbconfig->drb_ToAddModList , - rbconfig->drb_ToReleaseList, - 0, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - Rlc_Bearer_ToAdd_list); - + + nr_pdcp_add_drbs(ctxt.enb_flag, ctxt.rnti, + rbconfig->drb_ToAddModList , + 0, + NULL, + NULL, + Rlc_Bearer_ToAdd_list); + nr_rrc_rlc_config_asn1_req (&ctxt, (NR_SRB_ToAddModList_t *) NULL, rbconfig->drb_ToAddModList, diff --git a/openair2/RRC/NR/nr_rrc_proto.h b/openair2/RRC/NR/nr_rrc_proto.h index b90cf4dfa4cc8a8c868b26d60a90686b95f8aa61..779f804486a3e22feccdf451d013d6756ca2acc5 100644 --- a/openair2/RRC/NR/nr_rrc_proto.h +++ b/openair2/RRC/NR/nr_rrc_proto.h @@ -206,15 +206,15 @@ rlc_op_status_t nr_rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt const LTE_PMCH_InfoList_r9_t * const pmch_InfoList_r9_pP, struct NR_CellGroupConfig__rlc_BearerToAddModList *rlc_bearer2add_list); -bool nr_rrc_pdcp_config_asn1_req(const protocol_ctxt_t *const ctxt_pP, - NR_SRB_ToAddModList_t *const srb2add_list, - NR_DRB_ToAddModList_t *const drb2add_list, - NR_DRB_ToReleaseList_t *const drb2release_list, - const uint8_t security_modeP, - uint8_t *const kRRCenc, - uint8_t *const kRRCint, - uint8_t *const kUPenc, - uint8_t *const kUPint, - LTE_PMCH_InfoList_r9_t *pmch_InfoList_r9, - rb_id_t *const defaultDRB, - struct NR_CellGroupConfig__rlc_BearerToAddModList *rlc_bearer2add_list); +void nr_pdcp_add_srbs(eNB_flag_t enb_flag, rnti_t rnti, + NR_SRB_ToAddModList_t *const srb2add_list, + const uint8_t security_modeP, + uint8_t *const kRRCenc, + uint8_t *const kUPint); + +void nr_pdcp_add_drbs(eNB_flag_t enb_flag, rnti_t rnti, + 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); diff --git a/openair2/RRC/NR/rrc_gNB.c b/openair2/RRC/NR/rrc_gNB.c index e69ed804b6bf48ba6fa30a3f435049601b070528..2932c39d60ee06c074b5618bcdf2ce8c5c33e037 100755 --- a/openair2/RRC/NR/rrc_gNB.c +++ b/openair2/RRC/NR/rrc_gNB.c @@ -316,23 +316,7 @@ void apply_macrlc_config(gNB_RRC_INST *rrc, } -void apply_pdcp_config(rrc_gNB_ue_context_t *const ue_context_pP, - const protocol_ctxt_t *const ctxt_pP ) { - - nr_rrc_pdcp_config_asn1_req(ctxt_pP, - ue_context_pP->ue_context.SRB_configList, - NULL, - NULL, - 0, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - get_softmodem_params()->sa ? ue_context_pP->ue_context.masterCellGroup->rlc_BearerToAddModList : NULL); -} //----------------------------------------------------------------------------- void @@ -1340,19 +1324,21 @@ rrc_gNB_process_RRCReconfigurationComplete( LOG_D(NR_RRC,"Configuring PDCP DRBs/SRBs for UE %x\n",ue_context_pP->ue_context.rnti); - nr_rrc_pdcp_config_asn1_req(ctxt_pP, - SRB_configList, // NULL, - DRB_configList, - DRB_Release_configList2, - (ue_context_pP->ue_context.integrity_algorithm << 4) - | ue_context_pP->ue_context.ciphering_algorithm, - kRRCenc, - kRRCint, - kUPenc, - kUPint, - NULL, - NULL, - get_softmodem_params()->sa ? ue_context_pP->ue_context.masterCellGroup->rlc_BearerToAddModList : NULL); + nr_pdcp_add_srbs(ctxt_pP->enb_flag, ctxt_pP->rnti, + SRB_configList, + (ue_context_pP->ue_context.integrity_algorithm << 4) + | ue_context_pP->ue_context.ciphering_algorithm, + kRRCenc, + kRRCint); + + nr_pdcp_add_drbs(ctxt_pP->enb_flag, ctxt_pP->rnti, + DRB_configList, + (ue_context_pP->ue_context.integrity_algorithm << 4) + | ue_context_pP->ue_context.ciphering_algorithm, + kUPenc, + kUPint, + get_softmodem_params()->sa ? ue_context_pP->ue_context.masterCellGroup->rlc_BearerToAddModList : NULL); + /* Refresh SRBs/DRBs */ if (!NODE_IS_CU(RC.nrrrc[ctxt_pP->module_id]->node_type)) { LOG_D(NR_RRC,"Configuring RLC DRBs/SRBs for UE %x\n",ue_context_pP->ue_context.rnti); @@ -2188,27 +2174,6 @@ int nr_rrc_gNB_decode_ccch(protocol_ctxt_t *const ctxt_pP, LOG_I(NR_RRC, PROTOCOL_NR_RRC_CTXT_UE_FMT"CALLING RLC CONFIG SRB1 (rbid %d)\n", PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP), Idx); - // nr_rrc_pdcp_config_asn1_req(ctxt_pP, - // ue_context_p->ue_context.SRB_configList, - // NULL, - // NULL, - // 0xff, - // NULL, - // NULL, - // NULL, - // NULL, - // NULL, - // NULL, - // NULL); - - // if (!NODE_IS_CU(RC.nrrrc[ctxt_pP->module_id]->node_type)) { - // nr_rrc_rlc_config_asn1_req(ctxt_pP, - // ue_context_p->ue_context.SRB_configList, - // NULL, - // NULL, - // NULL, - // NULL); - // } } break; diff --git a/openair2/RRC/NR/rrc_gNB_NGAP.c b/openair2/RRC/NR/rrc_gNB_NGAP.c index a92f43b080f75b4b572e3f16763c8f7eb376dd8f..c905b59d82a7a2f76b663265a7196636e6d80b8c 100644 --- a/openair2/RRC/NR/rrc_gNB_NGAP.c +++ b/openair2/RRC/NR/rrc_gNB_NGAP.c @@ -992,8 +992,7 @@ rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ( At CU-CP we configure the E1 bearer context setup parameters (PDU sessions, DRBs and QoS flows) same as in these functions. At CU-UP we create PDU Sessions and allocate DRBs. */ - MessageDef *msg_p = NULL; - msg_p = itti_alloc_new_message(TASK_CUCP_E1, 0, E1AP_BEARER_CONTEXT_SETUP_REQ); + MessageDef *msg_p = itti_alloc_new_message(TASK_CUCP_E1, 0, E1AP_BEARER_CONTEXT_SETUP_REQ); e1ap_bearer_setup_req_t *bearer_req = &E1AP_BEARER_CONTEXT_SETUP_REQ(msg_p); bearer_req->gNB_cu_cp_ue_id = gNB_ue_ngap_id; diff --git a/openair2/RRC/NR/rrc_gNB_nsa.c b/openair2/RRC/NR/rrc_gNB_nsa.c index b3eada8136ad9b1c11b918c689777bca26b28dbc..cfcb1f6db5def5e92dade4b21f21511d968663d3 100644 --- a/openair2/RRC/NR/rrc_gNB_nsa.c +++ b/openair2/RRC/NR/rrc_gNB_nsa.c @@ -383,21 +383,15 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_ ctxt.subframe, ctxt.eNB_index); - nr_rrc_pdcp_config_asn1_req(&ctxt, - get_softmodem_params()->sa ? ue_context_p->ue_context.rb_config->srb_ToAddModList : (NR_SRB_ToAddModList_t *) NULL, - ue_context_p->ue_context.rb_config->drb_ToAddModList , - ue_context_p->ue_context.rb_config->drb_ToReleaseList, - (ue_context_p->ue_context.integrity_algorithm << 4) | ue_context_p->ue_context.ciphering_algorithm, - NULL, /* kRRCenc - unused */ - NULL, /* kRRCint - unused */ - kUPenc, /* kUPenc */ - kUPint, /* kUPint */ - NULL, - NULL, - ue_context_p->ue_context.secondaryCellGroup->rlc_BearerToAddModList); + nr_pdcp_add_drbs(ctxt.enb_flag, ctxt.rnti, + 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); nr_rrc_rlc_config_asn1_req(&ctxt, - get_softmodem_params()->sa ? ue_context_p->ue_context.rb_config->srb_ToAddModList : (NR_SRB_ToAddModList_t *) NULL, + get_softmodem_params()->sa ? ue_context_p->ue_context.rb_config->srb_ToAddModList : NULL, ue_context_p->ue_context.rb_config->drb_ToAddModList, ue_context_p->ue_context.rb_config->drb_ToReleaseList, (LTE_PMCH_InfoList_r9_t *) NULL, diff --git a/openair2/RRC/NR_UE/rrc_UE.c b/openair2/RRC/NR_UE/rrc_UE.c index bf4f053ba6fe5ec3d9023550d2e4e91bef7c2713..84724020ff7d63fccf4e177ce777cbee4618ef4d 100644 --- a/openair2/RRC/NR_UE/rrc_UE.c +++ b/openair2/RRC/NR_UE/rrc_UE.c @@ -1989,19 +1989,12 @@ nr_rrc_ue_establish_srb2( NR_UE_rrc_inst[ctxt_pP->module_id].kgnb, &kRRCint); // Refresh SRBs - nr_rrc_pdcp_config_asn1_req(ctxt_pP, - radioBearerConfig->srb_ToAddModList, - NULL, - NULL, - NR_UE_rrc_inst[ctxt_pP->module_id].cipheringAlgorithm | - (NR_UE_rrc_inst[ctxt_pP->module_id].integrityProtAlgorithm << 4), - kRRCenc, - kRRCint, - NULL, - NULL, - NULL, - NULL, - NR_UE_rrc_inst[ctxt_pP->module_id].cell_group_config->rlc_BearerToAddModList); + nr_pdcp_add_srbs(ctxt_pP->enb_flag, ctxt_pP->rnti, + radioBearerConfig->srb_ToAddModList, + NR_UE_rrc_inst[ctxt_pP->module_id].cipheringAlgorithm | + (NR_UE_rrc_inst[ctxt_pP->module_id].integrityProtAlgorithm << 4), + kRRCenc, + kRRCint); // Refresh SRBs nr_rrc_rlc_config_asn1_req(ctxt_pP, radioBearerConfig->srb_ToAddModList, @@ -2094,27 +2087,21 @@ nr_rrc_ue_establish_srb2( NR_UE_rrc_inst[ctxt_pP->module_id].kgnb, &kUPint); // Refresh DRBs - nr_rrc_pdcp_config_asn1_req(ctxt_pP, - NULL, - radioBearerConfig->drb_ToAddModList, - NULL, - NR_UE_rrc_inst[ctxt_pP->module_id].cipheringAlgorithm - | (NR_UE_rrc_inst[ctxt_pP->module_id].integrityProtAlgorithm << 4), - NULL, - NULL, - kUPenc, - kUPint, - NULL, - NR_UE_rrc_inst[ctxt_pP->module_id].defaultDRB, - NR_UE_rrc_inst[ctxt_pP->module_id].cell_group_config->rlc_BearerToAddModList); - // Refresh DRBs - nr_rrc_rlc_config_asn1_req(ctxt_pP, - NULL, - radioBearerConfig->drb_ToAddModList, - NULL, - NULL, - NR_UE_rrc_inst[ctxt_pP->module_id].cell_group_config->rlc_BearerToAddModList - ); + nr_pdcp_add_drbs(ctxt_pP->enb_flag, ctxt_pP->rnti, + radioBearerConfig->drb_ToAddModList, + NR_UE_rrc_inst[ctxt_pP->module_id].cipheringAlgorithm + | (NR_UE_rrc_inst[ctxt_pP->module_id].integrityProtAlgorithm << 4), + kUPenc, + kUPint, + NR_UE_rrc_inst[ctxt_pP->module_id].cell_group_config->rlc_BearerToAddModList); + // Refresh DRBs + nr_rrc_rlc_config_asn1_req(ctxt_pP, + NULL, + radioBearerConfig->drb_ToAddModList, + NULL, + NULL, + NR_UE_rrc_inst[ctxt_pP->module_id].cell_group_config->rlc_BearerToAddModList + ); } // drb_ToAddModList // if (radioBearerConfig->drb_ToReleaseList != NULL) {