gerrit-log
Threads by month
- ----- 2026 -----
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
January 2024
- 1 participants
- 1559 discussions
[M] Change in osmo-ttcn3-hacks[master]: GSUP_Types: Add missing message_class to EPDGTunnel* messages
by osmith 19 Jan '24
by osmith 19 Jan '24
19 Jan '24
Attention is currently required from: fixeria, laforge, lynxis lazus, pespin.
osmith has posted comments on this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/35604?usp=email )
Change subject: GSUP_Types: Add missing message_class to EPDGTunnel* messages
......................................................................
Patch Set 4: Code-Review+1
(1 comment)
File library/GSUP_Types.ttcn:
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/35604/comment/21a674a7_0d2b…
PS3, Line 734: ts_GSUP_IE_Message_Class
> Still the same problem here: it should be after the `Cause IE`.
Done
--
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/35604?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: Ib7d6156402645867cadc8d3e0ffdd07247a1abd2
Gerrit-Change-Number: 35604
Gerrit-PatchSet: 4
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: lynxis lazus <lynxis(a)fe80.eu>
Gerrit-Reviewer: osmith <osmith(a)sysmocom.de>
Gerrit-Attention: laforge <laforge(a)osmocom.org>
Gerrit-Attention: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Attention: pespin <pespin(a)sysmocom.de>
Gerrit-Attention: lynxis lazus <lynxis(a)fe80.eu>
Gerrit-Comment-Date: Fri, 19 Jan 2024 09:33:13 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: Yes
Comment-In-Reply-To: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-MessageType: comment
1
0
[L] Change in osmocom-bb[master]: mobile: implement sending CSD data over UNIX socket
by jolly 19 Jan '24
by jolly 19 Jan '24
19 Jan '24
Attention is currently required from: fixeria.
jolly has posted comments on this change. ( https://gerrit.osmocom.org/c/osmocom-bb/+/35583?usp=email )
Change subject: mobile: implement sending CSD data over UNIX socket
......................................................................
Patch Set 5:
(1 comment)
File src/host/layer23/src/mobile/tch_data_sock.c:
https://gerrit.osmocom.org/c/osmocom-bb/+/35583/comment/5b8bfdbf_1e44c40f
PS5, Line 168: osmo_fd_read_disable(&state->listen_bfd);
You disable read of socket listening fd. This would cause any other client connection to lock until read is enabled again. Maybe you want to reject any other connection instead by closing the socket, while there is already a socket client connection.
--
To view, visit https://gerrit.osmocom.org/c/osmocom-bb/+/35583?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmocom-bb
Gerrit-Branch: master
Gerrit-Change-Id: Id054af7b3d9d0a41715f7981deb420f6e09bf30c
Gerrit-Change-Number: 35583
Gerrit-PatchSet: 5
Gerrit-Owner: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: osmith <osmith(a)sysmocom.de>
Gerrit-CC: jolly <andreas(a)eversberg.eu>
Gerrit-Attention: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Comment-Date: Fri, 19 Jan 2024 09:09:53 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Gerrit-MessageType: comment
1
0
[L] Change in osmocom-bb[master]: mobile: split voice specific TCH handling into its own file
by jolly 19 Jan '24
by jolly 19 Jan '24
19 Jan '24
Attention is currently required from: fixeria, pespin.
jolly has posted comments on this change. ( https://gerrit.osmocom.org/c/osmocom-bb/+/35581?usp=email )
Change subject: mobile: split voice specific TCH handling into its own file
......................................................................
Patch Set 4:
(1 comment)
File src/host/layer23/src/mobile/tch.c:
https://gerrit.osmocom.org/c/osmocom-bb/+/35581/comment/53457f43_93ca39fe
PS4, Line 111: tch_voice_serve_ms(ms);
Why is the return value not forwarded? Is the return value of gapk_io_serve_ms() relevant for the user of this function.
--
To view, visit https://gerrit.osmocom.org/c/osmocom-bb/+/35581?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmocom-bb
Gerrit-Branch: master
Gerrit-Change-Id: Ib917d95fe77da3e60bc932cce56714d81095c7d4
Gerrit-Change-Number: 35581
Gerrit-PatchSet: 4
Gerrit-Owner: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: osmith <osmith(a)sysmocom.de>
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
Gerrit-CC: jolly <andreas(a)eversberg.eu>
Gerrit-Attention: pespin <pespin(a)sysmocom.de>
Gerrit-Attention: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Comment-Date: Fri, 19 Jan 2024 08:23:33 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Gerrit-MessageType: comment
1
0
[XL] Change in osmo-ttcn3-hacks[master]: Move templates from GSUP_Types.ttcn to GSUP_Templates.ttcn
by pespin 18 Jan '24
by pespin 18 Jan '24
18 Jan '24
pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/35617?usp=email )
Change subject: Move templates from GSUP_Types.ttcn to GSUP_Templates.ttcn
......................................................................
Move templates from GSUP_Types.ttcn to GSUP_Templates.ttcn
Follow similar structure that we have for other protocols.
Change-Id: I54cc8c99d1e91d57c3d5a92f6529ef2055e9d4ed
---
M dia2gsup/DIA2GSUP_Tests.ttcn
M dia2gsup/gen_links.sh
M epdg/EPDG_Tests.ttcn
M epdg/gen_links.sh
M hlr/HLR_EUSE.ttcn
M hlr/HLR_Tests.ttcn
M hlr/gen_links.sh
A library/GSUP_Templates.ttcn
M library/GSUP_Types.ttcn
M library/IPA_Emulation.ttcnpp
M msc/BSC_ConnectionHandler.ttcn
M msc/MSC_Tests.ttcn
M msc/gen_links.sh
M sgsn/SGSN_Tests.ttcn
M sgsn/gen_links.sh
15 files changed, 1,691 insertions(+), 1,631 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/17/35617/1
diff --git a/dia2gsup/DIA2GSUP_Tests.ttcn b/dia2gsup/DIA2GSUP_Tests.ttcn
index 6e59460..6d1828f 100644
--- a/dia2gsup/DIA2GSUP_Tests.ttcn
+++ b/dia2gsup/DIA2GSUP_Tests.ttcn
@@ -6,8 +6,9 @@
import from L3_Common all;
import from IPA_Emulation all;
-import from GSUP_Emulation all;
import from GSUP_Types all;
+import from GSUP_Templates all;
+import from GSUP_Emulation all;
import from DIAMETER_Types all;
import from DIAMETER_Templates all;
diff --git a/dia2gsup/gen_links.sh b/dia2gsup/gen_links.sh
index 52939f6..e343bd2 100755
--- a/dia2gsup/gen_links.sh
+++ b/dia2gsup/gen_links.sh
@@ -40,7 +40,7 @@
FILES+="DIAMETER_Templates.ttcn DIAMETER_ts29_272_Templates.ttcn "
FILES+="IPA_Types.ttcn IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc
IPA_Emulation.ttcnpp "
-FILES+="GSUP_Types.ttcn GSUP_Emulation.ttcn "
+FILES+="GSUP_Types.ttcn GSUP_Templates.ttcn GSUP_Emulation.ttcn "
gen_links $DIR $FILES
ignore_pp_results
diff --git a/epdg/EPDG_Tests.ttcn b/epdg/EPDG_Tests.ttcn
index 353c738..554dd07 100644
--- a/epdg/EPDG_Tests.ttcn
+++ b/epdg/EPDG_Tests.ttcn
@@ -7,8 +7,9 @@
import from L3_Common all;
import from IPA_Emulation all;
-import from GSUP_Emulation all;
import from GSUP_Types all;
+import from GSUP_Templates all;
+import from GSUP_Emulation all;
import from DIAMETER_Types all;
import from DIAMETER_Templates all;
diff --git a/epdg/gen_links.sh b/epdg/gen_links.sh
index bc9d90e..82a0785 100755
--- a/epdg/gen_links.sh
+++ b/epdg/gen_links.sh
@@ -45,7 +45,7 @@
FILES+="DIAMETER_Templates.ttcn DIAMETER_rfc5447_Templates.ttcn DIAMETER_ts29_273_Templates.ttcn "
FILES+="IPA_Types.ttcn IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc
IPA_Emulation.ttcnpp "
-FILES+="GSUP_Types.ttcn GSUP_Emulation.ttcn "
+FILES+="GSUP_Types.ttcn GSUP_Templates.ttcn GSUP_Emulation.ttcn "
FILES+="GTPv2_PrivateExtensions.ttcn GTPv2_Templates.ttcn "
FILES+="GTPv2_CodecPort.ttcn GTPv2_CodecPort_CtrlFunctDef.cc GTPv2_CodecPort_CtrlFunct.ttcn GTPv2_Emulation.ttcn "
gen_links $DIR $FILES
diff --git a/hlr/HLR_EUSE.ttcn b/hlr/HLR_EUSE.ttcn
index 17e4776..170bcd2 100644
--- a/hlr/HLR_EUSE.ttcn
+++ b/hlr/HLR_EUSE.ttcn
@@ -19,6 +19,7 @@
module HLR_EUSE {
import from GSUP_Types all;
+import from GSUP_Templates all;
import from IPA_Emulation all;
import from General_Types all;
diff --git a/hlr/HLR_Tests.ttcn b/hlr/HLR_Tests.ttcn
index 794ef9b..46b98c2 100644
--- a/hlr/HLR_Tests.ttcn
+++ b/hlr/HLR_Tests.ttcn
@@ -15,6 +15,7 @@
import from GSUP_Types all;
+import from GSUP_Templates all;
import from GSUP_Emulation all;
import from IPA_Emulation all;
diff --git a/hlr/gen_links.sh b/hlr/gen_links.sh
index c77920d..52e01ba 100755
--- a/hlr/gen_links.sh
+++ b/hlr/gen_links.sh
@@ -44,7 +44,8 @@
gen_links $DIR $FILES
DIR=../library
-FILES="Misc_Helpers.ttcn General_Types.ttcn Osmocom_Types.ttcn GSM_Types.ttcn IPA_Types.ttcn IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc IPA_Emulation.ttcnpp GSUP_Types.ttcn GSUP_Emulation.ttcn "
+FILES="Misc_Helpers.ttcn General_Types.ttcn Osmocom_Types.ttcn GSM_Types.ttcn IPA_Types.ttcn IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc IPA_Emulation.ttcnpp "
+FILES+="GSUP_Types.ttcn GSUP_Templates.ttcn GSUP_Emulation.ttcn "
FILES+="Osmocom_CTRL_Types.ttcn Osmocom_CTRL_Functions.ttcn Osmocom_CTRL_Adapter.ttcn "
FILES+="Osmocom_VTY_Functions.ttcn "
FILES+="SS_Templates.ttcn USSD_Helpers.ttcn "
diff --git a/library/GSUP_Templates.ttcn b/library/GSUP_Templates.ttcn
new file mode 100644
index 0000000..0e9a2e5
--- /dev/null
+++ b/library/GSUP_Templates.ttcn
@@ -0,0 +1,1650 @@
+module GSUP_Templates {
+
+/* GSUP_Templates, defining TTCN-3 templates for the GSUP protocol.
+ *
+ * GSUP is a non-standard protocol used between OsmoMSC/OsmoSGSN and OsmoHLR
+ * in order to replace the complex TCAP/MAP protocol.
+ *
+ * (C) 2017-2019 by Harald Welte <laforge(a)gnumonks.org>
+ * contributions by sysmocom - s.f.m.c. GmbH
+ * All rights reserved.
+ *
+ * Released under the terms of GNU General Public License, Version 2 or
+ * (at your option) any later version.
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+import from General_Types all;
+import from Osmocom_Types all;
+import from GSUP_Types all;
+
+function f_gsup_postprocess_decoded(inout GSUP_PDU gsup) {
+ if (gsup.ies[0].tag == OSMO_GSUP_IMSI_IE) {
+ /* if last digit is 'F', then there's an odd number of digits and we must strip the F */
+ var integer num_digits := lengthof(gsup.ies[0].val.imsi);
+ if (gsup.ies[0].val.imsi[num_digits-1] == 'F'H) {
+ gsup.ies[0].val.imsi := substr(gsup.ies[0].val.imsi, 0, num_digits-1);
+ }
+ }
+}
+
+function f_gsup_preprocess_encoded(inout GSUP_PDU gsup) {
+ if (ischosen(gsup.ies[0].val.imsi)) {
+ /* if number of digits is odd, add a 'F' as padding at the end */
+ var integer num_digits := lengthof(gsup.ies[0].val.imsi);
+ if (num_digits rem 2 == 1) {
+ gsup.ies[0].val.imsi := gsup.ies[0].val.imsi & 'F'H;
+ }
+ }
+}
+
+template (value) GSUP_MSISDN ts_GSUP_MSISDN(hexstring digits,
+ BIT3 ton := '000'B,
+ BIT4 npi := '0000'B) := {
+ len := 0, /* overwritten */
+ /* numberingPlanIdentification := npi,
+ typeOfNumber := ton,
+ ext1 := '0'B, */
+ digits := digits
+}
+
+template GSUP_MSISDN tr_GSUP_MSISDN(template hexstring digits,
+ template BIT3 ton := ?,
+ template BIT4 npi := ?) := {
+ len := ?,
+ /* numberingPlanIdentification := npi,
+ typeOfNumber := ton,
+ ext1 := '0'B, */
+ digits := digits
+}
+
+
+
+template GSUP_IE ts_GSUP_IE_AuthTuple2G(octetstring rand, octetstring sres,
+ octetstring kc) := {
+ tag := OSMO_GSUP_AUTH_TUPLE_IE,
+ len := 0, /* overwritten */
+ val := {
+ auth_tuple := {
+ valueof(ts_GSUP_IE_RAND(rand)),
+ valueof(ts_GSUP_IE_SRES(sres)),
+ valueof(ts_GSUP_IE_Kc(kc))
+ }
+ }
+}
+
+template GSUP_IE tr_GSUP_IE_AuthTuple3G(
+ template (present) octetstring rand := ?,
+ template (present) octetstring ik := ?,
+ template (present) octetstring ck := ?,
+ template (present) octetstring autn := ?,
+ template (present) octetstring res := ?) := {
+ tag := OSMO_GSUP_AUTH_TUPLE_IE,
+ len := ?,
+ val := {
+ auth_tuple := {
+ tr_GSUP_IE_RAND(rand),
+ tr_GSUP_IE_IK(ik),
+ tr_GSUP_IE_CK(ck),
+ tr_GSUP_IE_AUTN(autn),
+ tr_GSUP_IE_RES(res)
+ }
+ }
+}
+
+template GSUP_IE ts_GSUP_IE_AuthTuple3G(octetstring rand, octetstring ik,
+ octetstring ck, octetstring autn,
+ octetstring res) := {
+ tag := OSMO_GSUP_AUTH_TUPLE_IE,
+ len := 0, /* overwritten */
+ val := {
+ auth_tuple := {
+ valueof(ts_GSUP_IE_RAND(rand)),
+ valueof(ts_GSUP_IE_IK(ik)),
+ valueof(ts_GSUP_IE_CK(ck)),
+ valueof(ts_GSUP_IE_AUTN(autn)),
+ valueof(ts_GSUP_IE_RES(res))
+ }
+ }
+}
+
+template GSUP_IE tr_GSUP_IE_AuthTuple2G3G(
+ template (present) octetstring rand := ?,
+ template (present) octetstring sres := ?,
+ template (present) octetstring kc := ?,
+ template (present) octetstring ik := ?,
+ template (present) octetstring ck := ?,
+ template (present) octetstring autn := ?,
+ template (present) octetstring res := ?) := {
+ tag := OSMO_GSUP_AUTH_TUPLE_IE,
+ len := ?,
+ val := {
+ auth_tuple := {
+ tr_GSUP_IE_RAND(rand),
+ tr_GSUP_IE_SRES(sres),
+ tr_GSUP_IE_Kc(kc),
+ tr_GSUP_IE_IK(ik),
+ tr_GSUP_IE_CK(ck),
+ tr_GSUP_IE_AUTN(autn),
+ tr_GSUP_IE_RES(res)
+ }
+ }
+}
+
+template GSUP_IE ts_GSUP_IE_AuthTuple2G3G(octetstring rand, octetstring sres,
+ octetstring kc, octetstring ik,
+ octetstring ck, octetstring autn,
+ octetstring res) := {
+ tag := OSMO_GSUP_AUTH_TUPLE_IE,
+ len := 0, /* overwritten */
+ val := {
+ auth_tuple := {
+ valueof(ts_GSUP_IE_RAND(rand)),
+ valueof(ts_GSUP_IE_SRES(sres)),
+ valueof(ts_GSUP_IE_Kc(kc)),
+ valueof(ts_GSUP_IE_IK(ik)),
+ valueof(ts_GSUP_IE_CK(ck)),
+ valueof(ts_GSUP_IE_AUTN(autn)),
+ valueof(ts_GSUP_IE_RES(res))
+ }
+ }
+}
+
+template GSUP_IE ts_GSUP_IE_PdpInfo(octetstring apn, octetstring pdp_type, octetstring pdp_qos) := {
+ tag := OSMO_GSUP_PDP_INFO_IE,
+ len := 0, /* overwritten */
+ val := {
+ pdp_info := {
+ valueof(ts_GSUP_IE_APN(apn)),
+ valueof(ts_GSUP_IE_PDP_TYPE(pdp_type)),
+ valueof(ts_GSUP_IE_PDP_QOS(pdp_qos))
+ }
+ }
+}
+
+template (value) GSUP_IE ts_GSUP_IE_PDP_CONTEXT_ID(OCT1 ctx_id) := {
+ tag := OSMO_GSUP_PDP_CONTEXT_ID_IE,
+ len := 0,
+ val := {
+ pdp_ctx_id := ctx_id
+ }
+}
+
+template GSUP_IE tr_GSUP_IE_PDP_CONTEXT_ID(template OCT1 ctx_id) := {
+ tag := OSMO_GSUP_PDP_CONTEXT_ID_IE,
+ len := ?,
+ val := {
+ pdp_ctx_id := ctx_id
+ }
+}
+
+
+template (value) GSUP_IE ts_GSUP_IE_PDP_TYPE(OCT2 pdp_type) := {
+ tag := OSMO_GSUP_PDP_TYPE_IE,
+ len := 0,
+ val := {
+ pdp_type := pdp_type
+ }
+}
+
+template (value) GSUP_IE ts_GSUP_IE_PDP_QOS(octetstring pdp_qos) := {
+ tag := OSMO_GSUP_PDP_QOS_IE,
+ len := 0,
+ val := {
+ pdp_qos := pdp_qos
+ }
+}
+
+
+template GSUP_PDU tr_GSUP(template GSUP_MessageType msgt := ?, template GSUP_IEs ies := *) := {
+ msg_type := msgt,
+ ies := ies
+}
+
+template (present) GSUP_PDU tr_GSUP_IMSI(template (present) GSUP_MessageType msgt := ?, template (present) hexstring imsi := ?) := {
+ msg_type := msgt,
+ ies := { tr_GSUP_IE_IMSI(imsi), * }
+}
+
+template GSUP_PDU ts_GSUP(GSUP_MessageType msgt, GSUP_IEs ies := {}) := {
+ msg_type := msgt,
+ ies := ies
+}
+
+template (value) GSUP_IMEI ts_GSUP_IMEI(hexstring digits) := {
+ len := 0, /* overwritten */
+ digits := digits
+}
+
+template GSUP_IMEI tr_GSUP_IMEI(template hexstring digits) := {
+ len := ?,
+ digits := digits
+}
+
+
+template (value) GSUP_PDU ts_GSUP_SAI_REQ(hexstring imsi) :=
+ ts_GSUP(OSMO_GSUP_MSGT_SEND_AUTH_INFO_REQUEST, { valueof(ts_GSUP_IE_IMSI(imsi)) });
+
+template (value) GSUP_PDU ts_GSUP_SAI_REQ_EPS(hexstring imsi) :=
+ ts_GSUP(OSMO_GSUP_MSGT_SEND_AUTH_INFO_REQUEST, {
+ valueof(ts_GSUP_IE_IMSI(imsi)),
+ valueof(ts_GSUP_IE_CURRENT_RAT_TYPE(RAT_TYPE_EUTRAN_SGs))
+ });
+
+template (value) GSUP_PDU ts_GSUP_SAI_REQ_NUM_AUTH(hexstring imsi, OCT1 num_auth_vectors) :=
+ ts_GSUP(OSMO_GSUP_MSGT_SEND_AUTH_INFO_REQUEST, {
+ valueof(ts_GSUP_IE_IMSI(imsi)),
+ valueof(ts_GSUP_IE_NUM_VECTORS_REQ(num_auth_vectors))
+ });
+
+template GSUP_PDU tr_GSUP_SAI_REQ(template hexstring imsi) :=
+ tr_GSUP_IMSI(OSMO_GSUP_MSGT_SEND_AUTH_INFO_REQUEST, imsi);
+
+template GSUP_PDU tr_GSUP_SAI_REQ_UMTS_AKA_RESYNC(
+ template hexstring imsi,
+ template octetstring auts,
+ template octetstring rand) :=
+ tr_GSUP(OSMO_GSUP_MSGT_SEND_AUTH_INFO_REQUEST, {
+ tr_GSUP_IE_IMSI(imsi),
+ tr_GSUP_IE_AUTS(auts),
+ tr_GSUP_IE_RAND(rand),
+ *
+ });
+
+template (value) GSUP_PDU ts_GSUP_SAI_RES(hexstring imsi, GSUP_IE auth_tuple) :=
+ ts_GSUP(OSMO_GSUP_MSGT_SEND_AUTH_INFO_RESULT, {
+ valueof(ts_GSUP_IE_IMSI(imsi)), auth_tuple });
+
+template GSUP_PDU tr_GSUP_SAI_ERR(template hexstring imsi, template integer cause) :=
+ tr_GSUP(OSMO_GSUP_MSGT_SEND_AUTH_INFO_ERROR, {
+ tr_GSUP_IE_IMSI(imsi), tr_GSUP_IE_Cause(cause) });
+
+template (value) GSUP_PDU ts_GSUP_SAI_ERR(hexstring imsi, integer cause) :=
+ ts_GSUP(OSMO_GSUP_MSGT_SEND_AUTH_INFO_ERROR, {
+ valueof(ts_GSUP_IE_IMSI(imsi)), valueof(ts_GSUP_IE_Cause(cause)) });
+
+
+template GSUP_PDU tr_GSUP_SAI_RES(template (present) hexstring imsi,
+ template (present) GSUP_IE auth_tuple_ie := tr_GSUP_IE(OSMO_GSUP_AUTH_TUPLE_IE)) :=
+ tr_GSUP(OSMO_GSUP_MSGT_SEND_AUTH_INFO_RESULT, {
+ tr_GSUP_IE_IMSI(imsi), *, auth_tuple_ie, * });
+
+template GSUP_PDU ts_GSUP_UL_REQ(hexstring imsi, GSUP_CnDomain dom := OSMO_GSUP_CN_DOMAIN_PS,
+ template octetstring source_name := omit) :=
+ ts_GSUP(OSMO_GSUP_MSGT_UPDATE_LOCATION_REQUEST, f_gen_ts_ies(imsi, dom := dom,
+ source_name := source_name));
+
+template GSUP_PDU tr_GSUP_UL_REQ(template hexstring imsi) :=
+ tr_GSUP_IMSI(OSMO_GSUP_MSGT_UPDATE_LOCATION_REQUEST, imsi);
+
+template (value) GSUP_PDU ts_GSUP_UL_RES(hexstring imsi, octetstring destination_name := ''O) :=
+ ts_GSUP(OSMO_GSUP_MSGT_UPDATE_LOCATION_RESULT, { valueof(ts_GSUP_IE_IMSI(imsi)),
+ valueof(ts_GSUP_IE_Destination_Name(destination_name))});
+
+template GSUP_PDU tr_GSUP_UL_RES(template hexstring imsi, template octetstring destination_name := omit) :=
+ tr_GSUP(OSMO_GSUP_MSGT_UPDATE_LOCATION_RESULT, f_gen_tr_ies(imsi, destination_name := destination_name));
+
+template (value) GSUP_PDU ts_GSUP_UL_ERR(hexstring imsi, integer cause) :=
+ ts_GSUP(OSMO_GSUP_MSGT_UPDATE_LOCATION_ERROR, {
+ valueof(ts_GSUP_IE_IMSI(imsi)), valueof(ts_GSUP_IE_Cause(cause)) });
+
+template GSUP_PDU tr_GSUP_UL_ERR(template hexstring imsi, template integer cause := ?,
+ template octetstring destination_name := omit) :=
+ tr_GSUP(OSMO_GSUP_MSGT_UPDATE_LOCATION_ERROR,
+ f_gen_tr_ies(imsi, cause := cause, destination_name := destination_name));
+
+template (value) GSUP_PDU ts_GSUP_ISD_REQ(hexstring imsi, hexstring msisdn, octetstring destination_name := ''O) :=
+ ts_GSUP(OSMO_GSUP_MSGT_INSERT_DATA_REQUEST, {
+ valueof(ts_GSUP_IE_IMSI(imsi)), valueof(ts_GSUP_IE_MSISDN(msisdn)),
+ valueof(ts_GSUP_IE_Destination_Name(destination_name))});
+
+template GSUP_PDU tr_GSUP_ISD_REQ(template hexstring imsi, template hexstring msisdn := ?,
+ template octetstring destination_name := omit) :=
+ tr_GSUP(OSMO_GSUP_MSGT_INSERT_DATA_REQUEST,
+ f_gen_tr_ies(imsi, msisdn := msisdn, destination_name := destination_name));
+
+template GSUP_PDU ts_GSUP_ISD_RES(hexstring imsi,
+ template octetstring source_name := omit,
+ template octetstring destination_name := omit) :=
+ ts_GSUP(OSMO_GSUP_MSGT_INSERT_DATA_RESULT,
+ f_gen_ts_ies(imsi, source_name := source_name,
+ destination_name := destination_name));
+
+template GSUP_PDU tr_GSUP_ISD_RES(template hexstring imsi) :=
+ tr_GSUP_IMSI(OSMO_GSUP_MSGT_INSERT_DATA_RESULT, imsi);
+
+template GSUP_PDU tr_GSUP_AUTH_FAIL_IND(hexstring imsi) :=
+ tr_GSUP_IMSI(OSMO_GSUP_MSGT_AUTH_FAIL_REPORT, imsi);
+
+template (value) GSUP_PDU ts_GSUP_CL_REQ(hexstring imsi, GSUP_CancelType ctype) :=
+ ts_GSUP(OSMO_GSUP_MSGT_LOCATION_CANCEL_REQUEST, {
+ valueof(ts_GSUP_IE_IMSI(imsi)), valueof(ts_GSUP_IE_CancelType(ctype)) });
+
+template GSUP_PDU tr_GSUP_CL_RES(template hexstring imsi) :=
+ tr_GSUP_IMSI(OSMO_GSUP_MSGT_LOCATION_CANCEL_RESULT, imsi);
+
+template GSUP_PDU tr_GSUP_CL_ERR(template hexstring imsi, template integer cause := ?) :=
+ tr_GSUP(OSMO_GSUP_MSGT_LOCATION_CANCEL_ERROR, {
+ tr_GSUP_IE_IMSI(imsi), tr_GSUP_IE_Cause(cause), * });
+
+template (value) GSUP_PDU ts_GSUP_PURGE_MS_REQ(hexstring imsi, GSUP_CnDomain dom) :=
+ ts_GSUP(OSMO_GSUP_MSGT_PURGE_MS_REQUEST, {
+ valueof(ts_GSUP_IE_IMSI(imsi)), valueof(ts_GSUP_IE_CnDomain(dom)) });
+
+template GSUP_PDU tr_GSUP_PURGE_MS_REQ(template hexstring imsi, template GSUP_CnDomain dom := ?) :=
+ tr_GSUP(OSMO_GSUP_MSGT_PURGE_MS_REQUEST, {
+ tr_GSUP_IE_IMSI(imsi), *, tr_GSUP_IE_CnDomain(dom) });
+
+template (value) GSUP_PDU ts_GSUP_PURGE_MS_RES(hexstring imsi) :=
+ ts_GSUP(OSMO_GSUP_MSGT_PURGE_MS_RESULT, {
+ valueof(ts_GSUP_IE_IMSI(imsi)) });
+
+template GSUP_PDU tr_GSUP_PURGE_MS_RES(template hexstring imsi) :=
+ tr_GSUP(OSMO_GSUP_MSGT_PURGE_MS_RESULT, {
+ tr_GSUP_IE_IMSI(imsi), * });
+
+template GSUP_PDU tr_GSUP_PURGE_MS_ERR(template hexstring imsi, template integer cause) :=
+ tr_GSUP(OSMO_GSUP_MSGT_PURGE_MS_ERROR, {
+ tr_GSUP_IE_IMSI(imsi), tr_GSUP_IE_Cause(cause) });
+
+template (value) GSUP_PDU ts_GSUP_CHECK_IMEI_REQ(hexstring imsi, hexstring imei,
+ template (omit) octetstring source_name := omit) :=
+ ts_GSUP(OSMO_GSUP_MSGT_CHECK_IMEI_REQUEST, f_gen_ts_ies(imsi, imei := imei, source_name := source_name));
+
+template GSUP_PDU tr_GSUP_CHECK_IMEI_REQ(
+ template hexstring imsi,
+ template hexstring imei
+) := tr_GSUP(
+ OSMO_GSUP_MSGT_CHECK_IMEI_REQUEST,
+ {
+ tr_GSUP_IE_IMSI(imsi),
+ tr_GSUP_IE_IMEI(imei),
+ tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SUBSCRIBER_MANAGEMENT)
+ }
+);
+
+template (value) GSUP_PDU ts_GSUP_CHECK_IMEI_RES(hexstring imsi, GSUP_IMEIResult result) :=
+ ts_GSUP(OSMO_GSUP_MSGT_CHECK_IMEI_RESULT, {
+ valueof(ts_GSUP_IE_IMSI(imsi)), valueof(ts_GSUP_IE_IMEI_Result(result)) });
+
+template GSUP_PDU tr_GSUP_CHECK_IMEI_RES(template hexstring imsi, template GSUP_IMEIResult result,
+ template octetstring destination_name := omit) :=
+ tr_GSUP(OSMO_GSUP_MSGT_CHECK_IMEI_RESULT,
+ f_gen_tr_ies(imsi, imei_result := result, destination_name := destination_name));
+
+template (value) GSUP_PDU ts_GSUP_CHECK_IMEI_ERR(hexstring imsi, integer cause) :=
+ ts_GSUP(OSMO_GSUP_MSGT_CHECK_IMEI_ERROR, {
+ valueof(ts_GSUP_IE_IMSI(imsi)), valueof(ts_GSUP_IE_Cause(cause)) });
+
+template GSUP_PDU tr_GSUP_CHECK_IMEI_ERR(template hexstring imsi, template integer cause,
+ template octetstring destination_name := omit) :=
+ tr_GSUP(OSMO_GSUP_MSGT_CHECK_IMEI_ERROR, f_gen_tr_ies(imsi, cause := cause, destination_name := destination_name));
+
+
+/* EPDG Tunnel */
+template (value) GSUP_PDU ts_GSUP_EPDGTunnel_REQ(hexstring imsi,
+ GSUP_Message_Class message_class := OSMO_GSUP_MESSAGE_CLASS_IPSEC_EPDG,
+ GSUP_CnDomain dom := OSMO_GSUP_CN_DOMAIN_PS,
+ template (omit) octetstring source_name := omit) :=
+ ts_GSUP(OSMO_GSUP_MSGT_EPDG_TUNNEL_REQUEST, f_gen_ts_ies(imsi,
+ message_class := message_class,
+ dom := dom,
+ source_name := source_name));
+
+template (present) GSUP_PDU tr_GSUP_EPDGTunnel_REQ(template (present) hexstring imsi := ?,
+ template (present) GSUP_Message_Class message_class := OSMO_GSUP_MESSAGE_CLASS_IPSEC_EPDG) :=
+ tr_GSUP(OSMO_GSUP_MSGT_EPDG_TUNNEL_REQUEST,
+ f_gen_tr_ies(imsi,
+ message_class := message_class));
+
+
+template (value) GSUP_PDU ts_GSUP_EPDGTunnel_RES(hexstring imsi,
+ GSUP_Message_Class message_class := OSMO_GSUP_MESSAGE_CLASS_IPSEC_EPDG,
+ octetstring destination_name := ''O) :=
+ ts_GSUP(OSMO_GSUP_MSGT_EPDG_TUNNEL_RESULT, {
+ valueof(ts_GSUP_IE_IMSI(imsi)),
+ valueof(ts_GSUP_IE_Message_Class(message_class)),
+ valueof(ts_GSUP_IE_Destination_Name(destination_name))
+ });
+
+template (present) GSUP_PDU tr_GSUP_EPDGTunnel_RES(template (present) hexstring imsi,
+ template (present) GSUP_Message_Class message_class := OSMO_GSUP_MESSAGE_CLASS_IPSEC_EPDG,
+ template octetstring destination_name := omit) :=
+ tr_GSUP(OSMO_GSUP_MSGT_EPDG_TUNNEL_RESULT,
+ f_gen_tr_ies(imsi,
+ message_class := message_class,
+ destination_name := destination_name));
+
+template (value) GSUP_PDU ts_GSUP_EPDGTunnel_ERR(hexstring imsi,
+ GSUP_Message_Class message_class := OSMO_GSUP_MESSAGE_CLASS_IPSEC_EPDG,
+ integer cause := 0) :=
+ ts_GSUP(OSMO_GSUP_MSGT_EPDG_TUNNEL_ERROR, {
+ valueof(ts_GSUP_IE_IMSI(imsi)),
+ valueof(ts_GSUP_IE_Cause(cause)),
+ valueof(ts_GSUP_IE_Message_Class(message_class))
+ });
+
+template (present) GSUP_PDU tr_GSUP_EPDGTunnel_ERR(template (present) hexstring imsi,
+ template (present) GSUP_Message_Class message_class := OSMO_GSUP_MESSAGE_CLASS_IPSEC_EPDG,
+ template (present) integer cause := ?,
+ template octetstring destination_name := omit) :=
+ tr_GSUP(OSMO_GSUP_MSGT_EPDG_TUNNEL_ERROR,
+ f_gen_tr_ies(imsi,
+ message_class := message_class,
+ cause := cause,
+ destination_name := destination_name));
+
+
+template (value) GSUP_IE ts_GSUP_IE_CancelType(GSUP_CancelType ctype) := {
+ tag := OSMO_GSUP_CANCEL_TYPE_IE,
+ len := 0, /* overwritten */
+ val := {
+ cancel_type := ctype
+ }
+}
+
+template GSUP_IE tr_GSUP_IE_CancelType(template GSUP_CancelType ctype) :=
+ tr_GSUP_IE(OSMO_GSUP_CANCEL_TYPE_IE, GSUP_IeValue:{cancel_type:=ctype});
+
+template GSUP_IE tr_GSUP_IE_CnDomain(template GSUP_CnDomain domain) :=
+ tr_GSUP_IE(OSMO_GSUP_CN_DOMAIN_IE, GSUP_IeValue:{cn_domain:=domain});
+
+template GSUP_IE tr_GSUP_IE(template GSUP_IEI iei, template GSUP_IeValue val := ?) := {
+ tag := iei,
+ len := ?,
+ val := val
+}
+
+template (value) GSUP_IE ts_GSUP_IE_IMSI(hexstring imsi) := {
+ tag := OSMO_GSUP_IMSI_IE,
+ len := 0, /* overwritten */
+ val := {
+ imsi := imsi
+ }
+}
+
+template (present) GSUP_IE tr_GSUP_IE_IMSI(template (present) hexstring imsi := ?) := {
+ tag := OSMO_GSUP_IMSI_IE,
+ len := ?,
+ val := {
+ imsi := imsi
+ }
+}
+
+template (value) GSUP_IE ts_GSUP_IE_MSISDN(hexstring msisdn) := {
+ tag := OSMO_GSUP_MSISDN_IE,
+ len := 0, /* overwritten */
+ val := {
+ msisdn := ts_GSUP_MSISDN(msisdn)
+ }
+}
+
+template GSUP_IE tr_GSUP_IE_MSISDN(template hexstring msisdn) := {
+ tag := OSMO_GSUP_MSISDN_IE,
+ len := ?,
+ val := {
+ msisdn := tr_GSUP_MSISDN(msisdn)
+ }
+}
+
+
+template (value) GSUP_IE ts_GSUP_IE_Cause(integer cause) := {
+ tag := OSMO_GSUP_CAUSE_IE,
+ len := 0, /* overwritten */
+ val := {
+ cause := cause
+ }
+}
+
+template GSUP_IE tr_GSUP_IE_Cause(template integer cause) := {
+ tag := OSMO_GSUP_CAUSE_IE,
+ len := ?,
+ val := {
+ cause := cause
+ }
+}
+
+template (value) GSUP_IE ts_GSUP_IE_AUTS(octetstring auts) := {
+ tag := OSMO_GSUP_AUTS_IE,
+ len := 0, /* overwritten */
+ val := {
+ auts := auts
+ }
+}
+
+template GSUP_IE tr_GSUP_IE_AUTS(template octetstring auts) := {
+ tag := OSMO_GSUP_AUTS_IE,
+ len := ?,
+ val := {
+ auts := auts
+ }
+}
+
+template (value) GSUP_IE ts_GSUP_IE_RAND(octetstring rand) := {
+ tag := OSMO_GSUP_RAND_IE,
+ len := 0, /* overwritten */
+ val := {
+ rand := rand
+ }
+}
+
+template GSUP_IE tr_GSUP_IE_RAND(template octetstring rand := ?) := {
+ tag := OSMO_GSUP_RAND_IE,
+ len := ?,
+ val := {
+ rand := rand
+ }
+}
+
+template (present) GSUP_IE tr_GSUP_IE_SRES(template (present) octetstring sres := ?) := {
+ tag := OSMO_GSUP_SRES_IE,
+ len := ?,
+ val := {
+ sres := sres
+ }
+}
+
+template (value) GSUP_IE ts_GSUP_IE_SRES(octetstring sres) := {
+ tag := OSMO_GSUP_SRES_IE,
+ len := 0, /* overwritten */
+ val := {
+ sres := sres
+ }
+}
+
+template (present) GSUP_IE tr_GSUP_IE_Kc(template (present) octetstring kc := ?) := {
+ tag := OSMO_GSUP_KC_IE,
+ len := ?,
+ val := {
+ kc := kc
+ }
+}
+
+template (value) GSUP_IE ts_GSUP_IE_Kc(octetstring kc) := {
+ tag := OSMO_GSUP_KC_IE,
+ len := 0, /* overwritten */
+ val := {
+ kc := kc
+ }
+}
+
+template (present) GSUP_IE tr_GSUP_IE_IK(template (present) octetstring ik := ?) := {
+ tag := OSMO_GSUP_IK_IE,
+ len := ?,
+ val := {
+ ik := ik
+ }
+}
+
+template (value) GSUP_IE ts_GSUP_IE_IK(octetstring ik) := {
+ tag := OSMO_GSUP_IK_IE,
+ len := 0, /* overwritten */
+ val := {
+ ik := ik
+ }
+}
+
+template (present) GSUP_IE tr_GSUP_IE_CK(template (present) octetstring ck := ?) := {
+ tag := OSMO_GSUP_CK_IE,
+ len := ?,
+ val := {
+ ck := ck
+ }
+}
+
+template (value) GSUP_IE ts_GSUP_IE_CK(octetstring ck) := {
+ tag := OSMO_GSUP_CK_IE,
+ len := 0, /* overwritten */
+ val := {
+ ck := ck
+ }
+}
+
+template (present) GSUP_IE tr_GSUP_IE_AUTN(template (present) octetstring autn := ?) := {
+ tag := OSMO_GSUP_AUTN_IE,
+ len := ?,
+ val := {
+ autn := autn
+ }
+}
+
+template (value) GSUP_IE ts_GSUP_IE_AUTN(octetstring autn) := {
+ tag := OSMO_GSUP_AUTN_IE,
+ len := 0, /* overwritten */
+ val := {
+ autn := autn
+ }
+}
+
+template (present) GSUP_IE tr_GSUP_IE_RES(template (present) octetstring res := ?) := {
+ tag := OSMO_GSUP_RES_IE,
+ len := ?,
+ val := {
+ res := res
+ }
+}
+
+template (value) GSUP_IE ts_GSUP_IE_RES(octetstring res) := {
+ tag := OSMO_GSUP_RES_IE,
+ len := 0, /* overwritten */
+ val := {
+ res := res
+ }
+}
+
+template (value) GSUP_IE ts_GSUP_IE_APN(octetstring apn) := {
+ tag := OSMO_GSUP_ACCESS_POINT_NAME_IE,
+ len := 0, /* overwritten */
+ val := {
+ apn := apn
+ }
+}
+
+template GSUP_IE tr_GSUP_IE_APN(template octetstring apn) := {
+ tag := OSMO_GSUP_ACCESS_POINT_NAME_IE,
+ len := ?,
+ val := {
+ apn := apn
+ }
+}
+
+template GSUP_IE ts_GSUP_IE_CnDomain(template GSUP_CnDomain dom) := {
+ tag := OSMO_GSUP_CN_DOMAIN_IE,
+ len := 0, /* overwritten */
+ val := {
+ cn_domain := dom
+ }
+}
+
+template (value) GSUP_IE ts_GSUP_IE_SessionId(OCT4 sid) := {
+ tag := OSMO_GSUP_SESSION_ID_IE,
+ len := 0, /* overwritten */
+ val := {
+ session_id := sid
+ }
+}
+template GSUP_IE tr_GSUP_IE_SessionId(template OCT4 sid) := {
+ tag := OSMO_GSUP_SESSION_ID_IE,
+ len := ?,
+ val := {
+ session_id := sid
+ }
+}
+
+template (value) GSUP_IE ts_GSUP_IE_SessionState(GSUP_SessionState state) := {
+ tag := OSMO_GSUP_SESSION_STATE_IE,
+ len := 0, /* overwritten */
+ val := {
+ session_state := state
+ }
+}
+template GSUP_IE tr_GSUP_IE_SessionState(template GSUP_SessionState state) := {
+ tag := OSMO_GSUP_SESSION_STATE_IE,
+ len := ?,
+ val := {
+ session_state := state
+ }
+}
+
+template (value) GSUP_IE ts_GSUP_IE_SM_RP_MR(OCT1 ref) := {
+ tag := OSMO_GSUP_SM_RP_MR_IE,
+ len := 0, /* overwritten */
+ val := {
+ sm_rp_mr := ref
+ }
+}
+template GSUP_IE tr_GSUP_IE_SM_RP_MR(template OCT1 ref) := {
+ tag := OSMO_GSUP_SM_RP_MR_IE,
+ len := ?,
+ val := {
+ sm_rp_mr := ref
+ }
+}
+
+template (value) GSUP_IE ts_GSUP_IE_SM_RP_CAUSE(OCT1 cause) := {
+ tag := OSMO_GSUP_SM_RP_CAUSE_IE,
+ len := 0, /* overwritten */
+ val := {
+ sm_rp_cause := cause
+ }
+}
+template GSUP_IE tr_GSUP_IE_SM_RP_CAUSE(template OCT1 cause) := {
+ tag := OSMO_GSUP_SM_RP_CAUSE_IE,
+ len := ?,
+ val := {
+ sm_rp_cause := cause
+ }
+}
+
+template (value) GSUP_IE ts_GSUP_IE_SM_RP_MMS(OCT1 mms) := {
+ tag := OSMO_GSUP_SM_RP_MMS_IE,
+ len := 0, /* overwritten */
+ val := {
+ sm_rp_mms := mms
+ }
+}
+template GSUP_IE tr_GSUP_IE_SM_RP_MMS(template OCT1 mms) := {
+ tag := OSMO_GSUP_SM_RP_MMS_IE,
+ len := ?,
+ val := {
+ sm_rp_mms := mms
+ }
+}
+
+template (value) GSUP_IE ts_GSUP_IE_IMEI(hexstring imei) := {
+ tag := OSMO_GSUP_IMEI_IE,
+ len := 0, /* overwritten */
+ val := {
+ imei := ts_GSUP_IMEI(imei)
+ }
+}
+template GSUP_IE tr_GSUP_IE_IMEI(template hexstring imei) := {
+ tag := OSMO_GSUP_IMEI_IE,
+ len := ?,
+ val := {
+ imei := tr_GSUP_IMEI(imei)
+ }
+}
+
+template (value) GSUP_IE ts_GSUP_IE_IMEI_Result(GSUP_IMEIResult result) := {
+ tag := OSMO_GSUP_IMEI_RESULT_IE,
+ len := 0, /* overwritten */
+ val := {
+ imei_result := result
+ }
+}
+template GSUP_IE tr_GSUP_IE_IMEI_Result(template GSUP_IMEIResult result) := {
+ tag := OSMO_GSUP_IMEI_RESULT_IE,
+ len := ?,
+ val := {
+ imei_result := result
+ }
+}
+
+template (value) GSUP_IE ts_GSUP_IE_NUM_VECTORS_REQ(OCT1 num) := {
+ tag := OSMO_GSUP_NUM_VECTORS_REQ_IE,
+ len := 0, /* overwritten */
+ val := {
+ num_auth_vectors := num
+ }
+}
+template GSUP_IE tr_GSUP_IE_NUM_VECTORS_REQ(template OCT1 num) := {
+ tag := OSMO_GSUP_NUM_VECTORS_REQ_IE,
+ len := ?,
+ val := {
+ num_auth_vectors := num
+ }
+}
+
+/* See 3GPP TS 24.011, figures 8.5 and 8.6 */
+private function f_pad_SM_RP_Addr(template hexstring number)
+return template hexstring {
+ if (isvalue(number) and not istemplatekind(number, "omit")) {
+ return f_pad_bcd_number(valueof(number));
+ } else {
+ return number;
+ }
+}
+
+template GSUP_SM_RP_Addr t_GSUP_SM_RP_Addr(template hexstring number,
+ template BIT4 npi := '0001'B,
+ template BIT3 ton := '001'B,
+ template BIT1 ext := '1'B) := {
+ ext := ext,
+ ton := ton,
+ npi := npi,
+ /* Work around TITAN's padding problems: encoding works fine,
+ * but it does not consider 'F'H as padding in decoded data. */
+ number := f_pad_SM_RP_Addr(number)
+}
+
+/**
+ * SM-RP-DA represents the SM Destination Address, see 7.6.8.1.
+ * It can be either of the following:
+ * - IMSI
+ * - LMSI (not implemented)
+ * - MSISDN
+ * - roaming number (not implemented)
+ * - service centre address
+ */
+template (value) GSUP_SM_RP_DA ts_GSUP_SM_RP_DA_IMSI(hexstring imsi) := {
+ id_type := OSMO_GSUP_SM_RP_ODA_ID_IMSI,
+ id_enc := { imsi := imsi }
+}
+template GSUP_SM_RP_DA tr_GSUP_SM_RP_DA_IMSI(template hexstring imsi) := {
+ id_type := OSMO_GSUP_SM_RP_ODA_ID_IMSI,
+ id_enc := { imsi := imsi }
+}
+
+template (value) GSUP_SM_RP_DA ts_GSUP_SM_RP_DA_MSISDN(GSUP_SM_RP_Addr msisdn) := {
+ id_type := OSMO_GSUP_SM_RP_ODA_ID_MSISDN,
+ id_enc := { msisdn := msisdn }
+}
+template GSUP_SM_RP_DA tr_GSUP_SM_RP_DA_MSISDN(template GSUP_SM_RP_Addr msisdn) := {
+ id_type := OSMO_GSUP_SM_RP_ODA_ID_MSISDN,
+ id_enc := { msisdn := msisdn }
+}
+
+template (value) GSUP_SM_RP_DA ts_GSUP_SM_RP_DA_SMSC_ADDR(GSUP_SM_RP_Addr smsc_addr) := {
+ id_type := OSMO_GSUP_SM_RP_ODA_ID_SMSC_ADDR,
+ id_enc := { smsc_addr := smsc_addr }
+}
+template GSUP_SM_RP_DA tr_GSUP_SM_RP_DA_SMSC_ADDR(template GSUP_SM_RP_Addr smsc_addr) := {
+ id_type := OSMO_GSUP_SM_RP_ODA_ID_SMSC_ADDR,
+ id_enc := { smsc_addr := smsc_addr }
+}
+
+template (value) GSUP_SM_RP_DA ts_GSUP_SM_RP_DA_NULL := {
+ id_type := OSMO_GSUP_SM_RP_ODA_ID_NULL,
+ id_enc := omit
+}
+template GSUP_SM_RP_DA tr_GSUP_SM_RP_DA_NULL := {
+ id_type := OSMO_GSUP_SM_RP_ODA_ID_NULL,
+ id_enc := omit
+}
+
+template (value) GSUP_IE ts_GSUP_IE_SM_RP_DA(GSUP_SM_RP_DA val) := {
+ tag := OSMO_GSUP_SM_RP_DA_IE,
+ len := 0, /* overwritten */
+ val := {
+ sm_rp_da := val
+ }
+}
+template GSUP_IE tr_GSUP_IE_SM_RP_DA(template GSUP_SM_RP_DA val) := {
+ tag := OSMO_GSUP_SM_RP_DA_IE,
+ len := ?,
+ val := {
+ sm_rp_da := val
+ }
+}
+
+/**
+ * SM-RP-OA represents the SM Originating Address, see 7.6.8.2.
+ * It can be either of the following:
+ * - MSISDN
+ * - service centre address
+ */
+template (value) GSUP_SM_RP_OA ts_GSUP_SM_RP_OA_MSISDN(GSUP_SM_RP_Addr msisdn) := {
+ id_type := OSMO_GSUP_SM_RP_ODA_ID_MSISDN,
+ id_enc := { msisdn := msisdn }
+}
+template GSUP_SM_RP_OA tr_GSUP_SM_RP_OA_MSISDN(template GSUP_SM_RP_Addr msisdn) := {
+ id_type := OSMO_GSUP_SM_RP_ODA_ID_MSISDN,
+ id_enc := { msisdn := msisdn }
+}
+
+template (value) GSUP_SM_RP_OA ts_GSUP_SM_RP_OA_SMSC_ADDR(GSUP_SM_RP_Addr smsc_addr) := {
+ id_type := OSMO_GSUP_SM_RP_ODA_ID_SMSC_ADDR,
+ id_enc := { smsc_addr := smsc_addr }
+}
+template GSUP_SM_RP_OA tr_GSUP_SM_RP_OA_SMSC_ADDR(template GSUP_SM_RP_Addr smsc_addr) := {
+ id_type := OSMO_GSUP_SM_RP_ODA_ID_SMSC_ADDR,
+ id_enc := { smsc_addr := smsc_addr }
+}
+
+template (value) GSUP_SM_RP_OA ts_GSUP_SM_RP_OA_NULL := {
+ id_type := OSMO_GSUP_SM_RP_ODA_ID_NULL,
+ id_enc := omit
+}
+template GSUP_SM_RP_OA tr_GSUP_SM_RP_OA_NULL := {
+ id_type := OSMO_GSUP_SM_RP_ODA_ID_NULL,
+ id_enc := omit
+}
+
+template (value) GSUP_IE ts_GSUP_IE_SM_RP_OA(GSUP_SM_RP_OA val) := {
+ tag := OSMO_GSUP_SM_RP_OA_IE,
+ len := 0, /* overwritten */
+ val := {
+ sm_rp_oa := val
+ }
+}
+template GSUP_IE tr_GSUP_IE_SM_RP_OA(template GSUP_SM_RP_OA val) := {
+ tag := OSMO_GSUP_SM_RP_OA_IE,
+ len := ?,
+ val := {
+ sm_rp_oa := val
+ }
+}
+
+/* SM-RP-UI represents the SM TPDU, see 7.6.8.4 */
+template (value) GSUP_IE ts_GSUP_IE_SM_RP_UI(octetstring val) := {
+ tag := OSMO_GSUP_SM_RP_UI_IE,
+ len := 0, /* overwritten */
+ val := {
+ sm_rp_ui := val
+ }
+}
+template GSUP_IE tr_GSUP_IE_SM_RP_UI(template octetstring val) := {
+ tag := OSMO_GSUP_SM_RP_UI_IE,
+ len := ?,
+ val := {
+ sm_rp_ui := val
+ }
+}
+
+/* SM Alert Reason IE (used in READY-FOR-SM), see 7.6.8.8 */
+template (value) GSUP_IE ts_GSUP_IE_SM_ALERT_RSN(GSUP_SM_ALERT_RSN_Type rsn) := {
+ tag := OSMO_GSUP_SM_ALERT_RSN_IE,
+ len := 0, /* overwritten */
+ val := {
+ sm_alert_rsn := rsn
+ }
+}
+template GSUP_IE tr_GSUP_IE_SM_ALERT_RSN(template GSUP_SM_ALERT_RSN_Type rsn) := {
+ tag := OSMO_GSUP_SM_ALERT_RSN_IE,
+ len := ?,
+ val := {
+ sm_alert_rsn := rsn
+ }
+}
+
+template (value) GSUP_IE ts_GSUP_IE_SSInfo(octetstring ss) := {
+ tag := OSMO_GSUP_SS_INFO_IE,
+ len := 0, /* overwritten */
+ val := {
+ ss_info := ss
+ }
+}
+template GSUP_IE tr_GSUP_IE_SSInfo(template octetstring ss) := {
+ tag := OSMO_GSUP_SS_INFO_IE,
+ len := ?,
+ val := {
+ ss_info := ss
+ }
+}
+
+template GSUP_IE tr_GSUP_IE_Message_Class(template GSUP_Message_Class val) := {
+ tag := OSMO_GSUP_MESSAGE_CLASS_IE,
+ len := ?,
+ val := {
+ message_class := val
+ }
+}
+
+template (value) GSUP_IE ts_GSUP_IE_Message_Class(GSUP_Message_Class val) := {
+ tag := OSMO_GSUP_MESSAGE_CLASS_IE,
+ len := 0, /* overwritten */
+ val := {
+ message_class := val
+ }
+}
+
+template GSUP_IE tr_GSUP_IE_Source_Name(template octetstring name) := {
+ tag := OSMO_GSUP_SOURCE_NAME_IE,
+ len := ?,
+ val := {
+ source_name := name
+ }
+}
+
+template (value) GSUP_IE ts_GSUP_IE_Source_Name(octetstring name) := {
+ tag := OSMO_GSUP_SOURCE_NAME_IE,
+ len := 0, /* overwritten */
+ val := {
+ source_name := name
+ }
+}
+
+template GSUP_IE tr_GSUP_IE_Destination_Name(template octetstring name) := {
+ tag := OSMO_GSUP_DESTINATION_NAME_IE,
+ len := ?,
+ val := {
+ destination_name := name
+ }
+}
+
+template (value) GSUP_IE ts_GSUP_IE_Destination_Name(octetstring name) := {
+ tag := OSMO_GSUP_DESTINATION_NAME_IE,
+ len := 0, /* overwritten */
+ val := {
+ destination_name := name
+ }
+}
+
+template GSUP_IE tr_GSUP_IE_AN_APDU(template GSUP_AN_APDU an_apdu) := {
+ tag := OSMO_GSUP_AN_APDU_IE,
+ len := ?,
+ val := {
+ an_apdu := an_apdu
+ }
+}
+
+template (value) GSUP_IE ts_GSUP_IE_AN_APDU(GSUP_AN_APDU an_apdu) := {
+ tag := OSMO_GSUP_AN_APDU_IE,
+ len := 0, /* overwritten */
+ val := {
+ an_apdu := an_apdu
+ }
+}
+
+template (present) GSUP_IE tr_GSUP_IE_SUPPORTED_RAT_TYPES(template (present) GSUP_RatTypes ratt) := {
+ tag := OSMO_GSUP_SUPPORTED_RAT_TYPES_IE,
+ len := ?,
+ val := {
+ supported_rat_types := ratt
+ }
+}
+template (value) GSUP_IE ts_GSUP_IE_SUPPORTED_RAT_TYPES(GSUP_RatTypes ratt) := {
+ tag := OSMO_GSUP_SUPPORTED_RAT_TYPES_IE,
+ len := 0, /* overwritten */
+ val := {
+ supported_rat_types := ratt
+ }
+}
+
+template (present) GSUP_IE tr_GSUP_IE_CURRENT_RAT_TYPE(template (present) GSUP_RatType ratt) := {
+ tag := OSMO_GSUP_CURRENT_RAT_TYPE_IE,
+ len := ?,
+ val := {
+ current_rat_type := ratt
+ }
+}
+template (value) GSUP_IE ts_GSUP_IE_CURRENT_RAT_TYPE(GSUP_RatType ratt) := {
+ tag := OSMO_GSUP_CURRENT_RAT_TYPE_IE,
+ len := 0, /* overwritten */
+ val := {
+ current_rat_type := ratt
+ }
+}
+
+private function f_gen_ts_ies(hexstring imsi,
+ template (omit) GSUP_Message_Class message_class := omit,
+ template (omit) hexstring imei := omit,
+ template (omit) GSUP_CnDomain dom := omit,
+ template (omit) octetstring source_name := omit,
+ template (omit) octetstring destination_name := omit
+ ) return GSUP_IEs {
+ var GSUP_IEs ies := {
+ valueof(ts_GSUP_IE_IMSI(imsi))
+ };
+
+ if (isvalue(dom)) {
+ ies := ies & { valueof(ts_GSUP_IE_CnDomain(dom)) };
+ }
+
+ if (isvalue(imei)) {
+ ies := ies & { valueof(ts_GSUP_IE_IMEI(valueof(imei))) };
+ }
+
+ if (isvalue(message_class)) {
+ ies := ies & { valueof(ts_GSUP_IE_Message_Class(valueof(message_class))) };
+ }
+
+ if (isvalue(source_name)) {
+ ies := ies & { valueof(ts_GSUP_IE_Source_Name(valueof(source_name))) };
+ }
+
+ if (isvalue(destination_name)) {
+ ies := ies & { valueof(ts_GSUP_IE_Destination_Name(valueof(destination_name))) };
+ }
+
+ return ies;
+}
+
+private function f_gen_tr_ies(template hexstring imsi,
+ template GSUP_Message_Class message_class := omit,
+ template integer cause := omit,
+ template hexstring msisdn := omit,
+ template GSUP_IMEIResult imei_result := omit,
+ template octetstring source_name := omit,
+ template octetstring destination_name := omit
+ ) return template GSUP_IEs {
+ var template GSUP_IEs ies := {
+ tr_GSUP_IE_IMSI(imsi)
+ };
+ var integer idx := 1;
+
+ if (isvalue(cause)) {
+ ies[idx] := tr_GSUP_IE_Cause(cause);
+ idx := idx + 1;
+ }
+
+ if (isvalue(msisdn)) {
+ ies[idx] := tr_GSUP_IE_MSISDN(msisdn);
+ idx := idx + 1;
+ }
+
+ if (isvalue(imei_result)) {
+ ies[idx] := tr_GSUP_IE_IMEI_Result(imei_result);
+ idx := idx + 1;
+ }
+
+ if (isvalue(message_class)) {
+ ies[idx] := tr_GSUP_IE_Message_Class(message_class);
+ idx := idx + 1;
+ }
+
+ if (isvalue(source_name)) {
+ ies[idx] := tr_GSUP_IE_Source_Name(source_name);
+ idx := idx + 1;
+ }
+
+ ies[idx] := *;
+ idx := idx + 1;
+
+ if (isvalue(destination_name)) {
+ ies[idx] := tr_GSUP_IE_Destination_Name(destination_name);
+ idx := idx + 1;
+ }
+
+ return ies;
+}
+
+private function f_gen_ts_ss_ies(
+ hexstring imsi,
+ OCT4 sid,
+ GSUP_SessionState state,
+ template (omit) octetstring ss := omit,
+ template (omit) integer cause := omit,
+ template octetstring source_name := omit
+) return GSUP_IEs {
+ /* Mandatory IEs */
+ var GSUP_IEs ies := {
+ valueof(ts_GSUP_IE_IMSI(imsi))
+ };
+
+ /* Cause IE is needed for PROC_SS_ERR */
+ if (isvalue(cause)) {
+ ies := ies & { valueof(ts_GSUP_IE_Cause(valueof(cause))) };
+ }
+
+ /* Mandatory session IEs */
+ ies := ies & { valueof(ts_GSUP_IE_SessionId(sid)) };
+ ies := ies & { valueof(ts_GSUP_IE_SessionState(state)) };
+
+ /* Optional SS payload */
+ if (isvalue(ss)) {
+ ies := ies & { valueof(ts_GSUP_IE_SSInfo(valueof(ss))) };
+ }
+
+ if (isvalue(source_name)) {
+ ies := ies & { valueof(ts_GSUP_IE_Source_Name(valueof(source_name))) };
+ }
+
+ return ies;
+}
+private function f_gen_tr_ss_ies(
+ template hexstring imsi,
+ template OCT4 sid := ?,
+ template GSUP_SessionState state := ?,
+ template octetstring ss := omit,
+ template integer cause := omit,
+ template octetstring destination_name := omit
+) return template GSUP_IEs {
+ /* Mandatory IEs */
+ var template GSUP_IEs ies := {
+ tr_GSUP_IE_IMSI(imsi)
+ };
+ var integer idx := 1;
+
+ /* Cause IE is needed for PROC_SS_ERR */
+ if (istemplatekind(cause, "*")) {
+ ies[idx] := *;
+ idx := idx + 1;
+ } else if (not istemplatekind(cause, "omit")) {
+ ies[idx] := tr_GSUP_IE_Cause(cause);
+ idx := idx + 1;
+ }
+
+ /* Mandatory session IEs */
+ ies[idx] := tr_GSUP_IE_SessionId(sid);
+ ies[idx + 1] := tr_GSUP_IE_SessionState(state);
+ idx := idx + 2;
+
+ /* Optional SS payload */
+ if (istemplatekind(ss, "*")) {
+ ies[idx] := *;
+ idx := idx + 1;
+ } else if (not istemplatekind(ss, "omit")) {
+ ies[idx] := tr_GSUP_IE_SSInfo(ss);
+ idx := idx + 1;
+ }
+
+ if (isvalue(destination_name)) {
+ ies[idx] := tr_GSUP_IE_Destination_Name(destination_name);
+ idx := idx + 1;
+ }
+
+ /* the GSUP Message Class IE is optional, as old implementations don't have it yet */
+ var template GSUP_IEs ies2 := ies;
+ ies2[idx] := tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_USSD);
+ idx := idx + 1;
+
+ return (ies, ies2);
+}
+
+template (value) GSUP_PDU ts_GSUP_PROC_SS_REQ(
+ hexstring imsi,
+ OCT4 sid,
+ GSUP_SessionState state,
+ template (omit) octetstring ss := omit,
+ template (omit) octetstring source_name := omit
+) := ts_GSUP(
+ OSMO_GSUP_MSGT_PROC_SS_REQUEST,
+ f_gen_ts_ss_ies(imsi, sid, state, ss, source_name := source_name)
+);
+template GSUP_PDU tr_GSUP_PROC_SS_REQ(
+ template hexstring imsi,
+ template OCT4 sid := ?,
+ template GSUP_SessionState state := ?,
+ template octetstring ss := *
+) := tr_GSUP(
+ OSMO_GSUP_MSGT_PROC_SS_REQUEST,
+ f_gen_tr_ss_ies(imsi, sid, state, ss)
+);
+
+template (value) GSUP_PDU ts_GSUP_PROC_SS_RES(
+ hexstring imsi,
+ OCT4 sid,
+ GSUP_SessionState state,
+ template (omit) octetstring ss := omit
+) := ts_GSUP(
+ OSMO_GSUP_MSGT_PROC_SS_RESULT,
+ f_gen_ts_ss_ies(imsi, sid, state, ss)
+);
+template GSUP_PDU tr_GSUP_PROC_SS_RES(
+ template hexstring imsi,
+ template OCT4 sid := ?,
+ template GSUP_SessionState state := ?,
+ template octetstring ss := *,
+ template octetstring destination_name := omit
+) := tr_GSUP(
+ OSMO_GSUP_MSGT_PROC_SS_RESULT,
+ f_gen_tr_ss_ies(imsi, sid, state, ss, destination_name := destination_name)
+);
+
+template (value) GSUP_PDU ts_GSUP_PROC_SS_ERR(
+ hexstring imsi,
+ OCT4 sid,
+ GSUP_SessionState state,
+ integer cause
+) := ts_GSUP(
+ OSMO_GSUP_MSGT_PROC_SS_ERROR,
+ f_gen_ts_ss_ies(imsi, sid, state, cause := cause)
+);
+template GSUP_PDU tr_GSUP_PROC_SS_ERR(
+ template hexstring imsi,
+ template OCT4 sid := ?,
+ template GSUP_SessionState state := ?,
+ template integer cause := ?
+) := tr_GSUP(
+ OSMO_GSUP_MSGT_PROC_SS_ERROR,
+ f_gen_tr_ss_ies(imsi, sid, state, cause := cause)
+);
+
+template (value) GSUP_PDU ts_GSUP_MO_FORWARD_SM_REQ(
+ hexstring imsi,
+ OCT1 sm_rp_mr, /* Message Reference, see GSM TS 04.11, 8.2.3 */
+ GSUP_SM_RP_DA sm_rp_da, /* Destination Address, see 7.6.8.1 */
+ GSUP_SM_RP_OA sm_rp_oa, /* Originating Address, see 7.6.8.2 */
+ octetstring sm_rp_ui /* SM TPDU, see 7.6.8.4 */
+) := ts_GSUP(
+ OSMO_GSUP_MSGT_MO_FORWARD_SM_REQUEST,
+ {
+ valueof(ts_GSUP_IE_IMSI(imsi)),
+ valueof(ts_GSUP_IE_SM_RP_MR(sm_rp_mr)),
+ valueof(ts_GSUP_IE_SM_RP_DA(sm_rp_da)),
+ valueof(ts_GSUP_IE_SM_RP_OA(sm_rp_oa)),
+ valueof(ts_GSUP_IE_SM_RP_UI(sm_rp_ui)),
+ valueof(ts_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS))
+ }
+);
+template GSUP_PDU tr_GSUP_MO_FORWARD_SM_REQ(
+ template hexstring imsi := ?,
+ template OCT1 sm_rp_mr := ?, /* Message Reference, see GSM TS 04.11, 8.2.3 */
+ template GSUP_SM_RP_DA sm_rp_da, /* Destination Address, see 7.6.8.1 */
+ template GSUP_SM_RP_OA sm_rp_oa, /* Originating Address, see 7.6.8.2 */
+ template octetstring sm_rp_ui /* SM TPDU, see 7.6.8.4 */
+) := tr_GSUP(
+ OSMO_GSUP_MSGT_MO_FORWARD_SM_REQUEST,
+ {
+ tr_GSUP_IE_IMSI(imsi),
+ tr_GSUP_IE_SM_RP_MR(sm_rp_mr),
+ tr_GSUP_IE_SM_RP_DA(sm_rp_da),
+ tr_GSUP_IE_SM_RP_OA(sm_rp_oa),
+ tr_GSUP_IE_SM_RP_UI(sm_rp_ui),
+ tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS),
+ tr_GSUP_IE_Source_Name(?)
+ }
+);
+
+template (value) GSUP_PDU ts_GSUP_MO_FORWARD_SM_RES(
+ hexstring imsi,
+ OCT1 sm_rp_mr /* Message Reference, see GSM TS 04.11, 8.2.3 */
+) := ts_GSUP(
+ OSMO_GSUP_MSGT_MO_FORWARD_SM_RESULT,
+ {
+ valueof(ts_GSUP_IE_IMSI(imsi)),
+ valueof(ts_GSUP_IE_SM_RP_MR(sm_rp_mr)),
+ valueof(ts_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS))
+ }
+);
+template GSUP_PDU tr_GSUP_MO_FORWARD_SM_RES(
+ template hexstring imsi := ?,
+ template OCT1 sm_rp_mr := ? /* Message Reference, see GSM TS 04.11, 8.2.3 */
+) := tr_GSUP(
+ OSMO_GSUP_MSGT_MO_FORWARD_SM_RESULT,
+ {
+ tr_GSUP_IE_IMSI(imsi),
+ tr_GSUP_IE_SM_RP_MR(sm_rp_mr),
+ tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS),
+ tr_GSUP_IE_Source_Name(?)
+ }
+);
+
+template (value) GSUP_PDU ts_GSUP_MO_FORWARD_SM_ERR(
+ hexstring imsi,
+ OCT1 sm_rp_mr, /* Message Reference, see GSM TS 04.11, 8.2.3 */
+ OCT1 sm_rp_cause /* RP-Cause value, see GSM TS 04.11, 8.2.5.4 */
+) := ts_GSUP(
+ OSMO_GSUP_MSGT_MO_FORWARD_SM_ERROR,
+ {
+ valueof(ts_GSUP_IE_IMSI(imsi)),
+ valueof(ts_GSUP_IE_SM_RP_MR(sm_rp_mr)),
+ valueof(ts_GSUP_IE_SM_RP_CAUSE(sm_rp_cause)),
+ valueof(ts_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS))
+ }
+);
+template GSUP_PDU tr_GSUP_MO_FORWARD_SM_ERR(
+ template hexstring imsi := ?,
+ template OCT1 sm_rp_mr := ?, /* Message Reference, see GSM TS 04.11, 8.2.3 */
+ template OCT1 sm_rp_cause := ? /* RP-Cause value, see GSM TS 04.11, 8.2.5.4 */
+) := tr_GSUP(
+ OSMO_GSUP_MSGT_MO_FORWARD_SM_ERROR,
+ {
+ tr_GSUP_IE_IMSI(imsi),
+ tr_GSUP_IE_SM_RP_MR(sm_rp_mr),
+ tr_GSUP_IE_SM_RP_CAUSE(sm_rp_cause),
+ tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS),
+ tr_GSUP_IE_Source_Name(?)
+ }
+);
+
+template (value) GSUP_PDU ts_GSUP_MT_FORWARD_SM_REQ(
+ hexstring imsi,
+ OCT1 sm_rp_mr, /* Message Reference, see GSM TS 04.11, 8.2.3 */
+ GSUP_SM_RP_DA sm_rp_da, /* Destination Address, see 7.6.8.1 */
+ GSUP_SM_RP_OA sm_rp_oa, /* Originating Address, see 7.6.8.2 */
+ octetstring sm_rp_ui, /* SM TPDU, see 7.6.8.4 */
+ OCT1 sm_rp_mms /* MMS (More Messages to Send), see 7.6.8.7 */
+) := ts_GSUP(
+ OSMO_GSUP_MSGT_MT_FORWARD_SM_REQUEST,
+ {
+ /**
+ * TODO: add MT-specific fields (and IEs):
+ * - smDeliveryTimer
+ * - smDeliveryStartTime
+ */
+ valueof(ts_GSUP_IE_IMSI(imsi)),
+ valueof(ts_GSUP_IE_SM_RP_MR(sm_rp_mr)),
+ valueof(ts_GSUP_IE_SM_RP_DA(sm_rp_da)),
+ valueof(ts_GSUP_IE_SM_RP_OA(sm_rp_oa)),
+ valueof(ts_GSUP_IE_SM_RP_UI(sm_rp_ui)),
+ valueof(ts_GSUP_IE_SM_RP_MMS(sm_rp_mms)),
+ valueof(ts_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS))
+ }
+);
+template GSUP_PDU tr_GSUP_MT_FORWARD_SM_REQ(
+ template hexstring imsi := ?,
+ template OCT1 sm_rp_mr := ?, /* Message Reference, see GSM TS 04.11, 8.2.3 */
+ template GSUP_SM_RP_DA sm_rp_da, /* Destination Address, see 7.6.8.1 */
+ template GSUP_SM_RP_OA sm_rp_oa, /* Originating Address, see 7.6.8.2 */
+ template octetstring sm_rp_ui, /* SM TPDU, see 7.6.8.4 */
+ template OCT1 sm_rp_mms /* MMS (More Messages to Send), see 7.6.8.7 */
+) := tr_GSUP(
+ OSMO_GSUP_MSGT_MT_FORWARD_SM_REQUEST,
+ {
+ /**
+ * TODO: add MT-specific fields (and IEs):
+ * - smDeliveryTimer
+ * - smDeliveryStartTime
+ */
+ tr_GSUP_IE_IMSI(imsi),
+ tr_GSUP_IE_SM_RP_MR(sm_rp_mr),
+ tr_GSUP_IE_SM_RP_DA(sm_rp_da),
+ tr_GSUP_IE_SM_RP_OA(sm_rp_oa),
+ tr_GSUP_IE_SM_RP_UI(sm_rp_ui),
+ tr_GSUP_IE_SM_RP_MMS(sm_rp_mms),
+ tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS),
+ tr_GSUP_IE_Source_Name(?)
+ }
+);
+
+template (value) GSUP_PDU ts_GSUP_MT_FORWARD_SM_RES(
+ hexstring imsi,
+ OCT1 sm_rp_mr /* Message Reference, see GSM TS 04.11, 8.2.3 */
+) := ts_GSUP(
+ OSMO_GSUP_MSGT_MT_FORWARD_SM_RESULT,
+ {
+ valueof(ts_GSUP_IE_IMSI(imsi)),
+ valueof(ts_GSUP_IE_SM_RP_MR(sm_rp_mr)),
+ valueof(ts_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS))
+ }
+);
+template GSUP_PDU tr_GSUP_MT_FORWARD_SM_RES(
+ template hexstring imsi := ?,
+ template OCT1 sm_rp_mr := ? /* Message Reference, see GSM TS 04.11, 8.2.3 */
+) := tr_GSUP(
+ OSMO_GSUP_MSGT_MT_FORWARD_SM_RESULT,
+ {
+ tr_GSUP_IE_IMSI(imsi),
+ tr_GSUP_IE_SM_RP_MR(sm_rp_mr),
+ tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS),
+ tr_GSUP_IE_Source_Name(?)
+ }
+);
+
+template (value) GSUP_PDU ts_GSUP_MT_FORWARD_SM_ERR(
+ hexstring imsi,
+ OCT1 sm_rp_mr, /* Message Reference, see GSM TS 04.11, 8.2.3 */
+ OCT1 sm_rp_cause /* RP-Cause value, see GSM TS 04.11, 8.2.5.4 */
+) := ts_GSUP(
+ OSMO_GSUP_MSGT_MT_FORWARD_SM_ERROR,
+ {
+ valueof(ts_GSUP_IE_IMSI(imsi)),
+ valueof(ts_GSUP_IE_SM_RP_MR(sm_rp_mr)),
+ valueof(ts_GSUP_IE_SM_RP_CAUSE(sm_rp_cause)),
+ valueof(ts_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS))
+ }
+);
+template GSUP_PDU tr_GSUP_MT_FORWARD_SM_ERR(
+ template hexstring imsi := ?,
+ template OCT1 sm_rp_mr := ?, /* Message Reference, see GSM TS 04.11, 8.2.3 */
+ template OCT1 sm_rp_cause := ? /* RP-Cause value, see GSM TS 04.11, 8.2.5.4 */
+) := tr_GSUP(
+ OSMO_GSUP_MSGT_MT_FORWARD_SM_ERROR,
+ {
+ tr_GSUP_IE_IMSI(imsi),
+ tr_GSUP_IE_SM_RP_MR(sm_rp_mr),
+ tr_GSUP_IE_SM_RP_CAUSE(sm_rp_cause),
+ tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS),
+ tr_GSUP_IE_Source_Name(?)
+ }
+);
+
+template (value) GSUP_PDU ts_GSUP_MO_READY_FOR_SM_REQ(
+ hexstring imsi,
+ OCT1 sm_rp_mr, /* Message Reference, see GSM TS 04.11, 8.2.3 */
+ GSUP_SM_ALERT_RSN_Type sm_alert_rsn /* SM Alert Reason, see 7.6.8.8 */
+) := ts_GSUP(
+ OSMO_GSUP_MSGT_READY_FOR_SM_REQUEST,
+ {
+ valueof(ts_GSUP_IE_IMSI(imsi)),
+ valueof(ts_GSUP_IE_SM_RP_MR(sm_rp_mr)),
+ valueof(ts_GSUP_IE_SM_ALERT_RSN(sm_alert_rsn)),
+ valueof(ts_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS))
+ }
+);
+template GSUP_PDU tr_GSUP_MO_READY_FOR_SM_REQ(
+ template hexstring imsi := ?,
+ template OCT1 sm_rp_mr := ?, /* Message Reference, see GSM TS 04.11, 8.2.3 */
+ template GSUP_SM_ALERT_RSN_Type sm_alert_rsn := ? /* SM Alert Reason, see 7.6.8.8 */
+) := tr_GSUP(
+ OSMO_GSUP_MSGT_READY_FOR_SM_REQUEST,
+ {
+ tr_GSUP_IE_IMSI(imsi),
+ tr_GSUP_IE_SM_RP_MR(sm_rp_mr),
+ tr_GSUP_IE_SM_ALERT_RSN(sm_alert_rsn),
+ tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS),
+ tr_GSUP_IE_Source_Name(?)
+ }
+);
+
+template (value) GSUP_PDU ts_GSUP_MO_READY_FOR_SM_RES(
+ hexstring imsi,
+ OCT1 sm_rp_mr /* Message Reference, see GSM TS 04.11, 8.2.3 */
+) := ts_GSUP(
+ OSMO_GSUP_MSGT_READY_FOR_SM_RESULT,
+ {
+ valueof(ts_GSUP_IE_IMSI(imsi)),
+ valueof(ts_GSUP_IE_SM_RP_MR(sm_rp_mr)),
+ valueof(ts_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS))
+ }
+);
+template GSUP_PDU tr_GSUP_MO_READY_FOR_SM_RES(
+ template hexstring imsi := ?,
+ template OCT1 sm_rp_mr := ? /* Message Reference, see GSM TS 04.11, 8.2.3 */
+) := tr_GSUP(
+ OSMO_GSUP_MSGT_READY_FOR_SM_RESULT,
+ {
+ tr_GSUP_IE_IMSI(imsi),
+ tr_GSUP_IE_SM_RP_MR(sm_rp_mr),
+ tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS),
+ tr_GSUP_IE_Source_Name(?)
+ }
+);
+
+template (value) GSUP_PDU ts_GSUP_MO_READY_FOR_SM_ERR(
+ hexstring imsi,
+ OCT1 sm_rp_mr, /* Message Reference, see GSM TS 04.11, 8.2.3 */
+ OCT1 sm_rp_cause /* RP-Cause value, see GSM TS 04.11, 8.2.5.4 */
+) := ts_GSUP(
+ OSMO_GSUP_MSGT_READY_FOR_SM_ERROR,
+ {
+ valueof(ts_GSUP_IE_IMSI(imsi)),
+ valueof(ts_GSUP_IE_SM_RP_MR(sm_rp_mr)),
+ valueof(ts_GSUP_IE_SM_RP_CAUSE(sm_rp_cause)),
+ valueof(ts_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS))
+ }
+);
+template GSUP_PDU tr_GSUP_MO_READY_FOR_SM_ERR(
+ template hexstring imsi := ?,
+ template OCT1 sm_rp_mr := ?, /* Message Reference, see GSM TS 04.11, 8.2.3 */
+ template OCT1 sm_rp_cause := ? /* RP-Cause value, see GSM TS 04.11, 8.2.5.4 */
+) := tr_GSUP(
+ OSMO_GSUP_MSGT_READY_FOR_SM_ERROR,
+ {
+ tr_GSUP_IE_IMSI(imsi),
+ tr_GSUP_IE_SM_RP_MR(sm_rp_mr),
+ tr_GSUP_IE_SM_RP_CAUSE(sm_rp_cause),
+ tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS),
+ tr_GSUP_IE_Source_Name(?)
+ }
+);
+
+function f_gsup_find_nested_ie_multiple(GSUP_IEs ies, GSUP_IEI iei, integer nth, out GSUP_IeValue ret) return boolean {
+ var integer current := 0;
+ for (var integer i := 0; i < sizeof(ies); i := i+1) {
+ if (ies[i].tag == iei) {
+ if (current == nth) {
+ ret := ies[i].val;
+ return true;
+ } else {
+ current := current + 1;
+ }
+ }
+ }
+ return false;
+}
+
+function f_gsup_find_nested_ie(GSUP_IEs ies, GSUP_IEI iei, out GSUP_IeValue ret) return boolean {
+ for (var integer i := 0; i < sizeof(ies); i := i+1) {
+ if (ies[i].tag == iei) {
+ ret := ies[i].val;
+ return true;
+ }
+ }
+ return false;
+}
+
+function f_gsup_find_ie(GSUP_PDU msg, GSUP_IEI iei, out GSUP_IeValue ret) return boolean {
+ return f_gsup_find_nested_ie(msg.ies, iei, ret);
+}
+
+template GSUP_AN_APDU t_GSUP_AN_APDU(
+ template GSUP_AN_PROTO an_proto := ?,
+ template octetstring pdu := ?
+) := {
+ proto := an_proto,
+ pdu := pdu
+};
+
+template GSUP_PDU tr_GSUP_E_AN_APDU(
+ template GSUP_MessageType msgt,
+ template hexstring imsi := ?,
+ template octetstring source_name := ?,
+ template octetstring destination_name := ?,
+ template GSUP_AN_APDU an_apdu := ?
+) := tr_GSUP(
+ msgt,
+ {
+ tr_GSUP_IE_IMSI(imsi),
+ tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_INTER_MSC),
+ tr_GSUP_IE_Source_Name(source_name),
+ tr_GSUP_IE_Destination_Name(destination_name),
+ tr_GSUP_IE_AN_APDU(an_apdu)
+ }
+);
+
+template GSUP_PDU tr_GSUP_E_NO_PDU(
+ template GSUP_MessageType msgt,
+ template hexstring imsi := ?,
+ template octetstring source_name := ?,
+ template octetstring destination_name := ?
+) := tr_GSUP(
+ msgt,
+ {
+ tr_GSUP_IE_IMSI(imsi),
+ tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_INTER_MSC),
+ tr_GSUP_IE_Source_Name(source_name),
+ tr_GSUP_IE_Destination_Name(destination_name)
+ }
+);
+
+template (value) GSUP_PDU ts_GSUP_E_AN_APDU(
+ GSUP_MessageType msgt,
+ hexstring imsi,
+ octetstring source_name,
+ octetstring destination_name,
+ GSUP_AN_APDU an_apdu
+) := ts_GSUP(
+ msgt,
+ {
+ valueof(ts_GSUP_IE_IMSI(imsi)),
+ valueof(ts_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_INTER_MSC)),
+ valueof(ts_GSUP_IE_Source_Name(source_name)),
+ valueof(ts_GSUP_IE_Destination_Name(destination_name)),
+ valueof(ts_GSUP_IE_AN_APDU(an_apdu))
+ }
+);
+
+template (value) GSUP_PDU ts_GSUP_E_PrepareHandoverResult(
+ hexstring imsi,
+ hexstring msisdn,
+ octetstring source_name,
+ octetstring destination_name,
+ GSUP_AN_APDU an_apdu
+) := ts_GSUP(
+ OSMO_GSUP_MSGT_E_PREPARE_HANDOVER_RESULT,
+ {
+ valueof(ts_GSUP_IE_IMSI(imsi)),
+ valueof(ts_GSUP_IE_MSISDN(msisdn)),
+ valueof(ts_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_INTER_MSC)),
+ valueof(ts_GSUP_IE_Source_Name(source_name)),
+ valueof(ts_GSUP_IE_Destination_Name(destination_name)),
+ valueof(ts_GSUP_IE_AN_APDU(an_apdu))
+ }
+);
+
+} with { encode "RAW"; variant "FIELDORDER(msb)" }
diff --git a/library/GSUP_Types.ttcn b/library/GSUP_Types.ttcn
index 10955e7..f9faeb7 100644
--- a/library/GSUP_Types.ttcn
+++ b/library/GSUP_Types.ttcn
@@ -323,781 +323,13 @@
type record of GSUP_PDU GSUP_PDUs;
+
external function enc_GSUP_PDU(in GSUP_PDU msg) return octetstring
with { extension "prototype(convert) encode(RAW)" };
external function dec_GSUP_PDU(in octetstring msg) return GSUP_PDU
with { extension "prototype(convert) decode(RAW)" };
-function f_gsup_postprocess_decoded(inout GSUP_PDU gsup) {
- if (gsup.ies[0].tag == OSMO_GSUP_IMSI_IE) {
- /* if last digit is 'F', then there's an odd number of digits and we must strip the F */
- var integer num_digits := lengthof(gsup.ies[0].val.imsi);
- if (gsup.ies[0].val.imsi[num_digits-1] == 'F'H) {
- gsup.ies[0].val.imsi := substr(gsup.ies[0].val.imsi, 0, num_digits-1);
- }
- }
-}
-
-function f_gsup_preprocess_encoded(inout GSUP_PDU gsup) {
- if (ischosen(gsup.ies[0].val.imsi)) {
- /* if number of digits is odd, add a 'F' as padding at the end */
- var integer num_digits := lengthof(gsup.ies[0].val.imsi);
- if (num_digits rem 2 == 1) {
- gsup.ies[0].val.imsi := gsup.ies[0].val.imsi & 'F'H;
- }
- }
-}
-
-template (value) GSUP_MSISDN ts_GSUP_MSISDN(hexstring digits,
- BIT3 ton := '000'B,
- BIT4 npi := '0000'B) := {
- len := 0, /* overwritten */
- /* numberingPlanIdentification := npi,
- typeOfNumber := ton,
- ext1 := '0'B, */
- digits := digits
-}
-
-template GSUP_MSISDN tr_GSUP_MSISDN(template hexstring digits,
- template BIT3 ton := ?,
- template BIT4 npi := ?) := {
- len := ?,
- /* numberingPlanIdentification := npi,
- typeOfNumber := ton,
- ext1 := '0'B, */
- digits := digits
-}
-
-
-
-template GSUP_IE ts_GSUP_IE_AuthTuple2G(octetstring rand, octetstring sres,
- octetstring kc) := {
- tag := OSMO_GSUP_AUTH_TUPLE_IE,
- len := 0, /* overwritten */
- val := {
- auth_tuple := {
- valueof(ts_GSUP_IE_RAND(rand)),
- valueof(ts_GSUP_IE_SRES(sres)),
- valueof(ts_GSUP_IE_Kc(kc))
- }
- }
-}
-
-template GSUP_IE tr_GSUP_IE_AuthTuple3G(
- template (present) octetstring rand := ?,
- template (present) octetstring ik := ?,
- template (present) octetstring ck := ?,
- template (present) octetstring autn := ?,
- template (present) octetstring res := ?) := {
- tag := OSMO_GSUP_AUTH_TUPLE_IE,
- len := ?,
- val := {
- auth_tuple := {
- tr_GSUP_IE_RAND(rand),
- tr_GSUP_IE_IK(ik),
- tr_GSUP_IE_CK(ck),
- tr_GSUP_IE_AUTN(autn),
- tr_GSUP_IE_RES(res)
- }
- }
-}
-
-template GSUP_IE ts_GSUP_IE_AuthTuple3G(octetstring rand, octetstring ik,
- octetstring ck, octetstring autn,
- octetstring res) := {
- tag := OSMO_GSUP_AUTH_TUPLE_IE,
- len := 0, /* overwritten */
- val := {
- auth_tuple := {
- valueof(ts_GSUP_IE_RAND(rand)),
- valueof(ts_GSUP_IE_IK(ik)),
- valueof(ts_GSUP_IE_CK(ck)),
- valueof(ts_GSUP_IE_AUTN(autn)),
- valueof(ts_GSUP_IE_RES(res))
- }
- }
-}
-
-template GSUP_IE tr_GSUP_IE_AuthTuple2G3G(
- template (present) octetstring rand := ?,
- template (present) octetstring sres := ?,
- template (present) octetstring kc := ?,
- template (present) octetstring ik := ?,
- template (present) octetstring ck := ?,
- template (present) octetstring autn := ?,
- template (present) octetstring res := ?) := {
- tag := OSMO_GSUP_AUTH_TUPLE_IE,
- len := ?,
- val := {
- auth_tuple := {
- tr_GSUP_IE_RAND(rand),
- tr_GSUP_IE_SRES(sres),
- tr_GSUP_IE_Kc(kc),
- tr_GSUP_IE_IK(ik),
- tr_GSUP_IE_CK(ck),
- tr_GSUP_IE_AUTN(autn),
- tr_GSUP_IE_RES(res)
- }
- }
-}
-
-template GSUP_IE ts_GSUP_IE_AuthTuple2G3G(octetstring rand, octetstring sres,
- octetstring kc, octetstring ik,
- octetstring ck, octetstring autn,
- octetstring res) := {
- tag := OSMO_GSUP_AUTH_TUPLE_IE,
- len := 0, /* overwritten */
- val := {
- auth_tuple := {
- valueof(ts_GSUP_IE_RAND(rand)),
- valueof(ts_GSUP_IE_SRES(sres)),
- valueof(ts_GSUP_IE_Kc(kc)),
- valueof(ts_GSUP_IE_IK(ik)),
- valueof(ts_GSUP_IE_CK(ck)),
- valueof(ts_GSUP_IE_AUTN(autn)),
- valueof(ts_GSUP_IE_RES(res))
- }
- }
-}
-
-template GSUP_IE ts_GSUP_IE_PdpInfo(octetstring apn, octetstring pdp_type, octetstring pdp_qos) := {
- tag := OSMO_GSUP_PDP_INFO_IE,
- len := 0, /* overwritten */
- val := {
- pdp_info := {
- valueof(ts_GSUP_IE_APN(apn)),
- valueof(ts_GSUP_IE_PDP_TYPE(pdp_type)),
- valueof(ts_GSUP_IE_PDP_QOS(pdp_qos))
- }
- }
-}
-
-template (value) GSUP_IE ts_GSUP_IE_PDP_CONTEXT_ID(OCT1 ctx_id) := {
- tag := OSMO_GSUP_PDP_CONTEXT_ID_IE,
- len := 0,
- val := {
- pdp_ctx_id := ctx_id
- }
-}
-
-template GSUP_IE tr_GSUP_IE_PDP_CONTEXT_ID(template OCT1 ctx_id) := {
- tag := OSMO_GSUP_PDP_CONTEXT_ID_IE,
- len := ?,
- val := {
- pdp_ctx_id := ctx_id
- }
-}
-
-
-template (value) GSUP_IE ts_GSUP_IE_PDP_TYPE(OCT2 pdp_type) := {
- tag := OSMO_GSUP_PDP_TYPE_IE,
- len := 0,
- val := {
- pdp_type := pdp_type
- }
-}
-
-template (value) GSUP_IE ts_GSUP_IE_PDP_QOS(octetstring pdp_qos) := {
- tag := OSMO_GSUP_PDP_QOS_IE,
- len := 0,
- val := {
- pdp_qos := pdp_qos
- }
-}
-
-
-template GSUP_PDU tr_GSUP(template GSUP_MessageType msgt := ?, template GSUP_IEs ies := *) := {
- msg_type := msgt,
- ies := ies
-}
-
-template (present) GSUP_PDU tr_GSUP_IMSI(template (present) GSUP_MessageType msgt := ?, template (present) hexstring imsi := ?) := {
- msg_type := msgt,
- ies := { tr_GSUP_IE_IMSI(imsi), * }
-}
-
-template GSUP_PDU ts_GSUP(GSUP_MessageType msgt, GSUP_IEs ies := {}) := {
- msg_type := msgt,
- ies := ies
-}
-
-template (value) GSUP_IMEI ts_GSUP_IMEI(hexstring digits) := {
- len := 0, /* overwritten */
- digits := digits
-}
-
-template GSUP_IMEI tr_GSUP_IMEI(template hexstring digits) := {
- len := ?,
- digits := digits
-}
-
-
-template (value) GSUP_PDU ts_GSUP_SAI_REQ(hexstring imsi) :=
- ts_GSUP(OSMO_GSUP_MSGT_SEND_AUTH_INFO_REQUEST, { valueof(ts_GSUP_IE_IMSI(imsi)) });
-
-template (value) GSUP_PDU ts_GSUP_SAI_REQ_EPS(hexstring imsi) :=
- ts_GSUP(OSMO_GSUP_MSGT_SEND_AUTH_INFO_REQUEST, {
- valueof(ts_GSUP_IE_IMSI(imsi)),
- valueof(ts_GSUP_IE_CURRENT_RAT_TYPE(RAT_TYPE_EUTRAN_SGs))
- });
-
-template (value) GSUP_PDU ts_GSUP_SAI_REQ_NUM_AUTH(hexstring imsi, OCT1 num_auth_vectors) :=
- ts_GSUP(OSMO_GSUP_MSGT_SEND_AUTH_INFO_REQUEST, {
- valueof(ts_GSUP_IE_IMSI(imsi)),
- valueof(ts_GSUP_IE_NUM_VECTORS_REQ(num_auth_vectors))
- });
-
-template GSUP_PDU tr_GSUP_SAI_REQ(template hexstring imsi) :=
- tr_GSUP_IMSI(OSMO_GSUP_MSGT_SEND_AUTH_INFO_REQUEST, imsi);
-
-template GSUP_PDU tr_GSUP_SAI_REQ_UMTS_AKA_RESYNC(
- template hexstring imsi,
- template octetstring auts,
- template octetstring rand) :=
- tr_GSUP(OSMO_GSUP_MSGT_SEND_AUTH_INFO_REQUEST, {
- tr_GSUP_IE_IMSI(imsi),
- tr_GSUP_IE_AUTS(auts),
- tr_GSUP_IE_RAND(rand),
- *
- });
-
-template (value) GSUP_PDU ts_GSUP_SAI_RES(hexstring imsi, GSUP_IE auth_tuple) :=
- ts_GSUP(OSMO_GSUP_MSGT_SEND_AUTH_INFO_RESULT, {
- valueof(ts_GSUP_IE_IMSI(imsi)), auth_tuple });
-
-template GSUP_PDU tr_GSUP_SAI_ERR(template hexstring imsi, template integer cause) :=
- tr_GSUP(OSMO_GSUP_MSGT_SEND_AUTH_INFO_ERROR, {
- tr_GSUP_IE_IMSI(imsi), tr_GSUP_IE_Cause(cause) });
-
-template (value) GSUP_PDU ts_GSUP_SAI_ERR(hexstring imsi, integer cause) :=
- ts_GSUP(OSMO_GSUP_MSGT_SEND_AUTH_INFO_ERROR, {
- valueof(ts_GSUP_IE_IMSI(imsi)), valueof(ts_GSUP_IE_Cause(cause)) });
-
-
-template GSUP_PDU tr_GSUP_SAI_RES(template (present) hexstring imsi,
- template (present) GSUP_IE auth_tuple_ie := tr_GSUP_IE(OSMO_GSUP_AUTH_TUPLE_IE)) :=
- tr_GSUP(OSMO_GSUP_MSGT_SEND_AUTH_INFO_RESULT, {
- tr_GSUP_IE_IMSI(imsi), *, auth_tuple_ie, * });
-
-template GSUP_PDU ts_GSUP_UL_REQ(hexstring imsi, GSUP_CnDomain dom := OSMO_GSUP_CN_DOMAIN_PS,
- template octetstring source_name := omit) :=
- ts_GSUP(OSMO_GSUP_MSGT_UPDATE_LOCATION_REQUEST, f_gen_ts_ies(imsi, dom := dom,
- source_name := source_name));
-
-template GSUP_PDU tr_GSUP_UL_REQ(template hexstring imsi) :=
- tr_GSUP_IMSI(OSMO_GSUP_MSGT_UPDATE_LOCATION_REQUEST, imsi);
-
-template (value) GSUP_PDU ts_GSUP_UL_RES(hexstring imsi, octetstring destination_name := ''O) :=
- ts_GSUP(OSMO_GSUP_MSGT_UPDATE_LOCATION_RESULT, { valueof(ts_GSUP_IE_IMSI(imsi)),
- valueof(ts_GSUP_IE_Destination_Name(destination_name))});
-
-template GSUP_PDU tr_GSUP_UL_RES(template hexstring imsi, template octetstring destination_name := omit) :=
- tr_GSUP(OSMO_GSUP_MSGT_UPDATE_LOCATION_RESULT, f_gen_tr_ies(imsi, destination_name := destination_name));
-
-template (value) GSUP_PDU ts_GSUP_UL_ERR(hexstring imsi, integer cause) :=
- ts_GSUP(OSMO_GSUP_MSGT_UPDATE_LOCATION_ERROR, {
- valueof(ts_GSUP_IE_IMSI(imsi)), valueof(ts_GSUP_IE_Cause(cause)) });
-
-template GSUP_PDU tr_GSUP_UL_ERR(template hexstring imsi, template integer cause := ?,
- template octetstring destination_name := omit) :=
- tr_GSUP(OSMO_GSUP_MSGT_UPDATE_LOCATION_ERROR,
- f_gen_tr_ies(imsi, cause := cause, destination_name := destination_name));
-
-template (value) GSUP_PDU ts_GSUP_ISD_REQ(hexstring imsi, hexstring msisdn, octetstring destination_name := ''O) :=
- ts_GSUP(OSMO_GSUP_MSGT_INSERT_DATA_REQUEST, {
- valueof(ts_GSUP_IE_IMSI(imsi)), valueof(ts_GSUP_IE_MSISDN(msisdn)),
- valueof(ts_GSUP_IE_Destination_Name(destination_name))});
-
-template GSUP_PDU tr_GSUP_ISD_REQ(template hexstring imsi, template hexstring msisdn := ?,
- template octetstring destination_name := omit) :=
- tr_GSUP(OSMO_GSUP_MSGT_INSERT_DATA_REQUEST,
- f_gen_tr_ies(imsi, msisdn := msisdn, destination_name := destination_name));
-
-template GSUP_PDU ts_GSUP_ISD_RES(hexstring imsi,
- template octetstring source_name := omit,
- template octetstring destination_name := omit) :=
- ts_GSUP(OSMO_GSUP_MSGT_INSERT_DATA_RESULT,
- f_gen_ts_ies(imsi, source_name := source_name,
- destination_name := destination_name));
-
-template GSUP_PDU tr_GSUP_ISD_RES(template hexstring imsi) :=
- tr_GSUP_IMSI(OSMO_GSUP_MSGT_INSERT_DATA_RESULT, imsi);
-
-template GSUP_PDU tr_GSUP_AUTH_FAIL_IND(hexstring imsi) :=
- tr_GSUP_IMSI(OSMO_GSUP_MSGT_AUTH_FAIL_REPORT, imsi);
-
-template (value) GSUP_PDU ts_GSUP_CL_REQ(hexstring imsi, GSUP_CancelType ctype) :=
- ts_GSUP(OSMO_GSUP_MSGT_LOCATION_CANCEL_REQUEST, {
- valueof(ts_GSUP_IE_IMSI(imsi)), valueof(ts_GSUP_IE_CancelType(ctype)) });
-
-template GSUP_PDU tr_GSUP_CL_RES(template hexstring imsi) :=
- tr_GSUP_IMSI(OSMO_GSUP_MSGT_LOCATION_CANCEL_RESULT, imsi);
-
-template GSUP_PDU tr_GSUP_CL_ERR(template hexstring imsi, template integer cause := ?) :=
- tr_GSUP(OSMO_GSUP_MSGT_LOCATION_CANCEL_ERROR, {
- tr_GSUP_IE_IMSI(imsi), tr_GSUP_IE_Cause(cause), * });
-
-template (value) GSUP_PDU ts_GSUP_PURGE_MS_REQ(hexstring imsi, GSUP_CnDomain dom) :=
- ts_GSUP(OSMO_GSUP_MSGT_PURGE_MS_REQUEST, {
- valueof(ts_GSUP_IE_IMSI(imsi)), valueof(ts_GSUP_IE_CnDomain(dom)) });
-
-template GSUP_PDU tr_GSUP_PURGE_MS_REQ(template hexstring imsi, template GSUP_CnDomain dom := ?) :=
- tr_GSUP(OSMO_GSUP_MSGT_PURGE_MS_REQUEST, {
- tr_GSUP_IE_IMSI(imsi), *, tr_GSUP_IE_CnDomain(dom) });
-
-template (value) GSUP_PDU ts_GSUP_PURGE_MS_RES(hexstring imsi) :=
- ts_GSUP(OSMO_GSUP_MSGT_PURGE_MS_RESULT, {
- valueof(ts_GSUP_IE_IMSI(imsi)) });
-
-template GSUP_PDU tr_GSUP_PURGE_MS_RES(template hexstring imsi) :=
- tr_GSUP(OSMO_GSUP_MSGT_PURGE_MS_RESULT, {
- tr_GSUP_IE_IMSI(imsi), * });
-
-template GSUP_PDU tr_GSUP_PURGE_MS_ERR(template hexstring imsi, template integer cause) :=
- tr_GSUP(OSMO_GSUP_MSGT_PURGE_MS_ERROR, {
- tr_GSUP_IE_IMSI(imsi), tr_GSUP_IE_Cause(cause) });
-
-template (value) GSUP_PDU ts_GSUP_CHECK_IMEI_REQ(hexstring imsi, hexstring imei,
- template (omit) octetstring source_name := omit) :=
- ts_GSUP(OSMO_GSUP_MSGT_CHECK_IMEI_REQUEST, f_gen_ts_ies(imsi, imei := imei, source_name := source_name));
-
-template GSUP_PDU tr_GSUP_CHECK_IMEI_REQ(
- template hexstring imsi,
- template hexstring imei
-) := tr_GSUP(
- OSMO_GSUP_MSGT_CHECK_IMEI_REQUEST,
- {
- tr_GSUP_IE_IMSI(imsi),
- tr_GSUP_IE_IMEI(imei),
- tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SUBSCRIBER_MANAGEMENT)
- }
-);
-
-template (value) GSUP_PDU ts_GSUP_CHECK_IMEI_RES(hexstring imsi, GSUP_IMEIResult result) :=
- ts_GSUP(OSMO_GSUP_MSGT_CHECK_IMEI_RESULT, {
- valueof(ts_GSUP_IE_IMSI(imsi)), valueof(ts_GSUP_IE_IMEI_Result(result)) });
-
-template GSUP_PDU tr_GSUP_CHECK_IMEI_RES(template hexstring imsi, template GSUP_IMEIResult result,
- template octetstring destination_name := omit) :=
- tr_GSUP(OSMO_GSUP_MSGT_CHECK_IMEI_RESULT,
- f_gen_tr_ies(imsi, imei_result := result, destination_name := destination_name));
-
-template (value) GSUP_PDU ts_GSUP_CHECK_IMEI_ERR(hexstring imsi, integer cause) :=
- ts_GSUP(OSMO_GSUP_MSGT_CHECK_IMEI_ERROR, {
- valueof(ts_GSUP_IE_IMSI(imsi)), valueof(ts_GSUP_IE_Cause(cause)) });
-
-template GSUP_PDU tr_GSUP_CHECK_IMEI_ERR(template hexstring imsi, template integer cause,
- template octetstring destination_name := omit) :=
- tr_GSUP(OSMO_GSUP_MSGT_CHECK_IMEI_ERROR, f_gen_tr_ies(imsi, cause := cause, destination_name := destination_name));
-
-
-/* EPDG Tunnel */
-template (value) GSUP_PDU ts_GSUP_EPDGTunnel_REQ(hexstring imsi,
- GSUP_Message_Class message_class := OSMO_GSUP_MESSAGE_CLASS_IPSEC_EPDG,
- GSUP_CnDomain dom := OSMO_GSUP_CN_DOMAIN_PS,
- template (omit) octetstring source_name := omit) :=
- ts_GSUP(OSMO_GSUP_MSGT_EPDG_TUNNEL_REQUEST, f_gen_ts_ies(imsi,
- message_class := message_class,
- dom := dom,
- source_name := source_name));
-
-template (present) GSUP_PDU tr_GSUP_EPDGTunnel_REQ(template (present) hexstring imsi := ?,
- template (present) GSUP_Message_Class message_class := OSMO_GSUP_MESSAGE_CLASS_IPSEC_EPDG) :=
- tr_GSUP(OSMO_GSUP_MSGT_EPDG_TUNNEL_REQUEST,
- f_gen_tr_ies(imsi,
- message_class := message_class));
-
-
-template (value) GSUP_PDU ts_GSUP_EPDGTunnel_RES(hexstring imsi,
- GSUP_Message_Class message_class := OSMO_GSUP_MESSAGE_CLASS_IPSEC_EPDG,
- octetstring destination_name := ''O) :=
- ts_GSUP(OSMO_GSUP_MSGT_EPDG_TUNNEL_RESULT, {
- valueof(ts_GSUP_IE_IMSI(imsi)),
- valueof(ts_GSUP_IE_Message_Class(message_class)),
- valueof(ts_GSUP_IE_Destination_Name(destination_name))
- });
-
-template (present) GSUP_PDU tr_GSUP_EPDGTunnel_RES(template (present) hexstring imsi,
- template (present) GSUP_Message_Class message_class := OSMO_GSUP_MESSAGE_CLASS_IPSEC_EPDG,
- template octetstring destination_name := omit) :=
- tr_GSUP(OSMO_GSUP_MSGT_EPDG_TUNNEL_RESULT,
- f_gen_tr_ies(imsi,
- message_class := message_class,
- destination_name := destination_name));
-
-template (value) GSUP_PDU ts_GSUP_EPDGTunnel_ERR(hexstring imsi,
- GSUP_Message_Class message_class := OSMO_GSUP_MESSAGE_CLASS_IPSEC_EPDG,
- integer cause := 0) :=
- ts_GSUP(OSMO_GSUP_MSGT_EPDG_TUNNEL_ERROR, {
- valueof(ts_GSUP_IE_IMSI(imsi)),
- valueof(ts_GSUP_IE_Cause(cause)),
- valueof(ts_GSUP_IE_Message_Class(message_class))
- });
-
-template (present) GSUP_PDU tr_GSUP_EPDGTunnel_ERR(template (present) hexstring imsi,
- template (present) GSUP_Message_Class message_class := OSMO_GSUP_MESSAGE_CLASS_IPSEC_EPDG,
- template (present) integer cause := ?,
- template octetstring destination_name := omit) :=
- tr_GSUP(OSMO_GSUP_MSGT_EPDG_TUNNEL_ERROR,
- f_gen_tr_ies(imsi,
- message_class := message_class,
- cause := cause,
- destination_name := destination_name));
-
-
-template (value) GSUP_IE ts_GSUP_IE_CancelType(GSUP_CancelType ctype) := {
- tag := OSMO_GSUP_CANCEL_TYPE_IE,
- len := 0, /* overwritten */
- val := {
- cancel_type := ctype
- }
-}
-
-template GSUP_IE tr_GSUP_IE_CancelType(template GSUP_CancelType ctype) :=
- tr_GSUP_IE(OSMO_GSUP_CANCEL_TYPE_IE, GSUP_IeValue:{cancel_type:=ctype});
-
-template GSUP_IE tr_GSUP_IE_CnDomain(template GSUP_CnDomain domain) :=
- tr_GSUP_IE(OSMO_GSUP_CN_DOMAIN_IE, GSUP_IeValue:{cn_domain:=domain});
-
-template GSUP_IE tr_GSUP_IE(template GSUP_IEI iei, template GSUP_IeValue val := ?) := {
- tag := iei,
- len := ?,
- val := val
-}
-
-template (value) GSUP_IE ts_GSUP_IE_IMSI(hexstring imsi) := {
- tag := OSMO_GSUP_IMSI_IE,
- len := 0, /* overwritten */
- val := {
- imsi := imsi
- }
-}
-
-template (present) GSUP_IE tr_GSUP_IE_IMSI(template (present) hexstring imsi := ?) := {
- tag := OSMO_GSUP_IMSI_IE,
- len := ?,
- val := {
- imsi := imsi
- }
-}
-
-template (value) GSUP_IE ts_GSUP_IE_MSISDN(hexstring msisdn) := {
- tag := OSMO_GSUP_MSISDN_IE,
- len := 0, /* overwritten */
- val := {
- msisdn := ts_GSUP_MSISDN(msisdn)
- }
-}
-
-template GSUP_IE tr_GSUP_IE_MSISDN(template hexstring msisdn) := {
- tag := OSMO_GSUP_MSISDN_IE,
- len := ?,
- val := {
- msisdn := tr_GSUP_MSISDN(msisdn)
- }
-}
-
-
-template (value) GSUP_IE ts_GSUP_IE_Cause(integer cause) := {
- tag := OSMO_GSUP_CAUSE_IE,
- len := 0, /* overwritten */
- val := {
- cause := cause
- }
-}
-
-template GSUP_IE tr_GSUP_IE_Cause(template integer cause) := {
- tag := OSMO_GSUP_CAUSE_IE,
- len := ?,
- val := {
- cause := cause
- }
-}
-
-template (value) GSUP_IE ts_GSUP_IE_AUTS(octetstring auts) := {
- tag := OSMO_GSUP_AUTS_IE,
- len := 0, /* overwritten */
- val := {
- auts := auts
- }
-}
-
-template GSUP_IE tr_GSUP_IE_AUTS(template octetstring auts) := {
- tag := OSMO_GSUP_AUTS_IE,
- len := ?,
- val := {
- auts := auts
- }
-}
-
-template (value) GSUP_IE ts_GSUP_IE_RAND(octetstring rand) := {
- tag := OSMO_GSUP_RAND_IE,
- len := 0, /* overwritten */
- val := {
- rand := rand
- }
-}
-
-template GSUP_IE tr_GSUP_IE_RAND(template octetstring rand := ?) := {
- tag := OSMO_GSUP_RAND_IE,
- len := ?,
- val := {
- rand := rand
- }
-}
-
-template (present) GSUP_IE tr_GSUP_IE_SRES(template (present) octetstring sres := ?) := {
- tag := OSMO_GSUP_SRES_IE,
- len := ?,
- val := {
- sres := sres
- }
-}
-
-template (value) GSUP_IE ts_GSUP_IE_SRES(octetstring sres) := {
- tag := OSMO_GSUP_SRES_IE,
- len := 0, /* overwritten */
- val := {
- sres := sres
- }
-}
-
-template (present) GSUP_IE tr_GSUP_IE_Kc(template (present) octetstring kc := ?) := {
- tag := OSMO_GSUP_KC_IE,
- len := ?,
- val := {
- kc := kc
- }
-}
-
-template (value) GSUP_IE ts_GSUP_IE_Kc(octetstring kc) := {
- tag := OSMO_GSUP_KC_IE,
- len := 0, /* overwritten */
- val := {
- kc := kc
- }
-}
-
-template (present) GSUP_IE tr_GSUP_IE_IK(template (present) octetstring ik := ?) := {
- tag := OSMO_GSUP_IK_IE,
- len := ?,
- val := {
- ik := ik
- }
-}
-
-template (value) GSUP_IE ts_GSUP_IE_IK(octetstring ik) := {
- tag := OSMO_GSUP_IK_IE,
- len := 0, /* overwritten */
- val := {
- ik := ik
- }
-}
-
-template (present) GSUP_IE tr_GSUP_IE_CK(template (present) octetstring ck := ?) := {
- tag := OSMO_GSUP_CK_IE,
- len := ?,
- val := {
- ck := ck
- }
-}
-
-template (value) GSUP_IE ts_GSUP_IE_CK(octetstring ck) := {
- tag := OSMO_GSUP_CK_IE,
- len := 0, /* overwritten */
- val := {
- ck := ck
- }
-}
-
-template (present) GSUP_IE tr_GSUP_IE_AUTN(template (present) octetstring autn := ?) := {
- tag := OSMO_GSUP_AUTN_IE,
- len := ?,
- val := {
- autn := autn
- }
-}
-
-template (value) GSUP_IE ts_GSUP_IE_AUTN(octetstring autn) := {
- tag := OSMO_GSUP_AUTN_IE,
- len := 0, /* overwritten */
- val := {
- autn := autn
- }
-}
-
-template (present) GSUP_IE tr_GSUP_IE_RES(template (present) octetstring res := ?) := {
- tag := OSMO_GSUP_RES_IE,
- len := ?,
- val := {
- res := res
- }
-}
-
-template (value) GSUP_IE ts_GSUP_IE_RES(octetstring res) := {
- tag := OSMO_GSUP_RES_IE,
- len := 0, /* overwritten */
- val := {
- res := res
- }
-}
-
-template (value) GSUP_IE ts_GSUP_IE_APN(octetstring apn) := {
- tag := OSMO_GSUP_ACCESS_POINT_NAME_IE,
- len := 0, /* overwritten */
- val := {
- apn := apn
- }
-}
-
-template GSUP_IE tr_GSUP_IE_APN(template octetstring apn) := {
- tag := OSMO_GSUP_ACCESS_POINT_NAME_IE,
- len := ?,
- val := {
- apn := apn
- }
-}
-
-template GSUP_IE ts_GSUP_IE_CnDomain(template GSUP_CnDomain dom) := {
- tag := OSMO_GSUP_CN_DOMAIN_IE,
- len := 0, /* overwritten */
- val := {
- cn_domain := dom
- }
-}
-
-template (value) GSUP_IE ts_GSUP_IE_SessionId(OCT4 sid) := {
- tag := OSMO_GSUP_SESSION_ID_IE,
- len := 0, /* overwritten */
- val := {
- session_id := sid
- }
-}
-template GSUP_IE tr_GSUP_IE_SessionId(template OCT4 sid) := {
- tag := OSMO_GSUP_SESSION_ID_IE,
- len := ?,
- val := {
- session_id := sid
- }
-}
-
-template (value) GSUP_IE ts_GSUP_IE_SessionState(GSUP_SessionState state) := {
- tag := OSMO_GSUP_SESSION_STATE_IE,
- len := 0, /* overwritten */
- val := {
- session_state := state
- }
-}
-template GSUP_IE tr_GSUP_IE_SessionState(template GSUP_SessionState state) := {
- tag := OSMO_GSUP_SESSION_STATE_IE,
- len := ?,
- val := {
- session_state := state
- }
-}
-
-template (value) GSUP_IE ts_GSUP_IE_SM_RP_MR(OCT1 ref) := {
- tag := OSMO_GSUP_SM_RP_MR_IE,
- len := 0, /* overwritten */
- val := {
- sm_rp_mr := ref
- }
-}
-template GSUP_IE tr_GSUP_IE_SM_RP_MR(template OCT1 ref) := {
- tag := OSMO_GSUP_SM_RP_MR_IE,
- len := ?,
- val := {
- sm_rp_mr := ref
- }
-}
-
-template (value) GSUP_IE ts_GSUP_IE_SM_RP_CAUSE(OCT1 cause) := {
- tag := OSMO_GSUP_SM_RP_CAUSE_IE,
- len := 0, /* overwritten */
- val := {
- sm_rp_cause := cause
- }
-}
-template GSUP_IE tr_GSUP_IE_SM_RP_CAUSE(template OCT1 cause) := {
- tag := OSMO_GSUP_SM_RP_CAUSE_IE,
- len := ?,
- val := {
- sm_rp_cause := cause
- }
-}
-
-template (value) GSUP_IE ts_GSUP_IE_SM_RP_MMS(OCT1 mms) := {
- tag := OSMO_GSUP_SM_RP_MMS_IE,
- len := 0, /* overwritten */
- val := {
- sm_rp_mms := mms
- }
-}
-template GSUP_IE tr_GSUP_IE_SM_RP_MMS(template OCT1 mms) := {
- tag := OSMO_GSUP_SM_RP_MMS_IE,
- len := ?,
- val := {
- sm_rp_mms := mms
- }
-}
-
-template (value) GSUP_IE ts_GSUP_IE_IMEI(hexstring imei) := {
- tag := OSMO_GSUP_IMEI_IE,
- len := 0, /* overwritten */
- val := {
- imei := ts_GSUP_IMEI(imei)
- }
-}
-template GSUP_IE tr_GSUP_IE_IMEI(template hexstring imei) := {
- tag := OSMO_GSUP_IMEI_IE,
- len := ?,
- val := {
- imei := tr_GSUP_IMEI(imei)
- }
-}
-
-template (value) GSUP_IE ts_GSUP_IE_IMEI_Result(GSUP_IMEIResult result) := {
- tag := OSMO_GSUP_IMEI_RESULT_IE,
- len := 0, /* overwritten */
- val := {
- imei_result := result
- }
-}
-template GSUP_IE tr_GSUP_IE_IMEI_Result(template GSUP_IMEIResult result) := {
- tag := OSMO_GSUP_IMEI_RESULT_IE,
- len := ?,
- val := {
- imei_result := result
- }
-}
-
-template (value) GSUP_IE ts_GSUP_IE_NUM_VECTORS_REQ(OCT1 num) := {
- tag := OSMO_GSUP_NUM_VECTORS_REQ_IE,
- len := 0, /* overwritten */
- val := {
- num_auth_vectors := num
- }
-}
-template GSUP_IE tr_GSUP_IE_NUM_VECTORS_REQ(template OCT1 num) := {
- tag := OSMO_GSUP_NUM_VECTORS_REQ_IE,
- len := ?,
- val := {
- num_auth_vectors := num
- }
-}
-
-
-/* Possible identity types for SM-RP-{OA|DA} IEs */
-type enumerated GSUP_SM_RP_ODA_IdType {
- OSMO_GSUP_SM_RP_ODA_ID_NONE ('00'O),
- OSMO_GSUP_SM_RP_ODA_ID_IMSI ('01'O),
- OSMO_GSUP_SM_RP_ODA_ID_MSISDN ('02'O),
- OSMO_GSUP_SM_RP_ODA_ID_SMSC_ADDR ('03'O),
- /* Special value for noSM-RP-DA and noSM-RP-OA */
- OSMO_GSUP_SM_RP_ODA_ID_NULL ('FF'O)
-} with { variant "FIELDLENGTH(8)" };
-
/* See 3GPP TS 24.011, figures 8.5 and 8.6 */
type record GSUP_SM_RP_Addr {
BIT1 ext, /* Extension? */
@@ -1109,27 +341,6 @@
variant "PADDING_PATTERN('1111'B)"
};
-private function f_pad_SM_RP_Addr(template hexstring number)
-return template hexstring {
- if (isvalue(number) and not istemplatekind(number, "omit")) {
- return f_pad_bcd_number(valueof(number));
- } else {
- return number;
- }
-}
-
-template GSUP_SM_RP_Addr t_GSUP_SM_RP_Addr(template hexstring number,
- template BIT4 npi := '0001'B,
- template BIT3 ton := '001'B,
- template BIT1 ext := '1'B) := {
- ext := ext,
- ton := ton,
- npi := npi,
- /* Work around TITAN's padding problems: encoding works fine,
- * but it does not consider 'F'H as padding in decoded data. */
- number := f_pad_SM_RP_Addr(number)
-}
-
/**
* SM-RP-DA represents the SM Destination Address, see 7.6.8.1.
* It can be either of the following:
@@ -1156,57 +367,6 @@
)"
};
-template (value) GSUP_SM_RP_DA ts_GSUP_SM_RP_DA_IMSI(hexstring imsi) := {
- id_type := OSMO_GSUP_SM_RP_ODA_ID_IMSI,
- id_enc := { imsi := imsi }
-}
-template GSUP_SM_RP_DA tr_GSUP_SM_RP_DA_IMSI(template hexstring imsi) := {
- id_type := OSMO_GSUP_SM_RP_ODA_ID_IMSI,
- id_enc := { imsi := imsi }
-}
-
-template (value) GSUP_SM_RP_DA ts_GSUP_SM_RP_DA_MSISDN(GSUP_SM_RP_Addr msisdn) := {
- id_type := OSMO_GSUP_SM_RP_ODA_ID_MSISDN,
- id_enc := { msisdn := msisdn }
-}
-template GSUP_SM_RP_DA tr_GSUP_SM_RP_DA_MSISDN(template GSUP_SM_RP_Addr msisdn) := {
- id_type := OSMO_GSUP_SM_RP_ODA_ID_MSISDN,
- id_enc := { msisdn := msisdn }
-}
-
-template (value) GSUP_SM_RP_DA ts_GSUP_SM_RP_DA_SMSC_ADDR(GSUP_SM_RP_Addr smsc_addr) := {
- id_type := OSMO_GSUP_SM_RP_ODA_ID_SMSC_ADDR,
- id_enc := { smsc_addr := smsc_addr }
-}
-template GSUP_SM_RP_DA tr_GSUP_SM_RP_DA_SMSC_ADDR(template GSUP_SM_RP_Addr smsc_addr) := {
- id_type := OSMO_GSUP_SM_RP_ODA_ID_SMSC_ADDR,
- id_enc := { smsc_addr := smsc_addr }
-}
-
-template (value) GSUP_SM_RP_DA ts_GSUP_SM_RP_DA_NULL := {
- id_type := OSMO_GSUP_SM_RP_ODA_ID_NULL,
- id_enc := omit
-}
-template GSUP_SM_RP_DA tr_GSUP_SM_RP_DA_NULL := {
- id_type := OSMO_GSUP_SM_RP_ODA_ID_NULL,
- id_enc := omit
-}
-
-template (value) GSUP_IE ts_GSUP_IE_SM_RP_DA(GSUP_SM_RP_DA val) := {
- tag := OSMO_GSUP_SM_RP_DA_IE,
- len := 0, /* overwritten */
- val := {
- sm_rp_da := val
- }
-}
-template GSUP_IE tr_GSUP_IE_SM_RP_DA(template GSUP_SM_RP_DA val) := {
- tag := OSMO_GSUP_SM_RP_DA_IE,
- len := ?,
- val := {
- sm_rp_da := val
- }
-}
-
/**
* SM-RP-OA represents the SM Originating Address, see 7.6.8.2.
* It can be either of the following:
@@ -1228,64 +388,6 @@
)"
};
-template (value) GSUP_SM_RP_OA ts_GSUP_SM_RP_OA_MSISDN(GSUP_SM_RP_Addr msisdn) := {
- id_type := OSMO_GSUP_SM_RP_ODA_ID_MSISDN,
- id_enc := { msisdn := msisdn }
-}
-template GSUP_SM_RP_OA tr_GSUP_SM_RP_OA_MSISDN(template GSUP_SM_RP_Addr msisdn) := {
- id_type := OSMO_GSUP_SM_RP_ODA_ID_MSISDN,
- id_enc := { msisdn := msisdn }
-}
-
-template (value) GSUP_SM_RP_OA ts_GSUP_SM_RP_OA_SMSC_ADDR(GSUP_SM_RP_Addr smsc_addr) := {
- id_type := OSMO_GSUP_SM_RP_ODA_ID_SMSC_ADDR,
- id_enc := { smsc_addr := smsc_addr }
-}
-template GSUP_SM_RP_OA tr_GSUP_SM_RP_OA_SMSC_ADDR(template GSUP_SM_RP_Addr smsc_addr) := {
- id_type := OSMO_GSUP_SM_RP_ODA_ID_SMSC_ADDR,
- id_enc := { smsc_addr := smsc_addr }
-}
-
-template (value) GSUP_SM_RP_OA ts_GSUP_SM_RP_OA_NULL := {
- id_type := OSMO_GSUP_SM_RP_ODA_ID_NULL,
- id_enc := omit
-}
-template GSUP_SM_RP_OA tr_GSUP_SM_RP_OA_NULL := {
- id_type := OSMO_GSUP_SM_RP_ODA_ID_NULL,
- id_enc := omit
-}
-
-template (value) GSUP_IE ts_GSUP_IE_SM_RP_OA(GSUP_SM_RP_OA val) := {
- tag := OSMO_GSUP_SM_RP_OA_IE,
- len := 0, /* overwritten */
- val := {
- sm_rp_oa := val
- }
-}
-template GSUP_IE tr_GSUP_IE_SM_RP_OA(template GSUP_SM_RP_OA val) := {
- tag := OSMO_GSUP_SM_RP_OA_IE,
- len := ?,
- val := {
- sm_rp_oa := val
- }
-}
-
-/* SM-RP-UI represents the SM TPDU, see 7.6.8.4 */
-template (value) GSUP_IE ts_GSUP_IE_SM_RP_UI(octetstring val) := {
- tag := OSMO_GSUP_SM_RP_UI_IE,
- len := 0, /* overwritten */
- val := {
- sm_rp_ui := val
- }
-}
-template GSUP_IE tr_GSUP_IE_SM_RP_UI(template octetstring val) := {
- tag := OSMO_GSUP_SM_RP_UI_IE,
- len := ?,
- val := {
- sm_rp_ui := val
- }
-}
-
/* SM Alert Reason types, see 7.6.8.8 */
type enumerated GSUP_SM_ALERT_RSN_Type {
GSUP_SM_ALERT_RSN_TYPE_NONE ('00'O),
@@ -1293,728 +395,14 @@
GSUP_SM_ALERT_RSN_TYPE_MEM_AVAIL ('02'O)
} with { variant "FIELDLENGTH(8)" };
-/* SM Alert Reason IE (used in READY-FOR-SM), see 7.6.8.8 */
-template (value) GSUP_IE ts_GSUP_IE_SM_ALERT_RSN(GSUP_SM_ALERT_RSN_Type rsn) := {
- tag := OSMO_GSUP_SM_ALERT_RSN_IE,
- len := 0, /* overwritten */
- val := {
- sm_alert_rsn := rsn
- }
-}
-template GSUP_IE tr_GSUP_IE_SM_ALERT_RSN(template GSUP_SM_ALERT_RSN_Type rsn) := {
- tag := OSMO_GSUP_SM_ALERT_RSN_IE,
- len := ?,
- val := {
- sm_alert_rsn := rsn
- }
-}
-
-template (value) GSUP_IE ts_GSUP_IE_SSInfo(octetstring ss) := {
- tag := OSMO_GSUP_SS_INFO_IE,
- len := 0, /* overwritten */
- val := {
- ss_info := ss
- }
-}
-template GSUP_IE tr_GSUP_IE_SSInfo(template octetstring ss) := {
- tag := OSMO_GSUP_SS_INFO_IE,
- len := ?,
- val := {
- ss_info := ss
- }
-}
-
-template GSUP_IE tr_GSUP_IE_Message_Class(template GSUP_Message_Class val) := {
- tag := OSMO_GSUP_MESSAGE_CLASS_IE,
- len := ?,
- val := {
- message_class := val
- }
-}
-
-template (value) GSUP_IE ts_GSUP_IE_Message_Class(GSUP_Message_Class val) := {
- tag := OSMO_GSUP_MESSAGE_CLASS_IE,
- len := 0, /* overwritten */
- val := {
- message_class := val
- }
-}
-
-template GSUP_IE tr_GSUP_IE_Source_Name(template octetstring name) := {
- tag := OSMO_GSUP_SOURCE_NAME_IE,
- len := ?,
- val := {
- source_name := name
- }
-}
-
-template (value) GSUP_IE ts_GSUP_IE_Source_Name(octetstring name) := {
- tag := OSMO_GSUP_SOURCE_NAME_IE,
- len := 0, /* overwritten */
- val := {
- source_name := name
- }
-}
-
-template GSUP_IE tr_GSUP_IE_Destination_Name(template octetstring name) := {
- tag := OSMO_GSUP_DESTINATION_NAME_IE,
- len := ?,
- val := {
- destination_name := name
- }
-}
-
-template (value) GSUP_IE ts_GSUP_IE_Destination_Name(octetstring name) := {
- tag := OSMO_GSUP_DESTINATION_NAME_IE,
- len := 0, /* overwritten */
- val := {
- destination_name := name
- }
-}
-
-template GSUP_IE tr_GSUP_IE_AN_APDU(template GSUP_AN_APDU an_apdu) := {
- tag := OSMO_GSUP_AN_APDU_IE,
- len := ?,
- val := {
- an_apdu := an_apdu
- }
-}
-
-template (value) GSUP_IE ts_GSUP_IE_AN_APDU(GSUP_AN_APDU an_apdu) := {
- tag := OSMO_GSUP_AN_APDU_IE,
- len := 0, /* overwritten */
- val := {
- an_apdu := an_apdu
- }
-}
-
-template (present) GSUP_IE tr_GSUP_IE_SUPPORTED_RAT_TYPES(template (present) GSUP_RatTypes ratt) := {
- tag := OSMO_GSUP_SUPPORTED_RAT_TYPES_IE,
- len := ?,
- val := {
- supported_rat_types := ratt
- }
-}
-template (value) GSUP_IE ts_GSUP_IE_SUPPORTED_RAT_TYPES(GSUP_RatTypes ratt) := {
- tag := OSMO_GSUP_SUPPORTED_RAT_TYPES_IE,
- len := 0, /* overwritten */
- val := {
- supported_rat_types := ratt
- }
-}
-
-template (present) GSUP_IE tr_GSUP_IE_CURRENT_RAT_TYPE(template (present) GSUP_RatType ratt) := {
- tag := OSMO_GSUP_CURRENT_RAT_TYPE_IE,
- len := ?,
- val := {
- current_rat_type := ratt
- }
-}
-template (value) GSUP_IE ts_GSUP_IE_CURRENT_RAT_TYPE(GSUP_RatType ratt) := {
- tag := OSMO_GSUP_CURRENT_RAT_TYPE_IE,
- len := 0, /* overwritten */
- val := {
- current_rat_type := ratt
- }
-}
-
-private function f_gen_ts_ies(hexstring imsi,
- template (omit) GSUP_Message_Class message_class := omit,
- template (omit) hexstring imei := omit,
- template (omit) GSUP_CnDomain dom := omit,
- template (omit) octetstring source_name := omit,
- template (omit) octetstring destination_name := omit
- ) return GSUP_IEs {
- var GSUP_IEs ies := {
- valueof(ts_GSUP_IE_IMSI(imsi))
- };
-
- if (isvalue(dom)) {
- ies := ies & { valueof(ts_GSUP_IE_CnDomain(dom)) };
- }
-
- if (isvalue(imei)) {
- ies := ies & { valueof(ts_GSUP_IE_IMEI(valueof(imei))) };
- }
-
- if (isvalue(message_class)) {
- ies := ies & { valueof(ts_GSUP_IE_Message_Class(valueof(message_class))) };
- }
-
- if (isvalue(source_name)) {
- ies := ies & { valueof(ts_GSUP_IE_Source_Name(valueof(source_name))) };
- }
-
- if (isvalue(destination_name)) {
- ies := ies & { valueof(ts_GSUP_IE_Destination_Name(valueof(destination_name))) };
- }
-
- return ies;
-}
-
-private function f_gen_tr_ies(template hexstring imsi,
- template GSUP_Message_Class message_class := omit,
- template integer cause := omit,
- template hexstring msisdn := omit,
- template GSUP_IMEIResult imei_result := omit,
- template octetstring source_name := omit,
- template octetstring destination_name := omit
- ) return template GSUP_IEs {
- var template GSUP_IEs ies := {
- tr_GSUP_IE_IMSI(imsi)
- };
- var integer idx := 1;
-
- if (isvalue(cause)) {
- ies[idx] := tr_GSUP_IE_Cause(cause);
- idx := idx + 1;
- }
-
- if (isvalue(msisdn)) {
- ies[idx] := tr_GSUP_IE_MSISDN(msisdn);
- idx := idx + 1;
- }
-
- if (isvalue(imei_result)) {
- ies[idx] := tr_GSUP_IE_IMEI_Result(imei_result);
- idx := idx + 1;
- }
-
- if (isvalue(message_class)) {
- ies[idx] := tr_GSUP_IE_Message_Class(message_class);
- idx := idx + 1;
- }
-
- if (isvalue(source_name)) {
- ies[idx] := tr_GSUP_IE_Source_Name(source_name);
- idx := idx + 1;
- }
-
- ies[idx] := *;
- idx := idx + 1;
-
- if (isvalue(destination_name)) {
- ies[idx] := tr_GSUP_IE_Destination_Name(destination_name);
- idx := idx + 1;
- }
-
- return ies;
-}
-
-private function f_gen_ts_ss_ies(
- hexstring imsi,
- OCT4 sid,
- GSUP_SessionState state,
- template (omit) octetstring ss := omit,
- template (omit) integer cause := omit,
- template octetstring source_name := omit
-) return GSUP_IEs {
- /* Mandatory IEs */
- var GSUP_IEs ies := {
- valueof(ts_GSUP_IE_IMSI(imsi))
- };
-
- /* Cause IE is needed for PROC_SS_ERR */
- if (isvalue(cause)) {
- ies := ies & { valueof(ts_GSUP_IE_Cause(valueof(cause))) };
- }
-
- /* Mandatory session IEs */
- ies := ies & { valueof(ts_GSUP_IE_SessionId(sid)) };
- ies := ies & { valueof(ts_GSUP_IE_SessionState(state)) };
-
- /* Optional SS payload */
- if (isvalue(ss)) {
- ies := ies & { valueof(ts_GSUP_IE_SSInfo(valueof(ss))) };
- }
-
- if (isvalue(source_name)) {
- ies := ies & { valueof(ts_GSUP_IE_Source_Name(valueof(source_name))) };
- }
-
- return ies;
-}
-private function f_gen_tr_ss_ies(
- template hexstring imsi,
- template OCT4 sid := ?,
- template GSUP_SessionState state := ?,
- template octetstring ss := omit,
- template integer cause := omit,
- template octetstring destination_name := omit
-) return template GSUP_IEs {
- /* Mandatory IEs */
- var template GSUP_IEs ies := {
- tr_GSUP_IE_IMSI(imsi)
- };
- var integer idx := 1;
-
- /* Cause IE is needed for PROC_SS_ERR */
- if (istemplatekind(cause, "*")) {
- ies[idx] := *;
- idx := idx + 1;
- } else if (not istemplatekind(cause, "omit")) {
- ies[idx] := tr_GSUP_IE_Cause(cause);
- idx := idx + 1;
- }
-
- /* Mandatory session IEs */
- ies[idx] := tr_GSUP_IE_SessionId(sid);
- ies[idx + 1] := tr_GSUP_IE_SessionState(state);
- idx := idx + 2;
-
- /* Optional SS payload */
- if (istemplatekind(ss, "*")) {
- ies[idx] := *;
- idx := idx + 1;
- } else if (not istemplatekind(ss, "omit")) {
- ies[idx] := tr_GSUP_IE_SSInfo(ss);
- idx := idx + 1;
- }
-
- if (isvalue(destination_name)) {
- ies[idx] := tr_GSUP_IE_Destination_Name(destination_name);
- idx := idx + 1;
- }
-
- /* the GSUP Message Class IE is optional, as old implementations don't have it yet */
- var template GSUP_IEs ies2 := ies;
- ies2[idx] := tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_USSD);
- idx := idx + 1;
-
- return (ies, ies2);
-}
-
-template (value) GSUP_PDU ts_GSUP_PROC_SS_REQ(
- hexstring imsi,
- OCT4 sid,
- GSUP_SessionState state,
- template (omit) octetstring ss := omit,
- template (omit) octetstring source_name := omit
-) := ts_GSUP(
- OSMO_GSUP_MSGT_PROC_SS_REQUEST,
- f_gen_ts_ss_ies(imsi, sid, state, ss, source_name := source_name)
-);
-template GSUP_PDU tr_GSUP_PROC_SS_REQ(
- template hexstring imsi,
- template OCT4 sid := ?,
- template GSUP_SessionState state := ?,
- template octetstring ss := *
-) := tr_GSUP(
- OSMO_GSUP_MSGT_PROC_SS_REQUEST,
- f_gen_tr_ss_ies(imsi, sid, state, ss)
-);
-
-template (value) GSUP_PDU ts_GSUP_PROC_SS_RES(
- hexstring imsi,
- OCT4 sid,
- GSUP_SessionState state,
- template (omit) octetstring ss := omit
-) := ts_GSUP(
- OSMO_GSUP_MSGT_PROC_SS_RESULT,
- f_gen_ts_ss_ies(imsi, sid, state, ss)
-);
-template GSUP_PDU tr_GSUP_PROC_SS_RES(
- template hexstring imsi,
- template OCT4 sid := ?,
- template GSUP_SessionState state := ?,
- template octetstring ss := *,
- template octetstring destination_name := omit
-) := tr_GSUP(
- OSMO_GSUP_MSGT_PROC_SS_RESULT,
- f_gen_tr_ss_ies(imsi, sid, state, ss, destination_name := destination_name)
-);
-
-template (value) GSUP_PDU ts_GSUP_PROC_SS_ERR(
- hexstring imsi,
- OCT4 sid,
- GSUP_SessionState state,
- integer cause
-) := ts_GSUP(
- OSMO_GSUP_MSGT_PROC_SS_ERROR,
- f_gen_ts_ss_ies(imsi, sid, state, cause := cause)
-);
-template GSUP_PDU tr_GSUP_PROC_SS_ERR(
- template hexstring imsi,
- template OCT4 sid := ?,
- template GSUP_SessionState state := ?,
- template integer cause := ?
-) := tr_GSUP(
- OSMO_GSUP_MSGT_PROC_SS_ERROR,
- f_gen_tr_ss_ies(imsi, sid, state, cause := cause)
-);
-
-template (value) GSUP_PDU ts_GSUP_MO_FORWARD_SM_REQ(
- hexstring imsi,
- OCT1 sm_rp_mr, /* Message Reference, see GSM TS 04.11, 8.2.3 */
- GSUP_SM_RP_DA sm_rp_da, /* Destination Address, see 7.6.8.1 */
- GSUP_SM_RP_OA sm_rp_oa, /* Originating Address, see 7.6.8.2 */
- octetstring sm_rp_ui /* SM TPDU, see 7.6.8.4 */
-) := ts_GSUP(
- OSMO_GSUP_MSGT_MO_FORWARD_SM_REQUEST,
- {
- valueof(ts_GSUP_IE_IMSI(imsi)),
- valueof(ts_GSUP_IE_SM_RP_MR(sm_rp_mr)),
- valueof(ts_GSUP_IE_SM_RP_DA(sm_rp_da)),
- valueof(ts_GSUP_IE_SM_RP_OA(sm_rp_oa)),
- valueof(ts_GSUP_IE_SM_RP_UI(sm_rp_ui)),
- valueof(ts_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS))
- }
-);
-template GSUP_PDU tr_GSUP_MO_FORWARD_SM_REQ(
- template hexstring imsi := ?,
- template OCT1 sm_rp_mr := ?, /* Message Reference, see GSM TS 04.11, 8.2.3 */
- template GSUP_SM_RP_DA sm_rp_da, /* Destination Address, see 7.6.8.1 */
- template GSUP_SM_RP_OA sm_rp_oa, /* Originating Address, see 7.6.8.2 */
- template octetstring sm_rp_ui /* SM TPDU, see 7.6.8.4 */
-) := tr_GSUP(
- OSMO_GSUP_MSGT_MO_FORWARD_SM_REQUEST,
- {
- tr_GSUP_IE_IMSI(imsi),
- tr_GSUP_IE_SM_RP_MR(sm_rp_mr),
- tr_GSUP_IE_SM_RP_DA(sm_rp_da),
- tr_GSUP_IE_SM_RP_OA(sm_rp_oa),
- tr_GSUP_IE_SM_RP_UI(sm_rp_ui),
- tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS),
- tr_GSUP_IE_Source_Name(?)
- }
-);
-
-template (value) GSUP_PDU ts_GSUP_MO_FORWARD_SM_RES(
- hexstring imsi,
- OCT1 sm_rp_mr /* Message Reference, see GSM TS 04.11, 8.2.3 */
-) := ts_GSUP(
- OSMO_GSUP_MSGT_MO_FORWARD_SM_RESULT,
- {
- valueof(ts_GSUP_IE_IMSI(imsi)),
- valueof(ts_GSUP_IE_SM_RP_MR(sm_rp_mr)),
- valueof(ts_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS))
- }
-);
-template GSUP_PDU tr_GSUP_MO_FORWARD_SM_RES(
- template hexstring imsi := ?,
- template OCT1 sm_rp_mr := ? /* Message Reference, see GSM TS 04.11, 8.2.3 */
-) := tr_GSUP(
- OSMO_GSUP_MSGT_MO_FORWARD_SM_RESULT,
- {
- tr_GSUP_IE_IMSI(imsi),
- tr_GSUP_IE_SM_RP_MR(sm_rp_mr),
- tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS),
- tr_GSUP_IE_Source_Name(?)
- }
-);
-
-template (value) GSUP_PDU ts_GSUP_MO_FORWARD_SM_ERR(
- hexstring imsi,
- OCT1 sm_rp_mr, /* Message Reference, see GSM TS 04.11, 8.2.3 */
- OCT1 sm_rp_cause /* RP-Cause value, see GSM TS 04.11, 8.2.5.4 */
-) := ts_GSUP(
- OSMO_GSUP_MSGT_MO_FORWARD_SM_ERROR,
- {
- valueof(ts_GSUP_IE_IMSI(imsi)),
- valueof(ts_GSUP_IE_SM_RP_MR(sm_rp_mr)),
- valueof(ts_GSUP_IE_SM_RP_CAUSE(sm_rp_cause)),
- valueof(ts_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS))
- }
-);
-template GSUP_PDU tr_GSUP_MO_FORWARD_SM_ERR(
- template hexstring imsi := ?,
- template OCT1 sm_rp_mr := ?, /* Message Reference, see GSM TS 04.11, 8.2.3 */
- template OCT1 sm_rp_cause := ? /* RP-Cause value, see GSM TS 04.11, 8.2.5.4 */
-) := tr_GSUP(
- OSMO_GSUP_MSGT_MO_FORWARD_SM_ERROR,
- {
- tr_GSUP_IE_IMSI(imsi),
- tr_GSUP_IE_SM_RP_MR(sm_rp_mr),
- tr_GSUP_IE_SM_RP_CAUSE(sm_rp_cause),
- tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS),
- tr_GSUP_IE_Source_Name(?)
- }
-);
-
-template (value) GSUP_PDU ts_GSUP_MT_FORWARD_SM_REQ(
- hexstring imsi,
- OCT1 sm_rp_mr, /* Message Reference, see GSM TS 04.11, 8.2.3 */
- GSUP_SM_RP_DA sm_rp_da, /* Destination Address, see 7.6.8.1 */
- GSUP_SM_RP_OA sm_rp_oa, /* Originating Address, see 7.6.8.2 */
- octetstring sm_rp_ui, /* SM TPDU, see 7.6.8.4 */
- OCT1 sm_rp_mms /* MMS (More Messages to Send), see 7.6.8.7 */
-) := ts_GSUP(
- OSMO_GSUP_MSGT_MT_FORWARD_SM_REQUEST,
- {
- /**
- * TODO: add MT-specific fields (and IEs):
- * - smDeliveryTimer
- * - smDeliveryStartTime
- */
- valueof(ts_GSUP_IE_IMSI(imsi)),
- valueof(ts_GSUP_IE_SM_RP_MR(sm_rp_mr)),
- valueof(ts_GSUP_IE_SM_RP_DA(sm_rp_da)),
- valueof(ts_GSUP_IE_SM_RP_OA(sm_rp_oa)),
- valueof(ts_GSUP_IE_SM_RP_UI(sm_rp_ui)),
- valueof(ts_GSUP_IE_SM_RP_MMS(sm_rp_mms)),
- valueof(ts_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS))
- }
-);
-template GSUP_PDU tr_GSUP_MT_FORWARD_SM_REQ(
- template hexstring imsi := ?,
- template OCT1 sm_rp_mr := ?, /* Message Reference, see GSM TS 04.11, 8.2.3 */
- template GSUP_SM_RP_DA sm_rp_da, /* Destination Address, see 7.6.8.1 */
- template GSUP_SM_RP_OA sm_rp_oa, /* Originating Address, see 7.6.8.2 */
- template octetstring sm_rp_ui, /* SM TPDU, see 7.6.8.4 */
- template OCT1 sm_rp_mms /* MMS (More Messages to Send), see 7.6.8.7 */
-) := tr_GSUP(
- OSMO_GSUP_MSGT_MT_FORWARD_SM_REQUEST,
- {
- /**
- * TODO: add MT-specific fields (and IEs):
- * - smDeliveryTimer
- * - smDeliveryStartTime
- */
- tr_GSUP_IE_IMSI(imsi),
- tr_GSUP_IE_SM_RP_MR(sm_rp_mr),
- tr_GSUP_IE_SM_RP_DA(sm_rp_da),
- tr_GSUP_IE_SM_RP_OA(sm_rp_oa),
- tr_GSUP_IE_SM_RP_UI(sm_rp_ui),
- tr_GSUP_IE_SM_RP_MMS(sm_rp_mms),
- tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS),
- tr_GSUP_IE_Source_Name(?)
- }
-);
-
-template (value) GSUP_PDU ts_GSUP_MT_FORWARD_SM_RES(
- hexstring imsi,
- OCT1 sm_rp_mr /* Message Reference, see GSM TS 04.11, 8.2.3 */
-) := ts_GSUP(
- OSMO_GSUP_MSGT_MT_FORWARD_SM_RESULT,
- {
- valueof(ts_GSUP_IE_IMSI(imsi)),
- valueof(ts_GSUP_IE_SM_RP_MR(sm_rp_mr)),
- valueof(ts_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS))
- }
-);
-template GSUP_PDU tr_GSUP_MT_FORWARD_SM_RES(
- template hexstring imsi := ?,
- template OCT1 sm_rp_mr := ? /* Message Reference, see GSM TS 04.11, 8.2.3 */
-) := tr_GSUP(
- OSMO_GSUP_MSGT_MT_FORWARD_SM_RESULT,
- {
- tr_GSUP_IE_IMSI(imsi),
- tr_GSUP_IE_SM_RP_MR(sm_rp_mr),
- tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS),
- tr_GSUP_IE_Source_Name(?)
- }
-);
-
-template (value) GSUP_PDU ts_GSUP_MT_FORWARD_SM_ERR(
- hexstring imsi,
- OCT1 sm_rp_mr, /* Message Reference, see GSM TS 04.11, 8.2.3 */
- OCT1 sm_rp_cause /* RP-Cause value, see GSM TS 04.11, 8.2.5.4 */
-) := ts_GSUP(
- OSMO_GSUP_MSGT_MT_FORWARD_SM_ERROR,
- {
- valueof(ts_GSUP_IE_IMSI(imsi)),
- valueof(ts_GSUP_IE_SM_RP_MR(sm_rp_mr)),
- valueof(ts_GSUP_IE_SM_RP_CAUSE(sm_rp_cause)),
- valueof(ts_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS))
- }
-);
-template GSUP_PDU tr_GSUP_MT_FORWARD_SM_ERR(
- template hexstring imsi := ?,
- template OCT1 sm_rp_mr := ?, /* Message Reference, see GSM TS 04.11, 8.2.3 */
- template OCT1 sm_rp_cause := ? /* RP-Cause value, see GSM TS 04.11, 8.2.5.4 */
-) := tr_GSUP(
- OSMO_GSUP_MSGT_MT_FORWARD_SM_ERROR,
- {
- tr_GSUP_IE_IMSI(imsi),
- tr_GSUP_IE_SM_RP_MR(sm_rp_mr),
- tr_GSUP_IE_SM_RP_CAUSE(sm_rp_cause),
- tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS),
- tr_GSUP_IE_Source_Name(?)
- }
-);
-
-template (value) GSUP_PDU ts_GSUP_MO_READY_FOR_SM_REQ(
- hexstring imsi,
- OCT1 sm_rp_mr, /* Message Reference, see GSM TS 04.11, 8.2.3 */
- GSUP_SM_ALERT_RSN_Type sm_alert_rsn /* SM Alert Reason, see 7.6.8.8 */
-) := ts_GSUP(
- OSMO_GSUP_MSGT_READY_FOR_SM_REQUEST,
- {
- valueof(ts_GSUP_IE_IMSI(imsi)),
- valueof(ts_GSUP_IE_SM_RP_MR(sm_rp_mr)),
- valueof(ts_GSUP_IE_SM_ALERT_RSN(sm_alert_rsn)),
- valueof(ts_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS))
- }
-);
-template GSUP_PDU tr_GSUP_MO_READY_FOR_SM_REQ(
- template hexstring imsi := ?,
- template OCT1 sm_rp_mr := ?, /* Message Reference, see GSM TS 04.11, 8.2.3 */
- template GSUP_SM_ALERT_RSN_Type sm_alert_rsn := ? /* SM Alert Reason, see 7.6.8.8 */
-) := tr_GSUP(
- OSMO_GSUP_MSGT_READY_FOR_SM_REQUEST,
- {
- tr_GSUP_IE_IMSI(imsi),
- tr_GSUP_IE_SM_RP_MR(sm_rp_mr),
- tr_GSUP_IE_SM_ALERT_RSN(sm_alert_rsn),
- tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS),
- tr_GSUP_IE_Source_Name(?)
- }
-);
-
-template (value) GSUP_PDU ts_GSUP_MO_READY_FOR_SM_RES(
- hexstring imsi,
- OCT1 sm_rp_mr /* Message Reference, see GSM TS 04.11, 8.2.3 */
-) := ts_GSUP(
- OSMO_GSUP_MSGT_READY_FOR_SM_RESULT,
- {
- valueof(ts_GSUP_IE_IMSI(imsi)),
- valueof(ts_GSUP_IE_SM_RP_MR(sm_rp_mr)),
- valueof(ts_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS))
- }
-);
-template GSUP_PDU tr_GSUP_MO_READY_FOR_SM_RES(
- template hexstring imsi := ?,
- template OCT1 sm_rp_mr := ? /* Message Reference, see GSM TS 04.11, 8.2.3 */
-) := tr_GSUP(
- OSMO_GSUP_MSGT_READY_FOR_SM_RESULT,
- {
- tr_GSUP_IE_IMSI(imsi),
- tr_GSUP_IE_SM_RP_MR(sm_rp_mr),
- tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS),
- tr_GSUP_IE_Source_Name(?)
- }
-);
-
-template (value) GSUP_PDU ts_GSUP_MO_READY_FOR_SM_ERR(
- hexstring imsi,
- OCT1 sm_rp_mr, /* Message Reference, see GSM TS 04.11, 8.2.3 */
- OCT1 sm_rp_cause /* RP-Cause value, see GSM TS 04.11, 8.2.5.4 */
-) := ts_GSUP(
- OSMO_GSUP_MSGT_READY_FOR_SM_ERROR,
- {
- valueof(ts_GSUP_IE_IMSI(imsi)),
- valueof(ts_GSUP_IE_SM_RP_MR(sm_rp_mr)),
- valueof(ts_GSUP_IE_SM_RP_CAUSE(sm_rp_cause)),
- valueof(ts_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS))
- }
-);
-template GSUP_PDU tr_GSUP_MO_READY_FOR_SM_ERR(
- template hexstring imsi := ?,
- template OCT1 sm_rp_mr := ?, /* Message Reference, see GSM TS 04.11, 8.2.3 */
- template OCT1 sm_rp_cause := ? /* RP-Cause value, see GSM TS 04.11, 8.2.5.4 */
-) := tr_GSUP(
- OSMO_GSUP_MSGT_READY_FOR_SM_ERROR,
- {
- tr_GSUP_IE_IMSI(imsi),
- tr_GSUP_IE_SM_RP_MR(sm_rp_mr),
- tr_GSUP_IE_SM_RP_CAUSE(sm_rp_cause),
- tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS),
- tr_GSUP_IE_Source_Name(?)
- }
-);
-
-function f_gsup_find_nested_ie_multiple(GSUP_IEs ies, GSUP_IEI iei, integer nth, out GSUP_IeValue ret) return boolean {
- var integer current := 0;
- for (var integer i := 0; i < sizeof(ies); i := i+1) {
- if (ies[i].tag == iei) {
- if (current == nth) {
- ret := ies[i].val;
- return true;
- } else {
- current := current + 1;
- }
- }
- }
- return false;
-}
-
-function f_gsup_find_nested_ie(GSUP_IEs ies, GSUP_IEI iei, out GSUP_IeValue ret) return boolean {
- for (var integer i := 0; i < sizeof(ies); i := i+1) {
- if (ies[i].tag == iei) {
- ret := ies[i].val;
- return true;
- }
- }
- return false;
-}
-
-function f_gsup_find_ie(GSUP_PDU msg, GSUP_IEI iei, out GSUP_IeValue ret) return boolean {
- return f_gsup_find_nested_ie(msg.ies, iei, ret);
-}
-
-template GSUP_AN_APDU t_GSUP_AN_APDU(
- template GSUP_AN_PROTO an_proto := ?,
- template octetstring pdu := ?
-) := {
- proto := an_proto,
- pdu := pdu
-};
-
-template GSUP_PDU tr_GSUP_E_AN_APDU(
- template GSUP_MessageType msgt,
- template hexstring imsi := ?,
- template octetstring source_name := ?,
- template octetstring destination_name := ?,
- template GSUP_AN_APDU an_apdu := ?
-) := tr_GSUP(
- msgt,
- {
- tr_GSUP_IE_IMSI(imsi),
- tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_INTER_MSC),
- tr_GSUP_IE_Source_Name(source_name),
- tr_GSUP_IE_Destination_Name(destination_name),
- tr_GSUP_IE_AN_APDU(an_apdu)
- }
-);
-
-template GSUP_PDU tr_GSUP_E_NO_PDU(
- template GSUP_MessageType msgt,
- template hexstring imsi := ?,
- template octetstring source_name := ?,
- template octetstring destination_name := ?
-) := tr_GSUP(
- msgt,
- {
- tr_GSUP_IE_IMSI(imsi),
- tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_INTER_MSC),
- tr_GSUP_IE_Source_Name(source_name),
- tr_GSUP_IE_Destination_Name(destination_name)
- }
-);
-
-template (value) GSUP_PDU ts_GSUP_E_AN_APDU(
- GSUP_MessageType msgt,
- hexstring imsi,
- octetstring source_name,
- octetstring destination_name,
- GSUP_AN_APDU an_apdu
-) := ts_GSUP(
- msgt,
- {
- valueof(ts_GSUP_IE_IMSI(imsi)),
- valueof(ts_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_INTER_MSC)),
- valueof(ts_GSUP_IE_Source_Name(source_name)),
- valueof(ts_GSUP_IE_Destination_Name(destination_name)),
- valueof(ts_GSUP_IE_AN_APDU(an_apdu))
- }
-);
-
-template (value) GSUP_PDU ts_GSUP_E_PrepareHandoverResult(
- hexstring imsi,
- hexstring msisdn,
- octetstring source_name,
- octetstring destination_name,
- GSUP_AN_APDU an_apdu
-) := ts_GSUP(
- OSMO_GSUP_MSGT_E_PREPARE_HANDOVER_RESULT,
- {
- valueof(ts_GSUP_IE_IMSI(imsi)),
- valueof(ts_GSUP_IE_MSISDN(msisdn)),
- valueof(ts_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_INTER_MSC)),
- valueof(ts_GSUP_IE_Source_Name(source_name)),
- valueof(ts_GSUP_IE_Destination_Name(destination_name)),
- valueof(ts_GSUP_IE_AN_APDU(an_apdu))
- }
-);
+/* Possible identity types for SM-RP-{OA|DA} IEs */
+type enumerated GSUP_SM_RP_ODA_IdType {
+ OSMO_GSUP_SM_RP_ODA_ID_NONE ('00'O),
+ OSMO_GSUP_SM_RP_ODA_ID_IMSI ('01'O),
+ OSMO_GSUP_SM_RP_ODA_ID_MSISDN ('02'O),
+ OSMO_GSUP_SM_RP_ODA_ID_SMSC_ADDR ('03'O),
+ /* Special value for noSM-RP-DA and noSM-RP-OA */
+ OSMO_GSUP_SM_RP_ODA_ID_NULL ('FF'O)
+} with { variant "FIELDLENGTH(8)" };
} with { encode "RAW"; variant "FIELDORDER(msb)" }
diff --git a/library/IPA_Emulation.ttcnpp b/library/IPA_Emulation.ttcnpp
index 7a8e8d6..07fefe5 100644
--- a/library/IPA_Emulation.ttcnpp
+++ b/library/IPA_Emulation.ttcnpp
@@ -44,6 +44,7 @@
#ifdef IPA_EMULATION_GSUP
import from GSUP_Types all;
+import from GSUP_Templates all;
#endif
#ifdef IPA_EMULATION_RSPRO
diff --git a/msc/BSC_ConnectionHandler.ttcn b/msc/BSC_ConnectionHandler.ttcn
index e25d496..92ec3b1 100644
--- a/msc/BSC_ConnectionHandler.ttcn
+++ b/msc/BSC_ConnectionHandler.ttcn
@@ -31,6 +31,7 @@
import from RANAP_Templates all;
import from GSUP_Types all;
+import from GSUP_Templates all;
import from GSUP_Emulation all;
import from MNCC_Types all;
diff --git a/msc/MSC_Tests.ttcn b/msc/MSC_Tests.ttcn
index 1f8d8d4..7f993c4 100644
--- a/msc/MSC_Tests.ttcn
+++ b/msc/MSC_Tests.ttcn
@@ -47,8 +47,9 @@
import from MGCP_Templates all;
import from SDP_Types all;
-import from GSUP_Emulation all;
import from GSUP_Types all;
+import from GSUP_Templates all;
+import from GSUP_Emulation all;
import from IPA_Emulation all;
import from BSSAP_Types all;
diff --git a/msc/gen_links.sh b/msc/gen_links.sh
index b112a67..8577208 100755
--- a/msc/gen_links.sh
+++ b/msc/gen_links.sh
@@ -93,7 +93,8 @@
DIR=../library
FILES="Misc_Helpers.ttcn General_Types.ttcn GSM_Types.ttcn Osmocom_Types.ttcn MNCC_Types.ttcn MNCC_EncDec.cc MNCC_CodecPort.ttcn mncc.h MNCC_Emulation.ttcn Osmocom_VTY_Functions.ttcn Native_Functions.ttcn Native_FunctionDefs.cc "
-FILES+="IPA_Types.ttcn IPA_Emulation.ttcnpp IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc GSUP_Types.ttcn GSUP_Emulation.ttcn "
+FILES+="IPA_Types.ttcn IPA_Emulation.ttcnpp IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc "
+FILES+="GSUP_Types.ttcn GSUP_Templates.ttcn GSUP_Emulation.ttcn "
FILES+="Osmocom_CTRL_Types.ttcn Osmocom_CTRL_Functions.ttcn Osmocom_CTRL_Adapter.ttcn L3_Templates.ttcn RLCMAC_CSN1_Templates.ttcn RLCMAC_CSN1_Types.ttcn L3_Common.ttcn "
FILES+="RAN_Emulation.ttcnpp BSSAP_CodecPort.ttcn BSSMAP_Templates.ttcn RAN_Adapter.ttcnpp MGCP_Types.ttcn MGCP_Templates.ttcn MGCP_CodecPort_CtrlFunct.ttcn MGCP_Emulation.ttcn "
FILES+="RTP_CodecPort.ttcn RTP_CodecPort_CtrlFunctDef.cc "
diff --git a/sgsn/SGSN_Tests.ttcn b/sgsn/SGSN_Tests.ttcn
index 4af44ee..13c0be1 100644
--- a/sgsn/SGSN_Tests.ttcn
+++ b/sgsn/SGSN_Tests.ttcn
@@ -31,8 +31,9 @@
import from L3_Templates all;
import from L3_Common all;
-import from GSUP_Emulation all;
import from GSUP_Types all;
+import from GSUP_Templates all;
+import from GSUP_Emulation all;
import from IPA_Emulation all;
import from RAN_Adapter all;
diff --git a/sgsn/gen_links.sh b/sgsn/gen_links.sh
index c78227f..afe6b02 100755
--- a/sgsn/gen_links.sh
+++ b/sgsn/gen_links.sh
@@ -91,7 +91,8 @@
FILES+="LLC_Templates.ttcn L3_Templates.ttcn L3_Common.ttcn "
FILES+="RAN_Emulation.ttcnpp RAN_Adapter.ttcnpp SCCP_Templates.ttcn "
# IPA_Emulation + dependencies
-FILES+="IPA_Types.ttcn IPA_Emulation.ttcnpp IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc Native_Functions.ttcn Native_FunctionDefs.cc GSUP_Types.ttcn GSUP_Emulation.ttcn "
+FILES+="IPA_Types.ttcn IPA_Emulation.ttcnpp IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc Native_Functions.ttcn Native_FunctionDefs.cc "
+FILES+="GSUP_Types.ttcn GSUP_Templates.ttcn GSUP_Emulation.ttcn "
FILES+="GTP_CodecPort.ttcn GTP_CodecPort_CtrlFunct.ttcn GTP_CodecPort_CtrlFunctDef.cc GTP_Emulation.ttcn GTP_Templates.ttcn IPCP_Types.ttcn RAW_NS.ttcnpp "
gen_links $DIR $FILES
--
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/35617?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: I54cc8c99d1e91d57c3d5a92f6529ef2055e9d4ed
Gerrit-Change-Number: 35617
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-MessageType: newchange
1
0
[M] Change in osmo-ttcn3-hacks[master]: GSUP_Types: Add missing message_class to EPDGTunnel* messages
by pespin 18 Jan '24
by pespin 18 Jan '24
18 Jan '24
Attention is currently required from: laforge, lynxis lazus, pespin.
Hello Jenkins Builder, fixeria, laforge, lynxis lazus,
I'd like you to reexamine a change. Please visit
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/35604?usp=email
to look at the new patch set (#4).
The following approvals got outdated and were removed:
Verified+1 by Jenkins Builder
Change subject: GSUP_Types: Add missing message_class to EPDGTunnel* messages
......................................................................
GSUP_Types: Add missing message_class to EPDGTunnel* messages
Related: OS#6091
Change-Id: Ib7d6156402645867cadc8d3e0ffdd07247a1abd2
---
M library/GSUP_Types.ttcn
1 file changed, 69 insertions(+), 20 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/04/35604/4
--
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/35604?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: Ib7d6156402645867cadc8d3e0ffdd07247a1abd2
Gerrit-Change-Number: 35604
Gerrit-PatchSet: 4
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: lynxis lazus <lynxis(a)fe80.eu>
Gerrit-Attention: laforge <laforge(a)osmocom.org>
Gerrit-Attention: pespin <pespin(a)sysmocom.de>
Gerrit-Attention: lynxis lazus <lynxis(a)fe80.eu>
Gerrit-MessageType: newpatchset
1
0
[M] Change in libosmocore[master]: tests/gsm0408: add two more samples to bcap_tests[]
by pespin 18 Jan '24
by pespin 18 Jan '24
18 Jan '24
Attention is currently required from: fixeria.
pespin has posted comments on this change. ( https://gerrit.osmocom.org/c/libosmocore/+/35615?usp=email )
Change subject: tests/gsm0408: add two more samples to bcap_tests[]
......................................................................
Patch Set 2: Code-Review+1
(1 comment)
Patchset:
PS2:
You should probably document that mismatch as a comment in the code, so people looking at the mismatch in the output knows out of the box why that happens.
--
To view, visit https://gerrit.osmocom.org/c/libosmocore/+/35615?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: I4fc519c02b4fad8b0f40fa649d9de14b1183d10d
Gerrit-Change-Number: 35615
Gerrit-PatchSet: 2
Gerrit-Owner: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
Gerrit-Attention: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Comment-Date: Thu, 18 Jan 2024 19:10:53 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: Yes
Gerrit-MessageType: comment
1
0
[M] Change in libosmocore[master]: tests/gsm0408: cosmetic: adjust coding style (make linter happy)
by pespin 18 Jan '24
by pespin 18 Jan '24
18 Jan '24
Attention is currently required from: fixeria.
pespin has posted comments on this change. ( https://gerrit.osmocom.org/c/libosmocore/+/35616?usp=email )
Change subject: tests/gsm0408: cosmetic: adjust coding style (make linter happy)
......................................................................
Patch Set 1: Code-Review+2
--
To view, visit https://gerrit.osmocom.org/c/libosmocore/+/35616?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: I203033e2b3c27cb8b258faf1ff3c5ec4c0083458
Gerrit-Change-Number: 35616
Gerrit-PatchSet: 1
Gerrit-Owner: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
Gerrit-Attention: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Comment-Date: Thu, 18 Jan 2024 19:09:40 +0000
Gerrit-HasComments: No
Gerrit-Has-Labels: Yes
Gerrit-MessageType: comment
1
0
[M] Change in osmo-ttcn3-hacks[master]: GSUP_Types: Add missing message_class to EPDGTunnel* messages
by fixeria 18 Jan '24
by fixeria 18 Jan '24
18 Jan '24
Attention is currently required from: laforge, lynxis lazus, pespin.
fixeria has posted comments on this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/35604?usp=email )
Change subject: GSUP_Types: Add missing message_class to EPDGTunnel* messages
......................................................................
Patch Set 3:
(1 comment)
File library/GSUP_Types.ttcn:
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/35604/comment/edead2b5_cc32…
PS3, Line 734: ts_GSUP_IE_Message_Class
Still the same problem here: it should be after the `Cause IE`.
--
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/35604?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: Ib7d6156402645867cadc8d3e0ffdd07247a1abd2
Gerrit-Change-Number: 35604
Gerrit-PatchSet: 3
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: lynxis lazus <lynxis(a)fe80.eu>
Gerrit-Attention: laforge <laforge(a)osmocom.org>
Gerrit-Attention: pespin <pespin(a)sysmocom.de>
Gerrit-Attention: lynxis lazus <lynxis(a)fe80.eu>
Gerrit-Comment-Date: Thu, 18 Jan 2024 19:03:04 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Gerrit-MessageType: comment
1
0
[M] Change in osmo-ttcn3-hacks[master]: GSUP_Types: Add missing message_class to EPDGTunnel* messages
by pespin 18 Jan '24
by pespin 18 Jan '24
18 Jan '24
Attention is currently required from: fixeria, laforge, lynxis lazus.
Hello Jenkins Builder, fixeria, laforge, lynxis lazus,
I'd like you to reexamine a change. Please visit
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/35604?usp=email
to look at the new patch set (#3).
The following approvals got outdated and were removed:
Verified+1 by Jenkins Builder
Change subject: GSUP_Types: Add missing message_class to EPDGTunnel* messages
......................................................................
GSUP_Types: Add missing message_class to EPDGTunnel* messages
Related: OS#6091
Change-Id: Ib7d6156402645867cadc8d3e0ffdd07247a1abd2
---
M library/GSUP_Types.ttcn
1 file changed, 69 insertions(+), 20 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/04/35604/3
--
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/35604?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: Ib7d6156402645867cadc8d3e0ffdd07247a1abd2
Gerrit-Change-Number: 35604
Gerrit-PatchSet: 3
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: lynxis lazus <lynxis(a)fe80.eu>
Gerrit-Attention: laforge <laforge(a)osmocom.org>
Gerrit-Attention: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Attention: lynxis lazus <lynxis(a)fe80.eu>
Gerrit-MessageType: newpatchset
1
0
[M] Change in osmo-ttcn3-hacks[master]: GSUP_Types: Add missing message_class to EPDGTunnel* messages
by pespin 18 Jan '24
by pespin 18 Jan '24
18 Jan '24
Attention is currently required from: fixeria, laforge, lynxis lazus.
pespin has posted comments on this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/35604?usp=email )
Change subject: GSUP_Types: Add missing message_class to EPDGTunnel* messages
......................................................................
Patch Set 2:
(2 comments)
File library/GSUP_Types.ttcn:
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/35604/comment/ed1bdcb2_17bf…
PS2, Line 1433: ts_GSUP_IE_Message_Class
> Likewise here and above.
Ack
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/35604/comment/eb613c74_2d91…
PS2, Line 1469: tr_GSUP_IE_Message_Class
> This IE go before the `Source Name IE`, otherwise the template won't match messages generated by lib […]
Ack
--
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/35604?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: Ib7d6156402645867cadc8d3e0ffdd07247a1abd2
Gerrit-Change-Number: 35604
Gerrit-PatchSet: 2
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: lynxis lazus <lynxis(a)fe80.eu>
Gerrit-Attention: laforge <laforge(a)osmocom.org>
Gerrit-Attention: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Attention: lynxis lazus <lynxis(a)fe80.eu>
Gerrit-Comment-Date: Thu, 18 Jan 2024 19:00:14 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-MessageType: comment
1
0