Skip to content

udr_diameter: emit QoS profile, MSISDN, real APN in ULA Subscription-Data - #35

Merged
next-nf merged 1 commit into
mainfrom
s6a-ula-qos-msisdn
Jul 27, 2026
Merged

next-nf merged 1 commit into
mainfrom
s6a-ula-qos-msisdn

Conversation

@next-nf

@next-nf next-nf commented Jul 27, 2026

Copy link
Copy Markdown
Owner

What

Fills out the S6a ULA Subscription-Data so it carries what a real MME/SGW needs for a full attach. Previously it emitted only Subscriber-Status, optional AMBR, and a bare APN-Configuration with a hardcoded Service-Selection of "default" — no default-bearer QoS, no MSISDN, no real APN.

Why

Reviewing real S6a attach captures from live eNBs/MME against a production HSS showed the reference ULA additionally carries, and the MME consumes:

  • EPS-Subscribed-QoS-Profile (QCI + ARP) inside APN-Configuration — the default-bearer QoS;
  • MSISDN in Subscription-Data;
  • the subscriber's real APN in Service-Selection.

Our codec emitted none of these — the gap the honest per-procedure doc had flagged as "Subscription-Data currently minimal."

Changes

  • Dictionary (diameter_3gpp_s6a.dia): add MSISDN (701), EPS-Subscribed-QoS-Profile (1431), QoS-Class-Identifier (1028), Allocation-Retention-Priority (1034), Priority-Level (1046), Pre-emption-Capability/Vulnerability (1047/1048), with enums; grow APN-Configuration (+QoS profile) and Subscription-Data (+MSISDN).
  • Codec (subscription_data/1): emit MSISDN (TBCD per TS 23.008), Service-Selection from apn_config_profile.apn (falls back to "default"), and EPS-Subscribed-QoS-Profile (QCI + ARP) from apn_config_profile.qos, when provisioned.
  • Docs: correct update-location.md's deferred list to the fields that genuinely remain unemitted (Access-Restriction-Data, Network-Access-Mode, RAU-TAU-Timer, per-APN AMBR, multiple APN configs, Supported-Features).

Additive and backward-compatible: a minimal stored profile still yields the prior, thinner ULA. apn_config_profile is a free-form pass-through map and msisdn is a first-class subscription field, so no provisioning-layer change is required — provisioned values flow straight to the wire.

Tests

TDD: three new codec round-trip tests written first and watched fail, then made to pass:

  • ula_returns_msisdn — asserts the exact TBCD wire bytes;
  • ula_returns_provisioned_apnService-Selection is the provisioned APN, not the fallback;
  • ula_returns_qos_profileEPS-Subscribed-QoS-Profile carries QCI + ARP (priority + pre-emption).

Fixture values are synthetic (no identifiers from the source captures). Verified locally with rebar3 3.26.0 / OTP 29: 59/59 across codec + ULR + integration + ISD suites, and dialyzer clean.

🤖 Generated with Claude Code

…Data

The ULA Subscription-Data was minimal — Subscriber-Status, optional AMBR, and a
bare APN-Configuration with a hardcoded Service-Selection of "default". A real
MME/SGW additionally expects the default APN's EPS-Subscribed-QoS-Profile (QCI +
ARP) to set up the default bearer, plus the subscriber's MSISDN and real APN.

Extend the S6a dictionary with MSISDN (701), EPS-Subscribed-QoS-Profile (1431),
QoS-Class-Identifier (1028), Allocation-Retention-Priority (1034), Priority-Level
(1046) and Pre-emption-Capability/Vulnerability (1047/1048), and grow
APN-Configuration (+QoS profile) and Subscription-Data (+MSISDN).

subscription_data/1 now emits, when provisioned:
- MSISDN, TBCD-encoded per TS 23.008;
- Service-Selection from apn_config_profile.apn (falling back to "default");
- EPS-Subscribed-QoS-Profile (QCI + ARP) from apn_config_profile.qos.

All additive and backward-compatible: a minimal stored profile still yields the
previous, thinner ULA. apn_config_profile is a free-form pass-through map and
msisdn is a first-class subscription field, so no provisioning-layer change is
needed. update-location.md's deferred list is corrected to the fields that remain
unemitted (Access-Restriction-Data, Network-Access-Mode, RAU-TAU-Timer, per-APN
AMBR, multiple APN configs, Supported-Features).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@next-nf
next-nf merged commit 26ee9e6 into main Jul 27, 2026
5 checks passed
@next-nf
next-nf deleted the s6a-ula-qos-msisdn branch July 27, 2026 13:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant