Merge remote-tracking branch 'origin/further_unused_arguments_cleanup' into integration_2026_w15 (!3977)
Further unused arguments cleanup More fixes for unused function arguments (see #1057), add_compile_options(-Wunused-parameter) added in folders: - nfapi - openair2 - openair3 - USRP - rfsimulator
This commit is contained in:
@@ -88,8 +88,6 @@ static const float RSRQ_meas_mapping[35] = {-19, -18.5, -18, -17.5, -17, -16.5,
|
||||
extern void pdcp_config_set_security(
|
||||
const protocol_ctxt_t *const ctxt_pP,
|
||||
pdcp_t *const pdcp_pP,
|
||||
const rb_id_t rb_idP,
|
||||
const uint16_t lc_idP,
|
||||
const uint8_t security_modeP,
|
||||
uint8_t *const kRRCenc,
|
||||
uint8_t *const kRRCint,
|
||||
@@ -1514,7 +1512,7 @@ rrc_ue_process_securityModeCommand(
|
||||
derive_key_nas(UP_ENC_ALG, UE_rrc_inst[ctxt_pP->module_id].ciphering_algorithm, UE_rrc_inst[ctxt_pP->module_id].kenb, kUPenc);
|
||||
|
||||
if (securityMode != 0xff) {
|
||||
pdcp_config_set_security(ctxt_pP, pdcp_p, 0, 0,
|
||||
pdcp_config_set_security(ctxt_pP, pdcp_p,
|
||||
UE_rrc_inst[ctxt_pP->module_id].ciphering_algorithm
|
||||
| (UE_rrc_inst[ctxt_pP->module_id].integrity_algorithm << 4),
|
||||
kRRCenc, kRRCint, kUPenc);
|
||||
|
||||
@@ -502,8 +502,6 @@ rrc_pdcp_config_security(
|
||||
pdcp_config_set_security(
|
||||
ctxt_pP,
|
||||
pdcp_p,
|
||||
DCCH,
|
||||
DCCH+2,
|
||||
(send_security_mode_command == true) ?
|
||||
0 | (ue_context_pP->ue_context.integrity_algorithm << 4) :
|
||||
(ue_context_pP->ue_context.ciphering_algorithm ) |
|
||||
|
||||
@@ -1141,7 +1141,6 @@ static NR_MeasIdToAddMod_t *get_MeasId(NR_MeasId_t measId, NR_ReportConfigId_t r
|
||||
|
||||
NR_MeasConfig_t *get_MeasConfig(const NR_MeasTiming_t *mt,
|
||||
int band,
|
||||
int scs,
|
||||
int nr_pci,
|
||||
NR_ReportConfigToAddMod_t *rc_PER,
|
||||
NR_ReportConfigToAddMod_t *rc_A2,
|
||||
@@ -1444,7 +1443,7 @@ byte_array_t get_HandoverCommandMessage(nr_rrc_reconfig_param_t *params)
|
||||
* 2) encodes UE Capabilities from UE Context
|
||||
* 3) encodes AS context
|
||||
* 4) generates HO Preparation Info */
|
||||
byte_array_t get_HandoverPreparationInformation(nr_rrc_reconfig_param_t *params, int scell_pci)
|
||||
byte_array_t get_HandoverPreparationInformation(nr_rrc_reconfig_param_t *params)
|
||||
{
|
||||
// Buffer to return
|
||||
byte_array_t buffer = {.buf = NULL, .len = 0};
|
||||
|
||||
@@ -140,7 +140,6 @@ int do_RRCReestablishmentComplete(uint8_t *buffer, size_t buffer_size, int64_t r
|
||||
|
||||
NR_MeasConfig_t *get_MeasConfig(const NR_MeasTiming_t *mt,
|
||||
int band,
|
||||
int scs,
|
||||
int nr_pci,
|
||||
NR_ReportConfigToAddMod_t *rc_PER,
|
||||
NR_ReportConfigToAddMod_t *rc_A2,
|
||||
@@ -150,7 +149,7 @@ NR_MeasConfig_t *get_MeasConfig(const NR_MeasTiming_t *mt,
|
||||
void free_MeasConfig(NR_MeasConfig_t *mc);
|
||||
int do_NR_Paging(uint8_t Mod_id, uint8_t *buffer, uint32_t tmsi);
|
||||
|
||||
byte_array_t get_HandoverPreparationInformation(nr_rrc_reconfig_param_t *params, int scell_pci);
|
||||
byte_array_t get_HandoverPreparationInformation(nr_rrc_reconfig_param_t *params);
|
||||
byte_array_t get_HandoverCommandMessage(nr_rrc_reconfig_param_t *params);
|
||||
void fill_removal_lists_from_source_measConfig(NR_MeasConfig_t *measConfig, byte_array_t prep_info);
|
||||
byte_array_t doRRCReconfiguration_from_HandoverCommand(byte_array_t handoverCommand);
|
||||
|
||||
@@ -19,6 +19,7 @@ static void f1_reset_cu_initiated_direct(sctp_assoc_t assoc_id, const f1ap_reset
|
||||
|
||||
static void f1_reset_acknowledge_du_initiated_direct(sctp_assoc_t assoc_id, const f1ap_reset_ack_t *ack)
|
||||
{
|
||||
UNUSED(assoc_id);
|
||||
(void)ack;
|
||||
AssertFatal(false, "%s() not implemented yet\n", __func__);
|
||||
}
|
||||
|
||||
@@ -29,6 +29,7 @@ static void f1_reset_cu_initiated_f1ap(sctp_assoc_t assoc_id, const f1ap_reset_t
|
||||
|
||||
static void f1_reset_acknowledge_du_initiated_f1ap(sctp_assoc_t assoc_id, const f1ap_reset_ack_t *ack)
|
||||
{
|
||||
UNUSED(assoc_id);
|
||||
(void)ack;
|
||||
AssertFatal(false, "%s() not implemented yet\n", __func__);
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
#define SRB2 2
|
||||
|
||||
void rrc_add_nsa_user(gNB_RRC_INST *rrc, x2ap_ENDC_sgnb_addition_req_t *m, sctp_assoc_t assoc_id);
|
||||
void rrc_add_nsa_user_resp(gNB_RRC_INST *rrc, gNB_RRC_UE_t *UE, const f1ap_ue_context_setup_resp_t *resp);
|
||||
void rrc_add_nsa_user_resp(gNB_RRC_UE_t *UE, const f1ap_ue_context_setup_resp_t *resp);
|
||||
void rrc_release_nsa_user(gNB_RRC_INST *rrc, rrc_gNB_ue_context_t *ue_context);
|
||||
void rrc_remove_nsa_user_context(gNB_RRC_INST *rrc, rrc_gNB_ue_context_t *ue_context);
|
||||
|
||||
@@ -43,18 +43,18 @@ void rrc_gNB_generate_RRCRelease(gNB_RRC_INST *rrc, gNB_RRC_UE_t *UE);
|
||||
\param args_p Pointer on arguments to start the task. */
|
||||
void *rrc_gnb_task(void *args_p);
|
||||
|
||||
int nr_rrc_reconfiguration_req(gNB_RRC_INST *rrc, gNB_RRC_UE_t *ue_p, const int dl_bwp_id, const int ul_bwp_id);
|
||||
int nr_rrc_reconfiguration_req(gNB_RRC_INST *rrc, gNB_RRC_UE_t *ue_p);
|
||||
|
||||
NR_MeasConfig_t *nr_rrc_get_measconfig(const gNB_RRC_INST *rrc, uint64_t nr_cellid);
|
||||
|
||||
bool ue_associated_to_cuup(const gNB_RRC_INST *rrc, const gNB_RRC_UE_t *ue);
|
||||
sctp_assoc_t get_existing_cuup_for_ue(const gNB_RRC_INST *rrc, const gNB_RRC_UE_t *ue);
|
||||
bool ue_associated_to_cuup(const gNB_RRC_UE_t *ue);
|
||||
sctp_assoc_t get_existing_cuup_for_ue(const gNB_RRC_UE_t *ue);
|
||||
sctp_assoc_t get_new_cuup_for_ue(const gNB_RRC_INST *rrc, const gNB_RRC_UE_t *ue, int sst, int sd);
|
||||
int rrc_gNB_process_e1_setup_req(sctp_assoc_t assoc_id, const e1ap_setup_req_t *req);
|
||||
bool is_cuup_associated(gNB_RRC_INST *rrc);
|
||||
|
||||
/* Process indication of E1 connection loss on CU-CP */
|
||||
void rrc_gNB_process_e1_lost_connection(gNB_RRC_INST *rrc, e1ap_lost_connection_t *lc, sctp_assoc_t assoc_id);
|
||||
void rrc_gNB_process_e1_lost_connection(gNB_RRC_INST *rrc, sctp_assoc_t assoc_id);
|
||||
|
||||
void bearer_context_setup_direct(e1ap_bearer_setup_req_t *req,
|
||||
instance_t instance);
|
||||
@@ -91,7 +91,7 @@ void rrc_gNB_generate_UeContextModificationRequest(const gNB_RRC_INST *rrc,
|
||||
|
||||
void free_RRCReconfiguration_params(nr_rrc_reconfig_param_t params);
|
||||
|
||||
byte_array_t rrc_gNB_encode_RRCReconfiguration(gNB_RRC_INST *rrc, gNB_RRC_UE_t *UE, nr_rrc_reconfig_param_t params);
|
||||
byte_array_t rrc_gNB_encode_RRCReconfiguration(gNB_RRC_UE_t *UE, nr_rrc_reconfig_param_t params);
|
||||
|
||||
nr_rrc_reconfig_param_t get_RRCReconfiguration_params(gNB_RRC_INST *rrc, gNB_RRC_UE_t *UE, uint8_t srb_reest_bitmap, bool drb_reestablish);
|
||||
|
||||
|
||||
+38
-35
@@ -222,6 +222,9 @@ const NR_RedCapParameters_r17_t *get_redcapparam_r17(NR_UE_NR_Capability_t *UE_C
|
||||
|
||||
static void rrc_deliver_ue_ctxt_release_cmd(void *deliver_pdu_data, ue_id_t ue_id, int srb_id, char *buf, int size, int sdu_id)
|
||||
{
|
||||
UNUSED(ue_id);
|
||||
UNUSED(srb_id);
|
||||
UNUSED(sdu_id);
|
||||
DevAssert(deliver_pdu_data != NULL);
|
||||
deliver_ue_ctxt_release_data_t *data = deliver_pdu_data;
|
||||
byte_array_t rrc_cont = {.buf = (uint8_t *)buf, .len = size};
|
||||
@@ -278,8 +281,11 @@ typedef struct deliver_dl_rrc_message_data_s {
|
||||
f1ap_dl_rrc_message_t *dl_rrc;
|
||||
sctp_assoc_t assoc_id;
|
||||
} deliver_dl_rrc_message_data_t;
|
||||
|
||||
static void rrc_deliver_dl_rrc_message(void *deliver_pdu_data, ue_id_t ue_id, int srb_id, char *buf, int size, int sdu_id)
|
||||
{
|
||||
UNUSED(ue_id);
|
||||
UNUSED(sdu_id);
|
||||
DevAssert(deliver_pdu_data != NULL);
|
||||
deliver_dl_rrc_message_data_t *data = (deliver_dl_rrc_message_data_t *)deliver_pdu_data;
|
||||
data->dl_rrc->rrc_container = (uint8_t *)buf;
|
||||
@@ -310,6 +316,8 @@ static void nr_rrc_transfer_protected_rrc_message(const gNB_RRC_INST *rrc,
|
||||
|
||||
#ifdef E2_AGENT
|
||||
E2_AGENT_SIGNAL_DL_DCCH_RRC_MSG(buffer, size, message_id);
|
||||
#else
|
||||
UNUSED(message_id);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -552,7 +560,6 @@ static f1ap_ue_context_setup_req_t rrc_fill_f1_ue_context_setup(gNB_RRC_UE_t *ue
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
static void rrc_gNB_generate_RRCSetup(instance_t instance,
|
||||
rnti_t rnti,
|
||||
rrc_gNB_ue_context_t *const ue_context_pP,
|
||||
const uint8_t *masterCellGroup,
|
||||
int masterCellGroup_len)
|
||||
@@ -760,7 +767,6 @@ NR_MeasConfig_t *nr_rrc_get_measconfig(const gNB_RRC_INST *rrc, uint64_t nr_cell
|
||||
seq_arr_init(&neigh_seq, sizeof(nr_neighbour_cell_t));
|
||||
|
||||
// Get cell info from the cell container
|
||||
int scs = cell->info.mode == NR_MODE_TDD ? cell->info.tdd.dlul.scs : cell->info.fdd.dl.scs;
|
||||
int band = cell->info.mode == NR_MODE_TDD ? cell->info.tdd.dlul.band : cell->info.fdd.dl.band;
|
||||
|
||||
const NR_MeasTimingList_t *mtlist = cell->mtc->criticalExtensions.choice.c1->choice.measTimingConf->measTiming;
|
||||
@@ -815,7 +821,7 @@ NR_MeasConfig_t *nr_rrc_get_measconfig(const gNB_RRC_INST *rrc, uint64_t nr_cell
|
||||
if (rrc->measurementConfiguration.a2_event)
|
||||
rc_A2 = prepare_a2_event_report(rrc->measurementConfiguration.a2_event);
|
||||
|
||||
NR_MeasConfig_t *result = get_MeasConfig(mt, band, scs, cell->info.pci, rc_PER, rc_A2, &rc_A3_seq, &neigh_seq, neigh_a3_id);
|
||||
NR_MeasConfig_t *result = get_MeasConfig(mt, band, cell->info.pci, rc_PER, rc_A2, &rc_A3_seq, &neigh_seq, neigh_a3_id);
|
||||
|
||||
// Clean up sequence arrays
|
||||
seq_arr_free(&rc_A3_seq, NULL);
|
||||
@@ -885,7 +891,7 @@ nr_rrc_reconfig_param_t get_RRCReconfiguration_params(gNB_RRC_INST *rrc, gNB_RRC
|
||||
return params;
|
||||
}
|
||||
|
||||
byte_array_t rrc_gNB_encode_RRCReconfiguration(gNB_RRC_INST *rrc, gNB_RRC_UE_t *UE, nr_rrc_reconfig_param_t params)
|
||||
byte_array_t rrc_gNB_encode_RRCReconfiguration(gNB_RRC_UE_t *UE, nr_rrc_reconfig_param_t params)
|
||||
{
|
||||
byte_array_t msg = do_RRCReconfiguration(¶ms);
|
||||
if (msg.len <= 0) {
|
||||
@@ -931,7 +937,7 @@ static void rrc_gNB_generate_dedicatedRRCReconfiguration(gNB_RRC_INST *rrc, gNB_
|
||||
ue_p->xids[params.transaction_id] = params.n_drb_rel > 0 ? RRC_PDUSESSION_RELEASE : RRC_PDUSESSION_ESTABLISH;
|
||||
}
|
||||
|
||||
byte_array_t msg = rrc_gNB_encode_RRCReconfiguration(rrc, ue_p, params);
|
||||
byte_array_t msg = rrc_gNB_encode_RRCReconfiguration(ue_p, params);
|
||||
if (msg.len <= 0) {
|
||||
LOG_E(NR_RRC,
|
||||
"UE %d: Failed to generate RRCReconfiguration%s\n",
|
||||
@@ -1139,7 +1145,7 @@ static void cuup_notify_reestablishment(gNB_RRC_INST *rrc, gNB_RRC_UE_t *ue_p)
|
||||
.gNB_cu_up_ue_id = ue_p->rrc_ue_id,
|
||||
};
|
||||
// Quit re-establishment notification if no CU-UP is associated
|
||||
if (!is_cuup_associated(rrc) || !ue_associated_to_cuup(rrc, ue_p)) {
|
||||
if (!is_cuup_associated(rrc) || !ue_associated_to_cuup(ue_p)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1159,7 +1165,7 @@ static void cuup_notify_reestablishment(gNB_RRC_INST *rrc, gNB_RRC_UE_t *ue_p)
|
||||
fill_security_info(rrc, ue_p, req.secInfo);
|
||||
|
||||
/* Send E1 Bearer Context Modification Request (3GPP TS 38.463) */
|
||||
sctp_assoc_t assoc_id = get_existing_cuup_for_ue(rrc, ue_p);
|
||||
sctp_assoc_t assoc_id = get_existing_cuup_for_ue(ue_p);
|
||||
rrc->cucp_cuup.bearer_context_mod(assoc_id, &req);
|
||||
free_e1ap_context_mod_request(&req);
|
||||
}
|
||||
@@ -1250,10 +1256,7 @@ static void rrc_gNB_generate_RRCReestablishment(rrc_gNB_ue_context_t *ue_context
|
||||
}
|
||||
|
||||
/// @brief Function tha processes RRCReestablishmentComplete message sent by the UE, after RRCReestasblishment request.
|
||||
static void rrc_gNB_process_RRCReestablishmentComplete(gNB_RRC_INST *rrc,
|
||||
gNB_RRC_UE_t *ue_p,
|
||||
const uint8_t xid,
|
||||
const sctp_assoc_t assoc_id)
|
||||
static void rrc_gNB_process_RRCReestablishmentComplete(gNB_RRC_INST *rrc, gNB_RRC_UE_t *ue_p, const uint8_t xid)
|
||||
{
|
||||
LOG_I(NR_RRC, "UE %d Processing NR_RRCReestablishmentComplete from UE\n", ue_p->rrc_ue_id);
|
||||
|
||||
@@ -1295,7 +1298,7 @@ static void rrc_gNB_process_RRCReestablishmentComplete(gNB_RRC_INST *rrc,
|
||||
}
|
||||
}
|
||||
|
||||
int nr_rrc_reconfiguration_req(gNB_RRC_INST *rrc, gNB_RRC_UE_t *ue_p, const int dl_bwp_id, const int ul_bwp_id)
|
||||
int nr_rrc_reconfiguration_req(gNB_RRC_INST *rrc, gNB_RRC_UE_t *ue_p)
|
||||
{
|
||||
uint8_t xid = rrc_gNB_get_next_transaction_identifier(rrc->module_id);
|
||||
ue_p->xids[xid] = RRC_DEDICATED_RECONF;
|
||||
@@ -1406,7 +1409,7 @@ static void rrc_handle_RRCSetupRequest(gNB_RRC_INST *rrc,
|
||||
UE->ongoing_reconfiguration = false;
|
||||
UE->measConfig = nr_rrc_get_measconfig(rrc, msg->nr_cellid);
|
||||
activate_srb(UE, 1);
|
||||
rrc_gNB_generate_RRCSetup(0, msg->crnti, ue_context_p, msg->du2cu_rrc_container, msg->du2cu_rrc_container_length);
|
||||
rrc_gNB_generate_RRCSetup(0, ue_context_p, msg->du2cu_rrc_container, msg->du2cu_rrc_container_length);
|
||||
}
|
||||
|
||||
static const char *get_reestab_cause(NR_ReestablishmentCause_t c)
|
||||
@@ -1672,7 +1675,7 @@ fallback_rrc_setup:
|
||||
activate_srb(&new->ue_context, 1);
|
||||
added = rrc_update_ue_pcell(&new->ue_context, current_cell);
|
||||
DevAssert(added);
|
||||
rrc_gNB_generate_RRCSetup(0, msg->crnti, new, msg->du2cu_rrc_container, msg->du2cu_rrc_container_length);
|
||||
rrc_gNB_generate_RRCSetup(0, new, msg->du2cu_rrc_container, msg->du2cu_rrc_container_length);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1792,7 +1795,7 @@ static void process_Event_Based_Measurement_Report(gNB_RRC_INST *rrc,
|
||||
// UE can send multiple neighbour cells A3 event report in 1 Meas Report. So, we need to find the best neighbour
|
||||
best_rsrp = neighbourCellRSRP;
|
||||
LOG_I(NR_RRC, "HO LOG: Serving Cell RSRP: %d - Best Neighbor RSRP: %d ! Trigger N2 HO\n", servingCellRSRP, best_rsrp);
|
||||
nr_rrc_trigger_n2_ho(rrc, ue, scell_pci, neighbour);
|
||||
nr_rrc_trigger_n2_ho(rrc, ue, neighbour);
|
||||
}
|
||||
LOG_D(NR_RRC, "HO LOG: Trigger N2 HO for the neighbour gnb: %u cell: %lu\n", neighbour->gNB_ID, neighbour->nrcell_id);
|
||||
}
|
||||
@@ -1869,9 +1872,7 @@ static void rrc_gNB_process_MeasurementReport(gNB_RRC_INST *rrc, gNB_RRC_UE_t *U
|
||||
|
||||
static void handle_rrcReestablishmentComplete(gNB_RRC_INST *rrc,
|
||||
gNB_RRC_UE_t *UE,
|
||||
const uint32_t gNB_DU_ue_id,
|
||||
const NR_RRCReestablishmentComplete_t *cplt,
|
||||
const sctp_assoc_t assoc_id)
|
||||
const NR_RRCReestablishmentComplete_t *cplt)
|
||||
{
|
||||
NR_RRCReestablishmentComplete__criticalExtensions_PR p = cplt->criticalExtensions.present;
|
||||
if (p != NR_RRCReestablishmentComplete__criticalExtensions_PR_rrcReestablishmentComplete) {
|
||||
@@ -1879,7 +1880,7 @@ static void handle_rrcReestablishmentComplete(gNB_RRC_INST *rrc,
|
||||
return;
|
||||
}
|
||||
|
||||
rrc_gNB_process_RRCReestablishmentComplete(rrc, UE, cplt->rrc_TransactionIdentifier, assoc_id);
|
||||
rrc_gNB_process_RRCReestablishmentComplete(rrc, UE, cplt->rrc_TransactionIdentifier);
|
||||
|
||||
UE->ue_reestablishment_counter++;
|
||||
}
|
||||
@@ -2123,7 +2124,7 @@ static void handle_rrcReconfigurationComplete(gNB_RRC_INST *rrc, gNB_RRC_UE_t *U
|
||||
free(UE->initial_pdus);
|
||||
UE->initial_pdus = NULL;
|
||||
} else if (seq_arr_size(&UE->pduSessions) > 0)
|
||||
rrc_gNB_send_NGAP_PDUSESSION_SETUP_RESP(rrc, UE, xid);
|
||||
rrc_gNB_send_NGAP_PDUSESSION_SETUP_RESP(rrc, UE);
|
||||
else
|
||||
LOG_W(NR_RRC,
|
||||
"UE %d: RRC Reconfiguration Complete for PDU session establishment, but no PDU sessions were setup\n",
|
||||
@@ -2188,7 +2189,7 @@ static void rrc_gNB_generate_UECapabilityEnquiry(gNB_RRC_INST *rrc, gNB_RRC_UE_t
|
||||
nr_rrc_transfer_protected_rrc_message(rrc, ue, DL_SCH_LCID_DCCH, msg_id, buffer, size);
|
||||
}
|
||||
|
||||
static int rrc_gNB_decode_dcch(gNB_RRC_INST *rrc, const f1ap_ul_rrc_message_t *msg, const sctp_assoc_t assoc_id)
|
||||
static int rrc_gNB_decode_dcch(gNB_RRC_INST *rrc, const f1ap_ul_rrc_message_t *msg)
|
||||
{
|
||||
/* we look up by CU UE ID! Do NOT change back to RNTI! */
|
||||
rrc_gNB_ue_context_t *ue_context_p = rrc_gNB_get_ue_context(rrc, msg->gNB_CU_ue_id);
|
||||
@@ -2294,7 +2295,7 @@ static int rrc_gNB_decode_dcch(gNB_RRC_INST *rrc, const f1ap_ul_rrc_message_t *m
|
||||
case NR_UL_DCCH_MessageType__c1_PR_rrcReestablishmentComplete:
|
||||
LOG_UE_UL_EVENT(UE, "Received RRCReestablishmentComplete\n");
|
||||
const NR_RRCReestablishmentComplete_t *rc = ul_dcch_msg->message.choice.c1->choice.rrcReestablishmentComplete;
|
||||
handle_rrcReestablishmentComplete(rrc, UE, msg->gNB_DU_ue_id, rc, assoc_id);
|
||||
handle_rrcReestablishmentComplete(rrc, UE, rc);
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -2454,7 +2455,7 @@ static void e1_send_bearer_modification_request(gNB_RRC_INST *rrc, gNB_RRC_UE_t
|
||||
req->secInfo = malloc_or_fail(sizeof(*req->secInfo));
|
||||
fill_security_info(rrc, UE, req->secInfo);
|
||||
|
||||
sctp_assoc_t assoc_id = get_existing_cuup_for_ue(rrc, UE);
|
||||
sctp_assoc_t assoc_id = get_existing_cuup_for_ue(UE);
|
||||
rrc->cucp_cuup.bearer_context_mod(assoc_id, req);
|
||||
}
|
||||
|
||||
@@ -2608,7 +2609,7 @@ static void rrc_CU_process_ue_context_setup_response(MessageDef *msg_p, instance
|
||||
}
|
||||
|
||||
if (!IS_SA_MODE(get_softmodem_params())) {
|
||||
rrc_add_nsa_user_resp(rrc, UE, resp);
|
||||
rrc_add_nsa_user_resp(UE, resp);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2805,7 +2806,7 @@ static void rrc_CU_process_ue_context_modification_response(MessageDef *msg_p, i
|
||||
DevAssert(source_ctx->old_rnti == UE->rnti);
|
||||
nr_rrc_apply_target_context(UE);
|
||||
/* Update cell association after handover */
|
||||
if (!nr_rrc_update_cell_assoc_after_ho(rrc, UE)) {
|
||||
if (!nr_rrc_update_cell_assoc_after_ho(UE)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -2883,7 +2884,7 @@ static void rrc_CU_process_ue_modification_required(MessageDef *msg_p, instance_
|
||||
|
||||
/* trigger reconfiguration */
|
||||
if (!UE->ongoing_reconfiguration)
|
||||
nr_rrc_reconfiguration_req(rrc, UE, 0, 0);
|
||||
nr_rrc_reconfiguration_req(rrc, UE);
|
||||
return;
|
||||
}
|
||||
LOG_W(RRC,
|
||||
@@ -3038,7 +3039,7 @@ static int fill_drb_to_be_setup_from_e1_resp(const gNB_RRC_INST *rrc,
|
||||
/**
|
||||
* @brief E1AP Bearer Context Setup Response processing on CU-CP
|
||||
*/
|
||||
void rrc_gNB_process_e1_bearer_context_setup_resp(e1ap_bearer_setup_resp_t *resp, instance_t instance)
|
||||
static void rrc_gNB_process_e1_bearer_context_setup_resp(e1ap_bearer_setup_resp_t *resp)
|
||||
{
|
||||
gNB_RRC_INST *rrc = RC.nrrrc[0];
|
||||
rrc_gNB_ue_context_t *ue_context_p = rrc_gNB_get_ue_context(rrc, resp->gNB_cu_cp_ue_id);
|
||||
@@ -3317,10 +3318,12 @@ static bool write_rrc_stats(const gNB_RRC_INST *rrc)
|
||||
return true;
|
||||
}
|
||||
|
||||
void *rrc_gnb_task(void *args_p) {
|
||||
void *rrc_gnb_task(void *args_p)
|
||||
{
|
||||
UNUSED(args_p);
|
||||
MessageDef *msg_p;
|
||||
instance_t instance;
|
||||
int result;
|
||||
instance_t instance;
|
||||
int result;
|
||||
|
||||
long stats_timer_id = 1;
|
||||
if (!IS_SOFTMODEM_NOSTATS) {
|
||||
@@ -3371,12 +3374,12 @@ void *rrc_gnb_task(void *args_p) {
|
||||
/* Messages from PDCP */
|
||||
/* From DU -> CU */
|
||||
case F1AP_UL_RRC_MESSAGE:
|
||||
rrc_gNB_decode_dcch(RC.nrrrc[instance], &F1AP_UL_RRC_MESSAGE(msg_p), msg_p->ittiMsgHeader.originInstance);
|
||||
rrc_gNB_decode_dcch(RC.nrrrc[instance], &F1AP_UL_RRC_MESSAGE(msg_p));
|
||||
free_ul_rrc_message_transfer(&F1AP_UL_RRC_MESSAGE(msg_p));
|
||||
break;
|
||||
|
||||
case NGAP_DOWNLINK_NAS:
|
||||
rrc_gNB_process_NGAP_DOWNLINK_NAS(msg_p, instance, &rrc_gNB_mui);
|
||||
rrc_gNB_process_NGAP_DOWNLINK_NAS(msg_p, instance);
|
||||
break;
|
||||
|
||||
case NGAP_PDUSESSION_SETUP_REQ:
|
||||
@@ -3482,7 +3485,7 @@ void *rrc_gnb_task(void *args_p) {
|
||||
break;
|
||||
|
||||
case E1AP_BEARER_CONTEXT_SETUP_RESP:
|
||||
rrc_gNB_process_e1_bearer_context_setup_resp(&E1AP_BEARER_CONTEXT_SETUP_RESP(msg_p), instance);
|
||||
rrc_gNB_process_e1_bearer_context_setup_resp(&E1AP_BEARER_CONTEXT_SETUP_RESP(msg_p));
|
||||
free_e1ap_context_setup_response(&E1AP_BEARER_CONTEXT_SETUP_RESP(msg_p));
|
||||
break;
|
||||
|
||||
@@ -3505,7 +3508,7 @@ void *rrc_gnb_task(void *args_p) {
|
||||
break;
|
||||
|
||||
case E1AP_LOST_CONNECTION: /* CUCP */
|
||||
rrc_gNB_process_e1_lost_connection(RC.nrrrc[0], &E1AP_LOST_CONNECTION(msg_p), msg_p->ittiMsgHeader.originInstance);
|
||||
rrc_gNB_process_e1_lost_connection(RC.nrrrc[0], msg_p->ittiMsgHeader.originInstance);
|
||||
break;
|
||||
|
||||
case NGAP_PAGING_IND:
|
||||
@@ -3513,7 +3516,7 @@ void *rrc_gnb_task(void *args_p) {
|
||||
break;
|
||||
|
||||
case NGAP_HANDOVER_REQUEST:
|
||||
rrc_gNB_process_Handover_Request(RC.nrrrc[instance], instance, &NGAP_HANDOVER_REQUEST(msg_p));
|
||||
rrc_gNB_process_Handover_Request(RC.nrrrc[instance], &NGAP_HANDOVER_REQUEST(msg_p));
|
||||
rrc_gNB_free_Handover_Request(&NGAP_HANDOVER_REQUEST(msg_p)); // Free transfered NG message
|
||||
break;
|
||||
|
||||
|
||||
@@ -472,9 +472,7 @@ int rrc_gNB_process_NGAP_INITIAL_CONTEXT_SETUP_REQ(MessageDef *msg_p, instance_t
|
||||
/* Can not associate this message to an UE index, send a failure to NGAP and discard it! */
|
||||
LOG_W(NR_RRC, "[gNB %ld] In NGAP_INITIAL_CONTEXT_SETUP_REQ: unknown UE from NGAP ids (%u)\n", instance, req->gNB_ue_ngap_id);
|
||||
ngap_cause_t cause = { .type = NGAP_CAUSE_RADIO_NETWORK, .value = NGAP_CAUSE_RADIO_NETWORK_UNKNOWN_LOCAL_UE_NGAP_ID};
|
||||
rrc_gNB_send_NGAP_INITIAL_CONTEXT_SETUP_FAIL(req->gNB_ue_ngap_id,
|
||||
NULL,
|
||||
cause);
|
||||
rrc_gNB_send_NGAP_INITIAL_CONTEXT_SETUP_FAIL(req->gNB_ue_ngap_id, cause);
|
||||
return (-1);
|
||||
}
|
||||
gNB_RRC_UE_t *UE = &ue_context_p->ue_context;
|
||||
@@ -624,9 +622,7 @@ void rrc_gNB_send_NGAP_INITIAL_CONTEXT_SETUP_RESP(gNB_RRC_INST *rrc, gNB_RRC_UE_
|
||||
itti_send_msg_to_task (TASK_NGAP, rrc->module_id, msg_p);
|
||||
}
|
||||
|
||||
void rrc_gNB_send_NGAP_INITIAL_CONTEXT_SETUP_FAIL(uint32_t gnb,
|
||||
const rrc_gNB_ue_context_t *const ue_context_pP,
|
||||
const ngap_cause_t causeP)
|
||||
void rrc_gNB_send_NGAP_INITIAL_CONTEXT_SETUP_FAIL(uint32_t gnb, const ngap_cause_t causeP)
|
||||
{
|
||||
MessageDef *msg_p = itti_alloc_new_message(TASK_RRC_GNB, 0, NGAP_INITIAL_CONTEXT_SETUP_FAIL);
|
||||
ngap_initial_context_setup_fail_t *fail = &NGAP_INITIAL_CONTEXT_SETUP_FAIL(msg_p);
|
||||
@@ -727,7 +723,7 @@ static void set_UE_security_algos(const gNB_RRC_INST *rrc, gNB_RRC_UE_t *UE, con
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
int rrc_gNB_process_NGAP_DOWNLINK_NAS(MessageDef *msg_p, instance_t instance, mui_t *rrc_gNB_mui)
|
||||
int rrc_gNB_process_NGAP_DOWNLINK_NAS(MessageDef *msg_p, instance_t instance)
|
||||
//------------------------------------------------------------------------------
|
||||
{
|
||||
ngap_downlink_nas_t *req = &NGAP_DOWNLINK_NAS(msg_p);
|
||||
@@ -785,7 +781,7 @@ void rrc_gNB_send_NGAP_UPLINK_NAS(gNB_RRC_INST *rrc, gNB_RRC_UE_t *UE, const NR_
|
||||
itti_send_msg_to_task(TASK_NGAP, rrc->module_id, msg_p);
|
||||
}
|
||||
|
||||
void rrc_gNB_send_NGAP_PDUSESSION_SETUP_RESP(gNB_RRC_INST *rrc, gNB_RRC_UE_t *UE, uint8_t xid)
|
||||
void rrc_gNB_send_NGAP_PDUSESSION_SETUP_RESP(gNB_RRC_INST *rrc, gNB_RRC_UE_t *UE)
|
||||
{
|
||||
MessageDef *msg_p;
|
||||
int pdu_sessions_done = 0;
|
||||
@@ -1127,7 +1123,7 @@ void rrc_gNB_send_NGAP_HANDOVER_FAILURE(gNB_RRC_INST *rrc, ngap_handover_failure
|
||||
}
|
||||
|
||||
/** @brief Process NG Handover Request message (8.4.2.2 3GPP TS 38.413) */
|
||||
int rrc_gNB_process_Handover_Request(gNB_RRC_INST *rrc, instance_t instance, ngap_handover_request_t *msg)
|
||||
int rrc_gNB_process_Handover_Request(gNB_RRC_INST *rrc, ngap_handover_request_t *msg)
|
||||
{
|
||||
// Check if UE context already exists for this AMF UE NGAP ID
|
||||
rrc_gNB_ue_context_t *existing_ue_context = rrc_gNB_get_ue_context_by_amf_ue_ngap_id(rrc, msg->amf_ue_ngap_id);
|
||||
@@ -1380,8 +1376,8 @@ int rrc_gNB_process_NGAP_UE_CONTEXT_RELEASE_COMMAND(MessageDef *msg_p, instance_
|
||||
|
||||
/* a UE might not be associated to a CU-UP if it never requested a PDU
|
||||
* session (intentionally, or because of erros) */
|
||||
if (ue_associated_to_cuup(rrc, UE)) {
|
||||
sctp_assoc_t assoc_id = get_existing_cuup_for_ue(rrc, UE);
|
||||
if (ue_associated_to_cuup(UE)) {
|
||||
sctp_assoc_t assoc_id = get_existing_cuup_for_ue(UE);
|
||||
e1ap_cause_t cause = {.type = E1AP_CAUSE_RADIO_NETWORK, .value = E1AP_RADIO_CAUSE_NORMAL_RELEASE};
|
||||
e1ap_bearer_release_cmd_t cmd = {
|
||||
.gNB_cu_cp_ue_id = UE->rrc_ue_id,
|
||||
@@ -1619,7 +1615,7 @@ int rrc_gNB_process_NGAP_PDUSESSION_RELEASE_COMMAND(ngap_pdusession_release_comm
|
||||
if (req.numPDUSessionsRem == 0) {
|
||||
LOG_E(NR_RRC, "Received NG PDU Session Release Command but no PDU Sessions to release\n");
|
||||
return -1;
|
||||
} else if (!ue_associated_to_cuup(rrc, UE)) {
|
||||
} else if (!ue_associated_to_cuup(UE)) {
|
||||
LOG_E(NR_RRC, "UE %d is not associated to CU-UP\n", UE->rrc_ue_id);
|
||||
// TODO handle, e.g., only trigger F1 release
|
||||
return 0;
|
||||
@@ -1631,7 +1627,7 @@ int rrc_gNB_process_NGAP_PDUSESSION_RELEASE_COMMAND(ngap_pdusession_release_comm
|
||||
LOG_I(NR_RRC, "Send F1 Bearer Context Modification Request with PDU Session release \n");
|
||||
req.gNB_cu_cp_ue_id = UE->rrc_ue_id;
|
||||
req.gNB_cu_up_ue_id = UE->rrc_ue_id;
|
||||
sctp_assoc_t assoc_id = get_existing_cuup_for_ue(rrc, UE);
|
||||
sctp_assoc_t assoc_id = get_existing_cuup_for_ue(UE);
|
||||
rrc->cucp_cuup.bearer_context_mod(assoc_id, &req);
|
||||
}
|
||||
init_delayed_action(&UE->delayed_action);
|
||||
|
||||
@@ -26,15 +26,13 @@ int rrc_gNB_process_NGAP_INITIAL_CONTEXT_SETUP_REQ(MessageDef *msg_p, instance_t
|
||||
|
||||
void rrc_gNB_send_NGAP_INITIAL_CONTEXT_SETUP_RESP(gNB_RRC_INST *rrc, gNB_RRC_UE_t *UE);
|
||||
|
||||
void rrc_gNB_send_NGAP_INITIAL_CONTEXT_SETUP_FAIL(uint32_t gnb,
|
||||
const rrc_gNB_ue_context_t *const ue_context_pP,
|
||||
const ngap_cause_t causeP);
|
||||
void rrc_gNB_send_NGAP_INITIAL_CONTEXT_SETUP_FAIL(uint32_t gnb, const ngap_cause_t causeP);
|
||||
|
||||
int rrc_gNB_process_NGAP_DOWNLINK_NAS(MessageDef *msg_p, instance_t instance, mui_t *rrc_gNB_mui);
|
||||
int rrc_gNB_process_NGAP_DOWNLINK_NAS(MessageDef *msg_p, instance_t instance);
|
||||
|
||||
void rrc_gNB_send_NGAP_UPLINK_NAS(gNB_RRC_INST *rrc, gNB_RRC_UE_t *UE, const NR_UL_DCCH_Message_t *const ul_dcch_msg);
|
||||
|
||||
void rrc_gNB_send_NGAP_PDUSESSION_SETUP_RESP(gNB_RRC_INST *rrc, gNB_RRC_UE_t *UE, uint8_t xid);
|
||||
void rrc_gNB_send_NGAP_PDUSESSION_SETUP_RESP(gNB_RRC_INST *rrc, gNB_RRC_UE_t *UE);
|
||||
|
||||
void rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ(MessageDef *msg_p, instance_t instance);
|
||||
|
||||
@@ -71,7 +69,7 @@ void rrc_gNB_send_NGAP_HANDOVER_REQUIRED(gNB_RRC_INST *rrc,
|
||||
|
||||
void rrc_gNB_send_NGAP_HANDOVER_FAILURE(gNB_RRC_INST *rrc, ngap_handover_failure_t *msg);
|
||||
|
||||
int rrc_gNB_process_Handover_Request(gNB_RRC_INST *rrc, instance_t instance, ngap_handover_request_t *msg);
|
||||
int rrc_gNB_process_Handover_Request(gNB_RRC_INST *rrc, ngap_handover_request_t *msg);
|
||||
void rrc_gNB_free_Handover_Request(ngap_handover_request_t *msg);
|
||||
|
||||
void rrc_gNB_send_NGAP_HANDOVER_REQUEST_ACKNOWLEDGE(gNB_RRC_INST *rrc, gNB_RRC_UE_t *UE, byte_array_t ho_command);
|
||||
|
||||
@@ -90,13 +90,13 @@ bool is_cuup_associated(gNB_RRC_INST *rrc)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ue_associated_to_cuup(const gNB_RRC_INST *rrc, const gNB_RRC_UE_t *ue)
|
||||
bool ue_associated_to_cuup(const gNB_RRC_UE_t *ue)
|
||||
{
|
||||
f1_ue_data_t ue_data = cu_get_f1_ue_data(ue->rrc_ue_id);
|
||||
return ue_data.e1_assoc_id != 0;
|
||||
}
|
||||
|
||||
sctp_assoc_t get_existing_cuup_for_ue(const gNB_RRC_INST *rrc, const gNB_RRC_UE_t *ue)
|
||||
sctp_assoc_t get_existing_cuup_for_ue(const gNB_RRC_UE_t *ue)
|
||||
{
|
||||
f1_ue_data_t ue_data = cu_get_f1_ue_data(ue->rrc_ue_id);
|
||||
AssertFatal(ue_data.e1_assoc_id != 0, "UE %d should be associated to CU-UP, but is not\n", ue->rrc_ue_id);
|
||||
@@ -178,7 +178,7 @@ static bool has_assoc_id(const void *vval, const void *vit)
|
||||
* that are in the process of connecting or that are on another DU might be
|
||||
* affected by that reset procedure as well; we suppose they will connect later
|
||||
* again. */
|
||||
static void remove_unassociated_e1_connections(gNB_RRC_INST *rrc, sctp_assoc_t e1_assoc_id)
|
||||
static void remove_unassociated_e1_connections(gNB_RRC_INST *rrc)
|
||||
{
|
||||
seq_arr_t affected_du;
|
||||
seq_arr_init(&affected_du, sizeof(sctp_assoc_t));
|
||||
@@ -189,7 +189,7 @@ static void remove_unassociated_e1_connections(gNB_RRC_INST *rrc, sctp_assoc_t e
|
||||
RB_FOREACH(ue_context_p, rrc_nr_ue_tree_s, &rrc->rrc_ue_head) {
|
||||
gNB_RRC_UE_t *UE = &ue_context_p->ue_context;
|
||||
uint32_t ue_id = UE->rrc_ue_id;
|
||||
if (ue_associated_to_cuup(rrc, UE))
|
||||
if (ue_associated_to_cuup(UE))
|
||||
continue;
|
||||
f1_ue_data_t ue_data = cu_get_f1_ue_data(ue_id);
|
||||
elm_arr_t ret = find_if(&affected_du, &ue_data.du_assoc_id, has_assoc_id);
|
||||
@@ -268,7 +268,7 @@ int rrc_gNB_process_e1_setup_req(sctp_assoc_t assoc_id, const e1ap_setup_req_t *
|
||||
RB_INSERT(rrc_cuup_tree, &rrc->cuups, cuup);
|
||||
rrc->num_cuups++;
|
||||
|
||||
remove_unassociated_e1_connections(rrc, assoc_id);
|
||||
remove_unassociated_e1_connections(rrc);
|
||||
|
||||
MessageDef *msg_p = itti_alloc_new_message(TASK_RRC_GNB, 0, E1AP_SETUP_RESP);
|
||||
msg_p->ittiMsgHeader.originInstance = assoc_id;
|
||||
@@ -300,7 +300,7 @@ static void invalidate_cuup_connections(gNB_RRC_INST *rrc, sctp_assoc_t e1_assoc
|
||||
/**
|
||||
* @brief RRC Processing of the indication of E1 connection loss on CU-CP
|
||||
*/
|
||||
void rrc_gNB_process_e1_lost_connection(gNB_RRC_INST *rrc, e1ap_lost_connection_t *lc, sctp_assoc_t assoc_id)
|
||||
void rrc_gNB_process_e1_lost_connection(gNB_RRC_INST *rrc, sctp_assoc_t assoc_id)
|
||||
{
|
||||
LOG_I(NR_RRC, "Received E1 connection loss indication on RRC\n");
|
||||
AssertFatal(assoc_id != 0, "illegal assoc_id == 0: should be -1 (monolithic) or >0 (split)\n");
|
||||
|
||||
@@ -154,6 +154,9 @@ typedef struct {
|
||||
|
||||
static void rrc_deliver_ue_ctxt_modif_req(void *deliver_pdu_data, ue_id_t ue_id, int srb_id, char *buf, int size, int sdu_id)
|
||||
{
|
||||
UNUSED(ue_id);
|
||||
UNUSED(srb_id);
|
||||
UNUSED(sdu_id);
|
||||
DevAssert(deliver_pdu_data != NULL);
|
||||
deliver_ue_ctxt_modification_data_t *data = deliver_pdu_data;
|
||||
byte_array_t ba = {.buf = (uint8_t *) buf, .len = size};
|
||||
@@ -199,7 +202,7 @@ static void nr_rrc_f1_ho_acknowledge(gNB_RRC_INST *rrc, gNB_RRC_UE_t *UE)
|
||||
* in NR, do not re-establish PDCP */
|
||||
nr_rrc_reconfig_param_t params = get_RRCReconfiguration_params(rrc, UE, (1 << SRB2), true);
|
||||
UE->xids[params.transaction_id] = RRC_DEDICATED_RECONF;
|
||||
byte_array_t buffer = rrc_gNB_encode_RRCReconfiguration(rrc, UE, params);
|
||||
byte_array_t buffer = rrc_gNB_encode_RRCReconfiguration(UE, params);
|
||||
free_RRCReconfiguration_params(params);
|
||||
if (!buffer.len) {
|
||||
LOG_E(NR_RRC, "UE %d: Failed to generate RRCReconfiguration\n", UE->rrc_ue_id);
|
||||
@@ -345,12 +348,12 @@ void nr_HO_F1_trigger_telnet(gNB_RRC_INST *rrc, uint32_t rrc_ue_id)
|
||||
/** @brief Generate the HandoverPreparationInformation to be carried
|
||||
* in the RRC Container (9.3.1.29 of 3GPP TS 38.413) of the Source
|
||||
* NG-RAN Node to Target NG-RAN Node Transparent Container IE */
|
||||
static byte_array_t rrc_gNB_generate_HandoverPreparationInformation(gNB_RRC_INST *rrc, gNB_RRC_UE_t *ue, int serving_pci)
|
||||
static byte_array_t rrc_gNB_generate_HandoverPreparationInformation(gNB_RRC_INST *rrc, gNB_RRC_UE_t *ue)
|
||||
{
|
||||
nr_rrc_reconfig_param_t params = get_RRCReconfiguration_params(rrc, ue, 0, false);
|
||||
params.ue_cap = ue->ue_cap_buffer;
|
||||
|
||||
byte_array_t hoPrepInfo = get_HandoverPreparationInformation(¶ms, serving_pci);
|
||||
byte_array_t hoPrepInfo = get_HandoverPreparationInformation(¶ms);
|
||||
free_RRCReconfiguration_params(params);
|
||||
|
||||
if (hoPrepInfo.len < 0) {
|
||||
@@ -415,7 +418,7 @@ static byte_array_t rrc_gNB_encode_HandoverCommand(gNB_RRC_UE_t *UE, gNB_RRC_INS
|
||||
* - Source absent (inter-CU): N2 or Xn handover (target CU created new UE
|
||||
* on Handover Request). This UE context has no serving cells yet; add
|
||||
* target cell as first PCell. */
|
||||
bool nr_rrc_update_cell_assoc_after_ho(gNB_RRC_INST *rrc, gNB_RRC_UE_t *UE)
|
||||
bool nr_rrc_update_cell_assoc_after_ho(gNB_RRC_UE_t *UE)
|
||||
{
|
||||
DevAssert(UE->ho_context);
|
||||
DevAssert(UE->ho_context->target);
|
||||
@@ -471,7 +474,7 @@ static void nr_rrc_n2_ho_acknowledge(gNB_RRC_INST *rrc, gNB_RRC_UE_t *UE)
|
||||
|
||||
/* Update cell association after handover */
|
||||
nr_ho_target_cu_t *target = UE->ho_context->target;
|
||||
if (!nr_rrc_update_cell_assoc_after_ho(rrc, UE)) {
|
||||
if (!nr_rrc_update_cell_assoc_after_ho(UE)) {
|
||||
ngap_handover_failure_t fail = {.amf_ue_ngap_id = UE->amf_ue_ngap_id,
|
||||
.cause.type = NGAP_CAUSE_RADIO_NETWORK,
|
||||
.cause.value = NGAP_CAUSE_RADIO_NETWORK_HO_FAILURE_IN_TARGET_5GC_NGRAN_NODE_OR_TARGET_SYSTEM};
|
||||
@@ -547,12 +550,9 @@ void nr_rrc_trigger_n2_ho_target(gNB_RRC_INST *rrc, gNB_RRC_UE_t *ue)
|
||||
/** @brief Trigger N2 handover on source gNB:
|
||||
* 1) Prepare RRC Container with HandoverPreparationInformation message
|
||||
* 2) send NGAP Handover Required message */
|
||||
void nr_rrc_trigger_n2_ho(gNB_RRC_INST *rrc,
|
||||
gNB_RRC_UE_t *ue,
|
||||
int serving_pci,
|
||||
const nr_neighbour_cell_t *neighbour_config)
|
||||
void nr_rrc_trigger_n2_ho(gNB_RRC_INST *rrc, gNB_RRC_UE_t *ue, const nr_neighbour_cell_t *neighbour_config)
|
||||
{
|
||||
byte_array_t hoPrepInfo = rrc_gNB_generate_HandoverPreparationInformation(rrc, ue, serving_pci);
|
||||
byte_array_t hoPrepInfo = rrc_gNB_generate_HandoverPreparationInformation(rrc, ue);
|
||||
if (hoPrepInfo.len < 0) {
|
||||
free_byte_array(hoPrepInfo);
|
||||
LOG_E(NR_RRC, "Failed to trigger N2 handover on source gNB for UE %x\n", ue->rrc_ue_id);
|
||||
@@ -614,7 +614,7 @@ void nr_HO_N2_trigger_telnet(gNB_RRC_INST *rrc, uint32_t neighbour_pci, uint32_t
|
||||
.plmn = pcell->info.plmn,
|
||||
.subcarrierSpacing = pcell->info.mode == NR_MODE_TDD ? pcell->info.tdd.dlul.scs : pcell->info.fdd.dl.scs,
|
||||
};
|
||||
nr_rrc_trigger_n2_ho(rrc, UE, neighbour_pci, &neighbourConfig);
|
||||
nr_rrc_trigger_n2_ho(rrc, UE, &neighbourConfig);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -635,7 +635,7 @@ void nr_HO_N2_trigger_telnet(gNB_RRC_INST *rrc, uint32_t neighbour_pci, uint32_t
|
||||
return;
|
||||
}
|
||||
|
||||
nr_rrc_trigger_n2_ho(rrc, UE, pcell->info.pci, neighbour);
|
||||
nr_rrc_trigger_n2_ho(rrc, UE, neighbour);
|
||||
}
|
||||
|
||||
// This function detects if there are at least two different ssbFrequency values, and if so, returns meas_timing_config;
|
||||
|
||||
@@ -85,10 +85,7 @@ void nr_rrc_trigger_f1_ho(gNB_RRC_INST *rrc,
|
||||
void nr_rrc_finalize_ho(gNB_RRC_UE_t *ue);
|
||||
void nr_rrc_n2_ho_failure(gNB_RRC_INST *rrc, uint32_t gnb_ue_id, ngap_handover_failure_t *msg);
|
||||
|
||||
void nr_rrc_trigger_n2_ho(gNB_RRC_INST *rrc,
|
||||
gNB_RRC_UE_t *ue,
|
||||
int serving_pci,
|
||||
const nr_neighbour_cell_t *neighbour_config);
|
||||
void nr_rrc_trigger_n2_ho(gNB_RRC_INST *rrc, gNB_RRC_UE_t *ue, const nr_neighbour_cell_t *neighbour_config);
|
||||
|
||||
void rrc_gNB_trigger_reconfiguration_for_handover(gNB_RRC_INST *rrc, gNB_RRC_UE_t *ue, uint8_t *rrc_reconf, int rrc_reconf_len);
|
||||
|
||||
@@ -98,6 +95,6 @@ byte_array_t *get_meas_timing_config(const NR_MeasurementTimingConfiguration_t *
|
||||
|
||||
void nr_rrc_apply_target_context(gNB_RRC_UE_t *UE);
|
||||
|
||||
bool nr_rrc_update_cell_assoc_after_ho(gNB_RRC_INST *rrc, gNB_RRC_UE_t *UE);
|
||||
bool nr_rrc_update_cell_assoc_after_ho(gNB_RRC_UE_t *UE);
|
||||
|
||||
#endif /* RRC_GNB_MOBILITY_H_ */
|
||||
|
||||
@@ -435,7 +435,7 @@ static NR_CG_Config_t *generate_CG_Config(const NR_RRCReconfiguration_t *reconfi
|
||||
return cg_Config;
|
||||
}
|
||||
|
||||
void rrc_add_nsa_user_resp(gNB_RRC_INST *rrc, gNB_RRC_UE_t *UE, const f1ap_ue_context_setup_resp_t *resp)
|
||||
void rrc_add_nsa_user_resp(gNB_RRC_UE_t *UE, const f1ap_ue_context_setup_resp_t *resp)
|
||||
{
|
||||
DevAssert(resp->crnti != NULL);
|
||||
/* we did not fill any DU-related ID info in rrc_add_nsa_user() */
|
||||
|
||||
@@ -63,7 +63,11 @@ nr_rrc_qos_t *add_qos(seq_arr_t *qos, const pdusession_level_qos_parameter_t *in
|
||||
}
|
||||
|
||||
/** @brief Free QoS flows list items */
|
||||
static void free_qos(void *ptr) { /*nothing to do*/ }
|
||||
static void free_qos(void *ptr)
|
||||
{
|
||||
/*nothing to do*/
|
||||
UNUSED(ptr);
|
||||
}
|
||||
|
||||
/** @brief Free QoS flows list */
|
||||
static void free_rrc_qos_list(seq_arr_t *seq)
|
||||
@@ -233,6 +237,7 @@ drb_t *get_drb(seq_arr_t *seq, int id)
|
||||
void free_drb(void *ptr)
|
||||
{
|
||||
// do nothing
|
||||
UNUSED(ptr);
|
||||
}
|
||||
|
||||
rrc_pdu_session_param_t *find_pduSession_from_drbId(gNB_RRC_UE_t *ue, int drb_id)
|
||||
|
||||
@@ -33,12 +33,10 @@ void nr_mac_rrc_sync_ind(const module_id_t module_id, const frame_t frame, const
|
||||
}
|
||||
|
||||
void nr_mac_rrc_data_ind_ue(const module_id_t module_id,
|
||||
const int CC_id,
|
||||
const uint8_t gNB_index,
|
||||
const int hfn,
|
||||
const frame_t frame,
|
||||
const int slot,
|
||||
const rnti_t rnti,
|
||||
const uint32_t cellid,
|
||||
const long arfcn,
|
||||
const channel_t channel,
|
||||
|
||||
@@ -10,12 +10,10 @@ typedef uint32_t channel_t;
|
||||
#define _L2_INTERFACE_UE_H_
|
||||
void nr_mac_rrc_sync_ind(const module_id_t module_id, const frame_t frame, const bool in_sync);
|
||||
void nr_mac_rrc_data_ind_ue(const module_id_t module_id,
|
||||
const int CC_id,
|
||||
const uint8_t gNB_index,
|
||||
const int hfn,
|
||||
const frame_t frame,
|
||||
const int slot,
|
||||
const rnti_t rnti,
|
||||
const uint32_t cellid,
|
||||
const long arfcn,
|
||||
const channel_t channel,
|
||||
|
||||
@@ -2014,8 +2014,6 @@ static void nr_rrc_ue_decode_NR_BCCH_DL_SCH_Message(NR_UE_RRC_INST_t *rrc,
|
||||
const uint8_t gNB_index,
|
||||
uint8_t *const Sdu,
|
||||
const uint8_t Sdu_len,
|
||||
const uint8_t rsrq,
|
||||
const uint8_t rsrp,
|
||||
int hfn,
|
||||
int frame,
|
||||
int slot)
|
||||
@@ -3067,6 +3065,7 @@ static void nr_rrc_handle_meas_indication(NR_UE_RRC_INST_t *rrc, NRRrcMacMeasDat
|
||||
|
||||
void *rrc_nrue_task(void *args_p)
|
||||
{
|
||||
UNUSED(args_p);
|
||||
itti_mark_task_ready(TASK_RRC_NRUE);
|
||||
while (1) {
|
||||
rrc_nrue(NULL);
|
||||
@@ -3075,6 +3074,7 @@ void *rrc_nrue_task(void *args_p)
|
||||
|
||||
void *rrc_nrue(void *notUsed)
|
||||
{
|
||||
UNUSED(notUsed);
|
||||
MessageDef *msg_p = NULL;
|
||||
itti_receive_msg(TASK_RRC_NRUE, &msg_p);
|
||||
instance_t instance = ITTI_MSG_DESTINATION_INSTANCE(msg_p);
|
||||
@@ -3152,24 +3152,15 @@ void *rrc_nrue(void *notUsed)
|
||||
if (bcch->is_bch)
|
||||
nr_rrc_ue_decode_NR_BCCH_BCH_Message(rrc, bcch->gnb_index, bcch->phycellid, bcch->ssb_arfcn, bcch->sdu, bcch->sdu_size);
|
||||
else
|
||||
nr_rrc_ue_decode_NR_BCCH_DL_SCH_Message(rrc,
|
||||
bcch->gnb_index,
|
||||
bcch->sdu,
|
||||
bcch->sdu_size,
|
||||
bcch->rsrq,
|
||||
bcch->rsrp,
|
||||
bcch->hfn,
|
||||
bcch->frame,
|
||||
bcch->slot);
|
||||
nr_rrc_ue_decode_NR_BCCH_DL_SCH_Message(rrc, bcch->gnb_index, bcch->sdu, bcch->sdu_size, bcch->hfn, bcch->frame, bcch->slot);
|
||||
break;
|
||||
|
||||
case NR_RRC_MAC_SBCCH_DATA_IND:
|
||||
LOG_D(NR_RRC, "[UE %ld] Received %s: gNB %d\n", instance, ITTI_MSG_NAME(msg_p), NR_RRC_MAC_SBCCH_DATA_IND(msg_p).gnb_index);
|
||||
NRRrcMacSBcchDataInd *sbcch = &NR_RRC_MAC_SBCCH_DATA_IND(msg_p);
|
||||
|
||||
nr_rrc_ue_decode_NR_SBCCH_SL_BCH_Message(rrc, sbcch->gnb_index,sbcch->frame, sbcch->slot, sbcch->sdu,
|
||||
sbcch->sdu_size, sbcch->rx_slss_id);
|
||||
nr_rrc_ue_decode_NR_SBCCH_SL_BCH_Message(rrc, sbcch->sdu, sbcch->sdu_size, sbcch->rx_slss_id);
|
||||
break;
|
||||
|
||||
case NR_RRC_MAC_MEAS_DATA_IND:
|
||||
nr_rrc_handle_meas_indication(rrc, &NR_RRC_MAC_MEAS_DATA_IND(msg_p));
|
||||
break;
|
||||
|
||||
@@ -67,9 +67,6 @@ void start_sidelink(int instance);
|
||||
void rrc_ue_process_sidelink_Preconfiguration(NR_UE_RRC_INST_t *rrc_inst, int sync_ref);
|
||||
|
||||
void nr_rrc_ue_decode_NR_SBCCH_SL_BCH_Message(NR_UE_RRC_INST_t *rrc,
|
||||
const uint8_t gNB_index,
|
||||
const frame_t frame,
|
||||
const int slot,
|
||||
uint8_t* pduP,
|
||||
const sdu_size_t pdu_len,
|
||||
const uint16_t rx_slss_id);
|
||||
|
||||
@@ -421,9 +421,7 @@ int configure_NR_SL_Preconfig(NR_UE_RRC_INST_t *rrc,int sync_source)
|
||||
}
|
||||
|
||||
/*decode SL-BCH (SL-MIB) message*/
|
||||
static int8_t nr_sl_rrc_ue_decode_SL_MIB(const uint8_t gNB_index,
|
||||
uint8_t *const bufferP,
|
||||
const uint8_t buffer_len)
|
||||
static int8_t nr_sl_rrc_ue_decode_SL_MIB(uint8_t *const bufferP, const uint8_t buffer_len)
|
||||
{
|
||||
NR_MasterInformationBlockSidelink_t *sl_mib = NULL;
|
||||
|
||||
@@ -456,15 +454,12 @@ static int8_t nr_sl_rrc_ue_decode_SL_MIB(const uint8_t gNB_index,
|
||||
|
||||
|
||||
void nr_rrc_ue_decode_NR_SBCCH_SL_BCH_Message(NR_UE_RRC_INST_t *rrc,
|
||||
const uint8_t gNB_index,
|
||||
const frame_t frame,
|
||||
const int slot,
|
||||
uint8_t* pduP,
|
||||
const sdu_size_t pdu_len,
|
||||
const uint16_t rx_slss_id)
|
||||
{
|
||||
|
||||
nr_sl_rrc_ue_decode_SL_MIB(gNB_index, (uint8_t*)pduP, pdu_len);
|
||||
nr_sl_rrc_ue_decode_SL_MIB((uint8_t*)pduP, pdu_len);
|
||||
|
||||
DevAssert(rrc->sl_preconfig);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user