Introduce lookup functions for DUs
This commit is contained in:
@@ -524,9 +524,6 @@ static void rrc_gNB_generate_defaultRRCReconfiguration(const protocol_ctxt_t *co
|
|||||||
uint8_t xid = rrc_gNB_get_next_transaction_identifier(ctxt_pP->module_id);
|
uint8_t xid = rrc_gNB_get_next_transaction_identifier(ctxt_pP->module_id);
|
||||||
ue_p->xids[xid] = RRC_DEFAULT_RECONF;
|
ue_p->xids[xid] = RRC_DEFAULT_RECONF;
|
||||||
|
|
||||||
const nr_rrc_du_container_t *du = rrc->du;
|
|
||||||
DevAssert(du != NULL);
|
|
||||||
|
|
||||||
struct NR_RRCReconfiguration_v1530_IEs__dedicatedNAS_MessageList *dedicatedNAS_MessageList = CALLOC(1, sizeof(*dedicatedNAS_MessageList));
|
struct NR_RRCReconfiguration_v1530_IEs__dedicatedNAS_MessageList *dedicatedNAS_MessageList = CALLOC(1, sizeof(*dedicatedNAS_MessageList));
|
||||||
|
|
||||||
/* Add all NAS PDUs to the list */
|
/* Add all NAS PDUs to the list */
|
||||||
@@ -551,7 +548,8 @@ static void rrc_gNB_generate_defaultRRCReconfiguration(const protocol_ctxt_t *co
|
|||||||
dedicatedNAS_MessageList = NULL;
|
dedicatedNAS_MessageList = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
AssertFatal(du->setup_req->num_cells_available == 1, "cannot handle more than one cell, but have %d\n", du->setup_req->num_cells_available);
|
const nr_rrc_du_container_t *du = get_du_for_ue(rrc, ue_p->rrc_ue_id);
|
||||||
|
DevAssert(du != NULL);
|
||||||
f1ap_served_cell_info_t *cell_info = &du->setup_req->cell[0].info;
|
f1ap_served_cell_info_t *cell_info = &du->setup_req->cell[0].info;
|
||||||
int scs = get_ssb_scs(cell_info);
|
int scs = get_ssb_scs(cell_info);
|
||||||
int band = get_dl_band(cell_info);
|
int band = get_dl_band(cell_info);
|
||||||
@@ -1241,10 +1239,12 @@ static void rrc_handle_RRCReestablishmentRequest(gNB_RRC_INST *rrc, const NR_RRC
|
|||||||
? "Other Failure"
|
? "Other Failure"
|
||||||
: (cause == NR_ReestablishmentCause_handoverFailure ? "Handover Failure" : "reconfigurationFailure"));
|
: (cause == NR_ReestablishmentCause_handoverFailure ? "Handover Failure" : "reconfigurationFailure"));
|
||||||
|
|
||||||
/* look up corresponding DU. For the moment, there is only one */
|
sctp_assoc_t assoc_id = 0; // currently, we have only one DU
|
||||||
const nr_rrc_du_container_t *du = rrc->du;
|
const nr_rrc_du_container_t *du = get_du_by_assoc_id(rrc, assoc_id);
|
||||||
AssertFatal(du != NULL, "received CCCH message, but no corresponding DU found\n");
|
if (du == NULL) {
|
||||||
AssertFatal(du->setup_req->num_cells_available == 1, "cannot handle more than one cell\n");
|
LOG_E(RRC, "received CCCH message, but no corresponding DU found\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
const f1ap_served_cell_info_t *cell_info = &du->setup_req->cell[0].info;
|
const f1ap_served_cell_info_t *cell_info = &du->setup_req->cell[0].info;
|
||||||
if (physCellId != cell_info->nr_pci) {
|
if (physCellId != cell_info->nr_pci) {
|
||||||
/* UE was moving from previous cell so quickly that RRCReestablishment for previous cell was received in this cell */
|
/* UE was moving from previous cell so quickly that RRCReestablishment for previous cell was received in this cell */
|
||||||
@@ -1293,7 +1293,7 @@ static void rrc_handle_RRCReestablishmentRequest(gNB_RRC_INST *rrc, const NR_RRC
|
|||||||
// update with new RNTI, and update secondary UE association
|
// update with new RNTI, and update secondary UE association
|
||||||
UE->rnti = msg->crnti;
|
UE->rnti = msg->crnti;
|
||||||
cu_remove_f1_ue_data(UE->rrc_ue_id);
|
cu_remove_f1_ue_data(UE->rrc_ue_id);
|
||||||
f1_ue_data_t ue_data = {.secondary_ue = msg->gNB_DU_ue_id, .du_assoc_id = assoc_id};
|
f1_ue_data_t ue_data = {.secondary_ue = msg->gNB_DU_ue_id};
|
||||||
cu_add_f1_ue_data(UE->rrc_ue_id, &ue_data);
|
cu_add_f1_ue_data(UE->rrc_ue_id, &ue_data);
|
||||||
|
|
||||||
UE->reestablishment_cause = cause;
|
UE->reestablishment_cause = cause;
|
||||||
@@ -2417,9 +2417,6 @@ rrc_gNB_generate_SecurityModeCommand(
|
|||||||
cu2du.uE_CapabilityRAT_ContainerList_length = ue_p->ue_cap_buffer.len;
|
cu2du.uE_CapabilityRAT_ContainerList_length = ue_p->ue_cap_buffer.len;
|
||||||
}
|
}
|
||||||
|
|
||||||
const nr_rrc_du_container_t *du = rrc->du;
|
|
||||||
DevAssert(du != NULL);
|
|
||||||
|
|
||||||
/* the callback will fill the UE context setup request and forward it */
|
/* the callback will fill the UE context setup request and forward it */
|
||||||
f1_ue_data_t ue_data = cu_get_f1_ue_data(ue_p->rrc_ue_id);
|
f1_ue_data_t ue_data = cu_get_f1_ue_data(ue_p->rrc_ue_id);
|
||||||
f1ap_ue_context_setup_t ue_context_setup_req = {
|
f1ap_ue_context_setup_t ue_context_setup_req = {
|
||||||
|
|||||||
@@ -183,3 +183,16 @@ void rrc_CU_process_f1_lost_connection(gNB_RRC_INST *rrc, f1ap_lost_connection_t
|
|||||||
/* TODO invalidate UE assoc IDs */
|
/* TODO invalidate UE assoc IDs */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nr_rrc_du_container_t *get_du_for_ue(gNB_RRC_INST *rrc, uint32_t ue_id)
|
||||||
|
{
|
||||||
|
nr_rrc_du_container_t *du = rrc->du;
|
||||||
|
if (du == NULL)
|
||||||
|
return NULL;
|
||||||
|
return du;
|
||||||
|
}
|
||||||
|
|
||||||
|
nr_rrc_du_container_t *get_du_by_assoc_id(gNB_RRC_INST *rrc, sctp_assoc_t assoc_id)
|
||||||
|
{
|
||||||
|
AssertFatal(assoc_id == rrc->du->assoc_id, "cannot handle multiple DUs yet\n");
|
||||||
|
return rrc->du;
|
||||||
|
}
|
||||||
|
|||||||
@@ -24,12 +24,17 @@
|
|||||||
|
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <netinet/sctp.h>
|
#include <netinet/sctp.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
struct f1ap_setup_req_s;
|
struct f1ap_setup_req_s;
|
||||||
struct f1ap_lost_connection_t;
|
struct f1ap_lost_connection_t;
|
||||||
struct gNB_RRC_INST_s;
|
struct gNB_RRC_INST_s;
|
||||||
|
struct nr_rrc_du_container_t;
|
||||||
|
|
||||||
void rrc_gNB_process_f1_setup_req(struct f1ap_setup_req_s *req, sctp_assoc_t assoc_id);
|
void rrc_gNB_process_f1_setup_req(struct f1ap_setup_req_s *req, sctp_assoc_t assoc_id);
|
||||||
void rrc_CU_process_f1_lost_connection(struct gNB_RRC_INST_s *rrc, struct f1ap_lost_connection_t *lc, sctp_assoc_t assoc_id);
|
void rrc_CU_process_f1_lost_connection(struct gNB_RRC_INST_s *rrc, struct f1ap_lost_connection_t *lc, sctp_assoc_t assoc_id);
|
||||||
|
|
||||||
|
struct nr_rrc_du_container_t *get_du_for_ue(struct gNB_RRC_INST_s *rrc, uint32_t ue_id);
|
||||||
|
struct nr_rrc_du_container_t *get_du_by_assoc_id(struct gNB_RRC_INST_s *rrc, sctp_assoc_t assoc_id);
|
||||||
|
|
||||||
#endif /* RRC_GNB_DU_H_ */
|
#endif /* RRC_GNB_DU_H_ */
|
||||||
|
|||||||
Reference in New Issue
Block a user