fix: PFCP Session Establishment Failures with Free5GC SMF
Summary
Resolves PFCP session establishment failures between Free5GC SMF and OAI UPF by tightening QER validation so GBR and non-GBR flows follow 3GPP rules. A companion patch (provided separately) restores missing PFCP IE parsing in oai-cn5g-common-src so the SMF-provided IEs reach the UPF.
Merge Dependencies
Must merge alongside:
Combined branch for validation: https://gitlab.eurecom.fr/oai/cn5g/oai-cn5g-upf/-/tree/fix-free5gc-integration-with-qos-fix?ref_type=heads
Problem Description
SMF received CAUSE_VALUE_CONDITIONAL_IE_MISSING (67) citing IE 49 and IE 100 because the UPF lacked parsers for those IEs and treated GBR as mandatory for every QER, breaking non-GBR flows.
Root Causes
- Unknown PFCP IE Type 100 (common-src patch): Measurement Information IE was commented out in the shared PFCP parser
- Unknown PFCP IE Type 49 (common-src patch): PFCPSMReq-Flags IE was commented out in the shared PFCP parser
- Incorrect GBR/MBR Validation (this MR): The UPF required GBR for all QoS flows, but per 3GPP TS 23.501, only GBR QoS flows require both MBR and GBR; non-GBR flows only require MBR
Changes Made
Changes in This MR
- Reworked QER validation (3GPP TS 23.501 5.7.3):
- GBR flows require MBR+GBR and ensure GBR ≤ MBR
- Non-GBR flows accept MBR only
- Best-effort flows accept neither
- Reject configurations that set GBR without MBR
- Improved logging to explain enforcement decisions and missing mandatory IEs (QFI, GBR/MBR combinations).
Companion Patch (oai-cn5g-common-src)
- Restores IE 49 (PFCPSMReq-Flags) and IE 100 (Measurement Information) parsing/encoding per 3GPP TS 29.244 8.2.31 & 8.2.68 so the Free5gc SMF messages align with the updated UPF checks.
- Provided as
measurement-ie.patchbecause the currentoai-cn5g-common-srcdevelop head is temporarily incompatible with UPF; see External Dependencies.
External Dependencies
- Requires matching updates in
oai-cn5g-common-srcfor IE 49 and IE 100 (seemeasurement-ie.patch). - Tracking issue: oai-cn5g-common-src#11 to realign the common repo with UPF.