Commit 792cd56f authored by Robert Schmidt's avatar Robert Schmidt

Cleanup after RRC reestablishment

parent 7a298e73
......@@ -1100,8 +1100,7 @@ uint8_t do_RRCReestablishmentRequest(uint8_t Mod_id, uint8_t *buffer, uint16_t c
}
//------------------------------------------------------------------------------
int do_RRCReestablishment(const protocol_ctxt_t *const ctxt_pP,
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,
size_t buffer_size,
......@@ -1126,7 +1125,8 @@ int do_RRCReestablishment(const protocol_ctxt_t *const ctxt_pP,
rrcReestablishment->criticalExtensions.present = NR_RRCReestablishment__criticalExtensions_PR_rrcReestablishment;
rrcReestablishment->criticalExtensions.choice.rrcReestablishment = CALLOC(1, sizeof(NR_RRCReestablishment_IEs_t));
uint16_t pci = RC.nrrrc[ctxt_pP->module_id]->carrier.physCellId;
int module_id = 0;
uint16_t pci = RC.nrrrc[module_id]->carrier.physCellId;
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);
......
......@@ -172,8 +172,7 @@ uint8_t do_NR_ULInformationTransfer(uint8_t **buffer,
uint8_t do_RRCReestablishmentRequest(uint8_t Mod_id, uint8_t *buffer, uint16_t c_rnti);
int do_RRCReestablishment(const protocol_ctxt_t *const ctxt_pP,
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,
size_t buffer_size,
......
......@@ -235,7 +235,6 @@ typedef enum {
} rrc_action_t;
typedef struct gNB_RRC_UE_s {
uint8_t primaryCC_id;
drb_t established_drbs[MAX_DRBS_PER_UE];
uint8_t DRB_active[MAX_DRBS_PER_UE];
......
......@@ -1151,19 +1151,14 @@ static void rrc_gNB_process_RRCReconfigurationComplete(const protocol_ctxt_t *co
}
//-----------------------------------------------------------------------------
static void rrc_gNB_generate_RRCReestablishment(const protocol_ctxt_t *ctxt_pP,
rrc_gNB_ue_context_t *ue_context_pP,
static void rrc_gNB_generate_RRCReestablishment(rrc_gNB_ue_context_t *ue_context_pP,
const uint8_t *masterCellGroup_from_DU,
NR_ServingCellConfigCommon_t *scc,
const rnti_t old_rnti)
//-----------------------------------------------------------------------------
{
// int UE_id = -1;
// NR_LogicalChannelConfig_t *SRB1_logicalChannelConfig = NULL;
// NR_SRB_ToAddMod_t *SRB1_config = NULL;
// rrc_gNB_carrier_data_t *carrier = NULL;
module_id_t module_id = ctxt_pP->module_id;
gNB_RRC_INST *rrc = RC.nrrrc[ctxt_pP->module_id];
module_id_t module_id = 0;
gNB_RRC_INST *rrc = RC.nrrrc[module_id];
int enable_ciphering = 0;
gNB_RRC_UE_t *ue_p = &ue_context_pP->ue_context;
......@@ -1171,8 +1166,7 @@ static void rrc_gNB_generate_RRCReestablishment(const protocol_ctxt_t *ctxt_pP,
uint8_t xid = rrc_gNB_get_next_transaction_identifier(module_id);
ue_p->xids[xid] = RRC_REESTABLISH;
NR_SRB_ToAddModList_t *SRBs = createSRBlist(ue_p, true);
int size = do_RRCReestablishment(ctxt_pP,
ue_context_pP,
int size = do_RRCReestablishment(ue_context_pP,
0 /* CC_id */,
buffer,
RRC_BUF_SIZE,
......@@ -1198,13 +1192,13 @@ static void rrc_gNB_generate_RRCReestablishment(const protocol_ctxt_t *ctxt_pP,
uint8_t security_mode =
enable_ciphering ? ue_p->ciphering_algorithm | (ue_p->integrity_algorithm << 4) : 0 | (ue_p->integrity_algorithm << 4);
nr_pdcp_config_set_security(ctxt_pP->rntiMaybeUEid,
nr_pdcp_config_set_security(ue_p->rrc_ue_id,
DCCH,
security_mode,
kRRCenc,
kRRCint,
kUPenc);
nr_pdcp_reestablishment(ctxt_pP->rntiMaybeUEid);
nr_pdcp_reestablishment(ue_p->rrc_ue_id);
f1_ue_data_t ue_data = cu_get_f1_ue_data(ue_p->rrc_ue_id);
uint32_t old_gNB_DU_ue_id = old_rnti;
......@@ -1482,24 +1476,25 @@ static int nr_rrc_gNB_decode_ccch(module_id_t module_id, const f1ap_initial_ul_r
const NR_ReestablishmentCause_t cause = rrcReestablishmentRequest.reestablishmentCause;
const long physCellId = rrcReestablishmentRequest.ue_Identity.physCellId;
LOG_I(NR_RRC,
"UE %04x NR_RRCReestablishmentRequest cause %s\n",
"UE %04x physCellId %ld NR_RRCReestablishmentRequest cause %s\n",
rnti,
((cause == NR_ReestablishmentCause_otherFailure) ? "Other Failure"
: (cause == NR_ReestablishmentCause_handoverFailure) ? "Handover Failure"
: "reconfigurationFailure"));
uint8_t xid = -1;
physCellId,
cause == NR_ReestablishmentCause_otherFailure
? "Other Failure"
: (cause == NR_ReestablishmentCause_handoverFailure ? "Handover Failure" : "reconfigurationFailure"));
if (physCellId != gnb_rrc_inst->carrier.physCellId) {
/* UE was moving from previous cell so quickly that RRCReestablishment for previous cell was received in this cell */
LOG_E(NR_RRC,
" NR_RRCReestablishmentRequest ue_Identity.physCellId(%ld) is not equal to current physCellId(%ld), fallback to RRC establishment\n",
physCellId,
gnb_rrc_inst->carrier.physCellId);
xid = rrc_gNB_generate_RRCSetup_for_RRCReestablishmentRequest(module_id, rnti, 0);
/* 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
* procedure" we did not implement this yet; TBD for Multi-DU */
AssertFatal(false, "not implemented\n");
break;
}
LOG_I(NR_RRC, "physCellId: %ld\n", physCellId);
for (int i = 0; i < rrcReestablishmentRequest.ue_Identity.shortMAC_I.size; i++) {
LOG_D(NR_RRC, "rrcReestablishmentRequest.ue_Identity.shortMAC_I.buf[%d] = %x\n", i, rrcReestablishmentRequest.ue_Identity.shortMAC_I.buf[i]);
}
......@@ -1508,7 +1503,7 @@ static int nr_rrc_gNB_decode_ccch(module_id_t module_id, const f1ap_initial_ul_r
if (rrcReestablishmentRequest.ue_Identity.c_RNTI < 0x1 || rrcReestablishmentRequest.ue_Identity.c_RNTI > 0xffef) {
/* c_RNTI range error should not happen */
LOG_E(NR_RRC, "NR_RRCReestablishmentRequest c_RNTI range error, fallback to RRC establishment\n");
xid = rrc_gNB_generate_RRCSetup_for_RRCReestablishmentRequest(module_id, rnti, 0);
rrc_gNB_generate_RRCSetup_for_RRCReestablishmentRequest(module_id, rnti, 0);
break;
}
......@@ -1518,18 +1513,11 @@ static int nr_rrc_gNB_decode_ccch(module_id_t module_id, const f1ap_initial_ul_r
gNB_RRC_UE_t *UE = &ue_context_p->ue_context;
if (ue_context_p == NULL) {
LOG_E(NR_RRC, "NR_RRCReestablishmentRequest without UE context, fallback to RRC establishment\n");
xid = rrc_gNB_generate_RRCSetup_for_RRCReestablishmentRequest(module_id, rnti, 0);
break;
}
// c-plane not end
if ((UE->StatusRrc != NR_RRC_RECONFIGURED) && (UE->reestablishment_cause == NR_ReestablishmentCause_spare1)) {
AssertFatal(false, "not implemented: is this really a bug?\n");
/* TODO RRC Release ? */
rrc_gNB_generate_RRCSetup_for_RRCReestablishmentRequest(module_id, rnti, 0);
break;
}
/* TODO: start timer in ITTI and drop UE if it does not come back */
(void) xid; /* xid currently not used */
// update with new RNTI, and update secondary UE association
UE->rnti = rnti;
......@@ -1540,16 +1528,7 @@ static int nr_rrc_gNB_decode_ccch(module_id_t module_id, const f1ap_initial_ul_r
UE->reestablishment_cause = cause;
LOG_D(NR_RRC, "Accept RRCReestablishmentRequest from UE physCellId %ld cause %ld\n", physCellId, cause);
UE->primaryCC_id = 0;
// SRB2: set it to go through SRB1 with id 1 (DCCH)
//UE->Srb[2].Active = 1;
protocol_ctxt_t ctxt = {.rntiMaybeUEid = ue_context_p->ue_context.rrc_ue_id,
.module_id = module_id,
.instance = module_id,
.enb_flag = 1,
.eNB_index = module_id};
rrc_gNB_generate_RRCReestablishment(&ctxt,
ue_context_p,
rrc_gNB_generate_RRCReestablishment(ue_context_p,
msg->du2cu_rrc_container,
gnb_rrc_inst->carrier.servingcellconfigcommon,
old_rnti);
......
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