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 ...@@ -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, int do_RRCReestablishment(rrc_gNB_ue_context_t *const ue_context_pP,
rrc_gNB_ue_context_t *const ue_context_pP,
int CC_id, int CC_id,
uint8_t *const buffer, uint8_t *const buffer,
size_t buffer_size, size_t buffer_size,
...@@ -1126,7 +1125,8 @@ int do_RRCReestablishment(const protocol_ctxt_t *const ctxt_pP, ...@@ -1126,7 +1125,8 @@ int do_RRCReestablishment(const protocol_ctxt_t *const ctxt_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));
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; 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);
......
...@@ -172,8 +172,7 @@ uint8_t do_NR_ULInformationTransfer(uint8_t **buffer, ...@@ -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); 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, int do_RRCReestablishment(rrc_gNB_ue_context_t *const ue_context_pP,
rrc_gNB_ue_context_t *const ue_context_pP,
int CC_id, int CC_id,
uint8_t *const buffer, uint8_t *const buffer,
size_t buffer_size, size_t buffer_size,
......
...@@ -235,7 +235,6 @@ typedef enum { ...@@ -235,7 +235,6 @@ typedef enum {
} rrc_action_t; } rrc_action_t;
typedef struct gNB_RRC_UE_s { typedef struct gNB_RRC_UE_s {
uint8_t primaryCC_id;
drb_t established_drbs[MAX_DRBS_PER_UE]; drb_t established_drbs[MAX_DRBS_PER_UE];
uint8_t DRB_active[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 ...@@ -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, static void rrc_gNB_generate_RRCReestablishment(rrc_gNB_ue_context_t *ue_context_pP,
rrc_gNB_ue_context_t *ue_context_pP,
const uint8_t *masterCellGroup_from_DU, const uint8_t *masterCellGroup_from_DU,
NR_ServingCellConfigCommon_t *scc, NR_ServingCellConfigCommon_t *scc,
const rnti_t old_rnti) const rnti_t old_rnti)
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
{ {
// int UE_id = -1; module_id_t module_id = 0;
// NR_LogicalChannelConfig_t *SRB1_logicalChannelConfig = NULL; gNB_RRC_INST *rrc = RC.nrrrc[module_id];
// 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];
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;
...@@ -1171,8 +1166,7 @@ static void rrc_gNB_generate_RRCReestablishment(const protocol_ctxt_t *ctxt_pP, ...@@ -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); 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(ctxt_pP, int size = do_RRCReestablishment(ue_context_pP,
ue_context_pP,
0 /* CC_id */, 0 /* CC_id */,
buffer, buffer,
RRC_BUF_SIZE, RRC_BUF_SIZE,
...@@ -1198,13 +1192,13 @@ static void rrc_gNB_generate_RRCReestablishment(const protocol_ctxt_t *ctxt_pP, ...@@ -1198,13 +1192,13 @@ static void rrc_gNB_generate_RRCReestablishment(const protocol_ctxt_t *ctxt_pP,
uint8_t security_mode = uint8_t security_mode =
enable_ciphering ? ue_p->ciphering_algorithm | (ue_p->integrity_algorithm << 4) : 0 | (ue_p->integrity_algorithm << 4); 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, DCCH,
security_mode, security_mode,
kRRCenc, kRRCenc,
kRRCint, kRRCint,
kUPenc); 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); 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; 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 ...@@ -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 NR_ReestablishmentCause_t cause = rrcReestablishmentRequest.reestablishmentCause;
const long physCellId = rrcReestablishmentRequest.ue_Identity.physCellId; const long physCellId = rrcReestablishmentRequest.ue_Identity.physCellId;
LOG_I(NR_RRC, LOG_I(NR_RRC,
"UE %04x NR_RRCReestablishmentRequest cause %s\n", "UE %04x physCellId %ld NR_RRCReestablishmentRequest cause %s\n",
rnti, rnti,
((cause == NR_ReestablishmentCause_otherFailure) ? "Other Failure" physCellId,
: (cause == NR_ReestablishmentCause_handoverFailure) ? "Handover Failure" cause == NR_ReestablishmentCause_otherFailure
: "reconfigurationFailure")); ? "Other Failure"
uint8_t xid = -1; : (cause == NR_ReestablishmentCause_handoverFailure ? "Handover Failure" : "reconfigurationFailure"));
if (physCellId != gnb_rrc_inst->carrier.physCellId) { 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 */ /* 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(%ld), fallback to RRC establishment\n",
physCellId, physCellId,
gnb_rrc_inst->carrier.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; break;
} }
LOG_I(NR_RRC, "physCellId: %ld\n", physCellId);
for (int i = 0; i < rrcReestablishmentRequest.ue_Identity.shortMAC_I.size; i++) { 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]); 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 ...@@ -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) { if (rrcReestablishmentRequest.ue_Identity.c_RNTI < 0x1 || rrcReestablishmentRequest.ue_Identity.c_RNTI > 0xffef) {
/* c_RNTI range error should not happen */ /* c_RNTI range error should not happen */
LOG_E(NR_RRC, "NR_RRCReestablishmentRequest c_RNTI range error, fallback to RRC establishment\n"); 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; break;
} }
...@@ -1518,18 +1513,11 @@ static int nr_rrc_gNB_decode_ccch(module_id_t module_id, const f1ap_initial_ul_r ...@@ -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; gNB_RRC_UE_t *UE = &ue_context_p->ue_context;
if (ue_context_p == NULL) { if (ue_context_p == NULL) {
LOG_E(NR_RRC, "NR_RRCReestablishmentRequest without UE context, fallback to RRC establishment\n"); 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); 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 ? */
break; break;
} }
/* TODO: start timer in ITTI and drop UE if it does not come back */ /* 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 // update with new RNTI, and update secondary UE association
UE->rnti = rnti; UE->rnti = rnti;
...@@ -1540,16 +1528,7 @@ static int nr_rrc_gNB_decode_ccch(module_id_t module_id, const f1ap_initial_ul_r ...@@ -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; UE->reestablishment_cause = cause;
LOG_D(NR_RRC, "Accept RRCReestablishmentRequest from UE physCellId %ld cause %ld\n", physCellId, cause); LOG_D(NR_RRC, "Accept RRCReestablishmentRequest from UE physCellId %ld cause %ld\n", physCellId, cause);
UE->primaryCC_id = 0; rrc_gNB_generate_RRCReestablishment(ue_context_p,
// 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,
msg->du2cu_rrc_container, msg->du2cu_rrc_container,
gnb_rrc_inst->carrier.servingcellconfigcommon, gnb_rrc_inst->carrier.servingcellconfigcommon,
old_rnti); 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