Enable multiple PDU Sessions in handover request logic

- Process all PDU sessions in handover request instead of only the first one
- Add DevAssert for bounds checking on nb_of_pdusessions
- Fix logic error where multiple PDU sessions were ignored in handover scenarios
This commit is contained in:
Guido Casati
2025-09-24 14:37:32 +02:00
parent 9a4fd1bf76
commit 42a9f2f08f
+13 -8
View File
@@ -1138,14 +1138,19 @@ int rrc_gNB_process_Handover_Request(gNB_RRC_INST *rrc, instance_t instance, nga
activate_srb(UE, SRB2);
nr_rrc_pdcp_config_security(UE, false);
// Copy PDU Session Resource Setup item to RRC struct and do PDU Session Resource Setup procedure
pdusession_t to_setup = {
.nssai = msg->pduSessionResourceSetupList->nssai,
.pdu_session_type = msg->pduSessionResourceSetupList->pdu_session_type ,
.pdusession_id = msg->pduSessionResourceSetupList->pdusession_id,
};
cp_pdusession_transfer_to_pdusession(&to_setup, &msg->pduSessionResourceSetupList->pdusessionTransfer);
if (!trigger_bearer_setup(rrc, UE, msg->nb_of_pdusessions, &to_setup, msg->ue_ambr.br_dl)) {
// Process all PDU Session Resource Setup items from handover request
DevAssert(msg->nb_of_pdusessions <= NGAP_MAX_PDU_SESSION);
pdusession_t to_setup[NGAP_MAX_PDU_SESSION];
for (int i = 0; i < msg->nb_of_pdusessions; i++) {
ho_request_pdusession_t *ho_pdu = &msg->pduSessionResourceSetupList[i];
pdusession_t *pdu = &to_setup[i];
pdu->nssai = ho_pdu->nssai;
pdu->pdu_session_type = ho_pdu->pdu_session_type;
pdu->pdusession_id = ho_pdu->pdusession_id;
cp_pdusession_transfer_to_pdusession(pdu, &ho_pdu->pdusessionTransfer);
}
if (!trigger_bearer_setup(rrc, UE, msg->nb_of_pdusessions, to_setup, msg->ue_ambr.br_dl)) {
LOG_E(NR_RRC, "Failed to establish PDU session: handover failed\n");
ngap_handover_failure_t fail = {
.amf_ue_ngap_id = msg->amf_ue_ngap_id,