Multi-QoS Handling and PDU Session Modify
This MR implements comprehensive QoS flows handling and PDU Session Modify procedures in the RRC layer, enabling full support for multiple QoS flows per DRB and dynamic QoS management per 3GPP specs. Key changes:
1. Multi-QoS Flows Support
- Multiple QoS flows per DRB: Support for multiple QoS flows mapped to a single DRB
- Intelligent QoS-to-DRB mapping: Implements resource-type-aware multiplexing based on 3GPP TS 23.501 Table 5.7.4-1
- DC-GBR flows (5QI 82-90): Dedicated DRB, max 1 flow per DRB
- GBR flows (5QI 1-4, 65-67, 71-76): Max 2 flows per DRB
- Non-GBR flows (5QI 5-11, 69-70, 79-80): Max 5 flows per DRB
- Aggregate cap: Maximum 5 flows per DRB
- 5QI validation: Early validation of standardized 5QI values (1-9, 65-90) during QoS flow setup/modify
2. PDU Session Modify Procedures
- Complete E1AP/RRC integration: Full Bearer Context Modification support with DRB lifecycle management
- DRB To Setup/Modify/Remove lists: Complete support for all DRB operations in Bearer Context Modification
- QoS flow operations: Support for QoS flow add, modify, and release operations
- QoS flow mapping: Proper handling of QoS flow modifications in DRB To Modify List
- Automatic DRB management: DRB setup, modification, and removal based on QoS flow changes. Reuse existing DRBs if the incoming QoS flow is compatible.
- Delayed transactions: PDU Session Modify added to delayed transactions list for proper sequencing
3. GTP-U Tunnel Refactoring
- Architecture alignment:
- N3 tunnels: 1 per PDU session with QFI marking, container for multiple bearers, supporting multiple QoS flows
- F1-U tunnels: 1 per DRB without QFI marking
- SDAP ownership of QoS: move QoS management to be fully owned by SDAP
4. QoS Enhancements
- Dynamic5QI support: Full support for Dynamic5QI with packet delay budget and packet error rate
- GBR QoS flows: Support for Guaranteed Bit Rate QoS flows with GFBR/MFBR parameters
- DRB QoS aggregation: DRB-level QoS computed from all mapped QoS flows using ARP priority (not 5QI priority)
- QoS priority level refactoring: Proper type definitions per 3GPP TS 23.501 (QoS Priority Level: 1-127, ARP Priority Level: 1-15)
Technical Changes
RRC Layer
- Refactored
nr_rrc_add_bearers()to support intelligent QoS-to-DRB mapping - Added
nr_rrc_update_qos()for QoS flow add/modify with automatic DRB assignment - Implemented
nr_rrc_update_pdusession()for QoS flow release and DRB cleanup - Consolidated F1 UE Context Modification Request handling
- Simplified PDU status tracking by removing intermediate states
- Added QoS flow and DRB removal utilities
- Updated RRC bearers tests with comprehensive multi-QoS testing
- Adapted
nr-cuup-load-test.cto new GTP design
NGAP Layer
- Extended PDU Session Resource Modify Request Transfer with QoS add/modify/release lists
- Added proper type definitions (
pdusession_mod_req_transfer_t,qos_flow_to_release_t) - Fixed NGAP PDU Session Modify transfer encoding
GTP-U Layer
- Refactored tunnel creation API: scalar fields instead of arrays
- Split tunnel creation into
n3_gtpu_create()andf1_drb_gtpu_create() - Added bearer-to-QFI mapping structure (
gtpv1u_rb_t) - Implemented QFI de-duplication and one-to-one QFI-to-bearer mapping
- Reduced inter-dependencies between LTE and NR
SDAP Layer
- Fixed default DRB tracking: Only one default DRB per SDAP entity per PDU session (TS 37.324)
- Set default DRB to first DRB added when creating bearers
F1AP Layer
- Added GBR QoS Flow Information IE handling in CU
- Implemented DRB QoS aggregation from multiple QoS flows
- Extended F1AP test cases to support multiple QoS flows
Code Quality Improvements
- Improved error handling throughout the stack
- Enhanced logging and debugging capabilities
- Added comprehensive unit tests for multi-QoS scenarios
- Improved type safety and validation
Testing
The code was validated with Open5gs v2.7.6, OAI CN5G and COTS UE.
How to reproduce with Open5gs:
- Start Open5gs
- From the Open5gs web UI: add multiple QFIs to the same DNN.
- Restart Open5gs
- Run gNB and UE
The user will see the following:
- QoS flows arrive via NGAP PDU Session Setup/Modify requests, each with a QFI and 5QI.
- The gNB assigns each flow to a DRB, creating a new DRB or reusing an existing one based on 5QI compatibility (compatible flows, i.e. same 5QI characteristics, share a DRB)
- At the SDAP layer, packets are tagged with QFI headers; at the GTP-U layer, uplink packets include QFI in the PDU Session Container for core network mapping.
Documentation
- Added comprehensive QoS flows handling documentation with 3GPP standards references
- Updated PDU Session Modify sequence diagrams
Note
- This implementation aligns with:
- 3GPP TS 23.501 (QoS framework)
- 3GPP TS 38.413 (NGAP)
- 3GPP TS 37.324 (SDAP)
- 3GPP TS 38.463 (F1AP)
- 3GPP TS 29.281 (GTP-U)
- 3GPP TS 38.331 (RRC)
- Multi-QoS and PDU Session Modify are both added to this MR since QoS flows update is triggered by PDU Session Modify in some scenarios (e.g. with Open5gs, used for validation).
- Core functional changes introduced by commits with prefix "QoS Handling" or "PDU Session Modify"
- This MR replaces the old !2703 (closed).
- This MR adopts relevant CU changes from !2836 (closed), namely:
- Adds new shared QoS types
- Add standardized 5QI table and helper
- Dynamic5QI support + validation
- Computation of DRB QoS (aggregate QoS) and priority/GBR
- F1AP DRB-level QoS
- Closes #541 (closed) (5QI validation)
- Closes #1075 (closed) (Optional NAS-PDU in PDU Session Setup Request)
Edited by Guido Casati