Commit f709ee81 authored by Robert Schmidt's avatar Robert Schmidt

Move physCellId to MAC

The PCI is given to the CU from the DU in the F1 Setup Request message.
It is a part of the DU, so move it "down".
parent b93368f4
...@@ -1317,7 +1317,6 @@ void RCconfig_NRRRC(gNB_RRC_INST *rrc) ...@@ -1317,7 +1317,6 @@ void RCconfig_NRRRC(gNB_RRC_INST *rrc)
rrc->nr_cellid = (uint64_t)*(GNBParamList.paramarray[i][GNB_NRCELLID_IDX].u64ptr); rrc->nr_cellid = (uint64_t)*(GNBParamList.paramarray[i][GNB_NRCELLID_IDX].u64ptr);
rrc->carrier.physCellId = *scc->physCellId;
rrc->um_on_default_drb = *(GNBParamList.paramarray[i][GNB_UMONDEFAULTDRB_IDX].uptr); rrc->um_on_default_drb = *(GNBParamList.paramarray[i][GNB_UMONDEFAULTDRB_IDX].uptr);
if (strcmp(*(GNBParamList.paramarray[i][GNB_TRANSPORT_S_PREFERENCE_IDX].strptr), "local_mac") == 0) { if (strcmp(*(GNBParamList.paramarray[i][GNB_TRANSPORT_S_PREFERENCE_IDX].strptr), "local_mac") == 0) {
...@@ -2081,7 +2080,7 @@ int gNB_app_handle_f1ap_gnb_cu_configuration_update(f1ap_gnb_cu_configuration_up ...@@ -2081,7 +2080,7 @@ int gNB_app_handle_f1ap_gnb_cu_configuration_update(f1ap_gnb_cu_configuration_up
if (RC.nrrrc[i]->nr_cellid == gnb_cu_cfg_update->cells_to_activate[j].nr_cellid if (RC.nrrrc[i]->nr_cellid == gnb_cu_cfg_update->cells_to_activate[j].nr_cellid
&& check_plmn_identity(&setup_req->cell[0].info.plmn, &gnb_cu_cfg_update->cells_to_activate[j].plmn) > 0 && check_plmn_identity(&setup_req->cell[0].info.plmn, &gnb_cu_cfg_update->cells_to_activate[j].plmn) > 0
&& gnb_cu_cfg_update->cells_to_activate[j].nrpci == carrier->physCellId) { && setup_req->cell[0].info.nr_pci == gnb_cu_cfg_update->cells_to_activate[j].nrpci) {
// copy system information and decode it // copy system information and decode it
AssertFatal(gnb_cu_cfg_update->cells_to_activate[j].num_SI == 0, AssertFatal(gnb_cu_cfg_update->cells_to_activate[j].num_SI == 0,
"gNB-CU Configuration Update: handling of additional SIs not implemend\n"); "gNB-CU Configuration Update: handling of additional SIs not implemend\n");
......
...@@ -1060,14 +1060,11 @@ uint8_t do_RRCReestablishmentRequest(uint8_t Mod_id, uint8_t *buffer, uint16_t c ...@@ -1060,14 +1060,11 @@ uint8_t do_RRCReestablishmentRequest(uint8_t Mod_id, uint8_t *buffer, uint16_t c
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
int do_RRCReestablishment(rrc_gNB_ue_context_t *const ue_context_pP, int do_RRCReestablishment(rrc_gNB_ue_context_t *const ue_context_pP,
int CC_id,
uint8_t *const buffer, uint8_t *const buffer,
size_t buffer_size, size_t buffer_size,
const uint8_t Transaction_id, const uint8_t Transaction_id,
NR_SRB_ToAddModList_t *SRB_configList, uint16_t pci,
const uint8_t *masterCellGroup_from_DU, NR_ServingCellConfigCommon_t *scc)
NR_ServingCellConfigCommon_t *scc,
rrc_gNB_carrier_data_t *carrier)
{ {
asn_enc_rval_t enc_rval; asn_enc_rval_t enc_rval;
NR_DL_DCCH_Message_t dl_dcch_msg = {0}; NR_DL_DCCH_Message_t dl_dcch_msg = {0};
...@@ -1084,8 +1081,6 @@ int do_RRCReestablishment(rrc_gNB_ue_context_t *const ue_context_pP, ...@@ -1084,8 +1081,6 @@ int do_RRCReestablishment(rrc_gNB_ue_context_t *const ue_context_pP,
rrcReestablishment->criticalExtensions.present = NR_RRCReestablishment__criticalExtensions_PR_rrcReestablishment; rrcReestablishment->criticalExtensions.present = NR_RRCReestablishment__criticalExtensions_PR_rrcReestablishment;
rrcReestablishment->criticalExtensions.choice.rrcReestablishment = CALLOC(1, sizeof(NR_RRCReestablishment_IEs_t)); rrcReestablishment->criticalExtensions.choice.rrcReestablishment = CALLOC(1, sizeof(NR_RRCReestablishment_IEs_t));
int module_id = 0;
uint16_t pci = RC.nrrrc[module_id]->carrier.physCellId;
uint32_t nr_arfcn_dl = (uint64_t)*scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencySSB; uint32_t nr_arfcn_dl = (uint64_t)*scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencySSB;
LOG_I(NR_RRC, "Reestablishment update key pci=%d, earfcn_dl=%u\n", pci, nr_arfcn_dl); LOG_I(NR_RRC, "Reestablishment update key pci=%d, earfcn_dl=%u\n", pci, nr_arfcn_dl);
...@@ -1107,7 +1102,7 @@ int do_RRCReestablishment(rrc_gNB_ue_context_t *const ue_context_pP, ...@@ -1107,7 +1102,7 @@ int do_RRCReestablishment(rrc_gNB_ue_context_t *const ue_context_pP,
xer_fprint(stdout, &asn_DEF_NR_DL_DCCH_Message, (void *)&dl_dcch_msg); xer_fprint(stdout, &asn_DEF_NR_DL_DCCH_Message, (void *)&dl_dcch_msg);
} }
enc_rval = uper_encode_to_buffer(&asn_DEF_NR_DL_DCCH_Message, NULL, (void *)&dl_dcch_msg, buffer, 100); enc_rval = uper_encode_to_buffer(&asn_DEF_NR_DL_DCCH_Message, NULL, (void *)&dl_dcch_msg, buffer, buffer_size);
AssertFatal(enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n", AssertFatal(enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n",
enc_rval.failed_type->name, enc_rval.encoded); enc_rval.failed_type->name, enc_rval.encoded);
......
...@@ -152,14 +152,11 @@ uint8_t do_NR_ULInformationTransfer(uint8_t **buffer, ...@@ -152,14 +152,11 @@ uint8_t do_NR_ULInformationTransfer(uint8_t **buffer,
uint8_t do_RRCReestablishmentRequest(uint8_t Mod_id, uint8_t *buffer, uint16_t c_rnti); uint8_t do_RRCReestablishmentRequest(uint8_t Mod_id, uint8_t *buffer, uint16_t c_rnti);
int do_RRCReestablishment(rrc_gNB_ue_context_t *const ue_context_pP, int do_RRCReestablishment(rrc_gNB_ue_context_t *const ue_context_pP,
int CC_id,
uint8_t *const buffer, uint8_t *const buffer,
size_t buffer_size, size_t buffer_size,
const uint8_t Transaction_id, const uint8_t Transaction_id,
NR_SRB_ToAddModList_t *SRB_configList, uint16_t pci,
const uint8_t *masterCellGroup_from_DU, NR_ServingCellConfigCommon_t *scc);
NR_ServingCellConfigCommon_t *scc,
rrc_gNB_carrier_data_t *carrier);
int do_RRCReestablishmentComplete(uint8_t *buffer, size_t buffer_size, int64_t rrc_TransactionIdentifier); int do_RRCReestablishmentComplete(uint8_t *buffer, size_t buffer_size, int64_t rrc_TransactionIdentifier);
......
...@@ -331,8 +331,6 @@ typedef struct { ...@@ -331,8 +331,6 @@ typedef struct {
uint8_t *SIB23; uint8_t *SIB23;
uint8_t sizeof_SIB23; uint8_t sizeof_SIB23;
long physCellId;
NR_BCCH_BCH_Message_t *mib; NR_BCCH_BCH_Message_t *mib;
NR_SIB1_t *siblock1_DU; NR_SIB1_t *siblock1_DU;
NR_SIB1_t *sib1; NR_SIB1_t *sib1;
......
...@@ -1024,19 +1024,16 @@ static void rrc_gNB_generate_RRCReestablishment(rrc_gNB_ue_context_t *ue_context ...@@ -1024,19 +1024,16 @@ static void rrc_gNB_generate_RRCReestablishment(rrc_gNB_ue_context_t *ue_context
int enable_ciphering = 0; int enable_ciphering = 0;
gNB_RRC_UE_t *ue_p = &ue_context_pP->ue_context; gNB_RRC_UE_t *ue_p = &ue_context_pP->ue_context;
/* look up corresponding DU. For the moment, there is only one */
const nr_rrc_du_container_t *du = rrc->du;
AssertFatal(du != NULL, "received CCCH message, but no corresponding DU found\n");
const f1ap_served_cell_info_t *cell_info = &du->setup_req->cell[0].info;
uint8_t buffer[RRC_BUF_SIZE] = {0}; uint8_t buffer[RRC_BUF_SIZE] = {0};
uint8_t xid = rrc_gNB_get_next_transaction_identifier(module_id); uint8_t xid = rrc_gNB_get_next_transaction_identifier(module_id);
ue_p->xids[xid] = RRC_REESTABLISH; ue_p->xids[xid] = RRC_REESTABLISH;
NR_SRB_ToAddModList_t *SRBs = createSRBlist(ue_p, true); NR_SRB_ToAddModList_t *SRBs = createSRBlist(ue_p, true);
int size = do_RRCReestablishment(ue_context_pP, int size = do_RRCReestablishment(ue_context_pP, buffer, RRC_BUF_SIZE, xid, cell_info->nr_pci, scc);
0 /* CC_id */,
buffer,
RRC_BUF_SIZE,
xid,
SRBs,
masterCellGroup_from_DU,
scc,
&rrc->carrier);
LOG_I(NR_RRC, "[RAPROC] UE %04x Logical Channel DL-DCCH, Generating NR_RRCReestablishment (bytes %d)\n", ue_p->rnti, size); LOG_I(NR_RRC, "[RAPROC] UE %04x Logical Channel DL-DCCH, Generating NR_RRCReestablishment (bytes %d)\n", ue_p->rnti, size);
...@@ -1234,6 +1231,10 @@ static int nr_rrc_gNB_decode_ccch(module_id_t module_id, const f1ap_initial_ul_r ...@@ -1234,6 +1231,10 @@ static int nr_rrc_gNB_decode_ccch(module_id_t module_id, const f1ap_initial_ul_r
NR_RRCReestablishmentRequest_IEs_t rrcReestablishmentRequest; NR_RRCReestablishmentRequest_IEs_t rrcReestablishmentRequest;
rnti_t rnti = msg->crnti; rnti_t rnti = msg->crnti;
/* look up corresponding DU. For the moment, there is only one */
const nr_rrc_du_container_t *du = gnb_rrc_inst->du;
AssertFatal(du != NULL, "received CCCH message, but no corresponding DU found\n");
LOG_I(NR_RRC, "Decoding CCCH: RNTI %04x, payload_size %d\n", rnti, msg->rrc_container_length); LOG_I(NR_RRC, "Decoding CCCH: RNTI %04x, payload_size %d\n", rnti, msg->rrc_container_length);
dec_rval = dec_rval =
uper_decode(NULL, &asn_DEF_NR_UL_CCCH_Message, (void **)&ul_ccch_msg, msg->rrc_container, msg->rrc_container_length, 0, 0); uper_decode(NULL, &asn_DEF_NR_UL_CCCH_Message, (void **)&ul_ccch_msg, msg->rrc_container, msg->rrc_container_length, 0, 0);
...@@ -1349,12 +1350,16 @@ static int nr_rrc_gNB_decode_ccch(module_id_t module_id, const f1ap_initial_ul_r ...@@ -1349,12 +1350,16 @@ static int nr_rrc_gNB_decode_ccch(module_id_t module_id, const f1ap_initial_ul_r
cause == NR_ReestablishmentCause_otherFailure cause == NR_ReestablishmentCause_otherFailure
? "Other Failure" ? "Other Failure"
: (cause == NR_ReestablishmentCause_handoverFailure ? "Handover Failure" : "reconfigurationFailure")); : (cause == NR_ReestablishmentCause_handoverFailure ? "Handover Failure" : "reconfigurationFailure"));
if (physCellId != gnb_rrc_inst->carrier.physCellId) {
uint8_t xid = -1;
AssertFatal(du->setup_req->num_cells_available == 1, "cannot handle more than one cell\n");
const f1ap_served_cell_info_t *cell_info = &du->setup_req->cell[0].info;
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 */
LOG_E(NR_RRC, LOG_E(NR_RRC,
" NR_RRCReestablishmentRequest ue_Identity.physCellId(%ld) is not equal to current physCellId(%ld), fallback to RRC establishment\n", " NR_RRCReestablishmentRequest ue_Identity.physCellId(%ld) is not equal to current physCellId(%d), fallback to RRC establishment\n",
physCellId, physCellId,
gnb_rrc_inst->carrier.physCellId); cell_info->nr_pci);
/* 38.401 8.7: "If the UE accessed from a gNB-DU other than the /* 38.401 8.7: "If the UE accessed from a gNB-DU other than the
* original one, the gNB-CU should trigger the UE Context Setup * original one, the gNB-CU should trigger the UE Context Setup
* procedure" we did not implement this yet; TBD for Multi-DU */ * procedure" we did not implement this yet; TBD for Multi-DU */
...@@ -1908,8 +1913,6 @@ static void rrc_gNB_process_f1_setup_req(f1ap_setup_req_t *req) ...@@ -1908,8 +1913,6 @@ static void rrc_gNB_process_f1_setup_req(f1ap_setup_req_t *req)
AssertFatal(rrc->du->setup_req != NULL, "out of memory\n"); AssertFatal(rrc->du->setup_req != NULL, "out of memory\n");
*rrc->du->setup_req = *req; *rrc->du->setup_req = *req;
rrc->carrier.physCellId = cell_info->nr_pci;
if (rrc->carrier.mib != NULL) { if (rrc->carrier.mib != NULL) {
LOG_E(NR_RRC, "CU MIB is already initialized: double F1 setup request?\n"); LOG_E(NR_RRC, "CU MIB is already initialized: double F1 setup request?\n");
} else { } else {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment