ggsn: Submit User Location Information in CreatePDPContextReq

According to TS 29.060, sec 7.3.1 Create PDP Context Request:
"""
The SGSN shall include the User Location Information IE in the PDP
Context Activation procedure. The SGSN shall include the CGI or SAI
in the "Geographic Location" field of the User Location Information
IE depending on whether the MS is in a cell or a service area
respectively.
"""

Change-Id: Iaea95e5779d4f878023ce3f160ac69f092452056
This commit is contained in:
Pau Espin 2022-02-02 10:42:01 +01:00
parent 38aeffb9be
commit ca587f154c
2 changed files with 34 additions and 7 deletions

View File

@ -84,7 +84,8 @@ module GGSN_Tests {
OCT4 teid_remote,
/* TEI (Control) remote side */
OCT4 teic_remote,
OCT1 ratType optional
OCT1 ratType optional,
UserLocationInformation uli optional
}
type component GT_CT {
@ -246,7 +247,15 @@ module GGSN_Tests {
eua := eua,
teid := f_rnd_tei(),
teic := f_rnd_tei(),
ratType := ratType
ratType := ratType,
uli := {
type_gtpc := '98'O,
lengthf := 0 /* filled in by encoder */,
geographicLocationType := '00'O /* CGI */,
geographicLocation := {
geographicLocationCGI := ts_GeographicLocationCGI('262'H, '42F'H, '0001'O, '0002'O)
}
}
}
/* send GTP-C for a given context and increment sequence number */
@ -318,7 +327,7 @@ 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));
g_sgsn_ip_c, g_sgsn_ip_u, ctx.msisdn, ctx.pco_req, ctx.ratType, ctx.uli));
T_default.start;
d := activate(pingpong());
alt {

View File

@ -301,11 +301,28 @@ module GTP_Templates {
return rt;
}
template (value) GeographicLocationCGI
ts_GeographicLocationCGI(template (value) hexstring mcc,
template (value) hexstring mnc,
template (value) OCT2 lac,
template (value) OCT2 cI_value) :=
{
mccDigit1 := mcc[0],
mccDigit2 := mcc[1],
mccDigit3 := mcc[2],
mncDigit3 := mnc[2], /* 'F'H for 2 digit MNC */
mncDigit1 := mnc[0],
mncDigit2 := mnc[1],
lac := lac,
cI_value := cI_value
}
template GTPC_PDUs ts_CreatePdpPDU(hexstring imsi, OCT1 restart_ctr, OCT4 teid_data, OCT4 teid_ctrl,
BIT4 nsapi, EndUserAddress eua, octetstring apn,
octetstring sgsn_ip_sign, octetstring sgsn_ip_data,
octetstring msisdn, template ProtConfigOptions pco := omit,
template (omit) OCT1 ratType := omit) := {
template (omit) OCT1 ratType := omit,
template (omit) UserLocationInformation uli := omit) := {
createPDPContextRequest := {
imsi := ts_Imsi(imsi),
rai := omit,
@ -345,7 +362,7 @@ module GTP_Templates {
commonFlags := omit,
aPN_Restriction := omit,
ratType := f_ts_RATType(ratType),
userLocationInformation := omit,
userLocationInformation := uli,
mS_TimeZone := omit,
imeisv := omit,
camelChargingInformationContainer := omit,
@ -367,12 +384,13 @@ module GTP_Templates {
octetstring apn, octetstring sgsn_ip_sign,
octetstring sgsn_ip_data, octetstring msisdn,
template ProtConfigOptions pco := omit,
template (omit) OCT1 ratType := omit) := {
template (omit) OCT1 ratType := omit,
template (omit) UserLocationInformation uli := 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)), seq)
sgsn_ip_data, msisdn, pco, ratType, uli)), seq)
}