Revert "Send RRC UECapabilityEnquiry after reconfig, trigger UE update if necessary"
This reverts commit 4a7d7975ce.
Trigger the UE capability right after security mode complete, as
specified in O-RAN WG5.C.1-v11. Also, there is no "need" for the
"default" RRC Reconfiguration (it will come once PDU sessions are
requested), so remove this as well.
This commit is contained in:
committed by
Robert Schmidt
parent
7340abc6f4
commit
388942b5d3
@@ -567,20 +567,7 @@ void rrc_gNB_generate_dedicatedRRCReconfiguration(const protocol_ctxt_t *const c
|
|||||||
|
|
||||||
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);
|
||||||
gNB_RRC_UE_t *ue_p = &ue_context_pP->ue_context;
|
gNB_RRC_UE_t *ue_p = &ue_context_pP->ue_context;
|
||||||
/* hack: in many cases, we want to send a PDU session resource setup response
|
ue_p->xids[xid] = RRC_PDUSESSION_ESTABLISH;
|
||||||
* after this dedicated RRC Reconfiguration (e.g., new PDU session). However,
|
|
||||||
* this is not always the case, e.g., when the PDU sessions came through the
|
|
||||||
* NG initial UE context setup, in which case all PDU sessions are
|
|
||||||
* established, and we end up here after a UE Capability Enquiry. So below,
|
|
||||||
* check if we are currently setting up any PDU sessions, and only then, set
|
|
||||||
* the xid to trigger a PDU session setup response. */
|
|
||||||
ue_p->xids[xid] = RRC_DEDICATED_RECONF;
|
|
||||||
for (int i = 0; i < ue_p->nb_of_pdusessions; ++i) {
|
|
||||||
if (ue_p->pduSession[i].status < PDU_SESSION_STATUS_ESTABLISHED) {
|
|
||||||
ue_p->xids[xid] = RRC_PDUSESSION_ESTABLISH;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
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));
|
||||||
|
|
||||||
for (int i = 0; i < ue_p->nb_of_pdusessions; i++) {
|
for (int i = 0; i < ue_p->nb_of_pdusessions; i++) {
|
||||||
@@ -1389,35 +1376,6 @@ static int handle_ueCapabilityInformation(const protocol_ctxt_t *const ctxt_pP,
|
|||||||
|
|
||||||
rrc_gNB_send_NGAP_UE_CAPABILITIES_IND(ctxt_pP, ue_context_p, ue_cap_info);
|
rrc_gNB_send_NGAP_UE_CAPABILITIES_IND(ctxt_pP, ue_context_p, ue_cap_info);
|
||||||
|
|
||||||
/* if we already have DRBs setup (SRB2 exists if there is at least one DRB),
|
|
||||||
* there might not be a further reconfiguration on which we can rely, so send
|
|
||||||
* the UE capabilities to the DU to have it trigger a reconfiguration. */
|
|
||||||
if (UE->Srb[2].Active && UE->ue_cap_buffer.len > 0 && UE->ue_cap_buffer.buf != NULL) {
|
|
||||||
cu_to_du_rrc_information_t cu2du = {0};
|
|
||||||
if (UE->ue_cap_buffer.len > 0 && UE->ue_cap_buffer.buf != NULL) {
|
|
||||||
cu2du.uE_CapabilityRAT_ContainerList = UE->ue_cap_buffer.buf;
|
|
||||||
cu2du.uE_CapabilityRAT_ContainerList_length = UE->ue_cap_buffer.len;
|
|
||||||
}
|
|
||||||
|
|
||||||
f1_ue_data_t ue_data = cu_get_f1_ue_data(UE->rrc_ue_id);
|
|
||||||
if (ue_data.du_assoc_id == 0) {
|
|
||||||
LOG_E(NR_RRC, "cannot send data: invalid assoc_id 0, DU offline\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
gNB_RRC_INST *rrc = RC.nrrrc[0];
|
|
||||||
f1ap_ue_context_modif_req_t ue_context_modif_req = {
|
|
||||||
.gNB_CU_ue_id = UE->rrc_ue_id,
|
|
||||||
.gNB_DU_ue_id = ue_data.secondary_ue,
|
|
||||||
.plmn.mcc = rrc->configuration.mcc[0],
|
|
||||||
.plmn.mnc = rrc->configuration.mnc[0],
|
|
||||||
.plmn.mnc_digit_length = rrc->configuration.mnc_digit_length[0],
|
|
||||||
.nr_cellid = rrc->nr_cellid,
|
|
||||||
.servCellId = 0, /* TODO: correct value? */
|
|
||||||
.cu_to_du_rrc_information = &cu2du,
|
|
||||||
};
|
|
||||||
rrc->mac_rrc.ue_context_modification_request(ue_data.du_assoc_id, &ue_context_modif_req);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1535,14 +1493,6 @@ static void handle_rrcReconfigurationComplete(const protocol_ctxt_t *const ctxt_
|
|||||||
LOG_I(RRC, "UE %d: transaction %d still ongoing for action %d\n", UE->rrc_ue_id, i, UE->xids[i]);
|
LOG_I(RRC, "UE %d: transaction %d still ongoing for action %d\n", UE->rrc_ue_id, i, UE->xids[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* if we did not receive any UE Capabilities, let's do that now. It should
|
|
||||||
* only happen on the first time a reconfiguration arrives. Afterwards, we
|
|
||||||
* should have them. If the UE does not give us anything, we will re-request
|
|
||||||
* the capabilities after each reconfiguration, which is a finite number */
|
|
||||||
if (UE->ue_cap_buffer.len == 0) {
|
|
||||||
rrc_gNB_generate_UECapabilityEnquiry(ctxt_pP, ue_context_p);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
int rrc_gNB_decode_dcch(const protocol_ctxt_t *const ctxt_pP,
|
int rrc_gNB_decode_dcch(const protocol_ctxt_t *const ctxt_pP,
|
||||||
@@ -1650,7 +1600,9 @@ int rrc_gNB_decode_dcch(const protocol_ctxt_t *const ctxt_pP,
|
|||||||
nr_rrc_pdcp_config_security(ctxt_pP, ue_context_p, 1);
|
nr_rrc_pdcp_config_security(ctxt_pP, ue_context_p, 1);
|
||||||
ue_context_p->ue_context.as_security_active = true;
|
ue_context_p->ue_context.as_security_active = true;
|
||||||
|
|
||||||
rrc_gNB_generate_defaultRRCReconfiguration(ctxt_pP, ue_context_p);
|
/* trigger UE capability enquiry if we don't have them yet */
|
||||||
|
if (ue_context_p->ue_context.ue_cap_buffer.len == 0)
|
||||||
|
rrc_gNB_generate_UECapabilityEnquiry(ctxt_pP, ue_context_p);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NR_UL_DCCH_MessageType__c1_PR_securityModeFailure:
|
case NR_UL_DCCH_MessageType__c1_PR_securityModeFailure:
|
||||||
|
|||||||
Reference in New Issue
Block a user