ggsn: Append ChargingCharacteristics IE to CreatePdpCtxReq

This IE is conditionally added if the HLR provides it to the SGSN.
Let's add it by default so that we test code paths where GGSN parses it.

Related: SYS#5925
Change-Id: Ia0f74041d2107afeaa36b94e33474370b7b07c0e
This commit is contained in:
Pau Espin 2022-05-12 17:58:50 +02:00
parent 07ea7f26be
commit 0e127870fb
2 changed files with 33 additions and 9 deletions

View File

@ -98,7 +98,8 @@ module GGSN_Tests {
/* TEI (Control) remote side */
OCT4 teic_remote,
OCT1 ratType optional,
UserLocationInformation uli optional
UserLocationInformation uli optional,
OCT2 charging_char optional
}
type component GT_CT {
@ -350,7 +351,8 @@ module GGSN_Tests {
geographicLocation := {
geographicLocationCGI := ts_GeographicLocationCGI('262'H, '42F'H, '0001'O, '0002'O)
}
}
},
charging_char := '0000'O
}
/* send GTP-C for a given context and increment sequence number */
@ -510,7 +512,8 @@ module GGSN_Tests {
log("sending CreatePDP");
f_send_gtpc(ts_GTPC_CreatePDP(g_peer_c, g_c_seq_nr, ctx.imsi, g_restart_ctr,
ctx.teid, ctx.teic, ctx.nsapi, ctx.eua, ctx.apn,
g_sgsn_ip_c, g_sgsn_ip_u, ctx.msisdn, ctx.pco_req, ctx.ratType, ctx.uli));
g_sgsn_ip_c, g_sgsn_ip_u, ctx.msisdn, ctx.pco_req, ctx.ratType,
ctx.uli, ctx.charging_char));
T_default.start;
d := activate(pingpong());
if (Gx_PROC.checkstate("Connected")) {
@ -2006,7 +2009,7 @@ module GGSN_Tests {
ctx[next_req_ctx].teid, ctx[next_req_ctx].teic, ctx[next_req_ctx].nsapi,
ctx[next_req_ctx].eua, ctx[next_req_ctx].apn, g_sgsn_ip_c, g_sgsn_ip_u,
ctx[next_req_ctx].msisdn, ctx[next_req_ctx].pco_req, ctx[next_req_ctx].ratType,
ctx[next_req_ctx].uli));
ctx[next_req_ctx].uli, ctx[next_req_ctx].charging_char));
next_req_ctx := next_req_ctx + 1;
if (next_req_ctx < num_ctx) {
T_next.start;
@ -2120,7 +2123,7 @@ module GGSN_Tests {
ctx.teid, ctx.teic, ctx.nsapi,
ctx.eua, ctx.apn, g_sgsn_ip_c, g_sgsn_ip_u,
ctx.msisdn, ctx.pco_req, ctx.ratType,
ctx.uli));
ctx.uli, ctx.charging_char));
next_req_ctx := next_req_ctx + 1;
}
T_next.start;

View File

@ -119,6 +119,25 @@ module GTP_Templates {
restartCounter := restart_counter
}
/* Charging Characteristics IE TS 29.060 7.7.23 */
template ChargingCharacteristics_GTPC ts_ChargingCharacteristics(template (value) OCT2 chargingChar) := {
type_gtpc := '1A'O,
chargingChar := chargingChar
}
private function f_ts_ChargingCharacteristics(template (omit) OCT2 chargingChar)
return template (omit) ChargingCharacteristics_GTPC {
if (istemplatekind(chargingChar, "omit")) {
return omit;
}
return ts_ChargingCharacteristics(chargingChar);
}
template ChargingCharacteristics_GTPC tr_ChargingCharacteristics(template (present) OCT2 chargingChar) := {
type_gtpc := '1A'O,
chargingChar := chargingChar
}
/* template matching reception of GTP-C echo-request */
template Gtp1cUnitdata tr_GTPC_MsgType(template GtpPeer peer, template OCT1 msg_type, template OCT4 teid, template GTPC_PDUs pdus := ?) := {
peer := peer,
@ -359,7 +378,8 @@ module GTP_Templates {
octetstring sgsn_ip_sign, octetstring sgsn_ip_data,
octetstring msisdn, template ProtConfigOptions pco := omit,
template (omit) OCT1 ratType := omit,
template (omit) UserLocationInformation uli := omit) := {
template (omit) UserLocationInformation uli := omit,
template (omit) OCT2 charging_char := omit) := {
createPDPContextRequest := {
imsi := ts_Imsi(imsi),
rai := omit,
@ -383,7 +403,7 @@ module GTP_Templates {
unused := '0000'B
},
linked_nsapi := omit,
charging_char := omit,
charging_char := f_ts_ChargingCharacteristics(charging_char),
trace_ref := omit,
trace_type := omit,
endUserAddress := eua,
@ -422,12 +442,13 @@ module GTP_Templates {
octetstring sgsn_ip_data, octetstring msisdn,
template ProtConfigOptions pco := omit,
template (omit) OCT1 ratType := omit,
template (omit) UserLocationInformation uli := omit) := {
template (omit) UserLocationInformation uli := omit,
template (omit) OCT2 charging_char := omit) := {
peer := peer,
gtpc := ts_GTP1C_PDU(createPDPContextRequest, '00000000'O,
valueof(ts_CreatePdpPDU(imsi, restart_ctr, teid_data, teid_ctrl,
nsapi, eua, apn, sgsn_ip_sign,
sgsn_ip_data, msisdn, pco, ratType, uli)), seq)
sgsn_ip_data, msisdn, pco, ratType, uli, charging_char)), seq)
}