nickvsnetworking / pyhss

Python HSS / Diameter Server
GNU Affero General Public License v3.0
71 stars 59 forks source link

PyHSS is sending AVP Rating-Group(432) in the Gx credit control answer causing SMF to crash. #184

Closed svinson1121 closed 9 months ago

svinson1121 commented 9 months ago

SMF CRASH: 01/20 01:58:35.052: [smf] INFO: [Added] Number of SMF-UEs is now 1 (../src/smf/context.c:1019) 01/20 01:58:35.052: [smf] INFO: [Added] Number of SMF-Sessions is now 1 (../src/smf/context.c:3068) 01/20 01:58:35.052: [smf] INFO: UE IMSI[311435000070570] APN[internet] IPv4[10.45.10.68] IPv6[] (../src/smf/s5c-handler.c:275) 01/20 01:58:35.405: [smf] ERROR: Not implemented(432) (../src/smf/gx-path.c:1572) 01/20 01:58:35.407: [gtp] INFO: gtp_connect() [10.90.250.25]:2152 (../lib/gtp/path.c:60) 01/20 01:58:35.407: [smf] FATAL: smf_bearer_tft_update: should not be reached. (../src/smf/context.c:2579) 01/20 01:58:35.408: [core] FATAL: backtrace() returned 12 addresses (../lib/core/ogs-abort.c:37) /usr/bin/open5gs-smfd(+0x17e80) [0x5609d790ee80] /usr/bin/open5gs-smfd(+0x45d81) [0x5609d793cd81] /usr/bin/open5gs-smfd(+0x25614) [0x5609d791c614] /usr/lib/x86_64-linux-gnu/libogscore.so.2(ogs_fsm_dispatch+0x25) [0x7ff617f49c15] /usr/lib/x86_64-linux-gnu/libogscore.so.2(ogs_fsm_dispatch+0x25) [0x7ff617f49c15] /usr/bin/open5gs-smfd(+0x18ffa) [0x5609d790fffa] /usr/lib/x86_64-linux-gnu/libogscore.so.2(ogs_fsm_dispatch+0x25) [0x7ff617f49c15] /usr/bin/open5gs-smfd(+0x1088b) [0x5609d790788b] /usr/lib/x86_64-linux-gnu/libogscore.so.2(+0xa345) [0x7ff617f3b345] /usr/lib/x86_64-linux-gnu/libc.so.6(+0x94ac3) [0x7ff6170b3ac3] /usr/lib/x86_64-linux-gnu/libc.so.6(+0x126850) [0x7ff617145850] Open5GS daemon v2.7.0

Looks like AVP 432 should not be in the Gx credit control answer from my reading.

AVP-432-Gx.pcap.zip

setting the Rating Group to NULL in the DB was a quick fix for this issue.

davidkneipp commented 9 months ago

From what I can see in the PCAP, Rating-Group is correctly nested under Charging-Rule-Definition.

Rating group is a valid AVP inside Charging-Rule-Definition per 3GPP TS 29.212:

Charging-Rule-Install ::= < AVP Header: 1001 >
*[ Charging-Rule-Definition ]
*[ Charging-Rule-Name ]
*[ Charging-Rule-Base-Name ]
[ Bearer-Identifier ]
[ Monitoring-Flags ]
[ Rule-Activation-Time ]
[ Rule-Deactivation-Time ]
[ Resource-Allocation-Notification ]
[ Charging-Correlation-Indicator ]
[ IP-CAN-Type ]
*[ AVP ]
Charging-Rule-Definition ::= < AVP Header: 1003 >
{ Charging-Rule-Name }
[ Service-Identifier ]
[ Rating-Group ]
*[ Flow-Information ]
[ Default-Bearer-Indication ]
[ TDF-Application-Identifier ]
[ Flow-Status ]
[ QoS-Information ]
[ PS-to-CS-Session-Continuity ]
[ Reporting-Level ]
[ Online ]
[ Offline ]
[ Max-PLR-DL ]
[ Max-PLR-UL ]
[ Metering-Method ]
[ Precedence ]
[ AF-Charging-Identifier ]
*[ Flows ]
[ Monitoring-Key]
[ Redirect-Information ]
[ Mute-Notification ]
[ AF-Signalling-Protocol ]
[ Sponsor-Identity ]
[ Application-Service-Provider-Identity ]
*[ Required-Access-Info ]
[ Sharing-Key-DL ]
[ Sharing-Key-UL ]
[ Traffic-Steering-Policy-Identifier-DL ]
[ Traffic-Steering-Policy-Identifier-UL ]
[ Content-Version ]
*[ AVP ]

The freediameter dictionary in open5gs might need updating, or their assert condition replaced with an ignore.

Further information: https://dstest.info/DiaDict/Dictionary/Credit-Control-Answer_Gx.html

Thank you for sharing your interim fix.

svinson1121 commented 9 months ago

David, I see you are absolutely correct. I will raise this issue with the open5gs team. Thank you for the reply.