diff --git a/openair2/RRC/NR/MESSAGES/asn1_msg.c b/openair2/RRC/NR/MESSAGES/asn1_msg.c index 2a0ebd736c..8025fb2243 100644 --- a/openair2/RRC/NR/MESSAGES/asn1_msg.c +++ b/openair2/RRC/NR/MESSAGES/asn1_msg.c @@ -559,12 +559,7 @@ int do_NR_SecurityModeCommand(uint8_t *const buffer, return((enc_rval.encoded+7)/8); } -/*TODO*/ -//------------------------------------------------------------------------------ -int do_NR_SA_UECapabilityEnquiry(const protocol_ctxt_t *const ctxt_pP, - uint8_t *const buffer, - const uint8_t Transaction_id) -//------------------------------------------------------------------------------ +int do_NR_SA_UECapabilityEnquiry(uint8_t *const buffer, const uint8_t Transaction_id) { NR_UE_CapabilityRequestFilterNR_t *sa_band_filter; NR_FreqBandList_t *sa_band_list; @@ -624,7 +619,7 @@ int do_NR_SA_UECapabilityEnquiry(const protocol_ctxt_t *const ctxt_pP, enc_rval.failed_type->name, enc_rval.encoded); ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_NR_DL_DCCH_Message, &dl_dcch_msg); - LOG_D(NR_RRC, "[gNB %d] NR UECapabilityRequest for UE %lx Encoded %zd bits (%zd bytes)\n", ctxt_pP->module_id, ctxt_pP->rntiMaybeUEid, enc_rval.encoded, (enc_rval.encoded + 7) / 8); + LOG_D(NR_RRC, "NR UECapabilityRequestEncoded %zd bits (%zd bytes)\n", enc_rval.encoded, (enc_rval.encoded + 7) / 8); return((enc_rval.encoded+7)/8); } diff --git a/openair2/RRC/NR/MESSAGES/asn1_msg.h b/openair2/RRC/NR/MESSAGES/asn1_msg.h index 871fe08d49..8609e20328 100644 --- a/openair2/RRC/NR/MESSAGES/asn1_msg.h +++ b/openair2/RRC/NR/MESSAGES/asn1_msg.h @@ -86,9 +86,7 @@ int do_NR_SecurityModeCommand(uint8_t *const buffer, const uint8_t cipheringAlgorithm, NR_IntegrityProtAlgorithm_t integrityProtAlgorithm); -int do_NR_SA_UECapabilityEnquiry(const protocol_ctxt_t *const ctxt_pP, - uint8_t *const buffer, - const uint8_t Transaction_id); +int do_NR_SA_UECapabilityEnquiry(uint8_t *const buffer, const uint8_t Transaction_id); int do_NR_RRCRelease(uint8_t *buffer, size_t buffer_size, uint8_t Transaction_id); diff --git a/openair2/RRC/NR/MESSAGES/tests/test_asn1_msg.cpp b/openair2/RRC/NR/MESSAGES/tests/test_asn1_msg.cpp index 9d1ee71f9c..1b8d5ce4d8 100644 --- a/openair2/RRC/NR/MESSAGES/tests/test_asn1_msg.cpp +++ b/openair2/RRC/NR/MESSAGES/tests/test_asn1_msg.cpp @@ -37,9 +37,8 @@ TEST(nr_asn1, rrc_reject) TEST(nr_asn1, sa_capability_enquiry) { - protocol_ctxt_t ctxt = {0}; unsigned char buf[1000]; - EXPECT_GT(do_NR_SA_UECapabilityEnquiry(&ctxt, buf, 0), 0); + EXPECT_GT(do_NR_SA_UECapabilityEnquiry(buf, 0), 0); } TEST(nr_asn1, rrc_reconfiguration_complete_for_nsa) diff --git a/openair2/RRC/NR/nr_rrc_proto.h b/openair2/RRC/NR/nr_rrc_proto.h index 31a86c3144..009164a80d 100644 --- a/openair2/RRC/NR/nr_rrc_proto.h +++ b/openair2/RRC/NR/nr_rrc_proto.h @@ -78,12 +78,6 @@ void rrc_forward_ue_nas_message(gNB_RRC_INST *rrc, gNB_RRC_UE_t *UE); unsigned int rrc_gNB_get_next_transaction_identifier(module_id_t gnb_mod_idP); -void -rrc_gNB_generate_UECapabilityEnquiry( - const protocol_ctxt_t *const ctxt_pP, - rrc_gNB_ue_context_t *const ue_context_pP -); - void rrc_gNB_generate_RRCRelease( const protocol_ctxt_t *const ctxt_pP, diff --git a/openair2/RRC/NR/rrc_gNB.c b/openair2/RRC/NR/rrc_gNB.c index b5f97d366e..4d409985b2 100644 --- a/openair2/RRC/NR/rrc_gNB.c +++ b/openair2/RRC/NR/rrc_gNB.c @@ -1623,7 +1623,22 @@ static void handle_rrcReconfigurationComplete(gNB_RRC_INST *rrc, gNB_RRC_UE_t *U } } } -//----------------------------------------------------------------------------- + +static void rrc_gNB_generate_UECapabilityEnquiry(gNB_RRC_INST *rrc, gNB_RRC_UE_t *ue) +{ + uint8_t buffer[100]; + + T(T_ENB_RRC_UE_CAPABILITY_ENQUIRY, T_INT(rrc->module_id), T_INT(0), T_INT(0), T_INT(ue->rrc_ue_id)); + uint8_t xid = rrc_gNB_get_next_transaction_identifier(rrc->module_id); + ue->xids[xid] = RRC_UECAPABILITY_ENQUIRY; + int size = do_NR_SA_UECapabilityEnquiry(buffer, xid); + LOG_I(NR_RRC, "UE %d: Logical Channel DL-DCCH, Generate NR UECapabilityEnquiry (bytes %d, xid %d)\n", ue->rrc_ue_id, size, xid); + + AssertFatal(!NODE_IS_DU(rrc->node_type), "illegal node type DU!\n"); + + nr_rrc_transfer_protected_rrc_message(rrc, ue, DCCH, buffer, size); +} + int rrc_gNB_decode_dcch(const protocol_ctxt_t *const ctxt_pP, const rb_id_t Srb_id, const uint8_t *const Rx_sdu, @@ -1682,38 +1697,15 @@ int rrc_gNB_decode_dcch(const protocol_ctxt_t *const ctxt_pP, break; case NR_UL_DCCH_MessageType__c1_PR_securityModeComplete: - // to avoid segmentation fault - if (!ue_context_p) { - LOG_I(NR_RRC, "Processing securityModeComplete UE %lx, ue_context_p is NULL\n", ctxt_pP->rntiMaybeUEid); - break; - } - - LOG_I(NR_RRC, - PROTOCOL_NR_RRC_CTXT_UE_FMT " received securityModeComplete on UL-DCCH %d from UE\n", - PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP), - DCCH); - LOG_D(NR_RRC, - PROTOCOL_NR_RRC_CTXT_UE_FMT - " RLC RB %02d --- RLC_DATA_IND %d bytes " - "(securityModeComplete) ---> RRC_eNB\n", - PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP), - DCCH, - sdu_sizeP); - - if (LOG_DEBUGFLAG(DEBUG_ASN1)) { - xer_fprint(stdout, &asn_DEF_NR_UL_DCCH_Message, (void *)ul_dcch_msg); - } - /* configure ciphering */ - nr_rrc_pdcp_config_security(&ue_context_p->ue_context, true); - ue_context_p->ue_context.as_security_active = true; + nr_rrc_pdcp_config_security(UE, true); + UE->as_security_active = true; /* trigger UE capability enquiry if we don't have them yet */ - if (ue_context_p->ue_context.ue_cap_buffer.len == 0) { - rrc_gNB_generate_UECapabilityEnquiry(ctxt_pP, ue_context_p); + if (UE->ue_cap_buffer.len == 0) { + rrc_gNB_generate_UECapabilityEnquiry(rrc, UE); /* else blocks are executed after receiving UE capability info */ - } else if (ue_context_p->ue_context.n_initial_pdu > 0) { - gNB_RRC_UE_t *UE = &ue_context_p->ue_context; + } else if (UE->n_initial_pdu > 0) { /* there were PDU sessions with the NG UE Context setup, but we had * to set up security, so trigger PDU sessions now. The UE NAS * message will be forwarded in the corresponding reconfiguration, @@ -1723,7 +1715,7 @@ int rrc_gNB_decode_dcch(const protocol_ctxt_t *const ctxt_pP, /* we already have capabilities, and no PDU sessions to setup, ack * this UE */ rrc_gNB_send_NGAP_INITIAL_CONTEXT_SETUP_RESP(rrc, UE); - rrc_forward_ue_nas_message(RC.nrrrc[0], &ue_context_p->ue_context); + rrc_forward_ue_nas_message(rrc, UE); } break; @@ -2575,28 +2567,6 @@ void rrc_gNB_generate_SecurityModeCommand(gNB_RRC_INST *rrc, gNB_RRC_UE_t *ue_p) nr_rrc_transfer_protected_rrc_message(rrc, ue_p, DCCH, buffer, size); } -void -rrc_gNB_generate_UECapabilityEnquiry( - const protocol_ctxt_t *const ctxt_pP, - rrc_gNB_ue_context_t *const ue_context_pP -) -//----------------------------------------------------------------------------- -{ - uint8_t buffer[100]; - - T(T_ENB_RRC_UE_CAPABILITY_ENQUIRY, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rntiMaybeUEid)); - gNB_RRC_UE_t *ue = &ue_context_pP->ue_context; - uint8_t xid = rrc_gNB_get_next_transaction_identifier(ctxt_pP->module_id); - ue->xids[xid] = RRC_UECAPABILITY_ENQUIRY; - int size = do_NR_SA_UECapabilityEnquiry(ctxt_pP, buffer, xid); - LOG_I(NR_RRC, "UE %d: Logical Channel DL-DCCH, Generate NR UECapabilityEnquiry (bytes %d, xid %d)\n", ue->rrc_ue_id, size, xid); - - gNB_RRC_INST *rrc = RC.nrrrc[ctxt_pP->module_id]; - AssertFatal(!NODE_IS_DU(rrc->node_type), "illegal node type DU!\n"); - - nr_rrc_transfer_protected_rrc_message(rrc, ue, DCCH, buffer, size); -} - typedef struct deliver_ue_ctxt_release_data_t { gNB_RRC_INST *rrc; f1ap_ue_context_release_cmd_t *release_cmd;