blob: 57c0a396c0d8b7b298e00c100e8c57187f697272 [file] [log] [blame]
Harald Weltedf327232017-12-28 22:51:51 +01001module GSUP_Types {
2
Harald Welte35bb7162018-01-03 21:07:52 +01003/* GSUP_Types, defining abstract TTCN-3 data types for the GSUP protocol.
4 *
5 * GSUP is a non-standard protocol used between OsmoMSC/OsmoSGSN and OsmoHLR
6 * in order to replace the complex TCAP/MAP protocol.
7 *
8 * (C) 2017 by Harald Welte <laforge@gnumonks.org>
9 * All rights reserved.
10 *
11 * Released under the terms of GNU General Public License, Version 2 or
12 * (at your option) any later version.
13 */
14
Harald Weltedf327232017-12-28 22:51:51 +010015import from General_Types all;
16import from Osmocom_Types all;
17
18type enumerated GSUP_IEI {
19 OSMO_GSUP_IMSI_IE ('01'O),
20 OSMO_GSUP_CAUSE_IE ('02'O),
21 OSMO_GSUP_AUTH_TUPLE_IE ('03'O),
22 OSMO_GSUP_PDP_INFO_COMPL_IE ('04'O),
23 OSMO_GSUP_PDP_INFO_IE ('05'O),
24 OSMO_GSUP_CANCEL_TYPE_IE ('06'O),
25 OSMO_GSUP_FREEZE_PTMSI_IE ('07'O),
26 OSMO_GSUP_MSISDN_IE ('08'O),
27 OSMO_GSUP_HLR_NUMBER_IE ('09'O),
28 OSMO_GSUP_PDP_CONTEXT_ID_IE ('10'O),
29 OSMO_GSUP_PDP_TYPE_IE ('11'O),
30 OSMO_GSUP_ACCESS_POINT_NAME_IE ('12'O),
31 OSMO_GSUP_PDP_QOS_IE ('13'O),
32 OSMO_GSUP_CHARG_CHAR_IE ('14'O),
33
34 OSMO_GSUP_RAND_IE ('20'O),
35 OSMO_GSUP_SRES_IE ('21'O),
36 OSMO_GSUP_KC_IE ('22'O),
37 OSMO_GSUP_IK_IE ('23'O),
38 OSMO_GSUP_CK_IE ('24'O),
39 OSMO_GSUP_AUTN_IE ('25'O),
40 OSMO_GSUP_AUTS_IE ('26'O),
41 OSMO_GSUP_RES_IE ('27'O),
42 OSMO_GSUP_CN_DOMAIN_IE ('28'O)
43} with { variant "FIELDLENGTH(8)" };
44
45type enumerated GSUP_MessageType {
46 OSMO_GSUP_MSGT_UPDATE_LOCATION_REQUEST ('00000100'B),
47 OSMO_GSUP_MSGT_UPDATE_LOCATION_ERROR ('00000101'B),
48 OSMO_GSUP_MSGT_UPDATE_LOCATION_RESULT ('00000110'B),
49
50 OSMO_GSUP_MSGT_SEND_AUTH_INFO_REQUEST ('00001000'B),
51 OSMO_GSUP_MSGT_SEND_AUTH_INFO_ERROR ('00001001'B),
52 OSMO_GSUP_MSGT_SEND_AUTH_INFO_RESULT ('00001010'B),
53
54 OSMO_GSUP_MSGT_AUTH_FAIL_REPORT ('00001011'B),
55
56 OSMO_GSUP_MSGT_PURGE_MS_REQUEST ('00001100'B),
57 OSMO_GSUP_MSGT_PURGE_MS_ERROR ('00001101'B),
58 OSMO_GSUP_MSGT_PURGE_MS_RESULT ('00001110'B),
59
60 OSMO_GSUP_MSGT_INSERT_DATA_REQUEST ('00010000'B),
61 OSMO_GSUP_MSGT_INSERT_DATA_ERROR ('00010001'B),
62 OSMO_GSUP_MSGT_INSERT_DATA_RESULT ('00010010'B),
63
64 OSMO_GSUP_MSGT_DELETE_DATA_REQUEST ('00010100'B),
65 OSMO_GSUP_MSGT_DELETE_DATA_ERROR ('00010101'B),
66 OSMO_GSUP_MSGT_DELETE_DATA_RESULT ('00010110'B),
67
68 OSMO_GSUP_MSGT_LOCATION_CANCEL_REQUEST ('00011100'B),
69 OSMO_GSUP_MSGT_LOCATION_CANCEL_ERROR ('00011101'B),
70 OSMO_GSUP_MSGT_LOCATION_CANCEL_RESULT ('00011110'B)
71} with { variant "FIELDLENGTH(8)" };
72
73type enumerated GSUP_CancelType {
74 OSMO_GSUP_CANCEL_TYPE_UPDATE (1),
75 OSMO_GSUP_CANCEL_TYPE_WITHDRAW (2)
76} with { variant "FIELDLENGTH(8)" };
77
78type enumerated GSUP_CnDomain {
79 OSMO_GSUP_CN_DOMAIN_PS (1),
80 OSMO_GSUP_CN_DOMAIN_CS (2)
81} with { variant "FIELDLENGTH(8)" };
82
Harald Welte3f95be82018-01-27 00:48:13 +010083type record GSUP_MSISDN {
84 uint8_t len,
85 hexstring digits optional
86} with { variant (len) "LENGTHTO(digits)" };
87
Harald Weltedf327232017-12-28 22:51:51 +010088type record GSUP_IE {
89 GSUP_IEI tag,
90 uint8_t len,
91 GSUP_IeValue val
92} with { variant (len) "LENGTHTO(val)"
93 variant (val) "CROSSTAG(imsi, tag = OSMO_GSUP_IMSI_IE;
94 cause, tag = OSMO_GSUP_CAUSE_IE;
95 cancel_type, tag = OSMO_GSUP_CANCEL_TYPE_IE;
Harald Welte77a8eba2018-01-22 21:22:32 +010096 auth_tuple, tag = OSMO_GSUP_AUTH_TUPLE_IE;
Harald Weltedf327232017-12-28 22:51:51 +010097 auts, tag = OSMO_GSUP_AUTS_IE;
98 rand, tag = OSMO_GSUP_RAND_IE;
Harald Welte77a8eba2018-01-22 21:22:32 +010099 sres, tag = OSMO_GSUP_SRES_IE;
100 kc, tag = OSMO_GSUP_KC_IE;
101 ik, tag = OSMO_GSUP_IK_IE;
102 ck, tag = OSMO_GSUP_CK_IE;
103 autn, tag = OSMO_GSUP_AUTN_IE;
104 res, tag = OSMO_GSUP_RES_IE;
Harald Weltedf327232017-12-28 22:51:51 +0100105 msisdn, tag = OSMO_GSUP_MSISDN_IE;
106 hlr_number, tag = OSMO_GSUP_HLR_NUMBER_IE;
107 cn_domain, tag = OSMO_GSUP_CN_DOMAIN_IE;
Harald Welteeded9ad2018-02-17 20:57:34 +0100108 pdp_info, tag = OSMO_GSUP_PDP_INFO_IE;
109 apn, tag = OSMO_GSUP_ACCESS_POINT_NAME_IE;
110 pdp_qos, tag = OSMO_GSUP_PDP_QOS_IE;
111 pdp_type, tag = OSMO_GSUP_PDP_TYPE_IE;
112 charg_char, tag = OSMO_GSUP_CHARG_CHAR_IE;
113 )"
Harald Weltedf327232017-12-28 22:51:51 +0100114};
115
116type record of GSUP_IE GSUP_IEs;
117
118type union GSUP_IeValue {
119 hexstring imsi,
120 integer cause,
121 GSUP_CancelType cancel_type,
122 //boolean pdp_info_compl,
123 //boolean freeze_ptmsi,
Harald Weltedf327232017-12-28 22:51:51 +0100124 GSUP_IEs auth_tuple,
125 octetstring auts,
126 octetstring rand,
Harald Welte77a8eba2018-01-22 21:22:32 +0100127 octetstring sres,
128 octetstring kc,
129 octetstring ik,
130 octetstring ck,
131 octetstring autn,
132 octetstring res,
Harald Welte3f95be82018-01-27 00:48:13 +0100133 GSUP_MSISDN msisdn,
Harald Weltedf327232017-12-28 22:51:51 +0100134 octetstring hlr_number,
135 GSUP_CnDomain cn_domain,
Harald Welteeded9ad2018-02-17 20:57:34 +0100136 /* PDP context + nested IEs */
137 GSUP_IEs pdp_info,
138 octetstring apn,
139 octetstring pdp_qos,
140 OCT2 pdp_type,
Harald Weltedf327232017-12-28 22:51:51 +0100141 octetstring charg_char
142};
143
144type record GSUP_PDU {
145 GSUP_MessageType msg_type,
146 GSUP_IEs ies
147};
148
149external function enc_GSUP_PDU(in GSUP_PDU msg) return octetstring
150 with { extension "prototype(convert) encode(RAW)" };
151
152external function dec_GSUP_PDU(in octetstring msg) return GSUP_PDU
153 with { extension "prototype(convert) decode(RAW)" };
154
Harald Welte2f562b12018-01-24 20:52:38 +0100155function f_gsup_postprocess_decoded(inout GSUP_PDU gsup) {
156 if (gsup.ies[0].tag == OSMO_GSUP_IMSI_IE) {
157 /* if last digit is 'F', then there's an odd number of digits and we must strip the F */
158 var integer num_digits := lengthof(gsup.ies[0].val.imsi);
159 if (gsup.ies[0].val.imsi[num_digits-1] == 'F'H) {
160 gsup.ies[0].val.imsi := substr(gsup.ies[0].val.imsi, 0, num_digits-1);
161 }
162 }
163}
164
165function f_gsup_preprocess_encoded(inout GSUP_PDU gsup) {
166 if (ischosen(gsup.ies[0].val.imsi)) {
167 /* if number of digits is odd, add a 'F' as padding at the end */
168 var integer num_digits := lengthof(gsup.ies[0].val.imsi);
169 if (num_digits rem 2 == 1) {
170 gsup.ies[0].val.imsi := gsup.ies[0].val.imsi & 'F'H;
171 }
172 }
173}
174
Harald Welte3f95be82018-01-27 00:48:13 +0100175template (value) GSUP_MSISDN ts_GSUP_MSISDN(hexstring digits,
176 BIT3 ton := '000'B,
177 BIT4 npi := '0000'B) := {
178 len := 0, /* overwritten */
179 /* numberingPlanIdentification := npi,
180 typeOfNumber := ton,
181 ext1 := '0'B, */
182 digits := digits
183}
184
185template GSUP_MSISDN tr_GSUP_MSISDN(template hexstring digits,
186 template BIT3 ton := ?,
187 template BIT4 npi := ?) := {
188 len := ?,
189 /* numberingPlanIdentification := npi,
190 typeOfNumber := ton,
191 ext1 := '0'B, */
192 digits := digits
193}
194
195
Harald Weltedf327232017-12-28 22:51:51 +0100196
Harald Welte77a8eba2018-01-22 21:22:32 +0100197template GSUP_IE ts_GSUP_IE_AuthTuple2G(octetstring rand, octetstring sres,
198 octetstring kc) := {
199 tag := OSMO_GSUP_AUTH_TUPLE_IE,
200 len := 0, /* overwritten */
201 val := {
202 auth_tuple := {
203 valueof(ts_GSUP_IE_RAND(rand)),
204 valueof(ts_GSUP_IE_SRES(sres)),
205 valueof(ts_GSUP_IE_Kc(kc))
206 }
207 }
208}
209
210template GSUP_IE ts_GSUP_IE_AuthTuple2G3G(octetstring rand, octetstring sres,
211 octetstring kc, octetstring ik,
212 octetstring ck, octetstring autn,
213 octetstring res) := {
214 tag := OSMO_GSUP_AUTH_TUPLE_IE,
215 len := 0, /* overwritten */
216 val := {
217 auth_tuple := {
218 valueof(ts_GSUP_IE_RAND(rand)),
219 valueof(ts_GSUP_IE_SRES(sres)),
220 valueof(ts_GSUP_IE_Kc(kc)),
221 valueof(ts_GSUP_IE_IK(ik)),
222 valueof(ts_GSUP_IE_CK(ck)),
223 valueof(ts_GSUP_IE_AUTN(autn)),
224 valueof(ts_GSUP_IE_RES(res))
225 }
226 }
227}
228
Harald Welteeded9ad2018-02-17 20:57:34 +0100229template GSUP_IE ts_GSUP_IE_PdpInfo(octetstring apn, octetstring pdp_type, octetstring pdp_qos) := {
230 tag := OSMO_GSUP_PDP_INFO_IE,
231 len := 0, /* overwritten */
232 val := {
233 pdp_info := {
234 valueof(ts_GSUP_IE_APN(apn)),
235 valueof(ts_GSUP_IE_PDP_TYPE(pdp_type)),
236 valueof(ts_GSUP_IE_PDP_QOS(pdp_qos))
237 }
238 }
239}
240
241template (value) GSUP_IE ts_GSUP_IE_PDP_TYPE(OCT2 pdp_type) := {
242 tag := OSMO_GSUP_PDP_TYPE_IE,
243 len := 0,
244 val := {
245 pdp_type := pdp_type
246 }
247}
248
249template (value) GSUP_IE ts_GSUP_IE_PDP_QOS(octetstring pdp_qos) := {
250 tag := OSMO_GSUP_PDP_QOS_IE,
251 len := 0,
252 val := {
253 pdp_qos := pdp_qos
254 }
255}
256
257
Harald Weltedf327232017-12-28 22:51:51 +0100258template GSUP_PDU tr_GSUP(template GSUP_MessageType msgt := ?, template GSUP_IEs ies := *) := {
259 msg_type := msgt,
260 ies := ies
261}
262
Harald Welte8a1dd532018-01-27 15:38:18 +0100263template GSUP_PDU tr_GSUP_IMSI(template GSUP_MessageType msgt := ?, template hexstring imsi) := {
264 msg_type := msgt,
265 ies := { tr_GSUP_IE_IMSI(imsi), * }
266}
267
Harald Weltedf327232017-12-28 22:51:51 +0100268template GSUP_PDU ts_GSUP(GSUP_MessageType msgt, GSUP_IEs ies := {}) := {
269 msg_type := msgt,
270 ies := ies
271}
272
Harald Welte6aa04e32018-01-27 15:35:19 +0100273template (value) GSUP_PDU ts_GSUP_SAI_REQ(hexstring imsi) :=
Harald Weltedf327232017-12-28 22:51:51 +0100274 ts_GSUP(OSMO_GSUP_MSGT_SEND_AUTH_INFO_REQUEST, { valueof(ts_GSUP_IE_IMSI(imsi)) });
275
Harald Welteef9fa872018-01-22 03:00:17 +0100276template GSUP_PDU tr_GSUP_SAI_REQ(template hexstring imsi) :=
Harald Welte8a1dd532018-01-27 15:38:18 +0100277 tr_GSUP_IMSI(OSMO_GSUP_MSGT_SEND_AUTH_INFO_REQUEST, imsi);
Harald Welteef9fa872018-01-22 03:00:17 +0100278
Harald Welte77a8eba2018-01-22 21:22:32 +0100279template (value) GSUP_PDU ts_GSUP_SAI_RES(hexstring imsi, GSUP_IE auth_tuple) :=
280 ts_GSUP(OSMO_GSUP_MSGT_SEND_AUTH_INFO_RESULT, {
281 valueof(ts_GSUP_IE_IMSI(imsi)), auth_tuple });
282
Harald Weltedf327232017-12-28 22:51:51 +0100283template GSUP_PDU tr_GSUP_SAI_ERR(template hexstring imsi, template integer cause) :=
Harald Welte071ed732018-01-23 19:53:52 +0100284 tr_GSUP(OSMO_GSUP_MSGT_SEND_AUTH_INFO_ERROR, {
Harald Weltedf327232017-12-28 22:51:51 +0100285 tr_GSUP_IE_IMSI(imsi), tr_GSUP_IE_Cause(cause) });
286
Harald Welte6aa04e32018-01-27 15:35:19 +0100287template (value) GSUP_PDU ts_GSUP_SAI_ERR(hexstring imsi, integer cause) :=
288 ts_GSUP(OSMO_GSUP_MSGT_SEND_AUTH_INFO_ERROR, {
289 valueof(ts_GSUP_IE_IMSI(imsi)), valueof(ts_GSUP_IE_Cause(cause)) });
Harald Welte071ed732018-01-23 19:53:52 +0100290
291
Harald Weltedf327232017-12-28 22:51:51 +0100292template GSUP_PDU tr_GSUP_SAI_RES(template hexstring imsi) :=
Harald Weltec2c52552018-03-01 21:20:39 +0100293 tr_GSUP(OSMO_GSUP_MSGT_SEND_AUTH_INFO_RESULT, {
Harald Weltedf327232017-12-28 22:51:51 +0100294 tr_GSUP_IE_IMSI(imsi), *, tr_GSUP_IE(OSMO_GSUP_AUTH_TUPLE_IE), * });
295
Harald Weltec2c52552018-03-01 21:20:39 +0100296template (value) GSUP_PDU ts_GSUP_UL_REQ(hexstring imsi) :=
297 ts_GSUP(OSMO_GSUP_MSGT_UPDATE_LOCATION_REQUEST, {
298 valueof(ts_GSUP_IE_IMSI(imsi)) });
299
Harald Weltedfe94dd2018-01-21 13:55:22 +0100300template GSUP_PDU tr_GSUP_UL_REQ(template hexstring imsi) :=
Harald Welte8a1dd532018-01-27 15:38:18 +0100301 tr_GSUP_IMSI(OSMO_GSUP_MSGT_UPDATE_LOCATION_REQUEST, imsi);
Harald Weltedfe94dd2018-01-21 13:55:22 +0100302
Harald Welte6aa04e32018-01-27 15:35:19 +0100303template (value) GSUP_PDU ts_GSUP_UL_RES(hexstring imsi) :=
Harald Weltedfe94dd2018-01-21 13:55:22 +0100304 ts_GSUP(OSMO_GSUP_MSGT_UPDATE_LOCATION_RESULT, { valueof(ts_GSUP_IE_IMSI(imsi)) });
305
Harald Weltec2c52552018-03-01 21:20:39 +0100306template GSUP_PDU tr_GSUP_UL_RES(template hexstring imsi) :=
307 tr_GSUP_IMSI(OSMO_GSUP_MSGT_UPDATE_LOCATION_RESULT, imsi);
308
Harald Welte6aa04e32018-01-27 15:35:19 +0100309template (value) GSUP_PDU ts_GSUP_UL_ERR(hexstring imsi, integer cause) :=
Harald Welte6ff81902018-01-21 19:09:08 +0100310 ts_GSUP(OSMO_GSUP_MSGT_UPDATE_LOCATION_ERROR, {
311 valueof(ts_GSUP_IE_IMSI(imsi)), valueof(ts_GSUP_IE_Cause(cause)) });
312
Harald Weltec2c52552018-03-01 21:20:39 +0100313template GSUP_PDU tr_GSUP_UL_ERR(template hexstring imsi, template integer cause := ?) :=
314 tr_GSUP(OSMO_GSUP_MSGT_UPDATE_LOCATION_ERROR, {
315 tr_GSUP_IE_IMSI(imsi), tr_GSUP_IE_Cause(cause) });
316
Harald Welte6aa04e32018-01-27 15:35:19 +0100317template (value) GSUP_PDU ts_GSUP_ISD_REQ(hexstring imsi, hexstring msisdn) :=
Harald Welte6ff81902018-01-21 19:09:08 +0100318 ts_GSUP(OSMO_GSUP_MSGT_INSERT_DATA_REQUEST, {
319 valueof(ts_GSUP_IE_IMSI(imsi)), valueof(ts_GSUP_IE_MSISDN(msisdn)) });
320
Harald Weltec2c52552018-03-01 21:20:39 +0100321template GSUP_PDU tr_GSUP_ISD_REQ(template hexstring imsi, template hexstring msisdn := ?) :=
322 tr_GSUP(OSMO_GSUP_MSGT_INSERT_DATA_REQUEST, {
Harald Welte8f6ac162018-03-01 22:43:28 +0100323 tr_GSUP_IE_IMSI(imsi), *, tr_GSUP_IE_MSISDN(msisdn), * });
Harald Weltec2c52552018-03-01 21:20:39 +0100324
325template (value) GSUP_PDU ts_GSUP_ISD_RES(hexstring imsi) :=
326 ts_GSUP(OSMO_GSUP_MSGT_INSERT_DATA_RESULT, {
327 valueof(ts_GSUP_IE_IMSI(imsi)) });
328
Harald Welte6ff81902018-01-21 19:09:08 +0100329template GSUP_PDU tr_GSUP_ISD_RES(template hexstring imsi) :=
Harald Welte8a1dd532018-01-27 15:38:18 +0100330 tr_GSUP_IMSI(OSMO_GSUP_MSGT_INSERT_DATA_RESULT, imsi);
Harald Weltedf327232017-12-28 22:51:51 +0100331
Harald Weltec638f4d2018-01-24 22:00:36 +0100332template GSUP_PDU tr_GSUP_AUTH_FAIL_IND(hexstring imsi) :=
Harald Welte8a1dd532018-01-27 15:38:18 +0100333 tr_GSUP_IMSI(OSMO_GSUP_MSGT_AUTH_FAIL_REPORT, imsi);
Harald Weltedf327232017-12-28 22:51:51 +0100334
Harald Welte167458a2018-01-27 15:58:16 +0100335template (value) GSUP_PDU ts_GSUP_CL_REQ(hexstring imsi, GSUP_CancelType ctype) :=
336 ts_GSUP(OSMO_GSUP_MSGT_LOCATION_CANCEL_REQUEST, {
337 valueof(ts_GSUP_IE_IMSI(imsi)), valueof(ts_GSUP_IE_CancelType(ctype)) });
338
339template GSUP_PDU tr_GSUP_CL_RES(template hexstring imsi) :=
340 tr_GSUP_IMSI(OSMO_GSUP_MSGT_LOCATION_CANCEL_RESULT, imsi);
341
342template GSUP_PDU tr_GSUP_CL_ERR(template hexstring imsi, template integer cause := ?) :=
343 tr_GSUP(OSMO_GSUP_MSGT_LOCATION_CANCEL_ERROR, {
344 tr_GSUP_IE_IMSI(imsi), tr_GSUP_IE_Cause(cause) });
345
Harald Welte958f8b42018-03-01 23:40:17 +0100346template (value) GSUP_PDU ts_GSUP_PURGE_MS_REQ(hexstring imsi, GSUP_CnDomain dom) :=
347 ts_GSUP(OSMO_GSUP_MSGT_PURGE_MS_REQUEST, {
348 valueof(ts_GSUP_IE_IMSI(imsi)), valueof(ts_GSUP_IE_CnDomain(dom)) });
349
Harald Welte6abb9fe2018-02-17 15:24:48 +0100350template GSUP_PDU tr_GSUP_PURGE_MS_REQ(template hexstring imsi, template GSUP_CnDomain dom := ?) :=
351 tr_GSUP(OSMO_GSUP_MSGT_PURGE_MS_REQUEST, {
352 tr_GSUP_IE_IMSI(imsi), *, tr_GSUP_IE_CnDomain(dom) });
353
354template (value) GSUP_PDU ts_GSUP_PURGE_MS_RES(hexstring imsi) :=
355 ts_GSUP(OSMO_GSUP_MSGT_PURGE_MS_RESULT, {
356 valueof(ts_GSUP_IE_IMSI(imsi)) });
357
Harald Welte958f8b42018-03-01 23:40:17 +0100358template GSUP_PDU tr_GSUP_PURGE_MS_RES(template hexstring imsi) :=
359 tr_GSUP(OSMO_GSUP_MSGT_PURGE_MS_RESULT, {
360 tr_GSUP_IE_IMSI(imsi), * });
361
362template GSUP_PDU tr_GSUP_PURGE_MS_ERR(template hexstring imsi, template integer cause) :=
363 tr_GSUP(OSMO_GSUP_MSGT_PURGE_MS_ERROR, {
364 tr_GSUP_IE_IMSI(imsi), tr_GSUP_IE_Cause(cause) });
365
Harald Welte167458a2018-01-27 15:58:16 +0100366
367template (value) GSUP_IE ts_GSUP_IE_CancelType(GSUP_CancelType ctype) := {
368 tag := OSMO_GSUP_CANCEL_TYPE_IE,
369 len := 0, /* overwritten */
370 val := {
371 cancel_type := ctype
372 }
373}
374
375template GSUP_IE tr_GSUP_IE_CancelType(template GSUP_CancelType ctype) :=
376 tr_GSUP_IE(OSMO_GSUP_CANCEL_TYPE_IE, GSUP_IeValue:{cancel_type:=ctype});
377
Harald Welte6abb9fe2018-02-17 15:24:48 +0100378template GSUP_IE tr_GSUP_IE_CnDomain(template GSUP_CnDomain domain) :=
379 tr_GSUP_IE(OSMO_GSUP_CN_DOMAIN_IE, GSUP_IeValue:{cn_domain:=domain});
380
Harald Weltedf327232017-12-28 22:51:51 +0100381template GSUP_IE tr_GSUP_IE(template GSUP_IEI iei, template GSUP_IeValue val := ?) := {
382 tag := iei,
383 len := ?,
384 val := val
385}
386
387template (value) GSUP_IE ts_GSUP_IE_IMSI(hexstring imsi) := {
388 tag := OSMO_GSUP_IMSI_IE,
389 len := 0, /* overwritten */
390 val := {
391 imsi := imsi
392 }
393}
394
395template GSUP_IE tr_GSUP_IE_IMSI(template hexstring imsi) := {
396 tag := OSMO_GSUP_IMSI_IE,
397 len := ?,
398 val := {
399 imsi := imsi
400 }
401}
402
Harald Welte6ff81902018-01-21 19:09:08 +0100403template (value) GSUP_IE ts_GSUP_IE_MSISDN(hexstring msisdn) := {
404 tag := OSMO_GSUP_MSISDN_IE,
405 len := 0, /* overwritten */
406 val := {
Harald Welte3f95be82018-01-27 00:48:13 +0100407 msisdn := ts_GSUP_MSISDN(msisdn)
Harald Welte6ff81902018-01-21 19:09:08 +0100408 }
409}
410
411template GSUP_IE tr_GSUP_IE_MSISDN(template hexstring msisdn) := {
412 tag := OSMO_GSUP_MSISDN_IE,
413 len := ?,
414 val := {
Harald Welte3f95be82018-01-27 00:48:13 +0100415 msisdn := tr_GSUP_MSISDN(msisdn)
Harald Welte6ff81902018-01-21 19:09:08 +0100416 }
417}
418
419
Harald Weltedf327232017-12-28 22:51:51 +0100420template (value) GSUP_IE ts_GSUP_IE_Cause(integer cause) := {
421 tag := OSMO_GSUP_CAUSE_IE,
422 len := 0, /* overwritten */
423 val := {
424 cause := cause
425 }
426}
427
428template GSUP_IE tr_GSUP_IE_Cause(template integer cause) := {
429 tag := OSMO_GSUP_CAUSE_IE,
430 len := ?,
431 val := {
432 cause := cause
433 }
434}
435
436template (value) GSUP_IE ts_GSUP_IE_AUTS(octetstring auts) := {
437 tag := OSMO_GSUP_AUTS_IE,
438 len := 0, /* overwritten */
439 val := {
440 auts := auts
441 }
442}
443
444template (value) GSUP_IE ts_GSUP_IE_RAND(octetstring rand) := {
445 tag := OSMO_GSUP_RAND_IE,
446 len := 0, /* overwritten */
447 val := {
448 rand := rand
449 }
450}
451
Harald Welte77a8eba2018-01-22 21:22:32 +0100452template (value) GSUP_IE ts_GSUP_IE_SRES(octetstring sres) := {
453 tag := OSMO_GSUP_SRES_IE,
454 len := 0, /* overwritten */
455 val := {
456 sres := sres
457 }
458}
459
460template (value) GSUP_IE ts_GSUP_IE_Kc(octetstring kc) := {
461 tag := OSMO_GSUP_KC_IE,
462 len := 0, /* overwritten */
463 val := {
464 kc := kc
465 }
466}
467
468template (value) GSUP_IE ts_GSUP_IE_IK(octetstring ik) := {
469 tag := OSMO_GSUP_IK_IE,
470 len := 0, /* overwritten */
471 val := {
472 ik := ik
473 }
474}
475
476template (value) GSUP_IE ts_GSUP_IE_CK(octetstring ck) := {
477 tag := OSMO_GSUP_CK_IE,
478 len := 0, /* overwritten */
479 val := {
480 ck := ck
481 }
482}
483
484template (value) GSUP_IE ts_GSUP_IE_AUTN(octetstring autn) := {
485 tag := OSMO_GSUP_AUTN_IE,
486 len := 0, /* overwritten */
487 val := {
488 autn := autn
489 }
490}
491
492template (value) GSUP_IE ts_GSUP_IE_RES(octetstring res) := {
493 tag := OSMO_GSUP_RES_IE,
494 len := 0, /* overwritten */
495 val := {
496 res := res
497 }
498}
Harald Weltedf327232017-12-28 22:51:51 +0100499
Harald Welteeded9ad2018-02-17 20:57:34 +0100500template (value) GSUP_IE ts_GSUP_IE_APN(octetstring apn) := {
501 tag := OSMO_GSUP_ACCESS_POINT_NAME_IE,
502 len := 0, /* overwritten */
503 val := {
504 apn := apn
505 }
506}
507
Harald Welte958f8b42018-03-01 23:40:17 +0100508template (value) GSUP_IE ts_GSUP_IE_CnDomain(GSUP_CnDomain dom) := {
509 tag := OSMO_GSUP_CN_DOMAIN_IE,
510 len := 0, /* overwritten */
511 val := {
512 cn_domain := dom
513 }
514}
Harald Weltedf327232017-12-28 22:51:51 +0100515
516
517} with { encode "RAW"; variant "FIELDORDER(msb)" }