From c99f836ad4e1b6a23c40385f7fc4b8a8fcabf532 Mon Sep 17 00:00:00 2001 From: Guido Casati Date: Wed, 24 Sep 2025 14:01:41 +0200 Subject: [PATCH] Refactor DRB release handling to use actual DRB IDs - Replace simple counter-based DRB ID assignment with actual DRB ID lookup - Add nested loop to iterate through DRBs for each PDU session to be release - Improve logic flow with early continue for non-matching PDU sessions This ensures DRB release list contains correct DRB IDs that correspond to actual DRB entities --- openair2/RRC/NR/rrc_gNB.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/openair2/RRC/NR/rrc_gNB.c b/openair2/RRC/NR/rrc_gNB.c index 4af378dd81..cc766b9d81 100644 --- a/openair2/RRC/NR/rrc_gNB.c +++ b/openair2/RRC/NR/rrc_gNB.c @@ -836,11 +836,14 @@ void rrc_gNB_generate_dedicatedRRCReconfiguration_release(gNB_RRC_INST *rrc, nr_rrc_reconfig_param_t params = {.transaction_id = xid}; NR_DRB_ToReleaseList_t *to_release = CALLOC(sizeof(*to_release), 1); - int i = 0; FOR_EACH_SEQ_ARR(rrc_pdu_session_param_t *, item, &ue_p->pduSessions) { - if ((item->status == PDU_SESSION_STATUS_TORELEASE) && item->xid == xid) { - asn1cSequenceAdd(to_release->list, NR_DRB_Identity_t, DRB_release); - *DRB_release = ++i; // DRB ID + if ((item->status != PDU_SESSION_STATUS_TORELEASE) && item->xid != xid) + continue; + FOR_EACH_SEQ_ARR(drb_t *, drb, &ue_p->drbs) { + if (drb->pdusession_id == item->param.pdusession_id) { + asn1cSequenceAdd(to_release->list, NR_DRB_Identity_t, DRB_release); + *DRB_release = drb->drb_id; // DRB ID + } } } params.drb_release_list = to_release;