ggsn: TC_gy_charging_volume_quota_threshold: Fix Gy Threshold/Quota expectancies

open5gs got the Gy Thresholds fixed recently
(e078b33f0c4d6f34d8991f8ad211dd2d9ea977a0).

AS shown in 3GPP TS 29.244 C.2.1.1 diagram, in Diameter Gy the value
sets the trigger for the "remaining credit", not the "used credit".
"ThresholdPFCP = Quota - ThresholdGy"

The test needs to be adapted since it was wrong too.

Change-Id: Ia283ad4919813241e3c33465ba4be2d2e33f5e54
This commit is contained in:
Pau Espin 2024-04-16 12:11:24 +02:00 committed by pespin
parent 831cb69a93
commit 47384ba910
2 changed files with 18 additions and 9 deletions

View File

@ -159,7 +159,8 @@ module GGSN_Tests {
port DIAMETER_PT Gy_UNIT;
port DIAMETEREM_PROC_PT Gy_PROC;
var integer g_gy_validity_time := 0; /* In seconds. 0 => disabled, !0 => grant over CC-Time period */
var integer g_gy_volume_threshold := 0; /* In octets. 0 => disabled, !0 => request IUT to revalidate after N octets */
var integer g_gy_volume_quota := 0; /* In octets. 0 => disabled, !0 => request IUT to revalidate after N octets */
var integer g_gy_volume_threshold := 0; /* In octets. Request IUT to revalidate at N octets before reaching g_gy_volume_quota */
var PDU_DIAMETER g_rx_gy; /* Store last received Gy message */
}
@ -685,12 +686,17 @@ module GGSN_Tests {
avp := f_DIAMETER_get_avp(g_rx_gy, c_AVP_Code_DCC_NONE_CC_Request_Number);
req_num := valueof(avp.avp_data.avp_DCC_NONE_CC_Request_Number);
if (g_gy_validity_time > 0) {
if (g_gy_volume_threshold > 0) {
tx_dia := ts_DIA_Gy_CCA_ValidityTimeVolumeThreshold(g_rx_gy.hop_by_hop_id, g_rx_gy.end_to_end_id, sess_id,
req_type, req_num, g_gy_validity_time, g_gy_volume_threshold);
if (g_gy_volume_quota > 0) {
tx_dia := ts_DIA_Gy_CCA_ValidityTimeVolumeThreshold(
g_rx_gy.hop_by_hop_id, g_rx_gy.end_to_end_id,
sess_id, req_type, req_num,
g_gy_validity_time,
g_gy_volume_quota, g_gy_volume_threshold);
} else {
tx_dia := ts_DIA_Gy_CCA_ValidityTime(g_rx_gy.hop_by_hop_id, g_rx_gy.end_to_end_id, sess_id,
req_type, req_num, g_gy_validity_time);
tx_dia := ts_DIA_Gy_CCA_ValidityTime(
g_rx_gy.hop_by_hop_id, g_rx_gy.end_to_end_id,
sess_id, req_type, req_num,
g_gy_validity_time);
}
} else {
tx_dia := ts_DIA_Gy_CCA(g_rx_gy.hop_by_hop_id, g_rx_gy.end_to_end_id, sess_id,
@ -2167,7 +2173,8 @@ module GGSN_Tests {
testcase TC_gy_charging_volume_quota_threshold() runs on GT_CT {
var default d;
timer Tout;
g_gy_volume_threshold := 1000; /* Will make a trigger when we send bigger payload below */
g_gy_volume_quota := 10000; /* Allow for sending 10000 bytes */
g_gy_volume_threshold := 9000; /* Will make a trigger when we send bigger payload below (10000-9000 = 1000 bytes) */
g_gy_validity_time := 8; /* Grant access for 8 seconds, needs to be re-validated afterwards */
f_init();
var float tout_sec := int2float(g_gy_validity_time) / 2.0;

View File

@ -107,7 +107,9 @@ ts_DIA_Gy_CCA_ValidityTimeVolumeThreshold(template (value) UINT32 hbh_id, templa
template (value) octetstring sess_id,
template (value) DCC_NONE_CC_Request_Type req_type,
template (value) AVP_Unsigned32 req_num,
uint32_t validity_time, uint32_t volume_threhsold)
uint32_t validity_time,
uint32_t volume_quota,
uint32_t volume_threhsold := 0)
:= ts_DIAMETER(flags:='01000000'B, cmd_code:=Credit_Control,
app_id:=int2oct(c_DIAMETER_CREDIT_CONTROL_AID, 4), hbh_id:=hbh_id, ete_id:=ete_id,
avps := {
@ -121,7 +123,7 @@ ts_DIA_Gy_CCA_ValidityTimeVolumeThreshold(template (value) UINT32 hbh_id, templa
ts_AVP_Multiple_Services_Credit_Control({
ts_AVP_Validity_Time(validity_time),
ts_AVP_Granted_Service_Unit({
ts_AVP_CC_Total_Octets(volume_threhsold*100)
ts_AVP_CC_Total_Octets(volume_quota)
}),
ts_AVP_3GPP_VolumeQuotaThreshold(volume_threhsold)
})